Merge "[Output Swithcer] Fix volume control issue for Group" into tm-d1-dev am: 4fffb051d5

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19535141

Change-Id: I3d9554fc12371166ca2b748ab063461f3967bcb7
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/apct-tests/perftests/windowmanager/src/android/wm/WindowAddRemovePerfTest.java b/apct-tests/perftests/windowmanager/src/android/wm/WindowAddRemovePerfTest.java
index 452bb0a..f844ba3 100644
--- a/apct-tests/perftests/windowmanager/src/android/wm/WindowAddRemovePerfTest.java
+++ b/apct-tests/perftests/windowmanager/src/android/wm/WindowAddRemovePerfTest.java
@@ -19,6 +19,7 @@
 import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR;
 import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
 
+import android.graphics.Rect;
 import android.os.RemoteException;
 import android.os.SystemClock;
 import android.perftests.utils.ManualBenchmarkState;
@@ -86,6 +87,8 @@
         final InsetsVisibilities mRequestedVisibilities = new InsetsVisibilities();
         final InsetsState mOutInsetsState = new InsetsState();
         final InsetsSourceControl[] mOutControls = new InsetsSourceControl[0];
+        final Rect mOutAttachedFrame = new Rect();
+        final float[] mOutSizeCompatScale = { 1f };
 
         TestWindow() {
             mLayoutParams.setTitle(TestWindow.class.getName());
@@ -104,7 +107,7 @@
                 long startTime = SystemClock.elapsedRealtimeNanos();
                 session.addToDisplay(this, mLayoutParams, View.VISIBLE,
                         Display.DEFAULT_DISPLAY, mRequestedVisibilities, inputChannel,
-                        mOutInsetsState, mOutControls);
+                        mOutInsetsState, mOutControls, mOutAttachedFrame, mOutSizeCompatScale);
                 final long elapsedTimeNsOfAdd = SystemClock.elapsedRealtimeNanos() - startTime;
                 state.addExtraResult("add", elapsedTimeNsOfAdd);
 
diff --git a/apex/jobscheduler/framework/java/com/android/server/usage/AppStandbyInternal.java b/apex/jobscheduler/framework/java/com/android/server/usage/AppStandbyInternal.java
index c43c8329..9b64edf 100644
--- a/apex/jobscheduler/framework/java/com/android/server/usage/AppStandbyInternal.java
+++ b/apex/jobscheduler/framework/java/com/android/server/usage/AppStandbyInternal.java
@@ -164,6 +164,13 @@
             @ElapsedRealtimeLong long elapsedRealtime);
 
     /**
+     * Puts the list of apps in the {@link android.app.usage.UsageStatsManager#STANDBY_BUCKET_RARE}
+     * bucket.
+     * @param restoredApps the list of restored apps
+     */
+    void restoreAppsToRare(@NonNull Set<String> restoredApps, int userId);
+
+    /**
      * Put the specified app in the
      * {@link android.app.usage.UsageStatsManager#STANDBY_BUCKET_RESTRICTED}
      * bucket. If it has been used by the user recently, the restriction will delayed until an
diff --git a/apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java b/apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java
index 2eb86c1..40d1b4c 100644
--- a/apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java
+++ b/apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java
@@ -73,6 +73,7 @@
 import android.os.ShellCallback;
 import android.os.ShellCommand;
 import android.os.SystemClock;
+import android.os.Trace;
 import android.os.UserHandle;
 import android.provider.DeviceConfig;
 import android.util.ArrayMap;
@@ -2329,8 +2330,8 @@
             // a battery update the next time the level drops.
             mCharging = true;
             mActiveReason = ACTIVE_REASON_UNKNOWN;
-            mState = STATE_ACTIVE;
-            mLightState = LIGHT_STATE_ACTIVE;
+            moveToStateLocked(STATE_ACTIVE, "boot");
+            moveToLightStateLocked(LIGHT_STATE_ACTIVE, "boot");
             mInactiveTimeout = mConstants.INACTIVE_TIMEOUT;
             mPreIdleFactor = 1.0f;
             mLastPreIdleFactor = 1.0f;
@@ -3173,8 +3174,7 @@
                     + ", changeLightIdle=" + changeLightIdle);
         }
         if (mState != STATE_ACTIVE || mLightState != STATE_ACTIVE) {
-            EventLogTags.writeDeviceIdle(STATE_ACTIVE, activeReason);
-            mState = STATE_ACTIVE;
+            moveToStateLocked(STATE_ACTIVE, activeReason);
             mInactiveTimeout = newInactiveTimeout;
             resetIdleManagementLocked();
             // Don't reset maintenance window start time if we're in a light idle maintenance window
@@ -3184,8 +3184,7 @@
             }
 
             if (changeLightIdle) {
-                EventLogTags.writeDeviceIdleLight(LIGHT_STATE_ACTIVE, activeReason);
-                mLightState = LIGHT_STATE_ACTIVE;
+                moveToLightStateLocked(LIGHT_STATE_ACTIVE, activeReason);
                 resetLightIdleManagementLocked();
                 // Only report active if light is also ACTIVE.
                 scheduleReportActiveLocked(activeReason, activeUid);
@@ -3258,11 +3257,7 @@
                     // values, so returning here is safe.
                     return;
                 }
-                if (DEBUG) {
-                    Slog.d(TAG, "Moved from "
-                            + stateToString(mState) + " to STATE_QUICK_DOZE_DELAY");
-                }
-                mState = STATE_QUICK_DOZE_DELAY;
+                moveToStateLocked(STATE_QUICK_DOZE_DELAY, "no activity");
                 // Make sure any motion sensing or locating is stopped.
                 resetIdleManagementLocked();
                 if (isUpcomingAlarmClock()) {
@@ -3277,10 +3272,8 @@
                     // recently closed app) needs to finish running.
                     scheduleAlarmLocked(mConstants.QUICK_DOZE_DELAY_TIMEOUT, false);
                 }
-                EventLogTags.writeDeviceIdle(mState, "no activity");
             } else if (mState == STATE_ACTIVE) {
-                mState = STATE_INACTIVE;
-                if (DEBUG) Slog.d(TAG, "Moved from STATE_ACTIVE to STATE_INACTIVE");
+                moveToStateLocked(STATE_INACTIVE, "no activity");
                 resetIdleManagementLocked();
                 long delay = mInactiveTimeout;
                 if (shouldUseIdleTimeoutFactorLocked()) {
@@ -3296,12 +3289,10 @@
                 } else {
                     scheduleAlarmLocked(delay, false);
                 }
-                EventLogTags.writeDeviceIdle(mState, "no activity");
             }
         }
         if (mLightState == LIGHT_STATE_ACTIVE && mLightEnabled) {
-            mLightState = LIGHT_STATE_INACTIVE;
-            if (DEBUG) Slog.d(TAG, "Moved from LIGHT_STATE_ACTIVE to LIGHT_STATE_INACTIVE");
+            moveToLightStateLocked(LIGHT_STATE_INACTIVE, "no activity");
             resetLightIdleManagementLocked();
             scheduleLightAlarmLocked(mConstants.LIGHT_IDLE_AFTER_INACTIVE_TIMEOUT,
                     mConstants.FLEX_TIME_SHORT);
@@ -3309,7 +3300,6 @@
             // timeout and a single light idle period.
             scheduleLightMaintenanceAlarmLocked(
                     mConstants.LIGHT_IDLE_AFTER_INACTIVE_TIMEOUT + mConstants.LIGHT_IDLE_TIMEOUT);
-            EventLogTags.writeDeviceIdleLight(mLightState, "no activity");
         }
     }
 
@@ -3429,12 +3419,7 @@
                 // time from now.
                 scheduleLightAlarmLocked(mCurLightIdleBudget, mConstants.FLEX_TIME_SHORT);
                 scheduleLightMaintenanceAlarmLocked(mCurLightIdleBudget + mNextLightIdleDelay);
-                if (DEBUG) {
-                    Slog.d(TAG, "Moved from " + lightStateToString(mLightState)
-                            + " to LIGHT_STATE_IDLE_MAINTENANCE");
-                }
-                mLightState = LIGHT_STATE_IDLE_MAINTENANCE;
-                EventLogTags.writeDeviceIdleLight(mLightState, reason);
+                moveToLightStateLocked(LIGHT_STATE_IDLE_MAINTENANCE, reason);
                 addEvent(EVENT_LIGHT_MAINTENANCE, null);
                 mHandler.sendEmptyMessage(MSG_REPORT_IDLE_OFF);
             } else {
@@ -3443,9 +3428,7 @@
                 // We'll only wait for another full idle period, however, and then give up.
                 scheduleLightMaintenanceAlarmLocked(mNextLightIdleDelay);
                 cancelLightAlarmLocked();
-                if (DEBUG) Slog.d(TAG, "Moved to LIGHT_WAITING_FOR_NETWORK.");
-                mLightState = LIGHT_STATE_WAITING_FOR_NETWORK;
-                EventLogTags.writeDeviceIdleLight(mLightState, reason);
+                moveToLightStateLocked(LIGHT_STATE_WAITING_FOR_NETWORK, reason);
             }
         } else {
             if (mMaintenanceStartTime != 0) {
@@ -3469,9 +3452,7 @@
             // maintenance window, so reschedule the alarm starting from now.
             scheduleLightMaintenanceAlarmLocked(mNextLightIdleDelay);
             cancelLightAlarmLocked();
-            if (DEBUG) Slog.d(TAG, "Moved to LIGHT_STATE_IDLE.");
-            mLightState = LIGHT_STATE_IDLE;
-            EventLogTags.writeDeviceIdleLight(mLightState, reason);
+            moveToLightStateLocked(LIGHT_STATE_IDLE, reason);
             addEvent(EVENT_LIGHT_IDLE, null);
             mGoingIdleWakeLock.acquire();
             mHandler.sendEmptyMessage(MSG_REPORT_IDLE_ON_LIGHT);
@@ -3535,12 +3516,11 @@
                 moveToStateLocked(STATE_IDLE_PENDING, reason);
                 break;
             case STATE_IDLE_PENDING:
-                moveToStateLocked(STATE_SENSING, reason);
                 cancelLocatingLocked();
                 mLocated = false;
                 mLastGenericLocation = null;
                 mLastGpsLocation = null;
-                updateActiveConstraintsLocked();
+                moveToStateLocked(STATE_SENSING, reason);
 
                 // Wait for open constraints and an accelerometer reading before moving on.
                 if (mUseMotionSensor && mAnyMotionDetector.hasSensor()) {
@@ -3609,7 +3589,7 @@
                 }
                 moveToStateLocked(STATE_IDLE, reason);
                 if (mLightState != LIGHT_STATE_OVERRIDE) {
-                    mLightState = LIGHT_STATE_OVERRIDE;
+                    moveToLightStateLocked(LIGHT_STATE_OVERRIDE, "deep");
                     cancelAllLightAlarmsLocked();
                 }
                 addEvent(EVENT_DEEP_IDLE, null);
@@ -3637,14 +3617,27 @@
     }
 
     @GuardedBy("this")
+    private void moveToLightStateLocked(int state, String reason) {
+        if (DEBUG) {
+            Slog.d(TAG, String.format("Moved from LIGHT_STATE_%s to LIGHT_STATE_%s.",
+                    lightStateToString(mLightState), lightStateToString(state)));
+        }
+        mLightState = state;
+        EventLogTags.writeDeviceIdleLight(mLightState, reason);
+        // This is currently how to set the current state in a trace.
+        Trace.traceCounter(Trace.TRACE_TAG_SYSTEM_SERVER, "DozeLightState", state);
+    }
+
+    @GuardedBy("this")
     private void moveToStateLocked(int state, String reason) {
-        final int oldState = mState;
-        mState = state;
         if (DEBUG) {
             Slog.d(TAG, String.format("Moved from STATE_%s to STATE_%s.",
-                    stateToString(oldState), stateToString(mState)));
+                    stateToString(mState), stateToString(state)));
         }
+        mState = state;
         EventLogTags.writeDeviceIdle(mState, reason);
+        // This is currently how to set the current state in a trace.
+        Trace.traceCounter(Trace.TRACE_TAG_SYSTEM_SERVER, "DozeDeepState", state);
         updateActiveConstraintsLocked();
     }
 
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 d6b246a..c94cc8f 100644
--- a/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java
+++ b/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java
@@ -335,12 +335,18 @@
             "REORDER_ALARMS_FOR_TARE",
     });
 
-    BroadcastOptions mOptsWithFgs = BroadcastOptions.makeBasic();
-    BroadcastOptions mOptsWithFgsForAlarmClock = BroadcastOptions.makeBasic();
-    BroadcastOptions mOptsWithoutFgs = BroadcastOptions.makeBasic();
-    BroadcastOptions mOptsTimeBroadcast = BroadcastOptions.makeBasic();
+    BroadcastOptions mOptsWithFgs = makeBasicAlarmBroadcastOptions();
+    BroadcastOptions mOptsWithFgsForAlarmClock = makeBasicAlarmBroadcastOptions();
+    BroadcastOptions mOptsWithoutFgs = makeBasicAlarmBroadcastOptions();
+    BroadcastOptions mOptsTimeBroadcast = makeBasicAlarmBroadcastOptions();
     ActivityOptions mActivityOptsRestrictBal = ActivityOptions.makeBasic();
-    BroadcastOptions mBroadcastOptsRestrictBal = BroadcastOptions.makeBasic();
+    BroadcastOptions mBroadcastOptsRestrictBal = makeBasicAlarmBroadcastOptions();
+
+    private static BroadcastOptions makeBasicAlarmBroadcastOptions() {
+        final BroadcastOptions b = BroadcastOptions.makeBasic();
+        b.setAlarmBroadcast(true);
+        return b;
+    }
 
     // TODO(b/172085676): Move inside alarm store.
     private final SparseArray<AlarmManager.AlarmClockInfo> mNextAlarmClockForUser =
@@ -2889,7 +2895,11 @@
                 } else {
                     needsPermission = false;
                     lowerQuota = allowWhileIdle;
-                    idleOptions = allowWhileIdle ? mOptsWithFgs.toBundle() : null;
+                    idleOptions = (allowWhileIdle || (alarmClock != null))
+                            // This avoids exceptions on existing alarms when the app upgrades to
+                            // target S. Note that FGS from pre-S apps isn't restricted anyway.
+                            ? mOptsWithFgs.toBundle()
+                            : null;
                     if (exact) {
                         exactAllowReason = EXACT_ALLOW_REASON_COMPAT;
                     }
diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/BatteryController.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/BatteryController.java
index 63781ae..5ef6855 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/controllers/BatteryController.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/BatteryController.java
@@ -34,6 +34,7 @@
 import android.util.proto.ProtoOutputStream;
 
 import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.server.JobSchedulerBackgroundThread;
 import com.android.server.LocalServices;
 import com.android.server.job.JobSchedulerService;
@@ -100,6 +101,10 @@
     @Override
     @GuardedBy("mLock")
     public void prepareForExecutionLocked(JobStatus jobStatus) {
+        if (!jobStatus.hasPowerConstraint()) {
+            // Ignore all jobs the controller wouldn't be tracking.
+            return;
+        }
         if (DEBUG) {
             Slog.d(TAG, "Prepping for " + jobStatus.toShortString());
         }
@@ -259,6 +264,16 @@
         }
     }
 
+    @VisibleForTesting
+    ArraySet<JobStatus> getTrackedJobs() {
+        return mTrackedTasks;
+    }
+
+    @VisibleForTesting
+    ArraySet<JobStatus> getTopStartedJobs() {
+        return mTopStartedJobs;
+    }
+
     @Override
     public void dumpControllerStateLocked(IndentingPrintWriter pw,
             Predicate<JobStatus> predicate) {
diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java
index 251cf56..ebafba5 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java
@@ -513,6 +513,9 @@
         if (latestRunTimeElapsedMillis != NO_LATEST_RUNTIME) {
             requiredConstraints |= CONSTRAINT_DEADLINE;
         }
+        if (job.isPrefetch()) {
+            requiredConstraints |= CONSTRAINT_PREFETCH;
+        }
         boolean exemptedMediaUrisOnly = false;
         if (job.getTriggerContentUris() != null) {
             requiredConstraints |= CONSTRAINT_CONTENT_TRIGGER;
diff --git a/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java b/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java
index 9e3e355..5d9f335 100644
--- a/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java
+++ b/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java
@@ -23,6 +23,7 @@
 import static android.app.usage.UsageStatsManager.REASON_MAIN_PREDICTED;
 import static android.app.usage.UsageStatsManager.REASON_MAIN_TIMEOUT;
 import static android.app.usage.UsageStatsManager.REASON_MAIN_USAGE;
+import static android.app.usage.UsageStatsManager.REASON_SUB_DEFAULT_APP_RESTORED;
 import static android.app.usage.UsageStatsManager.REASON_SUB_DEFAULT_APP_UPDATE;
 import static android.app.usage.UsageStatsManager.REASON_SUB_FORCED_SYSTEM_FLAG_BUGGY;
 import static android.app.usage.UsageStatsManager.REASON_SUB_FORCED_USER_FLAG_INTERACTION;
@@ -1605,6 +1606,26 @@
     }
 
     @Override
+    public void restoreAppsToRare(Set<String> restoredApps, int userId) {
+        final int reason = REASON_MAIN_DEFAULT | REASON_SUB_DEFAULT_APP_RESTORED;
+        final long nowElapsed = mInjector.elapsedRealtime();
+        for (String packageName : restoredApps) {
+            // If the package is not installed, don't allow the bucket to be set.
+            if (!mInjector.isPackageInstalled(packageName, 0, userId)) {
+                Slog.e(TAG, "Tried to restore bucket for uninstalled app: " + packageName);
+                continue;
+            }
+
+            final int standbyBucket = getAppStandbyBucket(packageName, userId, nowElapsed, false);
+            // Only update the standby bucket to RARE if the app is still in the NEVER bucket.
+            if (standbyBucket == STANDBY_BUCKET_NEVER) {
+                setAppStandbyBucket(packageName, userId, STANDBY_BUCKET_RARE, reason,
+                        nowElapsed, false);
+            }
+        }
+    }
+
+    @Override
     public void setAppStandbyBucket(@NonNull String packageName, int bucket, int userId,
             int callingUid, int callingPid) {
         setAppStandbyBuckets(
diff --git a/boot/boot-image-profile.txt b/boot/boot-image-profile.txt
index 5a1a9ef..b52ddb0 100644
--- a/boot/boot-image-profile.txt
+++ b/boot/boot-image-profile.txt
@@ -26,7 +26,7 @@
 HSPLandroid/accounts/Account;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/accounts/Account;->equals(Ljava/lang/Object;)Z
 HSPLandroid/accounts/Account;->hashCode()I
-HSPLandroid/accounts/Account;->toString()Ljava/lang/String;
+HSPLandroid/accounts/Account;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/accounts/Account;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/accounts/AccountManager$10;-><init>(Landroid/accounts/AccountManager;Landroid/app/Activity;Landroid/os/Handler;Landroid/accounts/AccountManagerCallback;Landroid/accounts/Account;Ljava/lang/String;ZLandroid/os/Bundle;)V
 HSPLandroid/accounts/AccountManager$10;->doWork()V
@@ -120,21 +120,29 @@
 HSPLandroid/accounts/IAccountManagerResponse$Stub;-><init>()V
 HSPLandroid/accounts/IAccountManagerResponse$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/accounts/IAccountManagerResponse$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/animation/AnimationHandler$$ExternalSyntheticLambda0;-><init>(Landroid/animation/AnimationHandler;)V
+HSPLandroid/animation/AnimationHandler$$ExternalSyntheticLambda0;->doFrame(J)V
 HSPLandroid/animation/AnimationHandler$1;-><init>(Landroid/animation/AnimationHandler;)V
 HSPLandroid/animation/AnimationHandler$1;->doFrame(J)V+]Landroid/animation/AnimationHandler$AnimationFrameCallbackProvider;Landroid/animation/AnimationHandler$MyFrameCallbackProvider;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/animation/AnimationHandler$MyFrameCallbackProvider;-><init>(Landroid/animation/AnimationHandler;)V
 HSPLandroid/animation/AnimationHandler$MyFrameCallbackProvider;->getFrameTime()J
 HSPLandroid/animation/AnimationHandler$MyFrameCallbackProvider;->postFrameCallback(Landroid/view/Choreographer$FrameCallback;)V
 HSPLandroid/animation/AnimationHandler;-><init>()V
-HSPLandroid/animation/AnimationHandler;->addAnimationFrameCallback(Landroid/animation/AnimationHandler$AnimationFrameCallback;J)V
-HSPLandroid/animation/AnimationHandler;->autoCancelBasedOn(Landroid/animation/ObjectAnimator;)V
-HSPLandroid/animation/AnimationHandler;->cleanUpList()V
+HSPLandroid/animation/AnimationHandler;->addAnimationFrameCallback(Landroid/animation/AnimationHandler$AnimationFrameCallback;J)V+]Landroid/animation/AnimationHandler$AnimationFrameCallbackProvider;Landroid/animation/AnimationHandler$MyFrameCallbackProvider;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/animation/AnimationHandler;->autoCancelBasedOn(Landroid/animation/ObjectAnimator;)V+]Landroid/animation/ObjectAnimator;Landroid/animation/ObjectAnimator;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/animation/AnimationHandler;->cleanUpList()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/animation/AnimationHandler;->doAnimationFrame(J)V+]Landroid/animation/AnimationHandler$AnimationFrameCallback;Landroid/animation/ObjectAnimator;,Landroid/animation/AnimatorSet;,Landroid/animation/ValueAnimator;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLandroid/animation/AnimationHandler;->getAnimationCount()I
-HSPLandroid/animation/AnimationHandler;->getInstance()Landroid/animation/AnimationHandler;
+HSPLandroid/animation/AnimationHandler;->getAnimationCount()I+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
+HSPLandroid/animation/AnimationHandler;->getInstance()Landroid/animation/AnimationHandler;+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
 HSPLandroid/animation/AnimationHandler;->getProvider()Landroid/animation/AnimationHandler$AnimationFrameCallbackProvider;
 HSPLandroid/animation/AnimationHandler;->isCallbackDue(Landroid/animation/AnimationHandler$AnimationFrameCallback;J)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
-HSPLandroid/animation/AnimationHandler;->removeCallback(Landroid/animation/AnimationHandler$AnimationFrameCallback;)V
+HSPLandroid/animation/AnimationHandler;->isPauseBgAnimationsEnabledInSystemProperties()Z
+HSPLandroid/animation/AnimationHandler;->lambda$new$0$android-animation-AnimationHandler(J)V
+HSPLandroid/animation/AnimationHandler;->removeCallback(Landroid/animation/AnimationHandler$AnimationFrameCallback;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/animation/AnimationHandler;->requestAnimatorsEnabled(ZLjava/lang/Object;)V
+HSPLandroid/animation/AnimationHandler;->requestAnimatorsEnabledImpl(ZLjava/lang/Object;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/view/Choreographer;Landroid/view/Choreographer;
+HSPLandroid/animation/AnimationHandler;->resumeAnimators()V+]Landroid/view/Choreographer;Landroid/view/Choreographer;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/animation/AnimationHandler;->setAnimatorPausingEnabled(Z)V
 HSPLandroid/animation/AnimationHandler;->setProvider(Landroid/animation/AnimationHandler$AnimationFrameCallbackProvider;)V
 HSPLandroid/animation/Animator$AnimatorConstantState;-><init>(Landroid/animation/Animator;)V
 HSPLandroid/animation/Animator$AnimatorConstantState;->getChangingConfigurations()I
@@ -143,11 +151,12 @@
 HSPLandroid/animation/Animator$AnimatorListener;->onAnimationEnd(Landroid/animation/Animator;Z)V+]Landroid/animation/Animator$AnimatorListener;missing_types
 HSPLandroid/animation/Animator$AnimatorListener;->onAnimationStart(Landroid/animation/Animator;Z)V+]Landroid/animation/Animator$AnimatorListener;missing_types
 HSPLandroid/animation/Animator;-><init>()V
-HSPLandroid/animation/Animator;->addListener(Landroid/animation/Animator$AnimatorListener;)V
+HSPLandroid/animation/Animator;->addListener(Landroid/animation/Animator$AnimatorListener;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/animation/Animator;->addPauseListener(Landroid/animation/Animator$AnimatorPauseListener;)V
 HSPLandroid/animation/Animator;->appendChangingConfigurations(I)V
 HSPLandroid/animation/Animator;->clone()Landroid/animation/Animator;
 HSPLandroid/animation/Animator;->createConstantState()Landroid/content/res/ConstantState;
+HSPLandroid/animation/Animator;->getBackgroundPauseDelay()J
 HSPLandroid/animation/Animator;->getChangingConfigurations()I
 HSPLandroid/animation/Animator;->getListeners()Ljava/util/ArrayList;
 HSPLandroid/animation/Animator;->pause()V
@@ -181,7 +190,7 @@
 HSPLandroid/animation/AnimatorSet$3;->compare(Landroid/animation/AnimatorSet$AnimationEvent;Landroid/animation/AnimatorSet$AnimationEvent;)I
 HSPLandroid/animation/AnimatorSet$3;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLandroid/animation/AnimatorSet$AnimationEvent;-><init>(Landroid/animation/AnimatorSet$Node;I)V
-HSPLandroid/animation/AnimatorSet$AnimationEvent;->getTime()J+]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;,Landroid/animation/AnimatorSet;,Landroid/animation/ValueAnimator;
+HSPLandroid/animation/AnimatorSet$AnimationEvent;->getTime()J+]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;,Landroid/animation/ValueAnimator;,Landroid/animation/AnimatorSet;
 HSPLandroid/animation/AnimatorSet$Builder;-><init>(Landroid/animation/AnimatorSet;Landroid/animation/Animator;)V
 HSPLandroid/animation/AnimatorSet$Builder;->after(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;
 HSPLandroid/animation/AnimatorSet$Builder;->before(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;
@@ -196,13 +205,13 @@
 HSPLandroid/animation/AnimatorSet$SeekState;->getPlayTimeNormalized()J
 HSPLandroid/animation/AnimatorSet$SeekState;->isActive()Z
 HSPLandroid/animation/AnimatorSet$SeekState;->reset()V
-HSPLandroid/animation/AnimatorSet;-><init>()V
+HSPLandroid/animation/AnimatorSet;-><init>()V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/ValueAnimator;Landroid/animation/ValueAnimator;
 HSPLandroid/animation/AnimatorSet;->addAnimationCallback(J)V
 HSPLandroid/animation/AnimatorSet;->addAnimationEndListener()V
 HSPLandroid/animation/AnimatorSet;->cancel()V
 HSPLandroid/animation/AnimatorSet;->clone()Landroid/animation/Animator;
-HSPLandroid/animation/AnimatorSet;->clone()Landroid/animation/AnimatorSet;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/AnimatorSet$Node;Landroid/animation/AnimatorSet$Node;]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;,Landroid/animation/ValueAnimator;
-HSPLandroid/animation/AnimatorSet;->createDependencyGraph()V
+HSPLandroid/animation/AnimatorSet;->clone()Landroid/animation/AnimatorSet;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/AnimatorSet$Node;Landroid/animation/AnimatorSet$Node;]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;,Landroid/animation/ValueAnimator;,Landroid/animation/AnimatorSet;
+HSPLandroid/animation/AnimatorSet;->createDependencyGraph()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/AnimatorSet$AnimationEvent;Landroid/animation/AnimatorSet$AnimationEvent;]Landroid/animation/AnimatorSet$Node;Landroid/animation/AnimatorSet$Node;]Landroid/animation/ValueAnimator;Landroid/animation/ValueAnimator;]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;,Landroid/animation/AnimatorSet;,Landroid/animation/ValueAnimator;
 HSPLandroid/animation/AnimatorSet;->doAnimationFrame(J)Z+]Landroid/animation/AnimatorSet$SeekState;Landroid/animation/AnimatorSet$SeekState;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/animation/AnimatorSet;->end()V
 HSPLandroid/animation/AnimatorSet;->endAnimation()V
@@ -215,7 +224,7 @@
 HSPLandroid/animation/AnimatorSet;->getPlayTimeForNode(JLandroid/animation/AnimatorSet$Node;Z)J
 HSPLandroid/animation/AnimatorSet;->getStartDelay()J
 HSPLandroid/animation/AnimatorSet;->getTotalDuration()J
-HSPLandroid/animation/AnimatorSet;->handleAnimationEvents(IIJ)V
+HSPLandroid/animation/AnimatorSet;->handleAnimationEvents(IIJ)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;,Landroid/animation/AnimatorSet;,Landroid/animation/ValueAnimator;
 HSPLandroid/animation/AnimatorSet;->initAnimation()V
 HSPLandroid/animation/AnimatorSet;->isEmptySet(Landroid/animation/AnimatorSet;)Z
 HSPLandroid/animation/AnimatorSet;->isInitialized()Z
@@ -236,15 +245,15 @@
 HSPLandroid/animation/AnimatorSet;->setTarget(Ljava/lang/Object;)V+]Landroid/animation/ObjectAnimator;Landroid/animation/ObjectAnimator;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/animation/AnimatorSet;->shouldPlayTogether()Z
 HSPLandroid/animation/AnimatorSet;->skipToEndValue(Z)V
-HSPLandroid/animation/AnimatorSet;->sortAnimationEvents()V
+HSPLandroid/animation/AnimatorSet;->sortAnimationEvents()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;,Landroid/animation/AnimatorSet;
 HSPLandroid/animation/AnimatorSet;->start()V
-HSPLandroid/animation/AnimatorSet;->start(ZZ)V
-HSPLandroid/animation/AnimatorSet;->startAnimation()V
+HSPLandroid/animation/AnimatorSet;->start(ZZ)V+]Landroid/animation/Animator$AnimatorListener;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;,Landroid/animation/AnimatorSet;,Landroid/animation/ValueAnimator;
+HSPLandroid/animation/AnimatorSet;->startAnimation()V+]Landroid/animation/AnimatorSet;Landroid/animation/AnimatorSet;]Landroid/animation/AnimatorSet$SeekState;Landroid/animation/AnimatorSet$SeekState;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;,Landroid/animation/AnimatorSet;,Landroid/animation/ValueAnimator;
 HSPLandroid/animation/AnimatorSet;->startWithoutPulsing(Z)V
 HSPLandroid/animation/AnimatorSet;->updateAnimatorsDuration()V
-HSPLandroid/animation/AnimatorSet;->updatePlayTime(Landroid/animation/AnimatorSet$Node;Ljava/util/ArrayList;)V
+HSPLandroid/animation/AnimatorSet;->updatePlayTime(Landroid/animation/AnimatorSet$Node;Ljava/util/ArrayList;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;,Landroid/animation/AnimatorSet;
 HSPLandroid/animation/ArgbEvaluator;-><init>()V
-HSPLandroid/animation/ArgbEvaluator;->evaluate(FLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/animation/ArgbEvaluator;->evaluate(FLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/lang/Integer;Ljava/lang/Integer;
 HSPLandroid/animation/ArgbEvaluator;->getInstance()Landroid/animation/ArgbEvaluator;
 HSPLandroid/animation/FloatKeyframeSet;-><init>([Landroid/animation/Keyframe$FloatKeyframe;)V
 HSPLandroid/animation/FloatKeyframeSet;->clone()Landroid/animation/FloatKeyframeSet;+]Ljava/util/List;Ljava/util/Arrays$ArrayList;]Landroid/animation/Keyframe;Landroid/animation/Keyframe$FloatKeyframe;
@@ -254,7 +263,7 @@
 HSPLandroid/animation/IntKeyframeSet;-><init>([Landroid/animation/Keyframe$IntKeyframe;)V
 HSPLandroid/animation/IntKeyframeSet;->clone()Landroid/animation/IntKeyframeSet;
 HSPLandroid/animation/IntKeyframeSet;->clone()Landroid/animation/Keyframes;
-HSPLandroid/animation/IntKeyframeSet;->getIntValue(F)I
+HSPLandroid/animation/IntKeyframeSet;->getIntValue(F)I+]Ljava/util/List;Ljava/util/Arrays$ArrayList;]Landroid/animation/Keyframe$IntKeyframe;Landroid/animation/Keyframe$IntKeyframe;
 HSPLandroid/animation/Keyframe$FloatKeyframe;-><init>(F)V
 HSPLandroid/animation/Keyframe$FloatKeyframe;-><init>(FF)V
 HSPLandroid/animation/Keyframe$FloatKeyframe;->clone()Landroid/animation/Keyframe$FloatKeyframe;+]Landroid/animation/Keyframe$FloatKeyframe;Landroid/animation/Keyframe$FloatKeyframe;
@@ -282,7 +291,7 @@
 HSPLandroid/animation/Keyframe;->setInterpolator(Landroid/animation/TimeInterpolator;)V
 HSPLandroid/animation/Keyframe;->setValueWasSetOnStart(Z)V
 HSPLandroid/animation/Keyframe;->valueWasSetOnStart()Z
-HSPLandroid/animation/KeyframeSet;-><init>([Landroid/animation/Keyframe;)V
+HSPLandroid/animation/KeyframeSet;-><init>([Landroid/animation/Keyframe;)V+]Landroid/animation/Keyframe;Landroid/animation/Keyframe$IntKeyframe;,Landroid/animation/Keyframe$FloatKeyframe;,Landroid/animation/Keyframe$ObjectKeyframe;
 HSPLandroid/animation/KeyframeSet;->clone()Landroid/animation/KeyframeSet;
 HSPLandroid/animation/KeyframeSet;->clone()Landroid/animation/Keyframes;
 HSPLandroid/animation/KeyframeSet;->getKeyframes()Ljava/util/List;
@@ -326,14 +335,14 @@
 HSPLandroid/animation/ObjectAnimator;-><init>()V
 HSPLandroid/animation/ObjectAnimator;-><init>(Ljava/lang/Object;Landroid/util/Property;)V
 HSPLandroid/animation/ObjectAnimator;-><init>(Ljava/lang/Object;Ljava/lang/String;)V
-HSPLandroid/animation/ObjectAnimator;->animateValue(F)V+]Landroid/animation/ObjectAnimator;Landroid/animation/ObjectAnimator;]Landroid/animation/PropertyValuesHolder;Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;
+HSPLandroid/animation/ObjectAnimator;->animateValue(F)V+]Landroid/animation/ObjectAnimator;Landroid/animation/ObjectAnimator;]Landroid/animation/PropertyValuesHolder;Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder;
 HSPLandroid/animation/ObjectAnimator;->clone()Landroid/animation/Animator;
 HSPLandroid/animation/ObjectAnimator;->clone()Landroid/animation/ObjectAnimator;
 HSPLandroid/animation/ObjectAnimator;->getNameForTrace()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/animation/ObjectAnimator;Landroid/animation/ObjectAnimator;
 HSPLandroid/animation/ObjectAnimator;->getPropertyName()Ljava/lang/String;
 HSPLandroid/animation/ObjectAnimator;->getTarget()Ljava/lang/Object;+]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
 HSPLandroid/animation/ObjectAnimator;->hasSameTargetAndProperties(Landroid/animation/Animator;)Z
-HSPLandroid/animation/ObjectAnimator;->initAnimation()V
+HSPLandroid/animation/ObjectAnimator;->initAnimation()V+]Landroid/animation/ObjectAnimator;Landroid/animation/ObjectAnimator;]Landroid/animation/PropertyValuesHolder;Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder;
 HSPLandroid/animation/ObjectAnimator;->isInitialized()Z
 HSPLandroid/animation/ObjectAnimator;->ofFloat(Ljava/lang/Object;Landroid/util/Property;[F)Landroid/animation/ObjectAnimator;
 HSPLandroid/animation/ObjectAnimator;->ofFloat(Ljava/lang/Object;Ljava/lang/String;[F)Landroid/animation/ObjectAnimator;
@@ -351,7 +360,7 @@
 HSPLandroid/animation/ObjectAnimator;->setObjectValues([Ljava/lang/Object;)V
 HSPLandroid/animation/ObjectAnimator;->setProperty(Landroid/util/Property;)V
 HSPLandroid/animation/ObjectAnimator;->setPropertyName(Ljava/lang/String;)V
-HSPLandroid/animation/ObjectAnimator;->setTarget(Ljava/lang/Object;)V
+HSPLandroid/animation/ObjectAnimator;->setTarget(Ljava/lang/Object;)V+]Landroid/animation/ObjectAnimator;Landroid/animation/ObjectAnimator;
 HSPLandroid/animation/ObjectAnimator;->setupEndValues()V
 HSPLandroid/animation/ObjectAnimator;->setupStartValues()V
 HSPLandroid/animation/ObjectAnimator;->shouldAutoCancel(Landroid/animation/AnimationHandler$AnimationFrameCallback;)Z
@@ -364,15 +373,15 @@
 HSPLandroid/animation/PathKeyframes;->getKeyframes()Ljava/util/ArrayList;
 HSPLandroid/animation/PathKeyframes;->getKeyframes()Ljava/util/List;
 HSPLandroid/animation/PathKeyframes;->getValue(F)Ljava/lang/Object;
-HSPLandroid/animation/PathKeyframes;->interpolateInRange(FII)Landroid/graphics/PointF;
+HSPLandroid/animation/PathKeyframes;->interpolateInRange(FII)Landroid/graphics/PointF;+]Landroid/graphics/PointF;Landroid/graphics/PointF;
 HSPLandroid/animation/PropertyValuesHolder$1;->getValueAtFraction(F)Ljava/lang/Object;
 HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;-><init>(Landroid/util/Property;[F)V
 HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;-><init>(Ljava/lang/String;[F)V
-HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->calculateValue(F)V+]Landroid/animation/Keyframes$FloatKeyframes;Landroid/animation/FloatKeyframeSet;
+HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->calculateValue(F)V+]Landroid/animation/Keyframes$FloatKeyframes;Landroid/animation/FloatKeyframeSet;,Landroid/animation/PathKeyframes$1;,Landroid/animation/PathKeyframes$2;
 HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->clone()Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;
 HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->clone()Landroid/animation/PropertyValuesHolder;
 HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->getAnimatedValue()Ljava/lang/Object;
-HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->setAnimatedValue(Ljava/lang/Object;)V
+HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->setAnimatedValue(Ljava/lang/Object;)V+]Landroid/util/FloatProperty;Landroid/view/View$2;,Landroid/view/View$3;
 HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->setFloatValues([F)V
 HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->setProperty(Landroid/util/Property;)V
 HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->setupSetter(Ljava/lang/Class;)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/lang/Long;Ljava/lang/Long;
@@ -388,8 +397,8 @@
 HSPLandroid/animation/PropertyValuesHolder;-><init>(Landroid/util/Property;)V
 HSPLandroid/animation/PropertyValuesHolder;-><init>(Ljava/lang/String;)V
 HSPLandroid/animation/PropertyValuesHolder;-><init>(Ljava/lang/String;Landroid/animation/PropertyValuesHolder-IA;)V
-HSPLandroid/animation/PropertyValuesHolder;->calculateValue(F)V
-HSPLandroid/animation/PropertyValuesHolder;->clone()Landroid/animation/PropertyValuesHolder;+]Landroid/animation/Keyframes;Landroid/animation/FloatKeyframeSet;
+HSPLandroid/animation/PropertyValuesHolder;->calculateValue(F)V+]Landroid/animation/Keyframes;Landroid/animation/PathKeyframes;
+HSPLandroid/animation/PropertyValuesHolder;->clone()Landroid/animation/PropertyValuesHolder;+]Landroid/animation/Keyframes;Landroid/animation/FloatKeyframeSet;,Landroid/animation/PathKeyframes$1;,Landroid/animation/PathKeyframes$2;
 HSPLandroid/animation/PropertyValuesHolder;->convertBack(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/animation/PropertyValuesHolder;->getAnimatedValue()Ljava/lang/Object;
 HSPLandroid/animation/PropertyValuesHolder;->getMethodName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
@@ -403,7 +412,7 @@
 HSPLandroid/animation/PropertyValuesHolder;->ofInt(Ljava/lang/String;[I)Landroid/animation/PropertyValuesHolder;
 HSPLandroid/animation/PropertyValuesHolder;->ofKeyframes(Ljava/lang/String;Landroid/animation/Keyframes;)Landroid/animation/PropertyValuesHolder;
 HSPLandroid/animation/PropertyValuesHolder;->ofObject(Ljava/lang/String;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/PropertyValuesHolder;
-HSPLandroid/animation/PropertyValuesHolder;->setAnimatedValue(Ljava/lang/Object;)V
+HSPLandroid/animation/PropertyValuesHolder;->setAnimatedValue(Ljava/lang/Object;)V+]Landroid/util/Property;Landroid/transition/ChangeBounds$3;,Landroid/transition/ChangeBounds$4;,Landroid/transition/ChangeBounds$2;,Landroid/transition/ChangeBounds$5;]Landroid/animation/PropertyValuesHolder;Landroid/animation/PropertyValuesHolder;
 HSPLandroid/animation/PropertyValuesHolder;->setEvaluator(Landroid/animation/TypeEvaluator;)V
 HSPLandroid/animation/PropertyValuesHolder;->setFloatValues([F)V
 HSPLandroid/animation/PropertyValuesHolder;->setIntValues([I)V
@@ -412,7 +421,7 @@
 HSPLandroid/animation/PropertyValuesHolder;->setPropertyName(Ljava/lang/String;)V
 HSPLandroid/animation/PropertyValuesHolder;->setupEndValue(Ljava/lang/Object;)V
 HSPLandroid/animation/PropertyValuesHolder;->setupGetter(Ljava/lang/Class;)V
-HSPLandroid/animation/PropertyValuesHolder;->setupSetterAndGetter(Ljava/lang/Object;)V
+HSPLandroid/animation/PropertyValuesHolder;->setupSetterAndGetter(Ljava/lang/Object;)V+]Ljava/lang/Object;missing_types]Landroid/animation/Keyframes;Landroid/animation/IntKeyframeSet;,Landroid/animation/PathKeyframes;,Landroid/animation/FloatKeyframeSet;]Ljava/util/List;Ljava/util/Arrays$ArrayList;,Ljava/util/ArrayList;]Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;]Landroid/animation/Keyframe;Landroid/animation/Keyframe$IntKeyframe;,Landroid/animation/Keyframe$FloatKeyframe;]Landroid/animation/PropertyValuesHolder;Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;
 HSPLandroid/animation/PropertyValuesHolder;->setupSetterOrGetter(Ljava/lang/Class;Ljava/util/HashMap;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/reflect/Method;+]Ljava/util/HashMap;Ljava/util/HashMap;
 HSPLandroid/animation/PropertyValuesHolder;->setupStartValue(Ljava/lang/Object;)V
 HSPLandroid/animation/PropertyValuesHolder;->setupValue(Ljava/lang/Object;Landroid/animation/Keyframe;)V
@@ -423,10 +432,10 @@
 HSPLandroid/animation/StateListAnimator$StateListAnimatorConstantState;->newInstance()Ljava/lang/Object;
 HSPLandroid/animation/StateListAnimator$Tuple;-><init>([ILandroid/animation/Animator;)V
 HSPLandroid/animation/StateListAnimator;-><init>()V
-HSPLandroid/animation/StateListAnimator;->addState([ILandroid/animation/Animator;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/Animator;Landroid/animation/AnimatorSet;
+HSPLandroid/animation/StateListAnimator;->addState([ILandroid/animation/Animator;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/Animator;Landroid/animation/AnimatorSet;,Landroid/animation/ObjectAnimator;
 HSPLandroid/animation/StateListAnimator;->appendChangingConfigurations(I)V
 HSPLandroid/animation/StateListAnimator;->clearTarget()V
-HSPLandroid/animation/StateListAnimator;->clone()Landroid/animation/StateListAnimator;+]Landroid/animation/StateListAnimator;Landroid/animation/StateListAnimator;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/Animator;Landroid/animation/AnimatorSet;
+HSPLandroid/animation/StateListAnimator;->clone()Landroid/animation/StateListAnimator;+]Landroid/animation/StateListAnimator;Landroid/animation/StateListAnimator;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/Animator;Landroid/animation/AnimatorSet;,Landroid/animation/ObjectAnimator;
 HSPLandroid/animation/StateListAnimator;->createConstantState()Landroid/content/res/ConstantState;
 HSPLandroid/animation/StateListAnimator;->getChangingConfigurations()I
 HSPLandroid/animation/StateListAnimator;->getTarget()Landroid/view/View;
@@ -440,19 +449,19 @@
 HSPLandroid/animation/TimeAnimator;->setTimeListener(Landroid/animation/TimeAnimator$TimeListener;)V
 HSPLandroid/animation/ValueAnimator;-><init>()V
 HSPLandroid/animation/ValueAnimator;->addAnimationCallback(J)V
-HSPLandroid/animation/ValueAnimator;->addUpdateListener(Landroid/animation/ValueAnimator$AnimatorUpdateListener;)V
-HSPLandroid/animation/ValueAnimator;->animateBasedOnTime(J)Z+]Landroid/animation/ValueAnimator;Landroid/animation/ObjectAnimator;,Landroid/animation/ValueAnimator;
-HSPLandroid/animation/ValueAnimator;->animateValue(F)V+]Landroid/animation/ValueAnimator$AnimatorUpdateListener;missing_types]Landroid/animation/TimeInterpolator;missing_types]Landroid/animation/PropertyValuesHolder;Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/animation/ValueAnimator;->addUpdateListener(Landroid/animation/ValueAnimator$AnimatorUpdateListener;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/animation/ValueAnimator;->animateBasedOnTime(J)Z+]Landroid/animation/ValueAnimator;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/animation/ValueAnimator;->animateValue(F)V+]Landroid/animation/ValueAnimator$AnimatorUpdateListener;missing_types]Landroid/animation/TimeInterpolator;megamorphic_types]Landroid/animation/PropertyValuesHolder;Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/animation/ValueAnimator;->areAnimatorsEnabled()Z
 HSPLandroid/animation/ValueAnimator;->cancel()V
 HSPLandroid/animation/ValueAnimator;->clampFraction(F)F
 HSPLandroid/animation/ValueAnimator;->clone()Landroid/animation/Animator;
-HSPLandroid/animation/ValueAnimator;->clone()Landroid/animation/ValueAnimator;+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/animation/PropertyValuesHolder;Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;
-HSPLandroid/animation/ValueAnimator;->doAnimationFrame(J)Z+]Landroid/animation/ValueAnimator;Landroid/animation/ObjectAnimator;,Landroid/animation/ValueAnimator;
+HSPLandroid/animation/ValueAnimator;->clone()Landroid/animation/ValueAnimator;+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/animation/PropertyValuesHolder;Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder;
+HSPLandroid/animation/ValueAnimator;->doAnimationFrame(J)Z+]Landroid/animation/ValueAnimator;missing_types
 HSPLandroid/animation/ValueAnimator;->end()V
-HSPLandroid/animation/ValueAnimator;->endAnimation()V+]Landroid/animation/Animator$AnimatorListener;Landroid/animation/AnimatorSet$2;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/animation/ValueAnimator;->endAnimation()V+]Landroid/animation/Animator$AnimatorListener;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/animation/ValueAnimator;->getAnimatedFraction()F
-HSPLandroid/animation/ValueAnimator;->getAnimatedValue()Ljava/lang/Object;
+HSPLandroid/animation/ValueAnimator;->getAnimatedValue()Ljava/lang/Object;+]Landroid/animation/PropertyValuesHolder;Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;
 HSPLandroid/animation/ValueAnimator;->getAnimationHandler()Landroid/animation/AnimationHandler;
 HSPLandroid/animation/ValueAnimator;->getCurrentAnimationsCount()I
 HSPLandroid/animation/ValueAnimator;->getCurrentIteration(F)I
@@ -468,12 +477,12 @@
 HSPLandroid/animation/ValueAnimator;->getStartDelay()J
 HSPLandroid/animation/ValueAnimator;->getTotalDuration()J
 HSPLandroid/animation/ValueAnimator;->getValues()[Landroid/animation/PropertyValuesHolder;
-HSPLandroid/animation/ValueAnimator;->initAnimation()V
+HSPLandroid/animation/ValueAnimator;->initAnimation()V+]Landroid/animation/PropertyValuesHolder;Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder;
 HSPLandroid/animation/ValueAnimator;->isInitialized()Z
 HSPLandroid/animation/ValueAnimator;->isPulsingInternal()Z
 HSPLandroid/animation/ValueAnimator;->isRunning()Z
 HSPLandroid/animation/ValueAnimator;->isStarted()Z
-HSPLandroid/animation/ValueAnimator;->notifyStartListeners()V
+HSPLandroid/animation/ValueAnimator;->notifyStartListeners()V+]Landroid/animation/Animator$AnimatorListener;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/animation/ValueAnimator;->ofFloat([F)Landroid/animation/ValueAnimator;
 HSPLandroid/animation/ValueAnimator;->ofInt([I)Landroid/animation/ValueAnimator;
 HSPLandroid/animation/ValueAnimator;->ofObject(Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/ValueAnimator;
@@ -484,25 +493,25 @@
 HSPLandroid/animation/ValueAnimator;->resolveDurationScale()F
 HSPLandroid/animation/ValueAnimator;->setAllowRunningAsynchronously(Z)V
 HSPLandroid/animation/ValueAnimator;->setAnimationHandler(Landroid/animation/AnimationHandler;)V
-HSPLandroid/animation/ValueAnimator;->setCurrentFraction(F)V
+HSPLandroid/animation/ValueAnimator;->setCurrentFraction(F)V+]Landroid/animation/ValueAnimator;Landroid/animation/ObjectAnimator;,Landroid/animation/ValueAnimator;
 HSPLandroid/animation/ValueAnimator;->setCurrentPlayTime(J)V
 HSPLandroid/animation/ValueAnimator;->setDuration(J)Landroid/animation/Animator;
 HSPLandroid/animation/ValueAnimator;->setDuration(J)Landroid/animation/ValueAnimator;
 HSPLandroid/animation/ValueAnimator;->setDurationScale(F)V
 HSPLandroid/animation/ValueAnimator;->setEvaluator(Landroid/animation/TypeEvaluator;)V
-HSPLandroid/animation/ValueAnimator;->setFloatValues([F)V
+HSPLandroid/animation/ValueAnimator;->setFloatValues([F)V+]Landroid/animation/ValueAnimator;Landroid/animation/ValueAnimator;
 HSPLandroid/animation/ValueAnimator;->setIntValues([I)V
 HSPLandroid/animation/ValueAnimator;->setInterpolator(Landroid/animation/TimeInterpolator;)V
 HSPLandroid/animation/ValueAnimator;->setObjectValues([Ljava/lang/Object;)V
 HSPLandroid/animation/ValueAnimator;->setRepeatCount(I)V
 HSPLandroid/animation/ValueAnimator;->setRepeatMode(I)V
 HSPLandroid/animation/ValueAnimator;->setStartDelay(J)V
-HSPLandroid/animation/ValueAnimator;->setValues([Landroid/animation/PropertyValuesHolder;)V
+HSPLandroid/animation/ValueAnimator;->setValues([Landroid/animation/PropertyValuesHolder;)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/animation/PropertyValuesHolder;Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder;
 HSPLandroid/animation/ValueAnimator;->shouldPlayBackward(IZ)Z
 HSPLandroid/animation/ValueAnimator;->skipToEndValue(Z)V
 HSPLandroid/animation/ValueAnimator;->start()V
-HSPLandroid/animation/ValueAnimator;->start(Z)V+]Landroid/animation/ValueAnimator;Landroid/animation/ObjectAnimator;,Landroid/animation/ValueAnimator;
-HSPLandroid/animation/ValueAnimator;->startAnimation()V
+HSPLandroid/animation/ValueAnimator;->start(Z)V+]Landroid/animation/ValueAnimator;missing_types
+HSPLandroid/animation/ValueAnimator;->startAnimation()V+]Landroid/animation/ValueAnimator;Landroid/animation/ObjectAnimator;,Landroid/animation/ValueAnimator;
 HSPLandroid/animation/ValueAnimator;->startWithoutPulsing(Z)V
 HSPLandroid/app/Activity$1;-><init>(Landroid/app/Activity;)V
 HSPLandroid/app/Activity$1;->isTaskRoot()Z
@@ -739,7 +748,7 @@
 HSPLandroid/app/ActivityManager;->getProcessMemoryInfo([I)[Landroid/os/Debug$MemoryInfo;
 HSPLandroid/app/ActivityManager;->getRunningAppProcesses()Ljava/util/List;
 HSPLandroid/app/ActivityManager;->getRunningServices(I)Ljava/util/List;
-HSPLandroid/app/ActivityManager;->getService()Landroid/app/IActivityManager;
+HSPLandroid/app/ActivityManager;->getService()Landroid/app/IActivityManager;+]Landroid/util/Singleton;Landroid/app/ActivityManager$1;
 HSPLandroid/app/ActivityManager;->getTaskService()Landroid/app/IActivityTaskManager;
 HSPLandroid/app/ActivityManager;->handleIncomingUser(IIIZZLjava/lang/String;Ljava/lang/String;)I
 HSPLandroid/app/ActivityManager;->isBackgroundRestricted()Z
@@ -778,6 +787,7 @@
 HSPLandroid/app/ActivityThread$$ExternalSyntheticLambda0;-><init>(Landroid/app/ActivityThread;)V
 HSPLandroid/app/ActivityThread$$ExternalSyntheticLambda0;->onConfigurationChanged(Landroid/content/res/Configuration;)V
 HSPLandroid/app/ActivityThread$$ExternalSyntheticLambda1;-><init>()V
+HSPLandroid/app/ActivityThread$$ExternalSyntheticLambda3;-><init>()V
 HSPLandroid/app/ActivityThread$$ExternalSyntheticLambda5;->run()V
 HSPLandroid/app/ActivityThread$2;-><init>(Landroid/app/ActivityThread;)V
 HSPLandroid/app/ActivityThread$2;->setContentCaptureOptions(Landroid/content/ContentCaptureOptions;)V
@@ -791,12 +801,12 @@
 HSPLandroid/app/ActivityThread$ActivityClientRecord;->isPersistable()Z
 HSPLandroid/app/ActivityThread$ActivityClientRecord;->setState(I)V
 HSPLandroid/app/ActivityThread$AndroidOs;-><init>(Llibcore/io/Os;)V
-HSPLandroid/app/ActivityThread$AndroidOs;->access(Ljava/lang/String;I)Z
+HSPLandroid/app/ActivityThread$AndroidOs;->access(Ljava/lang/String;I)Z+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/app/ActivityThread$AndroidOs;->install()V
 HSPLandroid/app/ActivityThread$AndroidOs;->open(Ljava/lang/String;II)Ljava/io/FileDescriptor;
 HSPLandroid/app/ActivityThread$AndroidOs;->remove(Ljava/lang/String;)V
 HSPLandroid/app/ActivityThread$AndroidOs;->rename(Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/app/ActivityThread$AndroidOs;->stat(Ljava/lang/String;)Landroid/system/StructStat;
+HSPLandroid/app/ActivityThread$AndroidOs;->stat(Ljava/lang/String;)Landroid/system/StructStat;+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/app/ActivityThread$AppBindData;-><init>()V
 HSPLandroid/app/ActivityThread$ApplicationThread$$ExternalSyntheticLambda2;-><init>()V
 HSPLandroid/app/ActivityThread$ApplicationThread$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
@@ -861,7 +871,6 @@
 HSPLandroid/app/ActivityThread$RequestAssistContextExtras;-><init>()V
 HSPLandroid/app/ActivityThread$ServiceArgsData;-><init>()V
 HSPLandroid/app/ActivityThread$ServiceArgsData;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HSPLandroid/app/ActivityThread;->$r8$lambda$0B6gi4scVND6AEt5CVU-ROTGuJc(Landroid/app/ActivityThread;)V
 HSPLandroid/app/ActivityThread;->-$$Nest$fgetmTransactionExecutor(Landroid/app/ActivityThread;)Landroid/app/servertransaction/TransactionExecutor;
 HSPLandroid/app/ActivityThread;->-$$Nest$mhandleBindApplication(Landroid/app/ActivityThread;Landroid/app/ActivityThread$AppBindData;)V
 HSPLandroid/app/ActivityThread;->-$$Nest$mhandleBindService(Landroid/app/ActivityThread;Landroid/app/ActivityThread$BindServiceData;)V
@@ -878,9 +887,8 @@
 HSPLandroid/app/ActivityThread;->-$$Nest$mhandleSetCoreSettings(Landroid/app/ActivityThread;Landroid/os/Bundle;)V
 HSPLandroid/app/ActivityThread;->-$$Nest$msendMessage(Landroid/app/ActivityThread;ILjava/lang/Object;IIZ)V
 HSPLandroid/app/ActivityThread;-><init>()V
-HSPLandroid/app/ActivityThread;->acquireExistingProvider(Landroid/content/Context;Ljava/lang/String;IZ)Landroid/content/IContentProvider;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/IContentProvider;Landroid/content/ContentProviderProxy;,Landroid/content/ContentProvider$Transport;]Landroid/os/IBinder;Landroid/content/ContentProvider$Transport;,Landroid/os/BinderProxy;
+HSPLandroid/app/ActivityThread;->acquireExistingProvider(Landroid/content/Context;Ljava/lang/String;IZ)Landroid/content/IContentProvider;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/IContentProvider;Landroid/content/ContentProviderProxy;,Landroid/content/ContentProvider$Transport;]Landroid/os/IBinder;Landroid/os/BinderProxy;,Landroid/content/ContentProvider$Transport;
 HSPLandroid/app/ActivityThread;->acquireProvider(Landroid/content/Context;Ljava/lang/String;IZ)Landroid/content/IContentProvider;
-HSPLandroid/app/ActivityThread;->applyPendingProcessState()V
 HSPLandroid/app/ActivityThread;->attach(ZJ)V
 HSPLandroid/app/ActivityThread;->callActivityOnSaveInstanceState(Landroid/app/ActivityThread$ActivityClientRecord;)V
 HSPLandroid/app/ActivityThread;->callActivityOnStop(Landroid/app/ActivityThread$ActivityClientRecord;ZLjava/lang/String;)V
@@ -892,7 +900,7 @@
 HSPLandroid/app/ActivityThread;->createBaseContextForActivity(Landroid/app/ActivityThread$ActivityClientRecord;)Landroid/app/ContextImpl;
 HSPLandroid/app/ActivityThread;->currentActivityThread()Landroid/app/ActivityThread;
 HSPLandroid/app/ActivityThread;->currentApplication()Landroid/app/Application;
-HSPLandroid/app/ActivityThread;->currentAttributionSource()Landroid/content/AttributionSource;
+HSPLandroid/app/ActivityThread;->currentAttributionSource()Landroid/content/AttributionSource;+]Landroid/app/ActivityThread;Landroid/app/ActivityThread;
 HSPLandroid/app/ActivityThread;->currentOpPackageName()Ljava/lang/String;
 HSPLandroid/app/ActivityThread;->currentPackageName()Ljava/lang/String;
 HSPLandroid/app/ActivityThread;->currentProcessName()Ljava/lang/String;
@@ -914,11 +922,11 @@
 HSPLandroid/app/ActivityThread;->getHandler()Landroid/os/Handler;
 HSPLandroid/app/ActivityThread;->getInstrumentation()Landroid/app/Instrumentation;
 HSPLandroid/app/ActivityThread;->getIntCoreSetting(Ljava/lang/String;I)I
-HSPLandroid/app/ActivityThread;->getIntentBeingBroadcast()Landroid/content/Intent;
+HSPLandroid/app/ActivityThread;->getIntentBeingBroadcast()Landroid/content/Intent;+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
 HSPLandroid/app/ActivityThread;->getLooper()Landroid/os/Looper;
 HSPLandroid/app/ActivityThread;->getPackageInfo(Landroid/content/pm/ApplicationInfo;Landroid/content/res/CompatibilityInfo;I)Landroid/app/LoadedApk;
 HSPLandroid/app/ActivityThread;->getPackageInfo(Landroid/content/pm/ApplicationInfo;Landroid/content/res/CompatibilityInfo;Ljava/lang/ClassLoader;ZZZ)Landroid/app/LoadedApk;
-HSPLandroid/app/ActivityThread;->getPackageInfo(Landroid/content/pm/ApplicationInfo;Landroid/content/res/CompatibilityInfo;Ljava/lang/ClassLoader;ZZZZ)Landroid/app/LoadedApk;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Landroid/app/LoadedApk;Landroid/app/LoadedApk;]Landroid/app/ActivityThread;Landroid/app/ActivityThread;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLandroid/app/ActivityThread;->getPackageInfo(Landroid/content/pm/ApplicationInfo;Landroid/content/res/CompatibilityInfo;Ljava/lang/ClassLoader;ZZZZ)Landroid/app/LoadedApk;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/app/LoadedApk;Landroid/app/LoadedApk;]Landroid/app/ActivityThread;Landroid/app/ActivityThread;
 HSPLandroid/app/ActivityThread;->getPackageInfo(Ljava/lang/String;Landroid/content/res/CompatibilityInfo;II)Landroid/app/LoadedApk;
 HSPLandroid/app/ActivityThread;->getPackageInfoNoCheck(Landroid/content/pm/ApplicationInfo;Landroid/content/res/CompatibilityInfo;)Landroid/app/LoadedApk;
 HSPLandroid/app/ActivityThread;->getPackageManager()Landroid/content/pm/IPackageManager;
@@ -927,14 +935,14 @@
 HSPLandroid/app/ActivityThread;->getSystemContext()Landroid/app/ContextImpl;
 HSPLandroid/app/ActivityThread;->getSystemUiContext()Landroid/app/ContextImpl;
 HSPLandroid/app/ActivityThread;->getSystemUiContextNoCreate()Landroid/app/ContextImpl;
-HSPLandroid/app/ActivityThread;->getTopLevelResources(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;Landroid/app/LoadedApk;Landroid/content/res/Configuration;)Landroid/content/res/Resources;
+HSPLandroid/app/ActivityThread;->getTopLevelResources(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;Landroid/app/LoadedApk;Landroid/content/res/Configuration;)Landroid/content/res/Resources;+]Landroid/app/LoadedApk;Landroid/app/LoadedApk;]Landroid/app/ResourcesManager;Landroid/app/ResourcesManager;
 HSPLandroid/app/ActivityThread;->handleActivityConfigurationChanged(Landroid/app/ActivityThread$ActivityClientRecord;Landroid/content/res/Configuration;I)V
 HSPLandroid/app/ActivityThread;->handleApplicationInfoChanged(Landroid/content/pm/ApplicationInfo;)V
 HSPLandroid/app/ActivityThread;->handleBindApplication(Landroid/app/ActivityThread$AppBindData;)V
 HSPLandroid/app/ActivityThread;->handleBindService(Landroid/app/ActivityThread$BindServiceData;)V
 HSPLandroid/app/ActivityThread;->handleConfigurationChanged(Landroid/content/res/Configuration;)V
 HSPLandroid/app/ActivityThread;->handleCreateBackupAgent(Landroid/app/ActivityThread$CreateBackupAgentData;)V
-HSPLandroid/app/ActivityThread;->handleCreateService(Landroid/app/ActivityThread$CreateServiceData;)V
+HSPLandroid/app/ActivityThread;->handleCreateService(Landroid/app/ActivityThread$CreateServiceData;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/app/LoadedApk;Landroid/app/LoadedApk;]Landroid/app/ActivityThread;Landroid/app/ActivityThread;]Ljava/util/List;Ljava/util/Collections$EmptyList;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/app/IActivityManager;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/app/AppComponentFactory;Landroid/app/AppComponentFactory;
 HSPLandroid/app/ActivityThread;->handleDestroyActivity(Landroid/app/ActivityThread$ActivityClientRecord;ZIZLjava/lang/String;)V
 HSPLandroid/app/ActivityThread;->handleDestroyBackupAgent(Landroid/app/ActivityThread$CreateBackupAgentData;)V
 HSPLandroid/app/ActivityThread;->handleDispatchPackageBroadcast(I[Ljava/lang/String;)V
@@ -966,7 +974,7 @@
 HSPLandroid/app/ActivityThread;->handleUnstableProviderDied(Landroid/os/IBinder;Z)V
 HSPLandroid/app/ActivityThread;->handleUnstableProviderDiedLocked(Landroid/os/IBinder;Z)V
 HSPLandroid/app/ActivityThread;->handleWindowingModeChangeIfNeeded(Landroid/app/Activity;Landroid/content/res/Configuration;)V
-HSPLandroid/app/ActivityThread;->incProviderRefLocked(Landroid/app/ActivityThread$ProviderRefCount;Z)V
+HSPLandroid/app/ActivityThread;->incProviderRefLocked(Landroid/app/ActivityThread$ProviderRefCount;Z)V+]Landroid/app/ActivityThread$H;Landroid/app/ActivityThread$H;]Landroid/app/IActivityManager;Landroid/app/IActivityManager$Stub$Proxy;
 HSPLandroid/app/ActivityThread;->initializeMainlineModules()V
 HSPLandroid/app/ActivityThread;->installContentProviders(Landroid/content/Context;Ljava/util/List;)V
 HSPLandroid/app/ActivityThread;->installProvider(Landroid/content/Context;Landroid/app/ContentProviderHolder;Landroid/content/pm/ProviderInfo;ZZZ)Landroid/app/ContentProviderHolder;
@@ -1068,7 +1076,7 @@
 HSPLandroid/app/AppOpsManager$$ExternalSyntheticLambda5;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
 HSPLandroid/app/AppOpsManager$1;->onNoted(Landroid/app/SyncNotedAppOp;)V
 HSPLandroid/app/AppOpsManager$1;->onSelfNoted(Landroid/app/SyncNotedAppOp;)V
-HSPLandroid/app/AppOpsManager$1;->reportStackTraceIfNeeded(Landroid/app/SyncNotedAppOp;)V
+HSPLandroid/app/AppOpsManager$1;->reportStackTraceIfNeeded(Landroid/app/SyncNotedAppOp;)V+]Landroid/app/SyncNotedAppOp;Landroid/app/SyncNotedAppOp;]Lcom/android/internal/app/MessageSamplingConfig;Lcom/android/internal/app/MessageSamplingConfig;
 HSPLandroid/app/AppOpsManager$2;->opChanged(IILjava/lang/String;)V
 HSPLandroid/app/AppOpsManager$5;-><init>(Landroid/app/AppOpsManager;Landroid/app/AppOpsManager$OnOpNotedListener;)V
 HSPLandroid/app/AppOpsManager$AttributedOpEntry;->getLastAccessEvent(III)Landroid/app/AppOpsManager$NoteOpEvent;
@@ -1076,7 +1084,7 @@
 HSPLandroid/app/AppOpsManager$NoteOpEvent;->getDuration()J
 HSPLandroid/app/AppOpsManager$NoteOpEvent;->getNoteTime()J
 HSPLandroid/app/AppOpsManager$OnOpNotedCallback$1;-><init>(Landroid/app/AppOpsManager$OnOpNotedCallback;)V
-HSPLandroid/app/AppOpsManager$OnOpNotedCallback$1;->opNoted(Landroid/app/AsyncNotedAppOp;)V
+HSPLandroid/app/AppOpsManager$OnOpNotedCallback$1;->opNoted(Landroid/app/AsyncNotedAppOp;)V+]Ljava/util/concurrent/Executor;Landroid/os/HandlerExecutor;
 HSPLandroid/app/AppOpsManager$OnOpNotedCallback;-><init>()V
 HSPLandroid/app/AppOpsManager$OnOpNotedCallback;->getAsyncNotedExecutor()Ljava/util/concurrent/Executor;
 HSPLandroid/app/AppOpsManager$OpEntry$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/AppOpsManager$OpEntry;
@@ -1100,12 +1108,12 @@
 HSPLandroid/app/AppOpsManager;->finishOp(IILjava/lang/String;Ljava/lang/String;)V
 HSPLandroid/app/AppOpsManager;->getClientId()Landroid/os/IBinder;
 HSPLandroid/app/AppOpsManager;->getFormattedStackTrace()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Ljava/lang/Exception;Ljava/lang/Exception;]Ljava/lang/StackTraceElement;Ljava/lang/StackTraceElement;]Ljava/lang/Class;Ljava/lang/Class;
-HSPLandroid/app/AppOpsManager;->getLastEvent(Landroid/util/LongSparseArray;III)Landroid/app/AppOpsManager$NoteOpEvent;+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
+HSPLandroid/app/AppOpsManager;->getLastEvent(Landroid/util/LongSparseArray;III)Landroid/app/AppOpsManager$NoteOpEvent;+]Landroid/app/AppOpsManager$NoteOpEvent;Landroid/app/AppOpsManager$NoteOpEvent;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
 HSPLandroid/app/AppOpsManager;->getNotedOpCollectionMode(ILjava/lang/String;I)I
 HSPLandroid/app/AppOpsManager;->getPackagesForOps([I)Ljava/util/List;
 HSPLandroid/app/AppOpsManager;->getService()Lcom/android/internal/app/IAppOpsService;
 HSPLandroid/app/AppOpsManager;->getToken(Lcom/android/internal/app/IAppOpsService;)Landroid/os/IBinder;
-HSPLandroid/app/AppOpsManager;->isCollectingStackTraces()Z
+HSPLandroid/app/AppOpsManager;->isCollectingStackTraces()Z+]Lcom/android/internal/app/MessageSamplingConfig;Lcom/android/internal/app/MessageSamplingConfig;
 HSPLandroid/app/AppOpsManager;->isListeningForOpNoted()Z
 HSPLandroid/app/AppOpsManager;->lambda$new$0(Landroid/provider/DeviceConfig$Properties;)V
 HSPLandroid/app/AppOpsManager;->leftCircularDistance(III)I
@@ -1113,7 +1121,7 @@
 HSPLandroid/app/AppOpsManager;->noteOp(IILjava/lang/String;)I
 HSPLandroid/app/AppOpsManager;->noteOp(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/app/AppOpsManager;->noteOp(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
-HSPLandroid/app/AppOpsManager;->noteOpNoThrow(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/app/AppOpsManager;->noteOpNoThrow(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I+]Lcom/android/internal/app/IAppOpsService;Lcom/android/internal/app/IAppOpsService$Stub$Proxy;]Landroid/app/SyncNotedAppOp;Landroid/app/SyncNotedAppOp;
 HSPLandroid/app/AppOpsManager;->noteOpNoThrow(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/app/AppOpsManager;->noteProxyOp(ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;)I
 HSPLandroid/app/AppOpsManager;->noteProxyOpNoThrow(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)I
@@ -1121,11 +1129,11 @@
 HSPLandroid/app/AppOpsManager;->opToPermission(I)Ljava/lang/String;
 HSPLandroid/app/AppOpsManager;->opToPublicName(I)Ljava/lang/String;
 HSPLandroid/app/AppOpsManager;->opToSwitch(I)I
-HSPLandroid/app/AppOpsManager;->pauseNotedAppOpsCollection()Landroid/app/AppOpsManager$PausedNotedAppOpsCollection;+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;]Ljava/lang/Integer;Ljava/lang/Integer;
+HSPLandroid/app/AppOpsManager;->pauseNotedAppOpsCollection()Landroid/app/AppOpsManager$PausedNotedAppOpsCollection;+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
 HSPLandroid/app/AppOpsManager;->permissionToOp(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/app/AppOpsManager;->permissionToOpCode(Ljava/lang/String;)I
 HSPLandroid/app/AppOpsManager;->prefixParcelWithAppOpsIfNeeded(Landroid/os/Parcel;)V
-HSPLandroid/app/AppOpsManager;->readAndLogNotedAppops(Landroid/os/Parcel;)V
+HSPLandroid/app/AppOpsManager;->readAndLogNotedAppops(Landroid/os/Parcel;)V+]Ljava/util/BitSet;Ljava/util/BitSet;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/app/AppOpsManager$OnOpNotedCallback;Landroid/app/AppOpsManager$1;
 HSPLandroid/app/AppOpsManager;->resolveLastRestrictedUidState(I)I
 HSPLandroid/app/AppOpsManager;->setOnOpNotedCallback(Ljava/util/concurrent/Executor;Landroid/app/AppOpsManager$OnOpNotedCallback;)V
 HSPLandroid/app/AppOpsManager;->setUidMode(Ljava/lang/String;II)V
@@ -1136,7 +1144,7 @@
 HSPLandroid/app/AppOpsManager;->startWatchingMode(ILjava/lang/String;Landroid/app/AppOpsManager$OnOpChangedListener;)V
 HSPLandroid/app/AppOpsManager;->startWatchingMode(Ljava/lang/String;Ljava/lang/String;Landroid/app/AppOpsManager$OnOpChangedListener;)V
 HSPLandroid/app/AppOpsManager;->stopWatchingMode(Landroid/app/AppOpsManager$OnOpChangedListener;)V
-HSPLandroid/app/AppOpsManager;->strOpToOp(Ljava/lang/String;)I
+HSPLandroid/app/AppOpsManager;->strOpToOp(Ljava/lang/String;)I+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/lang/Integer;Ljava/lang/Integer;
 HSPLandroid/app/AppOpsManager;->toReceiverId(Ljava/lang/Object;)Ljava/lang/String;
 HSPLandroid/app/AppOpsManager;->unsafeCheckOp(Ljava/lang/String;ILjava/lang/String;)I
 HSPLandroid/app/AppOpsManager;->unsafeCheckOpNoThrow(Ljava/lang/String;ILjava/lang/String;)I
@@ -1211,7 +1219,7 @@
 HSPLandroid/app/ApplicationLoaders;->createAndCacheNonBootclasspathSystemClassLoaders([Landroid/content/pm/SharedLibraryInfo;)V
 HSPLandroid/app/ApplicationLoaders;->getCachedNonBootclasspathSystemLib(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/util/List;)Ljava/lang/ClassLoader;
 HSPLandroid/app/ApplicationLoaders;->getClassLoader(Ljava/lang/String;IZLjava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;)Ljava/lang/ClassLoader;
-HSPLandroid/app/ApplicationLoaders;->getClassLoader(Ljava/lang/String;IZLjava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;)Ljava/lang/ClassLoader;
+HSPLandroid/app/ApplicationLoaders;->getClassLoader(Ljava/lang/String;IZLjava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;)Ljava/lang/ClassLoader;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/ClassLoader;Ldalvik/system/PathClassLoader;
 HSPLandroid/app/ApplicationLoaders;->getClassLoaderWithSharedLibraries(Ljava/lang/String;IZLjava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;)Ljava/lang/ClassLoader;
 HSPLandroid/app/ApplicationLoaders;->getDefault()Landroid/app/ApplicationLoaders;
 HSPLandroid/app/ApplicationLoaders;->getSharedLibraryClassLoaderWithSharedLibraries(Ljava/lang/String;IZLjava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/util/List;Ljava/util/List;)Ljava/lang/ClassLoader;
@@ -1240,7 +1248,7 @@
 HSPLandroid/app/ApplicationPackageManager;->getActivityInfo(Landroid/content/ComponentName;Landroid/content/pm/PackageManager$ComponentInfoFlags;)Landroid/content/pm/ActivityInfo;+]Landroid/content/pm/IPackageManager;Landroid/content/pm/IPackageManager$Stub$Proxy;]Landroid/content/pm/PackageManager$ComponentInfoFlags;Landroid/content/pm/PackageManager$ComponentInfoFlags;]Landroid/app/ApplicationPackageManager;Landroid/app/ApplicationPackageManager;
 HSPLandroid/app/ApplicationPackageManager;->getApplicationEnabledSetting(Ljava/lang/String;)I
 HSPLandroid/app/ApplicationPackageManager;->getApplicationIcon(Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;
-HSPLandroid/app/ApplicationPackageManager;->getApplicationInfo(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo;
+HSPLandroid/app/ApplicationPackageManager;->getApplicationInfo(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo;+]Landroid/app/ApplicationPackageManager;Landroid/app/ApplicationPackageManager;
 HSPLandroid/app/ApplicationPackageManager;->getApplicationInfo(Ljava/lang/String;Landroid/content/pm/PackageManager$ApplicationInfoFlags;)Landroid/content/pm/ApplicationInfo;+]Landroid/app/ApplicationPackageManager;Landroid/app/ApplicationPackageManager;
 HSPLandroid/app/ApplicationPackageManager;->getApplicationInfoAsUser(Ljava/lang/String;II)Landroid/content/pm/ApplicationInfo;
 HSPLandroid/app/ApplicationPackageManager;->getApplicationInfoAsUser(Ljava/lang/String;Landroid/content/pm/PackageManager$ApplicationInfoFlags;I)Landroid/content/pm/ApplicationInfo;+]Landroid/content/pm/PackageManager$ApplicationInfoFlags;Landroid/content/pm/PackageManager$ApplicationInfoFlags;
@@ -1262,7 +1270,7 @@
 HSPLandroid/app/ApplicationPackageManager;->getLaunchIntentForPackage(Ljava/lang/String;)Landroid/content/Intent;
 HSPLandroid/app/ApplicationPackageManager;->getModuleInfo(Ljava/lang/String;I)Landroid/content/pm/ModuleInfo;
 HSPLandroid/app/ApplicationPackageManager;->getNameForUid(I)Ljava/lang/String;
-HSPLandroid/app/ApplicationPackageManager;->getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;
+HSPLandroid/app/ApplicationPackageManager;->getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;+]Landroid/app/ApplicationPackageManager;Landroid/app/ApplicationPackageManager;
 HSPLandroid/app/ApplicationPackageManager;->getPackageInfo(Ljava/lang/String;Landroid/content/pm/PackageManager$PackageInfoFlags;)Landroid/content/pm/PackageInfo;+]Landroid/app/ApplicationPackageManager;Landroid/app/ApplicationPackageManager;
 HSPLandroid/app/ApplicationPackageManager;->getPackageInfoAsUser(Ljava/lang/String;II)Landroid/content/pm/PackageInfo;
 HSPLandroid/app/ApplicationPackageManager;->getPackageInfoAsUser(Ljava/lang/String;Landroid/content/pm/PackageManager$PackageInfoFlags;I)Landroid/content/pm/PackageInfo;+]Landroid/content/pm/PackageManager$PackageInfoFlags;Landroid/content/pm/PackageManager$PackageInfoFlags;
@@ -1282,18 +1290,18 @@
 HSPLandroid/app/ApplicationPackageManager;->getProviderInfo(Landroid/content/ComponentName;Landroid/content/pm/PackageManager$ComponentInfoFlags;)Landroid/content/pm/ProviderInfo;
 HSPLandroid/app/ApplicationPackageManager;->getReceiverInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ActivityInfo;
 HSPLandroid/app/ApplicationPackageManager;->getReceiverInfo(Landroid/content/ComponentName;Landroid/content/pm/PackageManager$ComponentInfoFlags;)Landroid/content/pm/ActivityInfo;
-HSPLandroid/app/ApplicationPackageManager;->getResourcesForApplication(Landroid/content/pm/ApplicationInfo;)Landroid/content/res/Resources;
-HSPLandroid/app/ApplicationPackageManager;->getResourcesForApplication(Landroid/content/pm/ApplicationInfo;Landroid/content/res/Configuration;)Landroid/content/res/Resources;
-HSPLandroid/app/ApplicationPackageManager;->getResourcesForApplication(Ljava/lang/String;)Landroid/content/res/Resources;
+HSPLandroid/app/ApplicationPackageManager;->getResourcesForApplication(Landroid/content/pm/ApplicationInfo;)Landroid/content/res/Resources;+]Landroid/app/ApplicationPackageManager;Landroid/app/ApplicationPackageManager;
+HSPLandroid/app/ApplicationPackageManager;->getResourcesForApplication(Landroid/content/pm/ApplicationInfo;Landroid/content/res/Configuration;)Landroid/content/res/Resources;+]Landroid/app/ActivityThread;Landroid/app/ActivityThread;
+HSPLandroid/app/ApplicationPackageManager;->getResourcesForApplication(Ljava/lang/String;)Landroid/content/res/Resources;+]Landroid/app/ApplicationPackageManager;Landroid/app/ApplicationPackageManager;
 HSPLandroid/app/ApplicationPackageManager;->getServiceInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ServiceInfo;
-HSPLandroid/app/ApplicationPackageManager;->getServiceInfo(Landroid/content/ComponentName;Landroid/content/pm/PackageManager$ComponentInfoFlags;)Landroid/content/pm/ServiceInfo;+]Landroid/content/pm/PackageManager$ComponentInfoFlags;Landroid/content/pm/PackageManager$ComponentInfoFlags;]Landroid/app/ApplicationPackageManager;Landroid/app/ApplicationPackageManager;]Landroid/content/ComponentName;Landroid/content/ComponentName;
+HSPLandroid/app/ApplicationPackageManager;->getServiceInfo(Landroid/content/ComponentName;Landroid/content/pm/PackageManager$ComponentInfoFlags;)Landroid/content/pm/ServiceInfo;+]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/content/pm/PackageManager$ComponentInfoFlags;Landroid/content/pm/PackageManager$ComponentInfoFlags;]Landroid/app/ApplicationPackageManager;Landroid/app/ApplicationPackageManager;
 HSPLandroid/app/ApplicationPackageManager;->getServicesSystemSharedLibraryPackageName()Ljava/lang/String;
 HSPLandroid/app/ApplicationPackageManager;->getSystemAvailableFeatures()[Landroid/content/pm/FeatureInfo;
 HSPLandroid/app/ApplicationPackageManager;->getSystemSharedLibraryNames()[Ljava/lang/String;
 HSPLandroid/app/ApplicationPackageManager;->getText(Ljava/lang/String;ILandroid/content/pm/ApplicationInfo;)Ljava/lang/CharSequence;
 HSPLandroid/app/ApplicationPackageManager;->getUserBadgeColor(Landroid/os/UserHandle;Z)I
 HSPLandroid/app/ApplicationPackageManager;->getUserBadgedIcon(Landroid/graphics/drawable/Drawable;Landroid/os/UserHandle;)Landroid/graphics/drawable/Drawable;
-HSPLandroid/app/ApplicationPackageManager;->getUserId()I
+HSPLandroid/app/ApplicationPackageManager;->getUserId()I+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
 HSPLandroid/app/ApplicationPackageManager;->getUserManager()Landroid/os/UserManager;
 HSPLandroid/app/ApplicationPackageManager;->getXml(Ljava/lang/String;ILandroid/content/pm/ApplicationInfo;)Landroid/content/res/XmlResourceParser;
 HSPLandroid/app/ApplicationPackageManager;->handlePackageBroadcast(I[Ljava/lang/String;Z)V
@@ -1307,7 +1315,7 @@
 HSPLandroid/app/ApplicationPackageManager;->isSafeMode()Z
 HSPLandroid/app/ApplicationPackageManager;->loadItemIcon(Landroid/content/pm/PackageItemInfo;Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/app/ApplicationPackageManager;->loadUnbadgedItemIcon(Landroid/content/pm/PackageItemInfo;Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;
-HSPLandroid/app/ApplicationPackageManager;->maybeAdjustApplicationInfo(Landroid/content/pm/ApplicationInfo;)Landroid/content/pm/ApplicationInfo;
+HSPLandroid/app/ApplicationPackageManager;->maybeAdjustApplicationInfo(Landroid/content/pm/ApplicationInfo;)Landroid/content/pm/ApplicationInfo;+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/app/ApplicationPackageManager;->onImplicitDirectBoot(I)V
 HSPLandroid/app/ApplicationPackageManager;->putCachedIcon(Landroid/app/ApplicationPackageManager$ResourceName;Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/app/ApplicationPackageManager;->putCachedString(Landroid/app/ApplicationPackageManager$ResourceName;Ljava/lang/CharSequence;)V
@@ -1350,7 +1358,7 @@
 HSPLandroid/app/AsyncNotedAppOp$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/AsyncNotedAppOp;
 HSPLandroid/app/AsyncNotedAppOp$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/AsyncNotedAppOp;-><init>(IILjava/lang/String;Ljava/lang/String;J)V
-HSPLandroid/app/AsyncNotedAppOp;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/AsyncNotedAppOp;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/AsyncNotedAppOp;->getMessage()Ljava/lang/String;
 HSPLandroid/app/AsyncNotedAppOp;->getOp()Ljava/lang/String;
 HSPLandroid/app/AsyncNotedAppOp;->onConstructed()V
@@ -1404,14 +1412,14 @@
 HSPLandroid/app/ContextImpl$ApplicationContentResolver;->releaseUnstableProvider(Landroid/content/IContentProvider;)Z
 HSPLandroid/app/ContextImpl$ApplicationContentResolver;->resolveUserIdFromAuthority(Ljava/lang/String;)I
 HSPLandroid/app/ContextImpl$ApplicationContentResolver;->unstableProviderDied(Landroid/content/IContentProvider;)V
-HSPLandroid/app/ContextImpl;-><init>(Landroid/app/ContextImpl;Landroid/app/ActivityThread;Landroid/app/LoadedApk;Landroid/content/ContextParams;Ljava/lang/String;Landroid/content/AttributionSource;Ljava/lang/String;Landroid/os/IBinder;Landroid/os/UserHandle;ILjava/lang/ClassLoader;Ljava/lang/String;)V
+HSPLandroid/app/ContextImpl;-><init>(Landroid/app/ContextImpl;Landroid/app/ActivityThread;Landroid/app/LoadedApk;Landroid/content/ContextParams;Ljava/lang/String;Landroid/content/AttributionSource;Ljava/lang/String;Landroid/os/IBinder;Landroid/os/UserHandle;ILjava/lang/ClassLoader;Ljava/lang/String;)V+]Landroid/app/LoadedApk;Landroid/app/LoadedApk;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;]Landroid/content/ContextParams;Landroid/content/ContextParams;
 HSPLandroid/app/ContextImpl;->bindIsolatedService(Landroid/content/Intent;ILjava/lang/String;Ljava/util/concurrent/Executor;Landroid/content/ServiceConnection;)Z
 HSPLandroid/app/ContextImpl;->bindService(Landroid/content/Intent;Landroid/content/ServiceConnection;I)Z
 HSPLandroid/app/ContextImpl;->bindServiceAsUser(Landroid/content/Intent;Landroid/content/ServiceConnection;ILandroid/os/Handler;Landroid/os/UserHandle;)Z
 HSPLandroid/app/ContextImpl;->bindServiceAsUser(Landroid/content/Intent;Landroid/content/ServiceConnection;ILandroid/os/UserHandle;)Z
 HSPLandroid/app/ContextImpl;->bindServiceCommon(Landroid/content/Intent;Landroid/content/ServiceConnection;ILjava/lang/String;Landroid/os/Handler;Ljava/util/concurrent/Executor;Landroid/os/UserHandle;)Z
-HSPLandroid/app/ContextImpl;->canLoadUnsafeResources()Z
-HSPLandroid/app/ContextImpl;->checkCallingOrSelfPermission(Ljava/lang/String;)I
+HSPLandroid/app/ContextImpl;->canLoadUnsafeResources()Z+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
+HSPLandroid/app/ContextImpl;->checkCallingOrSelfPermission(Ljava/lang/String;)I+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
 HSPLandroid/app/ContextImpl;->checkCallingPermission(Ljava/lang/String;)I
 HSPLandroid/app/ContextImpl;->checkMode(I)V
 HSPLandroid/app/ContextImpl;->checkPermission(Ljava/lang/String;II)I
@@ -1441,7 +1449,7 @@
 HSPLandroid/app/ContextImpl;->createWindowContext(Landroid/view/Display;ILandroid/os/Bundle;)Landroid/content/Context;
 HSPLandroid/app/ContextImpl;->createWindowContext(Landroid/view/Display;ILandroid/os/Bundle;)Landroid/window/WindowContext;
 HSPLandroid/app/ContextImpl;->createWindowContextBase(Landroid/os/IBinder;I)Landroid/app/ContextImpl;+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;]Landroid/app/ResourcesManager;Landroid/app/ResourcesManager;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
-HSPLandroid/app/ContextImpl;->createWindowContextInternal(Landroid/view/Display;ILandroid/os/Bundle;)Landroid/window/WindowContext;+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;]Landroid/window/WindowContext;Landroid/window/WindowContext;]Landroid/window/WindowTokenClient;Landroid/window/WindowTokenClient;]Landroid/view/Display;Landroid/view/Display;
+HSPLandroid/app/ContextImpl;->createWindowContextInternal(Landroid/view/Display;ILandroid/os/Bundle;)Landroid/window/WindowContext;+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;]Landroid/window/WindowContext;Landroid/window/WindowContext;]Landroid/view/Display;Landroid/view/Display;]Landroid/window/WindowTokenClient;Landroid/window/WindowTokenClient;
 HSPLandroid/app/ContextImpl;->createWindowContextResources(Landroid/app/ContextImpl;)Landroid/content/res/Resources;+]Landroid/app/LoadedApk;Landroid/app/LoadedApk;]Landroid/app/ResourcesManager;Landroid/app/ResourcesManager;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLandroid/app/ContextImpl;->databaseList()[Ljava/lang/String;
 HSPLandroid/app/ContextImpl;->deleteDatabase(Ljava/lang/String;)Z
@@ -1451,19 +1459,19 @@
 HSPLandroid/app/ContextImpl;->enforceCallingOrSelfPermission(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/app/ContextImpl;->enforceCallingPermission(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/app/ContextImpl;->enforcePermission(Ljava/lang/String;IILjava/lang/String;)V
-HSPLandroid/app/ContextImpl;->ensureExternalDirsExistOrFilter([Ljava/io/File;Z)[Ljava/io/File;
+HSPLandroid/app/ContextImpl;->ensureExternalDirsExistOrFilter([Ljava/io/File;Z)[Ljava/io/File;+]Ljava/io/File;Ljava/io/File;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
 HSPLandroid/app/ContextImpl;->ensurePrivateCacheDirExists(Ljava/io/File;Ljava/lang/String;)Ljava/io/File;
 HSPLandroid/app/ContextImpl;->ensurePrivateDirExists(Ljava/io/File;)Ljava/io/File;
-HSPLandroid/app/ContextImpl;->ensurePrivateDirExists(Ljava/io/File;IILjava/lang/String;)Ljava/io/File;
+HSPLandroid/app/ContextImpl;->ensurePrivateDirExists(Ljava/io/File;IILjava/lang/String;)Ljava/io/File;+]Ljava/io/File;Ljava/io/File;
 HSPLandroid/app/ContextImpl;->fileList()[Ljava/lang/String;
 HSPLandroid/app/ContextImpl;->finalize()V+]Landroid/window/WindowTokenClient;Landroid/window/WindowTokenClient;
 HSPLandroid/app/ContextImpl;->getActivityToken()Landroid/os/IBinder;
-HSPLandroid/app/ContextImpl;->getApplicationContext()Landroid/content/Context;
+HSPLandroid/app/ContextImpl;->getApplicationContext()Landroid/content/Context;+]Landroid/app/LoadedApk;Landroid/app/LoadedApk;
 HSPLandroid/app/ContextImpl;->getApplicationInfo()Landroid/content/pm/ApplicationInfo;+]Landroid/app/LoadedApk;Landroid/app/LoadedApk;
 HSPLandroid/app/ContextImpl;->getAssets()Landroid/content/res/AssetManager;
 HSPLandroid/app/ContextImpl;->getAssociatedDisplayId()I+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
 HSPLandroid/app/ContextImpl;->getAttributionSource()Landroid/content/AttributionSource;
-HSPLandroid/app/ContextImpl;->getAttributionTag()Ljava/lang/String;
+HSPLandroid/app/ContextImpl;->getAttributionTag()Ljava/lang/String;+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;
 HSPLandroid/app/ContextImpl;->getAutofillClient()Landroid/view/autofill/AutofillManager$AutofillClient;
 HSPLandroid/app/ContextImpl;->getAutofillOptions()Landroid/content/AutofillOptions;
 HSPLandroid/app/ContextImpl;->getBasePackageName()Ljava/lang/String;
@@ -1473,21 +1481,21 @@
 HSPLandroid/app/ContextImpl;->getCodeCacheDirBeforeBind(Ljava/io/File;)Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getContentCaptureOptions()Landroid/content/ContentCaptureOptions;
 HSPLandroid/app/ContextImpl;->getContentResolver()Landroid/content/ContentResolver;
-HSPLandroid/app/ContextImpl;->getDataDir()Ljava/io/File;
+HSPLandroid/app/ContextImpl;->getDataDir()Ljava/io/File;+]Landroid/app/LoadedApk;Landroid/app/LoadedApk;]Ljava/io/File;Ljava/io/File;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
 HSPLandroid/app/ContextImpl;->getDatabasePath(Ljava/lang/String;)Ljava/io/File;+]Ljava/lang/String;Ljava/lang/String;]Ljava/io/File;Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getDatabasesDir()Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getDir(Ljava/lang/String;I)Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getDisplay()Landroid/view/Display;
 HSPLandroid/app/ContextImpl;->getDisplayAdjustments(I)Landroid/view/DisplayAdjustments;
-HSPLandroid/app/ContextImpl;->getDisplayId()I
+HSPLandroid/app/ContextImpl;->getDisplayId()I+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;]Landroid/view/Display;Landroid/view/Display;
 HSPLandroid/app/ContextImpl;->getDisplayNoVerify()Landroid/view/Display;
 HSPLandroid/app/ContextImpl;->getExternalCacheDir()Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getExternalCacheDirs()[Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getExternalFilesDir(Ljava/lang/String;)Ljava/io/File;
-HSPLandroid/app/ContextImpl;->getExternalFilesDirs(Ljava/lang/String;)[Ljava/io/File;
+HSPLandroid/app/ContextImpl;->getExternalFilesDirs(Ljava/lang/String;)[Ljava/io/File;+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
 HSPLandroid/app/ContextImpl;->getExternalMediaDirs()[Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getFileStreamPath(Ljava/lang/String;)Ljava/io/File;
-HSPLandroid/app/ContextImpl;->getFilesDir()Ljava/io/File;
+HSPLandroid/app/ContextImpl;->getFilesDir()Ljava/io/File;+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
 HSPLandroid/app/ContextImpl;->getImpl(Landroid/content/Context;)Landroid/app/ContextImpl;
 HSPLandroid/app/ContextImpl;->getMainExecutor()Ljava/util/concurrent/Executor;
 HSPLandroid/app/ContextImpl;->getMainLooper()Landroid/os/Looper;
@@ -1535,7 +1543,7 @@
 HSPLandroid/app/ContextImpl;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;I)Landroid/content/Intent;+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
 HSPLandroid/app/ContextImpl;->registerReceiverAsUser(Landroid/content/BroadcastReceiver;Landroid/os/UserHandle;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;)Landroid/content/Intent;
 HSPLandroid/app/ContextImpl;->registerReceiverForAllUsers(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;)Landroid/content/Intent;
-HSPLandroid/app/ContextImpl;->registerReceiverInternal(Landroid/content/BroadcastReceiver;ILandroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;Landroid/content/Context;I)Landroid/content/Intent;
+HSPLandroid/app/ContextImpl;->registerReceiverInternal(Landroid/content/BroadcastReceiver;ILandroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;Landroid/content/Context;I)Landroid/content/Intent;+]Landroid/app/LoadedApk;Landroid/app/LoadedApk;]Landroid/app/Instrumentation;Landroid/app/Instrumentation;]Landroid/app/ActivityThread;Landroid/app/ActivityThread;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/app/IActivityManager;Landroid/app/IActivityManager$Stub$Proxy;
 HSPLandroid/app/ContextImpl;->resolveUserId(Landroid/net/Uri;)I
 HSPLandroid/app/ContextImpl;->revokeUriPermission(Landroid/net/Uri;I)V
 HSPLandroid/app/ContextImpl;->scheduleFinalCleanup(Ljava/lang/String;Ljava/lang/String;)V
@@ -1563,7 +1571,7 @@
 HSPLandroid/app/ContextImpl;->startForegroundService(Landroid/content/Intent;)Landroid/content/ComponentName;
 HSPLandroid/app/ContextImpl;->startService(Landroid/content/Intent;)Landroid/content/ComponentName;
 HSPLandroid/app/ContextImpl;->startServiceAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)Landroid/content/ComponentName;
-HSPLandroid/app/ContextImpl;->startServiceCommon(Landroid/content/Intent;ZLandroid/os/UserHandle;)Landroid/content/ComponentName;
+HSPLandroid/app/ContextImpl;->startServiceCommon(Landroid/content/Intent;ZLandroid/os/UserHandle;)Landroid/content/ComponentName;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/app/ActivityThread;Landroid/app/ActivityThread;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/app/IActivityManager;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLandroid/app/ContextImpl;->stopService(Landroid/content/Intent;)Z
 HSPLandroid/app/ContextImpl;->stopServiceCommon(Landroid/content/Intent;Landroid/os/UserHandle;)Z
 HSPLandroid/app/ContextImpl;->unbindService(Landroid/content/ServiceConnection;)V
@@ -1840,11 +1848,11 @@
 HSPLandroid/app/IActivityManager$Stub$Proxy;->getCurrentUserId()I
 HSPLandroid/app/IActivityManager$Stub$Proxy;->getHistoricalProcessExitReasons(Ljava/lang/String;III)Landroid/content/pm/ParceledListSlice;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->getInfoForIntentSender(Landroid/content/IIntentSender;)Landroid/app/ActivityManager$PendingIntentInfo;
-HSPLandroid/app/IActivityManager$Stub$Proxy;->getIntentSenderWithFeature(ILjava/lang/String;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;I[Landroid/content/Intent;[Ljava/lang/String;ILandroid/os/Bundle;I)Landroid/content/IIntentSender;
+HSPLandroid/app/IActivityManager$Stub$Proxy;->getIntentSenderWithFeature(ILjava/lang/String;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;I[Landroid/content/Intent;[Ljava/lang/String;ILandroid/os/Bundle;I)Landroid/content/IIntentSender;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->getMemoryInfo(Landroid/app/ActivityManager$MemoryInfo;)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->getMyMemoryState(Landroid/app/ActivityManager$RunningAppProcessInfo;)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->getProcessMemoryInfo([I)[Landroid/os/Debug$MemoryInfo;
-HSPLandroid/app/IActivityManager$Stub$Proxy;->getProviderMimeTypeAsync(Landroid/net/Uri;ILandroid/os/RemoteCallback;)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->getProviderMimeTypeAsync(Landroid/net/Uri;ILandroid/os/RemoteCallback;)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->getRunningAppProcesses()Ljava/util/List;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->getServices(II)Ljava/util/List;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->grantUriPermission(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/net/Uri;II)V
@@ -1854,16 +1862,16 @@
 HSPLandroid/app/IActivityManager$Stub$Proxy;->isUserAMonkey()Z
 HSPLandroid/app/IActivityManager$Stub$Proxy;->publishContentProviders(Landroid/app/IApplicationThread;Ljava/util/List;)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->publishService(Landroid/os/IBinder;Landroid/content/Intent;Landroid/os/IBinder;)V
-HSPLandroid/app/IActivityManager$Stub$Proxy;->refContentProvider(Landroid/os/IBinder;II)Z
-HSPLandroid/app/IActivityManager$Stub$Proxy;->registerReceiverWithFeature(Landroid/app/IApplicationThread;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/content/IIntentReceiver;Landroid/content/IntentFilter;Ljava/lang/String;II)Landroid/content/Intent;
+HSPLandroid/app/IActivityManager$Stub$Proxy;->refContentProvider(Landroid/os/IBinder;II)Z+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/app/IActivityManager$Stub$Proxy;->registerReceiverWithFeature(Landroid/app/IApplicationThread;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/content/IIntentReceiver;Landroid/content/IntentFilter;Ljava/lang/String;II)Landroid/content/Intent;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->registerUidObserver(Landroid/app/IUidObserver;IILjava/lang/String;)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->removeContentProvider(Landroid/os/IBinder;Z)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->revokeUriPermission(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/net/Uri;II)V
-HSPLandroid/app/IActivityManager$Stub$Proxy;->sendIntentSender(Landroid/content/IIntentSender;Landroid/os/IBinder;ILandroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;Ljava/lang/String;Landroid/os/Bundle;)I
+HSPLandroid/app/IActivityManager$Stub$Proxy;->sendIntentSender(Landroid/content/IIntentSender;Landroid/os/IBinder;ILandroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;Ljava/lang/String;Landroid/os/Bundle;)I+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->serviceDoneExecuting(Landroid/os/IBinder;III)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->setRenderThread(I)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->setServiceForeground(Landroid/content/ComponentName;Landroid/os/IBinder;ILandroid/app/Notification;II)V
-HSPLandroid/app/IActivityManager$Stub$Proxy;->startService(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;I)Landroid/content/ComponentName;
+HSPLandroid/app/IActivityManager$Stub$Proxy;->startService(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;I)Landroid/content/ComponentName;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->stopService(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;I)I
 HSPLandroid/app/IActivityManager$Stub$Proxy;->stopServiceToken(Landroid/content/ComponentName;Landroid/os/IBinder;I)Z
 HSPLandroid/app/IActivityManager$Stub$Proxy;->unbindFinished(Landroid/os/IBinder;Landroid/content/Intent;Z)V
@@ -1899,7 +1907,7 @@
 HSPLandroid/app/IApplicationThread$Stub;-><init>()V
 HSPLandroid/app/IApplicationThread$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/app/IApplicationThread$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IApplicationThread;
-HSPLandroid/app/IApplicationThread$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/app/IApplicationThread$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z+]Landroid/app/IApplicationThread$Stub;Landroid/app/ActivityThread$ApplicationThread;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/IBackupAgent$Stub;-><init>()V
 HSPLandroid/app/IBackupAgent$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/app/IBackupAgent$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
@@ -1911,16 +1919,16 @@
 HSPLandroid/app/INotificationManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/app/INotificationManager$Stub$Proxy;->areNotificationsEnabled(Ljava/lang/String;)Z
 HSPLandroid/app/INotificationManager$Stub$Proxy;->cancelAllNotifications(Ljava/lang/String;I)V
-HSPLandroid/app/INotificationManager$Stub$Proxy;->cancelNotificationWithTag(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V
+HSPLandroid/app/INotificationManager$Stub$Proxy;->cancelNotificationWithTag(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/INotificationManager$Stub$Proxy;->createNotificationChannelGroups(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V
 HSPLandroid/app/INotificationManager$Stub$Proxy;->createNotificationChannels(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V
 HSPLandroid/app/INotificationManager$Stub$Proxy;->deleteNotificationChannel(Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/app/INotificationManager$Stub$Proxy;->enqueueNotificationWithTag(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/app/Notification;I)V
+HSPLandroid/app/INotificationManager$Stub$Proxy;->enqueueNotificationWithTag(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/app/Notification;I)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/INotificationManager$Stub$Proxy;->finishToken(Ljava/lang/String;Landroid/os/IBinder;)V
 HSPLandroid/app/INotificationManager$Stub$Proxy;->getActiveNotificationsFromListener(Landroid/service/notification/INotificationListener;[Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
 HSPLandroid/app/INotificationManager$Stub$Proxy;->getAppActiveNotifications(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
-HSPLandroid/app/INotificationManager$Stub$Proxy;->getNotificationChannel(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Landroid/app/NotificationChannel;
-HSPLandroid/app/INotificationManager$Stub$Proxy;->getNotificationChannelGroup(Ljava/lang/String;Ljava/lang/String;)Landroid/app/NotificationChannelGroup;
+HSPLandroid/app/INotificationManager$Stub$Proxy;->getNotificationChannel(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Landroid/app/NotificationChannel;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/app/INotificationManager$Stub$Proxy;->getNotificationChannelGroup(Ljava/lang/String;Ljava/lang/String;)Landroid/app/NotificationChannelGroup;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/INotificationManager$Stub$Proxy;->getNotificationChannelGroups(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
 HSPLandroid/app/INotificationManager$Stub$Proxy;->getNotificationChannels(Ljava/lang/String;Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
 HSPLandroid/app/INotificationManager$Stub$Proxy;->getNotificationPolicy(Ljava/lang/String;)Landroid/app/NotificationManager$Policy;
@@ -2004,7 +2012,7 @@
 HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0;->run()V
 HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args;-><init>(Landroid/app/LoadedApk$ReceiverDispatcher;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V
 HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args;->getRunnable()Ljava/lang/Runnable;
-HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args;->lambda$getRunnable$0$android-app-LoadedApk$ReceiverDispatcher$Args()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/Context;missing_types]Ljava/lang/Class;Ljava/lang/Class;]Landroid/app/LoadedApk$ReceiverDispatcher$Args;Landroid/app/LoadedApk$ReceiverDispatcher$Args;]Landroid/content/Intent;Landroid/content/Intent;]Ljava/lang/Object;megamorphic_types]Landroid/content/BroadcastReceiver;megamorphic_types
+HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args;->lambda$getRunnable$0$android-app-LoadedApk$ReceiverDispatcher$Args()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Object;megamorphic_types]Landroid/content/Context;missing_types]Landroid/content/BroadcastReceiver;megamorphic_types]Ljava/lang/Class;Ljava/lang/Class;]Landroid/app/LoadedApk$ReceiverDispatcher$Args;Landroid/app/LoadedApk$ReceiverDispatcher$Args;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLandroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;-><init>(Landroid/app/LoadedApk$ReceiverDispatcher;Z)V
 HSPLandroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V
 HSPLandroid/app/LoadedApk$ReceiverDispatcher;-><init>(Landroid/content/BroadcastReceiver;Landroid/content/Context;Landroid/os/Handler;Landroid/app/Instrumentation;Z)V
@@ -2060,7 +2068,7 @@
 HSPLandroid/app/LoadedApk;->getApplicationInfo()Landroid/content/pm/ApplicationInfo;
 HSPLandroid/app/LoadedApk;->getAssets()Landroid/content/res/AssetManager;
 HSPLandroid/app/LoadedApk;->getClassLoader()Ljava/lang/ClassLoader;
-HSPLandroid/app/LoadedApk;->getCompatibilityInfo()Landroid/content/res/CompatibilityInfo;
+HSPLandroid/app/LoadedApk;->getCompatibilityInfo()Landroid/content/res/CompatibilityInfo;+]Landroid/view/DisplayAdjustments;Landroid/view/DisplayAdjustments;
 HSPLandroid/app/LoadedApk;->getCredentialProtectedDataDirFile()Ljava/io/File;
 HSPLandroid/app/LoadedApk;->getDataDirFile()Ljava/io/File;
 HSPLandroid/app/LoadedApk;->getDeviceProtectedDataDirFile()Ljava/io/File;
@@ -2090,7 +2098,7 @@
 HSPLandroid/app/LoadedApk;->setVmPolicy(Landroid/os/StrictMode$VmPolicy;)V
 HSPLandroid/app/LoadedApk;->updateApplicationInfo(Landroid/content/pm/ApplicationInfo;Ljava/util/List;)V
 HSPLandroid/app/Notification$$ExternalSyntheticLambda0;-><init>(Landroid/app/Notification;Landroid/os/Parcel;)V
-HSPLandroid/app/Notification$$ExternalSyntheticLambda0;->onMarshaled(Landroid/app/PendingIntent;Landroid/os/Parcel;I)V
+HSPLandroid/app/Notification$$ExternalSyntheticLambda0;->onMarshaled(Landroid/app/PendingIntent;Landroid/os/Parcel;I)V+]Landroid/app/Notification;Landroid/app/Notification;
 HSPLandroid/app/Notification$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/Notification;
 HSPLandroid/app/Notification$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/Notification$Action$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/Notification$Action;
@@ -2111,7 +2119,7 @@
 HSPLandroid/app/Notification$Action;->getIcon()Landroid/graphics/drawable/Icon;
 HSPLandroid/app/Notification$Action;->getRemoteInputs()[Landroid/app/RemoteInput;
 HSPLandroid/app/Notification$Action;->isContextual()Z
-HSPLandroid/app/Notification$Action;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/Notification$Action;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/app/PendingIntent;Landroid/app/PendingIntent;]Landroid/app/Notification$Action;Landroid/app/Notification$Action;]Landroid/graphics/drawable/Icon;Landroid/graphics/drawable/Icon;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/Notification$BigPictureStyle;-><init>()V
 HSPLandroid/app/Notification$BigPictureStyle;->addExtras(Landroid/os/Bundle;)V
 HSPLandroid/app/Notification$BigPictureStyle;->purgeResources()V
@@ -2127,65 +2135,65 @@
 HSPLandroid/app/Notification$BubbleMetadata$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/Notification$BubbleMetadata;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/app/Notification$Builder;-><init>(Landroid/content/Context;)V
-HSPLandroid/app/Notification$Builder;-><init>(Landroid/content/Context;Landroid/app/Notification;)V
+HSPLandroid/app/Notification$Builder;-><init>(Landroid/content/Context;Landroid/app/Notification;)V+]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLandroid/app/Notification$Builder;-><init>(Landroid/content/Context;Ljava/lang/String;)V
 HSPLandroid/app/Notification$Builder;->addAction(Landroid/app/Notification$Action;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->addExtras(Landroid/os/Bundle;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->addPerson(Landroid/app/Person;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->addPerson(Ljava/lang/String;)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->build()Landroid/app/Notification;
-HSPLandroid/app/Notification$Builder;->buildUnstyled()Landroid/app/Notification;
-HSPLandroid/app/Notification$Builder;->getAllExtras()Landroid/os/Bundle;
+HSPLandroid/app/Notification$Builder;->build()Landroid/app/Notification;+]Landroid/app/Notification;Landroid/app/Notification;]Landroid/app/Notification$Builder;Landroid/app/Notification$Builder;]Landroid/app/Notification$Style;Landroid/app/Notification$BigTextStyle;
+HSPLandroid/app/Notification$Builder;->buildUnstyled()Landroid/app/Notification;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/app/Notification$Builder;->getAllExtras()Landroid/os/Bundle;+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/app/Notification$Builder;->getStyle()Landroid/app/Notification$Style;
-HSPLandroid/app/Notification$Builder;->maybeCloneStrippedForDelivery(Landroid/app/Notification;)Landroid/app/Notification;
+HSPLandroid/app/Notification$Builder;->maybeCloneStrippedForDelivery(Landroid/app/Notification;)Landroid/app/Notification;+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/app/Notification$Builder;->recoverBuilder(Landroid/content/Context;Landroid/app/Notification;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->sanitizeColor()V
 HSPLandroid/app/Notification$Builder;->setAllowSystemGeneratedContextualActions(Z)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setAutoCancel(Z)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setAutoCancel(Z)Landroid/app/Notification$Builder;+]Landroid/app/Notification$Builder;Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setBadgeIconType(I)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setBubbleMetadata(Landroid/app/Notification$BubbleMetadata;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setCategory(Ljava/lang/String;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setColor(I)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setContent(Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setContentInfo(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setContent(Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;+]Landroid/app/Notification$Builder;Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setContentInfo(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/app/Notification$Builder;->setContentIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setContentText(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setContentTitle(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setContentText(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;+]Landroid/os/Bundle;Landroid/os/Bundle;
+HSPLandroid/app/Notification$Builder;->setContentTitle(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/app/Notification$Builder;->setCustomContentView(Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setDefaults(I)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setDeleteIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setExtras(Landroid/os/Bundle;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setFlag(IZ)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setFullScreenIntent(Landroid/app/PendingIntent;Z)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setFullScreenIntent(Landroid/app/PendingIntent;Z)Landroid/app/Notification$Builder;+]Landroid/app/Notification$Builder;Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setGroup(Ljava/lang/String;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setGroupAlertBehavior(I)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setGroupSummary(Z)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setLargeIcon(Landroid/graphics/Bitmap;)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setLargeIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setLargeIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$Builder;+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/app/Notification$Builder;->setLights(III)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setLocalOnly(Z)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setNumber(I)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setOngoing(Z)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setOnlyAlertOnce(Z)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setOngoing(Z)Landroid/app/Notification$Builder;+]Landroid/app/Notification$Builder;Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setOnlyAlertOnce(Z)Landroid/app/Notification$Builder;+]Landroid/app/Notification$Builder;Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setPriority(I)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setProgress(IIZ)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setProgress(IIZ)Landroid/app/Notification$Builder;+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/app/Notification$Builder;->setPublicVersion(Landroid/app/Notification;)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setRemoteInputHistory([Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setRemoteInputHistory([Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/app/Notification$Builder;->setSettingsText(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setShortcutId(Ljava/lang/String;)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setShowWhen(Z)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setSmallIcon(I)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setSmallIcon(II)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setSmallIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setShowWhen(Z)Landroid/app/Notification$Builder;+]Landroid/os/Bundle;Landroid/os/Bundle;
+HSPLandroid/app/Notification$Builder;->setSmallIcon(I)Landroid/app/Notification$Builder;+]Landroid/app/Notification$Builder;Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setSmallIcon(II)Landroid/app/Notification$Builder;+]Landroid/app/Notification$Builder;Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setSmallIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$Builder;+]Landroid/app/Notification;Landroid/app/Notification;]Landroid/graphics/drawable/Icon;Landroid/graphics/drawable/Icon;
 HSPLandroid/app/Notification$Builder;->setSortKey(Ljava/lang/String;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setSound(Landroid/net/Uri;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setSound(Landroid/net/Uri;Landroid/media/AudioAttributes;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setStyle(Landroid/app/Notification$Style;)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setSubText(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setSubText(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/app/Notification$Builder;->setTicker(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setTicker(Ljava/lang/CharSequence;Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setTicker(Ljava/lang/CharSequence;Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;+]Landroid/app/Notification$Builder;Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setTimeoutAfter(J)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setUsesChronometer(Z)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setUsesChronometer(Z)Landroid/app/Notification$Builder;+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/app/Notification$Builder;->setVibrate([J)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setVisibility(I)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setWhen(J)Landroid/app/Notification$Builder;
@@ -2231,12 +2239,12 @@
 HSPLandroid/app/Notification$Style;->validate(Landroid/content/Context;)V
 HSPLandroid/app/Notification;-><init>()V
 HSPLandroid/app/Notification;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/app/Notification;->addFieldsFromContext(Landroid/content/Context;Landroid/app/Notification;)V
-HSPLandroid/app/Notification;->addFieldsFromContext(Landroid/content/pm/ApplicationInfo;Landroid/app/Notification;)V
+HSPLandroid/app/Notification;->addFieldsFromContext(Landroid/content/Context;Landroid/app/Notification;)V+]Landroid/content/Context;missing_types
+HSPLandroid/app/Notification;->addFieldsFromContext(Landroid/content/pm/ApplicationInfo;Landroid/app/Notification;)V+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/app/Notification;->areStyledNotificationsVisiblyDifferent(Landroid/app/Notification$Builder;Landroid/app/Notification$Builder;)Z
 HSPLandroid/app/Notification;->cloneInto(Landroid/app/Notification;Z)V
 HSPLandroid/app/Notification;->findRemoteInputActionPair(Z)Landroid/util/Pair;
-HSPLandroid/app/Notification;->fixDuplicateExtra(Landroid/os/Parcelable;Ljava/lang/String;)V
+HSPLandroid/app/Notification;->fixDuplicateExtra(Landroid/os/Parcelable;Ljava/lang/String;)V+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/app/Notification;->fixDuplicateExtras()V
 HSPLandroid/app/Notification;->getBubbleMetadata()Landroid/app/Notification$BubbleMetadata;
 HSPLandroid/app/Notification;->getChannelId()Ljava/lang/String;
@@ -2256,19 +2264,19 @@
 HSPLandroid/app/Notification;->isGroupSummary()Z
 HSPLandroid/app/Notification;->isMediaNotification()Z
 HSPLandroid/app/Notification;->lambda$writeToParcel$0$android-app-Notification(Landroid/os/Parcel;Landroid/app/PendingIntent;Landroid/os/Parcel;I)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;
-HSPLandroid/app/Notification;->readFromParcelImpl(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/graphics/drawable/Icon$1;,Landroid/app/PendingIntent$1;,Landroid/media/AudioAttributes$1;,Landroid/text/TextUtils$1;,Landroid/app/Notification$1;,Landroid/widget/RemoteViews$2;]Landroid/graphics/drawable/Icon;Landroid/graphics/drawable/Icon;]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/app/Notification;->reduceImageSizes(Landroid/content/Context;)V
+HSPLandroid/app/Notification;->readFromParcelImpl(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/app/Notification$1;,Landroid/graphics/drawable/Icon$1;,Landroid/app/PendingIntent$1;,Landroid/content/LocusId$1;,Landroid/media/AudioAttributes$1;,Landroid/text/TextUtils$1;,Landroid/widget/RemoteViews$2;,Landroid/app/Notification$BubbleMetadata$1;]Landroid/graphics/drawable/Icon;Landroid/graphics/drawable/Icon;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/app/Notification;->reduceImageSizes(Landroid/content/Context;)V+]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/graphics/drawable/Icon;Landroid/graphics/drawable/Icon;
 HSPLandroid/app/Notification;->reduceImageSizesForRemoteView(Landroid/widget/RemoteViews;Landroid/content/Context;Z)V
 HSPLandroid/app/Notification;->removeTextSizeSpans(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
-HSPLandroid/app/Notification;->safeCharSequence(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
+HSPLandroid/app/Notification;->safeCharSequence(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;+]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/app/Notification;->setSmallIcon(Landroid/graphics/drawable/Icon;)V
 HSPLandroid/app/Notification;->suppressAlertingDueToGrouping()Z
-HSPLandroid/app/Notification;->toString()Ljava/lang/String;+]Landroid/widget/RemoteViews;Landroid/widget/RemoteViews;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/app/Notification;Landroid/app/Notification;
+HSPLandroid/app/Notification;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/app/Notification;Landroid/app/Notification;]Landroid/widget/RemoteViews;Landroid/widget/RemoteViews;
 HSPLandroid/app/Notification;->visibilityToString(I)Ljava/lang/String;
-HSPLandroid/app/Notification;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/app/Notification;->writeToParcelImpl(Landroid/os/Parcel;I)V
+HSPLandroid/app/Notification;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/app/Notification;->writeToParcelImpl(Landroid/os/Parcel;I)V+]Landroid/app/PendingIntent;Landroid/app/PendingIntent;]Landroid/media/AudioAttributes;Landroid/media/AudioAttributes;]Landroid/graphics/drawable/Icon;Landroid/graphics/drawable/Icon;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/NotificationChannel$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/NotificationChannel;
-HSPLandroid/app/NotificationChannel$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/app/NotificationChannel$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/app/NotificationChannel$1;Landroid/app/NotificationChannel$1;
 HSPLandroid/app/NotificationChannel;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/net/Uri$1;,Landroid/media/AudioAttributes$1;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/NotificationChannel;-><init>(Ljava/lang/String;Ljava/lang/CharSequence;I)V
 HSPLandroid/app/NotificationChannel;->canBubble()Z
@@ -2307,11 +2315,11 @@
 HSPLandroid/app/NotificationChannel;->setVibrationPattern([J)V
 HSPLandroid/app/NotificationChannel;->shouldShowLights()Z
 HSPLandroid/app/NotificationChannel;->shouldVibrate()Z
-HSPLandroid/app/NotificationChannel;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/NotificationChannel;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/media/AudioAttributes;Landroid/media/AudioAttributes;]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/net/Uri;Landroid/net/Uri$StringUri;
 HSPLandroid/app/NotificationChannel;->writeXml(Lorg/xmlpull/v1/XmlSerializer;)V
 HSPLandroid/app/NotificationChannelGroup$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/NotificationChannelGroup;
 HSPLandroid/app/NotificationChannelGroup$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/app/NotificationChannelGroup;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/NotificationChannelGroup;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/text/TextUtils$1;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/NotificationChannelGroup;-><init>(Ljava/lang/String;Ljava/lang/CharSequence;)V
 HSPLandroid/app/NotificationChannelGroup;->equals(Ljava/lang/Object;)Z
 HSPLandroid/app/NotificationChannelGroup;->getChannels()Ljava/util/List;
@@ -2339,21 +2347,21 @@
 HSPLandroid/app/NotificationManager;->createNotificationChannels(Ljava/util/List;)V
 HSPLandroid/app/NotificationManager;->deleteNotificationChannel(Ljava/lang/String;)V
 HSPLandroid/app/NotificationManager;->fixLegacySmallIcon(Landroid/app/Notification;Ljava/lang/String;)V
-HSPLandroid/app/NotificationManager;->fixNotification(Landroid/app/Notification;)Landroid/app/Notification;
+HSPLandroid/app/NotificationManager;->fixNotification(Landroid/app/Notification;)Landroid/app/Notification;+]Landroid/app/Notification;Landroid/app/Notification;]Landroid/content/Context;Landroid/view/ContextThemeWrapper;
 HSPLandroid/app/NotificationManager;->getActiveNotifications()[Landroid/service/notification/StatusBarNotification;
 HSPLandroid/app/NotificationManager;->getAutomaticZenRules()Ljava/util/Map;
 HSPLandroid/app/NotificationManager;->getConsolidatedNotificationPolicy()Landroid/app/NotificationManager$Policy;
 HSPLandroid/app/NotificationManager;->getCurrentInterruptionFilter()I
-HSPLandroid/app/NotificationManager;->getNotificationChannel(Ljava/lang/String;)Landroid/app/NotificationChannel;
-HSPLandroid/app/NotificationManager;->getNotificationChannelGroup(Ljava/lang/String;)Landroid/app/NotificationChannelGroup;
+HSPLandroid/app/NotificationManager;->getNotificationChannel(Ljava/lang/String;)Landroid/app/NotificationChannel;+]Landroid/content/Context;Landroid/view/ContextThemeWrapper;]Landroid/app/INotificationManager;Landroid/app/INotificationManager$Stub$Proxy;
+HSPLandroid/app/NotificationManager;->getNotificationChannelGroup(Ljava/lang/String;)Landroid/app/NotificationChannelGroup;+]Landroid/content/Context;Landroid/view/ContextThemeWrapper;]Landroid/app/INotificationManager;Landroid/app/INotificationManager$Stub$Proxy;
 HSPLandroid/app/NotificationManager;->getNotificationChannelGroups()Ljava/util/List;
 HSPLandroid/app/NotificationManager;->getNotificationChannels()Ljava/util/List;
 HSPLandroid/app/NotificationManager;->getNotificationPolicy()Landroid/app/NotificationManager$Policy;
 HSPLandroid/app/NotificationManager;->getService()Landroid/app/INotificationManager;
 HSPLandroid/app/NotificationManager;->isNotificationPolicyAccessGranted()Z
 HSPLandroid/app/NotificationManager;->notify(ILandroid/app/Notification;)V
-HSPLandroid/app/NotificationManager;->notify(Ljava/lang/String;ILandroid/app/Notification;)V
-HSPLandroid/app/NotificationManager;->notifyAsUser(Ljava/lang/String;ILandroid/app/Notification;Landroid/os/UserHandle;)V
+HSPLandroid/app/NotificationManager;->notify(Ljava/lang/String;ILandroid/app/Notification;)V+]Landroid/app/NotificationManager;Landroid/app/NotificationManager;]Landroid/content/Context;Landroid/view/ContextThemeWrapper;
+HSPLandroid/app/NotificationManager;->notifyAsUser(Ljava/lang/String;ILandroid/app/Notification;Landroid/os/UserHandle;)V+]Landroid/content/Context;Landroid/view/ContextThemeWrapper;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/app/INotificationManager;Landroid/app/INotificationManager$Stub$Proxy;
 HSPLandroid/app/NotificationManager;->zenModeToInterruptionFilter(I)I
 HSPLandroid/app/PendingIntent$$ExternalSyntheticLambda1;-><init>()V
 HSPLandroid/app/PendingIntent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/PendingIntent;+]Landroid/os/Parcel;Landroid/os/Parcel;
@@ -2366,32 +2374,32 @@
 HSPLandroid/app/PendingIntent;->buildServicePendingIntent(Landroid/content/Context;ILandroid/content/Intent;II)Landroid/app/PendingIntent;
 HSPLandroid/app/PendingIntent;->cancel()V
 HSPLandroid/app/PendingIntent;->checkFlags(ILjava/lang/String;)V
-HSPLandroid/app/PendingIntent;->equals(Ljava/lang/Object;)Z
+HSPLandroid/app/PendingIntent;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Landroid/os/BinderProxy;]Landroid/content/IIntentSender;Landroid/content/IIntentSender$Stub$Proxy;
 HSPLandroid/app/PendingIntent;->getActivities(Landroid/content/Context;I[Landroid/content/Intent;ILandroid/os/Bundle;)Landroid/app/PendingIntent;
 HSPLandroid/app/PendingIntent;->getActivitiesAsUser(Landroid/content/Context;I[Landroid/content/Intent;ILandroid/os/Bundle;Landroid/os/UserHandle;)Landroid/app/PendingIntent;
 HSPLandroid/app/PendingIntent;->getActivity(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;
 HSPLandroid/app/PendingIntent;->getActivity(Landroid/content/Context;ILandroid/content/Intent;ILandroid/os/Bundle;)Landroid/app/PendingIntent;
-HSPLandroid/app/PendingIntent;->getActivityAsUser(Landroid/content/Context;ILandroid/content/Intent;ILandroid/os/Bundle;Landroid/os/UserHandle;)Landroid/app/PendingIntent;
+HSPLandroid/app/PendingIntent;->getActivityAsUser(Landroid/content/Context;ILandroid/content/Intent;ILandroid/os/Bundle;Landroid/os/UserHandle;)Landroid/app/PendingIntent;+]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/app/IActivityManager;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLandroid/app/PendingIntent;->getBroadcast(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;
-HSPLandroid/app/PendingIntent;->getBroadcastAsUser(Landroid/content/Context;ILandroid/content/Intent;ILandroid/os/UserHandle;)Landroid/app/PendingIntent;
+HSPLandroid/app/PendingIntent;->getBroadcastAsUser(Landroid/content/Context;ILandroid/content/Intent;ILandroid/os/UserHandle;)Landroid/app/PendingIntent;+]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/app/IActivityManager;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLandroid/app/PendingIntent;->getCachedInfo()Landroid/app/ActivityManager$PendingIntentInfo;
 HSPLandroid/app/PendingIntent;->getCreatorPackage()Ljava/lang/String;
 HSPLandroid/app/PendingIntent;->getCreatorUid()I
 HSPLandroid/app/PendingIntent;->getIntent()Landroid/content/Intent;
 HSPLandroid/app/PendingIntent;->getIntentSender()Landroid/content/IntentSender;
 HSPLandroid/app/PendingIntent;->getService(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;
-HSPLandroid/app/PendingIntent;->hashCode()I
+HSPLandroid/app/PendingIntent;->hashCode()I+]Ljava/lang/Object;Landroid/os/BinderProxy;]Landroid/content/IIntentSender;Landroid/content/IIntentSender$Stub$Proxy;
 HSPLandroid/app/PendingIntent;->isActivity()Z
 HSPLandroid/app/PendingIntent;->send()V
 HSPLandroid/app/PendingIntent;->send(Landroid/content/Context;ILandroid/content/Intent;)V
 HSPLandroid/app/PendingIntent;->send(Landroid/content/Context;ILandroid/content/Intent;Landroid/app/PendingIntent$OnFinished;Landroid/os/Handler;Ljava/lang/String;Landroid/os/Bundle;)V
-HSPLandroid/app/PendingIntent;->sendAndReturnResult(Landroid/content/Context;ILandroid/content/Intent;Landroid/app/PendingIntent$OnFinished;Landroid/os/Handler;Ljava/lang/String;Landroid/os/Bundle;)I
-HSPLandroid/app/PendingIntent;->setOnMarshaledListener(Landroid/app/PendingIntent$OnMarshaledListener;)V
-HSPLandroid/app/PendingIntent;->toString()Ljava/lang/String;
+HSPLandroid/app/PendingIntent;->sendAndReturnResult(Landroid/content/Context;ILandroid/content/Intent;Landroid/app/PendingIntent$OnFinished;Landroid/os/Handler;Ljava/lang/String;Landroid/os/Bundle;)I+]Landroid/app/PendingIntent;Landroid/app/PendingIntent;]Landroid/app/IActivityManager;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLandroid/app/PendingIntent;->setOnMarshaledListener(Landroid/app/PendingIntent$OnMarshaledListener;)V+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
+HSPLandroid/app/PendingIntent;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/IIntentSender;Landroid/content/IIntentSender$Stub$Proxy;
 HSPLandroid/app/PendingIntent;->writePendingIntentOrNullToParcel(Landroid/app/PendingIntent;Landroid/os/Parcel;)V
-HSPLandroid/app/PendingIntent;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/PendingIntent;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/app/PendingIntent$OnMarshaledListener;Landroid/app/Notification$$ExternalSyntheticLambda0;]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;]Landroid/content/IIntentSender;Landroid/content/IIntentSender$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/Person$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/Person;
-HSPLandroid/app/Person$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/app/Person$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/app/Person$1;Landroid/app/Person$1;
 HSPLandroid/app/Person$Builder;-><init>()V
 HSPLandroid/app/Person$Builder;-><init>(Landroid/app/Person;)V
 HSPLandroid/app/Person$Builder;->build()Landroid/app/Person;
@@ -2402,12 +2410,12 @@
 HSPLandroid/app/Person$Builder;->setName(Ljava/lang/CharSequence;)Landroid/app/Person$Builder;
 HSPLandroid/app/Person$Builder;->setUri(Ljava/lang/String;)Landroid/app/Person$Builder;
 HSPLandroid/app/Person;-><init>(Landroid/app/Person$Builder;)V
-HSPLandroid/app/Person;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/Person;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/os/Parcelable$Creator;Landroid/graphics/drawable/Icon$1;
 HSPLandroid/app/Person;->getIcon()Landroid/graphics/drawable/Icon;
 HSPLandroid/app/Person;->getKey()Ljava/lang/String;
 HSPLandroid/app/Person;->getName()Ljava/lang/CharSequence;
 HSPLandroid/app/Person;->getUri()Ljava/lang/String;
-HSPLandroid/app/Person;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/Person;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/graphics/drawable/Icon;Landroid/graphics/drawable/Icon;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/PictureInPictureParams$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/PictureInPictureParams;
 HSPLandroid/app/PictureInPictureParams$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/PictureInPictureParams;-><init>(Landroid/os/Parcel;)V
@@ -2424,22 +2432,22 @@
 HSPLandroid/app/PropertyInvalidatedCache;-><init>(ILjava/lang/String;)V
 HSPLandroid/app/PropertyInvalidatedCache;-><init>(ILjava/lang/String;Ljava/lang/String;)V
 HSPLandroid/app/PropertyInvalidatedCache;-><init>(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PropertyInvalidatedCache$QueryHandler;)V
-HSPLandroid/app/PropertyInvalidatedCache;->bypass(Ljava/lang/Object;)Z
+HSPLandroid/app/PropertyInvalidatedCache;->bypass(Ljava/lang/Object;)Z+]Landroid/app/PropertyInvalidatedCache$QueryHandler;Landroid/bluetooth/BluetoothAdapter$2;,Landroid/bluetooth/BluetoothAdapter$3;,Landroid/app/PropertyInvalidatedCache$DefaultComputer;,Landroid/os/IpcDataCache$SystemServerCallHandler;
 HSPLandroid/app/PropertyInvalidatedCache;->cacheName()Ljava/lang/String;
 HSPLandroid/app/PropertyInvalidatedCache;->clear()V
 HSPLandroid/app/PropertyInvalidatedCache;->createMap()Ljava/util/LinkedHashMap;
-HSPLandroid/app/PropertyInvalidatedCache;->createPropertyName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLandroid/app/PropertyInvalidatedCache;->createPropertyName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/app/PropertyInvalidatedCache;->disableLocal()V
 HSPLandroid/app/PropertyInvalidatedCache;->dumpCacheInfo(Landroid/os/ParcelFileDescriptor;[Ljava/lang/String;)V
 HSPLandroid/app/PropertyInvalidatedCache;->getActiveCaches()Ljava/util/ArrayList;
 HSPLandroid/app/PropertyInvalidatedCache;->getActiveCorks()Ljava/util/ArrayList;
-HSPLandroid/app/PropertyInvalidatedCache;->getCurrentNonce()J
+HSPLandroid/app/PropertyInvalidatedCache;->getCurrentNonce()J+]Landroid/os/SystemProperties$Handle;Landroid/os/SystemProperties$Handle;
 HSPLandroid/app/PropertyInvalidatedCache;->invalidateCache(Ljava/lang/String;)V
 HSPLandroid/app/PropertyInvalidatedCache;->invalidateCacheLocked(Ljava/lang/String;)V
 HSPLandroid/app/PropertyInvalidatedCache;->isDisabled()Z
 HSPLandroid/app/PropertyInvalidatedCache;->isReservedNonce(J)Z
 HSPLandroid/app/PropertyInvalidatedCache;->maybeCheckConsistency(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/app/PropertyInvalidatedCache;->query(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/app/PropertyInvalidatedCache;->query(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/LinkedHashMap;Landroid/app/PropertyInvalidatedCache$1;]Landroid/app/PropertyInvalidatedCache;megamorphic_types
 HSPLandroid/app/PropertyInvalidatedCache;->recompute(Ljava/lang/Object;)Ljava/lang/Object;+]Landroid/app/PropertyInvalidatedCache$QueryHandler;Landroid/bluetooth/BluetoothAdapter$2;,Lcom/android/internal/widget/LockPatternUtils$1;,Landroid/bluetooth/BluetoothAdapter$3;,Landroid/os/IpcDataCache$SystemServerCallHandler;
 HSPLandroid/app/PropertyInvalidatedCache;->refresh(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/app/PropertyInvalidatedCache;->registerCache()V+]Ljava/util/HashSet;Ljava/util/HashSet;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;]Landroid/app/PropertyInvalidatedCache;Landroid/bluetooth/BluetoothAdapter$BluetoothCache;,Landroid/os/IpcDataCache;
@@ -2450,7 +2458,7 @@
 HSPLandroid/app/QueuedWork;->getHandler()Landroid/os/Handler;
 HSPLandroid/app/QueuedWork;->hasPendingWork()Z
 HSPLandroid/app/QueuedWork;->processPendingWork()V
-HSPLandroid/app/QueuedWork;->queue(Ljava/lang/Runnable;Z)V
+HSPLandroid/app/QueuedWork;->queue(Ljava/lang/Runnable;Z)V+]Landroid/os/Handler;Landroid/app/QueuedWork$QueuedWorkHandler;]Ljava/util/LinkedList;Ljava/util/LinkedList;
 HSPLandroid/app/QueuedWork;->removeFinisher(Ljava/lang/Runnable;)V
 HSPLandroid/app/QueuedWork;->waitToFinish()V
 HSPLandroid/app/ReceiverRestrictedContext;-><init>(Landroid/content/Context;)V
@@ -2466,7 +2474,7 @@
 HSPLandroid/app/RemoteInput$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/RemoteInput$1;->newArray(I)[Landroid/app/RemoteInput;
 HSPLandroid/app/RemoteInput$1;->newArray(I)[Ljava/lang/Object;
-HSPLandroid/app/RemoteInput;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/RemoteInput;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/RemoteInput;->getAllowFreeFormInput()Z
 HSPLandroid/app/RemoteInput;->getChoices()[Ljava/lang/CharSequence;
 HSPLandroid/app/RemoteInput;->getEditChoicesBeforeSending()I
@@ -2494,22 +2502,22 @@
 HSPLandroid/app/ResourcesManager;->applyDisplayMetricsToConfiguration(Landroid/util/DisplayMetrics;Landroid/content/res/Configuration;)V
 HSPLandroid/app/ResourcesManager;->applyNewResourceDirsLocked([Ljava/lang/String;Landroid/content/pm/ApplicationInfo;)V
 HSPLandroid/app/ResourcesManager;->cleanupReferences(Ljava/util/ArrayList;Ljava/lang/ref/ReferenceQueue;)V
-HSPLandroid/app/ResourcesManager;->cleanupReferences(Ljava/util/ArrayList;Ljava/lang/ref/ReferenceQueue;Ljava/util/function/Function;)V
+HSPLandroid/app/ResourcesManager;->cleanupReferences(Ljava/util/ArrayList;Ljava/lang/ref/ReferenceQueue;Ljava/util/function/Function;)V+]Ljava/lang/ref/ReferenceQueue;Ljava/lang/ref/ReferenceQueue;]Ljava/util/HashSet;Ljava/util/HashSet;
 HSPLandroid/app/ResourcesManager;->combinedOverlayPaths([Ljava/lang/String;[Ljava/lang/String;)[Ljava/lang/String;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/app/ResourcesManager;->createApkAssetsSupplierNotLocked(Landroid/content/res/ResourcesKey;)Landroid/app/ResourcesManager$ApkAssetsSupplier;+]Landroid/app/ResourcesManager$ApkAssetsSupplier;Landroid/app/ResourcesManager$ApkAssetsSupplier;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLandroid/app/ResourcesManager;->createAssetManager(Landroid/content/res/ResourcesKey;Landroid/app/ResourcesManager$ApkAssetsSupplier;)Landroid/content/res/AssetManager;
+HSPLandroid/app/ResourcesManager;->createAssetManager(Landroid/content/res/ResourcesKey;Landroid/app/ResourcesManager$ApkAssetsSupplier;)Landroid/content/res/AssetManager;+]Landroid/content/res/AssetManager$Builder;Landroid/content/res/AssetManager$Builder;]Landroid/app/ResourcesManager$ApkAssetsSupplier;Landroid/app/ResourcesManager$ApkAssetsSupplier;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/app/ResourcesManager;->createBaseTokenResources(Landroid/os/IBinder;Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;Ljava/lang/ClassLoader;Ljava/util/List;)Landroid/content/res/Resources;
 HSPLandroid/app/ResourcesManager;->createResources(Landroid/content/res/ResourcesKey;Ljava/lang/ClassLoader;Landroid/app/ResourcesManager$ApkAssetsSupplier;)Landroid/content/res/Resources;
 HSPLandroid/app/ResourcesManager;->createResourcesForActivity(Landroid/os/IBinder;Landroid/content/res/ResourcesKey;Landroid/content/res/Configuration;Ljava/lang/Integer;Ljava/lang/ClassLoader;Landroid/app/ResourcesManager$ApkAssetsSupplier;)Landroid/content/res/Resources;
 HSPLandroid/app/ResourcesManager;->createResourcesForActivityLocked(Landroid/os/IBinder;Landroid/content/res/Configuration;Ljava/lang/Integer;Ljava/lang/ClassLoader;Landroid/content/res/ResourcesImpl;Landroid/content/res/CompatibilityInfo;)Landroid/content/res/Resources;
-HSPLandroid/app/ResourcesManager;->createResourcesImpl(Landroid/content/res/ResourcesKey;Landroid/app/ResourcesManager$ApkAssetsSupplier;)Landroid/content/res/ResourcesImpl;
-HSPLandroid/app/ResourcesManager;->createResourcesLocked(Ljava/lang/ClassLoader;Landroid/content/res/ResourcesImpl;Landroid/content/res/CompatibilityInfo;)Landroid/content/res/Resources;
+HSPLandroid/app/ResourcesManager;->createResourcesImpl(Landroid/content/res/ResourcesKey;Landroid/app/ResourcesManager$ApkAssetsSupplier;)Landroid/content/res/ResourcesImpl;+]Landroid/app/ResourcesManager;Landroid/app/ResourcesManager;]Landroid/view/DisplayAdjustments;Landroid/view/DisplayAdjustments;
+HSPLandroid/app/ResourcesManager;->createResourcesLocked(Ljava/lang/ClassLoader;Landroid/content/res/ResourcesImpl;Landroid/content/res/CompatibilityInfo;)Landroid/content/res/Resources;+]Landroid/content/res/CompatibilityInfo;Landroid/content/res/CompatibilityInfo$1;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/app/ResourcesManager;->extractApkKeys(Landroid/content/res/ResourcesKey;)Ljava/util/ArrayList;+]Ljava/lang/String;Ljava/lang/String;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/app/ResourcesManager;->findKeyForResourceImplLocked(Landroid/content/res/ResourcesImpl;)Landroid/content/res/ResourcesKey;
 HSPLandroid/app/ResourcesManager;->findOrCreateResourcesImplForKeyLocked(Landroid/content/res/ResourcesKey;)Landroid/content/res/ResourcesImpl;
-HSPLandroid/app/ResourcesManager;->findOrCreateResourcesImplForKeyLocked(Landroid/content/res/ResourcesKey;Landroid/app/ResourcesManager$ApkAssetsSupplier;)Landroid/content/res/ResourcesImpl;
+HSPLandroid/app/ResourcesManager;->findOrCreateResourcesImplForKeyLocked(Landroid/content/res/ResourcesKey;Landroid/app/ResourcesManager$ApkAssetsSupplier;)Landroid/content/res/ResourcesImpl;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/app/ResourcesManager;->findResourcesForActivityLocked(Landroid/os/IBinder;Landroid/content/res/ResourcesKey;Ljava/lang/ClassLoader;)Landroid/content/res/Resources;
-HSPLandroid/app/ResourcesManager;->findResourcesImplForKeyLocked(Landroid/content/res/ResourcesKey;)Landroid/content/res/ResourcesImpl;
+HSPLandroid/app/ResourcesManager;->findResourcesImplForKeyLocked(Landroid/content/res/ResourcesKey;)Landroid/content/res/ResourcesImpl;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
 HSPLandroid/app/ResourcesManager;->generateConfig(Landroid/content/res/ResourcesKey;)Landroid/content/res/Configuration;
 HSPLandroid/app/ResourcesManager;->generateDisplayId(Landroid/content/res/ResourcesKey;)I
 HSPLandroid/app/ResourcesManager;->getAdjustedDisplay(ILandroid/content/res/Resources;)Landroid/view/Display;
@@ -2519,10 +2527,10 @@
 HSPLandroid/app/ResourcesManager;->getDisplayMetrics(Landroid/content/res/Configuration;)Landroid/util/DisplayMetrics;
 HSPLandroid/app/ResourcesManager;->getInstance()Landroid/app/ResourcesManager;
 HSPLandroid/app/ResourcesManager;->getOrCreateActivityResourcesStructLocked(Landroid/os/IBinder;)Landroid/app/ResourcesManager$ActivityResources;
-HSPLandroid/app/ResourcesManager;->getResources(Landroid/os/IBinder;Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;Ljava/lang/Integer;Landroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;Ljava/lang/ClassLoader;Ljava/util/List;)Landroid/content/res/Resources;
+HSPLandroid/app/ResourcesManager;->getResources(Landroid/os/IBinder;Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;Ljava/lang/Integer;Landroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;Ljava/lang/ClassLoader;Ljava/util/List;)Landroid/content/res/Resources;+]Ljava/util/List;Ljava/util/Collections$EmptyList;
 HSPLandroid/app/ResourcesManager;->initializeApplicationPaths(Ljava/lang/String;[Ljava/lang/String;)V
 HSPLandroid/app/ResourcesManager;->isSameResourcesOverrideConfig(Landroid/os/IBinder;Landroid/content/res/Configuration;)Z+]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
-HSPLandroid/app/ResourcesManager;->lambda$cleanupReferences$1(Ljava/util/function/Function;Ljava/util/HashSet;Ljava/lang/Object;)Z
+HSPLandroid/app/ResourcesManager;->lambda$cleanupReferences$1(Ljava/util/function/Function;Ljava/util/HashSet;Ljava/lang/Object;)Z+]Ljava/util/function/Function;Ljava/util/function/Function$$ExternalSyntheticLambda1;]Ljava/util/HashSet;Ljava/util/HashSet;
 HSPLandroid/app/ResourcesManager;->lambda$createResourcesForActivityLocked$0(Landroid/app/ResourcesManager$ActivityResource;)Ljava/lang/ref/WeakReference;
 HSPLandroid/app/ResourcesManager;->loadApkAssets(Landroid/app/ResourcesManager$ApkKey;)Landroid/content/res/ApkAssets;+]Landroid/content/res/ApkAssets;Landroid/content/res/ApkAssets;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
 HSPLandroid/app/ResourcesManager;->overlayPathToIdmapPath(Ljava/lang/String;)Ljava/lang/String;
@@ -2565,7 +2573,7 @@
 HSPLandroid/app/SharedPreferencesImpl$1;-><init>(Landroid/app/SharedPreferencesImpl;Ljava/lang/String;)V
 HSPLandroid/app/SharedPreferencesImpl$1;->run()V
 HSPLandroid/app/SharedPreferencesImpl$2;-><init>(Landroid/app/SharedPreferencesImpl;Landroid/app/SharedPreferencesImpl$MemoryCommitResult;ZLjava/lang/Runnable;)V
-HSPLandroid/app/SharedPreferencesImpl$2;->run()V
+HSPLandroid/app/SharedPreferencesImpl$2;->run()V+]Ljava/lang/Runnable;Landroid/app/SharedPreferencesImpl$EditorImpl$2;
 HSPLandroid/app/SharedPreferencesImpl$EditorImpl$$ExternalSyntheticLambda0;-><init>(Landroid/app/SharedPreferencesImpl$EditorImpl;Landroid/app/SharedPreferencesImpl$MemoryCommitResult;)V
 HSPLandroid/app/SharedPreferencesImpl$EditorImpl$$ExternalSyntheticLambda0;->run()V
 HSPLandroid/app/SharedPreferencesImpl$EditorImpl$1;-><init>(Landroid/app/SharedPreferencesImpl$EditorImpl;Landroid/app/SharedPreferencesImpl$MemoryCommitResult;J)V
@@ -2576,8 +2584,8 @@
 HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->apply()V
 HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->clear()Landroid/content/SharedPreferences$Editor;
 HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->commit()Z
-HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->commitToMemory()Landroid/app/SharedPreferencesImpl$MemoryCommitResult;
-HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->notifyListeners(Landroid/app/SharedPreferencesImpl$MemoryCommitResult;)V
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->commitToMemory()Landroid/app/SharedPreferencesImpl$MemoryCommitResult;+]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;]Ljava/lang/Object;megamorphic_types]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;]Ljava/util/Set;Ljava/util/HashMap$EntrySet;
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->notifyListeners(Landroid/app/SharedPreferencesImpl$MemoryCommitResult;)V+]Landroid/os/Handler;Landroid/app/ActivityThread$H;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;]Ljava/util/Set;Ljava/util/HashSet;
 HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->putBoolean(Ljava/lang/String;Z)Landroid/content/SharedPreferences$Editor;
 HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->putFloat(Ljava/lang/String;F)Landroid/content/SharedPreferences$Editor;
 HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->putInt(Ljava/lang/String;I)Landroid/content/SharedPreferences$Editor;
@@ -2605,11 +2613,11 @@
 HSPLandroid/app/SharedPreferencesImpl;->edit()Landroid/content/SharedPreferences$Editor;
 HSPLandroid/app/SharedPreferencesImpl;->enqueueDiskWrite(Landroid/app/SharedPreferencesImpl$MemoryCommitResult;Ljava/lang/Runnable;)V
 HSPLandroid/app/SharedPreferencesImpl;->getAll()Ljava/util/Map;
-HSPLandroid/app/SharedPreferencesImpl;->getBoolean(Ljava/lang/String;Z)Z
+HSPLandroid/app/SharedPreferencesImpl;->getBoolean(Ljava/lang/String;Z)Z+]Ljava/lang/Boolean;Ljava/lang/Boolean;]Ljava/util/Map;Ljava/util/HashMap;
 HSPLandroid/app/SharedPreferencesImpl;->getFloat(Ljava/lang/String;F)F
-HSPLandroid/app/SharedPreferencesImpl;->getInt(Ljava/lang/String;I)I
+HSPLandroid/app/SharedPreferencesImpl;->getInt(Ljava/lang/String;I)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/Map;Ljava/util/HashMap;
 HSPLandroid/app/SharedPreferencesImpl;->getLong(Ljava/lang/String;J)J
-HSPLandroid/app/SharedPreferencesImpl;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/app/SharedPreferencesImpl;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Ljava/util/Map;Ljava/util/HashMap;
 HSPLandroid/app/SharedPreferencesImpl;->getStringSet(Ljava/lang/String;Ljava/util/Set;)Ljava/util/Set;
 HSPLandroid/app/SharedPreferencesImpl;->hasFileChangedUnexpectedly()Z
 HSPLandroid/app/SharedPreferencesImpl;->loadFromDisk()V
@@ -2618,7 +2626,7 @@
 HSPLandroid/app/SharedPreferencesImpl;->startLoadFromDisk()V
 HSPLandroid/app/SharedPreferencesImpl;->startReloadIfChangedUnexpectedly()V
 HSPLandroid/app/SharedPreferencesImpl;->unregisterOnSharedPreferenceChangeListener(Landroid/content/SharedPreferences$OnSharedPreferenceChangeListener;)V
-HSPLandroid/app/SharedPreferencesImpl;->writeToFile(Landroid/app/SharedPreferencesImpl$MemoryCommitResult;Z)V
+HSPLandroid/app/SharedPreferencesImpl;->writeToFile(Landroid/app/SharedPreferencesImpl$MemoryCommitResult;Z)V+]Ljava/io/File;Ljava/io/File;]Lcom/android/internal/util/ExponentiallyBucketedHistogram;Lcom/android/internal/util/ExponentiallyBucketedHistogram;]Landroid/app/SharedPreferencesImpl$MemoryCommitResult;Landroid/app/SharedPreferencesImpl$MemoryCommitResult;]Ljava/io/FileOutputStream;Ljava/io/FileOutputStream;
 HSPLandroid/app/StackTrace;-><init>(Ljava/lang/String;)V
 HSPLandroid/app/StatusBarManager;-><init>(Landroid/content/Context;)V
 HSPLandroid/app/SyncNotedAppOp$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/SyncNotedAppOp;
@@ -2626,7 +2634,7 @@
 HSPLandroid/app/SyncNotedAppOp;-><init>(IILjava/lang/String;Ljava/lang/String;)V
 HSPLandroid/app/SyncNotedAppOp;-><init>(ILjava/lang/String;)V
 HSPLandroid/app/SyncNotedAppOp;-><init>(ILjava/lang/String;Ljava/lang/String;)V
-HSPLandroid/app/SyncNotedAppOp;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/SyncNotedAppOp;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/SyncNotedAppOp;->getAttributionTag()Ljava/lang/String;
 HSPLandroid/app/SyncNotedAppOp;->getOp()Ljava/lang/String;
 HSPLandroid/app/SyncNotedAppOp;->getOpMode()I
@@ -2638,6 +2646,7 @@
 HSPLandroid/app/SystemServiceRegistry$106;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$107;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$108;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$109;->createService(Landroid/app/ContextImpl;)Landroid/app/slice/SliceManager;
 HSPLandroid/app/SystemServiceRegistry$109;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$110;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$111;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
@@ -2791,8 +2800,8 @@
 HSPLandroid/app/SystemServiceRegistry$CachedServiceFetcher;->getService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$StaticServiceFetcher;->getService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry;->createServiceCache()[Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry;->getSystemService(Landroid/app/ContextImpl;Ljava/lang/String;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry;->getSystemServiceName(Ljava/lang/Class;)Ljava/lang/String;
+HSPLandroid/app/SystemServiceRegistry;->getSystemService(Landroid/app/ContextImpl;Ljava/lang/String;)Ljava/lang/Object;+]Landroid/app/SystemServiceRegistry$ServiceFetcher;megamorphic_types]Ljava/util/Map;Landroid/util/ArrayMap;
+HSPLandroid/app/SystemServiceRegistry;->getSystemServiceName(Ljava/lang/Class;)Ljava/lang/String;+]Ljava/util/Map;Landroid/util/ArrayMap;
 HSPLandroid/app/TaskInfo;-><init>()V
 HSPLandroid/app/TaskInfo;->getWindowingMode()I
 HSPLandroid/app/TaskInfo;->readFromParcel(Landroid/os/Parcel;)V
@@ -2865,12 +2874,12 @@
 HSPLandroid/app/WindowConfiguration;->setRotation(I)V
 HSPLandroid/app/WindowConfiguration;->setTo(Landroid/app/WindowConfiguration;)V+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HSPLandroid/app/WindowConfiguration;->setTo(Landroid/app/WindowConfiguration;I)V
-HSPLandroid/app/WindowConfiguration;->setToDefaults()V
+HSPLandroid/app/WindowConfiguration;->setToDefaults()V+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HSPLandroid/app/WindowConfiguration;->setWindowingMode(I)V
 HSPLandroid/app/WindowConfiguration;->tasksAreFloating()Z
 HSPLandroid/app/WindowConfiguration;->toString()Ljava/lang/String;
-HSPLandroid/app/WindowConfiguration;->unset()V
-HSPLandroid/app/WindowConfiguration;->updateFrom(Landroid/app/WindowConfiguration;)I
+HSPLandroid/app/WindowConfiguration;->unset()V+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
+HSPLandroid/app/WindowConfiguration;->updateFrom(Landroid/app/WindowConfiguration;)I+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HSPLandroid/app/WindowConfiguration;->windowingModeToString(I)Ljava/lang/String;
 HSPLandroid/app/WindowConfiguration;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/admin/DevicePolicyManager$$ExternalSyntheticLambda10;-><init>(Landroid/app/admin/DevicePolicyManager;)V
@@ -2946,7 +2955,7 @@
 HSPLandroid/app/assist/AssistStructure$ViewNode;-><init>(Landroid/app/assist/AssistStructure$ParcelTransferReader;I)V
 HSPLandroid/app/assist/AssistStructure$ViewNode;->getAutofillId()Landroid/view/autofill/AutofillId;
 HSPLandroid/app/assist/AssistStructure$ViewNode;->getChildCount()I
-HSPLandroid/app/assist/AssistStructure$ViewNode;->writeSelfToParcel(Landroid/os/Parcel;Landroid/os/PooledStringWriter;Z[FZ)I
+HSPLandroid/app/assist/AssistStructure$ViewNode;->writeSelfToParcel(Landroid/os/Parcel;Landroid/os/PooledStringWriter;Z[FZ)I+]Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillId;]Landroid/app/assist/AssistStructure$ViewNodeText;Landroid/app/assist/AssistStructure$ViewNodeText;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/assist/AssistStructure$ViewNode;->writeString(Landroid/os/Parcel;Landroid/os/PooledStringWriter;Ljava/lang/String;)V
 HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->getChildCount()I
 HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->getNodeText()Landroid/app/assist/AssistStructure$ViewNodeText;
@@ -3029,7 +3038,7 @@
 HSPLandroid/app/backup/IBackupCallback$Stub$Proxy;->operationComplete(J)V
 HSPLandroid/app/backup/IBackupCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/backup/IBackupCallback;
 HSPLandroid/app/backup/IBackupManager$Stub$Proxy;->dataChanged(Ljava/lang/String;)V
-HSPLandroid/app/backup/IBackupManager$Stub$Proxy;->getCurrentTransport()Ljava/lang/String;
+HSPLandroid/app/backup/IBackupManager$Stub$Proxy;->getCurrentTransport()Ljava/lang/String;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/backup/IBackupManager$Stub$Proxy;->isBackupServiceActive(I)Z
 HSPLandroid/app/backup/IBackupManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/backup/IBackupManager;
 HSPLandroid/app/backup/SharedPreferencesBackupHelper;-><init>(Landroid/content/Context;[Ljava/lang/String;)V
@@ -3395,9 +3404,9 @@
 HSPLandroid/app/usage/UsageEvents;->getNextEvent(Landroid/app/usage/UsageEvents$Event;)Z
 HSPLandroid/app/usage/UsageEvents;->hasNextEvent()Z
 HSPLandroid/app/usage/UsageEvents;->readEventFromParcel(Landroid/os/Parcel;Landroid/app/usage/UsageEvents$Event;)V+]Landroid/os/Parcelable$Creator;Landroid/content/res/Configuration$1;]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/app/usage/UsageStats$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/usage/UsageStats;
+HSPLandroid/app/usage/UsageStats$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/usage/UsageStats;+]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Landroid/os/Parcel;Landroid/os/Parcel;]Ljava/util/Set;Landroid/util/MapCollections$KeySet;
 HSPLandroid/app/usage/UsageStats$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/app/usage/UsageStats$1;->readBundleToEventMap(Landroid/os/Bundle;Landroid/util/ArrayMap;)V
+HSPLandroid/app/usage/UsageStats$1;->readBundleToEventMap(Landroid/os/Bundle;Landroid/util/ArrayMap;)V+]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/MapCollections$KeySet;
 HSPLandroid/app/usage/UsageStats;-><init>()V
 HSPLandroid/app/usage/UsageStats;->getPackageName()Ljava/lang/String;
 HSPLandroid/app/usage/UsageStats;->update(Ljava/lang/String;JII)V
@@ -3439,7 +3448,7 @@
 HSPLandroid/content/AttributionSource$ScopedParcelState;->getParcel()Landroid/os/Parcel;
 HSPLandroid/content/AttributionSource;-><clinit>()V
 HSPLandroid/content/AttributionSource;-><init>(ILjava/lang/String;Ljava/lang/String;Landroid/os/IBinder;[Ljava/lang/String;Landroid/content/AttributionSource;)V
-HSPLandroid/content/AttributionSource;-><init>(ILjava/lang/String;Ljava/lang/String;Ljava/util/Set;Landroid/content/AttributionSource;)V
+HSPLandroid/content/AttributionSource;-><init>(ILjava/lang/String;Ljava/lang/String;Ljava/util/Set;Landroid/content/AttributionSource;)V+]Ljava/util/Set;Ljava/util/Collections$EmptySet;
 HSPLandroid/content/AttributionSource;-><init>(ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/content/AttributionSource;)V
 HSPLandroid/content/AttributionSource;-><init>(Landroid/content/AttributionSource;Landroid/content/AttributionSource;)V
 HSPLandroid/content/AttributionSource;-><init>(Landroid/content/AttributionSourceState;)V
@@ -3463,8 +3472,8 @@
 HSPLandroid/content/AttributionSourceState$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/content/AttributionSourceState;-><clinit>()V
 HSPLandroid/content/AttributionSourceState;-><init>()V
-HSPLandroid/content/AttributionSourceState;->readFromParcel(Landroid/os/Parcel;)V
-HSPLandroid/content/AttributionSourceState;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/AttributionSourceState;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/AttributionSourceState;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/AutofillOptions$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/AutofillOptions;
 HSPLandroid/content/AutofillOptions$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/AutofillOptions;-><init>(IZ)V
@@ -3526,20 +3535,20 @@
 HSPLandroid/content/ComponentCallbacksController;->registerCallbacks(Landroid/content/ComponentCallbacks;)V
 HSPLandroid/content/ComponentCallbacksController;->unregisterCallbacks(Landroid/content/ComponentCallbacks;)V
 HSPLandroid/content/ComponentName$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/ComponentName;
-HSPLandroid/content/ComponentName$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/content/ComponentName$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/content/ComponentName$1;Landroid/content/ComponentName$1;
 HSPLandroid/content/ComponentName$1;->newArray(I)[Landroid/content/ComponentName;
 HSPLandroid/content/ComponentName$1;->newArray(I)[Ljava/lang/Object;
-HSPLandroid/content/ComponentName;-><init>(Landroid/content/Context;Ljava/lang/Class;)V
+HSPLandroid/content/ComponentName;-><init>(Landroid/content/Context;Ljava/lang/Class;)V+]Ljava/lang/Class;Ljava/lang/Class;]Landroid/content/Context;missing_types
 HSPLandroid/content/ComponentName;-><init>(Landroid/content/Context;Ljava/lang/String;)V
-HSPLandroid/content/ComponentName;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/ComponentName;-><init>(Ljava/lang/String;Landroid/os/Parcel;)V
+HSPLandroid/content/ComponentName;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/ComponentName;-><init>(Ljava/lang/String;Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/ComponentName;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/content/ComponentName;->appendShortClassName(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/content/ComponentName;->appendShortString(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/content/ComponentName;->appendShortClassName(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;
+HSPLandroid/content/ComponentName;->appendShortString(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/content/ComponentName;->compareTo(Landroid/content/ComponentName;)I
 HSPLandroid/content/ComponentName;->createRelative(Ljava/lang/String;Ljava/lang/String;)Landroid/content/ComponentName;
 HSPLandroid/content/ComponentName;->equals(Ljava/lang/Object;)Z
-HSPLandroid/content/ComponentName;->flattenToShortString()Ljava/lang/String;
+HSPLandroid/content/ComponentName;->flattenToShortString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/content/ComponentName;->flattenToString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/content/ComponentName;->getClassName()Ljava/lang/String;
 HSPLandroid/content/ComponentName;->getPackageName()Ljava/lang/String;
@@ -3547,16 +3556,16 @@
 HSPLandroid/content/ComponentName;->hashCode()I
 HSPLandroid/content/ComponentName;->readFromParcel(Landroid/os/Parcel;)Landroid/content/ComponentName;
 HSPLandroid/content/ComponentName;->toShortString()Ljava/lang/String;
-HSPLandroid/content/ComponentName;->toString()Ljava/lang/String;
+HSPLandroid/content/ComponentName;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/content/ComponentName;->unflattenFromString(Ljava/lang/String;)Landroid/content/ComponentName;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;
-HSPLandroid/content/ComponentName;->writeToParcel(Landroid/content/ComponentName;Landroid/os/Parcel;)V
-HSPLandroid/content/ComponentName;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/ContentCaptureOptions$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/ContentCaptureOptions;
+HSPLandroid/content/ComponentName;->writeToParcel(Landroid/content/ComponentName;Landroid/os/Parcel;)V+]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/ComponentName;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/ContentCaptureOptions$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/ContentCaptureOptions;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/ContentCaptureOptions$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/ContentCaptureOptions;-><init>(IIIIILandroid/util/ArraySet;)V
 HSPLandroid/content/ContentCaptureOptions;-><init>(ZIIIIILandroid/util/ArraySet;)V
 HSPLandroid/content/ContentCaptureOptions;->isWhitelisted(Landroid/content/Context;)Z
-HSPLandroid/content/ContentCaptureOptions;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/ContentCaptureOptions;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/ContentProvider$Transport;-><init>(Landroid/content/ContentProvider;)V
 HSPLandroid/content/ContentProvider$Transport;->call(Landroid/content/AttributionSource;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;
 HSPLandroid/content/ContentProvider$Transport;->createCancellationSignal()Landroid/os/ICancellationSignal;
@@ -3649,7 +3658,7 @@
 HSPLandroid/content/ContentProviderNative;-><init>()V
 HSPLandroid/content/ContentProviderNative;->asBinder()Landroid/os/IBinder;
 HSPLandroid/content/ContentProviderNative;->asInterface(Landroid/os/IBinder;)Landroid/content/IContentProvider;
-HSPLandroid/content/ContentProviderNative;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/content/ContentProviderNative;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z+]Landroid/os/Parcelable$Creator;Landroid/content/AttributionSource$1;]Landroid/content/ContentProviderNative;Landroid/content/ContentProvider$Transport;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/ContentProviderOperation$Builder;->assertSelectionAllowed()V
 HSPLandroid/content/ContentProviderOperation$Builder;->assertValuesAllowed()V
 HSPLandroid/content/ContentProviderOperation$Builder;->build()Landroid/content/ContentProviderOperation;
@@ -3684,7 +3693,7 @@
 HSPLandroid/content/ContentProviderProxy;->getTypeAsync(Landroid/net/Uri;Landroid/os/RemoteCallback;)V
 HSPLandroid/content/ContentProviderProxy;->insert(Landroid/content/AttributionSource;Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)Landroid/net/Uri;+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;]Landroid/os/Parcelable$Creator;Landroid/net/Uri$1;]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/content/ContentValues;Landroid/content/ContentValues;]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/net/Uri;Landroid/net/Uri$StringUri;
 HSPLandroid/content/ContentProviderProxy;->openTypedAssetFile(Landroid/content/AttributionSource;Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/ICancellationSignal;)Landroid/content/res/AssetFileDescriptor;
-HSPLandroid/content/ContentProviderProxy;->query(Landroid/content/AttributionSource;Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/ICancellationSignal;)Landroid/database/Cursor;+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;]Landroid/os/Parcelable$Creator;Landroid/database/BulkCursorDescriptor$1;]Landroid/database/IBulkCursor;Landroid/database/BulkCursorProxy;]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/database/BulkCursorToCursorAdaptor;Landroid/database/BulkCursorToCursorAdaptor;]Landroid/database/IContentObserver;Landroid/database/ContentObserver$Transport;]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;
+HSPLandroid/content/ContentProviderProxy;->query(Landroid/content/AttributionSource;Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/ICancellationSignal;)Landroid/database/Cursor;+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;]Landroid/os/Parcelable$Creator;Landroid/database/BulkCursorDescriptor$1;]Landroid/database/IBulkCursor;Landroid/database/BulkCursorProxy;]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/database/BulkCursorToCursorAdaptor;Landroid/database/BulkCursorToCursorAdaptor;]Landroid/database/IContentObserver;Landroid/database/ContentObserver$Transport;]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;]Landroid/os/ICancellationSignal;Landroid/os/ICancellationSignal$Stub$Proxy;
 HSPLandroid/content/ContentProviderProxy;->update(Landroid/content/AttributionSource;Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)I
 HSPLandroid/content/ContentProviderResult$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/ContentProviderResult;
 HSPLandroid/content/ContentProviderResult$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -3693,8 +3702,8 @@
 HSPLandroid/content/ContentProviderResult;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/content/ContentResolver$2;-><init>(Landroid/content/SyncStatusObserver;)V
 HSPLandroid/content/ContentResolver$2;->onStatusChanged(I)V
-HSPLandroid/content/ContentResolver$CursorWrapperInner;-><init>(Landroid/content/ContentResolver;Landroid/database/Cursor;Landroid/content/IContentProvider;)V
-HSPLandroid/content/ContentResolver$CursorWrapperInner;->close()V
+HSPLandroid/content/ContentResolver$CursorWrapperInner;-><init>(Landroid/content/ContentResolver;Landroid/database/Cursor;Landroid/content/IContentProvider;)V+]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
+HSPLandroid/content/ContentResolver$CursorWrapperInner;->close()V+]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
 HSPLandroid/content/ContentResolver$CursorWrapperInner;->finalize()V
 HSPLandroid/content/ContentResolver$ParcelFileDescriptorInner;-><init>(Landroid/content/ContentResolver;Landroid/os/ParcelFileDescriptor;Landroid/content/IContentProvider;)V
 HSPLandroid/content/ContentResolver$ParcelFileDescriptorInner;->releaseResources()V
@@ -3704,14 +3713,14 @@
 HSPLandroid/content/ContentResolver$StringResultListener;->getResultFromBundle(Landroid/os/Bundle;)Ljava/lang/Object;
 HSPLandroid/content/ContentResolver$StringResultListener;->getResultFromBundle(Landroid/os/Bundle;)Ljava/lang/String;
 HSPLandroid/content/ContentResolver;-><init>(Landroid/content/Context;)V
-HSPLandroid/content/ContentResolver;-><init>(Landroid/content/Context;Landroid/content/ContentInterface;)V
+HSPLandroid/content/ContentResolver;-><init>(Landroid/content/Context;Landroid/content/ContentInterface;)V+]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLandroid/content/ContentResolver;->acquireContentProviderClient(Landroid/net/Uri;)Landroid/content/ContentProviderClient;
 HSPLandroid/content/ContentResolver;->acquireContentProviderClient(Ljava/lang/String;)Landroid/content/ContentProviderClient;
-HSPLandroid/content/ContentResolver;->acquireExistingProvider(Landroid/net/Uri;)Landroid/content/IContentProvider;
-HSPLandroid/content/ContentResolver;->acquireProvider(Landroid/net/Uri;)Landroid/content/IContentProvider;
+HSPLandroid/content/ContentResolver;->acquireExistingProvider(Landroid/net/Uri;)Landroid/content/IContentProvider;+]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;]Landroid/net/Uri;Landroid/net/Uri$StringUri;
+HSPLandroid/content/ContentResolver;->acquireProvider(Landroid/net/Uri;)Landroid/content/IContentProvider;+]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;
 HSPLandroid/content/ContentResolver;->acquireProvider(Ljava/lang/String;)Landroid/content/IContentProvider;
 HSPLandroid/content/ContentResolver;->acquireUnstableContentProviderClient(Landroid/net/Uri;)Landroid/content/ContentProviderClient;
-HSPLandroid/content/ContentResolver;->acquireUnstableProvider(Landroid/net/Uri;)Landroid/content/IContentProvider;
+HSPLandroid/content/ContentResolver;->acquireUnstableProvider(Landroid/net/Uri;)Landroid/content/IContentProvider;+]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;
 HSPLandroid/content/ContentResolver;->addPeriodicSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;J)V
 HSPLandroid/content/ContentResolver;->addStatusChangeListener(ILandroid/content/SyncStatusObserver;)Ljava/lang/Object;
 HSPLandroid/content/ContentResolver;->applyBatch(Ljava/lang/String;Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;
@@ -3732,19 +3741,19 @@
 HSPLandroid/content/ContentResolver;->getPeriodicSyncs(Landroid/accounts/Account;Ljava/lang/String;)Ljava/util/List;
 HSPLandroid/content/ContentResolver;->getResourceId(Landroid/net/Uri;)Landroid/content/ContentResolver$OpenResourceIdResult;
 HSPLandroid/content/ContentResolver;->getSyncAutomatically(Landroid/accounts/Account;Ljava/lang/String;)Z
-HSPLandroid/content/ContentResolver;->getType(Landroid/net/Uri;)Ljava/lang/String;
-HSPLandroid/content/ContentResolver;->getUserId()I
+HSPLandroid/content/ContentResolver;->getType(Landroid/net/Uri;)Ljava/lang/String;+]Landroid/content/ContentResolver$StringResultListener;Landroid/content/ContentResolver$StringResultListener;]Landroid/app/IActivityManager;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;]Landroid/net/Uri;Landroid/net/Uri$StringUri;
+HSPLandroid/content/ContentResolver;->getUserId()I+]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLandroid/content/ContentResolver;->insert(Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;
 HSPLandroid/content/ContentResolver;->insert(Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)Landroid/net/Uri;+]Landroid/content/IContentProvider;Landroid/content/ContentProviderProxy;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;
 HSPLandroid/content/ContentResolver;->invalidPeriodicExtras(Landroid/os/Bundle;)Z
 HSPLandroid/content/ContentResolver;->maybeLogQueryToEventLog(JLandroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;)V
 HSPLandroid/content/ContentResolver;->maybeLogUpdateToEventLog(JLandroid/net/Uri;Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/content/ContentResolver;->notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;)V
-HSPLandroid/content/ContentResolver;->notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;I)V
+HSPLandroid/content/ContentResolver;->notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;I)V+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;
 HSPLandroid/content/ContentResolver;->notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;II)V
 HSPLandroid/content/ContentResolver;->notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;Z)V
 HSPLandroid/content/ContentResolver;->notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;ZI)V
-HSPLandroid/content/ContentResolver;->notifyChange([Landroid/net/Uri;Landroid/database/ContentObserver;II)V
+HSPLandroid/content/ContentResolver;->notifyChange([Landroid/net/Uri;Landroid/database/ContentObserver;II)V+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/IContentService;Landroid/content/IContentService$Stub$Proxy;
 HSPLandroid/content/ContentResolver;->openAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;
 HSPLandroid/content/ContentResolver;->openAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;
 HSPLandroid/content/ContentResolver;->openFileDescriptor(Landroid/net/Uri;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;
@@ -3752,7 +3761,7 @@
 HSPLandroid/content/ContentResolver;->openInputStream(Landroid/net/Uri;)Ljava/io/InputStream;
 HSPLandroid/content/ContentResolver;->openTypedAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/res/AssetFileDescriptor;
 HSPLandroid/content/ContentResolver;->openTypedAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;+]Landroid/content/IContentProvider;Landroid/content/ContentProvider$Transport;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/res/AssetFileDescriptor;Landroid/content/res/AssetFileDescriptor;]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;
-HSPLandroid/content/ContentResolver;->query(Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;
+HSPLandroid/content/ContentResolver;->query(Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;+]Landroid/content/IContentProvider;Landroid/content/ContentProviderProxy;,Landroid/content/ContentProvider$Transport;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/database/Cursor;Landroid/database/BulkCursorToCursorAdaptor;,Landroid/database/sqlite/SQLiteCursor;]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;]Landroid/os/CancellationSignal;Landroid/os/CancellationSignal;
 HSPLandroid/content/ContentResolver;->query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;
 HSPLandroid/content/ContentResolver;->query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;
 HSPLandroid/content/ContentResolver;->registerContentObserver(Landroid/net/Uri;ZLandroid/database/ContentObserver;)V
@@ -3776,10 +3785,10 @@
 HSPLandroid/content/ContentValues;-><init>()V
 HSPLandroid/content/ContentValues;-><init>(I)V
 HSPLandroid/content/ContentValues;-><init>(Landroid/content/ContentValues;)V
-HSPLandroid/content/ContentValues;->clear()V
+HSPLandroid/content/ContentValues;->clear()V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/content/ContentValues;->containsKey(Ljava/lang/String;)Z
 HSPLandroid/content/ContentValues;->equals(Ljava/lang/Object;)Z
-HSPLandroid/content/ContentValues;->get(Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroid/content/ContentValues;->get(Ljava/lang/String;)Ljava/lang/Object;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/content/ContentValues;->getAsBoolean(Ljava/lang/String;)Ljava/lang/Boolean;
 HSPLandroid/content/ContentValues;->getAsByteArray(Ljava/lang/String;)[B
 HSPLandroid/content/ContentValues;->getAsInteger(Ljava/lang/String;)Ljava/lang/Integer;
@@ -3788,8 +3797,8 @@
 HSPLandroid/content/ContentValues;->getValues()Landroid/util/ArrayMap;
 HSPLandroid/content/ContentValues;->isEmpty()Z
 HSPLandroid/content/ContentValues;->isSupportedValue(Ljava/lang/Object;)Z
-HSPLandroid/content/ContentValues;->keySet()Ljava/util/Set;
-HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Boolean;)V
+HSPLandroid/content/ContentValues;->keySet()Ljava/util/Set;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Boolean;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Double;)V
 HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Float;)V
 HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Integer;)V
@@ -3797,7 +3806,7 @@
 HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/content/ContentValues;->put(Ljava/lang/String;[B)V
 HSPLandroid/content/ContentValues;->putAll(Landroid/content/ContentValues;)V
-HSPLandroid/content/ContentValues;->putNull(Ljava/lang/String;)V
+HSPLandroid/content/ContentValues;->putNull(Ljava/lang/String;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/content/ContentValues;->putObject(Ljava/lang/String;Ljava/lang/Object;)V
 HSPLandroid/content/ContentValues;->remove(Ljava/lang/String;)V
 HSPLandroid/content/ContentValues;->size()I
@@ -3805,21 +3814,21 @@
 HSPLandroid/content/ContentValues;->valueSet()Ljava/util/Set;
 HSPLandroid/content/ContentValues;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/Context;-><init>()V
-HSPLandroid/content/Context;->getColor(I)I
+HSPLandroid/content/Context;->getColor(I)I+]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/Context;missing_types
 HSPLandroid/content/Context;->getColorStateList(I)Landroid/content/res/ColorStateList;
 HSPLandroid/content/Context;->getDrawable(I)Landroid/graphics/drawable/Drawable;
 HSPLandroid/content/Context;->getNextAutofillId()I
 HSPLandroid/content/Context;->getSharedPrefsFile(Ljava/lang/String;)Ljava/io/File;
 HSPLandroid/content/Context;->getString(I)Ljava/lang/String;
-HSPLandroid/content/Context;->getString(I[Ljava/lang/Object;)Ljava/lang/String;
-HSPLandroid/content/Context;->getSystemService(Ljava/lang/Class;)Ljava/lang/Object;
+HSPLandroid/content/Context;->getString(I[Ljava/lang/Object;)Ljava/lang/String;+]Landroid/content/res/Resources;Landroid/content/res/Resources;
+HSPLandroid/content/Context;->getSystemService(Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/content/Context;missing_types
 HSPLandroid/content/Context;->getText(I)Ljava/lang/CharSequence;
 HSPLandroid/content/Context;->getToken(Landroid/content/Context;)Landroid/os/IBinder;
-HSPLandroid/content/Context;->isAutofillCompatibilityEnabled()Z
-HSPLandroid/content/Context;->obtainStyledAttributes(I[I)Landroid/content/res/TypedArray;
-HSPLandroid/content/Context;->obtainStyledAttributes(Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;
-HSPLandroid/content/Context;->obtainStyledAttributes(Landroid/util/AttributeSet;[III)Landroid/content/res/TypedArray;
-HSPLandroid/content/Context;->obtainStyledAttributes([I)Landroid/content/res/TypedArray;
+HSPLandroid/content/Context;->isAutofillCompatibilityEnabled()Z+]Landroid/content/Context;missing_types
+HSPLandroid/content/Context;->obtainStyledAttributes(I[I)Landroid/content/res/TypedArray;+]Landroid/content/res/Resources$Theme;Landroid/content/res/Resources$Theme;
+HSPLandroid/content/Context;->obtainStyledAttributes(Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;+]Landroid/content/res/Resources$Theme;Landroid/content/res/Resources$Theme;]Landroid/content/Context;missing_types
+HSPLandroid/content/Context;->obtainStyledAttributes(Landroid/util/AttributeSet;[III)Landroid/content/res/TypedArray;+]Landroid/content/res/Resources$Theme;Landroid/content/res/Resources$Theme;]Landroid/content/Context;missing_types
+HSPLandroid/content/Context;->obtainStyledAttributes([I)Landroid/content/res/TypedArray;+]Landroid/content/res/Resources$Theme;Landroid/content/res/Resources$Theme;
 HSPLandroid/content/Context;->registerComponentCallbacks(Landroid/content/ComponentCallbacks;)V
 HSPLandroid/content/Context;->unregisterComponentCallbacks(Landroid/content/ComponentCallbacks;)V
 HSPLandroid/content/ContextParams$Builder;-><init>()V
@@ -3837,7 +3846,7 @@
 HSPLandroid/content/ContextWrapper;->bindIsolatedService(Landroid/content/Intent;ILjava/lang/String;Ljava/util/concurrent/Executor;Landroid/content/ServiceConnection;)Z
 HSPLandroid/content/ContextWrapper;->bindService(Landroid/content/Intent;Landroid/content/ServiceConnection;I)Z
 HSPLandroid/content/ContextWrapper;->bindServiceAsUser(Landroid/content/Intent;Landroid/content/ServiceConnection;ILandroid/os/UserHandle;)Z
-HSPLandroid/content/ContextWrapper;->canLoadUnsafeResources()Z
+HSPLandroid/content/ContextWrapper;->canLoadUnsafeResources()Z+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->checkCallingOrSelfPermission(Ljava/lang/String;)I
 HSPLandroid/content/ContextWrapper;->checkCallingPermission(Ljava/lang/String;)I
 HSPLandroid/content/ContextWrapper;->checkPermission(Ljava/lang/String;II)I
@@ -3850,7 +3859,7 @@
 HSPLandroid/content/ContextWrapper;->createConfigurationContext(Landroid/content/res/Configuration;)Landroid/content/Context;
 HSPLandroid/content/ContextWrapper;->createContextAsUser(Landroid/os/UserHandle;I)Landroid/content/Context;
 HSPLandroid/content/ContextWrapper;->createCredentialProtectedStorageContext()Landroid/content/Context;
-HSPLandroid/content/ContextWrapper;->createDeviceProtectedStorageContext()Landroid/content/Context;
+HSPLandroid/content/ContextWrapper;->createDeviceProtectedStorageContext()Landroid/content/Context;+]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLandroid/content/ContextWrapper;->createDisplayContext(Landroid/view/Display;)Landroid/content/Context;
 HSPLandroid/content/ContextWrapper;->createPackageContext(Ljava/lang/String;I)Landroid/content/Context;
 HSPLandroid/content/ContextWrapper;->createPackageContextAsUser(Ljava/lang/String;ILandroid/os/UserHandle;)Landroid/content/Context;
@@ -3863,24 +3872,24 @@
 HSPLandroid/content/ContextWrapper;->enforcePermission(Ljava/lang/String;IILjava/lang/String;)V
 HSPLandroid/content/ContextWrapper;->fileList()[Ljava/lang/String;
 HSPLandroid/content/ContextWrapper;->getActivityToken()Landroid/os/IBinder;+]Landroid/content/Context;Landroid/app/ContextImpl;
-HSPLandroid/content/ContextWrapper;->getApplicationContext()Landroid/content/Context;
+HSPLandroid/content/ContextWrapper;->getApplicationContext()Landroid/content/Context;+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->getApplicationInfo()Landroid/content/pm/ApplicationInfo;+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->getAssets()Landroid/content/res/AssetManager;
 HSPLandroid/content/ContextWrapper;->getAttributionSource()Landroid/content/AttributionSource;
-HSPLandroid/content/ContextWrapper;->getAttributionTag()Ljava/lang/String;
+HSPLandroid/content/ContextWrapper;->getAttributionTag()Ljava/lang/String;+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->getAutofillClient()Landroid/view/autofill/AutofillManager$AutofillClient;
-HSPLandroid/content/ContextWrapper;->getAutofillOptions()Landroid/content/AutofillOptions;
+HSPLandroid/content/ContextWrapper;->getAutofillOptions()Landroid/content/AutofillOptions;+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->getBaseContext()Landroid/content/Context;
 HSPLandroid/content/ContextWrapper;->getBasePackageName()Ljava/lang/String;
 HSPLandroid/content/ContextWrapper;->getCacheDir()Ljava/io/File;
-HSPLandroid/content/ContextWrapper;->getClassLoader()Ljava/lang/ClassLoader;
+HSPLandroid/content/ContextWrapper;->getClassLoader()Ljava/lang/ClassLoader;+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->getContentCaptureOptions()Landroid/content/ContentCaptureOptions;+]Landroid/content/Context;missing_types
-HSPLandroid/content/ContextWrapper;->getContentResolver()Landroid/content/ContentResolver;
+HSPLandroid/content/ContextWrapper;->getContentResolver()Landroid/content/ContentResolver;+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->getDataDir()Ljava/io/File;
-HSPLandroid/content/ContextWrapper;->getDatabasePath(Ljava/lang/String;)Ljava/io/File;
+HSPLandroid/content/ContextWrapper;->getDatabasePath(Ljava/lang/String;)Ljava/io/File;+]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLandroid/content/ContextWrapper;->getDir(Ljava/lang/String;I)Ljava/io/File;
 HSPLandroid/content/ContextWrapper;->getDisplay()Landroid/view/Display;
-HSPLandroid/content/ContextWrapper;->getDisplayId()I
+HSPLandroid/content/ContextWrapper;->getDisplayId()I+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->getDisplayNoVerify()Landroid/view/Display;
 HSPLandroid/content/ContextWrapper;->getExternalCacheDir()Ljava/io/File;
 HSPLandroid/content/ContextWrapper;->getExternalCacheDirs()[Ljava/io/File;
@@ -3888,36 +3897,36 @@
 HSPLandroid/content/ContextWrapper;->getExternalFilesDirs(Ljava/lang/String;)[Ljava/io/File;
 HSPLandroid/content/ContextWrapper;->getExternalMediaDirs()[Ljava/io/File;
 HSPLandroid/content/ContextWrapper;->getFileStreamPath(Ljava/lang/String;)Ljava/io/File;
-HSPLandroid/content/ContextWrapper;->getFilesDir()Ljava/io/File;
+HSPLandroid/content/ContextWrapper;->getFilesDir()Ljava/io/File;+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->getMainExecutor()Ljava/util/concurrent/Executor;
 HSPLandroid/content/ContextWrapper;->getMainLooper()Landroid/os/Looper;
 HSPLandroid/content/ContextWrapper;->getMainThreadHandler()Landroid/os/Handler;
 HSPLandroid/content/ContextWrapper;->getNextAutofillId()I
 HSPLandroid/content/ContextWrapper;->getNoBackupFilesDir()Ljava/io/File;
-HSPLandroid/content/ContextWrapper;->getOpPackageName()Ljava/lang/String;
+HSPLandroid/content/ContextWrapper;->getOpPackageName()Ljava/lang/String;+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->getPackageCodePath()Ljava/lang/String;
-HSPLandroid/content/ContextWrapper;->getPackageManager()Landroid/content/pm/PackageManager;
-HSPLandroid/content/ContextWrapper;->getPackageName()Ljava/lang/String;
+HSPLandroid/content/ContextWrapper;->getPackageManager()Landroid/content/pm/PackageManager;+]Landroid/content/Context;missing_types
+HSPLandroid/content/ContextWrapper;->getPackageName()Ljava/lang/String;+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->getPackageResourcePath()Ljava/lang/String;
-HSPLandroid/content/ContextWrapper;->getResources()Landroid/content/res/Resources;
+HSPLandroid/content/ContextWrapper;->getResources()Landroid/content/res/Resources;+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences;+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->getSharedPreferencesPath(Ljava/lang/String;)Ljava/io/File;
-HSPLandroid/content/ContextWrapper;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
-HSPLandroid/content/ContextWrapper;->getSystemServiceName(Ljava/lang/Class;)Ljava/lang/String;
-HSPLandroid/content/ContextWrapper;->getTheme()Landroid/content/res/Resources$Theme;
-HSPLandroid/content/ContextWrapper;->getUser()Landroid/os/UserHandle;
+HSPLandroid/content/ContextWrapper;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;+]Landroid/content/Context;missing_types
+HSPLandroid/content/ContextWrapper;->getSystemServiceName(Ljava/lang/Class;)Ljava/lang/String;+]Landroid/content/Context;missing_types
+HSPLandroid/content/ContextWrapper;->getTheme()Landroid/content/res/Resources$Theme;+]Landroid/content/Context;missing_types
+HSPLandroid/content/ContextWrapper;->getUser()Landroid/os/UserHandle;+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->getUserId()I
 HSPLandroid/content/ContextWrapper;->getWindowContextToken()Landroid/os/IBinder;+]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLandroid/content/ContextWrapper;->grantUriPermission(Ljava/lang/String;Landroid/net/Uri;I)V
-HSPLandroid/content/ContextWrapper;->isDeviceProtectedStorage()Z
-HSPLandroid/content/ContextWrapper;->isRestricted()Z
+HSPLandroid/content/ContextWrapper;->isDeviceProtectedStorage()Z+]Landroid/content/Context;missing_types
+HSPLandroid/content/ContextWrapper;->isRestricted()Z+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->isUiContext()Z
 HSPLandroid/content/ContextWrapper;->openFileInput(Ljava/lang/String;)Ljava/io/FileInputStream;
 HSPLandroid/content/ContextWrapper;->openFileOutput(Ljava/lang/String;I)Ljava/io/FileOutputStream;
 HSPLandroid/content/ContextWrapper;->openOrCreateDatabase(Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/content/ContextWrapper;->registerComponentCallbacks(Landroid/content/ComponentCallbacks;)V
 HSPLandroid/content/ContextWrapper;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Intent;
-HSPLandroid/content/ContextWrapper;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;I)Landroid/content/Intent;
+HSPLandroid/content/ContextWrapper;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;I)Landroid/content/Intent;+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;)Landroid/content/Intent;
 HSPLandroid/content/ContextWrapper;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;I)Landroid/content/Intent;
 HSPLandroid/content/ContextWrapper;->registerReceiverAsUser(Landroid/content/BroadcastReceiver;Landroid/os/UserHandle;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;)Landroid/content/Intent;
@@ -3953,7 +3962,7 @@
 HSPLandroid/content/IContentService$Stub$Proxy;->getPeriodicSyncs(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;)Ljava/util/List;
 HSPLandroid/content/IContentService$Stub$Proxy;->getSyncAdapterTypes()[Landroid/content/SyncAdapterType;
 HSPLandroid/content/IContentService$Stub$Proxy;->getSyncAutomatically(Landroid/accounts/Account;Ljava/lang/String;)Z
-HSPLandroid/content/IContentService$Stub$Proxy;->notifyChange([Landroid/net/Uri;Landroid/database/IContentObserver;ZIIILjava/lang/String;)V
+HSPLandroid/content/IContentService$Stub$Proxy;->notifyChange([Landroid/net/Uri;Landroid/database/IContentObserver;ZIIILjava/lang/String;)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/IContentService$Stub$Proxy;->registerContentObserver(Landroid/net/Uri;ZLandroid/database/IContentObserver;II)V
 HSPLandroid/content/IContentService$Stub$Proxy;->removePeriodicSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)V
 HSPLandroid/content/IContentService$Stub$Proxy;->setIsSyncable(Landroid/accounts/Account;Ljava/lang/String;I)V
@@ -3965,10 +3974,10 @@
 HSPLandroid/content/IIntentReceiver$Stub;-><init>()V
 HSPLandroid/content/IIntentReceiver$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/content/IIntentReceiver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IIntentReceiver;
-HSPLandroid/content/IIntentReceiver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/content/IIntentReceiver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z+]Landroid/content/IIntentReceiver$Stub;Landroid/app/PendingIntent$FinishedDispatcher;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/IIntentSender$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/content/IIntentSender$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/content/IIntentSender$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IIntentSender;
+HSPLandroid/content/IIntentSender$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IIntentSender;+]Landroid/os/IBinder;Landroid/os/BinderProxy;
 HSPLandroid/content/IOnPrimaryClipChangedListener$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/content/IRestrictionsManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/content/IRestrictionsManager$Stub$Proxy;->getApplicationRestrictions(Ljava/lang/String;)Landroid/os/Bundle;
@@ -3992,7 +4001,7 @@
 HSPLandroid/content/Intent;-><init>(Landroid/content/Intent;)V
 HSPLandroid/content/Intent;-><init>(Landroid/content/Intent;I)V
 HSPLandroid/content/Intent;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/Intent;-><init>(Ljava/lang/String;)V
+HSPLandroid/content/Intent;-><init>(Ljava/lang/String;)V+]Landroid/content/Intent;Landroid/content/Intent;
 HSPLandroid/content/Intent;-><init>(Ljava/lang/String;Landroid/net/Uri;)V
 HSPLandroid/content/Intent;-><init>(Ljava/lang/String;Landroid/net/Uri;Landroid/content/Context;Ljava/lang/Class;)V
 HSPLandroid/content/Intent;->addCategory(Ljava/lang/String;)Landroid/content/Intent;
@@ -4034,13 +4043,13 @@
 HSPLandroid/content/Intent;->isImageCaptureIntent()Z
 HSPLandroid/content/Intent;->isWebIntent()Z
 HSPLandroid/content/Intent;->makeMainActivity(Landroid/content/ComponentName;)Landroid/content/Intent;
-HSPLandroid/content/Intent;->migrateExtraStreamToClipData(Landroid/content/Context;)Z
+HSPLandroid/content/Intent;->migrateExtraStreamToClipData(Landroid/content/Context;)Z+]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLandroid/content/Intent;->parseIntent(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;)Landroid/content/Intent;
 HSPLandroid/content/Intent;->parseUri(Ljava/lang/String;I)Landroid/content/Intent;
-HSPLandroid/content/Intent;->parseUriInternal(Ljava/lang/String;I)Landroid/content/Intent;+]Ljava/lang/String;Ljava/lang/String;
-HSPLandroid/content/Intent;->prepareToEnterProcess(ZLandroid/content/AttributionSource;)V
-HSPLandroid/content/Intent;->prepareToLeaveProcess(Landroid/content/Context;)V
-HSPLandroid/content/Intent;->prepareToLeaveProcess(Z)V
+HSPLandroid/content/Intent;->parseUriInternal(Ljava/lang/String;I)Landroid/content/Intent;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLandroid/content/Intent;->prepareToEnterProcess(ZLandroid/content/AttributionSource;)V+]Ljava/lang/String;Ljava/lang/String;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLandroid/content/Intent;->prepareToLeaveProcess(Landroid/content/Context;)V+]Landroid/content/Context;missing_types]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLandroid/content/Intent;->prepareToLeaveProcess(Z)V+]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/content/Intent;Landroid/content/Intent;]Ljava/lang/String;Ljava/lang/String;]Landroid/net/Uri;Landroid/net/Uri$OpaqueUri;
 HSPLandroid/content/Intent;->putExtra(Ljava/lang/String;I)Landroid/content/Intent;
 HSPLandroid/content/Intent;->putExtra(Ljava/lang/String;J)Landroid/content/Intent;
 HSPLandroid/content/Intent;->putExtra(Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/Intent;
@@ -4058,7 +4067,7 @@
 HSPLandroid/content/Intent;->putExtras(Landroid/os/Bundle;)Landroid/content/Intent;
 HSPLandroid/content/Intent;->putParcelableArrayListExtra(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;
 HSPLandroid/content/Intent;->putStringArrayListExtra(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;
-HSPLandroid/content/Intent;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/content/Intent;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/net/Uri$1;,Landroid/graphics/Rect$1;]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLandroid/content/Intent;->removeCategory(Ljava/lang/String;)V
 HSPLandroid/content/Intent;->removeExtra(Ljava/lang/String;)V
 HSPLandroid/content/Intent;->replaceExtras(Landroid/os/Bundle;)Landroid/content/Intent;
@@ -4066,8 +4075,8 @@
 HSPLandroid/content/Intent;->resolveActivityInfo(Landroid/content/pm/PackageManager;I)Landroid/content/pm/ActivityInfo;
 HSPLandroid/content/Intent;->resolveSystemService(Landroid/content/pm/PackageManager;I)Landroid/content/ComponentName;
 HSPLandroid/content/Intent;->resolveType(Landroid/content/ContentResolver;)Ljava/lang/String;
-HSPLandroid/content/Intent;->resolveTypeIfNeeded(Landroid/content/ContentResolver;)Ljava/lang/String;
-HSPLandroid/content/Intent;->setAction(Ljava/lang/String;)Landroid/content/Intent;
+HSPLandroid/content/Intent;->resolveTypeIfNeeded(Landroid/content/ContentResolver;)Ljava/lang/String;+]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLandroid/content/Intent;->setAction(Ljava/lang/String;)Landroid/content/Intent;+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/content/Intent;->setAllowFds(Z)V
 HSPLandroid/content/Intent;->setClass(Landroid/content/Context;Ljava/lang/Class;)Landroid/content/Intent;
 HSPLandroid/content/Intent;->setClassName(Landroid/content/Context;Ljava/lang/String;)Landroid/content/Intent;
@@ -4084,12 +4093,12 @@
 HSPLandroid/content/Intent;->setSelector(Landroid/content/Intent;)V
 HSPLandroid/content/Intent;->setSourceBounds(Landroid/graphics/Rect;)V
 HSPLandroid/content/Intent;->setType(Ljava/lang/String;)Landroid/content/Intent;
-HSPLandroid/content/Intent;->toShortString(Ljava/lang/StringBuilder;ZZZZ)V
+HSPLandroid/content/Intent;->toShortString(Ljava/lang/StringBuilder;ZZZZ)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLandroid/content/Intent;->toString()Ljava/lang/String;
 HSPLandroid/content/Intent;->toUri(I)Ljava/lang/String;
 HSPLandroid/content/Intent;->toUriFragment(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
 HSPLandroid/content/Intent;->toUriInner(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
-HSPLandroid/content/Intent;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/Intent;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/IntentFilter$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLandroid/content/IntentFilter$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/IntentFilter;
 HSPLandroid/content/IntentFilter$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -4101,22 +4110,22 @@
 HSPLandroid/content/IntentFilter;-><init>()V
 HSPLandroid/content/IntentFilter;-><init>(Landroid/content/IntentFilter;)V
 HSPLandroid/content/IntentFilter;-><init>(Landroid/os/Parcel;)V+]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/content/IntentFilter;-><init>(Ljava/lang/String;)V
+HSPLandroid/content/IntentFilter;-><init>(Ljava/lang/String;)V+]Landroid/content/IntentFilter;Landroid/content/IntentFilter;
 HSPLandroid/content/IntentFilter;->actionsIterator()Ljava/util/Iterator;
-HSPLandroid/content/IntentFilter;->addAction(Ljava/lang/String;)V
+HSPLandroid/content/IntentFilter;->addAction(Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/content/IntentFilter;->addCategory(Ljava/lang/String;)V
 HSPLandroid/content/IntentFilter;->addDataAuthority(Landroid/content/IntentFilter$AuthorityEntry;)V
 HSPLandroid/content/IntentFilter;->addDataAuthority(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/content/IntentFilter;->addDataPath(Landroid/os/PatternMatcher;)V
 HSPLandroid/content/IntentFilter;->addDataPath(Ljava/lang/String;I)V
-HSPLandroid/content/IntentFilter;->addDataScheme(Ljava/lang/String;)V
+HSPLandroid/content/IntentFilter;->addDataScheme(Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/content/IntentFilter;->addDataSchemeSpecificPart(Landroid/os/PatternMatcher;)V
 HSPLandroid/content/IntentFilter;->addDataSchemeSpecificPart(Ljava/lang/String;I)V
 HSPLandroid/content/IntentFilter;->addDataType(Ljava/lang/String;)V
 HSPLandroid/content/IntentFilter;->authoritiesIterator()Ljava/util/Iterator;
 HSPLandroid/content/IntentFilter;->categoriesIterator()Ljava/util/Iterator;
-HSPLandroid/content/IntentFilter;->countActions()I
-HSPLandroid/content/IntentFilter;->countCategories()I
+HSPLandroid/content/IntentFilter;->countActions()I+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/content/IntentFilter;->countCategories()I+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/content/IntentFilter;->countDataAuthorities()I
 HSPLandroid/content/IntentFilter;->countDataPaths()I
 HSPLandroid/content/IntentFilter;->countDataSchemes()I
@@ -4125,7 +4134,7 @@
 HSPLandroid/content/IntentFilter;->debugCheck()Z
 HSPLandroid/content/IntentFilter;->getAction(I)Ljava/lang/String;
 HSPLandroid/content/IntentFilter;->getAutoVerify()Z
-HSPLandroid/content/IntentFilter;->getCategory(I)Ljava/lang/String;
+HSPLandroid/content/IntentFilter;->getCategory(I)Ljava/lang/String;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/content/IntentFilter;->getDataScheme(I)Ljava/lang/String;
 HSPLandroid/content/IntentFilter;->getHosts()[Ljava/lang/String;
 HSPLandroid/content/IntentFilter;->getHostsList()Ljava/util/ArrayList;
@@ -4151,12 +4160,12 @@
 HSPLandroid/content/IntentFilter;->setPriority(I)V
 HSPLandroid/content/IntentFilter;->setVisibilityToInstantApp(I)V
 HSPLandroid/content/IntentFilter;->typesIterator()Ljava/util/Iterator;
-HSPLandroid/content/IntentFilter;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/IntentFilter;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/IntentSender;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/LocusId$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/LocusId;
-HSPLandroid/content/LocusId$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/content/LocusId$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/LocusId;+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/LocusId$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/content/LocusId$1;Landroid/content/LocusId$1;
 HSPLandroid/content/LocusId;-><init>(Ljava/lang/String;)V
-HSPLandroid/content/LocusId;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/LocusId;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/PeriodicSync$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/PeriodicSync;
 HSPLandroid/content/PeriodicSync$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/PeriodicSync;-><init>(Landroid/os/Parcel;)V
@@ -4231,7 +4240,7 @@
 HSPLandroid/content/om/OverlayInfo;->ensureValidState()V
 HSPLandroid/content/om/OverlayInfo;->isEnabled()Z
 HSPLandroid/content/pm/ActivityInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ActivityInfo;
-HSPLandroid/content/pm/ActivityInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/content/pm/ActivityInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/content/pm/ActivityInfo$1;Landroid/content/pm/ActivityInfo$1;
 HSPLandroid/content/pm/ActivityInfo$1;->newArray(I)[Landroid/content/pm/ActivityInfo;
 HSPLandroid/content/pm/ActivityInfo$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/content/pm/ActivityInfo$WindowLayout;-><init>(Landroid/os/Parcel;)V
@@ -4249,8 +4258,8 @@
 HSPLandroid/content/pm/ApkChecksum;->getValue()[B
 HSPLandroid/content/pm/ApplicationInfo$1$$ExternalSyntheticLambda0;-><init>()V
 HSPLandroid/content/pm/ApplicationInfo$1$$ExternalSyntheticLambda0;->readRawParceled(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/pm/ApplicationInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ApplicationInfo;
-HSPLandroid/content/pm/ApplicationInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/content/pm/ApplicationInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ApplicationInfo;+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/pm/ApplicationInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/content/pm/ApplicationInfo$1;Landroid/content/pm/ApplicationInfo$1;
 HSPLandroid/content/pm/ApplicationInfo$1;->lambda$createFromParcel$0(Landroid/os/Parcel;)Landroid/content/pm/ApplicationInfo;
 HSPLandroid/content/pm/ApplicationInfo;-><init>()V
 HSPLandroid/content/pm/ApplicationInfo;-><init>(Landroid/content/pm/ApplicationInfo;)V+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;
@@ -4298,10 +4307,10 @@
 HSPLandroid/content/pm/BaseParceledListSlice;-><init>(Landroid/os/Parcel;Ljava/lang/ClassLoader;)V+]Landroid/content/pm/BaseParceledListSlice;Landroid/content/pm/ParceledListSlice;]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/BaseParceledListSlice;-><init>(Ljava/util/List;)V
 HSPLandroid/content/pm/BaseParceledListSlice;->getList()Ljava/util/List;
-HSPLandroid/content/pm/BaseParceledListSlice;->readCreator(Landroid/os/Parcelable$Creator;Landroid/os/Parcel;Ljava/lang/ClassLoader;)Ljava/lang/Object;
+HSPLandroid/content/pm/BaseParceledListSlice;->readCreator(Landroid/os/Parcelable$Creator;Landroid/os/Parcel;Ljava/lang/ClassLoader;)Ljava/lang/Object;+]Landroid/os/Parcelable$Creator;megamorphic_types
 HSPLandroid/content/pm/BaseParceledListSlice;->readVerifyAndAddElement(Landroid/os/Parcelable$Creator;Landroid/os/Parcel;Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/lang/Class;+]Ljava/lang/Object;megamorphic_types]Ljava/util/List;Ljava/util/ArrayList;
-HSPLandroid/content/pm/BaseParceledListSlice;->verifySameType(Ljava/lang/Class;Ljava/lang/Class;)V
-HSPLandroid/content/pm/BaseParceledListSlice;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/pm/BaseParceledListSlice;->verifySameType(Ljava/lang/Class;Ljava/lang/Class;)V+]Ljava/lang/Object;Ljava/lang/Class;
+HSPLandroid/content/pm/BaseParceledListSlice;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/content/pm/BaseParceledListSlice;Landroid/content/pm/ParceledListSlice;]Ljava/lang/Object;Landroid/app/NotificationChannel;,Landroid/view/contentcapture/ContentCaptureEvent;,Landroid/app/NotificationChannelGroup;,Landroid/content/pm/ShortcutInfo;]Ljava/util/List;Ljava/util/Arrays$ArrayList;,Ljava/util/ArrayList;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/Checksum$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/Checksum;
 HSPLandroid/content/pm/Checksum$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/pm/Checksum;-><init>(Landroid/os/Parcel;)V
@@ -4366,7 +4375,7 @@
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->hasSystemFeature(Ljava/lang/String;I)Z
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->isInstantApp(Ljava/lang/String;I)Z
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->isPackageSuspendedForUser(Ljava/lang/String;I)Z
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->isProtectedBroadcast(Ljava/lang/String;)Z
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->isProtectedBroadcast(Ljava/lang/String;)Z+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->lambda$notifyDexLoad$0(Landroid/os/Parcel;Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->notifyDexLoad(Ljava/lang/String;Ljava/util/Map;Ljava/lang/String;)V
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->notifyPackageUse(Ljava/lang/String;I)V
@@ -4422,7 +4431,7 @@
 HSPLandroid/content/pm/PackageInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/PackageInfo;
 HSPLandroid/content/pm/PackageInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/pm/PackageInfo;-><init>()V
-HSPLandroid/content/pm/PackageInfo;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/content/pm/ApplicationInfo$1;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/pm/PackageInfo;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/content/pm/ApplicationInfo$1;,Landroid/content/pm/SigningInfo$1;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/PackageInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/PackageInfo-IA;)V
 HSPLandroid/content/pm/PackageInfo;->composeLongVersionCode(II)J
 HSPLandroid/content/pm/PackageInfo;->getLongVersionCode()J
@@ -4453,11 +4462,11 @@
 HSPLandroid/content/pm/PackageItemInfo;->loadSafeLabel(Landroid/content/pm/PackageManager;FI)Ljava/lang/CharSequence;
 HSPLandroid/content/pm/PackageItemInfo;->loadUnsafeLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;
 HSPLandroid/content/pm/PackageItemInfo;->loadXmlMetaData(Landroid/content/pm/PackageManager;Ljava/lang/String;)Landroid/content/res/XmlResourceParser;
-HSPLandroid/content/pm/PackageItemInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/pm/PackageItemInfo;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/PackageManager$1;->recompute(Landroid/content/pm/PackageManager$ApplicationInfoQuery;)Landroid/content/pm/ApplicationInfo;
 HSPLandroid/content/pm/PackageManager$1;->recompute(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/content/pm/PackageManager$2;->recompute(Landroid/content/pm/PackageManager$PackageInfoQuery;)Landroid/content/pm/PackageInfo;
-HSPLandroid/content/pm/PackageManager$2;->recompute(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/content/pm/PackageManager$2;->recompute(Ljava/lang/Object;)Ljava/lang/Object;+]Landroid/content/pm/PackageManager$2;Landroid/content/pm/PackageManager$2;
 HSPLandroid/content/pm/PackageManager$ApplicationInfoFlags;-><init>(J)V
 HSPLandroid/content/pm/PackageManager$ApplicationInfoFlags;->of(J)Landroid/content/pm/PackageManager$ApplicationInfoFlags;
 HSPLandroid/content/pm/PackageManager$ApplicationInfoQuery;-><init>(Ljava/lang/String;JI)V
@@ -4602,19 +4611,19 @@
 HSPLandroid/content/pm/ProviderInfoList;->getList()Ljava/util/List;
 HSPLandroid/content/pm/RegisteredServicesCache;->containsType(Ljava/util/ArrayList;Ljava/lang/Object;)Z
 HSPLandroid/content/pm/ResolveInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ResolveInfo;
-HSPLandroid/content/pm/ResolveInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/content/pm/ResolveInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/content/pm/ResolveInfo$1;Landroid/content/pm/ResolveInfo$1;
 HSPLandroid/content/pm/ResolveInfo;-><init>()V
 HSPLandroid/content/pm/ResolveInfo;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/content/pm/ServiceInfo$1;,Landroid/content/pm/ActivityInfo$1;,Landroid/text/TextUtils$1;,Landroid/content/IntentFilter$1;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/ResolveInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/ResolveInfo-IA;)V
 HSPLandroid/content/pm/ResolveInfo;->getComponentInfo()Landroid/content/pm/ComponentInfo;
 HSPLandroid/content/pm/ResolveInfo;->loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/content/pm/ResolveInfo;->loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;
-HSPLandroid/content/pm/ResolveInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/pm/ResolveInfo;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/content/pm/ServiceInfo;Landroid/content/pm/ServiceInfo;]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/ServiceInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ServiceInfo;
-HSPLandroid/content/pm/ServiceInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/content/pm/ServiceInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/content/pm/ServiceInfo$1;Landroid/content/pm/ServiceInfo$1;
 HSPLandroid/content/pm/ServiceInfo$1;->newArray(I)[Landroid/content/pm/ServiceInfo;
 HSPLandroid/content/pm/ServiceInfo$1;->newArray(I)[Ljava/lang/Object;
-HSPLandroid/content/pm/ServiceInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/ServiceInfo;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/ServiceInfo;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/content/pm/SharedLibraryInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/SharedLibraryInfo;
 HSPLandroid/content/pm/SharedLibraryInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/content/pm/SharedLibraryInfo$1;Landroid/content/pm/SharedLibraryInfo$1;
@@ -4628,9 +4637,9 @@
 HSPLandroid/content/pm/SharedLibraryInfo;->getPath()Ljava/lang/String;
 HSPLandroid/content/pm/SharedLibraryInfo;->isNative()Z
 HSPLandroid/content/pm/SharedLibraryInfo;->isSdk()Z
-HSPLandroid/content/pm/SharedLibraryInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/pm/SharedLibraryInfo;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/ShortcutInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ShortcutInfo;
-HSPLandroid/content/pm/ShortcutInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/content/pm/ShortcutInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/content/pm/ShortcutInfo$1;Landroid/content/pm/ShortcutInfo$1;
 HSPLandroid/content/pm/ShortcutInfo$Builder;-><init>(Landroid/content/Context;Ljava/lang/String;)V
 HSPLandroid/content/pm/ShortcutInfo$Builder;->build()Landroid/content/pm/ShortcutInfo;
 HSPLandroid/content/pm/ShortcutInfo$Builder;->setCategories(Ljava/util/Set;)Landroid/content/pm/ShortcutInfo$Builder;
@@ -4667,7 +4676,7 @@
 HSPLandroid/content/pm/ShortcutInfo;->hasIconFile()Z
 HSPLandroid/content/pm/ShortcutInfo;->hasIconResource()Z
 HSPLandroid/content/pm/ShortcutInfo;->hasIconUri()Z
-HSPLandroid/content/pm/ShortcutInfo;->hasKeyFieldsOnly()Z
+HSPLandroid/content/pm/ShortcutInfo;->hasKeyFieldsOnly()Z+]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;
 HSPLandroid/content/pm/ShortcutInfo;->isCached()Z
 HSPLandroid/content/pm/ShortcutInfo;->isDeclaredInManifest()Z
 HSPLandroid/content/pm/ShortcutInfo;->isDynamic()Z
@@ -4676,7 +4685,7 @@
 HSPLandroid/content/pm/ShortcutInfo;->setIntentExtras(Landroid/content/Intent;Landroid/os/PersistableBundle;)Landroid/content/Intent;
 HSPLandroid/content/pm/ShortcutInfo;->updateTimestamp()V
 HSPLandroid/content/pm/ShortcutInfo;->validateIcon(Landroid/graphics/drawable/Icon;)Landroid/graphics/drawable/Icon;
-HSPLandroid/content/pm/ShortcutInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/pm/ShortcutInfo;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/ShortcutManager;-><init>(Landroid/content/Context;Landroid/content/pm/IShortcutService;)V
 HSPLandroid/content/pm/ShortcutManager;->addDynamicShortcuts(Ljava/util/List;)Z
 HSPLandroid/content/pm/ShortcutManager;->getDynamicShortcuts()Ljava/util/List;
@@ -4758,7 +4767,7 @@
 HSPLandroid/content/pm/permission/SplitPermissionInfoParcelable;->getTargetSdk()I
 HSPLandroid/content/pm/permission/SplitPermissionInfoParcelable;->onConstructed()V
 HSPLandroid/content/pm/split/SplitDependencyLoader;->collectConfigSplitIndices(I)[I
-HSPLandroid/content/pm/split/SplitDependencyLoader;->loadDependenciesForSplit(I)V+]Landroid/content/pm/split/SplitDependencyLoader;missing_types]Landroid/util/IntArray;Landroid/util/IntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLandroid/content/pm/split/SplitDependencyLoader;->loadDependenciesForSplit(I)V+]Landroid/util/IntArray;Landroid/util/IntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/pm/split/SplitDependencyLoader;missing_types
 HSPLandroid/content/res/ApkAssets;-><init>(ILjava/lang/String;ILandroid/content/res/loader/AssetsProvider;)V
 HSPLandroid/content/res/ApkAssets;->close()V
 HSPLandroid/content/res/ApkAssets;->definesOverlayable()Z
@@ -4766,7 +4775,7 @@
 HSPLandroid/content/res/ApkAssets;->finalize()V
 HSPLandroid/content/res/ApkAssets;->getAssetPath()Ljava/lang/String;
 HSPLandroid/content/res/ApkAssets;->getDebugName()Ljava/lang/String;
-HSPLandroid/content/res/ApkAssets;->getStringFromPool(I)Ljava/lang/CharSequence;
+HSPLandroid/content/res/ApkAssets;->getStringFromPool(I)Ljava/lang/CharSequence;+]Landroid/content/res/StringBlock;Landroid/content/res/StringBlock;
 HSPLandroid/content/res/ApkAssets;->isUpToDate()Z
 HSPLandroid/content/res/ApkAssets;->loadFromPath(Ljava/lang/String;)Landroid/content/res/ApkAssets;
 HSPLandroid/content/res/ApkAssets;->loadFromPath(Ljava/lang/String;I)Landroid/content/res/ApkAssets;
@@ -4790,7 +4799,7 @@
 HSPLandroid/content/res/AssetManager$AssetInputStream;-><init>(Landroid/content/res/AssetManager;J)V
 HSPLandroid/content/res/AssetManager$AssetInputStream;-><init>(Landroid/content/res/AssetManager;JLandroid/content/res/AssetManager$AssetInputStream-IA;)V
 HSPLandroid/content/res/AssetManager$AssetInputStream;->available()I
-HSPLandroid/content/res/AssetManager$AssetInputStream;->close()V
+HSPLandroid/content/res/AssetManager$AssetInputStream;->close()V+]Ljava/lang/Object;Landroid/content/res/AssetManager$AssetInputStream;
 HSPLandroid/content/res/AssetManager$AssetInputStream;->ensureOpen()V
 HSPLandroid/content/res/AssetManager$AssetInputStream;->finalize()V
 HSPLandroid/content/res/AssetManager$AssetInputStream;->getNativeAsset()J
@@ -4801,7 +4810,7 @@
 HSPLandroid/content/res/AssetManager$AssetInputStream;->read([BII)I
 HSPLandroid/content/res/AssetManager$Builder;-><init>()V
 HSPLandroid/content/res/AssetManager$Builder;->addApkAssets(Landroid/content/res/ApkAssets;)Landroid/content/res/AssetManager$Builder;
-HSPLandroid/content/res/AssetManager$Builder;->build()Landroid/content/res/AssetManager;
+HSPLandroid/content/res/AssetManager$Builder;->build()Landroid/content/res/AssetManager;+]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/content/res/AssetManager;->-$$Nest$fgetmObject(Landroid/content/res/AssetManager;)J
 HSPLandroid/content/res/AssetManager;->-$$Nest$fputmApkAssets(Landroid/content/res/AssetManager;[Landroid/content/res/ApkAssets;)V
 HSPLandroid/content/res/AssetManager;->-$$Nest$fputmLoaders(Landroid/content/res/AssetManager;[Landroid/content/res/loader/ResourcesLoader;)V
@@ -4811,7 +4820,7 @@
 HSPLandroid/content/res/AssetManager;->-$$Nest$smnativeAssetGetRemainingLength(J)J
 HSPLandroid/content/res/AssetManager;->-$$Nest$smnativeAssetRead(J[BII)I
 HSPLandroid/content/res/AssetManager;->-$$Nest$smnativeSetApkAssets(J[Landroid/content/res/ApkAssets;Z)V
-HSPLandroid/content/res/AssetManager;-><init>()V
+HSPLandroid/content/res/AssetManager;-><init>()V+]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
 HSPLandroid/content/res/AssetManager;-><init>(Z)V
 HSPLandroid/content/res/AssetManager;-><init>(ZLandroid/content/res/AssetManager-IA;)V
 HSPLandroid/content/res/AssetManager;->addAssetPathInternal(Ljava/lang/String;ZZ)I
@@ -4834,10 +4843,10 @@
 HSPLandroid/content/res/AssetManager;->getLocales()[Ljava/lang/String;
 HSPLandroid/content/res/AssetManager;->getNonSystemLocales()[Ljava/lang/String;
 HSPLandroid/content/res/AssetManager;->getParentThemeIdentifier(I)I
-HSPLandroid/content/res/AssetManager;->getPooledStringForCookie(II)Ljava/lang/CharSequence;
+HSPLandroid/content/res/AssetManager;->getPooledStringForCookie(II)Ljava/lang/CharSequence;+]Landroid/content/res/ApkAssets;Landroid/content/res/ApkAssets;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
 HSPLandroid/content/res/AssetManager;->getResourceArray(I[I)I
 HSPLandroid/content/res/AssetManager;->getResourceArraySize(I)I
-HSPLandroid/content/res/AssetManager;->getResourceBagText(II)Ljava/lang/CharSequence;
+HSPLandroid/content/res/AssetManager;->getResourceBagText(II)Ljava/lang/CharSequence;+]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
 HSPLandroid/content/res/AssetManager;->getResourceEntryName(I)Ljava/lang/String;
 HSPLandroid/content/res/AssetManager;->getResourceIdentifier(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/content/res/AssetManager;->getResourceIntArray(I)[I
@@ -4847,7 +4856,7 @@
 HSPLandroid/content/res/AssetManager;->getResourceText(I)Ljava/lang/CharSequence;
 HSPLandroid/content/res/AssetManager;->getResourceTextArray(I)[Ljava/lang/CharSequence;
 HSPLandroid/content/res/AssetManager;->getResourceTypeName(I)Ljava/lang/String;
-HSPLandroid/content/res/AssetManager;->getResourceValue(IILandroid/util/TypedValue;Z)Z
+HSPLandroid/content/res/AssetManager;->getResourceValue(IILandroid/util/TypedValue;Z)Z+]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
 HSPLandroid/content/res/AssetManager;->getSizeConfigurations()[Landroid/content/res/Configuration;
 HSPLandroid/content/res/AssetManager;->getSystem()Landroid/content/res/AssetManager;
 HSPLandroid/content/res/AssetManager;->getThemeValue(JILandroid/util/TypedValue;Z)Z+]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
@@ -4857,7 +4866,7 @@
 HSPLandroid/content/res/AssetManager;->open(Ljava/lang/String;)Ljava/io/InputStream;
 HSPLandroid/content/res/AssetManager;->open(Ljava/lang/String;I)Ljava/io/InputStream;
 HSPLandroid/content/res/AssetManager;->openFd(Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;
-HSPLandroid/content/res/AssetManager;->openNonAsset(ILjava/lang/String;I)Ljava/io/InputStream;
+HSPLandroid/content/res/AssetManager;->openNonAsset(ILjava/lang/String;I)Ljava/io/InputStream;+]Ljava/lang/Object;Landroid/content/res/AssetManager$AssetInputStream;
 HSPLandroid/content/res/AssetManager;->openNonAssetFd(ILjava/lang/String;)Landroid/content/res/AssetFileDescriptor;
 HSPLandroid/content/res/AssetManager;->openNonAssetFd(Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;
 HSPLandroid/content/res/AssetManager;->openXmlBlockAsset(ILjava/lang/String;)Landroid/content/res/XmlBlock;+]Ljava/lang/Object;Landroid/content/res/XmlBlock;
@@ -4866,18 +4875,18 @@
 HSPLandroid/content/res/AssetManager;->releaseTheme(J)V
 HSPLandroid/content/res/AssetManager;->resolveAttrs(JII[I[I[I[I)Z
 HSPLandroid/content/res/AssetManager;->retrieveAttributes(Landroid/content/res/XmlBlock$Parser;[I[I[I)Z
-HSPLandroid/content/res/AssetManager;->setApkAssets([Landroid/content/res/ApkAssets;Z)V
+HSPLandroid/content/res/AssetManager;->setApkAssets([Landroid/content/res/ApkAssets;Z)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLandroid/content/res/AssetManager;->setConfiguration(IILjava/lang/String;IIIIIIIIIIIIIII)V
 HSPLandroid/content/res/AssetManager;->setThemeTo(JLandroid/content/res/AssetManager;J)V
 HSPLandroid/content/res/AssetManager;->xmlBlockGone(I)V
-HSPLandroid/content/res/ColorStateList$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/res/ColorStateList;
+HSPLandroid/content/res/ColorStateList$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/res/ColorStateList;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/res/ColorStateList$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/res/ColorStateList$ColorStateListFactory;-><init>(Landroid/content/res/ColorStateList;)V
 HSPLandroid/content/res/ColorStateList$ColorStateListFactory;->getChangingConfigurations()I
 HSPLandroid/content/res/ColorStateList$ColorStateListFactory;->newInstance()Landroid/content/res/ColorStateList;
 HSPLandroid/content/res/ColorStateList$ColorStateListFactory;->newInstance()Ljava/lang/Object;
-HSPLandroid/content/res/ColorStateList$ColorStateListFactory;->newInstance(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;
-HSPLandroid/content/res/ColorStateList$ColorStateListFactory;->newInstance(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Ljava/lang/Object;
+HSPLandroid/content/res/ColorStateList$ColorStateListFactory;->newInstance(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;
+HSPLandroid/content/res/ColorStateList$ColorStateListFactory;->newInstance(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Ljava/lang/Object;+]Landroid/content/res/ColorStateList$ColorStateListFactory;Landroid/content/res/ColorStateList$ColorStateListFactory;
 HSPLandroid/content/res/ColorStateList;-><init>()V
 HSPLandroid/content/res/ColorStateList;-><init>(Landroid/content/res/ColorStateList;)V
 HSPLandroid/content/res/ColorStateList;-><init>([[I[I)V
@@ -4888,14 +4897,14 @@
 HSPLandroid/content/res/ColorStateList;->getColorForState([II)I
 HSPLandroid/content/res/ColorStateList;->getConstantState()Landroid/content/res/ConstantState;
 HSPLandroid/content/res/ColorStateList;->getDefaultColor()I
-HSPLandroid/content/res/ColorStateList;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/content/res/ColorStateList;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V+]Landroid/util/AttributeSet;Landroid/content/res/XmlBlock$Parser;]Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/XmlBlock$Parser;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/content/res/ColorStateList;->isStateful()Z
 HSPLandroid/content/res/ColorStateList;->modulateColor(IFF)I
-HSPLandroid/content/res/ColorStateList;->obtainForTheme(Landroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;
+HSPLandroid/content/res/ColorStateList;->obtainForTheme(Landroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;
 HSPLandroid/content/res/ColorStateList;->obtainForTheme(Landroid/content/res/Resources$Theme;)Landroid/content/res/ComplexColor;
 HSPLandroid/content/res/ColorStateList;->onColorsChanged()V
-HSPLandroid/content/res/ColorStateList;->valueOf(I)Landroid/content/res/ColorStateList;
-HSPLandroid/content/res/ColorStateList;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/res/ColorStateList;->valueOf(I)Landroid/content/res/ColorStateList;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
+HSPLandroid/content/res/ColorStateList;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/res/CompatibilityInfo$2;->createFromParcel(Landroid/os/Parcel;)Landroid/content/res/CompatibilityInfo;
 HSPLandroid/content/res/CompatibilityInfo$2;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/res/CompatibilityInfo;-><init>(Landroid/os/Parcel;)V
@@ -4913,22 +4922,22 @@
 HSPLandroid/content/res/ComplexColor;->setBaseChangingConfigurations(I)V
 HSPLandroid/content/res/Configuration$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/res/Configuration;
 HSPLandroid/content/res/Configuration$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/res/Configuration;-><init>()V
-HSPLandroid/content/res/Configuration;-><init>(Landroid/content/res/Configuration;)V
+HSPLandroid/content/res/Configuration;-><init>()V+]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
+HSPLandroid/content/res/Configuration;-><init>(Landroid/content/res/Configuration;)V+]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
 HSPLandroid/content/res/Configuration;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/content/res/Configuration;-><init>(Landroid/os/Parcel;Landroid/content/res/Configuration-IA;)V
 HSPLandroid/content/res/Configuration;->compareTo(Landroid/content/res/Configuration;)I+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Landroid/os/LocaleList;Landroid/os/LocaleList;]Ljava/util/Locale;Ljava/util/Locale;
 HSPLandroid/content/res/Configuration;->diff(Landroid/content/res/Configuration;)I
-HSPLandroid/content/res/Configuration;->diff(Landroid/content/res/Configuration;ZZ)I
+HSPLandroid/content/res/Configuration;->diff(Landroid/content/res/Configuration;ZZ)I+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Landroid/os/LocaleList;Landroid/os/LocaleList;
 HSPLandroid/content/res/Configuration;->diffPublicOnly(Landroid/content/res/Configuration;)I
-HSPLandroid/content/res/Configuration;->equals(Landroid/content/res/Configuration;)Z
-HSPLandroid/content/res/Configuration;->equals(Ljava/lang/Object;)Z
+HSPLandroid/content/res/Configuration;->equals(Landroid/content/res/Configuration;)Z+]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
+HSPLandroid/content/res/Configuration;->equals(Ljava/lang/Object;)Z+]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
 HSPLandroid/content/res/Configuration;->fixUpLocaleList()V+]Ljava/util/Locale;Ljava/util/Locale;]Landroid/os/LocaleList;Landroid/os/LocaleList;
 HSPLandroid/content/res/Configuration;->generateDelta(Landroid/content/res/Configuration;Landroid/content/res/Configuration;)Landroid/content/res/Configuration;
 HSPLandroid/content/res/Configuration;->getLayoutDirection()I
 HSPLandroid/content/res/Configuration;->getLocales()Landroid/os/LocaleList;
 HSPLandroid/content/res/Configuration;->getScreenLayoutNoDirection(I)I
-HSPLandroid/content/res/Configuration;->hashCode()I
+HSPLandroid/content/res/Configuration;->hashCode()I+]Landroid/os/LocaleList;Landroid/os/LocaleList;
 HSPLandroid/content/res/Configuration;->isLayoutSizeAtLeast(I)Z
 HSPLandroid/content/res/Configuration;->isOtherSeqNewer(Landroid/content/res/Configuration;)Z
 HSPLandroid/content/res/Configuration;->isScreenRound()Z
@@ -4950,7 +4959,7 @@
 HSPLandroid/content/res/Configuration;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/content/res/ConfigurationBoundResourceCache;-><init>()V
 HSPLandroid/content/res/ConfigurationBoundResourceCache;->get(JLandroid/content/res/Resources$Theme;)Ljava/lang/Object;
-HSPLandroid/content/res/ConfigurationBoundResourceCache;->getInstance(JLandroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Ljava/lang/Object;
+HSPLandroid/content/res/ConfigurationBoundResourceCache;->getInstance(JLandroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Ljava/lang/Object;+]Landroid/content/res/ConstantState;Landroid/animation/StateListAnimator$StateListAnimatorConstantState;,Landroid/content/res/ColorStateList$ColorStateListFactory;,Landroid/animation/Animator$AnimatorConstantState;]Landroid/content/res/ConfigurationBoundResourceCache;Landroid/content/res/ConfigurationBoundResourceCache;
 HSPLandroid/content/res/ConfigurationBoundResourceCache;->onConfigurationChange(I)V
 HSPLandroid/content/res/ConfigurationBoundResourceCache;->put(JLandroid/content/res/Resources$Theme;Ljava/lang/Object;)V
 HSPLandroid/content/res/ConfigurationBoundResourceCache;->put(JLandroid/content/res/Resources$Theme;Ljava/lang/Object;Z)V
@@ -4960,12 +4969,12 @@
 HSPLandroid/content/res/ConstantState;->newInstance(Landroid/content/res/Resources;)Ljava/lang/Object;
 HSPLandroid/content/res/ConstantState;->newInstance(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Ljava/lang/Object;
 HSPLandroid/content/res/DrawableCache;-><init>()V
-HSPLandroid/content/res/DrawableCache;->getInstance(JLandroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/res/DrawableCache;->getInstance(JLandroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;+]Landroid/graphics/drawable/Drawable$ConstantState;megamorphic_types]Landroid/content/res/DrawableCache;Landroid/content/res/DrawableCache;
 HSPLandroid/content/res/DrawableCache;->shouldInvalidateEntry(Landroid/graphics/drawable/Drawable$ConstantState;I)Z
 HSPLandroid/content/res/DrawableCache;->shouldInvalidateEntry(Ljava/lang/Object;I)Z
 HSPLandroid/content/res/FontResourcesParser;->parse(Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources;)Landroid/content/res/FontResourcesParser$FamilyResourceEntry;
-HSPLandroid/content/res/FontResourcesParser;->readFamilies(Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources;)Landroid/content/res/FontResourcesParser$FamilyResourceEntry;
-HSPLandroid/content/res/FontResourcesParser;->readFamily(Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources;)Landroid/content/res/FontResourcesParser$FamilyResourceEntry;
+HSPLandroid/content/res/FontResourcesParser;->readFamilies(Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources;)Landroid/content/res/FontResourcesParser$FamilyResourceEntry;+]Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/XmlBlock$Parser;
+HSPLandroid/content/res/FontResourcesParser;->readFamily(Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources;)Landroid/content/res/FontResourcesParser$FamilyResourceEntry;+]Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/XmlBlock$Parser;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/content/res/GradientColor;-><init>()V
 HSPLandroid/content/res/GradientColor;->canApplyTheme()Z
 HSPLandroid/content/res/GradientColor;->createFromXmlInner(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)Landroid/content/res/GradientColor;
@@ -4985,17 +4994,17 @@
 HSPLandroid/content/res/Resources$Theme;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Landroid/content/res/Resources$Theme;]Landroid/content/res/Resources$Theme;Landroid/content/res/Resources$Theme;]Landroid/content/res/Resources$ThemeKey;Landroid/content/res/Resources$ThemeKey;
 HSPLandroid/content/res/Resources$Theme;->getAppliedStyleResId()I+]Landroid/content/res/ResourcesImpl$ThemeImpl;Landroid/content/res/ResourcesImpl$ThemeImpl;
 HSPLandroid/content/res/Resources$Theme;->getChangingConfigurations()I
-HSPLandroid/content/res/Resources$Theme;->getKey()Landroid/content/res/Resources$ThemeKey;
+HSPLandroid/content/res/Resources$Theme;->getKey()Landroid/content/res/Resources$ThemeKey;+]Landroid/content/res/ResourcesImpl$ThemeImpl;Landroid/content/res/ResourcesImpl$ThemeImpl;
 HSPLandroid/content/res/Resources$Theme;->getParentThemeIdentifier(I)I+]Landroid/content/res/ResourcesImpl$ThemeImpl;Landroid/content/res/ResourcesImpl$ThemeImpl;
 HSPLandroid/content/res/Resources$Theme;->getResources()Landroid/content/res/Resources;
 HSPLandroid/content/res/Resources$Theme;->getTheme()[Ljava/lang/String;+]Landroid/content/res/ResourcesImpl$ThemeImpl;Landroid/content/res/ResourcesImpl$ThemeImpl;
 HSPLandroid/content/res/Resources$Theme;->hashCode()I+]Landroid/content/res/Resources$Theme;Landroid/content/res/Resources$Theme;]Landroid/content/res/Resources$ThemeKey;Landroid/content/res/Resources$ThemeKey;
-HSPLandroid/content/res/Resources$Theme;->obtainStyledAttributes(I[I)Landroid/content/res/TypedArray;
+HSPLandroid/content/res/Resources$Theme;->obtainStyledAttributes(I[I)Landroid/content/res/TypedArray;+]Landroid/content/res/ResourcesImpl$ThemeImpl;Landroid/content/res/ResourcesImpl$ThemeImpl;
 HSPLandroid/content/res/Resources$Theme;->obtainStyledAttributes(Landroid/util/AttributeSet;[III)Landroid/content/res/TypedArray;+]Landroid/content/res/ResourcesImpl$ThemeImpl;Landroid/content/res/ResourcesImpl$ThemeImpl;
-HSPLandroid/content/res/Resources$Theme;->obtainStyledAttributes([I)Landroid/content/res/TypedArray;
+HSPLandroid/content/res/Resources$Theme;->obtainStyledAttributes([I)Landroid/content/res/TypedArray;+]Landroid/content/res/ResourcesImpl$ThemeImpl;Landroid/content/res/ResourcesImpl$ThemeImpl;
 HSPLandroid/content/res/Resources$Theme;->rebase()V
 HSPLandroid/content/res/Resources$Theme;->rebase(Landroid/content/res/ResourcesImpl;)V
-HSPLandroid/content/res/Resources$Theme;->resolveAttribute(ILandroid/util/TypedValue;Z)Z
+HSPLandroid/content/res/Resources$Theme;->resolveAttribute(ILandroid/util/TypedValue;Z)Z+]Landroid/content/res/ResourcesImpl$ThemeImpl;Landroid/content/res/ResourcesImpl$ThemeImpl;
 HSPLandroid/content/res/Resources$Theme;->resolveAttributes([I[I)Landroid/content/res/TypedArray;
 HSPLandroid/content/res/Resources$Theme;->setImpl(Landroid/content/res/ResourcesImpl$ThemeImpl;)V
 HSPLandroid/content/res/Resources$Theme;->setTo(Landroid/content/res/Resources$Theme;)V
@@ -5005,7 +5014,7 @@
 HSPLandroid/content/res/Resources$ThemeKey;->clone()Landroid/content/res/Resources$ThemeKey;
 HSPLandroid/content/res/Resources$ThemeKey;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Landroid/content/res/Resources$ThemeKey;]Landroid/content/res/Resources$ThemeKey;Landroid/content/res/Resources$ThemeKey;
 HSPLandroid/content/res/Resources$ThemeKey;->hashCode()I
-HSPLandroid/content/res/Resources$ThemeKey;->setTo(Landroid/content/res/Resources$ThemeKey;)V
+HSPLandroid/content/res/Resources$ThemeKey;->setTo(Landroid/content/res/Resources$ThemeKey;)V+][I[I][Z[Z
 HSPLandroid/content/res/Resources;-><init>(Landroid/content/res/AssetManager;Landroid/util/DisplayMetrics;Landroid/content/res/Configuration;)V
 HSPLandroid/content/res/Resources;-><init>(Ljava/lang/ClassLoader;)V+]Ljava/util/Set;Ljava/util/Collections$SynchronizedSet;
 HSPLandroid/content/res/Resources;->addLoaders([Landroid/content/res/loader/ResourcesLoader;)V
@@ -5015,28 +5024,28 @@
 HSPLandroid/content/res/Resources;->finishPreloading()V
 HSPLandroid/content/res/Resources;->getAnimation(I)Landroid/content/res/XmlResourceParser;
 HSPLandroid/content/res/Resources;->getAnimatorCache()Landroid/content/res/ConfigurationBoundResourceCache;
-HSPLandroid/content/res/Resources;->getAssets()Landroid/content/res/AssetManager;
+HSPLandroid/content/res/Resources;->getAssets()Landroid/content/res/AssetManager;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
 HSPLandroid/content/res/Resources;->getAttributeSetSourceResId(Landroid/util/AttributeSet;)I
-HSPLandroid/content/res/Resources;->getBoolean(I)Z
+HSPLandroid/content/res/Resources;->getBoolean(I)Z+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
 HSPLandroid/content/res/Resources;->getClassLoader()Ljava/lang/ClassLoader;
 HSPLandroid/content/res/Resources;->getColor(I)I
-HSPLandroid/content/res/Resources;->getColor(ILandroid/content/res/Resources$Theme;)I
+HSPLandroid/content/res/Resources;->getColor(ILandroid/content/res/Resources$Theme;)I+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
 HSPLandroid/content/res/Resources;->getColorStateList(I)Landroid/content/res/ColorStateList;
 HSPLandroid/content/res/Resources;->getColorStateList(ILandroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;
-HSPLandroid/content/res/Resources;->getCompatibilityInfo()Landroid/content/res/CompatibilityInfo;
-HSPLandroid/content/res/Resources;->getConfiguration()Landroid/content/res/Configuration;
-HSPLandroid/content/res/Resources;->getDimension(I)F
-HSPLandroid/content/res/Resources;->getDimensionPixelOffset(I)I
-HSPLandroid/content/res/Resources;->getDimensionPixelSize(I)I
-HSPLandroid/content/res/Resources;->getDisplayAdjustments()Landroid/view/DisplayAdjustments;
+HSPLandroid/content/res/Resources;->getCompatibilityInfo()Landroid/content/res/CompatibilityInfo;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
+HSPLandroid/content/res/Resources;->getConfiguration()Landroid/content/res/Configuration;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
+HSPLandroid/content/res/Resources;->getDimension(I)F+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
+HSPLandroid/content/res/Resources;->getDimensionPixelOffset(I)I+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
+HSPLandroid/content/res/Resources;->getDimensionPixelSize(I)I+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
+HSPLandroid/content/res/Resources;->getDisplayAdjustments()Landroid/view/DisplayAdjustments;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
 HSPLandroid/content/res/Resources;->getDisplayMetrics()Landroid/util/DisplayMetrics;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
 HSPLandroid/content/res/Resources;->getDrawable(I)Landroid/graphics/drawable/Drawable;
 HSPLandroid/content/res/Resources;->getDrawable(ILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/content/res/Resources;->getDrawableForDensity(II)Landroid/graphics/drawable/Drawable;
-HSPLandroid/content/res/Resources;->getDrawableForDensity(IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/res/Resources;->getDrawableForDensity(IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLandroid/content/res/Resources;->getDrawableInflater()Landroid/graphics/drawable/DrawableInflater;
 HSPLandroid/content/res/Resources;->getFloat(I)F
-HSPLandroid/content/res/Resources;->getFont(Landroid/util/TypedValue;I)Landroid/graphics/Typeface;
+HSPLandroid/content/res/Resources;->getFont(Landroid/util/TypedValue;I)Landroid/graphics/Typeface;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
 HSPLandroid/content/res/Resources;->getFraction(III)F
 HSPLandroid/content/res/Resources;->getIdentifier(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/content/res/Resources;->getImpl()Landroid/content/res/ResourcesImpl;
@@ -5045,38 +5054,38 @@
 HSPLandroid/content/res/Resources;->getLayout(I)Landroid/content/res/XmlResourceParser;
 HSPLandroid/content/res/Resources;->getLoaders()Ljava/util/List;
 HSPLandroid/content/res/Resources;->getQuantityString(II)Ljava/lang/String;
-HSPLandroid/content/res/Resources;->getQuantityString(II[Ljava/lang/Object;)Ljava/lang/String;
+HSPLandroid/content/res/Resources;->getQuantityString(II[Ljava/lang/Object;)Ljava/lang/String;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Landroid/os/LocaleList;Landroid/os/LocaleList;
 HSPLandroid/content/res/Resources;->getQuantityText(II)Ljava/lang/CharSequence;
-HSPLandroid/content/res/Resources;->getResourceEntryName(I)Ljava/lang/String;
+HSPLandroid/content/res/Resources;->getResourceEntryName(I)Ljava/lang/String;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
 HSPLandroid/content/res/Resources;->getResourceName(I)Ljava/lang/String;
-HSPLandroid/content/res/Resources;->getResourcePackageName(I)Ljava/lang/String;
+HSPLandroid/content/res/Resources;->getResourcePackageName(I)Ljava/lang/String;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
 HSPLandroid/content/res/Resources;->getResourceTypeName(I)Ljava/lang/String;
 HSPLandroid/content/res/Resources;->getSizeConfigurations()[Landroid/content/res/Configuration;
 HSPLandroid/content/res/Resources;->getStateListAnimatorCache()Landroid/content/res/ConfigurationBoundResourceCache;
 HSPLandroid/content/res/Resources;->getString(I)Ljava/lang/String;
-HSPLandroid/content/res/Resources;->getString(I[Ljava/lang/Object;)Ljava/lang/String;
+HSPLandroid/content/res/Resources;->getString(I[Ljava/lang/Object;)Ljava/lang/String;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Landroid/os/LocaleList;Landroid/os/LocaleList;
 HSPLandroid/content/res/Resources;->getStringArray(I)[Ljava/lang/String;
 HSPLandroid/content/res/Resources;->getSystem()Landroid/content/res/Resources;
 HSPLandroid/content/res/Resources;->getText(I)Ljava/lang/CharSequence;
 HSPLandroid/content/res/Resources;->getTextArray(I)[Ljava/lang/CharSequence;
-HSPLandroid/content/res/Resources;->getValue(ILandroid/util/TypedValue;Z)V
+HSPLandroid/content/res/Resources;->getValue(ILandroid/util/TypedValue;Z)V+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
 HSPLandroid/content/res/Resources;->getValueForDensity(IILandroid/util/TypedValue;Z)V
 HSPLandroid/content/res/Resources;->getXml(I)Landroid/content/res/XmlResourceParser;
 HSPLandroid/content/res/Resources;->hasOverrideDisplayAdjustments()Z
 HSPLandroid/content/res/Resources;->lambda$dumpHistory$1(Ljava/util/Map;Landroid/content/res/Resources;)V
 HSPLandroid/content/res/Resources;->lambda$newTheme$0(Ljava/lang/ref/WeakReference;)Z
-HSPLandroid/content/res/Resources;->loadColorStateList(Landroid/util/TypedValue;ILandroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;
+HSPLandroid/content/res/Resources;->loadColorStateList(Landroid/util/TypedValue;ILandroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
 HSPLandroid/content/res/Resources;->loadComplexColor(Landroid/util/TypedValue;ILandroid/content/res/Resources$Theme;)Landroid/content/res/ComplexColor;
-HSPLandroid/content/res/Resources;->loadDrawable(Landroid/util/TypedValue;IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/res/Resources;->loadDrawable(Landroid/util/TypedValue;IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
 HSPLandroid/content/res/Resources;->loadXmlResourceParser(ILjava/lang/String;)Landroid/content/res/XmlResourceParser;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/content/res/Resources;->loadXmlResourceParser(Ljava/lang/String;IILjava/lang/String;)Landroid/content/res/XmlResourceParser;
-HSPLandroid/content/res/Resources;->newTheme()Landroid/content/res/Resources$Theme;
+HSPLandroid/content/res/Resources;->newTheme()Landroid/content/res/Resources$Theme;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/content/res/Resources$Theme;Landroid/content/res/Resources$Theme;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/content/res/Resources;->obtainAttributes(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;
-HSPLandroid/content/res/Resources;->obtainAttributes(Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;
+HSPLandroid/content/res/Resources;->obtainAttributes(Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
 HSPLandroid/content/res/Resources;->obtainTempTypedValue()Landroid/util/TypedValue;
-HSPLandroid/content/res/Resources;->obtainTypedArray(I)Landroid/content/res/TypedArray;
-HSPLandroid/content/res/Resources;->openRawResource(I)Ljava/io/InputStream;
-HSPLandroid/content/res/Resources;->openRawResource(ILandroid/util/TypedValue;)Ljava/io/InputStream;
+HSPLandroid/content/res/Resources;->obtainTypedArray(I)Landroid/content/res/TypedArray;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
+HSPLandroid/content/res/Resources;->openRawResource(I)Ljava/io/InputStream;+]Landroid/content/res/Resources;Landroid/content/res/Resources;
+HSPLandroid/content/res/Resources;->openRawResource(ILandroid/util/TypedValue;)Ljava/io/InputStream;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
 HSPLandroid/content/res/Resources;->openRawResourceFd(I)Landroid/content/res/AssetFileDescriptor;
 HSPLandroid/content/res/Resources;->parseBundleExtra(Ljava/lang/String;Landroid/util/AttributeSet;Landroid/os/Bundle;)V
 HSPLandroid/content/res/Resources;->preloadFonts(I)V
@@ -5085,7 +5094,7 @@
 HSPLandroid/content/res/Resources;->selectDefaultTheme(II)I
 HSPLandroid/content/res/Resources;->selectSystemTheme(IIIIII)I
 HSPLandroid/content/res/Resources;->setCallbacks(Landroid/content/res/Resources$UpdateCallbacks;)V
-HSPLandroid/content/res/Resources;->setImpl(Landroid/content/res/ResourcesImpl;)V
+HSPLandroid/content/res/Resources;->setImpl(Landroid/content/res/ResourcesImpl;)V+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/content/res/Resources;->startPreloading()V
 HSPLandroid/content/res/Resources;->updateConfiguration(Landroid/content/res/Configuration;Landroid/util/DisplayMetrics;)V
 HSPLandroid/content/res/Resources;->updateConfiguration(Landroid/content/res/Configuration;Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;)V
@@ -5110,7 +5119,7 @@
 HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->obtainStyledAttributes(Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;[III)Landroid/content/res/TypedArray;+]Landroid/content/res/Resources$Theme;Landroid/content/res/Resources$Theme;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
 HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->rebase()V
 HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->rebase(Landroid/content/res/AssetManager;)V
-HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->resolveAttribute(ILandroid/util/TypedValue;Z)Z
+HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->resolveAttribute(ILandroid/util/TypedValue;Z)Z+]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
 HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->resolveAttributes(Landroid/content/res/Resources$Theme;[I[I)Landroid/content/res/TypedArray;
 HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->setTo(Landroid/content/res/ResourcesImpl$ThemeImpl;)V
 HSPLandroid/content/res/ResourcesImpl;->-$$Nest$sfgetsThemeRegistry()Llibcore/util/NativeAllocationRegistry;
@@ -5118,43 +5127,43 @@
 HSPLandroid/content/res/ResourcesImpl;->adjustLanguageTag(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/content/res/ResourcesImpl;->attrForQuantityCode(Ljava/lang/String;)I
 HSPLandroid/content/res/ResourcesImpl;->cacheDrawable(Landroid/util/TypedValue;ZLandroid/content/res/DrawableCache;Landroid/content/res/Resources$Theme;ZJLandroid/graphics/drawable/Drawable;)V
-HSPLandroid/content/res/ResourcesImpl;->calcConfigChanges(Landroid/content/res/Configuration;)I
+HSPLandroid/content/res/ResourcesImpl;->calcConfigChanges(Landroid/content/res/Configuration;)I+]Landroid/content/res/CompatibilityInfo;Landroid/content/res/CompatibilityInfo$1;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Landroid/view/DisplayAdjustments;Landroid/view/DisplayAdjustments;]Landroid/os/LocaleList;Landroid/os/LocaleList;
 HSPLandroid/content/res/ResourcesImpl;->decodeImageDrawable(Landroid/content/res/AssetManager$AssetInputStream;Landroid/content/res/Resources;Landroid/util/TypedValue;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/content/res/ResourcesImpl;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLandroid/content/res/ResourcesImpl;->finishPreloading()V
 HSPLandroid/content/res/ResourcesImpl;->flushLayoutCache()V
 HSPLandroid/content/res/ResourcesImpl;->getAnimatorCache()Landroid/content/res/ConfigurationBoundResourceCache;
 HSPLandroid/content/res/ResourcesImpl;->getAssets()Landroid/content/res/AssetManager;
-HSPLandroid/content/res/ResourcesImpl;->getAttributeSetSourceResId(Landroid/util/AttributeSet;)I
-HSPLandroid/content/res/ResourcesImpl;->getColorStateListFromInt(Landroid/util/TypedValue;J)Landroid/content/res/ColorStateList;
-HSPLandroid/content/res/ResourcesImpl;->getCompatibilityInfo()Landroid/content/res/CompatibilityInfo;
+HSPLandroid/content/res/ResourcesImpl;->getAttributeSetSourceResId(Landroid/util/AttributeSet;)I+]Landroid/content/res/XmlBlock$Parser;Landroid/content/res/XmlBlock$Parser;
+HSPLandroid/content/res/ResourcesImpl;->getColorStateListFromInt(Landroid/util/TypedValue;J)Landroid/content/res/ColorStateList;+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Landroid/content/res/ConstantState;Landroid/content/res/ColorStateList$ColorStateListFactory;
+HSPLandroid/content/res/ResourcesImpl;->getCompatibilityInfo()Landroid/content/res/CompatibilityInfo;+]Landroid/view/DisplayAdjustments;Landroid/view/DisplayAdjustments;
 HSPLandroid/content/res/ResourcesImpl;->getConfiguration()Landroid/content/res/Configuration;
 HSPLandroid/content/res/ResourcesImpl;->getDisplayAdjustments()Landroid/view/DisplayAdjustments;
 HSPLandroid/content/res/ResourcesImpl;->getDisplayMetrics()Landroid/util/DisplayMetrics;
 HSPLandroid/content/res/ResourcesImpl;->getIdentifier(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/content/res/ResourcesImpl;->getPluralRule()Landroid/icu/text/PluralRules;
 HSPLandroid/content/res/ResourcesImpl;->getQuantityText(II)Ljava/lang/CharSequence;
-HSPLandroid/content/res/ResourcesImpl;->getResourceEntryName(I)Ljava/lang/String;
+HSPLandroid/content/res/ResourcesImpl;->getResourceEntryName(I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
 HSPLandroid/content/res/ResourcesImpl;->getResourceName(I)Ljava/lang/String;
-HSPLandroid/content/res/ResourcesImpl;->getResourcePackageName(I)Ljava/lang/String;
+HSPLandroid/content/res/ResourcesImpl;->getResourcePackageName(I)Ljava/lang/String;+]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
 HSPLandroid/content/res/ResourcesImpl;->getResourceTypeName(I)Ljava/lang/String;
 HSPLandroid/content/res/ResourcesImpl;->getSizeConfigurations()[Landroid/content/res/Configuration;
 HSPLandroid/content/res/ResourcesImpl;->getStateListAnimatorCache()Landroid/content/res/ConfigurationBoundResourceCache;
-HSPLandroid/content/res/ResourcesImpl;->getValue(ILandroid/util/TypedValue;Z)V
+HSPLandroid/content/res/ResourcesImpl;->getValue(ILandroid/util/TypedValue;Z)V+]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
 HSPLandroid/content/res/ResourcesImpl;->getValueForDensity(IILandroid/util/TypedValue;Z)V
 HSPLandroid/content/res/ResourcesImpl;->lambda$decodeImageDrawable$1(Landroid/graphics/ImageDecoder;Landroid/graphics/ImageDecoder$ImageInfo;Landroid/graphics/ImageDecoder$Source;)V
 HSPLandroid/content/res/ResourcesImpl;->lambda$new$0()Landroid/content/res/ResourcesImpl$LookupStack;
 HSPLandroid/content/res/ResourcesImpl;->loadColorStateList(Landroid/content/res/Resources;Landroid/util/TypedValue;ILandroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;
 HSPLandroid/content/res/ResourcesImpl;->loadComplexColor(Landroid/content/res/Resources;Landroid/util/TypedValue;ILandroid/content/res/Resources$Theme;)Landroid/content/res/ComplexColor;
-HSPLandroid/content/res/ResourcesImpl;->loadComplexColorForCookie(Landroid/content/res/Resources;Landroid/util/TypedValue;ILandroid/content/res/Resources$Theme;)Landroid/content/res/ComplexColor;
-HSPLandroid/content/res/ResourcesImpl;->loadComplexColorFromName(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/TypedValue;I)Landroid/content/res/ComplexColor;
-HSPLandroid/content/res/ResourcesImpl;->loadDrawable(Landroid/content/res/Resources;Landroid/util/TypedValue;IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
-HSPLandroid/content/res/ResourcesImpl;->loadDrawableForCookie(Landroid/content/res/Resources;Landroid/util/TypedValue;II)Landroid/graphics/drawable/Drawable;
-HSPLandroid/content/res/ResourcesImpl;->loadFont(Landroid/content/res/Resources;Landroid/util/TypedValue;I)Landroid/graphics/Typeface;
+HSPLandroid/content/res/ResourcesImpl;->loadComplexColorForCookie(Landroid/content/res/Resources;Landroid/util/TypedValue;ILandroid/content/res/Resources$Theme;)Landroid/content/res/ComplexColor;+]Ljava/lang/String;Ljava/lang/String;]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/content/res/XmlResourceParser;Landroid/content/res/XmlBlock$Parser;
+HSPLandroid/content/res/ResourcesImpl;->loadComplexColorFromName(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/TypedValue;I)Landroid/content/res/ComplexColor;+]Landroid/content/res/ComplexColor;Landroid/content/res/ColorStateList;,Landroid/content/res/GradientColor;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Landroid/content/res/ConfigurationBoundResourceCache;Landroid/content/res/ConfigurationBoundResourceCache;]Landroid/content/res/ConstantState;Landroid/content/res/ColorStateList$ColorStateListFactory;
+HSPLandroid/content/res/ResourcesImpl;->loadDrawable(Landroid/content/res/Resources;Landroid/util/TypedValue;IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;+]Landroid/content/res/DrawableCache;Landroid/content/res/DrawableCache;]Landroid/graphics/drawable/Drawable$ConstantState;megamorphic_types]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/content/res/ResourcesImpl;->loadDrawableForCookie(Landroid/content/res/Resources;Landroid/util/TypedValue;II)Landroid/graphics/drawable/Drawable;+]Ljava/lang/String;Ljava/lang/String;]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/content/res/ResourcesImpl$LookupStack;Landroid/content/res/ResourcesImpl$LookupStack;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLandroid/content/res/ResourcesImpl;->loadFont(Landroid/content/res/Resources;Landroid/util/TypedValue;I)Landroid/graphics/Typeface;+]Ljava/lang/String;Ljava/lang/String;]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/graphics/Typeface$Builder;Landroid/graphics/Typeface$Builder;
 HSPLandroid/content/res/ResourcesImpl;->loadXmlDrawable(Landroid/content/res/Resources;Landroid/util/TypedValue;IILjava/lang/String;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/content/res/ResourcesImpl;->loadXmlResourceParser(Ljava/lang/String;IILjava/lang/String;)Landroid/content/res/XmlResourceParser;+]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;]Landroid/content/res/XmlBlock;Landroid/content/res/XmlBlock;
 HSPLandroid/content/res/ResourcesImpl;->newThemeImpl()Landroid/content/res/ResourcesImpl$ThemeImpl;
-HSPLandroid/content/res/ResourcesImpl;->openRawResource(ILandroid/util/TypedValue;)Ljava/io/InputStream;
+HSPLandroid/content/res/ResourcesImpl;->openRawResource(ILandroid/util/TypedValue;)Ljava/io/InputStream;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/content/res/ResourcesImpl;->openRawResourceFd(ILandroid/util/TypedValue;)Landroid/content/res/AssetFileDescriptor;
 HSPLandroid/content/res/ResourcesImpl;->startPreloading()V
 HSPLandroid/content/res/ResourcesImpl;->updateConfiguration(Landroid/content/res/Configuration;Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;)V+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/content/res/CompatibilityInfo;Landroid/content/res/CompatibilityInfo$1;]Ljava/util/Locale;Ljava/util/Locale;]Landroid/content/res/DrawableCache;Landroid/content/res/DrawableCache;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Landroid/view/DisplayAdjustments;Landroid/view/DisplayAdjustments;]Landroid/os/LocaleList;Landroid/os/LocaleList;]Landroid/util/DisplayMetrics;Landroid/util/DisplayMetrics;]Landroid/content/res/ConfigurationBoundResourceCache;Landroid/content/res/ConfigurationBoundResourceCache;
@@ -5170,42 +5179,42 @@
 HSPLandroid/content/res/StringBlock;->get(I)Ljava/lang/CharSequence;
 HSPLandroid/content/res/StringBlock;->getSequence(I)Ljava/lang/CharSequence;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLandroid/content/res/ThemedResourceCache;-><init>()V
-HSPLandroid/content/res/ThemedResourceCache;->get(JLandroid/content/res/Resources$Theme;)Ljava/lang/Object;
-HSPLandroid/content/res/ThemedResourceCache;->getThemedLocked(Landroid/content/res/Resources$Theme;Z)Landroid/util/LongSparseArray;
+HSPLandroid/content/res/ThemedResourceCache;->get(JLandroid/content/res/Resources$Theme;)Ljava/lang/Object;+]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
+HSPLandroid/content/res/ThemedResourceCache;->getThemedLocked(Landroid/content/res/Resources$Theme;Z)Landroid/util/LongSparseArray;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/res/Resources$Theme;Landroid/content/res/Resources$Theme;]Landroid/content/res/Resources$ThemeKey;Landroid/content/res/Resources$ThemeKey;
 HSPLandroid/content/res/ThemedResourceCache;->getUnthemedLocked(Z)Landroid/util/LongSparseArray;
 HSPLandroid/content/res/ThemedResourceCache;->onConfigurationChange(I)V
-HSPLandroid/content/res/ThemedResourceCache;->prune(I)Z
+HSPLandroid/content/res/ThemedResourceCache;->prune(I)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/content/res/ThemedResourceCache;->pruneEntriesLocked(Landroid/util/LongSparseArray;I)Z
 HSPLandroid/content/res/ThemedResourceCache;->put(JLandroid/content/res/Resources$Theme;Ljava/lang/Object;)V
 HSPLandroid/content/res/ThemedResourceCache;->put(JLandroid/content/res/Resources$Theme;Ljava/lang/Object;Z)V
-HSPLandroid/content/res/TypedArray;-><init>(Landroid/content/res/Resources;)V
+HSPLandroid/content/res/TypedArray;-><init>(Landroid/content/res/Resources;)V+]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLandroid/content/res/TypedArray;->extractThemeAttrs()[I
-HSPLandroid/content/res/TypedArray;->extractThemeAttrs([I)[I
+HSPLandroid/content/res/TypedArray;->extractThemeAttrs([I)[I+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/content/res/TypedArray;->getBoolean(IZ)Z
-HSPLandroid/content/res/TypedArray;->getChangingConfigurations()I
-HSPLandroid/content/res/TypedArray;->getColor(II)I
-HSPLandroid/content/res/TypedArray;->getColorStateList(I)Landroid/content/res/ColorStateList;
+HSPLandroid/content/res/TypedArray;->getChangingConfigurations()I+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLandroid/content/res/TypedArray;->getColor(II)I+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Landroid/content/res/Resources;Landroid/content/res/Resources;
+HSPLandroid/content/res/TypedArray;->getColorStateList(I)Landroid/content/res/ColorStateList;+]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLandroid/content/res/TypedArray;->getComplexColor(I)Landroid/content/res/ComplexColor;
 HSPLandroid/content/res/TypedArray;->getDimension(IF)F
 HSPLandroid/content/res/TypedArray;->getDimensionPixelOffset(II)I
 HSPLandroid/content/res/TypedArray;->getDimensionPixelSize(II)I
-HSPLandroid/content/res/TypedArray;->getDrawable(I)Landroid/graphics/drawable/Drawable;
-HSPLandroid/content/res/TypedArray;->getDrawableForDensity(II)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/res/TypedArray;->getDrawable(I)Landroid/graphics/drawable/Drawable;+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLandroid/content/res/TypedArray;->getDrawableForDensity(II)Landroid/graphics/drawable/Drawable;+]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLandroid/content/res/TypedArray;->getFloat(IF)F
-HSPLandroid/content/res/TypedArray;->getFont(I)Landroid/graphics/Typeface;
+HSPLandroid/content/res/TypedArray;->getFont(I)Landroid/graphics/Typeface;+]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLandroid/content/res/TypedArray;->getFraction(IIIF)F
 HSPLandroid/content/res/TypedArray;->getIndex(I)I
 HSPLandroid/content/res/TypedArray;->getIndexCount()I
 HSPLandroid/content/res/TypedArray;->getInt(II)I
 HSPLandroid/content/res/TypedArray;->getInteger(II)I
 HSPLandroid/content/res/TypedArray;->getLayoutDimension(II)I
-HSPLandroid/content/res/TypedArray;->getLayoutDimension(ILjava/lang/String;)I
-HSPLandroid/content/res/TypedArray;->getNonConfigurationString(II)Ljava/lang/String;
+HSPLandroid/content/res/TypedArray;->getLayoutDimension(ILjava/lang/String;)I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLandroid/content/res/TypedArray;->getNonConfigurationString(II)Ljava/lang/String;+]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/content/res/TypedArray;->getNonResourceString(I)Ljava/lang/String;
 HSPLandroid/content/res/TypedArray;->getPositionDescription()Ljava/lang/String;
 HSPLandroid/content/res/TypedArray;->getResourceId(II)I
 HSPLandroid/content/res/TypedArray;->getResources()Landroid/content/res/Resources;
-HSPLandroid/content/res/TypedArray;->getString(I)Ljava/lang/String;
+HSPLandroid/content/res/TypedArray;->getString(I)Ljava/lang/String;+]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/content/res/TypedArray;->getText(I)Ljava/lang/CharSequence;
 HSPLandroid/content/res/TypedArray;->getTextArray(I)[Ljava/lang/CharSequence;
 HSPLandroid/content/res/TypedArray;->getType(I)I
@@ -5214,7 +5223,7 @@
 HSPLandroid/content/res/TypedArray;->hasValue(I)Z
 HSPLandroid/content/res/TypedArray;->hasValueOrEmpty(I)Z
 HSPLandroid/content/res/TypedArray;->length()I
-HSPLandroid/content/res/TypedArray;->loadStringValueAt(I)Ljava/lang/CharSequence;
+HSPLandroid/content/res/TypedArray;->loadStringValueAt(I)Ljava/lang/CharSequence;+]Landroid/content/res/XmlBlock$Parser;Landroid/content/res/XmlBlock$Parser;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
 HSPLandroid/content/res/TypedArray;->obtain(Landroid/content/res/Resources;I)Landroid/content/res/TypedArray;+]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/util/Pools$SynchronizedPool;Landroid/util/Pools$SynchronizedPool;
 HSPLandroid/content/res/TypedArray;->peekValue(I)Landroid/util/TypedValue;
 HSPLandroid/content/res/TypedArray;->recycle()V+]Landroid/util/Pools$SynchronizedPool;Landroid/util/Pools$SynchronizedPool;
@@ -5231,14 +5240,14 @@
 HSPLandroid/content/res/XmlBlock$Parser;->getAttributeNameResource(I)I
 HSPLandroid/content/res/XmlBlock$Parser;->getAttributeResourceValue(II)I
 HSPLandroid/content/res/XmlBlock$Parser;->getAttributeResourceValue(Ljava/lang/String;Ljava/lang/String;I)I
-HSPLandroid/content/res/XmlBlock$Parser;->getAttributeValue(I)Ljava/lang/String;
+HSPLandroid/content/res/XmlBlock$Parser;->getAttributeValue(I)Ljava/lang/String;+]Landroid/content/res/StringBlock;Landroid/content/res/StringBlock;
 HSPLandroid/content/res/XmlBlock$Parser;->getAttributeValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/content/res/XmlBlock$Parser;->getClassAttribute()Ljava/lang/String;
 HSPLandroid/content/res/XmlBlock$Parser;->getDepth()I
 HSPLandroid/content/res/XmlBlock$Parser;->getEventType()I
 HSPLandroid/content/res/XmlBlock$Parser;->getLineNumber()I
 HSPLandroid/content/res/XmlBlock$Parser;->getName()Ljava/lang/String;+]Landroid/content/res/StringBlock;Landroid/content/res/StringBlock;
-HSPLandroid/content/res/XmlBlock$Parser;->getPooledString(I)Ljava/lang/CharSequence;
+HSPLandroid/content/res/XmlBlock$Parser;->getPooledString(I)Ljava/lang/CharSequence;+]Landroid/content/res/StringBlock;Landroid/content/res/StringBlock;
 HSPLandroid/content/res/XmlBlock$Parser;->getPositionDescription()Ljava/lang/String;
 HSPLandroid/content/res/XmlBlock$Parser;->getSequenceString(Ljava/lang/CharSequence;)Ljava/lang/String;+]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/content/res/XmlBlock$Parser;->getSourceResId()I
@@ -5246,7 +5255,7 @@
 HSPLandroid/content/res/XmlBlock$Parser;->isEmptyElementTag()Z
 HSPLandroid/content/res/XmlBlock$Parser;->next()I+]Landroid/content/res/XmlBlock$Parser;Landroid/content/res/XmlBlock$Parser;
 HSPLandroid/content/res/XmlBlock$Parser;->nextTag()I+]Landroid/content/res/XmlBlock$Parser;Landroid/content/res/XmlBlock$Parser;
-HSPLandroid/content/res/XmlBlock$Parser;->nextText()Ljava/lang/String;
+HSPLandroid/content/res/XmlBlock$Parser;->nextText()Ljava/lang/String;+]Landroid/content/res/XmlBlock$Parser;Landroid/content/res/XmlBlock$Parser;
 HSPLandroid/content/res/XmlBlock$Parser;->require(ILjava/lang/String;Ljava/lang/String;)V
 HSPLandroid/content/res/XmlBlock;->-$$Nest$fgetmOpenCount(Landroid/content/res/XmlBlock;)I
 HSPLandroid/content/res/XmlBlock;->-$$Nest$fputmOpenCount(Landroid/content/res/XmlBlock;I)V
@@ -5259,7 +5268,7 @@
 HSPLandroid/content/res/XmlBlock;->-$$Nest$smnativeGetClassAttribute(J)I
 HSPLandroid/content/res/XmlBlock;-><init>(Landroid/content/res/AssetManager;J)V
 HSPLandroid/content/res/XmlBlock;->close()V
-HSPLandroid/content/res/XmlBlock;->decOpenCountLocked()V
+HSPLandroid/content/res/XmlBlock;->decOpenCountLocked()V+]Ljava/lang/Object;Landroid/content/res/XmlBlock;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
 HSPLandroid/content/res/XmlBlock;->finalize()V
 HSPLandroid/content/res/XmlBlock;->newParser()Landroid/content/res/XmlResourceParser;
 HSPLandroid/content/res/XmlBlock;->newParser(I)Landroid/content/res/XmlResourceParser;
@@ -5270,26 +5279,26 @@
 HSPLandroid/database/AbstractCursor$SelfContentObserver;-><init>(Landroid/database/AbstractCursor;)V
 HSPLandroid/database/AbstractCursor$SelfContentObserver;->onChange(Z)V
 HSPLandroid/database/AbstractCursor;-><init>()V+]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
-HSPLandroid/database/AbstractCursor;->checkPosition()V+]Landroid/database/AbstractCursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;
+HSPLandroid/database/AbstractCursor;->checkPosition()V+]Landroid/database/AbstractCursor;missing_types
 HSPLandroid/database/AbstractCursor;->close()V+]Landroid/database/AbstractCursor;Landroid/database/MatrixCursor;,Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;]Landroid/database/ContentObservable;Landroid/database/ContentObservable;
 HSPLandroid/database/AbstractCursor;->fillWindow(ILandroid/database/CursorWindow;)V
 HSPLandroid/database/AbstractCursor;->finalize()V+]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
-HSPLandroid/database/AbstractCursor;->getColumnCount()I
-HSPLandroid/database/AbstractCursor;->getColumnIndex(Ljava/lang/String;)I
+HSPLandroid/database/AbstractCursor;->getColumnCount()I+]Landroid/database/AbstractCursor;Landroid/database/sqlite/SQLiteCursor;
+HSPLandroid/database/AbstractCursor;->getColumnIndex(Ljava/lang/String;)I+]Ljava/lang/String;Ljava/lang/String;]Landroid/database/AbstractCursor;Landroid/database/BulkCursorToCursorAdaptor;,Landroid/database/MatrixCursor;
 HSPLandroid/database/AbstractCursor;->getColumnIndexOrThrow(Ljava/lang/String;)I
 HSPLandroid/database/AbstractCursor;->getColumnName(I)Ljava/lang/String;
 HSPLandroid/database/AbstractCursor;->getExtras()Landroid/os/Bundle;
 HSPLandroid/database/AbstractCursor;->getPosition()I
 HSPLandroid/database/AbstractCursor;->getWantsAllOnMoveCalls()Z
 HSPLandroid/database/AbstractCursor;->getWindow()Landroid/database/CursorWindow;
-HSPLandroid/database/AbstractCursor;->isAfterLast()Z
+HSPLandroid/database/AbstractCursor;->isAfterLast()Z+]Landroid/database/AbstractCursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;
 HSPLandroid/database/AbstractCursor;->isClosed()Z
 HSPLandroid/database/AbstractCursor;->isLast()Z
 HSPLandroid/database/AbstractCursor;->move(I)Z
-HSPLandroid/database/AbstractCursor;->moveToFirst()Z+]Landroid/database/AbstractCursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;
+HSPLandroid/database/AbstractCursor;->moveToFirst()Z+]Landroid/database/AbstractCursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;,Landroid/database/MatrixCursor;
 HSPLandroid/database/AbstractCursor;->moveToLast()Z
 HSPLandroid/database/AbstractCursor;->moveToNext()Z+]Landroid/database/AbstractCursor;Landroid/database/MatrixCursor;,Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;
-HSPLandroid/database/AbstractCursor;->moveToPosition(I)Z+]Landroid/database/AbstractCursor;Landroid/database/MatrixCursor;,Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;
+HSPLandroid/database/AbstractCursor;->moveToPosition(I)Z+]Landroid/database/AbstractCursor;missing_types
 HSPLandroid/database/AbstractCursor;->onChange(Z)V
 HSPLandroid/database/AbstractCursor;->onDeactivateOrClose()V+]Landroid/database/DataSetObservable;Landroid/database/DataSetObservable;
 HSPLandroid/database/AbstractCursor;->onMove(II)Z
@@ -5303,37 +5312,37 @@
 HSPLandroid/database/AbstractWindowedCursor;->checkPosition()V
 HSPLandroid/database/AbstractWindowedCursor;->clearOrCreateWindow(Ljava/lang/String;)V+]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
 HSPLandroid/database/AbstractWindowedCursor;->closeWindow()V+]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
-HSPLandroid/database/AbstractWindowedCursor;->getBlob(I)[B+]Landroid/database/AbstractWindowedCursor;Landroid/database/sqlite/SQLiteCursor;]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
-HSPLandroid/database/AbstractWindowedCursor;->getDouble(I)D
+HSPLandroid/database/AbstractWindowedCursor;->getBlob(I)[B+]Landroid/database/AbstractWindowedCursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
+HSPLandroid/database/AbstractWindowedCursor;->getDouble(I)D+]Landroid/database/AbstractWindowedCursor;Landroid/database/sqlite/SQLiteCursor;]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
 HSPLandroid/database/AbstractWindowedCursor;->getFloat(I)F
-HSPLandroid/database/AbstractWindowedCursor;->getInt(I)I+]Landroid/database/AbstractWindowedCursor;Landroid/database/sqlite/SQLiteCursor;]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
-HSPLandroid/database/AbstractWindowedCursor;->getLong(I)J+]Landroid/database/AbstractWindowedCursor;Landroid/database/sqlite/SQLiteCursor;]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
+HSPLandroid/database/AbstractWindowedCursor;->getInt(I)I+]Landroid/database/AbstractWindowedCursor;missing_types]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
+HSPLandroid/database/AbstractWindowedCursor;->getLong(I)J+]Landroid/database/AbstractWindowedCursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
 HSPLandroid/database/AbstractWindowedCursor;->getString(I)Ljava/lang/String;+]Landroid/database/AbstractWindowedCursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
-HSPLandroid/database/AbstractWindowedCursor;->getType(I)I
+HSPLandroid/database/AbstractWindowedCursor;->getType(I)I+]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
 HSPLandroid/database/AbstractWindowedCursor;->getWindow()Landroid/database/CursorWindow;
 HSPLandroid/database/AbstractWindowedCursor;->hasWindow()Z
-HSPLandroid/database/AbstractWindowedCursor;->isNull(I)Z+]Landroid/database/AbstractWindowedCursor;Landroid/database/sqlite/SQLiteCursor;]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
+HSPLandroid/database/AbstractWindowedCursor;->isNull(I)Z+]Landroid/database/AbstractWindowedCursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
 HSPLandroid/database/AbstractWindowedCursor;->onDeactivateOrClose()V+]Landroid/database/AbstractWindowedCursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;
 HSPLandroid/database/AbstractWindowedCursor;->setWindow(Landroid/database/CursorWindow;)V
 HSPLandroid/database/BulkCursorDescriptor$1;->createFromParcel(Landroid/os/Parcel;)Landroid/database/BulkCursorDescriptor;
 HSPLandroid/database/BulkCursorDescriptor$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/database/BulkCursorDescriptor;-><init>()V
-HSPLandroid/database/BulkCursorDescriptor;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/database/BulkCursorDescriptor;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/database/CursorWindow$1;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/database/BulkCursorDescriptor;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/database/BulkCursorNative;-><init>()V
 HSPLandroid/database/BulkCursorNative;->asBinder()Landroid/os/IBinder;
-HSPLandroid/database/BulkCursorNative;->asInterface(Landroid/os/IBinder;)Landroid/database/IBulkCursor;
+HSPLandroid/database/BulkCursorNative;->asInterface(Landroid/os/IBinder;)Landroid/database/IBulkCursor;+]Landroid/os/IBinder;Landroid/os/BinderProxy;
 HSPLandroid/database/BulkCursorNative;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/database/BulkCursorProxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/database/BulkCursorProxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/database/BulkCursorProxy;->close()V
-HSPLandroid/database/BulkCursorProxy;->getWindow(I)Landroid/database/CursorWindow;
+HSPLandroid/database/BulkCursorProxy;->close()V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/database/BulkCursorProxy;->getWindow(I)Landroid/database/CursorWindow;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/database/BulkCursorToCursorAdaptor;-><init>()V
-HSPLandroid/database/BulkCursorToCursorAdaptor;->close()V
+HSPLandroid/database/BulkCursorToCursorAdaptor;->close()V+]Landroid/database/IBulkCursor;Landroid/database/BulkCursorProxy;
 HSPLandroid/database/BulkCursorToCursorAdaptor;->getColumnNames()[Ljava/lang/String;
 HSPLandroid/database/BulkCursorToCursorAdaptor;->getCount()I
 HSPLandroid/database/BulkCursorToCursorAdaptor;->getObserver()Landroid/database/IContentObserver;
-HSPLandroid/database/BulkCursorToCursorAdaptor;->initialize(Landroid/database/BulkCursorDescriptor;)V
+HSPLandroid/database/BulkCursorToCursorAdaptor;->initialize(Landroid/database/BulkCursorDescriptor;)V+]Landroid/database/BulkCursorToCursorAdaptor;Landroid/database/BulkCursorToCursorAdaptor;
 HSPLandroid/database/BulkCursorToCursorAdaptor;->onMove(II)Z+]Landroid/database/IBulkCursor;Landroid/database/BulkCursorProxy;]Landroid/database/CursorWindow;Landroid/database/CursorWindow;]Landroid/database/BulkCursorToCursorAdaptor;Landroid/database/BulkCursorToCursorAdaptor;
 HSPLandroid/database/BulkCursorToCursorAdaptor;->throwIfCursorIsClosed()V
 HSPLandroid/database/ContentObservable;-><init>()V
@@ -5371,16 +5380,16 @@
 HSPLandroid/database/CursorWindow$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/database/CursorWindow$1;->newArray(I)[Landroid/database/CursorWindow;
 HSPLandroid/database/CursorWindow$1;->newArray(I)[Ljava/lang/Object;
-HSPLandroid/database/CursorWindow;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/database/CursorWindow;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
 HSPLandroid/database/CursorWindow;-><init>(Ljava/lang/String;)V
 HSPLandroid/database/CursorWindow;-><init>(Ljava/lang/String;J)V+]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
-HSPLandroid/database/CursorWindow;->allocRow()Z
+HSPLandroid/database/CursorWindow;->allocRow()Z+]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
 HSPLandroid/database/CursorWindow;->clear()V
 HSPLandroid/database/CursorWindow;->dispose()V+]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
 HSPLandroid/database/CursorWindow;->finalize()V+]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
 HSPLandroid/database/CursorWindow;->getBlob(II)[B+]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
 HSPLandroid/database/CursorWindow;->getCursorWindowSize()I
-HSPLandroid/database/CursorWindow;->getDouble(II)D
+HSPLandroid/database/CursorWindow;->getDouble(II)D+]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
 HSPLandroid/database/CursorWindow;->getFloat(II)F
 HSPLandroid/database/CursorWindow;->getInt(II)I+]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
 HSPLandroid/database/CursorWindow;->getLong(II)J+]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
@@ -5397,35 +5406,35 @@
 HSPLandroid/database/CursorWindow;->setStartPosition(I)V
 HSPLandroid/database/CursorWindow;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/database/CursorWrapper;-><init>(Landroid/database/Cursor;)V
-HSPLandroid/database/CursorWrapper;->close()V
-HSPLandroid/database/CursorWrapper;->getBlob(I)[B
-HSPLandroid/database/CursorWrapper;->getColumnCount()I
-HSPLandroid/database/CursorWrapper;->getColumnIndex(Ljava/lang/String;)I
-HSPLandroid/database/CursorWrapper;->getColumnIndexOrThrow(Ljava/lang/String;)I
+HSPLandroid/database/CursorWrapper;->close()V+]Landroid/database/Cursor;missing_types
+HSPLandroid/database/CursorWrapper;->getBlob(I)[B+]Landroid/database/Cursor;missing_types
+HSPLandroid/database/CursorWrapper;->getColumnCount()I+]Landroid/database/Cursor;missing_types
+HSPLandroid/database/CursorWrapper;->getColumnIndex(Ljava/lang/String;)I+]Landroid/database/Cursor;Landroid/database/BulkCursorToCursorAdaptor;
+HSPLandroid/database/CursorWrapper;->getColumnIndexOrThrow(Ljava/lang/String;)I+]Landroid/database/Cursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/content/ContentProviderClient$CursorWrapperInner;,Landroid/database/BulkCursorToCursorAdaptor;
 HSPLandroid/database/CursorWrapper;->getColumnName(I)Ljava/lang/String;
 HSPLandroid/database/CursorWrapper;->getColumnNames()[Ljava/lang/String;
-HSPLandroid/database/CursorWrapper;->getCount()I
+HSPLandroid/database/CursorWrapper;->getCount()I+]Landroid/database/Cursor;missing_types
 HSPLandroid/database/CursorWrapper;->getExtras()Landroid/os/Bundle;
-HSPLandroid/database/CursorWrapper;->getInt(I)I
-HSPLandroid/database/CursorWrapper;->getLong(I)J
-HSPLandroid/database/CursorWrapper;->getPosition()I
-HSPLandroid/database/CursorWrapper;->getString(I)Ljava/lang/String;
+HSPLandroid/database/CursorWrapper;->getInt(I)I+]Landroid/database/Cursor;missing_types
+HSPLandroid/database/CursorWrapper;->getLong(I)J+]Landroid/database/Cursor;missing_types
+HSPLandroid/database/CursorWrapper;->getPosition()I+]Landroid/database/Cursor;missing_types
+HSPLandroid/database/CursorWrapper;->getString(I)Ljava/lang/String;+]Landroid/database/Cursor;missing_types
 HSPLandroid/database/CursorWrapper;->getType(I)I
 HSPLandroid/database/CursorWrapper;->getWrappedCursor()Landroid/database/Cursor;
-HSPLandroid/database/CursorWrapper;->isAfterLast()Z
+HSPLandroid/database/CursorWrapper;->isAfterLast()Z+]Landroid/database/Cursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/content/ContentProviderClient$CursorWrapperInner;,Landroid/database/BulkCursorToCursorAdaptor;
 HSPLandroid/database/CursorWrapper;->isClosed()Z
 HSPLandroid/database/CursorWrapper;->isLast()Z
-HSPLandroid/database/CursorWrapper;->isNull(I)Z
+HSPLandroid/database/CursorWrapper;->isNull(I)Z+]Landroid/database/Cursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;
 HSPLandroid/database/CursorWrapper;->moveToFirst()Z
 HSPLandroid/database/CursorWrapper;->moveToLast()Z
-HSPLandroid/database/CursorWrapper;->moveToNext()Z
+HSPLandroid/database/CursorWrapper;->moveToNext()Z+]Landroid/database/Cursor;missing_types
 HSPLandroid/database/CursorWrapper;->moveToPosition(I)Z
 HSPLandroid/database/CursorWrapper;->registerContentObserver(Landroid/database/ContentObserver;)V
 HSPLandroid/database/DataSetObservable;-><init>()V
 HSPLandroid/database/DataSetObservable;->notifyChanged()V
 HSPLandroid/database/DataSetObservable;->notifyInvalidated()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/database/DataSetObserver;-><init>()V
-HSPLandroid/database/DatabaseUtils;->appendEscapedSQLString(Ljava/lang/StringBuilder;Ljava/lang/String;)V
+HSPLandroid/database/DatabaseUtils;->appendEscapedSQLString(Ljava/lang/StringBuilder;Ljava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/database/DatabaseUtils;->cursorFillWindow(Landroid/database/Cursor;ILandroid/database/CursorWindow;)V+]Landroid/database/CursorWindow;Landroid/database/CursorWindow;]Landroid/database/Cursor;Landroid/database/MatrixCursor;
 HSPLandroid/database/DatabaseUtils;->getSqlStatementType(Ljava/lang/String;)I+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/database/DatabaseUtils;->getTypeOfObject(Ljava/lang/Object;)I
@@ -5437,7 +5446,7 @@
 HSPLandroid/database/DatabaseUtils;->readExceptionFromParcel(Landroid/os/Parcel;Ljava/lang/String;I)V
 HSPLandroid/database/DatabaseUtils;->readExceptionWithFileNotFoundExceptionFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/database/DatabaseUtils;->readExceptionWithOperationApplicationExceptionFromParcel(Landroid/os/Parcel;)V
-HSPLandroid/database/DatabaseUtils;->sqlEscapeString(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/database/DatabaseUtils;->sqlEscapeString(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/database/DatabaseUtils;->stringForQuery(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/database/DatabaseUtils;->stringForQuery(Landroid/database/sqlite/SQLiteStatement;[Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/database/DatabaseUtils;->writeExceptionToParcel(Landroid/os/Parcel;Ljava/lang/Exception;)V
@@ -5448,7 +5457,7 @@
 HSPLandroid/database/IContentObserver$Stub;-><init>()V
 HSPLandroid/database/IContentObserver$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/database/IContentObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/database/IContentObserver;
-HSPLandroid/database/IContentObserver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/database/IContentObserver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z+]Landroid/database/IContentObserver$Stub;Landroid/database/ContentObserver$Transport;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/database/MatrixCursor$RowBuilder;->add(Ljava/lang/Object;)Landroid/database/MatrixCursor$RowBuilder;
 HSPLandroid/database/MatrixCursor$RowBuilder;->add(Ljava/lang/String;Ljava/lang/Object;)Landroid/database/MatrixCursor$RowBuilder;
 HSPLandroid/database/MatrixCursor;-><init>([Ljava/lang/String;)V
@@ -5486,11 +5495,11 @@
 HSPLandroid/database/sqlite/SQLiteCompatibilityWalFlags;->isLegacyCompatibilityWalEnabled()Z
 HSPLandroid/database/sqlite/SQLiteConnection$Operation;-><init>()V
 HSPLandroid/database/sqlite/SQLiteConnection$Operation;-><init>(Landroid/database/sqlite/SQLiteConnection$Operation-IA;)V
-HSPLandroid/database/sqlite/SQLiteConnection$Operation;->describe(Ljava/lang/StringBuilder;Z)V
+HSPLandroid/database/sqlite/SQLiteConnection$Operation;->describe(Ljava/lang/StringBuilder;Z)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/database/sqlite/SQLiteConnection$Operation;->getTraceMethodName()Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;-><init>(Landroid/database/sqlite/SQLiteConnectionPool;)V
 HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->beginOperation(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)I+]Landroid/database/sqlite/SQLiteConnectionPool;Landroid/database/sqlite/SQLiteConnectionPool;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->dump(Landroid/util/Printer;)V
+HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->dump(Landroid/util/Printer;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/Printer;Landroid/util/PrefixPrinter;]Ljava/text/SimpleDateFormat;Ljava/text/SimpleDateFormat;]Landroid/database/sqlite/SQLiteConnection$Operation;Landroid/database/sqlite/SQLiteConnection$Operation;
 HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->endOperation(I)V
 HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->endOperationDeferLog(I)Z
 HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->endOperationDeferLogLocked(I)Z+]Landroid/database/sqlite/SQLiteConnectionPool;Landroid/database/sqlite/SQLiteConnectionPool;
@@ -5508,7 +5517,7 @@
 HSPLandroid/database/sqlite/SQLiteConnection;->acquirePreparedStatement(Ljava/lang/String;)Landroid/database/sqlite/SQLiteConnection$PreparedStatement;+]Landroid/database/sqlite/SQLiteConnection$PreparedStatementCache;Landroid/database/sqlite/SQLiteConnection$PreparedStatementCache;
 HSPLandroid/database/sqlite/SQLiteConnection;->applyBlockGuardPolicy(Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V+]Landroid/database/sqlite/SQLiteDatabaseConfiguration;Landroid/database/sqlite/SQLiteDatabaseConfiguration;]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;,Landroid/os/StrictMode$AndroidBlockGuardPolicy;
 HSPLandroid/database/sqlite/SQLiteConnection;->attachCancellationSignal(Landroid/os/CancellationSignal;)V+]Landroid/os/CancellationSignal;Landroid/os/CancellationSignal;
-HSPLandroid/database/sqlite/SQLiteConnection;->bindArguments(Landroid/database/sqlite/SQLiteConnection$PreparedStatement;[Ljava/lang/Object;)V+]Ljava/lang/Object;Ljava/lang/String;]Ljava/lang/Number;Ljava/lang/Integer;,Ljava/lang/Long;,Ljava/lang/Float;,Ljava/lang/Double;]Ljava/lang/Boolean;Ljava/lang/Boolean;
+HSPLandroid/database/sqlite/SQLiteConnection;->bindArguments(Landroid/database/sqlite/SQLiteConnection$PreparedStatement;[Ljava/lang/Object;)V+]Ljava/lang/Object;Ljava/lang/String;]Ljava/lang/Number;Ljava/lang/Integer;,Ljava/lang/Long;,Ljava/lang/Double;,Ljava/lang/Float;]Ljava/lang/Boolean;Ljava/lang/Boolean;
 HSPLandroid/database/sqlite/SQLiteConnection;->canonicalizeSyncMode(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteConnection;->checkDatabaseWiped()V
 HSPLandroid/database/sqlite/SQLiteConnection;->close()V
@@ -5516,10 +5525,10 @@
 HSPLandroid/database/sqlite/SQLiteConnection;->detachCancellationSignal(Landroid/os/CancellationSignal;)V+]Landroid/os/CancellationSignal;Landroid/os/CancellationSignal;
 HSPLandroid/database/sqlite/SQLiteConnection;->dispose(Z)V
 HSPLandroid/database/sqlite/SQLiteConnection;->dumpUnsafe(Landroid/util/Printer;Z)V
-HSPLandroid/database/sqlite/SQLiteConnection;->execute(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)V
+HSPLandroid/database/sqlite/SQLiteConnection;->execute(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)V+]Landroid/database/sqlite/SQLiteConnection$OperationLog;Landroid/database/sqlite/SQLiteConnection$OperationLog;
 HSPLandroid/database/sqlite/SQLiteConnection;->executeForChangedRowCount(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)I+]Landroid/database/sqlite/SQLiteConnection$OperationLog;Landroid/database/sqlite/SQLiteConnection$OperationLog;
 HSPLandroid/database/sqlite/SQLiteConnection;->executeForCursorWindow(Ljava/lang/String;[Ljava/lang/Object;Landroid/database/CursorWindow;IIZLandroid/os/CancellationSignal;)I+]Landroid/database/CursorWindow;Landroid/database/CursorWindow;]Landroid/database/sqlite/SQLiteConnection$OperationLog;Landroid/database/sqlite/SQLiteConnection$OperationLog;
-HSPLandroid/database/sqlite/SQLiteConnection;->executeForLastInsertedRowId(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)J
+HSPLandroid/database/sqlite/SQLiteConnection;->executeForLastInsertedRowId(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)J+]Landroid/database/sqlite/SQLiteConnection$OperationLog;Landroid/database/sqlite/SQLiteConnection$OperationLog;
 HSPLandroid/database/sqlite/SQLiteConnection;->executeForLong(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)J
 HSPLandroid/database/sqlite/SQLiteConnection;->executeForString(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteConnection;->executePerConnectionSqlFromConfiguration(I)V
@@ -5528,7 +5537,7 @@
 HSPLandroid/database/sqlite/SQLiteConnection;->getConnectionId()I
 HSPLandroid/database/sqlite/SQLiteConnection;->getMainDbStatsUnsafe(IJJ)Landroid/database/sqlite/SQLiteDebug$DbStats;
 HSPLandroid/database/sqlite/SQLiteConnection;->isCacheable(I)Z
-HSPLandroid/database/sqlite/SQLiteConnection;->isPreparedStatementInCache(Ljava/lang/String;)Z
+HSPLandroid/database/sqlite/SQLiteConnection;->isPreparedStatementInCache(Ljava/lang/String;)Z+]Landroid/database/sqlite/SQLiteConnection$PreparedStatementCache;Landroid/database/sqlite/SQLiteConnection$PreparedStatementCache;
 HSPLandroid/database/sqlite/SQLiteConnection;->isPrimaryConnection()Z
 HSPLandroid/database/sqlite/SQLiteConnection;->maybeTruncateWalFile()V
 HSPLandroid/database/sqlite/SQLiteConnection;->obtainPreparedStatement(Ljava/lang/String;JIIZ)Landroid/database/sqlite/SQLiteConnection$PreparedStatement;
@@ -5572,7 +5581,7 @@
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->dispose(Z)V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->dump(Landroid/util/Printer;ZLandroid/util/ArraySet;)V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->finalize()V
-HSPLandroid/database/sqlite/SQLiteConnectionPool;->finishAcquireConnectionLocked(Landroid/database/sqlite/SQLiteConnection;I)V
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->finishAcquireConnectionLocked(Landroid/database/sqlite/SQLiteConnection;I)V+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->getPath()Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->getPriority(I)I
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->isSessionBlockingImportantConnectionWaitersLocked(ZI)Z
@@ -5586,21 +5595,21 @@
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->reconfigureAllConnectionsLocked()V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->recycleConnectionLocked(Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus;)Z
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->recycleConnectionWaiterLocked(Landroid/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;)V
-HSPLandroid/database/sqlite/SQLiteConnectionPool;->releaseConnection(Landroid/database/sqlite/SQLiteConnection;)V+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->releaseConnection(Landroid/database/sqlite/SQLiteConnection;)V+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->setMaxConnectionPoolSizeLocked()V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->setupIdleConnectionHandler(Landroid/os/Looper;J)V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->shouldYieldConnection(Landroid/database/sqlite/SQLiteConnection;I)Z
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->throwIfClosedLocked()V
-HSPLandroid/database/sqlite/SQLiteConnectionPool;->tryAcquireNonPrimaryConnectionLocked(Ljava/lang/String;I)Landroid/database/sqlite/SQLiteConnection;
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->tryAcquireNonPrimaryConnectionLocked(Ljava/lang/String;I)Landroid/database/sqlite/SQLiteConnection;+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->tryAcquirePrimaryConnectionLocked(I)Landroid/database/sqlite/SQLiteConnection;
-HSPLandroid/database/sqlite/SQLiteConnectionPool;->waitForConnection(Ljava/lang/String;ILandroid/os/CancellationSignal;)Landroid/database/sqlite/SQLiteConnection;+]Landroid/os/CancellationSignal;Landroid/os/CancellationSignal;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->waitForConnection(Ljava/lang/String;ILandroid/os/CancellationSignal;)Landroid/database/sqlite/SQLiteConnection;+]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Landroid/os/CancellationSignal;Landroid/os/CancellationSignal;
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->wakeConnectionWaitersLocked()V
 HSPLandroid/database/sqlite/SQLiteConstraintException;-><init>(Ljava/lang/String;)V
 HSPLandroid/database/sqlite/SQLiteCursor;-><init>(Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)V+]Landroid/database/sqlite/SQLiteQuery;Landroid/database/sqlite/SQLiteQuery;
 HSPLandroid/database/sqlite/SQLiteCursor;->close()V+]Landroid/database/sqlite/SQLiteCursorDriver;Landroid/database/sqlite/SQLiteDirectCursorDriver;]Landroid/database/sqlite/SQLiteQuery;Landroid/database/sqlite/SQLiteQuery;
 HSPLandroid/database/sqlite/SQLiteCursor;->fillWindow(I)V+]Landroid/database/CursorWindow;Landroid/database/CursorWindow;]Landroid/database/sqlite/SQLiteCursor;Landroid/database/sqlite/SQLiteCursor;]Landroid/database/sqlite/SQLiteQuery;Landroid/database/sqlite/SQLiteQuery;]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/database/sqlite/SQLiteCursor;->finalize()V
-HSPLandroid/database/sqlite/SQLiteCursor;->getColumnIndex(Ljava/lang/String;)I
+HSPLandroid/database/sqlite/SQLiteCursor;->getColumnIndex(Ljava/lang/String;)I+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/Map;Ljava/util/HashMap;
 HSPLandroid/database/sqlite/SQLiteCursor;->getColumnNames()[Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteCursor;->getCount()I
 HSPLandroid/database/sqlite/SQLiteCursor;->getDatabase()Landroid/database/sqlite/SQLiteDatabase;+]Landroid/database/sqlite/SQLiteQuery;Landroid/database/sqlite/SQLiteQuery;
@@ -5609,7 +5618,7 @@
 HSPLandroid/database/sqlite/SQLiteDatabase$$ExternalSyntheticLambda0;->get()Ljava/lang/Object;+]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/database/sqlite/SQLiteDatabase$$ExternalSyntheticLambda2;-><init>()V
 HSPLandroid/database/sqlite/SQLiteDatabase$1;-><init>(Ljava/lang/String;)V
-HSPLandroid/database/sqlite/SQLiteDatabase$1;->accept(Ljava/io/File;)Z
+HSPLandroid/database/sqlite/SQLiteDatabase$1;->accept(Ljava/io/File;)Z+]Ljava/lang/String;Ljava/lang/String;]Ljava/io/File;Ljava/io/File;
 HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;-><init>()V
 HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;-><init>(Landroid/database/sqlite/SQLiteDatabase$OpenParams;)V
 HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;->addOpenFlags(I)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;
@@ -5638,7 +5647,7 @@
 HSPLandroid/database/sqlite/SQLiteDatabase;->collectDbStats(Ljava/util/ArrayList;)V
 HSPLandroid/database/sqlite/SQLiteDatabase;->compileStatement(Ljava/lang/String;)Landroid/database/sqlite/SQLiteStatement;
 HSPLandroid/database/sqlite/SQLiteDatabase;->createSession()Landroid/database/sqlite/SQLiteSession;
-HSPLandroid/database/sqlite/SQLiteDatabase;->delete(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)I
+HSPLandroid/database/sqlite/SQLiteDatabase;->delete(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/database/sqlite/SQLiteStatement;Landroid/database/sqlite/SQLiteStatement;]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/database/sqlite/SQLiteDatabase;->deleteDatabase(Ljava/io/File;)Z
 HSPLandroid/database/sqlite/SQLiteDatabase;->deleteDatabase(Ljava/io/File;Z)Z
 HSPLandroid/database/sqlite/SQLiteDatabase;->disableWriteAheadLogging()V
@@ -5654,17 +5663,17 @@
 HSPLandroid/database/sqlite/SQLiteDatabase;->findEditTable(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteDatabase;->getActiveDatabasePools()Ljava/util/ArrayList;
 HSPLandroid/database/sqlite/SQLiteDatabase;->getActiveDatabases()Ljava/util/ArrayList;
-HSPLandroid/database/sqlite/SQLiteDatabase;->getFileTimestamps(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/database/sqlite/SQLiteDatabase;->getFileTimestamps(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/nio/file/FileSystem;Lsun/nio/fs/LinuxFileSystem;]Ljava/nio/file/attribute/BasicFileAttributes;Lsun/nio/fs/UnixFileAttributes$UnixAsBasicFileAttributes;
 HSPLandroid/database/sqlite/SQLiteDatabase;->getMaximumSize()J
 HSPLandroid/database/sqlite/SQLiteDatabase;->getPageSize()J
 HSPLandroid/database/sqlite/SQLiteDatabase;->getPath()Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteDatabase;->getThreadDefaultConnectionFlags(Z)I
 HSPLandroid/database/sqlite/SQLiteDatabase;->getThreadSession()Landroid/database/sqlite/SQLiteSession;+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;
 HSPLandroid/database/sqlite/SQLiteDatabase;->getVersion()I
-HSPLandroid/database/sqlite/SQLiteDatabase;->inTransaction()Z
+HSPLandroid/database/sqlite/SQLiteDatabase;->inTransaction()Z+]Landroid/database/sqlite/SQLiteSession;Landroid/database/sqlite/SQLiteSession;]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/database/sqlite/SQLiteDatabase;->insert(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J
 HSPLandroid/database/sqlite/SQLiteDatabase;->insertOrThrow(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J
-HSPLandroid/database/sqlite/SQLiteDatabase;->insertWithOnConflict(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;I)J+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/ContentValues;Landroid/content/ContentValues;]Landroid/database/sqlite/SQLiteStatement;Landroid/database/sqlite/SQLiteStatement;]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/MapCollections$KeySet;
+HSPLandroid/database/sqlite/SQLiteDatabase;->insertWithOnConflict(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;I)J+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/ContentValues;Landroid/content/ContentValues;]Landroid/database/sqlite/SQLiteStatement;Landroid/database/sqlite/SQLiteStatement;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;]Ljava/util/Set;Landroid/util/MapCollections$KeySet;
 HSPLandroid/database/sqlite/SQLiteDatabase;->isMainThread()Z
 HSPLandroid/database/sqlite/SQLiteDatabase;->isOpen()Z
 HSPLandroid/database/sqlite/SQLiteDatabase;->isReadOnly()Z
@@ -5683,7 +5692,7 @@
 HSPLandroid/database/sqlite/SQLiteDatabase;->query(ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;+]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/database/sqlite/SQLiteDatabase;->query(ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;
 HSPLandroid/database/sqlite/SQLiteDatabase;->queryWithFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;+]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
-HSPLandroid/database/sqlite/SQLiteDatabase;->rawQuery(Ljava/lang/String;[Ljava/lang/String;)Landroid/database/Cursor;
+HSPLandroid/database/sqlite/SQLiteDatabase;->rawQuery(Ljava/lang/String;[Ljava/lang/String;)Landroid/database/Cursor;+]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/database/sqlite/SQLiteDatabase;->rawQuery(Ljava/lang/String;[Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;
 HSPLandroid/database/sqlite/SQLiteDatabase;->rawQueryWithFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;
 HSPLandroid/database/sqlite/SQLiteDatabase;->rawQueryWithFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;+]Landroid/database/sqlite/SQLiteCursorDriver;Landroid/database/sqlite/SQLiteDirectCursorDriver;]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
@@ -5743,7 +5752,7 @@
 HSPLandroid/database/sqlite/SQLiteOpenHelper;->setWriteAheadLoggingEnabled(Z)V
 HSPLandroid/database/sqlite/SQLiteProgram;-><init>(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)V+]Ljava/lang/String;Ljava/lang/String;]Landroid/database/sqlite/SQLiteSession;Landroid/database/sqlite/SQLiteSession;]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/database/sqlite/SQLiteProgram;->bind(ILjava/lang/Object;)V
-HSPLandroid/database/sqlite/SQLiteProgram;->bindAllArgsAsStrings([Ljava/lang/String;)V+]Landroid/database/sqlite/SQLiteProgram;Landroid/database/sqlite/SQLiteQuery;,Landroid/database/sqlite/SQLiteStatement;
+HSPLandroid/database/sqlite/SQLiteProgram;->bindAllArgsAsStrings([Ljava/lang/String;)V+]Landroid/database/sqlite/SQLiteProgram;Landroid/database/sqlite/SQLiteStatement;,Landroid/database/sqlite/SQLiteQuery;
 HSPLandroid/database/sqlite/SQLiteProgram;->bindBlob(I[B)V
 HSPLandroid/database/sqlite/SQLiteProgram;->bindDouble(ID)V
 HSPLandroid/database/sqlite/SQLiteProgram;->bindLong(IJ)V
@@ -5785,20 +5794,20 @@
 HSPLandroid/database/sqlite/SQLiteSession;-><init>(Landroid/database/sqlite/SQLiteConnectionPool;)V
 HSPLandroid/database/sqlite/SQLiteSession;->acquireConnection(Ljava/lang/String;ILandroid/os/CancellationSignal;)V+]Landroid/database/sqlite/SQLiteConnectionPool;Landroid/database/sqlite/SQLiteConnectionPool;
 HSPLandroid/database/sqlite/SQLiteSession;->beginTransaction(ILandroid/database/sqlite/SQLiteTransactionListener;ILandroid/os/CancellationSignal;)V
-HSPLandroid/database/sqlite/SQLiteSession;->beginTransactionUnchecked(ILandroid/database/sqlite/SQLiteTransactionListener;ILandroid/os/CancellationSignal;)V
+HSPLandroid/database/sqlite/SQLiteSession;->beginTransactionUnchecked(ILandroid/database/sqlite/SQLiteTransactionListener;ILandroid/os/CancellationSignal;)V+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;
 HSPLandroid/database/sqlite/SQLiteSession;->endTransaction(Landroid/os/CancellationSignal;)V
-HSPLandroid/database/sqlite/SQLiteSession;->endTransactionUnchecked(Landroid/os/CancellationSignal;Z)V
-HSPLandroid/database/sqlite/SQLiteSession;->execute(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)V
+HSPLandroid/database/sqlite/SQLiteSession;->endTransactionUnchecked(Landroid/os/CancellationSignal;Z)V+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;
+HSPLandroid/database/sqlite/SQLiteSession;->execute(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)V+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;
 HSPLandroid/database/sqlite/SQLiteSession;->executeForChangedRowCount(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)I+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;
 HSPLandroid/database/sqlite/SQLiteSession;->executeForCursorWindow(Ljava/lang/String;[Ljava/lang/Object;Landroid/database/CursorWindow;IIZILandroid/os/CancellationSignal;)I+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;
-HSPLandroid/database/sqlite/SQLiteSession;->executeForLastInsertedRowId(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)J
+HSPLandroid/database/sqlite/SQLiteSession;->executeForLastInsertedRowId(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)J+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;
 HSPLandroid/database/sqlite/SQLiteSession;->executeForLong(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)J
 HSPLandroid/database/sqlite/SQLiteSession;->executeForString(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteSession;->executeSpecial(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)Z+]Landroid/os/CancellationSignal;Landroid/os/CancellationSignal;
 HSPLandroid/database/sqlite/SQLiteSession;->hasNestedTransaction()Z
 HSPLandroid/database/sqlite/SQLiteSession;->hasTransaction()Z
 HSPLandroid/database/sqlite/SQLiteSession;->obtainTransaction(ILandroid/database/sqlite/SQLiteTransactionListener;)Landroid/database/sqlite/SQLiteSession$Transaction;
-HSPLandroid/database/sqlite/SQLiteSession;->prepare(Ljava/lang/String;ILandroid/os/CancellationSignal;Landroid/database/sqlite/SQLiteStatementInfo;)V+]Landroid/os/CancellationSignal;Landroid/os/CancellationSignal;]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;
+HSPLandroid/database/sqlite/SQLiteSession;->prepare(Ljava/lang/String;ILandroid/os/CancellationSignal;Landroid/database/sqlite/SQLiteStatementInfo;)V+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;]Landroid/os/CancellationSignal;Landroid/os/CancellationSignal;
 HSPLandroid/database/sqlite/SQLiteSession;->recycleTransaction(Landroid/database/sqlite/SQLiteSession$Transaction;)V
 HSPLandroid/database/sqlite/SQLiteSession;->releaseConnection()V+]Landroid/database/sqlite/SQLiteConnectionPool;Landroid/database/sqlite/SQLiteConnectionPool;
 HSPLandroid/database/sqlite/SQLiteSession;->setTransactionSuccessful()V
@@ -5808,8 +5817,8 @@
 HSPLandroid/database/sqlite/SQLiteSession;->yieldTransaction(JZLandroid/os/CancellationSignal;)Z
 HSPLandroid/database/sqlite/SQLiteSession;->yieldTransactionUnchecked(JLandroid/os/CancellationSignal;)Z
 HSPLandroid/database/sqlite/SQLiteStatement;-><init>(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;)V
-HSPLandroid/database/sqlite/SQLiteStatement;->execute()V
-HSPLandroid/database/sqlite/SQLiteStatement;->executeInsert()J
+HSPLandroid/database/sqlite/SQLiteStatement;->execute()V+]Landroid/database/sqlite/SQLiteSession;Landroid/database/sqlite/SQLiteSession;]Landroid/database/sqlite/SQLiteStatement;Landroid/database/sqlite/SQLiteStatement;
+HSPLandroid/database/sqlite/SQLiteStatement;->executeInsert()J+]Landroid/database/sqlite/SQLiteSession;Landroid/database/sqlite/SQLiteSession;]Landroid/database/sqlite/SQLiteStatement;Landroid/database/sqlite/SQLiteStatement;
 HSPLandroid/database/sqlite/SQLiteStatement;->executeUpdateDelete()I+]Landroid/database/sqlite/SQLiteSession;Landroid/database/sqlite/SQLiteSession;]Landroid/database/sqlite/SQLiteStatement;Landroid/database/sqlite/SQLiteStatement;
 HSPLandroid/database/sqlite/SQLiteStatement;->simpleQueryForLong()J
 HSPLandroid/database/sqlite/SQLiteStatement;->simpleQueryForString()Ljava/lang/String;
@@ -5847,27 +5856,27 @@
 HSPLandroid/graphics/BaseCanvas;->drawBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Landroid/graphics/RectF;Landroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseCanvas;->drawColor(I)V
 HSPLandroid/graphics/BaseCanvas;->drawLine(FFFFLandroid/graphics/Paint;)V
-HSPLandroid/graphics/BaseCanvas;->drawPath(Landroid/graphics/Path;Landroid/graphics/Paint;)V
+HSPLandroid/graphics/BaseCanvas;->drawPath(Landroid/graphics/Path;Landroid/graphics/Paint;)V+]Landroid/graphics/Paint;missing_types]Landroid/graphics/Path;Landroid/graphics/Path;
 HSPLandroid/graphics/BaseCanvas;->drawText(Ljava/lang/CharSequence;IIFFLandroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseCanvas;->drawTextRun(Ljava/lang/CharSequence;IIIIFFZLandroid/graphics/Paint;)V
-HSPLandroid/graphics/BaseCanvas;->throwIfCannotDraw(Landroid/graphics/Bitmap;)V
-HSPLandroid/graphics/BaseCanvas;->throwIfHasHwFeaturesInSwMode(Landroid/graphics/Paint;)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;,Landroid/text/TextPaint;]Landroid/graphics/BaseCanvas;Landroid/graphics/Canvas;,Landroid/graphics/Picture$PictureCanvas;,Landroid/view/Surface$CompatibleCanvas;
+HSPLandroid/graphics/BaseCanvas;->throwIfCannotDraw(Landroid/graphics/Bitmap;)V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;
+HSPLandroid/graphics/BaseCanvas;->throwIfHasHwFeaturesInSwMode(Landroid/graphics/Paint;)V+]Landroid/graphics/Paint;missing_types]Landroid/graphics/BaseCanvas;Landroid/graphics/Canvas;,Landroid/view/Surface$CompatibleCanvas;,Landroid/graphics/Picture$PictureCanvas;
 HSPLandroid/graphics/BaseCanvas;->throwIfHasHwFeaturesInSwMode(Landroid/graphics/Shader;)V
 HSPLandroid/graphics/BaseCanvas;->throwIfHwBitmapInSwMode(Landroid/graphics/Bitmap;)V
 HSPLandroid/graphics/BaseRecordingCanvas;-><init>(J)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawArc(Landroid/graphics/RectF;FFZLandroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawBitmap(Landroid/graphics/Bitmap;FFLandroid/graphics/Paint;)V
-HSPLandroid/graphics/BaseRecordingCanvas;->drawBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Paint;)V
+HSPLandroid/graphics/BaseRecordingCanvas;->drawBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Paint;)V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/graphics/BaseRecordingCanvas;Landroid/graphics/RecordingCanvas;
 HSPLandroid/graphics/BaseRecordingCanvas;->drawCircle(FFFLandroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawColor(I)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawColor(ILandroid/graphics/PorterDuff$Mode;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawLine(FFFFLandroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawOval(FFFFLandroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawOval(Landroid/graphics/RectF;Landroid/graphics/Paint;)V
-HSPLandroid/graphics/BaseRecordingCanvas;->drawPatch(Landroid/graphics/NinePatch;Landroid/graphics/Rect;Landroid/graphics/Paint;)V
-HSPLandroid/graphics/BaseRecordingCanvas;->drawPath(Landroid/graphics/Path;Landroid/graphics/Paint;)V
-HSPLandroid/graphics/BaseRecordingCanvas;->drawRect(FFFFLandroid/graphics/Paint;)V
-HSPLandroid/graphics/BaseRecordingCanvas;->drawRect(Landroid/graphics/Rect;Landroid/graphics/Paint;)V
+HSPLandroid/graphics/BaseRecordingCanvas;->drawPatch(Landroid/graphics/NinePatch;Landroid/graphics/Rect;Landroid/graphics/Paint;)V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/graphics/NinePatch;Landroid/graphics/NinePatch;]Landroid/graphics/BaseRecordingCanvas;Landroid/graphics/RecordingCanvas;
+HSPLandroid/graphics/BaseRecordingCanvas;->drawPath(Landroid/graphics/Path;Landroid/graphics/Paint;)V+]Landroid/graphics/Paint;missing_types]Landroid/graphics/Path;Landroid/graphics/Path;
+HSPLandroid/graphics/BaseRecordingCanvas;->drawRect(FFFFLandroid/graphics/Paint;)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;
+HSPLandroid/graphics/BaseRecordingCanvas;->drawRect(Landroid/graphics/Rect;Landroid/graphics/Paint;)V+]Landroid/graphics/BaseRecordingCanvas;Landroid/graphics/RecordingCanvas;
 HSPLandroid/graphics/BaseRecordingCanvas;->drawRect(Landroid/graphics/RectF;Landroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawRoundRect(FFFFFFLandroid/graphics/Paint;)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;
 HSPLandroid/graphics/BaseRecordingCanvas;->drawRoundRect(Landroid/graphics/RectF;FFLandroid/graphics/Paint;)V+]Landroid/graphics/BaseRecordingCanvas;Landroid/graphics/RecordingCanvas;
@@ -5880,7 +5889,7 @@
 HSPLandroid/graphics/Bitmap$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/graphics/Bitmap$Config;->nativeToConfig(I)Landroid/graphics/Bitmap$Config;
 HSPLandroid/graphics/Bitmap$Config;->values()[Landroid/graphics/Bitmap$Config;
-HSPLandroid/graphics/Bitmap;-><init>(JIIIZ[BLandroid/graphics/NinePatch$InsetStruct;Z)V
+HSPLandroid/graphics/Bitmap;-><init>(JIIIZ[BLandroid/graphics/NinePatch$InsetStruct;Z)V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/graphics/Bitmap;->checkHardware(Ljava/lang/String;)V
 HSPLandroid/graphics/Bitmap;->checkPixelAccess(II)V
 HSPLandroid/graphics/Bitmap;->checkPixelsAccess(IIIIII[I)V
@@ -5900,7 +5909,7 @@
 HSPLandroid/graphics/Bitmap;->eraseColor(I)V
 HSPLandroid/graphics/Bitmap;->extractAlpha(Landroid/graphics/Paint;[I)Landroid/graphics/Bitmap;
 HSPLandroid/graphics/Bitmap;->getAllocationByteCount()I
-HSPLandroid/graphics/Bitmap;->getByteCount()I
+HSPLandroid/graphics/Bitmap;->getByteCount()I+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;
 HSPLandroid/graphics/Bitmap;->getColorSpace()Landroid/graphics/ColorSpace;
 HSPLandroid/graphics/Bitmap;->getConfig()Landroid/graphics/Bitmap$Config;
 HSPLandroid/graphics/Bitmap;->getDefaultDensity()I
@@ -5913,8 +5922,8 @@
 HSPLandroid/graphics/Bitmap;->getPixel(II)I
 HSPLandroid/graphics/Bitmap;->getPixels([IIIIIII)V
 HSPLandroid/graphics/Bitmap;->getRowBytes()I
-HSPLandroid/graphics/Bitmap;->getScaledHeight(I)I
-HSPLandroid/graphics/Bitmap;->getScaledWidth(I)I
+HSPLandroid/graphics/Bitmap;->getScaledHeight(I)I+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;
+HSPLandroid/graphics/Bitmap;->getScaledWidth(I)I+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;
 HSPLandroid/graphics/Bitmap;->getWidth()I
 HSPLandroid/graphics/Bitmap;->hasAlpha()Z
 HSPLandroid/graphics/Bitmap;->hasMipMap()Z
@@ -5923,7 +5932,7 @@
 HSPLandroid/graphics/Bitmap;->isRecycled()Z
 HSPLandroid/graphics/Bitmap;->noteHardwareBitmapSlowCall()V
 HSPLandroid/graphics/Bitmap;->prepareToDraw()V
-HSPLandroid/graphics/Bitmap;->reconfigure(IILandroid/graphics/Bitmap$Config;)V
+HSPLandroid/graphics/Bitmap;->reconfigure(IILandroid/graphics/Bitmap$Config;)V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;
 HSPLandroid/graphics/Bitmap;->recycle()V
 HSPLandroid/graphics/Bitmap;->reinit(IIZ)V
 HSPLandroid/graphics/Bitmap;->scaleFromDensity(III)I
@@ -5937,7 +5946,7 @@
 HSPLandroid/graphics/BitmapFactory$Options;-><init>()V
 HSPLandroid/graphics/BitmapFactory$Options;->nativeColorSpace(Landroid/graphics/BitmapFactory$Options;)J
 HSPLandroid/graphics/BitmapFactory$Options;->nativeInBitmap(Landroid/graphics/BitmapFactory$Options;)J
-HSPLandroid/graphics/BitmapFactory$Options;->validate(Landroid/graphics/BitmapFactory$Options;)V
+HSPLandroid/graphics/BitmapFactory$Options;->validate(Landroid/graphics/BitmapFactory$Options;)V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;
 HSPLandroid/graphics/BitmapFactory;->decodeByteArray([BII)Landroid/graphics/Bitmap;
 HSPLandroid/graphics/BitmapFactory;->decodeByteArray([BIILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;
 HSPLandroid/graphics/BitmapFactory;->decodeFile(Ljava/lang/String;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;
@@ -5954,10 +5963,10 @@
 HSPLandroid/graphics/BitmapShader;-><init>(Landroid/graphics/Bitmap;Landroid/graphics/Shader$TileMode;Landroid/graphics/Shader$TileMode;)V
 HSPLandroid/graphics/BitmapShader;->createNativeInstance(JZ)J
 HSPLandroid/graphics/BitmapShader;->shouldDiscardNativeInstance(Z)Z
-HSPLandroid/graphics/BlendMode;->blendModeToPorterDuffMode(Landroid/graphics/BlendMode;)Landroid/graphics/PorterDuff$Mode;
+HSPLandroid/graphics/BlendMode;->blendModeToPorterDuffMode(Landroid/graphics/BlendMode;)Landroid/graphics/PorterDuff$Mode;+]Landroid/graphics/BlendMode;Landroid/graphics/BlendMode;
 HSPLandroid/graphics/BlendMode;->fromValue(I)Landroid/graphics/BlendMode;
 HSPLandroid/graphics/BlendMode;->getXfermode()Landroid/graphics/Xfermode;
-HSPLandroid/graphics/BlendMode;->toValue(Landroid/graphics/BlendMode;)I
+HSPLandroid/graphics/BlendMode;->toValue(Landroid/graphics/BlendMode;)I+]Landroid/graphics/BlendMode;Landroid/graphics/BlendMode;
 HSPLandroid/graphics/BlendModeColorFilter;-><init>(ILandroid/graphics/BlendMode;)V
 HSPLandroid/graphics/BlendModeColorFilter;->createNativeInstance()J
 HSPLandroid/graphics/BlendModeColorFilter;->getColor()I
@@ -5965,15 +5974,15 @@
 HSPLandroid/graphics/BlurMaskFilter;-><init>(FLandroid/graphics/BlurMaskFilter$Blur;)V
 HSPLandroid/graphics/Canvas;-><init>()V
 HSPLandroid/graphics/Canvas;-><init>(J)V
-HSPLandroid/graphics/Canvas;-><init>(Landroid/graphics/Bitmap;)V
+HSPLandroid/graphics/Canvas;-><init>(Landroid/graphics/Bitmap;)V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;]Landroid/graphics/Canvas;Landroid/graphics/Canvas;
 HSPLandroid/graphics/Canvas;->checkValidClipOp(Landroid/graphics/Region$Op;)V
 HSPLandroid/graphics/Canvas;->clipPath(Landroid/graphics/Path;)Z
-HSPLandroid/graphics/Canvas;->clipPath(Landroid/graphics/Path;Landroid/graphics/Region$Op;)Z
+HSPLandroid/graphics/Canvas;->clipPath(Landroid/graphics/Path;Landroid/graphics/Region$Op;)Z+]Landroid/graphics/Path;Landroid/graphics/Path;
 HSPLandroid/graphics/Canvas;->clipRect(FFFF)Z
 HSPLandroid/graphics/Canvas;->clipRect(IIII)Z
 HSPLandroid/graphics/Canvas;->clipRect(Landroid/graphics/Rect;)Z
 HSPLandroid/graphics/Canvas;->clipRect(Landroid/graphics/RectF;)Z
-HSPLandroid/graphics/Canvas;->concat(Landroid/graphics/Matrix;)V
+HSPLandroid/graphics/Canvas;->concat(Landroid/graphics/Matrix;)V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
 HSPLandroid/graphics/Canvas;->disableZ()V
 HSPLandroid/graphics/Canvas;->drawARGB(IIII)V
 HSPLandroid/graphics/Canvas;->drawArc(FFFFFFZLandroid/graphics/Paint;)V
@@ -6018,13 +6027,13 @@
 HSPLandroid/graphics/Canvas;->save()I
 HSPLandroid/graphics/Canvas;->save(I)I
 HSPLandroid/graphics/Canvas;->saveLayer(FFFFLandroid/graphics/Paint;I)I
-HSPLandroid/graphics/Canvas;->saveLayer(Landroid/graphics/RectF;Landroid/graphics/Paint;)I
-HSPLandroid/graphics/Canvas;->saveLayer(Landroid/graphics/RectF;Landroid/graphics/Paint;I)I
+HSPLandroid/graphics/Canvas;->saveLayer(Landroid/graphics/RectF;Landroid/graphics/Paint;)I+]Landroid/graphics/Canvas;Landroid/graphics/Canvas;
+HSPLandroid/graphics/Canvas;->saveLayer(Landroid/graphics/RectF;Landroid/graphics/Paint;I)I+]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;,Landroid/graphics/Canvas;
 HSPLandroid/graphics/Canvas;->saveLayerAlpha(FFFFI)I
 HSPLandroid/graphics/Canvas;->saveLayerAlpha(FFFFII)I
 HSPLandroid/graphics/Canvas;->saveUnclippedLayer(IIII)I
 HSPLandroid/graphics/Canvas;->scale(FF)V
-HSPLandroid/graphics/Canvas;->scale(FFFF)V
+HSPLandroid/graphics/Canvas;->scale(FFFF)V+]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
 HSPLandroid/graphics/Canvas;->setBitmap(Landroid/graphics/Bitmap;)V
 HSPLandroid/graphics/Canvas;->setCompatibilityVersion(I)V
 HSPLandroid/graphics/Canvas;->setDensity(I)V
@@ -6051,7 +6060,7 @@
 HSPLandroid/graphics/Color;->green()F
 HSPLandroid/graphics/Color;->green(I)I
 HSPLandroid/graphics/Color;->green(J)F
-HSPLandroid/graphics/Color;->pack(FFFFLandroid/graphics/ColorSpace;)J
+HSPLandroid/graphics/Color;->pack(FFFFLandroid/graphics/ColorSpace;)J+]Landroid/graphics/ColorSpace;Landroid/graphics/ColorSpace$Rgb;
 HSPLandroid/graphics/Color;->pack(I)J
 HSPLandroid/graphics/Color;->parseColor(Ljava/lang/String;)I
 HSPLandroid/graphics/Color;->red()F
@@ -6062,7 +6071,7 @@
 HSPLandroid/graphics/Color;->toArgb(J)I
 HSPLandroid/graphics/Color;->valueOf(I)Landroid/graphics/Color;
 HSPLandroid/graphics/ColorFilter;-><init>()V
-HSPLandroid/graphics/ColorFilter;->getNativeInstance()J
+HSPLandroid/graphics/ColorFilter;->getNativeInstance()J+]Landroid/graphics/ColorFilter;Landroid/graphics/PorterDuffColorFilter;,Landroid/graphics/BlendModeColorFilter;]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
 HSPLandroid/graphics/ColorMatrixColorFilter;-><init>(Landroid/graphics/ColorMatrix;)V
 HSPLandroid/graphics/ColorMatrixColorFilter;-><init>([F)V
 HSPLandroid/graphics/ColorMatrixColorFilter;->createNativeInstance()J
@@ -6072,7 +6081,7 @@
 HSPLandroid/graphics/ColorSpace$Rgb$TransferParameters;->hashCode()I
 HSPLandroid/graphics/ColorSpace$Rgb;-><init>(Ljava/lang/String;[FLandroid/graphics/ColorSpace$Rgb$TransferParameters;)V
 HSPLandroid/graphics/ColorSpace$Rgb;-><init>(Ljava/lang/String;[F[F[FLandroid/graphics/ColorSpace$Rgb$TransferParameters;I)V
-HSPLandroid/graphics/ColorSpace$Rgb;-><init>(Ljava/lang/String;[F[F[FLjava/util/function/DoubleUnaryOperator;Ljava/util/function/DoubleUnaryOperator;FFLandroid/graphics/ColorSpace$Rgb$TransferParameters;I)V
+HSPLandroid/graphics/ColorSpace$Rgb;-><init>(Ljava/lang/String;[F[F[FLjava/util/function/DoubleUnaryOperator;Ljava/util/function/DoubleUnaryOperator;FFLandroid/graphics/ColorSpace$Rgb$TransferParameters;I)V+]Ljava/util/function/DoubleUnaryOperator;Landroid/graphics/ColorSpace$Rgb$$ExternalSyntheticLambda1;,Landroid/graphics/ColorSpace$Rgb$$ExternalSyntheticLambda5;,Ljava/util/function/DoubleUnaryOperator$$ExternalSyntheticLambda2;,Landroid/graphics/ColorSpace$$ExternalSyntheticLambda0;,Landroid/graphics/ColorSpace$Rgb$$ExternalSyntheticLambda0;]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
 HSPLandroid/graphics/ColorSpace$Rgb;->area([F)F
 HSPLandroid/graphics/ColorSpace$Rgb;->computePrimaries([F)[F
 HSPLandroid/graphics/ColorSpace$Rgb;->computeWhitePoint([F)[F
@@ -6148,7 +6157,7 @@
 HSPLandroid/graphics/HardwareRenderer;->notifyFramePending()V
 HSPLandroid/graphics/HardwareRenderer;->onLayerDestroyed(Landroid/graphics/TextureLayer;)V
 HSPLandroid/graphics/HardwareRenderer;->pause()Z
-HSPLandroid/graphics/HardwareRenderer;->pushLayerUpdate(Landroid/graphics/TextureLayer;)V
+HSPLandroid/graphics/HardwareRenderer;->pushLayerUpdate(Landroid/graphics/TextureLayer;)V+]Landroid/graphics/TextureLayer;Landroid/graphics/TextureLayer;
 HSPLandroid/graphics/HardwareRenderer;->registerVectorDrawableAnimator(Landroid/view/NativeVectorDrawableAnimator;)V
 HSPLandroid/graphics/HardwareRenderer;->removeObserver(Landroid/graphics/HardwareRendererObserver;)V
 HSPLandroid/graphics/HardwareRenderer;->sendDeviceConfigurationForDebugging(Landroid/content/res/Configuration;)V
@@ -6179,11 +6188,11 @@
 HSPLandroid/graphics/HardwareRenderer;->validateFinite(FLjava/lang/String;)V
 HSPLandroid/graphics/HardwareRenderer;->validatePositive(FLjava/lang/String;)V
 HSPLandroid/graphics/HardwareRendererObserver$$ExternalSyntheticLambda0;-><init>(Landroid/graphics/HardwareRendererObserver;)V
-HSPLandroid/graphics/HardwareRendererObserver$$ExternalSyntheticLambda0;->run()V
+HSPLandroid/graphics/HardwareRendererObserver$$ExternalSyntheticLambda0;->run()V+]Landroid/graphics/HardwareRendererObserver;Landroid/graphics/HardwareRendererObserver;
 HSPLandroid/graphics/HardwareRendererObserver;-><init>(Landroid/graphics/HardwareRendererObserver$OnFrameMetricsAvailableListener;[JLandroid/os/Handler;Z)V
 HSPLandroid/graphics/HardwareRendererObserver;->getNativeInstance()J
 HSPLandroid/graphics/HardwareRendererObserver;->invokeDataAvailable(Ljava/lang/ref/WeakReference;)Z+]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
-HSPLandroid/graphics/HardwareRendererObserver;->notifyDataAvailable()V
+HSPLandroid/graphics/HardwareRendererObserver;->notifyDataAvailable()V+]Landroid/os/Handler;Landroid/os/Handler;,Landroid/view/ViewRootImpl$ViewRootHandler;
 HSPLandroid/graphics/ImageDecoder$AssetInputStreamSource;-><init>(Landroid/content/res/AssetManager$AssetInputStream;Landroid/content/res/Resources;Landroid/util/TypedValue;)V
 HSPLandroid/graphics/ImageDecoder$AssetInputStreamSource;->createImageDecoder(Z)Landroid/graphics/ImageDecoder;
 HSPLandroid/graphics/ImageDecoder$AssetInputStreamSource;->getDensity()I
@@ -6196,7 +6205,7 @@
 HSPLandroid/graphics/ImageDecoder$Source;-><init>()V
 HSPLandroid/graphics/ImageDecoder$Source;-><init>(Landroid/graphics/ImageDecoder$Source-IA;)V
 HSPLandroid/graphics/ImageDecoder$Source;->computeDstDensity()I
-HSPLandroid/graphics/ImageDecoder;-><init>(JIIZZ)V
+HSPLandroid/graphics/ImageDecoder;-><init>(JIIZZ)V+]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
 HSPLandroid/graphics/ImageDecoder;->callHeaderDecoded(Landroid/graphics/ImageDecoder$OnHeaderDecodedListener;Landroid/graphics/ImageDecoder$Source;)V
 HSPLandroid/graphics/ImageDecoder;->checkForExtended()Z
 HSPLandroid/graphics/ImageDecoder;->checkState(Z)V
@@ -6220,7 +6229,7 @@
 HSPLandroid/graphics/Insets$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/graphics/Insets;-><init>(IIII)V
 HSPLandroid/graphics/Insets;-><init>(IIIILandroid/graphics/Insets-IA;)V
-HSPLandroid/graphics/Insets;->equals(Ljava/lang/Object;)Z
+HSPLandroid/graphics/Insets;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Landroid/graphics/Insets;
 HSPLandroid/graphics/Insets;->hashCode()I
 HSPLandroid/graphics/Insets;->max(Landroid/graphics/Insets;Landroid/graphics/Insets;)Landroid/graphics/Insets;
 HSPLandroid/graphics/Insets;->min(Landroid/graphics/Insets;Landroid/graphics/Insets;)Landroid/graphics/Insets;
@@ -6236,7 +6245,7 @@
 HSPLandroid/graphics/Interpolator;->timeToValues(I[F)Landroid/graphics/Interpolator$Result;
 HSPLandroid/graphics/Interpolator;->timeToValues([F)Landroid/graphics/Interpolator$Result;
 HSPLandroid/graphics/LeakyTypefaceStorage;->readTypefaceFromParcel(Landroid/os/Parcel;)Landroid/graphics/Typeface;
-HSPLandroid/graphics/LeakyTypefaceStorage;->writeTypefaceToParcel(Landroid/graphics/Typeface;Landroid/os/Parcel;)V
+HSPLandroid/graphics/LeakyTypefaceStorage;->writeTypefaceToParcel(Landroid/graphics/Typeface;Landroid/os/Parcel;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/graphics/LinearGradient;-><init>(FFFFIILandroid/graphics/Shader$TileMode;)V
 HSPLandroid/graphics/LinearGradient;-><init>(FFFFJJLandroid/graphics/Shader$TileMode;)V
 HSPLandroid/graphics/LinearGradient;-><init>(FFFF[I[FLandroid/graphics/Shader$TileMode;)V
@@ -6244,14 +6253,14 @@
 HSPLandroid/graphics/LinearGradient;-><init>(FFFF[J[FLandroid/graphics/Shader$TileMode;Landroid/graphics/ColorSpace;)V
 HSPLandroid/graphics/LinearGradient;->createNativeInstance(JZ)J
 HSPLandroid/graphics/MaskFilter;->finalize()V
-HSPLandroid/graphics/Matrix;-><init>()V
-HSPLandroid/graphics/Matrix;-><init>(Landroid/graphics/Matrix;)V
+HSPLandroid/graphics/Matrix;-><init>()V+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
+HSPLandroid/graphics/Matrix;-><init>(Landroid/graphics/Matrix;)V+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
 HSPLandroid/graphics/Matrix;->checkPointArrays([FI[FII)V
 HSPLandroid/graphics/Matrix;->equals(Ljava/lang/Object;)Z
 HSPLandroid/graphics/Matrix;->getValues([F)V
 HSPLandroid/graphics/Matrix;->invert(Landroid/graphics/Matrix;)Z
 HSPLandroid/graphics/Matrix;->isIdentity()Z
-HSPLandroid/graphics/Matrix;->mapPoints([F)V
+HSPLandroid/graphics/Matrix;->mapPoints([F)V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
 HSPLandroid/graphics/Matrix;->mapPoints([FI[FII)V
 HSPLandroid/graphics/Matrix;->mapRect(Landroid/graphics/RectF;)Z+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
 HSPLandroid/graphics/Matrix;->mapRect(Landroid/graphics/RectF;Landroid/graphics/RectF;)Z
@@ -6289,19 +6298,19 @@
 HSPLandroid/graphics/Outline;->isEmpty()Z
 HSPLandroid/graphics/Outline;->setAlpha(F)V
 HSPLandroid/graphics/Outline;->setConvexPath(Landroid/graphics/Path;)V
-HSPLandroid/graphics/Outline;->setEmpty()V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/Path;Landroid/graphics/Path;
+HSPLandroid/graphics/Outline;->setEmpty()V+]Landroid/graphics/Path;Landroid/graphics/Path;]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/graphics/Outline;->setOval(IIII)V
 HSPLandroid/graphics/Outline;->setOval(Landroid/graphics/Rect;)V
-HSPLandroid/graphics/Outline;->setPath(Landroid/graphics/Path;)V
-HSPLandroid/graphics/Outline;->setRect(IIII)V
-HSPLandroid/graphics/Outline;->setRect(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/Outline;->setPath(Landroid/graphics/Path;)V+]Landroid/graphics/Path;Landroid/graphics/Path;]Landroid/graphics/Rect;Landroid/graphics/Rect;
+HSPLandroid/graphics/Outline;->setRect(IIII)V+]Landroid/graphics/Outline;Landroid/graphics/Outline;
+HSPLandroid/graphics/Outline;->setRect(Landroid/graphics/Rect;)V+]Landroid/graphics/Outline;Landroid/graphics/Outline;
 HSPLandroid/graphics/Outline;->setRoundRect(IIIIF)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/Outline;Landroid/graphics/Outline;
 HSPLandroid/graphics/Outline;->setRoundRect(Landroid/graphics/Rect;F)V+]Landroid/graphics/Outline;Landroid/graphics/Outline;
 HSPLandroid/graphics/Paint$FontMetrics;-><init>()V
 HSPLandroid/graphics/Paint$FontMetricsInt;-><init>()V
 HSPLandroid/graphics/Paint;-><init>()V
 HSPLandroid/graphics/Paint;-><init>(I)V+]Landroid/graphics/Paint;missing_types]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
-HSPLandroid/graphics/Paint;-><init>(Landroid/graphics/Paint;)V
+HSPLandroid/graphics/Paint;-><init>(Landroid/graphics/Paint;)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
 HSPLandroid/graphics/Paint;->ascent()F
 HSPLandroid/graphics/Paint;->descent()F
 HSPLandroid/graphics/Paint;->getAlpha()I
@@ -6318,8 +6327,8 @@
 HSPLandroid/graphics/Paint;->getHinting()I
 HSPLandroid/graphics/Paint;->getLetterSpacing()F
 HSPLandroid/graphics/Paint;->getMaskFilter()Landroid/graphics/MaskFilter;
-HSPLandroid/graphics/Paint;->getNativeInstance()J+]Landroid/graphics/ColorFilter;Landroid/graphics/PorterDuffColorFilter;,Landroid/graphics/BlendModeColorFilter;]Landroid/graphics/Paint;missing_types]Landroid/graphics/Shader;Landroid/graphics/drawable/RippleShader;,Landroid/graphics/BitmapShader;
-HSPLandroid/graphics/Paint;->getRunAdvance(Ljava/lang/CharSequence;IIIIZI)F+]Landroid/graphics/Paint;Landroid/text/TextPaint;]Ljava/lang/CharSequence;Ljava/lang/String;,Ljava/lang/StringBuilder;,Landroid/text/SpannableString;
+HSPLandroid/graphics/Paint;->getNativeInstance()J+]Landroid/graphics/Paint;missing_types]Landroid/graphics/Shader;Landroid/graphics/BitmapShader;,Landroid/graphics/LinearGradient;,Landroid/graphics/drawable/RippleShader;,Landroid/graphics/RadialGradient;]Landroid/graphics/ColorFilter;Landroid/graphics/PorterDuffColorFilter;,Landroid/graphics/BlendModeColorFilter;
+HSPLandroid/graphics/Paint;->getRunAdvance(Ljava/lang/CharSequence;IIIIZI)F+]Landroid/graphics/Paint;Landroid/text/TextPaint;]Ljava/lang/CharSequence;missing_types
 HSPLandroid/graphics/Paint;->getRunAdvance([CIIIIZI)F
 HSPLandroid/graphics/Paint;->getShader()Landroid/graphics/Shader;
 HSPLandroid/graphics/Paint;->getShadowLayerColor()I
@@ -6333,7 +6342,7 @@
 HSPLandroid/graphics/Paint;->getStrokeWidth()F
 HSPLandroid/graphics/Paint;->getStyle()Landroid/graphics/Paint$Style;
 HSPLandroid/graphics/Paint;->getTextAlign()Landroid/graphics/Paint$Align;
-HSPLandroid/graphics/Paint;->getTextBounds(Ljava/lang/CharSequence;IILandroid/graphics/Rect;)V
+HSPLandroid/graphics/Paint;->getTextBounds(Ljava/lang/CharSequence;IILandroid/graphics/Rect;)V+]Landroid/graphics/Paint;Landroid/text/TextPaint;]Ljava/lang/CharSequence;missing_types
 HSPLandroid/graphics/Paint;->getTextBounds(Ljava/lang/String;IILandroid/graphics/Rect;)V
 HSPLandroid/graphics/Paint;->getTextBounds([CIILandroid/graphics/Rect;)V
 HSPLandroid/graphics/Paint;->getTextLocale()Ljava/util/Locale;+]Landroid/os/LocaleList;Landroid/os/LocaleList;
@@ -6353,7 +6362,7 @@
 HSPLandroid/graphics/Paint;->isAntiAlias()Z
 HSPLandroid/graphics/Paint;->isDither()Z
 HSPLandroid/graphics/Paint;->isElegantTextHeight()Z
-HSPLandroid/graphics/Paint;->isFilterBitmap()Z
+HSPLandroid/graphics/Paint;->isFilterBitmap()Z+]Landroid/graphics/Paint;missing_types
 HSPLandroid/graphics/Paint;->measureText(Ljava/lang/CharSequence;II)F
 HSPLandroid/graphics/Paint;->measureText(Ljava/lang/String;)F
 HSPLandroid/graphics/Paint;->measureText(Ljava/lang/String;II)F
@@ -6378,7 +6387,7 @@
 HSPLandroid/graphics/Paint;->setPathEffect(Landroid/graphics/PathEffect;)Landroid/graphics/PathEffect;
 HSPLandroid/graphics/Paint;->setShader(Landroid/graphics/Shader;)Landroid/graphics/Shader;
 HSPLandroid/graphics/Paint;->setShadowLayer(FFFI)V
-HSPLandroid/graphics/Paint;->setShadowLayer(FFFJ)V
+HSPLandroid/graphics/Paint;->setShadowLayer(FFFJ)V+]Landroid/graphics/ColorSpace;Landroid/graphics/ColorSpace$Rgb;
 HSPLandroid/graphics/Paint;->setStartHyphenEdit(I)V
 HSPLandroid/graphics/Paint;->setStrokeCap(Landroid/graphics/Paint$Cap;)V
 HSPLandroid/graphics/Paint;->setStrokeJoin(Landroid/graphics/Paint$Join;)V
@@ -6386,7 +6395,7 @@
 HSPLandroid/graphics/Paint;->setStrokeWidth(F)V
 HSPLandroid/graphics/Paint;->setStyle(Landroid/graphics/Paint$Style;)V
 HSPLandroid/graphics/Paint;->setTextAlign(Landroid/graphics/Paint$Align;)V
-HSPLandroid/graphics/Paint;->setTextLocales(Landroid/os/LocaleList;)V
+HSPLandroid/graphics/Paint;->setTextLocales(Landroid/os/LocaleList;)V+]Landroid/os/LocaleList;Landroid/os/LocaleList;
 HSPLandroid/graphics/Paint;->setTextScaleX(F)V
 HSPLandroid/graphics/Paint;->setTextSize(F)V
 HSPLandroid/graphics/Paint;->setTextSkewX(F)V
@@ -6395,19 +6404,19 @@
 HSPLandroid/graphics/Paint;->setXfermode(Landroid/graphics/Xfermode;)Landroid/graphics/Xfermode;
 HSPLandroid/graphics/Paint;->syncTextLocalesWithMinikin()V+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/os/LocaleList;Landroid/os/LocaleList;
 HSPLandroid/graphics/PaintFlagsDrawFilter;-><init>(II)V
-HSPLandroid/graphics/Path;-><init>()V
+HSPLandroid/graphics/Path;-><init>()V+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
 HSPLandroid/graphics/Path;-><init>(Landroid/graphics/Path;)V
 HSPLandroid/graphics/Path;->addArc(FFFFFF)V
 HSPLandroid/graphics/Path;->addArc(Landroid/graphics/RectF;FF)V
 HSPLandroid/graphics/Path;->addCircle(FFFLandroid/graphics/Path$Direction;)V
 HSPLandroid/graphics/Path;->addOval(FFFFLandroid/graphics/Path$Direction;)V
 HSPLandroid/graphics/Path;->addOval(Landroid/graphics/RectF;Landroid/graphics/Path$Direction;)V
-HSPLandroid/graphics/Path;->addPath(Landroid/graphics/Path;Landroid/graphics/Matrix;)V
+HSPLandroid/graphics/Path;->addPath(Landroid/graphics/Path;Landroid/graphics/Matrix;)V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
 HSPLandroid/graphics/Path;->addRect(FFFFLandroid/graphics/Path$Direction;)V
-HSPLandroid/graphics/Path;->addRect(Landroid/graphics/RectF;Landroid/graphics/Path$Direction;)V
+HSPLandroid/graphics/Path;->addRect(Landroid/graphics/RectF;Landroid/graphics/Path$Direction;)V+]Landroid/graphics/Path;Landroid/graphics/Path;
 HSPLandroid/graphics/Path;->addRoundRect(FFFFFFLandroid/graphics/Path$Direction;)V
 HSPLandroid/graphics/Path;->addRoundRect(FFFF[FLandroid/graphics/Path$Direction;)V
-HSPLandroid/graphics/Path;->addRoundRect(Landroid/graphics/RectF;FFLandroid/graphics/Path$Direction;)V
+HSPLandroid/graphics/Path;->addRoundRect(Landroid/graphics/RectF;FFLandroid/graphics/Path$Direction;)V+]Landroid/graphics/Path;Landroid/graphics/Path;
 HSPLandroid/graphics/Path;->addRoundRect(Landroid/graphics/RectF;[FLandroid/graphics/Path$Direction;)V
 HSPLandroid/graphics/Path;->approximate(F)[F
 HSPLandroid/graphics/Path;->arcTo(FFFFFFZ)V
@@ -6416,7 +6425,7 @@
 HSPLandroid/graphics/Path;->close()V
 HSPLandroid/graphics/Path;->computeBounds(Landroid/graphics/RectF;Z)V
 HSPLandroid/graphics/Path;->cubicTo(FFFFFF)V
-HSPLandroid/graphics/Path;->detectSimplePath(FFFFLandroid/graphics/Path$Direction;)V
+HSPLandroid/graphics/Path;->detectSimplePath(FFFFLandroid/graphics/Path$Direction;)V+]Landroid/graphics/Region;Landroid/graphics/Region;
 HSPLandroid/graphics/Path;->getFillType()Landroid/graphics/Path$FillType;
 HSPLandroid/graphics/Path;->isConvex()Z
 HSPLandroid/graphics/Path;->isEmpty()Z
@@ -6424,10 +6433,10 @@
 HSPLandroid/graphics/Path;->moveTo(FF)V
 HSPLandroid/graphics/Path;->offset(FF)V
 HSPLandroid/graphics/Path;->op(Landroid/graphics/Path;Landroid/graphics/Path$Op;)Z
-HSPLandroid/graphics/Path;->op(Landroid/graphics/Path;Landroid/graphics/Path;Landroid/graphics/Path$Op;)Z
+HSPLandroid/graphics/Path;->op(Landroid/graphics/Path;Landroid/graphics/Path;Landroid/graphics/Path$Op;)Z+]Landroid/graphics/Path$Op;Landroid/graphics/Path$Op;
 HSPLandroid/graphics/Path;->rLineTo(FF)V
 HSPLandroid/graphics/Path;->readOnlyNI()J
-HSPLandroid/graphics/Path;->reset()V+]Landroid/graphics/Path;Landroid/graphics/Path;
+HSPLandroid/graphics/Path;->reset()V+]Landroid/graphics/Path;Landroid/graphics/Path;]Landroid/graphics/Region;Landroid/graphics/Region;
 HSPLandroid/graphics/Path;->rewind()V+]Landroid/graphics/Region;Landroid/graphics/Region;
 HSPLandroid/graphics/Path;->set(Landroid/graphics/Path;)V
 HSPLandroid/graphics/Path;->setFillType(Landroid/graphics/Path$FillType;)V
@@ -6454,7 +6463,7 @@
 HSPLandroid/graphics/Point;-><init>(II)V
 HSPLandroid/graphics/Point;-><init>(Landroid/graphics/Point;)V
 HSPLandroid/graphics/Point;->equals(II)Z
-HSPLandroid/graphics/Point;->equals(Ljava/lang/Object;)Z
+HSPLandroid/graphics/Point;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Landroid/graphics/Point;
 HSPLandroid/graphics/Point;->hashCode()I
 HSPLandroid/graphics/Point;->offset(II)V
 HSPLandroid/graphics/Point;->readFromParcel(Landroid/os/Parcel;)V
@@ -6463,7 +6472,7 @@
 HSPLandroid/graphics/PointF;-><init>()V
 HSPLandroid/graphics/PointF;-><init>(FF)V
 HSPLandroid/graphics/PointF;->equals(FF)Z
-HSPLandroid/graphics/PointF;->equals(Ljava/lang/Object;)Z
+HSPLandroid/graphics/PointF;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Landroid/graphics/PointF;
 HSPLandroid/graphics/PointF;->length()F
 HSPLandroid/graphics/PointF;->length(FF)F
 HSPLandroid/graphics/PointF;->set(FF)V
@@ -6474,9 +6483,9 @@
 HSPLandroid/graphics/PorterDuffColorFilter;->getColor()I
 HSPLandroid/graphics/PorterDuffColorFilter;->getMode()Landroid/graphics/PorterDuff$Mode;
 HSPLandroid/graphics/PorterDuffXfermode;-><init>(Landroid/graphics/PorterDuff$Mode;)V
-HSPLandroid/graphics/RadialGradient;-><init>(FFFFFF[J[FLandroid/graphics/Shader$TileMode;Landroid/graphics/ColorSpace;)V
+HSPLandroid/graphics/RadialGradient;-><init>(FFFFFF[J[FLandroid/graphics/Shader$TileMode;Landroid/graphics/ColorSpace;)V+][F[F
 HSPLandroid/graphics/RadialGradient;-><init>(FFF[I[FLandroid/graphics/Shader$TileMode;)V
-HSPLandroid/graphics/RadialGradient;->createNativeInstance(JZ)J
+HSPLandroid/graphics/RadialGradient;->createNativeInstance(JZ)J+]Landroid/graphics/ColorSpace;Landroid/graphics/ColorSpace$Rgb;]Landroid/graphics/RadialGradient;Landroid/graphics/RadialGradient;
 HSPLandroid/graphics/RecordingCanvas;-><init>(Landroid/graphics/RenderNode;II)V
 HSPLandroid/graphics/RecordingCanvas;->disableZ()V
 HSPLandroid/graphics/RecordingCanvas;->drawRenderNode(Landroid/graphics/RenderNode;)V
@@ -6489,7 +6498,7 @@
 HSPLandroid/graphics/RecordingCanvas;->isHardwareAccelerated()Z
 HSPLandroid/graphics/RecordingCanvas;->obtain(Landroid/graphics/RenderNode;II)Landroid/graphics/RecordingCanvas;+]Landroid/util/Pools$SynchronizedPool;Landroid/util/Pools$SynchronizedPool;
 HSPLandroid/graphics/RecordingCanvas;->recycle()V+]Landroid/util/Pools$SynchronizedPool;Landroid/util/Pools$SynchronizedPool;
-HSPLandroid/graphics/RecordingCanvas;->throwIfCannotDraw(Landroid/graphics/Bitmap;)V
+HSPLandroid/graphics/RecordingCanvas;->throwIfCannotDraw(Landroid/graphics/Bitmap;)V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;
 HSPLandroid/graphics/Rect$1;->createFromParcel(Landroid/os/Parcel;)Landroid/graphics/Rect;
 HSPLandroid/graphics/Rect$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/graphics/Rect$1;->newArray(I)[Landroid/graphics/Rect;
@@ -6525,7 +6534,7 @@
 HSPLandroid/graphics/Rect;->toShortString(Ljava/lang/StringBuilder;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/graphics/Rect;->toString()Ljava/lang/String;
 HSPLandroid/graphics/Rect;->union(IIII)V
-HSPLandroid/graphics/Rect;->union(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/Rect;->union(Landroid/graphics/Rect;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/graphics/Rect;->width()I
 HSPLandroid/graphics/Rect;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/graphics/RectF;-><init>()V
@@ -6535,11 +6544,11 @@
 HSPLandroid/graphics/RectF;->centerX()F
 HSPLandroid/graphics/RectF;->centerY()F
 HSPLandroid/graphics/RectF;->contains(FF)Z
-HSPLandroid/graphics/RectF;->equals(Ljava/lang/Object;)Z
+HSPLandroid/graphics/RectF;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Landroid/graphics/RectF;
 HSPLandroid/graphics/RectF;->height()F
 HSPLandroid/graphics/RectF;->inset(FF)V
 HSPLandroid/graphics/RectF;->intersect(FFFF)Z
-HSPLandroid/graphics/RectF;->intersect(Landroid/graphics/RectF;)Z
+HSPLandroid/graphics/RectF;->intersect(Landroid/graphics/RectF;)Z+]Landroid/graphics/RectF;Landroid/graphics/RectF;
 HSPLandroid/graphics/RectF;->isEmpty()Z
 HSPLandroid/graphics/RectF;->offset(FF)V
 HSPLandroid/graphics/RectF;->offsetTo(FF)V
@@ -6550,7 +6559,7 @@
 HSPLandroid/graphics/RectF;->set(Landroid/graphics/RectF;)V
 HSPLandroid/graphics/RectF;->setEmpty()V
 HSPLandroid/graphics/RectF;->union(FFFF)V
-HSPLandroid/graphics/RectF;->union(Landroid/graphics/RectF;)V
+HSPLandroid/graphics/RectF;->union(Landroid/graphics/RectF;)V+]Landroid/graphics/RectF;Landroid/graphics/RectF;
 HSPLandroid/graphics/RectF;->width()F
 HSPLandroid/graphics/Region$1;->createFromParcel(Landroid/os/Parcel;)Landroid/graphics/Region;
 HSPLandroid/graphics/Region$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -6579,7 +6588,7 @@
 HSPLandroid/graphics/RenderNode$PositionUpdateListener;->callPositionChanged(Ljava/lang/ref/WeakReference;JIIII)Z+]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Landroid/graphics/RenderNode$PositionUpdateListener;Landroid/graphics/RenderNode$CompositePositionUpdateListener;
 HSPLandroid/graphics/RenderNode$PositionUpdateListener;->callPositionLost(Ljava/lang/ref/WeakReference;J)Z
 HSPLandroid/graphics/RenderNode;-><init>(J)V
-HSPLandroid/graphics/RenderNode;-><init>(Ljava/lang/String;Landroid/graphics/RenderNode$AnimationHost;)V
+HSPLandroid/graphics/RenderNode;-><init>(Ljava/lang/String;Landroid/graphics/RenderNode$AnimationHost;)V+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
 HSPLandroid/graphics/RenderNode;->addPositionUpdateListener(Landroid/graphics/RenderNode$PositionUpdateListener;)V
 HSPLandroid/graphics/RenderNode;->adopt(J)Landroid/graphics/RenderNode;
 HSPLandroid/graphics/RenderNode;->beginRecording(II)Landroid/graphics/RecordingCanvas;
@@ -6634,6 +6643,7 @@
 HSPLandroid/graphics/RuntimeShader;->setFloatUniform(Ljava/lang/String;FF)V
 HSPLandroid/graphics/RuntimeShader;->setFloatUniform(Ljava/lang/String;FFFFI)V+]Landroid/graphics/RuntimeShader;missing_types
 HSPLandroid/graphics/RuntimeShader;->setInputShader(Ljava/lang/String;Landroid/graphics/Shader;)V
+HSPLandroid/graphics/RuntimeShader;->setUniform(Ljava/lang/String;[FZ)V
 HSPLandroid/graphics/Shader;-><init>()V
 HSPLandroid/graphics/Shader;-><init>(Landroid/graphics/ColorSpace;)V
 HSPLandroid/graphics/Shader;->colorSpace()Landroid/graphics/ColorSpace;
@@ -6642,14 +6652,14 @@
 HSPLandroid/graphics/Shader;->discardNativeInstance()V
 HSPLandroid/graphics/Shader;->discardNativeInstanceLocked()V
 HSPLandroid/graphics/Shader;->getNativeInstance()J
-HSPLandroid/graphics/Shader;->getNativeInstance(Z)J
-HSPLandroid/graphics/Shader;->setLocalMatrix(Landroid/graphics/Matrix;)V
+HSPLandroid/graphics/Shader;->getNativeInstance(Z)J+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/graphics/Shader;Landroid/graphics/drawable/RippleShader;,Landroid/graphics/LinearGradient;,Landroid/graphics/BitmapShader;,Landroid/graphics/RadialGradient;]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
+HSPLandroid/graphics/Shader;->setLocalMatrix(Landroid/graphics/Matrix;)V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/graphics/Shader;Landroid/graphics/BitmapShader;,Landroid/graphics/RadialGradient;
 HSPLandroid/graphics/Shader;->shouldDiscardNativeInstance(Z)Z
-HSPLandroid/graphics/SurfaceTexture$1;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/graphics/SurfaceTexture$1;->handleMessage(Landroid/os/Message;)V+]Landroid/graphics/SurfaceTexture$OnFrameAvailableListener;Landroid/view/TextureView$$ExternalSyntheticLambda0;
 HSPLandroid/graphics/SurfaceTexture;-><init>(I)V
 HSPLandroid/graphics/SurfaceTexture;->finalize()V
 HSPLandroid/graphics/SurfaceTexture;->isSingleBuffered()Z
-HSPLandroid/graphics/SurfaceTexture;->postEventFromNative(Ljava/lang/ref/WeakReference;)V
+HSPLandroid/graphics/SurfaceTexture;->postEventFromNative(Ljava/lang/ref/WeakReference;)V+]Landroid/os/Handler;Landroid/graphics/SurfaceTexture$1;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
 HSPLandroid/graphics/SurfaceTexture;->release()V
 HSPLandroid/graphics/SurfaceTexture;->setDefaultBufferSize(II)V
 HSPLandroid/graphics/SurfaceTexture;->setOnFrameAvailableListener(Landroid/graphics/SurfaceTexture$OnFrameAvailableListener;)V
@@ -6660,7 +6670,7 @@
 HSPLandroid/graphics/TextureLayer;->close()V
 HSPLandroid/graphics/TextureLayer;->detachSurfaceTexture()V
 HSPLandroid/graphics/Typeface$Builder;->build()Landroid/graphics/Typeface;
-HSPLandroid/graphics/Typeface$Builder;->createAssetUid(Landroid/content/res/AssetManager;Ljava/lang/String;I[Landroid/graphics/fonts/FontVariationAxis;IILjava/lang/String;)Ljava/lang/String;
+HSPLandroid/graphics/Typeface$Builder;->createAssetUid(Landroid/content/res/AssetManager;Ljava/lang/String;I[Landroid/graphics/fonts/FontVariationAxis;IILjava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
 HSPLandroid/graphics/Typeface$CustomFallbackBuilder;-><init>(Landroid/graphics/fonts/FontFamily;)V
 HSPLandroid/graphics/Typeface$CustomFallbackBuilder;->build()Landroid/graphics/Typeface;
 HSPLandroid/graphics/Typeface$CustomFallbackBuilder;->setStyle(Landroid/graphics/fonts/FontStyle;)Landroid/graphics/Typeface$CustomFallbackBuilder;
@@ -6670,13 +6680,13 @@
 HSPLandroid/graphics/Typeface;->createFromAsset(Landroid/content/res/AssetManager;Ljava/lang/String;)Landroid/graphics/Typeface;
 HSPLandroid/graphics/Typeface;->createFromFamilies([Landroid/graphics/fonts/FontFamily;)Landroid/graphics/Typeface;
 HSPLandroid/graphics/Typeface;->createFromResources(Landroid/content/res/FontResourcesParser$FamilyResourceEntry;Landroid/content/res/AssetManager;Ljava/lang/String;)Landroid/graphics/Typeface;
-HSPLandroid/graphics/Typeface;->createWeightStyle(Landroid/graphics/Typeface;IZ)Landroid/graphics/Typeface;
+HSPLandroid/graphics/Typeface;->createWeightStyle(Landroid/graphics/Typeface;IZ)Landroid/graphics/Typeface;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
 HSPLandroid/graphics/Typeface;->defaultFromStyle(I)Landroid/graphics/Typeface;
 HSPLandroid/graphics/Typeface;->deserializeFontMap(Ljava/nio/ByteBuffer;Ljava/util/Map;)[J
-HSPLandroid/graphics/Typeface;->equals(Ljava/lang/Object;)Z
-HSPLandroid/graphics/Typeface;->findFromCache(Landroid/content/res/AssetManager;Ljava/lang/String;)Landroid/graphics/Typeface;
+HSPLandroid/graphics/Typeface;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Landroid/graphics/Typeface;
+HSPLandroid/graphics/Typeface;->findFromCache(Landroid/content/res/AssetManager;Ljava/lang/String;)Landroid/graphics/Typeface;+]Landroid/util/LruCache;Landroid/util/LruCache;
 HSPLandroid/graphics/Typeface;->getStyle()I
-HSPLandroid/graphics/Typeface;->getSystemDefaultTypeface(Ljava/lang/String;)Landroid/graphics/Typeface;
+HSPLandroid/graphics/Typeface;->getSystemDefaultTypeface(Ljava/lang/String;)Landroid/graphics/Typeface;+]Ljava/util/Map;Landroid/util/ArrayMap;
 HSPLandroid/graphics/Typeface;->hasFontFamily(Ljava/lang/String;)Z
 HSPLandroid/graphics/Typeface;->readString(Ljava/nio/ByteBuffer;)Ljava/lang/String;
 HSPLandroid/graphics/Typeface;->registerGenericFamilyNative(Ljava/lang/String;Landroid/graphics/Typeface;)V
@@ -6719,7 +6729,7 @@
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable$LayerState;->isStateful()Z
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable$LayerState;->newDrawable()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable$LayerState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
-HSPLandroid/graphics/drawable/AdaptiveIconDrawable;-><init>(Landroid/graphics/drawable/AdaptiveIconDrawable$LayerState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable;-><init>(Landroid/graphics/drawable/AdaptiveIconDrawable$LayerState;Landroid/content/res/Resources;)V+]Landroid/graphics/drawable/AdaptiveIconDrawable;Landroid/graphics/drawable/AdaptiveIconDrawable;]Landroid/app/ActivityThread;Landroid/app/ActivityThread;]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->addLayer(ILandroid/graphics/drawable/AdaptiveIconDrawable$ChildDrawable;)V
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->createConstantState(Landroid/graphics/drawable/AdaptiveIconDrawable$LayerState;Landroid/content/res/Resources;)Landroid/graphics/drawable/AdaptiveIconDrawable$LayerState;
@@ -6731,7 +6741,7 @@
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->getIntrinsicWidth()I
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->getOpacity()I
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
-HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->inflateLayers(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->inflateLayers(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V+]Ljava/lang/String;Ljava/lang/String;]Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/XmlBlock$Parser;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/LayerDrawable;,Landroid/graphics/drawable/BitmapDrawable;
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->invalidateSelf()V
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->isStateful()Z
@@ -6741,7 +6751,7 @@
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->setVisible(ZZ)Z
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->updateLayerBounds(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->updateLayerBoundsInternal(Landroid/graphics/Rect;)V
-HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->updateLayerFromTypedArray(Landroid/graphics/drawable/AdaptiveIconDrawable$ChildDrawable;Landroid/content/res/TypedArray;)V
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->updateLayerFromTypedArray(Landroid/graphics/drawable/AdaptiveIconDrawable$ChildDrawable;Landroid/content/res/TypedArray;)V+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;,Landroid/graphics/drawable/BitmapDrawable;,Landroid/graphics/drawable/ColorDrawable;
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->updateMaskBoundsInternal(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/drawable/Animatable2$AnimationCallback;-><init>()V
 HSPLandroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;-><init>(Landroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;Landroid/graphics/drawable/AnimatedStateListDrawable;Landroid/content/res/Resources;)V
@@ -6784,7 +6794,7 @@
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$2;->onAnimationStart(Landroid/animation/Animator;)V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState$PendingAnimator;-><init>(IFLjava/lang/String;)V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState$PendingAnimator;->newInstance(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Landroid/animation/Animator;
-HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;-><init>(Landroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;Landroid/graphics/drawable/Drawable$Callback;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;-><init>(Landroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;Landroid/graphics/drawable/Drawable$Callback;Landroid/content/res/Resources;)V+]Landroid/graphics/drawable/Drawable$ConstantState;Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;]Landroid/graphics/drawable/VectorDrawable;Landroid/graphics/drawable/VectorDrawable;
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;->addPendingAnimator(IFLjava/lang/String;)V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;->addTargetAnimator(Ljava/lang/String;Landroid/animation/Animator;)V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;->canApplyTheme()Z
@@ -6884,26 +6894,26 @@
 HSPLandroid/graphics/drawable/BitmapDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/BitmapDrawable;->clearMutated()V
-HSPLandroid/graphics/drawable/BitmapDrawable;->computeBitmapSize()V
-HSPLandroid/graphics/drawable/BitmapDrawable;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/BitmapDrawable;->computeBitmapSize()V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;
+HSPLandroid/graphics/drawable/BitmapDrawable;->draw(Landroid/graphics/Canvas;)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;,Landroid/graphics/Picture$PictureCanvas;,Landroid/graphics/Canvas;
 HSPLandroid/graphics/drawable/BitmapDrawable;->getBitmap()Landroid/graphics/Bitmap;
 HSPLandroid/graphics/drawable/BitmapDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/BitmapDrawable;->getColorFilter()Landroid/graphics/ColorFilter;
 HSPLandroid/graphics/drawable/BitmapDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
 HSPLandroid/graphics/drawable/BitmapDrawable;->getIntrinsicHeight()I
 HSPLandroid/graphics/drawable/BitmapDrawable;->getIntrinsicWidth()I
-HSPLandroid/graphics/drawable/BitmapDrawable;->getOpacity()I
+HSPLandroid/graphics/drawable/BitmapDrawable;->getOpacity()I+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;]Landroid/graphics/Paint;Landroid/graphics/Paint;
 HSPLandroid/graphics/drawable/BitmapDrawable;->getOutline(Landroid/graphics/Outline;)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->init(Landroid/graphics/drawable/BitmapDrawable$BitmapState;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->isAutoMirrored()Z
-HSPLandroid/graphics/drawable/BitmapDrawable;->isStateful()Z
+HSPLandroid/graphics/drawable/BitmapDrawable;->isStateful()Z+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;
 HSPLandroid/graphics/drawable/BitmapDrawable;->lambda$updateStateFromTypedArray$2(Landroid/graphics/ImageDecoder;Landroid/graphics/ImageDecoder$ImageInfo;Landroid/graphics/ImageDecoder$Source;)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->mutate()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/BitmapDrawable;->needMirroring()Z
-HSPLandroid/graphics/drawable/BitmapDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/drawable/BitmapDrawable;->onBoundsChange(Landroid/graphics/Rect;)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;
 HSPLandroid/graphics/drawable/BitmapDrawable;->onStateChange([I)Z
-HSPLandroid/graphics/drawable/BitmapDrawable;->setAlpha(I)V
+HSPLandroid/graphics/drawable/BitmapDrawable;->setAlpha(I)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/graphics/drawable/BitmapDrawable;Landroid/graphics/drawable/BitmapDrawable;
 HSPLandroid/graphics/drawable/BitmapDrawable;->setAutoMirrored(Z)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->setBitmap(Landroid/graphics/Bitmap;)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->setColorFilter(Landroid/graphics/ColorFilter;)V
@@ -6913,17 +6923,17 @@
 HSPLandroid/graphics/drawable/BitmapDrawable;->setTileModeXY(Landroid/graphics/Shader$TileMode;Landroid/graphics/Shader$TileMode;)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->setTintBlendMode(Landroid/graphics/BlendMode;)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->setTintList(Landroid/content/res/ColorStateList;)V
-HSPLandroid/graphics/drawable/BitmapDrawable;->updateDstRectAndInsetsIfDirty()V
-HSPLandroid/graphics/drawable/BitmapDrawable;->updateLocalState(Landroid/content/res/Resources;)V
-HSPLandroid/graphics/drawable/BitmapDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;I)V
+HSPLandroid/graphics/drawable/BitmapDrawable;->updateDstRectAndInsetsIfDirty()V+]Landroid/graphics/drawable/BitmapDrawable;Landroid/graphics/drawable/BitmapDrawable;
+HSPLandroid/graphics/drawable/BitmapDrawable;->updateLocalState(Landroid/content/res/Resources;)V+]Landroid/graphics/drawable/BitmapDrawable;Landroid/graphics/drawable/BitmapDrawable;
+HSPLandroid/graphics/drawable/BitmapDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;I)V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;]Landroid/graphics/Paint;Landroid/graphics/Paint;]Ljava/io/InputStream;Landroid/content/res/AssetManager$AssetInputStream;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/graphics/drawable/BitmapDrawable;Landroid/graphics/drawable/BitmapDrawable;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/graphics/drawable/BitmapDrawable;->verifyRequiredAttributes(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/ClipDrawable$ClipState;-><init>(Landroid/graphics/drawable/ClipDrawable$ClipState;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/ClipDrawable$ClipState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/ClipDrawable;-><init>(Landroid/graphics/drawable/ClipDrawable$ClipState;Landroid/content/res/Resources;)V
-HSPLandroid/graphics/drawable/ClipDrawable;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/ClipDrawable;->draw(Landroid/graphics/Canvas;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/ClipDrawable;Landroid/graphics/drawable/ClipDrawable;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/PaintDrawable;
 HSPLandroid/graphics/drawable/ClipDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/ClipDrawable;->mutateConstantState()Landroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;
-HSPLandroid/graphics/drawable/ClipDrawable;->onLevelChange(I)Z
+HSPLandroid/graphics/drawable/ClipDrawable;->onLevelChange(I)Z+]Landroid/graphics/drawable/ClipDrawable;Landroid/graphics/drawable/ClipDrawable;
 HSPLandroid/graphics/drawable/ClipDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/ClipDrawable;->verifyRequiredAttributes(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/ColorDrawable$ColorState;-><init>()V
@@ -6943,7 +6953,7 @@
 HSPLandroid/graphics/drawable/ColorDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/ColorDrawable;->getColor()I
 HSPLandroid/graphics/drawable/ColorDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
-HSPLandroid/graphics/drawable/ColorDrawable;->getOpacity()I
+HSPLandroid/graphics/drawable/ColorDrawable;->getOpacity()I+]Landroid/graphics/Paint;Landroid/graphics/Paint;
 HSPLandroid/graphics/drawable/ColorDrawable;->getOutline(Landroid/graphics/Outline;)V
 HSPLandroid/graphics/drawable/ColorDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/ColorDrawable;->isStateful()Z
@@ -6953,7 +6963,7 @@
 HSPLandroid/graphics/drawable/ColorDrawable;->setColor(I)V
 HSPLandroid/graphics/drawable/ColorDrawable;->setColorFilter(Landroid/graphics/ColorFilter;)V
 HSPLandroid/graphics/drawable/ColorDrawable;->setTintList(Landroid/content/res/ColorStateList;)V
-HSPLandroid/graphics/drawable/ColorDrawable;->updateLocalState(Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/ColorDrawable;->updateLocalState(Landroid/content/res/Resources;)V+]Landroid/graphics/drawable/ColorDrawable;Landroid/graphics/drawable/ColorDrawable;
 HSPLandroid/graphics/drawable/ColorDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/Drawable$ConstantState;-><init>()V
 HSPLandroid/graphics/drawable/Drawable$ConstantState;->canApplyTheme()Z
@@ -6973,19 +6983,19 @@
 HSPLandroid/graphics/drawable/Drawable;->getColorFilter()Landroid/graphics/ColorFilter;
 HSPLandroid/graphics/drawable/Drawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
 HSPLandroid/graphics/drawable/Drawable;->getCurrent()Landroid/graphics/drawable/Drawable;
-HSPLandroid/graphics/drawable/Drawable;->getDirtyBounds()Landroid/graphics/Rect;
+HSPLandroid/graphics/drawable/Drawable;->getDirtyBounds()Landroid/graphics/Rect;+]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/Drawable;->getIntrinsicHeight()I
 HSPLandroid/graphics/drawable/Drawable;->getIntrinsicWidth()I
 HSPLandroid/graphics/drawable/Drawable;->getLayoutDirection()I
 HSPLandroid/graphics/drawable/Drawable;->getLevel()I
-HSPLandroid/graphics/drawable/Drawable;->getMinimumHeight()I
-HSPLandroid/graphics/drawable/Drawable;->getMinimumWidth()I
+HSPLandroid/graphics/drawable/Drawable;->getMinimumHeight()I+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;,Landroid/graphics/drawable/LayerDrawable;,Landroid/graphics/drawable/RippleDrawable;,Landroid/graphics/drawable/ColorDrawable;
+HSPLandroid/graphics/drawable/Drawable;->getMinimumWidth()I+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;,Landroid/graphics/drawable/LayerDrawable;,Landroid/graphics/drawable/RippleDrawable;,Landroid/graphics/drawable/ColorDrawable;
 HSPLandroid/graphics/drawable/Drawable;->getOutline(Landroid/graphics/Outline;)V
 HSPLandroid/graphics/drawable/Drawable;->getPadding(Landroid/graphics/Rect;)Z
 HSPLandroid/graphics/drawable/Drawable;->getState()[I
 HSPLandroid/graphics/drawable/Drawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/Drawable;->inflateWithAttributes(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/TypedArray;I)V
-HSPLandroid/graphics/drawable/Drawable;->invalidateSelf()V+]Landroid/graphics/drawable/Drawable$Callback;missing_types]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/graphics/drawable/Drawable;->invalidateSelf()V+]Landroid/graphics/drawable/Drawable$Callback;missing_types]Landroid/graphics/drawable/Drawable;megamorphic_types
 HSPLandroid/graphics/drawable/Drawable;->isProjected()Z
 HSPLandroid/graphics/drawable/Drawable;->isStateful()Z
 HSPLandroid/graphics/drawable/Drawable;->isVisible()Z
@@ -6996,14 +7006,14 @@
 HSPLandroid/graphics/drawable/Drawable;->onLevelChange(I)Z
 HSPLandroid/graphics/drawable/Drawable;->onStateChange([I)Z
 HSPLandroid/graphics/drawable/Drawable;->parseBlendMode(ILandroid/graphics/BlendMode;)Landroid/graphics/BlendMode;
-HSPLandroid/graphics/drawable/Drawable;->resolveDensity(Landroid/content/res/Resources;I)I
+HSPLandroid/graphics/drawable/Drawable;->resolveDensity(Landroid/content/res/Resources;I)I+]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLandroid/graphics/drawable/Drawable;->resolveOpacity(II)I
 HSPLandroid/graphics/drawable/Drawable;->scaleFromDensity(FII)F
 HSPLandroid/graphics/drawable/Drawable;->scaleFromDensity(IIIZ)I
 HSPLandroid/graphics/drawable/Drawable;->scheduleSelf(Ljava/lang/Runnable;J)V
 HSPLandroid/graphics/drawable/Drawable;->setAutoMirrored(Z)V
-HSPLandroid/graphics/drawable/Drawable;->setBounds(IIII)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/Drawable;Landroid/widget/ScrollBarDrawable;,Landroid/graphics/drawable/ColorDrawable;
-HSPLandroid/graphics/drawable/Drawable;->setBounds(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/drawable/Drawable;->setBounds(IIII)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/graphics/drawable/Drawable;->setBounds(Landroid/graphics/Rect;)V+]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/Drawable;->setCallback(Landroid/graphics/drawable/Drawable$Callback;)V
 HSPLandroid/graphics/drawable/Drawable;->setChangingConfigurations(I)V
 HSPLandroid/graphics/drawable/Drawable;->setColorFilter(ILandroid/graphics/PorterDuff$Mode;)V
@@ -7012,39 +7022,39 @@
 HSPLandroid/graphics/drawable/Drawable;->setLayoutDirection(I)Z
 HSPLandroid/graphics/drawable/Drawable;->setLevel(I)Z
 HSPLandroid/graphics/drawable/Drawable;->setSrcDensityOverride(I)V
-HSPLandroid/graphics/drawable/Drawable;->setState([I)Z
+HSPLandroid/graphics/drawable/Drawable;->setState([I)Z+]Landroid/graphics/drawable/Drawable;megamorphic_types
 HSPLandroid/graphics/drawable/Drawable;->setTint(I)V
 HSPLandroid/graphics/drawable/Drawable;->setTintList(Landroid/content/res/ColorStateList;)V
 HSPLandroid/graphics/drawable/Drawable;->setTintMode(Landroid/graphics/PorterDuff$Mode;)V
-HSPLandroid/graphics/drawable/Drawable;->setVisible(ZZ)Z
+HSPLandroid/graphics/drawable/Drawable;->setVisible(ZZ)Z+]Landroid/graphics/drawable/Drawable;megamorphic_types
 HSPLandroid/graphics/drawable/Drawable;->unscheduleSelf(Ljava/lang/Runnable;)V
-HSPLandroid/graphics/drawable/Drawable;->updateBlendModeFilter(Landroid/graphics/BlendModeColorFilter;Landroid/content/res/ColorStateList;Landroid/graphics/BlendMode;)Landroid/graphics/BlendModeColorFilter;
+HSPLandroid/graphics/drawable/Drawable;->updateBlendModeFilter(Landroid/graphics/BlendModeColorFilter;Landroid/content/res/ColorStateList;Landroid/graphics/BlendMode;)Landroid/graphics/BlendModeColorFilter;+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Landroid/graphics/BlendModeColorFilter;Landroid/graphics/BlendModeColorFilter;]Landroid/graphics/drawable/Drawable;megamorphic_types
 HSPLandroid/graphics/drawable/Drawable;->updateTintFilter(Landroid/graphics/PorterDuffColorFilter;Landroid/content/res/ColorStateList;Landroid/graphics/PorterDuff$Mode;)Landroid/graphics/PorterDuffColorFilter;
 HSPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;-><init>()V
 HSPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;-><init>(Landroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback-IA;)V
 HSPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;->unwrap()Landroid/graphics/drawable/Drawable$Callback;
 HSPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;->wrap(Landroid/graphics/drawable/Drawable$Callback;)Landroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;
-HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;-><init>(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/DrawableContainer;Landroid/content/res/Resources;)V
-HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->addChild(Landroid/graphics/drawable/Drawable;)I
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;-><init>(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/DrawableContainer;Landroid/content/res/Resources;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->addChild(Landroid/graphics/drawable/Drawable;)I+]Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/StateListDrawable$StateListState;,Landroid/graphics/drawable/AnimationDrawable$AnimationState;,Landroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;]Landroid/graphics/drawable/Drawable;megamorphic_types
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->canConstantState()Z
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->clearMutated()V
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->computeConstantSize()V
-HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->createAllFutures()V
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->createAllFutures()V+]Landroid/graphics/drawable/Drawable$ConstantState;Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getCapacity()I
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getChangingConfigurations()I
-HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getChild(I)Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getChild(I)Landroid/graphics/drawable/Drawable;+]Landroid/graphics/drawable/Drawable$ConstantState;Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;,Landroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;,Landroid/graphics/drawable/NinePatchDrawable$NinePatchState;,Landroid/graphics/drawable/AnimationDrawable$AnimationState;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getChildCount()I
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getChildren()[Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getConstantPadding()Landroid/graphics/Rect;
-HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getOpacity()I
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getOpacity()I+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->invalidateCache()V
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->isConstantSize()Z
-HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->isStateful()Z
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->isStateful()Z+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->mutate()V
-HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->prepareDrawable(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->prepareDrawable(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->setConstantSize(Z)V
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->setEnterFadeDuration(I)V
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->setExitFadeDuration(I)V
@@ -7057,35 +7067,35 @@
 HSPLandroid/graphics/drawable/DrawableContainer;->cloneConstantState()Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;
 HSPLandroid/graphics/drawable/DrawableContainer;->draw(Landroid/graphics/Canvas;)V
 HSPLandroid/graphics/drawable/DrawableContainer;->getChangingConfigurations()I
-HSPLandroid/graphics/drawable/DrawableContainer;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
+HSPLandroid/graphics/drawable/DrawableContainer;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;+]Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/LevelListDrawable$LevelListState;]Landroid/graphics/drawable/DrawableContainer;Landroid/graphics/drawable/LevelListDrawable;
 HSPLandroid/graphics/drawable/DrawableContainer;->getCurrent()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/DrawableContainer;->getCurrentIndex()I
-HSPLandroid/graphics/drawable/DrawableContainer;->getIntrinsicHeight()I
-HSPLandroid/graphics/drawable/DrawableContainer;->getIntrinsicWidth()I
+HSPLandroid/graphics/drawable/DrawableContainer;->getIntrinsicHeight()I+]Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/LevelListDrawable$LevelListState;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;
+HSPLandroid/graphics/drawable/DrawableContainer;->getIntrinsicWidth()I+]Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/LevelListDrawable$LevelListState;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;
 HSPLandroid/graphics/drawable/DrawableContainer;->getMinimumHeight()I
 HSPLandroid/graphics/drawable/DrawableContainer;->getMinimumWidth()I
 HSPLandroid/graphics/drawable/DrawableContainer;->getOpacity()I
 HSPLandroid/graphics/drawable/DrawableContainer;->getOpticalInsets()Landroid/graphics/Insets;
 HSPLandroid/graphics/drawable/DrawableContainer;->getOutline(Landroid/graphics/Outline;)V
-HSPLandroid/graphics/drawable/DrawableContainer;->getPadding(Landroid/graphics/Rect;)Z
-HSPLandroid/graphics/drawable/DrawableContainer;->initializeDrawableForDisplay(Landroid/graphics/drawable/Drawable;)V
-HSPLandroid/graphics/drawable/DrawableContainer;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/graphics/drawable/DrawableContainer;->getPadding(Landroid/graphics/Rect;)Z+]Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/LevelListDrawable$LevelListState;]Landroid/graphics/Rect;Landroid/graphics/Rect;
+HSPLandroid/graphics/drawable/DrawableContainer;->initializeDrawableForDisplay(Landroid/graphics/drawable/Drawable;)V+]Landroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;Landroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;]Landroid/graphics/drawable/DrawableContainer;Landroid/graphics/drawable/LevelListDrawable;,Landroid/graphics/drawable/AnimatedStateListDrawable;,Landroid/graphics/drawable/AnimationDrawable;,Lcom/android/internal/graphics/drawable/AnimationScaleListDrawable;,Landroid/graphics/drawable/StateListDrawable;]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/graphics/drawable/DrawableContainer;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/LevelListDrawable$LevelListState;]Landroid/graphics/drawable/Drawable$Callback;Landroid/graphics/drawable/LayerDrawable;]Landroid/graphics/drawable/DrawableContainer;Landroid/graphics/drawable/LevelListDrawable;
 HSPLandroid/graphics/drawable/DrawableContainer;->isAutoMirrored()Z
 HSPLandroid/graphics/drawable/DrawableContainer;->isStateful()Z
-HSPLandroid/graphics/drawable/DrawableContainer;->jumpToCurrentState()V
+HSPLandroid/graphics/drawable/DrawableContainer;->jumpToCurrentState()V+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/LayerDrawable;,Landroid/graphics/drawable/InsetDrawable;,Landroid/graphics/drawable/VectorDrawable;,Landroid/graphics/drawable/ColorDrawable;,Landroid/graphics/drawable/GradientDrawable;,Landroid/graphics/drawable/AnimationDrawable;,Landroid/graphics/drawable/NinePatchDrawable;,Landroid/graphics/drawable/BitmapDrawable;
 HSPLandroid/graphics/drawable/DrawableContainer;->mutate()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/DrawableContainer;->needsMirroring()Z
 HSPLandroid/graphics/drawable/DrawableContainer;->onBoundsChange(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/drawable/DrawableContainer;->onStateChange([I)Z
-HSPLandroid/graphics/drawable/DrawableContainer;->selectDrawable(I)Z
+HSPLandroid/graphics/drawable/DrawableContainer;->selectDrawable(I)Z+]Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/LevelListDrawable$LevelListState;,Landroid/graphics/drawable/StateListDrawable$StateListState;,Landroid/graphics/drawable/AnimationDrawable$AnimationState;,Landroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;,Lcom/android/internal/graphics/drawable/AnimationScaleListDrawable$AnimationScaleListState;]Landroid/graphics/drawable/DrawableContainer;Landroid/graphics/drawable/LevelListDrawable;,Landroid/graphics/drawable/AnimationDrawable;,Landroid/graphics/drawable/StateListDrawable;,Landroid/graphics/drawable/AnimatedStateListDrawable;,Lcom/android/internal/graphics/drawable/AnimationScaleListDrawable;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;,Landroid/graphics/drawable/LayerDrawable;,Landroid/graphics/drawable/NinePatchDrawable;,Landroid/graphics/drawable/AnimationDrawable;,Landroid/graphics/drawable/AnimatedVectorDrawable;
 HSPLandroid/graphics/drawable/DrawableContainer;->setAlpha(I)V
 HSPLandroid/graphics/drawable/DrawableContainer;->setAutoMirrored(Z)V
 HSPLandroid/graphics/drawable/DrawableContainer;->setColorFilter(Landroid/graphics/ColorFilter;)V
-HSPLandroid/graphics/drawable/DrawableContainer;->setConstantState(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;)V
+HSPLandroid/graphics/drawable/DrawableContainer;->setConstantState(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;)V+]Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/LevelListDrawable$LevelListState;
 HSPLandroid/graphics/drawable/DrawableContainer;->setDither(Z)V
 HSPLandroid/graphics/drawable/DrawableContainer;->setHotspot(FF)V
-HSPLandroid/graphics/drawable/DrawableContainer;->setTintBlendMode(Landroid/graphics/BlendMode;)V
-HSPLandroid/graphics/drawable/DrawableContainer;->setTintList(Landroid/content/res/ColorStateList;)V
+HSPLandroid/graphics/drawable/DrawableContainer;->setTintBlendMode(Landroid/graphics/BlendMode;)V+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;
+HSPLandroid/graphics/drawable/DrawableContainer;->setTintList(Landroid/content/res/ColorStateList;)V+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;
 HSPLandroid/graphics/drawable/DrawableContainer;->setVisible(ZZ)Z
 HSPLandroid/graphics/drawable/DrawableContainer;->updateDensity(Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/DrawableInflater;-><init>(Landroid/content/res/Resources;Ljava/lang/ClassLoader;)V
@@ -7105,7 +7115,7 @@
 HSPLandroid/graphics/drawable/DrawableWrapper;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/DrawableWrapper;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/DrawableWrapper;->clearMutated()V
-HSPLandroid/graphics/drawable/DrawableWrapper;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/DrawableWrapper;->draw(Landroid/graphics/Canvas;)V+]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/DrawableWrapper;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/DrawableWrapper;->getColorFilter()Landroid/graphics/ColorFilter;
 HSPLandroid/graphics/drawable/DrawableWrapper;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
@@ -7116,7 +7126,7 @@
 HSPLandroid/graphics/drawable/DrawableWrapper;->getPadding(Landroid/graphics/Rect;)Z
 HSPLandroid/graphics/drawable/DrawableWrapper;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/DrawableWrapper;->inflateChildDrawable(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
-HSPLandroid/graphics/drawable/DrawableWrapper;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/graphics/drawable/DrawableWrapper;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/graphics/drawable/Drawable$Callback;Landroid/graphics/drawable/RippleDrawable;]Landroid/graphics/drawable/DrawableWrapper;Landroid/graphics/drawable/InsetDrawable;
 HSPLandroid/graphics/drawable/DrawableWrapper;->isStateful()Z
 HSPLandroid/graphics/drawable/DrawableWrapper;->jumpToCurrentState()V
 HSPLandroid/graphics/drawable/DrawableWrapper;->mutate()Landroid/graphics/drawable/Drawable;
@@ -7126,7 +7136,7 @@
 HSPLandroid/graphics/drawable/DrawableWrapper;->onStateChange([I)Z
 HSPLandroid/graphics/drawable/DrawableWrapper;->setAlpha(I)V
 HSPLandroid/graphics/drawable/DrawableWrapper;->setColorFilter(Landroid/graphics/ColorFilter;)V
-HSPLandroid/graphics/drawable/DrawableWrapper;->setDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/graphics/drawable/DrawableWrapper;->setDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/graphics/drawable/DrawableWrapper;missing_types]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/DrawableWrapper;->setHotspot(FF)V
 HSPLandroid/graphics/drawable/DrawableWrapper;->setTintBlendMode(Landroid/graphics/BlendMode;)V
 HSPLandroid/graphics/drawable/DrawableWrapper;->setTintList(Landroid/content/res/ColorStateList;)V
@@ -7134,12 +7144,12 @@
 HSPLandroid/graphics/drawable/DrawableWrapper;->updateLocalState(Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/DrawableWrapper;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->-$$Nest$mcomputeOpacity(Landroid/graphics/drawable/GradientDrawable$GradientState;)V
-HSPLandroid/graphics/drawable/GradientDrawable$GradientState;-><init>(Landroid/graphics/drawable/GradientDrawable$GradientState;Landroid/content/res/Resources;)V+][F[F
-HSPLandroid/graphics/drawable/GradientDrawable$GradientState;-><init>(Landroid/graphics/drawable/GradientDrawable$Orientation;[I)V
+HSPLandroid/graphics/drawable/GradientDrawable$GradientState;-><init>(Landroid/graphics/drawable/GradientDrawable$GradientState;Landroid/content/res/Resources;)V+][F[F][Landroid/content/res/ColorStateList;[Landroid/content/res/ColorStateList;
+HSPLandroid/graphics/drawable/GradientDrawable$GradientState;-><init>(Landroid/graphics/drawable/GradientDrawable$Orientation;[I)V+]Landroid/graphics/drawable/GradientDrawable$GradientState;Landroid/graphics/drawable/GradientDrawable$GradientState;
 HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->applyDensityScaling(II)V
 HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->canApplyTheme()Z
-HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->computeOpacity()V
-HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->getChangingConfigurations()I
+HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->computeOpacity()V+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;
+HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->getChangingConfigurations()I+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;
 HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->hasCenterColor()Z
 HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->newDrawable()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
@@ -7156,8 +7166,8 @@
 HSPLandroid/graphics/drawable/GradientDrawable;->applyThemeChildElements(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/GradientDrawable;->clearMutated()V
-HSPLandroid/graphics/drawable/GradientDrawable;->draw(Landroid/graphics/Canvas;)V+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;,Landroid/graphics/Canvas;
-HSPLandroid/graphics/drawable/GradientDrawable;->ensureValidRect()Z+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/graphics/drawable/GradientDrawable;Landroid/graphics/drawable/GradientDrawable;
+HSPLandroid/graphics/drawable/GradientDrawable;->draw(Landroid/graphics/Canvas;)V+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/graphics/Canvas;Landroid/graphics/Picture$PictureCanvas;,Landroid/graphics/RecordingCanvas;,Landroid/graphics/Canvas;
+HSPLandroid/graphics/drawable/GradientDrawable;->ensureValidRect()Z+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/graphics/drawable/GradientDrawable;Landroid/graphics/drawable/GradientDrawable;]Landroid/graphics/drawable/GradientDrawable$Orientation;Landroid/graphics/drawable/GradientDrawable$Orientation;]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Landroid/graphics/Paint;Landroid/graphics/Paint;
 HSPLandroid/graphics/drawable/GradientDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/GradientDrawable;->getColorFilter()Landroid/graphics/ColorFilter;
 HSPLandroid/graphics/drawable/GradientDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
@@ -7168,17 +7178,17 @@
 HSPLandroid/graphics/drawable/GradientDrawable;->getOutline(Landroid/graphics/Outline;)V+]Landroid/graphics/drawable/GradientDrawable;Landroid/graphics/drawable/GradientDrawable;]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/Outline;Landroid/graphics/Outline;
 HSPLandroid/graphics/drawable/GradientDrawable;->getPadding(Landroid/graphics/Rect;)Z
 HSPLandroid/graphics/drawable/GradientDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
-HSPLandroid/graphics/drawable/GradientDrawable;->inflateChildElements(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/GradientDrawable;->inflateChildElements(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V+]Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/XmlBlock$Parser;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/graphics/drawable/GradientDrawable;->isOpaque(I)Z
 HSPLandroid/graphics/drawable/GradientDrawable;->isOpaqueForState()Z
-HSPLandroid/graphics/drawable/GradientDrawable;->isStateful()Z
+HSPLandroid/graphics/drawable/GradientDrawable;->isStateful()Z+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;
 HSPLandroid/graphics/drawable/GradientDrawable;->modulateAlpha(I)I
 HSPLandroid/graphics/drawable/GradientDrawable;->mutate()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/GradientDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->onLevelChange(I)Z
-HSPLandroid/graphics/drawable/GradientDrawable;->onStateChange([I)Z
-HSPLandroid/graphics/drawable/GradientDrawable;->setAlpha(I)V
-HSPLandroid/graphics/drawable/GradientDrawable;->setColor(I)V
+HSPLandroid/graphics/drawable/GradientDrawable;->onStateChange([I)Z+]Landroid/graphics/drawable/GradientDrawable;Landroid/graphics/drawable/GradientDrawable;]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Landroid/graphics/Paint;Landroid/graphics/Paint;
+HSPLandroid/graphics/drawable/GradientDrawable;->setAlpha(I)V+]Landroid/graphics/drawable/GradientDrawable;Landroid/graphics/drawable/GradientDrawable;
+HSPLandroid/graphics/drawable/GradientDrawable;->setColor(I)V+]Landroid/graphics/drawable/GradientDrawable$GradientState;Landroid/graphics/drawable/GradientDrawable$GradientState;]Landroid/graphics/drawable/GradientDrawable;Landroid/graphics/drawable/GradientDrawable;]Landroid/graphics/Paint;Landroid/graphics/Paint;
 HSPLandroid/graphics/drawable/GradientDrawable;->setColor(Landroid/content/res/ColorStateList;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->setColorFilter(Landroid/graphics/ColorFilter;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->setCornerRadii([F)V
@@ -7189,7 +7199,7 @@
 HSPLandroid/graphics/drawable/GradientDrawable;->setStroke(IIFF)V
 HSPLandroid/graphics/drawable/GradientDrawable;->setStroke(ILandroid/content/res/ColorStateList;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->setStroke(ILandroid/content/res/ColorStateList;FF)V
-HSPLandroid/graphics/drawable/GradientDrawable;->setStrokeInternal(IIFF)V
+HSPLandroid/graphics/drawable/GradientDrawable;->setStrokeInternal(IIFF)V+]Landroid/graphics/drawable/GradientDrawable;Landroid/graphics/drawable/GradientDrawable;]Landroid/graphics/Paint;Landroid/graphics/Paint;
 HSPLandroid/graphics/drawable/GradientDrawable;->setTintBlendMode(Landroid/graphics/BlendMode;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->setTintList(Landroid/content/res/ColorStateList;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->updateDrawableCorners(Landroid/content/res/TypedArray;)V
@@ -7198,10 +7208,10 @@
 HSPLandroid/graphics/drawable/GradientDrawable;->updateGradientDrawableSize(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->updateGradientDrawableSolid(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->updateGradientDrawableStroke(Landroid/content/res/TypedArray;)V
-HSPLandroid/graphics/drawable/GradientDrawable;->updateLocalState(Landroid/content/res/Resources;)V
-HSPLandroid/graphics/drawable/GradientDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
+HSPLandroid/graphics/drawable/GradientDrawable;->updateLocalState(Landroid/content/res/Resources;)V+]Landroid/graphics/drawable/GradientDrawable;Landroid/graphics/drawable/GradientDrawable;]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Landroid/graphics/Paint;Landroid/graphics/Paint;
+HSPLandroid/graphics/drawable/GradientDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/graphics/drawable/Icon$1;->createFromParcel(Landroid/os/Parcel;)Landroid/graphics/drawable/Icon;
-HSPLandroid/graphics/drawable/Icon$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/graphics/drawable/Icon$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/graphics/drawable/Icon$1;Landroid/graphics/drawable/Icon$1;
 HSPLandroid/graphics/drawable/Icon;-><init>(I)V
 HSPLandroid/graphics/drawable/Icon;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/graphics/Bitmap$1;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/graphics/drawable/Icon;->createWithAdaptiveBitmap(Landroid/graphics/Bitmap;)Landroid/graphics/drawable/Icon;
@@ -7221,9 +7231,9 @@
 HSPLandroid/graphics/drawable/Icon;->scaleDownIfNecessary(Landroid/graphics/Bitmap;II)Landroid/graphics/Bitmap;
 HSPLandroid/graphics/drawable/Icon;->setBitmap(Landroid/graphics/Bitmap;)V
 HSPLandroid/graphics/drawable/Icon;->setTint(I)Landroid/graphics/drawable/Icon;
-HSPLandroid/graphics/drawable/Icon;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/graphics/drawable/Icon;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/graphics/drawable/Icon;Landroid/graphics/drawable/Icon;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/graphics/drawable/InsetDrawable$InsetState;->-$$Nest$fputmThemeAttrs(Landroid/graphics/drawable/InsetDrawable$InsetState;[I)V
-HSPLandroid/graphics/drawable/InsetDrawable$InsetState;-><init>(Landroid/graphics/drawable/InsetDrawable$InsetState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/InsetDrawable$InsetState;-><init>(Landroid/graphics/drawable/InsetDrawable$InsetState;Landroid/content/res/Resources;)V+]Landroid/graphics/drawable/InsetDrawable$InsetValue;Landroid/graphics/drawable/InsetDrawable$InsetValue;
 HSPLandroid/graphics/drawable/InsetDrawable$InsetState;->applyDensityScaling(II)V
 HSPLandroid/graphics/drawable/InsetDrawable$InsetState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/InsetDrawable$InsetState;->onDensityChanged(II)V
@@ -7239,19 +7249,19 @@
 HSPLandroid/graphics/drawable/InsetDrawable;-><init>(Landroid/graphics/drawable/InsetDrawable$InsetState;Landroid/content/res/Resources;Landroid/graphics/drawable/InsetDrawable-IA;)V
 HSPLandroid/graphics/drawable/InsetDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/InsetDrawable;->getInset(Landroid/content/res/TypedArray;ILandroid/graphics/drawable/InsetDrawable$InsetValue;)Landroid/graphics/drawable/InsetDrawable$InsetValue;
-HSPLandroid/graphics/drawable/InsetDrawable;->getInsets(Landroid/graphics/Rect;)V+]Landroid/graphics/drawable/InsetDrawable;Landroid/graphics/drawable/InsetDrawable;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/InsetDrawable$InsetValue;Landroid/graphics/drawable/InsetDrawable$InsetValue;
-HSPLandroid/graphics/drawable/InsetDrawable;->getIntrinsicHeight()I
-HSPLandroid/graphics/drawable/InsetDrawable;->getIntrinsicWidth()I
+HSPLandroid/graphics/drawable/InsetDrawable;->getInsets(Landroid/graphics/Rect;)V+]Landroid/graphics/drawable/InsetDrawable;missing_types]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/InsetDrawable$InsetValue;Landroid/graphics/drawable/InsetDrawable$InsetValue;
+HSPLandroid/graphics/drawable/InsetDrawable;->getIntrinsicHeight()I+]Landroid/graphics/drawable/InsetDrawable;missing_types]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/graphics/drawable/InsetDrawable;->getIntrinsicWidth()I+]Landroid/graphics/drawable/InsetDrawable;missing_types]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/InsetDrawable;->getOpacity()I
-HSPLandroid/graphics/drawable/InsetDrawable;->getOutline(Landroid/graphics/Outline;)V+]Landroid/graphics/drawable/InsetDrawable;Landroid/graphics/drawable/InsetDrawable;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;
+HSPLandroid/graphics/drawable/InsetDrawable;->getOutline(Landroid/graphics/Outline;)V+]Landroid/graphics/drawable/InsetDrawable;missing_types]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/InsetDrawable;->getPadding(Landroid/graphics/Rect;)Z
 HSPLandroid/graphics/drawable/InsetDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/InsetDrawable;->mutateConstantState()Landroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;
-HSPLandroid/graphics/drawable/InsetDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/drawable/InsetDrawable;->onBoundsChange(Landroid/graphics/Rect;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/InsetDrawable$InsetValue;Landroid/graphics/drawable/InsetDrawable$InsetValue;
 HSPLandroid/graphics/drawable/InsetDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/InsetDrawable;->verifyRequiredAttributes(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/LayerDrawable$ChildDrawable;-><init>(I)V
-HSPLandroid/graphics/drawable/LayerDrawable$ChildDrawable;-><init>(Landroid/graphics/drawable/LayerDrawable$ChildDrawable;Landroid/graphics/drawable/LayerDrawable;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/LayerDrawable$ChildDrawable;-><init>(Landroid/graphics/drawable/LayerDrawable$ChildDrawable;Landroid/graphics/drawable/LayerDrawable;Landroid/content/res/Resources;)V+]Landroid/graphics/drawable/Drawable$ConstantState;megamorphic_types]Landroid/graphics/drawable/Drawable;megamorphic_types
 HSPLandroid/graphics/drawable/LayerDrawable$ChildDrawable;->applyDensityScaling(II)V
 HSPLandroid/graphics/drawable/LayerDrawable$ChildDrawable;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/LayerDrawable$ChildDrawable;->setDensity(I)V
@@ -7263,49 +7273,49 @@
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->canConstantState()Z
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->getChangingConfigurations()I
-HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->getOpacity()I
+HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->getOpacity()I+]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->invalidateCache()V
-HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->isStateful()Z
+HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->isStateful()Z+]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->newDrawable()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->onDensityChanged(II)V
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->setDensity(I)V
 HSPLandroid/graphics/drawable/LayerDrawable;-><init>()V
-HSPLandroid/graphics/drawable/LayerDrawable;-><init>(Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/LayerDrawable;-><init>(Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/content/res/Resources;)V+]Landroid/graphics/drawable/LayerDrawable;missing_types
 HSPLandroid/graphics/drawable/LayerDrawable;-><init>([Landroid/graphics/drawable/Drawable;)V
-HSPLandroid/graphics/drawable/LayerDrawable;-><init>([Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/LayerDrawable$LayerState;)V
-HSPLandroid/graphics/drawable/LayerDrawable;->addLayer(Landroid/graphics/drawable/Drawable;[IIIIII)Landroid/graphics/drawable/LayerDrawable$ChildDrawable;
-HSPLandroid/graphics/drawable/LayerDrawable;->addLayer(Landroid/graphics/drawable/LayerDrawable$ChildDrawable;)I
+HSPLandroid/graphics/drawable/LayerDrawable;-><init>([Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/LayerDrawable$LayerState;)V+]Landroid/graphics/drawable/LayerDrawable;Landroid/graphics/drawable/TransitionDrawable;,Landroid/graphics/drawable/LayerDrawable;]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/graphics/drawable/LayerDrawable;->addLayer(Landroid/graphics/drawable/Drawable;[IIIIII)Landroid/graphics/drawable/LayerDrawable$ChildDrawable;+]Landroid/graphics/drawable/LayerDrawable;Landroid/graphics/drawable/RippleDrawable;]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/graphics/drawable/LayerDrawable;->addLayer(Landroid/graphics/drawable/LayerDrawable$ChildDrawable;)I+]Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/graphics/drawable/RippleDrawable$RippleState;
 HSPLandroid/graphics/drawable/LayerDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/LayerDrawable;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/LayerDrawable;->clearMutated()V
 HSPLandroid/graphics/drawable/LayerDrawable;->computeNestedPadding(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/drawable/LayerDrawable;->computeStackedPadding(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/drawable/LayerDrawable;->createConstantState(Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/content/res/Resources;)Landroid/graphics/drawable/LayerDrawable$LayerState;
-HSPLandroid/graphics/drawable/LayerDrawable;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/LayerDrawable;->draw(Landroid/graphics/Canvas;)V+]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/LayerDrawable;->ensurePadding()V
 HSPLandroid/graphics/drawable/LayerDrawable;->findDrawableByLayerId(I)Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/LayerDrawable;->findIndexByLayerId(I)I
 HSPLandroid/graphics/drawable/LayerDrawable;->getChangingConfigurations()I
-HSPLandroid/graphics/drawable/LayerDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
+HSPLandroid/graphics/drawable/LayerDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;+]Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/graphics/drawable/LayerDrawable$LayerState;]Landroid/graphics/drawable/LayerDrawable;Landroid/graphics/drawable/LayerDrawable;
 HSPLandroid/graphics/drawable/LayerDrawable;->getDrawable(I)Landroid/graphics/drawable/Drawable;
-HSPLandroid/graphics/drawable/LayerDrawable;->getIntrinsicHeight()I
-HSPLandroid/graphics/drawable/LayerDrawable;->getIntrinsicWidth()I
+HSPLandroid/graphics/drawable/LayerDrawable;->getIntrinsicHeight()I+]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/graphics/drawable/LayerDrawable;->getIntrinsicWidth()I+]Landroid/graphics/drawable/LayerDrawable;missing_types]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/LayerDrawable;->getNumberOfLayers()I
-HSPLandroid/graphics/drawable/LayerDrawable;->getOpacity()I
-HSPLandroid/graphics/drawable/LayerDrawable;->getOutline(Landroid/graphics/Outline;)V
-HSPLandroid/graphics/drawable/LayerDrawable;->getPadding(Landroid/graphics/Rect;)Z
+HSPLandroid/graphics/drawable/LayerDrawable;->getOpacity()I+]Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/graphics/drawable/LayerDrawable$LayerState;,Landroid/graphics/drawable/TransitionDrawable$TransitionState;
+HSPLandroid/graphics/drawable/LayerDrawable;->getOutline(Landroid/graphics/Outline;)V+]Landroid/graphics/Outline;Landroid/graphics/Outline;]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/graphics/drawable/LayerDrawable;->getPadding(Landroid/graphics/Rect;)Z+]Landroid/graphics/drawable/LayerDrawable;Landroid/graphics/drawable/RippleDrawable;,Landroid/graphics/drawable/LayerDrawable;
 HSPLandroid/graphics/drawable/LayerDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/LayerDrawable;->inflateLayers(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
-HSPLandroid/graphics/drawable/LayerDrawable;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/graphics/drawable/LayerDrawable;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/graphics/drawable/LayerDrawable$LayerState;,Landroid/graphics/drawable/RippleDrawable$RippleState;,Landroid/graphics/drawable/TransitionDrawable$TransitionState;]Landroid/graphics/drawable/LayerDrawable;missing_types
 HSPLandroid/graphics/drawable/LayerDrawable;->isAutoMirrored()Z
-HSPLandroid/graphics/drawable/LayerDrawable;->isProjected()Z
+HSPLandroid/graphics/drawable/LayerDrawable;->isProjected()Z+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;,Landroid/graphics/drawable/InsetDrawable;,Landroid/graphics/drawable/RippleDrawable;,Landroid/graphics/drawable/ColorDrawable;,Landroid/graphics/drawable/StateListDrawable;
 HSPLandroid/graphics/drawable/LayerDrawable;->isStateful()Z
-HSPLandroid/graphics/drawable/LayerDrawable;->jumpToCurrentState()V
-HSPLandroid/graphics/drawable/LayerDrawable;->mutate()Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/LayerDrawable;->jumpToCurrentState()V+]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/graphics/drawable/LayerDrawable;->mutate()Landroid/graphics/drawable/Drawable;+]Landroid/graphics/drawable/LayerDrawable;Landroid/graphics/drawable/LayerDrawable;,Landroid/graphics/drawable/RippleDrawable;]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/LayerDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
-HSPLandroid/graphics/drawable/LayerDrawable;->onStateChange([I)Z
-HSPLandroid/graphics/drawable/LayerDrawable;->refreshChildPadding(ILandroid/graphics/drawable/LayerDrawable$ChildDrawable;)Z
+HSPLandroid/graphics/drawable/LayerDrawable;->onStateChange([I)Z+]Landroid/graphics/drawable/LayerDrawable;Landroid/graphics/drawable/LayerDrawable;,Landroid/graphics/drawable/RippleDrawable;]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/graphics/drawable/LayerDrawable;->refreshChildPadding(ILandroid/graphics/drawable/LayerDrawable$ChildDrawable;)Z+]Landroid/graphics/drawable/Drawable;megamorphic_types
 HSPLandroid/graphics/drawable/LayerDrawable;->refreshPadding()V
 HSPLandroid/graphics/drawable/LayerDrawable;->resolveGravity(IIIII)I
 HSPLandroid/graphics/drawable/LayerDrawable;->resumeChildInvalidation()V
@@ -7321,10 +7331,10 @@
 HSPLandroid/graphics/drawable/LayerDrawable;->setPaddingMode(I)V
 HSPLandroid/graphics/drawable/LayerDrawable;->setTintBlendMode(Landroid/graphics/BlendMode;)V
 HSPLandroid/graphics/drawable/LayerDrawable;->setTintList(Landroid/content/res/ColorStateList;)V
-HSPLandroid/graphics/drawable/LayerDrawable;->setVisible(ZZ)Z
+HSPLandroid/graphics/drawable/LayerDrawable;->setVisible(ZZ)Z+]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/LayerDrawable;->suspendChildInvalidation()V
 HSPLandroid/graphics/drawable/LayerDrawable;->updateLayerBounds(Landroid/graphics/Rect;)V
-HSPLandroid/graphics/drawable/LayerDrawable;->updateLayerBoundsInternal(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/drawable/LayerDrawable;->updateLayerBoundsInternal(Landroid/graphics/Rect;)V+]Landroid/graphics/drawable/LayerDrawable;missing_types]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/LayerDrawable;->updateLayerFromTypedArray(Landroid/graphics/drawable/LayerDrawable$ChildDrawable;Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/LayerDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/NinePatchDrawable$$ExternalSyntheticLambda0;->onHeaderDecoded(Landroid/graphics/ImageDecoder;Landroid/graphics/ImageDecoder$ImageInfo;Landroid/graphics/ImageDecoder$Source;)V
@@ -7341,8 +7351,8 @@
 HSPLandroid/graphics/drawable/NinePatchDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/NinePatchDrawable;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/NinePatchDrawable;->clearMutated()V
-HSPLandroid/graphics/drawable/NinePatchDrawable;->computeBitmapSize()V
-HSPLandroid/graphics/drawable/NinePatchDrawable;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/NinePatchDrawable;->computeBitmapSize()V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;]Landroid/graphics/NinePatch;Landroid/graphics/NinePatch;
+HSPLandroid/graphics/drawable/NinePatchDrawable;->draw(Landroid/graphics/Canvas;)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/NinePatchDrawable;Landroid/graphics/drawable/NinePatchDrawable;]Landroid/graphics/NinePatch;Landroid/graphics/NinePatch;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;,Landroid/graphics/Picture$PictureCanvas;
 HSPLandroid/graphics/drawable/NinePatchDrawable;->getAlpha()I
 HSPLandroid/graphics/drawable/NinePatchDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/NinePatchDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
@@ -7351,7 +7361,7 @@
 HSPLandroid/graphics/drawable/NinePatchDrawable;->getOpacity()I
 HSPLandroid/graphics/drawable/NinePatchDrawable;->getOpticalInsets()Landroid/graphics/Insets;
 HSPLandroid/graphics/drawable/NinePatchDrawable;->getOutline(Landroid/graphics/Outline;)V
-HSPLandroid/graphics/drawable/NinePatchDrawable;->getPadding(Landroid/graphics/Rect;)Z
+HSPLandroid/graphics/drawable/NinePatchDrawable;->getPadding(Landroid/graphics/Rect;)Z+]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/graphics/drawable/NinePatchDrawable;->getPaint()Landroid/graphics/Paint;
 HSPLandroid/graphics/drawable/NinePatchDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/NinePatchDrawable;->isAutoMirrored()Z
@@ -7364,8 +7374,8 @@
 HSPLandroid/graphics/drawable/NinePatchDrawable;->setDither(Z)V
 HSPLandroid/graphics/drawable/NinePatchDrawable;->setTintBlendMode(Landroid/graphics/BlendMode;)V
 HSPLandroid/graphics/drawable/NinePatchDrawable;->setTintList(Landroid/content/res/ColorStateList;)V
-HSPLandroid/graphics/drawable/NinePatchDrawable;->updateLocalState(Landroid/content/res/Resources;)V
-HSPLandroid/graphics/drawable/NinePatchDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
+HSPLandroid/graphics/drawable/NinePatchDrawable;->updateLocalState(Landroid/content/res/Resources;)V+]Landroid/graphics/drawable/NinePatchDrawable;Landroid/graphics/drawable/NinePatchDrawable;
+HSPLandroid/graphics/drawable/NinePatchDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;]Ljava/io/InputStream;Landroid/content/res/AssetManager$AssetInputStream;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/graphics/drawable/RippleAnimationSession$2;-><init>(Landroid/graphics/drawable/RippleAnimationSession;Landroid/graphics/drawable/RippleAnimationSession;Landroid/graphics/animation/RenderNodeAnimator;)V
 HSPLandroid/graphics/drawable/RippleAnimationSession$2;->onAnimationEnd(Landroid/animation/Animator;)V
 HSPLandroid/graphics/drawable/RippleAnimationSession$3;-><init>(Landroid/graphics/drawable/RippleAnimationSession;Landroid/graphics/drawable/RippleAnimationSession;)V
@@ -7408,7 +7418,7 @@
 HSPLandroid/graphics/drawable/RippleAnimationSession;->useRTAnimations(Landroid/graphics/Canvas;)Z
 HSPLandroid/graphics/drawable/RippleComponent;->onBoundsChange()V
 HSPLandroid/graphics/drawable/RippleDrawable$$ExternalSyntheticLambda0;-><init>(Landroid/graphics/drawable/RippleDrawable;)V
-HSPLandroid/graphics/drawable/RippleDrawable$$ExternalSyntheticLambda0;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V
+HSPLandroid/graphics/drawable/RippleDrawable$$ExternalSyntheticLambda0;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V+]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;
 HSPLandroid/graphics/drawable/RippleDrawable$$ExternalSyntheticLambda1;-><init>(Landroid/graphics/drawable/RippleDrawable;)V
 HSPLandroid/graphics/drawable/RippleDrawable$$ExternalSyntheticLambda1;->run()V
 HSPLandroid/graphics/drawable/RippleDrawable$$ExternalSyntheticLambda2;-><init>(Landroid/graphics/drawable/RippleDrawable;)V
@@ -7422,11 +7432,11 @@
 HSPLandroid/graphics/drawable/RippleDrawable$RippleState;->onDensityChanged(II)V
 HSPLandroid/graphics/drawable/RippleDrawable;-><init>()V
 HSPLandroid/graphics/drawable/RippleDrawable;-><init>(Landroid/content/res/ColorStateList;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
-HSPLandroid/graphics/drawable/RippleDrawable;-><init>(Landroid/graphics/drawable/RippleDrawable$RippleState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/RippleDrawable;-><init>(Landroid/graphics/drawable/RippleDrawable$RippleState;Landroid/content/res/Resources;)V+]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;
 HSPLandroid/graphics/drawable/RippleDrawable;-><init>(Landroid/graphics/drawable/RippleDrawable$RippleState;Landroid/content/res/Resources;Landroid/graphics/drawable/RippleDrawable-IA;)V
 HSPLandroid/graphics/drawable/RippleDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/RippleDrawable;->canApplyTheme()Z
-HSPLandroid/graphics/drawable/RippleDrawable;->cancelExitingRipples()V
+HSPLandroid/graphics/drawable/RippleDrawable;->cancelExitingRipples()V+]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;
 HSPLandroid/graphics/drawable/RippleDrawable;->clampAlpha(I)I
 HSPLandroid/graphics/drawable/RippleDrawable;->clearHotspots()V
 HSPLandroid/graphics/drawable/RippleDrawable;->computeRadius()F
@@ -7435,30 +7445,30 @@
 HSPLandroid/graphics/drawable/RippleDrawable;->createConstantState(Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/content/res/Resources;)Landroid/graphics/drawable/RippleDrawable$RippleState;
 HSPLandroid/graphics/drawable/RippleDrawable;->draw(Landroid/graphics/Canvas;)V
 HSPLandroid/graphics/drawable/RippleDrawable;->drawBackgroundAndRipples(Landroid/graphics/Canvas;)V
-HSPLandroid/graphics/drawable/RippleDrawable;->drawContent(Landroid/graphics/Canvas;)V+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;,Landroid/graphics/drawable/InsetDrawable;
-HSPLandroid/graphics/drawable/RippleDrawable;->drawPatterned(Landroid/graphics/Canvas;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/RippleAnimationSession$AnimationProperties;Landroid/graphics/drawable/RippleAnimationSession$AnimationProperties;]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/drawable/RippleAnimationSession;Landroid/graphics/drawable/RippleAnimationSession;
+HSPLandroid/graphics/drawable/RippleDrawable;->drawContent(Landroid/graphics/Canvas;)V+]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/graphics/drawable/RippleDrawable;->drawPatterned(Landroid/graphics/Canvas;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/RippleAnimationSession$AnimationProperties;Landroid/graphics/drawable/RippleAnimationSession$AnimationProperties;]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;,Landroid/graphics/Picture$PictureCanvas;]Landroid/graphics/drawable/RippleAnimationSession;Landroid/graphics/drawable/RippleAnimationSession;
 HSPLandroid/graphics/drawable/RippleDrawable;->drawPatternedBackground(Landroid/graphics/Canvas;FF)V
 HSPLandroid/graphics/drawable/RippleDrawable;->exitPatternedAnimation()V
-HSPLandroid/graphics/drawable/RippleDrawable;->exitPatternedBackgroundAnimation()V
+HSPLandroid/graphics/drawable/RippleDrawable;->exitPatternedBackgroundAnimation()V+]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;]Landroid/animation/ValueAnimator;Landroid/animation/ValueAnimator;
 HSPLandroid/graphics/drawable/RippleDrawable;->getComputedRadius()I
 HSPLandroid/graphics/drawable/RippleDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
 HSPLandroid/graphics/drawable/RippleDrawable;->getDirtyBounds()Landroid/graphics/Rect;+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;
 HSPLandroid/graphics/drawable/RippleDrawable;->getMaskType()I
 HSPLandroid/graphics/drawable/RippleDrawable;->getOpacity()I
-HSPLandroid/graphics/drawable/RippleDrawable;->getOutline(Landroid/graphics/Outline;)V+]Landroid/graphics/Outline;Landroid/graphics/Outline;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;,Landroid/graphics/drawable/InsetDrawable;
+HSPLandroid/graphics/drawable/RippleDrawable;->getOutline(Landroid/graphics/Outline;)V+]Landroid/graphics/Outline;Landroid/graphics/Outline;]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/RippleDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/RippleDrawable;->invalidateSelf()V
 HSPLandroid/graphics/drawable/RippleDrawable;->invalidateSelf(Z)V
-HSPLandroid/graphics/drawable/RippleDrawable;->isBounded()Z
-HSPLandroid/graphics/drawable/RippleDrawable;->isProjected()Z
+HSPLandroid/graphics/drawable/RippleDrawable;->isBounded()Z+]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;
+HSPLandroid/graphics/drawable/RippleDrawable;->isProjected()Z+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;
 HSPLandroid/graphics/drawable/RippleDrawable;->isStateful()Z
 HSPLandroid/graphics/drawable/RippleDrawable;->jumpToCurrentState()V
 HSPLandroid/graphics/drawable/RippleDrawable;->lambda$drawPatterned$1$android-graphics-drawable-RippleDrawable()V
 HSPLandroid/graphics/drawable/RippleDrawable;->lambda$drawPatterned$2$android-graphics-drawable-RippleDrawable(Landroid/graphics/drawable/RippleAnimationSession;)V
-HSPLandroid/graphics/drawable/RippleDrawable;->lambda$startBackgroundAnimation$0$android-graphics-drawable-RippleDrawable(Landroid/animation/ValueAnimator;)V+]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;]Ljava/lang/Float;Ljava/lang/Float;]Landroid/animation/ValueAnimator;Landroid/animation/ValueAnimator;
+HSPLandroid/graphics/drawable/RippleDrawable;->lambda$startBackgroundAnimation$0$android-graphics-drawable-RippleDrawable(Landroid/animation/ValueAnimator;)V+]Landroid/graphics/drawable/RippleDrawable;missing_types]Ljava/lang/Float;Ljava/lang/Float;]Landroid/animation/ValueAnimator;Landroid/animation/ValueAnimator;
 HSPLandroid/graphics/drawable/RippleDrawable;->mutate()Landroid/graphics/drawable/Drawable;
-HSPLandroid/graphics/drawable/RippleDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
-HSPLandroid/graphics/drawable/RippleDrawable;->onHotspotBoundsChanged()V
+HSPLandroid/graphics/drawable/RippleDrawable;->onBoundsChange(Landroid/graphics/Rect;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;
+HSPLandroid/graphics/drawable/RippleDrawable;->onHotspotBoundsChanged()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/graphics/drawable/RippleDrawable;->onStateChange([I)Z
 HSPLandroid/graphics/drawable/RippleDrawable;->pruneRipples()V
 HSPLandroid/graphics/drawable/RippleDrawable;->setBackgroundActive(ZZZ)V
@@ -7468,9 +7478,9 @@
 HSPLandroid/graphics/drawable/RippleDrawable;->setPaddingMode(I)V
 HSPLandroid/graphics/drawable/RippleDrawable;->setRippleActive(Z)V
 HSPLandroid/graphics/drawable/RippleDrawable;->setVisible(ZZ)Z
-HSPLandroid/graphics/drawable/RippleDrawable;->startBackgroundAnimation()V
+HSPLandroid/graphics/drawable/RippleDrawable;->startBackgroundAnimation()V+]Landroid/animation/ValueAnimator;Landroid/animation/ValueAnimator;
 HSPLandroid/graphics/drawable/RippleDrawable;->tryRippleEnter()V
-HSPLandroid/graphics/drawable/RippleDrawable;->updateLocalState()V
+HSPLandroid/graphics/drawable/RippleDrawable;->updateLocalState()V+]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;
 HSPLandroid/graphics/drawable/RippleDrawable;->updateMaskShaderIfNeeded()V
 HSPLandroid/graphics/drawable/RippleDrawable;->updateRipplePaint()Landroid/graphics/Paint;+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/graphics/drawable/RippleShader;Landroid/graphics/drawable/RippleShader;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/BitmapShader;Landroid/graphics/BitmapShader;]Landroid/graphics/drawable/RippleAnimationSession$AnimationProperties;Landroid/graphics/drawable/RippleAnimationSession$AnimationProperties;]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;]Landroid/graphics/PorterDuffColorFilter;Landroid/graphics/PorterDuffColorFilter;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/graphics/drawable/RippleAnimationSession;Landroid/graphics/drawable/RippleAnimationSession;
 HSPLandroid/graphics/drawable/RippleDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
@@ -7541,7 +7551,7 @@
 HSPLandroid/graphics/drawable/ShapeDrawable;-><init>()V
 HSPLandroid/graphics/drawable/ShapeDrawable;-><init>(Landroid/graphics/drawable/ShapeDrawable$ShapeState;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/ShapeDrawable;-><init>(Landroid/graphics/drawable/shapes/Shape;)V
-HSPLandroid/graphics/drawable/ShapeDrawable;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/ShapeDrawable;->draw(Landroid/graphics/Canvas;)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/graphics/drawable/ShapeDrawable;Landroid/graphics/drawable/PaintDrawable;,Landroid/graphics/drawable/ShapeDrawable;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
 HSPLandroid/graphics/drawable/ShapeDrawable;->getAlpha()I
 HSPLandroid/graphics/drawable/ShapeDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/ShapeDrawable;->getIntrinsicHeight()I
@@ -7564,7 +7574,7 @@
 HSPLandroid/graphics/drawable/StateListDrawable$StateListState;-><init>(Landroid/graphics/drawable/StateListDrawable$StateListState;Landroid/graphics/drawable/StateListDrawable;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/StateListDrawable$StateListState;->addStateSet([ILandroid/graphics/drawable/Drawable;)I
 HSPLandroid/graphics/drawable/StateListDrawable$StateListState;->canApplyTheme()Z
-HSPLandroid/graphics/drawable/StateListDrawable$StateListState;->indexOfStateSet([I)I
+HSPLandroid/graphics/drawable/StateListDrawable$StateListState;->indexOfStateSet([I)I+]Landroid/graphics/drawable/StateListDrawable$StateListState;Landroid/graphics/drawable/StateListDrawable$StateListState;,Landroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;
 HSPLandroid/graphics/drawable/StateListDrawable$StateListState;->mutate()V
 HSPLandroid/graphics/drawable/StateListDrawable$StateListState;->newDrawable()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/StateListDrawable$StateListState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
@@ -7582,14 +7592,14 @@
 HSPLandroid/graphics/drawable/StateListDrawable;->inflateChildElements(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/StateListDrawable;->isStateful()Z
 HSPLandroid/graphics/drawable/StateListDrawable;->mutate()Landroid/graphics/drawable/Drawable;
-HSPLandroid/graphics/drawable/StateListDrawable;->onStateChange([I)Z
+HSPLandroid/graphics/drawable/StateListDrawable;->onStateChange([I)Z+]Landroid/graphics/drawable/StateListDrawable$StateListState;Landroid/graphics/drawable/StateListDrawable$StateListState;]Landroid/graphics/drawable/StateListDrawable;Landroid/graphics/drawable/StateListDrawable;
 HSPLandroid/graphics/drawable/StateListDrawable;->setConstantState(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;)V
 HSPLandroid/graphics/drawable/StateListDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/TransitionDrawable$TransitionState;-><init>(Landroid/graphics/drawable/TransitionDrawable$TransitionState;Landroid/graphics/drawable/TransitionDrawable;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/TransitionDrawable$TransitionState;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/TransitionDrawable;-><init>([Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/graphics/drawable/TransitionDrawable;->createConstantState(Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/content/res/Resources;)Landroid/graphics/drawable/LayerDrawable$LayerState;
-HSPLandroid/graphics/drawable/TransitionDrawable;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/TransitionDrawable;->draw(Landroid/graphics/Canvas;)V+]Landroid/graphics/drawable/TransitionDrawable;Landroid/graphics/drawable/TransitionDrawable;]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/TransitionDrawable;->setCrossFadeEnabled(Z)V
 HSPLandroid/graphics/drawable/TransitionDrawable;->startTransition(I)V
 HSPLandroid/graphics/drawable/VectorDrawable$VClipPath;->canApplyTheme()Z
@@ -7614,18 +7624,18 @@
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->-$$Nest$fgetmChangingConfigurations(Landroid/graphics/drawable/VectorDrawable$VGroup;)I
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->-$$Nest$fgetmNativePtr(Landroid/graphics/drawable/VectorDrawable$VGroup;)J
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;-><init>()V
-HSPLandroid/graphics/drawable/VectorDrawable$VGroup;-><init>(Landroid/graphics/drawable/VectorDrawable$VGroup;Landroid/util/ArrayMap;)V+]Landroid/graphics/drawable/VectorDrawable$VGroup;Landroid/graphics/drawable/VectorDrawable$VGroup;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->addChild(Landroid/graphics/drawable/VectorDrawable$VObject;)V
+HSPLandroid/graphics/drawable/VectorDrawable$VGroup;-><init>(Landroid/graphics/drawable/VectorDrawable$VGroup;Landroid/util/ArrayMap;)V+]Landroid/graphics/drawable/VectorDrawable$VGroup;Landroid/graphics/drawable/VectorDrawable$VGroup;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->addChild(Landroid/graphics/drawable/VectorDrawable$VObject;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/graphics/drawable/VectorDrawable$VObject;Landroid/graphics/drawable/VectorDrawable$VFullPath;,Landroid/graphics/drawable/VectorDrawable$VGroup;
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->getGroupName()Ljava/lang/String;
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->getNativePtr()J
-HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->getNativeSize()I
+HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->getNativeSize()I+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/graphics/drawable/VectorDrawable$VObject;Landroid/graphics/drawable/VectorDrawable$VFullPath;,Landroid/graphics/drawable/VectorDrawable$VGroup;
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->getProperty(Ljava/lang/String;)Landroid/util/Property;
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->inflate(Landroid/content/res/Resources;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->isStateful()Z
-HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->onStateChange([I)Z
-HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->setTree(Lcom/android/internal/util/VirtualRefBasePtr;)V
+HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->onStateChange([I)Z+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/graphics/drawable/VectorDrawable$VObject;Landroid/graphics/drawable/VectorDrawable$VFullPath;
+HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->setTree(Lcom/android/internal/util/VirtualRefBasePtr;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/graphics/drawable/VectorDrawable$VObject;Landroid/graphics/drawable/VectorDrawable$VFullPath;,Landroid/graphics/drawable/VectorDrawable$VGroup;
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/VectorDrawable$VObject;-><init>()V
 HSPLandroid/graphics/drawable/VectorDrawable$VObject;->isTreeValid()Z
@@ -7639,21 +7649,21 @@
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->applyDensityScaling(II)V
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->canApplyTheme()Z
-HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->canReuseCache()Z
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->canReuseCache()Z+]Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->createNativeTree(Landroid/graphics/drawable/VectorDrawable$VGroup;)V
-HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->createNativeTreeFromCopy(Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;Landroid/graphics/drawable/VectorDrawable$VGroup;)V
-HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->finalize()V
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->createNativeTreeFromCopy(Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;Landroid/graphics/drawable/VectorDrawable$VGroup;)V+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;]Lcom/android/internal/util/VirtualRefBasePtr;Lcom/android/internal/util/VirtualRefBasePtr;
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->finalize()V+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->getAlpha()F
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->getChangingConfigurations()I
-HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->getNativeRenderer()J
-HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->isStateful()Z
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->getNativeRenderer()J+]Lcom/android/internal/util/VirtualRefBasePtr;Lcom/android/internal/util/VirtualRefBasePtr;
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->isStateful()Z+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Landroid/graphics/drawable/VectorDrawable$VGroup;Landroid/graphics/drawable/VectorDrawable$VGroup;
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->newDrawable()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->onStateChange([I)Z
-HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->onTreeConstructionFinished()V
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->onTreeConstructionFinished()V+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;]Landroid/graphics/drawable/VectorDrawable$VGroup;Landroid/graphics/drawable/VectorDrawable$VGroup;
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->setAlpha(F)Z
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->setDensity(I)Z
-HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->setViewportSize(FF)V
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->setViewportSize(FF)V+]Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->updateCacheStates()V
 HSPLandroid/graphics/drawable/VectorDrawable;->-$$Nest$smnAddChild(JJ)V
 HSPLandroid/graphics/drawable/VectorDrawable;->-$$Nest$smnCreateFullPath()J
@@ -7680,7 +7690,7 @@
 HSPLandroid/graphics/drawable/VectorDrawable;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/VectorDrawable;->clearMutated()V
 HSPLandroid/graphics/drawable/VectorDrawable;->computeVectorSize()V
-HSPLandroid/graphics/drawable/VectorDrawable;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/VectorDrawable;->draw(Landroid/graphics/Canvas;)V+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;]Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;]Landroid/graphics/ColorFilter;Landroid/graphics/PorterDuffColorFilter;,Landroid/graphics/BlendModeColorFilter;]Landroid/graphics/drawable/VectorDrawable;Landroid/graphics/drawable/VectorDrawable;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
 HSPLandroid/graphics/drawable/VectorDrawable;->getAlpha()I
 HSPLandroid/graphics/drawable/VectorDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/VectorDrawable;->getColorFilter()Landroid/graphics/ColorFilter;
@@ -7691,22 +7701,22 @@
 HSPLandroid/graphics/drawable/VectorDrawable;->getOpacity()I
 HSPLandroid/graphics/drawable/VectorDrawable;->getPixelSize()F
 HSPLandroid/graphics/drawable/VectorDrawable;->getTargetByName(Ljava/lang/String;)Ljava/lang/Object;
-HSPLandroid/graphics/drawable/VectorDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
-HSPLandroid/graphics/drawable/VectorDrawable;->inflateChildElements(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/VectorDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;]Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;]Lcom/android/internal/util/VirtualRefBasePtr;Lcom/android/internal/util/VirtualRefBasePtr;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/graphics/drawable/VectorDrawable$VGroup;Landroid/graphics/drawable/VectorDrawable$VGroup;
+HSPLandroid/graphics/drawable/VectorDrawable;->inflateChildElements(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V+]Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/XmlBlock$Parser;]Ljava/util/Stack;Ljava/util/Stack;]Landroid/graphics/drawable/VectorDrawable$VGroup;Landroid/graphics/drawable/VectorDrawable$VGroup;]Landroid/graphics/drawable/VectorDrawable$VFullPath;Landroid/graphics/drawable/VectorDrawable$VFullPath;
 HSPLandroid/graphics/drawable/VectorDrawable;->isAutoMirrored()Z
 HSPLandroid/graphics/drawable/VectorDrawable;->isStateful()Z
 HSPLandroid/graphics/drawable/VectorDrawable;->mutate()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/VectorDrawable;->needMirroring()Z
-HSPLandroid/graphics/drawable/VectorDrawable;->onStateChange([I)Z
+HSPLandroid/graphics/drawable/VectorDrawable;->onStateChange([I)Z+]Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;]Landroid/graphics/drawable/VectorDrawable;Landroid/graphics/drawable/VectorDrawable;
 HSPLandroid/graphics/drawable/VectorDrawable;->setAllowCaching(Z)V
 HSPLandroid/graphics/drawable/VectorDrawable;->setAlpha(I)V
 HSPLandroid/graphics/drawable/VectorDrawable;->setAutoMirrored(Z)V
 HSPLandroid/graphics/drawable/VectorDrawable;->setColorFilter(Landroid/graphics/ColorFilter;)V
 HSPLandroid/graphics/drawable/VectorDrawable;->setTintBlendMode(Landroid/graphics/BlendMode;)V
 HSPLandroid/graphics/drawable/VectorDrawable;->setTintList(Landroid/content/res/ColorStateList;)V
-HSPLandroid/graphics/drawable/VectorDrawable;->updateColorFilters(Landroid/graphics/BlendMode;Landroid/content/res/ColorStateList;)V
+HSPLandroid/graphics/drawable/VectorDrawable;->updateColorFilters(Landroid/graphics/BlendMode;Landroid/content/res/ColorStateList;)V+]Landroid/graphics/drawable/VectorDrawable;Landroid/graphics/drawable/VectorDrawable;
 HSPLandroid/graphics/drawable/VectorDrawable;->updateLocalState(Landroid/content/res/Resources;)V
-HSPLandroid/graphics/drawable/VectorDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
+HSPLandroid/graphics/drawable/VectorDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V+]Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/graphics/drawable/shapes/OvalShape;-><init>()V
 HSPLandroid/graphics/drawable/shapes/OvalShape;->draw(Landroid/graphics/Canvas;Landroid/graphics/Paint;)V
 HSPLandroid/graphics/drawable/shapes/OvalShape;->getOutline(Landroid/graphics/Outline;)V
@@ -7772,7 +7782,7 @@
 HSPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->setIndent(FI)V
 HSPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->setTabStops([FF)V
 HSPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->setWidth(F)V
-HSPLandroid/graphics/text/LineBreaker$Result;-><init>(J)V
+HSPLandroid/graphics/text/LineBreaker$Result;-><init>(J)V+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
 HSPLandroid/graphics/text/LineBreaker$Result;->getEndLineHyphenEdit(I)I
 HSPLandroid/graphics/text/LineBreaker$Result;->getLineAscent(I)F
 HSPLandroid/graphics/text/LineBreaker$Result;->getLineBreakOffset(I)I
@@ -7781,10 +7791,10 @@
 HSPLandroid/graphics/text/LineBreaker$Result;->getLineWidth(I)F
 HSPLandroid/graphics/text/LineBreaker$Result;->getStartLineHyphenEdit(I)I
 HSPLandroid/graphics/text/LineBreaker$Result;->hasLineTab(I)Z
-HSPLandroid/graphics/text/LineBreaker;-><init>(III[I)V
-HSPLandroid/graphics/text/LineBreaker;->computeLineBreaks(Landroid/graphics/text/MeasuredText;Landroid/graphics/text/LineBreaker$ParagraphConstraints;I)Landroid/graphics/text/LineBreaker$Result;
+HSPLandroid/graphics/text/LineBreaker;-><init>(III[I)V+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
+HSPLandroid/graphics/text/LineBreaker;->computeLineBreaks(Landroid/graphics/text/MeasuredText;Landroid/graphics/text/LineBreaker$ParagraphConstraints;I)Landroid/graphics/text/LineBreaker$Result;+]Landroid/graphics/text/MeasuredText;Landroid/graphics/text/MeasuredText;
 HSPLandroid/graphics/text/MeasuredText$Builder;-><init>([C)V
-HSPLandroid/graphics/text/MeasuredText$Builder;->appendReplacementRun(Landroid/graphics/Paint;IF)Landroid/graphics/text/MeasuredText$Builder;
+HSPLandroid/graphics/text/MeasuredText$Builder;->appendReplacementRun(Landroid/graphics/Paint;IF)Landroid/graphics/text/MeasuredText$Builder;+]Landroid/graphics/Paint;Landroid/text/TextPaint;
 HSPLandroid/graphics/text/MeasuredText$Builder;->appendStyleRun(Landroid/graphics/Paint;IZ)Landroid/graphics/text/MeasuredText$Builder;
 HSPLandroid/graphics/text/MeasuredText$Builder;->appendStyleRun(Landroid/graphics/Paint;Landroid/graphics/text/LineBreakConfig;IZ)Landroid/graphics/text/MeasuredText$Builder;+]Landroid/graphics/Paint;Landroid/text/TextPaint;]Landroid/graphics/text/LineBreakConfig;Landroid/graphics/text/LineBreakConfig;
 HSPLandroid/graphics/text/MeasuredText$Builder;->build()Landroid/graphics/text/MeasuredText;+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
@@ -7792,7 +7802,7 @@
 HSPLandroid/graphics/text/MeasuredText$Builder;->setComputeHyphenation(I)Landroid/graphics/text/MeasuredText$Builder;
 HSPLandroid/graphics/text/MeasuredText$Builder;->setComputeHyphenation(Z)Landroid/graphics/text/MeasuredText$Builder;
 HSPLandroid/graphics/text/MeasuredText$Builder;->setComputeLayout(Z)Landroid/graphics/text/MeasuredText$Builder;
-HSPLandroid/graphics/text/MeasuredText;->getCharWidthAt(I)F
+HSPLandroid/graphics/text/MeasuredText;->getCharWidthAt(I)F+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/graphics/text/MeasuredText;->getChars()[C
 HSPLandroid/graphics/text/MeasuredText;->getNativePtr()J
 HSPLandroid/hardware/Camera$CameraInfo;-><init>()V
@@ -7844,7 +7854,7 @@
 HSPLandroid/hardware/SensorManager;->unregisterListener(Landroid/hardware/SensorEventListener;)V
 HSPLandroid/hardware/SensorManager;->unregisterListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;)V
 HSPLandroid/hardware/SensorPrivacyManager;->isSensorPrivacyEnabled(II)Z
-HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;-><init>(Landroid/os/Looper;Landroid/hardware/SystemSensorManager;ILjava/lang/String;)V
+HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;-><init>(Landroid/os/Looper;Landroid/hardware/SystemSensorManager;ILjava/lang/String;)V+]Landroid/os/Looper;Landroid/os/Looper;]Landroid/content/Context;Landroid/app/ContextImpl;]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
 HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;->addSensor(Landroid/hardware/Sensor;II)Z
 HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;->disableSensor(Landroid/hardware/Sensor;)I
 HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;->dispose()V
@@ -7884,7 +7894,7 @@
 HSPLandroid/hardware/camera2/CameraCharacteristics$Key;->getNativeKey()Landroid/hardware/camera2/impl/CameraMetadataNative$Key;
 HSPLandroid/hardware/camera2/CameraCharacteristics;->-$$Nest$fgetmLock(Landroid/hardware/camera2/CameraCharacteristics;)Ljava/lang/Object;
 HSPLandroid/hardware/camera2/CameraCharacteristics;->-$$Nest$fputmFoldedDeviceState(Landroid/hardware/camera2/CameraCharacteristics;Z)V
-HSPLandroid/hardware/camera2/CameraCharacteristics;->get(Landroid/hardware/camera2/CameraCharacteristics$Key;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/CameraCharacteristics;->get(Landroid/hardware/camera2/CameraCharacteristics$Key;)Ljava/lang/Object;+]Landroid/hardware/camera2/impl/CameraMetadataNative;Landroid/hardware/camera2/impl/CameraMetadataNative;
 HSPLandroid/hardware/camera2/CameraCharacteristics;->getDeviceStateListener()Landroid/hardware/camera2/CameraManager$DeviceStateListener;
 HSPLandroid/hardware/camera2/CameraCharacteristics;->overrideProperty(Landroid/hardware/camera2/CameraCharacteristics$Key;)Ljava/lang/Object;+]Landroid/hardware/camera2/CameraCharacteristics$Key;Landroid/hardware/camera2/CameraCharacteristics$Key;]Landroid/hardware/camera2/impl/CameraMetadataNative;Landroid/hardware/camera2/impl/CameraMetadataNative;
 HSPLandroid/hardware/camera2/CameraManager$AvailabilityCallback;-><init>()V
@@ -7920,27 +7930,27 @@
 HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$CameraHandlerExecutor;->execute(Ljava/lang/Runnable;)V
 HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->checkAndWrapHandler(Landroid/os/Handler;)Ljava/util/concurrent/Executor;
 HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->checkHandler(Landroid/os/Handler;)Landroid/os/Handler;
-HSPLandroid/hardware/camera2/impl/CameraMetadataNative$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/camera2/impl/CameraMetadataNative;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/camera2/impl/CameraMetadataNative;+]Landroid/hardware/camera2/impl/CameraMetadataNative;Landroid/hardware/camera2/impl/CameraMetadataNative;
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative$Key;->equals(Ljava/lang/Object;)Z+]Landroid/hardware/camera2/impl/CameraMetadataNative$Key;Landroid/hardware/camera2/impl/CameraMetadataNative$Key;]Ljava/lang/Object;Landroid/hardware/camera2/impl/CameraMetadataNative$Key;,Landroid/hardware/camera2/CameraCharacteristics$Key;]Landroid/hardware/camera2/utils/TypeReference;Landroid/hardware/camera2/utils/TypeReference$SpecializedTypeReference;]Landroid/hardware/camera2/CameraCharacteristics$Key;Landroid/hardware/camera2/CameraCharacteristics$Key;
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative$Key;->hashCode()I
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative;-><init>()V
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->finalize()V
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->get(Landroid/hardware/camera2/CameraCharacteristics$Key;)Ljava/lang/Object;
-HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->get(Landroid/hardware/camera2/impl/CameraMetadataNative$Key;)Ljava/lang/Object;
-HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->getBase(Landroid/hardware/camera2/impl/CameraMetadataNative$Key;)Ljava/lang/Object;
-HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->move(Landroid/hardware/camera2/impl/CameraMetadataNative;)Landroid/hardware/camera2/impl/CameraMetadataNative;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->get(Landroid/hardware/camera2/impl/CameraMetadataNative$Key;)Ljava/lang/Object;+]Ljava/util/HashMap;Ljava/util/HashMap;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->getBase(Landroid/hardware/camera2/impl/CameraMetadataNative$Key;)Ljava/lang/Object;+]Landroid/hardware/camera2/impl/CameraMetadataNative$Key;Landroid/hardware/camera2/impl/CameraMetadataNative$Key;]Landroid/hardware/camera2/marshal/Marshaler;megamorphic_types]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;]Landroid/hardware/camera2/impl/CameraMetadataNative;Landroid/hardware/camera2/impl/CameraMetadataNative;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->move(Landroid/hardware/camera2/impl/CameraMetadataNative;)Landroid/hardware/camera2/impl/CameraMetadataNative;+]Landroid/hardware/camera2/impl/CameraMetadataNative;Landroid/hardware/camera2/impl/CameraMetadataNative;
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->readValues(I)[B
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->setCameraId(I)V
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->setDisplaySize(Landroid/util/Size;)V
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->setHasMandatoryConcurrentStreams(Z)V
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->setupGlobalVendorTagDescriptor()V
-HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->updateNativeAllocation()V
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->updateNativeAllocation()V+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;
 HSPLandroid/hardware/camera2/marshal/MarshalHelpers;->checkNativeType(I)I
 HSPLandroid/hardware/camera2/marshal/MarshalHelpers;->wrapClassIfPrimitive(Ljava/lang/Class;)Ljava/lang/Class;
-HSPLandroid/hardware/camera2/marshal/MarshalRegistry$MarshalToken;->equals(Ljava/lang/Object;)Z
+HSPLandroid/hardware/camera2/marshal/MarshalRegistry$MarshalToken;->equals(Ljava/lang/Object;)Z+]Landroid/hardware/camera2/utils/TypeReference;Landroid/hardware/camera2/utils/TypeReference$SpecializedTypeReference;,Landroid/hardware/camera2/CaptureRequest$2;
 HSPLandroid/hardware/camera2/marshal/MarshalRegistry$MarshalToken;->hashCode()I
-HSPLandroid/hardware/camera2/marshal/MarshalRegistry;->getMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;
+HSPLandroid/hardware/camera2/marshal/MarshalRegistry;->getMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;+]Ljava/util/HashMap;Ljava/util/HashMap;
 HSPLandroid/hardware/camera2/marshal/Marshaler;-><init>(Landroid/hardware/camera2/marshal/MarshalQueryable;Landroid/hardware/camera2/utils/TypeReference;I)V
 HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableArray$MarshalerArray;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Object;
 HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableArray;->createMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;
@@ -7955,8 +7965,8 @@
 HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableNativeByteToInteger$MarshalerNativeByteToInteger;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Object;
 HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableNativeByteToInteger;->createMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;
 HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableNativeByteToInteger;->isTypeMappingSupported(Landroid/hardware/camera2/utils/TypeReference;I)Z
-HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryablePrimitive$MarshalerPrimitive;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Object;
-HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryablePrimitive$MarshalerPrimitive;->unmarshalObject(Ljava/nio/ByteBuffer;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryablePrimitive$MarshalerPrimitive;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Object;+]Ljava/lang/Class;Ljava/lang/Class;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryablePrimitive$MarshalerPrimitive;->unmarshalObject(Ljava/nio/ByteBuffer;)Ljava/lang/Object;+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryablePrimitive;->createMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;
 HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryablePrimitive;->isTypeMappingSupported(Landroid/hardware/camera2/utils/TypeReference;I)Z
 HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableRange;->isTypeMappingSupported(Landroid/hardware/camera2/utils/TypeReference;I)Z
@@ -7974,7 +7984,7 @@
 HSPLandroid/hardware/camera2/utils/ConcurrentCameraIdCombination;->getConcurrentCameraIdCombination()Ljava/util/Set;
 HSPLandroid/hardware/camera2/utils/ConcurrentCameraIdCombination;->readFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/hardware/camera2/utils/TypeReference;->containsTypeVariable(Ljava/lang/reflect/Type;)Z
-HSPLandroid/hardware/camera2/utils/TypeReference;->equals(Ljava/lang/Object;)Z
+HSPLandroid/hardware/camera2/utils/TypeReference;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Llibcore/reflect/ParameterizedTypeImpl;,Ljava/lang/Class;
 HSPLandroid/hardware/camera2/utils/TypeReference;->getComponentType()Landroid/hardware/camera2/utils/TypeReference;
 HSPLandroid/hardware/camera2/utils/TypeReference;->getComponentType(Ljava/lang/reflect/Type;)Ljava/lang/reflect/Type;
 HSPLandroid/hardware/camera2/utils/TypeReference;->getRawType()Ljava/lang/Class;
@@ -8042,9 +8052,9 @@
 HSPLandroid/hardware/display/DeviceProductInfo$ManufactureDate$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/hardware/display/DeviceProductInfo$ManufactureDate;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/hardware/display/DeviceProductInfo$ManufactureDate;->equals(Ljava/lang/Object;)Z
-HSPLandroid/hardware/display/DeviceProductInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/hardware/display/DeviceProductInfo;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/hardware/display/DeviceProductInfo;-><init>(Landroid/os/Parcel;Landroid/hardware/display/DeviceProductInfo-IA;)V
-HSPLandroid/hardware/display/DeviceProductInfo;->equals(Ljava/lang/Object;)Z
+HSPLandroid/hardware/display/DeviceProductInfo;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Landroid/hardware/display/DeviceProductInfo;
 HSPLandroid/hardware/display/DisplayManager;-><init>(Landroid/content/Context;)V
 HSPLandroid/hardware/display/DisplayManager;->addAllDisplaysLocked(Ljava/util/ArrayList;[I)V
 HSPLandroid/hardware/display/DisplayManager;->addPresentationDisplaysLocked(Ljava/util/ArrayList;[II)V
@@ -8092,7 +8102,6 @@
 HSPLandroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;->isBrightOrDim()Z
 HSPLandroid/hardware/display/IColorDisplayManager$Stub$Proxy;->isNightDisplayActivated()Z
 HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->getDisplayIds()[I
 HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->getDisplayInfo(I)Landroid/view/DisplayInfo;
 HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->getPreferredWideGamutColorSpaceId()I
 HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->getStableDisplaySize()Landroid/graphics/Point;
@@ -8201,7 +8210,7 @@
 HSPLandroid/hardware/security/keymint/KeyParameter$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/hardware/security/keymint/KeyParameter;-><clinit>()V
 HSPLandroid/hardware/security/keymint/KeyParameter;-><init>()V
-HSPLandroid/hardware/security/keymint/KeyParameter;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/hardware/security/keymint/KeyParameter;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/hardware/security/keymint/KeyParameter;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/hardware/security/keymint/KeyParameterValue$1;-><init>()V
 HSPLandroid/hardware/security/keymint/KeyParameterValue$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/security/keymint/KeyParameterValue;
@@ -8227,7 +8236,7 @@
 HSPLandroid/hardware/security/keymint/KeyParameterValue;->keyPurpose(I)Landroid/hardware/security/keymint/KeyParameterValue;
 HSPLandroid/hardware/security/keymint/KeyParameterValue;->paddingMode(I)Landroid/hardware/security/keymint/KeyParameterValue;
 HSPLandroid/hardware/security/keymint/KeyParameterValue;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/hardware/security/keymint/KeyParameterValue;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/hardware/security/keymint/KeyParameterValue;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/hardware/security/keymint/KeyParameterValue;Landroid/hardware/security/keymint/KeyParameterValue;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/hardware/soundtrigger/KeyphraseMetadata;-><init>(ILjava/lang/String;Ljava/util/Set;I)V
 HSPLandroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;-><init>(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;IIIIZIZIZI)V
 HSPLandroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;->getAudioCapabilities()I
@@ -8269,7 +8278,7 @@
 HSPLandroid/icu/impl/BMPSet;->set32x64Bits([III)V
 HSPLandroid/icu/impl/CacheValue$NullValue;->isNull()Z
 HSPLandroid/icu/impl/CacheValue$SoftValue;-><init>(Ljava/lang/Object;)V
-HSPLandroid/icu/impl/CacheValue$SoftValue;->get()Ljava/lang/Object;
+HSPLandroid/icu/impl/CacheValue$SoftValue;->get()Ljava/lang/Object;+]Ljava/lang/ref/Reference;Ljava/lang/ref/SoftReference;
 HSPLandroid/icu/impl/CacheValue$SoftValue;->resetIfCleared(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/icu/impl/CacheValue$StrongValue;->get()Ljava/lang/Object;
 HSPLandroid/icu/impl/CacheValue;-><init>()V
@@ -8305,7 +8314,7 @@
 HSPLandroid/icu/impl/FormattedStringBuilder;->fieldAt(I)Ljava/lang/Object;
 HSPLandroid/icu/impl/FormattedStringBuilder;->getCapacity()I
 HSPLandroid/icu/impl/FormattedStringBuilder;->insert(ILjava/lang/CharSequence;IILjava/lang/Object;)I
-HSPLandroid/icu/impl/FormattedStringBuilder;->insert(ILjava/lang/CharSequence;Ljava/lang/Object;)I
+HSPLandroid/icu/impl/FormattedStringBuilder;->insert(ILjava/lang/CharSequence;Ljava/lang/Object;)I+]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/icu/impl/FormattedStringBuilder;Landroid/icu/impl/FormattedStringBuilder;
 HSPLandroid/icu/impl/FormattedStringBuilder;->insert(I[C[Ljava/lang/Object;)I
 HSPLandroid/icu/impl/FormattedStringBuilder;->insertCodePoint(IILjava/lang/Object;)I
 HSPLandroid/icu/impl/FormattedStringBuilder;->length()I
@@ -8316,8 +8325,8 @@
 HSPLandroid/icu/impl/FormattedStringBuilder;->toString()Ljava/lang/String;
 HSPLandroid/icu/impl/FormattedStringBuilder;->unwrapField(Ljava/lang/Object;)Ljava/text/Format$Field;
 HSPLandroid/icu/impl/FormattedValueStringBuilderImpl;->isIntOrGroup(Ljava/lang/Object;)Z
-HSPLandroid/icu/impl/FormattedValueStringBuilderImpl;->nextFieldPosition(Landroid/icu/impl/FormattedStringBuilder;Ljava/text/FieldPosition;)Z
-HSPLandroid/icu/impl/FormattedValueStringBuilderImpl;->nextPosition(Landroid/icu/impl/FormattedStringBuilder;Landroid/icu/text/ConstrainedFieldPosition;Ljava/text/Format$Field;)Z
+HSPLandroid/icu/impl/FormattedValueStringBuilderImpl;->nextFieldPosition(Landroid/icu/impl/FormattedStringBuilder;Ljava/text/FieldPosition;)Z+]Landroid/icu/text/ConstrainedFieldPosition;Landroid/icu/text/ConstrainedFieldPosition;]Ljava/text/FieldPosition;Ljava/text/DontCareFieldPosition;
+HSPLandroid/icu/impl/FormattedValueStringBuilderImpl;->nextPosition(Landroid/icu/impl/FormattedStringBuilder;Landroid/icu/text/ConstrainedFieldPosition;Ljava/text/Format$Field;)Z+]Landroid/icu/text/ConstrainedFieldPosition;Landroid/icu/text/ConstrainedFieldPosition;
 HSPLandroid/icu/impl/Grego;->dayOfWeek(J)I
 HSPLandroid/icu/impl/Grego;->dayToFields(J[I)[I
 HSPLandroid/icu/impl/Grego;->fieldsToDay(III)J
@@ -8360,8 +8369,8 @@
 HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;->fetchSpacingInfo()Landroid/icu/impl/CurrencyData$CurrencySpacingInfo;
 HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;->getFormatInfo(Ljava/lang/String;)Landroid/icu/impl/CurrencyData$CurrencyFormatInfo;
 HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;->getSpacingInfo()Landroid/icu/impl/CurrencyData$CurrencySpacingInfo;
-HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;->getSymbol(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider;->getInstance(Landroid/icu/util/ULocale;Z)Landroid/icu/impl/CurrencyData$CurrencyDisplayInfo;
+HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;->getSymbol(Ljava/lang/String;)Ljava/lang/String;+]Landroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;Landroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;
+HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider;->getInstance(Landroid/icu/util/ULocale;Z)Landroid/icu/impl/CurrencyData$CurrencyDisplayInfo;+]Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;
 HSPLandroid/icu/impl/ICUCurrencyMetaInfo$CurrencyCollector;-><init>()V
 HSPLandroid/icu/impl/ICUCurrencyMetaInfo$CurrencyCollector;-><init>(Landroid/icu/impl/ICUCurrencyMetaInfo$CurrencyCollector-IA;)V
 HSPLandroid/icu/impl/ICUCurrencyMetaInfo$CurrencyCollector;->collect(Ljava/lang/String;Ljava/lang/String;JJIZ)V
@@ -8373,7 +8382,7 @@
 HSPLandroid/icu/impl/ICUCurrencyMetaInfo$UniqueList;->create()Landroid/icu/impl/ICUCurrencyMetaInfo$UniqueList;
 HSPLandroid/icu/impl/ICUCurrencyMetaInfo$UniqueList;->list()Ljava/util/List;
 HSPLandroid/icu/impl/ICUCurrencyMetaInfo;->collect(Landroid/icu/impl/ICUCurrencyMetaInfo$Collector;Landroid/icu/text/CurrencyMetaInfo$CurrencyFilter;)Ljava/util/List;
-HSPLandroid/icu/impl/ICUCurrencyMetaInfo;->collectRegion(Landroid/icu/impl/ICUCurrencyMetaInfo$Collector;Landroid/icu/text/CurrencyMetaInfo$CurrencyFilter;ILandroid/icu/impl/ICUResourceBundle;)V
+HSPLandroid/icu/impl/ICUCurrencyMetaInfo;->collectRegion(Landroid/icu/impl/ICUCurrencyMetaInfo$Collector;Landroid/icu/text/CurrencyMetaInfo$CurrencyFilter;ILandroid/icu/impl/ICUResourceBundle;)V+]Landroid/icu/impl/ICUResourceBundle;Landroid/icu/impl/ICUResourceBundleImpl$ResourceString;,Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;,Landroid/icu/impl/ICUResourceBundleImpl$ResourceArray;]Landroid/icu/impl/ICUCurrencyMetaInfo$Collector;Landroid/icu/impl/ICUCurrencyMetaInfo$CurrencyCollector;
 HSPLandroid/icu/impl/ICUCurrencyMetaInfo;->currencies(Landroid/icu/text/CurrencyMetaInfo$CurrencyFilter;)Ljava/util/List;
 HSPLandroid/icu/impl/ICUCurrencyMetaInfo;->currencyDigits(Ljava/lang/String;Landroid/icu/util/Currency$CurrencyUsage;)Landroid/icu/text/CurrencyMetaInfo$CurrencyDigits;
 HSPLandroid/icu/impl/ICUCurrencyMetaInfo;->getDate(Landroid/icu/impl/ICUResourceBundle;JZ)J
@@ -8426,7 +8435,7 @@
 HSPLandroid/icu/impl/ICUResourceBundle;->findResourceWithFallback(Ljava/lang/String;Landroid/icu/util/UResourceBundle;Landroid/icu/util/UResourceBundle;)Landroid/icu/impl/ICUResourceBundle;
 HSPLandroid/icu/impl/ICUResourceBundle;->findResourceWithFallback([Ljava/lang/String;ILandroid/icu/impl/ICUResourceBundle;Landroid/icu/util/UResourceBundle;)Landroid/icu/impl/ICUResourceBundle;
 HSPLandroid/icu/impl/ICUResourceBundle;->findStringWithFallback(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/icu/impl/ICUResourceBundle;->findStringWithFallback(Ljava/lang/String;Landroid/icu/util/UResourceBundle;Landroid/icu/util/UResourceBundle;)Ljava/lang/String;
+HSPLandroid/icu/impl/ICUResourceBundle;->findStringWithFallback(Ljava/lang/String;Landroid/icu/util/UResourceBundle;Landroid/icu/util/UResourceBundle;)Ljava/lang/String;+]Landroid/icu/impl/ICUResourceBundleReader$Container;Landroid/icu/impl/ICUResourceBundleReader$Table;,Landroid/icu/impl/ICUResourceBundleReader$Table1632;,Landroid/icu/impl/ICUResourceBundleReader$Table16;]Landroid/icu/impl/ICUResourceBundle;Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;]Landroid/icu/impl/ICUResourceBundleReader;Landroid/icu/impl/ICUResourceBundleReader;
 HSPLandroid/icu/impl/ICUResourceBundle;->findTopLevel(Ljava/lang/String;)Landroid/icu/impl/ICUResourceBundle;
 HSPLandroid/icu/impl/ICUResourceBundle;->findTopLevel(Ljava/lang/String;)Landroid/icu/util/UResourceBundle;
 HSPLandroid/icu/impl/ICUResourceBundle;->findWithFallback(Ljava/lang/String;)Landroid/icu/impl/ICUResourceBundle;
@@ -8441,7 +8450,7 @@
 HSPLandroid/icu/impl/ICUResourceBundle;->getBaseName()Ljava/lang/String;
 HSPLandroid/icu/impl/ICUResourceBundle;->getBundle(Landroid/icu/impl/ICUResourceBundleReader;Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)Landroid/icu/impl/ICUResourceBundle;
 HSPLandroid/icu/impl/ICUResourceBundle;->getBundleInstance(Ljava/lang/String;Landroid/icu/util/ULocale;Landroid/icu/impl/ICUResourceBundle$OpenType;)Landroid/icu/impl/ICUResourceBundle;
-HSPLandroid/icu/impl/ICUResourceBundle;->getBundleInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Landroid/icu/impl/ICUResourceBundle$OpenType;)Landroid/icu/impl/ICUResourceBundle;
+HSPLandroid/icu/impl/ICUResourceBundle;->getBundleInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Landroid/icu/impl/ICUResourceBundle$OpenType;)Landroid/icu/impl/ICUResourceBundle;+]Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;
 HSPLandroid/icu/impl/ICUResourceBundle;->getBundleInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Z)Landroid/icu/impl/ICUResourceBundle;
 HSPLandroid/icu/impl/ICUResourceBundle;->getFullLocaleNameSet(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/util/Set;
 HSPLandroid/icu/impl/ICUResourceBundle;->getKey()Ljava/lang/String;
@@ -8451,12 +8460,12 @@
 HSPLandroid/icu/impl/ICUResourceBundle;->getParent()Landroid/icu/impl/ICUResourceBundle;
 HSPLandroid/icu/impl/ICUResourceBundle;->getParent()Landroid/icu/util/UResourceBundle;
 HSPLandroid/icu/impl/ICUResourceBundle;->getResDepth()I
-HSPLandroid/icu/impl/ICUResourceBundle;->getResPathKeys(Ljava/lang/String;I[Ljava/lang/String;I)V
+HSPLandroid/icu/impl/ICUResourceBundle;->getResPathKeys(Ljava/lang/String;I[Ljava/lang/String;I)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/icu/impl/ICUResourceBundle;->getResPathKeys([Ljava/lang/String;I)V
 HSPLandroid/icu/impl/ICUResourceBundle;->getStringWithFallback(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/icu/impl/ICUResourceBundle;->getULocale()Landroid/icu/util/ULocale;
 HSPLandroid/icu/impl/ICUResourceBundle;->getWithFallback(Ljava/lang/String;)Landroid/icu/impl/ICUResourceBundle;
-HSPLandroid/icu/impl/ICUResourceBundle;->instantiateBundle(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Landroid/icu/impl/ICUResourceBundle$OpenType;)Landroid/icu/impl/ICUResourceBundle;
+HSPLandroid/icu/impl/ICUResourceBundle;->instantiateBundle(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Landroid/icu/impl/ICUResourceBundle$OpenType;)Landroid/icu/impl/ICUResourceBundle;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/impl/ICUResourceBundle$OpenType;Landroid/icu/impl/ICUResourceBundle$OpenType;]Landroid/icu/impl/CacheBase;Landroid/icu/impl/ICUResourceBundle$1;
 HSPLandroid/icu/impl/ICUResourceBundle;->setParent(Ljava/util/ResourceBundle;)V
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceArray;-><init>(Landroid/icu/impl/ICUResourceBundleImpl;Ljava/lang/String;I)V
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceArray;->getStringArray()[Ljava/lang/String;
@@ -8468,7 +8477,7 @@
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceContainer;-><init>(Landroid/icu/impl/ICUResourceBundle$WholeBundle;)V
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceContainer;-><init>(Landroid/icu/impl/ICUResourceBundleImpl;Ljava/lang/String;I)V
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceContainer;->createBundleObject(ILjava/lang/String;Ljava/util/HashMap;Landroid/icu/util/UResourceBundle;)Landroid/icu/util/UResourceBundle;
-HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceContainer;->getContainerResource(I)I
+HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceContainer;->getContainerResource(I)I+]Landroid/icu/impl/ICUResourceBundleReader$Container;Landroid/icu/impl/ICUResourceBundleReader$Table1632;,Landroid/icu/impl/ICUResourceBundleReader$Table16;,Landroid/icu/impl/ICUResourceBundleReader$Array32;
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceContainer;->getSize()I
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceContainer;->getString(I)Ljava/lang/String;
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceInt;-><init>(Landroid/icu/impl/ICUResourceBundleImpl;Ljava/lang/String;I)V
@@ -8483,8 +8492,8 @@
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;->findString(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;->getType()I
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;->handleGet(ILjava/util/HashMap;Landroid/icu/util/UResourceBundle;)Landroid/icu/util/UResourceBundle;
-HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;->handleGet(Ljava/lang/String;Ljava/util/HashMap;Landroid/icu/util/UResourceBundle;)Landroid/icu/util/UResourceBundle;
-HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;->handleGetObject(Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;->handleGet(Ljava/lang/String;Ljava/util/HashMap;Landroid/icu/util/UResourceBundle;)Landroid/icu/util/UResourceBundle;+]Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;]Landroid/icu/impl/ICUResourceBundleReader$Table;Landroid/icu/impl/ICUResourceBundleReader$Table1632;,Landroid/icu/impl/ICUResourceBundleReader$Table16;
+HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;->handleGetObject(Ljava/lang/String;)Ljava/lang/Object;+]Landroid/icu/impl/ICUResourceBundleReader$Container;Landroid/icu/impl/ICUResourceBundleReader$Table16;]Landroid/icu/impl/ICUResourceBundleReader;Landroid/icu/impl/ICUResourceBundleReader;]Landroid/icu/impl/ICUResourceBundleReader$Table;Landroid/icu/impl/ICUResourceBundleReader$Table16;
 HSPLandroid/icu/impl/ICUResourceBundleImpl;-><init>(Landroid/icu/impl/ICUResourceBundle$WholeBundle;)V
 HSPLandroid/icu/impl/ICUResourceBundleImpl;-><init>(Landroid/icu/impl/ICUResourceBundleImpl;Ljava/lang/String;I)V
 HSPLandroid/icu/impl/ICUResourceBundleImpl;->createBundleObject(Ljava/lang/String;ILjava/util/HashMap;Landroid/icu/util/UResourceBundle;)Landroid/icu/impl/ICUResourceBundle;
@@ -8496,7 +8505,7 @@
 HSPLandroid/icu/impl/ICUResourceBundleReader$Array;-><init>()V
 HSPLandroid/icu/impl/ICUResourceBundleReader$Array;->getValue(ILandroid/icu/impl/UResource$Value;)Z
 HSPLandroid/icu/impl/ICUResourceBundleReader$Container;-><init>()V
-HSPLandroid/icu/impl/ICUResourceBundleReader$Container;->getContainer16Resource(Landroid/icu/impl/ICUResourceBundleReader;I)I
+HSPLandroid/icu/impl/ICUResourceBundleReader$Container;->getContainer16Resource(Landroid/icu/impl/ICUResourceBundleReader;I)I+]Ljava/nio/CharBuffer;Ljava/nio/ByteBufferAsCharBuffer;
 HSPLandroid/icu/impl/ICUResourceBundleReader$Container;->getContainer32Resource(Landroid/icu/impl/ICUResourceBundleReader;I)I
 HSPLandroid/icu/impl/ICUResourceBundleReader$Container;->getContainerResource(Landroid/icu/impl/ICUResourceBundleReader;I)I
 HSPLandroid/icu/impl/ICUResourceBundleReader$Container;->getSize()I
@@ -8514,23 +8523,23 @@
 HSPLandroid/icu/impl/ICUResourceBundleReader$ReaderValue;->getStringArray(Landroid/icu/impl/ICUResourceBundleReader$Array;)[Ljava/lang/String;
 HSPLandroid/icu/impl/ICUResourceBundleReader$ReaderValue;->getTable()Landroid/icu/impl/UResource$Table;
 HSPLandroid/icu/impl/ICUResourceBundleReader$ReaderValue;->getType()I
-HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache$Level;->get(I)Ljava/lang/Object;
+HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache$Level;->get(I)Ljava/lang/Object;+]Landroid/icu/impl/ICUResourceBundleReader$ResourceCache$Level;Landroid/icu/impl/ICUResourceBundleReader$ResourceCache$Level;
 HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache$Level;->putIfAbsent(ILjava/lang/Object;I)Ljava/lang/Object;
 HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;-><init>(I)V
 HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;->findSimple(I)I
-HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;->get(I)Ljava/lang/Object;
+HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;->get(I)Ljava/lang/Object;+]Landroid/icu/impl/ICUResourceBundleReader$ResourceCache$Level;Landroid/icu/impl/ICUResourceBundleReader$ResourceCache$Level;]Ljava/lang/ref/SoftReference;Ljava/lang/ref/SoftReference;
 HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;->makeKey(I)I
 HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;->putIfAbsent(ILjava/lang/Object;I)Ljava/lang/Object;
 HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;->putIfCleared([Ljava/lang/Object;ILjava/lang/Object;I)Ljava/lang/Object;
 HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;->storeDirectly(I)Z
 HSPLandroid/icu/impl/ICUResourceBundleReader$Table1632;-><init>(Landroid/icu/impl/ICUResourceBundleReader;I)V
-HSPLandroid/icu/impl/ICUResourceBundleReader$Table1632;->getContainerResource(Landroid/icu/impl/ICUResourceBundleReader;I)I
+HSPLandroid/icu/impl/ICUResourceBundleReader$Table1632;->getContainerResource(Landroid/icu/impl/ICUResourceBundleReader;I)I+]Landroid/icu/impl/ICUResourceBundleReader$Table1632;Landroid/icu/impl/ICUResourceBundleReader$Table1632;
 HSPLandroid/icu/impl/ICUResourceBundleReader$Table16;->getContainerResource(Landroid/icu/impl/ICUResourceBundleReader;I)I
 HSPLandroid/icu/impl/ICUResourceBundleReader$Table;->findTableItem(Landroid/icu/impl/ICUResourceBundleReader;Ljava/lang/CharSequence;)I
 HSPLandroid/icu/impl/ICUResourceBundleReader$Table;->findValue(Ljava/lang/CharSequence;Landroid/icu/impl/UResource$Value;)Z
 HSPLandroid/icu/impl/ICUResourceBundleReader$Table;->getKey(Landroid/icu/impl/ICUResourceBundleReader;I)Ljava/lang/String;
-HSPLandroid/icu/impl/ICUResourceBundleReader$Table;->getKeyAndValue(ILandroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;)Z
-HSPLandroid/icu/impl/ICUResourceBundleReader$Table;->getResource(Landroid/icu/impl/ICUResourceBundleReader;Ljava/lang/String;)I
+HSPLandroid/icu/impl/ICUResourceBundleReader$Table;->getKeyAndValue(ILandroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;)Z+]Landroid/icu/impl/ICUResourceBundleReader$Table;Landroid/icu/impl/ICUResourceBundleReader$Table16;,Landroid/icu/impl/ICUResourceBundleReader$Table1632;
+HSPLandroid/icu/impl/ICUResourceBundleReader$Table;->getResource(Landroid/icu/impl/ICUResourceBundleReader;Ljava/lang/String;)I+]Landroid/icu/impl/ICUResourceBundleReader$Table;Landroid/icu/impl/ICUResourceBundleReader$Table;,Landroid/icu/impl/ICUResourceBundleReader$Table16;,Landroid/icu/impl/ICUResourceBundleReader$Table1632;
 HSPLandroid/icu/impl/ICUResourceBundleReader;->-$$Nest$fgetb16BitUnits(Landroid/icu/impl/ICUResourceBundleReader;)Ljava/nio/CharBuffer;
 HSPLandroid/icu/impl/ICUResourceBundleReader;->-$$Nest$fgetpoolStringIndex16Limit(Landroid/icu/impl/ICUResourceBundleReader;)I
 HSPLandroid/icu/impl/ICUResourceBundleReader;->-$$Nest$fgetpoolStringIndexLimit(Landroid/icu/impl/ICUResourceBundleReader;)I
@@ -8552,9 +8561,9 @@
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getArray(I)Landroid/icu/impl/ICUResourceBundleReader$Array;
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getBinary(I[B)[B
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getChars(II)[C
-HSPLandroid/icu/impl/ICUResourceBundleReader;->getFullName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getFullName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getIndexesInt(I)I
-HSPLandroid/icu/impl/ICUResourceBundleReader;->getInt(I)I
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getInt(I)I+]Ljava/nio/ByteBuffer;Ljava/nio/DirectByteBuffer;
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getIntVector(I)[I
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getInts(II)[I
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getKey16String(I)Ljava/lang/String;
@@ -8562,9 +8571,9 @@
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getReader(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)Landroid/icu/impl/ICUResourceBundleReader;
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getResourceByteOffset(I)I
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getRootResource()I
-HSPLandroid/icu/impl/ICUResourceBundleReader;->getString(I)Ljava/lang/String;
-HSPLandroid/icu/impl/ICUResourceBundleReader;->getStringV2(I)Ljava/lang/String;
-HSPLandroid/icu/impl/ICUResourceBundleReader;->getTable(I)Landroid/icu/impl/ICUResourceBundleReader$Table;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getString(I)Ljava/lang/String;+]Landroid/icu/impl/ICUResourceBundleReader;Landroid/icu/impl/ICUResourceBundleReader;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getStringV2(I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/impl/ICUResourceBundleReader$ResourceCache;Landroid/icu/impl/ICUResourceBundleReader$ResourceCache;]Ljava/nio/CharBuffer;Ljava/nio/ByteBufferAsCharBuffer;]Ljava/lang/CharSequence;Ljava/nio/ByteBufferAsCharBuffer;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getTable(I)Landroid/icu/impl/ICUResourceBundleReader$Table;+]Landroid/icu/impl/ICUResourceBundleReader$ResourceCache;Landroid/icu/impl/ICUResourceBundleReader$ResourceCache;]Landroid/icu/impl/ICUResourceBundleReader$Table;Landroid/icu/impl/ICUResourceBundleReader$Table16;,Landroid/icu/impl/ICUResourceBundleReader$Table1632;
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getTable16KeyOffsets(I)[C
 HSPLandroid/icu/impl/ICUResourceBundleReader;->init(Ljava/nio/ByteBuffer;)V
 HSPLandroid/icu/impl/ICUResourceBundleReader;->makeKeyStringFromBytes([BI)Ljava/lang/String;
@@ -8576,8 +8585,8 @@
 HSPLandroid/icu/impl/ICUService;->getKey(Landroid/icu/impl/ICUService$Key;[Ljava/lang/String;)Ljava/lang/Object;
 HSPLandroid/icu/impl/ICUService;->getKey(Landroid/icu/impl/ICUService$Key;[Ljava/lang/String;Landroid/icu/impl/ICUService$Factory;)Ljava/lang/Object;
 HSPLandroid/icu/impl/ICUService;->isDefault()Z
-HSPLandroid/icu/impl/IDNA2003;->convertIDNToASCII(Ljava/lang/String;I)Ljava/lang/StringBuffer;
-HSPLandroid/icu/impl/IDNA2003;->convertToASCII(Landroid/icu/text/UCharacterIterator;I)Ljava/lang/StringBuffer;
+HSPLandroid/icu/impl/IDNA2003;->convertIDNToASCII(Ljava/lang/String;I)Ljava/lang/StringBuffer;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;
+HSPLandroid/icu/impl/IDNA2003;->convertToASCII(Landroid/icu/text/UCharacterIterator;I)Ljava/lang/StringBuffer;+]Landroid/icu/text/UCharacterIterator;Landroid/icu/impl/ReplaceableUCharacterIterator;]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;
 HSPLandroid/icu/impl/IDNA2003;->getSeparatorIndex([CII)I
 HSPLandroid/icu/impl/IDNA2003;->isLDHChar(I)Z
 HSPLandroid/icu/impl/IDNA2003;->isLabelSeparator(I)Z
@@ -8585,9 +8594,9 @@
 HSPLandroid/icu/impl/LocaleIDParser$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLandroid/icu/impl/LocaleIDParser$1;->compare(Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/icu/impl/LocaleIDParser;-><init>(Ljava/lang/String;)V
-HSPLandroid/icu/impl/LocaleIDParser;-><init>(Ljava/lang/String;Z)V
+HSPLandroid/icu/impl/LocaleIDParser;-><init>(Ljava/lang/String;Z)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/icu/impl/LocaleIDParser;->addSeparator()V
-HSPLandroid/icu/impl/LocaleIDParser;->append(C)V
+HSPLandroid/icu/impl/LocaleIDParser;->append(C)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/icu/impl/LocaleIDParser;->append(Ljava/lang/String;)V
 HSPLandroid/icu/impl/LocaleIDParser;->atTerminator()Z
 HSPLandroid/icu/impl/LocaleIDParser;->getBaseName()Ljava/lang/String;
@@ -8596,11 +8605,11 @@
 HSPLandroid/icu/impl/LocaleIDParser;->getKeyword()Ljava/lang/String;
 HSPLandroid/icu/impl/LocaleIDParser;->getKeywordMap()Ljava/util/Map;
 HSPLandroid/icu/impl/LocaleIDParser;->getKeywordValue(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/icu/impl/LocaleIDParser;->getKeywords()Ljava/util/Iterator;
+HSPLandroid/icu/impl/LocaleIDParser;->getKeywords()Ljava/util/Iterator;+]Landroid/icu/impl/LocaleIDParser;Landroid/icu/impl/LocaleIDParser;]Ljava/util/Map;Ljava/util/Collections$EmptyMap;
 HSPLandroid/icu/impl/LocaleIDParser;->getLanguage()Ljava/lang/String;
 HSPLandroid/icu/impl/LocaleIDParser;->getName()Ljava/lang/String;
 HSPLandroid/icu/impl/LocaleIDParser;->getScript()Ljava/lang/String;
-HSPLandroid/icu/impl/LocaleIDParser;->getString(I)Ljava/lang/String;
+HSPLandroid/icu/impl/LocaleIDParser;->getString(I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/icu/impl/LocaleIDParser;->getValue()Ljava/lang/String;
 HSPLandroid/icu/impl/LocaleIDParser;->getVariant()Ljava/lang/String;
 HSPLandroid/icu/impl/LocaleIDParser;->haveExperimentalLanguagePrefix()Z
@@ -8611,11 +8620,11 @@
 HSPLandroid/icu/impl/LocaleIDParser;->isTerminatorOrIDSeparator(C)Z
 HSPLandroid/icu/impl/LocaleIDParser;->next()C
 HSPLandroid/icu/impl/LocaleIDParser;->parseBaseName()V
-HSPLandroid/icu/impl/LocaleIDParser;->parseCountry()I
+HSPLandroid/icu/impl/LocaleIDParser;->parseCountry()I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/icu/impl/LocaleIDParser;->parseKeywords()I
-HSPLandroid/icu/impl/LocaleIDParser;->parseLanguage()I
-HSPLandroid/icu/impl/LocaleIDParser;->parseScript()I
-HSPLandroid/icu/impl/LocaleIDParser;->parseVariant()I
+HSPLandroid/icu/impl/LocaleIDParser;->parseLanguage()I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLandroid/icu/impl/LocaleIDParser;->parseScript()I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLandroid/icu/impl/LocaleIDParser;->parseVariant()I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/icu/impl/LocaleIDParser;->reset()V
 HSPLandroid/icu/impl/LocaleIDParser;->setKeywordValue(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/icu/impl/LocaleIDParser;->setKeywordValue(Ljava/lang/String;Ljava/lang/String;Z)V
@@ -8626,11 +8635,11 @@
 HSPLandroid/icu/impl/LocaleIDParser;->skipUntilTerminatorOrIDSeparator()V
 HSPLandroid/icu/impl/Norm2AllModes$ComposeNormalizer2;->spanQuickCheckYes(Ljava/lang/CharSequence;)I+]Landroid/icu/impl/Normalizer2Impl;Landroid/icu/impl/Normalizer2Impl;]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/icu/impl/Norm2AllModes$DecomposeNormalizer2;->normalizeAndAppend(Ljava/lang/CharSequence;ZLandroid/icu/impl/Normalizer2Impl$ReorderingBuffer;)V
-HSPLandroid/icu/impl/Norm2AllModes$DecomposeNormalizer2;->spanQuickCheckYes(Ljava/lang/CharSequence;)I
+HSPLandroid/icu/impl/Norm2AllModes$DecomposeNormalizer2;->spanQuickCheckYes(Ljava/lang/CharSequence;)I+]Landroid/icu/impl/Normalizer2Impl;Landroid/icu/impl/Normalizer2Impl;]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/icu/impl/Norm2AllModes$NFKCSingleton;->-$$Nest$sfgetINSTANCE()Landroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;
 HSPLandroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;->-$$Nest$fgetallModes(Landroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;)Landroid/icu/impl/Norm2AllModes;
 HSPLandroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;->-$$Nest$fgetexception(Landroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;)Ljava/lang/RuntimeException;
-HSPLandroid/icu/impl/Norm2AllModes$Normalizer2WithImpl;->normalize(Ljava/lang/CharSequence;Ljava/lang/StringBuilder;)Ljava/lang/StringBuilder;
+HSPLandroid/icu/impl/Norm2AllModes$Normalizer2WithImpl;->normalize(Ljava/lang/CharSequence;Ljava/lang/StringBuilder;)Ljava/lang/StringBuilder;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/impl/Norm2AllModes$Normalizer2WithImpl;Landroid/icu/impl/Norm2AllModes$DecomposeNormalizer2;,Landroid/icu/impl/Norm2AllModes$ComposeNormalizer2;]Ljava/lang/CharSequence;Ljava/lang/StringBuilder;
 HSPLandroid/icu/impl/Norm2AllModes$Normalizer2WithImpl;->normalizeSecondAndAppend(Ljava/lang/StringBuilder;Ljava/lang/CharSequence;)Ljava/lang/StringBuilder;
 HSPLandroid/icu/impl/Norm2AllModes$Normalizer2WithImpl;->normalizeSecondAndAppend(Ljava/lang/StringBuilder;Ljava/lang/CharSequence;Z)Ljava/lang/StringBuilder;
 HSPLandroid/icu/impl/Norm2AllModes;->getFCDNormalizer2()Landroid/icu/text/Normalizer2;
@@ -8643,7 +8652,7 @@
 HSPLandroid/icu/impl/Normalizer2Impl;->addToStartSet(Landroid/icu/util/MutableCodePointTrie;II)V
 HSPLandroid/icu/impl/Normalizer2Impl;->composeQuickCheck(Ljava/lang/CharSequence;IIZZ)I+]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/icu/util/CodePointTrie$Fast16;Landroid/icu/util/CodePointTrie$Fast16;
 HSPLandroid/icu/impl/Normalizer2Impl;->decompose(IILandroid/icu/impl/Normalizer2Impl$ReorderingBuffer;)V
-HSPLandroid/icu/impl/Normalizer2Impl;->decompose(Ljava/lang/CharSequence;IILandroid/icu/impl/Normalizer2Impl$ReorderingBuffer;)I
+HSPLandroid/icu/impl/Normalizer2Impl;->decompose(Ljava/lang/CharSequence;IILandroid/icu/impl/Normalizer2Impl$ReorderingBuffer;)I+]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/icu/impl/Normalizer2Impl;->decomposeAndAppend(Ljava/lang/CharSequence;ZLandroid/icu/impl/Normalizer2Impl$ReorderingBuffer;)V
 HSPLandroid/icu/impl/Normalizer2Impl;->ensureCanonIterData()Landroid/icu/impl/Normalizer2Impl;
 HSPLandroid/icu/impl/Normalizer2Impl;->getRawNorm16(I)I
@@ -8657,7 +8666,7 @@
 HSPLandroid/icu/impl/Normalizer2Impl;->mapAlgorithmic(II)I
 HSPLandroid/icu/impl/OlsonTimeZone;-><init>(Landroid/icu/util/UResourceBundle;Landroid/icu/util/UResourceBundle;Ljava/lang/String;)V
 HSPLandroid/icu/impl/OlsonTimeZone;->clone()Ljava/lang/Object;
-HSPLandroid/icu/impl/OlsonTimeZone;->cloneAsThawed()Landroid/icu/util/TimeZone;
+HSPLandroid/icu/impl/OlsonTimeZone;->cloneAsThawed()Landroid/icu/util/TimeZone;+]Landroid/icu/util/SimpleTimeZone;Landroid/icu/util/SimpleTimeZone;
 HSPLandroid/icu/impl/OlsonTimeZone;->construct(Landroid/icu/util/UResourceBundle;Landroid/icu/util/UResourceBundle;Ljava/lang/String;)V
 HSPLandroid/icu/impl/OlsonTimeZone;->equals(Ljava/lang/Object;)Z
 HSPLandroid/icu/impl/OlsonTimeZone;->freeze()Landroid/icu/util/TimeZone;
@@ -8665,7 +8674,7 @@
 HSPLandroid/icu/impl/OlsonTimeZone;->getHistoricalOffset(JZII[I)V
 HSPLandroid/icu/impl/OlsonTimeZone;->getInt(B)I
 HSPLandroid/icu/impl/OlsonTimeZone;->getNextTransition(JZ)Landroid/icu/util/TimeZoneTransition;
-HSPLandroid/icu/impl/OlsonTimeZone;->getOffset(JZ[I)V
+HSPLandroid/icu/impl/OlsonTimeZone;->getOffset(JZ[I)V+]Landroid/icu/util/SimpleTimeZone;Landroid/icu/util/SimpleTimeZone;
 HSPLandroid/icu/impl/OlsonTimeZone;->getTimeZoneRules()[Landroid/icu/util/TimeZoneRule;
 HSPLandroid/icu/impl/OlsonTimeZone;->hashCode()I+]Landroid/icu/util/SimpleTimeZone;Landroid/icu/util/SimpleTimeZone;
 HSPLandroid/icu/impl/OlsonTimeZone;->initTransitionRules()V
@@ -8698,7 +8707,7 @@
 HSPLandroid/icu/impl/ReplaceableUCharacterIterator;-><init>(Ljava/lang/String;)V
 HSPLandroid/icu/impl/ReplaceableUCharacterIterator;->getLength()I
 HSPLandroid/icu/impl/ReplaceableUCharacterIterator;->getText([CI)I
-HSPLandroid/icu/impl/ReplaceableUCharacterIterator;->next()I
+HSPLandroid/icu/impl/ReplaceableUCharacterIterator;->next()I+]Landroid/icu/text/Replaceable;Landroid/icu/text/ReplaceableString;
 HSPLandroid/icu/impl/ReplaceableUCharacterIterator;->setIndex(I)V
 HSPLandroid/icu/impl/RuleCharacterIterator;->_advance(I)V
 HSPLandroid/icu/impl/RuleCharacterIterator;->_current()I
@@ -8715,7 +8724,7 @@
 HSPLandroid/icu/impl/SimpleFormatterImpl;->formatPrefixSuffix(Ljava/lang/String;Ljava/text/Format$Field;IILandroid/icu/impl/FormattedStringBuilder;)I
 HSPLandroid/icu/impl/SimpleFormatterImpl;->formatRawPattern(Ljava/lang/String;II[Ljava/lang/CharSequence;)Ljava/lang/String;
 HSPLandroid/icu/impl/SimpleFormatterImpl;->getArgumentLimit(Ljava/lang/String;)I
-HSPLandroid/icu/impl/SoftCache;->getInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/icu/impl/SoftCache;->getInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;]Landroid/icu/impl/CacheValue;Landroid/icu/impl/CacheValue$SoftValue;]Landroid/icu/impl/SoftCache;megamorphic_types
 HSPLandroid/icu/impl/StandardPlural;->fromString(Ljava/lang/CharSequence;)Landroid/icu/impl/StandardPlural;
 HSPLandroid/icu/impl/StandardPlural;->orNullFromString(Ljava/lang/CharSequence;)Landroid/icu/impl/StandardPlural;
 HSPLandroid/icu/impl/StandardPlural;->orOtherFromString(Ljava/lang/CharSequence;)Landroid/icu/impl/StandardPlural;
@@ -8748,7 +8757,7 @@
 HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNames;->createMetaZoneAndPutInCache(Ljava/util/Map;[Ljava/lang/String;Ljava/lang/String;)Landroid/icu/impl/TimeZoneNamesImpl$ZNames;
 HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNames;->createTimeZoneAndPutInCache(Ljava/util/Map;[Ljava/lang/String;Ljava/lang/String;)Landroid/icu/impl/TimeZoneNamesImpl$ZNames;
 HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNames;->getName(Landroid/icu/text/TimeZoneNames$NameType;)Ljava/lang/String;
-HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNames;->getNameTypeIndex(Landroid/icu/text/TimeZoneNames$NameType;)I
+HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNames;->getNameTypeIndex(Landroid/icu/text/TimeZoneNames$NameType;)I+]Landroid/icu/text/TimeZoneNames$NameType;Landroid/icu/text/TimeZoneNames$NameType;]Landroid/icu/impl/TimeZoneNamesImpl$ZNames$NameTypeIndex;Landroid/icu/impl/TimeZoneNamesImpl$ZNames$NameTypeIndex;
 HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;->-$$Nest$mgetNames(Landroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;)[Ljava/lang/String;
 HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;-><init>()V
 HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;-><init>(Landroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader-IA;)V
@@ -8761,10 +8770,10 @@
 HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;->setNameIfEmpty(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;)V
 HSPLandroid/icu/impl/TimeZoneNamesImpl;-><init>(Landroid/icu/util/ULocale;)V
 HSPLandroid/icu/impl/TimeZoneNamesImpl;->_getAvailableMetaZoneIDs(Ljava/lang/String;)Ljava/util/Set;
-HSPLandroid/icu/impl/TimeZoneNamesImpl;->_getMetaZoneID(Ljava/lang/String;J)Ljava/lang/String;
+HSPLandroid/icu/impl/TimeZoneNamesImpl;->_getMetaZoneID(Ljava/lang/String;J)Ljava/lang/String;+]Landroid/icu/impl/TimeZoneNamesImpl$TZ2MZsCache;Landroid/icu/impl/TimeZoneNamesImpl$TZ2MZsCache;]Landroid/icu/impl/TimeZoneNamesImpl$MZMapEntry;Landroid/icu/impl/TimeZoneNamesImpl$MZMapEntry;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLandroid/icu/impl/TimeZoneNamesImpl;->getAvailableMetaZoneIDs(Ljava/lang/String;)Ljava/util/Set;
 HSPLandroid/icu/impl/TimeZoneNamesImpl;->getDefaultExemplarLocationName(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/icu/impl/TimeZoneNamesImpl;->getMetaZoneDisplayName(Ljava/lang/String;Landroid/icu/text/TimeZoneNames$NameType;)Ljava/lang/String;
+HSPLandroid/icu/impl/TimeZoneNamesImpl;->getMetaZoneDisplayName(Ljava/lang/String;Landroid/icu/text/TimeZoneNames$NameType;)Ljava/lang/String;+]Landroid/icu/impl/TimeZoneNamesImpl$ZNames;Landroid/icu/impl/TimeZoneNamesImpl$ZNames;
 HSPLandroid/icu/impl/TimeZoneNamesImpl;->getMetaZoneID(Ljava/lang/String;J)Ljava/lang/String;
 HSPLandroid/icu/impl/TimeZoneNamesImpl;->getTimeZoneDisplayName(Ljava/lang/String;Landroid/icu/text/TimeZoneNames$NameType;)Ljava/lang/String;
 HSPLandroid/icu/impl/TimeZoneNamesImpl;->initialize(Landroid/icu/util/ULocale;)V
@@ -8788,7 +8797,7 @@
 HSPLandroid/icu/impl/Trie2_16;->get(I)I
 HSPLandroid/icu/impl/Trie2_32;->get(I)I
 HSPLandroid/icu/impl/Trie2_32;->getFromU16SingleLead(C)I
-HSPLandroid/icu/impl/UBiDiProps;->getClass(I)I
+HSPLandroid/icu/impl/UBiDiProps;->getClass(I)I+]Landroid/icu/impl/Trie2_16;Landroid/icu/impl/Trie2_16;
 HSPLandroid/icu/impl/UBiDiProps;->getClassFromProps(I)I
 HSPLandroid/icu/impl/UCaseProps;->fold(II)I+]Landroid/icu/impl/Trie2_16;Landroid/icu/impl/Trie2_16;
 HSPLandroid/icu/impl/UCaseProps;->getCaseLocale(Ljava/lang/String;)I
@@ -8798,7 +8807,7 @@
 HSPLandroid/icu/impl/UCaseProps;->propsHasException(I)Z
 HSPLandroid/icu/impl/UCaseProps;->toUpperOrTitle(ILandroid/icu/impl/UCaseProps$ContextIterator;Ljava/lang/Appendable;IZ)I
 HSPLandroid/icu/impl/UCharacterProperty$IntProperty;->getValue(I)I
-HSPLandroid/icu/impl/UCharacterProperty;->digit(I)I
+HSPLandroid/icu/impl/UCharacterProperty;->digit(I)I+]Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;
 HSPLandroid/icu/impl/UCharacterProperty;->getIntPropertyValue(II)I
 HSPLandroid/icu/impl/UCharacterProperty;->getNumericTypeValue(I)I
 HSPLandroid/icu/impl/UCharacterProperty;->getProperty(I)I+]Landroid/icu/impl/Trie2_16;Landroid/icu/impl/Trie2_16;
@@ -8832,7 +8841,7 @@
 HSPLandroid/icu/impl/ZoneMeta;->findCLDRCanonicalID(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/icu/impl/ZoneMeta;->getCanonicalCLDRID(Landroid/icu/util/TimeZone;)Ljava/lang/String;
 HSPLandroid/icu/impl/ZoneMeta;->getCanonicalCLDRID(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/icu/impl/ZoneMeta;->getSystemTimeZone(Ljava/lang/String;)Landroid/icu/impl/OlsonTimeZone;
+HSPLandroid/icu/impl/ZoneMeta;->getSystemTimeZone(Ljava/lang/String;)Landroid/icu/impl/OlsonTimeZone;+]Landroid/icu/impl/ZoneMeta$SystemTimeZoneCache;Landroid/icu/impl/ZoneMeta$SystemTimeZoneCache;
 HSPLandroid/icu/impl/ZoneMeta;->getZoneIDs()[Ljava/lang/String;
 HSPLandroid/icu/impl/ZoneMeta;->getZoneIndex(Ljava/lang/String;)I
 HSPLandroid/icu/impl/ZoneMeta;->openOlsonResource(Landroid/icu/util/UResourceBundle;Ljava/lang/String;)Landroid/icu/util/UResourceBundle;
@@ -8957,7 +8966,7 @@
 HSPLandroid/icu/impl/locale/BaseLocale$Key;->normalize(Landroid/icu/impl/locale/BaseLocale$Key;)Landroid/icu/impl/locale/BaseLocale$Key;
 HSPLandroid/icu/impl/locale/BaseLocale;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/icu/impl/locale/BaseLocale;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/icu/impl/locale/BaseLocale-IA;)V
-HSPLandroid/icu/impl/locale/BaseLocale;->getInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/icu/impl/locale/BaseLocale;
+HSPLandroid/icu/impl/locale/BaseLocale;->getInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/icu/impl/locale/BaseLocale;+]Landroid/icu/impl/locale/BaseLocale$Cache;Landroid/icu/impl/locale/BaseLocale$Cache;
 HSPLandroid/icu/impl/locale/BaseLocale;->getLanguage()Ljava/lang/String;
 HSPLandroid/icu/impl/locale/BaseLocale;->getRegion()Ljava/lang/String;
 HSPLandroid/icu/impl/locale/BaseLocale;->getScript()Ljava/lang/String;
@@ -8971,25 +8980,25 @@
 HSPLandroid/icu/impl/locale/LocaleObjectCache$CacheEntry;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V
 HSPLandroid/icu/impl/locale/LocaleObjectCache$CacheEntry;->getKey()Ljava/lang/Object;
 HSPLandroid/icu/impl/locale/LocaleObjectCache;->cleanStaleEntries()V
-HSPLandroid/icu/impl/locale/LocaleObjectCache;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/icu/impl/locale/LocaleObjectCache;->get(Ljava/lang/Object;)Ljava/lang/Object;+]Landroid/icu/impl/locale/LocaleObjectCache$CacheEntry;Landroid/icu/impl/locale/LocaleObjectCache$CacheEntry;]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;]Landroid/icu/impl/locale/LocaleObjectCache;Landroid/icu/impl/locale/BaseLocale$Cache;
 HSPLandroid/icu/impl/number/AdoptingModifierStore$1;-><clinit>()V
 HSPLandroid/icu/impl/number/AdoptingModifierStore;-><init>(Landroid/icu/impl/number/Modifier;Landroid/icu/impl/number/Modifier;Landroid/icu/impl/number/Modifier;Landroid/icu/impl/number/Modifier;)V
 HSPLandroid/icu/impl/number/AdoptingModifierStore;->getModifierWithoutPlural(Landroid/icu/impl/number/Modifier$Signum;)Landroid/icu/impl/number/Modifier;
-HSPLandroid/icu/impl/number/AffixUtils;->containsType(Ljava/lang/CharSequence;I)Z
+HSPLandroid/icu/impl/number/AffixUtils;->containsType(Ljava/lang/CharSequence;I)Z+]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/icu/impl/number/AffixUtils;->escape(Ljava/lang/CharSequence;)Ljava/lang/String;
 HSPLandroid/icu/impl/number/AffixUtils;->getFieldForType(I)Landroid/icu/text/NumberFormat$Field;
 HSPLandroid/icu/impl/number/AffixUtils;->getOffset(J)I
 HSPLandroid/icu/impl/number/AffixUtils;->getState(J)I
 HSPLandroid/icu/impl/number/AffixUtils;->getType(J)I
 HSPLandroid/icu/impl/number/AffixUtils;->getTypeOrCp(J)I
-HSPLandroid/icu/impl/number/AffixUtils;->hasCurrencySymbols(Ljava/lang/CharSequence;)Z
-HSPLandroid/icu/impl/number/AffixUtils;->hasNext(JLjava/lang/CharSequence;)Z
+HSPLandroid/icu/impl/number/AffixUtils;->hasCurrencySymbols(Ljava/lang/CharSequence;)Z+]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLandroid/icu/impl/number/AffixUtils;->hasNext(JLjava/lang/CharSequence;)Z+]Ljava/lang/CharSequence;Ljava/lang/StringBuilder;,Ljava/lang/String;
 HSPLandroid/icu/impl/number/AffixUtils;->iterateWithConsumer(Ljava/lang/CharSequence;Landroid/icu/impl/number/AffixUtils$TokenConsumer;)V
 HSPLandroid/icu/impl/number/AffixUtils;->makeTag(IIII)J
-HSPLandroid/icu/impl/number/AffixUtils;->nextToken(JLjava/lang/CharSequence;)J
+HSPLandroid/icu/impl/number/AffixUtils;->nextToken(JLjava/lang/CharSequence;)J+]Ljava/lang/CharSequence;Ljava/lang/String;,Ljava/lang/StringBuilder;
 HSPLandroid/icu/impl/number/AffixUtils;->unescape(Ljava/lang/CharSequence;Landroid/icu/impl/FormattedStringBuilder;ILandroid/icu/impl/number/AffixUtils$SymbolProvider;Landroid/icu/text/NumberFormat$Field;)I
 HSPLandroid/icu/impl/number/AffixUtils;->unescapedCount(Ljava/lang/CharSequence;ZLandroid/icu/impl/number/AffixUtils$SymbolProvider;)I
-HSPLandroid/icu/impl/number/ConstantAffixModifier;->apply(Landroid/icu/impl/FormattedStringBuilder;II)I
+HSPLandroid/icu/impl/number/ConstantAffixModifier;->apply(Landroid/icu/impl/FormattedStringBuilder;II)I+]Landroid/icu/impl/FormattedStringBuilder;Landroid/icu/impl/FormattedStringBuilder;
 HSPLandroid/icu/impl/number/ConstantMultiFieldModifier;-><init>(Landroid/icu/impl/FormattedStringBuilder;Landroid/icu/impl/FormattedStringBuilder;ZZ)V
 HSPLandroid/icu/impl/number/ConstantMultiFieldModifier;-><init>(Landroid/icu/impl/FormattedStringBuilder;Landroid/icu/impl/FormattedStringBuilder;ZZLandroid/icu/impl/number/Modifier$Parameters;)V
 HSPLandroid/icu/impl/number/ConstantMultiFieldModifier;->apply(Landroid/icu/impl/FormattedStringBuilder;II)I
@@ -9077,11 +9086,11 @@
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->_setToLong(J)V
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->adjustMagnitude(I)V
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->appendDigit(BIZ)V+]Landroid/icu/impl/number/DecimalQuantity_AbstractBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
-HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->applyMaxInteger(I)V
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->applyMaxInteger(I)V+]Landroid/icu/impl/number/DecimalQuantity_AbstractBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->convertToAccurateDouble()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;]Landroid/icu/impl/number/DecimalQuantity_AbstractBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->copyFrom(Landroid/icu/impl/number/DecimalQuantity;)V
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->fitsInLong()Z+]Landroid/icu/impl/number/DecimalQuantity_AbstractBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
-HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->getDigit(I)B
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->getDigit(I)B+]Landroid/icu/impl/number/DecimalQuantity_AbstractBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->getLowerDisplayMagnitude()I
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->getMagnitude()I
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->getPluralOperand(Landroid/icu/text/PluralRules$Operand;)D
@@ -9094,19 +9103,19 @@
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->negate()V
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->populateUFieldPosition(Ljava/text/FieldPosition;)V
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->roundToMagnitude(ILjava/math/MathContext;)V
-HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->roundToMagnitude(ILjava/math/MathContext;Z)V
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->roundToMagnitude(ILjava/math/MathContext;Z)V+]Ljava/math/MathContext;Ljava/math/MathContext;]Landroid/icu/impl/number/DecimalQuantity_AbstractBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;]Ljava/math/RoundingMode;Ljava/math/RoundingMode;
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->safeSubtract(II)I
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->setMinFraction(I)V
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->setMinInteger(I)V
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->setToDouble(D)V
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->setToInt(I)V
-HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->setToLong(J)V
-HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->signum()Landroid/icu/impl/number/Modifier$Signum;
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->setToLong(J)V+]Landroid/icu/impl/number/DecimalQuantity_AbstractBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->signum()Landroid/icu/impl/number/Modifier$Signum;+]Landroid/icu/impl/number/DecimalQuantity_AbstractBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->toLong(Z)J+]Landroid/icu/impl/number/DecimalQuantity_AbstractBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
 HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;-><init>()V+]Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
 HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;-><init>(D)V
 HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;-><init>(I)V
-HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;-><init>(J)V
+HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;-><init>(J)V+]Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
 HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;-><init>(Ljava/lang/Number;)V
 HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;->compact()V
 HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;->copyBcdFrom(Landroid/icu/impl/number/DecimalQuantity;)V
@@ -9119,9 +9128,9 @@
 HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;->shiftLeft(I)V
 HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;->shiftRight(I)V
 HSPLandroid/icu/impl/number/Grouper;-><init>(SSS)V
-HSPLandroid/icu/impl/number/Grouper;->forProperties(Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/impl/number/Grouper;
+HSPLandroid/icu/impl/number/Grouper;->forProperties(Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/impl/number/Grouper;+]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;
 HSPLandroid/icu/impl/number/Grouper;->getInstance(SSS)Landroid/icu/impl/number/Grouper;
-HSPLandroid/icu/impl/number/Grouper;->getMinGroupingForLocale(Landroid/icu/util/ULocale;)S
+HSPLandroid/icu/impl/number/Grouper;->getMinGroupingForLocale(Landroid/icu/util/ULocale;)S+]Landroid/icu/impl/ICUResourceBundle;Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;]Ljava/lang/Short;Ljava/lang/Short;
 HSPLandroid/icu/impl/number/Grouper;->getPrimary()S
 HSPLandroid/icu/impl/number/Grouper;->getSecondary()S
 HSPLandroid/icu/impl/number/Grouper;->groupAtPosition(ILandroid/icu/impl/number/DecimalQuantity;)Z
@@ -9143,16 +9152,16 @@
 HSPLandroid/icu/impl/number/MutablePatternModifier$ImmutablePatternModifier;->processQuantity(Landroid/icu/impl/number/DecimalQuantity;)Landroid/icu/impl/number/MicroProps;
 HSPLandroid/icu/impl/number/MutablePatternModifier;-><init>(Z)V
 HSPLandroid/icu/impl/number/MutablePatternModifier;->addToChain(Landroid/icu/impl/number/MicroPropsGenerator;)Landroid/icu/impl/number/MicroPropsGenerator;
-HSPLandroid/icu/impl/number/MutablePatternModifier;->apply(Landroid/icu/impl/FormattedStringBuilder;II)I
+HSPLandroid/icu/impl/number/MutablePatternModifier;->apply(Landroid/icu/impl/FormattedStringBuilder;II)I+]Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/impl/number/PropertiesAffixPatternProvider;
 HSPLandroid/icu/impl/number/MutablePatternModifier;->createConstantModifier(Landroid/icu/impl/FormattedStringBuilder;Landroid/icu/impl/FormattedStringBuilder;)Landroid/icu/impl/number/ConstantMultiFieldModifier;
 HSPLandroid/icu/impl/number/MutablePatternModifier;->createImmutable()Landroid/icu/impl/number/MutablePatternModifier$ImmutablePatternModifier;
 HSPLandroid/icu/impl/number/MutablePatternModifier;->getPrefixLength()I
 HSPLandroid/icu/impl/number/MutablePatternModifier;->getSymbol(I)Ljava/lang/CharSequence;
 HSPLandroid/icu/impl/number/MutablePatternModifier;->insertPrefix(Landroid/icu/impl/FormattedStringBuilder;I)I
 HSPLandroid/icu/impl/number/MutablePatternModifier;->insertSuffix(Landroid/icu/impl/FormattedStringBuilder;I)I
-HSPLandroid/icu/impl/number/MutablePatternModifier;->needsPlurals()Z
+HSPLandroid/icu/impl/number/MutablePatternModifier;->needsPlurals()Z+]Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/impl/number/PropertiesAffixPatternProvider;
 HSPLandroid/icu/impl/number/MutablePatternModifier;->prepareAffix(Z)V
-HSPLandroid/icu/impl/number/MutablePatternModifier;->processQuantity(Landroid/icu/impl/number/DecimalQuantity;)Landroid/icu/impl/number/MicroProps;
+HSPLandroid/icu/impl/number/MutablePatternModifier;->processQuantity(Landroid/icu/impl/number/DecimalQuantity;)Landroid/icu/impl/number/MicroProps;+]Landroid/icu/impl/number/MutablePatternModifier;Landroid/icu/impl/number/MutablePatternModifier;]Landroid/icu/impl/number/MicroPropsGenerator;Landroid/icu/impl/number/MicroProps;]Landroid/icu/number/Precision;Landroid/icu/number/Precision$FractionRounderImpl;]Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
 HSPLandroid/icu/impl/number/MutablePatternModifier;->setNumberProperties(Landroid/icu/impl/number/Modifier$Signum;Landroid/icu/impl/StandardPlural;)V
 HSPLandroid/icu/impl/number/MutablePatternModifier;->setPatternAttributes(Landroid/icu/number/NumberFormatter$SignDisplay;ZZ)V
 HSPLandroid/icu/impl/number/MutablePatternModifier;->setPatternInfo(Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/text/NumberFormat$Field;)V
@@ -9164,42 +9173,42 @@
 HSPLandroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;->getString(I)Ljava/lang/String;
 HSPLandroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;-><init>()V
 HSPLandroid/icu/impl/number/PatternStringParser$ParserState;-><init>(Ljava/lang/String;)V
-HSPLandroid/icu/impl/number/PatternStringParser$ParserState;->next()I
+HSPLandroid/icu/impl/number/PatternStringParser$ParserState;->next()I+]Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParserState;
 HSPLandroid/icu/impl/number/PatternStringParser$ParserState;->peek()I+]Ljava/lang/String;Ljava/lang/String;
-HSPLandroid/icu/impl/number/PatternStringParser;->consumeAffix(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;)J
+HSPLandroid/icu/impl/number/PatternStringParser;->consumeAffix(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;)J+]Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParserState;
 HSPLandroid/icu/impl/number/PatternStringParser;->consumeExponent(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;)V
-HSPLandroid/icu/impl/number/PatternStringParser;->consumeFormat(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;)V
-HSPLandroid/icu/impl/number/PatternStringParser;->consumeFractionFormat(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;)V
-HSPLandroid/icu/impl/number/PatternStringParser;->consumeIntegerFormat(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;)V
+HSPLandroid/icu/impl/number/PatternStringParser;->consumeFormat(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;)V+]Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParserState;
+HSPLandroid/icu/impl/number/PatternStringParser;->consumeFractionFormat(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;)V+]Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParserState;
+HSPLandroid/icu/impl/number/PatternStringParser;->consumeIntegerFormat(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;)V+]Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParserState;
 HSPLandroid/icu/impl/number/PatternStringParser;->consumeLiteral(Landroid/icu/impl/number/PatternStringParser$ParserState;)V
-HSPLandroid/icu/impl/number/PatternStringParser;->consumePadding(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;Landroid/icu/impl/number/Padder$PadPosition;)V
-HSPLandroid/icu/impl/number/PatternStringParser;->consumePattern(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;)V
+HSPLandroid/icu/impl/number/PatternStringParser;->consumePadding(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;Landroid/icu/impl/number/Padder$PadPosition;)V+]Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParserState;
+HSPLandroid/icu/impl/number/PatternStringParser;->consumePattern(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;)V+]Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParserState;
 HSPLandroid/icu/impl/number/PatternStringParser;->consumeSubpattern(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;)V
 HSPLandroid/icu/impl/number/PatternStringParser;->parseToExistingProperties(Ljava/lang/String;Landroid/icu/impl/number/DecimalFormatProperties;I)V
 HSPLandroid/icu/impl/number/PatternStringParser;->parseToExistingPropertiesImpl(Ljava/lang/String;Landroid/icu/impl/number/DecimalFormatProperties;I)V
 HSPLandroid/icu/impl/number/PatternStringParser;->parseToPatternInfo(Ljava/lang/String;)Landroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;
-HSPLandroid/icu/impl/number/PatternStringParser;->patternInfoToProperties(Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;I)V
+HSPLandroid/icu/impl/number/PatternStringParser;->patternInfoToProperties(Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;I)V+]Landroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;Landroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;
 HSPLandroid/icu/impl/number/PatternStringUtils$PatternSignType;-><clinit>()V
 HSPLandroid/icu/impl/number/PatternStringUtils$PatternSignType;-><init>(Ljava/lang/String;I)V
 HSPLandroid/icu/impl/number/PatternStringUtils$PatternSignType;->values()[Landroid/icu/impl/number/PatternStringUtils$PatternSignType;
 HSPLandroid/icu/impl/number/PatternStringUtils;->patternInfoToStringBuilder(Landroid/icu/impl/number/AffixPatternProvider;ZLandroid/icu/impl/number/PatternStringUtils$PatternSignType;ZLandroid/icu/impl/StandardPlural;ZLjava/lang/StringBuilder;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/impl/number/PropertiesAffixPatternProvider;]Landroid/icu/impl/StandardPlural;Landroid/icu/impl/StandardPlural;
 HSPLandroid/icu/impl/number/PatternStringUtils;->propertiesToPatternString(Landroid/icu/impl/number/DecimalFormatProperties;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/impl/number/PropertiesAffixPatternProvider;]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;
-HSPLandroid/icu/impl/number/PatternStringUtils;->resolveSignDisplay(Landroid/icu/number/NumberFormatter$SignDisplay;Landroid/icu/impl/number/Modifier$Signum;)Landroid/icu/impl/number/PatternStringUtils$PatternSignType;
+HSPLandroid/icu/impl/number/PatternStringUtils;->resolveSignDisplay(Landroid/icu/number/NumberFormatter$SignDisplay;Landroid/icu/impl/number/Modifier$Signum;)Landroid/icu/impl/number/PatternStringUtils$PatternSignType;+]Landroid/icu/impl/number/Modifier$Signum;Landroid/icu/impl/number/Modifier$Signum;]Landroid/icu/number/NumberFormatter$SignDisplay;Landroid/icu/number/NumberFormatter$SignDisplay;
 HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;-><init>(Landroid/icu/impl/number/DecimalFormatProperties;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;
 HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;->charAt(II)C
 HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;->containsSymbolType(I)Z
 HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;->currencyAsDecimal()Z
-HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;->forProperties(Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/impl/number/AffixPatternProvider;
+HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;->forProperties(Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/impl/number/AffixPatternProvider;+]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;
 HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;->getString(I)Ljava/lang/String;
 HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;->hasBody()Z
 HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;->hasCurrencySign()Z
 HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;->hasNegativeSubpattern()Z+]Ljava/lang/String;Ljava/lang/String;
-HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;->length(I)I
-HSPLandroid/icu/impl/number/RoundingUtils;->getMathContextOr34Digits(Landroid/icu/impl/number/DecimalFormatProperties;)Ljava/math/MathContext;
-HSPLandroid/icu/impl/number/RoundingUtils;->getMathContextOrUnlimited(Landroid/icu/impl/number/DecimalFormatProperties;)Ljava/math/MathContext;
+HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;->length(I)I+]Landroid/icu/impl/number/PropertiesAffixPatternProvider;Landroid/icu/impl/number/PropertiesAffixPatternProvider;
+HSPLandroid/icu/impl/number/RoundingUtils;->getMathContextOr34Digits(Landroid/icu/impl/number/DecimalFormatProperties;)Ljava/math/MathContext;+]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;]Ljava/math/RoundingMode;Ljava/math/RoundingMode;
+HSPLandroid/icu/impl/number/RoundingUtils;->getMathContextOrUnlimited(Landroid/icu/impl/number/DecimalFormatProperties;)Ljava/math/MathContext;+]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;]Ljava/math/RoundingMode;Ljava/math/RoundingMode;
 HSPLandroid/icu/impl/number/RoundingUtils;->getRoundingDirection(ZZIILjava/lang/Object;)Z
 HSPLandroid/icu/impl/number/RoundingUtils;->roundsAtMidpoint(I)Z
-HSPLandroid/icu/impl/number/RoundingUtils;->scaleFromProperties(Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/number/Scale;
+HSPLandroid/icu/impl/number/RoundingUtils;->scaleFromProperties(Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/number/Scale;+]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;
 HSPLandroid/icu/impl/number/SimpleModifier;-><init>(Ljava/lang/String;Ljava/text/Format$Field;ZLandroid/icu/impl/number/Modifier$Parameters;)V
 HSPLandroid/icu/impl/number/SimpleModifier;->apply(Landroid/icu/impl/FormattedStringBuilder;II)I
 HSPLandroid/icu/impl/number/parse/AffixMatcher$1;->compare(Landroid/icu/impl/number/parse/AffixMatcher;Landroid/icu/impl/number/parse/AffixMatcher;)I
@@ -9281,7 +9290,7 @@
 HSPLandroid/icu/lang/UCharacter;->foldCase(II)I
 HSPLandroid/icu/lang/UCharacter;->foldCase(IZ)I
 HSPLandroid/icu/lang/UCharacter;->getPropertyValueEnumNoThrow(ILjava/lang/CharSequence;)I
-HSPLandroid/icu/lang/UCharacter;->getType(I)I
+HSPLandroid/icu/lang/UCharacter;->getType(I)I+]Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;
 HSPLandroid/icu/lang/UCharacter;->isDigit(I)Z
 HSPLandroid/icu/lang/UCharacter;->isLowerCase(I)Z
 HSPLandroid/icu/lang/UScript$ScriptMetadata;->getScriptProps(I)I
@@ -9294,13 +9303,13 @@
 HSPLandroid/icu/number/IntegerWidth;->truncateAt(I)Landroid/icu/number/IntegerWidth;
 HSPLandroid/icu/number/IntegerWidth;->zeroFillTo(I)Landroid/icu/number/IntegerWidth;
 HSPLandroid/icu/number/LocalizedNumberFormatter;-><init>(Landroid/icu/number/NumberFormatterSettings;ILjava/lang/Object;)V
-HSPLandroid/icu/number/LocalizedNumberFormatter;->computeCompiled()Z
+HSPLandroid/icu/number/LocalizedNumberFormatter;->computeCompiled()Z+]Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;Ljava/util/concurrent/atomic/AtomicLongFieldUpdater$CASUpdater;]Landroid/icu/number/LocalizedNumberFormatter;Landroid/icu/number/LocalizedNumberFormatter;]Ljava/lang/Long;Ljava/lang/Long;
 HSPLandroid/icu/number/LocalizedNumberFormatter;->create(ILjava/lang/Object;)Landroid/icu/number/LocalizedNumberFormatter;
 HSPLandroid/icu/number/LocalizedNumberFormatter;->create(ILjava/lang/Object;)Landroid/icu/number/NumberFormatterSettings;
 HSPLandroid/icu/number/LocalizedNumberFormatter;->format(D)Landroid/icu/number/FormattedNumber;
 HSPLandroid/icu/number/LocalizedNumberFormatter;->format(J)Landroid/icu/number/FormattedNumber;
 HSPLandroid/icu/number/LocalizedNumberFormatter;->format(Landroid/icu/impl/number/DecimalQuantity;)Landroid/icu/number/FormattedNumber;
-HSPLandroid/icu/number/LocalizedNumberFormatter;->formatImpl(Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;)Landroid/icu/impl/number/MicroProps;
+HSPLandroid/icu/number/LocalizedNumberFormatter;->formatImpl(Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;)Landroid/icu/impl/number/MicroProps;+]Landroid/icu/number/LocalizedNumberFormatter;Landroid/icu/number/LocalizedNumberFormatter;
 HSPLandroid/icu/number/LocalizedNumberFormatter;->getAffixImpl(ZZ)Ljava/lang/String;
 HSPLandroid/icu/number/NumberFormatter;->fromDecimalFormat(Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/number/UnlocalizedNumberFormatter;
 HSPLandroid/icu/number/NumberFormatter;->with()Landroid/icu/number/UnlocalizedNumberFormatter;
@@ -9310,27 +9319,27 @@
 HSPLandroid/icu/number/NumberFormatterImpl;->getPrefixSuffix(BLandroid/icu/impl/StandardPlural;Landroid/icu/impl/FormattedStringBuilder;)I
 HSPLandroid/icu/number/NumberFormatterImpl;->getPrefixSuffixImpl(Landroid/icu/impl/number/MicroPropsGenerator;BLandroid/icu/impl/FormattedStringBuilder;)I
 HSPLandroid/icu/number/NumberFormatterImpl;->getPrefixSuffixStatic(Landroid/icu/impl/number/MacroProps;BLandroid/icu/impl/StandardPlural;Landroid/icu/impl/FormattedStringBuilder;)I
-HSPLandroid/icu/number/NumberFormatterImpl;->macrosToMicroGenerator(Landroid/icu/impl/number/MacroProps;Landroid/icu/impl/number/MicroProps;Z)Landroid/icu/impl/number/MicroPropsGenerator;
+HSPLandroid/icu/number/NumberFormatterImpl;->macrosToMicroGenerator(Landroid/icu/impl/number/MacroProps;Landroid/icu/impl/number/MicroProps;Z)Landroid/icu/impl/number/MicroPropsGenerator;+]Landroid/icu/impl/number/MutablePatternModifier;Landroid/icu/impl/number/MutablePatternModifier;]Landroid/icu/text/NumberingSystem;Landroid/icu/text/NumberingSystem;]Landroid/icu/impl/number/Grouper;Landroid/icu/impl/number/Grouper;]Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/impl/number/PropertiesAffixPatternProvider;]Landroid/icu/number/Precision;Landroid/icu/number/Precision$FractionRounderImpl;]Landroid/icu/impl/number/MutablePatternModifier$ImmutablePatternModifier;Landroid/icu/impl/number/MutablePatternModifier$ImmutablePatternModifier;
 HSPLandroid/icu/number/NumberFormatterImpl;->preProcess(Landroid/icu/impl/number/DecimalQuantity;)Landroid/icu/impl/number/MicroProps;
-HSPLandroid/icu/number/NumberFormatterImpl;->preProcessUnsafe(Landroid/icu/impl/number/MacroProps;Landroid/icu/impl/number/DecimalQuantity;)Landroid/icu/impl/number/MicroProps;
+HSPLandroid/icu/number/NumberFormatterImpl;->preProcessUnsafe(Landroid/icu/impl/number/MacroProps;Landroid/icu/impl/number/DecimalQuantity;)Landroid/icu/impl/number/MicroProps;+]Landroid/icu/impl/number/MicroPropsGenerator;Landroid/icu/impl/number/MutablePatternModifier;]Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
 HSPLandroid/icu/number/NumberFormatterImpl;->unitIsBaseUnit(Landroid/icu/util/MeasureUnit;)Z
 HSPLandroid/icu/number/NumberFormatterImpl;->unitIsCurrency(Landroid/icu/util/MeasureUnit;)Z
 HSPLandroid/icu/number/NumberFormatterImpl;->unitIsPercent(Landroid/icu/util/MeasureUnit;)Z
 HSPLandroid/icu/number/NumberFormatterImpl;->unitIsPermille(Landroid/icu/util/MeasureUnit;)Z
-HSPLandroid/icu/number/NumberFormatterImpl;->writeAffixes(Landroid/icu/impl/number/MicroProps;Landroid/icu/impl/FormattedStringBuilder;II)I
+HSPLandroid/icu/number/NumberFormatterImpl;->writeAffixes(Landroid/icu/impl/number/MicroProps;Landroid/icu/impl/FormattedStringBuilder;II)I+]Landroid/icu/impl/number/Padder;Landroid/icu/impl/number/Padder;]Landroid/icu/impl/number/Modifier;Landroid/icu/impl/number/MutablePatternModifier;,Landroid/icu/impl/number/ConstantAffixModifier;,Landroid/icu/impl/number/ConstantMultiFieldModifier;
 HSPLandroid/icu/number/NumberFormatterImpl;->writeFractionDigits(Landroid/icu/impl/number/MicroProps;Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;I)I
-HSPLandroid/icu/number/NumberFormatterImpl;->writeIntegerDigits(Landroid/icu/impl/number/MicroProps;Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;I)I
-HSPLandroid/icu/number/NumberFormatterImpl;->writeNumber(Landroid/icu/impl/number/MicroProps;Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;I)I
+HSPLandroid/icu/number/NumberFormatterImpl;->writeIntegerDigits(Landroid/icu/impl/number/MicroProps;Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;I)I+]Landroid/icu/impl/number/Grouper;Landroid/icu/impl/number/Grouper;]Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/text/DecimalFormatSymbols;]Landroid/icu/impl/FormattedStringBuilder;Landroid/icu/impl/FormattedStringBuilder;]Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
+HSPLandroid/icu/number/NumberFormatterImpl;->writeNumber(Landroid/icu/impl/number/MicroProps;Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;I)I+]Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;]Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/text/DecimalFormatSymbols;]Landroid/icu/impl/FormattedStringBuilder;Landroid/icu/impl/FormattedStringBuilder;
 HSPLandroid/icu/number/NumberFormatterSettings;-><init>(Landroid/icu/number/NumberFormatterSettings;ILjava/lang/Object;)V
-HSPLandroid/icu/number/NumberFormatterSettings;->macros(Landroid/icu/impl/number/MacroProps;)Landroid/icu/number/NumberFormatterSettings;
+HSPLandroid/icu/number/NumberFormatterSettings;->macros(Landroid/icu/impl/number/MacroProps;)Landroid/icu/number/NumberFormatterSettings;+]Landroid/icu/number/NumberFormatterSettings;Landroid/icu/number/UnlocalizedNumberFormatter;
 HSPLandroid/icu/number/NumberFormatterSettings;->perUnit(Landroid/icu/util/MeasureUnit;)Landroid/icu/number/NumberFormatterSettings;
-HSPLandroid/icu/number/NumberFormatterSettings;->resolve()Landroid/icu/impl/number/MacroProps;
+HSPLandroid/icu/number/NumberFormatterSettings;->resolve()Landroid/icu/impl/number/MacroProps;+]Landroid/icu/impl/number/MacroProps;Landroid/icu/impl/number/MacroProps;
 HSPLandroid/icu/number/NumberFormatterSettings;->unit(Landroid/icu/util/MeasureUnit;)Landroid/icu/number/NumberFormatterSettings;
 HSPLandroid/icu/number/NumberFormatterSettings;->unitWidth(Landroid/icu/number/NumberFormatter$UnitWidth;)Landroid/icu/number/NumberFormatterSettings;
-HSPLandroid/icu/number/NumberPropertyMapper;->create(Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/number/UnlocalizedNumberFormatter;
-HSPLandroid/icu/number/NumberPropertyMapper;->oldToNew(Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/impl/number/MacroProps;+]Ljava/math/MathContext;Ljava/math/MathContext;]Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/text/DecimalFormatSymbols;]Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/impl/number/PropertiesAffixPatternProvider;]Landroid/icu/number/Precision;Landroid/icu/number/Precision$FractionRounderImpl;]Landroid/icu/number/IntegerWidth;Landroid/icu/number/IntegerWidth;]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/number/NumberPropertyMapper;->create(Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/number/UnlocalizedNumberFormatter;+]Landroid/icu/number/UnlocalizedNumberFormatter;Landroid/icu/number/UnlocalizedNumberFormatter;
+HSPLandroid/icu/number/NumberPropertyMapper;->oldToNew(Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/impl/number/MacroProps;+]Ljava/math/MathContext;Ljava/math/MathContext;]Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/text/DecimalFormatSymbols;]Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/impl/number/PropertiesAffixPatternProvider;]Landroid/icu/number/Precision;Landroid/icu/number/Precision$FractionRounderImpl;,Landroid/icu/number/Precision$CurrencyRounderImpl;]Landroid/icu/number/IntegerWidth;Landroid/icu/number/IntegerWidth;]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;]Landroid/icu/number/CurrencyPrecision;Landroid/icu/number/Precision$CurrencyRounderImpl;]Landroid/icu/util/Currency;Landroid/icu/util/Currency;
 HSPLandroid/icu/number/Precision$FractionRounderImpl;-><init>(II)V
-HSPLandroid/icu/number/Precision$FractionRounderImpl;->apply(Landroid/icu/impl/number/DecimalQuantity;)V
+HSPLandroid/icu/number/Precision$FractionRounderImpl;->apply(Landroid/icu/impl/number/DecimalQuantity;)V+]Landroid/icu/number/Precision$FractionRounderImpl;Landroid/icu/number/Precision$FractionRounderImpl;]Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
 HSPLandroid/icu/number/Precision$FractionRounderImpl;->createCopy()Landroid/icu/number/Precision$FractionRounderImpl;
 HSPLandroid/icu/number/Precision$FractionRounderImpl;->createCopy()Landroid/icu/number/Precision;
 HSPLandroid/icu/number/Precision;->-$$Nest$smgetDisplayMagnitudeFraction(I)I
@@ -9343,12 +9352,12 @@
 HSPLandroid/icu/number/Precision;->getRoundingMagnitudeFraction(I)I
 HSPLandroid/icu/number/Precision;->setResolvedMinFraction(Landroid/icu/impl/number/DecimalQuantity;I)V+]Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
 HSPLandroid/icu/number/Precision;->withLocaleData(Landroid/icu/util/Currency;)Landroid/icu/number/Precision;
-HSPLandroid/icu/number/Precision;->withMode(Ljava/math/MathContext;)Landroid/icu/number/Precision;
+HSPLandroid/icu/number/Precision;->withMode(Ljava/math/MathContext;)Landroid/icu/number/Precision;+]Ljava/math/MathContext;Ljava/math/MathContext;
 HSPLandroid/icu/number/Scale;->applyTo(Landroid/icu/impl/number/DecimalQuantity;)V
 HSPLandroid/icu/number/Scale;->powerOfTen(I)Landroid/icu/number/Scale;
 HSPLandroid/icu/number/Scale;->withMathContext(Ljava/math/MathContext;)Landroid/icu/number/Scale;
 HSPLandroid/icu/number/UnlocalizedNumberFormatter;-><init>(Landroid/icu/number/NumberFormatterSettings;ILjava/lang/Object;)V
-HSPLandroid/icu/number/UnlocalizedNumberFormatter;->create(ILjava/lang/Object;)Landroid/icu/number/NumberFormatterSettings;
+HSPLandroid/icu/number/UnlocalizedNumberFormatter;->create(ILjava/lang/Object;)Landroid/icu/number/NumberFormatterSettings;+]Landroid/icu/number/UnlocalizedNumberFormatter;Landroid/icu/number/UnlocalizedNumberFormatter;
 HSPLandroid/icu/number/UnlocalizedNumberFormatter;->create(ILjava/lang/Object;)Landroid/icu/number/UnlocalizedNumberFormatter;
 HSPLandroid/icu/number/UnlocalizedNumberFormatter;->locale(Landroid/icu/util/ULocale;)Landroid/icu/number/LocalizedNumberFormatter;
 HSPLandroid/icu/platform/AndroidDataFiles;->generateIcuDataPath()Ljava/lang/String;
@@ -9405,11 +9414,11 @@
 HSPLandroid/icu/text/ConstrainedFieldPosition;->getFieldValue()Ljava/lang/Object;
 HSPLandroid/icu/text/ConstrainedFieldPosition;->getLimit()I
 HSPLandroid/icu/text/ConstrainedFieldPosition;->getStart()I
-HSPLandroid/icu/text/ConstrainedFieldPosition;->matchesField(Ljava/text/Format$Field;Ljava/lang/Object;)Z
+HSPLandroid/icu/text/ConstrainedFieldPosition;->matchesField(Ljava/text/Format$Field;Ljava/lang/Object;)Z+]Landroid/icu/text/ConstrainedFieldPosition$ConstraintType;Landroid/icu/text/ConstrainedFieldPosition$ConstraintType;
 HSPLandroid/icu/text/ConstrainedFieldPosition;->reset()V
 HSPLandroid/icu/text/ConstrainedFieldPosition;->setState(Ljava/text/Format$Field;Ljava/lang/Object;II)V
 HSPLandroid/icu/text/CurrencyDisplayNames;-><init>()V
-HSPLandroid/icu/text/CurrencyDisplayNames;->getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/CurrencyDisplayNames;
+HSPLandroid/icu/text/CurrencyDisplayNames;->getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/CurrencyDisplayNames;+]Landroid/icu/impl/CurrencyData$CurrencyDisplayInfoProvider;Landroid/icu/impl/ICUCurrencyDisplayInfoProvider;
 HSPLandroid/icu/text/CurrencyMetaInfo$CurrencyDigits;-><init>(II)V
 HSPLandroid/icu/text/CurrencyMetaInfo$CurrencyFilter;-><init>(Ljava/lang/String;Ljava/lang/String;JJZ)V
 HSPLandroid/icu/text/CurrencyMetaInfo$CurrencyFilter;->onDate(Ljava/util/Date;)Landroid/icu/text/CurrencyMetaInfo$CurrencyFilter;
@@ -9431,7 +9440,7 @@
 HSPLandroid/icu/text/DateFormat;->getPatternInstance(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;
 HSPLandroid/icu/text/DateFormat;->getTimeInstance(ILandroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;
 HSPLandroid/icu/text/DateFormat;->setCalendar(Landroid/icu/util/Calendar;)V
-HSPLandroid/icu/text/DateFormat;->setContext(Landroid/icu/text/DisplayContext;)V
+HSPLandroid/icu/text/DateFormat;->setContext(Landroid/icu/text/DisplayContext;)V+]Landroid/icu/text/DisplayContext;Landroid/icu/text/DisplayContext;
 HSPLandroid/icu/text/DateFormat;->setTimeZone(Landroid/icu/util/TimeZone;)V
 HSPLandroid/icu/text/DateFormatSymbols$1;->createInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/icu/text/DateFormatSymbols$1;->createInstance(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateFormatSymbols$AospExtendedDateFormatSymbols;
@@ -9446,18 +9455,18 @@
 HSPLandroid/icu/text/DateFormatSymbols;-><init>(Landroid/icu/util/Calendar;Landroid/icu/util/ULocale;)V
 HSPLandroid/icu/text/DateFormatSymbols;-><init>(Landroid/icu/util/ULocale;)V
 HSPLandroid/icu/text/DateFormatSymbols;-><init>(Landroid/icu/util/ULocale;Landroid/icu/impl/ICUResourceBundle;Ljava/lang/String;Landroid/icu/text/DateFormatSymbols$AospExtendedDateFormatSymbols;)V
-HSPLandroid/icu/text/DateFormatSymbols;-><init>(Ljava/lang/Class;Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/text/DateFormatSymbols;-><init>(Ljava/lang/Class;Landroid/icu/util/ULocale;)V+]Ljava/lang/String;Ljava/lang/String;]Landroid/icu/text/DateFormatSymbols;Landroid/icu/text/DateFormatSymbols;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/icu/text/DateFormatSymbols;-><init>(Ljava/lang/Class;Ljava/util/Locale;)V
 HSPLandroid/icu/text/DateFormatSymbols;->duplicate([Ljava/lang/String;)[Ljava/lang/String;
 HSPLandroid/icu/text/DateFormatSymbols;->getAmPmStrings()[Ljava/lang/String;
 HSPLandroid/icu/text/DateFormatSymbols;->getEras()[Ljava/lang/String;
-HSPLandroid/icu/text/DateFormatSymbols;->getExtendedInstance(Landroid/icu/util/ULocale;Ljava/lang/String;)Landroid/icu/text/DateFormatSymbols$AospExtendedDateFormatSymbols;
+HSPLandroid/icu/text/DateFormatSymbols;->getExtendedInstance(Landroid/icu/util/ULocale;Ljava/lang/String;)Landroid/icu/text/DateFormatSymbols$AospExtendedDateFormatSymbols;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;]Landroid/icu/impl/CacheBase;Landroid/icu/text/DateFormatSymbols$1;
 HSPLandroid/icu/text/DateFormatSymbols;->getMonths(II)[Ljava/lang/String;
 HSPLandroid/icu/text/DateFormatSymbols;->getWeekdays(II)[Ljava/lang/String;
 HSPLandroid/icu/text/DateFormatSymbols;->initializeData(Landroid/icu/text/DateFormatSymbols;)V
 HSPLandroid/icu/text/DateFormatSymbols;->initializeData(Landroid/icu/util/ULocale;Landroid/icu/impl/ICUResourceBundle;Ljava/lang/String;)V
 HSPLandroid/icu/text/DateFormatSymbols;->initializeData(Landroid/icu/util/ULocale;Landroid/icu/impl/ICUResourceBundle;Ljava/lang/String;Landroid/icu/text/DateFormatSymbols$AospExtendedDateFormatSymbols;)V
-HSPLandroid/icu/text/DateFormatSymbols;->initializeData(Landroid/icu/util/ULocale;Ljava/lang/String;)V
+HSPLandroid/icu/text/DateFormatSymbols;->initializeData(Landroid/icu/util/ULocale;Ljava/lang/String;)V+]Landroid/icu/text/DateFormatSymbols;Landroid/icu/text/DateFormatSymbols;
 HSPLandroid/icu/text/DateFormatSymbols;->loadDayPeriodStrings(Ljava/util/Map;)[Ljava/lang/String;
 HSPLandroid/icu/text/DateFormatSymbols;->setLocale(Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;)V
 HSPLandroid/icu/text/DateFormatSymbols;->setTimeSeparatorString(Ljava/lang/String;)V
@@ -9465,7 +9474,7 @@
 HSPLandroid/icu/text/DateIntervalFormat;->adjustFieldWidth(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IZ)Ljava/lang/String;
 HSPLandroid/icu/text/DateIntervalFormat;->concatSingleDate2TimeInterval(Ljava/lang/String;Ljava/lang/String;ILjava/util/Map;)V
 HSPLandroid/icu/text/DateIntervalFormat;->format(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
-HSPLandroid/icu/text/DateIntervalFormat;->formatImpl(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;Landroid/icu/text/DateIntervalFormat$FormatOutput;Ljava/util/List;)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/DateIntervalFormat;->formatImpl(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;Landroid/icu/text/DateIntervalFormat$FormatOutput;Ljava/util/List;)Ljava/lang/StringBuffer;+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;]Landroid/icu/text/SimpleDateFormat;Landroid/icu/text/SimpleDateFormat;
 HSPLandroid/icu/text/DateIntervalFormat;->genIntervalPattern(ILjava/lang/String;Ljava/lang/String;ILjava/util/Map;)Landroid/icu/text/DateIntervalFormat$SkeletonAndItsBestMatch;
 HSPLandroid/icu/text/DateIntervalFormat;->genSeparateDateTimePtn(Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Landroid/icu/text/DateTimePatternGenerator;)Z
 HSPLandroid/icu/text/DateIntervalFormat;->getConcatenationPattern(Landroid/icu/util/ULocale;)Ljava/lang/String;
@@ -9502,9 +9511,9 @@
 HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->equals(Ljava/lang/Object;)Z
 HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->fieldIsNumeric(I)Z
 HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->getBasePattern()Ljava/lang/String;
-HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->getDistance(Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;ILandroid/icu/text/DateTimePatternGenerator$DistanceInfo;)I
+HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->getDistance(Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;ILandroid/icu/text/DateTimePatternGenerator$DistanceInfo;)I+]Landroid/icu/text/DateTimePatternGenerator$DistanceInfo;Landroid/icu/text/DateTimePatternGenerator$DistanceInfo;
 HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->getFieldMask()I
-HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->set(Ljava/lang/String;Landroid/icu/text/DateTimePatternGenerator$FormatParser;Z)Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;
+HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->set(Ljava/lang/String;Landroid/icu/text/DateTimePatternGenerator$FormatParser;Z)Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;+]Landroid/icu/text/DateTimePatternGenerator$VariableField;Landroid/icu/text/DateTimePatternGenerator$VariableField;]Landroid/icu/text/DateTimePatternGenerator$FormatParser;Landroid/icu/text/DateTimePatternGenerator$FormatParser;]Landroid/icu/text/DateTimePatternGenerator$SkeletonFields;Landroid/icu/text/DateTimePatternGenerator$SkeletonFields;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLandroid/icu/text/DateTimePatternGenerator$DisplayWidth;->cldrKey()Ljava/lang/String;
 HSPLandroid/icu/text/DateTimePatternGenerator$DistanceInfo;-><init>()V
 HSPLandroid/icu/text/DateTimePatternGenerator$DistanceInfo;->addExtra(I)V
@@ -9516,7 +9525,7 @@
 HSPLandroid/icu/text/DateTimePatternGenerator$FormatParser;->getItems()Ljava/util/List;
 HSPLandroid/icu/text/DateTimePatternGenerator$FormatParser;->quoteLiteral(Ljava/lang/String;)Ljava/lang/Object;
 HSPLandroid/icu/text/DateTimePatternGenerator$FormatParser;->set(Ljava/lang/String;)Landroid/icu/text/DateTimePatternGenerator$FormatParser;
-HSPLandroid/icu/text/DateTimePatternGenerator$FormatParser;->set(Ljava/lang/String;Z)Landroid/icu/text/DateTimePatternGenerator$FormatParser;
+HSPLandroid/icu/text/DateTimePatternGenerator$FormatParser;->set(Ljava/lang/String;Z)Landroid/icu/text/DateTimePatternGenerator$FormatParser;+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;]Landroid/icu/impl/PatternTokenizer;Landroid/icu/impl/PatternTokenizer;
 HSPLandroid/icu/text/DateTimePatternGenerator$PatternInfo;-><init>()V
 HSPLandroid/icu/text/DateTimePatternGenerator$PatternWithMatcher;-><init>(Ljava/lang/String;Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;)V
 HSPLandroid/icu/text/DateTimePatternGenerator$PatternWithSkeletonFlag;-><init>(Ljava/lang/String;Z)V
@@ -9582,10 +9591,10 @@
 HSPLandroid/icu/text/DateTimePatternGenerator;->setFieldDisplayName(ILandroid/icu/text/DateTimePatternGenerator$DisplayWidth;Ljava/lang/String;)V
 HSPLandroid/icu/text/DecimalFormat;-><init>(Ljava/lang/String;Landroid/icu/text/DecimalFormatSymbols;)V
 HSPLandroid/icu/text/DecimalFormat;-><init>(Ljava/lang/String;Landroid/icu/text/DecimalFormatSymbols;I)V
-HSPLandroid/icu/text/DecimalFormat;->clone()Ljava/lang/Object;
-HSPLandroid/icu/text/DecimalFormat;->fieldPositionHelper(Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;Ljava/text/FieldPosition;I)V
+HSPLandroid/icu/text/DecimalFormat;->clone()Ljava/lang/Object;+]Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/text/DecimalFormatSymbols;]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;]Landroid/icu/text/DecimalFormat;Landroid/icu/text/DecimalFormat;
+HSPLandroid/icu/text/DecimalFormat;->fieldPositionHelper(Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;Ljava/text/FieldPosition;I)V+]Ljava/text/FieldPosition;Ljava/text/DontCareFieldPosition;]Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
 HSPLandroid/icu/text/DecimalFormat;->format(DLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
-HSPLandroid/icu/text/DecimalFormat;->format(JLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/DecimalFormat;->format(JLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;+]Landroid/icu/number/LocalizedNumberFormatter;Landroid/icu/number/LocalizedNumberFormatter;]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;
 HSPLandroid/icu/text/DecimalFormat;->getDecimalFormatSymbols()Landroid/icu/text/DecimalFormatSymbols;
 HSPLandroid/icu/text/DecimalFormat;->getMaximumFractionDigits()I
 HSPLandroid/icu/text/DecimalFormat;->getMaximumIntegerDigits()I
@@ -9599,14 +9608,14 @@
 HSPLandroid/icu/text/DecimalFormat;->isParseBigDecimal()Z
 HSPLandroid/icu/text/DecimalFormat;->isParseIntegerOnly()Z
 HSPLandroid/icu/text/DecimalFormat;->parse(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/lang/Number;+]Landroid/icu/impl/number/parse/ParsedNumber;Landroid/icu/impl/number/parse/ParsedNumber;]Ljava/text/ParsePosition;Ljava/text/ParsePosition;]Landroid/icu/impl/number/parse/NumberParserImpl;Landroid/icu/impl/number/parse/NumberParserImpl;]Landroid/icu/text/DecimalFormat;Landroid/icu/text/DecimalFormat;
-HSPLandroid/icu/text/DecimalFormat;->refreshFormatter()V
+HSPLandroid/icu/text/DecimalFormat;->refreshFormatter()V+]Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/text/DecimalFormatSymbols;]Landroid/icu/number/UnlocalizedNumberFormatter;Landroid/icu/number/UnlocalizedNumberFormatter;]Landroid/icu/text/DecimalFormat;Landroid/icu/text/DecimalFormat;
 HSPLandroid/icu/text/DecimalFormat;->setCurrency(Landroid/icu/util/Currency;)V
 HSPLandroid/icu/text/DecimalFormat;->setDecimalSeparatorAlwaysShown(Z)V
 HSPLandroid/icu/text/DecimalFormat;->setGroupingUsed(Z)V
 HSPLandroid/icu/text/DecimalFormat;->setMaximumFractionDigits(I)V
-HSPLandroid/icu/text/DecimalFormat;->setMaximumIntegerDigits(I)V
+HSPLandroid/icu/text/DecimalFormat;->setMaximumIntegerDigits(I)V+]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;]Landroid/icu/text/DecimalFormat;Landroid/icu/text/DecimalFormat;
 HSPLandroid/icu/text/DecimalFormat;->setMinimumFractionDigits(I)V
-HSPLandroid/icu/text/DecimalFormat;->setMinimumIntegerDigits(I)V
+HSPLandroid/icu/text/DecimalFormat;->setMinimumIntegerDigits(I)V+]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;]Landroid/icu/text/DecimalFormat;Landroid/icu/text/DecimalFormat;
 HSPLandroid/icu/text/DecimalFormat;->setParseIntegerOnly(Z)V
 HSPLandroid/icu/text/DecimalFormat;->setParseStrictMode(Landroid/icu/impl/number/DecimalFormatProperties$ParseMode;)V
 HSPLandroid/icu/text/DecimalFormat;->setPropertiesFromPattern(Ljava/lang/String;I)V
@@ -9652,7 +9661,7 @@
 HSPLandroid/icu/text/DecimalFormatSymbols;->getULocale()Landroid/icu/util/ULocale;
 HSPLandroid/icu/text/DecimalFormatSymbols;->getZeroDigit()C
 HSPLandroid/icu/text/DecimalFormatSymbols;->initSpacingInfo(Landroid/icu/impl/CurrencyData$CurrencySpacingInfo;)V
-HSPLandroid/icu/text/DecimalFormatSymbols;->initialize(Landroid/icu/util/ULocale;Landroid/icu/text/NumberingSystem;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->initialize(Landroid/icu/util/ULocale;Landroid/icu/text/NumberingSystem;)V+]Landroid/icu/impl/CurrencyData$CurrencyDisplayInfoProvider;Landroid/icu/impl/ICUCurrencyDisplayInfoProvider;]Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;]Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/text/DecimalFormatSymbols;]Landroid/icu/impl/CurrencyData$CurrencyDisplayInfo;Landroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;
 HSPLandroid/icu/text/DecimalFormatSymbols;->loadData(Landroid/icu/util/ULocale;)Landroid/icu/text/DecimalFormatSymbols$CacheData;
 HSPLandroid/icu/text/DecimalFormatSymbols;->setApproximatelySignString(Ljava/lang/String;)V
 HSPLandroid/icu/text/DecimalFormatSymbols;->setCurrency(Landroid/icu/util/Currency;)V
@@ -9702,7 +9711,7 @@
 HSPLandroid/icu/text/Normalizer2;->getNFCInstance()Landroid/icu/text/Normalizer2;
 HSPLandroid/icu/text/Normalizer2;->getNFDInstance()Landroid/icu/text/Normalizer2;
 HSPLandroid/icu/text/Normalizer2;->getNFKDInstance()Landroid/icu/text/Normalizer2;
-HSPLandroid/icu/text/Normalizer2;->normalize(Ljava/lang/CharSequence;)Ljava/lang/String;
+HSPLandroid/icu/text/Normalizer2;->normalize(Ljava/lang/CharSequence;)Ljava/lang/String;+]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/icu/text/Normalizer2;Landroid/icu/impl/Norm2AllModes$DecomposeNormalizer2;
 HSPLandroid/icu/text/Normalizer;->normalize(Ljava/lang/String;Landroid/icu/text/Normalizer$Mode;)Ljava/lang/String;
 HSPLandroid/icu/text/NumberFormat;-><init>()V
 HSPLandroid/icu/text/NumberFormat;->clone()Ljava/lang/Object;
@@ -9712,7 +9721,7 @@
 HSPLandroid/icu/text/NumberFormat;->getInstance(Ljava/util/Locale;I)Landroid/icu/text/NumberFormat;
 HSPLandroid/icu/text/NumberFormat;->getPattern(Landroid/icu/util/ULocale;I)Ljava/lang/String;
 HSPLandroid/icu/text/NumberFormat;->getPatternForStyle(Landroid/icu/util/ULocale;I)Ljava/lang/String;
-HSPLandroid/icu/text/NumberFormat;->getPatternForStyleAndNumberingSystem(Landroid/icu/util/ULocale;Ljava/lang/String;I)Ljava/lang/String;
+HSPLandroid/icu/text/NumberFormat;->getPatternForStyleAndNumberingSystem(Landroid/icu/util/ULocale;Ljava/lang/String;I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/impl/ICUResourceBundle;Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;
 HSPLandroid/icu/text/NumberFormat;->getShim()Landroid/icu/text/NumberFormat$NumberFormatShim;
 HSPLandroid/icu/text/NumberFormatServiceShim$NFService$1RBNumberFormatFactory;->handleCreate(Landroid/icu/util/ULocale;ILandroid/icu/impl/ICUService;)Ljava/lang/Object;
 HSPLandroid/icu/text/NumberFormatServiceShim;->createInstance(Landroid/icu/util/ULocale;I)Landroid/icu/text/NumberFormat;
@@ -9720,7 +9729,7 @@
 HSPLandroid/icu/text/NumberingSystem$1;->createInstance(Ljava/lang/String;Landroid/icu/text/NumberingSystem$LocaleLookupData;)Landroid/icu/text/NumberingSystem;
 HSPLandroid/icu/text/NumberingSystem$LocaleLookupData;-><init>(Landroid/icu/util/ULocale;Ljava/lang/String;)V
 HSPLandroid/icu/text/NumberingSystem;->getDescription()Ljava/lang/String;
-HSPLandroid/icu/text/NumberingSystem;->getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/NumberingSystem;
+HSPLandroid/icu/text/NumberingSystem;->getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/NumberingSystem;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;]Landroid/icu/impl/CacheBase;Landroid/icu/text/NumberingSystem$1;
 HSPLandroid/icu/text/NumberingSystem;->getInstanceByName(Ljava/lang/String;)Landroid/icu/text/NumberingSystem;
 HSPLandroid/icu/text/NumberingSystem;->getName()Ljava/lang/String;
 HSPLandroid/icu/text/NumberingSystem;->getRadix()I
@@ -9757,7 +9766,7 @@
 HSPLandroid/icu/text/PluralRules$Operand;->valueOf(Ljava/lang/String;)Landroid/icu/text/PluralRules$Operand;
 HSPLandroid/icu/text/PluralRules$Operand;->values()[Landroid/icu/text/PluralRules$Operand;
 HSPLandroid/icu/text/PluralRules$RangeConstraint;-><init>(IZLandroid/icu/text/PluralRules$Operand;ZDD[J)V
-HSPLandroid/icu/text/PluralRules$RangeConstraint;->isFulfilled(Landroid/icu/text/PluralRules$IFixedDecimal;)Z
+HSPLandroid/icu/text/PluralRules$RangeConstraint;->isFulfilled(Landroid/icu/text/PluralRules$IFixedDecimal;)Z+]Landroid/icu/text/PluralRules$IFixedDecimal;Landroid/icu/text/PluralRules$FixedDecimal;
 HSPLandroid/icu/text/PluralRules$Rule;-><init>(Ljava/lang/String;Landroid/icu/text/PluralRules$Constraint;Landroid/icu/text/PluralRules$FixedDecimalSamples;Landroid/icu/text/PluralRules$FixedDecimalSamples;)V
 HSPLandroid/icu/text/PluralRules$Rule;->appliesTo(Landroid/icu/text/PluralRules$IFixedDecimal;)Z
 HSPLandroid/icu/text/PluralRules$Rule;->getKeyword()Ljava/lang/String;
@@ -9766,7 +9775,7 @@
 HSPLandroid/icu/text/PluralRules$RuleList;->finish()Landroid/icu/text/PluralRules$RuleList;
 HSPLandroid/icu/text/PluralRules$RuleList;->getKeywords()Ljava/util/Set;
 HSPLandroid/icu/text/PluralRules$RuleList;->select(Landroid/icu/text/PluralRules$IFixedDecimal;)Ljava/lang/String;
-HSPLandroid/icu/text/PluralRules$RuleList;->selectRule(Landroid/icu/text/PluralRules$IFixedDecimal;)Landroid/icu/text/PluralRules$Rule;
+HSPLandroid/icu/text/PluralRules$RuleList;->selectRule(Landroid/icu/text/PluralRules$IFixedDecimal;)Landroid/icu/text/PluralRules$Rule;+]Landroid/icu/text/PluralRules$Rule;Landroid/icu/text/PluralRules$Rule;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLandroid/icu/text/PluralRules$SimpleTokenizer;->split(Ljava/lang/String;)[Ljava/lang/String;
 HSPLandroid/icu/text/PluralRules;-><init>(Landroid/icu/text/PluralRules$RuleList;Landroid/icu/impl/number/range/StandardPluralRanges;)V
 HSPLandroid/icu/text/PluralRules;->forLocale(Landroid/icu/util/ULocale;)Landroid/icu/text/PluralRules;
@@ -9807,13 +9816,13 @@
 HSPLandroid/icu/text/ReplaceableString;->getChars(II[CI)V
 HSPLandroid/icu/text/ReplaceableString;->length()I
 HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;-><init>(Landroid/icu/text/RuleBasedBreakIterator;)V
-HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;-><init>(Landroid/icu/text/RuleBasedBreakIterator;Landroid/icu/text/RuleBasedBreakIterator$BreakCache;)V
+HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;-><init>(Landroid/icu/text/RuleBasedBreakIterator;Landroid/icu/text/RuleBasedBreakIterator$BreakCache;)V+][S[S][I[I
 HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->addFollowing(IIZ)V
 HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->addPreceding(IIZ)Z
 HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->current()I
 HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->following(I)V
-HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->next()V
-HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->populateFollowing()Z
+HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->next()V+]Landroid/icu/text/RuleBasedBreakIterator$BreakCache;Landroid/icu/text/RuleBasedBreakIterator$BreakCache;
+HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->populateFollowing()Z+]Landroid/icu/text/RuleBasedBreakIterator$DictionaryCache;Landroid/icu/text/RuleBasedBreakIterator$DictionaryCache;]Landroid/icu/text/RuleBasedBreakIterator$BreakCache;Landroid/icu/text/RuleBasedBreakIterator$BreakCache;
 HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->populateNear(I)Z
 HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->populatePreceding()Z
 HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->preceding(I)V
@@ -9822,19 +9831,19 @@
 HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->reset(II)V
 HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->seek(I)Z
 HSPLandroid/icu/text/RuleBasedBreakIterator$DictionaryCache;-><init>(Landroid/icu/text/RuleBasedBreakIterator;)V
-HSPLandroid/icu/text/RuleBasedBreakIterator$DictionaryCache;-><init>(Landroid/icu/text/RuleBasedBreakIterator;Landroid/icu/text/RuleBasedBreakIterator$DictionaryCache;)V
+HSPLandroid/icu/text/RuleBasedBreakIterator$DictionaryCache;-><init>(Landroid/icu/text/RuleBasedBreakIterator;Landroid/icu/text/RuleBasedBreakIterator$DictionaryCache;)V+]Landroid/icu/impl/breakiter/DictionaryBreakEngine$DequeI;Landroid/icu/impl/breakiter/DictionaryBreakEngine$DequeI;
 HSPLandroid/icu/text/RuleBasedBreakIterator$DictionaryCache;->following(I)Z
 HSPLandroid/icu/text/RuleBasedBreakIterator$DictionaryCache;->preceding(I)Z
 HSPLandroid/icu/text/RuleBasedBreakIterator$DictionaryCache;->reset()V
 HSPLandroid/icu/text/RuleBasedBreakIterator;-><init>()V
 HSPLandroid/icu/text/RuleBasedBreakIterator;->CISetIndex32(Ljava/text/CharacterIterator;I)I
 HSPLandroid/icu/text/RuleBasedBreakIterator;->checkOffset(ILjava/text/CharacterIterator;)V
-HSPLandroid/icu/text/RuleBasedBreakIterator;->clone()Ljava/lang/Object;
+HSPLandroid/icu/text/RuleBasedBreakIterator;->clone()Ljava/lang/Object;+]Ljava/text/CharacterIterator;Ljava/text/StringCharacterIterator;
 HSPLandroid/icu/text/RuleBasedBreakIterator;->first()I
 HSPLandroid/icu/text/RuleBasedBreakIterator;->following(I)I
 HSPLandroid/icu/text/RuleBasedBreakIterator;->getInstanceFromCompiledRules(Ljava/nio/ByteBuffer;)Landroid/icu/text/RuleBasedBreakIterator;
 HSPLandroid/icu/text/RuleBasedBreakIterator;->getText()Ljava/text/CharacterIterator;
-HSPLandroid/icu/text/RuleBasedBreakIterator;->handleNext()I
+HSPLandroid/icu/text/RuleBasedBreakIterator;->handleNext()I+]Landroid/icu/impl/RBBIDataWrapper;Landroid/icu/impl/RBBIDataWrapper;]Landroid/icu/util/CodePointTrie;Landroid/icu/util/CodePointTrie$Fast8;]Ljava/text/CharacterIterator;Ljava/text/StringCharacterIterator;
 HSPLandroid/icu/text/RuleBasedBreakIterator;->handleSafePrevious(I)I
 HSPLandroid/icu/text/RuleBasedBreakIterator;->isBoundary(I)Z
 HSPLandroid/icu/text/RuleBasedBreakIterator;->next()I
@@ -9873,10 +9882,10 @@
 HSPLandroid/icu/text/SimpleDateFormat$PatternItem;-><init>(CI)V
 HSPLandroid/icu/text/SimpleDateFormat;-><init>(Ljava/lang/String;Landroid/icu/text/DateFormatSymbols;Landroid/icu/util/Calendar;Landroid/icu/text/NumberFormat;Landroid/icu/util/ULocale;ZLjava/lang/String;)V
 HSPLandroid/icu/text/SimpleDateFormat;-><init>(Ljava/lang/String;Landroid/icu/util/ULocale;)V
-HSPLandroid/icu/text/SimpleDateFormat;->fastZeroPaddingNumber(Ljava/lang/StringBuffer;III)V
-HSPLandroid/icu/text/SimpleDateFormat;->format(Landroid/icu/util/Calendar;Landroid/icu/text/DisplayContext;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;Ljava/util/List;)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/SimpleDateFormat;->fastZeroPaddingNumber(Ljava/lang/StringBuffer;III)V+]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/SimpleDateFormat;->format(Landroid/icu/util/Calendar;Landroid/icu/text/DisplayContext;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;Ljava/util/List;)Ljava/lang/StringBuffer;+]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;]Ljava/text/FieldPosition;Ljava/text/FieldPosition;]Landroid/icu/text/SimpleDateFormat;Landroid/icu/text/SimpleDateFormat;
 HSPLandroid/icu/text/SimpleDateFormat;->format(Landroid/icu/util/Calendar;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
-HSPLandroid/icu/text/SimpleDateFormat;->format(Landroid/icu/util/Calendar;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;Ljava/util/List;)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/SimpleDateFormat;->format(Landroid/icu/util/Calendar;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;Ljava/util/List;)Ljava/lang/StringBuffer;+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;]Landroid/icu/text/SimpleDateFormat;Landroid/icu/text/SimpleDateFormat;
 HSPLandroid/icu/text/SimpleDateFormat;->getIndexFromChar(C)I
 HSPLandroid/icu/text/SimpleDateFormat;->getInstance(Landroid/icu/util/Calendar$FormatConfiguration;)Landroid/icu/text/SimpleDateFormat;
 HSPLandroid/icu/text/SimpleDateFormat;->getLocale()Landroid/icu/util/ULocale;
@@ -9902,7 +9911,7 @@
 HSPLandroid/icu/text/TimeZoneNames;->getInstance(Ljava/util/Locale;)Landroid/icu/text/TimeZoneNames;
 HSPLandroid/icu/text/UCharacterIterator;-><init>()V
 HSPLandroid/icu/text/UCharacterIterator;->getInstance(Ljava/lang/String;)Landroid/icu/text/UCharacterIterator;
-HSPLandroid/icu/text/UCharacterIterator;->getText()Ljava/lang/String;
+HSPLandroid/icu/text/UCharacterIterator;->getText()Ljava/lang/String;+]Landroid/icu/text/UCharacterIterator;Landroid/icu/impl/ReplaceableUCharacterIterator;
 HSPLandroid/icu/text/UCharacterIterator;->getText([C)I
 HSPLandroid/icu/text/UCharacterIterator;->setToStart()V
 HSPLandroid/icu/text/UFormat;-><init>()V
@@ -9981,17 +9990,17 @@
 HSPLandroid/icu/util/Calendar$WeekDataCache;->createInstance(Ljava/lang/String;Ljava/lang/String;)Landroid/icu/util/Calendar$WeekData;
 HSPLandroid/icu/util/Calendar;-><init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V
 HSPLandroid/icu/util/Calendar;->clone()Ljava/lang/Object;
-HSPLandroid/icu/util/Calendar;->complete()V
-HSPLandroid/icu/util/Calendar;->computeFields()V
-HSPLandroid/icu/util/Calendar;->computeGregorianAndDOWFields(I)V
+HSPLandroid/icu/util/Calendar;->complete()V+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;
+HSPLandroid/icu/util/Calendar;->computeFields()V+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;]Landroid/icu/util/TimeZone;Landroid/icu/impl/OlsonTimeZone;
+HSPLandroid/icu/util/Calendar;->computeGregorianAndDOWFields(I)V+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;
 HSPLandroid/icu/util/Calendar;->computeGregorianFields(I)V
-HSPLandroid/icu/util/Calendar;->computeWeekFields()V
+HSPLandroid/icu/util/Calendar;->computeWeekFields()V+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;
 HSPLandroid/icu/util/Calendar;->createInstance(Landroid/icu/util/ULocale;)Landroid/icu/util/Calendar;
 HSPLandroid/icu/util/Calendar;->floorDivide(II[I)I
 HSPLandroid/icu/util/Calendar;->floorDivide(JI[I)I
 HSPLandroid/icu/util/Calendar;->floorDivide(JJ)J
 HSPLandroid/icu/util/Calendar;->formatHelper(Landroid/icu/util/Calendar;Landroid/icu/util/ULocale;II)Landroid/icu/text/DateFormat;
-HSPLandroid/icu/util/Calendar;->get(I)I
+HSPLandroid/icu/util/Calendar;->get(I)I+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;
 HSPLandroid/icu/util/Calendar;->getCalendarTypeForLocale(Landroid/icu/util/ULocale;)Landroid/icu/impl/CalType;
 HSPLandroid/icu/util/Calendar;->getDateTimeFormat(IILandroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;
 HSPLandroid/icu/util/Calendar;->getDateTimeFormatString(Landroid/icu/util/ULocale;Ljava/lang/String;II)Ljava/lang/String;
@@ -10018,22 +10027,22 @@
 HSPLandroid/icu/util/Calendar;->getWeekDataForRegionInternal(Ljava/lang/String;)Landroid/icu/util/Calendar$WeekData;
 HSPLandroid/icu/util/Calendar;->handleCreateFields()[I
 HSPLandroid/icu/util/Calendar;->handleGetDateFormat(Ljava/lang/String;Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;
-HSPLandroid/icu/util/Calendar;->initInternal()V
+HSPLandroid/icu/util/Calendar;->initInternal()V+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;
 HSPLandroid/icu/util/Calendar;->internalSet(II)V
-HSPLandroid/icu/util/Calendar;->isEquivalentTo(Landroid/icu/util/Calendar;)Z
+HSPLandroid/icu/util/Calendar;->isEquivalentTo(Landroid/icu/util/Calendar;)Z+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;]Landroid/icu/util/TimeZone;Landroid/icu/impl/OlsonTimeZone;]Ljava/lang/Object;Landroid/icu/util/GregorianCalendar;
 HSPLandroid/icu/util/Calendar;->isLenient()Z
 HSPLandroid/icu/util/Calendar;->julianDayToDayOfWeek(I)I
-HSPLandroid/icu/util/Calendar;->setCalendarLocale(Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/util/Calendar;->setCalendarLocale(Landroid/icu/util/ULocale;)V+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;]Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;
 HSPLandroid/icu/util/Calendar;->setFirstDayOfWeek(I)V
 HSPLandroid/icu/util/Calendar;->setLocale(Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;)V
 HSPLandroid/icu/util/Calendar;->setMinimalDaysInFirstWeek(I)V
 HSPLandroid/icu/util/Calendar;->setTime(Ljava/util/Date;)V
 HSPLandroid/icu/util/Calendar;->setTimeInMillis(J)V
 HSPLandroid/icu/util/Calendar;->setTimeZone(Landroid/icu/util/TimeZone;)V
-HSPLandroid/icu/util/Calendar;->setWeekData(Landroid/icu/util/Calendar$WeekData;)Landroid/icu/util/Calendar;
-HSPLandroid/icu/util/Calendar;->setWeekData(Ljava/lang/String;)V
-HSPLandroid/icu/util/Calendar;->weekNumber(II)I
-HSPLandroid/icu/util/Calendar;->weekNumber(III)I
+HSPLandroid/icu/util/Calendar;->setWeekData(Landroid/icu/util/Calendar$WeekData;)Landroid/icu/util/Calendar;+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;
+HSPLandroid/icu/util/Calendar;->setWeekData(Ljava/lang/String;)V+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;]Landroid/icu/util/Calendar$WeekDataCache;Landroid/icu/util/Calendar$WeekDataCache;
+HSPLandroid/icu/util/Calendar;->weekNumber(II)I+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;
+HSPLandroid/icu/util/Calendar;->weekNumber(III)I+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;
 HSPLandroid/icu/util/CharsTrie;-><init>(Ljava/lang/CharSequence;I)V
 HSPLandroid/icu/util/CharsTrie;->branchNext(III)Landroid/icu/util/BytesTrie$Result;+]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/icu/util/CharsTrie;->first(I)Landroid/icu/util/BytesTrie$Result;
@@ -10066,7 +10075,7 @@
 HSPLandroid/icu/util/CodePointTrie$Fast16;->bmpGet(I)I
 HSPLandroid/icu/util/CodePointTrie$Fast16;->get(I)I
 HSPLandroid/icu/util/CodePointTrie$Fast8;-><init>([C[BIII)V
-HSPLandroid/icu/util/CodePointTrie$Fast8;->get(I)I
+HSPLandroid/icu/util/CodePointTrie$Fast8;->get(I)I+]Landroid/icu/util/CodePointTrie$Fast8;Landroid/icu/util/CodePointTrie$Fast8;
 HSPLandroid/icu/util/CodePointTrie$Fast;-><init>([CLandroid/icu/util/CodePointTrie$Data;III)V
 HSPLandroid/icu/util/CodePointTrie$Fast;->cpIndex(I)I
 HSPLandroid/icu/util/CodePointTrie$Fast;->getType()Landroid/icu/util/CodePointTrie$Type;
@@ -10087,7 +10096,7 @@
 HSPLandroid/icu/util/Currency;->getInstance(Landroid/icu/util/ULocale;)Landroid/icu/util/Currency;
 HSPLandroid/icu/util/Currency;->getInstance(Ljava/lang/String;)Landroid/icu/util/Currency;
 HSPLandroid/icu/util/Currency;->getInstance(Ljava/util/Locale;)Landroid/icu/util/Currency;
-HSPLandroid/icu/util/Currency;->getName(Landroid/icu/util/ULocale;I[Z)Ljava/lang/String;
+HSPLandroid/icu/util/Currency;->getName(Landroid/icu/util/ULocale;I[Z)Ljava/lang/String;+]Landroid/icu/text/CurrencyDisplayNames;Landroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;
 HSPLandroid/icu/util/Currency;->getRoundingIncrement(Landroid/icu/util/Currency$CurrencyUsage;)D
 HSPLandroid/icu/util/Currency;->getSymbol(Landroid/icu/util/ULocale;)Ljava/lang/String;
 HSPLandroid/icu/util/Currency;->getSymbol(Ljava/util/Locale;)Ljava/lang/String;
@@ -10101,9 +10110,9 @@
 HSPLandroid/icu/util/DateTimeRule;->getRuleMillisInDay()I
 HSPLandroid/icu/util/DateTimeRule;->getRuleMonth()I
 HSPLandroid/icu/util/DateTimeRule;->getTimeRuleType()I
-HSPLandroid/icu/util/GregorianCalendar;-><init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/util/GregorianCalendar;-><init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V+]Landroid/icu/util/GregorianCalendar;Landroid/icu/util/GregorianCalendar;
 HSPLandroid/icu/util/GregorianCalendar;->getType()Ljava/lang/String;
-HSPLandroid/icu/util/GregorianCalendar;->handleComputeFields(I)V
+HSPLandroid/icu/util/GregorianCalendar;->handleComputeFields(I)V+]Landroid/icu/util/GregorianCalendar;Landroid/icu/util/GregorianCalendar;
 HSPLandroid/icu/util/GregorianCalendar;->handleGetYearLength(I)I
 HSPLandroid/icu/util/GregorianCalendar;->isEquivalentTo(Landroid/icu/util/Calendar;)Z
 HSPLandroid/icu/util/GregorianCalendar;->isLeapYear(I)Z
@@ -10166,7 +10175,7 @@
 HSPLandroid/icu/util/Output;-><init>(Ljava/lang/Object;)V
 HSPLandroid/icu/util/STZInfo;-><init>()V
 HSPLandroid/icu/util/SimpleTimeZone;-><init>(ILjava/lang/String;IIIIIIIIIII)V
-HSPLandroid/icu/util/SimpleTimeZone;->clone()Ljava/lang/Object;
+HSPLandroid/icu/util/SimpleTimeZone;->clone()Ljava/lang/Object;+]Landroid/icu/util/SimpleTimeZone;Landroid/icu/util/SimpleTimeZone;
 HSPLandroid/icu/util/SimpleTimeZone;->cloneAsThawed()Landroid/icu/util/TimeZone;
 HSPLandroid/icu/util/SimpleTimeZone;->compareToRule(IIIIIIIIIIII)I
 HSPLandroid/icu/util/SimpleTimeZone;->construct(IIIIIIIIIIII)V
@@ -10175,7 +10184,7 @@
 HSPLandroid/icu/util/SimpleTimeZone;->decodeStartRule()V
 HSPLandroid/icu/util/SimpleTimeZone;->getDSTSavings()I
 HSPLandroid/icu/util/SimpleTimeZone;->getNextTransition(JZ)Landroid/icu/util/TimeZoneTransition;
-HSPLandroid/icu/util/SimpleTimeZone;->getOffset(IIIIII)I
+HSPLandroid/icu/util/SimpleTimeZone;->getOffset(IIIIII)I+]Landroid/icu/util/SimpleTimeZone;Landroid/icu/util/SimpleTimeZone;
 HSPLandroid/icu/util/SimpleTimeZone;->getOffset(IIIIIII)I
 HSPLandroid/icu/util/SimpleTimeZone;->getOffset(IIIIIIII)I
 HSPLandroid/icu/util/SimpleTimeZone;->getRawOffset()I
@@ -10185,7 +10194,7 @@
 HSPLandroid/icu/util/SimpleTimeZone;->initTransitionRules()V
 HSPLandroid/icu/util/SimpleTimeZone;->isFrozen()Z
 HSPLandroid/icu/util/SimpleTimeZone;->setStartYear(I)V
-HSPLandroid/icu/util/SimpleTimeZone;->toString()Ljava/lang/String;
+HSPLandroid/icu/util/SimpleTimeZone;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/util/SimpleTimeZone;Landroid/icu/util/SimpleTimeZone;
 HSPLandroid/icu/util/SimpleTimeZone;->useDaylightTime()Z
 HSPLandroid/icu/util/TimeArrayTimeZoneRule;-><init>(Ljava/lang/String;II[JI)V
 HSPLandroid/icu/util/TimeArrayTimeZoneRule;->getStartTimes()[J
@@ -10200,10 +10209,10 @@
 HSPLandroid/icu/util/TimeZone;->getFrozenICUTimeZone(Ljava/lang/String;Z)Landroid/icu/util/BasicTimeZone;
 HSPLandroid/icu/util/TimeZone;->getFrozenTimeZone(Ljava/lang/String;)Landroid/icu/util/TimeZone;
 HSPLandroid/icu/util/TimeZone;->getID()Ljava/lang/String;
-HSPLandroid/icu/util/TimeZone;->getOffset(JZ[I)V
+HSPLandroid/icu/util/TimeZone;->getOffset(JZ[I)V+]Landroid/icu/util/TimeZone;Landroid/icu/util/SimpleTimeZone;
 HSPLandroid/icu/util/TimeZone;->getTimeZone(Ljava/lang/String;)Landroid/icu/util/TimeZone;
-HSPLandroid/icu/util/TimeZone;->getTimeZone(Ljava/lang/String;IZ)Landroid/icu/util/TimeZone;
-HSPLandroid/icu/util/TimeZone;->hashCode()I
+HSPLandroid/icu/util/TimeZone;->getTimeZone(Ljava/lang/String;IZ)Landroid/icu/util/TimeZone;+]Landroid/icu/util/TimeZone;Landroid/icu/impl/OlsonTimeZone;
+HSPLandroid/icu/util/TimeZone;->hashCode()I+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/icu/util/TimeZone;->setICUDefault(Landroid/icu/util/TimeZone;)V
 HSPLandroid/icu/util/TimeZoneRule;-><init>(Ljava/lang/String;II)V
 HSPLandroid/icu/util/TimeZoneRule;->getDSTSavings()I
@@ -10239,38 +10248,38 @@
 HSPLandroid/icu/util/ULocale;-><init>(Ljava/lang/String;Ljava/util/Locale;Landroid/icu/util/ULocale-IA;)V
 HSPLandroid/icu/util/ULocale;->addLikelySubtags(Landroid/icu/util/ULocale;)Landroid/icu/util/ULocale;
 HSPLandroid/icu/util/ULocale;->appendTag(Ljava/lang/String;Ljava/lang/StringBuilder;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HSPLandroid/icu/util/ULocale;->base()Landroid/icu/impl/locale/BaseLocale;
+HSPLandroid/icu/util/ULocale;->base()Landroid/icu/impl/locale/BaseLocale;+]Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;]Landroid/icu/impl/LocaleIDParser;Landroid/icu/impl/LocaleIDParser;
 HSPLandroid/icu/util/ULocale;->canonicalize(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/icu/util/ULocale;->createCanonical(Ljava/lang/String;)Landroid/icu/util/ULocale;
 HSPLandroid/icu/util/ULocale;->createLikelySubtagsString(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/icu/util/ULocale;->createTagString(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/icu/util/ULocale;->createTagString(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->createTagString(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/impl/LocaleIDParser;Landroid/icu/impl/LocaleIDParser;
 HSPLandroid/icu/util/ULocale;->equals(Ljava/lang/Object;)Z
 HSPLandroid/icu/util/ULocale;->forLocale(Ljava/util/Locale;)Landroid/icu/util/ULocale;
 HSPLandroid/icu/util/ULocale;->getBaseName()Ljava/lang/String;
 HSPLandroid/icu/util/ULocale;->getBaseName(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/icu/util/ULocale;->getCountry()Ljava/lang/String;
-HSPLandroid/icu/util/ULocale;->getDefault()Landroid/icu/util/ULocale;
+HSPLandroid/icu/util/ULocale;->getDefault()Landroid/icu/util/ULocale;+]Ljava/util/Locale;Ljava/util/Locale;
 HSPLandroid/icu/util/ULocale;->getDefault(Landroid/icu/util/ULocale$Category;)Landroid/icu/util/ULocale;
 HSPLandroid/icu/util/ULocale;->getInstance(Landroid/icu/impl/locale/BaseLocale;Landroid/icu/impl/locale/LocaleExtensions;)Landroid/icu/util/ULocale;
 HSPLandroid/icu/util/ULocale;->getKeywordValue(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/icu/util/ULocale;->getKeywordValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->getKeywordValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Landroid/icu/impl/LocaleIDParser;Landroid/icu/impl/LocaleIDParser;
 HSPLandroid/icu/util/ULocale;->getKeywords()Ljava/util/Iterator;
-HSPLandroid/icu/util/ULocale;->getKeywords(Ljava/lang/String;)Ljava/util/Iterator;
+HSPLandroid/icu/util/ULocale;->getKeywords(Ljava/lang/String;)Ljava/util/Iterator;+]Landroid/icu/impl/LocaleIDParser;Landroid/icu/impl/LocaleIDParser;
 HSPLandroid/icu/util/ULocale;->getLanguage()Ljava/lang/String;
 HSPLandroid/icu/util/ULocale;->getName()Ljava/lang/String;
-HSPLandroid/icu/util/ULocale;->getName(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->getName(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Landroid/icu/impl/CacheBase;Landroid/icu/util/ULocale$1;
 HSPLandroid/icu/util/ULocale;->getRegionForSupplementalData(Landroid/icu/util/ULocale;Z)Ljava/lang/String;
-HSPLandroid/icu/util/ULocale;->getScript()Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->getScript()Ljava/lang/String;+]Landroid/icu/impl/locale/BaseLocale;Landroid/icu/impl/locale/BaseLocale;
 HSPLandroid/icu/util/ULocale;->getShortestSubtagLength(Ljava/lang/String;)I
 HSPLandroid/icu/util/ULocale;->getVariant()Ljava/lang/String;
 HSPLandroid/icu/util/ULocale;->hashCode()I
 HSPLandroid/icu/util/ULocale;->isEmptyString(Ljava/lang/String;)Z
 HSPLandroid/icu/util/ULocale;->isKnownCanonicalizedLocale(Ljava/lang/String;)Z
 HSPLandroid/icu/util/ULocale;->isRightToLeft()Z
-HSPLandroid/icu/util/ULocale;->lookupLikelySubtags(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->lookupLikelySubtags(Ljava/lang/String;)Ljava/lang/String;+]Landroid/icu/util/UResourceBundle;Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;
 HSPLandroid/icu/util/ULocale;->lscvToID(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/icu/util/ULocale;->parseTagString(Ljava/lang/String;[Ljava/lang/String;)I
+HSPLandroid/icu/util/ULocale;->parseTagString(Ljava/lang/String;[Ljava/lang/String;)I+]Landroid/icu/impl/LocaleIDParser;Landroid/icu/impl/LocaleIDParser;
 HSPLandroid/icu/util/ULocale;->setKeywordValue(Ljava/lang/String;Ljava/lang/String;)Landroid/icu/util/ULocale;
 HSPLandroid/icu/util/ULocale;->setKeywordValue(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/icu/util/ULocale;->stripLeadingUnd(Ljava/lang/String;)Ljava/lang/String;
@@ -10280,15 +10289,15 @@
 HSPLandroid/icu/util/UResourceBundle;->findTopLevel(Ljava/lang/String;)Landroid/icu/util/UResourceBundle;
 HSPLandroid/icu/util/UResourceBundle;->get(I)Landroid/icu/util/UResourceBundle;
 HSPLandroid/icu/util/UResourceBundle;->get(Ljava/lang/String;)Landroid/icu/util/UResourceBundle;
-HSPLandroid/icu/util/UResourceBundle;->getBundleInstance(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/util/UResourceBundle;
+HSPLandroid/icu/util/UResourceBundle;->getBundleInstance(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/util/UResourceBundle;+]Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;
 HSPLandroid/icu/util/UResourceBundle;->getBundleInstance(Ljava/lang/String;Ljava/lang/String;)Landroid/icu/util/UResourceBundle;
 HSPLandroid/icu/util/UResourceBundle;->getBundleInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)Landroid/icu/util/UResourceBundle;
 HSPLandroid/icu/util/UResourceBundle;->getBundleInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Z)Landroid/icu/util/UResourceBundle;
 HSPLandroid/icu/util/UResourceBundle;->getIterator()Landroid/icu/util/UResourceBundleIterator;
-HSPLandroid/icu/util/UResourceBundle;->getRootType(Ljava/lang/String;Ljava/lang/ClassLoader;)Landroid/icu/util/UResourceBundle$RootType;
+HSPLandroid/icu/util/UResourceBundle;->getRootType(Ljava/lang/String;Ljava/lang/ClassLoader;)Landroid/icu/util/UResourceBundle$RootType;+]Ljava/util/Map;Ljava/util/concurrent/ConcurrentHashMap;
 HSPLandroid/icu/util/UResourceBundle;->handleGetObject(Ljava/lang/String;)Ljava/lang/Object;
-HSPLandroid/icu/util/UResourceBundle;->handleGetObjectImpl(Ljava/lang/String;Landroid/icu/util/UResourceBundle;)Ljava/lang/Object;
-HSPLandroid/icu/util/UResourceBundle;->instantiateBundle(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Z)Landroid/icu/util/UResourceBundle;
+HSPLandroid/icu/util/UResourceBundle;->handleGetObjectImpl(Ljava/lang/String;Landroid/icu/util/UResourceBundle;)Ljava/lang/Object;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Object;Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;]Landroid/icu/util/UResourceBundle;Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;]Ljava/lang/Class;Ljava/lang/Class;
+HSPLandroid/icu/util/UResourceBundle;->instantiateBundle(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Z)Landroid/icu/util/UResourceBundle;+]Landroid/icu/util/UResourceBundle$RootType;Landroid/icu/util/UResourceBundle$RootType;
 HSPLandroid/icu/util/UResourceBundle;->resolveObject(Ljava/lang/String;Landroid/icu/util/UResourceBundle;)Ljava/lang/Object;
 HSPLandroid/icu/util/UResourceBundleIterator;-><init>(Landroid/icu/util/UResourceBundle;)V
 HSPLandroid/icu/util/UResourceBundleIterator;->hasNext()Z
@@ -10321,7 +10330,7 @@
 HSPLandroid/location/LastLocationRequest;-><clinit>()V
 HSPLandroid/location/LastLocationRequest;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/location/Location$$ExternalSyntheticLambda0;->get()Ljava/lang/Object;
-HSPLandroid/location/Location$1;->createFromParcel(Landroid/os/Parcel;)Landroid/location/Location;
+HSPLandroid/location/Location$1;->createFromParcel(Landroid/os/Parcel;)Landroid/location/Location;+]Landroid/location/Location;Landroid/location/Location;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/location/Location$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/location/Location;-><init>(Landroid/location/Location;)V
 HSPLandroid/location/Location;-><init>(Ljava/lang/String;)V
@@ -10363,8 +10372,8 @@
 HSPLandroid/location/Location;->setSpeedAccuracyMetersPerSecond(F)V
 HSPLandroid/location/Location;->setTime(J)V
 HSPLandroid/location/Location;->setVerticalAccuracyMeters(F)V
-HSPLandroid/location/Location;->toString()Ljava/lang/String;
-HSPLandroid/location/Location;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/location/Location;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/location/Location;Landroid/location/Location;
+HSPLandroid/location/Location;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/location/Location;Landroid/location/Location;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/location/LocationListener;->onLocationChanged(Ljava/util/List;)V
 HSPLandroid/location/LocationManager$LocationEnabledCache;->recompute(Ljava/lang/Integer;)Ljava/lang/Boolean;
 HSPLandroid/location/LocationManager$LocationEnabledCache;->recompute(Ljava/lang/Object;)Ljava/lang/Object;
@@ -10426,7 +10435,7 @@
 HSPLandroid/location/provider/ProviderProperties$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/location/provider/ProviderProperties;-><init>(ZZZZZZZII)V
 HSPLandroid/media/AudioAttributes$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/AudioAttributes;
-HSPLandroid/media/AudioAttributes$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/media/AudioAttributes$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/media/AudioAttributes$1;Landroid/media/AudioAttributes$1;
 HSPLandroid/media/AudioAttributes$Builder;-><init>()V
 HSPLandroid/media/AudioAttributes$Builder;-><init>(Landroid/media/AudioAttributes;)V
 HSPLandroid/media/AudioAttributes$Builder;->addTag(Ljava/lang/String;)Landroid/media/AudioAttributes$Builder;
@@ -10452,7 +10461,7 @@
 HSPLandroid/media/AudioAttributes;->-$$Nest$fputmUsage(Landroid/media/AudioAttributes;I)V
 HSPLandroid/media/AudioAttributes;-><init>()V
 HSPLandroid/media/AudioAttributes;-><init>(Landroid/media/AudioAttributes-IA;)V
-HSPLandroid/media/AudioAttributes;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/media/AudioAttributes;-><init>(Landroid/os/Parcel;)V+]Ljava/util/HashSet;Ljava/util/HashSet;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/media/AudioAttributes;->areHapticChannelsMuted()Z
 HSPLandroid/media/AudioAttributes;->equals(Ljava/lang/Object;)Z
 HSPLandroid/media/AudioAttributes;->getAllFlags()I
@@ -10462,7 +10471,7 @@
 HSPLandroid/media/AudioAttributes;->hashCode()I
 HSPLandroid/media/AudioAttributes;->isSystemUsage(I)Z
 HSPLandroid/media/AudioAttributes;->toVolumeStreamType(ZLandroid/media/AudioAttributes;)I
-HSPLandroid/media/AudioAttributes;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/media/AudioAttributes;->writeToParcel(Landroid/os/Parcel;I)V+]Ljava/util/HashSet;Ljava/util/HashSet;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/media/AudioDeviceCallback;-><init>()V
 HSPLandroid/media/AudioDeviceInfo;-><init>(Landroid/media/AudioDevicePort;)V
 HSPLandroid/media/AudioDeviceInfo;->convertInternalDeviceToDeviceType(I)I
@@ -10705,12 +10714,12 @@
 HSPLandroid/media/MediaCodec$BufferInfo;-><init>()V
 HSPLandroid/media/MediaCodec$BufferInfo;->set(IIJI)V
 HSPLandroid/media/MediaCodec$BufferMap$CodecBuffer;->free()V
-HSPLandroid/media/MediaCodec$BufferMap$CodecBuffer;->setByteBuffer(Ljava/nio/ByteBuffer;)V
+HSPLandroid/media/MediaCodec$BufferMap$CodecBuffer;->setByteBuffer(Ljava/nio/ByteBuffer;)V+]Landroid/media/MediaCodec$BufferMap$CodecBuffer;Landroid/media/MediaCodec$BufferMap$CodecBuffer;
 HSPLandroid/media/MediaCodec$BufferMap;-><init>()V
 HSPLandroid/media/MediaCodec$BufferMap;-><init>(Landroid/media/MediaCodec$BufferMap-IA;)V
 HSPLandroid/media/MediaCodec$BufferMap;->clear()V
-HSPLandroid/media/MediaCodec$BufferMap;->put(ILjava/nio/ByteBuffer;)V
-HSPLandroid/media/MediaCodec$BufferMap;->remove(I)V
+HSPLandroid/media/MediaCodec$BufferMap;->put(ILjava/nio/ByteBuffer;)V+]Landroid/media/MediaCodec$BufferMap$CodecBuffer;Landroid/media/MediaCodec$BufferMap$CodecBuffer;]Ljava/util/Map;Ljava/util/HashMap;
+HSPLandroid/media/MediaCodec$BufferMap;->remove(I)V+]Ljava/util/Map;Ljava/util/HashMap;]Landroid/media/MediaCodec$BufferMap$CodecBuffer;Landroid/media/MediaCodec$BufferMap$CodecBuffer;
 HSPLandroid/media/MediaCodec$CryptoInfo$Pattern;-><init>(II)V+]Landroid/media/MediaCodec$CryptoInfo$Pattern;Landroid/media/MediaCodec$CryptoInfo$Pattern;
 HSPLandroid/media/MediaCodec$CryptoInfo$Pattern;->set(II)V
 HSPLandroid/media/MediaCodec$CryptoInfo;-><init>()V
@@ -10725,16 +10734,16 @@
 HSPLandroid/media/MediaCodec;->dequeueOutputBuffer(Landroid/media/MediaCodec$BufferInfo;J)I
 HSPLandroid/media/MediaCodec;->finalize()V
 HSPLandroid/media/MediaCodec;->freeAllTrackedBuffers()V
-HSPLandroid/media/MediaCodec;->getInputBuffer(I)Ljava/nio/ByteBuffer;
-HSPLandroid/media/MediaCodec;->getOutputBuffer(I)Ljava/nio/ByteBuffer;
+HSPLandroid/media/MediaCodec;->getInputBuffer(I)Ljava/nio/ByteBuffer;+]Landroid/media/MediaCodec$BufferMap;Landroid/media/MediaCodec$BufferMap;
+HSPLandroid/media/MediaCodec;->getOutputBuffer(I)Ljava/nio/ByteBuffer;+]Landroid/media/MediaCodec$BufferMap;Landroid/media/MediaCodec$BufferMap;
 HSPLandroid/media/MediaCodec;->getOutputFormat()Landroid/media/MediaFormat;
 HSPLandroid/media/MediaCodec;->invalidateByteBuffers([Ljava/nio/ByteBuffer;)V
-HSPLandroid/media/MediaCodec;->lockAndGetContext()J
+HSPLandroid/media/MediaCodec;->lockAndGetContext()J+]Ljava/util/concurrent/locks/Lock;Ljava/util/concurrent/locks/ReentrantLock;
 HSPLandroid/media/MediaCodec;->queueInputBuffer(IIIJI)V
 HSPLandroid/media/MediaCodec;->release()V
 HSPLandroid/media/MediaCodec;->releaseOutputBuffer(IZ)V
-HSPLandroid/media/MediaCodec;->releaseOutputBufferInternal(IZZJ)V
-HSPLandroid/media/MediaCodec;->setAndUnlockContext(J)V
+HSPLandroid/media/MediaCodec;->releaseOutputBufferInternal(IZZJ)V+]Landroid/media/MediaCodec$BufferMap;Landroid/media/MediaCodec$BufferMap;]Ljava/util/Map;Ljava/util/HashMap;
+HSPLandroid/media/MediaCodec;->setAndUnlockContext(J)V+]Ljava/util/concurrent/locks/Lock;Ljava/util/concurrent/locks/ReentrantLock;
 HSPLandroid/media/MediaCodec;->start()V
 HSPLandroid/media/MediaCodec;->stop()V
 HSPLandroid/media/MediaCodecInfo$AudioCapabilities;->applyLevelLimits()V
@@ -10796,7 +10805,7 @@
 HSPLandroid/media/MediaCodecList;->initCodecList()V
 HSPLandroid/media/MediaDescription$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/MediaDescription;
 HSPLandroid/media/MediaDescription$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/media/MediaDescription;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/media/MediaDescription;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/text/TextUtils$1;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/media/MediaDescription;-><init>(Ljava/lang/String;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/graphics/Bitmap;Landroid/net/Uri;Landroid/os/Bundle;Landroid/net/Uri;)V
 HSPLandroid/media/MediaDescription;->toString()Ljava/lang/String;
 HSPLandroid/media/MediaFormat;-><init>()V
@@ -11323,8 +11332,8 @@
 HSPLandroid/net/TelephonyNetworkSpecifier;->hashCode()I
 HSPLandroid/net/TelephonyNetworkSpecifier;->toString()Ljava/lang/String;
 HSPLandroid/net/TelephonyNetworkSpecifier;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/net/Uri$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/Uri;
-HSPLandroid/net/Uri$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/net/Uri$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/Uri;+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/net/Uri$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/net/Uri$1;Landroid/net/Uri$1;
 HSPLandroid/net/Uri$1;->newArray(I)[Landroid/net/Uri;
 HSPLandroid/net/Uri$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/net/Uri$AbstractHierarchicalUri;-><init>()V
@@ -11340,46 +11349,46 @@
 HSPLandroid/net/Uri$AbstractHierarchicalUri;->parseUserInfo()Ljava/lang/String;
 HSPLandroid/net/Uri$AbstractPart;-><init>(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/net/Uri$AbstractPart;->getDecoded()Ljava/lang/String;
-HSPLandroid/net/Uri$AbstractPart;->writeTo(Landroid/os/Parcel;)V
+HSPLandroid/net/Uri$AbstractPart;->writeTo(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/net/Uri$Builder;-><init>()V
-HSPLandroid/net/Uri$Builder;->appendEncodedPath(Ljava/lang/String;)Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$Builder;->appendEncodedPath(Ljava/lang/String;)Landroid/net/Uri$Builder;+]Landroid/net/Uri$Builder;Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->appendPath(Ljava/lang/String;)Landroid/net/Uri$Builder;
-HSPLandroid/net/Uri$Builder;->appendQueryParameter(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$Builder;->appendQueryParameter(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri$Builder;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/net/Uri$Part;Landroid/net/Uri$Part$EmptyPart;,Landroid/net/Uri$Part;
 HSPLandroid/net/Uri$Builder;->authority(Landroid/net/Uri$Part;)Landroid/net/Uri$Builder;
-HSPLandroid/net/Uri$Builder;->authority(Ljava/lang/String;)Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$Builder;->authority(Ljava/lang/String;)Landroid/net/Uri$Builder;+]Landroid/net/Uri$Builder;Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->build()Landroid/net/Uri;
 HSPLandroid/net/Uri$Builder;->clearQuery()Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->encodedAuthority(Ljava/lang/String;)Landroid/net/Uri$Builder;
-HSPLandroid/net/Uri$Builder;->encodedFragment(Ljava/lang/String;)Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$Builder;->encodedFragment(Ljava/lang/String;)Landroid/net/Uri$Builder;+]Landroid/net/Uri$Builder;Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->encodedPath(Ljava/lang/String;)Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->encodedQuery(Ljava/lang/String;)Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->fragment(Landroid/net/Uri$Part;)Landroid/net/Uri$Builder;
-HSPLandroid/net/Uri$Builder;->fragment(Ljava/lang/String;)Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$Builder;->fragment(Ljava/lang/String;)Landroid/net/Uri$Builder;+]Landroid/net/Uri$Builder;Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->hasSchemeOrAuthority()Z
 HSPLandroid/net/Uri$Builder;->path(Landroid/net/Uri$PathPart;)Landroid/net/Uri$Builder;
-HSPLandroid/net/Uri$Builder;->path(Ljava/lang/String;)Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$Builder;->path(Ljava/lang/String;)Landroid/net/Uri$Builder;+]Landroid/net/Uri$Builder;Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->query(Landroid/net/Uri$Part;)Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->scheme(Ljava/lang/String;)Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->toString()Ljava/lang/String;
 HSPLandroid/net/Uri$HierarchicalUri;-><init>(Ljava/lang/String;Landroid/net/Uri$Part;Landroid/net/Uri$PathPart;Landroid/net/Uri$Part;Landroid/net/Uri$Part;)V
-HSPLandroid/net/Uri$HierarchicalUri;->appendSspTo(Ljava/lang/StringBuilder;)V
-HSPLandroid/net/Uri$HierarchicalUri;->buildUpon()Landroid/net/Uri$Builder;
-HSPLandroid/net/Uri$HierarchicalUri;->getAuthority()Ljava/lang/String;
+HSPLandroid/net/Uri$HierarchicalUri;->appendSspTo(Ljava/lang/StringBuilder;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/net/Uri$Part;Landroid/net/Uri$Part;,Landroid/net/Uri$Part$EmptyPart;]Landroid/net/Uri$PathPart;Landroid/net/Uri$PathPart;
+HSPLandroid/net/Uri$HierarchicalUri;->buildUpon()Landroid/net/Uri$Builder;+]Landroid/net/Uri$Builder;Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$HierarchicalUri;->getAuthority()Ljava/lang/String;+]Landroid/net/Uri$Part;Landroid/net/Uri$Part;,Landroid/net/Uri$Part$EmptyPart;
 HSPLandroid/net/Uri$HierarchicalUri;->getEncodedAuthority()Ljava/lang/String;
-HSPLandroid/net/Uri$HierarchicalUri;->getEncodedFragment()Ljava/lang/String;
+HSPLandroid/net/Uri$HierarchicalUri;->getEncodedFragment()Ljava/lang/String;+]Landroid/net/Uri$Part;Landroid/net/Uri$Part$EmptyPart;
 HSPLandroid/net/Uri$HierarchicalUri;->getEncodedPath()Ljava/lang/String;
 HSPLandroid/net/Uri$HierarchicalUri;->getEncodedQuery()Ljava/lang/String;
 HSPLandroid/net/Uri$HierarchicalUri;->getFragment()Ljava/lang/String;
-HSPLandroid/net/Uri$HierarchicalUri;->getPath()Ljava/lang/String;
-HSPLandroid/net/Uri$HierarchicalUri;->getPathSegments()Ljava/util/List;
-HSPLandroid/net/Uri$HierarchicalUri;->getQuery()Ljava/lang/String;
+HSPLandroid/net/Uri$HierarchicalUri;->getPath()Ljava/lang/String;+]Landroid/net/Uri$PathPart;Landroid/net/Uri$PathPart;
+HSPLandroid/net/Uri$HierarchicalUri;->getPathSegments()Ljava/util/List;+]Landroid/net/Uri$PathPart;Landroid/net/Uri$PathPart;
+HSPLandroid/net/Uri$HierarchicalUri;->getQuery()Ljava/lang/String;+]Landroid/net/Uri$Part;Landroid/net/Uri$Part$EmptyPart;
 HSPLandroid/net/Uri$HierarchicalUri;->getScheme()Ljava/lang/String;
 HSPLandroid/net/Uri$HierarchicalUri;->getSchemeSpecificPart()Ljava/lang/String;
 HSPLandroid/net/Uri$HierarchicalUri;->isHierarchical()Z
-HSPLandroid/net/Uri$HierarchicalUri;->makeUriString()Ljava/lang/String;
+HSPLandroid/net/Uri$HierarchicalUri;->makeUriString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/net/Uri$Part;Landroid/net/Uri$Part$EmptyPart;
 HSPLandroid/net/Uri$HierarchicalUri;->readFrom(Landroid/os/Parcel;)Landroid/net/Uri;+]Landroid/net/Uri$Part;Landroid/net/Uri$Part$EmptyPart;,Landroid/net/Uri$Part;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/net/Uri$HierarchicalUri;->toString()Ljava/lang/String;
-HSPLandroid/net/Uri$HierarchicalUri;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/net/Uri$HierarchicalUri;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/net/Uri$Part;Landroid/net/Uri$Part$EmptyPart;,Landroid/net/Uri$Part;]Landroid/net/Uri$PathPart;Landroid/net/Uri$PathPart;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/net/Uri$OpaqueUri;-><init>(Ljava/lang/String;Landroid/net/Uri$Part;Landroid/net/Uri$Part;)V
 HSPLandroid/net/Uri$OpaqueUri;->getEncodedSchemeSpecificPart()Ljava/lang/String;
 HSPLandroid/net/Uri$OpaqueUri;->getScheme()Ljava/lang/String;
@@ -11394,27 +11403,27 @@
 HSPLandroid/net/Uri$Part;->getEncoded()Ljava/lang/String;
 HSPLandroid/net/Uri$Part;->isEmpty()Z
 HSPLandroid/net/Uri$Part;->nonNull(Landroid/net/Uri$Part;)Landroid/net/Uri$Part;
-HSPLandroid/net/Uri$Part;->readFrom(Landroid/os/Parcel;)Landroid/net/Uri$Part;
+HSPLandroid/net/Uri$Part;->readFrom(Landroid/os/Parcel;)Landroid/net/Uri$Part;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/net/Uri$PathPart;-><init>(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/net/Uri$PathPart;->appendDecodedSegment(Landroid/net/Uri$PathPart;Ljava/lang/String;)Landroid/net/Uri$PathPart;
-HSPLandroid/net/Uri$PathPart;->appendEncodedSegment(Landroid/net/Uri$PathPart;Ljava/lang/String;)Landroid/net/Uri$PathPart;
+HSPLandroid/net/Uri$PathPart;->appendEncodedSegment(Landroid/net/Uri$PathPart;Ljava/lang/String;)Landroid/net/Uri$PathPart;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/net/Uri$PathPart;Landroid/net/Uri$PathPart;
 HSPLandroid/net/Uri$PathPart;->from(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri$PathPart;
 HSPLandroid/net/Uri$PathPart;->fromDecoded(Ljava/lang/String;)Landroid/net/Uri$PathPart;
 HSPLandroid/net/Uri$PathPart;->fromEncoded(Ljava/lang/String;)Landroid/net/Uri$PathPart;
 HSPLandroid/net/Uri$PathPart;->getEncoded()Ljava/lang/String;
-HSPLandroid/net/Uri$PathPart;->getPathSegments()Landroid/net/Uri$PathSegments;
+HSPLandroid/net/Uri$PathPart;->getPathSegments()Landroid/net/Uri$PathSegments;+]Ljava/lang/String;Ljava/lang/String;]Landroid/net/Uri$PathSegmentsBuilder;Landroid/net/Uri$PathSegmentsBuilder;]Landroid/net/Uri$PathPart;Landroid/net/Uri$PathPart;
 HSPLandroid/net/Uri$PathPart;->makeAbsolute(Landroid/net/Uri$PathPart;)Landroid/net/Uri$PathPart;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/net/Uri$PathPart;->readFrom(Landroid/os/Parcel;)Landroid/net/Uri$PathPart;
 HSPLandroid/net/Uri$PathPart;->readFrom(ZLandroid/os/Parcel;)Landroid/net/Uri$PathPart;
 HSPLandroid/net/Uri$PathSegments;-><init>([Ljava/lang/String;I)V
-HSPLandroid/net/Uri$PathSegments;->get(I)Ljava/lang/Object;
+HSPLandroid/net/Uri$PathSegments;->get(I)Ljava/lang/Object;+]Landroid/net/Uri$PathSegments;Landroid/net/Uri$PathSegments;
 HSPLandroid/net/Uri$PathSegments;->get(I)Ljava/lang/String;
 HSPLandroid/net/Uri$PathSegments;->size()I
 HSPLandroid/net/Uri$PathSegmentsBuilder;->add(Ljava/lang/String;)V
 HSPLandroid/net/Uri$PathSegmentsBuilder;->build()Landroid/net/Uri$PathSegments;
 HSPLandroid/net/Uri$StringUri;-><init>(Ljava/lang/String;)V
 HSPLandroid/net/Uri$StringUri;-><init>(Ljava/lang/String;Landroid/net/Uri$StringUri-IA;)V
-HSPLandroid/net/Uri$StringUri;->buildUpon()Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$StringUri;->buildUpon()Landroid/net/Uri$Builder;+]Landroid/net/Uri$Builder;Landroid/net/Uri$Builder;]Landroid/net/Uri$StringUri;Landroid/net/Uri$StringUri;
 HSPLandroid/net/Uri$StringUri;->findFragmentSeparator()I
 HSPLandroid/net/Uri$StringUri;->findSchemeSeparator()I
 HSPLandroid/net/Uri$StringUri;->getAuthority()Ljava/lang/String;
@@ -11434,14 +11443,14 @@
 HSPLandroid/net/Uri$StringUri;->getSchemeSpecificPart()Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->isHierarchical()Z
 HSPLandroid/net/Uri$StringUri;->isRelative()Z
-HSPLandroid/net/Uri$StringUri;->parseAuthority(Ljava/lang/String;I)Ljava/lang/String;
+HSPLandroid/net/Uri$StringUri;->parseAuthority(Ljava/lang/String;I)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->parseFragment()Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->parsePath()Ljava/lang/String;
-HSPLandroid/net/Uri$StringUri;->parsePath(Ljava/lang/String;I)Ljava/lang/String;
+HSPLandroid/net/Uri$StringUri;->parsePath(Ljava/lang/String;I)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->parseQuery()Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->parseScheme()Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->toString()Ljava/lang/String;
-HSPLandroid/net/Uri$StringUri;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/net/Uri$StringUri;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/net/Uri;-><init>()V
 HSPLandroid/net/Uri;-><init>(Landroid/net/Uri-IA;)V
 HSPLandroid/net/Uri;->checkContentUriWithoutPermission(Ljava/lang/String;I)V
@@ -11451,23 +11460,23 @@
 HSPLandroid/net/Uri;->decode(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/net/Uri;->encode(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/net/Uri;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HSPLandroid/net/Uri;->equals(Ljava/lang/Object;)Z
+HSPLandroid/net/Uri;->equals(Ljava/lang/Object;)Z+]Landroid/net/Uri;Landroid/net/Uri$OpaqueUri;,Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;
 HSPLandroid/net/Uri;->fromFile(Ljava/io/File;)Landroid/net/Uri;
 HSPLandroid/net/Uri;->fromParts(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;
 HSPLandroid/net/Uri;->getBooleanQueryParameter(Ljava/lang/String;Z)Z
 HSPLandroid/net/Uri;->getQueryParameter(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;
 HSPLandroid/net/Uri;->getQueryParameterNames()Ljava/util/Set;
-HSPLandroid/net/Uri;->hashCode()I
+HSPLandroid/net/Uri;->hashCode()I+]Ljava/lang/String;Ljava/lang/String;]Landroid/net/Uri;Landroid/net/Uri$StringUri;
 HSPLandroid/net/Uri;->isAbsolute()Z
 HSPLandroid/net/Uri;->isAllowed(CLjava/lang/String;)Z
 HSPLandroid/net/Uri;->isOpaque()Z
 HSPLandroid/net/Uri;->normalizeScheme()Landroid/net/Uri;
 HSPLandroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri;
 HSPLandroid/net/Uri;->toSafeString()Ljava/lang/String;
-HSPLandroid/net/Uri;->withAppendedPath(Landroid/net/Uri;Ljava/lang/String;)Landroid/net/Uri;
-HSPLandroid/net/Uri;->writeToParcel(Landroid/os/Parcel;Landroid/net/Uri;)V
-HSPLandroid/net/UriCodec;->appendDecoded(Ljava/lang/StringBuilder;Ljava/lang/String;ZLjava/nio/charset/Charset;Z)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/nio/charset/Charset;Lcom/android/icu/charset/CharsetICU;]Ljava/nio/charset/CharsetDecoder;Lcom/android/icu/charset/CharsetDecoderICU;]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
-HSPLandroid/net/UriCodec;->decode(Ljava/lang/String;ZLjava/nio/charset/Charset;Z)Ljava/lang/String;
+HSPLandroid/net/Uri;->withAppendedPath(Landroid/net/Uri;Ljava/lang/String;)Landroid/net/Uri;+]Landroid/net/Uri$Builder;Landroid/net/Uri$Builder;]Landroid/net/Uri;Landroid/net/Uri$StringUri;,Landroid/net/Uri$HierarchicalUri;
+HSPLandroid/net/Uri;->writeToParcel(Landroid/os/Parcel;Landroid/net/Uri;)V+]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/net/Uri;Landroid/net/Uri$OpaqueUri;,Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;
+HSPLandroid/net/UriCodec;->appendDecoded(Ljava/lang/StringBuilder;Ljava/lang/String;ZLjava/nio/charset/Charset;Z)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/nio/charset/Charset;Lcom/android/icu/charset/CharsetICU;]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;]Ljava/nio/charset/CharsetDecoder;Lcom/android/icu/charset/CharsetDecoderICU;
+HSPLandroid/net/UriCodec;->decode(Ljava/lang/String;ZLjava/nio/charset/Charset;Z)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/net/UriCodec;->flushDecodingByteAccumulator(Ljava/lang/StringBuilder;Ljava/nio/charset/CharsetDecoder;Ljava/nio/ByteBuffer;Z)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;]Ljava/nio/charset/CharsetDecoder;Lcom/android/icu/charset/CharsetDecoderICU;
 HSPLandroid/net/UriCodec;->getNextCharacter(Ljava/lang/String;IILjava/lang/String;)C
 HSPLandroid/net/UriCodec;->hexCharToValue(C)I
@@ -11513,7 +11522,7 @@
 HSPLandroid/opengl/EGLDisplay;-><init>(J)V
 HSPLandroid/opengl/EGLObjectHandle;->getNativeHandle()J
 HSPLandroid/opengl/EGLSurface;-><init>(J)V
-HSPLandroid/opengl/GLES20;->glVertexAttribPointer(IIIZILjava/nio/Buffer;)V
+HSPLandroid/opengl/GLES20;->glVertexAttribPointer(IIIZILjava/nio/Buffer;)V+]Ljava/nio/Buffer;Ljava/nio/ByteBufferAsFloatBuffer;
 HSPLandroid/opengl/Matrix;->setIdentityM([FI)V
 HSPLandroid/os/AsyncTask$1;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;
 HSPLandroid/os/AsyncTask$3;-><init>(Landroid/os/AsyncTask;)V
@@ -11548,70 +11557,70 @@
 HSPLandroid/os/BaseBundle;-><init>()V
 HSPLandroid/os/BaseBundle;-><init>(I)V
 HSPLandroid/os/BaseBundle;-><init>(Landroid/os/BaseBundle;)V
-HSPLandroid/os/BaseBundle;-><init>(Landroid/os/BaseBundle;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/PersistableBundle;,Landroid/os/Bundle;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/BaseBundle;-><init>(Landroid/os/BaseBundle;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/os/BaseBundle;Landroid/os/Bundle;,Landroid/os/PersistableBundle;
 HSPLandroid/os/BaseBundle;-><init>(Landroid/os/Parcel;I)V
-HSPLandroid/os/BaseBundle;-><init>(Ljava/lang/ClassLoader;I)V
+HSPLandroid/os/BaseBundle;-><init>(Ljava/lang/ClassLoader;I)V+]Ljava/lang/Object;Landroid/os/Bundle;,Landroid/os/PersistableBundle;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/os/BaseBundle;->clear()V
-HSPLandroid/os/BaseBundle;->containsKey(Ljava/lang/String;)Z
-HSPLandroid/os/BaseBundle;->deepCopyValue(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/os/BaseBundle;->get(Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroid/os/BaseBundle;->containsKey(Ljava/lang/String;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/PersistableBundle;,Landroid/os/Bundle;
+HSPLandroid/os/BaseBundle;->deepCopyValue(Ljava/lang/Object;)Ljava/lang/Object;+]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/lang/Object;missing_types]Ljava/lang/Class;Ljava/lang/Class;
+HSPLandroid/os/BaseBundle;->get(Ljava/lang/String;)Ljava/lang/Object;+]Landroid/os/BaseBundle;Landroid/os/PersistableBundle;,Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->get(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->getArrayList(Ljava/lang/String;Ljava/lang/Class;)Ljava/util/ArrayList;+]Landroid/os/BaseBundle;Landroid/os/Bundle;
-HSPLandroid/os/BaseBundle;->getBoolean(Ljava/lang/String;)Z
-HSPLandroid/os/BaseBundle;->getBoolean(Ljava/lang/String;Z)Z
+HSPLandroid/os/BaseBundle;->getBoolean(Ljava/lang/String;)Z+]Landroid/os/BaseBundle;Landroid/os/Bundle;
+HSPLandroid/os/BaseBundle;->getBoolean(Ljava/lang/String;Z)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Landroid/os/BaseBundle;Landroid/os/Bundle;,Landroid/os/PersistableBundle;
 HSPLandroid/os/BaseBundle;->getBooleanArray(Ljava/lang/String;)[Z
-HSPLandroid/os/BaseBundle;->getByteArray(Ljava/lang/String;)[B
+HSPLandroid/os/BaseBundle;->getByteArray(Ljava/lang/String;)[B+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->getCharSequence(Ljava/lang/String;)Ljava/lang/CharSequence;
 HSPLandroid/os/BaseBundle;->getCharSequenceArray(Ljava/lang/String;)[Ljava/lang/CharSequence;
 HSPLandroid/os/BaseBundle;->getFloat(Ljava/lang/String;F)F
-HSPLandroid/os/BaseBundle;->getInt(Ljava/lang/String;)I
-HSPLandroid/os/BaseBundle;->getInt(Ljava/lang/String;I)I
+HSPLandroid/os/BaseBundle;->getInt(Ljava/lang/String;)I+]Landroid/os/BaseBundle;Landroid/os/Bundle;
+HSPLandroid/os/BaseBundle;->getInt(Ljava/lang/String;I)I+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->getIntArray(Ljava/lang/String;)[I
 HSPLandroid/os/BaseBundle;->getIntegerArrayList(Ljava/lang/String;)Ljava/util/ArrayList;
 HSPLandroid/os/BaseBundle;->getLong(Ljava/lang/String;)J
-HSPLandroid/os/BaseBundle;->getLong(Ljava/lang/String;J)J
+HSPLandroid/os/BaseBundle;->getLong(Ljava/lang/String;J)J+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Long;Ljava/lang/Long;]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->getLongArray(Ljava/lang/String;)[J
 HSPLandroid/os/BaseBundle;->getSerializable(Ljava/lang/String;)Ljava/io/Serializable;
-HSPLandroid/os/BaseBundle;->getString(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/os/BaseBundle;->getString(Ljava/lang/String;)Ljava/lang/String;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;,Landroid/os/PersistableBundle;
 HSPLandroid/os/BaseBundle;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/os/BaseBundle;->getStringArray(Ljava/lang/String;)[Ljava/lang/String;
+HSPLandroid/os/BaseBundle;->getStringArray(Ljava/lang/String;)[Ljava/lang/String;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->getStringArrayList(Ljava/lang/String;)Ljava/util/ArrayList;
-HSPLandroid/os/BaseBundle;->getValue(Ljava/lang/String;)Ljava/lang/Object;+]Landroid/os/BaseBundle;Landroid/os/PersistableBundle;,Landroid/os/Bundle;
-HSPLandroid/os/BaseBundle;->getValue(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/os/BaseBundle;Landroid/os/PersistableBundle;,Landroid/os/Bundle;
-HSPLandroid/os/BaseBundle;->getValue(Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/PersistableBundle;,Landroid/os/Bundle;
+HSPLandroid/os/BaseBundle;->getValue(Ljava/lang/String;)Ljava/lang/Object;+]Landroid/os/BaseBundle;Landroid/os/Bundle;,Landroid/os/PersistableBundle;
+HSPLandroid/os/BaseBundle;->getValue(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/os/BaseBundle;Landroid/os/Bundle;,Landroid/os/PersistableBundle;
+HSPLandroid/os/BaseBundle;->getValue(Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;,Landroid/os/PersistableBundle;
 HSPLandroid/os/BaseBundle;->getValueAt(ILjava/lang/Class;[Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/function/BiFunction;Landroid/os/Parcel$LazyValue;]Ljava/lang/Class;Ljava/lang/Class;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HSPLandroid/os/BaseBundle;->initializeFromParcelLocked(Landroid/os/Parcel;ZZ)V
-HSPLandroid/os/BaseBundle;->isEmpty()Z
+HSPLandroid/os/BaseBundle;->initializeFromParcelLocked(Landroid/os/Parcel;ZZ)V+]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HSPLandroid/os/BaseBundle;->isEmpty()Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->isEmptyParcel()Z
 HSPLandroid/os/BaseBundle;->isEmptyParcel(Landroid/os/Parcel;)Z
 HSPLandroid/os/BaseBundle;->isParcelled()Z
-HSPLandroid/os/BaseBundle;->keySet()Ljava/util/Set;
+HSPLandroid/os/BaseBundle;->keySet()Ljava/util/Set;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;,Landroid/os/PersistableBundle;
 HSPLandroid/os/BaseBundle;->putAll(Landroid/os/PersistableBundle;)V
-HSPLandroid/os/BaseBundle;->putBoolean(Ljava/lang/String;Z)V
+HSPLandroid/os/BaseBundle;->putBoolean(Ljava/lang/String;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->putBooleanArray(Ljava/lang/String;[Z)V
 HSPLandroid/os/BaseBundle;->putByteArray(Ljava/lang/String;[B)V
-HSPLandroid/os/BaseBundle;->putCharSequence(Ljava/lang/String;Ljava/lang/CharSequence;)V
-HSPLandroid/os/BaseBundle;->putCharSequenceArray(Ljava/lang/String;[Ljava/lang/CharSequence;)V
+HSPLandroid/os/BaseBundle;->putCharSequence(Ljava/lang/String;Ljava/lang/CharSequence;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
+HSPLandroid/os/BaseBundle;->putCharSequenceArray(Ljava/lang/String;[Ljava/lang/CharSequence;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->putDouble(Ljava/lang/String;D)V
 HSPLandroid/os/BaseBundle;->putFloat(Ljava/lang/String;F)V
-HSPLandroid/os/BaseBundle;->putInt(Ljava/lang/String;I)V
+HSPLandroid/os/BaseBundle;->putInt(Ljava/lang/String;I)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->putIntArray(Ljava/lang/String;[I)V
 HSPLandroid/os/BaseBundle;->putLong(Ljava/lang/String;J)V
 HSPLandroid/os/BaseBundle;->putLongArray(Ljava/lang/String;[J)V
 HSPLandroid/os/BaseBundle;->putSerializable(Ljava/lang/String;Ljava/io/Serializable;)V
-HSPLandroid/os/BaseBundle;->putString(Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/os/BaseBundle;->putStringArray(Ljava/lang/String;[Ljava/lang/String;)V
+HSPLandroid/os/BaseBundle;->putString(Ljava/lang/String;Ljava/lang/String;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
+HSPLandroid/os/BaseBundle;->putStringArray(Ljava/lang/String;[Ljava/lang/String;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->putStringArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V
 HSPLandroid/os/BaseBundle;->readFromParcelInner(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/os/BaseBundle;->readFromParcelInner(Landroid/os/Parcel;I)V
-HSPLandroid/os/BaseBundle;->recycleParcel(Landroid/os/Parcel;)V
+HSPLandroid/os/BaseBundle;->readFromParcelInner(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/BaseBundle;->recycleParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/BaseBundle;->remove(Ljava/lang/String;)V
 HSPLandroid/os/BaseBundle;->setClassLoader(Ljava/lang/ClassLoader;)V
 HSPLandroid/os/BaseBundle;->setShouldDefuse(Z)V
-HSPLandroid/os/BaseBundle;->size()I
-HSPLandroid/os/BaseBundle;->unparcel()V+]Landroid/os/BaseBundle;Landroid/os/Bundle;
+HSPLandroid/os/BaseBundle;->size()I+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
+HSPLandroid/os/BaseBundle;->unparcel()V+]Landroid/os/BaseBundle;Landroid/os/Bundle;,Landroid/os/PersistableBundle;
 HSPLandroid/os/BaseBundle;->unparcel(Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
-HSPLandroid/os/BaseBundle;->writeToParcelInner(Landroid/os/Parcel;I)V
+HSPLandroid/os/BaseBundle;->writeToParcelInner(Landroid/os/Parcel;I)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/BatteryManager;-><init>(Landroid/content/Context;Lcom/android/internal/app/IBatteryStats;Landroid/os/IBatteryPropertiesRegistrar;)V
 HSPLandroid/os/BatteryManager;->getIntProperty(I)I
 HSPLandroid/os/BatteryManager;->getLongProperty(I)J
@@ -11647,7 +11656,7 @@
 HSPLandroid/os/Binder$PropagateWorkSourceTransactListener;->onTransactStarted(Landroid/os/IBinder;I)Ljava/lang/Object;
 HSPLandroid/os/Binder$ProxyTransactListener;->onTransactStarted(Landroid/os/IBinder;II)Ljava/lang/Object;+]Landroid/os/Binder$ProxyTransactListener;Landroid/os/Binder$PropagateWorkSourceTransactListener;
 HSPLandroid/os/Binder;-><init>()V
-HSPLandroid/os/Binder;-><init>(Ljava/lang/String;)V
+HSPLandroid/os/Binder;-><init>(Ljava/lang/String;)V+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
 HSPLandroid/os/Binder;->allowBlocking(Landroid/os/IBinder;)Landroid/os/IBinder;
 HSPLandroid/os/Binder;->attachInterface(Landroid/os/IInterface;Ljava/lang/String;)V
 HSPLandroid/os/Binder;->checkParcel(Landroid/os/IBinder;ILandroid/os/Parcel;Ljava/lang/String;)V
@@ -11656,7 +11665,7 @@
 HSPLandroid/os/Binder;->doDump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLandroid/os/Binder;->dump(Ljava/io/FileDescriptor;[Ljava/lang/String;)V
 HSPLandroid/os/Binder;->execTransact(IJJI)Z
-HSPLandroid/os/Binder;->execTransactInternal(IJJII)Z
+HSPLandroid/os/Binder;->execTransactInternal(IJJII)Z+]Landroid/os/Binder;megamorphic_types]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Binder;->getCallingUserHandle()Landroid/os/UserHandle;
 HSPLandroid/os/Binder;->getInterfaceDescriptor()Ljava/lang/String;
 HSPLandroid/os/Binder;->isBinderAlive()Z
@@ -11665,7 +11674,7 @@
 HSPLandroid/os/Binder;->pingBinder()Z
 HSPLandroid/os/Binder;->queryLocalInterface(Ljava/lang/String;)Landroid/os/IInterface;
 HSPLandroid/os/Binder;->setProxyTransactListener(Landroid/os/Binder$ProxyTransactListener;)V
-HSPLandroid/os/Binder;->transact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/os/Binder;->transact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Binder;->unlinkToDeath(Landroid/os/IBinder$DeathRecipient;I)Z
 HSPLandroid/os/Binder;->withCleanCallingIdentity(Lcom/android/internal/util/FunctionalUtils$ThrowingRunnable;)V
 HSPLandroid/os/BinderProxy$ProxyMap;->get(J)Landroid/os/BinderProxy;+]Ljava/lang/Long;Ljava/lang/Long;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -11673,7 +11682,7 @@
 HSPLandroid/os/BinderProxy$ProxyMap;->remove(II)V
 HSPLandroid/os/BinderProxy$ProxyMap;->set(JLandroid/os/BinderProxy;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/os/BinderProxy;-><init>(J)V
-HSPLandroid/os/BinderProxy;->getInstance(JJ)Landroid/os/BinderProxy;
+HSPLandroid/os/BinderProxy;->getInstance(JJ)Landroid/os/BinderProxy;+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;]Landroid/os/BinderProxy$ProxyMap;Landroid/os/BinderProxy$ProxyMap;
 HSPLandroid/os/BinderProxy;->queryLocalInterface(Ljava/lang/String;)Landroid/os/IInterface;
 HSPLandroid/os/BinderProxy;->sendDeathNotice(Landroid/os/IBinder$DeathRecipient;Landroid/os/IBinder;)V
 HSPLandroid/os/BinderProxy;->transact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z+]Landroid/os/BinderProxy;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
@@ -11701,21 +11710,21 @@
 HSPLandroid/os/Bundle;->deepCopy()Landroid/os/Bundle;
 HSPLandroid/os/Bundle;->forPair(Ljava/lang/String;Ljava/lang/String;)Landroid/os/Bundle;
 HSPLandroid/os/Bundle;->getBinder(Ljava/lang/String;)Landroid/os/IBinder;
-HSPLandroid/os/Bundle;->getBundle(Ljava/lang/String;)Landroid/os/Bundle;
+HSPLandroid/os/Bundle;->getBundle(Ljava/lang/String;)Landroid/os/Bundle;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/os/Bundle;->getByteArray(Ljava/lang/String;)[B
 HSPLandroid/os/Bundle;->getCharSequence(Ljava/lang/String;)Ljava/lang/CharSequence;
 HSPLandroid/os/Bundle;->getFloat(Ljava/lang/String;)F
 HSPLandroid/os/Bundle;->getFloat(Ljava/lang/String;F)F
 HSPLandroid/os/Bundle;->getIntegerArrayList(Ljava/lang/String;)Ljava/util/ArrayList;
-HSPLandroid/os/Bundle;->getParcelable(Ljava/lang/String;)Landroid/os/Parcelable;
-HSPLandroid/os/Bundle;->getParcelableArray(Ljava/lang/String;)[Landroid/os/Parcelable;
+HSPLandroid/os/Bundle;->getParcelable(Ljava/lang/String;)Landroid/os/Parcelable;+]Landroid/os/Bundle;Landroid/os/Bundle;
+HSPLandroid/os/Bundle;->getParcelableArray(Ljava/lang/String;)[Landroid/os/Parcelable;+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/os/Bundle;->getParcelableArrayList(Ljava/lang/String;)Ljava/util/ArrayList;
 HSPLandroid/os/Bundle;->getSerializable(Ljava/lang/String;)Ljava/io/Serializable;
 HSPLandroid/os/Bundle;->getSparseParcelableArray(Ljava/lang/String;)Landroid/util/SparseArray;
 HSPLandroid/os/Bundle;->getStringArrayList(Ljava/lang/String;)Ljava/util/ArrayList;
 HSPLandroid/os/Bundle;->hasFileDescriptors()Z
-HSPLandroid/os/Bundle;->maybePrefillHasFds()V
-HSPLandroid/os/Bundle;->putAll(Landroid/os/Bundle;)V
+HSPLandroid/os/Bundle;->maybePrefillHasFds()V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Bundle;->putAll(Landroid/os/Bundle;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/os/Bundle;->putBinder(Ljava/lang/String;Landroid/os/IBinder;)V
 HSPLandroid/os/Bundle;->putBundle(Ljava/lang/String;Landroid/os/Bundle;)V
 HSPLandroid/os/Bundle;->putByteArray(Ljava/lang/String;[B)V
@@ -11723,8 +11732,8 @@
 HSPLandroid/os/Bundle;->putCharSequenceArray(Ljava/lang/String;[Ljava/lang/CharSequence;)V
 HSPLandroid/os/Bundle;->putFloat(Ljava/lang/String;F)V
 HSPLandroid/os/Bundle;->putIntegerArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V
-HSPLandroid/os/Bundle;->putParcelable(Ljava/lang/String;Landroid/os/Parcelable;)V
-HSPLandroid/os/Bundle;->putParcelableArray(Ljava/lang/String;[Landroid/os/Parcelable;)V
+HSPLandroid/os/Bundle;->putParcelable(Ljava/lang/String;Landroid/os/Parcelable;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Bundle;Landroid/os/Bundle;
+HSPLandroid/os/Bundle;->putParcelableArray(Ljava/lang/String;[Landroid/os/Parcelable;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/os/Bundle;->putParcelableArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V
 HSPLandroid/os/Bundle;->putParcelableList(Ljava/lang/String;Ljava/util/List;)V
 HSPLandroid/os/Bundle;->putSerializable(Ljava/lang/String;Ljava/io/Serializable;)V
@@ -11734,10 +11743,10 @@
 HSPLandroid/os/Bundle;->remove(Ljava/lang/String;)V
 HSPLandroid/os/Bundle;->setAllowFds(Z)Z
 HSPLandroid/os/Bundle;->setClassLoader(Ljava/lang/ClassLoader;)V
-HSPLandroid/os/Bundle;->setDefusable(Landroid/os/Bundle;Z)Landroid/os/Bundle;
+HSPLandroid/os/Bundle;->setDefusable(Landroid/os/Bundle;Z)Landroid/os/Bundle;+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/os/Bundle;->setDefusable(Z)V
-HSPLandroid/os/Bundle;->toString()Ljava/lang/String;
-HSPLandroid/os/Bundle;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/os/Bundle;->toString()Ljava/lang/String;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLandroid/os/Bundle;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/CancellationSignal$Transport;-><init>()V
 HSPLandroid/os/CancellationSignal$Transport;->cancel()V
 HSPLandroid/os/CancellationSignal;-><init>()V
@@ -11830,8 +11839,8 @@
 HSPLandroid/os/Environment$UserEnvironment;->buildExternalStorageAppFilesDirs(Ljava/lang/String;)[Ljava/io/File;+]Landroid/os/Environment$UserEnvironment;Landroid/os/Environment$UserEnvironment;
 HSPLandroid/os/Environment$UserEnvironment;->buildExternalStorageAppMediaDirs(Ljava/lang/String;)[Ljava/io/File;
 HSPLandroid/os/Environment$UserEnvironment;->buildExternalStoragePublicDirs(Ljava/lang/String;)[Ljava/io/File;
-HSPLandroid/os/Environment$UserEnvironment;->getExternalDirs()[Ljava/io/File;
-HSPLandroid/os/Environment;->buildExternalStorageAppFilesDirs(Ljava/lang/String;)[Ljava/io/File;
+HSPLandroid/os/Environment$UserEnvironment;->getExternalDirs()[Ljava/io/File;+]Landroid/os/storage/StorageVolume;Landroid/os/storage/StorageVolume;
+HSPLandroid/os/Environment;->buildExternalStorageAppFilesDirs(Ljava/lang/String;)[Ljava/io/File;+]Landroid/os/Environment$UserEnvironment;Landroid/os/Environment$UserEnvironment;
 HSPLandroid/os/Environment;->buildExternalStorageAppMediaDirs(Ljava/lang/String;)[Ljava/io/File;
 HSPLandroid/os/Environment;->buildPath(Ljava/io/File;[Ljava/lang/String;)Ljava/io/File;
 HSPLandroid/os/Environment;->buildPaths([Ljava/io/File;[Ljava/lang/String;)[Ljava/io/File;
@@ -11921,7 +11930,7 @@
 HSPLandroid/os/Handler;-><init>(Landroid/os/Looper;Landroid/os/Handler$Callback;Z)V
 HSPLandroid/os/Handler;-><init>(Z)V
 HSPLandroid/os/Handler;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
-HSPLandroid/os/Handler;->dispatchMessage(Landroid/os/Message;)V+]Landroid/os/Handler;missing_types]Landroid/os/Handler$Callback;missing_types
+HSPLandroid/os/Handler;->dispatchMessage(Landroid/os/Message;)V+]Landroid/os/Handler;megamorphic_types]Landroid/os/Handler$Callback;missing_types
 HSPLandroid/os/Handler;->enqueueMessage(Landroid/os/MessageQueue;Landroid/os/Message;J)Z+]Landroid/os/Message;Landroid/os/Message;]Landroid/os/MessageQueue;Landroid/os/MessageQueue;
 HSPLandroid/os/Handler;->executeOrSendMessage(Landroid/os/Message;)Z
 HSPLandroid/os/Handler;->getIMessenger()Landroid/os/IMessenger;
@@ -11933,7 +11942,7 @@
 HSPLandroid/os/Handler;->handleCallback(Landroid/os/Message;)V+]Ljava/lang/Runnable;missing_types
 HSPLandroid/os/Handler;->handleMessage(Landroid/os/Message;)V
 HSPLandroid/os/Handler;->hasCallbacks(Ljava/lang/Runnable;)Z
-HSPLandroid/os/Handler;->hasMessages(I)Z
+HSPLandroid/os/Handler;->hasMessages(I)Z+]Landroid/os/MessageQueue;Landroid/os/MessageQueue;
 HSPLandroid/os/Handler;->hasMessages(ILjava/lang/Object;)Z
 HSPLandroid/os/Handler;->obtainMessage()Landroid/os/Message;
 HSPLandroid/os/Handler;->obtainMessage(I)Landroid/os/Message;
@@ -11944,17 +11953,17 @@
 HSPLandroid/os/Handler;->postAtFrontOfQueue(Ljava/lang/Runnable;)Z
 HSPLandroid/os/Handler;->postAtTime(Ljava/lang/Runnable;J)Z
 HSPLandroid/os/Handler;->postAtTime(Ljava/lang/Runnable;Ljava/lang/Object;J)Z
-HSPLandroid/os/Handler;->postDelayed(Ljava/lang/Runnable;IJ)Z
-HSPLandroid/os/Handler;->postDelayed(Ljava/lang/Runnable;J)Z+]Landroid/os/Handler;Landroid/os/Handler;,Landroid/app/ActivityThread$H;
+HSPLandroid/os/Handler;->postDelayed(Ljava/lang/Runnable;IJ)Z+]Landroid/os/Handler;Landroid/os/Handler;]Landroid/os/Message;Landroid/os/Message;
+HSPLandroid/os/Handler;->postDelayed(Ljava/lang/Runnable;J)Z+]Landroid/os/Handler;Landroid/os/Handler;,Landroid/view/ViewRootImpl$ViewRootHandler;,Landroid/app/ActivityThread$H;
 HSPLandroid/os/Handler;->postDelayed(Ljava/lang/Runnable;Ljava/lang/Object;J)Z
-HSPLandroid/os/Handler;->removeCallbacks(Ljava/lang/Runnable;)V
-HSPLandroid/os/Handler;->removeCallbacksAndMessages(Ljava/lang/Object;)V
+HSPLandroid/os/Handler;->removeCallbacks(Ljava/lang/Runnable;)V+]Landroid/os/MessageQueue;Landroid/os/MessageQueue;
+HSPLandroid/os/Handler;->removeCallbacksAndMessages(Ljava/lang/Object;)V+]Landroid/os/MessageQueue;Landroid/os/MessageQueue;
 HSPLandroid/os/Handler;->removeMessages(I)V
-HSPLandroid/os/Handler;->removeMessages(ILjava/lang/Object;)V
-HSPLandroid/os/Handler;->sendEmptyMessage(I)Z+]Landroid/os/Handler;Landroid/os/Handler;,Landroid/view/ViewRootImpl$ViewRootHandler;,Landroid/app/QueuedWork$QueuedWorkHandler;
-HSPLandroid/os/Handler;->sendEmptyMessageAtTime(IJ)Z
+HSPLandroid/os/Handler;->removeMessages(ILjava/lang/Object;)V+]Landroid/os/MessageQueue;Landroid/os/MessageQueue;
+HSPLandroid/os/Handler;->sendEmptyMessage(I)Z+]Landroid/os/Handler;Landroid/os/Handler;,Landroid/view/ViewRootImpl$ViewRootHandler;,Landroid/app/QueuedWork$QueuedWorkHandler;,Landroid/graphics/SurfaceTexture$1;
+HSPLandroid/os/Handler;->sendEmptyMessageAtTime(IJ)Z+]Landroid/os/Handler;missing_types
 HSPLandroid/os/Handler;->sendEmptyMessageDelayed(IJ)Z+]Landroid/os/Handler;megamorphic_types
-HSPLandroid/os/Handler;->sendMessage(Landroid/os/Message;)Z
+HSPLandroid/os/Handler;->sendMessage(Landroid/os/Message;)Z+]Landroid/os/Handler;megamorphic_types
 HSPLandroid/os/Handler;->sendMessageAtFrontOfQueue(Landroid/os/Message;)Z
 HSPLandroid/os/Handler;->sendMessageAtTime(Landroid/os/Message;J)Z
 HSPLandroid/os/Handler;->sendMessageDelayed(Landroid/os/Message;J)Z+]Landroid/os/Handler;megamorphic_types
@@ -12010,8 +12019,8 @@
 HSPLandroid/os/IMessenger$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IMessenger;
 HSPLandroid/os/IMessenger$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/os/INetworkManagementService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/os/INetworkManagementService$Stub$Proxy;->setUidCleartextNetworkPolicy(II)V
-HSPLandroid/os/INetworkManagementService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/INetworkManagementService;
+HSPLandroid/os/INetworkManagementService$Stub$Proxy;->setUidCleartextNetworkPolicy(II)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/INetworkManagementService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/INetworkManagementService;+]Landroid/os/IBinder;Landroid/os/BinderProxy;
 HSPLandroid/os/IPowerManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/os/IPowerManager$Stub$Proxy;->acquireWakeLock(Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;Ljava/lang/String;ILandroid/os/IWakeLockCallback;)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/IPowerManager$Stub$Proxy;->getPowerSaveState(I)Landroid/os/PowerSaveState;
@@ -12019,7 +12028,7 @@
 HSPLandroid/os/IPowerManager$Stub$Proxy;->isInteractive()Z
 HSPLandroid/os/IPowerManager$Stub$Proxy;->isLightDeviceIdleMode()Z
 HSPLandroid/os/IPowerManager$Stub$Proxy;->isPowerSaveMode()Z
-HSPLandroid/os/IPowerManager$Stub$Proxy;->releaseWakeLock(Landroid/os/IBinder;I)V
+HSPLandroid/os/IPowerManager$Stub$Proxy;->releaseWakeLock(Landroid/os/IBinder;I)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/IPowerManager$Stub$Proxy;->updateWakeLockWorkSource(Landroid/os/IBinder;Landroid/os/WorkSource;Ljava/lang/String;)V
 HSPLandroid/os/IPowerManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IPowerManager;
 HSPLandroid/os/IPowerManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
@@ -12086,19 +12095,19 @@
 HSPLandroid/os/LocaleList$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/os/LocaleList;-><init>([Ljava/util/Locale;)V
 HSPLandroid/os/LocaleList;->computeFirstMatch(Ljava/util/Collection;Z)Ljava/util/Locale;
-HSPLandroid/os/LocaleList;->computeFirstMatchIndex(Ljava/util/Collection;Z)I
-HSPLandroid/os/LocaleList;->equals(Ljava/lang/Object;)Z
+HSPLandroid/os/LocaleList;->computeFirstMatchIndex(Ljava/util/Collection;Z)I+]Ljava/util/Collection;Ljava/util/Arrays$ArrayList;]Ljava/util/Iterator;Ljava/util/Arrays$ArrayItr;
+HSPLandroid/os/LocaleList;->equals(Ljava/lang/Object;)Z+]Ljava/util/Locale;Ljava/util/Locale;
 HSPLandroid/os/LocaleList;->findFirstMatchIndex(Ljava/util/Locale;)I
 HSPLandroid/os/LocaleList;->forLanguageTags(Ljava/lang/String;)Landroid/os/LocaleList;
 HSPLandroid/os/LocaleList;->get(I)Ljava/util/Locale;
 HSPLandroid/os/LocaleList;->getAdjustedDefault()Landroid/os/LocaleList;
-HSPLandroid/os/LocaleList;->getDefault()Landroid/os/LocaleList;
+HSPLandroid/os/LocaleList;->getDefault()Landroid/os/LocaleList;+]Ljava/util/Locale;Ljava/util/Locale;
 HSPLandroid/os/LocaleList;->getEmptyLocaleList()Landroid/os/LocaleList;
 HSPLandroid/os/LocaleList;->getFirstMatchWithEnglishSupported([Ljava/lang/String;)Ljava/util/Locale;
 HSPLandroid/os/LocaleList;->getLikelyScript(Ljava/util/Locale;)Ljava/lang/String;
-HSPLandroid/os/LocaleList;->hashCode()I
+HSPLandroid/os/LocaleList;->hashCode()I+]Ljava/util/Locale;Ljava/util/Locale;
 HSPLandroid/os/LocaleList;->isEmpty()Z
-HSPLandroid/os/LocaleList;->isPseudoLocale(Ljava/util/Locale;)Z
+HSPLandroid/os/LocaleList;->isPseudoLocale(Ljava/util/Locale;)Z+]Ljava/util/Locale;Ljava/util/Locale;
 HSPLandroid/os/LocaleList;->isPseudoLocalesOnly([Ljava/lang/String;)Z
 HSPLandroid/os/LocaleList;->matchesLanguageAndScript(Ljava/util/Locale;Ljava/util/Locale;)Z+]Ljava/util/Locale;Ljava/util/Locale;
 HSPLandroid/os/LocaleList;->setDefault(Landroid/os/LocaleList;)V
@@ -12112,8 +12121,8 @@
 HSPLandroid/os/Looper;->getQueue()Landroid/os/MessageQueue;
 HSPLandroid/os/Looper;->getThread()Ljava/lang/Thread;
 HSPLandroid/os/Looper;->isCurrentThread()Z
-HSPLandroid/os/Looper;->loop()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Thread;Landroid/os/HandlerThread;,Lcom/android/internal/os/BackgroundThread;
-HSPLandroid/os/Looper;->loopOnce(Landroid/os/Looper;JI)Z+]Landroid/os/Handler;missing_types]Landroid/os/Message;Landroid/os/Message;]Landroid/os/MessageQueue;Landroid/os/MessageQueue;
+HSPLandroid/os/Looper;->loop()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Thread;missing_types
+HSPLandroid/os/Looper;->loopOnce(Landroid/os/Looper;JI)Z+]Landroid/os/Handler;megamorphic_types]Landroid/os/Message;Landroid/os/Message;]Landroid/os/MessageQueue;Landroid/os/MessageQueue;
 HSPLandroid/os/Looper;->myLooper()Landroid/os/Looper;+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
 HSPLandroid/os/Looper;->myQueue()Landroid/os/MessageQueue;
 HSPLandroid/os/Looper;->prepare()V
@@ -12144,10 +12153,10 @@
 HSPLandroid/os/Message;->obtain(Landroid/os/Handler;Ljava/lang/Runnable;)Landroid/os/Message;
 HSPLandroid/os/Message;->obtain(Landroid/os/Message;)Landroid/os/Message;
 HSPLandroid/os/Message;->peekData()Landroid/os/Bundle;
-HSPLandroid/os/Message;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/os/Message;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Message;->recycle()V
 HSPLandroid/os/Message;->recycleUnchecked()V
-HSPLandroid/os/Message;->sendToTarget()V
+HSPLandroid/os/Message;->sendToTarget()V+]Landroid/os/Handler;megamorphic_types
 HSPLandroid/os/Message;->setAsynchronous(Z)V
 HSPLandroid/os/Message;->setCallback(Ljava/lang/Runnable;)Landroid/os/Message;
 HSPLandroid/os/Message;->setData(Landroid/os/Bundle;)V
@@ -12162,11 +12171,11 @@
 HSPLandroid/os/MessageQueue;->addOnFileDescriptorEventListener(Ljava/io/FileDescriptor;ILandroid/os/MessageQueue$OnFileDescriptorEventListener;)V
 HSPLandroid/os/MessageQueue;->dispatchEvents(II)I
 HSPLandroid/os/MessageQueue;->dispose()V
-HSPLandroid/os/MessageQueue;->enqueueMessage(Landroid/os/Message;J)Z+]Landroid/os/Message;Landroid/os/Message;
+HSPLandroid/os/MessageQueue;->enqueueMessage(Landroid/os/Message;J)Z+]Landroid/os/Message;Landroid/os/Message;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/IllegalStateException;Ljava/lang/IllegalStateException;
 HSPLandroid/os/MessageQueue;->finalize()V
 HSPLandroid/os/MessageQueue;->hasMessages(Landroid/os/Handler;ILjava/lang/Object;)Z
 HSPLandroid/os/MessageQueue;->hasMessages(Landroid/os/Handler;Ljava/lang/Runnable;Ljava/lang/Object;)Z
-HSPLandroid/os/MessageQueue;->next()Landroid/os/Message;+]Landroid/os/Message;Landroid/os/Message;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/os/MessageQueue$IdleHandler;missing_types
+HSPLandroid/os/MessageQueue;->next()Landroid/os/Message;+]Landroid/os/MessageQueue$IdleHandler;missing_types]Landroid/os/Message;Landroid/os/Message;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/os/MessageQueue;->postSyncBarrier()I
 HSPLandroid/os/MessageQueue;->postSyncBarrier(J)I+]Landroid/os/Message;Landroid/os/Message;
 HSPLandroid/os/MessageQueue;->quit(Z)V
@@ -12177,7 +12186,7 @@
 HSPLandroid/os/MessageQueue;->removeMessages(Landroid/os/Handler;ILjava/lang/Object;)V+]Landroid/os/Message;Landroid/os/Message;
 HSPLandroid/os/MessageQueue;->removeMessages(Landroid/os/Handler;Ljava/lang/Runnable;Ljava/lang/Object;)V+]Landroid/os/Message;Landroid/os/Message;
 HSPLandroid/os/MessageQueue;->removeOnFileDescriptorEventListener(Ljava/io/FileDescriptor;)V
-HSPLandroid/os/MessageQueue;->removeSyncBarrier(I)V
+HSPLandroid/os/MessageQueue;->removeSyncBarrier(I)V+]Landroid/os/Message;Landroid/os/Message;
 HSPLandroid/os/MessageQueue;->updateOnFileDescriptorEventListenerLocked(Ljava/io/FileDescriptor;ILandroid/os/MessageQueue$OnFileDescriptorEventListener;)V
 HSPLandroid/os/Messenger$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/Messenger;
 HSPLandroid/os/Messenger$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -12190,7 +12199,7 @@
 HSPLandroid/os/Messenger;->writeMessengerOrNullToParcel(Landroid/os/Messenger;Landroid/os/Parcel;)V
 HSPLandroid/os/Messenger;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/os/Parcel$2;-><init>(Landroid/os/Parcel;Ljava/io/InputStream;Ljava/lang/ClassLoader;)V
-HSPLandroid/os/Parcel$2;->resolveClass(Ljava/io/ObjectStreamClass;)Ljava/lang/Class;
+HSPLandroid/os/Parcel$2;->resolveClass(Ljava/io/ObjectStreamClass;)Ljava/lang/Class;+]Ljava/io/ObjectStreamClass;Ljava/io/ObjectStreamClass;
 HSPLandroid/os/Parcel$LazyValue;-><init>(Landroid/os/Parcel;IIILjava/lang/ClassLoader;)V
 HSPLandroid/os/Parcel$LazyValue;->apply(Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel$LazyValue;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Landroid/os/Parcel$LazyValue;Landroid/os/Parcel$LazyValue;
@@ -12212,13 +12221,13 @@
 HSPLandroid/os/Parcel;->createException(ILjava/lang/String;)Ljava/lang/Exception;
 HSPLandroid/os/Parcel;->createExceptionOrNull(ILjava/lang/String;)Ljava/lang/Exception;
 HSPLandroid/os/Parcel;->createFloatArray()[F+]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/os/Parcel;->createIntArray()[I
-HSPLandroid/os/Parcel;->createLongArray()[J
-HSPLandroid/os/Parcel;->createString16Array()[Ljava/lang/String;
+HSPLandroid/os/Parcel;->createIntArray()[I+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->createLongArray()[J+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->createString16Array()[Ljava/lang/String;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->createString8Array()[Ljava/lang/String;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->createStringArray()[Ljava/lang/String;
-HSPLandroid/os/Parcel;->createStringArrayList()Ljava/util/ArrayList;
-HSPLandroid/os/Parcel;->createTypedArray(Landroid/os/Parcelable$Creator;)[Ljava/lang/Object;+]Landroid/os/Parcelable$Creator;missing_types]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->createStringArrayList()Ljava/util/ArrayList;+]Landroid/os/Parcel;Landroid/os/Parcel;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/os/Parcel;->createTypedArray(Landroid/os/Parcelable$Creator;)[Ljava/lang/Object;+]Landroid/os/Parcelable$Creator;megamorphic_types]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->createTypedArrayList(Landroid/os/Parcelable$Creator;)Ljava/util/ArrayList;+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->dataAvail()I
 HSPLandroid/os/Parcel;->dataPosition()I
@@ -12229,7 +12238,7 @@
 HSPLandroid/os/Parcel;->ensureReadSquashableParcelables()V
 HSPLandroid/os/Parcel;->finalize()V
 HSPLandroid/os/Parcel;->freeBuffer()V
-HSPLandroid/os/Parcel;->getClassCookie(Ljava/lang/Class;)Ljava/lang/Object;
+HSPLandroid/os/Parcel;->getClassCookie(Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/os/Parcel;->getExceptionCode(Ljava/lang/Throwable;)I
 HSPLandroid/os/Parcel;->getValueType(Ljava/lang/Object;)I+]Ljava/lang/Object;missing_types]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/os/Parcel;->hasFileDescriptors()Z
@@ -12238,7 +12247,7 @@
 HSPLandroid/os/Parcel;->isLengthPrefixed(I)Z
 HSPLandroid/os/Parcel;->markSensitive()V
 HSPLandroid/os/Parcel;->marshall()[B
-HSPLandroid/os/Parcel;->maybeWriteSquashed(Landroid/os/Parcelable;)Z
+HSPLandroid/os/Parcel;->maybeWriteSquashed(Landroid/os/Parcelable;)Z+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->obtain()Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->obtain(J)Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->pushAllowFds(Z)Z
@@ -12248,7 +12257,7 @@
 HSPLandroid/os/Parcel;->readArrayMap(Landroid/util/ArrayMap;IZZLjava/lang/ClassLoader;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readArrayMap(Landroid/util/ArrayMap;Ljava/lang/ClassLoader;)V
 HSPLandroid/os/Parcel;->readArrayMapInternal(Landroid/util/ArrayMap;ILjava/lang/ClassLoader;)V
-HSPLandroid/os/Parcel;->readArraySet(Ljava/lang/ClassLoader;)Landroid/util/ArraySet;
+HSPLandroid/os/Parcel;->readArraySet(Ljava/lang/ClassLoader;)Landroid/util/ArraySet;+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readBinderList(Ljava/util/List;)V
 HSPLandroid/os/Parcel;->readBlob()[B
 HSPLandroid/os/Parcel;->readBoolean()Z+]Landroid/os/Parcel;Landroid/os/Parcel;
@@ -12258,12 +12267,12 @@
 HSPLandroid/os/Parcel;->readByte()B+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readByteArray([B)V
 HSPLandroid/os/Parcel;->readCallingWorkSourceUid()I
-HSPLandroid/os/Parcel;->readCharSequence()Ljava/lang/CharSequence;
+HSPLandroid/os/Parcel;->readCharSequence()Ljava/lang/CharSequence;+]Landroid/os/Parcelable$Creator;Landroid/text/TextUtils$1;
 HSPLandroid/os/Parcel;->readCharSequenceArray()[Ljava/lang/CharSequence;
 HSPLandroid/os/Parcel;->readDouble()D
-HSPLandroid/os/Parcel;->readException()V
+HSPLandroid/os/Parcel;->readException()V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readException(ILjava/lang/String;)V
-HSPLandroid/os/Parcel;->readExceptionCode()I
+HSPLandroid/os/Parcel;->readExceptionCode()I+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readFloat()F
 HSPLandroid/os/Parcel;->readHashMap(Ljava/lang/ClassLoader;)Ljava/util/HashMap;
 HSPLandroid/os/Parcel;->readHashMapInternal(Ljava/lang/ClassLoader;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/HashMap;+]Landroid/os/Parcel;Landroid/os/Parcel;
@@ -12278,7 +12287,7 @@
 HSPLandroid/os/Parcel;->readLongArray([J)V
 HSPLandroid/os/Parcel;->readMap(Ljava/util/Map;Ljava/lang/ClassLoader;)V
 HSPLandroid/os/Parcel;->readMapInternal(Ljava/util/Map;ILjava/lang/ClassLoader;)V
-HSPLandroid/os/Parcel;->readMapInternal(Ljava/util/Map;ILjava/lang/ClassLoader;Ljava/lang/Class;Ljava/lang/Class;)V+]Ljava/util/Map;Ljava/util/HashMap;
+HSPLandroid/os/Parcel;->readMapInternal(Ljava/util/Map;ILjava/lang/ClassLoader;Ljava/lang/Class;Ljava/lang/Class;)V+]Ljava/util/Map;Ljava/util/LinkedHashMap;,Ljava/util/HashMap;
 HSPLandroid/os/Parcel;->readParcelable(Ljava/lang/ClassLoader;)Landroid/os/Parcelable;
 HSPLandroid/os/Parcel;->readParcelable(Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/lang/Object;
 HSPLandroid/os/Parcel;->readParcelableArray(Ljava/lang/ClassLoader;)[Landroid/os/Parcelable;
@@ -12291,70 +12300,70 @@
 HSPLandroid/os/Parcel;->readParcelableList(Ljava/util/List;Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/util/List;
 HSPLandroid/os/Parcel;->readParcelableListInternal(Ljava/util/List;Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readPersistableBundle()Landroid/os/PersistableBundle;
-HSPLandroid/os/Parcel;->readPersistableBundle(Ljava/lang/ClassLoader;)Landroid/os/PersistableBundle;
+HSPLandroid/os/Parcel;->readPersistableBundle(Ljava/lang/ClassLoader;)Landroid/os/PersistableBundle;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readRawFileDescriptor()Ljava/io/FileDescriptor;
 HSPLandroid/os/Parcel;->readSerializable()Ljava/io/Serializable;
 HSPLandroid/os/Parcel;->readSerializableInternal(Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/lang/Object;+]Ljava/io/ObjectInputStream;Landroid/os/Parcel$2;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readSize()Landroid/util/Size;
 HSPLandroid/os/Parcel;->readSparseArray(Ljava/lang/ClassLoader;)Landroid/util/SparseArray;
-HSPLandroid/os/Parcel;->readSparseArrayInternal(Ljava/lang/ClassLoader;Ljava/lang/Class;)Landroid/util/SparseArray;+]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLandroid/os/Parcel;->readSparseArrayInternal(Ljava/lang/ClassLoader;Ljava/lang/Class;)Landroid/util/SparseArray;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readSparseIntArray()Landroid/util/SparseIntArray;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readSparseIntArrayInternal(Landroid/util/SparseIntArray;I)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/os/Parcel;->readSquashed(Landroid/os/Parcel$SquashReadHelper;)Landroid/os/Parcelable;
+HSPLandroid/os/Parcel;->readSquashed(Landroid/os/Parcel$SquashReadHelper;)Landroid/os/Parcelable;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/Parcel$SquashReadHelper;Landroid/content/pm/ApplicationInfo$1$$ExternalSyntheticLambda0;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readString()Ljava/lang/String;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readString16()Ljava/lang/String;+]Landroid/os/Parcel$ReadWriteHelper;Landroid/os/Parcel$ReadWriteHelper;
 HSPLandroid/os/Parcel;->readString16Array([Ljava/lang/String;)V
 HSPLandroid/os/Parcel;->readString16NoHelper()Ljava/lang/String;
 HSPLandroid/os/Parcel;->readString8()Ljava/lang/String;+]Landroid/os/Parcel$ReadWriteHelper;Landroid/os/Parcel$ReadWriteHelper;
 HSPLandroid/os/Parcel;->readString8NoHelper()Ljava/lang/String;
-HSPLandroid/os/Parcel;->readStringArray()[Ljava/lang/String;
+HSPLandroid/os/Parcel;->readStringArray()[Ljava/lang/String;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readStringArray([Ljava/lang/String;)V
-HSPLandroid/os/Parcel;->readStringList(Ljava/util/List;)V
+HSPLandroid/os/Parcel;->readStringList(Ljava/util/List;)V+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readStrongBinder()Landroid/os/IBinder;
-HSPLandroid/os/Parcel;->readTypedArray([Ljava/lang/Object;Landroid/os/Parcelable$Creator;)V
+HSPLandroid/os/Parcel;->readTypedArray([Ljava/lang/Object;Landroid/os/Parcelable$Creator;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readTypedList(Ljava/util/List;Landroid/os/Parcelable$Creator;)V
 HSPLandroid/os/Parcel;->readTypedObject(Landroid/os/Parcelable$Creator;)Ljava/lang/Object;+]Landroid/os/Parcelable$Creator;megamorphic_types]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readValue(ILjava/lang/ClassLoader;Ljava/lang/Class;)Ljava/lang/Object;
-HSPLandroid/os/Parcel;->readValue(ILjava/lang/ClassLoader;Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/os/Parcel;Landroid/os/Parcel;]Ljava/lang/Class;Ljava/lang/Class;
+HSPLandroid/os/Parcel;->readValue(ILjava/lang/ClassLoader;Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/Object;+]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readValue(Ljava/lang/ClassLoader;)Ljava/lang/Object;
 HSPLandroid/os/Parcel;->readValue(Ljava/lang/ClassLoader;Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->recycle()V
 HSPLandroid/os/Parcel;->resetSqaushingState()V
 HSPLandroid/os/Parcel;->restoreAllowFds(Z)V
-HSPLandroid/os/Parcel;->setClassCookie(Ljava/lang/Class;Ljava/lang/Object;)V
+HSPLandroid/os/Parcel;->setClassCookie(Ljava/lang/Class;Ljava/lang/Object;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/os/Parcel;->setDataPosition(I)V
 HSPLandroid/os/Parcel;->setDataSize(I)V
 HSPLandroid/os/Parcel;->setReadWriteHelper(Landroid/os/Parcel$ReadWriteHelper;)V
 HSPLandroid/os/Parcel;->unmarshall([BII)V
 HSPLandroid/os/Parcel;->writeArrayMap(Landroid/util/ArrayMap;)V
-HSPLandroid/os/Parcel;->writeArrayMapInternal(Landroid/util/ArrayMap;)V
-HSPLandroid/os/Parcel;->writeArraySet(Landroid/util/ArraySet;)V
+HSPLandroid/os/Parcel;->writeArrayMapInternal(Landroid/util/ArrayMap;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->writeArraySet(Landroid/util/ArraySet;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeBinderList(Ljava/util/List;)V
 HSPLandroid/os/Parcel;->writeBlob([B)V
 HSPLandroid/os/Parcel;->writeBoolean(Z)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeBooleanArray([Z)V
-HSPLandroid/os/Parcel;->writeBundle(Landroid/os/Bundle;)V
+HSPLandroid/os/Parcel;->writeBundle(Landroid/os/Bundle;)V+]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeByte(B)V+]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/os/Parcel;->writeByteArray([B)V
+HSPLandroid/os/Parcel;->writeByteArray([B)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeByteArray([BII)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeCharSequence(Ljava/lang/CharSequence;)V
 HSPLandroid/os/Parcel;->writeDouble(D)V
 HSPLandroid/os/Parcel;->writeException(Ljava/lang/Exception;)V
 HSPLandroid/os/Parcel;->writeFileDescriptor(Ljava/io/FileDescriptor;)V
 HSPLandroid/os/Parcel;->writeFloat(F)V
-HSPLandroid/os/Parcel;->writeFloatArray([F)V
+HSPLandroid/os/Parcel;->writeFloatArray([F)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeInt(I)V
-HSPLandroid/os/Parcel;->writeIntArray([I)V
+HSPLandroid/os/Parcel;->writeIntArray([I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeInterfaceToken(Ljava/lang/String;)V
 HSPLandroid/os/Parcel;->writeList(Ljava/util/List;)V
 HSPLandroid/os/Parcel;->writeLong(J)V
-HSPLandroid/os/Parcel;->writeLongArray([J)V
-HSPLandroid/os/Parcel;->writeMap(Ljava/util/Map;)V
-HSPLandroid/os/Parcel;->writeMapInternal(Ljava/util/Map;)V
+HSPLandroid/os/Parcel;->writeLongArray([J)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->writeMap(Ljava/util/Map;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->writeMapInternal(Ljava/util/Map;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeNoException()V
-HSPLandroid/os/Parcel;->writeParcelable(Landroid/os/Parcelable;I)V
-HSPLandroid/os/Parcel;->writeParcelableArray([Landroid/os/Parcelable;I)V
-HSPLandroid/os/Parcel;->writeParcelableCreator(Landroid/os/Parcelable;)V
+HSPLandroid/os/Parcel;->writeParcelable(Landroid/os/Parcelable;I)V+]Landroid/os/Parcelable;megamorphic_types]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->writeParcelableArray([Landroid/os/Parcelable;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->writeParcelableCreator(Landroid/os/Parcelable;)V+]Ljava/lang/Object;megamorphic_types]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeParcelableList(Ljava/util/List;I)V
 HSPLandroid/os/Parcel;->writePersistableBundle(Landroid/os/PersistableBundle;)V
 HSPLandroid/os/Parcel;->writeSerializable(Ljava/io/Serializable;)V
@@ -12363,22 +12372,22 @@
 HSPLandroid/os/Parcel;->writeSparseIntArray(Landroid/util/SparseIntArray;)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeString(Ljava/lang/String;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeString16(Ljava/lang/String;)V+]Landroid/os/Parcel$ReadWriteHelper;Landroid/os/Parcel$ReadWriteHelper;
-HSPLandroid/os/Parcel;->writeString16Array([Ljava/lang/String;)V
+HSPLandroid/os/Parcel;->writeString16Array([Ljava/lang/String;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeString16NoHelper(Ljava/lang/String;)V
 HSPLandroid/os/Parcel;->writeString8(Ljava/lang/String;)V+]Landroid/os/Parcel$ReadWriteHelper;Landroid/os/Parcel$ReadWriteHelper;
-HSPLandroid/os/Parcel;->writeString8Array([Ljava/lang/String;)V
+HSPLandroid/os/Parcel;->writeString8Array([Ljava/lang/String;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeString8NoHelper(Ljava/lang/String;)V
-HSPLandroid/os/Parcel;->writeStringArray([Ljava/lang/String;)V
-HSPLandroid/os/Parcel;->writeStringList(Ljava/util/List;)V
+HSPLandroid/os/Parcel;->writeStringArray([Ljava/lang/String;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->writeStringList(Ljava/util/List;)V+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeStrongBinder(Landroid/os/IBinder;)V
-HSPLandroid/os/Parcel;->writeStrongInterface(Landroid/os/IInterface;)V
-HSPLandroid/os/Parcel;->writeTypedArray([Landroid/os/Parcelable;I)V
+HSPLandroid/os/Parcel;->writeStrongInterface(Landroid/os/IInterface;)V+]Landroid/os/IInterface;megamorphic_types]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->writeTypedArray([Landroid/os/Parcelable;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeTypedArrayMap(Landroid/util/ArrayMap;I)V
 HSPLandroid/os/Parcel;->writeTypedList(Ljava/util/List;)V
-HSPLandroid/os/Parcel;->writeTypedList(Ljava/util/List;I)V
-HSPLandroid/os/Parcel;->writeTypedObject(Landroid/os/Parcelable;I)V
-HSPLandroid/os/Parcel;->writeValue(ILjava/lang/Object;)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Ljava/lang/Long;Ljava/lang/Long;]Ljava/lang/Float;Ljava/lang/Float;]Landroid/os/Parcel;Landroid/os/Parcel;]Ljava/lang/Double;Ljava/lang/Double;]Ljava/lang/Short;Ljava/lang/Short;]Ljava/lang/Character;Ljava/lang/Character;]Ljava/lang/Byte;Ljava/lang/Byte;
-HSPLandroid/os/Parcel;->writeValue(Ljava/lang/Object;)V
+HSPLandroid/os/Parcel;->writeTypedList(Ljava/util/List;I)V+]Ljava/util/List;missing_types]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->writeTypedObject(Landroid/os/Parcelable;I)V+]Landroid/os/Parcelable;megamorphic_types]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->writeValue(ILjava/lang/Object;)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Landroid/os/Parcel;Landroid/os/Parcel;]Ljava/lang/Double;Ljava/lang/Double;]Ljava/lang/Long;Ljava/lang/Long;]Ljava/lang/Byte;Ljava/lang/Byte;]Ljava/lang/Float;Ljava/lang/Float;]Ljava/lang/Short;Ljava/lang/Short;]Ljava/lang/Character;Ljava/lang/Character;
+HSPLandroid/os/Parcel;->writeValue(Ljava/lang/Object;)V+]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/os/Parcel$LazyValue;Landroid/os/Parcel$LazyValue;
 HSPLandroid/os/ParcelFileDescriptor$2;->createFromParcel(Landroid/os/Parcel;)Landroid/os/ParcelFileDescriptor;
 HSPLandroid/os/ParcelFileDescriptor$2;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/os/ParcelFileDescriptor$AutoCloseInputStream;-><init>(Landroid/os/ParcelFileDescriptor;)V
@@ -12468,14 +12477,14 @@
 HSPLandroid/os/PowerManager$3;->onStatusChange(I)V
 HSPLandroid/os/PowerManager$WakeLock$$ExternalSyntheticLambda0;-><init>(Landroid/os/PowerManager$WakeLock;)V
 HSPLandroid/os/PowerManager$WakeLock$$ExternalSyntheticLambda0;->run()V
-HSPLandroid/os/PowerManager$WakeLock;-><init>(Landroid/os/PowerManager;ILjava/lang/String;Ljava/lang/String;I)V
+HSPLandroid/os/PowerManager$WakeLock;-><init>(Landroid/os/PowerManager;ILjava/lang/String;Ljava/lang/String;I)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/os/PowerManager$WakeLock;->acquire()V
 HSPLandroid/os/PowerManager$WakeLock;->acquire(J)V
-HSPLandroid/os/PowerManager$WakeLock;->acquireLocked()V
+HSPLandroid/os/PowerManager$WakeLock;->acquireLocked()V+]Landroid/os/Handler;Landroid/app/ActivityThread$H;]Landroid/os/IPowerManager;Landroid/os/IPowerManager$Stub$Proxy;
 HSPLandroid/os/PowerManager$WakeLock;->finalize()V
 HSPLandroid/os/PowerManager$WakeLock;->isHeld()Z
 HSPLandroid/os/PowerManager$WakeLock;->release()V
-HSPLandroid/os/PowerManager$WakeLock;->release(I)V
+HSPLandroid/os/PowerManager$WakeLock;->release(I)V+]Landroid/os/Handler;Landroid/app/ActivityThread$H;]Landroid/os/IPowerManager;Landroid/os/IPowerManager$Stub$Proxy;
 HSPLandroid/os/PowerManager$WakeLock;->setReferenceCounted(Z)V
 HSPLandroid/os/PowerManager$WakeLock;->setWorkSource(Landroid/os/WorkSource;)V
 HSPLandroid/os/PowerManager;-><init>(Landroid/content/Context;Landroid/os/IPowerManager;Landroid/os/IThermalService;Landroid/os/Handler;)V
@@ -12615,19 +12624,19 @@
 HSPLandroid/os/StrictMode$8;->initialValue()Landroid/os/StrictMode$ThreadSpanState;
 HSPLandroid/os/StrictMode$8;->initialValue()Ljava/lang/Object;
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy$$ExternalSyntheticLambda0;->run()V
-HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy$$ExternalSyntheticLambda1;->run()V
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy$$ExternalSyntheticLambda1;->run()V+]Landroid/os/StrictMode$AndroidBlockGuardPolicy;Landroid/os/StrictMode$AndroidBlockGuardPolicy;
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;-><init>(I)V
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->getThreadPolicyMask()I
-HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->handleViolationWithTimingAttempt(Landroid/os/StrictMode$ViolationInfo;)V
-HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->lambda$handleViolationWithTimingAttempt$0$android-os-StrictMode$AndroidBlockGuardPolicy(Landroid/view/IWindowManager;Ljava/util/ArrayList;)V
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->handleViolationWithTimingAttempt(Landroid/os/StrictMode$ViolationInfo;)V+]Landroid/os/Handler;Landroid/os/Handler;]Ljava/lang/ThreadLocal;Landroid/os/StrictMode$2;,Landroid/os/StrictMode$3;]Landroid/os/StrictMode$ViolationInfo;Landroid/os/StrictMode$ViolationInfo;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/os/StrictMode$AndroidBlockGuardPolicy;Landroid/os/StrictMode$AndroidBlockGuardPolicy;
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->lambda$handleViolationWithTimingAttempt$0$android-os-StrictMode$AndroidBlockGuardPolicy(Landroid/view/IWindowManager;Ljava/util/ArrayList;)V+]Landroid/os/StrictMode$AndroidBlockGuardPolicy;Landroid/os/StrictMode$AndroidBlockGuardPolicy;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onCustomSlowCall(Ljava/lang/String;)V
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onNetwork()V
-HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onReadFromDisk()V
-HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onThreadPolicyViolation(Landroid/os/StrictMode$ViolationInfo;)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;]Ljava/lang/Long;Ljava/lang/Long;]Landroid/os/StrictMode$ViolationInfo;Landroid/os/StrictMode$ViolationInfo;
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onReadFromDisk()V+]Landroid/os/StrictMode$AndroidBlockGuardPolicy;Landroid/os/StrictMode$AndroidBlockGuardPolicy;
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onThreadPolicyViolation(Landroid/os/StrictMode$ViolationInfo;)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/lang/ThreadLocal;Landroid/os/StrictMode$1;,Ljava/lang/ThreadLocal;]Ljava/lang/Long;Ljava/lang/Long;]Landroid/os/StrictMode$ViolationInfo;Landroid/os/StrictMode$ViolationInfo;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Landroid/os/StrictMode$ViolationLogger;Landroid/os/StrictMode$$ExternalSyntheticLambda1;
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onUnbufferedIO()V
-HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onWriteToDisk()V
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onWriteToDisk()V+]Landroid/os/StrictMode$AndroidBlockGuardPolicy;Landroid/os/StrictMode$AndroidBlockGuardPolicy;
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->setThreadPolicyMask(I)V
-HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->startHandlingViolationException(Landroid/os/strictmode/Violation;)V
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->startHandlingViolationException(Landroid/os/strictmode/Violation;)V+]Landroid/os/StrictMode$AndroidBlockGuardPolicy;Landroid/os/StrictMode$AndroidBlockGuardPolicy;
 HSPLandroid/os/StrictMode$AndroidCloseGuardReporter;-><init>()V
 HSPLandroid/os/StrictMode$AndroidCloseGuardReporter;-><init>(Landroid/os/StrictMode$AndroidCloseGuardReporter-IA;)V
 HSPLandroid/os/StrictMode$AndroidCloseGuardReporter;->report(Ljava/lang/String;)V
@@ -12659,12 +12668,12 @@
 HSPLandroid/os/StrictMode$ThreadPolicy;-><init>(ILandroid/os/StrictMode$OnThreadViolationListener;Ljava/util/concurrent/Executor;)V
 HSPLandroid/os/StrictMode$ThreadPolicy;-><init>(ILandroid/os/StrictMode$OnThreadViolationListener;Ljava/util/concurrent/Executor;Landroid/os/StrictMode$ThreadPolicy-IA;)V
 HSPLandroid/os/StrictMode$ThreadSpanState;-><init>()V
-HSPLandroid/os/StrictMode$ViolationInfo;-><init>(Landroid/os/Parcel;Z)V
+HSPLandroid/os/StrictMode$ViolationInfo;-><init>(Landroid/os/Parcel;Z)V+]Ljava/util/Deque;Ljava/util/ArrayDeque;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/StrictMode$ViolationInfo;-><init>(Landroid/os/strictmode/Violation;I)V+]Ljava/lang/ThreadLocal;Landroid/os/StrictMode$8;
-HSPLandroid/os/StrictMode$ViolationInfo;->getStackTrace()Ljava/lang/String;
-HSPLandroid/os/StrictMode$ViolationInfo;->hashCode()I
+HSPLandroid/os/StrictMode$ViolationInfo;->getStackTrace()Ljava/lang/String;+]Ljava/util/Deque;Ljava/util/ArrayDeque;]Ljava/io/PrintWriter;Lcom/android/internal/util/FastPrintWriter;]Ljava/lang/StackTraceElement;Ljava/lang/StackTraceElement;]Ljava/util/Iterator;Ljava/util/ArrayDeque$DeqIterator;]Ljava/io/StringWriter;Ljava/io/StringWriter;]Landroid/os/strictmode/Violation;megamorphic_types
+HSPLandroid/os/StrictMode$ViolationInfo;->hashCode()I+]Landroid/os/strictmode/Violation;Landroid/os/strictmode/NonSdkApiUsedViolation;,Landroid/os/strictmode/IncorrectContextUseViolation;,Landroid/os/strictmode/LeakedClosableViolation;,Landroid/os/strictmode/DiskReadViolation;
 HSPLandroid/os/StrictMode$ViolationInfo;->penaltyEnabled(I)Z
-HSPLandroid/os/StrictMode$ViolationInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/os/StrictMode$ViolationInfo;->writeToParcel(Landroid/os/Parcel;I)V+]Ljava/util/Deque;Ljava/util/ArrayDeque;]Ljava/lang/StackTraceElement;Ljava/lang/StackTraceElement;]Ljava/util/Iterator;Ljava/util/ArrayDeque$DeqIterator;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/StrictMode$VmPolicy$Builder;-><init>()V
 HSPLandroid/os/StrictMode$VmPolicy$Builder;-><init>(Landroid/os/StrictMode$VmPolicy;)V
 HSPLandroid/os/StrictMode$VmPolicy$Builder;->build()Landroid/os/StrictMode$VmPolicy;
@@ -12690,19 +12699,19 @@
 HSPLandroid/os/StrictMode$VmPolicy;-><init>(ILjava/util/HashMap;Landroid/os/StrictMode$OnVmViolationListener;Ljava/util/concurrent/Executor;Landroid/os/StrictMode$VmPolicy-IA;)V
 HSPLandroid/os/StrictMode;->-$$Nest$sfgetEMPTY_CLASS_LIMIT_MAP()Ljava/util/HashMap;
 HSPLandroid/os/StrictMode;->-$$Nest$sfgetsExpectedActivityInstanceCount()Ljava/util/HashMap;
-HSPLandroid/os/StrictMode;->allowThreadDiskReads()Landroid/os/StrictMode$ThreadPolicy;
+HSPLandroid/os/StrictMode;->allowThreadDiskReads()Landroid/os/StrictMode$ThreadPolicy;+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
 HSPLandroid/os/StrictMode;->allowThreadDiskReadsMask()I
-HSPLandroid/os/StrictMode;->allowThreadDiskWrites()Landroid/os/StrictMode$ThreadPolicy;
+HSPLandroid/os/StrictMode;->allowThreadDiskWrites()Landroid/os/StrictMode$ThreadPolicy;+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
 HSPLandroid/os/StrictMode;->allowThreadDiskWritesMask()I
 HSPLandroid/os/StrictMode;->allowVmViolations()Landroid/os/StrictMode$VmPolicy;
-HSPLandroid/os/StrictMode;->assertConfigurationContext(Landroid/content/Context;Ljava/lang/String;)V
+HSPLandroid/os/StrictMode;->assertConfigurationContext(Landroid/content/Context;Ljava/lang/String;)V+]Landroid/content/Context;missing_types
 HSPLandroid/os/StrictMode;->clampViolationTimeMap(Landroid/util/SparseLongArray;J)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;
-HSPLandroid/os/StrictMode;->clearGatheredViolations()V
+HSPLandroid/os/StrictMode;->clearGatheredViolations()V+]Ljava/lang/ThreadLocal;Landroid/os/StrictMode$1;
 HSPLandroid/os/StrictMode;->decrementExpectedActivityCount(Ljava/lang/Class;)V
 HSPLandroid/os/StrictMode;->dropboxViolationAsync(ILandroid/os/StrictMode$ViolationInfo;)V
 HSPLandroid/os/StrictMode;->enterCriticalSpan(Ljava/lang/String;)Landroid/os/StrictMode$Span;
-HSPLandroid/os/StrictMode;->getThreadPolicy()Landroid/os/StrictMode$ThreadPolicy;
-HSPLandroid/os/StrictMode;->getThreadPolicyMask()I
+HSPLandroid/os/StrictMode;->getThreadPolicy()Landroid/os/StrictMode$ThreadPolicy;+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
+HSPLandroid/os/StrictMode;->getThreadPolicyMask()I+]Landroid/os/StrictMode$AndroidBlockGuardPolicy;Landroid/os/StrictMode$AndroidBlockGuardPolicy;
 HSPLandroid/os/StrictMode;->getVmPolicy()Landroid/os/StrictMode$VmPolicy;
 HSPLandroid/os/StrictMode;->handleApplicationStrictModeViolation(ILandroid/os/StrictMode$ViolationInfo;)V
 HSPLandroid/os/StrictMode;->hasGatheredViolations()Z
@@ -12719,14 +12728,14 @@
 HSPLandroid/os/StrictMode;->onCredentialProtectedPathAccess(Ljava/lang/String;I)V
 HSPLandroid/os/StrictMode;->onVmPolicyViolation(Landroid/os/strictmode/Violation;)V
 HSPLandroid/os/StrictMode;->onVmPolicyViolation(Landroid/os/strictmode/Violation;Z)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/os/StrictMode$ViolationInfo;Landroid/os/StrictMode$ViolationInfo;
-HSPLandroid/os/StrictMode;->readAndHandleBinderCallViolations(Landroid/os/Parcel;)V
-HSPLandroid/os/StrictMode;->setBlockGuardPolicy(I)V
+HSPLandroid/os/StrictMode;->readAndHandleBinderCallViolations(Landroid/os/Parcel;)V+]Landroid/os/StrictMode$AndroidBlockGuardPolicy;Landroid/os/StrictMode$AndroidBlockGuardPolicy;]Landroid/os/StrictMode$ViolationInfo;Landroid/os/StrictMode$ViolationInfo;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/StrictMode;->setBlockGuardPolicy(I)V+]Landroid/os/StrictMode$AndroidBlockGuardPolicy;Landroid/os/StrictMode$AndroidBlockGuardPolicy;]Ljava/lang/ThreadLocal;Landroid/os/StrictMode$4;
 HSPLandroid/os/StrictMode;->setBlockGuardVmPolicy(I)V
 HSPLandroid/os/StrictMode;->setCloseGuardEnabled(Z)V
-HSPLandroid/os/StrictMode;->setThreadPolicy(Landroid/os/StrictMode$ThreadPolicy;)V
+HSPLandroid/os/StrictMode;->setThreadPolicy(Landroid/os/StrictMode$ThreadPolicy;)V+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
 HSPLandroid/os/StrictMode;->setThreadPolicyMask(I)V
-HSPLandroid/os/StrictMode;->setVmPolicy(Landroid/os/StrictMode$VmPolicy;)V
-HSPLandroid/os/StrictMode;->tooManyViolationsThisLoop()Z
+HSPLandroid/os/StrictMode;->setVmPolicy(Landroid/os/StrictMode$VmPolicy;)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/os/MessageQueue;Landroid/os/MessageQueue;]Landroid/os/INetworkManagementService;Landroid/os/INetworkManagementService$Stub$Proxy;
+HSPLandroid/os/StrictMode;->tooManyViolationsThisLoop()Z+]Ljava/lang/ThreadLocal;Landroid/os/StrictMode$2;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/os/StrictMode;->trackActivity(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/os/StrictMode;->vmClosableObjectLeaksEnabled()Z
 HSPLandroid/os/StrictMode;->vmContentUriWithoutPermissionEnabled()Z
@@ -12817,9 +12826,9 @@
 HSPLandroid/os/UserHandle;->isSystem()Z
 HSPLandroid/os/UserHandle;->myUserId()I
 HSPLandroid/os/UserHandle;->of(I)Landroid/os/UserHandle;
-HSPLandroid/os/UserHandle;->readFromParcel(Landroid/os/Parcel;)Landroid/os/UserHandle;
+HSPLandroid/os/UserHandle;->readFromParcel(Landroid/os/Parcel;)Landroid/os/UserHandle;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/UserHandle;->toString()Ljava/lang/String;
-HSPLandroid/os/UserHandle;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/os/UserHandle;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/UserHandle;->writeToParcel(Landroid/os/UserHandle;Landroid/os/Parcel;)V
 HSPLandroid/os/UserManager$1;-><init>(Landroid/os/UserManager;ILjava/lang/String;)V
 HSPLandroid/os/UserManager$1;->bypass(Ljava/lang/Integer;)Z+]Ljava/lang/Integer;Ljava/lang/Integer;
@@ -12929,13 +12938,13 @@
 HSPLandroid/os/WorkSource;->removeUidsAndNames(Landroid/os/WorkSource;)Z
 HSPLandroid/os/WorkSource;->set(Landroid/os/WorkSource;)V
 HSPLandroid/os/WorkSource;->size()I
-HSPLandroid/os/WorkSource;->toString()Ljava/lang/String;
+HSPLandroid/os/WorkSource;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/os/WorkSource;->updateLocked(Landroid/os/WorkSource;ZZ)Z
 HSPLandroid/os/WorkSource;->updateUidsAndNamesLocked(Landroid/os/WorkSource;ZZ)Z
 HSPLandroid/os/WorkSource;->updateUidsLocked(Landroid/os/WorkSource;ZZ)Z
 HSPLandroid/os/WorkSource;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/os/connectivity/CellularBatteryStats;-><init>(JJJJJJJJJLjava/lang/Long;[J[J[JJ)V
-HSPLandroid/os/health/HealthStats;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/os/health/HealthStats;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/health/HealthStats;->getMeasurement(I)J
 HSPLandroid/os/health/HealthStats;->getMeasurements(I)Ljava/util/Map;
 HSPLandroid/os/health/HealthStats;->getStats(I)Ljava/util/Map;
@@ -12978,14 +12987,14 @@
 HSPLandroid/os/storage/StorageManager;->allocateBytes(Ljava/io/FileDescriptor;JI)V
 HSPLandroid/os/storage/StorageManager;->allocateBytes(Ljava/util/UUID;JI)V
 HSPLandroid/os/storage/StorageManager;->convert(Ljava/lang/String;)Ljava/util/UUID;
-HSPLandroid/os/storage/StorageManager;->convert(Ljava/util/UUID;)Ljava/lang/String;
+HSPLandroid/os/storage/StorageManager;->convert(Ljava/util/UUID;)Ljava/lang/String;+]Ljava/util/UUID;Ljava/util/UUID;
 HSPLandroid/os/storage/StorageManager;->getAllocatableBytes(Ljava/util/UUID;I)J
 HSPLandroid/os/storage/StorageManager;->getStorageVolume(Ljava/io/File;I)Landroid/os/storage/StorageVolume;
 HSPLandroid/os/storage/StorageManager;->getStorageVolume([Landroid/os/storage/StorageVolume;Ljava/io/File;)Landroid/os/storage/StorageVolume;
 HSPLandroid/os/storage/StorageManager;->getStorageVolumes()Ljava/util/List;
 HSPLandroid/os/storage/StorageManager;->getUuidForPath(Ljava/io/File;)Ljava/util/UUID;
 HSPLandroid/os/storage/StorageManager;->getVolumeList()[Landroid/os/storage/StorageVolume;
-HSPLandroid/os/storage/StorageManager;->getVolumeList(II)[Landroid/os/storage/StorageVolume;
+HSPLandroid/os/storage/StorageManager;->getVolumeList(II)[Landroid/os/storage/StorageVolume;+]Landroid/os/storage/IStorageManager;Landroid/os/storage/IStorageManager$Stub$Proxy;
 HSPLandroid/os/storage/StorageManager;->getVolumes()Ljava/util/List;
 HSPLandroid/os/storage/StorageManager;->isEncrypted()Z
 HSPLandroid/os/storage/StorageManager;->isFileEncryptedNativeOnly()Z
@@ -13017,9 +13026,9 @@
 HSPLandroid/os/strictmode/DiskReadViolation;-><init>()V
 HSPLandroid/os/strictmode/LeakedClosableViolation;-><init>(Ljava/lang/String;)V
 HSPLandroid/os/strictmode/Violation;-><init>(Ljava/lang/String;)V
-HSPLandroid/os/strictmode/Violation;->calcStackTraceHashCode([Ljava/lang/StackTraceElement;)I
+HSPLandroid/os/strictmode/Violation;->calcStackTraceHashCode([Ljava/lang/StackTraceElement;)I+]Ljava/lang/StackTraceElement;Ljava/lang/StackTraceElement;
 HSPLandroid/os/strictmode/Violation;->fillInStackTrace()Ljava/lang/Throwable;
-HSPLandroid/os/strictmode/Violation;->hashCode()I
+HSPLandroid/os/strictmode/Violation;->hashCode()I+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/Object;Landroid/os/strictmode/UnbufferedIoViolation;,Landroid/os/strictmode/DiskReadViolation;,Ljava/lang/Class;]Ljava/lang/Throwable;Ljava/lang/IllegalAccessException;,Ljava/lang/Throwable;]Landroid/os/strictmode/Violation;megamorphic_types
 HSPLandroid/os/strictmode/Violation;->initCause(Ljava/lang/Throwable;)Ljava/lang/Throwable;
 HSPLandroid/os/vibrator/PrebakedSegment;->getDuration()J
 HSPLandroid/os/vibrator/PrebakedSegment;->isValidEffectStrength(I)Z
@@ -13074,7 +13083,7 @@
 HSPLandroid/permission/PermissionManager;->addOnPermissionsChangeListener(Landroid/content/pm/PackageManager$OnPermissionsChangedListener;)V
 HSPLandroid/permission/PermissionManager;->checkPackageNamePermission(Ljava/lang/String;Ljava/lang/String;I)I
 HSPLandroid/permission/PermissionManager;->checkPackageNamePermissionUncached(Ljava/lang/String;Ljava/lang/String;I)I
-HSPLandroid/permission/PermissionManager;->checkPermission(Ljava/lang/String;II)I
+HSPLandroid/permission/PermissionManager;->checkPermission(Ljava/lang/String;II)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/app/PropertyInvalidatedCache;Landroid/permission/PermissionManager$1;
 HSPLandroid/permission/PermissionManager;->checkPermissionUncached(Ljava/lang/String;II)I
 HSPLandroid/permission/PermissionManager;->getPermissionFlags(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)I
 HSPLandroid/permission/PermissionManager;->getPermissionInfo(Ljava/lang/String;I)Landroid/content/pm/PermissionInfo;
@@ -13087,7 +13096,7 @@
 HSPLandroid/preference/PreferenceManager;->getDefaultSharedPreferencesName(Landroid/content/Context;)Ljava/lang/String;
 HSPLandroid/provider/CallLog$Calls;->shouldHaveSharedCallLogEntries(Landroid/content/Context;Landroid/os/UserManager;I)Z
 HSPLandroid/provider/ContactsContract$CommonDataKinds$Email;->getTypeLabelResource(I)I
-HSPLandroid/provider/ContactsContract$CommonDataKinds$Phone;->getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;
+HSPLandroid/provider/ContactsContract$CommonDataKinds$Phone;->getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;+]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLandroid/provider/ContactsContract$CommonDataKinds$Phone;->getTypeLabelResource(I)I
 HSPLandroid/provider/ContactsContract$Contacts;->getLookupUri(JLjava/lang/String;)Landroid/net/Uri;
 HSPLandroid/provider/DeviceConfig$$ExternalSyntheticLambda0;-><init>(Landroid/provider/DeviceConfig$OnPropertiesChangedListener;Landroid/provider/DeviceConfig$Properties;)V
@@ -13111,7 +13120,7 @@
 HSPLandroid/provider/DeviceConfig;->getInt(Ljava/lang/String;Ljava/lang/String;I)I
 HSPLandroid/provider/DeviceConfig;->getLong(Ljava/lang/String;Ljava/lang/String;J)J
 HSPLandroid/provider/DeviceConfig;->getProperties(Ljava/lang/String;[Ljava/lang/String;)Landroid/provider/DeviceConfig$Properties;
-HSPLandroid/provider/DeviceConfig;->getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/provider/DeviceConfig;->getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Landroid/provider/DeviceConfig$Properties;Landroid/provider/DeviceConfig$Properties;
 HSPLandroid/provider/DeviceConfig;->getString(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/provider/DeviceConfig;->handleChange(Landroid/net/Uri;)V
 HSPLandroid/provider/DeviceConfig;->incrementNamespace(Ljava/lang/String;)V
@@ -13149,7 +13158,7 @@
 HSPLandroid/provider/Settings$GenerationTracker;->destroy()V
 HSPLandroid/provider/Settings$GenerationTracker;->getCurrentGeneration()I
 HSPLandroid/provider/Settings$GenerationTracker;->isGenerationChanged()Z
-HSPLandroid/provider/Settings$GenerationTracker;->readCurrentGeneration()I
+HSPLandroid/provider/Settings$GenerationTracker;->readCurrentGeneration()I+]Landroid/util/MemoryIntArray;Landroid/util/MemoryIntArray;
 HSPLandroid/provider/Settings$Global;->getFloat(Landroid/content/ContentResolver;Ljava/lang/String;F)F
 HSPLandroid/provider/Settings$Global;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;)I
 HSPLandroid/provider/Settings$Global;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
@@ -13163,20 +13172,20 @@
 HSPLandroid/provider/Settings$Global;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZIZ)Z
 HSPLandroid/provider/Settings$NameValueCache$$ExternalSyntheticLambda0;-><init>(Landroid/provider/Settings$NameValueCache;)V
 HSPLandroid/provider/Settings$NameValueCache$$ExternalSyntheticLambda1;-><init>(Landroid/provider/Settings$NameValueCache;)V
-HSPLandroid/provider/Settings$NameValueCache;->getStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Ljava/lang/String;
+HSPLandroid/provider/Settings$NameValueCache;->getStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Ljava/lang/String;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/IContentProvider;Landroid/content/ContentProviderProxy;]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/provider/Settings$GenerationTracker;Landroid/provider/Settings$GenerationTracker;]Landroid/provider/Settings$ContentProviderHolder;Landroid/provider/Settings$ContentProviderHolder;]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;]Landroid/net/Uri;Landroid/net/Uri$StringUri;
 HSPLandroid/provider/Settings$NameValueCache;->getStringsForPrefix(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/util/List;)Landroid/util/ArrayMap;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/provider/Settings$GenerationTracker;Landroid/provider/Settings$GenerationTracker;]Landroid/provider/Settings$ContentProviderHolder;Landroid/provider/Settings$ContentProviderHolder;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Set;Ljava/util/HashMap$EntrySet;]Ljava/lang/String;Ljava/lang/String;]Landroid/content/IContentProvider;Landroid/content/ContentProviderProxy;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;,Ljava/util/ArrayList$Itr;]Landroid/net/Uri;Landroid/net/Uri$StringUri;
-HSPLandroid/provider/Settings$NameValueCache;->isCallerExemptFromReadableRestriction()Z
+HSPLandroid/provider/Settings$NameValueCache;->isCallerExemptFromReadableRestriction()Z+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;
 HSPLandroid/provider/Settings$NameValueCache;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZIZ)Z
 HSPLandroid/provider/Settings$NameValueTable;->getUriFor(Landroid/net/Uri;Ljava/lang/String;)Landroid/net/Uri;
 HSPLandroid/provider/Settings$Secure;->getFloatForUser(Landroid/content/ContentResolver;Ljava/lang/String;FI)F
 HSPLandroid/provider/Settings$Secure;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;)I
-HSPLandroid/provider/Settings$Secure;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
+HSPLandroid/provider/Settings$Secure;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I+]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;
 HSPLandroid/provider/Settings$Secure;->getIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)I
 HSPLandroid/provider/Settings$Secure;->getIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)I
 HSPLandroid/provider/Settings$Secure;->getLong(Landroid/content/ContentResolver;Ljava/lang/String;J)J
 HSPLandroid/provider/Settings$Secure;->getLongForUser(Landroid/content/ContentResolver;Ljava/lang/String;JI)J
 HSPLandroid/provider/Settings$Secure;->getString(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/provider/Settings$Secure;->getStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Ljava/lang/String;
+HSPLandroid/provider/Settings$Secure;->getStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Ljava/lang/String;+]Landroid/provider/Settings$NameValueCache;Landroid/provider/Settings$NameValueCache;]Ljava/util/HashSet;Ljava/util/HashSet;
 HSPLandroid/provider/Settings$Secure;->getUriFor(Ljava/lang/String;)Landroid/net/Uri;
 HSPLandroid/provider/Settings$Secure;->putInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z
 HSPLandroid/provider/Settings$Secure;->putIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)Z
@@ -13190,7 +13199,7 @@
 HSPLandroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
 HSPLandroid/provider/Settings$System;->getIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)I
 HSPLandroid/provider/Settings$System;->getIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)I
-HSPLandroid/provider/Settings$System;->getStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Ljava/lang/String;
+HSPLandroid/provider/Settings$System;->getStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Ljava/lang/String;+]Landroid/provider/Settings$NameValueCache;Landroid/provider/Settings$NameValueCache;]Ljava/util/HashSet;Ljava/util/HashSet;
 HSPLandroid/provider/Settings$System;->getUriFor(Ljava/lang/String;)Landroid/net/Uri;
 HSPLandroid/provider/Settings$System;->putInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z
 HSPLandroid/provider/Settings$System;->putIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)Z
@@ -13249,7 +13258,7 @@
 HSPLandroid/security/KeyStoreOperation;->lambda$update$1$android-security-KeyStoreOperation([B)[B+]Landroid/system/keystore2/IKeystoreOperation;Landroid/system/keystore2/IKeystoreOperation$Stub$Proxy;
 HSPLandroid/security/KeyStoreOperation;->update([B)[B
 HSPLandroid/security/KeyStoreSecurityLevel;-><init>(Landroid/system/keystore2/IKeystoreSecurityLevel;)V
-HSPLandroid/security/KeyStoreSecurityLevel;->createOperation(Landroid/system/keystore2/KeyDescriptor;Ljava/util/Collection;)Landroid/security/KeyStoreOperation;
+HSPLandroid/security/KeyStoreSecurityLevel;->createOperation(Landroid/system/keystore2/KeyDescriptor;Ljava/util/Collection;)Landroid/security/KeyStoreOperation;+]Ljava/util/Collection;Ljava/util/ArrayList;]Landroid/system/keystore2/IKeystoreSecurityLevel;Landroid/system/keystore2/IKeystoreSecurityLevel$Stub$Proxy;
 HSPLandroid/security/NetworkSecurityPolicy;->getInstance()Landroid/security/NetworkSecurityPolicy;
 HSPLandroid/security/NetworkSecurityPolicy;->isCleartextTrafficPermitted(Ljava/lang/String;)Z
 HSPLandroid/security/keymaster/ExportResult$1;->createFromParcel(Landroid/os/Parcel;)Landroid/security/keymaster/ExportResult;
@@ -13361,7 +13370,7 @@
 HSPLandroid/security/keystore2/AndroidKeyStoreAuthenticatedAESCipherSpi$GCM;->resetAll()V
 HSPLandroid/security/keystore2/AndroidKeyStoreAuthenticatedAESCipherSpi$GCM;->resetWhilePreservingInitState()V
 HSPLandroid/security/keystore2/AndroidKeyStoreAuthenticatedAESCipherSpi;-><init>(II)V
-HSPLandroid/security/keystore2/AndroidKeyStoreAuthenticatedAESCipherSpi;->addAlgorithmSpecificParametersToBegin(Ljava/util/List;)V
+HSPLandroid/security/keystore2/AndroidKeyStoreAuthenticatedAESCipherSpi;->addAlgorithmSpecificParametersToBegin(Ljava/util/List;)V+]Landroid/security/keystore2/AndroidKeyStoreAuthenticatedAESCipherSpi;Landroid/security/keystore2/AndroidKeyStoreAuthenticatedAESCipherSpi$GCM$NoPadding;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLandroid/security/keystore2/AndroidKeyStoreAuthenticatedAESCipherSpi;->engineGetIV()[B
 HSPLandroid/security/keystore2/AndroidKeyStoreAuthenticatedAESCipherSpi;->initKey(ILjava/security/Key;)V
 HSPLandroid/security/keystore2/AndroidKeyStoreAuthenticatedAESCipherSpi;->loadAlgorithmSpecificParametersFromBeginResult([Landroid/hardware/security/keymint/KeyParameter;)V
@@ -13378,7 +13387,7 @@
 HSPLandroid/security/keystore2/AndroidKeyStoreCipherSpiBase;->engineDoFinal([BII[BI)I
 HSPLandroid/security/keystore2/AndroidKeyStoreCipherSpiBase;->engineInit(ILjava/security/Key;Ljava/security/SecureRandom;)V
 HSPLandroid/security/keystore2/AndroidKeyStoreCipherSpiBase;->engineInit(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
-HSPLandroid/security/keystore2/AndroidKeyStoreCipherSpiBase;->ensureKeystoreOperationInitialized()V
+HSPLandroid/security/keystore2/AndroidKeyStoreCipherSpiBase;->ensureKeystoreOperationInitialized()V+]Landroid/security/keystore2/AndroidKeyStoreCipherSpiBase;Landroid/security/keystore2/AndroidKeyStoreAuthenticatedAESCipherSpi$GCM$NoPadding;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/security/keystore2/AndroidKeyStoreKey;Landroid/security/keystore2/AndroidKeyStoreSecretKey;]Landroid/security/KeyStoreSecurityLevel;Landroid/security/KeyStoreSecurityLevel;]Landroid/security/KeyStoreOperation;Landroid/security/KeyStoreOperation;
 HSPLandroid/security/keystore2/AndroidKeyStoreCipherSpiBase;->finalize()V
 HSPLandroid/security/keystore2/AndroidKeyStoreCipherSpiBase;->flushAAD()V
 HSPLandroid/security/keystore2/AndroidKeyStoreCipherSpiBase;->init(ILjava/security/Key;Ljava/security/SecureRandom;)V
@@ -13393,7 +13402,7 @@
 HSPLandroid/security/keystore2/AndroidKeyStoreKey;->getSecurityLevel()Landroid/security/KeyStoreSecurityLevel;
 HSPLandroid/security/keystore2/AndroidKeyStoreProvider;-><init>()V
 HSPLandroid/security/keystore2/AndroidKeyStoreProvider;->install()V
-HSPLandroid/security/keystore2/AndroidKeyStoreProvider;->loadAndroidKeyStoreKeyFromKeystore(Landroid/security/KeyStore2;Landroid/system/keystore2/KeyDescriptor;)Landroid/security/keystore2/AndroidKeyStoreKey;
+HSPLandroid/security/keystore2/AndroidKeyStoreProvider;->loadAndroidKeyStoreKeyFromKeystore(Landroid/security/KeyStore2;Landroid/system/keystore2/KeyDescriptor;)Landroid/security/keystore2/AndroidKeyStoreKey;+]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/hardware/security/keymint/KeyParameterValue;Landroid/hardware/security/keymint/KeyParameterValue;]Landroid/security/KeyStore2;Landroid/security/KeyStore2;
 HSPLandroid/security/keystore2/AndroidKeyStoreProvider;->loadAndroidKeyStoreKeyFromKeystore(Landroid/security/KeyStore2;Ljava/lang/String;I)Landroid/security/keystore2/AndroidKeyStoreKey;
 HSPLandroid/security/keystore2/AndroidKeyStoreProvider;->makeAndroidKeyStoreSecretKeyFromKeyEntryResponse(Landroid/system/keystore2/KeyDescriptor;Landroid/system/keystore2/KeyEntryResponse;II)Landroid/security/keystore2/AndroidKeyStoreSecretKey;
 HSPLandroid/security/keystore2/AndroidKeyStoreProvider;->putKeyFactoryImpl(Ljava/lang/String;)V
@@ -13417,7 +13426,7 @@
 HSPLandroid/security/keystore2/KeyStoreCryptoOperationChunkedStreamer;-><init>(Landroid/security/keystore2/KeyStoreCryptoOperationChunkedStreamer$Stream;I)V
 HSPLandroid/security/keystore2/KeyStoreCryptoOperationChunkedStreamer;-><init>(Landroid/security/keystore2/KeyStoreCryptoOperationChunkedStreamer$Stream;II)V
 HSPLandroid/security/keystore2/KeyStoreCryptoOperationChunkedStreamer;->doFinal([BII[B)[B
-HSPLandroid/security/keystore2/KeyStoreCryptoOperationChunkedStreamer;->update([BII)[B
+HSPLandroid/security/keystore2/KeyStoreCryptoOperationChunkedStreamer;->update([BII)[B+]Landroid/security/keystore2/KeyStoreCryptoOperationChunkedStreamer$Stream;Landroid/security/keystore2/KeyStoreCryptoOperationChunkedStreamer$MainDataStream;
 HSPLandroid/security/keystore2/KeyStoreCryptoOperationUtils;-><clinit>()V
 HSPLandroid/security/keystore2/KeyStoreCryptoOperationUtils;->abortOperation(Landroid/security/KeyStoreOperation;)V
 HSPLandroid/security/keystore2/KeyStoreCryptoOperationUtils;->getOrMakeOperationChallenge(Landroid/security/KeyStoreOperation;Landroid/security/keystore2/AndroidKeyStoreKey;)J
@@ -13567,18 +13576,18 @@
 HSPLandroid/service/notification/IConditionProvider$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/service/notification/INotificationListener$Stub;-><init>()V
 HSPLandroid/service/notification/INotificationListener$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/service/notification/INotificationListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/service/notification/IStatusBarNotificationHolder$Stub$Proxy;->get()Landroid/service/notification/StatusBarNotification;
+HSPLandroid/service/notification/INotificationListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z+]Landroid/service/notification/INotificationListener$Stub;Landroid/service/notification/NotificationAssistantService$NotificationAssistantServiceWrapper;,Landroid/service/notification/NotificationListenerService$NotificationListenerWrapper;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/service/notification/IStatusBarNotificationHolder$Stub$Proxy;->get()Landroid/service/notification/StatusBarNotification;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/service/notification/NotificationListenerService$MyHandler;-><init>(Landroid/service/notification/NotificationListenerService;Landroid/os/Looper;)V
-HSPLandroid/service/notification/NotificationListenerService$MyHandler;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/service/notification/NotificationListenerService$MyHandler;->handleMessage(Landroid/os/Message;)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/internal/os/SomeArgs;Lcom/android/internal/os/SomeArgs;
 HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;-><init>(Landroid/service/notification/NotificationListenerService;)V
 HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onInterruptionFilterChanged(I)V
 HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onListenerConnected(Landroid/service/notification/NotificationRankingUpdate;)V
 HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onNotificationChannelGroupModification(Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannelGroup;I)V
 HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onNotificationChannelModification(Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannel;I)V
-HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onNotificationPosted(Landroid/service/notification/IStatusBarNotificationHolder;Landroid/service/notification/NotificationRankingUpdate;)V
-HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onNotificationRankingUpdate(Landroid/service/notification/NotificationRankingUpdate;)V
-HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onNotificationRemoved(Landroid/service/notification/IStatusBarNotificationHolder;Landroid/service/notification/NotificationRankingUpdate;Landroid/service/notification/NotificationStats;I)V
+HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onNotificationPosted(Landroid/service/notification/IStatusBarNotificationHolder;Landroid/service/notification/NotificationRankingUpdate;)V+]Landroid/os/Handler;Landroid/service/notification/NotificationListenerService$MyHandler;]Landroid/service/notification/IStatusBarNotificationHolder;Landroid/service/notification/IStatusBarNotificationHolder$Stub$Proxy;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/os/Message;Landroid/os/Message;
+HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onNotificationRankingUpdate(Landroid/service/notification/NotificationRankingUpdate;)V+]Landroid/os/Handler;Landroid/service/notification/NotificationListenerService$MyHandler;]Landroid/os/Message;Landroid/os/Message;
+HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onNotificationRemoved(Landroid/service/notification/IStatusBarNotificationHolder;Landroid/service/notification/NotificationRankingUpdate;Landroid/service/notification/NotificationStats;I)V+]Landroid/os/Handler;Landroid/service/notification/NotificationListenerService$MyHandler;]Landroid/service/notification/IStatusBarNotificationHolder;Landroid/service/notification/IStatusBarNotificationHolder$Stub$Proxy;]Landroid/os/Message;Landroid/os/Message;
 HSPLandroid/service/notification/NotificationListenerService$Ranking;-><init>()V
 HSPLandroid/service/notification/NotificationListenerService$Ranking;-><init>(Landroid/os/Parcel;)V+]Ljava/lang/Object;Landroid/service/notification/NotificationListenerService$Ranking;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/service/notification/NotificationListenerService$Ranking;->getChannel()Landroid/app/NotificationChannel;
@@ -13586,12 +13595,12 @@
 HSPLandroid/service/notification/NotificationListenerService$Ranking;->populate(Landroid/service/notification/NotificationListenerService$Ranking;)V
 HSPLandroid/service/notification/NotificationListenerService$Ranking;->populate(Ljava/lang/String;IZIIILjava/lang/CharSequence;Ljava/lang/String;Landroid/app/NotificationChannel;Ljava/util/ArrayList;Ljava/util/ArrayList;ZIZJZLjava/util/ArrayList;Ljava/util/ArrayList;ZZZLandroid/content/pm/ShortcutInfo;IZ)V
 HSPLandroid/service/notification/NotificationListenerService$RankingMap$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/notification/NotificationListenerService$RankingMap;
-HSPLandroid/service/notification/NotificationListenerService$RankingMap$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/service/notification/NotificationListenerService$RankingMap;-><init>(Landroid/os/Parcel;)V+]Landroid/service/notification/NotificationListenerService$Ranking;Landroid/service/notification/NotificationListenerService$Ranking;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Object;Landroid/service/notification/NotificationListenerService$RankingMap;]Ljava/lang/Class;Ljava/lang/Class;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/service/notification/NotificationListenerService$RankingMap$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/service/notification/NotificationListenerService$RankingMap$1;Landroid/service/notification/NotificationListenerService$RankingMap$1;
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;-><init>(Landroid/os/Parcel;)V+]Landroid/service/notification/NotificationListenerService$Ranking;Landroid/service/notification/NotificationListenerService$Ranking;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Object;Landroid/service/notification/NotificationListenerService$RankingMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/service/notification/NotificationListenerService$RankingMap;->getOrderedKeys()[Ljava/lang/String;
 HSPLandroid/service/notification/NotificationListenerService$RankingMap;->getRanking(Ljava/lang/String;Landroid/service/notification/NotificationListenerService$Ranking;)Z
 HSPLandroid/service/notification/NotificationListenerService;-><init>()V
-HSPLandroid/service/notification/NotificationListenerService;->applyUpdateLocked(Landroid/service/notification/NotificationRankingUpdate;)V
+HSPLandroid/service/notification/NotificationListenerService;->applyUpdateLocked(Landroid/service/notification/NotificationRankingUpdate;)V+]Landroid/service/notification/NotificationRankingUpdate;Landroid/service/notification/NotificationRankingUpdate;
 HSPLandroid/service/notification/NotificationListenerService;->attachBaseContext(Landroid/content/Context;)V
 HSPLandroid/service/notification/NotificationListenerService;->cleanUpNotificationList(Landroid/content/pm/ParceledListSlice;)[Landroid/service/notification/StatusBarNotification;
 HSPLandroid/service/notification/NotificationListenerService;->createLegacyIconExtras(Landroid/app/Notification;)V
@@ -13611,11 +13620,11 @@
 HSPLandroid/service/notification/NotificationListenerService;->onNotificationRankingUpdate(Landroid/service/notification/NotificationListenerService$RankingMap;)V
 HSPLandroid/service/notification/NotificationListenerService;->onNotificationRemoved(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;Landroid/service/notification/NotificationStats;I)V
 HSPLandroid/service/notification/NotificationRankingUpdate$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/notification/NotificationRankingUpdate;
-HSPLandroid/service/notification/NotificationRankingUpdate$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/service/notification/NotificationRankingUpdate;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/service/notification/NotificationRankingUpdate$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/service/notification/NotificationRankingUpdate$1;Landroid/service/notification/NotificationRankingUpdate$1;
+HSPLandroid/service/notification/NotificationRankingUpdate;-><init>(Landroid/os/Parcel;)V+]Ljava/lang/Object;Landroid/service/notification/NotificationRankingUpdate;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/service/notification/NotificationRankingUpdate;->getRankingMap()Landroid/service/notification/NotificationListenerService$RankingMap;
 HSPLandroid/service/notification/StatusBarNotification$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/notification/StatusBarNotification;
-HSPLandroid/service/notification/StatusBarNotification$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/service/notification/StatusBarNotification$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/service/notification/StatusBarNotification$1;Landroid/service/notification/StatusBarNotification$1;
 HSPLandroid/service/notification/StatusBarNotification;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Lcom/android/internal/logging/InstanceId$1;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/service/notification/StatusBarNotification;->getGroupKey()Ljava/lang/String;
 HSPLandroid/service/notification/StatusBarNotification;->getId()I
@@ -13635,7 +13644,7 @@
 HSPLandroid/service/notification/StatusBarNotification;->isAppGroup()Z
 HSPLandroid/service/notification/StatusBarNotification;->isGroup()Z
 HSPLandroid/service/notification/StatusBarNotification;->isOngoing()Z
-HSPLandroid/service/notification/StatusBarNotification;->key()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/Notification;Landroid/app/Notification;
+HSPLandroid/service/notification/StatusBarNotification;->key()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/Notification;Landroid/app/Notification;]Landroid/os/UserHandle;Landroid/os/UserHandle;
 HSPLandroid/service/notification/ZenModeConfig$ZenRule$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/notification/ZenModeConfig$ZenRule;
 HSPLandroid/service/notification/ZenModeConfig$ZenRule$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/service/notification/ZenModeConfig$ZenRule;-><init>(Landroid/os/Parcel;)V
@@ -13728,7 +13737,7 @@
 HSPLandroid/sysprop/TelephonyProperties;->operator_numeric()Ljava/util/List;
 HSPLandroid/sysprop/TelephonyProperties;->tryParseBoolean(Ljava/lang/String;)Ljava/lang/Boolean;
 HSPLandroid/sysprop/TelephonyProperties;->tryParseInteger(Ljava/lang/String;)Ljava/lang/Integer;
-HSPLandroid/sysprop/TelephonyProperties;->tryParseList(Ljava/util/function/Function;Ljava/lang/String;)Ljava/util/List;
+HSPLandroid/sysprop/TelephonyProperties;->tryParseList(Ljava/util/function/Function;Ljava/lang/String;)Ljava/util/List;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/function/Function;Landroid/sysprop/TelephonyProperties$$ExternalSyntheticLambda8;,Landroid/sysprop/TelephonyProperties$$ExternalSyntheticLambda5;,Landroid/sysprop/TelephonyProperties$$ExternalSyntheticLambda0;,Landroid/sysprop/TelephonyProperties$$ExternalSyntheticLambda9;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLandroid/sysprop/TelephonyProperties;->tryParseString(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/sysprop/VndkProperties;->product_vndk_version()Ljava/util/Optional;
 HSPLandroid/sysprop/VndkProperties;->tryParseString(Ljava/lang/String;)Ljava/lang/String;
@@ -13741,28 +13750,28 @@
 HSPLandroid/system/keystore2/Authorization$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/system/keystore2/Authorization;-><clinit>()V
 HSPLandroid/system/keystore2/Authorization;-><init>()V
-HSPLandroid/system/keystore2/Authorization;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/system/keystore2/Authorization;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/system/keystore2/CreateOperationResponse$1;-><init>()V
 HSPLandroid/system/keystore2/CreateOperationResponse$1;->createFromParcel(Landroid/os/Parcel;)Landroid/system/keystore2/CreateOperationResponse;
 HSPLandroid/system/keystore2/CreateOperationResponse$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/system/keystore2/CreateOperationResponse;-><clinit>()V
 HSPLandroid/system/keystore2/CreateOperationResponse;-><init>()V
-HSPLandroid/system/keystore2/CreateOperationResponse;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/system/keystore2/CreateOperationResponse;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/system/keystore2/IKeystoreOperation$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/system/keystore2/IKeystoreOperation$Stub$Proxy;->abort()V
 HSPLandroid/system/keystore2/IKeystoreOperation$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/system/keystore2/IKeystoreOperation$Stub$Proxy;->finish([B[B)[B
-HSPLandroid/system/keystore2/IKeystoreOperation$Stub$Proxy;->update([B)[B
+HSPLandroid/system/keystore2/IKeystoreOperation$Stub$Proxy;->finish([B[B)[B+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/system/keystore2/IKeystoreOperation$Stub$Proxy;->update([B)[B+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/system/keystore2/IKeystoreOperation$Stub;->asInterface(Landroid/os/IBinder;)Landroid/system/keystore2/IKeystoreOperation;
 HSPLandroid/system/keystore2/IKeystoreOperation;-><clinit>()V
 HSPLandroid/system/keystore2/IKeystoreSecurityLevel$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/system/keystore2/IKeystoreSecurityLevel$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/system/keystore2/IKeystoreSecurityLevel$Stub$Proxy;->createOperation(Landroid/system/keystore2/KeyDescriptor;[Landroid/hardware/security/keymint/KeyParameter;Z)Landroid/system/keystore2/CreateOperationResponse;
+HSPLandroid/system/keystore2/IKeystoreSecurityLevel$Stub$Proxy;->createOperation(Landroid/system/keystore2/KeyDescriptor;[Landroid/hardware/security/keymint/KeyParameter;Z)Landroid/system/keystore2/CreateOperationResponse;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/system/keystore2/IKeystoreSecurityLevel$Stub;->asInterface(Landroid/os/IBinder;)Landroid/system/keystore2/IKeystoreSecurityLevel;
 HSPLandroid/system/keystore2/IKeystoreSecurityLevel;-><clinit>()V
 HSPLandroid/system/keystore2/IKeystoreService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/system/keystore2/IKeystoreService$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/system/keystore2/IKeystoreService$Stub$Proxy;->getKeyEntry(Landroid/system/keystore2/KeyDescriptor;)Landroid/system/keystore2/KeyEntryResponse;
+HSPLandroid/system/keystore2/IKeystoreService$Stub$Proxy;->getKeyEntry(Landroid/system/keystore2/KeyDescriptor;)Landroid/system/keystore2/KeyEntryResponse;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/system/keystore2/IKeystoreService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/system/keystore2/IKeystoreService;
 HSPLandroid/system/keystore2/IKeystoreService;-><clinit>()V
 HSPLandroid/system/keystore2/KeyDescriptor$1;-><init>()V
@@ -13770,20 +13779,20 @@
 HSPLandroid/system/keystore2/KeyDescriptor$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/system/keystore2/KeyDescriptor;-><clinit>()V
 HSPLandroid/system/keystore2/KeyDescriptor;-><init>()V
-HSPLandroid/system/keystore2/KeyDescriptor;->readFromParcel(Landroid/os/Parcel;)V
-HSPLandroid/system/keystore2/KeyDescriptor;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/system/keystore2/KeyDescriptor;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/system/keystore2/KeyDescriptor;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/system/keystore2/KeyEntryResponse$1;-><init>()V
 HSPLandroid/system/keystore2/KeyEntryResponse$1;->createFromParcel(Landroid/os/Parcel;)Landroid/system/keystore2/KeyEntryResponse;
 HSPLandroid/system/keystore2/KeyEntryResponse$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/system/keystore2/KeyEntryResponse;-><clinit>()V
 HSPLandroid/system/keystore2/KeyEntryResponse;-><init>()V
-HSPLandroid/system/keystore2/KeyEntryResponse;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/system/keystore2/KeyEntryResponse;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/system/keystore2/KeyMetadata$1;-><init>()V
 HSPLandroid/system/keystore2/KeyMetadata$1;->createFromParcel(Landroid/os/Parcel;)Landroid/system/keystore2/KeyMetadata;
 HSPLandroid/system/keystore2/KeyMetadata$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/system/keystore2/KeyMetadata;-><clinit>()V
 HSPLandroid/system/keystore2/KeyMetadata;-><init>()V
-HSPLandroid/system/keystore2/KeyMetadata;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/system/keystore2/KeyMetadata;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/system/keystore2/KeyParameters$1;-><init>()V
 HSPLandroid/system/keystore2/KeyParameters$1;->createFromParcel(Landroid/os/Parcel;)Landroid/system/keystore2/KeyParameters;
 HSPLandroid/system/keystore2/KeyParameters$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -13863,7 +13872,7 @@
 HSPLandroid/telecom/PhoneAccount$Builder;->setShortDescription(Ljava/lang/CharSequence;)Landroid/telecom/PhoneAccount$Builder;
 HSPLandroid/telecom/PhoneAccount$Builder;->setSubscriptionAddress(Landroid/net/Uri;)Landroid/telecom/PhoneAccount$Builder;
 HSPLandroid/telecom/PhoneAccount$Builder;->setSupportedUriSchemes(Ljava/util/List;)Landroid/telecom/PhoneAccount$Builder;
-HSPLandroid/telecom/PhoneAccount;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telecom/PhoneAccount;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/net/Uri$1;,Landroid/graphics/drawable/Icon$1;,Landroid/telecom/PhoneAccountHandle$1;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/telecom/PhoneAccount;-><init>(Landroid/telecom/PhoneAccountHandle;Landroid/net/Uri;Landroid/net/Uri;ILandroid/graphics/drawable/Icon;ILjava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/util/List;Landroid/os/Bundle;IZLjava/lang/String;)V
 HSPLandroid/telecom/PhoneAccount;->audioRoutesToString()Ljava/lang/String;
 HSPLandroid/telecom/PhoneAccount;->builder(Landroid/telecom/PhoneAccountHandle;Ljava/lang/CharSequence;)Landroid/telecom/PhoneAccount$Builder;
@@ -13878,7 +13887,7 @@
 HSPLandroid/telecom/PhoneAccountHandle$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/telecom/PhoneAccountHandle;-><init>(Landroid/content/ComponentName;Ljava/lang/String;)V
 HSPLandroid/telecom/PhoneAccountHandle;-><init>(Landroid/content/ComponentName;Ljava/lang/String;Landroid/os/UserHandle;)V
-HSPLandroid/telecom/PhoneAccountHandle;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telecom/PhoneAccountHandle;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/os/UserHandle$1;,Landroid/content/ComponentName$1;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/telecom/PhoneAccountHandle;->checkParameters(Landroid/content/ComponentName;Landroid/os/UserHandle;)V
 HSPLandroid/telecom/PhoneAccountHandle;->equals(Ljava/lang/Object;)Z
 HSPLandroid/telecom/PhoneAccountHandle;->getComponentName()Landroid/content/ComponentName;
@@ -13929,11 +13938,11 @@
 HSPLandroid/telephony/CellIdentityGsm;->updateGlobalCellId()V
 HSPLandroid/telephony/CellIdentityLte$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellIdentityLte;
 HSPLandroid/telephony/CellIdentityLte$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/CellIdentityLte;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telephony/CellIdentityLte;-><init>(Landroid/os/Parcel;)V+]Landroid/telephony/CellIdentityLte;Landroid/telephony/CellIdentityLte;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/telephony/CellIdentityLte;->createFromParcelBody(Landroid/os/Parcel;)Landroid/telephony/CellIdentityLte;
 HSPLandroid/telephony/CellIdentityLte;->equals(Ljava/lang/Object;)Z
 HSPLandroid/telephony/CellIdentityLte;->getCi()I
-HSPLandroid/telephony/CellIdentityLte;->toString()Ljava/lang/String;
+HSPLandroid/telephony/CellIdentityLte;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/telephony/CellIdentityLte;->updateGlobalCellId()V
 HSPLandroid/telephony/CellIdentityLte;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/telephony/CellIdentityWcdma$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellIdentityWcdma;
@@ -13951,7 +13960,7 @@
 HSPLandroid/telephony/CellSignalStrength;->getNumSignalStrengthLevels()I
 HSPLandroid/telephony/CellSignalStrengthCdma$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellSignalStrengthCdma;
 HSPLandroid/telephony/CellSignalStrengthCdma$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/CellSignalStrengthCdma;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telephony/CellSignalStrengthCdma;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/telephony/CellSignalStrengthCdma;->equals(Ljava/lang/Object;)Z
 HSPLandroid/telephony/CellSignalStrengthCdma;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/telephony/CellSignalStrengthGsm$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellSignalStrengthGsm;
@@ -13961,7 +13970,7 @@
 HSPLandroid/telephony/CellSignalStrengthGsm;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/telephony/CellSignalStrengthLte$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellSignalStrengthLte;
 HSPLandroid/telephony/CellSignalStrengthLte$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/CellSignalStrengthLte;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telephony/CellSignalStrengthLte;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/telephony/CellSignalStrengthLte;->equals(Ljava/lang/Object;)Z
 HSPLandroid/telephony/CellSignalStrengthLte;->getDbm()I
 HSPLandroid/telephony/CellSignalStrengthLte;->getLevel()I
@@ -13970,17 +13979,17 @@
 HSPLandroid/telephony/CellSignalStrengthLte;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/telephony/CellSignalStrengthNr$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellSignalStrengthNr;
 HSPLandroid/telephony/CellSignalStrengthNr$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/CellSignalStrengthNr;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telephony/CellSignalStrengthNr;-><init>(Landroid/os/Parcel;)V+]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/telephony/CellSignalStrengthNr;->equals(Ljava/lang/Object;)Z
 HSPLandroid/telephony/CellSignalStrengthNr;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/telephony/CellSignalStrengthTdscdma$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellSignalStrengthTdscdma;
 HSPLandroid/telephony/CellSignalStrengthTdscdma$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/CellSignalStrengthTdscdma;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telephony/CellSignalStrengthTdscdma;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/telephony/CellSignalStrengthTdscdma;->equals(Ljava/lang/Object;)Z
 HSPLandroid/telephony/CellSignalStrengthTdscdma;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/telephony/CellSignalStrengthWcdma$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellSignalStrengthWcdma;
 HSPLandroid/telephony/CellSignalStrengthWcdma$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/CellSignalStrengthWcdma;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telephony/CellSignalStrengthWcdma;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/telephony/CellSignalStrengthWcdma;->equals(Ljava/lang/Object;)Z
 HSPLandroid/telephony/CellSignalStrengthWcdma;->getLevel()I
 HSPLandroid/telephony/CellSignalStrengthWcdma;->writeToParcel(Landroid/os/Parcel;I)V
@@ -14025,8 +14034,8 @@
 HSPLandroid/telephony/NetworkRegistrationInfo$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/telephony/NetworkRegistrationInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/NetworkRegistrationInfo;
 HSPLandroid/telephony/NetworkRegistrationInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/NetworkRegistrationInfo;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/telephony/NetworkRegistrationInfo;-><init>(Landroid/telephony/NetworkRegistrationInfo;)V
+HSPLandroid/telephony/NetworkRegistrationInfo;-><init>(Landroid/os/Parcel;)V+]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/telephony/NetworkRegistrationInfo;-><init>(Landroid/telephony/NetworkRegistrationInfo;)V+]Landroid/os/Parcelable$Creator;Landroid/telephony/CellIdentity$1;]Landroid/telephony/CellIdentity;Landroid/telephony/CellIdentityLte;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/telephony/NetworkRegistrationInfo;->domainToString(I)Ljava/lang/String;
 HSPLandroid/telephony/NetworkRegistrationInfo;->getAccessNetworkTechnology()I
 HSPLandroid/telephony/NetworkRegistrationInfo;->getDomain()I
@@ -14040,7 +14049,7 @@
 HSPLandroid/telephony/NetworkRegistrationInfo;->nrStateToString(I)Ljava/lang/String;
 HSPLandroid/telephony/NetworkRegistrationInfo;->registrationStateToString(I)Ljava/lang/String;
 HSPLandroid/telephony/NetworkRegistrationInfo;->serviceTypeToString(I)Ljava/lang/String;
-HSPLandroid/telephony/NetworkRegistrationInfo;->toString()Ljava/lang/String;
+HSPLandroid/telephony/NetworkRegistrationInfo;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/stream/Stream;Ljava/util/stream/ReferencePipeline$Head;,Ljava/util/stream/ReferencePipeline$3;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/telephony/NetworkRegistrationInfo;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/telephony/PhoneNumberUtils;->convertKeypadLettersToDigits(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/telephony/PhoneNumberUtils;->extractNetworkPortionAlt(Ljava/lang/String;)Ljava/lang/String;
@@ -14049,7 +14058,7 @@
 HSPLandroid/telephony/PhoneNumberUtils;->getMinMatch()I
 HSPLandroid/telephony/PhoneNumberUtils;->isDialable(C)Z
 HSPLandroid/telephony/PhoneNumberUtils;->isNonSeparator(C)Z
-HSPLandroid/telephony/PhoneNumberUtils;->normalizeNumber(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/telephony/PhoneNumberUtils;->normalizeNumber(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/telephony/PhoneNumberUtils;->stripSeparators(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda10;->runOrThrow()V
 HSPLandroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda13;-><init>(Landroid/telephony/PhoneStateListener;ILjava/lang/String;)V
@@ -14090,7 +14099,7 @@
 HSPLandroid/telephony/ServiceState$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/ServiceState;
 HSPLandroid/telephony/ServiceState$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/telephony/ServiceState;-><init>()V
-HSPLandroid/telephony/ServiceState;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telephony/ServiceState;-><init>(Landroid/os/Parcel;)V+]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/telephony/ServiceState;-><init>(Landroid/telephony/ServiceState;)V
 HSPLandroid/telephony/ServiceState;->copyFrom(Landroid/telephony/ServiceState;)V
 HSPLandroid/telephony/ServiceState;->createLocationInfoSanitizedCopy(Z)Landroid/telephony/ServiceState;
@@ -14120,11 +14129,11 @@
 HSPLandroid/telephony/ServiceState;->rilRadioTechnologyToString(I)Ljava/lang/String;
 HSPLandroid/telephony/ServiceState;->rilServiceStateToString(I)Ljava/lang/String;
 HSPLandroid/telephony/ServiceState;->roamingTypeToString(I)Ljava/lang/String;
-HSPLandroid/telephony/ServiceState;->toString()Ljava/lang/String;
+HSPLandroid/telephony/ServiceState;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/telephony/ServiceState;Landroid/telephony/ServiceState;
 HSPLandroid/telephony/ServiceState;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/telephony/SignalStrength$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/SignalStrength;
 HSPLandroid/telephony/SignalStrength$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/SignalStrength;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telephony/SignalStrength;-><init>(Landroid/os/Parcel;)V+]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/telephony/SignalStrength;->getCellSignalStrengths()Ljava/util/List;
 HSPLandroid/telephony/SignalStrength;->getCellSignalStrengths(Ljava/lang/Class;)Ljava/util/List;
 HSPLandroid/telephony/SignalStrength;->getLevel()I
@@ -14151,7 +14160,7 @@
 HSPLandroid/telephony/SubscriptionInfo;->isEmbedded()Z
 HSPLandroid/telephony/SubscriptionInfo;->isOpportunistic()Z
 HSPLandroid/telephony/SubscriptionInfo;->setAssociatedPlmns([Ljava/lang/String;[Ljava/lang/String;)V
-HSPLandroid/telephony/SubscriptionInfo;->toString()Ljava/lang/String;
+HSPLandroid/telephony/SubscriptionInfo;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda16;-><init>(Landroid/telephony/SubscriptionManager;)V
 HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda16;->test(Ljava/lang/Object;)Z+]Landroid/telephony/SubscriptionManager;Landroid/telephony/SubscriptionManager;
 HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda3;->applyOrThrow(Ljava/lang/Object;)Ljava/lang/Object;
@@ -14438,7 +14447,7 @@
 HSPLandroid/text/BoringLayout;-><init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;Z)V+]Landroid/text/BoringLayout;Landroid/text/BoringLayout;
 HSPLandroid/text/BoringLayout;-><init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)V
 HSPLandroid/text/BoringLayout;-><init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;IZ)V+]Landroid/text/BoringLayout;Landroid/text/BoringLayout;
-HSPLandroid/text/BoringLayout;->draw(Landroid/graphics/Canvas;Landroid/graphics/Path;Landroid/graphics/Paint;I)V
+HSPLandroid/text/BoringLayout;->draw(Landroid/graphics/Canvas;Landroid/graphics/Path;Landroid/graphics/Paint;I)V+]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
 HSPLandroid/text/BoringLayout;->ellipsized(II)V
 HSPLandroid/text/BoringLayout;->getEllipsisCount(I)I
 HSPLandroid/text/BoringLayout;->getEllipsisStart(I)I
@@ -14454,13 +14463,13 @@
 HSPLandroid/text/BoringLayout;->getLineWidth(I)F
 HSPLandroid/text/BoringLayout;->getParagraphDirection(I)I
 HSPLandroid/text/BoringLayout;->hasAnyInterestingChars(Ljava/lang/CharSequence;I)Z
-HSPLandroid/text/BoringLayout;->init(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/Layout$Alignment;Landroid/text/BoringLayout$Metrics;ZZZ)V+]Landroid/text/TextLine;Landroid/text/TextLine;]Ljava/lang/CharSequence;Ljava/lang/String;,Landroid/text/SpannableString;,Landroid/text/SpannedString;,Landroid/text/SpannableStringBuilder;
+HSPLandroid/text/BoringLayout;->init(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/Layout$Alignment;Landroid/text/BoringLayout$Metrics;ZZZ)V+]Landroid/text/TextLine;Landroid/text/TextLine;]Ljava/lang/CharSequence;Ljava/lang/String;,Landroid/text/SpannableString;,Landroid/text/SpannableStringBuilder;,Landroid/text/SpannedString;
 HSPLandroid/text/BoringLayout;->isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;Landroid/text/BoringLayout$Metrics;)Landroid/text/BoringLayout$Metrics;
-HSPLandroid/text/BoringLayout;->isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;ZLandroid/text/BoringLayout$Metrics;)Landroid/text/BoringLayout$Metrics;+]Landroid/text/TextLine;Landroid/text/TextLine;]Landroid/text/Spanned;missing_types]Ljava/lang/CharSequence;megamorphic_types]Landroid/text/TextDirectionHeuristic;Landroid/text/TextDirectionHeuristics$TextDirectionHeuristicInternal;,Landroid/text/TextDirectionHeuristics$TextDirectionHeuristicLocale;
+HSPLandroid/text/BoringLayout;->isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;ZLandroid/text/BoringLayout$Metrics;)Landroid/text/BoringLayout$Metrics;+]Landroid/text/TextLine;Landroid/text/TextLine;]Landroid/text/Spanned;missing_types]Ljava/lang/CharSequence;megamorphic_types]Landroid/text/TextDirectionHeuristic;Landroid/text/TextDirectionHeuristics$TextDirectionHeuristicLocale;,Landroid/text/TextDirectionHeuristics$TextDirectionHeuristicInternal;
 HSPLandroid/text/BoringLayout;->isFallbackLineSpacingEnabled()Z
 HSPLandroid/text/BoringLayout;->make(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;Z)Landroid/text/BoringLayout;
 HSPLandroid/text/BoringLayout;->make(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)Landroid/text/BoringLayout;
-HSPLandroid/text/BoringLayout;->replaceOrMake(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;Z)Landroid/text/BoringLayout;
+HSPLandroid/text/BoringLayout;->replaceOrMake(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;Z)Landroid/text/BoringLayout;+]Landroid/text/BoringLayout;Landroid/text/BoringLayout;
 HSPLandroid/text/BoringLayout;->replaceOrMake(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)Landroid/text/BoringLayout;
 HSPLandroid/text/BoringLayout;->replaceOrMake(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;Landroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;IZ)Landroid/text/BoringLayout;+]Landroid/text/BoringLayout;Landroid/text/BoringLayout;
 HSPLandroid/text/CharSequenceCharacterIterator;->current()C
@@ -14470,7 +14479,7 @@
 HSPLandroid/text/CharSequenceCharacterIterator;->getIndex()I
 HSPLandroid/text/CharSequenceCharacterIterator;->next()C
 HSPLandroid/text/CharSequenceCharacterIterator;->setIndex(I)C
-HSPLandroid/text/DynamicLayout$Builder;->obtain(Ljava/lang/CharSequence;Landroid/text/TextPaint;I)Landroid/text/DynamicLayout$Builder;
+HSPLandroid/text/DynamicLayout$Builder;->obtain(Ljava/lang/CharSequence;Landroid/text/TextPaint;I)Landroid/text/DynamicLayout$Builder;+]Landroid/util/Pools$SynchronizedPool;Landroid/util/Pools$SynchronizedPool;
 HSPLandroid/text/DynamicLayout$ChangeWatcher;->afterTextChanged(Landroid/text/Editable;)V
 HSPLandroid/text/DynamicLayout$ChangeWatcher;->beforeTextChanged(Ljava/lang/CharSequence;III)V
 HSPLandroid/text/DynamicLayout$ChangeWatcher;->onSpanAdded(Landroid/text/Spannable;Ljava/lang/Object;II)V
@@ -14478,10 +14487,10 @@
 HSPLandroid/text/DynamicLayout$ChangeWatcher;->onSpanRemoved(Landroid/text/Spannable;Ljava/lang/Object;II)V
 HSPLandroid/text/DynamicLayout$ChangeWatcher;->onTextChanged(Ljava/lang/CharSequence;III)V
 HSPLandroid/text/DynamicLayout;-><init>(Landroid/text/DynamicLayout$Builder;)V
-HSPLandroid/text/DynamicLayout;->addBlockAtOffset(I)V
-HSPLandroid/text/DynamicLayout;->contentMayProtrudeFromLineTopOrBottom(Ljava/lang/CharSequence;II)Z
-HSPLandroid/text/DynamicLayout;->createBlocks()V
-HSPLandroid/text/DynamicLayout;->generate(Landroid/text/DynamicLayout$Builder;)V+]Landroid/text/DynamicLayout;Landroid/text/DynamicLayout;]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;]Landroid/text/PackedObjectVector;Landroid/text/PackedObjectVector;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Ljava/lang/CharSequence;Landroid/text/SpannableStringBuilder;,Landroid/text/SpannableString;]Landroid/text/Spannable;Landroid/text/SpannableStringBuilder;,Landroid/text/SpannableString;
+HSPLandroid/text/DynamicLayout;->addBlockAtOffset(I)V+]Landroid/text/DynamicLayout;Landroid/text/DynamicLayout;
+HSPLandroid/text/DynamicLayout;->contentMayProtrudeFromLineTopOrBottom(Ljava/lang/CharSequence;II)Z+]Landroid/text/DynamicLayout;Landroid/text/DynamicLayout;]Landroid/graphics/Paint;Landroid/text/TextPaint;]Landroid/text/Spanned;missing_types
+HSPLandroid/text/DynamicLayout;->createBlocks()V+]Ljava/lang/CharSequence;missing_types
+HSPLandroid/text/DynamicLayout;->generate(Landroid/text/DynamicLayout$Builder;)V+]Landroid/text/DynamicLayout;Landroid/text/DynamicLayout;]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;]Landroid/text/PackedObjectVector;Landroid/text/PackedObjectVector;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Ljava/lang/CharSequence;missing_types]Landroid/text/Spannable;missing_types
 HSPLandroid/text/DynamicLayout;->getBlockEndLines()[I
 HSPLandroid/text/DynamicLayout;->getBlockIndices()[I
 HSPLandroid/text/DynamicLayout;->getBlocksAlwaysNeedToBeRedrawn()Landroid/util/ArraySet;
@@ -14490,17 +14499,17 @@
 HSPLandroid/text/DynamicLayout;->getEllipsizedWidth()I
 HSPLandroid/text/DynamicLayout;->getEndHyphenEdit(I)I
 HSPLandroid/text/DynamicLayout;->getIndexFirstChangedBlock()I
-HSPLandroid/text/DynamicLayout;->getLineContainsTab(I)Z
-HSPLandroid/text/DynamicLayout;->getLineCount()I
-HSPLandroid/text/DynamicLayout;->getLineDescent(I)I
-HSPLandroid/text/DynamicLayout;->getLineDirections(I)Landroid/text/Layout$Directions;
-HSPLandroid/text/DynamicLayout;->getLineExtra(I)I
+HSPLandroid/text/DynamicLayout;->getLineContainsTab(I)Z+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
+HSPLandroid/text/DynamicLayout;->getLineCount()I+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
+HSPLandroid/text/DynamicLayout;->getLineDescent(I)I+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
+HSPLandroid/text/DynamicLayout;->getLineDirections(I)Landroid/text/Layout$Directions;+]Landroid/text/PackedObjectVector;Landroid/text/PackedObjectVector;
+HSPLandroid/text/DynamicLayout;->getLineExtra(I)I+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
 HSPLandroid/text/DynamicLayout;->getLineStart(I)I+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
-HSPLandroid/text/DynamicLayout;->getLineTop(I)I
+HSPLandroid/text/DynamicLayout;->getLineTop(I)I+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
 HSPLandroid/text/DynamicLayout;->getNumberOfBlocks()I
-HSPLandroid/text/DynamicLayout;->getParagraphDirection(I)I
+HSPLandroid/text/DynamicLayout;->getParagraphDirection(I)I+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
 HSPLandroid/text/DynamicLayout;->getStartHyphenEdit(I)I
-HSPLandroid/text/DynamicLayout;->reflow(Ljava/lang/CharSequence;III)V+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;]Landroid/text/DynamicLayout;Landroid/text/DynamicLayout;]Landroid/text/PackedObjectVector;Landroid/text/PackedObjectVector;]Landroid/text/StaticLayout;Landroid/text/StaticLayout;]Landroid/text/Spanned;Landroid/text/SpannableStringBuilder;,Landroid/text/SpannableString;,Landroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;]Ljava/lang/CharSequence;Landroid/text/SpannableStringBuilder;,Landroid/text/SpannableString;,Landroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;]Landroid/text/StaticLayout$Builder;Landroid/text/StaticLayout$Builder;
+HSPLandroid/text/DynamicLayout;->reflow(Ljava/lang/CharSequence;III)V+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;]Landroid/text/DynamicLayout;Landroid/text/DynamicLayout;]Landroid/text/PackedObjectVector;Landroid/text/PackedObjectVector;]Landroid/text/StaticLayout;Landroid/text/StaticLayout;]Landroid/text/Spanned;missing_types]Ljava/lang/CharSequence;missing_types]Landroid/text/StaticLayout$Builder;Landroid/text/StaticLayout$Builder;
 HSPLandroid/text/DynamicLayout;->setIndexFirstChangedBlock(I)V
 HSPLandroid/text/DynamicLayout;->updateAlwaysNeedsToBeRedrawn(I)V
 HSPLandroid/text/DynamicLayout;->updateBlocks(III)V
@@ -14555,46 +14564,46 @@
 HSPLandroid/text/Layout;-><init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;Landroid/text/TextDirectionHeuristic;FF)V
 HSPLandroid/text/Layout;->addSelection(IIIIILandroid/text/Layout$SelectionRectangleConsumer;)V
 HSPLandroid/text/Layout;->draw(Landroid/graphics/Canvas;)V
-HSPLandroid/text/Layout;->draw(Landroid/graphics/Canvas;Landroid/graphics/Path;Landroid/graphics/Paint;I)V+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;
-HSPLandroid/text/Layout;->drawBackground(Landroid/graphics/Canvas;Landroid/graphics/Path;Landroid/graphics/Paint;III)V
-HSPLandroid/text/Layout;->drawText(Landroid/graphics/Canvas;II)V+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Landroid/text/TextLine;Landroid/text/TextLine;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/text/Spanned;Landroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;]Ljava/lang/CharSequence;Landroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
+HSPLandroid/text/Layout;->draw(Landroid/graphics/Canvas;Landroid/graphics/Path;Landroid/graphics/Paint;I)V+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;,Landroid/text/DynamicLayout;
+HSPLandroid/text/Layout;->drawBackground(Landroid/graphics/Canvas;Landroid/graphics/Path;Landroid/graphics/Paint;III)V+]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;]Landroid/text/SpanSet;Landroid/text/SpanSet;]Landroid/text/Spanned;missing_types
+HSPLandroid/text/Layout;->drawText(Landroid/graphics/Canvas;II)V+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;,Landroid/text/DynamicLayout;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;]Landroid/text/TextLine;Landroid/text/TextLine;]Landroid/text/Spanned;missing_types]Ljava/lang/CharSequence;missing_types
 HSPLandroid/text/Layout;->ellipsize(III[CILandroid/text/TextUtils$TruncateAt;)V
 HSPLandroid/text/Layout;->getCursorPath(ILandroid/graphics/Path;Ljava/lang/CharSequence;)V
 HSPLandroid/text/Layout;->getDesiredWidth(Ljava/lang/CharSequence;IILandroid/text/TextPaint;)F
-HSPLandroid/text/Layout;->getDesiredWidth(Ljava/lang/CharSequence;Landroid/text/TextPaint;)F+]Ljava/lang/CharSequence;Landroid/text/SpannableString;,Ljava/lang/String;,Landroid/text/SpannedString;,Landroid/text/SpannableStringBuilder;
+HSPLandroid/text/Layout;->getDesiredWidth(Ljava/lang/CharSequence;Landroid/text/TextPaint;)F+]Ljava/lang/CharSequence;missing_types
 HSPLandroid/text/Layout;->getDesiredWidthWithLimit(Ljava/lang/CharSequence;IILandroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;F)F
 HSPLandroid/text/Layout;->getEndHyphenEdit(I)I
-HSPLandroid/text/Layout;->getHeight()I
+HSPLandroid/text/Layout;->getHeight()I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/StaticLayout;
 HSPLandroid/text/Layout;->getHeight(Z)I
 HSPLandroid/text/Layout;->getHorizontal(IZ)F
 HSPLandroid/text/Layout;->getHorizontal(IZIZ)F+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;]Landroid/text/TextLine;Landroid/text/TextLine;
 HSPLandroid/text/Layout;->getIndentAdjust(ILandroid/text/Layout$Alignment;)I
-HSPLandroid/text/Layout;->getLineBaseline(I)I
+HSPLandroid/text/Layout;->getLineBaseline(I)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;
 HSPLandroid/text/Layout;->getLineBottom(I)I
-HSPLandroid/text/Layout;->getLineEnd(I)I
-HSPLandroid/text/Layout;->getLineExtent(ILandroid/text/Layout$TabStops;Z)F+]Landroid/text/Layout;Landroid/text/BoringLayout;]Landroid/text/TextLine;Landroid/text/TextLine;]Landroid/text/TextPaint;Landroid/text/TextPaint;
+HSPLandroid/text/Layout;->getLineEnd(I)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
+HSPLandroid/text/Layout;->getLineExtent(ILandroid/text/Layout$TabStops;Z)F+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;,Landroid/text/DynamicLayout;]Landroid/text/TextLine;Landroid/text/TextLine;]Landroid/text/TextPaint;Landroid/text/TextPaint;
 HSPLandroid/text/Layout;->getLineExtent(IZ)F+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/StaticLayout;]Landroid/text/TextLine;Landroid/text/TextLine;]Landroid/text/TextPaint;Landroid/text/TextPaint;
-HSPLandroid/text/Layout;->getLineForOffset(I)I
-HSPLandroid/text/Layout;->getLineForVertical(I)I
+HSPLandroid/text/Layout;->getLineForOffset(I)I+]Landroid/text/Layout;Landroid/text/StaticLayout;,Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
+HSPLandroid/text/Layout;->getLineForVertical(I)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
 HSPLandroid/text/Layout;->getLineLeft(I)F
 HSPLandroid/text/Layout;->getLineMax(I)F
-HSPLandroid/text/Layout;->getLineRangeForDraw(Landroid/graphics/Canvas;)J+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
+HSPLandroid/text/Layout;->getLineRangeForDraw(Landroid/graphics/Canvas;)J+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;,Landroid/text/DynamicLayout;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
 HSPLandroid/text/Layout;->getLineRight(I)F
-HSPLandroid/text/Layout;->getLineStartPos(III)I
-HSPLandroid/text/Layout;->getLineVisibleEnd(I)I
-HSPLandroid/text/Layout;->getLineVisibleEnd(III)I
+HSPLandroid/text/Layout;->getLineStartPos(III)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
+HSPLandroid/text/Layout;->getLineVisibleEnd(I)I+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;
+HSPLandroid/text/Layout;->getLineVisibleEnd(III)I+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Ljava/lang/CharSequence;Ljava/lang/StringBuilder;,Ljava/lang/String;
 HSPLandroid/text/Layout;->getLineWidth(I)F
 HSPLandroid/text/Layout;->getOffsetAtStartOf(I)I
 HSPLandroid/text/Layout;->getOffsetForHorizontal(IF)I
 HSPLandroid/text/Layout;->getOffsetForHorizontal(IFZ)I
 HSPLandroid/text/Layout;->getPaint()Landroid/text/TextPaint;
-HSPLandroid/text/Layout;->getParagraphAlignment(I)Landroid/text/Layout$Alignment;
-HSPLandroid/text/Layout;->getParagraphLeadingMargin(I)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;]Landroid/text/Spanned;Landroid/text/SpannableStringBuilder;,Landroid/text/SpannableString;
-HSPLandroid/text/Layout;->getParagraphLeft(I)I
-HSPLandroid/text/Layout;->getParagraphRight(I)I
-HSPLandroid/text/Layout;->getParagraphSpans(Landroid/text/Spanned;IILjava/lang/Class;)[Ljava/lang/Object;
+HSPLandroid/text/Layout;->getParagraphAlignment(I)Landroid/text/Layout$Alignment;+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
+HSPLandroid/text/Layout;->getParagraphLeadingMargin(I)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;]Landroid/text/Spanned;missing_types
+HSPLandroid/text/Layout;->getParagraphLeft(I)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
+HSPLandroid/text/Layout;->getParagraphRight(I)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
+HSPLandroid/text/Layout;->getParagraphSpans(Landroid/text/Spanned;IILjava/lang/Class;)[Ljava/lang/Object;+]Landroid/text/Spanned;Landroid/text/SpannedString;,Landroid/text/Layout$SpannedEllipsizer;,Landroid/text/SpannableString;]Landroid/text/SpannableStringBuilder;Landroid/text/SpannableStringBuilder;
 HSPLandroid/text/Layout;->getPrimaryHorizontal(I)F
-HSPLandroid/text/Layout;->getPrimaryHorizontal(IZ)F
+HSPLandroid/text/Layout;->getPrimaryHorizontal(IZ)F+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
 HSPLandroid/text/Layout;->getSelection(IILandroid/text/Layout$SelectionRectangleConsumer;)V
 HSPLandroid/text/Layout;->getSelectionPath(IILandroid/graphics/Path;)V
 HSPLandroid/text/Layout;->getSpacingAdd()F
@@ -14606,21 +14615,21 @@
 HSPLandroid/text/Layout;->increaseWidthTo(I)V
 HSPLandroid/text/Layout;->isFallbackLineSpacingEnabled()Z
 HSPLandroid/text/Layout;->isJustificationRequired(I)Z
-HSPLandroid/text/Layout;->isRtlCharAt(I)Z
+HSPLandroid/text/Layout;->isRtlCharAt(I)Z+]Landroid/text/Layout;Landroid/text/DynamicLayout;
 HSPLandroid/text/Layout;->measurePara(Landroid/text/TextPaint;Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;)F
-HSPLandroid/text/Layout;->primaryIsTrailingPrevious(I)Z
+HSPLandroid/text/Layout;->primaryIsTrailingPrevious(I)Z+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
 HSPLandroid/text/Layout;->replaceWith(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FF)V
 HSPLandroid/text/Layout;->setJustificationMode(I)V
 HSPLandroid/text/Layout;->shouldClampCursor(I)Z
 HSPLandroid/text/MeasuredParagraph;-><init>()V
 HSPLandroid/text/MeasuredParagraph;->applyMetricsAffectingSpan(Landroid/text/TextPaint;Landroid/graphics/text/LineBreakConfig;[Landroid/text/style/MetricAffectingSpan;IILandroid/graphics/text/MeasuredText$Builder;)V+]Landroid/text/style/MetricAffectingSpan;missing_types]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/text/AutoGrowArray$IntArray;Landroid/text/AutoGrowArray$IntArray;
-HSPLandroid/text/MeasuredParagraph;->applyReplacementRun(Landroid/text/style/ReplacementSpan;IILandroid/text/TextPaint;Landroid/graphics/text/MeasuredText$Builder;)V+]Landroid/text/AutoGrowArray$FloatArray;Landroid/text/AutoGrowArray$FloatArray;]Landroid/graphics/text/MeasuredText$Builder;Landroid/graphics/text/MeasuredText$Builder;
+HSPLandroid/text/MeasuredParagraph;->applyReplacementRun(Landroid/text/style/ReplacementSpan;IILandroid/text/TextPaint;Landroid/graphics/text/MeasuredText$Builder;)V+]Landroid/graphics/text/MeasuredText$Builder;Landroid/graphics/text/MeasuredText$Builder;]Landroid/text/AutoGrowArray$FloatArray;Landroid/text/AutoGrowArray$FloatArray;
 HSPLandroid/text/MeasuredParagraph;->applyStyleRun(IILandroid/text/TextPaint;Landroid/graphics/text/LineBreakConfig;Landroid/graphics/text/MeasuredText$Builder;)V+]Landroid/text/AutoGrowArray$FloatArray;Landroid/text/AutoGrowArray$FloatArray;]Landroid/graphics/text/MeasuredText$Builder;Landroid/graphics/text/MeasuredText$Builder;]Landroid/text/AutoGrowArray$ByteArray;Landroid/text/AutoGrowArray$ByteArray;]Landroid/text/TextPaint;Landroid/text/TextPaint;
 HSPLandroid/text/MeasuredParagraph;->breakText(IZF)I
 HSPLandroid/text/MeasuredParagraph;->buildForBidi(Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;Landroid/text/MeasuredParagraph;)Landroid/text/MeasuredParagraph;
 HSPLandroid/text/MeasuredParagraph;->buildForMeasurement(Landroid/text/TextPaint;Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;Landroid/text/MeasuredParagraph;)Landroid/text/MeasuredParagraph;
 HSPLandroid/text/MeasuredParagraph;->buildForStaticLayout(Landroid/text/TextPaint;Landroid/graphics/text/LineBreakConfig;Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;IZLandroid/text/MeasuredParagraph;Landroid/text/MeasuredParagraph;)Landroid/text/MeasuredParagraph;+]Landroid/graphics/text/MeasuredText$Builder;Landroid/graphics/text/MeasuredText$Builder;]Landroid/text/Spanned;missing_types]Landroid/text/AutoGrowArray$IntArray;Landroid/text/AutoGrowArray$IntArray;
-HSPLandroid/text/MeasuredParagraph;->getCharWidthAt(I)F
+HSPLandroid/text/MeasuredParagraph;->getCharWidthAt(I)F+]Landroid/graphics/text/MeasuredText;Landroid/graphics/text/MeasuredText;
 HSPLandroid/text/MeasuredParagraph;->getChars()[C
 HSPLandroid/text/MeasuredParagraph;->getDirections(II)Landroid/text/Layout$Directions;
 HSPLandroid/text/MeasuredParagraph;->getFontMetrics()Landroid/text/AutoGrowArray$IntArray;
@@ -14628,24 +14637,24 @@
 HSPLandroid/text/MeasuredParagraph;->getParagraphDir()I
 HSPLandroid/text/MeasuredParagraph;->getSpanEndCache()Landroid/text/AutoGrowArray$IntArray;
 HSPLandroid/text/MeasuredParagraph;->getWholeWidth()F
-HSPLandroid/text/MeasuredParagraph;->obtain()Landroid/text/MeasuredParagraph;
+HSPLandroid/text/MeasuredParagraph;->obtain()Landroid/text/MeasuredParagraph;+]Landroid/util/Pools$SynchronizedPool;Landroid/util/Pools$SynchronizedPool;
 HSPLandroid/text/MeasuredParagraph;->recycle()V
 HSPLandroid/text/MeasuredParagraph;->release()V
-HSPLandroid/text/MeasuredParagraph;->reset()V
-HSPLandroid/text/MeasuredParagraph;->resetAndAnalyzeBidi(Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;)V+]Landroid/text/AutoGrowArray$ByteArray;Landroid/text/AutoGrowArray$ByteArray;]Landroid/text/Spanned;Landroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;
-HSPLandroid/text/PackedIntVector;->adjustValuesBelow(III)V
-HSPLandroid/text/PackedIntVector;->deleteAt(II)V
+HSPLandroid/text/MeasuredParagraph;->reset()V+]Landroid/text/AutoGrowArray$FloatArray;Landroid/text/AutoGrowArray$FloatArray;]Landroid/text/AutoGrowArray$ByteArray;Landroid/text/AutoGrowArray$ByteArray;]Landroid/text/AutoGrowArray$IntArray;Landroid/text/AutoGrowArray$IntArray;
+HSPLandroid/text/MeasuredParagraph;->resetAndAnalyzeBidi(Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;)V+]Landroid/text/AutoGrowArray$ByteArray;Landroid/text/AutoGrowArray$ByteArray;]Landroid/text/Spanned;missing_types]Landroid/text/TextDirectionHeuristic;Landroid/text/TextDirectionHeuristics$TextDirectionHeuristicLocale;
+HSPLandroid/text/PackedIntVector;->adjustValuesBelow(III)V+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
+HSPLandroid/text/PackedIntVector;->deleteAt(II)V+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
 HSPLandroid/text/PackedIntVector;->getValue(II)I+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
-HSPLandroid/text/PackedIntVector;->growBuffer()V
-HSPLandroid/text/PackedIntVector;->insertAt(I[I)V
+HSPLandroid/text/PackedIntVector;->growBuffer()V+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
+HSPLandroid/text/PackedIntVector;->insertAt(I[I)V+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
 HSPLandroid/text/PackedIntVector;->moveRowGapTo(I)V
 HSPLandroid/text/PackedIntVector;->moveValueGapTo(II)V
 HSPLandroid/text/PackedIntVector;->size()I
 HSPLandroid/text/PackedIntVector;->width()I
-HSPLandroid/text/PackedObjectVector;->deleteAt(II)V
+HSPLandroid/text/PackedObjectVector;->deleteAt(II)V+]Landroid/text/PackedObjectVector;Landroid/text/PackedObjectVector;
 HSPLandroid/text/PackedObjectVector;->getValue(II)Ljava/lang/Object;
-HSPLandroid/text/PackedObjectVector;->growBuffer()V
-HSPLandroid/text/PackedObjectVector;->insertAt(I[Ljava/lang/Object;)V
+HSPLandroid/text/PackedObjectVector;->growBuffer()V+]Landroid/text/PackedObjectVector;Landroid/text/PackedObjectVector;
+HSPLandroid/text/PackedObjectVector;->insertAt(I[Ljava/lang/Object;)V+]Landroid/text/PackedObjectVector;Landroid/text/PackedObjectVector;
 HSPLandroid/text/PackedObjectVector;->moveRowGapTo(I)V
 HSPLandroid/text/PackedObjectVector;->setValue(IILjava/lang/Object;)V
 HSPLandroid/text/PackedObjectVector;->size()I
@@ -14655,9 +14664,9 @@
 HSPLandroid/text/PrecomputedText$Params;->getHyphenationFrequency()I
 HSPLandroid/text/PrecomputedText$Params;->getTextDirection()Landroid/text/TextDirectionHeuristic;
 HSPLandroid/text/PrecomputedText$Params;->getTextPaint()Landroid/text/TextPaint;
-HSPLandroid/text/PrecomputedText;->createMeasuredParagraphs(Ljava/lang/CharSequence;Landroid/text/PrecomputedText$Params;IIZ)[Landroid/text/PrecomputedText$ParagraphInfo;
-HSPLandroid/text/Selection;->getSelectionEnd(Ljava/lang/CharSequence;)I
-HSPLandroid/text/Selection;->getSelectionStart(Ljava/lang/CharSequence;)I
+HSPLandroid/text/PrecomputedText;->createMeasuredParagraphs(Ljava/lang/CharSequence;Landroid/text/PrecomputedText$Params;IIZ)[Landroid/text/PrecomputedText$ParagraphInfo;+]Landroid/text/PrecomputedText$Params;Landroid/text/PrecomputedText$Params;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/text/Selection;->getSelectionEnd(Ljava/lang/CharSequence;)I+]Landroid/text/Spanned;missing_types
+HSPLandroid/text/Selection;->getSelectionStart(Ljava/lang/CharSequence;)I+]Landroid/text/Spanned;missing_types
 HSPLandroid/text/Selection;->removeMemory(Landroid/text/Spannable;)V
 HSPLandroid/text/Selection;->removeSelection(Landroid/text/Spannable;)V
 HSPLandroid/text/Selection;->setSelection(Landroid/text/Spannable;I)V
@@ -14667,7 +14676,7 @@
 HSPLandroid/text/SpanSet;-><init>(Ljava/lang/Class;)V
 HSPLandroid/text/SpanSet;->getNextTransition(II)I
 HSPLandroid/text/SpanSet;->hasSpansIntersecting(II)Z
-HSPLandroid/text/SpanSet;->init(Landroid/text/Spanned;II)V+]Landroid/text/Spanned;Landroid/text/SpannedString;,Landroid/text/SpannableStringBuilder;,Landroid/text/SpannableString;
+HSPLandroid/text/SpanSet;->init(Landroid/text/Spanned;II)V+]Landroid/text/Spanned;missing_types
 HSPLandroid/text/SpanSet;->recycle()V
 HSPLandroid/text/Spannable$Factory;->getInstance()Landroid/text/Spannable$Factory;
 HSPLandroid/text/Spannable$Factory;->newSpannable(Ljava/lang/CharSequence;)Landroid/text/Spannable;
@@ -14685,32 +14694,32 @@
 HSPLandroid/text/SpannableString;->subSequence(II)Ljava/lang/CharSequence;
 HSPLandroid/text/SpannableString;->valueOf(Ljava/lang/CharSequence;)Landroid/text/SpannableString;
 HSPLandroid/text/SpannableStringBuilder;-><init>()V
-HSPLandroid/text/SpannableStringBuilder;-><init>(Ljava/lang/CharSequence;)V
-HSPLandroid/text/SpannableStringBuilder;-><init>(Ljava/lang/CharSequence;II)V
+HSPLandroid/text/SpannableStringBuilder;-><init>(Ljava/lang/CharSequence;)V+]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLandroid/text/SpannableStringBuilder;-><init>(Ljava/lang/CharSequence;II)V+]Landroid/text/Spanned;missing_types
 HSPLandroid/text/SpannableStringBuilder;->append(C)Landroid/text/Editable;
 HSPLandroid/text/SpannableStringBuilder;->append(C)Landroid/text/SpannableStringBuilder;
 HSPLandroid/text/SpannableStringBuilder;->append(Ljava/lang/CharSequence;)Landroid/text/Editable;
 HSPLandroid/text/SpannableStringBuilder;->append(Ljava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;
 HSPLandroid/text/SpannableStringBuilder;->append(Ljava/lang/CharSequence;II)Landroid/text/SpannableStringBuilder;
 HSPLandroid/text/SpannableStringBuilder;->calcMax(I)I
-HSPLandroid/text/SpannableStringBuilder;->change(IILjava/lang/CharSequence;II)V
-HSPLandroid/text/SpannableStringBuilder;->charAt(I)C
-HSPLandroid/text/SpannableStringBuilder;->checkRange(Ljava/lang/String;II)V
+HSPLandroid/text/SpannableStringBuilder;->change(IILjava/lang/CharSequence;II)V+]Landroid/text/Spanned;Landroid/text/SpannedString;,Landroid/text/SpannableStringBuilder;,Landroid/text/SpannableString;]Landroid/text/SpannableStringBuilder;missing_types
+HSPLandroid/text/SpannableStringBuilder;->charAt(I)C+]Landroid/text/SpannableStringBuilder;missing_types
+HSPLandroid/text/SpannableStringBuilder;->checkRange(Ljava/lang/String;II)V+]Landroid/text/SpannableStringBuilder;missing_types
 HSPLandroid/text/SpannableStringBuilder;->checkSortBuffer([II)[I
 HSPLandroid/text/SpannableStringBuilder;->clear()V
 HSPLandroid/text/SpannableStringBuilder;->compareSpans(II[I[I)I
-HSPLandroid/text/SpannableStringBuilder;->countSpans(IILjava/lang/Class;I)I
+HSPLandroid/text/SpannableStringBuilder;->countSpans(IILjava/lang/Class;I)I+]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/text/SpannableStringBuilder;->delete(II)Landroid/text/Editable;
 HSPLandroid/text/SpannableStringBuilder;->delete(II)Landroid/text/SpannableStringBuilder;
 HSPLandroid/text/SpannableStringBuilder;->drawTextRun(Landroid/graphics/BaseCanvas;IIIIFFZLandroid/graphics/Paint;)V
 HSPLandroid/text/SpannableStringBuilder;->equals(Ljava/lang/Object;)Z
 HSPLandroid/text/SpannableStringBuilder;->getChars(II[CI)V
-HSPLandroid/text/SpannableStringBuilder;->getSpanEnd(Ljava/lang/Object;)I
-HSPLandroid/text/SpannableStringBuilder;->getSpanFlags(Ljava/lang/Object;)I
-HSPLandroid/text/SpannableStringBuilder;->getSpanStart(Ljava/lang/Object;)I
-HSPLandroid/text/SpannableStringBuilder;->getSpans(IILjava/lang/Class;)[Ljava/lang/Object;
+HSPLandroid/text/SpannableStringBuilder;->getSpanEnd(Ljava/lang/Object;)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/IdentityHashMap;Ljava/util/IdentityHashMap;
+HSPLandroid/text/SpannableStringBuilder;->getSpanFlags(Ljava/lang/Object;)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/IdentityHashMap;Ljava/util/IdentityHashMap;
+HSPLandroid/text/SpannableStringBuilder;->getSpanStart(Ljava/lang/Object;)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/IdentityHashMap;Ljava/util/IdentityHashMap;
+HSPLandroid/text/SpannableStringBuilder;->getSpans(IILjava/lang/Class;)[Ljava/lang/Object;+]Landroid/text/SpannableStringBuilder;missing_types
 HSPLandroid/text/SpannableStringBuilder;->getSpans(IILjava/lang/Class;Z)[Ljava/lang/Object;
-HSPLandroid/text/SpannableStringBuilder;->getSpansRec(IILjava/lang/Class;I[Ljava/lang/Object;[I[IIZ)I
+HSPLandroid/text/SpannableStringBuilder;->getSpansRec(IILjava/lang/Class;I[Ljava/lang/Object;[I[IIZ)I+]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/text/SpannableStringBuilder;->getTextWatcherDepth()I
 HSPLandroid/text/SpannableStringBuilder;->hasNonExclusiveExclusiveSpanAt(Ljava/lang/CharSequence;I)Z
 HSPLandroid/text/SpannableStringBuilder;->insert(ILjava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;
@@ -14718,9 +14727,9 @@
 HSPLandroid/text/SpannableStringBuilder;->isInvalidParagraph(II)Z
 HSPLandroid/text/SpannableStringBuilder;->leftChild(I)I
 HSPLandroid/text/SpannableStringBuilder;->length()I
-HSPLandroid/text/SpannableStringBuilder;->moveGapTo(I)V
+HSPLandroid/text/SpannableStringBuilder;->moveGapTo(I)V+]Landroid/text/SpannableStringBuilder;Landroid/text/SpannableStringBuilder;
 HSPLandroid/text/SpannableStringBuilder;->nextSpanTransition(IILjava/lang/Class;)I
-HSPLandroid/text/SpannableStringBuilder;->nextSpanTransitionRec(IILjava/lang/Class;I)I
+HSPLandroid/text/SpannableStringBuilder;->nextSpanTransitionRec(IILjava/lang/Class;I)I+]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/text/SpannableStringBuilder;->obtain(I)[I
 HSPLandroid/text/SpannableStringBuilder;->recycle([I)V
 HSPLandroid/text/SpannableStringBuilder;->removeSpan(II)V
@@ -14728,11 +14737,11 @@
 HSPLandroid/text/SpannableStringBuilder;->removeSpan(Ljava/lang/Object;I)V
 HSPLandroid/text/SpannableStringBuilder;->removeSpansForChange(IIZI)Z
 HSPLandroid/text/SpannableStringBuilder;->replace(IILjava/lang/CharSequence;)Landroid/text/Editable;
-HSPLandroid/text/SpannableStringBuilder;->replace(IILjava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;
-HSPLandroid/text/SpannableStringBuilder;->replace(IILjava/lang/CharSequence;II)Landroid/text/SpannableStringBuilder;+]Landroid/text/SpannableStringBuilder;Landroid/text/SpannableStringBuilder;
+HSPLandroid/text/SpannableStringBuilder;->replace(IILjava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;+]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/text/SpannableStringBuilder;Landroid/text/SpannableStringBuilder;
+HSPLandroid/text/SpannableStringBuilder;->replace(IILjava/lang/CharSequence;II)Landroid/text/SpannableStringBuilder;+]Landroid/text/SpannableStringBuilder;missing_types]Landroid/text/InputFilter;Landroid/text/InputFilter$LengthFilter;,Landroid/widget/Editor$UndoInputFilter;
 HSPLandroid/text/SpannableStringBuilder;->resizeFor(I)V
 HSPLandroid/text/SpannableStringBuilder;->resolveGap(I)I
-HSPLandroid/text/SpannableStringBuilder;->restoreInvariants()V
+HSPLandroid/text/SpannableStringBuilder;->restoreInvariants()V+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/IdentityHashMap;Ljava/util/IdentityHashMap;
 HSPLandroid/text/SpannableStringBuilder;->rightChild(I)I
 HSPLandroid/text/SpannableStringBuilder;->sendAfterTextChanged([Landroid/text/TextWatcher;)V
 HSPLandroid/text/SpannableStringBuilder;->sendBeforeTextChanged([Landroid/text/TextWatcher;III)V
@@ -14743,28 +14752,28 @@
 HSPLandroid/text/SpannableStringBuilder;->sendToSpanWatchers(III)V
 HSPLandroid/text/SpannableStringBuilder;->setFilters([Landroid/text/InputFilter;)V
 HSPLandroid/text/SpannableStringBuilder;->setSpan(Ljava/lang/Object;III)V
-HSPLandroid/text/SpannableStringBuilder;->setSpan(ZLjava/lang/Object;IIIZ)V+]Ljava/util/IdentityHashMap;Ljava/util/IdentityHashMap;
+HSPLandroid/text/SpannableStringBuilder;->setSpan(ZLjava/lang/Object;IIIZ)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/IdentityHashMap;Ljava/util/IdentityHashMap;
 HSPLandroid/text/SpannableStringBuilder;->siftDown(I[Ljava/lang/Object;I[I[I)V
 HSPLandroid/text/SpannableStringBuilder;->sort([Ljava/lang/Object;[I[I)V
 HSPLandroid/text/SpannableStringBuilder;->subSequence(II)Ljava/lang/CharSequence;
-HSPLandroid/text/SpannableStringBuilder;->toString()Ljava/lang/String;
+HSPLandroid/text/SpannableStringBuilder;->toString()Ljava/lang/String;+]Landroid/text/SpannableStringBuilder;missing_types
 HSPLandroid/text/SpannableStringBuilder;->treeRoot()I
 HSPLandroid/text/SpannableStringBuilder;->updatedIntervalBound(IIIIZZ)I
-HSPLandroid/text/SpannableStringInternal;-><init>(Ljava/lang/CharSequence;IIZ)V
+HSPLandroid/text/SpannableStringInternal;-><init>(Ljava/lang/CharSequence;IIZ)V+]Ljava/lang/CharSequence;missing_types
 HSPLandroid/text/SpannableStringInternal;->charAt(I)C
 HSPLandroid/text/SpannableStringInternal;->checkRange(Ljava/lang/String;II)V
-HSPLandroid/text/SpannableStringInternal;->copySpansFromInternal(Landroid/text/SpannableStringInternal;IIZ)V
+HSPLandroid/text/SpannableStringInternal;->copySpansFromInternal(Landroid/text/SpannableStringInternal;IIZ)V+]Landroid/text/SpannableStringInternal;Landroid/text/SpannedString;,Landroid/text/SpannableString;
 HSPLandroid/text/SpannableStringInternal;->copySpansFromSpanned(Landroid/text/Spanned;IIZ)V
-HSPLandroid/text/SpannableStringInternal;->equals(Ljava/lang/Object;)Z
-HSPLandroid/text/SpannableStringInternal;->getChars(II[CI)V
+HSPLandroid/text/SpannableStringInternal;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;missing_types]Landroid/text/Spanned;Landroid/text/SpannedString;]Landroid/text/SpannableStringInternal;Landroid/text/SpannedString;
+HSPLandroid/text/SpannableStringInternal;->getChars(II[CI)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/text/SpannableStringInternal;->getSpanEnd(Ljava/lang/Object;)I
 HSPLandroid/text/SpannableStringInternal;->getSpanFlags(Ljava/lang/Object;)I
 HSPLandroid/text/SpannableStringInternal;->getSpanStart(Ljava/lang/Object;)I
-HSPLandroid/text/SpannableStringInternal;->getSpans(IILjava/lang/Class;)[Ljava/lang/Object;
+HSPLandroid/text/SpannableStringInternal;->getSpans(IILjava/lang/Class;)[Ljava/lang/Object;+]Ljava/lang/Class;Ljava/lang/Class;]Landroid/text/SpannableStringInternal;Landroid/text/SpannableString;
 HSPLandroid/text/SpannableStringInternal;->length()I
-HSPLandroid/text/SpannableStringInternal;->nextSpanTransition(IILjava/lang/Class;)I
+HSPLandroid/text/SpannableStringInternal;->nextSpanTransition(IILjava/lang/Class;)I+]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/text/SpannableStringInternal;->removeSpan(Ljava/lang/Object;I)V
-HSPLandroid/text/SpannableStringInternal;->sendSpanAdded(Ljava/lang/Object;II)V
+HSPLandroid/text/SpannableStringInternal;->sendSpanAdded(Ljava/lang/Object;II)V+]Landroid/text/SpannableStringInternal;Landroid/text/SpannableString;
 HSPLandroid/text/SpannableStringInternal;->sendSpanChanged(Ljava/lang/Object;IIII)V
 HSPLandroid/text/SpannableStringInternal;->setSpan(Ljava/lang/Object;III)V
 HSPLandroid/text/SpannableStringInternal;->setSpan(Ljava/lang/Object;IIIZ)V
@@ -14799,8 +14808,8 @@
 HSPLandroid/text/StaticLayout$Builder;->-$$Nest$fgetmWidth(Landroid/text/StaticLayout$Builder;)I
 HSPLandroid/text/StaticLayout$Builder;-><init>()V
 HSPLandroid/text/StaticLayout$Builder;->build()Landroid/text/StaticLayout;
-HSPLandroid/text/StaticLayout$Builder;->obtain(Ljava/lang/CharSequence;IILandroid/text/TextPaint;I)Landroid/text/StaticLayout$Builder;
-HSPLandroid/text/StaticLayout$Builder;->recycle(Landroid/text/StaticLayout$Builder;)V
+HSPLandroid/text/StaticLayout$Builder;->obtain(Ljava/lang/CharSequence;IILandroid/text/TextPaint;I)Landroid/text/StaticLayout$Builder;+]Landroid/util/Pools$SynchronizedPool;Landroid/util/Pools$SynchronizedPool;
+HSPLandroid/text/StaticLayout$Builder;->recycle(Landroid/text/StaticLayout$Builder;)V+]Landroid/util/Pools$SynchronizedPool;Landroid/util/Pools$SynchronizedPool;
 HSPLandroid/text/StaticLayout$Builder;->setAlignment(Landroid/text/Layout$Alignment;)Landroid/text/StaticLayout$Builder;
 HSPLandroid/text/StaticLayout$Builder;->setBreakStrategy(I)Landroid/text/StaticLayout$Builder;
 HSPLandroid/text/StaticLayout$Builder;->setEllipsize(Landroid/text/TextUtils$TruncateAt;)Landroid/text/StaticLayout$Builder;
@@ -14813,10 +14822,10 @@
 HSPLandroid/text/StaticLayout$Builder;->setMaxLines(I)Landroid/text/StaticLayout$Builder;
 HSPLandroid/text/StaticLayout$Builder;->setTextDirection(Landroid/text/TextDirectionHeuristic;)Landroid/text/StaticLayout$Builder;
 HSPLandroid/text/StaticLayout$Builder;->setUseLineSpacingFromFallbacks(Z)Landroid/text/StaticLayout$Builder;
-HSPLandroid/text/StaticLayout;-><init>(Landroid/text/StaticLayout$Builder;)V
+HSPLandroid/text/StaticLayout;-><init>(Landroid/text/StaticLayout$Builder;)V+]Landroid/text/StaticLayout;Landroid/text/StaticLayout;
 HSPLandroid/text/StaticLayout;-><init>(Ljava/lang/CharSequence;)V
-HSPLandroid/text/StaticLayout;->calculateEllipsis(IILandroid/text/MeasuredParagraph;IFLandroid/text/TextUtils$TruncateAt;IFLandroid/text/TextPaint;Z)V
-HSPLandroid/text/StaticLayout;->generate(Landroid/text/StaticLayout$Builder;ZZ)V+]Landroid/text/MeasuredParagraph;Landroid/text/MeasuredParagraph;]Landroid/graphics/text/LineBreaker$Builder;Landroid/graphics/text/LineBreaker$Builder;]Landroid/graphics/text/LineBreaker;Landroid/graphics/text/LineBreaker;]Ljava/lang/CharSequence;Landroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;,Ljava/lang/String;]Landroid/graphics/text/LineBreaker$ParagraphConstraints;Landroid/graphics/text/LineBreaker$ParagraphConstraints;]Landroid/graphics/text/LineBreaker$Result;Landroid/graphics/text/LineBreaker$Result;]Landroid/text/AutoGrowArray$IntArray;Landroid/text/AutoGrowArray$IntArray;
+HSPLandroid/text/StaticLayout;->calculateEllipsis(IILandroid/text/MeasuredParagraph;IFLandroid/text/TextUtils$TruncateAt;IFLandroid/text/TextPaint;Z)V+]Landroid/text/MeasuredParagraph;Landroid/text/MeasuredParagraph;]Landroid/text/TextPaint;Landroid/text/TextPaint;
+HSPLandroid/text/StaticLayout;->generate(Landroid/text/StaticLayout$Builder;ZZ)V+]Landroid/text/MeasuredParagraph;Landroid/text/MeasuredParagraph;]Landroid/graphics/text/LineBreaker$Builder;Landroid/graphics/text/LineBreaker$Builder;]Landroid/graphics/text/LineBreaker;Landroid/graphics/text/LineBreaker;]Ljava/lang/CharSequence;missing_types]Landroid/graphics/text/LineBreaker$ParagraphConstraints;Landroid/graphics/text/LineBreaker$ParagraphConstraints;]Landroid/graphics/text/LineBreaker$Result;Landroid/graphics/text/LineBreaker$Result;]Landroid/text/AutoGrowArray$IntArray;Landroid/text/AutoGrowArray$IntArray;]Landroid/text/TextPaint;Landroid/text/TextPaint;
 HSPLandroid/text/StaticLayout;->getBottomPadding()I
 HSPLandroid/text/StaticLayout;->getEllipsisCount(I)I
 HSPLandroid/text/StaticLayout;->getEllipsisStart(I)I
@@ -14837,13 +14846,13 @@
 HSPLandroid/text/StaticLayout;->getTopPadding()I
 HSPLandroid/text/StaticLayout;->getTotalInsets(I)F
 HSPLandroid/text/StaticLayout;->isFallbackLineSpacingEnabled()Z
-HSPLandroid/text/StaticLayout;->out(Ljava/lang/CharSequence;IIIIIIIFF[Landroid/text/style/LineHeightSpan;[ILandroid/graphics/Paint$FontMetricsInt;ZIZLandroid/text/MeasuredParagraph;IZZZ[CILandroid/text/TextUtils$TruncateAt;FFLandroid/text/TextPaint;Z)I
+HSPLandroid/text/StaticLayout;->out(Ljava/lang/CharSequence;IIIIIIIFF[Landroid/text/style/LineHeightSpan;[ILandroid/graphics/Paint$FontMetricsInt;ZIZLandroid/text/MeasuredParagraph;IZZZ[CILandroid/text/TextUtils$TruncateAt;FFLandroid/text/TextPaint;Z)I+]Landroid/text/MeasuredParagraph;Landroid/text/MeasuredParagraph;]Ljava/lang/CharSequence;missing_types
 HSPLandroid/text/StaticLayout;->packHyphenEdit(II)I
 HSPLandroid/text/StaticLayout;->unpackEndHyphenEdit(I)I
 HSPLandroid/text/StaticLayout;->unpackStartHyphenEdit(I)I
 HSPLandroid/text/TextDirectionHeuristics$FirstStrong;->checkRtl(Ljava/lang/CharSequence;II)I
 HSPLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicImpl;->doCheck(Ljava/lang/CharSequence;II)Z
-HSPLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicImpl;->isRtl(Ljava/lang/CharSequence;II)Z
+HSPLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicImpl;->isRtl(Ljava/lang/CharSequence;II)Z+]Landroid/text/TextDirectionHeuristics$TextDirectionHeuristicImpl;Landroid/text/TextDirectionHeuristics$TextDirectionHeuristicLocale;]Ljava/lang/CharSequence;missing_types
 HSPLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicImpl;->isRtl([CII)Z
 HSPLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicInternal;->defaultIsRtl()Z
 HSPLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicLocale;->defaultIsRtl()Z
@@ -14854,23 +14863,23 @@
 HSPLandroid/text/TextLine;-><init>()V
 HSPLandroid/text/TextLine;->adjustEndHyphenEdit(II)I
 HSPLandroid/text/TextLine;->adjustStartHyphenEdit(II)I
-HSPLandroid/text/TextLine;->draw(Landroid/graphics/Canvas;FIII)V
+HSPLandroid/text/TextLine;->draw(Landroid/graphics/Canvas;FIII)V+]Landroid/text/Layout$Directions;Landroid/text/Layout$Directions;
 HSPLandroid/text/TextLine;->drawRun(Landroid/graphics/Canvas;IIZFIIIZ)F
 HSPLandroid/text/TextLine;->drawStroke(Landroid/text/TextPaint;Landroid/graphics/Canvas;IFFFFF)V
 HSPLandroid/text/TextLine;->drawTextRun(Landroid/graphics/Canvas;Landroid/text/TextPaint;IIIIZFI)V
-HSPLandroid/text/TextLine;->equalAttributes(Landroid/text/TextPaint;Landroid/text/TextPaint;)Z
-HSPLandroid/text/TextLine;->expandMetricsFromPaint(Landroid/graphics/Paint$FontMetricsInt;Landroid/text/TextPaint;)V
-HSPLandroid/text/TextLine;->extractDecorationInfo(Landroid/text/TextPaint;Landroid/text/TextLine$DecorationInfo;)V
+HSPLandroid/text/TextLine;->equalAttributes(Landroid/text/TextPaint;Landroid/text/TextPaint;)Z+]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/os/LocaleList;Landroid/os/LocaleList;
+HSPLandroid/text/TextLine;->expandMetricsFromPaint(Landroid/graphics/Paint$FontMetricsInt;Landroid/text/TextPaint;)V+]Landroid/text/TextPaint;Landroid/text/TextPaint;
+HSPLandroid/text/TextLine;->extractDecorationInfo(Landroid/text/TextPaint;Landroid/text/TextLine$DecorationInfo;)V+]Landroid/text/TextPaint;Landroid/text/TextPaint;
 HSPLandroid/text/TextLine;->getOffsetBeforeAfter(IIIZIZ)I
 HSPLandroid/text/TextLine;->getOffsetToLeftRightOf(IZ)I
 HSPLandroid/text/TextLine;->getRunAdvance(Landroid/text/TextPaint;IIIIZI)F+]Landroid/text/TextPaint;Landroid/text/TextPaint;
 HSPLandroid/text/TextLine;->handleReplacement(Landroid/text/style/ReplacementSpan;Landroid/text/TextPaint;IIZLandroid/graphics/Canvas;FIIILandroid/graphics/Paint$FontMetricsInt;Z)F
-HSPLandroid/text/TextLine;->handleRun(IIIZLandroid/graphics/Canvas;Landroid/text/TextShaper$GlyphsConsumer;FIIILandroid/graphics/Paint$FontMetricsInt;Z)F+]Landroid/text/TextPaint;Landroid/text/TextPaint;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/text/SpanSet;Landroid/text/SpanSet;]Landroid/text/TextLine$DecorationInfo;Landroid/text/TextLine$DecorationInfo;
-HSPLandroid/text/TextLine;->handleText(Landroid/text/TextPaint;IIIIZLandroid/graphics/Canvas;Landroid/text/TextShaper$GlyphsConsumer;FIIILandroid/graphics/Paint$FontMetricsInt;ZILjava/util/ArrayList;)F
+HSPLandroid/text/TextLine;->handleRun(IIIZLandroid/graphics/Canvas;Landroid/text/TextShaper$GlyphsConsumer;FIIILandroid/graphics/Paint$FontMetricsInt;Z)F+]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/text/SpanSet;Landroid/text/SpanSet;]Landroid/text/style/MetricAffectingSpan;Landroid/text/style/StyleSpan;,Landroid/text/style/TypefaceSpan;,Landroid/text/style/RelativeSizeSpan;]Landroid/text/style/CharacterStyle;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/text/TextLine$DecorationInfo;Landroid/text/TextLine$DecorationInfo;
+HSPLandroid/text/TextLine;->handleText(Landroid/text/TextPaint;IIIIZLandroid/graphics/Canvas;Landroid/text/TextShaper$GlyphsConsumer;FIIILandroid/graphics/Paint$FontMetricsInt;ZILjava/util/ArrayList;)F+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
 HSPLandroid/text/TextLine;->isLineEndSpace(C)Z
 HSPLandroid/text/TextLine;->measure(IZLandroid/graphics/Paint$FontMetricsInt;)F+]Landroid/text/Layout$Directions;Landroid/text/Layout$Directions;
 HSPLandroid/text/TextLine;->measureRun(IIIZLandroid/graphics/Paint$FontMetricsInt;)F
-HSPLandroid/text/TextLine;->metrics(Landroid/graphics/Paint$FontMetricsInt;)F
+HSPLandroid/text/TextLine;->metrics(Landroid/graphics/Paint$FontMetricsInt;)F+]Landroid/text/TextLine;Landroid/text/TextLine;
 HSPLandroid/text/TextLine;->obtain()Landroid/text/TextLine;
 HSPLandroid/text/TextLine;->recycle(Landroid/text/TextLine;)Landroid/text/TextLine;+]Landroid/text/SpanSet;Landroid/text/SpanSet;
 HSPLandroid/text/TextLine;->set(Landroid/text/TextPaint;Ljava/lang/CharSequence;IIILandroid/text/Layout$Directions;ZLandroid/text/Layout$TabStops;IIZ)V+]Landroid/text/SpanSet;Landroid/text/SpanSet;]Landroid/text/PrecomputedText;Landroid/text/PrecomputedText;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/text/PrecomputedText$Params;Landroid/text/PrecomputedText$Params;
@@ -14890,7 +14899,7 @@
 HSPLandroid/text/TextUtils$SimpleStringSplitter;->next()Ljava/lang/String;
 HSPLandroid/text/TextUtils$SimpleStringSplitter;->setString(Ljava/lang/String;)V
 HSPLandroid/text/TextUtils$StringWithRemovedChars;->toString()Ljava/lang/String;
-HSPLandroid/text/TextUtils;->concat([Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
+HSPLandroid/text/TextUtils;->concat([Ljava/lang/CharSequence;)Ljava/lang/CharSequence;+]Landroid/text/SpannableStringBuilder;Landroid/text/SpannableStringBuilder;
 HSPLandroid/text/TextUtils;->copySpansFrom(Landroid/text/Spanned;IILjava/lang/Class;Landroid/text/Spannable;I)V
 HSPLandroid/text/TextUtils;->couldAffectRtl(C)Z
 HSPLandroid/text/TextUtils;->doesNotNeedBidi([CII)Z
@@ -14900,19 +14909,19 @@
 HSPLandroid/text/TextUtils;->emptyIfNull(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/text/TextUtils;->equals(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Z+]Ljava/lang/Object;Ljava/lang/String;]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/text/TextUtils;->expandTemplate(Ljava/lang/CharSequence;[Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
-HSPLandroid/text/TextUtils;->formatSimple(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Long;Ljava/lang/Long;
+HSPLandroid/text/TextUtils;->formatSimple(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/lang/Long;Ljava/lang/Long;
 HSPLandroid/text/TextUtils;->getCapsMode(Ljava/lang/CharSequence;II)I
-HSPLandroid/text/TextUtils;->getChars(Ljava/lang/CharSequence;II[CI)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Object;Ljava/lang/String;,Ljava/lang/StringBuilder;,Landroid/text/Layout$Ellipsizer;,Landroid/text/SpannableString;]Landroid/text/GetChars;Landroid/text/Layout$Ellipsizer;,Landroid/text/SpannableString;
+HSPLandroid/text/TextUtils;->getChars(Ljava/lang/CharSequence;II[CI)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/Object;missing_types]Landroid/text/GetChars;missing_types]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/text/TextUtils;->getEllipsisString(Landroid/text/TextUtils$TruncateAt;)Ljava/lang/String;
 HSPLandroid/text/TextUtils;->getLayoutDirectionFromLocale(Ljava/util/Locale;)I
 HSPLandroid/text/TextUtils;->getTrimmedLength(Ljava/lang/CharSequence;)I
 HSPLandroid/text/TextUtils;->indexOf(Ljava/lang/CharSequence;C)I
-HSPLandroid/text/TextUtils;->indexOf(Ljava/lang/CharSequence;CI)I
-HSPLandroid/text/TextUtils;->indexOf(Ljava/lang/CharSequence;CII)I+]Ljava/lang/Object;Ljava/lang/String;
+HSPLandroid/text/TextUtils;->indexOf(Ljava/lang/CharSequence;CI)I+]Ljava/lang/Object;missing_types]Ljava/lang/CharSequence;missing_types
+HSPLandroid/text/TextUtils;->indexOf(Ljava/lang/CharSequence;CII)I+]Ljava/lang/Object;megamorphic_types
 HSPLandroid/text/TextUtils;->indexOf(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)I+]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/text/TextUtils;->indexOf(Ljava/lang/CharSequence;Ljava/lang/CharSequence;II)I+]Ljava/lang/CharSequence;Ljava/lang/String;
-HSPLandroid/text/TextUtils;->isDigitsOnly(Ljava/lang/CharSequence;)Z
-HSPLandroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z+]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLandroid/text/TextUtils;->isDigitsOnly(Ljava/lang/CharSequence;)Z+]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLandroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z+]Ljava/lang/CharSequence;missing_types
 HSPLandroid/text/TextUtils;->isGraphic(Ljava/lang/CharSequence;)Z
 HSPLandroid/text/TextUtils;->join(Ljava/lang/CharSequence;Ljava/lang/Iterable;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Iterable;megamorphic_types]Ljava/util/Iterator;megamorphic_types
 HSPLandroid/text/TextUtils;->join(Ljava/lang/CharSequence;[Ljava/lang/Object;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
@@ -14926,18 +14935,18 @@
 HSPLandroid/text/TextUtils;->removeEmptySpans([Ljava/lang/Object;Landroid/text/Spanned;Ljava/lang/Class;)[Ljava/lang/Object;
 HSPLandroid/text/TextUtils;->safeIntern(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/text/TextUtils;->split(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
-HSPLandroid/text/TextUtils;->stringOrSpannedString(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
-HSPLandroid/text/TextUtils;->substring(Ljava/lang/CharSequence;II)Ljava/lang/String;
+HSPLandroid/text/TextUtils;->stringOrSpannedString(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;+]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLandroid/text/TextUtils;->substring(Ljava/lang/CharSequence;II)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/text/TextUtils;->toUpperCase(Ljava/util/Locale;Ljava/lang/CharSequence;Z)Ljava/lang/CharSequence;+]Landroid/icu/text/CaseMap$Upper;Landroid/icu/text/CaseMap$Upper;]Landroid/icu/text/Edits;Landroid/icu/text/Edits;
 HSPLandroid/text/TextUtils;->trimNoCopySpans(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
 HSPLandroid/text/TextUtils;->trimToParcelableSize(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
 HSPLandroid/text/TextUtils;->trimToSize(Ljava/lang/CharSequence;I)Ljava/lang/CharSequence;
 HSPLandroid/text/TextUtils;->unpackRangeEndFromLong(J)I
 HSPLandroid/text/TextUtils;->unpackRangeStartFromLong(J)I
-HSPLandroid/text/TextUtils;->writeToParcel(Ljava/lang/CharSequence;Landroid/os/Parcel;I)V
+HSPLandroid/text/TextUtils;->writeToParcel(Ljava/lang/CharSequence;Landroid/os/Parcel;I)V+]Landroid/text/style/CharacterStyle;Landroid/text/style/TextAppearanceSpan;,Landroid/text/style/StyleSpan;,Landroid/text/style/LocaleSpan;]Landroid/text/ParcelableSpan;Landroid/text/style/TextAppearanceSpan;,Landroid/text/style/StyleSpan;,Landroid/text/style/LocaleSpan;]Landroid/text/Spanned;missing_types]Ljava/lang/CharSequence;missing_types]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/text/format/DateFormat;->format(Ljava/lang/CharSequence;J)Ljava/lang/CharSequence;
-HSPLandroid/text/format/DateFormat;->format(Ljava/lang/CharSequence;Ljava/util/Calendar;)Ljava/lang/CharSequence;
-HSPLandroid/text/format/DateFormat;->format(Ljava/lang/CharSequence;Ljava/util/Date;)Ljava/lang/CharSequence;
+HSPLandroid/text/format/DateFormat;->format(Ljava/lang/CharSequence;Ljava/util/Calendar;)Ljava/lang/CharSequence;+]Landroid/icu/text/DateFormatSymbols;Landroid/icu/text/DateFormatSymbols;]Ljava/util/Calendar;Ljava/util/GregorianCalendar;]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/text/SpannableStringBuilder;Landroid/text/SpannableStringBuilder;
+HSPLandroid/text/format/DateFormat;->format(Ljava/lang/CharSequence;Ljava/util/Date;)Ljava/lang/CharSequence;+]Ljava/util/Calendar;Ljava/util/GregorianCalendar;
 HSPLandroid/text/format/DateFormat;->getBestDateTimePattern(Ljava/util/Locale;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/text/format/DateFormat;->getIcuDateFormatSymbols(Ljava/util/Locale;)Landroid/icu/text/DateFormatSymbols;
 HSPLandroid/text/format/DateFormat;->getMonthString(Landroid/icu/text/DateFormatSymbols;III)Ljava/lang/String;
@@ -14946,16 +14955,16 @@
 HSPLandroid/text/format/DateFormat;->getYearString(II)Ljava/lang/String;
 HSPLandroid/text/format/DateFormat;->hasDesignator(Ljava/lang/CharSequence;C)Z
 HSPLandroid/text/format/DateFormat;->is24HourFormat(Landroid/content/Context;)Z
-HSPLandroid/text/format/DateFormat;->is24HourFormat(Landroid/content/Context;I)Z
-HSPLandroid/text/format/DateFormat;->is24HourLocale(Ljava/util/Locale;)Z
-HSPLandroid/text/format/DateFormat;->zeroPad(II)Ljava/lang/String;
+HSPLandroid/text/format/DateFormat;->is24HourFormat(Landroid/content/Context;I)Z+]Landroid/content/res/Resources;Landroid/content/res/Resources;
+HSPLandroid/text/format/DateFormat;->is24HourLocale(Ljava/util/Locale;)Z+]Ljava/util/Locale;Ljava/util/Locale;
+HSPLandroid/text/format/DateFormat;->zeroPad(II)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/text/format/DateIntervalFormat;-><clinit>()V
 HSPLandroid/text/format/DateIntervalFormat;->formatDateRange(JJILjava/lang/String;)Ljava/lang/String;
-HSPLandroid/text/format/DateIntervalFormat;->formatDateRange(Landroid/icu/util/ULocale;Landroid/icu/util/TimeZone;JJI)Ljava/lang/String;
-HSPLandroid/text/format/DateIntervalFormat;->getFormatter(Ljava/lang/String;Landroid/icu/util/ULocale;Landroid/icu/util/TimeZone;)Landroid/icu/text/DateIntervalFormat;
+HSPLandroid/text/format/DateIntervalFormat;->formatDateRange(Landroid/icu/util/ULocale;Landroid/icu/util/TimeZone;JJI)Ljava/lang/String;+]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;]Landroid/icu/text/DateIntervalFormat;Landroid/icu/text/DateIntervalFormat;
+HSPLandroid/text/format/DateIntervalFormat;->getFormatter(Ljava/lang/String;Landroid/icu/util/ULocale;Landroid/icu/util/TimeZone;)Landroid/icu/text/DateIntervalFormat;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/LruCache;Landroid/util/LruCache;
 HSPLandroid/text/format/DateIntervalFormat;->isExactlyMidnight(Landroid/icu/util/Calendar;)Z
-HSPLandroid/text/format/DateUtils;->formatDateRange(Landroid/content/Context;JJI)Ljava/lang/String;
-HSPLandroid/text/format/DateUtils;->formatDateRange(Landroid/content/Context;Ljava/util/Formatter;JJILjava/lang/String;)Ljava/util/Formatter;
+HSPLandroid/text/format/DateUtils;->formatDateRange(Landroid/content/Context;JJI)Ljava/lang/String;+]Ljava/util/Formatter;Ljava/util/Formatter;
+HSPLandroid/text/format/DateUtils;->formatDateRange(Landroid/content/Context;Ljava/util/Formatter;JJILjava/lang/String;)Ljava/util/Formatter;+]Ljava/util/Formatter;Ljava/util/Formatter;]Ljava/lang/Appendable;Ljava/lang/StringBuilder;
 HSPLandroid/text/format/DateUtils;->formatDateTime(Landroid/content/Context;JI)Ljava/lang/String;
 HSPLandroid/text/format/DateUtils;->formatElapsedTime(J)Ljava/lang/String;
 HSPLandroid/text/format/DateUtils;->formatElapsedTime(Ljava/lang/StringBuilder;J)Ljava/lang/String;
@@ -14964,13 +14973,13 @@
 HSPLandroid/text/format/DateUtils;->initFormatStringsLocked()V
 HSPLandroid/text/format/DateUtils;->isSameDate(JJ)Z
 HSPLandroid/text/format/DateUtils;->isToday(J)Z
-HSPLandroid/text/format/DateUtilsBridge;->createIcuCalendar(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;J)Landroid/icu/util/Calendar;
-HSPLandroid/text/format/DateUtilsBridge;->fallInSameMonth(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;)Z
+HSPLandroid/text/format/DateUtilsBridge;->createIcuCalendar(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;J)Landroid/icu/util/Calendar;+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;
+HSPLandroid/text/format/DateUtilsBridge;->fallInSameMonth(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;)Z+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;
 HSPLandroid/text/format/DateUtilsBridge;->fallInSameYear(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;)Z
-HSPLandroid/text/format/DateUtilsBridge;->fallOnDifferentDates(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;)Z
-HSPLandroid/text/format/DateUtilsBridge;->icuTimeZone(Ljava/util/TimeZone;)Landroid/icu/util/TimeZone;
+HSPLandroid/text/format/DateUtilsBridge;->fallOnDifferentDates(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;)Z+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;
+HSPLandroid/text/format/DateUtilsBridge;->icuTimeZone(Ljava/util/TimeZone;)Landroid/icu/util/TimeZone;+]Landroid/icu/util/TimeZone;Landroid/icu/impl/OlsonTimeZone;]Ljava/util/TimeZone;Llibcore/util/ZoneInfo;
 HSPLandroid/text/format/DateUtilsBridge;->isThisYear(Landroid/icu/util/Calendar;)Z
-HSPLandroid/text/format/DateUtilsBridge;->toSkeleton(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;I)Ljava/lang/String;
+HSPLandroid/text/format/DateUtilsBridge;->toSkeleton(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/text/format/Formatter;->formatBytes(Landroid/content/res/Resources;JI)Landroid/text/format/Formatter$BytesResult;
 HSPLandroid/text/format/Formatter;->formatFileSize(Landroid/content/Context;J)Ljava/lang/String;
 HSPLandroid/text/format/Formatter;->formatFileSize(Landroid/content/Context;JI)Ljava/lang/String;
@@ -15080,7 +15089,7 @@
 HSPLandroid/text/style/StyleSpan;->writeToParcelInternal(Landroid/os/Parcel;I)V
 HSPLandroid/text/style/TextAppearanceSpan;-><init>(Landroid/content/Context;I)V
 HSPLandroid/text/style/TextAppearanceSpan;-><init>(Landroid/content/Context;II)V
-HSPLandroid/text/style/TextAppearanceSpan;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/text/style/TextAppearanceSpan;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/content/res/ColorStateList$1;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/text/style/TextAppearanceSpan;-><init>(Ljava/lang/String;IILandroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;)V
 HSPLandroid/text/style/TextAppearanceSpan;->getFamily()Ljava/lang/String;
 HSPLandroid/text/style/TextAppearanceSpan;->getLinkTextColor()Landroid/content/res/ColorStateList;
@@ -15089,7 +15098,7 @@
 HSPLandroid/text/style/TextAppearanceSpan;->getTextStyle()I
 HSPLandroid/text/style/TextAppearanceSpan;->updateDrawState(Landroid/text/TextPaint;)V
 HSPLandroid/text/style/TextAppearanceSpan;->updateMeasureState(Landroid/text/TextPaint;)V
-HSPLandroid/text/style/TextAppearanceSpan;->writeToParcelInternal(Landroid/os/Parcel;I)V
+HSPLandroid/text/style/TextAppearanceSpan;->writeToParcelInternal(Landroid/os/Parcel;I)V+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/text/style/TtsSpan$Builder;->build()Landroid/text/style/TtsSpan;
 HSPLandroid/text/style/TtsSpan$Builder;->setStringArgument(Ljava/lang/String;Ljava/lang/String;)Landroid/text/style/TtsSpan$Builder;
 HSPLandroid/text/style/TtsSpan$SemioticClassBuilder;-><init>(Ljava/lang/String;)V
@@ -15102,7 +15111,7 @@
 HSPLandroid/text/style/UnderlineSpan;->updateDrawState(Landroid/text/TextPaint;)V
 HSPLandroid/text/style/UnderlineSpan;->writeToParcelInternal(Landroid/os/Parcel;I)V
 HSPLandroid/text/util/Linkify$4;-><init>()V
-HSPLandroid/text/util/Linkify;->addLinks(Landroid/text/Spannable;ILandroid/content/Context;Ljava/util/function/Function;)Z
+HSPLandroid/text/util/Linkify;->addLinks(Landroid/text/Spannable;ILandroid/content/Context;Ljava/util/function/Function;)Z+]Ljava/lang/Object;Landroid/text/SpannableStringBuilder;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/text/Spannable;Landroid/text/SpannableStringBuilder;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLandroid/text/util/Linkify;->containsUnsupportedCharacters(Ljava/lang/String;)Z
 HSPLandroid/text/util/Linkify;->gatherLinks(Ljava/util/ArrayList;Landroid/text/Spannable;Ljava/util/regex/Pattern;[Ljava/lang/String;Landroid/text/util/Linkify$MatchFilter;Landroid/text/util/Linkify$TransformFilter;)V
 HSPLandroid/text/util/Linkify;->pruneOverlaps(Ljava/util/ArrayList;)V
@@ -15116,7 +15125,7 @@
 HSPLandroid/transition/Fade$FadeAnimatorListener;->onAnimationStart(Landroid/animation/Animator;)V
 HSPLandroid/transition/Fade;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/transition/Fade;->captureStartValues(Landroid/transition/TransitionValues;)V
-HSPLandroid/transition/Fade;->createAnimation(Landroid/view/View;FF)Landroid/animation/Animator;
+HSPLandroid/transition/Fade;->createAnimation(Landroid/view/View;FF)Landroid/animation/Animator;+]Landroid/view/View;missing_types]Landroid/transition/Fade;Landroid/transition/Fade;]Landroid/animation/ObjectAnimator;Landroid/animation/ObjectAnimator;
 HSPLandroid/transition/Fade;->onAppear(Landroid/view/ViewGroup;Landroid/view/View;Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Landroid/animation/Animator;
 HSPLandroid/transition/Fade;->onDisappear(Landroid/view/ViewGroup;Landroid/view/View;Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Landroid/animation/Animator;
 HSPLandroid/transition/Scene;->enter()V
@@ -15124,24 +15133,24 @@
 HSPLandroid/transition/Transition$2;->onAnimationStart(Landroid/animation/Animator;)V
 HSPLandroid/transition/Transition$3;->onAnimationEnd(Landroid/animation/Animator;)V
 HSPLandroid/transition/Transition;-><init>()V
-HSPLandroid/transition/Transition;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/transition/Transition;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V+]Landroid/transition/Transition;Landroid/transition/TransitionSet;,Landroid/transition/ChangeTransform;,Landroid/transition/ChangeBounds;,Lcom/android/internal/transition/EpicenterTranslateClipReveal;,Landroid/transition/Fade;]Ljava/lang/Object;megamorphic_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/content/Context;missing_types
 HSPLandroid/transition/Transition;->addListener(Landroid/transition/Transition$TransitionListener;)Landroid/transition/Transition;
 HSPLandroid/transition/Transition;->addTarget(Landroid/view/View;)Landroid/transition/Transition;
 HSPLandroid/transition/Transition;->addUnmatched(Landroid/util/ArrayMap;Landroid/util/ArrayMap;)V
-HSPLandroid/transition/Transition;->addViewValues(Landroid/transition/TransitionValuesMaps;Landroid/view/View;Landroid/transition/TransitionValues;)V
-HSPLandroid/transition/Transition;->animate(Landroid/animation/Animator;)V
-HSPLandroid/transition/Transition;->captureHierarchy(Landroid/view/View;Z)V
+HSPLandroid/transition/Transition;->addViewValues(Landroid/transition/TransitionValuesMaps;Landroid/view/View;Landroid/transition/TransitionValues;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/view/View;missing_types]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLandroid/transition/Transition;->animate(Landroid/animation/Animator;)V+]Landroid/transition/Transition;Landroid/transition/Fade;,Landroid/transition/ChangeBounds;]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;,Landroid/animation/AnimatorSet;
+HSPLandroid/transition/Transition;->captureHierarchy(Landroid/view/View;Z)V+]Landroid/transition/Transition;Landroid/transition/TransitionSet;]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/transition/Transition;->capturePropagationValues(Landroid/transition/TransitionValues;)V
 HSPLandroid/transition/Transition;->captureValues(Landroid/view/ViewGroup;Z)V
 HSPLandroid/transition/Transition;->clearValues(Z)V
 HSPLandroid/transition/Transition;->clone()Landroid/transition/Transition;
-HSPLandroid/transition/Transition;->createAnimators(Landroid/view/ViewGroup;Landroid/transition/TransitionValuesMaps;Landroid/transition/TransitionValuesMaps;Ljava/util/ArrayList;Ljava/util/ArrayList;)V
-HSPLandroid/transition/Transition;->end()V
+HSPLandroid/transition/Transition;->createAnimators(Landroid/view/ViewGroup;Landroid/transition/TransitionValuesMaps;Landroid/transition/TransitionValuesMaps;Ljava/util/ArrayList;Ljava/util/ArrayList;)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Landroid/transition/Transition;Landroid/transition/Fade;,Landroid/transition/ChangeBounds;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/view/ViewGroup;missing_types]Ljava/util/Map;Landroid/util/ArrayMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/transition/Transition;->end()V+]Landroid/transition/Transition$TransitionListener;megamorphic_types]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/transition/Transition;->getDuration()J
 HSPLandroid/transition/Transition;->getInterpolator()Landroid/animation/TimeInterpolator;
 HSPLandroid/transition/Transition;->getName()Ljava/lang/String;
 HSPLandroid/transition/Transition;->getStartDelay()J
-HSPLandroid/transition/Transition;->isValidTarget(Landroid/view/View;)Z
+HSPLandroid/transition/Transition;->isValidTarget(Landroid/view/View;)Z+]Landroid/view/View;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/transition/Transition;->matchIds(Landroid/util/ArrayMap;Landroid/util/ArrayMap;Landroid/util/SparseArray;Landroid/util/SparseArray;)V
 HSPLandroid/transition/Transition;->matchInstances(Landroid/util/ArrayMap;Landroid/util/ArrayMap;)V
 HSPLandroid/transition/Transition;->matchItemIds(Landroid/util/ArrayMap;Landroid/util/ArrayMap;Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;)V
@@ -15155,7 +15164,7 @@
 HSPLandroid/transition/Transition;->start()V
 HSPLandroid/transition/TransitionInflater;-><init>(Landroid/content/Context;)V
 HSPLandroid/transition/TransitionInflater;->createCustom(Landroid/util/AttributeSet;Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object;
-HSPLandroid/transition/TransitionInflater;->createTransitionFromXml(Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/transition/Transition;)Landroid/transition/Transition;
+HSPLandroid/transition/TransitionInflater;->createTransitionFromXml(Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/transition/Transition;)Landroid/transition/Transition;+]Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/XmlBlock$Parser;]Landroid/transition/TransitionSet;Landroid/transition/TransitionSet;
 HSPLandroid/transition/TransitionInflater;->from(Landroid/content/Context;)Landroid/transition/TransitionInflater;
 HSPLandroid/transition/TransitionInflater;->inflateTransition(I)Landroid/transition/Transition;
 HSPLandroid/transition/TransitionListenerAdapter;-><init>()V
@@ -15175,8 +15184,8 @@
 HSPLandroid/transition/TransitionSet;->addTarget(Landroid/view/View;)Landroid/transition/TransitionSet;
 HSPLandroid/transition/TransitionSet;->addTransition(Landroid/transition/Transition;)Landroid/transition/TransitionSet;
 HSPLandroid/transition/TransitionSet;->addTransitionInternal(Landroid/transition/Transition;)V
-HSPLandroid/transition/TransitionSet;->captureEndValues(Landroid/transition/TransitionValues;)V
-HSPLandroid/transition/TransitionSet;->capturePropagationValues(Landroid/transition/TransitionValues;)V
+HSPLandroid/transition/TransitionSet;->captureEndValues(Landroid/transition/TransitionValues;)V+]Landroid/transition/Transition;Landroid/transition/Fade;,Landroid/transition/ChangeBounds;]Landroid/transition/TransitionSet;Landroid/transition/TransitionSet;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HSPLandroid/transition/TransitionSet;->capturePropagationValues(Landroid/transition/TransitionValues;)V+]Landroid/transition/Transition;Landroid/transition/Fade;,Landroid/transition/ChangeBounds;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/transition/TransitionSet;->captureStartValues(Landroid/transition/TransitionValues;)V
 HSPLandroid/transition/TransitionSet;->clone()Landroid/transition/Transition;
 HSPLandroid/transition/TransitionSet;->clone()Landroid/transition/TransitionSet;
@@ -15194,14 +15203,14 @@
 HSPLandroid/transition/Visibility$DisappearListener;->onTransitionEnd(Landroid/transition/Transition;)V
 HSPLandroid/transition/Visibility;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/transition/Visibility;->captureEndValues(Landroid/transition/TransitionValues;)V
-HSPLandroid/transition/Visibility;->captureValues(Landroid/transition/TransitionValues;)V
-HSPLandroid/transition/Visibility;->createAnimator(Landroid/view/ViewGroup;Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Landroid/animation/Animator;
+HSPLandroid/transition/Visibility;->captureValues(Landroid/transition/TransitionValues;)V+]Landroid/view/View;missing_types]Ljava/util/Map;Landroid/util/ArrayMap;
+HSPLandroid/transition/Visibility;->createAnimator(Landroid/view/ViewGroup;Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Landroid/animation/Animator;+]Landroid/transition/Visibility;Landroid/transition/Fade;
 HSPLandroid/transition/Visibility;->getMode()I
 HSPLandroid/transition/Visibility;->getTransitionProperties()[Ljava/lang/String;
-HSPLandroid/transition/Visibility;->getVisibilityChangeInfo(Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Landroid/transition/Visibility$VisibilityInfo;
+HSPLandroid/transition/Visibility;->getVisibilityChangeInfo(Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Landroid/transition/Visibility$VisibilityInfo;+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/Map;Landroid/util/ArrayMap;
 HSPLandroid/transition/Visibility;->isTransitionRequired(Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Z
 HSPLandroid/transition/Visibility;->onAppear(Landroid/view/ViewGroup;Landroid/transition/TransitionValues;ILandroid/transition/TransitionValues;I)Landroid/animation/Animator;
-HSPLandroid/transition/Visibility;->onDisappear(Landroid/view/ViewGroup;Landroid/transition/TransitionValues;ILandroid/transition/TransitionValues;I)Landroid/animation/Animator;
+HSPLandroid/transition/Visibility;->onDisappear(Landroid/view/ViewGroup;Landroid/transition/TransitionValues;ILandroid/transition/TransitionValues;I)Landroid/animation/Animator;+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;Landroid/widget/FrameLayout;]Landroid/transition/Visibility;Landroid/transition/Fade;]Landroid/view/ViewGroupOverlay;Landroid/view/ViewGroupOverlay;]Ljava/util/Map;Landroid/util/ArrayMap;]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;
 HSPLandroid/transition/Visibility;->setMode(I)V
 HSPLandroid/util/AndroidException;-><init>()V
 HSPLandroid/util/AndroidException;-><init>(Ljava/lang/String;)V
@@ -15216,7 +15225,7 @@
 HSPLandroid/util/ArrayMap;-><init>()V
 HSPLandroid/util/ArrayMap;-><init>(I)V
 HSPLandroid/util/ArrayMap;-><init>(IZ)V
-HSPLandroid/util/ArrayMap;-><init>(Landroid/util/ArrayMap;)V
+HSPLandroid/util/ArrayMap;-><init>(Landroid/util/ArrayMap;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/util/ArrayMap;->allocArrays(I)V
 HSPLandroid/util/ArrayMap;->append(Ljava/lang/Object;Ljava/lang/Object;)V+]Ljava/lang/Object;Ljava/lang/String;
 HSPLandroid/util/ArrayMap;->binarySearchHashes([III)I
@@ -15236,16 +15245,16 @@
 HSPLandroid/util/ArrayMap;->indexOfValue(Ljava/lang/Object;)I
 HSPLandroid/util/ArrayMap;->isEmpty()Z
 HSPLandroid/util/ArrayMap;->keyAt(I)Ljava/lang/Object;
-HSPLandroid/util/ArrayMap;->keySet()Ljava/util/Set;
+HSPLandroid/util/ArrayMap;->keySet()Ljava/util/Set;+]Landroid/util/MapCollections;Landroid/util/ArrayMap$1;
 HSPLandroid/util/ArrayMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Object;megamorphic_types
-HSPLandroid/util/ArrayMap;->putAll(Landroid/util/ArrayMap;)V
+HSPLandroid/util/ArrayMap;->putAll(Landroid/util/ArrayMap;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/util/ArrayMap;->putAll(Ljava/util/Map;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;]Ljava/util/Set;Ljava/util/HashMap$EntrySet;
 HSPLandroid/util/ArrayMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/util/ArrayMap;->removeAt(I)Ljava/lang/Object;
 HSPLandroid/util/ArrayMap;->retainAll(Ljava/util/Collection;)Z
 HSPLandroid/util/ArrayMap;->setValueAt(ILjava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/util/ArrayMap;->size()I
-HSPLandroid/util/ArrayMap;->toString()Ljava/lang/String;
+HSPLandroid/util/ArrayMap;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/util/ArrayMap;->validate()V
 HSPLandroid/util/ArrayMap;->valueAt(I)Ljava/lang/Object;
 HSPLandroid/util/ArrayMap;->values()Ljava/util/Collection;
@@ -15259,11 +15268,11 @@
 HSPLandroid/util/ArraySet;-><init>(Landroid/util/ArraySet;)V
 HSPLandroid/util/ArraySet;-><init>(Ljava/util/Collection;)V
 HSPLandroid/util/ArraySet;-><init>([Ljava/lang/Object;)V
-HSPLandroid/util/ArraySet;->add(Ljava/lang/Object;)Z
+HSPLandroid/util/ArraySet;->add(Ljava/lang/Object;)Z+]Ljava/lang/Object;megamorphic_types
 HSPLandroid/util/ArraySet;->addAll(Landroid/util/ArraySet;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLandroid/util/ArraySet;->addAll(Ljava/util/Collection;)Z
 HSPLandroid/util/ArraySet;->allocArrays(I)V
-HSPLandroid/util/ArraySet;->append(Ljava/lang/Object;)V+]Ljava/lang/Object;Landroid/app/PendingIntent;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLandroid/util/ArraySet;->append(Ljava/lang/Object;)V+]Ljava/lang/Object;Landroid/app/PendingIntent;,Lcom/android/org/conscrypt/OpenSSLRSAPublicKey;,Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/BCDSAPublicKey;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLandroid/util/ArraySet;->binarySearch([II)I
 HSPLandroid/util/ArraySet;->clear()V
 HSPLandroid/util/ArraySet;->contains(Ljava/lang/Object;)Z
@@ -15273,7 +15282,7 @@
 HSPLandroid/util/ArraySet;->getCollection()Landroid/util/MapCollections;
 HSPLandroid/util/ArraySet;->hashCode()I
 HSPLandroid/util/ArraySet;->indexOf(Ljava/lang/Object;)I
-HSPLandroid/util/ArraySet;->indexOf(Ljava/lang/Object;I)I
+HSPLandroid/util/ArraySet;->indexOf(Ljava/lang/Object;I)I+]Ljava/lang/Object;megamorphic_types
 HSPLandroid/util/ArraySet;->indexOfNull()I
 HSPLandroid/util/ArraySet;->isEmpty()Z
 HSPLandroid/util/ArraySet;->iterator()Ljava/util/Iterator;
@@ -15285,7 +15294,7 @@
 HSPLandroid/util/ArraySet;->toArray()[Ljava/lang/Object;
 HSPLandroid/util/ArraySet;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
 HSPLandroid/util/ArraySet;->toString()Ljava/lang/String;
-HSPLandroid/util/ArraySet;->valueAt(I)Ljava/lang/Object;
+HSPLandroid/util/ArraySet;->valueAt(I)Ljava/lang/Object;+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLandroid/util/ArraySet;->valueAtUnchecked(I)Ljava/lang/Object;
 HSPLandroid/util/AtomicFile;-><init>(Ljava/io/File;)V
 HSPLandroid/util/AtomicFile;-><init>(Ljava/io/File;Landroid/util/SystemConfigFileCommitEventLogger;)V
@@ -15300,11 +15309,11 @@
 HSPLandroid/util/Base64$Decoder;->process([BIIZ)Z
 HSPLandroid/util/Base64$Encoder;-><init>(I[B)V
 HSPLandroid/util/Base64$Encoder;->process([BIIZ)Z
-HSPLandroid/util/Base64;->decode(Ljava/lang/String;I)[B
+HSPLandroid/util/Base64;->decode(Ljava/lang/String;I)[B+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/util/Base64;->decode([BI)[B
-HSPLandroid/util/Base64;->decode([BIII)[B
+HSPLandroid/util/Base64;->decode([BIII)[B+]Landroid/util/Base64$Decoder;Landroid/util/Base64$Decoder;
 HSPLandroid/util/Base64;->encode([BI)[B
-HSPLandroid/util/Base64;->encode([BIII)[B
+HSPLandroid/util/Base64;->encode([BIII)[B+]Landroid/util/Base64$Encoder;Landroid/util/Base64$Encoder;
 HSPLandroid/util/Base64;->encodeToString([BI)Ljava/lang/String;
 HSPLandroid/util/Base64;->encodeToString([BIII)Ljava/lang/String;
 HSPLandroid/util/CloseGuard;-><init>()V
@@ -15318,7 +15327,7 @@
 HSPLandroid/util/DisplayMetrics;-><init>()V
 HSPLandroid/util/DisplayMetrics;->setTo(Landroid/util/DisplayMetrics;)V
 HSPLandroid/util/DisplayMetrics;->setToDefaults()V
-HSPLandroid/util/EventLog$Event;-><init>([B)V
+HSPLandroid/util/EventLog$Event;-><init>([B)V+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLandroid/util/EventLog$Event;->decodeObject()Ljava/lang/Object;+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLandroid/util/EventLog$Event;->getData()Ljava/lang/Object;+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLandroid/util/EventLog$Event;->getHeaderSize()I+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
@@ -15415,7 +15424,7 @@
 HSPLandroid/util/LocalLog;-><init>(I)V
 HSPLandroid/util/LocalLog;-><init>(IZ)V
 HSPLandroid/util/LocalLog;->append(Ljava/lang/String;)V
-HSPLandroid/util/LocalLog;->log(Ljava/lang/String;)V
+HSPLandroid/util/LocalLog;->log(Ljava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/util/Log$1;->onTerribleFailure(Ljava/lang/String;Landroid/util/Log$TerribleFailure;Z)V
 HSPLandroid/util/Log$ImmediateLogWriter;-><init>(IILjava/lang/String;)V
 HSPLandroid/util/Log$ImmediateLogWriter;->flush()V
@@ -15430,7 +15439,7 @@
 HSPLandroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
 HSPLandroid/util/Log;->logToRadioBuffer(ILjava/lang/String;Ljava/lang/String;)I
 HSPLandroid/util/Log;->println(ILjava/lang/String;Ljava/lang/String;)I
-HSPLandroid/util/Log;->printlns(IILjava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
+HSPLandroid/util/Log;->printlns(IILjava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I+]Landroid/util/Log$ImmediateLogWriter;Landroid/util/Log$ImmediateLogWriter;]Lcom/android/internal/util/LineBreakBufferedWriter;Lcom/android/internal/util/LineBreakBufferedWriter;]Ljava/lang/Throwable;missing_types
 HSPLandroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
 HSPLandroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
@@ -15446,11 +15455,11 @@
 HSPLandroid/util/LongArray;->size()I
 HSPLandroid/util/LongSparseArray;-><init>()V
 HSPLandroid/util/LongSparseArray;-><init>(I)V
-HSPLandroid/util/LongSparseArray;->append(JLjava/lang/Object;)V
+HSPLandroid/util/LongSparseArray;->append(JLjava/lang/Object;)V+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
 HSPLandroid/util/LongSparseArray;->clear()V
 HSPLandroid/util/LongSparseArray;->delete(J)V
 HSPLandroid/util/LongSparseArray;->gc()V
-HSPLandroid/util/LongSparseArray;->get(J)Ljava/lang/Object;
+HSPLandroid/util/LongSparseArray;->get(J)Ljava/lang/Object;+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
 HSPLandroid/util/LongSparseArray;->get(JLjava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/util/LongSparseArray;->indexOfKey(J)I
 HSPLandroid/util/LongSparseArray;->keyAt(I)J
@@ -15477,17 +15486,17 @@
 HSPLandroid/util/LruCache;->hitCount()I
 HSPLandroid/util/LruCache;->maxSize()I
 HSPLandroid/util/LruCache;->missCount()I
-HSPLandroid/util/LruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/util/LruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/LinkedHashMap;Ljava/util/LinkedHashMap;]Landroid/util/LruCache;missing_types
 HSPLandroid/util/LruCache;->remove(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/util/LruCache;->resize(I)V
 HSPLandroid/util/LruCache;->safeSizeOf(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLandroid/util/LruCache;->size()I
 HSPLandroid/util/LruCache;->sizeOf(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLandroid/util/LruCache;->snapshot()Ljava/util/Map;
-HSPLandroid/util/LruCache;->trimToSize(I)V
-HSPLandroid/util/MapCollections$ArrayIterator;-><init>(Landroid/util/MapCollections;I)V
+HSPLandroid/util/LruCache;->trimToSize(I)V+]Ljava/util/Map$Entry;Ljava/util/LinkedHashMap$LinkedHashMapEntry;,Ljava/util/HashMap$TreeNode;]Ljava/util/LinkedHashMap;Ljava/util/LinkedHashMap;]Landroid/util/LruCache;missing_types
+HSPLandroid/util/MapCollections$ArrayIterator;-><init>(Landroid/util/MapCollections;I)V+]Landroid/util/MapCollections;Landroid/util/ArraySet$1;,Landroid/util/ArrayMap$1;
 HSPLandroid/util/MapCollections$ArrayIterator;->hasNext()Z
-HSPLandroid/util/MapCollections$ArrayIterator;->next()Ljava/lang/Object;
+HSPLandroid/util/MapCollections$ArrayIterator;->next()Ljava/lang/Object;+]Landroid/util/MapCollections$ArrayIterator;Landroid/util/MapCollections$ArrayIterator;]Landroid/util/MapCollections;Landroid/util/ArraySet$1;,Landroid/util/ArrayMap$1;
 HSPLandroid/util/MapCollections$ArrayIterator;->remove()V
 HSPLandroid/util/MapCollections$EntrySet;-><init>(Landroid/util/MapCollections;)V
 HSPLandroid/util/MapCollections$EntrySet;->iterator()Ljava/util/Iterator;
@@ -15498,13 +15507,13 @@
 HSPLandroid/util/MapCollections$KeySet;->iterator()Ljava/util/Iterator;
 HSPLandroid/util/MapCollections$KeySet;->size()I
 HSPLandroid/util/MapCollections$KeySet;->toArray()[Ljava/lang/Object;
-HSPLandroid/util/MapCollections$KeySet;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
-HSPLandroid/util/MapCollections$MapIterator;-><init>(Landroid/util/MapCollections;)V
-HSPLandroid/util/MapCollections$MapIterator;->getKey()Ljava/lang/Object;
-HSPLandroid/util/MapCollections$MapIterator;->getValue()Ljava/lang/Object;
+HSPLandroid/util/MapCollections$KeySet;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;+]Landroid/util/MapCollections;Landroid/util/ArrayMap$1;
+HSPLandroid/util/MapCollections$MapIterator;-><init>(Landroid/util/MapCollections;)V+]Landroid/util/MapCollections;Landroid/util/ArrayMap$1;
+HSPLandroid/util/MapCollections$MapIterator;->getKey()Ljava/lang/Object;+]Landroid/util/MapCollections;Landroid/util/ArrayMap$1;
+HSPLandroid/util/MapCollections$MapIterator;->getValue()Ljava/lang/Object;+]Landroid/util/MapCollections;Landroid/util/ArrayMap$1;
 HSPLandroid/util/MapCollections$MapIterator;->hasNext()Z
-HSPLandroid/util/MapCollections$MapIterator;->next()Ljava/lang/Object;
-HSPLandroid/util/MapCollections$MapIterator;->next()Ljava/util/Map$Entry;
+HSPLandroid/util/MapCollections$MapIterator;->next()Ljava/lang/Object;+]Landroid/util/MapCollections$MapIterator;Landroid/util/MapCollections$MapIterator;
+HSPLandroid/util/MapCollections$MapIterator;->next()Ljava/util/Map$Entry;+]Landroid/util/MapCollections$MapIterator;Landroid/util/MapCollections$MapIterator;
 HSPLandroid/util/MapCollections$ValuesCollection;->iterator()Ljava/util/Iterator;
 HSPLandroid/util/MapCollections$ValuesCollection;->size()I
 HSPLandroid/util/MapCollections$ValuesCollection;->toArray()[Ljava/lang/Object;
@@ -15513,8 +15522,8 @@
 HSPLandroid/util/MapCollections;->getKeySet()Ljava/util/Set;
 HSPLandroid/util/MapCollections;->getValues()Ljava/util/Collection;
 HSPLandroid/util/MapCollections;->retainAllHelper(Ljava/util/Map;Ljava/util/Collection;)Z
-HSPLandroid/util/MapCollections;->toArrayHelper(I)[Ljava/lang/Object;
-HSPLandroid/util/MapCollections;->toArrayHelper([Ljava/lang/Object;I)[Ljava/lang/Object;
+HSPLandroid/util/MapCollections;->toArrayHelper(I)[Ljava/lang/Object;+]Landroid/util/MapCollections;Landroid/util/ArrayMap$1;
+HSPLandroid/util/MapCollections;->toArrayHelper([Ljava/lang/Object;I)[Ljava/lang/Object;+]Ljava/lang/Object;[Ljava/lang/String;]Landroid/util/MapCollections;Landroid/util/ArrayMap$1;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/util/MathUtils;->addOrThrow(II)I
 HSPLandroid/util/MathUtils;->constrain(FFF)F
 HSPLandroid/util/MathUtils;->constrain(III)I
@@ -15526,7 +15535,7 @@
 HSPLandroid/util/MemoryIntArray;-><init>(Landroid/os/Parcel;Landroid/util/MemoryIntArray-IA;)V
 HSPLandroid/util/MemoryIntArray;->close()V
 HSPLandroid/util/MemoryIntArray;->enforceNotClosed()V+]Landroid/util/MemoryIntArray;Landroid/util/MemoryIntArray;
-HSPLandroid/util/MemoryIntArray;->enforceValidIndex(I)V
+HSPLandroid/util/MemoryIntArray;->enforceValidIndex(I)V+]Landroid/util/MemoryIntArray;Landroid/util/MemoryIntArray;
 HSPLandroid/util/MemoryIntArray;->finalize()V
 HSPLandroid/util/MemoryIntArray;->get(I)I
 HSPLandroid/util/MemoryIntArray;->isClosed()Z
@@ -15546,7 +15555,7 @@
 HSPLandroid/util/Pair;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLandroid/util/Pair;->create(Ljava/lang/Object;Ljava/lang/Object;)Landroid/util/Pair;
 HSPLandroid/util/Pair;->equals(Ljava/lang/Object;)Z
-HSPLandroid/util/Pair;->hashCode()I+]Ljava/lang/Object;Ljava/lang/Long;
+HSPLandroid/util/Pair;->hashCode()I+]Ljava/lang/Object;missing_types
 HSPLandroid/util/Pair;->toString()Ljava/lang/String;
 HSPLandroid/util/PathParser$PathData;-><init>(Landroid/util/PathParser$PathData;)V
 HSPLandroid/util/PathParser$PathData;-><init>(Ljava/lang/String;)V
@@ -15586,7 +15595,7 @@
 HSPLandroid/util/Rational;->compareTo(Landroid/util/Rational;)I
 HSPLandroid/util/Rational;->compareTo(Ljava/lang/Object;)I
 HSPLandroid/util/Singleton;-><init>()V
-HSPLandroid/util/Singleton;->get()Ljava/lang/Object;
+HSPLandroid/util/Singleton;->get()Ljava/lang/Object;+]Landroid/util/Singleton;Landroid/app/ActivityTaskManager$2;
 HSPLandroid/util/Size;-><init>(II)V
 HSPLandroid/util/Size;->equals(Ljava/lang/Object;)Z
 HSPLandroid/util/Size;->getHeight()I
@@ -15603,7 +15612,7 @@
 HSPLandroid/util/SparseArray;-><init>(I)V
 HSPLandroid/util/SparseArray;->append(ILjava/lang/Object;)V+]Landroid/util/SparseArray;missing_types
 HSPLandroid/util/SparseArray;->clear()V
-HSPLandroid/util/SparseArray;->clone()Landroid/util/SparseArray;
+HSPLandroid/util/SparseArray;->clone()Landroid/util/SparseArray;+][I[I][Ljava/lang/Object;[Ljava/lang/Object;
 HSPLandroid/util/SparseArray;->contains(I)Z
 HSPLandroid/util/SparseArray;->delete(I)V
 HSPLandroid/util/SparseArray;->gc()V
@@ -15622,7 +15631,7 @@
 HSPLandroid/util/SparseArray;->valueAt(I)Ljava/lang/Object;
 HSPLandroid/util/SparseBooleanArray;-><init>()V
 HSPLandroid/util/SparseBooleanArray;-><init>(I)V
-HSPLandroid/util/SparseBooleanArray;->append(IZ)V
+HSPLandroid/util/SparseBooleanArray;->append(IZ)V+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
 HSPLandroid/util/SparseBooleanArray;->clear()V
 HSPLandroid/util/SparseBooleanArray;->clone()Landroid/util/SparseBooleanArray;
 HSPLandroid/util/SparseBooleanArray;->delete(I)V
@@ -15799,10 +15808,10 @@
 HSPLandroid/view/Choreographer$FrameData;->getFrameTimeNanos()J
 HSPLandroid/view/Choreographer$FrameData;->updateFrameData(J)V+]Landroid/view/Choreographer$FrameTimeline;Landroid/view/Choreographer$FrameTimeline;
 HSPLandroid/view/Choreographer$FrameDisplayEventReceiver;-><init>(Landroid/view/Choreographer;Landroid/os/Looper;I)V
-HSPLandroid/view/Choreographer$FrameDisplayEventReceiver;->onVsync(JJILandroid/view/DisplayEventReceiver$VsyncEventData;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/Message;Landroid/os/Message;]Landroid/view/Choreographer$FrameHandler;Landroid/view/Choreographer$FrameHandler;]Landroid/view/DisplayEventReceiver$VsyncEventData;Landroid/view/DisplayEventReceiver$VsyncEventData;
+HSPLandroid/view/Choreographer$FrameDisplayEventReceiver;->onVsync(JJILandroid/view/DisplayEventReceiver$VsyncEventData;)V+]Landroid/os/Message;Landroid/os/Message;]Landroid/view/Choreographer$FrameHandler;Landroid/view/Choreographer$FrameHandler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/DisplayEventReceiver$VsyncEventData;Landroid/view/DisplayEventReceiver$VsyncEventData;
 HSPLandroid/view/Choreographer$FrameDisplayEventReceiver;->run()V+]Landroid/view/Choreographer;Landroid/view/Choreographer;
 HSPLandroid/view/Choreographer$FrameHandler;-><init>(Landroid/view/Choreographer;Landroid/os/Looper;)V
-HSPLandroid/view/Choreographer$FrameHandler;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/view/Choreographer$FrameHandler;->handleMessage(Landroid/os/Message;)V+]Landroid/view/Choreographer;Landroid/view/Choreographer;
 HSPLandroid/view/Choreographer$FrameTimeline;-><clinit>()V
 HSPLandroid/view/Choreographer$FrameTimeline;-><init>(JJJ)V
 HSPLandroid/view/Choreographer$FrameTimeline;->resetVsyncId()V
@@ -15810,12 +15819,12 @@
 HSPLandroid/view/Choreographer;-><init>(Landroid/os/Looper;I)V
 HSPLandroid/view/Choreographer;->doCallbacks(ILandroid/view/Choreographer$FrameData;J)V+]Landroid/view/Choreographer$CallbackQueue;Landroid/view/Choreographer$CallbackQueue;]Landroid/view/Choreographer$CallbackRecord;Landroid/view/Choreographer$CallbackRecord;]Landroid/view/Choreographer$FrameData;Landroid/view/Choreographer$FrameData;
 HSPLandroid/view/Choreographer;->doFrame(JILandroid/view/DisplayEventReceiver$VsyncEventData;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/Choreographer$FrameData;Landroid/view/Choreographer$FrameData;]Landroid/graphics/FrameInfo;Landroid/graphics/FrameInfo;]Landroid/view/Choreographer;Landroid/view/Choreographer;]Landroid/view/DisplayEventReceiver$VsyncEventData;Landroid/view/DisplayEventReceiver$VsyncEventData;
-HSPLandroid/view/Choreographer;->doScheduleCallback(I)V
+HSPLandroid/view/Choreographer;->doScheduleCallback(I)V+]Landroid/view/Choreographer$CallbackQueue;Landroid/view/Choreographer$CallbackQueue;
 HSPLandroid/view/Choreographer;->doScheduleVsync()V
 HSPLandroid/view/Choreographer;->getFrameIntervalNanos()J
 HSPLandroid/view/Choreographer;->getFrameTime()J
 HSPLandroid/view/Choreographer;->getFrameTimeNanos()J
-HSPLandroid/view/Choreographer;->getInstance()Landroid/view/Choreographer;
+HSPLandroid/view/Choreographer;->getInstance()Landroid/view/Choreographer;+]Ljava/lang/ThreadLocal;Landroid/view/Choreographer$1;
 HSPLandroid/view/Choreographer;->getMainThreadInstance()Landroid/view/Choreographer;
 HSPLandroid/view/Choreographer;->getRefreshRate()F
 HSPLandroid/view/Choreographer;->getSfInstance()Landroid/view/Choreographer;
@@ -15829,7 +15838,7 @@
 HSPLandroid/view/Choreographer;->postFrameCallbackDelayed(Landroid/view/Choreographer$FrameCallback;J)V
 HSPLandroid/view/Choreographer;->recycleCallbackLocked(Landroid/view/Choreographer$CallbackRecord;)V
 HSPLandroid/view/Choreographer;->removeCallbacks(ILjava/lang/Runnable;Ljava/lang/Object;)V
-HSPLandroid/view/Choreographer;->removeCallbacksInternal(ILjava/lang/Object;Ljava/lang/Object;)V
+HSPLandroid/view/Choreographer;->removeCallbacksInternal(ILjava/lang/Object;Ljava/lang/Object;)V+]Landroid/view/Choreographer$CallbackQueue;Landroid/view/Choreographer$CallbackQueue;]Landroid/view/Choreographer$FrameHandler;Landroid/view/Choreographer$FrameHandler;
 HSPLandroid/view/Choreographer;->removeFrameCallback(Landroid/view/Choreographer$FrameCallback;)V
 HSPLandroid/view/Choreographer;->scheduleFrameLocked(J)V+]Landroid/os/Message;Landroid/os/Message;]Landroid/view/Choreographer$FrameHandler;Landroid/view/Choreographer$FrameHandler;
 HSPLandroid/view/Choreographer;->scheduleVsyncLocked()V+]Landroid/view/Choreographer$FrameDisplayEventReceiver;Landroid/view/Choreographer$FrameDisplayEventReceiver;
@@ -15842,8 +15851,8 @@
 HSPLandroid/view/ContextThemeWrapper;->getOverrideConfiguration()Landroid/content/res/Configuration;
 HSPLandroid/view/ContextThemeWrapper;->getResources()Landroid/content/res/Resources;
 HSPLandroid/view/ContextThemeWrapper;->getResourcesInternal()Landroid/content/res/Resources;
-HSPLandroid/view/ContextThemeWrapper;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
-HSPLandroid/view/ContextThemeWrapper;->getTheme()Landroid/content/res/Resources$Theme;
+HSPLandroid/view/ContextThemeWrapper;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;+]Landroid/view/LayoutInflater;Lcom/android/internal/policy/PhoneLayoutInflater;]Landroid/view/ContextThemeWrapper;missing_types]Landroid/content/Context;missing_types
+HSPLandroid/view/ContextThemeWrapper;->getTheme()Landroid/content/res/Resources$Theme;+]Landroid/view/ContextThemeWrapper;Landroid/view/ContextThemeWrapper;
 HSPLandroid/view/ContextThemeWrapper;->initializeTheme()V
 HSPLandroid/view/ContextThemeWrapper;->onApplyThemeResource(Landroid/content/res/Resources$Theme;IZ)V
 HSPLandroid/view/ContextThemeWrapper;->setTheme(I)V
@@ -15871,10 +15880,10 @@
 HSPLandroid/view/Display$Mode;->toString()Ljava/lang/String;
 HSPLandroid/view/Display;-><init>(Landroid/hardware/display/DisplayManagerGlobal;ILandroid/view/DisplayInfo;Landroid/content/res/Resources;)V
 HSPLandroid/view/Display;-><init>(Landroid/hardware/display/DisplayManagerGlobal;ILandroid/view/DisplayInfo;Landroid/view/DisplayAdjustments;)V
-HSPLandroid/view/Display;-><init>(Landroid/hardware/display/DisplayManagerGlobal;ILandroid/view/DisplayInfo;Landroid/view/DisplayAdjustments;Landroid/content/res/Resources;)V
+HSPLandroid/view/Display;-><init>(Landroid/hardware/display/DisplayManagerGlobal;ILandroid/view/DisplayInfo;Landroid/view/DisplayAdjustments;Landroid/content/res/Resources;)V+]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLandroid/view/Display;->getAppVsyncOffsetNanos()J
 HSPLandroid/view/Display;->getCutout()Landroid/view/DisplayCutout;
-HSPLandroid/view/Display;->getDisplayAdjustments()Landroid/view/DisplayAdjustments;
+HSPLandroid/view/Display;->getDisplayAdjustments()Landroid/view/DisplayAdjustments;+]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/view/DisplayAdjustments;Landroid/view/DisplayAdjustments;
 HSPLandroid/view/Display;->getDisplayId()I
 HSPLandroid/view/Display;->getDisplayInfo(Landroid/view/DisplayInfo;)Z
 HSPLandroid/view/Display;->getFlags()I
@@ -15889,7 +15898,7 @@
 HSPLandroid/view/Display;->getRealSize(Landroid/graphics/Point;)V
 HSPLandroid/view/Display;->getRefreshRate()F
 HSPLandroid/view/Display;->getRotation()I
-HSPLandroid/view/Display;->getSize(Landroid/graphics/Point;)V
+HSPLandroid/view/Display;->getSize(Landroid/graphics/Point;)V+]Landroid/view/DisplayInfo;Landroid/view/DisplayInfo;]Landroid/view/Display;Landroid/view/Display;
 HSPLandroid/view/Display;->getState()I
 HSPLandroid/view/Display;->getSupportedColorModes()[I
 HSPLandroid/view/Display;->getSupportedModes()[Landroid/view/Display$Mode;
@@ -15901,7 +15910,7 @@
 HSPLandroid/view/Display;->shouldReportMaxBounds()Z
 HSPLandroid/view/Display;->stateToString(I)Ljava/lang/String;
 HSPLandroid/view/Display;->updateCachedAppSizeIfNeededLocked()V
-HSPLandroid/view/Display;->updateDisplayInfoLocked()V
+HSPLandroid/view/Display;->updateDisplayInfoLocked()V+]Landroid/hardware/display/DisplayManagerGlobal;Landroid/hardware/display/DisplayManagerGlobal;
 HSPLandroid/view/DisplayAddress$Physical$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/DisplayAddress$Physical;
 HSPLandroid/view/DisplayAddress$Physical$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/view/DisplayAddress$Physical;-><init>(J)V
@@ -15910,7 +15919,7 @@
 HSPLandroid/view/DisplayAddress$Physical;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/view/DisplayAddress;-><init>()V
 HSPLandroid/view/DisplayAdjustments;-><init>()V
-HSPLandroid/view/DisplayAdjustments;-><init>(Landroid/content/res/Configuration;)V
+HSPLandroid/view/DisplayAdjustments;-><init>(Landroid/content/res/Configuration;)V+]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
 HSPLandroid/view/DisplayAdjustments;-><init>(Landroid/view/DisplayAdjustments;)V
 HSPLandroid/view/DisplayAdjustments;->equals(Ljava/lang/Object;)Z
 HSPLandroid/view/DisplayAdjustments;->getCompatibilityInfo()Landroid/content/res/CompatibilityInfo;
@@ -15932,7 +15941,7 @@
 HSPLandroid/view/DisplayCutout$ParcelableWrapper;-><init>(Landroid/view/DisplayCutout;)V
 HSPLandroid/view/DisplayCutout$ParcelableWrapper;->equals(Ljava/lang/Object;)Z
 HSPLandroid/view/DisplayCutout$ParcelableWrapper;->get()Landroid/view/DisplayCutout;
-HSPLandroid/view/DisplayCutout$ParcelableWrapper;->readCutoutFromParcel(Landroid/os/Parcel;)Landroid/view/DisplayCutout;
+HSPLandroid/view/DisplayCutout$ParcelableWrapper;->readCutoutFromParcel(Landroid/os/Parcel;)Landroid/view/DisplayCutout;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/DisplayCutout$ParcelableWrapper;->readFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/view/DisplayCutout$ParcelableWrapper;->set(Landroid/view/DisplayCutout$ParcelableWrapper;)V
 HSPLandroid/view/DisplayCutout$ParcelableWrapper;->set(Landroid/view/DisplayCutout;)V
@@ -15941,7 +15950,7 @@
 HSPLandroid/view/DisplayCutout;-><init>(Landroid/graphics/Rect;Landroid/graphics/Insets;[Landroid/graphics/Rect;Landroid/view/DisplayCutout$CutoutPathParserInfo;Z)V
 HSPLandroid/view/DisplayCutout;-><init>(Landroid/graphics/Rect;Landroid/graphics/Insets;[Landroid/graphics/Rect;Landroid/view/DisplayCutout$CutoutPathParserInfo;ZLandroid/view/DisplayCutout-IA;)V
 HSPLandroid/view/DisplayCutout;->atLeastZero(I)I
-HSPLandroid/view/DisplayCutout;->equals(Ljava/lang/Object;)Z
+HSPLandroid/view/DisplayCutout;->equals(Ljava/lang/Object;)Z+]Landroid/view/DisplayCutout$Bounds;Landroid/view/DisplayCutout$Bounds;]Landroid/graphics/Insets;Landroid/graphics/Insets;]Landroid/view/DisplayCutout$CutoutPathParserInfo;Landroid/view/DisplayCutout$CutoutPathParserInfo;]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/view/DisplayCutout;->getBoundingRectsAll()[Landroid/graphics/Rect;
 HSPLandroid/view/DisplayCutout;->getCopyOrRef(Landroid/graphics/Rect;Z)Landroid/graphics/Rect;
 HSPLandroid/view/DisplayCutout;->getSafeInsetBottom()I
@@ -15966,19 +15975,19 @@
 HSPLandroid/view/DisplayInfo;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/view/DisplayInfo;-><init>(Landroid/os/Parcel;Landroid/view/DisplayInfo-IA;)V
 HSPLandroid/view/DisplayInfo;->copyFrom(Landroid/view/DisplayInfo;)V
-HSPLandroid/view/DisplayInfo;->equals(Landroid/view/DisplayInfo;)Z
+HSPLandroid/view/DisplayInfo;->equals(Landroid/view/DisplayInfo;)Z+]Landroid/view/DisplayInfo;Landroid/view/DisplayInfo;
 HSPLandroid/view/DisplayInfo;->findMode(I)Landroid/view/Display$Mode;
 HSPLandroid/view/DisplayInfo;->flagsToString(I)Ljava/lang/String;
 HSPLandroid/view/DisplayInfo;->getAppMetrics(Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;Landroid/content/res/Configuration;)V
 HSPLandroid/view/DisplayInfo;->getAppMetrics(Landroid/util/DisplayMetrics;Landroid/view/DisplayAdjustments;)V
 HSPLandroid/view/DisplayInfo;->getLogicalMetrics(Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;Landroid/content/res/Configuration;)V
 HSPLandroid/view/DisplayInfo;->getMaxBoundsMetrics(Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;Landroid/content/res/Configuration;)V
-HSPLandroid/view/DisplayInfo;->getMetricsWithSize(Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;Landroid/content/res/Configuration;II)V
+HSPLandroid/view/DisplayInfo;->getMetricsWithSize(Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;Landroid/content/res/Configuration;II)V+]Landroid/content/res/CompatibilityInfo;Landroid/content/res/CompatibilityInfo$1;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HSPLandroid/view/DisplayInfo;->getMode()Landroid/view/Display$Mode;
 HSPLandroid/view/DisplayInfo;->getRefreshRate()F
 HSPLandroid/view/DisplayInfo;->hasAccess(I)Z
 HSPLandroid/view/DisplayInfo;->isWideColorGamut()Z
-HSPLandroid/view/DisplayInfo;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/view/DisplayInfo;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/view/Display$Mode$1;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/DisplayInfo;->toString()Ljava/lang/String;
 HSPLandroid/view/DisplayInfo;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/view/FocusFinder$1;->initialValue()Landroid/view/FocusFinder;
@@ -15987,7 +15996,7 @@
 HSPLandroid/view/FocusFinder$FocusSorter$$ExternalSyntheticLambda1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLandroid/view/FocusFinder$FocusSorter;->lambda$new$0$android-view-FocusFinder$FocusSorter(Landroid/view/View;Landroid/view/View;)I+]Ljava/util/HashMap;Ljava/util/HashMap;
 HSPLandroid/view/FocusFinder$FocusSorter;->lambda$new$1$android-view-FocusFinder$FocusSorter(Landroid/view/View;Landroid/view/View;)I+]Ljava/util/HashMap;Ljava/util/HashMap;
-HSPLandroid/view/FocusFinder$FocusSorter;->sort([Landroid/view/View;IILandroid/view/ViewGroup;Z)V
+HSPLandroid/view/FocusFinder$FocusSorter;->sort([Landroid/view/View;IILandroid/view/ViewGroup;Z)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/FocusFinder$UserSpecifiedFocusComparator;-><init>(Landroid/view/FocusFinder$UserSpecifiedFocusComparator$NextFocusGetter;)V
 HSPLandroid/view/FocusFinder;-><init>()V
 HSPLandroid/view/FocusFinder;->findNextFocus(Landroid/view/ViewGroup;Landroid/view/View;I)Landroid/view/View;
@@ -15996,14 +16005,14 @@
 HSPLandroid/view/FocusFinder;->findNextFocusInAbsoluteDirection(Ljava/util/ArrayList;Landroid/view/ViewGroup;Landroid/view/View;Landroid/graphics/Rect;I)Landroid/view/View;
 HSPLandroid/view/FocusFinder;->findNextUserSpecifiedFocus(Landroid/view/ViewGroup;Landroid/view/View;I)Landroid/view/View;
 HSPLandroid/view/FocusFinder;->getEffectiveRoot(Landroid/view/ViewGroup;Landroid/view/View;)Landroid/view/ViewGroup;
-HSPLandroid/view/FocusFinder;->getInstance()Landroid/view/FocusFinder;
+HSPLandroid/view/FocusFinder;->getInstance()Landroid/view/FocusFinder;+]Ljava/lang/ThreadLocal;Landroid/view/FocusFinder$1;
 HSPLandroid/view/FocusFinder;->isBetterCandidate(ILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
 HSPLandroid/view/FocusFinder;->isCandidate(Landroid/graphics/Rect;Landroid/graphics/Rect;I)Z
 HSPLandroid/view/FrameMetrics;-><init>()V
 HSPLandroid/view/FrameMetrics;->getMetric(I)J
 HSPLandroid/view/FrameMetricsObserver;-><init>(Landroid/view/Window;Landroid/os/Handler;Landroid/view/Window$OnFrameMetricsAvailableListener;)V
 HSPLandroid/view/FrameMetricsObserver;->getRendererObserver()Landroid/graphics/HardwareRendererObserver;
-HSPLandroid/view/FrameMetricsObserver;->onFrameMetricsAvailable(I)V
+HSPLandroid/view/FrameMetricsObserver;->onFrameMetricsAvailable(I)V+]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
 HSPLandroid/view/GestureDetector$GestureHandler;-><init>(Landroid/view/GestureDetector;)V
 HSPLandroid/view/GestureDetector$GestureHandler;-><init>(Landroid/view/GestureDetector;Landroid/os/Handler;)V
 HSPLandroid/view/GestureDetector$GestureHandler;->handleMessage(Landroid/os/Message;)V
@@ -16020,9 +16029,9 @@
 HSPLandroid/view/GestureDetector;-><init>(Landroid/content/Context;Landroid/view/GestureDetector$OnGestureListener;Landroid/os/Handler;)V
 HSPLandroid/view/GestureDetector;->cancel()V
 HSPLandroid/view/GestureDetector;->cancelTaps()V
-HSPLandroid/view/GestureDetector;->init(Landroid/content/Context;)V
+HSPLandroid/view/GestureDetector;->init(Landroid/content/Context;)V+]Landroid/view/ViewConfiguration;Landroid/view/ViewConfiguration;
 HSPLandroid/view/GestureDetector;->isConsideredDoubleTap(Landroid/view/MotionEvent;Landroid/view/MotionEvent;Landroid/view/MotionEvent;)Z
-HSPLandroid/view/GestureDetector;->onTouchEvent(Landroid/view/MotionEvent;)Z
+HSPLandroid/view/GestureDetector;->onTouchEvent(Landroid/view/MotionEvent;)Z+]Landroid/view/VelocityTracker;Landroid/view/VelocityTracker;]Landroid/os/Handler;Landroid/view/GestureDetector$GestureHandler;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/GestureDetector;->recordGestureClassification(I)V
 HSPLandroid/view/GestureDetector;->setContextClickListener(Landroid/view/GestureDetector$OnContextClickListener;)V
 HSPLandroid/view/GestureDetector;->setIsLongpressEnabled(Z)V
@@ -16037,7 +16046,7 @@
 HSPLandroid/view/HandlerActionQueue$HandlerAction;-><init>(Ljava/lang/Runnable;J)V
 HSPLandroid/view/HandlerActionQueue$HandlerAction;->matches(Ljava/lang/Runnable;)Z
 HSPLandroid/view/HandlerActionQueue;-><init>()V
-HSPLandroid/view/HandlerActionQueue;->executeActions(Landroid/os/Handler;)V
+HSPLandroid/view/HandlerActionQueue;->executeActions(Landroid/os/Handler;)V+]Landroid/os/Handler;Landroid/view/ViewRootImpl$ViewRootHandler;
 HSPLandroid/view/HandlerActionQueue;->post(Ljava/lang/Runnable;)V
 HSPLandroid/view/HandlerActionQueue;->postDelayed(Ljava/lang/Runnable;J)V
 HSPLandroid/view/HandlerActionQueue;->removeCallbacks(Ljava/lang/Runnable;)V
@@ -16099,8 +16108,8 @@
 HSPLandroid/view/IWindowSessionCallback$Stub;-><init>()V
 HSPLandroid/view/IWindowSessionCallback$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/view/ImeFocusController;-><init>(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ImeFocusController;->checkFocus(ZZ)Z
-HSPLandroid/view/ImeFocusController;->getImmDelegate()Landroid/view/ImeFocusController$InputMethodManagerDelegate;
+HSPLandroid/view/ImeFocusController;->checkFocus(ZZ)Z+]Landroid/view/ImeFocusController$InputMethodManagerDelegate;Landroid/view/inputmethod/InputMethodManager$DelegateImpl;
+HSPLandroid/view/ImeFocusController;->getImmDelegate()Landroid/view/ImeFocusController$InputMethodManagerDelegate;+]Landroid/content/Context;Landroid/view/ContextThemeWrapper;,Lcom/android/internal/policy/DecorContext;]Landroid/view/inputmethod/InputMethodManager;Landroid/view/inputmethod/InputMethodManager;
 HSPLandroid/view/ImeFocusController;->getServedView()Landroid/view/View;
 HSPLandroid/view/ImeFocusController;->hasImeFocus()Z
 HSPLandroid/view/ImeFocusController;->isInLocalFocusMode(Landroid/view/WindowManager$LayoutParams;)Z
@@ -16108,8 +16117,8 @@
 HSPLandroid/view/ImeFocusController;->onPostWindowFocus(Landroid/view/View;ZLandroid/view/WindowManager$LayoutParams;)V
 HSPLandroid/view/ImeFocusController;->onPreWindowFocus(ZLandroid/view/WindowManager$LayoutParams;)V
 HSPLandroid/view/ImeFocusController;->onProcessImeInputStage(Ljava/lang/Object;Landroid/view/InputEvent;Landroid/view/WindowManager$LayoutParams;Landroid/view/inputmethod/InputMethodManager$FinishedInputEventCallback;)I
-HSPLandroid/view/ImeFocusController;->onTraversal(ZLandroid/view/WindowManager$LayoutParams;)V
-HSPLandroid/view/ImeFocusController;->onViewDetachedFromWindow(Landroid/view/View;)V
+HSPLandroid/view/ImeFocusController;->onTraversal(ZLandroid/view/WindowManager$LayoutParams;)V+]Landroid/view/ImeFocusController;Landroid/view/ImeFocusController;
+HSPLandroid/view/ImeFocusController;->onViewDetachedFromWindow(Landroid/view/View;)V+]Landroid/view/ImeFocusController$InputMethodManagerDelegate;Landroid/view/inputmethod/InputMethodManager$DelegateImpl;]Landroid/view/View;missing_types]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
 HSPLandroid/view/ImeFocusController;->onViewFocusChanged(Landroid/view/View;Z)V
 HSPLandroid/view/ImeFocusController;->onWindowDismissed()V
 HSPLandroid/view/ImeFocusController;->setNextServedView(Landroid/view/View;)V
@@ -16147,13 +16156,13 @@
 HSPLandroid/view/InputDevice;->isVirtual()Z
 HSPLandroid/view/InputEvent;-><init>()V
 HSPLandroid/view/InputEvent;->getSequenceNumber()I
-HSPLandroid/view/InputEvent;->isFromSource(I)Z
+HSPLandroid/view/InputEvent;->isFromSource(I)Z+]Landroid/view/InputEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/InputEvent;->prepareForReuse()V+]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
 HSPLandroid/view/InputEvent;->recycle()V
 HSPLandroid/view/InputEvent;->recycleIfNeededAfterDispatch()V+]Landroid/view/InputEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/InputEventAssigner;-><init>()V
 HSPLandroid/view/InputEventAssigner;->notifyFrameProcessed()V
-HSPLandroid/view/InputEventAssigner;->processEvent(Landroid/view/InputEvent;)I
+HSPLandroid/view/InputEventAssigner;->processEvent(Landroid/view/InputEvent;)I+]Landroid/view/MotionEvent;Landroid/view/MotionEvent;]Landroid/view/InputEvent;Landroid/view/KeyEvent;,Landroid/view/MotionEvent;
 HSPLandroid/view/InputEventCompatProcessor;-><init>(Landroid/content/Context;)V
 HSPLandroid/view/InputEventCompatProcessor;->processInputEventForCompatibility(Landroid/view/InputEvent;)Ljava/util/List;
 HSPLandroid/view/InputEventConsistencyVerifier;->isInstrumentationEnabled()Z
@@ -16178,7 +16187,7 @@
 HSPLandroid/view/InsetsAnimationControlImpl$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
 HSPLandroid/view/InsetsAnimationControlImpl;-><init>(Landroid/util/SparseArray;Landroid/graphics/Rect;Landroid/view/InsetsState;Landroid/view/WindowInsetsAnimationControlListener;ILandroid/view/InsetsAnimationControlCallbacks;JLandroid/view/animation/Interpolator;IILandroid/content/res/CompatibilityInfo$Translator;)V+]Landroid/view/InsetsAnimationControlCallbacks;Landroid/view/InsetsAnimationThreadControlRunner$1;]Landroid/view/InsetsAnimationControlImpl;Landroid/view/InsetsAnimationControlImpl;]Landroid/view/WindowInsetsAnimation;Landroid/view/WindowInsetsAnimation;
 HSPLandroid/view/InsetsAnimationControlImpl;->addTranslationToMatrix(IILandroid/graphics/Matrix;Landroid/graphics/Rect;)V
-HSPLandroid/view/InsetsAnimationControlImpl;->applyChangeInsets(Landroid/view/InsetsState;)Z+]Landroid/view/InsetsAnimationControlCallbacks;Landroid/view/InsetsAnimationThreadControlRunner$1;]Landroid/view/WindowInsetsAnimation;Landroid/view/WindowInsetsAnimation;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/view/InsetsAnimationControlImpl;->applyChangeInsets(Landroid/view/InsetsState;)Z+]Landroid/view/InsetsAnimationControlCallbacks;Landroid/view/InsetsAnimationThreadControlRunner$1;,Landroid/view/InsetsController;]Landroid/view/WindowInsetsAnimation;Landroid/view/WindowInsetsAnimation;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/InsetsAnimationControlImpl;->buildSideControlsMap(Landroid/util/SparseSetArray;Landroid/util/SparseArray;)V
 HSPLandroid/view/InsetsAnimationControlImpl;->calculateInsets(Landroid/view/InsetsState;Landroid/graphics/Rect;Landroid/util/SparseArray;ZLandroid/util/SparseIntArray;)Landroid/graphics/Insets;
 HSPLandroid/view/InsetsAnimationControlImpl;->calculateInsets(Landroid/view/InsetsState;Landroid/util/SparseArray;Z)Landroid/graphics/Insets;
@@ -16303,13 +16312,13 @@
 HSPLandroid/view/InsetsController;->startResizingAnimationIfNeeded(Landroid/view/InsetsState;)V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/view/InsetsAnimationControlRunner;Landroid/view/InsetsResizeAnimationRunner;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/InsetsController;->updateCompatSysUiVisibility(IZZ)V
 HSPLandroid/view/InsetsController;->updateDisabledUserAnimationTypes(I)V
-HSPLandroid/view/InsetsController;->updateRequestedVisibilities()V+]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLandroid/view/InsetsController;->updateRequestedVisibilities()V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/view/InsetsSourceConsumer;Landroid/view/InsetsSourceConsumer;,Landroid/view/ImeInsetsSourceConsumer;]Landroid/view/InsetsController$Host;Landroid/view/ViewRootInsetsControllerHost;]Landroid/view/InsetsVisibilities;Landroid/view/InsetsVisibilities;
 HSPLandroid/view/InsetsController;->updateState(Landroid/view/InsetsState;)V
 HSPLandroid/view/InsetsFlags;-><init>()V
 HSPLandroid/view/InsetsSource$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/InsetsSource;
 HSPLandroid/view/InsetsSource$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/view/InsetsSource;-><init>(I)V
-HSPLandroid/view/InsetsSource;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/view/InsetsSource;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/graphics/Rect$1;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/InsetsSource;-><init>(Landroid/view/InsetsSource;)V
 HSPLandroid/view/InsetsSource;->calculateInsets(Landroid/graphics/Rect;Landroid/graphics/Rect;Z)Landroid/graphics/Insets;+]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/view/InsetsSource;->calculateInsets(Landroid/graphics/Rect;Z)Landroid/graphics/Insets;
@@ -16342,15 +16351,16 @@
 HSPLandroid/view/InsetsSourceConsumer;->onWindowFocusLost()V
 HSPLandroid/view/InsetsSourceConsumer;->removeSurface()V
 HSPLandroid/view/InsetsSourceConsumer;->requestShow(Z)I
-HSPLandroid/view/InsetsSourceConsumer;->setControl(Landroid/view/InsetsSourceControl;[I[I)Z+]Landroid/view/InsetsController$Host;Landroid/view/ViewRootInsetsControllerHost;]Lcom/android/internal/inputmethod/ImeTracing;Lcom/android/internal/inputmethod/ImeTracingClientImpl;]Landroid/view/InsetsController;Landroid/view/InsetsController;]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/InsetsSourceConsumer;Landroid/view/InsetsSourceConsumer;,Landroid/view/ImeInsetsSourceConsumer;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/graphics/Insets;Landroid/graphics/Insets;]Landroid/view/InsetsSourceControl;Landroid/view/InsetsSourceControl;
+HSPLandroid/view/InsetsSourceConsumer;->setControl(Landroid/view/InsetsSourceControl;[I[I)Z+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/InsetsSourceConsumer;Landroid/view/InsetsSourceConsumer;,Landroid/view/ImeInsetsSourceConsumer;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/graphics/Insets;Landroid/graphics/Insets;]Landroid/view/InsetsController$Host;Landroid/view/ViewRootInsetsControllerHost;]Landroid/view/InsetsSourceControl;Landroid/view/InsetsSourceControl;]Lcom/android/internal/inputmethod/ImeTracing;Lcom/android/internal/inputmethod/ImeTracingClientImpl;]Landroid/view/InsetsController;Landroid/view/InsetsController;
 HSPLandroid/view/InsetsSourceConsumer;->setRequestedVisible(Z)V
 HSPLandroid/view/InsetsSourceConsumer;->show(Z)V
+HSPLandroid/view/InsetsSourceConsumer;->updateCompatSysUiVisibility(ZLandroid/view/InsetsSource;Z)V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/view/InsetsController;Landroid/view/InsetsController;
 HSPLandroid/view/InsetsSourceConsumer;->updateSource(Landroid/view/InsetsSource;I)V
 HSPLandroid/view/InsetsSourceControl$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/InsetsSourceControl;
 HSPLandroid/view/InsetsSourceControl$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/view/InsetsSourceControl$1;->newArray(I)[Landroid/view/InsetsSourceControl;
 HSPLandroid/view/InsetsSourceControl$1;->newArray(I)[Ljava/lang/Object;
-HSPLandroid/view/InsetsSourceControl;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/view/InsetsSourceControl;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/InsetsSourceControl;-><init>(Landroid/view/InsetsSourceControl;)V
 HSPLandroid/view/InsetsSourceControl;->equals(Ljava/lang/Object;)Z
 HSPLandroid/view/InsetsSourceControl;->getAndClearSkipAnimationOnce()Z
@@ -16365,11 +16375,11 @@
 HSPLandroid/view/InsetsState$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/view/InsetsState;-><init>()V
 HSPLandroid/view/InsetsState;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/view/InsetsState;-><init>(Landroid/view/InsetsState;Z)V
+HSPLandroid/view/InsetsState;-><init>(Landroid/view/InsetsState;Z)V+]Landroid/view/InsetsState;Landroid/view/InsetsState;
 HSPLandroid/view/InsetsState;->addSource(Landroid/view/InsetsSource;)V
 HSPLandroid/view/InsetsState;->calculateInsets(Landroid/graphics/Rect;ILandroid/view/InsetsVisibilities;)Landroid/graphics/Insets;+]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/view/InsetsVisibilities;Landroid/view/InsetsVisibilities;
 HSPLandroid/view/InsetsState;->calculateInsets(Landroid/graphics/Rect;IZ)Landroid/graphics/Insets;+]Landroid/view/InsetsSource;Landroid/view/InsetsSource;
-HSPLandroid/view/InsetsState;->calculateInsets(Landroid/graphics/Rect;Landroid/view/InsetsState;ZZIIIIILandroid/util/SparseIntArray;)Landroid/view/WindowInsets;
+HSPLandroid/view/InsetsState;->calculateInsets(Landroid/graphics/Rect;Landroid/view/InsetsState;ZZIIIIILandroid/util/SparseIntArray;)Landroid/view/WindowInsets;+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;
 HSPLandroid/view/InsetsState;->calculateRelativeCutout(Landroid/graphics/Rect;)Landroid/view/DisplayCutout;
 HSPLandroid/view/InsetsState;->calculateRelativePrivacyIndicatorBounds(Landroid/graphics/Rect;)Landroid/view/PrivacyIndicatorBounds;
 HSPLandroid/view/InsetsState;->calculateRelativeRoundedCorners(Landroid/graphics/Rect;)Landroid/view/RoundedCorners;
@@ -16390,11 +16400,11 @@
 HSPLandroid/view/InsetsState;->getSourceOrDefaultVisibility(I)Z
 HSPLandroid/view/InsetsState;->peekSource(I)Landroid/view/InsetsSource;
 HSPLandroid/view/InsetsState;->processSource(Landroid/view/InsetsSource;Landroid/graphics/Rect;Z[Landroid/graphics/Insets;Landroid/util/SparseIntArray;[Z)V
-HSPLandroid/view/InsetsState;->processSourceAsPublicType(Landroid/view/InsetsSource;[Landroid/graphics/Insets;Landroid/util/SparseIntArray;[ZLandroid/graphics/Insets;I)V
-HSPLandroid/view/InsetsState;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/view/InsetsState;->processSourceAsPublicType(Landroid/view/InsetsSource;[Landroid/graphics/Insets;Landroid/util/SparseIntArray;[ZLandroid/graphics/Insets;I)V+]Landroid/view/InsetsSource;Landroid/view/InsetsSource;
+HSPLandroid/view/InsetsState;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/DisplayCutout$ParcelableWrapper;Landroid/view/DisplayCutout$ParcelableWrapper;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/InsetsState;->removeSource(I)Z
 HSPLandroid/view/InsetsState;->set(Landroid/view/InsetsState;I)V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/view/DisplayCutout$ParcelableWrapper;Landroid/view/DisplayCutout$ParcelableWrapper;
-HSPLandroid/view/InsetsState;->set(Landroid/view/InsetsState;Z)V
+HSPLandroid/view/InsetsState;->set(Landroid/view/InsetsState;Z)V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/DisplayCutout$ParcelableWrapper;Landroid/view/DisplayCutout$ParcelableWrapper;
 HSPLandroid/view/InsetsState;->setDisplayCutout(Landroid/view/DisplayCutout;)V
 HSPLandroid/view/InsetsState;->setDisplayFrame(Landroid/graphics/Rect;)V
 HSPLandroid/view/InsetsState;->setPrivacyIndicatorBounds(Landroid/view/PrivacyIndicatorBounds;)V
@@ -16455,34 +16465,34 @@
 HSPLandroid/view/LayoutInflater$FactoryMerger;-><init>(Landroid/view/LayoutInflater$Factory;Landroid/view/LayoutInflater$Factory2;Landroid/view/LayoutInflater$Factory;Landroid/view/LayoutInflater$Factory2;)V
 HSPLandroid/view/LayoutInflater$FactoryMerger;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;
 HSPLandroid/view/LayoutInflater;-><init>(Landroid/content/Context;)V
-HSPLandroid/view/LayoutInflater;-><init>(Landroid/view/LayoutInflater;Landroid/content/Context;)V
+HSPLandroid/view/LayoutInflater;-><init>(Landroid/view/LayoutInflater;Landroid/content/Context;)V+]Landroid/view/LayoutInflater;Lcom/android/internal/policy/PhoneLayoutInflater;
 HSPLandroid/view/LayoutInflater;->advanceToRootNode(Lorg/xmlpull/v1/XmlPullParser;)V
 HSPLandroid/view/LayoutInflater;->consumeChildElements(Lorg/xmlpull/v1/XmlPullParser;)V
-HSPLandroid/view/LayoutInflater;->createView(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/LayoutInflater;missing_types]Landroid/view/ViewStub;Landroid/view/ViewStub;]Ljava/lang/Class;Ljava/lang/Class;]Ljava/lang/reflect/Constructor;Ljava/lang/reflect/Constructor;
+HSPLandroid/view/LayoutInflater;->createView(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/lang/reflect/Constructor;Ljava/lang/reflect/Constructor;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/LayoutInflater;missing_types]Landroid/view/ViewStub;Landroid/view/ViewStub;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/content/Context;missing_types
 HSPLandroid/view/LayoutInflater;->createView(Ljava/lang/String;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;+]Landroid/view/LayoutInflater;Lcom/android/internal/policy/PhoneLayoutInflater;
-HSPLandroid/view/LayoutInflater;->createViewFromTag(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;
-HSPLandroid/view/LayoutInflater;->createViewFromTag(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;Z)Landroid/view/View;+]Landroid/view/LayoutInflater;Lcom/android/internal/policy/PhoneLayoutInflater;]Landroid/content/Context;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLandroid/view/LayoutInflater;->createViewFromTag(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;+]Landroid/view/LayoutInflater;Lcom/android/internal/policy/PhoneLayoutInflater;
+HSPLandroid/view/LayoutInflater;->createViewFromTag(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;Z)Landroid/view/View;+]Landroid/view/LayoutInflater;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/Context;missing_types]Landroid/util/AttributeSet;Landroid/content/res/XmlBlock$Parser;
 HSPLandroid/view/LayoutInflater;->from(Landroid/content/Context;)Landroid/view/LayoutInflater;
 HSPLandroid/view/LayoutInflater;->getContext()Landroid/content/Context;
 HSPLandroid/view/LayoutInflater;->getFactory()Landroid/view/LayoutInflater$Factory;
 HSPLandroid/view/LayoutInflater;->getFactory2()Landroid/view/LayoutInflater$Factory2;
 HSPLandroid/view/LayoutInflater;->inflate(ILandroid/view/ViewGroup;)Landroid/view/View;
-HSPLandroid/view/LayoutInflater;->inflate(ILandroid/view/ViewGroup;Z)Landroid/view/View;
-HSPLandroid/view/LayoutInflater;->inflate(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/ViewGroup;Z)Landroid/view/View;
+HSPLandroid/view/LayoutInflater;->inflate(ILandroid/view/ViewGroup;Z)Landroid/view/View;+]Landroid/view/LayoutInflater;Lcom/android/internal/policy/PhoneLayoutInflater;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/res/XmlResourceParser;Landroid/content/res/XmlBlock$Parser;
+HSPLandroid/view/LayoutInflater;->inflate(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/ViewGroup;Z)Landroid/view/View;+]Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/XmlBlock$Parser;]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Landroid/view/LayoutInflater;missing_types
 HSPLandroid/view/LayoutInflater;->initPrecompiledViews()V
 HSPLandroid/view/LayoutInflater;->initPrecompiledViews(Z)V
 HSPLandroid/view/LayoutInflater;->onCreateView(Landroid/content/Context;Landroid/view/View;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;
 HSPLandroid/view/LayoutInflater;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;
 HSPLandroid/view/LayoutInflater;->onCreateView(Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;
-HSPLandroid/view/LayoutInflater;->parseInclude(Lorg/xmlpull/v1/XmlPullParser;Landroid/content/Context;Landroid/view/View;Landroid/util/AttributeSet;)V
-HSPLandroid/view/LayoutInflater;->rInflate(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/View;Landroid/content/Context;Landroid/util/AttributeSet;Z)V+]Landroid/view/View;missing_types]Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/XmlBlock$Parser;]Landroid/view/ViewGroup;missing_types]Landroid/view/LayoutInflater;missing_types
-HSPLandroid/view/LayoutInflater;->rInflateChildren(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/View;Landroid/util/AttributeSet;Z)V
+HSPLandroid/view/LayoutInflater;->parseInclude(Lorg/xmlpull/v1/XmlPullParser;Landroid/content/Context;Landroid/view/View;Landroid/util/AttributeSet;)V+]Landroid/util/AttributeSet;Landroid/content/res/XmlBlock$Parser;]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Landroid/content/res/Resources$Theme;Landroid/content/res/Resources$Theme;]Landroid/view/LayoutInflater;Lcom/android/internal/policy/PhoneLayoutInflater;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/Context;Landroid/view/ContextThemeWrapper;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/res/XmlResourceParser;Landroid/content/res/XmlBlock$Parser;
+HSPLandroid/view/LayoutInflater;->rInflate(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/View;Landroid/content/Context;Landroid/util/AttributeSet;Z)V+]Landroid/view/View;missing_types]Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/XmlBlock$Parser;]Landroid/view/ViewGroup;megamorphic_types]Landroid/view/LayoutInflater;missing_types
+HSPLandroid/view/LayoutInflater;->rInflateChildren(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/View;Landroid/util/AttributeSet;Z)V+]Landroid/view/View;missing_types]Landroid/view/LayoutInflater;missing_types
 HSPLandroid/view/LayoutInflater;->setFactory2(Landroid/view/LayoutInflater$Factory2;)V
 HSPLandroid/view/LayoutInflater;->setFilter(Landroid/view/LayoutInflater$Filter;)V
 HSPLandroid/view/LayoutInflater;->setPrivateFactory(Landroid/view/LayoutInflater$Factory2;)V
-HSPLandroid/view/LayoutInflater;->tryCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;
+HSPLandroid/view/LayoutInflater;->tryCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;+]Landroid/view/LayoutInflater$Factory2;missing_types
 HSPLandroid/view/LayoutInflater;->tryInflatePrecompiled(ILandroid/content/res/Resources;Landroid/view/ViewGroup;Z)Landroid/view/View;
-HSPLandroid/view/LayoutInflater;->verifyClassLoader(Ljava/lang/reflect/Constructor;)Z
+HSPLandroid/view/LayoutInflater;->verifyClassLoader(Ljava/lang/reflect/Constructor;)Z+]Landroid/content/Context;missing_types]Ljava/lang/Class;Ljava/lang/Class;]Ljava/lang/reflect/Constructor;Ljava/lang/reflect/Constructor;
 HSPLandroid/view/MenuInflater;-><init>(Landroid/content/Context;)V
 HSPLandroid/view/MotionEvent$PointerCoords;-><init>()V
 HSPLandroid/view/MotionEvent$PointerProperties;-><init>()V
@@ -16524,7 +16534,7 @@
 HSPLandroid/view/MotionEvent;->getY()F
 HSPLandroid/view/MotionEvent;->getY(I)F
 HSPLandroid/view/MotionEvent;->initialize(IIIIIIIIIFFFFJJI[Landroid/view/MotionEvent$PointerProperties;[Landroid/view/MotionEvent$PointerCoords;)Z
-HSPLandroid/view/MotionEvent;->isTargetAccessibilityFocus()Z
+HSPLandroid/view/MotionEvent;->isTargetAccessibilityFocus()Z+]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/MotionEvent;->isTouchEvent()Z
 HSPLandroid/view/MotionEvent;->obtain()Landroid/view/MotionEvent;+]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/MotionEvent;->obtain(JJIFFFFIFFII)Landroid/view/MotionEvent;
@@ -16535,7 +16545,7 @@
 HSPLandroid/view/MotionEvent;->recycle()V
 HSPLandroid/view/MotionEvent;->setAction(I)V
 HSPLandroid/view/MotionEvent;->setLocation(FF)V
-HSPLandroid/view/MotionEvent;->setTargetAccessibilityFocus(Z)V
+HSPLandroid/view/MotionEvent;->setTargetAccessibilityFocus(Z)V+]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/MotionEvent;->split(I)Landroid/view/MotionEvent;
 HSPLandroid/view/MotionEvent;->transform(Landroid/graphics/Matrix;)V
 HSPLandroid/view/MotionEvent;->updateCursorPosition()V
@@ -16577,7 +16587,7 @@
 HSPLandroid/view/RoundedCorner;-><clinit>()V
 HSPLandroid/view/RoundedCorner;-><init>(I)V
 HSPLandroid/view/RoundedCorner;-><init>(IIII)V
-HSPLandroid/view/RoundedCorner;->equals(Ljava/lang/Object;)Z
+HSPLandroid/view/RoundedCorner;->equals(Ljava/lang/Object;)Z+]Landroid/graphics/Point;Landroid/graphics/Point;
 HSPLandroid/view/RoundedCorner;->getCenter()Landroid/graphics/Point;
 HSPLandroid/view/RoundedCorner;->getRadius()I
 HSPLandroid/view/RoundedCorner;->isEmpty()Z
@@ -16686,16 +16696,11 @@
 HSPLandroid/view/SurfaceSession;->finalize()V
 HSPLandroid/view/SurfaceSession;->kill()V
 HSPLandroid/view/SurfaceView$$ExternalSyntheticLambda1;-><init>(Landroid/view/SurfaceView;)V
-HSPLandroid/view/SurfaceView$$ExternalSyntheticLambda1;->onScrollChanged()V+]Landroid/view/SurfaceView;missing_types
-HSPLandroid/view/SurfaceView$$ExternalSyntheticLambda2;->onPreDraw()Z
-HSPLandroid/view/SurfaceView$$ExternalSyntheticLambda5;->run()V
-HSPLandroid/view/SurfaceView$$ExternalSyntheticLambda6;-><init>(Landroid/view/SurfaceView;)V
-HSPLandroid/view/SurfaceView$$ExternalSyntheticLambda6;->run()V
 HSPLandroid/view/SurfaceView$1;-><init>(Landroid/view/SurfaceView;)V
 HSPLandroid/view/SurfaceView$1;->addCallback(Landroid/view/SurfaceHolder$Callback;)V
 HSPLandroid/view/SurfaceView$1;->getSurface()Landroid/view/Surface;
 HSPLandroid/view/SurfaceView$SurfaceViewPositionUpdateListener;-><init>(Landroid/view/SurfaceView;II)V
-HSPLandroid/view/SurfaceView$SurfaceViewPositionUpdateListener;->positionChanged(JIIII)V+]Landroid/graphics/Point;Landroid/graphics/Point;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/SurfaceView;missing_types
+HSPLandroid/view/SurfaceView$SurfaceViewPositionUpdateListener;->positionChanged(JIIII)V+]Landroid/view/SurfaceView;missing_types]Landroid/graphics/Point;Landroid/graphics/Point;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/view/SurfaceView$SurfaceViewPositionUpdateListener;->positionLost(J)V
 HSPLandroid/view/SurfaceView;->$r8$lambda$PgOqH-1CHTj5xz7zBHK88fj8o94(Landroid/view/SurfaceView;)V
 HSPLandroid/view/SurfaceView;->$r8$lambda$st27mCkd9jfJkTrN_P3qIGKX6NY(Landroid/view/SurfaceView;)V
@@ -16726,7 +16731,7 @@
 HSPLandroid/view/SurfaceView;->onWindowVisibilityChanged(I)V
 HSPLandroid/view/SurfaceView;->performDrawFinished()V
 HSPLandroid/view/SurfaceView;->performSurfaceTransaction(Landroid/view/ViewRootImpl;Landroid/content/res/CompatibilityInfo$Translator;ZZZLandroid/view/SurfaceControl$Transaction;)Z+]Landroid/view/SurfaceView;missing_types]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Ljava/util/concurrent/locks/ReentrantLock;Ljava/util/concurrent/locks/ReentrantLock;
-HSPLandroid/view/SurfaceView;->releaseSurfaces(Z)V+]Landroid/view/Surface;Landroid/view/Surface;]Landroid/graphics/BLASTBufferQueue;Landroid/graphics/BLASTBufferQueue;]Ljava/util/concurrent/locks/ReentrantLock;Ljava/util/concurrent/locks/ReentrantLock;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;
+HSPLandroid/view/SurfaceView;->releaseSurfaces(Z)V+]Landroid/view/Surface;Landroid/view/Surface;]Ljava/util/concurrent/locks/ReentrantLock;Ljava/util/concurrent/locks/ReentrantLock;]Landroid/graphics/BLASTBufferQueue;Landroid/graphics/BLASTBufferQueue;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;
 HSPLandroid/view/SurfaceView;->replacePositionUpdateListener(II)V+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/SurfaceView;->setFrame(IIII)Z
 HSPLandroid/view/SurfaceView;->setVisibility(I)V
@@ -16736,9 +16741,9 @@
 HSPLandroid/view/SurfaceView;->surfaceDestroyed()V
 HSPLandroid/view/SurfaceView;->updateBackgroundColor(Landroid/view/SurfaceControl$Transaction;)Landroid/view/SurfaceControl$Transaction;
 HSPLandroid/view/SurfaceView;->updateBackgroundVisibility(Landroid/view/SurfaceControl$Transaction;)V
-HSPLandroid/view/SurfaceView;->updateEmbeddedAccessibilityMatrix(Z)V+]Landroid/view/SurfaceView;Landroid/widget/inline/InlineContentView$4;,Landroid/view/SurfaceView;]Landroid/view/RemoteAccessibilityController;Landroid/view/RemoteAccessibilityController;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/graphics/Rect;Landroid/graphics/Rect;
+HSPLandroid/view/SurfaceView;->updateEmbeddedAccessibilityMatrix(Z)V+]Landroid/view/SurfaceView;Landroid/view/SurfaceView;,Landroid/widget/inline/InlineContentView$4;]Landroid/view/RemoteAccessibilityController;Landroid/view/RemoteAccessibilityController;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/view/SurfaceView;->updateRelativeZ(Landroid/view/SurfaceControl$Transaction;)V
-HSPLandroid/view/SurfaceView;->updateSurface()V
+HSPLandroid/view/SurfaceView;->updateSurface()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/Surface;Landroid/view/Surface;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/view/SyncRtSurfaceTransactionApplier$SurfaceParams$Builder;-><init>(Landroid/view/SurfaceControl;)V
 HSPLandroid/view/SyncRtSurfaceTransactionApplier$SurfaceParams$Builder;->build()Landroid/view/SyncRtSurfaceTransactionApplier$SurfaceParams;
 HSPLandroid/view/SyncRtSurfaceTransactionApplier$SurfaceParams$Builder;->withAlpha(F)Landroid/view/SyncRtSurfaceTransactionApplier$SurfaceParams$Builder;
@@ -16747,10 +16752,10 @@
 HSPLandroid/view/SyncRtSurfaceTransactionApplier$SurfaceParams;-><init>(Landroid/view/SurfaceControl;IFLandroid/graphics/Matrix;Landroid/graphics/Rect;IFIZLandroid/view/SurfaceControl$Transaction;)V
 HSPLandroid/view/SyncRtSurfaceTransactionApplier;->applyParams(Landroid/view/SurfaceControl$Transaction;Landroid/view/SyncRtSurfaceTransactionApplier$SurfaceParams;[F)V+]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;
 HSPLandroid/view/TextureView;-><init>(Landroid/content/Context;)V
-HSPLandroid/view/TextureView;->applyUpdate()V
+HSPLandroid/view/TextureView;->applyUpdate()V+]Landroid/graphics/TextureLayer;Landroid/graphics/TextureLayer;]Landroid/view/TextureView;Landroid/view/TextureView;
 HSPLandroid/view/TextureView;->destroyHardwareLayer()V
 HSPLandroid/view/TextureView;->destroyHardwareResources()V
-HSPLandroid/view/TextureView;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/view/TextureView;->draw(Landroid/graphics/Canvas;)V+]Landroid/graphics/TextureLayer;Landroid/graphics/TextureLayer;]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;]Landroid/view/TextureView;Landroid/view/TextureView;
 HSPLandroid/view/TextureView;->getLayerType()I
 HSPLandroid/view/TextureView;->getTextureLayer()Landroid/graphics/TextureLayer;
 HSPLandroid/view/TextureView;->isOpaque()Z
@@ -16802,11 +16807,11 @@
 HSPLandroid/view/ThreadedRenderer;->setSurfaceControlOpaque(Z)Z
 HSPLandroid/view/ThreadedRenderer;->setup(IILandroid/view/View$AttachInfo;Landroid/graphics/Rect;)V
 HSPLandroid/view/ThreadedRenderer;->updateEnabledState(Landroid/view/Surface;)V
-HSPLandroid/view/ThreadedRenderer;->updateRootDisplayList(Landroid/view/View;Landroid/view/ThreadedRenderer$DrawCallbacks;)V+]Landroid/view/View;Lcom/android/internal/policy/DecorView;]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/view/ThreadedRenderer$DrawCallbacks;Landroid/view/ViewRootImpl;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;
+HSPLandroid/view/ThreadedRenderer;->updateRootDisplayList(Landroid/view/View;Landroid/view/ThreadedRenderer$DrawCallbacks;)V+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/view/View;Lcom/android/internal/policy/DecorView;,Landroid/widget/FrameLayout;,Landroid/widget/PopupWindow$PopupDecorView;]Landroid/view/ThreadedRenderer$DrawCallbacks;Landroid/view/ViewRootImpl;]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;
 HSPLandroid/view/ThreadedRenderer;->updateSurface(Landroid/view/Surface;)V
-HSPLandroid/view/ThreadedRenderer;->updateViewTreeDisplayList(Landroid/view/View;)V+]Landroid/view/View;Lcom/android/internal/policy/DecorView;
-HSPLandroid/view/ThreadedRenderer;->updateWebViewOverlayCallbacks()V+]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/view/ThreadedRenderer$WebViewOverlayProvider;Landroid/view/ThreadedRenderer$WebViewOverlayProvider;
-HSPLandroid/view/TouchDelegate;-><init>(Landroid/graphics/Rect;Landroid/view/View;)V
+HSPLandroid/view/ThreadedRenderer;->updateViewTreeDisplayList(Landroid/view/View;)V+]Landroid/view/View;Lcom/android/internal/policy/DecorView;,Landroid/widget/FrameLayout;,Landroid/widget/PopupWindow$PopupDecorView;
+HSPLandroid/view/ThreadedRenderer;->updateWebViewOverlayCallbacks()V+]Landroid/view/ThreadedRenderer$WebViewOverlayProvider;Landroid/view/ThreadedRenderer$WebViewOverlayProvider;]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;
+HSPLandroid/view/TouchDelegate;-><init>(Landroid/graphics/Rect;Landroid/view/View;)V+]Landroid/view/View;missing_types]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewConfiguration;Landroid/view/ViewConfiguration;
 HSPLandroid/view/VelocityTracker;-><init>(I)V
 HSPLandroid/view/VelocityTracker;->addMovement(Landroid/view/MotionEvent;)V
 HSPLandroid/view/VelocityTracker;->clear()V
@@ -16819,9 +16824,11 @@
 HSPLandroid/view/VelocityTracker;->getYVelocity(I)F
 HSPLandroid/view/VelocityTracker;->obtain()Landroid/view/VelocityTracker;
 HSPLandroid/view/VelocityTracker;->recycle()V
+HSPLandroid/view/View$$ExternalSyntheticLambda12;->get()Ljava/lang/Object;
 HSPLandroid/view/View$$ExternalSyntheticLambda2;-><init>(Landroid/view/View;)V
 HSPLandroid/view/View$$ExternalSyntheticLambda3;->run()V
 HSPLandroid/view/View$$ExternalSyntheticLambda4;-><init>(Landroid/view/View;)V
+HSPLandroid/view/View$$ExternalSyntheticLambda4;->run()V+]Landroid/view/View;missing_types
 HSPLandroid/view/View$$ExternalSyntheticLambda5;->run()V+]Landroid/view/View;missing_types
 HSPLandroid/view/View$$ExternalSyntheticLambda8;->run()V
 HSPLandroid/view/View$12;->get(Landroid/view/View;)Ljava/lang/Float;
@@ -16856,7 +16863,7 @@
 HSPLandroid/view/View$AccessibilityDelegate;->sendAccessibilityEvent(Landroid/view/View;I)V
 HSPLandroid/view/View$AttachInfo;-><init>(Landroid/view/IWindowSession;Landroid/view/IWindow;Landroid/view/Display;Landroid/view/ViewRootImpl;Landroid/os/Handler;Landroid/view/View$AttachInfo$Callbacks;Landroid/content/Context;)V
 HSPLandroid/view/View$AttachInfo;->delayNotifyContentCaptureInsetsEvent(Landroid/graphics/Insets;)V
-HSPLandroid/view/View$AttachInfo;->ensureEvents(Landroid/view/contentcapture/ContentCaptureSession;)Ljava/util/ArrayList;
+HSPLandroid/view/View$AttachInfo;->ensureEvents(Landroid/view/contentcapture/ContentCaptureSession;)Ljava/util/ArrayList;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/view/contentcapture/ContentCaptureSession;Landroid/view/contentcapture/MainContentCaptureSession;
 HSPLandroid/view/View$BaseSavedState$1;->createFromParcel(Landroid/os/Parcel;Ljava/lang/ClassLoader;)Landroid/view/View$BaseSavedState;
 HSPLandroid/view/View$BaseSavedState$1;->createFromParcel(Landroid/os/Parcel;Ljava/lang/ClassLoader;)Ljava/lang/Object;
 HSPLandroid/view/View$BaseSavedState;-><init>(Landroid/os/Parcel;)V
@@ -16880,16 +16887,16 @@
 HSPLandroid/view/View$MeasureSpec;->makeMeasureSpec(II)I
 HSPLandroid/view/View$MeasureSpec;->makeSafeMeasureSpec(II)I
 HSPLandroid/view/View$PerformClick;->run()V
-HSPLandroid/view/View$ScrollabilityCache;-><init>(Landroid/view/ViewConfiguration;Landroid/view/View;)V
+HSPLandroid/view/View$ScrollabilityCache;-><init>(Landroid/view/ViewConfiguration;Landroid/view/View;)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/view/ViewConfiguration;Landroid/view/ViewConfiguration;
 HSPLandroid/view/View$ScrollabilityCache;->run()V
 HSPLandroid/view/View$TintInfo;-><init>()V
 HSPLandroid/view/View$TransformationInfo;-><init>()V
 HSPLandroid/view/View$UnsetPressedState;->run()V
 HSPLandroid/view/View$VisibilityChangeForAutofillHandler;->handleMessage(Landroid/os/Message;)V
-HSPLandroid/view/View;-><init>(Landroid/content/Context;)V+]Landroid/view/View;megamorphic_types]Ljava/lang/Object;megamorphic_types]Landroid/content/Context;missing_types]Landroid/view/ViewConfiguration;Landroid/view/ViewConfiguration;]Ljava/lang/Class;Ljava/lang/Class;
+HSPLandroid/view/View;-><init>(Landroid/content/Context;)V+]Landroid/view/View;megamorphic_types]Ljava/lang/Object;megamorphic_types]Landroid/view/ViewConfiguration;Landroid/view/ViewConfiguration;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/content/Context;missing_types
 HSPLandroid/view/View;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/view/View;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroid/view/View;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/view/View;megamorphic_types]Landroid/content/Context;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
+HSPLandroid/view/View;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/view/View;megamorphic_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/Context;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->addFocusables(Ljava/util/ArrayList;I)V
 HSPLandroid/view/View;->addFocusables(Ljava/util/ArrayList;II)V
 HSPLandroid/view/View;->addFrameMetricsListener(Landroid/view/Window;Landroid/view/Window$OnFrameMetricsAvailableListener;Landroid/os/Handler;)V
@@ -16900,21 +16907,21 @@
 HSPLandroid/view/View;->applyBackgroundTint()V
 HSPLandroid/view/View;->applyForegroundTint()V
 HSPLandroid/view/View;->applyInsets(Landroid/graphics/Rect;)V
-HSPLandroid/view/View;->applyLegacyAnimation(Landroid/view/ViewGroup;JLandroid/view/animation/Animation;Z)Z
+HSPLandroid/view/View;->applyLegacyAnimation(Landroid/view/ViewGroup;JLandroid/view/animation/Animation;Z)Z+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/view/animation/Animation;missing_types]Landroid/view/View;Landroid/widget/DayPickerView;]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/View;->areDrawablesResolved()Z
 HSPLandroid/view/View;->assignParent(Landroid/view/ViewParent;)V
 HSPLandroid/view/View;->awakenScrollBars()Z
 HSPLandroid/view/View;->awakenScrollBars(IZ)Z+]Landroid/os/Handler;Landroid/view/ViewRootImpl$ViewRootHandler;]Landroid/view/View;missing_types
 HSPLandroid/view/View;->bringToFront()V
 HSPLandroid/view/View;->buildDrawingCache(Z)V
-HSPLandroid/view/View;->buildDrawingCacheImpl(Z)V
+HSPLandroid/view/View;->buildDrawingCacheImpl(Z)V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;]Landroid/view/ViewConfiguration;Landroid/view/ViewConfiguration;]Landroid/graphics/Canvas;Landroid/graphics/Canvas;
 HSPLandroid/view/View;->buildLayer()V
 HSPLandroid/view/View;->calculateIsImportantForContentCapture()Z+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Landroid/view/ViewParent;missing_types
 HSPLandroid/view/View;->canHaveDisplayList()Z
 HSPLandroid/view/View;->canNotifyAutofillEnterExitEvent()Z
 HSPLandroid/view/View;->canReceivePointerEvents()Z
-HSPLandroid/view/View;->canResolveLayoutDirection()Z
-HSPLandroid/view/View;->canResolveTextDirection()Z
+HSPLandroid/view/View;->canResolveLayoutDirection()Z+]Landroid/view/View;missing_types]Landroid/view/ViewParent;missing_types
+HSPLandroid/view/View;->canResolveTextDirection()Z+]Landroid/view/View;megamorphic_types]Landroid/view/ViewParent;megamorphic_types
 HSPLandroid/view/View;->canScrollHorizontally(I)Z
 HSPLandroid/view/View;->canScrollVertically(I)Z
 HSPLandroid/view/View;->canTakeFocus()Z
@@ -16923,14 +16930,17 @@
 HSPLandroid/view/View;->cancelPendingInputEvents()V
 HSPLandroid/view/View;->checkForLongClick(JFFI)V
 HSPLandroid/view/View;->checkInputConnectionProxy(Landroid/view/View;)Z
-HSPLandroid/view/View;->cleanupDraw()V
-HSPLandroid/view/View;->clearAccessibilityFocus()V
+HSPLandroid/view/View;->cleanupDraw()V+]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
+HSPLandroid/view/View;->clearAccessibilityFocus()V+]Landroid/view/View;missing_types]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
 HSPLandroid/view/View;->clearAccessibilityFocusNoCallbacks(I)V
 HSPLandroid/view/View;->clearAccessibilityThrottles()V
 HSPLandroid/view/View;->clearAnimation()V
 HSPLandroid/view/View;->clearFocus()V
 HSPLandroid/view/View;->clearFocusInternal(Landroid/view/View;ZZ)V
 HSPLandroid/view/View;->clearParentsWantFocus()V
+HSPLandroid/view/View;->clearTranslationState()V+]Landroid/view/View;megamorphic_types
+HSPLandroid/view/View;->clearViewTranslationCallback()V
+HSPLandroid/view/View;->clearViewTranslationResponse()V
 HSPLandroid/view/View;->collectPreferKeepClearRects()Ljava/util/List;+]Landroid/view/View;missing_types]Landroid/view/ViewConfiguration;Landroid/view/ViewConfiguration;
 HSPLandroid/view/View;->collectUnrestrictedPreferKeepClearRects()Ljava/util/List;
 HSPLandroid/view/View;->combineMeasuredStates(II)I
@@ -16939,21 +16949,21 @@
 HSPLandroid/view/View;->computeHorizontalScrollExtent()I
 HSPLandroid/view/View;->computeHorizontalScrollOffset()I
 HSPLandroid/view/View;->computeHorizontalScrollRange()I
-HSPLandroid/view/View;->computeOpaqueFlags()V
+HSPLandroid/view/View;->computeOpaqueFlags()V+]Landroid/graphics/drawable/Drawable;megamorphic_types
 HSPLandroid/view/View;->computeScroll()V
 HSPLandroid/view/View;->computeSystemWindowInsets(Landroid/view/WindowInsets;Landroid/graphics/Rect;)Landroid/view/WindowInsets;
 HSPLandroid/view/View;->computeVerticalScrollExtent()I
 HSPLandroid/view/View;->computeVerticalScrollOffset()I
 HSPLandroid/view/View;->computeVerticalScrollRange()I
-HSPLandroid/view/View;->damageInParent()V
+HSPLandroid/view/View;->damageInParent()V+]Landroid/view/ViewParent;missing_types
 HSPLandroid/view/View;->destroyDrawingCache()V
 HSPLandroid/view/View;->destroyHardwareResources()V
 HSPLandroid/view/View;->dispatchApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;+]Landroid/view/View;megamorphic_types
-HSPLandroid/view/View;->dispatchAttachedToWindow(Landroid/view/View$AttachInfo;I)V+]Landroid/view/View;missing_types]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Ljava/util/Iterator;Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;
+HSPLandroid/view/View;->dispatchAttachedToWindow(Landroid/view/View$AttachInfo;I)V+]Landroid/view/ViewTreeObserver;Landroid/view/ViewTreeObserver;]Landroid/view/View;missing_types]Landroid/view/HandlerActionQueue;Landroid/view/HandlerActionQueue;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;]Landroid/view/ViewOverlay;Landroid/view/ViewGroupOverlay;]Landroid/view/ViewGroup;Landroid/view/ViewOverlay$OverlayViewGroup;]Landroid/view/View$OnAttachStateChangeListener;missing_types
 HSPLandroid/view/View;->dispatchCancelPendingInputEvents()V
-HSPLandroid/view/View;->dispatchCollectViewAttributes(Landroid/view/View$AttachInfo;I)V+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->dispatchCollectViewAttributes(Landroid/view/View$AttachInfo;I)V+]Landroid/view/View;megamorphic_types
 HSPLandroid/view/View;->dispatchConfigurationChanged(Landroid/content/res/Configuration;)V
-HSPLandroid/view/View;->dispatchDetachedFromWindow()V+]Ljava/util/List;Ljava/util/Collections$EmptyList;]Landroid/view/ImeFocusController;Landroid/view/ImeFocusController;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Ljava/util/Iterator;Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;
+HSPLandroid/view/View;->dispatchDetachedFromWindow()V+]Landroid/view/View;missing_types]Ljava/util/List;Ljava/util/Collections$EmptyList;]Landroid/view/ImeFocusController;Landroid/view/ImeFocusController;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;]Landroid/view/ViewOverlay;Landroid/view/ViewGroupOverlay;]Landroid/view/ViewGroup;Landroid/view/ViewOverlay$OverlayViewGroup;]Landroid/view/View$OnAttachStateChangeListener;missing_types
 HSPLandroid/view/View;->dispatchDraw(Landroid/graphics/Canvas;)V
 HSPLandroid/view/View;->dispatchDrawableHotspotChanged(FF)V
 HSPLandroid/view/View;->dispatchFinishTemporaryDetach()V
@@ -16970,26 +16980,26 @@
 HSPLandroid/view/View;->dispatchProvideStructure(Landroid/view/ViewStructure;II)V
 HSPLandroid/view/View;->dispatchRestoreInstanceState(Landroid/util/SparseArray;)V
 HSPLandroid/view/View;->dispatchSaveInstanceState(Landroid/util/SparseArray;)V
-HSPLandroid/view/View;->dispatchScreenStateChanged(I)V
+HSPLandroid/view/View;->dispatchScreenStateChanged(I)V+]Landroid/view/View;megamorphic_types
 HSPLandroid/view/View;->dispatchSetActivated(Z)V
 HSPLandroid/view/View;->dispatchSetPressed(Z)V
 HSPLandroid/view/View;->dispatchSetSelected(Z)V
 HSPLandroid/view/View;->dispatchStartTemporaryDetach()V
 HSPLandroid/view/View;->dispatchSystemUiVisibilityChanged(I)V
-HSPLandroid/view/View;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z
-HSPLandroid/view/View;->dispatchVisibilityAggregated(Z)Z
-HSPLandroid/view/View;->dispatchVisibilityChanged(Landroid/view/View;I)V+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z+]Landroid/view/View;missing_types]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
+HSPLandroid/view/View;->dispatchVisibilityAggregated(Z)Z+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->dispatchVisibilityChanged(Landroid/view/View;I)V+]Landroid/view/View;megamorphic_types
 HSPLandroid/view/View;->dispatchWindowFocusChanged(Z)V
 HSPLandroid/view/View;->dispatchWindowInsetsAnimationEnd(Landroid/view/WindowInsetsAnimation;)V
 HSPLandroid/view/View;->dispatchWindowSystemUiVisiblityChanged(I)V
 HSPLandroid/view/View;->dispatchWindowVisibilityChanged(I)V
-HSPLandroid/view/View;->draw(Landroid/graphics/Canvas;)V+]Landroid/view/View;megamorphic_types
-HSPLandroid/view/View;->draw(Landroid/graphics/Canvas;Landroid/view/ViewGroup;J)Z+]Landroid/view/View;missing_types]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
-HSPLandroid/view/View;->drawAutofilledHighlight(Landroid/graphics/Canvas;)V
-HSPLandroid/view/View;->drawBackground(Landroid/graphics/Canvas;)V+]Landroid/view/View;megamorphic_types]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
+HSPLandroid/view/View;->draw(Landroid/graphics/Canvas;)V+]Landroid/view/ViewOverlay;Landroid/view/ViewGroupOverlay;]Landroid/view/View;megamorphic_types]Landroid/view/ViewGroup;Landroid/view/ViewOverlay$OverlayViewGroup;
+HSPLandroid/view/View;->draw(Landroid/graphics/Canvas;Landroid/view/ViewGroup;J)Z+]Landroid/view/View;missing_types]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;,Landroid/graphics/Picture$PictureCanvas;,Landroid/graphics/Canvas;]Landroid/view/animation/Transformation;Landroid/view/animation/Transformation;]Landroid/view/animation/Animation;Landroid/view/animation/AnimationSet;,Landroid/view/animation/AlphaAnimation;]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/View;->drawAutofilledHighlight(Landroid/graphics/Canvas;)V+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->drawBackground(Landroid/graphics/Canvas;)V+]Landroid/view/View;megamorphic_types]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;,Landroid/graphics/Canvas;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/ColorDrawable;
 HSPLandroid/view/View;->drawDefaultFocusHighlight(Landroid/graphics/Canvas;)V
 HSPLandroid/view/View;->drawableHotspotChanged(FF)V
-HSPLandroid/view/View;->drawableStateChanged()V+]Landroid/animation/StateListAnimator;Landroid/animation/StateListAnimator;]Landroid/view/View;missing_types]Landroid/graphics/drawable/Drawable;Landroid/widget/ScrollBarDrawable;,Landroid/graphics/drawable/RippleDrawable;,Landroid/graphics/drawable/ColorDrawable;
+HSPLandroid/view/View;->drawableStateChanged()V+]Landroid/view/View;megamorphic_types]Landroid/graphics/drawable/Drawable;megamorphic_types]Landroid/animation/StateListAnimator;Landroid/animation/StateListAnimator;
 HSPLandroid/view/View;->drawsWithRenderNode(Landroid/graphics/Canvas;)Z+]Landroid/graphics/Canvas;missing_types
 HSPLandroid/view/View;->ensureTransformationInfo()V
 HSPLandroid/view/View;->findAccessibilityFocusHost(Z)Landroid/view/View;
@@ -17007,7 +17017,7 @@
 HSPLandroid/view/View;->fitSystemWindowsInt(Landroid/graphics/Rect;)Z+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;
 HSPLandroid/view/View;->focusSearch(I)Landroid/view/View;
 HSPLandroid/view/View;->forceLayout()V
-HSPLandroid/view/View;->gatherTransparentRegion(Landroid/graphics/Region;)Z
+HSPLandroid/view/View;->gatherTransparentRegion(Landroid/graphics/Region;)Z+]Landroid/graphics/Region;Landroid/graphics/Region;]Landroid/view/View;missing_types
 HSPLandroid/view/View;->generateViewId()I
 HSPLandroid/view/View;->getAccessibilityClassName()Ljava/lang/CharSequence;
 HSPLandroid/view/View;->getAccessibilityDelegate()Landroid/view/View$AccessibilityDelegate;
@@ -17015,18 +17025,18 @@
 HSPLandroid/view/View;->getAccessibilityNodeProvider()Landroid/view/accessibility/AccessibilityNodeProvider;
 HSPLandroid/view/View;->getAccessibilityViewId()I
 HSPLandroid/view/View;->getAlpha()F
-HSPLandroid/view/View;->getAndCacheContentCaptureSession()Landroid/view/contentcapture/ContentCaptureSession;
+HSPLandroid/view/View;->getAndCacheContentCaptureSession()Landroid/view/contentcapture/ContentCaptureSession;+]Landroid/view/View;missing_types]Landroid/content/Context;missing_types]Landroid/view/contentcapture/ContentCaptureManager;Landroid/view/contentcapture/ContentCaptureManager;
 HSPLandroid/view/View;->getAnimation()Landroid/view/animation/Animation;
 HSPLandroid/view/View;->getApplicationWindowToken()Landroid/os/IBinder;
 HSPLandroid/view/View;->getAutofillHints()[Ljava/lang/String;
-HSPLandroid/view/View;->getAutofillId()Landroid/view/autofill/AutofillId;
+HSPLandroid/view/View;->getAutofillId()Landroid/view/autofill/AutofillId;+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->getAutofillType()I
 HSPLandroid/view/View;->getAutofillViewId()I
 HSPLandroid/view/View;->getBackground()Landroid/graphics/drawable/Drawable;
 HSPLandroid/view/View;->getBaseline()I
 HSPLandroid/view/View;->getBottom()I
 HSPLandroid/view/View;->getBoundsOnScreen(Landroid/graphics/Rect;)V
-HSPLandroid/view/View;->getBoundsOnScreen(Landroid/graphics/Rect;Z)V
+HSPLandroid/view/View;->getBoundsOnScreen(Landroid/graphics/Rect;Z)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/view/View;->getClipBounds()Landroid/graphics/Rect;
 HSPLandroid/view/View;->getClipToOutline()Z
 HSPLandroid/view/View;->getContentCaptureSession()Landroid/view/contentcapture/ContentCaptureSession;
@@ -17034,16 +17044,16 @@
 HSPLandroid/view/View;->getContext()Landroid/content/Context;
 HSPLandroid/view/View;->getDefaultSize(II)I
 HSPLandroid/view/View;->getDisplay()Landroid/view/Display;
-HSPLandroid/view/View;->getDrawableRenderNode(Landroid/graphics/drawable/Drawable;Landroid/graphics/RenderNode;)Landroid/graphics/RenderNode;+]Ljava/lang/Object;missing_types]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/view/View;->getDrawableRenderNode(Landroid/graphics/drawable/Drawable;Landroid/graphics/RenderNode;)Landroid/graphics/RenderNode;+]Ljava/lang/Object;megamorphic_types]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/graphics/drawable/Drawable;megamorphic_types
 HSPLandroid/view/View;->getDrawableState()[I+]Landroid/view/View;megamorphic_types
 HSPLandroid/view/View;->getDrawingCache(Z)Landroid/graphics/Bitmap;
 HSPLandroid/view/View;->getDrawingRect(Landroid/graphics/Rect;)V
 HSPLandroid/view/View;->getDrawingTime()J
-HSPLandroid/view/View;->getElevation()F
+HSPLandroid/view/View;->getElevation()F+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->getFinalAlpha()F
 HSPLandroid/view/View;->getFitsSystemWindows()Z
 HSPLandroid/view/View;->getFocusable()I
-HSPLandroid/view/View;->getFocusableAttribute(Landroid/content/res/TypedArray;)I
+HSPLandroid/view/View;->getFocusableAttribute(Landroid/content/res/TypedArray;)I+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/view/View;->getFocusedRect(Landroid/graphics/Rect;)V
 HSPLandroid/view/View;->getForeground()Landroid/graphics/drawable/Drawable;
 HSPLandroid/view/View;->getForegroundGravity()I
@@ -17069,9 +17079,9 @@
 HSPLandroid/view/View;->getListenerInfo()Landroid/view/View$ListenerInfo;
 HSPLandroid/view/View;->getLocalVisibleRect(Landroid/graphics/Rect;)Z
 HSPLandroid/view/View;->getLocationInSurface([I)V
-HSPLandroid/view/View;->getLocationInWindow([I)V
+HSPLandroid/view/View;->getLocationInWindow([I)V+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->getLocationOnScreen()[I
-HSPLandroid/view/View;->getLocationOnScreen([I)V
+HSPLandroid/view/View;->getLocationOnScreen([I)V+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->getMatrix()Landroid/graphics/Matrix;+]Landroid/view/View;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->getMeasuredHeight()I
 HSPLandroid/view/View;->getMeasuredState()I
@@ -17083,15 +17093,15 @@
 HSPLandroid/view/View;->getOutlineProvider()Landroid/view/ViewOutlineProvider;
 HSPLandroid/view/View;->getOverScrollMode()I
 HSPLandroid/view/View;->getPaddingBottom()I
-HSPLandroid/view/View;->getPaddingEnd()I
-HSPLandroid/view/View;->getPaddingLeft()I
+HSPLandroid/view/View;->getPaddingEnd()I+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->getPaddingLeft()I+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->getPaddingRight()I
-HSPLandroid/view/View;->getPaddingStart()I
+HSPLandroid/view/View;->getPaddingStart()I+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->getPaddingTop()I
 HSPLandroid/view/View;->getParent()Landroid/view/ViewParent;
 HSPLandroid/view/View;->getPivotX()F
 HSPLandroid/view/View;->getPivotY()F
-HSPLandroid/view/View;->getProjectionReceiver()Landroid/view/View;
+HSPLandroid/view/View;->getProjectionReceiver()Landroid/view/View;+]Landroid/view/ViewParent;missing_types
 HSPLandroid/view/View;->getRawLayoutDirection()I
 HSPLandroid/view/View;->getRawTextAlignment()I
 HSPLandroid/view/View;->getRawTextDirection()I
@@ -17110,12 +17120,12 @@
 HSPLandroid/view/View;->getScrollY()I
 HSPLandroid/view/View;->getSolidColor()I
 HSPLandroid/view/View;->getStraightVerticalScrollBarBounds(Landroid/graphics/Rect;Landroid/graphics/Rect;)V+]Landroid/view/View;missing_types
-HSPLandroid/view/View;->getSuggestedMinimumHeight()I
-HSPLandroid/view/View;->getSuggestedMinimumWidth()I
+HSPLandroid/view/View;->getSuggestedMinimumHeight()I+]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/view/View;->getSuggestedMinimumWidth()I+]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/view/View;->getSystemGestureExclusionRects()Ljava/util/List;
 HSPLandroid/view/View;->getSystemUiVisibility()I
 HSPLandroid/view/View;->getTag()Ljava/lang/Object;
-HSPLandroid/view/View;->getTag(I)Ljava/lang/Object;
+HSPLandroid/view/View;->getTag(I)Ljava/lang/Object;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLandroid/view/View;->getTextAlignment()I
 HSPLandroid/view/View;->getTextDirection()I
 HSPLandroid/view/View;->getThreadedRenderer()Landroid/view/ThreadedRenderer;
@@ -17124,9 +17134,9 @@
 HSPLandroid/view/View;->getTransitionName()Ljava/lang/String;
 HSPLandroid/view/View;->getTranslationX()F+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->getTranslationY()F+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
-HSPLandroid/view/View;->getTranslationZ()F
+HSPLandroid/view/View;->getTranslationZ()F+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->getVerticalFadingEdgeLength()I
-HSPLandroid/view/View;->getVerticalScrollbarWidth()I
+HSPLandroid/view/View;->getVerticalScrollbarWidth()I+]Landroid/widget/ScrollBarDrawable;Landroid/widget/ScrollBarDrawable;
 HSPLandroid/view/View;->getViewRootImpl()Landroid/view/ViewRootImpl;
 HSPLandroid/view/View;->getViewTranslationCallback()Landroid/view/translation/ViewTranslationCallback;
 HSPLandroid/view/View;->getViewTreeObserver()Landroid/view/ViewTreeObserver;
@@ -17141,48 +17151,49 @@
 HSPLandroid/view/View;->getWindowVisibleDisplayFrame(Landroid/graphics/Rect;)V
 HSPLandroid/view/View;->getX()F
 HSPLandroid/view/View;->getY()F
-HSPLandroid/view/View;->getZ()F
+HSPLandroid/view/View;->getZ()F+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->handleFocusGainInternal(ILandroid/graphics/Rect;)V
-HSPLandroid/view/View;->handleScrollBarDragging(Landroid/view/MotionEvent;)Z
+HSPLandroid/view/View;->handleScrollBarDragging(Landroid/view/MotionEvent;)Z+]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/View;->hasAncestorThatBlocksDescendantFocus()Z
-HSPLandroid/view/View;->hasDefaultFocus()Z
+HSPLandroid/view/View;->hasDefaultFocus()Z+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->hasExplicitFocusable()Z
 HSPLandroid/view/View;->hasFocus()Z
-HSPLandroid/view/View;->hasFocusable()Z
-HSPLandroid/view/View;->hasFocusable(ZZ)Z
+HSPLandroid/view/View;->hasFocusable()Z+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->hasFocusable(ZZ)Z+]Landroid/view/ViewGroup;missing_types]Landroid/view/ViewParent;missing_types]Landroid/view/View;missing_types
 HSPLandroid/view/View;->hasIdentityMatrix()Z+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->hasImeFocus()Z
-HSPLandroid/view/View;->hasListenersForAccessibility()Z
+HSPLandroid/view/View;->hasListenersForAccessibility()Z+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->hasNestedScrollingParent()Z
 HSPLandroid/view/View;->hasOnClickListeners()Z
 HSPLandroid/view/View;->hasOverlappingRendering()Z
-HSPLandroid/view/View;->hasRtlSupport()Z
+HSPLandroid/view/View;->hasRtlSupport()Z+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/content/Context;missing_types
 HSPLandroid/view/View;->hasSize()Z
 HSPLandroid/view/View;->hasTransientState()Z
+HSPLandroid/view/View;->hasTranslationTransientState()Z
 HSPLandroid/view/View;->hasUnhandledKeyListener()Z
 HSPLandroid/view/View;->hasWindowFocus()Z
 HSPLandroid/view/View;->hasWindowInsetsAnimationCallback()Z
 HSPLandroid/view/View;->hideAutofillHighlight()Z
 HSPLandroid/view/View;->hideTooltip()V
-HSPLandroid/view/View;->includeForAccessibility()Z
+HSPLandroid/view/View;->includeForAccessibility()Z+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->inflate(Landroid/content/Context;ILandroid/view/ViewGroup;)Landroid/view/View;
 HSPLandroid/view/View;->initScrollCache()V
-HSPLandroid/view/View;->initialAwakenScrollBars()Z
+HSPLandroid/view/View;->initialAwakenScrollBars()Z+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->initializeFadingEdgeInternal(Landroid/content/res/TypedArray;)V
 HSPLandroid/view/View;->initializeScrollIndicatorsInternal()V
-HSPLandroid/view/View;->initializeScrollbarsInternal(Landroid/content/res/TypedArray;)V
+HSPLandroid/view/View;->initializeScrollbarsInternal(Landroid/content/res/TypedArray;)V+]Landroid/view/View;missing_types]Landroid/widget/ScrollBarDrawable;Landroid/widget/ScrollBarDrawable;]Landroid/view/ViewConfiguration;Landroid/view/ViewConfiguration;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;
 HSPLandroid/view/View;->internalSetPadding(IIII)V+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->invalidate()V+]Landroid/view/View;missing_types
-HSPLandroid/view/View;->invalidate(IIII)V
-HSPLandroid/view/View;->invalidate(Landroid/graphics/Rect;)V
-HSPLandroid/view/View;->invalidate(Z)V+]Landroid/view/View;missing_types
-HSPLandroid/view/View;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/view/View;megamorphic_types]Landroid/graphics/drawable/Drawable;missing_types
-HSPLandroid/view/View;->invalidateInternal(IIIIZZ)V+]Landroid/view/View;megamorphic_types]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/Drawable;missing_types]Landroid/view/ViewParent;missing_types
-HSPLandroid/view/View;->invalidateOutline()V
+HSPLandroid/view/View;->invalidate(IIII)V+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->invalidate(Landroid/graphics/Rect;)V+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->invalidate(Z)V+]Landroid/view/View;megamorphic_types
+HSPLandroid/view/View;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/view/View;megamorphic_types]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/view/View;->invalidateInternal(IIIIZZ)V+]Landroid/view/View;megamorphic_types]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewParent;megamorphic_types]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/view/View;->invalidateOutline()V+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->invalidateParentCaches()V
 HSPLandroid/view/View;->invalidateParentIfNeeded()V
 HSPLandroid/view/View;->invalidateParentIfNeededAndWasQuickRejected()V
-HSPLandroid/view/View;->invalidateViewProperty(ZZ)V+]Landroid/view/View;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
+HSPLandroid/view/View;->invalidateViewProperty(ZZ)V+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Landroid/view/View;missing_types
 HSPLandroid/view/View;->isAccessibilityFocused()Z
 HSPLandroid/view/View;->isAccessibilityFocusedViewOrHost()Z
 HSPLandroid/view/View;->isAccessibilityPane()Z
@@ -17191,7 +17202,7 @@
 HSPLandroid/view/View;->isAggregatedVisible()Z
 HSPLandroid/view/View;->isAttachedToWindow()Z
 HSPLandroid/view/View;->isAutoHandwritingEnabled()Z
-HSPLandroid/view/View;->isAutofillable()Z+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->isAutofillable()Z+]Landroid/view/View;missing_types]Landroid/content/AutofillOptions;Landroid/content/AutofillOptions;]Landroid/view/autofill/AutofillManager;Landroid/view/autofill/AutofillManager;
 HSPLandroid/view/View;->isAutofilled()Z
 HSPLandroid/view/View;->isClickable()Z
 HSPLandroid/view/View;->isContextClickable()Z
@@ -17208,7 +17219,7 @@
 HSPLandroid/view/View;->isHorizontalFadingEdgeEnabled()Z
 HSPLandroid/view/View;->isHorizontalScrollBarEnabled()Z
 HSPLandroid/view/View;->isImportantForAccessibility()Z+]Landroid/view/View;megamorphic_types]Landroid/view/ViewParent;missing_types
-HSPLandroid/view/View;->isImportantForAutofill()Z
+HSPLandroid/view/View;->isImportantForAutofill()Z+]Landroid/view/View;missing_types]Landroid/view/ViewParent;missing_types
 HSPLandroid/view/View;->isImportantForContentCapture()Z
 HSPLandroid/view/View;->isInEditMode()Z
 HSPLandroid/view/View;->isInLayout()Z
@@ -17216,12 +17227,12 @@
 HSPLandroid/view/View;->isInTouchMode()Z
 HSPLandroid/view/View;->isKeyboardNavigationCluster()Z
 HSPLandroid/view/View;->isLaidOut()Z
-HSPLandroid/view/View;->isLayoutDirectionInherited()Z
+HSPLandroid/view/View;->isLayoutDirectionInherited()Z+]Landroid/view/View;megamorphic_types
 HSPLandroid/view/View;->isLayoutDirectionResolved()Z
 HSPLandroid/view/View;->isLayoutModeOptical(Ljava/lang/Object;)Z+]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/View;->isLayoutRequested()Z
-HSPLandroid/view/View;->isLayoutRtl()Z
-HSPLandroid/view/View;->isLayoutValid()Z
+HSPLandroid/view/View;->isLayoutRtl()Z+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->isLayoutValid()Z+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->isLongClickable()Z
 HSPLandroid/view/View;->isNestedScrollingEnabled()Z
 HSPLandroid/view/View;->isOpaque()Z
@@ -17229,25 +17240,25 @@
 HSPLandroid/view/View;->isPressed()Z
 HSPLandroid/view/View;->isProjectionReceiver()Z
 HSPLandroid/view/View;->isRootNamespace()Z
-HSPLandroid/view/View;->isRtlCompatibilityMode()Z
+HSPLandroid/view/View;->isRtlCompatibilityMode()Z+]Landroid/view/View;missing_types]Landroid/content/Context;missing_types
 HSPLandroid/view/View;->isSelected()Z
 HSPLandroid/view/View;->isShowingLayoutBounds()Z
 HSPLandroid/view/View;->isShown()Z
 HSPLandroid/view/View;->isSoundEffectsEnabled()Z
 HSPLandroid/view/View;->isTemporarilyDetached()Z
-HSPLandroid/view/View;->isTextAlignmentInherited()Z
+HSPLandroid/view/View;->isTextAlignmentInherited()Z+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->isTextAlignmentResolved()Z
-HSPLandroid/view/View;->isTextDirectionInherited()Z
+HSPLandroid/view/View;->isTextDirectionInherited()Z+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->isTextDirectionResolved()Z
 HSPLandroid/view/View;->isVerticalFadingEdgeEnabled()Z
 HSPLandroid/view/View;->isVerticalScrollBarEnabled()Z
 HSPLandroid/view/View;->isVerticalScrollBarHidden()Z
 HSPLandroid/view/View;->isViewIdGenerated(I)Z
 HSPLandroid/view/View;->isVisibleToUser()Z
-HSPLandroid/view/View;->isVisibleToUser(Landroid/graphics/Rect;)Z
-HSPLandroid/view/View;->jumpDrawablesToCurrentState()V+]Landroid/animation/StateListAnimator;Landroid/animation/StateListAnimator;]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/view/View;->isVisibleToUser(Landroid/graphics/Rect;)Z+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->jumpDrawablesToCurrentState()V+]Landroid/graphics/drawable/Drawable;missing_types]Landroid/animation/StateListAnimator;Landroid/animation/StateListAnimator;
 HSPLandroid/view/View;->lambda$updatePositionUpdateListener$2$android-view-View()V+]Landroid/view/View;missing_types
-HSPLandroid/view/View;->layout(IIII)V
+HSPLandroid/view/View;->layout(IIII)V+]Landroid/view/View;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/View$OnLayoutChangeListener;missing_types
 HSPLandroid/view/View;->makeFrameworkOptionalFitsSystemWindows()V
 HSPLandroid/view/View;->makeOptionalFitsSystemWindows()V
 HSPLandroid/view/View;->mapRectFromViewToScreenCoords(Landroid/graphics/RectF;Z)V+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/view/View;missing_types]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
@@ -17255,34 +17266,34 @@
 HSPLandroid/view/View;->mergeDrawableStates([I[I)[I
 HSPLandroid/view/View;->needGlobalAttributesUpdate(Z)V
 HSPLandroid/view/View;->needRtlPropertiesResolution()Z
-HSPLandroid/view/View;->notifyAppearedOrDisappearedForContentCaptureIfNeeded(Z)V+]Landroid/view/View;megamorphic_types]Landroid/content/Context;missing_types
+HSPLandroid/view/View;->notifyAppearedOrDisappearedForContentCaptureIfNeeded(Z)V+]Landroid/content/Context;missing_types]Landroid/view/View;megamorphic_types
 HSPLandroid/view/View;->notifyAutofillManagerOnClick()V
-HSPLandroid/view/View;->notifyEnterOrExitForAutoFillIfNeeded(Z)V
+HSPLandroid/view/View;->notifyEnterOrExitForAutoFillIfNeeded(Z)V+]Landroid/view/View;missing_types]Landroid/view/autofill/AutofillManager;Landroid/view/autofill/AutofillManager;
 HSPLandroid/view/View;->notifyGlobalFocusCleared(Landroid/view/View;)V
 HSPLandroid/view/View;->notifySubtreeAccessibilityStateChangedByParentIfNeeded()V
-HSPLandroid/view/View;->notifySubtreeAccessibilityStateChangedIfNeeded()V
-HSPLandroid/view/View;->notifyViewAccessibilityStateChangedIfNeeded(I)V
-HSPLandroid/view/View;->offsetLeftAndRight(I)V
-HSPLandroid/view/View;->offsetTopAndBottom(I)V
+HSPLandroid/view/View;->notifySubtreeAccessibilityStateChangedIfNeeded()V+]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;
+HSPLandroid/view/View;->notifyViewAccessibilityStateChangedIfNeeded(I)V+]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;
+HSPLandroid/view/View;->offsetLeftAndRight(I)V+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
+HSPLandroid/view/View;->offsetTopAndBottom(I)V+]Landroid/view/View;megamorphic_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->onAnimationEnd()V
 HSPLandroid/view/View;->onAnimationStart()V
 HSPLandroid/view/View;->onApplyFrameworkOptionalFitSystemWindows(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;
 HSPLandroid/view/View;->onApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;+]Landroid/view/View;missing_types]Landroid/view/WindowInsets;Landroid/view/WindowInsets;
-HSPLandroid/view/View;->onAttachedToWindow()V
+HSPLandroid/view/View;->onAttachedToWindow()V+]Landroid/view/accessibility/AccessibilityNodeIdManager;Landroid/view/accessibility/AccessibilityNodeIdManager;]Landroid/view/View;megamorphic_types]Landroid/view/ViewParent;missing_types
 HSPLandroid/view/View;->onCancelPendingInputEvents()V
 HSPLandroid/view/View;->onCheckIsTextEditor()Z
 HSPLandroid/view/View;->onCloseSystemDialogs(Ljava/lang/String;)V
 HSPLandroid/view/View;->onConfigurationChanged(Landroid/content/res/Configuration;)V
-HSPLandroid/view/View;->onCreateDrawableState(I)[I+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->onCreateDrawableState(I)[I+]Landroid/view/View;megamorphic_types
 HSPLandroid/view/View;->onCreateInputConnection(Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection;
 HSPLandroid/view/View;->onDetachedFromWindow()V
-HSPLandroid/view/View;->onDetachedFromWindowInternal()V
+HSPLandroid/view/View;->onDetachedFromWindowInternal()V+]Landroid/view/accessibility/AccessibilityNodeIdManager;Landroid/view/accessibility/AccessibilityNodeIdManager;]Landroid/view/View;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->onDraw(Landroid/graphics/Canvas;)V
-HSPLandroid/view/View;->onDrawForeground(Landroid/graphics/Canvas;)V+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->onDrawForeground(Landroid/graphics/Canvas;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/Drawable;missing_types]Landroid/view/View;missing_types
 HSPLandroid/view/View;->onDrawHorizontalScrollBar(Landroid/graphics/Canvas;Landroid/graphics/drawable/Drawable;IIII)V
 HSPLandroid/view/View;->onDrawScrollBars(Landroid/graphics/Canvas;)V+]Landroid/graphics/Interpolator;Landroid/graphics/Interpolator;]Landroid/view/View;missing_types]Landroid/widget/ScrollBarDrawable;Landroid/widget/ScrollBarDrawable;
-HSPLandroid/view/View;->onDrawScrollIndicators(Landroid/graphics/Canvas;)V
-HSPLandroid/view/View;->onDrawVerticalScrollBar(Landroid/graphics/Canvas;Landroid/graphics/drawable/Drawable;IIII)V
+HSPLandroid/view/View;->onDrawScrollIndicators(Landroid/graphics/Canvas;)V+]Landroid/view/View;Landroid/widget/ScrollView;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;
+HSPLandroid/view/View;->onDrawVerticalScrollBar(Landroid/graphics/Canvas;Landroid/graphics/drawable/Drawable;IIII)V+]Landroid/graphics/drawable/Drawable;Landroid/widget/ScrollBarDrawable;
 HSPLandroid/view/View;->onFilterTouchEventForSecurity(Landroid/view/MotionEvent;)Z
 HSPLandroid/view/View;->onFinishInflate()V
 HSPLandroid/view/View;->onFinishTemporaryDetach()V
@@ -17296,23 +17307,23 @@
 HSPLandroid/view/View;->onProvideAutofillStructure(Landroid/view/ViewStructure;I)V
 HSPLandroid/view/View;->onProvideAutofillVirtualStructure(Landroid/view/ViewStructure;I)V
 HSPLandroid/view/View;->onProvideContentCaptureStructure(Landroid/view/ViewStructure;I)V
-HSPLandroid/view/View;->onProvideStructure(Landroid/view/ViewStructure;II)V+]Landroid/view/View;missing_types]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/view/ViewStructure;Landroid/view/contentcapture/ViewNode$ViewStructureImpl;]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLandroid/view/View;->onProvideStructure(Landroid/view/ViewStructure;II)V+]Landroid/view/View;missing_types]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/view/ViewStructure;Landroid/view/contentcapture/ViewNode$ViewStructureImpl;,Landroid/app/assist/AssistStructure$ViewNodeBuilder;]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/view/View;->onResolveDrawables(I)V
 HSPLandroid/view/View;->onRestoreInstanceState(Landroid/os/Parcelable;)V
 HSPLandroid/view/View;->onRtlPropertiesChanged(I)V
-HSPLandroid/view/View;->onSaveInstanceState()Landroid/os/Parcelable;
+HSPLandroid/view/View;->onSaveInstanceState()Landroid/os/Parcelable;+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->onScreenStateChanged(I)V
 HSPLandroid/view/View;->onScrollChanged(IIII)V
 HSPLandroid/view/View;->onSetAlpha(I)Z
 HSPLandroid/view/View;->onSizeChanged(IIII)V
 HSPLandroid/view/View;->onStartTemporaryDetach()V
-HSPLandroid/view/View;->onTouchEvent(Landroid/view/MotionEvent;)Z
-HSPLandroid/view/View;->onVisibilityAggregated(Z)V+]Landroid/view/View;megamorphic_types]Ljava/util/List;Ljava/util/Collections$EmptyList;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/RippleDrawable;,Landroid/graphics/drawable/ColorDrawable;,Landroid/graphics/drawable/LayerDrawable;,Landroid/graphics/drawable/StateListDrawable;]Landroid/os/Handler;Landroid/view/View$VisibilityChangeForAutofillHandler;]Landroid/os/Message;Landroid/os/Message;
+HSPLandroid/view/View;->onTouchEvent(Landroid/view/MotionEvent;)Z+]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
+HSPLandroid/view/View;->onVisibilityAggregated(Z)V+]Landroid/view/View;megamorphic_types]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Landroid/graphics/drawable/Drawable;megamorphic_types]Landroid/os/Handler;Landroid/view/View$VisibilityChangeForAutofillHandler;]Landroid/os/Message;Landroid/os/Message;]Landroid/view/autofill/AutofillManager;Landroid/view/autofill/AutofillManager;
 HSPLandroid/view/View;->onVisibilityChanged(Landroid/view/View;I)V
-HSPLandroid/view/View;->onWindowFocusChanged(Z)V
+HSPLandroid/view/View;->onWindowFocusChanged(Z)V+]Landroid/view/View;megamorphic_types
 HSPLandroid/view/View;->onWindowSystemUiVisibilityChanged(I)V
 HSPLandroid/view/View;->onWindowVisibilityChanged(I)V
-HSPLandroid/view/View;->overScrollBy(IIIIIIIIZ)Z
+HSPLandroid/view/View;->overScrollBy(IIIIIIIIZ)Z+]Landroid/view/View;Landroid/webkit/WebView;
 HSPLandroid/view/View;->performButtonActionOnTouchDown(Landroid/view/MotionEvent;)Z
 HSPLandroid/view/View;->performClick()Z
 HSPLandroid/view/View;->performCollectViewAttributes(Landroid/view/View$AttachInfo;I)V
@@ -17324,20 +17335,20 @@
 HSPLandroid/view/View;->playSoundEffect(I)V
 HSPLandroid/view/View;->pointInView(FF)Z
 HSPLandroid/view/View;->pointInView(FFF)Z
-HSPLandroid/view/View;->post(Ljava/lang/Runnable;)Z
+HSPLandroid/view/View;->post(Ljava/lang/Runnable;)Z+]Landroid/os/Handler;Landroid/view/ViewRootImpl$ViewRootHandler;
 HSPLandroid/view/View;->postDelayed(Ljava/lang/Runnable;J)Z
 HSPLandroid/view/View;->postInvalidate()V
 HSPLandroid/view/View;->postInvalidateDelayed(J)V
 HSPLandroid/view/View;->postInvalidateOnAnimation()V
-HSPLandroid/view/View;->postOnAnimation(Ljava/lang/Runnable;)V
+HSPLandroid/view/View;->postOnAnimation(Ljava/lang/Runnable;)V+]Landroid/view/Choreographer;Landroid/view/Choreographer;
 HSPLandroid/view/View;->postOnAnimationDelayed(Ljava/lang/Runnable;J)V
-HSPLandroid/view/View;->postSendViewScrolledAccessibilityEventCallback(II)V
+HSPLandroid/view/View;->postSendViewScrolledAccessibilityEventCallback(II)V+]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;
 HSPLandroid/view/View;->postUpdate(Ljava/lang/Runnable;)V+]Landroid/os/Handler;Landroid/view/ViewRootImpl$ViewRootHandler;
-HSPLandroid/view/View;->rebuildOutline()V+]Landroid/view/ViewOutlineProvider;Landroid/view/ViewOutlineProvider$1;,Landroid/view/ViewOutlineProvider$2;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Landroid/graphics/Outline;Landroid/graphics/Outline;
+HSPLandroid/view/View;->rebuildOutline()V+]Landroid/view/ViewOutlineProvider;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Landroid/graphics/Outline;Landroid/graphics/Outline;
 HSPLandroid/view/View;->recomputePadding()V
-HSPLandroid/view/View;->refreshDrawableState()V
+HSPLandroid/view/View;->refreshDrawableState()V+]Landroid/view/View;missing_types]Landroid/view/ViewParent;missing_types
 HSPLandroid/view/View;->registerPendingFrameMetricsObservers()V
-HSPLandroid/view/View;->removeCallbacks(Ljava/lang/Runnable;)Z
+HSPLandroid/view/View;->removeCallbacks(Ljava/lang/Runnable;)Z+]Landroid/os/Handler;Landroid/view/ViewRootImpl$ViewRootHandler;]Landroid/view/HandlerActionQueue;Landroid/view/HandlerActionQueue;]Landroid/view/Choreographer;Landroid/view/Choreographer;
 HSPLandroid/view/View;->removeFrameMetricsListener(Landroid/view/Window$OnFrameMetricsAvailableListener;)V
 HSPLandroid/view/View;->removeLongPressCallback()V
 HSPLandroid/view/View;->removeOnAttachStateChangeListener(Landroid/view/View$OnAttachStateChangeListener;)V
@@ -17351,30 +17362,30 @@
 HSPLandroid/view/View;->requestFocus(I)Z
 HSPLandroid/view/View;->requestFocus(ILandroid/graphics/Rect;)Z
 HSPLandroid/view/View;->requestFocusNoSearch(ILandroid/graphics/Rect;)Z
-HSPLandroid/view/View;->requestLayout()V+]Landroid/view/View;missing_types]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/ViewParent;missing_types]Landroid/util/LongSparseLongArray;Landroid/util/LongSparseLongArray;
+HSPLandroid/view/View;->requestLayout()V+]Landroid/view/View;megamorphic_types]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/ViewParent;megamorphic_types]Landroid/util/LongSparseLongArray;Landroid/util/LongSparseLongArray;
 HSPLandroid/view/View;->requestRectangleOnScreen(Landroid/graphics/Rect;)Z
-HSPLandroid/view/View;->requestRectangleOnScreen(Landroid/graphics/Rect;Z)Z
+HSPLandroid/view/View;->requestRectangleOnScreen(Landroid/graphics/Rect;Z)Z+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/view/View;missing_types]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewParent;missing_types
 HSPLandroid/view/View;->requireViewById(I)Landroid/view/View;
-HSPLandroid/view/View;->resetDisplayList()V
+HSPLandroid/view/View;->resetDisplayList()V+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->resetPressedState()V
-HSPLandroid/view/View;->resetResolvedDrawables()V
+HSPLandroid/view/View;->resetResolvedDrawables()V+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->resetResolvedDrawablesInternal()V
 HSPLandroid/view/View;->resetResolvedLayoutDirection()V
-HSPLandroid/view/View;->resetResolvedPadding()V
+HSPLandroid/view/View;->resetResolvedPadding()V+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->resetResolvedPaddingInternal()V
 HSPLandroid/view/View;->resetResolvedTextAlignment()V
 HSPLandroid/view/View;->resetResolvedTextDirection()V
-HSPLandroid/view/View;->resetRtlProperties()V
+HSPLandroid/view/View;->resetRtlProperties()V+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->resetSubtreeAccessibilityStateChanged()V
-HSPLandroid/view/View;->resolveDrawables()V
-HSPLandroid/view/View;->resolveLayoutDirection()Z
-HSPLandroid/view/View;->resolveLayoutParams()V
-HSPLandroid/view/View;->resolvePadding()V+]Landroid/view/View;missing_types]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/ColorDrawable;
-HSPLandroid/view/View;->resolveRtlPropertiesIfNeeded()Z
+HSPLandroid/view/View;->resolveDrawables()V+]Landroid/view/View;missing_types]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/view/View;->resolveLayoutDirection()Z+]Landroid/view/View;missing_types]Landroid/view/ViewParent;missing_types
+HSPLandroid/view/View;->resolveLayoutParams()V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup$LayoutParams;missing_types
+HSPLandroid/view/View;->resolvePadding()V+]Landroid/view/View;megamorphic_types]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/view/View;->resolveRtlPropertiesIfNeeded()Z+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->resolveSize(II)I
 HSPLandroid/view/View;->resolveSizeAndState(III)I
-HSPLandroid/view/View;->resolveTextAlignment()Z
-HSPLandroid/view/View;->resolveTextDirection()Z
+HSPLandroid/view/View;->resolveTextAlignment()Z+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->resolveTextDirection()Z+]Landroid/view/View;megamorphic_types]Landroid/view/ViewParent;missing_types
 HSPLandroid/view/View;->restoreHierarchyState(Landroid/util/SparseArray;)V
 HSPLandroid/view/View;->retrieveExplicitStyle(Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;)V
 HSPLandroid/view/View;->rootViewRequestFocus()Z
@@ -17382,9 +17393,9 @@
 HSPLandroid/view/View;->sanitizeFloatPropertyValue(FLjava/lang/String;FF)F
 HSPLandroid/view/View;->saveAttributeDataForStyleable(Landroid/content/Context;[ILandroid/util/AttributeSet;Landroid/content/res/TypedArray;II)V
 HSPLandroid/view/View;->saveHierarchyState(Landroid/util/SparseArray;)V
-HSPLandroid/view/View;->scheduleDrawable(Landroid/graphics/drawable/Drawable;Ljava/lang/Runnable;J)V
+HSPLandroid/view/View;->scheduleDrawable(Landroid/graphics/drawable/Drawable;Ljava/lang/Runnable;J)V+]Landroid/view/HandlerActionQueue;Landroid/view/HandlerActionQueue;]Landroid/view/Choreographer;Landroid/view/Choreographer;
 HSPLandroid/view/View;->scrollBy(II)V
-HSPLandroid/view/View;->scrollTo(II)V
+HSPLandroid/view/View;->scrollTo(II)V+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->sendAccessibilityEvent(I)V
 HSPLandroid/view/View;->sendAccessibilityEventInternal(I)V
 HSPLandroid/view/View;->setAccessibilityDelegate(Landroid/view/View$AccessibilityDelegate;)V
@@ -17394,15 +17405,15 @@
 HSPLandroid/view/View;->setAccessibilityTraversalAfter(I)V
 HSPLandroid/view/View;->setAccessibilityTraversalBefore(I)V
 HSPLandroid/view/View;->setActivated(Z)V
-HSPLandroid/view/View;->setAlpha(F)V+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
-HSPLandroid/view/View;->setAlphaInternal(F)V
-HSPLandroid/view/View;->setAlphaNoInvalidation(F)Z
+HSPLandroid/view/View;->setAlpha(F)V+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Landroid/view/View;missing_types
+HSPLandroid/view/View;->setAlphaInternal(F)V+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->setAlphaNoInvalidation(F)Z+]Landroid/view/View;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->setAnimation(Landroid/view/animation/Animation;)V
 HSPLandroid/view/View;->setAutofilled(ZZ)V
 HSPLandroid/view/View;->setBackground(Landroid/graphics/drawable/Drawable;)V
-HSPLandroid/view/View;->setBackgroundBounds()V
+HSPLandroid/view/View;->setBackgroundBounds()V+]Landroid/graphics/drawable/Drawable;megamorphic_types
 HSPLandroid/view/View;->setBackgroundColor(I)V
-HSPLandroid/view/View;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/view/View;missing_types]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/RippleDrawable;,Landroid/graphics/drawable/ColorDrawable;,Landroid/graphics/drawable/StateListDrawable;
+HSPLandroid/view/View;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;]Landroid/graphics/drawable/Drawable;megamorphic_types]Landroid/view/View;missing_types
 HSPLandroid/view/View;->setBackgroundRenderNodeProperties(Landroid/graphics/RenderNode;)V+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->setBackgroundResource(I)V
 HSPLandroid/view/View;->setBackgroundTintList(Landroid/content/res/ColorStateList;)V
@@ -17410,28 +17421,28 @@
 HSPLandroid/view/View;->setClickable(Z)V
 HSPLandroid/view/View;->setClipBounds(Landroid/graphics/Rect;)V
 HSPLandroid/view/View;->setClipToOutline(Z)V
-HSPLandroid/view/View;->setContentDescription(Ljava/lang/CharSequence;)V
+HSPLandroid/view/View;->setContentDescription(Ljava/lang/CharSequence;)V+]Landroid/view/View;missing_types]Ljava/lang/Object;Ljava/lang/String;,Ljava/lang/StringBuilder;]Ljava/lang/CharSequence;Ljava/lang/String;,Ljava/lang/StringBuilder;
 HSPLandroid/view/View;->setDefaultFocusHighlightEnabled(Z)V
 HSPLandroid/view/View;->setDetached(Z)V
 HSPLandroid/view/View;->setDisplayListProperties(Landroid/graphics/RenderNode;)V+]Landroid/view/View;megamorphic_types]Landroid/view/ViewGroup;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->setDrawingCacheEnabled(Z)V
-HSPLandroid/view/View;->setElevation(F)V
+HSPLandroid/view/View;->setElevation(F)V+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->setEnabled(Z)V
 HSPLandroid/view/View;->setFitsSystemWindows(Z)V
-HSPLandroid/view/View;->setFlags(II)V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;]Landroid/view/ViewParent;missing_types
+HSPLandroid/view/View;->setFlags(II)V+]Landroid/view/View;megamorphic_types]Landroid/view/ViewGroup;missing_types]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;]Landroid/view/ViewParent;missing_types
 HSPLandroid/view/View;->setFocusable(I)V
 HSPLandroid/view/View;->setFocusable(Z)V
 HSPLandroid/view/View;->setFocusableInTouchMode(Z)V
-HSPLandroid/view/View;->setForeground(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/view/View;->setForeground(Landroid/graphics/drawable/Drawable;)V+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;,Landroid/graphics/drawable/StateListDrawable;,Landroid/graphics/drawable/InsetDrawable;]Landroid/view/View;missing_types
 HSPLandroid/view/View;->setForegroundGravity(I)V
-HSPLandroid/view/View;->setFrame(IIII)Z
+HSPLandroid/view/View;->setFrame(IIII)Z+]Landroid/view/View;megamorphic_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->setHandwritingArea(Landroid/graphics/Rect;)V
 HSPLandroid/view/View;->setHapticFeedbackEnabled(Z)V
 HSPLandroid/view/View;->setHasTransientState(Z)V
 HSPLandroid/view/View;->setHorizontalFadingEdgeEnabled(Z)V
 HSPLandroid/view/View;->setHorizontalScrollBarEnabled(Z)V
 HSPLandroid/view/View;->setId(I)V
-HSPLandroid/view/View;->setImportantForAccessibility(I)V
+HSPLandroid/view/View;->setImportantForAccessibility(I)V+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->setImportantForAutofill(I)V
 HSPLandroid/view/View;->setImportantForContentCapture(I)V
 HSPLandroid/view/View;->setIsRootNamespace(Z)V
@@ -17441,7 +17452,7 @@
 HSPLandroid/view/View;->setLayerPaint(Landroid/graphics/Paint;)V
 HSPLandroid/view/View;->setLayerType(ILandroid/graphics/Paint;)V
 HSPLandroid/view/View;->setLayoutDirection(I)V
-HSPLandroid/view/View;->setLayoutParams(Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/view/View;->setLayoutParams(Landroid/view/ViewGroup$LayoutParams;)V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/View;->setLeft(I)V+]Landroid/view/View;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->setLeftTopRightBottom(IIII)V
 HSPLandroid/view/View;->setLongClickable(Z)V
@@ -17451,7 +17462,7 @@
 HSPLandroid/view/View;->setMinimumWidth(I)V
 HSPLandroid/view/View;->setNotifiedContentCaptureAppeared()V
 HSPLandroid/view/View;->setOnApplyWindowInsetsListener(Landroid/view/View$OnApplyWindowInsetsListener;)V
-HSPLandroid/view/View;->setOnClickListener(Landroid/view/View$OnClickListener;)V
+HSPLandroid/view/View;->setOnClickListener(Landroid/view/View$OnClickListener;)V+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->setOnCreateContextMenuListener(Landroid/view/View$OnCreateContextMenuListener;)V
 HSPLandroid/view/View;->setOnDragListener(Landroid/view/View$OnDragListener;)V
 HSPLandroid/view/View;->setOnFocusChangeListener(Landroid/view/View$OnFocusChangeListener;)V
@@ -17461,12 +17472,12 @@
 HSPLandroid/view/View;->setOnScrollChangeListener(Landroid/view/View$OnScrollChangeListener;)V
 HSPLandroid/view/View;->setOnSystemUiVisibilityChangeListener(Landroid/view/View$OnSystemUiVisibilityChangeListener;)V
 HSPLandroid/view/View;->setOnTouchListener(Landroid/view/View$OnTouchListener;)V
-HSPLandroid/view/View;->setOutlineAmbientShadowColor(I)V
+HSPLandroid/view/View;->setOutlineAmbientShadowColor(I)V+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->setOutlineProvider(Landroid/view/ViewOutlineProvider;)V
 HSPLandroid/view/View;->setOutlineProviderFromAttribute(I)V
-HSPLandroid/view/View;->setOutlineSpotShadowColor(I)V
+HSPLandroid/view/View;->setOutlineSpotShadowColor(I)V+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->setOverScrollMode(I)V
-HSPLandroid/view/View;->setPadding(IIII)V
+HSPLandroid/view/View;->setPadding(IIII)V+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->setPaddingRelative(IIII)V
 HSPLandroid/view/View;->setPivotX(F)V
 HSPLandroid/view/View;->setPivotY(F)V
@@ -17480,7 +17491,7 @@
 HSPLandroid/view/View;->setSaveEnabled(Z)V
 HSPLandroid/view/View;->setSaveFromParentEnabled(Z)V
 HSPLandroid/view/View;->setScaleX(F)V
-HSPLandroid/view/View;->setScaleY(F)V
+HSPLandroid/view/View;->setScaleY(F)V+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->setScrollContainer(Z)V
 HSPLandroid/view/View;->setScrollIndicators(II)V
 HSPLandroid/view/View;->setScrollX(I)V
@@ -17498,7 +17509,7 @@
 HSPLandroid/view/View;->setTooltipText(Ljava/lang/CharSequence;)V+]Landroid/view/ViewConfiguration;Landroid/view/ViewConfiguration;
 HSPLandroid/view/View;->setTop(I)V
 HSPLandroid/view/View;->setTouchDelegate(Landroid/view/TouchDelegate;)V
-HSPLandroid/view/View;->setTransitionAlpha(F)V
+HSPLandroid/view/View;->setTransitionAlpha(F)V+]Landroid/view/View;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->setTransitionName(Ljava/lang/String;)V
 HSPLandroid/view/View;->setTransitionVisibility(I)V
 HSPLandroid/view/View;->setTranslationX(F)V+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
@@ -17509,19 +17520,19 @@
 HSPLandroid/view/View;->setWillNotDraw(Z)V
 HSPLandroid/view/View;->setX(F)V
 HSPLandroid/view/View;->setY(F)V
-HSPLandroid/view/View;->shouldDrawRoundScrollbar()Z
-HSPLandroid/view/View;->sizeChange(IIII)V
+HSPLandroid/view/View;->shouldDrawRoundScrollbar()Z+]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
+HSPLandroid/view/View;->sizeChange(IIII)V+]Landroid/view/ViewOverlay;Landroid/view/ViewGroupOverlay;]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/View;->skipInvalidate()Z+]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/View;->startAnimation(Landroid/view/animation/Animation;)V
 HSPLandroid/view/View;->startNestedScroll(I)Z
 HSPLandroid/view/View;->stopNestedScroll()V
 HSPLandroid/view/View;->switchDefaultFocusHighlight()V
-HSPLandroid/view/View;->toString()Ljava/lang/String;
+HSPLandroid/view/View;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/View;missing_types]Ljava/lang/Object;missing_types]Landroid/content/res/Resources;Landroid/content/res/Resources;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/view/View;->transformFromViewToWindowSpace([I)V+]Landroid/view/View;missing_types]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
 HSPLandroid/view/View;->unFocus(Landroid/view/View;)V
 HSPLandroid/view/View;->unscheduleDrawable(Landroid/graphics/drawable/Drawable;)V
-HSPLandroid/view/View;->unscheduleDrawable(Landroid/graphics/drawable/Drawable;Ljava/lang/Runnable;)V
-HSPLandroid/view/View;->updateDisplayListIfDirty()Landroid/graphics/RenderNode;+]Landroid/view/View;megamorphic_types]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
+HSPLandroid/view/View;->unscheduleDrawable(Landroid/graphics/drawable/Drawable;Ljava/lang/Runnable;)V+]Landroid/view/HandlerActionQueue;Landroid/view/HandlerActionQueue;]Landroid/view/Choreographer;Landroid/view/Choreographer;
+HSPLandroid/view/View;->updateDisplayListIfDirty()Landroid/graphics/RenderNode;+]Landroid/view/View;megamorphic_types]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Landroid/view/ViewOverlay;Landroid/view/ViewGroupOverlay;]Landroid/view/ViewGroup;Landroid/view/ViewOverlay$OverlayViewGroup;
 HSPLandroid/view/View;->updateFocusedInCluster(Landroid/view/View;I)V
 HSPLandroid/view/View;->updateHandwritingArea()V+]Landroid/view/HandwritingInitiator;Landroid/view/HandwritingInitiator;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/View;missing_types
 HSPLandroid/view/View;->updateKeepClearRects()V+]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
@@ -17537,7 +17548,7 @@
 HSPLandroid/view/ViewAnimationHostBridge;->registerAnimatingRenderNode(Landroid/graphics/RenderNode;)V
 HSPLandroid/view/ViewAnimationHostBridge;->registerVectorDrawableAnimator(Landroid/view/NativeVectorDrawableAnimator;)V
 HSPLandroid/view/ViewConfiguration;-><init>(Landroid/content/Context;)V
-HSPLandroid/view/ViewConfiguration;->get(Landroid/content/Context;)Landroid/view/ViewConfiguration;
+HSPLandroid/view/ViewConfiguration;->get(Landroid/content/Context;)Landroid/view/ViewConfiguration;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/Context;missing_types
 HSPLandroid/view/ViewConfiguration;->getDoubleTapTimeout()I
 HSPLandroid/view/ViewConfiguration;->getLongPressTimeout()I
 HSPLandroid/view/ViewConfiguration;->getPressedStateDuration()I
@@ -17564,6 +17575,7 @@
 HSPLandroid/view/ViewConfiguration;->getScrollFriction()F
 HSPLandroid/view/ViewConfiguration;->getTapTimeout()I
 HSPLandroid/view/ViewConfiguration;->isFadingMarqueeEnabled()Z
+HSPLandroid/view/ViewConfiguration;->isPreferKeepClearForFocusEnabled()Z
 HSPLandroid/view/ViewDebug;->getViewInstanceCount()J
 HSPLandroid/view/ViewDebug;->getViewRootImplCount()J
 HSPLandroid/view/ViewFrameInfo;-><init>()V
@@ -17582,9 +17594,9 @@
 HSPLandroid/view/ViewGroup$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/view/ViewGroup$LayoutParams;-><init>(Landroid/view/ViewGroup$LayoutParams;)V
 HSPLandroid/view/ViewGroup$LayoutParams;->resolveLayoutDirection(I)V
-HSPLandroid/view/ViewGroup$LayoutParams;->setBaseAttributes(Landroid/content/res/TypedArray;II)V
+HSPLandroid/view/ViewGroup$LayoutParams;->setBaseAttributes(Landroid/content/res/TypedArray;II)V+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/view/ViewGroup$MarginLayoutParams;-><init>(II)V
-HSPLandroid/view/ViewGroup$MarginLayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V+]Landroid/view/ViewGroup$MarginLayoutParams;missing_types]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/content/Context;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLandroid/view/ViewGroup$MarginLayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V+]Landroid/view/ViewGroup$MarginLayoutParams;missing_types]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/Context;missing_types
 HSPLandroid/view/ViewGroup$MarginLayoutParams;-><init>(Landroid/view/ViewGroup$LayoutParams;)V
 HSPLandroid/view/ViewGroup$MarginLayoutParams;-><init>(Landroid/view/ViewGroup$MarginLayoutParams;)V
 HSPLandroid/view/ViewGroup$MarginLayoutParams;->doResolveMargins()V
@@ -17592,7 +17604,7 @@
 HSPLandroid/view/ViewGroup$MarginLayoutParams;->getMarginEnd()I
 HSPLandroid/view/ViewGroup$MarginLayoutParams;->getMarginStart()I
 HSPLandroid/view/ViewGroup$MarginLayoutParams;->isMarginRelative()Z
-HSPLandroid/view/ViewGroup$MarginLayoutParams;->resolveLayoutDirection(I)V
+HSPLandroid/view/ViewGroup$MarginLayoutParams;->resolveLayoutDirection(I)V+]Landroid/view/ViewGroup$MarginLayoutParams;missing_types
 HSPLandroid/view/ViewGroup$MarginLayoutParams;->setLayoutDirection(I)V
 HSPLandroid/view/ViewGroup$MarginLayoutParams;->setMarginEnd(I)V
 HSPLandroid/view/ViewGroup$MarginLayoutParams;->setMarginStart(I)V
@@ -17604,26 +17616,26 @@
 HSPLandroid/view/ViewGroup;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/view/ViewGroup;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
 HSPLandroid/view/ViewGroup;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HSPLandroid/view/ViewGroup;->addFocusables(Ljava/util/ArrayList;II)V
+HSPLandroid/view/ViewGroup;->addFocusables(Ljava/util/ArrayList;II)V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/ViewGroup;->addInArray(Landroid/view/View;I)V
 HSPLandroid/view/ViewGroup;->addTouchTarget(Landroid/view/View;I)Landroid/view/ViewGroup$TouchTarget;
 HSPLandroid/view/ViewGroup;->addView(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->addView(Landroid/view/View;I)V
 HSPLandroid/view/ViewGroup;->addView(Landroid/view/View;II)V
-HSPLandroid/view/ViewGroup;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V
-HSPLandroid/view/ViewGroup;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/view/ViewGroup;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V+]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V+]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/ViewGroup;->addViewInLayout(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)Z
 HSPLandroid/view/ViewGroup;->addViewInLayout(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;Z)Z
-HSPLandroid/view/ViewGroup;->addViewInner(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;Z)V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
-HSPLandroid/view/ViewGroup;->attachViewToParent(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/view/ViewGroup;->addViewInner(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;Z)V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;megamorphic_types]Landroid/animation/LayoutTransition;Landroid/animation/LayoutTransition;
+HSPLandroid/view/ViewGroup;->attachViewToParent(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V+]Landroid/view/View;missing_types
 HSPLandroid/view/ViewGroup;->bringChildToFront(Landroid/view/View;)V
-HSPLandroid/view/ViewGroup;->buildOrderedChildList()Ljava/util/ArrayList;
+HSPLandroid/view/ViewGroup;->buildOrderedChildList()Ljava/util/ArrayList;+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/ViewGroup;->buildTouchDispatchChildList()Ljava/util/ArrayList;
 HSPLandroid/view/ViewGroup;->cancelAndClearTouchTargets(Landroid/view/MotionEvent;)V
 HSPLandroid/view/ViewGroup;->cancelHoverTarget(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->cancelTouchTarget(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
-HSPLandroid/view/ViewGroup;->childDrawableStateChanged(Landroid/view/View;)V
+HSPLandroid/view/ViewGroup;->childDrawableStateChanged(Landroid/view/View;)V+]Landroid/view/ViewGroup;Landroid/widget/FrameLayout;
 HSPLandroid/view/ViewGroup;->childHasTransientStateChanged(Landroid/view/View;Z)V
 HSPLandroid/view/ViewGroup;->cleanupLayoutState(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->clearCachedLayoutMode()V
@@ -17636,42 +17648,42 @@
 HSPLandroid/view/ViewGroup;->detachAllViewsFromParent()V
 HSPLandroid/view/ViewGroup;->detachViewFromParent(I)V
 HSPLandroid/view/ViewGroup;->dispatchApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;
-HSPLandroid/view/ViewGroup;->dispatchAttachedToWindow(Landroid/view/View$AttachInfo;I)V
+HSPLandroid/view/ViewGroup;->dispatchAttachedToWindow(Landroid/view/View$AttachInfo;I)V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/ViewGroup;->dispatchCancelPendingInputEvents()V
 HSPLandroid/view/ViewGroup;->dispatchCollectViewAttributes(Landroid/view/View$AttachInfo;I)V+]Landroid/view/View;missing_types
 HSPLandroid/view/ViewGroup;->dispatchConfigurationChanged(Landroid/content/res/Configuration;)V
-HSPLandroid/view/ViewGroup;->dispatchDetachedFromWindow()V
-HSPLandroid/view/ViewGroup;->dispatchDraw(Landroid/graphics/Canvas;)V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
+HSPLandroid/view/ViewGroup;->dispatchDetachedFromWindow()V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->dispatchDraw(Landroid/graphics/Canvas;)V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;,Landroid/graphics/Picture$PictureCanvas;,Landroid/graphics/Canvas;]Landroid/view/animation/LayoutAnimationController;Landroid/view/animation/LayoutAnimationController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/ViewGroup;->dispatchDrawableHotspotChanged(FF)V
 HSPLandroid/view/ViewGroup;->dispatchFinishTemporaryDetach()V
 HSPLandroid/view/ViewGroup;->dispatchFreezeSelfOnly(Landroid/util/SparseArray;)V
-HSPLandroid/view/ViewGroup;->dispatchGetDisplayList()V+]Landroid/view/View;missing_types
+HSPLandroid/view/ViewGroup;->dispatchGetDisplayList()V+]Landroid/view/View;megamorphic_types]Landroid/view/ViewOverlay;Landroid/view/ViewGroupOverlay;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/ViewGroup;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
 HSPLandroid/view/ViewGroup;->dispatchKeyEventPreIme(Landroid/view/KeyEvent;)Z
 HSPLandroid/view/ViewGroup;->dispatchProvideAutofillStructure(Landroid/view/ViewStructure;I)V
 HSPLandroid/view/ViewGroup;->dispatchProvideContentCaptureStructure()V
 HSPLandroid/view/ViewGroup;->dispatchRestoreInstanceState(Landroid/util/SparseArray;)V
 HSPLandroid/view/ViewGroup;->dispatchSaveInstanceState(Landroid/util/SparseArray;)V
-HSPLandroid/view/ViewGroup;->dispatchScreenStateChanged(I)V
+HSPLandroid/view/ViewGroup;->dispatchScreenStateChanged(I)V+]Landroid/view/View;missing_types
 HSPLandroid/view/ViewGroup;->dispatchSetActivated(Z)V
 HSPLandroid/view/ViewGroup;->dispatchSetPressed(Z)V
 HSPLandroid/view/ViewGroup;->dispatchSetSelected(Z)V
 HSPLandroid/view/ViewGroup;->dispatchStartTemporaryDetach()V
 HSPLandroid/view/ViewGroup;->dispatchSystemUiVisibilityChanged(I)V
 HSPLandroid/view/ViewGroup;->dispatchThawSelfOnly(Landroid/util/SparseArray;)V
-HSPLandroid/view/ViewGroup;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z+]Landroid/view/View;megamorphic_types]Landroid/view/ViewGroup;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
+HSPLandroid/view/ViewGroup;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z+]Landroid/view/View;megamorphic_types]Landroid/view/ViewGroup;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;]Landroid/view/ViewGroup$TouchTarget;Landroid/view/ViewGroup$TouchTarget;
 HSPLandroid/view/ViewGroup;->dispatchTransformedTouchEvent(Landroid/view/MotionEvent;ZLandroid/view/View;I)Z+]Landroid/view/View;missing_types]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/ViewGroup;->dispatchUnhandledKeyEvent(Landroid/view/KeyEvent;)Landroid/view/View;
-HSPLandroid/view/ViewGroup;->dispatchViewAdded(Landroid/view/View;)V
+HSPLandroid/view/ViewGroup;->dispatchViewAdded(Landroid/view/View;)V+]Landroid/view/ViewGroup$OnHierarchyChangeListener;missing_types]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/ViewGroup;->dispatchViewRemoved(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->dispatchVisibilityAggregated(Z)Z+]Landroid/view/View;missing_types
 HSPLandroid/view/ViewGroup;->dispatchVisibilityChanged(Landroid/view/View;I)V+]Landroid/view/View;missing_types
-HSPLandroid/view/ViewGroup;->dispatchWindowFocusChanged(Z)V
+HSPLandroid/view/ViewGroup;->dispatchWindowFocusChanged(Z)V+]Landroid/view/View;megamorphic_types
 HSPLandroid/view/ViewGroup;->dispatchWindowInsetsAnimationEnd(Landroid/view/WindowInsetsAnimation;)V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/ViewGroup;->dispatchWindowSystemUiVisiblityChanged(I)V
 HSPLandroid/view/ViewGroup;->dispatchWindowVisibilityChanged(I)V+]Landroid/view/View;missing_types
 HSPLandroid/view/ViewGroup;->drawChild(Landroid/graphics/Canvas;Landroid/view/View;J)Z+]Landroid/view/View;missing_types
-HSPLandroid/view/ViewGroup;->drawableStateChanged()V
+HSPLandroid/view/ViewGroup;->drawableStateChanged()V+]Landroid/view/View;Landroid/widget/ImageView;
 HSPLandroid/view/ViewGroup;->endViewTransition(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->exitHoverTargets()V
 HSPLandroid/view/ViewGroup;->exitTooltipHoverTargets()V
@@ -17682,12 +17694,12 @@
 HSPLandroid/view/ViewGroup;->finishAnimatingView(Landroid/view/View;Landroid/view/animation/Animation;)V
 HSPLandroid/view/ViewGroup;->focusSearch(Landroid/view/View;I)Landroid/view/View;
 HSPLandroid/view/ViewGroup;->focusableViewAvailable(Landroid/view/View;)V
-HSPLandroid/view/ViewGroup;->gatherTransparentRegion(Landroid/graphics/Region;)Z
+HSPLandroid/view/ViewGroup;->gatherTransparentRegion(Landroid/graphics/Region;)Z+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/ViewGroup;->generateDefaultLayoutParams()Landroid/view/ViewGroup$LayoutParams;
 HSPLandroid/view/ViewGroup;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams;
 HSPLandroid/view/ViewGroup;->getAccessibilityClassName()Ljava/lang/CharSequence;
 HSPLandroid/view/ViewGroup;->getAndVerifyPreorderedIndex(IIZ)I
-HSPLandroid/view/ViewGroup;->getAndVerifyPreorderedView(Ljava/util/ArrayList;[Landroid/view/View;I)Landroid/view/View;
+HSPLandroid/view/ViewGroup;->getAndVerifyPreorderedView(Ljava/util/ArrayList;[Landroid/view/View;I)Landroid/view/View;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/ViewGroup;->getChildAt(I)Landroid/view/View;
 HSPLandroid/view/ViewGroup;->getChildCount()I
 HSPLandroid/view/ViewGroup;->getChildMeasureSpec(III)I
@@ -17710,17 +17722,17 @@
 HSPLandroid/view/ViewGroup;->getTouchscreenBlocksFocus()Z
 HSPLandroid/view/ViewGroup;->handleFocusGainInternal(ILandroid/graphics/Rect;)V
 HSPLandroid/view/ViewGroup;->hasBooleanFlag(I)Z
-HSPLandroid/view/ViewGroup;->hasChildWithZ()Z
+HSPLandroid/view/ViewGroup;->hasChildWithZ()Z+]Landroid/view/View;missing_types
 HSPLandroid/view/ViewGroup;->hasDefaultFocus()Z
 HSPLandroid/view/ViewGroup;->hasFocus()Z
-HSPLandroid/view/ViewGroup;->hasFocusable(ZZ)Z
-HSPLandroid/view/ViewGroup;->hasFocusableChild(Z)Z
+HSPLandroid/view/ViewGroup;->hasFocusable(ZZ)Z+]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->hasFocusableChild(Z)Z+]Landroid/view/View;missing_types
 HSPLandroid/view/ViewGroup;->hasTransientState()Z
 HSPLandroid/view/ViewGroup;->hasUnhandledKeyListener()Z
 HSPLandroid/view/ViewGroup;->hasWindowInsetsAnimationCallback()Z
 HSPLandroid/view/ViewGroup;->indexOfChild(Landroid/view/View;)I
-HSPLandroid/view/ViewGroup;->initFromAttributes(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HSPLandroid/view/ViewGroup;->initViewGroup()V+]Landroid/view/ViewGroup;missing_types]Landroid/content/Context;Landroid/view/ContextThemeWrapper;
+HSPLandroid/view/ViewGroup;->initFromAttributes(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/view/ViewGroup;missing_types]Landroid/content/Context;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLandroid/view/ViewGroup;->initViewGroup()V+]Landroid/view/ViewGroup;missing_types]Landroid/content/Context;missing_types
 HSPLandroid/view/ViewGroup;->internalSetPadding(IIII)V
 HSPLandroid/view/ViewGroup;->invalidateChild(Landroid/view/View;Landroid/graphics/Rect;)V+]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/ViewGroup;->invalidateChildInParent([ILandroid/graphics/Rect;)Landroid/view/ViewParent;
@@ -17730,23 +17742,23 @@
 HSPLandroid/view/ViewGroup;->isTransformedTouchPointInView(FFLandroid/view/View;Landroid/graphics/PointF;)Z
 HSPLandroid/view/ViewGroup;->isViewTransitioning(Landroid/view/View;)Z
 HSPLandroid/view/ViewGroup;->jumpDrawablesToCurrentState()V+]Landroid/view/View;megamorphic_types
-HSPLandroid/view/ViewGroup;->layout(IIII)V
+HSPLandroid/view/ViewGroup;->layout(IIII)V+]Landroid/animation/LayoutTransition;Landroid/animation/LayoutTransition;
 HSPLandroid/view/ViewGroup;->makeFrameworkOptionalFitsSystemWindows()V
 HSPLandroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V
 HSPLandroid/view/ViewGroup;->measureChild(Landroid/view/View;II)V
-HSPLandroid/view/ViewGroup;->measureChildWithMargins(Landroid/view/View;IIII)V
+HSPLandroid/view/ViewGroup;->measureChildWithMargins(Landroid/view/View;IIII)V+]Landroid/view/View;missing_types
 HSPLandroid/view/ViewGroup;->measureChildren(II)V
 HSPLandroid/view/ViewGroup;->newDispatchApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/ViewGroup;->notifySubtreeAccessibilityStateChangedIfNeeded()V+]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;
 HSPLandroid/view/ViewGroup;->offsetDescendantRectToMyCoords(Landroid/view/View;Landroid/graphics/Rect;)V
-HSPLandroid/view/ViewGroup;->offsetRectBetweenParentAndChild(Landroid/view/View;Landroid/graphics/Rect;ZZ)V
+HSPLandroid/view/ViewGroup;->offsetRectBetweenParentAndChild(Landroid/view/View;Landroid/graphics/Rect;ZZ)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/view/ViewGroup;->onAttachedToWindow()V
 HSPLandroid/view/ViewGroup;->onChildVisibilityChanged(Landroid/view/View;II)V
-HSPLandroid/view/ViewGroup;->onCreateDrawableState(I)[I
+HSPLandroid/view/ViewGroup;->onCreateDrawableState(I)[I+]Landroid/view/View;Landroid/widget/ImageView;]Landroid/view/ViewGroup;Landroid/widget/FrameLayout;
 HSPLandroid/view/ViewGroup;->onDescendantInvalidated(Landroid/view/View;Landroid/view/View;)V+]Landroid/view/ViewParent;missing_types
 HSPLandroid/view/ViewGroup;->onDescendantUnbufferedRequested()V
 HSPLandroid/view/ViewGroup;->onDetachedFromWindow()V
-HSPLandroid/view/ViewGroup;->onInterceptTouchEvent(Landroid/view/MotionEvent;)Z
+HSPLandroid/view/ViewGroup;->onInterceptTouchEvent(Landroid/view/MotionEvent;)Z+]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/ViewGroup;->onRequestFocusInDescendants(ILandroid/graphics/Rect;)Z
 HSPLandroid/view/ViewGroup;->onSetLayoutParams(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
 HSPLandroid/view/ViewGroup;->onStartNestedScroll(Landroid/view/View;Landroid/view/View;I)Z
@@ -17765,7 +17777,7 @@
 HSPLandroid/view/ViewGroup;->removeView(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->removeViewAt(I)V
 HSPLandroid/view/ViewGroup;->removeViewInLayout(Landroid/view/View;)V
-HSPLandroid/view/ViewGroup;->removeViewInternal(ILandroid/view/View;)V
+HSPLandroid/view/ViewGroup;->removeViewInternal(ILandroid/view/View;)V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/ViewGroup;->removeViewInternal(Landroid/view/View;)Z
 HSPLandroid/view/ViewGroup;->requestChildFocus(Landroid/view/View;Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->requestChildRectangleOnScreen(Landroid/view/View;Landroid/graphics/Rect;Z)Z
@@ -17774,44 +17786,44 @@
 HSPLandroid/view/ViewGroup;->requestTransitionStart(Landroid/animation/LayoutTransition;)V
 HSPLandroid/view/ViewGroup;->requestTransparentRegion(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->resetCancelNextUpFlag(Landroid/view/View;)Z
-HSPLandroid/view/ViewGroup;->resetResolvedDrawables()V
-HSPLandroid/view/ViewGroup;->resetResolvedLayoutDirection()V
-HSPLandroid/view/ViewGroup;->resetResolvedPadding()V
-HSPLandroid/view/ViewGroup;->resetResolvedTextAlignment()V
-HSPLandroid/view/ViewGroup;->resetResolvedTextDirection()V
-HSPLandroid/view/ViewGroup;->resetSubtreeAccessibilityStateChanged()V
+HSPLandroid/view/ViewGroup;->resetResolvedDrawables()V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;megamorphic_types
+HSPLandroid/view/ViewGroup;->resetResolvedLayoutDirection()V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->resetResolvedPadding()V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->resetResolvedTextAlignment()V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->resetResolvedTextDirection()V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;megamorphic_types
+HSPLandroid/view/ViewGroup;->resetSubtreeAccessibilityStateChanged()V+]Landroid/view/View;missing_types
 HSPLandroid/view/ViewGroup;->resetTouchState()V
-HSPLandroid/view/ViewGroup;->resolveDrawables()V
-HSPLandroid/view/ViewGroup;->resolveLayoutDirection()Z
-HSPLandroid/view/ViewGroup;->resolveLayoutParams()V
-HSPLandroid/view/ViewGroup;->resolvePadding()V
-HSPLandroid/view/ViewGroup;->resolveRtlPropertiesIfNeeded()Z
-HSPLandroid/view/ViewGroup;->resolveTextAlignment()Z
-HSPLandroid/view/ViewGroup;->resolveTextDirection()Z
+HSPLandroid/view/ViewGroup;->resolveDrawables()V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->resolveLayoutDirection()Z+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->resolveLayoutParams()V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;megamorphic_types
+HSPLandroid/view/ViewGroup;->resolvePadding()V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->resolveRtlPropertiesIfNeeded()Z+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->resolveTextAlignment()Z+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->resolveTextDirection()Z+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/ViewGroup;->restoreDefaultFocus()Z
 HSPLandroid/view/ViewGroup;->setAddStatesFromChildren(Z)V
 HSPLandroid/view/ViewGroup;->setAlwaysDrawnWithCacheEnabled(Z)V
 HSPLandroid/view/ViewGroup;->setBooleanFlag(IZ)V
 HSPLandroid/view/ViewGroup;->setChildrenDrawingCacheEnabled(Z)V
 HSPLandroid/view/ViewGroup;->setChildrenDrawingOrderEnabled(Z)V
-HSPLandroid/view/ViewGroup;->setClipChildren(Z)V
+HSPLandroid/view/ViewGroup;->setClipChildren(Z)V+]Landroid/view/ViewGroup;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/ViewGroup;->setClipToPadding(Z)V
 HSPLandroid/view/ViewGroup;->setDescendantFocusability(I)V
 HSPLandroid/view/ViewGroup;->setLayoutTransition(Landroid/animation/LayoutTransition;)V
 HSPLandroid/view/ViewGroup;->setMotionEventSplittingEnabled(Z)V
 HSPLandroid/view/ViewGroup;->setOnHierarchyChangeListener(Landroid/view/ViewGroup$OnHierarchyChangeListener;)V
 HSPLandroid/view/ViewGroup;->setTouchscreenBlocksFocus(Z)V
-HSPLandroid/view/ViewGroup;->shouldBlockFocusForTouchscreen()Z
+HSPLandroid/view/ViewGroup;->shouldBlockFocusForTouchscreen()Z+]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/ViewGroup;->shouldDelayChildPressedState()Z
 HSPLandroid/view/ViewGroup;->startViewTransition(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->suppressLayout(Z)V
-HSPLandroid/view/ViewGroup;->touchAccessibilityNodeProviderIfNeeded(Landroid/view/View;)V
-HSPLandroid/view/ViewGroup;->transformPointToViewLocal([FLandroid/view/View;)V
+HSPLandroid/view/ViewGroup;->touchAccessibilityNodeProviderIfNeeded(Landroid/view/View;)V+]Landroid/content/Context;missing_types
+HSPLandroid/view/ViewGroup;->transformPointToViewLocal([FLandroid/view/View;)V+]Landroid/view/View;missing_types
 HSPLandroid/view/ViewGroup;->unFocus(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->updateLocalSystemUiVisibility(II)Z
 HSPLandroid/view/ViewGroupOverlay;->add(Landroid/view/View;)V
 HSPLandroid/view/ViewGroupOverlay;->remove(Landroid/view/View;)V
-HSPLandroid/view/ViewOutlineProvider$1;->getOutline(Landroid/view/View;Landroid/graphics/Outline;)V+]Landroid/view/View;Lcom/android/internal/policy/DecorView;,Landroid/view/View;,Landroid/widget/Button;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/RippleDrawable;,Landroid/graphics/drawable/ColorDrawable;
+HSPLandroid/view/ViewOutlineProvider$1;->getOutline(Landroid/view/View;Landroid/graphics/Outline;)V+]Landroid/view/View;megamorphic_types]Landroid/graphics/Outline;Landroid/graphics/Outline;]Landroid/graphics/drawable/Drawable;megamorphic_types
 HSPLandroid/view/ViewOutlineProvider$2;->getOutline(Landroid/view/View;Landroid/graphics/Outline;)V
 HSPLandroid/view/ViewOutlineProvider;-><init>()V
 HSPLandroid/view/ViewOverlay$OverlayViewGroup;-><init>(Landroid/content/Context;Landroid/view/View;)V
@@ -17835,9 +17847,9 @@
 HSPLandroid/view/ViewPropertyAnimator$3;->run()V
 HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;-><init>(Landroid/view/ViewPropertyAnimator;)V
 HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;->onAnimationCancel(Landroid/animation/Animator;)V
-HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;->onAnimationEnd(Landroid/animation/Animator;)V
+HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;->onAnimationEnd(Landroid/animation/Animator;)V+]Ljava/util/HashMap;Ljava/util/HashMap;
 HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;->onAnimationStart(Landroid/animation/Animator;)V
-HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V
+HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/ValueAnimator;Landroid/animation/ValueAnimator;]Landroid/view/View;missing_types
 HSPLandroid/view/ViewPropertyAnimator$NameValuesHolder;-><init>(IFF)V
 HSPLandroid/view/ViewPropertyAnimator$PropertyBundle;-><init>(ILjava/util/ArrayList;)V
 HSPLandroid/view/ViewPropertyAnimator$PropertyBundle;->cancel(I)Z
@@ -17845,7 +17857,7 @@
 HSPLandroid/view/ViewPropertyAnimator;->alpha(F)Landroid/view/ViewPropertyAnimator;
 HSPLandroid/view/ViewPropertyAnimator;->animateProperty(IF)V
 HSPLandroid/view/ViewPropertyAnimator;->animatePropertyBy(IFF)V
-HSPLandroid/view/ViewPropertyAnimator;->cancel()V
+HSPLandroid/view/ViewPropertyAnimator;->cancel()V+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;]Ljava/util/Set;Ljava/util/HashMap$KeySet;]Landroid/animation/Animator;Landroid/animation/ValueAnimator;
 HSPLandroid/view/ViewPropertyAnimator;->getValue(I)F
 HSPLandroid/view/ViewPropertyAnimator;->scaleX(F)Landroid/view/ViewPropertyAnimator;
 HSPLandroid/view/ViewPropertyAnimator;->scaleY(F)Landroid/view/ViewPropertyAnimator;
@@ -17855,7 +17867,7 @@
 HSPLandroid/view/ViewPropertyAnimator;->setStartDelay(J)Landroid/view/ViewPropertyAnimator;
 HSPLandroid/view/ViewPropertyAnimator;->setValue(IF)V
 HSPLandroid/view/ViewPropertyAnimator;->start()V
-HSPLandroid/view/ViewPropertyAnimator;->startAnimation()V
+HSPLandroid/view/ViewPropertyAnimator;->startAnimation()V+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/ValueAnimator;Landroid/animation/ValueAnimator;]Landroid/view/View;missing_types
 HSPLandroid/view/ViewPropertyAnimator;->translationX(F)Landroid/view/ViewPropertyAnimator;
 HSPLandroid/view/ViewPropertyAnimator;->translationY(F)Landroid/view/ViewPropertyAnimator;
 HSPLandroid/view/ViewPropertyAnimator;->withEndAction(Ljava/lang/Runnable;)Landroid/view/ViewPropertyAnimator;
@@ -17866,7 +17878,6 @@
 HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda11;-><init>()V
 HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda11;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda13;-><init>(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda13;->onBackInvoked()V
 HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda1;-><init>(Landroid/view/ViewRootImpl;Landroid/view/SurfaceControl$Transaction;)V
 HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda1;->onFrameDraw(J)V
 HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda2;-><init>(Landroid/view/ViewRootImpl;Landroid/view/SurfaceControl$Transaction;I)V
@@ -17885,7 +17896,7 @@
 HSPLandroid/view/ViewRootImpl$6;->lambda$onFrameDraw$0$android-view-ViewRootImpl$6(JZ)V
 HSPLandroid/view/ViewRootImpl$6;->onFrameDraw(IJ)Landroid/graphics/HardwareRenderer$FrameCommitCallback;
 HSPLandroid/view/ViewRootImpl$7;-><init>(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ViewRootImpl$7;->run()V
+HSPLandroid/view/ViewRootImpl$7;->run()V+]Ljava/util/Optional;Ljava/util/Optional;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;
 HSPLandroid/view/ViewRootImpl$8$$ExternalSyntheticLambda1;-><init>(Landroid/view/ViewRootImpl$8;JLandroid/window/SurfaceSyncer$SyncBufferCallback;Z)V
 HSPLandroid/view/ViewRootImpl$8$$ExternalSyntheticLambda1;->onFrameCommit(Z)V
 HSPLandroid/view/ViewRootImpl$8;-><init>(Landroid/view/ViewRootImpl;Landroid/window/SurfaceSyncer$SyncBufferCallback;Z)V
@@ -17906,42 +17917,42 @@
 HSPLandroid/view/ViewRootImpl$AsyncInputStage;->forward(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
 HSPLandroid/view/ViewRootImpl$ConsumeBatchedInputImmediatelyRunnable;-><init>(Landroid/view/ViewRootImpl;)V
 HSPLandroid/view/ViewRootImpl$ConsumeBatchedInputRunnable;-><init>(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ViewRootImpl$ConsumeBatchedInputRunnable;->run()V
+HSPLandroid/view/ViewRootImpl$ConsumeBatchedInputRunnable;->run()V+]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/Choreographer;Landroid/view/Choreographer;
 HSPLandroid/view/ViewRootImpl$EarlyPostImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;)V
 HSPLandroid/view/ViewRootImpl$EarlyPostImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
 HSPLandroid/view/ViewRootImpl$EarlyPostImeInputStage;->processKeyEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
-HSPLandroid/view/ViewRootImpl$EarlyPostImeInputStage;->processMotionEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
-HSPLandroid/view/ViewRootImpl$EarlyPostImeInputStage;->processPointerEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
+HSPLandroid/view/ViewRootImpl$EarlyPostImeInputStage;->processMotionEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I+]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
+HSPLandroid/view/ViewRootImpl$EarlyPostImeInputStage;->processPointerEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I+]Landroid/view/autofill/AutofillManager;Landroid/view/autofill/AutofillManager;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/ViewRootImpl$HighContrastTextManager;-><init>(Landroid/view/ViewRootImpl;)V
 HSPLandroid/view/ViewRootImpl$ImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;Ljava/lang/String;)V
 HSPLandroid/view/ViewRootImpl$ImeInputStage;->onFinishedInputEvent(Ljava/lang/Object;Z)V
 HSPLandroid/view/ViewRootImpl$ImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
 HSPLandroid/view/ViewRootImpl$InputMetricsListener;-><init>(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ViewRootImpl$InputMetricsListener;->onFrameMetricsAvailable(I)V
+HSPLandroid/view/ViewRootImpl$InputMetricsListener;->onFrameMetricsAvailable(I)V+]Landroid/view/ViewRootImpl$WindowInputEventReceiver;Landroid/view/ViewRootImpl$WindowInputEventReceiver;
 HSPLandroid/view/ViewRootImpl$InputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;)V
-HSPLandroid/view/ViewRootImpl$InputStage;->apply(Landroid/view/ViewRootImpl$QueuedInputEvent;I)V
-HSPLandroid/view/ViewRootImpl$InputStage;->deliver(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
-HSPLandroid/view/ViewRootImpl$InputStage;->finish(Landroid/view/ViewRootImpl$QueuedInputEvent;Z)V
-HSPLandroid/view/ViewRootImpl$InputStage;->forward(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
-HSPLandroid/view/ViewRootImpl$InputStage;->onDeliverToNext(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
+HSPLandroid/view/ViewRootImpl$InputStage;->apply(Landroid/view/ViewRootImpl$QueuedInputEvent;I)V+]Landroid/view/ViewRootImpl$InputStage;Landroid/view/ViewRootImpl$NativePostImeInputStage;,Landroid/view/ViewRootImpl$ViewPostImeInputStage;,Landroid/view/ViewRootImpl$EarlyPostImeInputStage;
+HSPLandroid/view/ViewRootImpl$InputStage;->deliver(Landroid/view/ViewRootImpl$QueuedInputEvent;)V+]Landroid/view/ViewRootImpl$InputStage;megamorphic_types
+HSPLandroid/view/ViewRootImpl$InputStage;->finish(Landroid/view/ViewRootImpl$QueuedInputEvent;Z)V+]Landroid/view/ViewRootImpl$InputStage;Landroid/view/ViewRootImpl$ViewPostImeInputStage;
+HSPLandroid/view/ViewRootImpl$InputStage;->forward(Landroid/view/ViewRootImpl$QueuedInputEvent;)V+]Landroid/view/ViewRootImpl$InputStage;Landroid/view/ViewRootImpl$NativePostImeInputStage;,Landroid/view/ViewRootImpl$ViewPostImeInputStage;,Landroid/view/ViewRootImpl$EarlyPostImeInputStage;,Landroid/view/ViewRootImpl$SyntheticInputStage;
+HSPLandroid/view/ViewRootImpl$InputStage;->onDeliverToNext(Landroid/view/ViewRootImpl$QueuedInputEvent;)V+]Landroid/view/ViewRootImpl$InputStage;megamorphic_types
 HSPLandroid/view/ViewRootImpl$InputStage;->onDetachedFromWindow()V
 HSPLandroid/view/ViewRootImpl$InputStage;->onWindowFocusChanged(Z)V
-HSPLandroid/view/ViewRootImpl$InputStage;->shouldDropInputEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)Z
-HSPLandroid/view/ViewRootImpl$InputStage;->traceEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;J)V
+HSPLandroid/view/ViewRootImpl$InputStage;->shouldDropInputEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)Z+]Landroid/view/InputEvent;Landroid/view/MotionEvent;
+HSPLandroid/view/ViewRootImpl$InputStage;->traceEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;J)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/InputEvent;Landroid/view/MotionEvent;]Ljava/lang/Object;Landroid/view/ViewRootImpl$SyntheticInputStage;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;-><init>(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;->addView(Landroid/view/View;)V
+HSPLandroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;->addView(Landroid/view/View;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;->postIfNeededLocked()V
-HSPLandroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;->removeView(Landroid/view/View;)V
-HSPLandroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;->run()V
+HSPLandroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;->removeView(Landroid/view/View;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;->run()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/View;missing_types
 HSPLandroid/view/ViewRootImpl$NativePostImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;Ljava/lang/String;)V
 HSPLandroid/view/ViewRootImpl$NativePostImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
 HSPLandroid/view/ViewRootImpl$NativePreImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;Ljava/lang/String;)V
 HSPLandroid/view/ViewRootImpl$NativePreImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
 HSPLandroid/view/ViewRootImpl$QueuedInputEvent;-><init>()V
 HSPLandroid/view/ViewRootImpl$QueuedInputEvent;->shouldSendToSynthesizer()Z
-HSPLandroid/view/ViewRootImpl$QueuedInputEvent;->shouldSkipIme()Z
+HSPLandroid/view/ViewRootImpl$QueuedInputEvent;->shouldSkipIme()Z+]Landroid/view/InputEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/ViewRootImpl$SyntheticInputStage;-><init>(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ViewRootImpl$SyntheticInputStage;->onDeliverToNext(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
+HSPLandroid/view/ViewRootImpl$SyntheticInputStage;->onDeliverToNext(Landroid/view/ViewRootImpl$QueuedInputEvent;)V+]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/ViewRootImpl$SyntheticInputStage;->onDetachedFromWindow()V
 HSPLandroid/view/ViewRootImpl$SyntheticInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
 HSPLandroid/view/ViewRootImpl$SyntheticInputStage;->onWindowFocusChanged(Z)V
@@ -17956,7 +17967,7 @@
 HSPLandroid/view/ViewRootImpl$SystemUiVisibilityInfo;-><init>()V
 HSPLandroid/view/ViewRootImpl$TrackballAxis;-><init>()V
 HSPLandroid/view/ViewRootImpl$TraversalRunnable;-><init>(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ViewRootImpl$TraversalRunnable;->run()V
+HSPLandroid/view/ViewRootImpl$TraversalRunnable;->run()V+]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
 HSPLandroid/view/ViewRootImpl$UnhandledKeyManager;-><init>()V
 HSPLandroid/view/ViewRootImpl$UnhandledKeyManager;->dispatch(Landroid/view/View;Landroid/view/KeyEvent;)Z
 HSPLandroid/view/ViewRootImpl$UnhandledKeyManager;->preDispatch(Landroid/view/KeyEvent;)V
@@ -17964,9 +17975,9 @@
 HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;)V
 HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;->maybeUpdatePointerIcon(Landroid/view/MotionEvent;)V
 HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;->onDeliverToNext(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
-HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
+HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I+]Landroid/view/InputEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;->processKeyEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
-HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;->processPointerEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
+HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;->processPointerEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I+]Landroid/view/View;Lcom/android/internal/policy/DecorView;,Landroid/widget/FrameLayout;,Landroid/widget/PopupWindow$PopupDecorView;]Landroid/view/HandwritingInitiator;Landroid/view/HandwritingInitiator;
 HSPLandroid/view/ViewRootImpl$ViewPreImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;)V
 HSPLandroid/view/ViewRootImpl$ViewPreImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
 HSPLandroid/view/ViewRootImpl$ViewRootHandler;-><init>(Landroid/view/ViewRootImpl;)V
@@ -17985,9 +17996,9 @@
 HSPLandroid/view/ViewRootImpl$W;->showInsets(IZ)V
 HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;-><init>(Landroid/view/ViewRootImpl;Landroid/view/InputChannel;Landroid/os/Looper;)V
 HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->dispose()V
-HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->onBatchedInputEventPending(I)V
+HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->onBatchedInputEventPending(I)V+]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
 HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->onFocusEvent(Z)V
-HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->onInputEvent(Landroid/view/InputEvent;)V
+HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->onInputEvent(Landroid/view/InputEvent;)V+]Landroid/view/InputEventCompatProcessor;Landroid/view/InputEventCompatProcessor;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
 HSPLandroid/view/ViewRootImpl;->-$$Nest$fgetmBlastBufferQueue(Landroid/view/ViewRootImpl;)Landroid/graphics/BLASTBufferQueue;
 HSPLandroid/view/ViewRootImpl;->-$$Nest$fgetmNumSyncsInProgress(Landroid/view/ViewRootImpl;)I
 HSPLandroid/view/ViewRootImpl;->-$$Nest$fputmNumSyncsInProgress(Landroid/view/ViewRootImpl;I)V
@@ -17997,26 +18008,26 @@
 HSPLandroid/view/ViewRootImpl;->-$$Nest$mprofileRendering(Landroid/view/ViewRootImpl;Z)V
 HSPLandroid/view/ViewRootImpl;->-$$Nest$mreadyToSync(Landroid/view/ViewRootImpl;Landroid/window/SurfaceSyncer$SyncBufferCallback;)V
 HSPLandroid/view/ViewRootImpl;-><init>(Landroid/content/Context;Landroid/view/Display;)V
-HSPLandroid/view/ViewRootImpl;-><init>(Landroid/content/Context;Landroid/view/Display;Landroid/view/IWindowSession;Z)V
+HSPLandroid/view/ViewRootImpl;-><init>(Landroid/content/Context;Landroid/view/Display;Landroid/view/IWindowSession;Z)V+]Landroid/view/WindowLeaked;Landroid/view/WindowLeaked;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/media/AudioManager;Landroid/media/AudioManager;]Landroid/content/Context;Landroid/view/ContextThemeWrapper;,Lcom/android/internal/policy/DecorContext;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
 HSPLandroid/view/ViewRootImpl;->addConfigCallback(Landroid/view/ViewRootImpl$ConfigChangedCallback;)V
 HSPLandroid/view/ViewRootImpl;->addFrameCommitCallbackIfNeeded()V+]Landroid/view/ViewTreeObserver;Landroid/view/ViewTreeObserver;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
 HSPLandroid/view/ViewRootImpl;->addSurfaceChangedCallback(Landroid/view/ViewRootImpl$SurfaceChangedCallback;)V
 HSPLandroid/view/ViewRootImpl;->addWindowCallbacks(Landroid/view/WindowCallbacks;)V
 HSPLandroid/view/ViewRootImpl;->adjustLayoutParamsForCompatibility(Landroid/view/WindowManager$LayoutParams;)V
 HSPLandroid/view/ViewRootImpl;->applyKeepScreenOnFlag(Landroid/view/WindowManager$LayoutParams;)V
-HSPLandroid/view/ViewRootImpl;->applyTransactionOnDraw(Landroid/view/SurfaceControl$Transaction;)Z+]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;
+HSPLandroid/view/ViewRootImpl;->applyTransactionOnDraw(Landroid/view/SurfaceControl$Transaction;)Z+]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
 HSPLandroid/view/ViewRootImpl;->canResolveTextDirection()Z
-HSPLandroid/view/ViewRootImpl;->cancelInvalidate(Landroid/view/View;)V
+HSPLandroid/view/ViewRootImpl;->cancelInvalidate(Landroid/view/View;)V+]Landroid/view/ViewRootImpl$ViewRootHandler;Landroid/view/ViewRootImpl$ViewRootHandler;]Landroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;Landroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;
 HSPLandroid/view/ViewRootImpl;->checkForLeavingTouchModeAndConsume(Landroid/view/KeyEvent;)Z
 HSPLandroid/view/ViewRootImpl;->checkThread()V
 HSPLandroid/view/ViewRootImpl;->childDrawableStateChanged(Landroid/view/View;)V
 HSPLandroid/view/ViewRootImpl;->childHasTransientStateChanged(Landroid/view/View;Z)V
 HSPLandroid/view/ViewRootImpl;->clearChildFocus(Landroid/view/View;)V
 HSPLandroid/view/ViewRootImpl;->clearLowProfileModeIfNeeded(IZ)V
-HSPLandroid/view/ViewRootImpl;->collectViewAttributes()Z
+HSPLandroid/view/ViewRootImpl;->collectViewAttributes()Z+]Landroid/view/View;Lcom/android/internal/policy/DecorView;
 HSPLandroid/view/ViewRootImpl;->controlInsetsForCompatibility(Landroid/view/WindowManager$LayoutParams;)V
 HSPLandroid/view/ViewRootImpl;->createSyncIfNeeded()V+]Landroid/window/SurfaceSyncer;Landroid/window/SurfaceSyncer;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
-HSPLandroid/view/ViewRootImpl;->deliverInputEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
+HSPLandroid/view/ViewRootImpl;->deliverInputEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)V+]Landroid/view/ViewRootImpl$InputStage;Landroid/view/ViewRootImpl$EarlyPostImeInputStage;,Landroid/view/ViewRootImpl$NativePreImeInputStage;]Landroid/view/ViewRootImpl$UnhandledKeyManager;Landroid/view/ViewRootImpl$UnhandledKeyManager;]Landroid/view/ViewRootImpl$QueuedInputEvent;Landroid/view/ViewRootImpl$QueuedInputEvent;]Landroid/view/InputEvent;Landroid/view/KeyEvent;,Landroid/view/MotionEvent;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/view/ViewRootImpl;->destroyHardwareRenderer()V
 HSPLandroid/view/ViewRootImpl;->destroyHardwareResources()V
 HSPLandroid/view/ViewRootImpl;->destroySurface()V
@@ -18034,20 +18045,20 @@
 HSPLandroid/view/ViewRootImpl;->dispatchResized(Landroid/window/ClientWindowFrames;ZLandroid/util/MergedConfiguration;Landroid/view/InsetsState;ZZIII)V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/ViewRootImpl$ViewRootHandler;Landroid/view/ViewRootImpl$ViewRootHandler;]Landroid/view/InsetsController$Host;Landroid/view/ViewRootInsetsControllerHost;]Lcom/android/internal/inputmethod/ImeTracing;Lcom/android/internal/inputmethod/ImeTracingClientImpl;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/InsetsController;Landroid/view/InsetsController;
 HSPLandroid/view/ViewRootImpl;->doConsumeBatchedInput(J)Z
 HSPLandroid/view/ViewRootImpl;->doDie()V
-HSPLandroid/view/ViewRootImpl;->doProcessInputEvents()V
-HSPLandroid/view/ViewRootImpl;->doTraversal()V
-HSPLandroid/view/ViewRootImpl;->draw(ZZ)Z+]Landroid/view/Surface;Landroid/view/Surface;]Landroid/view/ViewTreeObserver;Landroid/view/ViewTreeObserver;]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/Choreographer;Landroid/view/Choreographer;]Landroid/widget/Scroller;Landroid/widget/Scroller;]Lcom/android/internal/view/RootViewSurfaceTaker;Lcom/android/internal/policy/DecorView;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;
+HSPLandroid/view/ViewRootImpl;->doProcessInputEvents()V+]Landroid/view/InputEventAssigner;Landroid/view/InputEventAssigner;]Landroid/view/ViewFrameInfo;Landroid/view/ViewFrameInfo;
+HSPLandroid/view/ViewRootImpl;->doTraversal()V+]Landroid/os/Looper;Landroid/os/Looper;]Landroid/view/ViewRootImpl$ViewRootHandler;Landroid/view/ViewRootImpl$ViewRootHandler;]Landroid/os/MessageQueue;Landroid/os/MessageQueue;
+HSPLandroid/view/ViewRootImpl;->draw(ZZ)Z+]Landroid/view/ViewTreeObserver;Landroid/view/ViewTreeObserver;]Landroid/view/Surface;Landroid/view/Surface;]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/Choreographer;Landroid/view/Choreographer;]Landroid/widget/Scroller;Landroid/widget/Scroller;]Lcom/android/internal/view/RootViewSurfaceTaker;Lcom/android/internal/policy/DecorView;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;
 HSPLandroid/view/ViewRootImpl;->drawAccessibilityFocusedDrawableIfNeeded(Landroid/graphics/Canvas;)V
 HSPLandroid/view/ViewRootImpl;->drawSoftware(Landroid/view/Surface;Landroid/view/View$AttachInfo;IIZLandroid/graphics/Rect;Landroid/graphics/Rect;)Z
 HSPLandroid/view/ViewRootImpl;->enableHardwareAcceleration(Landroid/view/WindowManager$LayoutParams;)V
 HSPLandroid/view/ViewRootImpl;->endDragResizing()V
 HSPLandroid/view/ViewRootImpl;->enqueueInputEvent(Landroid/view/InputEvent;)V
-HSPLandroid/view/ViewRootImpl;->enqueueInputEvent(Landroid/view/InputEvent;Landroid/view/InputEventReceiver;IZ)V
+HSPLandroid/view/ViewRootImpl;->enqueueInputEvent(Landroid/view/InputEvent;Landroid/view/InputEventReceiver;IZ)V+]Landroid/view/KeyEvent;Landroid/view/KeyEvent;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/ViewRootImpl;->ensureTouchMode(Z)Z
 HSPLandroid/view/ViewRootImpl;->ensureTouchModeLocally(Z)Z
 HSPLandroid/view/ViewRootImpl;->enterTouchMode()Z
 HSPLandroid/view/ViewRootImpl;->findOnBackInvokedDispatcherForChild(Landroid/view/View;Landroid/view/View;)Landroid/window/OnBackInvokedDispatcher;
-HSPLandroid/view/ViewRootImpl;->finishInputEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
+HSPLandroid/view/ViewRootImpl;->finishInputEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)V+]Landroid/view/InputEventReceiver;Landroid/view/ViewRootImpl$WindowInputEventReceiver;]Landroid/view/InputEvent;Landroid/view/KeyEvent;,Landroid/view/MotionEvent;
 HSPLandroid/view/ViewRootImpl;->fireAccessibilityFocusEventIfHasFocusedNode()V
 HSPLandroid/view/ViewRootImpl;->focusableViewAvailable(Landroid/view/View;)V
 HSPLandroid/view/ViewRootImpl;->forceLayout(Landroid/view/View;)V
@@ -18060,9 +18071,9 @@
 HSPLandroid/view/ViewRootImpl;->getBufferTransformHint()I
 HSPLandroid/view/ViewRootImpl;->getChildVisibleRect(Landroid/view/View;Landroid/graphics/Rect;Landroid/graphics/Point;)Z+]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/view/ViewRootImpl;->getConfiguration()Landroid/content/res/Configuration;
-HSPLandroid/view/ViewRootImpl;->getDisplayId()I
+HSPLandroid/view/ViewRootImpl;->getDisplayId()I+]Landroid/view/Display;Landroid/view/Display;
 HSPLandroid/view/ViewRootImpl;->getHandwritingInitiator()Landroid/view/HandwritingInitiator;
-HSPLandroid/view/ViewRootImpl;->getHostVisibility()I
+HSPLandroid/view/ViewRootImpl;->getHostVisibility()I+]Landroid/view/View;Lcom/android/internal/policy/DecorView;,Landroid/widget/PopupWindow$PopupDecorView;
 HSPLandroid/view/ViewRootImpl;->getImeFocusController()Landroid/view/ImeFocusController;
 HSPLandroid/view/ViewRootImpl;->getImpliedSystemUiVisibility(Landroid/view/WindowManager$LayoutParams;)I
 HSPLandroid/view/ViewRootImpl;->getInsetsController()Landroid/view/InsetsController;
@@ -18070,23 +18081,23 @@
 HSPLandroid/view/ViewRootImpl;->getOnBackInvokedDispatcher()Landroid/window/WindowOnBackInvokedDispatcher;
 HSPLandroid/view/ViewRootImpl;->getParent()Landroid/view/ViewParent;
 HSPLandroid/view/ViewRootImpl;->getRootMeasureSpec(III)I
-HSPLandroid/view/ViewRootImpl;->getRunQueue()Landroid/view/HandlerActionQueue;
+HSPLandroid/view/ViewRootImpl;->getRunQueue()Landroid/view/HandlerActionQueue;+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
 HSPLandroid/view/ViewRootImpl;->getSurfaceControl()Landroid/view/SurfaceControl;
 HSPLandroid/view/ViewRootImpl;->getSurfaceSequenceId()I
 HSPLandroid/view/ViewRootImpl;->getTextDirection()I
 HSPLandroid/view/ViewRootImpl;->getTitle()Ljava/lang/CharSequence;
 HSPLandroid/view/ViewRootImpl;->getUpdatedFrameInfo()Landroid/graphics/FrameInfo;+]Landroid/view/InputEventAssigner;Landroid/view/InputEventAssigner;]Landroid/view/ViewFrameInfo;Landroid/view/ViewFrameInfo;
-HSPLandroid/view/ViewRootImpl;->getValidLayoutRequesters(Ljava/util/ArrayList;Z)Ljava/util/ArrayList;
+HSPLandroid/view/ViewRootImpl;->getValidLayoutRequesters(Ljava/util/ArrayList;Z)Ljava/util/ArrayList;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/ViewRootImpl;->getView()Landroid/view/View;
 HSPLandroid/view/ViewRootImpl;->getWindowBoundsInsetSystemBars()Landroid/graphics/Rect;+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/Context;missing_types]Landroid/view/InsetsController;Landroid/view/InsetsController;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HSPLandroid/view/ViewRootImpl;->getWindowFlags()I
-HSPLandroid/view/ViewRootImpl;->getWindowInsets(Z)Landroid/view/WindowInsets;
-HSPLandroid/view/ViewRootImpl;->getWindowVisibleDisplayFrame(Landroid/graphics/Rect;)V
+HSPLandroid/view/ViewRootImpl;->getWindowInsets(Z)Landroid/view/WindowInsets;+]Landroid/view/WindowInsets;Landroid/view/WindowInsets;]Landroid/graphics/Insets;Landroid/graphics/Insets;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/InsetsController;Landroid/view/InsetsController;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
+HSPLandroid/view/ViewRootImpl;->getWindowVisibleDisplayFrame(Landroid/graphics/Rect;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/view/ViewRootImpl;->handleAppVisibility(Z)V
 HSPLandroid/view/ViewRootImpl;->handleContentCaptureFlush()V
 HSPLandroid/view/ViewRootImpl;->handleDispatchSystemUiVisibilityChanged(Landroid/view/ViewRootImpl$SystemUiVisibilityInfo;)V
 HSPLandroid/view/ViewRootImpl;->handleResized(ILcom/android/internal/os/SomeArgs;)V
-HSPLandroid/view/ViewRootImpl;->handleWindowFocusChanged()V
+HSPLandroid/view/ViewRootImpl;->handleWindowFocusChanged()V+]Landroid/view/ViewTreeObserver;Landroid/view/ViewTreeObserver;]Landroid/view/Surface;Landroid/view/Surface;]Landroid/view/View;Lcom/android/internal/policy/DecorView;]Landroid/view/ViewRootImpl$InputStage;Landroid/view/ViewRootImpl$NativePreImeInputStage;]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/view/ImeFocusController;Landroid/view/ImeFocusController;]Landroid/view/InsetsController;Landroid/view/InsetsController;]Landroid/view/KeyEvent$DispatcherState;Landroid/view/KeyEvent$DispatcherState;
 HSPLandroid/view/ViewRootImpl;->invalidate()V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
 HSPLandroid/view/ViewRootImpl;->invalidateChild(Landroid/view/View;Landroid/graphics/Rect;)V
 HSPLandroid/view/ViewRootImpl;->invalidateChildInParent([ILandroid/graphics/Rect;)Landroid/view/ViewParent;
@@ -18109,13 +18120,13 @@
 HSPLandroid/view/ViewRootImpl;->lambda$new$2(Landroid/view/View;)Ljava/util/List;
 HSPLandroid/view/ViewRootImpl;->lambda$registerCompatOnBackInvokedCallback$11$android-view-ViewRootImpl()V
 HSPLandroid/view/ViewRootImpl;->loadSystemProperties()V
-HSPLandroid/view/ViewRootImpl;->maybeHandleWindowMove(Landroid/graphics/Rect;)V
+HSPLandroid/view/ViewRootImpl;->maybeHandleWindowMove(Landroid/graphics/Rect;)V+]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;
 HSPLandroid/view/ViewRootImpl;->maybeUpdateTooltip(Landroid/view/MotionEvent;)V
-HSPLandroid/view/ViewRootImpl;->measureHierarchy(Landroid/view/View;Landroid/view/WindowManager$LayoutParams;Landroid/content/res/Resources;II)Z
+HSPLandroid/view/ViewRootImpl;->measureHierarchy(Landroid/view/View;Landroid/view/WindowManager$LayoutParams;Landroid/content/res/Resources;II)Z+]Landroid/view/View;Lcom/android/internal/policy/DecorView;]Landroid/util/TypedValue;Landroid/util/TypedValue;]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLandroid/view/ViewRootImpl;->mergeWithNextTransaction(Landroid/view/SurfaceControl$Transaction;J)V
-HSPLandroid/view/ViewRootImpl;->notifyContentCatpureEvents()V
+HSPLandroid/view/ViewRootImpl;->notifyContentCatpureEvents()V+]Landroid/view/View;missing_types]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/view/contentcapture/ContentCaptureManager;Landroid/view/contentcapture/ContentCaptureManager;]Landroid/view/contentcapture/ContentCaptureSession;Landroid/view/contentcapture/MainContentCaptureSession;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/contentcapture/MainContentCaptureSession;Landroid/view/contentcapture/MainContentCaptureSession;
 HSPLandroid/view/ViewRootImpl;->notifyInsetsChanged()V
-HSPLandroid/view/ViewRootImpl;->notifyRendererOfFramePending()V
+HSPLandroid/view/ViewRootImpl;->notifyRendererOfFramePending()V+]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;
 HSPLandroid/view/ViewRootImpl;->notifySurfaceCreated()V
 HSPLandroid/view/ViewRootImpl;->notifySurfaceDestroyed()V
 HSPLandroid/view/ViewRootImpl;->notifySurfaceReplaced()V
@@ -18128,11 +18139,11 @@
 HSPLandroid/view/ViewRootImpl;->onStartNestedScroll(Landroid/view/View;Landroid/view/View;I)Z
 HSPLandroid/view/ViewRootImpl;->performConfigurationChange(Landroid/util/MergedConfiguration;ZI)V
 HSPLandroid/view/ViewRootImpl;->performContentCaptureInitialReport()V
-HSPLandroid/view/ViewRootImpl;->performDraw()V+]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
+HSPLandroid/view/ViewRootImpl;->performDraw()Z+]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/window/SurfaceSyncer$SyncBufferCallback;Landroid/window/SurfaceSyncer$SyncSet$1;]Ljava/util/concurrent/CountDownLatch;Ljava/util/concurrent/CountDownLatch;
 HSPLandroid/view/ViewRootImpl;->performHapticFeedback(IZ)Z
-HSPLandroid/view/ViewRootImpl;->performLayout(Landroid/view/WindowManager$LayoutParams;II)V
+HSPLandroid/view/ViewRootImpl;->performLayout(Landroid/view/WindowManager$LayoutParams;II)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/View;Lcom/android/internal/policy/DecorView;]Landroid/content/Context;Lcom/android/internal/policy/DecorContext;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/ViewRootImpl;->performMeasure(II)V
-HSPLandroid/view/ViewRootImpl;->performTraversals()V+]Landroid/window/SurfaceSyncer;Landroid/window/SurfaceSyncer;]Landroid/view/ViewTreeObserver;Landroid/view/ViewTreeObserver;]Landroid/view/View;Lcom/android/internal/policy/DecorView;,Landroid/widget/ExpandableListView;]Landroid/graphics/Point;Landroid/graphics/Point;]Landroid/content/res/CompatibilityInfo;Landroid/content/res/CompatibilityInfo$1;]Landroid/view/HandlerActionQueue;Landroid/view/HandlerActionQueue;]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/content/Context;Lcom/android/internal/policy/DecorContext;]Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;]Lcom/android/internal/view/RootViewSurfaceTaker;Lcom/android/internal/policy/DecorView;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Landroid/graphics/Region;Landroid/graphics/Region;]Landroid/view/Surface;Landroid/view/Surface;]Landroid/util/MergedConfiguration;Landroid/util/MergedConfiguration;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ImeFocusController;Landroid/view/ImeFocusController;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/DisplayAdjustments;Landroid/view/DisplayAdjustments;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/Display;Landroid/view/Display;
+HSPLandroid/view/ViewRootImpl;->performTraversals()V+]Landroid/window/SurfaceSyncer;Landroid/window/SurfaceSyncer;]Landroid/view/ViewTreeObserver;Landroid/view/ViewTreeObserver;]Landroid/view/View;missing_types]Landroid/content/res/CompatibilityInfo;Landroid/content/res/CompatibilityInfo$1;]Landroid/graphics/Point;Landroid/graphics/Point;]Landroid/view/HandlerActionQueue;Landroid/view/HandlerActionQueue;]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/content/Context;missing_types]Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;]Lcom/android/internal/view/RootViewSurfaceTaker;Lcom/android/internal/policy/DecorView;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Landroid/graphics/Region;Landroid/graphics/Region;]Landroid/view/Surface;Landroid/view/Surface;]Landroid/util/MergedConfiguration;Landroid/util/MergedConfiguration;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/ImeFocusController;Landroid/view/ImeFocusController;]Landroid/view/DisplayAdjustments;Landroid/view/DisplayAdjustments;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/Display;Landroid/view/Display;]Landroid/animation/LayoutTransition;Landroid/animation/LayoutTransition;]Landroid/view/ViewGroup;Landroid/widget/MenuPopupWindow$MenuDropDownListView;
 HSPLandroid/view/ViewRootImpl;->playSoundEffect(I)V
 HSPLandroid/view/ViewRootImpl;->pokeDrawLockIfNeeded()V
 HSPLandroid/view/ViewRootImpl;->prepareSurfaces()V
@@ -18142,10 +18153,11 @@
 HSPLandroid/view/ViewRootImpl;->recycleQueuedInputEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
 HSPLandroid/view/ViewRootImpl;->registerAnimatingRenderNode(Landroid/graphics/RenderNode;)V
 HSPLandroid/view/ViewRootImpl;->registerBackCallbackOnWindow()V+]Landroid/window/WindowOnBackInvokedDispatcher;Landroid/window/WindowOnBackInvokedDispatcher;
+HSPLandroid/view/ViewRootImpl;->registerCallbacksForSync(ZLandroid/window/SurfaceSyncer$SyncBufferCallback;)V+]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
 HSPLandroid/view/ViewRootImpl;->registerCompatOnBackInvokedCallback()V+]Landroid/window/WindowOnBackInvokedDispatcher;Landroid/window/WindowOnBackInvokedDispatcher;
 HSPLandroid/view/ViewRootImpl;->registerListeners()V+]Landroid/hardware/display/DisplayManager;Landroid/hardware/display/DisplayManager;]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;
 HSPLandroid/view/ViewRootImpl;->registerRtFrameCallback(Landroid/graphics/HardwareRenderer$FrameDrawingCallback;)V
-HSPLandroid/view/ViewRootImpl;->relayoutWindow(Landroid/view/WindowManager$LayoutParams;IZ)I
+HSPLandroid/view/ViewRootImpl;->relayoutWindow(Landroid/view/WindowManager$LayoutParams;IZ)I+]Landroid/view/IWindowSession;Landroid/view/IWindowSession$Stub$Proxy;]Landroid/view/View;Landroid/widget/RelativeLayout;,Landroid/widget/FrameLayout;,Landroid/widget/LinearLayout;]Landroid/graphics/Point;Landroid/graphics/Point;]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/view/contentcapture/ContentCaptureManager;Landroid/view/contentcapture/ContentCaptureManager;]Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/InsetsController;Landroid/view/InsetsController;]Landroid/view/contentcapture/MainContentCaptureSession;Landroid/view/contentcapture/MainContentCaptureSession;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Landroid/view/Display;Landroid/view/Display;
 HSPLandroid/view/ViewRootImpl;->removeSendWindowContentChangedCallback()V
 HSPLandroid/view/ViewRootImpl;->removeSurfaceChangedCallback(Landroid/view/ViewRootImpl$SurfaceChangedCallback;)V
 HSPLandroid/view/ViewRootImpl;->removeWindowCallbacks(Landroid/view/WindowCallbacks;)V
@@ -18158,7 +18170,7 @@
 HSPLandroid/view/ViewRootImpl;->requestLayout()V
 HSPLandroid/view/ViewRootImpl;->requestLayoutDuringLayout(Landroid/view/View;)Z+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/ViewRootImpl;->requestTransparentRegion(Landroid/view/View;)V
-HSPLandroid/view/ViewRootImpl;->scheduleConsumeBatchedInput()V
+HSPLandroid/view/ViewRootImpl;->scheduleConsumeBatchedInput()V+]Landroid/view/Choreographer;Landroid/view/Choreographer;
 HSPLandroid/view/ViewRootImpl;->scheduleTraversals()V+]Landroid/os/Looper;Landroid/os/Looper;]Landroid/view/ViewRootImpl$ViewRootHandler;Landroid/view/ViewRootImpl$ViewRootHandler;]Landroid/os/MessageQueue;Landroid/os/MessageQueue;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/Choreographer;Landroid/view/Choreographer;
 HSPLandroid/view/ViewRootImpl;->scrollToRectOrFocus(Landroid/graphics/Rect;Z)Z
 HSPLandroid/view/ViewRootImpl;->sendBackKeyEvent(I)V
@@ -18169,7 +18181,7 @@
 HSPLandroid/view/ViewRootImpl;->setLayoutParams(Landroid/view/WindowManager$LayoutParams;Z)V
 HSPLandroid/view/ViewRootImpl;->setOnContentApplyWindowInsetsListener(Landroid/view/Window$OnContentApplyWindowInsetsListener;)V
 HSPLandroid/view/ViewRootImpl;->setTag()V
-HSPLandroid/view/ViewRootImpl;->setView(Landroid/view/View;Landroid/view/WindowManager$LayoutParams;Landroid/view/View;I)V
+HSPLandroid/view/ViewRootImpl;->setView(Landroid/view/View;Landroid/view/WindowManager$LayoutParams;Landroid/view/View;I)V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/IWindowSession;Landroid/view/IWindowSession$Stub$Proxy;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/View;Lcom/android/internal/policy/DecorView;,Landroid/widget/LinearLayout;]Landroid/content/res/CompatibilityInfo;Landroid/content/res/CompatibilityInfo$1;]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/view/InsetsController;Landroid/view/InsetsController;]Landroid/view/PendingInsetsController;Landroid/view/PendingInsetsController;]Lcom/android/internal/view/RootViewSurfaceTaker;Lcom/android/internal/policy/DecorView;]Landroid/view/FallbackEventHandler;Lcom/android/internal/policy/PhoneFallbackEventHandler;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Landroid/view/WindowLayout;Landroid/view/WindowLayout;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;]Landroid/view/DisplayAdjustments;Landroid/view/DisplayAdjustments;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Landroid/view/Display;Landroid/view/Display;
 HSPLandroid/view/ViewRootImpl;->setWindowStopped(Z)V
 HSPLandroid/view/ViewRootImpl;->shouldDispatchCutout()Z
 HSPLandroid/view/ViewRootImpl;->shouldUseDisplaySize(Landroid/view/WindowManager$LayoutParams;)Z
@@ -18206,33 +18218,34 @@
 HSPLandroid/view/ViewRootInsetsControllerHost;->updateRequestedVisibilities(Landroid/view/InsetsVisibilities;)V
 HSPLandroid/view/ViewRootRectTracker$ViewInfo;-><init>(Landroid/view/ViewRootRectTracker;Landroid/view/View;)V
 HSPLandroid/view/ViewRootRectTracker$ViewInfo;->getView()Landroid/view/View;+]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
-HSPLandroid/view/ViewRootRectTracker$ViewInfo;->update()I+]Landroid/view/ViewRootRectTracker$ViewInfo;Landroid/view/ViewRootRectTracker$ViewInfo;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/Collections$EmptyIterator;,Ljava/util/ArrayList$Itr;]Landroid/view/ViewParent;missing_types]Landroid/view/View;missing_types
+HSPLandroid/view/ViewRootRectTracker$ViewInfo;->update()I+]Landroid/view/ViewRootRectTracker$ViewInfo;Landroid/view/ViewRootRectTracker$ViewInfo;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/Collections$EmptyIterator;,Ljava/util/ArrayList$Itr;]Landroid/view/View;missing_types]Landroid/view/ViewParent;missing_types
 HSPLandroid/view/ViewRootRectTracker;->-$$Nest$mgetTrackedRectsForView(Landroid/view/ViewRootRectTracker;Landroid/view/View;)Ljava/util/List;
 HSPLandroid/view/ViewRootRectTracker;-><init>(Ljava/util/function/Function;)V
-HSPLandroid/view/ViewRootRectTracker;->computeChangedRects()Ljava/util/List;+]Landroid/view/ViewRootRectTracker$ViewInfo;Landroid/view/ViewRootRectTracker$ViewInfo;]Ljava/util/List;Ljava/util/ArrayList;,Ljava/util/Collections$EmptyList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HSPLandroid/view/ViewRootRectTracker;->computeChangedRects()Ljava/util/List;+]Landroid/view/ViewRootRectTracker$ViewInfo;Landroid/view/ViewRootRectTracker$ViewInfo;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HSPLandroid/view/ViewRootRectTracker;->computeChanges()Z+]Landroid/view/ViewRootRectTracker$ViewInfo;Landroid/view/ViewRootRectTracker$ViewInfo;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLandroid/view/ViewRootRectTracker;->getTrackedRectsForView(Landroid/view/View;)Ljava/util/List;+]Ljava/util/function/Function;Landroid/view/ViewRootImpl$$ExternalSyntheticLambda10;,Landroid/view/ViewRootImpl$$ExternalSyntheticLambda11;,Landroid/view/ViewRootImpl$$ExternalSyntheticLambda9;,Landroid/view/ViewRootImpl$$ExternalSyntheticLambda4;,Landroid/view/ViewRootImpl$$ExternalSyntheticLambda5;,Landroid/view/ViewRootImpl$$ExternalSyntheticLambda6;
-HSPLandroid/view/ViewRootRectTracker;->updateRectsForView(Landroid/view/View;)V+]Landroid/view/ViewRootRectTracker$ViewInfo;Landroid/view/ViewRootRectTracker$ViewInfo;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Landroid/view/View;missing_types
+HSPLandroid/view/ViewRootRectTracker;->updateRectsForView(Landroid/view/View;)V+]Landroid/view/ViewRootRectTracker$ViewInfo;Landroid/view/ViewRootRectTracker$ViewInfo;]Landroid/view/View;missing_types]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLandroid/view/ViewStructure;-><init>()V
 HSPLandroid/view/ViewStructure;->setImportantForAutofill(I)V
 HSPLandroid/view/ViewStub;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/view/ViewStub;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroid/view/ViewStub;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/view/ViewStub;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/content/Context;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/view/ViewStub;Landroid/view/ViewStub;
 HSPLandroid/view/ViewStub;->inflate()Landroid/view/View;
 HSPLandroid/view/ViewStub;->setLayoutInflater(Landroid/view/LayoutInflater;)V
 HSPLandroid/view/ViewStub;->setLayoutResource(I)V
 HSPLandroid/view/ViewStub;->setOnInflateListener(Landroid/view/ViewStub$OnInflateListener;)V
 HSPLandroid/view/ViewStub;->setVisibility(I)V
 HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray$Access;-><init>()V
-HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray$Access;->get(I)Ljava/lang/Object;
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray$Access;->get(I)Ljava/lang/Object;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray$Access;->size()I
 HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;-><init>()V
 HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->add(Ljava/lang/Object;)V
 HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->addAll(Landroid/view/ViewTreeObserver$CopyOnWriteArray;)V
-HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->end()V
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->end()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->getArray()Ljava/util/ArrayList;
 HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->remove(Ljava/lang/Object;)V
-HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->size()I
-HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->start()Landroid/view/ViewTreeObserver$CopyOnWriteArray$Access;
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->size()I+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->start()Landroid/view/ViewTreeObserver$CopyOnWriteArray$Access;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/ViewTreeObserver$InternalInsetsInfo;-><init>()V
 HSPLandroid/view/ViewTreeObserver$InternalInsetsInfo;->equals(Ljava/lang/Object;)Z
 HSPLandroid/view/ViewTreeObserver$InternalInsetsInfo;->isEmpty()Z
@@ -18248,10 +18261,10 @@
 HSPLandroid/view/ViewTreeObserver;->captureFrameCommitCallbacks()Ljava/util/ArrayList;
 HSPLandroid/view/ViewTreeObserver;->checkIsAlive()V
 HSPLandroid/view/ViewTreeObserver;->dispatchOnComputeInternalInsets(Landroid/view/ViewTreeObserver$InternalInsetsInfo;)V
-HSPLandroid/view/ViewTreeObserver;->dispatchOnDraw()V
+HSPLandroid/view/ViewTreeObserver;->dispatchOnDraw()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/ViewTreeObserver$OnDrawListener;Landroid/widget/Editor$2;
 HSPLandroid/view/ViewTreeObserver;->dispatchOnEnterAnimationComplete()V
-HSPLandroid/view/ViewTreeObserver;->dispatchOnGlobalLayout()V
-HSPLandroid/view/ViewTreeObserver;->dispatchOnPreDraw()Z
+HSPLandroid/view/ViewTreeObserver;->dispatchOnGlobalLayout()V+]Landroid/view/ViewTreeObserver$CopyOnWriteArray$Access;Landroid/view/ViewTreeObserver$CopyOnWriteArray$Access;]Landroid/view/ViewTreeObserver$CopyOnWriteArray;Landroid/view/ViewTreeObserver$CopyOnWriteArray;
+HSPLandroid/view/ViewTreeObserver;->dispatchOnPreDraw()Z+]Landroid/view/ViewTreeObserver$OnPreDrawListener;missing_types]Landroid/view/ViewTreeObserver$CopyOnWriteArray$Access;Landroid/view/ViewTreeObserver$CopyOnWriteArray$Access;]Landroid/view/ViewTreeObserver$CopyOnWriteArray;Landroid/view/ViewTreeObserver$CopyOnWriteArray;
 HSPLandroid/view/ViewTreeObserver;->dispatchOnScrollChanged()V
 HSPLandroid/view/ViewTreeObserver;->dispatchOnSystemGestureExclusionRectsChanged(Ljava/util/List;)V
 HSPLandroid/view/ViewTreeObserver;->dispatchOnTouchModeChanged(Z)V
@@ -18328,7 +18341,7 @@
 HSPLandroid/view/WindowInsets$Type;->statusBars()I
 HSPLandroid/view/WindowInsets$Type;->systemBars()I
 HSPLandroid/view/WindowInsets$Type;->toString(I)Ljava/lang/String;
-HSPLandroid/view/WindowInsets;-><init>([Landroid/graphics/Insets;[Landroid/graphics/Insets;[ZZZLandroid/view/DisplayCutout;Landroid/view/RoundedCorners;Landroid/view/PrivacyIndicatorBounds;IZ)V
+HSPLandroid/view/WindowInsets;-><init>([Landroid/graphics/Insets;[Landroid/graphics/Insets;[ZZZLandroid/view/DisplayCutout;Landroid/view/RoundedCorners;Landroid/view/PrivacyIndicatorBounds;IZ)V+]Landroid/view/DisplayCutout;Landroid/view/DisplayCutout;][Landroid/graphics/Insets;[Landroid/graphics/Insets;
 HSPLandroid/view/WindowInsets;->assignCompatInsets([Landroid/graphics/Insets;Landroid/graphics/Rect;)V
 HSPLandroid/view/WindowInsets;->consumeDisplayCutout()Landroid/view/WindowInsets;
 HSPLandroid/view/WindowInsets;->consumeStableInsets()Landroid/view/WindowInsets;
@@ -18376,7 +18389,7 @@
 HSPLandroid/view/WindowManager$LayoutParams;-><init>()V
 HSPLandroid/view/WindowManager$LayoutParams;-><init>(IIIII)V
 HSPLandroid/view/WindowManager$LayoutParams;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/view/WindowManager$LayoutParams;->copyFrom(Landroid/view/WindowManager$LayoutParams;)I
+HSPLandroid/view/WindowManager$LayoutParams;->copyFrom(Landroid/view/WindowManager$LayoutParams;)I+]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/view/WindowManager$LayoutParams;->getColorMode()I
 HSPLandroid/view/WindowManager$LayoutParams;->getFitInsetsSides()I
 HSPLandroid/view/WindowManager$LayoutParams;->getFitInsetsTypes()I
@@ -18390,7 +18403,7 @@
 HSPLandroid/view/WindowManager$LayoutParams;->setFitInsetsTypes(I)V
 HSPLandroid/view/WindowManager$LayoutParams;->setSurfaceInsets(Landroid/view/View;ZZ)V
 HSPLandroid/view/WindowManager$LayoutParams;->setTitle(Ljava/lang/CharSequence;)V
-HSPLandroid/view/WindowManager$LayoutParams;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/view/WindowManager$LayoutParams;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/WindowManagerGlobal$1;-><init>()V
 HSPLandroid/view/WindowManagerGlobal$2;-><init>(Landroid/view/WindowManagerGlobal;)V
 HSPLandroid/view/WindowManagerGlobal;-><init>()V
@@ -18469,8 +18482,8 @@
 HSPLandroid/view/accessibility/AccessibilityManager;->updateUiTimeout(J)V
 HSPLandroid/view/accessibility/AccessibilityNodeIdManager;-><init>()V
 HSPLandroid/view/accessibility/AccessibilityNodeIdManager;->getInstance()Landroid/view/accessibility/AccessibilityNodeIdManager;
-HSPLandroid/view/accessibility/AccessibilityNodeIdManager;->registerViewWithId(Landroid/view/View;I)V
-HSPLandroid/view/accessibility/AccessibilityNodeIdManager;->unregisterViewWithId(I)V
+HSPLandroid/view/accessibility/AccessibilityNodeIdManager;->registerViewWithId(Landroid/view/View;I)V+]Landroid/view/accessibility/WeakSparseArray;Landroid/view/accessibility/WeakSparseArray;
+HSPLandroid/view/accessibility/AccessibilityNodeIdManager;->unregisterViewWithId(I)V+]Landroid/view/accessibility/WeakSparseArray;Landroid/view/accessibility/WeakSparseArray;
 HSPLandroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;-><init>(ILjava/lang/CharSequence;)V
 HSPLandroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;->getId()I
 HSPLandroid/view/accessibility/AccessibilityNodeProvider;-><init>()V
@@ -18505,9 +18518,9 @@
 HSPLandroid/view/accessibility/IAccessibilityManagerClient$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/view/accessibility/WeakSparseArray$WeakReferenceWithId;-><init>(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;I)V
 HSPLandroid/view/accessibility/WeakSparseArray;-><init>()V
-HSPLandroid/view/accessibility/WeakSparseArray;->append(ILjava/lang/Object;)V
-HSPLandroid/view/accessibility/WeakSparseArray;->remove(I)V
-HSPLandroid/view/accessibility/WeakSparseArray;->removeUnreachableValues()V
+HSPLandroid/view/accessibility/WeakSparseArray;->append(ILjava/lang/Object;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLandroid/view/accessibility/WeakSparseArray;->remove(I)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLandroid/view/accessibility/WeakSparseArray;->removeUnreachableValues()V+]Ljava/lang/ref/ReferenceQueue;Ljava/lang/ref/ReferenceQueue;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLandroid/view/animation/AccelerateDecelerateInterpolator;-><init>()V
 HSPLandroid/view/animation/AccelerateDecelerateInterpolator;->createNativeInterpolator()J
 HSPLandroid/view/animation/AccelerateDecelerateInterpolator;->getInterpolation(F)F
@@ -18526,7 +18539,7 @@
 HSPLandroid/view/animation/Animation$Description;-><init>()V
 HSPLandroid/view/animation/Animation$Description;->parseValue(Landroid/util/TypedValue;Landroid/content/Context;)Landroid/view/animation/Animation$Description;+]Landroid/util/TypedValue;Landroid/util/TypedValue;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLandroid/view/animation/Animation;-><init>()V
-HSPLandroid/view/animation/Animation;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/view/animation/Animation;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V+]Landroid/content/Context;missing_types]Landroid/view/animation/Animation;Landroid/view/animation/AnimationSet;,Landroid/view/animation/TranslateAnimation;,Landroid/view/animation/AlphaAnimation;,Landroid/view/animation/ScaleAnimation;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/view/animation/Animation;->cancel()V
 HSPLandroid/view/animation/Animation;->detach()V
 HSPLandroid/view/animation/Animation;->dispatchAnimationEnd()V
@@ -18535,10 +18548,10 @@
 HSPLandroid/view/animation/Animation;->finalize()V
 HSPLandroid/view/animation/Animation;->getDuration()J
 HSPLandroid/view/animation/Animation;->getFillAfter()Z
-HSPLandroid/view/animation/Animation;->getInvalidateRegion(IIIILandroid/graphics/RectF;Landroid/view/animation/Transformation;)V
+HSPLandroid/view/animation/Animation;->getInvalidateRegion(IIIILandroid/graphics/RectF;Landroid/view/animation/Transformation;)V+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/view/animation/Transformation;Landroid/view/animation/Transformation;
 HSPLandroid/view/animation/Animation;->getScaleFactor()F
 HSPLandroid/view/animation/Animation;->getStartOffset()J
-HSPLandroid/view/animation/Animation;->getTransformation(JLandroid/view/animation/Transformation;)Z
+HSPLandroid/view/animation/Animation;->getTransformation(JLandroid/view/animation/Transformation;)Z+]Landroid/view/animation/Animation;Landroid/view/animation/TranslateAnimation;,Landroid/view/animation/AlphaAnimation;,Landroid/view/animation/ScaleAnimation;]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
 HSPLandroid/view/animation/Animation;->getTransformation(JLandroid/view/animation/Transformation;F)Z
 HSPLandroid/view/animation/Animation;->getTransformationAt(FLandroid/view/animation/Transformation;)V+]Landroid/view/animation/Interpolator;megamorphic_types]Landroid/view/animation/Animation;megamorphic_types
 HSPLandroid/view/animation/Animation;->hasAlpha()Z
@@ -18575,7 +18588,7 @@
 HSPLandroid/view/animation/AnimationSet;-><init>(Z)V
 HSPLandroid/view/animation/AnimationSet;->addAnimation(Landroid/view/animation/Animation;)V
 HSPLandroid/view/animation/AnimationSet;->getDuration()J
-HSPLandroid/view/animation/AnimationSet;->getTransformation(JLandroid/view/animation/Transformation;)Z
+HSPLandroid/view/animation/AnimationSet;->getTransformation(JLandroid/view/animation/Transformation;)Z+]Landroid/view/animation/AnimationSet;missing_types]Landroid/view/animation/Transformation;Landroid/view/animation/Transformation;]Landroid/view/animation/Animation;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/animation/AnimationSet;->hasAlpha()Z
 HSPLandroid/view/animation/AnimationSet;->init()V
 HSPLandroid/view/animation/AnimationSet;->initialize(IIII)V
@@ -18596,8 +18609,8 @@
 HSPLandroid/view/animation/AnimationUtils$AnimationState;-><init>()V
 HSPLandroid/view/animation/AnimationUtils;->createAnimationFromXml(Landroid/content/Context;Lorg/xmlpull/v1/XmlPullParser;)Landroid/view/animation/Animation;
 HSPLandroid/view/animation/AnimationUtils;->createAnimationFromXml(Landroid/content/Context;Lorg/xmlpull/v1/XmlPullParser;Landroid/view/animation/AnimationSet;Landroid/util/AttributeSet;)Landroid/view/animation/Animation;
-HSPLandroid/view/animation/AnimationUtils;->createInterpolatorFromXml(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Lorg/xmlpull/v1/XmlPullParser;)Landroid/view/animation/Interpolator;
-HSPLandroid/view/animation/AnimationUtils;->currentAnimationTimeMillis()J
+HSPLandroid/view/animation/AnimationUtils;->createInterpolatorFromXml(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Lorg/xmlpull/v1/XmlPullParser;)Landroid/view/animation/Interpolator;+]Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/XmlBlock$Parser;
+HSPLandroid/view/animation/AnimationUtils;->currentAnimationTimeMillis()J+]Ljava/lang/ThreadLocal;Landroid/view/animation/AnimationUtils$1;
 HSPLandroid/view/animation/AnimationUtils;->loadAnimation(Landroid/content/Context;I)Landroid/view/animation/Animation;
 HSPLandroid/view/animation/AnimationUtils;->loadInterpolator(Landroid/content/Context;I)Landroid/view/animation/Interpolator;
 HSPLandroid/view/animation/AnimationUtils;->loadInterpolator(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;I)Landroid/view/animation/Interpolator;
@@ -18624,18 +18637,18 @@
 HSPLandroid/view/animation/PathInterpolator;->initPath(Landroid/graphics/Path;)V
 HSPLandroid/view/animation/PathInterpolator;->parseInterpolatorFromTypeArray(Landroid/content/res/TypedArray;)V
 HSPLandroid/view/animation/ScaleAnimation;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HSPLandroid/view/animation/ScaleAnimation;->applyTransformation(FLandroid/view/animation/Transformation;)V
+HSPLandroid/view/animation/ScaleAnimation;->applyTransformation(FLandroid/view/animation/Transformation;)V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/view/animation/Transformation;Landroid/view/animation/Transformation;]Landroid/view/animation/ScaleAnimation;Landroid/view/animation/ScaleAnimation;
 HSPLandroid/view/animation/ScaleAnimation;->initialize(IIII)V
 HSPLandroid/view/animation/ScaleAnimation;->initializePivotPoint()V
 HSPLandroid/view/animation/ScaleAnimation;->resolveScale(FIIII)F
-HSPLandroid/view/animation/Transformation;-><init>()V
-HSPLandroid/view/animation/Transformation;->clear()V
-HSPLandroid/view/animation/Transformation;->compose(Landroid/view/animation/Transformation;)V
+HSPLandroid/view/animation/Transformation;-><init>()V+]Landroid/view/animation/Transformation;Landroid/view/animation/Transformation;
+HSPLandroid/view/animation/Transformation;->clear()V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/graphics/Rect;Landroid/graphics/Rect;
+HSPLandroid/view/animation/Transformation;->compose(Landroid/view/animation/Transformation;)V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/view/animation/Transformation;Landroid/view/animation/Transformation;
 HSPLandroid/view/animation/Transformation;->getAlpha()F
 HSPLandroid/view/animation/Transformation;->getInsets()Landroid/graphics/Insets;
 HSPLandroid/view/animation/Transformation;->getMatrix()Landroid/graphics/Matrix;
 HSPLandroid/view/animation/Transformation;->getTransformationType()I
-HSPLandroid/view/animation/Transformation;->set(Landroid/view/animation/Transformation;)V
+HSPLandroid/view/animation/Transformation;->set(Landroid/view/animation/Transformation;)V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/view/animation/Transformation;Landroid/view/animation/Transformation;]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/view/animation/Transformation;->setAlpha(F)V
 HSPLandroid/view/animation/Transformation;->setInsets(Landroid/graphics/Insets;)V
 HSPLandroid/view/animation/TranslateAnimation;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
@@ -18664,7 +18677,7 @@
 HSPLandroid/view/autofill/AutofillClientController;->onActivityStopped(Landroid/content/Intent;Z)V
 HSPLandroid/view/autofill/AutofillClientController;->onSaveInstanceState(Landroid/os/Bundle;)V
 HSPLandroid/view/autofill/AutofillClientController;->onStartActivity(Landroid/content/Intent;Landroid/content/Intent;)V
-HSPLandroid/view/autofill/AutofillId$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/autofill/AutofillId;
+HSPLandroid/view/autofill/AutofillId$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/autofill/AutofillId;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/autofill/AutofillId$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/view/autofill/AutofillId;-><init>(I)V
 HSPLandroid/view/autofill/AutofillId;-><init>(IIJI)V
@@ -18675,8 +18688,8 @@
 HSPLandroid/view/autofill/AutofillId;->isVirtualInt()Z
 HSPLandroid/view/autofill/AutofillId;->isVirtualLong()Z
 HSPLandroid/view/autofill/AutofillId;->resetSessionId()V
-HSPLandroid/view/autofill/AutofillId;->toString()Ljava/lang/String;
-HSPLandroid/view/autofill/AutofillId;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/view/autofill/AutofillId;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillId;
+HSPLandroid/view/autofill/AutofillId;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillId;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/autofill/AutofillManager$$ExternalSyntheticLambda0;-><init>(Landroid/view/autofill/IAutoFillManager;Landroid/view/autofill/IAutoFillManagerClient;I)V
 HSPLandroid/view/autofill/AutofillManager$AugmentedAutofillManagerClient;-><init>(Landroid/view/autofill/AutofillManager;)V
 HSPLandroid/view/autofill/AutofillManager$AugmentedAutofillManagerClient;->getView(Landroid/view/autofill/AutofillManager;Landroid/view/autofill/AutofillId;)Landroid/view/View;
@@ -18739,7 +18752,7 @@
 HSPLandroid/view/autofill/IAutoFillManager$Stub$Proxy;->removeClient(Landroid/view/autofill/IAutoFillManagerClient;I)V
 HSPLandroid/view/autofill/IAutoFillManager$Stub$Proxy;->setHasCallback(IIZ)V
 HSPLandroid/view/autofill/IAutoFillManager$Stub$Proxy;->startSession(Landroid/os/IBinder;Landroid/os/IBinder;Landroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;IZILandroid/content/ComponentName;ZLcom/android/internal/os/IResultReceiver;)V
-HSPLandroid/view/autofill/IAutoFillManager$Stub$Proxy;->updateSession(ILandroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;III)V
+HSPLandroid/view/autofill/IAutoFillManager$Stub$Proxy;->updateSession(ILandroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;III)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/autofill/IAutoFillManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/autofill/IAutoFillManager;
 HSPLandroid/view/autofill/IAutoFillManagerClient$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/view/autofill/IAutoFillManagerClient$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
@@ -18759,13 +18772,13 @@
 HSPLandroid/view/contentcapture/ContentCaptureEvent;->setSelectionIndex(II)Landroid/view/contentcapture/ContentCaptureEvent;
 HSPLandroid/view/contentcapture/ContentCaptureEvent;->setText(Ljava/lang/CharSequence;)Landroid/view/contentcapture/ContentCaptureEvent;
 HSPLandroid/view/contentcapture/ContentCaptureEvent;->setViewNode(Landroid/view/contentcapture/ViewNode;)Landroid/view/contentcapture/ContentCaptureEvent;
-HSPLandroid/view/contentcapture/ContentCaptureEvent;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/view/contentcapture/ContentCaptureEvent;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/contentcapture/ContentCaptureHelper;->getLoggingLevelAsString(I)Ljava/lang/String;
 HSPLandroid/view/contentcapture/ContentCaptureHelper;->setLoggingLevel(I)V
 HSPLandroid/view/contentcapture/ContentCaptureManager$LocalDataShareAdapterResourceManager;-><init>()V
 HSPLandroid/view/contentcapture/ContentCaptureManager;-><init>(Landroid/content/Context;Landroid/view/contentcapture/IContentCaptureManager;Landroid/content/ContentCaptureOptions;)V
 HSPLandroid/view/contentcapture/ContentCaptureManager;->getMainContentCaptureSession()Landroid/view/contentcapture/MainContentCaptureSession;
-HSPLandroid/view/contentcapture/ContentCaptureManager;->isContentCaptureEnabled()Z
+HSPLandroid/view/contentcapture/ContentCaptureManager;->isContentCaptureEnabled()Z+]Landroid/view/contentcapture/MainContentCaptureSession;Landroid/view/contentcapture/MainContentCaptureSession;
 HSPLandroid/view/contentcapture/ContentCaptureManager;->onActivityCreated(Landroid/os/IBinder;Landroid/os/IBinder;Landroid/content/ComponentName;)V
 HSPLandroid/view/contentcapture/ContentCaptureManager;->updateWindowAttributes(Landroid/view/WindowManager$LayoutParams;)V
 HSPLandroid/view/contentcapture/ContentCaptureSession;-><init>()V
@@ -18774,14 +18787,14 @@
 HSPLandroid/view/contentcapture/ContentCaptureSession;->getFlushReasonAsString(I)Ljava/lang/String;
 HSPLandroid/view/contentcapture/ContentCaptureSession;->getId()I
 HSPLandroid/view/contentcapture/ContentCaptureSession;->getRandomSessionId()I
-HSPLandroid/view/contentcapture/ContentCaptureSession;->getStateAsString(I)Ljava/lang/String;
+HSPLandroid/view/contentcapture/ContentCaptureSession;->getStateAsString(I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/view/contentcapture/ContentCaptureSession;->isContentCaptureEnabled()Z
 HSPLandroid/view/contentcapture/ContentCaptureSession;->newViewStructure(Landroid/view/View;)Landroid/view/ViewStructure;
-HSPLandroid/view/contentcapture/ContentCaptureSession;->notifyViewAppeared(Landroid/view/ViewStructure;)V
-HSPLandroid/view/contentcapture/ContentCaptureSession;->notifyViewTextChanged(Landroid/view/autofill/AutofillId;Ljava/lang/CharSequence;)V+]Landroid/view/contentcapture/ContentCaptureSession;Landroid/view/contentcapture/MainContentCaptureSession;,Landroid/view/contentcapture/ChildContentCaptureSession;
+HSPLandroid/view/contentcapture/ContentCaptureSession;->notifyViewAppeared(Landroid/view/ViewStructure;)V+]Landroid/view/contentcapture/ContentCaptureSession;Landroid/view/contentcapture/MainContentCaptureSession;
+HSPLandroid/view/contentcapture/ContentCaptureSession;->notifyViewTextChanged(Landroid/view/autofill/AutofillId;Ljava/lang/CharSequence;)V+]Landroid/view/contentcapture/ContentCaptureSession;Landroid/view/contentcapture/ChildContentCaptureSession;,Landroid/view/contentcapture/MainContentCaptureSession;
 HSPLandroid/view/contentcapture/IContentCaptureDirectManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/view/contentcapture/IContentCaptureDirectManager$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/view/contentcapture/IContentCaptureDirectManager$Stub$Proxy;->sendEvents(Landroid/content/pm/ParceledListSlice;ILandroid/content/ContentCaptureOptions;)V
+HSPLandroid/view/contentcapture/IContentCaptureDirectManager$Stub$Proxy;->sendEvents(Landroid/content/pm/ParceledListSlice;ILandroid/content/ContentCaptureOptions;)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/contentcapture/IContentCaptureDirectManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/contentcapture/IContentCaptureDirectManager;
 HSPLandroid/view/contentcapture/IContentCaptureManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/view/contentcapture/IContentCaptureManager$Stub$Proxy;->finishSession(I)V
@@ -18809,19 +18822,19 @@
 HSPLandroid/view/contentcapture/MainContentCaptureSession$SessionStateReceiver;->lambda$send$1(Landroid/view/contentcapture/MainContentCaptureSession;ILandroid/os/IBinder;)V
 HSPLandroid/view/contentcapture/MainContentCaptureSession$SessionStateReceiver;->send(ILandroid/os/Bundle;)V
 HSPLandroid/view/contentcapture/MainContentCaptureSession;-><init>(Landroid/content/Context;Landroid/view/contentcapture/ContentCaptureManager;Landroid/os/Handler;Landroid/view/contentcapture/IContentCaptureManager;)V
-HSPLandroid/view/contentcapture/MainContentCaptureSession;->clearEvents()Landroid/content/pm/ParceledListSlice;
+HSPLandroid/view/contentcapture/MainContentCaptureSession;->clearEvents()Landroid/content/pm/ParceledListSlice;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->destroySession()V
-HSPLandroid/view/contentcapture/MainContentCaptureSession;->flush(I)V+]Landroid/os/Handler;Landroid/os/Handler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Landroid/view/contentcapture/IContentCaptureDirectManager;Landroid/service/contentcapture/ContentCaptureService$2;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/util/LocalLog;Landroid/util/LocalLog;
+HSPLandroid/view/contentcapture/MainContentCaptureSession;->flush(I)V+]Landroid/os/Handler;Landroid/os/Handler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Landroid/view/contentcapture/IContentCaptureDirectManager;Landroid/view/contentcapture/IContentCaptureDirectManager$Stub$Proxy;,Landroid/service/contentcapture/ContentCaptureService$2;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/util/LocalLog;Landroid/util/LocalLog;
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->flushIfNeeded(I)V
-HSPLandroid/view/contentcapture/MainContentCaptureSession;->getActivityName()Ljava/lang/String;
-HSPLandroid/view/contentcapture/MainContentCaptureSession;->getDebugState()Ljava/lang/String;
-HSPLandroid/view/contentcapture/MainContentCaptureSession;->getDebugState(I)Ljava/lang/String;
+HSPLandroid/view/contentcapture/MainContentCaptureSession;->getActivityName()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/ComponentName;Landroid/content/ComponentName;
+HSPLandroid/view/contentcapture/MainContentCaptureSession;->getDebugState()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;
+HSPLandroid/view/contentcapture/MainContentCaptureSession;->getDebugState(I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->hasStarted()Z
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->internalNotifyViewAppeared(Landroid/view/contentcapture/ViewNode$ViewStructureImpl;)V
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->internalNotifyViewTextChanged(Landroid/view/autofill/AutofillId;Ljava/lang/CharSequence;)V
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->internalNotifyViewTreeEvent(Z)V
-HSPLandroid/view/contentcapture/MainContentCaptureSession;->isContentCaptureEnabled()Z
-HSPLandroid/view/contentcapture/MainContentCaptureSession;->isDisabled()Z
+HSPLandroid/view/contentcapture/MainContentCaptureSession;->isContentCaptureEnabled()Z+]Landroid/view/contentcapture/ContentCaptureManager;Landroid/view/contentcapture/ContentCaptureManager;
+HSPLandroid/view/contentcapture/MainContentCaptureSession;->isDisabled()Z+]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->lambda$notifySessionPaused$11$android-view-contentcapture-MainContentCaptureSession(I)V
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->lambda$notifySessionResumed$10$android-view-contentcapture-MainContentCaptureSession(I)V
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->lambda$notifyViewAppeared$5$android-view-contentcapture-MainContentCaptureSession(ILandroid/view/contentcapture/ViewNode$ViewStructureImpl;)V+]Landroid/view/contentcapture/ContentCaptureEvent;Landroid/view/contentcapture/ContentCaptureEvent;
@@ -18835,19 +18848,19 @@
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->notifyViewAppeared(ILandroid/view/contentcapture/ViewNode$ViewStructureImpl;)V
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->notifyViewDisappeared(ILandroid/view/autofill/AutofillId;)V
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->notifyViewInsetsChanged(ILandroid/graphics/Insets;)V
-HSPLandroid/view/contentcapture/MainContentCaptureSession;->notifyViewTextChanged(ILandroid/view/autofill/AutofillId;Ljava/lang/CharSequence;)V
+HSPLandroid/view/contentcapture/MainContentCaptureSession;->notifyViewTextChanged(ILandroid/view/autofill/AutofillId;Ljava/lang/CharSequence;)V+]Landroid/os/Handler;Landroid/os/Handler;
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->notifyViewTreeEvent(IZ)V
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->notifyWindowBoundsChanged(ILandroid/graphics/Rect;)V
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->onDestroy()V
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->onSessionStarted(ILandroid/os/IBinder;)V
-HSPLandroid/view/contentcapture/MainContentCaptureSession;->scheduleFlush(IZ)V
+HSPLandroid/view/contentcapture/MainContentCaptureSession;->scheduleFlush(IZ)V+]Landroid/os/Handler;Landroid/os/Handler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->sendEvent(Landroid/view/contentcapture/ContentCaptureEvent;)V
-HSPLandroid/view/contentcapture/MainContentCaptureSession;->sendEvent(Landroid/view/contentcapture/ContentCaptureEvent;Z)V+]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Landroid/view/contentcapture/ContentCaptureEvent;Landroid/view/contentcapture/ContentCaptureEvent;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/contentcapture/MainContentCaptureSession;Landroid/view/contentcapture/MainContentCaptureSession;
+HSPLandroid/view/contentcapture/MainContentCaptureSession;->sendEvent(Landroid/view/contentcapture/ContentCaptureEvent;Z)V+]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Landroid/view/contentcapture/ContentCaptureEvent;Landroid/view/contentcapture/ContentCaptureEvent;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/contentcapture/MainContentCaptureSession;Landroid/view/contentcapture/MainContentCaptureSession;]Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillId;
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->start(Landroid/os/IBinder;Landroid/os/IBinder;Landroid/content/ComponentName;I)V
 HSPLandroid/view/contentcapture/ViewNode$ViewNodeText;-><init>()V
 HSPLandroid/view/contentcapture/ViewNode$ViewNodeText;->isSimple()Z
 HSPLandroid/view/contentcapture/ViewNode$ViewNodeText;->writeToParcel(Landroid/os/Parcel;Z)V
-HSPLandroid/view/contentcapture/ViewNode$ViewStructureImpl;-><init>(Landroid/view/View;)V
+HSPLandroid/view/contentcapture/ViewNode$ViewStructureImpl;-><init>(Landroid/view/View;)V+]Landroid/view/View;missing_types
 HSPLandroid/view/contentcapture/ViewNode$ViewStructureImpl;->getNodeText()Landroid/view/contentcapture/ViewNode$ViewNodeText;
 HSPLandroid/view/contentcapture/ViewNode$ViewStructureImpl;->setAutofillHints([Ljava/lang/String;)V
 HSPLandroid/view/contentcapture/ViewNode$ViewStructureImpl;->setAutofillType(I)V
@@ -18878,7 +18891,7 @@
 HSPLandroid/view/contentcapture/ViewNode$ViewStructureImpl;->setVisibility(I)V
 HSPLandroid/view/contentcapture/ViewNode;->-$$Nest$fputmReceiveContentMimeTypes(Landroid/view/contentcapture/ViewNode;[Ljava/lang/String;)V
 HSPLandroid/view/contentcapture/ViewNode;-><init>()V
-HSPLandroid/view/contentcapture/ViewNode;->writeSelfToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/view/contentcapture/ViewNode;->writeSelfToParcel(Landroid/os/Parcel;I)V+]Landroid/view/contentcapture/ViewNode$ViewNodeText;Landroid/view/contentcapture/ViewNode$ViewNodeText;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/contentcapture/ViewNode;->writeToParcel(Landroid/os/Parcel;Landroid/view/contentcapture/ViewNode;I)V
 HSPLandroid/view/inputmethod/BaseInputConnection;-><init>(Landroid/view/View;Z)V
 HSPLandroid/view/inputmethod/BaseInputConnection;-><init>(Landroid/view/inputmethod/InputMethodManager;Z)V
@@ -18968,7 +18981,7 @@
 HSPLandroid/view/inputmethod/InputMethodManager;->-$$Nest$mforAccessibilitySessionsLocked(Landroid/view/inputmethod/InputMethodManager;Ljava/util/function/Consumer;)V
 HSPLandroid/view/inputmethod/InputMethodManager;-><init>(Lcom/android/internal/view/IInputMethodManager;ILandroid/os/Looper;)V
 HSPLandroid/view/inputmethod/InputMethodManager;->canStartInput(Landroid/view/View;)Z
-HSPLandroid/view/inputmethod/InputMethodManager;->checkFocus()V
+HSPLandroid/view/inputmethod/InputMethodManager;->checkFocus()V+]Landroid/view/ImeFocusController;Landroid/view/ImeFocusController;
 HSPLandroid/view/inputmethod/InputMethodManager;->clearConnectionLocked()V
 HSPLandroid/view/inputmethod/InputMethodManager;->closeCurrentInput()V
 HSPLandroid/view/inputmethod/InputMethodManager;->createInstance(ILandroid/os/Looper;)Landroid/view/inputmethod/InputMethodManager;
@@ -18981,13 +18994,13 @@
 HSPLandroid/view/inputmethod/InputMethodManager;->flushPendingEventsLocked()V
 HSPLandroid/view/inputmethod/InputMethodManager;->forAccessibilitySessionsLocked(Ljava/util/function/Consumer;)V
 HSPLandroid/view/inputmethod/InputMethodManager;->forContext(Landroid/content/Context;)Landroid/view/inputmethod/InputMethodManager;
-HSPLandroid/view/inputmethod/InputMethodManager;->forContextInternal(ILandroid/os/Looper;)Landroid/view/inputmethod/InputMethodManager;
+HSPLandroid/view/inputmethod/InputMethodManager;->forContextInternal(ILandroid/os/Looper;)Landroid/view/inputmethod/InputMethodManager;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLandroid/view/inputmethod/InputMethodManager;->getDelegate()Landroid/view/inputmethod/InputMethodManager$DelegateImpl;
 HSPLandroid/view/inputmethod/InputMethodManager;->getEnabledInputMethodList()Ljava/util/List;
 HSPLandroid/view/inputmethod/InputMethodManager;->getEnabledInputMethodSubtypeList(Landroid/view/inputmethod/InputMethodInfo;Z)Ljava/util/List;
-HSPLandroid/view/inputmethod/InputMethodManager;->getFallbackInputMethodManagerIfNecessary(Landroid/view/View;)Landroid/view/inputmethod/InputMethodManager;
-HSPLandroid/view/inputmethod/InputMethodManager;->getFocusController()Landroid/view/ImeFocusController;
-HSPLandroid/view/inputmethod/InputMethodManager;->getServedViewLocked()Landroid/view/View;
+HSPLandroid/view/inputmethod/InputMethodManager;->getFallbackInputMethodManagerIfNecessary(Landroid/view/View;)Landroid/view/inputmethod/InputMethodManager;+]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
+HSPLandroid/view/inputmethod/InputMethodManager;->getFocusController()Landroid/view/ImeFocusController;+]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
+HSPLandroid/view/inputmethod/InputMethodManager;->getServedViewLocked()Landroid/view/View;+]Landroid/view/ImeFocusController;Landroid/view/ImeFocusController;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
 HSPLandroid/view/inputmethod/InputMethodManager;->getStartInputFlags(Landroid/view/View;I)I
 HSPLandroid/view/inputmethod/InputMethodManager;->hasServedByInputMethodLocked(Landroid/view/View;)Z
 HSPLandroid/view/inputmethod/InputMethodManager;->hideSoftInputFromWindow(Landroid/os/IBinder;I)Z
@@ -18995,7 +19008,7 @@
 HSPLandroid/view/inputmethod/InputMethodManager;->hideSoftInputFromWindow(Landroid/os/IBinder;ILandroid/os/ResultReceiver;I)Z
 HSPLandroid/view/inputmethod/InputMethodManager;->invalidateInput(Landroid/view/View;)V
 HSPLandroid/view/inputmethod/InputMethodManager;->isActive()Z
-HSPLandroid/view/inputmethod/InputMethodManager;->isActive(Landroid/view/View;)Z
+HSPLandroid/view/inputmethod/InputMethodManager;->isActive(Landroid/view/View;)Z+]Landroid/view/inputmethod/InputMethodManager;Landroid/view/inputmethod/InputMethodManager;
 HSPLandroid/view/inputmethod/InputMethodManager;->isCursorAnchorInfoEnabled()Z
 HSPLandroid/view/inputmethod/InputMethodManager;->isFullscreenMode()Z
 HSPLandroid/view/inputmethod/InputMethodManager;->isInEditMode()Z
@@ -19411,7 +19424,7 @@
 HSPLandroid/widget/AutoCompleteTextView$MyWatcher;-><init>(Landroid/widget/AutoCompleteTextView;)V
 HSPLandroid/widget/AutoCompleteTextView$PassThroughClickListener;-><init>(Landroid/widget/AutoCompleteTextView;)V
 HSPLandroid/widget/AutoCompleteTextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HSPLandroid/widget/AutoCompleteTextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;IILandroid/content/res/Resources$Theme;)V
+HSPLandroid/widget/AutoCompleteTextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;IILandroid/content/res/Resources$Theme;)V+]Landroid/widget/ListPopupWindow;Landroid/widget/ListPopupWindow;]Landroid/content/Context;Landroid/view/ContextThemeWrapper;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/widget/AutoCompleteTextView;->setCompletionHint(Ljava/lang/CharSequence;)V
 HSPLandroid/widget/BaseAdapter;-><init>()V
 HSPLandroid/widget/BaseAdapter;->areAllItemsEnabled()Z
@@ -19444,7 +19457,7 @@
 HSPLandroid/widget/CompoundButton;->isChecked()Z
 HSPLandroid/widget/CompoundButton;->jumpDrawablesToCurrentState()V
 HSPLandroid/widget/CompoundButton;->onCreateDrawableState(I)[I
-HSPLandroid/widget/CompoundButton;->onDraw(Landroid/graphics/Canvas;)V
+HSPLandroid/widget/CompoundButton;->onDraw(Landroid/graphics/Canvas;)V+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/AnimatedStateListDrawable;,Landroid/graphics/drawable/RippleDrawable;
 HSPLandroid/widget/CompoundButton;->onProvideStructure(Landroid/view/ViewStructure;II)V
 HSPLandroid/widget/CompoundButton;->onResolveDrawables(I)V
 HSPLandroid/widget/CompoundButton;->onSaveInstanceState()Landroid/os/Parcelable;
@@ -19464,7 +19477,7 @@
 HSPLandroid/widget/EdgeEffect;->isAtEquilibrium()Z
 HSPLandroid/widget/EdgeEffect;->isFinished()Z
 HSPLandroid/widget/EdgeEffect;->onAbsorb(I)V
-HSPLandroid/widget/EdgeEffect;->onPull(FF)V
+HSPLandroid/widget/EdgeEffect;->onPull(FF)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/widget/EdgeEffect;->onPullDistance(FF)F+]Landroid/widget/EdgeEffect;Landroid/widget/EdgeEffect;
 HSPLandroid/widget/EdgeEffect;->onRelease()V
 HSPLandroid/widget/EdgeEffect;->setSize(II)V
@@ -19535,7 +19548,7 @@
 HSPLandroid/widget/Editor$InsertionPointCursorController;->onTouchEvent(Landroid/view/MotionEvent;)V
 HSPLandroid/widget/Editor$InsertionPointCursorController;->show()V
 HSPLandroid/widget/Editor$PositionListener;->addSubscriber(Landroid/widget/Editor$TextViewPositionListener;Z)V
-HSPLandroid/widget/Editor$PositionListener;->onPreDraw()Z+]Landroid/widget/Editor$TextViewPositionListener;Landroid/widget/Editor$CursorAnchorInfoNotifier;
+HSPLandroid/widget/Editor$PositionListener;->onPreDraw()Z+]Landroid/widget/Editor$TextViewPositionListener;Landroid/widget/Editor$CursorAnchorInfoNotifier;,Landroid/widget/Editor$InsertionHandleView;
 HSPLandroid/widget/Editor$PositionListener;->onScrollChanged()V
 HSPLandroid/widget/Editor$PositionListener;->removeSubscriber(Landroid/widget/Editor$TextViewPositionListener;)V
 HSPLandroid/widget/Editor$PositionListener;->updatePosition()V
@@ -19575,8 +19588,8 @@
 HSPLandroid/widget/Editor;->createInputMethodStateIfNeeded()V
 HSPLandroid/widget/Editor;->discardTextDisplayLists()V
 HSPLandroid/widget/Editor;->downgradeEasyCorrectionSpans()V
-HSPLandroid/widget/Editor;->drawHardwareAccelerated(Landroid/graphics/Canvas;Landroid/text/Layout;Landroid/graphics/Path;Landroid/graphics/Paint;I)V
-HSPLandroid/widget/Editor;->drawHardwareAcceleratedInner(Landroid/graphics/Canvas;Landroid/text/Layout;Landroid/graphics/Path;Landroid/graphics/Paint;I[I[IIII)I
+HSPLandroid/widget/Editor;->drawHardwareAccelerated(Landroid/graphics/Canvas;Landroid/text/Layout;Landroid/graphics/Path;Landroid/graphics/Paint;I)V+]Landroid/text/DynamicLayout;Landroid/text/DynamicLayout;]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
+HSPLandroid/widget/Editor;->drawHardwareAcceleratedInner(Landroid/graphics/Canvas;Landroid/text/Layout;Landroid/graphics/Path;Landroid/graphics/Paint;I[I[IIII)I+]Landroid/widget/Editor$TextRenderNode;Landroid/widget/Editor$TextRenderNode;]Landroid/text/Layout;Landroid/text/DynamicLayout;]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/widget/Editor;->endBatchEdit()V
 HSPLandroid/widget/Editor;->ensureEndedBatchEdit()V
 HSPLandroid/widget/Editor;->ensureNoSelectionIfNonSelectable()V
@@ -19585,7 +19598,7 @@
 HSPLandroid/widget/Editor;->forgetUndoRedo()V
 HSPLandroid/widget/Editor;->getAvailableDisplayListIndex([III)I
 HSPLandroid/widget/Editor;->getDefaultOnReceiveContentListener()Landroid/widget/TextViewOnReceiveContentListener;
-HSPLandroid/widget/Editor;->getInputMethodManager()Landroid/view/inputmethod/InputMethodManager;
+HSPLandroid/widget/Editor;->getInputMethodManager()Landroid/view/inputmethod/InputMethodManager;+]Landroid/content/Context;missing_types
 HSPLandroid/widget/Editor;->getInsertionController()Landroid/widget/Editor$InsertionPointCursorController;
 HSPLandroid/widget/Editor;->getLastTapPosition()I
 HSPLandroid/widget/Editor;->getPositionListener()Landroid/widget/Editor$PositionListener;
@@ -19615,7 +19628,7 @@
 HSPLandroid/widget/Editor;->onTouchEvent(Landroid/view/MotionEvent;)V
 HSPLandroid/widget/Editor;->onTouchUpEvent(Landroid/view/MotionEvent;)V
 HSPLandroid/widget/Editor;->onWindowFocusChanged(Z)V
-HSPLandroid/widget/Editor;->prepareCursorControllers()V
+HSPLandroid/widget/Editor;->prepareCursorControllers()V+]Landroid/view/View;missing_types]Landroid/widget/Editor;Landroid/widget/Editor;
 HSPLandroid/widget/Editor;->refreshTextActionMode()V
 HSPLandroid/widget/Editor;->reportExtractedText()Z
 HSPLandroid/widget/Editor;->restoreInstanceState(Landroid/os/ParcelableParcel;)V
@@ -19646,12 +19659,12 @@
 HSPLandroid/widget/ForwardingListener;->onViewDetachedFromWindow(Landroid/view/View;)V
 HSPLandroid/widget/FrameLayout$LayoutParams;-><init>(II)V
 HSPLandroid/widget/FrameLayout$LayoutParams;-><init>(III)V
-HSPLandroid/widget/FrameLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/FrameLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/Context;missing_types
 HSPLandroid/widget/FrameLayout$LayoutParams;-><init>(Landroid/view/ViewGroup$LayoutParams;)V
 HSPLandroid/widget/FrameLayout;-><init>(Landroid/content/Context;)V
 HSPLandroid/widget/FrameLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/widget/FrameLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroid/widget/FrameLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/FrameLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/widget/FrameLayout;missing_types]Landroid/content/Context;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/widget/FrameLayout;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
 HSPLandroid/widget/FrameLayout;->generateDefaultLayoutParams()Landroid/view/ViewGroup$LayoutParams;
 HSPLandroid/widget/FrameLayout;->generateDefaultLayoutParams()Landroid/widget/FrameLayout$LayoutParams;
@@ -19659,13 +19672,13 @@
 HSPLandroid/widget/FrameLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/FrameLayout$LayoutParams;
 HSPLandroid/widget/FrameLayout;->generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/view/ViewGroup$LayoutParams;
 HSPLandroid/widget/FrameLayout;->getAccessibilityClassName()Ljava/lang/CharSequence;
-HSPLandroid/widget/FrameLayout;->getPaddingBottomWithForeground()I
-HSPLandroid/widget/FrameLayout;->getPaddingLeftWithForeground()I
-HSPLandroid/widget/FrameLayout;->getPaddingRightWithForeground()I
-HSPLandroid/widget/FrameLayout;->getPaddingTopWithForeground()I
-HSPLandroid/widget/FrameLayout;->layoutChildren(IIIIZ)V
+HSPLandroid/widget/FrameLayout;->getPaddingBottomWithForeground()I+]Landroid/widget/FrameLayout;missing_types
+HSPLandroid/widget/FrameLayout;->getPaddingLeftWithForeground()I+]Landroid/widget/FrameLayout;missing_types
+HSPLandroid/widget/FrameLayout;->getPaddingRightWithForeground()I+]Landroid/widget/FrameLayout;missing_types
+HSPLandroid/widget/FrameLayout;->getPaddingTopWithForeground()I+]Landroid/widget/FrameLayout;missing_types
+HSPLandroid/widget/FrameLayout;->layoutChildren(IIIIZ)V+]Landroid/view/View;missing_types]Landroid/widget/FrameLayout;missing_types
 HSPLandroid/widget/FrameLayout;->onLayout(ZIIII)V
-HSPLandroid/widget/FrameLayout;->onMeasure(II)V
+HSPLandroid/widget/FrameLayout;->onMeasure(II)V+]Landroid/widget/FrameLayout;missing_types]Landroid/view/View;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/widget/FrameLayout;->setForegroundGravity(I)V
 HSPLandroid/widget/FrameLayout;->setMeasureAllChildren(Z)V
 HSPLandroid/widget/FrameLayout;->shouldDelayChildPressedState()Z
@@ -19681,9 +19694,9 @@
 HSPLandroid/widget/GridLayout$Axis$1;->walk(I)V
 HSPLandroid/widget/GridLayout$Axis;-><init>(Landroid/widget/GridLayout;Z)V
 HSPLandroid/widget/GridLayout$Axis;->calculateMaxIndex()I
-HSPLandroid/widget/GridLayout$Axis;->computeGroupBounds()V
+HSPLandroid/widget/GridLayout$Axis;->computeGroupBounds()V+]Landroid/widget/GridLayout;Landroid/widget/GridLayout;]Landroid/widget/GridLayout$Axis;Landroid/widget/GridLayout$Axis;]Landroid/widget/GridLayout$PackedMap;Landroid/widget/GridLayout$PackedMap;]Landroid/widget/GridLayout$Bounds;Landroid/widget/GridLayout$7$1;,Landroid/widget/GridLayout$Bounds;
 HSPLandroid/widget/GridLayout$Axis;->computeHasWeights()Z
-HSPLandroid/widget/GridLayout$Axis;->computeLinks(Landroid/widget/GridLayout$PackedMap;Z)V
+HSPLandroid/widget/GridLayout$Axis;->computeLinks(Landroid/widget/GridLayout$PackedMap;Z)V+]Landroid/widget/GridLayout$MutableInt;Landroid/widget/GridLayout$MutableInt;]Landroid/widget/GridLayout$Axis;Landroid/widget/GridLayout$Axis;]Landroid/widget/GridLayout$PackedMap;Landroid/widget/GridLayout$PackedMap;]Landroid/widget/GridLayout$Bounds;Landroid/widget/GridLayout$7$1;,Landroid/widget/GridLayout$Bounds;
 HSPLandroid/widget/GridLayout$Axis;->computeLocations([I)V
 HSPLandroid/widget/GridLayout$Axis;->createArcs()[Landroid/widget/GridLayout$Arc;
 HSPLandroid/widget/GridLayout$Axis;->createGroupBounds()Landroid/widget/GridLayout$PackedMap;
@@ -19695,7 +19708,7 @@
 HSPLandroid/widget/GridLayout$Axis;->include(Ljava/util/List;Landroid/widget/GridLayout$Interval;Landroid/widget/GridLayout$MutableInt;Z)V
 HSPLandroid/widget/GridLayout$Axis;->layout(I)V
 HSPLandroid/widget/GridLayout$Axis;->setCount(I)V
-HSPLandroid/widget/GridLayout$Axis;->solve([Landroid/widget/GridLayout$Arc;[IZ)Z
+HSPLandroid/widget/GridLayout$Axis;->solve([Landroid/widget/GridLayout$Arc;[IZ)Z+]Landroid/widget/GridLayout$Axis;Landroid/widget/GridLayout$Axis;
 HSPLandroid/widget/GridLayout$Bounds;->getOffset(Landroid/widget/GridLayout;Landroid/view/View;Landroid/widget/GridLayout$Alignment;IZ)I
 HSPLandroid/widget/GridLayout$Bounds;->include(II)V
 HSPLandroid/widget/GridLayout$Bounds;->reset()V
@@ -19711,10 +19724,10 @@
 HSPLandroid/widget/GridLayout;->consistencyCheck()V
 HSPLandroid/widget/GridLayout;->getDefaultMargin(Landroid/view/View;Landroid/widget/GridLayout$LayoutParams;ZZ)I
 HSPLandroid/widget/GridLayout;->getLayoutParams(Landroid/view/View;)Landroid/widget/GridLayout$LayoutParams;
-HSPLandroid/widget/GridLayout;->getMargin(Landroid/view/View;ZZ)I
-HSPLandroid/widget/GridLayout;->getMargin1(Landroid/view/View;ZZ)I
+HSPLandroid/widget/GridLayout;->getMargin(Landroid/view/View;ZZ)I+]Landroid/widget/GridLayout;Landroid/widget/GridLayout;
+HSPLandroid/widget/GridLayout;->getMargin1(Landroid/view/View;ZZ)I+]Landroid/widget/GridLayout;Landroid/widget/GridLayout;
 HSPLandroid/widget/GridLayout;->getMeasurement(Landroid/view/View;Z)I
-HSPLandroid/widget/GridLayout;->measureChildrenWithMargins(IIZ)V
+HSPLandroid/widget/GridLayout;->measureChildrenWithMargins(IIZ)V+]Landroid/widget/GridLayout;Landroid/widget/GridLayout;]Landroid/widget/GridLayout$Axis;Landroid/widget/GridLayout$Axis;
 HSPLandroid/widget/GridLayout;->onLayout(ZIIII)V
 HSPLandroid/widget/GridLayout;->onMeasure(II)V
 HSPLandroid/widget/GridLayout;->requestLayout()V
@@ -19762,33 +19775,33 @@
 HSPLandroid/widget/ImageView;-><init>(Landroid/content/Context;)V
 HSPLandroid/widget/ImageView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/widget/ImageView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroid/widget/ImageView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/widget/ImageView;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/Context;missing_types
+HSPLandroid/widget/ImageView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/widget/ImageView;missing_types]Landroid/content/Context;missing_types
 HSPLandroid/widget/ImageView;->applyAlpha()V
 HSPLandroid/widget/ImageView;->applyColorFilter()V
 HSPLandroid/widget/ImageView;->applyImageTint()V
 HSPLandroid/widget/ImageView;->applyXfermode()V
 HSPLandroid/widget/ImageView;->clearColorFilter()V
-HSPLandroid/widget/ImageView;->configureBounds()V
+HSPLandroid/widget/ImageView;->configureBounds()V+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/graphics/drawable/Drawable;missing_types]Landroid/widget/ImageView;missing_types
 HSPLandroid/widget/ImageView;->drawableHotspotChanged(FF)V
-HSPLandroid/widget/ImageView;->drawableStateChanged()V
+HSPLandroid/widget/ImageView;->drawableStateChanged()V+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;,Landroid/graphics/drawable/BitmapDrawable;,Landroid/graphics/drawable/ColorDrawable;
 HSPLandroid/widget/ImageView;->getAccessibilityClassName()Ljava/lang/CharSequence;
 HSPLandroid/widget/ImageView;->getBaseline()I
 HSPLandroid/widget/ImageView;->getDrawable()Landroid/graphics/drawable/Drawable;
 HSPLandroid/widget/ImageView;->getImageMatrix()Landroid/graphics/Matrix;
 HSPLandroid/widget/ImageView;->getScaleType()Landroid/widget/ImageView$ScaleType;
 HSPLandroid/widget/ImageView;->hasOverlappingRendering()Z
-HSPLandroid/widget/ImageView;->initImageView()V+]Landroid/widget/ImageView;Landroid/widget/ImageView;,Landroid/widget/ImageButton;
-HSPLandroid/widget/ImageView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/ImageView;->initImageView()V+]Landroid/widget/ImageView;missing_types
+HSPLandroid/widget/ImageView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/graphics/drawable/Drawable;megamorphic_types]Landroid/widget/ImageView;missing_types
 HSPLandroid/widget/ImageView;->isFilledByImage()Z
-HSPLandroid/widget/ImageView;->isOpaque()Z
-HSPLandroid/widget/ImageView;->jumpDrawablesToCurrentState()V
+HSPLandroid/widget/ImageView;->isOpaque()Z+]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/widget/ImageView;->jumpDrawablesToCurrentState()V+]Landroid/graphics/drawable/Drawable;megamorphic_types
 HSPLandroid/widget/ImageView;->onAttachedToWindow()V
 HSPLandroid/widget/ImageView;->onCreateDrawableState(I)[I
 HSPLandroid/widget/ImageView;->onDetachedFromWindow()V
-HSPLandroid/widget/ImageView;->onDraw(Landroid/graphics/Canvas;)V+]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
-HSPLandroid/widget/ImageView;->onMeasure(II)V
-HSPLandroid/widget/ImageView;->onRtlPropertiesChanged(I)V
-HSPLandroid/widget/ImageView;->onVisibilityAggregated(Z)V
+HSPLandroid/widget/ImageView;->onDraw(Landroid/graphics/Canvas;)V+]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/widget/ImageView;->onMeasure(II)V+]Landroid/widget/ImageView;missing_types
+HSPLandroid/widget/ImageView;->onRtlPropertiesChanged(I)V+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/BitmapDrawable;,Landroid/graphics/drawable/ColorDrawable;
+HSPLandroid/widget/ImageView;->onVisibilityAggregated(Z)V+]Landroid/graphics/drawable/Drawable;megamorphic_types
 HSPLandroid/widget/ImageView;->resizeFromDrawable()V
 HSPLandroid/widget/ImageView;->resolveAdjustedSize(III)I
 HSPLandroid/widget/ImageView;->resolveUri()V
@@ -19802,7 +19815,7 @@
 HSPLandroid/widget/ImageView;->setFrame(IIII)Z
 HSPLandroid/widget/ImageView;->setImageAlpha(I)V
 HSPLandroid/widget/ImageView;->setImageBitmap(Landroid/graphics/Bitmap;)V
-HSPLandroid/widget/ImageView;->setImageDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/ImageView;->setImageDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/widget/ImageView;missing_types
 HSPLandroid/widget/ImageView;->setImageMatrix(Landroid/graphics/Matrix;)V
 HSPLandroid/widget/ImageView;->setImageResource(I)V
 HSPLandroid/widget/ImageView;->setImageTintBlendMode(Landroid/graphics/BlendMode;)V
@@ -19812,23 +19825,23 @@
 HSPLandroid/widget/ImageView;->setScaleType(Landroid/widget/ImageView$ScaleType;)V
 HSPLandroid/widget/ImageView;->setSelected(Z)V
 HSPLandroid/widget/ImageView;->setVisibility(I)V
-HSPLandroid/widget/ImageView;->updateDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/ImageView;->updateDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/graphics/drawable/Drawable;megamorphic_types]Landroid/widget/ImageView;missing_types
 HSPLandroid/widget/ImageView;->verifyDrawable(Landroid/graphics/drawable/Drawable;)Z
 HSPLandroid/widget/LinearLayout$LayoutParams;-><init>(II)V
 HSPLandroid/widget/LinearLayout$LayoutParams;-><init>(IIF)V
-HSPLandroid/widget/LinearLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V+]Landroid/content/Context;Landroid/view/ContextThemeWrapper;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLandroid/widget/LinearLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/Context;missing_types
 HSPLandroid/widget/LinearLayout$LayoutParams;-><init>(Landroid/view/ViewGroup$LayoutParams;)V
 HSPLandroid/widget/LinearLayout;-><init>(Landroid/content/Context;)V
 HSPLandroid/widget/LinearLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/widget/LinearLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroid/widget/LinearLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/content/Context;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/widget/LinearLayout;missing_types
-HSPLandroid/widget/LinearLayout;->allViewsAreGoneBefore(I)Z
+HSPLandroid/widget/LinearLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/widget/LinearLayout;missing_types]Landroid/content/Context;missing_types
+HSPLandroid/widget/LinearLayout;->allViewsAreGoneBefore(I)Z+]Landroid/view/View;missing_types]Landroid/widget/LinearLayout;missing_types
 HSPLandroid/widget/LinearLayout;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
-HSPLandroid/widget/LinearLayout;->forceUniformHeight(II)V
-HSPLandroid/widget/LinearLayout;->forceUniformWidth(II)V
+HSPLandroid/widget/LinearLayout;->forceUniformHeight(II)V+]Landroid/view/View;Landroid/widget/LinearLayout;]Landroid/widget/LinearLayout;Landroid/widget/LinearLayout;
+HSPLandroid/widget/LinearLayout;->forceUniformWidth(II)V+]Landroid/view/View;missing_types]Landroid/widget/LinearLayout;Landroid/widget/LinearLayout;
 HSPLandroid/widget/LinearLayout;->generateDefaultLayoutParams()Landroid/view/ViewGroup$LayoutParams;
 HSPLandroid/widget/LinearLayout;->generateDefaultLayoutParams()Landroid/widget/LinearLayout$LayoutParams;
-HSPLandroid/widget/LinearLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams;
+HSPLandroid/widget/LinearLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams;+]Landroid/widget/LinearLayout;Landroid/widget/LinearLayout;
 HSPLandroid/widget/LinearLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/LinearLayout$LayoutParams;+]Landroid/widget/LinearLayout;missing_types
 HSPLandroid/widget/LinearLayout;->generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/view/ViewGroup$LayoutParams;
 HSPLandroid/widget/LinearLayout;->generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/widget/LinearLayout$LayoutParams;
@@ -19840,23 +19853,23 @@
 HSPLandroid/widget/LinearLayout;->getLocationOffset(Landroid/view/View;)I
 HSPLandroid/widget/LinearLayout;->getNextLocationOffset(Landroid/view/View;)I
 HSPLandroid/widget/LinearLayout;->getOrientation()I
-HSPLandroid/widget/LinearLayout;->getVirtualChildAt(I)Landroid/view/View;
-HSPLandroid/widget/LinearLayout;->getVirtualChildCount()I
-HSPLandroid/widget/LinearLayout;->hasDividerBeforeChildAt(I)Z
-HSPLandroid/widget/LinearLayout;->layoutHorizontal(IIII)V
-HSPLandroid/widget/LinearLayout;->layoutVertical(IIII)V
+HSPLandroid/widget/LinearLayout;->getVirtualChildAt(I)Landroid/view/View;+]Landroid/widget/LinearLayout;missing_types
+HSPLandroid/widget/LinearLayout;->getVirtualChildCount()I+]Landroid/widget/LinearLayout;missing_types
+HSPLandroid/widget/LinearLayout;->hasDividerBeforeChildAt(I)Z+]Landroid/widget/LinearLayout;missing_types
+HSPLandroid/widget/LinearLayout;->layoutHorizontal(IIII)V+]Landroid/view/View;missing_types]Landroid/widget/LinearLayout;missing_types
+HSPLandroid/widget/LinearLayout;->layoutVertical(IIII)V+]Landroid/view/View;missing_types]Landroid/widget/LinearLayout;missing_types
 HSPLandroid/widget/LinearLayout;->measureChildBeforeLayout(Landroid/view/View;IIIII)V
-HSPLandroid/widget/LinearLayout;->measureHorizontal(II)V
+HSPLandroid/widget/LinearLayout;->measureHorizontal(II)V+]Landroid/view/View;missing_types]Landroid/widget/LinearLayout;missing_types
 HSPLandroid/widget/LinearLayout;->measureVertical(II)V+]Landroid/view/View;missing_types]Landroid/widget/LinearLayout;missing_types
 HSPLandroid/widget/LinearLayout;->onDraw(Landroid/graphics/Canvas;)V
 HSPLandroid/widget/LinearLayout;->onLayout(ZIIII)V
-HSPLandroid/widget/LinearLayout;->onMeasure(II)V
-HSPLandroid/widget/LinearLayout;->onRtlPropertiesChanged(I)V
+HSPLandroid/widget/LinearLayout;->onMeasure(II)V+]Landroid/widget/LinearLayout;missing_types
+HSPLandroid/widget/LinearLayout;->onRtlPropertiesChanged(I)V+]Landroid/widget/LinearLayout;Landroid/widget/LinearLayout;
 HSPLandroid/widget/LinearLayout;->setBaselineAligned(Z)V
 HSPLandroid/widget/LinearLayout;->setChildFrame(Landroid/view/View;IIII)V
 HSPLandroid/widget/LinearLayout;->setDividerDrawable(Landroid/graphics/drawable/Drawable;)V
-HSPLandroid/widget/LinearLayout;->setGravity(I)V
-HSPLandroid/widget/LinearLayout;->setOrientation(I)V
+HSPLandroid/widget/LinearLayout;->setGravity(I)V+]Landroid/widget/LinearLayout;Landroid/widget/LinearLayout;
+HSPLandroid/widget/LinearLayout;->setOrientation(I)V+]Landroid/widget/LinearLayout;Landroid/widget/LinearLayout;
 HSPLandroid/widget/LinearLayout;->shouldDelayChildPressedState()Z
 HSPLandroid/widget/ListPopupWindow;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
 HSPLandroid/widget/ListPopupWindow;->isShowing()Z
@@ -19894,7 +19907,7 @@
 HSPLandroid/widget/ListView;->lookForSelectablePosition(IZ)I
 HSPLandroid/widget/ListView;->makeAndAddView(IIZIZ)Landroid/view/View;
 HSPLandroid/widget/ListView;->measureHeightOfChildren(IIIII)I
-HSPLandroid/widget/ListView;->measureScrapChild(Landroid/view/View;III)V
+HSPLandroid/widget/ListView;->measureScrapChild(Landroid/view/View;III)V+]Landroid/widget/ListAdapter;Lcom/android/internal/app/AlertController$AlertParams$1;
 HSPLandroid/widget/ListView;->onDetachedFromWindow()V
 HSPLandroid/widget/ListView;->onFinishInflate()V
 HSPLandroid/widget/ListView;->onMeasure(II)V
@@ -19924,7 +19937,7 @@
 HSPLandroid/widget/OverScroller;-><init>(Landroid/content/Context;Landroid/view/animation/Interpolator;)V
 HSPLandroid/widget/OverScroller;-><init>(Landroid/content/Context;Landroid/view/animation/Interpolator;Z)V
 HSPLandroid/widget/OverScroller;->abortAnimation()V
-HSPLandroid/widget/OverScroller;->computeScrollOffset()Z
+HSPLandroid/widget/OverScroller;->computeScrollOffset()Z+]Landroid/widget/OverScroller;Landroid/widget/OverScroller;]Landroid/widget/OverScroller$SplineOverScroller;Landroid/widget/OverScroller$SplineOverScroller;]Landroid/view/animation/Interpolator;Landroid/view/animation/DecelerateInterpolator;
 HSPLandroid/widget/OverScroller;->fling(IIIIIIII)V
 HSPLandroid/widget/OverScroller;->fling(IIIIIIIIII)V
 HSPLandroid/widget/OverScroller;->forceFinished(Z)V
@@ -19943,7 +19956,7 @@
 HSPLandroid/widget/PopupWindow$PopupDecorView;->onDetachedFromWindow()V
 HSPLandroid/widget/PopupWindow;->-$$Nest$munregisterBackCallback(Landroid/widget/PopupWindow;Landroid/window/OnBackInvokedDispatcher;)V
 HSPLandroid/widget/PopupWindow;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroid/widget/PopupWindow;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/PopupWindow;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/widget/PopupWindow;Landroid/widget/PopupWindow;]Landroid/content/Context;Landroid/view/ContextThemeWrapper;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/widget/PopupWindow;-><init>(Landroid/view/View;II)V
 HSPLandroid/widget/PopupWindow;-><init>(Landroid/view/View;IIZ)V
 HSPLandroid/widget/PopupWindow;->attachToAnchor(Landroid/view/View;III)V
@@ -19997,12 +20010,12 @@
 HSPLandroid/widget/ProgressBar$SavedState;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/widget/ProgressBar;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/widget/ProgressBar;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroid/widget/ProgressBar;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/ProgressBar;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Ljava/lang/Thread;Ljava/lang/Thread;]Landroid/widget/ProgressBar;Landroid/widget/ProgressBar;]Landroid/content/Context;Landroid/view/ContextThemeWrapper;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/widget/ProgressBar;->applyIndeterminateTint()V
 HSPLandroid/widget/ProgressBar;->applyPrimaryProgressTint()V
 HSPLandroid/widget/ProgressBar;->applyProgressBackgroundTint()V
 HSPLandroid/widget/ProgressBar;->applyProgressTints()V
-HSPLandroid/widget/ProgressBar;->doRefreshProgress(IIZZZ)V
+HSPLandroid/widget/ProgressBar;->doRefreshProgress(IIZZZ)V+]Landroid/widget/ProgressBar;Landroid/widget/ProgressBar;
 HSPLandroid/widget/ProgressBar;->drawTrack(Landroid/graphics/Canvas;)V
 HSPLandroid/widget/ProgressBar;->drawableHotspotChanged(FF)V
 HSPLandroid/widget/ProgressBar;->drawableStateChanged()V
@@ -20014,15 +20027,15 @@
 HSPLandroid/widget/ProgressBar;->getProgress()I
 HSPLandroid/widget/ProgressBar;->getProgressDrawable()Landroid/graphics/drawable/Drawable;
 HSPLandroid/widget/ProgressBar;->initProgressBar()V
-HSPLandroid/widget/ProgressBar;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/ProgressBar;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/widget/ProgressBar;missing_types]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/widget/ProgressBar;->isIndeterminate()Z
-HSPLandroid/widget/ProgressBar;->jumpDrawablesToCurrentState()V
+HSPLandroid/widget/ProgressBar;->jumpDrawablesToCurrentState()V+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/LayerDrawable;,Landroid/graphics/drawable/RotateDrawable;
 HSPLandroid/widget/ProgressBar;->needsTileify(Landroid/graphics/drawable/Drawable;)Z
 HSPLandroid/widget/ProgressBar;->onAttachedToWindow()V
 HSPLandroid/widget/ProgressBar;->onDetachedFromWindow()V
 HSPLandroid/widget/ProgressBar;->onDraw(Landroid/graphics/Canvas;)V
 HSPLandroid/widget/ProgressBar;->onMeasure(II)V
-HSPLandroid/widget/ProgressBar;->onProgressRefresh(FZI)V
+HSPLandroid/widget/ProgressBar;->onProgressRefresh(FZI)V+]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;
 HSPLandroid/widget/ProgressBar;->onResolveDrawables(I)V
 HSPLandroid/widget/ProgressBar;->onRestoreInstanceState(Landroid/os/Parcelable;)V
 HSPLandroid/widget/ProgressBar;->onSaveInstanceState()Landroid/os/Parcelable;
@@ -20030,7 +20043,7 @@
 HSPLandroid/widget/ProgressBar;->onVisibilityAggregated(Z)V
 HSPLandroid/widget/ProgressBar;->onVisualProgressChanged(IF)V
 HSPLandroid/widget/ProgressBar;->postInvalidate()V
-HSPLandroid/widget/ProgressBar;->refreshProgress(IIZZ)V
+HSPLandroid/widget/ProgressBar;->refreshProgress(IIZZ)V+]Ljava/lang/Thread;Ljava/lang/Thread;
 HSPLandroid/widget/ProgressBar;->setIndeterminate(Z)V
 HSPLandroid/widget/ProgressBar;->setIndeterminateDrawable(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/widget/ProgressBar;->setInterpolator(Landroid/content/Context;I)V
@@ -20041,7 +20054,7 @@
 HSPLandroid/widget/ProgressBar;->setProgressDrawable(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/widget/ProgressBar;->setProgressInternal(IZZ)Z
 HSPLandroid/widget/ProgressBar;->setSecondaryProgress(I)V
-HSPLandroid/widget/ProgressBar;->setVisualProgress(IF)V
+HSPLandroid/widget/ProgressBar;->setVisualProgress(IF)V+]Landroid/graphics/drawable/LayerDrawable;Landroid/graphics/drawable/LayerDrawable;]Landroid/widget/ProgressBar;missing_types]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/widget/ProgressBar;->startAnimation()V
 HSPLandroid/widget/ProgressBar;->stopAnimation()V
 HSPLandroid/widget/ProgressBar;->swapCurrentDrawable(Landroid/graphics/drawable/Drawable;)V
@@ -20050,12 +20063,12 @@
 HSPLandroid/widget/ProgressBar;->verifyDrawable(Landroid/graphics/drawable/Drawable;)Z
 HSPLandroid/widget/RelativeLayout$DependencyGraph$Node;-><init>()V
 HSPLandroid/widget/RelativeLayout$DependencyGraph$Node;->acquire(Landroid/view/View;)Landroid/widget/RelativeLayout$DependencyGraph$Node;
-HSPLandroid/widget/RelativeLayout$DependencyGraph$Node;->release()V
+HSPLandroid/widget/RelativeLayout$DependencyGraph$Node;->release()V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/Pools$SynchronizedPool;Landroid/util/Pools$SynchronizedPool;
 HSPLandroid/widget/RelativeLayout$DependencyGraph;-><init>()V
-HSPLandroid/widget/RelativeLayout$DependencyGraph;->add(Landroid/view/View;)V
-HSPLandroid/widget/RelativeLayout$DependencyGraph;->clear()V
-HSPLandroid/widget/RelativeLayout$DependencyGraph;->findRoots([I)Ljava/util/ArrayDeque;
-HSPLandroid/widget/RelativeLayout$DependencyGraph;->getSortedViews([Landroid/view/View;[I)V
+HSPLandroid/widget/RelativeLayout$DependencyGraph;->add(Landroid/view/View;)V+]Landroid/view/View;missing_types]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/widget/RelativeLayout$DependencyGraph;->clear()V+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/widget/RelativeLayout$DependencyGraph$Node;Landroid/widget/RelativeLayout$DependencyGraph$Node;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/widget/RelativeLayout$DependencyGraph;->findRoots([I)Ljava/util/ArrayDeque;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/view/View;missing_types]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/widget/RelativeLayout$DependencyGraph;->getSortedViews([Landroid/view/View;[I)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/view/View;missing_types]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLandroid/widget/RelativeLayout$LayoutParams;->-$$Nest$fgetmBottom(Landroid/widget/RelativeLayout$LayoutParams;)I
 HSPLandroid/widget/RelativeLayout$LayoutParams;->-$$Nest$fgetmLeft(Landroid/widget/RelativeLayout$LayoutParams;)I
 HSPLandroid/widget/RelativeLayout$LayoutParams;->-$$Nest$fgetmRight(Landroid/widget/RelativeLayout$LayoutParams;)I
@@ -20063,22 +20076,22 @@
 HSPLandroid/widget/RelativeLayout$LayoutParams;->-$$Nest$fputmBottom(Landroid/widget/RelativeLayout$LayoutParams;I)V
 HSPLandroid/widget/RelativeLayout$LayoutParams;->-$$Nest$fputmTop(Landroid/widget/RelativeLayout$LayoutParams;I)V
 HSPLandroid/widget/RelativeLayout$LayoutParams;-><init>(II)V
-HSPLandroid/widget/RelativeLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/RelativeLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/Context;missing_types
 HSPLandroid/widget/RelativeLayout$LayoutParams;->addRule(I)V
 HSPLandroid/widget/RelativeLayout$LayoutParams;->addRule(II)V
 HSPLandroid/widget/RelativeLayout$LayoutParams;->getRules()[I
-HSPLandroid/widget/RelativeLayout$LayoutParams;->getRules(I)[I
+HSPLandroid/widget/RelativeLayout$LayoutParams;->getRules(I)[I+]Landroid/widget/RelativeLayout$LayoutParams;Landroid/widget/RelativeLayout$LayoutParams;
 HSPLandroid/widget/RelativeLayout$LayoutParams;->hasRelativeRules()Z
 HSPLandroid/widget/RelativeLayout$LayoutParams;->removeRule(I)V
 HSPLandroid/widget/RelativeLayout$LayoutParams;->resolveLayoutDirection(I)V
 HSPLandroid/widget/RelativeLayout$LayoutParams;->resolveRules(I)V
-HSPLandroid/widget/RelativeLayout$LayoutParams;->shouldResolveLayoutDirection(I)Z
+HSPLandroid/widget/RelativeLayout$LayoutParams;->shouldResolveLayoutDirection(I)Z+]Landroid/widget/RelativeLayout$LayoutParams;Landroid/widget/RelativeLayout$LayoutParams;
 HSPLandroid/widget/RelativeLayout;-><init>(Landroid/content/Context;)V
 HSPLandroid/widget/RelativeLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/widget/RelativeLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
 HSPLandroid/widget/RelativeLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
 HSPLandroid/widget/RelativeLayout;->applyHorizontalSizeRules(Landroid/widget/RelativeLayout$LayoutParams;I[I)V
-HSPLandroid/widget/RelativeLayout;->applyVerticalSizeRules(Landroid/widget/RelativeLayout$LayoutParams;II)V
+HSPLandroid/widget/RelativeLayout;->applyVerticalSizeRules(Landroid/widget/RelativeLayout$LayoutParams;II)V+]Landroid/widget/RelativeLayout$LayoutParams;Landroid/widget/RelativeLayout$LayoutParams;
 HSPLandroid/widget/RelativeLayout;->centerHorizontal(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;I)V
 HSPLandroid/widget/RelativeLayout;->centerVertical(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;I)V
 HSPLandroid/widget/RelativeLayout;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
@@ -20090,21 +20103,21 @@
 HSPLandroid/widget/RelativeLayout;->getAccessibilityClassName()Ljava/lang/CharSequence;
 HSPLandroid/widget/RelativeLayout;->getBaseline()I
 HSPLandroid/widget/RelativeLayout;->getChildMeasureSpec(IIIIIIII)I
-HSPLandroid/widget/RelativeLayout;->getRelatedView([II)Landroid/view/View;
+HSPLandroid/widget/RelativeLayout;->getRelatedView([II)Landroid/view/View;+]Landroid/view/View;missing_types]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/widget/RelativeLayout$LayoutParams;Landroid/widget/RelativeLayout$LayoutParams;
 HSPLandroid/widget/RelativeLayout;->getRelatedViewBaselineOffset([I)I
-HSPLandroid/widget/RelativeLayout;->getRelatedViewParams([II)Landroid/widget/RelativeLayout$LayoutParams;
+HSPLandroid/widget/RelativeLayout;->getRelatedViewParams([II)Landroid/widget/RelativeLayout$LayoutParams;+]Landroid/view/View;missing_types
 HSPLandroid/widget/RelativeLayout;->initFromAttributes(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HSPLandroid/widget/RelativeLayout;->measureChild(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;II)V
-HSPLandroid/widget/RelativeLayout;->measureChildHorizontal(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;II)V
-HSPLandroid/widget/RelativeLayout;->onLayout(ZIIII)V
-HSPLandroid/widget/RelativeLayout;->onMeasure(II)V+]Landroid/widget/RelativeLayout;Landroid/widget/RelativeLayout;]Landroid/view/View;missing_types]Landroid/widget/RelativeLayout$LayoutParams;Landroid/widget/RelativeLayout$LayoutParams;
-HSPLandroid/widget/RelativeLayout;->positionAtEdge(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;I)V
-HSPLandroid/widget/RelativeLayout;->positionChildHorizontal(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;IZ)Z
-HSPLandroid/widget/RelativeLayout;->positionChildVertical(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;IZ)Z
+HSPLandroid/widget/RelativeLayout;->measureChild(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;II)V+]Landroid/view/View;missing_types
+HSPLandroid/widget/RelativeLayout;->measureChildHorizontal(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;II)V+]Landroid/view/View;missing_types
+HSPLandroid/widget/RelativeLayout;->onLayout(ZIIII)V+]Landroid/widget/RelativeLayout;missing_types]Landroid/view/View;missing_types
+HSPLandroid/widget/RelativeLayout;->onMeasure(II)V+]Landroid/widget/RelativeLayout;missing_types]Landroid/view/View;missing_types]Landroid/widget/RelativeLayout$LayoutParams;Landroid/widget/RelativeLayout$LayoutParams;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/content/Context;missing_types
+HSPLandroid/widget/RelativeLayout;->positionAtEdge(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;I)V+]Landroid/widget/RelativeLayout;missing_types]Landroid/view/View;missing_types
+HSPLandroid/widget/RelativeLayout;->positionChildHorizontal(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;IZ)Z+]Landroid/widget/RelativeLayout;missing_types]Landroid/widget/RelativeLayout$LayoutParams;Landroid/widget/RelativeLayout$LayoutParams;]Landroid/view/View;missing_types
+HSPLandroid/widget/RelativeLayout;->positionChildVertical(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;IZ)Z+]Landroid/view/View;missing_types]Landroid/widget/RelativeLayout$LayoutParams;Landroid/widget/RelativeLayout$LayoutParams;
 HSPLandroid/widget/RelativeLayout;->queryCompatibilityModes(Landroid/content/Context;)V
 HSPLandroid/widget/RelativeLayout;->requestLayout()V
 HSPLandroid/widget/RelativeLayout;->shouldDelayChildPressedState()Z
-HSPLandroid/widget/RelativeLayout;->sortChildren()V
+HSPLandroid/widget/RelativeLayout;->sortChildren()V+]Landroid/widget/RelativeLayout;missing_types]Landroid/widget/RelativeLayout$DependencyGraph;Landroid/widget/RelativeLayout$DependencyGraph;
 HSPLandroid/widget/RemoteViews$2;->createFromParcel(Landroid/os/Parcel;)Landroid/widget/RemoteViews;
 HSPLandroid/widget/RemoteViews$2;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/widget/RemoteViews$Action;-><init>()V
@@ -20144,7 +20157,7 @@
 HSPLandroid/widget/RemoteViews$TextViewSizeAction;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/widget/RemoteViews;->-$$Nest$smgetPackageUserKey(Landroid/content/pm/ApplicationInfo;)Landroid/util/Pair;
 HSPLandroid/widget/RemoteViews;-><init>(Landroid/content/pm/ApplicationInfo;I)V
-HSPLandroid/widget/RemoteViews;-><init>(Landroid/os/Parcel;Landroid/widget/RemoteViews$HierarchyRootData;Landroid/content/pm/ApplicationInfo;I)V+]Landroid/os/Parcelable$Creator;Landroid/util/SizeF$1;,Landroid/content/pm/ApplicationInfo$1;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/widget/RemoteViews;-><init>(Landroid/os/Parcel;Landroid/widget/RemoteViews$HierarchyRootData;Landroid/content/pm/ApplicationInfo;I)V+]Landroid/os/Parcelable$Creator;Landroid/content/pm/ApplicationInfo$1;,Landroid/util/SizeF$1;]Landroid/os/Parcel;Landroid/os/Parcel;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLandroid/widget/RemoteViews;-><init>(Ljava/lang/String;I)V
 HSPLandroid/widget/RemoteViews;->addAction(Landroid/widget/RemoteViews$Action;)V
 HSPLandroid/widget/RemoteViews;->apply(Landroid/content/Context;Landroid/view/ViewGroup;)Landroid/view/View;
@@ -20184,10 +20197,10 @@
 HSPLandroid/widget/RtlSpacingHelper;->setRelative(II)V
 HSPLandroid/widget/ScrollBarDrawable;-><init>()V
 HSPLandroid/widget/ScrollBarDrawable;->draw(Landroid/graphics/Canvas;)V+]Landroid/widget/ScrollBarDrawable;Landroid/widget/ScrollBarDrawable;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
-HSPLandroid/widget/ScrollBarDrawable;->drawThumb(Landroid/graphics/Canvas;Landroid/graphics/Rect;IIZ)V
-HSPLandroid/widget/ScrollBarDrawable;->getSize(Z)I
+HSPLandroid/widget/ScrollBarDrawable;->drawThumb(Landroid/graphics/Canvas;Landroid/graphics/Rect;IIZ)V+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;
+HSPLandroid/widget/ScrollBarDrawable;->getSize(Z)I+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;
 HSPLandroid/widget/ScrollBarDrawable;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
-HSPLandroid/widget/ScrollBarDrawable;->isStateful()Z
+HSPLandroid/widget/ScrollBarDrawable;->isStateful()Z+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;
 HSPLandroid/widget/ScrollBarDrawable;->mutate()Landroid/widget/ScrollBarDrawable;
 HSPLandroid/widget/ScrollBarDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
 HSPLandroid/widget/ScrollBarDrawable;->onStateChange([I)Z
@@ -20208,7 +20221,7 @@
 HSPLandroid/widget/ScrollView;->computeScroll()V
 HSPLandroid/widget/ScrollView;->computeVerticalScrollOffset()I
 HSPLandroid/widget/ScrollView;->computeVerticalScrollRange()I
-HSPLandroid/widget/ScrollView;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/widget/ScrollView;->draw(Landroid/graphics/Canvas;)V+]Landroid/widget/EdgeEffect;Landroid/widget/EdgeEffect;]Landroid/widget/ScrollView;Landroid/widget/ScrollView;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
 HSPLandroid/widget/ScrollView;->getAccessibilityClassName()Ljava/lang/CharSequence;
 HSPLandroid/widget/ScrollView;->initScrollView()V
 HSPLandroid/widget/ScrollView;->measureChildWithMargins(Landroid/view/View;IIII)V
@@ -20275,10 +20288,10 @@
 HSPLandroid/widget/Spinner;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;IIILandroid/content/res/Resources$Theme;)V
 HSPLandroid/widget/Spinner;->onDetachedFromWindow()V
 HSPLandroid/widget/Switch;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HSPLandroid/widget/Switch;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HSPLandroid/widget/Switch;->drawableStateChanged()V
+HSPLandroid/widget/Switch;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/widget/Switch;Landroid/widget/Switch;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/view/ViewConfiguration;Landroid/view/ViewConfiguration;]Landroid/content/Context;Landroid/view/ContextThemeWrapper;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/AnimatedStateListDrawable;,Landroid/graphics/drawable/LayerDrawable;
+HSPLandroid/widget/Switch;->drawableStateChanged()V+]Landroid/widget/Switch;Landroid/widget/Switch;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/AnimatedStateListDrawable;,Landroid/graphics/drawable/LayerDrawable;
 HSPLandroid/widget/Switch;->getButtonStateDescription()Ljava/lang/CharSequence;
-HSPLandroid/widget/Switch;->jumpDrawablesToCurrentState()V
+HSPLandroid/widget/Switch;->jumpDrawablesToCurrentState()V+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/AnimatedStateListDrawable;,Landroid/graphics/drawable/LayerDrawable;
 HSPLandroid/widget/Switch;->onCreateDrawableState(I)[I
 HSPLandroid/widget/Switch;->setChecked(Z)V
 HSPLandroid/widget/Switch;->setSwitchTextAppearance(Landroid/content/Context;I)V
@@ -20293,7 +20306,7 @@
 HSPLandroid/widget/TextView$ChangeWatcher;->onSpanChanged(Landroid/text/Spannable;Ljava/lang/Object;IIII)V
 HSPLandroid/widget/TextView$ChangeWatcher;->onSpanRemoved(Landroid/text/Spannable;Ljava/lang/Object;II)V
 HSPLandroid/widget/TextView$ChangeWatcher;->onTextChanged(Ljava/lang/CharSequence;III)V
-HSPLandroid/widget/TextView$Drawables;-><init>(Landroid/content/Context;)V
+HSPLandroid/widget/TextView$Drawables;-><init>(Landroid/content/Context;)V+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/content/Context;missing_types
 HSPLandroid/widget/TextView$Drawables;->applyErrorDrawableIfNeeded(I)V
 HSPLandroid/widget/TextView$Drawables;->hasMetadata()Z
 HSPLandroid/widget/TextView$Drawables;->resolveWithLayoutDirection(I)Z
@@ -20306,19 +20319,19 @@
 HSPLandroid/widget/TextView;-><init>(Landroid/content/Context;)V
 HSPLandroid/widget/TextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/widget/TextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroid/widget/TextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/content/res/Resources$Theme;Landroid/content/res/Resources$Theme;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/Context;missing_types]Landroid/widget/TextView;missing_types]Landroid/widget/Editor;Landroid/widget/Editor;]Landroid/view/ViewConfiguration;Landroid/view/ViewConfiguration;
+HSPLandroid/widget/TextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/content/res/Resources$Theme;Landroid/content/res/Resources$Theme;]Landroid/view/ViewConfiguration;Landroid/view/ViewConfiguration;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/Context;missing_types]Landroid/widget/TextView;missing_types]Landroid/widget/Editor;Landroid/widget/Editor;
 HSPLandroid/widget/TextView;->addTextChangedListener(Landroid/text/TextWatcher;)V
 HSPLandroid/widget/TextView;->applyCompoundDrawableTint()V
 HSPLandroid/widget/TextView;->applySingleLine(ZZZZ)V
-HSPLandroid/widget/TextView;->applyTextAppearance(Landroid/widget/TextView$TextAppearanceAttributes;)V
+HSPLandroid/widget/TextView;->applyTextAppearance(Landroid/widget/TextView$TextAppearanceAttributes;)V+]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->assumeLayout()V
 HSPLandroid/widget/TextView;->autoSizeText()V
 HSPLandroid/widget/TextView;->beginBatchEdit()V
-HSPLandroid/widget/TextView;->bringPointIntoView(I)Z
+HSPLandroid/widget/TextView;->bringPointIntoView(I)Z+]Landroid/text/Layout$Alignment;Landroid/text/Layout$Alignment;]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/widget/TextView;->bringTextIntoView()Z+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->canMarquee()Z
 HSPLandroid/widget/TextView;->cancelLongPress()V
-HSPLandroid/widget/TextView;->checkForRelayout()V
+HSPLandroid/widget/TextView;->checkForRelayout()V+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->checkForResize()V
 HSPLandroid/widget/TextView;->cleanupAutoSizePresetSizes([I)[I
 HSPLandroid/widget/TextView;->compressText(F)Z
@@ -20328,21 +20341,21 @@
 HSPLandroid/widget/TextView;->computeVerticalScrollRange()I
 HSPLandroid/widget/TextView;->convertToLocalHorizontalCoordinate(F)F
 HSPLandroid/widget/TextView;->createEditorIfNeeded()V
-HSPLandroid/widget/TextView;->desired(Landroid/text/Layout;)I
+HSPLandroid/widget/TextView;->desired(Landroid/text/Layout;)I+]Landroid/text/Layout;Landroid/text/BoringLayout;
 HSPLandroid/widget/TextView;->didTouchFocusSelect()Z
 HSPLandroid/widget/TextView;->doKeyDown(ILandroid/view/KeyEvent;Landroid/view/KeyEvent;)I
 HSPLandroid/widget/TextView;->drawableHotspotChanged(FF)V
-HSPLandroid/widget/TextView;->drawableStateChanged()V
+HSPLandroid/widget/TextView;->drawableStateChanged()V+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;,Landroid/graphics/drawable/BitmapDrawable;
 HSPLandroid/widget/TextView;->endBatchEdit()V
 HSPLandroid/widget/TextView;->findLargestTextSizeWhichFits(Landroid/graphics/RectF;)I
 HSPLandroid/widget/TextView;->fixFocusableAndClickableSettings()V
 HSPLandroid/widget/TextView;->getAccessibilityClassName()Ljava/lang/CharSequence;
 HSPLandroid/widget/TextView;->getAutoSizeStepGranularity()I
 HSPLandroid/widget/TextView;->getAutofillHints()[Ljava/lang/String;
-HSPLandroid/widget/TextView;->getAutofillType()I
+HSPLandroid/widget/TextView;->getAutofillType()I+]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->getAutofillValue()Landroid/view/autofill/AutofillValue;
-HSPLandroid/widget/TextView;->getBaseline()I
-HSPLandroid/widget/TextView;->getBaselineOffset()I
+HSPLandroid/widget/TextView;->getBaseline()I+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Landroid/widget/TextView;missing_types
+HSPLandroid/widget/TextView;->getBaselineOffset()I+]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->getBottomVerticalOffset(Z)I
 HSPLandroid/widget/TextView;->getBoxHeight(Landroid/text/Layout;)I+]Landroid/widget/TextView;Landroid/widget/Switch;,Landroid/widget/TextView;,Landroid/widget/Button;
 HSPLandroid/widget/TextView;->getBreakStrategy()I
@@ -20357,12 +20370,12 @@
 HSPLandroid/widget/TextView;->getDefaultEditable()Z
 HSPLandroid/widget/TextView;->getDefaultMovementMethod()Landroid/text/method/MovementMethod;
 HSPLandroid/widget/TextView;->getDesiredHeight()I
-HSPLandroid/widget/TextView;->getDesiredHeight(Landroid/text/Layout;Z)I
+HSPLandroid/widget/TextView;->getDesiredHeight(Landroid/text/Layout;Z)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->getEditableText()Landroid/text/Editable;
 HSPLandroid/widget/TextView;->getEllipsize()Landroid/text/TextUtils$TruncateAt;
 HSPLandroid/widget/TextView;->getError()Ljava/lang/CharSequence;
-HSPLandroid/widget/TextView;->getExtendedPaddingBottom()I+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Landroid/widget/TextView;Landroid/widget/Switch;,Landroid/widget/TextView;,Landroid/widget/Button;
-HSPLandroid/widget/TextView;->getExtendedPaddingTop()I+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Landroid/widget/TextView;Landroid/widget/Switch;,Landroid/widget/TextView;,Landroid/widget/Button;
+HSPLandroid/widget/TextView;->getExtendedPaddingBottom()I+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;,Landroid/text/DynamicLayout;]Landroid/widget/TextView;missing_types
+HSPLandroid/widget/TextView;->getExtendedPaddingTop()I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->getFilters()[Landroid/text/InputFilter;
 HSPLandroid/widget/TextView;->getFocusedRect(Landroid/graphics/Rect;)V
 HSPLandroid/widget/TextView;->getFreezesText()Z
@@ -20378,7 +20391,7 @@
 HSPLandroid/widget/TextView;->getJustificationMode()I
 HSPLandroid/widget/TextView;->getKeyListener()Landroid/text/method/KeyListener;
 HSPLandroid/widget/TextView;->getLayout()Landroid/text/Layout;
-HSPLandroid/widget/TextView;->getLayoutAlignment()Landroid/text/Layout$Alignment;
+HSPLandroid/widget/TextView;->getLayoutAlignment()Landroid/text/Layout$Alignment;+]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->getLineAtCoordinate(F)I
 HSPLandroid/widget/TextView;->getLineAtCoordinateUnclamped(F)I
 HSPLandroid/widget/TextView;->getLineCount()I
@@ -20392,14 +20405,14 @@
 HSPLandroid/widget/TextView;->getOffsetAtCoordinate(IF)I
 HSPLandroid/widget/TextView;->getOffsetForPosition(FF)I
 HSPLandroid/widget/TextView;->getPaint()Landroid/text/TextPaint;
-HSPLandroid/widget/TextView;->getSelectionEnd()I
-HSPLandroid/widget/TextView;->getSelectionStart()I
+HSPLandroid/widget/TextView;->getSelectionEnd()I+]Landroid/widget/TextView;missing_types
+HSPLandroid/widget/TextView;->getSelectionStart()I+]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->getServiceManagerForUser(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;
 HSPLandroid/widget/TextView;->getSpellCheckerLocale()Ljava/util/Locale;
 HSPLandroid/widget/TextView;->getText()Ljava/lang/CharSequence;
 HSPLandroid/widget/TextView;->getTextColors()Landroid/content/res/ColorStateList;
 HSPLandroid/widget/TextView;->getTextCursorDrawable()Landroid/graphics/drawable/Drawable;
-HSPLandroid/widget/TextView;->getTextDirectionHeuristic()Landroid/text/TextDirectionHeuristic;
+HSPLandroid/widget/TextView;->getTextDirectionHeuristic()Landroid/text/TextDirectionHeuristic;+]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->getTextLocale()Ljava/util/Locale;
 HSPLandroid/widget/TextView;->getTextLocales()Landroid/os/LocaleList;
 HSPLandroid/widget/TextView;->getTextSelectHandle()Landroid/graphics/drawable/Drawable;
@@ -20413,21 +20426,21 @@
 HSPLandroid/widget/TextView;->getTransformationMethod()Landroid/text/method/TransformationMethod;
 HSPLandroid/widget/TextView;->getTypeface()Landroid/graphics/Typeface;
 HSPLandroid/widget/TextView;->getTypefaceStyle()I
-HSPLandroid/widget/TextView;->getUpdatedHighlightPath()Landroid/graphics/Path;+]Landroid/widget/TextView;Landroid/widget/Switch;,Landroid/widget/TextView;,Landroid/widget/Button;
-HSPLandroid/widget/TextView;->getVerticalOffset(Z)I+]Landroid/text/Layout;Landroid/text/BoringLayout;]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLandroid/widget/TextView;->getUpdatedHighlightPath()Landroid/graphics/Path;+]Landroid/graphics/Path;Landroid/graphics/Path;]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/text/Layout;Landroid/text/DynamicLayout;]Landroid/widget/Editor;Landroid/widget/Editor;]Landroid/widget/TextView;Landroid/widget/Switch;,Landroid/widget/TextView;,Landroid/widget/Button;
+HSPLandroid/widget/TextView;->getVerticalOffset(Z)I+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/DynamicLayout;,Landroid/text/StaticLayout;]Ljava/lang/CharSequence;missing_types
 HSPLandroid/widget/TextView;->handleBackInTextActionModeIfNeeded(Landroid/view/KeyEvent;)Z
 HSPLandroid/widget/TextView;->handleTextChanged(Ljava/lang/CharSequence;III)V
-HSPLandroid/widget/TextView;->hasOverlappingRendering()Z+]Landroid/widget/TextView;Landroid/widget/Switch;,Landroid/widget/TextView;,Landroid/widget/Button;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/RippleDrawable;
+HSPLandroid/widget/TextView;->hasOverlappingRendering()Z+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/RippleDrawable;,Landroid/graphics/drawable/GradientDrawable;,Landroid/graphics/drawable/StateListDrawable;,Landroid/graphics/drawable/ColorDrawable;,Landroid/graphics/drawable/NinePatchDrawable;]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->hasPasswordTransformationMethod()Z
 HSPLandroid/widget/TextView;->hasSelection()Z
 HSPLandroid/widget/TextView;->hideErrorIfUnchanged()V
 HSPLandroid/widget/TextView;->invalidateCursor()V
-HSPLandroid/widget/TextView;->invalidateCursorPath()V+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/InsetDrawable;
-HSPLandroid/widget/TextView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/widget/TextView;missing_types]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;,Landroid/graphics/drawable/LayerDrawable;,Landroid/graphics/drawable/RippleDrawable;
+HSPLandroid/widget/TextView;->invalidateCursorPath()V+]Landroid/graphics/Path;Landroid/graphics/Path;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/InsetDrawable;
+HSPLandroid/widget/TextView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/graphics/drawable/Drawable;megamorphic_types]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->invalidateRegion(IIZ)V
 HSPLandroid/widget/TextView;->isAnyPasswordInputType()Z
 HSPLandroid/widget/TextView;->isAutoSizeEnabled()Z
-HSPLandroid/widget/TextView;->isAutofillable()Z
+HSPLandroid/widget/TextView;->isAutofillable()Z+]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->isFallbackLineSpacingForStaticLayout()Z
 HSPLandroid/widget/TextView;->isFromPrimePointer(Landroid/view/MotionEvent;Z)Z
 HSPLandroid/widget/TextView;->isInBatchEditMode()Z
@@ -20444,19 +20457,19 @@
 HSPLandroid/widget/TextView;->isVisibleToAccessibility()Z+]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;
 HSPLandroid/widget/TextView;->jumpDrawablesToCurrentState()V+]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/widget/TextView;->length()I
-HSPLandroid/widget/TextView;->makeNewLayout(IILandroid/text/BoringLayout$Metrics;Landroid/text/BoringLayout$Metrics;IZ)V
-HSPLandroid/widget/TextView;->makeSingleLayout(ILandroid/text/BoringLayout$Metrics;ILandroid/text/Layout$Alignment;ZLandroid/text/TextUtils$TruncateAt;Z)Landroid/text/Layout;
-HSPLandroid/widget/TextView;->notifyContentCaptureTextChanged()V+]Landroid/widget/TextView;missing_types]Landroid/view/contentcapture/ContentCaptureManager;Landroid/view/contentcapture/ContentCaptureManager;]Landroid/content/Context;missing_types]Landroid/view/contentcapture/ContentCaptureSession;Landroid/view/contentcapture/MainContentCaptureSession;
-HSPLandroid/widget/TextView;->notifyListeningManagersAfterTextChanged()V
+HSPLandroid/widget/TextView;->makeNewLayout(IILandroid/text/BoringLayout$Metrics;Landroid/text/BoringLayout$Metrics;IZ)V+]Landroid/text/BoringLayout;Landroid/text/BoringLayout;]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/DynamicLayout;]Landroid/widget/Editor;Landroid/widget/Editor;]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/text/StaticLayout$Builder;Landroid/text/StaticLayout$Builder;]Landroid/widget/TextView;missing_types
+HSPLandroid/widget/TextView;->makeSingleLayout(ILandroid/text/BoringLayout$Metrics;ILandroid/text/Layout$Alignment;ZLandroid/text/TextUtils$TruncateAt;Z)Landroid/text/Layout;+]Landroid/text/DynamicLayout$Builder;Landroid/text/DynamicLayout$Builder;]Landroid/text/BoringLayout;Landroid/text/BoringLayout;]Ljava/lang/CharSequence;Ljava/lang/String;,Landroid/text/SpannedString;]Landroid/text/StaticLayout$Builder;Landroid/text/StaticLayout$Builder;]Landroid/widget/TextView;missing_types
+HSPLandroid/widget/TextView;->notifyContentCaptureTextChanged()V+]Landroid/view/contentcapture/ContentCaptureManager;Landroid/view/contentcapture/ContentCaptureManager;]Landroid/view/contentcapture/ContentCaptureSession;Landroid/view/contentcapture/MainContentCaptureSession;]Landroid/content/Context;missing_types]Landroid/widget/TextView;missing_types
+HSPLandroid/widget/TextView;->notifyListeningManagersAfterTextChanged()V+]Landroid/widget/TextView;missing_types]Landroid/content/Context;missing_types]Landroid/view/autofill/AutofillManager;Landroid/view/autofill/AutofillManager;
 HSPLandroid/widget/TextView;->nullLayouts()V
 HSPLandroid/widget/TextView;->onAttachedToWindow()V
 HSPLandroid/widget/TextView;->onBeginBatchEdit()V
 HSPLandroid/widget/TextView;->onCheckIsTextEditor()Z
 HSPLandroid/widget/TextView;->onConfigurationChanged(Landroid/content/res/Configuration;)V
-HSPLandroid/widget/TextView;->onCreateDrawableState(I)[I
+HSPLandroid/widget/TextView;->onCreateDrawableState(I)[I+]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->onCreateInputConnection(Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection;
 HSPLandroid/widget/TextView;->onDetachedFromWindowInternal()V
-HSPLandroid/widget/TextView;->onDraw(Landroid/graphics/Canvas;)V+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Landroid/widget/Editor;Landroid/widget/Editor;]Landroid/widget/TextView;Landroid/widget/Switch;,Landroid/widget/EditText;,Landroid/widget/TextView;,Landroid/widget/Button;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Ljava/lang/CharSequence;Landroid/text/SpannableStringBuilder;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;
+HSPLandroid/widget/TextView;->onDraw(Landroid/graphics/Canvas;)V+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/DynamicLayout;,Landroid/text/StaticLayout;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;,Landroid/graphics/Canvas;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;,Landroid/graphics/drawable/BitmapDrawable;,Landroid/graphics/drawable/StateListDrawable;,Landroid/graphics/drawable/AnimatedStateListDrawable;]Landroid/widget/Editor;Landroid/widget/Editor;]Ljava/lang/CharSequence;missing_types]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->onEditorAction(I)V
 HSPLandroid/widget/TextView;->onEndBatchEdit()V
 HSPLandroid/widget/TextView;->onFocusChanged(ZILandroid/graphics/Rect;)V
@@ -20467,9 +20480,9 @@
 HSPLandroid/widget/TextView;->onKeyUp(ILandroid/view/KeyEvent;)Z
 HSPLandroid/widget/TextView;->onLayout(ZIIII)V
 HSPLandroid/widget/TextView;->onLocaleChanged()V
-HSPLandroid/widget/TextView;->onMeasure(II)V+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;
+HSPLandroid/widget/TextView;->onMeasure(II)V+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;,Landroid/text/DynamicLayout;]Ljava/lang/CharSequence;missing_types]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->onPreDraw()Z
-HSPLandroid/widget/TextView;->onProvideStructure(Landroid/view/ViewStructure;II)V
+HSPLandroid/widget/TextView;->onProvideStructure(Landroid/view/ViewStructure;II)V+]Landroid/view/View;missing_types]Landroid/widget/TextViewOnReceiveContentListener;Landroid/widget/TextViewOnReceiveContentListener;]Landroid/text/InputFilter$LengthFilter;Landroid/text/InputFilter$LengthFilter;]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Landroid/widget/Editor;Landroid/widget/Editor;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/view/ViewStructure;Landroid/app/assist/AssistStructure$ViewNodeBuilder;,Landroid/view/contentcapture/ViewNode$ViewStructureImpl;]Ljava/lang/CharSequence;Ljava/lang/String;,Landroid/text/SpannableString;]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->onResolveDrawables(I)V
 HSPLandroid/widget/TextView;->onRestoreInstanceState(Landroid/os/Parcelable;)V
 HSPLandroid/widget/TextView;->onRtlPropertiesChanged(I)V
@@ -20483,12 +20496,12 @@
 HSPLandroid/widget/TextView;->onVisibilityChanged(Landroid/view/View;I)V
 HSPLandroid/widget/TextView;->onWindowFocusChanged(Z)V
 HSPLandroid/widget/TextView;->preloadFontCache()V
-HSPLandroid/widget/TextView;->readTextAppearance(Landroid/content/Context;Landroid/content/res/TypedArray;Landroid/widget/TextView$TextAppearanceAttributes;Z)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/TypedValue;Landroid/util/TypedValue;]Landroid/content/Context;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLandroid/widget/TextView;->readTextAppearance(Landroid/content/Context;Landroid/content/res/TypedArray;Landroid/widget/TextView$TextAppearanceAttributes;Z)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/TypedValue;Landroid/util/TypedValue;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/Context;missing_types
 HSPLandroid/widget/TextView;->registerForPreDraw()V
 HSPLandroid/widget/TextView;->removeAdjacentSuggestionSpans(I)V
-HSPLandroid/widget/TextView;->removeIntersectingNonAdjacentSpans(IILjava/lang/Class;)V
+HSPLandroid/widget/TextView;->removeIntersectingNonAdjacentSpans(IILjava/lang/Class;)V+]Landroid/text/Editable;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLandroid/widget/TextView;->removeMisspelledSpans(Landroid/text/Spannable;)V
-HSPLandroid/widget/TextView;->removeSuggestionSpans(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
+HSPLandroid/widget/TextView;->removeSuggestionSpans(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;+]Landroid/text/Spannable$Factory;Landroid/text/Spannable$Factory;]Ljava/lang/CharSequence;Landroid/text/SpannedString;,Landroid/text/SpannableStringBuilder;,Landroid/text/SpannableString;]Landroid/text/Spannable;Landroid/text/SpannableStringBuilder;,Landroid/text/SpannableString;
 HSPLandroid/widget/TextView;->removeTextChangedListener(Landroid/text/TextWatcher;)V
 HSPLandroid/widget/TextView;->resetErrorChangedFlag()V
 HSPLandroid/widget/TextView;->resetResolvedDrawables()V
@@ -20496,31 +20509,31 @@
 HSPLandroid/widget/TextView;->restartMarqueeIfNeeded()V
 HSPLandroid/widget/TextView;->sendAccessibilityEventInternal(I)V
 HSPLandroid/widget/TextView;->sendAfterTextChanged(Landroid/text/Editable;)V
-HSPLandroid/widget/TextView;->sendBeforeTextChanged(Ljava/lang/CharSequence;III)V
-HSPLandroid/widget/TextView;->sendOnTextChanged(Ljava/lang/CharSequence;III)V
+HSPLandroid/widget/TextView;->sendBeforeTextChanged(Ljava/lang/CharSequence;III)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/text/TextWatcher;missing_types
+HSPLandroid/widget/TextView;->sendOnTextChanged(Ljava/lang/CharSequence;III)V+]Landroid/widget/Editor;Landroid/widget/Editor;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/text/TextWatcher;missing_types
 HSPLandroid/widget/TextView;->setAllCaps(Z)V
 HSPLandroid/widget/TextView;->setAutoSizeTextTypeUniformWithPresetSizes([II)V
 HSPLandroid/widget/TextView;->setBreakStrategy(I)V
 HSPLandroid/widget/TextView;->setCompoundDrawablePadding(I)V
 HSPLandroid/widget/TextView;->setCompoundDrawableTintList(Landroid/content/res/ColorStateList;)V
-HSPLandroid/widget/TextView;->setCompoundDrawables(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
-HSPLandroid/widget/TextView;->setCompoundDrawablesRelative(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/TextView;->setCompoundDrawables(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/widget/TextView;missing_types]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;,Landroid/graphics/drawable/BitmapDrawable;]Landroid/widget/TextView$Drawables;Landroid/widget/TextView$Drawables;
+HSPLandroid/widget/TextView;->setCompoundDrawablesRelative(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;,Landroid/graphics/drawable/BitmapDrawable;
 HSPLandroid/widget/TextView;->setCompoundDrawablesRelativeWithIntrinsicBounds(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/widget/TextView;->setCompoundDrawablesWithIntrinsicBounds(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/widget/TextView;->setCursorVisible(Z)V
 HSPLandroid/widget/TextView;->setEditableFactory(Landroid/text/Editable$Factory;)V
 HSPLandroid/widget/TextView;->setEllipsize(Landroid/text/TextUtils$TruncateAt;)V
 HSPLandroid/widget/TextView;->setEnabled(Z)V
-HSPLandroid/widget/TextView;->setFilters(Landroid/text/Editable;[Landroid/text/InputFilter;)V
+HSPLandroid/widget/TextView;->setFilters(Landroid/text/Editable;[Landroid/text/InputFilter;)V+]Landroid/text/Editable;missing_types
 HSPLandroid/widget/TextView;->setFilters([Landroid/text/InputFilter;)V
 HSPLandroid/widget/TextView;->setFontFeatureSettings(Ljava/lang/String;)V
-HSPLandroid/widget/TextView;->setFrame(IIII)Z
+HSPLandroid/widget/TextView;->setFrame(IIII)Z+]Landroid/widget/Editor;Landroid/widget/Editor;
 HSPLandroid/widget/TextView;->setGravity(I)V
 HSPLandroid/widget/TextView;->setHeight(I)V
 HSPLandroid/widget/TextView;->setHighlightColor(I)V
 HSPLandroid/widget/TextView;->setHint(I)V
 HSPLandroid/widget/TextView;->setHint(Ljava/lang/CharSequence;)V
-HSPLandroid/widget/TextView;->setHintInternal(Ljava/lang/CharSequence;)V
+HSPLandroid/widget/TextView;->setHintInternal(Ljava/lang/CharSequence;)V+]Landroid/widget/Editor;Landroid/widget/Editor;
 HSPLandroid/widget/TextView;->setHintTextColor(I)V
 HSPLandroid/widget/TextView;->setHintTextColor(Landroid/content/res/ColorStateList;)V
 HSPLandroid/widget/TextView;->setHorizontallyScrolling(Z)V
@@ -20546,20 +20559,20 @@
 HSPLandroid/widget/TextView;->setMinWidth(I)V
 HSPLandroid/widget/TextView;->setMovementMethod(Landroid/text/method/MovementMethod;)V
 HSPLandroid/widget/TextView;->setOnEditorActionListener(Landroid/widget/TextView$OnEditorActionListener;)V
-HSPLandroid/widget/TextView;->setPadding(IIII)V
+HSPLandroid/widget/TextView;->setPadding(IIII)V+]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->setPaddingRelative(IIII)V
 HSPLandroid/widget/TextView;->setPrivateImeOptions(Ljava/lang/String;)V
 HSPLandroid/widget/TextView;->setRawInputType(I)V
-HSPLandroid/widget/TextView;->setRawTextSize(FZ)V
+HSPLandroid/widget/TextView;->setRawTextSize(FZ)V+]Landroid/text/TextPaint;Landroid/text/TextPaint;
 HSPLandroid/widget/TextView;->setRelativeDrawablesIfNeeded(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/widget/TextView;->setSelected(Z)V
 HSPLandroid/widget/TextView;->setShadowLayer(FFFI)V
 HSPLandroid/widget/TextView;->setSingleLine()V
 HSPLandroid/widget/TextView;->setSingleLine(Z)V
 HSPLandroid/widget/TextView;->setText(I)V
-HSPLandroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V
+HSPLandroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V+]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->setText(Ljava/lang/CharSequence;Landroid/widget/TextView$BufferType;)V
-HSPLandroid/widget/TextView;->setText(Ljava/lang/CharSequence;Landroid/widget/TextView$BufferType;ZI)V+]Landroid/text/method/MovementMethod;Landroid/text/method/LinkMovementMethod;]Landroid/text/method/TransformationMethod;missing_types]Landroid/widget/TextView;missing_types]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/text/Spanned;Landroid/text/SpannedString;,Landroid/text/SpannableString;]Landroid/text/Spannable$Factory;Landroid/text/Spannable$Factory;]Ljava/lang/CharSequence;Ljava/lang/String;,Landroid/text/SpannedString;,Landroid/text/SpannableString;]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;]Landroid/text/Spannable;Landroid/text/SpannableString;
+HSPLandroid/widget/TextView;->setText(Ljava/lang/CharSequence;Landroid/widget/TextView$BufferType;ZI)V+]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/text/Spanned;missing_types]Ljava/lang/CharSequence;missing_types]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;]Landroid/widget/TextView;missing_types]Landroid/text/method/TransformationMethod;missing_types]Landroid/text/Editable$Factory;missing_types]Landroid/widget/Editor;Landroid/widget/Editor;]Landroid/text/InputFilter;missing_types]Landroid/text/Spannable$Factory;Landroid/text/Spannable$Factory;]Landroid/text/method/MovementMethod;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/text/Spannable;missing_types
 HSPLandroid/widget/TextView;->setTextAppearance(I)V
 HSPLandroid/widget/TextView;->setTextAppearance(Landroid/content/Context;I)V
 HSPLandroid/widget/TextView;->setTextColor(I)V
@@ -20568,15 +20581,15 @@
 HSPLandroid/widget/TextView;->setTextIsSelectable(Z)V
 HSPLandroid/widget/TextView;->setTextSize(F)V
 HSPLandroid/widget/TextView;->setTextSize(IF)V
-HSPLandroid/widget/TextView;->setTextSizeInternal(IFZ)V+]Landroid/content/Context;missing_types]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/widget/TextView;missing_types
+HSPLandroid/widget/TextView;->setTextSizeInternal(IFZ)V+]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/widget/TextView;missing_types]Landroid/content/Context;missing_types
 HSPLandroid/widget/TextView;->setTransformationMethod(Landroid/text/method/TransformationMethod;)V+]Landroid/text/method/TransformationMethod2;Landroid/text/method/AllCapsTransformationMethod;
-HSPLandroid/widget/TextView;->setTypeface(Landroid/graphics/Typeface;)V
-HSPLandroid/widget/TextView;->setTypeface(Landroid/graphics/Typeface;I)V
+HSPLandroid/widget/TextView;->setTypeface(Landroid/graphics/Typeface;)V+]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/graphics/Typeface;Landroid/graphics/Typeface;
+HSPLandroid/widget/TextView;->setTypeface(Landroid/graphics/Typeface;I)V+]Landroid/widget/TextView;missing_types]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/graphics/Typeface;Landroid/graphics/Typeface;
 HSPLandroid/widget/TextView;->setTypefaceFromAttrs(Landroid/graphics/Typeface;Ljava/lang/String;III)V
 HSPLandroid/widget/TextView;->setupAutoSizeText()Z
 HSPLandroid/widget/TextView;->setupAutoSizeUniformPresetSizesConfiguration()Z
 HSPLandroid/widget/TextView;->shouldAdvanceFocusOnEnter()Z
-HSPLandroid/widget/TextView;->spanChange(Landroid/text/Spanned;Ljava/lang/Object;IIII)V
+HSPLandroid/widget/TextView;->spanChange(Landroid/text/Spanned;Ljava/lang/Object;IIII)V+]Landroid/widget/Editor;Landroid/widget/Editor;]Landroid/text/Spanned;missing_types]Landroid/widget/SpellChecker;Landroid/widget/SpellChecker;
 HSPLandroid/widget/TextView;->startMarquee()V
 HSPLandroid/widget/TextView;->startStopMarquee(Z)V
 HSPLandroid/widget/TextView;->stopMarquee()V
@@ -20587,8 +20600,8 @@
 HSPLandroid/widget/TextView;->unregisterForPreDraw()V
 HSPLandroid/widget/TextView;->updateAfterEdit()V
 HSPLandroid/widget/TextView;->updateCursorVisibleInternal()V
-HSPLandroid/widget/TextView;->updateTextColors()V+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Landroid/widget/TextView;missing_types]Ljava/lang/CharSequence;Ljava/lang/String;
-HSPLandroid/widget/TextView;->useDynamicLayout()Z
+HSPLandroid/widget/TextView;->updateTextColors()V+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Ljava/lang/CharSequence;missing_types]Landroid/widget/Editor;Landroid/widget/Editor;]Landroid/widget/TextView;missing_types
+HSPLandroid/widget/TextView;->useDynamicLayout()Z+]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->validateAndSetAutoSizeTextTypeUniformConfiguration(FFF)V
 HSPLandroid/widget/TextView;->verifyDrawable(Landroid/graphics/drawable/Drawable;)Z
 HSPLandroid/widget/TextView;->viewClicked(Landroid/view/inputmethod/InputMethodManager;)V
@@ -20678,12 +20691,12 @@
 HSPLandroid/window/IWindowContainerToken$Stub;->asInterface(Landroid/os/IBinder;)Landroid/window/IWindowContainerToken;
 HSPLandroid/window/ImeOnBackInvokedDispatcher$1;-><init>(Landroid/window/ImeOnBackInvokedDispatcher;Landroid/os/Handler;)V
 HSPLandroid/window/ImeOnBackInvokedDispatcher;->clear()V
+HSPLandroid/window/ImeOnBackInvokedDispatcher;->switchRootView(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;)V
 HSPLandroid/window/ImeOnBackInvokedDispatcher;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/window/OnBackInvokedCallbackInfo$1;-><init>()V
 HSPLandroid/window/OnBackInvokedCallbackInfo;-><clinit>()V
 HSPLandroid/window/OnBackInvokedCallbackInfo;-><init>(Landroid/window/IOnBackInvokedCallback;I)V
 HSPLandroid/window/OnBackInvokedCallbackInfo;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/window/ProxyOnBackInvokedDispatcher;-><init>()V
 HSPLandroid/window/ProxyOnBackInvokedDispatcher;->clearCallbacksOnDispatcher()V
 HSPLandroid/window/ProxyOnBackInvokedDispatcher;->setActualDispatcher(Landroid/window/OnBackInvokedDispatcher;)V
 HSPLandroid/window/ProxyOnBackInvokedDispatcher;->transferCallbacksToDispatcher()V+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
@@ -20691,6 +20704,8 @@
 HSPLandroid/window/SizeConfigurationBuckets;-><clinit>()V
 HSPLandroid/window/SizeConfigurationBuckets;-><init>([Landroid/content/res/Configuration;)V
 HSPLandroid/window/SizeConfigurationBuckets;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/window/SurfaceSyncer$$ExternalSyntheticLambda1;-><init>(Landroid/window/SurfaceSyncer;ILjava/util/function/Consumer;)V
+HSPLandroid/window/SurfaceSyncer$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
 HSPLandroid/window/SurfaceSyncer$SyncSet$1;-><init>(Landroid/window/SurfaceSyncer$SyncSet;)V
 HSPLandroid/window/SurfaceSyncer$SyncSet$1;->onBufferReady(Landroid/view/SurfaceControl$Transaction;)V+]Ljava/lang/Object;Landroid/window/SurfaceSyncer$SyncSet$1;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Ljava/util/Set;Landroid/util/ArraySet;
 HSPLandroid/window/SurfaceSyncer$SyncSet;->-$$Nest$fgetmLock(Landroid/window/SurfaceSyncer$SyncSet;)Ljava/lang/Object;
@@ -20699,14 +20714,15 @@
 HSPLandroid/window/SurfaceSyncer$SyncSet;->-$$Nest$mcheckIfSyncIsComplete(Landroid/window/SurfaceSyncer$SyncSet;)V
 HSPLandroid/window/SurfaceSyncer$SyncSet;-><init>(ILjava/util/function/Consumer;)V+]Ljava/util/function/Supplier;Landroid/view/InsetsController$$ExternalSyntheticLambda4;
 HSPLandroid/window/SurfaceSyncer$SyncSet;-><init>(ILjava/util/function/Consumer;Landroid/window/SurfaceSyncer$SyncSet-IA;)V
-HSPLandroid/window/SurfaceSyncer$SyncSet;->addSyncableSurface(Landroid/window/SurfaceSyncer$SyncTarget;)V+]Landroid/window/SurfaceSyncer$SyncTarget;Landroid/view/ViewRootImpl$9;,Landroid/view/ViewRootImpl$8;]Ljava/lang/Object;Landroid/window/SurfaceSyncer$SyncSet$1;]Ljava/util/Set;Landroid/util/ArraySet;
-HSPLandroid/window/SurfaceSyncer$SyncSet;->checkIfSyncIsComplete()V+]Landroid/window/SurfaceSyncer$SyncTarget;Landroid/view/ViewRootImpl$9;,Landroid/view/ViewRootImpl$8;]Ljava/util/function/Consumer;Landroid/view/ViewRootImpl$$ExternalSyntheticLambda8;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/ArraySet;
+HSPLandroid/window/SurfaceSyncer$SyncSet;->addSyncableSurface(Landroid/window/SurfaceSyncer$SyncTarget;)Z+]Landroid/window/SurfaceSyncer$SyncTarget;Landroid/view/SurfaceView$$ExternalSyntheticLambda2;,Landroid/view/ViewRootImpl$9;]Ljava/lang/Object;Landroid/window/SurfaceSyncer$SyncSet$1;]Ljava/util/Set;Landroid/util/ArraySet;
+HSPLandroid/window/SurfaceSyncer$SyncSet;->checkIfSyncIsComplete()V+]Landroid/window/SurfaceSyncer$SyncTarget;Landroid/view/ViewRootImpl$8;,Landroid/view/ViewRootImpl$9;]Ljava/util/function/Consumer;Landroid/view/ViewRootImpl$$ExternalSyntheticLambda8;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/ArraySet;
 HSPLandroid/window/SurfaceSyncer$SyncSet;->markSyncReady()V
 HSPLandroid/window/SurfaceSyncer;->-$$Nest$sfgetsTransactionFactory()Ljava/util/function/Supplier;
 HSPLandroid/window/SurfaceSyncer;-><clinit>()V
 HSPLandroid/window/SurfaceSyncer;-><init>()V
 HSPLandroid/window/SurfaceSyncer;->addToSync(ILandroid/window/SurfaceSyncer$SyncTarget;)Z+]Landroid/window/SurfaceSyncer$SyncSet;Landroid/window/SurfaceSyncer$SyncSet;
 HSPLandroid/window/SurfaceSyncer;->getAndValidateSyncSet(I)Landroid/window/SurfaceSyncer$SyncSet;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLandroid/window/SurfaceSyncer;->lambda$setupSync$1$android-window-SurfaceSyncer(ILjava/util/function/Consumer;Landroid/view/SurfaceControl$Transaction;)V
 HSPLandroid/window/SurfaceSyncer;->markSyncReady(I)V+]Landroid/window/SurfaceSyncer$SyncSet;Landroid/window/SurfaceSyncer$SyncSet;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLandroid/window/SurfaceSyncer;->setupSync(Ljava/util/function/Consumer;)I+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLandroid/window/TaskAppearedInfo;-><init>(Landroid/app/ActivityManager$RunningTaskInfo;Landroid/view/SurfaceControl;)V
@@ -20751,12 +20767,11 @@
 HSPLandroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper;->onBackProgressed(Landroid/window/BackEvent;)V+]Landroid/os/Handler;Landroid/os/Handler;
 HSPLandroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper;->onBackStarted()V
 HSPLandroid/window/WindowOnBackInvokedDispatcher;-><clinit>()V
-HSPLandroid/window/WindowOnBackInvokedDispatcher;-><init>()V
 HSPLandroid/window/WindowOnBackInvokedDispatcher;->attachToWindow(Landroid/view/IWindowSession;Landroid/view/IWindow;)V
 HSPLandroid/window/WindowOnBackInvokedDispatcher;->clear()V+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/TreeMap;Ljava/util/TreeMap;
 HSPLandroid/window/WindowOnBackInvokedDispatcher;->detachFromWindow()V
 HSPLandroid/window/WindowOnBackInvokedDispatcher;->getTopCallback()Landroid/window/OnBackInvokedCallback;
-HSPLandroid/window/WindowOnBackInvokedDispatcher;->isOnBackInvokedCallbackEnabled(Landroid/content/Context;)Z+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/content/Context;Landroid/view/ContextThemeWrapper;
+HSPLandroid/window/WindowOnBackInvokedDispatcher;->isOnBackInvokedCallbackEnabled(Landroid/content/Context;)Z+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/content/Context;missing_types
 HSPLandroid/window/WindowOnBackInvokedDispatcher;->registerOnBackInvokedCallback(ILandroid/window/OnBackInvokedCallback;)V
 HSPLandroid/window/WindowOnBackInvokedDispatcher;->registerOnBackInvokedCallbackUnchecked(Landroid/window/OnBackInvokedCallback;I)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/TreeMap;Ljava/util/TreeMap;]Landroid/window/WindowOnBackInvokedDispatcher;Landroid/window/WindowOnBackInvokedDispatcher;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/window/WindowOnBackInvokedDispatcher;->setTopOnBackInvokedCallback(Landroid/window/OnBackInvokedCallback;)V+]Landroid/view/IWindowSession;Landroid/view/IWindowSession$Stub$Proxy;]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/lang/Integer;Ljava/lang/Integer;
@@ -20768,7 +20783,7 @@
 HSPLandroid/window/WindowTokenClient;->attachToDisplayArea(IILandroid/os/Bundle;)Z+]Landroid/view/IWindowManager;Landroid/view/IWindowManager$Stub$Proxy;]Landroid/window/WindowTokenClient;Landroid/window/WindowTokenClient;
 HSPLandroid/window/WindowTokenClient;->getWindowManagerService()Landroid/view/IWindowManager;
 HSPLandroid/window/WindowTokenClient;->onConfigurationChanged(Landroid/content/res/Configuration;I)V
-HSPLandroid/window/WindowTokenClient;->onConfigurationChanged(Landroid/content/res/Configuration;IZ)V+]Landroid/app/ResourcesManager;Landroid/app/ResourcesManager;]Landroid/content/Context;Landroid/window/WindowContext;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Landroid/window/WindowContext;Landroid/window/WindowContext;
+HSPLandroid/window/WindowTokenClient;->onConfigurationChanged(Landroid/content/res/Configuration;IZ)V+]Landroid/app/ResourcesManager;Landroid/app/ResourcesManager;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Landroid/content/Context;Landroid/window/WindowContext;]Landroid/window/WindowContext;Landroid/window/WindowContext;
 HSPLcom/android/i18n/phonenumbers/CountryCodeToRegionCodeMap;->getCountryCodeToRegionCodeMap()Ljava/util/Map;
 HSPLcom/android/i18n/phonenumbers/MetadataManager$1;->loadMetadata(Ljava/lang/String;)Ljava/io/InputStream;
 HSPLcom/android/i18n/phonenumbers/MetadataManager;->getMetadataFromMultiFilePrefix(Ljava/lang/Object;Ljava/util/concurrent/ConcurrentHashMap;Ljava/lang/String;Lcom/android/i18n/phonenumbers/MetadataLoader;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
@@ -20780,50 +20795,50 @@
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->checkRegionForParsing(Ljava/lang/CharSequence;Ljava/lang/String;)Z
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->chooseFormattingPatternForNumber(Ljava/util/List;Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;+]Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;,Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat$Builder;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;]Ljava/util/regex/Pattern;Ljava/util/regex/Pattern;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/i18n/phonenumbers/internal/RegexCache;Lcom/android/i18n/phonenumbers/internal/RegexCache;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->createInstance(Lcom/android/i18n/phonenumbers/MetadataLoader;)Lcom/android/i18n/phonenumbers/PhoneNumberUtil;
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->extractCountryCode(Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;)I
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->extractPossibleNumber(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->extractCountryCode(Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;)I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Map;Ljava/util/HashMap;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->extractPossibleNumber(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;+]Ljava/lang/CharSequence;Ljava/lang/String;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;]Ljava/util/regex/Pattern;Ljava/util/regex/Pattern;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->format(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;)Ljava/lang/String;
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->format(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;Ljava/lang/StringBuilder;)V
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->formatInOriginalFormat(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Ljava/lang/String;)Ljava/lang/String;+]Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;]Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource;]Lcom/android/i18n/phonenumbers/PhoneNumberUtil;Lcom/android/i18n/phonenumbers/PhoneNumberUtil;]Ljava/lang/String;Ljava/lang/String;]Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;]Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;]Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat$Builder;Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat$Builder;]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->format(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;Ljava/lang/StringBuilder;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;]Lcom/android/i18n/phonenumbers/PhoneNumberUtil;Lcom/android/i18n/phonenumbers/PhoneNumberUtil;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->formatInOriginalFormat(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;]Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;]Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat$Builder;Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat$Builder;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;]Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource;]Lcom/android/i18n/phonenumbers/PhoneNumberUtil;Lcom/android/i18n/phonenumbers/PhoneNumberUtil;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->formatNsn(Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;Ljava/lang/CharSequence;)Ljava/lang/String;+]Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/i18n/phonenumbers/PhoneNumberUtil;Lcom/android/i18n/phonenumbers/PhoneNumberUtil;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->formatNsnUsingPattern(Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;Ljava/lang/CharSequence;)Ljava/lang/String;+]Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;,Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat$Builder;]Ljava/util/regex/Pattern;Ljava/util/regex/Pattern;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;]Lcom/android/i18n/phonenumbers/internal/RegexCache;Lcom/android/i18n/phonenumbers/internal/RegexCache;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getCountryCodeForValidRegion(Ljava/lang/String;)I
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getInstance()Lcom/android/i18n/phonenumbers/PhoneNumberUtil;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getMetadataForRegion(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getMetadataForRegionOrCallingCode(ILjava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getNationalSignificantNumber(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)Ljava/lang/String;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getNationalSignificantNumber(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getNumberDescByType(Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getNumberTypeHelper(Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;)Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType;
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getRegionCodeForCountryCode(I)Ljava/lang/String;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getNumberTypeHelper(Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;)Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType;+]Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;]Lcom/android/i18n/phonenumbers/PhoneNumberUtil;Lcom/android/i18n/phonenumbers/PhoneNumberUtil;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getRegionCodeForCountryCode(I)Ljava/lang/String;+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Map;Ljava/util/HashMap;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getRegionCodeForNumber(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)Ljava/lang/String;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getRegionCodeForNumberFromRegionList(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Ljava/util/List;)Ljava/lang/String;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->hasFormattingPatternForNumber(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)Z+]Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;]Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;]Lcom/android/i18n/phonenumbers/PhoneNumberUtil;Lcom/android/i18n/phonenumbers/PhoneNumberUtil;
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->isNumberMatchingDesc(Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;)Z
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->isNumberMatchingDesc(Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;)Z+]Lcom/android/i18n/phonenumbers/internal/MatcherApi;Lcom/android/i18n/phonenumbers/internal/RegexBasedMatcher;]Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->isValidNumber(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)Z
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->isValidNumberForRegion(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Ljava/lang/String;)Z
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->isValidRegionCode(Ljava/lang/String;)Z
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->isViablePhoneNumber(Ljava/lang/CharSequence;)Z
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->maybeAppendFormattedExtension(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;Ljava/lang/StringBuilder;)V
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->maybeExtractCountryCode(Ljava/lang/CharSequence;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Ljava/lang/StringBuilder;ZLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)I
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->maybeExtractCountryCode(Ljava/lang/CharSequence;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Ljava/lang/StringBuilder;ZLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;]Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;]Ljava/lang/CharSequence;Ljava/lang/StringBuilder;]Lcom/android/i18n/phonenumbers/PhoneNumberUtil;Lcom/android/i18n/phonenumbers/PhoneNumberUtil;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->maybeStripExtension(Ljava/lang/StringBuilder;)Ljava/lang/String;
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->maybeStripInternationalPrefixAndNormalize(Ljava/lang/StringBuilder;Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource;
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->maybeStripNationalPrefixAndCarrierCode(Ljava/lang/StringBuilder;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Ljava/lang/StringBuilder;)Z
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->maybeStripInternationalPrefixAndNormalize(Ljava/lang/StringBuilder;Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/regex/Pattern;Ljava/util/regex/Pattern;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->maybeStripNationalPrefixAndCarrierCode(Ljava/lang/StringBuilder;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Ljava/lang/StringBuilder;)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;]Ljava/util/regex/Pattern;Ljava/util/regex/Pattern;]Lcom/android/i18n/phonenumbers/internal/RegexCache;Lcom/android/i18n/phonenumbers/internal/RegexCache;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->normalize(Ljava/lang/StringBuilder;)Ljava/lang/StringBuilder;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->normalizeDiallableCharsOnly(Ljava/lang/CharSequence;)Ljava/lang/String;
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->normalizeDigits(Ljava/lang/CharSequence;Z)Ljava/lang/StringBuilder;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->normalizeDigits(Ljava/lang/CharSequence;Z)Ljava/lang/StringBuilder;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/CharSequence;Ljava/lang/StringBuilder;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->normalizeDigitsOnly(Ljava/lang/CharSequence;)Ljava/lang/String;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->normalizeHelper(Ljava/lang/CharSequence;Ljava/util/Map;Z)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/CharSequence;Ljava/lang/String;]Ljava/util/Map;Ljava/util/Collections$UnmodifiableMap;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->parse(Ljava/lang/CharSequence;Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->parse(Ljava/lang/CharSequence;Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)V
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->parseAndKeepRawInput(Ljava/lang/CharSequence;Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->parseAndKeepRawInput(Ljava/lang/CharSequence;Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)V
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->parseHelper(Ljava/lang/CharSequence;Ljava/lang/String;ZZLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)V
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->parseHelper(Ljava/lang/CharSequence;Ljava/lang/String;ZZLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;]Ljava/lang/CharSequence;Ljava/lang/String;]Lcom/android/i18n/phonenumbers/PhoneNumberUtil;Lcom/android/i18n/phonenumbers/PhoneNumberUtil;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->parsePrefixAsIdd(Ljava/util/regex/Pattern;Ljava/lang/StringBuilder;)Z
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->prefixNumberWithCountryCallingCode(ILcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;Ljava/lang/StringBuilder;)V
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->prefixNumberWithCountryCallingCode(ILcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;Ljava/lang/StringBuilder;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->setInstance(Lcom/android/i18n/phonenumbers/PhoneNumberUtil;)V
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->setItalianLeadingZerosForPhoneNumber(Ljava/lang/CharSequence;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)V
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->testNumberLength(Ljava/lang/CharSequence;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;)Lcom/android/i18n/phonenumbers/PhoneNumberUtil$ValidationResult;
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->testNumberLength(Ljava/lang/CharSequence;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType;)Lcom/android/i18n/phonenumbers/PhoneNumberUtil$ValidationResult;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->testNumberLength(Ljava/lang/CharSequence;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType;)Lcom/android/i18n/phonenumbers/PhoneNumberUtil$ValidationResult;+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/List;Ljava/util/ArrayList$SubList;,Ljava/util/ArrayList;]Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;]Ljava/lang/CharSequence;Ljava/lang/StringBuilder;]Lcom/android/i18n/phonenumbers/PhoneNumberUtil;Lcom/android/i18n/phonenumbers/PhoneNumberUtil;
 HSPLcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;-><init>()V
 HSPLcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;->getFormat()Ljava/lang/String;
 HSPLcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;->getLeadingDigitsPattern(I)Ljava/lang/String;+]Ljava/util/List;Ljava/util/ArrayList;
@@ -20907,7 +20922,7 @@
 HSPLcom/android/i18n/phonenumbers/internal/RegexBasedMatcher;->match(Ljava/lang/CharSequence;Ljava/util/regex/Pattern;Z)Z
 HSPLcom/android/i18n/phonenumbers/internal/RegexBasedMatcher;->matchNationalNumber(Ljava/lang/CharSequence;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;Z)Z
 HSPLcom/android/i18n/phonenumbers/internal/RegexCache$LRUCache$1;->removeEldestEntry(Ljava/util/Map$Entry;)Z
-HSPLcom/android/i18n/phonenumbers/internal/RegexCache$LRUCache;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/i18n/phonenumbers/internal/RegexCache$LRUCache;->get(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/LinkedHashMap;Lcom/android/i18n/phonenumbers/internal/RegexCache$LRUCache$1;
 HSPLcom/android/i18n/phonenumbers/internal/RegexCache$LRUCache;->put(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/i18n/phonenumbers/internal/RegexCache;-><init>(I)V
 HSPLcom/android/i18n/phonenumbers/internal/RegexCache;->getPatternForRegex(Ljava/lang/String;)Ljava/util/regex/Pattern;
@@ -20941,18 +20956,18 @@
 HSPLcom/android/i18n/timezone/ZoneInfoData;-><init>(Lcom/android/i18n/timezone/ZoneInfoData;I)V
 HSPLcom/android/i18n/timezone/ZoneInfoData;-><init>(Ljava/lang/String;[J[B[I[B)V
 HSPLcom/android/i18n/timezone/ZoneInfoData;->checkTzifVersionAcceptable(Ljava/lang/String;B)V
-HSPLcom/android/i18n/timezone/ZoneInfoData;->findOffsetIndexForTimeInMilliseconds(J)I
-HSPLcom/android/i18n/timezone/ZoneInfoData;->findOffsetIndexForTimeInSeconds(J)I
+HSPLcom/android/i18n/timezone/ZoneInfoData;->findOffsetIndexForTimeInMilliseconds(J)I+]Lcom/android/i18n/timezone/ZoneInfoData;Lcom/android/i18n/timezone/ZoneInfoData;
+HSPLcom/android/i18n/timezone/ZoneInfoData;->findOffsetIndexForTimeInSeconds(J)I+]Lcom/android/i18n/timezone/ZoneInfoData;Lcom/android/i18n/timezone/ZoneInfoData;
 HSPLcom/android/i18n/timezone/ZoneInfoData;->findTransitionIndex(J)I
 HSPLcom/android/i18n/timezone/ZoneInfoData;->getID()Ljava/lang/String;
 HSPLcom/android/i18n/timezone/ZoneInfoData;->getLatestDstSavingsMillis(J)Ljava/lang/Integer;
-HSPLcom/android/i18n/timezone/ZoneInfoData;->getOffset(J)I
-HSPLcom/android/i18n/timezone/ZoneInfoData;->getOffsetsByUtcTime(J[I)I
+HSPLcom/android/i18n/timezone/ZoneInfoData;->getOffset(J)I+]Lcom/android/i18n/timezone/ZoneInfoData;Lcom/android/i18n/timezone/ZoneInfoData;
+HSPLcom/android/i18n/timezone/ZoneInfoData;->getOffsetsByUtcTime(J[I)I+]Lcom/android/i18n/timezone/ZoneInfoData;Lcom/android/i18n/timezone/ZoneInfoData;
 HSPLcom/android/i18n/timezone/ZoneInfoData;->getRawOffset()I
-HSPLcom/android/i18n/timezone/ZoneInfoData;->getTransitions()[J
+HSPLcom/android/i18n/timezone/ZoneInfoData;->getTransitions()[J+][J[J
 HSPLcom/android/i18n/timezone/ZoneInfoData;->hashCode()I
-HSPLcom/android/i18n/timezone/ZoneInfoData;->isInDaylightTime(J)Z
-HSPLcom/android/i18n/timezone/ZoneInfoData;->read64BitData(Ljava/lang/String;Lcom/android/i18n/timezone/internal/BufferIterator;)Lcom/android/i18n/timezone/ZoneInfoData;
+HSPLcom/android/i18n/timezone/ZoneInfoData;->isInDaylightTime(J)Z+]Lcom/android/i18n/timezone/ZoneInfoData;Lcom/android/i18n/timezone/ZoneInfoData;
+HSPLcom/android/i18n/timezone/ZoneInfoData;->read64BitData(Ljava/lang/String;Lcom/android/i18n/timezone/internal/BufferIterator;)Lcom/android/i18n/timezone/ZoneInfoData;+]Lcom/android/i18n/timezone/internal/BufferIterator;Lcom/android/i18n/timezone/internal/NioBufferIterator;
 HSPLcom/android/i18n/timezone/ZoneInfoData;->readTimeZone(Ljava/lang/String;Lcom/android/i18n/timezone/internal/BufferIterator;)Lcom/android/i18n/timezone/ZoneInfoData;
 HSPLcom/android/i18n/timezone/ZoneInfoData;->roundDownMillisToSeconds(J)J
 HSPLcom/android/i18n/timezone/ZoneInfoData;->roundUpMillisToSeconds(J)J
@@ -20965,11 +20980,11 @@
 HSPLcom/android/i18n/timezone/ZoneInfoDb;->getAvailableIDs()[Ljava/lang/String;
 HSPLcom/android/i18n/timezone/ZoneInfoDb;->getBufferIterator(Ljava/lang/String;)Lcom/android/i18n/timezone/internal/BufferIterator;
 HSPLcom/android/i18n/timezone/ZoneInfoDb;->getInstance()Lcom/android/i18n/timezone/ZoneInfoDb;
-HSPLcom/android/i18n/timezone/ZoneInfoDb;->makeZoneInfoData(Ljava/lang/String;)Lcom/android/i18n/timezone/ZoneInfoData;
+HSPLcom/android/i18n/timezone/ZoneInfoDb;->makeZoneInfoData(Ljava/lang/String;)Lcom/android/i18n/timezone/ZoneInfoData;+]Lcom/android/i18n/timezone/internal/BasicLruCache;Lcom/android/i18n/timezone/ZoneInfoDb$1;
 HSPLcom/android/i18n/timezone/ZoneInfoDb;->makeZoneInfoDataUncached(Ljava/lang/String;)Lcom/android/i18n/timezone/ZoneInfoData;
 HSPLcom/android/i18n/timezone/internal/BasicLruCache$CacheMap;->removeEldestEntry(Ljava/util/Map$Entry;)Z
 HSPLcom/android/i18n/timezone/internal/BasicLruCache;->evictAll()V
-HSPLcom/android/i18n/timezone/internal/BasicLruCache;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/i18n/timezone/internal/BasicLruCache;->get(Ljava/lang/Object;)Ljava/lang/Object;+]Lcom/android/i18n/timezone/internal/BasicLruCache$CacheMap;Lcom/android/i18n/timezone/internal/BasicLruCache$CacheMap;
 HSPLcom/android/i18n/timezone/internal/BufferIterator;-><init>()V
 HSPLcom/android/i18n/timezone/internal/Memory;->peekInt(JZ)I
 HSPLcom/android/i18n/timezone/internal/MemoryMappedFile;->bigEndianIterator()Lcom/android/i18n/timezone/internal/BufferIterator;
@@ -20983,38 +20998,38 @@
 HSPLcom/android/i18n/timezone/internal/NioBufferIterator;->readLongArray([JII)V
 HSPLcom/android/i18n/timezone/internal/NioBufferIterator;->skip(I)V
 HSPLcom/android/icu/charset/CharsetDecoderICU;-><init>(Ljava/nio/charset/Charset;FJ)V
-HSPLcom/android/icu/charset/CharsetDecoderICU;->decodeLoop(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;
-HSPLcom/android/icu/charset/CharsetDecoderICU;->getArray(Ljava/nio/ByteBuffer;)I
-HSPLcom/android/icu/charset/CharsetDecoderICU;->getArray(Ljava/nio/CharBuffer;)I
+HSPLcom/android/icu/charset/CharsetDecoderICU;->decodeLoop(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
+HSPLcom/android/icu/charset/CharsetDecoderICU;->getArray(Ljava/nio/ByteBuffer;)I+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
+HSPLcom/android/icu/charset/CharsetDecoderICU;->getArray(Ljava/nio/CharBuffer;)I+]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;
 HSPLcom/android/icu/charset/CharsetDecoderICU;->implFlush(Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;+]Lcom/android/icu/charset/CharsetDecoderICU;Lcom/android/icu/charset/CharsetDecoderICU;
 HSPLcom/android/icu/charset/CharsetDecoderICU;->implOnMalformedInput(Ljava/nio/charset/CodingErrorAction;)V
 HSPLcom/android/icu/charset/CharsetDecoderICU;->implOnUnmappableCharacter(Ljava/nio/charset/CodingErrorAction;)V
 HSPLcom/android/icu/charset/CharsetDecoderICU;->implReplaceWith(Ljava/lang/String;)V
 HSPLcom/android/icu/charset/CharsetDecoderICU;->implReset()V
 HSPLcom/android/icu/charset/CharsetDecoderICU;->newInstance(Ljava/nio/charset/Charset;Ljava/lang/String;)Lcom/android/icu/charset/CharsetDecoderICU;
-HSPLcom/android/icu/charset/CharsetDecoderICU;->setPosition(Ljava/nio/ByteBuffer;)V
+HSPLcom/android/icu/charset/CharsetDecoderICU;->setPosition(Ljava/nio/ByteBuffer;)V+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLcom/android/icu/charset/CharsetDecoderICU;->setPosition(Ljava/nio/CharBuffer;)V+]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;
 HSPLcom/android/icu/charset/CharsetDecoderICU;->updateCallback()V
 HSPLcom/android/icu/charset/CharsetEncoderICU;-><init>(Ljava/nio/charset/Charset;FF[BJ)V
-HSPLcom/android/icu/charset/CharsetEncoderICU;->encodeLoop(Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult;
+HSPLcom/android/icu/charset/CharsetEncoderICU;->encodeLoop(Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult;+]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;
 HSPLcom/android/icu/charset/CharsetEncoderICU;->getArray(Ljava/nio/ByteBuffer;)I+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
-HSPLcom/android/icu/charset/CharsetEncoderICU;->getArray(Ljava/nio/CharBuffer;)I
+HSPLcom/android/icu/charset/CharsetEncoderICU;->getArray(Ljava/nio/CharBuffer;)I+]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;
 HSPLcom/android/icu/charset/CharsetEncoderICU;->implFlush(Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult;+]Lcom/android/icu/charset/CharsetEncoderICU;Lcom/android/icu/charset/CharsetEncoderICU;
 HSPLcom/android/icu/charset/CharsetEncoderICU;->implOnMalformedInput(Ljava/nio/charset/CodingErrorAction;)V
 HSPLcom/android/icu/charset/CharsetEncoderICU;->implOnUnmappableCharacter(Ljava/nio/charset/CodingErrorAction;)V
 HSPLcom/android/icu/charset/CharsetEncoderICU;->implReset()V
 HSPLcom/android/icu/charset/CharsetEncoderICU;->makeReplacement(Ljava/lang/String;J)[B
 HSPLcom/android/icu/charset/CharsetEncoderICU;->newInstance(Ljava/nio/charset/Charset;Ljava/lang/String;)Lcom/android/icu/charset/CharsetEncoderICU;
-HSPLcom/android/icu/charset/CharsetEncoderICU;->setPosition(Ljava/nio/ByteBuffer;)V
-HSPLcom/android/icu/charset/CharsetEncoderICU;->setPosition(Ljava/nio/CharBuffer;)V
+HSPLcom/android/icu/charset/CharsetEncoderICU;->setPosition(Ljava/nio/ByteBuffer;)V+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
+HSPLcom/android/icu/charset/CharsetEncoderICU;->setPosition(Ljava/nio/CharBuffer;)V+]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;
 HSPLcom/android/icu/charset/CharsetEncoderICU;->updateCallback()V
 HSPLcom/android/icu/charset/CharsetFactory;->create(Ljava/lang/String;)Ljava/nio/charset/Charset;
 HSPLcom/android/icu/charset/CharsetICU;-><init>(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
 HSPLcom/android/icu/charset/CharsetICU;->newDecoder()Ljava/nio/charset/CharsetDecoder;
 HSPLcom/android/icu/charset/CharsetICU;->newEncoder()Ljava/nio/charset/CharsetEncoder;
 HSPLcom/android/icu/charset/NativeConverter;->U_FAILURE(I)Z
-HSPLcom/android/icu/charset/NativeConverter;->registerConverter(Ljava/lang/Object;J)V
-HSPLcom/android/icu/charset/NativeConverter;->setCallbackDecode(JLjava/nio/charset/CharsetDecoder;)V
+HSPLcom/android/icu/charset/NativeConverter;->registerConverter(Ljava/lang/Object;J)V+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
+HSPLcom/android/icu/charset/NativeConverter;->setCallbackDecode(JLjava/nio/charset/CharsetDecoder;)V+]Ljava/nio/charset/CharsetDecoder;Lcom/android/icu/charset/CharsetDecoderICU;
 HSPLcom/android/icu/charset/NativeConverter;->setCallbackEncode(JLjava/nio/charset/CharsetEncoder;)V
 HSPLcom/android/icu/charset/NativeConverter;->translateCodingErrorAction(Ljava/nio/charset/CodingErrorAction;)I
 HSPLcom/android/icu/text/CompatibleDecimalFormatFactory;->create(Ljava/lang/String;Landroid/icu/text/DecimalFormatSymbols;)Landroid/icu/text/DecimalFormat;
@@ -21045,7 +21060,7 @@
 HSPLcom/android/icu/util/LocaleNative;->getDisplayCountry(Ljava/util/Locale;Ljava/util/Locale;)Ljava/lang/String;
 HSPLcom/android/icu/util/LocaleNative;->getDisplayLanguage(Ljava/util/Locale;Ljava/util/Locale;)Ljava/lang/String;
 HSPLcom/android/icu/util/LocaleNative;->setDefault(Ljava/lang/String;)V
-HSPLcom/android/icu/util/regex/MatcherNative;-><init>(Lcom/android/icu/util/regex/PatternNative;)V
+HSPLcom/android/icu/util/regex/MatcherNative;-><init>(Lcom/android/icu/util/regex/PatternNative;)V+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;]Lcom/android/icu/util/regex/PatternNative;Lcom/android/icu/util/regex/PatternNative;
 HSPLcom/android/icu/util/regex/MatcherNative;->create(Lcom/android/icu/util/regex/PatternNative;)Lcom/android/icu/util/regex/MatcherNative;
 HSPLcom/android/icu/util/regex/MatcherNative;->find(I[I)Z
 HSPLcom/android/icu/util/regex/MatcherNative;->findNext([I)Z
@@ -21057,7 +21072,7 @@
 HSPLcom/android/icu/util/regex/MatcherNative;->setInput(Ljava/lang/String;II)V
 HSPLcom/android/icu/util/regex/MatcherNative;->useAnchoringBounds(Z)V
 HSPLcom/android/icu/util/regex/MatcherNative;->useTransparentBounds(Z)V
-HSPLcom/android/icu/util/regex/PatternNative;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/icu/util/regex/PatternNative;-><init>(Ljava/lang/String;I)V+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
 HSPLcom/android/icu/util/regex/PatternNative;->create(Ljava/lang/String;I)Lcom/android/icu/util/regex/PatternNative;
 HSPLcom/android/icu/util/regex/PatternNative;->openMatcher()J
 HSPLcom/android/internal/app/AlertController;-><init>(Landroid/content/Context;Landroid/content/DialogInterface;Landroid/view/Window;)V
@@ -21076,15 +21091,15 @@
 HSPLcom/android/internal/app/IAppOpsActiveCallback$Stub;->asBinder()Landroid/os/IBinder;
 HSPLcom/android/internal/app/IAppOpsAsyncNotedCallback$Stub;-><init>()V
 HSPLcom/android/internal/app/IAppOpsAsyncNotedCallback$Stub;->asBinder()Landroid/os/IBinder;
-HSPLcom/android/internal/app/IAppOpsAsyncNotedCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLcom/android/internal/app/IAppOpsAsyncNotedCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z+]Lcom/android/internal/app/IAppOpsAsyncNotedCallback$Stub;Landroid/app/AppOpsManager$OnOpNotedCallback$1;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/internal/app/IAppOpsCallback$Stub;-><init>()V
 HSPLcom/android/internal/app/IAppOpsCallback$Stub;->asBinder()Landroid/os/IBinder;
 HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->checkOperation(IILjava/lang/String;)I
+HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->checkOperation(IILjava/lang/String;)I+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->checkPackage(ILjava/lang/String;)I
 HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->extractAsyncOps(Ljava/lang/String;)Ljava/util/List;
 HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->getPackagesForOps([I)Ljava/util/List;
-HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->noteOperation(IILjava/lang/String;Ljava/lang/String;ZLjava/lang/String;Z)Landroid/app/SyncNotedAppOp;
+HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->noteOperation(IILjava/lang/String;Ljava/lang/String;ZLjava/lang/String;Z)Landroid/app/SyncNotedAppOp;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->reportRuntimeAppOpAccessMessageAndGetConfig(Ljava/lang/String;Landroid/app/SyncNotedAppOp;Ljava/lang/String;)Lcom/android/internal/app/MessageSamplingConfig;
 HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->shouldCollectNotes(I)Z
 HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->startWatchingActive([ILcom/android/internal/app/IAppOpsActiveCallback;)V
@@ -21099,7 +21114,7 @@
 HSPLcom/android/internal/app/IVoiceInteractor$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IVoiceInteractor;
 HSPLcom/android/internal/app/MessageSamplingConfig$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/internal/app/MessageSamplingConfig;
 HSPLcom/android/internal/app/MessageSamplingConfig$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLcom/android/internal/app/MessageSamplingConfig;-><init>(Landroid/os/Parcel;)V
+HSPLcom/android/internal/app/MessageSamplingConfig;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/internal/app/MessageSamplingConfig;->getAcceptableLeftDistance()I
 HSPLcom/android/internal/app/MessageSamplingConfig;->getExpirationTimeSinceBootMillis()J
 HSPLcom/android/internal/app/MessageSamplingConfig;->getSampledOpCode()I
@@ -21119,13 +21134,13 @@
 HSPLcom/android/internal/colorextraction/ColorExtractor$GradientColors;->getMainColor()I
 HSPLcom/android/internal/colorextraction/ColorExtractor$GradientColors;->supportsDarkText()Z
 HSPLcom/android/internal/compat/ChangeReporter$ChangeReport;-><init>(JI)V
-HSPLcom/android/internal/compat/ChangeReporter$ChangeReport;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/internal/compat/ChangeReporter$ChangeReport;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Lcom/android/internal/compat/ChangeReporter$ChangeReport;
 HSPLcom/android/internal/compat/ChangeReporter$ChangeReport;->hashCode()I
 HSPLcom/android/internal/compat/ChangeReporter;-><init>(I)V
 HSPLcom/android/internal/compat/ChangeReporter;->debugLog(IJI)V
-HSPLcom/android/internal/compat/ChangeReporter;->isAlreadyReported(ILcom/android/internal/compat/ChangeReporter$ChangeReport;)Z
-HSPLcom/android/internal/compat/ChangeReporter;->markAsReported(ILcom/android/internal/compat/ChangeReporter$ChangeReport;)V
-HSPLcom/android/internal/compat/ChangeReporter;->reportChange(IJI)V
+HSPLcom/android/internal/compat/ChangeReporter;->isAlreadyReported(ILcom/android/internal/compat/ChangeReporter$ChangeReport;)Z+]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Set;Ljava/util/HashSet;
+HSPLcom/android/internal/compat/ChangeReporter;->markAsReported(ILcom/android/internal/compat/ChangeReporter$ChangeReport;)V+]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Set;Ljava/util/HashSet;
+HSPLcom/android/internal/compat/ChangeReporter;->reportChange(IJI)V+]Lcom/android/internal/compat/ChangeReporter;Lcom/android/internal/compat/ChangeReporter;
 HSPLcom/android/internal/compat/ChangeReporter;->shouldWriteToDebug(IJI)Z
 HSPLcom/android/internal/compat/ChangeReporter;->shouldWriteToStatsLog(IJI)Z
 HSPLcom/android/internal/compat/ChangeReporter;->stateToString(I)Ljava/lang/String;
@@ -21185,12 +21200,12 @@
 HSPLcom/android/internal/infra/AndroidFuture$2;->createFromParcel(Landroid/os/Parcel;)Lcom/android/internal/infra/AndroidFuture;
 HSPLcom/android/internal/infra/AndroidFuture$2;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLcom/android/internal/infra/AndroidFuture;-><init>()V
-HSPLcom/android/internal/infra/AndroidFuture;-><init>(Landroid/os/Parcel;)V
+HSPLcom/android/internal/infra/AndroidFuture;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/internal/infra/AndroidFuture;->cancelTimeout()Lcom/android/internal/infra/AndroidFuture;
-HSPLcom/android/internal/infra/AndroidFuture;->complete(Ljava/lang/Object;)Z
+HSPLcom/android/internal/infra/AndroidFuture;->complete(Ljava/lang/Object;)Z+]Lcom/android/internal/infra/AndroidFuture;Lcom/android/internal/infra/AndroidFuture;
 HSPLcom/android/internal/infra/AndroidFuture;->getMainHandler()Landroid/os/Handler;
-HSPLcom/android/internal/infra/AndroidFuture;->onCompleted(Ljava/lang/Object;Ljava/lang/Throwable;)V
-HSPLcom/android/internal/infra/AndroidFuture;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLcom/android/internal/infra/AndroidFuture;->onCompleted(Ljava/lang/Object;Ljava/lang/Throwable;)V+]Lcom/android/internal/infra/AndroidFuture;Lcom/android/internal/infra/AndroidFuture;]Lcom/android/internal/infra/IAndroidFuture;Lcom/android/internal/infra/IAndroidFuture$Stub$Proxy;
+HSPLcom/android/internal/infra/AndroidFuture;->writeToParcel(Landroid/os/Parcel;I)V+]Lcom/android/internal/infra/AndroidFuture;Lcom/android/internal/infra/AndroidFuture;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/internal/infra/IAndroidFuture$Stub$Proxy;->complete(Lcom/android/internal/infra/AndroidFuture;)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/internal/infra/IAndroidFuture$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLcom/android/internal/inputmethod/EditableInputConnection;-><init>(Landroid/widget/TextView;)V
@@ -21299,7 +21314,7 @@
 HSPLcom/android/internal/logging/AndroidHandler;->publish(Ljava/util/logging/LogRecord;)V
 HSPLcom/android/internal/logging/EventLogTags;->writeSysuiMultiAction([Ljava/lang/Object;)V
 HSPLcom/android/internal/logging/InstanceId$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/internal/logging/InstanceId;
-HSPLcom/android/internal/logging/InstanceId$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLcom/android/internal/logging/InstanceId$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Lcom/android/internal/logging/InstanceId$1;Lcom/android/internal/logging/InstanceId$1;
 HSPLcom/android/internal/logging/InstanceId;-><init>(I)V
 HSPLcom/android/internal/logging/InstanceId;->getId()I
 HSPLcom/android/internal/logging/InstanceIdSequence;-><init>(I)V
@@ -21548,8 +21563,8 @@
 HSPLcom/android/internal/policy/DecorContext;-><init>(Landroid/content/Context;Lcom/android/internal/policy/PhoneWindow;)V
 HSPLcom/android/internal/policy/DecorContext;->getAutofillOptions()Landroid/content/AutofillOptions;
 HSPLcom/android/internal/policy/DecorContext;->getContentCaptureOptions()Landroid/content/ContentCaptureOptions;
-HSPLcom/android/internal/policy/DecorContext;->getResources()Landroid/content/res/Resources;
-HSPLcom/android/internal/policy/DecorContext;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
+HSPLcom/android/internal/policy/DecorContext;->getResources()Landroid/content/res/Resources;+]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
+HSPLcom/android/internal/policy/DecorContext;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;+]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
 HSPLcom/android/internal/policy/DecorContext;->isUiContext()Z
 HSPLcom/android/internal/policy/DecorContext;->setPhoneWindow(Lcom/android/internal/policy/PhoneWindow;)V
 HSPLcom/android/internal/policy/DecorView$$ExternalSyntheticLambda0;-><init>(Lcom/android/internal/policy/DecorView;)V
@@ -21565,7 +21580,7 @@
 HSPLcom/android/internal/policy/DecorView;->calculateStatusBarColor(I)I
 HSPLcom/android/internal/policy/DecorView;->createDecorCaptionView(Landroid/view/LayoutInflater;)Lcom/android/internal/widget/DecorCaptionView;
 HSPLcom/android/internal/policy/DecorView;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
-HSPLcom/android/internal/policy/DecorView;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z
+HSPLcom/android/internal/policy/DecorView;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z+]Lcom/android/internal/policy/PhoneWindow;Lcom/android/internal/policy/PhoneWindow;
 HSPLcom/android/internal/policy/DecorView;->draw(Landroid/graphics/Canvas;)V
 HSPLcom/android/internal/policy/DecorView;->drawLegacyNavigationBarBackground(Landroid/graphics/RecordingCanvas;)V
 HSPLcom/android/internal/policy/DecorView;->drawResizingShadowIfNeeded(Landroid/graphics/RecordingCanvas;)V
@@ -21595,10 +21610,10 @@
 HSPLcom/android/internal/policy/DecorView;->onConfigurationChanged(Landroid/content/res/Configuration;)V
 HSPLcom/android/internal/policy/DecorView;->onContentDrawn(IIII)Z
 HSPLcom/android/internal/policy/DecorView;->onDetachedFromWindow()V
-HSPLcom/android/internal/policy/DecorView;->onDraw(Landroid/graphics/Canvas;)V
+HSPLcom/android/internal/policy/DecorView;->onDraw(Landroid/graphics/Canvas;)V+]Lcom/android/internal/widget/BackgroundFallback;Lcom/android/internal/widget/BackgroundFallback;
 HSPLcom/android/internal/policy/DecorView;->onInterceptTouchEvent(Landroid/view/MotionEvent;)Z
 HSPLcom/android/internal/policy/DecorView;->onLayout(ZIIII)V
-HSPLcom/android/internal/policy/DecorView;->onMeasure(II)V
+HSPLcom/android/internal/policy/DecorView;->onMeasure(II)V+]Lcom/android/internal/policy/DecorView;Lcom/android/internal/policy/DecorView;]Landroid/content/Context;Lcom/android/internal/policy/DecorContext;]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLcom/android/internal/policy/DecorView;->onPostDraw(Landroid/graphics/RecordingCanvas;)V
 HSPLcom/android/internal/policy/DecorView;->onResourcesLoaded(Landroid/view/LayoutInflater;I)V
 HSPLcom/android/internal/policy/DecorView;->onRootViewScrollYChanged(I)V
@@ -21622,9 +21637,9 @@
 HSPLcom/android/internal/policy/DecorView;->superDispatchTouchEvent(Landroid/view/MotionEvent;)Z
 HSPLcom/android/internal/policy/DecorView;->updateBackgroundBlurRadius()V
 HSPLcom/android/internal/policy/DecorView;->updateBackgroundDrawable()V
-HSPLcom/android/internal/policy/DecorView;->updateColorViewInt(Lcom/android/internal/policy/DecorView$ColorViewState;IIIZZIZZLandroid/view/WindowInsetsController;)V
+HSPLcom/android/internal/policy/DecorView;->updateColorViewInt(Lcom/android/internal/policy/DecorView$ColorViewState;IIIZZIZZLandroid/view/WindowInsetsController;)V+]Lcom/android/internal/policy/PhoneWindow;Lcom/android/internal/policy/PhoneWindow;]Lcom/android/internal/policy/DecorView;Lcom/android/internal/policy/DecorView;]Landroid/view/View;Landroid/view/View;]Landroid/view/ViewPropertyAnimator;Landroid/view/ViewPropertyAnimator;]Lcom/android/internal/policy/DecorView$ColorViewAttributes;Lcom/android/internal/policy/DecorView$ColorViewAttributes;]Landroid/view/WindowInsetsController;Landroid/view/InsetsController;,Landroid/view/PendingInsetsController;
 HSPLcom/android/internal/policy/DecorView;->updateColorViewTranslations()V
-HSPLcom/android/internal/policy/DecorView;->updateColorViews(Landroid/view/WindowInsets;Z)Landroid/view/WindowInsets;+]Lcom/android/internal/policy/DecorView;Lcom/android/internal/policy/DecorView;]Lcom/android/internal/policy/PhoneWindow;Lcom/android/internal/policy/PhoneWindow;]Landroid/view/ViewGroup;Landroid/widget/LinearLayout;]Landroid/view/WindowInsets;Landroid/view/WindowInsets;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Landroid/view/WindowInsetsController;Landroid/view/InsetsController;,Landroid/view/PendingInsetsController;
+HSPLcom/android/internal/policy/DecorView;->updateColorViews(Landroid/view/WindowInsets;Z)Landroid/view/WindowInsets;+]Lcom/android/internal/policy/DecorView;Lcom/android/internal/policy/DecorView;]Lcom/android/internal/policy/PhoneWindow;Lcom/android/internal/policy/PhoneWindow;]Landroid/view/ViewGroup;Landroid/widget/FrameLayout;,Landroid/widget/LinearLayout;]Landroid/view/WindowInsets;Landroid/view/WindowInsets;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Landroid/view/WindowInsetsController;Landroid/view/InsetsController;,Landroid/view/PendingInsetsController;
 HSPLcom/android/internal/policy/DecorView;->updateDecorCaptionStatus(Landroid/content/res/Configuration;)V
 HSPLcom/android/internal/policy/DecorView;->updateElevation()V
 HSPLcom/android/internal/policy/DecorView;->updateLogTag(Landroid/view/WindowManager$LayoutParams;)V
@@ -21648,7 +21663,7 @@
 HSPLcom/android/internal/policy/PhoneLayoutInflater;-><init>(Landroid/content/Context;)V
 HSPLcom/android/internal/policy/PhoneLayoutInflater;-><init>(Landroid/view/LayoutInflater;Landroid/content/Context;)V
 HSPLcom/android/internal/policy/PhoneLayoutInflater;->cloneInContext(Landroid/content/Context;)Landroid/view/LayoutInflater;
-HSPLcom/android/internal/policy/PhoneLayoutInflater;->onCreateView(Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;
+HSPLcom/android/internal/policy/PhoneLayoutInflater;->onCreateView(Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;+]Lcom/android/internal/policy/PhoneLayoutInflater;Lcom/android/internal/policy/PhoneLayoutInflater;
 HSPLcom/android/internal/policy/PhoneWindow$$ExternalSyntheticLambda0;->onContentApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/util/Pair;
 HSPLcom/android/internal/policy/PhoneWindow$1;-><init>(Lcom/android/internal/policy/PhoneWindow;)V
 HSPLcom/android/internal/policy/PhoneWindow$1;->run()V
@@ -21725,7 +21740,7 @@
 HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->asBinder()Landroid/os/IBinder;
 HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getCallCapablePhoneAccounts(ZLjava/lang/String;Ljava/lang/String;)Ljava/util/List;
 HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getCallState()I
-HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getCallStateUsingPackage(Ljava/lang/String;Ljava/lang/String;)I
+HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getCallStateUsingPackage(Ljava/lang/String;Ljava/lang/String;)I+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getCurrentTtyMode(Ljava/lang/String;Ljava/lang/String;)I
 HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getDefaultDialerPackage()Ljava/lang/String;
 HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->isInCall(Ljava/lang/String;Ljava/lang/String;)Z
@@ -21802,7 +21817,7 @@
 HSPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;-><init>(Ljava/lang/String;I)V
 HSPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;->isComplete()Z
 HSPLcom/android/internal/telephony/SmsApplication;->getApplication(Landroid/content/Context;ZI)Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;
-HSPLcom/android/internal/telephony/SmsApplication;->getApplicationCollectionInternal(Landroid/content/Context;I)Ljava/util/Collection;+]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/internal/telephony/SmsApplication;->getApplicationCollectionInternal(Landroid/content/Context;I)Ljava/util/Collection;+]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/content/Context;missing_types
 HSPLcom/android/internal/telephony/SmsApplication;->getApplicationForPackage(Ljava/util/Collection;Ljava/lang/String;)Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;
 HSPLcom/android/internal/telephony/SmsApplication;->getDefaultSmsApplication(Landroid/content/Context;Z)Landroid/content/ComponentName;
 HSPLcom/android/internal/telephony/SmsApplication;->getDefaultSmsApplicationAsUser(Landroid/content/Context;ZI)Landroid/content/ComponentName;
@@ -21832,12 +21847,12 @@
 HSPLcom/android/internal/textservice/ITextServicesSessionListener$Stub;->asBinder()Landroid/os/IBinder;
 HSPLcom/android/internal/textservice/ITextServicesSessionListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLcom/android/internal/transition/EpicenterTranslateClipReveal;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HSPLcom/android/internal/util/AnnotationValidations;->validate(Ljava/lang/Class;Landroid/annotation/IntRange;ILjava/lang/String;J)V
+HSPLcom/android/internal/util/AnnotationValidations;->validate(Ljava/lang/Class;Landroid/annotation/IntRange;ILjava/lang/String;J)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLcom/android/internal/util/AnnotationValidations;->validate(Ljava/lang/Class;Landroid/annotation/IntRange;ILjava/lang/String;JLjava/lang/String;J)V
 HSPLcom/android/internal/util/AnnotationValidations;->validate(Ljava/lang/Class;Landroid/annotation/IntRange;JLjava/lang/String;J)V
 HSPLcom/android/internal/util/AnnotationValidations;->validate(Ljava/lang/Class;Landroid/annotation/NonNull;Ljava/lang/Object;)V
 HSPLcom/android/internal/util/AnnotationValidations;->validate(Ljava/lang/Class;Ljava/lang/annotation/Annotation;I)V
-HSPLcom/android/internal/util/AnnotationValidations;->validate(Ljava/lang/Class;Ljava/lang/annotation/Annotation;J)V
+HSPLcom/android/internal/util/AnnotationValidations;->validate(Ljava/lang/Class;Ljava/lang/annotation/Annotation;J)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLcom/android/internal/util/AnnotationValidations;->validate(Ljava/lang/Class;Ljava/lang/annotation/Annotation;Ljava/lang/Object;)V
 HSPLcom/android/internal/util/AnnotationValidations;->validate(Ljava/lang/Class;Ljava/lang/annotation/Annotation;Ljava/lang/Object;[Ljava/lang/Object;)V
 HSPLcom/android/internal/util/ArrayUtils;->appendElement(Ljava/lang/Class;[Ljava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;
@@ -21851,29 +21866,29 @@
 HSPLcom/android/internal/util/ArrayUtils;->containsAll([Ljava/lang/Object;[Ljava/lang/Object;)Z
 HSPLcom/android/internal/util/ArrayUtils;->containsAny([Ljava/lang/Object;[Ljava/lang/Object;)Z
 HSPLcom/android/internal/util/ArrayUtils;->convertToIntArray(Ljava/util/List;)[I
-HSPLcom/android/internal/util/ArrayUtils;->deepToString(Ljava/lang/Object;)Ljava/lang/String;
+HSPLcom/android/internal/util/ArrayUtils;->deepToString(Ljava/lang/Object;)Ljava/lang/String;+]Ljava/lang/Object;Ljava/lang/String;,Ljava/lang/Integer;,Ljava/lang/Boolean;,Landroid/content/Intent;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLcom/android/internal/util/ArrayUtils;->defeatNullable([Ljava/io/File;)[Ljava/io/File;
 HSPLcom/android/internal/util/ArrayUtils;->defeatNullable([Ljava/lang/String;)[Ljava/lang/String;
-HSPLcom/android/internal/util/ArrayUtils;->emptyArray(Ljava/lang/Class;)[Ljava/lang/Object;
+HSPLcom/android/internal/util/ArrayUtils;->emptyArray(Ljava/lang/Class;)[Ljava/lang/Object;+]Ljava/lang/Object;missing_types]Ljava/lang/Class;Ljava/lang/Class;
 HSPLcom/android/internal/util/ArrayUtils;->emptyIfNull([Ljava/lang/Object;Ljava/lang/Class;)[Ljava/lang/Object;
 HSPLcom/android/internal/util/ArrayUtils;->getOrNull([Ljava/lang/Object;I)Ljava/lang/Object;
 HSPLcom/android/internal/util/ArrayUtils;->indexOf([Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLcom/android/internal/util/ArrayUtils;->isEmpty(Ljava/util/Collection;)Z
 HSPLcom/android/internal/util/ArrayUtils;->isEmpty([I)Z
 HSPLcom/android/internal/util/ArrayUtils;->isEmpty([Ljava/lang/Object;)Z
-HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedArray(Ljava/lang/Class;I)[Ljava/lang/Object;
+HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedArray(Ljava/lang/Class;I)[Ljava/lang/Object;+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;
 HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedBooleanArray(I)[Z
-HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedByteArray(I)[B
-HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedCharArray(I)[C
-HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedFloatArray(I)[F
-HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedIntArray(I)[I
-HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedLongArray(I)[J
-HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedObjectArray(I)[Ljava/lang/Object;
+HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedByteArray(I)[B+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;
+HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedCharArray(I)[C+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;
+HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedFloatArray(I)[F+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;
+HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedIntArray(I)[I+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;
+HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedLongArray(I)[J+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;
+HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedObjectArray(I)[Ljava/lang/Object;+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;
 HSPLcom/android/internal/util/ArrayUtils;->remove(Ljava/util/ArrayList;Ljava/lang/Object;)Ljava/util/ArrayList;
 HSPLcom/android/internal/util/ArrayUtils;->removeElement(Ljava/lang/Class;[Ljava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;
 HSPLcom/android/internal/util/ArrayUtils;->size([Ljava/lang/Object;)I
 HSPLcom/android/internal/util/ArrayUtils;->throwsIfOutOfBounds(III)V
-HSPLcom/android/internal/util/ArrayUtils;->unstableRemoveIf(Ljava/util/ArrayList;Ljava/util/function/Predicate;)I
+HSPLcom/android/internal/util/ArrayUtils;->unstableRemoveIf(Ljava/util/ArrayList;Ljava/util/function/Predicate;)I+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/function/Predicate;Landroid/app/ResourcesManager$$ExternalSyntheticLambda0;
 HSPLcom/android/internal/util/AsyncChannel;-><init>()V
 HSPLcom/android/internal/util/AsyncChannel;->connected(Landroid/content/Context;Landroid/os/Handler;Landroid/os/Messenger;)V
 HSPLcom/android/internal/util/AsyncChannel;->sendMessage(Landroid/os/Message;)V
@@ -21899,8 +21914,8 @@
 HSPLcom/android/internal/util/FastPrintWriter;->appendLocked([CII)V
 HSPLcom/android/internal/util/FastPrintWriter;->close()V
 HSPLcom/android/internal/util/FastPrintWriter;->flush()V
-HSPLcom/android/internal/util/FastPrintWriter;->flushBytesLocked()V
-HSPLcom/android/internal/util/FastPrintWriter;->flushLocked()V
+HSPLcom/android/internal/util/FastPrintWriter;->flushBytesLocked()V+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;]Ljava/io/OutputStream;Ljava/io/FileOutputStream;
+HSPLcom/android/internal/util/FastPrintWriter;->flushLocked()V+]Ljava/io/Writer;Ljava/io/StringWriter;
 HSPLcom/android/internal/util/FastPrintWriter;->initDefaultEncoder()V
 HSPLcom/android/internal/util/FastPrintWriter;->print(C)V
 HSPLcom/android/internal/util/FastPrintWriter;->print(I)V
@@ -21920,11 +21935,11 @@
 HSPLcom/android/internal/util/FastXmlSerializer;->endDocument()V
 HSPLcom/android/internal/util/FastXmlSerializer;->endTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
 HSPLcom/android/internal/util/FastXmlSerializer;->escapeAndAppendString(Ljava/lang/String;)V
-HSPLcom/android/internal/util/FastXmlSerializer;->flush()V
-HSPLcom/android/internal/util/FastXmlSerializer;->flushBytes()V
+HSPLcom/android/internal/util/FastXmlSerializer;->flush()V+]Ljava/nio/charset/CharsetEncoder;Lcom/android/icu/charset/CharsetEncoderICU;]Ljava/io/OutputStream;Ljava/io/FileOutputStream;]Ljava/nio/charset/CoderResult;Ljava/nio/charset/CoderResult;
+HSPLcom/android/internal/util/FastXmlSerializer;->flushBytes()V+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;]Ljava/io/OutputStream;Ljava/io/FileOutputStream;
 HSPLcom/android/internal/util/FastXmlSerializer;->setFeature(Ljava/lang/String;Z)V
-HSPLcom/android/internal/util/FastXmlSerializer;->setOutput(Ljava/io/OutputStream;Ljava/lang/String;)V
-HSPLcom/android/internal/util/FastXmlSerializer;->startDocument(Ljava/lang/String;Ljava/lang/Boolean;)V
+HSPLcom/android/internal/util/FastXmlSerializer;->setOutput(Ljava/io/OutputStream;Ljava/lang/String;)V+]Ljava/nio/charset/Charset;Lcom/android/icu/charset/CharsetICU;]Ljava/nio/charset/CharsetEncoder;Lcom/android/icu/charset/CharsetEncoderICU;
+HSPLcom/android/internal/util/FastXmlSerializer;->startDocument(Ljava/lang/String;Ljava/lang/Boolean;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Boolean;Ljava/lang/Boolean;
 HSPLcom/android/internal/util/FastXmlSerializer;->startTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
 HSPLcom/android/internal/util/FastXmlSerializer;->text(Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
 HSPLcom/android/internal/util/FrameworkStatsLog;->write(III)V
@@ -21941,7 +21956,7 @@
 HSPLcom/android/internal/util/GrowingArrayUtils;->growSize(I)I
 HSPLcom/android/internal/util/GrowingArrayUtils;->insert([IIII)[I
 HSPLcom/android/internal/util/GrowingArrayUtils;->insert([JIIJ)[J
-HSPLcom/android/internal/util/GrowingArrayUtils;->insert([Ljava/lang/Object;IILjava/lang/Object;)[Ljava/lang/Object;
+HSPLcom/android/internal/util/GrowingArrayUtils;->insert([Ljava/lang/Object;IILjava/lang/Object;)[Ljava/lang/Object;+]Ljava/lang/Object;[Ljava/lang/Object;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLcom/android/internal/util/GrowingArrayUtils;->insert([ZIIZ)[Z
 HSPLcom/android/internal/util/IndentingPrintWriter;->decreaseIndent()Lcom/android/internal/util/IndentingPrintWriter;
 HSPLcom/android/internal/util/IndentingPrintWriter;->increaseIndent()Lcom/android/internal/util/IndentingPrintWriter;
@@ -21960,7 +21975,7 @@
 HSPLcom/android/internal/util/LineBreakBufferedWriter;-><init>(Ljava/io/Writer;II)V
 HSPLcom/android/internal/util/LineBreakBufferedWriter;->ensureCapacity(I)V
 HSPLcom/android/internal/util/LineBreakBufferedWriter;->flush()V
-HSPLcom/android/internal/util/LineBreakBufferedWriter;->println()V
+HSPLcom/android/internal/util/LineBreakBufferedWriter;->println()V+]Lcom/android/internal/util/LineBreakBufferedWriter;Lcom/android/internal/util/LineBreakBufferedWriter;
 HSPLcom/android/internal/util/LineBreakBufferedWriter;->write(Ljava/lang/String;II)V
 HSPLcom/android/internal/util/LineBreakBufferedWriter;->writeBuffer(I)V
 HSPLcom/android/internal/util/MemInfoReader;-><init>()V
@@ -21969,15 +21984,15 @@
 HSPLcom/android/internal/util/MessageUtils;->findMessageNames([Ljava/lang/Class;[Ljava/lang/String;)Landroid/util/SparseArray;
 HSPLcom/android/internal/util/NotificationMessagingUtil;->isImportantMessaging(Landroid/service/notification/StatusBarNotification;I)Z
 HSPLcom/android/internal/util/Parcelling$BuiltIn$ForBoolean;-><init>()V
-HSPLcom/android/internal/util/Parcelling$BuiltIn$ForBoolean;->parcel(Ljava/lang/Boolean;Landroid/os/Parcel;I)V
-HSPLcom/android/internal/util/Parcelling$BuiltIn$ForBoolean;->unparcel(Landroid/os/Parcel;)Ljava/lang/Boolean;
+HSPLcom/android/internal/util/Parcelling$BuiltIn$ForBoolean;->parcel(Ljava/lang/Boolean;Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLcom/android/internal/util/Parcelling$BuiltIn$ForBoolean;->unparcel(Landroid/os/Parcel;)Ljava/lang/Boolean;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/internal/util/Parcelling$BuiltIn$ForInternedString;-><init>()V
 HSPLcom/android/internal/util/Parcelling$BuiltIn$ForInternedStringArray;-><init>()V
 HSPLcom/android/internal/util/Parcelling$BuiltIn$ForInternedStringList;-><init>()V
 HSPLcom/android/internal/util/Parcelling$BuiltIn$ForInternedStringValueMap;-><init>()V
 HSPLcom/android/internal/util/Parcelling$BuiltIn$ForStringSet;-><init>()V
 HSPLcom/android/internal/util/Parcelling$BuiltIn$ForStringSet;->parcel(Ljava/util/Set;Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;,Ljava/util/Collections$EmptyIterator;]Ljava/util/Set;Landroid/util/ArraySet;,Ljava/util/Collections$EmptySet;
-HSPLcom/android/internal/util/Parcelling$BuiltIn$ForStringSet;->unparcel(Landroid/os/Parcel;)Ljava/util/Set;
+HSPLcom/android/internal/util/Parcelling$BuiltIn$ForStringSet;->unparcel(Landroid/os/Parcel;)Ljava/util/Set;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/internal/util/Parcelling$Cache;->get(Ljava/lang/Class;)Lcom/android/internal/util/Parcelling;
 HSPLcom/android/internal/util/Parcelling$Cache;->getOrCreate(Ljava/lang/Class;)Lcom/android/internal/util/Parcelling;
 HSPLcom/android/internal/util/Parcelling$Cache;->put(Lcom/android/internal/util/Parcelling;)Lcom/android/internal/util/Parcelling;
@@ -21993,7 +22008,7 @@
 HSPLcom/android/internal/util/Preconditions;->checkArgumentNonnegative(JLjava/lang/String;)J
 HSPLcom/android/internal/util/Preconditions;->checkArgumentPositive(ILjava/lang/String;)I
 HSPLcom/android/internal/util/Preconditions;->checkArrayElementsNotNull([Ljava/lang/Object;Ljava/lang/String;)[Ljava/lang/Object;
-HSPLcom/android/internal/util/Preconditions;->checkCollectionElementsNotNull(Ljava/util/Collection;Ljava/lang/String;)Ljava/util/Collection;
+HSPLcom/android/internal/util/Preconditions;->checkCollectionElementsNotNull(Ljava/util/Collection;Ljava/lang/String;)Ljava/util/Collection;+]Ljava/util/Collection;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLcom/android/internal/util/Preconditions;->checkFlagsArgument(II)I
 HSPLcom/android/internal/util/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/internal/util/Preconditions;->checkNotNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
@@ -22045,19 +22060,19 @@
 HSPLcom/android/internal/util/XmlPullParserWrapper;->getAttributeValue(I)Ljava/lang/String;
 HSPLcom/android/internal/util/XmlPullParserWrapper;->getAttributeValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/internal/util/XmlPullParserWrapper;->getEventType()I
-HSPLcom/android/internal/util/XmlPullParserWrapper;->getName()Ljava/lang/String;
+HSPLcom/android/internal/util/XmlPullParserWrapper;->getName()Ljava/lang/String;+]Lorg/xmlpull/v1/XmlPullParser;Lcom/android/org/kxml2/io/KXmlParser;
 HSPLcom/android/internal/util/XmlPullParserWrapper;->getText()Ljava/lang/String;
 HSPLcom/android/internal/util/XmlPullParserWrapper;->next()I+]Lorg/xmlpull/v1/XmlPullParser;Lcom/android/org/kxml2/io/KXmlParser;
 HSPLcom/android/internal/util/XmlPullParserWrapper;->setInput(Ljava/io/InputStream;Ljava/lang/String;)V
 HSPLcom/android/internal/util/XmlSerializerWrapper;-><init>(Lorg/xmlpull/v1/XmlSerializer;)V
-HSPLcom/android/internal/util/XmlSerializerWrapper;->attribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
+HSPLcom/android/internal/util/XmlSerializerWrapper;->attribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;+]Lorg/xmlpull/v1/XmlSerializer;Lcom/android/internal/util/FastXmlSerializer;
 HSPLcom/android/internal/util/XmlSerializerWrapper;->endDocument()V
-HSPLcom/android/internal/util/XmlSerializerWrapper;->endTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
+HSPLcom/android/internal/util/XmlSerializerWrapper;->endTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;+]Lorg/xmlpull/v1/XmlSerializer;Lcom/android/internal/util/FastXmlSerializer;
 HSPLcom/android/internal/util/XmlSerializerWrapper;->setFeature(Ljava/lang/String;Z)V
 HSPLcom/android/internal/util/XmlSerializerWrapper;->setOutput(Ljava/io/OutputStream;Ljava/lang/String;)V
 HSPLcom/android/internal/util/XmlSerializerWrapper;->startDocument(Ljava/lang/String;Ljava/lang/Boolean;)V
-HSPLcom/android/internal/util/XmlSerializerWrapper;->startTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
-HSPLcom/android/internal/util/XmlSerializerWrapper;->text(Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
+HSPLcom/android/internal/util/XmlSerializerWrapper;->startTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;+]Lorg/xmlpull/v1/XmlSerializer;Lcom/android/internal/util/FastXmlSerializer;
+HSPLcom/android/internal/util/XmlSerializerWrapper;->text(Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;+]Lorg/xmlpull/v1/XmlSerializer;Lcom/android/internal/util/FastXmlSerializer;
 HSPLcom/android/internal/util/XmlUtils$ForcedTypedXmlPullParser;-><init>(Lorg/xmlpull/v1/XmlPullParser;)V
 HSPLcom/android/internal/util/XmlUtils$ForcedTypedXmlPullParser;->getAttributeBoolean(I)Z
 HSPLcom/android/internal/util/XmlUtils$ForcedTypedXmlPullParser;->getAttributeFloat(I)F
@@ -22067,7 +22082,7 @@
 HSPLcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;->attributeBoolean(Ljava/lang/String;Ljava/lang/String;Z)Lorg/xmlpull/v1/XmlSerializer;
 HSPLcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;->attributeFloat(Ljava/lang/String;Ljava/lang/String;F)Lorg/xmlpull/v1/XmlSerializer;
 HSPLcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;->attributeInt(Ljava/lang/String;Ljava/lang/String;I)Lorg/xmlpull/v1/XmlSerializer;
-HSPLcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;->attributeLong(Ljava/lang/String;Ljava/lang/String;J)Lorg/xmlpull/v1/XmlSerializer;
+HSPLcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;->attributeLong(Ljava/lang/String;Ljava/lang/String;J)Lorg/xmlpull/v1/XmlSerializer;+]Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;
 HSPLcom/android/internal/util/XmlUtils;->beginDocument(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)V
 HSPLcom/android/internal/util/XmlUtils;->makeTyped(Lorg/xmlpull/v1/XmlPullParser;)Landroid/util/TypedXmlPullParser;
 HSPLcom/android/internal/util/XmlUtils;->makeTyped(Lorg/xmlpull/v1/XmlSerializer;)Landroid/util/TypedXmlSerializer;
@@ -22085,8 +22100,8 @@
 HSPLcom/android/internal/util/XmlUtils;->readThisValueXml(Landroid/util/TypedXmlPullParser;[Ljava/lang/String;Lcom/android/internal/util/XmlUtils$ReadMapCallback;Z)Ljava/lang/Object;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/TypedXmlPullParser;Lcom/android/internal/util/XmlUtils$ForcedTypedXmlPullParser;
 HSPLcom/android/internal/util/XmlUtils;->readValueXml(Landroid/util/TypedXmlPullParser;[Ljava/lang/String;)Ljava/lang/Object;
 HSPLcom/android/internal/util/XmlUtils;->skipCurrentTag(Lorg/xmlpull/v1/XmlPullParser;)V
-HSPLcom/android/internal/util/XmlUtils;->writeMapXml(Ljava/util/Map;Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/XmlUtils$WriteMapCallback;)V
-HSPLcom/android/internal/util/XmlUtils;->writeMapXml(Ljava/util/Map;Ljava/io/OutputStream;)V
+HSPLcom/android/internal/util/XmlUtils;->writeMapXml(Ljava/util/Map;Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/XmlUtils$WriteMapCallback;)V+]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;]Ljava/util/Set;Ljava/util/HashMap$EntrySet;
+HSPLcom/android/internal/util/XmlUtils;->writeMapXml(Ljava/util/Map;Ljava/io/OutputStream;)V+]Ljava/nio/charset/Charset;Lcom/android/icu/charset/CharsetICU;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;
 HSPLcom/android/internal/util/XmlUtils;->writeMapXml(Ljava/util/Map;Ljava/lang/String;Landroid/util/TypedXmlSerializer;)V
 HSPLcom/android/internal/util/XmlUtils;->writeMapXml(Ljava/util/Map;Ljava/lang/String;Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/XmlUtils$WriteMapCallback;)V
 HSPLcom/android/internal/util/XmlUtils;->writeSetXml(Ljava/util/Set;Ljava/lang/String;Landroid/util/TypedXmlSerializer;)V
@@ -22095,7 +22110,7 @@
 HSPLcom/android/internal/util/function/pooled/OmniFunction;->run()V
 HSPLcom/android/internal/util/function/pooled/PooledLambda;->obtainMessage(Lcom/android/internal/util/function/HexConsumer;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Landroid/os/Message;
 HSPLcom/android/internal/util/function/pooled/PooledLambda;->obtainMessage(Lcom/android/internal/util/function/QuadConsumer;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Landroid/os/Message;
-HSPLcom/android/internal/util/function/pooled/PooledLambda;->obtainMessage(Lcom/android/internal/util/function/QuintConsumer;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Landroid/os/Message;
+HSPLcom/android/internal/util/function/pooled/PooledLambda;->obtainMessage(Lcom/android/internal/util/function/QuintConsumer;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Landroid/os/Message;+]Landroid/os/Message;Landroid/os/Message;]Lcom/android/internal/util/function/pooled/PooledRunnable;Lcom/android/internal/util/function/pooled/PooledLambdaImpl;
 HSPLcom/android/internal/util/function/pooled/PooledLambda;->obtainMessage(Lcom/android/internal/util/function/TriConsumer;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Landroid/os/Message;
 HSPLcom/android/internal/util/function/pooled/PooledLambda;->obtainMessage(Ljava/util/function/BiConsumer;Ljava/lang/Object;Ljava/lang/Object;)Landroid/os/Message;
 HSPLcom/android/internal/util/function/pooled/PooledLambda;->obtainMessage(Ljava/util/function/Consumer;Ljava/lang/Object;)Landroid/os/Message;
@@ -22192,7 +22207,7 @@
 HSPLcom/android/internal/widget/ILockSettings$Stub$Proxy;->getBoolean(Ljava/lang/String;ZI)Z
 HSPLcom/android/internal/widget/ILockSettings$Stub$Proxy;->getCredentialType(I)I
 HSPLcom/android/internal/widget/ILockSettings$Stub$Proxy;->getString(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;
-HSPLcom/android/internal/widget/ILockSettings$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/widget/ILockSettings;
+HSPLcom/android/internal/widget/ILockSettings$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/widget/ILockSettings;+]Landroid/os/IBinder;Landroid/os/BinderProxy;
 HSPLcom/android/internal/widget/LockPatternUtils$1;-><init>(Lcom/android/internal/widget/LockPatternUtils;)V
 HSPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker$1;->onIsNonStrongBiometricAllowedChanged(ZI)V
 HSPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker$1;->onStrongAuthRequiredChanged(II)V
@@ -22202,7 +22217,7 @@
 HSPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;->handleStrongAuthRequiredChanged(II)V
 HSPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;->isNonStrongBiometricAllowedAfterIdleTimeout(I)Z
 HSPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;->onIsNonStrongBiometricAllowedChanged(I)V
-HSPLcom/android/internal/widget/LockPatternUtils;-><init>(Landroid/content/Context;)V
+HSPLcom/android/internal/widget/LockPatternUtils;-><init>(Landroid/content/Context;)V+]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLcom/android/internal/widget/LockPatternUtils;->credentialTypeToPasswordQuality(I)I
 HSPLcom/android/internal/widget/LockPatternUtils;->getBoolean(Ljava/lang/String;ZI)Z
 HSPLcom/android/internal/widget/LockPatternUtils;->getCredentialTypeForUser(I)I
@@ -22395,6 +22410,7 @@
 Landroid/accounts/IAccountManagerResponse;
 Landroid/accounts/OnAccountsUpdateListener;
 Landroid/accounts/OperationCanceledException;
+Landroid/animation/AnimationHandler$$ExternalSyntheticLambda0;
 Landroid/animation/AnimationHandler$1;
 Landroid/animation/AnimationHandler$2;
 Landroid/animation/AnimationHandler$AnimationFrameCallback;
@@ -22533,6 +22549,7 @@
 Landroid/app/ActivityThread$$ExternalSyntheticLambda0;
 Landroid/app/ActivityThread$$ExternalSyntheticLambda1;
 Landroid/app/ActivityThread$$ExternalSyntheticLambda2;
+Landroid/app/ActivityThread$$ExternalSyntheticLambda3;
 Landroid/app/ActivityThread$$ExternalSyntheticLambda5;
 Landroid/app/ActivityThread$1$$ExternalSyntheticLambda0;
 Landroid/app/ActivityThread$1;
@@ -23411,11 +23428,16 @@
 Landroid/app/slice/SliceProvider;
 Landroid/app/slice/SliceSpec$1;
 Landroid/app/slice/SliceSpec;
+Landroid/app/smartspace/SmartspaceAction$1;
+Landroid/app/smartspace/SmartspaceAction;
 Landroid/app/smartspace/SmartspaceConfig$1;
 Landroid/app/smartspace/SmartspaceConfig;
 Landroid/app/smartspace/SmartspaceManager;
 Landroid/app/smartspace/SmartspaceSessionId$1;
 Landroid/app/smartspace/SmartspaceSessionId;
+Landroid/app/smartspace/SmartspaceTarget$1;
+Landroid/app/smartspace/SmartspaceTarget;
+Landroid/app/smartspace/SmartspaceTargetEvent$1;
 Landroid/app/smartspace/SmartspaceTargetEvent;
 Landroid/app/tare/EconomyManager;
 Landroid/app/time/ITimeZoneDetectorListener$Stub$Proxy;
@@ -23734,6 +23756,7 @@
 Landroid/content/pm/ChangedPackages$1;
 Landroid/content/pm/ChangedPackages;
 Landroid/content/pm/Checksum$1;
+Landroid/content/pm/Checksum$Type;
 Landroid/content/pm/Checksum;
 Landroid/content/pm/ComponentInfo;
 Landroid/content/pm/ConfigurationInfo$1;
@@ -23880,6 +23903,7 @@
 Landroid/content/pm/PackageManager$Flags;
 Landroid/content/pm/PackageManager$MoveCallback;
 Landroid/content/pm/PackageManager$NameNotFoundException;
+Landroid/content/pm/PackageManager$OnChecksumsReadyListener;
 Landroid/content/pm/PackageManager$OnPermissionsChangedListener;
 Landroid/content/pm/PackageManager$PackageInfoFlags;
 Landroid/content/pm/PackageManager$PackageInfoQuery;
@@ -24044,6 +24068,7 @@
 Landroid/content/res/ObbScanner;
 Landroid/content/res/ResourceId;
 Landroid/content/res/Resources$$ExternalSyntheticLambda0;
+Landroid/content/res/Resources$$ExternalSyntheticLambda1;
 Landroid/content/res/Resources$AssetManagerUpdateHandler;
 Landroid/content/res/Resources$NotFoundException;
 Landroid/content/res/Resources$Theme;
@@ -29137,6 +29162,7 @@
 Landroid/sysprop/HdmiProperties;
 Landroid/sysprop/InitProperties;
 Landroid/sysprop/InputProperties;
+Landroid/sysprop/MediaProperties;
 Landroid/sysprop/PowerProperties;
 Landroid/sysprop/SocProperties;
 Landroid/sysprop/TelephonyProperties$$ExternalSyntheticLambda0;
@@ -29400,10 +29426,12 @@
 Landroid/telephony/PhoneNumberUtils;
 Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda0;
 Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda10;
+Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda13;
 Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda19;
 Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda1;
 Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda20;
 Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda24;
+Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda27;
 Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda28;
 Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda2;
 Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda32;
@@ -30666,6 +30694,8 @@
 Landroid/view/SurfaceView$$ExternalSyntheticLambda4;
 Landroid/view/SurfaceView$$ExternalSyntheticLambda5;
 Landroid/view/SurfaceView$$ExternalSyntheticLambda6;
+Landroid/view/SurfaceView$$ExternalSyntheticLambda7;
+Landroid/view/SurfaceView$$ExternalSyntheticLambda8;
 Landroid/view/SurfaceView$1;
 Landroid/view/SurfaceView$SurfaceViewPositionUpdateListener;
 Landroid/view/SurfaceView$SyncBufferTransactionCallback;
@@ -30694,6 +30724,7 @@
 Landroid/view/View$$ExternalSyntheticLambda0;
 Landroid/view/View$$ExternalSyntheticLambda10;
 Landroid/view/View$$ExternalSyntheticLambda11;
+Landroid/view/View$$ExternalSyntheticLambda12;
 Landroid/view/View$$ExternalSyntheticLambda13;
 Landroid/view/View$$ExternalSyntheticLambda1;
 Landroid/view/View$$ExternalSyntheticLambda2;
@@ -30809,6 +30840,7 @@
 Landroid/view/ViewRootImpl$3;
 Landroid/view/ViewRootImpl$4;
 Landroid/view/ViewRootImpl$5;
+Landroid/view/ViewRootImpl$6$$ExternalSyntheticLambda0;
 Landroid/view/ViewRootImpl$6;
 Landroid/view/ViewRootImpl$7;
 Landroid/view/ViewRootImpl$8$$ExternalSyntheticLambda0;
@@ -31090,7 +31122,9 @@
 Landroid/view/contentcapture/ViewNode$ViewNodeText;
 Landroid/view/contentcapture/ViewNode$ViewStructureImpl;
 Landroid/view/contentcapture/ViewNode;
+Landroid/view/displayhash/DisplayHash;
 Landroid/view/displayhash/DisplayHashManager;
+Landroid/view/displayhash/DisplayHashResultCallback;
 Landroid/view/inputmethod/BaseInputConnection;
 Landroid/view/inputmethod/CompletionInfo$1;
 Landroid/view/inputmethod/CompletionInfo;
@@ -31131,6 +31165,7 @@
 Landroid/view/inputmethod/InputMethodManager$$ExternalSyntheticLambda3;
 Landroid/view/inputmethod/InputMethodManager$1;
 Landroid/view/inputmethod/InputMethodManager$2;
+Landroid/view/inputmethod/InputMethodManager$DelegateImpl$$ExternalSyntheticLambda0;
 Landroid/view/inputmethod/InputMethodManager$DelegateImpl;
 Landroid/view/inputmethod/InputMethodManager$FinishedInputEventCallback;
 Landroid/view/inputmethod/InputMethodManager$H$$ExternalSyntheticLambda0;
@@ -31525,6 +31560,7 @@
 Landroid/widget/PopupWindow$3;
 Landroid/widget/PopupWindow$OnDismissListener;
 Landroid/widget/PopupWindow$PopupBackgroundView;
+Landroid/widget/PopupWindow$PopupDecorView$$ExternalSyntheticLambda0;
 Landroid/widget/PopupWindow$PopupDecorView$1$1;
 Landroid/widget/PopupWindow$PopupDecorView$1;
 Landroid/widget/PopupWindow$PopupDecorView$2;
@@ -31554,6 +31590,7 @@
 Landroid/widget/RemoteViews$2;
 Landroid/widget/RemoteViews$Action;
 Landroid/widget/RemoteViews$ActionException;
+Landroid/widget/RemoteViews$ApplicationInfoCache$$ExternalSyntheticLambda0;
 Landroid/widget/RemoteViews$ApplicationInfoCache;
 Landroid/widget/RemoteViews$AsyncApplyTask;
 Landroid/widget/RemoteViews$AttributeReflectionAction;
@@ -31708,6 +31745,7 @@
 Landroid/window/BackEvent;
 Landroid/window/ClientWindowFrames$1;
 Landroid/window/ClientWindowFrames;
+Landroid/window/CompatOnBackInvokedCallback;
 Landroid/window/ConfigurationHelper;
 Landroid/window/DisplayAreaAppearedInfo$1;
 Landroid/window/DisplayAreaAppearedInfo;
@@ -31719,6 +31757,7 @@
 Landroid/window/IDisplayAreaOrganizerController$Stub$Proxy;
 Landroid/window/IDisplayAreaOrganizerController$Stub;
 Landroid/window/IDisplayAreaOrganizerController;
+Landroid/window/IOnBackInvokedCallback$Stub$Proxy;
 Landroid/window/IOnBackInvokedCallback$Stub;
 Landroid/window/IOnBackInvokedCallback;
 Landroid/window/IRemoteTransition$Stub$Proxy;
@@ -31759,6 +31798,7 @@
 Landroid/window/SplashScreenView;
 Landroid/window/StartingWindowInfo$1;
 Landroid/window/StartingWindowInfo;
+Landroid/window/SurfaceSyncer$$ExternalSyntheticLambda1;
 Landroid/window/SurfaceSyncer$SyncBufferCallback;
 Landroid/window/SurfaceSyncer$SyncSet$1;
 Landroid/window/SurfaceSyncer$SyncSet;
@@ -31780,6 +31820,9 @@
 Landroid/window/WindowContextController;
 Landroid/window/WindowInfosListener$DisplayInfo;
 Landroid/window/WindowInfosListener;
+Landroid/window/WindowOnBackInvokedDispatcher$Checker;
+Landroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper$$ExternalSyntheticLambda0;
+Landroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper$$ExternalSyntheticLambda1;
 Landroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper$$ExternalSyntheticLambda2;
 Landroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper$$ExternalSyntheticLambda3;
 Landroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper;
@@ -32565,6 +32608,7 @@
 Lcom/android/internal/infra/ServiceConnector;
 Lcom/android/internal/infra/WhitelistHelper;
 Lcom/android/internal/inputmethod/EditableInputConnection;
+Lcom/android/internal/inputmethod/IAccessibilityInputMethodSession$Stub$Proxy;
 Lcom/android/internal/inputmethod/IAccessibilityInputMethodSession$Stub;
 Lcom/android/internal/inputmethod/IAccessibilityInputMethodSession;
 Lcom/android/internal/inputmethod/IInputContentUriToken;
@@ -32584,12 +32628,19 @@
 Lcom/android/internal/inputmethod/InputMethodPrivilegedOperations$OpsHolder;
 Lcom/android/internal/inputmethod/InputMethodPrivilegedOperations;
 Lcom/android/internal/inputmethod/InputMethodPrivilegedOperationsRegistry;
+Lcom/android/internal/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda19;
 Lcom/android/internal/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda25;
 Lcom/android/internal/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda28;
+Lcom/android/internal/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda2;
+Lcom/android/internal/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda34;
+Lcom/android/internal/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda39;
 Lcom/android/internal/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda3;
+Lcom/android/internal/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda40;
 Lcom/android/internal/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda41;
+Lcom/android/internal/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda44;
 Lcom/android/internal/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda7;
 Lcom/android/internal/inputmethod/RemoteInputConnectionImpl$1;
+Lcom/android/internal/inputmethod/RemoteInputConnectionImpl$KnownAlwaysTrueEndBatchEditCache;
 Lcom/android/internal/inputmethod/RemoteInputConnectionImpl;
 Lcom/android/internal/inputmethod/SubtypeLocaleUtils;
 Lcom/android/internal/jank/FrameTracker$$ExternalSyntheticLambda0;
diff --git a/boot/preloaded-classes b/boot/preloaded-classes
index 2a38083..80445ab 100644
--- a/boot/preloaded-classes
+++ b/boot/preloaded-classes
@@ -220,7 +220,6 @@
 android.app.ActivityThread$$ExternalSyntheticLambda2
 android.app.ActivityThread$1$$ExternalSyntheticLambda0
 android.app.ActivityThread$1
-android.app.ActivityThread$2
 android.app.ActivityThread$3
 android.app.ActivityThread$ActivityClientRecord
 android.app.ActivityThread$AndroidOs
@@ -441,7 +440,6 @@
 android.app.IBackupAgent
 android.app.IForegroundServiceObserver$Stub
 android.app.IForegroundServiceObserver
-android.app.IGameManagerService$Stub$Proxy
 android.app.IGameManagerService$Stub
 android.app.IGameManagerService
 android.app.IInstantAppResolver$Stub$Proxy
@@ -1167,7 +1165,6 @@
 android.companion.ICompanionDeviceManager$Stub$Proxy
 android.companion.ICompanionDeviceManager$Stub
 android.companion.ICompanionDeviceManager
-android.companion.virtual.IVirtualDevice$Stub
 android.companion.virtual.IVirtualDevice
 android.companion.virtual.VirtualDeviceManager
 android.content.AbstractThreadedSyncAdapter$ISyncAdapterImpl
@@ -3690,6 +3687,7 @@
 android.icu.number.NumberFormatter$GroupingStrategy
 android.icu.number.NumberFormatter$RoundingPriority
 android.icu.number.NumberFormatter$SignDisplay
+android.icu.number.NumberFormatter$TrailingZeroDisplay
 android.icu.number.NumberFormatter$UnitWidth
 android.icu.number.NumberFormatter
 android.icu.number.NumberFormatterImpl
@@ -12944,6 +12942,7 @@
 [Landroid.icu.impl.number.CompactData$CompactType;
 [Landroid.icu.impl.number.DecimalFormatProperties$ParseMode;
 [Landroid.icu.impl.number.Modifier$Signum;
+[Landroid.icu.impl.number.Modifier;
 [Landroid.icu.impl.number.Padder$PadPosition;
 [Landroid.icu.impl.number.PatternStringUtils$PatternSignType;
 [Landroid.icu.impl.units.MeasureUnitImpl$CompoundPart;
@@ -12964,6 +12963,11 @@
 [Landroid.icu.number.NumberSkeletonImpl$ParseState;
 [Landroid.icu.number.NumberSkeletonImpl$StemEnum;
 [Landroid.icu.text.AlphabeticIndex$Bucket$LabelType;
+[Landroid.icu.text.Bidi$IsoRun;
+[Landroid.icu.text.Bidi$Isolate;
+[Landroid.icu.text.Bidi$Opening;
+[Landroid.icu.text.Bidi$Point;
+[Landroid.icu.text.BidiRun;
 [Landroid.icu.text.BidiTransform$Mirroring;
 [Landroid.icu.text.BidiTransform$Order;
 [Landroid.icu.text.BidiTransform$ReorderingScheme;
diff --git a/config/boot-image-profile.txt b/config/boot-image-profile.txt
index e0b659c..e36d31a 100644
--- a/config/boot-image-profile.txt
+++ b/config/boot-image-profile.txt
@@ -26,7 +26,7 @@
 HSPLandroid/accounts/Account;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/accounts/Account;->equals(Ljava/lang/Object;)Z
 HSPLandroid/accounts/Account;->hashCode()I
-HSPLandroid/accounts/Account;->toString()Ljava/lang/String;
+HSPLandroid/accounts/Account;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/accounts/Account;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/accounts/AccountManager$10;-><init>(Landroid/accounts/AccountManager;Landroid/app/Activity;Landroid/os/Handler;Landroid/accounts/AccountManagerCallback;Landroid/accounts/Account;Ljava/lang/String;ZLandroid/os/Bundle;)V
 HSPLandroid/accounts/AccountManager$10;->doWork()V
@@ -120,21 +120,29 @@
 HSPLandroid/accounts/IAccountManagerResponse$Stub;-><init>()V
 HSPLandroid/accounts/IAccountManagerResponse$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/accounts/IAccountManagerResponse$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/animation/AnimationHandler$$ExternalSyntheticLambda0;-><init>(Landroid/animation/AnimationHandler;)V
+HSPLandroid/animation/AnimationHandler$$ExternalSyntheticLambda0;->doFrame(J)V
 HSPLandroid/animation/AnimationHandler$1;-><init>(Landroid/animation/AnimationHandler;)V
 HSPLandroid/animation/AnimationHandler$1;->doFrame(J)V+]Landroid/animation/AnimationHandler$AnimationFrameCallbackProvider;Landroid/animation/AnimationHandler$MyFrameCallbackProvider;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/animation/AnimationHandler$MyFrameCallbackProvider;-><init>(Landroid/animation/AnimationHandler;)V
 HSPLandroid/animation/AnimationHandler$MyFrameCallbackProvider;->getFrameTime()J
 HSPLandroid/animation/AnimationHandler$MyFrameCallbackProvider;->postFrameCallback(Landroid/view/Choreographer$FrameCallback;)V
 HSPLandroid/animation/AnimationHandler;-><init>()V
-HSPLandroid/animation/AnimationHandler;->addAnimationFrameCallback(Landroid/animation/AnimationHandler$AnimationFrameCallback;J)V
-HSPLandroid/animation/AnimationHandler;->autoCancelBasedOn(Landroid/animation/ObjectAnimator;)V
-HSPLandroid/animation/AnimationHandler;->cleanUpList()V
+HSPLandroid/animation/AnimationHandler;->addAnimationFrameCallback(Landroid/animation/AnimationHandler$AnimationFrameCallback;J)V+]Landroid/animation/AnimationHandler$AnimationFrameCallbackProvider;Landroid/animation/AnimationHandler$MyFrameCallbackProvider;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/animation/AnimationHandler;->autoCancelBasedOn(Landroid/animation/ObjectAnimator;)V+]Landroid/animation/ObjectAnimator;Landroid/animation/ObjectAnimator;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/animation/AnimationHandler;->cleanUpList()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/animation/AnimationHandler;->doAnimationFrame(J)V+]Landroid/animation/AnimationHandler$AnimationFrameCallback;Landroid/animation/ObjectAnimator;,Landroid/animation/AnimatorSet;,Landroid/animation/ValueAnimator;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLandroid/animation/AnimationHandler;->getAnimationCount()I
-HSPLandroid/animation/AnimationHandler;->getInstance()Landroid/animation/AnimationHandler;
+HSPLandroid/animation/AnimationHandler;->getAnimationCount()I+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
+HSPLandroid/animation/AnimationHandler;->getInstance()Landroid/animation/AnimationHandler;+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
 HSPLandroid/animation/AnimationHandler;->getProvider()Landroid/animation/AnimationHandler$AnimationFrameCallbackProvider;
 HSPLandroid/animation/AnimationHandler;->isCallbackDue(Landroid/animation/AnimationHandler$AnimationFrameCallback;J)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
-HSPLandroid/animation/AnimationHandler;->removeCallback(Landroid/animation/AnimationHandler$AnimationFrameCallback;)V
+HSPLandroid/animation/AnimationHandler;->isPauseBgAnimationsEnabledInSystemProperties()Z
+HSPLandroid/animation/AnimationHandler;->lambda$new$0$android-animation-AnimationHandler(J)V
+HSPLandroid/animation/AnimationHandler;->removeCallback(Landroid/animation/AnimationHandler$AnimationFrameCallback;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/animation/AnimationHandler;->requestAnimatorsEnabled(ZLjava/lang/Object;)V
+HSPLandroid/animation/AnimationHandler;->requestAnimatorsEnabledImpl(ZLjava/lang/Object;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/view/Choreographer;Landroid/view/Choreographer;
+HSPLandroid/animation/AnimationHandler;->resumeAnimators()V+]Landroid/view/Choreographer;Landroid/view/Choreographer;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/animation/AnimationHandler;->setAnimatorPausingEnabled(Z)V
 HSPLandroid/animation/AnimationHandler;->setProvider(Landroid/animation/AnimationHandler$AnimationFrameCallbackProvider;)V
 HSPLandroid/animation/Animator$AnimatorConstantState;-><init>(Landroid/animation/Animator;)V
 HSPLandroid/animation/Animator$AnimatorConstantState;->getChangingConfigurations()I
@@ -143,11 +151,12 @@
 HSPLandroid/animation/Animator$AnimatorListener;->onAnimationEnd(Landroid/animation/Animator;Z)V+]Landroid/animation/Animator$AnimatorListener;missing_types
 HSPLandroid/animation/Animator$AnimatorListener;->onAnimationStart(Landroid/animation/Animator;Z)V+]Landroid/animation/Animator$AnimatorListener;missing_types
 HSPLandroid/animation/Animator;-><init>()V
-HSPLandroid/animation/Animator;->addListener(Landroid/animation/Animator$AnimatorListener;)V
+HSPLandroid/animation/Animator;->addListener(Landroid/animation/Animator$AnimatorListener;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/animation/Animator;->addPauseListener(Landroid/animation/Animator$AnimatorPauseListener;)V
 HSPLandroid/animation/Animator;->appendChangingConfigurations(I)V
 HSPLandroid/animation/Animator;->clone()Landroid/animation/Animator;
 HSPLandroid/animation/Animator;->createConstantState()Landroid/content/res/ConstantState;
+HSPLandroid/animation/Animator;->getBackgroundPauseDelay()J
 HSPLandroid/animation/Animator;->getChangingConfigurations()I
 HSPLandroid/animation/Animator;->getListeners()Ljava/util/ArrayList;
 HSPLandroid/animation/Animator;->pause()V
@@ -181,7 +190,7 @@
 HSPLandroid/animation/AnimatorSet$3;->compare(Landroid/animation/AnimatorSet$AnimationEvent;Landroid/animation/AnimatorSet$AnimationEvent;)I
 HSPLandroid/animation/AnimatorSet$3;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLandroid/animation/AnimatorSet$AnimationEvent;-><init>(Landroid/animation/AnimatorSet$Node;I)V
-HSPLandroid/animation/AnimatorSet$AnimationEvent;->getTime()J+]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;,Landroid/animation/AnimatorSet;,Landroid/animation/ValueAnimator;
+HSPLandroid/animation/AnimatorSet$AnimationEvent;->getTime()J+]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;,Landroid/animation/ValueAnimator;,Landroid/animation/AnimatorSet;
 HSPLandroid/animation/AnimatorSet$Builder;-><init>(Landroid/animation/AnimatorSet;Landroid/animation/Animator;)V
 HSPLandroid/animation/AnimatorSet$Builder;->after(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;
 HSPLandroid/animation/AnimatorSet$Builder;->before(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;
@@ -196,13 +205,13 @@
 HSPLandroid/animation/AnimatorSet$SeekState;->getPlayTimeNormalized()J
 HSPLandroid/animation/AnimatorSet$SeekState;->isActive()Z
 HSPLandroid/animation/AnimatorSet$SeekState;->reset()V
-HSPLandroid/animation/AnimatorSet;-><init>()V
+HSPLandroid/animation/AnimatorSet;-><init>()V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/ValueAnimator;Landroid/animation/ValueAnimator;
 HSPLandroid/animation/AnimatorSet;->addAnimationCallback(J)V
 HSPLandroid/animation/AnimatorSet;->addAnimationEndListener()V
 HSPLandroid/animation/AnimatorSet;->cancel()V
 HSPLandroid/animation/AnimatorSet;->clone()Landroid/animation/Animator;
-HSPLandroid/animation/AnimatorSet;->clone()Landroid/animation/AnimatorSet;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/AnimatorSet$Node;Landroid/animation/AnimatorSet$Node;]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;,Landroid/animation/ValueAnimator;
-HSPLandroid/animation/AnimatorSet;->createDependencyGraph()V
+HSPLandroid/animation/AnimatorSet;->clone()Landroid/animation/AnimatorSet;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/AnimatorSet$Node;Landroid/animation/AnimatorSet$Node;]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;,Landroid/animation/ValueAnimator;,Landroid/animation/AnimatorSet;
+HSPLandroid/animation/AnimatorSet;->createDependencyGraph()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/AnimatorSet$AnimationEvent;Landroid/animation/AnimatorSet$AnimationEvent;]Landroid/animation/AnimatorSet$Node;Landroid/animation/AnimatorSet$Node;]Landroid/animation/ValueAnimator;Landroid/animation/ValueAnimator;]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;,Landroid/animation/AnimatorSet;,Landroid/animation/ValueAnimator;
 HSPLandroid/animation/AnimatorSet;->doAnimationFrame(J)Z+]Landroid/animation/AnimatorSet$SeekState;Landroid/animation/AnimatorSet$SeekState;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/animation/AnimatorSet;->end()V
 HSPLandroid/animation/AnimatorSet;->endAnimation()V
@@ -215,7 +224,7 @@
 HSPLandroid/animation/AnimatorSet;->getPlayTimeForNode(JLandroid/animation/AnimatorSet$Node;Z)J
 HSPLandroid/animation/AnimatorSet;->getStartDelay()J
 HSPLandroid/animation/AnimatorSet;->getTotalDuration()J
-HSPLandroid/animation/AnimatorSet;->handleAnimationEvents(IIJ)V
+HSPLandroid/animation/AnimatorSet;->handleAnimationEvents(IIJ)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;,Landroid/animation/AnimatorSet;,Landroid/animation/ValueAnimator;
 HSPLandroid/animation/AnimatorSet;->initAnimation()V
 HSPLandroid/animation/AnimatorSet;->isEmptySet(Landroid/animation/AnimatorSet;)Z
 HSPLandroid/animation/AnimatorSet;->isInitialized()Z
@@ -236,15 +245,15 @@
 HSPLandroid/animation/AnimatorSet;->setTarget(Ljava/lang/Object;)V+]Landroid/animation/ObjectAnimator;Landroid/animation/ObjectAnimator;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/animation/AnimatorSet;->shouldPlayTogether()Z
 HSPLandroid/animation/AnimatorSet;->skipToEndValue(Z)V
-HSPLandroid/animation/AnimatorSet;->sortAnimationEvents()V
+HSPLandroid/animation/AnimatorSet;->sortAnimationEvents()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;,Landroid/animation/AnimatorSet;
 HSPLandroid/animation/AnimatorSet;->start()V
-HSPLandroid/animation/AnimatorSet;->start(ZZ)V
-HSPLandroid/animation/AnimatorSet;->startAnimation()V
+HSPLandroid/animation/AnimatorSet;->start(ZZ)V+]Landroid/animation/Animator$AnimatorListener;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;,Landroid/animation/AnimatorSet;,Landroid/animation/ValueAnimator;
+HSPLandroid/animation/AnimatorSet;->startAnimation()V+]Landroid/animation/AnimatorSet;Landroid/animation/AnimatorSet;]Landroid/animation/AnimatorSet$SeekState;Landroid/animation/AnimatorSet$SeekState;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;,Landroid/animation/AnimatorSet;,Landroid/animation/ValueAnimator;
 HSPLandroid/animation/AnimatorSet;->startWithoutPulsing(Z)V
 HSPLandroid/animation/AnimatorSet;->updateAnimatorsDuration()V
-HSPLandroid/animation/AnimatorSet;->updatePlayTime(Landroid/animation/AnimatorSet$Node;Ljava/util/ArrayList;)V
+HSPLandroid/animation/AnimatorSet;->updatePlayTime(Landroid/animation/AnimatorSet$Node;Ljava/util/ArrayList;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;,Landroid/animation/AnimatorSet;
 HSPLandroid/animation/ArgbEvaluator;-><init>()V
-HSPLandroid/animation/ArgbEvaluator;->evaluate(FLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/animation/ArgbEvaluator;->evaluate(FLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/lang/Integer;Ljava/lang/Integer;
 HSPLandroid/animation/ArgbEvaluator;->getInstance()Landroid/animation/ArgbEvaluator;
 HSPLandroid/animation/FloatKeyframeSet;-><init>([Landroid/animation/Keyframe$FloatKeyframe;)V
 HSPLandroid/animation/FloatKeyframeSet;->clone()Landroid/animation/FloatKeyframeSet;+]Ljava/util/List;Ljava/util/Arrays$ArrayList;]Landroid/animation/Keyframe;Landroid/animation/Keyframe$FloatKeyframe;
@@ -254,7 +263,7 @@
 HSPLandroid/animation/IntKeyframeSet;-><init>([Landroid/animation/Keyframe$IntKeyframe;)V
 HSPLandroid/animation/IntKeyframeSet;->clone()Landroid/animation/IntKeyframeSet;
 HSPLandroid/animation/IntKeyframeSet;->clone()Landroid/animation/Keyframes;
-HSPLandroid/animation/IntKeyframeSet;->getIntValue(F)I
+HSPLandroid/animation/IntKeyframeSet;->getIntValue(F)I+]Ljava/util/List;Ljava/util/Arrays$ArrayList;]Landroid/animation/Keyframe$IntKeyframe;Landroid/animation/Keyframe$IntKeyframe;
 HSPLandroid/animation/Keyframe$FloatKeyframe;-><init>(F)V
 HSPLandroid/animation/Keyframe$FloatKeyframe;-><init>(FF)V
 HSPLandroid/animation/Keyframe$FloatKeyframe;->clone()Landroid/animation/Keyframe$FloatKeyframe;+]Landroid/animation/Keyframe$FloatKeyframe;Landroid/animation/Keyframe$FloatKeyframe;
@@ -282,7 +291,7 @@
 HSPLandroid/animation/Keyframe;->setInterpolator(Landroid/animation/TimeInterpolator;)V
 HSPLandroid/animation/Keyframe;->setValueWasSetOnStart(Z)V
 HSPLandroid/animation/Keyframe;->valueWasSetOnStart()Z
-HSPLandroid/animation/KeyframeSet;-><init>([Landroid/animation/Keyframe;)V
+HSPLandroid/animation/KeyframeSet;-><init>([Landroid/animation/Keyframe;)V+]Landroid/animation/Keyframe;Landroid/animation/Keyframe$IntKeyframe;,Landroid/animation/Keyframe$FloatKeyframe;,Landroid/animation/Keyframe$ObjectKeyframe;
 HSPLandroid/animation/KeyframeSet;->clone()Landroid/animation/KeyframeSet;
 HSPLandroid/animation/KeyframeSet;->clone()Landroid/animation/Keyframes;
 HSPLandroid/animation/KeyframeSet;->getKeyframes()Ljava/util/List;
@@ -326,14 +335,14 @@
 HSPLandroid/animation/ObjectAnimator;-><init>()V
 HSPLandroid/animation/ObjectAnimator;-><init>(Ljava/lang/Object;Landroid/util/Property;)V
 HSPLandroid/animation/ObjectAnimator;-><init>(Ljava/lang/Object;Ljava/lang/String;)V
-HSPLandroid/animation/ObjectAnimator;->animateValue(F)V+]Landroid/animation/ObjectAnimator;Landroid/animation/ObjectAnimator;]Landroid/animation/PropertyValuesHolder;Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;
+HSPLandroid/animation/ObjectAnimator;->animateValue(F)V+]Landroid/animation/ObjectAnimator;Landroid/animation/ObjectAnimator;]Landroid/animation/PropertyValuesHolder;Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder;
 HSPLandroid/animation/ObjectAnimator;->clone()Landroid/animation/Animator;
 HSPLandroid/animation/ObjectAnimator;->clone()Landroid/animation/ObjectAnimator;
 HSPLandroid/animation/ObjectAnimator;->getNameForTrace()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/animation/ObjectAnimator;Landroid/animation/ObjectAnimator;
 HSPLandroid/animation/ObjectAnimator;->getPropertyName()Ljava/lang/String;
 HSPLandroid/animation/ObjectAnimator;->getTarget()Ljava/lang/Object;+]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
 HSPLandroid/animation/ObjectAnimator;->hasSameTargetAndProperties(Landroid/animation/Animator;)Z
-HSPLandroid/animation/ObjectAnimator;->initAnimation()V
+HSPLandroid/animation/ObjectAnimator;->initAnimation()V+]Landroid/animation/ObjectAnimator;Landroid/animation/ObjectAnimator;]Landroid/animation/PropertyValuesHolder;Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder;
 HSPLandroid/animation/ObjectAnimator;->isInitialized()Z
 HSPLandroid/animation/ObjectAnimator;->ofFloat(Ljava/lang/Object;Landroid/util/Property;[F)Landroid/animation/ObjectAnimator;
 HSPLandroid/animation/ObjectAnimator;->ofFloat(Ljava/lang/Object;Ljava/lang/String;[F)Landroid/animation/ObjectAnimator;
@@ -351,7 +360,7 @@
 HSPLandroid/animation/ObjectAnimator;->setObjectValues([Ljava/lang/Object;)V
 HSPLandroid/animation/ObjectAnimator;->setProperty(Landroid/util/Property;)V
 HSPLandroid/animation/ObjectAnimator;->setPropertyName(Ljava/lang/String;)V
-HSPLandroid/animation/ObjectAnimator;->setTarget(Ljava/lang/Object;)V
+HSPLandroid/animation/ObjectAnimator;->setTarget(Ljava/lang/Object;)V+]Landroid/animation/ObjectAnimator;Landroid/animation/ObjectAnimator;
 HSPLandroid/animation/ObjectAnimator;->setupEndValues()V
 HSPLandroid/animation/ObjectAnimator;->setupStartValues()V
 HSPLandroid/animation/ObjectAnimator;->shouldAutoCancel(Landroid/animation/AnimationHandler$AnimationFrameCallback;)Z
@@ -364,15 +373,15 @@
 HSPLandroid/animation/PathKeyframes;->getKeyframes()Ljava/util/ArrayList;
 HSPLandroid/animation/PathKeyframes;->getKeyframes()Ljava/util/List;
 HSPLandroid/animation/PathKeyframes;->getValue(F)Ljava/lang/Object;
-HSPLandroid/animation/PathKeyframes;->interpolateInRange(FII)Landroid/graphics/PointF;
+HSPLandroid/animation/PathKeyframes;->interpolateInRange(FII)Landroid/graphics/PointF;+]Landroid/graphics/PointF;Landroid/graphics/PointF;
 HSPLandroid/animation/PropertyValuesHolder$1;->getValueAtFraction(F)Ljava/lang/Object;
 HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;-><init>(Landroid/util/Property;[F)V
 HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;-><init>(Ljava/lang/String;[F)V
-HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->calculateValue(F)V+]Landroid/animation/Keyframes$FloatKeyframes;Landroid/animation/FloatKeyframeSet;
+HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->calculateValue(F)V+]Landroid/animation/Keyframes$FloatKeyframes;Landroid/animation/FloatKeyframeSet;,Landroid/animation/PathKeyframes$1;,Landroid/animation/PathKeyframes$2;
 HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->clone()Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;
 HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->clone()Landroid/animation/PropertyValuesHolder;
 HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->getAnimatedValue()Ljava/lang/Object;
-HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->setAnimatedValue(Ljava/lang/Object;)V
+HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->setAnimatedValue(Ljava/lang/Object;)V+]Landroid/util/FloatProperty;Landroid/view/View$2;,Landroid/view/View$3;
 HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->setFloatValues([F)V
 HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->setProperty(Landroid/util/Property;)V
 HSPLandroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;->setupSetter(Ljava/lang/Class;)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/lang/Long;Ljava/lang/Long;
@@ -388,8 +397,8 @@
 HSPLandroid/animation/PropertyValuesHolder;-><init>(Landroid/util/Property;)V
 HSPLandroid/animation/PropertyValuesHolder;-><init>(Ljava/lang/String;)V
 HSPLandroid/animation/PropertyValuesHolder;-><init>(Ljava/lang/String;Landroid/animation/PropertyValuesHolder-IA;)V
-HSPLandroid/animation/PropertyValuesHolder;->calculateValue(F)V
-HSPLandroid/animation/PropertyValuesHolder;->clone()Landroid/animation/PropertyValuesHolder;+]Landroid/animation/Keyframes;Landroid/animation/FloatKeyframeSet;
+HSPLandroid/animation/PropertyValuesHolder;->calculateValue(F)V+]Landroid/animation/Keyframes;Landroid/animation/PathKeyframes;
+HSPLandroid/animation/PropertyValuesHolder;->clone()Landroid/animation/PropertyValuesHolder;+]Landroid/animation/Keyframes;Landroid/animation/FloatKeyframeSet;,Landroid/animation/PathKeyframes$1;,Landroid/animation/PathKeyframes$2;
 HSPLandroid/animation/PropertyValuesHolder;->convertBack(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/animation/PropertyValuesHolder;->getAnimatedValue()Ljava/lang/Object;
 HSPLandroid/animation/PropertyValuesHolder;->getMethodName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
@@ -403,7 +412,7 @@
 HSPLandroid/animation/PropertyValuesHolder;->ofInt(Ljava/lang/String;[I)Landroid/animation/PropertyValuesHolder;
 HSPLandroid/animation/PropertyValuesHolder;->ofKeyframes(Ljava/lang/String;Landroid/animation/Keyframes;)Landroid/animation/PropertyValuesHolder;
 HSPLandroid/animation/PropertyValuesHolder;->ofObject(Ljava/lang/String;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/PropertyValuesHolder;
-HSPLandroid/animation/PropertyValuesHolder;->setAnimatedValue(Ljava/lang/Object;)V
+HSPLandroid/animation/PropertyValuesHolder;->setAnimatedValue(Ljava/lang/Object;)V+]Landroid/util/Property;Landroid/transition/ChangeBounds$3;,Landroid/transition/ChangeBounds$4;,Landroid/transition/ChangeBounds$2;,Landroid/transition/ChangeBounds$5;]Landroid/animation/PropertyValuesHolder;Landroid/animation/PropertyValuesHolder;
 HSPLandroid/animation/PropertyValuesHolder;->setEvaluator(Landroid/animation/TypeEvaluator;)V
 HSPLandroid/animation/PropertyValuesHolder;->setFloatValues([F)V
 HSPLandroid/animation/PropertyValuesHolder;->setIntValues([I)V
@@ -412,7 +421,7 @@
 HSPLandroid/animation/PropertyValuesHolder;->setPropertyName(Ljava/lang/String;)V
 HSPLandroid/animation/PropertyValuesHolder;->setupEndValue(Ljava/lang/Object;)V
 HSPLandroid/animation/PropertyValuesHolder;->setupGetter(Ljava/lang/Class;)V
-HSPLandroid/animation/PropertyValuesHolder;->setupSetterAndGetter(Ljava/lang/Object;)V
+HSPLandroid/animation/PropertyValuesHolder;->setupSetterAndGetter(Ljava/lang/Object;)V+]Ljava/lang/Object;missing_types]Landroid/animation/Keyframes;Landroid/animation/IntKeyframeSet;,Landroid/animation/PathKeyframes;,Landroid/animation/FloatKeyframeSet;]Ljava/util/List;Ljava/util/Arrays$ArrayList;,Ljava/util/ArrayList;]Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;]Landroid/animation/Keyframe;Landroid/animation/Keyframe$IntKeyframe;,Landroid/animation/Keyframe$FloatKeyframe;]Landroid/animation/PropertyValuesHolder;Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;
 HSPLandroid/animation/PropertyValuesHolder;->setupSetterOrGetter(Ljava/lang/Class;Ljava/util/HashMap;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/reflect/Method;+]Ljava/util/HashMap;Ljava/util/HashMap;
 HSPLandroid/animation/PropertyValuesHolder;->setupStartValue(Ljava/lang/Object;)V
 HSPLandroid/animation/PropertyValuesHolder;->setupValue(Ljava/lang/Object;Landroid/animation/Keyframe;)V
@@ -423,10 +432,10 @@
 HSPLandroid/animation/StateListAnimator$StateListAnimatorConstantState;->newInstance()Ljava/lang/Object;
 HSPLandroid/animation/StateListAnimator$Tuple;-><init>([ILandroid/animation/Animator;)V
 HSPLandroid/animation/StateListAnimator;-><init>()V
-HSPLandroid/animation/StateListAnimator;->addState([ILandroid/animation/Animator;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/Animator;Landroid/animation/AnimatorSet;
+HSPLandroid/animation/StateListAnimator;->addState([ILandroid/animation/Animator;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/Animator;Landroid/animation/AnimatorSet;,Landroid/animation/ObjectAnimator;
 HSPLandroid/animation/StateListAnimator;->appendChangingConfigurations(I)V
 HSPLandroid/animation/StateListAnimator;->clearTarget()V
-HSPLandroid/animation/StateListAnimator;->clone()Landroid/animation/StateListAnimator;+]Landroid/animation/StateListAnimator;Landroid/animation/StateListAnimator;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/Animator;Landroid/animation/AnimatorSet;
+HSPLandroid/animation/StateListAnimator;->clone()Landroid/animation/StateListAnimator;+]Landroid/animation/StateListAnimator;Landroid/animation/StateListAnimator;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/Animator;Landroid/animation/AnimatorSet;,Landroid/animation/ObjectAnimator;
 HSPLandroid/animation/StateListAnimator;->createConstantState()Landroid/content/res/ConstantState;
 HSPLandroid/animation/StateListAnimator;->getChangingConfigurations()I
 HSPLandroid/animation/StateListAnimator;->getTarget()Landroid/view/View;
@@ -440,19 +449,19 @@
 HSPLandroid/animation/TimeAnimator;->setTimeListener(Landroid/animation/TimeAnimator$TimeListener;)V
 HSPLandroid/animation/ValueAnimator;-><init>()V
 HSPLandroid/animation/ValueAnimator;->addAnimationCallback(J)V
-HSPLandroid/animation/ValueAnimator;->addUpdateListener(Landroid/animation/ValueAnimator$AnimatorUpdateListener;)V
-HSPLandroid/animation/ValueAnimator;->animateBasedOnTime(J)Z+]Landroid/animation/ValueAnimator;Landroid/animation/ObjectAnimator;,Landroid/animation/ValueAnimator;
-HSPLandroid/animation/ValueAnimator;->animateValue(F)V+]Landroid/animation/ValueAnimator$AnimatorUpdateListener;missing_types]Landroid/animation/TimeInterpolator;missing_types]Landroid/animation/PropertyValuesHolder;Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/animation/ValueAnimator;->addUpdateListener(Landroid/animation/ValueAnimator$AnimatorUpdateListener;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/animation/ValueAnimator;->animateBasedOnTime(J)Z+]Landroid/animation/ValueAnimator;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/animation/ValueAnimator;->animateValue(F)V+]Landroid/animation/ValueAnimator$AnimatorUpdateListener;missing_types]Landroid/animation/TimeInterpolator;megamorphic_types]Landroid/animation/PropertyValuesHolder;Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/animation/ValueAnimator;->areAnimatorsEnabled()Z
 HSPLandroid/animation/ValueAnimator;->cancel()V
 HSPLandroid/animation/ValueAnimator;->clampFraction(F)F
 HSPLandroid/animation/ValueAnimator;->clone()Landroid/animation/Animator;
-HSPLandroid/animation/ValueAnimator;->clone()Landroid/animation/ValueAnimator;+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/animation/PropertyValuesHolder;Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;
-HSPLandroid/animation/ValueAnimator;->doAnimationFrame(J)Z+]Landroid/animation/ValueAnimator;Landroid/animation/ObjectAnimator;,Landroid/animation/ValueAnimator;
+HSPLandroid/animation/ValueAnimator;->clone()Landroid/animation/ValueAnimator;+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/animation/PropertyValuesHolder;Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder;
+HSPLandroid/animation/ValueAnimator;->doAnimationFrame(J)Z+]Landroid/animation/ValueAnimator;missing_types
 HSPLandroid/animation/ValueAnimator;->end()V
-HSPLandroid/animation/ValueAnimator;->endAnimation()V+]Landroid/animation/Animator$AnimatorListener;Landroid/animation/AnimatorSet$2;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/animation/ValueAnimator;->endAnimation()V+]Landroid/animation/Animator$AnimatorListener;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/animation/ValueAnimator;->getAnimatedFraction()F
-HSPLandroid/animation/ValueAnimator;->getAnimatedValue()Ljava/lang/Object;
+HSPLandroid/animation/ValueAnimator;->getAnimatedValue()Ljava/lang/Object;+]Landroid/animation/PropertyValuesHolder;Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;
 HSPLandroid/animation/ValueAnimator;->getAnimationHandler()Landroid/animation/AnimationHandler;
 HSPLandroid/animation/ValueAnimator;->getCurrentAnimationsCount()I
 HSPLandroid/animation/ValueAnimator;->getCurrentIteration(F)I
@@ -468,12 +477,12 @@
 HSPLandroid/animation/ValueAnimator;->getStartDelay()J
 HSPLandroid/animation/ValueAnimator;->getTotalDuration()J
 HSPLandroid/animation/ValueAnimator;->getValues()[Landroid/animation/PropertyValuesHolder;
-HSPLandroid/animation/ValueAnimator;->initAnimation()V
+HSPLandroid/animation/ValueAnimator;->initAnimation()V+]Landroid/animation/PropertyValuesHolder;Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder;
 HSPLandroid/animation/ValueAnimator;->isInitialized()Z
 HSPLandroid/animation/ValueAnimator;->isPulsingInternal()Z
 HSPLandroid/animation/ValueAnimator;->isRunning()Z
 HSPLandroid/animation/ValueAnimator;->isStarted()Z
-HSPLandroid/animation/ValueAnimator;->notifyStartListeners()V
+HSPLandroid/animation/ValueAnimator;->notifyStartListeners()V+]Landroid/animation/Animator$AnimatorListener;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/animation/ValueAnimator;->ofFloat([F)Landroid/animation/ValueAnimator;
 HSPLandroid/animation/ValueAnimator;->ofInt([I)Landroid/animation/ValueAnimator;
 HSPLandroid/animation/ValueAnimator;->ofObject(Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/ValueAnimator;
@@ -484,25 +493,25 @@
 HSPLandroid/animation/ValueAnimator;->resolveDurationScale()F
 HSPLandroid/animation/ValueAnimator;->setAllowRunningAsynchronously(Z)V
 HSPLandroid/animation/ValueAnimator;->setAnimationHandler(Landroid/animation/AnimationHandler;)V
-HSPLandroid/animation/ValueAnimator;->setCurrentFraction(F)V
+HSPLandroid/animation/ValueAnimator;->setCurrentFraction(F)V+]Landroid/animation/ValueAnimator;Landroid/animation/ObjectAnimator;,Landroid/animation/ValueAnimator;
 HSPLandroid/animation/ValueAnimator;->setCurrentPlayTime(J)V
 HSPLandroid/animation/ValueAnimator;->setDuration(J)Landroid/animation/Animator;
 HSPLandroid/animation/ValueAnimator;->setDuration(J)Landroid/animation/ValueAnimator;
 HSPLandroid/animation/ValueAnimator;->setDurationScale(F)V
 HSPLandroid/animation/ValueAnimator;->setEvaluator(Landroid/animation/TypeEvaluator;)V
-HSPLandroid/animation/ValueAnimator;->setFloatValues([F)V
+HSPLandroid/animation/ValueAnimator;->setFloatValues([F)V+]Landroid/animation/ValueAnimator;Landroid/animation/ValueAnimator;
 HSPLandroid/animation/ValueAnimator;->setIntValues([I)V
 HSPLandroid/animation/ValueAnimator;->setInterpolator(Landroid/animation/TimeInterpolator;)V
 HSPLandroid/animation/ValueAnimator;->setObjectValues([Ljava/lang/Object;)V
 HSPLandroid/animation/ValueAnimator;->setRepeatCount(I)V
 HSPLandroid/animation/ValueAnimator;->setRepeatMode(I)V
 HSPLandroid/animation/ValueAnimator;->setStartDelay(J)V
-HSPLandroid/animation/ValueAnimator;->setValues([Landroid/animation/PropertyValuesHolder;)V
+HSPLandroid/animation/ValueAnimator;->setValues([Landroid/animation/PropertyValuesHolder;)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/animation/PropertyValuesHolder;Landroid/animation/PropertyValuesHolder$FloatPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder$IntPropertyValuesHolder;,Landroid/animation/PropertyValuesHolder;
 HSPLandroid/animation/ValueAnimator;->shouldPlayBackward(IZ)Z
 HSPLandroid/animation/ValueAnimator;->skipToEndValue(Z)V
 HSPLandroid/animation/ValueAnimator;->start()V
-HSPLandroid/animation/ValueAnimator;->start(Z)V+]Landroid/animation/ValueAnimator;Landroid/animation/ObjectAnimator;,Landroid/animation/ValueAnimator;
-HSPLandroid/animation/ValueAnimator;->startAnimation()V
+HSPLandroid/animation/ValueAnimator;->start(Z)V+]Landroid/animation/ValueAnimator;missing_types
+HSPLandroid/animation/ValueAnimator;->startAnimation()V+]Landroid/animation/ValueAnimator;Landroid/animation/ObjectAnimator;,Landroid/animation/ValueAnimator;
 HSPLandroid/animation/ValueAnimator;->startWithoutPulsing(Z)V
 HSPLandroid/app/Activity$1;-><init>(Landroid/app/Activity;)V
 HSPLandroid/app/Activity$1;->isTaskRoot()Z
@@ -739,7 +748,7 @@
 HSPLandroid/app/ActivityManager;->getProcessMemoryInfo([I)[Landroid/os/Debug$MemoryInfo;
 HSPLandroid/app/ActivityManager;->getRunningAppProcesses()Ljava/util/List;
 HSPLandroid/app/ActivityManager;->getRunningServices(I)Ljava/util/List;
-HSPLandroid/app/ActivityManager;->getService()Landroid/app/IActivityManager;
+HSPLandroid/app/ActivityManager;->getService()Landroid/app/IActivityManager;+]Landroid/util/Singleton;Landroid/app/ActivityManager$1;
 HSPLandroid/app/ActivityManager;->getTaskService()Landroid/app/IActivityTaskManager;
 HSPLandroid/app/ActivityManager;->handleIncomingUser(IIIZZLjava/lang/String;Ljava/lang/String;)I
 HSPLandroid/app/ActivityManager;->isBackgroundRestricted()Z
@@ -778,6 +787,7 @@
 HSPLandroid/app/ActivityThread$$ExternalSyntheticLambda0;-><init>(Landroid/app/ActivityThread;)V
 HSPLandroid/app/ActivityThread$$ExternalSyntheticLambda0;->onConfigurationChanged(Landroid/content/res/Configuration;)V
 HSPLandroid/app/ActivityThread$$ExternalSyntheticLambda1;-><init>()V
+HSPLandroid/app/ActivityThread$$ExternalSyntheticLambda3;-><init>()V
 HSPLandroid/app/ActivityThread$$ExternalSyntheticLambda5;->run()V
 HSPLandroid/app/ActivityThread$2;-><init>(Landroid/app/ActivityThread;)V
 HSPLandroid/app/ActivityThread$2;->setContentCaptureOptions(Landroid/content/ContentCaptureOptions;)V
@@ -791,12 +801,12 @@
 HSPLandroid/app/ActivityThread$ActivityClientRecord;->isPersistable()Z
 HSPLandroid/app/ActivityThread$ActivityClientRecord;->setState(I)V
 HSPLandroid/app/ActivityThread$AndroidOs;-><init>(Llibcore/io/Os;)V
-HSPLandroid/app/ActivityThread$AndroidOs;->access(Ljava/lang/String;I)Z
+HSPLandroid/app/ActivityThread$AndroidOs;->access(Ljava/lang/String;I)Z+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/app/ActivityThread$AndroidOs;->install()V
 HSPLandroid/app/ActivityThread$AndroidOs;->open(Ljava/lang/String;II)Ljava/io/FileDescriptor;
 HSPLandroid/app/ActivityThread$AndroidOs;->remove(Ljava/lang/String;)V
 HSPLandroid/app/ActivityThread$AndroidOs;->rename(Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/app/ActivityThread$AndroidOs;->stat(Ljava/lang/String;)Landroid/system/StructStat;
+HSPLandroid/app/ActivityThread$AndroidOs;->stat(Ljava/lang/String;)Landroid/system/StructStat;+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/app/ActivityThread$AppBindData;-><init>()V
 HSPLandroid/app/ActivityThread$ApplicationThread$$ExternalSyntheticLambda2;-><init>()V
 HSPLandroid/app/ActivityThread$ApplicationThread$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
@@ -861,7 +871,6 @@
 HSPLandroid/app/ActivityThread$RequestAssistContextExtras;-><init>()V
 HSPLandroid/app/ActivityThread$ServiceArgsData;-><init>()V
 HSPLandroid/app/ActivityThread$ServiceArgsData;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HSPLandroid/app/ActivityThread;->$r8$lambda$0B6gi4scVND6AEt5CVU-ROTGuJc(Landroid/app/ActivityThread;)V
 HSPLandroid/app/ActivityThread;->-$$Nest$fgetmTransactionExecutor(Landroid/app/ActivityThread;)Landroid/app/servertransaction/TransactionExecutor;
 HSPLandroid/app/ActivityThread;->-$$Nest$mhandleBindApplication(Landroid/app/ActivityThread;Landroid/app/ActivityThread$AppBindData;)V
 HSPLandroid/app/ActivityThread;->-$$Nest$mhandleBindService(Landroid/app/ActivityThread;Landroid/app/ActivityThread$BindServiceData;)V
@@ -878,9 +887,8 @@
 HSPLandroid/app/ActivityThread;->-$$Nest$mhandleSetCoreSettings(Landroid/app/ActivityThread;Landroid/os/Bundle;)V
 HSPLandroid/app/ActivityThread;->-$$Nest$msendMessage(Landroid/app/ActivityThread;ILjava/lang/Object;IIZ)V
 HSPLandroid/app/ActivityThread;-><init>()V
-HSPLandroid/app/ActivityThread;->acquireExistingProvider(Landroid/content/Context;Ljava/lang/String;IZ)Landroid/content/IContentProvider;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/IContentProvider;Landroid/content/ContentProviderProxy;,Landroid/content/ContentProvider$Transport;]Landroid/os/IBinder;Landroid/content/ContentProvider$Transport;,Landroid/os/BinderProxy;
+HSPLandroid/app/ActivityThread;->acquireExistingProvider(Landroid/content/Context;Ljava/lang/String;IZ)Landroid/content/IContentProvider;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/IContentProvider;Landroid/content/ContentProviderProxy;,Landroid/content/ContentProvider$Transport;]Landroid/os/IBinder;Landroid/os/BinderProxy;,Landroid/content/ContentProvider$Transport;
 HSPLandroid/app/ActivityThread;->acquireProvider(Landroid/content/Context;Ljava/lang/String;IZ)Landroid/content/IContentProvider;
-HSPLandroid/app/ActivityThread;->applyPendingProcessState()V
 HSPLandroid/app/ActivityThread;->attach(ZJ)V
 HSPLandroid/app/ActivityThread;->callActivityOnSaveInstanceState(Landroid/app/ActivityThread$ActivityClientRecord;)V
 HSPLandroid/app/ActivityThread;->callActivityOnStop(Landroid/app/ActivityThread$ActivityClientRecord;ZLjava/lang/String;)V
@@ -892,7 +900,7 @@
 HSPLandroid/app/ActivityThread;->createBaseContextForActivity(Landroid/app/ActivityThread$ActivityClientRecord;)Landroid/app/ContextImpl;
 HSPLandroid/app/ActivityThread;->currentActivityThread()Landroid/app/ActivityThread;
 HSPLandroid/app/ActivityThread;->currentApplication()Landroid/app/Application;
-HSPLandroid/app/ActivityThread;->currentAttributionSource()Landroid/content/AttributionSource;
+HSPLandroid/app/ActivityThread;->currentAttributionSource()Landroid/content/AttributionSource;+]Landroid/app/ActivityThread;Landroid/app/ActivityThread;
 HSPLandroid/app/ActivityThread;->currentOpPackageName()Ljava/lang/String;
 HSPLandroid/app/ActivityThread;->currentPackageName()Ljava/lang/String;
 HSPLandroid/app/ActivityThread;->currentProcessName()Ljava/lang/String;
@@ -914,11 +922,11 @@
 HSPLandroid/app/ActivityThread;->getHandler()Landroid/os/Handler;
 HSPLandroid/app/ActivityThread;->getInstrumentation()Landroid/app/Instrumentation;
 HSPLandroid/app/ActivityThread;->getIntCoreSetting(Ljava/lang/String;I)I
-HSPLandroid/app/ActivityThread;->getIntentBeingBroadcast()Landroid/content/Intent;
+HSPLandroid/app/ActivityThread;->getIntentBeingBroadcast()Landroid/content/Intent;+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
 HSPLandroid/app/ActivityThread;->getLooper()Landroid/os/Looper;
 HSPLandroid/app/ActivityThread;->getPackageInfo(Landroid/content/pm/ApplicationInfo;Landroid/content/res/CompatibilityInfo;I)Landroid/app/LoadedApk;
 HSPLandroid/app/ActivityThread;->getPackageInfo(Landroid/content/pm/ApplicationInfo;Landroid/content/res/CompatibilityInfo;Ljava/lang/ClassLoader;ZZZ)Landroid/app/LoadedApk;
-HSPLandroid/app/ActivityThread;->getPackageInfo(Landroid/content/pm/ApplicationInfo;Landroid/content/res/CompatibilityInfo;Ljava/lang/ClassLoader;ZZZZ)Landroid/app/LoadedApk;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Landroid/app/LoadedApk;Landroid/app/LoadedApk;]Landroid/app/ActivityThread;Landroid/app/ActivityThread;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLandroid/app/ActivityThread;->getPackageInfo(Landroid/content/pm/ApplicationInfo;Landroid/content/res/CompatibilityInfo;Ljava/lang/ClassLoader;ZZZZ)Landroid/app/LoadedApk;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/app/LoadedApk;Landroid/app/LoadedApk;]Landroid/app/ActivityThread;Landroid/app/ActivityThread;
 HSPLandroid/app/ActivityThread;->getPackageInfo(Ljava/lang/String;Landroid/content/res/CompatibilityInfo;II)Landroid/app/LoadedApk;
 HSPLandroid/app/ActivityThread;->getPackageInfoNoCheck(Landroid/content/pm/ApplicationInfo;Landroid/content/res/CompatibilityInfo;)Landroid/app/LoadedApk;
 HSPLandroid/app/ActivityThread;->getPackageManager()Landroid/content/pm/IPackageManager;
@@ -927,14 +935,14 @@
 HSPLandroid/app/ActivityThread;->getSystemContext()Landroid/app/ContextImpl;
 HSPLandroid/app/ActivityThread;->getSystemUiContext()Landroid/app/ContextImpl;
 HSPLandroid/app/ActivityThread;->getSystemUiContextNoCreate()Landroid/app/ContextImpl;
-HSPLandroid/app/ActivityThread;->getTopLevelResources(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;Landroid/app/LoadedApk;Landroid/content/res/Configuration;)Landroid/content/res/Resources;
+HSPLandroid/app/ActivityThread;->getTopLevelResources(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;Landroid/app/LoadedApk;Landroid/content/res/Configuration;)Landroid/content/res/Resources;+]Landroid/app/LoadedApk;Landroid/app/LoadedApk;]Landroid/app/ResourcesManager;Landroid/app/ResourcesManager;
 HSPLandroid/app/ActivityThread;->handleActivityConfigurationChanged(Landroid/app/ActivityThread$ActivityClientRecord;Landroid/content/res/Configuration;I)V
 HSPLandroid/app/ActivityThread;->handleApplicationInfoChanged(Landroid/content/pm/ApplicationInfo;)V
 HSPLandroid/app/ActivityThread;->handleBindApplication(Landroid/app/ActivityThread$AppBindData;)V
 HSPLandroid/app/ActivityThread;->handleBindService(Landroid/app/ActivityThread$BindServiceData;)V
 HSPLandroid/app/ActivityThread;->handleConfigurationChanged(Landroid/content/res/Configuration;)V
 HSPLandroid/app/ActivityThread;->handleCreateBackupAgent(Landroid/app/ActivityThread$CreateBackupAgentData;)V
-HSPLandroid/app/ActivityThread;->handleCreateService(Landroid/app/ActivityThread$CreateServiceData;)V
+HSPLandroid/app/ActivityThread;->handleCreateService(Landroid/app/ActivityThread$CreateServiceData;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/app/LoadedApk;Landroid/app/LoadedApk;]Landroid/app/ActivityThread;Landroid/app/ActivityThread;]Ljava/util/List;Ljava/util/Collections$EmptyList;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/app/IActivityManager;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/app/AppComponentFactory;Landroid/app/AppComponentFactory;
 HSPLandroid/app/ActivityThread;->handleDestroyActivity(Landroid/app/ActivityThread$ActivityClientRecord;ZIZLjava/lang/String;)V
 HSPLandroid/app/ActivityThread;->handleDestroyBackupAgent(Landroid/app/ActivityThread$CreateBackupAgentData;)V
 HSPLandroid/app/ActivityThread;->handleDispatchPackageBroadcast(I[Ljava/lang/String;)V
@@ -966,7 +974,7 @@
 HSPLandroid/app/ActivityThread;->handleUnstableProviderDied(Landroid/os/IBinder;Z)V
 HSPLandroid/app/ActivityThread;->handleUnstableProviderDiedLocked(Landroid/os/IBinder;Z)V
 HSPLandroid/app/ActivityThread;->handleWindowingModeChangeIfNeeded(Landroid/app/Activity;Landroid/content/res/Configuration;)V
-HSPLandroid/app/ActivityThread;->incProviderRefLocked(Landroid/app/ActivityThread$ProviderRefCount;Z)V
+HSPLandroid/app/ActivityThread;->incProviderRefLocked(Landroid/app/ActivityThread$ProviderRefCount;Z)V+]Landroid/app/ActivityThread$H;Landroid/app/ActivityThread$H;]Landroid/app/IActivityManager;Landroid/app/IActivityManager$Stub$Proxy;
 HSPLandroid/app/ActivityThread;->initializeMainlineModules()V
 HSPLandroid/app/ActivityThread;->installContentProviders(Landroid/content/Context;Ljava/util/List;)V
 HSPLandroid/app/ActivityThread;->installProvider(Landroid/content/Context;Landroid/app/ContentProviderHolder;Landroid/content/pm/ProviderInfo;ZZZ)Landroid/app/ContentProviderHolder;
@@ -1068,7 +1076,7 @@
 HSPLandroid/app/AppOpsManager$$ExternalSyntheticLambda5;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
 HSPLandroid/app/AppOpsManager$1;->onNoted(Landroid/app/SyncNotedAppOp;)V
 HSPLandroid/app/AppOpsManager$1;->onSelfNoted(Landroid/app/SyncNotedAppOp;)V
-HSPLandroid/app/AppOpsManager$1;->reportStackTraceIfNeeded(Landroid/app/SyncNotedAppOp;)V
+HSPLandroid/app/AppOpsManager$1;->reportStackTraceIfNeeded(Landroid/app/SyncNotedAppOp;)V+]Landroid/app/SyncNotedAppOp;Landroid/app/SyncNotedAppOp;]Lcom/android/internal/app/MessageSamplingConfig;Lcom/android/internal/app/MessageSamplingConfig;
 HSPLandroid/app/AppOpsManager$2;->opChanged(IILjava/lang/String;)V
 HSPLandroid/app/AppOpsManager$5;-><init>(Landroid/app/AppOpsManager;Landroid/app/AppOpsManager$OnOpNotedListener;)V
 HSPLandroid/app/AppOpsManager$AttributedOpEntry;->getLastAccessEvent(III)Landroid/app/AppOpsManager$NoteOpEvent;
@@ -1076,7 +1084,7 @@
 HSPLandroid/app/AppOpsManager$NoteOpEvent;->getDuration()J
 HSPLandroid/app/AppOpsManager$NoteOpEvent;->getNoteTime()J
 HSPLandroid/app/AppOpsManager$OnOpNotedCallback$1;-><init>(Landroid/app/AppOpsManager$OnOpNotedCallback;)V
-HSPLandroid/app/AppOpsManager$OnOpNotedCallback$1;->opNoted(Landroid/app/AsyncNotedAppOp;)V
+HSPLandroid/app/AppOpsManager$OnOpNotedCallback$1;->opNoted(Landroid/app/AsyncNotedAppOp;)V+]Ljava/util/concurrent/Executor;Landroid/os/HandlerExecutor;
 HSPLandroid/app/AppOpsManager$OnOpNotedCallback;-><init>()V
 HSPLandroid/app/AppOpsManager$OnOpNotedCallback;->getAsyncNotedExecutor()Ljava/util/concurrent/Executor;
 HSPLandroid/app/AppOpsManager$OpEntry$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/AppOpsManager$OpEntry;
@@ -1100,12 +1108,12 @@
 HSPLandroid/app/AppOpsManager;->finishOp(IILjava/lang/String;Ljava/lang/String;)V
 HSPLandroid/app/AppOpsManager;->getClientId()Landroid/os/IBinder;
 HSPLandroid/app/AppOpsManager;->getFormattedStackTrace()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Ljava/lang/Exception;Ljava/lang/Exception;]Ljava/lang/StackTraceElement;Ljava/lang/StackTraceElement;]Ljava/lang/Class;Ljava/lang/Class;
-HSPLandroid/app/AppOpsManager;->getLastEvent(Landroid/util/LongSparseArray;III)Landroid/app/AppOpsManager$NoteOpEvent;+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
+HSPLandroid/app/AppOpsManager;->getLastEvent(Landroid/util/LongSparseArray;III)Landroid/app/AppOpsManager$NoteOpEvent;+]Landroid/app/AppOpsManager$NoteOpEvent;Landroid/app/AppOpsManager$NoteOpEvent;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
 HSPLandroid/app/AppOpsManager;->getNotedOpCollectionMode(ILjava/lang/String;I)I
 HSPLandroid/app/AppOpsManager;->getPackagesForOps([I)Ljava/util/List;
 HSPLandroid/app/AppOpsManager;->getService()Lcom/android/internal/app/IAppOpsService;
 HSPLandroid/app/AppOpsManager;->getToken(Lcom/android/internal/app/IAppOpsService;)Landroid/os/IBinder;
-HSPLandroid/app/AppOpsManager;->isCollectingStackTraces()Z
+HSPLandroid/app/AppOpsManager;->isCollectingStackTraces()Z+]Lcom/android/internal/app/MessageSamplingConfig;Lcom/android/internal/app/MessageSamplingConfig;
 HSPLandroid/app/AppOpsManager;->isListeningForOpNoted()Z
 HSPLandroid/app/AppOpsManager;->lambda$new$0(Landroid/provider/DeviceConfig$Properties;)V
 HSPLandroid/app/AppOpsManager;->leftCircularDistance(III)I
@@ -1113,7 +1121,7 @@
 HSPLandroid/app/AppOpsManager;->noteOp(IILjava/lang/String;)I
 HSPLandroid/app/AppOpsManager;->noteOp(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/app/AppOpsManager;->noteOp(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
-HSPLandroid/app/AppOpsManager;->noteOpNoThrow(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
+HSPLandroid/app/AppOpsManager;->noteOpNoThrow(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I+]Lcom/android/internal/app/IAppOpsService;Lcom/android/internal/app/IAppOpsService$Stub$Proxy;]Landroid/app/SyncNotedAppOp;Landroid/app/SyncNotedAppOp;
 HSPLandroid/app/AppOpsManager;->noteOpNoThrow(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/app/AppOpsManager;->noteProxyOp(ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;)I
 HSPLandroid/app/AppOpsManager;->noteProxyOpNoThrow(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)I
@@ -1121,11 +1129,11 @@
 HSPLandroid/app/AppOpsManager;->opToPermission(I)Ljava/lang/String;
 HSPLandroid/app/AppOpsManager;->opToPublicName(I)Ljava/lang/String;
 HSPLandroid/app/AppOpsManager;->opToSwitch(I)I
-HSPLandroid/app/AppOpsManager;->pauseNotedAppOpsCollection()Landroid/app/AppOpsManager$PausedNotedAppOpsCollection;+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;]Ljava/lang/Integer;Ljava/lang/Integer;
+HSPLandroid/app/AppOpsManager;->pauseNotedAppOpsCollection()Landroid/app/AppOpsManager$PausedNotedAppOpsCollection;+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
 HSPLandroid/app/AppOpsManager;->permissionToOp(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/app/AppOpsManager;->permissionToOpCode(Ljava/lang/String;)I
 HSPLandroid/app/AppOpsManager;->prefixParcelWithAppOpsIfNeeded(Landroid/os/Parcel;)V
-HSPLandroid/app/AppOpsManager;->readAndLogNotedAppops(Landroid/os/Parcel;)V
+HSPLandroid/app/AppOpsManager;->readAndLogNotedAppops(Landroid/os/Parcel;)V+]Ljava/util/BitSet;Ljava/util/BitSet;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/app/AppOpsManager$OnOpNotedCallback;Landroid/app/AppOpsManager$1;
 HSPLandroid/app/AppOpsManager;->resolveLastRestrictedUidState(I)I
 HSPLandroid/app/AppOpsManager;->setOnOpNotedCallback(Ljava/util/concurrent/Executor;Landroid/app/AppOpsManager$OnOpNotedCallback;)V
 HSPLandroid/app/AppOpsManager;->setUidMode(Ljava/lang/String;II)V
@@ -1136,7 +1144,7 @@
 HSPLandroid/app/AppOpsManager;->startWatchingMode(ILjava/lang/String;Landroid/app/AppOpsManager$OnOpChangedListener;)V
 HSPLandroid/app/AppOpsManager;->startWatchingMode(Ljava/lang/String;Ljava/lang/String;Landroid/app/AppOpsManager$OnOpChangedListener;)V
 HSPLandroid/app/AppOpsManager;->stopWatchingMode(Landroid/app/AppOpsManager$OnOpChangedListener;)V
-HSPLandroid/app/AppOpsManager;->strOpToOp(Ljava/lang/String;)I
+HSPLandroid/app/AppOpsManager;->strOpToOp(Ljava/lang/String;)I+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/lang/Integer;Ljava/lang/Integer;
 HSPLandroid/app/AppOpsManager;->toReceiverId(Ljava/lang/Object;)Ljava/lang/String;
 HSPLandroid/app/AppOpsManager;->unsafeCheckOp(Ljava/lang/String;ILjava/lang/String;)I
 HSPLandroid/app/AppOpsManager;->unsafeCheckOpNoThrow(Ljava/lang/String;ILjava/lang/String;)I
@@ -1211,7 +1219,7 @@
 HSPLandroid/app/ApplicationLoaders;->createAndCacheNonBootclasspathSystemClassLoaders([Landroid/content/pm/SharedLibraryInfo;)V
 HSPLandroid/app/ApplicationLoaders;->getCachedNonBootclasspathSystemLib(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/util/List;)Ljava/lang/ClassLoader;
 HSPLandroid/app/ApplicationLoaders;->getClassLoader(Ljava/lang/String;IZLjava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;)Ljava/lang/ClassLoader;
-HSPLandroid/app/ApplicationLoaders;->getClassLoader(Ljava/lang/String;IZLjava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;)Ljava/lang/ClassLoader;
+HSPLandroid/app/ApplicationLoaders;->getClassLoader(Ljava/lang/String;IZLjava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;)Ljava/lang/ClassLoader;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/ClassLoader;Ldalvik/system/PathClassLoader;
 HSPLandroid/app/ApplicationLoaders;->getClassLoaderWithSharedLibraries(Ljava/lang/String;IZLjava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;)Ljava/lang/ClassLoader;
 HSPLandroid/app/ApplicationLoaders;->getDefault()Landroid/app/ApplicationLoaders;
 HSPLandroid/app/ApplicationLoaders;->getSharedLibraryClassLoaderWithSharedLibraries(Ljava/lang/String;IZLjava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/util/List;Ljava/util/List;)Ljava/lang/ClassLoader;
@@ -1240,7 +1248,7 @@
 HSPLandroid/app/ApplicationPackageManager;->getActivityInfo(Landroid/content/ComponentName;Landroid/content/pm/PackageManager$ComponentInfoFlags;)Landroid/content/pm/ActivityInfo;+]Landroid/content/pm/IPackageManager;Landroid/content/pm/IPackageManager$Stub$Proxy;]Landroid/content/pm/PackageManager$ComponentInfoFlags;Landroid/content/pm/PackageManager$ComponentInfoFlags;]Landroid/app/ApplicationPackageManager;Landroid/app/ApplicationPackageManager;
 HSPLandroid/app/ApplicationPackageManager;->getApplicationEnabledSetting(Ljava/lang/String;)I
 HSPLandroid/app/ApplicationPackageManager;->getApplicationIcon(Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;
-HSPLandroid/app/ApplicationPackageManager;->getApplicationInfo(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo;
+HSPLandroid/app/ApplicationPackageManager;->getApplicationInfo(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo;+]Landroid/app/ApplicationPackageManager;Landroid/app/ApplicationPackageManager;
 HSPLandroid/app/ApplicationPackageManager;->getApplicationInfo(Ljava/lang/String;Landroid/content/pm/PackageManager$ApplicationInfoFlags;)Landroid/content/pm/ApplicationInfo;+]Landroid/app/ApplicationPackageManager;Landroid/app/ApplicationPackageManager;
 HSPLandroid/app/ApplicationPackageManager;->getApplicationInfoAsUser(Ljava/lang/String;II)Landroid/content/pm/ApplicationInfo;
 HSPLandroid/app/ApplicationPackageManager;->getApplicationInfoAsUser(Ljava/lang/String;Landroid/content/pm/PackageManager$ApplicationInfoFlags;I)Landroid/content/pm/ApplicationInfo;+]Landroid/content/pm/PackageManager$ApplicationInfoFlags;Landroid/content/pm/PackageManager$ApplicationInfoFlags;
@@ -1262,7 +1270,7 @@
 HSPLandroid/app/ApplicationPackageManager;->getLaunchIntentForPackage(Ljava/lang/String;)Landroid/content/Intent;
 HSPLandroid/app/ApplicationPackageManager;->getModuleInfo(Ljava/lang/String;I)Landroid/content/pm/ModuleInfo;
 HSPLandroid/app/ApplicationPackageManager;->getNameForUid(I)Ljava/lang/String;
-HSPLandroid/app/ApplicationPackageManager;->getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;
+HSPLandroid/app/ApplicationPackageManager;->getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;+]Landroid/app/ApplicationPackageManager;Landroid/app/ApplicationPackageManager;
 HSPLandroid/app/ApplicationPackageManager;->getPackageInfo(Ljava/lang/String;Landroid/content/pm/PackageManager$PackageInfoFlags;)Landroid/content/pm/PackageInfo;+]Landroid/app/ApplicationPackageManager;Landroid/app/ApplicationPackageManager;
 HSPLandroid/app/ApplicationPackageManager;->getPackageInfoAsUser(Ljava/lang/String;II)Landroid/content/pm/PackageInfo;
 HSPLandroid/app/ApplicationPackageManager;->getPackageInfoAsUser(Ljava/lang/String;Landroid/content/pm/PackageManager$PackageInfoFlags;I)Landroid/content/pm/PackageInfo;+]Landroid/content/pm/PackageManager$PackageInfoFlags;Landroid/content/pm/PackageManager$PackageInfoFlags;
@@ -1282,18 +1290,18 @@
 HSPLandroid/app/ApplicationPackageManager;->getProviderInfo(Landroid/content/ComponentName;Landroid/content/pm/PackageManager$ComponentInfoFlags;)Landroid/content/pm/ProviderInfo;
 HSPLandroid/app/ApplicationPackageManager;->getReceiverInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ActivityInfo;
 HSPLandroid/app/ApplicationPackageManager;->getReceiverInfo(Landroid/content/ComponentName;Landroid/content/pm/PackageManager$ComponentInfoFlags;)Landroid/content/pm/ActivityInfo;
-HSPLandroid/app/ApplicationPackageManager;->getResourcesForApplication(Landroid/content/pm/ApplicationInfo;)Landroid/content/res/Resources;
-HSPLandroid/app/ApplicationPackageManager;->getResourcesForApplication(Landroid/content/pm/ApplicationInfo;Landroid/content/res/Configuration;)Landroid/content/res/Resources;
-HSPLandroid/app/ApplicationPackageManager;->getResourcesForApplication(Ljava/lang/String;)Landroid/content/res/Resources;
+HSPLandroid/app/ApplicationPackageManager;->getResourcesForApplication(Landroid/content/pm/ApplicationInfo;)Landroid/content/res/Resources;+]Landroid/app/ApplicationPackageManager;Landroid/app/ApplicationPackageManager;
+HSPLandroid/app/ApplicationPackageManager;->getResourcesForApplication(Landroid/content/pm/ApplicationInfo;Landroid/content/res/Configuration;)Landroid/content/res/Resources;+]Landroid/app/ActivityThread;Landroid/app/ActivityThread;
+HSPLandroid/app/ApplicationPackageManager;->getResourcesForApplication(Ljava/lang/String;)Landroid/content/res/Resources;+]Landroid/app/ApplicationPackageManager;Landroid/app/ApplicationPackageManager;
 HSPLandroid/app/ApplicationPackageManager;->getServiceInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ServiceInfo;
-HSPLandroid/app/ApplicationPackageManager;->getServiceInfo(Landroid/content/ComponentName;Landroid/content/pm/PackageManager$ComponentInfoFlags;)Landroid/content/pm/ServiceInfo;+]Landroid/content/pm/PackageManager$ComponentInfoFlags;Landroid/content/pm/PackageManager$ComponentInfoFlags;]Landroid/app/ApplicationPackageManager;Landroid/app/ApplicationPackageManager;]Landroid/content/ComponentName;Landroid/content/ComponentName;
+HSPLandroid/app/ApplicationPackageManager;->getServiceInfo(Landroid/content/ComponentName;Landroid/content/pm/PackageManager$ComponentInfoFlags;)Landroid/content/pm/ServiceInfo;+]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/content/pm/PackageManager$ComponentInfoFlags;Landroid/content/pm/PackageManager$ComponentInfoFlags;]Landroid/app/ApplicationPackageManager;Landroid/app/ApplicationPackageManager;
 HSPLandroid/app/ApplicationPackageManager;->getServicesSystemSharedLibraryPackageName()Ljava/lang/String;
 HSPLandroid/app/ApplicationPackageManager;->getSystemAvailableFeatures()[Landroid/content/pm/FeatureInfo;
 HSPLandroid/app/ApplicationPackageManager;->getSystemSharedLibraryNames()[Ljava/lang/String;
 HSPLandroid/app/ApplicationPackageManager;->getText(Ljava/lang/String;ILandroid/content/pm/ApplicationInfo;)Ljava/lang/CharSequence;
 HSPLandroid/app/ApplicationPackageManager;->getUserBadgeColor(Landroid/os/UserHandle;Z)I
 HSPLandroid/app/ApplicationPackageManager;->getUserBadgedIcon(Landroid/graphics/drawable/Drawable;Landroid/os/UserHandle;)Landroid/graphics/drawable/Drawable;
-HSPLandroid/app/ApplicationPackageManager;->getUserId()I
+HSPLandroid/app/ApplicationPackageManager;->getUserId()I+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
 HSPLandroid/app/ApplicationPackageManager;->getUserManager()Landroid/os/UserManager;
 HSPLandroid/app/ApplicationPackageManager;->getXml(Ljava/lang/String;ILandroid/content/pm/ApplicationInfo;)Landroid/content/res/XmlResourceParser;
 HSPLandroid/app/ApplicationPackageManager;->handlePackageBroadcast(I[Ljava/lang/String;Z)V
@@ -1307,7 +1315,7 @@
 HSPLandroid/app/ApplicationPackageManager;->isSafeMode()Z
 HSPLandroid/app/ApplicationPackageManager;->loadItemIcon(Landroid/content/pm/PackageItemInfo;Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/app/ApplicationPackageManager;->loadUnbadgedItemIcon(Landroid/content/pm/PackageItemInfo;Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;
-HSPLandroid/app/ApplicationPackageManager;->maybeAdjustApplicationInfo(Landroid/content/pm/ApplicationInfo;)Landroid/content/pm/ApplicationInfo;
+HSPLandroid/app/ApplicationPackageManager;->maybeAdjustApplicationInfo(Landroid/content/pm/ApplicationInfo;)Landroid/content/pm/ApplicationInfo;+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/app/ApplicationPackageManager;->onImplicitDirectBoot(I)V
 HSPLandroid/app/ApplicationPackageManager;->putCachedIcon(Landroid/app/ApplicationPackageManager$ResourceName;Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/app/ApplicationPackageManager;->putCachedString(Landroid/app/ApplicationPackageManager$ResourceName;Ljava/lang/CharSequence;)V
@@ -1350,7 +1358,7 @@
 HSPLandroid/app/AsyncNotedAppOp$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/AsyncNotedAppOp;
 HSPLandroid/app/AsyncNotedAppOp$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/AsyncNotedAppOp;-><init>(IILjava/lang/String;Ljava/lang/String;J)V
-HSPLandroid/app/AsyncNotedAppOp;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/AsyncNotedAppOp;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/AsyncNotedAppOp;->getMessage()Ljava/lang/String;
 HSPLandroid/app/AsyncNotedAppOp;->getOp()Ljava/lang/String;
 HSPLandroid/app/AsyncNotedAppOp;->onConstructed()V
@@ -1404,14 +1412,14 @@
 HSPLandroid/app/ContextImpl$ApplicationContentResolver;->releaseUnstableProvider(Landroid/content/IContentProvider;)Z
 HSPLandroid/app/ContextImpl$ApplicationContentResolver;->resolveUserIdFromAuthority(Ljava/lang/String;)I
 HSPLandroid/app/ContextImpl$ApplicationContentResolver;->unstableProviderDied(Landroid/content/IContentProvider;)V
-HSPLandroid/app/ContextImpl;-><init>(Landroid/app/ContextImpl;Landroid/app/ActivityThread;Landroid/app/LoadedApk;Landroid/content/ContextParams;Ljava/lang/String;Landroid/content/AttributionSource;Ljava/lang/String;Landroid/os/IBinder;Landroid/os/UserHandle;ILjava/lang/ClassLoader;Ljava/lang/String;)V
+HSPLandroid/app/ContextImpl;-><init>(Landroid/app/ContextImpl;Landroid/app/ActivityThread;Landroid/app/LoadedApk;Landroid/content/ContextParams;Ljava/lang/String;Landroid/content/AttributionSource;Ljava/lang/String;Landroid/os/IBinder;Landroid/os/UserHandle;ILjava/lang/ClassLoader;Ljava/lang/String;)V+]Landroid/app/LoadedApk;Landroid/app/LoadedApk;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;]Landroid/content/ContextParams;Landroid/content/ContextParams;
 HSPLandroid/app/ContextImpl;->bindIsolatedService(Landroid/content/Intent;ILjava/lang/String;Ljava/util/concurrent/Executor;Landroid/content/ServiceConnection;)Z
 HSPLandroid/app/ContextImpl;->bindService(Landroid/content/Intent;Landroid/content/ServiceConnection;I)Z
 HSPLandroid/app/ContextImpl;->bindServiceAsUser(Landroid/content/Intent;Landroid/content/ServiceConnection;ILandroid/os/Handler;Landroid/os/UserHandle;)Z
 HSPLandroid/app/ContextImpl;->bindServiceAsUser(Landroid/content/Intent;Landroid/content/ServiceConnection;ILandroid/os/UserHandle;)Z
 HSPLandroid/app/ContextImpl;->bindServiceCommon(Landroid/content/Intent;Landroid/content/ServiceConnection;ILjava/lang/String;Landroid/os/Handler;Ljava/util/concurrent/Executor;Landroid/os/UserHandle;)Z
-HSPLandroid/app/ContextImpl;->canLoadUnsafeResources()Z
-HSPLandroid/app/ContextImpl;->checkCallingOrSelfPermission(Ljava/lang/String;)I
+HSPLandroid/app/ContextImpl;->canLoadUnsafeResources()Z+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
+HSPLandroid/app/ContextImpl;->checkCallingOrSelfPermission(Ljava/lang/String;)I+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
 HSPLandroid/app/ContextImpl;->checkCallingPermission(Ljava/lang/String;)I
 HSPLandroid/app/ContextImpl;->checkMode(I)V
 HSPLandroid/app/ContextImpl;->checkPermission(Ljava/lang/String;II)I
@@ -1441,7 +1449,7 @@
 HSPLandroid/app/ContextImpl;->createWindowContext(Landroid/view/Display;ILandroid/os/Bundle;)Landroid/content/Context;
 HSPLandroid/app/ContextImpl;->createWindowContext(Landroid/view/Display;ILandroid/os/Bundle;)Landroid/window/WindowContext;
 HSPLandroid/app/ContextImpl;->createWindowContextBase(Landroid/os/IBinder;I)Landroid/app/ContextImpl;+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;]Landroid/app/ResourcesManager;Landroid/app/ResourcesManager;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
-HSPLandroid/app/ContextImpl;->createWindowContextInternal(Landroid/view/Display;ILandroid/os/Bundle;)Landroid/window/WindowContext;+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;]Landroid/window/WindowContext;Landroid/window/WindowContext;]Landroid/window/WindowTokenClient;Landroid/window/WindowTokenClient;]Landroid/view/Display;Landroid/view/Display;
+HSPLandroid/app/ContextImpl;->createWindowContextInternal(Landroid/view/Display;ILandroid/os/Bundle;)Landroid/window/WindowContext;+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;]Landroid/window/WindowContext;Landroid/window/WindowContext;]Landroid/view/Display;Landroid/view/Display;]Landroid/window/WindowTokenClient;Landroid/window/WindowTokenClient;
 HSPLandroid/app/ContextImpl;->createWindowContextResources(Landroid/app/ContextImpl;)Landroid/content/res/Resources;+]Landroid/app/LoadedApk;Landroid/app/LoadedApk;]Landroid/app/ResourcesManager;Landroid/app/ResourcesManager;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLandroid/app/ContextImpl;->databaseList()[Ljava/lang/String;
 HSPLandroid/app/ContextImpl;->deleteDatabase(Ljava/lang/String;)Z
@@ -1451,19 +1459,19 @@
 HSPLandroid/app/ContextImpl;->enforceCallingOrSelfPermission(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/app/ContextImpl;->enforceCallingPermission(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/app/ContextImpl;->enforcePermission(Ljava/lang/String;IILjava/lang/String;)V
-HSPLandroid/app/ContextImpl;->ensureExternalDirsExistOrFilter([Ljava/io/File;Z)[Ljava/io/File;
+HSPLandroid/app/ContextImpl;->ensureExternalDirsExistOrFilter([Ljava/io/File;Z)[Ljava/io/File;+]Ljava/io/File;Ljava/io/File;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
 HSPLandroid/app/ContextImpl;->ensurePrivateCacheDirExists(Ljava/io/File;Ljava/lang/String;)Ljava/io/File;
 HSPLandroid/app/ContextImpl;->ensurePrivateDirExists(Ljava/io/File;)Ljava/io/File;
-HSPLandroid/app/ContextImpl;->ensurePrivateDirExists(Ljava/io/File;IILjava/lang/String;)Ljava/io/File;
+HSPLandroid/app/ContextImpl;->ensurePrivateDirExists(Ljava/io/File;IILjava/lang/String;)Ljava/io/File;+]Ljava/io/File;Ljava/io/File;
 HSPLandroid/app/ContextImpl;->fileList()[Ljava/lang/String;
 HSPLandroid/app/ContextImpl;->finalize()V+]Landroid/window/WindowTokenClient;Landroid/window/WindowTokenClient;
 HSPLandroid/app/ContextImpl;->getActivityToken()Landroid/os/IBinder;
-HSPLandroid/app/ContextImpl;->getApplicationContext()Landroid/content/Context;
+HSPLandroid/app/ContextImpl;->getApplicationContext()Landroid/content/Context;+]Landroid/app/LoadedApk;Landroid/app/LoadedApk;
 HSPLandroid/app/ContextImpl;->getApplicationInfo()Landroid/content/pm/ApplicationInfo;+]Landroid/app/LoadedApk;Landroid/app/LoadedApk;
 HSPLandroid/app/ContextImpl;->getAssets()Landroid/content/res/AssetManager;
 HSPLandroid/app/ContextImpl;->getAssociatedDisplayId()I+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
 HSPLandroid/app/ContextImpl;->getAttributionSource()Landroid/content/AttributionSource;
-HSPLandroid/app/ContextImpl;->getAttributionTag()Ljava/lang/String;
+HSPLandroid/app/ContextImpl;->getAttributionTag()Ljava/lang/String;+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;
 HSPLandroid/app/ContextImpl;->getAutofillClient()Landroid/view/autofill/AutofillManager$AutofillClient;
 HSPLandroid/app/ContextImpl;->getAutofillOptions()Landroid/content/AutofillOptions;
 HSPLandroid/app/ContextImpl;->getBasePackageName()Ljava/lang/String;
@@ -1473,21 +1481,21 @@
 HSPLandroid/app/ContextImpl;->getCodeCacheDirBeforeBind(Ljava/io/File;)Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getContentCaptureOptions()Landroid/content/ContentCaptureOptions;
 HSPLandroid/app/ContextImpl;->getContentResolver()Landroid/content/ContentResolver;
-HSPLandroid/app/ContextImpl;->getDataDir()Ljava/io/File;
+HSPLandroid/app/ContextImpl;->getDataDir()Ljava/io/File;+]Landroid/app/LoadedApk;Landroid/app/LoadedApk;]Ljava/io/File;Ljava/io/File;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
 HSPLandroid/app/ContextImpl;->getDatabasePath(Ljava/lang/String;)Ljava/io/File;+]Ljava/lang/String;Ljava/lang/String;]Ljava/io/File;Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getDatabasesDir()Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getDir(Ljava/lang/String;I)Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getDisplay()Landroid/view/Display;
 HSPLandroid/app/ContextImpl;->getDisplayAdjustments(I)Landroid/view/DisplayAdjustments;
-HSPLandroid/app/ContextImpl;->getDisplayId()I
+HSPLandroid/app/ContextImpl;->getDisplayId()I+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;]Landroid/view/Display;Landroid/view/Display;
 HSPLandroid/app/ContextImpl;->getDisplayNoVerify()Landroid/view/Display;
 HSPLandroid/app/ContextImpl;->getExternalCacheDir()Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getExternalCacheDirs()[Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getExternalFilesDir(Ljava/lang/String;)Ljava/io/File;
-HSPLandroid/app/ContextImpl;->getExternalFilesDirs(Ljava/lang/String;)[Ljava/io/File;
+HSPLandroid/app/ContextImpl;->getExternalFilesDirs(Ljava/lang/String;)[Ljava/io/File;+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
 HSPLandroid/app/ContextImpl;->getExternalMediaDirs()[Ljava/io/File;
 HSPLandroid/app/ContextImpl;->getFileStreamPath(Ljava/lang/String;)Ljava/io/File;
-HSPLandroid/app/ContextImpl;->getFilesDir()Ljava/io/File;
+HSPLandroid/app/ContextImpl;->getFilesDir()Ljava/io/File;+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
 HSPLandroid/app/ContextImpl;->getImpl(Landroid/content/Context;)Landroid/app/ContextImpl;
 HSPLandroid/app/ContextImpl;->getMainExecutor()Ljava/util/concurrent/Executor;
 HSPLandroid/app/ContextImpl;->getMainLooper()Landroid/os/Looper;
@@ -1535,7 +1543,7 @@
 HSPLandroid/app/ContextImpl;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;I)Landroid/content/Intent;+]Landroid/app/ContextImpl;Landroid/app/ContextImpl;
 HSPLandroid/app/ContextImpl;->registerReceiverAsUser(Landroid/content/BroadcastReceiver;Landroid/os/UserHandle;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;)Landroid/content/Intent;
 HSPLandroid/app/ContextImpl;->registerReceiverForAllUsers(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;)Landroid/content/Intent;
-HSPLandroid/app/ContextImpl;->registerReceiverInternal(Landroid/content/BroadcastReceiver;ILandroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;Landroid/content/Context;I)Landroid/content/Intent;
+HSPLandroid/app/ContextImpl;->registerReceiverInternal(Landroid/content/BroadcastReceiver;ILandroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;Landroid/content/Context;I)Landroid/content/Intent;+]Landroid/app/LoadedApk;Landroid/app/LoadedApk;]Landroid/app/Instrumentation;Landroid/app/Instrumentation;]Landroid/app/ActivityThread;Landroid/app/ActivityThread;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/app/IActivityManager;Landroid/app/IActivityManager$Stub$Proxy;
 HSPLandroid/app/ContextImpl;->resolveUserId(Landroid/net/Uri;)I
 HSPLandroid/app/ContextImpl;->revokeUriPermission(Landroid/net/Uri;I)V
 HSPLandroid/app/ContextImpl;->scheduleFinalCleanup(Ljava/lang/String;Ljava/lang/String;)V
@@ -1563,7 +1571,7 @@
 HSPLandroid/app/ContextImpl;->startForegroundService(Landroid/content/Intent;)Landroid/content/ComponentName;
 HSPLandroid/app/ContextImpl;->startService(Landroid/content/Intent;)Landroid/content/ComponentName;
 HSPLandroid/app/ContextImpl;->startServiceAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)Landroid/content/ComponentName;
-HSPLandroid/app/ContextImpl;->startServiceCommon(Landroid/content/Intent;ZLandroid/os/UserHandle;)Landroid/content/ComponentName;
+HSPLandroid/app/ContextImpl;->startServiceCommon(Landroid/content/Intent;ZLandroid/os/UserHandle;)Landroid/content/ComponentName;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/app/ActivityThread;Landroid/app/ActivityThread;]Landroid/app/ContextImpl;Landroid/app/ContextImpl;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/app/IActivityManager;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLandroid/app/ContextImpl;->stopService(Landroid/content/Intent;)Z
 HSPLandroid/app/ContextImpl;->stopServiceCommon(Landroid/content/Intent;Landroid/os/UserHandle;)Z
 HSPLandroid/app/ContextImpl;->unbindService(Landroid/content/ServiceConnection;)V
@@ -1840,11 +1848,11 @@
 HSPLandroid/app/IActivityManager$Stub$Proxy;->getCurrentUserId()I
 HSPLandroid/app/IActivityManager$Stub$Proxy;->getHistoricalProcessExitReasons(Ljava/lang/String;III)Landroid/content/pm/ParceledListSlice;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->getInfoForIntentSender(Landroid/content/IIntentSender;)Landroid/app/ActivityManager$PendingIntentInfo;
-HSPLandroid/app/IActivityManager$Stub$Proxy;->getIntentSenderWithFeature(ILjava/lang/String;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;I[Landroid/content/Intent;[Ljava/lang/String;ILandroid/os/Bundle;I)Landroid/content/IIntentSender;
+HSPLandroid/app/IActivityManager$Stub$Proxy;->getIntentSenderWithFeature(ILjava/lang/String;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;I[Landroid/content/Intent;[Ljava/lang/String;ILandroid/os/Bundle;I)Landroid/content/IIntentSender;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->getMemoryInfo(Landroid/app/ActivityManager$MemoryInfo;)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->getMyMemoryState(Landroid/app/ActivityManager$RunningAppProcessInfo;)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->getProcessMemoryInfo([I)[Landroid/os/Debug$MemoryInfo;
-HSPLandroid/app/IActivityManager$Stub$Proxy;->getProviderMimeTypeAsync(Landroid/net/Uri;ILandroid/os/RemoteCallback;)V
+HSPLandroid/app/IActivityManager$Stub$Proxy;->getProviderMimeTypeAsync(Landroid/net/Uri;ILandroid/os/RemoteCallback;)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->getRunningAppProcesses()Ljava/util/List;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->getServices(II)Ljava/util/List;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->grantUriPermission(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/net/Uri;II)V
@@ -1854,16 +1862,16 @@
 HSPLandroid/app/IActivityManager$Stub$Proxy;->isUserAMonkey()Z
 HSPLandroid/app/IActivityManager$Stub$Proxy;->publishContentProviders(Landroid/app/IApplicationThread;Ljava/util/List;)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->publishService(Landroid/os/IBinder;Landroid/content/Intent;Landroid/os/IBinder;)V
-HSPLandroid/app/IActivityManager$Stub$Proxy;->refContentProvider(Landroid/os/IBinder;II)Z
-HSPLandroid/app/IActivityManager$Stub$Proxy;->registerReceiverWithFeature(Landroid/app/IApplicationThread;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/content/IIntentReceiver;Landroid/content/IntentFilter;Ljava/lang/String;II)Landroid/content/Intent;
+HSPLandroid/app/IActivityManager$Stub$Proxy;->refContentProvider(Landroid/os/IBinder;II)Z+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/app/IActivityManager$Stub$Proxy;->registerReceiverWithFeature(Landroid/app/IApplicationThread;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/content/IIntentReceiver;Landroid/content/IntentFilter;Ljava/lang/String;II)Landroid/content/Intent;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->registerUidObserver(Landroid/app/IUidObserver;IILjava/lang/String;)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->removeContentProvider(Landroid/os/IBinder;Z)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->revokeUriPermission(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/net/Uri;II)V
-HSPLandroid/app/IActivityManager$Stub$Proxy;->sendIntentSender(Landroid/content/IIntentSender;Landroid/os/IBinder;ILandroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;Ljava/lang/String;Landroid/os/Bundle;)I
+HSPLandroid/app/IActivityManager$Stub$Proxy;->sendIntentSender(Landroid/content/IIntentSender;Landroid/os/IBinder;ILandroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;Ljava/lang/String;Landroid/os/Bundle;)I+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->serviceDoneExecuting(Landroid/os/IBinder;III)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->setRenderThread(I)V
 HSPLandroid/app/IActivityManager$Stub$Proxy;->setServiceForeground(Landroid/content/ComponentName;Landroid/os/IBinder;ILandroid/app/Notification;II)V
-HSPLandroid/app/IActivityManager$Stub$Proxy;->startService(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;I)Landroid/content/ComponentName;
+HSPLandroid/app/IActivityManager$Stub$Proxy;->startService(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;I)Landroid/content/ComponentName;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/IActivityManager$Stub$Proxy;->stopService(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;I)I
 HSPLandroid/app/IActivityManager$Stub$Proxy;->stopServiceToken(Landroid/content/ComponentName;Landroid/os/IBinder;I)Z
 HSPLandroid/app/IActivityManager$Stub$Proxy;->unbindFinished(Landroid/os/IBinder;Landroid/content/Intent;Z)V
@@ -1899,7 +1907,7 @@
 HSPLandroid/app/IApplicationThread$Stub;-><init>()V
 HSPLandroid/app/IApplicationThread$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/app/IApplicationThread$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IApplicationThread;
-HSPLandroid/app/IApplicationThread$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/app/IApplicationThread$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z+]Landroid/app/IApplicationThread$Stub;Landroid/app/ActivityThread$ApplicationThread;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/IBackupAgent$Stub;-><init>()V
 HSPLandroid/app/IBackupAgent$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/app/IBackupAgent$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
@@ -1911,16 +1919,16 @@
 HSPLandroid/app/INotificationManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/app/INotificationManager$Stub$Proxy;->areNotificationsEnabled(Ljava/lang/String;)Z
 HSPLandroid/app/INotificationManager$Stub$Proxy;->cancelAllNotifications(Ljava/lang/String;I)V
-HSPLandroid/app/INotificationManager$Stub$Proxy;->cancelNotificationWithTag(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V
+HSPLandroid/app/INotificationManager$Stub$Proxy;->cancelNotificationWithTag(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/INotificationManager$Stub$Proxy;->createNotificationChannelGroups(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V
 HSPLandroid/app/INotificationManager$Stub$Proxy;->createNotificationChannels(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V
 HSPLandroid/app/INotificationManager$Stub$Proxy;->deleteNotificationChannel(Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/app/INotificationManager$Stub$Proxy;->enqueueNotificationWithTag(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/app/Notification;I)V
+HSPLandroid/app/INotificationManager$Stub$Proxy;->enqueueNotificationWithTag(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/app/Notification;I)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/INotificationManager$Stub$Proxy;->finishToken(Ljava/lang/String;Landroid/os/IBinder;)V
 HSPLandroid/app/INotificationManager$Stub$Proxy;->getActiveNotificationsFromListener(Landroid/service/notification/INotificationListener;[Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
 HSPLandroid/app/INotificationManager$Stub$Proxy;->getAppActiveNotifications(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
-HSPLandroid/app/INotificationManager$Stub$Proxy;->getNotificationChannel(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Landroid/app/NotificationChannel;
-HSPLandroid/app/INotificationManager$Stub$Proxy;->getNotificationChannelGroup(Ljava/lang/String;Ljava/lang/String;)Landroid/app/NotificationChannelGroup;
+HSPLandroid/app/INotificationManager$Stub$Proxy;->getNotificationChannel(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Landroid/app/NotificationChannel;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/app/INotificationManager$Stub$Proxy;->getNotificationChannelGroup(Ljava/lang/String;Ljava/lang/String;)Landroid/app/NotificationChannelGroup;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/INotificationManager$Stub$Proxy;->getNotificationChannelGroups(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
 HSPLandroid/app/INotificationManager$Stub$Proxy;->getNotificationChannels(Ljava/lang/String;Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
 HSPLandroid/app/INotificationManager$Stub$Proxy;->getNotificationPolicy(Ljava/lang/String;)Landroid/app/NotificationManager$Policy;
@@ -2004,7 +2012,7 @@
 HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0;->run()V
 HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args;-><init>(Landroid/app/LoadedApk$ReceiverDispatcher;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V
 HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args;->getRunnable()Ljava/lang/Runnable;
-HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args;->lambda$getRunnable$0$android-app-LoadedApk$ReceiverDispatcher$Args()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/Context;missing_types]Ljava/lang/Class;Ljava/lang/Class;]Landroid/app/LoadedApk$ReceiverDispatcher$Args;Landroid/app/LoadedApk$ReceiverDispatcher$Args;]Landroid/content/Intent;Landroid/content/Intent;]Ljava/lang/Object;megamorphic_types]Landroid/content/BroadcastReceiver;megamorphic_types
+HSPLandroid/app/LoadedApk$ReceiverDispatcher$Args;->lambda$getRunnable$0$android-app-LoadedApk$ReceiverDispatcher$Args()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Object;megamorphic_types]Landroid/content/Context;missing_types]Landroid/content/BroadcastReceiver;megamorphic_types]Ljava/lang/Class;Ljava/lang/Class;]Landroid/app/LoadedApk$ReceiverDispatcher$Args;Landroid/app/LoadedApk$ReceiverDispatcher$Args;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLandroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;-><init>(Landroid/app/LoadedApk$ReceiverDispatcher;Z)V
 HSPLandroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V
 HSPLandroid/app/LoadedApk$ReceiverDispatcher;-><init>(Landroid/content/BroadcastReceiver;Landroid/content/Context;Landroid/os/Handler;Landroid/app/Instrumentation;Z)V
@@ -2060,7 +2068,7 @@
 HSPLandroid/app/LoadedApk;->getApplicationInfo()Landroid/content/pm/ApplicationInfo;
 HSPLandroid/app/LoadedApk;->getAssets()Landroid/content/res/AssetManager;
 HSPLandroid/app/LoadedApk;->getClassLoader()Ljava/lang/ClassLoader;
-HSPLandroid/app/LoadedApk;->getCompatibilityInfo()Landroid/content/res/CompatibilityInfo;
+HSPLandroid/app/LoadedApk;->getCompatibilityInfo()Landroid/content/res/CompatibilityInfo;+]Landroid/view/DisplayAdjustments;Landroid/view/DisplayAdjustments;
 HSPLandroid/app/LoadedApk;->getCredentialProtectedDataDirFile()Ljava/io/File;
 HSPLandroid/app/LoadedApk;->getDataDirFile()Ljava/io/File;
 HSPLandroid/app/LoadedApk;->getDeviceProtectedDataDirFile()Ljava/io/File;
@@ -2090,7 +2098,7 @@
 HSPLandroid/app/LoadedApk;->setVmPolicy(Landroid/os/StrictMode$VmPolicy;)V
 HSPLandroid/app/LoadedApk;->updateApplicationInfo(Landroid/content/pm/ApplicationInfo;Ljava/util/List;)V
 HSPLandroid/app/Notification$$ExternalSyntheticLambda0;-><init>(Landroid/app/Notification;Landroid/os/Parcel;)V
-HSPLandroid/app/Notification$$ExternalSyntheticLambda0;->onMarshaled(Landroid/app/PendingIntent;Landroid/os/Parcel;I)V
+HSPLandroid/app/Notification$$ExternalSyntheticLambda0;->onMarshaled(Landroid/app/PendingIntent;Landroid/os/Parcel;I)V+]Landroid/app/Notification;Landroid/app/Notification;
 HSPLandroid/app/Notification$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/Notification;
 HSPLandroid/app/Notification$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/Notification$Action$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/Notification$Action;
@@ -2111,7 +2119,7 @@
 HSPLandroid/app/Notification$Action;->getIcon()Landroid/graphics/drawable/Icon;
 HSPLandroid/app/Notification$Action;->getRemoteInputs()[Landroid/app/RemoteInput;
 HSPLandroid/app/Notification$Action;->isContextual()Z
-HSPLandroid/app/Notification$Action;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/Notification$Action;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/app/PendingIntent;Landroid/app/PendingIntent;]Landroid/app/Notification$Action;Landroid/app/Notification$Action;]Landroid/graphics/drawable/Icon;Landroid/graphics/drawable/Icon;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/Notification$BigPictureStyle;-><init>()V
 HSPLandroid/app/Notification$BigPictureStyle;->addExtras(Landroid/os/Bundle;)V
 HSPLandroid/app/Notification$BigPictureStyle;->purgeResources()V
@@ -2127,65 +2135,65 @@
 HSPLandroid/app/Notification$BubbleMetadata$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/Notification$BubbleMetadata;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/app/Notification$Builder;-><init>(Landroid/content/Context;)V
-HSPLandroid/app/Notification$Builder;-><init>(Landroid/content/Context;Landroid/app/Notification;)V
+HSPLandroid/app/Notification$Builder;-><init>(Landroid/content/Context;Landroid/app/Notification;)V+]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLandroid/app/Notification$Builder;-><init>(Landroid/content/Context;Ljava/lang/String;)V
 HSPLandroid/app/Notification$Builder;->addAction(Landroid/app/Notification$Action;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->addExtras(Landroid/os/Bundle;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->addPerson(Landroid/app/Person;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->addPerson(Ljava/lang/String;)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->build()Landroid/app/Notification;
-HSPLandroid/app/Notification$Builder;->buildUnstyled()Landroid/app/Notification;
-HSPLandroid/app/Notification$Builder;->getAllExtras()Landroid/os/Bundle;
+HSPLandroid/app/Notification$Builder;->build()Landroid/app/Notification;+]Landroid/app/Notification;Landroid/app/Notification;]Landroid/app/Notification$Builder;Landroid/app/Notification$Builder;]Landroid/app/Notification$Style;Landroid/app/Notification$BigTextStyle;
+HSPLandroid/app/Notification$Builder;->buildUnstyled()Landroid/app/Notification;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/app/Notification$Builder;->getAllExtras()Landroid/os/Bundle;+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/app/Notification$Builder;->getStyle()Landroid/app/Notification$Style;
-HSPLandroid/app/Notification$Builder;->maybeCloneStrippedForDelivery(Landroid/app/Notification;)Landroid/app/Notification;
+HSPLandroid/app/Notification$Builder;->maybeCloneStrippedForDelivery(Landroid/app/Notification;)Landroid/app/Notification;+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/app/Notification$Builder;->recoverBuilder(Landroid/content/Context;Landroid/app/Notification;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->sanitizeColor()V
 HSPLandroid/app/Notification$Builder;->setAllowSystemGeneratedContextualActions(Z)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setAutoCancel(Z)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setAutoCancel(Z)Landroid/app/Notification$Builder;+]Landroid/app/Notification$Builder;Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setBadgeIconType(I)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setBubbleMetadata(Landroid/app/Notification$BubbleMetadata;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setCategory(Ljava/lang/String;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setColor(I)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setContent(Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setContentInfo(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setContent(Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;+]Landroid/app/Notification$Builder;Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setContentInfo(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/app/Notification$Builder;->setContentIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setContentText(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setContentTitle(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setContentText(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;+]Landroid/os/Bundle;Landroid/os/Bundle;
+HSPLandroid/app/Notification$Builder;->setContentTitle(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/app/Notification$Builder;->setCustomContentView(Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setDefaults(I)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setDeleteIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setExtras(Landroid/os/Bundle;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setFlag(IZ)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setFullScreenIntent(Landroid/app/PendingIntent;Z)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setFullScreenIntent(Landroid/app/PendingIntent;Z)Landroid/app/Notification$Builder;+]Landroid/app/Notification$Builder;Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setGroup(Ljava/lang/String;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setGroupAlertBehavior(I)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setGroupSummary(Z)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setLargeIcon(Landroid/graphics/Bitmap;)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setLargeIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setLargeIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$Builder;+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/app/Notification$Builder;->setLights(III)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setLocalOnly(Z)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setNumber(I)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setOngoing(Z)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setOnlyAlertOnce(Z)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setOngoing(Z)Landroid/app/Notification$Builder;+]Landroid/app/Notification$Builder;Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setOnlyAlertOnce(Z)Landroid/app/Notification$Builder;+]Landroid/app/Notification$Builder;Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setPriority(I)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setProgress(IIZ)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setProgress(IIZ)Landroid/app/Notification$Builder;+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/app/Notification$Builder;->setPublicVersion(Landroid/app/Notification;)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setRemoteInputHistory([Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setRemoteInputHistory([Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/app/Notification$Builder;->setSettingsText(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setShortcutId(Ljava/lang/String;)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setShowWhen(Z)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setSmallIcon(I)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setSmallIcon(II)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setSmallIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setShowWhen(Z)Landroid/app/Notification$Builder;+]Landroid/os/Bundle;Landroid/os/Bundle;
+HSPLandroid/app/Notification$Builder;->setSmallIcon(I)Landroid/app/Notification$Builder;+]Landroid/app/Notification$Builder;Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setSmallIcon(II)Landroid/app/Notification$Builder;+]Landroid/app/Notification$Builder;Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setSmallIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$Builder;+]Landroid/app/Notification;Landroid/app/Notification;]Landroid/graphics/drawable/Icon;Landroid/graphics/drawable/Icon;
 HSPLandroid/app/Notification$Builder;->setSortKey(Ljava/lang/String;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setSound(Landroid/net/Uri;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setSound(Landroid/net/Uri;Landroid/media/AudioAttributes;)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setStyle(Landroid/app/Notification$Style;)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setSubText(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setSubText(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/app/Notification$Builder;->setTicker(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setTicker(Ljava/lang/CharSequence;Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setTicker(Ljava/lang/CharSequence;Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;+]Landroid/app/Notification$Builder;Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setTimeoutAfter(J)Landroid/app/Notification$Builder;
-HSPLandroid/app/Notification$Builder;->setUsesChronometer(Z)Landroid/app/Notification$Builder;
+HSPLandroid/app/Notification$Builder;->setUsesChronometer(Z)Landroid/app/Notification$Builder;+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/app/Notification$Builder;->setVibrate([J)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setVisibility(I)Landroid/app/Notification$Builder;
 HSPLandroid/app/Notification$Builder;->setWhen(J)Landroid/app/Notification$Builder;
@@ -2231,12 +2239,12 @@
 HSPLandroid/app/Notification$Style;->validate(Landroid/content/Context;)V
 HSPLandroid/app/Notification;-><init>()V
 HSPLandroid/app/Notification;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/app/Notification;->addFieldsFromContext(Landroid/content/Context;Landroid/app/Notification;)V
-HSPLandroid/app/Notification;->addFieldsFromContext(Landroid/content/pm/ApplicationInfo;Landroid/app/Notification;)V
+HSPLandroid/app/Notification;->addFieldsFromContext(Landroid/content/Context;Landroid/app/Notification;)V+]Landroid/content/Context;missing_types
+HSPLandroid/app/Notification;->addFieldsFromContext(Landroid/content/pm/ApplicationInfo;Landroid/app/Notification;)V+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/app/Notification;->areStyledNotificationsVisiblyDifferent(Landroid/app/Notification$Builder;Landroid/app/Notification$Builder;)Z
 HSPLandroid/app/Notification;->cloneInto(Landroid/app/Notification;Z)V
 HSPLandroid/app/Notification;->findRemoteInputActionPair(Z)Landroid/util/Pair;
-HSPLandroid/app/Notification;->fixDuplicateExtra(Landroid/os/Parcelable;Ljava/lang/String;)V
+HSPLandroid/app/Notification;->fixDuplicateExtra(Landroid/os/Parcelable;Ljava/lang/String;)V+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/app/Notification;->fixDuplicateExtras()V
 HSPLandroid/app/Notification;->getBubbleMetadata()Landroid/app/Notification$BubbleMetadata;
 HSPLandroid/app/Notification;->getChannelId()Ljava/lang/String;
@@ -2256,19 +2264,19 @@
 HSPLandroid/app/Notification;->isGroupSummary()Z
 HSPLandroid/app/Notification;->isMediaNotification()Z
 HSPLandroid/app/Notification;->lambda$writeToParcel$0$android-app-Notification(Landroid/os/Parcel;Landroid/app/PendingIntent;Landroid/os/Parcel;I)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;
-HSPLandroid/app/Notification;->readFromParcelImpl(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/graphics/drawable/Icon$1;,Landroid/app/PendingIntent$1;,Landroid/media/AudioAttributes$1;,Landroid/text/TextUtils$1;,Landroid/app/Notification$1;,Landroid/widget/RemoteViews$2;]Landroid/graphics/drawable/Icon;Landroid/graphics/drawable/Icon;]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/app/Notification;->reduceImageSizes(Landroid/content/Context;)V
+HSPLandroid/app/Notification;->readFromParcelImpl(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/app/Notification$1;,Landroid/graphics/drawable/Icon$1;,Landroid/app/PendingIntent$1;,Landroid/content/LocusId$1;,Landroid/media/AudioAttributes$1;,Landroid/text/TextUtils$1;,Landroid/widget/RemoteViews$2;,Landroid/app/Notification$BubbleMetadata$1;]Landroid/graphics/drawable/Icon;Landroid/graphics/drawable/Icon;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/app/Notification;->reduceImageSizes(Landroid/content/Context;)V+]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/graphics/drawable/Icon;Landroid/graphics/drawable/Icon;
 HSPLandroid/app/Notification;->reduceImageSizesForRemoteView(Landroid/widget/RemoteViews;Landroid/content/Context;Z)V
 HSPLandroid/app/Notification;->removeTextSizeSpans(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
-HSPLandroid/app/Notification;->safeCharSequence(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
+HSPLandroid/app/Notification;->safeCharSequence(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;+]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/app/Notification;->setSmallIcon(Landroid/graphics/drawable/Icon;)V
 HSPLandroid/app/Notification;->suppressAlertingDueToGrouping()Z
-HSPLandroid/app/Notification;->toString()Ljava/lang/String;+]Landroid/widget/RemoteViews;Landroid/widget/RemoteViews;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/app/Notification;Landroid/app/Notification;
+HSPLandroid/app/Notification;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/app/Notification;Landroid/app/Notification;]Landroid/widget/RemoteViews;Landroid/widget/RemoteViews;
 HSPLandroid/app/Notification;->visibilityToString(I)Ljava/lang/String;
-HSPLandroid/app/Notification;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/app/Notification;->writeToParcelImpl(Landroid/os/Parcel;I)V
+HSPLandroid/app/Notification;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/app/Notification;->writeToParcelImpl(Landroid/os/Parcel;I)V+]Landroid/app/PendingIntent;Landroid/app/PendingIntent;]Landroid/media/AudioAttributes;Landroid/media/AudioAttributes;]Landroid/graphics/drawable/Icon;Landroid/graphics/drawable/Icon;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/NotificationChannel$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/NotificationChannel;
-HSPLandroid/app/NotificationChannel$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/app/NotificationChannel$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/app/NotificationChannel$1;Landroid/app/NotificationChannel$1;
 HSPLandroid/app/NotificationChannel;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/net/Uri$1;,Landroid/media/AudioAttributes$1;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/NotificationChannel;-><init>(Ljava/lang/String;Ljava/lang/CharSequence;I)V
 HSPLandroid/app/NotificationChannel;->canBubble()Z
@@ -2307,11 +2315,11 @@
 HSPLandroid/app/NotificationChannel;->setVibrationPattern([J)V
 HSPLandroid/app/NotificationChannel;->shouldShowLights()Z
 HSPLandroid/app/NotificationChannel;->shouldVibrate()Z
-HSPLandroid/app/NotificationChannel;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/NotificationChannel;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/media/AudioAttributes;Landroid/media/AudioAttributes;]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/net/Uri;Landroid/net/Uri$StringUri;
 HSPLandroid/app/NotificationChannel;->writeXml(Lorg/xmlpull/v1/XmlSerializer;)V
 HSPLandroid/app/NotificationChannelGroup$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/NotificationChannelGroup;
 HSPLandroid/app/NotificationChannelGroup$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/app/NotificationChannelGroup;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/NotificationChannelGroup;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/text/TextUtils$1;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/NotificationChannelGroup;-><init>(Ljava/lang/String;Ljava/lang/CharSequence;)V
 HSPLandroid/app/NotificationChannelGroup;->equals(Ljava/lang/Object;)Z
 HSPLandroid/app/NotificationChannelGroup;->getChannels()Ljava/util/List;
@@ -2339,21 +2347,21 @@
 HSPLandroid/app/NotificationManager;->createNotificationChannels(Ljava/util/List;)V
 HSPLandroid/app/NotificationManager;->deleteNotificationChannel(Ljava/lang/String;)V
 HSPLandroid/app/NotificationManager;->fixLegacySmallIcon(Landroid/app/Notification;Ljava/lang/String;)V
-HSPLandroid/app/NotificationManager;->fixNotification(Landroid/app/Notification;)Landroid/app/Notification;
+HSPLandroid/app/NotificationManager;->fixNotification(Landroid/app/Notification;)Landroid/app/Notification;+]Landroid/app/Notification;Landroid/app/Notification;]Landroid/content/Context;Landroid/view/ContextThemeWrapper;
 HSPLandroid/app/NotificationManager;->getActiveNotifications()[Landroid/service/notification/StatusBarNotification;
 HSPLandroid/app/NotificationManager;->getAutomaticZenRules()Ljava/util/Map;
 HSPLandroid/app/NotificationManager;->getConsolidatedNotificationPolicy()Landroid/app/NotificationManager$Policy;
 HSPLandroid/app/NotificationManager;->getCurrentInterruptionFilter()I
-HSPLandroid/app/NotificationManager;->getNotificationChannel(Ljava/lang/String;)Landroid/app/NotificationChannel;
-HSPLandroid/app/NotificationManager;->getNotificationChannelGroup(Ljava/lang/String;)Landroid/app/NotificationChannelGroup;
+HSPLandroid/app/NotificationManager;->getNotificationChannel(Ljava/lang/String;)Landroid/app/NotificationChannel;+]Landroid/content/Context;Landroid/view/ContextThemeWrapper;]Landroid/app/INotificationManager;Landroid/app/INotificationManager$Stub$Proxy;
+HSPLandroid/app/NotificationManager;->getNotificationChannelGroup(Ljava/lang/String;)Landroid/app/NotificationChannelGroup;+]Landroid/content/Context;Landroid/view/ContextThemeWrapper;]Landroid/app/INotificationManager;Landroid/app/INotificationManager$Stub$Proxy;
 HSPLandroid/app/NotificationManager;->getNotificationChannelGroups()Ljava/util/List;
 HSPLandroid/app/NotificationManager;->getNotificationChannels()Ljava/util/List;
 HSPLandroid/app/NotificationManager;->getNotificationPolicy()Landroid/app/NotificationManager$Policy;
 HSPLandroid/app/NotificationManager;->getService()Landroid/app/INotificationManager;
 HSPLandroid/app/NotificationManager;->isNotificationPolicyAccessGranted()Z
 HSPLandroid/app/NotificationManager;->notify(ILandroid/app/Notification;)V
-HSPLandroid/app/NotificationManager;->notify(Ljava/lang/String;ILandroid/app/Notification;)V
-HSPLandroid/app/NotificationManager;->notifyAsUser(Ljava/lang/String;ILandroid/app/Notification;Landroid/os/UserHandle;)V
+HSPLandroid/app/NotificationManager;->notify(Ljava/lang/String;ILandroid/app/Notification;)V+]Landroid/app/NotificationManager;Landroid/app/NotificationManager;]Landroid/content/Context;Landroid/view/ContextThemeWrapper;
+HSPLandroid/app/NotificationManager;->notifyAsUser(Ljava/lang/String;ILandroid/app/Notification;Landroid/os/UserHandle;)V+]Landroid/content/Context;Landroid/view/ContextThemeWrapper;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/app/INotificationManager;Landroid/app/INotificationManager$Stub$Proxy;
 HSPLandroid/app/NotificationManager;->zenModeToInterruptionFilter(I)I
 HSPLandroid/app/PendingIntent$$ExternalSyntheticLambda1;-><init>()V
 HSPLandroid/app/PendingIntent$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/PendingIntent;+]Landroid/os/Parcel;Landroid/os/Parcel;
@@ -2366,32 +2374,32 @@
 HSPLandroid/app/PendingIntent;->buildServicePendingIntent(Landroid/content/Context;ILandroid/content/Intent;II)Landroid/app/PendingIntent;
 HSPLandroid/app/PendingIntent;->cancel()V
 HSPLandroid/app/PendingIntent;->checkFlags(ILjava/lang/String;)V
-HSPLandroid/app/PendingIntent;->equals(Ljava/lang/Object;)Z
+HSPLandroid/app/PendingIntent;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Landroid/os/BinderProxy;]Landroid/content/IIntentSender;Landroid/content/IIntentSender$Stub$Proxy;
 HSPLandroid/app/PendingIntent;->getActivities(Landroid/content/Context;I[Landroid/content/Intent;ILandroid/os/Bundle;)Landroid/app/PendingIntent;
 HSPLandroid/app/PendingIntent;->getActivitiesAsUser(Landroid/content/Context;I[Landroid/content/Intent;ILandroid/os/Bundle;Landroid/os/UserHandle;)Landroid/app/PendingIntent;
 HSPLandroid/app/PendingIntent;->getActivity(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;
 HSPLandroid/app/PendingIntent;->getActivity(Landroid/content/Context;ILandroid/content/Intent;ILandroid/os/Bundle;)Landroid/app/PendingIntent;
-HSPLandroid/app/PendingIntent;->getActivityAsUser(Landroid/content/Context;ILandroid/content/Intent;ILandroid/os/Bundle;Landroid/os/UserHandle;)Landroid/app/PendingIntent;
+HSPLandroid/app/PendingIntent;->getActivityAsUser(Landroid/content/Context;ILandroid/content/Intent;ILandroid/os/Bundle;Landroid/os/UserHandle;)Landroid/app/PendingIntent;+]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/app/IActivityManager;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLandroid/app/PendingIntent;->getBroadcast(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;
-HSPLandroid/app/PendingIntent;->getBroadcastAsUser(Landroid/content/Context;ILandroid/content/Intent;ILandroid/os/UserHandle;)Landroid/app/PendingIntent;
+HSPLandroid/app/PendingIntent;->getBroadcastAsUser(Landroid/content/Context;ILandroid/content/Intent;ILandroid/os/UserHandle;)Landroid/app/PendingIntent;+]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/app/IActivityManager;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLandroid/app/PendingIntent;->getCachedInfo()Landroid/app/ActivityManager$PendingIntentInfo;
 HSPLandroid/app/PendingIntent;->getCreatorPackage()Ljava/lang/String;
 HSPLandroid/app/PendingIntent;->getCreatorUid()I
 HSPLandroid/app/PendingIntent;->getIntent()Landroid/content/Intent;
 HSPLandroid/app/PendingIntent;->getIntentSender()Landroid/content/IntentSender;
 HSPLandroid/app/PendingIntent;->getService(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;
-HSPLandroid/app/PendingIntent;->hashCode()I
+HSPLandroid/app/PendingIntent;->hashCode()I+]Ljava/lang/Object;Landroid/os/BinderProxy;]Landroid/content/IIntentSender;Landroid/content/IIntentSender$Stub$Proxy;
 HSPLandroid/app/PendingIntent;->isActivity()Z
 HSPLandroid/app/PendingIntent;->send()V
 HSPLandroid/app/PendingIntent;->send(Landroid/content/Context;ILandroid/content/Intent;)V
 HSPLandroid/app/PendingIntent;->send(Landroid/content/Context;ILandroid/content/Intent;Landroid/app/PendingIntent$OnFinished;Landroid/os/Handler;Ljava/lang/String;Landroid/os/Bundle;)V
-HSPLandroid/app/PendingIntent;->sendAndReturnResult(Landroid/content/Context;ILandroid/content/Intent;Landroid/app/PendingIntent$OnFinished;Landroid/os/Handler;Ljava/lang/String;Landroid/os/Bundle;)I
-HSPLandroid/app/PendingIntent;->setOnMarshaledListener(Landroid/app/PendingIntent$OnMarshaledListener;)V
-HSPLandroid/app/PendingIntent;->toString()Ljava/lang/String;
+HSPLandroid/app/PendingIntent;->sendAndReturnResult(Landroid/content/Context;ILandroid/content/Intent;Landroid/app/PendingIntent$OnFinished;Landroid/os/Handler;Ljava/lang/String;Landroid/os/Bundle;)I+]Landroid/app/PendingIntent;Landroid/app/PendingIntent;]Landroid/app/IActivityManager;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLandroid/app/PendingIntent;->setOnMarshaledListener(Landroid/app/PendingIntent$OnMarshaledListener;)V+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
+HSPLandroid/app/PendingIntent;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/IIntentSender;Landroid/content/IIntentSender$Stub$Proxy;
 HSPLandroid/app/PendingIntent;->writePendingIntentOrNullToParcel(Landroid/app/PendingIntent;Landroid/os/Parcel;)V
-HSPLandroid/app/PendingIntent;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/PendingIntent;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/app/PendingIntent$OnMarshaledListener;Landroid/app/Notification$$ExternalSyntheticLambda0;]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;]Landroid/content/IIntentSender;Landroid/content/IIntentSender$Stub$Proxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/Person$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/Person;
-HSPLandroid/app/Person$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/app/Person$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/app/Person$1;Landroid/app/Person$1;
 HSPLandroid/app/Person$Builder;-><init>()V
 HSPLandroid/app/Person$Builder;-><init>(Landroid/app/Person;)V
 HSPLandroid/app/Person$Builder;->build()Landroid/app/Person;
@@ -2402,12 +2410,12 @@
 HSPLandroid/app/Person$Builder;->setName(Ljava/lang/CharSequence;)Landroid/app/Person$Builder;
 HSPLandroid/app/Person$Builder;->setUri(Ljava/lang/String;)Landroid/app/Person$Builder;
 HSPLandroid/app/Person;-><init>(Landroid/app/Person$Builder;)V
-HSPLandroid/app/Person;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/Person;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/os/Parcelable$Creator;Landroid/graphics/drawable/Icon$1;
 HSPLandroid/app/Person;->getIcon()Landroid/graphics/drawable/Icon;
 HSPLandroid/app/Person;->getKey()Ljava/lang/String;
 HSPLandroid/app/Person;->getName()Ljava/lang/CharSequence;
 HSPLandroid/app/Person;->getUri()Ljava/lang/String;
-HSPLandroid/app/Person;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/app/Person;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/graphics/drawable/Icon;Landroid/graphics/drawable/Icon;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/PictureInPictureParams$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/PictureInPictureParams;
 HSPLandroid/app/PictureInPictureParams$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/PictureInPictureParams;-><init>(Landroid/os/Parcel;)V
@@ -2424,22 +2432,22 @@
 HSPLandroid/app/PropertyInvalidatedCache;-><init>(ILjava/lang/String;)V
 HSPLandroid/app/PropertyInvalidatedCache;-><init>(ILjava/lang/String;Ljava/lang/String;)V
 HSPLandroid/app/PropertyInvalidatedCache;-><init>(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PropertyInvalidatedCache$QueryHandler;)V
-HSPLandroid/app/PropertyInvalidatedCache;->bypass(Ljava/lang/Object;)Z
+HSPLandroid/app/PropertyInvalidatedCache;->bypass(Ljava/lang/Object;)Z+]Landroid/app/PropertyInvalidatedCache$QueryHandler;Landroid/bluetooth/BluetoothAdapter$2;,Landroid/bluetooth/BluetoothAdapter$3;,Landroid/app/PropertyInvalidatedCache$DefaultComputer;,Landroid/os/IpcDataCache$SystemServerCallHandler;
 HSPLandroid/app/PropertyInvalidatedCache;->cacheName()Ljava/lang/String;
 HSPLandroid/app/PropertyInvalidatedCache;->clear()V
 HSPLandroid/app/PropertyInvalidatedCache;->createMap()Ljava/util/LinkedHashMap;
-HSPLandroid/app/PropertyInvalidatedCache;->createPropertyName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLandroid/app/PropertyInvalidatedCache;->createPropertyName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/app/PropertyInvalidatedCache;->disableLocal()V
 HSPLandroid/app/PropertyInvalidatedCache;->dumpCacheInfo(Landroid/os/ParcelFileDescriptor;[Ljava/lang/String;)V
 HSPLandroid/app/PropertyInvalidatedCache;->getActiveCaches()Ljava/util/ArrayList;
 HSPLandroid/app/PropertyInvalidatedCache;->getActiveCorks()Ljava/util/ArrayList;
-HSPLandroid/app/PropertyInvalidatedCache;->getCurrentNonce()J
+HSPLandroid/app/PropertyInvalidatedCache;->getCurrentNonce()J+]Landroid/os/SystemProperties$Handle;Landroid/os/SystemProperties$Handle;
 HSPLandroid/app/PropertyInvalidatedCache;->invalidateCache(Ljava/lang/String;)V
 HSPLandroid/app/PropertyInvalidatedCache;->invalidateCacheLocked(Ljava/lang/String;)V
 HSPLandroid/app/PropertyInvalidatedCache;->isDisabled()Z
 HSPLandroid/app/PropertyInvalidatedCache;->isReservedNonce(J)Z
 HSPLandroid/app/PropertyInvalidatedCache;->maybeCheckConsistency(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/app/PropertyInvalidatedCache;->query(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/app/PropertyInvalidatedCache;->query(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/LinkedHashMap;Landroid/app/PropertyInvalidatedCache$1;]Landroid/app/PropertyInvalidatedCache;megamorphic_types
 HSPLandroid/app/PropertyInvalidatedCache;->recompute(Ljava/lang/Object;)Ljava/lang/Object;+]Landroid/app/PropertyInvalidatedCache$QueryHandler;Landroid/bluetooth/BluetoothAdapter$2;,Lcom/android/internal/widget/LockPatternUtils$1;,Landroid/bluetooth/BluetoothAdapter$3;,Landroid/os/IpcDataCache$SystemServerCallHandler;
 HSPLandroid/app/PropertyInvalidatedCache;->refresh(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/app/PropertyInvalidatedCache;->registerCache()V+]Ljava/util/HashSet;Ljava/util/HashSet;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;]Landroid/app/PropertyInvalidatedCache;Landroid/bluetooth/BluetoothAdapter$BluetoothCache;,Landroid/os/IpcDataCache;
@@ -2450,7 +2458,7 @@
 HSPLandroid/app/QueuedWork;->getHandler()Landroid/os/Handler;
 HSPLandroid/app/QueuedWork;->hasPendingWork()Z
 HSPLandroid/app/QueuedWork;->processPendingWork()V
-HSPLandroid/app/QueuedWork;->queue(Ljava/lang/Runnable;Z)V
+HSPLandroid/app/QueuedWork;->queue(Ljava/lang/Runnable;Z)V+]Landroid/os/Handler;Landroid/app/QueuedWork$QueuedWorkHandler;]Ljava/util/LinkedList;Ljava/util/LinkedList;
 HSPLandroid/app/QueuedWork;->removeFinisher(Ljava/lang/Runnable;)V
 HSPLandroid/app/QueuedWork;->waitToFinish()V
 HSPLandroid/app/ReceiverRestrictedContext;-><init>(Landroid/content/Context;)V
@@ -2466,7 +2474,7 @@
 HSPLandroid/app/RemoteInput$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/app/RemoteInput$1;->newArray(I)[Landroid/app/RemoteInput;
 HSPLandroid/app/RemoteInput$1;->newArray(I)[Ljava/lang/Object;
-HSPLandroid/app/RemoteInput;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/RemoteInput;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/RemoteInput;->getAllowFreeFormInput()Z
 HSPLandroid/app/RemoteInput;->getChoices()[Ljava/lang/CharSequence;
 HSPLandroid/app/RemoteInput;->getEditChoicesBeforeSending()I
@@ -2494,22 +2502,22 @@
 HSPLandroid/app/ResourcesManager;->applyDisplayMetricsToConfiguration(Landroid/util/DisplayMetrics;Landroid/content/res/Configuration;)V
 HSPLandroid/app/ResourcesManager;->applyNewResourceDirsLocked([Ljava/lang/String;Landroid/content/pm/ApplicationInfo;)V
 HSPLandroid/app/ResourcesManager;->cleanupReferences(Ljava/util/ArrayList;Ljava/lang/ref/ReferenceQueue;)V
-HSPLandroid/app/ResourcesManager;->cleanupReferences(Ljava/util/ArrayList;Ljava/lang/ref/ReferenceQueue;Ljava/util/function/Function;)V
+HSPLandroid/app/ResourcesManager;->cleanupReferences(Ljava/util/ArrayList;Ljava/lang/ref/ReferenceQueue;Ljava/util/function/Function;)V+]Ljava/lang/ref/ReferenceQueue;Ljava/lang/ref/ReferenceQueue;]Ljava/util/HashSet;Ljava/util/HashSet;
 HSPLandroid/app/ResourcesManager;->combinedOverlayPaths([Ljava/lang/String;[Ljava/lang/String;)[Ljava/lang/String;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/app/ResourcesManager;->createApkAssetsSupplierNotLocked(Landroid/content/res/ResourcesKey;)Landroid/app/ResourcesManager$ApkAssetsSupplier;+]Landroid/app/ResourcesManager$ApkAssetsSupplier;Landroid/app/ResourcesManager$ApkAssetsSupplier;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLandroid/app/ResourcesManager;->createAssetManager(Landroid/content/res/ResourcesKey;Landroid/app/ResourcesManager$ApkAssetsSupplier;)Landroid/content/res/AssetManager;
+HSPLandroid/app/ResourcesManager;->createAssetManager(Landroid/content/res/ResourcesKey;Landroid/app/ResourcesManager$ApkAssetsSupplier;)Landroid/content/res/AssetManager;+]Landroid/content/res/AssetManager$Builder;Landroid/content/res/AssetManager$Builder;]Landroid/app/ResourcesManager$ApkAssetsSupplier;Landroid/app/ResourcesManager$ApkAssetsSupplier;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/app/ResourcesManager;->createBaseTokenResources(Landroid/os/IBinder;Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;Ljava/lang/ClassLoader;Ljava/util/List;)Landroid/content/res/Resources;
 HSPLandroid/app/ResourcesManager;->createResources(Landroid/content/res/ResourcesKey;Ljava/lang/ClassLoader;Landroid/app/ResourcesManager$ApkAssetsSupplier;)Landroid/content/res/Resources;
 HSPLandroid/app/ResourcesManager;->createResourcesForActivity(Landroid/os/IBinder;Landroid/content/res/ResourcesKey;Landroid/content/res/Configuration;Ljava/lang/Integer;Ljava/lang/ClassLoader;Landroid/app/ResourcesManager$ApkAssetsSupplier;)Landroid/content/res/Resources;
 HSPLandroid/app/ResourcesManager;->createResourcesForActivityLocked(Landroid/os/IBinder;Landroid/content/res/Configuration;Ljava/lang/Integer;Ljava/lang/ClassLoader;Landroid/content/res/ResourcesImpl;Landroid/content/res/CompatibilityInfo;)Landroid/content/res/Resources;
-HSPLandroid/app/ResourcesManager;->createResourcesImpl(Landroid/content/res/ResourcesKey;Landroid/app/ResourcesManager$ApkAssetsSupplier;)Landroid/content/res/ResourcesImpl;
-HSPLandroid/app/ResourcesManager;->createResourcesLocked(Ljava/lang/ClassLoader;Landroid/content/res/ResourcesImpl;Landroid/content/res/CompatibilityInfo;)Landroid/content/res/Resources;
+HSPLandroid/app/ResourcesManager;->createResourcesImpl(Landroid/content/res/ResourcesKey;Landroid/app/ResourcesManager$ApkAssetsSupplier;)Landroid/content/res/ResourcesImpl;+]Landroid/app/ResourcesManager;Landroid/app/ResourcesManager;]Landroid/view/DisplayAdjustments;Landroid/view/DisplayAdjustments;
+HSPLandroid/app/ResourcesManager;->createResourcesLocked(Ljava/lang/ClassLoader;Landroid/content/res/ResourcesImpl;Landroid/content/res/CompatibilityInfo;)Landroid/content/res/Resources;+]Landroid/content/res/CompatibilityInfo;Landroid/content/res/CompatibilityInfo$1;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/app/ResourcesManager;->extractApkKeys(Landroid/content/res/ResourcesKey;)Ljava/util/ArrayList;+]Ljava/lang/String;Ljava/lang/String;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/app/ResourcesManager;->findKeyForResourceImplLocked(Landroid/content/res/ResourcesImpl;)Landroid/content/res/ResourcesKey;
 HSPLandroid/app/ResourcesManager;->findOrCreateResourcesImplForKeyLocked(Landroid/content/res/ResourcesKey;)Landroid/content/res/ResourcesImpl;
-HSPLandroid/app/ResourcesManager;->findOrCreateResourcesImplForKeyLocked(Landroid/content/res/ResourcesKey;Landroid/app/ResourcesManager$ApkAssetsSupplier;)Landroid/content/res/ResourcesImpl;
+HSPLandroid/app/ResourcesManager;->findOrCreateResourcesImplForKeyLocked(Landroid/content/res/ResourcesKey;Landroid/app/ResourcesManager$ApkAssetsSupplier;)Landroid/content/res/ResourcesImpl;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/app/ResourcesManager;->findResourcesForActivityLocked(Landroid/os/IBinder;Landroid/content/res/ResourcesKey;Ljava/lang/ClassLoader;)Landroid/content/res/Resources;
-HSPLandroid/app/ResourcesManager;->findResourcesImplForKeyLocked(Landroid/content/res/ResourcesKey;)Landroid/content/res/ResourcesImpl;
+HSPLandroid/app/ResourcesManager;->findResourcesImplForKeyLocked(Landroid/content/res/ResourcesKey;)Landroid/content/res/ResourcesImpl;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
 HSPLandroid/app/ResourcesManager;->generateConfig(Landroid/content/res/ResourcesKey;)Landroid/content/res/Configuration;
 HSPLandroid/app/ResourcesManager;->generateDisplayId(Landroid/content/res/ResourcesKey;)I
 HSPLandroid/app/ResourcesManager;->getAdjustedDisplay(ILandroid/content/res/Resources;)Landroid/view/Display;
@@ -2519,10 +2527,10 @@
 HSPLandroid/app/ResourcesManager;->getDisplayMetrics(Landroid/content/res/Configuration;)Landroid/util/DisplayMetrics;
 HSPLandroid/app/ResourcesManager;->getInstance()Landroid/app/ResourcesManager;
 HSPLandroid/app/ResourcesManager;->getOrCreateActivityResourcesStructLocked(Landroid/os/IBinder;)Landroid/app/ResourcesManager$ActivityResources;
-HSPLandroid/app/ResourcesManager;->getResources(Landroid/os/IBinder;Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;Ljava/lang/Integer;Landroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;Ljava/lang/ClassLoader;Ljava/util/List;)Landroid/content/res/Resources;
+HSPLandroid/app/ResourcesManager;->getResources(Landroid/os/IBinder;Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;Ljava/lang/Integer;Landroid/content/res/Configuration;Landroid/content/res/CompatibilityInfo;Ljava/lang/ClassLoader;Ljava/util/List;)Landroid/content/res/Resources;+]Ljava/util/List;Ljava/util/Collections$EmptyList;
 HSPLandroid/app/ResourcesManager;->initializeApplicationPaths(Ljava/lang/String;[Ljava/lang/String;)V
 HSPLandroid/app/ResourcesManager;->isSameResourcesOverrideConfig(Landroid/os/IBinder;Landroid/content/res/Configuration;)Z+]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
-HSPLandroid/app/ResourcesManager;->lambda$cleanupReferences$1(Ljava/util/function/Function;Ljava/util/HashSet;Ljava/lang/Object;)Z
+HSPLandroid/app/ResourcesManager;->lambda$cleanupReferences$1(Ljava/util/function/Function;Ljava/util/HashSet;Ljava/lang/Object;)Z+]Ljava/util/function/Function;Ljava/util/function/Function$$ExternalSyntheticLambda1;]Ljava/util/HashSet;Ljava/util/HashSet;
 HSPLandroid/app/ResourcesManager;->lambda$createResourcesForActivityLocked$0(Landroid/app/ResourcesManager$ActivityResource;)Ljava/lang/ref/WeakReference;
 HSPLandroid/app/ResourcesManager;->loadApkAssets(Landroid/app/ResourcesManager$ApkKey;)Landroid/content/res/ApkAssets;+]Landroid/content/res/ApkAssets;Landroid/content/res/ApkAssets;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
 HSPLandroid/app/ResourcesManager;->overlayPathToIdmapPath(Ljava/lang/String;)Ljava/lang/String;
@@ -2565,7 +2573,7 @@
 HSPLandroid/app/SharedPreferencesImpl$1;-><init>(Landroid/app/SharedPreferencesImpl;Ljava/lang/String;)V
 HSPLandroid/app/SharedPreferencesImpl$1;->run()V
 HSPLandroid/app/SharedPreferencesImpl$2;-><init>(Landroid/app/SharedPreferencesImpl;Landroid/app/SharedPreferencesImpl$MemoryCommitResult;ZLjava/lang/Runnable;)V
-HSPLandroid/app/SharedPreferencesImpl$2;->run()V
+HSPLandroid/app/SharedPreferencesImpl$2;->run()V+]Ljava/lang/Runnable;Landroid/app/SharedPreferencesImpl$EditorImpl$2;
 HSPLandroid/app/SharedPreferencesImpl$EditorImpl$$ExternalSyntheticLambda0;-><init>(Landroid/app/SharedPreferencesImpl$EditorImpl;Landroid/app/SharedPreferencesImpl$MemoryCommitResult;)V
 HSPLandroid/app/SharedPreferencesImpl$EditorImpl$$ExternalSyntheticLambda0;->run()V
 HSPLandroid/app/SharedPreferencesImpl$EditorImpl$1;-><init>(Landroid/app/SharedPreferencesImpl$EditorImpl;Landroid/app/SharedPreferencesImpl$MemoryCommitResult;J)V
@@ -2576,8 +2584,8 @@
 HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->apply()V
 HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->clear()Landroid/content/SharedPreferences$Editor;
 HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->commit()Z
-HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->commitToMemory()Landroid/app/SharedPreferencesImpl$MemoryCommitResult;
-HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->notifyListeners(Landroid/app/SharedPreferencesImpl$MemoryCommitResult;)V
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->commitToMemory()Landroid/app/SharedPreferencesImpl$MemoryCommitResult;+]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;]Ljava/lang/Object;megamorphic_types]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;]Ljava/util/Set;Ljava/util/HashMap$EntrySet;
+HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->notifyListeners(Landroid/app/SharedPreferencesImpl$MemoryCommitResult;)V+]Landroid/os/Handler;Landroid/app/ActivityThread$H;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;]Ljava/util/Set;Ljava/util/HashSet;
 HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->putBoolean(Ljava/lang/String;Z)Landroid/content/SharedPreferences$Editor;
 HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->putFloat(Ljava/lang/String;F)Landroid/content/SharedPreferences$Editor;
 HSPLandroid/app/SharedPreferencesImpl$EditorImpl;->putInt(Ljava/lang/String;I)Landroid/content/SharedPreferences$Editor;
@@ -2605,11 +2613,11 @@
 HSPLandroid/app/SharedPreferencesImpl;->edit()Landroid/content/SharedPreferences$Editor;
 HSPLandroid/app/SharedPreferencesImpl;->enqueueDiskWrite(Landroid/app/SharedPreferencesImpl$MemoryCommitResult;Ljava/lang/Runnable;)V
 HSPLandroid/app/SharedPreferencesImpl;->getAll()Ljava/util/Map;
-HSPLandroid/app/SharedPreferencesImpl;->getBoolean(Ljava/lang/String;Z)Z
+HSPLandroid/app/SharedPreferencesImpl;->getBoolean(Ljava/lang/String;Z)Z+]Ljava/lang/Boolean;Ljava/lang/Boolean;]Ljava/util/Map;Ljava/util/HashMap;
 HSPLandroid/app/SharedPreferencesImpl;->getFloat(Ljava/lang/String;F)F
-HSPLandroid/app/SharedPreferencesImpl;->getInt(Ljava/lang/String;I)I
+HSPLandroid/app/SharedPreferencesImpl;->getInt(Ljava/lang/String;I)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/Map;Ljava/util/HashMap;
 HSPLandroid/app/SharedPreferencesImpl;->getLong(Ljava/lang/String;J)J
-HSPLandroid/app/SharedPreferencesImpl;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/app/SharedPreferencesImpl;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Ljava/util/Map;Ljava/util/HashMap;
 HSPLandroid/app/SharedPreferencesImpl;->getStringSet(Ljava/lang/String;Ljava/util/Set;)Ljava/util/Set;
 HSPLandroid/app/SharedPreferencesImpl;->hasFileChangedUnexpectedly()Z
 HSPLandroid/app/SharedPreferencesImpl;->loadFromDisk()V
@@ -2618,7 +2626,7 @@
 HSPLandroid/app/SharedPreferencesImpl;->startLoadFromDisk()V
 HSPLandroid/app/SharedPreferencesImpl;->startReloadIfChangedUnexpectedly()V
 HSPLandroid/app/SharedPreferencesImpl;->unregisterOnSharedPreferenceChangeListener(Landroid/content/SharedPreferences$OnSharedPreferenceChangeListener;)V
-HSPLandroid/app/SharedPreferencesImpl;->writeToFile(Landroid/app/SharedPreferencesImpl$MemoryCommitResult;Z)V
+HSPLandroid/app/SharedPreferencesImpl;->writeToFile(Landroid/app/SharedPreferencesImpl$MemoryCommitResult;Z)V+]Ljava/io/File;Ljava/io/File;]Lcom/android/internal/util/ExponentiallyBucketedHistogram;Lcom/android/internal/util/ExponentiallyBucketedHistogram;]Landroid/app/SharedPreferencesImpl$MemoryCommitResult;Landroid/app/SharedPreferencesImpl$MemoryCommitResult;]Ljava/io/FileOutputStream;Ljava/io/FileOutputStream;
 HSPLandroid/app/StackTrace;-><init>(Ljava/lang/String;)V
 HSPLandroid/app/StatusBarManager;-><init>(Landroid/content/Context;)V
 HSPLandroid/app/SyncNotedAppOp$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/SyncNotedAppOp;
@@ -2626,7 +2634,7 @@
 HSPLandroid/app/SyncNotedAppOp;-><init>(IILjava/lang/String;Ljava/lang/String;)V
 HSPLandroid/app/SyncNotedAppOp;-><init>(ILjava/lang/String;)V
 HSPLandroid/app/SyncNotedAppOp;-><init>(ILjava/lang/String;Ljava/lang/String;)V
-HSPLandroid/app/SyncNotedAppOp;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/app/SyncNotedAppOp;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/SyncNotedAppOp;->getAttributionTag()Ljava/lang/String;
 HSPLandroid/app/SyncNotedAppOp;->getOp()Ljava/lang/String;
 HSPLandroid/app/SyncNotedAppOp;->getOpMode()I
@@ -2638,6 +2646,7 @@
 HSPLandroid/app/SystemServiceRegistry$106;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$107;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$108;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
+HSPLandroid/app/SystemServiceRegistry$109;->createService(Landroid/app/ContextImpl;)Landroid/app/slice/SliceManager;
 HSPLandroid/app/SystemServiceRegistry$109;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$110;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$111;->createService(Landroid/app/ContextImpl;)Ljava/lang/Object;
@@ -2791,8 +2800,8 @@
 HSPLandroid/app/SystemServiceRegistry$CachedServiceFetcher;->getService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry$StaticServiceFetcher;->getService(Landroid/app/ContextImpl;)Ljava/lang/Object;
 HSPLandroid/app/SystemServiceRegistry;->createServiceCache()[Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry;->getSystemService(Landroid/app/ContextImpl;Ljava/lang/String;)Ljava/lang/Object;
-HSPLandroid/app/SystemServiceRegistry;->getSystemServiceName(Ljava/lang/Class;)Ljava/lang/String;
+HSPLandroid/app/SystemServiceRegistry;->getSystemService(Landroid/app/ContextImpl;Ljava/lang/String;)Ljava/lang/Object;+]Landroid/app/SystemServiceRegistry$ServiceFetcher;megamorphic_types]Ljava/util/Map;Landroid/util/ArrayMap;
+HSPLandroid/app/SystemServiceRegistry;->getSystemServiceName(Ljava/lang/Class;)Ljava/lang/String;+]Ljava/util/Map;Landroid/util/ArrayMap;
 HSPLandroid/app/TaskInfo;-><init>()V
 HSPLandroid/app/TaskInfo;->getWindowingMode()I
 HSPLandroid/app/TaskInfo;->readFromParcel(Landroid/os/Parcel;)V
@@ -2865,12 +2874,12 @@
 HSPLandroid/app/WindowConfiguration;->setRotation(I)V
 HSPLandroid/app/WindowConfiguration;->setTo(Landroid/app/WindowConfiguration;)V+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HSPLandroid/app/WindowConfiguration;->setTo(Landroid/app/WindowConfiguration;I)V
-HSPLandroid/app/WindowConfiguration;->setToDefaults()V
+HSPLandroid/app/WindowConfiguration;->setToDefaults()V+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HSPLandroid/app/WindowConfiguration;->setWindowingMode(I)V
 HSPLandroid/app/WindowConfiguration;->tasksAreFloating()Z
 HSPLandroid/app/WindowConfiguration;->toString()Ljava/lang/String;
-HSPLandroid/app/WindowConfiguration;->unset()V
-HSPLandroid/app/WindowConfiguration;->updateFrom(Landroid/app/WindowConfiguration;)I
+HSPLandroid/app/WindowConfiguration;->unset()V+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
+HSPLandroid/app/WindowConfiguration;->updateFrom(Landroid/app/WindowConfiguration;)I+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HSPLandroid/app/WindowConfiguration;->windowingModeToString(I)Ljava/lang/String;
 HSPLandroid/app/WindowConfiguration;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/app/admin/DevicePolicyManager$$ExternalSyntheticLambda10;-><init>(Landroid/app/admin/DevicePolicyManager;)V
@@ -2946,7 +2955,7 @@
 HSPLandroid/app/assist/AssistStructure$ViewNode;-><init>(Landroid/app/assist/AssistStructure$ParcelTransferReader;I)V
 HSPLandroid/app/assist/AssistStructure$ViewNode;->getAutofillId()Landroid/view/autofill/AutofillId;
 HSPLandroid/app/assist/AssistStructure$ViewNode;->getChildCount()I
-HSPLandroid/app/assist/AssistStructure$ViewNode;->writeSelfToParcel(Landroid/os/Parcel;Landroid/os/PooledStringWriter;Z[FZ)I
+HSPLandroid/app/assist/AssistStructure$ViewNode;->writeSelfToParcel(Landroid/os/Parcel;Landroid/os/PooledStringWriter;Z[FZ)I+]Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillId;]Landroid/app/assist/AssistStructure$ViewNodeText;Landroid/app/assist/AssistStructure$ViewNodeText;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/assist/AssistStructure$ViewNode;->writeString(Landroid/os/Parcel;Landroid/os/PooledStringWriter;Ljava/lang/String;)V
 HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->getChildCount()I
 HSPLandroid/app/assist/AssistStructure$ViewNodeBuilder;->getNodeText()Landroid/app/assist/AssistStructure$ViewNodeText;
@@ -3029,7 +3038,7 @@
 HSPLandroid/app/backup/IBackupCallback$Stub$Proxy;->operationComplete(J)V
 HSPLandroid/app/backup/IBackupCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/backup/IBackupCallback;
 HSPLandroid/app/backup/IBackupManager$Stub$Proxy;->dataChanged(Ljava/lang/String;)V
-HSPLandroid/app/backup/IBackupManager$Stub$Proxy;->getCurrentTransport()Ljava/lang/String;
+HSPLandroid/app/backup/IBackupManager$Stub$Proxy;->getCurrentTransport()Ljava/lang/String;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/app/backup/IBackupManager$Stub$Proxy;->isBackupServiceActive(I)Z
 HSPLandroid/app/backup/IBackupManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/backup/IBackupManager;
 HSPLandroid/app/backup/SharedPreferencesBackupHelper;-><init>(Landroid/content/Context;[Ljava/lang/String;)V
@@ -3395,9 +3404,9 @@
 HSPLandroid/app/usage/UsageEvents;->getNextEvent(Landroid/app/usage/UsageEvents$Event;)Z
 HSPLandroid/app/usage/UsageEvents;->hasNextEvent()Z
 HSPLandroid/app/usage/UsageEvents;->readEventFromParcel(Landroid/os/Parcel;Landroid/app/usage/UsageEvents$Event;)V+]Landroid/os/Parcelable$Creator;Landroid/content/res/Configuration$1;]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/app/usage/UsageStats$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/usage/UsageStats;
+HSPLandroid/app/usage/UsageStats$1;->createFromParcel(Landroid/os/Parcel;)Landroid/app/usage/UsageStats;+]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Landroid/os/Parcel;Landroid/os/Parcel;]Ljava/util/Set;Landroid/util/MapCollections$KeySet;
 HSPLandroid/app/usage/UsageStats$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/app/usage/UsageStats$1;->readBundleToEventMap(Landroid/os/Bundle;Landroid/util/ArrayMap;)V
+HSPLandroid/app/usage/UsageStats$1;->readBundleToEventMap(Landroid/os/Bundle;Landroid/util/ArrayMap;)V+]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/MapCollections$KeySet;
 HSPLandroid/app/usage/UsageStats;-><init>()V
 HSPLandroid/app/usage/UsageStats;->getPackageName()Ljava/lang/String;
 HSPLandroid/app/usage/UsageStats;->update(Ljava/lang/String;JII)V
@@ -3441,7 +3450,7 @@
 HSPLandroid/content/AttributionSource$ScopedParcelState;->getParcel()Landroid/os/Parcel;
 HSPLandroid/content/AttributionSource;-><clinit>()V
 HSPLandroid/content/AttributionSource;-><init>(ILjava/lang/String;Ljava/lang/String;Landroid/os/IBinder;[Ljava/lang/String;Landroid/content/AttributionSource;)V
-HSPLandroid/content/AttributionSource;-><init>(ILjava/lang/String;Ljava/lang/String;Ljava/util/Set;Landroid/content/AttributionSource;)V
+HSPLandroid/content/AttributionSource;-><init>(ILjava/lang/String;Ljava/lang/String;Ljava/util/Set;Landroid/content/AttributionSource;)V+]Ljava/util/Set;Ljava/util/Collections$EmptySet;
 HSPLandroid/content/AttributionSource;-><init>(ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/content/AttributionSource;)V
 HSPLandroid/content/AttributionSource;-><init>(Landroid/content/AttributionSource;Landroid/content/AttributionSource;)V
 HSPLandroid/content/AttributionSource;-><init>(Landroid/content/AttributionSourceState;)V
@@ -3465,8 +3474,8 @@
 HSPLandroid/content/AttributionSourceState$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/content/AttributionSourceState;-><clinit>()V
 HSPLandroid/content/AttributionSourceState;-><init>()V
-HSPLandroid/content/AttributionSourceState;->readFromParcel(Landroid/os/Parcel;)V
-HSPLandroid/content/AttributionSourceState;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/AttributionSourceState;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/AttributionSourceState;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/AutofillOptions$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/AutofillOptions;
 HSPLandroid/content/AutofillOptions$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/AutofillOptions;-><init>(IZ)V
@@ -3528,20 +3537,20 @@
 HSPLandroid/content/ComponentCallbacksController;->registerCallbacks(Landroid/content/ComponentCallbacks;)V
 HSPLandroid/content/ComponentCallbacksController;->unregisterCallbacks(Landroid/content/ComponentCallbacks;)V
 HSPLandroid/content/ComponentName$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/ComponentName;
-HSPLandroid/content/ComponentName$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/content/ComponentName$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/content/ComponentName$1;Landroid/content/ComponentName$1;
 HSPLandroid/content/ComponentName$1;->newArray(I)[Landroid/content/ComponentName;
 HSPLandroid/content/ComponentName$1;->newArray(I)[Ljava/lang/Object;
-HSPLandroid/content/ComponentName;-><init>(Landroid/content/Context;Ljava/lang/Class;)V
+HSPLandroid/content/ComponentName;-><init>(Landroid/content/Context;Ljava/lang/Class;)V+]Ljava/lang/Class;Ljava/lang/Class;]Landroid/content/Context;missing_types
 HSPLandroid/content/ComponentName;-><init>(Landroid/content/Context;Ljava/lang/String;)V
-HSPLandroid/content/ComponentName;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/ComponentName;-><init>(Ljava/lang/String;Landroid/os/Parcel;)V
+HSPLandroid/content/ComponentName;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/ComponentName;-><init>(Ljava/lang/String;Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/ComponentName;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/content/ComponentName;->appendShortClassName(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/content/ComponentName;->appendShortString(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;)V
+HSPLandroid/content/ComponentName;->appendShortClassName(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;
+HSPLandroid/content/ComponentName;->appendShortString(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/content/ComponentName;->compareTo(Landroid/content/ComponentName;)I
 HSPLandroid/content/ComponentName;->createRelative(Ljava/lang/String;Ljava/lang/String;)Landroid/content/ComponentName;
 HSPLandroid/content/ComponentName;->equals(Ljava/lang/Object;)Z
-HSPLandroid/content/ComponentName;->flattenToShortString()Ljava/lang/String;
+HSPLandroid/content/ComponentName;->flattenToShortString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/content/ComponentName;->flattenToString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/content/ComponentName;->getClassName()Ljava/lang/String;
 HSPLandroid/content/ComponentName;->getPackageName()Ljava/lang/String;
@@ -3549,16 +3558,16 @@
 HSPLandroid/content/ComponentName;->hashCode()I
 HSPLandroid/content/ComponentName;->readFromParcel(Landroid/os/Parcel;)Landroid/content/ComponentName;
 HSPLandroid/content/ComponentName;->toShortString()Ljava/lang/String;
-HSPLandroid/content/ComponentName;->toString()Ljava/lang/String;
+HSPLandroid/content/ComponentName;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/content/ComponentName;->unflattenFromString(Ljava/lang/String;)Landroid/content/ComponentName;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;
-HSPLandroid/content/ComponentName;->writeToParcel(Landroid/content/ComponentName;Landroid/os/Parcel;)V
-HSPLandroid/content/ComponentName;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/ContentCaptureOptions$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/ContentCaptureOptions;
+HSPLandroid/content/ComponentName;->writeToParcel(Landroid/content/ComponentName;Landroid/os/Parcel;)V+]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/ComponentName;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/ContentCaptureOptions$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/ContentCaptureOptions;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/ContentCaptureOptions$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/ContentCaptureOptions;-><init>(IIIIILandroid/util/ArraySet;)V
 HSPLandroid/content/ContentCaptureOptions;-><init>(ZIIIIILandroid/util/ArraySet;)V
 HSPLandroid/content/ContentCaptureOptions;->isWhitelisted(Landroid/content/Context;)Z
-HSPLandroid/content/ContentCaptureOptions;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/ContentCaptureOptions;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/ContentProvider$Transport;-><init>(Landroid/content/ContentProvider;)V
 HSPLandroid/content/ContentProvider$Transport;->call(Landroid/content/AttributionSource;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;
 HSPLandroid/content/ContentProvider$Transport;->createCancellationSignal()Landroid/os/ICancellationSignal;
@@ -3651,7 +3660,7 @@
 HSPLandroid/content/ContentProviderNative;-><init>()V
 HSPLandroid/content/ContentProviderNative;->asBinder()Landroid/os/IBinder;
 HSPLandroid/content/ContentProviderNative;->asInterface(Landroid/os/IBinder;)Landroid/content/IContentProvider;
-HSPLandroid/content/ContentProviderNative;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/content/ContentProviderNative;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z+]Landroid/os/Parcelable$Creator;Landroid/content/AttributionSource$1;]Landroid/content/ContentProviderNative;Landroid/content/ContentProvider$Transport;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/ContentProviderOperation$Builder;->assertSelectionAllowed()V
 HSPLandroid/content/ContentProviderOperation$Builder;->assertValuesAllowed()V
 HSPLandroid/content/ContentProviderOperation$Builder;->build()Landroid/content/ContentProviderOperation;
@@ -3686,7 +3695,7 @@
 HSPLandroid/content/ContentProviderProxy;->getTypeAsync(Landroid/net/Uri;Landroid/os/RemoteCallback;)V
 HSPLandroid/content/ContentProviderProxy;->insert(Landroid/content/AttributionSource;Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)Landroid/net/Uri;+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;]Landroid/os/Parcelable$Creator;Landroid/net/Uri$1;]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/content/ContentValues;Landroid/content/ContentValues;]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/net/Uri;Landroid/net/Uri$StringUri;
 HSPLandroid/content/ContentProviderProxy;->openTypedAssetFile(Landroid/content/AttributionSource;Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/ICancellationSignal;)Landroid/content/res/AssetFileDescriptor;
-HSPLandroid/content/ContentProviderProxy;->query(Landroid/content/AttributionSource;Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/ICancellationSignal;)Landroid/database/Cursor;+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;]Landroid/os/Parcelable$Creator;Landroid/database/BulkCursorDescriptor$1;]Landroid/database/IBulkCursor;Landroid/database/BulkCursorProxy;]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/database/BulkCursorToCursorAdaptor;Landroid/database/BulkCursorToCursorAdaptor;]Landroid/database/IContentObserver;Landroid/database/ContentObserver$Transport;]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;
+HSPLandroid/content/ContentProviderProxy;->query(Landroid/content/AttributionSource;Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/ICancellationSignal;)Landroid/database/Cursor;+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;]Landroid/os/Parcelable$Creator;Landroid/database/BulkCursorDescriptor$1;]Landroid/database/IBulkCursor;Landroid/database/BulkCursorProxy;]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/database/BulkCursorToCursorAdaptor;Landroid/database/BulkCursorToCursorAdaptor;]Landroid/database/IContentObserver;Landroid/database/ContentObserver$Transport;]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;]Landroid/os/ICancellationSignal;Landroid/os/ICancellationSignal$Stub$Proxy;
 HSPLandroid/content/ContentProviderProxy;->update(Landroid/content/AttributionSource;Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)I
 HSPLandroid/content/ContentProviderResult$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/ContentProviderResult;
 HSPLandroid/content/ContentProviderResult$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -3695,8 +3704,8 @@
 HSPLandroid/content/ContentProviderResult;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/content/ContentResolver$2;-><init>(Landroid/content/SyncStatusObserver;)V
 HSPLandroid/content/ContentResolver$2;->onStatusChanged(I)V
-HSPLandroid/content/ContentResolver$CursorWrapperInner;-><init>(Landroid/content/ContentResolver;Landroid/database/Cursor;Landroid/content/IContentProvider;)V
-HSPLandroid/content/ContentResolver$CursorWrapperInner;->close()V
+HSPLandroid/content/ContentResolver$CursorWrapperInner;-><init>(Landroid/content/ContentResolver;Landroid/database/Cursor;Landroid/content/IContentProvider;)V+]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
+HSPLandroid/content/ContentResolver$CursorWrapperInner;->close()V+]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
 HSPLandroid/content/ContentResolver$CursorWrapperInner;->finalize()V
 HSPLandroid/content/ContentResolver$ParcelFileDescriptorInner;-><init>(Landroid/content/ContentResolver;Landroid/os/ParcelFileDescriptor;Landroid/content/IContentProvider;)V
 HSPLandroid/content/ContentResolver$ParcelFileDescriptorInner;->releaseResources()V
@@ -3706,14 +3715,14 @@
 HSPLandroid/content/ContentResolver$StringResultListener;->getResultFromBundle(Landroid/os/Bundle;)Ljava/lang/Object;
 HSPLandroid/content/ContentResolver$StringResultListener;->getResultFromBundle(Landroid/os/Bundle;)Ljava/lang/String;
 HSPLandroid/content/ContentResolver;-><init>(Landroid/content/Context;)V
-HSPLandroid/content/ContentResolver;-><init>(Landroid/content/Context;Landroid/content/ContentInterface;)V
+HSPLandroid/content/ContentResolver;-><init>(Landroid/content/Context;Landroid/content/ContentInterface;)V+]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLandroid/content/ContentResolver;->acquireContentProviderClient(Landroid/net/Uri;)Landroid/content/ContentProviderClient;
 HSPLandroid/content/ContentResolver;->acquireContentProviderClient(Ljava/lang/String;)Landroid/content/ContentProviderClient;
-HSPLandroid/content/ContentResolver;->acquireExistingProvider(Landroid/net/Uri;)Landroid/content/IContentProvider;
-HSPLandroid/content/ContentResolver;->acquireProvider(Landroid/net/Uri;)Landroid/content/IContentProvider;
+HSPLandroid/content/ContentResolver;->acquireExistingProvider(Landroid/net/Uri;)Landroid/content/IContentProvider;+]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;]Landroid/net/Uri;Landroid/net/Uri$StringUri;
+HSPLandroid/content/ContentResolver;->acquireProvider(Landroid/net/Uri;)Landroid/content/IContentProvider;+]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;
 HSPLandroid/content/ContentResolver;->acquireProvider(Ljava/lang/String;)Landroid/content/IContentProvider;
 HSPLandroid/content/ContentResolver;->acquireUnstableContentProviderClient(Landroid/net/Uri;)Landroid/content/ContentProviderClient;
-HSPLandroid/content/ContentResolver;->acquireUnstableProvider(Landroid/net/Uri;)Landroid/content/IContentProvider;
+HSPLandroid/content/ContentResolver;->acquireUnstableProvider(Landroid/net/Uri;)Landroid/content/IContentProvider;+]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;
 HSPLandroid/content/ContentResolver;->addPeriodicSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;J)V
 HSPLandroid/content/ContentResolver;->addStatusChangeListener(ILandroid/content/SyncStatusObserver;)Ljava/lang/Object;
 HSPLandroid/content/ContentResolver;->applyBatch(Ljava/lang/String;Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;
@@ -3734,19 +3743,19 @@
 HSPLandroid/content/ContentResolver;->getPeriodicSyncs(Landroid/accounts/Account;Ljava/lang/String;)Ljava/util/List;
 HSPLandroid/content/ContentResolver;->getResourceId(Landroid/net/Uri;)Landroid/content/ContentResolver$OpenResourceIdResult;
 HSPLandroid/content/ContentResolver;->getSyncAutomatically(Landroid/accounts/Account;Ljava/lang/String;)Z
-HSPLandroid/content/ContentResolver;->getType(Landroid/net/Uri;)Ljava/lang/String;
-HSPLandroid/content/ContentResolver;->getUserId()I
+HSPLandroid/content/ContentResolver;->getType(Landroid/net/Uri;)Ljava/lang/String;+]Landroid/content/ContentResolver$StringResultListener;Landroid/content/ContentResolver$StringResultListener;]Landroid/app/IActivityManager;Landroid/app/IActivityManager$Stub$Proxy;]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;]Landroid/net/Uri;Landroid/net/Uri$StringUri;
+HSPLandroid/content/ContentResolver;->getUserId()I+]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLandroid/content/ContentResolver;->insert(Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;
 HSPLandroid/content/ContentResolver;->insert(Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)Landroid/net/Uri;+]Landroid/content/IContentProvider;Landroid/content/ContentProviderProxy;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;
 HSPLandroid/content/ContentResolver;->invalidPeriodicExtras(Landroid/os/Bundle;)Z
 HSPLandroid/content/ContentResolver;->maybeLogQueryToEventLog(JLandroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;)V
 HSPLandroid/content/ContentResolver;->maybeLogUpdateToEventLog(JLandroid/net/Uri;Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/content/ContentResolver;->notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;)V
-HSPLandroid/content/ContentResolver;->notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;I)V
+HSPLandroid/content/ContentResolver;->notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;I)V+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;
 HSPLandroid/content/ContentResolver;->notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;II)V
 HSPLandroid/content/ContentResolver;->notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;Z)V
 HSPLandroid/content/ContentResolver;->notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;ZI)V
-HSPLandroid/content/ContentResolver;->notifyChange([Landroid/net/Uri;Landroid/database/ContentObserver;II)V
+HSPLandroid/content/ContentResolver;->notifyChange([Landroid/net/Uri;Landroid/database/ContentObserver;II)V+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/IContentService;Landroid/content/IContentService$Stub$Proxy;
 HSPLandroid/content/ContentResolver;->openAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;
 HSPLandroid/content/ContentResolver;->openAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;
 HSPLandroid/content/ContentResolver;->openFileDescriptor(Landroid/net/Uri;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;
@@ -3754,7 +3763,7 @@
 HSPLandroid/content/ContentResolver;->openInputStream(Landroid/net/Uri;)Ljava/io/InputStream;
 HSPLandroid/content/ContentResolver;->openTypedAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/res/AssetFileDescriptor;
 HSPLandroid/content/ContentResolver;->openTypedAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;+]Landroid/content/IContentProvider;Landroid/content/ContentProvider$Transport;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/res/AssetFileDescriptor;Landroid/content/res/AssetFileDescriptor;]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;
-HSPLandroid/content/ContentResolver;->query(Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;
+HSPLandroid/content/ContentResolver;->query(Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;+]Landroid/content/IContentProvider;Landroid/content/ContentProviderProxy;,Landroid/content/ContentProvider$Transport;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/database/Cursor;Landroid/database/BulkCursorToCursorAdaptor;,Landroid/database/sqlite/SQLiteCursor;]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;]Landroid/os/CancellationSignal;Landroid/os/CancellationSignal;
 HSPLandroid/content/ContentResolver;->query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;
 HSPLandroid/content/ContentResolver;->query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;
 HSPLandroid/content/ContentResolver;->registerContentObserver(Landroid/net/Uri;ZLandroid/database/ContentObserver;)V
@@ -3778,10 +3787,10 @@
 HSPLandroid/content/ContentValues;-><init>()V
 HSPLandroid/content/ContentValues;-><init>(I)V
 HSPLandroid/content/ContentValues;-><init>(Landroid/content/ContentValues;)V
-HSPLandroid/content/ContentValues;->clear()V
+HSPLandroid/content/ContentValues;->clear()V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/content/ContentValues;->containsKey(Ljava/lang/String;)Z
 HSPLandroid/content/ContentValues;->equals(Ljava/lang/Object;)Z
-HSPLandroid/content/ContentValues;->get(Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroid/content/ContentValues;->get(Ljava/lang/String;)Ljava/lang/Object;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/content/ContentValues;->getAsBoolean(Ljava/lang/String;)Ljava/lang/Boolean;
 HSPLandroid/content/ContentValues;->getAsByteArray(Ljava/lang/String;)[B
 HSPLandroid/content/ContentValues;->getAsInteger(Ljava/lang/String;)Ljava/lang/Integer;
@@ -3790,8 +3799,8 @@
 HSPLandroid/content/ContentValues;->getValues()Landroid/util/ArrayMap;
 HSPLandroid/content/ContentValues;->isEmpty()Z
 HSPLandroid/content/ContentValues;->isSupportedValue(Ljava/lang/Object;)Z
-HSPLandroid/content/ContentValues;->keySet()Ljava/util/Set;
-HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Boolean;)V
+HSPLandroid/content/ContentValues;->keySet()Ljava/util/Set;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Boolean;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Double;)V
 HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Float;)V
 HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Integer;)V
@@ -3799,7 +3808,7 @@
 HSPLandroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/content/ContentValues;->put(Ljava/lang/String;[B)V
 HSPLandroid/content/ContentValues;->putAll(Landroid/content/ContentValues;)V
-HSPLandroid/content/ContentValues;->putNull(Ljava/lang/String;)V
+HSPLandroid/content/ContentValues;->putNull(Ljava/lang/String;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/content/ContentValues;->putObject(Ljava/lang/String;Ljava/lang/Object;)V
 HSPLandroid/content/ContentValues;->remove(Ljava/lang/String;)V
 HSPLandroid/content/ContentValues;->size()I
@@ -3807,21 +3816,21 @@
 HSPLandroid/content/ContentValues;->valueSet()Ljava/util/Set;
 HSPLandroid/content/ContentValues;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/Context;-><init>()V
-HSPLandroid/content/Context;->getColor(I)I
+HSPLandroid/content/Context;->getColor(I)I+]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/Context;missing_types
 HSPLandroid/content/Context;->getColorStateList(I)Landroid/content/res/ColorStateList;
 HSPLandroid/content/Context;->getDrawable(I)Landroid/graphics/drawable/Drawable;
 HSPLandroid/content/Context;->getNextAutofillId()I
 HSPLandroid/content/Context;->getSharedPrefsFile(Ljava/lang/String;)Ljava/io/File;
 HSPLandroid/content/Context;->getString(I)Ljava/lang/String;
-HSPLandroid/content/Context;->getString(I[Ljava/lang/Object;)Ljava/lang/String;
-HSPLandroid/content/Context;->getSystemService(Ljava/lang/Class;)Ljava/lang/Object;
+HSPLandroid/content/Context;->getString(I[Ljava/lang/Object;)Ljava/lang/String;+]Landroid/content/res/Resources;Landroid/content/res/Resources;
+HSPLandroid/content/Context;->getSystemService(Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/content/Context;missing_types
 HSPLandroid/content/Context;->getText(I)Ljava/lang/CharSequence;
 HSPLandroid/content/Context;->getToken(Landroid/content/Context;)Landroid/os/IBinder;
-HSPLandroid/content/Context;->isAutofillCompatibilityEnabled()Z
-HSPLandroid/content/Context;->obtainStyledAttributes(I[I)Landroid/content/res/TypedArray;
-HSPLandroid/content/Context;->obtainStyledAttributes(Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;
-HSPLandroid/content/Context;->obtainStyledAttributes(Landroid/util/AttributeSet;[III)Landroid/content/res/TypedArray;
-HSPLandroid/content/Context;->obtainStyledAttributes([I)Landroid/content/res/TypedArray;
+HSPLandroid/content/Context;->isAutofillCompatibilityEnabled()Z+]Landroid/content/Context;missing_types
+HSPLandroid/content/Context;->obtainStyledAttributes(I[I)Landroid/content/res/TypedArray;+]Landroid/content/res/Resources$Theme;Landroid/content/res/Resources$Theme;
+HSPLandroid/content/Context;->obtainStyledAttributes(Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;+]Landroid/content/res/Resources$Theme;Landroid/content/res/Resources$Theme;]Landroid/content/Context;missing_types
+HSPLandroid/content/Context;->obtainStyledAttributes(Landroid/util/AttributeSet;[III)Landroid/content/res/TypedArray;+]Landroid/content/res/Resources$Theme;Landroid/content/res/Resources$Theme;]Landroid/content/Context;missing_types
+HSPLandroid/content/Context;->obtainStyledAttributes([I)Landroid/content/res/TypedArray;+]Landroid/content/res/Resources$Theme;Landroid/content/res/Resources$Theme;
 HSPLandroid/content/Context;->registerComponentCallbacks(Landroid/content/ComponentCallbacks;)V
 HSPLandroid/content/Context;->unregisterComponentCallbacks(Landroid/content/ComponentCallbacks;)V
 HSPLandroid/content/ContextParams$Builder;-><init>()V
@@ -3839,7 +3848,7 @@
 HSPLandroid/content/ContextWrapper;->bindIsolatedService(Landroid/content/Intent;ILjava/lang/String;Ljava/util/concurrent/Executor;Landroid/content/ServiceConnection;)Z
 HSPLandroid/content/ContextWrapper;->bindService(Landroid/content/Intent;Landroid/content/ServiceConnection;I)Z
 HSPLandroid/content/ContextWrapper;->bindServiceAsUser(Landroid/content/Intent;Landroid/content/ServiceConnection;ILandroid/os/UserHandle;)Z
-HSPLandroid/content/ContextWrapper;->canLoadUnsafeResources()Z
+HSPLandroid/content/ContextWrapper;->canLoadUnsafeResources()Z+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->checkCallingOrSelfPermission(Ljava/lang/String;)I
 HSPLandroid/content/ContextWrapper;->checkCallingPermission(Ljava/lang/String;)I
 HSPLandroid/content/ContextWrapper;->checkPermission(Ljava/lang/String;II)I
@@ -3852,7 +3861,7 @@
 HSPLandroid/content/ContextWrapper;->createConfigurationContext(Landroid/content/res/Configuration;)Landroid/content/Context;
 HSPLandroid/content/ContextWrapper;->createContextAsUser(Landroid/os/UserHandle;I)Landroid/content/Context;
 HSPLandroid/content/ContextWrapper;->createCredentialProtectedStorageContext()Landroid/content/Context;
-HSPLandroid/content/ContextWrapper;->createDeviceProtectedStorageContext()Landroid/content/Context;
+HSPLandroid/content/ContextWrapper;->createDeviceProtectedStorageContext()Landroid/content/Context;+]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLandroid/content/ContextWrapper;->createDisplayContext(Landroid/view/Display;)Landroid/content/Context;
 HSPLandroid/content/ContextWrapper;->createPackageContext(Ljava/lang/String;I)Landroid/content/Context;
 HSPLandroid/content/ContextWrapper;->createPackageContextAsUser(Ljava/lang/String;ILandroid/os/UserHandle;)Landroid/content/Context;
@@ -3865,24 +3874,24 @@
 HSPLandroid/content/ContextWrapper;->enforcePermission(Ljava/lang/String;IILjava/lang/String;)V
 HSPLandroid/content/ContextWrapper;->fileList()[Ljava/lang/String;
 HSPLandroid/content/ContextWrapper;->getActivityToken()Landroid/os/IBinder;+]Landroid/content/Context;Landroid/app/ContextImpl;
-HSPLandroid/content/ContextWrapper;->getApplicationContext()Landroid/content/Context;
+HSPLandroid/content/ContextWrapper;->getApplicationContext()Landroid/content/Context;+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->getApplicationInfo()Landroid/content/pm/ApplicationInfo;+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->getAssets()Landroid/content/res/AssetManager;
 HSPLandroid/content/ContextWrapper;->getAttributionSource()Landroid/content/AttributionSource;
-HSPLandroid/content/ContextWrapper;->getAttributionTag()Ljava/lang/String;
+HSPLandroid/content/ContextWrapper;->getAttributionTag()Ljava/lang/String;+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->getAutofillClient()Landroid/view/autofill/AutofillManager$AutofillClient;
-HSPLandroid/content/ContextWrapper;->getAutofillOptions()Landroid/content/AutofillOptions;
+HSPLandroid/content/ContextWrapper;->getAutofillOptions()Landroid/content/AutofillOptions;+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->getBaseContext()Landroid/content/Context;
 HSPLandroid/content/ContextWrapper;->getBasePackageName()Ljava/lang/String;
 HSPLandroid/content/ContextWrapper;->getCacheDir()Ljava/io/File;
-HSPLandroid/content/ContextWrapper;->getClassLoader()Ljava/lang/ClassLoader;
+HSPLandroid/content/ContextWrapper;->getClassLoader()Ljava/lang/ClassLoader;+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->getContentCaptureOptions()Landroid/content/ContentCaptureOptions;+]Landroid/content/Context;missing_types
-HSPLandroid/content/ContextWrapper;->getContentResolver()Landroid/content/ContentResolver;
+HSPLandroid/content/ContextWrapper;->getContentResolver()Landroid/content/ContentResolver;+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->getDataDir()Ljava/io/File;
-HSPLandroid/content/ContextWrapper;->getDatabasePath(Ljava/lang/String;)Ljava/io/File;
+HSPLandroid/content/ContextWrapper;->getDatabasePath(Ljava/lang/String;)Ljava/io/File;+]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLandroid/content/ContextWrapper;->getDir(Ljava/lang/String;I)Ljava/io/File;
 HSPLandroid/content/ContextWrapper;->getDisplay()Landroid/view/Display;
-HSPLandroid/content/ContextWrapper;->getDisplayId()I
+HSPLandroid/content/ContextWrapper;->getDisplayId()I+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->getDisplayNoVerify()Landroid/view/Display;
 HSPLandroid/content/ContextWrapper;->getExternalCacheDir()Ljava/io/File;
 HSPLandroid/content/ContextWrapper;->getExternalCacheDirs()[Ljava/io/File;
@@ -3890,36 +3899,36 @@
 HSPLandroid/content/ContextWrapper;->getExternalFilesDirs(Ljava/lang/String;)[Ljava/io/File;
 HSPLandroid/content/ContextWrapper;->getExternalMediaDirs()[Ljava/io/File;
 HSPLandroid/content/ContextWrapper;->getFileStreamPath(Ljava/lang/String;)Ljava/io/File;
-HSPLandroid/content/ContextWrapper;->getFilesDir()Ljava/io/File;
+HSPLandroid/content/ContextWrapper;->getFilesDir()Ljava/io/File;+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->getMainExecutor()Ljava/util/concurrent/Executor;
 HSPLandroid/content/ContextWrapper;->getMainLooper()Landroid/os/Looper;
 HSPLandroid/content/ContextWrapper;->getMainThreadHandler()Landroid/os/Handler;
 HSPLandroid/content/ContextWrapper;->getNextAutofillId()I
 HSPLandroid/content/ContextWrapper;->getNoBackupFilesDir()Ljava/io/File;
-HSPLandroid/content/ContextWrapper;->getOpPackageName()Ljava/lang/String;
+HSPLandroid/content/ContextWrapper;->getOpPackageName()Ljava/lang/String;+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->getPackageCodePath()Ljava/lang/String;
-HSPLandroid/content/ContextWrapper;->getPackageManager()Landroid/content/pm/PackageManager;
-HSPLandroid/content/ContextWrapper;->getPackageName()Ljava/lang/String;
+HSPLandroid/content/ContextWrapper;->getPackageManager()Landroid/content/pm/PackageManager;+]Landroid/content/Context;missing_types
+HSPLandroid/content/ContextWrapper;->getPackageName()Ljava/lang/String;+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->getPackageResourcePath()Ljava/lang/String;
-HSPLandroid/content/ContextWrapper;->getResources()Landroid/content/res/Resources;
+HSPLandroid/content/ContextWrapper;->getResources()Landroid/content/res/Resources;+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences;+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->getSharedPreferencesPath(Ljava/lang/String;)Ljava/io/File;
-HSPLandroid/content/ContextWrapper;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
-HSPLandroid/content/ContextWrapper;->getSystemServiceName(Ljava/lang/Class;)Ljava/lang/String;
-HSPLandroid/content/ContextWrapper;->getTheme()Landroid/content/res/Resources$Theme;
-HSPLandroid/content/ContextWrapper;->getUser()Landroid/os/UserHandle;
+HSPLandroid/content/ContextWrapper;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;+]Landroid/content/Context;missing_types
+HSPLandroid/content/ContextWrapper;->getSystemServiceName(Ljava/lang/Class;)Ljava/lang/String;+]Landroid/content/Context;missing_types
+HSPLandroid/content/ContextWrapper;->getTheme()Landroid/content/res/Resources$Theme;+]Landroid/content/Context;missing_types
+HSPLandroid/content/ContextWrapper;->getUser()Landroid/os/UserHandle;+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->getUserId()I
 HSPLandroid/content/ContextWrapper;->getWindowContextToken()Landroid/os/IBinder;+]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLandroid/content/ContextWrapper;->grantUriPermission(Ljava/lang/String;Landroid/net/Uri;I)V
-HSPLandroid/content/ContextWrapper;->isDeviceProtectedStorage()Z
-HSPLandroid/content/ContextWrapper;->isRestricted()Z
+HSPLandroid/content/ContextWrapper;->isDeviceProtectedStorage()Z+]Landroid/content/Context;missing_types
+HSPLandroid/content/ContextWrapper;->isRestricted()Z+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->isUiContext()Z
 HSPLandroid/content/ContextWrapper;->openFileInput(Ljava/lang/String;)Ljava/io/FileInputStream;
 HSPLandroid/content/ContextWrapper;->openFileOutput(Ljava/lang/String;I)Ljava/io/FileOutputStream;
 HSPLandroid/content/ContextWrapper;->openOrCreateDatabase(Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/content/ContextWrapper;->registerComponentCallbacks(Landroid/content/ComponentCallbacks;)V
 HSPLandroid/content/ContextWrapper;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Intent;
-HSPLandroid/content/ContextWrapper;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;I)Landroid/content/Intent;
+HSPLandroid/content/ContextWrapper;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;I)Landroid/content/Intent;+]Landroid/content/Context;missing_types
 HSPLandroid/content/ContextWrapper;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;)Landroid/content/Intent;
 HSPLandroid/content/ContextWrapper;->registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;I)Landroid/content/Intent;
 HSPLandroid/content/ContextWrapper;->registerReceiverAsUser(Landroid/content/BroadcastReceiver;Landroid/os/UserHandle;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;)Landroid/content/Intent;
@@ -3955,7 +3964,7 @@
 HSPLandroid/content/IContentService$Stub$Proxy;->getPeriodicSyncs(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;)Ljava/util/List;
 HSPLandroid/content/IContentService$Stub$Proxy;->getSyncAdapterTypes()[Landroid/content/SyncAdapterType;
 HSPLandroid/content/IContentService$Stub$Proxy;->getSyncAutomatically(Landroid/accounts/Account;Ljava/lang/String;)Z
-HSPLandroid/content/IContentService$Stub$Proxy;->notifyChange([Landroid/net/Uri;Landroid/database/IContentObserver;ZIIILjava/lang/String;)V
+HSPLandroid/content/IContentService$Stub$Proxy;->notifyChange([Landroid/net/Uri;Landroid/database/IContentObserver;ZIIILjava/lang/String;)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/IContentService$Stub$Proxy;->registerContentObserver(Landroid/net/Uri;ZLandroid/database/IContentObserver;II)V
 HSPLandroid/content/IContentService$Stub$Proxy;->removePeriodicSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)V
 HSPLandroid/content/IContentService$Stub$Proxy;->setIsSyncable(Landroid/accounts/Account;Ljava/lang/String;I)V
@@ -3967,10 +3976,10 @@
 HSPLandroid/content/IIntentReceiver$Stub;-><init>()V
 HSPLandroid/content/IIntentReceiver$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/content/IIntentReceiver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IIntentReceiver;
-HSPLandroid/content/IIntentReceiver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/content/IIntentReceiver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z+]Landroid/content/IIntentReceiver$Stub;Landroid/app/PendingIntent$FinishedDispatcher;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/IIntentSender$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/content/IIntentSender$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/content/IIntentSender$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IIntentSender;
+HSPLandroid/content/IIntentSender$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/IIntentSender;+]Landroid/os/IBinder;Landroid/os/BinderProxy;
 HSPLandroid/content/IOnPrimaryClipChangedListener$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/content/IRestrictionsManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/content/IRestrictionsManager$Stub$Proxy;->getApplicationRestrictions(Ljava/lang/String;)Landroid/os/Bundle;
@@ -3994,7 +4003,7 @@
 HSPLandroid/content/Intent;-><init>(Landroid/content/Intent;)V
 HSPLandroid/content/Intent;-><init>(Landroid/content/Intent;I)V
 HSPLandroid/content/Intent;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/content/Intent;-><init>(Ljava/lang/String;)V
+HSPLandroid/content/Intent;-><init>(Ljava/lang/String;)V+]Landroid/content/Intent;Landroid/content/Intent;
 HSPLandroid/content/Intent;-><init>(Ljava/lang/String;Landroid/net/Uri;)V
 HSPLandroid/content/Intent;-><init>(Ljava/lang/String;Landroid/net/Uri;Landroid/content/Context;Ljava/lang/Class;)V
 HSPLandroid/content/Intent;->addCategory(Ljava/lang/String;)Landroid/content/Intent;
@@ -4036,13 +4045,13 @@
 HSPLandroid/content/Intent;->isImageCaptureIntent()Z
 HSPLandroid/content/Intent;->isWebIntent()Z
 HSPLandroid/content/Intent;->makeMainActivity(Landroid/content/ComponentName;)Landroid/content/Intent;
-HSPLandroid/content/Intent;->migrateExtraStreamToClipData(Landroid/content/Context;)Z
+HSPLandroid/content/Intent;->migrateExtraStreamToClipData(Landroid/content/Context;)Z+]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLandroid/content/Intent;->parseIntent(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;)Landroid/content/Intent;
 HSPLandroid/content/Intent;->parseUri(Ljava/lang/String;I)Landroid/content/Intent;
-HSPLandroid/content/Intent;->parseUriInternal(Ljava/lang/String;I)Landroid/content/Intent;+]Ljava/lang/String;Ljava/lang/String;
-HSPLandroid/content/Intent;->prepareToEnterProcess(ZLandroid/content/AttributionSource;)V
-HSPLandroid/content/Intent;->prepareToLeaveProcess(Landroid/content/Context;)V
-HSPLandroid/content/Intent;->prepareToLeaveProcess(Z)V
+HSPLandroid/content/Intent;->parseUriInternal(Ljava/lang/String;I)Landroid/content/Intent;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLandroid/content/Intent;->prepareToEnterProcess(ZLandroid/content/AttributionSource;)V+]Ljava/lang/String;Ljava/lang/String;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLandroid/content/Intent;->prepareToLeaveProcess(Landroid/content/Context;)V+]Landroid/content/Context;missing_types]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLandroid/content/Intent;->prepareToLeaveProcess(Z)V+]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/content/Intent;Landroid/content/Intent;]Ljava/lang/String;Ljava/lang/String;]Landroid/net/Uri;Landroid/net/Uri$OpaqueUri;
 HSPLandroid/content/Intent;->putExtra(Ljava/lang/String;I)Landroid/content/Intent;
 HSPLandroid/content/Intent;->putExtra(Ljava/lang/String;J)Landroid/content/Intent;
 HSPLandroid/content/Intent;->putExtra(Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/Intent;
@@ -4060,7 +4069,7 @@
 HSPLandroid/content/Intent;->putExtras(Landroid/os/Bundle;)Landroid/content/Intent;
 HSPLandroid/content/Intent;->putParcelableArrayListExtra(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;
 HSPLandroid/content/Intent;->putStringArrayListExtra(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;
-HSPLandroid/content/Intent;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/content/Intent;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/net/Uri$1;,Landroid/graphics/Rect$1;]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLandroid/content/Intent;->removeCategory(Ljava/lang/String;)V
 HSPLandroid/content/Intent;->removeExtra(Ljava/lang/String;)V
 HSPLandroid/content/Intent;->replaceExtras(Landroid/os/Bundle;)Landroid/content/Intent;
@@ -4068,8 +4077,8 @@
 HSPLandroid/content/Intent;->resolveActivityInfo(Landroid/content/pm/PackageManager;I)Landroid/content/pm/ActivityInfo;
 HSPLandroid/content/Intent;->resolveSystemService(Landroid/content/pm/PackageManager;I)Landroid/content/ComponentName;
 HSPLandroid/content/Intent;->resolveType(Landroid/content/ContentResolver;)Ljava/lang/String;
-HSPLandroid/content/Intent;->resolveTypeIfNeeded(Landroid/content/ContentResolver;)Ljava/lang/String;
-HSPLandroid/content/Intent;->setAction(Ljava/lang/String;)Landroid/content/Intent;
+HSPLandroid/content/Intent;->resolveTypeIfNeeded(Landroid/content/ContentResolver;)Ljava/lang/String;+]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLandroid/content/Intent;->setAction(Ljava/lang/String;)Landroid/content/Intent;+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/content/Intent;->setAllowFds(Z)V
 HSPLandroid/content/Intent;->setClass(Landroid/content/Context;Ljava/lang/Class;)Landroid/content/Intent;
 HSPLandroid/content/Intent;->setClassName(Landroid/content/Context;Ljava/lang/String;)Landroid/content/Intent;
@@ -4086,12 +4095,12 @@
 HSPLandroid/content/Intent;->setSelector(Landroid/content/Intent;)V
 HSPLandroid/content/Intent;->setSourceBounds(Landroid/graphics/Rect;)V
 HSPLandroid/content/Intent;->setType(Ljava/lang/String;)Landroid/content/Intent;
-HSPLandroid/content/Intent;->toShortString(Ljava/lang/StringBuilder;ZZZZ)V
+HSPLandroid/content/Intent;->toShortString(Ljava/lang/StringBuilder;ZZZZ)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLandroid/content/Intent;->toString()Ljava/lang/String;
 HSPLandroid/content/Intent;->toUri(I)Ljava/lang/String;
 HSPLandroid/content/Intent;->toUriFragment(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
 HSPLandroid/content/Intent;->toUriInner(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
-HSPLandroid/content/Intent;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/Intent;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/IntentFilter$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLandroid/content/IntentFilter$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/IntentFilter;
 HSPLandroid/content/IntentFilter$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -4103,22 +4112,22 @@
 HSPLandroid/content/IntentFilter;-><init>()V
 HSPLandroid/content/IntentFilter;-><init>(Landroid/content/IntentFilter;)V
 HSPLandroid/content/IntentFilter;-><init>(Landroid/os/Parcel;)V+]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/content/IntentFilter;-><init>(Ljava/lang/String;)V
+HSPLandroid/content/IntentFilter;-><init>(Ljava/lang/String;)V+]Landroid/content/IntentFilter;Landroid/content/IntentFilter;
 HSPLandroid/content/IntentFilter;->actionsIterator()Ljava/util/Iterator;
-HSPLandroid/content/IntentFilter;->addAction(Ljava/lang/String;)V
+HSPLandroid/content/IntentFilter;->addAction(Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/content/IntentFilter;->addCategory(Ljava/lang/String;)V
 HSPLandroid/content/IntentFilter;->addDataAuthority(Landroid/content/IntentFilter$AuthorityEntry;)V
 HSPLandroid/content/IntentFilter;->addDataAuthority(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/content/IntentFilter;->addDataPath(Landroid/os/PatternMatcher;)V
 HSPLandroid/content/IntentFilter;->addDataPath(Ljava/lang/String;I)V
-HSPLandroid/content/IntentFilter;->addDataScheme(Ljava/lang/String;)V
+HSPLandroid/content/IntentFilter;->addDataScheme(Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/content/IntentFilter;->addDataSchemeSpecificPart(Landroid/os/PatternMatcher;)V
 HSPLandroid/content/IntentFilter;->addDataSchemeSpecificPart(Ljava/lang/String;I)V
 HSPLandroid/content/IntentFilter;->addDataType(Ljava/lang/String;)V
 HSPLandroid/content/IntentFilter;->authoritiesIterator()Ljava/util/Iterator;
 HSPLandroid/content/IntentFilter;->categoriesIterator()Ljava/util/Iterator;
-HSPLandroid/content/IntentFilter;->countActions()I
-HSPLandroid/content/IntentFilter;->countCategories()I
+HSPLandroid/content/IntentFilter;->countActions()I+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/content/IntentFilter;->countCategories()I+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/content/IntentFilter;->countDataAuthorities()I
 HSPLandroid/content/IntentFilter;->countDataPaths()I
 HSPLandroid/content/IntentFilter;->countDataSchemes()I
@@ -4127,7 +4136,7 @@
 HSPLandroid/content/IntentFilter;->debugCheck()Z
 HSPLandroid/content/IntentFilter;->getAction(I)Ljava/lang/String;
 HSPLandroid/content/IntentFilter;->getAutoVerify()Z
-HSPLandroid/content/IntentFilter;->getCategory(I)Ljava/lang/String;
+HSPLandroid/content/IntentFilter;->getCategory(I)Ljava/lang/String;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/content/IntentFilter;->getDataScheme(I)Ljava/lang/String;
 HSPLandroid/content/IntentFilter;->getHosts()[Ljava/lang/String;
 HSPLandroid/content/IntentFilter;->getHostsList()Ljava/util/ArrayList;
@@ -4153,12 +4162,12 @@
 HSPLandroid/content/IntentFilter;->setPriority(I)V
 HSPLandroid/content/IntentFilter;->setVisibilityToInstantApp(I)V
 HSPLandroid/content/IntentFilter;->typesIterator()Ljava/util/Iterator;
-HSPLandroid/content/IntentFilter;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/IntentFilter;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/IntentSender;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/content/LocusId$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/LocusId;
-HSPLandroid/content/LocusId$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/content/LocusId$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/LocusId;+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/LocusId$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/content/LocusId$1;Landroid/content/LocusId$1;
 HSPLandroid/content/LocusId;-><init>(Ljava/lang/String;)V
-HSPLandroid/content/LocusId;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/LocusId;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/PeriodicSync$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/PeriodicSync;
 HSPLandroid/content/PeriodicSync$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/PeriodicSync;-><init>(Landroid/os/Parcel;)V
@@ -4233,7 +4242,7 @@
 HSPLandroid/content/om/OverlayInfo;->ensureValidState()V
 HSPLandroid/content/om/OverlayInfo;->isEnabled()Z
 HSPLandroid/content/pm/ActivityInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ActivityInfo;
-HSPLandroid/content/pm/ActivityInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/content/pm/ActivityInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/content/pm/ActivityInfo$1;Landroid/content/pm/ActivityInfo$1;
 HSPLandroid/content/pm/ActivityInfo$1;->newArray(I)[Landroid/content/pm/ActivityInfo;
 HSPLandroid/content/pm/ActivityInfo$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/content/pm/ActivityInfo$WindowLayout;-><init>(Landroid/os/Parcel;)V
@@ -4251,8 +4260,8 @@
 HSPLandroid/content/pm/ApkChecksum;->getValue()[B
 HSPLandroid/content/pm/ApplicationInfo$1$$ExternalSyntheticLambda0;-><init>()V
 HSPLandroid/content/pm/ApplicationInfo$1$$ExternalSyntheticLambda0;->readRawParceled(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/pm/ApplicationInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ApplicationInfo;
-HSPLandroid/content/pm/ApplicationInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/content/pm/ApplicationInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ApplicationInfo;+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/pm/ApplicationInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/content/pm/ApplicationInfo$1;Landroid/content/pm/ApplicationInfo$1;
 HSPLandroid/content/pm/ApplicationInfo$1;->lambda$createFromParcel$0(Landroid/os/Parcel;)Landroid/content/pm/ApplicationInfo;
 HSPLandroid/content/pm/ApplicationInfo;-><init>()V
 HSPLandroid/content/pm/ApplicationInfo;-><init>(Landroid/content/pm/ApplicationInfo;)V+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;
@@ -4300,10 +4309,10 @@
 HSPLandroid/content/pm/BaseParceledListSlice;-><init>(Landroid/os/Parcel;Ljava/lang/ClassLoader;)V+]Landroid/content/pm/BaseParceledListSlice;Landroid/content/pm/ParceledListSlice;]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/BaseParceledListSlice;-><init>(Ljava/util/List;)V
 HSPLandroid/content/pm/BaseParceledListSlice;->getList()Ljava/util/List;
-HSPLandroid/content/pm/BaseParceledListSlice;->readCreator(Landroid/os/Parcelable$Creator;Landroid/os/Parcel;Ljava/lang/ClassLoader;)Ljava/lang/Object;
+HSPLandroid/content/pm/BaseParceledListSlice;->readCreator(Landroid/os/Parcelable$Creator;Landroid/os/Parcel;Ljava/lang/ClassLoader;)Ljava/lang/Object;+]Landroid/os/Parcelable$Creator;megamorphic_types
 HSPLandroid/content/pm/BaseParceledListSlice;->readVerifyAndAddElement(Landroid/os/Parcelable$Creator;Landroid/os/Parcel;Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/lang/Class;+]Ljava/lang/Object;megamorphic_types]Ljava/util/List;Ljava/util/ArrayList;
-HSPLandroid/content/pm/BaseParceledListSlice;->verifySameType(Ljava/lang/Class;Ljava/lang/Class;)V
-HSPLandroid/content/pm/BaseParceledListSlice;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/pm/BaseParceledListSlice;->verifySameType(Ljava/lang/Class;Ljava/lang/Class;)V+]Ljava/lang/Object;Ljava/lang/Class;
+HSPLandroid/content/pm/BaseParceledListSlice;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/content/pm/BaseParceledListSlice;Landroid/content/pm/ParceledListSlice;]Ljava/lang/Object;Landroid/app/NotificationChannel;,Landroid/view/contentcapture/ContentCaptureEvent;,Landroid/app/NotificationChannelGroup;,Landroid/content/pm/ShortcutInfo;]Ljava/util/List;Ljava/util/Arrays$ArrayList;,Ljava/util/ArrayList;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/Checksum$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/Checksum;
 HSPLandroid/content/pm/Checksum$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/pm/Checksum;-><init>(Landroid/os/Parcel;)V
@@ -4368,7 +4377,7 @@
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->hasSystemFeature(Ljava/lang/String;I)Z
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->isInstantApp(Ljava/lang/String;I)Z
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->isPackageSuspendedForUser(Ljava/lang/String;I)Z
-HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->isProtectedBroadcast(Ljava/lang/String;)Z
+HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->isProtectedBroadcast(Ljava/lang/String;)Z+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->lambda$notifyDexLoad$0(Landroid/os/Parcel;Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->notifyDexLoad(Ljava/lang/String;Ljava/util/Map;Ljava/lang/String;)V
 HSPLandroid/content/pm/IPackageManager$Stub$Proxy;->notifyPackageUse(Ljava/lang/String;I)V
@@ -4424,7 +4433,7 @@
 HSPLandroid/content/pm/PackageInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/PackageInfo;
 HSPLandroid/content/pm/PackageInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/pm/PackageInfo;-><init>()V
-HSPLandroid/content/pm/PackageInfo;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/content/pm/ApplicationInfo$1;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/content/pm/PackageInfo;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/content/pm/ApplicationInfo$1;,Landroid/content/pm/SigningInfo$1;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/PackageInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/PackageInfo-IA;)V
 HSPLandroid/content/pm/PackageInfo;->composeLongVersionCode(II)J
 HSPLandroid/content/pm/PackageInfo;->getLongVersionCode()J
@@ -4455,11 +4464,11 @@
 HSPLandroid/content/pm/PackageItemInfo;->loadSafeLabel(Landroid/content/pm/PackageManager;FI)Ljava/lang/CharSequence;
 HSPLandroid/content/pm/PackageItemInfo;->loadUnsafeLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;
 HSPLandroid/content/pm/PackageItemInfo;->loadXmlMetaData(Landroid/content/pm/PackageManager;Ljava/lang/String;)Landroid/content/res/XmlResourceParser;
-HSPLandroid/content/pm/PackageItemInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/pm/PackageItemInfo;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/PackageManager$1;->recompute(Landroid/content/pm/PackageManager$ApplicationInfoQuery;)Landroid/content/pm/ApplicationInfo;
 HSPLandroid/content/pm/PackageManager$1;->recompute(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/content/pm/PackageManager$2;->recompute(Landroid/content/pm/PackageManager$PackageInfoQuery;)Landroid/content/pm/PackageInfo;
-HSPLandroid/content/pm/PackageManager$2;->recompute(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/content/pm/PackageManager$2;->recompute(Ljava/lang/Object;)Ljava/lang/Object;+]Landroid/content/pm/PackageManager$2;Landroid/content/pm/PackageManager$2;
 HSPLandroid/content/pm/PackageManager$ApplicationInfoFlags;-><init>(J)V
 HSPLandroid/content/pm/PackageManager$ApplicationInfoFlags;->of(J)Landroid/content/pm/PackageManager$ApplicationInfoFlags;
 HSPLandroid/content/pm/PackageManager$ApplicationInfoQuery;-><init>(Ljava/lang/String;JI)V
@@ -4604,19 +4613,19 @@
 HSPLandroid/content/pm/ProviderInfoList;->getList()Ljava/util/List;
 HSPLandroid/content/pm/RegisteredServicesCache;->containsType(Ljava/util/ArrayList;Ljava/lang/Object;)Z
 HSPLandroid/content/pm/ResolveInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ResolveInfo;
-HSPLandroid/content/pm/ResolveInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/content/pm/ResolveInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/content/pm/ResolveInfo$1;Landroid/content/pm/ResolveInfo$1;
 HSPLandroid/content/pm/ResolveInfo;-><init>()V
 HSPLandroid/content/pm/ResolveInfo;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/content/pm/ServiceInfo$1;,Landroid/content/pm/ActivityInfo$1;,Landroid/text/TextUtils$1;,Landroid/content/IntentFilter$1;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/ResolveInfo;-><init>(Landroid/os/Parcel;Landroid/content/pm/ResolveInfo-IA;)V
 HSPLandroid/content/pm/ResolveInfo;->getComponentInfo()Landroid/content/pm/ComponentInfo;
 HSPLandroid/content/pm/ResolveInfo;->loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/content/pm/ResolveInfo;->loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;
-HSPLandroid/content/pm/ResolveInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/pm/ResolveInfo;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/content/pm/ServiceInfo;Landroid/content/pm/ServiceInfo;]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/ServiceInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ServiceInfo;
-HSPLandroid/content/pm/ServiceInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/content/pm/ServiceInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/content/pm/ServiceInfo$1;Landroid/content/pm/ServiceInfo$1;
 HSPLandroid/content/pm/ServiceInfo$1;->newArray(I)[Landroid/content/pm/ServiceInfo;
 HSPLandroid/content/pm/ServiceInfo$1;->newArray(I)[Ljava/lang/Object;
-HSPLandroid/content/pm/ServiceInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/content/pm/ServiceInfo;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/ServiceInfo;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/content/pm/SharedLibraryInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/SharedLibraryInfo;
 HSPLandroid/content/pm/SharedLibraryInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/content/pm/SharedLibraryInfo$1;Landroid/content/pm/SharedLibraryInfo$1;
@@ -4630,9 +4639,9 @@
 HSPLandroid/content/pm/SharedLibraryInfo;->getPath()Ljava/lang/String;
 HSPLandroid/content/pm/SharedLibraryInfo;->isNative()Z
 HSPLandroid/content/pm/SharedLibraryInfo;->isSdk()Z
-HSPLandroid/content/pm/SharedLibraryInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/pm/SharedLibraryInfo;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/ShortcutInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/pm/ShortcutInfo;
-HSPLandroid/content/pm/ShortcutInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/content/pm/ShortcutInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/content/pm/ShortcutInfo$1;Landroid/content/pm/ShortcutInfo$1;
 HSPLandroid/content/pm/ShortcutInfo$Builder;-><init>(Landroid/content/Context;Ljava/lang/String;)V
 HSPLandroid/content/pm/ShortcutInfo$Builder;->build()Landroid/content/pm/ShortcutInfo;
 HSPLandroid/content/pm/ShortcutInfo$Builder;->setCategories(Ljava/util/Set;)Landroid/content/pm/ShortcutInfo$Builder;
@@ -4669,7 +4678,7 @@
 HSPLandroid/content/pm/ShortcutInfo;->hasIconFile()Z
 HSPLandroid/content/pm/ShortcutInfo;->hasIconResource()Z
 HSPLandroid/content/pm/ShortcutInfo;->hasIconUri()Z
-HSPLandroid/content/pm/ShortcutInfo;->hasKeyFieldsOnly()Z
+HSPLandroid/content/pm/ShortcutInfo;->hasKeyFieldsOnly()Z+]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;
 HSPLandroid/content/pm/ShortcutInfo;->isCached()Z
 HSPLandroid/content/pm/ShortcutInfo;->isDeclaredInManifest()Z
 HSPLandroid/content/pm/ShortcutInfo;->isDynamic()Z
@@ -4678,7 +4687,7 @@
 HSPLandroid/content/pm/ShortcutInfo;->setIntentExtras(Landroid/content/Intent;Landroid/os/PersistableBundle;)Landroid/content/Intent;
 HSPLandroid/content/pm/ShortcutInfo;->updateTimestamp()V
 HSPLandroid/content/pm/ShortcutInfo;->validateIcon(Landroid/graphics/drawable/Icon;)Landroid/graphics/drawable/Icon;
-HSPLandroid/content/pm/ShortcutInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/pm/ShortcutInfo;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/pm/ShortcutManager;-><init>(Landroid/content/Context;Landroid/content/pm/IShortcutService;)V
 HSPLandroid/content/pm/ShortcutManager;->addDynamicShortcuts(Ljava/util/List;)Z
 HSPLandroid/content/pm/ShortcutManager;->getDynamicShortcuts()Ljava/util/List;
@@ -4760,7 +4769,7 @@
 HSPLandroid/content/pm/permission/SplitPermissionInfoParcelable;->getTargetSdk()I
 HSPLandroid/content/pm/permission/SplitPermissionInfoParcelable;->onConstructed()V
 HSPLandroid/content/pm/split/SplitDependencyLoader;->collectConfigSplitIndices(I)[I
-HSPLandroid/content/pm/split/SplitDependencyLoader;->loadDependenciesForSplit(I)V+]Landroid/content/pm/split/SplitDependencyLoader;missing_types]Landroid/util/IntArray;Landroid/util/IntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLandroid/content/pm/split/SplitDependencyLoader;->loadDependenciesForSplit(I)V+]Landroid/util/IntArray;Landroid/util/IntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/pm/split/SplitDependencyLoader;missing_types
 HSPLandroid/content/res/ApkAssets;-><init>(ILjava/lang/String;ILandroid/content/res/loader/AssetsProvider;)V
 HSPLandroid/content/res/ApkAssets;->close()V
 HSPLandroid/content/res/ApkAssets;->definesOverlayable()Z
@@ -4768,7 +4777,7 @@
 HSPLandroid/content/res/ApkAssets;->finalize()V
 HSPLandroid/content/res/ApkAssets;->getAssetPath()Ljava/lang/String;
 HSPLandroid/content/res/ApkAssets;->getDebugName()Ljava/lang/String;
-HSPLandroid/content/res/ApkAssets;->getStringFromPool(I)Ljava/lang/CharSequence;
+HSPLandroid/content/res/ApkAssets;->getStringFromPool(I)Ljava/lang/CharSequence;+]Landroid/content/res/StringBlock;Landroid/content/res/StringBlock;
 HSPLandroid/content/res/ApkAssets;->isUpToDate()Z
 HSPLandroid/content/res/ApkAssets;->loadFromPath(Ljava/lang/String;)Landroid/content/res/ApkAssets;
 HSPLandroid/content/res/ApkAssets;->loadFromPath(Ljava/lang/String;I)Landroid/content/res/ApkAssets;
@@ -4792,7 +4801,7 @@
 HSPLandroid/content/res/AssetManager$AssetInputStream;-><init>(Landroid/content/res/AssetManager;J)V
 HSPLandroid/content/res/AssetManager$AssetInputStream;-><init>(Landroid/content/res/AssetManager;JLandroid/content/res/AssetManager$AssetInputStream-IA;)V
 HSPLandroid/content/res/AssetManager$AssetInputStream;->available()I
-HSPLandroid/content/res/AssetManager$AssetInputStream;->close()V
+HSPLandroid/content/res/AssetManager$AssetInputStream;->close()V+]Ljava/lang/Object;Landroid/content/res/AssetManager$AssetInputStream;
 HSPLandroid/content/res/AssetManager$AssetInputStream;->ensureOpen()V
 HSPLandroid/content/res/AssetManager$AssetInputStream;->finalize()V
 HSPLandroid/content/res/AssetManager$AssetInputStream;->getNativeAsset()J
@@ -4803,7 +4812,7 @@
 HSPLandroid/content/res/AssetManager$AssetInputStream;->read([BII)I
 HSPLandroid/content/res/AssetManager$Builder;-><init>()V
 HSPLandroid/content/res/AssetManager$Builder;->addApkAssets(Landroid/content/res/ApkAssets;)Landroid/content/res/AssetManager$Builder;
-HSPLandroid/content/res/AssetManager$Builder;->build()Landroid/content/res/AssetManager;
+HSPLandroid/content/res/AssetManager$Builder;->build()Landroid/content/res/AssetManager;+]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/content/res/AssetManager;->-$$Nest$fgetmObject(Landroid/content/res/AssetManager;)J
 HSPLandroid/content/res/AssetManager;->-$$Nest$fputmApkAssets(Landroid/content/res/AssetManager;[Landroid/content/res/ApkAssets;)V
 HSPLandroid/content/res/AssetManager;->-$$Nest$fputmLoaders(Landroid/content/res/AssetManager;[Landroid/content/res/loader/ResourcesLoader;)V
@@ -4813,7 +4822,7 @@
 HSPLandroid/content/res/AssetManager;->-$$Nest$smnativeAssetGetRemainingLength(J)J
 HSPLandroid/content/res/AssetManager;->-$$Nest$smnativeAssetRead(J[BII)I
 HSPLandroid/content/res/AssetManager;->-$$Nest$smnativeSetApkAssets(J[Landroid/content/res/ApkAssets;Z)V
-HSPLandroid/content/res/AssetManager;-><init>()V
+HSPLandroid/content/res/AssetManager;-><init>()V+]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
 HSPLandroid/content/res/AssetManager;-><init>(Z)V
 HSPLandroid/content/res/AssetManager;-><init>(ZLandroid/content/res/AssetManager-IA;)V
 HSPLandroid/content/res/AssetManager;->addAssetPathInternal(Ljava/lang/String;ZZ)I
@@ -4836,10 +4845,10 @@
 HSPLandroid/content/res/AssetManager;->getLocales()[Ljava/lang/String;
 HSPLandroid/content/res/AssetManager;->getNonSystemLocales()[Ljava/lang/String;
 HSPLandroid/content/res/AssetManager;->getParentThemeIdentifier(I)I
-HSPLandroid/content/res/AssetManager;->getPooledStringForCookie(II)Ljava/lang/CharSequence;
+HSPLandroid/content/res/AssetManager;->getPooledStringForCookie(II)Ljava/lang/CharSequence;+]Landroid/content/res/ApkAssets;Landroid/content/res/ApkAssets;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
 HSPLandroid/content/res/AssetManager;->getResourceArray(I[I)I
 HSPLandroid/content/res/AssetManager;->getResourceArraySize(I)I
-HSPLandroid/content/res/AssetManager;->getResourceBagText(II)Ljava/lang/CharSequence;
+HSPLandroid/content/res/AssetManager;->getResourceBagText(II)Ljava/lang/CharSequence;+]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
 HSPLandroid/content/res/AssetManager;->getResourceEntryName(I)Ljava/lang/String;
 HSPLandroid/content/res/AssetManager;->getResourceIdentifier(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/content/res/AssetManager;->getResourceIntArray(I)[I
@@ -4849,7 +4858,7 @@
 HSPLandroid/content/res/AssetManager;->getResourceText(I)Ljava/lang/CharSequence;
 HSPLandroid/content/res/AssetManager;->getResourceTextArray(I)[Ljava/lang/CharSequence;
 HSPLandroid/content/res/AssetManager;->getResourceTypeName(I)Ljava/lang/String;
-HSPLandroid/content/res/AssetManager;->getResourceValue(IILandroid/util/TypedValue;Z)Z
+HSPLandroid/content/res/AssetManager;->getResourceValue(IILandroid/util/TypedValue;Z)Z+]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
 HSPLandroid/content/res/AssetManager;->getSizeConfigurations()[Landroid/content/res/Configuration;
 HSPLandroid/content/res/AssetManager;->getSystem()Landroid/content/res/AssetManager;
 HSPLandroid/content/res/AssetManager;->getThemeValue(JILandroid/util/TypedValue;Z)Z+]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
@@ -4859,7 +4868,7 @@
 HSPLandroid/content/res/AssetManager;->open(Ljava/lang/String;)Ljava/io/InputStream;
 HSPLandroid/content/res/AssetManager;->open(Ljava/lang/String;I)Ljava/io/InputStream;
 HSPLandroid/content/res/AssetManager;->openFd(Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;
-HSPLandroid/content/res/AssetManager;->openNonAsset(ILjava/lang/String;I)Ljava/io/InputStream;
+HSPLandroid/content/res/AssetManager;->openNonAsset(ILjava/lang/String;I)Ljava/io/InputStream;+]Ljava/lang/Object;Landroid/content/res/AssetManager$AssetInputStream;
 HSPLandroid/content/res/AssetManager;->openNonAssetFd(ILjava/lang/String;)Landroid/content/res/AssetFileDescriptor;
 HSPLandroid/content/res/AssetManager;->openNonAssetFd(Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;
 HSPLandroid/content/res/AssetManager;->openXmlBlockAsset(ILjava/lang/String;)Landroid/content/res/XmlBlock;+]Ljava/lang/Object;Landroid/content/res/XmlBlock;
@@ -4868,18 +4877,18 @@
 HSPLandroid/content/res/AssetManager;->releaseTheme(J)V
 HSPLandroid/content/res/AssetManager;->resolveAttrs(JII[I[I[I[I)Z
 HSPLandroid/content/res/AssetManager;->retrieveAttributes(Landroid/content/res/XmlBlock$Parser;[I[I[I)Z
-HSPLandroid/content/res/AssetManager;->setApkAssets([Landroid/content/res/ApkAssets;Z)V
+HSPLandroid/content/res/AssetManager;->setApkAssets([Landroid/content/res/ApkAssets;Z)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLandroid/content/res/AssetManager;->setConfiguration(IILjava/lang/String;IIIIIIIIIIIIIII)V
 HSPLandroid/content/res/AssetManager;->setThemeTo(JLandroid/content/res/AssetManager;J)V
 HSPLandroid/content/res/AssetManager;->xmlBlockGone(I)V
-HSPLandroid/content/res/ColorStateList$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/res/ColorStateList;
+HSPLandroid/content/res/ColorStateList$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/res/ColorStateList;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/res/ColorStateList$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/res/ColorStateList$ColorStateListFactory;-><init>(Landroid/content/res/ColorStateList;)V
 HSPLandroid/content/res/ColorStateList$ColorStateListFactory;->getChangingConfigurations()I
 HSPLandroid/content/res/ColorStateList$ColorStateListFactory;->newInstance()Landroid/content/res/ColorStateList;
 HSPLandroid/content/res/ColorStateList$ColorStateListFactory;->newInstance()Ljava/lang/Object;
-HSPLandroid/content/res/ColorStateList$ColorStateListFactory;->newInstance(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;
-HSPLandroid/content/res/ColorStateList$ColorStateListFactory;->newInstance(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Ljava/lang/Object;
+HSPLandroid/content/res/ColorStateList$ColorStateListFactory;->newInstance(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;
+HSPLandroid/content/res/ColorStateList$ColorStateListFactory;->newInstance(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Ljava/lang/Object;+]Landroid/content/res/ColorStateList$ColorStateListFactory;Landroid/content/res/ColorStateList$ColorStateListFactory;
 HSPLandroid/content/res/ColorStateList;-><init>()V
 HSPLandroid/content/res/ColorStateList;-><init>(Landroid/content/res/ColorStateList;)V
 HSPLandroid/content/res/ColorStateList;-><init>([[I[I)V
@@ -4890,14 +4899,14 @@
 HSPLandroid/content/res/ColorStateList;->getColorForState([II)I
 HSPLandroid/content/res/ColorStateList;->getConstantState()Landroid/content/res/ConstantState;
 HSPLandroid/content/res/ColorStateList;->getDefaultColor()I
-HSPLandroid/content/res/ColorStateList;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/content/res/ColorStateList;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V+]Landroid/util/AttributeSet;Landroid/content/res/XmlBlock$Parser;]Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/XmlBlock$Parser;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/content/res/ColorStateList;->isStateful()Z
 HSPLandroid/content/res/ColorStateList;->modulateColor(IFF)I
-HSPLandroid/content/res/ColorStateList;->obtainForTheme(Landroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;
+HSPLandroid/content/res/ColorStateList;->obtainForTheme(Landroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;
 HSPLandroid/content/res/ColorStateList;->obtainForTheme(Landroid/content/res/Resources$Theme;)Landroid/content/res/ComplexColor;
 HSPLandroid/content/res/ColorStateList;->onColorsChanged()V
-HSPLandroid/content/res/ColorStateList;->valueOf(I)Landroid/content/res/ColorStateList;
-HSPLandroid/content/res/ColorStateList;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/content/res/ColorStateList;->valueOf(I)Landroid/content/res/ColorStateList;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
+HSPLandroid/content/res/ColorStateList;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/content/res/CompatibilityInfo$2;->createFromParcel(Landroid/os/Parcel;)Landroid/content/res/CompatibilityInfo;
 HSPLandroid/content/res/CompatibilityInfo$2;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/content/res/CompatibilityInfo;-><init>(Landroid/os/Parcel;)V
@@ -4915,22 +4924,22 @@
 HSPLandroid/content/res/ComplexColor;->setBaseChangingConfigurations(I)V
 HSPLandroid/content/res/Configuration$1;->createFromParcel(Landroid/os/Parcel;)Landroid/content/res/Configuration;
 HSPLandroid/content/res/Configuration$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/content/res/Configuration;-><init>()V
-HSPLandroid/content/res/Configuration;-><init>(Landroid/content/res/Configuration;)V
+HSPLandroid/content/res/Configuration;-><init>()V+]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
+HSPLandroid/content/res/Configuration;-><init>(Landroid/content/res/Configuration;)V+]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
 HSPLandroid/content/res/Configuration;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/content/res/Configuration;-><init>(Landroid/os/Parcel;Landroid/content/res/Configuration-IA;)V
 HSPLandroid/content/res/Configuration;->compareTo(Landroid/content/res/Configuration;)I+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Landroid/os/LocaleList;Landroid/os/LocaleList;]Ljava/util/Locale;Ljava/util/Locale;
 HSPLandroid/content/res/Configuration;->diff(Landroid/content/res/Configuration;)I
-HSPLandroid/content/res/Configuration;->diff(Landroid/content/res/Configuration;ZZ)I
+HSPLandroid/content/res/Configuration;->diff(Landroid/content/res/Configuration;ZZ)I+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Landroid/os/LocaleList;Landroid/os/LocaleList;
 HSPLandroid/content/res/Configuration;->diffPublicOnly(Landroid/content/res/Configuration;)I
-HSPLandroid/content/res/Configuration;->equals(Landroid/content/res/Configuration;)Z
-HSPLandroid/content/res/Configuration;->equals(Ljava/lang/Object;)Z
+HSPLandroid/content/res/Configuration;->equals(Landroid/content/res/Configuration;)Z+]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
+HSPLandroid/content/res/Configuration;->equals(Ljava/lang/Object;)Z+]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
 HSPLandroid/content/res/Configuration;->fixUpLocaleList()V+]Ljava/util/Locale;Ljava/util/Locale;]Landroid/os/LocaleList;Landroid/os/LocaleList;
 HSPLandroid/content/res/Configuration;->generateDelta(Landroid/content/res/Configuration;Landroid/content/res/Configuration;)Landroid/content/res/Configuration;
 HSPLandroid/content/res/Configuration;->getLayoutDirection()I
 HSPLandroid/content/res/Configuration;->getLocales()Landroid/os/LocaleList;
 HSPLandroid/content/res/Configuration;->getScreenLayoutNoDirection(I)I
-HSPLandroid/content/res/Configuration;->hashCode()I
+HSPLandroid/content/res/Configuration;->hashCode()I+]Landroid/os/LocaleList;Landroid/os/LocaleList;
 HSPLandroid/content/res/Configuration;->isLayoutSizeAtLeast(I)Z
 HSPLandroid/content/res/Configuration;->isOtherSeqNewer(Landroid/content/res/Configuration;)Z
 HSPLandroid/content/res/Configuration;->isScreenRound()Z
@@ -4952,7 +4961,7 @@
 HSPLandroid/content/res/Configuration;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/content/res/ConfigurationBoundResourceCache;-><init>()V
 HSPLandroid/content/res/ConfigurationBoundResourceCache;->get(JLandroid/content/res/Resources$Theme;)Ljava/lang/Object;
-HSPLandroid/content/res/ConfigurationBoundResourceCache;->getInstance(JLandroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Ljava/lang/Object;
+HSPLandroid/content/res/ConfigurationBoundResourceCache;->getInstance(JLandroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Ljava/lang/Object;+]Landroid/content/res/ConstantState;Landroid/animation/StateListAnimator$StateListAnimatorConstantState;,Landroid/content/res/ColorStateList$ColorStateListFactory;,Landroid/animation/Animator$AnimatorConstantState;]Landroid/content/res/ConfigurationBoundResourceCache;Landroid/content/res/ConfigurationBoundResourceCache;
 HSPLandroid/content/res/ConfigurationBoundResourceCache;->onConfigurationChange(I)V
 HSPLandroid/content/res/ConfigurationBoundResourceCache;->put(JLandroid/content/res/Resources$Theme;Ljava/lang/Object;)V
 HSPLandroid/content/res/ConfigurationBoundResourceCache;->put(JLandroid/content/res/Resources$Theme;Ljava/lang/Object;Z)V
@@ -4962,12 +4971,12 @@
 HSPLandroid/content/res/ConstantState;->newInstance(Landroid/content/res/Resources;)Ljava/lang/Object;
 HSPLandroid/content/res/ConstantState;->newInstance(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Ljava/lang/Object;
 HSPLandroid/content/res/DrawableCache;-><init>()V
-HSPLandroid/content/res/DrawableCache;->getInstance(JLandroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/res/DrawableCache;->getInstance(JLandroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;+]Landroid/graphics/drawable/Drawable$ConstantState;megamorphic_types]Landroid/content/res/DrawableCache;Landroid/content/res/DrawableCache;
 HSPLandroid/content/res/DrawableCache;->shouldInvalidateEntry(Landroid/graphics/drawable/Drawable$ConstantState;I)Z
 HSPLandroid/content/res/DrawableCache;->shouldInvalidateEntry(Ljava/lang/Object;I)Z
 HSPLandroid/content/res/FontResourcesParser;->parse(Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources;)Landroid/content/res/FontResourcesParser$FamilyResourceEntry;
-HSPLandroid/content/res/FontResourcesParser;->readFamilies(Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources;)Landroid/content/res/FontResourcesParser$FamilyResourceEntry;
-HSPLandroid/content/res/FontResourcesParser;->readFamily(Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources;)Landroid/content/res/FontResourcesParser$FamilyResourceEntry;
+HSPLandroid/content/res/FontResourcesParser;->readFamilies(Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources;)Landroid/content/res/FontResourcesParser$FamilyResourceEntry;+]Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/XmlBlock$Parser;
+HSPLandroid/content/res/FontResourcesParser;->readFamily(Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources;)Landroid/content/res/FontResourcesParser$FamilyResourceEntry;+]Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/XmlBlock$Parser;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/content/res/GradientColor;-><init>()V
 HSPLandroid/content/res/GradientColor;->canApplyTheme()Z
 HSPLandroid/content/res/GradientColor;->createFromXmlInner(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)Landroid/content/res/GradientColor;
@@ -4987,17 +4996,17 @@
 HSPLandroid/content/res/Resources$Theme;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Landroid/content/res/Resources$Theme;]Landroid/content/res/Resources$Theme;Landroid/content/res/Resources$Theme;]Landroid/content/res/Resources$ThemeKey;Landroid/content/res/Resources$ThemeKey;
 HSPLandroid/content/res/Resources$Theme;->getAppliedStyleResId()I+]Landroid/content/res/ResourcesImpl$ThemeImpl;Landroid/content/res/ResourcesImpl$ThemeImpl;
 HSPLandroid/content/res/Resources$Theme;->getChangingConfigurations()I
-HSPLandroid/content/res/Resources$Theme;->getKey()Landroid/content/res/Resources$ThemeKey;
+HSPLandroid/content/res/Resources$Theme;->getKey()Landroid/content/res/Resources$ThemeKey;+]Landroid/content/res/ResourcesImpl$ThemeImpl;Landroid/content/res/ResourcesImpl$ThemeImpl;
 HSPLandroid/content/res/Resources$Theme;->getParentThemeIdentifier(I)I+]Landroid/content/res/ResourcesImpl$ThemeImpl;Landroid/content/res/ResourcesImpl$ThemeImpl;
 HSPLandroid/content/res/Resources$Theme;->getResources()Landroid/content/res/Resources;
 HSPLandroid/content/res/Resources$Theme;->getTheme()[Ljava/lang/String;+]Landroid/content/res/ResourcesImpl$ThemeImpl;Landroid/content/res/ResourcesImpl$ThemeImpl;
 HSPLandroid/content/res/Resources$Theme;->hashCode()I+]Landroid/content/res/Resources$Theme;Landroid/content/res/Resources$Theme;]Landroid/content/res/Resources$ThemeKey;Landroid/content/res/Resources$ThemeKey;
-HSPLandroid/content/res/Resources$Theme;->obtainStyledAttributes(I[I)Landroid/content/res/TypedArray;
+HSPLandroid/content/res/Resources$Theme;->obtainStyledAttributes(I[I)Landroid/content/res/TypedArray;+]Landroid/content/res/ResourcesImpl$ThemeImpl;Landroid/content/res/ResourcesImpl$ThemeImpl;
 HSPLandroid/content/res/Resources$Theme;->obtainStyledAttributes(Landroid/util/AttributeSet;[III)Landroid/content/res/TypedArray;+]Landroid/content/res/ResourcesImpl$ThemeImpl;Landroid/content/res/ResourcesImpl$ThemeImpl;
-HSPLandroid/content/res/Resources$Theme;->obtainStyledAttributes([I)Landroid/content/res/TypedArray;
+HSPLandroid/content/res/Resources$Theme;->obtainStyledAttributes([I)Landroid/content/res/TypedArray;+]Landroid/content/res/ResourcesImpl$ThemeImpl;Landroid/content/res/ResourcesImpl$ThemeImpl;
 HSPLandroid/content/res/Resources$Theme;->rebase()V
 HSPLandroid/content/res/Resources$Theme;->rebase(Landroid/content/res/ResourcesImpl;)V
-HSPLandroid/content/res/Resources$Theme;->resolveAttribute(ILandroid/util/TypedValue;Z)Z
+HSPLandroid/content/res/Resources$Theme;->resolveAttribute(ILandroid/util/TypedValue;Z)Z+]Landroid/content/res/ResourcesImpl$ThemeImpl;Landroid/content/res/ResourcesImpl$ThemeImpl;
 HSPLandroid/content/res/Resources$Theme;->resolveAttributes([I[I)Landroid/content/res/TypedArray;
 HSPLandroid/content/res/Resources$Theme;->setImpl(Landroid/content/res/ResourcesImpl$ThemeImpl;)V
 HSPLandroid/content/res/Resources$Theme;->setTo(Landroid/content/res/Resources$Theme;)V
@@ -5007,7 +5016,7 @@
 HSPLandroid/content/res/Resources$ThemeKey;->clone()Landroid/content/res/Resources$ThemeKey;
 HSPLandroid/content/res/Resources$ThemeKey;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Landroid/content/res/Resources$ThemeKey;]Landroid/content/res/Resources$ThemeKey;Landroid/content/res/Resources$ThemeKey;
 HSPLandroid/content/res/Resources$ThemeKey;->hashCode()I
-HSPLandroid/content/res/Resources$ThemeKey;->setTo(Landroid/content/res/Resources$ThemeKey;)V
+HSPLandroid/content/res/Resources$ThemeKey;->setTo(Landroid/content/res/Resources$ThemeKey;)V+][I[I][Z[Z
 HSPLandroid/content/res/Resources;-><init>(Landroid/content/res/AssetManager;Landroid/util/DisplayMetrics;Landroid/content/res/Configuration;)V
 HSPLandroid/content/res/Resources;-><init>(Ljava/lang/ClassLoader;)V+]Ljava/util/Set;Ljava/util/Collections$SynchronizedSet;
 HSPLandroid/content/res/Resources;->addLoaders([Landroid/content/res/loader/ResourcesLoader;)V
@@ -5017,28 +5026,28 @@
 HSPLandroid/content/res/Resources;->finishPreloading()V
 HSPLandroid/content/res/Resources;->getAnimation(I)Landroid/content/res/XmlResourceParser;
 HSPLandroid/content/res/Resources;->getAnimatorCache()Landroid/content/res/ConfigurationBoundResourceCache;
-HSPLandroid/content/res/Resources;->getAssets()Landroid/content/res/AssetManager;
+HSPLandroid/content/res/Resources;->getAssets()Landroid/content/res/AssetManager;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
 HSPLandroid/content/res/Resources;->getAttributeSetSourceResId(Landroid/util/AttributeSet;)I
-HSPLandroid/content/res/Resources;->getBoolean(I)Z
+HSPLandroid/content/res/Resources;->getBoolean(I)Z+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
 HSPLandroid/content/res/Resources;->getClassLoader()Ljava/lang/ClassLoader;
 HSPLandroid/content/res/Resources;->getColor(I)I
-HSPLandroid/content/res/Resources;->getColor(ILandroid/content/res/Resources$Theme;)I
+HSPLandroid/content/res/Resources;->getColor(ILandroid/content/res/Resources$Theme;)I+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
 HSPLandroid/content/res/Resources;->getColorStateList(I)Landroid/content/res/ColorStateList;
 HSPLandroid/content/res/Resources;->getColorStateList(ILandroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;
-HSPLandroid/content/res/Resources;->getCompatibilityInfo()Landroid/content/res/CompatibilityInfo;
-HSPLandroid/content/res/Resources;->getConfiguration()Landroid/content/res/Configuration;
-HSPLandroid/content/res/Resources;->getDimension(I)F
-HSPLandroid/content/res/Resources;->getDimensionPixelOffset(I)I
-HSPLandroid/content/res/Resources;->getDimensionPixelSize(I)I
-HSPLandroid/content/res/Resources;->getDisplayAdjustments()Landroid/view/DisplayAdjustments;
+HSPLandroid/content/res/Resources;->getCompatibilityInfo()Landroid/content/res/CompatibilityInfo;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
+HSPLandroid/content/res/Resources;->getConfiguration()Landroid/content/res/Configuration;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
+HSPLandroid/content/res/Resources;->getDimension(I)F+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
+HSPLandroid/content/res/Resources;->getDimensionPixelOffset(I)I+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
+HSPLandroid/content/res/Resources;->getDimensionPixelSize(I)I+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
+HSPLandroid/content/res/Resources;->getDisplayAdjustments()Landroid/view/DisplayAdjustments;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
 HSPLandroid/content/res/Resources;->getDisplayMetrics()Landroid/util/DisplayMetrics;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
 HSPLandroid/content/res/Resources;->getDrawable(I)Landroid/graphics/drawable/Drawable;
 HSPLandroid/content/res/Resources;->getDrawable(ILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/content/res/Resources;->getDrawableForDensity(II)Landroid/graphics/drawable/Drawable;
-HSPLandroid/content/res/Resources;->getDrawableForDensity(IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/res/Resources;->getDrawableForDensity(IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLandroid/content/res/Resources;->getDrawableInflater()Landroid/graphics/drawable/DrawableInflater;
 HSPLandroid/content/res/Resources;->getFloat(I)F
-HSPLandroid/content/res/Resources;->getFont(Landroid/util/TypedValue;I)Landroid/graphics/Typeface;
+HSPLandroid/content/res/Resources;->getFont(Landroid/util/TypedValue;I)Landroid/graphics/Typeface;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
 HSPLandroid/content/res/Resources;->getFraction(III)F
 HSPLandroid/content/res/Resources;->getIdentifier(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/content/res/Resources;->getImpl()Landroid/content/res/ResourcesImpl;
@@ -5047,38 +5056,38 @@
 HSPLandroid/content/res/Resources;->getLayout(I)Landroid/content/res/XmlResourceParser;
 HSPLandroid/content/res/Resources;->getLoaders()Ljava/util/List;
 HSPLandroid/content/res/Resources;->getQuantityString(II)Ljava/lang/String;
-HSPLandroid/content/res/Resources;->getQuantityString(II[Ljava/lang/Object;)Ljava/lang/String;
+HSPLandroid/content/res/Resources;->getQuantityString(II[Ljava/lang/Object;)Ljava/lang/String;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Landroid/os/LocaleList;Landroid/os/LocaleList;
 HSPLandroid/content/res/Resources;->getQuantityText(II)Ljava/lang/CharSequence;
-HSPLandroid/content/res/Resources;->getResourceEntryName(I)Ljava/lang/String;
+HSPLandroid/content/res/Resources;->getResourceEntryName(I)Ljava/lang/String;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
 HSPLandroid/content/res/Resources;->getResourceName(I)Ljava/lang/String;
-HSPLandroid/content/res/Resources;->getResourcePackageName(I)Ljava/lang/String;
+HSPLandroid/content/res/Resources;->getResourcePackageName(I)Ljava/lang/String;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
 HSPLandroid/content/res/Resources;->getResourceTypeName(I)Ljava/lang/String;
 HSPLandroid/content/res/Resources;->getSizeConfigurations()[Landroid/content/res/Configuration;
 HSPLandroid/content/res/Resources;->getStateListAnimatorCache()Landroid/content/res/ConfigurationBoundResourceCache;
 HSPLandroid/content/res/Resources;->getString(I)Ljava/lang/String;
-HSPLandroid/content/res/Resources;->getString(I[Ljava/lang/Object;)Ljava/lang/String;
+HSPLandroid/content/res/Resources;->getString(I[Ljava/lang/Object;)Ljava/lang/String;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Landroid/os/LocaleList;Landroid/os/LocaleList;
 HSPLandroid/content/res/Resources;->getStringArray(I)[Ljava/lang/String;
 HSPLandroid/content/res/Resources;->getSystem()Landroid/content/res/Resources;
 HSPLandroid/content/res/Resources;->getText(I)Ljava/lang/CharSequence;
 HSPLandroid/content/res/Resources;->getTextArray(I)[Ljava/lang/CharSequence;
-HSPLandroid/content/res/Resources;->getValue(ILandroid/util/TypedValue;Z)V
+HSPLandroid/content/res/Resources;->getValue(ILandroid/util/TypedValue;Z)V+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
 HSPLandroid/content/res/Resources;->getValueForDensity(IILandroid/util/TypedValue;Z)V
 HSPLandroid/content/res/Resources;->getXml(I)Landroid/content/res/XmlResourceParser;
 HSPLandroid/content/res/Resources;->hasOverrideDisplayAdjustments()Z
 HSPLandroid/content/res/Resources;->lambda$dumpHistory$1(Ljava/util/Map;Landroid/content/res/Resources;)V
 HSPLandroid/content/res/Resources;->lambda$newTheme$0(Ljava/lang/ref/WeakReference;)Z
-HSPLandroid/content/res/Resources;->loadColorStateList(Landroid/util/TypedValue;ILandroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;
+HSPLandroid/content/res/Resources;->loadColorStateList(Landroid/util/TypedValue;ILandroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
 HSPLandroid/content/res/Resources;->loadComplexColor(Landroid/util/TypedValue;ILandroid/content/res/Resources$Theme;)Landroid/content/res/ComplexColor;
-HSPLandroid/content/res/Resources;->loadDrawable(Landroid/util/TypedValue;IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/res/Resources;->loadDrawable(Landroid/util/TypedValue;IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
 HSPLandroid/content/res/Resources;->loadXmlResourceParser(ILjava/lang/String;)Landroid/content/res/XmlResourceParser;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/content/res/Resources;->loadXmlResourceParser(Ljava/lang/String;IILjava/lang/String;)Landroid/content/res/XmlResourceParser;
-HSPLandroid/content/res/Resources;->newTheme()Landroid/content/res/Resources$Theme;
+HSPLandroid/content/res/Resources;->newTheme()Landroid/content/res/Resources$Theme;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/content/res/Resources$Theme;Landroid/content/res/Resources$Theme;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/content/res/Resources;->obtainAttributes(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;
-HSPLandroid/content/res/Resources;->obtainAttributes(Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;
+HSPLandroid/content/res/Resources;->obtainAttributes(Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
 HSPLandroid/content/res/Resources;->obtainTempTypedValue()Landroid/util/TypedValue;
-HSPLandroid/content/res/Resources;->obtainTypedArray(I)Landroid/content/res/TypedArray;
-HSPLandroid/content/res/Resources;->openRawResource(I)Ljava/io/InputStream;
-HSPLandroid/content/res/Resources;->openRawResource(ILandroid/util/TypedValue;)Ljava/io/InputStream;
+HSPLandroid/content/res/Resources;->obtainTypedArray(I)Landroid/content/res/TypedArray;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
+HSPLandroid/content/res/Resources;->openRawResource(I)Ljava/io/InputStream;+]Landroid/content/res/Resources;Landroid/content/res/Resources;
+HSPLandroid/content/res/Resources;->openRawResource(ILandroid/util/TypedValue;)Ljava/io/InputStream;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;
 HSPLandroid/content/res/Resources;->openRawResourceFd(I)Landroid/content/res/AssetFileDescriptor;
 HSPLandroid/content/res/Resources;->parseBundleExtra(Ljava/lang/String;Landroid/util/AttributeSet;Landroid/os/Bundle;)V
 HSPLandroid/content/res/Resources;->preloadFonts(I)V
@@ -5087,7 +5096,7 @@
 HSPLandroid/content/res/Resources;->selectDefaultTheme(II)I
 HSPLandroid/content/res/Resources;->selectSystemTheme(IIIIII)I
 HSPLandroid/content/res/Resources;->setCallbacks(Landroid/content/res/Resources$UpdateCallbacks;)V
-HSPLandroid/content/res/Resources;->setImpl(Landroid/content/res/ResourcesImpl;)V
+HSPLandroid/content/res/Resources;->setImpl(Landroid/content/res/ResourcesImpl;)V+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/content/res/Resources;->startPreloading()V
 HSPLandroid/content/res/Resources;->updateConfiguration(Landroid/content/res/Configuration;Landroid/util/DisplayMetrics;)V
 HSPLandroid/content/res/Resources;->updateConfiguration(Landroid/content/res/Configuration;Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;)V
@@ -5112,7 +5121,7 @@
 HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->obtainStyledAttributes(Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;[III)Landroid/content/res/TypedArray;+]Landroid/content/res/Resources$Theme;Landroid/content/res/Resources$Theme;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
 HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->rebase()V
 HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->rebase(Landroid/content/res/AssetManager;)V
-HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->resolveAttribute(ILandroid/util/TypedValue;Z)Z
+HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->resolveAttribute(ILandroid/util/TypedValue;Z)Z+]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
 HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->resolveAttributes(Landroid/content/res/Resources$Theme;[I[I)Landroid/content/res/TypedArray;
 HSPLandroid/content/res/ResourcesImpl$ThemeImpl;->setTo(Landroid/content/res/ResourcesImpl$ThemeImpl;)V
 HSPLandroid/content/res/ResourcesImpl;->-$$Nest$sfgetsThemeRegistry()Llibcore/util/NativeAllocationRegistry;
@@ -5120,43 +5129,43 @@
 HSPLandroid/content/res/ResourcesImpl;->adjustLanguageTag(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/content/res/ResourcesImpl;->attrForQuantityCode(Ljava/lang/String;)I
 HSPLandroid/content/res/ResourcesImpl;->cacheDrawable(Landroid/util/TypedValue;ZLandroid/content/res/DrawableCache;Landroid/content/res/Resources$Theme;ZJLandroid/graphics/drawable/Drawable;)V
-HSPLandroid/content/res/ResourcesImpl;->calcConfigChanges(Landroid/content/res/Configuration;)I
+HSPLandroid/content/res/ResourcesImpl;->calcConfigChanges(Landroid/content/res/Configuration;)I+]Landroid/content/res/CompatibilityInfo;Landroid/content/res/CompatibilityInfo$1;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Landroid/view/DisplayAdjustments;Landroid/view/DisplayAdjustments;]Landroid/os/LocaleList;Landroid/os/LocaleList;
 HSPLandroid/content/res/ResourcesImpl;->decodeImageDrawable(Landroid/content/res/AssetManager$AssetInputStream;Landroid/content/res/Resources;Landroid/util/TypedValue;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/content/res/ResourcesImpl;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLandroid/content/res/ResourcesImpl;->finishPreloading()V
 HSPLandroid/content/res/ResourcesImpl;->flushLayoutCache()V
 HSPLandroid/content/res/ResourcesImpl;->getAnimatorCache()Landroid/content/res/ConfigurationBoundResourceCache;
 HSPLandroid/content/res/ResourcesImpl;->getAssets()Landroid/content/res/AssetManager;
-HSPLandroid/content/res/ResourcesImpl;->getAttributeSetSourceResId(Landroid/util/AttributeSet;)I
-HSPLandroid/content/res/ResourcesImpl;->getColorStateListFromInt(Landroid/util/TypedValue;J)Landroid/content/res/ColorStateList;
-HSPLandroid/content/res/ResourcesImpl;->getCompatibilityInfo()Landroid/content/res/CompatibilityInfo;
+HSPLandroid/content/res/ResourcesImpl;->getAttributeSetSourceResId(Landroid/util/AttributeSet;)I+]Landroid/content/res/XmlBlock$Parser;Landroid/content/res/XmlBlock$Parser;
+HSPLandroid/content/res/ResourcesImpl;->getColorStateListFromInt(Landroid/util/TypedValue;J)Landroid/content/res/ColorStateList;+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Landroid/content/res/ConstantState;Landroid/content/res/ColorStateList$ColorStateListFactory;
+HSPLandroid/content/res/ResourcesImpl;->getCompatibilityInfo()Landroid/content/res/CompatibilityInfo;+]Landroid/view/DisplayAdjustments;Landroid/view/DisplayAdjustments;
 HSPLandroid/content/res/ResourcesImpl;->getConfiguration()Landroid/content/res/Configuration;
 HSPLandroid/content/res/ResourcesImpl;->getDisplayAdjustments()Landroid/view/DisplayAdjustments;
 HSPLandroid/content/res/ResourcesImpl;->getDisplayMetrics()Landroid/util/DisplayMetrics;
 HSPLandroid/content/res/ResourcesImpl;->getIdentifier(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/content/res/ResourcesImpl;->getPluralRule()Landroid/icu/text/PluralRules;
 HSPLandroid/content/res/ResourcesImpl;->getQuantityText(II)Ljava/lang/CharSequence;
-HSPLandroid/content/res/ResourcesImpl;->getResourceEntryName(I)Ljava/lang/String;
+HSPLandroid/content/res/ResourcesImpl;->getResourceEntryName(I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
 HSPLandroid/content/res/ResourcesImpl;->getResourceName(I)Ljava/lang/String;
-HSPLandroid/content/res/ResourcesImpl;->getResourcePackageName(I)Ljava/lang/String;
+HSPLandroid/content/res/ResourcesImpl;->getResourcePackageName(I)Ljava/lang/String;+]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
 HSPLandroid/content/res/ResourcesImpl;->getResourceTypeName(I)Ljava/lang/String;
 HSPLandroid/content/res/ResourcesImpl;->getSizeConfigurations()[Landroid/content/res/Configuration;
 HSPLandroid/content/res/ResourcesImpl;->getStateListAnimatorCache()Landroid/content/res/ConfigurationBoundResourceCache;
-HSPLandroid/content/res/ResourcesImpl;->getValue(ILandroid/util/TypedValue;Z)V
+HSPLandroid/content/res/ResourcesImpl;->getValue(ILandroid/util/TypedValue;Z)V+]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
 HSPLandroid/content/res/ResourcesImpl;->getValueForDensity(IILandroid/util/TypedValue;Z)V
 HSPLandroid/content/res/ResourcesImpl;->lambda$decodeImageDrawable$1(Landroid/graphics/ImageDecoder;Landroid/graphics/ImageDecoder$ImageInfo;Landroid/graphics/ImageDecoder$Source;)V
 HSPLandroid/content/res/ResourcesImpl;->lambda$new$0()Landroid/content/res/ResourcesImpl$LookupStack;
 HSPLandroid/content/res/ResourcesImpl;->loadColorStateList(Landroid/content/res/Resources;Landroid/util/TypedValue;ILandroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;
 HSPLandroid/content/res/ResourcesImpl;->loadComplexColor(Landroid/content/res/Resources;Landroid/util/TypedValue;ILandroid/content/res/Resources$Theme;)Landroid/content/res/ComplexColor;
-HSPLandroid/content/res/ResourcesImpl;->loadComplexColorForCookie(Landroid/content/res/Resources;Landroid/util/TypedValue;ILandroid/content/res/Resources$Theme;)Landroid/content/res/ComplexColor;
-HSPLandroid/content/res/ResourcesImpl;->loadComplexColorFromName(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/TypedValue;I)Landroid/content/res/ComplexColor;
-HSPLandroid/content/res/ResourcesImpl;->loadDrawable(Landroid/content/res/Resources;Landroid/util/TypedValue;IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
-HSPLandroid/content/res/ResourcesImpl;->loadDrawableForCookie(Landroid/content/res/Resources;Landroid/util/TypedValue;II)Landroid/graphics/drawable/Drawable;
-HSPLandroid/content/res/ResourcesImpl;->loadFont(Landroid/content/res/Resources;Landroid/util/TypedValue;I)Landroid/graphics/Typeface;
+HSPLandroid/content/res/ResourcesImpl;->loadComplexColorForCookie(Landroid/content/res/Resources;Landroid/util/TypedValue;ILandroid/content/res/Resources$Theme;)Landroid/content/res/ComplexColor;+]Ljava/lang/String;Ljava/lang/String;]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/content/res/XmlResourceParser;Landroid/content/res/XmlBlock$Parser;
+HSPLandroid/content/res/ResourcesImpl;->loadComplexColorFromName(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/TypedValue;I)Landroid/content/res/ComplexColor;+]Landroid/content/res/ComplexColor;Landroid/content/res/ColorStateList;,Landroid/content/res/GradientColor;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Landroid/content/res/ConfigurationBoundResourceCache;Landroid/content/res/ConfigurationBoundResourceCache;]Landroid/content/res/ConstantState;Landroid/content/res/ColorStateList$ColorStateListFactory;
+HSPLandroid/content/res/ResourcesImpl;->loadDrawable(Landroid/content/res/Resources;Landroid/util/TypedValue;IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;+]Landroid/content/res/DrawableCache;Landroid/content/res/DrawableCache;]Landroid/graphics/drawable/Drawable$ConstantState;megamorphic_types]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/content/res/ResourcesImpl;->loadDrawableForCookie(Landroid/content/res/Resources;Landroid/util/TypedValue;II)Landroid/graphics/drawable/Drawable;+]Ljava/lang/String;Ljava/lang/String;]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/content/res/ResourcesImpl$LookupStack;Landroid/content/res/ResourcesImpl$LookupStack;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLandroid/content/res/ResourcesImpl;->loadFont(Landroid/content/res/Resources;Landroid/util/TypedValue;I)Landroid/graphics/Typeface;+]Ljava/lang/String;Ljava/lang/String;]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/graphics/Typeface$Builder;Landroid/graphics/Typeface$Builder;
 HSPLandroid/content/res/ResourcesImpl;->loadXmlDrawable(Landroid/content/res/Resources;Landroid/util/TypedValue;IILjava/lang/String;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/content/res/ResourcesImpl;->loadXmlResourceParser(Ljava/lang/String;IILjava/lang/String;)Landroid/content/res/XmlResourceParser;+]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;]Landroid/content/res/XmlBlock;Landroid/content/res/XmlBlock;
 HSPLandroid/content/res/ResourcesImpl;->newThemeImpl()Landroid/content/res/ResourcesImpl$ThemeImpl;
-HSPLandroid/content/res/ResourcesImpl;->openRawResource(ILandroid/util/TypedValue;)Ljava/io/InputStream;
+HSPLandroid/content/res/ResourcesImpl;->openRawResource(ILandroid/util/TypedValue;)Ljava/io/InputStream;+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/content/res/ResourcesImpl;->openRawResourceFd(ILandroid/util/TypedValue;)Landroid/content/res/AssetFileDescriptor;
 HSPLandroid/content/res/ResourcesImpl;->startPreloading()V
 HSPLandroid/content/res/ResourcesImpl;->updateConfiguration(Landroid/content/res/Configuration;Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;)V+]Landroid/content/res/ResourcesImpl;Landroid/content/res/ResourcesImpl;]Landroid/content/res/CompatibilityInfo;Landroid/content/res/CompatibilityInfo$1;]Ljava/util/Locale;Ljava/util/Locale;]Landroid/content/res/DrawableCache;Landroid/content/res/DrawableCache;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Landroid/view/DisplayAdjustments;Landroid/view/DisplayAdjustments;]Landroid/os/LocaleList;Landroid/os/LocaleList;]Landroid/util/DisplayMetrics;Landroid/util/DisplayMetrics;]Landroid/content/res/ConfigurationBoundResourceCache;Landroid/content/res/ConfigurationBoundResourceCache;
@@ -5172,42 +5181,42 @@
 HSPLandroid/content/res/StringBlock;->get(I)Ljava/lang/CharSequence;
 HSPLandroid/content/res/StringBlock;->getSequence(I)Ljava/lang/CharSequence;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLandroid/content/res/ThemedResourceCache;-><init>()V
-HSPLandroid/content/res/ThemedResourceCache;->get(JLandroid/content/res/Resources$Theme;)Ljava/lang/Object;
-HSPLandroid/content/res/ThemedResourceCache;->getThemedLocked(Landroid/content/res/Resources$Theme;Z)Landroid/util/LongSparseArray;
+HSPLandroid/content/res/ThemedResourceCache;->get(JLandroid/content/res/Resources$Theme;)Ljava/lang/Object;+]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
+HSPLandroid/content/res/ThemedResourceCache;->getThemedLocked(Landroid/content/res/Resources$Theme;Z)Landroid/util/LongSparseArray;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/res/Resources$Theme;Landroid/content/res/Resources$Theme;]Landroid/content/res/Resources$ThemeKey;Landroid/content/res/Resources$ThemeKey;
 HSPLandroid/content/res/ThemedResourceCache;->getUnthemedLocked(Z)Landroid/util/LongSparseArray;
 HSPLandroid/content/res/ThemedResourceCache;->onConfigurationChange(I)V
-HSPLandroid/content/res/ThemedResourceCache;->prune(I)Z
+HSPLandroid/content/res/ThemedResourceCache;->prune(I)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/content/res/ThemedResourceCache;->pruneEntriesLocked(Landroid/util/LongSparseArray;I)Z
 HSPLandroid/content/res/ThemedResourceCache;->put(JLandroid/content/res/Resources$Theme;Ljava/lang/Object;)V
 HSPLandroid/content/res/ThemedResourceCache;->put(JLandroid/content/res/Resources$Theme;Ljava/lang/Object;Z)V
-HSPLandroid/content/res/TypedArray;-><init>(Landroid/content/res/Resources;)V
+HSPLandroid/content/res/TypedArray;-><init>(Landroid/content/res/Resources;)V+]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLandroid/content/res/TypedArray;->extractThemeAttrs()[I
-HSPLandroid/content/res/TypedArray;->extractThemeAttrs([I)[I
+HSPLandroid/content/res/TypedArray;->extractThemeAttrs([I)[I+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/content/res/TypedArray;->getBoolean(IZ)Z
-HSPLandroid/content/res/TypedArray;->getChangingConfigurations()I
-HSPLandroid/content/res/TypedArray;->getColor(II)I
-HSPLandroid/content/res/TypedArray;->getColorStateList(I)Landroid/content/res/ColorStateList;
+HSPLandroid/content/res/TypedArray;->getChangingConfigurations()I+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLandroid/content/res/TypedArray;->getColor(II)I+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Landroid/content/res/Resources;Landroid/content/res/Resources;
+HSPLandroid/content/res/TypedArray;->getColorStateList(I)Landroid/content/res/ColorStateList;+]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLandroid/content/res/TypedArray;->getComplexColor(I)Landroid/content/res/ComplexColor;
 HSPLandroid/content/res/TypedArray;->getDimension(IF)F
 HSPLandroid/content/res/TypedArray;->getDimensionPixelOffset(II)I
 HSPLandroid/content/res/TypedArray;->getDimensionPixelSize(II)I
-HSPLandroid/content/res/TypedArray;->getDrawable(I)Landroid/graphics/drawable/Drawable;
-HSPLandroid/content/res/TypedArray;->getDrawableForDensity(II)Landroid/graphics/drawable/Drawable;
+HSPLandroid/content/res/TypedArray;->getDrawable(I)Landroid/graphics/drawable/Drawable;+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLandroid/content/res/TypedArray;->getDrawableForDensity(II)Landroid/graphics/drawable/Drawable;+]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLandroid/content/res/TypedArray;->getFloat(IF)F
-HSPLandroid/content/res/TypedArray;->getFont(I)Landroid/graphics/Typeface;
+HSPLandroid/content/res/TypedArray;->getFont(I)Landroid/graphics/Typeface;+]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLandroid/content/res/TypedArray;->getFraction(IIIF)F
 HSPLandroid/content/res/TypedArray;->getIndex(I)I
 HSPLandroid/content/res/TypedArray;->getIndexCount()I
 HSPLandroid/content/res/TypedArray;->getInt(II)I
 HSPLandroid/content/res/TypedArray;->getInteger(II)I
 HSPLandroid/content/res/TypedArray;->getLayoutDimension(II)I
-HSPLandroid/content/res/TypedArray;->getLayoutDimension(ILjava/lang/String;)I
-HSPLandroid/content/res/TypedArray;->getNonConfigurationString(II)Ljava/lang/String;
+HSPLandroid/content/res/TypedArray;->getLayoutDimension(ILjava/lang/String;)I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLandroid/content/res/TypedArray;->getNonConfigurationString(II)Ljava/lang/String;+]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/content/res/TypedArray;->getNonResourceString(I)Ljava/lang/String;
 HSPLandroid/content/res/TypedArray;->getPositionDescription()Ljava/lang/String;
 HSPLandroid/content/res/TypedArray;->getResourceId(II)I
 HSPLandroid/content/res/TypedArray;->getResources()Landroid/content/res/Resources;
-HSPLandroid/content/res/TypedArray;->getString(I)Ljava/lang/String;
+HSPLandroid/content/res/TypedArray;->getString(I)Ljava/lang/String;+]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/content/res/TypedArray;->getText(I)Ljava/lang/CharSequence;
 HSPLandroid/content/res/TypedArray;->getTextArray(I)[Ljava/lang/CharSequence;
 HSPLandroid/content/res/TypedArray;->getType(I)I
@@ -5216,7 +5225,7 @@
 HSPLandroid/content/res/TypedArray;->hasValue(I)Z
 HSPLandroid/content/res/TypedArray;->hasValueOrEmpty(I)Z
 HSPLandroid/content/res/TypedArray;->length()I
-HSPLandroid/content/res/TypedArray;->loadStringValueAt(I)Ljava/lang/CharSequence;
+HSPLandroid/content/res/TypedArray;->loadStringValueAt(I)Ljava/lang/CharSequence;+]Landroid/content/res/XmlBlock$Parser;Landroid/content/res/XmlBlock$Parser;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
 HSPLandroid/content/res/TypedArray;->obtain(Landroid/content/res/Resources;I)Landroid/content/res/TypedArray;+]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/util/Pools$SynchronizedPool;Landroid/util/Pools$SynchronizedPool;
 HSPLandroid/content/res/TypedArray;->peekValue(I)Landroid/util/TypedValue;
 HSPLandroid/content/res/TypedArray;->recycle()V+]Landroid/util/Pools$SynchronizedPool;Landroid/util/Pools$SynchronizedPool;
@@ -5233,14 +5242,14 @@
 HSPLandroid/content/res/XmlBlock$Parser;->getAttributeNameResource(I)I
 HSPLandroid/content/res/XmlBlock$Parser;->getAttributeResourceValue(II)I
 HSPLandroid/content/res/XmlBlock$Parser;->getAttributeResourceValue(Ljava/lang/String;Ljava/lang/String;I)I
-HSPLandroid/content/res/XmlBlock$Parser;->getAttributeValue(I)Ljava/lang/String;
+HSPLandroid/content/res/XmlBlock$Parser;->getAttributeValue(I)Ljava/lang/String;+]Landroid/content/res/StringBlock;Landroid/content/res/StringBlock;
 HSPLandroid/content/res/XmlBlock$Parser;->getAttributeValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/content/res/XmlBlock$Parser;->getClassAttribute()Ljava/lang/String;
 HSPLandroid/content/res/XmlBlock$Parser;->getDepth()I
 HSPLandroid/content/res/XmlBlock$Parser;->getEventType()I
 HSPLandroid/content/res/XmlBlock$Parser;->getLineNumber()I
 HSPLandroid/content/res/XmlBlock$Parser;->getName()Ljava/lang/String;+]Landroid/content/res/StringBlock;Landroid/content/res/StringBlock;
-HSPLandroid/content/res/XmlBlock$Parser;->getPooledString(I)Ljava/lang/CharSequence;
+HSPLandroid/content/res/XmlBlock$Parser;->getPooledString(I)Ljava/lang/CharSequence;+]Landroid/content/res/StringBlock;Landroid/content/res/StringBlock;
 HSPLandroid/content/res/XmlBlock$Parser;->getPositionDescription()Ljava/lang/String;
 HSPLandroid/content/res/XmlBlock$Parser;->getSequenceString(Ljava/lang/CharSequence;)Ljava/lang/String;+]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/content/res/XmlBlock$Parser;->getSourceResId()I
@@ -5248,7 +5257,7 @@
 HSPLandroid/content/res/XmlBlock$Parser;->isEmptyElementTag()Z
 HSPLandroid/content/res/XmlBlock$Parser;->next()I+]Landroid/content/res/XmlBlock$Parser;Landroid/content/res/XmlBlock$Parser;
 HSPLandroid/content/res/XmlBlock$Parser;->nextTag()I+]Landroid/content/res/XmlBlock$Parser;Landroid/content/res/XmlBlock$Parser;
-HSPLandroid/content/res/XmlBlock$Parser;->nextText()Ljava/lang/String;
+HSPLandroid/content/res/XmlBlock$Parser;->nextText()Ljava/lang/String;+]Landroid/content/res/XmlBlock$Parser;Landroid/content/res/XmlBlock$Parser;
 HSPLandroid/content/res/XmlBlock$Parser;->require(ILjava/lang/String;Ljava/lang/String;)V
 HSPLandroid/content/res/XmlBlock;->-$$Nest$fgetmOpenCount(Landroid/content/res/XmlBlock;)I
 HSPLandroid/content/res/XmlBlock;->-$$Nest$fputmOpenCount(Landroid/content/res/XmlBlock;I)V
@@ -5261,7 +5270,7 @@
 HSPLandroid/content/res/XmlBlock;->-$$Nest$smnativeGetClassAttribute(J)I
 HSPLandroid/content/res/XmlBlock;-><init>(Landroid/content/res/AssetManager;J)V
 HSPLandroid/content/res/XmlBlock;->close()V
-HSPLandroid/content/res/XmlBlock;->decOpenCountLocked()V
+HSPLandroid/content/res/XmlBlock;->decOpenCountLocked()V+]Ljava/lang/Object;Landroid/content/res/XmlBlock;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
 HSPLandroid/content/res/XmlBlock;->finalize()V
 HSPLandroid/content/res/XmlBlock;->newParser()Landroid/content/res/XmlResourceParser;
 HSPLandroid/content/res/XmlBlock;->newParser(I)Landroid/content/res/XmlResourceParser;
@@ -5272,26 +5281,26 @@
 HSPLandroid/database/AbstractCursor$SelfContentObserver;-><init>(Landroid/database/AbstractCursor;)V
 HSPLandroid/database/AbstractCursor$SelfContentObserver;->onChange(Z)V
 HSPLandroid/database/AbstractCursor;-><init>()V+]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
-HSPLandroid/database/AbstractCursor;->checkPosition()V+]Landroid/database/AbstractCursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;
+HSPLandroid/database/AbstractCursor;->checkPosition()V+]Landroid/database/AbstractCursor;missing_types
 HSPLandroid/database/AbstractCursor;->close()V+]Landroid/database/AbstractCursor;Landroid/database/MatrixCursor;,Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;]Landroid/database/ContentObservable;Landroid/database/ContentObservable;
 HSPLandroid/database/AbstractCursor;->fillWindow(ILandroid/database/CursorWindow;)V
 HSPLandroid/database/AbstractCursor;->finalize()V+]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
-HSPLandroid/database/AbstractCursor;->getColumnCount()I
-HSPLandroid/database/AbstractCursor;->getColumnIndex(Ljava/lang/String;)I
+HSPLandroid/database/AbstractCursor;->getColumnCount()I+]Landroid/database/AbstractCursor;Landroid/database/sqlite/SQLiteCursor;
+HSPLandroid/database/AbstractCursor;->getColumnIndex(Ljava/lang/String;)I+]Ljava/lang/String;Ljava/lang/String;]Landroid/database/AbstractCursor;Landroid/database/BulkCursorToCursorAdaptor;,Landroid/database/MatrixCursor;
 HSPLandroid/database/AbstractCursor;->getColumnIndexOrThrow(Ljava/lang/String;)I
 HSPLandroid/database/AbstractCursor;->getColumnName(I)Ljava/lang/String;
 HSPLandroid/database/AbstractCursor;->getExtras()Landroid/os/Bundle;
 HSPLandroid/database/AbstractCursor;->getPosition()I
 HSPLandroid/database/AbstractCursor;->getWantsAllOnMoveCalls()Z
 HSPLandroid/database/AbstractCursor;->getWindow()Landroid/database/CursorWindow;
-HSPLandroid/database/AbstractCursor;->isAfterLast()Z
+HSPLandroid/database/AbstractCursor;->isAfterLast()Z+]Landroid/database/AbstractCursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;
 HSPLandroid/database/AbstractCursor;->isClosed()Z
 HSPLandroid/database/AbstractCursor;->isLast()Z
 HSPLandroid/database/AbstractCursor;->move(I)Z
-HSPLandroid/database/AbstractCursor;->moveToFirst()Z+]Landroid/database/AbstractCursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;
+HSPLandroid/database/AbstractCursor;->moveToFirst()Z+]Landroid/database/AbstractCursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;,Landroid/database/MatrixCursor;
 HSPLandroid/database/AbstractCursor;->moveToLast()Z
 HSPLandroid/database/AbstractCursor;->moveToNext()Z+]Landroid/database/AbstractCursor;Landroid/database/MatrixCursor;,Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;
-HSPLandroid/database/AbstractCursor;->moveToPosition(I)Z+]Landroid/database/AbstractCursor;Landroid/database/MatrixCursor;,Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;
+HSPLandroid/database/AbstractCursor;->moveToPosition(I)Z+]Landroid/database/AbstractCursor;missing_types
 HSPLandroid/database/AbstractCursor;->onChange(Z)V
 HSPLandroid/database/AbstractCursor;->onDeactivateOrClose()V+]Landroid/database/DataSetObservable;Landroid/database/DataSetObservable;
 HSPLandroid/database/AbstractCursor;->onMove(II)Z
@@ -5305,37 +5314,37 @@
 HSPLandroid/database/AbstractWindowedCursor;->checkPosition()V
 HSPLandroid/database/AbstractWindowedCursor;->clearOrCreateWindow(Ljava/lang/String;)V+]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
 HSPLandroid/database/AbstractWindowedCursor;->closeWindow()V+]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
-HSPLandroid/database/AbstractWindowedCursor;->getBlob(I)[B+]Landroid/database/AbstractWindowedCursor;Landroid/database/sqlite/SQLiteCursor;]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
-HSPLandroid/database/AbstractWindowedCursor;->getDouble(I)D
+HSPLandroid/database/AbstractWindowedCursor;->getBlob(I)[B+]Landroid/database/AbstractWindowedCursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
+HSPLandroid/database/AbstractWindowedCursor;->getDouble(I)D+]Landroid/database/AbstractWindowedCursor;Landroid/database/sqlite/SQLiteCursor;]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
 HSPLandroid/database/AbstractWindowedCursor;->getFloat(I)F
-HSPLandroid/database/AbstractWindowedCursor;->getInt(I)I+]Landroid/database/AbstractWindowedCursor;Landroid/database/sqlite/SQLiteCursor;]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
-HSPLandroid/database/AbstractWindowedCursor;->getLong(I)J+]Landroid/database/AbstractWindowedCursor;Landroid/database/sqlite/SQLiteCursor;]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
+HSPLandroid/database/AbstractWindowedCursor;->getInt(I)I+]Landroid/database/AbstractWindowedCursor;missing_types]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
+HSPLandroid/database/AbstractWindowedCursor;->getLong(I)J+]Landroid/database/AbstractWindowedCursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
 HSPLandroid/database/AbstractWindowedCursor;->getString(I)Ljava/lang/String;+]Landroid/database/AbstractWindowedCursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
-HSPLandroid/database/AbstractWindowedCursor;->getType(I)I
+HSPLandroid/database/AbstractWindowedCursor;->getType(I)I+]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
 HSPLandroid/database/AbstractWindowedCursor;->getWindow()Landroid/database/CursorWindow;
 HSPLandroid/database/AbstractWindowedCursor;->hasWindow()Z
-HSPLandroid/database/AbstractWindowedCursor;->isNull(I)Z+]Landroid/database/AbstractWindowedCursor;Landroid/database/sqlite/SQLiteCursor;]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
+HSPLandroid/database/AbstractWindowedCursor;->isNull(I)Z+]Landroid/database/AbstractWindowedCursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
 HSPLandroid/database/AbstractWindowedCursor;->onDeactivateOrClose()V+]Landroid/database/AbstractWindowedCursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;
 HSPLandroid/database/AbstractWindowedCursor;->setWindow(Landroid/database/CursorWindow;)V
 HSPLandroid/database/BulkCursorDescriptor$1;->createFromParcel(Landroid/os/Parcel;)Landroid/database/BulkCursorDescriptor;
 HSPLandroid/database/BulkCursorDescriptor$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/database/BulkCursorDescriptor;-><init>()V
-HSPLandroid/database/BulkCursorDescriptor;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/database/BulkCursorDescriptor;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/database/CursorWindow$1;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/database/BulkCursorDescriptor;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/database/BulkCursorNative;-><init>()V
 HSPLandroid/database/BulkCursorNative;->asBinder()Landroid/os/IBinder;
-HSPLandroid/database/BulkCursorNative;->asInterface(Landroid/os/IBinder;)Landroid/database/IBulkCursor;
+HSPLandroid/database/BulkCursorNative;->asInterface(Landroid/os/IBinder;)Landroid/database/IBulkCursor;+]Landroid/os/IBinder;Landroid/os/BinderProxy;
 HSPLandroid/database/BulkCursorNative;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/database/BulkCursorProxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/database/BulkCursorProxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/database/BulkCursorProxy;->close()V
-HSPLandroid/database/BulkCursorProxy;->getWindow(I)Landroid/database/CursorWindow;
+HSPLandroid/database/BulkCursorProxy;->close()V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/database/BulkCursorProxy;->getWindow(I)Landroid/database/CursorWindow;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/database/BulkCursorToCursorAdaptor;-><init>()V
-HSPLandroid/database/BulkCursorToCursorAdaptor;->close()V
+HSPLandroid/database/BulkCursorToCursorAdaptor;->close()V+]Landroid/database/IBulkCursor;Landroid/database/BulkCursorProxy;
 HSPLandroid/database/BulkCursorToCursorAdaptor;->getColumnNames()[Ljava/lang/String;
 HSPLandroid/database/BulkCursorToCursorAdaptor;->getCount()I
 HSPLandroid/database/BulkCursorToCursorAdaptor;->getObserver()Landroid/database/IContentObserver;
-HSPLandroid/database/BulkCursorToCursorAdaptor;->initialize(Landroid/database/BulkCursorDescriptor;)V
+HSPLandroid/database/BulkCursorToCursorAdaptor;->initialize(Landroid/database/BulkCursorDescriptor;)V+]Landroid/database/BulkCursorToCursorAdaptor;Landroid/database/BulkCursorToCursorAdaptor;
 HSPLandroid/database/BulkCursorToCursorAdaptor;->onMove(II)Z+]Landroid/database/IBulkCursor;Landroid/database/BulkCursorProxy;]Landroid/database/CursorWindow;Landroid/database/CursorWindow;]Landroid/database/BulkCursorToCursorAdaptor;Landroid/database/BulkCursorToCursorAdaptor;
 HSPLandroid/database/BulkCursorToCursorAdaptor;->throwIfCursorIsClosed()V
 HSPLandroid/database/ContentObservable;-><init>()V
@@ -5373,16 +5382,16 @@
 HSPLandroid/database/CursorWindow$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/database/CursorWindow$1;->newArray(I)[Landroid/database/CursorWindow;
 HSPLandroid/database/CursorWindow$1;->newArray(I)[Ljava/lang/Object;
-HSPLandroid/database/CursorWindow;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/database/CursorWindow;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
 HSPLandroid/database/CursorWindow;-><init>(Ljava/lang/String;)V
 HSPLandroid/database/CursorWindow;-><init>(Ljava/lang/String;J)V+]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
-HSPLandroid/database/CursorWindow;->allocRow()Z
+HSPLandroid/database/CursorWindow;->allocRow()Z+]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
 HSPLandroid/database/CursorWindow;->clear()V
 HSPLandroid/database/CursorWindow;->dispose()V+]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
 HSPLandroid/database/CursorWindow;->finalize()V+]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
 HSPLandroid/database/CursorWindow;->getBlob(II)[B+]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
 HSPLandroid/database/CursorWindow;->getCursorWindowSize()I
-HSPLandroid/database/CursorWindow;->getDouble(II)D
+HSPLandroid/database/CursorWindow;->getDouble(II)D+]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
 HSPLandroid/database/CursorWindow;->getFloat(II)F
 HSPLandroid/database/CursorWindow;->getInt(II)I+]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
 HSPLandroid/database/CursorWindow;->getLong(II)J+]Landroid/database/CursorWindow;Landroid/database/CursorWindow;
@@ -5399,35 +5408,35 @@
 HSPLandroid/database/CursorWindow;->setStartPosition(I)V
 HSPLandroid/database/CursorWindow;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/database/CursorWrapper;-><init>(Landroid/database/Cursor;)V
-HSPLandroid/database/CursorWrapper;->close()V
-HSPLandroid/database/CursorWrapper;->getBlob(I)[B
-HSPLandroid/database/CursorWrapper;->getColumnCount()I
-HSPLandroid/database/CursorWrapper;->getColumnIndex(Ljava/lang/String;)I
-HSPLandroid/database/CursorWrapper;->getColumnIndexOrThrow(Ljava/lang/String;)I
+HSPLandroid/database/CursorWrapper;->close()V+]Landroid/database/Cursor;missing_types
+HSPLandroid/database/CursorWrapper;->getBlob(I)[B+]Landroid/database/Cursor;missing_types
+HSPLandroid/database/CursorWrapper;->getColumnCount()I+]Landroid/database/Cursor;missing_types
+HSPLandroid/database/CursorWrapper;->getColumnIndex(Ljava/lang/String;)I+]Landroid/database/Cursor;Landroid/database/BulkCursorToCursorAdaptor;
+HSPLandroid/database/CursorWrapper;->getColumnIndexOrThrow(Ljava/lang/String;)I+]Landroid/database/Cursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/content/ContentProviderClient$CursorWrapperInner;,Landroid/database/BulkCursorToCursorAdaptor;
 HSPLandroid/database/CursorWrapper;->getColumnName(I)Ljava/lang/String;
 HSPLandroid/database/CursorWrapper;->getColumnNames()[Ljava/lang/String;
-HSPLandroid/database/CursorWrapper;->getCount()I
+HSPLandroid/database/CursorWrapper;->getCount()I+]Landroid/database/Cursor;missing_types
 HSPLandroid/database/CursorWrapper;->getExtras()Landroid/os/Bundle;
-HSPLandroid/database/CursorWrapper;->getInt(I)I
-HSPLandroid/database/CursorWrapper;->getLong(I)J
-HSPLandroid/database/CursorWrapper;->getPosition()I
-HSPLandroid/database/CursorWrapper;->getString(I)Ljava/lang/String;
+HSPLandroid/database/CursorWrapper;->getInt(I)I+]Landroid/database/Cursor;missing_types
+HSPLandroid/database/CursorWrapper;->getLong(I)J+]Landroid/database/Cursor;missing_types
+HSPLandroid/database/CursorWrapper;->getPosition()I+]Landroid/database/Cursor;missing_types
+HSPLandroid/database/CursorWrapper;->getString(I)Ljava/lang/String;+]Landroid/database/Cursor;missing_types
 HSPLandroid/database/CursorWrapper;->getType(I)I
 HSPLandroid/database/CursorWrapper;->getWrappedCursor()Landroid/database/Cursor;
-HSPLandroid/database/CursorWrapper;->isAfterLast()Z
+HSPLandroid/database/CursorWrapper;->isAfterLast()Z+]Landroid/database/Cursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/content/ContentProviderClient$CursorWrapperInner;,Landroid/database/BulkCursorToCursorAdaptor;
 HSPLandroid/database/CursorWrapper;->isClosed()Z
 HSPLandroid/database/CursorWrapper;->isLast()Z
-HSPLandroid/database/CursorWrapper;->isNull(I)Z
+HSPLandroid/database/CursorWrapper;->isNull(I)Z+]Landroid/database/Cursor;Landroid/database/sqlite/SQLiteCursor;,Landroid/database/BulkCursorToCursorAdaptor;
 HSPLandroid/database/CursorWrapper;->moveToFirst()Z
 HSPLandroid/database/CursorWrapper;->moveToLast()Z
-HSPLandroid/database/CursorWrapper;->moveToNext()Z
+HSPLandroid/database/CursorWrapper;->moveToNext()Z+]Landroid/database/Cursor;missing_types
 HSPLandroid/database/CursorWrapper;->moveToPosition(I)Z
 HSPLandroid/database/CursorWrapper;->registerContentObserver(Landroid/database/ContentObserver;)V
 HSPLandroid/database/DataSetObservable;-><init>()V
 HSPLandroid/database/DataSetObservable;->notifyChanged()V
 HSPLandroid/database/DataSetObservable;->notifyInvalidated()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/database/DataSetObserver;-><init>()V
-HSPLandroid/database/DatabaseUtils;->appendEscapedSQLString(Ljava/lang/StringBuilder;Ljava/lang/String;)V
+HSPLandroid/database/DatabaseUtils;->appendEscapedSQLString(Ljava/lang/StringBuilder;Ljava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/database/DatabaseUtils;->cursorFillWindow(Landroid/database/Cursor;ILandroid/database/CursorWindow;)V+]Landroid/database/CursorWindow;Landroid/database/CursorWindow;]Landroid/database/Cursor;Landroid/database/MatrixCursor;
 HSPLandroid/database/DatabaseUtils;->getSqlStatementType(Ljava/lang/String;)I+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/database/DatabaseUtils;->getTypeOfObject(Ljava/lang/Object;)I
@@ -5439,7 +5448,7 @@
 HSPLandroid/database/DatabaseUtils;->readExceptionFromParcel(Landroid/os/Parcel;Ljava/lang/String;I)V
 HSPLandroid/database/DatabaseUtils;->readExceptionWithFileNotFoundExceptionFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/database/DatabaseUtils;->readExceptionWithOperationApplicationExceptionFromParcel(Landroid/os/Parcel;)V
-HSPLandroid/database/DatabaseUtils;->sqlEscapeString(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/database/DatabaseUtils;->sqlEscapeString(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/database/DatabaseUtils;->stringForQuery(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/database/DatabaseUtils;->stringForQuery(Landroid/database/sqlite/SQLiteStatement;[Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/database/DatabaseUtils;->writeExceptionToParcel(Landroid/os/Parcel;Ljava/lang/Exception;)V
@@ -5450,7 +5459,7 @@
 HSPLandroid/database/IContentObserver$Stub;-><init>()V
 HSPLandroid/database/IContentObserver$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/database/IContentObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/database/IContentObserver;
-HSPLandroid/database/IContentObserver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/database/IContentObserver$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z+]Landroid/database/IContentObserver$Stub;Landroid/database/ContentObserver$Transport;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/database/MatrixCursor$RowBuilder;->add(Ljava/lang/Object;)Landroid/database/MatrixCursor$RowBuilder;
 HSPLandroid/database/MatrixCursor$RowBuilder;->add(Ljava/lang/String;Ljava/lang/Object;)Landroid/database/MatrixCursor$RowBuilder;
 HSPLandroid/database/MatrixCursor;-><init>([Ljava/lang/String;)V
@@ -5488,11 +5497,11 @@
 HSPLandroid/database/sqlite/SQLiteCompatibilityWalFlags;->isLegacyCompatibilityWalEnabled()Z
 HSPLandroid/database/sqlite/SQLiteConnection$Operation;-><init>()V
 HSPLandroid/database/sqlite/SQLiteConnection$Operation;-><init>(Landroid/database/sqlite/SQLiteConnection$Operation-IA;)V
-HSPLandroid/database/sqlite/SQLiteConnection$Operation;->describe(Ljava/lang/StringBuilder;Z)V
+HSPLandroid/database/sqlite/SQLiteConnection$Operation;->describe(Ljava/lang/StringBuilder;Z)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/database/sqlite/SQLiteConnection$Operation;->getTraceMethodName()Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;-><init>(Landroid/database/sqlite/SQLiteConnectionPool;)V
 HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->beginOperation(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)I+]Landroid/database/sqlite/SQLiteConnectionPool;Landroid/database/sqlite/SQLiteConnectionPool;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->dump(Landroid/util/Printer;)V
+HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->dump(Landroid/util/Printer;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/Printer;Landroid/util/PrefixPrinter;]Ljava/text/SimpleDateFormat;Ljava/text/SimpleDateFormat;]Landroid/database/sqlite/SQLiteConnection$Operation;Landroid/database/sqlite/SQLiteConnection$Operation;
 HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->endOperation(I)V
 HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->endOperationDeferLog(I)Z
 HSPLandroid/database/sqlite/SQLiteConnection$OperationLog;->endOperationDeferLogLocked(I)Z+]Landroid/database/sqlite/SQLiteConnectionPool;Landroid/database/sqlite/SQLiteConnectionPool;
@@ -5510,7 +5519,7 @@
 HSPLandroid/database/sqlite/SQLiteConnection;->acquirePreparedStatement(Ljava/lang/String;)Landroid/database/sqlite/SQLiteConnection$PreparedStatement;+]Landroid/database/sqlite/SQLiteConnection$PreparedStatementCache;Landroid/database/sqlite/SQLiteConnection$PreparedStatementCache;
 HSPLandroid/database/sqlite/SQLiteConnection;->applyBlockGuardPolicy(Landroid/database/sqlite/SQLiteConnection$PreparedStatement;)V+]Landroid/database/sqlite/SQLiteDatabaseConfiguration;Landroid/database/sqlite/SQLiteDatabaseConfiguration;]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;,Landroid/os/StrictMode$AndroidBlockGuardPolicy;
 HSPLandroid/database/sqlite/SQLiteConnection;->attachCancellationSignal(Landroid/os/CancellationSignal;)V+]Landroid/os/CancellationSignal;Landroid/os/CancellationSignal;
-HSPLandroid/database/sqlite/SQLiteConnection;->bindArguments(Landroid/database/sqlite/SQLiteConnection$PreparedStatement;[Ljava/lang/Object;)V+]Ljava/lang/Object;Ljava/lang/String;]Ljava/lang/Number;Ljava/lang/Integer;,Ljava/lang/Long;,Ljava/lang/Float;,Ljava/lang/Double;]Ljava/lang/Boolean;Ljava/lang/Boolean;
+HSPLandroid/database/sqlite/SQLiteConnection;->bindArguments(Landroid/database/sqlite/SQLiteConnection$PreparedStatement;[Ljava/lang/Object;)V+]Ljava/lang/Object;Ljava/lang/String;]Ljava/lang/Number;Ljava/lang/Integer;,Ljava/lang/Long;,Ljava/lang/Double;,Ljava/lang/Float;]Ljava/lang/Boolean;Ljava/lang/Boolean;
 HSPLandroid/database/sqlite/SQLiteConnection;->canonicalizeSyncMode(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteConnection;->checkDatabaseWiped()V
 HSPLandroid/database/sqlite/SQLiteConnection;->close()V
@@ -5518,10 +5527,10 @@
 HSPLandroid/database/sqlite/SQLiteConnection;->detachCancellationSignal(Landroid/os/CancellationSignal;)V+]Landroid/os/CancellationSignal;Landroid/os/CancellationSignal;
 HSPLandroid/database/sqlite/SQLiteConnection;->dispose(Z)V
 HSPLandroid/database/sqlite/SQLiteConnection;->dumpUnsafe(Landroid/util/Printer;Z)V
-HSPLandroid/database/sqlite/SQLiteConnection;->execute(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)V
+HSPLandroid/database/sqlite/SQLiteConnection;->execute(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)V+]Landroid/database/sqlite/SQLiteConnection$OperationLog;Landroid/database/sqlite/SQLiteConnection$OperationLog;
 HSPLandroid/database/sqlite/SQLiteConnection;->executeForChangedRowCount(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)I+]Landroid/database/sqlite/SQLiteConnection$OperationLog;Landroid/database/sqlite/SQLiteConnection$OperationLog;
 HSPLandroid/database/sqlite/SQLiteConnection;->executeForCursorWindow(Ljava/lang/String;[Ljava/lang/Object;Landroid/database/CursorWindow;IIZLandroid/os/CancellationSignal;)I+]Landroid/database/CursorWindow;Landroid/database/CursorWindow;]Landroid/database/sqlite/SQLiteConnection$OperationLog;Landroid/database/sqlite/SQLiteConnection$OperationLog;
-HSPLandroid/database/sqlite/SQLiteConnection;->executeForLastInsertedRowId(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)J
+HSPLandroid/database/sqlite/SQLiteConnection;->executeForLastInsertedRowId(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)J+]Landroid/database/sqlite/SQLiteConnection$OperationLog;Landroid/database/sqlite/SQLiteConnection$OperationLog;
 HSPLandroid/database/sqlite/SQLiteConnection;->executeForLong(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)J
 HSPLandroid/database/sqlite/SQLiteConnection;->executeForString(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteConnection;->executePerConnectionSqlFromConfiguration(I)V
@@ -5530,7 +5539,7 @@
 HSPLandroid/database/sqlite/SQLiteConnection;->getConnectionId()I
 HSPLandroid/database/sqlite/SQLiteConnection;->getMainDbStatsUnsafe(IJJ)Landroid/database/sqlite/SQLiteDebug$DbStats;
 HSPLandroid/database/sqlite/SQLiteConnection;->isCacheable(I)Z
-HSPLandroid/database/sqlite/SQLiteConnection;->isPreparedStatementInCache(Ljava/lang/String;)Z
+HSPLandroid/database/sqlite/SQLiteConnection;->isPreparedStatementInCache(Ljava/lang/String;)Z+]Landroid/database/sqlite/SQLiteConnection$PreparedStatementCache;Landroid/database/sqlite/SQLiteConnection$PreparedStatementCache;
 HSPLandroid/database/sqlite/SQLiteConnection;->isPrimaryConnection()Z
 HSPLandroid/database/sqlite/SQLiteConnection;->maybeTruncateWalFile()V
 HSPLandroid/database/sqlite/SQLiteConnection;->obtainPreparedStatement(Ljava/lang/String;JIIZ)Landroid/database/sqlite/SQLiteConnection$PreparedStatement;
@@ -5574,7 +5583,7 @@
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->dispose(Z)V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->dump(Landroid/util/Printer;ZLandroid/util/ArraySet;)V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->finalize()V
-HSPLandroid/database/sqlite/SQLiteConnectionPool;->finishAcquireConnectionLocked(Landroid/database/sqlite/SQLiteConnection;I)V
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->finishAcquireConnectionLocked(Landroid/database/sqlite/SQLiteConnection;I)V+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->getPath()Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->getPriority(I)I
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->isSessionBlockingImportantConnectionWaitersLocked(ZI)Z
@@ -5588,21 +5597,21 @@
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->reconfigureAllConnectionsLocked()V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->recycleConnectionLocked(Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnectionPool$AcquiredConnectionStatus;)Z
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->recycleConnectionWaiterLocked(Landroid/database/sqlite/SQLiteConnectionPool$ConnectionWaiter;)V
-HSPLandroid/database/sqlite/SQLiteConnectionPool;->releaseConnection(Landroid/database/sqlite/SQLiteConnection;)V+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->releaseConnection(Landroid/database/sqlite/SQLiteConnection;)V+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->setMaxConnectionPoolSizeLocked()V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->setupIdleConnectionHandler(Landroid/os/Looper;J)V
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->shouldYieldConnection(Landroid/database/sqlite/SQLiteConnection;I)Z
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->throwIfClosedLocked()V
-HSPLandroid/database/sqlite/SQLiteConnectionPool;->tryAcquireNonPrimaryConnectionLocked(Ljava/lang/String;I)Landroid/database/sqlite/SQLiteConnection;
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->tryAcquireNonPrimaryConnectionLocked(Ljava/lang/String;I)Landroid/database/sqlite/SQLiteConnection;+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->tryAcquirePrimaryConnectionLocked(I)Landroid/database/sqlite/SQLiteConnection;
-HSPLandroid/database/sqlite/SQLiteConnectionPool;->waitForConnection(Ljava/lang/String;ILandroid/os/CancellationSignal;)Landroid/database/sqlite/SQLiteConnection;+]Landroid/os/CancellationSignal;Landroid/os/CancellationSignal;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;
+HSPLandroid/database/sqlite/SQLiteConnectionPool;->waitForConnection(Ljava/lang/String;ILandroid/os/CancellationSignal;)Landroid/database/sqlite/SQLiteConnection;+]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Landroid/os/CancellationSignal;Landroid/os/CancellationSignal;
 HSPLandroid/database/sqlite/SQLiteConnectionPool;->wakeConnectionWaitersLocked()V
 HSPLandroid/database/sqlite/SQLiteConstraintException;-><init>(Ljava/lang/String;)V
 HSPLandroid/database/sqlite/SQLiteCursor;-><init>(Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)V+]Landroid/database/sqlite/SQLiteQuery;Landroid/database/sqlite/SQLiteQuery;
 HSPLandroid/database/sqlite/SQLiteCursor;->close()V+]Landroid/database/sqlite/SQLiteCursorDriver;Landroid/database/sqlite/SQLiteDirectCursorDriver;]Landroid/database/sqlite/SQLiteQuery;Landroid/database/sqlite/SQLiteQuery;
 HSPLandroid/database/sqlite/SQLiteCursor;->fillWindow(I)V+]Landroid/database/CursorWindow;Landroid/database/CursorWindow;]Landroid/database/sqlite/SQLiteCursor;Landroid/database/sqlite/SQLiteCursor;]Landroid/database/sqlite/SQLiteQuery;Landroid/database/sqlite/SQLiteQuery;]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/database/sqlite/SQLiteCursor;->finalize()V
-HSPLandroid/database/sqlite/SQLiteCursor;->getColumnIndex(Ljava/lang/String;)I
+HSPLandroid/database/sqlite/SQLiteCursor;->getColumnIndex(Ljava/lang/String;)I+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/Map;Ljava/util/HashMap;
 HSPLandroid/database/sqlite/SQLiteCursor;->getColumnNames()[Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteCursor;->getCount()I
 HSPLandroid/database/sqlite/SQLiteCursor;->getDatabase()Landroid/database/sqlite/SQLiteDatabase;+]Landroid/database/sqlite/SQLiteQuery;Landroid/database/sqlite/SQLiteQuery;
@@ -5611,7 +5620,7 @@
 HSPLandroid/database/sqlite/SQLiteDatabase$$ExternalSyntheticLambda0;->get()Ljava/lang/Object;+]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/database/sqlite/SQLiteDatabase$$ExternalSyntheticLambda2;-><init>()V
 HSPLandroid/database/sqlite/SQLiteDatabase$1;-><init>(Ljava/lang/String;)V
-HSPLandroid/database/sqlite/SQLiteDatabase$1;->accept(Ljava/io/File;)Z
+HSPLandroid/database/sqlite/SQLiteDatabase$1;->accept(Ljava/io/File;)Z+]Ljava/lang/String;Ljava/lang/String;]Ljava/io/File;Ljava/io/File;
 HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;-><init>()V
 HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;-><init>(Landroid/database/sqlite/SQLiteDatabase$OpenParams;)V
 HSPLandroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;->addOpenFlags(I)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;
@@ -5640,7 +5649,7 @@
 HSPLandroid/database/sqlite/SQLiteDatabase;->collectDbStats(Ljava/util/ArrayList;)V
 HSPLandroid/database/sqlite/SQLiteDatabase;->compileStatement(Ljava/lang/String;)Landroid/database/sqlite/SQLiteStatement;
 HSPLandroid/database/sqlite/SQLiteDatabase;->createSession()Landroid/database/sqlite/SQLiteSession;
-HSPLandroid/database/sqlite/SQLiteDatabase;->delete(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)I
+HSPLandroid/database/sqlite/SQLiteDatabase;->delete(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/database/sqlite/SQLiteStatement;Landroid/database/sqlite/SQLiteStatement;]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/database/sqlite/SQLiteDatabase;->deleteDatabase(Ljava/io/File;)Z
 HSPLandroid/database/sqlite/SQLiteDatabase;->deleteDatabase(Ljava/io/File;Z)Z
 HSPLandroid/database/sqlite/SQLiteDatabase;->disableWriteAheadLogging()V
@@ -5656,17 +5665,17 @@
 HSPLandroid/database/sqlite/SQLiteDatabase;->findEditTable(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteDatabase;->getActiveDatabasePools()Ljava/util/ArrayList;
 HSPLandroid/database/sqlite/SQLiteDatabase;->getActiveDatabases()Ljava/util/ArrayList;
-HSPLandroid/database/sqlite/SQLiteDatabase;->getFileTimestamps(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/database/sqlite/SQLiteDatabase;->getFileTimestamps(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/nio/file/FileSystem;Lsun/nio/fs/LinuxFileSystem;]Ljava/nio/file/attribute/BasicFileAttributes;Lsun/nio/fs/UnixFileAttributes$UnixAsBasicFileAttributes;
 HSPLandroid/database/sqlite/SQLiteDatabase;->getMaximumSize()J
 HSPLandroid/database/sqlite/SQLiteDatabase;->getPageSize()J
 HSPLandroid/database/sqlite/SQLiteDatabase;->getPath()Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteDatabase;->getThreadDefaultConnectionFlags(Z)I
 HSPLandroid/database/sqlite/SQLiteDatabase;->getThreadSession()Landroid/database/sqlite/SQLiteSession;+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;
 HSPLandroid/database/sqlite/SQLiteDatabase;->getVersion()I
-HSPLandroid/database/sqlite/SQLiteDatabase;->inTransaction()Z
+HSPLandroid/database/sqlite/SQLiteDatabase;->inTransaction()Z+]Landroid/database/sqlite/SQLiteSession;Landroid/database/sqlite/SQLiteSession;]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/database/sqlite/SQLiteDatabase;->insert(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J
 HSPLandroid/database/sqlite/SQLiteDatabase;->insertOrThrow(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J
-HSPLandroid/database/sqlite/SQLiteDatabase;->insertWithOnConflict(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;I)J+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/ContentValues;Landroid/content/ContentValues;]Landroid/database/sqlite/SQLiteStatement;Landroid/database/sqlite/SQLiteStatement;]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/MapCollections$KeySet;
+HSPLandroid/database/sqlite/SQLiteDatabase;->insertWithOnConflict(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;I)J+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/ContentValues;Landroid/content/ContentValues;]Landroid/database/sqlite/SQLiteStatement;Landroid/database/sqlite/SQLiteStatement;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;]Ljava/util/Set;Landroid/util/MapCollections$KeySet;
 HSPLandroid/database/sqlite/SQLiteDatabase;->isMainThread()Z
 HSPLandroid/database/sqlite/SQLiteDatabase;->isOpen()Z
 HSPLandroid/database/sqlite/SQLiteDatabase;->isReadOnly()Z
@@ -5685,7 +5694,7 @@
 HSPLandroid/database/sqlite/SQLiteDatabase;->query(ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;+]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/database/sqlite/SQLiteDatabase;->query(ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;
 HSPLandroid/database/sqlite/SQLiteDatabase;->queryWithFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;+]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
-HSPLandroid/database/sqlite/SQLiteDatabase;->rawQuery(Ljava/lang/String;[Ljava/lang/String;)Landroid/database/Cursor;
+HSPLandroid/database/sqlite/SQLiteDatabase;->rawQuery(Ljava/lang/String;[Ljava/lang/String;)Landroid/database/Cursor;+]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/database/sqlite/SQLiteDatabase;->rawQuery(Ljava/lang/String;[Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;
 HSPLandroid/database/sqlite/SQLiteDatabase;->rawQueryWithFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;
 HSPLandroid/database/sqlite/SQLiteDatabase;->rawQueryWithFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;+]Landroid/database/sqlite/SQLiteCursorDriver;Landroid/database/sqlite/SQLiteDirectCursorDriver;]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
@@ -5745,7 +5754,7 @@
 HSPLandroid/database/sqlite/SQLiteOpenHelper;->setWriteAheadLoggingEnabled(Z)V
 HSPLandroid/database/sqlite/SQLiteProgram;-><init>(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)V+]Ljava/lang/String;Ljava/lang/String;]Landroid/database/sqlite/SQLiteSession;Landroid/database/sqlite/SQLiteSession;]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
 HSPLandroid/database/sqlite/SQLiteProgram;->bind(ILjava/lang/Object;)V
-HSPLandroid/database/sqlite/SQLiteProgram;->bindAllArgsAsStrings([Ljava/lang/String;)V+]Landroid/database/sqlite/SQLiteProgram;Landroid/database/sqlite/SQLiteQuery;,Landroid/database/sqlite/SQLiteStatement;
+HSPLandroid/database/sqlite/SQLiteProgram;->bindAllArgsAsStrings([Ljava/lang/String;)V+]Landroid/database/sqlite/SQLiteProgram;Landroid/database/sqlite/SQLiteStatement;,Landroid/database/sqlite/SQLiteQuery;
 HSPLandroid/database/sqlite/SQLiteProgram;->bindBlob(I[B)V
 HSPLandroid/database/sqlite/SQLiteProgram;->bindDouble(ID)V
 HSPLandroid/database/sqlite/SQLiteProgram;->bindLong(IJ)V
@@ -5787,20 +5796,20 @@
 HSPLandroid/database/sqlite/SQLiteSession;-><init>(Landroid/database/sqlite/SQLiteConnectionPool;)V
 HSPLandroid/database/sqlite/SQLiteSession;->acquireConnection(Ljava/lang/String;ILandroid/os/CancellationSignal;)V+]Landroid/database/sqlite/SQLiteConnectionPool;Landroid/database/sqlite/SQLiteConnectionPool;
 HSPLandroid/database/sqlite/SQLiteSession;->beginTransaction(ILandroid/database/sqlite/SQLiteTransactionListener;ILandroid/os/CancellationSignal;)V
-HSPLandroid/database/sqlite/SQLiteSession;->beginTransactionUnchecked(ILandroid/database/sqlite/SQLiteTransactionListener;ILandroid/os/CancellationSignal;)V
+HSPLandroid/database/sqlite/SQLiteSession;->beginTransactionUnchecked(ILandroid/database/sqlite/SQLiteTransactionListener;ILandroid/os/CancellationSignal;)V+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;
 HSPLandroid/database/sqlite/SQLiteSession;->endTransaction(Landroid/os/CancellationSignal;)V
-HSPLandroid/database/sqlite/SQLiteSession;->endTransactionUnchecked(Landroid/os/CancellationSignal;Z)V
-HSPLandroid/database/sqlite/SQLiteSession;->execute(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)V
+HSPLandroid/database/sqlite/SQLiteSession;->endTransactionUnchecked(Landroid/os/CancellationSignal;Z)V+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;
+HSPLandroid/database/sqlite/SQLiteSession;->execute(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)V+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;
 HSPLandroid/database/sqlite/SQLiteSession;->executeForChangedRowCount(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)I+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;
 HSPLandroid/database/sqlite/SQLiteSession;->executeForCursorWindow(Ljava/lang/String;[Ljava/lang/Object;Landroid/database/CursorWindow;IIZILandroid/os/CancellationSignal;)I+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;
-HSPLandroid/database/sqlite/SQLiteSession;->executeForLastInsertedRowId(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)J
+HSPLandroid/database/sqlite/SQLiteSession;->executeForLastInsertedRowId(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)J+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;
 HSPLandroid/database/sqlite/SQLiteSession;->executeForLong(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)J
 HSPLandroid/database/sqlite/SQLiteSession;->executeForString(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)Ljava/lang/String;
 HSPLandroid/database/sqlite/SQLiteSession;->executeSpecial(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)Z+]Landroid/os/CancellationSignal;Landroid/os/CancellationSignal;
 HSPLandroid/database/sqlite/SQLiteSession;->hasNestedTransaction()Z
 HSPLandroid/database/sqlite/SQLiteSession;->hasTransaction()Z
 HSPLandroid/database/sqlite/SQLiteSession;->obtainTransaction(ILandroid/database/sqlite/SQLiteTransactionListener;)Landroid/database/sqlite/SQLiteSession$Transaction;
-HSPLandroid/database/sqlite/SQLiteSession;->prepare(Ljava/lang/String;ILandroid/os/CancellationSignal;Landroid/database/sqlite/SQLiteStatementInfo;)V+]Landroid/os/CancellationSignal;Landroid/os/CancellationSignal;]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;
+HSPLandroid/database/sqlite/SQLiteSession;->prepare(Ljava/lang/String;ILandroid/os/CancellationSignal;Landroid/database/sqlite/SQLiteStatementInfo;)V+]Landroid/database/sqlite/SQLiteConnection;Landroid/database/sqlite/SQLiteConnection;]Landroid/os/CancellationSignal;Landroid/os/CancellationSignal;
 HSPLandroid/database/sqlite/SQLiteSession;->recycleTransaction(Landroid/database/sqlite/SQLiteSession$Transaction;)V
 HSPLandroid/database/sqlite/SQLiteSession;->releaseConnection()V+]Landroid/database/sqlite/SQLiteConnectionPool;Landroid/database/sqlite/SQLiteConnectionPool;
 HSPLandroid/database/sqlite/SQLiteSession;->setTransactionSuccessful()V
@@ -5810,8 +5819,8 @@
 HSPLandroid/database/sqlite/SQLiteSession;->yieldTransaction(JZLandroid/os/CancellationSignal;)Z
 HSPLandroid/database/sqlite/SQLiteSession;->yieldTransactionUnchecked(JLandroid/os/CancellationSignal;)Z
 HSPLandroid/database/sqlite/SQLiteStatement;-><init>(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;)V
-HSPLandroid/database/sqlite/SQLiteStatement;->execute()V
-HSPLandroid/database/sqlite/SQLiteStatement;->executeInsert()J
+HSPLandroid/database/sqlite/SQLiteStatement;->execute()V+]Landroid/database/sqlite/SQLiteSession;Landroid/database/sqlite/SQLiteSession;]Landroid/database/sqlite/SQLiteStatement;Landroid/database/sqlite/SQLiteStatement;
+HSPLandroid/database/sqlite/SQLiteStatement;->executeInsert()J+]Landroid/database/sqlite/SQLiteSession;Landroid/database/sqlite/SQLiteSession;]Landroid/database/sqlite/SQLiteStatement;Landroid/database/sqlite/SQLiteStatement;
 HSPLandroid/database/sqlite/SQLiteStatement;->executeUpdateDelete()I+]Landroid/database/sqlite/SQLiteSession;Landroid/database/sqlite/SQLiteSession;]Landroid/database/sqlite/SQLiteStatement;Landroid/database/sqlite/SQLiteStatement;
 HSPLandroid/database/sqlite/SQLiteStatement;->simpleQueryForLong()J
 HSPLandroid/database/sqlite/SQLiteStatement;->simpleQueryForString()Ljava/lang/String;
@@ -5849,27 +5858,27 @@
 HSPLandroid/graphics/BaseCanvas;->drawBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Landroid/graphics/RectF;Landroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseCanvas;->drawColor(I)V
 HSPLandroid/graphics/BaseCanvas;->drawLine(FFFFLandroid/graphics/Paint;)V
-HSPLandroid/graphics/BaseCanvas;->drawPath(Landroid/graphics/Path;Landroid/graphics/Paint;)V
+HSPLandroid/graphics/BaseCanvas;->drawPath(Landroid/graphics/Path;Landroid/graphics/Paint;)V+]Landroid/graphics/Paint;missing_types]Landroid/graphics/Path;Landroid/graphics/Path;
 HSPLandroid/graphics/BaseCanvas;->drawText(Ljava/lang/CharSequence;IIFFLandroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseCanvas;->drawTextRun(Ljava/lang/CharSequence;IIIIFFZLandroid/graphics/Paint;)V
-HSPLandroid/graphics/BaseCanvas;->throwIfCannotDraw(Landroid/graphics/Bitmap;)V
-HSPLandroid/graphics/BaseCanvas;->throwIfHasHwFeaturesInSwMode(Landroid/graphics/Paint;)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;,Landroid/text/TextPaint;]Landroid/graphics/BaseCanvas;Landroid/graphics/Canvas;,Landroid/graphics/Picture$PictureCanvas;,Landroid/view/Surface$CompatibleCanvas;
+HSPLandroid/graphics/BaseCanvas;->throwIfCannotDraw(Landroid/graphics/Bitmap;)V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;
+HSPLandroid/graphics/BaseCanvas;->throwIfHasHwFeaturesInSwMode(Landroid/graphics/Paint;)V+]Landroid/graphics/Paint;missing_types]Landroid/graphics/BaseCanvas;Landroid/graphics/Canvas;,Landroid/view/Surface$CompatibleCanvas;,Landroid/graphics/Picture$PictureCanvas;
 HSPLandroid/graphics/BaseCanvas;->throwIfHasHwFeaturesInSwMode(Landroid/graphics/Shader;)V
 HSPLandroid/graphics/BaseCanvas;->throwIfHwBitmapInSwMode(Landroid/graphics/Bitmap;)V
 HSPLandroid/graphics/BaseRecordingCanvas;-><init>(J)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawArc(Landroid/graphics/RectF;FFZLandroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawBitmap(Landroid/graphics/Bitmap;FFLandroid/graphics/Paint;)V
-HSPLandroid/graphics/BaseRecordingCanvas;->drawBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Paint;)V
+HSPLandroid/graphics/BaseRecordingCanvas;->drawBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Paint;)V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/graphics/BaseRecordingCanvas;Landroid/graphics/RecordingCanvas;
 HSPLandroid/graphics/BaseRecordingCanvas;->drawCircle(FFFLandroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawColor(I)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawColor(ILandroid/graphics/PorterDuff$Mode;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawLine(FFFFLandroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawOval(FFFFLandroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawOval(Landroid/graphics/RectF;Landroid/graphics/Paint;)V
-HSPLandroid/graphics/BaseRecordingCanvas;->drawPatch(Landroid/graphics/NinePatch;Landroid/graphics/Rect;Landroid/graphics/Paint;)V
-HSPLandroid/graphics/BaseRecordingCanvas;->drawPath(Landroid/graphics/Path;Landroid/graphics/Paint;)V
-HSPLandroid/graphics/BaseRecordingCanvas;->drawRect(FFFFLandroid/graphics/Paint;)V
-HSPLandroid/graphics/BaseRecordingCanvas;->drawRect(Landroid/graphics/Rect;Landroid/graphics/Paint;)V
+HSPLandroid/graphics/BaseRecordingCanvas;->drawPatch(Landroid/graphics/NinePatch;Landroid/graphics/Rect;Landroid/graphics/Paint;)V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/graphics/NinePatch;Landroid/graphics/NinePatch;]Landroid/graphics/BaseRecordingCanvas;Landroid/graphics/RecordingCanvas;
+HSPLandroid/graphics/BaseRecordingCanvas;->drawPath(Landroid/graphics/Path;Landroid/graphics/Paint;)V+]Landroid/graphics/Paint;missing_types]Landroid/graphics/Path;Landroid/graphics/Path;
+HSPLandroid/graphics/BaseRecordingCanvas;->drawRect(FFFFLandroid/graphics/Paint;)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;
+HSPLandroid/graphics/BaseRecordingCanvas;->drawRect(Landroid/graphics/Rect;Landroid/graphics/Paint;)V+]Landroid/graphics/BaseRecordingCanvas;Landroid/graphics/RecordingCanvas;
 HSPLandroid/graphics/BaseRecordingCanvas;->drawRect(Landroid/graphics/RectF;Landroid/graphics/Paint;)V
 HSPLandroid/graphics/BaseRecordingCanvas;->drawRoundRect(FFFFFFLandroid/graphics/Paint;)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;
 HSPLandroid/graphics/BaseRecordingCanvas;->drawRoundRect(Landroid/graphics/RectF;FFLandroid/graphics/Paint;)V+]Landroid/graphics/BaseRecordingCanvas;Landroid/graphics/RecordingCanvas;
@@ -5882,7 +5891,7 @@
 HSPLandroid/graphics/Bitmap$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/graphics/Bitmap$Config;->nativeToConfig(I)Landroid/graphics/Bitmap$Config;
 HSPLandroid/graphics/Bitmap$Config;->values()[Landroid/graphics/Bitmap$Config;
-HSPLandroid/graphics/Bitmap;-><init>(JIIIZ[BLandroid/graphics/NinePatch$InsetStruct;Z)V
+HSPLandroid/graphics/Bitmap;-><init>(JIIIZ[BLandroid/graphics/NinePatch$InsetStruct;Z)V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/graphics/Bitmap;->checkHardware(Ljava/lang/String;)V
 HSPLandroid/graphics/Bitmap;->checkPixelAccess(II)V
 HSPLandroid/graphics/Bitmap;->checkPixelsAccess(IIIIII[I)V
@@ -5902,7 +5911,7 @@
 HSPLandroid/graphics/Bitmap;->eraseColor(I)V
 HSPLandroid/graphics/Bitmap;->extractAlpha(Landroid/graphics/Paint;[I)Landroid/graphics/Bitmap;
 HSPLandroid/graphics/Bitmap;->getAllocationByteCount()I
-HSPLandroid/graphics/Bitmap;->getByteCount()I
+HSPLandroid/graphics/Bitmap;->getByteCount()I+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;
 HSPLandroid/graphics/Bitmap;->getColorSpace()Landroid/graphics/ColorSpace;
 HSPLandroid/graphics/Bitmap;->getConfig()Landroid/graphics/Bitmap$Config;
 HSPLandroid/graphics/Bitmap;->getDefaultDensity()I
@@ -5915,8 +5924,8 @@
 HSPLandroid/graphics/Bitmap;->getPixel(II)I
 HSPLandroid/graphics/Bitmap;->getPixels([IIIIIII)V
 HSPLandroid/graphics/Bitmap;->getRowBytes()I
-HSPLandroid/graphics/Bitmap;->getScaledHeight(I)I
-HSPLandroid/graphics/Bitmap;->getScaledWidth(I)I
+HSPLandroid/graphics/Bitmap;->getScaledHeight(I)I+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;
+HSPLandroid/graphics/Bitmap;->getScaledWidth(I)I+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;
 HSPLandroid/graphics/Bitmap;->getWidth()I
 HSPLandroid/graphics/Bitmap;->hasAlpha()Z
 HSPLandroid/graphics/Bitmap;->hasMipMap()Z
@@ -5925,7 +5934,7 @@
 HSPLandroid/graphics/Bitmap;->isRecycled()Z
 HSPLandroid/graphics/Bitmap;->noteHardwareBitmapSlowCall()V
 HSPLandroid/graphics/Bitmap;->prepareToDraw()V
-HSPLandroid/graphics/Bitmap;->reconfigure(IILandroid/graphics/Bitmap$Config;)V
+HSPLandroid/graphics/Bitmap;->reconfigure(IILandroid/graphics/Bitmap$Config;)V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;
 HSPLandroid/graphics/Bitmap;->recycle()V
 HSPLandroid/graphics/Bitmap;->reinit(IIZ)V
 HSPLandroid/graphics/Bitmap;->scaleFromDensity(III)I
@@ -5939,7 +5948,7 @@
 HSPLandroid/graphics/BitmapFactory$Options;-><init>()V
 HSPLandroid/graphics/BitmapFactory$Options;->nativeColorSpace(Landroid/graphics/BitmapFactory$Options;)J
 HSPLandroid/graphics/BitmapFactory$Options;->nativeInBitmap(Landroid/graphics/BitmapFactory$Options;)J
-HSPLandroid/graphics/BitmapFactory$Options;->validate(Landroid/graphics/BitmapFactory$Options;)V
+HSPLandroid/graphics/BitmapFactory$Options;->validate(Landroid/graphics/BitmapFactory$Options;)V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;
 HSPLandroid/graphics/BitmapFactory;->decodeByteArray([BII)Landroid/graphics/Bitmap;
 HSPLandroid/graphics/BitmapFactory;->decodeByteArray([BIILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;
 HSPLandroid/graphics/BitmapFactory;->decodeFile(Ljava/lang/String;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;
@@ -5956,10 +5965,10 @@
 HSPLandroid/graphics/BitmapShader;-><init>(Landroid/graphics/Bitmap;Landroid/graphics/Shader$TileMode;Landroid/graphics/Shader$TileMode;)V
 HSPLandroid/graphics/BitmapShader;->createNativeInstance(JZ)J
 HSPLandroid/graphics/BitmapShader;->shouldDiscardNativeInstance(Z)Z
-HSPLandroid/graphics/BlendMode;->blendModeToPorterDuffMode(Landroid/graphics/BlendMode;)Landroid/graphics/PorterDuff$Mode;
+HSPLandroid/graphics/BlendMode;->blendModeToPorterDuffMode(Landroid/graphics/BlendMode;)Landroid/graphics/PorterDuff$Mode;+]Landroid/graphics/BlendMode;Landroid/graphics/BlendMode;
 HSPLandroid/graphics/BlendMode;->fromValue(I)Landroid/graphics/BlendMode;
 HSPLandroid/graphics/BlendMode;->getXfermode()Landroid/graphics/Xfermode;
-HSPLandroid/graphics/BlendMode;->toValue(Landroid/graphics/BlendMode;)I
+HSPLandroid/graphics/BlendMode;->toValue(Landroid/graphics/BlendMode;)I+]Landroid/graphics/BlendMode;Landroid/graphics/BlendMode;
 HSPLandroid/graphics/BlendModeColorFilter;-><init>(ILandroid/graphics/BlendMode;)V
 HSPLandroid/graphics/BlendModeColorFilter;->createNativeInstance()J
 HSPLandroid/graphics/BlendModeColorFilter;->getColor()I
@@ -5967,15 +5976,15 @@
 HSPLandroid/graphics/BlurMaskFilter;-><init>(FLandroid/graphics/BlurMaskFilter$Blur;)V
 HSPLandroid/graphics/Canvas;-><init>()V
 HSPLandroid/graphics/Canvas;-><init>(J)V
-HSPLandroid/graphics/Canvas;-><init>(Landroid/graphics/Bitmap;)V
+HSPLandroid/graphics/Canvas;-><init>(Landroid/graphics/Bitmap;)V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;]Landroid/graphics/Canvas;Landroid/graphics/Canvas;
 HSPLandroid/graphics/Canvas;->checkValidClipOp(Landroid/graphics/Region$Op;)V
 HSPLandroid/graphics/Canvas;->clipPath(Landroid/graphics/Path;)Z
-HSPLandroid/graphics/Canvas;->clipPath(Landroid/graphics/Path;Landroid/graphics/Region$Op;)Z
+HSPLandroid/graphics/Canvas;->clipPath(Landroid/graphics/Path;Landroid/graphics/Region$Op;)Z+]Landroid/graphics/Path;Landroid/graphics/Path;
 HSPLandroid/graphics/Canvas;->clipRect(FFFF)Z
 HSPLandroid/graphics/Canvas;->clipRect(IIII)Z
 HSPLandroid/graphics/Canvas;->clipRect(Landroid/graphics/Rect;)Z
 HSPLandroid/graphics/Canvas;->clipRect(Landroid/graphics/RectF;)Z
-HSPLandroid/graphics/Canvas;->concat(Landroid/graphics/Matrix;)V
+HSPLandroid/graphics/Canvas;->concat(Landroid/graphics/Matrix;)V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
 HSPLandroid/graphics/Canvas;->disableZ()V
 HSPLandroid/graphics/Canvas;->drawARGB(IIII)V
 HSPLandroid/graphics/Canvas;->drawArc(FFFFFFZLandroid/graphics/Paint;)V
@@ -6020,13 +6029,13 @@
 HSPLandroid/graphics/Canvas;->save()I
 HSPLandroid/graphics/Canvas;->save(I)I
 HSPLandroid/graphics/Canvas;->saveLayer(FFFFLandroid/graphics/Paint;I)I
-HSPLandroid/graphics/Canvas;->saveLayer(Landroid/graphics/RectF;Landroid/graphics/Paint;)I
-HSPLandroid/graphics/Canvas;->saveLayer(Landroid/graphics/RectF;Landroid/graphics/Paint;I)I
+HSPLandroid/graphics/Canvas;->saveLayer(Landroid/graphics/RectF;Landroid/graphics/Paint;)I+]Landroid/graphics/Canvas;Landroid/graphics/Canvas;
+HSPLandroid/graphics/Canvas;->saveLayer(Landroid/graphics/RectF;Landroid/graphics/Paint;I)I+]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;,Landroid/graphics/Canvas;
 HSPLandroid/graphics/Canvas;->saveLayerAlpha(FFFFI)I
 HSPLandroid/graphics/Canvas;->saveLayerAlpha(FFFFII)I
 HSPLandroid/graphics/Canvas;->saveUnclippedLayer(IIII)I
 HSPLandroid/graphics/Canvas;->scale(FF)V
-HSPLandroid/graphics/Canvas;->scale(FFFF)V
+HSPLandroid/graphics/Canvas;->scale(FFFF)V+]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
 HSPLandroid/graphics/Canvas;->setBitmap(Landroid/graphics/Bitmap;)V
 HSPLandroid/graphics/Canvas;->setCompatibilityVersion(I)V
 HSPLandroid/graphics/Canvas;->setDensity(I)V
@@ -6053,7 +6062,7 @@
 HSPLandroid/graphics/Color;->green()F
 HSPLandroid/graphics/Color;->green(I)I
 HSPLandroid/graphics/Color;->green(J)F
-HSPLandroid/graphics/Color;->pack(FFFFLandroid/graphics/ColorSpace;)J
+HSPLandroid/graphics/Color;->pack(FFFFLandroid/graphics/ColorSpace;)J+]Landroid/graphics/ColorSpace;Landroid/graphics/ColorSpace$Rgb;
 HSPLandroid/graphics/Color;->pack(I)J
 HSPLandroid/graphics/Color;->parseColor(Ljava/lang/String;)I
 HSPLandroid/graphics/Color;->red()F
@@ -6064,7 +6073,7 @@
 HSPLandroid/graphics/Color;->toArgb(J)I
 HSPLandroid/graphics/Color;->valueOf(I)Landroid/graphics/Color;
 HSPLandroid/graphics/ColorFilter;-><init>()V
-HSPLandroid/graphics/ColorFilter;->getNativeInstance()J
+HSPLandroid/graphics/ColorFilter;->getNativeInstance()J+]Landroid/graphics/ColorFilter;Landroid/graphics/PorterDuffColorFilter;,Landroid/graphics/BlendModeColorFilter;]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
 HSPLandroid/graphics/ColorMatrixColorFilter;-><init>(Landroid/graphics/ColorMatrix;)V
 HSPLandroid/graphics/ColorMatrixColorFilter;-><init>([F)V
 HSPLandroid/graphics/ColorMatrixColorFilter;->createNativeInstance()J
@@ -6074,7 +6083,7 @@
 HSPLandroid/graphics/ColorSpace$Rgb$TransferParameters;->hashCode()I
 HSPLandroid/graphics/ColorSpace$Rgb;-><init>(Ljava/lang/String;[FLandroid/graphics/ColorSpace$Rgb$TransferParameters;)V
 HSPLandroid/graphics/ColorSpace$Rgb;-><init>(Ljava/lang/String;[F[F[FLandroid/graphics/ColorSpace$Rgb$TransferParameters;I)V
-HSPLandroid/graphics/ColorSpace$Rgb;-><init>(Ljava/lang/String;[F[F[FLjava/util/function/DoubleUnaryOperator;Ljava/util/function/DoubleUnaryOperator;FFLandroid/graphics/ColorSpace$Rgb$TransferParameters;I)V
+HSPLandroid/graphics/ColorSpace$Rgb;-><init>(Ljava/lang/String;[F[F[FLjava/util/function/DoubleUnaryOperator;Ljava/util/function/DoubleUnaryOperator;FFLandroid/graphics/ColorSpace$Rgb$TransferParameters;I)V+]Ljava/util/function/DoubleUnaryOperator;Landroid/graphics/ColorSpace$Rgb$$ExternalSyntheticLambda1;,Landroid/graphics/ColorSpace$Rgb$$ExternalSyntheticLambda5;,Ljava/util/function/DoubleUnaryOperator$$ExternalSyntheticLambda2;,Landroid/graphics/ColorSpace$$ExternalSyntheticLambda0;,Landroid/graphics/ColorSpace$Rgb$$ExternalSyntheticLambda0;]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
 HSPLandroid/graphics/ColorSpace$Rgb;->area([F)F
 HSPLandroid/graphics/ColorSpace$Rgb;->computePrimaries([F)[F
 HSPLandroid/graphics/ColorSpace$Rgb;->computeWhitePoint([F)[F
@@ -6150,7 +6159,7 @@
 HSPLandroid/graphics/HardwareRenderer;->notifyFramePending()V
 HSPLandroid/graphics/HardwareRenderer;->onLayerDestroyed(Landroid/graphics/TextureLayer;)V
 HSPLandroid/graphics/HardwareRenderer;->pause()Z
-HSPLandroid/graphics/HardwareRenderer;->pushLayerUpdate(Landroid/graphics/TextureLayer;)V
+HSPLandroid/graphics/HardwareRenderer;->pushLayerUpdate(Landroid/graphics/TextureLayer;)V+]Landroid/graphics/TextureLayer;Landroid/graphics/TextureLayer;
 HSPLandroid/graphics/HardwareRenderer;->registerVectorDrawableAnimator(Landroid/view/NativeVectorDrawableAnimator;)V
 HSPLandroid/graphics/HardwareRenderer;->removeObserver(Landroid/graphics/HardwareRendererObserver;)V
 HSPLandroid/graphics/HardwareRenderer;->sendDeviceConfigurationForDebugging(Landroid/content/res/Configuration;)V
@@ -6181,11 +6190,11 @@
 HSPLandroid/graphics/HardwareRenderer;->validateFinite(FLjava/lang/String;)V
 HSPLandroid/graphics/HardwareRenderer;->validatePositive(FLjava/lang/String;)V
 HSPLandroid/graphics/HardwareRendererObserver$$ExternalSyntheticLambda0;-><init>(Landroid/graphics/HardwareRendererObserver;)V
-HSPLandroid/graphics/HardwareRendererObserver$$ExternalSyntheticLambda0;->run()V
+HSPLandroid/graphics/HardwareRendererObserver$$ExternalSyntheticLambda0;->run()V+]Landroid/graphics/HardwareRendererObserver;Landroid/graphics/HardwareRendererObserver;
 HSPLandroid/graphics/HardwareRendererObserver;-><init>(Landroid/graphics/HardwareRendererObserver$OnFrameMetricsAvailableListener;[JLandroid/os/Handler;Z)V
 HSPLandroid/graphics/HardwareRendererObserver;->getNativeInstance()J
 HSPLandroid/graphics/HardwareRendererObserver;->invokeDataAvailable(Ljava/lang/ref/WeakReference;)Z+]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
-HSPLandroid/graphics/HardwareRendererObserver;->notifyDataAvailable()V
+HSPLandroid/graphics/HardwareRendererObserver;->notifyDataAvailable()V+]Landroid/os/Handler;Landroid/os/Handler;,Landroid/view/ViewRootImpl$ViewRootHandler;
 HSPLandroid/graphics/ImageDecoder$AssetInputStreamSource;-><init>(Landroid/content/res/AssetManager$AssetInputStream;Landroid/content/res/Resources;Landroid/util/TypedValue;)V
 HSPLandroid/graphics/ImageDecoder$AssetInputStreamSource;->createImageDecoder(Z)Landroid/graphics/ImageDecoder;
 HSPLandroid/graphics/ImageDecoder$AssetInputStreamSource;->getDensity()I
@@ -6198,7 +6207,7 @@
 HSPLandroid/graphics/ImageDecoder$Source;-><init>()V
 HSPLandroid/graphics/ImageDecoder$Source;-><init>(Landroid/graphics/ImageDecoder$Source-IA;)V
 HSPLandroid/graphics/ImageDecoder$Source;->computeDstDensity()I
-HSPLandroid/graphics/ImageDecoder;-><init>(JIIZZ)V
+HSPLandroid/graphics/ImageDecoder;-><init>(JIIZZ)V+]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
 HSPLandroid/graphics/ImageDecoder;->callHeaderDecoded(Landroid/graphics/ImageDecoder$OnHeaderDecodedListener;Landroid/graphics/ImageDecoder$Source;)V
 HSPLandroid/graphics/ImageDecoder;->checkForExtended()Z
 HSPLandroid/graphics/ImageDecoder;->checkState(Z)V
@@ -6222,7 +6231,7 @@
 HSPLandroid/graphics/Insets$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/graphics/Insets;-><init>(IIII)V
 HSPLandroid/graphics/Insets;-><init>(IIIILandroid/graphics/Insets-IA;)V
-HSPLandroid/graphics/Insets;->equals(Ljava/lang/Object;)Z
+HSPLandroid/graphics/Insets;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Landroid/graphics/Insets;
 HSPLandroid/graphics/Insets;->hashCode()I
 HSPLandroid/graphics/Insets;->max(Landroid/graphics/Insets;Landroid/graphics/Insets;)Landroid/graphics/Insets;
 HSPLandroid/graphics/Insets;->min(Landroid/graphics/Insets;Landroid/graphics/Insets;)Landroid/graphics/Insets;
@@ -6238,7 +6247,7 @@
 HSPLandroid/graphics/Interpolator;->timeToValues(I[F)Landroid/graphics/Interpolator$Result;
 HSPLandroid/graphics/Interpolator;->timeToValues([F)Landroid/graphics/Interpolator$Result;
 HSPLandroid/graphics/LeakyTypefaceStorage;->readTypefaceFromParcel(Landroid/os/Parcel;)Landroid/graphics/Typeface;
-HSPLandroid/graphics/LeakyTypefaceStorage;->writeTypefaceToParcel(Landroid/graphics/Typeface;Landroid/os/Parcel;)V
+HSPLandroid/graphics/LeakyTypefaceStorage;->writeTypefaceToParcel(Landroid/graphics/Typeface;Landroid/os/Parcel;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/graphics/LinearGradient;-><init>(FFFFIILandroid/graphics/Shader$TileMode;)V
 HSPLandroid/graphics/LinearGradient;-><init>(FFFFJJLandroid/graphics/Shader$TileMode;)V
 HSPLandroid/graphics/LinearGradient;-><init>(FFFF[I[FLandroid/graphics/Shader$TileMode;)V
@@ -6246,14 +6255,14 @@
 HSPLandroid/graphics/LinearGradient;-><init>(FFFF[J[FLandroid/graphics/Shader$TileMode;Landroid/graphics/ColorSpace;)V
 HSPLandroid/graphics/LinearGradient;->createNativeInstance(JZ)J
 HSPLandroid/graphics/MaskFilter;->finalize()V
-HSPLandroid/graphics/Matrix;-><init>()V
-HSPLandroid/graphics/Matrix;-><init>(Landroid/graphics/Matrix;)V
+HSPLandroid/graphics/Matrix;-><init>()V+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
+HSPLandroid/graphics/Matrix;-><init>(Landroid/graphics/Matrix;)V+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
 HSPLandroid/graphics/Matrix;->checkPointArrays([FI[FII)V
 HSPLandroid/graphics/Matrix;->equals(Ljava/lang/Object;)Z
 HSPLandroid/graphics/Matrix;->getValues([F)V
 HSPLandroid/graphics/Matrix;->invert(Landroid/graphics/Matrix;)Z
 HSPLandroid/graphics/Matrix;->isIdentity()Z
-HSPLandroid/graphics/Matrix;->mapPoints([F)V
+HSPLandroid/graphics/Matrix;->mapPoints([F)V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
 HSPLandroid/graphics/Matrix;->mapPoints([FI[FII)V
 HSPLandroid/graphics/Matrix;->mapRect(Landroid/graphics/RectF;)Z+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
 HSPLandroid/graphics/Matrix;->mapRect(Landroid/graphics/RectF;Landroid/graphics/RectF;)Z
@@ -6291,19 +6300,19 @@
 HSPLandroid/graphics/Outline;->isEmpty()Z
 HSPLandroid/graphics/Outline;->setAlpha(F)V
 HSPLandroid/graphics/Outline;->setConvexPath(Landroid/graphics/Path;)V
-HSPLandroid/graphics/Outline;->setEmpty()V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/Path;Landroid/graphics/Path;
+HSPLandroid/graphics/Outline;->setEmpty()V+]Landroid/graphics/Path;Landroid/graphics/Path;]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/graphics/Outline;->setOval(IIII)V
 HSPLandroid/graphics/Outline;->setOval(Landroid/graphics/Rect;)V
-HSPLandroid/graphics/Outline;->setPath(Landroid/graphics/Path;)V
-HSPLandroid/graphics/Outline;->setRect(IIII)V
-HSPLandroid/graphics/Outline;->setRect(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/Outline;->setPath(Landroid/graphics/Path;)V+]Landroid/graphics/Path;Landroid/graphics/Path;]Landroid/graphics/Rect;Landroid/graphics/Rect;
+HSPLandroid/graphics/Outline;->setRect(IIII)V+]Landroid/graphics/Outline;Landroid/graphics/Outline;
+HSPLandroid/graphics/Outline;->setRect(Landroid/graphics/Rect;)V+]Landroid/graphics/Outline;Landroid/graphics/Outline;
 HSPLandroid/graphics/Outline;->setRoundRect(IIIIF)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/Outline;Landroid/graphics/Outline;
 HSPLandroid/graphics/Outline;->setRoundRect(Landroid/graphics/Rect;F)V+]Landroid/graphics/Outline;Landroid/graphics/Outline;
 HSPLandroid/graphics/Paint$FontMetrics;-><init>()V
 HSPLandroid/graphics/Paint$FontMetricsInt;-><init>()V
 HSPLandroid/graphics/Paint;-><init>()V
 HSPLandroid/graphics/Paint;-><init>(I)V+]Landroid/graphics/Paint;missing_types]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
-HSPLandroid/graphics/Paint;-><init>(Landroid/graphics/Paint;)V
+HSPLandroid/graphics/Paint;-><init>(Landroid/graphics/Paint;)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
 HSPLandroid/graphics/Paint;->ascent()F
 HSPLandroid/graphics/Paint;->descent()F
 HSPLandroid/graphics/Paint;->getAlpha()I
@@ -6320,8 +6329,8 @@
 HSPLandroid/graphics/Paint;->getHinting()I
 HSPLandroid/graphics/Paint;->getLetterSpacing()F
 HSPLandroid/graphics/Paint;->getMaskFilter()Landroid/graphics/MaskFilter;
-HSPLandroid/graphics/Paint;->getNativeInstance()J+]Landroid/graphics/ColorFilter;Landroid/graphics/PorterDuffColorFilter;,Landroid/graphics/BlendModeColorFilter;]Landroid/graphics/Paint;missing_types]Landroid/graphics/Shader;Landroid/graphics/drawable/RippleShader;,Landroid/graphics/BitmapShader;
-HSPLandroid/graphics/Paint;->getRunAdvance(Ljava/lang/CharSequence;IIIIZI)F+]Landroid/graphics/Paint;Landroid/text/TextPaint;]Ljava/lang/CharSequence;Ljava/lang/String;,Ljava/lang/StringBuilder;,Landroid/text/SpannableString;
+HSPLandroid/graphics/Paint;->getNativeInstance()J+]Landroid/graphics/Paint;missing_types]Landroid/graphics/Shader;Landroid/graphics/BitmapShader;,Landroid/graphics/LinearGradient;,Landroid/graphics/drawable/RippleShader;,Landroid/graphics/RadialGradient;]Landroid/graphics/ColorFilter;Landroid/graphics/PorterDuffColorFilter;,Landroid/graphics/BlendModeColorFilter;
+HSPLandroid/graphics/Paint;->getRunAdvance(Ljava/lang/CharSequence;IIIIZI)F+]Landroid/graphics/Paint;Landroid/text/TextPaint;]Ljava/lang/CharSequence;missing_types
 HSPLandroid/graphics/Paint;->getRunAdvance([CIIIIZI)F
 HSPLandroid/graphics/Paint;->getShader()Landroid/graphics/Shader;
 HSPLandroid/graphics/Paint;->getShadowLayerColor()I
@@ -6335,7 +6344,7 @@
 HSPLandroid/graphics/Paint;->getStrokeWidth()F
 HSPLandroid/graphics/Paint;->getStyle()Landroid/graphics/Paint$Style;
 HSPLandroid/graphics/Paint;->getTextAlign()Landroid/graphics/Paint$Align;
-HSPLandroid/graphics/Paint;->getTextBounds(Ljava/lang/CharSequence;IILandroid/graphics/Rect;)V
+HSPLandroid/graphics/Paint;->getTextBounds(Ljava/lang/CharSequence;IILandroid/graphics/Rect;)V+]Landroid/graphics/Paint;Landroid/text/TextPaint;]Ljava/lang/CharSequence;missing_types
 HSPLandroid/graphics/Paint;->getTextBounds(Ljava/lang/String;IILandroid/graphics/Rect;)V
 HSPLandroid/graphics/Paint;->getTextBounds([CIILandroid/graphics/Rect;)V
 HSPLandroid/graphics/Paint;->getTextLocale()Ljava/util/Locale;+]Landroid/os/LocaleList;Landroid/os/LocaleList;
@@ -6355,7 +6364,7 @@
 HSPLandroid/graphics/Paint;->isAntiAlias()Z
 HSPLandroid/graphics/Paint;->isDither()Z
 HSPLandroid/graphics/Paint;->isElegantTextHeight()Z
-HSPLandroid/graphics/Paint;->isFilterBitmap()Z
+HSPLandroid/graphics/Paint;->isFilterBitmap()Z+]Landroid/graphics/Paint;missing_types
 HSPLandroid/graphics/Paint;->measureText(Ljava/lang/CharSequence;II)F
 HSPLandroid/graphics/Paint;->measureText(Ljava/lang/String;)F
 HSPLandroid/graphics/Paint;->measureText(Ljava/lang/String;II)F
@@ -6380,7 +6389,7 @@
 HSPLandroid/graphics/Paint;->setPathEffect(Landroid/graphics/PathEffect;)Landroid/graphics/PathEffect;
 HSPLandroid/graphics/Paint;->setShader(Landroid/graphics/Shader;)Landroid/graphics/Shader;
 HSPLandroid/graphics/Paint;->setShadowLayer(FFFI)V
-HSPLandroid/graphics/Paint;->setShadowLayer(FFFJ)V
+HSPLandroid/graphics/Paint;->setShadowLayer(FFFJ)V+]Landroid/graphics/ColorSpace;Landroid/graphics/ColorSpace$Rgb;
 HSPLandroid/graphics/Paint;->setStartHyphenEdit(I)V
 HSPLandroid/graphics/Paint;->setStrokeCap(Landroid/graphics/Paint$Cap;)V
 HSPLandroid/graphics/Paint;->setStrokeJoin(Landroid/graphics/Paint$Join;)V
@@ -6388,7 +6397,7 @@
 HSPLandroid/graphics/Paint;->setStrokeWidth(F)V
 HSPLandroid/graphics/Paint;->setStyle(Landroid/graphics/Paint$Style;)V
 HSPLandroid/graphics/Paint;->setTextAlign(Landroid/graphics/Paint$Align;)V
-HSPLandroid/graphics/Paint;->setTextLocales(Landroid/os/LocaleList;)V
+HSPLandroid/graphics/Paint;->setTextLocales(Landroid/os/LocaleList;)V+]Landroid/os/LocaleList;Landroid/os/LocaleList;
 HSPLandroid/graphics/Paint;->setTextScaleX(F)V
 HSPLandroid/graphics/Paint;->setTextSize(F)V
 HSPLandroid/graphics/Paint;->setTextSkewX(F)V
@@ -6397,19 +6406,19 @@
 HSPLandroid/graphics/Paint;->setXfermode(Landroid/graphics/Xfermode;)Landroid/graphics/Xfermode;
 HSPLandroid/graphics/Paint;->syncTextLocalesWithMinikin()V+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/os/LocaleList;Landroid/os/LocaleList;
 HSPLandroid/graphics/PaintFlagsDrawFilter;-><init>(II)V
-HSPLandroid/graphics/Path;-><init>()V
+HSPLandroid/graphics/Path;-><init>()V+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
 HSPLandroid/graphics/Path;-><init>(Landroid/graphics/Path;)V
 HSPLandroid/graphics/Path;->addArc(FFFFFF)V
 HSPLandroid/graphics/Path;->addArc(Landroid/graphics/RectF;FF)V
 HSPLandroid/graphics/Path;->addCircle(FFFLandroid/graphics/Path$Direction;)V
 HSPLandroid/graphics/Path;->addOval(FFFFLandroid/graphics/Path$Direction;)V
 HSPLandroid/graphics/Path;->addOval(Landroid/graphics/RectF;Landroid/graphics/Path$Direction;)V
-HSPLandroid/graphics/Path;->addPath(Landroid/graphics/Path;Landroid/graphics/Matrix;)V
+HSPLandroid/graphics/Path;->addPath(Landroid/graphics/Path;Landroid/graphics/Matrix;)V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
 HSPLandroid/graphics/Path;->addRect(FFFFLandroid/graphics/Path$Direction;)V
-HSPLandroid/graphics/Path;->addRect(Landroid/graphics/RectF;Landroid/graphics/Path$Direction;)V
+HSPLandroid/graphics/Path;->addRect(Landroid/graphics/RectF;Landroid/graphics/Path$Direction;)V+]Landroid/graphics/Path;Landroid/graphics/Path;
 HSPLandroid/graphics/Path;->addRoundRect(FFFFFFLandroid/graphics/Path$Direction;)V
 HSPLandroid/graphics/Path;->addRoundRect(FFFF[FLandroid/graphics/Path$Direction;)V
-HSPLandroid/graphics/Path;->addRoundRect(Landroid/graphics/RectF;FFLandroid/graphics/Path$Direction;)V
+HSPLandroid/graphics/Path;->addRoundRect(Landroid/graphics/RectF;FFLandroid/graphics/Path$Direction;)V+]Landroid/graphics/Path;Landroid/graphics/Path;
 HSPLandroid/graphics/Path;->addRoundRect(Landroid/graphics/RectF;[FLandroid/graphics/Path$Direction;)V
 HSPLandroid/graphics/Path;->approximate(F)[F
 HSPLandroid/graphics/Path;->arcTo(FFFFFFZ)V
@@ -6418,7 +6427,7 @@
 HSPLandroid/graphics/Path;->close()V
 HSPLandroid/graphics/Path;->computeBounds(Landroid/graphics/RectF;Z)V
 HSPLandroid/graphics/Path;->cubicTo(FFFFFF)V
-HSPLandroid/graphics/Path;->detectSimplePath(FFFFLandroid/graphics/Path$Direction;)V
+HSPLandroid/graphics/Path;->detectSimplePath(FFFFLandroid/graphics/Path$Direction;)V+]Landroid/graphics/Region;Landroid/graphics/Region;
 HSPLandroid/graphics/Path;->getFillType()Landroid/graphics/Path$FillType;
 HSPLandroid/graphics/Path;->isConvex()Z
 HSPLandroid/graphics/Path;->isEmpty()Z
@@ -6426,10 +6435,10 @@
 HSPLandroid/graphics/Path;->moveTo(FF)V
 HSPLandroid/graphics/Path;->offset(FF)V
 HSPLandroid/graphics/Path;->op(Landroid/graphics/Path;Landroid/graphics/Path$Op;)Z
-HSPLandroid/graphics/Path;->op(Landroid/graphics/Path;Landroid/graphics/Path;Landroid/graphics/Path$Op;)Z
+HSPLandroid/graphics/Path;->op(Landroid/graphics/Path;Landroid/graphics/Path;Landroid/graphics/Path$Op;)Z+]Landroid/graphics/Path$Op;Landroid/graphics/Path$Op;
 HSPLandroid/graphics/Path;->rLineTo(FF)V
 HSPLandroid/graphics/Path;->readOnlyNI()J
-HSPLandroid/graphics/Path;->reset()V+]Landroid/graphics/Path;Landroid/graphics/Path;
+HSPLandroid/graphics/Path;->reset()V+]Landroid/graphics/Path;Landroid/graphics/Path;]Landroid/graphics/Region;Landroid/graphics/Region;
 HSPLandroid/graphics/Path;->rewind()V+]Landroid/graphics/Region;Landroid/graphics/Region;
 HSPLandroid/graphics/Path;->set(Landroid/graphics/Path;)V
 HSPLandroid/graphics/Path;->setFillType(Landroid/graphics/Path$FillType;)V
@@ -6456,7 +6465,7 @@
 HSPLandroid/graphics/Point;-><init>(II)V
 HSPLandroid/graphics/Point;-><init>(Landroid/graphics/Point;)V
 HSPLandroid/graphics/Point;->equals(II)Z
-HSPLandroid/graphics/Point;->equals(Ljava/lang/Object;)Z
+HSPLandroid/graphics/Point;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Landroid/graphics/Point;
 HSPLandroid/graphics/Point;->hashCode()I
 HSPLandroid/graphics/Point;->offset(II)V
 HSPLandroid/graphics/Point;->readFromParcel(Landroid/os/Parcel;)V
@@ -6465,7 +6474,7 @@
 HSPLandroid/graphics/PointF;-><init>()V
 HSPLandroid/graphics/PointF;-><init>(FF)V
 HSPLandroid/graphics/PointF;->equals(FF)Z
-HSPLandroid/graphics/PointF;->equals(Ljava/lang/Object;)Z
+HSPLandroid/graphics/PointF;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Landroid/graphics/PointF;
 HSPLandroid/graphics/PointF;->length()F
 HSPLandroid/graphics/PointF;->length(FF)F
 HSPLandroid/graphics/PointF;->set(FF)V
@@ -6476,9 +6485,9 @@
 HSPLandroid/graphics/PorterDuffColorFilter;->getColor()I
 HSPLandroid/graphics/PorterDuffColorFilter;->getMode()Landroid/graphics/PorterDuff$Mode;
 HSPLandroid/graphics/PorterDuffXfermode;-><init>(Landroid/graphics/PorterDuff$Mode;)V
-HSPLandroid/graphics/RadialGradient;-><init>(FFFFFF[J[FLandroid/graphics/Shader$TileMode;Landroid/graphics/ColorSpace;)V
+HSPLandroid/graphics/RadialGradient;-><init>(FFFFFF[J[FLandroid/graphics/Shader$TileMode;Landroid/graphics/ColorSpace;)V+][F[F
 HSPLandroid/graphics/RadialGradient;-><init>(FFF[I[FLandroid/graphics/Shader$TileMode;)V
-HSPLandroid/graphics/RadialGradient;->createNativeInstance(JZ)J
+HSPLandroid/graphics/RadialGradient;->createNativeInstance(JZ)J+]Landroid/graphics/ColorSpace;Landroid/graphics/ColorSpace$Rgb;]Landroid/graphics/RadialGradient;Landroid/graphics/RadialGradient;
 HSPLandroid/graphics/RecordingCanvas;-><init>(Landroid/graphics/RenderNode;II)V
 HSPLandroid/graphics/RecordingCanvas;->disableZ()V
 HSPLandroid/graphics/RecordingCanvas;->drawRenderNode(Landroid/graphics/RenderNode;)V
@@ -6491,7 +6500,7 @@
 HSPLandroid/graphics/RecordingCanvas;->isHardwareAccelerated()Z
 HSPLandroid/graphics/RecordingCanvas;->obtain(Landroid/graphics/RenderNode;II)Landroid/graphics/RecordingCanvas;+]Landroid/util/Pools$SynchronizedPool;Landroid/util/Pools$SynchronizedPool;
 HSPLandroid/graphics/RecordingCanvas;->recycle()V+]Landroid/util/Pools$SynchronizedPool;Landroid/util/Pools$SynchronizedPool;
-HSPLandroid/graphics/RecordingCanvas;->throwIfCannotDraw(Landroid/graphics/Bitmap;)V
+HSPLandroid/graphics/RecordingCanvas;->throwIfCannotDraw(Landroid/graphics/Bitmap;)V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;
 HSPLandroid/graphics/Rect$1;->createFromParcel(Landroid/os/Parcel;)Landroid/graphics/Rect;
 HSPLandroid/graphics/Rect$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/graphics/Rect$1;->newArray(I)[Landroid/graphics/Rect;
@@ -6527,7 +6536,7 @@
 HSPLandroid/graphics/Rect;->toShortString(Ljava/lang/StringBuilder;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/graphics/Rect;->toString()Ljava/lang/String;
 HSPLandroid/graphics/Rect;->union(IIII)V
-HSPLandroid/graphics/Rect;->union(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/Rect;->union(Landroid/graphics/Rect;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/graphics/Rect;->width()I
 HSPLandroid/graphics/Rect;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/graphics/RectF;-><init>()V
@@ -6537,11 +6546,11 @@
 HSPLandroid/graphics/RectF;->centerX()F
 HSPLandroid/graphics/RectF;->centerY()F
 HSPLandroid/graphics/RectF;->contains(FF)Z
-HSPLandroid/graphics/RectF;->equals(Ljava/lang/Object;)Z
+HSPLandroid/graphics/RectF;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Landroid/graphics/RectF;
 HSPLandroid/graphics/RectF;->height()F
 HSPLandroid/graphics/RectF;->inset(FF)V
 HSPLandroid/graphics/RectF;->intersect(FFFF)Z
-HSPLandroid/graphics/RectF;->intersect(Landroid/graphics/RectF;)Z
+HSPLandroid/graphics/RectF;->intersect(Landroid/graphics/RectF;)Z+]Landroid/graphics/RectF;Landroid/graphics/RectF;
 HSPLandroid/graphics/RectF;->isEmpty()Z
 HSPLandroid/graphics/RectF;->offset(FF)V
 HSPLandroid/graphics/RectF;->offsetTo(FF)V
@@ -6552,7 +6561,7 @@
 HSPLandroid/graphics/RectF;->set(Landroid/graphics/RectF;)V
 HSPLandroid/graphics/RectF;->setEmpty()V
 HSPLandroid/graphics/RectF;->union(FFFF)V
-HSPLandroid/graphics/RectF;->union(Landroid/graphics/RectF;)V
+HSPLandroid/graphics/RectF;->union(Landroid/graphics/RectF;)V+]Landroid/graphics/RectF;Landroid/graphics/RectF;
 HSPLandroid/graphics/RectF;->width()F
 HSPLandroid/graphics/Region$1;->createFromParcel(Landroid/os/Parcel;)Landroid/graphics/Region;
 HSPLandroid/graphics/Region$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -6581,7 +6590,7 @@
 HSPLandroid/graphics/RenderNode$PositionUpdateListener;->callPositionChanged(Ljava/lang/ref/WeakReference;JIIII)Z+]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Landroid/graphics/RenderNode$PositionUpdateListener;Landroid/graphics/RenderNode$CompositePositionUpdateListener;
 HSPLandroid/graphics/RenderNode$PositionUpdateListener;->callPositionLost(Ljava/lang/ref/WeakReference;J)Z
 HSPLandroid/graphics/RenderNode;-><init>(J)V
-HSPLandroid/graphics/RenderNode;-><init>(Ljava/lang/String;Landroid/graphics/RenderNode$AnimationHost;)V
+HSPLandroid/graphics/RenderNode;-><init>(Ljava/lang/String;Landroid/graphics/RenderNode$AnimationHost;)V+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
 HSPLandroid/graphics/RenderNode;->addPositionUpdateListener(Landroid/graphics/RenderNode$PositionUpdateListener;)V
 HSPLandroid/graphics/RenderNode;->adopt(J)Landroid/graphics/RenderNode;
 HSPLandroid/graphics/RenderNode;->beginRecording(II)Landroid/graphics/RecordingCanvas;
@@ -6636,6 +6645,7 @@
 HSPLandroid/graphics/RuntimeShader;->setFloatUniform(Ljava/lang/String;FF)V
 HSPLandroid/graphics/RuntimeShader;->setFloatUniform(Ljava/lang/String;FFFFI)V+]Landroid/graphics/RuntimeShader;missing_types
 HSPLandroid/graphics/RuntimeShader;->setInputShader(Ljava/lang/String;Landroid/graphics/Shader;)V
+HSPLandroid/graphics/RuntimeShader;->setUniform(Ljava/lang/String;[FZ)V
 HSPLandroid/graphics/Shader;-><init>()V
 HSPLandroid/graphics/Shader;-><init>(Landroid/graphics/ColorSpace;)V
 HSPLandroid/graphics/Shader;->colorSpace()Landroid/graphics/ColorSpace;
@@ -6644,14 +6654,14 @@
 HSPLandroid/graphics/Shader;->discardNativeInstance()V
 HSPLandroid/graphics/Shader;->discardNativeInstanceLocked()V
 HSPLandroid/graphics/Shader;->getNativeInstance()J
-HSPLandroid/graphics/Shader;->getNativeInstance(Z)J
-HSPLandroid/graphics/Shader;->setLocalMatrix(Landroid/graphics/Matrix;)V
+HSPLandroid/graphics/Shader;->getNativeInstance(Z)J+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/graphics/Shader;Landroid/graphics/drawable/RippleShader;,Landroid/graphics/LinearGradient;,Landroid/graphics/BitmapShader;,Landroid/graphics/RadialGradient;]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
+HSPLandroid/graphics/Shader;->setLocalMatrix(Landroid/graphics/Matrix;)V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/graphics/Shader;Landroid/graphics/BitmapShader;,Landroid/graphics/RadialGradient;
 HSPLandroid/graphics/Shader;->shouldDiscardNativeInstance(Z)Z
-HSPLandroid/graphics/SurfaceTexture$1;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/graphics/SurfaceTexture$1;->handleMessage(Landroid/os/Message;)V+]Landroid/graphics/SurfaceTexture$OnFrameAvailableListener;Landroid/view/TextureView$$ExternalSyntheticLambda0;
 HSPLandroid/graphics/SurfaceTexture;-><init>(I)V
 HSPLandroid/graphics/SurfaceTexture;->finalize()V
 HSPLandroid/graphics/SurfaceTexture;->isSingleBuffered()Z
-HSPLandroid/graphics/SurfaceTexture;->postEventFromNative(Ljava/lang/ref/WeakReference;)V
+HSPLandroid/graphics/SurfaceTexture;->postEventFromNative(Ljava/lang/ref/WeakReference;)V+]Landroid/os/Handler;Landroid/graphics/SurfaceTexture$1;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
 HSPLandroid/graphics/SurfaceTexture;->release()V
 HSPLandroid/graphics/SurfaceTexture;->setDefaultBufferSize(II)V
 HSPLandroid/graphics/SurfaceTexture;->setOnFrameAvailableListener(Landroid/graphics/SurfaceTexture$OnFrameAvailableListener;)V
@@ -6662,7 +6672,7 @@
 HSPLandroid/graphics/TextureLayer;->close()V
 HSPLandroid/graphics/TextureLayer;->detachSurfaceTexture()V
 HSPLandroid/graphics/Typeface$Builder;->build()Landroid/graphics/Typeface;
-HSPLandroid/graphics/Typeface$Builder;->createAssetUid(Landroid/content/res/AssetManager;Ljava/lang/String;I[Landroid/graphics/fonts/FontVariationAxis;IILjava/lang/String;)Ljava/lang/String;
+HSPLandroid/graphics/Typeface$Builder;->createAssetUid(Landroid/content/res/AssetManager;Ljava/lang/String;I[Landroid/graphics/fonts/FontVariationAxis;IILjava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/res/AssetManager;Landroid/content/res/AssetManager;
 HSPLandroid/graphics/Typeface$CustomFallbackBuilder;-><init>(Landroid/graphics/fonts/FontFamily;)V
 HSPLandroid/graphics/Typeface$CustomFallbackBuilder;->build()Landroid/graphics/Typeface;
 HSPLandroid/graphics/Typeface$CustomFallbackBuilder;->setStyle(Landroid/graphics/fonts/FontStyle;)Landroid/graphics/Typeface$CustomFallbackBuilder;
@@ -6672,13 +6682,13 @@
 HSPLandroid/graphics/Typeface;->createFromAsset(Landroid/content/res/AssetManager;Ljava/lang/String;)Landroid/graphics/Typeface;
 HSPLandroid/graphics/Typeface;->createFromFamilies([Landroid/graphics/fonts/FontFamily;)Landroid/graphics/Typeface;
 HSPLandroid/graphics/Typeface;->createFromResources(Landroid/content/res/FontResourcesParser$FamilyResourceEntry;Landroid/content/res/AssetManager;Ljava/lang/String;)Landroid/graphics/Typeface;
-HSPLandroid/graphics/Typeface;->createWeightStyle(Landroid/graphics/Typeface;IZ)Landroid/graphics/Typeface;
+HSPLandroid/graphics/Typeface;->createWeightStyle(Landroid/graphics/Typeface;IZ)Landroid/graphics/Typeface;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
 HSPLandroid/graphics/Typeface;->defaultFromStyle(I)Landroid/graphics/Typeface;
 HSPLandroid/graphics/Typeface;->deserializeFontMap(Ljava/nio/ByteBuffer;Ljava/util/Map;)[J
-HSPLandroid/graphics/Typeface;->equals(Ljava/lang/Object;)Z
-HSPLandroid/graphics/Typeface;->findFromCache(Landroid/content/res/AssetManager;Ljava/lang/String;)Landroid/graphics/Typeface;
+HSPLandroid/graphics/Typeface;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Landroid/graphics/Typeface;
+HSPLandroid/graphics/Typeface;->findFromCache(Landroid/content/res/AssetManager;Ljava/lang/String;)Landroid/graphics/Typeface;+]Landroid/util/LruCache;Landroid/util/LruCache;
 HSPLandroid/graphics/Typeface;->getStyle()I
-HSPLandroid/graphics/Typeface;->getSystemDefaultTypeface(Ljava/lang/String;)Landroid/graphics/Typeface;
+HSPLandroid/graphics/Typeface;->getSystemDefaultTypeface(Ljava/lang/String;)Landroid/graphics/Typeface;+]Ljava/util/Map;Landroid/util/ArrayMap;
 HSPLandroid/graphics/Typeface;->hasFontFamily(Ljava/lang/String;)Z
 HSPLandroid/graphics/Typeface;->readString(Ljava/nio/ByteBuffer;)Ljava/lang/String;
 HSPLandroid/graphics/Typeface;->registerGenericFamilyNative(Ljava/lang/String;Landroid/graphics/Typeface;)V
@@ -6721,7 +6731,7 @@
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable$LayerState;->isStateful()Z
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable$LayerState;->newDrawable()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable$LayerState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
-HSPLandroid/graphics/drawable/AdaptiveIconDrawable;-><init>(Landroid/graphics/drawable/AdaptiveIconDrawable$LayerState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable;-><init>(Landroid/graphics/drawable/AdaptiveIconDrawable$LayerState;Landroid/content/res/Resources;)V+]Landroid/graphics/drawable/AdaptiveIconDrawable;Landroid/graphics/drawable/AdaptiveIconDrawable;]Landroid/app/ActivityThread;Landroid/app/ActivityThread;]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->addLayer(ILandroid/graphics/drawable/AdaptiveIconDrawable$ChildDrawable;)V
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->createConstantState(Landroid/graphics/drawable/AdaptiveIconDrawable$LayerState;Landroid/content/res/Resources;)Landroid/graphics/drawable/AdaptiveIconDrawable$LayerState;
@@ -6733,7 +6743,7 @@
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->getIntrinsicWidth()I
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->getOpacity()I
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
-HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->inflateLayers(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->inflateLayers(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V+]Ljava/lang/String;Ljava/lang/String;]Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/XmlBlock$Parser;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/LayerDrawable;,Landroid/graphics/drawable/BitmapDrawable;
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->invalidateSelf()V
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->isStateful()Z
@@ -6743,7 +6753,7 @@
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->setVisible(ZZ)Z
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->updateLayerBounds(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->updateLayerBoundsInternal(Landroid/graphics/Rect;)V
-HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->updateLayerFromTypedArray(Landroid/graphics/drawable/AdaptiveIconDrawable$ChildDrawable;Landroid/content/res/TypedArray;)V
+HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->updateLayerFromTypedArray(Landroid/graphics/drawable/AdaptiveIconDrawable$ChildDrawable;Landroid/content/res/TypedArray;)V+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;,Landroid/graphics/drawable/BitmapDrawable;,Landroid/graphics/drawable/ColorDrawable;
 HSPLandroid/graphics/drawable/AdaptiveIconDrawable;->updateMaskBoundsInternal(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/drawable/Animatable2$AnimationCallback;-><init>()V
 HSPLandroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;-><init>(Landroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;Landroid/graphics/drawable/AnimatedStateListDrawable;Landroid/content/res/Resources;)V
@@ -6786,7 +6796,7 @@
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$2;->onAnimationStart(Landroid/animation/Animator;)V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState$PendingAnimator;-><init>(IFLjava/lang/String;)V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState$PendingAnimator;->newInstance(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Landroid/animation/Animator;
-HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;-><init>(Landroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;Landroid/graphics/drawable/Drawable$Callback;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;-><init>(Landroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;Landroid/graphics/drawable/Drawable$Callback;Landroid/content/res/Resources;)V+]Landroid/graphics/drawable/Drawable$ConstantState;Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;]Landroid/graphics/drawable/VectorDrawable;Landroid/graphics/drawable/VectorDrawable;
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;->addPendingAnimator(IFLjava/lang/String;)V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;->addTargetAnimator(Ljava/lang/String;Landroid/animation/Animator;)V
 HSPLandroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;->canApplyTheme()Z
@@ -6886,26 +6896,26 @@
 HSPLandroid/graphics/drawable/BitmapDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/BitmapDrawable;->clearMutated()V
-HSPLandroid/graphics/drawable/BitmapDrawable;->computeBitmapSize()V
-HSPLandroid/graphics/drawable/BitmapDrawable;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/BitmapDrawable;->computeBitmapSize()V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;
+HSPLandroid/graphics/drawable/BitmapDrawable;->draw(Landroid/graphics/Canvas;)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;,Landroid/graphics/Picture$PictureCanvas;,Landroid/graphics/Canvas;
 HSPLandroid/graphics/drawable/BitmapDrawable;->getBitmap()Landroid/graphics/Bitmap;
 HSPLandroid/graphics/drawable/BitmapDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/BitmapDrawable;->getColorFilter()Landroid/graphics/ColorFilter;
 HSPLandroid/graphics/drawable/BitmapDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
 HSPLandroid/graphics/drawable/BitmapDrawable;->getIntrinsicHeight()I
 HSPLandroid/graphics/drawable/BitmapDrawable;->getIntrinsicWidth()I
-HSPLandroid/graphics/drawable/BitmapDrawable;->getOpacity()I
+HSPLandroid/graphics/drawable/BitmapDrawable;->getOpacity()I+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;]Landroid/graphics/Paint;Landroid/graphics/Paint;
 HSPLandroid/graphics/drawable/BitmapDrawable;->getOutline(Landroid/graphics/Outline;)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->init(Landroid/graphics/drawable/BitmapDrawable$BitmapState;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->isAutoMirrored()Z
-HSPLandroid/graphics/drawable/BitmapDrawable;->isStateful()Z
+HSPLandroid/graphics/drawable/BitmapDrawable;->isStateful()Z+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;
 HSPLandroid/graphics/drawable/BitmapDrawable;->lambda$updateStateFromTypedArray$2(Landroid/graphics/ImageDecoder;Landroid/graphics/ImageDecoder$ImageInfo;Landroid/graphics/ImageDecoder$Source;)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->mutate()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/BitmapDrawable;->needMirroring()Z
-HSPLandroid/graphics/drawable/BitmapDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/drawable/BitmapDrawable;->onBoundsChange(Landroid/graphics/Rect;)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;
 HSPLandroid/graphics/drawable/BitmapDrawable;->onStateChange([I)Z
-HSPLandroid/graphics/drawable/BitmapDrawable;->setAlpha(I)V
+HSPLandroid/graphics/drawable/BitmapDrawable;->setAlpha(I)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/graphics/drawable/BitmapDrawable;Landroid/graphics/drawable/BitmapDrawable;
 HSPLandroid/graphics/drawable/BitmapDrawable;->setAutoMirrored(Z)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->setBitmap(Landroid/graphics/Bitmap;)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->setColorFilter(Landroid/graphics/ColorFilter;)V
@@ -6915,17 +6925,17 @@
 HSPLandroid/graphics/drawable/BitmapDrawable;->setTileModeXY(Landroid/graphics/Shader$TileMode;Landroid/graphics/Shader$TileMode;)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->setTintBlendMode(Landroid/graphics/BlendMode;)V
 HSPLandroid/graphics/drawable/BitmapDrawable;->setTintList(Landroid/content/res/ColorStateList;)V
-HSPLandroid/graphics/drawable/BitmapDrawable;->updateDstRectAndInsetsIfDirty()V
-HSPLandroid/graphics/drawable/BitmapDrawable;->updateLocalState(Landroid/content/res/Resources;)V
-HSPLandroid/graphics/drawable/BitmapDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;I)V
+HSPLandroid/graphics/drawable/BitmapDrawable;->updateDstRectAndInsetsIfDirty()V+]Landroid/graphics/drawable/BitmapDrawable;Landroid/graphics/drawable/BitmapDrawable;
+HSPLandroid/graphics/drawable/BitmapDrawable;->updateLocalState(Landroid/content/res/Resources;)V+]Landroid/graphics/drawable/BitmapDrawable;Landroid/graphics/drawable/BitmapDrawable;
+HSPLandroid/graphics/drawable/BitmapDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;I)V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;]Landroid/graphics/Paint;Landroid/graphics/Paint;]Ljava/io/InputStream;Landroid/content/res/AssetManager$AssetInputStream;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/graphics/drawable/BitmapDrawable;Landroid/graphics/drawable/BitmapDrawable;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/graphics/drawable/BitmapDrawable;->verifyRequiredAttributes(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/ClipDrawable$ClipState;-><init>(Landroid/graphics/drawable/ClipDrawable$ClipState;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/ClipDrawable$ClipState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/ClipDrawable;-><init>(Landroid/graphics/drawable/ClipDrawable$ClipState;Landroid/content/res/Resources;)V
-HSPLandroid/graphics/drawable/ClipDrawable;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/ClipDrawable;->draw(Landroid/graphics/Canvas;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/ClipDrawable;Landroid/graphics/drawable/ClipDrawable;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/PaintDrawable;
 HSPLandroid/graphics/drawable/ClipDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/ClipDrawable;->mutateConstantState()Landroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;
-HSPLandroid/graphics/drawable/ClipDrawable;->onLevelChange(I)Z
+HSPLandroid/graphics/drawable/ClipDrawable;->onLevelChange(I)Z+]Landroid/graphics/drawable/ClipDrawable;Landroid/graphics/drawable/ClipDrawable;
 HSPLandroid/graphics/drawable/ClipDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/ClipDrawable;->verifyRequiredAttributes(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/ColorDrawable$ColorState;-><init>()V
@@ -6945,7 +6955,7 @@
 HSPLandroid/graphics/drawable/ColorDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/ColorDrawable;->getColor()I
 HSPLandroid/graphics/drawable/ColorDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
-HSPLandroid/graphics/drawable/ColorDrawable;->getOpacity()I
+HSPLandroid/graphics/drawable/ColorDrawable;->getOpacity()I+]Landroid/graphics/Paint;Landroid/graphics/Paint;
 HSPLandroid/graphics/drawable/ColorDrawable;->getOutline(Landroid/graphics/Outline;)V
 HSPLandroid/graphics/drawable/ColorDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/ColorDrawable;->isStateful()Z
@@ -6955,7 +6965,7 @@
 HSPLandroid/graphics/drawable/ColorDrawable;->setColor(I)V
 HSPLandroid/graphics/drawable/ColorDrawable;->setColorFilter(Landroid/graphics/ColorFilter;)V
 HSPLandroid/graphics/drawable/ColorDrawable;->setTintList(Landroid/content/res/ColorStateList;)V
-HSPLandroid/graphics/drawable/ColorDrawable;->updateLocalState(Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/ColorDrawable;->updateLocalState(Landroid/content/res/Resources;)V+]Landroid/graphics/drawable/ColorDrawable;Landroid/graphics/drawable/ColorDrawable;
 HSPLandroid/graphics/drawable/ColorDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/Drawable$ConstantState;-><init>()V
 HSPLandroid/graphics/drawable/Drawable$ConstantState;->canApplyTheme()Z
@@ -6975,19 +6985,19 @@
 HSPLandroid/graphics/drawable/Drawable;->getColorFilter()Landroid/graphics/ColorFilter;
 HSPLandroid/graphics/drawable/Drawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
 HSPLandroid/graphics/drawable/Drawable;->getCurrent()Landroid/graphics/drawable/Drawable;
-HSPLandroid/graphics/drawable/Drawable;->getDirtyBounds()Landroid/graphics/Rect;
+HSPLandroid/graphics/drawable/Drawable;->getDirtyBounds()Landroid/graphics/Rect;+]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/Drawable;->getIntrinsicHeight()I
 HSPLandroid/graphics/drawable/Drawable;->getIntrinsicWidth()I
 HSPLandroid/graphics/drawable/Drawable;->getLayoutDirection()I
 HSPLandroid/graphics/drawable/Drawable;->getLevel()I
-HSPLandroid/graphics/drawable/Drawable;->getMinimumHeight()I
-HSPLandroid/graphics/drawable/Drawable;->getMinimumWidth()I
+HSPLandroid/graphics/drawable/Drawable;->getMinimumHeight()I+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;,Landroid/graphics/drawable/LayerDrawable;,Landroid/graphics/drawable/RippleDrawable;,Landroid/graphics/drawable/ColorDrawable;
+HSPLandroid/graphics/drawable/Drawable;->getMinimumWidth()I+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;,Landroid/graphics/drawable/LayerDrawable;,Landroid/graphics/drawable/RippleDrawable;,Landroid/graphics/drawable/ColorDrawable;
 HSPLandroid/graphics/drawable/Drawable;->getOutline(Landroid/graphics/Outline;)V
 HSPLandroid/graphics/drawable/Drawable;->getPadding(Landroid/graphics/Rect;)Z
 HSPLandroid/graphics/drawable/Drawable;->getState()[I
 HSPLandroid/graphics/drawable/Drawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/Drawable;->inflateWithAttributes(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/TypedArray;I)V
-HSPLandroid/graphics/drawable/Drawable;->invalidateSelf()V+]Landroid/graphics/drawable/Drawable$Callback;missing_types]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/graphics/drawable/Drawable;->invalidateSelf()V+]Landroid/graphics/drawable/Drawable$Callback;missing_types]Landroid/graphics/drawable/Drawable;megamorphic_types
 HSPLandroid/graphics/drawable/Drawable;->isProjected()Z
 HSPLandroid/graphics/drawable/Drawable;->isStateful()Z
 HSPLandroid/graphics/drawable/Drawable;->isVisible()Z
@@ -6998,14 +7008,14 @@
 HSPLandroid/graphics/drawable/Drawable;->onLevelChange(I)Z
 HSPLandroid/graphics/drawable/Drawable;->onStateChange([I)Z
 HSPLandroid/graphics/drawable/Drawable;->parseBlendMode(ILandroid/graphics/BlendMode;)Landroid/graphics/BlendMode;
-HSPLandroid/graphics/drawable/Drawable;->resolveDensity(Landroid/content/res/Resources;I)I
+HSPLandroid/graphics/drawable/Drawable;->resolveDensity(Landroid/content/res/Resources;I)I+]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLandroid/graphics/drawable/Drawable;->resolveOpacity(II)I
 HSPLandroid/graphics/drawable/Drawable;->scaleFromDensity(FII)F
 HSPLandroid/graphics/drawable/Drawable;->scaleFromDensity(IIIZ)I
 HSPLandroid/graphics/drawable/Drawable;->scheduleSelf(Ljava/lang/Runnable;J)V
 HSPLandroid/graphics/drawable/Drawable;->setAutoMirrored(Z)V
-HSPLandroid/graphics/drawable/Drawable;->setBounds(IIII)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/Drawable;Landroid/widget/ScrollBarDrawable;,Landroid/graphics/drawable/ColorDrawable;
-HSPLandroid/graphics/drawable/Drawable;->setBounds(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/drawable/Drawable;->setBounds(IIII)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/graphics/drawable/Drawable;->setBounds(Landroid/graphics/Rect;)V+]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/Drawable;->setCallback(Landroid/graphics/drawable/Drawable$Callback;)V
 HSPLandroid/graphics/drawable/Drawable;->setChangingConfigurations(I)V
 HSPLandroid/graphics/drawable/Drawable;->setColorFilter(ILandroid/graphics/PorterDuff$Mode;)V
@@ -7014,39 +7024,39 @@
 HSPLandroid/graphics/drawable/Drawable;->setLayoutDirection(I)Z
 HSPLandroid/graphics/drawable/Drawable;->setLevel(I)Z
 HSPLandroid/graphics/drawable/Drawable;->setSrcDensityOverride(I)V
-HSPLandroid/graphics/drawable/Drawable;->setState([I)Z
+HSPLandroid/graphics/drawable/Drawable;->setState([I)Z+]Landroid/graphics/drawable/Drawable;megamorphic_types
 HSPLandroid/graphics/drawable/Drawable;->setTint(I)V
 HSPLandroid/graphics/drawable/Drawable;->setTintList(Landroid/content/res/ColorStateList;)V
 HSPLandroid/graphics/drawable/Drawable;->setTintMode(Landroid/graphics/PorterDuff$Mode;)V
-HSPLandroid/graphics/drawable/Drawable;->setVisible(ZZ)Z
+HSPLandroid/graphics/drawable/Drawable;->setVisible(ZZ)Z+]Landroid/graphics/drawable/Drawable;megamorphic_types
 HSPLandroid/graphics/drawable/Drawable;->unscheduleSelf(Ljava/lang/Runnable;)V
-HSPLandroid/graphics/drawable/Drawable;->updateBlendModeFilter(Landroid/graphics/BlendModeColorFilter;Landroid/content/res/ColorStateList;Landroid/graphics/BlendMode;)Landroid/graphics/BlendModeColorFilter;
+HSPLandroid/graphics/drawable/Drawable;->updateBlendModeFilter(Landroid/graphics/BlendModeColorFilter;Landroid/content/res/ColorStateList;Landroid/graphics/BlendMode;)Landroid/graphics/BlendModeColorFilter;+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Landroid/graphics/BlendModeColorFilter;Landroid/graphics/BlendModeColorFilter;]Landroid/graphics/drawable/Drawable;megamorphic_types
 HSPLandroid/graphics/drawable/Drawable;->updateTintFilter(Landroid/graphics/PorterDuffColorFilter;Landroid/content/res/ColorStateList;Landroid/graphics/PorterDuff$Mode;)Landroid/graphics/PorterDuffColorFilter;
 HSPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;-><init>()V
 HSPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;-><init>(Landroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback-IA;)V
 HSPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;->unwrap()Landroid/graphics/drawable/Drawable$Callback;
 HSPLandroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;->wrap(Landroid/graphics/drawable/Drawable$Callback;)Landroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;
-HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;-><init>(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/DrawableContainer;Landroid/content/res/Resources;)V
-HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->addChild(Landroid/graphics/drawable/Drawable;)I
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;-><init>(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/DrawableContainer;Landroid/content/res/Resources;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->addChild(Landroid/graphics/drawable/Drawable;)I+]Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/StateListDrawable$StateListState;,Landroid/graphics/drawable/AnimationDrawable$AnimationState;,Landroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;]Landroid/graphics/drawable/Drawable;megamorphic_types
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->canConstantState()Z
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->clearMutated()V
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->computeConstantSize()V
-HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->createAllFutures()V
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->createAllFutures()V+]Landroid/graphics/drawable/Drawable$ConstantState;Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getCapacity()I
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getChangingConfigurations()I
-HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getChild(I)Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getChild(I)Landroid/graphics/drawable/Drawable;+]Landroid/graphics/drawable/Drawable$ConstantState;Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;,Landroid/graphics/drawable/AnimatedVectorDrawable$AnimatedVectorDrawableState;,Landroid/graphics/drawable/NinePatchDrawable$NinePatchState;,Landroid/graphics/drawable/AnimationDrawable$AnimationState;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getChildCount()I
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getChildren()[Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getConstantPadding()Landroid/graphics/Rect;
-HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getOpacity()I
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->getOpacity()I+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->invalidateCache()V
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->isConstantSize()Z
-HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->isStateful()Z
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->isStateful()Z+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->mutate()V
-HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->prepareDrawable(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->prepareDrawable(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->setConstantSize(Z)V
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->setEnterFadeDuration(I)V
 HSPLandroid/graphics/drawable/DrawableContainer$DrawableContainerState;->setExitFadeDuration(I)V
@@ -7059,35 +7069,35 @@
 HSPLandroid/graphics/drawable/DrawableContainer;->cloneConstantState()Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;
 HSPLandroid/graphics/drawable/DrawableContainer;->draw(Landroid/graphics/Canvas;)V
 HSPLandroid/graphics/drawable/DrawableContainer;->getChangingConfigurations()I
-HSPLandroid/graphics/drawable/DrawableContainer;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
+HSPLandroid/graphics/drawable/DrawableContainer;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;+]Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/LevelListDrawable$LevelListState;]Landroid/graphics/drawable/DrawableContainer;Landroid/graphics/drawable/LevelListDrawable;
 HSPLandroid/graphics/drawable/DrawableContainer;->getCurrent()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/DrawableContainer;->getCurrentIndex()I
-HSPLandroid/graphics/drawable/DrawableContainer;->getIntrinsicHeight()I
-HSPLandroid/graphics/drawable/DrawableContainer;->getIntrinsicWidth()I
+HSPLandroid/graphics/drawable/DrawableContainer;->getIntrinsicHeight()I+]Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/LevelListDrawable$LevelListState;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;
+HSPLandroid/graphics/drawable/DrawableContainer;->getIntrinsicWidth()I+]Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/LevelListDrawable$LevelListState;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;
 HSPLandroid/graphics/drawable/DrawableContainer;->getMinimumHeight()I
 HSPLandroid/graphics/drawable/DrawableContainer;->getMinimumWidth()I
 HSPLandroid/graphics/drawable/DrawableContainer;->getOpacity()I
 HSPLandroid/graphics/drawable/DrawableContainer;->getOpticalInsets()Landroid/graphics/Insets;
 HSPLandroid/graphics/drawable/DrawableContainer;->getOutline(Landroid/graphics/Outline;)V
-HSPLandroid/graphics/drawable/DrawableContainer;->getPadding(Landroid/graphics/Rect;)Z
-HSPLandroid/graphics/drawable/DrawableContainer;->initializeDrawableForDisplay(Landroid/graphics/drawable/Drawable;)V
-HSPLandroid/graphics/drawable/DrawableContainer;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/graphics/drawable/DrawableContainer;->getPadding(Landroid/graphics/Rect;)Z+]Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/LevelListDrawable$LevelListState;]Landroid/graphics/Rect;Landroid/graphics/Rect;
+HSPLandroid/graphics/drawable/DrawableContainer;->initializeDrawableForDisplay(Landroid/graphics/drawable/Drawable;)V+]Landroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;Landroid/graphics/drawable/DrawableContainer$BlockInvalidateCallback;]Landroid/graphics/drawable/DrawableContainer;Landroid/graphics/drawable/LevelListDrawable;,Landroid/graphics/drawable/AnimatedStateListDrawable;,Landroid/graphics/drawable/AnimationDrawable;,Lcom/android/internal/graphics/drawable/AnimationScaleListDrawable;,Landroid/graphics/drawable/StateListDrawable;]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/graphics/drawable/DrawableContainer;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/LevelListDrawable$LevelListState;]Landroid/graphics/drawable/Drawable$Callback;Landroid/graphics/drawable/LayerDrawable;]Landroid/graphics/drawable/DrawableContainer;Landroid/graphics/drawable/LevelListDrawable;
 HSPLandroid/graphics/drawable/DrawableContainer;->isAutoMirrored()Z
 HSPLandroid/graphics/drawable/DrawableContainer;->isStateful()Z
-HSPLandroid/graphics/drawable/DrawableContainer;->jumpToCurrentState()V
+HSPLandroid/graphics/drawable/DrawableContainer;->jumpToCurrentState()V+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/LayerDrawable;,Landroid/graphics/drawable/InsetDrawable;,Landroid/graphics/drawable/VectorDrawable;,Landroid/graphics/drawable/ColorDrawable;,Landroid/graphics/drawable/GradientDrawable;,Landroid/graphics/drawable/AnimationDrawable;,Landroid/graphics/drawable/NinePatchDrawable;,Landroid/graphics/drawable/BitmapDrawable;
 HSPLandroid/graphics/drawable/DrawableContainer;->mutate()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/DrawableContainer;->needsMirroring()Z
 HSPLandroid/graphics/drawable/DrawableContainer;->onBoundsChange(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/drawable/DrawableContainer;->onStateChange([I)Z
-HSPLandroid/graphics/drawable/DrawableContainer;->selectDrawable(I)Z
+HSPLandroid/graphics/drawable/DrawableContainer;->selectDrawable(I)Z+]Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/LevelListDrawable$LevelListState;,Landroid/graphics/drawable/StateListDrawable$StateListState;,Landroid/graphics/drawable/AnimationDrawable$AnimationState;,Landroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;,Lcom/android/internal/graphics/drawable/AnimationScaleListDrawable$AnimationScaleListState;]Landroid/graphics/drawable/DrawableContainer;Landroid/graphics/drawable/LevelListDrawable;,Landroid/graphics/drawable/AnimationDrawable;,Landroid/graphics/drawable/StateListDrawable;,Landroid/graphics/drawable/AnimatedStateListDrawable;,Lcom/android/internal/graphics/drawable/AnimationScaleListDrawable;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;,Landroid/graphics/drawable/LayerDrawable;,Landroid/graphics/drawable/NinePatchDrawable;,Landroid/graphics/drawable/AnimationDrawable;,Landroid/graphics/drawable/AnimatedVectorDrawable;
 HSPLandroid/graphics/drawable/DrawableContainer;->setAlpha(I)V
 HSPLandroid/graphics/drawable/DrawableContainer;->setAutoMirrored(Z)V
 HSPLandroid/graphics/drawable/DrawableContainer;->setColorFilter(Landroid/graphics/ColorFilter;)V
-HSPLandroid/graphics/drawable/DrawableContainer;->setConstantState(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;)V
+HSPLandroid/graphics/drawable/DrawableContainer;->setConstantState(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;)V+]Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/LevelListDrawable$LevelListState;
 HSPLandroid/graphics/drawable/DrawableContainer;->setDither(Z)V
 HSPLandroid/graphics/drawable/DrawableContainer;->setHotspot(FF)V
-HSPLandroid/graphics/drawable/DrawableContainer;->setTintBlendMode(Landroid/graphics/BlendMode;)V
-HSPLandroid/graphics/drawable/DrawableContainer;->setTintList(Landroid/content/res/ColorStateList;)V
+HSPLandroid/graphics/drawable/DrawableContainer;->setTintBlendMode(Landroid/graphics/BlendMode;)V+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;
+HSPLandroid/graphics/drawable/DrawableContainer;->setTintList(Landroid/content/res/ColorStateList;)V+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;
 HSPLandroid/graphics/drawable/DrawableContainer;->setVisible(ZZ)Z
 HSPLandroid/graphics/drawable/DrawableContainer;->updateDensity(Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/DrawableInflater;-><init>(Landroid/content/res/Resources;Ljava/lang/ClassLoader;)V
@@ -7107,7 +7117,7 @@
 HSPLandroid/graphics/drawable/DrawableWrapper;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/DrawableWrapper;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/DrawableWrapper;->clearMutated()V
-HSPLandroid/graphics/drawable/DrawableWrapper;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/DrawableWrapper;->draw(Landroid/graphics/Canvas;)V+]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/DrawableWrapper;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/DrawableWrapper;->getColorFilter()Landroid/graphics/ColorFilter;
 HSPLandroid/graphics/drawable/DrawableWrapper;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
@@ -7118,7 +7128,7 @@
 HSPLandroid/graphics/drawable/DrawableWrapper;->getPadding(Landroid/graphics/Rect;)Z
 HSPLandroid/graphics/drawable/DrawableWrapper;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/DrawableWrapper;->inflateChildDrawable(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
-HSPLandroid/graphics/drawable/DrawableWrapper;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/graphics/drawable/DrawableWrapper;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/graphics/drawable/Drawable$Callback;Landroid/graphics/drawable/RippleDrawable;]Landroid/graphics/drawable/DrawableWrapper;Landroid/graphics/drawable/InsetDrawable;
 HSPLandroid/graphics/drawable/DrawableWrapper;->isStateful()Z
 HSPLandroid/graphics/drawable/DrawableWrapper;->jumpToCurrentState()V
 HSPLandroid/graphics/drawable/DrawableWrapper;->mutate()Landroid/graphics/drawable/Drawable;
@@ -7128,7 +7138,7 @@
 HSPLandroid/graphics/drawable/DrawableWrapper;->onStateChange([I)Z
 HSPLandroid/graphics/drawable/DrawableWrapper;->setAlpha(I)V
 HSPLandroid/graphics/drawable/DrawableWrapper;->setColorFilter(Landroid/graphics/ColorFilter;)V
-HSPLandroid/graphics/drawable/DrawableWrapper;->setDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/graphics/drawable/DrawableWrapper;->setDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/graphics/drawable/DrawableWrapper;missing_types]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/DrawableWrapper;->setHotspot(FF)V
 HSPLandroid/graphics/drawable/DrawableWrapper;->setTintBlendMode(Landroid/graphics/BlendMode;)V
 HSPLandroid/graphics/drawable/DrawableWrapper;->setTintList(Landroid/content/res/ColorStateList;)V
@@ -7136,12 +7146,12 @@
 HSPLandroid/graphics/drawable/DrawableWrapper;->updateLocalState(Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/DrawableWrapper;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->-$$Nest$mcomputeOpacity(Landroid/graphics/drawable/GradientDrawable$GradientState;)V
-HSPLandroid/graphics/drawable/GradientDrawable$GradientState;-><init>(Landroid/graphics/drawable/GradientDrawable$GradientState;Landroid/content/res/Resources;)V+][F[F
-HSPLandroid/graphics/drawable/GradientDrawable$GradientState;-><init>(Landroid/graphics/drawable/GradientDrawable$Orientation;[I)V
+HSPLandroid/graphics/drawable/GradientDrawable$GradientState;-><init>(Landroid/graphics/drawable/GradientDrawable$GradientState;Landroid/content/res/Resources;)V+][F[F][Landroid/content/res/ColorStateList;[Landroid/content/res/ColorStateList;
+HSPLandroid/graphics/drawable/GradientDrawable$GradientState;-><init>(Landroid/graphics/drawable/GradientDrawable$Orientation;[I)V+]Landroid/graphics/drawable/GradientDrawable$GradientState;Landroid/graphics/drawable/GradientDrawable$GradientState;
 HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->applyDensityScaling(II)V
 HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->canApplyTheme()Z
-HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->computeOpacity()V
-HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->getChangingConfigurations()I
+HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->computeOpacity()V+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;
+HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->getChangingConfigurations()I+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;
 HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->hasCenterColor()Z
 HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->newDrawable()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/GradientDrawable$GradientState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
@@ -7158,8 +7168,8 @@
 HSPLandroid/graphics/drawable/GradientDrawable;->applyThemeChildElements(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/GradientDrawable;->clearMutated()V
-HSPLandroid/graphics/drawable/GradientDrawable;->draw(Landroid/graphics/Canvas;)V+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;,Landroid/graphics/Canvas;
-HSPLandroid/graphics/drawable/GradientDrawable;->ensureValidRect()Z+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/graphics/drawable/GradientDrawable;Landroid/graphics/drawable/GradientDrawable;
+HSPLandroid/graphics/drawable/GradientDrawable;->draw(Landroid/graphics/Canvas;)V+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/graphics/Canvas;Landroid/graphics/Picture$PictureCanvas;,Landroid/graphics/RecordingCanvas;,Landroid/graphics/Canvas;
+HSPLandroid/graphics/drawable/GradientDrawable;->ensureValidRect()Z+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/graphics/drawable/GradientDrawable;Landroid/graphics/drawable/GradientDrawable;]Landroid/graphics/drawable/GradientDrawable$Orientation;Landroid/graphics/drawable/GradientDrawable$Orientation;]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Landroid/graphics/Paint;Landroid/graphics/Paint;
 HSPLandroid/graphics/drawable/GradientDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/GradientDrawable;->getColorFilter()Landroid/graphics/ColorFilter;
 HSPLandroid/graphics/drawable/GradientDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
@@ -7170,17 +7180,17 @@
 HSPLandroid/graphics/drawable/GradientDrawable;->getOutline(Landroid/graphics/Outline;)V+]Landroid/graphics/drawable/GradientDrawable;Landroid/graphics/drawable/GradientDrawable;]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/Outline;Landroid/graphics/Outline;
 HSPLandroid/graphics/drawable/GradientDrawable;->getPadding(Landroid/graphics/Rect;)Z
 HSPLandroid/graphics/drawable/GradientDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
-HSPLandroid/graphics/drawable/GradientDrawable;->inflateChildElements(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/GradientDrawable;->inflateChildElements(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V+]Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/XmlBlock$Parser;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/graphics/drawable/GradientDrawable;->isOpaque(I)Z
 HSPLandroid/graphics/drawable/GradientDrawable;->isOpaqueForState()Z
-HSPLandroid/graphics/drawable/GradientDrawable;->isStateful()Z
+HSPLandroid/graphics/drawable/GradientDrawable;->isStateful()Z+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;
 HSPLandroid/graphics/drawable/GradientDrawable;->modulateAlpha(I)I
 HSPLandroid/graphics/drawable/GradientDrawable;->mutate()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/GradientDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->onLevelChange(I)Z
-HSPLandroid/graphics/drawable/GradientDrawable;->onStateChange([I)Z
-HSPLandroid/graphics/drawable/GradientDrawable;->setAlpha(I)V
-HSPLandroid/graphics/drawable/GradientDrawable;->setColor(I)V
+HSPLandroid/graphics/drawable/GradientDrawable;->onStateChange([I)Z+]Landroid/graphics/drawable/GradientDrawable;Landroid/graphics/drawable/GradientDrawable;]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Landroid/graphics/Paint;Landroid/graphics/Paint;
+HSPLandroid/graphics/drawable/GradientDrawable;->setAlpha(I)V+]Landroid/graphics/drawable/GradientDrawable;Landroid/graphics/drawable/GradientDrawable;
+HSPLandroid/graphics/drawable/GradientDrawable;->setColor(I)V+]Landroid/graphics/drawable/GradientDrawable$GradientState;Landroid/graphics/drawable/GradientDrawable$GradientState;]Landroid/graphics/drawable/GradientDrawable;Landroid/graphics/drawable/GradientDrawable;]Landroid/graphics/Paint;Landroid/graphics/Paint;
 HSPLandroid/graphics/drawable/GradientDrawable;->setColor(Landroid/content/res/ColorStateList;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->setColorFilter(Landroid/graphics/ColorFilter;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->setCornerRadii([F)V
@@ -7191,7 +7201,7 @@
 HSPLandroid/graphics/drawable/GradientDrawable;->setStroke(IIFF)V
 HSPLandroid/graphics/drawable/GradientDrawable;->setStroke(ILandroid/content/res/ColorStateList;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->setStroke(ILandroid/content/res/ColorStateList;FF)V
-HSPLandroid/graphics/drawable/GradientDrawable;->setStrokeInternal(IIFF)V
+HSPLandroid/graphics/drawable/GradientDrawable;->setStrokeInternal(IIFF)V+]Landroid/graphics/drawable/GradientDrawable;Landroid/graphics/drawable/GradientDrawable;]Landroid/graphics/Paint;Landroid/graphics/Paint;
 HSPLandroid/graphics/drawable/GradientDrawable;->setTintBlendMode(Landroid/graphics/BlendMode;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->setTintList(Landroid/content/res/ColorStateList;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->updateDrawableCorners(Landroid/content/res/TypedArray;)V
@@ -7200,10 +7210,10 @@
 HSPLandroid/graphics/drawable/GradientDrawable;->updateGradientDrawableSize(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->updateGradientDrawableSolid(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/GradientDrawable;->updateGradientDrawableStroke(Landroid/content/res/TypedArray;)V
-HSPLandroid/graphics/drawable/GradientDrawable;->updateLocalState(Landroid/content/res/Resources;)V
-HSPLandroid/graphics/drawable/GradientDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
+HSPLandroid/graphics/drawable/GradientDrawable;->updateLocalState(Landroid/content/res/Resources;)V+]Landroid/graphics/drawable/GradientDrawable;Landroid/graphics/drawable/GradientDrawable;]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Landroid/graphics/Paint;Landroid/graphics/Paint;
+HSPLandroid/graphics/drawable/GradientDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/graphics/drawable/Icon$1;->createFromParcel(Landroid/os/Parcel;)Landroid/graphics/drawable/Icon;
-HSPLandroid/graphics/drawable/Icon$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/graphics/drawable/Icon$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/graphics/drawable/Icon$1;Landroid/graphics/drawable/Icon$1;
 HSPLandroid/graphics/drawable/Icon;-><init>(I)V
 HSPLandroid/graphics/drawable/Icon;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/graphics/Bitmap$1;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/graphics/drawable/Icon;->createWithAdaptiveBitmap(Landroid/graphics/Bitmap;)Landroid/graphics/drawable/Icon;
@@ -7223,9 +7233,9 @@
 HSPLandroid/graphics/drawable/Icon;->scaleDownIfNecessary(Landroid/graphics/Bitmap;II)Landroid/graphics/Bitmap;
 HSPLandroid/graphics/drawable/Icon;->setBitmap(Landroid/graphics/Bitmap;)V
 HSPLandroid/graphics/drawable/Icon;->setTint(I)Landroid/graphics/drawable/Icon;
-HSPLandroid/graphics/drawable/Icon;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/graphics/drawable/Icon;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/graphics/drawable/Icon;Landroid/graphics/drawable/Icon;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/graphics/drawable/InsetDrawable$InsetState;->-$$Nest$fputmThemeAttrs(Landroid/graphics/drawable/InsetDrawable$InsetState;[I)V
-HSPLandroid/graphics/drawable/InsetDrawable$InsetState;-><init>(Landroid/graphics/drawable/InsetDrawable$InsetState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/InsetDrawable$InsetState;-><init>(Landroid/graphics/drawable/InsetDrawable$InsetState;Landroid/content/res/Resources;)V+]Landroid/graphics/drawable/InsetDrawable$InsetValue;Landroid/graphics/drawable/InsetDrawable$InsetValue;
 HSPLandroid/graphics/drawable/InsetDrawable$InsetState;->applyDensityScaling(II)V
 HSPLandroid/graphics/drawable/InsetDrawable$InsetState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/InsetDrawable$InsetState;->onDensityChanged(II)V
@@ -7241,19 +7251,19 @@
 HSPLandroid/graphics/drawable/InsetDrawable;-><init>(Landroid/graphics/drawable/InsetDrawable$InsetState;Landroid/content/res/Resources;Landroid/graphics/drawable/InsetDrawable-IA;)V
 HSPLandroid/graphics/drawable/InsetDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/InsetDrawable;->getInset(Landroid/content/res/TypedArray;ILandroid/graphics/drawable/InsetDrawable$InsetValue;)Landroid/graphics/drawable/InsetDrawable$InsetValue;
-HSPLandroid/graphics/drawable/InsetDrawable;->getInsets(Landroid/graphics/Rect;)V+]Landroid/graphics/drawable/InsetDrawable;Landroid/graphics/drawable/InsetDrawable;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/InsetDrawable$InsetValue;Landroid/graphics/drawable/InsetDrawable$InsetValue;
-HSPLandroid/graphics/drawable/InsetDrawable;->getIntrinsicHeight()I
-HSPLandroid/graphics/drawable/InsetDrawable;->getIntrinsicWidth()I
+HSPLandroid/graphics/drawable/InsetDrawable;->getInsets(Landroid/graphics/Rect;)V+]Landroid/graphics/drawable/InsetDrawable;missing_types]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/InsetDrawable$InsetValue;Landroid/graphics/drawable/InsetDrawable$InsetValue;
+HSPLandroid/graphics/drawable/InsetDrawable;->getIntrinsicHeight()I+]Landroid/graphics/drawable/InsetDrawable;missing_types]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/graphics/drawable/InsetDrawable;->getIntrinsicWidth()I+]Landroid/graphics/drawable/InsetDrawable;missing_types]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/InsetDrawable;->getOpacity()I
-HSPLandroid/graphics/drawable/InsetDrawable;->getOutline(Landroid/graphics/Outline;)V+]Landroid/graphics/drawable/InsetDrawable;Landroid/graphics/drawable/InsetDrawable;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;
+HSPLandroid/graphics/drawable/InsetDrawable;->getOutline(Landroid/graphics/Outline;)V+]Landroid/graphics/drawable/InsetDrawable;missing_types]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/InsetDrawable;->getPadding(Landroid/graphics/Rect;)Z
 HSPLandroid/graphics/drawable/InsetDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/InsetDrawable;->mutateConstantState()Landroid/graphics/drawable/DrawableWrapper$DrawableWrapperState;
-HSPLandroid/graphics/drawable/InsetDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/drawable/InsetDrawable;->onBoundsChange(Landroid/graphics/Rect;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/InsetDrawable$InsetValue;Landroid/graphics/drawable/InsetDrawable$InsetValue;
 HSPLandroid/graphics/drawable/InsetDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/InsetDrawable;->verifyRequiredAttributes(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/LayerDrawable$ChildDrawable;-><init>(I)V
-HSPLandroid/graphics/drawable/LayerDrawable$ChildDrawable;-><init>(Landroid/graphics/drawable/LayerDrawable$ChildDrawable;Landroid/graphics/drawable/LayerDrawable;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/LayerDrawable$ChildDrawable;-><init>(Landroid/graphics/drawable/LayerDrawable$ChildDrawable;Landroid/graphics/drawable/LayerDrawable;Landroid/content/res/Resources;)V+]Landroid/graphics/drawable/Drawable$ConstantState;megamorphic_types]Landroid/graphics/drawable/Drawable;megamorphic_types
 HSPLandroid/graphics/drawable/LayerDrawable$ChildDrawable;->applyDensityScaling(II)V
 HSPLandroid/graphics/drawable/LayerDrawable$ChildDrawable;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/LayerDrawable$ChildDrawable;->setDensity(I)V
@@ -7265,49 +7275,49 @@
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->canConstantState()Z
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->getChangingConfigurations()I
-HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->getOpacity()I
+HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->getOpacity()I+]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->invalidateCache()V
-HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->isStateful()Z
+HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->isStateful()Z+]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->newDrawable()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->onDensityChanged(II)V
 HSPLandroid/graphics/drawable/LayerDrawable$LayerState;->setDensity(I)V
 HSPLandroid/graphics/drawable/LayerDrawable;-><init>()V
-HSPLandroid/graphics/drawable/LayerDrawable;-><init>(Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/LayerDrawable;-><init>(Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/content/res/Resources;)V+]Landroid/graphics/drawable/LayerDrawable;missing_types
 HSPLandroid/graphics/drawable/LayerDrawable;-><init>([Landroid/graphics/drawable/Drawable;)V
-HSPLandroid/graphics/drawable/LayerDrawable;-><init>([Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/LayerDrawable$LayerState;)V
-HSPLandroid/graphics/drawable/LayerDrawable;->addLayer(Landroid/graphics/drawable/Drawable;[IIIIII)Landroid/graphics/drawable/LayerDrawable$ChildDrawable;
-HSPLandroid/graphics/drawable/LayerDrawable;->addLayer(Landroid/graphics/drawable/LayerDrawable$ChildDrawable;)I
+HSPLandroid/graphics/drawable/LayerDrawable;-><init>([Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/LayerDrawable$LayerState;)V+]Landroid/graphics/drawable/LayerDrawable;Landroid/graphics/drawable/TransitionDrawable;,Landroid/graphics/drawable/LayerDrawable;]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/graphics/drawable/LayerDrawable;->addLayer(Landroid/graphics/drawable/Drawable;[IIIIII)Landroid/graphics/drawable/LayerDrawable$ChildDrawable;+]Landroid/graphics/drawable/LayerDrawable;Landroid/graphics/drawable/RippleDrawable;]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/graphics/drawable/LayerDrawable;->addLayer(Landroid/graphics/drawable/LayerDrawable$ChildDrawable;)I+]Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/graphics/drawable/RippleDrawable$RippleState;
 HSPLandroid/graphics/drawable/LayerDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/LayerDrawable;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/LayerDrawable;->clearMutated()V
 HSPLandroid/graphics/drawable/LayerDrawable;->computeNestedPadding(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/drawable/LayerDrawable;->computeStackedPadding(Landroid/graphics/Rect;)V
 HSPLandroid/graphics/drawable/LayerDrawable;->createConstantState(Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/content/res/Resources;)Landroid/graphics/drawable/LayerDrawable$LayerState;
-HSPLandroid/graphics/drawable/LayerDrawable;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/LayerDrawable;->draw(Landroid/graphics/Canvas;)V+]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/LayerDrawable;->ensurePadding()V
 HSPLandroid/graphics/drawable/LayerDrawable;->findDrawableByLayerId(I)Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/LayerDrawable;->findIndexByLayerId(I)I
 HSPLandroid/graphics/drawable/LayerDrawable;->getChangingConfigurations()I
-HSPLandroid/graphics/drawable/LayerDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
+HSPLandroid/graphics/drawable/LayerDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;+]Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/graphics/drawable/LayerDrawable$LayerState;]Landroid/graphics/drawable/LayerDrawable;Landroid/graphics/drawable/LayerDrawable;
 HSPLandroid/graphics/drawable/LayerDrawable;->getDrawable(I)Landroid/graphics/drawable/Drawable;
-HSPLandroid/graphics/drawable/LayerDrawable;->getIntrinsicHeight()I
-HSPLandroid/graphics/drawable/LayerDrawable;->getIntrinsicWidth()I
+HSPLandroid/graphics/drawable/LayerDrawable;->getIntrinsicHeight()I+]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/graphics/drawable/LayerDrawable;->getIntrinsicWidth()I+]Landroid/graphics/drawable/LayerDrawable;missing_types]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/LayerDrawable;->getNumberOfLayers()I
-HSPLandroid/graphics/drawable/LayerDrawable;->getOpacity()I
-HSPLandroid/graphics/drawable/LayerDrawable;->getOutline(Landroid/graphics/Outline;)V
-HSPLandroid/graphics/drawable/LayerDrawable;->getPadding(Landroid/graphics/Rect;)Z
+HSPLandroid/graphics/drawable/LayerDrawable;->getOpacity()I+]Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/graphics/drawable/LayerDrawable$LayerState;,Landroid/graphics/drawable/TransitionDrawable$TransitionState;
+HSPLandroid/graphics/drawable/LayerDrawable;->getOutline(Landroid/graphics/Outline;)V+]Landroid/graphics/Outline;Landroid/graphics/Outline;]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/graphics/drawable/LayerDrawable;->getPadding(Landroid/graphics/Rect;)Z+]Landroid/graphics/drawable/LayerDrawable;Landroid/graphics/drawable/RippleDrawable;,Landroid/graphics/drawable/LayerDrawable;
 HSPLandroid/graphics/drawable/LayerDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/LayerDrawable;->inflateLayers(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
-HSPLandroid/graphics/drawable/LayerDrawable;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/graphics/drawable/LayerDrawable;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/graphics/drawable/LayerDrawable$LayerState;,Landroid/graphics/drawable/RippleDrawable$RippleState;,Landroid/graphics/drawable/TransitionDrawable$TransitionState;]Landroid/graphics/drawable/LayerDrawable;missing_types
 HSPLandroid/graphics/drawable/LayerDrawable;->isAutoMirrored()Z
-HSPLandroid/graphics/drawable/LayerDrawable;->isProjected()Z
+HSPLandroid/graphics/drawable/LayerDrawable;->isProjected()Z+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;,Landroid/graphics/drawable/InsetDrawable;,Landroid/graphics/drawable/RippleDrawable;,Landroid/graphics/drawable/ColorDrawable;,Landroid/graphics/drawable/StateListDrawable;
 HSPLandroid/graphics/drawable/LayerDrawable;->isStateful()Z
-HSPLandroid/graphics/drawable/LayerDrawable;->jumpToCurrentState()V
-HSPLandroid/graphics/drawable/LayerDrawable;->mutate()Landroid/graphics/drawable/Drawable;
+HSPLandroid/graphics/drawable/LayerDrawable;->jumpToCurrentState()V+]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/graphics/drawable/LayerDrawable;->mutate()Landroid/graphics/drawable/Drawable;+]Landroid/graphics/drawable/LayerDrawable;Landroid/graphics/drawable/LayerDrawable;,Landroid/graphics/drawable/RippleDrawable;]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/LayerDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
-HSPLandroid/graphics/drawable/LayerDrawable;->onStateChange([I)Z
-HSPLandroid/graphics/drawable/LayerDrawable;->refreshChildPadding(ILandroid/graphics/drawable/LayerDrawable$ChildDrawable;)Z
+HSPLandroid/graphics/drawable/LayerDrawable;->onStateChange([I)Z+]Landroid/graphics/drawable/LayerDrawable;Landroid/graphics/drawable/LayerDrawable;,Landroid/graphics/drawable/RippleDrawable;]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/graphics/drawable/LayerDrawable;->refreshChildPadding(ILandroid/graphics/drawable/LayerDrawable$ChildDrawable;)Z+]Landroid/graphics/drawable/Drawable;megamorphic_types
 HSPLandroid/graphics/drawable/LayerDrawable;->refreshPadding()V
 HSPLandroid/graphics/drawable/LayerDrawable;->resolveGravity(IIIII)I
 HSPLandroid/graphics/drawable/LayerDrawable;->resumeChildInvalidation()V
@@ -7323,10 +7333,10 @@
 HSPLandroid/graphics/drawable/LayerDrawable;->setPaddingMode(I)V
 HSPLandroid/graphics/drawable/LayerDrawable;->setTintBlendMode(Landroid/graphics/BlendMode;)V
 HSPLandroid/graphics/drawable/LayerDrawable;->setTintList(Landroid/content/res/ColorStateList;)V
-HSPLandroid/graphics/drawable/LayerDrawable;->setVisible(ZZ)Z
+HSPLandroid/graphics/drawable/LayerDrawable;->setVisible(ZZ)Z+]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/LayerDrawable;->suspendChildInvalidation()V
 HSPLandroid/graphics/drawable/LayerDrawable;->updateLayerBounds(Landroid/graphics/Rect;)V
-HSPLandroid/graphics/drawable/LayerDrawable;->updateLayerBoundsInternal(Landroid/graphics/Rect;)V
+HSPLandroid/graphics/drawable/LayerDrawable;->updateLayerBoundsInternal(Landroid/graphics/Rect;)V+]Landroid/graphics/drawable/LayerDrawable;missing_types]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/LayerDrawable;->updateLayerFromTypedArray(Landroid/graphics/drawable/LayerDrawable$ChildDrawable;Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/LayerDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/NinePatchDrawable$$ExternalSyntheticLambda0;->onHeaderDecoded(Landroid/graphics/ImageDecoder;Landroid/graphics/ImageDecoder$ImageInfo;Landroid/graphics/ImageDecoder$Source;)V
@@ -7343,8 +7353,8 @@
 HSPLandroid/graphics/drawable/NinePatchDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/NinePatchDrawable;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/NinePatchDrawable;->clearMutated()V
-HSPLandroid/graphics/drawable/NinePatchDrawable;->computeBitmapSize()V
-HSPLandroid/graphics/drawable/NinePatchDrawable;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/NinePatchDrawable;->computeBitmapSize()V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;]Landroid/graphics/NinePatch;Landroid/graphics/NinePatch;
+HSPLandroid/graphics/drawable/NinePatchDrawable;->draw(Landroid/graphics/Canvas;)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/NinePatchDrawable;Landroid/graphics/drawable/NinePatchDrawable;]Landroid/graphics/NinePatch;Landroid/graphics/NinePatch;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;,Landroid/graphics/Picture$PictureCanvas;
 HSPLandroid/graphics/drawable/NinePatchDrawable;->getAlpha()I
 HSPLandroid/graphics/drawable/NinePatchDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/NinePatchDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
@@ -7353,7 +7363,7 @@
 HSPLandroid/graphics/drawable/NinePatchDrawable;->getOpacity()I
 HSPLandroid/graphics/drawable/NinePatchDrawable;->getOpticalInsets()Landroid/graphics/Insets;
 HSPLandroid/graphics/drawable/NinePatchDrawable;->getOutline(Landroid/graphics/Outline;)V
-HSPLandroid/graphics/drawable/NinePatchDrawable;->getPadding(Landroid/graphics/Rect;)Z
+HSPLandroid/graphics/drawable/NinePatchDrawable;->getPadding(Landroid/graphics/Rect;)Z+]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/graphics/drawable/NinePatchDrawable;->getPaint()Landroid/graphics/Paint;
 HSPLandroid/graphics/drawable/NinePatchDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/NinePatchDrawable;->isAutoMirrored()Z
@@ -7366,8 +7376,8 @@
 HSPLandroid/graphics/drawable/NinePatchDrawable;->setDither(Z)V
 HSPLandroid/graphics/drawable/NinePatchDrawable;->setTintBlendMode(Landroid/graphics/BlendMode;)V
 HSPLandroid/graphics/drawable/NinePatchDrawable;->setTintList(Landroid/content/res/ColorStateList;)V
-HSPLandroid/graphics/drawable/NinePatchDrawable;->updateLocalState(Landroid/content/res/Resources;)V
-HSPLandroid/graphics/drawable/NinePatchDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
+HSPLandroid/graphics/drawable/NinePatchDrawable;->updateLocalState(Landroid/content/res/Resources;)V+]Landroid/graphics/drawable/NinePatchDrawable;Landroid/graphics/drawable/NinePatchDrawable;
+HSPLandroid/graphics/drawable/NinePatchDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;]Ljava/io/InputStream;Landroid/content/res/AssetManager$AssetInputStream;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/graphics/drawable/RippleAnimationSession$2;-><init>(Landroid/graphics/drawable/RippleAnimationSession;Landroid/graphics/drawable/RippleAnimationSession;Landroid/graphics/animation/RenderNodeAnimator;)V
 HSPLandroid/graphics/drawable/RippleAnimationSession$2;->onAnimationEnd(Landroid/animation/Animator;)V
 HSPLandroid/graphics/drawable/RippleAnimationSession$3;-><init>(Landroid/graphics/drawable/RippleAnimationSession;Landroid/graphics/drawable/RippleAnimationSession;)V
@@ -7410,7 +7420,7 @@
 HSPLandroid/graphics/drawable/RippleAnimationSession;->useRTAnimations(Landroid/graphics/Canvas;)Z
 HSPLandroid/graphics/drawable/RippleComponent;->onBoundsChange()V
 HSPLandroid/graphics/drawable/RippleDrawable$$ExternalSyntheticLambda0;-><init>(Landroid/graphics/drawable/RippleDrawable;)V
-HSPLandroid/graphics/drawable/RippleDrawable$$ExternalSyntheticLambda0;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V
+HSPLandroid/graphics/drawable/RippleDrawable$$ExternalSyntheticLambda0;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V+]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;
 HSPLandroid/graphics/drawable/RippleDrawable$$ExternalSyntheticLambda1;-><init>(Landroid/graphics/drawable/RippleDrawable;)V
 HSPLandroid/graphics/drawable/RippleDrawable$$ExternalSyntheticLambda1;->run()V
 HSPLandroid/graphics/drawable/RippleDrawable$$ExternalSyntheticLambda2;-><init>(Landroid/graphics/drawable/RippleDrawable;)V
@@ -7424,11 +7434,11 @@
 HSPLandroid/graphics/drawable/RippleDrawable$RippleState;->onDensityChanged(II)V
 HSPLandroid/graphics/drawable/RippleDrawable;-><init>()V
 HSPLandroid/graphics/drawable/RippleDrawable;-><init>(Landroid/content/res/ColorStateList;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
-HSPLandroid/graphics/drawable/RippleDrawable;-><init>(Landroid/graphics/drawable/RippleDrawable$RippleState;Landroid/content/res/Resources;)V
+HSPLandroid/graphics/drawable/RippleDrawable;-><init>(Landroid/graphics/drawable/RippleDrawable$RippleState;Landroid/content/res/Resources;)V+]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;
 HSPLandroid/graphics/drawable/RippleDrawable;-><init>(Landroid/graphics/drawable/RippleDrawable$RippleState;Landroid/content/res/Resources;Landroid/graphics/drawable/RippleDrawable-IA;)V
 HSPLandroid/graphics/drawable/RippleDrawable;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/RippleDrawable;->canApplyTheme()Z
-HSPLandroid/graphics/drawable/RippleDrawable;->cancelExitingRipples()V
+HSPLandroid/graphics/drawable/RippleDrawable;->cancelExitingRipples()V+]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;
 HSPLandroid/graphics/drawable/RippleDrawable;->clampAlpha(I)I
 HSPLandroid/graphics/drawable/RippleDrawable;->clearHotspots()V
 HSPLandroid/graphics/drawable/RippleDrawable;->computeRadius()F
@@ -7437,30 +7447,30 @@
 HSPLandroid/graphics/drawable/RippleDrawable;->createConstantState(Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/content/res/Resources;)Landroid/graphics/drawable/RippleDrawable$RippleState;
 HSPLandroid/graphics/drawable/RippleDrawable;->draw(Landroid/graphics/Canvas;)V
 HSPLandroid/graphics/drawable/RippleDrawable;->drawBackgroundAndRipples(Landroid/graphics/Canvas;)V
-HSPLandroid/graphics/drawable/RippleDrawable;->drawContent(Landroid/graphics/Canvas;)V+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;,Landroid/graphics/drawable/InsetDrawable;
-HSPLandroid/graphics/drawable/RippleDrawable;->drawPatterned(Landroid/graphics/Canvas;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/RippleAnimationSession$AnimationProperties;Landroid/graphics/drawable/RippleAnimationSession$AnimationProperties;]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/drawable/RippleAnimationSession;Landroid/graphics/drawable/RippleAnimationSession;
+HSPLandroid/graphics/drawable/RippleDrawable;->drawContent(Landroid/graphics/Canvas;)V+]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/graphics/drawable/RippleDrawable;->drawPatterned(Landroid/graphics/Canvas;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/RippleAnimationSession$AnimationProperties;Landroid/graphics/drawable/RippleAnimationSession$AnimationProperties;]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;,Landroid/graphics/Picture$PictureCanvas;]Landroid/graphics/drawable/RippleAnimationSession;Landroid/graphics/drawable/RippleAnimationSession;
 HSPLandroid/graphics/drawable/RippleDrawable;->drawPatternedBackground(Landroid/graphics/Canvas;FF)V
 HSPLandroid/graphics/drawable/RippleDrawable;->exitPatternedAnimation()V
-HSPLandroid/graphics/drawable/RippleDrawable;->exitPatternedBackgroundAnimation()V
+HSPLandroid/graphics/drawable/RippleDrawable;->exitPatternedBackgroundAnimation()V+]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;]Landroid/animation/ValueAnimator;Landroid/animation/ValueAnimator;
 HSPLandroid/graphics/drawable/RippleDrawable;->getComputedRadius()I
 HSPLandroid/graphics/drawable/RippleDrawable;->getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;
 HSPLandroid/graphics/drawable/RippleDrawable;->getDirtyBounds()Landroid/graphics/Rect;+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;
 HSPLandroid/graphics/drawable/RippleDrawable;->getMaskType()I
 HSPLandroid/graphics/drawable/RippleDrawable;->getOpacity()I
-HSPLandroid/graphics/drawable/RippleDrawable;->getOutline(Landroid/graphics/Outline;)V+]Landroid/graphics/Outline;Landroid/graphics/Outline;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;,Landroid/graphics/drawable/InsetDrawable;
+HSPLandroid/graphics/drawable/RippleDrawable;->getOutline(Landroid/graphics/Outline;)V+]Landroid/graphics/Outline;Landroid/graphics/Outline;]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/RippleDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/RippleDrawable;->invalidateSelf()V
 HSPLandroid/graphics/drawable/RippleDrawable;->invalidateSelf(Z)V
-HSPLandroid/graphics/drawable/RippleDrawable;->isBounded()Z
-HSPLandroid/graphics/drawable/RippleDrawable;->isProjected()Z
+HSPLandroid/graphics/drawable/RippleDrawable;->isBounded()Z+]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;
+HSPLandroid/graphics/drawable/RippleDrawable;->isProjected()Z+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;
 HSPLandroid/graphics/drawable/RippleDrawable;->isStateful()Z
 HSPLandroid/graphics/drawable/RippleDrawable;->jumpToCurrentState()V
 HSPLandroid/graphics/drawable/RippleDrawable;->lambda$drawPatterned$1$android-graphics-drawable-RippleDrawable()V
 HSPLandroid/graphics/drawable/RippleDrawable;->lambda$drawPatterned$2$android-graphics-drawable-RippleDrawable(Landroid/graphics/drawable/RippleAnimationSession;)V
-HSPLandroid/graphics/drawable/RippleDrawable;->lambda$startBackgroundAnimation$0$android-graphics-drawable-RippleDrawable(Landroid/animation/ValueAnimator;)V+]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;]Ljava/lang/Float;Ljava/lang/Float;]Landroid/animation/ValueAnimator;Landroid/animation/ValueAnimator;
+HSPLandroid/graphics/drawable/RippleDrawable;->lambda$startBackgroundAnimation$0$android-graphics-drawable-RippleDrawable(Landroid/animation/ValueAnimator;)V+]Landroid/graphics/drawable/RippleDrawable;missing_types]Ljava/lang/Float;Ljava/lang/Float;]Landroid/animation/ValueAnimator;Landroid/animation/ValueAnimator;
 HSPLandroid/graphics/drawable/RippleDrawable;->mutate()Landroid/graphics/drawable/Drawable;
-HSPLandroid/graphics/drawable/RippleDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
-HSPLandroid/graphics/drawable/RippleDrawable;->onHotspotBoundsChanged()V
+HSPLandroid/graphics/drawable/RippleDrawable;->onBoundsChange(Landroid/graphics/Rect;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;
+HSPLandroid/graphics/drawable/RippleDrawable;->onHotspotBoundsChanged()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/graphics/drawable/RippleDrawable;->onStateChange([I)Z
 HSPLandroid/graphics/drawable/RippleDrawable;->pruneRipples()V
 HSPLandroid/graphics/drawable/RippleDrawable;->setBackgroundActive(ZZZ)V
@@ -7470,9 +7480,9 @@
 HSPLandroid/graphics/drawable/RippleDrawable;->setPaddingMode(I)V
 HSPLandroid/graphics/drawable/RippleDrawable;->setRippleActive(Z)V
 HSPLandroid/graphics/drawable/RippleDrawable;->setVisible(ZZ)Z
-HSPLandroid/graphics/drawable/RippleDrawable;->startBackgroundAnimation()V
+HSPLandroid/graphics/drawable/RippleDrawable;->startBackgroundAnimation()V+]Landroid/animation/ValueAnimator;Landroid/animation/ValueAnimator;
 HSPLandroid/graphics/drawable/RippleDrawable;->tryRippleEnter()V
-HSPLandroid/graphics/drawable/RippleDrawable;->updateLocalState()V
+HSPLandroid/graphics/drawable/RippleDrawable;->updateLocalState()V+]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;
 HSPLandroid/graphics/drawable/RippleDrawable;->updateMaskShaderIfNeeded()V
 HSPLandroid/graphics/drawable/RippleDrawable;->updateRipplePaint()Landroid/graphics/Paint;+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/graphics/drawable/RippleShader;Landroid/graphics/drawable/RippleShader;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/BitmapShader;Landroid/graphics/BitmapShader;]Landroid/graphics/drawable/RippleAnimationSession$AnimationProperties;Landroid/graphics/drawable/RippleAnimationSession$AnimationProperties;]Landroid/graphics/drawable/RippleDrawable;Landroid/graphics/drawable/RippleDrawable;]Landroid/graphics/PorterDuffColorFilter;Landroid/graphics/PorterDuffColorFilter;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/graphics/drawable/RippleAnimationSession;Landroid/graphics/drawable/RippleAnimationSession;
 HSPLandroid/graphics/drawable/RippleDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
@@ -7543,7 +7553,7 @@
 HSPLandroid/graphics/drawable/ShapeDrawable;-><init>()V
 HSPLandroid/graphics/drawable/ShapeDrawable;-><init>(Landroid/graphics/drawable/ShapeDrawable$ShapeState;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/ShapeDrawable;-><init>(Landroid/graphics/drawable/shapes/Shape;)V
-HSPLandroid/graphics/drawable/ShapeDrawable;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/ShapeDrawable;->draw(Landroid/graphics/Canvas;)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/graphics/drawable/ShapeDrawable;Landroid/graphics/drawable/PaintDrawable;,Landroid/graphics/drawable/ShapeDrawable;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
 HSPLandroid/graphics/drawable/ShapeDrawable;->getAlpha()I
 HSPLandroid/graphics/drawable/ShapeDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/ShapeDrawable;->getIntrinsicHeight()I
@@ -7566,7 +7576,7 @@
 HSPLandroid/graphics/drawable/StateListDrawable$StateListState;-><init>(Landroid/graphics/drawable/StateListDrawable$StateListState;Landroid/graphics/drawable/StateListDrawable;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/StateListDrawable$StateListState;->addStateSet([ILandroid/graphics/drawable/Drawable;)I
 HSPLandroid/graphics/drawable/StateListDrawable$StateListState;->canApplyTheme()Z
-HSPLandroid/graphics/drawable/StateListDrawable$StateListState;->indexOfStateSet([I)I
+HSPLandroid/graphics/drawable/StateListDrawable$StateListState;->indexOfStateSet([I)I+]Landroid/graphics/drawable/StateListDrawable$StateListState;Landroid/graphics/drawable/StateListDrawable$StateListState;,Landroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;
 HSPLandroid/graphics/drawable/StateListDrawable$StateListState;->mutate()V
 HSPLandroid/graphics/drawable/StateListDrawable$StateListState;->newDrawable()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/StateListDrawable$StateListState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
@@ -7584,14 +7594,14 @@
 HSPLandroid/graphics/drawable/StateListDrawable;->inflateChildElements(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/StateListDrawable;->isStateful()Z
 HSPLandroid/graphics/drawable/StateListDrawable;->mutate()Landroid/graphics/drawable/Drawable;
-HSPLandroid/graphics/drawable/StateListDrawable;->onStateChange([I)Z
+HSPLandroid/graphics/drawable/StateListDrawable;->onStateChange([I)Z+]Landroid/graphics/drawable/StateListDrawable$StateListState;Landroid/graphics/drawable/StateListDrawable$StateListState;]Landroid/graphics/drawable/StateListDrawable;Landroid/graphics/drawable/StateListDrawable;
 HSPLandroid/graphics/drawable/StateListDrawable;->setConstantState(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;)V
 HSPLandroid/graphics/drawable/StateListDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/TransitionDrawable$TransitionState;-><init>(Landroid/graphics/drawable/TransitionDrawable$TransitionState;Landroid/graphics/drawable/TransitionDrawable;Landroid/content/res/Resources;)V
 HSPLandroid/graphics/drawable/TransitionDrawable$TransitionState;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/TransitionDrawable;-><init>([Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/graphics/drawable/TransitionDrawable;->createConstantState(Landroid/graphics/drawable/LayerDrawable$LayerState;Landroid/content/res/Resources;)Landroid/graphics/drawable/LayerDrawable$LayerState;
-HSPLandroid/graphics/drawable/TransitionDrawable;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/TransitionDrawable;->draw(Landroid/graphics/Canvas;)V+]Landroid/graphics/drawable/TransitionDrawable;Landroid/graphics/drawable/TransitionDrawable;]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/graphics/drawable/TransitionDrawable;->setCrossFadeEnabled(Z)V
 HSPLandroid/graphics/drawable/TransitionDrawable;->startTransition(I)V
 HSPLandroid/graphics/drawable/VectorDrawable$VClipPath;->canApplyTheme()Z
@@ -7616,18 +7626,18 @@
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->-$$Nest$fgetmChangingConfigurations(Landroid/graphics/drawable/VectorDrawable$VGroup;)I
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->-$$Nest$fgetmNativePtr(Landroid/graphics/drawable/VectorDrawable$VGroup;)J
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;-><init>()V
-HSPLandroid/graphics/drawable/VectorDrawable$VGroup;-><init>(Landroid/graphics/drawable/VectorDrawable$VGroup;Landroid/util/ArrayMap;)V+]Landroid/graphics/drawable/VectorDrawable$VGroup;Landroid/graphics/drawable/VectorDrawable$VGroup;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->addChild(Landroid/graphics/drawable/VectorDrawable$VObject;)V
+HSPLandroid/graphics/drawable/VectorDrawable$VGroup;-><init>(Landroid/graphics/drawable/VectorDrawable$VGroup;Landroid/util/ArrayMap;)V+]Landroid/graphics/drawable/VectorDrawable$VGroup;Landroid/graphics/drawable/VectorDrawable$VGroup;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->addChild(Landroid/graphics/drawable/VectorDrawable$VObject;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/graphics/drawable/VectorDrawable$VObject;Landroid/graphics/drawable/VectorDrawable$VFullPath;,Landroid/graphics/drawable/VectorDrawable$VGroup;
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->getGroupName()Ljava/lang/String;
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->getNativePtr()J
-HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->getNativeSize()I
+HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->getNativeSize()I+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/graphics/drawable/VectorDrawable$VObject;Landroid/graphics/drawable/VectorDrawable$VFullPath;,Landroid/graphics/drawable/VectorDrawable$VGroup;
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->getProperty(Ljava/lang/String;)Landroid/util/Property;
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->inflate(Landroid/content/res/Resources;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->isStateful()Z
-HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->onStateChange([I)Z
-HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->setTree(Lcom/android/internal/util/VirtualRefBasePtr;)V
+HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->onStateChange([I)Z+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/graphics/drawable/VectorDrawable$VObject;Landroid/graphics/drawable/VectorDrawable$VFullPath;
+HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->setTree(Lcom/android/internal/util/VirtualRefBasePtr;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/graphics/drawable/VectorDrawable$VObject;Landroid/graphics/drawable/VectorDrawable$VFullPath;,Landroid/graphics/drawable/VectorDrawable$VGroup;
 HSPLandroid/graphics/drawable/VectorDrawable$VGroup;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
 HSPLandroid/graphics/drawable/VectorDrawable$VObject;-><init>()V
 HSPLandroid/graphics/drawable/VectorDrawable$VObject;->isTreeValid()Z
@@ -7641,21 +7651,21 @@
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->applyDensityScaling(II)V
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->applyTheme(Landroid/content/res/Resources$Theme;)V
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->canApplyTheme()Z
-HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->canReuseCache()Z
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->canReuseCache()Z+]Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->createNativeTree(Landroid/graphics/drawable/VectorDrawable$VGroup;)V
-HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->createNativeTreeFromCopy(Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;Landroid/graphics/drawable/VectorDrawable$VGroup;)V
-HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->finalize()V
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->createNativeTreeFromCopy(Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;Landroid/graphics/drawable/VectorDrawable$VGroup;)V+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;]Lcom/android/internal/util/VirtualRefBasePtr;Lcom/android/internal/util/VirtualRefBasePtr;
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->finalize()V+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->getAlpha()F
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->getChangingConfigurations()I
-HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->getNativeRenderer()J
-HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->isStateful()Z
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->getNativeRenderer()J+]Lcom/android/internal/util/VirtualRefBasePtr;Lcom/android/internal/util/VirtualRefBasePtr;
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->isStateful()Z+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Landroid/graphics/drawable/VectorDrawable$VGroup;Landroid/graphics/drawable/VectorDrawable$VGroup;
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->newDrawable()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->onStateChange([I)Z
-HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->onTreeConstructionFinished()V
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->onTreeConstructionFinished()V+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;]Landroid/graphics/drawable/VectorDrawable$VGroup;Landroid/graphics/drawable/VectorDrawable$VGroup;
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->setAlpha(F)Z
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->setDensity(I)Z
-HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->setViewportSize(FF)V
+HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->setViewportSize(FF)V+]Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;
 HSPLandroid/graphics/drawable/VectorDrawable$VectorDrawableState;->updateCacheStates()V
 HSPLandroid/graphics/drawable/VectorDrawable;->-$$Nest$smnAddChild(JJ)V
 HSPLandroid/graphics/drawable/VectorDrawable;->-$$Nest$smnCreateFullPath()J
@@ -7682,7 +7692,7 @@
 HSPLandroid/graphics/drawable/VectorDrawable;->canApplyTheme()Z
 HSPLandroid/graphics/drawable/VectorDrawable;->clearMutated()V
 HSPLandroid/graphics/drawable/VectorDrawable;->computeVectorSize()V
-HSPLandroid/graphics/drawable/VectorDrawable;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/graphics/drawable/VectorDrawable;->draw(Landroid/graphics/Canvas;)V+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;]Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;]Landroid/graphics/ColorFilter;Landroid/graphics/PorterDuffColorFilter;,Landroid/graphics/BlendModeColorFilter;]Landroid/graphics/drawable/VectorDrawable;Landroid/graphics/drawable/VectorDrawable;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
 HSPLandroid/graphics/drawable/VectorDrawable;->getAlpha()I
 HSPLandroid/graphics/drawable/VectorDrawable;->getChangingConfigurations()I
 HSPLandroid/graphics/drawable/VectorDrawable;->getColorFilter()Landroid/graphics/ColorFilter;
@@ -7693,22 +7703,22 @@
 HSPLandroid/graphics/drawable/VectorDrawable;->getOpacity()I
 HSPLandroid/graphics/drawable/VectorDrawable;->getPixelSize()F
 HSPLandroid/graphics/drawable/VectorDrawable;->getTargetByName(Ljava/lang/String;)Ljava/lang/Object;
-HSPLandroid/graphics/drawable/VectorDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
-HSPLandroid/graphics/drawable/VectorDrawable;->inflateChildElements(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V
+HSPLandroid/graphics/drawable/VectorDrawable;->inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;]Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;]Lcom/android/internal/util/VirtualRefBasePtr;Lcom/android/internal/util/VirtualRefBasePtr;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/graphics/drawable/VectorDrawable$VGroup;Landroid/graphics/drawable/VectorDrawable$VGroup;
+HSPLandroid/graphics/drawable/VectorDrawable;->inflateChildElements(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V+]Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/XmlBlock$Parser;]Ljava/util/Stack;Ljava/util/Stack;]Landroid/graphics/drawable/VectorDrawable$VGroup;Landroid/graphics/drawable/VectorDrawable$VGroup;]Landroid/graphics/drawable/VectorDrawable$VFullPath;Landroid/graphics/drawable/VectorDrawable$VFullPath;
 HSPLandroid/graphics/drawable/VectorDrawable;->isAutoMirrored()Z
 HSPLandroid/graphics/drawable/VectorDrawable;->isStateful()Z
 HSPLandroid/graphics/drawable/VectorDrawable;->mutate()Landroid/graphics/drawable/Drawable;
 HSPLandroid/graphics/drawable/VectorDrawable;->needMirroring()Z
-HSPLandroid/graphics/drawable/VectorDrawable;->onStateChange([I)Z
+HSPLandroid/graphics/drawable/VectorDrawable;->onStateChange([I)Z+]Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;]Landroid/graphics/drawable/VectorDrawable;Landroid/graphics/drawable/VectorDrawable;
 HSPLandroid/graphics/drawable/VectorDrawable;->setAllowCaching(Z)V
 HSPLandroid/graphics/drawable/VectorDrawable;->setAlpha(I)V
 HSPLandroid/graphics/drawable/VectorDrawable;->setAutoMirrored(Z)V
 HSPLandroid/graphics/drawable/VectorDrawable;->setColorFilter(Landroid/graphics/ColorFilter;)V
 HSPLandroid/graphics/drawable/VectorDrawable;->setTintBlendMode(Landroid/graphics/BlendMode;)V
 HSPLandroid/graphics/drawable/VectorDrawable;->setTintList(Landroid/content/res/ColorStateList;)V
-HSPLandroid/graphics/drawable/VectorDrawable;->updateColorFilters(Landroid/graphics/BlendMode;Landroid/content/res/ColorStateList;)V
+HSPLandroid/graphics/drawable/VectorDrawable;->updateColorFilters(Landroid/graphics/BlendMode;Landroid/content/res/ColorStateList;)V+]Landroid/graphics/drawable/VectorDrawable;Landroid/graphics/drawable/VectorDrawable;
 HSPLandroid/graphics/drawable/VectorDrawable;->updateLocalState(Landroid/content/res/Resources;)V
-HSPLandroid/graphics/drawable/VectorDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V
+HSPLandroid/graphics/drawable/VectorDrawable;->updateStateFromTypedArray(Landroid/content/res/TypedArray;)V+]Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;Landroid/graphics/drawable/VectorDrawable$VectorDrawableState;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/graphics/drawable/shapes/OvalShape;-><init>()V
 HSPLandroid/graphics/drawable/shapes/OvalShape;->draw(Landroid/graphics/Canvas;Landroid/graphics/Paint;)V
 HSPLandroid/graphics/drawable/shapes/OvalShape;->getOutline(Landroid/graphics/Outline;)V
@@ -7774,7 +7784,7 @@
 HSPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->setIndent(FI)V
 HSPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->setTabStops([FF)V
 HSPLandroid/graphics/text/LineBreaker$ParagraphConstraints;->setWidth(F)V
-HSPLandroid/graphics/text/LineBreaker$Result;-><init>(J)V
+HSPLandroid/graphics/text/LineBreaker$Result;-><init>(J)V+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
 HSPLandroid/graphics/text/LineBreaker$Result;->getEndLineHyphenEdit(I)I
 HSPLandroid/graphics/text/LineBreaker$Result;->getLineAscent(I)F
 HSPLandroid/graphics/text/LineBreaker$Result;->getLineBreakOffset(I)I
@@ -7783,10 +7793,10 @@
 HSPLandroid/graphics/text/LineBreaker$Result;->getLineWidth(I)F
 HSPLandroid/graphics/text/LineBreaker$Result;->getStartLineHyphenEdit(I)I
 HSPLandroid/graphics/text/LineBreaker$Result;->hasLineTab(I)Z
-HSPLandroid/graphics/text/LineBreaker;-><init>(III[I)V
-HSPLandroid/graphics/text/LineBreaker;->computeLineBreaks(Landroid/graphics/text/MeasuredText;Landroid/graphics/text/LineBreaker$ParagraphConstraints;I)Landroid/graphics/text/LineBreaker$Result;
+HSPLandroid/graphics/text/LineBreaker;-><init>(III[I)V+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
+HSPLandroid/graphics/text/LineBreaker;->computeLineBreaks(Landroid/graphics/text/MeasuredText;Landroid/graphics/text/LineBreaker$ParagraphConstraints;I)Landroid/graphics/text/LineBreaker$Result;+]Landroid/graphics/text/MeasuredText;Landroid/graphics/text/MeasuredText;
 HSPLandroid/graphics/text/MeasuredText$Builder;-><init>([C)V
-HSPLandroid/graphics/text/MeasuredText$Builder;->appendReplacementRun(Landroid/graphics/Paint;IF)Landroid/graphics/text/MeasuredText$Builder;
+HSPLandroid/graphics/text/MeasuredText$Builder;->appendReplacementRun(Landroid/graphics/Paint;IF)Landroid/graphics/text/MeasuredText$Builder;+]Landroid/graphics/Paint;Landroid/text/TextPaint;
 HSPLandroid/graphics/text/MeasuredText$Builder;->appendStyleRun(Landroid/graphics/Paint;IZ)Landroid/graphics/text/MeasuredText$Builder;
 HSPLandroid/graphics/text/MeasuredText$Builder;->appendStyleRun(Landroid/graphics/Paint;Landroid/graphics/text/LineBreakConfig;IZ)Landroid/graphics/text/MeasuredText$Builder;+]Landroid/graphics/Paint;Landroid/text/TextPaint;]Landroid/graphics/text/LineBreakConfig;Landroid/graphics/text/LineBreakConfig;
 HSPLandroid/graphics/text/MeasuredText$Builder;->build()Landroid/graphics/text/MeasuredText;+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
@@ -7794,7 +7804,7 @@
 HSPLandroid/graphics/text/MeasuredText$Builder;->setComputeHyphenation(I)Landroid/graphics/text/MeasuredText$Builder;
 HSPLandroid/graphics/text/MeasuredText$Builder;->setComputeHyphenation(Z)Landroid/graphics/text/MeasuredText$Builder;
 HSPLandroid/graphics/text/MeasuredText$Builder;->setComputeLayout(Z)Landroid/graphics/text/MeasuredText$Builder;
-HSPLandroid/graphics/text/MeasuredText;->getCharWidthAt(I)F
+HSPLandroid/graphics/text/MeasuredText;->getCharWidthAt(I)F+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/graphics/text/MeasuredText;->getChars()[C
 HSPLandroid/graphics/text/MeasuredText;->getNativePtr()J
 HSPLandroid/hardware/Camera$CameraInfo;-><init>()V
@@ -7846,7 +7856,7 @@
 HSPLandroid/hardware/SensorManager;->unregisterListener(Landroid/hardware/SensorEventListener;)V
 HSPLandroid/hardware/SensorManager;->unregisterListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;)V
 HSPLandroid/hardware/SensorPrivacyManager;->isSensorPrivacyEnabled(II)Z
-HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;-><init>(Landroid/os/Looper;Landroid/hardware/SystemSensorManager;ILjava/lang/String;)V
+HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;-><init>(Landroid/os/Looper;Landroid/hardware/SystemSensorManager;ILjava/lang/String;)V+]Landroid/os/Looper;Landroid/os/Looper;]Landroid/content/Context;Landroid/app/ContextImpl;]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
 HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;->addSensor(Landroid/hardware/Sensor;II)Z
 HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;->disableSensor(Landroid/hardware/Sensor;)I
 HSPLandroid/hardware/SystemSensorManager$BaseEventQueue;->dispose()V
@@ -7886,7 +7896,7 @@
 HSPLandroid/hardware/camera2/CameraCharacteristics$Key;->getNativeKey()Landroid/hardware/camera2/impl/CameraMetadataNative$Key;
 HSPLandroid/hardware/camera2/CameraCharacteristics;->-$$Nest$fgetmLock(Landroid/hardware/camera2/CameraCharacteristics;)Ljava/lang/Object;
 HSPLandroid/hardware/camera2/CameraCharacteristics;->-$$Nest$fputmFoldedDeviceState(Landroid/hardware/camera2/CameraCharacteristics;Z)V
-HSPLandroid/hardware/camera2/CameraCharacteristics;->get(Landroid/hardware/camera2/CameraCharacteristics$Key;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/CameraCharacteristics;->get(Landroid/hardware/camera2/CameraCharacteristics$Key;)Ljava/lang/Object;+]Landroid/hardware/camera2/impl/CameraMetadataNative;Landroid/hardware/camera2/impl/CameraMetadataNative;
 HSPLandroid/hardware/camera2/CameraCharacteristics;->getDeviceStateListener()Landroid/hardware/camera2/CameraManager$DeviceStateListener;
 HSPLandroid/hardware/camera2/CameraCharacteristics;->overrideProperty(Landroid/hardware/camera2/CameraCharacteristics$Key;)Ljava/lang/Object;+]Landroid/hardware/camera2/CameraCharacteristics$Key;Landroid/hardware/camera2/CameraCharacteristics$Key;]Landroid/hardware/camera2/impl/CameraMetadataNative;Landroid/hardware/camera2/impl/CameraMetadataNative;
 HSPLandroid/hardware/camera2/CameraManager$AvailabilityCallback;-><init>()V
@@ -7922,27 +7932,27 @@
 HSPLandroid/hardware/camera2/impl/CameraDeviceImpl$CameraHandlerExecutor;->execute(Ljava/lang/Runnable;)V
 HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->checkAndWrapHandler(Landroid/os/Handler;)Ljava/util/concurrent/Executor;
 HSPLandroid/hardware/camera2/impl/CameraDeviceImpl;->checkHandler(Landroid/os/Handler;)Landroid/os/Handler;
-HSPLandroid/hardware/camera2/impl/CameraMetadataNative$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/camera2/impl/CameraMetadataNative;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/camera2/impl/CameraMetadataNative;+]Landroid/hardware/camera2/impl/CameraMetadataNative;Landroid/hardware/camera2/impl/CameraMetadataNative;
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative$Key;->equals(Ljava/lang/Object;)Z+]Landroid/hardware/camera2/impl/CameraMetadataNative$Key;Landroid/hardware/camera2/impl/CameraMetadataNative$Key;]Ljava/lang/Object;Landroid/hardware/camera2/impl/CameraMetadataNative$Key;,Landroid/hardware/camera2/CameraCharacteristics$Key;]Landroid/hardware/camera2/utils/TypeReference;Landroid/hardware/camera2/utils/TypeReference$SpecializedTypeReference;]Landroid/hardware/camera2/CameraCharacteristics$Key;Landroid/hardware/camera2/CameraCharacteristics$Key;
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative$Key;->hashCode()I
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative;-><init>()V
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->finalize()V
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->get(Landroid/hardware/camera2/CameraCharacteristics$Key;)Ljava/lang/Object;
-HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->get(Landroid/hardware/camera2/impl/CameraMetadataNative$Key;)Ljava/lang/Object;
-HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->getBase(Landroid/hardware/camera2/impl/CameraMetadataNative$Key;)Ljava/lang/Object;
-HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->move(Landroid/hardware/camera2/impl/CameraMetadataNative;)Landroid/hardware/camera2/impl/CameraMetadataNative;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->get(Landroid/hardware/camera2/impl/CameraMetadataNative$Key;)Ljava/lang/Object;+]Ljava/util/HashMap;Ljava/util/HashMap;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->getBase(Landroid/hardware/camera2/impl/CameraMetadataNative$Key;)Ljava/lang/Object;+]Landroid/hardware/camera2/impl/CameraMetadataNative$Key;Landroid/hardware/camera2/impl/CameraMetadataNative$Key;]Landroid/hardware/camera2/marshal/Marshaler;megamorphic_types]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;]Landroid/hardware/camera2/impl/CameraMetadataNative;Landroid/hardware/camera2/impl/CameraMetadataNative;
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->move(Landroid/hardware/camera2/impl/CameraMetadataNative;)Landroid/hardware/camera2/impl/CameraMetadataNative;+]Landroid/hardware/camera2/impl/CameraMetadataNative;Landroid/hardware/camera2/impl/CameraMetadataNative;
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->readValues(I)[B
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->setCameraId(I)V
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->setDisplaySize(Landroid/util/Size;)V
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->setHasMandatoryConcurrentStreams(Z)V
 HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->setupGlobalVendorTagDescriptor()V
-HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->updateNativeAllocation()V
+HSPLandroid/hardware/camera2/impl/CameraMetadataNative;->updateNativeAllocation()V+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;
 HSPLandroid/hardware/camera2/marshal/MarshalHelpers;->checkNativeType(I)I
 HSPLandroid/hardware/camera2/marshal/MarshalHelpers;->wrapClassIfPrimitive(Ljava/lang/Class;)Ljava/lang/Class;
-HSPLandroid/hardware/camera2/marshal/MarshalRegistry$MarshalToken;->equals(Ljava/lang/Object;)Z
+HSPLandroid/hardware/camera2/marshal/MarshalRegistry$MarshalToken;->equals(Ljava/lang/Object;)Z+]Landroid/hardware/camera2/utils/TypeReference;Landroid/hardware/camera2/utils/TypeReference$SpecializedTypeReference;,Landroid/hardware/camera2/CaptureRequest$2;
 HSPLandroid/hardware/camera2/marshal/MarshalRegistry$MarshalToken;->hashCode()I
-HSPLandroid/hardware/camera2/marshal/MarshalRegistry;->getMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;
+HSPLandroid/hardware/camera2/marshal/MarshalRegistry;->getMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;+]Ljava/util/HashMap;Ljava/util/HashMap;
 HSPLandroid/hardware/camera2/marshal/Marshaler;-><init>(Landroid/hardware/camera2/marshal/MarshalQueryable;Landroid/hardware/camera2/utils/TypeReference;I)V
 HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableArray$MarshalerArray;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Object;
 HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableArray;->createMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;
@@ -7957,8 +7967,8 @@
 HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableNativeByteToInteger$MarshalerNativeByteToInteger;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Object;
 HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableNativeByteToInteger;->createMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;
 HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableNativeByteToInteger;->isTypeMappingSupported(Landroid/hardware/camera2/utils/TypeReference;I)Z
-HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryablePrimitive$MarshalerPrimitive;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Object;
-HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryablePrimitive$MarshalerPrimitive;->unmarshalObject(Ljava/nio/ByteBuffer;)Ljava/lang/Object;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryablePrimitive$MarshalerPrimitive;->unmarshal(Ljava/nio/ByteBuffer;)Ljava/lang/Object;+]Ljava/lang/Class;Ljava/lang/Class;
+HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryablePrimitive$MarshalerPrimitive;->unmarshalObject(Ljava/nio/ByteBuffer;)Ljava/lang/Object;+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryablePrimitive;->createMarshaler(Landroid/hardware/camera2/utils/TypeReference;I)Landroid/hardware/camera2/marshal/Marshaler;
 HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryablePrimitive;->isTypeMappingSupported(Landroid/hardware/camera2/utils/TypeReference;I)Z
 HSPLandroid/hardware/camera2/marshal/impl/MarshalQueryableRange;->isTypeMappingSupported(Landroid/hardware/camera2/utils/TypeReference;I)Z
@@ -7976,7 +7986,7 @@
 HSPLandroid/hardware/camera2/utils/ConcurrentCameraIdCombination;->getConcurrentCameraIdCombination()Ljava/util/Set;
 HSPLandroid/hardware/camera2/utils/ConcurrentCameraIdCombination;->readFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/hardware/camera2/utils/TypeReference;->containsTypeVariable(Ljava/lang/reflect/Type;)Z
-HSPLandroid/hardware/camera2/utils/TypeReference;->equals(Ljava/lang/Object;)Z
+HSPLandroid/hardware/camera2/utils/TypeReference;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Llibcore/reflect/ParameterizedTypeImpl;,Ljava/lang/Class;
 HSPLandroid/hardware/camera2/utils/TypeReference;->getComponentType()Landroid/hardware/camera2/utils/TypeReference;
 HSPLandroid/hardware/camera2/utils/TypeReference;->getComponentType(Ljava/lang/reflect/Type;)Ljava/lang/reflect/Type;
 HSPLandroid/hardware/camera2/utils/TypeReference;->getRawType()Ljava/lang/Class;
@@ -8044,9 +8054,9 @@
 HSPLandroid/hardware/display/DeviceProductInfo$ManufactureDate$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/hardware/display/DeviceProductInfo$ManufactureDate;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/hardware/display/DeviceProductInfo$ManufactureDate;->equals(Ljava/lang/Object;)Z
-HSPLandroid/hardware/display/DeviceProductInfo;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/hardware/display/DeviceProductInfo;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/hardware/display/DeviceProductInfo;-><init>(Landroid/os/Parcel;Landroid/hardware/display/DeviceProductInfo-IA;)V
-HSPLandroid/hardware/display/DeviceProductInfo;->equals(Ljava/lang/Object;)Z
+HSPLandroid/hardware/display/DeviceProductInfo;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Landroid/hardware/display/DeviceProductInfo;
 HSPLandroid/hardware/display/DisplayManager;-><init>(Landroid/content/Context;)V
 HSPLandroid/hardware/display/DisplayManager;->addAllDisplaysLocked(Ljava/util/ArrayList;[I)V
 HSPLandroid/hardware/display/DisplayManager;->addPresentationDisplaysLocked(Ljava/util/ArrayList;[II)V
@@ -8094,7 +8104,6 @@
 HSPLandroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;->isBrightOrDim()Z
 HSPLandroid/hardware/display/IColorDisplayManager$Stub$Proxy;->isNightDisplayActivated()Z
 HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->getDisplayIds()[I
 HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->getDisplayInfo(I)Landroid/view/DisplayInfo;
 HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->getPreferredWideGamutColorSpaceId()I
 HSPLandroid/hardware/display/IDisplayManager$Stub$Proxy;->getStableDisplaySize()Landroid/graphics/Point;
@@ -8203,7 +8212,7 @@
 HSPLandroid/hardware/security/keymint/KeyParameter$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/hardware/security/keymint/KeyParameter;-><clinit>()V
 HSPLandroid/hardware/security/keymint/KeyParameter;-><init>()V
-HSPLandroid/hardware/security/keymint/KeyParameter;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/hardware/security/keymint/KeyParameter;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/hardware/security/keymint/KeyParameter;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/hardware/security/keymint/KeyParameterValue$1;-><init>()V
 HSPLandroid/hardware/security/keymint/KeyParameterValue$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/security/keymint/KeyParameterValue;
@@ -8229,7 +8238,7 @@
 HSPLandroid/hardware/security/keymint/KeyParameterValue;->keyPurpose(I)Landroid/hardware/security/keymint/KeyParameterValue;
 HSPLandroid/hardware/security/keymint/KeyParameterValue;->paddingMode(I)Landroid/hardware/security/keymint/KeyParameterValue;
 HSPLandroid/hardware/security/keymint/KeyParameterValue;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/hardware/security/keymint/KeyParameterValue;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/hardware/security/keymint/KeyParameterValue;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/hardware/security/keymint/KeyParameterValue;Landroid/hardware/security/keymint/KeyParameterValue;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/hardware/soundtrigger/KeyphraseMetadata;-><init>(ILjava/lang/String;Ljava/util/Set;I)V
 HSPLandroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;-><init>(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;IIIIZIZIZI)V
 HSPLandroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;->getAudioCapabilities()I
@@ -8271,7 +8280,7 @@
 HSPLandroid/icu/impl/BMPSet;->set32x64Bits([III)V
 HSPLandroid/icu/impl/CacheValue$NullValue;->isNull()Z
 HSPLandroid/icu/impl/CacheValue$SoftValue;-><init>(Ljava/lang/Object;)V
-HSPLandroid/icu/impl/CacheValue$SoftValue;->get()Ljava/lang/Object;
+HSPLandroid/icu/impl/CacheValue$SoftValue;->get()Ljava/lang/Object;+]Ljava/lang/ref/Reference;Ljava/lang/ref/SoftReference;
 HSPLandroid/icu/impl/CacheValue$SoftValue;->resetIfCleared(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/icu/impl/CacheValue$StrongValue;->get()Ljava/lang/Object;
 HSPLandroid/icu/impl/CacheValue;-><init>()V
@@ -8307,7 +8316,7 @@
 HSPLandroid/icu/impl/FormattedStringBuilder;->fieldAt(I)Ljava/lang/Object;
 HSPLandroid/icu/impl/FormattedStringBuilder;->getCapacity()I
 HSPLandroid/icu/impl/FormattedStringBuilder;->insert(ILjava/lang/CharSequence;IILjava/lang/Object;)I
-HSPLandroid/icu/impl/FormattedStringBuilder;->insert(ILjava/lang/CharSequence;Ljava/lang/Object;)I
+HSPLandroid/icu/impl/FormattedStringBuilder;->insert(ILjava/lang/CharSequence;Ljava/lang/Object;)I+]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/icu/impl/FormattedStringBuilder;Landroid/icu/impl/FormattedStringBuilder;
 HSPLandroid/icu/impl/FormattedStringBuilder;->insert(I[C[Ljava/lang/Object;)I
 HSPLandroid/icu/impl/FormattedStringBuilder;->insertCodePoint(IILjava/lang/Object;)I
 HSPLandroid/icu/impl/FormattedStringBuilder;->length()I
@@ -8318,8 +8327,8 @@
 HSPLandroid/icu/impl/FormattedStringBuilder;->toString()Ljava/lang/String;
 HSPLandroid/icu/impl/FormattedStringBuilder;->unwrapField(Ljava/lang/Object;)Ljava/text/Format$Field;
 HSPLandroid/icu/impl/FormattedValueStringBuilderImpl;->isIntOrGroup(Ljava/lang/Object;)Z
-HSPLandroid/icu/impl/FormattedValueStringBuilderImpl;->nextFieldPosition(Landroid/icu/impl/FormattedStringBuilder;Ljava/text/FieldPosition;)Z
-HSPLandroid/icu/impl/FormattedValueStringBuilderImpl;->nextPosition(Landroid/icu/impl/FormattedStringBuilder;Landroid/icu/text/ConstrainedFieldPosition;Ljava/text/Format$Field;)Z
+HSPLandroid/icu/impl/FormattedValueStringBuilderImpl;->nextFieldPosition(Landroid/icu/impl/FormattedStringBuilder;Ljava/text/FieldPosition;)Z+]Landroid/icu/text/ConstrainedFieldPosition;Landroid/icu/text/ConstrainedFieldPosition;]Ljava/text/FieldPosition;Ljava/text/DontCareFieldPosition;
+HSPLandroid/icu/impl/FormattedValueStringBuilderImpl;->nextPosition(Landroid/icu/impl/FormattedStringBuilder;Landroid/icu/text/ConstrainedFieldPosition;Ljava/text/Format$Field;)Z+]Landroid/icu/text/ConstrainedFieldPosition;Landroid/icu/text/ConstrainedFieldPosition;
 HSPLandroid/icu/impl/Grego;->dayOfWeek(J)I
 HSPLandroid/icu/impl/Grego;->dayToFields(J[I)[I
 HSPLandroid/icu/impl/Grego;->fieldsToDay(III)J
@@ -8362,8 +8371,8 @@
 HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;->fetchSpacingInfo()Landroid/icu/impl/CurrencyData$CurrencySpacingInfo;
 HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;->getFormatInfo(Ljava/lang/String;)Landroid/icu/impl/CurrencyData$CurrencyFormatInfo;
 HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;->getSpacingInfo()Landroid/icu/impl/CurrencyData$CurrencySpacingInfo;
-HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;->getSymbol(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider;->getInstance(Landroid/icu/util/ULocale;Z)Landroid/icu/impl/CurrencyData$CurrencyDisplayInfo;
+HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;->getSymbol(Ljava/lang/String;)Ljava/lang/String;+]Landroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;Landroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;
+HSPLandroid/icu/impl/ICUCurrencyDisplayInfoProvider;->getInstance(Landroid/icu/util/ULocale;Z)Landroid/icu/impl/CurrencyData$CurrencyDisplayInfo;+]Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;
 HSPLandroid/icu/impl/ICUCurrencyMetaInfo$CurrencyCollector;-><init>()V
 HSPLandroid/icu/impl/ICUCurrencyMetaInfo$CurrencyCollector;-><init>(Landroid/icu/impl/ICUCurrencyMetaInfo$CurrencyCollector-IA;)V
 HSPLandroid/icu/impl/ICUCurrencyMetaInfo$CurrencyCollector;->collect(Ljava/lang/String;Ljava/lang/String;JJIZ)V
@@ -8375,7 +8384,7 @@
 HSPLandroid/icu/impl/ICUCurrencyMetaInfo$UniqueList;->create()Landroid/icu/impl/ICUCurrencyMetaInfo$UniqueList;
 HSPLandroid/icu/impl/ICUCurrencyMetaInfo$UniqueList;->list()Ljava/util/List;
 HSPLandroid/icu/impl/ICUCurrencyMetaInfo;->collect(Landroid/icu/impl/ICUCurrencyMetaInfo$Collector;Landroid/icu/text/CurrencyMetaInfo$CurrencyFilter;)Ljava/util/List;
-HSPLandroid/icu/impl/ICUCurrencyMetaInfo;->collectRegion(Landroid/icu/impl/ICUCurrencyMetaInfo$Collector;Landroid/icu/text/CurrencyMetaInfo$CurrencyFilter;ILandroid/icu/impl/ICUResourceBundle;)V
+HSPLandroid/icu/impl/ICUCurrencyMetaInfo;->collectRegion(Landroid/icu/impl/ICUCurrencyMetaInfo$Collector;Landroid/icu/text/CurrencyMetaInfo$CurrencyFilter;ILandroid/icu/impl/ICUResourceBundle;)V+]Landroid/icu/impl/ICUResourceBundle;Landroid/icu/impl/ICUResourceBundleImpl$ResourceString;,Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;,Landroid/icu/impl/ICUResourceBundleImpl$ResourceArray;]Landroid/icu/impl/ICUCurrencyMetaInfo$Collector;Landroid/icu/impl/ICUCurrencyMetaInfo$CurrencyCollector;
 HSPLandroid/icu/impl/ICUCurrencyMetaInfo;->currencies(Landroid/icu/text/CurrencyMetaInfo$CurrencyFilter;)Ljava/util/List;
 HSPLandroid/icu/impl/ICUCurrencyMetaInfo;->currencyDigits(Ljava/lang/String;Landroid/icu/util/Currency$CurrencyUsage;)Landroid/icu/text/CurrencyMetaInfo$CurrencyDigits;
 HSPLandroid/icu/impl/ICUCurrencyMetaInfo;->getDate(Landroid/icu/impl/ICUResourceBundle;JZ)J
@@ -8428,7 +8437,7 @@
 HSPLandroid/icu/impl/ICUResourceBundle;->findResourceWithFallback(Ljava/lang/String;Landroid/icu/util/UResourceBundle;Landroid/icu/util/UResourceBundle;)Landroid/icu/impl/ICUResourceBundle;
 HSPLandroid/icu/impl/ICUResourceBundle;->findResourceWithFallback([Ljava/lang/String;ILandroid/icu/impl/ICUResourceBundle;Landroid/icu/util/UResourceBundle;)Landroid/icu/impl/ICUResourceBundle;
 HSPLandroid/icu/impl/ICUResourceBundle;->findStringWithFallback(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/icu/impl/ICUResourceBundle;->findStringWithFallback(Ljava/lang/String;Landroid/icu/util/UResourceBundle;Landroid/icu/util/UResourceBundle;)Ljava/lang/String;
+HSPLandroid/icu/impl/ICUResourceBundle;->findStringWithFallback(Ljava/lang/String;Landroid/icu/util/UResourceBundle;Landroid/icu/util/UResourceBundle;)Ljava/lang/String;+]Landroid/icu/impl/ICUResourceBundleReader$Container;Landroid/icu/impl/ICUResourceBundleReader$Table;,Landroid/icu/impl/ICUResourceBundleReader$Table1632;,Landroid/icu/impl/ICUResourceBundleReader$Table16;]Landroid/icu/impl/ICUResourceBundle;Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;]Landroid/icu/impl/ICUResourceBundleReader;Landroid/icu/impl/ICUResourceBundleReader;
 HSPLandroid/icu/impl/ICUResourceBundle;->findTopLevel(Ljava/lang/String;)Landroid/icu/impl/ICUResourceBundle;
 HSPLandroid/icu/impl/ICUResourceBundle;->findTopLevel(Ljava/lang/String;)Landroid/icu/util/UResourceBundle;
 HSPLandroid/icu/impl/ICUResourceBundle;->findWithFallback(Ljava/lang/String;)Landroid/icu/impl/ICUResourceBundle;
@@ -8443,7 +8452,7 @@
 HSPLandroid/icu/impl/ICUResourceBundle;->getBaseName()Ljava/lang/String;
 HSPLandroid/icu/impl/ICUResourceBundle;->getBundle(Landroid/icu/impl/ICUResourceBundleReader;Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)Landroid/icu/impl/ICUResourceBundle;
 HSPLandroid/icu/impl/ICUResourceBundle;->getBundleInstance(Ljava/lang/String;Landroid/icu/util/ULocale;Landroid/icu/impl/ICUResourceBundle$OpenType;)Landroid/icu/impl/ICUResourceBundle;
-HSPLandroid/icu/impl/ICUResourceBundle;->getBundleInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Landroid/icu/impl/ICUResourceBundle$OpenType;)Landroid/icu/impl/ICUResourceBundle;
+HSPLandroid/icu/impl/ICUResourceBundle;->getBundleInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Landroid/icu/impl/ICUResourceBundle$OpenType;)Landroid/icu/impl/ICUResourceBundle;+]Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;
 HSPLandroid/icu/impl/ICUResourceBundle;->getBundleInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Z)Landroid/icu/impl/ICUResourceBundle;
 HSPLandroid/icu/impl/ICUResourceBundle;->getFullLocaleNameSet(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/util/Set;
 HSPLandroid/icu/impl/ICUResourceBundle;->getKey()Ljava/lang/String;
@@ -8453,12 +8462,12 @@
 HSPLandroid/icu/impl/ICUResourceBundle;->getParent()Landroid/icu/impl/ICUResourceBundle;
 HSPLandroid/icu/impl/ICUResourceBundle;->getParent()Landroid/icu/util/UResourceBundle;
 HSPLandroid/icu/impl/ICUResourceBundle;->getResDepth()I
-HSPLandroid/icu/impl/ICUResourceBundle;->getResPathKeys(Ljava/lang/String;I[Ljava/lang/String;I)V
+HSPLandroid/icu/impl/ICUResourceBundle;->getResPathKeys(Ljava/lang/String;I[Ljava/lang/String;I)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/icu/impl/ICUResourceBundle;->getResPathKeys([Ljava/lang/String;I)V
 HSPLandroid/icu/impl/ICUResourceBundle;->getStringWithFallback(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/icu/impl/ICUResourceBundle;->getULocale()Landroid/icu/util/ULocale;
 HSPLandroid/icu/impl/ICUResourceBundle;->getWithFallback(Ljava/lang/String;)Landroid/icu/impl/ICUResourceBundle;
-HSPLandroid/icu/impl/ICUResourceBundle;->instantiateBundle(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Landroid/icu/impl/ICUResourceBundle$OpenType;)Landroid/icu/impl/ICUResourceBundle;
+HSPLandroid/icu/impl/ICUResourceBundle;->instantiateBundle(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Landroid/icu/impl/ICUResourceBundle$OpenType;)Landroid/icu/impl/ICUResourceBundle;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/impl/ICUResourceBundle$OpenType;Landroid/icu/impl/ICUResourceBundle$OpenType;]Landroid/icu/impl/CacheBase;Landroid/icu/impl/ICUResourceBundle$1;
 HSPLandroid/icu/impl/ICUResourceBundle;->setParent(Ljava/util/ResourceBundle;)V
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceArray;-><init>(Landroid/icu/impl/ICUResourceBundleImpl;Ljava/lang/String;I)V
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceArray;->getStringArray()[Ljava/lang/String;
@@ -8470,7 +8479,7 @@
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceContainer;-><init>(Landroid/icu/impl/ICUResourceBundle$WholeBundle;)V
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceContainer;-><init>(Landroid/icu/impl/ICUResourceBundleImpl;Ljava/lang/String;I)V
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceContainer;->createBundleObject(ILjava/lang/String;Ljava/util/HashMap;Landroid/icu/util/UResourceBundle;)Landroid/icu/util/UResourceBundle;
-HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceContainer;->getContainerResource(I)I
+HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceContainer;->getContainerResource(I)I+]Landroid/icu/impl/ICUResourceBundleReader$Container;Landroid/icu/impl/ICUResourceBundleReader$Table1632;,Landroid/icu/impl/ICUResourceBundleReader$Table16;,Landroid/icu/impl/ICUResourceBundleReader$Array32;
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceContainer;->getSize()I
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceContainer;->getString(I)Ljava/lang/String;
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceInt;-><init>(Landroid/icu/impl/ICUResourceBundleImpl;Ljava/lang/String;I)V
@@ -8485,8 +8494,8 @@
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;->findString(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;->getType()I
 HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;->handleGet(ILjava/util/HashMap;Landroid/icu/util/UResourceBundle;)Landroid/icu/util/UResourceBundle;
-HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;->handleGet(Ljava/lang/String;Ljava/util/HashMap;Landroid/icu/util/UResourceBundle;)Landroid/icu/util/UResourceBundle;
-HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;->handleGetObject(Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;->handleGet(Ljava/lang/String;Ljava/util/HashMap;Landroid/icu/util/UResourceBundle;)Landroid/icu/util/UResourceBundle;+]Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;]Landroid/icu/impl/ICUResourceBundleReader$Table;Landroid/icu/impl/ICUResourceBundleReader$Table1632;,Landroid/icu/impl/ICUResourceBundleReader$Table16;
+HSPLandroid/icu/impl/ICUResourceBundleImpl$ResourceTable;->handleGetObject(Ljava/lang/String;)Ljava/lang/Object;+]Landroid/icu/impl/ICUResourceBundleReader$Container;Landroid/icu/impl/ICUResourceBundleReader$Table16;]Landroid/icu/impl/ICUResourceBundleReader;Landroid/icu/impl/ICUResourceBundleReader;]Landroid/icu/impl/ICUResourceBundleReader$Table;Landroid/icu/impl/ICUResourceBundleReader$Table16;
 HSPLandroid/icu/impl/ICUResourceBundleImpl;-><init>(Landroid/icu/impl/ICUResourceBundle$WholeBundle;)V
 HSPLandroid/icu/impl/ICUResourceBundleImpl;-><init>(Landroid/icu/impl/ICUResourceBundleImpl;Ljava/lang/String;I)V
 HSPLandroid/icu/impl/ICUResourceBundleImpl;->createBundleObject(Ljava/lang/String;ILjava/util/HashMap;Landroid/icu/util/UResourceBundle;)Landroid/icu/impl/ICUResourceBundle;
@@ -8498,7 +8507,7 @@
 HSPLandroid/icu/impl/ICUResourceBundleReader$Array;-><init>()V
 HSPLandroid/icu/impl/ICUResourceBundleReader$Array;->getValue(ILandroid/icu/impl/UResource$Value;)Z
 HSPLandroid/icu/impl/ICUResourceBundleReader$Container;-><init>()V
-HSPLandroid/icu/impl/ICUResourceBundleReader$Container;->getContainer16Resource(Landroid/icu/impl/ICUResourceBundleReader;I)I
+HSPLandroid/icu/impl/ICUResourceBundleReader$Container;->getContainer16Resource(Landroid/icu/impl/ICUResourceBundleReader;I)I+]Ljava/nio/CharBuffer;Ljava/nio/ByteBufferAsCharBuffer;
 HSPLandroid/icu/impl/ICUResourceBundleReader$Container;->getContainer32Resource(Landroid/icu/impl/ICUResourceBundleReader;I)I
 HSPLandroid/icu/impl/ICUResourceBundleReader$Container;->getContainerResource(Landroid/icu/impl/ICUResourceBundleReader;I)I
 HSPLandroid/icu/impl/ICUResourceBundleReader$Container;->getSize()I
@@ -8516,23 +8525,23 @@
 HSPLandroid/icu/impl/ICUResourceBundleReader$ReaderValue;->getStringArray(Landroid/icu/impl/ICUResourceBundleReader$Array;)[Ljava/lang/String;
 HSPLandroid/icu/impl/ICUResourceBundleReader$ReaderValue;->getTable()Landroid/icu/impl/UResource$Table;
 HSPLandroid/icu/impl/ICUResourceBundleReader$ReaderValue;->getType()I
-HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache$Level;->get(I)Ljava/lang/Object;
+HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache$Level;->get(I)Ljava/lang/Object;+]Landroid/icu/impl/ICUResourceBundleReader$ResourceCache$Level;Landroid/icu/impl/ICUResourceBundleReader$ResourceCache$Level;
 HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache$Level;->putIfAbsent(ILjava/lang/Object;I)Ljava/lang/Object;
 HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;-><init>(I)V
 HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;->findSimple(I)I
-HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;->get(I)Ljava/lang/Object;
+HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;->get(I)Ljava/lang/Object;+]Landroid/icu/impl/ICUResourceBundleReader$ResourceCache$Level;Landroid/icu/impl/ICUResourceBundleReader$ResourceCache$Level;]Ljava/lang/ref/SoftReference;Ljava/lang/ref/SoftReference;
 HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;->makeKey(I)I
 HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;->putIfAbsent(ILjava/lang/Object;I)Ljava/lang/Object;
 HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;->putIfCleared([Ljava/lang/Object;ILjava/lang/Object;I)Ljava/lang/Object;
 HSPLandroid/icu/impl/ICUResourceBundleReader$ResourceCache;->storeDirectly(I)Z
 HSPLandroid/icu/impl/ICUResourceBundleReader$Table1632;-><init>(Landroid/icu/impl/ICUResourceBundleReader;I)V
-HSPLandroid/icu/impl/ICUResourceBundleReader$Table1632;->getContainerResource(Landroid/icu/impl/ICUResourceBundleReader;I)I
+HSPLandroid/icu/impl/ICUResourceBundleReader$Table1632;->getContainerResource(Landroid/icu/impl/ICUResourceBundleReader;I)I+]Landroid/icu/impl/ICUResourceBundleReader$Table1632;Landroid/icu/impl/ICUResourceBundleReader$Table1632;
 HSPLandroid/icu/impl/ICUResourceBundleReader$Table16;->getContainerResource(Landroid/icu/impl/ICUResourceBundleReader;I)I
 HSPLandroid/icu/impl/ICUResourceBundleReader$Table;->findTableItem(Landroid/icu/impl/ICUResourceBundleReader;Ljava/lang/CharSequence;)I
 HSPLandroid/icu/impl/ICUResourceBundleReader$Table;->findValue(Ljava/lang/CharSequence;Landroid/icu/impl/UResource$Value;)Z
 HSPLandroid/icu/impl/ICUResourceBundleReader$Table;->getKey(Landroid/icu/impl/ICUResourceBundleReader;I)Ljava/lang/String;
-HSPLandroid/icu/impl/ICUResourceBundleReader$Table;->getKeyAndValue(ILandroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;)Z
-HSPLandroid/icu/impl/ICUResourceBundleReader$Table;->getResource(Landroid/icu/impl/ICUResourceBundleReader;Ljava/lang/String;)I
+HSPLandroid/icu/impl/ICUResourceBundleReader$Table;->getKeyAndValue(ILandroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;)Z+]Landroid/icu/impl/ICUResourceBundleReader$Table;Landroid/icu/impl/ICUResourceBundleReader$Table16;,Landroid/icu/impl/ICUResourceBundleReader$Table1632;
+HSPLandroid/icu/impl/ICUResourceBundleReader$Table;->getResource(Landroid/icu/impl/ICUResourceBundleReader;Ljava/lang/String;)I+]Landroid/icu/impl/ICUResourceBundleReader$Table;Landroid/icu/impl/ICUResourceBundleReader$Table;,Landroid/icu/impl/ICUResourceBundleReader$Table16;,Landroid/icu/impl/ICUResourceBundleReader$Table1632;
 HSPLandroid/icu/impl/ICUResourceBundleReader;->-$$Nest$fgetb16BitUnits(Landroid/icu/impl/ICUResourceBundleReader;)Ljava/nio/CharBuffer;
 HSPLandroid/icu/impl/ICUResourceBundleReader;->-$$Nest$fgetpoolStringIndex16Limit(Landroid/icu/impl/ICUResourceBundleReader;)I
 HSPLandroid/icu/impl/ICUResourceBundleReader;->-$$Nest$fgetpoolStringIndexLimit(Landroid/icu/impl/ICUResourceBundleReader;)I
@@ -8554,9 +8563,9 @@
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getArray(I)Landroid/icu/impl/ICUResourceBundleReader$Array;
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getBinary(I[B)[B
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getChars(II)[C
-HSPLandroid/icu/impl/ICUResourceBundleReader;->getFullName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getFullName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getIndexesInt(I)I
-HSPLandroid/icu/impl/ICUResourceBundleReader;->getInt(I)I
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getInt(I)I+]Ljava/nio/ByteBuffer;Ljava/nio/DirectByteBuffer;
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getIntVector(I)[I
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getInts(II)[I
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getKey16String(I)Ljava/lang/String;
@@ -8564,9 +8573,9 @@
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getReader(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)Landroid/icu/impl/ICUResourceBundleReader;
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getResourceByteOffset(I)I
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getRootResource()I
-HSPLandroid/icu/impl/ICUResourceBundleReader;->getString(I)Ljava/lang/String;
-HSPLandroid/icu/impl/ICUResourceBundleReader;->getStringV2(I)Ljava/lang/String;
-HSPLandroid/icu/impl/ICUResourceBundleReader;->getTable(I)Landroid/icu/impl/ICUResourceBundleReader$Table;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getString(I)Ljava/lang/String;+]Landroid/icu/impl/ICUResourceBundleReader;Landroid/icu/impl/ICUResourceBundleReader;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getStringV2(I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/impl/ICUResourceBundleReader$ResourceCache;Landroid/icu/impl/ICUResourceBundleReader$ResourceCache;]Ljava/nio/CharBuffer;Ljava/nio/ByteBufferAsCharBuffer;]Ljava/lang/CharSequence;Ljava/nio/ByteBufferAsCharBuffer;
+HSPLandroid/icu/impl/ICUResourceBundleReader;->getTable(I)Landroid/icu/impl/ICUResourceBundleReader$Table;+]Landroid/icu/impl/ICUResourceBundleReader$ResourceCache;Landroid/icu/impl/ICUResourceBundleReader$ResourceCache;]Landroid/icu/impl/ICUResourceBundleReader$Table;Landroid/icu/impl/ICUResourceBundleReader$Table16;,Landroid/icu/impl/ICUResourceBundleReader$Table1632;
 HSPLandroid/icu/impl/ICUResourceBundleReader;->getTable16KeyOffsets(I)[C
 HSPLandroid/icu/impl/ICUResourceBundleReader;->init(Ljava/nio/ByteBuffer;)V
 HSPLandroid/icu/impl/ICUResourceBundleReader;->makeKeyStringFromBytes([BI)Ljava/lang/String;
@@ -8578,8 +8587,8 @@
 HSPLandroid/icu/impl/ICUService;->getKey(Landroid/icu/impl/ICUService$Key;[Ljava/lang/String;)Ljava/lang/Object;
 HSPLandroid/icu/impl/ICUService;->getKey(Landroid/icu/impl/ICUService$Key;[Ljava/lang/String;Landroid/icu/impl/ICUService$Factory;)Ljava/lang/Object;
 HSPLandroid/icu/impl/ICUService;->isDefault()Z
-HSPLandroid/icu/impl/IDNA2003;->convertIDNToASCII(Ljava/lang/String;I)Ljava/lang/StringBuffer;
-HSPLandroid/icu/impl/IDNA2003;->convertToASCII(Landroid/icu/text/UCharacterIterator;I)Ljava/lang/StringBuffer;
+HSPLandroid/icu/impl/IDNA2003;->convertIDNToASCII(Ljava/lang/String;I)Ljava/lang/StringBuffer;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;
+HSPLandroid/icu/impl/IDNA2003;->convertToASCII(Landroid/icu/text/UCharacterIterator;I)Ljava/lang/StringBuffer;+]Landroid/icu/text/UCharacterIterator;Landroid/icu/impl/ReplaceableUCharacterIterator;]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;
 HSPLandroid/icu/impl/IDNA2003;->getSeparatorIndex([CII)I
 HSPLandroid/icu/impl/IDNA2003;->isLDHChar(I)Z
 HSPLandroid/icu/impl/IDNA2003;->isLabelSeparator(I)Z
@@ -8587,9 +8596,9 @@
 HSPLandroid/icu/impl/LocaleIDParser$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLandroid/icu/impl/LocaleIDParser$1;->compare(Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/icu/impl/LocaleIDParser;-><init>(Ljava/lang/String;)V
-HSPLandroid/icu/impl/LocaleIDParser;-><init>(Ljava/lang/String;Z)V
+HSPLandroid/icu/impl/LocaleIDParser;-><init>(Ljava/lang/String;Z)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/icu/impl/LocaleIDParser;->addSeparator()V
-HSPLandroid/icu/impl/LocaleIDParser;->append(C)V
+HSPLandroid/icu/impl/LocaleIDParser;->append(C)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/icu/impl/LocaleIDParser;->append(Ljava/lang/String;)V
 HSPLandroid/icu/impl/LocaleIDParser;->atTerminator()Z
 HSPLandroid/icu/impl/LocaleIDParser;->getBaseName()Ljava/lang/String;
@@ -8598,11 +8607,11 @@
 HSPLandroid/icu/impl/LocaleIDParser;->getKeyword()Ljava/lang/String;
 HSPLandroid/icu/impl/LocaleIDParser;->getKeywordMap()Ljava/util/Map;
 HSPLandroid/icu/impl/LocaleIDParser;->getKeywordValue(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/icu/impl/LocaleIDParser;->getKeywords()Ljava/util/Iterator;
+HSPLandroid/icu/impl/LocaleIDParser;->getKeywords()Ljava/util/Iterator;+]Landroid/icu/impl/LocaleIDParser;Landroid/icu/impl/LocaleIDParser;]Ljava/util/Map;Ljava/util/Collections$EmptyMap;
 HSPLandroid/icu/impl/LocaleIDParser;->getLanguage()Ljava/lang/String;
 HSPLandroid/icu/impl/LocaleIDParser;->getName()Ljava/lang/String;
 HSPLandroid/icu/impl/LocaleIDParser;->getScript()Ljava/lang/String;
-HSPLandroid/icu/impl/LocaleIDParser;->getString(I)Ljava/lang/String;
+HSPLandroid/icu/impl/LocaleIDParser;->getString(I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/icu/impl/LocaleIDParser;->getValue()Ljava/lang/String;
 HSPLandroid/icu/impl/LocaleIDParser;->getVariant()Ljava/lang/String;
 HSPLandroid/icu/impl/LocaleIDParser;->haveExperimentalLanguagePrefix()Z
@@ -8613,11 +8622,11 @@
 HSPLandroid/icu/impl/LocaleIDParser;->isTerminatorOrIDSeparator(C)Z
 HSPLandroid/icu/impl/LocaleIDParser;->next()C
 HSPLandroid/icu/impl/LocaleIDParser;->parseBaseName()V
-HSPLandroid/icu/impl/LocaleIDParser;->parseCountry()I
+HSPLandroid/icu/impl/LocaleIDParser;->parseCountry()I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/icu/impl/LocaleIDParser;->parseKeywords()I
-HSPLandroid/icu/impl/LocaleIDParser;->parseLanguage()I
-HSPLandroid/icu/impl/LocaleIDParser;->parseScript()I
-HSPLandroid/icu/impl/LocaleIDParser;->parseVariant()I
+HSPLandroid/icu/impl/LocaleIDParser;->parseLanguage()I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLandroid/icu/impl/LocaleIDParser;->parseScript()I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLandroid/icu/impl/LocaleIDParser;->parseVariant()I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/icu/impl/LocaleIDParser;->reset()V
 HSPLandroid/icu/impl/LocaleIDParser;->setKeywordValue(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/icu/impl/LocaleIDParser;->setKeywordValue(Ljava/lang/String;Ljava/lang/String;Z)V
@@ -8628,11 +8637,11 @@
 HSPLandroid/icu/impl/LocaleIDParser;->skipUntilTerminatorOrIDSeparator()V
 HSPLandroid/icu/impl/Norm2AllModes$ComposeNormalizer2;->spanQuickCheckYes(Ljava/lang/CharSequence;)I+]Landroid/icu/impl/Normalizer2Impl;Landroid/icu/impl/Normalizer2Impl;]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/icu/impl/Norm2AllModes$DecomposeNormalizer2;->normalizeAndAppend(Ljava/lang/CharSequence;ZLandroid/icu/impl/Normalizer2Impl$ReorderingBuffer;)V
-HSPLandroid/icu/impl/Norm2AllModes$DecomposeNormalizer2;->spanQuickCheckYes(Ljava/lang/CharSequence;)I
+HSPLandroid/icu/impl/Norm2AllModes$DecomposeNormalizer2;->spanQuickCheckYes(Ljava/lang/CharSequence;)I+]Landroid/icu/impl/Normalizer2Impl;Landroid/icu/impl/Normalizer2Impl;]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/icu/impl/Norm2AllModes$NFKCSingleton;->-$$Nest$sfgetINSTANCE()Landroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;
 HSPLandroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;->-$$Nest$fgetallModes(Landroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;)Landroid/icu/impl/Norm2AllModes;
 HSPLandroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;->-$$Nest$fgetexception(Landroid/icu/impl/Norm2AllModes$Norm2AllModesSingleton;)Ljava/lang/RuntimeException;
-HSPLandroid/icu/impl/Norm2AllModes$Normalizer2WithImpl;->normalize(Ljava/lang/CharSequence;Ljava/lang/StringBuilder;)Ljava/lang/StringBuilder;
+HSPLandroid/icu/impl/Norm2AllModes$Normalizer2WithImpl;->normalize(Ljava/lang/CharSequence;Ljava/lang/StringBuilder;)Ljava/lang/StringBuilder;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/impl/Norm2AllModes$Normalizer2WithImpl;Landroid/icu/impl/Norm2AllModes$DecomposeNormalizer2;,Landroid/icu/impl/Norm2AllModes$ComposeNormalizer2;]Ljava/lang/CharSequence;Ljava/lang/StringBuilder;
 HSPLandroid/icu/impl/Norm2AllModes$Normalizer2WithImpl;->normalizeSecondAndAppend(Ljava/lang/StringBuilder;Ljava/lang/CharSequence;)Ljava/lang/StringBuilder;
 HSPLandroid/icu/impl/Norm2AllModes$Normalizer2WithImpl;->normalizeSecondAndAppend(Ljava/lang/StringBuilder;Ljava/lang/CharSequence;Z)Ljava/lang/StringBuilder;
 HSPLandroid/icu/impl/Norm2AllModes;->getFCDNormalizer2()Landroid/icu/text/Normalizer2;
@@ -8645,7 +8654,7 @@
 HSPLandroid/icu/impl/Normalizer2Impl;->addToStartSet(Landroid/icu/util/MutableCodePointTrie;II)V
 HSPLandroid/icu/impl/Normalizer2Impl;->composeQuickCheck(Ljava/lang/CharSequence;IIZZ)I+]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/icu/util/CodePointTrie$Fast16;Landroid/icu/util/CodePointTrie$Fast16;
 HSPLandroid/icu/impl/Normalizer2Impl;->decompose(IILandroid/icu/impl/Normalizer2Impl$ReorderingBuffer;)V
-HSPLandroid/icu/impl/Normalizer2Impl;->decompose(Ljava/lang/CharSequence;IILandroid/icu/impl/Normalizer2Impl$ReorderingBuffer;)I
+HSPLandroid/icu/impl/Normalizer2Impl;->decompose(Ljava/lang/CharSequence;IILandroid/icu/impl/Normalizer2Impl$ReorderingBuffer;)I+]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/icu/impl/Normalizer2Impl;->decomposeAndAppend(Ljava/lang/CharSequence;ZLandroid/icu/impl/Normalizer2Impl$ReorderingBuffer;)V
 HSPLandroid/icu/impl/Normalizer2Impl;->ensureCanonIterData()Landroid/icu/impl/Normalizer2Impl;
 HSPLandroid/icu/impl/Normalizer2Impl;->getRawNorm16(I)I
@@ -8659,7 +8668,7 @@
 HSPLandroid/icu/impl/Normalizer2Impl;->mapAlgorithmic(II)I
 HSPLandroid/icu/impl/OlsonTimeZone;-><init>(Landroid/icu/util/UResourceBundle;Landroid/icu/util/UResourceBundle;Ljava/lang/String;)V
 HSPLandroid/icu/impl/OlsonTimeZone;->clone()Ljava/lang/Object;
-HSPLandroid/icu/impl/OlsonTimeZone;->cloneAsThawed()Landroid/icu/util/TimeZone;
+HSPLandroid/icu/impl/OlsonTimeZone;->cloneAsThawed()Landroid/icu/util/TimeZone;+]Landroid/icu/util/SimpleTimeZone;Landroid/icu/util/SimpleTimeZone;
 HSPLandroid/icu/impl/OlsonTimeZone;->construct(Landroid/icu/util/UResourceBundle;Landroid/icu/util/UResourceBundle;Ljava/lang/String;)V
 HSPLandroid/icu/impl/OlsonTimeZone;->equals(Ljava/lang/Object;)Z
 HSPLandroid/icu/impl/OlsonTimeZone;->freeze()Landroid/icu/util/TimeZone;
@@ -8667,7 +8676,7 @@
 HSPLandroid/icu/impl/OlsonTimeZone;->getHistoricalOffset(JZII[I)V
 HSPLandroid/icu/impl/OlsonTimeZone;->getInt(B)I
 HSPLandroid/icu/impl/OlsonTimeZone;->getNextTransition(JZ)Landroid/icu/util/TimeZoneTransition;
-HSPLandroid/icu/impl/OlsonTimeZone;->getOffset(JZ[I)V
+HSPLandroid/icu/impl/OlsonTimeZone;->getOffset(JZ[I)V+]Landroid/icu/util/SimpleTimeZone;Landroid/icu/util/SimpleTimeZone;
 HSPLandroid/icu/impl/OlsonTimeZone;->getTimeZoneRules()[Landroid/icu/util/TimeZoneRule;
 HSPLandroid/icu/impl/OlsonTimeZone;->hashCode()I+]Landroid/icu/util/SimpleTimeZone;Landroid/icu/util/SimpleTimeZone;
 HSPLandroid/icu/impl/OlsonTimeZone;->initTransitionRules()V
@@ -8700,7 +8709,7 @@
 HSPLandroid/icu/impl/ReplaceableUCharacterIterator;-><init>(Ljava/lang/String;)V
 HSPLandroid/icu/impl/ReplaceableUCharacterIterator;->getLength()I
 HSPLandroid/icu/impl/ReplaceableUCharacterIterator;->getText([CI)I
-HSPLandroid/icu/impl/ReplaceableUCharacterIterator;->next()I
+HSPLandroid/icu/impl/ReplaceableUCharacterIterator;->next()I+]Landroid/icu/text/Replaceable;Landroid/icu/text/ReplaceableString;
 HSPLandroid/icu/impl/ReplaceableUCharacterIterator;->setIndex(I)V
 HSPLandroid/icu/impl/RuleCharacterIterator;->_advance(I)V
 HSPLandroid/icu/impl/RuleCharacterIterator;->_current()I
@@ -8717,7 +8726,7 @@
 HSPLandroid/icu/impl/SimpleFormatterImpl;->formatPrefixSuffix(Ljava/lang/String;Ljava/text/Format$Field;IILandroid/icu/impl/FormattedStringBuilder;)I
 HSPLandroid/icu/impl/SimpleFormatterImpl;->formatRawPattern(Ljava/lang/String;II[Ljava/lang/CharSequence;)Ljava/lang/String;
 HSPLandroid/icu/impl/SimpleFormatterImpl;->getArgumentLimit(Ljava/lang/String;)I
-HSPLandroid/icu/impl/SoftCache;->getInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/icu/impl/SoftCache;->getInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;]Landroid/icu/impl/CacheValue;Landroid/icu/impl/CacheValue$SoftValue;]Landroid/icu/impl/SoftCache;megamorphic_types
 HSPLandroid/icu/impl/StandardPlural;->fromString(Ljava/lang/CharSequence;)Landroid/icu/impl/StandardPlural;
 HSPLandroid/icu/impl/StandardPlural;->orNullFromString(Ljava/lang/CharSequence;)Landroid/icu/impl/StandardPlural;
 HSPLandroid/icu/impl/StandardPlural;->orOtherFromString(Ljava/lang/CharSequence;)Landroid/icu/impl/StandardPlural;
@@ -8750,7 +8759,7 @@
 HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNames;->createMetaZoneAndPutInCache(Ljava/util/Map;[Ljava/lang/String;Ljava/lang/String;)Landroid/icu/impl/TimeZoneNamesImpl$ZNames;
 HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNames;->createTimeZoneAndPutInCache(Ljava/util/Map;[Ljava/lang/String;Ljava/lang/String;)Landroid/icu/impl/TimeZoneNamesImpl$ZNames;
 HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNames;->getName(Landroid/icu/text/TimeZoneNames$NameType;)Ljava/lang/String;
-HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNames;->getNameTypeIndex(Landroid/icu/text/TimeZoneNames$NameType;)I
+HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNames;->getNameTypeIndex(Landroid/icu/text/TimeZoneNames$NameType;)I+]Landroid/icu/text/TimeZoneNames$NameType;Landroid/icu/text/TimeZoneNames$NameType;]Landroid/icu/impl/TimeZoneNamesImpl$ZNames$NameTypeIndex;Landroid/icu/impl/TimeZoneNamesImpl$ZNames$NameTypeIndex;
 HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;->-$$Nest$mgetNames(Landroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;)[Ljava/lang/String;
 HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;-><init>()V
 HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;-><init>(Landroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader-IA;)V
@@ -8763,10 +8772,10 @@
 HSPLandroid/icu/impl/TimeZoneNamesImpl$ZNamesLoader;->setNameIfEmpty(Landroid/icu/impl/UResource$Key;Landroid/icu/impl/UResource$Value;)V
 HSPLandroid/icu/impl/TimeZoneNamesImpl;-><init>(Landroid/icu/util/ULocale;)V
 HSPLandroid/icu/impl/TimeZoneNamesImpl;->_getAvailableMetaZoneIDs(Ljava/lang/String;)Ljava/util/Set;
-HSPLandroid/icu/impl/TimeZoneNamesImpl;->_getMetaZoneID(Ljava/lang/String;J)Ljava/lang/String;
+HSPLandroid/icu/impl/TimeZoneNamesImpl;->_getMetaZoneID(Ljava/lang/String;J)Ljava/lang/String;+]Landroid/icu/impl/TimeZoneNamesImpl$TZ2MZsCache;Landroid/icu/impl/TimeZoneNamesImpl$TZ2MZsCache;]Landroid/icu/impl/TimeZoneNamesImpl$MZMapEntry;Landroid/icu/impl/TimeZoneNamesImpl$MZMapEntry;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLandroid/icu/impl/TimeZoneNamesImpl;->getAvailableMetaZoneIDs(Ljava/lang/String;)Ljava/util/Set;
 HSPLandroid/icu/impl/TimeZoneNamesImpl;->getDefaultExemplarLocationName(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/icu/impl/TimeZoneNamesImpl;->getMetaZoneDisplayName(Ljava/lang/String;Landroid/icu/text/TimeZoneNames$NameType;)Ljava/lang/String;
+HSPLandroid/icu/impl/TimeZoneNamesImpl;->getMetaZoneDisplayName(Ljava/lang/String;Landroid/icu/text/TimeZoneNames$NameType;)Ljava/lang/String;+]Landroid/icu/impl/TimeZoneNamesImpl$ZNames;Landroid/icu/impl/TimeZoneNamesImpl$ZNames;
 HSPLandroid/icu/impl/TimeZoneNamesImpl;->getMetaZoneID(Ljava/lang/String;J)Ljava/lang/String;
 HSPLandroid/icu/impl/TimeZoneNamesImpl;->getTimeZoneDisplayName(Ljava/lang/String;Landroid/icu/text/TimeZoneNames$NameType;)Ljava/lang/String;
 HSPLandroid/icu/impl/TimeZoneNamesImpl;->initialize(Landroid/icu/util/ULocale;)V
@@ -8790,7 +8799,7 @@
 HSPLandroid/icu/impl/Trie2_16;->get(I)I
 HSPLandroid/icu/impl/Trie2_32;->get(I)I
 HSPLandroid/icu/impl/Trie2_32;->getFromU16SingleLead(C)I
-HSPLandroid/icu/impl/UBiDiProps;->getClass(I)I
+HSPLandroid/icu/impl/UBiDiProps;->getClass(I)I+]Landroid/icu/impl/Trie2_16;Landroid/icu/impl/Trie2_16;
 HSPLandroid/icu/impl/UBiDiProps;->getClassFromProps(I)I
 HSPLandroid/icu/impl/UCaseProps;->fold(II)I+]Landroid/icu/impl/Trie2_16;Landroid/icu/impl/Trie2_16;
 HSPLandroid/icu/impl/UCaseProps;->getCaseLocale(Ljava/lang/String;)I
@@ -8800,7 +8809,7 @@
 HSPLandroid/icu/impl/UCaseProps;->propsHasException(I)Z
 HSPLandroid/icu/impl/UCaseProps;->toUpperOrTitle(ILandroid/icu/impl/UCaseProps$ContextIterator;Ljava/lang/Appendable;IZ)I
 HSPLandroid/icu/impl/UCharacterProperty$IntProperty;->getValue(I)I
-HSPLandroid/icu/impl/UCharacterProperty;->digit(I)I
+HSPLandroid/icu/impl/UCharacterProperty;->digit(I)I+]Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;
 HSPLandroid/icu/impl/UCharacterProperty;->getIntPropertyValue(II)I
 HSPLandroid/icu/impl/UCharacterProperty;->getNumericTypeValue(I)I
 HSPLandroid/icu/impl/UCharacterProperty;->getProperty(I)I+]Landroid/icu/impl/Trie2_16;Landroid/icu/impl/Trie2_16;
@@ -8834,7 +8843,7 @@
 HSPLandroid/icu/impl/ZoneMeta;->findCLDRCanonicalID(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/icu/impl/ZoneMeta;->getCanonicalCLDRID(Landroid/icu/util/TimeZone;)Ljava/lang/String;
 HSPLandroid/icu/impl/ZoneMeta;->getCanonicalCLDRID(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/icu/impl/ZoneMeta;->getSystemTimeZone(Ljava/lang/String;)Landroid/icu/impl/OlsonTimeZone;
+HSPLandroid/icu/impl/ZoneMeta;->getSystemTimeZone(Ljava/lang/String;)Landroid/icu/impl/OlsonTimeZone;+]Landroid/icu/impl/ZoneMeta$SystemTimeZoneCache;Landroid/icu/impl/ZoneMeta$SystemTimeZoneCache;
 HSPLandroid/icu/impl/ZoneMeta;->getZoneIDs()[Ljava/lang/String;
 HSPLandroid/icu/impl/ZoneMeta;->getZoneIndex(Ljava/lang/String;)I
 HSPLandroid/icu/impl/ZoneMeta;->openOlsonResource(Landroid/icu/util/UResourceBundle;Ljava/lang/String;)Landroid/icu/util/UResourceBundle;
@@ -8959,7 +8968,7 @@
 HSPLandroid/icu/impl/locale/BaseLocale$Key;->normalize(Landroid/icu/impl/locale/BaseLocale$Key;)Landroid/icu/impl/locale/BaseLocale$Key;
 HSPLandroid/icu/impl/locale/BaseLocale;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/icu/impl/locale/BaseLocale;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/icu/impl/locale/BaseLocale-IA;)V
-HSPLandroid/icu/impl/locale/BaseLocale;->getInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/icu/impl/locale/BaseLocale;
+HSPLandroid/icu/impl/locale/BaseLocale;->getInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/icu/impl/locale/BaseLocale;+]Landroid/icu/impl/locale/BaseLocale$Cache;Landroid/icu/impl/locale/BaseLocale$Cache;
 HSPLandroid/icu/impl/locale/BaseLocale;->getLanguage()Ljava/lang/String;
 HSPLandroid/icu/impl/locale/BaseLocale;->getRegion()Ljava/lang/String;
 HSPLandroid/icu/impl/locale/BaseLocale;->getScript()Ljava/lang/String;
@@ -8973,25 +8982,25 @@
 HSPLandroid/icu/impl/locale/LocaleObjectCache$CacheEntry;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V
 HSPLandroid/icu/impl/locale/LocaleObjectCache$CacheEntry;->getKey()Ljava/lang/Object;
 HSPLandroid/icu/impl/locale/LocaleObjectCache;->cleanStaleEntries()V
-HSPLandroid/icu/impl/locale/LocaleObjectCache;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/icu/impl/locale/LocaleObjectCache;->get(Ljava/lang/Object;)Ljava/lang/Object;+]Landroid/icu/impl/locale/LocaleObjectCache$CacheEntry;Landroid/icu/impl/locale/LocaleObjectCache$CacheEntry;]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;]Landroid/icu/impl/locale/LocaleObjectCache;Landroid/icu/impl/locale/BaseLocale$Cache;
 HSPLandroid/icu/impl/number/AdoptingModifierStore$1;-><clinit>()V
 HSPLandroid/icu/impl/number/AdoptingModifierStore;-><init>(Landroid/icu/impl/number/Modifier;Landroid/icu/impl/number/Modifier;Landroid/icu/impl/number/Modifier;Landroid/icu/impl/number/Modifier;)V
 HSPLandroid/icu/impl/number/AdoptingModifierStore;->getModifierWithoutPlural(Landroid/icu/impl/number/Modifier$Signum;)Landroid/icu/impl/number/Modifier;
-HSPLandroid/icu/impl/number/AffixUtils;->containsType(Ljava/lang/CharSequence;I)Z
+HSPLandroid/icu/impl/number/AffixUtils;->containsType(Ljava/lang/CharSequence;I)Z+]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/icu/impl/number/AffixUtils;->escape(Ljava/lang/CharSequence;)Ljava/lang/String;
 HSPLandroid/icu/impl/number/AffixUtils;->getFieldForType(I)Landroid/icu/text/NumberFormat$Field;
 HSPLandroid/icu/impl/number/AffixUtils;->getOffset(J)I
 HSPLandroid/icu/impl/number/AffixUtils;->getState(J)I
 HSPLandroid/icu/impl/number/AffixUtils;->getType(J)I
 HSPLandroid/icu/impl/number/AffixUtils;->getTypeOrCp(J)I
-HSPLandroid/icu/impl/number/AffixUtils;->hasCurrencySymbols(Ljava/lang/CharSequence;)Z
-HSPLandroid/icu/impl/number/AffixUtils;->hasNext(JLjava/lang/CharSequence;)Z
+HSPLandroid/icu/impl/number/AffixUtils;->hasCurrencySymbols(Ljava/lang/CharSequence;)Z+]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLandroid/icu/impl/number/AffixUtils;->hasNext(JLjava/lang/CharSequence;)Z+]Ljava/lang/CharSequence;Ljava/lang/StringBuilder;,Ljava/lang/String;
 HSPLandroid/icu/impl/number/AffixUtils;->iterateWithConsumer(Ljava/lang/CharSequence;Landroid/icu/impl/number/AffixUtils$TokenConsumer;)V
 HSPLandroid/icu/impl/number/AffixUtils;->makeTag(IIII)J
-HSPLandroid/icu/impl/number/AffixUtils;->nextToken(JLjava/lang/CharSequence;)J
+HSPLandroid/icu/impl/number/AffixUtils;->nextToken(JLjava/lang/CharSequence;)J+]Ljava/lang/CharSequence;Ljava/lang/String;,Ljava/lang/StringBuilder;
 HSPLandroid/icu/impl/number/AffixUtils;->unescape(Ljava/lang/CharSequence;Landroid/icu/impl/FormattedStringBuilder;ILandroid/icu/impl/number/AffixUtils$SymbolProvider;Landroid/icu/text/NumberFormat$Field;)I
 HSPLandroid/icu/impl/number/AffixUtils;->unescapedCount(Ljava/lang/CharSequence;ZLandroid/icu/impl/number/AffixUtils$SymbolProvider;)I
-HSPLandroid/icu/impl/number/ConstantAffixModifier;->apply(Landroid/icu/impl/FormattedStringBuilder;II)I
+HSPLandroid/icu/impl/number/ConstantAffixModifier;->apply(Landroid/icu/impl/FormattedStringBuilder;II)I+]Landroid/icu/impl/FormattedStringBuilder;Landroid/icu/impl/FormattedStringBuilder;
 HSPLandroid/icu/impl/number/ConstantMultiFieldModifier;-><init>(Landroid/icu/impl/FormattedStringBuilder;Landroid/icu/impl/FormattedStringBuilder;ZZ)V
 HSPLandroid/icu/impl/number/ConstantMultiFieldModifier;-><init>(Landroid/icu/impl/FormattedStringBuilder;Landroid/icu/impl/FormattedStringBuilder;ZZLandroid/icu/impl/number/Modifier$Parameters;)V
 HSPLandroid/icu/impl/number/ConstantMultiFieldModifier;->apply(Landroid/icu/impl/FormattedStringBuilder;II)I
@@ -9079,11 +9088,11 @@
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->_setToLong(J)V
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->adjustMagnitude(I)V
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->appendDigit(BIZ)V+]Landroid/icu/impl/number/DecimalQuantity_AbstractBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
-HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->applyMaxInteger(I)V
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->applyMaxInteger(I)V+]Landroid/icu/impl/number/DecimalQuantity_AbstractBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->convertToAccurateDouble()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;]Landroid/icu/impl/number/DecimalQuantity_AbstractBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->copyFrom(Landroid/icu/impl/number/DecimalQuantity;)V
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->fitsInLong()Z+]Landroid/icu/impl/number/DecimalQuantity_AbstractBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
-HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->getDigit(I)B
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->getDigit(I)B+]Landroid/icu/impl/number/DecimalQuantity_AbstractBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->getLowerDisplayMagnitude()I
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->getMagnitude()I
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->getPluralOperand(Landroid/icu/text/PluralRules$Operand;)D
@@ -9096,19 +9105,19 @@
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->negate()V
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->populateUFieldPosition(Ljava/text/FieldPosition;)V
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->roundToMagnitude(ILjava/math/MathContext;)V
-HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->roundToMagnitude(ILjava/math/MathContext;Z)V
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->roundToMagnitude(ILjava/math/MathContext;Z)V+]Ljava/math/MathContext;Ljava/math/MathContext;]Landroid/icu/impl/number/DecimalQuantity_AbstractBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;]Ljava/math/RoundingMode;Ljava/math/RoundingMode;
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->safeSubtract(II)I
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->setMinFraction(I)V
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->setMinInteger(I)V
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->setToDouble(D)V
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->setToInt(I)V
-HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->setToLong(J)V
-HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->signum()Landroid/icu/impl/number/Modifier$Signum;
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->setToLong(J)V+]Landroid/icu/impl/number/DecimalQuantity_AbstractBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
+HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->signum()Landroid/icu/impl/number/Modifier$Signum;+]Landroid/icu/impl/number/DecimalQuantity_AbstractBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
 HSPLandroid/icu/impl/number/DecimalQuantity_AbstractBCD;->toLong(Z)J+]Landroid/icu/impl/number/DecimalQuantity_AbstractBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
 HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;-><init>()V+]Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
 HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;-><init>(D)V
 HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;-><init>(I)V
-HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;-><init>(J)V
+HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;-><init>(J)V+]Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
 HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;-><init>(Ljava/lang/Number;)V
 HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;->compact()V
 HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;->copyBcdFrom(Landroid/icu/impl/number/DecimalQuantity;)V
@@ -9121,9 +9130,9 @@
 HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;->shiftLeft(I)V
 HSPLandroid/icu/impl/number/DecimalQuantity_DualStorageBCD;->shiftRight(I)V
 HSPLandroid/icu/impl/number/Grouper;-><init>(SSS)V
-HSPLandroid/icu/impl/number/Grouper;->forProperties(Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/impl/number/Grouper;
+HSPLandroid/icu/impl/number/Grouper;->forProperties(Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/impl/number/Grouper;+]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;
 HSPLandroid/icu/impl/number/Grouper;->getInstance(SSS)Landroid/icu/impl/number/Grouper;
-HSPLandroid/icu/impl/number/Grouper;->getMinGroupingForLocale(Landroid/icu/util/ULocale;)S
+HSPLandroid/icu/impl/number/Grouper;->getMinGroupingForLocale(Landroid/icu/util/ULocale;)S+]Landroid/icu/impl/ICUResourceBundle;Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;]Ljava/lang/Short;Ljava/lang/Short;
 HSPLandroid/icu/impl/number/Grouper;->getPrimary()S
 HSPLandroid/icu/impl/number/Grouper;->getSecondary()S
 HSPLandroid/icu/impl/number/Grouper;->groupAtPosition(ILandroid/icu/impl/number/DecimalQuantity;)Z
@@ -9145,16 +9154,16 @@
 HSPLandroid/icu/impl/number/MutablePatternModifier$ImmutablePatternModifier;->processQuantity(Landroid/icu/impl/number/DecimalQuantity;)Landroid/icu/impl/number/MicroProps;
 HSPLandroid/icu/impl/number/MutablePatternModifier;-><init>(Z)V
 HSPLandroid/icu/impl/number/MutablePatternModifier;->addToChain(Landroid/icu/impl/number/MicroPropsGenerator;)Landroid/icu/impl/number/MicroPropsGenerator;
-HSPLandroid/icu/impl/number/MutablePatternModifier;->apply(Landroid/icu/impl/FormattedStringBuilder;II)I
+HSPLandroid/icu/impl/number/MutablePatternModifier;->apply(Landroid/icu/impl/FormattedStringBuilder;II)I+]Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/impl/number/PropertiesAffixPatternProvider;
 HSPLandroid/icu/impl/number/MutablePatternModifier;->createConstantModifier(Landroid/icu/impl/FormattedStringBuilder;Landroid/icu/impl/FormattedStringBuilder;)Landroid/icu/impl/number/ConstantMultiFieldModifier;
 HSPLandroid/icu/impl/number/MutablePatternModifier;->createImmutable()Landroid/icu/impl/number/MutablePatternModifier$ImmutablePatternModifier;
 HSPLandroid/icu/impl/number/MutablePatternModifier;->getPrefixLength()I
 HSPLandroid/icu/impl/number/MutablePatternModifier;->getSymbol(I)Ljava/lang/CharSequence;
 HSPLandroid/icu/impl/number/MutablePatternModifier;->insertPrefix(Landroid/icu/impl/FormattedStringBuilder;I)I
 HSPLandroid/icu/impl/number/MutablePatternModifier;->insertSuffix(Landroid/icu/impl/FormattedStringBuilder;I)I
-HSPLandroid/icu/impl/number/MutablePatternModifier;->needsPlurals()Z
+HSPLandroid/icu/impl/number/MutablePatternModifier;->needsPlurals()Z+]Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/impl/number/PropertiesAffixPatternProvider;
 HSPLandroid/icu/impl/number/MutablePatternModifier;->prepareAffix(Z)V
-HSPLandroid/icu/impl/number/MutablePatternModifier;->processQuantity(Landroid/icu/impl/number/DecimalQuantity;)Landroid/icu/impl/number/MicroProps;
+HSPLandroid/icu/impl/number/MutablePatternModifier;->processQuantity(Landroid/icu/impl/number/DecimalQuantity;)Landroid/icu/impl/number/MicroProps;+]Landroid/icu/impl/number/MutablePatternModifier;Landroid/icu/impl/number/MutablePatternModifier;]Landroid/icu/impl/number/MicroPropsGenerator;Landroid/icu/impl/number/MicroProps;]Landroid/icu/number/Precision;Landroid/icu/number/Precision$FractionRounderImpl;]Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
 HSPLandroid/icu/impl/number/MutablePatternModifier;->setNumberProperties(Landroid/icu/impl/number/Modifier$Signum;Landroid/icu/impl/StandardPlural;)V
 HSPLandroid/icu/impl/number/MutablePatternModifier;->setPatternAttributes(Landroid/icu/number/NumberFormatter$SignDisplay;ZZ)V
 HSPLandroid/icu/impl/number/MutablePatternModifier;->setPatternInfo(Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/text/NumberFormat$Field;)V
@@ -9166,42 +9175,42 @@
 HSPLandroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;->getString(I)Ljava/lang/String;
 HSPLandroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;-><init>()V
 HSPLandroid/icu/impl/number/PatternStringParser$ParserState;-><init>(Ljava/lang/String;)V
-HSPLandroid/icu/impl/number/PatternStringParser$ParserState;->next()I
+HSPLandroid/icu/impl/number/PatternStringParser$ParserState;->next()I+]Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParserState;
 HSPLandroid/icu/impl/number/PatternStringParser$ParserState;->peek()I+]Ljava/lang/String;Ljava/lang/String;
-HSPLandroid/icu/impl/number/PatternStringParser;->consumeAffix(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;)J
+HSPLandroid/icu/impl/number/PatternStringParser;->consumeAffix(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;)J+]Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParserState;
 HSPLandroid/icu/impl/number/PatternStringParser;->consumeExponent(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;)V
-HSPLandroid/icu/impl/number/PatternStringParser;->consumeFormat(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;)V
-HSPLandroid/icu/impl/number/PatternStringParser;->consumeFractionFormat(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;)V
-HSPLandroid/icu/impl/number/PatternStringParser;->consumeIntegerFormat(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;)V
+HSPLandroid/icu/impl/number/PatternStringParser;->consumeFormat(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;)V+]Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParserState;
+HSPLandroid/icu/impl/number/PatternStringParser;->consumeFractionFormat(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;)V+]Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParserState;
+HSPLandroid/icu/impl/number/PatternStringParser;->consumeIntegerFormat(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;)V+]Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParserState;
 HSPLandroid/icu/impl/number/PatternStringParser;->consumeLiteral(Landroid/icu/impl/number/PatternStringParser$ParserState;)V
-HSPLandroid/icu/impl/number/PatternStringParser;->consumePadding(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;Landroid/icu/impl/number/Padder$PadPosition;)V
-HSPLandroid/icu/impl/number/PatternStringParser;->consumePattern(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;)V
+HSPLandroid/icu/impl/number/PatternStringParser;->consumePadding(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;Landroid/icu/impl/number/Padder$PadPosition;)V+]Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParserState;
+HSPLandroid/icu/impl/number/PatternStringParser;->consumePattern(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;)V+]Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParserState;
 HSPLandroid/icu/impl/number/PatternStringParser;->consumeSubpattern(Landroid/icu/impl/number/PatternStringParser$ParserState;Landroid/icu/impl/number/PatternStringParser$ParsedSubpatternInfo;)V
 HSPLandroid/icu/impl/number/PatternStringParser;->parseToExistingProperties(Ljava/lang/String;Landroid/icu/impl/number/DecimalFormatProperties;I)V
 HSPLandroid/icu/impl/number/PatternStringParser;->parseToExistingPropertiesImpl(Ljava/lang/String;Landroid/icu/impl/number/DecimalFormatProperties;I)V
 HSPLandroid/icu/impl/number/PatternStringParser;->parseToPatternInfo(Ljava/lang/String;)Landroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;
-HSPLandroid/icu/impl/number/PatternStringParser;->patternInfoToProperties(Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;I)V
+HSPLandroid/icu/impl/number/PatternStringParser;->patternInfoToProperties(Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;I)V+]Landroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;Landroid/icu/impl/number/PatternStringParser$ParsedPatternInfo;]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;
 HSPLandroid/icu/impl/number/PatternStringUtils$PatternSignType;-><clinit>()V
 HSPLandroid/icu/impl/number/PatternStringUtils$PatternSignType;-><init>(Ljava/lang/String;I)V
 HSPLandroid/icu/impl/number/PatternStringUtils$PatternSignType;->values()[Landroid/icu/impl/number/PatternStringUtils$PatternSignType;
 HSPLandroid/icu/impl/number/PatternStringUtils;->patternInfoToStringBuilder(Landroid/icu/impl/number/AffixPatternProvider;ZLandroid/icu/impl/number/PatternStringUtils$PatternSignType;ZLandroid/icu/impl/StandardPlural;ZLjava/lang/StringBuilder;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/impl/number/PropertiesAffixPatternProvider;]Landroid/icu/impl/StandardPlural;Landroid/icu/impl/StandardPlural;
 HSPLandroid/icu/impl/number/PatternStringUtils;->propertiesToPatternString(Landroid/icu/impl/number/DecimalFormatProperties;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/impl/number/PropertiesAffixPatternProvider;]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;
-HSPLandroid/icu/impl/number/PatternStringUtils;->resolveSignDisplay(Landroid/icu/number/NumberFormatter$SignDisplay;Landroid/icu/impl/number/Modifier$Signum;)Landroid/icu/impl/number/PatternStringUtils$PatternSignType;
+HSPLandroid/icu/impl/number/PatternStringUtils;->resolveSignDisplay(Landroid/icu/number/NumberFormatter$SignDisplay;Landroid/icu/impl/number/Modifier$Signum;)Landroid/icu/impl/number/PatternStringUtils$PatternSignType;+]Landroid/icu/impl/number/Modifier$Signum;Landroid/icu/impl/number/Modifier$Signum;]Landroid/icu/number/NumberFormatter$SignDisplay;Landroid/icu/number/NumberFormatter$SignDisplay;
 HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;-><init>(Landroid/icu/impl/number/DecimalFormatProperties;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;
 HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;->charAt(II)C
 HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;->containsSymbolType(I)Z
 HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;->currencyAsDecimal()Z
-HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;->forProperties(Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/impl/number/AffixPatternProvider;
+HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;->forProperties(Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/impl/number/AffixPatternProvider;+]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;
 HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;->getString(I)Ljava/lang/String;
 HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;->hasBody()Z
 HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;->hasCurrencySign()Z
 HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;->hasNegativeSubpattern()Z+]Ljava/lang/String;Ljava/lang/String;
-HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;->length(I)I
-HSPLandroid/icu/impl/number/RoundingUtils;->getMathContextOr34Digits(Landroid/icu/impl/number/DecimalFormatProperties;)Ljava/math/MathContext;
-HSPLandroid/icu/impl/number/RoundingUtils;->getMathContextOrUnlimited(Landroid/icu/impl/number/DecimalFormatProperties;)Ljava/math/MathContext;
+HSPLandroid/icu/impl/number/PropertiesAffixPatternProvider;->length(I)I+]Landroid/icu/impl/number/PropertiesAffixPatternProvider;Landroid/icu/impl/number/PropertiesAffixPatternProvider;
+HSPLandroid/icu/impl/number/RoundingUtils;->getMathContextOr34Digits(Landroid/icu/impl/number/DecimalFormatProperties;)Ljava/math/MathContext;+]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;]Ljava/math/RoundingMode;Ljava/math/RoundingMode;
+HSPLandroid/icu/impl/number/RoundingUtils;->getMathContextOrUnlimited(Landroid/icu/impl/number/DecimalFormatProperties;)Ljava/math/MathContext;+]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;]Ljava/math/RoundingMode;Ljava/math/RoundingMode;
 HSPLandroid/icu/impl/number/RoundingUtils;->getRoundingDirection(ZZIILjava/lang/Object;)Z
 HSPLandroid/icu/impl/number/RoundingUtils;->roundsAtMidpoint(I)Z
-HSPLandroid/icu/impl/number/RoundingUtils;->scaleFromProperties(Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/number/Scale;
+HSPLandroid/icu/impl/number/RoundingUtils;->scaleFromProperties(Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/number/Scale;+]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;
 HSPLandroid/icu/impl/number/SimpleModifier;-><init>(Ljava/lang/String;Ljava/text/Format$Field;ZLandroid/icu/impl/number/Modifier$Parameters;)V
 HSPLandroid/icu/impl/number/SimpleModifier;->apply(Landroid/icu/impl/FormattedStringBuilder;II)I
 HSPLandroid/icu/impl/number/parse/AffixMatcher$1;->compare(Landroid/icu/impl/number/parse/AffixMatcher;Landroid/icu/impl/number/parse/AffixMatcher;)I
@@ -9283,7 +9292,7 @@
 HSPLandroid/icu/lang/UCharacter;->foldCase(II)I
 HSPLandroid/icu/lang/UCharacter;->foldCase(IZ)I
 HSPLandroid/icu/lang/UCharacter;->getPropertyValueEnumNoThrow(ILjava/lang/CharSequence;)I
-HSPLandroid/icu/lang/UCharacter;->getType(I)I
+HSPLandroid/icu/lang/UCharacter;->getType(I)I+]Landroid/icu/impl/UCharacterProperty;Landroid/icu/impl/UCharacterProperty;
 HSPLandroid/icu/lang/UCharacter;->isDigit(I)Z
 HSPLandroid/icu/lang/UCharacter;->isLowerCase(I)Z
 HSPLandroid/icu/lang/UScript$ScriptMetadata;->getScriptProps(I)I
@@ -9296,13 +9305,13 @@
 HSPLandroid/icu/number/IntegerWidth;->truncateAt(I)Landroid/icu/number/IntegerWidth;
 HSPLandroid/icu/number/IntegerWidth;->zeroFillTo(I)Landroid/icu/number/IntegerWidth;
 HSPLandroid/icu/number/LocalizedNumberFormatter;-><init>(Landroid/icu/number/NumberFormatterSettings;ILjava/lang/Object;)V
-HSPLandroid/icu/number/LocalizedNumberFormatter;->computeCompiled()Z
+HSPLandroid/icu/number/LocalizedNumberFormatter;->computeCompiled()Z+]Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;Ljava/util/concurrent/atomic/AtomicLongFieldUpdater$CASUpdater;]Landroid/icu/number/LocalizedNumberFormatter;Landroid/icu/number/LocalizedNumberFormatter;]Ljava/lang/Long;Ljava/lang/Long;
 HSPLandroid/icu/number/LocalizedNumberFormatter;->create(ILjava/lang/Object;)Landroid/icu/number/LocalizedNumberFormatter;
 HSPLandroid/icu/number/LocalizedNumberFormatter;->create(ILjava/lang/Object;)Landroid/icu/number/NumberFormatterSettings;
 HSPLandroid/icu/number/LocalizedNumberFormatter;->format(D)Landroid/icu/number/FormattedNumber;
 HSPLandroid/icu/number/LocalizedNumberFormatter;->format(J)Landroid/icu/number/FormattedNumber;
 HSPLandroid/icu/number/LocalizedNumberFormatter;->format(Landroid/icu/impl/number/DecimalQuantity;)Landroid/icu/number/FormattedNumber;
-HSPLandroid/icu/number/LocalizedNumberFormatter;->formatImpl(Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;)Landroid/icu/impl/number/MicroProps;
+HSPLandroid/icu/number/LocalizedNumberFormatter;->formatImpl(Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;)Landroid/icu/impl/number/MicroProps;+]Landroid/icu/number/LocalizedNumberFormatter;Landroid/icu/number/LocalizedNumberFormatter;
 HSPLandroid/icu/number/LocalizedNumberFormatter;->getAffixImpl(ZZ)Ljava/lang/String;
 HSPLandroid/icu/number/NumberFormatter;->fromDecimalFormat(Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/number/UnlocalizedNumberFormatter;
 HSPLandroid/icu/number/NumberFormatter;->with()Landroid/icu/number/UnlocalizedNumberFormatter;
@@ -9312,27 +9321,27 @@
 HSPLandroid/icu/number/NumberFormatterImpl;->getPrefixSuffix(BLandroid/icu/impl/StandardPlural;Landroid/icu/impl/FormattedStringBuilder;)I
 HSPLandroid/icu/number/NumberFormatterImpl;->getPrefixSuffixImpl(Landroid/icu/impl/number/MicroPropsGenerator;BLandroid/icu/impl/FormattedStringBuilder;)I
 HSPLandroid/icu/number/NumberFormatterImpl;->getPrefixSuffixStatic(Landroid/icu/impl/number/MacroProps;BLandroid/icu/impl/StandardPlural;Landroid/icu/impl/FormattedStringBuilder;)I
-HSPLandroid/icu/number/NumberFormatterImpl;->macrosToMicroGenerator(Landroid/icu/impl/number/MacroProps;Landroid/icu/impl/number/MicroProps;Z)Landroid/icu/impl/number/MicroPropsGenerator;
+HSPLandroid/icu/number/NumberFormatterImpl;->macrosToMicroGenerator(Landroid/icu/impl/number/MacroProps;Landroid/icu/impl/number/MicroProps;Z)Landroid/icu/impl/number/MicroPropsGenerator;+]Landroid/icu/impl/number/MutablePatternModifier;Landroid/icu/impl/number/MutablePatternModifier;]Landroid/icu/text/NumberingSystem;Landroid/icu/text/NumberingSystem;]Landroid/icu/impl/number/Grouper;Landroid/icu/impl/number/Grouper;]Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/impl/number/PropertiesAffixPatternProvider;]Landroid/icu/number/Precision;Landroid/icu/number/Precision$FractionRounderImpl;]Landroid/icu/impl/number/MutablePatternModifier$ImmutablePatternModifier;Landroid/icu/impl/number/MutablePatternModifier$ImmutablePatternModifier;
 HSPLandroid/icu/number/NumberFormatterImpl;->preProcess(Landroid/icu/impl/number/DecimalQuantity;)Landroid/icu/impl/number/MicroProps;
-HSPLandroid/icu/number/NumberFormatterImpl;->preProcessUnsafe(Landroid/icu/impl/number/MacroProps;Landroid/icu/impl/number/DecimalQuantity;)Landroid/icu/impl/number/MicroProps;
+HSPLandroid/icu/number/NumberFormatterImpl;->preProcessUnsafe(Landroid/icu/impl/number/MacroProps;Landroid/icu/impl/number/DecimalQuantity;)Landroid/icu/impl/number/MicroProps;+]Landroid/icu/impl/number/MicroPropsGenerator;Landroid/icu/impl/number/MutablePatternModifier;]Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
 HSPLandroid/icu/number/NumberFormatterImpl;->unitIsBaseUnit(Landroid/icu/util/MeasureUnit;)Z
 HSPLandroid/icu/number/NumberFormatterImpl;->unitIsCurrency(Landroid/icu/util/MeasureUnit;)Z
 HSPLandroid/icu/number/NumberFormatterImpl;->unitIsPercent(Landroid/icu/util/MeasureUnit;)Z
 HSPLandroid/icu/number/NumberFormatterImpl;->unitIsPermille(Landroid/icu/util/MeasureUnit;)Z
-HSPLandroid/icu/number/NumberFormatterImpl;->writeAffixes(Landroid/icu/impl/number/MicroProps;Landroid/icu/impl/FormattedStringBuilder;II)I
+HSPLandroid/icu/number/NumberFormatterImpl;->writeAffixes(Landroid/icu/impl/number/MicroProps;Landroid/icu/impl/FormattedStringBuilder;II)I+]Landroid/icu/impl/number/Padder;Landroid/icu/impl/number/Padder;]Landroid/icu/impl/number/Modifier;Landroid/icu/impl/number/MutablePatternModifier;,Landroid/icu/impl/number/ConstantAffixModifier;,Landroid/icu/impl/number/ConstantMultiFieldModifier;
 HSPLandroid/icu/number/NumberFormatterImpl;->writeFractionDigits(Landroid/icu/impl/number/MicroProps;Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;I)I
-HSPLandroid/icu/number/NumberFormatterImpl;->writeIntegerDigits(Landroid/icu/impl/number/MicroProps;Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;I)I
-HSPLandroid/icu/number/NumberFormatterImpl;->writeNumber(Landroid/icu/impl/number/MicroProps;Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;I)I
+HSPLandroid/icu/number/NumberFormatterImpl;->writeIntegerDigits(Landroid/icu/impl/number/MicroProps;Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;I)I+]Landroid/icu/impl/number/Grouper;Landroid/icu/impl/number/Grouper;]Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/text/DecimalFormatSymbols;]Landroid/icu/impl/FormattedStringBuilder;Landroid/icu/impl/FormattedStringBuilder;]Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
+HSPLandroid/icu/number/NumberFormatterImpl;->writeNumber(Landroid/icu/impl/number/MicroProps;Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;I)I+]Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;]Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/text/DecimalFormatSymbols;]Landroid/icu/impl/FormattedStringBuilder;Landroid/icu/impl/FormattedStringBuilder;
 HSPLandroid/icu/number/NumberFormatterSettings;-><init>(Landroid/icu/number/NumberFormatterSettings;ILjava/lang/Object;)V
-HSPLandroid/icu/number/NumberFormatterSettings;->macros(Landroid/icu/impl/number/MacroProps;)Landroid/icu/number/NumberFormatterSettings;
+HSPLandroid/icu/number/NumberFormatterSettings;->macros(Landroid/icu/impl/number/MacroProps;)Landroid/icu/number/NumberFormatterSettings;+]Landroid/icu/number/NumberFormatterSettings;Landroid/icu/number/UnlocalizedNumberFormatter;
 HSPLandroid/icu/number/NumberFormatterSettings;->perUnit(Landroid/icu/util/MeasureUnit;)Landroid/icu/number/NumberFormatterSettings;
-HSPLandroid/icu/number/NumberFormatterSettings;->resolve()Landroid/icu/impl/number/MacroProps;
+HSPLandroid/icu/number/NumberFormatterSettings;->resolve()Landroid/icu/impl/number/MacroProps;+]Landroid/icu/impl/number/MacroProps;Landroid/icu/impl/number/MacroProps;
 HSPLandroid/icu/number/NumberFormatterSettings;->unit(Landroid/icu/util/MeasureUnit;)Landroid/icu/number/NumberFormatterSettings;
 HSPLandroid/icu/number/NumberFormatterSettings;->unitWidth(Landroid/icu/number/NumberFormatter$UnitWidth;)Landroid/icu/number/NumberFormatterSettings;
-HSPLandroid/icu/number/NumberPropertyMapper;->create(Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/number/UnlocalizedNumberFormatter;
-HSPLandroid/icu/number/NumberPropertyMapper;->oldToNew(Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/impl/number/MacroProps;+]Ljava/math/MathContext;Ljava/math/MathContext;]Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/text/DecimalFormatSymbols;]Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/impl/number/PropertiesAffixPatternProvider;]Landroid/icu/number/Precision;Landroid/icu/number/Precision$FractionRounderImpl;]Landroid/icu/number/IntegerWidth;Landroid/icu/number/IntegerWidth;]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;
+HSPLandroid/icu/number/NumberPropertyMapper;->create(Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/number/UnlocalizedNumberFormatter;+]Landroid/icu/number/UnlocalizedNumberFormatter;Landroid/icu/number/UnlocalizedNumberFormatter;
+HSPLandroid/icu/number/NumberPropertyMapper;->oldToNew(Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/impl/number/DecimalFormatProperties;)Landroid/icu/impl/number/MacroProps;+]Ljava/math/MathContext;Ljava/math/MathContext;]Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/text/DecimalFormatSymbols;]Landroid/icu/impl/number/AffixPatternProvider;Landroid/icu/impl/number/PropertiesAffixPatternProvider;]Landroid/icu/number/Precision;Landroid/icu/number/Precision$FractionRounderImpl;,Landroid/icu/number/Precision$CurrencyRounderImpl;]Landroid/icu/number/IntegerWidth;Landroid/icu/number/IntegerWidth;]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;]Landroid/icu/number/CurrencyPrecision;Landroid/icu/number/Precision$CurrencyRounderImpl;]Landroid/icu/util/Currency;Landroid/icu/util/Currency;
 HSPLandroid/icu/number/Precision$FractionRounderImpl;-><init>(II)V
-HSPLandroid/icu/number/Precision$FractionRounderImpl;->apply(Landroid/icu/impl/number/DecimalQuantity;)V
+HSPLandroid/icu/number/Precision$FractionRounderImpl;->apply(Landroid/icu/impl/number/DecimalQuantity;)V+]Landroid/icu/number/Precision$FractionRounderImpl;Landroid/icu/number/Precision$FractionRounderImpl;]Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
 HSPLandroid/icu/number/Precision$FractionRounderImpl;->createCopy()Landroid/icu/number/Precision$FractionRounderImpl;
 HSPLandroid/icu/number/Precision$FractionRounderImpl;->createCopy()Landroid/icu/number/Precision;
 HSPLandroid/icu/number/Precision;->-$$Nest$smgetDisplayMagnitudeFraction(I)I
@@ -9345,12 +9354,12 @@
 HSPLandroid/icu/number/Precision;->getRoundingMagnitudeFraction(I)I
 HSPLandroid/icu/number/Precision;->setResolvedMinFraction(Landroid/icu/impl/number/DecimalQuantity;I)V+]Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
 HSPLandroid/icu/number/Precision;->withLocaleData(Landroid/icu/util/Currency;)Landroid/icu/number/Precision;
-HSPLandroid/icu/number/Precision;->withMode(Ljava/math/MathContext;)Landroid/icu/number/Precision;
+HSPLandroid/icu/number/Precision;->withMode(Ljava/math/MathContext;)Landroid/icu/number/Precision;+]Ljava/math/MathContext;Ljava/math/MathContext;
 HSPLandroid/icu/number/Scale;->applyTo(Landroid/icu/impl/number/DecimalQuantity;)V
 HSPLandroid/icu/number/Scale;->powerOfTen(I)Landroid/icu/number/Scale;
 HSPLandroid/icu/number/Scale;->withMathContext(Ljava/math/MathContext;)Landroid/icu/number/Scale;
 HSPLandroid/icu/number/UnlocalizedNumberFormatter;-><init>(Landroid/icu/number/NumberFormatterSettings;ILjava/lang/Object;)V
-HSPLandroid/icu/number/UnlocalizedNumberFormatter;->create(ILjava/lang/Object;)Landroid/icu/number/NumberFormatterSettings;
+HSPLandroid/icu/number/UnlocalizedNumberFormatter;->create(ILjava/lang/Object;)Landroid/icu/number/NumberFormatterSettings;+]Landroid/icu/number/UnlocalizedNumberFormatter;Landroid/icu/number/UnlocalizedNumberFormatter;
 HSPLandroid/icu/number/UnlocalizedNumberFormatter;->create(ILjava/lang/Object;)Landroid/icu/number/UnlocalizedNumberFormatter;
 HSPLandroid/icu/number/UnlocalizedNumberFormatter;->locale(Landroid/icu/util/ULocale;)Landroid/icu/number/LocalizedNumberFormatter;
 HSPLandroid/icu/platform/AndroidDataFiles;->generateIcuDataPath()Ljava/lang/String;
@@ -9407,11 +9416,11 @@
 HSPLandroid/icu/text/ConstrainedFieldPosition;->getFieldValue()Ljava/lang/Object;
 HSPLandroid/icu/text/ConstrainedFieldPosition;->getLimit()I
 HSPLandroid/icu/text/ConstrainedFieldPosition;->getStart()I
-HSPLandroid/icu/text/ConstrainedFieldPosition;->matchesField(Ljava/text/Format$Field;Ljava/lang/Object;)Z
+HSPLandroid/icu/text/ConstrainedFieldPosition;->matchesField(Ljava/text/Format$Field;Ljava/lang/Object;)Z+]Landroid/icu/text/ConstrainedFieldPosition$ConstraintType;Landroid/icu/text/ConstrainedFieldPosition$ConstraintType;
 HSPLandroid/icu/text/ConstrainedFieldPosition;->reset()V
 HSPLandroid/icu/text/ConstrainedFieldPosition;->setState(Ljava/text/Format$Field;Ljava/lang/Object;II)V
 HSPLandroid/icu/text/CurrencyDisplayNames;-><init>()V
-HSPLandroid/icu/text/CurrencyDisplayNames;->getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/CurrencyDisplayNames;
+HSPLandroid/icu/text/CurrencyDisplayNames;->getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/CurrencyDisplayNames;+]Landroid/icu/impl/CurrencyData$CurrencyDisplayInfoProvider;Landroid/icu/impl/ICUCurrencyDisplayInfoProvider;
 HSPLandroid/icu/text/CurrencyMetaInfo$CurrencyDigits;-><init>(II)V
 HSPLandroid/icu/text/CurrencyMetaInfo$CurrencyFilter;-><init>(Ljava/lang/String;Ljava/lang/String;JJZ)V
 HSPLandroid/icu/text/CurrencyMetaInfo$CurrencyFilter;->onDate(Ljava/util/Date;)Landroid/icu/text/CurrencyMetaInfo$CurrencyFilter;
@@ -9433,7 +9442,7 @@
 HSPLandroid/icu/text/DateFormat;->getPatternInstance(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;
 HSPLandroid/icu/text/DateFormat;->getTimeInstance(ILandroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;
 HSPLandroid/icu/text/DateFormat;->setCalendar(Landroid/icu/util/Calendar;)V
-HSPLandroid/icu/text/DateFormat;->setContext(Landroid/icu/text/DisplayContext;)V
+HSPLandroid/icu/text/DateFormat;->setContext(Landroid/icu/text/DisplayContext;)V+]Landroid/icu/text/DisplayContext;Landroid/icu/text/DisplayContext;
 HSPLandroid/icu/text/DateFormat;->setTimeZone(Landroid/icu/util/TimeZone;)V
 HSPLandroid/icu/text/DateFormatSymbols$1;->createInstance(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/icu/text/DateFormatSymbols$1;->createInstance(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateFormatSymbols$AospExtendedDateFormatSymbols;
@@ -9448,18 +9457,18 @@
 HSPLandroid/icu/text/DateFormatSymbols;-><init>(Landroid/icu/util/Calendar;Landroid/icu/util/ULocale;)V
 HSPLandroid/icu/text/DateFormatSymbols;-><init>(Landroid/icu/util/ULocale;)V
 HSPLandroid/icu/text/DateFormatSymbols;-><init>(Landroid/icu/util/ULocale;Landroid/icu/impl/ICUResourceBundle;Ljava/lang/String;Landroid/icu/text/DateFormatSymbols$AospExtendedDateFormatSymbols;)V
-HSPLandroid/icu/text/DateFormatSymbols;-><init>(Ljava/lang/Class;Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/text/DateFormatSymbols;-><init>(Ljava/lang/Class;Landroid/icu/util/ULocale;)V+]Ljava/lang/String;Ljava/lang/String;]Landroid/icu/text/DateFormatSymbols;Landroid/icu/text/DateFormatSymbols;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/icu/text/DateFormatSymbols;-><init>(Ljava/lang/Class;Ljava/util/Locale;)V
 HSPLandroid/icu/text/DateFormatSymbols;->duplicate([Ljava/lang/String;)[Ljava/lang/String;
 HSPLandroid/icu/text/DateFormatSymbols;->getAmPmStrings()[Ljava/lang/String;
 HSPLandroid/icu/text/DateFormatSymbols;->getEras()[Ljava/lang/String;
-HSPLandroid/icu/text/DateFormatSymbols;->getExtendedInstance(Landroid/icu/util/ULocale;Ljava/lang/String;)Landroid/icu/text/DateFormatSymbols$AospExtendedDateFormatSymbols;
+HSPLandroid/icu/text/DateFormatSymbols;->getExtendedInstance(Landroid/icu/util/ULocale;Ljava/lang/String;)Landroid/icu/text/DateFormatSymbols$AospExtendedDateFormatSymbols;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;]Landroid/icu/impl/CacheBase;Landroid/icu/text/DateFormatSymbols$1;
 HSPLandroid/icu/text/DateFormatSymbols;->getMonths(II)[Ljava/lang/String;
 HSPLandroid/icu/text/DateFormatSymbols;->getWeekdays(II)[Ljava/lang/String;
 HSPLandroid/icu/text/DateFormatSymbols;->initializeData(Landroid/icu/text/DateFormatSymbols;)V
 HSPLandroid/icu/text/DateFormatSymbols;->initializeData(Landroid/icu/util/ULocale;Landroid/icu/impl/ICUResourceBundle;Ljava/lang/String;)V
 HSPLandroid/icu/text/DateFormatSymbols;->initializeData(Landroid/icu/util/ULocale;Landroid/icu/impl/ICUResourceBundle;Ljava/lang/String;Landroid/icu/text/DateFormatSymbols$AospExtendedDateFormatSymbols;)V
-HSPLandroid/icu/text/DateFormatSymbols;->initializeData(Landroid/icu/util/ULocale;Ljava/lang/String;)V
+HSPLandroid/icu/text/DateFormatSymbols;->initializeData(Landroid/icu/util/ULocale;Ljava/lang/String;)V+]Landroid/icu/text/DateFormatSymbols;Landroid/icu/text/DateFormatSymbols;
 HSPLandroid/icu/text/DateFormatSymbols;->loadDayPeriodStrings(Ljava/util/Map;)[Ljava/lang/String;
 HSPLandroid/icu/text/DateFormatSymbols;->setLocale(Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;)V
 HSPLandroid/icu/text/DateFormatSymbols;->setTimeSeparatorString(Ljava/lang/String;)V
@@ -9467,7 +9476,7 @@
 HSPLandroid/icu/text/DateIntervalFormat;->adjustFieldWidth(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IZ)Ljava/lang/String;
 HSPLandroid/icu/text/DateIntervalFormat;->concatSingleDate2TimeInterval(Ljava/lang/String;Ljava/lang/String;ILjava/util/Map;)V
 HSPLandroid/icu/text/DateIntervalFormat;->format(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
-HSPLandroid/icu/text/DateIntervalFormat;->formatImpl(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;Landroid/icu/text/DateIntervalFormat$FormatOutput;Ljava/util/List;)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/DateIntervalFormat;->formatImpl(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;Landroid/icu/text/DateIntervalFormat$FormatOutput;Ljava/util/List;)Ljava/lang/StringBuffer;+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;]Landroid/icu/text/SimpleDateFormat;Landroid/icu/text/SimpleDateFormat;
 HSPLandroid/icu/text/DateIntervalFormat;->genIntervalPattern(ILjava/lang/String;Ljava/lang/String;ILjava/util/Map;)Landroid/icu/text/DateIntervalFormat$SkeletonAndItsBestMatch;
 HSPLandroid/icu/text/DateIntervalFormat;->genSeparateDateTimePtn(Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Landroid/icu/text/DateTimePatternGenerator;)Z
 HSPLandroid/icu/text/DateIntervalFormat;->getConcatenationPattern(Landroid/icu/util/ULocale;)Ljava/lang/String;
@@ -9504,9 +9513,9 @@
 HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->equals(Ljava/lang/Object;)Z
 HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->fieldIsNumeric(I)Z
 HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->getBasePattern()Ljava/lang/String;
-HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->getDistance(Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;ILandroid/icu/text/DateTimePatternGenerator$DistanceInfo;)I
+HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->getDistance(Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;ILandroid/icu/text/DateTimePatternGenerator$DistanceInfo;)I+]Landroid/icu/text/DateTimePatternGenerator$DistanceInfo;Landroid/icu/text/DateTimePatternGenerator$DistanceInfo;
 HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->getFieldMask()I
-HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->set(Ljava/lang/String;Landroid/icu/text/DateTimePatternGenerator$FormatParser;Z)Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;
+HSPLandroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;->set(Ljava/lang/String;Landroid/icu/text/DateTimePatternGenerator$FormatParser;Z)Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;+]Landroid/icu/text/DateTimePatternGenerator$VariableField;Landroid/icu/text/DateTimePatternGenerator$VariableField;]Landroid/icu/text/DateTimePatternGenerator$FormatParser;Landroid/icu/text/DateTimePatternGenerator$FormatParser;]Landroid/icu/text/DateTimePatternGenerator$SkeletonFields;Landroid/icu/text/DateTimePatternGenerator$SkeletonFields;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLandroid/icu/text/DateTimePatternGenerator$DisplayWidth;->cldrKey()Ljava/lang/String;
 HSPLandroid/icu/text/DateTimePatternGenerator$DistanceInfo;-><init>()V
 HSPLandroid/icu/text/DateTimePatternGenerator$DistanceInfo;->addExtra(I)V
@@ -9518,7 +9527,7 @@
 HSPLandroid/icu/text/DateTimePatternGenerator$FormatParser;->getItems()Ljava/util/List;
 HSPLandroid/icu/text/DateTimePatternGenerator$FormatParser;->quoteLiteral(Ljava/lang/String;)Ljava/lang/Object;
 HSPLandroid/icu/text/DateTimePatternGenerator$FormatParser;->set(Ljava/lang/String;)Landroid/icu/text/DateTimePatternGenerator$FormatParser;
-HSPLandroid/icu/text/DateTimePatternGenerator$FormatParser;->set(Ljava/lang/String;Z)Landroid/icu/text/DateTimePatternGenerator$FormatParser;
+HSPLandroid/icu/text/DateTimePatternGenerator$FormatParser;->set(Ljava/lang/String;Z)Landroid/icu/text/DateTimePatternGenerator$FormatParser;+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;]Landroid/icu/impl/PatternTokenizer;Landroid/icu/impl/PatternTokenizer;
 HSPLandroid/icu/text/DateTimePatternGenerator$PatternInfo;-><init>()V
 HSPLandroid/icu/text/DateTimePatternGenerator$PatternWithMatcher;-><init>(Ljava/lang/String;Landroid/icu/text/DateTimePatternGenerator$DateTimeMatcher;)V
 HSPLandroid/icu/text/DateTimePatternGenerator$PatternWithSkeletonFlag;-><init>(Ljava/lang/String;Z)V
@@ -9584,10 +9593,10 @@
 HSPLandroid/icu/text/DateTimePatternGenerator;->setFieldDisplayName(ILandroid/icu/text/DateTimePatternGenerator$DisplayWidth;Ljava/lang/String;)V
 HSPLandroid/icu/text/DecimalFormat;-><init>(Ljava/lang/String;Landroid/icu/text/DecimalFormatSymbols;)V
 HSPLandroid/icu/text/DecimalFormat;-><init>(Ljava/lang/String;Landroid/icu/text/DecimalFormatSymbols;I)V
-HSPLandroid/icu/text/DecimalFormat;->clone()Ljava/lang/Object;
-HSPLandroid/icu/text/DecimalFormat;->fieldPositionHelper(Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;Ljava/text/FieldPosition;I)V
+HSPLandroid/icu/text/DecimalFormat;->clone()Ljava/lang/Object;+]Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/text/DecimalFormatSymbols;]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;]Landroid/icu/text/DecimalFormat;Landroid/icu/text/DecimalFormat;
+HSPLandroid/icu/text/DecimalFormat;->fieldPositionHelper(Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/FormattedStringBuilder;Ljava/text/FieldPosition;I)V+]Ljava/text/FieldPosition;Ljava/text/DontCareFieldPosition;]Landroid/icu/impl/number/DecimalQuantity;Landroid/icu/impl/number/DecimalQuantity_DualStorageBCD;
 HSPLandroid/icu/text/DecimalFormat;->format(DLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
-HSPLandroid/icu/text/DecimalFormat;->format(JLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/DecimalFormat;->format(JLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;+]Landroid/icu/number/LocalizedNumberFormatter;Landroid/icu/number/LocalizedNumberFormatter;]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;
 HSPLandroid/icu/text/DecimalFormat;->getDecimalFormatSymbols()Landroid/icu/text/DecimalFormatSymbols;
 HSPLandroid/icu/text/DecimalFormat;->getMaximumFractionDigits()I
 HSPLandroid/icu/text/DecimalFormat;->getMaximumIntegerDigits()I
@@ -9601,14 +9610,14 @@
 HSPLandroid/icu/text/DecimalFormat;->isParseBigDecimal()Z
 HSPLandroid/icu/text/DecimalFormat;->isParseIntegerOnly()Z
 HSPLandroid/icu/text/DecimalFormat;->parse(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/lang/Number;+]Landroid/icu/impl/number/parse/ParsedNumber;Landroid/icu/impl/number/parse/ParsedNumber;]Ljava/text/ParsePosition;Ljava/text/ParsePosition;]Landroid/icu/impl/number/parse/NumberParserImpl;Landroid/icu/impl/number/parse/NumberParserImpl;]Landroid/icu/text/DecimalFormat;Landroid/icu/text/DecimalFormat;
-HSPLandroid/icu/text/DecimalFormat;->refreshFormatter()V
+HSPLandroid/icu/text/DecimalFormat;->refreshFormatter()V+]Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/text/DecimalFormatSymbols;]Landroid/icu/number/UnlocalizedNumberFormatter;Landroid/icu/number/UnlocalizedNumberFormatter;]Landroid/icu/text/DecimalFormat;Landroid/icu/text/DecimalFormat;
 HSPLandroid/icu/text/DecimalFormat;->setCurrency(Landroid/icu/util/Currency;)V
 HSPLandroid/icu/text/DecimalFormat;->setDecimalSeparatorAlwaysShown(Z)V
 HSPLandroid/icu/text/DecimalFormat;->setGroupingUsed(Z)V
 HSPLandroid/icu/text/DecimalFormat;->setMaximumFractionDigits(I)V
-HSPLandroid/icu/text/DecimalFormat;->setMaximumIntegerDigits(I)V
+HSPLandroid/icu/text/DecimalFormat;->setMaximumIntegerDigits(I)V+]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;]Landroid/icu/text/DecimalFormat;Landroid/icu/text/DecimalFormat;
 HSPLandroid/icu/text/DecimalFormat;->setMinimumFractionDigits(I)V
-HSPLandroid/icu/text/DecimalFormat;->setMinimumIntegerDigits(I)V
+HSPLandroid/icu/text/DecimalFormat;->setMinimumIntegerDigits(I)V+]Landroid/icu/impl/number/DecimalFormatProperties;Landroid/icu/impl/number/DecimalFormatProperties;]Landroid/icu/text/DecimalFormat;Landroid/icu/text/DecimalFormat;
 HSPLandroid/icu/text/DecimalFormat;->setParseIntegerOnly(Z)V
 HSPLandroid/icu/text/DecimalFormat;->setParseStrictMode(Landroid/icu/impl/number/DecimalFormatProperties$ParseMode;)V
 HSPLandroid/icu/text/DecimalFormat;->setPropertiesFromPattern(Ljava/lang/String;I)V
@@ -9654,7 +9663,7 @@
 HSPLandroid/icu/text/DecimalFormatSymbols;->getULocale()Landroid/icu/util/ULocale;
 HSPLandroid/icu/text/DecimalFormatSymbols;->getZeroDigit()C
 HSPLandroid/icu/text/DecimalFormatSymbols;->initSpacingInfo(Landroid/icu/impl/CurrencyData$CurrencySpacingInfo;)V
-HSPLandroid/icu/text/DecimalFormatSymbols;->initialize(Landroid/icu/util/ULocale;Landroid/icu/text/NumberingSystem;)V
+HSPLandroid/icu/text/DecimalFormatSymbols;->initialize(Landroid/icu/util/ULocale;Landroid/icu/text/NumberingSystem;)V+]Landroid/icu/impl/CurrencyData$CurrencyDisplayInfoProvider;Landroid/icu/impl/ICUCurrencyDisplayInfoProvider;]Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;]Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/text/DecimalFormatSymbols;]Landroid/icu/impl/CurrencyData$CurrencyDisplayInfo;Landroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;
 HSPLandroid/icu/text/DecimalFormatSymbols;->loadData(Landroid/icu/util/ULocale;)Landroid/icu/text/DecimalFormatSymbols$CacheData;
 HSPLandroid/icu/text/DecimalFormatSymbols;->setApproximatelySignString(Ljava/lang/String;)V
 HSPLandroid/icu/text/DecimalFormatSymbols;->setCurrency(Landroid/icu/util/Currency;)V
@@ -9704,7 +9713,7 @@
 HSPLandroid/icu/text/Normalizer2;->getNFCInstance()Landroid/icu/text/Normalizer2;
 HSPLandroid/icu/text/Normalizer2;->getNFDInstance()Landroid/icu/text/Normalizer2;
 HSPLandroid/icu/text/Normalizer2;->getNFKDInstance()Landroid/icu/text/Normalizer2;
-HSPLandroid/icu/text/Normalizer2;->normalize(Ljava/lang/CharSequence;)Ljava/lang/String;
+HSPLandroid/icu/text/Normalizer2;->normalize(Ljava/lang/CharSequence;)Ljava/lang/String;+]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/icu/text/Normalizer2;Landroid/icu/impl/Norm2AllModes$DecomposeNormalizer2;
 HSPLandroid/icu/text/Normalizer;->normalize(Ljava/lang/String;Landroid/icu/text/Normalizer$Mode;)Ljava/lang/String;
 HSPLandroid/icu/text/NumberFormat;-><init>()V
 HSPLandroid/icu/text/NumberFormat;->clone()Ljava/lang/Object;
@@ -9714,7 +9723,7 @@
 HSPLandroid/icu/text/NumberFormat;->getInstance(Ljava/util/Locale;I)Landroid/icu/text/NumberFormat;
 HSPLandroid/icu/text/NumberFormat;->getPattern(Landroid/icu/util/ULocale;I)Ljava/lang/String;
 HSPLandroid/icu/text/NumberFormat;->getPatternForStyle(Landroid/icu/util/ULocale;I)Ljava/lang/String;
-HSPLandroid/icu/text/NumberFormat;->getPatternForStyleAndNumberingSystem(Landroid/icu/util/ULocale;Ljava/lang/String;I)Ljava/lang/String;
+HSPLandroid/icu/text/NumberFormat;->getPatternForStyleAndNumberingSystem(Landroid/icu/util/ULocale;Ljava/lang/String;I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/impl/ICUResourceBundle;Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;
 HSPLandroid/icu/text/NumberFormat;->getShim()Landroid/icu/text/NumberFormat$NumberFormatShim;
 HSPLandroid/icu/text/NumberFormatServiceShim$NFService$1RBNumberFormatFactory;->handleCreate(Landroid/icu/util/ULocale;ILandroid/icu/impl/ICUService;)Ljava/lang/Object;
 HSPLandroid/icu/text/NumberFormatServiceShim;->createInstance(Landroid/icu/util/ULocale;I)Landroid/icu/text/NumberFormat;
@@ -9722,7 +9731,7 @@
 HSPLandroid/icu/text/NumberingSystem$1;->createInstance(Ljava/lang/String;Landroid/icu/text/NumberingSystem$LocaleLookupData;)Landroid/icu/text/NumberingSystem;
 HSPLandroid/icu/text/NumberingSystem$LocaleLookupData;-><init>(Landroid/icu/util/ULocale;Ljava/lang/String;)V
 HSPLandroid/icu/text/NumberingSystem;->getDescription()Ljava/lang/String;
-HSPLandroid/icu/text/NumberingSystem;->getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/NumberingSystem;
+HSPLandroid/icu/text/NumberingSystem;->getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/NumberingSystem;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;]Landroid/icu/impl/CacheBase;Landroid/icu/text/NumberingSystem$1;
 HSPLandroid/icu/text/NumberingSystem;->getInstanceByName(Ljava/lang/String;)Landroid/icu/text/NumberingSystem;
 HSPLandroid/icu/text/NumberingSystem;->getName()Ljava/lang/String;
 HSPLandroid/icu/text/NumberingSystem;->getRadix()I
@@ -9759,7 +9768,7 @@
 HSPLandroid/icu/text/PluralRules$Operand;->valueOf(Ljava/lang/String;)Landroid/icu/text/PluralRules$Operand;
 HSPLandroid/icu/text/PluralRules$Operand;->values()[Landroid/icu/text/PluralRules$Operand;
 HSPLandroid/icu/text/PluralRules$RangeConstraint;-><init>(IZLandroid/icu/text/PluralRules$Operand;ZDD[J)V
-HSPLandroid/icu/text/PluralRules$RangeConstraint;->isFulfilled(Landroid/icu/text/PluralRules$IFixedDecimal;)Z
+HSPLandroid/icu/text/PluralRules$RangeConstraint;->isFulfilled(Landroid/icu/text/PluralRules$IFixedDecimal;)Z+]Landroid/icu/text/PluralRules$IFixedDecimal;Landroid/icu/text/PluralRules$FixedDecimal;
 HSPLandroid/icu/text/PluralRules$Rule;-><init>(Ljava/lang/String;Landroid/icu/text/PluralRules$Constraint;Landroid/icu/text/PluralRules$FixedDecimalSamples;Landroid/icu/text/PluralRules$FixedDecimalSamples;)V
 HSPLandroid/icu/text/PluralRules$Rule;->appliesTo(Landroid/icu/text/PluralRules$IFixedDecimal;)Z
 HSPLandroid/icu/text/PluralRules$Rule;->getKeyword()Ljava/lang/String;
@@ -9768,7 +9777,7 @@
 HSPLandroid/icu/text/PluralRules$RuleList;->finish()Landroid/icu/text/PluralRules$RuleList;
 HSPLandroid/icu/text/PluralRules$RuleList;->getKeywords()Ljava/util/Set;
 HSPLandroid/icu/text/PluralRules$RuleList;->select(Landroid/icu/text/PluralRules$IFixedDecimal;)Ljava/lang/String;
-HSPLandroid/icu/text/PluralRules$RuleList;->selectRule(Landroid/icu/text/PluralRules$IFixedDecimal;)Landroid/icu/text/PluralRules$Rule;
+HSPLandroid/icu/text/PluralRules$RuleList;->selectRule(Landroid/icu/text/PluralRules$IFixedDecimal;)Landroid/icu/text/PluralRules$Rule;+]Landroid/icu/text/PluralRules$Rule;Landroid/icu/text/PluralRules$Rule;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLandroid/icu/text/PluralRules$SimpleTokenizer;->split(Ljava/lang/String;)[Ljava/lang/String;
 HSPLandroid/icu/text/PluralRules;-><init>(Landroid/icu/text/PluralRules$RuleList;Landroid/icu/impl/number/range/StandardPluralRanges;)V
 HSPLandroid/icu/text/PluralRules;->forLocale(Landroid/icu/util/ULocale;)Landroid/icu/text/PluralRules;
@@ -9809,13 +9818,13 @@
 HSPLandroid/icu/text/ReplaceableString;->getChars(II[CI)V
 HSPLandroid/icu/text/ReplaceableString;->length()I
 HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;-><init>(Landroid/icu/text/RuleBasedBreakIterator;)V
-HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;-><init>(Landroid/icu/text/RuleBasedBreakIterator;Landroid/icu/text/RuleBasedBreakIterator$BreakCache;)V
+HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;-><init>(Landroid/icu/text/RuleBasedBreakIterator;Landroid/icu/text/RuleBasedBreakIterator$BreakCache;)V+][S[S][I[I
 HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->addFollowing(IIZ)V
 HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->addPreceding(IIZ)Z
 HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->current()I
 HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->following(I)V
-HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->next()V
-HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->populateFollowing()Z
+HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->next()V+]Landroid/icu/text/RuleBasedBreakIterator$BreakCache;Landroid/icu/text/RuleBasedBreakIterator$BreakCache;
+HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->populateFollowing()Z+]Landroid/icu/text/RuleBasedBreakIterator$DictionaryCache;Landroid/icu/text/RuleBasedBreakIterator$DictionaryCache;]Landroid/icu/text/RuleBasedBreakIterator$BreakCache;Landroid/icu/text/RuleBasedBreakIterator$BreakCache;
 HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->populateNear(I)Z
 HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->populatePreceding()Z
 HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->preceding(I)V
@@ -9824,19 +9833,19 @@
 HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->reset(II)V
 HSPLandroid/icu/text/RuleBasedBreakIterator$BreakCache;->seek(I)Z
 HSPLandroid/icu/text/RuleBasedBreakIterator$DictionaryCache;-><init>(Landroid/icu/text/RuleBasedBreakIterator;)V
-HSPLandroid/icu/text/RuleBasedBreakIterator$DictionaryCache;-><init>(Landroid/icu/text/RuleBasedBreakIterator;Landroid/icu/text/RuleBasedBreakIterator$DictionaryCache;)V
+HSPLandroid/icu/text/RuleBasedBreakIterator$DictionaryCache;-><init>(Landroid/icu/text/RuleBasedBreakIterator;Landroid/icu/text/RuleBasedBreakIterator$DictionaryCache;)V+]Landroid/icu/impl/breakiter/DictionaryBreakEngine$DequeI;Landroid/icu/impl/breakiter/DictionaryBreakEngine$DequeI;
 HSPLandroid/icu/text/RuleBasedBreakIterator$DictionaryCache;->following(I)Z
 HSPLandroid/icu/text/RuleBasedBreakIterator$DictionaryCache;->preceding(I)Z
 HSPLandroid/icu/text/RuleBasedBreakIterator$DictionaryCache;->reset()V
 HSPLandroid/icu/text/RuleBasedBreakIterator;-><init>()V
 HSPLandroid/icu/text/RuleBasedBreakIterator;->CISetIndex32(Ljava/text/CharacterIterator;I)I
 HSPLandroid/icu/text/RuleBasedBreakIterator;->checkOffset(ILjava/text/CharacterIterator;)V
-HSPLandroid/icu/text/RuleBasedBreakIterator;->clone()Ljava/lang/Object;
+HSPLandroid/icu/text/RuleBasedBreakIterator;->clone()Ljava/lang/Object;+]Ljava/text/CharacterIterator;Ljava/text/StringCharacterIterator;
 HSPLandroid/icu/text/RuleBasedBreakIterator;->first()I
 HSPLandroid/icu/text/RuleBasedBreakIterator;->following(I)I
 HSPLandroid/icu/text/RuleBasedBreakIterator;->getInstanceFromCompiledRules(Ljava/nio/ByteBuffer;)Landroid/icu/text/RuleBasedBreakIterator;
 HSPLandroid/icu/text/RuleBasedBreakIterator;->getText()Ljava/text/CharacterIterator;
-HSPLandroid/icu/text/RuleBasedBreakIterator;->handleNext()I
+HSPLandroid/icu/text/RuleBasedBreakIterator;->handleNext()I+]Landroid/icu/impl/RBBIDataWrapper;Landroid/icu/impl/RBBIDataWrapper;]Landroid/icu/util/CodePointTrie;Landroid/icu/util/CodePointTrie$Fast8;]Ljava/text/CharacterIterator;Ljava/text/StringCharacterIterator;
 HSPLandroid/icu/text/RuleBasedBreakIterator;->handleSafePrevious(I)I
 HSPLandroid/icu/text/RuleBasedBreakIterator;->isBoundary(I)Z
 HSPLandroid/icu/text/RuleBasedBreakIterator;->next()I
@@ -9875,10 +9884,10 @@
 HSPLandroid/icu/text/SimpleDateFormat$PatternItem;-><init>(CI)V
 HSPLandroid/icu/text/SimpleDateFormat;-><init>(Ljava/lang/String;Landroid/icu/text/DateFormatSymbols;Landroid/icu/util/Calendar;Landroid/icu/text/NumberFormat;Landroid/icu/util/ULocale;ZLjava/lang/String;)V
 HSPLandroid/icu/text/SimpleDateFormat;-><init>(Ljava/lang/String;Landroid/icu/util/ULocale;)V
-HSPLandroid/icu/text/SimpleDateFormat;->fastZeroPaddingNumber(Ljava/lang/StringBuffer;III)V
-HSPLandroid/icu/text/SimpleDateFormat;->format(Landroid/icu/util/Calendar;Landroid/icu/text/DisplayContext;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;Ljava/util/List;)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/SimpleDateFormat;->fastZeroPaddingNumber(Ljava/lang/StringBuffer;III)V+]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/SimpleDateFormat;->format(Landroid/icu/util/Calendar;Landroid/icu/text/DisplayContext;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;Ljava/util/List;)Ljava/lang/StringBuffer;+]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;]Ljava/text/FieldPosition;Ljava/text/FieldPosition;]Landroid/icu/text/SimpleDateFormat;Landroid/icu/text/SimpleDateFormat;
 HSPLandroid/icu/text/SimpleDateFormat;->format(Landroid/icu/util/Calendar;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
-HSPLandroid/icu/text/SimpleDateFormat;->format(Landroid/icu/util/Calendar;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;Ljava/util/List;)Ljava/lang/StringBuffer;
+HSPLandroid/icu/text/SimpleDateFormat;->format(Landroid/icu/util/Calendar;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;Ljava/util/List;)Ljava/lang/StringBuffer;+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;]Landroid/icu/text/SimpleDateFormat;Landroid/icu/text/SimpleDateFormat;
 HSPLandroid/icu/text/SimpleDateFormat;->getIndexFromChar(C)I
 HSPLandroid/icu/text/SimpleDateFormat;->getInstance(Landroid/icu/util/Calendar$FormatConfiguration;)Landroid/icu/text/SimpleDateFormat;
 HSPLandroid/icu/text/SimpleDateFormat;->getLocale()Landroid/icu/util/ULocale;
@@ -9904,7 +9913,7 @@
 HSPLandroid/icu/text/TimeZoneNames;->getInstance(Ljava/util/Locale;)Landroid/icu/text/TimeZoneNames;
 HSPLandroid/icu/text/UCharacterIterator;-><init>()V
 HSPLandroid/icu/text/UCharacterIterator;->getInstance(Ljava/lang/String;)Landroid/icu/text/UCharacterIterator;
-HSPLandroid/icu/text/UCharacterIterator;->getText()Ljava/lang/String;
+HSPLandroid/icu/text/UCharacterIterator;->getText()Ljava/lang/String;+]Landroid/icu/text/UCharacterIterator;Landroid/icu/impl/ReplaceableUCharacterIterator;
 HSPLandroid/icu/text/UCharacterIterator;->getText([C)I
 HSPLandroid/icu/text/UCharacterIterator;->setToStart()V
 HSPLandroid/icu/text/UFormat;-><init>()V
@@ -9983,17 +9992,17 @@
 HSPLandroid/icu/util/Calendar$WeekDataCache;->createInstance(Ljava/lang/String;Ljava/lang/String;)Landroid/icu/util/Calendar$WeekData;
 HSPLandroid/icu/util/Calendar;-><init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V
 HSPLandroid/icu/util/Calendar;->clone()Ljava/lang/Object;
-HSPLandroid/icu/util/Calendar;->complete()V
-HSPLandroid/icu/util/Calendar;->computeFields()V
-HSPLandroid/icu/util/Calendar;->computeGregorianAndDOWFields(I)V
+HSPLandroid/icu/util/Calendar;->complete()V+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;
+HSPLandroid/icu/util/Calendar;->computeFields()V+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;]Landroid/icu/util/TimeZone;Landroid/icu/impl/OlsonTimeZone;
+HSPLandroid/icu/util/Calendar;->computeGregorianAndDOWFields(I)V+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;
 HSPLandroid/icu/util/Calendar;->computeGregorianFields(I)V
-HSPLandroid/icu/util/Calendar;->computeWeekFields()V
+HSPLandroid/icu/util/Calendar;->computeWeekFields()V+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;
 HSPLandroid/icu/util/Calendar;->createInstance(Landroid/icu/util/ULocale;)Landroid/icu/util/Calendar;
 HSPLandroid/icu/util/Calendar;->floorDivide(II[I)I
 HSPLandroid/icu/util/Calendar;->floorDivide(JI[I)I
 HSPLandroid/icu/util/Calendar;->floorDivide(JJ)J
 HSPLandroid/icu/util/Calendar;->formatHelper(Landroid/icu/util/Calendar;Landroid/icu/util/ULocale;II)Landroid/icu/text/DateFormat;
-HSPLandroid/icu/util/Calendar;->get(I)I
+HSPLandroid/icu/util/Calendar;->get(I)I+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;
 HSPLandroid/icu/util/Calendar;->getCalendarTypeForLocale(Landroid/icu/util/ULocale;)Landroid/icu/impl/CalType;
 HSPLandroid/icu/util/Calendar;->getDateTimeFormat(IILandroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;
 HSPLandroid/icu/util/Calendar;->getDateTimeFormatString(Landroid/icu/util/ULocale;Ljava/lang/String;II)Ljava/lang/String;
@@ -10020,22 +10029,22 @@
 HSPLandroid/icu/util/Calendar;->getWeekDataForRegionInternal(Ljava/lang/String;)Landroid/icu/util/Calendar$WeekData;
 HSPLandroid/icu/util/Calendar;->handleCreateFields()[I
 HSPLandroid/icu/util/Calendar;->handleGetDateFormat(Ljava/lang/String;Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;
-HSPLandroid/icu/util/Calendar;->initInternal()V
+HSPLandroid/icu/util/Calendar;->initInternal()V+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;
 HSPLandroid/icu/util/Calendar;->internalSet(II)V
-HSPLandroid/icu/util/Calendar;->isEquivalentTo(Landroid/icu/util/Calendar;)Z
+HSPLandroid/icu/util/Calendar;->isEquivalentTo(Landroid/icu/util/Calendar;)Z+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;]Landroid/icu/util/TimeZone;Landroid/icu/impl/OlsonTimeZone;]Ljava/lang/Object;Landroid/icu/util/GregorianCalendar;
 HSPLandroid/icu/util/Calendar;->isLenient()Z
 HSPLandroid/icu/util/Calendar;->julianDayToDayOfWeek(I)I
-HSPLandroid/icu/util/Calendar;->setCalendarLocale(Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/util/Calendar;->setCalendarLocale(Landroid/icu/util/ULocale;)V+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;]Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;
 HSPLandroid/icu/util/Calendar;->setFirstDayOfWeek(I)V
 HSPLandroid/icu/util/Calendar;->setLocale(Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;)V
 HSPLandroid/icu/util/Calendar;->setMinimalDaysInFirstWeek(I)V
 HSPLandroid/icu/util/Calendar;->setTime(Ljava/util/Date;)V
 HSPLandroid/icu/util/Calendar;->setTimeInMillis(J)V
 HSPLandroid/icu/util/Calendar;->setTimeZone(Landroid/icu/util/TimeZone;)V
-HSPLandroid/icu/util/Calendar;->setWeekData(Landroid/icu/util/Calendar$WeekData;)Landroid/icu/util/Calendar;
-HSPLandroid/icu/util/Calendar;->setWeekData(Ljava/lang/String;)V
-HSPLandroid/icu/util/Calendar;->weekNumber(II)I
-HSPLandroid/icu/util/Calendar;->weekNumber(III)I
+HSPLandroid/icu/util/Calendar;->setWeekData(Landroid/icu/util/Calendar$WeekData;)Landroid/icu/util/Calendar;+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;
+HSPLandroid/icu/util/Calendar;->setWeekData(Ljava/lang/String;)V+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;]Landroid/icu/util/Calendar$WeekDataCache;Landroid/icu/util/Calendar$WeekDataCache;
+HSPLandroid/icu/util/Calendar;->weekNumber(II)I+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;
+HSPLandroid/icu/util/Calendar;->weekNumber(III)I+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;
 HSPLandroid/icu/util/CharsTrie;-><init>(Ljava/lang/CharSequence;I)V
 HSPLandroid/icu/util/CharsTrie;->branchNext(III)Landroid/icu/util/BytesTrie$Result;+]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/icu/util/CharsTrie;->first(I)Landroid/icu/util/BytesTrie$Result;
@@ -10068,7 +10077,7 @@
 HSPLandroid/icu/util/CodePointTrie$Fast16;->bmpGet(I)I
 HSPLandroid/icu/util/CodePointTrie$Fast16;->get(I)I
 HSPLandroid/icu/util/CodePointTrie$Fast8;-><init>([C[BIII)V
-HSPLandroid/icu/util/CodePointTrie$Fast8;->get(I)I
+HSPLandroid/icu/util/CodePointTrie$Fast8;->get(I)I+]Landroid/icu/util/CodePointTrie$Fast8;Landroid/icu/util/CodePointTrie$Fast8;
 HSPLandroid/icu/util/CodePointTrie$Fast;-><init>([CLandroid/icu/util/CodePointTrie$Data;III)V
 HSPLandroid/icu/util/CodePointTrie$Fast;->cpIndex(I)I
 HSPLandroid/icu/util/CodePointTrie$Fast;->getType()Landroid/icu/util/CodePointTrie$Type;
@@ -10089,7 +10098,7 @@
 HSPLandroid/icu/util/Currency;->getInstance(Landroid/icu/util/ULocale;)Landroid/icu/util/Currency;
 HSPLandroid/icu/util/Currency;->getInstance(Ljava/lang/String;)Landroid/icu/util/Currency;
 HSPLandroid/icu/util/Currency;->getInstance(Ljava/util/Locale;)Landroid/icu/util/Currency;
-HSPLandroid/icu/util/Currency;->getName(Landroid/icu/util/ULocale;I[Z)Ljava/lang/String;
+HSPLandroid/icu/util/Currency;->getName(Landroid/icu/util/ULocale;I[Z)Ljava/lang/String;+]Landroid/icu/text/CurrencyDisplayNames;Landroid/icu/impl/ICUCurrencyDisplayInfoProvider$ICUCurrencyDisplayInfo;
 HSPLandroid/icu/util/Currency;->getRoundingIncrement(Landroid/icu/util/Currency$CurrencyUsage;)D
 HSPLandroid/icu/util/Currency;->getSymbol(Landroid/icu/util/ULocale;)Ljava/lang/String;
 HSPLandroid/icu/util/Currency;->getSymbol(Ljava/util/Locale;)Ljava/lang/String;
@@ -10103,9 +10112,9 @@
 HSPLandroid/icu/util/DateTimeRule;->getRuleMillisInDay()I
 HSPLandroid/icu/util/DateTimeRule;->getRuleMonth()I
 HSPLandroid/icu/util/DateTimeRule;->getTimeRuleType()I
-HSPLandroid/icu/util/GregorianCalendar;-><init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V
+HSPLandroid/icu/util/GregorianCalendar;-><init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V+]Landroid/icu/util/GregorianCalendar;Landroid/icu/util/GregorianCalendar;
 HSPLandroid/icu/util/GregorianCalendar;->getType()Ljava/lang/String;
-HSPLandroid/icu/util/GregorianCalendar;->handleComputeFields(I)V
+HSPLandroid/icu/util/GregorianCalendar;->handleComputeFields(I)V+]Landroid/icu/util/GregorianCalendar;Landroid/icu/util/GregorianCalendar;
 HSPLandroid/icu/util/GregorianCalendar;->handleGetYearLength(I)I
 HSPLandroid/icu/util/GregorianCalendar;->isEquivalentTo(Landroid/icu/util/Calendar;)Z
 HSPLandroid/icu/util/GregorianCalendar;->isLeapYear(I)Z
@@ -10168,7 +10177,7 @@
 HSPLandroid/icu/util/Output;-><init>(Ljava/lang/Object;)V
 HSPLandroid/icu/util/STZInfo;-><init>()V
 HSPLandroid/icu/util/SimpleTimeZone;-><init>(ILjava/lang/String;IIIIIIIIIII)V
-HSPLandroid/icu/util/SimpleTimeZone;->clone()Ljava/lang/Object;
+HSPLandroid/icu/util/SimpleTimeZone;->clone()Ljava/lang/Object;+]Landroid/icu/util/SimpleTimeZone;Landroid/icu/util/SimpleTimeZone;
 HSPLandroid/icu/util/SimpleTimeZone;->cloneAsThawed()Landroid/icu/util/TimeZone;
 HSPLandroid/icu/util/SimpleTimeZone;->compareToRule(IIIIIIIIIIII)I
 HSPLandroid/icu/util/SimpleTimeZone;->construct(IIIIIIIIIIII)V
@@ -10177,7 +10186,7 @@
 HSPLandroid/icu/util/SimpleTimeZone;->decodeStartRule()V
 HSPLandroid/icu/util/SimpleTimeZone;->getDSTSavings()I
 HSPLandroid/icu/util/SimpleTimeZone;->getNextTransition(JZ)Landroid/icu/util/TimeZoneTransition;
-HSPLandroid/icu/util/SimpleTimeZone;->getOffset(IIIIII)I
+HSPLandroid/icu/util/SimpleTimeZone;->getOffset(IIIIII)I+]Landroid/icu/util/SimpleTimeZone;Landroid/icu/util/SimpleTimeZone;
 HSPLandroid/icu/util/SimpleTimeZone;->getOffset(IIIIIII)I
 HSPLandroid/icu/util/SimpleTimeZone;->getOffset(IIIIIIII)I
 HSPLandroid/icu/util/SimpleTimeZone;->getRawOffset()I
@@ -10187,7 +10196,7 @@
 HSPLandroid/icu/util/SimpleTimeZone;->initTransitionRules()V
 HSPLandroid/icu/util/SimpleTimeZone;->isFrozen()Z
 HSPLandroid/icu/util/SimpleTimeZone;->setStartYear(I)V
-HSPLandroid/icu/util/SimpleTimeZone;->toString()Ljava/lang/String;
+HSPLandroid/icu/util/SimpleTimeZone;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/util/SimpleTimeZone;Landroid/icu/util/SimpleTimeZone;
 HSPLandroid/icu/util/SimpleTimeZone;->useDaylightTime()Z
 HSPLandroid/icu/util/TimeArrayTimeZoneRule;-><init>(Ljava/lang/String;II[JI)V
 HSPLandroid/icu/util/TimeArrayTimeZoneRule;->getStartTimes()[J
@@ -10202,10 +10211,10 @@
 HSPLandroid/icu/util/TimeZone;->getFrozenICUTimeZone(Ljava/lang/String;Z)Landroid/icu/util/BasicTimeZone;
 HSPLandroid/icu/util/TimeZone;->getFrozenTimeZone(Ljava/lang/String;)Landroid/icu/util/TimeZone;
 HSPLandroid/icu/util/TimeZone;->getID()Ljava/lang/String;
-HSPLandroid/icu/util/TimeZone;->getOffset(JZ[I)V
+HSPLandroid/icu/util/TimeZone;->getOffset(JZ[I)V+]Landroid/icu/util/TimeZone;Landroid/icu/util/SimpleTimeZone;
 HSPLandroid/icu/util/TimeZone;->getTimeZone(Ljava/lang/String;)Landroid/icu/util/TimeZone;
-HSPLandroid/icu/util/TimeZone;->getTimeZone(Ljava/lang/String;IZ)Landroid/icu/util/TimeZone;
-HSPLandroid/icu/util/TimeZone;->hashCode()I
+HSPLandroid/icu/util/TimeZone;->getTimeZone(Ljava/lang/String;IZ)Landroid/icu/util/TimeZone;+]Landroid/icu/util/TimeZone;Landroid/icu/impl/OlsonTimeZone;
+HSPLandroid/icu/util/TimeZone;->hashCode()I+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/icu/util/TimeZone;->setICUDefault(Landroid/icu/util/TimeZone;)V
 HSPLandroid/icu/util/TimeZoneRule;-><init>(Ljava/lang/String;II)V
 HSPLandroid/icu/util/TimeZoneRule;->getDSTSavings()I
@@ -10241,38 +10250,38 @@
 HSPLandroid/icu/util/ULocale;-><init>(Ljava/lang/String;Ljava/util/Locale;Landroid/icu/util/ULocale-IA;)V
 HSPLandroid/icu/util/ULocale;->addLikelySubtags(Landroid/icu/util/ULocale;)Landroid/icu/util/ULocale;
 HSPLandroid/icu/util/ULocale;->appendTag(Ljava/lang/String;Ljava/lang/StringBuilder;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HSPLandroid/icu/util/ULocale;->base()Landroid/icu/impl/locale/BaseLocale;
+HSPLandroid/icu/util/ULocale;->base()Landroid/icu/impl/locale/BaseLocale;+]Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;]Landroid/icu/impl/LocaleIDParser;Landroid/icu/impl/LocaleIDParser;
 HSPLandroid/icu/util/ULocale;->canonicalize(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/icu/util/ULocale;->createCanonical(Ljava/lang/String;)Landroid/icu/util/ULocale;
 HSPLandroid/icu/util/ULocale;->createLikelySubtagsString(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/icu/util/ULocale;->createTagString(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/icu/util/ULocale;->createTagString(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->createTagString(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/icu/impl/LocaleIDParser;Landroid/icu/impl/LocaleIDParser;
 HSPLandroid/icu/util/ULocale;->equals(Ljava/lang/Object;)Z
 HSPLandroid/icu/util/ULocale;->forLocale(Ljava/util/Locale;)Landroid/icu/util/ULocale;
 HSPLandroid/icu/util/ULocale;->getBaseName()Ljava/lang/String;
 HSPLandroid/icu/util/ULocale;->getBaseName(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/icu/util/ULocale;->getCountry()Ljava/lang/String;
-HSPLandroid/icu/util/ULocale;->getDefault()Landroid/icu/util/ULocale;
+HSPLandroid/icu/util/ULocale;->getDefault()Landroid/icu/util/ULocale;+]Ljava/util/Locale;Ljava/util/Locale;
 HSPLandroid/icu/util/ULocale;->getDefault(Landroid/icu/util/ULocale$Category;)Landroid/icu/util/ULocale;
 HSPLandroid/icu/util/ULocale;->getInstance(Landroid/icu/impl/locale/BaseLocale;Landroid/icu/impl/locale/LocaleExtensions;)Landroid/icu/util/ULocale;
 HSPLandroid/icu/util/ULocale;->getKeywordValue(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/icu/util/ULocale;->getKeywordValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->getKeywordValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Landroid/icu/impl/LocaleIDParser;Landroid/icu/impl/LocaleIDParser;
 HSPLandroid/icu/util/ULocale;->getKeywords()Ljava/util/Iterator;
-HSPLandroid/icu/util/ULocale;->getKeywords(Ljava/lang/String;)Ljava/util/Iterator;
+HSPLandroid/icu/util/ULocale;->getKeywords(Ljava/lang/String;)Ljava/util/Iterator;+]Landroid/icu/impl/LocaleIDParser;Landroid/icu/impl/LocaleIDParser;
 HSPLandroid/icu/util/ULocale;->getLanguage()Ljava/lang/String;
 HSPLandroid/icu/util/ULocale;->getName()Ljava/lang/String;
-HSPLandroid/icu/util/ULocale;->getName(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->getName(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Landroid/icu/impl/CacheBase;Landroid/icu/util/ULocale$1;
 HSPLandroid/icu/util/ULocale;->getRegionForSupplementalData(Landroid/icu/util/ULocale;Z)Ljava/lang/String;
-HSPLandroid/icu/util/ULocale;->getScript()Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->getScript()Ljava/lang/String;+]Landroid/icu/impl/locale/BaseLocale;Landroid/icu/impl/locale/BaseLocale;
 HSPLandroid/icu/util/ULocale;->getShortestSubtagLength(Ljava/lang/String;)I
 HSPLandroid/icu/util/ULocale;->getVariant()Ljava/lang/String;
 HSPLandroid/icu/util/ULocale;->hashCode()I
 HSPLandroid/icu/util/ULocale;->isEmptyString(Ljava/lang/String;)Z
 HSPLandroid/icu/util/ULocale;->isKnownCanonicalizedLocale(Ljava/lang/String;)Z
 HSPLandroid/icu/util/ULocale;->isRightToLeft()Z
-HSPLandroid/icu/util/ULocale;->lookupLikelySubtags(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/icu/util/ULocale;->lookupLikelySubtags(Ljava/lang/String;)Ljava/lang/String;+]Landroid/icu/util/UResourceBundle;Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;
 HSPLandroid/icu/util/ULocale;->lscvToID(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/icu/util/ULocale;->parseTagString(Ljava/lang/String;[Ljava/lang/String;)I
+HSPLandroid/icu/util/ULocale;->parseTagString(Ljava/lang/String;[Ljava/lang/String;)I+]Landroid/icu/impl/LocaleIDParser;Landroid/icu/impl/LocaleIDParser;
 HSPLandroid/icu/util/ULocale;->setKeywordValue(Ljava/lang/String;Ljava/lang/String;)Landroid/icu/util/ULocale;
 HSPLandroid/icu/util/ULocale;->setKeywordValue(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/icu/util/ULocale;->stripLeadingUnd(Ljava/lang/String;)Ljava/lang/String;
@@ -10282,15 +10291,15 @@
 HSPLandroid/icu/util/UResourceBundle;->findTopLevel(Ljava/lang/String;)Landroid/icu/util/UResourceBundle;
 HSPLandroid/icu/util/UResourceBundle;->get(I)Landroid/icu/util/UResourceBundle;
 HSPLandroid/icu/util/UResourceBundle;->get(Ljava/lang/String;)Landroid/icu/util/UResourceBundle;
-HSPLandroid/icu/util/UResourceBundle;->getBundleInstance(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/util/UResourceBundle;
+HSPLandroid/icu/util/UResourceBundle;->getBundleInstance(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/util/UResourceBundle;+]Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;
 HSPLandroid/icu/util/UResourceBundle;->getBundleInstance(Ljava/lang/String;Ljava/lang/String;)Landroid/icu/util/UResourceBundle;
 HSPLandroid/icu/util/UResourceBundle;->getBundleInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)Landroid/icu/util/UResourceBundle;
 HSPLandroid/icu/util/UResourceBundle;->getBundleInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Z)Landroid/icu/util/UResourceBundle;
 HSPLandroid/icu/util/UResourceBundle;->getIterator()Landroid/icu/util/UResourceBundleIterator;
-HSPLandroid/icu/util/UResourceBundle;->getRootType(Ljava/lang/String;Ljava/lang/ClassLoader;)Landroid/icu/util/UResourceBundle$RootType;
+HSPLandroid/icu/util/UResourceBundle;->getRootType(Ljava/lang/String;Ljava/lang/ClassLoader;)Landroid/icu/util/UResourceBundle$RootType;+]Ljava/util/Map;Ljava/util/concurrent/ConcurrentHashMap;
 HSPLandroid/icu/util/UResourceBundle;->handleGetObject(Ljava/lang/String;)Ljava/lang/Object;
-HSPLandroid/icu/util/UResourceBundle;->handleGetObjectImpl(Ljava/lang/String;Landroid/icu/util/UResourceBundle;)Ljava/lang/Object;
-HSPLandroid/icu/util/UResourceBundle;->instantiateBundle(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Z)Landroid/icu/util/UResourceBundle;
+HSPLandroid/icu/util/UResourceBundle;->handleGetObjectImpl(Ljava/lang/String;Landroid/icu/util/UResourceBundle;)Ljava/lang/Object;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Object;Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;]Landroid/icu/util/UResourceBundle;Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;]Ljava/lang/Class;Ljava/lang/Class;
+HSPLandroid/icu/util/UResourceBundle;->instantiateBundle(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Z)Landroid/icu/util/UResourceBundle;+]Landroid/icu/util/UResourceBundle$RootType;Landroid/icu/util/UResourceBundle$RootType;
 HSPLandroid/icu/util/UResourceBundle;->resolveObject(Ljava/lang/String;Landroid/icu/util/UResourceBundle;)Ljava/lang/Object;
 HSPLandroid/icu/util/UResourceBundleIterator;-><init>(Landroid/icu/util/UResourceBundle;)V
 HSPLandroid/icu/util/UResourceBundleIterator;->hasNext()Z
@@ -10323,7 +10332,7 @@
 HSPLandroid/location/LastLocationRequest;-><clinit>()V
 HSPLandroid/location/LastLocationRequest;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/location/Location$$ExternalSyntheticLambda0;->get()Ljava/lang/Object;
-HSPLandroid/location/Location$1;->createFromParcel(Landroid/os/Parcel;)Landroid/location/Location;
+HSPLandroid/location/Location$1;->createFromParcel(Landroid/os/Parcel;)Landroid/location/Location;+]Landroid/location/Location;Landroid/location/Location;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/location/Location$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/location/Location;-><init>(Landroid/location/Location;)V
 HSPLandroid/location/Location;-><init>(Ljava/lang/String;)V
@@ -10365,8 +10374,8 @@
 HSPLandroid/location/Location;->setSpeedAccuracyMetersPerSecond(F)V
 HSPLandroid/location/Location;->setTime(J)V
 HSPLandroid/location/Location;->setVerticalAccuracyMeters(F)V
-HSPLandroid/location/Location;->toString()Ljava/lang/String;
-HSPLandroid/location/Location;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/location/Location;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/location/Location;Landroid/location/Location;
+HSPLandroid/location/Location;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/location/Location;Landroid/location/Location;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/location/LocationListener;->onLocationChanged(Ljava/util/List;)V
 HSPLandroid/location/LocationManager$LocationEnabledCache;->recompute(Ljava/lang/Integer;)Ljava/lang/Boolean;
 HSPLandroid/location/LocationManager$LocationEnabledCache;->recompute(Ljava/lang/Object;)Ljava/lang/Object;
@@ -10428,7 +10437,7 @@
 HSPLandroid/location/provider/ProviderProperties$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/location/provider/ProviderProperties;-><init>(ZZZZZZZII)V
 HSPLandroid/media/AudioAttributes$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/AudioAttributes;
-HSPLandroid/media/AudioAttributes$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/media/AudioAttributes$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/media/AudioAttributes$1;Landroid/media/AudioAttributes$1;
 HSPLandroid/media/AudioAttributes$Builder;-><init>()V
 HSPLandroid/media/AudioAttributes$Builder;-><init>(Landroid/media/AudioAttributes;)V
 HSPLandroid/media/AudioAttributes$Builder;->addTag(Ljava/lang/String;)Landroid/media/AudioAttributes$Builder;
@@ -10454,7 +10463,7 @@
 HSPLandroid/media/AudioAttributes;->-$$Nest$fputmUsage(Landroid/media/AudioAttributes;I)V
 HSPLandroid/media/AudioAttributes;-><init>()V
 HSPLandroid/media/AudioAttributes;-><init>(Landroid/media/AudioAttributes-IA;)V
-HSPLandroid/media/AudioAttributes;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/media/AudioAttributes;-><init>(Landroid/os/Parcel;)V+]Ljava/util/HashSet;Ljava/util/HashSet;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/media/AudioAttributes;->areHapticChannelsMuted()Z
 HSPLandroid/media/AudioAttributes;->equals(Ljava/lang/Object;)Z
 HSPLandroid/media/AudioAttributes;->getAllFlags()I
@@ -10464,7 +10473,7 @@
 HSPLandroid/media/AudioAttributes;->hashCode()I
 HSPLandroid/media/AudioAttributes;->isSystemUsage(I)Z
 HSPLandroid/media/AudioAttributes;->toVolumeStreamType(ZLandroid/media/AudioAttributes;)I
-HSPLandroid/media/AudioAttributes;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/media/AudioAttributes;->writeToParcel(Landroid/os/Parcel;I)V+]Ljava/util/HashSet;Ljava/util/HashSet;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/media/AudioDeviceCallback;-><init>()V
 HSPLandroid/media/AudioDeviceInfo;-><init>(Landroid/media/AudioDevicePort;)V
 HSPLandroid/media/AudioDeviceInfo;->convertInternalDeviceToDeviceType(I)I
@@ -10707,12 +10716,12 @@
 HSPLandroid/media/MediaCodec$BufferInfo;-><init>()V
 HSPLandroid/media/MediaCodec$BufferInfo;->set(IIJI)V
 HSPLandroid/media/MediaCodec$BufferMap$CodecBuffer;->free()V
-HSPLandroid/media/MediaCodec$BufferMap$CodecBuffer;->setByteBuffer(Ljava/nio/ByteBuffer;)V
+HSPLandroid/media/MediaCodec$BufferMap$CodecBuffer;->setByteBuffer(Ljava/nio/ByteBuffer;)V+]Landroid/media/MediaCodec$BufferMap$CodecBuffer;Landroid/media/MediaCodec$BufferMap$CodecBuffer;
 HSPLandroid/media/MediaCodec$BufferMap;-><init>()V
 HSPLandroid/media/MediaCodec$BufferMap;-><init>(Landroid/media/MediaCodec$BufferMap-IA;)V
 HSPLandroid/media/MediaCodec$BufferMap;->clear()V
-HSPLandroid/media/MediaCodec$BufferMap;->put(ILjava/nio/ByteBuffer;)V
-HSPLandroid/media/MediaCodec$BufferMap;->remove(I)V
+HSPLandroid/media/MediaCodec$BufferMap;->put(ILjava/nio/ByteBuffer;)V+]Landroid/media/MediaCodec$BufferMap$CodecBuffer;Landroid/media/MediaCodec$BufferMap$CodecBuffer;]Ljava/util/Map;Ljava/util/HashMap;
+HSPLandroid/media/MediaCodec$BufferMap;->remove(I)V+]Ljava/util/Map;Ljava/util/HashMap;]Landroid/media/MediaCodec$BufferMap$CodecBuffer;Landroid/media/MediaCodec$BufferMap$CodecBuffer;
 HSPLandroid/media/MediaCodec$CryptoInfo$Pattern;-><init>(II)V+]Landroid/media/MediaCodec$CryptoInfo$Pattern;Landroid/media/MediaCodec$CryptoInfo$Pattern;
 HSPLandroid/media/MediaCodec$CryptoInfo$Pattern;->set(II)V
 HSPLandroid/media/MediaCodec$CryptoInfo;-><init>()V
@@ -10727,16 +10736,16 @@
 HSPLandroid/media/MediaCodec;->dequeueOutputBuffer(Landroid/media/MediaCodec$BufferInfo;J)I
 HSPLandroid/media/MediaCodec;->finalize()V
 HSPLandroid/media/MediaCodec;->freeAllTrackedBuffers()V
-HSPLandroid/media/MediaCodec;->getInputBuffer(I)Ljava/nio/ByteBuffer;
-HSPLandroid/media/MediaCodec;->getOutputBuffer(I)Ljava/nio/ByteBuffer;
+HSPLandroid/media/MediaCodec;->getInputBuffer(I)Ljava/nio/ByteBuffer;+]Landroid/media/MediaCodec$BufferMap;Landroid/media/MediaCodec$BufferMap;
+HSPLandroid/media/MediaCodec;->getOutputBuffer(I)Ljava/nio/ByteBuffer;+]Landroid/media/MediaCodec$BufferMap;Landroid/media/MediaCodec$BufferMap;
 HSPLandroid/media/MediaCodec;->getOutputFormat()Landroid/media/MediaFormat;
 HSPLandroid/media/MediaCodec;->invalidateByteBuffers([Ljava/nio/ByteBuffer;)V
-HSPLandroid/media/MediaCodec;->lockAndGetContext()J
+HSPLandroid/media/MediaCodec;->lockAndGetContext()J+]Ljava/util/concurrent/locks/Lock;Ljava/util/concurrent/locks/ReentrantLock;
 HSPLandroid/media/MediaCodec;->queueInputBuffer(IIIJI)V
 HSPLandroid/media/MediaCodec;->release()V
 HSPLandroid/media/MediaCodec;->releaseOutputBuffer(IZ)V
-HSPLandroid/media/MediaCodec;->releaseOutputBufferInternal(IZZJ)V
-HSPLandroid/media/MediaCodec;->setAndUnlockContext(J)V
+HSPLandroid/media/MediaCodec;->releaseOutputBufferInternal(IZZJ)V+]Landroid/media/MediaCodec$BufferMap;Landroid/media/MediaCodec$BufferMap;]Ljava/util/Map;Ljava/util/HashMap;
+HSPLandroid/media/MediaCodec;->setAndUnlockContext(J)V+]Ljava/util/concurrent/locks/Lock;Ljava/util/concurrent/locks/ReentrantLock;
 HSPLandroid/media/MediaCodec;->start()V
 HSPLandroid/media/MediaCodec;->stop()V
 HSPLandroid/media/MediaCodecInfo$AudioCapabilities;->applyLevelLimits()V
@@ -10798,7 +10807,7 @@
 HSPLandroid/media/MediaCodecList;->initCodecList()V
 HSPLandroid/media/MediaDescription$1;->createFromParcel(Landroid/os/Parcel;)Landroid/media/MediaDescription;
 HSPLandroid/media/MediaDescription$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/media/MediaDescription;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/media/MediaDescription;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/text/TextUtils$1;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/media/MediaDescription;-><init>(Ljava/lang/String;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/graphics/Bitmap;Landroid/net/Uri;Landroid/os/Bundle;Landroid/net/Uri;)V
 HSPLandroid/media/MediaDescription;->toString()Ljava/lang/String;
 HSPLandroid/media/MediaFormat;-><init>()V
@@ -11325,8 +11334,8 @@
 HSPLandroid/net/TelephonyNetworkSpecifier;->hashCode()I
 HSPLandroid/net/TelephonyNetworkSpecifier;->toString()Ljava/lang/String;
 HSPLandroid/net/TelephonyNetworkSpecifier;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/net/Uri$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/Uri;
-HSPLandroid/net/Uri$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/net/Uri$1;->createFromParcel(Landroid/os/Parcel;)Landroid/net/Uri;+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/net/Uri$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/net/Uri$1;Landroid/net/Uri$1;
 HSPLandroid/net/Uri$1;->newArray(I)[Landroid/net/Uri;
 HSPLandroid/net/Uri$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/net/Uri$AbstractHierarchicalUri;-><init>()V
@@ -11342,46 +11351,46 @@
 HSPLandroid/net/Uri$AbstractHierarchicalUri;->parseUserInfo()Ljava/lang/String;
 HSPLandroid/net/Uri$AbstractPart;-><init>(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/net/Uri$AbstractPart;->getDecoded()Ljava/lang/String;
-HSPLandroid/net/Uri$AbstractPart;->writeTo(Landroid/os/Parcel;)V
+HSPLandroid/net/Uri$AbstractPart;->writeTo(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/net/Uri$Builder;-><init>()V
-HSPLandroid/net/Uri$Builder;->appendEncodedPath(Ljava/lang/String;)Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$Builder;->appendEncodedPath(Ljava/lang/String;)Landroid/net/Uri$Builder;+]Landroid/net/Uri$Builder;Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->appendPath(Ljava/lang/String;)Landroid/net/Uri$Builder;
-HSPLandroid/net/Uri$Builder;->appendQueryParameter(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$Builder;->appendQueryParameter(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri$Builder;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/net/Uri$Part;Landroid/net/Uri$Part$EmptyPart;,Landroid/net/Uri$Part;
 HSPLandroid/net/Uri$Builder;->authority(Landroid/net/Uri$Part;)Landroid/net/Uri$Builder;
-HSPLandroid/net/Uri$Builder;->authority(Ljava/lang/String;)Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$Builder;->authority(Ljava/lang/String;)Landroid/net/Uri$Builder;+]Landroid/net/Uri$Builder;Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->build()Landroid/net/Uri;
 HSPLandroid/net/Uri$Builder;->clearQuery()Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->encodedAuthority(Ljava/lang/String;)Landroid/net/Uri$Builder;
-HSPLandroid/net/Uri$Builder;->encodedFragment(Ljava/lang/String;)Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$Builder;->encodedFragment(Ljava/lang/String;)Landroid/net/Uri$Builder;+]Landroid/net/Uri$Builder;Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->encodedPath(Ljava/lang/String;)Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->encodedQuery(Ljava/lang/String;)Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->fragment(Landroid/net/Uri$Part;)Landroid/net/Uri$Builder;
-HSPLandroid/net/Uri$Builder;->fragment(Ljava/lang/String;)Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$Builder;->fragment(Ljava/lang/String;)Landroid/net/Uri$Builder;+]Landroid/net/Uri$Builder;Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->hasSchemeOrAuthority()Z
 HSPLandroid/net/Uri$Builder;->path(Landroid/net/Uri$PathPart;)Landroid/net/Uri$Builder;
-HSPLandroid/net/Uri$Builder;->path(Ljava/lang/String;)Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$Builder;->path(Ljava/lang/String;)Landroid/net/Uri$Builder;+]Landroid/net/Uri$Builder;Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->query(Landroid/net/Uri$Part;)Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->scheme(Ljava/lang/String;)Landroid/net/Uri$Builder;
 HSPLandroid/net/Uri$Builder;->toString()Ljava/lang/String;
 HSPLandroid/net/Uri$HierarchicalUri;-><init>(Ljava/lang/String;Landroid/net/Uri$Part;Landroid/net/Uri$PathPart;Landroid/net/Uri$Part;Landroid/net/Uri$Part;)V
-HSPLandroid/net/Uri$HierarchicalUri;->appendSspTo(Ljava/lang/StringBuilder;)V
-HSPLandroid/net/Uri$HierarchicalUri;->buildUpon()Landroid/net/Uri$Builder;
-HSPLandroid/net/Uri$HierarchicalUri;->getAuthority()Ljava/lang/String;
+HSPLandroid/net/Uri$HierarchicalUri;->appendSspTo(Ljava/lang/StringBuilder;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/net/Uri$Part;Landroid/net/Uri$Part;,Landroid/net/Uri$Part$EmptyPart;]Landroid/net/Uri$PathPart;Landroid/net/Uri$PathPart;
+HSPLandroid/net/Uri$HierarchicalUri;->buildUpon()Landroid/net/Uri$Builder;+]Landroid/net/Uri$Builder;Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$HierarchicalUri;->getAuthority()Ljava/lang/String;+]Landroid/net/Uri$Part;Landroid/net/Uri$Part;,Landroid/net/Uri$Part$EmptyPart;
 HSPLandroid/net/Uri$HierarchicalUri;->getEncodedAuthority()Ljava/lang/String;
-HSPLandroid/net/Uri$HierarchicalUri;->getEncodedFragment()Ljava/lang/String;
+HSPLandroid/net/Uri$HierarchicalUri;->getEncodedFragment()Ljava/lang/String;+]Landroid/net/Uri$Part;Landroid/net/Uri$Part$EmptyPart;
 HSPLandroid/net/Uri$HierarchicalUri;->getEncodedPath()Ljava/lang/String;
 HSPLandroid/net/Uri$HierarchicalUri;->getEncodedQuery()Ljava/lang/String;
 HSPLandroid/net/Uri$HierarchicalUri;->getFragment()Ljava/lang/String;
-HSPLandroid/net/Uri$HierarchicalUri;->getPath()Ljava/lang/String;
-HSPLandroid/net/Uri$HierarchicalUri;->getPathSegments()Ljava/util/List;
-HSPLandroid/net/Uri$HierarchicalUri;->getQuery()Ljava/lang/String;
+HSPLandroid/net/Uri$HierarchicalUri;->getPath()Ljava/lang/String;+]Landroid/net/Uri$PathPart;Landroid/net/Uri$PathPart;
+HSPLandroid/net/Uri$HierarchicalUri;->getPathSegments()Ljava/util/List;+]Landroid/net/Uri$PathPart;Landroid/net/Uri$PathPart;
+HSPLandroid/net/Uri$HierarchicalUri;->getQuery()Ljava/lang/String;+]Landroid/net/Uri$Part;Landroid/net/Uri$Part$EmptyPart;
 HSPLandroid/net/Uri$HierarchicalUri;->getScheme()Ljava/lang/String;
 HSPLandroid/net/Uri$HierarchicalUri;->getSchemeSpecificPart()Ljava/lang/String;
 HSPLandroid/net/Uri$HierarchicalUri;->isHierarchical()Z
-HSPLandroid/net/Uri$HierarchicalUri;->makeUriString()Ljava/lang/String;
+HSPLandroid/net/Uri$HierarchicalUri;->makeUriString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/net/Uri$Part;Landroid/net/Uri$Part$EmptyPart;
 HSPLandroid/net/Uri$HierarchicalUri;->readFrom(Landroid/os/Parcel;)Landroid/net/Uri;+]Landroid/net/Uri$Part;Landroid/net/Uri$Part$EmptyPart;,Landroid/net/Uri$Part;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/net/Uri$HierarchicalUri;->toString()Ljava/lang/String;
-HSPLandroid/net/Uri$HierarchicalUri;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/net/Uri$HierarchicalUri;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/net/Uri$Part;Landroid/net/Uri$Part$EmptyPart;,Landroid/net/Uri$Part;]Landroid/net/Uri$PathPart;Landroid/net/Uri$PathPart;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/net/Uri$OpaqueUri;-><init>(Ljava/lang/String;Landroid/net/Uri$Part;Landroid/net/Uri$Part;)V
 HSPLandroid/net/Uri$OpaqueUri;->getEncodedSchemeSpecificPart()Ljava/lang/String;
 HSPLandroid/net/Uri$OpaqueUri;->getScheme()Ljava/lang/String;
@@ -11396,27 +11405,27 @@
 HSPLandroid/net/Uri$Part;->getEncoded()Ljava/lang/String;
 HSPLandroid/net/Uri$Part;->isEmpty()Z
 HSPLandroid/net/Uri$Part;->nonNull(Landroid/net/Uri$Part;)Landroid/net/Uri$Part;
-HSPLandroid/net/Uri$Part;->readFrom(Landroid/os/Parcel;)Landroid/net/Uri$Part;
+HSPLandroid/net/Uri$Part;->readFrom(Landroid/os/Parcel;)Landroid/net/Uri$Part;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/net/Uri$PathPart;-><init>(Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/net/Uri$PathPart;->appendDecodedSegment(Landroid/net/Uri$PathPart;Ljava/lang/String;)Landroid/net/Uri$PathPart;
-HSPLandroid/net/Uri$PathPart;->appendEncodedSegment(Landroid/net/Uri$PathPart;Ljava/lang/String;)Landroid/net/Uri$PathPart;
+HSPLandroid/net/Uri$PathPart;->appendEncodedSegment(Landroid/net/Uri$PathPart;Ljava/lang/String;)Landroid/net/Uri$PathPart;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/net/Uri$PathPart;Landroid/net/Uri$PathPart;
 HSPLandroid/net/Uri$PathPart;->from(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri$PathPart;
 HSPLandroid/net/Uri$PathPart;->fromDecoded(Ljava/lang/String;)Landroid/net/Uri$PathPart;
 HSPLandroid/net/Uri$PathPart;->fromEncoded(Ljava/lang/String;)Landroid/net/Uri$PathPart;
 HSPLandroid/net/Uri$PathPart;->getEncoded()Ljava/lang/String;
-HSPLandroid/net/Uri$PathPart;->getPathSegments()Landroid/net/Uri$PathSegments;
+HSPLandroid/net/Uri$PathPart;->getPathSegments()Landroid/net/Uri$PathSegments;+]Ljava/lang/String;Ljava/lang/String;]Landroid/net/Uri$PathSegmentsBuilder;Landroid/net/Uri$PathSegmentsBuilder;]Landroid/net/Uri$PathPart;Landroid/net/Uri$PathPart;
 HSPLandroid/net/Uri$PathPart;->makeAbsolute(Landroid/net/Uri$PathPart;)Landroid/net/Uri$PathPart;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/net/Uri$PathPart;->readFrom(Landroid/os/Parcel;)Landroid/net/Uri$PathPart;
 HSPLandroid/net/Uri$PathPart;->readFrom(ZLandroid/os/Parcel;)Landroid/net/Uri$PathPart;
 HSPLandroid/net/Uri$PathSegments;-><init>([Ljava/lang/String;I)V
-HSPLandroid/net/Uri$PathSegments;->get(I)Ljava/lang/Object;
+HSPLandroid/net/Uri$PathSegments;->get(I)Ljava/lang/Object;+]Landroid/net/Uri$PathSegments;Landroid/net/Uri$PathSegments;
 HSPLandroid/net/Uri$PathSegments;->get(I)Ljava/lang/String;
 HSPLandroid/net/Uri$PathSegments;->size()I
 HSPLandroid/net/Uri$PathSegmentsBuilder;->add(Ljava/lang/String;)V
 HSPLandroid/net/Uri$PathSegmentsBuilder;->build()Landroid/net/Uri$PathSegments;
 HSPLandroid/net/Uri$StringUri;-><init>(Ljava/lang/String;)V
 HSPLandroid/net/Uri$StringUri;-><init>(Ljava/lang/String;Landroid/net/Uri$StringUri-IA;)V
-HSPLandroid/net/Uri$StringUri;->buildUpon()Landroid/net/Uri$Builder;
+HSPLandroid/net/Uri$StringUri;->buildUpon()Landroid/net/Uri$Builder;+]Landroid/net/Uri$Builder;Landroid/net/Uri$Builder;]Landroid/net/Uri$StringUri;Landroid/net/Uri$StringUri;
 HSPLandroid/net/Uri$StringUri;->findFragmentSeparator()I
 HSPLandroid/net/Uri$StringUri;->findSchemeSeparator()I
 HSPLandroid/net/Uri$StringUri;->getAuthority()Ljava/lang/String;
@@ -11436,14 +11445,14 @@
 HSPLandroid/net/Uri$StringUri;->getSchemeSpecificPart()Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->isHierarchical()Z
 HSPLandroid/net/Uri$StringUri;->isRelative()Z
-HSPLandroid/net/Uri$StringUri;->parseAuthority(Ljava/lang/String;I)Ljava/lang/String;
+HSPLandroid/net/Uri$StringUri;->parseAuthority(Ljava/lang/String;I)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->parseFragment()Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->parsePath()Ljava/lang/String;
-HSPLandroid/net/Uri$StringUri;->parsePath(Ljava/lang/String;I)Ljava/lang/String;
+HSPLandroid/net/Uri$StringUri;->parsePath(Ljava/lang/String;I)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->parseQuery()Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->parseScheme()Ljava/lang/String;
 HSPLandroid/net/Uri$StringUri;->toString()Ljava/lang/String;
-HSPLandroid/net/Uri$StringUri;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/net/Uri$StringUri;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/net/Uri;-><init>()V
 HSPLandroid/net/Uri;-><init>(Landroid/net/Uri-IA;)V
 HSPLandroid/net/Uri;->checkContentUriWithoutPermission(Ljava/lang/String;I)V
@@ -11453,23 +11462,23 @@
 HSPLandroid/net/Uri;->decode(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/net/Uri;->encode(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/net/Uri;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HSPLandroid/net/Uri;->equals(Ljava/lang/Object;)Z
+HSPLandroid/net/Uri;->equals(Ljava/lang/Object;)Z+]Landroid/net/Uri;Landroid/net/Uri$OpaqueUri;,Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;
 HSPLandroid/net/Uri;->fromFile(Ljava/io/File;)Landroid/net/Uri;
 HSPLandroid/net/Uri;->fromParts(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;
 HSPLandroid/net/Uri;->getBooleanQueryParameter(Ljava/lang/String;Z)Z
 HSPLandroid/net/Uri;->getQueryParameter(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;
 HSPLandroid/net/Uri;->getQueryParameterNames()Ljava/util/Set;
-HSPLandroid/net/Uri;->hashCode()I
+HSPLandroid/net/Uri;->hashCode()I+]Ljava/lang/String;Ljava/lang/String;]Landroid/net/Uri;Landroid/net/Uri$StringUri;
 HSPLandroid/net/Uri;->isAbsolute()Z
 HSPLandroid/net/Uri;->isAllowed(CLjava/lang/String;)Z
 HSPLandroid/net/Uri;->isOpaque()Z
 HSPLandroid/net/Uri;->normalizeScheme()Landroid/net/Uri;
 HSPLandroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri;
 HSPLandroid/net/Uri;->toSafeString()Ljava/lang/String;
-HSPLandroid/net/Uri;->withAppendedPath(Landroid/net/Uri;Ljava/lang/String;)Landroid/net/Uri;
-HSPLandroid/net/Uri;->writeToParcel(Landroid/os/Parcel;Landroid/net/Uri;)V
-HSPLandroid/net/UriCodec;->appendDecoded(Ljava/lang/StringBuilder;Ljava/lang/String;ZLjava/nio/charset/Charset;Z)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/nio/charset/Charset;Lcom/android/icu/charset/CharsetICU;]Ljava/nio/charset/CharsetDecoder;Lcom/android/icu/charset/CharsetDecoderICU;]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
-HSPLandroid/net/UriCodec;->decode(Ljava/lang/String;ZLjava/nio/charset/Charset;Z)Ljava/lang/String;
+HSPLandroid/net/Uri;->withAppendedPath(Landroid/net/Uri;Ljava/lang/String;)Landroid/net/Uri;+]Landroid/net/Uri$Builder;Landroid/net/Uri$Builder;]Landroid/net/Uri;Landroid/net/Uri$StringUri;,Landroid/net/Uri$HierarchicalUri;
+HSPLandroid/net/Uri;->writeToParcel(Landroid/os/Parcel;Landroid/net/Uri;)V+]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/net/Uri;Landroid/net/Uri$OpaqueUri;,Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;
+HSPLandroid/net/UriCodec;->appendDecoded(Ljava/lang/StringBuilder;Ljava/lang/String;ZLjava/nio/charset/Charset;Z)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/nio/charset/Charset;Lcom/android/icu/charset/CharsetICU;]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;]Ljava/nio/charset/CharsetDecoder;Lcom/android/icu/charset/CharsetDecoderICU;
+HSPLandroid/net/UriCodec;->decode(Ljava/lang/String;ZLjava/nio/charset/Charset;Z)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/net/UriCodec;->flushDecodingByteAccumulator(Ljava/lang/StringBuilder;Ljava/nio/charset/CharsetDecoder;Ljava/nio/ByteBuffer;Z)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;]Ljava/nio/charset/CharsetDecoder;Lcom/android/icu/charset/CharsetDecoderICU;
 HSPLandroid/net/UriCodec;->getNextCharacter(Ljava/lang/String;IILjava/lang/String;)C
 HSPLandroid/net/UriCodec;->hexCharToValue(C)I
@@ -11515,7 +11524,7 @@
 HSPLandroid/opengl/EGLDisplay;-><init>(J)V
 HSPLandroid/opengl/EGLObjectHandle;->getNativeHandle()J
 HSPLandroid/opengl/EGLSurface;-><init>(J)V
-HSPLandroid/opengl/GLES20;->glVertexAttribPointer(IIIZILjava/nio/Buffer;)V
+HSPLandroid/opengl/GLES20;->glVertexAttribPointer(IIIZILjava/nio/Buffer;)V+]Ljava/nio/Buffer;Ljava/nio/ByteBufferAsFloatBuffer;
 HSPLandroid/opengl/Matrix;->setIdentityM([FI)V
 HSPLandroid/os/AsyncTask$1;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;
 HSPLandroid/os/AsyncTask$3;-><init>(Landroid/os/AsyncTask;)V
@@ -11550,70 +11559,70 @@
 HSPLandroid/os/BaseBundle;-><init>()V
 HSPLandroid/os/BaseBundle;-><init>(I)V
 HSPLandroid/os/BaseBundle;-><init>(Landroid/os/BaseBundle;)V
-HSPLandroid/os/BaseBundle;-><init>(Landroid/os/BaseBundle;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/PersistableBundle;,Landroid/os/Bundle;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/BaseBundle;-><init>(Landroid/os/BaseBundle;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/os/BaseBundle;Landroid/os/Bundle;,Landroid/os/PersistableBundle;
 HSPLandroid/os/BaseBundle;-><init>(Landroid/os/Parcel;I)V
-HSPLandroid/os/BaseBundle;-><init>(Ljava/lang/ClassLoader;I)V
+HSPLandroid/os/BaseBundle;-><init>(Ljava/lang/ClassLoader;I)V+]Ljava/lang/Object;Landroid/os/Bundle;,Landroid/os/PersistableBundle;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/os/BaseBundle;->clear()V
-HSPLandroid/os/BaseBundle;->containsKey(Ljava/lang/String;)Z
-HSPLandroid/os/BaseBundle;->deepCopyValue(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroid/os/BaseBundle;->get(Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroid/os/BaseBundle;->containsKey(Ljava/lang/String;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/PersistableBundle;,Landroid/os/Bundle;
+HSPLandroid/os/BaseBundle;->deepCopyValue(Ljava/lang/Object;)Ljava/lang/Object;+]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/lang/Object;missing_types]Ljava/lang/Class;Ljava/lang/Class;
+HSPLandroid/os/BaseBundle;->get(Ljava/lang/String;)Ljava/lang/Object;+]Landroid/os/BaseBundle;Landroid/os/PersistableBundle;,Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->get(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->getArrayList(Ljava/lang/String;Ljava/lang/Class;)Ljava/util/ArrayList;+]Landroid/os/BaseBundle;Landroid/os/Bundle;
-HSPLandroid/os/BaseBundle;->getBoolean(Ljava/lang/String;)Z
-HSPLandroid/os/BaseBundle;->getBoolean(Ljava/lang/String;Z)Z
+HSPLandroid/os/BaseBundle;->getBoolean(Ljava/lang/String;)Z+]Landroid/os/BaseBundle;Landroid/os/Bundle;
+HSPLandroid/os/BaseBundle;->getBoolean(Ljava/lang/String;Z)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Landroid/os/BaseBundle;Landroid/os/Bundle;,Landroid/os/PersistableBundle;
 HSPLandroid/os/BaseBundle;->getBooleanArray(Ljava/lang/String;)[Z
-HSPLandroid/os/BaseBundle;->getByteArray(Ljava/lang/String;)[B
+HSPLandroid/os/BaseBundle;->getByteArray(Ljava/lang/String;)[B+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->getCharSequence(Ljava/lang/String;)Ljava/lang/CharSequence;
 HSPLandroid/os/BaseBundle;->getCharSequenceArray(Ljava/lang/String;)[Ljava/lang/CharSequence;
 HSPLandroid/os/BaseBundle;->getFloat(Ljava/lang/String;F)F
-HSPLandroid/os/BaseBundle;->getInt(Ljava/lang/String;)I
-HSPLandroid/os/BaseBundle;->getInt(Ljava/lang/String;I)I
+HSPLandroid/os/BaseBundle;->getInt(Ljava/lang/String;)I+]Landroid/os/BaseBundle;Landroid/os/Bundle;
+HSPLandroid/os/BaseBundle;->getInt(Ljava/lang/String;I)I+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->getIntArray(Ljava/lang/String;)[I
 HSPLandroid/os/BaseBundle;->getIntegerArrayList(Ljava/lang/String;)Ljava/util/ArrayList;
 HSPLandroid/os/BaseBundle;->getLong(Ljava/lang/String;)J
-HSPLandroid/os/BaseBundle;->getLong(Ljava/lang/String;J)J
+HSPLandroid/os/BaseBundle;->getLong(Ljava/lang/String;J)J+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Long;Ljava/lang/Long;]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->getLongArray(Ljava/lang/String;)[J
 HSPLandroid/os/BaseBundle;->getSerializable(Ljava/lang/String;)Ljava/io/Serializable;
-HSPLandroid/os/BaseBundle;->getString(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/os/BaseBundle;->getString(Ljava/lang/String;)Ljava/lang/String;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;,Landroid/os/PersistableBundle;
 HSPLandroid/os/BaseBundle;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/os/BaseBundle;->getStringArray(Ljava/lang/String;)[Ljava/lang/String;
+HSPLandroid/os/BaseBundle;->getStringArray(Ljava/lang/String;)[Ljava/lang/String;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->getStringArrayList(Ljava/lang/String;)Ljava/util/ArrayList;
-HSPLandroid/os/BaseBundle;->getValue(Ljava/lang/String;)Ljava/lang/Object;+]Landroid/os/BaseBundle;Landroid/os/PersistableBundle;,Landroid/os/Bundle;
-HSPLandroid/os/BaseBundle;->getValue(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/os/BaseBundle;Landroid/os/PersistableBundle;,Landroid/os/Bundle;
-HSPLandroid/os/BaseBundle;->getValue(Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/PersistableBundle;,Landroid/os/Bundle;
+HSPLandroid/os/BaseBundle;->getValue(Ljava/lang/String;)Ljava/lang/Object;+]Landroid/os/BaseBundle;Landroid/os/Bundle;,Landroid/os/PersistableBundle;
+HSPLandroid/os/BaseBundle;->getValue(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/os/BaseBundle;Landroid/os/Bundle;,Landroid/os/PersistableBundle;
+HSPLandroid/os/BaseBundle;->getValue(Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;,Landroid/os/PersistableBundle;
 HSPLandroid/os/BaseBundle;->getValueAt(ILjava/lang/Class;[Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/function/BiFunction;Landroid/os/Parcel$LazyValue;]Ljava/lang/Class;Ljava/lang/Class;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HSPLandroid/os/BaseBundle;->initializeFromParcelLocked(Landroid/os/Parcel;ZZ)V
-HSPLandroid/os/BaseBundle;->isEmpty()Z
+HSPLandroid/os/BaseBundle;->initializeFromParcelLocked(Landroid/os/Parcel;ZZ)V+]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HSPLandroid/os/BaseBundle;->isEmpty()Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->isEmptyParcel()Z
 HSPLandroid/os/BaseBundle;->isEmptyParcel(Landroid/os/Parcel;)Z
 HSPLandroid/os/BaseBundle;->isParcelled()Z
-HSPLandroid/os/BaseBundle;->keySet()Ljava/util/Set;
+HSPLandroid/os/BaseBundle;->keySet()Ljava/util/Set;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;,Landroid/os/PersistableBundle;
 HSPLandroid/os/BaseBundle;->putAll(Landroid/os/PersistableBundle;)V
-HSPLandroid/os/BaseBundle;->putBoolean(Ljava/lang/String;Z)V
+HSPLandroid/os/BaseBundle;->putBoolean(Ljava/lang/String;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->putBooleanArray(Ljava/lang/String;[Z)V
 HSPLandroid/os/BaseBundle;->putByteArray(Ljava/lang/String;[B)V
-HSPLandroid/os/BaseBundle;->putCharSequence(Ljava/lang/String;Ljava/lang/CharSequence;)V
-HSPLandroid/os/BaseBundle;->putCharSequenceArray(Ljava/lang/String;[Ljava/lang/CharSequence;)V
+HSPLandroid/os/BaseBundle;->putCharSequence(Ljava/lang/String;Ljava/lang/CharSequence;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
+HSPLandroid/os/BaseBundle;->putCharSequenceArray(Ljava/lang/String;[Ljava/lang/CharSequence;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->putDouble(Ljava/lang/String;D)V
 HSPLandroid/os/BaseBundle;->putFloat(Ljava/lang/String;F)V
-HSPLandroid/os/BaseBundle;->putInt(Ljava/lang/String;I)V
+HSPLandroid/os/BaseBundle;->putInt(Ljava/lang/String;I)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->putIntArray(Ljava/lang/String;[I)V
 HSPLandroid/os/BaseBundle;->putLong(Ljava/lang/String;J)V
 HSPLandroid/os/BaseBundle;->putLongArray(Ljava/lang/String;[J)V
 HSPLandroid/os/BaseBundle;->putSerializable(Ljava/lang/String;Ljava/io/Serializable;)V
-HSPLandroid/os/BaseBundle;->putString(Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroid/os/BaseBundle;->putStringArray(Ljava/lang/String;[Ljava/lang/String;)V
+HSPLandroid/os/BaseBundle;->putString(Ljava/lang/String;Ljava/lang/String;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
+HSPLandroid/os/BaseBundle;->putStringArray(Ljava/lang/String;[Ljava/lang/String;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
 HSPLandroid/os/BaseBundle;->putStringArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V
 HSPLandroid/os/BaseBundle;->readFromParcelInner(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/os/BaseBundle;->readFromParcelInner(Landroid/os/Parcel;I)V
-HSPLandroid/os/BaseBundle;->recycleParcel(Landroid/os/Parcel;)V
+HSPLandroid/os/BaseBundle;->readFromParcelInner(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/BaseBundle;->recycleParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/BaseBundle;->remove(Ljava/lang/String;)V
 HSPLandroid/os/BaseBundle;->setClassLoader(Ljava/lang/ClassLoader;)V
 HSPLandroid/os/BaseBundle;->setShouldDefuse(Z)V
-HSPLandroid/os/BaseBundle;->size()I
-HSPLandroid/os/BaseBundle;->unparcel()V+]Landroid/os/BaseBundle;Landroid/os/Bundle;
+HSPLandroid/os/BaseBundle;->size()I+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
+HSPLandroid/os/BaseBundle;->unparcel()V+]Landroid/os/BaseBundle;Landroid/os/Bundle;,Landroid/os/PersistableBundle;
 HSPLandroid/os/BaseBundle;->unparcel(Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/BaseBundle;Landroid/os/Bundle;
-HSPLandroid/os/BaseBundle;->writeToParcelInner(Landroid/os/Parcel;I)V
+HSPLandroid/os/BaseBundle;->writeToParcelInner(Landroid/os/Parcel;I)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/BatteryManager;-><init>(Landroid/content/Context;Lcom/android/internal/app/IBatteryStats;Landroid/os/IBatteryPropertiesRegistrar;)V
 HSPLandroid/os/BatteryManager;->getIntProperty(I)I
 HSPLandroid/os/BatteryManager;->getLongProperty(I)J
@@ -11649,7 +11658,7 @@
 HSPLandroid/os/Binder$PropagateWorkSourceTransactListener;->onTransactStarted(Landroid/os/IBinder;I)Ljava/lang/Object;
 HSPLandroid/os/Binder$ProxyTransactListener;->onTransactStarted(Landroid/os/IBinder;II)Ljava/lang/Object;+]Landroid/os/Binder$ProxyTransactListener;Landroid/os/Binder$PropagateWorkSourceTransactListener;
 HSPLandroid/os/Binder;-><init>()V
-HSPLandroid/os/Binder;-><init>(Ljava/lang/String;)V
+HSPLandroid/os/Binder;-><init>(Ljava/lang/String;)V+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
 HSPLandroid/os/Binder;->allowBlocking(Landroid/os/IBinder;)Landroid/os/IBinder;
 HSPLandroid/os/Binder;->attachInterface(Landroid/os/IInterface;Ljava/lang/String;)V
 HSPLandroid/os/Binder;->checkParcel(Landroid/os/IBinder;ILandroid/os/Parcel;Ljava/lang/String;)V
@@ -11658,7 +11667,7 @@
 HSPLandroid/os/Binder;->doDump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLandroid/os/Binder;->dump(Ljava/io/FileDescriptor;[Ljava/lang/String;)V
 HSPLandroid/os/Binder;->execTransact(IJJI)Z
-HSPLandroid/os/Binder;->execTransactInternal(IJJII)Z
+HSPLandroid/os/Binder;->execTransactInternal(IJJII)Z+]Landroid/os/Binder;megamorphic_types]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Binder;->getCallingUserHandle()Landroid/os/UserHandle;
 HSPLandroid/os/Binder;->getInterfaceDescriptor()Ljava/lang/String;
 HSPLandroid/os/Binder;->isBinderAlive()Z
@@ -11667,7 +11676,7 @@
 HSPLandroid/os/Binder;->pingBinder()Z
 HSPLandroid/os/Binder;->queryLocalInterface(Ljava/lang/String;)Landroid/os/IInterface;
 HSPLandroid/os/Binder;->setProxyTransactListener(Landroid/os/Binder$ProxyTransactListener;)V
-HSPLandroid/os/Binder;->transact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/os/Binder;->transact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Binder;->unlinkToDeath(Landroid/os/IBinder$DeathRecipient;I)Z
 HSPLandroid/os/Binder;->withCleanCallingIdentity(Lcom/android/internal/util/FunctionalUtils$ThrowingRunnable;)V
 HSPLandroid/os/BinderProxy$ProxyMap;->get(J)Landroid/os/BinderProxy;+]Ljava/lang/Long;Ljava/lang/Long;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -11675,7 +11684,7 @@
 HSPLandroid/os/BinderProxy$ProxyMap;->remove(II)V
 HSPLandroid/os/BinderProxy$ProxyMap;->set(JLandroid/os/BinderProxy;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/os/BinderProxy;-><init>(J)V
-HSPLandroid/os/BinderProxy;->getInstance(JJ)Landroid/os/BinderProxy;
+HSPLandroid/os/BinderProxy;->getInstance(JJ)Landroid/os/BinderProxy;+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;]Landroid/os/BinderProxy$ProxyMap;Landroid/os/BinderProxy$ProxyMap;
 HSPLandroid/os/BinderProxy;->queryLocalInterface(Ljava/lang/String;)Landroid/os/IInterface;
 HSPLandroid/os/BinderProxy;->sendDeathNotice(Landroid/os/IBinder$DeathRecipient;Landroid/os/IBinder;)V
 HSPLandroid/os/BinderProxy;->transact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z+]Landroid/os/BinderProxy;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
@@ -11703,21 +11712,21 @@
 HSPLandroid/os/Bundle;->deepCopy()Landroid/os/Bundle;
 HSPLandroid/os/Bundle;->forPair(Ljava/lang/String;Ljava/lang/String;)Landroid/os/Bundle;
 HSPLandroid/os/Bundle;->getBinder(Ljava/lang/String;)Landroid/os/IBinder;
-HSPLandroid/os/Bundle;->getBundle(Ljava/lang/String;)Landroid/os/Bundle;
+HSPLandroid/os/Bundle;->getBundle(Ljava/lang/String;)Landroid/os/Bundle;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/os/Bundle;->getByteArray(Ljava/lang/String;)[B
 HSPLandroid/os/Bundle;->getCharSequence(Ljava/lang/String;)Ljava/lang/CharSequence;
 HSPLandroid/os/Bundle;->getFloat(Ljava/lang/String;)F
 HSPLandroid/os/Bundle;->getFloat(Ljava/lang/String;F)F
 HSPLandroid/os/Bundle;->getIntegerArrayList(Ljava/lang/String;)Ljava/util/ArrayList;
-HSPLandroid/os/Bundle;->getParcelable(Ljava/lang/String;)Landroid/os/Parcelable;
-HSPLandroid/os/Bundle;->getParcelableArray(Ljava/lang/String;)[Landroid/os/Parcelable;
+HSPLandroid/os/Bundle;->getParcelable(Ljava/lang/String;)Landroid/os/Parcelable;+]Landroid/os/Bundle;Landroid/os/Bundle;
+HSPLandroid/os/Bundle;->getParcelableArray(Ljava/lang/String;)[Landroid/os/Parcelable;+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/os/Bundle;->getParcelableArrayList(Ljava/lang/String;)Ljava/util/ArrayList;
 HSPLandroid/os/Bundle;->getSerializable(Ljava/lang/String;)Ljava/io/Serializable;
 HSPLandroid/os/Bundle;->getSparseParcelableArray(Ljava/lang/String;)Landroid/util/SparseArray;
 HSPLandroid/os/Bundle;->getStringArrayList(Ljava/lang/String;)Ljava/util/ArrayList;
 HSPLandroid/os/Bundle;->hasFileDescriptors()Z
-HSPLandroid/os/Bundle;->maybePrefillHasFds()V
-HSPLandroid/os/Bundle;->putAll(Landroid/os/Bundle;)V
+HSPLandroid/os/Bundle;->maybePrefillHasFds()V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Bundle;->putAll(Landroid/os/Bundle;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/os/Bundle;->putBinder(Ljava/lang/String;Landroid/os/IBinder;)V
 HSPLandroid/os/Bundle;->putBundle(Ljava/lang/String;Landroid/os/Bundle;)V
 HSPLandroid/os/Bundle;->putByteArray(Ljava/lang/String;[B)V
@@ -11725,8 +11734,8 @@
 HSPLandroid/os/Bundle;->putCharSequenceArray(Ljava/lang/String;[Ljava/lang/CharSequence;)V
 HSPLandroid/os/Bundle;->putFloat(Ljava/lang/String;F)V
 HSPLandroid/os/Bundle;->putIntegerArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V
-HSPLandroid/os/Bundle;->putParcelable(Ljava/lang/String;Landroid/os/Parcelable;)V
-HSPLandroid/os/Bundle;->putParcelableArray(Ljava/lang/String;[Landroid/os/Parcelable;)V
+HSPLandroid/os/Bundle;->putParcelable(Ljava/lang/String;Landroid/os/Parcelable;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Bundle;Landroid/os/Bundle;
+HSPLandroid/os/Bundle;->putParcelableArray(Ljava/lang/String;[Landroid/os/Parcelable;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/os/Bundle;->putParcelableArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V
 HSPLandroid/os/Bundle;->putParcelableList(Ljava/lang/String;Ljava/util/List;)V
 HSPLandroid/os/Bundle;->putSerializable(Ljava/lang/String;Ljava/io/Serializable;)V
@@ -11736,10 +11745,10 @@
 HSPLandroid/os/Bundle;->remove(Ljava/lang/String;)V
 HSPLandroid/os/Bundle;->setAllowFds(Z)Z
 HSPLandroid/os/Bundle;->setClassLoader(Ljava/lang/ClassLoader;)V
-HSPLandroid/os/Bundle;->setDefusable(Landroid/os/Bundle;Z)Landroid/os/Bundle;
+HSPLandroid/os/Bundle;->setDefusable(Landroid/os/Bundle;Z)Landroid/os/Bundle;+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLandroid/os/Bundle;->setDefusable(Z)V
-HSPLandroid/os/Bundle;->toString()Ljava/lang/String;
-HSPLandroid/os/Bundle;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/os/Bundle;->toString()Ljava/lang/String;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLandroid/os/Bundle;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/CancellationSignal$Transport;-><init>()V
 HSPLandroid/os/CancellationSignal$Transport;->cancel()V
 HSPLandroid/os/CancellationSignal;-><init>()V
@@ -11832,8 +11841,8 @@
 HSPLandroid/os/Environment$UserEnvironment;->buildExternalStorageAppFilesDirs(Ljava/lang/String;)[Ljava/io/File;+]Landroid/os/Environment$UserEnvironment;Landroid/os/Environment$UserEnvironment;
 HSPLandroid/os/Environment$UserEnvironment;->buildExternalStorageAppMediaDirs(Ljava/lang/String;)[Ljava/io/File;
 HSPLandroid/os/Environment$UserEnvironment;->buildExternalStoragePublicDirs(Ljava/lang/String;)[Ljava/io/File;
-HSPLandroid/os/Environment$UserEnvironment;->getExternalDirs()[Ljava/io/File;
-HSPLandroid/os/Environment;->buildExternalStorageAppFilesDirs(Ljava/lang/String;)[Ljava/io/File;
+HSPLandroid/os/Environment$UserEnvironment;->getExternalDirs()[Ljava/io/File;+]Landroid/os/storage/StorageVolume;Landroid/os/storage/StorageVolume;
+HSPLandroid/os/Environment;->buildExternalStorageAppFilesDirs(Ljava/lang/String;)[Ljava/io/File;+]Landroid/os/Environment$UserEnvironment;Landroid/os/Environment$UserEnvironment;
 HSPLandroid/os/Environment;->buildExternalStorageAppMediaDirs(Ljava/lang/String;)[Ljava/io/File;
 HSPLandroid/os/Environment;->buildPath(Ljava/io/File;[Ljava/lang/String;)Ljava/io/File;
 HSPLandroid/os/Environment;->buildPaths([Ljava/io/File;[Ljava/lang/String;)[Ljava/io/File;
@@ -11923,7 +11932,7 @@
 HSPLandroid/os/Handler;-><init>(Landroid/os/Looper;Landroid/os/Handler$Callback;Z)V
 HSPLandroid/os/Handler;-><init>(Z)V
 HSPLandroid/os/Handler;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
-HSPLandroid/os/Handler;->dispatchMessage(Landroid/os/Message;)V+]Landroid/os/Handler;missing_types]Landroid/os/Handler$Callback;missing_types
+HSPLandroid/os/Handler;->dispatchMessage(Landroid/os/Message;)V+]Landroid/os/Handler;megamorphic_types]Landroid/os/Handler$Callback;missing_types
 HSPLandroid/os/Handler;->enqueueMessage(Landroid/os/MessageQueue;Landroid/os/Message;J)Z+]Landroid/os/Message;Landroid/os/Message;]Landroid/os/MessageQueue;Landroid/os/MessageQueue;
 HSPLandroid/os/Handler;->executeOrSendMessage(Landroid/os/Message;)Z
 HSPLandroid/os/Handler;->getIMessenger()Landroid/os/IMessenger;
@@ -11935,7 +11944,7 @@
 HSPLandroid/os/Handler;->handleCallback(Landroid/os/Message;)V+]Ljava/lang/Runnable;missing_types
 HSPLandroid/os/Handler;->handleMessage(Landroid/os/Message;)V
 HSPLandroid/os/Handler;->hasCallbacks(Ljava/lang/Runnable;)Z
-HSPLandroid/os/Handler;->hasMessages(I)Z
+HSPLandroid/os/Handler;->hasMessages(I)Z+]Landroid/os/MessageQueue;Landroid/os/MessageQueue;
 HSPLandroid/os/Handler;->hasMessages(ILjava/lang/Object;)Z
 HSPLandroid/os/Handler;->obtainMessage()Landroid/os/Message;
 HSPLandroid/os/Handler;->obtainMessage(I)Landroid/os/Message;
@@ -11946,17 +11955,17 @@
 HSPLandroid/os/Handler;->postAtFrontOfQueue(Ljava/lang/Runnable;)Z
 HSPLandroid/os/Handler;->postAtTime(Ljava/lang/Runnable;J)Z
 HSPLandroid/os/Handler;->postAtTime(Ljava/lang/Runnable;Ljava/lang/Object;J)Z
-HSPLandroid/os/Handler;->postDelayed(Ljava/lang/Runnable;IJ)Z
-HSPLandroid/os/Handler;->postDelayed(Ljava/lang/Runnable;J)Z+]Landroid/os/Handler;Landroid/os/Handler;,Landroid/app/ActivityThread$H;
+HSPLandroid/os/Handler;->postDelayed(Ljava/lang/Runnable;IJ)Z+]Landroid/os/Handler;Landroid/os/Handler;]Landroid/os/Message;Landroid/os/Message;
+HSPLandroid/os/Handler;->postDelayed(Ljava/lang/Runnable;J)Z+]Landroid/os/Handler;Landroid/os/Handler;,Landroid/view/ViewRootImpl$ViewRootHandler;,Landroid/app/ActivityThread$H;
 HSPLandroid/os/Handler;->postDelayed(Ljava/lang/Runnable;Ljava/lang/Object;J)Z
-HSPLandroid/os/Handler;->removeCallbacks(Ljava/lang/Runnable;)V
-HSPLandroid/os/Handler;->removeCallbacksAndMessages(Ljava/lang/Object;)V
+HSPLandroid/os/Handler;->removeCallbacks(Ljava/lang/Runnable;)V+]Landroid/os/MessageQueue;Landroid/os/MessageQueue;
+HSPLandroid/os/Handler;->removeCallbacksAndMessages(Ljava/lang/Object;)V+]Landroid/os/MessageQueue;Landroid/os/MessageQueue;
 HSPLandroid/os/Handler;->removeMessages(I)V
-HSPLandroid/os/Handler;->removeMessages(ILjava/lang/Object;)V
-HSPLandroid/os/Handler;->sendEmptyMessage(I)Z+]Landroid/os/Handler;Landroid/os/Handler;,Landroid/view/ViewRootImpl$ViewRootHandler;,Landroid/app/QueuedWork$QueuedWorkHandler;
-HSPLandroid/os/Handler;->sendEmptyMessageAtTime(IJ)Z
+HSPLandroid/os/Handler;->removeMessages(ILjava/lang/Object;)V+]Landroid/os/MessageQueue;Landroid/os/MessageQueue;
+HSPLandroid/os/Handler;->sendEmptyMessage(I)Z+]Landroid/os/Handler;Landroid/os/Handler;,Landroid/view/ViewRootImpl$ViewRootHandler;,Landroid/app/QueuedWork$QueuedWorkHandler;,Landroid/graphics/SurfaceTexture$1;
+HSPLandroid/os/Handler;->sendEmptyMessageAtTime(IJ)Z+]Landroid/os/Handler;missing_types
 HSPLandroid/os/Handler;->sendEmptyMessageDelayed(IJ)Z+]Landroid/os/Handler;megamorphic_types
-HSPLandroid/os/Handler;->sendMessage(Landroid/os/Message;)Z
+HSPLandroid/os/Handler;->sendMessage(Landroid/os/Message;)Z+]Landroid/os/Handler;megamorphic_types
 HSPLandroid/os/Handler;->sendMessageAtFrontOfQueue(Landroid/os/Message;)Z
 HSPLandroid/os/Handler;->sendMessageAtTime(Landroid/os/Message;J)Z
 HSPLandroid/os/Handler;->sendMessageDelayed(Landroid/os/Message;J)Z+]Landroid/os/Handler;megamorphic_types
@@ -12012,8 +12021,8 @@
 HSPLandroid/os/IMessenger$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IMessenger;
 HSPLandroid/os/IMessenger$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/os/INetworkManagementService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLandroid/os/INetworkManagementService$Stub$Proxy;->setUidCleartextNetworkPolicy(II)V
-HSPLandroid/os/INetworkManagementService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/INetworkManagementService;
+HSPLandroid/os/INetworkManagementService$Stub$Proxy;->setUidCleartextNetworkPolicy(II)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/INetworkManagementService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/INetworkManagementService;+]Landroid/os/IBinder;Landroid/os/BinderProxy;
 HSPLandroid/os/IPowerManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/os/IPowerManager$Stub$Proxy;->acquireWakeLock(Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;Ljava/lang/String;ILandroid/os/IWakeLockCallback;)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/IPowerManager$Stub$Proxy;->getPowerSaveState(I)Landroid/os/PowerSaveState;
@@ -12021,7 +12030,7 @@
 HSPLandroid/os/IPowerManager$Stub$Proxy;->isInteractive()Z
 HSPLandroid/os/IPowerManager$Stub$Proxy;->isLightDeviceIdleMode()Z
 HSPLandroid/os/IPowerManager$Stub$Proxy;->isPowerSaveMode()Z
-HSPLandroid/os/IPowerManager$Stub$Proxy;->releaseWakeLock(Landroid/os/IBinder;I)V
+HSPLandroid/os/IPowerManager$Stub$Proxy;->releaseWakeLock(Landroid/os/IBinder;I)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/IPowerManager$Stub$Proxy;->updateWakeLockWorkSource(Landroid/os/IBinder;Landroid/os/WorkSource;Ljava/lang/String;)V
 HSPLandroid/os/IPowerManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IPowerManager;
 HSPLandroid/os/IPowerManager$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
@@ -12088,19 +12097,19 @@
 HSPLandroid/os/LocaleList$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/os/LocaleList;-><init>([Ljava/util/Locale;)V
 HSPLandroid/os/LocaleList;->computeFirstMatch(Ljava/util/Collection;Z)Ljava/util/Locale;
-HSPLandroid/os/LocaleList;->computeFirstMatchIndex(Ljava/util/Collection;Z)I
-HSPLandroid/os/LocaleList;->equals(Ljava/lang/Object;)Z
+HSPLandroid/os/LocaleList;->computeFirstMatchIndex(Ljava/util/Collection;Z)I+]Ljava/util/Collection;Ljava/util/Arrays$ArrayList;]Ljava/util/Iterator;Ljava/util/Arrays$ArrayItr;
+HSPLandroid/os/LocaleList;->equals(Ljava/lang/Object;)Z+]Ljava/util/Locale;Ljava/util/Locale;
 HSPLandroid/os/LocaleList;->findFirstMatchIndex(Ljava/util/Locale;)I
 HSPLandroid/os/LocaleList;->forLanguageTags(Ljava/lang/String;)Landroid/os/LocaleList;
 HSPLandroid/os/LocaleList;->get(I)Ljava/util/Locale;
 HSPLandroid/os/LocaleList;->getAdjustedDefault()Landroid/os/LocaleList;
-HSPLandroid/os/LocaleList;->getDefault()Landroid/os/LocaleList;
+HSPLandroid/os/LocaleList;->getDefault()Landroid/os/LocaleList;+]Ljava/util/Locale;Ljava/util/Locale;
 HSPLandroid/os/LocaleList;->getEmptyLocaleList()Landroid/os/LocaleList;
 HSPLandroid/os/LocaleList;->getFirstMatchWithEnglishSupported([Ljava/lang/String;)Ljava/util/Locale;
 HSPLandroid/os/LocaleList;->getLikelyScript(Ljava/util/Locale;)Ljava/lang/String;
-HSPLandroid/os/LocaleList;->hashCode()I
+HSPLandroid/os/LocaleList;->hashCode()I+]Ljava/util/Locale;Ljava/util/Locale;
 HSPLandroid/os/LocaleList;->isEmpty()Z
-HSPLandroid/os/LocaleList;->isPseudoLocale(Ljava/util/Locale;)Z
+HSPLandroid/os/LocaleList;->isPseudoLocale(Ljava/util/Locale;)Z+]Ljava/util/Locale;Ljava/util/Locale;
 HSPLandroid/os/LocaleList;->isPseudoLocalesOnly([Ljava/lang/String;)Z
 HSPLandroid/os/LocaleList;->matchesLanguageAndScript(Ljava/util/Locale;Ljava/util/Locale;)Z+]Ljava/util/Locale;Ljava/util/Locale;
 HSPLandroid/os/LocaleList;->setDefault(Landroid/os/LocaleList;)V
@@ -12114,8 +12123,8 @@
 HSPLandroid/os/Looper;->getQueue()Landroid/os/MessageQueue;
 HSPLandroid/os/Looper;->getThread()Ljava/lang/Thread;
 HSPLandroid/os/Looper;->isCurrentThread()Z
-HSPLandroid/os/Looper;->loop()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Thread;Landroid/os/HandlerThread;,Lcom/android/internal/os/BackgroundThread;
-HSPLandroid/os/Looper;->loopOnce(Landroid/os/Looper;JI)Z+]Landroid/os/Handler;missing_types]Landroid/os/Message;Landroid/os/Message;]Landroid/os/MessageQueue;Landroid/os/MessageQueue;
+HSPLandroid/os/Looper;->loop()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Thread;missing_types
+HSPLandroid/os/Looper;->loopOnce(Landroid/os/Looper;JI)Z+]Landroid/os/Handler;megamorphic_types]Landroid/os/Message;Landroid/os/Message;]Landroid/os/MessageQueue;Landroid/os/MessageQueue;
 HSPLandroid/os/Looper;->myLooper()Landroid/os/Looper;+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
 HSPLandroid/os/Looper;->myQueue()Landroid/os/MessageQueue;
 HSPLandroid/os/Looper;->prepare()V
@@ -12146,10 +12155,10 @@
 HSPLandroid/os/Message;->obtain(Landroid/os/Handler;Ljava/lang/Runnable;)Landroid/os/Message;
 HSPLandroid/os/Message;->obtain(Landroid/os/Message;)Landroid/os/Message;
 HSPLandroid/os/Message;->peekData()Landroid/os/Bundle;
-HSPLandroid/os/Message;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/os/Message;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Message;->recycle()V
 HSPLandroid/os/Message;->recycleUnchecked()V
-HSPLandroid/os/Message;->sendToTarget()V
+HSPLandroid/os/Message;->sendToTarget()V+]Landroid/os/Handler;megamorphic_types
 HSPLandroid/os/Message;->setAsynchronous(Z)V
 HSPLandroid/os/Message;->setCallback(Ljava/lang/Runnable;)Landroid/os/Message;
 HSPLandroid/os/Message;->setData(Landroid/os/Bundle;)V
@@ -12164,11 +12173,11 @@
 HSPLandroid/os/MessageQueue;->addOnFileDescriptorEventListener(Ljava/io/FileDescriptor;ILandroid/os/MessageQueue$OnFileDescriptorEventListener;)V
 HSPLandroid/os/MessageQueue;->dispatchEvents(II)I
 HSPLandroid/os/MessageQueue;->dispose()V
-HSPLandroid/os/MessageQueue;->enqueueMessage(Landroid/os/Message;J)Z+]Landroid/os/Message;Landroid/os/Message;
+HSPLandroid/os/MessageQueue;->enqueueMessage(Landroid/os/Message;J)Z+]Landroid/os/Message;Landroid/os/Message;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/IllegalStateException;Ljava/lang/IllegalStateException;
 HSPLandroid/os/MessageQueue;->finalize()V
 HSPLandroid/os/MessageQueue;->hasMessages(Landroid/os/Handler;ILjava/lang/Object;)Z
 HSPLandroid/os/MessageQueue;->hasMessages(Landroid/os/Handler;Ljava/lang/Runnable;Ljava/lang/Object;)Z
-HSPLandroid/os/MessageQueue;->next()Landroid/os/Message;+]Landroid/os/Message;Landroid/os/Message;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/os/MessageQueue$IdleHandler;missing_types
+HSPLandroid/os/MessageQueue;->next()Landroid/os/Message;+]Landroid/os/MessageQueue$IdleHandler;missing_types]Landroid/os/Message;Landroid/os/Message;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/os/MessageQueue;->postSyncBarrier()I
 HSPLandroid/os/MessageQueue;->postSyncBarrier(J)I+]Landroid/os/Message;Landroid/os/Message;
 HSPLandroid/os/MessageQueue;->quit(Z)V
@@ -12179,7 +12188,7 @@
 HSPLandroid/os/MessageQueue;->removeMessages(Landroid/os/Handler;ILjava/lang/Object;)V+]Landroid/os/Message;Landroid/os/Message;
 HSPLandroid/os/MessageQueue;->removeMessages(Landroid/os/Handler;Ljava/lang/Runnable;Ljava/lang/Object;)V+]Landroid/os/Message;Landroid/os/Message;
 HSPLandroid/os/MessageQueue;->removeOnFileDescriptorEventListener(Ljava/io/FileDescriptor;)V
-HSPLandroid/os/MessageQueue;->removeSyncBarrier(I)V
+HSPLandroid/os/MessageQueue;->removeSyncBarrier(I)V+]Landroid/os/Message;Landroid/os/Message;
 HSPLandroid/os/MessageQueue;->updateOnFileDescriptorEventListenerLocked(Ljava/io/FileDescriptor;ILandroid/os/MessageQueue$OnFileDescriptorEventListener;)V
 HSPLandroid/os/Messenger$1;->createFromParcel(Landroid/os/Parcel;)Landroid/os/Messenger;
 HSPLandroid/os/Messenger$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -12192,7 +12201,7 @@
 HSPLandroid/os/Messenger;->writeMessengerOrNullToParcel(Landroid/os/Messenger;Landroid/os/Parcel;)V
 HSPLandroid/os/Messenger;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/os/Parcel$2;-><init>(Landroid/os/Parcel;Ljava/io/InputStream;Ljava/lang/ClassLoader;)V
-HSPLandroid/os/Parcel$2;->resolveClass(Ljava/io/ObjectStreamClass;)Ljava/lang/Class;
+HSPLandroid/os/Parcel$2;->resolveClass(Ljava/io/ObjectStreamClass;)Ljava/lang/Class;+]Ljava/io/ObjectStreamClass;Ljava/io/ObjectStreamClass;
 HSPLandroid/os/Parcel$LazyValue;-><init>(Landroid/os/Parcel;IIILjava/lang/ClassLoader;)V
 HSPLandroid/os/Parcel$LazyValue;->apply(Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel$LazyValue;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Landroid/os/Parcel$LazyValue;Landroid/os/Parcel$LazyValue;
@@ -12214,13 +12223,13 @@
 HSPLandroid/os/Parcel;->createException(ILjava/lang/String;)Ljava/lang/Exception;
 HSPLandroid/os/Parcel;->createExceptionOrNull(ILjava/lang/String;)Ljava/lang/Exception;
 HSPLandroid/os/Parcel;->createFloatArray()[F+]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/os/Parcel;->createIntArray()[I
-HSPLandroid/os/Parcel;->createLongArray()[J
-HSPLandroid/os/Parcel;->createString16Array()[Ljava/lang/String;
+HSPLandroid/os/Parcel;->createIntArray()[I+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->createLongArray()[J+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->createString16Array()[Ljava/lang/String;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->createString8Array()[Ljava/lang/String;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->createStringArray()[Ljava/lang/String;
-HSPLandroid/os/Parcel;->createStringArrayList()Ljava/util/ArrayList;
-HSPLandroid/os/Parcel;->createTypedArray(Landroid/os/Parcelable$Creator;)[Ljava/lang/Object;+]Landroid/os/Parcelable$Creator;missing_types]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->createStringArrayList()Ljava/util/ArrayList;+]Landroid/os/Parcel;Landroid/os/Parcel;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/os/Parcel;->createTypedArray(Landroid/os/Parcelable$Creator;)[Ljava/lang/Object;+]Landroid/os/Parcelable$Creator;megamorphic_types]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->createTypedArrayList(Landroid/os/Parcelable$Creator;)Ljava/util/ArrayList;+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->dataAvail()I
 HSPLandroid/os/Parcel;->dataPosition()I
@@ -12231,7 +12240,7 @@
 HSPLandroid/os/Parcel;->ensureReadSquashableParcelables()V
 HSPLandroid/os/Parcel;->finalize()V
 HSPLandroid/os/Parcel;->freeBuffer()V
-HSPLandroid/os/Parcel;->getClassCookie(Ljava/lang/Class;)Ljava/lang/Object;
+HSPLandroid/os/Parcel;->getClassCookie(Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/os/Parcel;->getExceptionCode(Ljava/lang/Throwable;)I
 HSPLandroid/os/Parcel;->getValueType(Ljava/lang/Object;)I+]Ljava/lang/Object;missing_types]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/os/Parcel;->hasFileDescriptors()Z
@@ -12240,7 +12249,7 @@
 HSPLandroid/os/Parcel;->isLengthPrefixed(I)Z
 HSPLandroid/os/Parcel;->markSensitive()V
 HSPLandroid/os/Parcel;->marshall()[B
-HSPLandroid/os/Parcel;->maybeWriteSquashed(Landroid/os/Parcelable;)Z
+HSPLandroid/os/Parcel;->maybeWriteSquashed(Landroid/os/Parcelable;)Z+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->obtain()Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->obtain(J)Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->pushAllowFds(Z)Z
@@ -12250,7 +12259,7 @@
 HSPLandroid/os/Parcel;->readArrayMap(Landroid/util/ArrayMap;IZZLjava/lang/ClassLoader;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readArrayMap(Landroid/util/ArrayMap;Ljava/lang/ClassLoader;)V
 HSPLandroid/os/Parcel;->readArrayMapInternal(Landroid/util/ArrayMap;ILjava/lang/ClassLoader;)V
-HSPLandroid/os/Parcel;->readArraySet(Ljava/lang/ClassLoader;)Landroid/util/ArraySet;
+HSPLandroid/os/Parcel;->readArraySet(Ljava/lang/ClassLoader;)Landroid/util/ArraySet;+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readBinderList(Ljava/util/List;)V
 HSPLandroid/os/Parcel;->readBlob()[B
 HSPLandroid/os/Parcel;->readBoolean()Z+]Landroid/os/Parcel;Landroid/os/Parcel;
@@ -12260,12 +12269,12 @@
 HSPLandroid/os/Parcel;->readByte()B+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readByteArray([B)V
 HSPLandroid/os/Parcel;->readCallingWorkSourceUid()I
-HSPLandroid/os/Parcel;->readCharSequence()Ljava/lang/CharSequence;
+HSPLandroid/os/Parcel;->readCharSequence()Ljava/lang/CharSequence;+]Landroid/os/Parcelable$Creator;Landroid/text/TextUtils$1;
 HSPLandroid/os/Parcel;->readCharSequenceArray()[Ljava/lang/CharSequence;
 HSPLandroid/os/Parcel;->readDouble()D
-HSPLandroid/os/Parcel;->readException()V
+HSPLandroid/os/Parcel;->readException()V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readException(ILjava/lang/String;)V
-HSPLandroid/os/Parcel;->readExceptionCode()I
+HSPLandroid/os/Parcel;->readExceptionCode()I+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readFloat()F
 HSPLandroid/os/Parcel;->readHashMap(Ljava/lang/ClassLoader;)Ljava/util/HashMap;
 HSPLandroid/os/Parcel;->readHashMapInternal(Ljava/lang/ClassLoader;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/HashMap;+]Landroid/os/Parcel;Landroid/os/Parcel;
@@ -12280,7 +12289,7 @@
 HSPLandroid/os/Parcel;->readLongArray([J)V
 HSPLandroid/os/Parcel;->readMap(Ljava/util/Map;Ljava/lang/ClassLoader;)V
 HSPLandroid/os/Parcel;->readMapInternal(Ljava/util/Map;ILjava/lang/ClassLoader;)V
-HSPLandroid/os/Parcel;->readMapInternal(Ljava/util/Map;ILjava/lang/ClassLoader;Ljava/lang/Class;Ljava/lang/Class;)V+]Ljava/util/Map;Ljava/util/HashMap;
+HSPLandroid/os/Parcel;->readMapInternal(Ljava/util/Map;ILjava/lang/ClassLoader;Ljava/lang/Class;Ljava/lang/Class;)V+]Ljava/util/Map;Ljava/util/LinkedHashMap;,Ljava/util/HashMap;
 HSPLandroid/os/Parcel;->readParcelable(Ljava/lang/ClassLoader;)Landroid/os/Parcelable;
 HSPLandroid/os/Parcel;->readParcelable(Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/lang/Object;
 HSPLandroid/os/Parcel;->readParcelableArray(Ljava/lang/ClassLoader;)[Landroid/os/Parcelable;
@@ -12293,70 +12302,70 @@
 HSPLandroid/os/Parcel;->readParcelableList(Ljava/util/List;Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/util/List;
 HSPLandroid/os/Parcel;->readParcelableListInternal(Ljava/util/List;Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readPersistableBundle()Landroid/os/PersistableBundle;
-HSPLandroid/os/Parcel;->readPersistableBundle(Ljava/lang/ClassLoader;)Landroid/os/PersistableBundle;
+HSPLandroid/os/Parcel;->readPersistableBundle(Ljava/lang/ClassLoader;)Landroid/os/PersistableBundle;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readRawFileDescriptor()Ljava/io/FileDescriptor;
 HSPLandroid/os/Parcel;->readSerializable()Ljava/io/Serializable;
 HSPLandroid/os/Parcel;->readSerializableInternal(Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/lang/Object;+]Ljava/io/ObjectInputStream;Landroid/os/Parcel$2;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readSize()Landroid/util/Size;
 HSPLandroid/os/Parcel;->readSparseArray(Ljava/lang/ClassLoader;)Landroid/util/SparseArray;
-HSPLandroid/os/Parcel;->readSparseArrayInternal(Ljava/lang/ClassLoader;Ljava/lang/Class;)Landroid/util/SparseArray;+]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLandroid/os/Parcel;->readSparseArrayInternal(Ljava/lang/ClassLoader;Ljava/lang/Class;)Landroid/util/SparseArray;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readSparseIntArray()Landroid/util/SparseIntArray;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readSparseIntArrayInternal(Landroid/util/SparseIntArray;I)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/os/Parcel;->readSquashed(Landroid/os/Parcel$SquashReadHelper;)Landroid/os/Parcelable;
+HSPLandroid/os/Parcel;->readSquashed(Landroid/os/Parcel$SquashReadHelper;)Landroid/os/Parcelable;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/Parcel$SquashReadHelper;Landroid/content/pm/ApplicationInfo$1$$ExternalSyntheticLambda0;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readString()Ljava/lang/String;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readString16()Ljava/lang/String;+]Landroid/os/Parcel$ReadWriteHelper;Landroid/os/Parcel$ReadWriteHelper;
 HSPLandroid/os/Parcel;->readString16Array([Ljava/lang/String;)V
 HSPLandroid/os/Parcel;->readString16NoHelper()Ljava/lang/String;
 HSPLandroid/os/Parcel;->readString8()Ljava/lang/String;+]Landroid/os/Parcel$ReadWriteHelper;Landroid/os/Parcel$ReadWriteHelper;
 HSPLandroid/os/Parcel;->readString8NoHelper()Ljava/lang/String;
-HSPLandroid/os/Parcel;->readStringArray()[Ljava/lang/String;
+HSPLandroid/os/Parcel;->readStringArray()[Ljava/lang/String;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readStringArray([Ljava/lang/String;)V
-HSPLandroid/os/Parcel;->readStringList(Ljava/util/List;)V
+HSPLandroid/os/Parcel;->readStringList(Ljava/util/List;)V+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readStrongBinder()Landroid/os/IBinder;
-HSPLandroid/os/Parcel;->readTypedArray([Ljava/lang/Object;Landroid/os/Parcelable$Creator;)V
+HSPLandroid/os/Parcel;->readTypedArray([Ljava/lang/Object;Landroid/os/Parcelable$Creator;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readTypedList(Ljava/util/List;Landroid/os/Parcelable$Creator;)V
 HSPLandroid/os/Parcel;->readTypedObject(Landroid/os/Parcelable$Creator;)Ljava/lang/Object;+]Landroid/os/Parcelable$Creator;megamorphic_types]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readValue(ILjava/lang/ClassLoader;Ljava/lang/Class;)Ljava/lang/Object;
-HSPLandroid/os/Parcel;->readValue(ILjava/lang/ClassLoader;Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/os/Parcel;Landroid/os/Parcel;]Ljava/lang/Class;Ljava/lang/Class;
+HSPLandroid/os/Parcel;->readValue(ILjava/lang/ClassLoader;Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/Object;+]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->readValue(Ljava/lang/ClassLoader;)Ljava/lang/Object;
 HSPLandroid/os/Parcel;->readValue(Ljava/lang/ClassLoader;Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->recycle()V
 HSPLandroid/os/Parcel;->resetSqaushingState()V
 HSPLandroid/os/Parcel;->restoreAllowFds(Z)V
-HSPLandroid/os/Parcel;->setClassCookie(Ljava/lang/Class;Ljava/lang/Object;)V
+HSPLandroid/os/Parcel;->setClassCookie(Ljava/lang/Class;Ljava/lang/Object;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/os/Parcel;->setDataPosition(I)V
 HSPLandroid/os/Parcel;->setDataSize(I)V
 HSPLandroid/os/Parcel;->setReadWriteHelper(Landroid/os/Parcel$ReadWriteHelper;)V
 HSPLandroid/os/Parcel;->unmarshall([BII)V
 HSPLandroid/os/Parcel;->writeArrayMap(Landroid/util/ArrayMap;)V
-HSPLandroid/os/Parcel;->writeArrayMapInternal(Landroid/util/ArrayMap;)V
-HSPLandroid/os/Parcel;->writeArraySet(Landroid/util/ArraySet;)V
+HSPLandroid/os/Parcel;->writeArrayMapInternal(Landroid/util/ArrayMap;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->writeArraySet(Landroid/util/ArraySet;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeBinderList(Ljava/util/List;)V
 HSPLandroid/os/Parcel;->writeBlob([B)V
 HSPLandroid/os/Parcel;->writeBoolean(Z)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeBooleanArray([Z)V
-HSPLandroid/os/Parcel;->writeBundle(Landroid/os/Bundle;)V
+HSPLandroid/os/Parcel;->writeBundle(Landroid/os/Bundle;)V+]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeByte(B)V+]Landroid/os/Parcel;Landroid/os/Parcel;
-HSPLandroid/os/Parcel;->writeByteArray([B)V
+HSPLandroid/os/Parcel;->writeByteArray([B)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeByteArray([BII)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeCharSequence(Ljava/lang/CharSequence;)V
 HSPLandroid/os/Parcel;->writeDouble(D)V
 HSPLandroid/os/Parcel;->writeException(Ljava/lang/Exception;)V
 HSPLandroid/os/Parcel;->writeFileDescriptor(Ljava/io/FileDescriptor;)V
 HSPLandroid/os/Parcel;->writeFloat(F)V
-HSPLandroid/os/Parcel;->writeFloatArray([F)V
+HSPLandroid/os/Parcel;->writeFloatArray([F)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeInt(I)V
-HSPLandroid/os/Parcel;->writeIntArray([I)V
+HSPLandroid/os/Parcel;->writeIntArray([I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeInterfaceToken(Ljava/lang/String;)V
 HSPLandroid/os/Parcel;->writeList(Ljava/util/List;)V
 HSPLandroid/os/Parcel;->writeLong(J)V
-HSPLandroid/os/Parcel;->writeLongArray([J)V
-HSPLandroid/os/Parcel;->writeMap(Ljava/util/Map;)V
-HSPLandroid/os/Parcel;->writeMapInternal(Ljava/util/Map;)V
+HSPLandroid/os/Parcel;->writeLongArray([J)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->writeMap(Ljava/util/Map;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->writeMapInternal(Ljava/util/Map;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeNoException()V
-HSPLandroid/os/Parcel;->writeParcelable(Landroid/os/Parcelable;I)V
-HSPLandroid/os/Parcel;->writeParcelableArray([Landroid/os/Parcelable;I)V
-HSPLandroid/os/Parcel;->writeParcelableCreator(Landroid/os/Parcelable;)V
+HSPLandroid/os/Parcel;->writeParcelable(Landroid/os/Parcelable;I)V+]Landroid/os/Parcelable;megamorphic_types]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->writeParcelableArray([Landroid/os/Parcelable;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->writeParcelableCreator(Landroid/os/Parcelable;)V+]Ljava/lang/Object;megamorphic_types]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeParcelableList(Ljava/util/List;I)V
 HSPLandroid/os/Parcel;->writePersistableBundle(Landroid/os/PersistableBundle;)V
 HSPLandroid/os/Parcel;->writeSerializable(Ljava/io/Serializable;)V
@@ -12365,22 +12374,22 @@
 HSPLandroid/os/Parcel;->writeSparseIntArray(Landroid/util/SparseIntArray;)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeString(Ljava/lang/String;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeString16(Ljava/lang/String;)V+]Landroid/os/Parcel$ReadWriteHelper;Landroid/os/Parcel$ReadWriteHelper;
-HSPLandroid/os/Parcel;->writeString16Array([Ljava/lang/String;)V
+HSPLandroid/os/Parcel;->writeString16Array([Ljava/lang/String;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeString16NoHelper(Ljava/lang/String;)V
 HSPLandroid/os/Parcel;->writeString8(Ljava/lang/String;)V+]Landroid/os/Parcel$ReadWriteHelper;Landroid/os/Parcel$ReadWriteHelper;
-HSPLandroid/os/Parcel;->writeString8Array([Ljava/lang/String;)V
+HSPLandroid/os/Parcel;->writeString8Array([Ljava/lang/String;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeString8NoHelper(Ljava/lang/String;)V
-HSPLandroid/os/Parcel;->writeStringArray([Ljava/lang/String;)V
-HSPLandroid/os/Parcel;->writeStringList(Ljava/util/List;)V
+HSPLandroid/os/Parcel;->writeStringArray([Ljava/lang/String;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->writeStringList(Ljava/util/List;)V+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeStrongBinder(Landroid/os/IBinder;)V
-HSPLandroid/os/Parcel;->writeStrongInterface(Landroid/os/IInterface;)V
-HSPLandroid/os/Parcel;->writeTypedArray([Landroid/os/Parcelable;I)V
+HSPLandroid/os/Parcel;->writeStrongInterface(Landroid/os/IInterface;)V+]Landroid/os/IInterface;megamorphic_types]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->writeTypedArray([Landroid/os/Parcelable;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/Parcel;->writeTypedArrayMap(Landroid/util/ArrayMap;I)V
 HSPLandroid/os/Parcel;->writeTypedList(Ljava/util/List;)V
-HSPLandroid/os/Parcel;->writeTypedList(Ljava/util/List;I)V
-HSPLandroid/os/Parcel;->writeTypedObject(Landroid/os/Parcelable;I)V
-HSPLandroid/os/Parcel;->writeValue(ILjava/lang/Object;)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Ljava/lang/Long;Ljava/lang/Long;]Ljava/lang/Float;Ljava/lang/Float;]Landroid/os/Parcel;Landroid/os/Parcel;]Ljava/lang/Double;Ljava/lang/Double;]Ljava/lang/Short;Ljava/lang/Short;]Ljava/lang/Character;Ljava/lang/Character;]Ljava/lang/Byte;Ljava/lang/Byte;
-HSPLandroid/os/Parcel;->writeValue(Ljava/lang/Object;)V
+HSPLandroid/os/Parcel;->writeTypedList(Ljava/util/List;I)V+]Ljava/util/List;missing_types]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->writeTypedObject(Landroid/os/Parcelable;I)V+]Landroid/os/Parcelable;megamorphic_types]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/Parcel;->writeValue(ILjava/lang/Object;)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Landroid/os/Parcel;Landroid/os/Parcel;]Ljava/lang/Double;Ljava/lang/Double;]Ljava/lang/Long;Ljava/lang/Long;]Ljava/lang/Byte;Ljava/lang/Byte;]Ljava/lang/Float;Ljava/lang/Float;]Ljava/lang/Short;Ljava/lang/Short;]Ljava/lang/Character;Ljava/lang/Character;
+HSPLandroid/os/Parcel;->writeValue(Ljava/lang/Object;)V+]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/os/Parcel$LazyValue;Landroid/os/Parcel$LazyValue;
 HSPLandroid/os/ParcelFileDescriptor$2;->createFromParcel(Landroid/os/Parcel;)Landroid/os/ParcelFileDescriptor;
 HSPLandroid/os/ParcelFileDescriptor$2;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/os/ParcelFileDescriptor$AutoCloseInputStream;-><init>(Landroid/os/ParcelFileDescriptor;)V
@@ -12470,14 +12479,14 @@
 HSPLandroid/os/PowerManager$3;->onStatusChange(I)V
 HSPLandroid/os/PowerManager$WakeLock$$ExternalSyntheticLambda0;-><init>(Landroid/os/PowerManager$WakeLock;)V
 HSPLandroid/os/PowerManager$WakeLock$$ExternalSyntheticLambda0;->run()V
-HSPLandroid/os/PowerManager$WakeLock;-><init>(Landroid/os/PowerManager;ILjava/lang/String;Ljava/lang/String;I)V
+HSPLandroid/os/PowerManager$WakeLock;-><init>(Landroid/os/PowerManager;ILjava/lang/String;Ljava/lang/String;I)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/os/PowerManager$WakeLock;->acquire()V
 HSPLandroid/os/PowerManager$WakeLock;->acquire(J)V
-HSPLandroid/os/PowerManager$WakeLock;->acquireLocked()V
+HSPLandroid/os/PowerManager$WakeLock;->acquireLocked()V+]Landroid/os/Handler;Landroid/app/ActivityThread$H;]Landroid/os/IPowerManager;Landroid/os/IPowerManager$Stub$Proxy;
 HSPLandroid/os/PowerManager$WakeLock;->finalize()V
 HSPLandroid/os/PowerManager$WakeLock;->isHeld()Z
 HSPLandroid/os/PowerManager$WakeLock;->release()V
-HSPLandroid/os/PowerManager$WakeLock;->release(I)V
+HSPLandroid/os/PowerManager$WakeLock;->release(I)V+]Landroid/os/Handler;Landroid/app/ActivityThread$H;]Landroid/os/IPowerManager;Landroid/os/IPowerManager$Stub$Proxy;
 HSPLandroid/os/PowerManager$WakeLock;->setReferenceCounted(Z)V
 HSPLandroid/os/PowerManager$WakeLock;->setWorkSource(Landroid/os/WorkSource;)V
 HSPLandroid/os/PowerManager;-><init>(Landroid/content/Context;Landroid/os/IPowerManager;Landroid/os/IThermalService;Landroid/os/Handler;)V
@@ -12617,19 +12626,19 @@
 HSPLandroid/os/StrictMode$8;->initialValue()Landroid/os/StrictMode$ThreadSpanState;
 HSPLandroid/os/StrictMode$8;->initialValue()Ljava/lang/Object;
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy$$ExternalSyntheticLambda0;->run()V
-HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy$$ExternalSyntheticLambda1;->run()V
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy$$ExternalSyntheticLambda1;->run()V+]Landroid/os/StrictMode$AndroidBlockGuardPolicy;Landroid/os/StrictMode$AndroidBlockGuardPolicy;
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;-><init>(I)V
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->getThreadPolicyMask()I
-HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->handleViolationWithTimingAttempt(Landroid/os/StrictMode$ViolationInfo;)V
-HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->lambda$handleViolationWithTimingAttempt$0$android-os-StrictMode$AndroidBlockGuardPolicy(Landroid/view/IWindowManager;Ljava/util/ArrayList;)V
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->handleViolationWithTimingAttempt(Landroid/os/StrictMode$ViolationInfo;)V+]Landroid/os/Handler;Landroid/os/Handler;]Ljava/lang/ThreadLocal;Landroid/os/StrictMode$2;,Landroid/os/StrictMode$3;]Landroid/os/StrictMode$ViolationInfo;Landroid/os/StrictMode$ViolationInfo;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/os/StrictMode$AndroidBlockGuardPolicy;Landroid/os/StrictMode$AndroidBlockGuardPolicy;
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->lambda$handleViolationWithTimingAttempt$0$android-os-StrictMode$AndroidBlockGuardPolicy(Landroid/view/IWindowManager;Ljava/util/ArrayList;)V+]Landroid/os/StrictMode$AndroidBlockGuardPolicy;Landroid/os/StrictMode$AndroidBlockGuardPolicy;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onCustomSlowCall(Ljava/lang/String;)V
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onNetwork()V
-HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onReadFromDisk()V
-HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onThreadPolicyViolation(Landroid/os/StrictMode$ViolationInfo;)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;]Ljava/lang/Long;Ljava/lang/Long;]Landroid/os/StrictMode$ViolationInfo;Landroid/os/StrictMode$ViolationInfo;
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onReadFromDisk()V+]Landroid/os/StrictMode$AndroidBlockGuardPolicy;Landroid/os/StrictMode$AndroidBlockGuardPolicy;
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onThreadPolicyViolation(Landroid/os/StrictMode$ViolationInfo;)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/lang/ThreadLocal;Landroid/os/StrictMode$1;,Ljava/lang/ThreadLocal;]Ljava/lang/Long;Ljava/lang/Long;]Landroid/os/StrictMode$ViolationInfo;Landroid/os/StrictMode$ViolationInfo;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Landroid/os/StrictMode$ViolationLogger;Landroid/os/StrictMode$$ExternalSyntheticLambda1;
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onUnbufferedIO()V
-HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onWriteToDisk()V
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->onWriteToDisk()V+]Landroid/os/StrictMode$AndroidBlockGuardPolicy;Landroid/os/StrictMode$AndroidBlockGuardPolicy;
 HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->setThreadPolicyMask(I)V
-HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->startHandlingViolationException(Landroid/os/strictmode/Violation;)V
+HSPLandroid/os/StrictMode$AndroidBlockGuardPolicy;->startHandlingViolationException(Landroid/os/strictmode/Violation;)V+]Landroid/os/StrictMode$AndroidBlockGuardPolicy;Landroid/os/StrictMode$AndroidBlockGuardPolicy;
 HSPLandroid/os/StrictMode$AndroidCloseGuardReporter;-><init>()V
 HSPLandroid/os/StrictMode$AndroidCloseGuardReporter;-><init>(Landroid/os/StrictMode$AndroidCloseGuardReporter-IA;)V
 HSPLandroid/os/StrictMode$AndroidCloseGuardReporter;->report(Ljava/lang/String;)V
@@ -12661,12 +12670,12 @@
 HSPLandroid/os/StrictMode$ThreadPolicy;-><init>(ILandroid/os/StrictMode$OnThreadViolationListener;Ljava/util/concurrent/Executor;)V
 HSPLandroid/os/StrictMode$ThreadPolicy;-><init>(ILandroid/os/StrictMode$OnThreadViolationListener;Ljava/util/concurrent/Executor;Landroid/os/StrictMode$ThreadPolicy-IA;)V
 HSPLandroid/os/StrictMode$ThreadSpanState;-><init>()V
-HSPLandroid/os/StrictMode$ViolationInfo;-><init>(Landroid/os/Parcel;Z)V
+HSPLandroid/os/StrictMode$ViolationInfo;-><init>(Landroid/os/Parcel;Z)V+]Ljava/util/Deque;Ljava/util/ArrayDeque;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/StrictMode$ViolationInfo;-><init>(Landroid/os/strictmode/Violation;I)V+]Ljava/lang/ThreadLocal;Landroid/os/StrictMode$8;
-HSPLandroid/os/StrictMode$ViolationInfo;->getStackTrace()Ljava/lang/String;
-HSPLandroid/os/StrictMode$ViolationInfo;->hashCode()I
+HSPLandroid/os/StrictMode$ViolationInfo;->getStackTrace()Ljava/lang/String;+]Ljava/util/Deque;Ljava/util/ArrayDeque;]Ljava/io/PrintWriter;Lcom/android/internal/util/FastPrintWriter;]Ljava/lang/StackTraceElement;Ljava/lang/StackTraceElement;]Ljava/util/Iterator;Ljava/util/ArrayDeque$DeqIterator;]Ljava/io/StringWriter;Ljava/io/StringWriter;]Landroid/os/strictmode/Violation;megamorphic_types
+HSPLandroid/os/StrictMode$ViolationInfo;->hashCode()I+]Landroid/os/strictmode/Violation;Landroid/os/strictmode/NonSdkApiUsedViolation;,Landroid/os/strictmode/IncorrectContextUseViolation;,Landroid/os/strictmode/LeakedClosableViolation;,Landroid/os/strictmode/DiskReadViolation;
 HSPLandroid/os/StrictMode$ViolationInfo;->penaltyEnabled(I)Z
-HSPLandroid/os/StrictMode$ViolationInfo;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/os/StrictMode$ViolationInfo;->writeToParcel(Landroid/os/Parcel;I)V+]Ljava/util/Deque;Ljava/util/ArrayDeque;]Ljava/lang/StackTraceElement;Ljava/lang/StackTraceElement;]Ljava/util/Iterator;Ljava/util/ArrayDeque$DeqIterator;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/StrictMode$VmPolicy$Builder;-><init>()V
 HSPLandroid/os/StrictMode$VmPolicy$Builder;-><init>(Landroid/os/StrictMode$VmPolicy;)V
 HSPLandroid/os/StrictMode$VmPolicy$Builder;->build()Landroid/os/StrictMode$VmPolicy;
@@ -12692,19 +12701,19 @@
 HSPLandroid/os/StrictMode$VmPolicy;-><init>(ILjava/util/HashMap;Landroid/os/StrictMode$OnVmViolationListener;Ljava/util/concurrent/Executor;Landroid/os/StrictMode$VmPolicy-IA;)V
 HSPLandroid/os/StrictMode;->-$$Nest$sfgetEMPTY_CLASS_LIMIT_MAP()Ljava/util/HashMap;
 HSPLandroid/os/StrictMode;->-$$Nest$sfgetsExpectedActivityInstanceCount()Ljava/util/HashMap;
-HSPLandroid/os/StrictMode;->allowThreadDiskReads()Landroid/os/StrictMode$ThreadPolicy;
+HSPLandroid/os/StrictMode;->allowThreadDiskReads()Landroid/os/StrictMode$ThreadPolicy;+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
 HSPLandroid/os/StrictMode;->allowThreadDiskReadsMask()I
-HSPLandroid/os/StrictMode;->allowThreadDiskWrites()Landroid/os/StrictMode$ThreadPolicy;
+HSPLandroid/os/StrictMode;->allowThreadDiskWrites()Landroid/os/StrictMode$ThreadPolicy;+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
 HSPLandroid/os/StrictMode;->allowThreadDiskWritesMask()I
 HSPLandroid/os/StrictMode;->allowVmViolations()Landroid/os/StrictMode$VmPolicy;
-HSPLandroid/os/StrictMode;->assertConfigurationContext(Landroid/content/Context;Ljava/lang/String;)V
+HSPLandroid/os/StrictMode;->assertConfigurationContext(Landroid/content/Context;Ljava/lang/String;)V+]Landroid/content/Context;missing_types
 HSPLandroid/os/StrictMode;->clampViolationTimeMap(Landroid/util/SparseLongArray;J)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;
-HSPLandroid/os/StrictMode;->clearGatheredViolations()V
+HSPLandroid/os/StrictMode;->clearGatheredViolations()V+]Ljava/lang/ThreadLocal;Landroid/os/StrictMode$1;
 HSPLandroid/os/StrictMode;->decrementExpectedActivityCount(Ljava/lang/Class;)V
 HSPLandroid/os/StrictMode;->dropboxViolationAsync(ILandroid/os/StrictMode$ViolationInfo;)V
 HSPLandroid/os/StrictMode;->enterCriticalSpan(Ljava/lang/String;)Landroid/os/StrictMode$Span;
-HSPLandroid/os/StrictMode;->getThreadPolicy()Landroid/os/StrictMode$ThreadPolicy;
-HSPLandroid/os/StrictMode;->getThreadPolicyMask()I
+HSPLandroid/os/StrictMode;->getThreadPolicy()Landroid/os/StrictMode$ThreadPolicy;+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
+HSPLandroid/os/StrictMode;->getThreadPolicyMask()I+]Landroid/os/StrictMode$AndroidBlockGuardPolicy;Landroid/os/StrictMode$AndroidBlockGuardPolicy;
 HSPLandroid/os/StrictMode;->getVmPolicy()Landroid/os/StrictMode$VmPolicy;
 HSPLandroid/os/StrictMode;->handleApplicationStrictModeViolation(ILandroid/os/StrictMode$ViolationInfo;)V
 HSPLandroid/os/StrictMode;->hasGatheredViolations()Z
@@ -12721,14 +12730,14 @@
 HSPLandroid/os/StrictMode;->onCredentialProtectedPathAccess(Ljava/lang/String;I)V
 HSPLandroid/os/StrictMode;->onVmPolicyViolation(Landroid/os/strictmode/Violation;)V
 HSPLandroid/os/StrictMode;->onVmPolicyViolation(Landroid/os/strictmode/Violation;Z)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/os/StrictMode$ViolationInfo;Landroid/os/StrictMode$ViolationInfo;
-HSPLandroid/os/StrictMode;->readAndHandleBinderCallViolations(Landroid/os/Parcel;)V
-HSPLandroid/os/StrictMode;->setBlockGuardPolicy(I)V
+HSPLandroid/os/StrictMode;->readAndHandleBinderCallViolations(Landroid/os/Parcel;)V+]Landroid/os/StrictMode$AndroidBlockGuardPolicy;Landroid/os/StrictMode$AndroidBlockGuardPolicy;]Landroid/os/StrictMode$ViolationInfo;Landroid/os/StrictMode$ViolationInfo;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/os/StrictMode;->setBlockGuardPolicy(I)V+]Landroid/os/StrictMode$AndroidBlockGuardPolicy;Landroid/os/StrictMode$AndroidBlockGuardPolicy;]Ljava/lang/ThreadLocal;Landroid/os/StrictMode$4;
 HSPLandroid/os/StrictMode;->setBlockGuardVmPolicy(I)V
 HSPLandroid/os/StrictMode;->setCloseGuardEnabled(Z)V
-HSPLandroid/os/StrictMode;->setThreadPolicy(Landroid/os/StrictMode$ThreadPolicy;)V
+HSPLandroid/os/StrictMode;->setThreadPolicy(Landroid/os/StrictMode$ThreadPolicy;)V+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
 HSPLandroid/os/StrictMode;->setThreadPolicyMask(I)V
-HSPLandroid/os/StrictMode;->setVmPolicy(Landroid/os/StrictMode$VmPolicy;)V
-HSPLandroid/os/StrictMode;->tooManyViolationsThisLoop()Z
+HSPLandroid/os/StrictMode;->setVmPolicy(Landroid/os/StrictMode$VmPolicy;)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/os/MessageQueue;Landroid/os/MessageQueue;]Landroid/os/INetworkManagementService;Landroid/os/INetworkManagementService$Stub$Proxy;
+HSPLandroid/os/StrictMode;->tooManyViolationsThisLoop()Z+]Ljava/lang/ThreadLocal;Landroid/os/StrictMode$2;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/os/StrictMode;->trackActivity(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/os/StrictMode;->vmClosableObjectLeaksEnabled()Z
 HSPLandroid/os/StrictMode;->vmContentUriWithoutPermissionEnabled()Z
@@ -12819,9 +12828,9 @@
 HSPLandroid/os/UserHandle;->isSystem()Z
 HSPLandroid/os/UserHandle;->myUserId()I
 HSPLandroid/os/UserHandle;->of(I)Landroid/os/UserHandle;
-HSPLandroid/os/UserHandle;->readFromParcel(Landroid/os/Parcel;)Landroid/os/UserHandle;
+HSPLandroid/os/UserHandle;->readFromParcel(Landroid/os/Parcel;)Landroid/os/UserHandle;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/UserHandle;->toString()Ljava/lang/String;
-HSPLandroid/os/UserHandle;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/os/UserHandle;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/UserHandle;->writeToParcel(Landroid/os/UserHandle;Landroid/os/Parcel;)V
 HSPLandroid/os/UserManager$1;-><init>(Landroid/os/UserManager;ILjava/lang/String;)V
 HSPLandroid/os/UserManager$1;->bypass(Ljava/lang/Integer;)Z+]Ljava/lang/Integer;Ljava/lang/Integer;
@@ -12931,13 +12940,13 @@
 HSPLandroid/os/WorkSource;->removeUidsAndNames(Landroid/os/WorkSource;)Z
 HSPLandroid/os/WorkSource;->set(Landroid/os/WorkSource;)V
 HSPLandroid/os/WorkSource;->size()I
-HSPLandroid/os/WorkSource;->toString()Ljava/lang/String;
+HSPLandroid/os/WorkSource;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/os/WorkSource;->updateLocked(Landroid/os/WorkSource;ZZ)Z
 HSPLandroid/os/WorkSource;->updateUidsAndNamesLocked(Landroid/os/WorkSource;ZZ)Z
 HSPLandroid/os/WorkSource;->updateUidsLocked(Landroid/os/WorkSource;ZZ)Z
 HSPLandroid/os/WorkSource;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/os/connectivity/CellularBatteryStats;-><init>(JJJJJJJJJLjava/lang/Long;[J[J[JJ)V
-HSPLandroid/os/health/HealthStats;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/os/health/HealthStats;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/os/health/HealthStats;->getMeasurement(I)J
 HSPLandroid/os/health/HealthStats;->getMeasurements(I)Ljava/util/Map;
 HSPLandroid/os/health/HealthStats;->getStats(I)Ljava/util/Map;
@@ -12980,14 +12989,14 @@
 HSPLandroid/os/storage/StorageManager;->allocateBytes(Ljava/io/FileDescriptor;JI)V
 HSPLandroid/os/storage/StorageManager;->allocateBytes(Ljava/util/UUID;JI)V
 HSPLandroid/os/storage/StorageManager;->convert(Ljava/lang/String;)Ljava/util/UUID;
-HSPLandroid/os/storage/StorageManager;->convert(Ljava/util/UUID;)Ljava/lang/String;
+HSPLandroid/os/storage/StorageManager;->convert(Ljava/util/UUID;)Ljava/lang/String;+]Ljava/util/UUID;Ljava/util/UUID;
 HSPLandroid/os/storage/StorageManager;->getAllocatableBytes(Ljava/util/UUID;I)J
 HSPLandroid/os/storage/StorageManager;->getStorageVolume(Ljava/io/File;I)Landroid/os/storage/StorageVolume;
 HSPLandroid/os/storage/StorageManager;->getStorageVolume([Landroid/os/storage/StorageVolume;Ljava/io/File;)Landroid/os/storage/StorageVolume;
 HSPLandroid/os/storage/StorageManager;->getStorageVolumes()Ljava/util/List;
 HSPLandroid/os/storage/StorageManager;->getUuidForPath(Ljava/io/File;)Ljava/util/UUID;
 HSPLandroid/os/storage/StorageManager;->getVolumeList()[Landroid/os/storage/StorageVolume;
-HSPLandroid/os/storage/StorageManager;->getVolumeList(II)[Landroid/os/storage/StorageVolume;
+HSPLandroid/os/storage/StorageManager;->getVolumeList(II)[Landroid/os/storage/StorageVolume;+]Landroid/os/storage/IStorageManager;Landroid/os/storage/IStorageManager$Stub$Proxy;
 HSPLandroid/os/storage/StorageManager;->getVolumes()Ljava/util/List;
 HSPLandroid/os/storage/StorageManager;->isEncrypted()Z
 HSPLandroid/os/storage/StorageManager;->isFileEncryptedNativeOnly()Z
@@ -13019,9 +13028,9 @@
 HSPLandroid/os/strictmode/DiskReadViolation;-><init>()V
 HSPLandroid/os/strictmode/LeakedClosableViolation;-><init>(Ljava/lang/String;)V
 HSPLandroid/os/strictmode/Violation;-><init>(Ljava/lang/String;)V
-HSPLandroid/os/strictmode/Violation;->calcStackTraceHashCode([Ljava/lang/StackTraceElement;)I
+HSPLandroid/os/strictmode/Violation;->calcStackTraceHashCode([Ljava/lang/StackTraceElement;)I+]Ljava/lang/StackTraceElement;Ljava/lang/StackTraceElement;
 HSPLandroid/os/strictmode/Violation;->fillInStackTrace()Ljava/lang/Throwable;
-HSPLandroid/os/strictmode/Violation;->hashCode()I
+HSPLandroid/os/strictmode/Violation;->hashCode()I+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/Object;Landroid/os/strictmode/UnbufferedIoViolation;,Landroid/os/strictmode/DiskReadViolation;,Ljava/lang/Class;]Ljava/lang/Throwable;Ljava/lang/IllegalAccessException;,Ljava/lang/Throwable;]Landroid/os/strictmode/Violation;megamorphic_types
 HSPLandroid/os/strictmode/Violation;->initCause(Ljava/lang/Throwable;)Ljava/lang/Throwable;
 HSPLandroid/os/vibrator/PrebakedSegment;->getDuration()J
 HSPLandroid/os/vibrator/PrebakedSegment;->isValidEffectStrength(I)Z
@@ -13076,7 +13085,7 @@
 HSPLandroid/permission/PermissionManager;->addOnPermissionsChangeListener(Landroid/content/pm/PackageManager$OnPermissionsChangedListener;)V
 HSPLandroid/permission/PermissionManager;->checkPackageNamePermission(Ljava/lang/String;Ljava/lang/String;I)I
 HSPLandroid/permission/PermissionManager;->checkPackageNamePermissionUncached(Ljava/lang/String;Ljava/lang/String;I)I
-HSPLandroid/permission/PermissionManager;->checkPermission(Ljava/lang/String;II)I
+HSPLandroid/permission/PermissionManager;->checkPermission(Ljava/lang/String;II)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/app/PropertyInvalidatedCache;Landroid/permission/PermissionManager$1;
 HSPLandroid/permission/PermissionManager;->checkPermissionUncached(Ljava/lang/String;II)I
 HSPLandroid/permission/PermissionManager;->getPermissionFlags(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)I
 HSPLandroid/permission/PermissionManager;->getPermissionInfo(Ljava/lang/String;I)Landroid/content/pm/PermissionInfo;
@@ -13089,7 +13098,7 @@
 HSPLandroid/preference/PreferenceManager;->getDefaultSharedPreferencesName(Landroid/content/Context;)Ljava/lang/String;
 HSPLandroid/provider/CallLog$Calls;->shouldHaveSharedCallLogEntries(Landroid/content/Context;Landroid/os/UserManager;I)Z
 HSPLandroid/provider/ContactsContract$CommonDataKinds$Email;->getTypeLabelResource(I)I
-HSPLandroid/provider/ContactsContract$CommonDataKinds$Phone;->getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;
+HSPLandroid/provider/ContactsContract$CommonDataKinds$Phone;->getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;+]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLandroid/provider/ContactsContract$CommonDataKinds$Phone;->getTypeLabelResource(I)I
 HSPLandroid/provider/ContactsContract$Contacts;->getLookupUri(JLjava/lang/String;)Landroid/net/Uri;
 HSPLandroid/provider/DeviceConfig$$ExternalSyntheticLambda0;-><init>(Landroid/provider/DeviceConfig$OnPropertiesChangedListener;Landroid/provider/DeviceConfig$Properties;)V
@@ -13113,7 +13122,7 @@
 HSPLandroid/provider/DeviceConfig;->getInt(Ljava/lang/String;Ljava/lang/String;I)I
 HSPLandroid/provider/DeviceConfig;->getLong(Ljava/lang/String;Ljava/lang/String;J)J
 HSPLandroid/provider/DeviceConfig;->getProperties(Ljava/lang/String;[Ljava/lang/String;)Landroid/provider/DeviceConfig$Properties;
-HSPLandroid/provider/DeviceConfig;->getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/provider/DeviceConfig;->getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Landroid/provider/DeviceConfig$Properties;Landroid/provider/DeviceConfig$Properties;
 HSPLandroid/provider/DeviceConfig;->getString(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/provider/DeviceConfig;->handleChange(Landroid/net/Uri;)V
 HSPLandroid/provider/DeviceConfig;->incrementNamespace(Ljava/lang/String;)V
@@ -13151,7 +13160,7 @@
 HSPLandroid/provider/Settings$GenerationTracker;->destroy()V
 HSPLandroid/provider/Settings$GenerationTracker;->getCurrentGeneration()I
 HSPLandroid/provider/Settings$GenerationTracker;->isGenerationChanged()Z
-HSPLandroid/provider/Settings$GenerationTracker;->readCurrentGeneration()I
+HSPLandroid/provider/Settings$GenerationTracker;->readCurrentGeneration()I+]Landroid/util/MemoryIntArray;Landroid/util/MemoryIntArray;
 HSPLandroid/provider/Settings$Global;->getFloat(Landroid/content/ContentResolver;Ljava/lang/String;F)F
 HSPLandroid/provider/Settings$Global;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;)I
 HSPLandroid/provider/Settings$Global;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
@@ -13165,20 +13174,20 @@
 HSPLandroid/provider/Settings$Global;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZIZ)Z
 HSPLandroid/provider/Settings$NameValueCache$$ExternalSyntheticLambda0;-><init>(Landroid/provider/Settings$NameValueCache;)V
 HSPLandroid/provider/Settings$NameValueCache$$ExternalSyntheticLambda1;-><init>(Landroid/provider/Settings$NameValueCache;)V
-HSPLandroid/provider/Settings$NameValueCache;->getStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Ljava/lang/String;
+HSPLandroid/provider/Settings$NameValueCache;->getStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Ljava/lang/String;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/IContentProvider;Landroid/content/ContentProviderProxy;]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/provider/Settings$GenerationTracker;Landroid/provider/Settings$GenerationTracker;]Landroid/provider/Settings$ContentProviderHolder;Landroid/provider/Settings$ContentProviderHolder;]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;]Landroid/net/Uri;Landroid/net/Uri$StringUri;
 HSPLandroid/provider/Settings$NameValueCache;->getStringsForPrefix(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/util/List;)Landroid/util/ArrayMap;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/provider/Settings$GenerationTracker;Landroid/provider/Settings$GenerationTracker;]Landroid/provider/Settings$ContentProviderHolder;Landroid/provider/Settings$ContentProviderHolder;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Set;Ljava/util/HashMap$EntrySet;]Ljava/lang/String;Ljava/lang/String;]Landroid/content/IContentProvider;Landroid/content/ContentProviderProxy;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;,Ljava/util/ArrayList$Itr;]Landroid/net/Uri;Landroid/net/Uri$StringUri;
-HSPLandroid/provider/Settings$NameValueCache;->isCallerExemptFromReadableRestriction()Z
+HSPLandroid/provider/Settings$NameValueCache;->isCallerExemptFromReadableRestriction()Z+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;
 HSPLandroid/provider/Settings$NameValueCache;->putStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZIZ)Z
 HSPLandroid/provider/Settings$NameValueTable;->getUriFor(Landroid/net/Uri;Ljava/lang/String;)Landroid/net/Uri;
 HSPLandroid/provider/Settings$Secure;->getFloatForUser(Landroid/content/ContentResolver;Ljava/lang/String;FI)F
 HSPLandroid/provider/Settings$Secure;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;)I
-HSPLandroid/provider/Settings$Secure;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
+HSPLandroid/provider/Settings$Secure;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I+]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;
 HSPLandroid/provider/Settings$Secure;->getIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)I
 HSPLandroid/provider/Settings$Secure;->getIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)I
 HSPLandroid/provider/Settings$Secure;->getLong(Landroid/content/ContentResolver;Ljava/lang/String;J)J
 HSPLandroid/provider/Settings$Secure;->getLongForUser(Landroid/content/ContentResolver;Ljava/lang/String;JI)J
 HSPLandroid/provider/Settings$Secure;->getString(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String;
-HSPLandroid/provider/Settings$Secure;->getStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Ljava/lang/String;
+HSPLandroid/provider/Settings$Secure;->getStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Ljava/lang/String;+]Landroid/provider/Settings$NameValueCache;Landroid/provider/Settings$NameValueCache;]Ljava/util/HashSet;Ljava/util/HashSet;
 HSPLandroid/provider/Settings$Secure;->getUriFor(Ljava/lang/String;)Landroid/net/Uri;
 HSPLandroid/provider/Settings$Secure;->putInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z
 HSPLandroid/provider/Settings$Secure;->putIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)Z
@@ -13192,7 +13201,7 @@
 HSPLandroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
 HSPLandroid/provider/Settings$System;->getIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)I
 HSPLandroid/provider/Settings$System;->getIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)I
-HSPLandroid/provider/Settings$System;->getStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Ljava/lang/String;
+HSPLandroid/provider/Settings$System;->getStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;I)Ljava/lang/String;+]Landroid/provider/Settings$NameValueCache;Landroid/provider/Settings$NameValueCache;]Ljava/util/HashSet;Ljava/util/HashSet;
 HSPLandroid/provider/Settings$System;->getUriFor(Ljava/lang/String;)Landroid/net/Uri;
 HSPLandroid/provider/Settings$System;->putInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z
 HSPLandroid/provider/Settings$System;->putIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)Z
@@ -13251,7 +13260,7 @@
 HSPLandroid/security/KeyStoreOperation;->lambda$update$1$android-security-KeyStoreOperation([B)[B+]Landroid/system/keystore2/IKeystoreOperation;Landroid/system/keystore2/IKeystoreOperation$Stub$Proxy;
 HSPLandroid/security/KeyStoreOperation;->update([B)[B
 HSPLandroid/security/KeyStoreSecurityLevel;-><init>(Landroid/system/keystore2/IKeystoreSecurityLevel;)V
-HSPLandroid/security/KeyStoreSecurityLevel;->createOperation(Landroid/system/keystore2/KeyDescriptor;Ljava/util/Collection;)Landroid/security/KeyStoreOperation;
+HSPLandroid/security/KeyStoreSecurityLevel;->createOperation(Landroid/system/keystore2/KeyDescriptor;Ljava/util/Collection;)Landroid/security/KeyStoreOperation;+]Ljava/util/Collection;Ljava/util/ArrayList;]Landroid/system/keystore2/IKeystoreSecurityLevel;Landroid/system/keystore2/IKeystoreSecurityLevel$Stub$Proxy;
 HSPLandroid/security/NetworkSecurityPolicy;->getInstance()Landroid/security/NetworkSecurityPolicy;
 HSPLandroid/security/NetworkSecurityPolicy;->isCleartextTrafficPermitted(Ljava/lang/String;)Z
 HSPLandroid/security/keymaster/ExportResult$1;->createFromParcel(Landroid/os/Parcel;)Landroid/security/keymaster/ExportResult;
@@ -13363,7 +13372,7 @@
 HSPLandroid/security/keystore2/AndroidKeyStoreAuthenticatedAESCipherSpi$GCM;->resetAll()V
 HSPLandroid/security/keystore2/AndroidKeyStoreAuthenticatedAESCipherSpi$GCM;->resetWhilePreservingInitState()V
 HSPLandroid/security/keystore2/AndroidKeyStoreAuthenticatedAESCipherSpi;-><init>(II)V
-HSPLandroid/security/keystore2/AndroidKeyStoreAuthenticatedAESCipherSpi;->addAlgorithmSpecificParametersToBegin(Ljava/util/List;)V
+HSPLandroid/security/keystore2/AndroidKeyStoreAuthenticatedAESCipherSpi;->addAlgorithmSpecificParametersToBegin(Ljava/util/List;)V+]Landroid/security/keystore2/AndroidKeyStoreAuthenticatedAESCipherSpi;Landroid/security/keystore2/AndroidKeyStoreAuthenticatedAESCipherSpi$GCM$NoPadding;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLandroid/security/keystore2/AndroidKeyStoreAuthenticatedAESCipherSpi;->engineGetIV()[B
 HSPLandroid/security/keystore2/AndroidKeyStoreAuthenticatedAESCipherSpi;->initKey(ILjava/security/Key;)V
 HSPLandroid/security/keystore2/AndroidKeyStoreAuthenticatedAESCipherSpi;->loadAlgorithmSpecificParametersFromBeginResult([Landroid/hardware/security/keymint/KeyParameter;)V
@@ -13380,7 +13389,7 @@
 HSPLandroid/security/keystore2/AndroidKeyStoreCipherSpiBase;->engineDoFinal([BII[BI)I
 HSPLandroid/security/keystore2/AndroidKeyStoreCipherSpiBase;->engineInit(ILjava/security/Key;Ljava/security/SecureRandom;)V
 HSPLandroid/security/keystore2/AndroidKeyStoreCipherSpiBase;->engineInit(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
-HSPLandroid/security/keystore2/AndroidKeyStoreCipherSpiBase;->ensureKeystoreOperationInitialized()V
+HSPLandroid/security/keystore2/AndroidKeyStoreCipherSpiBase;->ensureKeystoreOperationInitialized()V+]Landroid/security/keystore2/AndroidKeyStoreCipherSpiBase;Landroid/security/keystore2/AndroidKeyStoreAuthenticatedAESCipherSpi$GCM$NoPadding;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/security/keystore2/AndroidKeyStoreKey;Landroid/security/keystore2/AndroidKeyStoreSecretKey;]Landroid/security/KeyStoreSecurityLevel;Landroid/security/KeyStoreSecurityLevel;]Landroid/security/KeyStoreOperation;Landroid/security/KeyStoreOperation;
 HSPLandroid/security/keystore2/AndroidKeyStoreCipherSpiBase;->finalize()V
 HSPLandroid/security/keystore2/AndroidKeyStoreCipherSpiBase;->flushAAD()V
 HSPLandroid/security/keystore2/AndroidKeyStoreCipherSpiBase;->init(ILjava/security/Key;Ljava/security/SecureRandom;)V
@@ -13395,7 +13404,7 @@
 HSPLandroid/security/keystore2/AndroidKeyStoreKey;->getSecurityLevel()Landroid/security/KeyStoreSecurityLevel;
 HSPLandroid/security/keystore2/AndroidKeyStoreProvider;-><init>()V
 HSPLandroid/security/keystore2/AndroidKeyStoreProvider;->install()V
-HSPLandroid/security/keystore2/AndroidKeyStoreProvider;->loadAndroidKeyStoreKeyFromKeystore(Landroid/security/KeyStore2;Landroid/system/keystore2/KeyDescriptor;)Landroid/security/keystore2/AndroidKeyStoreKey;
+HSPLandroid/security/keystore2/AndroidKeyStoreProvider;->loadAndroidKeyStoreKeyFromKeystore(Landroid/security/KeyStore2;Landroid/system/keystore2/KeyDescriptor;)Landroid/security/keystore2/AndroidKeyStoreKey;+]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/hardware/security/keymint/KeyParameterValue;Landroid/hardware/security/keymint/KeyParameterValue;]Landroid/security/KeyStore2;Landroid/security/KeyStore2;
 HSPLandroid/security/keystore2/AndroidKeyStoreProvider;->loadAndroidKeyStoreKeyFromKeystore(Landroid/security/KeyStore2;Ljava/lang/String;I)Landroid/security/keystore2/AndroidKeyStoreKey;
 HSPLandroid/security/keystore2/AndroidKeyStoreProvider;->makeAndroidKeyStoreSecretKeyFromKeyEntryResponse(Landroid/system/keystore2/KeyDescriptor;Landroid/system/keystore2/KeyEntryResponse;II)Landroid/security/keystore2/AndroidKeyStoreSecretKey;
 HSPLandroid/security/keystore2/AndroidKeyStoreProvider;->putKeyFactoryImpl(Ljava/lang/String;)V
@@ -13419,7 +13428,7 @@
 HSPLandroid/security/keystore2/KeyStoreCryptoOperationChunkedStreamer;-><init>(Landroid/security/keystore2/KeyStoreCryptoOperationChunkedStreamer$Stream;I)V
 HSPLandroid/security/keystore2/KeyStoreCryptoOperationChunkedStreamer;-><init>(Landroid/security/keystore2/KeyStoreCryptoOperationChunkedStreamer$Stream;II)V
 HSPLandroid/security/keystore2/KeyStoreCryptoOperationChunkedStreamer;->doFinal([BII[B)[B
-HSPLandroid/security/keystore2/KeyStoreCryptoOperationChunkedStreamer;->update([BII)[B
+HSPLandroid/security/keystore2/KeyStoreCryptoOperationChunkedStreamer;->update([BII)[B+]Landroid/security/keystore2/KeyStoreCryptoOperationChunkedStreamer$Stream;Landroid/security/keystore2/KeyStoreCryptoOperationChunkedStreamer$MainDataStream;
 HSPLandroid/security/keystore2/KeyStoreCryptoOperationUtils;-><clinit>()V
 HSPLandroid/security/keystore2/KeyStoreCryptoOperationUtils;->abortOperation(Landroid/security/KeyStoreOperation;)V
 HSPLandroid/security/keystore2/KeyStoreCryptoOperationUtils;->getOrMakeOperationChallenge(Landroid/security/KeyStoreOperation;Landroid/security/keystore2/AndroidKeyStoreKey;)J
@@ -13569,18 +13578,18 @@
 HSPLandroid/service/notification/IConditionProvider$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/service/notification/INotificationListener$Stub;-><init>()V
 HSPLandroid/service/notification/INotificationListener$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/service/notification/INotificationListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-HSPLandroid/service/notification/IStatusBarNotificationHolder$Stub$Proxy;->get()Landroid/service/notification/StatusBarNotification;
+HSPLandroid/service/notification/INotificationListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z+]Landroid/service/notification/INotificationListener$Stub;Landroid/service/notification/NotificationAssistantService$NotificationAssistantServiceWrapper;,Landroid/service/notification/NotificationListenerService$NotificationListenerWrapper;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/service/notification/IStatusBarNotificationHolder$Stub$Proxy;->get()Landroid/service/notification/StatusBarNotification;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/service/notification/NotificationListenerService$MyHandler;-><init>(Landroid/service/notification/NotificationListenerService;Landroid/os/Looper;)V
-HSPLandroid/service/notification/NotificationListenerService$MyHandler;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/service/notification/NotificationListenerService$MyHandler;->handleMessage(Landroid/os/Message;)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/internal/os/SomeArgs;Lcom/android/internal/os/SomeArgs;
 HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;-><init>(Landroid/service/notification/NotificationListenerService;)V
 HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onInterruptionFilterChanged(I)V
 HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onListenerConnected(Landroid/service/notification/NotificationRankingUpdate;)V
 HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onNotificationChannelGroupModification(Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannelGroup;I)V
 HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onNotificationChannelModification(Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannel;I)V
-HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onNotificationPosted(Landroid/service/notification/IStatusBarNotificationHolder;Landroid/service/notification/NotificationRankingUpdate;)V
-HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onNotificationRankingUpdate(Landroid/service/notification/NotificationRankingUpdate;)V
-HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onNotificationRemoved(Landroid/service/notification/IStatusBarNotificationHolder;Landroid/service/notification/NotificationRankingUpdate;Landroid/service/notification/NotificationStats;I)V
+HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onNotificationPosted(Landroid/service/notification/IStatusBarNotificationHolder;Landroid/service/notification/NotificationRankingUpdate;)V+]Landroid/os/Handler;Landroid/service/notification/NotificationListenerService$MyHandler;]Landroid/service/notification/IStatusBarNotificationHolder;Landroid/service/notification/IStatusBarNotificationHolder$Stub$Proxy;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/os/Message;Landroid/os/Message;
+HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onNotificationRankingUpdate(Landroid/service/notification/NotificationRankingUpdate;)V+]Landroid/os/Handler;Landroid/service/notification/NotificationListenerService$MyHandler;]Landroid/os/Message;Landroid/os/Message;
+HSPLandroid/service/notification/NotificationListenerService$NotificationListenerWrapper;->onNotificationRemoved(Landroid/service/notification/IStatusBarNotificationHolder;Landroid/service/notification/NotificationRankingUpdate;Landroid/service/notification/NotificationStats;I)V+]Landroid/os/Handler;Landroid/service/notification/NotificationListenerService$MyHandler;]Landroid/service/notification/IStatusBarNotificationHolder;Landroid/service/notification/IStatusBarNotificationHolder$Stub$Proxy;]Landroid/os/Message;Landroid/os/Message;
 HSPLandroid/service/notification/NotificationListenerService$Ranking;-><init>()V
 HSPLandroid/service/notification/NotificationListenerService$Ranking;-><init>(Landroid/os/Parcel;)V+]Ljava/lang/Object;Landroid/service/notification/NotificationListenerService$Ranking;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/service/notification/NotificationListenerService$Ranking;->getChannel()Landroid/app/NotificationChannel;
@@ -13588,12 +13597,12 @@
 HSPLandroid/service/notification/NotificationListenerService$Ranking;->populate(Landroid/service/notification/NotificationListenerService$Ranking;)V
 HSPLandroid/service/notification/NotificationListenerService$Ranking;->populate(Ljava/lang/String;IZIIILjava/lang/CharSequence;Ljava/lang/String;Landroid/app/NotificationChannel;Ljava/util/ArrayList;Ljava/util/ArrayList;ZIZJZLjava/util/ArrayList;Ljava/util/ArrayList;ZZZLandroid/content/pm/ShortcutInfo;IZ)V
 HSPLandroid/service/notification/NotificationListenerService$RankingMap$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/notification/NotificationListenerService$RankingMap;
-HSPLandroid/service/notification/NotificationListenerService$RankingMap$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/service/notification/NotificationListenerService$RankingMap;-><init>(Landroid/os/Parcel;)V+]Landroid/service/notification/NotificationListenerService$Ranking;Landroid/service/notification/NotificationListenerService$Ranking;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Object;Landroid/service/notification/NotificationListenerService$RankingMap;]Ljava/lang/Class;Ljava/lang/Class;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/service/notification/NotificationListenerService$RankingMap$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/service/notification/NotificationListenerService$RankingMap$1;Landroid/service/notification/NotificationListenerService$RankingMap$1;
+HSPLandroid/service/notification/NotificationListenerService$RankingMap;-><init>(Landroid/os/Parcel;)V+]Landroid/service/notification/NotificationListenerService$Ranking;Landroid/service/notification/NotificationListenerService$Ranking;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Object;Landroid/service/notification/NotificationListenerService$RankingMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/service/notification/NotificationListenerService$RankingMap;->getOrderedKeys()[Ljava/lang/String;
 HSPLandroid/service/notification/NotificationListenerService$RankingMap;->getRanking(Ljava/lang/String;Landroid/service/notification/NotificationListenerService$Ranking;)Z
 HSPLandroid/service/notification/NotificationListenerService;-><init>()V
-HSPLandroid/service/notification/NotificationListenerService;->applyUpdateLocked(Landroid/service/notification/NotificationRankingUpdate;)V
+HSPLandroid/service/notification/NotificationListenerService;->applyUpdateLocked(Landroid/service/notification/NotificationRankingUpdate;)V+]Landroid/service/notification/NotificationRankingUpdate;Landroid/service/notification/NotificationRankingUpdate;
 HSPLandroid/service/notification/NotificationListenerService;->attachBaseContext(Landroid/content/Context;)V
 HSPLandroid/service/notification/NotificationListenerService;->cleanUpNotificationList(Landroid/content/pm/ParceledListSlice;)[Landroid/service/notification/StatusBarNotification;
 HSPLandroid/service/notification/NotificationListenerService;->createLegacyIconExtras(Landroid/app/Notification;)V
@@ -13613,11 +13622,11 @@
 HSPLandroid/service/notification/NotificationListenerService;->onNotificationRankingUpdate(Landroid/service/notification/NotificationListenerService$RankingMap;)V
 HSPLandroid/service/notification/NotificationListenerService;->onNotificationRemoved(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;Landroid/service/notification/NotificationStats;I)V
 HSPLandroid/service/notification/NotificationRankingUpdate$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/notification/NotificationRankingUpdate;
-HSPLandroid/service/notification/NotificationRankingUpdate$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/service/notification/NotificationRankingUpdate;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/service/notification/NotificationRankingUpdate$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/service/notification/NotificationRankingUpdate$1;Landroid/service/notification/NotificationRankingUpdate$1;
+HSPLandroid/service/notification/NotificationRankingUpdate;-><init>(Landroid/os/Parcel;)V+]Ljava/lang/Object;Landroid/service/notification/NotificationRankingUpdate;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/service/notification/NotificationRankingUpdate;->getRankingMap()Landroid/service/notification/NotificationListenerService$RankingMap;
 HSPLandroid/service/notification/StatusBarNotification$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/notification/StatusBarNotification;
-HSPLandroid/service/notification/StatusBarNotification$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/service/notification/StatusBarNotification$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/service/notification/StatusBarNotification$1;Landroid/service/notification/StatusBarNotification$1;
 HSPLandroid/service/notification/StatusBarNotification;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Lcom/android/internal/logging/InstanceId$1;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/service/notification/StatusBarNotification;->getGroupKey()Ljava/lang/String;
 HSPLandroid/service/notification/StatusBarNotification;->getId()I
@@ -13637,7 +13646,7 @@
 HSPLandroid/service/notification/StatusBarNotification;->isAppGroup()Z
 HSPLandroid/service/notification/StatusBarNotification;->isGroup()Z
 HSPLandroid/service/notification/StatusBarNotification;->isOngoing()Z
-HSPLandroid/service/notification/StatusBarNotification;->key()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/Notification;Landroid/app/Notification;
+HSPLandroid/service/notification/StatusBarNotification;->key()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/Notification;Landroid/app/Notification;]Landroid/os/UserHandle;Landroid/os/UserHandle;
 HSPLandroid/service/notification/ZenModeConfig$ZenRule$1;->createFromParcel(Landroid/os/Parcel;)Landroid/service/notification/ZenModeConfig$ZenRule;
 HSPLandroid/service/notification/ZenModeConfig$ZenRule$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/service/notification/ZenModeConfig$ZenRule;-><init>(Landroid/os/Parcel;)V
@@ -13730,7 +13739,7 @@
 HSPLandroid/sysprop/TelephonyProperties;->operator_numeric()Ljava/util/List;
 HSPLandroid/sysprop/TelephonyProperties;->tryParseBoolean(Ljava/lang/String;)Ljava/lang/Boolean;
 HSPLandroid/sysprop/TelephonyProperties;->tryParseInteger(Ljava/lang/String;)Ljava/lang/Integer;
-HSPLandroid/sysprop/TelephonyProperties;->tryParseList(Ljava/util/function/Function;Ljava/lang/String;)Ljava/util/List;
+HSPLandroid/sysprop/TelephonyProperties;->tryParseList(Ljava/util/function/Function;Ljava/lang/String;)Ljava/util/List;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/function/Function;Landroid/sysprop/TelephonyProperties$$ExternalSyntheticLambda8;,Landroid/sysprop/TelephonyProperties$$ExternalSyntheticLambda5;,Landroid/sysprop/TelephonyProperties$$ExternalSyntheticLambda0;,Landroid/sysprop/TelephonyProperties$$ExternalSyntheticLambda9;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLandroid/sysprop/TelephonyProperties;->tryParseString(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/sysprop/VndkProperties;->product_vndk_version()Ljava/util/Optional;
 HSPLandroid/sysprop/VndkProperties;->tryParseString(Ljava/lang/String;)Ljava/lang/String;
@@ -13755,7 +13764,7 @@
 HSPLandroid/system/Os;->getpeername(Ljava/io/FileDescriptor;)Ljava/net/SocketAddress;
 HSPLandroid/system/Os;->getpgid(I)I
 HSPLandroid/system/Os;->getpid()I
-HSPLandroid/system/Os;->gettid()I
+HSPLandroid/system/Os;->gettid()I+]Llibcore/io/Os;Landroid/app/ActivityThread$AndroidOs;
 HSPLandroid/system/Os;->getuid()I+]Llibcore/io/Os;Landroid/app/ActivityThread$AndroidOs;
 HSPLandroid/system/Os;->getxattr(Ljava/lang/String;Ljava/lang/String;)[B
 HSPLandroid/system/Os;->ioctlInt(Ljava/io/FileDescriptor;I)I
@@ -13804,28 +13813,28 @@
 HSPLandroid/system/keystore2/Authorization$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/system/keystore2/Authorization;-><clinit>()V
 HSPLandroid/system/keystore2/Authorization;-><init>()V
-HSPLandroid/system/keystore2/Authorization;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/system/keystore2/Authorization;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/system/keystore2/CreateOperationResponse$1;-><init>()V
 HSPLandroid/system/keystore2/CreateOperationResponse$1;->createFromParcel(Landroid/os/Parcel;)Landroid/system/keystore2/CreateOperationResponse;
 HSPLandroid/system/keystore2/CreateOperationResponse$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/system/keystore2/CreateOperationResponse;-><clinit>()V
 HSPLandroid/system/keystore2/CreateOperationResponse;-><init>()V
-HSPLandroid/system/keystore2/CreateOperationResponse;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/system/keystore2/CreateOperationResponse;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/system/keystore2/IKeystoreOperation$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/system/keystore2/IKeystoreOperation$Stub$Proxy;->abort()V
 HSPLandroid/system/keystore2/IKeystoreOperation$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/system/keystore2/IKeystoreOperation$Stub$Proxy;->finish([B[B)[B
-HSPLandroid/system/keystore2/IKeystoreOperation$Stub$Proxy;->update([B)[B
+HSPLandroid/system/keystore2/IKeystoreOperation$Stub$Proxy;->finish([B[B)[B+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/system/keystore2/IKeystoreOperation$Stub$Proxy;->update([B)[B+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/system/keystore2/IKeystoreOperation$Stub;->asInterface(Landroid/os/IBinder;)Landroid/system/keystore2/IKeystoreOperation;
 HSPLandroid/system/keystore2/IKeystoreOperation;-><clinit>()V
 HSPLandroid/system/keystore2/IKeystoreSecurityLevel$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/system/keystore2/IKeystoreSecurityLevel$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/system/keystore2/IKeystoreSecurityLevel$Stub$Proxy;->createOperation(Landroid/system/keystore2/KeyDescriptor;[Landroid/hardware/security/keymint/KeyParameter;Z)Landroid/system/keystore2/CreateOperationResponse;
+HSPLandroid/system/keystore2/IKeystoreSecurityLevel$Stub$Proxy;->createOperation(Landroid/system/keystore2/KeyDescriptor;[Landroid/hardware/security/keymint/KeyParameter;Z)Landroid/system/keystore2/CreateOperationResponse;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/system/keystore2/IKeystoreSecurityLevel$Stub;->asInterface(Landroid/os/IBinder;)Landroid/system/keystore2/IKeystoreSecurityLevel;
 HSPLandroid/system/keystore2/IKeystoreSecurityLevel;-><clinit>()V
 HSPLandroid/system/keystore2/IKeystoreService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/system/keystore2/IKeystoreService$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/system/keystore2/IKeystoreService$Stub$Proxy;->getKeyEntry(Landroid/system/keystore2/KeyDescriptor;)Landroid/system/keystore2/KeyEntryResponse;
+HSPLandroid/system/keystore2/IKeystoreService$Stub$Proxy;->getKeyEntry(Landroid/system/keystore2/KeyDescriptor;)Landroid/system/keystore2/KeyEntryResponse;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/system/keystore2/IKeystoreService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/system/keystore2/IKeystoreService;
 HSPLandroid/system/keystore2/IKeystoreService;-><clinit>()V
 HSPLandroid/system/keystore2/KeyDescriptor$1;-><init>()V
@@ -13833,20 +13842,20 @@
 HSPLandroid/system/keystore2/KeyDescriptor$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/system/keystore2/KeyDescriptor;-><clinit>()V
 HSPLandroid/system/keystore2/KeyDescriptor;-><init>()V
-HSPLandroid/system/keystore2/KeyDescriptor;->readFromParcel(Landroid/os/Parcel;)V
-HSPLandroid/system/keystore2/KeyDescriptor;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/system/keystore2/KeyDescriptor;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/system/keystore2/KeyDescriptor;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/system/keystore2/KeyEntryResponse$1;-><init>()V
 HSPLandroid/system/keystore2/KeyEntryResponse$1;->createFromParcel(Landroid/os/Parcel;)Landroid/system/keystore2/KeyEntryResponse;
 HSPLandroid/system/keystore2/KeyEntryResponse$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/system/keystore2/KeyEntryResponse;-><clinit>()V
 HSPLandroid/system/keystore2/KeyEntryResponse;-><init>()V
-HSPLandroid/system/keystore2/KeyEntryResponse;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/system/keystore2/KeyEntryResponse;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/system/keystore2/KeyMetadata$1;-><init>()V
 HSPLandroid/system/keystore2/KeyMetadata$1;->createFromParcel(Landroid/os/Parcel;)Landroid/system/keystore2/KeyMetadata;
 HSPLandroid/system/keystore2/KeyMetadata$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/system/keystore2/KeyMetadata;-><clinit>()V
 HSPLandroid/system/keystore2/KeyMetadata;-><init>()V
-HSPLandroid/system/keystore2/KeyMetadata;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/system/keystore2/KeyMetadata;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/system/keystore2/KeyParameters$1;-><init>()V
 HSPLandroid/system/keystore2/KeyParameters$1;->createFromParcel(Landroid/os/Parcel;)Landroid/system/keystore2/KeyParameters;
 HSPLandroid/system/keystore2/KeyParameters$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -13926,7 +13935,7 @@
 HSPLandroid/telecom/PhoneAccount$Builder;->setShortDescription(Ljava/lang/CharSequence;)Landroid/telecom/PhoneAccount$Builder;
 HSPLandroid/telecom/PhoneAccount$Builder;->setSubscriptionAddress(Landroid/net/Uri;)Landroid/telecom/PhoneAccount$Builder;
 HSPLandroid/telecom/PhoneAccount$Builder;->setSupportedUriSchemes(Ljava/util/List;)Landroid/telecom/PhoneAccount$Builder;
-HSPLandroid/telecom/PhoneAccount;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telecom/PhoneAccount;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/net/Uri$1;,Landroid/graphics/drawable/Icon$1;,Landroid/telecom/PhoneAccountHandle$1;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/telecom/PhoneAccount;-><init>(Landroid/telecom/PhoneAccountHandle;Landroid/net/Uri;Landroid/net/Uri;ILandroid/graphics/drawable/Icon;ILjava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/util/List;Landroid/os/Bundle;IZLjava/lang/String;)V
 HSPLandroid/telecom/PhoneAccount;->audioRoutesToString()Ljava/lang/String;
 HSPLandroid/telecom/PhoneAccount;->builder(Landroid/telecom/PhoneAccountHandle;Ljava/lang/CharSequence;)Landroid/telecom/PhoneAccount$Builder;
@@ -13941,7 +13950,7 @@
 HSPLandroid/telecom/PhoneAccountHandle$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/telecom/PhoneAccountHandle;-><init>(Landroid/content/ComponentName;Ljava/lang/String;)V
 HSPLandroid/telecom/PhoneAccountHandle;-><init>(Landroid/content/ComponentName;Ljava/lang/String;Landroid/os/UserHandle;)V
-HSPLandroid/telecom/PhoneAccountHandle;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telecom/PhoneAccountHandle;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/os/UserHandle$1;,Landroid/content/ComponentName$1;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/telecom/PhoneAccountHandle;->checkParameters(Landroid/content/ComponentName;Landroid/os/UserHandle;)V
 HSPLandroid/telecom/PhoneAccountHandle;->equals(Ljava/lang/Object;)Z
 HSPLandroid/telecom/PhoneAccountHandle;->getComponentName()Landroid/content/ComponentName;
@@ -13992,11 +14001,11 @@
 HSPLandroid/telephony/CellIdentityGsm;->updateGlobalCellId()V
 HSPLandroid/telephony/CellIdentityLte$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellIdentityLte;
 HSPLandroid/telephony/CellIdentityLte$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/CellIdentityLte;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telephony/CellIdentityLte;-><init>(Landroid/os/Parcel;)V+]Landroid/telephony/CellIdentityLte;Landroid/telephony/CellIdentityLte;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/telephony/CellIdentityLte;->createFromParcelBody(Landroid/os/Parcel;)Landroid/telephony/CellIdentityLte;
 HSPLandroid/telephony/CellIdentityLte;->equals(Ljava/lang/Object;)Z
 HSPLandroid/telephony/CellIdentityLte;->getCi()I
-HSPLandroid/telephony/CellIdentityLte;->toString()Ljava/lang/String;
+HSPLandroid/telephony/CellIdentityLte;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/telephony/CellIdentityLte;->updateGlobalCellId()V
 HSPLandroid/telephony/CellIdentityLte;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/telephony/CellIdentityWcdma$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellIdentityWcdma;
@@ -14014,7 +14023,7 @@
 HSPLandroid/telephony/CellSignalStrength;->getNumSignalStrengthLevels()I
 HSPLandroid/telephony/CellSignalStrengthCdma$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellSignalStrengthCdma;
 HSPLandroid/telephony/CellSignalStrengthCdma$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/CellSignalStrengthCdma;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telephony/CellSignalStrengthCdma;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/telephony/CellSignalStrengthCdma;->equals(Ljava/lang/Object;)Z
 HSPLandroid/telephony/CellSignalStrengthCdma;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/telephony/CellSignalStrengthGsm$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellSignalStrengthGsm;
@@ -14024,7 +14033,7 @@
 HSPLandroid/telephony/CellSignalStrengthGsm;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/telephony/CellSignalStrengthLte$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellSignalStrengthLte;
 HSPLandroid/telephony/CellSignalStrengthLte$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/CellSignalStrengthLte;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telephony/CellSignalStrengthLte;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/telephony/CellSignalStrengthLte;->equals(Ljava/lang/Object;)Z
 HSPLandroid/telephony/CellSignalStrengthLte;->getDbm()I
 HSPLandroid/telephony/CellSignalStrengthLte;->getLevel()I
@@ -14033,17 +14042,17 @@
 HSPLandroid/telephony/CellSignalStrengthLte;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/telephony/CellSignalStrengthNr$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellSignalStrengthNr;
 HSPLandroid/telephony/CellSignalStrengthNr$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/CellSignalStrengthNr;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telephony/CellSignalStrengthNr;-><init>(Landroid/os/Parcel;)V+]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/telephony/CellSignalStrengthNr;->equals(Ljava/lang/Object;)Z
 HSPLandroid/telephony/CellSignalStrengthNr;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/telephony/CellSignalStrengthTdscdma$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellSignalStrengthTdscdma;
 HSPLandroid/telephony/CellSignalStrengthTdscdma$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/CellSignalStrengthTdscdma;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telephony/CellSignalStrengthTdscdma;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/telephony/CellSignalStrengthTdscdma;->equals(Ljava/lang/Object;)Z
 HSPLandroid/telephony/CellSignalStrengthTdscdma;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/telephony/CellSignalStrengthWcdma$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/CellSignalStrengthWcdma;
 HSPLandroid/telephony/CellSignalStrengthWcdma$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/CellSignalStrengthWcdma;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telephony/CellSignalStrengthWcdma;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/telephony/CellSignalStrengthWcdma;->equals(Ljava/lang/Object;)Z
 HSPLandroid/telephony/CellSignalStrengthWcdma;->getLevel()I
 HSPLandroid/telephony/CellSignalStrengthWcdma;->writeToParcel(Landroid/os/Parcel;I)V
@@ -14088,8 +14097,8 @@
 HSPLandroid/telephony/NetworkRegistrationInfo$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/telephony/NetworkRegistrationInfo$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/NetworkRegistrationInfo;
 HSPLandroid/telephony/NetworkRegistrationInfo$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/NetworkRegistrationInfo;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/telephony/NetworkRegistrationInfo;-><init>(Landroid/telephony/NetworkRegistrationInfo;)V
+HSPLandroid/telephony/NetworkRegistrationInfo;-><init>(Landroid/os/Parcel;)V+]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/telephony/NetworkRegistrationInfo;-><init>(Landroid/telephony/NetworkRegistrationInfo;)V+]Landroid/os/Parcelable$Creator;Landroid/telephony/CellIdentity$1;]Landroid/telephony/CellIdentity;Landroid/telephony/CellIdentityLte;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/telephony/NetworkRegistrationInfo;->domainToString(I)Ljava/lang/String;
 HSPLandroid/telephony/NetworkRegistrationInfo;->getAccessNetworkTechnology()I
 HSPLandroid/telephony/NetworkRegistrationInfo;->getDomain()I
@@ -14103,7 +14112,7 @@
 HSPLandroid/telephony/NetworkRegistrationInfo;->nrStateToString(I)Ljava/lang/String;
 HSPLandroid/telephony/NetworkRegistrationInfo;->registrationStateToString(I)Ljava/lang/String;
 HSPLandroid/telephony/NetworkRegistrationInfo;->serviceTypeToString(I)Ljava/lang/String;
-HSPLandroid/telephony/NetworkRegistrationInfo;->toString()Ljava/lang/String;
+HSPLandroid/telephony/NetworkRegistrationInfo;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/stream/Stream;Ljava/util/stream/ReferencePipeline$Head;,Ljava/util/stream/ReferencePipeline$3;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/telephony/NetworkRegistrationInfo;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/telephony/PhoneNumberUtils;->convertKeypadLettersToDigits(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/telephony/PhoneNumberUtils;->extractNetworkPortionAlt(Ljava/lang/String;)Ljava/lang/String;
@@ -14112,7 +14121,7 @@
 HSPLandroid/telephony/PhoneNumberUtils;->getMinMatch()I
 HSPLandroid/telephony/PhoneNumberUtils;->isDialable(C)Z
 HSPLandroid/telephony/PhoneNumberUtils;->isNonSeparator(C)Z
-HSPLandroid/telephony/PhoneNumberUtils;->normalizeNumber(Ljava/lang/String;)Ljava/lang/String;
+HSPLandroid/telephony/PhoneNumberUtils;->normalizeNumber(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/telephony/PhoneNumberUtils;->stripSeparators(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda10;->runOrThrow()V
 HSPLandroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda13;-><init>(Landroid/telephony/PhoneStateListener;ILjava/lang/String;)V
@@ -14153,7 +14162,7 @@
 HSPLandroid/telephony/ServiceState$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/ServiceState;
 HSPLandroid/telephony/ServiceState$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/telephony/ServiceState;-><init>()V
-HSPLandroid/telephony/ServiceState;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telephony/ServiceState;-><init>(Landroid/os/Parcel;)V+]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/telephony/ServiceState;-><init>(Landroid/telephony/ServiceState;)V
 HSPLandroid/telephony/ServiceState;->copyFrom(Landroid/telephony/ServiceState;)V
 HSPLandroid/telephony/ServiceState;->createLocationInfoSanitizedCopy(Z)Landroid/telephony/ServiceState;
@@ -14183,11 +14192,11 @@
 HSPLandroid/telephony/ServiceState;->rilRadioTechnologyToString(I)Ljava/lang/String;
 HSPLandroid/telephony/ServiceState;->rilServiceStateToString(I)Ljava/lang/String;
 HSPLandroid/telephony/ServiceState;->roamingTypeToString(I)Ljava/lang/String;
-HSPLandroid/telephony/ServiceState;->toString()Ljava/lang/String;
+HSPLandroid/telephony/ServiceState;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/telephony/ServiceState;Landroid/telephony/ServiceState;
 HSPLandroid/telephony/ServiceState;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/telephony/SignalStrength$1;->createFromParcel(Landroid/os/Parcel;)Landroid/telephony/SignalStrength;
 HSPLandroid/telephony/SignalStrength$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLandroid/telephony/SignalStrength;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/telephony/SignalStrength;-><init>(Landroid/os/Parcel;)V+]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/telephony/SignalStrength;->getCellSignalStrengths()Ljava/util/List;
 HSPLandroid/telephony/SignalStrength;->getCellSignalStrengths(Ljava/lang/Class;)Ljava/util/List;
 HSPLandroid/telephony/SignalStrength;->getLevel()I
@@ -14214,7 +14223,7 @@
 HSPLandroid/telephony/SubscriptionInfo;->isEmbedded()Z
 HSPLandroid/telephony/SubscriptionInfo;->isOpportunistic()Z
 HSPLandroid/telephony/SubscriptionInfo;->setAssociatedPlmns([Ljava/lang/String;[Ljava/lang/String;)V
-HSPLandroid/telephony/SubscriptionInfo;->toString()Ljava/lang/String;
+HSPLandroid/telephony/SubscriptionInfo;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda16;-><init>(Landroid/telephony/SubscriptionManager;)V
 HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda16;->test(Ljava/lang/Object;)Z+]Landroid/telephony/SubscriptionManager;Landroid/telephony/SubscriptionManager;
 HSPLandroid/telephony/SubscriptionManager$$ExternalSyntheticLambda3;->applyOrThrow(Ljava/lang/Object;)Ljava/lang/Object;
@@ -14501,7 +14510,7 @@
 HSPLandroid/text/BoringLayout;-><init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;Z)V+]Landroid/text/BoringLayout;Landroid/text/BoringLayout;
 HSPLandroid/text/BoringLayout;-><init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)V
 HSPLandroid/text/BoringLayout;-><init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;IZ)V+]Landroid/text/BoringLayout;Landroid/text/BoringLayout;
-HSPLandroid/text/BoringLayout;->draw(Landroid/graphics/Canvas;Landroid/graphics/Path;Landroid/graphics/Paint;I)V
+HSPLandroid/text/BoringLayout;->draw(Landroid/graphics/Canvas;Landroid/graphics/Path;Landroid/graphics/Paint;I)V+]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
 HSPLandroid/text/BoringLayout;->ellipsized(II)V
 HSPLandroid/text/BoringLayout;->getEllipsisCount(I)I
 HSPLandroid/text/BoringLayout;->getEllipsisStart(I)I
@@ -14517,13 +14526,13 @@
 HSPLandroid/text/BoringLayout;->getLineWidth(I)F
 HSPLandroid/text/BoringLayout;->getParagraphDirection(I)I
 HSPLandroid/text/BoringLayout;->hasAnyInterestingChars(Ljava/lang/CharSequence;I)Z
-HSPLandroid/text/BoringLayout;->init(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/Layout$Alignment;Landroid/text/BoringLayout$Metrics;ZZZ)V+]Landroid/text/TextLine;Landroid/text/TextLine;]Ljava/lang/CharSequence;Ljava/lang/String;,Landroid/text/SpannableString;,Landroid/text/SpannedString;,Landroid/text/SpannableStringBuilder;
+HSPLandroid/text/BoringLayout;->init(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/Layout$Alignment;Landroid/text/BoringLayout$Metrics;ZZZ)V+]Landroid/text/TextLine;Landroid/text/TextLine;]Ljava/lang/CharSequence;Ljava/lang/String;,Landroid/text/SpannableString;,Landroid/text/SpannableStringBuilder;,Landroid/text/SpannedString;
 HSPLandroid/text/BoringLayout;->isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;Landroid/text/BoringLayout$Metrics;)Landroid/text/BoringLayout$Metrics;
-HSPLandroid/text/BoringLayout;->isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;ZLandroid/text/BoringLayout$Metrics;)Landroid/text/BoringLayout$Metrics;+]Landroid/text/TextLine;Landroid/text/TextLine;]Landroid/text/Spanned;missing_types]Ljava/lang/CharSequence;megamorphic_types]Landroid/text/TextDirectionHeuristic;Landroid/text/TextDirectionHeuristics$TextDirectionHeuristicInternal;,Landroid/text/TextDirectionHeuristics$TextDirectionHeuristicLocale;
+HSPLandroid/text/BoringLayout;->isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;ZLandroid/text/BoringLayout$Metrics;)Landroid/text/BoringLayout$Metrics;+]Landroid/text/TextLine;Landroid/text/TextLine;]Landroid/text/Spanned;missing_types]Ljava/lang/CharSequence;megamorphic_types]Landroid/text/TextDirectionHeuristic;Landroid/text/TextDirectionHeuristics$TextDirectionHeuristicLocale;,Landroid/text/TextDirectionHeuristics$TextDirectionHeuristicInternal;
 HSPLandroid/text/BoringLayout;->isFallbackLineSpacingEnabled()Z
 HSPLandroid/text/BoringLayout;->make(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;Z)Landroid/text/BoringLayout;
 HSPLandroid/text/BoringLayout;->make(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)Landroid/text/BoringLayout;
-HSPLandroid/text/BoringLayout;->replaceOrMake(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;Z)Landroid/text/BoringLayout;
+HSPLandroid/text/BoringLayout;->replaceOrMake(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;Z)Landroid/text/BoringLayout;+]Landroid/text/BoringLayout;Landroid/text/BoringLayout;
 HSPLandroid/text/BoringLayout;->replaceOrMake(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)Landroid/text/BoringLayout;
 HSPLandroid/text/BoringLayout;->replaceOrMake(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;Landroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;IZ)Landroid/text/BoringLayout;+]Landroid/text/BoringLayout;Landroid/text/BoringLayout;
 HSPLandroid/text/CharSequenceCharacterIterator;->current()C
@@ -14533,7 +14542,7 @@
 HSPLandroid/text/CharSequenceCharacterIterator;->getIndex()I
 HSPLandroid/text/CharSequenceCharacterIterator;->next()C
 HSPLandroid/text/CharSequenceCharacterIterator;->setIndex(I)C
-HSPLandroid/text/DynamicLayout$Builder;->obtain(Ljava/lang/CharSequence;Landroid/text/TextPaint;I)Landroid/text/DynamicLayout$Builder;
+HSPLandroid/text/DynamicLayout$Builder;->obtain(Ljava/lang/CharSequence;Landroid/text/TextPaint;I)Landroid/text/DynamicLayout$Builder;+]Landroid/util/Pools$SynchronizedPool;Landroid/util/Pools$SynchronizedPool;
 HSPLandroid/text/DynamicLayout$ChangeWatcher;->afterTextChanged(Landroid/text/Editable;)V
 HSPLandroid/text/DynamicLayout$ChangeWatcher;->beforeTextChanged(Ljava/lang/CharSequence;III)V
 HSPLandroid/text/DynamicLayout$ChangeWatcher;->onSpanAdded(Landroid/text/Spannable;Ljava/lang/Object;II)V
@@ -14541,10 +14550,10 @@
 HSPLandroid/text/DynamicLayout$ChangeWatcher;->onSpanRemoved(Landroid/text/Spannable;Ljava/lang/Object;II)V
 HSPLandroid/text/DynamicLayout$ChangeWatcher;->onTextChanged(Ljava/lang/CharSequence;III)V
 HSPLandroid/text/DynamicLayout;-><init>(Landroid/text/DynamicLayout$Builder;)V
-HSPLandroid/text/DynamicLayout;->addBlockAtOffset(I)V
-HSPLandroid/text/DynamicLayout;->contentMayProtrudeFromLineTopOrBottom(Ljava/lang/CharSequence;II)Z
-HSPLandroid/text/DynamicLayout;->createBlocks()V
-HSPLandroid/text/DynamicLayout;->generate(Landroid/text/DynamicLayout$Builder;)V+]Landroid/text/DynamicLayout;Landroid/text/DynamicLayout;]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;]Landroid/text/PackedObjectVector;Landroid/text/PackedObjectVector;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Ljava/lang/CharSequence;Landroid/text/SpannableStringBuilder;,Landroid/text/SpannableString;]Landroid/text/Spannable;Landroid/text/SpannableStringBuilder;,Landroid/text/SpannableString;
+HSPLandroid/text/DynamicLayout;->addBlockAtOffset(I)V+]Landroid/text/DynamicLayout;Landroid/text/DynamicLayout;
+HSPLandroid/text/DynamicLayout;->contentMayProtrudeFromLineTopOrBottom(Ljava/lang/CharSequence;II)Z+]Landroid/text/DynamicLayout;Landroid/text/DynamicLayout;]Landroid/graphics/Paint;Landroid/text/TextPaint;]Landroid/text/Spanned;missing_types
+HSPLandroid/text/DynamicLayout;->createBlocks()V+]Ljava/lang/CharSequence;missing_types
+HSPLandroid/text/DynamicLayout;->generate(Landroid/text/DynamicLayout$Builder;)V+]Landroid/text/DynamicLayout;Landroid/text/DynamicLayout;]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;]Landroid/text/PackedObjectVector;Landroid/text/PackedObjectVector;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Ljava/lang/CharSequence;missing_types]Landroid/text/Spannable;missing_types
 HSPLandroid/text/DynamicLayout;->getBlockEndLines()[I
 HSPLandroid/text/DynamicLayout;->getBlockIndices()[I
 HSPLandroid/text/DynamicLayout;->getBlocksAlwaysNeedToBeRedrawn()Landroid/util/ArraySet;
@@ -14553,17 +14562,17 @@
 HSPLandroid/text/DynamicLayout;->getEllipsizedWidth()I
 HSPLandroid/text/DynamicLayout;->getEndHyphenEdit(I)I
 HSPLandroid/text/DynamicLayout;->getIndexFirstChangedBlock()I
-HSPLandroid/text/DynamicLayout;->getLineContainsTab(I)Z
-HSPLandroid/text/DynamicLayout;->getLineCount()I
-HSPLandroid/text/DynamicLayout;->getLineDescent(I)I
-HSPLandroid/text/DynamicLayout;->getLineDirections(I)Landroid/text/Layout$Directions;
-HSPLandroid/text/DynamicLayout;->getLineExtra(I)I
+HSPLandroid/text/DynamicLayout;->getLineContainsTab(I)Z+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
+HSPLandroid/text/DynamicLayout;->getLineCount()I+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
+HSPLandroid/text/DynamicLayout;->getLineDescent(I)I+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
+HSPLandroid/text/DynamicLayout;->getLineDirections(I)Landroid/text/Layout$Directions;+]Landroid/text/PackedObjectVector;Landroid/text/PackedObjectVector;
+HSPLandroid/text/DynamicLayout;->getLineExtra(I)I+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
 HSPLandroid/text/DynamicLayout;->getLineStart(I)I+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
-HSPLandroid/text/DynamicLayout;->getLineTop(I)I
+HSPLandroid/text/DynamicLayout;->getLineTop(I)I+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
 HSPLandroid/text/DynamicLayout;->getNumberOfBlocks()I
-HSPLandroid/text/DynamicLayout;->getParagraphDirection(I)I
+HSPLandroid/text/DynamicLayout;->getParagraphDirection(I)I+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
 HSPLandroid/text/DynamicLayout;->getStartHyphenEdit(I)I
-HSPLandroid/text/DynamicLayout;->reflow(Ljava/lang/CharSequence;III)V+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;]Landroid/text/DynamicLayout;Landroid/text/DynamicLayout;]Landroid/text/PackedObjectVector;Landroid/text/PackedObjectVector;]Landroid/text/StaticLayout;Landroid/text/StaticLayout;]Landroid/text/Spanned;Landroid/text/SpannableStringBuilder;,Landroid/text/SpannableString;,Landroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;]Ljava/lang/CharSequence;Landroid/text/SpannableStringBuilder;,Landroid/text/SpannableString;,Landroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;]Landroid/text/StaticLayout$Builder;Landroid/text/StaticLayout$Builder;
+HSPLandroid/text/DynamicLayout;->reflow(Ljava/lang/CharSequence;III)V+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;]Landroid/text/DynamicLayout;Landroid/text/DynamicLayout;]Landroid/text/PackedObjectVector;Landroid/text/PackedObjectVector;]Landroid/text/StaticLayout;Landroid/text/StaticLayout;]Landroid/text/Spanned;missing_types]Ljava/lang/CharSequence;missing_types]Landroid/text/StaticLayout$Builder;Landroid/text/StaticLayout$Builder;
 HSPLandroid/text/DynamicLayout;->setIndexFirstChangedBlock(I)V
 HSPLandroid/text/DynamicLayout;->updateAlwaysNeedsToBeRedrawn(I)V
 HSPLandroid/text/DynamicLayout;->updateBlocks(III)V
@@ -14618,46 +14627,46 @@
 HSPLandroid/text/Layout;-><init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;Landroid/text/TextDirectionHeuristic;FF)V
 HSPLandroid/text/Layout;->addSelection(IIIIILandroid/text/Layout$SelectionRectangleConsumer;)V
 HSPLandroid/text/Layout;->draw(Landroid/graphics/Canvas;)V
-HSPLandroid/text/Layout;->draw(Landroid/graphics/Canvas;Landroid/graphics/Path;Landroid/graphics/Paint;I)V+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;
-HSPLandroid/text/Layout;->drawBackground(Landroid/graphics/Canvas;Landroid/graphics/Path;Landroid/graphics/Paint;III)V
-HSPLandroid/text/Layout;->drawText(Landroid/graphics/Canvas;II)V+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Landroid/text/TextLine;Landroid/text/TextLine;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/text/Spanned;Landroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;]Ljava/lang/CharSequence;Landroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
+HSPLandroid/text/Layout;->draw(Landroid/graphics/Canvas;Landroid/graphics/Path;Landroid/graphics/Paint;I)V+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;,Landroid/text/DynamicLayout;
+HSPLandroid/text/Layout;->drawBackground(Landroid/graphics/Canvas;Landroid/graphics/Path;Landroid/graphics/Paint;III)V+]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;]Landroid/text/SpanSet;Landroid/text/SpanSet;]Landroid/text/Spanned;missing_types
+HSPLandroid/text/Layout;->drawText(Landroid/graphics/Canvas;II)V+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;,Landroid/text/DynamicLayout;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;]Landroid/text/TextLine;Landroid/text/TextLine;]Landroid/text/Spanned;missing_types]Ljava/lang/CharSequence;missing_types
 HSPLandroid/text/Layout;->ellipsize(III[CILandroid/text/TextUtils$TruncateAt;)V
 HSPLandroid/text/Layout;->getCursorPath(ILandroid/graphics/Path;Ljava/lang/CharSequence;)V
 HSPLandroid/text/Layout;->getDesiredWidth(Ljava/lang/CharSequence;IILandroid/text/TextPaint;)F
-HSPLandroid/text/Layout;->getDesiredWidth(Ljava/lang/CharSequence;Landroid/text/TextPaint;)F+]Ljava/lang/CharSequence;Landroid/text/SpannableString;,Ljava/lang/String;,Landroid/text/SpannedString;,Landroid/text/SpannableStringBuilder;
+HSPLandroid/text/Layout;->getDesiredWidth(Ljava/lang/CharSequence;Landroid/text/TextPaint;)F+]Ljava/lang/CharSequence;missing_types
 HSPLandroid/text/Layout;->getDesiredWidthWithLimit(Ljava/lang/CharSequence;IILandroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;F)F
 HSPLandroid/text/Layout;->getEndHyphenEdit(I)I
-HSPLandroid/text/Layout;->getHeight()I
+HSPLandroid/text/Layout;->getHeight()I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/StaticLayout;
 HSPLandroid/text/Layout;->getHeight(Z)I
 HSPLandroid/text/Layout;->getHorizontal(IZ)F
 HSPLandroid/text/Layout;->getHorizontal(IZIZ)F+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;]Landroid/text/TextLine;Landroid/text/TextLine;
 HSPLandroid/text/Layout;->getIndentAdjust(ILandroid/text/Layout$Alignment;)I
-HSPLandroid/text/Layout;->getLineBaseline(I)I
+HSPLandroid/text/Layout;->getLineBaseline(I)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;
 HSPLandroid/text/Layout;->getLineBottom(I)I
-HSPLandroid/text/Layout;->getLineEnd(I)I
-HSPLandroid/text/Layout;->getLineExtent(ILandroid/text/Layout$TabStops;Z)F+]Landroid/text/Layout;Landroid/text/BoringLayout;]Landroid/text/TextLine;Landroid/text/TextLine;]Landroid/text/TextPaint;Landroid/text/TextPaint;
+HSPLandroid/text/Layout;->getLineEnd(I)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
+HSPLandroid/text/Layout;->getLineExtent(ILandroid/text/Layout$TabStops;Z)F+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;,Landroid/text/DynamicLayout;]Landroid/text/TextLine;Landroid/text/TextLine;]Landroid/text/TextPaint;Landroid/text/TextPaint;
 HSPLandroid/text/Layout;->getLineExtent(IZ)F+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/StaticLayout;]Landroid/text/TextLine;Landroid/text/TextLine;]Landroid/text/TextPaint;Landroid/text/TextPaint;
-HSPLandroid/text/Layout;->getLineForOffset(I)I
-HSPLandroid/text/Layout;->getLineForVertical(I)I
+HSPLandroid/text/Layout;->getLineForOffset(I)I+]Landroid/text/Layout;Landroid/text/StaticLayout;,Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
+HSPLandroid/text/Layout;->getLineForVertical(I)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
 HSPLandroid/text/Layout;->getLineLeft(I)F
 HSPLandroid/text/Layout;->getLineMax(I)F
-HSPLandroid/text/Layout;->getLineRangeForDraw(Landroid/graphics/Canvas;)J+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
+HSPLandroid/text/Layout;->getLineRangeForDraw(Landroid/graphics/Canvas;)J+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;,Landroid/text/DynamicLayout;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
 HSPLandroid/text/Layout;->getLineRight(I)F
-HSPLandroid/text/Layout;->getLineStartPos(III)I
-HSPLandroid/text/Layout;->getLineVisibleEnd(I)I
-HSPLandroid/text/Layout;->getLineVisibleEnd(III)I
+HSPLandroid/text/Layout;->getLineStartPos(III)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
+HSPLandroid/text/Layout;->getLineVisibleEnd(I)I+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;
+HSPLandroid/text/Layout;->getLineVisibleEnd(III)I+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Ljava/lang/CharSequence;Ljava/lang/StringBuilder;,Ljava/lang/String;
 HSPLandroid/text/Layout;->getLineWidth(I)F
 HSPLandroid/text/Layout;->getOffsetAtStartOf(I)I
 HSPLandroid/text/Layout;->getOffsetForHorizontal(IF)I
 HSPLandroid/text/Layout;->getOffsetForHorizontal(IFZ)I
 HSPLandroid/text/Layout;->getPaint()Landroid/text/TextPaint;
-HSPLandroid/text/Layout;->getParagraphAlignment(I)Landroid/text/Layout$Alignment;
-HSPLandroid/text/Layout;->getParagraphLeadingMargin(I)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;]Landroid/text/Spanned;Landroid/text/SpannableStringBuilder;,Landroid/text/SpannableString;
-HSPLandroid/text/Layout;->getParagraphLeft(I)I
-HSPLandroid/text/Layout;->getParagraphRight(I)I
-HSPLandroid/text/Layout;->getParagraphSpans(Landroid/text/Spanned;IILjava/lang/Class;)[Ljava/lang/Object;
+HSPLandroid/text/Layout;->getParagraphAlignment(I)Landroid/text/Layout$Alignment;+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
+HSPLandroid/text/Layout;->getParagraphLeadingMargin(I)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;]Landroid/text/Spanned;missing_types
+HSPLandroid/text/Layout;->getParagraphLeft(I)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
+HSPLandroid/text/Layout;->getParagraphRight(I)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
+HSPLandroid/text/Layout;->getParagraphSpans(Landroid/text/Spanned;IILjava/lang/Class;)[Ljava/lang/Object;+]Landroid/text/Spanned;Landroid/text/SpannedString;,Landroid/text/Layout$SpannedEllipsizer;,Landroid/text/SpannableString;]Landroid/text/SpannableStringBuilder;Landroid/text/SpannableStringBuilder;
 HSPLandroid/text/Layout;->getPrimaryHorizontal(I)F
-HSPLandroid/text/Layout;->getPrimaryHorizontal(IZ)F
+HSPLandroid/text/Layout;->getPrimaryHorizontal(IZ)F+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
 HSPLandroid/text/Layout;->getSelection(IILandroid/text/Layout$SelectionRectangleConsumer;)V
 HSPLandroid/text/Layout;->getSelectionPath(IILandroid/graphics/Path;)V
 HSPLandroid/text/Layout;->getSpacingAdd()F
@@ -14669,21 +14678,21 @@
 HSPLandroid/text/Layout;->increaseWidthTo(I)V
 HSPLandroid/text/Layout;->isFallbackLineSpacingEnabled()Z
 HSPLandroid/text/Layout;->isJustificationRequired(I)Z
-HSPLandroid/text/Layout;->isRtlCharAt(I)Z
+HSPLandroid/text/Layout;->isRtlCharAt(I)Z+]Landroid/text/Layout;Landroid/text/DynamicLayout;
 HSPLandroid/text/Layout;->measurePara(Landroid/text/TextPaint;Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;)F
-HSPLandroid/text/Layout;->primaryIsTrailingPrevious(I)Z
+HSPLandroid/text/Layout;->primaryIsTrailingPrevious(I)Z+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
 HSPLandroid/text/Layout;->replaceWith(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FF)V
 HSPLandroid/text/Layout;->setJustificationMode(I)V
 HSPLandroid/text/Layout;->shouldClampCursor(I)Z
 HSPLandroid/text/MeasuredParagraph;-><init>()V
 HSPLandroid/text/MeasuredParagraph;->applyMetricsAffectingSpan(Landroid/text/TextPaint;Landroid/graphics/text/LineBreakConfig;[Landroid/text/style/MetricAffectingSpan;IILandroid/graphics/text/MeasuredText$Builder;)V+]Landroid/text/style/MetricAffectingSpan;missing_types]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/text/AutoGrowArray$IntArray;Landroid/text/AutoGrowArray$IntArray;
-HSPLandroid/text/MeasuredParagraph;->applyReplacementRun(Landroid/text/style/ReplacementSpan;IILandroid/text/TextPaint;Landroid/graphics/text/MeasuredText$Builder;)V+]Landroid/text/AutoGrowArray$FloatArray;Landroid/text/AutoGrowArray$FloatArray;]Landroid/graphics/text/MeasuredText$Builder;Landroid/graphics/text/MeasuredText$Builder;
+HSPLandroid/text/MeasuredParagraph;->applyReplacementRun(Landroid/text/style/ReplacementSpan;IILandroid/text/TextPaint;Landroid/graphics/text/MeasuredText$Builder;)V+]Landroid/graphics/text/MeasuredText$Builder;Landroid/graphics/text/MeasuredText$Builder;]Landroid/text/AutoGrowArray$FloatArray;Landroid/text/AutoGrowArray$FloatArray;
 HSPLandroid/text/MeasuredParagraph;->applyStyleRun(IILandroid/text/TextPaint;Landroid/graphics/text/LineBreakConfig;Landroid/graphics/text/MeasuredText$Builder;)V+]Landroid/text/AutoGrowArray$FloatArray;Landroid/text/AutoGrowArray$FloatArray;]Landroid/graphics/text/MeasuredText$Builder;Landroid/graphics/text/MeasuredText$Builder;]Landroid/text/AutoGrowArray$ByteArray;Landroid/text/AutoGrowArray$ByteArray;]Landroid/text/TextPaint;Landroid/text/TextPaint;
 HSPLandroid/text/MeasuredParagraph;->breakText(IZF)I
 HSPLandroid/text/MeasuredParagraph;->buildForBidi(Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;Landroid/text/MeasuredParagraph;)Landroid/text/MeasuredParagraph;
 HSPLandroid/text/MeasuredParagraph;->buildForMeasurement(Landroid/text/TextPaint;Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;Landroid/text/MeasuredParagraph;)Landroid/text/MeasuredParagraph;
 HSPLandroid/text/MeasuredParagraph;->buildForStaticLayout(Landroid/text/TextPaint;Landroid/graphics/text/LineBreakConfig;Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;IZLandroid/text/MeasuredParagraph;Landroid/text/MeasuredParagraph;)Landroid/text/MeasuredParagraph;+]Landroid/graphics/text/MeasuredText$Builder;Landroid/graphics/text/MeasuredText$Builder;]Landroid/text/Spanned;missing_types]Landroid/text/AutoGrowArray$IntArray;Landroid/text/AutoGrowArray$IntArray;
-HSPLandroid/text/MeasuredParagraph;->getCharWidthAt(I)F
+HSPLandroid/text/MeasuredParagraph;->getCharWidthAt(I)F+]Landroid/graphics/text/MeasuredText;Landroid/graphics/text/MeasuredText;
 HSPLandroid/text/MeasuredParagraph;->getChars()[C
 HSPLandroid/text/MeasuredParagraph;->getDirections(II)Landroid/text/Layout$Directions;
 HSPLandroid/text/MeasuredParagraph;->getFontMetrics()Landroid/text/AutoGrowArray$IntArray;
@@ -14691,24 +14700,24 @@
 HSPLandroid/text/MeasuredParagraph;->getParagraphDir()I
 HSPLandroid/text/MeasuredParagraph;->getSpanEndCache()Landroid/text/AutoGrowArray$IntArray;
 HSPLandroid/text/MeasuredParagraph;->getWholeWidth()F
-HSPLandroid/text/MeasuredParagraph;->obtain()Landroid/text/MeasuredParagraph;
+HSPLandroid/text/MeasuredParagraph;->obtain()Landroid/text/MeasuredParagraph;+]Landroid/util/Pools$SynchronizedPool;Landroid/util/Pools$SynchronizedPool;
 HSPLandroid/text/MeasuredParagraph;->recycle()V
 HSPLandroid/text/MeasuredParagraph;->release()V
-HSPLandroid/text/MeasuredParagraph;->reset()V
-HSPLandroid/text/MeasuredParagraph;->resetAndAnalyzeBidi(Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;)V+]Landroid/text/AutoGrowArray$ByteArray;Landroid/text/AutoGrowArray$ByteArray;]Landroid/text/Spanned;Landroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;
-HSPLandroid/text/PackedIntVector;->adjustValuesBelow(III)V
-HSPLandroid/text/PackedIntVector;->deleteAt(II)V
+HSPLandroid/text/MeasuredParagraph;->reset()V+]Landroid/text/AutoGrowArray$FloatArray;Landroid/text/AutoGrowArray$FloatArray;]Landroid/text/AutoGrowArray$ByteArray;Landroid/text/AutoGrowArray$ByteArray;]Landroid/text/AutoGrowArray$IntArray;Landroid/text/AutoGrowArray$IntArray;
+HSPLandroid/text/MeasuredParagraph;->resetAndAnalyzeBidi(Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;)V+]Landroid/text/AutoGrowArray$ByteArray;Landroid/text/AutoGrowArray$ByteArray;]Landroid/text/Spanned;missing_types]Landroid/text/TextDirectionHeuristic;Landroid/text/TextDirectionHeuristics$TextDirectionHeuristicLocale;
+HSPLandroid/text/PackedIntVector;->adjustValuesBelow(III)V+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
+HSPLandroid/text/PackedIntVector;->deleteAt(II)V+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
 HSPLandroid/text/PackedIntVector;->getValue(II)I+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
-HSPLandroid/text/PackedIntVector;->growBuffer()V
-HSPLandroid/text/PackedIntVector;->insertAt(I[I)V
+HSPLandroid/text/PackedIntVector;->growBuffer()V+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
+HSPLandroid/text/PackedIntVector;->insertAt(I[I)V+]Landroid/text/PackedIntVector;Landroid/text/PackedIntVector;
 HSPLandroid/text/PackedIntVector;->moveRowGapTo(I)V
 HSPLandroid/text/PackedIntVector;->moveValueGapTo(II)V
 HSPLandroid/text/PackedIntVector;->size()I
 HSPLandroid/text/PackedIntVector;->width()I
-HSPLandroid/text/PackedObjectVector;->deleteAt(II)V
+HSPLandroid/text/PackedObjectVector;->deleteAt(II)V+]Landroid/text/PackedObjectVector;Landroid/text/PackedObjectVector;
 HSPLandroid/text/PackedObjectVector;->getValue(II)Ljava/lang/Object;
-HSPLandroid/text/PackedObjectVector;->growBuffer()V
-HSPLandroid/text/PackedObjectVector;->insertAt(I[Ljava/lang/Object;)V
+HSPLandroid/text/PackedObjectVector;->growBuffer()V+]Landroid/text/PackedObjectVector;Landroid/text/PackedObjectVector;
+HSPLandroid/text/PackedObjectVector;->insertAt(I[Ljava/lang/Object;)V+]Landroid/text/PackedObjectVector;Landroid/text/PackedObjectVector;
 HSPLandroid/text/PackedObjectVector;->moveRowGapTo(I)V
 HSPLandroid/text/PackedObjectVector;->setValue(IILjava/lang/Object;)V
 HSPLandroid/text/PackedObjectVector;->size()I
@@ -14718,9 +14727,9 @@
 HSPLandroid/text/PrecomputedText$Params;->getHyphenationFrequency()I
 HSPLandroid/text/PrecomputedText$Params;->getTextDirection()Landroid/text/TextDirectionHeuristic;
 HSPLandroid/text/PrecomputedText$Params;->getTextPaint()Landroid/text/TextPaint;
-HSPLandroid/text/PrecomputedText;->createMeasuredParagraphs(Ljava/lang/CharSequence;Landroid/text/PrecomputedText$Params;IIZ)[Landroid/text/PrecomputedText$ParagraphInfo;
-HSPLandroid/text/Selection;->getSelectionEnd(Ljava/lang/CharSequence;)I
-HSPLandroid/text/Selection;->getSelectionStart(Ljava/lang/CharSequence;)I
+HSPLandroid/text/PrecomputedText;->createMeasuredParagraphs(Ljava/lang/CharSequence;Landroid/text/PrecomputedText$Params;IIZ)[Landroid/text/PrecomputedText$ParagraphInfo;+]Landroid/text/PrecomputedText$Params;Landroid/text/PrecomputedText$Params;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/text/Selection;->getSelectionEnd(Ljava/lang/CharSequence;)I+]Landroid/text/Spanned;missing_types
+HSPLandroid/text/Selection;->getSelectionStart(Ljava/lang/CharSequence;)I+]Landroid/text/Spanned;missing_types
 HSPLandroid/text/Selection;->removeMemory(Landroid/text/Spannable;)V
 HSPLandroid/text/Selection;->removeSelection(Landroid/text/Spannable;)V
 HSPLandroid/text/Selection;->setSelection(Landroid/text/Spannable;I)V
@@ -14730,7 +14739,7 @@
 HSPLandroid/text/SpanSet;-><init>(Ljava/lang/Class;)V
 HSPLandroid/text/SpanSet;->getNextTransition(II)I
 HSPLandroid/text/SpanSet;->hasSpansIntersecting(II)Z
-HSPLandroid/text/SpanSet;->init(Landroid/text/Spanned;II)V+]Landroid/text/Spanned;Landroid/text/SpannedString;,Landroid/text/SpannableStringBuilder;,Landroid/text/SpannableString;
+HSPLandroid/text/SpanSet;->init(Landroid/text/Spanned;II)V+]Landroid/text/Spanned;missing_types
 HSPLandroid/text/SpanSet;->recycle()V
 HSPLandroid/text/Spannable$Factory;->getInstance()Landroid/text/Spannable$Factory;
 HSPLandroid/text/Spannable$Factory;->newSpannable(Ljava/lang/CharSequence;)Landroid/text/Spannable;
@@ -14748,32 +14757,32 @@
 HSPLandroid/text/SpannableString;->subSequence(II)Ljava/lang/CharSequence;
 HSPLandroid/text/SpannableString;->valueOf(Ljava/lang/CharSequence;)Landroid/text/SpannableString;
 HSPLandroid/text/SpannableStringBuilder;-><init>()V
-HSPLandroid/text/SpannableStringBuilder;-><init>(Ljava/lang/CharSequence;)V
-HSPLandroid/text/SpannableStringBuilder;-><init>(Ljava/lang/CharSequence;II)V
+HSPLandroid/text/SpannableStringBuilder;-><init>(Ljava/lang/CharSequence;)V+]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLandroid/text/SpannableStringBuilder;-><init>(Ljava/lang/CharSequence;II)V+]Landroid/text/Spanned;missing_types
 HSPLandroid/text/SpannableStringBuilder;->append(C)Landroid/text/Editable;
 HSPLandroid/text/SpannableStringBuilder;->append(C)Landroid/text/SpannableStringBuilder;
 HSPLandroid/text/SpannableStringBuilder;->append(Ljava/lang/CharSequence;)Landroid/text/Editable;
 HSPLandroid/text/SpannableStringBuilder;->append(Ljava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;
 HSPLandroid/text/SpannableStringBuilder;->append(Ljava/lang/CharSequence;II)Landroid/text/SpannableStringBuilder;
 HSPLandroid/text/SpannableStringBuilder;->calcMax(I)I
-HSPLandroid/text/SpannableStringBuilder;->change(IILjava/lang/CharSequence;II)V
-HSPLandroid/text/SpannableStringBuilder;->charAt(I)C
-HSPLandroid/text/SpannableStringBuilder;->checkRange(Ljava/lang/String;II)V
+HSPLandroid/text/SpannableStringBuilder;->change(IILjava/lang/CharSequence;II)V+]Landroid/text/Spanned;Landroid/text/SpannedString;,Landroid/text/SpannableStringBuilder;,Landroid/text/SpannableString;]Landroid/text/SpannableStringBuilder;missing_types
+HSPLandroid/text/SpannableStringBuilder;->charAt(I)C+]Landroid/text/SpannableStringBuilder;missing_types
+HSPLandroid/text/SpannableStringBuilder;->checkRange(Ljava/lang/String;II)V+]Landroid/text/SpannableStringBuilder;missing_types
 HSPLandroid/text/SpannableStringBuilder;->checkSortBuffer([II)[I
 HSPLandroid/text/SpannableStringBuilder;->clear()V
 HSPLandroid/text/SpannableStringBuilder;->compareSpans(II[I[I)I
-HSPLandroid/text/SpannableStringBuilder;->countSpans(IILjava/lang/Class;I)I
+HSPLandroid/text/SpannableStringBuilder;->countSpans(IILjava/lang/Class;I)I+]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/text/SpannableStringBuilder;->delete(II)Landroid/text/Editable;
 HSPLandroid/text/SpannableStringBuilder;->delete(II)Landroid/text/SpannableStringBuilder;
 HSPLandroid/text/SpannableStringBuilder;->drawTextRun(Landroid/graphics/BaseCanvas;IIIIFFZLandroid/graphics/Paint;)V
 HSPLandroid/text/SpannableStringBuilder;->equals(Ljava/lang/Object;)Z
 HSPLandroid/text/SpannableStringBuilder;->getChars(II[CI)V
-HSPLandroid/text/SpannableStringBuilder;->getSpanEnd(Ljava/lang/Object;)I
-HSPLandroid/text/SpannableStringBuilder;->getSpanFlags(Ljava/lang/Object;)I
-HSPLandroid/text/SpannableStringBuilder;->getSpanStart(Ljava/lang/Object;)I
-HSPLandroid/text/SpannableStringBuilder;->getSpans(IILjava/lang/Class;)[Ljava/lang/Object;
+HSPLandroid/text/SpannableStringBuilder;->getSpanEnd(Ljava/lang/Object;)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/IdentityHashMap;Ljava/util/IdentityHashMap;
+HSPLandroid/text/SpannableStringBuilder;->getSpanFlags(Ljava/lang/Object;)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/IdentityHashMap;Ljava/util/IdentityHashMap;
+HSPLandroid/text/SpannableStringBuilder;->getSpanStart(Ljava/lang/Object;)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/IdentityHashMap;Ljava/util/IdentityHashMap;
+HSPLandroid/text/SpannableStringBuilder;->getSpans(IILjava/lang/Class;)[Ljava/lang/Object;+]Landroid/text/SpannableStringBuilder;missing_types
 HSPLandroid/text/SpannableStringBuilder;->getSpans(IILjava/lang/Class;Z)[Ljava/lang/Object;
-HSPLandroid/text/SpannableStringBuilder;->getSpansRec(IILjava/lang/Class;I[Ljava/lang/Object;[I[IIZ)I
+HSPLandroid/text/SpannableStringBuilder;->getSpansRec(IILjava/lang/Class;I[Ljava/lang/Object;[I[IIZ)I+]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/text/SpannableStringBuilder;->getTextWatcherDepth()I
 HSPLandroid/text/SpannableStringBuilder;->hasNonExclusiveExclusiveSpanAt(Ljava/lang/CharSequence;I)Z
 HSPLandroid/text/SpannableStringBuilder;->insert(ILjava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;
@@ -14781,9 +14790,9 @@
 HSPLandroid/text/SpannableStringBuilder;->isInvalidParagraph(II)Z
 HSPLandroid/text/SpannableStringBuilder;->leftChild(I)I
 HSPLandroid/text/SpannableStringBuilder;->length()I
-HSPLandroid/text/SpannableStringBuilder;->moveGapTo(I)V
+HSPLandroid/text/SpannableStringBuilder;->moveGapTo(I)V+]Landroid/text/SpannableStringBuilder;Landroid/text/SpannableStringBuilder;
 HSPLandroid/text/SpannableStringBuilder;->nextSpanTransition(IILjava/lang/Class;)I
-HSPLandroid/text/SpannableStringBuilder;->nextSpanTransitionRec(IILjava/lang/Class;I)I
+HSPLandroid/text/SpannableStringBuilder;->nextSpanTransitionRec(IILjava/lang/Class;I)I+]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/text/SpannableStringBuilder;->obtain(I)[I
 HSPLandroid/text/SpannableStringBuilder;->recycle([I)V
 HSPLandroid/text/SpannableStringBuilder;->removeSpan(II)V
@@ -14791,11 +14800,11 @@
 HSPLandroid/text/SpannableStringBuilder;->removeSpan(Ljava/lang/Object;I)V
 HSPLandroid/text/SpannableStringBuilder;->removeSpansForChange(IIZI)Z
 HSPLandroid/text/SpannableStringBuilder;->replace(IILjava/lang/CharSequence;)Landroid/text/Editable;
-HSPLandroid/text/SpannableStringBuilder;->replace(IILjava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;
-HSPLandroid/text/SpannableStringBuilder;->replace(IILjava/lang/CharSequence;II)Landroid/text/SpannableStringBuilder;+]Landroid/text/SpannableStringBuilder;Landroid/text/SpannableStringBuilder;
+HSPLandroid/text/SpannableStringBuilder;->replace(IILjava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;+]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/text/SpannableStringBuilder;Landroid/text/SpannableStringBuilder;
+HSPLandroid/text/SpannableStringBuilder;->replace(IILjava/lang/CharSequence;II)Landroid/text/SpannableStringBuilder;+]Landroid/text/SpannableStringBuilder;missing_types]Landroid/text/InputFilter;Landroid/text/InputFilter$LengthFilter;,Landroid/widget/Editor$UndoInputFilter;
 HSPLandroid/text/SpannableStringBuilder;->resizeFor(I)V
 HSPLandroid/text/SpannableStringBuilder;->resolveGap(I)I
-HSPLandroid/text/SpannableStringBuilder;->restoreInvariants()V
+HSPLandroid/text/SpannableStringBuilder;->restoreInvariants()V+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/IdentityHashMap;Ljava/util/IdentityHashMap;
 HSPLandroid/text/SpannableStringBuilder;->rightChild(I)I
 HSPLandroid/text/SpannableStringBuilder;->sendAfterTextChanged([Landroid/text/TextWatcher;)V
 HSPLandroid/text/SpannableStringBuilder;->sendBeforeTextChanged([Landroid/text/TextWatcher;III)V
@@ -14806,28 +14815,28 @@
 HSPLandroid/text/SpannableStringBuilder;->sendToSpanWatchers(III)V
 HSPLandroid/text/SpannableStringBuilder;->setFilters([Landroid/text/InputFilter;)V
 HSPLandroid/text/SpannableStringBuilder;->setSpan(Ljava/lang/Object;III)V
-HSPLandroid/text/SpannableStringBuilder;->setSpan(ZLjava/lang/Object;IIIZ)V+]Ljava/util/IdentityHashMap;Ljava/util/IdentityHashMap;
+HSPLandroid/text/SpannableStringBuilder;->setSpan(ZLjava/lang/Object;IIIZ)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/IdentityHashMap;Ljava/util/IdentityHashMap;
 HSPLandroid/text/SpannableStringBuilder;->siftDown(I[Ljava/lang/Object;I[I[I)V
 HSPLandroid/text/SpannableStringBuilder;->sort([Ljava/lang/Object;[I[I)V
 HSPLandroid/text/SpannableStringBuilder;->subSequence(II)Ljava/lang/CharSequence;
-HSPLandroid/text/SpannableStringBuilder;->toString()Ljava/lang/String;
+HSPLandroid/text/SpannableStringBuilder;->toString()Ljava/lang/String;+]Landroid/text/SpannableStringBuilder;missing_types
 HSPLandroid/text/SpannableStringBuilder;->treeRoot()I
 HSPLandroid/text/SpannableStringBuilder;->updatedIntervalBound(IIIIZZ)I
-HSPLandroid/text/SpannableStringInternal;-><init>(Ljava/lang/CharSequence;IIZ)V
+HSPLandroid/text/SpannableStringInternal;-><init>(Ljava/lang/CharSequence;IIZ)V+]Ljava/lang/CharSequence;missing_types
 HSPLandroid/text/SpannableStringInternal;->charAt(I)C
 HSPLandroid/text/SpannableStringInternal;->checkRange(Ljava/lang/String;II)V
-HSPLandroid/text/SpannableStringInternal;->copySpansFromInternal(Landroid/text/SpannableStringInternal;IIZ)V
+HSPLandroid/text/SpannableStringInternal;->copySpansFromInternal(Landroid/text/SpannableStringInternal;IIZ)V+]Landroid/text/SpannableStringInternal;Landroid/text/SpannedString;,Landroid/text/SpannableString;
 HSPLandroid/text/SpannableStringInternal;->copySpansFromSpanned(Landroid/text/Spanned;IIZ)V
-HSPLandroid/text/SpannableStringInternal;->equals(Ljava/lang/Object;)Z
-HSPLandroid/text/SpannableStringInternal;->getChars(II[CI)V
+HSPLandroid/text/SpannableStringInternal;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;missing_types]Landroid/text/Spanned;Landroid/text/SpannedString;]Landroid/text/SpannableStringInternal;Landroid/text/SpannedString;
+HSPLandroid/text/SpannableStringInternal;->getChars(II[CI)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/text/SpannableStringInternal;->getSpanEnd(Ljava/lang/Object;)I
 HSPLandroid/text/SpannableStringInternal;->getSpanFlags(Ljava/lang/Object;)I
 HSPLandroid/text/SpannableStringInternal;->getSpanStart(Ljava/lang/Object;)I
-HSPLandroid/text/SpannableStringInternal;->getSpans(IILjava/lang/Class;)[Ljava/lang/Object;
+HSPLandroid/text/SpannableStringInternal;->getSpans(IILjava/lang/Class;)[Ljava/lang/Object;+]Ljava/lang/Class;Ljava/lang/Class;]Landroid/text/SpannableStringInternal;Landroid/text/SpannableString;
 HSPLandroid/text/SpannableStringInternal;->length()I
-HSPLandroid/text/SpannableStringInternal;->nextSpanTransition(IILjava/lang/Class;)I
+HSPLandroid/text/SpannableStringInternal;->nextSpanTransition(IILjava/lang/Class;)I+]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/text/SpannableStringInternal;->removeSpan(Ljava/lang/Object;I)V
-HSPLandroid/text/SpannableStringInternal;->sendSpanAdded(Ljava/lang/Object;II)V
+HSPLandroid/text/SpannableStringInternal;->sendSpanAdded(Ljava/lang/Object;II)V+]Landroid/text/SpannableStringInternal;Landroid/text/SpannableString;
 HSPLandroid/text/SpannableStringInternal;->sendSpanChanged(Ljava/lang/Object;IIII)V
 HSPLandroid/text/SpannableStringInternal;->setSpan(Ljava/lang/Object;III)V
 HSPLandroid/text/SpannableStringInternal;->setSpan(Ljava/lang/Object;IIIZ)V
@@ -14862,8 +14871,8 @@
 HSPLandroid/text/StaticLayout$Builder;->-$$Nest$fgetmWidth(Landroid/text/StaticLayout$Builder;)I
 HSPLandroid/text/StaticLayout$Builder;-><init>()V
 HSPLandroid/text/StaticLayout$Builder;->build()Landroid/text/StaticLayout;
-HSPLandroid/text/StaticLayout$Builder;->obtain(Ljava/lang/CharSequence;IILandroid/text/TextPaint;I)Landroid/text/StaticLayout$Builder;
-HSPLandroid/text/StaticLayout$Builder;->recycle(Landroid/text/StaticLayout$Builder;)V
+HSPLandroid/text/StaticLayout$Builder;->obtain(Ljava/lang/CharSequence;IILandroid/text/TextPaint;I)Landroid/text/StaticLayout$Builder;+]Landroid/util/Pools$SynchronizedPool;Landroid/util/Pools$SynchronizedPool;
+HSPLandroid/text/StaticLayout$Builder;->recycle(Landroid/text/StaticLayout$Builder;)V+]Landroid/util/Pools$SynchronizedPool;Landroid/util/Pools$SynchronizedPool;
 HSPLandroid/text/StaticLayout$Builder;->setAlignment(Landroid/text/Layout$Alignment;)Landroid/text/StaticLayout$Builder;
 HSPLandroid/text/StaticLayout$Builder;->setBreakStrategy(I)Landroid/text/StaticLayout$Builder;
 HSPLandroid/text/StaticLayout$Builder;->setEllipsize(Landroid/text/TextUtils$TruncateAt;)Landroid/text/StaticLayout$Builder;
@@ -14876,10 +14885,10 @@
 HSPLandroid/text/StaticLayout$Builder;->setMaxLines(I)Landroid/text/StaticLayout$Builder;
 HSPLandroid/text/StaticLayout$Builder;->setTextDirection(Landroid/text/TextDirectionHeuristic;)Landroid/text/StaticLayout$Builder;
 HSPLandroid/text/StaticLayout$Builder;->setUseLineSpacingFromFallbacks(Z)Landroid/text/StaticLayout$Builder;
-HSPLandroid/text/StaticLayout;-><init>(Landroid/text/StaticLayout$Builder;)V
+HSPLandroid/text/StaticLayout;-><init>(Landroid/text/StaticLayout$Builder;)V+]Landroid/text/StaticLayout;Landroid/text/StaticLayout;
 HSPLandroid/text/StaticLayout;-><init>(Ljava/lang/CharSequence;)V
-HSPLandroid/text/StaticLayout;->calculateEllipsis(IILandroid/text/MeasuredParagraph;IFLandroid/text/TextUtils$TruncateAt;IFLandroid/text/TextPaint;Z)V
-HSPLandroid/text/StaticLayout;->generate(Landroid/text/StaticLayout$Builder;ZZ)V+]Landroid/text/MeasuredParagraph;Landroid/text/MeasuredParagraph;]Landroid/graphics/text/LineBreaker$Builder;Landroid/graphics/text/LineBreaker$Builder;]Landroid/graphics/text/LineBreaker;Landroid/graphics/text/LineBreaker;]Ljava/lang/CharSequence;Landroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;,Ljava/lang/String;]Landroid/graphics/text/LineBreaker$ParagraphConstraints;Landroid/graphics/text/LineBreaker$ParagraphConstraints;]Landroid/graphics/text/LineBreaker$Result;Landroid/graphics/text/LineBreaker$Result;]Landroid/text/AutoGrowArray$IntArray;Landroid/text/AutoGrowArray$IntArray;
+HSPLandroid/text/StaticLayout;->calculateEllipsis(IILandroid/text/MeasuredParagraph;IFLandroid/text/TextUtils$TruncateAt;IFLandroid/text/TextPaint;Z)V+]Landroid/text/MeasuredParagraph;Landroid/text/MeasuredParagraph;]Landroid/text/TextPaint;Landroid/text/TextPaint;
+HSPLandroid/text/StaticLayout;->generate(Landroid/text/StaticLayout$Builder;ZZ)V+]Landroid/text/MeasuredParagraph;Landroid/text/MeasuredParagraph;]Landroid/graphics/text/LineBreaker$Builder;Landroid/graphics/text/LineBreaker$Builder;]Landroid/graphics/text/LineBreaker;Landroid/graphics/text/LineBreaker;]Ljava/lang/CharSequence;missing_types]Landroid/graphics/text/LineBreaker$ParagraphConstraints;Landroid/graphics/text/LineBreaker$ParagraphConstraints;]Landroid/graphics/text/LineBreaker$Result;Landroid/graphics/text/LineBreaker$Result;]Landroid/text/AutoGrowArray$IntArray;Landroid/text/AutoGrowArray$IntArray;]Landroid/text/TextPaint;Landroid/text/TextPaint;
 HSPLandroid/text/StaticLayout;->getBottomPadding()I
 HSPLandroid/text/StaticLayout;->getEllipsisCount(I)I
 HSPLandroid/text/StaticLayout;->getEllipsisStart(I)I
@@ -14900,13 +14909,13 @@
 HSPLandroid/text/StaticLayout;->getTopPadding()I
 HSPLandroid/text/StaticLayout;->getTotalInsets(I)F
 HSPLandroid/text/StaticLayout;->isFallbackLineSpacingEnabled()Z
-HSPLandroid/text/StaticLayout;->out(Ljava/lang/CharSequence;IIIIIIIFF[Landroid/text/style/LineHeightSpan;[ILandroid/graphics/Paint$FontMetricsInt;ZIZLandroid/text/MeasuredParagraph;IZZZ[CILandroid/text/TextUtils$TruncateAt;FFLandroid/text/TextPaint;Z)I
+HSPLandroid/text/StaticLayout;->out(Ljava/lang/CharSequence;IIIIIIIFF[Landroid/text/style/LineHeightSpan;[ILandroid/graphics/Paint$FontMetricsInt;ZIZLandroid/text/MeasuredParagraph;IZZZ[CILandroid/text/TextUtils$TruncateAt;FFLandroid/text/TextPaint;Z)I+]Landroid/text/MeasuredParagraph;Landroid/text/MeasuredParagraph;]Ljava/lang/CharSequence;missing_types
 HSPLandroid/text/StaticLayout;->packHyphenEdit(II)I
 HSPLandroid/text/StaticLayout;->unpackEndHyphenEdit(I)I
 HSPLandroid/text/StaticLayout;->unpackStartHyphenEdit(I)I
 HSPLandroid/text/TextDirectionHeuristics$FirstStrong;->checkRtl(Ljava/lang/CharSequence;II)I
 HSPLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicImpl;->doCheck(Ljava/lang/CharSequence;II)Z
-HSPLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicImpl;->isRtl(Ljava/lang/CharSequence;II)Z
+HSPLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicImpl;->isRtl(Ljava/lang/CharSequence;II)Z+]Landroid/text/TextDirectionHeuristics$TextDirectionHeuristicImpl;Landroid/text/TextDirectionHeuristics$TextDirectionHeuristicLocale;]Ljava/lang/CharSequence;missing_types
 HSPLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicImpl;->isRtl([CII)Z
 HSPLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicInternal;->defaultIsRtl()Z
 HSPLandroid/text/TextDirectionHeuristics$TextDirectionHeuristicLocale;->defaultIsRtl()Z
@@ -14917,23 +14926,23 @@
 HSPLandroid/text/TextLine;-><init>()V
 HSPLandroid/text/TextLine;->adjustEndHyphenEdit(II)I
 HSPLandroid/text/TextLine;->adjustStartHyphenEdit(II)I
-HSPLandroid/text/TextLine;->draw(Landroid/graphics/Canvas;FIII)V
+HSPLandroid/text/TextLine;->draw(Landroid/graphics/Canvas;FIII)V+]Landroid/text/Layout$Directions;Landroid/text/Layout$Directions;
 HSPLandroid/text/TextLine;->drawRun(Landroid/graphics/Canvas;IIZFIIIZ)F
 HSPLandroid/text/TextLine;->drawStroke(Landroid/text/TextPaint;Landroid/graphics/Canvas;IFFFFF)V
 HSPLandroid/text/TextLine;->drawTextRun(Landroid/graphics/Canvas;Landroid/text/TextPaint;IIIIZFI)V
-HSPLandroid/text/TextLine;->equalAttributes(Landroid/text/TextPaint;Landroid/text/TextPaint;)Z
-HSPLandroid/text/TextLine;->expandMetricsFromPaint(Landroid/graphics/Paint$FontMetricsInt;Landroid/text/TextPaint;)V
-HSPLandroid/text/TextLine;->extractDecorationInfo(Landroid/text/TextPaint;Landroid/text/TextLine$DecorationInfo;)V
+HSPLandroid/text/TextLine;->equalAttributes(Landroid/text/TextPaint;Landroid/text/TextPaint;)Z+]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/os/LocaleList;Landroid/os/LocaleList;
+HSPLandroid/text/TextLine;->expandMetricsFromPaint(Landroid/graphics/Paint$FontMetricsInt;Landroid/text/TextPaint;)V+]Landroid/text/TextPaint;Landroid/text/TextPaint;
+HSPLandroid/text/TextLine;->extractDecorationInfo(Landroid/text/TextPaint;Landroid/text/TextLine$DecorationInfo;)V+]Landroid/text/TextPaint;Landroid/text/TextPaint;
 HSPLandroid/text/TextLine;->getOffsetBeforeAfter(IIIZIZ)I
 HSPLandroid/text/TextLine;->getOffsetToLeftRightOf(IZ)I
 HSPLandroid/text/TextLine;->getRunAdvance(Landroid/text/TextPaint;IIIIZI)F+]Landroid/text/TextPaint;Landroid/text/TextPaint;
 HSPLandroid/text/TextLine;->handleReplacement(Landroid/text/style/ReplacementSpan;Landroid/text/TextPaint;IIZLandroid/graphics/Canvas;FIIILandroid/graphics/Paint$FontMetricsInt;Z)F
-HSPLandroid/text/TextLine;->handleRun(IIIZLandroid/graphics/Canvas;Landroid/text/TextShaper$GlyphsConsumer;FIIILandroid/graphics/Paint$FontMetricsInt;Z)F+]Landroid/text/TextPaint;Landroid/text/TextPaint;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/text/SpanSet;Landroid/text/SpanSet;]Landroid/text/TextLine$DecorationInfo;Landroid/text/TextLine$DecorationInfo;
-HSPLandroid/text/TextLine;->handleText(Landroid/text/TextPaint;IIIIZLandroid/graphics/Canvas;Landroid/text/TextShaper$GlyphsConsumer;FIIILandroid/graphics/Paint$FontMetricsInt;ZILjava/util/ArrayList;)F
+HSPLandroid/text/TextLine;->handleRun(IIIZLandroid/graphics/Canvas;Landroid/text/TextShaper$GlyphsConsumer;FIIILandroid/graphics/Paint$FontMetricsInt;Z)F+]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/text/SpanSet;Landroid/text/SpanSet;]Landroid/text/style/MetricAffectingSpan;Landroid/text/style/StyleSpan;,Landroid/text/style/TypefaceSpan;,Landroid/text/style/RelativeSizeSpan;]Landroid/text/style/CharacterStyle;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/text/TextLine$DecorationInfo;Landroid/text/TextLine$DecorationInfo;
+HSPLandroid/text/TextLine;->handleText(Landroid/text/TextPaint;IIIIZLandroid/graphics/Canvas;Landroid/text/TextShaper$GlyphsConsumer;FIIILandroid/graphics/Paint$FontMetricsInt;ZILjava/util/ArrayList;)F+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
 HSPLandroid/text/TextLine;->isLineEndSpace(C)Z
 HSPLandroid/text/TextLine;->measure(IZLandroid/graphics/Paint$FontMetricsInt;)F+]Landroid/text/Layout$Directions;Landroid/text/Layout$Directions;
 HSPLandroid/text/TextLine;->measureRun(IIIZLandroid/graphics/Paint$FontMetricsInt;)F
-HSPLandroid/text/TextLine;->metrics(Landroid/graphics/Paint$FontMetricsInt;)F
+HSPLandroid/text/TextLine;->metrics(Landroid/graphics/Paint$FontMetricsInt;)F+]Landroid/text/TextLine;Landroid/text/TextLine;
 HSPLandroid/text/TextLine;->obtain()Landroid/text/TextLine;
 HSPLandroid/text/TextLine;->recycle(Landroid/text/TextLine;)Landroid/text/TextLine;+]Landroid/text/SpanSet;Landroid/text/SpanSet;
 HSPLandroid/text/TextLine;->set(Landroid/text/TextPaint;Ljava/lang/CharSequence;IIILandroid/text/Layout$Directions;ZLandroid/text/Layout$TabStops;IIZ)V+]Landroid/text/SpanSet;Landroid/text/SpanSet;]Landroid/text/PrecomputedText;Landroid/text/PrecomputedText;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/text/PrecomputedText$Params;Landroid/text/PrecomputedText$Params;
@@ -14953,7 +14962,7 @@
 HSPLandroid/text/TextUtils$SimpleStringSplitter;->next()Ljava/lang/String;
 HSPLandroid/text/TextUtils$SimpleStringSplitter;->setString(Ljava/lang/String;)V
 HSPLandroid/text/TextUtils$StringWithRemovedChars;->toString()Ljava/lang/String;
-HSPLandroid/text/TextUtils;->concat([Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
+HSPLandroid/text/TextUtils;->concat([Ljava/lang/CharSequence;)Ljava/lang/CharSequence;+]Landroid/text/SpannableStringBuilder;Landroid/text/SpannableStringBuilder;
 HSPLandroid/text/TextUtils;->copySpansFrom(Landroid/text/Spanned;IILjava/lang/Class;Landroid/text/Spannable;I)V
 HSPLandroid/text/TextUtils;->couldAffectRtl(C)Z
 HSPLandroid/text/TextUtils;->doesNotNeedBidi([CII)Z
@@ -14963,19 +14972,19 @@
 HSPLandroid/text/TextUtils;->emptyIfNull(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/text/TextUtils;->equals(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Z+]Ljava/lang/Object;Ljava/lang/String;]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/text/TextUtils;->expandTemplate(Ljava/lang/CharSequence;[Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
-HSPLandroid/text/TextUtils;->formatSimple(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Long;Ljava/lang/Long;
+HSPLandroid/text/TextUtils;->formatSimple(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/lang/Long;Ljava/lang/Long;
 HSPLandroid/text/TextUtils;->getCapsMode(Ljava/lang/CharSequence;II)I
-HSPLandroid/text/TextUtils;->getChars(Ljava/lang/CharSequence;II[CI)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Object;Ljava/lang/String;,Ljava/lang/StringBuilder;,Landroid/text/Layout$Ellipsizer;,Landroid/text/SpannableString;]Landroid/text/GetChars;Landroid/text/Layout$Ellipsizer;,Landroid/text/SpannableString;
+HSPLandroid/text/TextUtils;->getChars(Ljava/lang/CharSequence;II[CI)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/Object;missing_types]Landroid/text/GetChars;missing_types]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/text/TextUtils;->getEllipsisString(Landroid/text/TextUtils$TruncateAt;)Ljava/lang/String;
 HSPLandroid/text/TextUtils;->getLayoutDirectionFromLocale(Ljava/util/Locale;)I
 HSPLandroid/text/TextUtils;->getTrimmedLength(Ljava/lang/CharSequence;)I
 HSPLandroid/text/TextUtils;->indexOf(Ljava/lang/CharSequence;C)I
-HSPLandroid/text/TextUtils;->indexOf(Ljava/lang/CharSequence;CI)I
-HSPLandroid/text/TextUtils;->indexOf(Ljava/lang/CharSequence;CII)I+]Ljava/lang/Object;Ljava/lang/String;
+HSPLandroid/text/TextUtils;->indexOf(Ljava/lang/CharSequence;CI)I+]Ljava/lang/Object;missing_types]Ljava/lang/CharSequence;missing_types
+HSPLandroid/text/TextUtils;->indexOf(Ljava/lang/CharSequence;CII)I+]Ljava/lang/Object;megamorphic_types
 HSPLandroid/text/TextUtils;->indexOf(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)I+]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/text/TextUtils;->indexOf(Ljava/lang/CharSequence;Ljava/lang/CharSequence;II)I+]Ljava/lang/CharSequence;Ljava/lang/String;
-HSPLandroid/text/TextUtils;->isDigitsOnly(Ljava/lang/CharSequence;)Z
-HSPLandroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z+]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLandroid/text/TextUtils;->isDigitsOnly(Ljava/lang/CharSequence;)Z+]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLandroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z+]Ljava/lang/CharSequence;missing_types
 HSPLandroid/text/TextUtils;->isGraphic(Ljava/lang/CharSequence;)Z
 HSPLandroid/text/TextUtils;->join(Ljava/lang/CharSequence;Ljava/lang/Iterable;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Iterable;megamorphic_types]Ljava/util/Iterator;megamorphic_types
 HSPLandroid/text/TextUtils;->join(Ljava/lang/CharSequence;[Ljava/lang/Object;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
@@ -14989,18 +14998,18 @@
 HSPLandroid/text/TextUtils;->removeEmptySpans([Ljava/lang/Object;Landroid/text/Spanned;Ljava/lang/Class;)[Ljava/lang/Object;
 HSPLandroid/text/TextUtils;->safeIntern(Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/text/TextUtils;->split(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
-HSPLandroid/text/TextUtils;->stringOrSpannedString(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
-HSPLandroid/text/TextUtils;->substring(Ljava/lang/CharSequence;II)Ljava/lang/String;
+HSPLandroid/text/TextUtils;->stringOrSpannedString(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;+]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLandroid/text/TextUtils;->substring(Ljava/lang/CharSequence;II)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/text/TextUtils;->toUpperCase(Ljava/util/Locale;Ljava/lang/CharSequence;Z)Ljava/lang/CharSequence;+]Landroid/icu/text/CaseMap$Upper;Landroid/icu/text/CaseMap$Upper;]Landroid/icu/text/Edits;Landroid/icu/text/Edits;
 HSPLandroid/text/TextUtils;->trimNoCopySpans(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
 HSPLandroid/text/TextUtils;->trimToParcelableSize(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
 HSPLandroid/text/TextUtils;->trimToSize(Ljava/lang/CharSequence;I)Ljava/lang/CharSequence;
 HSPLandroid/text/TextUtils;->unpackRangeEndFromLong(J)I
 HSPLandroid/text/TextUtils;->unpackRangeStartFromLong(J)I
-HSPLandroid/text/TextUtils;->writeToParcel(Ljava/lang/CharSequence;Landroid/os/Parcel;I)V
+HSPLandroid/text/TextUtils;->writeToParcel(Ljava/lang/CharSequence;Landroid/os/Parcel;I)V+]Landroid/text/style/CharacterStyle;Landroid/text/style/TextAppearanceSpan;,Landroid/text/style/StyleSpan;,Landroid/text/style/LocaleSpan;]Landroid/text/ParcelableSpan;Landroid/text/style/TextAppearanceSpan;,Landroid/text/style/StyleSpan;,Landroid/text/style/LocaleSpan;]Landroid/text/Spanned;missing_types]Ljava/lang/CharSequence;missing_types]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/text/format/DateFormat;->format(Ljava/lang/CharSequence;J)Ljava/lang/CharSequence;
-HSPLandroid/text/format/DateFormat;->format(Ljava/lang/CharSequence;Ljava/util/Calendar;)Ljava/lang/CharSequence;
-HSPLandroid/text/format/DateFormat;->format(Ljava/lang/CharSequence;Ljava/util/Date;)Ljava/lang/CharSequence;
+HSPLandroid/text/format/DateFormat;->format(Ljava/lang/CharSequence;Ljava/util/Calendar;)Ljava/lang/CharSequence;+]Landroid/icu/text/DateFormatSymbols;Landroid/icu/text/DateFormatSymbols;]Ljava/util/Calendar;Ljava/util/GregorianCalendar;]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/text/SpannableStringBuilder;Landroid/text/SpannableStringBuilder;
+HSPLandroid/text/format/DateFormat;->format(Ljava/lang/CharSequence;Ljava/util/Date;)Ljava/lang/CharSequence;+]Ljava/util/Calendar;Ljava/util/GregorianCalendar;
 HSPLandroid/text/format/DateFormat;->getBestDateTimePattern(Ljava/util/Locale;Ljava/lang/String;)Ljava/lang/String;
 HSPLandroid/text/format/DateFormat;->getIcuDateFormatSymbols(Ljava/util/Locale;)Landroid/icu/text/DateFormatSymbols;
 HSPLandroid/text/format/DateFormat;->getMonthString(Landroid/icu/text/DateFormatSymbols;III)Ljava/lang/String;
@@ -15009,16 +15018,16 @@
 HSPLandroid/text/format/DateFormat;->getYearString(II)Ljava/lang/String;
 HSPLandroid/text/format/DateFormat;->hasDesignator(Ljava/lang/CharSequence;C)Z
 HSPLandroid/text/format/DateFormat;->is24HourFormat(Landroid/content/Context;)Z
-HSPLandroid/text/format/DateFormat;->is24HourFormat(Landroid/content/Context;I)Z
-HSPLandroid/text/format/DateFormat;->is24HourLocale(Ljava/util/Locale;)Z
-HSPLandroid/text/format/DateFormat;->zeroPad(II)Ljava/lang/String;
+HSPLandroid/text/format/DateFormat;->is24HourFormat(Landroid/content/Context;I)Z+]Landroid/content/res/Resources;Landroid/content/res/Resources;
+HSPLandroid/text/format/DateFormat;->is24HourLocale(Ljava/util/Locale;)Z+]Ljava/util/Locale;Ljava/util/Locale;
+HSPLandroid/text/format/DateFormat;->zeroPad(II)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/text/format/DateIntervalFormat;-><clinit>()V
 HSPLandroid/text/format/DateIntervalFormat;->formatDateRange(JJILjava/lang/String;)Ljava/lang/String;
-HSPLandroid/text/format/DateIntervalFormat;->formatDateRange(Landroid/icu/util/ULocale;Landroid/icu/util/TimeZone;JJI)Ljava/lang/String;
-HSPLandroid/text/format/DateIntervalFormat;->getFormatter(Ljava/lang/String;Landroid/icu/util/ULocale;Landroid/icu/util/TimeZone;)Landroid/icu/text/DateIntervalFormat;
+HSPLandroid/text/format/DateIntervalFormat;->formatDateRange(Landroid/icu/util/ULocale;Landroid/icu/util/TimeZone;JJI)Ljava/lang/String;+]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;]Landroid/icu/text/DateIntervalFormat;Landroid/icu/text/DateIntervalFormat;
+HSPLandroid/text/format/DateIntervalFormat;->getFormatter(Ljava/lang/String;Landroid/icu/util/ULocale;Landroid/icu/util/TimeZone;)Landroid/icu/text/DateIntervalFormat;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/LruCache;Landroid/util/LruCache;
 HSPLandroid/text/format/DateIntervalFormat;->isExactlyMidnight(Landroid/icu/util/Calendar;)Z
-HSPLandroid/text/format/DateUtils;->formatDateRange(Landroid/content/Context;JJI)Ljava/lang/String;
-HSPLandroid/text/format/DateUtils;->formatDateRange(Landroid/content/Context;Ljava/util/Formatter;JJILjava/lang/String;)Ljava/util/Formatter;
+HSPLandroid/text/format/DateUtils;->formatDateRange(Landroid/content/Context;JJI)Ljava/lang/String;+]Ljava/util/Formatter;Ljava/util/Formatter;
+HSPLandroid/text/format/DateUtils;->formatDateRange(Landroid/content/Context;Ljava/util/Formatter;JJILjava/lang/String;)Ljava/util/Formatter;+]Ljava/util/Formatter;Ljava/util/Formatter;]Ljava/lang/Appendable;Ljava/lang/StringBuilder;
 HSPLandroid/text/format/DateUtils;->formatDateTime(Landroid/content/Context;JI)Ljava/lang/String;
 HSPLandroid/text/format/DateUtils;->formatElapsedTime(J)Ljava/lang/String;
 HSPLandroid/text/format/DateUtils;->formatElapsedTime(Ljava/lang/StringBuilder;J)Ljava/lang/String;
@@ -15027,13 +15036,13 @@
 HSPLandroid/text/format/DateUtils;->initFormatStringsLocked()V
 HSPLandroid/text/format/DateUtils;->isSameDate(JJ)Z
 HSPLandroid/text/format/DateUtils;->isToday(J)Z
-HSPLandroid/text/format/DateUtilsBridge;->createIcuCalendar(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;J)Landroid/icu/util/Calendar;
-HSPLandroid/text/format/DateUtilsBridge;->fallInSameMonth(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;)Z
+HSPLandroid/text/format/DateUtilsBridge;->createIcuCalendar(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;J)Landroid/icu/util/Calendar;+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;
+HSPLandroid/text/format/DateUtilsBridge;->fallInSameMonth(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;)Z+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;
 HSPLandroid/text/format/DateUtilsBridge;->fallInSameYear(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;)Z
-HSPLandroid/text/format/DateUtilsBridge;->fallOnDifferentDates(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;)Z
-HSPLandroid/text/format/DateUtilsBridge;->icuTimeZone(Ljava/util/TimeZone;)Landroid/icu/util/TimeZone;
+HSPLandroid/text/format/DateUtilsBridge;->fallOnDifferentDates(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;)Z+]Landroid/icu/util/Calendar;Landroid/icu/util/GregorianCalendar;
+HSPLandroid/text/format/DateUtilsBridge;->icuTimeZone(Ljava/util/TimeZone;)Landroid/icu/util/TimeZone;+]Landroid/icu/util/TimeZone;Landroid/icu/impl/OlsonTimeZone;]Ljava/util/TimeZone;Llibcore/util/ZoneInfo;
 HSPLandroid/text/format/DateUtilsBridge;->isThisYear(Landroid/icu/util/Calendar;)Z
-HSPLandroid/text/format/DateUtilsBridge;->toSkeleton(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;I)Ljava/lang/String;
+HSPLandroid/text/format/DateUtilsBridge;->toSkeleton(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/text/format/Formatter;->formatBytes(Landroid/content/res/Resources;JI)Landroid/text/format/Formatter$BytesResult;
 HSPLandroid/text/format/Formatter;->formatFileSize(Landroid/content/Context;J)Ljava/lang/String;
 HSPLandroid/text/format/Formatter;->formatFileSize(Landroid/content/Context;JI)Ljava/lang/String;
@@ -15143,7 +15152,7 @@
 HSPLandroid/text/style/StyleSpan;->writeToParcelInternal(Landroid/os/Parcel;I)V
 HSPLandroid/text/style/TextAppearanceSpan;-><init>(Landroid/content/Context;I)V
 HSPLandroid/text/style/TextAppearanceSpan;-><init>(Landroid/content/Context;II)V
-HSPLandroid/text/style/TextAppearanceSpan;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/text/style/TextAppearanceSpan;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/content/res/ColorStateList$1;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/text/style/TextAppearanceSpan;-><init>(Ljava/lang/String;IILandroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;)V
 HSPLandroid/text/style/TextAppearanceSpan;->getFamily()Ljava/lang/String;
 HSPLandroid/text/style/TextAppearanceSpan;->getLinkTextColor()Landroid/content/res/ColorStateList;
@@ -15152,7 +15161,7 @@
 HSPLandroid/text/style/TextAppearanceSpan;->getTextStyle()I
 HSPLandroid/text/style/TextAppearanceSpan;->updateDrawState(Landroid/text/TextPaint;)V
 HSPLandroid/text/style/TextAppearanceSpan;->updateMeasureState(Landroid/text/TextPaint;)V
-HSPLandroid/text/style/TextAppearanceSpan;->writeToParcelInternal(Landroid/os/Parcel;I)V
+HSPLandroid/text/style/TextAppearanceSpan;->writeToParcelInternal(Landroid/os/Parcel;I)V+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/text/style/TtsSpan$Builder;->build()Landroid/text/style/TtsSpan;
 HSPLandroid/text/style/TtsSpan$Builder;->setStringArgument(Ljava/lang/String;Ljava/lang/String;)Landroid/text/style/TtsSpan$Builder;
 HSPLandroid/text/style/TtsSpan$SemioticClassBuilder;-><init>(Ljava/lang/String;)V
@@ -15165,7 +15174,7 @@
 HSPLandroid/text/style/UnderlineSpan;->updateDrawState(Landroid/text/TextPaint;)V
 HSPLandroid/text/style/UnderlineSpan;->writeToParcelInternal(Landroid/os/Parcel;I)V
 HSPLandroid/text/util/Linkify$4;-><init>()V
-HSPLandroid/text/util/Linkify;->addLinks(Landroid/text/Spannable;ILandroid/content/Context;Ljava/util/function/Function;)Z
+HSPLandroid/text/util/Linkify;->addLinks(Landroid/text/Spannable;ILandroid/content/Context;Ljava/util/function/Function;)Z+]Ljava/lang/Object;Landroid/text/SpannableStringBuilder;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/text/Spannable;Landroid/text/SpannableStringBuilder;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLandroid/text/util/Linkify;->containsUnsupportedCharacters(Ljava/lang/String;)Z
 HSPLandroid/text/util/Linkify;->gatherLinks(Ljava/util/ArrayList;Landroid/text/Spannable;Ljava/util/regex/Pattern;[Ljava/lang/String;Landroid/text/util/Linkify$MatchFilter;Landroid/text/util/Linkify$TransformFilter;)V
 HSPLandroid/text/util/Linkify;->pruneOverlaps(Ljava/util/ArrayList;)V
@@ -15179,7 +15188,7 @@
 HSPLandroid/transition/Fade$FadeAnimatorListener;->onAnimationStart(Landroid/animation/Animator;)V
 HSPLandroid/transition/Fade;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/transition/Fade;->captureStartValues(Landroid/transition/TransitionValues;)V
-HSPLandroid/transition/Fade;->createAnimation(Landroid/view/View;FF)Landroid/animation/Animator;
+HSPLandroid/transition/Fade;->createAnimation(Landroid/view/View;FF)Landroid/animation/Animator;+]Landroid/view/View;missing_types]Landroid/transition/Fade;Landroid/transition/Fade;]Landroid/animation/ObjectAnimator;Landroid/animation/ObjectAnimator;
 HSPLandroid/transition/Fade;->onAppear(Landroid/view/ViewGroup;Landroid/view/View;Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Landroid/animation/Animator;
 HSPLandroid/transition/Fade;->onDisappear(Landroid/view/ViewGroup;Landroid/view/View;Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Landroid/animation/Animator;
 HSPLandroid/transition/Scene;->enter()V
@@ -15187,24 +15196,24 @@
 HSPLandroid/transition/Transition$2;->onAnimationStart(Landroid/animation/Animator;)V
 HSPLandroid/transition/Transition$3;->onAnimationEnd(Landroid/animation/Animator;)V
 HSPLandroid/transition/Transition;-><init>()V
-HSPLandroid/transition/Transition;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/transition/Transition;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V+]Landroid/transition/Transition;Landroid/transition/TransitionSet;,Landroid/transition/ChangeTransform;,Landroid/transition/ChangeBounds;,Lcom/android/internal/transition/EpicenterTranslateClipReveal;,Landroid/transition/Fade;]Ljava/lang/Object;megamorphic_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/content/Context;missing_types
 HSPLandroid/transition/Transition;->addListener(Landroid/transition/Transition$TransitionListener;)Landroid/transition/Transition;
 HSPLandroid/transition/Transition;->addTarget(Landroid/view/View;)Landroid/transition/Transition;
 HSPLandroid/transition/Transition;->addUnmatched(Landroid/util/ArrayMap;Landroid/util/ArrayMap;)V
-HSPLandroid/transition/Transition;->addViewValues(Landroid/transition/TransitionValuesMaps;Landroid/view/View;Landroid/transition/TransitionValues;)V
-HSPLandroid/transition/Transition;->animate(Landroid/animation/Animator;)V
-HSPLandroid/transition/Transition;->captureHierarchy(Landroid/view/View;Z)V
+HSPLandroid/transition/Transition;->addViewValues(Landroid/transition/TransitionValuesMaps;Landroid/view/View;Landroid/transition/TransitionValues;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/view/View;missing_types]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLandroid/transition/Transition;->animate(Landroid/animation/Animator;)V+]Landroid/transition/Transition;Landroid/transition/Fade;,Landroid/transition/ChangeBounds;]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;,Landroid/animation/AnimatorSet;
+HSPLandroid/transition/Transition;->captureHierarchy(Landroid/view/View;Z)V+]Landroid/transition/Transition;Landroid/transition/TransitionSet;]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/transition/Transition;->capturePropagationValues(Landroid/transition/TransitionValues;)V
 HSPLandroid/transition/Transition;->captureValues(Landroid/view/ViewGroup;Z)V
 HSPLandroid/transition/Transition;->clearValues(Z)V
 HSPLandroid/transition/Transition;->clone()Landroid/transition/Transition;
-HSPLandroid/transition/Transition;->createAnimators(Landroid/view/ViewGroup;Landroid/transition/TransitionValuesMaps;Landroid/transition/TransitionValuesMaps;Ljava/util/ArrayList;Ljava/util/ArrayList;)V
-HSPLandroid/transition/Transition;->end()V
+HSPLandroid/transition/Transition;->createAnimators(Landroid/view/ViewGroup;Landroid/transition/TransitionValuesMaps;Landroid/transition/TransitionValuesMaps;Ljava/util/ArrayList;Ljava/util/ArrayList;)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Landroid/transition/Transition;Landroid/transition/Fade;,Landroid/transition/ChangeBounds;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/view/ViewGroup;missing_types]Ljava/util/Map;Landroid/util/ArrayMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/transition/Transition;->end()V+]Landroid/transition/Transition$TransitionListener;megamorphic_types]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/transition/Transition;->getDuration()J
 HSPLandroid/transition/Transition;->getInterpolator()Landroid/animation/TimeInterpolator;
 HSPLandroid/transition/Transition;->getName()Ljava/lang/String;
 HSPLandroid/transition/Transition;->getStartDelay()J
-HSPLandroid/transition/Transition;->isValidTarget(Landroid/view/View;)Z
+HSPLandroid/transition/Transition;->isValidTarget(Landroid/view/View;)Z+]Landroid/view/View;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/transition/Transition;->matchIds(Landroid/util/ArrayMap;Landroid/util/ArrayMap;Landroid/util/SparseArray;Landroid/util/SparseArray;)V
 HSPLandroid/transition/Transition;->matchInstances(Landroid/util/ArrayMap;Landroid/util/ArrayMap;)V
 HSPLandroid/transition/Transition;->matchItemIds(Landroid/util/ArrayMap;Landroid/util/ArrayMap;Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;)V
@@ -15218,7 +15227,7 @@
 HSPLandroid/transition/Transition;->start()V
 HSPLandroid/transition/TransitionInflater;-><init>(Landroid/content/Context;)V
 HSPLandroid/transition/TransitionInflater;->createCustom(Landroid/util/AttributeSet;Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object;
-HSPLandroid/transition/TransitionInflater;->createTransitionFromXml(Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/transition/Transition;)Landroid/transition/Transition;
+HSPLandroid/transition/TransitionInflater;->createTransitionFromXml(Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/transition/Transition;)Landroid/transition/Transition;+]Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/XmlBlock$Parser;]Landroid/transition/TransitionSet;Landroid/transition/TransitionSet;
 HSPLandroid/transition/TransitionInflater;->from(Landroid/content/Context;)Landroid/transition/TransitionInflater;
 HSPLandroid/transition/TransitionInflater;->inflateTransition(I)Landroid/transition/Transition;
 HSPLandroid/transition/TransitionListenerAdapter;-><init>()V
@@ -15238,8 +15247,8 @@
 HSPLandroid/transition/TransitionSet;->addTarget(Landroid/view/View;)Landroid/transition/TransitionSet;
 HSPLandroid/transition/TransitionSet;->addTransition(Landroid/transition/Transition;)Landroid/transition/TransitionSet;
 HSPLandroid/transition/TransitionSet;->addTransitionInternal(Landroid/transition/Transition;)V
-HSPLandroid/transition/TransitionSet;->captureEndValues(Landroid/transition/TransitionValues;)V
-HSPLandroid/transition/TransitionSet;->capturePropagationValues(Landroid/transition/TransitionValues;)V
+HSPLandroid/transition/TransitionSet;->captureEndValues(Landroid/transition/TransitionValues;)V+]Landroid/transition/Transition;Landroid/transition/Fade;,Landroid/transition/ChangeBounds;]Landroid/transition/TransitionSet;Landroid/transition/TransitionSet;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HSPLandroid/transition/TransitionSet;->capturePropagationValues(Landroid/transition/TransitionValues;)V+]Landroid/transition/Transition;Landroid/transition/Fade;,Landroid/transition/ChangeBounds;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/transition/TransitionSet;->captureStartValues(Landroid/transition/TransitionValues;)V
 HSPLandroid/transition/TransitionSet;->clone()Landroid/transition/Transition;
 HSPLandroid/transition/TransitionSet;->clone()Landroid/transition/TransitionSet;
@@ -15257,14 +15266,14 @@
 HSPLandroid/transition/Visibility$DisappearListener;->onTransitionEnd(Landroid/transition/Transition;)V
 HSPLandroid/transition/Visibility;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/transition/Visibility;->captureEndValues(Landroid/transition/TransitionValues;)V
-HSPLandroid/transition/Visibility;->captureValues(Landroid/transition/TransitionValues;)V
-HSPLandroid/transition/Visibility;->createAnimator(Landroid/view/ViewGroup;Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Landroid/animation/Animator;
+HSPLandroid/transition/Visibility;->captureValues(Landroid/transition/TransitionValues;)V+]Landroid/view/View;missing_types]Ljava/util/Map;Landroid/util/ArrayMap;
+HSPLandroid/transition/Visibility;->createAnimator(Landroid/view/ViewGroup;Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Landroid/animation/Animator;+]Landroid/transition/Visibility;Landroid/transition/Fade;
 HSPLandroid/transition/Visibility;->getMode()I
 HSPLandroid/transition/Visibility;->getTransitionProperties()[Ljava/lang/String;
-HSPLandroid/transition/Visibility;->getVisibilityChangeInfo(Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Landroid/transition/Visibility$VisibilityInfo;
+HSPLandroid/transition/Visibility;->getVisibilityChangeInfo(Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Landroid/transition/Visibility$VisibilityInfo;+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/Map;Landroid/util/ArrayMap;
 HSPLandroid/transition/Visibility;->isTransitionRequired(Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Z
 HSPLandroid/transition/Visibility;->onAppear(Landroid/view/ViewGroup;Landroid/transition/TransitionValues;ILandroid/transition/TransitionValues;I)Landroid/animation/Animator;
-HSPLandroid/transition/Visibility;->onDisappear(Landroid/view/ViewGroup;Landroid/transition/TransitionValues;ILandroid/transition/TransitionValues;I)Landroid/animation/Animator;
+HSPLandroid/transition/Visibility;->onDisappear(Landroid/view/ViewGroup;Landroid/transition/TransitionValues;ILandroid/transition/TransitionValues;I)Landroid/animation/Animator;+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;Landroid/widget/FrameLayout;]Landroid/transition/Visibility;Landroid/transition/Fade;]Landroid/view/ViewGroupOverlay;Landroid/view/ViewGroupOverlay;]Ljava/util/Map;Landroid/util/ArrayMap;]Landroid/animation/Animator;Landroid/animation/ObjectAnimator;
 HSPLandroid/transition/Visibility;->setMode(I)V
 HSPLandroid/util/AndroidException;-><init>()V
 HSPLandroid/util/AndroidException;-><init>(Ljava/lang/String;)V
@@ -15279,7 +15288,7 @@
 HSPLandroid/util/ArrayMap;-><init>()V
 HSPLandroid/util/ArrayMap;-><init>(I)V
 HSPLandroid/util/ArrayMap;-><init>(IZ)V
-HSPLandroid/util/ArrayMap;-><init>(Landroid/util/ArrayMap;)V
+HSPLandroid/util/ArrayMap;-><init>(Landroid/util/ArrayMap;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/util/ArrayMap;->allocArrays(I)V
 HSPLandroid/util/ArrayMap;->append(Ljava/lang/Object;Ljava/lang/Object;)V+]Ljava/lang/Object;Ljava/lang/String;
 HSPLandroid/util/ArrayMap;->binarySearchHashes([III)I
@@ -15299,16 +15308,16 @@
 HSPLandroid/util/ArrayMap;->indexOfValue(Ljava/lang/Object;)I
 HSPLandroid/util/ArrayMap;->isEmpty()Z
 HSPLandroid/util/ArrayMap;->keyAt(I)Ljava/lang/Object;
-HSPLandroid/util/ArrayMap;->keySet()Ljava/util/Set;
+HSPLandroid/util/ArrayMap;->keySet()Ljava/util/Set;+]Landroid/util/MapCollections;Landroid/util/ArrayMap$1;
 HSPLandroid/util/ArrayMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Object;megamorphic_types
-HSPLandroid/util/ArrayMap;->putAll(Landroid/util/ArrayMap;)V
+HSPLandroid/util/ArrayMap;->putAll(Landroid/util/ArrayMap;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/util/ArrayMap;->putAll(Ljava/util/Map;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;]Ljava/util/Set;Ljava/util/HashMap$EntrySet;
 HSPLandroid/util/ArrayMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/util/ArrayMap;->removeAt(I)Ljava/lang/Object;
 HSPLandroid/util/ArrayMap;->retainAll(Ljava/util/Collection;)Z
 HSPLandroid/util/ArrayMap;->setValueAt(ILjava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/util/ArrayMap;->size()I
-HSPLandroid/util/ArrayMap;->toString()Ljava/lang/String;
+HSPLandroid/util/ArrayMap;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLandroid/util/ArrayMap;->validate()V
 HSPLandroid/util/ArrayMap;->valueAt(I)Ljava/lang/Object;
 HSPLandroid/util/ArrayMap;->values()Ljava/util/Collection;
@@ -15322,11 +15331,11 @@
 HSPLandroid/util/ArraySet;-><init>(Landroid/util/ArraySet;)V
 HSPLandroid/util/ArraySet;-><init>(Ljava/util/Collection;)V
 HSPLandroid/util/ArraySet;-><init>([Ljava/lang/Object;)V
-HSPLandroid/util/ArraySet;->add(Ljava/lang/Object;)Z
+HSPLandroid/util/ArraySet;->add(Ljava/lang/Object;)Z+]Ljava/lang/Object;megamorphic_types
 HSPLandroid/util/ArraySet;->addAll(Landroid/util/ArraySet;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLandroid/util/ArraySet;->addAll(Ljava/util/Collection;)Z
 HSPLandroid/util/ArraySet;->allocArrays(I)V
-HSPLandroid/util/ArraySet;->append(Ljava/lang/Object;)V+]Ljava/lang/Object;Landroid/app/PendingIntent;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLandroid/util/ArraySet;->append(Ljava/lang/Object;)V+]Ljava/lang/Object;Landroid/app/PendingIntent;,Lcom/android/org/conscrypt/OpenSSLRSAPublicKey;,Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/BCDSAPublicKey;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLandroid/util/ArraySet;->binarySearch([II)I
 HSPLandroid/util/ArraySet;->clear()V
 HSPLandroid/util/ArraySet;->contains(Ljava/lang/Object;)Z
@@ -15336,7 +15345,7 @@
 HSPLandroid/util/ArraySet;->getCollection()Landroid/util/MapCollections;
 HSPLandroid/util/ArraySet;->hashCode()I
 HSPLandroid/util/ArraySet;->indexOf(Ljava/lang/Object;)I
-HSPLandroid/util/ArraySet;->indexOf(Ljava/lang/Object;I)I
+HSPLandroid/util/ArraySet;->indexOf(Ljava/lang/Object;I)I+]Ljava/lang/Object;megamorphic_types
 HSPLandroid/util/ArraySet;->indexOfNull()I
 HSPLandroid/util/ArraySet;->isEmpty()Z
 HSPLandroid/util/ArraySet;->iterator()Ljava/util/Iterator;
@@ -15348,7 +15357,7 @@
 HSPLandroid/util/ArraySet;->toArray()[Ljava/lang/Object;
 HSPLandroid/util/ArraySet;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
 HSPLandroid/util/ArraySet;->toString()Ljava/lang/String;
-HSPLandroid/util/ArraySet;->valueAt(I)Ljava/lang/Object;
+HSPLandroid/util/ArraySet;->valueAt(I)Ljava/lang/Object;+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLandroid/util/ArraySet;->valueAtUnchecked(I)Ljava/lang/Object;
 HSPLandroid/util/AtomicFile;-><init>(Ljava/io/File;)V
 HSPLandroid/util/AtomicFile;-><init>(Ljava/io/File;Landroid/util/SystemConfigFileCommitEventLogger;)V
@@ -15363,11 +15372,11 @@
 HSPLandroid/util/Base64$Decoder;->process([BIIZ)Z
 HSPLandroid/util/Base64$Encoder;-><init>(I[B)V
 HSPLandroid/util/Base64$Encoder;->process([BIIZ)Z
-HSPLandroid/util/Base64;->decode(Ljava/lang/String;I)[B
+HSPLandroid/util/Base64;->decode(Ljava/lang/String;I)[B+]Ljava/lang/String;Ljava/lang/String;
 HSPLandroid/util/Base64;->decode([BI)[B
-HSPLandroid/util/Base64;->decode([BIII)[B
+HSPLandroid/util/Base64;->decode([BIII)[B+]Landroid/util/Base64$Decoder;Landroid/util/Base64$Decoder;
 HSPLandroid/util/Base64;->encode([BI)[B
-HSPLandroid/util/Base64;->encode([BIII)[B
+HSPLandroid/util/Base64;->encode([BIII)[B+]Landroid/util/Base64$Encoder;Landroid/util/Base64$Encoder;
 HSPLandroid/util/Base64;->encodeToString([BI)Ljava/lang/String;
 HSPLandroid/util/Base64;->encodeToString([BIII)Ljava/lang/String;
 HSPLandroid/util/CloseGuard;-><init>()V
@@ -15381,7 +15390,7 @@
 HSPLandroid/util/DisplayMetrics;-><init>()V
 HSPLandroid/util/DisplayMetrics;->setTo(Landroid/util/DisplayMetrics;)V
 HSPLandroid/util/DisplayMetrics;->setToDefaults()V
-HSPLandroid/util/EventLog$Event;-><init>([B)V
+HSPLandroid/util/EventLog$Event;-><init>([B)V+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLandroid/util/EventLog$Event;->decodeObject()Ljava/lang/Object;+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLandroid/util/EventLog$Event;->getData()Ljava/lang/Object;+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLandroid/util/EventLog$Event;->getHeaderSize()I+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
@@ -15478,7 +15487,7 @@
 HSPLandroid/util/LocalLog;-><init>(I)V
 HSPLandroid/util/LocalLog;-><init>(IZ)V
 HSPLandroid/util/LocalLog;->append(Ljava/lang/String;)V
-HSPLandroid/util/LocalLog;->log(Ljava/lang/String;)V
+HSPLandroid/util/LocalLog;->log(Ljava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/util/Log$1;->onTerribleFailure(Ljava/lang/String;Landroid/util/Log$TerribleFailure;Z)V
 HSPLandroid/util/Log$ImmediateLogWriter;-><init>(IILjava/lang/String;)V
 HSPLandroid/util/Log$ImmediateLogWriter;->flush()V
@@ -15493,7 +15502,7 @@
 HSPLandroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
 HSPLandroid/util/Log;->logToRadioBuffer(ILjava/lang/String;Ljava/lang/String;)I
 HSPLandroid/util/Log;->println(ILjava/lang/String;Ljava/lang/String;)I
-HSPLandroid/util/Log;->printlns(IILjava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
+HSPLandroid/util/Log;->printlns(IILjava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I+]Landroid/util/Log$ImmediateLogWriter;Landroid/util/Log$ImmediateLogWriter;]Lcom/android/internal/util/LineBreakBufferedWriter;Lcom/android/internal/util/LineBreakBufferedWriter;]Ljava/lang/Throwable;missing_types
 HSPLandroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I
 HSPLandroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
 HSPLandroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
@@ -15509,11 +15518,11 @@
 HSPLandroid/util/LongArray;->size()I
 HSPLandroid/util/LongSparseArray;-><init>()V
 HSPLandroid/util/LongSparseArray;-><init>(I)V
-HSPLandroid/util/LongSparseArray;->append(JLjava/lang/Object;)V
+HSPLandroid/util/LongSparseArray;->append(JLjava/lang/Object;)V+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
 HSPLandroid/util/LongSparseArray;->clear()V
 HSPLandroid/util/LongSparseArray;->delete(J)V
 HSPLandroid/util/LongSparseArray;->gc()V
-HSPLandroid/util/LongSparseArray;->get(J)Ljava/lang/Object;
+HSPLandroid/util/LongSparseArray;->get(J)Ljava/lang/Object;+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
 HSPLandroid/util/LongSparseArray;->get(JLjava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/util/LongSparseArray;->indexOfKey(J)I
 HSPLandroid/util/LongSparseArray;->keyAt(I)J
@@ -15540,17 +15549,17 @@
 HSPLandroid/util/LruCache;->hitCount()I
 HSPLandroid/util/LruCache;->maxSize()I
 HSPLandroid/util/LruCache;->missCount()I
-HSPLandroid/util/LruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroid/util/LruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/LinkedHashMap;Ljava/util/LinkedHashMap;]Landroid/util/LruCache;missing_types
 HSPLandroid/util/LruCache;->remove(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/util/LruCache;->resize(I)V
 HSPLandroid/util/LruCache;->safeSizeOf(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLandroid/util/LruCache;->size()I
 HSPLandroid/util/LruCache;->sizeOf(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLandroid/util/LruCache;->snapshot()Ljava/util/Map;
-HSPLandroid/util/LruCache;->trimToSize(I)V
-HSPLandroid/util/MapCollections$ArrayIterator;-><init>(Landroid/util/MapCollections;I)V
+HSPLandroid/util/LruCache;->trimToSize(I)V+]Ljava/util/Map$Entry;Ljava/util/LinkedHashMap$LinkedHashMapEntry;,Ljava/util/HashMap$TreeNode;]Ljava/util/LinkedHashMap;Ljava/util/LinkedHashMap;]Landroid/util/LruCache;missing_types
+HSPLandroid/util/MapCollections$ArrayIterator;-><init>(Landroid/util/MapCollections;I)V+]Landroid/util/MapCollections;Landroid/util/ArraySet$1;,Landroid/util/ArrayMap$1;
 HSPLandroid/util/MapCollections$ArrayIterator;->hasNext()Z
-HSPLandroid/util/MapCollections$ArrayIterator;->next()Ljava/lang/Object;
+HSPLandroid/util/MapCollections$ArrayIterator;->next()Ljava/lang/Object;+]Landroid/util/MapCollections$ArrayIterator;Landroid/util/MapCollections$ArrayIterator;]Landroid/util/MapCollections;Landroid/util/ArraySet$1;,Landroid/util/ArrayMap$1;
 HSPLandroid/util/MapCollections$ArrayIterator;->remove()V
 HSPLandroid/util/MapCollections$EntrySet;-><init>(Landroid/util/MapCollections;)V
 HSPLandroid/util/MapCollections$EntrySet;->iterator()Ljava/util/Iterator;
@@ -15561,13 +15570,13 @@
 HSPLandroid/util/MapCollections$KeySet;->iterator()Ljava/util/Iterator;
 HSPLandroid/util/MapCollections$KeySet;->size()I
 HSPLandroid/util/MapCollections$KeySet;->toArray()[Ljava/lang/Object;
-HSPLandroid/util/MapCollections$KeySet;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
-HSPLandroid/util/MapCollections$MapIterator;-><init>(Landroid/util/MapCollections;)V
-HSPLandroid/util/MapCollections$MapIterator;->getKey()Ljava/lang/Object;
-HSPLandroid/util/MapCollections$MapIterator;->getValue()Ljava/lang/Object;
+HSPLandroid/util/MapCollections$KeySet;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;+]Landroid/util/MapCollections;Landroid/util/ArrayMap$1;
+HSPLandroid/util/MapCollections$MapIterator;-><init>(Landroid/util/MapCollections;)V+]Landroid/util/MapCollections;Landroid/util/ArrayMap$1;
+HSPLandroid/util/MapCollections$MapIterator;->getKey()Ljava/lang/Object;+]Landroid/util/MapCollections;Landroid/util/ArrayMap$1;
+HSPLandroid/util/MapCollections$MapIterator;->getValue()Ljava/lang/Object;+]Landroid/util/MapCollections;Landroid/util/ArrayMap$1;
 HSPLandroid/util/MapCollections$MapIterator;->hasNext()Z
-HSPLandroid/util/MapCollections$MapIterator;->next()Ljava/lang/Object;
-HSPLandroid/util/MapCollections$MapIterator;->next()Ljava/util/Map$Entry;
+HSPLandroid/util/MapCollections$MapIterator;->next()Ljava/lang/Object;+]Landroid/util/MapCollections$MapIterator;Landroid/util/MapCollections$MapIterator;
+HSPLandroid/util/MapCollections$MapIterator;->next()Ljava/util/Map$Entry;+]Landroid/util/MapCollections$MapIterator;Landroid/util/MapCollections$MapIterator;
 HSPLandroid/util/MapCollections$ValuesCollection;->iterator()Ljava/util/Iterator;
 HSPLandroid/util/MapCollections$ValuesCollection;->size()I
 HSPLandroid/util/MapCollections$ValuesCollection;->toArray()[Ljava/lang/Object;
@@ -15576,8 +15585,8 @@
 HSPLandroid/util/MapCollections;->getKeySet()Ljava/util/Set;
 HSPLandroid/util/MapCollections;->getValues()Ljava/util/Collection;
 HSPLandroid/util/MapCollections;->retainAllHelper(Ljava/util/Map;Ljava/util/Collection;)Z
-HSPLandroid/util/MapCollections;->toArrayHelper(I)[Ljava/lang/Object;
-HSPLandroid/util/MapCollections;->toArrayHelper([Ljava/lang/Object;I)[Ljava/lang/Object;
+HSPLandroid/util/MapCollections;->toArrayHelper(I)[Ljava/lang/Object;+]Landroid/util/MapCollections;Landroid/util/ArrayMap$1;
+HSPLandroid/util/MapCollections;->toArrayHelper([Ljava/lang/Object;I)[Ljava/lang/Object;+]Ljava/lang/Object;[Ljava/lang/String;]Landroid/util/MapCollections;Landroid/util/ArrayMap$1;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/util/MathUtils;->addOrThrow(II)I
 HSPLandroid/util/MathUtils;->constrain(FFF)F
 HSPLandroid/util/MathUtils;->constrain(III)I
@@ -15589,7 +15598,7 @@
 HSPLandroid/util/MemoryIntArray;-><init>(Landroid/os/Parcel;Landroid/util/MemoryIntArray-IA;)V
 HSPLandroid/util/MemoryIntArray;->close()V
 HSPLandroid/util/MemoryIntArray;->enforceNotClosed()V+]Landroid/util/MemoryIntArray;Landroid/util/MemoryIntArray;
-HSPLandroid/util/MemoryIntArray;->enforceValidIndex(I)V
+HSPLandroid/util/MemoryIntArray;->enforceValidIndex(I)V+]Landroid/util/MemoryIntArray;Landroid/util/MemoryIntArray;
 HSPLandroid/util/MemoryIntArray;->finalize()V
 HSPLandroid/util/MemoryIntArray;->get(I)I
 HSPLandroid/util/MemoryIntArray;->isClosed()Z
@@ -15609,7 +15618,7 @@
 HSPLandroid/util/Pair;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLandroid/util/Pair;->create(Ljava/lang/Object;Ljava/lang/Object;)Landroid/util/Pair;
 HSPLandroid/util/Pair;->equals(Ljava/lang/Object;)Z
-HSPLandroid/util/Pair;->hashCode()I+]Ljava/lang/Object;Ljava/lang/Long;
+HSPLandroid/util/Pair;->hashCode()I+]Ljava/lang/Object;missing_types
 HSPLandroid/util/Pair;->toString()Ljava/lang/String;
 HSPLandroid/util/PathParser$PathData;-><init>(Landroid/util/PathParser$PathData;)V
 HSPLandroid/util/PathParser$PathData;-><init>(Ljava/lang/String;)V
@@ -15649,7 +15658,7 @@
 HSPLandroid/util/Rational;->compareTo(Landroid/util/Rational;)I
 HSPLandroid/util/Rational;->compareTo(Ljava/lang/Object;)I
 HSPLandroid/util/Singleton;-><init>()V
-HSPLandroid/util/Singleton;->get()Ljava/lang/Object;
+HSPLandroid/util/Singleton;->get()Ljava/lang/Object;+]Landroid/util/Singleton;Landroid/app/ActivityTaskManager$2;
 HSPLandroid/util/Size;-><init>(II)V
 HSPLandroid/util/Size;->equals(Ljava/lang/Object;)Z
 HSPLandroid/util/Size;->getHeight()I
@@ -15666,7 +15675,7 @@
 HSPLandroid/util/SparseArray;-><init>(I)V
 HSPLandroid/util/SparseArray;->append(ILjava/lang/Object;)V+]Landroid/util/SparseArray;missing_types
 HSPLandroid/util/SparseArray;->clear()V
-HSPLandroid/util/SparseArray;->clone()Landroid/util/SparseArray;
+HSPLandroid/util/SparseArray;->clone()Landroid/util/SparseArray;+][I[I][Ljava/lang/Object;[Ljava/lang/Object;
 HSPLandroid/util/SparseArray;->contains(I)Z
 HSPLandroid/util/SparseArray;->delete(I)V
 HSPLandroid/util/SparseArray;->gc()V
@@ -15685,7 +15694,7 @@
 HSPLandroid/util/SparseArray;->valueAt(I)Ljava/lang/Object;
 HSPLandroid/util/SparseBooleanArray;-><init>()V
 HSPLandroid/util/SparseBooleanArray;-><init>(I)V
-HSPLandroid/util/SparseBooleanArray;->append(IZ)V
+HSPLandroid/util/SparseBooleanArray;->append(IZ)V+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
 HSPLandroid/util/SparseBooleanArray;->clear()V
 HSPLandroid/util/SparseBooleanArray;->clone()Landroid/util/SparseBooleanArray;
 HSPLandroid/util/SparseBooleanArray;->delete(I)V
@@ -15862,10 +15871,10 @@
 HSPLandroid/view/Choreographer$FrameData;->getFrameTimeNanos()J
 HSPLandroid/view/Choreographer$FrameData;->updateFrameData(J)V+]Landroid/view/Choreographer$FrameTimeline;Landroid/view/Choreographer$FrameTimeline;
 HSPLandroid/view/Choreographer$FrameDisplayEventReceiver;-><init>(Landroid/view/Choreographer;Landroid/os/Looper;I)V
-HSPLandroid/view/Choreographer$FrameDisplayEventReceiver;->onVsync(JJILandroid/view/DisplayEventReceiver$VsyncEventData;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/Message;Landroid/os/Message;]Landroid/view/Choreographer$FrameHandler;Landroid/view/Choreographer$FrameHandler;]Landroid/view/DisplayEventReceiver$VsyncEventData;Landroid/view/DisplayEventReceiver$VsyncEventData;
+HSPLandroid/view/Choreographer$FrameDisplayEventReceiver;->onVsync(JJILandroid/view/DisplayEventReceiver$VsyncEventData;)V+]Landroid/os/Message;Landroid/os/Message;]Landroid/view/Choreographer$FrameHandler;Landroid/view/Choreographer$FrameHandler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/DisplayEventReceiver$VsyncEventData;Landroid/view/DisplayEventReceiver$VsyncEventData;
 HSPLandroid/view/Choreographer$FrameDisplayEventReceiver;->run()V+]Landroid/view/Choreographer;Landroid/view/Choreographer;
 HSPLandroid/view/Choreographer$FrameHandler;-><init>(Landroid/view/Choreographer;Landroid/os/Looper;)V
-HSPLandroid/view/Choreographer$FrameHandler;->handleMessage(Landroid/os/Message;)V
+HSPLandroid/view/Choreographer$FrameHandler;->handleMessage(Landroid/os/Message;)V+]Landroid/view/Choreographer;Landroid/view/Choreographer;
 HSPLandroid/view/Choreographer$FrameTimeline;-><clinit>()V
 HSPLandroid/view/Choreographer$FrameTimeline;-><init>(JJJ)V
 HSPLandroid/view/Choreographer$FrameTimeline;->resetVsyncId()V
@@ -15873,12 +15882,12 @@
 HSPLandroid/view/Choreographer;-><init>(Landroid/os/Looper;I)V
 HSPLandroid/view/Choreographer;->doCallbacks(ILandroid/view/Choreographer$FrameData;J)V+]Landroid/view/Choreographer$CallbackQueue;Landroid/view/Choreographer$CallbackQueue;]Landroid/view/Choreographer$CallbackRecord;Landroid/view/Choreographer$CallbackRecord;]Landroid/view/Choreographer$FrameData;Landroid/view/Choreographer$FrameData;
 HSPLandroid/view/Choreographer;->doFrame(JILandroid/view/DisplayEventReceiver$VsyncEventData;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/Choreographer$FrameData;Landroid/view/Choreographer$FrameData;]Landroid/graphics/FrameInfo;Landroid/graphics/FrameInfo;]Landroid/view/Choreographer;Landroid/view/Choreographer;]Landroid/view/DisplayEventReceiver$VsyncEventData;Landroid/view/DisplayEventReceiver$VsyncEventData;
-HSPLandroid/view/Choreographer;->doScheduleCallback(I)V
+HSPLandroid/view/Choreographer;->doScheduleCallback(I)V+]Landroid/view/Choreographer$CallbackQueue;Landroid/view/Choreographer$CallbackQueue;
 HSPLandroid/view/Choreographer;->doScheduleVsync()V
 HSPLandroid/view/Choreographer;->getFrameIntervalNanos()J
 HSPLandroid/view/Choreographer;->getFrameTime()J
 HSPLandroid/view/Choreographer;->getFrameTimeNanos()J
-HSPLandroid/view/Choreographer;->getInstance()Landroid/view/Choreographer;
+HSPLandroid/view/Choreographer;->getInstance()Landroid/view/Choreographer;+]Ljava/lang/ThreadLocal;Landroid/view/Choreographer$1;
 HSPLandroid/view/Choreographer;->getMainThreadInstance()Landroid/view/Choreographer;
 HSPLandroid/view/Choreographer;->getRefreshRate()F
 HSPLandroid/view/Choreographer;->getSfInstance()Landroid/view/Choreographer;
@@ -15892,7 +15901,7 @@
 HSPLandroid/view/Choreographer;->postFrameCallbackDelayed(Landroid/view/Choreographer$FrameCallback;J)V
 HSPLandroid/view/Choreographer;->recycleCallbackLocked(Landroid/view/Choreographer$CallbackRecord;)V
 HSPLandroid/view/Choreographer;->removeCallbacks(ILjava/lang/Runnable;Ljava/lang/Object;)V
-HSPLandroid/view/Choreographer;->removeCallbacksInternal(ILjava/lang/Object;Ljava/lang/Object;)V
+HSPLandroid/view/Choreographer;->removeCallbacksInternal(ILjava/lang/Object;Ljava/lang/Object;)V+]Landroid/view/Choreographer$CallbackQueue;Landroid/view/Choreographer$CallbackQueue;]Landroid/view/Choreographer$FrameHandler;Landroid/view/Choreographer$FrameHandler;
 HSPLandroid/view/Choreographer;->removeFrameCallback(Landroid/view/Choreographer$FrameCallback;)V
 HSPLandroid/view/Choreographer;->scheduleFrameLocked(J)V+]Landroid/os/Message;Landroid/os/Message;]Landroid/view/Choreographer$FrameHandler;Landroid/view/Choreographer$FrameHandler;
 HSPLandroid/view/Choreographer;->scheduleVsyncLocked()V+]Landroid/view/Choreographer$FrameDisplayEventReceiver;Landroid/view/Choreographer$FrameDisplayEventReceiver;
@@ -15905,8 +15914,8 @@
 HSPLandroid/view/ContextThemeWrapper;->getOverrideConfiguration()Landroid/content/res/Configuration;
 HSPLandroid/view/ContextThemeWrapper;->getResources()Landroid/content/res/Resources;
 HSPLandroid/view/ContextThemeWrapper;->getResourcesInternal()Landroid/content/res/Resources;
-HSPLandroid/view/ContextThemeWrapper;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
-HSPLandroid/view/ContextThemeWrapper;->getTheme()Landroid/content/res/Resources$Theme;
+HSPLandroid/view/ContextThemeWrapper;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;+]Landroid/view/LayoutInflater;Lcom/android/internal/policy/PhoneLayoutInflater;]Landroid/view/ContextThemeWrapper;missing_types]Landroid/content/Context;missing_types
+HSPLandroid/view/ContextThemeWrapper;->getTheme()Landroid/content/res/Resources$Theme;+]Landroid/view/ContextThemeWrapper;Landroid/view/ContextThemeWrapper;
 HSPLandroid/view/ContextThemeWrapper;->initializeTheme()V
 HSPLandroid/view/ContextThemeWrapper;->onApplyThemeResource(Landroid/content/res/Resources$Theme;IZ)V
 HSPLandroid/view/ContextThemeWrapper;->setTheme(I)V
@@ -15934,10 +15943,10 @@
 HSPLandroid/view/Display$Mode;->toString()Ljava/lang/String;
 HSPLandroid/view/Display;-><init>(Landroid/hardware/display/DisplayManagerGlobal;ILandroid/view/DisplayInfo;Landroid/content/res/Resources;)V
 HSPLandroid/view/Display;-><init>(Landroid/hardware/display/DisplayManagerGlobal;ILandroid/view/DisplayInfo;Landroid/view/DisplayAdjustments;)V
-HSPLandroid/view/Display;-><init>(Landroid/hardware/display/DisplayManagerGlobal;ILandroid/view/DisplayInfo;Landroid/view/DisplayAdjustments;Landroid/content/res/Resources;)V
+HSPLandroid/view/Display;-><init>(Landroid/hardware/display/DisplayManagerGlobal;ILandroid/view/DisplayInfo;Landroid/view/DisplayAdjustments;Landroid/content/res/Resources;)V+]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLandroid/view/Display;->getAppVsyncOffsetNanos()J
 HSPLandroid/view/Display;->getCutout()Landroid/view/DisplayCutout;
-HSPLandroid/view/Display;->getDisplayAdjustments()Landroid/view/DisplayAdjustments;
+HSPLandroid/view/Display;->getDisplayAdjustments()Landroid/view/DisplayAdjustments;+]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/view/DisplayAdjustments;Landroid/view/DisplayAdjustments;
 HSPLandroid/view/Display;->getDisplayId()I
 HSPLandroid/view/Display;->getDisplayInfo(Landroid/view/DisplayInfo;)Z
 HSPLandroid/view/Display;->getFlags()I
@@ -15952,7 +15961,7 @@
 HSPLandroid/view/Display;->getRealSize(Landroid/graphics/Point;)V
 HSPLandroid/view/Display;->getRefreshRate()F
 HSPLandroid/view/Display;->getRotation()I
-HSPLandroid/view/Display;->getSize(Landroid/graphics/Point;)V
+HSPLandroid/view/Display;->getSize(Landroid/graphics/Point;)V+]Landroid/view/DisplayInfo;Landroid/view/DisplayInfo;]Landroid/view/Display;Landroid/view/Display;
 HSPLandroid/view/Display;->getState()I
 HSPLandroid/view/Display;->getSupportedColorModes()[I
 HSPLandroid/view/Display;->getSupportedModes()[Landroid/view/Display$Mode;
@@ -15964,7 +15973,7 @@
 HSPLandroid/view/Display;->shouldReportMaxBounds()Z
 HSPLandroid/view/Display;->stateToString(I)Ljava/lang/String;
 HSPLandroid/view/Display;->updateCachedAppSizeIfNeededLocked()V
-HSPLandroid/view/Display;->updateDisplayInfoLocked()V
+HSPLandroid/view/Display;->updateDisplayInfoLocked()V+]Landroid/hardware/display/DisplayManagerGlobal;Landroid/hardware/display/DisplayManagerGlobal;
 HSPLandroid/view/DisplayAddress$Physical$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/DisplayAddress$Physical;
 HSPLandroid/view/DisplayAddress$Physical$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/view/DisplayAddress$Physical;-><init>(J)V
@@ -15973,7 +15982,7 @@
 HSPLandroid/view/DisplayAddress$Physical;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/view/DisplayAddress;-><init>()V
 HSPLandroid/view/DisplayAdjustments;-><init>()V
-HSPLandroid/view/DisplayAdjustments;-><init>(Landroid/content/res/Configuration;)V
+HSPLandroid/view/DisplayAdjustments;-><init>(Landroid/content/res/Configuration;)V+]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
 HSPLandroid/view/DisplayAdjustments;-><init>(Landroid/view/DisplayAdjustments;)V
 HSPLandroid/view/DisplayAdjustments;->equals(Ljava/lang/Object;)Z
 HSPLandroid/view/DisplayAdjustments;->getCompatibilityInfo()Landroid/content/res/CompatibilityInfo;
@@ -15995,7 +16004,7 @@
 HSPLandroid/view/DisplayCutout$ParcelableWrapper;-><init>(Landroid/view/DisplayCutout;)V
 HSPLandroid/view/DisplayCutout$ParcelableWrapper;->equals(Ljava/lang/Object;)Z
 HSPLandroid/view/DisplayCutout$ParcelableWrapper;->get()Landroid/view/DisplayCutout;
-HSPLandroid/view/DisplayCutout$ParcelableWrapper;->readCutoutFromParcel(Landroid/os/Parcel;)Landroid/view/DisplayCutout;
+HSPLandroid/view/DisplayCutout$ParcelableWrapper;->readCutoutFromParcel(Landroid/os/Parcel;)Landroid/view/DisplayCutout;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/DisplayCutout$ParcelableWrapper;->readFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/view/DisplayCutout$ParcelableWrapper;->set(Landroid/view/DisplayCutout$ParcelableWrapper;)V
 HSPLandroid/view/DisplayCutout$ParcelableWrapper;->set(Landroid/view/DisplayCutout;)V
@@ -16004,7 +16013,7 @@
 HSPLandroid/view/DisplayCutout;-><init>(Landroid/graphics/Rect;Landroid/graphics/Insets;[Landroid/graphics/Rect;Landroid/view/DisplayCutout$CutoutPathParserInfo;Z)V
 HSPLandroid/view/DisplayCutout;-><init>(Landroid/graphics/Rect;Landroid/graphics/Insets;[Landroid/graphics/Rect;Landroid/view/DisplayCutout$CutoutPathParserInfo;ZLandroid/view/DisplayCutout-IA;)V
 HSPLandroid/view/DisplayCutout;->atLeastZero(I)I
-HSPLandroid/view/DisplayCutout;->equals(Ljava/lang/Object;)Z
+HSPLandroid/view/DisplayCutout;->equals(Ljava/lang/Object;)Z+]Landroid/view/DisplayCutout$Bounds;Landroid/view/DisplayCutout$Bounds;]Landroid/graphics/Insets;Landroid/graphics/Insets;]Landroid/view/DisplayCutout$CutoutPathParserInfo;Landroid/view/DisplayCutout$CutoutPathParserInfo;]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/view/DisplayCutout;->getBoundingRectsAll()[Landroid/graphics/Rect;
 HSPLandroid/view/DisplayCutout;->getCopyOrRef(Landroid/graphics/Rect;Z)Landroid/graphics/Rect;
 HSPLandroid/view/DisplayCutout;->getSafeInsetBottom()I
@@ -16029,19 +16038,19 @@
 HSPLandroid/view/DisplayInfo;-><init>(Landroid/os/Parcel;)V
 HSPLandroid/view/DisplayInfo;-><init>(Landroid/os/Parcel;Landroid/view/DisplayInfo-IA;)V
 HSPLandroid/view/DisplayInfo;->copyFrom(Landroid/view/DisplayInfo;)V
-HSPLandroid/view/DisplayInfo;->equals(Landroid/view/DisplayInfo;)Z
+HSPLandroid/view/DisplayInfo;->equals(Landroid/view/DisplayInfo;)Z+]Landroid/view/DisplayInfo;Landroid/view/DisplayInfo;
 HSPLandroid/view/DisplayInfo;->findMode(I)Landroid/view/Display$Mode;
 HSPLandroid/view/DisplayInfo;->flagsToString(I)Ljava/lang/String;
 HSPLandroid/view/DisplayInfo;->getAppMetrics(Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;Landroid/content/res/Configuration;)V
 HSPLandroid/view/DisplayInfo;->getAppMetrics(Landroid/util/DisplayMetrics;Landroid/view/DisplayAdjustments;)V
 HSPLandroid/view/DisplayInfo;->getLogicalMetrics(Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;Landroid/content/res/Configuration;)V
 HSPLandroid/view/DisplayInfo;->getMaxBoundsMetrics(Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;Landroid/content/res/Configuration;)V
-HSPLandroid/view/DisplayInfo;->getMetricsWithSize(Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;Landroid/content/res/Configuration;II)V
+HSPLandroid/view/DisplayInfo;->getMetricsWithSize(Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;Landroid/content/res/Configuration;II)V+]Landroid/content/res/CompatibilityInfo;Landroid/content/res/CompatibilityInfo$1;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HSPLandroid/view/DisplayInfo;->getMode()Landroid/view/Display$Mode;
 HSPLandroid/view/DisplayInfo;->getRefreshRate()F
 HSPLandroid/view/DisplayInfo;->hasAccess(I)Z
 HSPLandroid/view/DisplayInfo;->isWideColorGamut()Z
-HSPLandroid/view/DisplayInfo;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/view/DisplayInfo;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/view/Display$Mode$1;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/DisplayInfo;->toString()Ljava/lang/String;
 HSPLandroid/view/DisplayInfo;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/view/FocusFinder$1;->initialValue()Landroid/view/FocusFinder;
@@ -16050,7 +16059,7 @@
 HSPLandroid/view/FocusFinder$FocusSorter$$ExternalSyntheticLambda1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLandroid/view/FocusFinder$FocusSorter;->lambda$new$0$android-view-FocusFinder$FocusSorter(Landroid/view/View;Landroid/view/View;)I+]Ljava/util/HashMap;Ljava/util/HashMap;
 HSPLandroid/view/FocusFinder$FocusSorter;->lambda$new$1$android-view-FocusFinder$FocusSorter(Landroid/view/View;Landroid/view/View;)I+]Ljava/util/HashMap;Ljava/util/HashMap;
-HSPLandroid/view/FocusFinder$FocusSorter;->sort([Landroid/view/View;IILandroid/view/ViewGroup;Z)V
+HSPLandroid/view/FocusFinder$FocusSorter;->sort([Landroid/view/View;IILandroid/view/ViewGroup;Z)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/FocusFinder$UserSpecifiedFocusComparator;-><init>(Landroid/view/FocusFinder$UserSpecifiedFocusComparator$NextFocusGetter;)V
 HSPLandroid/view/FocusFinder;-><init>()V
 HSPLandroid/view/FocusFinder;->findNextFocus(Landroid/view/ViewGroup;Landroid/view/View;I)Landroid/view/View;
@@ -16059,14 +16068,14 @@
 HSPLandroid/view/FocusFinder;->findNextFocusInAbsoluteDirection(Ljava/util/ArrayList;Landroid/view/ViewGroup;Landroid/view/View;Landroid/graphics/Rect;I)Landroid/view/View;
 HSPLandroid/view/FocusFinder;->findNextUserSpecifiedFocus(Landroid/view/ViewGroup;Landroid/view/View;I)Landroid/view/View;
 HSPLandroid/view/FocusFinder;->getEffectiveRoot(Landroid/view/ViewGroup;Landroid/view/View;)Landroid/view/ViewGroup;
-HSPLandroid/view/FocusFinder;->getInstance()Landroid/view/FocusFinder;
+HSPLandroid/view/FocusFinder;->getInstance()Landroid/view/FocusFinder;+]Ljava/lang/ThreadLocal;Landroid/view/FocusFinder$1;
 HSPLandroid/view/FocusFinder;->isBetterCandidate(ILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
 HSPLandroid/view/FocusFinder;->isCandidate(Landroid/graphics/Rect;Landroid/graphics/Rect;I)Z
 HSPLandroid/view/FrameMetrics;-><init>()V
 HSPLandroid/view/FrameMetrics;->getMetric(I)J
 HSPLandroid/view/FrameMetricsObserver;-><init>(Landroid/view/Window;Landroid/os/Handler;Landroid/view/Window$OnFrameMetricsAvailableListener;)V
 HSPLandroid/view/FrameMetricsObserver;->getRendererObserver()Landroid/graphics/HardwareRendererObserver;
-HSPLandroid/view/FrameMetricsObserver;->onFrameMetricsAvailable(I)V
+HSPLandroid/view/FrameMetricsObserver;->onFrameMetricsAvailable(I)V+]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
 HSPLandroid/view/GestureDetector$GestureHandler;-><init>(Landroid/view/GestureDetector;)V
 HSPLandroid/view/GestureDetector$GestureHandler;-><init>(Landroid/view/GestureDetector;Landroid/os/Handler;)V
 HSPLandroid/view/GestureDetector$GestureHandler;->handleMessage(Landroid/os/Message;)V
@@ -16083,9 +16092,9 @@
 HSPLandroid/view/GestureDetector;-><init>(Landroid/content/Context;Landroid/view/GestureDetector$OnGestureListener;Landroid/os/Handler;)V
 HSPLandroid/view/GestureDetector;->cancel()V
 HSPLandroid/view/GestureDetector;->cancelTaps()V
-HSPLandroid/view/GestureDetector;->init(Landroid/content/Context;)V
+HSPLandroid/view/GestureDetector;->init(Landroid/content/Context;)V+]Landroid/view/ViewConfiguration;Landroid/view/ViewConfiguration;
 HSPLandroid/view/GestureDetector;->isConsideredDoubleTap(Landroid/view/MotionEvent;Landroid/view/MotionEvent;Landroid/view/MotionEvent;)Z
-HSPLandroid/view/GestureDetector;->onTouchEvent(Landroid/view/MotionEvent;)Z
+HSPLandroid/view/GestureDetector;->onTouchEvent(Landroid/view/MotionEvent;)Z+]Landroid/view/VelocityTracker;Landroid/view/VelocityTracker;]Landroid/os/Handler;Landroid/view/GestureDetector$GestureHandler;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/GestureDetector;->recordGestureClassification(I)V
 HSPLandroid/view/GestureDetector;->setContextClickListener(Landroid/view/GestureDetector$OnContextClickListener;)V
 HSPLandroid/view/GestureDetector;->setIsLongpressEnabled(Z)V
@@ -16100,7 +16109,7 @@
 HSPLandroid/view/HandlerActionQueue$HandlerAction;-><init>(Ljava/lang/Runnable;J)V
 HSPLandroid/view/HandlerActionQueue$HandlerAction;->matches(Ljava/lang/Runnable;)Z
 HSPLandroid/view/HandlerActionQueue;-><init>()V
-HSPLandroid/view/HandlerActionQueue;->executeActions(Landroid/os/Handler;)V
+HSPLandroid/view/HandlerActionQueue;->executeActions(Landroid/os/Handler;)V+]Landroid/os/Handler;Landroid/view/ViewRootImpl$ViewRootHandler;
 HSPLandroid/view/HandlerActionQueue;->post(Ljava/lang/Runnable;)V
 HSPLandroid/view/HandlerActionQueue;->postDelayed(Ljava/lang/Runnable;J)V
 HSPLandroid/view/HandlerActionQueue;->removeCallbacks(Ljava/lang/Runnable;)V
@@ -16162,8 +16171,8 @@
 HSPLandroid/view/IWindowSessionCallback$Stub;-><init>()V
 HSPLandroid/view/IWindowSessionCallback$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/view/ImeFocusController;-><init>(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ImeFocusController;->checkFocus(ZZ)Z
-HSPLandroid/view/ImeFocusController;->getImmDelegate()Landroid/view/ImeFocusController$InputMethodManagerDelegate;
+HSPLandroid/view/ImeFocusController;->checkFocus(ZZ)Z+]Landroid/view/ImeFocusController$InputMethodManagerDelegate;Landroid/view/inputmethod/InputMethodManager$DelegateImpl;
+HSPLandroid/view/ImeFocusController;->getImmDelegate()Landroid/view/ImeFocusController$InputMethodManagerDelegate;+]Landroid/content/Context;Landroid/view/ContextThemeWrapper;,Lcom/android/internal/policy/DecorContext;]Landroid/view/inputmethod/InputMethodManager;Landroid/view/inputmethod/InputMethodManager;
 HSPLandroid/view/ImeFocusController;->getServedView()Landroid/view/View;
 HSPLandroid/view/ImeFocusController;->hasImeFocus()Z
 HSPLandroid/view/ImeFocusController;->isInLocalFocusMode(Landroid/view/WindowManager$LayoutParams;)Z
@@ -16171,8 +16180,8 @@
 HSPLandroid/view/ImeFocusController;->onPostWindowFocus(Landroid/view/View;ZLandroid/view/WindowManager$LayoutParams;)V
 HSPLandroid/view/ImeFocusController;->onPreWindowFocus(ZLandroid/view/WindowManager$LayoutParams;)V
 HSPLandroid/view/ImeFocusController;->onProcessImeInputStage(Ljava/lang/Object;Landroid/view/InputEvent;Landroid/view/WindowManager$LayoutParams;Landroid/view/inputmethod/InputMethodManager$FinishedInputEventCallback;)I
-HSPLandroid/view/ImeFocusController;->onTraversal(ZLandroid/view/WindowManager$LayoutParams;)V
-HSPLandroid/view/ImeFocusController;->onViewDetachedFromWindow(Landroid/view/View;)V
+HSPLandroid/view/ImeFocusController;->onTraversal(ZLandroid/view/WindowManager$LayoutParams;)V+]Landroid/view/ImeFocusController;Landroid/view/ImeFocusController;
+HSPLandroid/view/ImeFocusController;->onViewDetachedFromWindow(Landroid/view/View;)V+]Landroid/view/ImeFocusController$InputMethodManagerDelegate;Landroid/view/inputmethod/InputMethodManager$DelegateImpl;]Landroid/view/View;missing_types]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
 HSPLandroid/view/ImeFocusController;->onViewFocusChanged(Landroid/view/View;Z)V
 HSPLandroid/view/ImeFocusController;->onWindowDismissed()V
 HSPLandroid/view/ImeFocusController;->setNextServedView(Landroid/view/View;)V
@@ -16210,13 +16219,13 @@
 HSPLandroid/view/InputDevice;->isVirtual()Z
 HSPLandroid/view/InputEvent;-><init>()V
 HSPLandroid/view/InputEvent;->getSequenceNumber()I
-HSPLandroid/view/InputEvent;->isFromSource(I)Z
+HSPLandroid/view/InputEvent;->isFromSource(I)Z+]Landroid/view/InputEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/InputEvent;->prepareForReuse()V+]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
 HSPLandroid/view/InputEvent;->recycle()V
 HSPLandroid/view/InputEvent;->recycleIfNeededAfterDispatch()V+]Landroid/view/InputEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/InputEventAssigner;-><init>()V
 HSPLandroid/view/InputEventAssigner;->notifyFrameProcessed()V
-HSPLandroid/view/InputEventAssigner;->processEvent(Landroid/view/InputEvent;)I
+HSPLandroid/view/InputEventAssigner;->processEvent(Landroid/view/InputEvent;)I+]Landroid/view/MotionEvent;Landroid/view/MotionEvent;]Landroid/view/InputEvent;Landroid/view/KeyEvent;,Landroid/view/MotionEvent;
 HSPLandroid/view/InputEventCompatProcessor;-><init>(Landroid/content/Context;)V
 HSPLandroid/view/InputEventCompatProcessor;->processInputEventForCompatibility(Landroid/view/InputEvent;)Ljava/util/List;
 HSPLandroid/view/InputEventConsistencyVerifier;->isInstrumentationEnabled()Z
@@ -16241,7 +16250,7 @@
 HSPLandroid/view/InsetsAnimationControlImpl$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
 HSPLandroid/view/InsetsAnimationControlImpl;-><init>(Landroid/util/SparseArray;Landroid/graphics/Rect;Landroid/view/InsetsState;Landroid/view/WindowInsetsAnimationControlListener;ILandroid/view/InsetsAnimationControlCallbacks;JLandroid/view/animation/Interpolator;IILandroid/content/res/CompatibilityInfo$Translator;)V+]Landroid/view/InsetsAnimationControlCallbacks;Landroid/view/InsetsAnimationThreadControlRunner$1;]Landroid/view/InsetsAnimationControlImpl;Landroid/view/InsetsAnimationControlImpl;]Landroid/view/WindowInsetsAnimation;Landroid/view/WindowInsetsAnimation;
 HSPLandroid/view/InsetsAnimationControlImpl;->addTranslationToMatrix(IILandroid/graphics/Matrix;Landroid/graphics/Rect;)V
-HSPLandroid/view/InsetsAnimationControlImpl;->applyChangeInsets(Landroid/view/InsetsState;)Z+]Landroid/view/InsetsAnimationControlCallbacks;Landroid/view/InsetsAnimationThreadControlRunner$1;]Landroid/view/WindowInsetsAnimation;Landroid/view/WindowInsetsAnimation;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/view/InsetsAnimationControlImpl;->applyChangeInsets(Landroid/view/InsetsState;)Z+]Landroid/view/InsetsAnimationControlCallbacks;Landroid/view/InsetsAnimationThreadControlRunner$1;,Landroid/view/InsetsController;]Landroid/view/WindowInsetsAnimation;Landroid/view/WindowInsetsAnimation;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/InsetsAnimationControlImpl;->buildSideControlsMap(Landroid/util/SparseSetArray;Landroid/util/SparseArray;)V
 HSPLandroid/view/InsetsAnimationControlImpl;->calculateInsets(Landroid/view/InsetsState;Landroid/graphics/Rect;Landroid/util/SparseArray;ZLandroid/util/SparseIntArray;)Landroid/graphics/Insets;
 HSPLandroid/view/InsetsAnimationControlImpl;->calculateInsets(Landroid/view/InsetsState;Landroid/util/SparseArray;Z)Landroid/graphics/Insets;
@@ -16366,13 +16375,13 @@
 HSPLandroid/view/InsetsController;->startResizingAnimationIfNeeded(Landroid/view/InsetsState;)V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/view/InsetsAnimationControlRunner;Landroid/view/InsetsResizeAnimationRunner;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/InsetsController;->updateCompatSysUiVisibility(IZZ)V
 HSPLandroid/view/InsetsController;->updateDisabledUserAnimationTypes(I)V
-HSPLandroid/view/InsetsController;->updateRequestedVisibilities()V+]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLandroid/view/InsetsController;->updateRequestedVisibilities()V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/view/InsetsSourceConsumer;Landroid/view/InsetsSourceConsumer;,Landroid/view/ImeInsetsSourceConsumer;]Landroid/view/InsetsController$Host;Landroid/view/ViewRootInsetsControllerHost;]Landroid/view/InsetsVisibilities;Landroid/view/InsetsVisibilities;
 HSPLandroid/view/InsetsController;->updateState(Landroid/view/InsetsState;)V
 HSPLandroid/view/InsetsFlags;-><init>()V
 HSPLandroid/view/InsetsSource$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/InsetsSource;
 HSPLandroid/view/InsetsSource$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/view/InsetsSource;-><init>(I)V
-HSPLandroid/view/InsetsSource;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/view/InsetsSource;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcelable$Creator;Landroid/graphics/Rect$1;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/InsetsSource;-><init>(Landroid/view/InsetsSource;)V
 HSPLandroid/view/InsetsSource;->calculateInsets(Landroid/graphics/Rect;Landroid/graphics/Rect;Z)Landroid/graphics/Insets;+]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/view/InsetsSource;->calculateInsets(Landroid/graphics/Rect;Z)Landroid/graphics/Insets;
@@ -16405,15 +16414,16 @@
 HSPLandroid/view/InsetsSourceConsumer;->onWindowFocusLost()V
 HSPLandroid/view/InsetsSourceConsumer;->removeSurface()V
 HSPLandroid/view/InsetsSourceConsumer;->requestShow(Z)I
-HSPLandroid/view/InsetsSourceConsumer;->setControl(Landroid/view/InsetsSourceControl;[I[I)Z+]Landroid/view/InsetsController$Host;Landroid/view/ViewRootInsetsControllerHost;]Lcom/android/internal/inputmethod/ImeTracing;Lcom/android/internal/inputmethod/ImeTracingClientImpl;]Landroid/view/InsetsController;Landroid/view/InsetsController;]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/InsetsSourceConsumer;Landroid/view/InsetsSourceConsumer;,Landroid/view/ImeInsetsSourceConsumer;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/graphics/Insets;Landroid/graphics/Insets;]Landroid/view/InsetsSourceControl;Landroid/view/InsetsSourceControl;
+HSPLandroid/view/InsetsSourceConsumer;->setControl(Landroid/view/InsetsSourceControl;[I[I)Z+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/InsetsSourceConsumer;Landroid/view/InsetsSourceConsumer;,Landroid/view/ImeInsetsSourceConsumer;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/graphics/Insets;Landroid/graphics/Insets;]Landroid/view/InsetsController$Host;Landroid/view/ViewRootInsetsControllerHost;]Landroid/view/InsetsSourceControl;Landroid/view/InsetsSourceControl;]Lcom/android/internal/inputmethod/ImeTracing;Lcom/android/internal/inputmethod/ImeTracingClientImpl;]Landroid/view/InsetsController;Landroid/view/InsetsController;
 HSPLandroid/view/InsetsSourceConsumer;->setRequestedVisible(Z)V
 HSPLandroid/view/InsetsSourceConsumer;->show(Z)V
+HSPLandroid/view/InsetsSourceConsumer;->updateCompatSysUiVisibility(ZLandroid/view/InsetsSource;Z)V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/view/InsetsController;Landroid/view/InsetsController;
 HSPLandroid/view/InsetsSourceConsumer;->updateSource(Landroid/view/InsetsSource;I)V
 HSPLandroid/view/InsetsSourceControl$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/InsetsSourceControl;
 HSPLandroid/view/InsetsSourceControl$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/view/InsetsSourceControl$1;->newArray(I)[Landroid/view/InsetsSourceControl;
 HSPLandroid/view/InsetsSourceControl$1;->newArray(I)[Ljava/lang/Object;
-HSPLandroid/view/InsetsSourceControl;-><init>(Landroid/os/Parcel;)V
+HSPLandroid/view/InsetsSourceControl;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/InsetsSourceControl;-><init>(Landroid/view/InsetsSourceControl;)V
 HSPLandroid/view/InsetsSourceControl;->equals(Ljava/lang/Object;)Z
 HSPLandroid/view/InsetsSourceControl;->getAndClearSkipAnimationOnce()Z
@@ -16428,11 +16438,11 @@
 HSPLandroid/view/InsetsState$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/view/InsetsState;-><init>()V
 HSPLandroid/view/InsetsState;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/view/InsetsState;-><init>(Landroid/view/InsetsState;Z)V
+HSPLandroid/view/InsetsState;-><init>(Landroid/view/InsetsState;Z)V+]Landroid/view/InsetsState;Landroid/view/InsetsState;
 HSPLandroid/view/InsetsState;->addSource(Landroid/view/InsetsSource;)V
 HSPLandroid/view/InsetsState;->calculateInsets(Landroid/graphics/Rect;ILandroid/view/InsetsVisibilities;)Landroid/graphics/Insets;+]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/view/InsetsVisibilities;Landroid/view/InsetsVisibilities;
 HSPLandroid/view/InsetsState;->calculateInsets(Landroid/graphics/Rect;IZ)Landroid/graphics/Insets;+]Landroid/view/InsetsSource;Landroid/view/InsetsSource;
-HSPLandroid/view/InsetsState;->calculateInsets(Landroid/graphics/Rect;Landroid/view/InsetsState;ZZIIIIILandroid/util/SparseIntArray;)Landroid/view/WindowInsets;
+HSPLandroid/view/InsetsState;->calculateInsets(Landroid/graphics/Rect;Landroid/view/InsetsState;ZZIIIIILandroid/util/SparseIntArray;)Landroid/view/WindowInsets;+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;
 HSPLandroid/view/InsetsState;->calculateRelativeCutout(Landroid/graphics/Rect;)Landroid/view/DisplayCutout;
 HSPLandroid/view/InsetsState;->calculateRelativePrivacyIndicatorBounds(Landroid/graphics/Rect;)Landroid/view/PrivacyIndicatorBounds;
 HSPLandroid/view/InsetsState;->calculateRelativeRoundedCorners(Landroid/graphics/Rect;)Landroid/view/RoundedCorners;
@@ -16453,11 +16463,11 @@
 HSPLandroid/view/InsetsState;->getSourceOrDefaultVisibility(I)Z
 HSPLandroid/view/InsetsState;->peekSource(I)Landroid/view/InsetsSource;
 HSPLandroid/view/InsetsState;->processSource(Landroid/view/InsetsSource;Landroid/graphics/Rect;Z[Landroid/graphics/Insets;Landroid/util/SparseIntArray;[Z)V
-HSPLandroid/view/InsetsState;->processSourceAsPublicType(Landroid/view/InsetsSource;[Landroid/graphics/Insets;Landroid/util/SparseIntArray;[ZLandroid/graphics/Insets;I)V
-HSPLandroid/view/InsetsState;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/view/InsetsState;->processSourceAsPublicType(Landroid/view/InsetsSource;[Landroid/graphics/Insets;Landroid/util/SparseIntArray;[ZLandroid/graphics/Insets;I)V+]Landroid/view/InsetsSource;Landroid/view/InsetsSource;
+HSPLandroid/view/InsetsState;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/DisplayCutout$ParcelableWrapper;Landroid/view/DisplayCutout$ParcelableWrapper;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/InsetsState;->removeSource(I)Z
 HSPLandroid/view/InsetsState;->set(Landroid/view/InsetsState;I)V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/view/DisplayCutout$ParcelableWrapper;Landroid/view/DisplayCutout$ParcelableWrapper;
-HSPLandroid/view/InsetsState;->set(Landroid/view/InsetsState;Z)V
+HSPLandroid/view/InsetsState;->set(Landroid/view/InsetsState;Z)V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/DisplayCutout$ParcelableWrapper;Landroid/view/DisplayCutout$ParcelableWrapper;
 HSPLandroid/view/InsetsState;->setDisplayCutout(Landroid/view/DisplayCutout;)V
 HSPLandroid/view/InsetsState;->setDisplayFrame(Landroid/graphics/Rect;)V
 HSPLandroid/view/InsetsState;->setPrivacyIndicatorBounds(Landroid/view/PrivacyIndicatorBounds;)V
@@ -16518,34 +16528,34 @@
 HSPLandroid/view/LayoutInflater$FactoryMerger;-><init>(Landroid/view/LayoutInflater$Factory;Landroid/view/LayoutInflater$Factory2;Landroid/view/LayoutInflater$Factory;Landroid/view/LayoutInflater$Factory2;)V
 HSPLandroid/view/LayoutInflater$FactoryMerger;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;
 HSPLandroid/view/LayoutInflater;-><init>(Landroid/content/Context;)V
-HSPLandroid/view/LayoutInflater;-><init>(Landroid/view/LayoutInflater;Landroid/content/Context;)V
+HSPLandroid/view/LayoutInflater;-><init>(Landroid/view/LayoutInflater;Landroid/content/Context;)V+]Landroid/view/LayoutInflater;Lcom/android/internal/policy/PhoneLayoutInflater;
 HSPLandroid/view/LayoutInflater;->advanceToRootNode(Lorg/xmlpull/v1/XmlPullParser;)V
 HSPLandroid/view/LayoutInflater;->consumeChildElements(Lorg/xmlpull/v1/XmlPullParser;)V
-HSPLandroid/view/LayoutInflater;->createView(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/LayoutInflater;missing_types]Landroid/view/ViewStub;Landroid/view/ViewStub;]Ljava/lang/Class;Ljava/lang/Class;]Ljava/lang/reflect/Constructor;Ljava/lang/reflect/Constructor;
+HSPLandroid/view/LayoutInflater;->createView(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/lang/reflect/Constructor;Ljava/lang/reflect/Constructor;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/LayoutInflater;missing_types]Landroid/view/ViewStub;Landroid/view/ViewStub;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/content/Context;missing_types
 HSPLandroid/view/LayoutInflater;->createView(Ljava/lang/String;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;+]Landroid/view/LayoutInflater;Lcom/android/internal/policy/PhoneLayoutInflater;
-HSPLandroid/view/LayoutInflater;->createViewFromTag(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;
-HSPLandroid/view/LayoutInflater;->createViewFromTag(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;Z)Landroid/view/View;+]Landroid/view/LayoutInflater;Lcom/android/internal/policy/PhoneLayoutInflater;]Landroid/content/Context;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLandroid/view/LayoutInflater;->createViewFromTag(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;+]Landroid/view/LayoutInflater;Lcom/android/internal/policy/PhoneLayoutInflater;
+HSPLandroid/view/LayoutInflater;->createViewFromTag(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;Z)Landroid/view/View;+]Landroid/view/LayoutInflater;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/Context;missing_types]Landroid/util/AttributeSet;Landroid/content/res/XmlBlock$Parser;
 HSPLandroid/view/LayoutInflater;->from(Landroid/content/Context;)Landroid/view/LayoutInflater;
 HSPLandroid/view/LayoutInflater;->getContext()Landroid/content/Context;
 HSPLandroid/view/LayoutInflater;->getFactory()Landroid/view/LayoutInflater$Factory;
 HSPLandroid/view/LayoutInflater;->getFactory2()Landroid/view/LayoutInflater$Factory2;
 HSPLandroid/view/LayoutInflater;->inflate(ILandroid/view/ViewGroup;)Landroid/view/View;
-HSPLandroid/view/LayoutInflater;->inflate(ILandroid/view/ViewGroup;Z)Landroid/view/View;
-HSPLandroid/view/LayoutInflater;->inflate(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/ViewGroup;Z)Landroid/view/View;
+HSPLandroid/view/LayoutInflater;->inflate(ILandroid/view/ViewGroup;Z)Landroid/view/View;+]Landroid/view/LayoutInflater;Lcom/android/internal/policy/PhoneLayoutInflater;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/res/XmlResourceParser;Landroid/content/res/XmlBlock$Parser;
+HSPLandroid/view/LayoutInflater;->inflate(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/ViewGroup;Z)Landroid/view/View;+]Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/XmlBlock$Parser;]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Landroid/view/LayoutInflater;missing_types
 HSPLandroid/view/LayoutInflater;->initPrecompiledViews()V
 HSPLandroid/view/LayoutInflater;->initPrecompiledViews(Z)V
 HSPLandroid/view/LayoutInflater;->onCreateView(Landroid/content/Context;Landroid/view/View;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;
 HSPLandroid/view/LayoutInflater;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;
 HSPLandroid/view/LayoutInflater;->onCreateView(Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;
-HSPLandroid/view/LayoutInflater;->parseInclude(Lorg/xmlpull/v1/XmlPullParser;Landroid/content/Context;Landroid/view/View;Landroid/util/AttributeSet;)V
-HSPLandroid/view/LayoutInflater;->rInflate(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/View;Landroid/content/Context;Landroid/util/AttributeSet;Z)V+]Landroid/view/View;missing_types]Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/XmlBlock$Parser;]Landroid/view/ViewGroup;missing_types]Landroid/view/LayoutInflater;missing_types
-HSPLandroid/view/LayoutInflater;->rInflateChildren(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/View;Landroid/util/AttributeSet;Z)V
+HSPLandroid/view/LayoutInflater;->parseInclude(Lorg/xmlpull/v1/XmlPullParser;Landroid/content/Context;Landroid/view/View;Landroid/util/AttributeSet;)V+]Landroid/util/AttributeSet;Landroid/content/res/XmlBlock$Parser;]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Landroid/content/res/Resources$Theme;Landroid/content/res/Resources$Theme;]Landroid/view/LayoutInflater;Lcom/android/internal/policy/PhoneLayoutInflater;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/Context;Landroid/view/ContextThemeWrapper;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/res/XmlResourceParser;Landroid/content/res/XmlBlock$Parser;
+HSPLandroid/view/LayoutInflater;->rInflate(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/View;Landroid/content/Context;Landroid/util/AttributeSet;Z)V+]Landroid/view/View;missing_types]Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/XmlBlock$Parser;]Landroid/view/ViewGroup;megamorphic_types]Landroid/view/LayoutInflater;missing_types
+HSPLandroid/view/LayoutInflater;->rInflateChildren(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/View;Landroid/util/AttributeSet;Z)V+]Landroid/view/View;missing_types]Landroid/view/LayoutInflater;missing_types
 HSPLandroid/view/LayoutInflater;->setFactory2(Landroid/view/LayoutInflater$Factory2;)V
 HSPLandroid/view/LayoutInflater;->setFilter(Landroid/view/LayoutInflater$Filter;)V
 HSPLandroid/view/LayoutInflater;->setPrivateFactory(Landroid/view/LayoutInflater$Factory2;)V
-HSPLandroid/view/LayoutInflater;->tryCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;
+HSPLandroid/view/LayoutInflater;->tryCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;+]Landroid/view/LayoutInflater$Factory2;missing_types
 HSPLandroid/view/LayoutInflater;->tryInflatePrecompiled(ILandroid/content/res/Resources;Landroid/view/ViewGroup;Z)Landroid/view/View;
-HSPLandroid/view/LayoutInflater;->verifyClassLoader(Ljava/lang/reflect/Constructor;)Z
+HSPLandroid/view/LayoutInflater;->verifyClassLoader(Ljava/lang/reflect/Constructor;)Z+]Landroid/content/Context;missing_types]Ljava/lang/Class;Ljava/lang/Class;]Ljava/lang/reflect/Constructor;Ljava/lang/reflect/Constructor;
 HSPLandroid/view/MenuInflater;-><init>(Landroid/content/Context;)V
 HSPLandroid/view/MotionEvent$PointerCoords;-><init>()V
 HSPLandroid/view/MotionEvent$PointerProperties;-><init>()V
@@ -16587,7 +16597,7 @@
 HSPLandroid/view/MotionEvent;->getY()F
 HSPLandroid/view/MotionEvent;->getY(I)F
 HSPLandroid/view/MotionEvent;->initialize(IIIIIIIIIFFFFJJI[Landroid/view/MotionEvent$PointerProperties;[Landroid/view/MotionEvent$PointerCoords;)Z
-HSPLandroid/view/MotionEvent;->isTargetAccessibilityFocus()Z
+HSPLandroid/view/MotionEvent;->isTargetAccessibilityFocus()Z+]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/MotionEvent;->isTouchEvent()Z
 HSPLandroid/view/MotionEvent;->obtain()Landroid/view/MotionEvent;+]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/MotionEvent;->obtain(JJIFFFFIFFII)Landroid/view/MotionEvent;
@@ -16598,7 +16608,7 @@
 HSPLandroid/view/MotionEvent;->recycle()V
 HSPLandroid/view/MotionEvent;->setAction(I)V
 HSPLandroid/view/MotionEvent;->setLocation(FF)V
-HSPLandroid/view/MotionEvent;->setTargetAccessibilityFocus(Z)V
+HSPLandroid/view/MotionEvent;->setTargetAccessibilityFocus(Z)V+]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/MotionEvent;->split(I)Landroid/view/MotionEvent;
 HSPLandroid/view/MotionEvent;->transform(Landroid/graphics/Matrix;)V
 HSPLandroid/view/MotionEvent;->updateCursorPosition()V
@@ -16640,7 +16650,7 @@
 HSPLandroid/view/RoundedCorner;-><clinit>()V
 HSPLandroid/view/RoundedCorner;-><init>(I)V
 HSPLandroid/view/RoundedCorner;-><init>(IIII)V
-HSPLandroid/view/RoundedCorner;->equals(Ljava/lang/Object;)Z
+HSPLandroid/view/RoundedCorner;->equals(Ljava/lang/Object;)Z+]Landroid/graphics/Point;Landroid/graphics/Point;
 HSPLandroid/view/RoundedCorner;->getCenter()Landroid/graphics/Point;
 HSPLandroid/view/RoundedCorner;->getRadius()I
 HSPLandroid/view/RoundedCorner;->isEmpty()Z
@@ -16749,16 +16759,11 @@
 HSPLandroid/view/SurfaceSession;->finalize()V
 HSPLandroid/view/SurfaceSession;->kill()V
 HSPLandroid/view/SurfaceView$$ExternalSyntheticLambda1;-><init>(Landroid/view/SurfaceView;)V
-HSPLandroid/view/SurfaceView$$ExternalSyntheticLambda1;->onScrollChanged()V+]Landroid/view/SurfaceView;missing_types
-HSPLandroid/view/SurfaceView$$ExternalSyntheticLambda2;->onPreDraw()Z
-HSPLandroid/view/SurfaceView$$ExternalSyntheticLambda5;->run()V
-HSPLandroid/view/SurfaceView$$ExternalSyntheticLambda6;-><init>(Landroid/view/SurfaceView;)V
-HSPLandroid/view/SurfaceView$$ExternalSyntheticLambda6;->run()V
 HSPLandroid/view/SurfaceView$1;-><init>(Landroid/view/SurfaceView;)V
 HSPLandroid/view/SurfaceView$1;->addCallback(Landroid/view/SurfaceHolder$Callback;)V
 HSPLandroid/view/SurfaceView$1;->getSurface()Landroid/view/Surface;
 HSPLandroid/view/SurfaceView$SurfaceViewPositionUpdateListener;-><init>(Landroid/view/SurfaceView;II)V
-HSPLandroid/view/SurfaceView$SurfaceViewPositionUpdateListener;->positionChanged(JIIII)V+]Landroid/graphics/Point;Landroid/graphics/Point;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/SurfaceView;missing_types
+HSPLandroid/view/SurfaceView$SurfaceViewPositionUpdateListener;->positionChanged(JIIII)V+]Landroid/view/SurfaceView;missing_types]Landroid/graphics/Point;Landroid/graphics/Point;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/view/SurfaceView$SurfaceViewPositionUpdateListener;->positionLost(J)V
 HSPLandroid/view/SurfaceView;->$r8$lambda$PgOqH-1CHTj5xz7zBHK88fj8o94(Landroid/view/SurfaceView;)V
 HSPLandroid/view/SurfaceView;->$r8$lambda$st27mCkd9jfJkTrN_P3qIGKX6NY(Landroid/view/SurfaceView;)V
@@ -16789,7 +16794,7 @@
 HSPLandroid/view/SurfaceView;->onWindowVisibilityChanged(I)V
 HSPLandroid/view/SurfaceView;->performDrawFinished()V
 HSPLandroid/view/SurfaceView;->performSurfaceTransaction(Landroid/view/ViewRootImpl;Landroid/content/res/CompatibilityInfo$Translator;ZZZLandroid/view/SurfaceControl$Transaction;)Z+]Landroid/view/SurfaceView;missing_types]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Ljava/util/concurrent/locks/ReentrantLock;Ljava/util/concurrent/locks/ReentrantLock;
-HSPLandroid/view/SurfaceView;->releaseSurfaces(Z)V+]Landroid/view/Surface;Landroid/view/Surface;]Landroid/graphics/BLASTBufferQueue;Landroid/graphics/BLASTBufferQueue;]Ljava/util/concurrent/locks/ReentrantLock;Ljava/util/concurrent/locks/ReentrantLock;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;
+HSPLandroid/view/SurfaceView;->releaseSurfaces(Z)V+]Landroid/view/Surface;Landroid/view/Surface;]Ljava/util/concurrent/locks/ReentrantLock;Ljava/util/concurrent/locks/ReentrantLock;]Landroid/graphics/BLASTBufferQueue;Landroid/graphics/BLASTBufferQueue;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;
 HSPLandroid/view/SurfaceView;->replacePositionUpdateListener(II)V+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/SurfaceView;->setFrame(IIII)Z
 HSPLandroid/view/SurfaceView;->setVisibility(I)V
@@ -16799,9 +16804,9 @@
 HSPLandroid/view/SurfaceView;->surfaceDestroyed()V
 HSPLandroid/view/SurfaceView;->updateBackgroundColor(Landroid/view/SurfaceControl$Transaction;)Landroid/view/SurfaceControl$Transaction;
 HSPLandroid/view/SurfaceView;->updateBackgroundVisibility(Landroid/view/SurfaceControl$Transaction;)V
-HSPLandroid/view/SurfaceView;->updateEmbeddedAccessibilityMatrix(Z)V+]Landroid/view/SurfaceView;Landroid/widget/inline/InlineContentView$4;,Landroid/view/SurfaceView;]Landroid/view/RemoteAccessibilityController;Landroid/view/RemoteAccessibilityController;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/graphics/Rect;Landroid/graphics/Rect;
+HSPLandroid/view/SurfaceView;->updateEmbeddedAccessibilityMatrix(Z)V+]Landroid/view/SurfaceView;Landroid/view/SurfaceView;,Landroid/widget/inline/InlineContentView$4;]Landroid/view/RemoteAccessibilityController;Landroid/view/RemoteAccessibilityController;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/view/SurfaceView;->updateRelativeZ(Landroid/view/SurfaceControl$Transaction;)V
-HSPLandroid/view/SurfaceView;->updateSurface()V
+HSPLandroid/view/SurfaceView;->updateSurface()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/Surface;Landroid/view/Surface;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/view/SyncRtSurfaceTransactionApplier$SurfaceParams$Builder;-><init>(Landroid/view/SurfaceControl;)V
 HSPLandroid/view/SyncRtSurfaceTransactionApplier$SurfaceParams$Builder;->build()Landroid/view/SyncRtSurfaceTransactionApplier$SurfaceParams;
 HSPLandroid/view/SyncRtSurfaceTransactionApplier$SurfaceParams$Builder;->withAlpha(F)Landroid/view/SyncRtSurfaceTransactionApplier$SurfaceParams$Builder;
@@ -16810,10 +16815,10 @@
 HSPLandroid/view/SyncRtSurfaceTransactionApplier$SurfaceParams;-><init>(Landroid/view/SurfaceControl;IFLandroid/graphics/Matrix;Landroid/graphics/Rect;IFIZLandroid/view/SurfaceControl$Transaction;)V
 HSPLandroid/view/SyncRtSurfaceTransactionApplier;->applyParams(Landroid/view/SurfaceControl$Transaction;Landroid/view/SyncRtSurfaceTransactionApplier$SurfaceParams;[F)V+]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;
 HSPLandroid/view/TextureView;-><init>(Landroid/content/Context;)V
-HSPLandroid/view/TextureView;->applyUpdate()V
+HSPLandroid/view/TextureView;->applyUpdate()V+]Landroid/graphics/TextureLayer;Landroid/graphics/TextureLayer;]Landroid/view/TextureView;Landroid/view/TextureView;
 HSPLandroid/view/TextureView;->destroyHardwareLayer()V
 HSPLandroid/view/TextureView;->destroyHardwareResources()V
-HSPLandroid/view/TextureView;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/view/TextureView;->draw(Landroid/graphics/Canvas;)V+]Landroid/graphics/TextureLayer;Landroid/graphics/TextureLayer;]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;]Landroid/view/TextureView;Landroid/view/TextureView;
 HSPLandroid/view/TextureView;->getLayerType()I
 HSPLandroid/view/TextureView;->getTextureLayer()Landroid/graphics/TextureLayer;
 HSPLandroid/view/TextureView;->isOpaque()Z
@@ -16865,11 +16870,11 @@
 HSPLandroid/view/ThreadedRenderer;->setSurfaceControlOpaque(Z)Z
 HSPLandroid/view/ThreadedRenderer;->setup(IILandroid/view/View$AttachInfo;Landroid/graphics/Rect;)V
 HSPLandroid/view/ThreadedRenderer;->updateEnabledState(Landroid/view/Surface;)V
-HSPLandroid/view/ThreadedRenderer;->updateRootDisplayList(Landroid/view/View;Landroid/view/ThreadedRenderer$DrawCallbacks;)V+]Landroid/view/View;Lcom/android/internal/policy/DecorView;]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/view/ThreadedRenderer$DrawCallbacks;Landroid/view/ViewRootImpl;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;
+HSPLandroid/view/ThreadedRenderer;->updateRootDisplayList(Landroid/view/View;Landroid/view/ThreadedRenderer$DrawCallbacks;)V+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/view/View;Lcom/android/internal/policy/DecorView;,Landroid/widget/FrameLayout;,Landroid/widget/PopupWindow$PopupDecorView;]Landroid/view/ThreadedRenderer$DrawCallbacks;Landroid/view/ViewRootImpl;]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;
 HSPLandroid/view/ThreadedRenderer;->updateSurface(Landroid/view/Surface;)V
-HSPLandroid/view/ThreadedRenderer;->updateViewTreeDisplayList(Landroid/view/View;)V+]Landroid/view/View;Lcom/android/internal/policy/DecorView;
-HSPLandroid/view/ThreadedRenderer;->updateWebViewOverlayCallbacks()V+]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/view/ThreadedRenderer$WebViewOverlayProvider;Landroid/view/ThreadedRenderer$WebViewOverlayProvider;
-HSPLandroid/view/TouchDelegate;-><init>(Landroid/graphics/Rect;Landroid/view/View;)V
+HSPLandroid/view/ThreadedRenderer;->updateViewTreeDisplayList(Landroid/view/View;)V+]Landroid/view/View;Lcom/android/internal/policy/DecorView;,Landroid/widget/FrameLayout;,Landroid/widget/PopupWindow$PopupDecorView;
+HSPLandroid/view/ThreadedRenderer;->updateWebViewOverlayCallbacks()V+]Landroid/view/ThreadedRenderer$WebViewOverlayProvider;Landroid/view/ThreadedRenderer$WebViewOverlayProvider;]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;
+HSPLandroid/view/TouchDelegate;-><init>(Landroid/graphics/Rect;Landroid/view/View;)V+]Landroid/view/View;missing_types]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewConfiguration;Landroid/view/ViewConfiguration;
 HSPLandroid/view/VelocityTracker;-><init>(I)V
 HSPLandroid/view/VelocityTracker;->addMovement(Landroid/view/MotionEvent;)V
 HSPLandroid/view/VelocityTracker;->clear()V
@@ -16882,9 +16887,11 @@
 HSPLandroid/view/VelocityTracker;->getYVelocity(I)F
 HSPLandroid/view/VelocityTracker;->obtain()Landroid/view/VelocityTracker;
 HSPLandroid/view/VelocityTracker;->recycle()V
+HSPLandroid/view/View$$ExternalSyntheticLambda12;->get()Ljava/lang/Object;
 HSPLandroid/view/View$$ExternalSyntheticLambda2;-><init>(Landroid/view/View;)V
 HSPLandroid/view/View$$ExternalSyntheticLambda3;->run()V
 HSPLandroid/view/View$$ExternalSyntheticLambda4;-><init>(Landroid/view/View;)V
+HSPLandroid/view/View$$ExternalSyntheticLambda4;->run()V+]Landroid/view/View;missing_types
 HSPLandroid/view/View$$ExternalSyntheticLambda5;->run()V+]Landroid/view/View;missing_types
 HSPLandroid/view/View$$ExternalSyntheticLambda8;->run()V
 HSPLandroid/view/View$12;->get(Landroid/view/View;)Ljava/lang/Float;
@@ -16919,7 +16926,7 @@
 HSPLandroid/view/View$AccessibilityDelegate;->sendAccessibilityEvent(Landroid/view/View;I)V
 HSPLandroid/view/View$AttachInfo;-><init>(Landroid/view/IWindowSession;Landroid/view/IWindow;Landroid/view/Display;Landroid/view/ViewRootImpl;Landroid/os/Handler;Landroid/view/View$AttachInfo$Callbacks;Landroid/content/Context;)V
 HSPLandroid/view/View$AttachInfo;->delayNotifyContentCaptureInsetsEvent(Landroid/graphics/Insets;)V
-HSPLandroid/view/View$AttachInfo;->ensureEvents(Landroid/view/contentcapture/ContentCaptureSession;)Ljava/util/ArrayList;
+HSPLandroid/view/View$AttachInfo;->ensureEvents(Landroid/view/contentcapture/ContentCaptureSession;)Ljava/util/ArrayList;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/view/contentcapture/ContentCaptureSession;Landroid/view/contentcapture/MainContentCaptureSession;
 HSPLandroid/view/View$BaseSavedState$1;->createFromParcel(Landroid/os/Parcel;Ljava/lang/ClassLoader;)Landroid/view/View$BaseSavedState;
 HSPLandroid/view/View$BaseSavedState$1;->createFromParcel(Landroid/os/Parcel;Ljava/lang/ClassLoader;)Ljava/lang/Object;
 HSPLandroid/view/View$BaseSavedState;-><init>(Landroid/os/Parcel;)V
@@ -16943,16 +16950,16 @@
 HSPLandroid/view/View$MeasureSpec;->makeMeasureSpec(II)I
 HSPLandroid/view/View$MeasureSpec;->makeSafeMeasureSpec(II)I
 HSPLandroid/view/View$PerformClick;->run()V
-HSPLandroid/view/View$ScrollabilityCache;-><init>(Landroid/view/ViewConfiguration;Landroid/view/View;)V
+HSPLandroid/view/View$ScrollabilityCache;-><init>(Landroid/view/ViewConfiguration;Landroid/view/View;)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/view/ViewConfiguration;Landroid/view/ViewConfiguration;
 HSPLandroid/view/View$ScrollabilityCache;->run()V
 HSPLandroid/view/View$TintInfo;-><init>()V
 HSPLandroid/view/View$TransformationInfo;-><init>()V
 HSPLandroid/view/View$UnsetPressedState;->run()V
 HSPLandroid/view/View$VisibilityChangeForAutofillHandler;->handleMessage(Landroid/os/Message;)V
-HSPLandroid/view/View;-><init>(Landroid/content/Context;)V+]Landroid/view/View;megamorphic_types]Ljava/lang/Object;megamorphic_types]Landroid/content/Context;missing_types]Landroid/view/ViewConfiguration;Landroid/view/ViewConfiguration;]Ljava/lang/Class;Ljava/lang/Class;
+HSPLandroid/view/View;-><init>(Landroid/content/Context;)V+]Landroid/view/View;megamorphic_types]Ljava/lang/Object;megamorphic_types]Landroid/view/ViewConfiguration;Landroid/view/ViewConfiguration;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/content/Context;missing_types
 HSPLandroid/view/View;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/view/View;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroid/view/View;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/view/View;megamorphic_types]Landroid/content/Context;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
+HSPLandroid/view/View;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/view/View;megamorphic_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/Context;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->addFocusables(Ljava/util/ArrayList;I)V
 HSPLandroid/view/View;->addFocusables(Ljava/util/ArrayList;II)V
 HSPLandroid/view/View;->addFrameMetricsListener(Landroid/view/Window;Landroid/view/Window$OnFrameMetricsAvailableListener;Landroid/os/Handler;)V
@@ -16963,21 +16970,21 @@
 HSPLandroid/view/View;->applyBackgroundTint()V
 HSPLandroid/view/View;->applyForegroundTint()V
 HSPLandroid/view/View;->applyInsets(Landroid/graphics/Rect;)V
-HSPLandroid/view/View;->applyLegacyAnimation(Landroid/view/ViewGroup;JLandroid/view/animation/Animation;Z)Z
+HSPLandroid/view/View;->applyLegacyAnimation(Landroid/view/ViewGroup;JLandroid/view/animation/Animation;Z)Z+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/view/animation/Animation;missing_types]Landroid/view/View;Landroid/widget/DayPickerView;]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/View;->areDrawablesResolved()Z
 HSPLandroid/view/View;->assignParent(Landroid/view/ViewParent;)V
 HSPLandroid/view/View;->awakenScrollBars()Z
 HSPLandroid/view/View;->awakenScrollBars(IZ)Z+]Landroid/os/Handler;Landroid/view/ViewRootImpl$ViewRootHandler;]Landroid/view/View;missing_types
 HSPLandroid/view/View;->bringToFront()V
 HSPLandroid/view/View;->buildDrawingCache(Z)V
-HSPLandroid/view/View;->buildDrawingCacheImpl(Z)V
+HSPLandroid/view/View;->buildDrawingCacheImpl(Z)V+]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;]Landroid/view/ViewConfiguration;Landroid/view/ViewConfiguration;]Landroid/graphics/Canvas;Landroid/graphics/Canvas;
 HSPLandroid/view/View;->buildLayer()V
 HSPLandroid/view/View;->calculateIsImportantForContentCapture()Z+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Landroid/view/ViewParent;missing_types
 HSPLandroid/view/View;->canHaveDisplayList()Z
 HSPLandroid/view/View;->canNotifyAutofillEnterExitEvent()Z
 HSPLandroid/view/View;->canReceivePointerEvents()Z
-HSPLandroid/view/View;->canResolveLayoutDirection()Z
-HSPLandroid/view/View;->canResolveTextDirection()Z
+HSPLandroid/view/View;->canResolveLayoutDirection()Z+]Landroid/view/View;missing_types]Landroid/view/ViewParent;missing_types
+HSPLandroid/view/View;->canResolveTextDirection()Z+]Landroid/view/View;megamorphic_types]Landroid/view/ViewParent;megamorphic_types
 HSPLandroid/view/View;->canScrollHorizontally(I)Z
 HSPLandroid/view/View;->canScrollVertically(I)Z
 HSPLandroid/view/View;->canTakeFocus()Z
@@ -16986,14 +16993,17 @@
 HSPLandroid/view/View;->cancelPendingInputEvents()V
 HSPLandroid/view/View;->checkForLongClick(JFFI)V
 HSPLandroid/view/View;->checkInputConnectionProxy(Landroid/view/View;)Z
-HSPLandroid/view/View;->cleanupDraw()V
-HSPLandroid/view/View;->clearAccessibilityFocus()V
+HSPLandroid/view/View;->cleanupDraw()V+]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
+HSPLandroid/view/View;->clearAccessibilityFocus()V+]Landroid/view/View;missing_types]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
 HSPLandroid/view/View;->clearAccessibilityFocusNoCallbacks(I)V
 HSPLandroid/view/View;->clearAccessibilityThrottles()V
 HSPLandroid/view/View;->clearAnimation()V
 HSPLandroid/view/View;->clearFocus()V
 HSPLandroid/view/View;->clearFocusInternal(Landroid/view/View;ZZ)V
 HSPLandroid/view/View;->clearParentsWantFocus()V
+HSPLandroid/view/View;->clearTranslationState()V+]Landroid/view/View;megamorphic_types
+HSPLandroid/view/View;->clearViewTranslationCallback()V
+HSPLandroid/view/View;->clearViewTranslationResponse()V
 HSPLandroid/view/View;->collectPreferKeepClearRects()Ljava/util/List;+]Landroid/view/View;missing_types]Landroid/view/ViewConfiguration;Landroid/view/ViewConfiguration;
 HSPLandroid/view/View;->collectUnrestrictedPreferKeepClearRects()Ljava/util/List;
 HSPLandroid/view/View;->combineMeasuredStates(II)I
@@ -17002,21 +17012,21 @@
 HSPLandroid/view/View;->computeHorizontalScrollExtent()I
 HSPLandroid/view/View;->computeHorizontalScrollOffset()I
 HSPLandroid/view/View;->computeHorizontalScrollRange()I
-HSPLandroid/view/View;->computeOpaqueFlags()V
+HSPLandroid/view/View;->computeOpaqueFlags()V+]Landroid/graphics/drawable/Drawable;megamorphic_types
 HSPLandroid/view/View;->computeScroll()V
 HSPLandroid/view/View;->computeSystemWindowInsets(Landroid/view/WindowInsets;Landroid/graphics/Rect;)Landroid/view/WindowInsets;
 HSPLandroid/view/View;->computeVerticalScrollExtent()I
 HSPLandroid/view/View;->computeVerticalScrollOffset()I
 HSPLandroid/view/View;->computeVerticalScrollRange()I
-HSPLandroid/view/View;->damageInParent()V
+HSPLandroid/view/View;->damageInParent()V+]Landroid/view/ViewParent;missing_types
 HSPLandroid/view/View;->destroyDrawingCache()V
 HSPLandroid/view/View;->destroyHardwareResources()V
 HSPLandroid/view/View;->dispatchApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;+]Landroid/view/View;megamorphic_types
-HSPLandroid/view/View;->dispatchAttachedToWindow(Landroid/view/View$AttachInfo;I)V+]Landroid/view/View;missing_types]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Ljava/util/Iterator;Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;
+HSPLandroid/view/View;->dispatchAttachedToWindow(Landroid/view/View$AttachInfo;I)V+]Landroid/view/ViewTreeObserver;Landroid/view/ViewTreeObserver;]Landroid/view/View;missing_types]Landroid/view/HandlerActionQueue;Landroid/view/HandlerActionQueue;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;]Landroid/view/ViewOverlay;Landroid/view/ViewGroupOverlay;]Landroid/view/ViewGroup;Landroid/view/ViewOverlay$OverlayViewGroup;]Landroid/view/View$OnAttachStateChangeListener;missing_types
 HSPLandroid/view/View;->dispatchCancelPendingInputEvents()V
-HSPLandroid/view/View;->dispatchCollectViewAttributes(Landroid/view/View$AttachInfo;I)V+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->dispatchCollectViewAttributes(Landroid/view/View$AttachInfo;I)V+]Landroid/view/View;megamorphic_types
 HSPLandroid/view/View;->dispatchConfigurationChanged(Landroid/content/res/Configuration;)V
-HSPLandroid/view/View;->dispatchDetachedFromWindow()V+]Ljava/util/List;Ljava/util/Collections$EmptyList;]Landroid/view/ImeFocusController;Landroid/view/ImeFocusController;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Ljava/util/Iterator;Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;
+HSPLandroid/view/View;->dispatchDetachedFromWindow()V+]Landroid/view/View;missing_types]Ljava/util/List;Ljava/util/Collections$EmptyList;]Landroid/view/ImeFocusController;Landroid/view/ImeFocusController;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;]Landroid/view/ViewOverlay;Landroid/view/ViewGroupOverlay;]Landroid/view/ViewGroup;Landroid/view/ViewOverlay$OverlayViewGroup;]Landroid/view/View$OnAttachStateChangeListener;missing_types
 HSPLandroid/view/View;->dispatchDraw(Landroid/graphics/Canvas;)V
 HSPLandroid/view/View;->dispatchDrawableHotspotChanged(FF)V
 HSPLandroid/view/View;->dispatchFinishTemporaryDetach()V
@@ -17033,26 +17043,26 @@
 HSPLandroid/view/View;->dispatchProvideStructure(Landroid/view/ViewStructure;II)V
 HSPLandroid/view/View;->dispatchRestoreInstanceState(Landroid/util/SparseArray;)V
 HSPLandroid/view/View;->dispatchSaveInstanceState(Landroid/util/SparseArray;)V
-HSPLandroid/view/View;->dispatchScreenStateChanged(I)V
+HSPLandroid/view/View;->dispatchScreenStateChanged(I)V+]Landroid/view/View;megamorphic_types
 HSPLandroid/view/View;->dispatchSetActivated(Z)V
 HSPLandroid/view/View;->dispatchSetPressed(Z)V
 HSPLandroid/view/View;->dispatchSetSelected(Z)V
 HSPLandroid/view/View;->dispatchStartTemporaryDetach()V
 HSPLandroid/view/View;->dispatchSystemUiVisibilityChanged(I)V
-HSPLandroid/view/View;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z
-HSPLandroid/view/View;->dispatchVisibilityAggregated(Z)Z
-HSPLandroid/view/View;->dispatchVisibilityChanged(Landroid/view/View;I)V+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z+]Landroid/view/View;missing_types]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
+HSPLandroid/view/View;->dispatchVisibilityAggregated(Z)Z+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->dispatchVisibilityChanged(Landroid/view/View;I)V+]Landroid/view/View;megamorphic_types
 HSPLandroid/view/View;->dispatchWindowFocusChanged(Z)V
 HSPLandroid/view/View;->dispatchWindowInsetsAnimationEnd(Landroid/view/WindowInsetsAnimation;)V
 HSPLandroid/view/View;->dispatchWindowSystemUiVisiblityChanged(I)V
 HSPLandroid/view/View;->dispatchWindowVisibilityChanged(I)V
-HSPLandroid/view/View;->draw(Landroid/graphics/Canvas;)V+]Landroid/view/View;megamorphic_types
-HSPLandroid/view/View;->draw(Landroid/graphics/Canvas;Landroid/view/ViewGroup;J)Z+]Landroid/view/View;missing_types]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
-HSPLandroid/view/View;->drawAutofilledHighlight(Landroid/graphics/Canvas;)V
-HSPLandroid/view/View;->drawBackground(Landroid/graphics/Canvas;)V+]Landroid/view/View;megamorphic_types]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
+HSPLandroid/view/View;->draw(Landroid/graphics/Canvas;)V+]Landroid/view/ViewOverlay;Landroid/view/ViewGroupOverlay;]Landroid/view/View;megamorphic_types]Landroid/view/ViewGroup;Landroid/view/ViewOverlay$OverlayViewGroup;
+HSPLandroid/view/View;->draw(Landroid/graphics/Canvas;Landroid/view/ViewGroup;J)Z+]Landroid/view/View;missing_types]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;,Landroid/graphics/Picture$PictureCanvas;,Landroid/graphics/Canvas;]Landroid/view/animation/Transformation;Landroid/view/animation/Transformation;]Landroid/view/animation/Animation;Landroid/view/animation/AnimationSet;,Landroid/view/animation/AlphaAnimation;]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/View;->drawAutofilledHighlight(Landroid/graphics/Canvas;)V+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->drawBackground(Landroid/graphics/Canvas;)V+]Landroid/view/View;megamorphic_types]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;,Landroid/graphics/Canvas;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/ColorDrawable;
 HSPLandroid/view/View;->drawDefaultFocusHighlight(Landroid/graphics/Canvas;)V
 HSPLandroid/view/View;->drawableHotspotChanged(FF)V
-HSPLandroid/view/View;->drawableStateChanged()V+]Landroid/animation/StateListAnimator;Landroid/animation/StateListAnimator;]Landroid/view/View;missing_types]Landroid/graphics/drawable/Drawable;Landroid/widget/ScrollBarDrawable;,Landroid/graphics/drawable/RippleDrawable;,Landroid/graphics/drawable/ColorDrawable;
+HSPLandroid/view/View;->drawableStateChanged()V+]Landroid/view/View;megamorphic_types]Landroid/graphics/drawable/Drawable;megamorphic_types]Landroid/animation/StateListAnimator;Landroid/animation/StateListAnimator;
 HSPLandroid/view/View;->drawsWithRenderNode(Landroid/graphics/Canvas;)Z+]Landroid/graphics/Canvas;missing_types
 HSPLandroid/view/View;->ensureTransformationInfo()V
 HSPLandroid/view/View;->findAccessibilityFocusHost(Z)Landroid/view/View;
@@ -17070,7 +17080,7 @@
 HSPLandroid/view/View;->fitSystemWindowsInt(Landroid/graphics/Rect;)Z+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;
 HSPLandroid/view/View;->focusSearch(I)Landroid/view/View;
 HSPLandroid/view/View;->forceLayout()V
-HSPLandroid/view/View;->gatherTransparentRegion(Landroid/graphics/Region;)Z
+HSPLandroid/view/View;->gatherTransparentRegion(Landroid/graphics/Region;)Z+]Landroid/graphics/Region;Landroid/graphics/Region;]Landroid/view/View;missing_types
 HSPLandroid/view/View;->generateViewId()I
 HSPLandroid/view/View;->getAccessibilityClassName()Ljava/lang/CharSequence;
 HSPLandroid/view/View;->getAccessibilityDelegate()Landroid/view/View$AccessibilityDelegate;
@@ -17078,18 +17088,18 @@
 HSPLandroid/view/View;->getAccessibilityNodeProvider()Landroid/view/accessibility/AccessibilityNodeProvider;
 HSPLandroid/view/View;->getAccessibilityViewId()I
 HSPLandroid/view/View;->getAlpha()F
-HSPLandroid/view/View;->getAndCacheContentCaptureSession()Landroid/view/contentcapture/ContentCaptureSession;
+HSPLandroid/view/View;->getAndCacheContentCaptureSession()Landroid/view/contentcapture/ContentCaptureSession;+]Landroid/view/View;missing_types]Landroid/content/Context;missing_types]Landroid/view/contentcapture/ContentCaptureManager;Landroid/view/contentcapture/ContentCaptureManager;
 HSPLandroid/view/View;->getAnimation()Landroid/view/animation/Animation;
 HSPLandroid/view/View;->getApplicationWindowToken()Landroid/os/IBinder;
 HSPLandroid/view/View;->getAutofillHints()[Ljava/lang/String;
-HSPLandroid/view/View;->getAutofillId()Landroid/view/autofill/AutofillId;
+HSPLandroid/view/View;->getAutofillId()Landroid/view/autofill/AutofillId;+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->getAutofillType()I
 HSPLandroid/view/View;->getAutofillViewId()I
 HSPLandroid/view/View;->getBackground()Landroid/graphics/drawable/Drawable;
 HSPLandroid/view/View;->getBaseline()I
 HSPLandroid/view/View;->getBottom()I
 HSPLandroid/view/View;->getBoundsOnScreen(Landroid/graphics/Rect;)V
-HSPLandroid/view/View;->getBoundsOnScreen(Landroid/graphics/Rect;Z)V
+HSPLandroid/view/View;->getBoundsOnScreen(Landroid/graphics/Rect;Z)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/view/View;->getClipBounds()Landroid/graphics/Rect;
 HSPLandroid/view/View;->getClipToOutline()Z
 HSPLandroid/view/View;->getContentCaptureSession()Landroid/view/contentcapture/ContentCaptureSession;
@@ -17097,16 +17107,16 @@
 HSPLandroid/view/View;->getContext()Landroid/content/Context;
 HSPLandroid/view/View;->getDefaultSize(II)I
 HSPLandroid/view/View;->getDisplay()Landroid/view/Display;
-HSPLandroid/view/View;->getDrawableRenderNode(Landroid/graphics/drawable/Drawable;Landroid/graphics/RenderNode;)Landroid/graphics/RenderNode;+]Ljava/lang/Object;missing_types]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/view/View;->getDrawableRenderNode(Landroid/graphics/drawable/Drawable;Landroid/graphics/RenderNode;)Landroid/graphics/RenderNode;+]Ljava/lang/Object;megamorphic_types]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/graphics/drawable/Drawable;megamorphic_types
 HSPLandroid/view/View;->getDrawableState()[I+]Landroid/view/View;megamorphic_types
 HSPLandroid/view/View;->getDrawingCache(Z)Landroid/graphics/Bitmap;
 HSPLandroid/view/View;->getDrawingRect(Landroid/graphics/Rect;)V
 HSPLandroid/view/View;->getDrawingTime()J
-HSPLandroid/view/View;->getElevation()F
+HSPLandroid/view/View;->getElevation()F+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->getFinalAlpha()F
 HSPLandroid/view/View;->getFitsSystemWindows()Z
 HSPLandroid/view/View;->getFocusable()I
-HSPLandroid/view/View;->getFocusableAttribute(Landroid/content/res/TypedArray;)I
+HSPLandroid/view/View;->getFocusableAttribute(Landroid/content/res/TypedArray;)I+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/view/View;->getFocusedRect(Landroid/graphics/Rect;)V
 HSPLandroid/view/View;->getForeground()Landroid/graphics/drawable/Drawable;
 HSPLandroid/view/View;->getForegroundGravity()I
@@ -17132,9 +17142,9 @@
 HSPLandroid/view/View;->getListenerInfo()Landroid/view/View$ListenerInfo;
 HSPLandroid/view/View;->getLocalVisibleRect(Landroid/graphics/Rect;)Z
 HSPLandroid/view/View;->getLocationInSurface([I)V
-HSPLandroid/view/View;->getLocationInWindow([I)V
+HSPLandroid/view/View;->getLocationInWindow([I)V+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->getLocationOnScreen()[I
-HSPLandroid/view/View;->getLocationOnScreen([I)V
+HSPLandroid/view/View;->getLocationOnScreen([I)V+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->getMatrix()Landroid/graphics/Matrix;+]Landroid/view/View;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->getMeasuredHeight()I
 HSPLandroid/view/View;->getMeasuredState()I
@@ -17146,15 +17156,15 @@
 HSPLandroid/view/View;->getOutlineProvider()Landroid/view/ViewOutlineProvider;
 HSPLandroid/view/View;->getOverScrollMode()I
 HSPLandroid/view/View;->getPaddingBottom()I
-HSPLandroid/view/View;->getPaddingEnd()I
-HSPLandroid/view/View;->getPaddingLeft()I
+HSPLandroid/view/View;->getPaddingEnd()I+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->getPaddingLeft()I+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->getPaddingRight()I
-HSPLandroid/view/View;->getPaddingStart()I
+HSPLandroid/view/View;->getPaddingStart()I+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->getPaddingTop()I
 HSPLandroid/view/View;->getParent()Landroid/view/ViewParent;
 HSPLandroid/view/View;->getPivotX()F
 HSPLandroid/view/View;->getPivotY()F
-HSPLandroid/view/View;->getProjectionReceiver()Landroid/view/View;
+HSPLandroid/view/View;->getProjectionReceiver()Landroid/view/View;+]Landroid/view/ViewParent;missing_types
 HSPLandroid/view/View;->getRawLayoutDirection()I
 HSPLandroid/view/View;->getRawTextAlignment()I
 HSPLandroid/view/View;->getRawTextDirection()I
@@ -17173,12 +17183,12 @@
 HSPLandroid/view/View;->getScrollY()I
 HSPLandroid/view/View;->getSolidColor()I
 HSPLandroid/view/View;->getStraightVerticalScrollBarBounds(Landroid/graphics/Rect;Landroid/graphics/Rect;)V+]Landroid/view/View;missing_types
-HSPLandroid/view/View;->getSuggestedMinimumHeight()I
-HSPLandroid/view/View;->getSuggestedMinimumWidth()I
+HSPLandroid/view/View;->getSuggestedMinimumHeight()I+]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/view/View;->getSuggestedMinimumWidth()I+]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/view/View;->getSystemGestureExclusionRects()Ljava/util/List;
 HSPLandroid/view/View;->getSystemUiVisibility()I
 HSPLandroid/view/View;->getTag()Ljava/lang/Object;
-HSPLandroid/view/View;->getTag(I)Ljava/lang/Object;
+HSPLandroid/view/View;->getTag(I)Ljava/lang/Object;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLandroid/view/View;->getTextAlignment()I
 HSPLandroid/view/View;->getTextDirection()I
 HSPLandroid/view/View;->getThreadedRenderer()Landroid/view/ThreadedRenderer;
@@ -17187,9 +17197,9 @@
 HSPLandroid/view/View;->getTransitionName()Ljava/lang/String;
 HSPLandroid/view/View;->getTranslationX()F+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->getTranslationY()F+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
-HSPLandroid/view/View;->getTranslationZ()F
+HSPLandroid/view/View;->getTranslationZ()F+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->getVerticalFadingEdgeLength()I
-HSPLandroid/view/View;->getVerticalScrollbarWidth()I
+HSPLandroid/view/View;->getVerticalScrollbarWidth()I+]Landroid/widget/ScrollBarDrawable;Landroid/widget/ScrollBarDrawable;
 HSPLandroid/view/View;->getViewRootImpl()Landroid/view/ViewRootImpl;
 HSPLandroid/view/View;->getViewTranslationCallback()Landroid/view/translation/ViewTranslationCallback;
 HSPLandroid/view/View;->getViewTreeObserver()Landroid/view/ViewTreeObserver;
@@ -17204,48 +17214,49 @@
 HSPLandroid/view/View;->getWindowVisibleDisplayFrame(Landroid/graphics/Rect;)V
 HSPLandroid/view/View;->getX()F
 HSPLandroid/view/View;->getY()F
-HSPLandroid/view/View;->getZ()F
+HSPLandroid/view/View;->getZ()F+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->handleFocusGainInternal(ILandroid/graphics/Rect;)V
-HSPLandroid/view/View;->handleScrollBarDragging(Landroid/view/MotionEvent;)Z
+HSPLandroid/view/View;->handleScrollBarDragging(Landroid/view/MotionEvent;)Z+]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/View;->hasAncestorThatBlocksDescendantFocus()Z
-HSPLandroid/view/View;->hasDefaultFocus()Z
+HSPLandroid/view/View;->hasDefaultFocus()Z+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->hasExplicitFocusable()Z
 HSPLandroid/view/View;->hasFocus()Z
-HSPLandroid/view/View;->hasFocusable()Z
-HSPLandroid/view/View;->hasFocusable(ZZ)Z
+HSPLandroid/view/View;->hasFocusable()Z+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->hasFocusable(ZZ)Z+]Landroid/view/ViewGroup;missing_types]Landroid/view/ViewParent;missing_types]Landroid/view/View;missing_types
 HSPLandroid/view/View;->hasIdentityMatrix()Z+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->hasImeFocus()Z
-HSPLandroid/view/View;->hasListenersForAccessibility()Z
+HSPLandroid/view/View;->hasListenersForAccessibility()Z+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->hasNestedScrollingParent()Z
 HSPLandroid/view/View;->hasOnClickListeners()Z
 HSPLandroid/view/View;->hasOverlappingRendering()Z
-HSPLandroid/view/View;->hasRtlSupport()Z
+HSPLandroid/view/View;->hasRtlSupport()Z+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/content/Context;missing_types
 HSPLandroid/view/View;->hasSize()Z
 HSPLandroid/view/View;->hasTransientState()Z
+HSPLandroid/view/View;->hasTranslationTransientState()Z
 HSPLandroid/view/View;->hasUnhandledKeyListener()Z
 HSPLandroid/view/View;->hasWindowFocus()Z
 HSPLandroid/view/View;->hasWindowInsetsAnimationCallback()Z
 HSPLandroid/view/View;->hideAutofillHighlight()Z
 HSPLandroid/view/View;->hideTooltip()V
-HSPLandroid/view/View;->includeForAccessibility()Z
+HSPLandroid/view/View;->includeForAccessibility()Z+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->inflate(Landroid/content/Context;ILandroid/view/ViewGroup;)Landroid/view/View;
 HSPLandroid/view/View;->initScrollCache()V
-HSPLandroid/view/View;->initialAwakenScrollBars()Z
+HSPLandroid/view/View;->initialAwakenScrollBars()Z+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->initializeFadingEdgeInternal(Landroid/content/res/TypedArray;)V
 HSPLandroid/view/View;->initializeScrollIndicatorsInternal()V
-HSPLandroid/view/View;->initializeScrollbarsInternal(Landroid/content/res/TypedArray;)V
+HSPLandroid/view/View;->initializeScrollbarsInternal(Landroid/content/res/TypedArray;)V+]Landroid/view/View;missing_types]Landroid/widget/ScrollBarDrawable;Landroid/widget/ScrollBarDrawable;]Landroid/view/ViewConfiguration;Landroid/view/ViewConfiguration;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;
 HSPLandroid/view/View;->internalSetPadding(IIII)V+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->invalidate()V+]Landroid/view/View;missing_types
-HSPLandroid/view/View;->invalidate(IIII)V
-HSPLandroid/view/View;->invalidate(Landroid/graphics/Rect;)V
-HSPLandroid/view/View;->invalidate(Z)V+]Landroid/view/View;missing_types
-HSPLandroid/view/View;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/view/View;megamorphic_types]Landroid/graphics/drawable/Drawable;missing_types
-HSPLandroid/view/View;->invalidateInternal(IIIIZZ)V+]Landroid/view/View;megamorphic_types]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/Drawable;missing_types]Landroid/view/ViewParent;missing_types
-HSPLandroid/view/View;->invalidateOutline()V
+HSPLandroid/view/View;->invalidate(IIII)V+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->invalidate(Landroid/graphics/Rect;)V+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->invalidate(Z)V+]Landroid/view/View;megamorphic_types
+HSPLandroid/view/View;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/view/View;megamorphic_types]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/view/View;->invalidateInternal(IIIIZZ)V+]Landroid/view/View;megamorphic_types]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewParent;megamorphic_types]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/view/View;->invalidateOutline()V+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->invalidateParentCaches()V
 HSPLandroid/view/View;->invalidateParentIfNeeded()V
 HSPLandroid/view/View;->invalidateParentIfNeededAndWasQuickRejected()V
-HSPLandroid/view/View;->invalidateViewProperty(ZZ)V+]Landroid/view/View;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
+HSPLandroid/view/View;->invalidateViewProperty(ZZ)V+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Landroid/view/View;missing_types
 HSPLandroid/view/View;->isAccessibilityFocused()Z
 HSPLandroid/view/View;->isAccessibilityFocusedViewOrHost()Z
 HSPLandroid/view/View;->isAccessibilityPane()Z
@@ -17254,7 +17265,7 @@
 HSPLandroid/view/View;->isAggregatedVisible()Z
 HSPLandroid/view/View;->isAttachedToWindow()Z
 HSPLandroid/view/View;->isAutoHandwritingEnabled()Z
-HSPLandroid/view/View;->isAutofillable()Z+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->isAutofillable()Z+]Landroid/view/View;missing_types]Landroid/content/AutofillOptions;Landroid/content/AutofillOptions;]Landroid/view/autofill/AutofillManager;Landroid/view/autofill/AutofillManager;
 HSPLandroid/view/View;->isAutofilled()Z
 HSPLandroid/view/View;->isClickable()Z
 HSPLandroid/view/View;->isContextClickable()Z
@@ -17271,7 +17282,7 @@
 HSPLandroid/view/View;->isHorizontalFadingEdgeEnabled()Z
 HSPLandroid/view/View;->isHorizontalScrollBarEnabled()Z
 HSPLandroid/view/View;->isImportantForAccessibility()Z+]Landroid/view/View;megamorphic_types]Landroid/view/ViewParent;missing_types
-HSPLandroid/view/View;->isImportantForAutofill()Z
+HSPLandroid/view/View;->isImportantForAutofill()Z+]Landroid/view/View;missing_types]Landroid/view/ViewParent;missing_types
 HSPLandroid/view/View;->isImportantForContentCapture()Z
 HSPLandroid/view/View;->isInEditMode()Z
 HSPLandroid/view/View;->isInLayout()Z
@@ -17279,12 +17290,12 @@
 HSPLandroid/view/View;->isInTouchMode()Z
 HSPLandroid/view/View;->isKeyboardNavigationCluster()Z
 HSPLandroid/view/View;->isLaidOut()Z
-HSPLandroid/view/View;->isLayoutDirectionInherited()Z
+HSPLandroid/view/View;->isLayoutDirectionInherited()Z+]Landroid/view/View;megamorphic_types
 HSPLandroid/view/View;->isLayoutDirectionResolved()Z
 HSPLandroid/view/View;->isLayoutModeOptical(Ljava/lang/Object;)Z+]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/View;->isLayoutRequested()Z
-HSPLandroid/view/View;->isLayoutRtl()Z
-HSPLandroid/view/View;->isLayoutValid()Z
+HSPLandroid/view/View;->isLayoutRtl()Z+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->isLayoutValid()Z+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->isLongClickable()Z
 HSPLandroid/view/View;->isNestedScrollingEnabled()Z
 HSPLandroid/view/View;->isOpaque()Z
@@ -17292,25 +17303,25 @@
 HSPLandroid/view/View;->isPressed()Z
 HSPLandroid/view/View;->isProjectionReceiver()Z
 HSPLandroid/view/View;->isRootNamespace()Z
-HSPLandroid/view/View;->isRtlCompatibilityMode()Z
+HSPLandroid/view/View;->isRtlCompatibilityMode()Z+]Landroid/view/View;missing_types]Landroid/content/Context;missing_types
 HSPLandroid/view/View;->isSelected()Z
 HSPLandroid/view/View;->isShowingLayoutBounds()Z
 HSPLandroid/view/View;->isShown()Z
 HSPLandroid/view/View;->isSoundEffectsEnabled()Z
 HSPLandroid/view/View;->isTemporarilyDetached()Z
-HSPLandroid/view/View;->isTextAlignmentInherited()Z
+HSPLandroid/view/View;->isTextAlignmentInherited()Z+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->isTextAlignmentResolved()Z
-HSPLandroid/view/View;->isTextDirectionInherited()Z
+HSPLandroid/view/View;->isTextDirectionInherited()Z+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->isTextDirectionResolved()Z
 HSPLandroid/view/View;->isVerticalFadingEdgeEnabled()Z
 HSPLandroid/view/View;->isVerticalScrollBarEnabled()Z
 HSPLandroid/view/View;->isVerticalScrollBarHidden()Z
 HSPLandroid/view/View;->isViewIdGenerated(I)Z
 HSPLandroid/view/View;->isVisibleToUser()Z
-HSPLandroid/view/View;->isVisibleToUser(Landroid/graphics/Rect;)Z
-HSPLandroid/view/View;->jumpDrawablesToCurrentState()V+]Landroid/animation/StateListAnimator;Landroid/animation/StateListAnimator;]Landroid/graphics/drawable/Drawable;missing_types
+HSPLandroid/view/View;->isVisibleToUser(Landroid/graphics/Rect;)Z+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->jumpDrawablesToCurrentState()V+]Landroid/graphics/drawable/Drawable;missing_types]Landroid/animation/StateListAnimator;Landroid/animation/StateListAnimator;
 HSPLandroid/view/View;->lambda$updatePositionUpdateListener$2$android-view-View()V+]Landroid/view/View;missing_types
-HSPLandroid/view/View;->layout(IIII)V
+HSPLandroid/view/View;->layout(IIII)V+]Landroid/view/View;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/View$OnLayoutChangeListener;missing_types
 HSPLandroid/view/View;->makeFrameworkOptionalFitsSystemWindows()V
 HSPLandroid/view/View;->makeOptionalFitsSystemWindows()V
 HSPLandroid/view/View;->mapRectFromViewToScreenCoords(Landroid/graphics/RectF;Z)V+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/view/View;missing_types]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
@@ -17318,34 +17329,34 @@
 HSPLandroid/view/View;->mergeDrawableStates([I[I)[I
 HSPLandroid/view/View;->needGlobalAttributesUpdate(Z)V
 HSPLandroid/view/View;->needRtlPropertiesResolution()Z
-HSPLandroid/view/View;->notifyAppearedOrDisappearedForContentCaptureIfNeeded(Z)V+]Landroid/view/View;megamorphic_types]Landroid/content/Context;missing_types
+HSPLandroid/view/View;->notifyAppearedOrDisappearedForContentCaptureIfNeeded(Z)V+]Landroid/content/Context;missing_types]Landroid/view/View;megamorphic_types
 HSPLandroid/view/View;->notifyAutofillManagerOnClick()V
-HSPLandroid/view/View;->notifyEnterOrExitForAutoFillIfNeeded(Z)V
+HSPLandroid/view/View;->notifyEnterOrExitForAutoFillIfNeeded(Z)V+]Landroid/view/View;missing_types]Landroid/view/autofill/AutofillManager;Landroid/view/autofill/AutofillManager;
 HSPLandroid/view/View;->notifyGlobalFocusCleared(Landroid/view/View;)V
 HSPLandroid/view/View;->notifySubtreeAccessibilityStateChangedByParentIfNeeded()V
-HSPLandroid/view/View;->notifySubtreeAccessibilityStateChangedIfNeeded()V
-HSPLandroid/view/View;->notifyViewAccessibilityStateChangedIfNeeded(I)V
-HSPLandroid/view/View;->offsetLeftAndRight(I)V
-HSPLandroid/view/View;->offsetTopAndBottom(I)V
+HSPLandroid/view/View;->notifySubtreeAccessibilityStateChangedIfNeeded()V+]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;
+HSPLandroid/view/View;->notifyViewAccessibilityStateChangedIfNeeded(I)V+]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;
+HSPLandroid/view/View;->offsetLeftAndRight(I)V+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
+HSPLandroid/view/View;->offsetTopAndBottom(I)V+]Landroid/view/View;megamorphic_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->onAnimationEnd()V
 HSPLandroid/view/View;->onAnimationStart()V
 HSPLandroid/view/View;->onApplyFrameworkOptionalFitSystemWindows(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;
 HSPLandroid/view/View;->onApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;+]Landroid/view/View;missing_types]Landroid/view/WindowInsets;Landroid/view/WindowInsets;
-HSPLandroid/view/View;->onAttachedToWindow()V
+HSPLandroid/view/View;->onAttachedToWindow()V+]Landroid/view/accessibility/AccessibilityNodeIdManager;Landroid/view/accessibility/AccessibilityNodeIdManager;]Landroid/view/View;megamorphic_types]Landroid/view/ViewParent;missing_types
 HSPLandroid/view/View;->onCancelPendingInputEvents()V
 HSPLandroid/view/View;->onCheckIsTextEditor()Z
 HSPLandroid/view/View;->onCloseSystemDialogs(Ljava/lang/String;)V
 HSPLandroid/view/View;->onConfigurationChanged(Landroid/content/res/Configuration;)V
-HSPLandroid/view/View;->onCreateDrawableState(I)[I+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->onCreateDrawableState(I)[I+]Landroid/view/View;megamorphic_types
 HSPLandroid/view/View;->onCreateInputConnection(Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection;
 HSPLandroid/view/View;->onDetachedFromWindow()V
-HSPLandroid/view/View;->onDetachedFromWindowInternal()V
+HSPLandroid/view/View;->onDetachedFromWindowInternal()V+]Landroid/view/accessibility/AccessibilityNodeIdManager;Landroid/view/accessibility/AccessibilityNodeIdManager;]Landroid/view/View;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->onDraw(Landroid/graphics/Canvas;)V
-HSPLandroid/view/View;->onDrawForeground(Landroid/graphics/Canvas;)V+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->onDrawForeground(Landroid/graphics/Canvas;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/Drawable;missing_types]Landroid/view/View;missing_types
 HSPLandroid/view/View;->onDrawHorizontalScrollBar(Landroid/graphics/Canvas;Landroid/graphics/drawable/Drawable;IIII)V
 HSPLandroid/view/View;->onDrawScrollBars(Landroid/graphics/Canvas;)V+]Landroid/graphics/Interpolator;Landroid/graphics/Interpolator;]Landroid/view/View;missing_types]Landroid/widget/ScrollBarDrawable;Landroid/widget/ScrollBarDrawable;
-HSPLandroid/view/View;->onDrawScrollIndicators(Landroid/graphics/Canvas;)V
-HSPLandroid/view/View;->onDrawVerticalScrollBar(Landroid/graphics/Canvas;Landroid/graphics/drawable/Drawable;IIII)V
+HSPLandroid/view/View;->onDrawScrollIndicators(Landroid/graphics/Canvas;)V+]Landroid/view/View;Landroid/widget/ScrollView;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;
+HSPLandroid/view/View;->onDrawVerticalScrollBar(Landroid/graphics/Canvas;Landroid/graphics/drawable/Drawable;IIII)V+]Landroid/graphics/drawable/Drawable;Landroid/widget/ScrollBarDrawable;
 HSPLandroid/view/View;->onFilterTouchEventForSecurity(Landroid/view/MotionEvent;)Z
 HSPLandroid/view/View;->onFinishInflate()V
 HSPLandroid/view/View;->onFinishTemporaryDetach()V
@@ -17359,23 +17370,23 @@
 HSPLandroid/view/View;->onProvideAutofillStructure(Landroid/view/ViewStructure;I)V
 HSPLandroid/view/View;->onProvideAutofillVirtualStructure(Landroid/view/ViewStructure;I)V
 HSPLandroid/view/View;->onProvideContentCaptureStructure(Landroid/view/ViewStructure;I)V
-HSPLandroid/view/View;->onProvideStructure(Landroid/view/ViewStructure;II)V+]Landroid/view/View;missing_types]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/view/ViewStructure;Landroid/view/contentcapture/ViewNode$ViewStructureImpl;]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLandroid/view/View;->onProvideStructure(Landroid/view/ViewStructure;II)V+]Landroid/view/View;missing_types]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/view/ViewStructure;Landroid/view/contentcapture/ViewNode$ViewStructureImpl;,Landroid/app/assist/AssistStructure$ViewNodeBuilder;]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLandroid/view/View;->onResolveDrawables(I)V
 HSPLandroid/view/View;->onRestoreInstanceState(Landroid/os/Parcelable;)V
 HSPLandroid/view/View;->onRtlPropertiesChanged(I)V
-HSPLandroid/view/View;->onSaveInstanceState()Landroid/os/Parcelable;
+HSPLandroid/view/View;->onSaveInstanceState()Landroid/os/Parcelable;+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->onScreenStateChanged(I)V
 HSPLandroid/view/View;->onScrollChanged(IIII)V
 HSPLandroid/view/View;->onSetAlpha(I)Z
 HSPLandroid/view/View;->onSizeChanged(IIII)V
 HSPLandroid/view/View;->onStartTemporaryDetach()V
-HSPLandroid/view/View;->onTouchEvent(Landroid/view/MotionEvent;)Z
-HSPLandroid/view/View;->onVisibilityAggregated(Z)V+]Landroid/view/View;megamorphic_types]Ljava/util/List;Ljava/util/Collections$EmptyList;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/RippleDrawable;,Landroid/graphics/drawable/ColorDrawable;,Landroid/graphics/drawable/LayerDrawable;,Landroid/graphics/drawable/StateListDrawable;]Landroid/os/Handler;Landroid/view/View$VisibilityChangeForAutofillHandler;]Landroid/os/Message;Landroid/os/Message;
+HSPLandroid/view/View;->onTouchEvent(Landroid/view/MotionEvent;)Z+]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
+HSPLandroid/view/View;->onVisibilityAggregated(Z)V+]Landroid/view/View;megamorphic_types]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Landroid/graphics/drawable/Drawable;megamorphic_types]Landroid/os/Handler;Landroid/view/View$VisibilityChangeForAutofillHandler;]Landroid/os/Message;Landroid/os/Message;]Landroid/view/autofill/AutofillManager;Landroid/view/autofill/AutofillManager;
 HSPLandroid/view/View;->onVisibilityChanged(Landroid/view/View;I)V
-HSPLandroid/view/View;->onWindowFocusChanged(Z)V
+HSPLandroid/view/View;->onWindowFocusChanged(Z)V+]Landroid/view/View;megamorphic_types
 HSPLandroid/view/View;->onWindowSystemUiVisibilityChanged(I)V
 HSPLandroid/view/View;->onWindowVisibilityChanged(I)V
-HSPLandroid/view/View;->overScrollBy(IIIIIIIIZ)Z
+HSPLandroid/view/View;->overScrollBy(IIIIIIIIZ)Z+]Landroid/view/View;Landroid/webkit/WebView;
 HSPLandroid/view/View;->performButtonActionOnTouchDown(Landroid/view/MotionEvent;)Z
 HSPLandroid/view/View;->performClick()Z
 HSPLandroid/view/View;->performCollectViewAttributes(Landroid/view/View$AttachInfo;I)V
@@ -17387,20 +17398,20 @@
 HSPLandroid/view/View;->playSoundEffect(I)V
 HSPLandroid/view/View;->pointInView(FF)Z
 HSPLandroid/view/View;->pointInView(FFF)Z
-HSPLandroid/view/View;->post(Ljava/lang/Runnable;)Z
+HSPLandroid/view/View;->post(Ljava/lang/Runnable;)Z+]Landroid/os/Handler;Landroid/view/ViewRootImpl$ViewRootHandler;
 HSPLandroid/view/View;->postDelayed(Ljava/lang/Runnable;J)Z
 HSPLandroid/view/View;->postInvalidate()V
 HSPLandroid/view/View;->postInvalidateDelayed(J)V
 HSPLandroid/view/View;->postInvalidateOnAnimation()V
-HSPLandroid/view/View;->postOnAnimation(Ljava/lang/Runnable;)V
+HSPLandroid/view/View;->postOnAnimation(Ljava/lang/Runnable;)V+]Landroid/view/Choreographer;Landroid/view/Choreographer;
 HSPLandroid/view/View;->postOnAnimationDelayed(Ljava/lang/Runnable;J)V
-HSPLandroid/view/View;->postSendViewScrolledAccessibilityEventCallback(II)V
+HSPLandroid/view/View;->postSendViewScrolledAccessibilityEventCallback(II)V+]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;
 HSPLandroid/view/View;->postUpdate(Ljava/lang/Runnable;)V+]Landroid/os/Handler;Landroid/view/ViewRootImpl$ViewRootHandler;
-HSPLandroid/view/View;->rebuildOutline()V+]Landroid/view/ViewOutlineProvider;Landroid/view/ViewOutlineProvider$1;,Landroid/view/ViewOutlineProvider$2;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Landroid/graphics/Outline;Landroid/graphics/Outline;
+HSPLandroid/view/View;->rebuildOutline()V+]Landroid/view/ViewOutlineProvider;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Landroid/graphics/Outline;Landroid/graphics/Outline;
 HSPLandroid/view/View;->recomputePadding()V
-HSPLandroid/view/View;->refreshDrawableState()V
+HSPLandroid/view/View;->refreshDrawableState()V+]Landroid/view/View;missing_types]Landroid/view/ViewParent;missing_types
 HSPLandroid/view/View;->registerPendingFrameMetricsObservers()V
-HSPLandroid/view/View;->removeCallbacks(Ljava/lang/Runnable;)Z
+HSPLandroid/view/View;->removeCallbacks(Ljava/lang/Runnable;)Z+]Landroid/os/Handler;Landroid/view/ViewRootImpl$ViewRootHandler;]Landroid/view/HandlerActionQueue;Landroid/view/HandlerActionQueue;]Landroid/view/Choreographer;Landroid/view/Choreographer;
 HSPLandroid/view/View;->removeFrameMetricsListener(Landroid/view/Window$OnFrameMetricsAvailableListener;)V
 HSPLandroid/view/View;->removeLongPressCallback()V
 HSPLandroid/view/View;->removeOnAttachStateChangeListener(Landroid/view/View$OnAttachStateChangeListener;)V
@@ -17414,30 +17425,30 @@
 HSPLandroid/view/View;->requestFocus(I)Z
 HSPLandroid/view/View;->requestFocus(ILandroid/graphics/Rect;)Z
 HSPLandroid/view/View;->requestFocusNoSearch(ILandroid/graphics/Rect;)Z
-HSPLandroid/view/View;->requestLayout()V+]Landroid/view/View;missing_types]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/ViewParent;missing_types]Landroid/util/LongSparseLongArray;Landroid/util/LongSparseLongArray;
+HSPLandroid/view/View;->requestLayout()V+]Landroid/view/View;megamorphic_types]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/ViewParent;megamorphic_types]Landroid/util/LongSparseLongArray;Landroid/util/LongSparseLongArray;
 HSPLandroid/view/View;->requestRectangleOnScreen(Landroid/graphics/Rect;)Z
-HSPLandroid/view/View;->requestRectangleOnScreen(Landroid/graphics/Rect;Z)Z
+HSPLandroid/view/View;->requestRectangleOnScreen(Landroid/graphics/Rect;Z)Z+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/view/View;missing_types]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewParent;missing_types
 HSPLandroid/view/View;->requireViewById(I)Landroid/view/View;
-HSPLandroid/view/View;->resetDisplayList()V
+HSPLandroid/view/View;->resetDisplayList()V+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->resetPressedState()V
-HSPLandroid/view/View;->resetResolvedDrawables()V
+HSPLandroid/view/View;->resetResolvedDrawables()V+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->resetResolvedDrawablesInternal()V
 HSPLandroid/view/View;->resetResolvedLayoutDirection()V
-HSPLandroid/view/View;->resetResolvedPadding()V
+HSPLandroid/view/View;->resetResolvedPadding()V+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->resetResolvedPaddingInternal()V
 HSPLandroid/view/View;->resetResolvedTextAlignment()V
 HSPLandroid/view/View;->resetResolvedTextDirection()V
-HSPLandroid/view/View;->resetRtlProperties()V
+HSPLandroid/view/View;->resetRtlProperties()V+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->resetSubtreeAccessibilityStateChanged()V
-HSPLandroid/view/View;->resolveDrawables()V
-HSPLandroid/view/View;->resolveLayoutDirection()Z
-HSPLandroid/view/View;->resolveLayoutParams()V
-HSPLandroid/view/View;->resolvePadding()V+]Landroid/view/View;missing_types]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/ColorDrawable;
-HSPLandroid/view/View;->resolveRtlPropertiesIfNeeded()Z
+HSPLandroid/view/View;->resolveDrawables()V+]Landroid/view/View;missing_types]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/view/View;->resolveLayoutDirection()Z+]Landroid/view/View;missing_types]Landroid/view/ViewParent;missing_types
+HSPLandroid/view/View;->resolveLayoutParams()V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup$LayoutParams;missing_types
+HSPLandroid/view/View;->resolvePadding()V+]Landroid/view/View;megamorphic_types]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/view/View;->resolveRtlPropertiesIfNeeded()Z+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->resolveSize(II)I
 HSPLandroid/view/View;->resolveSizeAndState(III)I
-HSPLandroid/view/View;->resolveTextAlignment()Z
-HSPLandroid/view/View;->resolveTextDirection()Z
+HSPLandroid/view/View;->resolveTextAlignment()Z+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->resolveTextDirection()Z+]Landroid/view/View;megamorphic_types]Landroid/view/ViewParent;missing_types
 HSPLandroid/view/View;->restoreHierarchyState(Landroid/util/SparseArray;)V
 HSPLandroid/view/View;->retrieveExplicitStyle(Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;)V
 HSPLandroid/view/View;->rootViewRequestFocus()Z
@@ -17445,9 +17456,9 @@
 HSPLandroid/view/View;->sanitizeFloatPropertyValue(FLjava/lang/String;FF)F
 HSPLandroid/view/View;->saveAttributeDataForStyleable(Landroid/content/Context;[ILandroid/util/AttributeSet;Landroid/content/res/TypedArray;II)V
 HSPLandroid/view/View;->saveHierarchyState(Landroid/util/SparseArray;)V
-HSPLandroid/view/View;->scheduleDrawable(Landroid/graphics/drawable/Drawable;Ljava/lang/Runnable;J)V
+HSPLandroid/view/View;->scheduleDrawable(Landroid/graphics/drawable/Drawable;Ljava/lang/Runnable;J)V+]Landroid/view/HandlerActionQueue;Landroid/view/HandlerActionQueue;]Landroid/view/Choreographer;Landroid/view/Choreographer;
 HSPLandroid/view/View;->scrollBy(II)V
-HSPLandroid/view/View;->scrollTo(II)V
+HSPLandroid/view/View;->scrollTo(II)V+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->sendAccessibilityEvent(I)V
 HSPLandroid/view/View;->sendAccessibilityEventInternal(I)V
 HSPLandroid/view/View;->setAccessibilityDelegate(Landroid/view/View$AccessibilityDelegate;)V
@@ -17457,15 +17468,15 @@
 HSPLandroid/view/View;->setAccessibilityTraversalAfter(I)V
 HSPLandroid/view/View;->setAccessibilityTraversalBefore(I)V
 HSPLandroid/view/View;->setActivated(Z)V
-HSPLandroid/view/View;->setAlpha(F)V+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
-HSPLandroid/view/View;->setAlphaInternal(F)V
-HSPLandroid/view/View;->setAlphaNoInvalidation(F)Z
+HSPLandroid/view/View;->setAlpha(F)V+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Landroid/view/View;missing_types
+HSPLandroid/view/View;->setAlphaInternal(F)V+]Landroid/view/View;missing_types
+HSPLandroid/view/View;->setAlphaNoInvalidation(F)Z+]Landroid/view/View;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->setAnimation(Landroid/view/animation/Animation;)V
 HSPLandroid/view/View;->setAutofilled(ZZ)V
 HSPLandroid/view/View;->setBackground(Landroid/graphics/drawable/Drawable;)V
-HSPLandroid/view/View;->setBackgroundBounds()V
+HSPLandroid/view/View;->setBackgroundBounds()V+]Landroid/graphics/drawable/Drawable;megamorphic_types
 HSPLandroid/view/View;->setBackgroundColor(I)V
-HSPLandroid/view/View;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/view/View;missing_types]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/RippleDrawable;,Landroid/graphics/drawable/ColorDrawable;,Landroid/graphics/drawable/StateListDrawable;
+HSPLandroid/view/View;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;]Landroid/graphics/drawable/Drawable;megamorphic_types]Landroid/view/View;missing_types
 HSPLandroid/view/View;->setBackgroundRenderNodeProperties(Landroid/graphics/RenderNode;)V+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->setBackgroundResource(I)V
 HSPLandroid/view/View;->setBackgroundTintList(Landroid/content/res/ColorStateList;)V
@@ -17473,28 +17484,28 @@
 HSPLandroid/view/View;->setClickable(Z)V
 HSPLandroid/view/View;->setClipBounds(Landroid/graphics/Rect;)V
 HSPLandroid/view/View;->setClipToOutline(Z)V
-HSPLandroid/view/View;->setContentDescription(Ljava/lang/CharSequence;)V
+HSPLandroid/view/View;->setContentDescription(Ljava/lang/CharSequence;)V+]Landroid/view/View;missing_types]Ljava/lang/Object;Ljava/lang/String;,Ljava/lang/StringBuilder;]Ljava/lang/CharSequence;Ljava/lang/String;,Ljava/lang/StringBuilder;
 HSPLandroid/view/View;->setDefaultFocusHighlightEnabled(Z)V
 HSPLandroid/view/View;->setDetached(Z)V
 HSPLandroid/view/View;->setDisplayListProperties(Landroid/graphics/RenderNode;)V+]Landroid/view/View;megamorphic_types]Landroid/view/ViewGroup;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->setDrawingCacheEnabled(Z)V
-HSPLandroid/view/View;->setElevation(F)V
+HSPLandroid/view/View;->setElevation(F)V+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->setEnabled(Z)V
 HSPLandroid/view/View;->setFitsSystemWindows(Z)V
-HSPLandroid/view/View;->setFlags(II)V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;]Landroid/view/ViewParent;missing_types
+HSPLandroid/view/View;->setFlags(II)V+]Landroid/view/View;megamorphic_types]Landroid/view/ViewGroup;missing_types]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;]Landroid/view/ViewParent;missing_types
 HSPLandroid/view/View;->setFocusable(I)V
 HSPLandroid/view/View;->setFocusable(Z)V
 HSPLandroid/view/View;->setFocusableInTouchMode(Z)V
-HSPLandroid/view/View;->setForeground(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/view/View;->setForeground(Landroid/graphics/drawable/Drawable;)V+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;,Landroid/graphics/drawable/StateListDrawable;,Landroid/graphics/drawable/InsetDrawable;]Landroid/view/View;missing_types
 HSPLandroid/view/View;->setForegroundGravity(I)V
-HSPLandroid/view/View;->setFrame(IIII)Z
+HSPLandroid/view/View;->setFrame(IIII)Z+]Landroid/view/View;megamorphic_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->setHandwritingArea(Landroid/graphics/Rect;)V
 HSPLandroid/view/View;->setHapticFeedbackEnabled(Z)V
 HSPLandroid/view/View;->setHasTransientState(Z)V
 HSPLandroid/view/View;->setHorizontalFadingEdgeEnabled(Z)V
 HSPLandroid/view/View;->setHorizontalScrollBarEnabled(Z)V
 HSPLandroid/view/View;->setId(I)V
-HSPLandroid/view/View;->setImportantForAccessibility(I)V
+HSPLandroid/view/View;->setImportantForAccessibility(I)V+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->setImportantForAutofill(I)V
 HSPLandroid/view/View;->setImportantForContentCapture(I)V
 HSPLandroid/view/View;->setIsRootNamespace(Z)V
@@ -17504,7 +17515,7 @@
 HSPLandroid/view/View;->setLayerPaint(Landroid/graphics/Paint;)V
 HSPLandroid/view/View;->setLayerType(ILandroid/graphics/Paint;)V
 HSPLandroid/view/View;->setLayoutDirection(I)V
-HSPLandroid/view/View;->setLayoutParams(Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/view/View;->setLayoutParams(Landroid/view/ViewGroup$LayoutParams;)V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/View;->setLeft(I)V+]Landroid/view/View;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->setLeftTopRightBottom(IIII)V
 HSPLandroid/view/View;->setLongClickable(Z)V
@@ -17514,7 +17525,7 @@
 HSPLandroid/view/View;->setMinimumWidth(I)V
 HSPLandroid/view/View;->setNotifiedContentCaptureAppeared()V
 HSPLandroid/view/View;->setOnApplyWindowInsetsListener(Landroid/view/View$OnApplyWindowInsetsListener;)V
-HSPLandroid/view/View;->setOnClickListener(Landroid/view/View$OnClickListener;)V
+HSPLandroid/view/View;->setOnClickListener(Landroid/view/View$OnClickListener;)V+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->setOnCreateContextMenuListener(Landroid/view/View$OnCreateContextMenuListener;)V
 HSPLandroid/view/View;->setOnDragListener(Landroid/view/View$OnDragListener;)V
 HSPLandroid/view/View;->setOnFocusChangeListener(Landroid/view/View$OnFocusChangeListener;)V
@@ -17524,12 +17535,12 @@
 HSPLandroid/view/View;->setOnScrollChangeListener(Landroid/view/View$OnScrollChangeListener;)V
 HSPLandroid/view/View;->setOnSystemUiVisibilityChangeListener(Landroid/view/View$OnSystemUiVisibilityChangeListener;)V
 HSPLandroid/view/View;->setOnTouchListener(Landroid/view/View$OnTouchListener;)V
-HSPLandroid/view/View;->setOutlineAmbientShadowColor(I)V
+HSPLandroid/view/View;->setOutlineAmbientShadowColor(I)V+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->setOutlineProvider(Landroid/view/ViewOutlineProvider;)V
 HSPLandroid/view/View;->setOutlineProviderFromAttribute(I)V
-HSPLandroid/view/View;->setOutlineSpotShadowColor(I)V
+HSPLandroid/view/View;->setOutlineSpotShadowColor(I)V+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->setOverScrollMode(I)V
-HSPLandroid/view/View;->setPadding(IIII)V
+HSPLandroid/view/View;->setPadding(IIII)V+]Landroid/view/View;missing_types
 HSPLandroid/view/View;->setPaddingRelative(IIII)V
 HSPLandroid/view/View;->setPivotX(F)V
 HSPLandroid/view/View;->setPivotY(F)V
@@ -17543,7 +17554,7 @@
 HSPLandroid/view/View;->setSaveEnabled(Z)V
 HSPLandroid/view/View;->setSaveFromParentEnabled(Z)V
 HSPLandroid/view/View;->setScaleX(F)V
-HSPLandroid/view/View;->setScaleY(F)V
+HSPLandroid/view/View;->setScaleY(F)V+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->setScrollContainer(Z)V
 HSPLandroid/view/View;->setScrollIndicators(II)V
 HSPLandroid/view/View;->setScrollX(I)V
@@ -17561,7 +17572,7 @@
 HSPLandroid/view/View;->setTooltipText(Ljava/lang/CharSequence;)V+]Landroid/view/ViewConfiguration;Landroid/view/ViewConfiguration;
 HSPLandroid/view/View;->setTop(I)V
 HSPLandroid/view/View;->setTouchDelegate(Landroid/view/TouchDelegate;)V
-HSPLandroid/view/View;->setTransitionAlpha(F)V
+HSPLandroid/view/View;->setTransitionAlpha(F)V+]Landroid/view/View;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/View;->setTransitionName(Ljava/lang/String;)V
 HSPLandroid/view/View;->setTransitionVisibility(I)V
 HSPLandroid/view/View;->setTranslationX(F)V+]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
@@ -17572,19 +17583,19 @@
 HSPLandroid/view/View;->setWillNotDraw(Z)V
 HSPLandroid/view/View;->setX(F)V
 HSPLandroid/view/View;->setY(F)V
-HSPLandroid/view/View;->shouldDrawRoundScrollbar()Z
-HSPLandroid/view/View;->sizeChange(IIII)V
+HSPLandroid/view/View;->shouldDrawRoundScrollbar()Z+]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
+HSPLandroid/view/View;->sizeChange(IIII)V+]Landroid/view/ViewOverlay;Landroid/view/ViewGroupOverlay;]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/View;->skipInvalidate()Z+]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/View;->startAnimation(Landroid/view/animation/Animation;)V
 HSPLandroid/view/View;->startNestedScroll(I)Z
 HSPLandroid/view/View;->stopNestedScroll()V
 HSPLandroid/view/View;->switchDefaultFocusHighlight()V
-HSPLandroid/view/View;->toString()Ljava/lang/String;
+HSPLandroid/view/View;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/View;missing_types]Ljava/lang/Object;missing_types]Landroid/content/res/Resources;Landroid/content/res/Resources;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/view/View;->transformFromViewToWindowSpace([I)V+]Landroid/view/View;missing_types]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
 HSPLandroid/view/View;->unFocus(Landroid/view/View;)V
 HSPLandroid/view/View;->unscheduleDrawable(Landroid/graphics/drawable/Drawable;)V
-HSPLandroid/view/View;->unscheduleDrawable(Landroid/graphics/drawable/Drawable;Ljava/lang/Runnable;)V
-HSPLandroid/view/View;->updateDisplayListIfDirty()Landroid/graphics/RenderNode;+]Landroid/view/View;megamorphic_types]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
+HSPLandroid/view/View;->unscheduleDrawable(Landroid/graphics/drawable/Drawable;Ljava/lang/Runnable;)V+]Landroid/view/HandlerActionQueue;Landroid/view/HandlerActionQueue;]Landroid/view/Choreographer;Landroid/view/Choreographer;
+HSPLandroid/view/View;->updateDisplayListIfDirty()Landroid/graphics/RenderNode;+]Landroid/view/View;megamorphic_types]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;]Landroid/view/ViewOverlay;Landroid/view/ViewGroupOverlay;]Landroid/view/ViewGroup;Landroid/view/ViewOverlay$OverlayViewGroup;
 HSPLandroid/view/View;->updateFocusedInCluster(Landroid/view/View;I)V
 HSPLandroid/view/View;->updateHandwritingArea()V+]Landroid/view/HandwritingInitiator;Landroid/view/HandwritingInitiator;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/View;missing_types
 HSPLandroid/view/View;->updateKeepClearRects()V+]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
@@ -17600,7 +17611,7 @@
 HSPLandroid/view/ViewAnimationHostBridge;->registerAnimatingRenderNode(Landroid/graphics/RenderNode;)V
 HSPLandroid/view/ViewAnimationHostBridge;->registerVectorDrawableAnimator(Landroid/view/NativeVectorDrawableAnimator;)V
 HSPLandroid/view/ViewConfiguration;-><init>(Landroid/content/Context;)V
-HSPLandroid/view/ViewConfiguration;->get(Landroid/content/Context;)Landroid/view/ViewConfiguration;
+HSPLandroid/view/ViewConfiguration;->get(Landroid/content/Context;)Landroid/view/ViewConfiguration;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/Context;missing_types
 HSPLandroid/view/ViewConfiguration;->getDoubleTapTimeout()I
 HSPLandroid/view/ViewConfiguration;->getLongPressTimeout()I
 HSPLandroid/view/ViewConfiguration;->getPressedStateDuration()I
@@ -17627,6 +17638,7 @@
 HSPLandroid/view/ViewConfiguration;->getScrollFriction()F
 HSPLandroid/view/ViewConfiguration;->getTapTimeout()I
 HSPLandroid/view/ViewConfiguration;->isFadingMarqueeEnabled()Z
+HSPLandroid/view/ViewConfiguration;->isPreferKeepClearForFocusEnabled()Z
 HSPLandroid/view/ViewDebug;->getViewInstanceCount()J
 HSPLandroid/view/ViewDebug;->getViewRootImplCount()J
 HSPLandroid/view/ViewFrameInfo;-><init>()V
@@ -17645,9 +17657,9 @@
 HSPLandroid/view/ViewGroup$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/view/ViewGroup$LayoutParams;-><init>(Landroid/view/ViewGroup$LayoutParams;)V
 HSPLandroid/view/ViewGroup$LayoutParams;->resolveLayoutDirection(I)V
-HSPLandroid/view/ViewGroup$LayoutParams;->setBaseAttributes(Landroid/content/res/TypedArray;II)V
+HSPLandroid/view/ViewGroup$LayoutParams;->setBaseAttributes(Landroid/content/res/TypedArray;II)V+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/view/ViewGroup$MarginLayoutParams;-><init>(II)V
-HSPLandroid/view/ViewGroup$MarginLayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V+]Landroid/view/ViewGroup$MarginLayoutParams;missing_types]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/content/Context;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLandroid/view/ViewGroup$MarginLayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V+]Landroid/view/ViewGroup$MarginLayoutParams;missing_types]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/Context;missing_types
 HSPLandroid/view/ViewGroup$MarginLayoutParams;-><init>(Landroid/view/ViewGroup$LayoutParams;)V
 HSPLandroid/view/ViewGroup$MarginLayoutParams;-><init>(Landroid/view/ViewGroup$MarginLayoutParams;)V
 HSPLandroid/view/ViewGroup$MarginLayoutParams;->doResolveMargins()V
@@ -17655,7 +17667,7 @@
 HSPLandroid/view/ViewGroup$MarginLayoutParams;->getMarginEnd()I
 HSPLandroid/view/ViewGroup$MarginLayoutParams;->getMarginStart()I
 HSPLandroid/view/ViewGroup$MarginLayoutParams;->isMarginRelative()Z
-HSPLandroid/view/ViewGroup$MarginLayoutParams;->resolveLayoutDirection(I)V
+HSPLandroid/view/ViewGroup$MarginLayoutParams;->resolveLayoutDirection(I)V+]Landroid/view/ViewGroup$MarginLayoutParams;missing_types
 HSPLandroid/view/ViewGroup$MarginLayoutParams;->setLayoutDirection(I)V
 HSPLandroid/view/ViewGroup$MarginLayoutParams;->setMarginEnd(I)V
 HSPLandroid/view/ViewGroup$MarginLayoutParams;->setMarginStart(I)V
@@ -17667,26 +17679,26 @@
 HSPLandroid/view/ViewGroup;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/view/ViewGroup;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
 HSPLandroid/view/ViewGroup;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HSPLandroid/view/ViewGroup;->addFocusables(Ljava/util/ArrayList;II)V
+HSPLandroid/view/ViewGroup;->addFocusables(Ljava/util/ArrayList;II)V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/ViewGroup;->addInArray(Landroid/view/View;I)V
 HSPLandroid/view/ViewGroup;->addTouchTarget(Landroid/view/View;I)Landroid/view/ViewGroup$TouchTarget;
 HSPLandroid/view/ViewGroup;->addView(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->addView(Landroid/view/View;I)V
 HSPLandroid/view/ViewGroup;->addView(Landroid/view/View;II)V
-HSPLandroid/view/ViewGroup;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V
-HSPLandroid/view/ViewGroup;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/view/ViewGroup;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V+]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V+]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/ViewGroup;->addViewInLayout(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)Z
 HSPLandroid/view/ViewGroup;->addViewInLayout(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;Z)Z
-HSPLandroid/view/ViewGroup;->addViewInner(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;Z)V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
-HSPLandroid/view/ViewGroup;->attachViewToParent(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V
+HSPLandroid/view/ViewGroup;->addViewInner(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;Z)V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;megamorphic_types]Landroid/animation/LayoutTransition;Landroid/animation/LayoutTransition;
+HSPLandroid/view/ViewGroup;->attachViewToParent(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V+]Landroid/view/View;missing_types
 HSPLandroid/view/ViewGroup;->bringChildToFront(Landroid/view/View;)V
-HSPLandroid/view/ViewGroup;->buildOrderedChildList()Ljava/util/ArrayList;
+HSPLandroid/view/ViewGroup;->buildOrderedChildList()Ljava/util/ArrayList;+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/ViewGroup;->buildTouchDispatchChildList()Ljava/util/ArrayList;
 HSPLandroid/view/ViewGroup;->cancelAndClearTouchTargets(Landroid/view/MotionEvent;)V
 HSPLandroid/view/ViewGroup;->cancelHoverTarget(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->cancelTouchTarget(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
-HSPLandroid/view/ViewGroup;->childDrawableStateChanged(Landroid/view/View;)V
+HSPLandroid/view/ViewGroup;->childDrawableStateChanged(Landroid/view/View;)V+]Landroid/view/ViewGroup;Landroid/widget/FrameLayout;
 HSPLandroid/view/ViewGroup;->childHasTransientStateChanged(Landroid/view/View;Z)V
 HSPLandroid/view/ViewGroup;->cleanupLayoutState(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->clearCachedLayoutMode()V
@@ -17699,42 +17711,42 @@
 HSPLandroid/view/ViewGroup;->detachAllViewsFromParent()V
 HSPLandroid/view/ViewGroup;->detachViewFromParent(I)V
 HSPLandroid/view/ViewGroup;->dispatchApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;
-HSPLandroid/view/ViewGroup;->dispatchAttachedToWindow(Landroid/view/View$AttachInfo;I)V
+HSPLandroid/view/ViewGroup;->dispatchAttachedToWindow(Landroid/view/View$AttachInfo;I)V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/ViewGroup;->dispatchCancelPendingInputEvents()V
 HSPLandroid/view/ViewGroup;->dispatchCollectViewAttributes(Landroid/view/View$AttachInfo;I)V+]Landroid/view/View;missing_types
 HSPLandroid/view/ViewGroup;->dispatchConfigurationChanged(Landroid/content/res/Configuration;)V
-HSPLandroid/view/ViewGroup;->dispatchDetachedFromWindow()V
-HSPLandroid/view/ViewGroup;->dispatchDraw(Landroid/graphics/Canvas;)V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
+HSPLandroid/view/ViewGroup;->dispatchDetachedFromWindow()V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->dispatchDraw(Landroid/graphics/Canvas;)V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;,Landroid/graphics/Picture$PictureCanvas;,Landroid/graphics/Canvas;]Landroid/view/animation/LayoutAnimationController;Landroid/view/animation/LayoutAnimationController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/ViewGroup;->dispatchDrawableHotspotChanged(FF)V
 HSPLandroid/view/ViewGroup;->dispatchFinishTemporaryDetach()V
 HSPLandroid/view/ViewGroup;->dispatchFreezeSelfOnly(Landroid/util/SparseArray;)V
-HSPLandroid/view/ViewGroup;->dispatchGetDisplayList()V+]Landroid/view/View;missing_types
+HSPLandroid/view/ViewGroup;->dispatchGetDisplayList()V+]Landroid/view/View;megamorphic_types]Landroid/view/ViewOverlay;Landroid/view/ViewGroupOverlay;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/ViewGroup;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
 HSPLandroid/view/ViewGroup;->dispatchKeyEventPreIme(Landroid/view/KeyEvent;)Z
 HSPLandroid/view/ViewGroup;->dispatchProvideAutofillStructure(Landroid/view/ViewStructure;I)V
 HSPLandroid/view/ViewGroup;->dispatchProvideContentCaptureStructure()V
 HSPLandroid/view/ViewGroup;->dispatchRestoreInstanceState(Landroid/util/SparseArray;)V
 HSPLandroid/view/ViewGroup;->dispatchSaveInstanceState(Landroid/util/SparseArray;)V
-HSPLandroid/view/ViewGroup;->dispatchScreenStateChanged(I)V
+HSPLandroid/view/ViewGroup;->dispatchScreenStateChanged(I)V+]Landroid/view/View;missing_types
 HSPLandroid/view/ViewGroup;->dispatchSetActivated(Z)V
 HSPLandroid/view/ViewGroup;->dispatchSetPressed(Z)V
 HSPLandroid/view/ViewGroup;->dispatchSetSelected(Z)V
 HSPLandroid/view/ViewGroup;->dispatchStartTemporaryDetach()V
 HSPLandroid/view/ViewGroup;->dispatchSystemUiVisibilityChanged(I)V
 HSPLandroid/view/ViewGroup;->dispatchThawSelfOnly(Landroid/util/SparseArray;)V
-HSPLandroid/view/ViewGroup;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z+]Landroid/view/View;megamorphic_types]Landroid/view/ViewGroup;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
+HSPLandroid/view/ViewGroup;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z+]Landroid/view/View;megamorphic_types]Landroid/view/ViewGroup;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;]Landroid/view/ViewGroup$TouchTarget;Landroid/view/ViewGroup$TouchTarget;
 HSPLandroid/view/ViewGroup;->dispatchTransformedTouchEvent(Landroid/view/MotionEvent;ZLandroid/view/View;I)Z+]Landroid/view/View;missing_types]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/ViewGroup;->dispatchUnhandledKeyEvent(Landroid/view/KeyEvent;)Landroid/view/View;
-HSPLandroid/view/ViewGroup;->dispatchViewAdded(Landroid/view/View;)V
+HSPLandroid/view/ViewGroup;->dispatchViewAdded(Landroid/view/View;)V+]Landroid/view/ViewGroup$OnHierarchyChangeListener;missing_types]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/ViewGroup;->dispatchViewRemoved(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->dispatchVisibilityAggregated(Z)Z+]Landroid/view/View;missing_types
 HSPLandroid/view/ViewGroup;->dispatchVisibilityChanged(Landroid/view/View;I)V+]Landroid/view/View;missing_types
-HSPLandroid/view/ViewGroup;->dispatchWindowFocusChanged(Z)V
+HSPLandroid/view/ViewGroup;->dispatchWindowFocusChanged(Z)V+]Landroid/view/View;megamorphic_types
 HSPLandroid/view/ViewGroup;->dispatchWindowInsetsAnimationEnd(Landroid/view/WindowInsetsAnimation;)V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/ViewGroup;->dispatchWindowSystemUiVisiblityChanged(I)V
 HSPLandroid/view/ViewGroup;->dispatchWindowVisibilityChanged(I)V+]Landroid/view/View;missing_types
 HSPLandroid/view/ViewGroup;->drawChild(Landroid/graphics/Canvas;Landroid/view/View;J)Z+]Landroid/view/View;missing_types
-HSPLandroid/view/ViewGroup;->drawableStateChanged()V
+HSPLandroid/view/ViewGroup;->drawableStateChanged()V+]Landroid/view/View;Landroid/widget/ImageView;
 HSPLandroid/view/ViewGroup;->endViewTransition(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->exitHoverTargets()V
 HSPLandroid/view/ViewGroup;->exitTooltipHoverTargets()V
@@ -17745,12 +17757,12 @@
 HSPLandroid/view/ViewGroup;->finishAnimatingView(Landroid/view/View;Landroid/view/animation/Animation;)V
 HSPLandroid/view/ViewGroup;->focusSearch(Landroid/view/View;I)Landroid/view/View;
 HSPLandroid/view/ViewGroup;->focusableViewAvailable(Landroid/view/View;)V
-HSPLandroid/view/ViewGroup;->gatherTransparentRegion(Landroid/graphics/Region;)Z
+HSPLandroid/view/ViewGroup;->gatherTransparentRegion(Landroid/graphics/Region;)Z+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/ViewGroup;->generateDefaultLayoutParams()Landroid/view/ViewGroup$LayoutParams;
 HSPLandroid/view/ViewGroup;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams;
 HSPLandroid/view/ViewGroup;->getAccessibilityClassName()Ljava/lang/CharSequence;
 HSPLandroid/view/ViewGroup;->getAndVerifyPreorderedIndex(IIZ)I
-HSPLandroid/view/ViewGroup;->getAndVerifyPreorderedView(Ljava/util/ArrayList;[Landroid/view/View;I)Landroid/view/View;
+HSPLandroid/view/ViewGroup;->getAndVerifyPreorderedView(Ljava/util/ArrayList;[Landroid/view/View;I)Landroid/view/View;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/ViewGroup;->getChildAt(I)Landroid/view/View;
 HSPLandroid/view/ViewGroup;->getChildCount()I
 HSPLandroid/view/ViewGroup;->getChildMeasureSpec(III)I
@@ -17773,17 +17785,17 @@
 HSPLandroid/view/ViewGroup;->getTouchscreenBlocksFocus()Z
 HSPLandroid/view/ViewGroup;->handleFocusGainInternal(ILandroid/graphics/Rect;)V
 HSPLandroid/view/ViewGroup;->hasBooleanFlag(I)Z
-HSPLandroid/view/ViewGroup;->hasChildWithZ()Z
+HSPLandroid/view/ViewGroup;->hasChildWithZ()Z+]Landroid/view/View;missing_types
 HSPLandroid/view/ViewGroup;->hasDefaultFocus()Z
 HSPLandroid/view/ViewGroup;->hasFocus()Z
-HSPLandroid/view/ViewGroup;->hasFocusable(ZZ)Z
-HSPLandroid/view/ViewGroup;->hasFocusableChild(Z)Z
+HSPLandroid/view/ViewGroup;->hasFocusable(ZZ)Z+]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->hasFocusableChild(Z)Z+]Landroid/view/View;missing_types
 HSPLandroid/view/ViewGroup;->hasTransientState()Z
 HSPLandroid/view/ViewGroup;->hasUnhandledKeyListener()Z
 HSPLandroid/view/ViewGroup;->hasWindowInsetsAnimationCallback()Z
 HSPLandroid/view/ViewGroup;->indexOfChild(Landroid/view/View;)I
-HSPLandroid/view/ViewGroup;->initFromAttributes(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HSPLandroid/view/ViewGroup;->initViewGroup()V+]Landroid/view/ViewGroup;missing_types]Landroid/content/Context;Landroid/view/ContextThemeWrapper;
+HSPLandroid/view/ViewGroup;->initFromAttributes(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/view/ViewGroup;missing_types]Landroid/content/Context;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLandroid/view/ViewGroup;->initViewGroup()V+]Landroid/view/ViewGroup;missing_types]Landroid/content/Context;missing_types
 HSPLandroid/view/ViewGroup;->internalSetPadding(IIII)V
 HSPLandroid/view/ViewGroup;->invalidateChild(Landroid/view/View;Landroid/graphics/Rect;)V+]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/ViewGroup;->invalidateChildInParent([ILandroid/graphics/Rect;)Landroid/view/ViewParent;
@@ -17793,23 +17805,23 @@
 HSPLandroid/view/ViewGroup;->isTransformedTouchPointInView(FFLandroid/view/View;Landroid/graphics/PointF;)Z
 HSPLandroid/view/ViewGroup;->isViewTransitioning(Landroid/view/View;)Z
 HSPLandroid/view/ViewGroup;->jumpDrawablesToCurrentState()V+]Landroid/view/View;megamorphic_types
-HSPLandroid/view/ViewGroup;->layout(IIII)V
+HSPLandroid/view/ViewGroup;->layout(IIII)V+]Landroid/animation/LayoutTransition;Landroid/animation/LayoutTransition;
 HSPLandroid/view/ViewGroup;->makeFrameworkOptionalFitsSystemWindows()V
 HSPLandroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V
 HSPLandroid/view/ViewGroup;->measureChild(Landroid/view/View;II)V
-HSPLandroid/view/ViewGroup;->measureChildWithMargins(Landroid/view/View;IIII)V
+HSPLandroid/view/ViewGroup;->measureChildWithMargins(Landroid/view/View;IIII)V+]Landroid/view/View;missing_types
 HSPLandroid/view/ViewGroup;->measureChildren(II)V
 HSPLandroid/view/ViewGroup;->newDispatchApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/ViewGroup;->notifySubtreeAccessibilityStateChangedIfNeeded()V+]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;
 HSPLandroid/view/ViewGroup;->offsetDescendantRectToMyCoords(Landroid/view/View;Landroid/graphics/Rect;)V
-HSPLandroid/view/ViewGroup;->offsetRectBetweenParentAndChild(Landroid/view/View;Landroid/graphics/Rect;ZZ)V
+HSPLandroid/view/ViewGroup;->offsetRectBetweenParentAndChild(Landroid/view/View;Landroid/graphics/Rect;ZZ)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/view/ViewGroup;->onAttachedToWindow()V
 HSPLandroid/view/ViewGroup;->onChildVisibilityChanged(Landroid/view/View;II)V
-HSPLandroid/view/ViewGroup;->onCreateDrawableState(I)[I
+HSPLandroid/view/ViewGroup;->onCreateDrawableState(I)[I+]Landroid/view/View;Landroid/widget/ImageView;]Landroid/view/ViewGroup;Landroid/widget/FrameLayout;
 HSPLandroid/view/ViewGroup;->onDescendantInvalidated(Landroid/view/View;Landroid/view/View;)V+]Landroid/view/ViewParent;missing_types
 HSPLandroid/view/ViewGroup;->onDescendantUnbufferedRequested()V
 HSPLandroid/view/ViewGroup;->onDetachedFromWindow()V
-HSPLandroid/view/ViewGroup;->onInterceptTouchEvent(Landroid/view/MotionEvent;)Z
+HSPLandroid/view/ViewGroup;->onInterceptTouchEvent(Landroid/view/MotionEvent;)Z+]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/ViewGroup;->onRequestFocusInDescendants(ILandroid/graphics/Rect;)Z
 HSPLandroid/view/ViewGroup;->onSetLayoutParams(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
 HSPLandroid/view/ViewGroup;->onStartNestedScroll(Landroid/view/View;Landroid/view/View;I)Z
@@ -17828,7 +17840,7 @@
 HSPLandroid/view/ViewGroup;->removeView(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->removeViewAt(I)V
 HSPLandroid/view/ViewGroup;->removeViewInLayout(Landroid/view/View;)V
-HSPLandroid/view/ViewGroup;->removeViewInternal(ILandroid/view/View;)V
+HSPLandroid/view/ViewGroup;->removeViewInternal(ILandroid/view/View;)V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/ViewGroup;->removeViewInternal(Landroid/view/View;)Z
 HSPLandroid/view/ViewGroup;->requestChildFocus(Landroid/view/View;Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->requestChildRectangleOnScreen(Landroid/view/View;Landroid/graphics/Rect;Z)Z
@@ -17837,44 +17849,44 @@
 HSPLandroid/view/ViewGroup;->requestTransitionStart(Landroid/animation/LayoutTransition;)V
 HSPLandroid/view/ViewGroup;->requestTransparentRegion(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->resetCancelNextUpFlag(Landroid/view/View;)Z
-HSPLandroid/view/ViewGroup;->resetResolvedDrawables()V
-HSPLandroid/view/ViewGroup;->resetResolvedLayoutDirection()V
-HSPLandroid/view/ViewGroup;->resetResolvedPadding()V
-HSPLandroid/view/ViewGroup;->resetResolvedTextAlignment()V
-HSPLandroid/view/ViewGroup;->resetResolvedTextDirection()V
-HSPLandroid/view/ViewGroup;->resetSubtreeAccessibilityStateChanged()V
+HSPLandroid/view/ViewGroup;->resetResolvedDrawables()V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;megamorphic_types
+HSPLandroid/view/ViewGroup;->resetResolvedLayoutDirection()V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->resetResolvedPadding()V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->resetResolvedTextAlignment()V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->resetResolvedTextDirection()V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;megamorphic_types
+HSPLandroid/view/ViewGroup;->resetSubtreeAccessibilityStateChanged()V+]Landroid/view/View;missing_types
 HSPLandroid/view/ViewGroup;->resetTouchState()V
-HSPLandroid/view/ViewGroup;->resolveDrawables()V
-HSPLandroid/view/ViewGroup;->resolveLayoutDirection()Z
-HSPLandroid/view/ViewGroup;->resolveLayoutParams()V
-HSPLandroid/view/ViewGroup;->resolvePadding()V
-HSPLandroid/view/ViewGroup;->resolveRtlPropertiesIfNeeded()Z
-HSPLandroid/view/ViewGroup;->resolveTextAlignment()Z
-HSPLandroid/view/ViewGroup;->resolveTextDirection()Z
+HSPLandroid/view/ViewGroup;->resolveDrawables()V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->resolveLayoutDirection()Z+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->resolveLayoutParams()V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;megamorphic_types
+HSPLandroid/view/ViewGroup;->resolvePadding()V+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->resolveRtlPropertiesIfNeeded()Z+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->resolveTextAlignment()Z+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
+HSPLandroid/view/ViewGroup;->resolveTextDirection()Z+]Landroid/view/View;missing_types]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/ViewGroup;->restoreDefaultFocus()Z
 HSPLandroid/view/ViewGroup;->setAddStatesFromChildren(Z)V
 HSPLandroid/view/ViewGroup;->setAlwaysDrawnWithCacheEnabled(Z)V
 HSPLandroid/view/ViewGroup;->setBooleanFlag(IZ)V
 HSPLandroid/view/ViewGroup;->setChildrenDrawingCacheEnabled(Z)V
 HSPLandroid/view/ViewGroup;->setChildrenDrawingOrderEnabled(Z)V
-HSPLandroid/view/ViewGroup;->setClipChildren(Z)V
+HSPLandroid/view/ViewGroup;->setClipChildren(Z)V+]Landroid/view/ViewGroup;missing_types]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/view/ViewGroup;->setClipToPadding(Z)V
 HSPLandroid/view/ViewGroup;->setDescendantFocusability(I)V
 HSPLandroid/view/ViewGroup;->setLayoutTransition(Landroid/animation/LayoutTransition;)V
 HSPLandroid/view/ViewGroup;->setMotionEventSplittingEnabled(Z)V
 HSPLandroid/view/ViewGroup;->setOnHierarchyChangeListener(Landroid/view/ViewGroup$OnHierarchyChangeListener;)V
 HSPLandroid/view/ViewGroup;->setTouchscreenBlocksFocus(Z)V
-HSPLandroid/view/ViewGroup;->shouldBlockFocusForTouchscreen()Z
+HSPLandroid/view/ViewGroup;->shouldBlockFocusForTouchscreen()Z+]Landroid/view/ViewGroup;missing_types
 HSPLandroid/view/ViewGroup;->shouldDelayChildPressedState()Z
 HSPLandroid/view/ViewGroup;->startViewTransition(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->suppressLayout(Z)V
-HSPLandroid/view/ViewGroup;->touchAccessibilityNodeProviderIfNeeded(Landroid/view/View;)V
-HSPLandroid/view/ViewGroup;->transformPointToViewLocal([FLandroid/view/View;)V
+HSPLandroid/view/ViewGroup;->touchAccessibilityNodeProviderIfNeeded(Landroid/view/View;)V+]Landroid/content/Context;missing_types
+HSPLandroid/view/ViewGroup;->transformPointToViewLocal([FLandroid/view/View;)V+]Landroid/view/View;missing_types
 HSPLandroid/view/ViewGroup;->unFocus(Landroid/view/View;)V
 HSPLandroid/view/ViewGroup;->updateLocalSystemUiVisibility(II)Z
 HSPLandroid/view/ViewGroupOverlay;->add(Landroid/view/View;)V
 HSPLandroid/view/ViewGroupOverlay;->remove(Landroid/view/View;)V
-HSPLandroid/view/ViewOutlineProvider$1;->getOutline(Landroid/view/View;Landroid/graphics/Outline;)V+]Landroid/view/View;Lcom/android/internal/policy/DecorView;,Landroid/view/View;,Landroid/widget/Button;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/RippleDrawable;,Landroid/graphics/drawable/ColorDrawable;
+HSPLandroid/view/ViewOutlineProvider$1;->getOutline(Landroid/view/View;Landroid/graphics/Outline;)V+]Landroid/view/View;megamorphic_types]Landroid/graphics/Outline;Landroid/graphics/Outline;]Landroid/graphics/drawable/Drawable;megamorphic_types
 HSPLandroid/view/ViewOutlineProvider$2;->getOutline(Landroid/view/View;Landroid/graphics/Outline;)V
 HSPLandroid/view/ViewOutlineProvider;-><init>()V
 HSPLandroid/view/ViewOverlay$OverlayViewGroup;-><init>(Landroid/content/Context;Landroid/view/View;)V
@@ -17898,9 +17910,9 @@
 HSPLandroid/view/ViewPropertyAnimator$3;->run()V
 HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;-><init>(Landroid/view/ViewPropertyAnimator;)V
 HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;->onAnimationCancel(Landroid/animation/Animator;)V
-HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;->onAnimationEnd(Landroid/animation/Animator;)V
+HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;->onAnimationEnd(Landroid/animation/Animator;)V+]Ljava/util/HashMap;Ljava/util/HashMap;
 HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;->onAnimationStart(Landroid/animation/Animator;)V
-HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V
+HSPLandroid/view/ViewPropertyAnimator$AnimatorEventListener;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/ValueAnimator;Landroid/animation/ValueAnimator;]Landroid/view/View;missing_types
 HSPLandroid/view/ViewPropertyAnimator$NameValuesHolder;-><init>(IFF)V
 HSPLandroid/view/ViewPropertyAnimator$PropertyBundle;-><init>(ILjava/util/ArrayList;)V
 HSPLandroid/view/ViewPropertyAnimator$PropertyBundle;->cancel(I)Z
@@ -17908,7 +17920,7 @@
 HSPLandroid/view/ViewPropertyAnimator;->alpha(F)Landroid/view/ViewPropertyAnimator;
 HSPLandroid/view/ViewPropertyAnimator;->animateProperty(IF)V
 HSPLandroid/view/ViewPropertyAnimator;->animatePropertyBy(IFF)V
-HSPLandroid/view/ViewPropertyAnimator;->cancel()V
+HSPLandroid/view/ViewPropertyAnimator;->cancel()V+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;]Ljava/util/Set;Ljava/util/HashMap$KeySet;]Landroid/animation/Animator;Landroid/animation/ValueAnimator;
 HSPLandroid/view/ViewPropertyAnimator;->getValue(I)F
 HSPLandroid/view/ViewPropertyAnimator;->scaleX(F)Landroid/view/ViewPropertyAnimator;
 HSPLandroid/view/ViewPropertyAnimator;->scaleY(F)Landroid/view/ViewPropertyAnimator;
@@ -17918,7 +17930,7 @@
 HSPLandroid/view/ViewPropertyAnimator;->setStartDelay(J)Landroid/view/ViewPropertyAnimator;
 HSPLandroid/view/ViewPropertyAnimator;->setValue(IF)V
 HSPLandroid/view/ViewPropertyAnimator;->start()V
-HSPLandroid/view/ViewPropertyAnimator;->startAnimation()V
+HSPLandroid/view/ViewPropertyAnimator;->startAnimation()V+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/animation/ValueAnimator;Landroid/animation/ValueAnimator;]Landroid/view/View;missing_types
 HSPLandroid/view/ViewPropertyAnimator;->translationX(F)Landroid/view/ViewPropertyAnimator;
 HSPLandroid/view/ViewPropertyAnimator;->translationY(F)Landroid/view/ViewPropertyAnimator;
 HSPLandroid/view/ViewPropertyAnimator;->withEndAction(Ljava/lang/Runnable;)Landroid/view/ViewPropertyAnimator;
@@ -17929,7 +17941,6 @@
 HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda11;-><init>()V
 HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda11;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda13;-><init>(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda13;->onBackInvoked()V
 HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda1;-><init>(Landroid/view/ViewRootImpl;Landroid/view/SurfaceControl$Transaction;)V
 HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda1;->onFrameDraw(J)V
 HSPLandroid/view/ViewRootImpl$$ExternalSyntheticLambda2;-><init>(Landroid/view/ViewRootImpl;Landroid/view/SurfaceControl$Transaction;I)V
@@ -17948,7 +17959,7 @@
 HSPLandroid/view/ViewRootImpl$6;->lambda$onFrameDraw$0$android-view-ViewRootImpl$6(JZ)V
 HSPLandroid/view/ViewRootImpl$6;->onFrameDraw(IJ)Landroid/graphics/HardwareRenderer$FrameCommitCallback;
 HSPLandroid/view/ViewRootImpl$7;-><init>(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ViewRootImpl$7;->run()V
+HSPLandroid/view/ViewRootImpl$7;->run()V+]Ljava/util/Optional;Ljava/util/Optional;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;
 HSPLandroid/view/ViewRootImpl$8$$ExternalSyntheticLambda1;-><init>(Landroid/view/ViewRootImpl$8;JLandroid/window/SurfaceSyncer$SyncBufferCallback;Z)V
 HSPLandroid/view/ViewRootImpl$8$$ExternalSyntheticLambda1;->onFrameCommit(Z)V
 HSPLandroid/view/ViewRootImpl$8;-><init>(Landroid/view/ViewRootImpl;Landroid/window/SurfaceSyncer$SyncBufferCallback;Z)V
@@ -17969,42 +17980,42 @@
 HSPLandroid/view/ViewRootImpl$AsyncInputStage;->forward(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
 HSPLandroid/view/ViewRootImpl$ConsumeBatchedInputImmediatelyRunnable;-><init>(Landroid/view/ViewRootImpl;)V
 HSPLandroid/view/ViewRootImpl$ConsumeBatchedInputRunnable;-><init>(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ViewRootImpl$ConsumeBatchedInputRunnable;->run()V
+HSPLandroid/view/ViewRootImpl$ConsumeBatchedInputRunnable;->run()V+]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/Choreographer;Landroid/view/Choreographer;
 HSPLandroid/view/ViewRootImpl$EarlyPostImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;)V
 HSPLandroid/view/ViewRootImpl$EarlyPostImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
 HSPLandroid/view/ViewRootImpl$EarlyPostImeInputStage;->processKeyEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
-HSPLandroid/view/ViewRootImpl$EarlyPostImeInputStage;->processMotionEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
-HSPLandroid/view/ViewRootImpl$EarlyPostImeInputStage;->processPointerEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
+HSPLandroid/view/ViewRootImpl$EarlyPostImeInputStage;->processMotionEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I+]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
+HSPLandroid/view/ViewRootImpl$EarlyPostImeInputStage;->processPointerEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I+]Landroid/view/autofill/AutofillManager;Landroid/view/autofill/AutofillManager;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/ViewRootImpl$HighContrastTextManager;-><init>(Landroid/view/ViewRootImpl;)V
 HSPLandroid/view/ViewRootImpl$ImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;Ljava/lang/String;)V
 HSPLandroid/view/ViewRootImpl$ImeInputStage;->onFinishedInputEvent(Ljava/lang/Object;Z)V
 HSPLandroid/view/ViewRootImpl$ImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
 HSPLandroid/view/ViewRootImpl$InputMetricsListener;-><init>(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ViewRootImpl$InputMetricsListener;->onFrameMetricsAvailable(I)V
+HSPLandroid/view/ViewRootImpl$InputMetricsListener;->onFrameMetricsAvailable(I)V+]Landroid/view/ViewRootImpl$WindowInputEventReceiver;Landroid/view/ViewRootImpl$WindowInputEventReceiver;
 HSPLandroid/view/ViewRootImpl$InputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;)V
-HSPLandroid/view/ViewRootImpl$InputStage;->apply(Landroid/view/ViewRootImpl$QueuedInputEvent;I)V
-HSPLandroid/view/ViewRootImpl$InputStage;->deliver(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
-HSPLandroid/view/ViewRootImpl$InputStage;->finish(Landroid/view/ViewRootImpl$QueuedInputEvent;Z)V
-HSPLandroid/view/ViewRootImpl$InputStage;->forward(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
-HSPLandroid/view/ViewRootImpl$InputStage;->onDeliverToNext(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
+HSPLandroid/view/ViewRootImpl$InputStage;->apply(Landroid/view/ViewRootImpl$QueuedInputEvent;I)V+]Landroid/view/ViewRootImpl$InputStage;Landroid/view/ViewRootImpl$NativePostImeInputStage;,Landroid/view/ViewRootImpl$ViewPostImeInputStage;,Landroid/view/ViewRootImpl$EarlyPostImeInputStage;
+HSPLandroid/view/ViewRootImpl$InputStage;->deliver(Landroid/view/ViewRootImpl$QueuedInputEvent;)V+]Landroid/view/ViewRootImpl$InputStage;megamorphic_types
+HSPLandroid/view/ViewRootImpl$InputStage;->finish(Landroid/view/ViewRootImpl$QueuedInputEvent;Z)V+]Landroid/view/ViewRootImpl$InputStage;Landroid/view/ViewRootImpl$ViewPostImeInputStage;
+HSPLandroid/view/ViewRootImpl$InputStage;->forward(Landroid/view/ViewRootImpl$QueuedInputEvent;)V+]Landroid/view/ViewRootImpl$InputStage;Landroid/view/ViewRootImpl$NativePostImeInputStage;,Landroid/view/ViewRootImpl$ViewPostImeInputStage;,Landroid/view/ViewRootImpl$EarlyPostImeInputStage;,Landroid/view/ViewRootImpl$SyntheticInputStage;
+HSPLandroid/view/ViewRootImpl$InputStage;->onDeliverToNext(Landroid/view/ViewRootImpl$QueuedInputEvent;)V+]Landroid/view/ViewRootImpl$InputStage;megamorphic_types
 HSPLandroid/view/ViewRootImpl$InputStage;->onDetachedFromWindow()V
 HSPLandroid/view/ViewRootImpl$InputStage;->onWindowFocusChanged(Z)V
-HSPLandroid/view/ViewRootImpl$InputStage;->shouldDropInputEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)Z
-HSPLandroid/view/ViewRootImpl$InputStage;->traceEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;J)V
+HSPLandroid/view/ViewRootImpl$InputStage;->shouldDropInputEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)Z+]Landroid/view/InputEvent;Landroid/view/MotionEvent;
+HSPLandroid/view/ViewRootImpl$InputStage;->traceEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;J)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/InputEvent;Landroid/view/MotionEvent;]Ljava/lang/Object;Landroid/view/ViewRootImpl$SyntheticInputStage;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLandroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;-><init>(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;->addView(Landroid/view/View;)V
+HSPLandroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;->addView(Landroid/view/View;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;->postIfNeededLocked()V
-HSPLandroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;->removeView(Landroid/view/View;)V
-HSPLandroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;->run()V
+HSPLandroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;->removeView(Landroid/view/View;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;->run()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/View;missing_types
 HSPLandroid/view/ViewRootImpl$NativePostImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;Ljava/lang/String;)V
 HSPLandroid/view/ViewRootImpl$NativePostImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
 HSPLandroid/view/ViewRootImpl$NativePreImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;Ljava/lang/String;)V
 HSPLandroid/view/ViewRootImpl$NativePreImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
 HSPLandroid/view/ViewRootImpl$QueuedInputEvent;-><init>()V
 HSPLandroid/view/ViewRootImpl$QueuedInputEvent;->shouldSendToSynthesizer()Z
-HSPLandroid/view/ViewRootImpl$QueuedInputEvent;->shouldSkipIme()Z
+HSPLandroid/view/ViewRootImpl$QueuedInputEvent;->shouldSkipIme()Z+]Landroid/view/InputEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/ViewRootImpl$SyntheticInputStage;-><init>(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ViewRootImpl$SyntheticInputStage;->onDeliverToNext(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
+HSPLandroid/view/ViewRootImpl$SyntheticInputStage;->onDeliverToNext(Landroid/view/ViewRootImpl$QueuedInputEvent;)V+]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/ViewRootImpl$SyntheticInputStage;->onDetachedFromWindow()V
 HSPLandroid/view/ViewRootImpl$SyntheticInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
 HSPLandroid/view/ViewRootImpl$SyntheticInputStage;->onWindowFocusChanged(Z)V
@@ -18019,7 +18030,7 @@
 HSPLandroid/view/ViewRootImpl$SystemUiVisibilityInfo;-><init>()V
 HSPLandroid/view/ViewRootImpl$TrackballAxis;-><init>()V
 HSPLandroid/view/ViewRootImpl$TraversalRunnable;-><init>(Landroid/view/ViewRootImpl;)V
-HSPLandroid/view/ViewRootImpl$TraversalRunnable;->run()V
+HSPLandroid/view/ViewRootImpl$TraversalRunnable;->run()V+]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
 HSPLandroid/view/ViewRootImpl$UnhandledKeyManager;-><init>()V
 HSPLandroid/view/ViewRootImpl$UnhandledKeyManager;->dispatch(Landroid/view/View;Landroid/view/KeyEvent;)Z
 HSPLandroid/view/ViewRootImpl$UnhandledKeyManager;->preDispatch(Landroid/view/KeyEvent;)V
@@ -18027,9 +18038,9 @@
 HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;)V
 HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;->maybeUpdatePointerIcon(Landroid/view/MotionEvent;)V
 HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;->onDeliverToNext(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
-HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
+HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I+]Landroid/view/InputEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;->processKeyEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
-HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;->processPointerEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
+HSPLandroid/view/ViewRootImpl$ViewPostImeInputStage;->processPointerEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)I+]Landroid/view/View;Lcom/android/internal/policy/DecorView;,Landroid/widget/FrameLayout;,Landroid/widget/PopupWindow$PopupDecorView;]Landroid/view/HandwritingInitiator;Landroid/view/HandwritingInitiator;
 HSPLandroid/view/ViewRootImpl$ViewPreImeInputStage;-><init>(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl$InputStage;)V
 HSPLandroid/view/ViewRootImpl$ViewPreImeInputStage;->onProcess(Landroid/view/ViewRootImpl$QueuedInputEvent;)I
 HSPLandroid/view/ViewRootImpl$ViewRootHandler;-><init>(Landroid/view/ViewRootImpl;)V
@@ -18048,9 +18059,9 @@
 HSPLandroid/view/ViewRootImpl$W;->showInsets(IZ)V
 HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;-><init>(Landroid/view/ViewRootImpl;Landroid/view/InputChannel;Landroid/os/Looper;)V
 HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->dispose()V
-HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->onBatchedInputEventPending(I)V
+HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->onBatchedInputEventPending(I)V+]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
 HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->onFocusEvent(Z)V
-HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->onInputEvent(Landroid/view/InputEvent;)V
+HSPLandroid/view/ViewRootImpl$WindowInputEventReceiver;->onInputEvent(Landroid/view/InputEvent;)V+]Landroid/view/InputEventCompatProcessor;Landroid/view/InputEventCompatProcessor;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
 HSPLandroid/view/ViewRootImpl;->-$$Nest$fgetmBlastBufferQueue(Landroid/view/ViewRootImpl;)Landroid/graphics/BLASTBufferQueue;
 HSPLandroid/view/ViewRootImpl;->-$$Nest$fgetmNumSyncsInProgress(Landroid/view/ViewRootImpl;)I
 HSPLandroid/view/ViewRootImpl;->-$$Nest$fputmNumSyncsInProgress(Landroid/view/ViewRootImpl;I)V
@@ -18060,26 +18071,26 @@
 HSPLandroid/view/ViewRootImpl;->-$$Nest$mprofileRendering(Landroid/view/ViewRootImpl;Z)V
 HSPLandroid/view/ViewRootImpl;->-$$Nest$mreadyToSync(Landroid/view/ViewRootImpl;Landroid/window/SurfaceSyncer$SyncBufferCallback;)V
 HSPLandroid/view/ViewRootImpl;-><init>(Landroid/content/Context;Landroid/view/Display;)V
-HSPLandroid/view/ViewRootImpl;-><init>(Landroid/content/Context;Landroid/view/Display;Landroid/view/IWindowSession;Z)V
+HSPLandroid/view/ViewRootImpl;-><init>(Landroid/content/Context;Landroid/view/Display;Landroid/view/IWindowSession;Z)V+]Landroid/view/WindowLeaked;Landroid/view/WindowLeaked;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/media/AudioManager;Landroid/media/AudioManager;]Landroid/content/Context;Landroid/view/ContextThemeWrapper;,Lcom/android/internal/policy/DecorContext;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
 HSPLandroid/view/ViewRootImpl;->addConfigCallback(Landroid/view/ViewRootImpl$ConfigChangedCallback;)V
 HSPLandroid/view/ViewRootImpl;->addFrameCommitCallbackIfNeeded()V+]Landroid/view/ViewTreeObserver;Landroid/view/ViewTreeObserver;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
 HSPLandroid/view/ViewRootImpl;->addSurfaceChangedCallback(Landroid/view/ViewRootImpl$SurfaceChangedCallback;)V
 HSPLandroid/view/ViewRootImpl;->addWindowCallbacks(Landroid/view/WindowCallbacks;)V
 HSPLandroid/view/ViewRootImpl;->adjustLayoutParamsForCompatibility(Landroid/view/WindowManager$LayoutParams;)V
 HSPLandroid/view/ViewRootImpl;->applyKeepScreenOnFlag(Landroid/view/WindowManager$LayoutParams;)V
-HSPLandroid/view/ViewRootImpl;->applyTransactionOnDraw(Landroid/view/SurfaceControl$Transaction;)Z+]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;
+HSPLandroid/view/ViewRootImpl;->applyTransactionOnDraw(Landroid/view/SurfaceControl$Transaction;)Z+]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
 HSPLandroid/view/ViewRootImpl;->canResolveTextDirection()Z
-HSPLandroid/view/ViewRootImpl;->cancelInvalidate(Landroid/view/View;)V
+HSPLandroid/view/ViewRootImpl;->cancelInvalidate(Landroid/view/View;)V+]Landroid/view/ViewRootImpl$ViewRootHandler;Landroid/view/ViewRootImpl$ViewRootHandler;]Landroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;Landroid/view/ViewRootImpl$InvalidateOnAnimationRunnable;
 HSPLandroid/view/ViewRootImpl;->checkForLeavingTouchModeAndConsume(Landroid/view/KeyEvent;)Z
 HSPLandroid/view/ViewRootImpl;->checkThread()V
 HSPLandroid/view/ViewRootImpl;->childDrawableStateChanged(Landroid/view/View;)V
 HSPLandroid/view/ViewRootImpl;->childHasTransientStateChanged(Landroid/view/View;Z)V
 HSPLandroid/view/ViewRootImpl;->clearChildFocus(Landroid/view/View;)V
 HSPLandroid/view/ViewRootImpl;->clearLowProfileModeIfNeeded(IZ)V
-HSPLandroid/view/ViewRootImpl;->collectViewAttributes()Z
+HSPLandroid/view/ViewRootImpl;->collectViewAttributes()Z+]Landroid/view/View;Lcom/android/internal/policy/DecorView;
 HSPLandroid/view/ViewRootImpl;->controlInsetsForCompatibility(Landroid/view/WindowManager$LayoutParams;)V
 HSPLandroid/view/ViewRootImpl;->createSyncIfNeeded()V+]Landroid/window/SurfaceSyncer;Landroid/window/SurfaceSyncer;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
-HSPLandroid/view/ViewRootImpl;->deliverInputEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
+HSPLandroid/view/ViewRootImpl;->deliverInputEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)V+]Landroid/view/ViewRootImpl$InputStage;Landroid/view/ViewRootImpl$EarlyPostImeInputStage;,Landroid/view/ViewRootImpl$NativePreImeInputStage;]Landroid/view/ViewRootImpl$UnhandledKeyManager;Landroid/view/ViewRootImpl$UnhandledKeyManager;]Landroid/view/ViewRootImpl$QueuedInputEvent;Landroid/view/ViewRootImpl$QueuedInputEvent;]Landroid/view/InputEvent;Landroid/view/KeyEvent;,Landroid/view/MotionEvent;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/view/ViewRootImpl;->destroyHardwareRenderer()V
 HSPLandroid/view/ViewRootImpl;->destroyHardwareResources()V
 HSPLandroid/view/ViewRootImpl;->destroySurface()V
@@ -18097,20 +18108,20 @@
 HSPLandroid/view/ViewRootImpl;->dispatchResized(Landroid/window/ClientWindowFrames;ZLandroid/util/MergedConfiguration;Landroid/view/InsetsState;ZZIII)V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/ViewRootImpl$ViewRootHandler;Landroid/view/ViewRootImpl$ViewRootHandler;]Landroid/view/InsetsController$Host;Landroid/view/ViewRootInsetsControllerHost;]Lcom/android/internal/inputmethod/ImeTracing;Lcom/android/internal/inputmethod/ImeTracingClientImpl;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/InsetsController;Landroid/view/InsetsController;
 HSPLandroid/view/ViewRootImpl;->doConsumeBatchedInput(J)Z
 HSPLandroid/view/ViewRootImpl;->doDie()V
-HSPLandroid/view/ViewRootImpl;->doProcessInputEvents()V
-HSPLandroid/view/ViewRootImpl;->doTraversal()V
-HSPLandroid/view/ViewRootImpl;->draw(ZZ)Z+]Landroid/view/Surface;Landroid/view/Surface;]Landroid/view/ViewTreeObserver;Landroid/view/ViewTreeObserver;]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/Choreographer;Landroid/view/Choreographer;]Landroid/widget/Scroller;Landroid/widget/Scroller;]Lcom/android/internal/view/RootViewSurfaceTaker;Lcom/android/internal/policy/DecorView;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;
+HSPLandroid/view/ViewRootImpl;->doProcessInputEvents()V+]Landroid/view/InputEventAssigner;Landroid/view/InputEventAssigner;]Landroid/view/ViewFrameInfo;Landroid/view/ViewFrameInfo;
+HSPLandroid/view/ViewRootImpl;->doTraversal()V+]Landroid/os/Looper;Landroid/os/Looper;]Landroid/view/ViewRootImpl$ViewRootHandler;Landroid/view/ViewRootImpl$ViewRootHandler;]Landroid/os/MessageQueue;Landroid/os/MessageQueue;
+HSPLandroid/view/ViewRootImpl;->draw(ZZ)Z+]Landroid/view/ViewTreeObserver;Landroid/view/ViewTreeObserver;]Landroid/view/Surface;Landroid/view/Surface;]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/Choreographer;Landroid/view/Choreographer;]Landroid/widget/Scroller;Landroid/widget/Scroller;]Lcom/android/internal/view/RootViewSurfaceTaker;Lcom/android/internal/policy/DecorView;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;
 HSPLandroid/view/ViewRootImpl;->drawAccessibilityFocusedDrawableIfNeeded(Landroid/graphics/Canvas;)V
 HSPLandroid/view/ViewRootImpl;->drawSoftware(Landroid/view/Surface;Landroid/view/View$AttachInfo;IIZLandroid/graphics/Rect;Landroid/graphics/Rect;)Z
 HSPLandroid/view/ViewRootImpl;->enableHardwareAcceleration(Landroid/view/WindowManager$LayoutParams;)V
 HSPLandroid/view/ViewRootImpl;->endDragResizing()V
 HSPLandroid/view/ViewRootImpl;->enqueueInputEvent(Landroid/view/InputEvent;)V
-HSPLandroid/view/ViewRootImpl;->enqueueInputEvent(Landroid/view/InputEvent;Landroid/view/InputEventReceiver;IZ)V
+HSPLandroid/view/ViewRootImpl;->enqueueInputEvent(Landroid/view/InputEvent;Landroid/view/InputEventReceiver;IZ)V+]Landroid/view/KeyEvent;Landroid/view/KeyEvent;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 HSPLandroid/view/ViewRootImpl;->ensureTouchMode(Z)Z
 HSPLandroid/view/ViewRootImpl;->ensureTouchModeLocally(Z)Z
 HSPLandroid/view/ViewRootImpl;->enterTouchMode()Z
 HSPLandroid/view/ViewRootImpl;->findOnBackInvokedDispatcherForChild(Landroid/view/View;Landroid/view/View;)Landroid/window/OnBackInvokedDispatcher;
-HSPLandroid/view/ViewRootImpl;->finishInputEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
+HSPLandroid/view/ViewRootImpl;->finishInputEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)V+]Landroid/view/InputEventReceiver;Landroid/view/ViewRootImpl$WindowInputEventReceiver;]Landroid/view/InputEvent;Landroid/view/KeyEvent;,Landroid/view/MotionEvent;
 HSPLandroid/view/ViewRootImpl;->fireAccessibilityFocusEventIfHasFocusedNode()V
 HSPLandroid/view/ViewRootImpl;->focusableViewAvailable(Landroid/view/View;)V
 HSPLandroid/view/ViewRootImpl;->forceLayout(Landroid/view/View;)V
@@ -18123,9 +18134,9 @@
 HSPLandroid/view/ViewRootImpl;->getBufferTransformHint()I
 HSPLandroid/view/ViewRootImpl;->getChildVisibleRect(Landroid/view/View;Landroid/graphics/Rect;Landroid/graphics/Point;)Z+]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/view/ViewRootImpl;->getConfiguration()Landroid/content/res/Configuration;
-HSPLandroid/view/ViewRootImpl;->getDisplayId()I
+HSPLandroid/view/ViewRootImpl;->getDisplayId()I+]Landroid/view/Display;Landroid/view/Display;
 HSPLandroid/view/ViewRootImpl;->getHandwritingInitiator()Landroid/view/HandwritingInitiator;
-HSPLandroid/view/ViewRootImpl;->getHostVisibility()I
+HSPLandroid/view/ViewRootImpl;->getHostVisibility()I+]Landroid/view/View;Lcom/android/internal/policy/DecorView;,Landroid/widget/PopupWindow$PopupDecorView;
 HSPLandroid/view/ViewRootImpl;->getImeFocusController()Landroid/view/ImeFocusController;
 HSPLandroid/view/ViewRootImpl;->getImpliedSystemUiVisibility(Landroid/view/WindowManager$LayoutParams;)I
 HSPLandroid/view/ViewRootImpl;->getInsetsController()Landroid/view/InsetsController;
@@ -18133,23 +18144,23 @@
 HSPLandroid/view/ViewRootImpl;->getOnBackInvokedDispatcher()Landroid/window/WindowOnBackInvokedDispatcher;
 HSPLandroid/view/ViewRootImpl;->getParent()Landroid/view/ViewParent;
 HSPLandroid/view/ViewRootImpl;->getRootMeasureSpec(III)I
-HSPLandroid/view/ViewRootImpl;->getRunQueue()Landroid/view/HandlerActionQueue;
+HSPLandroid/view/ViewRootImpl;->getRunQueue()Landroid/view/HandlerActionQueue;+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
 HSPLandroid/view/ViewRootImpl;->getSurfaceControl()Landroid/view/SurfaceControl;
 HSPLandroid/view/ViewRootImpl;->getSurfaceSequenceId()I
 HSPLandroid/view/ViewRootImpl;->getTextDirection()I
 HSPLandroid/view/ViewRootImpl;->getTitle()Ljava/lang/CharSequence;
 HSPLandroid/view/ViewRootImpl;->getUpdatedFrameInfo()Landroid/graphics/FrameInfo;+]Landroid/view/InputEventAssigner;Landroid/view/InputEventAssigner;]Landroid/view/ViewFrameInfo;Landroid/view/ViewFrameInfo;
-HSPLandroid/view/ViewRootImpl;->getValidLayoutRequesters(Ljava/util/ArrayList;Z)Ljava/util/ArrayList;
+HSPLandroid/view/ViewRootImpl;->getValidLayoutRequesters(Ljava/util/ArrayList;Z)Ljava/util/ArrayList;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/ViewRootImpl;->getView()Landroid/view/View;
 HSPLandroid/view/ViewRootImpl;->getWindowBoundsInsetSystemBars()Landroid/graphics/Rect;+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/Context;missing_types]Landroid/view/InsetsController;Landroid/view/InsetsController;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HSPLandroid/view/ViewRootImpl;->getWindowFlags()I
-HSPLandroid/view/ViewRootImpl;->getWindowInsets(Z)Landroid/view/WindowInsets;
-HSPLandroid/view/ViewRootImpl;->getWindowVisibleDisplayFrame(Landroid/graphics/Rect;)V
+HSPLandroid/view/ViewRootImpl;->getWindowInsets(Z)Landroid/view/WindowInsets;+]Landroid/view/WindowInsets;Landroid/view/WindowInsets;]Landroid/graphics/Insets;Landroid/graphics/Insets;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/InsetsController;Landroid/view/InsetsController;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
+HSPLandroid/view/ViewRootImpl;->getWindowVisibleDisplayFrame(Landroid/graphics/Rect;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/view/ViewRootImpl;->handleAppVisibility(Z)V
 HSPLandroid/view/ViewRootImpl;->handleContentCaptureFlush()V
 HSPLandroid/view/ViewRootImpl;->handleDispatchSystemUiVisibilityChanged(Landroid/view/ViewRootImpl$SystemUiVisibilityInfo;)V
 HSPLandroid/view/ViewRootImpl;->handleResized(ILcom/android/internal/os/SomeArgs;)V
-HSPLandroid/view/ViewRootImpl;->handleWindowFocusChanged()V
+HSPLandroid/view/ViewRootImpl;->handleWindowFocusChanged()V+]Landroid/view/ViewTreeObserver;Landroid/view/ViewTreeObserver;]Landroid/view/Surface;Landroid/view/Surface;]Landroid/view/View;Lcom/android/internal/policy/DecorView;]Landroid/view/ViewRootImpl$InputStage;Landroid/view/ViewRootImpl$NativePreImeInputStage;]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/view/ImeFocusController;Landroid/view/ImeFocusController;]Landroid/view/InsetsController;Landroid/view/InsetsController;]Landroid/view/KeyEvent$DispatcherState;Landroid/view/KeyEvent$DispatcherState;
 HSPLandroid/view/ViewRootImpl;->invalidate()V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
 HSPLandroid/view/ViewRootImpl;->invalidateChild(Landroid/view/View;Landroid/graphics/Rect;)V
 HSPLandroid/view/ViewRootImpl;->invalidateChildInParent([ILandroid/graphics/Rect;)Landroid/view/ViewParent;
@@ -18172,13 +18183,13 @@
 HSPLandroid/view/ViewRootImpl;->lambda$new$2(Landroid/view/View;)Ljava/util/List;
 HSPLandroid/view/ViewRootImpl;->lambda$registerCompatOnBackInvokedCallback$11$android-view-ViewRootImpl()V
 HSPLandroid/view/ViewRootImpl;->loadSystemProperties()V
-HSPLandroid/view/ViewRootImpl;->maybeHandleWindowMove(Landroid/graphics/Rect;)V
+HSPLandroid/view/ViewRootImpl;->maybeHandleWindowMove(Landroid/graphics/Rect;)V+]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;
 HSPLandroid/view/ViewRootImpl;->maybeUpdateTooltip(Landroid/view/MotionEvent;)V
-HSPLandroid/view/ViewRootImpl;->measureHierarchy(Landroid/view/View;Landroid/view/WindowManager$LayoutParams;Landroid/content/res/Resources;II)Z
+HSPLandroid/view/ViewRootImpl;->measureHierarchy(Landroid/view/View;Landroid/view/WindowManager$LayoutParams;Landroid/content/res/Resources;II)Z+]Landroid/view/View;Lcom/android/internal/policy/DecorView;]Landroid/util/TypedValue;Landroid/util/TypedValue;]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLandroid/view/ViewRootImpl;->mergeWithNextTransaction(Landroid/view/SurfaceControl$Transaction;J)V
-HSPLandroid/view/ViewRootImpl;->notifyContentCatpureEvents()V
+HSPLandroid/view/ViewRootImpl;->notifyContentCatpureEvents()V+]Landroid/view/View;missing_types]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/view/contentcapture/ContentCaptureManager;Landroid/view/contentcapture/ContentCaptureManager;]Landroid/view/contentcapture/ContentCaptureSession;Landroid/view/contentcapture/MainContentCaptureSession;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/contentcapture/MainContentCaptureSession;Landroid/view/contentcapture/MainContentCaptureSession;
 HSPLandroid/view/ViewRootImpl;->notifyInsetsChanged()V
-HSPLandroid/view/ViewRootImpl;->notifyRendererOfFramePending()V
+HSPLandroid/view/ViewRootImpl;->notifyRendererOfFramePending()V+]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;
 HSPLandroid/view/ViewRootImpl;->notifySurfaceCreated()V
 HSPLandroid/view/ViewRootImpl;->notifySurfaceDestroyed()V
 HSPLandroid/view/ViewRootImpl;->notifySurfaceReplaced()V
@@ -18191,11 +18202,11 @@
 HSPLandroid/view/ViewRootImpl;->onStartNestedScroll(Landroid/view/View;Landroid/view/View;I)Z
 HSPLandroid/view/ViewRootImpl;->performConfigurationChange(Landroid/util/MergedConfiguration;ZI)V
 HSPLandroid/view/ViewRootImpl;->performContentCaptureInitialReport()V
-HSPLandroid/view/ViewRootImpl;->performDraw()V+]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
+HSPLandroid/view/ViewRootImpl;->performDraw()Z+]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/window/SurfaceSyncer$SyncBufferCallback;Landroid/window/SurfaceSyncer$SyncSet$1;]Ljava/util/concurrent/CountDownLatch;Ljava/util/concurrent/CountDownLatch;
 HSPLandroid/view/ViewRootImpl;->performHapticFeedback(IZ)Z
-HSPLandroid/view/ViewRootImpl;->performLayout(Landroid/view/WindowManager$LayoutParams;II)V
+HSPLandroid/view/ViewRootImpl;->performLayout(Landroid/view/WindowManager$LayoutParams;II)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/View;Lcom/android/internal/policy/DecorView;]Landroid/content/Context;Lcom/android/internal/policy/DecorContext;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/ViewRootImpl;->performMeasure(II)V
-HSPLandroid/view/ViewRootImpl;->performTraversals()V+]Landroid/window/SurfaceSyncer;Landroid/window/SurfaceSyncer;]Landroid/view/ViewTreeObserver;Landroid/view/ViewTreeObserver;]Landroid/view/View;Lcom/android/internal/policy/DecorView;,Landroid/widget/ExpandableListView;]Landroid/graphics/Point;Landroid/graphics/Point;]Landroid/content/res/CompatibilityInfo;Landroid/content/res/CompatibilityInfo$1;]Landroid/view/HandlerActionQueue;Landroid/view/HandlerActionQueue;]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/content/Context;Lcom/android/internal/policy/DecorContext;]Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;]Lcom/android/internal/view/RootViewSurfaceTaker;Lcom/android/internal/policy/DecorView;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Landroid/graphics/Region;Landroid/graphics/Region;]Landroid/view/Surface;Landroid/view/Surface;]Landroid/util/MergedConfiguration;Landroid/util/MergedConfiguration;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ImeFocusController;Landroid/view/ImeFocusController;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/DisplayAdjustments;Landroid/view/DisplayAdjustments;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/Display;Landroid/view/Display;
+HSPLandroid/view/ViewRootImpl;->performTraversals()V+]Landroid/window/SurfaceSyncer;Landroid/window/SurfaceSyncer;]Landroid/view/ViewTreeObserver;Landroid/view/ViewTreeObserver;]Landroid/view/View;missing_types]Landroid/content/res/CompatibilityInfo;Landroid/content/res/CompatibilityInfo$1;]Landroid/graphics/Point;Landroid/graphics/Point;]Landroid/view/HandlerActionQueue;Landroid/view/HandlerActionQueue;]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/content/Context;missing_types]Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;]Lcom/android/internal/view/RootViewSurfaceTaker;Lcom/android/internal/policy/DecorView;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Landroid/graphics/Region;Landroid/graphics/Region;]Landroid/view/Surface;Landroid/view/Surface;]Landroid/util/MergedConfiguration;Landroid/util/MergedConfiguration;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/ImeFocusController;Landroid/view/ImeFocusController;]Landroid/view/DisplayAdjustments;Landroid/view/DisplayAdjustments;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/Display;Landroid/view/Display;]Landroid/animation/LayoutTransition;Landroid/animation/LayoutTransition;]Landroid/view/ViewGroup;Landroid/widget/MenuPopupWindow$MenuDropDownListView;
 HSPLandroid/view/ViewRootImpl;->playSoundEffect(I)V
 HSPLandroid/view/ViewRootImpl;->pokeDrawLockIfNeeded()V
 HSPLandroid/view/ViewRootImpl;->prepareSurfaces()V
@@ -18205,10 +18216,11 @@
 HSPLandroid/view/ViewRootImpl;->recycleQueuedInputEvent(Landroid/view/ViewRootImpl$QueuedInputEvent;)V
 HSPLandroid/view/ViewRootImpl;->registerAnimatingRenderNode(Landroid/graphics/RenderNode;)V
 HSPLandroid/view/ViewRootImpl;->registerBackCallbackOnWindow()V+]Landroid/window/WindowOnBackInvokedDispatcher;Landroid/window/WindowOnBackInvokedDispatcher;
+HSPLandroid/view/ViewRootImpl;->registerCallbacksForSync(ZLandroid/window/SurfaceSyncer$SyncBufferCallback;)V+]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
 HSPLandroid/view/ViewRootImpl;->registerCompatOnBackInvokedCallback()V+]Landroid/window/WindowOnBackInvokedDispatcher;Landroid/window/WindowOnBackInvokedDispatcher;
 HSPLandroid/view/ViewRootImpl;->registerListeners()V+]Landroid/hardware/display/DisplayManager;Landroid/hardware/display/DisplayManager;]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;
 HSPLandroid/view/ViewRootImpl;->registerRtFrameCallback(Landroid/graphics/HardwareRenderer$FrameDrawingCallback;)V
-HSPLandroid/view/ViewRootImpl;->relayoutWindow(Landroid/view/WindowManager$LayoutParams;IZ)I
+HSPLandroid/view/ViewRootImpl;->relayoutWindow(Landroid/view/WindowManager$LayoutParams;IZ)I+]Landroid/view/IWindowSession;Landroid/view/IWindowSession$Stub$Proxy;]Landroid/view/View;Landroid/widget/RelativeLayout;,Landroid/widget/FrameLayout;,Landroid/widget/LinearLayout;]Landroid/graphics/Point;Landroid/graphics/Point;]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/view/contentcapture/ContentCaptureManager;Landroid/view/contentcapture/ContentCaptureManager;]Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/InsetsController;Landroid/view/InsetsController;]Landroid/view/contentcapture/MainContentCaptureSession;Landroid/view/contentcapture/MainContentCaptureSession;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Landroid/view/Display;Landroid/view/Display;
 HSPLandroid/view/ViewRootImpl;->removeSendWindowContentChangedCallback()V
 HSPLandroid/view/ViewRootImpl;->removeSurfaceChangedCallback(Landroid/view/ViewRootImpl$SurfaceChangedCallback;)V
 HSPLandroid/view/ViewRootImpl;->removeWindowCallbacks(Landroid/view/WindowCallbacks;)V
@@ -18221,7 +18233,7 @@
 HSPLandroid/view/ViewRootImpl;->requestLayout()V
 HSPLandroid/view/ViewRootImpl;->requestLayoutDuringLayout(Landroid/view/View;)Z+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/ViewRootImpl;->requestTransparentRegion(Landroid/view/View;)V
-HSPLandroid/view/ViewRootImpl;->scheduleConsumeBatchedInput()V
+HSPLandroid/view/ViewRootImpl;->scheduleConsumeBatchedInput()V+]Landroid/view/Choreographer;Landroid/view/Choreographer;
 HSPLandroid/view/ViewRootImpl;->scheduleTraversals()V+]Landroid/os/Looper;Landroid/os/Looper;]Landroid/view/ViewRootImpl$ViewRootHandler;Landroid/view/ViewRootImpl$ViewRootHandler;]Landroid/os/MessageQueue;Landroid/os/MessageQueue;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/Choreographer;Landroid/view/Choreographer;
 HSPLandroid/view/ViewRootImpl;->scrollToRectOrFocus(Landroid/graphics/Rect;Z)Z
 HSPLandroid/view/ViewRootImpl;->sendBackKeyEvent(I)V
@@ -18232,7 +18244,7 @@
 HSPLandroid/view/ViewRootImpl;->setLayoutParams(Landroid/view/WindowManager$LayoutParams;Z)V
 HSPLandroid/view/ViewRootImpl;->setOnContentApplyWindowInsetsListener(Landroid/view/Window$OnContentApplyWindowInsetsListener;)V
 HSPLandroid/view/ViewRootImpl;->setTag()V
-HSPLandroid/view/ViewRootImpl;->setView(Landroid/view/View;Landroid/view/WindowManager$LayoutParams;Landroid/view/View;I)V
+HSPLandroid/view/ViewRootImpl;->setView(Landroid/view/View;Landroid/view/WindowManager$LayoutParams;Landroid/view/View;I)V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/IWindowSession;Landroid/view/IWindowSession$Stub$Proxy;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/View;Lcom/android/internal/policy/DecorView;,Landroid/widget/LinearLayout;]Landroid/content/res/CompatibilityInfo;Landroid/content/res/CompatibilityInfo$1;]Landroid/view/ThreadedRenderer;Landroid/view/ThreadedRenderer;]Landroid/view/InsetsController;Landroid/view/InsetsController;]Landroid/view/PendingInsetsController;Landroid/view/PendingInsetsController;]Lcom/android/internal/view/RootViewSurfaceTaker;Lcom/android/internal/policy/DecorView;]Landroid/view/FallbackEventHandler;Lcom/android/internal/policy/PhoneFallbackEventHandler;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Landroid/view/WindowLayout;Landroid/view/WindowLayout;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;]Landroid/view/DisplayAdjustments;Landroid/view/DisplayAdjustments;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Landroid/view/Display;Landroid/view/Display;
 HSPLandroid/view/ViewRootImpl;->setWindowStopped(Z)V
 HSPLandroid/view/ViewRootImpl;->shouldDispatchCutout()Z
 HSPLandroid/view/ViewRootImpl;->shouldUseDisplaySize(Landroid/view/WindowManager$LayoutParams;)Z
@@ -18269,33 +18281,34 @@
 HSPLandroid/view/ViewRootInsetsControllerHost;->updateRequestedVisibilities(Landroid/view/InsetsVisibilities;)V
 HSPLandroid/view/ViewRootRectTracker$ViewInfo;-><init>(Landroid/view/ViewRootRectTracker;Landroid/view/View;)V
 HSPLandroid/view/ViewRootRectTracker$ViewInfo;->getView()Landroid/view/View;+]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
-HSPLandroid/view/ViewRootRectTracker$ViewInfo;->update()I+]Landroid/view/ViewRootRectTracker$ViewInfo;Landroid/view/ViewRootRectTracker$ViewInfo;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/Collections$EmptyIterator;,Ljava/util/ArrayList$Itr;]Landroid/view/ViewParent;missing_types]Landroid/view/View;missing_types
+HSPLandroid/view/ViewRootRectTracker$ViewInfo;->update()I+]Landroid/view/ViewRootRectTracker$ViewInfo;Landroid/view/ViewRootRectTracker$ViewInfo;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/Collections$EmptyIterator;,Ljava/util/ArrayList$Itr;]Landroid/view/View;missing_types]Landroid/view/ViewParent;missing_types
 HSPLandroid/view/ViewRootRectTracker;->-$$Nest$mgetTrackedRectsForView(Landroid/view/ViewRootRectTracker;Landroid/view/View;)Ljava/util/List;
 HSPLandroid/view/ViewRootRectTracker;-><init>(Ljava/util/function/Function;)V
-HSPLandroid/view/ViewRootRectTracker;->computeChangedRects()Ljava/util/List;+]Landroid/view/ViewRootRectTracker$ViewInfo;Landroid/view/ViewRootRectTracker$ViewInfo;]Ljava/util/List;Ljava/util/ArrayList;,Ljava/util/Collections$EmptyList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HSPLandroid/view/ViewRootRectTracker;->computeChangedRects()Ljava/util/List;+]Landroid/view/ViewRootRectTracker$ViewInfo;Landroid/view/ViewRootRectTracker$ViewInfo;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HSPLandroid/view/ViewRootRectTracker;->computeChanges()Z+]Landroid/view/ViewRootRectTracker$ViewInfo;Landroid/view/ViewRootRectTracker$ViewInfo;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLandroid/view/ViewRootRectTracker;->getTrackedRectsForView(Landroid/view/View;)Ljava/util/List;+]Ljava/util/function/Function;Landroid/view/ViewRootImpl$$ExternalSyntheticLambda10;,Landroid/view/ViewRootImpl$$ExternalSyntheticLambda11;,Landroid/view/ViewRootImpl$$ExternalSyntheticLambda9;,Landroid/view/ViewRootImpl$$ExternalSyntheticLambda4;,Landroid/view/ViewRootImpl$$ExternalSyntheticLambda5;,Landroid/view/ViewRootImpl$$ExternalSyntheticLambda6;
-HSPLandroid/view/ViewRootRectTracker;->updateRectsForView(Landroid/view/View;)V+]Landroid/view/ViewRootRectTracker$ViewInfo;Landroid/view/ViewRootRectTracker$ViewInfo;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Landroid/view/View;missing_types
+HSPLandroid/view/ViewRootRectTracker;->updateRectsForView(Landroid/view/View;)V+]Landroid/view/ViewRootRectTracker$ViewInfo;Landroid/view/ViewRootRectTracker$ViewInfo;]Landroid/view/View;missing_types]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLandroid/view/ViewStructure;-><init>()V
 HSPLandroid/view/ViewStructure;->setImportantForAutofill(I)V
 HSPLandroid/view/ViewStub;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/view/ViewStub;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroid/view/ViewStub;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/view/ViewStub;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/content/Context;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/view/ViewStub;Landroid/view/ViewStub;
 HSPLandroid/view/ViewStub;->inflate()Landroid/view/View;
 HSPLandroid/view/ViewStub;->setLayoutInflater(Landroid/view/LayoutInflater;)V
 HSPLandroid/view/ViewStub;->setLayoutResource(I)V
 HSPLandroid/view/ViewStub;->setOnInflateListener(Landroid/view/ViewStub$OnInflateListener;)V
 HSPLandroid/view/ViewStub;->setVisibility(I)V
 HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray$Access;-><init>()V
-HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray$Access;->get(I)Ljava/lang/Object;
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray$Access;->get(I)Ljava/lang/Object;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray$Access;->size()I
 HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;-><init>()V
 HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->add(Ljava/lang/Object;)V
 HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->addAll(Landroid/view/ViewTreeObserver$CopyOnWriteArray;)V
-HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->end()V
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->end()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->getArray()Ljava/util/ArrayList;
 HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->remove(Ljava/lang/Object;)V
-HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->size()I
-HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->start()Landroid/view/ViewTreeObserver$CopyOnWriteArray$Access;
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->size()I+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/view/ViewTreeObserver$CopyOnWriteArray;->start()Landroid/view/ViewTreeObserver$CopyOnWriteArray$Access;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/ViewTreeObserver$InternalInsetsInfo;-><init>()V
 HSPLandroid/view/ViewTreeObserver$InternalInsetsInfo;->equals(Ljava/lang/Object;)Z
 HSPLandroid/view/ViewTreeObserver$InternalInsetsInfo;->isEmpty()Z
@@ -18311,10 +18324,10 @@
 HSPLandroid/view/ViewTreeObserver;->captureFrameCommitCallbacks()Ljava/util/ArrayList;
 HSPLandroid/view/ViewTreeObserver;->checkIsAlive()V
 HSPLandroid/view/ViewTreeObserver;->dispatchOnComputeInternalInsets(Landroid/view/ViewTreeObserver$InternalInsetsInfo;)V
-HSPLandroid/view/ViewTreeObserver;->dispatchOnDraw()V
+HSPLandroid/view/ViewTreeObserver;->dispatchOnDraw()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/ViewTreeObserver$OnDrawListener;Landroid/widget/Editor$2;
 HSPLandroid/view/ViewTreeObserver;->dispatchOnEnterAnimationComplete()V
-HSPLandroid/view/ViewTreeObserver;->dispatchOnGlobalLayout()V
-HSPLandroid/view/ViewTreeObserver;->dispatchOnPreDraw()Z
+HSPLandroid/view/ViewTreeObserver;->dispatchOnGlobalLayout()V+]Landroid/view/ViewTreeObserver$CopyOnWriteArray$Access;Landroid/view/ViewTreeObserver$CopyOnWriteArray$Access;]Landroid/view/ViewTreeObserver$CopyOnWriteArray;Landroid/view/ViewTreeObserver$CopyOnWriteArray;
+HSPLandroid/view/ViewTreeObserver;->dispatchOnPreDraw()Z+]Landroid/view/ViewTreeObserver$OnPreDrawListener;missing_types]Landroid/view/ViewTreeObserver$CopyOnWriteArray$Access;Landroid/view/ViewTreeObserver$CopyOnWriteArray$Access;]Landroid/view/ViewTreeObserver$CopyOnWriteArray;Landroid/view/ViewTreeObserver$CopyOnWriteArray;
 HSPLandroid/view/ViewTreeObserver;->dispatchOnScrollChanged()V
 HSPLandroid/view/ViewTreeObserver;->dispatchOnSystemGestureExclusionRectsChanged(Ljava/util/List;)V
 HSPLandroid/view/ViewTreeObserver;->dispatchOnTouchModeChanged(Z)V
@@ -18391,7 +18404,7 @@
 HSPLandroid/view/WindowInsets$Type;->statusBars()I
 HSPLandroid/view/WindowInsets$Type;->systemBars()I
 HSPLandroid/view/WindowInsets$Type;->toString(I)Ljava/lang/String;
-HSPLandroid/view/WindowInsets;-><init>([Landroid/graphics/Insets;[Landroid/graphics/Insets;[ZZZLandroid/view/DisplayCutout;Landroid/view/RoundedCorners;Landroid/view/PrivacyIndicatorBounds;IZ)V
+HSPLandroid/view/WindowInsets;-><init>([Landroid/graphics/Insets;[Landroid/graphics/Insets;[ZZZLandroid/view/DisplayCutout;Landroid/view/RoundedCorners;Landroid/view/PrivacyIndicatorBounds;IZ)V+]Landroid/view/DisplayCutout;Landroid/view/DisplayCutout;][Landroid/graphics/Insets;[Landroid/graphics/Insets;
 HSPLandroid/view/WindowInsets;->assignCompatInsets([Landroid/graphics/Insets;Landroid/graphics/Rect;)V
 HSPLandroid/view/WindowInsets;->consumeDisplayCutout()Landroid/view/WindowInsets;
 HSPLandroid/view/WindowInsets;->consumeStableInsets()Landroid/view/WindowInsets;
@@ -18439,7 +18452,7 @@
 HSPLandroid/view/WindowManager$LayoutParams;-><init>()V
 HSPLandroid/view/WindowManager$LayoutParams;-><init>(IIIII)V
 HSPLandroid/view/WindowManager$LayoutParams;-><init>(Landroid/os/Parcel;)V
-HSPLandroid/view/WindowManager$LayoutParams;->copyFrom(Landroid/view/WindowManager$LayoutParams;)I
+HSPLandroid/view/WindowManager$LayoutParams;->copyFrom(Landroid/view/WindowManager$LayoutParams;)I+]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/view/WindowManager$LayoutParams;->getColorMode()I
 HSPLandroid/view/WindowManager$LayoutParams;->getFitInsetsSides()I
 HSPLandroid/view/WindowManager$LayoutParams;->getFitInsetsTypes()I
@@ -18453,7 +18466,7 @@
 HSPLandroid/view/WindowManager$LayoutParams;->setFitInsetsTypes(I)V
 HSPLandroid/view/WindowManager$LayoutParams;->setSurfaceInsets(Landroid/view/View;ZZ)V
 HSPLandroid/view/WindowManager$LayoutParams;->setTitle(Ljava/lang/CharSequence;)V
-HSPLandroid/view/WindowManager$LayoutParams;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/view/WindowManager$LayoutParams;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/WindowManagerGlobal$1;-><init>()V
 HSPLandroid/view/WindowManagerGlobal$2;-><init>(Landroid/view/WindowManagerGlobal;)V
 HSPLandroid/view/WindowManagerGlobal;-><init>()V
@@ -18532,8 +18545,8 @@
 HSPLandroid/view/accessibility/AccessibilityManager;->updateUiTimeout(J)V
 HSPLandroid/view/accessibility/AccessibilityNodeIdManager;-><init>()V
 HSPLandroid/view/accessibility/AccessibilityNodeIdManager;->getInstance()Landroid/view/accessibility/AccessibilityNodeIdManager;
-HSPLandroid/view/accessibility/AccessibilityNodeIdManager;->registerViewWithId(Landroid/view/View;I)V
-HSPLandroid/view/accessibility/AccessibilityNodeIdManager;->unregisterViewWithId(I)V
+HSPLandroid/view/accessibility/AccessibilityNodeIdManager;->registerViewWithId(Landroid/view/View;I)V+]Landroid/view/accessibility/WeakSparseArray;Landroid/view/accessibility/WeakSparseArray;
+HSPLandroid/view/accessibility/AccessibilityNodeIdManager;->unregisterViewWithId(I)V+]Landroid/view/accessibility/WeakSparseArray;Landroid/view/accessibility/WeakSparseArray;
 HSPLandroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;-><init>(ILjava/lang/CharSequence;)V
 HSPLandroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;->getId()I
 HSPLandroid/view/accessibility/AccessibilityNodeProvider;-><init>()V
@@ -18568,9 +18581,9 @@
 HSPLandroid/view/accessibility/IAccessibilityManagerClient$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLandroid/view/accessibility/WeakSparseArray$WeakReferenceWithId;-><init>(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;I)V
 HSPLandroid/view/accessibility/WeakSparseArray;-><init>()V
-HSPLandroid/view/accessibility/WeakSparseArray;->append(ILjava/lang/Object;)V
-HSPLandroid/view/accessibility/WeakSparseArray;->remove(I)V
-HSPLandroid/view/accessibility/WeakSparseArray;->removeUnreachableValues()V
+HSPLandroid/view/accessibility/WeakSparseArray;->append(ILjava/lang/Object;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLandroid/view/accessibility/WeakSparseArray;->remove(I)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLandroid/view/accessibility/WeakSparseArray;->removeUnreachableValues()V+]Ljava/lang/ref/ReferenceQueue;Ljava/lang/ref/ReferenceQueue;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLandroid/view/animation/AccelerateDecelerateInterpolator;-><init>()V
 HSPLandroid/view/animation/AccelerateDecelerateInterpolator;->createNativeInterpolator()J
 HSPLandroid/view/animation/AccelerateDecelerateInterpolator;->getInterpolation(F)F
@@ -18589,7 +18602,7 @@
 HSPLandroid/view/animation/Animation$Description;-><init>()V
 HSPLandroid/view/animation/Animation$Description;->parseValue(Landroid/util/TypedValue;Landroid/content/Context;)Landroid/view/animation/Animation$Description;+]Landroid/util/TypedValue;Landroid/util/TypedValue;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLandroid/view/animation/Animation;-><init>()V
-HSPLandroid/view/animation/Animation;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/view/animation/Animation;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V+]Landroid/content/Context;missing_types]Landroid/view/animation/Animation;Landroid/view/animation/AnimationSet;,Landroid/view/animation/TranslateAnimation;,Landroid/view/animation/AlphaAnimation;,Landroid/view/animation/ScaleAnimation;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/view/animation/Animation;->cancel()V
 HSPLandroid/view/animation/Animation;->detach()V
 HSPLandroid/view/animation/Animation;->dispatchAnimationEnd()V
@@ -18598,10 +18611,10 @@
 HSPLandroid/view/animation/Animation;->finalize()V
 HSPLandroid/view/animation/Animation;->getDuration()J
 HSPLandroid/view/animation/Animation;->getFillAfter()Z
-HSPLandroid/view/animation/Animation;->getInvalidateRegion(IIIILandroid/graphics/RectF;Landroid/view/animation/Transformation;)V
+HSPLandroid/view/animation/Animation;->getInvalidateRegion(IIIILandroid/graphics/RectF;Landroid/view/animation/Transformation;)V+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/view/animation/Transformation;Landroid/view/animation/Transformation;
 HSPLandroid/view/animation/Animation;->getScaleFactor()F
 HSPLandroid/view/animation/Animation;->getStartOffset()J
-HSPLandroid/view/animation/Animation;->getTransformation(JLandroid/view/animation/Transformation;)Z
+HSPLandroid/view/animation/Animation;->getTransformation(JLandroid/view/animation/Transformation;)Z+]Landroid/view/animation/Animation;Landroid/view/animation/TranslateAnimation;,Landroid/view/animation/AlphaAnimation;,Landroid/view/animation/ScaleAnimation;]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
 HSPLandroid/view/animation/Animation;->getTransformation(JLandroid/view/animation/Transformation;F)Z
 HSPLandroid/view/animation/Animation;->getTransformationAt(FLandroid/view/animation/Transformation;)V+]Landroid/view/animation/Interpolator;megamorphic_types]Landroid/view/animation/Animation;megamorphic_types
 HSPLandroid/view/animation/Animation;->hasAlpha()Z
@@ -18638,7 +18651,7 @@
 HSPLandroid/view/animation/AnimationSet;-><init>(Z)V
 HSPLandroid/view/animation/AnimationSet;->addAnimation(Landroid/view/animation/Animation;)V
 HSPLandroid/view/animation/AnimationSet;->getDuration()J
-HSPLandroid/view/animation/AnimationSet;->getTransformation(JLandroid/view/animation/Transformation;)Z
+HSPLandroid/view/animation/AnimationSet;->getTransformation(JLandroid/view/animation/Transformation;)Z+]Landroid/view/animation/AnimationSet;missing_types]Landroid/view/animation/Transformation;Landroid/view/animation/Transformation;]Landroid/view/animation/Animation;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/animation/AnimationSet;->hasAlpha()Z
 HSPLandroid/view/animation/AnimationSet;->init()V
 HSPLandroid/view/animation/AnimationSet;->initialize(IIII)V
@@ -18659,8 +18672,8 @@
 HSPLandroid/view/animation/AnimationUtils$AnimationState;-><init>()V
 HSPLandroid/view/animation/AnimationUtils;->createAnimationFromXml(Landroid/content/Context;Lorg/xmlpull/v1/XmlPullParser;)Landroid/view/animation/Animation;
 HSPLandroid/view/animation/AnimationUtils;->createAnimationFromXml(Landroid/content/Context;Lorg/xmlpull/v1/XmlPullParser;Landroid/view/animation/AnimationSet;Landroid/util/AttributeSet;)Landroid/view/animation/Animation;
-HSPLandroid/view/animation/AnimationUtils;->createInterpolatorFromXml(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Lorg/xmlpull/v1/XmlPullParser;)Landroid/view/animation/Interpolator;
-HSPLandroid/view/animation/AnimationUtils;->currentAnimationTimeMillis()J
+HSPLandroid/view/animation/AnimationUtils;->createInterpolatorFromXml(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Lorg/xmlpull/v1/XmlPullParser;)Landroid/view/animation/Interpolator;+]Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/XmlBlock$Parser;
+HSPLandroid/view/animation/AnimationUtils;->currentAnimationTimeMillis()J+]Ljava/lang/ThreadLocal;Landroid/view/animation/AnimationUtils$1;
 HSPLandroid/view/animation/AnimationUtils;->loadAnimation(Landroid/content/Context;I)Landroid/view/animation/Animation;
 HSPLandroid/view/animation/AnimationUtils;->loadInterpolator(Landroid/content/Context;I)Landroid/view/animation/Interpolator;
 HSPLandroid/view/animation/AnimationUtils;->loadInterpolator(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;I)Landroid/view/animation/Interpolator;
@@ -18687,18 +18700,18 @@
 HSPLandroid/view/animation/PathInterpolator;->initPath(Landroid/graphics/Path;)V
 HSPLandroid/view/animation/PathInterpolator;->parseInterpolatorFromTypeArray(Landroid/content/res/TypedArray;)V
 HSPLandroid/view/animation/ScaleAnimation;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HSPLandroid/view/animation/ScaleAnimation;->applyTransformation(FLandroid/view/animation/Transformation;)V
+HSPLandroid/view/animation/ScaleAnimation;->applyTransformation(FLandroid/view/animation/Transformation;)V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/view/animation/Transformation;Landroid/view/animation/Transformation;]Landroid/view/animation/ScaleAnimation;Landroid/view/animation/ScaleAnimation;
 HSPLandroid/view/animation/ScaleAnimation;->initialize(IIII)V
 HSPLandroid/view/animation/ScaleAnimation;->initializePivotPoint()V
 HSPLandroid/view/animation/ScaleAnimation;->resolveScale(FIIII)F
-HSPLandroid/view/animation/Transformation;-><init>()V
-HSPLandroid/view/animation/Transformation;->clear()V
-HSPLandroid/view/animation/Transformation;->compose(Landroid/view/animation/Transformation;)V
+HSPLandroid/view/animation/Transformation;-><init>()V+]Landroid/view/animation/Transformation;Landroid/view/animation/Transformation;
+HSPLandroid/view/animation/Transformation;->clear()V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/graphics/Rect;Landroid/graphics/Rect;
+HSPLandroid/view/animation/Transformation;->compose(Landroid/view/animation/Transformation;)V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/view/animation/Transformation;Landroid/view/animation/Transformation;
 HSPLandroid/view/animation/Transformation;->getAlpha()F
 HSPLandroid/view/animation/Transformation;->getInsets()Landroid/graphics/Insets;
 HSPLandroid/view/animation/Transformation;->getMatrix()Landroid/graphics/Matrix;
 HSPLandroid/view/animation/Transformation;->getTransformationType()I
-HSPLandroid/view/animation/Transformation;->set(Landroid/view/animation/Transformation;)V
+HSPLandroid/view/animation/Transformation;->set(Landroid/view/animation/Transformation;)V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/view/animation/Transformation;Landroid/view/animation/Transformation;]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/view/animation/Transformation;->setAlpha(F)V
 HSPLandroid/view/animation/Transformation;->setInsets(Landroid/graphics/Insets;)V
 HSPLandroid/view/animation/TranslateAnimation;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
@@ -18727,7 +18740,7 @@
 HSPLandroid/view/autofill/AutofillClientController;->onActivityStopped(Landroid/content/Intent;Z)V
 HSPLandroid/view/autofill/AutofillClientController;->onSaveInstanceState(Landroid/os/Bundle;)V
 HSPLandroid/view/autofill/AutofillClientController;->onStartActivity(Landroid/content/Intent;Landroid/content/Intent;)V
-HSPLandroid/view/autofill/AutofillId$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/autofill/AutofillId;
+HSPLandroid/view/autofill/AutofillId$1;->createFromParcel(Landroid/os/Parcel;)Landroid/view/autofill/AutofillId;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/autofill/AutofillId$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/view/autofill/AutofillId;-><init>(I)V
 HSPLandroid/view/autofill/AutofillId;-><init>(IIJI)V
@@ -18738,8 +18751,8 @@
 HSPLandroid/view/autofill/AutofillId;->isVirtualInt()Z
 HSPLandroid/view/autofill/AutofillId;->isVirtualLong()Z
 HSPLandroid/view/autofill/AutofillId;->resetSessionId()V
-HSPLandroid/view/autofill/AutofillId;->toString()Ljava/lang/String;
-HSPLandroid/view/autofill/AutofillId;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/view/autofill/AutofillId;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillId;
+HSPLandroid/view/autofill/AutofillId;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillId;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/autofill/AutofillManager$$ExternalSyntheticLambda0;-><init>(Landroid/view/autofill/IAutoFillManager;Landroid/view/autofill/IAutoFillManagerClient;I)V
 HSPLandroid/view/autofill/AutofillManager$AugmentedAutofillManagerClient;-><init>(Landroid/view/autofill/AutofillManager;)V
 HSPLandroid/view/autofill/AutofillManager$AugmentedAutofillManagerClient;->getView(Landroid/view/autofill/AutofillManager;Landroid/view/autofill/AutofillId;)Landroid/view/View;
@@ -18802,7 +18815,7 @@
 HSPLandroid/view/autofill/IAutoFillManager$Stub$Proxy;->removeClient(Landroid/view/autofill/IAutoFillManagerClient;I)V
 HSPLandroid/view/autofill/IAutoFillManager$Stub$Proxy;->setHasCallback(IIZ)V
 HSPLandroid/view/autofill/IAutoFillManager$Stub$Proxy;->startSession(Landroid/os/IBinder;Landroid/os/IBinder;Landroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;IZILandroid/content/ComponentName;ZLcom/android/internal/os/IResultReceiver;)V
-HSPLandroid/view/autofill/IAutoFillManager$Stub$Proxy;->updateSession(ILandroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;III)V
+HSPLandroid/view/autofill/IAutoFillManager$Stub$Proxy;->updateSession(ILandroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;III)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/autofill/IAutoFillManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/autofill/IAutoFillManager;
 HSPLandroid/view/autofill/IAutoFillManagerClient$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/view/autofill/IAutoFillManagerClient$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
@@ -18822,13 +18835,13 @@
 HSPLandroid/view/contentcapture/ContentCaptureEvent;->setSelectionIndex(II)Landroid/view/contentcapture/ContentCaptureEvent;
 HSPLandroid/view/contentcapture/ContentCaptureEvent;->setText(Ljava/lang/CharSequence;)Landroid/view/contentcapture/ContentCaptureEvent;
 HSPLandroid/view/contentcapture/ContentCaptureEvent;->setViewNode(Landroid/view/contentcapture/ViewNode;)Landroid/view/contentcapture/ContentCaptureEvent;
-HSPLandroid/view/contentcapture/ContentCaptureEvent;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/view/contentcapture/ContentCaptureEvent;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/contentcapture/ContentCaptureHelper;->getLoggingLevelAsString(I)Ljava/lang/String;
 HSPLandroid/view/contentcapture/ContentCaptureHelper;->setLoggingLevel(I)V
 HSPLandroid/view/contentcapture/ContentCaptureManager$LocalDataShareAdapterResourceManager;-><init>()V
 HSPLandroid/view/contentcapture/ContentCaptureManager;-><init>(Landroid/content/Context;Landroid/view/contentcapture/IContentCaptureManager;Landroid/content/ContentCaptureOptions;)V
 HSPLandroid/view/contentcapture/ContentCaptureManager;->getMainContentCaptureSession()Landroid/view/contentcapture/MainContentCaptureSession;
-HSPLandroid/view/contentcapture/ContentCaptureManager;->isContentCaptureEnabled()Z
+HSPLandroid/view/contentcapture/ContentCaptureManager;->isContentCaptureEnabled()Z+]Landroid/view/contentcapture/MainContentCaptureSession;Landroid/view/contentcapture/MainContentCaptureSession;
 HSPLandroid/view/contentcapture/ContentCaptureManager;->onActivityCreated(Landroid/os/IBinder;Landroid/os/IBinder;Landroid/content/ComponentName;)V
 HSPLandroid/view/contentcapture/ContentCaptureManager;->updateWindowAttributes(Landroid/view/WindowManager$LayoutParams;)V
 HSPLandroid/view/contentcapture/ContentCaptureSession;-><init>()V
@@ -18837,14 +18850,14 @@
 HSPLandroid/view/contentcapture/ContentCaptureSession;->getFlushReasonAsString(I)Ljava/lang/String;
 HSPLandroid/view/contentcapture/ContentCaptureSession;->getId()I
 HSPLandroid/view/contentcapture/ContentCaptureSession;->getRandomSessionId()I
-HSPLandroid/view/contentcapture/ContentCaptureSession;->getStateAsString(I)Ljava/lang/String;
+HSPLandroid/view/contentcapture/ContentCaptureSession;->getStateAsString(I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/view/contentcapture/ContentCaptureSession;->isContentCaptureEnabled()Z
 HSPLandroid/view/contentcapture/ContentCaptureSession;->newViewStructure(Landroid/view/View;)Landroid/view/ViewStructure;
-HSPLandroid/view/contentcapture/ContentCaptureSession;->notifyViewAppeared(Landroid/view/ViewStructure;)V
-HSPLandroid/view/contentcapture/ContentCaptureSession;->notifyViewTextChanged(Landroid/view/autofill/AutofillId;Ljava/lang/CharSequence;)V+]Landroid/view/contentcapture/ContentCaptureSession;Landroid/view/contentcapture/MainContentCaptureSession;,Landroid/view/contentcapture/ChildContentCaptureSession;
+HSPLandroid/view/contentcapture/ContentCaptureSession;->notifyViewAppeared(Landroid/view/ViewStructure;)V+]Landroid/view/contentcapture/ContentCaptureSession;Landroid/view/contentcapture/MainContentCaptureSession;
+HSPLandroid/view/contentcapture/ContentCaptureSession;->notifyViewTextChanged(Landroid/view/autofill/AutofillId;Ljava/lang/CharSequence;)V+]Landroid/view/contentcapture/ContentCaptureSession;Landroid/view/contentcapture/ChildContentCaptureSession;,Landroid/view/contentcapture/MainContentCaptureSession;
 HSPLandroid/view/contentcapture/IContentCaptureDirectManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/view/contentcapture/IContentCaptureDirectManager$Stub$Proxy;->asBinder()Landroid/os/IBinder;
-HSPLandroid/view/contentcapture/IContentCaptureDirectManager$Stub$Proxy;->sendEvents(Landroid/content/pm/ParceledListSlice;ILandroid/content/ContentCaptureOptions;)V
+HSPLandroid/view/contentcapture/IContentCaptureDirectManager$Stub$Proxy;->sendEvents(Landroid/content/pm/ParceledListSlice;ILandroid/content/ContentCaptureOptions;)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/contentcapture/IContentCaptureDirectManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/contentcapture/IContentCaptureDirectManager;
 HSPLandroid/view/contentcapture/IContentCaptureManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/view/contentcapture/IContentCaptureManager$Stub$Proxy;->finishSession(I)V
@@ -18872,19 +18885,19 @@
 HSPLandroid/view/contentcapture/MainContentCaptureSession$SessionStateReceiver;->lambda$send$1(Landroid/view/contentcapture/MainContentCaptureSession;ILandroid/os/IBinder;)V
 HSPLandroid/view/contentcapture/MainContentCaptureSession$SessionStateReceiver;->send(ILandroid/os/Bundle;)V
 HSPLandroid/view/contentcapture/MainContentCaptureSession;-><init>(Landroid/content/Context;Landroid/view/contentcapture/ContentCaptureManager;Landroid/os/Handler;Landroid/view/contentcapture/IContentCaptureManager;)V
-HSPLandroid/view/contentcapture/MainContentCaptureSession;->clearEvents()Landroid/content/pm/ParceledListSlice;
+HSPLandroid/view/contentcapture/MainContentCaptureSession;->clearEvents()Landroid/content/pm/ParceledListSlice;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->destroySession()V
-HSPLandroid/view/contentcapture/MainContentCaptureSession;->flush(I)V+]Landroid/os/Handler;Landroid/os/Handler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Landroid/view/contentcapture/IContentCaptureDirectManager;Landroid/service/contentcapture/ContentCaptureService$2;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/util/LocalLog;Landroid/util/LocalLog;
+HSPLandroid/view/contentcapture/MainContentCaptureSession;->flush(I)V+]Landroid/os/Handler;Landroid/os/Handler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Landroid/view/contentcapture/IContentCaptureDirectManager;Landroid/view/contentcapture/IContentCaptureDirectManager$Stub$Proxy;,Landroid/service/contentcapture/ContentCaptureService$2;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/util/LocalLog;Landroid/util/LocalLog;
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->flushIfNeeded(I)V
-HSPLandroid/view/contentcapture/MainContentCaptureSession;->getActivityName()Ljava/lang/String;
-HSPLandroid/view/contentcapture/MainContentCaptureSession;->getDebugState()Ljava/lang/String;
-HSPLandroid/view/contentcapture/MainContentCaptureSession;->getDebugState(I)Ljava/lang/String;
+HSPLandroid/view/contentcapture/MainContentCaptureSession;->getActivityName()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/ComponentName;Landroid/content/ComponentName;
+HSPLandroid/view/contentcapture/MainContentCaptureSession;->getDebugState()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;
+HSPLandroid/view/contentcapture/MainContentCaptureSession;->getDebugState(I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->hasStarted()Z
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->internalNotifyViewAppeared(Landroid/view/contentcapture/ViewNode$ViewStructureImpl;)V
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->internalNotifyViewTextChanged(Landroid/view/autofill/AutofillId;Ljava/lang/CharSequence;)V
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->internalNotifyViewTreeEvent(Z)V
-HSPLandroid/view/contentcapture/MainContentCaptureSession;->isContentCaptureEnabled()Z
-HSPLandroid/view/contentcapture/MainContentCaptureSession;->isDisabled()Z
+HSPLandroid/view/contentcapture/MainContentCaptureSession;->isContentCaptureEnabled()Z+]Landroid/view/contentcapture/ContentCaptureManager;Landroid/view/contentcapture/ContentCaptureManager;
+HSPLandroid/view/contentcapture/MainContentCaptureSession;->isDisabled()Z+]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->lambda$notifySessionPaused$11$android-view-contentcapture-MainContentCaptureSession(I)V
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->lambda$notifySessionResumed$10$android-view-contentcapture-MainContentCaptureSession(I)V
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->lambda$notifyViewAppeared$5$android-view-contentcapture-MainContentCaptureSession(ILandroid/view/contentcapture/ViewNode$ViewStructureImpl;)V+]Landroid/view/contentcapture/ContentCaptureEvent;Landroid/view/contentcapture/ContentCaptureEvent;
@@ -18898,19 +18911,19 @@
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->notifyViewAppeared(ILandroid/view/contentcapture/ViewNode$ViewStructureImpl;)V
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->notifyViewDisappeared(ILandroid/view/autofill/AutofillId;)V
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->notifyViewInsetsChanged(ILandroid/graphics/Insets;)V
-HSPLandroid/view/contentcapture/MainContentCaptureSession;->notifyViewTextChanged(ILandroid/view/autofill/AutofillId;Ljava/lang/CharSequence;)V
+HSPLandroid/view/contentcapture/MainContentCaptureSession;->notifyViewTextChanged(ILandroid/view/autofill/AutofillId;Ljava/lang/CharSequence;)V+]Landroid/os/Handler;Landroid/os/Handler;
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->notifyViewTreeEvent(IZ)V
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->notifyWindowBoundsChanged(ILandroid/graphics/Rect;)V
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->onDestroy()V
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->onSessionStarted(ILandroid/os/IBinder;)V
-HSPLandroid/view/contentcapture/MainContentCaptureSession;->scheduleFlush(IZ)V
+HSPLandroid/view/contentcapture/MainContentCaptureSession;->scheduleFlush(IZ)V+]Landroid/os/Handler;Landroid/os/Handler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->sendEvent(Landroid/view/contentcapture/ContentCaptureEvent;)V
-HSPLandroid/view/contentcapture/MainContentCaptureSession;->sendEvent(Landroid/view/contentcapture/ContentCaptureEvent;Z)V+]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Landroid/view/contentcapture/ContentCaptureEvent;Landroid/view/contentcapture/ContentCaptureEvent;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/contentcapture/MainContentCaptureSession;Landroid/view/contentcapture/MainContentCaptureSession;
+HSPLandroid/view/contentcapture/MainContentCaptureSession;->sendEvent(Landroid/view/contentcapture/ContentCaptureEvent;Z)V+]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Landroid/view/contentcapture/ContentCaptureEvent;Landroid/view/contentcapture/ContentCaptureEvent;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/contentcapture/MainContentCaptureSession;Landroid/view/contentcapture/MainContentCaptureSession;]Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillId;
 HSPLandroid/view/contentcapture/MainContentCaptureSession;->start(Landroid/os/IBinder;Landroid/os/IBinder;Landroid/content/ComponentName;I)V
 HSPLandroid/view/contentcapture/ViewNode$ViewNodeText;-><init>()V
 HSPLandroid/view/contentcapture/ViewNode$ViewNodeText;->isSimple()Z
 HSPLandroid/view/contentcapture/ViewNode$ViewNodeText;->writeToParcel(Landroid/os/Parcel;Z)V
-HSPLandroid/view/contentcapture/ViewNode$ViewStructureImpl;-><init>(Landroid/view/View;)V
+HSPLandroid/view/contentcapture/ViewNode$ViewStructureImpl;-><init>(Landroid/view/View;)V+]Landroid/view/View;missing_types
 HSPLandroid/view/contentcapture/ViewNode$ViewStructureImpl;->getNodeText()Landroid/view/contentcapture/ViewNode$ViewNodeText;
 HSPLandroid/view/contentcapture/ViewNode$ViewStructureImpl;->setAutofillHints([Ljava/lang/String;)V
 HSPLandroid/view/contentcapture/ViewNode$ViewStructureImpl;->setAutofillType(I)V
@@ -18941,7 +18954,7 @@
 HSPLandroid/view/contentcapture/ViewNode$ViewStructureImpl;->setVisibility(I)V
 HSPLandroid/view/contentcapture/ViewNode;->-$$Nest$fputmReceiveContentMimeTypes(Landroid/view/contentcapture/ViewNode;[Ljava/lang/String;)V
 HSPLandroid/view/contentcapture/ViewNode;-><init>()V
-HSPLandroid/view/contentcapture/ViewNode;->writeSelfToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/view/contentcapture/ViewNode;->writeSelfToParcel(Landroid/os/Parcel;I)V+]Landroid/view/contentcapture/ViewNode$ViewNodeText;Landroid/view/contentcapture/ViewNode$ViewNodeText;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/view/contentcapture/ViewNode;->writeToParcel(Landroid/os/Parcel;Landroid/view/contentcapture/ViewNode;I)V
 HSPLandroid/view/inputmethod/BaseInputConnection;-><init>(Landroid/view/View;Z)V
 HSPLandroid/view/inputmethod/BaseInputConnection;-><init>(Landroid/view/inputmethod/InputMethodManager;Z)V
@@ -19031,7 +19044,7 @@
 HSPLandroid/view/inputmethod/InputMethodManager;->-$$Nest$mforAccessibilitySessionsLocked(Landroid/view/inputmethod/InputMethodManager;Ljava/util/function/Consumer;)V
 HSPLandroid/view/inputmethod/InputMethodManager;-><init>(Lcom/android/internal/view/IInputMethodManager;ILandroid/os/Looper;)V
 HSPLandroid/view/inputmethod/InputMethodManager;->canStartInput(Landroid/view/View;)Z
-HSPLandroid/view/inputmethod/InputMethodManager;->checkFocus()V
+HSPLandroid/view/inputmethod/InputMethodManager;->checkFocus()V+]Landroid/view/ImeFocusController;Landroid/view/ImeFocusController;
 HSPLandroid/view/inputmethod/InputMethodManager;->clearConnectionLocked()V
 HSPLandroid/view/inputmethod/InputMethodManager;->closeCurrentInput()V
 HSPLandroid/view/inputmethod/InputMethodManager;->createInstance(ILandroid/os/Looper;)Landroid/view/inputmethod/InputMethodManager;
@@ -19044,13 +19057,13 @@
 HSPLandroid/view/inputmethod/InputMethodManager;->flushPendingEventsLocked()V
 HSPLandroid/view/inputmethod/InputMethodManager;->forAccessibilitySessionsLocked(Ljava/util/function/Consumer;)V
 HSPLandroid/view/inputmethod/InputMethodManager;->forContext(Landroid/content/Context;)Landroid/view/inputmethod/InputMethodManager;
-HSPLandroid/view/inputmethod/InputMethodManager;->forContextInternal(ILandroid/os/Looper;)Landroid/view/inputmethod/InputMethodManager;
+HSPLandroid/view/inputmethod/InputMethodManager;->forContextInternal(ILandroid/os/Looper;)Landroid/view/inputmethod/InputMethodManager;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLandroid/view/inputmethod/InputMethodManager;->getDelegate()Landroid/view/inputmethod/InputMethodManager$DelegateImpl;
 HSPLandroid/view/inputmethod/InputMethodManager;->getEnabledInputMethodList()Ljava/util/List;
 HSPLandroid/view/inputmethod/InputMethodManager;->getEnabledInputMethodSubtypeList(Landroid/view/inputmethod/InputMethodInfo;Z)Ljava/util/List;
-HSPLandroid/view/inputmethod/InputMethodManager;->getFallbackInputMethodManagerIfNecessary(Landroid/view/View;)Landroid/view/inputmethod/InputMethodManager;
-HSPLandroid/view/inputmethod/InputMethodManager;->getFocusController()Landroid/view/ImeFocusController;
-HSPLandroid/view/inputmethod/InputMethodManager;->getServedViewLocked()Landroid/view/View;
+HSPLandroid/view/inputmethod/InputMethodManager;->getFallbackInputMethodManagerIfNecessary(Landroid/view/View;)Landroid/view/inputmethod/InputMethodManager;+]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
+HSPLandroid/view/inputmethod/InputMethodManager;->getFocusController()Landroid/view/ImeFocusController;+]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
+HSPLandroid/view/inputmethod/InputMethodManager;->getServedViewLocked()Landroid/view/View;+]Landroid/view/ImeFocusController;Landroid/view/ImeFocusController;]Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;
 HSPLandroid/view/inputmethod/InputMethodManager;->getStartInputFlags(Landroid/view/View;I)I
 HSPLandroid/view/inputmethod/InputMethodManager;->hasServedByInputMethodLocked(Landroid/view/View;)Z
 HSPLandroid/view/inputmethod/InputMethodManager;->hideSoftInputFromWindow(Landroid/os/IBinder;I)Z
@@ -19058,7 +19071,7 @@
 HSPLandroid/view/inputmethod/InputMethodManager;->hideSoftInputFromWindow(Landroid/os/IBinder;ILandroid/os/ResultReceiver;I)Z
 HSPLandroid/view/inputmethod/InputMethodManager;->invalidateInput(Landroid/view/View;)V
 HSPLandroid/view/inputmethod/InputMethodManager;->isActive()Z
-HSPLandroid/view/inputmethod/InputMethodManager;->isActive(Landroid/view/View;)Z
+HSPLandroid/view/inputmethod/InputMethodManager;->isActive(Landroid/view/View;)Z+]Landroid/view/inputmethod/InputMethodManager;Landroid/view/inputmethod/InputMethodManager;
 HSPLandroid/view/inputmethod/InputMethodManager;->isCursorAnchorInfoEnabled()Z
 HSPLandroid/view/inputmethod/InputMethodManager;->isFullscreenMode()Z
 HSPLandroid/view/inputmethod/InputMethodManager;->isInEditMode()Z
@@ -19474,7 +19487,7 @@
 HSPLandroid/widget/AutoCompleteTextView$MyWatcher;-><init>(Landroid/widget/AutoCompleteTextView;)V
 HSPLandroid/widget/AutoCompleteTextView$PassThroughClickListener;-><init>(Landroid/widget/AutoCompleteTextView;)V
 HSPLandroid/widget/AutoCompleteTextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HSPLandroid/widget/AutoCompleteTextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;IILandroid/content/res/Resources$Theme;)V
+HSPLandroid/widget/AutoCompleteTextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;IILandroid/content/res/Resources$Theme;)V+]Landroid/widget/ListPopupWindow;Landroid/widget/ListPopupWindow;]Landroid/content/Context;Landroid/view/ContextThemeWrapper;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/widget/AutoCompleteTextView;->setCompletionHint(Ljava/lang/CharSequence;)V
 HSPLandroid/widget/BaseAdapter;-><init>()V
 HSPLandroid/widget/BaseAdapter;->areAllItemsEnabled()Z
@@ -19507,7 +19520,7 @@
 HSPLandroid/widget/CompoundButton;->isChecked()Z
 HSPLandroid/widget/CompoundButton;->jumpDrawablesToCurrentState()V
 HSPLandroid/widget/CompoundButton;->onCreateDrawableState(I)[I
-HSPLandroid/widget/CompoundButton;->onDraw(Landroid/graphics/Canvas;)V
+HSPLandroid/widget/CompoundButton;->onDraw(Landroid/graphics/Canvas;)V+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/AnimatedStateListDrawable;,Landroid/graphics/drawable/RippleDrawable;
 HSPLandroid/widget/CompoundButton;->onProvideStructure(Landroid/view/ViewStructure;II)V
 HSPLandroid/widget/CompoundButton;->onResolveDrawables(I)V
 HSPLandroid/widget/CompoundButton;->onSaveInstanceState()Landroid/os/Parcelable;
@@ -19527,7 +19540,7 @@
 HSPLandroid/widget/EdgeEffect;->isAtEquilibrium()Z
 HSPLandroid/widget/EdgeEffect;->isFinished()Z
 HSPLandroid/widget/EdgeEffect;->onAbsorb(I)V
-HSPLandroid/widget/EdgeEffect;->onPull(FF)V
+HSPLandroid/widget/EdgeEffect;->onPull(FF)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/widget/EdgeEffect;->onPullDistance(FF)F+]Landroid/widget/EdgeEffect;Landroid/widget/EdgeEffect;
 HSPLandroid/widget/EdgeEffect;->onRelease()V
 HSPLandroid/widget/EdgeEffect;->setSize(II)V
@@ -19598,7 +19611,7 @@
 HSPLandroid/widget/Editor$InsertionPointCursorController;->onTouchEvent(Landroid/view/MotionEvent;)V
 HSPLandroid/widget/Editor$InsertionPointCursorController;->show()V
 HSPLandroid/widget/Editor$PositionListener;->addSubscriber(Landroid/widget/Editor$TextViewPositionListener;Z)V
-HSPLandroid/widget/Editor$PositionListener;->onPreDraw()Z+]Landroid/widget/Editor$TextViewPositionListener;Landroid/widget/Editor$CursorAnchorInfoNotifier;
+HSPLandroid/widget/Editor$PositionListener;->onPreDraw()Z+]Landroid/widget/Editor$TextViewPositionListener;Landroid/widget/Editor$CursorAnchorInfoNotifier;,Landroid/widget/Editor$InsertionHandleView;
 HSPLandroid/widget/Editor$PositionListener;->onScrollChanged()V
 HSPLandroid/widget/Editor$PositionListener;->removeSubscriber(Landroid/widget/Editor$TextViewPositionListener;)V
 HSPLandroid/widget/Editor$PositionListener;->updatePosition()V
@@ -19638,8 +19651,8 @@
 HSPLandroid/widget/Editor;->createInputMethodStateIfNeeded()V
 HSPLandroid/widget/Editor;->discardTextDisplayLists()V
 HSPLandroid/widget/Editor;->downgradeEasyCorrectionSpans()V
-HSPLandroid/widget/Editor;->drawHardwareAccelerated(Landroid/graphics/Canvas;Landroid/text/Layout;Landroid/graphics/Path;Landroid/graphics/Paint;I)V
-HSPLandroid/widget/Editor;->drawHardwareAcceleratedInner(Landroid/graphics/Canvas;Landroid/text/Layout;Landroid/graphics/Path;Landroid/graphics/Paint;I[I[IIII)I
+HSPLandroid/widget/Editor;->drawHardwareAccelerated(Landroid/graphics/Canvas;Landroid/text/Layout;Landroid/graphics/Path;Landroid/graphics/Paint;I)V+]Landroid/text/DynamicLayout;Landroid/text/DynamicLayout;]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;
+HSPLandroid/widget/Editor;->drawHardwareAcceleratedInner(Landroid/graphics/Canvas;Landroid/text/Layout;Landroid/graphics/Path;Landroid/graphics/Paint;I[I[IIII)I+]Landroid/widget/Editor$TextRenderNode;Landroid/widget/Editor$TextRenderNode;]Landroid/text/Layout;Landroid/text/DynamicLayout;]Landroid/graphics/RecordingCanvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/RenderNode;Landroid/graphics/RenderNode;
 HSPLandroid/widget/Editor;->endBatchEdit()V
 HSPLandroid/widget/Editor;->ensureEndedBatchEdit()V
 HSPLandroid/widget/Editor;->ensureNoSelectionIfNonSelectable()V
@@ -19648,7 +19661,7 @@
 HSPLandroid/widget/Editor;->forgetUndoRedo()V
 HSPLandroid/widget/Editor;->getAvailableDisplayListIndex([III)I
 HSPLandroid/widget/Editor;->getDefaultOnReceiveContentListener()Landroid/widget/TextViewOnReceiveContentListener;
-HSPLandroid/widget/Editor;->getInputMethodManager()Landroid/view/inputmethod/InputMethodManager;
+HSPLandroid/widget/Editor;->getInputMethodManager()Landroid/view/inputmethod/InputMethodManager;+]Landroid/content/Context;missing_types
 HSPLandroid/widget/Editor;->getInsertionController()Landroid/widget/Editor$InsertionPointCursorController;
 HSPLandroid/widget/Editor;->getLastTapPosition()I
 HSPLandroid/widget/Editor;->getPositionListener()Landroid/widget/Editor$PositionListener;
@@ -19678,7 +19691,7 @@
 HSPLandroid/widget/Editor;->onTouchEvent(Landroid/view/MotionEvent;)V
 HSPLandroid/widget/Editor;->onTouchUpEvent(Landroid/view/MotionEvent;)V
 HSPLandroid/widget/Editor;->onWindowFocusChanged(Z)V
-HSPLandroid/widget/Editor;->prepareCursorControllers()V
+HSPLandroid/widget/Editor;->prepareCursorControllers()V+]Landroid/view/View;missing_types]Landroid/widget/Editor;Landroid/widget/Editor;
 HSPLandroid/widget/Editor;->refreshTextActionMode()V
 HSPLandroid/widget/Editor;->reportExtractedText()Z
 HSPLandroid/widget/Editor;->restoreInstanceState(Landroid/os/ParcelableParcel;)V
@@ -19709,12 +19722,12 @@
 HSPLandroid/widget/ForwardingListener;->onViewDetachedFromWindow(Landroid/view/View;)V
 HSPLandroid/widget/FrameLayout$LayoutParams;-><init>(II)V
 HSPLandroid/widget/FrameLayout$LayoutParams;-><init>(III)V
-HSPLandroid/widget/FrameLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/FrameLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/Context;missing_types
 HSPLandroid/widget/FrameLayout$LayoutParams;-><init>(Landroid/view/ViewGroup$LayoutParams;)V
 HSPLandroid/widget/FrameLayout;-><init>(Landroid/content/Context;)V
 HSPLandroid/widget/FrameLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/widget/FrameLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroid/widget/FrameLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/FrameLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/widget/FrameLayout;missing_types]Landroid/content/Context;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/widget/FrameLayout;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
 HSPLandroid/widget/FrameLayout;->generateDefaultLayoutParams()Landroid/view/ViewGroup$LayoutParams;
 HSPLandroid/widget/FrameLayout;->generateDefaultLayoutParams()Landroid/widget/FrameLayout$LayoutParams;
@@ -19722,13 +19735,13 @@
 HSPLandroid/widget/FrameLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/FrameLayout$LayoutParams;
 HSPLandroid/widget/FrameLayout;->generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/view/ViewGroup$LayoutParams;
 HSPLandroid/widget/FrameLayout;->getAccessibilityClassName()Ljava/lang/CharSequence;
-HSPLandroid/widget/FrameLayout;->getPaddingBottomWithForeground()I
-HSPLandroid/widget/FrameLayout;->getPaddingLeftWithForeground()I
-HSPLandroid/widget/FrameLayout;->getPaddingRightWithForeground()I
-HSPLandroid/widget/FrameLayout;->getPaddingTopWithForeground()I
-HSPLandroid/widget/FrameLayout;->layoutChildren(IIIIZ)V
+HSPLandroid/widget/FrameLayout;->getPaddingBottomWithForeground()I+]Landroid/widget/FrameLayout;missing_types
+HSPLandroid/widget/FrameLayout;->getPaddingLeftWithForeground()I+]Landroid/widget/FrameLayout;missing_types
+HSPLandroid/widget/FrameLayout;->getPaddingRightWithForeground()I+]Landroid/widget/FrameLayout;missing_types
+HSPLandroid/widget/FrameLayout;->getPaddingTopWithForeground()I+]Landroid/widget/FrameLayout;missing_types
+HSPLandroid/widget/FrameLayout;->layoutChildren(IIIIZ)V+]Landroid/view/View;missing_types]Landroid/widget/FrameLayout;missing_types
 HSPLandroid/widget/FrameLayout;->onLayout(ZIIII)V
-HSPLandroid/widget/FrameLayout;->onMeasure(II)V
+HSPLandroid/widget/FrameLayout;->onMeasure(II)V+]Landroid/widget/FrameLayout;missing_types]Landroid/view/View;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/widget/FrameLayout;->setForegroundGravity(I)V
 HSPLandroid/widget/FrameLayout;->setMeasureAllChildren(Z)V
 HSPLandroid/widget/FrameLayout;->shouldDelayChildPressedState()Z
@@ -19744,9 +19757,9 @@
 HSPLandroid/widget/GridLayout$Axis$1;->walk(I)V
 HSPLandroid/widget/GridLayout$Axis;-><init>(Landroid/widget/GridLayout;Z)V
 HSPLandroid/widget/GridLayout$Axis;->calculateMaxIndex()I
-HSPLandroid/widget/GridLayout$Axis;->computeGroupBounds()V
+HSPLandroid/widget/GridLayout$Axis;->computeGroupBounds()V+]Landroid/widget/GridLayout;Landroid/widget/GridLayout;]Landroid/widget/GridLayout$Axis;Landroid/widget/GridLayout$Axis;]Landroid/widget/GridLayout$PackedMap;Landroid/widget/GridLayout$PackedMap;]Landroid/widget/GridLayout$Bounds;Landroid/widget/GridLayout$7$1;,Landroid/widget/GridLayout$Bounds;
 HSPLandroid/widget/GridLayout$Axis;->computeHasWeights()Z
-HSPLandroid/widget/GridLayout$Axis;->computeLinks(Landroid/widget/GridLayout$PackedMap;Z)V
+HSPLandroid/widget/GridLayout$Axis;->computeLinks(Landroid/widget/GridLayout$PackedMap;Z)V+]Landroid/widget/GridLayout$MutableInt;Landroid/widget/GridLayout$MutableInt;]Landroid/widget/GridLayout$Axis;Landroid/widget/GridLayout$Axis;]Landroid/widget/GridLayout$PackedMap;Landroid/widget/GridLayout$PackedMap;]Landroid/widget/GridLayout$Bounds;Landroid/widget/GridLayout$7$1;,Landroid/widget/GridLayout$Bounds;
 HSPLandroid/widget/GridLayout$Axis;->computeLocations([I)V
 HSPLandroid/widget/GridLayout$Axis;->createArcs()[Landroid/widget/GridLayout$Arc;
 HSPLandroid/widget/GridLayout$Axis;->createGroupBounds()Landroid/widget/GridLayout$PackedMap;
@@ -19758,7 +19771,7 @@
 HSPLandroid/widget/GridLayout$Axis;->include(Ljava/util/List;Landroid/widget/GridLayout$Interval;Landroid/widget/GridLayout$MutableInt;Z)V
 HSPLandroid/widget/GridLayout$Axis;->layout(I)V
 HSPLandroid/widget/GridLayout$Axis;->setCount(I)V
-HSPLandroid/widget/GridLayout$Axis;->solve([Landroid/widget/GridLayout$Arc;[IZ)Z
+HSPLandroid/widget/GridLayout$Axis;->solve([Landroid/widget/GridLayout$Arc;[IZ)Z+]Landroid/widget/GridLayout$Axis;Landroid/widget/GridLayout$Axis;
 HSPLandroid/widget/GridLayout$Bounds;->getOffset(Landroid/widget/GridLayout;Landroid/view/View;Landroid/widget/GridLayout$Alignment;IZ)I
 HSPLandroid/widget/GridLayout$Bounds;->include(II)V
 HSPLandroid/widget/GridLayout$Bounds;->reset()V
@@ -19774,10 +19787,10 @@
 HSPLandroid/widget/GridLayout;->consistencyCheck()V
 HSPLandroid/widget/GridLayout;->getDefaultMargin(Landroid/view/View;Landroid/widget/GridLayout$LayoutParams;ZZ)I
 HSPLandroid/widget/GridLayout;->getLayoutParams(Landroid/view/View;)Landroid/widget/GridLayout$LayoutParams;
-HSPLandroid/widget/GridLayout;->getMargin(Landroid/view/View;ZZ)I
-HSPLandroid/widget/GridLayout;->getMargin1(Landroid/view/View;ZZ)I
+HSPLandroid/widget/GridLayout;->getMargin(Landroid/view/View;ZZ)I+]Landroid/widget/GridLayout;Landroid/widget/GridLayout;
+HSPLandroid/widget/GridLayout;->getMargin1(Landroid/view/View;ZZ)I+]Landroid/widget/GridLayout;Landroid/widget/GridLayout;
 HSPLandroid/widget/GridLayout;->getMeasurement(Landroid/view/View;Z)I
-HSPLandroid/widget/GridLayout;->measureChildrenWithMargins(IIZ)V
+HSPLandroid/widget/GridLayout;->measureChildrenWithMargins(IIZ)V+]Landroid/widget/GridLayout;Landroid/widget/GridLayout;]Landroid/widget/GridLayout$Axis;Landroid/widget/GridLayout$Axis;
 HSPLandroid/widget/GridLayout;->onLayout(ZIIII)V
 HSPLandroid/widget/GridLayout;->onMeasure(II)V
 HSPLandroid/widget/GridLayout;->requestLayout()V
@@ -19825,33 +19838,33 @@
 HSPLandroid/widget/ImageView;-><init>(Landroid/content/Context;)V
 HSPLandroid/widget/ImageView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/widget/ImageView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroid/widget/ImageView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/widget/ImageView;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/Context;missing_types
+HSPLandroid/widget/ImageView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/widget/ImageView;missing_types]Landroid/content/Context;missing_types
 HSPLandroid/widget/ImageView;->applyAlpha()V
 HSPLandroid/widget/ImageView;->applyColorFilter()V
 HSPLandroid/widget/ImageView;->applyImageTint()V
 HSPLandroid/widget/ImageView;->applyXfermode()V
 HSPLandroid/widget/ImageView;->clearColorFilter()V
-HSPLandroid/widget/ImageView;->configureBounds()V
+HSPLandroid/widget/ImageView;->configureBounds()V+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/graphics/drawable/Drawable;missing_types]Landroid/widget/ImageView;missing_types
 HSPLandroid/widget/ImageView;->drawableHotspotChanged(FF)V
-HSPLandroid/widget/ImageView;->drawableStateChanged()V
+HSPLandroid/widget/ImageView;->drawableStateChanged()V+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;,Landroid/graphics/drawable/BitmapDrawable;,Landroid/graphics/drawable/ColorDrawable;
 HSPLandroid/widget/ImageView;->getAccessibilityClassName()Ljava/lang/CharSequence;
 HSPLandroid/widget/ImageView;->getBaseline()I
 HSPLandroid/widget/ImageView;->getDrawable()Landroid/graphics/drawable/Drawable;
 HSPLandroid/widget/ImageView;->getImageMatrix()Landroid/graphics/Matrix;
 HSPLandroid/widget/ImageView;->getScaleType()Landroid/widget/ImageView$ScaleType;
 HSPLandroid/widget/ImageView;->hasOverlappingRendering()Z
-HSPLandroid/widget/ImageView;->initImageView()V+]Landroid/widget/ImageView;Landroid/widget/ImageView;,Landroid/widget/ImageButton;
-HSPLandroid/widget/ImageView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/ImageView;->initImageView()V+]Landroid/widget/ImageView;missing_types
+HSPLandroid/widget/ImageView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/graphics/drawable/Drawable;megamorphic_types]Landroid/widget/ImageView;missing_types
 HSPLandroid/widget/ImageView;->isFilledByImage()Z
-HSPLandroid/widget/ImageView;->isOpaque()Z
-HSPLandroid/widget/ImageView;->jumpDrawablesToCurrentState()V
+HSPLandroid/widget/ImageView;->isOpaque()Z+]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/widget/ImageView;->jumpDrawablesToCurrentState()V+]Landroid/graphics/drawable/Drawable;megamorphic_types
 HSPLandroid/widget/ImageView;->onAttachedToWindow()V
 HSPLandroid/widget/ImageView;->onCreateDrawableState(I)[I
 HSPLandroid/widget/ImageView;->onDetachedFromWindow()V
-HSPLandroid/widget/ImageView;->onDraw(Landroid/graphics/Canvas;)V+]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
-HSPLandroid/widget/ImageView;->onMeasure(II)V
-HSPLandroid/widget/ImageView;->onRtlPropertiesChanged(I)V
-HSPLandroid/widget/ImageView;->onVisibilityAggregated(Z)V
+HSPLandroid/widget/ImageView;->onDraw(Landroid/graphics/Canvas;)V+]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/drawable/Drawable;megamorphic_types
+HSPLandroid/widget/ImageView;->onMeasure(II)V+]Landroid/widget/ImageView;missing_types
+HSPLandroid/widget/ImageView;->onRtlPropertiesChanged(I)V+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/BitmapDrawable;,Landroid/graphics/drawable/ColorDrawable;
+HSPLandroid/widget/ImageView;->onVisibilityAggregated(Z)V+]Landroid/graphics/drawable/Drawable;megamorphic_types
 HSPLandroid/widget/ImageView;->resizeFromDrawable()V
 HSPLandroid/widget/ImageView;->resolveAdjustedSize(III)I
 HSPLandroid/widget/ImageView;->resolveUri()V
@@ -19865,7 +19878,7 @@
 HSPLandroid/widget/ImageView;->setFrame(IIII)Z
 HSPLandroid/widget/ImageView;->setImageAlpha(I)V
 HSPLandroid/widget/ImageView;->setImageBitmap(Landroid/graphics/Bitmap;)V
-HSPLandroid/widget/ImageView;->setImageDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/ImageView;->setImageDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/widget/ImageView;missing_types
 HSPLandroid/widget/ImageView;->setImageMatrix(Landroid/graphics/Matrix;)V
 HSPLandroid/widget/ImageView;->setImageResource(I)V
 HSPLandroid/widget/ImageView;->setImageTintBlendMode(Landroid/graphics/BlendMode;)V
@@ -19875,23 +19888,23 @@
 HSPLandroid/widget/ImageView;->setScaleType(Landroid/widget/ImageView$ScaleType;)V
 HSPLandroid/widget/ImageView;->setSelected(Z)V
 HSPLandroid/widget/ImageView;->setVisibility(I)V
-HSPLandroid/widget/ImageView;->updateDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/ImageView;->updateDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/graphics/drawable/Drawable;megamorphic_types]Landroid/widget/ImageView;missing_types
 HSPLandroid/widget/ImageView;->verifyDrawable(Landroid/graphics/drawable/Drawable;)Z
 HSPLandroid/widget/LinearLayout$LayoutParams;-><init>(II)V
 HSPLandroid/widget/LinearLayout$LayoutParams;-><init>(IIF)V
-HSPLandroid/widget/LinearLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V+]Landroid/content/Context;Landroid/view/ContextThemeWrapper;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLandroid/widget/LinearLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/Context;missing_types
 HSPLandroid/widget/LinearLayout$LayoutParams;-><init>(Landroid/view/ViewGroup$LayoutParams;)V
 HSPLandroid/widget/LinearLayout;-><init>(Landroid/content/Context;)V
 HSPLandroid/widget/LinearLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/widget/LinearLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroid/widget/LinearLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/content/Context;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/widget/LinearLayout;missing_types
-HSPLandroid/widget/LinearLayout;->allViewsAreGoneBefore(I)Z
+HSPLandroid/widget/LinearLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/widget/LinearLayout;missing_types]Landroid/content/Context;missing_types
+HSPLandroid/widget/LinearLayout;->allViewsAreGoneBefore(I)Z+]Landroid/view/View;missing_types]Landroid/widget/LinearLayout;missing_types
 HSPLandroid/widget/LinearLayout;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
-HSPLandroid/widget/LinearLayout;->forceUniformHeight(II)V
-HSPLandroid/widget/LinearLayout;->forceUniformWidth(II)V
+HSPLandroid/widget/LinearLayout;->forceUniformHeight(II)V+]Landroid/view/View;Landroid/widget/LinearLayout;]Landroid/widget/LinearLayout;Landroid/widget/LinearLayout;
+HSPLandroid/widget/LinearLayout;->forceUniformWidth(II)V+]Landroid/view/View;missing_types]Landroid/widget/LinearLayout;Landroid/widget/LinearLayout;
 HSPLandroid/widget/LinearLayout;->generateDefaultLayoutParams()Landroid/view/ViewGroup$LayoutParams;
 HSPLandroid/widget/LinearLayout;->generateDefaultLayoutParams()Landroid/widget/LinearLayout$LayoutParams;
-HSPLandroid/widget/LinearLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams;
+HSPLandroid/widget/LinearLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams;+]Landroid/widget/LinearLayout;Landroid/widget/LinearLayout;
 HSPLandroid/widget/LinearLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/LinearLayout$LayoutParams;+]Landroid/widget/LinearLayout;missing_types
 HSPLandroid/widget/LinearLayout;->generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/view/ViewGroup$LayoutParams;
 HSPLandroid/widget/LinearLayout;->generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/widget/LinearLayout$LayoutParams;
@@ -19903,23 +19916,23 @@
 HSPLandroid/widget/LinearLayout;->getLocationOffset(Landroid/view/View;)I
 HSPLandroid/widget/LinearLayout;->getNextLocationOffset(Landroid/view/View;)I
 HSPLandroid/widget/LinearLayout;->getOrientation()I
-HSPLandroid/widget/LinearLayout;->getVirtualChildAt(I)Landroid/view/View;
-HSPLandroid/widget/LinearLayout;->getVirtualChildCount()I
-HSPLandroid/widget/LinearLayout;->hasDividerBeforeChildAt(I)Z
-HSPLandroid/widget/LinearLayout;->layoutHorizontal(IIII)V
-HSPLandroid/widget/LinearLayout;->layoutVertical(IIII)V
+HSPLandroid/widget/LinearLayout;->getVirtualChildAt(I)Landroid/view/View;+]Landroid/widget/LinearLayout;missing_types
+HSPLandroid/widget/LinearLayout;->getVirtualChildCount()I+]Landroid/widget/LinearLayout;missing_types
+HSPLandroid/widget/LinearLayout;->hasDividerBeforeChildAt(I)Z+]Landroid/widget/LinearLayout;missing_types
+HSPLandroid/widget/LinearLayout;->layoutHorizontal(IIII)V+]Landroid/view/View;missing_types]Landroid/widget/LinearLayout;missing_types
+HSPLandroid/widget/LinearLayout;->layoutVertical(IIII)V+]Landroid/view/View;missing_types]Landroid/widget/LinearLayout;missing_types
 HSPLandroid/widget/LinearLayout;->measureChildBeforeLayout(Landroid/view/View;IIIII)V
-HSPLandroid/widget/LinearLayout;->measureHorizontal(II)V
+HSPLandroid/widget/LinearLayout;->measureHorizontal(II)V+]Landroid/view/View;missing_types]Landroid/widget/LinearLayout;missing_types
 HSPLandroid/widget/LinearLayout;->measureVertical(II)V+]Landroid/view/View;missing_types]Landroid/widget/LinearLayout;missing_types
 HSPLandroid/widget/LinearLayout;->onDraw(Landroid/graphics/Canvas;)V
 HSPLandroid/widget/LinearLayout;->onLayout(ZIIII)V
-HSPLandroid/widget/LinearLayout;->onMeasure(II)V
-HSPLandroid/widget/LinearLayout;->onRtlPropertiesChanged(I)V
+HSPLandroid/widget/LinearLayout;->onMeasure(II)V+]Landroid/widget/LinearLayout;missing_types
+HSPLandroid/widget/LinearLayout;->onRtlPropertiesChanged(I)V+]Landroid/widget/LinearLayout;Landroid/widget/LinearLayout;
 HSPLandroid/widget/LinearLayout;->setBaselineAligned(Z)V
 HSPLandroid/widget/LinearLayout;->setChildFrame(Landroid/view/View;IIII)V
 HSPLandroid/widget/LinearLayout;->setDividerDrawable(Landroid/graphics/drawable/Drawable;)V
-HSPLandroid/widget/LinearLayout;->setGravity(I)V
-HSPLandroid/widget/LinearLayout;->setOrientation(I)V
+HSPLandroid/widget/LinearLayout;->setGravity(I)V+]Landroid/widget/LinearLayout;Landroid/widget/LinearLayout;
+HSPLandroid/widget/LinearLayout;->setOrientation(I)V+]Landroid/widget/LinearLayout;Landroid/widget/LinearLayout;
 HSPLandroid/widget/LinearLayout;->shouldDelayChildPressedState()Z
 HSPLandroid/widget/ListPopupWindow;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
 HSPLandroid/widget/ListPopupWindow;->isShowing()Z
@@ -19957,7 +19970,7 @@
 HSPLandroid/widget/ListView;->lookForSelectablePosition(IZ)I
 HSPLandroid/widget/ListView;->makeAndAddView(IIZIZ)Landroid/view/View;
 HSPLandroid/widget/ListView;->measureHeightOfChildren(IIIII)I
-HSPLandroid/widget/ListView;->measureScrapChild(Landroid/view/View;III)V
+HSPLandroid/widget/ListView;->measureScrapChild(Landroid/view/View;III)V+]Landroid/widget/ListAdapter;Lcom/android/internal/app/AlertController$AlertParams$1;
 HSPLandroid/widget/ListView;->onDetachedFromWindow()V
 HSPLandroid/widget/ListView;->onFinishInflate()V
 HSPLandroid/widget/ListView;->onMeasure(II)V
@@ -19987,7 +20000,7 @@
 HSPLandroid/widget/OverScroller;-><init>(Landroid/content/Context;Landroid/view/animation/Interpolator;)V
 HSPLandroid/widget/OverScroller;-><init>(Landroid/content/Context;Landroid/view/animation/Interpolator;Z)V
 HSPLandroid/widget/OverScroller;->abortAnimation()V
-HSPLandroid/widget/OverScroller;->computeScrollOffset()Z
+HSPLandroid/widget/OverScroller;->computeScrollOffset()Z+]Landroid/widget/OverScroller;Landroid/widget/OverScroller;]Landroid/widget/OverScroller$SplineOverScroller;Landroid/widget/OverScroller$SplineOverScroller;]Landroid/view/animation/Interpolator;Landroid/view/animation/DecelerateInterpolator;
 HSPLandroid/widget/OverScroller;->fling(IIIIIIII)V
 HSPLandroid/widget/OverScroller;->fling(IIIIIIIIII)V
 HSPLandroid/widget/OverScroller;->forceFinished(Z)V
@@ -20006,7 +20019,7 @@
 HSPLandroid/widget/PopupWindow$PopupDecorView;->onDetachedFromWindow()V
 HSPLandroid/widget/PopupWindow;->-$$Nest$munregisterBackCallback(Landroid/widget/PopupWindow;Landroid/window/OnBackInvokedDispatcher;)V
 HSPLandroid/widget/PopupWindow;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroid/widget/PopupWindow;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/PopupWindow;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/widget/PopupWindow;Landroid/widget/PopupWindow;]Landroid/content/Context;Landroid/view/ContextThemeWrapper;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/widget/PopupWindow;-><init>(Landroid/view/View;II)V
 HSPLandroid/widget/PopupWindow;-><init>(Landroid/view/View;IIZ)V
 HSPLandroid/widget/PopupWindow;->attachToAnchor(Landroid/view/View;III)V
@@ -20060,12 +20073,12 @@
 HSPLandroid/widget/ProgressBar$SavedState;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/widget/ProgressBar;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/widget/ProgressBar;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroid/widget/ProgressBar;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
+HSPLandroid/widget/ProgressBar;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Ljava/lang/Thread;Ljava/lang/Thread;]Landroid/widget/ProgressBar;Landroid/widget/ProgressBar;]Landroid/content/Context;Landroid/view/ContextThemeWrapper;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLandroid/widget/ProgressBar;->applyIndeterminateTint()V
 HSPLandroid/widget/ProgressBar;->applyPrimaryProgressTint()V
 HSPLandroid/widget/ProgressBar;->applyProgressBackgroundTint()V
 HSPLandroid/widget/ProgressBar;->applyProgressTints()V
-HSPLandroid/widget/ProgressBar;->doRefreshProgress(IIZZZ)V
+HSPLandroid/widget/ProgressBar;->doRefreshProgress(IIZZZ)V+]Landroid/widget/ProgressBar;Landroid/widget/ProgressBar;
 HSPLandroid/widget/ProgressBar;->drawTrack(Landroid/graphics/Canvas;)V
 HSPLandroid/widget/ProgressBar;->drawableHotspotChanged(FF)V
 HSPLandroid/widget/ProgressBar;->drawableStateChanged()V
@@ -20077,15 +20090,15 @@
 HSPLandroid/widget/ProgressBar;->getProgress()I
 HSPLandroid/widget/ProgressBar;->getProgressDrawable()Landroid/graphics/drawable/Drawable;
 HSPLandroid/widget/ProgressBar;->initProgressBar()V
-HSPLandroid/widget/ProgressBar;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/ProgressBar;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/widget/ProgressBar;missing_types]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/widget/ProgressBar;->isIndeterminate()Z
-HSPLandroid/widget/ProgressBar;->jumpDrawablesToCurrentState()V
+HSPLandroid/widget/ProgressBar;->jumpDrawablesToCurrentState()V+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/LayerDrawable;,Landroid/graphics/drawable/RotateDrawable;
 HSPLandroid/widget/ProgressBar;->needsTileify(Landroid/graphics/drawable/Drawable;)Z
 HSPLandroid/widget/ProgressBar;->onAttachedToWindow()V
 HSPLandroid/widget/ProgressBar;->onDetachedFromWindow()V
 HSPLandroid/widget/ProgressBar;->onDraw(Landroid/graphics/Canvas;)V
 HSPLandroid/widget/ProgressBar;->onMeasure(II)V
-HSPLandroid/widget/ProgressBar;->onProgressRefresh(FZI)V
+HSPLandroid/widget/ProgressBar;->onProgressRefresh(FZI)V+]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;
 HSPLandroid/widget/ProgressBar;->onResolveDrawables(I)V
 HSPLandroid/widget/ProgressBar;->onRestoreInstanceState(Landroid/os/Parcelable;)V
 HSPLandroid/widget/ProgressBar;->onSaveInstanceState()Landroid/os/Parcelable;
@@ -20093,7 +20106,7 @@
 HSPLandroid/widget/ProgressBar;->onVisibilityAggregated(Z)V
 HSPLandroid/widget/ProgressBar;->onVisualProgressChanged(IF)V
 HSPLandroid/widget/ProgressBar;->postInvalidate()V
-HSPLandroid/widget/ProgressBar;->refreshProgress(IIZZ)V
+HSPLandroid/widget/ProgressBar;->refreshProgress(IIZZ)V+]Ljava/lang/Thread;Ljava/lang/Thread;
 HSPLandroid/widget/ProgressBar;->setIndeterminate(Z)V
 HSPLandroid/widget/ProgressBar;->setIndeterminateDrawable(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/widget/ProgressBar;->setInterpolator(Landroid/content/Context;I)V
@@ -20104,7 +20117,7 @@
 HSPLandroid/widget/ProgressBar;->setProgressDrawable(Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/widget/ProgressBar;->setProgressInternal(IZZ)Z
 HSPLandroid/widget/ProgressBar;->setSecondaryProgress(I)V
-HSPLandroid/widget/ProgressBar;->setVisualProgress(IF)V
+HSPLandroid/widget/ProgressBar;->setVisualProgress(IF)V+]Landroid/graphics/drawable/LayerDrawable;Landroid/graphics/drawable/LayerDrawable;]Landroid/widget/ProgressBar;missing_types]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/widget/ProgressBar;->startAnimation()V
 HSPLandroid/widget/ProgressBar;->stopAnimation()V
 HSPLandroid/widget/ProgressBar;->swapCurrentDrawable(Landroid/graphics/drawable/Drawable;)V
@@ -20113,12 +20126,12 @@
 HSPLandroid/widget/ProgressBar;->verifyDrawable(Landroid/graphics/drawable/Drawable;)Z
 HSPLandroid/widget/RelativeLayout$DependencyGraph$Node;-><init>()V
 HSPLandroid/widget/RelativeLayout$DependencyGraph$Node;->acquire(Landroid/view/View;)Landroid/widget/RelativeLayout$DependencyGraph$Node;
-HSPLandroid/widget/RelativeLayout$DependencyGraph$Node;->release()V
+HSPLandroid/widget/RelativeLayout$DependencyGraph$Node;->release()V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/Pools$SynchronizedPool;Landroid/util/Pools$SynchronizedPool;
 HSPLandroid/widget/RelativeLayout$DependencyGraph;-><init>()V
-HSPLandroid/widget/RelativeLayout$DependencyGraph;->add(Landroid/view/View;)V
-HSPLandroid/widget/RelativeLayout$DependencyGraph;->clear()V
-HSPLandroid/widget/RelativeLayout$DependencyGraph;->findRoots([I)Ljava/util/ArrayDeque;
-HSPLandroid/widget/RelativeLayout$DependencyGraph;->getSortedViews([Landroid/view/View;[I)V
+HSPLandroid/widget/RelativeLayout$DependencyGraph;->add(Landroid/view/View;)V+]Landroid/view/View;missing_types]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/widget/RelativeLayout$DependencyGraph;->clear()V+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/widget/RelativeLayout$DependencyGraph$Node;Landroid/widget/RelativeLayout$DependencyGraph$Node;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/widget/RelativeLayout$DependencyGraph;->findRoots([I)Ljava/util/ArrayDeque;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/view/View;missing_types]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLandroid/widget/RelativeLayout$DependencyGraph;->getSortedViews([Landroid/view/View;[I)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/view/View;missing_types]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLandroid/widget/RelativeLayout$LayoutParams;->-$$Nest$fgetmBottom(Landroid/widget/RelativeLayout$LayoutParams;)I
 HSPLandroid/widget/RelativeLayout$LayoutParams;->-$$Nest$fgetmLeft(Landroid/widget/RelativeLayout$LayoutParams;)I
 HSPLandroid/widget/RelativeLayout$LayoutParams;->-$$Nest$fgetmRight(Landroid/widget/RelativeLayout$LayoutParams;)I
@@ -20126,22 +20139,22 @@
 HSPLandroid/widget/RelativeLayout$LayoutParams;->-$$Nest$fputmBottom(Landroid/widget/RelativeLayout$LayoutParams;I)V
 HSPLandroid/widget/RelativeLayout$LayoutParams;->-$$Nest$fputmTop(Landroid/widget/RelativeLayout$LayoutParams;I)V
 HSPLandroid/widget/RelativeLayout$LayoutParams;-><init>(II)V
-HSPLandroid/widget/RelativeLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroid/widget/RelativeLayout$LayoutParams;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/Context;missing_types
 HSPLandroid/widget/RelativeLayout$LayoutParams;->addRule(I)V
 HSPLandroid/widget/RelativeLayout$LayoutParams;->addRule(II)V
 HSPLandroid/widget/RelativeLayout$LayoutParams;->getRules()[I
-HSPLandroid/widget/RelativeLayout$LayoutParams;->getRules(I)[I
+HSPLandroid/widget/RelativeLayout$LayoutParams;->getRules(I)[I+]Landroid/widget/RelativeLayout$LayoutParams;Landroid/widget/RelativeLayout$LayoutParams;
 HSPLandroid/widget/RelativeLayout$LayoutParams;->hasRelativeRules()Z
 HSPLandroid/widget/RelativeLayout$LayoutParams;->removeRule(I)V
 HSPLandroid/widget/RelativeLayout$LayoutParams;->resolveLayoutDirection(I)V
 HSPLandroid/widget/RelativeLayout$LayoutParams;->resolveRules(I)V
-HSPLandroid/widget/RelativeLayout$LayoutParams;->shouldResolveLayoutDirection(I)Z
+HSPLandroid/widget/RelativeLayout$LayoutParams;->shouldResolveLayoutDirection(I)Z+]Landroid/widget/RelativeLayout$LayoutParams;Landroid/widget/RelativeLayout$LayoutParams;
 HSPLandroid/widget/RelativeLayout;-><init>(Landroid/content/Context;)V
 HSPLandroid/widget/RelativeLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/widget/RelativeLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
 HSPLandroid/widget/RelativeLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
 HSPLandroid/widget/RelativeLayout;->applyHorizontalSizeRules(Landroid/widget/RelativeLayout$LayoutParams;I[I)V
-HSPLandroid/widget/RelativeLayout;->applyVerticalSizeRules(Landroid/widget/RelativeLayout$LayoutParams;II)V
+HSPLandroid/widget/RelativeLayout;->applyVerticalSizeRules(Landroid/widget/RelativeLayout$LayoutParams;II)V+]Landroid/widget/RelativeLayout$LayoutParams;Landroid/widget/RelativeLayout$LayoutParams;
 HSPLandroid/widget/RelativeLayout;->centerHorizontal(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;I)V
 HSPLandroid/widget/RelativeLayout;->centerVertical(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;I)V
 HSPLandroid/widget/RelativeLayout;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z
@@ -20153,21 +20166,21 @@
 HSPLandroid/widget/RelativeLayout;->getAccessibilityClassName()Ljava/lang/CharSequence;
 HSPLandroid/widget/RelativeLayout;->getBaseline()I
 HSPLandroid/widget/RelativeLayout;->getChildMeasureSpec(IIIIIIII)I
-HSPLandroid/widget/RelativeLayout;->getRelatedView([II)Landroid/view/View;
+HSPLandroid/widget/RelativeLayout;->getRelatedView([II)Landroid/view/View;+]Landroid/view/View;missing_types]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/widget/RelativeLayout$LayoutParams;Landroid/widget/RelativeLayout$LayoutParams;
 HSPLandroid/widget/RelativeLayout;->getRelatedViewBaselineOffset([I)I
-HSPLandroid/widget/RelativeLayout;->getRelatedViewParams([II)Landroid/widget/RelativeLayout$LayoutParams;
+HSPLandroid/widget/RelativeLayout;->getRelatedViewParams([II)Landroid/widget/RelativeLayout$LayoutParams;+]Landroid/view/View;missing_types
 HSPLandroid/widget/RelativeLayout;->initFromAttributes(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HSPLandroid/widget/RelativeLayout;->measureChild(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;II)V
-HSPLandroid/widget/RelativeLayout;->measureChildHorizontal(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;II)V
-HSPLandroid/widget/RelativeLayout;->onLayout(ZIIII)V
-HSPLandroid/widget/RelativeLayout;->onMeasure(II)V+]Landroid/widget/RelativeLayout;Landroid/widget/RelativeLayout;]Landroid/view/View;missing_types]Landroid/widget/RelativeLayout$LayoutParams;Landroid/widget/RelativeLayout$LayoutParams;
-HSPLandroid/widget/RelativeLayout;->positionAtEdge(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;I)V
-HSPLandroid/widget/RelativeLayout;->positionChildHorizontal(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;IZ)Z
-HSPLandroid/widget/RelativeLayout;->positionChildVertical(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;IZ)Z
+HSPLandroid/widget/RelativeLayout;->measureChild(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;II)V+]Landroid/view/View;missing_types
+HSPLandroid/widget/RelativeLayout;->measureChildHorizontal(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;II)V+]Landroid/view/View;missing_types
+HSPLandroid/widget/RelativeLayout;->onLayout(ZIIII)V+]Landroid/widget/RelativeLayout;missing_types]Landroid/view/View;missing_types
+HSPLandroid/widget/RelativeLayout;->onMeasure(II)V+]Landroid/widget/RelativeLayout;missing_types]Landroid/view/View;missing_types]Landroid/widget/RelativeLayout$LayoutParams;Landroid/widget/RelativeLayout$LayoutParams;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/content/Context;missing_types
+HSPLandroid/widget/RelativeLayout;->positionAtEdge(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;I)V+]Landroid/widget/RelativeLayout;missing_types]Landroid/view/View;missing_types
+HSPLandroid/widget/RelativeLayout;->positionChildHorizontal(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;IZ)Z+]Landroid/widget/RelativeLayout;missing_types]Landroid/widget/RelativeLayout$LayoutParams;Landroid/widget/RelativeLayout$LayoutParams;]Landroid/view/View;missing_types
+HSPLandroid/widget/RelativeLayout;->positionChildVertical(Landroid/view/View;Landroid/widget/RelativeLayout$LayoutParams;IZ)Z+]Landroid/view/View;missing_types]Landroid/widget/RelativeLayout$LayoutParams;Landroid/widget/RelativeLayout$LayoutParams;
 HSPLandroid/widget/RelativeLayout;->queryCompatibilityModes(Landroid/content/Context;)V
 HSPLandroid/widget/RelativeLayout;->requestLayout()V
 HSPLandroid/widget/RelativeLayout;->shouldDelayChildPressedState()Z
-HSPLandroid/widget/RelativeLayout;->sortChildren()V
+HSPLandroid/widget/RelativeLayout;->sortChildren()V+]Landroid/widget/RelativeLayout;missing_types]Landroid/widget/RelativeLayout$DependencyGraph;Landroid/widget/RelativeLayout$DependencyGraph;
 HSPLandroid/widget/RemoteViews$2;->createFromParcel(Landroid/os/Parcel;)Landroid/widget/RemoteViews;
 HSPLandroid/widget/RemoteViews$2;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLandroid/widget/RemoteViews$Action;-><init>()V
@@ -20207,7 +20220,7 @@
 HSPLandroid/widget/RemoteViews$TextViewSizeAction;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/widget/RemoteViews;->-$$Nest$smgetPackageUserKey(Landroid/content/pm/ApplicationInfo;)Landroid/util/Pair;
 HSPLandroid/widget/RemoteViews;-><init>(Landroid/content/pm/ApplicationInfo;I)V
-HSPLandroid/widget/RemoteViews;-><init>(Landroid/os/Parcel;Landroid/widget/RemoteViews$HierarchyRootData;Landroid/content/pm/ApplicationInfo;I)V+]Landroid/os/Parcelable$Creator;Landroid/util/SizeF$1;,Landroid/content/pm/ApplicationInfo$1;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLandroid/widget/RemoteViews;-><init>(Landroid/os/Parcel;Landroid/widget/RemoteViews$HierarchyRootData;Landroid/content/pm/ApplicationInfo;I)V+]Landroid/os/Parcelable$Creator;Landroid/content/pm/ApplicationInfo$1;,Landroid/util/SizeF$1;]Landroid/os/Parcel;Landroid/os/Parcel;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLandroid/widget/RemoteViews;-><init>(Ljava/lang/String;I)V
 HSPLandroid/widget/RemoteViews;->addAction(Landroid/widget/RemoteViews$Action;)V
 HSPLandroid/widget/RemoteViews;->apply(Landroid/content/Context;Landroid/view/ViewGroup;)Landroid/view/View;
@@ -20247,10 +20260,10 @@
 HSPLandroid/widget/RtlSpacingHelper;->setRelative(II)V
 HSPLandroid/widget/ScrollBarDrawable;-><init>()V
 HSPLandroid/widget/ScrollBarDrawable;->draw(Landroid/graphics/Canvas;)V+]Landroid/widget/ScrollBarDrawable;Landroid/widget/ScrollBarDrawable;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
-HSPLandroid/widget/ScrollBarDrawable;->drawThumb(Landroid/graphics/Canvas;Landroid/graphics/Rect;IIZ)V
-HSPLandroid/widget/ScrollBarDrawable;->getSize(Z)I
+HSPLandroid/widget/ScrollBarDrawable;->drawThumb(Landroid/graphics/Canvas;Landroid/graphics/Rect;IIZ)V+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;
+HSPLandroid/widget/ScrollBarDrawable;->getSize(Z)I+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;
 HSPLandroid/widget/ScrollBarDrawable;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
-HSPLandroid/widget/ScrollBarDrawable;->isStateful()Z
+HSPLandroid/widget/ScrollBarDrawable;->isStateful()Z+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;
 HSPLandroid/widget/ScrollBarDrawable;->mutate()Landroid/widget/ScrollBarDrawable;
 HSPLandroid/widget/ScrollBarDrawable;->onBoundsChange(Landroid/graphics/Rect;)V
 HSPLandroid/widget/ScrollBarDrawable;->onStateChange([I)Z
@@ -20271,7 +20284,7 @@
 HSPLandroid/widget/ScrollView;->computeScroll()V
 HSPLandroid/widget/ScrollView;->computeVerticalScrollOffset()I
 HSPLandroid/widget/ScrollView;->computeVerticalScrollRange()I
-HSPLandroid/widget/ScrollView;->draw(Landroid/graphics/Canvas;)V
+HSPLandroid/widget/ScrollView;->draw(Landroid/graphics/Canvas;)V+]Landroid/widget/EdgeEffect;Landroid/widget/EdgeEffect;]Landroid/widget/ScrollView;Landroid/widget/ScrollView;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;
 HSPLandroid/widget/ScrollView;->getAccessibilityClassName()Ljava/lang/CharSequence;
 HSPLandroid/widget/ScrollView;->initScrollView()V
 HSPLandroid/widget/ScrollView;->measureChildWithMargins(Landroid/view/View;IIII)V
@@ -20338,10 +20351,10 @@
 HSPLandroid/widget/Spinner;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;IIILandroid/content/res/Resources$Theme;)V
 HSPLandroid/widget/Spinner;->onDetachedFromWindow()V
 HSPLandroid/widget/Switch;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HSPLandroid/widget/Switch;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V
-HSPLandroid/widget/Switch;->drawableStateChanged()V
+HSPLandroid/widget/Switch;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/widget/Switch;Landroid/widget/Switch;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/view/ViewConfiguration;Landroid/view/ViewConfiguration;]Landroid/content/Context;Landroid/view/ContextThemeWrapper;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/AnimatedStateListDrawable;,Landroid/graphics/drawable/LayerDrawable;
+HSPLandroid/widget/Switch;->drawableStateChanged()V+]Landroid/widget/Switch;Landroid/widget/Switch;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/AnimatedStateListDrawable;,Landroid/graphics/drawable/LayerDrawable;
 HSPLandroid/widget/Switch;->getButtonStateDescription()Ljava/lang/CharSequence;
-HSPLandroid/widget/Switch;->jumpDrawablesToCurrentState()V
+HSPLandroid/widget/Switch;->jumpDrawablesToCurrentState()V+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/AnimatedStateListDrawable;,Landroid/graphics/drawable/LayerDrawable;
 HSPLandroid/widget/Switch;->onCreateDrawableState(I)[I
 HSPLandroid/widget/Switch;->setChecked(Z)V
 HSPLandroid/widget/Switch;->setSwitchTextAppearance(Landroid/content/Context;I)V
@@ -20356,7 +20369,7 @@
 HSPLandroid/widget/TextView$ChangeWatcher;->onSpanChanged(Landroid/text/Spannable;Ljava/lang/Object;IIII)V
 HSPLandroid/widget/TextView$ChangeWatcher;->onSpanRemoved(Landroid/text/Spannable;Ljava/lang/Object;II)V
 HSPLandroid/widget/TextView$ChangeWatcher;->onTextChanged(Ljava/lang/CharSequence;III)V
-HSPLandroid/widget/TextView$Drawables;-><init>(Landroid/content/Context;)V
+HSPLandroid/widget/TextView$Drawables;-><init>(Landroid/content/Context;)V+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/content/Context;missing_types
 HSPLandroid/widget/TextView$Drawables;->applyErrorDrawableIfNeeded(I)V
 HSPLandroid/widget/TextView$Drawables;->hasMetadata()Z
 HSPLandroid/widget/TextView$Drawables;->resolveWithLayoutDirection(I)Z
@@ -20369,19 +20382,19 @@
 HSPLandroid/widget/TextView;-><init>(Landroid/content/Context;)V
 HSPLandroid/widget/TextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
 HSPLandroid/widget/TextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroid/widget/TextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/content/res/Resources$Theme;Landroid/content/res/Resources$Theme;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/Context;missing_types]Landroid/widget/TextView;missing_types]Landroid/widget/Editor;Landroid/widget/Editor;]Landroid/view/ViewConfiguration;Landroid/view/ViewConfiguration;
+HSPLandroid/widget/TextView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V+]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/content/res/Resources$Theme;Landroid/content/res/Resources$Theme;]Landroid/view/ViewConfiguration;Landroid/view/ViewConfiguration;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/Context;missing_types]Landroid/widget/TextView;missing_types]Landroid/widget/Editor;Landroid/widget/Editor;
 HSPLandroid/widget/TextView;->addTextChangedListener(Landroid/text/TextWatcher;)V
 HSPLandroid/widget/TextView;->applyCompoundDrawableTint()V
 HSPLandroid/widget/TextView;->applySingleLine(ZZZZ)V
-HSPLandroid/widget/TextView;->applyTextAppearance(Landroid/widget/TextView$TextAppearanceAttributes;)V
+HSPLandroid/widget/TextView;->applyTextAppearance(Landroid/widget/TextView$TextAppearanceAttributes;)V+]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->assumeLayout()V
 HSPLandroid/widget/TextView;->autoSizeText()V
 HSPLandroid/widget/TextView;->beginBatchEdit()V
-HSPLandroid/widget/TextView;->bringPointIntoView(I)Z
+HSPLandroid/widget/TextView;->bringPointIntoView(I)Z+]Landroid/text/Layout$Alignment;Landroid/text/Layout$Alignment;]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLandroid/widget/TextView;->bringTextIntoView()Z+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->canMarquee()Z
 HSPLandroid/widget/TextView;->cancelLongPress()V
-HSPLandroid/widget/TextView;->checkForRelayout()V
+HSPLandroid/widget/TextView;->checkForRelayout()V+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->checkForResize()V
 HSPLandroid/widget/TextView;->cleanupAutoSizePresetSizes([I)[I
 HSPLandroid/widget/TextView;->compressText(F)Z
@@ -20391,21 +20404,21 @@
 HSPLandroid/widget/TextView;->computeVerticalScrollRange()I
 HSPLandroid/widget/TextView;->convertToLocalHorizontalCoordinate(F)F
 HSPLandroid/widget/TextView;->createEditorIfNeeded()V
-HSPLandroid/widget/TextView;->desired(Landroid/text/Layout;)I
+HSPLandroid/widget/TextView;->desired(Landroid/text/Layout;)I+]Landroid/text/Layout;Landroid/text/BoringLayout;
 HSPLandroid/widget/TextView;->didTouchFocusSelect()Z
 HSPLandroid/widget/TextView;->doKeyDown(ILandroid/view/KeyEvent;Landroid/view/KeyEvent;)I
 HSPLandroid/widget/TextView;->drawableHotspotChanged(FF)V
-HSPLandroid/widget/TextView;->drawableStateChanged()V
+HSPLandroid/widget/TextView;->drawableStateChanged()V+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;,Landroid/graphics/drawable/BitmapDrawable;
 HSPLandroid/widget/TextView;->endBatchEdit()V
 HSPLandroid/widget/TextView;->findLargestTextSizeWhichFits(Landroid/graphics/RectF;)I
 HSPLandroid/widget/TextView;->fixFocusableAndClickableSettings()V
 HSPLandroid/widget/TextView;->getAccessibilityClassName()Ljava/lang/CharSequence;
 HSPLandroid/widget/TextView;->getAutoSizeStepGranularity()I
 HSPLandroid/widget/TextView;->getAutofillHints()[Ljava/lang/String;
-HSPLandroid/widget/TextView;->getAutofillType()I
+HSPLandroid/widget/TextView;->getAutofillType()I+]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->getAutofillValue()Landroid/view/autofill/AutofillValue;
-HSPLandroid/widget/TextView;->getBaseline()I
-HSPLandroid/widget/TextView;->getBaselineOffset()I
+HSPLandroid/widget/TextView;->getBaseline()I+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Landroid/widget/TextView;missing_types
+HSPLandroid/widget/TextView;->getBaselineOffset()I+]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->getBottomVerticalOffset(Z)I
 HSPLandroid/widget/TextView;->getBoxHeight(Landroid/text/Layout;)I+]Landroid/widget/TextView;Landroid/widget/Switch;,Landroid/widget/TextView;,Landroid/widget/Button;
 HSPLandroid/widget/TextView;->getBreakStrategy()I
@@ -20420,12 +20433,12 @@
 HSPLandroid/widget/TextView;->getDefaultEditable()Z
 HSPLandroid/widget/TextView;->getDefaultMovementMethod()Landroid/text/method/MovementMethod;
 HSPLandroid/widget/TextView;->getDesiredHeight()I
-HSPLandroid/widget/TextView;->getDesiredHeight(Landroid/text/Layout;Z)I
+HSPLandroid/widget/TextView;->getDesiredHeight(Landroid/text/Layout;Z)I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->getEditableText()Landroid/text/Editable;
 HSPLandroid/widget/TextView;->getEllipsize()Landroid/text/TextUtils$TruncateAt;
 HSPLandroid/widget/TextView;->getError()Ljava/lang/CharSequence;
-HSPLandroid/widget/TextView;->getExtendedPaddingBottom()I+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Landroid/widget/TextView;Landroid/widget/Switch;,Landroid/widget/TextView;,Landroid/widget/Button;
-HSPLandroid/widget/TextView;->getExtendedPaddingTop()I+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Landroid/widget/TextView;Landroid/widget/Switch;,Landroid/widget/TextView;,Landroid/widget/Button;
+HSPLandroid/widget/TextView;->getExtendedPaddingBottom()I+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;,Landroid/text/DynamicLayout;]Landroid/widget/TextView;missing_types
+HSPLandroid/widget/TextView;->getExtendedPaddingTop()I+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->getFilters()[Landroid/text/InputFilter;
 HSPLandroid/widget/TextView;->getFocusedRect(Landroid/graphics/Rect;)V
 HSPLandroid/widget/TextView;->getFreezesText()Z
@@ -20441,7 +20454,7 @@
 HSPLandroid/widget/TextView;->getJustificationMode()I
 HSPLandroid/widget/TextView;->getKeyListener()Landroid/text/method/KeyListener;
 HSPLandroid/widget/TextView;->getLayout()Landroid/text/Layout;
-HSPLandroid/widget/TextView;->getLayoutAlignment()Landroid/text/Layout$Alignment;
+HSPLandroid/widget/TextView;->getLayoutAlignment()Landroid/text/Layout$Alignment;+]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->getLineAtCoordinate(F)I
 HSPLandroid/widget/TextView;->getLineAtCoordinateUnclamped(F)I
 HSPLandroid/widget/TextView;->getLineCount()I
@@ -20455,14 +20468,14 @@
 HSPLandroid/widget/TextView;->getOffsetAtCoordinate(IF)I
 HSPLandroid/widget/TextView;->getOffsetForPosition(FF)I
 HSPLandroid/widget/TextView;->getPaint()Landroid/text/TextPaint;
-HSPLandroid/widget/TextView;->getSelectionEnd()I
-HSPLandroid/widget/TextView;->getSelectionStart()I
+HSPLandroid/widget/TextView;->getSelectionEnd()I+]Landroid/widget/TextView;missing_types
+HSPLandroid/widget/TextView;->getSelectionStart()I+]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->getServiceManagerForUser(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;
 HSPLandroid/widget/TextView;->getSpellCheckerLocale()Ljava/util/Locale;
 HSPLandroid/widget/TextView;->getText()Ljava/lang/CharSequence;
 HSPLandroid/widget/TextView;->getTextColors()Landroid/content/res/ColorStateList;
 HSPLandroid/widget/TextView;->getTextCursorDrawable()Landroid/graphics/drawable/Drawable;
-HSPLandroid/widget/TextView;->getTextDirectionHeuristic()Landroid/text/TextDirectionHeuristic;
+HSPLandroid/widget/TextView;->getTextDirectionHeuristic()Landroid/text/TextDirectionHeuristic;+]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->getTextLocale()Ljava/util/Locale;
 HSPLandroid/widget/TextView;->getTextLocales()Landroid/os/LocaleList;
 HSPLandroid/widget/TextView;->getTextSelectHandle()Landroid/graphics/drawable/Drawable;
@@ -20476,21 +20489,21 @@
 HSPLandroid/widget/TextView;->getTransformationMethod()Landroid/text/method/TransformationMethod;
 HSPLandroid/widget/TextView;->getTypeface()Landroid/graphics/Typeface;
 HSPLandroid/widget/TextView;->getTypefaceStyle()I
-HSPLandroid/widget/TextView;->getUpdatedHighlightPath()Landroid/graphics/Path;+]Landroid/widget/TextView;Landroid/widget/Switch;,Landroid/widget/TextView;,Landroid/widget/Button;
-HSPLandroid/widget/TextView;->getVerticalOffset(Z)I+]Landroid/text/Layout;Landroid/text/BoringLayout;]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLandroid/widget/TextView;->getUpdatedHighlightPath()Landroid/graphics/Path;+]Landroid/graphics/Path;Landroid/graphics/Path;]Landroid/graphics/Paint;Landroid/graphics/Paint;]Landroid/text/Layout;Landroid/text/DynamicLayout;]Landroid/widget/Editor;Landroid/widget/Editor;]Landroid/widget/TextView;Landroid/widget/Switch;,Landroid/widget/TextView;,Landroid/widget/Button;
+HSPLandroid/widget/TextView;->getVerticalOffset(Z)I+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/DynamicLayout;,Landroid/text/StaticLayout;]Ljava/lang/CharSequence;missing_types
 HSPLandroid/widget/TextView;->handleBackInTextActionModeIfNeeded(Landroid/view/KeyEvent;)Z
 HSPLandroid/widget/TextView;->handleTextChanged(Ljava/lang/CharSequence;III)V
-HSPLandroid/widget/TextView;->hasOverlappingRendering()Z+]Landroid/widget/TextView;Landroid/widget/Switch;,Landroid/widget/TextView;,Landroid/widget/Button;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/RippleDrawable;
+HSPLandroid/widget/TextView;->hasOverlappingRendering()Z+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/RippleDrawable;,Landroid/graphics/drawable/GradientDrawable;,Landroid/graphics/drawable/StateListDrawable;,Landroid/graphics/drawable/ColorDrawable;,Landroid/graphics/drawable/NinePatchDrawable;]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->hasPasswordTransformationMethod()Z
 HSPLandroid/widget/TextView;->hasSelection()Z
 HSPLandroid/widget/TextView;->hideErrorIfUnchanged()V
 HSPLandroid/widget/TextView;->invalidateCursor()V
-HSPLandroid/widget/TextView;->invalidateCursorPath()V+]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/InsetDrawable;
-HSPLandroid/widget/TextView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/widget/TextView;missing_types]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/GradientDrawable;,Landroid/graphics/drawable/LayerDrawable;,Landroid/graphics/drawable/RippleDrawable;
+HSPLandroid/widget/TextView;->invalidateCursorPath()V+]Landroid/graphics/Path;Landroid/graphics/Path;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/InsetDrawable;
+HSPLandroid/widget/TextView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V+]Landroid/graphics/drawable/Drawable;megamorphic_types]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->invalidateRegion(IIZ)V
 HSPLandroid/widget/TextView;->isAnyPasswordInputType()Z
 HSPLandroid/widget/TextView;->isAutoSizeEnabled()Z
-HSPLandroid/widget/TextView;->isAutofillable()Z
+HSPLandroid/widget/TextView;->isAutofillable()Z+]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->isFallbackLineSpacingForStaticLayout()Z
 HSPLandroid/widget/TextView;->isFromPrimePointer(Landroid/view/MotionEvent;Z)Z
 HSPLandroid/widget/TextView;->isInBatchEditMode()Z
@@ -20507,19 +20520,19 @@
 HSPLandroid/widget/TextView;->isVisibleToAccessibility()Z+]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;
 HSPLandroid/widget/TextView;->jumpDrawablesToCurrentState()V+]Landroid/graphics/drawable/Drawable;missing_types
 HSPLandroid/widget/TextView;->length()I
-HSPLandroid/widget/TextView;->makeNewLayout(IILandroid/text/BoringLayout$Metrics;Landroid/text/BoringLayout$Metrics;IZ)V
-HSPLandroid/widget/TextView;->makeSingleLayout(ILandroid/text/BoringLayout$Metrics;ILandroid/text/Layout$Alignment;ZLandroid/text/TextUtils$TruncateAt;Z)Landroid/text/Layout;
-HSPLandroid/widget/TextView;->notifyContentCaptureTextChanged()V+]Landroid/widget/TextView;missing_types]Landroid/view/contentcapture/ContentCaptureManager;Landroid/view/contentcapture/ContentCaptureManager;]Landroid/content/Context;missing_types]Landroid/view/contentcapture/ContentCaptureSession;Landroid/view/contentcapture/MainContentCaptureSession;
-HSPLandroid/widget/TextView;->notifyListeningManagersAfterTextChanged()V
+HSPLandroid/widget/TextView;->makeNewLayout(IILandroid/text/BoringLayout$Metrics;Landroid/text/BoringLayout$Metrics;IZ)V+]Landroid/text/BoringLayout;Landroid/text/BoringLayout;]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/DynamicLayout;]Landroid/widget/Editor;Landroid/widget/Editor;]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/text/StaticLayout$Builder;Landroid/text/StaticLayout$Builder;]Landroid/widget/TextView;missing_types
+HSPLandroid/widget/TextView;->makeSingleLayout(ILandroid/text/BoringLayout$Metrics;ILandroid/text/Layout$Alignment;ZLandroid/text/TextUtils$TruncateAt;Z)Landroid/text/Layout;+]Landroid/text/DynamicLayout$Builder;Landroid/text/DynamicLayout$Builder;]Landroid/text/BoringLayout;Landroid/text/BoringLayout;]Ljava/lang/CharSequence;Ljava/lang/String;,Landroid/text/SpannedString;]Landroid/text/StaticLayout$Builder;Landroid/text/StaticLayout$Builder;]Landroid/widget/TextView;missing_types
+HSPLandroid/widget/TextView;->notifyContentCaptureTextChanged()V+]Landroid/view/contentcapture/ContentCaptureManager;Landroid/view/contentcapture/ContentCaptureManager;]Landroid/view/contentcapture/ContentCaptureSession;Landroid/view/contentcapture/MainContentCaptureSession;]Landroid/content/Context;missing_types]Landroid/widget/TextView;missing_types
+HSPLandroid/widget/TextView;->notifyListeningManagersAfterTextChanged()V+]Landroid/widget/TextView;missing_types]Landroid/content/Context;missing_types]Landroid/view/autofill/AutofillManager;Landroid/view/autofill/AutofillManager;
 HSPLandroid/widget/TextView;->nullLayouts()V
 HSPLandroid/widget/TextView;->onAttachedToWindow()V
 HSPLandroid/widget/TextView;->onBeginBatchEdit()V
 HSPLandroid/widget/TextView;->onCheckIsTextEditor()Z
 HSPLandroid/widget/TextView;->onConfigurationChanged(Landroid/content/res/Configuration;)V
-HSPLandroid/widget/TextView;->onCreateDrawableState(I)[I
+HSPLandroid/widget/TextView;->onCreateDrawableState(I)[I+]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->onCreateInputConnection(Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection;
 HSPLandroid/widget/TextView;->onDetachedFromWindowInternal()V
-HSPLandroid/widget/TextView;->onDraw(Landroid/graphics/Canvas;)V+]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Landroid/widget/Editor;Landroid/widget/Editor;]Landroid/widget/TextView;Landroid/widget/Switch;,Landroid/widget/EditText;,Landroid/widget/TextView;,Landroid/widget/Button;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Ljava/lang/CharSequence;Landroid/text/SpannableStringBuilder;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;
+HSPLandroid/widget/TextView;->onDraw(Landroid/graphics/Canvas;)V+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/DynamicLayout;,Landroid/text/StaticLayout;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/graphics/Canvas;Landroid/graphics/RecordingCanvas;,Landroid/graphics/Canvas;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;,Landroid/graphics/drawable/BitmapDrawable;,Landroid/graphics/drawable/StateListDrawable;,Landroid/graphics/drawable/AnimatedStateListDrawable;]Landroid/widget/Editor;Landroid/widget/Editor;]Ljava/lang/CharSequence;missing_types]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->onEditorAction(I)V
 HSPLandroid/widget/TextView;->onEndBatchEdit()V
 HSPLandroid/widget/TextView;->onFocusChanged(ZILandroid/graphics/Rect;)V
@@ -20530,9 +20543,9 @@
 HSPLandroid/widget/TextView;->onKeyUp(ILandroid/view/KeyEvent;)Z
 HSPLandroid/widget/TextView;->onLayout(ZIIII)V
 HSPLandroid/widget/TextView;->onLocaleChanged()V
-HSPLandroid/widget/TextView;->onMeasure(II)V+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;
+HSPLandroid/widget/TextView;->onMeasure(II)V+]Landroid/text/Layout;Landroid/text/BoringLayout;,Landroid/text/StaticLayout;,Landroid/text/DynamicLayout;]Ljava/lang/CharSequence;missing_types]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->onPreDraw()Z
-HSPLandroid/widget/TextView;->onProvideStructure(Landroid/view/ViewStructure;II)V
+HSPLandroid/widget/TextView;->onProvideStructure(Landroid/view/ViewStructure;II)V+]Landroid/view/View;missing_types]Landroid/widget/TextViewOnReceiveContentListener;Landroid/widget/TextViewOnReceiveContentListener;]Landroid/text/InputFilter$LengthFilter;Landroid/text/InputFilter$LengthFilter;]Landroid/text/Layout;Landroid/text/DynamicLayout;,Landroid/text/BoringLayout;,Landroid/text/StaticLayout;]Landroid/widget/Editor;Landroid/widget/Editor;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/view/ViewStructure;Landroid/app/assist/AssistStructure$ViewNodeBuilder;,Landroid/view/contentcapture/ViewNode$ViewStructureImpl;]Ljava/lang/CharSequence;Ljava/lang/String;,Landroid/text/SpannableString;]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->onResolveDrawables(I)V
 HSPLandroid/widget/TextView;->onRestoreInstanceState(Landroid/os/Parcelable;)V
 HSPLandroid/widget/TextView;->onRtlPropertiesChanged(I)V
@@ -20546,12 +20559,12 @@
 HSPLandroid/widget/TextView;->onVisibilityChanged(Landroid/view/View;I)V
 HSPLandroid/widget/TextView;->onWindowFocusChanged(Z)V
 HSPLandroid/widget/TextView;->preloadFontCache()V
-HSPLandroid/widget/TextView;->readTextAppearance(Landroid/content/Context;Landroid/content/res/TypedArray;Landroid/widget/TextView$TextAppearanceAttributes;Z)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/TypedValue;Landroid/util/TypedValue;]Landroid/content/Context;missing_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
+HSPLandroid/widget/TextView;->readTextAppearance(Landroid/content/Context;Landroid/content/res/TypedArray;Landroid/widget/TextView$TextAppearanceAttributes;Z)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/TypedValue;Landroid/util/TypedValue;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/Context;missing_types
 HSPLandroid/widget/TextView;->registerForPreDraw()V
 HSPLandroid/widget/TextView;->removeAdjacentSuggestionSpans(I)V
-HSPLandroid/widget/TextView;->removeIntersectingNonAdjacentSpans(IILjava/lang/Class;)V
+HSPLandroid/widget/TextView;->removeIntersectingNonAdjacentSpans(IILjava/lang/Class;)V+]Landroid/text/Editable;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLandroid/widget/TextView;->removeMisspelledSpans(Landroid/text/Spannable;)V
-HSPLandroid/widget/TextView;->removeSuggestionSpans(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
+HSPLandroid/widget/TextView;->removeSuggestionSpans(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;+]Landroid/text/Spannable$Factory;Landroid/text/Spannable$Factory;]Ljava/lang/CharSequence;Landroid/text/SpannedString;,Landroid/text/SpannableStringBuilder;,Landroid/text/SpannableString;]Landroid/text/Spannable;Landroid/text/SpannableStringBuilder;,Landroid/text/SpannableString;
 HSPLandroid/widget/TextView;->removeTextChangedListener(Landroid/text/TextWatcher;)V
 HSPLandroid/widget/TextView;->resetErrorChangedFlag()V
 HSPLandroid/widget/TextView;->resetResolvedDrawables()V
@@ -20559,31 +20572,31 @@
 HSPLandroid/widget/TextView;->restartMarqueeIfNeeded()V
 HSPLandroid/widget/TextView;->sendAccessibilityEventInternal(I)V
 HSPLandroid/widget/TextView;->sendAfterTextChanged(Landroid/text/Editable;)V
-HSPLandroid/widget/TextView;->sendBeforeTextChanged(Ljava/lang/CharSequence;III)V
-HSPLandroid/widget/TextView;->sendOnTextChanged(Ljava/lang/CharSequence;III)V
+HSPLandroid/widget/TextView;->sendBeforeTextChanged(Ljava/lang/CharSequence;III)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/text/TextWatcher;missing_types
+HSPLandroid/widget/TextView;->sendOnTextChanged(Ljava/lang/CharSequence;III)V+]Landroid/widget/Editor;Landroid/widget/Editor;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/text/TextWatcher;missing_types
 HSPLandroid/widget/TextView;->setAllCaps(Z)V
 HSPLandroid/widget/TextView;->setAutoSizeTextTypeUniformWithPresetSizes([II)V
 HSPLandroid/widget/TextView;->setBreakStrategy(I)V
 HSPLandroid/widget/TextView;->setCompoundDrawablePadding(I)V
 HSPLandroid/widget/TextView;->setCompoundDrawableTintList(Landroid/content/res/ColorStateList;)V
-HSPLandroid/widget/TextView;->setCompoundDrawables(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
-HSPLandroid/widget/TextView;->setCompoundDrawablesRelative(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
+HSPLandroid/widget/TextView;->setCompoundDrawables(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/widget/TextView;missing_types]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;,Landroid/graphics/drawable/BitmapDrawable;]Landroid/widget/TextView$Drawables;Landroid/widget/TextView$Drawables;
+HSPLandroid/widget/TextView;->setCompoundDrawablesRelative(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/VectorDrawable;,Landroid/graphics/drawable/BitmapDrawable;
 HSPLandroid/widget/TextView;->setCompoundDrawablesRelativeWithIntrinsicBounds(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/widget/TextView;->setCompoundDrawablesWithIntrinsicBounds(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/widget/TextView;->setCursorVisible(Z)V
 HSPLandroid/widget/TextView;->setEditableFactory(Landroid/text/Editable$Factory;)V
 HSPLandroid/widget/TextView;->setEllipsize(Landroid/text/TextUtils$TruncateAt;)V
 HSPLandroid/widget/TextView;->setEnabled(Z)V
-HSPLandroid/widget/TextView;->setFilters(Landroid/text/Editable;[Landroid/text/InputFilter;)V
+HSPLandroid/widget/TextView;->setFilters(Landroid/text/Editable;[Landroid/text/InputFilter;)V+]Landroid/text/Editable;missing_types
 HSPLandroid/widget/TextView;->setFilters([Landroid/text/InputFilter;)V
 HSPLandroid/widget/TextView;->setFontFeatureSettings(Ljava/lang/String;)V
-HSPLandroid/widget/TextView;->setFrame(IIII)Z
+HSPLandroid/widget/TextView;->setFrame(IIII)Z+]Landroid/widget/Editor;Landroid/widget/Editor;
 HSPLandroid/widget/TextView;->setGravity(I)V
 HSPLandroid/widget/TextView;->setHeight(I)V
 HSPLandroid/widget/TextView;->setHighlightColor(I)V
 HSPLandroid/widget/TextView;->setHint(I)V
 HSPLandroid/widget/TextView;->setHint(Ljava/lang/CharSequence;)V
-HSPLandroid/widget/TextView;->setHintInternal(Ljava/lang/CharSequence;)V
+HSPLandroid/widget/TextView;->setHintInternal(Ljava/lang/CharSequence;)V+]Landroid/widget/Editor;Landroid/widget/Editor;
 HSPLandroid/widget/TextView;->setHintTextColor(I)V
 HSPLandroid/widget/TextView;->setHintTextColor(Landroid/content/res/ColorStateList;)V
 HSPLandroid/widget/TextView;->setHorizontallyScrolling(Z)V
@@ -20609,20 +20622,20 @@
 HSPLandroid/widget/TextView;->setMinWidth(I)V
 HSPLandroid/widget/TextView;->setMovementMethod(Landroid/text/method/MovementMethod;)V
 HSPLandroid/widget/TextView;->setOnEditorActionListener(Landroid/widget/TextView$OnEditorActionListener;)V
-HSPLandroid/widget/TextView;->setPadding(IIII)V
+HSPLandroid/widget/TextView;->setPadding(IIII)V+]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->setPaddingRelative(IIII)V
 HSPLandroid/widget/TextView;->setPrivateImeOptions(Ljava/lang/String;)V
 HSPLandroid/widget/TextView;->setRawInputType(I)V
-HSPLandroid/widget/TextView;->setRawTextSize(FZ)V
+HSPLandroid/widget/TextView;->setRawTextSize(FZ)V+]Landroid/text/TextPaint;Landroid/text/TextPaint;
 HSPLandroid/widget/TextView;->setRelativeDrawablesIfNeeded(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V
 HSPLandroid/widget/TextView;->setSelected(Z)V
 HSPLandroid/widget/TextView;->setShadowLayer(FFFI)V
 HSPLandroid/widget/TextView;->setSingleLine()V
 HSPLandroid/widget/TextView;->setSingleLine(Z)V
 HSPLandroid/widget/TextView;->setText(I)V
-HSPLandroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V
+HSPLandroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V+]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->setText(Ljava/lang/CharSequence;Landroid/widget/TextView$BufferType;)V
-HSPLandroid/widget/TextView;->setText(Ljava/lang/CharSequence;Landroid/widget/TextView$BufferType;ZI)V+]Landroid/text/method/MovementMethod;Landroid/text/method/LinkMovementMethod;]Landroid/text/method/TransformationMethod;missing_types]Landroid/widget/TextView;missing_types]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/text/Spanned;Landroid/text/SpannedString;,Landroid/text/SpannableString;]Landroid/text/Spannable$Factory;Landroid/text/Spannable$Factory;]Ljava/lang/CharSequence;Ljava/lang/String;,Landroid/text/SpannedString;,Landroid/text/SpannableString;]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;]Landroid/text/Spannable;Landroid/text/SpannableString;
+HSPLandroid/widget/TextView;->setText(Ljava/lang/CharSequence;Landroid/widget/TextView$BufferType;ZI)V+]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/text/Spanned;missing_types]Ljava/lang/CharSequence;missing_types]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;]Landroid/widget/TextView;missing_types]Landroid/text/method/TransformationMethod;missing_types]Landroid/text/Editable$Factory;missing_types]Landroid/widget/Editor;Landroid/widget/Editor;]Landroid/text/InputFilter;missing_types]Landroid/text/Spannable$Factory;Landroid/text/Spannable$Factory;]Landroid/text/method/MovementMethod;missing_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/text/Spannable;missing_types
 HSPLandroid/widget/TextView;->setTextAppearance(I)V
 HSPLandroid/widget/TextView;->setTextAppearance(Landroid/content/Context;I)V
 HSPLandroid/widget/TextView;->setTextColor(I)V
@@ -20631,15 +20644,15 @@
 HSPLandroid/widget/TextView;->setTextIsSelectable(Z)V
 HSPLandroid/widget/TextView;->setTextSize(F)V
 HSPLandroid/widget/TextView;->setTextSize(IF)V
-HSPLandroid/widget/TextView;->setTextSizeInternal(IFZ)V+]Landroid/content/Context;missing_types]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/widget/TextView;missing_types
+HSPLandroid/widget/TextView;->setTextSizeInternal(IFZ)V+]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/widget/TextView;missing_types]Landroid/content/Context;missing_types
 HSPLandroid/widget/TextView;->setTransformationMethod(Landroid/text/method/TransformationMethod;)V+]Landroid/text/method/TransformationMethod2;Landroid/text/method/AllCapsTransformationMethod;
-HSPLandroid/widget/TextView;->setTypeface(Landroid/graphics/Typeface;)V
-HSPLandroid/widget/TextView;->setTypeface(Landroid/graphics/Typeface;I)V
+HSPLandroid/widget/TextView;->setTypeface(Landroid/graphics/Typeface;)V+]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/graphics/Typeface;Landroid/graphics/Typeface;
+HSPLandroid/widget/TextView;->setTypeface(Landroid/graphics/Typeface;I)V+]Landroid/widget/TextView;missing_types]Landroid/text/TextPaint;Landroid/text/TextPaint;]Landroid/graphics/Typeface;Landroid/graphics/Typeface;
 HSPLandroid/widget/TextView;->setTypefaceFromAttrs(Landroid/graphics/Typeface;Ljava/lang/String;III)V
 HSPLandroid/widget/TextView;->setupAutoSizeText()Z
 HSPLandroid/widget/TextView;->setupAutoSizeUniformPresetSizesConfiguration()Z
 HSPLandroid/widget/TextView;->shouldAdvanceFocusOnEnter()Z
-HSPLandroid/widget/TextView;->spanChange(Landroid/text/Spanned;Ljava/lang/Object;IIII)V
+HSPLandroid/widget/TextView;->spanChange(Landroid/text/Spanned;Ljava/lang/Object;IIII)V+]Landroid/widget/Editor;Landroid/widget/Editor;]Landroid/text/Spanned;missing_types]Landroid/widget/SpellChecker;Landroid/widget/SpellChecker;
 HSPLandroid/widget/TextView;->startMarquee()V
 HSPLandroid/widget/TextView;->startStopMarquee(Z)V
 HSPLandroid/widget/TextView;->stopMarquee()V
@@ -20650,8 +20663,8 @@
 HSPLandroid/widget/TextView;->unregisterForPreDraw()V
 HSPLandroid/widget/TextView;->updateAfterEdit()V
 HSPLandroid/widget/TextView;->updateCursorVisibleInternal()V
-HSPLandroid/widget/TextView;->updateTextColors()V+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Landroid/widget/TextView;missing_types]Ljava/lang/CharSequence;Ljava/lang/String;
-HSPLandroid/widget/TextView;->useDynamicLayout()Z
+HSPLandroid/widget/TextView;->updateTextColors()V+]Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;]Ljava/lang/CharSequence;missing_types]Landroid/widget/Editor;Landroid/widget/Editor;]Landroid/widget/TextView;missing_types
+HSPLandroid/widget/TextView;->useDynamicLayout()Z+]Landroid/widget/TextView;missing_types
 HSPLandroid/widget/TextView;->validateAndSetAutoSizeTextTypeUniformConfiguration(FFF)V
 HSPLandroid/widget/TextView;->verifyDrawable(Landroid/graphics/drawable/Drawable;)Z
 HSPLandroid/widget/TextView;->viewClicked(Landroid/view/inputmethod/InputMethodManager;)V
@@ -20741,12 +20754,12 @@
 HSPLandroid/window/IWindowContainerToken$Stub;->asInterface(Landroid/os/IBinder;)Landroid/window/IWindowContainerToken;
 HSPLandroid/window/ImeOnBackInvokedDispatcher$1;-><init>(Landroid/window/ImeOnBackInvokedDispatcher;Landroid/os/Handler;)V
 HSPLandroid/window/ImeOnBackInvokedDispatcher;->clear()V
+HSPLandroid/window/ImeOnBackInvokedDispatcher;->switchRootView(Landroid/view/ViewRootImpl;Landroid/view/ViewRootImpl;)V
 HSPLandroid/window/ImeOnBackInvokedDispatcher;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/window/OnBackInvokedCallbackInfo$1;-><init>()V
 HSPLandroid/window/OnBackInvokedCallbackInfo;-><clinit>()V
 HSPLandroid/window/OnBackInvokedCallbackInfo;-><init>(Landroid/window/IOnBackInvokedCallback;I)V
 HSPLandroid/window/OnBackInvokedCallbackInfo;->writeToParcel(Landroid/os/Parcel;I)V
-HSPLandroid/window/ProxyOnBackInvokedDispatcher;-><init>()V
 HSPLandroid/window/ProxyOnBackInvokedDispatcher;->clearCallbacksOnDispatcher()V
 HSPLandroid/window/ProxyOnBackInvokedDispatcher;->setActualDispatcher(Landroid/window/OnBackInvokedDispatcher;)V
 HSPLandroid/window/ProxyOnBackInvokedDispatcher;->transferCallbacksToDispatcher()V+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
@@ -20754,6 +20767,8 @@
 HSPLandroid/window/SizeConfigurationBuckets;-><clinit>()V
 HSPLandroid/window/SizeConfigurationBuckets;-><init>([Landroid/content/res/Configuration;)V
 HSPLandroid/window/SizeConfigurationBuckets;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/window/SurfaceSyncer$$ExternalSyntheticLambda1;-><init>(Landroid/window/SurfaceSyncer;ILjava/util/function/Consumer;)V
+HSPLandroid/window/SurfaceSyncer$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
 HSPLandroid/window/SurfaceSyncer$SyncSet$1;-><init>(Landroid/window/SurfaceSyncer$SyncSet;)V
 HSPLandroid/window/SurfaceSyncer$SyncSet$1;->onBufferReady(Landroid/view/SurfaceControl$Transaction;)V+]Ljava/lang/Object;Landroid/window/SurfaceSyncer$SyncSet$1;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Ljava/util/Set;Landroid/util/ArraySet;
 HSPLandroid/window/SurfaceSyncer$SyncSet;->-$$Nest$fgetmLock(Landroid/window/SurfaceSyncer$SyncSet;)Ljava/lang/Object;
@@ -20762,14 +20777,15 @@
 HSPLandroid/window/SurfaceSyncer$SyncSet;->-$$Nest$mcheckIfSyncIsComplete(Landroid/window/SurfaceSyncer$SyncSet;)V
 HSPLandroid/window/SurfaceSyncer$SyncSet;-><init>(ILjava/util/function/Consumer;)V+]Ljava/util/function/Supplier;Landroid/view/InsetsController$$ExternalSyntheticLambda4;
 HSPLandroid/window/SurfaceSyncer$SyncSet;-><init>(ILjava/util/function/Consumer;Landroid/window/SurfaceSyncer$SyncSet-IA;)V
-HSPLandroid/window/SurfaceSyncer$SyncSet;->addSyncableSurface(Landroid/window/SurfaceSyncer$SyncTarget;)V+]Landroid/window/SurfaceSyncer$SyncTarget;Landroid/view/ViewRootImpl$9;,Landroid/view/ViewRootImpl$8;]Ljava/lang/Object;Landroid/window/SurfaceSyncer$SyncSet$1;]Ljava/util/Set;Landroid/util/ArraySet;
-HSPLandroid/window/SurfaceSyncer$SyncSet;->checkIfSyncIsComplete()V+]Landroid/window/SurfaceSyncer$SyncTarget;Landroid/view/ViewRootImpl$9;,Landroid/view/ViewRootImpl$8;]Ljava/util/function/Consumer;Landroid/view/ViewRootImpl$$ExternalSyntheticLambda8;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/ArraySet;
+HSPLandroid/window/SurfaceSyncer$SyncSet;->addSyncableSurface(Landroid/window/SurfaceSyncer$SyncTarget;)Z+]Landroid/window/SurfaceSyncer$SyncTarget;Landroid/view/SurfaceView$$ExternalSyntheticLambda2;,Landroid/view/ViewRootImpl$9;]Ljava/lang/Object;Landroid/window/SurfaceSyncer$SyncSet$1;]Ljava/util/Set;Landroid/util/ArraySet;
+HSPLandroid/window/SurfaceSyncer$SyncSet;->checkIfSyncIsComplete()V+]Landroid/window/SurfaceSyncer$SyncTarget;Landroid/view/ViewRootImpl$8;,Landroid/view/ViewRootImpl$9;]Ljava/util/function/Consumer;Landroid/view/ViewRootImpl$$ExternalSyntheticLambda8;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/ArraySet;
 HSPLandroid/window/SurfaceSyncer$SyncSet;->markSyncReady()V
 HSPLandroid/window/SurfaceSyncer;->-$$Nest$sfgetsTransactionFactory()Ljava/util/function/Supplier;
 HSPLandroid/window/SurfaceSyncer;-><clinit>()V
 HSPLandroid/window/SurfaceSyncer;-><init>()V
 HSPLandroid/window/SurfaceSyncer;->addToSync(ILandroid/window/SurfaceSyncer$SyncTarget;)Z+]Landroid/window/SurfaceSyncer$SyncSet;Landroid/window/SurfaceSyncer$SyncSet;
 HSPLandroid/window/SurfaceSyncer;->getAndValidateSyncSet(I)Landroid/window/SurfaceSyncer$SyncSet;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLandroid/window/SurfaceSyncer;->lambda$setupSync$1$android-window-SurfaceSyncer(ILjava/util/function/Consumer;Landroid/view/SurfaceControl$Transaction;)V
 HSPLandroid/window/SurfaceSyncer;->markSyncReady(I)V+]Landroid/window/SurfaceSyncer$SyncSet;Landroid/window/SurfaceSyncer$SyncSet;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLandroid/window/SurfaceSyncer;->setupSync(Ljava/util/function/Consumer;)I+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLandroid/window/TaskAppearedInfo;-><init>(Landroid/app/ActivityManager$RunningTaskInfo;Landroid/view/SurfaceControl;)V
@@ -20814,12 +20830,11 @@
 HSPLandroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper;->onBackProgressed(Landroid/window/BackEvent;)V+]Landroid/os/Handler;Landroid/os/Handler;
 HSPLandroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper;->onBackStarted()V
 HSPLandroid/window/WindowOnBackInvokedDispatcher;-><clinit>()V
-HSPLandroid/window/WindowOnBackInvokedDispatcher;-><init>()V
 HSPLandroid/window/WindowOnBackInvokedDispatcher;->attachToWindow(Landroid/view/IWindowSession;Landroid/view/IWindow;)V
 HSPLandroid/window/WindowOnBackInvokedDispatcher;->clear()V+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/TreeMap;Ljava/util/TreeMap;
 HSPLandroid/window/WindowOnBackInvokedDispatcher;->detachFromWindow()V
 HSPLandroid/window/WindowOnBackInvokedDispatcher;->getTopCallback()Landroid/window/OnBackInvokedCallback;
-HSPLandroid/window/WindowOnBackInvokedDispatcher;->isOnBackInvokedCallbackEnabled(Landroid/content/Context;)Z+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/content/Context;Landroid/view/ContextThemeWrapper;
+HSPLandroid/window/WindowOnBackInvokedDispatcher;->isOnBackInvokedCallbackEnabled(Landroid/content/Context;)Z+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/content/Context;missing_types
 HSPLandroid/window/WindowOnBackInvokedDispatcher;->registerOnBackInvokedCallback(ILandroid/window/OnBackInvokedCallback;)V
 HSPLandroid/window/WindowOnBackInvokedDispatcher;->registerOnBackInvokedCallbackUnchecked(Landroid/window/OnBackInvokedCallback;I)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/TreeMap;Ljava/util/TreeMap;]Landroid/window/WindowOnBackInvokedDispatcher;Landroid/window/WindowOnBackInvokedDispatcher;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/window/WindowOnBackInvokedDispatcher;->setTopOnBackInvokedCallback(Landroid/window/OnBackInvokedCallback;)V+]Landroid/view/IWindowSession;Landroid/view/IWindowSession$Stub$Proxy;]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/lang/Integer;Ljava/lang/Integer;
@@ -20831,7 +20846,7 @@
 HSPLandroid/window/WindowTokenClient;->attachToDisplayArea(IILandroid/os/Bundle;)Z+]Landroid/view/IWindowManager;Landroid/view/IWindowManager$Stub$Proxy;]Landroid/window/WindowTokenClient;Landroid/window/WindowTokenClient;
 HSPLandroid/window/WindowTokenClient;->getWindowManagerService()Landroid/view/IWindowManager;
 HSPLandroid/window/WindowTokenClient;->onConfigurationChanged(Landroid/content/res/Configuration;I)V
-HSPLandroid/window/WindowTokenClient;->onConfigurationChanged(Landroid/content/res/Configuration;IZ)V+]Landroid/app/ResourcesManager;Landroid/app/ResourcesManager;]Landroid/content/Context;Landroid/window/WindowContext;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Landroid/window/WindowContext;Landroid/window/WindowContext;
+HSPLandroid/window/WindowTokenClient;->onConfigurationChanged(Landroid/content/res/Configuration;IZ)V+]Landroid/app/ResourcesManager;Landroid/app/ResourcesManager;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Landroid/content/Context;Landroid/window/WindowContext;]Landroid/window/WindowContext;Landroid/window/WindowContext;
 HSPLcom/android/i18n/phonenumbers/CountryCodeToRegionCodeMap;->getCountryCodeToRegionCodeMap()Ljava/util/Map;
 HSPLcom/android/i18n/phonenumbers/MetadataManager$1;->loadMetadata(Ljava/lang/String;)Ljava/io/InputStream;
 HSPLcom/android/i18n/phonenumbers/MetadataManager;->getMetadataFromMultiFilePrefix(Ljava/lang/Object;Ljava/util/concurrent/ConcurrentHashMap;Ljava/lang/String;Lcom/android/i18n/phonenumbers/MetadataLoader;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
@@ -20843,50 +20858,50 @@
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->checkRegionForParsing(Ljava/lang/CharSequence;Ljava/lang/String;)Z
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->chooseFormattingPatternForNumber(Ljava/util/List;Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;+]Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;,Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat$Builder;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;]Ljava/util/regex/Pattern;Ljava/util/regex/Pattern;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/i18n/phonenumbers/internal/RegexCache;Lcom/android/i18n/phonenumbers/internal/RegexCache;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->createInstance(Lcom/android/i18n/phonenumbers/MetadataLoader;)Lcom/android/i18n/phonenumbers/PhoneNumberUtil;
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->extractCountryCode(Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;)I
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->extractPossibleNumber(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->extractCountryCode(Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;)I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Map;Ljava/util/HashMap;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->extractPossibleNumber(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;+]Ljava/lang/CharSequence;Ljava/lang/String;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;]Ljava/util/regex/Pattern;Ljava/util/regex/Pattern;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->format(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;)Ljava/lang/String;
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->format(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;Ljava/lang/StringBuilder;)V
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->formatInOriginalFormat(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Ljava/lang/String;)Ljava/lang/String;+]Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;]Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource;]Lcom/android/i18n/phonenumbers/PhoneNumberUtil;Lcom/android/i18n/phonenumbers/PhoneNumberUtil;]Ljava/lang/String;Ljava/lang/String;]Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;]Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;]Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat$Builder;Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat$Builder;]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->format(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;Ljava/lang/StringBuilder;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;]Lcom/android/i18n/phonenumbers/PhoneNumberUtil;Lcom/android/i18n/phonenumbers/PhoneNumberUtil;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->formatInOriginalFormat(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;]Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;]Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat$Builder;Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat$Builder;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;]Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource;]Lcom/android/i18n/phonenumbers/PhoneNumberUtil;Lcom/android/i18n/phonenumbers/PhoneNumberUtil;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->formatNsn(Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;Ljava/lang/CharSequence;)Ljava/lang/String;+]Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/i18n/phonenumbers/PhoneNumberUtil;Lcom/android/i18n/phonenumbers/PhoneNumberUtil;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->formatNsnUsingPattern(Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;Ljava/lang/CharSequence;)Ljava/lang/String;+]Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;,Lcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat$Builder;]Ljava/util/regex/Pattern;Ljava/util/regex/Pattern;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;]Lcom/android/i18n/phonenumbers/internal/RegexCache;Lcom/android/i18n/phonenumbers/internal/RegexCache;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getCountryCodeForValidRegion(Ljava/lang/String;)I
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getInstance()Lcom/android/i18n/phonenumbers/PhoneNumberUtil;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getMetadataForRegion(Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getMetadataForRegionOrCallingCode(ILjava/lang/String;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getNationalSignificantNumber(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)Ljava/lang/String;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getNationalSignificantNumber(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getNumberDescByType(Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType;)Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getNumberTypeHelper(Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;)Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType;
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getRegionCodeForCountryCode(I)Ljava/lang/String;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getNumberTypeHelper(Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;)Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType;+]Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;]Lcom/android/i18n/phonenumbers/PhoneNumberUtil;Lcom/android/i18n/phonenumbers/PhoneNumberUtil;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getRegionCodeForCountryCode(I)Ljava/lang/String;+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Map;Ljava/util/HashMap;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getRegionCodeForNumber(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)Ljava/lang/String;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->getRegionCodeForNumberFromRegionList(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Ljava/util/List;)Ljava/lang/String;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->hasFormattingPatternForNumber(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)Z+]Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;]Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;]Lcom/android/i18n/phonenumbers/PhoneNumberUtil;Lcom/android/i18n/phonenumbers/PhoneNumberUtil;
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->isNumberMatchingDesc(Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;)Z
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->isNumberMatchingDesc(Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;)Z+]Lcom/android/i18n/phonenumbers/internal/MatcherApi;Lcom/android/i18n/phonenumbers/internal/RegexBasedMatcher;]Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->isValidNumber(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)Z
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->isValidNumberForRegion(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Ljava/lang/String;)Z
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->isValidRegionCode(Ljava/lang/String;)Z
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->isViablePhoneNumber(Ljava/lang/CharSequence;)Z
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->maybeAppendFormattedExtension(Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;Ljava/lang/StringBuilder;)V
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->maybeExtractCountryCode(Ljava/lang/CharSequence;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Ljava/lang/StringBuilder;ZLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)I
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->maybeExtractCountryCode(Ljava/lang/CharSequence;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Ljava/lang/StringBuilder;ZLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;]Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;]Ljava/lang/CharSequence;Ljava/lang/StringBuilder;]Lcom/android/i18n/phonenumbers/PhoneNumberUtil;Lcom/android/i18n/phonenumbers/PhoneNumberUtil;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->maybeStripExtension(Ljava/lang/StringBuilder;)Ljava/lang/String;
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->maybeStripInternationalPrefixAndNormalize(Ljava/lang/StringBuilder;Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource;
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->maybeStripNationalPrefixAndCarrierCode(Ljava/lang/StringBuilder;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Ljava/lang/StringBuilder;)Z
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->maybeStripInternationalPrefixAndNormalize(Ljava/lang/StringBuilder;Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber$CountryCodeSource;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/regex/Pattern;Ljava/util/regex/Pattern;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->maybeStripNationalPrefixAndCarrierCode(Ljava/lang/StringBuilder;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Ljava/lang/StringBuilder;)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;]Ljava/util/regex/Pattern;Ljava/util/regex/Pattern;]Lcom/android/i18n/phonenumbers/internal/RegexCache;Lcom/android/i18n/phonenumbers/internal/RegexCache;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->normalize(Ljava/lang/StringBuilder;)Ljava/lang/StringBuilder;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->normalizeDiallableCharsOnly(Ljava/lang/CharSequence;)Ljava/lang/String;
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->normalizeDigits(Ljava/lang/CharSequence;Z)Ljava/lang/StringBuilder;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->normalizeDigits(Ljava/lang/CharSequence;Z)Ljava/lang/StringBuilder;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/CharSequence;Ljava/lang/StringBuilder;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->normalizeDigitsOnly(Ljava/lang/CharSequence;)Ljava/lang/String;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->normalizeHelper(Ljava/lang/CharSequence;Ljava/util/Map;Z)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/CharSequence;Ljava/lang/String;]Ljava/util/Map;Ljava/util/Collections$UnmodifiableMap;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->parse(Ljava/lang/CharSequence;Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->parse(Ljava/lang/CharSequence;Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)V
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->parseAndKeepRawInput(Ljava/lang/CharSequence;Ljava/lang/String;)Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->parseAndKeepRawInput(Ljava/lang/CharSequence;Ljava/lang/String;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)V
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->parseHelper(Ljava/lang/CharSequence;Ljava/lang/String;ZZLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)V
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->parseHelper(Ljava/lang/CharSequence;Ljava/lang/String;ZZLcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;]Ljava/lang/CharSequence;Ljava/lang/String;]Lcom/android/i18n/phonenumbers/PhoneNumberUtil;Lcom/android/i18n/phonenumbers/PhoneNumberUtil;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->parsePrefixAsIdd(Ljava/util/regex/Pattern;Ljava/lang/StringBuilder;)Z
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->prefixNumberWithCountryCallingCode(ILcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;Ljava/lang/StringBuilder;)V
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->prefixNumberWithCountryCallingCode(ILcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;Ljava/lang/StringBuilder;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->setInstance(Lcom/android/i18n/phonenumbers/PhoneNumberUtil;)V
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->setItalianLeadingZerosForPhoneNumber(Ljava/lang/CharSequence;Lcom/android/i18n/phonenumbers/Phonenumber$PhoneNumber;)V
 HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->testNumberLength(Ljava/lang/CharSequence;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;)Lcom/android/i18n/phonenumbers/PhoneNumberUtil$ValidationResult;
-HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->testNumberLength(Ljava/lang/CharSequence;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType;)Lcom/android/i18n/phonenumbers/PhoneNumberUtil$ValidationResult;
+HSPLcom/android/i18n/phonenumbers/PhoneNumberUtil;->testNumberLength(Ljava/lang/CharSequence;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType;)Lcom/android/i18n/phonenumbers/PhoneNumberUtil$ValidationResult;+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/List;Ljava/util/ArrayList$SubList;,Ljava/util/ArrayList;]Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;]Ljava/lang/CharSequence;Ljava/lang/StringBuilder;]Lcom/android/i18n/phonenumbers/PhoneNumberUtil;Lcom/android/i18n/phonenumbers/PhoneNumberUtil;
 HSPLcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;-><init>()V
 HSPLcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;->getFormat()Ljava/lang/String;
 HSPLcom/android/i18n/phonenumbers/Phonemetadata$NumberFormat;->getLeadingDigitsPattern(I)Ljava/lang/String;+]Ljava/util/List;Ljava/util/ArrayList;
@@ -20970,7 +20985,7 @@
 HSPLcom/android/i18n/phonenumbers/internal/RegexBasedMatcher;->match(Ljava/lang/CharSequence;Ljava/util/regex/Pattern;Z)Z
 HSPLcom/android/i18n/phonenumbers/internal/RegexBasedMatcher;->matchNationalNumber(Ljava/lang/CharSequence;Lcom/android/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;Z)Z
 HSPLcom/android/i18n/phonenumbers/internal/RegexCache$LRUCache$1;->removeEldestEntry(Ljava/util/Map$Entry;)Z
-HSPLcom/android/i18n/phonenumbers/internal/RegexCache$LRUCache;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/i18n/phonenumbers/internal/RegexCache$LRUCache;->get(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/LinkedHashMap;Lcom/android/i18n/phonenumbers/internal/RegexCache$LRUCache$1;
 HSPLcom/android/i18n/phonenumbers/internal/RegexCache$LRUCache;->put(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/i18n/phonenumbers/internal/RegexCache;-><init>(I)V
 HSPLcom/android/i18n/phonenumbers/internal/RegexCache;->getPatternForRegex(Ljava/lang/String;)Ljava/util/regex/Pattern;
@@ -21004,18 +21019,18 @@
 HSPLcom/android/i18n/timezone/ZoneInfoData;-><init>(Lcom/android/i18n/timezone/ZoneInfoData;I)V
 HSPLcom/android/i18n/timezone/ZoneInfoData;-><init>(Ljava/lang/String;[J[B[I[B)V
 HSPLcom/android/i18n/timezone/ZoneInfoData;->checkTzifVersionAcceptable(Ljava/lang/String;B)V
-HSPLcom/android/i18n/timezone/ZoneInfoData;->findOffsetIndexForTimeInMilliseconds(J)I
-HSPLcom/android/i18n/timezone/ZoneInfoData;->findOffsetIndexForTimeInSeconds(J)I
+HSPLcom/android/i18n/timezone/ZoneInfoData;->findOffsetIndexForTimeInMilliseconds(J)I+]Lcom/android/i18n/timezone/ZoneInfoData;Lcom/android/i18n/timezone/ZoneInfoData;
+HSPLcom/android/i18n/timezone/ZoneInfoData;->findOffsetIndexForTimeInSeconds(J)I+]Lcom/android/i18n/timezone/ZoneInfoData;Lcom/android/i18n/timezone/ZoneInfoData;
 HSPLcom/android/i18n/timezone/ZoneInfoData;->findTransitionIndex(J)I
 HSPLcom/android/i18n/timezone/ZoneInfoData;->getID()Ljava/lang/String;
 HSPLcom/android/i18n/timezone/ZoneInfoData;->getLatestDstSavingsMillis(J)Ljava/lang/Integer;
-HSPLcom/android/i18n/timezone/ZoneInfoData;->getOffset(J)I
-HSPLcom/android/i18n/timezone/ZoneInfoData;->getOffsetsByUtcTime(J[I)I
+HSPLcom/android/i18n/timezone/ZoneInfoData;->getOffset(J)I+]Lcom/android/i18n/timezone/ZoneInfoData;Lcom/android/i18n/timezone/ZoneInfoData;
+HSPLcom/android/i18n/timezone/ZoneInfoData;->getOffsetsByUtcTime(J[I)I+]Lcom/android/i18n/timezone/ZoneInfoData;Lcom/android/i18n/timezone/ZoneInfoData;
 HSPLcom/android/i18n/timezone/ZoneInfoData;->getRawOffset()I
-HSPLcom/android/i18n/timezone/ZoneInfoData;->getTransitions()[J
+HSPLcom/android/i18n/timezone/ZoneInfoData;->getTransitions()[J+][J[J
 HSPLcom/android/i18n/timezone/ZoneInfoData;->hashCode()I
-HSPLcom/android/i18n/timezone/ZoneInfoData;->isInDaylightTime(J)Z
-HSPLcom/android/i18n/timezone/ZoneInfoData;->read64BitData(Ljava/lang/String;Lcom/android/i18n/timezone/internal/BufferIterator;)Lcom/android/i18n/timezone/ZoneInfoData;
+HSPLcom/android/i18n/timezone/ZoneInfoData;->isInDaylightTime(J)Z+]Lcom/android/i18n/timezone/ZoneInfoData;Lcom/android/i18n/timezone/ZoneInfoData;
+HSPLcom/android/i18n/timezone/ZoneInfoData;->read64BitData(Ljava/lang/String;Lcom/android/i18n/timezone/internal/BufferIterator;)Lcom/android/i18n/timezone/ZoneInfoData;+]Lcom/android/i18n/timezone/internal/BufferIterator;Lcom/android/i18n/timezone/internal/NioBufferIterator;
 HSPLcom/android/i18n/timezone/ZoneInfoData;->readTimeZone(Ljava/lang/String;Lcom/android/i18n/timezone/internal/BufferIterator;)Lcom/android/i18n/timezone/ZoneInfoData;
 HSPLcom/android/i18n/timezone/ZoneInfoData;->roundDownMillisToSeconds(J)J
 HSPLcom/android/i18n/timezone/ZoneInfoData;->roundUpMillisToSeconds(J)J
@@ -21028,11 +21043,11 @@
 HSPLcom/android/i18n/timezone/ZoneInfoDb;->getAvailableIDs()[Ljava/lang/String;
 HSPLcom/android/i18n/timezone/ZoneInfoDb;->getBufferIterator(Ljava/lang/String;)Lcom/android/i18n/timezone/internal/BufferIterator;
 HSPLcom/android/i18n/timezone/ZoneInfoDb;->getInstance()Lcom/android/i18n/timezone/ZoneInfoDb;
-HSPLcom/android/i18n/timezone/ZoneInfoDb;->makeZoneInfoData(Ljava/lang/String;)Lcom/android/i18n/timezone/ZoneInfoData;
+HSPLcom/android/i18n/timezone/ZoneInfoDb;->makeZoneInfoData(Ljava/lang/String;)Lcom/android/i18n/timezone/ZoneInfoData;+]Lcom/android/i18n/timezone/internal/BasicLruCache;Lcom/android/i18n/timezone/ZoneInfoDb$1;
 HSPLcom/android/i18n/timezone/ZoneInfoDb;->makeZoneInfoDataUncached(Ljava/lang/String;)Lcom/android/i18n/timezone/ZoneInfoData;
 HSPLcom/android/i18n/timezone/internal/BasicLruCache$CacheMap;->removeEldestEntry(Ljava/util/Map$Entry;)Z
 HSPLcom/android/i18n/timezone/internal/BasicLruCache;->evictAll()V
-HSPLcom/android/i18n/timezone/internal/BasicLruCache;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/i18n/timezone/internal/BasicLruCache;->get(Ljava/lang/Object;)Ljava/lang/Object;+]Lcom/android/i18n/timezone/internal/BasicLruCache$CacheMap;Lcom/android/i18n/timezone/internal/BasicLruCache$CacheMap;
 HSPLcom/android/i18n/timezone/internal/BufferIterator;-><init>()V
 HSPLcom/android/i18n/timezone/internal/Memory;->peekInt(JZ)I
 HSPLcom/android/i18n/timezone/internal/MemoryMappedFile;->bigEndianIterator()Lcom/android/i18n/timezone/internal/BufferIterator;
@@ -21046,38 +21061,38 @@
 HSPLcom/android/i18n/timezone/internal/NioBufferIterator;->readLongArray([JII)V
 HSPLcom/android/i18n/timezone/internal/NioBufferIterator;->skip(I)V
 HSPLcom/android/icu/charset/CharsetDecoderICU;-><init>(Ljava/nio/charset/Charset;FJ)V
-HSPLcom/android/icu/charset/CharsetDecoderICU;->decodeLoop(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;
-HSPLcom/android/icu/charset/CharsetDecoderICU;->getArray(Ljava/nio/ByteBuffer;)I
-HSPLcom/android/icu/charset/CharsetDecoderICU;->getArray(Ljava/nio/CharBuffer;)I
+HSPLcom/android/icu/charset/CharsetDecoderICU;->decodeLoop(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
+HSPLcom/android/icu/charset/CharsetDecoderICU;->getArray(Ljava/nio/ByteBuffer;)I+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
+HSPLcom/android/icu/charset/CharsetDecoderICU;->getArray(Ljava/nio/CharBuffer;)I+]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;
 HSPLcom/android/icu/charset/CharsetDecoderICU;->implFlush(Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;+]Lcom/android/icu/charset/CharsetDecoderICU;Lcom/android/icu/charset/CharsetDecoderICU;
 HSPLcom/android/icu/charset/CharsetDecoderICU;->implOnMalformedInput(Ljava/nio/charset/CodingErrorAction;)V
 HSPLcom/android/icu/charset/CharsetDecoderICU;->implOnUnmappableCharacter(Ljava/nio/charset/CodingErrorAction;)V
 HSPLcom/android/icu/charset/CharsetDecoderICU;->implReplaceWith(Ljava/lang/String;)V
 HSPLcom/android/icu/charset/CharsetDecoderICU;->implReset()V
 HSPLcom/android/icu/charset/CharsetDecoderICU;->newInstance(Ljava/nio/charset/Charset;Ljava/lang/String;)Lcom/android/icu/charset/CharsetDecoderICU;
-HSPLcom/android/icu/charset/CharsetDecoderICU;->setPosition(Ljava/nio/ByteBuffer;)V
+HSPLcom/android/icu/charset/CharsetDecoderICU;->setPosition(Ljava/nio/ByteBuffer;)V+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLcom/android/icu/charset/CharsetDecoderICU;->setPosition(Ljava/nio/CharBuffer;)V+]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;
 HSPLcom/android/icu/charset/CharsetDecoderICU;->updateCallback()V
 HSPLcom/android/icu/charset/CharsetEncoderICU;-><init>(Ljava/nio/charset/Charset;FF[BJ)V
-HSPLcom/android/icu/charset/CharsetEncoderICU;->encodeLoop(Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult;
+HSPLcom/android/icu/charset/CharsetEncoderICU;->encodeLoop(Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult;+]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;
 HSPLcom/android/icu/charset/CharsetEncoderICU;->getArray(Ljava/nio/ByteBuffer;)I+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
-HSPLcom/android/icu/charset/CharsetEncoderICU;->getArray(Ljava/nio/CharBuffer;)I
+HSPLcom/android/icu/charset/CharsetEncoderICU;->getArray(Ljava/nio/CharBuffer;)I+]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;
 HSPLcom/android/icu/charset/CharsetEncoderICU;->implFlush(Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult;+]Lcom/android/icu/charset/CharsetEncoderICU;Lcom/android/icu/charset/CharsetEncoderICU;
 HSPLcom/android/icu/charset/CharsetEncoderICU;->implOnMalformedInput(Ljava/nio/charset/CodingErrorAction;)V
 HSPLcom/android/icu/charset/CharsetEncoderICU;->implOnUnmappableCharacter(Ljava/nio/charset/CodingErrorAction;)V
 HSPLcom/android/icu/charset/CharsetEncoderICU;->implReset()V
 HSPLcom/android/icu/charset/CharsetEncoderICU;->makeReplacement(Ljava/lang/String;J)[B
 HSPLcom/android/icu/charset/CharsetEncoderICU;->newInstance(Ljava/nio/charset/Charset;Ljava/lang/String;)Lcom/android/icu/charset/CharsetEncoderICU;
-HSPLcom/android/icu/charset/CharsetEncoderICU;->setPosition(Ljava/nio/ByteBuffer;)V
-HSPLcom/android/icu/charset/CharsetEncoderICU;->setPosition(Ljava/nio/CharBuffer;)V
+HSPLcom/android/icu/charset/CharsetEncoderICU;->setPosition(Ljava/nio/ByteBuffer;)V+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
+HSPLcom/android/icu/charset/CharsetEncoderICU;->setPosition(Ljava/nio/CharBuffer;)V+]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;
 HSPLcom/android/icu/charset/CharsetEncoderICU;->updateCallback()V
 HSPLcom/android/icu/charset/CharsetFactory;->create(Ljava/lang/String;)Ljava/nio/charset/Charset;
 HSPLcom/android/icu/charset/CharsetICU;-><init>(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
 HSPLcom/android/icu/charset/CharsetICU;->newDecoder()Ljava/nio/charset/CharsetDecoder;
 HSPLcom/android/icu/charset/CharsetICU;->newEncoder()Ljava/nio/charset/CharsetEncoder;
 HSPLcom/android/icu/charset/NativeConverter;->U_FAILURE(I)Z
-HSPLcom/android/icu/charset/NativeConverter;->registerConverter(Ljava/lang/Object;J)V
-HSPLcom/android/icu/charset/NativeConverter;->setCallbackDecode(JLjava/nio/charset/CharsetDecoder;)V
+HSPLcom/android/icu/charset/NativeConverter;->registerConverter(Ljava/lang/Object;J)V+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
+HSPLcom/android/icu/charset/NativeConverter;->setCallbackDecode(JLjava/nio/charset/CharsetDecoder;)V+]Ljava/nio/charset/CharsetDecoder;Lcom/android/icu/charset/CharsetDecoderICU;
 HSPLcom/android/icu/charset/NativeConverter;->setCallbackEncode(JLjava/nio/charset/CharsetEncoder;)V
 HSPLcom/android/icu/charset/NativeConverter;->translateCodingErrorAction(Ljava/nio/charset/CodingErrorAction;)I
 HSPLcom/android/icu/text/CompatibleDecimalFormatFactory;->create(Ljava/lang/String;Landroid/icu/text/DecimalFormatSymbols;)Landroid/icu/text/DecimalFormat;
@@ -21108,7 +21123,7 @@
 HSPLcom/android/icu/util/LocaleNative;->getDisplayCountry(Ljava/util/Locale;Ljava/util/Locale;)Ljava/lang/String;
 HSPLcom/android/icu/util/LocaleNative;->getDisplayLanguage(Ljava/util/Locale;Ljava/util/Locale;)Ljava/lang/String;
 HSPLcom/android/icu/util/LocaleNative;->setDefault(Ljava/lang/String;)V
-HSPLcom/android/icu/util/regex/MatcherNative;-><init>(Lcom/android/icu/util/regex/PatternNative;)V
+HSPLcom/android/icu/util/regex/MatcherNative;-><init>(Lcom/android/icu/util/regex/PatternNative;)V+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;]Lcom/android/icu/util/regex/PatternNative;Lcom/android/icu/util/regex/PatternNative;
 HSPLcom/android/icu/util/regex/MatcherNative;->create(Lcom/android/icu/util/regex/PatternNative;)Lcom/android/icu/util/regex/MatcherNative;
 HSPLcom/android/icu/util/regex/MatcherNative;->find(I[I)Z
 HSPLcom/android/icu/util/regex/MatcherNative;->findNext([I)Z
@@ -21120,7 +21135,7 @@
 HSPLcom/android/icu/util/regex/MatcherNative;->setInput(Ljava/lang/String;II)V
 HSPLcom/android/icu/util/regex/MatcherNative;->useAnchoringBounds(Z)V
 HSPLcom/android/icu/util/regex/MatcherNative;->useTransparentBounds(Z)V
-HSPLcom/android/icu/util/regex/PatternNative;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/icu/util/regex/PatternNative;-><init>(Ljava/lang/String;I)V+]Llibcore/util/NativeAllocationRegistry;Llibcore/util/NativeAllocationRegistry;
 HSPLcom/android/icu/util/regex/PatternNative;->create(Ljava/lang/String;I)Lcom/android/icu/util/regex/PatternNative;
 HSPLcom/android/icu/util/regex/PatternNative;->openMatcher()J
 HSPLcom/android/internal/app/AlertController;-><init>(Landroid/content/Context;Landroid/content/DialogInterface;Landroid/view/Window;)V
@@ -21139,15 +21154,15 @@
 HSPLcom/android/internal/app/IAppOpsActiveCallback$Stub;->asBinder()Landroid/os/IBinder;
 HSPLcom/android/internal/app/IAppOpsAsyncNotedCallback$Stub;-><init>()V
 HSPLcom/android/internal/app/IAppOpsAsyncNotedCallback$Stub;->asBinder()Landroid/os/IBinder;
-HSPLcom/android/internal/app/IAppOpsAsyncNotedCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLcom/android/internal/app/IAppOpsAsyncNotedCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z+]Lcom/android/internal/app/IAppOpsAsyncNotedCallback$Stub;Landroid/app/AppOpsManager$OnOpNotedCallback$1;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/internal/app/IAppOpsCallback$Stub;-><init>()V
 HSPLcom/android/internal/app/IAppOpsCallback$Stub;->asBinder()Landroid/os/IBinder;
 HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->checkOperation(IILjava/lang/String;)I
+HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->checkOperation(IILjava/lang/String;)I+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->checkPackage(ILjava/lang/String;)I
 HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->extractAsyncOps(Ljava/lang/String;)Ljava/util/List;
 HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->getPackagesForOps([I)Ljava/util/List;
-HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->noteOperation(IILjava/lang/String;Ljava/lang/String;ZLjava/lang/String;Z)Landroid/app/SyncNotedAppOp;
+HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->noteOperation(IILjava/lang/String;Ljava/lang/String;ZLjava/lang/String;Z)Landroid/app/SyncNotedAppOp;+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->reportRuntimeAppOpAccessMessageAndGetConfig(Ljava/lang/String;Landroid/app/SyncNotedAppOp;Ljava/lang/String;)Lcom/android/internal/app/MessageSamplingConfig;
 HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->shouldCollectNotes(I)Z
 HSPLcom/android/internal/app/IAppOpsService$Stub$Proxy;->startWatchingActive([ILcom/android/internal/app/IAppOpsActiveCallback;)V
@@ -21162,7 +21177,7 @@
 HSPLcom/android/internal/app/IVoiceInteractor$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IVoiceInteractor;
 HSPLcom/android/internal/app/MessageSamplingConfig$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/internal/app/MessageSamplingConfig;
 HSPLcom/android/internal/app/MessageSamplingConfig$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
-HSPLcom/android/internal/app/MessageSamplingConfig;-><init>(Landroid/os/Parcel;)V
+HSPLcom/android/internal/app/MessageSamplingConfig;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/internal/app/MessageSamplingConfig;->getAcceptableLeftDistance()I
 HSPLcom/android/internal/app/MessageSamplingConfig;->getExpirationTimeSinceBootMillis()J
 HSPLcom/android/internal/app/MessageSamplingConfig;->getSampledOpCode()I
@@ -21182,13 +21197,13 @@
 HSPLcom/android/internal/colorextraction/ColorExtractor$GradientColors;->getMainColor()I
 HSPLcom/android/internal/colorextraction/ColorExtractor$GradientColors;->supportsDarkText()Z
 HSPLcom/android/internal/compat/ChangeReporter$ChangeReport;-><init>(JI)V
-HSPLcom/android/internal/compat/ChangeReporter$ChangeReport;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/internal/compat/ChangeReporter$ChangeReport;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Lcom/android/internal/compat/ChangeReporter$ChangeReport;
 HSPLcom/android/internal/compat/ChangeReporter$ChangeReport;->hashCode()I
 HSPLcom/android/internal/compat/ChangeReporter;-><init>(I)V
 HSPLcom/android/internal/compat/ChangeReporter;->debugLog(IJI)V
-HSPLcom/android/internal/compat/ChangeReporter;->isAlreadyReported(ILcom/android/internal/compat/ChangeReporter$ChangeReport;)Z
-HSPLcom/android/internal/compat/ChangeReporter;->markAsReported(ILcom/android/internal/compat/ChangeReporter$ChangeReport;)V
-HSPLcom/android/internal/compat/ChangeReporter;->reportChange(IJI)V
+HSPLcom/android/internal/compat/ChangeReporter;->isAlreadyReported(ILcom/android/internal/compat/ChangeReporter$ChangeReport;)Z+]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Set;Ljava/util/HashSet;
+HSPLcom/android/internal/compat/ChangeReporter;->markAsReported(ILcom/android/internal/compat/ChangeReporter$ChangeReport;)V+]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Set;Ljava/util/HashSet;
+HSPLcom/android/internal/compat/ChangeReporter;->reportChange(IJI)V+]Lcom/android/internal/compat/ChangeReporter;Lcom/android/internal/compat/ChangeReporter;
 HSPLcom/android/internal/compat/ChangeReporter;->shouldWriteToDebug(IJI)Z
 HSPLcom/android/internal/compat/ChangeReporter;->shouldWriteToStatsLog(IJI)Z
 HSPLcom/android/internal/compat/ChangeReporter;->stateToString(I)Ljava/lang/String;
@@ -21248,12 +21263,12 @@
 HSPLcom/android/internal/infra/AndroidFuture$2;->createFromParcel(Landroid/os/Parcel;)Lcom/android/internal/infra/AndroidFuture;
 HSPLcom/android/internal/infra/AndroidFuture$2;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLcom/android/internal/infra/AndroidFuture;-><init>()V
-HSPLcom/android/internal/infra/AndroidFuture;-><init>(Landroid/os/Parcel;)V
+HSPLcom/android/internal/infra/AndroidFuture;-><init>(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/internal/infra/AndroidFuture;->cancelTimeout()Lcom/android/internal/infra/AndroidFuture;
-HSPLcom/android/internal/infra/AndroidFuture;->complete(Ljava/lang/Object;)Z
+HSPLcom/android/internal/infra/AndroidFuture;->complete(Ljava/lang/Object;)Z+]Lcom/android/internal/infra/AndroidFuture;Lcom/android/internal/infra/AndroidFuture;
 HSPLcom/android/internal/infra/AndroidFuture;->getMainHandler()Landroid/os/Handler;
-HSPLcom/android/internal/infra/AndroidFuture;->onCompleted(Ljava/lang/Object;Ljava/lang/Throwable;)V
-HSPLcom/android/internal/infra/AndroidFuture;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLcom/android/internal/infra/AndroidFuture;->onCompleted(Ljava/lang/Object;Ljava/lang/Throwable;)V+]Lcom/android/internal/infra/AndroidFuture;Lcom/android/internal/infra/AndroidFuture;]Lcom/android/internal/infra/IAndroidFuture;Lcom/android/internal/infra/IAndroidFuture$Stub$Proxy;
+HSPLcom/android/internal/infra/AndroidFuture;->writeToParcel(Landroid/os/Parcel;I)V+]Lcom/android/internal/infra/AndroidFuture;Lcom/android/internal/infra/AndroidFuture;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/internal/infra/IAndroidFuture$Stub$Proxy;->complete(Lcom/android/internal/infra/AndroidFuture;)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/internal/infra/IAndroidFuture$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLcom/android/internal/inputmethod/EditableInputConnection;-><init>(Landroid/widget/TextView;)V
@@ -21362,7 +21377,7 @@
 HSPLcom/android/internal/logging/AndroidHandler;->publish(Ljava/util/logging/LogRecord;)V
 HSPLcom/android/internal/logging/EventLogTags;->writeSysuiMultiAction([Ljava/lang/Object;)V
 HSPLcom/android/internal/logging/InstanceId$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/internal/logging/InstanceId;
-HSPLcom/android/internal/logging/InstanceId$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLcom/android/internal/logging/InstanceId$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Lcom/android/internal/logging/InstanceId$1;Lcom/android/internal/logging/InstanceId$1;
 HSPLcom/android/internal/logging/InstanceId;-><init>(I)V
 HSPLcom/android/internal/logging/InstanceId;->getId()I
 HSPLcom/android/internal/logging/InstanceIdSequence;-><init>(I)V
@@ -21611,8 +21626,8 @@
 HSPLcom/android/internal/policy/DecorContext;-><init>(Landroid/content/Context;Lcom/android/internal/policy/PhoneWindow;)V
 HSPLcom/android/internal/policy/DecorContext;->getAutofillOptions()Landroid/content/AutofillOptions;
 HSPLcom/android/internal/policy/DecorContext;->getContentCaptureOptions()Landroid/content/ContentCaptureOptions;
-HSPLcom/android/internal/policy/DecorContext;->getResources()Landroid/content/res/Resources;
-HSPLcom/android/internal/policy/DecorContext;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
+HSPLcom/android/internal/policy/DecorContext;->getResources()Landroid/content/res/Resources;+]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
+HSPLcom/android/internal/policy/DecorContext;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;+]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
 HSPLcom/android/internal/policy/DecorContext;->isUiContext()Z
 HSPLcom/android/internal/policy/DecorContext;->setPhoneWindow(Lcom/android/internal/policy/PhoneWindow;)V
 HSPLcom/android/internal/policy/DecorView$$ExternalSyntheticLambda0;-><init>(Lcom/android/internal/policy/DecorView;)V
@@ -21628,7 +21643,7 @@
 HSPLcom/android/internal/policy/DecorView;->calculateStatusBarColor(I)I
 HSPLcom/android/internal/policy/DecorView;->createDecorCaptionView(Landroid/view/LayoutInflater;)Lcom/android/internal/widget/DecorCaptionView;
 HSPLcom/android/internal/policy/DecorView;->dispatchKeyEvent(Landroid/view/KeyEvent;)Z
-HSPLcom/android/internal/policy/DecorView;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z
+HSPLcom/android/internal/policy/DecorView;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z+]Lcom/android/internal/policy/PhoneWindow;Lcom/android/internal/policy/PhoneWindow;
 HSPLcom/android/internal/policy/DecorView;->draw(Landroid/graphics/Canvas;)V
 HSPLcom/android/internal/policy/DecorView;->drawLegacyNavigationBarBackground(Landroid/graphics/RecordingCanvas;)V
 HSPLcom/android/internal/policy/DecorView;->drawResizingShadowIfNeeded(Landroid/graphics/RecordingCanvas;)V
@@ -21658,10 +21673,10 @@
 HSPLcom/android/internal/policy/DecorView;->onConfigurationChanged(Landroid/content/res/Configuration;)V
 HSPLcom/android/internal/policy/DecorView;->onContentDrawn(IIII)Z
 HSPLcom/android/internal/policy/DecorView;->onDetachedFromWindow()V
-HSPLcom/android/internal/policy/DecorView;->onDraw(Landroid/graphics/Canvas;)V
+HSPLcom/android/internal/policy/DecorView;->onDraw(Landroid/graphics/Canvas;)V+]Lcom/android/internal/widget/BackgroundFallback;Lcom/android/internal/widget/BackgroundFallback;
 HSPLcom/android/internal/policy/DecorView;->onInterceptTouchEvent(Landroid/view/MotionEvent;)Z
 HSPLcom/android/internal/policy/DecorView;->onLayout(ZIIII)V
-HSPLcom/android/internal/policy/DecorView;->onMeasure(II)V
+HSPLcom/android/internal/policy/DecorView;->onMeasure(II)V+]Lcom/android/internal/policy/DecorView;Lcom/android/internal/policy/DecorView;]Landroid/content/Context;Lcom/android/internal/policy/DecorContext;]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLcom/android/internal/policy/DecorView;->onPostDraw(Landroid/graphics/RecordingCanvas;)V
 HSPLcom/android/internal/policy/DecorView;->onResourcesLoaded(Landroid/view/LayoutInflater;I)V
 HSPLcom/android/internal/policy/DecorView;->onRootViewScrollYChanged(I)V
@@ -21685,9 +21700,9 @@
 HSPLcom/android/internal/policy/DecorView;->superDispatchTouchEvent(Landroid/view/MotionEvent;)Z
 HSPLcom/android/internal/policy/DecorView;->updateBackgroundBlurRadius()V
 HSPLcom/android/internal/policy/DecorView;->updateBackgroundDrawable()V
-HSPLcom/android/internal/policy/DecorView;->updateColorViewInt(Lcom/android/internal/policy/DecorView$ColorViewState;IIIZZIZZLandroid/view/WindowInsetsController;)V
+HSPLcom/android/internal/policy/DecorView;->updateColorViewInt(Lcom/android/internal/policy/DecorView$ColorViewState;IIIZZIZZLandroid/view/WindowInsetsController;)V+]Lcom/android/internal/policy/PhoneWindow;Lcom/android/internal/policy/PhoneWindow;]Lcom/android/internal/policy/DecorView;Lcom/android/internal/policy/DecorView;]Landroid/view/View;Landroid/view/View;]Landroid/view/ViewPropertyAnimator;Landroid/view/ViewPropertyAnimator;]Lcom/android/internal/policy/DecorView$ColorViewAttributes;Lcom/android/internal/policy/DecorView$ColorViewAttributes;]Landroid/view/WindowInsetsController;Landroid/view/InsetsController;,Landroid/view/PendingInsetsController;
 HSPLcom/android/internal/policy/DecorView;->updateColorViewTranslations()V
-HSPLcom/android/internal/policy/DecorView;->updateColorViews(Landroid/view/WindowInsets;Z)Landroid/view/WindowInsets;+]Lcom/android/internal/policy/DecorView;Lcom/android/internal/policy/DecorView;]Lcom/android/internal/policy/PhoneWindow;Lcom/android/internal/policy/PhoneWindow;]Landroid/view/ViewGroup;Landroid/widget/LinearLayout;]Landroid/view/WindowInsets;Landroid/view/WindowInsets;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Landroid/view/WindowInsetsController;Landroid/view/InsetsController;,Landroid/view/PendingInsetsController;
+HSPLcom/android/internal/policy/DecorView;->updateColorViews(Landroid/view/WindowInsets;Z)Landroid/view/WindowInsets;+]Lcom/android/internal/policy/DecorView;Lcom/android/internal/policy/DecorView;]Lcom/android/internal/policy/PhoneWindow;Lcom/android/internal/policy/PhoneWindow;]Landroid/view/ViewGroup;Landroid/widget/FrameLayout;,Landroid/widget/LinearLayout;]Landroid/view/WindowInsets;Landroid/view/WindowInsets;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Landroid/view/WindowInsetsController;Landroid/view/InsetsController;,Landroid/view/PendingInsetsController;
 HSPLcom/android/internal/policy/DecorView;->updateDecorCaptionStatus(Landroid/content/res/Configuration;)V
 HSPLcom/android/internal/policy/DecorView;->updateElevation()V
 HSPLcom/android/internal/policy/DecorView;->updateLogTag(Landroid/view/WindowManager$LayoutParams;)V
@@ -21711,7 +21726,7 @@
 HSPLcom/android/internal/policy/PhoneLayoutInflater;-><init>(Landroid/content/Context;)V
 HSPLcom/android/internal/policy/PhoneLayoutInflater;-><init>(Landroid/view/LayoutInflater;Landroid/content/Context;)V
 HSPLcom/android/internal/policy/PhoneLayoutInflater;->cloneInContext(Landroid/content/Context;)Landroid/view/LayoutInflater;
-HSPLcom/android/internal/policy/PhoneLayoutInflater;->onCreateView(Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;
+HSPLcom/android/internal/policy/PhoneLayoutInflater;->onCreateView(Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;+]Lcom/android/internal/policy/PhoneLayoutInflater;Lcom/android/internal/policy/PhoneLayoutInflater;
 HSPLcom/android/internal/policy/PhoneWindow$$ExternalSyntheticLambda0;->onContentApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/util/Pair;
 HSPLcom/android/internal/policy/PhoneWindow$1;-><init>(Lcom/android/internal/policy/PhoneWindow;)V
 HSPLcom/android/internal/policy/PhoneWindow$1;->run()V
@@ -21788,7 +21803,7 @@
 HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->asBinder()Landroid/os/IBinder;
 HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getCallCapablePhoneAccounts(ZLjava/lang/String;Ljava/lang/String;)Ljava/util/List;
 HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getCallState()I
-HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getCallStateUsingPackage(Ljava/lang/String;Ljava/lang/String;)I
+HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getCallStateUsingPackage(Ljava/lang/String;Ljava/lang/String;)I+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getCurrentTtyMode(Ljava/lang/String;Ljava/lang/String;)I
 HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->getDefaultDialerPackage()Ljava/lang/String;
 HSPLcom/android/internal/telecom/ITelecomService$Stub$Proxy;->isInCall(Ljava/lang/String;Ljava/lang/String;)Z
@@ -21865,7 +21880,7 @@
 HSPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;-><init>(Ljava/lang/String;I)V
 HSPLcom/android/internal/telephony/SmsApplication$SmsApplicationData;->isComplete()Z
 HSPLcom/android/internal/telephony/SmsApplication;->getApplication(Landroid/content/Context;ZI)Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;
-HSPLcom/android/internal/telephony/SmsApplication;->getApplicationCollectionInternal(Landroid/content/Context;I)Ljava/util/Collection;+]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/internal/telephony/SmsApplication;->getApplicationCollectionInternal(Landroid/content/Context;I)Ljava/util/Collection;+]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/content/Context;missing_types
 HSPLcom/android/internal/telephony/SmsApplication;->getApplicationForPackage(Ljava/util/Collection;Ljava/lang/String;)Lcom/android/internal/telephony/SmsApplication$SmsApplicationData;
 HSPLcom/android/internal/telephony/SmsApplication;->getDefaultSmsApplication(Landroid/content/Context;Z)Landroid/content/ComponentName;
 HSPLcom/android/internal/telephony/SmsApplication;->getDefaultSmsApplicationAsUser(Landroid/content/Context;ZI)Landroid/content/ComponentName;
@@ -21895,12 +21910,12 @@
 HSPLcom/android/internal/textservice/ITextServicesSessionListener$Stub;->asBinder()Landroid/os/IBinder;
 HSPLcom/android/internal/textservice/ITextServicesSessionListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLcom/android/internal/transition/EpicenterTranslateClipReveal;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
-HSPLcom/android/internal/util/AnnotationValidations;->validate(Ljava/lang/Class;Landroid/annotation/IntRange;ILjava/lang/String;J)V
+HSPLcom/android/internal/util/AnnotationValidations;->validate(Ljava/lang/Class;Landroid/annotation/IntRange;ILjava/lang/String;J)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLcom/android/internal/util/AnnotationValidations;->validate(Ljava/lang/Class;Landroid/annotation/IntRange;ILjava/lang/String;JLjava/lang/String;J)V
 HSPLcom/android/internal/util/AnnotationValidations;->validate(Ljava/lang/Class;Landroid/annotation/IntRange;JLjava/lang/String;J)V
 HSPLcom/android/internal/util/AnnotationValidations;->validate(Ljava/lang/Class;Landroid/annotation/NonNull;Ljava/lang/Object;)V
 HSPLcom/android/internal/util/AnnotationValidations;->validate(Ljava/lang/Class;Ljava/lang/annotation/Annotation;I)V
-HSPLcom/android/internal/util/AnnotationValidations;->validate(Ljava/lang/Class;Ljava/lang/annotation/Annotation;J)V
+HSPLcom/android/internal/util/AnnotationValidations;->validate(Ljava/lang/Class;Ljava/lang/annotation/Annotation;J)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLcom/android/internal/util/AnnotationValidations;->validate(Ljava/lang/Class;Ljava/lang/annotation/Annotation;Ljava/lang/Object;)V
 HSPLcom/android/internal/util/AnnotationValidations;->validate(Ljava/lang/Class;Ljava/lang/annotation/Annotation;Ljava/lang/Object;[Ljava/lang/Object;)V
 HSPLcom/android/internal/util/ArrayUtils;->appendElement(Ljava/lang/Class;[Ljava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;
@@ -21914,29 +21929,29 @@
 HSPLcom/android/internal/util/ArrayUtils;->containsAll([Ljava/lang/Object;[Ljava/lang/Object;)Z
 HSPLcom/android/internal/util/ArrayUtils;->containsAny([Ljava/lang/Object;[Ljava/lang/Object;)Z
 HSPLcom/android/internal/util/ArrayUtils;->convertToIntArray(Ljava/util/List;)[I
-HSPLcom/android/internal/util/ArrayUtils;->deepToString(Ljava/lang/Object;)Ljava/lang/String;
+HSPLcom/android/internal/util/ArrayUtils;->deepToString(Ljava/lang/Object;)Ljava/lang/String;+]Ljava/lang/Object;Ljava/lang/String;,Ljava/lang/Integer;,Ljava/lang/Boolean;,Landroid/content/Intent;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLcom/android/internal/util/ArrayUtils;->defeatNullable([Ljava/io/File;)[Ljava/io/File;
 HSPLcom/android/internal/util/ArrayUtils;->defeatNullable([Ljava/lang/String;)[Ljava/lang/String;
-HSPLcom/android/internal/util/ArrayUtils;->emptyArray(Ljava/lang/Class;)[Ljava/lang/Object;
+HSPLcom/android/internal/util/ArrayUtils;->emptyArray(Ljava/lang/Class;)[Ljava/lang/Object;+]Ljava/lang/Object;missing_types]Ljava/lang/Class;Ljava/lang/Class;
 HSPLcom/android/internal/util/ArrayUtils;->emptyIfNull([Ljava/lang/Object;Ljava/lang/Class;)[Ljava/lang/Object;
 HSPLcom/android/internal/util/ArrayUtils;->getOrNull([Ljava/lang/Object;I)Ljava/lang/Object;
 HSPLcom/android/internal/util/ArrayUtils;->indexOf([Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLcom/android/internal/util/ArrayUtils;->isEmpty(Ljava/util/Collection;)Z
 HSPLcom/android/internal/util/ArrayUtils;->isEmpty([I)Z
 HSPLcom/android/internal/util/ArrayUtils;->isEmpty([Ljava/lang/Object;)Z
-HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedArray(Ljava/lang/Class;I)[Ljava/lang/Object;
+HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedArray(Ljava/lang/Class;I)[Ljava/lang/Object;+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;
 HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedBooleanArray(I)[Z
-HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedByteArray(I)[B
-HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedCharArray(I)[C
-HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedFloatArray(I)[F
-HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedIntArray(I)[I
-HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedLongArray(I)[J
-HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedObjectArray(I)[Ljava/lang/Object;
+HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedByteArray(I)[B+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;
+HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedCharArray(I)[C+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;
+HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedFloatArray(I)[F+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;
+HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedIntArray(I)[I+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;
+HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedLongArray(I)[J+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;
+HSPLcom/android/internal/util/ArrayUtils;->newUnpaddedObjectArray(I)[Ljava/lang/Object;+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;
 HSPLcom/android/internal/util/ArrayUtils;->remove(Ljava/util/ArrayList;Ljava/lang/Object;)Ljava/util/ArrayList;
 HSPLcom/android/internal/util/ArrayUtils;->removeElement(Ljava/lang/Class;[Ljava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;
 HSPLcom/android/internal/util/ArrayUtils;->size([Ljava/lang/Object;)I
 HSPLcom/android/internal/util/ArrayUtils;->throwsIfOutOfBounds(III)V
-HSPLcom/android/internal/util/ArrayUtils;->unstableRemoveIf(Ljava/util/ArrayList;Ljava/util/function/Predicate;)I
+HSPLcom/android/internal/util/ArrayUtils;->unstableRemoveIf(Ljava/util/ArrayList;Ljava/util/function/Predicate;)I+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/function/Predicate;Landroid/app/ResourcesManager$$ExternalSyntheticLambda0;
 HSPLcom/android/internal/util/AsyncChannel;-><init>()V
 HSPLcom/android/internal/util/AsyncChannel;->connected(Landroid/content/Context;Landroid/os/Handler;Landroid/os/Messenger;)V
 HSPLcom/android/internal/util/AsyncChannel;->sendMessage(Landroid/os/Message;)V
@@ -21962,8 +21977,8 @@
 HSPLcom/android/internal/util/FastPrintWriter;->appendLocked([CII)V
 HSPLcom/android/internal/util/FastPrintWriter;->close()V
 HSPLcom/android/internal/util/FastPrintWriter;->flush()V
-HSPLcom/android/internal/util/FastPrintWriter;->flushBytesLocked()V
-HSPLcom/android/internal/util/FastPrintWriter;->flushLocked()V
+HSPLcom/android/internal/util/FastPrintWriter;->flushBytesLocked()V+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;]Ljava/io/OutputStream;Ljava/io/FileOutputStream;
+HSPLcom/android/internal/util/FastPrintWriter;->flushLocked()V+]Ljava/io/Writer;Ljava/io/StringWriter;
 HSPLcom/android/internal/util/FastPrintWriter;->initDefaultEncoder()V
 HSPLcom/android/internal/util/FastPrintWriter;->print(C)V
 HSPLcom/android/internal/util/FastPrintWriter;->print(I)V
@@ -21983,11 +21998,11 @@
 HSPLcom/android/internal/util/FastXmlSerializer;->endDocument()V
 HSPLcom/android/internal/util/FastXmlSerializer;->endTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
 HSPLcom/android/internal/util/FastXmlSerializer;->escapeAndAppendString(Ljava/lang/String;)V
-HSPLcom/android/internal/util/FastXmlSerializer;->flush()V
-HSPLcom/android/internal/util/FastXmlSerializer;->flushBytes()V
+HSPLcom/android/internal/util/FastXmlSerializer;->flush()V+]Ljava/nio/charset/CharsetEncoder;Lcom/android/icu/charset/CharsetEncoderICU;]Ljava/io/OutputStream;Ljava/io/FileOutputStream;]Ljava/nio/charset/CoderResult;Ljava/nio/charset/CoderResult;
+HSPLcom/android/internal/util/FastXmlSerializer;->flushBytes()V+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;]Ljava/io/OutputStream;Ljava/io/FileOutputStream;
 HSPLcom/android/internal/util/FastXmlSerializer;->setFeature(Ljava/lang/String;Z)V
-HSPLcom/android/internal/util/FastXmlSerializer;->setOutput(Ljava/io/OutputStream;Ljava/lang/String;)V
-HSPLcom/android/internal/util/FastXmlSerializer;->startDocument(Ljava/lang/String;Ljava/lang/Boolean;)V
+HSPLcom/android/internal/util/FastXmlSerializer;->setOutput(Ljava/io/OutputStream;Ljava/lang/String;)V+]Ljava/nio/charset/Charset;Lcom/android/icu/charset/CharsetICU;]Ljava/nio/charset/CharsetEncoder;Lcom/android/icu/charset/CharsetEncoderICU;
+HSPLcom/android/internal/util/FastXmlSerializer;->startDocument(Ljava/lang/String;Ljava/lang/Boolean;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Boolean;Ljava/lang/Boolean;
 HSPLcom/android/internal/util/FastXmlSerializer;->startTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
 HSPLcom/android/internal/util/FastXmlSerializer;->text(Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
 HSPLcom/android/internal/util/FrameworkStatsLog;->write(III)V
@@ -22004,7 +22019,7 @@
 HSPLcom/android/internal/util/GrowingArrayUtils;->growSize(I)I
 HSPLcom/android/internal/util/GrowingArrayUtils;->insert([IIII)[I
 HSPLcom/android/internal/util/GrowingArrayUtils;->insert([JIIJ)[J
-HSPLcom/android/internal/util/GrowingArrayUtils;->insert([Ljava/lang/Object;IILjava/lang/Object;)[Ljava/lang/Object;
+HSPLcom/android/internal/util/GrowingArrayUtils;->insert([Ljava/lang/Object;IILjava/lang/Object;)[Ljava/lang/Object;+]Ljava/lang/Object;[Ljava/lang/Object;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLcom/android/internal/util/GrowingArrayUtils;->insert([ZIIZ)[Z
 HSPLcom/android/internal/util/IndentingPrintWriter;->decreaseIndent()Lcom/android/internal/util/IndentingPrintWriter;
 HSPLcom/android/internal/util/IndentingPrintWriter;->increaseIndent()Lcom/android/internal/util/IndentingPrintWriter;
@@ -22023,7 +22038,7 @@
 HSPLcom/android/internal/util/LineBreakBufferedWriter;-><init>(Ljava/io/Writer;II)V
 HSPLcom/android/internal/util/LineBreakBufferedWriter;->ensureCapacity(I)V
 HSPLcom/android/internal/util/LineBreakBufferedWriter;->flush()V
-HSPLcom/android/internal/util/LineBreakBufferedWriter;->println()V
+HSPLcom/android/internal/util/LineBreakBufferedWriter;->println()V+]Lcom/android/internal/util/LineBreakBufferedWriter;Lcom/android/internal/util/LineBreakBufferedWriter;
 HSPLcom/android/internal/util/LineBreakBufferedWriter;->write(Ljava/lang/String;II)V
 HSPLcom/android/internal/util/LineBreakBufferedWriter;->writeBuffer(I)V
 HSPLcom/android/internal/util/MemInfoReader;-><init>()V
@@ -22032,15 +22047,15 @@
 HSPLcom/android/internal/util/MessageUtils;->findMessageNames([Ljava/lang/Class;[Ljava/lang/String;)Landroid/util/SparseArray;
 HSPLcom/android/internal/util/NotificationMessagingUtil;->isImportantMessaging(Landroid/service/notification/StatusBarNotification;I)Z
 HSPLcom/android/internal/util/Parcelling$BuiltIn$ForBoolean;-><init>()V
-HSPLcom/android/internal/util/Parcelling$BuiltIn$ForBoolean;->parcel(Ljava/lang/Boolean;Landroid/os/Parcel;I)V
-HSPLcom/android/internal/util/Parcelling$BuiltIn$ForBoolean;->unparcel(Landroid/os/Parcel;)Ljava/lang/Boolean;
+HSPLcom/android/internal/util/Parcelling$BuiltIn$ForBoolean;->parcel(Ljava/lang/Boolean;Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
+HSPLcom/android/internal/util/Parcelling$BuiltIn$ForBoolean;->unparcel(Landroid/os/Parcel;)Ljava/lang/Boolean;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/internal/util/Parcelling$BuiltIn$ForInternedString;-><init>()V
 HSPLcom/android/internal/util/Parcelling$BuiltIn$ForInternedStringArray;-><init>()V
 HSPLcom/android/internal/util/Parcelling$BuiltIn$ForInternedStringList;-><init>()V
 HSPLcom/android/internal/util/Parcelling$BuiltIn$ForInternedStringValueMap;-><init>()V
 HSPLcom/android/internal/util/Parcelling$BuiltIn$ForStringSet;-><init>()V
 HSPLcom/android/internal/util/Parcelling$BuiltIn$ForStringSet;->parcel(Ljava/util/Set;Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;,Ljava/util/Collections$EmptyIterator;]Ljava/util/Set;Landroid/util/ArraySet;,Ljava/util/Collections$EmptySet;
-HSPLcom/android/internal/util/Parcelling$BuiltIn$ForStringSet;->unparcel(Landroid/os/Parcel;)Ljava/util/Set;
+HSPLcom/android/internal/util/Parcelling$BuiltIn$ForStringSet;->unparcel(Landroid/os/Parcel;)Ljava/util/Set;+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/internal/util/Parcelling$Cache;->get(Ljava/lang/Class;)Lcom/android/internal/util/Parcelling;
 HSPLcom/android/internal/util/Parcelling$Cache;->getOrCreate(Ljava/lang/Class;)Lcom/android/internal/util/Parcelling;
 HSPLcom/android/internal/util/Parcelling$Cache;->put(Lcom/android/internal/util/Parcelling;)Lcom/android/internal/util/Parcelling;
@@ -22056,7 +22071,7 @@
 HSPLcom/android/internal/util/Preconditions;->checkArgumentNonnegative(JLjava/lang/String;)J
 HSPLcom/android/internal/util/Preconditions;->checkArgumentPositive(ILjava/lang/String;)I
 HSPLcom/android/internal/util/Preconditions;->checkArrayElementsNotNull([Ljava/lang/Object;Ljava/lang/String;)[Ljava/lang/Object;
-HSPLcom/android/internal/util/Preconditions;->checkCollectionElementsNotNull(Ljava/util/Collection;Ljava/lang/String;)Ljava/util/Collection;
+HSPLcom/android/internal/util/Preconditions;->checkCollectionElementsNotNull(Ljava/util/Collection;Ljava/lang/String;)Ljava/util/Collection;+]Ljava/util/Collection;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLcom/android/internal/util/Preconditions;->checkFlagsArgument(II)I
 HSPLcom/android/internal/util/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/internal/util/Preconditions;->checkNotNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
@@ -22108,19 +22123,19 @@
 HSPLcom/android/internal/util/XmlPullParserWrapper;->getAttributeValue(I)Ljava/lang/String;
 HSPLcom/android/internal/util/XmlPullParserWrapper;->getAttributeValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/internal/util/XmlPullParserWrapper;->getEventType()I
-HSPLcom/android/internal/util/XmlPullParserWrapper;->getName()Ljava/lang/String;
+HSPLcom/android/internal/util/XmlPullParserWrapper;->getName()Ljava/lang/String;+]Lorg/xmlpull/v1/XmlPullParser;Lcom/android/org/kxml2/io/KXmlParser;
 HSPLcom/android/internal/util/XmlPullParserWrapper;->getText()Ljava/lang/String;
 HSPLcom/android/internal/util/XmlPullParserWrapper;->next()I+]Lorg/xmlpull/v1/XmlPullParser;Lcom/android/org/kxml2/io/KXmlParser;
 HSPLcom/android/internal/util/XmlPullParserWrapper;->setInput(Ljava/io/InputStream;Ljava/lang/String;)V
 HSPLcom/android/internal/util/XmlSerializerWrapper;-><init>(Lorg/xmlpull/v1/XmlSerializer;)V
-HSPLcom/android/internal/util/XmlSerializerWrapper;->attribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
+HSPLcom/android/internal/util/XmlSerializerWrapper;->attribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;+]Lorg/xmlpull/v1/XmlSerializer;Lcom/android/internal/util/FastXmlSerializer;
 HSPLcom/android/internal/util/XmlSerializerWrapper;->endDocument()V
-HSPLcom/android/internal/util/XmlSerializerWrapper;->endTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
+HSPLcom/android/internal/util/XmlSerializerWrapper;->endTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;+]Lorg/xmlpull/v1/XmlSerializer;Lcom/android/internal/util/FastXmlSerializer;
 HSPLcom/android/internal/util/XmlSerializerWrapper;->setFeature(Ljava/lang/String;Z)V
 HSPLcom/android/internal/util/XmlSerializerWrapper;->setOutput(Ljava/io/OutputStream;Ljava/lang/String;)V
 HSPLcom/android/internal/util/XmlSerializerWrapper;->startDocument(Ljava/lang/String;Ljava/lang/Boolean;)V
-HSPLcom/android/internal/util/XmlSerializerWrapper;->startTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
-HSPLcom/android/internal/util/XmlSerializerWrapper;->text(Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;
+HSPLcom/android/internal/util/XmlSerializerWrapper;->startTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;+]Lorg/xmlpull/v1/XmlSerializer;Lcom/android/internal/util/FastXmlSerializer;
+HSPLcom/android/internal/util/XmlSerializerWrapper;->text(Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;+]Lorg/xmlpull/v1/XmlSerializer;Lcom/android/internal/util/FastXmlSerializer;
 HSPLcom/android/internal/util/XmlUtils$ForcedTypedXmlPullParser;-><init>(Lorg/xmlpull/v1/XmlPullParser;)V
 HSPLcom/android/internal/util/XmlUtils$ForcedTypedXmlPullParser;->getAttributeBoolean(I)Z
 HSPLcom/android/internal/util/XmlUtils$ForcedTypedXmlPullParser;->getAttributeFloat(I)F
@@ -22130,7 +22145,7 @@
 HSPLcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;->attributeBoolean(Ljava/lang/String;Ljava/lang/String;Z)Lorg/xmlpull/v1/XmlSerializer;
 HSPLcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;->attributeFloat(Ljava/lang/String;Ljava/lang/String;F)Lorg/xmlpull/v1/XmlSerializer;
 HSPLcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;->attributeInt(Ljava/lang/String;Ljava/lang/String;I)Lorg/xmlpull/v1/XmlSerializer;
-HSPLcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;->attributeLong(Ljava/lang/String;Ljava/lang/String;J)Lorg/xmlpull/v1/XmlSerializer;
+HSPLcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;->attributeLong(Ljava/lang/String;Ljava/lang/String;J)Lorg/xmlpull/v1/XmlSerializer;+]Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;
 HSPLcom/android/internal/util/XmlUtils;->beginDocument(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)V
 HSPLcom/android/internal/util/XmlUtils;->makeTyped(Lorg/xmlpull/v1/XmlPullParser;)Landroid/util/TypedXmlPullParser;
 HSPLcom/android/internal/util/XmlUtils;->makeTyped(Lorg/xmlpull/v1/XmlSerializer;)Landroid/util/TypedXmlSerializer;
@@ -22148,8 +22163,8 @@
 HSPLcom/android/internal/util/XmlUtils;->readThisValueXml(Landroid/util/TypedXmlPullParser;[Ljava/lang/String;Lcom/android/internal/util/XmlUtils$ReadMapCallback;Z)Ljava/lang/Object;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/TypedXmlPullParser;Lcom/android/internal/util/XmlUtils$ForcedTypedXmlPullParser;
 HSPLcom/android/internal/util/XmlUtils;->readValueXml(Landroid/util/TypedXmlPullParser;[Ljava/lang/String;)Ljava/lang/Object;
 HSPLcom/android/internal/util/XmlUtils;->skipCurrentTag(Lorg/xmlpull/v1/XmlPullParser;)V
-HSPLcom/android/internal/util/XmlUtils;->writeMapXml(Ljava/util/Map;Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/XmlUtils$WriteMapCallback;)V
-HSPLcom/android/internal/util/XmlUtils;->writeMapXml(Ljava/util/Map;Ljava/io/OutputStream;)V
+HSPLcom/android/internal/util/XmlUtils;->writeMapXml(Ljava/util/Map;Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/XmlUtils$WriteMapCallback;)V+]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;]Ljava/util/Set;Ljava/util/HashMap$EntrySet;
+HSPLcom/android/internal/util/XmlUtils;->writeMapXml(Ljava/util/Map;Ljava/io/OutputStream;)V+]Ljava/nio/charset/Charset;Lcom/android/icu/charset/CharsetICU;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;
 HSPLcom/android/internal/util/XmlUtils;->writeMapXml(Ljava/util/Map;Ljava/lang/String;Landroid/util/TypedXmlSerializer;)V
 HSPLcom/android/internal/util/XmlUtils;->writeMapXml(Ljava/util/Map;Ljava/lang/String;Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/XmlUtils$WriteMapCallback;)V
 HSPLcom/android/internal/util/XmlUtils;->writeSetXml(Ljava/util/Set;Ljava/lang/String;Landroid/util/TypedXmlSerializer;)V
@@ -22158,7 +22173,7 @@
 HSPLcom/android/internal/util/function/pooled/OmniFunction;->run()V
 HSPLcom/android/internal/util/function/pooled/PooledLambda;->obtainMessage(Lcom/android/internal/util/function/HexConsumer;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Landroid/os/Message;
 HSPLcom/android/internal/util/function/pooled/PooledLambda;->obtainMessage(Lcom/android/internal/util/function/QuadConsumer;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Landroid/os/Message;
-HSPLcom/android/internal/util/function/pooled/PooledLambda;->obtainMessage(Lcom/android/internal/util/function/QuintConsumer;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Landroid/os/Message;
+HSPLcom/android/internal/util/function/pooled/PooledLambda;->obtainMessage(Lcom/android/internal/util/function/QuintConsumer;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Landroid/os/Message;+]Landroid/os/Message;Landroid/os/Message;]Lcom/android/internal/util/function/pooled/PooledRunnable;Lcom/android/internal/util/function/pooled/PooledLambdaImpl;
 HSPLcom/android/internal/util/function/pooled/PooledLambda;->obtainMessage(Lcom/android/internal/util/function/TriConsumer;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Landroid/os/Message;
 HSPLcom/android/internal/util/function/pooled/PooledLambda;->obtainMessage(Ljava/util/function/BiConsumer;Ljava/lang/Object;Ljava/lang/Object;)Landroid/os/Message;
 HSPLcom/android/internal/util/function/pooled/PooledLambda;->obtainMessage(Ljava/util/function/Consumer;Ljava/lang/Object;)Landroid/os/Message;
@@ -22255,7 +22270,7 @@
 HSPLcom/android/internal/widget/ILockSettings$Stub$Proxy;->getBoolean(Ljava/lang/String;ZI)Z
 HSPLcom/android/internal/widget/ILockSettings$Stub$Proxy;->getCredentialType(I)I
 HSPLcom/android/internal/widget/ILockSettings$Stub$Proxy;->getString(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;
-HSPLcom/android/internal/widget/ILockSettings$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/widget/ILockSettings;
+HSPLcom/android/internal/widget/ILockSettings$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/widget/ILockSettings;+]Landroid/os/IBinder;Landroid/os/BinderProxy;
 HSPLcom/android/internal/widget/LockPatternUtils$1;-><init>(Lcom/android/internal/widget/LockPatternUtils;)V
 HSPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker$1;->onIsNonStrongBiometricAllowedChanged(ZI)V
 HSPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker$1;->onStrongAuthRequiredChanged(II)V
@@ -22265,7 +22280,7 @@
 HSPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;->handleStrongAuthRequiredChanged(II)V
 HSPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;->isNonStrongBiometricAllowedAfterIdleTimeout(I)Z
 HSPLcom/android/internal/widget/LockPatternUtils$StrongAuthTracker;->onIsNonStrongBiometricAllowedChanged(I)V
-HSPLcom/android/internal/widget/LockPatternUtils;-><init>(Landroid/content/Context;)V
+HSPLcom/android/internal/widget/LockPatternUtils;-><init>(Landroid/content/Context;)V+]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLcom/android/internal/widget/LockPatternUtils;->credentialTypeToPasswordQuality(I)I
 HSPLcom/android/internal/widget/LockPatternUtils;->getBoolean(Ljava/lang/String;ZI)Z
 HSPLcom/android/internal/widget/LockPatternUtils;->getCredentialTypeForUser(I)I
@@ -22291,8 +22306,8 @@
 HSPLcom/android/net/module/util/NetUtils;->maskRawAddress([BI)V
 HSPLcom/android/net/module/util/NetworkCapabilitiesUtils;-><clinit>()V
 HSPLcom/android/net/module/util/NetworkCapabilitiesUtils;->unpackBits(J)[I
-HSPLcom/android/okhttp/Address;-><init>(Ljava/lang/String;ILcom/android/okhttp/Dns;Ljavax/net/SocketFactory;Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/HostnameVerifier;Lcom/android/okhttp/CertificatePinner;Lcom/android/okhttp/Authenticator;Ljava/net/Proxy;Ljava/util/List;Ljava/util/List;Ljava/net/ProxySelector;)V
-HSPLcom/android/okhttp/Address;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/okhttp/Address;-><init>(Ljava/lang/String;ILcom/android/okhttp/Dns;Ljavax/net/SocketFactory;Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/HostnameVerifier;Lcom/android/okhttp/CertificatePinner;Lcom/android/okhttp/Authenticator;Ljava/net/Proxy;Ljava/util/List;Ljava/util/List;Ljava/net/ProxySelector;)V+]Lcom/android/okhttp/HttpUrl$Builder;Lcom/android/okhttp/HttpUrl$Builder;
+HSPLcom/android/okhttp/Address;->equals(Ljava/lang/Object;)Z+]Lcom/android/okhttp/HttpUrl;Lcom/android/okhttp/HttpUrl;]Ljava/lang/Object;Lcom/android/okhttp/Dns$1;,Lsun/net/spi/DefaultProxySelector;,Lcom/android/okhttp/internal/http/AuthenticatorAdapter;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;
 HSPLcom/android/okhttp/Address;->getCertificatePinner()Lcom/android/okhttp/CertificatePinner;
 HSPLcom/android/okhttp/Address;->getConnectionSpecs()Ljava/util/List;
 HSPLcom/android/okhttp/Address;->getDns()Lcom/android/okhttp/Dns;
@@ -22351,13 +22366,13 @@
 HSPLcom/android/okhttp/Headers$Builder;->access$000(Lcom/android/okhttp/Headers$Builder;)Ljava/util/List;
 HSPLcom/android/okhttp/Headers$Builder;->add(Ljava/lang/String;Ljava/lang/String;)Lcom/android/okhttp/Headers$Builder;
 HSPLcom/android/okhttp/Headers$Builder;->addLenient(Ljava/lang/String;)Lcom/android/okhttp/Headers$Builder;
-HSPLcom/android/okhttp/Headers$Builder;->addLenient(Ljava/lang/String;Ljava/lang/String;)Lcom/android/okhttp/Headers$Builder;
+HSPLcom/android/okhttp/Headers$Builder;->addLenient(Ljava/lang/String;Ljava/lang/String;)Lcom/android/okhttp/Headers$Builder;+]Ljava/lang/String;Ljava/lang/String;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLcom/android/okhttp/Headers$Builder;->build()Lcom/android/okhttp/Headers;
 HSPLcom/android/okhttp/Headers$Builder;->checkNameAndValue(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/okhttp/Headers$Builder;->get(Ljava/lang/String;)Ljava/lang/String;
-HSPLcom/android/okhttp/Headers$Builder;->removeAll(Ljava/lang/String;)Lcom/android/okhttp/Headers$Builder;
+HSPLcom/android/okhttp/Headers$Builder;->removeAll(Ljava/lang/String;)Lcom/android/okhttp/Headers$Builder;+]Ljava/lang/String;Ljava/lang/String;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLcom/android/okhttp/Headers$Builder;->set(Ljava/lang/String;Ljava/lang/String;)Lcom/android/okhttp/Headers$Builder;
-HSPLcom/android/okhttp/Headers;-><init>(Lcom/android/okhttp/Headers$Builder;)V
+HSPLcom/android/okhttp/Headers;-><init>(Lcom/android/okhttp/Headers$Builder;)V+]Ljava/util/List;Ljava/util/ArrayList;
 HSPLcom/android/okhttp/Headers;-><init>(Lcom/android/okhttp/Headers$Builder;Lcom/android/okhttp/Headers$1;)V
 HSPLcom/android/okhttp/Headers;->get(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/okhttp/Headers;->get([Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
@@ -22367,7 +22382,7 @@
 HSPLcom/android/okhttp/Headers;->value(I)Ljava/lang/String;
 HSPLcom/android/okhttp/HttpHandler$CleartextURLFilter;->checkURLPermitted(Ljava/net/URL;)V
 HSPLcom/android/okhttp/HttpHandler;-><init>()V
-HSPLcom/android/okhttp/HttpHandler;->createHttpOkUrlFactory(Ljava/net/Proxy;)Lcom/android/okhttp/OkUrlFactory;
+HSPLcom/android/okhttp/HttpHandler;->createHttpOkUrlFactory(Ljava/net/Proxy;)Lcom/android/okhttp/OkUrlFactory;+]Lcom/android/okhttp/OkHttpClient;Lcom/android/okhttp/OkHttpClient;
 HSPLcom/android/okhttp/HttpHandler;->newOkUrlFactory(Ljava/net/Proxy;)Lcom/android/okhttp/OkUrlFactory;
 HSPLcom/android/okhttp/HttpHandler;->openConnection(Ljava/net/URL;)Ljava/net/URLConnection;
 HSPLcom/android/okhttp/HttpUrl$Builder;-><init>()V
@@ -22380,7 +22395,7 @@
 HSPLcom/android/okhttp/HttpUrl$Builder;->host(Ljava/lang/String;)Lcom/android/okhttp/HttpUrl$Builder;
 HSPLcom/android/okhttp/HttpUrl$Builder;->isDot(Ljava/lang/String;)Z
 HSPLcom/android/okhttp/HttpUrl$Builder;->isDotDot(Ljava/lang/String;)Z
-HSPLcom/android/okhttp/HttpUrl$Builder;->parse(Lcom/android/okhttp/HttpUrl;Ljava/lang/String;)Lcom/android/okhttp/HttpUrl$Builder$ParseResult;
+HSPLcom/android/okhttp/HttpUrl$Builder;->parse(Lcom/android/okhttp/HttpUrl;Ljava/lang/String;)Lcom/android/okhttp/HttpUrl$Builder$ParseResult;+]Ljava/lang/String;Ljava/lang/String;
 HSPLcom/android/okhttp/HttpUrl$Builder;->parsePort(Ljava/lang/String;II)I
 HSPLcom/android/okhttp/HttpUrl$Builder;->port(I)Lcom/android/okhttp/HttpUrl$Builder;
 HSPLcom/android/okhttp/HttpUrl$Builder;->portColonOffset(Ljava/lang/String;II)I
@@ -22392,8 +22407,8 @@
 HSPLcom/android/okhttp/HttpUrl$Builder;->skipLeadingAsciiWhitespace(Ljava/lang/String;II)I
 HSPLcom/android/okhttp/HttpUrl$Builder;->skipTrailingAsciiWhitespace(Ljava/lang/String;II)I
 HSPLcom/android/okhttp/HttpUrl$Builder;->slashCount(Ljava/lang/String;II)I
-HSPLcom/android/okhttp/HttpUrl$Builder;->toString()Ljava/lang/String;
-HSPLcom/android/okhttp/HttpUrl;-><init>(Lcom/android/okhttp/HttpUrl$Builder;)V
+HSPLcom/android/okhttp/HttpUrl$Builder;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/okhttp/HttpUrl$Builder;Lcom/android/okhttp/HttpUrl$Builder;
+HSPLcom/android/okhttp/HttpUrl;-><init>(Lcom/android/okhttp/HttpUrl$Builder;)V+]Lcom/android/okhttp/HttpUrl$Builder;Lcom/android/okhttp/HttpUrl$Builder;
 HSPLcom/android/okhttp/HttpUrl;-><init>(Lcom/android/okhttp/HttpUrl$Builder;Lcom/android/okhttp/HttpUrl$1;)V
 HSPLcom/android/okhttp/HttpUrl;->access$200(Ljava/lang/String;IILjava/lang/String;)I
 HSPLcom/android/okhttp/HttpUrl;->canonicalize(Ljava/lang/String;IILjava/lang/String;ZZZZ)Ljava/lang/String;
@@ -22436,7 +22451,7 @@
 HSPLcom/android/okhttp/OkHttpClient$1;->put(Lcom/android/okhttp/ConnectionPool;Lcom/android/okhttp/internal/io/RealConnection;)V
 HSPLcom/android/okhttp/OkHttpClient$1;->routeDatabase(Lcom/android/okhttp/ConnectionPool;)Lcom/android/okhttp/internal/RouteDatabase;
 HSPLcom/android/okhttp/OkHttpClient;-><init>()V
-HSPLcom/android/okhttp/OkHttpClient;-><init>(Lcom/android/okhttp/OkHttpClient;)V
+HSPLcom/android/okhttp/OkHttpClient;-><init>(Lcom/android/okhttp/OkHttpClient;)V+]Ljava/util/List;Ljava/util/ArrayList;
 HSPLcom/android/okhttp/OkHttpClient;->copyWithDefaults()Lcom/android/okhttp/OkHttpClient;
 HSPLcom/android/okhttp/OkHttpClient;->getAuthenticator()Lcom/android/okhttp/Authenticator;
 HSPLcom/android/okhttp/OkHttpClient;->getCertificatePinner()Lcom/android/okhttp/CertificatePinner;
@@ -22493,7 +22508,7 @@
 HSPLcom/android/okhttp/Request$Builder;->header(Ljava/lang/String;Ljava/lang/String;)Lcom/android/okhttp/Request$Builder;
 HSPLcom/android/okhttp/Request$Builder;->method(Ljava/lang/String;Lcom/android/okhttp/RequestBody;)Lcom/android/okhttp/Request$Builder;
 HSPLcom/android/okhttp/Request$Builder;->url(Lcom/android/okhttp/HttpUrl;)Lcom/android/okhttp/Request$Builder;
-HSPLcom/android/okhttp/Request;-><init>(Lcom/android/okhttp/Request$Builder;)V
+HSPLcom/android/okhttp/Request;-><init>(Lcom/android/okhttp/Request$Builder;)V+]Lcom/android/okhttp/Headers$Builder;Lcom/android/okhttp/Headers$Builder;
 HSPLcom/android/okhttp/Request;-><init>(Lcom/android/okhttp/Request$Builder;Lcom/android/okhttp/Request$1;)V
 HSPLcom/android/okhttp/Request;->access$1000(Lcom/android/okhttp/Request;)Lcom/android/okhttp/Headers;
 HSPLcom/android/okhttp/Request;->access$600(Lcom/android/okhttp/Request;)Lcom/android/okhttp/HttpUrl;
@@ -22509,7 +22524,7 @@
 HSPLcom/android/okhttp/Request;->newBuilder()Lcom/android/okhttp/Request$Builder;
 HSPLcom/android/okhttp/Request;->url()Ljava/net/URL;
 HSPLcom/android/okhttp/Response$Builder;-><init>()V
-HSPLcom/android/okhttp/Response$Builder;-><init>(Lcom/android/okhttp/Response;)V
+HSPLcom/android/okhttp/Response$Builder;-><init>(Lcom/android/okhttp/Response;)V+]Lcom/android/okhttp/Headers;Lcom/android/okhttp/Headers;
 HSPLcom/android/okhttp/Response$Builder;-><init>(Lcom/android/okhttp/Response;Lcom/android/okhttp/Response$1;)V
 HSPLcom/android/okhttp/Response$Builder;->access$000(Lcom/android/okhttp/Response$Builder;)Lcom/android/okhttp/Request;
 HSPLcom/android/okhttp/Response$Builder;->access$100(Lcom/android/okhttp/Response$Builder;)Lcom/android/okhttp/Protocol;
@@ -22534,7 +22549,7 @@
 HSPLcom/android/okhttp/Response$Builder;->priorResponse(Lcom/android/okhttp/Response;)Lcom/android/okhttp/Response$Builder;
 HSPLcom/android/okhttp/Response$Builder;->protocol(Lcom/android/okhttp/Protocol;)Lcom/android/okhttp/Response$Builder;
 HSPLcom/android/okhttp/Response$Builder;->request(Lcom/android/okhttp/Request;)Lcom/android/okhttp/Response$Builder;
-HSPLcom/android/okhttp/Response;-><init>(Lcom/android/okhttp/Response$Builder;)V
+HSPLcom/android/okhttp/Response;-><init>(Lcom/android/okhttp/Response$Builder;)V+]Lcom/android/okhttp/Headers$Builder;Lcom/android/okhttp/Headers$Builder;
 HSPLcom/android/okhttp/Response;-><init>(Lcom/android/okhttp/Response$Builder;Lcom/android/okhttp/Response$1;)V
 HSPLcom/android/okhttp/Response;->access$1100(Lcom/android/okhttp/Response;)Lcom/android/okhttp/Request;
 HSPLcom/android/okhttp/Response;->access$1200(Lcom/android/okhttp/Response;)Lcom/android/okhttp/Protocol;
@@ -22621,8 +22636,8 @@
 HSPLcom/android/okhttp/internal/http/Http1xStream$ChunkedSink;->write(Lcom/android/okhttp/okio/Buffer;J)V
 HSPLcom/android/okhttp/internal/http/Http1xStream$ChunkedSource;-><init>(Lcom/android/okhttp/internal/http/Http1xStream;Lcom/android/okhttp/internal/http/HttpEngine;)V
 HSPLcom/android/okhttp/internal/http/Http1xStream$ChunkedSource;->close()V
-HSPLcom/android/okhttp/internal/http/Http1xStream$ChunkedSource;->read(Lcom/android/okhttp/okio/Buffer;J)J
-HSPLcom/android/okhttp/internal/http/Http1xStream$ChunkedSource;->readChunkSize()V
+HSPLcom/android/okhttp/internal/http/Http1xStream$ChunkedSource;->read(Lcom/android/okhttp/okio/Buffer;J)J+]Lcom/android/okhttp/okio/BufferedSource;Lcom/android/okhttp/okio/RealBufferedSource;
+HSPLcom/android/okhttp/internal/http/Http1xStream$ChunkedSource;->readChunkSize()V+]Ljava/lang/String;Ljava/lang/String;]Lcom/android/okhttp/internal/http/Http1xStream;Lcom/android/okhttp/internal/http/Http1xStream;]Lcom/android/okhttp/internal/http/HttpEngine;Lcom/android/okhttp/internal/http/HttpEngine;]Lcom/android/okhttp/okio/BufferedSource;Lcom/android/okhttp/okio/RealBufferedSource;]Lcom/android/okhttp/internal/http/Http1xStream$ChunkedSource;Lcom/android/okhttp/internal/http/Http1xStream$ChunkedSource;
 HSPLcom/android/okhttp/internal/http/Http1xStream$FixedLengthSink;-><init>(Lcom/android/okhttp/internal/http/Http1xStream;J)V
 HSPLcom/android/okhttp/internal/http/Http1xStream$FixedLengthSink;-><init>(Lcom/android/okhttp/internal/http/Http1xStream;JLcom/android/okhttp/internal/http/Http1xStream$1;)V
 HSPLcom/android/okhttp/internal/http/Http1xStream$FixedLengthSink;->close()V
@@ -22648,11 +22663,11 @@
 HSPLcom/android/okhttp/internal/http/Http1xStream;->newFixedLengthSink(J)Lcom/android/okhttp/okio/Sink;
 HSPLcom/android/okhttp/internal/http/Http1xStream;->newFixedLengthSource(J)Lcom/android/okhttp/okio/Source;
 HSPLcom/android/okhttp/internal/http/Http1xStream;->openResponseBody(Lcom/android/okhttp/Response;)Lcom/android/okhttp/ResponseBody;
-HSPLcom/android/okhttp/internal/http/Http1xStream;->readHeaders()Lcom/android/okhttp/Headers;
+HSPLcom/android/okhttp/internal/http/Http1xStream;->readHeaders()Lcom/android/okhttp/Headers;+]Lcom/android/okhttp/internal/Internal;Lcom/android/okhttp/OkHttpClient$1;]Lcom/android/okhttp/okio/BufferedSource;Lcom/android/okhttp/okio/RealBufferedSource;]Lcom/android/okhttp/Headers$Builder;Lcom/android/okhttp/Headers$Builder;
 HSPLcom/android/okhttp/internal/http/Http1xStream;->readResponse()Lcom/android/okhttp/Response$Builder;
 HSPLcom/android/okhttp/internal/http/Http1xStream;->readResponseHeaders()Lcom/android/okhttp/Response$Builder;
 HSPLcom/android/okhttp/internal/http/Http1xStream;->setHttpEngine(Lcom/android/okhttp/internal/http/HttpEngine;)V
-HSPLcom/android/okhttp/internal/http/Http1xStream;->writeRequest(Lcom/android/okhttp/Headers;Ljava/lang/String;)V
+HSPLcom/android/okhttp/internal/http/Http1xStream;->writeRequest(Lcom/android/okhttp/Headers;Ljava/lang/String;)V+]Lcom/android/okhttp/okio/BufferedSink;Lcom/android/okhttp/okio/RealBufferedSink;]Lcom/android/okhttp/Headers;Lcom/android/okhttp/Headers;
 HSPLcom/android/okhttp/internal/http/Http1xStream;->writeRequestBody(Lcom/android/okhttp/internal/http/RetryableSink;)V
 HSPLcom/android/okhttp/internal/http/Http1xStream;->writeRequestHeaders(Lcom/android/okhttp/Request;)V
 HSPLcom/android/okhttp/internal/http/HttpEngine;-><init>(Lcom/android/okhttp/OkHttpClient;Lcom/android/okhttp/Request;ZZZLcom/android/okhttp/internal/http/StreamAllocation;Lcom/android/okhttp/internal/http/RetryableSink;Lcom/android/okhttp/Response;)V
@@ -22660,7 +22675,7 @@
 HSPLcom/android/okhttp/internal/http/HttpEngine;->cancel()V
 HSPLcom/android/okhttp/internal/http/HttpEngine;->close()Lcom/android/okhttp/internal/http/StreamAllocation;
 HSPLcom/android/okhttp/internal/http/HttpEngine;->connect()Lcom/android/okhttp/internal/http/HttpStream;
-HSPLcom/android/okhttp/internal/http/HttpEngine;->createAddress(Lcom/android/okhttp/OkHttpClient;Lcom/android/okhttp/Request;)Lcom/android/okhttp/Address;
+HSPLcom/android/okhttp/internal/http/HttpEngine;->createAddress(Lcom/android/okhttp/OkHttpClient;Lcom/android/okhttp/Request;)Lcom/android/okhttp/Address;+]Lcom/android/okhttp/OkHttpClient;Lcom/android/okhttp/OkHttpClient;]Lcom/android/okhttp/HttpUrl;Lcom/android/okhttp/HttpUrl;]Lcom/android/okhttp/Request;Lcom/android/okhttp/Request;
 HSPLcom/android/okhttp/internal/http/HttpEngine;->followUpRequest()Lcom/android/okhttp/Request;
 HSPLcom/android/okhttp/internal/http/HttpEngine;->getBufferedRequestBody()Lcom/android/okhttp/okio/BufferedSink;
 HSPLcom/android/okhttp/internal/http/HttpEngine;->getConnection()Lcom/android/okhttp/Connection;
@@ -22670,16 +22685,16 @@
 HSPLcom/android/okhttp/internal/http/HttpEngine;->hasBody(Lcom/android/okhttp/Response;)Z
 HSPLcom/android/okhttp/internal/http/HttpEngine;->hasResponse()Z
 HSPLcom/android/okhttp/internal/http/HttpEngine;->maybeCache()V
-HSPLcom/android/okhttp/internal/http/HttpEngine;->networkRequest(Lcom/android/okhttp/Request;)Lcom/android/okhttp/Request;
+HSPLcom/android/okhttp/internal/http/HttpEngine;->networkRequest(Lcom/android/okhttp/Request;)Lcom/android/okhttp/Request;+]Lcom/android/okhttp/OkHttpClient;Lcom/android/okhttp/OkHttpClient;]Lcom/android/okhttp/Request;Lcom/android/okhttp/Request;]Lcom/android/okhttp/Request$Builder;Lcom/android/okhttp/Request$Builder;
 HSPLcom/android/okhttp/internal/http/HttpEngine;->permitsRequestBody(Lcom/android/okhttp/Request;)Z
-HSPLcom/android/okhttp/internal/http/HttpEngine;->readNetworkResponse()Lcom/android/okhttp/Response;
-HSPLcom/android/okhttp/internal/http/HttpEngine;->readResponse()V
+HSPLcom/android/okhttp/internal/http/HttpEngine;->readNetworkResponse()Lcom/android/okhttp/Response;+]Lcom/android/okhttp/Response;Lcom/android/okhttp/Response;]Ljava/lang/String;Ljava/lang/String;]Lcom/android/okhttp/internal/io/RealConnection;Lcom/android/okhttp/internal/io/RealConnection;]Lcom/android/okhttp/internal/http/HttpStream;Lcom/android/okhttp/internal/http/Http1xStream;]Lcom/android/okhttp/Request;Lcom/android/okhttp/Request;]Lcom/android/okhttp/internal/http/StreamAllocation;Lcom/android/okhttp/internal/http/StreamAllocation;]Lcom/android/okhttp/Response$Builder;Lcom/android/okhttp/Response$Builder;
+HSPLcom/android/okhttp/internal/http/HttpEngine;->readResponse()V+]Lcom/android/okhttp/Response;Lcom/android/okhttp/Response;]Lcom/android/okhttp/internal/http/HttpEngine;Lcom/android/okhttp/internal/http/HttpEngine;]Lcom/android/okhttp/internal/http/HttpStream;Lcom/android/okhttp/internal/http/Http1xStream;]Lcom/android/okhttp/Response$Builder;Lcom/android/okhttp/Response$Builder;
 HSPLcom/android/okhttp/internal/http/HttpEngine;->receiveHeaders(Lcom/android/okhttp/Headers;)V
 HSPLcom/android/okhttp/internal/http/HttpEngine;->recover(Lcom/android/okhttp/internal/http/RouteException;)Lcom/android/okhttp/internal/http/HttpEngine;
 HSPLcom/android/okhttp/internal/http/HttpEngine;->recover(Ljava/io/IOException;)Lcom/android/okhttp/internal/http/HttpEngine;
 HSPLcom/android/okhttp/internal/http/HttpEngine;->recover(Ljava/io/IOException;Lcom/android/okhttp/okio/Sink;)Lcom/android/okhttp/internal/http/HttpEngine;
 HSPLcom/android/okhttp/internal/http/HttpEngine;->releaseStreamAllocation()V
-HSPLcom/android/okhttp/internal/http/HttpEngine;->sendRequest()V
+HSPLcom/android/okhttp/internal/http/HttpEngine;->sendRequest()V+]Lcom/android/okhttp/internal/Internal;Lcom/android/okhttp/OkHttpClient$1;]Lcom/android/okhttp/internal/http/CacheStrategy$Factory;Lcom/android/okhttp/internal/http/CacheStrategy$Factory;]Lcom/android/okhttp/internal/http/HttpEngine;Lcom/android/okhttp/internal/http/HttpEngine;]Lcom/android/okhttp/internal/http/HttpStream;Lcom/android/okhttp/internal/http/Http1xStream;
 HSPLcom/android/okhttp/internal/http/HttpEngine;->stripBody(Lcom/android/okhttp/Response;)Lcom/android/okhttp/Response;
 HSPLcom/android/okhttp/internal/http/HttpEngine;->unzip(Lcom/android/okhttp/Response;)Lcom/android/okhttp/Response;
 HSPLcom/android/okhttp/internal/http/HttpEngine;->writingRequestHeaders()V
@@ -22691,7 +22706,7 @@
 HSPLcom/android/okhttp/internal/http/OkHeaders;->contentLength(Lcom/android/okhttp/Request;)J
 HSPLcom/android/okhttp/internal/http/OkHeaders;->contentLength(Lcom/android/okhttp/Response;)J
 HSPLcom/android/okhttp/internal/http/OkHeaders;->stringToLong(Ljava/lang/String;)J
-HSPLcom/android/okhttp/internal/http/OkHeaders;->toMultimap(Lcom/android/okhttp/Headers;Ljava/lang/String;)Ljava/util/Map;
+HSPLcom/android/okhttp/internal/http/OkHeaders;->toMultimap(Lcom/android/okhttp/Headers;Ljava/lang/String;)Ljava/util/Map;+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Map;Ljava/util/TreeMap;]Lcom/android/okhttp/Headers;Lcom/android/okhttp/Headers;
 HSPLcom/android/okhttp/internal/http/RealResponseBody;-><init>(Lcom/android/okhttp/Headers;Lcom/android/okhttp/okio/BufferedSource;)V
 HSPLcom/android/okhttp/internal/http/RealResponseBody;->source()Lcom/android/okhttp/okio/BufferedSource;
 HSPLcom/android/okhttp/internal/http/RequestLine;->get(Lcom/android/okhttp/Request;Ljava/net/Proxy$Type;)Ljava/lang/String;
@@ -22728,12 +22743,12 @@
 HSPLcom/android/okhttp/internal/http/StreamAllocation;->connection()Lcom/android/okhttp/internal/io/RealConnection;
 HSPLcom/android/okhttp/internal/http/StreamAllocation;->connectionFailed()V
 HSPLcom/android/okhttp/internal/http/StreamAllocation;->connectionFailed(Ljava/io/IOException;)V
-HSPLcom/android/okhttp/internal/http/StreamAllocation;->deallocate(ZZZ)V
+HSPLcom/android/okhttp/internal/http/StreamAllocation;->deallocate(ZZZ)V+]Lcom/android/okhttp/internal/Internal;Lcom/android/okhttp/OkHttpClient$1;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLcom/android/okhttp/internal/http/StreamAllocation;->findConnection(IIIZ)Lcom/android/okhttp/internal/io/RealConnection;
 HSPLcom/android/okhttp/internal/http/StreamAllocation;->findHealthyConnection(IIIZZ)Lcom/android/okhttp/internal/io/RealConnection;
 HSPLcom/android/okhttp/internal/http/StreamAllocation;->isRecoverable(Lcom/android/okhttp/internal/http/RouteException;)Z
 HSPLcom/android/okhttp/internal/http/StreamAllocation;->isRecoverable(Ljava/io/IOException;)Z
-HSPLcom/android/okhttp/internal/http/StreamAllocation;->newStream(IIIZZ)Lcom/android/okhttp/internal/http/HttpStream;
+HSPLcom/android/okhttp/internal/http/StreamAllocation;->newStream(IIIZZ)Lcom/android/okhttp/internal/http/HttpStream;+]Lcom/android/okhttp/okio/BufferedSource;Lcom/android/okhttp/okio/RealBufferedSource;]Lcom/android/okhttp/internal/io/RealConnection;Lcom/android/okhttp/internal/io/RealConnection;]Lcom/android/okhttp/okio/Timeout;Lcom/android/okhttp/okio/Okio$3;]Lcom/android/okhttp/okio/BufferedSink;Lcom/android/okhttp/okio/RealBufferedSink;
 HSPLcom/android/okhttp/internal/http/StreamAllocation;->noNewStreams()V
 HSPLcom/android/okhttp/internal/http/StreamAllocation;->recover(Lcom/android/okhttp/internal/http/RouteException;)Z
 HSPLcom/android/okhttp/internal/http/StreamAllocation;->recover(Ljava/io/IOException;Lcom/android/okhttp/okio/Sink;)Z
@@ -22786,11 +22801,11 @@
 HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->getOutputStream()Ljava/io/OutputStream;
 HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->getRequestProperties()Ljava/util/Map;
 HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->getRequestProperty(Ljava/lang/String;)Ljava/lang/String;
-HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->getResponse()Lcom/android/okhttp/internal/http/HttpEngine;
+HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->getResponse()Lcom/android/okhttp/internal/http/HttpEngine;+]Lcom/android/okhttp/internal/http/HttpEngine;Lcom/android/okhttp/internal/http/HttpEngine;
 HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->getResponseCode()I
 HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->getResponseMessage()Ljava/lang/String;
 HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->initHttpEngine()V
-HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->newHttpEngine(Ljava/lang/String;Lcom/android/okhttp/internal/http/StreamAllocation;Lcom/android/okhttp/internal/http/RetryableSink;Lcom/android/okhttp/Response;)Lcom/android/okhttp/internal/http/HttpEngine;
+HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->newHttpEngine(Ljava/lang/String;Lcom/android/okhttp/internal/http/StreamAllocation;Lcom/android/okhttp/internal/http/RetryableSink;Lcom/android/okhttp/Response;)Lcom/android/okhttp/internal/http/HttpEngine;+]Lcom/android/okhttp/internal/Internal;Lcom/android/okhttp/OkHttpClient$1;]Ljava/net/URL;Ljava/net/URL;]Lcom/android/okhttp/internal/huc/HttpURLConnectionImpl;Lcom/android/okhttp/internal/huc/HttpURLConnectionImpl;]Lcom/android/okhttp/Headers$Builder;Lcom/android/okhttp/Headers$Builder;]Lcom/android/okhttp/Request$Builder;Lcom/android/okhttp/Request$Builder;]Lcom/android/okhttp/Headers;Lcom/android/okhttp/Headers;
 HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->responseSourceHeader(Lcom/android/okhttp/Response;)Ljava/lang/String;
 HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->setConnectTimeout(I)V
 HSPLcom/android/okhttp/internal/huc/HttpURLConnectionImpl;->setFixedLengthStreamingMode(I)V
@@ -22860,7 +22875,7 @@
 HSPLcom/android/okhttp/okio/AsyncTimeout$1;->timeout()Lcom/android/okhttp/okio/Timeout;
 HSPLcom/android/okhttp/okio/AsyncTimeout$1;->write(Lcom/android/okhttp/okio/Buffer;J)V
 HSPLcom/android/okhttp/okio/AsyncTimeout$2;-><init>(Lcom/android/okhttp/okio/AsyncTimeout;Lcom/android/okhttp/okio/Source;)V
-HSPLcom/android/okhttp/okio/AsyncTimeout$2;->read(Lcom/android/okhttp/okio/Buffer;J)J
+HSPLcom/android/okhttp/okio/AsyncTimeout$2;->read(Lcom/android/okhttp/okio/Buffer;J)J+]Lcom/android/okhttp/okio/Source;Lcom/android/okhttp/okio/Okio$2;]Lcom/android/okhttp/okio/AsyncTimeout;Lcom/android/okhttp/okio/Okio$3;
 HSPLcom/android/okhttp/okio/AsyncTimeout$2;->timeout()Lcom/android/okhttp/okio/Timeout;
 HSPLcom/android/okhttp/okio/AsyncTimeout$Watchdog;-><init>()V
 HSPLcom/android/okhttp/okio/AsyncTimeout$Watchdog;->run()V
@@ -22868,12 +22883,12 @@
 HSPLcom/android/okhttp/okio/AsyncTimeout;->access$000()Lcom/android/okhttp/okio/AsyncTimeout;
 HSPLcom/android/okhttp/okio/AsyncTimeout;->awaitTimeout()Lcom/android/okhttp/okio/AsyncTimeout;
 HSPLcom/android/okhttp/okio/AsyncTimeout;->cancelScheduledTimeout(Lcom/android/okhttp/okio/AsyncTimeout;)Z
-HSPLcom/android/okhttp/okio/AsyncTimeout;->enter()V
+HSPLcom/android/okhttp/okio/AsyncTimeout;->enter()V+]Lcom/android/okhttp/okio/AsyncTimeout;Lcom/android/okhttp/okio/Okio$3;
 HSPLcom/android/okhttp/okio/AsyncTimeout;->exit()Z
 HSPLcom/android/okhttp/okio/AsyncTimeout;->exit(Ljava/io/IOException;)Ljava/io/IOException;
 HSPLcom/android/okhttp/okio/AsyncTimeout;->exit(Z)V
 HSPLcom/android/okhttp/okio/AsyncTimeout;->remainingNanos(J)J
-HSPLcom/android/okhttp/okio/AsyncTimeout;->scheduleTimeout(Lcom/android/okhttp/okio/AsyncTimeout;JZ)V+]Ljava/lang/Object;Ljava/lang/Class;
+HSPLcom/android/okhttp/okio/AsyncTimeout;->scheduleTimeout(Lcom/android/okhttp/okio/AsyncTimeout;JZ)V+]Ljava/lang/Object;Ljava/lang/Class;]Lcom/android/okhttp/okio/AsyncTimeout;Lcom/android/okhttp/okio/Okio$3;
 HSPLcom/android/okhttp/okio/AsyncTimeout;->sink(Lcom/android/okhttp/okio/Sink;)Lcom/android/okhttp/okio/Sink;
 HSPLcom/android/okhttp/okio/AsyncTimeout;->source(Lcom/android/okhttp/okio/Source;)Lcom/android/okhttp/okio/Source;
 HSPLcom/android/okhttp/okio/Buffer;-><init>()V
@@ -22894,7 +22909,7 @@
 HSPLcom/android/okhttp/okio/Buffer;->readInt()I
 HSPLcom/android/okhttp/okio/Buffer;->readIntLe()I
 HSPLcom/android/okhttp/okio/Buffer;->readShort()S
-HSPLcom/android/okhttp/okio/Buffer;->readString(JLjava/nio/charset/Charset;)Ljava/lang/String;
+HSPLcom/android/okhttp/okio/Buffer;->readString(JLjava/nio/charset/Charset;)Ljava/lang/String;+]Lcom/android/okhttp/okio/Segment;Lcom/android/okhttp/okio/Segment;
 HSPLcom/android/okhttp/okio/Buffer;->readUtf8()Ljava/lang/String;
 HSPLcom/android/okhttp/okio/Buffer;->readUtf8(J)Ljava/lang/String;
 HSPLcom/android/okhttp/okio/Buffer;->readUtf8Line(J)Ljava/lang/String;
@@ -22906,7 +22921,7 @@
 HSPLcom/android/okhttp/okio/Buffer;->writeByte(I)Lcom/android/okhttp/okio/Buffer;
 HSPLcom/android/okhttp/okio/Buffer;->writeHexadecimalUnsignedLong(J)Lcom/android/okhttp/okio/Buffer;
 HSPLcom/android/okhttp/okio/Buffer;->writeUtf8(Ljava/lang/String;)Lcom/android/okhttp/okio/Buffer;
-HSPLcom/android/okhttp/okio/Buffer;->writeUtf8(Ljava/lang/String;II)Lcom/android/okhttp/okio/Buffer;
+HSPLcom/android/okhttp/okio/Buffer;->writeUtf8(Ljava/lang/String;II)Lcom/android/okhttp/okio/Buffer;+]Lcom/android/okhttp/okio/Buffer;Lcom/android/okhttp/okio/Buffer;
 HSPLcom/android/okhttp/okio/Buffer;->writeUtf8CodePoint(I)Lcom/android/okhttp/okio/Buffer;
 HSPLcom/android/okhttp/okio/ByteString;-><init>([B)V
 HSPLcom/android/okhttp/okio/ByteString;->hex()Ljava/lang/String;
@@ -22930,9 +22945,9 @@
 HSPLcom/android/okhttp/okio/InflaterSource;->releaseInflatedBytes()V
 HSPLcom/android/okhttp/okio/Okio$1;-><init>(Lcom/android/okhttp/okio/Timeout;Ljava/io/OutputStream;)V
 HSPLcom/android/okhttp/okio/Okio$1;->flush()V
-HSPLcom/android/okhttp/okio/Okio$1;->write(Lcom/android/okhttp/okio/Buffer;J)V
+HSPLcom/android/okhttp/okio/Okio$1;->write(Lcom/android/okhttp/okio/Buffer;J)V+]Lcom/android/okhttp/okio/Segment;Lcom/android/okhttp/okio/Segment;]Lcom/android/okhttp/okio/Timeout;Lcom/android/okhttp/okio/Okio$3;
 HSPLcom/android/okhttp/okio/Okio$2;-><init>(Lcom/android/okhttp/okio/Timeout;Ljava/io/InputStream;)V
-HSPLcom/android/okhttp/okio/Okio$2;->read(Lcom/android/okhttp/okio/Buffer;J)J+]Lcom/android/okhttp/okio/Buffer;Lcom/android/okhttp/okio/Buffer;]Lcom/android/okhttp/okio/Timeout;Lcom/android/okhttp/okio/Okio$3;]Ljava/io/InputStream;Lcom/android/org/conscrypt/ConscryptEngineSocket$SSLInputStream;
+HSPLcom/android/okhttp/okio/Okio$2;->read(Lcom/android/okhttp/okio/Buffer;J)J+]Lcom/android/okhttp/okio/Buffer;Lcom/android/okhttp/okio/Buffer;]Lcom/android/okhttp/okio/Timeout;Lcom/android/okhttp/okio/Okio$3;]Ljava/io/InputStream;missing_types
 HSPLcom/android/okhttp/okio/Okio$3;-><init>(Ljava/net/Socket;)V
 HSPLcom/android/okhttp/okio/Okio$3;->newTimeoutException(Ljava/io/IOException;)Ljava/io/IOException;
 HSPLcom/android/okhttp/okio/Okio$3;->timedOut()V
@@ -22964,7 +22979,7 @@
 HSPLcom/android/okhttp/okio/RealBufferedSource$1;->available()I
 HSPLcom/android/okhttp/okio/RealBufferedSource$1;->close()V
 HSPLcom/android/okhttp/okio/RealBufferedSource$1;->read()I
-HSPLcom/android/okhttp/okio/RealBufferedSource$1;->read([BII)I+]Lcom/android/okhttp/okio/Buffer;Lcom/android/okhttp/okio/Buffer;]Lcom/android/okhttp/okio/Source;Lcom/android/okhttp/internal/http/Http1xStream$FixedLengthSource;
+HSPLcom/android/okhttp/okio/RealBufferedSource$1;->read([BII)I+]Lcom/android/okhttp/okio/Buffer;Lcom/android/okhttp/okio/Buffer;]Lcom/android/okhttp/okio/Source;Lcom/android/okhttp/internal/http/Http1xStream$FixedLengthSource;,Lcom/android/okhttp/okio/GzipSource;
 HSPLcom/android/okhttp/okio/RealBufferedSource;-><init>(Lcom/android/okhttp/okio/Source;)V
 HSPLcom/android/okhttp/okio/RealBufferedSource;-><init>(Lcom/android/okhttp/okio/Source;Lcom/android/okhttp/okio/Buffer;)V
 HSPLcom/android/okhttp/okio/RealBufferedSource;->access$000(Lcom/android/okhttp/okio/RealBufferedSource;)Z
@@ -22972,10 +22987,10 @@
 HSPLcom/android/okhttp/okio/RealBufferedSource;->close()V
 HSPLcom/android/okhttp/okio/RealBufferedSource;->exhausted()Z
 HSPLcom/android/okhttp/okio/RealBufferedSource;->indexOf(B)J
-HSPLcom/android/okhttp/okio/RealBufferedSource;->indexOf(BJ)J
+HSPLcom/android/okhttp/okio/RealBufferedSource;->indexOf(BJ)J+]Lcom/android/okhttp/okio/Buffer;Lcom/android/okhttp/okio/Buffer;]Lcom/android/okhttp/okio/Source;Lcom/android/okhttp/okio/AsyncTimeout$2;
 HSPLcom/android/okhttp/okio/RealBufferedSource;->inputStream()Ljava/io/InputStream;
-HSPLcom/android/okhttp/okio/RealBufferedSource;->read(Lcom/android/okhttp/okio/Buffer;J)J+]Lcom/android/okhttp/okio/Buffer;Lcom/android/okhttp/okio/Buffer;]Lcom/android/okhttp/okio/Source;Lcom/android/okhttp/okio/AsyncTimeout$2;
-HSPLcom/android/okhttp/okio/RealBufferedSource;->readHexadecimalUnsignedLong()J
+HSPLcom/android/okhttp/okio/RealBufferedSource;->read(Lcom/android/okhttp/okio/Buffer;J)J+]Lcom/android/okhttp/okio/Buffer;Lcom/android/okhttp/okio/Buffer;]Lcom/android/okhttp/okio/Source;Lcom/android/okhttp/okio/AsyncTimeout$2;,Lcom/android/okhttp/internal/http/Http1xStream$ChunkedSource;
+HSPLcom/android/okhttp/okio/RealBufferedSource;->readHexadecimalUnsignedLong()J+]Lcom/android/okhttp/okio/Buffer;Lcom/android/okhttp/okio/Buffer;]Lcom/android/okhttp/okio/RealBufferedSource;Lcom/android/okhttp/okio/RealBufferedSource;
 HSPLcom/android/okhttp/okio/RealBufferedSource;->readIntLe()I
 HSPLcom/android/okhttp/okio/RealBufferedSource;->readShort()S
 HSPLcom/android/okhttp/okio/RealBufferedSource;->readUtf8LineStrict()Ljava/lang/String;
@@ -23156,11 +23171,11 @@
 HSPLcom/android/org/bouncycastle/crypto/macs/HMac;-><clinit>()V
 HSPLcom/android/org/bouncycastle/crypto/macs/HMac;-><init>(Lcom/android/org/bouncycastle/crypto/Digest;)V
 HSPLcom/android/org/bouncycastle/crypto/macs/HMac;-><init>(Lcom/android/org/bouncycastle/crypto/Digest;I)V
-HSPLcom/android/org/bouncycastle/crypto/macs/HMac;->doFinal([BI)I
+HSPLcom/android/org/bouncycastle/crypto/macs/HMac;->doFinal([BI)I+]Lcom/android/org/bouncycastle/crypto/Digest;Lcom/android/org/bouncycastle/crypto/digests/OpenSSLDigest$SHA1;
 HSPLcom/android/org/bouncycastle/crypto/macs/HMac;->getByteLength(Lcom/android/org/bouncycastle/crypto/Digest;)I
 HSPLcom/android/org/bouncycastle/crypto/macs/HMac;->getMacSize()I
 HSPLcom/android/org/bouncycastle/crypto/macs/HMac;->init(Lcom/android/org/bouncycastle/crypto/CipherParameters;)V
-HSPLcom/android/org/bouncycastle/crypto/macs/HMac;->update([BII)V
+HSPLcom/android/org/bouncycastle/crypto/macs/HMac;->update([BII)V+]Lcom/android/org/bouncycastle/crypto/Digest;Lcom/android/org/bouncycastle/crypto/digests/OpenSSLDigest$SHA1;
 HSPLcom/android/org/bouncycastle/crypto/macs/HMac;->xorPad([BIB)V
 HSPLcom/android/org/bouncycastle/crypto/modes/CBCBlockCipher;-><init>(Lcom/android/org/bouncycastle/crypto/BlockCipher;)V
 HSPLcom/android/org/bouncycastle/crypto/modes/CBCBlockCipher;->getBlockSize()I
@@ -23277,7 +23292,7 @@
 HSPLcom/android/org/kxml2/io/KXmlParser;->read([C)V
 HSPLcom/android/org/kxml2/io/KXmlParser;->readComment(Z)Ljava/lang/String;
 HSPLcom/android/org/kxml2/io/KXmlParser;->readEndTag()V
-HSPLcom/android/org/kxml2/io/KXmlParser;->readEntity(Ljava/lang/StringBuilder;ZZLcom/android/org/kxml2/io/KXmlParser$ValueContext;)V
+HSPLcom/android/org/kxml2/io/KXmlParser;->readEntity(Ljava/lang/StringBuilder;ZZLcom/android/org/kxml2/io/KXmlParser$ValueContext;)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Map;Ljava/util/HashMap;
 HSPLcom/android/org/kxml2/io/KXmlParser;->readName()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Llibcore/internal/StringPool;Llibcore/internal/StringPool;
 HSPLcom/android/org/kxml2/io/KXmlParser;->readUntil([CZ)Ljava/lang/String;
 HSPLcom/android/org/kxml2/io/KXmlParser;->readValue(CZZLcom/android/org/kxml2/io/KXmlParser$ValueContext;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Llibcore/internal/StringPool;Llibcore/internal/StringPool;
@@ -23348,7 +23363,7 @@
 HSPLdalvik/system/BlockGuard$3;->initialValue()Ljava/lang/Object;
 HSPLdalvik/system/BlockGuard;->getThreadPolicy()Ldalvik/system/BlockGuard$Policy;+]Ljava/lang/ThreadLocal;Ldalvik/system/BlockGuard$3;
 HSPLdalvik/system/BlockGuard;->getVmPolicy()Ldalvik/system/BlockGuard$VmPolicy;
-HSPLdalvik/system/BlockGuard;->setThreadPolicy(Ldalvik/system/BlockGuard$Policy;)V
+HSPLdalvik/system/BlockGuard;->setThreadPolicy(Ldalvik/system/BlockGuard$Policy;)V+]Ljava/lang/ThreadLocal;Ldalvik/system/BlockGuard$3;
 HSPLdalvik/system/BlockGuard;->setVmPolicy(Ldalvik/system/BlockGuard$VmPolicy;)V
 HSPLdalvik/system/CloseGuard;-><init>()V
 HSPLdalvik/system/CloseGuard;->close()V
@@ -23358,7 +23373,7 @@
 HSPLdalvik/system/CloseGuard;->openWithCallSite(Ljava/lang/String;Ljava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLdalvik/system/CloseGuard;->setEnabled(Z)V
 HSPLdalvik/system/CloseGuard;->setReporter(Ldalvik/system/CloseGuard$Reporter;)V
-HSPLdalvik/system/CloseGuard;->warnIfOpen()V+]Ldalvik/system/CloseGuard$Reporter;Landroid/os/StrictMode$AndroidCloseGuardReporter;
+HSPLdalvik/system/CloseGuard;->warnIfOpen()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ldalvik/system/CloseGuard$Reporter;Landroid/os/StrictMode$AndroidCloseGuardReporter;
 HSPLdalvik/system/DelegateLastClassLoader;-><init>(Ljava/lang/String;Ljava/lang/ClassLoader;)V
 HSPLdalvik/system/DelegateLastClassLoader;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Z)V
 HSPLdalvik/system/DelegateLastClassLoader;->loadClass(Ljava/lang/String;Z)Ljava/lang/Class;
@@ -23381,7 +23396,7 @@
 HSPLdalvik/system/DexPathList$NativeLibraryElement;-><init>(Ljava/io/File;)V
 HSPLdalvik/system/DexPathList$NativeLibraryElement;-><init>(Ljava/io/File;Ljava/lang/String;)V
 HSPLdalvik/system/DexPathList$NativeLibraryElement;->equals(Ljava/lang/Object;)Z
-HSPLdalvik/system/DexPathList$NativeLibraryElement;->findNativeLibrary(Ljava/lang/String;)Ljava/lang/String;
+HSPLdalvik/system/DexPathList$NativeLibraryElement;->findNativeLibrary(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/io/File;Ljava/io/File;]Ldalvik/system/DexPathList$NativeLibraryElement;Ldalvik/system/DexPathList$NativeLibraryElement;]Llibcore/io/ClassPathURLStreamHandler;Llibcore/io/ClassPathURLStreamHandler;
 HSPLdalvik/system/DexPathList$NativeLibraryElement;->maybeInit()V
 HSPLdalvik/system/DexPathList;-><init>(Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/lang/String;Ljava/io/File;Z)V
 HSPLdalvik/system/DexPathList;->addNativePath(Ljava/util/Collection;)V
@@ -23410,12 +23425,12 @@
 HSPLdalvik/system/SocketTagger;->set(Ldalvik/system/SocketTagger;)V
 HSPLdalvik/system/SocketTagger;->tag(Ljava/net/Socket;)V
 HSPLdalvik/system/SocketTagger;->untag(Ljava/net/Socket;)V
-HSPLdalvik/system/VMRuntime;->getInstructionSet(Ljava/lang/String;)Ljava/lang/String;
+HSPLdalvik/system/VMRuntime;->getInstructionSet(Ljava/lang/String;)Ljava/lang/String;+]Ljava/util/Map;Ljava/util/HashMap;
 HSPLdalvik/system/VMRuntime;->getRuntime()Ldalvik/system/VMRuntime;
 HSPLdalvik/system/VMRuntime;->getTargetSdkVersion()I
 HSPLdalvik/system/VMRuntime;->hiddenApiUsed(ILjava/lang/String;Ljava/lang/String;IZ)V
 HSPLdalvik/system/VMRuntime;->notifyNativeAllocation()V+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
-HSPLdalvik/system/VMRuntime;->registerNativeAllocation(I)V
+HSPLdalvik/system/VMRuntime;->registerNativeAllocation(I)V+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;
 HSPLdalvik/system/VMRuntime;->registerNativeFree(I)V
 HSPLdalvik/system/VMRuntime;->runFinalization(J)V
 HSPLdalvik/system/VMRuntime;->runFinalizationSync()V
@@ -23448,20 +23463,20 @@
 HSPLjava/io/BufferedInputStream;-><init>(Ljava/io/InputStream;I)V
 HSPLjava/io/BufferedInputStream;->available()I
 HSPLjava/io/BufferedInputStream;->close()V
-HSPLjava/io/BufferedInputStream;->fill()V+]Ljava/io/InputStream;Ljava/io/FileInputStream;
+HSPLjava/io/BufferedInputStream;->fill()V+]Ljava/io/InputStream;missing_types
 HSPLjava/io/BufferedInputStream;->getBufIfOpen()[B
 HSPLjava/io/BufferedInputStream;->getInIfOpen()Ljava/io/InputStream;
 HSPLjava/io/BufferedInputStream;->mark(I)V
 HSPLjava/io/BufferedInputStream;->markSupported()Z
 HSPLjava/io/BufferedInputStream;->read()I
-HSPLjava/io/BufferedInputStream;->read([BII)I+]Ljava/io/InputStream;Ljava/io/FileInputStream;
+HSPLjava/io/BufferedInputStream;->read([BII)I+]Ljava/io/InputStream;Ljava/io/FileInputStream;,Landroid/os/ParcelFileDescriptor$AutoCloseInputStream;,Ljava/net/SocketInputStream;
 HSPLjava/io/BufferedInputStream;->read1([BII)I
 HSPLjava/io/BufferedInputStream;->reset()V
 HSPLjava/io/BufferedInputStream;->skip(J)J
 HSPLjava/io/BufferedOutputStream;-><init>(Ljava/io/OutputStream;)V
 HSPLjava/io/BufferedOutputStream;-><init>(Ljava/io/OutputStream;I)V
-HSPLjava/io/BufferedOutputStream;->flush()V
-HSPLjava/io/BufferedOutputStream;->flushBuffer()V
+HSPLjava/io/BufferedOutputStream;->flush()V+]Ljava/io/OutputStream;Ljava/io/FileOutputStream;
+HSPLjava/io/BufferedOutputStream;->flushBuffer()V+]Ljava/io/OutputStream;Ljava/io/FileOutputStream;
 HSPLjava/io/BufferedOutputStream;->write(I)V
 HSPLjava/io/BufferedOutputStream;->write([BII)V
 HSPLjava/io/BufferedReader;-><init>(Ljava/io/Reader;)V
@@ -23481,10 +23496,10 @@
 HSPLjava/io/BufferedWriter;->flush()V
 HSPLjava/io/BufferedWriter;->flushBuffer()V
 HSPLjava/io/BufferedWriter;->min(II)I
-HSPLjava/io/BufferedWriter;->newLine()V
+HSPLjava/io/BufferedWriter;->newLine()V+]Ljava/io/BufferedWriter;Ljava/io/BufferedWriter;
 HSPLjava/io/BufferedWriter;->write(I)V
-HSPLjava/io/BufferedWriter;->write(Ljava/lang/String;II)V
-HSPLjava/io/BufferedWriter;->write([CII)V
+HSPLjava/io/BufferedWriter;->write(Ljava/lang/String;II)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/io/BufferedWriter;Ljava/io/BufferedWriter;
+HSPLjava/io/BufferedWriter;->write([CII)V+]Ljava/io/BufferedWriter;Ljava/io/BufferedWriter;
 HSPLjava/io/ByteArrayInputStream;-><init>([B)V
 HSPLjava/io/ByteArrayInputStream;-><init>([BII)V
 HSPLjava/io/ByteArrayInputStream;->available()I
@@ -23520,15 +23535,15 @@
 HSPLjava/io/DataInputStream;->read([B)I
 HSPLjava/io/DataInputStream;->read([BII)I
 HSPLjava/io/DataInputStream;->readBoolean()Z
-HSPLjava/io/DataInputStream;->readByte()B+]Ljava/io/InputStream;Ljava/io/ByteArrayInputStream;
+HSPLjava/io/DataInputStream;->readByte()B+]Ljava/io/InputStream;Ljava/io/BufferedInputStream;,Ljava/io/ByteArrayInputStream;
 HSPLjava/io/DataInputStream;->readFully([B)V
 HSPLjava/io/DataInputStream;->readFully([BII)V+]Ljava/io/InputStream;missing_types
-HSPLjava/io/DataInputStream;->readInt()I
+HSPLjava/io/DataInputStream;->readInt()I+]Ljava/io/DataInputStream;Ljava/io/DataInputStream;
 HSPLjava/io/DataInputStream;->readLong()J
 HSPLjava/io/DataInputStream;->readShort()S+]Ljava/io/DataInputStream;Ljava/io/DataInputStream;
 HSPLjava/io/DataInputStream;->readUTF()Ljava/lang/String;
 HSPLjava/io/DataInputStream;->readUTF(Ljava/io/DataInput;)Ljava/lang/String;+]Ljava/io/DataInput;Ljava/io/DataInputStream;
-HSPLjava/io/DataInputStream;->readUnsignedByte()I+]Ljava/io/InputStream;Ljava/io/ByteArrayInputStream;
+HSPLjava/io/DataInputStream;->readUnsignedByte()I+]Ljava/io/InputStream;Llibcore/io/ClassPathURLStreamHandler$ClassPathURLConnection$1;,Ljava/io/ByteArrayInputStream;
 HSPLjava/io/DataInputStream;->readUnsignedShort()I+]Ljava/io/DataInputStream;Ljava/io/DataInputStream;
 HSPLjava/io/DataInputStream;->skipBytes(I)I
 HSPLjava/io/DataOutputStream;-><init>(Ljava/io/OutputStream;)V
@@ -23537,33 +23552,33 @@
 HSPLjava/io/DataOutputStream;->write(I)V+]Ljava/io/OutputStream;Ljava/io/ByteArrayOutputStream;
 HSPLjava/io/DataOutputStream;->write([BII)V
 HSPLjava/io/DataOutputStream;->writeBoolean(Z)V
-HSPLjava/io/DataOutputStream;->writeByte(I)V
-HSPLjava/io/DataOutputStream;->writeInt(I)V+]Ljava/io/OutputStream;Ljava/io/ByteArrayOutputStream;
+HSPLjava/io/DataOutputStream;->writeByte(I)V+]Ljava/io/OutputStream;Ljava/io/BufferedOutputStream;,Ljava/util/zip/DeflaterOutputStream;
+HSPLjava/io/DataOutputStream;->writeInt(I)V+]Ljava/io/OutputStream;Ljava/io/ByteArrayOutputStream;,Ljava/io/BufferedOutputStream;,Ljava/io/FileOutputStream;
 HSPLjava/io/DataOutputStream;->writeLong(J)V
 HSPLjava/io/DataOutputStream;->writeShort(I)V+]Ljava/io/OutputStream;Ljava/io/ByteArrayOutputStream;
 HSPLjava/io/DataOutputStream;->writeUTF(Ljava/lang/String;)V
-HSPLjava/io/DataOutputStream;->writeUTF(Ljava/lang/String;Ljava/io/DataOutput;)I
+HSPLjava/io/DataOutputStream;->writeUTF(Ljava/lang/String;Ljava/io/DataOutput;)I+]Ljava/io/DataOutput;Ljava/io/DataOutputStream;,Ljava/io/RandomAccessFile;
 HSPLjava/io/EOFException;-><init>()V
 HSPLjava/io/EOFException;-><init>(Ljava/lang/String;)V
 HSPLjava/io/ExpiringCache;->clear()V
 HSPLjava/io/File$TempDirectory;->generateFile(Ljava/lang/String;Ljava/lang/String;Ljava/io/File;)Ljava/io/File;
 HSPLjava/io/File;-><init>(Ljava/io/File;Ljava/lang/String;)V+]Ljava/io/FileSystem;Ljava/io/UnixFileSystem;
-HSPLjava/io/File;-><init>(Ljava/lang/String;)V
+HSPLjava/io/File;-><init>(Ljava/lang/String;)V+]Ljava/io/FileSystem;Ljava/io/UnixFileSystem;
 HSPLjava/io/File;-><init>(Ljava/lang/String;I)V
 HSPLjava/io/File;-><init>(Ljava/lang/String;Ljava/io/File;)V+]Ljava/io/FileSystem;Ljava/io/UnixFileSystem;
 HSPLjava/io/File;-><init>(Ljava/lang/String;Ljava/lang/String;)V
 HSPLjava/io/File;->canExecute()Z
 HSPLjava/io/File;->canRead()Z
-HSPLjava/io/File;->canWrite()Z
+HSPLjava/io/File;->canWrite()Z+]Ljava/io/File;Ljava/io/File;]Ljava/io/FileSystem;Ljava/io/UnixFileSystem;
 HSPLjava/io/File;->compareTo(Ljava/io/File;)I+]Ljava/io/FileSystem;Ljava/io/UnixFileSystem;
 HSPLjava/io/File;->compareTo(Ljava/lang/Object;)I
 HSPLjava/io/File;->createNewFile()Z
 HSPLjava/io/File;->createTempFile(Ljava/lang/String;Ljava/lang/String;Ljava/io/File;)Ljava/io/File;
 HSPLjava/io/File;->delete()Z
 HSPLjava/io/File;->equals(Ljava/lang/Object;)Z+]Ljava/io/File;Ljava/io/File;
-HSPLjava/io/File;->exists()Z
+HSPLjava/io/File;->exists()Z+]Ljava/io/File;Ljava/io/File;]Ljava/io/FileSystem;Ljava/io/UnixFileSystem;
 HSPLjava/io/File;->getAbsoluteFile()Ljava/io/File;
-HSPLjava/io/File;->getAbsolutePath()Ljava/lang/String;
+HSPLjava/io/File;->getAbsolutePath()Ljava/lang/String;+]Ljava/io/FileSystem;Ljava/io/UnixFileSystem;
 HSPLjava/io/File;->getCanonicalFile()Ljava/io/File;
 HSPLjava/io/File;->getCanonicalPath()Ljava/lang/String;
 HSPLjava/io/File;->getFreeSpace()J
@@ -23579,15 +23594,15 @@
 HSPLjava/io/File;->isDirectory()Z+]Ljava/io/File;Ljava/io/File;]Ljava/io/FileSystem;Ljava/io/UnixFileSystem;
 HSPLjava/io/File;->isFile()Z
 HSPLjava/io/File;->isInvalid()Z
-HSPLjava/io/File;->lastModified()J
-HSPLjava/io/File;->length()J
-HSPLjava/io/File;->list()[Ljava/lang/String;
+HSPLjava/io/File;->lastModified()J+]Ljava/io/File;Ljava/io/File;]Ljava/io/FileSystem;Ljava/io/UnixFileSystem;
+HSPLjava/io/File;->length()J+]Ljava/io/File;Ljava/io/File;]Ljava/io/FileSystem;Ljava/io/UnixFileSystem;
+HSPLjava/io/File;->list()[Ljava/lang/String;+]Ljava/io/File;Ljava/io/File;]Ljava/io/FileSystem;Ljava/io/UnixFileSystem;
 HSPLjava/io/File;->list(Ljava/io/FilenameFilter;)[Ljava/lang/String;
 HSPLjava/io/File;->listFiles()[Ljava/io/File;
 HSPLjava/io/File;->listFiles(Ljava/io/FileFilter;)[Ljava/io/File;
 HSPLjava/io/File;->listFiles(Ljava/io/FilenameFilter;)[Ljava/io/File;
 HSPLjava/io/File;->mkdir()Z
-HSPLjava/io/File;->mkdirs()Z
+HSPLjava/io/File;->mkdirs()Z+]Ljava/io/File;Ljava/io/File;
 HSPLjava/io/File;->renameTo(Ljava/io/File;)Z
 HSPLjava/io/File;->setExecutable(Z)Z
 HSPLjava/io/File;->setExecutable(ZZ)Z
@@ -23597,7 +23612,7 @@
 HSPLjava/io/File;->setWritable(Z)Z
 HSPLjava/io/File;->setWritable(ZZ)Z
 HSPLjava/io/File;->slashify(Ljava/lang/String;Z)Ljava/lang/String;
-HSPLjava/io/File;->toPath()Ljava/nio/file/Path;
+HSPLjava/io/File;->toPath()Ljava/nio/file/Path;+]Ljava/nio/file/FileSystem;Lsun/nio/fs/LinuxFileSystem;
 HSPLjava/io/File;->toString()Ljava/lang/String;
 HSPLjava/io/File;->toURI()Ljava/net/URI;
 HSPLjava/io/FileDescriptor$1;->set(Ljava/io/FileDescriptor;I)V
@@ -23610,7 +23625,7 @@
 HSPLjava/io/FileDescriptor;->setInt$(I)V
 HSPLjava/io/FileDescriptor;->setOwnerId$(J)V
 HSPLjava/io/FileDescriptor;->valid()Z
-HSPLjava/io/FileInputStream;-><init>(Ljava/io/File;)V
+HSPLjava/io/FileInputStream;-><init>(Ljava/io/File;)V+]Ljava/io/File;Ljava/io/File;]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
 HSPLjava/io/FileInputStream;-><init>(Ljava/io/FileDescriptor;)V
 HSPLjava/io/FileInputStream;-><init>(Ljava/io/FileDescriptor;Z)V
 HSPLjava/io/FileInputStream;-><init>(Ljava/lang/String;)V
@@ -23622,7 +23637,7 @@
 HSPLjava/io/FileInputStream;->read()I
 HSPLjava/io/FileInputStream;->read([B)I+]Ljava/io/FileInputStream;Ljava/io/FileInputStream;,Landroid/os/ParcelFileDescriptor$AutoCloseInputStream;
 HSPLjava/io/FileInputStream;->read([BII)I+]Llibcore/io/IoTracker;Llibcore/io/IoTracker;
-HSPLjava/io/FileInputStream;->skip(J)J+]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;
+HSPLjava/io/FileInputStream;->skip(J)J+]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;,Landroid/os/StrictMode$AndroidBlockGuardPolicy;
 HSPLjava/io/FileNotFoundException;-><init>(Ljava/lang/String;)V
 HSPLjava/io/FileOutputStream;-><init>(Ljava/io/File;)V
 HSPLjava/io/FileOutputStream;-><init>(Ljava/io/File;Z)V+]Ljava/io/File;Ljava/io/File;]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
@@ -23642,15 +23657,15 @@
 HSPLjava/io/FileWriter;-><init>(Ljava/io/File;)V
 HSPLjava/io/FileWriter;-><init>(Ljava/io/File;Z)V
 HSPLjava/io/FilterInputStream;-><init>(Ljava/io/InputStream;)V
-HSPLjava/io/FilterInputStream;->available()I
+HSPLjava/io/FilterInputStream;->available()I+]Ljava/io/InputStream;Ljava/io/FileInputStream;
 HSPLjava/io/FilterInputStream;->close()V
 HSPLjava/io/FilterInputStream;->mark(I)V
 HSPLjava/io/FilterInputStream;->markSupported()Z
-HSPLjava/io/FilterInputStream;->read()I+]Ljava/io/InputStream;Ljava/io/BufferedInputStream;,Ljava/io/ByteArrayInputStream;,Ljava/util/jar/JarVerifier$VerifierStream;,Ljava/io/PushbackInputStream;,Ljava/util/zip/InflaterInputStream;
-HSPLjava/io/FilterInputStream;->read([B)I+]Ljava/io/FilterInputStream;Ljava/security/DigestInputStream;,Ljava/util/zip/InflaterInputStream;
-HSPLjava/io/FilterInputStream;->read([BII)I+]Ljava/io/InputStream;Ljava/io/BufferedInputStream;
+HSPLjava/io/FilterInputStream;->read()I+]Ljava/io/InputStream;megamorphic_types
+HSPLjava/io/FilterInputStream;->read([B)I+]Ljava/io/FilterInputStream;Ljava/util/zip/InflaterInputStream;,Ljava/util/zip/ZipInputStream;,Ljava/security/DigestInputStream;
+HSPLjava/io/FilterInputStream;->read([BII)I+]Ljava/io/InputStream;missing_types
 HSPLjava/io/FilterInputStream;->reset()V
-HSPLjava/io/FilterInputStream;->skip(J)J
+HSPLjava/io/FilterInputStream;->skip(J)J+]Ljava/io/InputStream;Ljava/io/BufferedInputStream;,Ljava/io/ByteArrayInputStream;
 HSPLjava/io/FilterOutputStream;-><init>(Ljava/io/OutputStream;)V
 HSPLjava/io/FilterOutputStream;->close()V
 HSPLjava/io/FilterOutputStream;->flush()V
@@ -23665,7 +23680,7 @@
 HSPLjava/io/InputStream;->available()I
 HSPLjava/io/InputStream;->close()V
 HSPLjava/io/InputStream;->markSupported()Z
-HSPLjava/io/InputStream;->read([B)I
+HSPLjava/io/InputStream;->read([B)I+]Ljava/io/InputStream;missing_types
 HSPLjava/io/InputStream;->read([BII)I
 HSPLjava/io/InputStreamReader;-><init>(Ljava/io/InputStream;)V
 HSPLjava/io/InputStreamReader;-><init>(Ljava/io/InputStream;Ljava/lang/String;)V
@@ -23690,15 +23705,15 @@
 HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readBoolean()Z
 HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readByte()B+]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;
 HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readFloat()F
-HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readFully([BIIZ)V
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readFully([BIIZ)V+]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;
 HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readInt()I+]Ljava/io/ObjectInputStream$PeekInputStream;Ljava/io/ObjectInputStream$PeekInputStream;]Ljava/io/DataInputStream;Ljava/io/DataInputStream;
 HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readLong()J+]Ljava/io/ObjectInputStream$PeekInputStream;Ljava/io/ObjectInputStream$PeekInputStream;
 HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readShort()S+]Ljava/io/ObjectInputStream$PeekInputStream;Ljava/io/ObjectInputStream$PeekInputStream;
-HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readUTF()Ljava/lang/String;
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readUTF()Ljava/lang/String;+]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;
 HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readUTFBody(J)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/io/ObjectInputStream$PeekInputStream;Ljava/io/ObjectInputStream$PeekInputStream;
 HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readUTFChar(Ljava/lang/StringBuilder;J)I
 HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readUTFSpan(Ljava/lang/StringBuilder;J)J+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readUnsignedShort()I+]Ljava/io/ObjectInputStream$PeekInputStream;Ljava/io/ObjectInputStream$PeekInputStream;
+HSPLjava/io/ObjectInputStream$BlockDataInputStream;->readUnsignedShort()I+]Ljava/io/ObjectInputStream$PeekInputStream;Ljava/io/ObjectInputStream$PeekInputStream;]Ljava/io/DataInputStream;Ljava/io/DataInputStream;
 HSPLjava/io/ObjectInputStream$BlockDataInputStream;->refill()V+]Ljava/io/ObjectInputStream$PeekInputStream;Ljava/io/ObjectInputStream$PeekInputStream;
 HSPLjava/io/ObjectInputStream$BlockDataInputStream;->setBlockDataMode(Z)Z
 HSPLjava/io/ObjectInputStream$BlockDataInputStream;->skipBlockData()V
@@ -23719,39 +23734,39 @@
 HSPLjava/io/ObjectInputStream$HandleTable;->grow()V
 HSPLjava/io/ObjectInputStream$HandleTable;->lookupException(I)Ljava/lang/ClassNotFoundException;
 HSPLjava/io/ObjectInputStream$HandleTable;->lookupObject(I)Ljava/lang/Object;
-HSPLjava/io/ObjectInputStream$HandleTable;->markDependency(II)V
+HSPLjava/io/ObjectInputStream$HandleTable;->markDependency(II)V+]Ljava/io/ObjectInputStream$HandleTable$HandleList;Ljava/io/ObjectInputStream$HandleTable$HandleList;
 HSPLjava/io/ObjectInputStream$HandleTable;->setObject(ILjava/lang/Object;)V
 HSPLjava/io/ObjectInputStream$HandleTable;->size()I
 HSPLjava/io/ObjectInputStream$PeekInputStream;-><init>(Ljava/io/InputStream;)V
 HSPLjava/io/ObjectInputStream$PeekInputStream;->close()V
-HSPLjava/io/ObjectInputStream$PeekInputStream;->peek()I+]Ljava/io/InputStream;Ljava/io/ByteArrayInputStream;
-HSPLjava/io/ObjectInputStream$PeekInputStream;->read()I+]Ljava/io/InputStream;Ljava/io/ByteArrayInputStream;
-HSPLjava/io/ObjectInputStream$PeekInputStream;->read([BII)I+]Ljava/io/InputStream;Ljava/io/ByteArrayInputStream;
+HSPLjava/io/ObjectInputStream$PeekInputStream;->peek()I+]Ljava/io/InputStream;Ljava/io/ByteArrayInputStream;,Llibcore/io/ClassPathURLStreamHandler$ClassPathURLConnection$1;,Ljava/io/BufferedInputStream;
+HSPLjava/io/ObjectInputStream$PeekInputStream;->read()I+]Ljava/io/InputStream;Ljava/io/ByteArrayInputStream;,Ljava/io/BufferedInputStream;
+HSPLjava/io/ObjectInputStream$PeekInputStream;->read([BII)I+]Ljava/io/InputStream;Ljava/io/ByteArrayInputStream;,Llibcore/io/ClassPathURLStreamHandler$ClassPathURLConnection$1;,Ljava/io/BufferedInputStream;
 HSPLjava/io/ObjectInputStream$PeekInputStream;->readFully([BII)V+]Ljava/io/ObjectInputStream$PeekInputStream;Ljava/io/ObjectInputStream$PeekInputStream;
 HSPLjava/io/ObjectInputStream$ValidationList;-><init>()V
 HSPLjava/io/ObjectInputStream$ValidationList;->clear()V
 HSPLjava/io/ObjectInputStream$ValidationList;->doCallbacks()V
 HSPLjava/io/ObjectInputStream;-><init>(Ljava/io/InputStream;)V+]Ljava/io/ObjectInputStream;Ljava/io/ObjectInputStream;,Landroid/os/Parcel$2;]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;
 HSPLjava/io/ObjectInputStream;->checkResolve(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/io/ObjectInputStream;->clear()V
+HSPLjava/io/ObjectInputStream;->clear()V+]Ljava/io/ObjectInputStream$ValidationList;Ljava/io/ObjectInputStream$ValidationList;]Ljava/io/ObjectInputStream$HandleTable;Ljava/io/ObjectInputStream$HandleTable;
 HSPLjava/io/ObjectInputStream;->close()V+]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;
-HSPLjava/io/ObjectInputStream;->defaultReadFields(Ljava/lang/Object;Ljava/io/ObjectStreamClass;)V
-HSPLjava/io/ObjectInputStream;->defaultReadObject()V
-HSPLjava/io/ObjectInputStream;->isCustomSubclass()Z
+HSPLjava/io/ObjectInputStream;->defaultReadFields(Ljava/lang/Object;Ljava/io/ObjectStreamClass;)V+]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;]Ljava/io/ObjectStreamClass;Ljava/io/ObjectStreamClass;]Ljava/io/ObjectStreamField;Ljava/io/ObjectStreamField;]Ljava/io/ObjectInputStream$HandleTable;Ljava/io/ObjectInputStream$HandleTable;]Ljava/lang/Class;Ljava/lang/Class;
+HSPLjava/io/ObjectInputStream;->defaultReadObject()V+]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;]Ljava/io/ObjectStreamClass;Ljava/io/ObjectStreamClass;]Ljava/io/ObjectInputStream$HandleTable;Ljava/io/ObjectInputStream$HandleTable;]Ljava/io/SerialCallbackContext;Ljava/io/SerialCallbackContext;
+HSPLjava/io/ObjectInputStream;->isCustomSubclass()Z+]Ljava/lang/Object;Landroid/os/Parcel$2;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/io/ObjectInputStream;->latestUserDefinedLoader()Ljava/lang/ClassLoader;
-HSPLjava/io/ObjectInputStream;->readArray(Z)Ljava/lang/Object;
+HSPLjava/io/ObjectInputStream;->readArray(Z)Ljava/lang/Object;+]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;]Ljava/io/ObjectStreamClass;Ljava/io/ObjectStreamClass;]Ljava/io/ObjectInputStream$HandleTable;Ljava/io/ObjectInputStream$HandleTable;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/io/ObjectInputStream;->readBoolean()Z
-HSPLjava/io/ObjectInputStream;->readByte()B
+HSPLjava/io/ObjectInputStream;->readByte()B+]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;
 HSPLjava/io/ObjectInputStream;->readClassDesc(Z)Ljava/io/ObjectStreamClass;+]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;
-HSPLjava/io/ObjectInputStream;->readClassDescriptor()Ljava/io/ObjectStreamClass;
+HSPLjava/io/ObjectInputStream;->readClassDescriptor()Ljava/io/ObjectStreamClass;+]Ljava/io/ObjectStreamClass;Ljava/io/ObjectStreamClass;
 HSPLjava/io/ObjectInputStream;->readEnum(Z)Ljava/lang/Enum;
 HSPLjava/io/ObjectInputStream;->readFields()Ljava/io/ObjectInputStream$GetField;+]Ljava/io/ObjectInputStream$GetFieldImpl;Ljava/io/ObjectInputStream$GetFieldImpl;]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;]Ljava/io/ObjectStreamClass;Ljava/io/ObjectStreamClass;]Ljava/io/SerialCallbackContext;Ljava/io/SerialCallbackContext;
 HSPLjava/io/ObjectInputStream;->readFloat()F
 HSPLjava/io/ObjectInputStream;->readHandle(Z)Ljava/lang/Object;+]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;]Ljava/io/ObjectInputStream$HandleTable;Ljava/io/ObjectInputStream$HandleTable;
-HSPLjava/io/ObjectInputStream;->readInt()I
+HSPLjava/io/ObjectInputStream;->readInt()I+]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;
 HSPLjava/io/ObjectInputStream;->readLong()J
-HSPLjava/io/ObjectInputStream;->readNonProxyDesc(Z)Ljava/io/ObjectStreamClass;+]Ljava/io/ObjectInputStream;Landroid/os/Parcel$2;]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;]Ljava/io/ObjectStreamClass;Ljava/io/ObjectStreamClass;]Ljava/io/ObjectInputStream$HandleTable;Ljava/io/ObjectInputStream$HandleTable;
-HSPLjava/io/ObjectInputStream;->readNull()Ljava/lang/Object;
+HSPLjava/io/ObjectInputStream;->readNonProxyDesc(Z)Ljava/io/ObjectStreamClass;+]Ljava/io/ObjectInputStream;Landroid/os/Parcel$2;,Ljava/io/ObjectInputStream;]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;]Ljava/io/ObjectStreamClass;Ljava/io/ObjectStreamClass;]Ljava/io/ObjectInputStream$HandleTable;Ljava/io/ObjectInputStream$HandleTable;
+HSPLjava/io/ObjectInputStream;->readNull()Ljava/lang/Object;+]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;
 HSPLjava/io/ObjectInputStream;->readObject()Ljava/lang/Object;+]Ljava/io/ObjectInputStream$ValidationList;Ljava/io/ObjectInputStream$ValidationList;]Ljava/io/ObjectInputStream$HandleTable;Ljava/io/ObjectInputStream$HandleTable;
 HSPLjava/io/ObjectInputStream;->readObject0(Z)Ljava/lang/Object;+]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;
 HSPLjava/io/ObjectInputStream;->readOrdinaryObject(Z)Ljava/lang/Object;+]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;]Ljava/io/ObjectStreamClass;Ljava/io/ObjectStreamClass;]Ljava/io/ObjectInputStream$HandleTable;Ljava/io/ObjectInputStream$HandleTable;
@@ -23760,19 +23775,19 @@
 HSPLjava/io/ObjectInputStream;->readStreamHeader()V+]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;
 HSPLjava/io/ObjectInputStream;->readString(Z)Ljava/lang/String;+]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;]Ljava/io/ObjectInputStream$HandleTable;Ljava/io/ObjectInputStream$HandleTable;
 HSPLjava/io/ObjectInputStream;->readTypeString()Ljava/lang/String;+]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;
-HSPLjava/io/ObjectInputStream;->readUTF()Ljava/lang/String;
+HSPLjava/io/ObjectInputStream;->readUTF()Ljava/lang/String;+]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;
 HSPLjava/io/ObjectInputStream;->resolveClass(Ljava/io/ObjectStreamClass;)Ljava/lang/Class;
 HSPLjava/io/ObjectInputStream;->skipCustomData()V+]Ljava/io/ObjectInputStream$BlockDataInputStream;Ljava/io/ObjectInputStream$BlockDataInputStream;
 HSPLjava/io/ObjectInputStream;->verifySubclass()V
 HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;-><init>(Ljava/io/OutputStream;)V
-HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->close()V
+HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->close()V+]Ljava/io/OutputStream;Ljava/io/ByteArrayOutputStream;]Ljava/io/ObjectOutputStream$BlockDataOutputStream;Ljava/io/ObjectOutputStream$BlockDataOutputStream;
 HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->drain()V+]Ljava/io/OutputStream;Ljava/io/ByteArrayOutputStream;
-HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->flush()V
+HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->flush()V+]Ljava/io/OutputStream;Ljava/io/ByteArrayOutputStream;]Ljava/io/ObjectOutputStream$BlockDataOutputStream;Ljava/io/ObjectOutputStream$BlockDataOutputStream;
 HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->getUTFLength(Ljava/lang/String;)J+]Ljava/lang/String;Ljava/lang/String;
-HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->setBlockDataMode(Z)Z
+HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->setBlockDataMode(Z)Z+]Ljava/io/ObjectOutputStream$BlockDataOutputStream;Ljava/io/ObjectOutputStream$BlockDataOutputStream;
 HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->warnIfClosed()V
-HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->write([BIIZ)V
-HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->writeBlockHeader(I)V
+HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->write([BIIZ)V+]Ljava/io/OutputStream;Ljava/io/ByteArrayOutputStream;]Ljava/io/ObjectOutputStream$BlockDataOutputStream;Ljava/io/ObjectOutputStream$BlockDataOutputStream;
+HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->writeBlockHeader(I)V+]Ljava/io/OutputStream;Ljava/io/ByteArrayOutputStream;
 HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->writeByte(I)V
 HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->writeBytes(Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/io/ObjectOutputStream$BlockDataOutputStream;Ljava/io/ObjectOutputStream$BlockDataOutputStream;
 HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->writeFloat(F)V
@@ -23781,7 +23796,7 @@
 HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->writeShort(I)V
 HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->writeUTF(Ljava/lang/String;)V
 HSPLjava/io/ObjectOutputStream$BlockDataOutputStream;->writeUTF(Ljava/lang/String;J)V+]Ljava/io/ObjectOutputStream$BlockDataOutputStream;Ljava/io/ObjectOutputStream$BlockDataOutputStream;
-HSPLjava/io/ObjectOutputStream$HandleTable;-><init>(IF)V
+HSPLjava/io/ObjectOutputStream$HandleTable;-><init>(IF)V+]Ljava/io/ObjectOutputStream$HandleTable;Ljava/io/ObjectOutputStream$HandleTable;
 HSPLjava/io/ObjectOutputStream$HandleTable;->assign(Ljava/lang/Object;)I
 HSPLjava/io/ObjectOutputStream$HandleTable;->clear()V
 HSPLjava/io/ObjectOutputStream$HandleTable;->growEntries()V
@@ -23801,9 +23816,9 @@
 HSPLjava/io/ObjectOutputStream$ReplaceTable;-><init>(IF)V
 HSPLjava/io/ObjectOutputStream$ReplaceTable;->assign(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLjava/io/ObjectOutputStream$ReplaceTable;->lookup(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/io/ObjectOutputStream;-><init>(Ljava/io/OutputStream;)V
+HSPLjava/io/ObjectOutputStream;-><init>(Ljava/io/OutputStream;)V+]Ljava/io/ObjectOutputStream;Ljava/io/ObjectOutputStream;]Ljava/io/ObjectOutputStream$BlockDataOutputStream;Ljava/io/ObjectOutputStream$BlockDataOutputStream;
 HSPLjava/io/ObjectOutputStream;->annotateClass(Ljava/lang/Class;)V
-HSPLjava/io/ObjectOutputStream;->close()V
+HSPLjava/io/ObjectOutputStream;->close()V+]Ljava/io/ObjectOutputStream;Ljava/io/ObjectOutputStream;]Ljava/io/ObjectOutputStream$BlockDataOutputStream;Ljava/io/ObjectOutputStream$BlockDataOutputStream;
 HSPLjava/io/ObjectOutputStream;->defaultWriteFields(Ljava/lang/Object;Ljava/io/ObjectStreamClass;)V+]Ljava/io/ObjectStreamClass;Ljava/io/ObjectStreamClass;]Ljava/io/ObjectStreamField;Ljava/io/ObjectStreamField;]Ljava/io/ObjectOutputStream$BlockDataOutputStream;Ljava/io/ObjectOutputStream$BlockDataOutputStream;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/io/ObjectOutputStream;->defaultWriteObject()V
 HSPLjava/io/ObjectOutputStream;->flush()V
@@ -23812,22 +23827,22 @@
 HSPLjava/io/ObjectOutputStream;->verifySubclass()V
 HSPLjava/io/ObjectOutputStream;->writeArray(Ljava/lang/Object;Ljava/io/ObjectStreamClass;Z)V
 HSPLjava/io/ObjectOutputStream;->writeByte(I)V
-HSPLjava/io/ObjectOutputStream;->writeClassDesc(Ljava/io/ObjectStreamClass;Z)V
+HSPLjava/io/ObjectOutputStream;->writeClassDesc(Ljava/io/ObjectStreamClass;Z)V+]Ljava/io/ObjectOutputStream$HandleTable;Ljava/io/ObjectOutputStream$HandleTable;]Ljava/io/ObjectStreamClass;Ljava/io/ObjectStreamClass;
 HSPLjava/io/ObjectOutputStream;->writeClassDescriptor(Ljava/io/ObjectStreamClass;)V
 HSPLjava/io/ObjectOutputStream;->writeEnum(Ljava/lang/Enum;Ljava/io/ObjectStreamClass;Z)V
 HSPLjava/io/ObjectOutputStream;->writeFields()V
 HSPLjava/io/ObjectOutputStream;->writeFloat(F)V
-HSPLjava/io/ObjectOutputStream;->writeHandle(I)V
+HSPLjava/io/ObjectOutputStream;->writeHandle(I)V+]Ljava/io/ObjectOutputStream$BlockDataOutputStream;Ljava/io/ObjectOutputStream$BlockDataOutputStream;
 HSPLjava/io/ObjectOutputStream;->writeInt(I)V
 HSPLjava/io/ObjectOutputStream;->writeLong(J)V
-HSPLjava/io/ObjectOutputStream;->writeNonProxyDesc(Ljava/io/ObjectStreamClass;Z)V
+HSPLjava/io/ObjectOutputStream;->writeNonProxyDesc(Ljava/io/ObjectStreamClass;Z)V+]Ljava/io/ObjectOutputStream;Ljava/io/ObjectOutputStream;]Ljava/io/ObjectOutputStream$HandleTable;Ljava/io/ObjectOutputStream$HandleTable;]Ljava/io/ObjectStreamClass;Ljava/io/ObjectStreamClass;]Ljava/io/ObjectOutputStream$BlockDataOutputStream;Ljava/io/ObjectOutputStream$BlockDataOutputStream;
 HSPLjava/io/ObjectOutputStream;->writeNull()V
 HSPLjava/io/ObjectOutputStream;->writeObject(Ljava/lang/Object;)V
 HSPLjava/io/ObjectOutputStream;->writeObject0(Ljava/lang/Object;Z)V+]Ljava/io/ObjectOutputStream$ReplaceTable;Ljava/io/ObjectOutputStream$ReplaceTable;]Ljava/lang/Object;megamorphic_types]Ljava/io/ObjectOutputStream$HandleTable;Ljava/io/ObjectOutputStream$HandleTable;]Ljava/io/ObjectStreamClass;Ljava/io/ObjectStreamClass;]Ljava/io/ObjectOutputStream$BlockDataOutputStream;Ljava/io/ObjectOutputStream$BlockDataOutputStream;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/io/ObjectOutputStream;->writeOrdinaryObject(Ljava/lang/Object;Ljava/io/ObjectStreamClass;Z)V+]Ljava/io/ObjectOutputStream$HandleTable;Ljava/io/ObjectOutputStream$HandleTable;]Ljava/io/ObjectStreamClass;Ljava/io/ObjectStreamClass;]Ljava/io/ObjectOutputStream$BlockDataOutputStream;Ljava/io/ObjectOutputStream$BlockDataOutputStream;
-HSPLjava/io/ObjectOutputStream;->writeSerialData(Ljava/lang/Object;Ljava/io/ObjectStreamClass;)V
+HSPLjava/io/ObjectOutputStream;->writeSerialData(Ljava/lang/Object;Ljava/io/ObjectStreamClass;)V+]Ljava/io/ObjectStreamClass;Ljava/io/ObjectStreamClass;]Ljava/io/ObjectOutputStream$BlockDataOutputStream;Ljava/io/ObjectOutputStream$BlockDataOutputStream;]Ljava/io/SerialCallbackContext;Ljava/io/SerialCallbackContext;
 HSPLjava/io/ObjectOutputStream;->writeShort(I)V
-HSPLjava/io/ObjectOutputStream;->writeStreamHeader()V
+HSPLjava/io/ObjectOutputStream;->writeStreamHeader()V+]Ljava/io/ObjectOutputStream$BlockDataOutputStream;Ljava/io/ObjectOutputStream$BlockDataOutputStream;
 HSPLjava/io/ObjectOutputStream;->writeString(Ljava/lang/String;Z)V+]Ljava/io/ObjectOutputStream$HandleTable;Ljava/io/ObjectOutputStream$HandleTable;]Ljava/io/ObjectOutputStream$BlockDataOutputStream;Ljava/io/ObjectOutputStream$BlockDataOutputStream;
 HSPLjava/io/ObjectOutputStream;->writeTypeString(Ljava/lang/String;)V
 HSPLjava/io/ObjectOutputStream;->writeUTF(Ljava/lang/String;)V
@@ -23858,17 +23873,17 @@
 HSPLjava/io/ObjectStreamClass$FieldReflector;-><init>([Ljava/io/ObjectStreamField;)V
 HSPLjava/io/ObjectStreamClass$FieldReflector;->getFields()[Ljava/io/ObjectStreamField;
 HSPLjava/io/ObjectStreamClass$FieldReflector;->getObjFieldValues(Ljava/lang/Object;[Ljava/lang/Object;)V
-HSPLjava/io/ObjectStreamClass$FieldReflector;->getPrimFieldValues(Ljava/lang/Object;[B)V
-HSPLjava/io/ObjectStreamClass$FieldReflector;->setObjFieldValues(Ljava/lang/Object;[Ljava/lang/Object;)V
-HSPLjava/io/ObjectStreamClass$FieldReflector;->setPrimFieldValues(Ljava/lang/Object;[B)V
-HSPLjava/io/ObjectStreamClass$FieldReflectorKey;-><init>(Ljava/lang/Class;[Ljava/io/ObjectStreamField;Ljava/lang/ref/ReferenceQueue;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;]Ljava/io/ObjectStreamField;Ljava/io/ObjectStreamField;
+HSPLjava/io/ObjectStreamClass$FieldReflector;->getPrimFieldValues(Ljava/lang/Object;[B)V+]Lsun/misc/Unsafe;Lsun/misc/Unsafe;
+HSPLjava/io/ObjectStreamClass$FieldReflector;->setObjFieldValues(Ljava/lang/Object;[Ljava/lang/Object;)V+]Ljava/lang/Class;Ljava/lang/Class;
+HSPLjava/io/ObjectStreamClass$FieldReflector;->setPrimFieldValues(Ljava/lang/Object;[B)V+]Lsun/misc/Unsafe;Lsun/misc/Unsafe;
+HSPLjava/io/ObjectStreamClass$FieldReflectorKey;-><init>(Ljava/lang/Class;[Ljava/io/ObjectStreamField;Ljava/lang/ref/ReferenceQueue;)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/io/ObjectStreamField;Ljava/io/ObjectStreamField;
 HSPLjava/io/ObjectStreamClass$FieldReflectorKey;->equals(Ljava/lang/Object;)Z+]Ljava/io/ObjectStreamClass$FieldReflectorKey;Ljava/io/ObjectStreamClass$FieldReflectorKey;
 HSPLjava/io/ObjectStreamClass$FieldReflectorKey;->hashCode()I
 HSPLjava/io/ObjectStreamClass$MemberSignature;-><init>(Ljava/lang/reflect/Constructor;)V
 HSPLjava/io/ObjectStreamClass$MemberSignature;-><init>(Ljava/lang/reflect/Field;)V
 HSPLjava/io/ObjectStreamClass$MemberSignature;-><init>(Ljava/lang/reflect/Method;)V
 HSPLjava/io/ObjectStreamClass$WeakClassKey;-><init>(Ljava/lang/Class;Ljava/lang/ref/ReferenceQueue;)V
-HSPLjava/io/ObjectStreamClass$WeakClassKey;->equals(Ljava/lang/Object;)Z
+HSPLjava/io/ObjectStreamClass$WeakClassKey;->equals(Ljava/lang/Object;)Z+]Ljava/io/ObjectStreamClass$WeakClassKey;Ljava/io/ObjectStreamClass$WeakClassKey;
 HSPLjava/io/ObjectStreamClass$WeakClassKey;->hashCode()I
 HSPLjava/io/ObjectStreamClass;->-$$Nest$fgetexternalizable(Ljava/io/ObjectStreamClass;)Z
 HSPLjava/io/ObjectStreamClass;->-$$Nest$fgetisEnum(Ljava/io/ObjectStreamClass;)Z
@@ -23893,12 +23908,12 @@
 HSPLjava/io/ObjectStreamClass;->checkDefaultSerialize()V
 HSPLjava/io/ObjectStreamClass;->checkDeserialize()V
 HSPLjava/io/ObjectStreamClass;->checkSerialize()V
-HSPLjava/io/ObjectStreamClass;->classNamesEqual(Ljava/lang/String;Ljava/lang/String;)Z
+HSPLjava/io/ObjectStreamClass;->classNamesEqual(Ljava/lang/String;Ljava/lang/String;)Z+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/io/ObjectStreamClass;->computeDefaultSUID(Ljava/lang/Class;)J
 HSPLjava/io/ObjectStreamClass;->computeFieldOffsets()V+]Ljava/io/ObjectStreamField;Ljava/io/ObjectStreamField;
 HSPLjava/io/ObjectStreamClass;->forClass()Ljava/lang/Class;
 HSPLjava/io/ObjectStreamClass;->getClassDataLayout()[Ljava/io/ObjectStreamClass$ClassDataSlot;
-HSPLjava/io/ObjectStreamClass;->getClassDataLayout0()[Ljava/io/ObjectStreamClass$ClassDataSlot;+]Ljava/util/HashSet;Ljava/util/HashSet;]Ljava/lang/Class;Ljava/lang/Class;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLjava/io/ObjectStreamClass;->getClassDataLayout0()[Ljava/io/ObjectStreamClass$ClassDataSlot;+]Ljava/util/HashSet;Ljava/util/HashSet;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/io/ObjectStreamClass;->getClassSignature(Ljava/lang/Class;)Ljava/lang/String;
 HSPLjava/io/ObjectStreamClass;->getDeclaredSUID(Ljava/lang/Class;)Ljava/lang/Long;
 HSPLjava/io/ObjectStreamClass;->getDeclaredSerialFields(Ljava/lang/Class;)[Ljava/io/ObjectStreamField;
@@ -23917,7 +23932,7 @@
 HSPLjava/io/ObjectStreamClass;->getReflector([Ljava/io/ObjectStreamField;Ljava/io/ObjectStreamClass;)Ljava/io/ObjectStreamClass$FieldReflector;+]Ljava/lang/ref/Reference;Ljava/lang/ref/SoftReference;]Ljava/util/concurrent/ConcurrentMap;Ljava/util/concurrent/ConcurrentHashMap;]Ljava/io/ObjectStreamClass$EntryFuture;Ljava/io/ObjectStreamClass$EntryFuture;
 HSPLjava/io/ObjectStreamClass;->getResolveException()Ljava/lang/ClassNotFoundException;
 HSPLjava/io/ObjectStreamClass;->getSerialFields(Ljava/lang/Class;)[Ljava/io/ObjectStreamField;
-HSPLjava/io/ObjectStreamClass;->getSerialVersionUID()J
+HSPLjava/io/ObjectStreamClass;->getSerialVersionUID()J+]Ljava/lang/Long;Ljava/lang/Long;
 HSPLjava/io/ObjectStreamClass;->getSerializableConstructor(Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
 HSPLjava/io/ObjectStreamClass;->getSuperDesc()Ljava/io/ObjectStreamClass;
 HSPLjava/io/ObjectStreamClass;->getVariantFor(Ljava/lang/Class;)Ljava/io/ObjectStreamClass;
@@ -23926,8 +23941,8 @@
 HSPLjava/io/ObjectStreamClass;->hasWriteObjectData()Z
 HSPLjava/io/ObjectStreamClass;->hasWriteObjectMethod()Z
 HSPLjava/io/ObjectStreamClass;->hasWriteReplaceMethod()Z
-HSPLjava/io/ObjectStreamClass;->initNonProxy(Ljava/io/ObjectStreamClass;Ljava/lang/Class;Ljava/lang/ClassNotFoundException;Ljava/io/ObjectStreamClass;)V+]Ljava/io/ObjectStreamClass;Ljava/io/ObjectStreamClass;]Ljava/io/ObjectStreamClass$FieldReflector;Ljava/io/ObjectStreamClass$FieldReflector;]Ljava/lang/Long;Ljava/lang/Long;]Ljava/lang/Class;Ljava/lang/Class;
-HSPLjava/io/ObjectStreamClass;->invokeReadObject(Ljava/lang/Object;Ljava/io/ObjectInputStream;)V
+HSPLjava/io/ObjectStreamClass;->initNonProxy(Ljava/io/ObjectStreamClass;Ljava/lang/Class;Ljava/lang/ClassNotFoundException;Ljava/io/ObjectStreamClass;)V+]Ljava/io/ObjectStreamClass$FieldReflector;Ljava/io/ObjectStreamClass$FieldReflector;]Ljava/io/ObjectStreamClass;Ljava/io/ObjectStreamClass;]Ljava/lang/Long;Ljava/lang/Long;]Ljava/lang/Class;Ljava/lang/Class;
+HSPLjava/io/ObjectStreamClass;->invokeReadObject(Ljava/lang/Object;Ljava/io/ObjectInputStream;)V+]Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;
 HSPLjava/io/ObjectStreamClass;->invokeReadResolve(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/io/ObjectStreamClass;->invokeWriteObject(Ljava/lang/Object;Ljava/io/ObjectOutputStream;)V
 HSPLjava/io/ObjectStreamClass;->invokeWriteReplace(Ljava/lang/Object;)Ljava/lang/Object;
@@ -23937,14 +23952,14 @@
 HSPLjava/io/ObjectStreamClass;->isProxy()Z
 HSPLjava/io/ObjectStreamClass;->lookup(Ljava/lang/Class;Z)Ljava/io/ObjectStreamClass;+]Ljava/lang/ref/Reference;Ljava/lang/ref/SoftReference;]Ljava/util/concurrent/ConcurrentMap;Ljava/util/concurrent/ConcurrentHashMap;]Ljava/io/ObjectStreamClass$EntryFuture;Ljava/io/ObjectStreamClass$EntryFuture;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/io/ObjectStreamClass;->matchFields([Ljava/io/ObjectStreamField;Ljava/io/ObjectStreamClass;)[Ljava/io/ObjectStreamField;
-HSPLjava/io/ObjectStreamClass;->newInstance()Ljava/lang/Object;
+HSPLjava/io/ObjectStreamClass;->newInstance()Ljava/lang/Object;+]Ljava/lang/reflect/Constructor;Ljava/lang/reflect/Constructor;
 HSPLjava/io/ObjectStreamClass;->packageEquals(Ljava/lang/Class;Ljava/lang/Class;)Z
-HSPLjava/io/ObjectStreamClass;->processQueue(Ljava/lang/ref/ReferenceQueue;Ljava/util/concurrent/ConcurrentMap;)V
-HSPLjava/io/ObjectStreamClass;->readNonProxy(Ljava/io/ObjectInputStream;)V+]Ljava/io/ObjectInputStream;Landroid/os/Parcel$2;
+HSPLjava/io/ObjectStreamClass;->processQueue(Ljava/lang/ref/ReferenceQueue;Ljava/util/concurrent/ConcurrentMap;)V+]Ljava/lang/ref/ReferenceQueue;Ljava/lang/ref/ReferenceQueue;
+HSPLjava/io/ObjectStreamClass;->readNonProxy(Ljava/io/ObjectInputStream;)V+]Ljava/io/ObjectInputStream;Landroid/os/Parcel$2;,Ljava/io/ObjectInputStream;
 HSPLjava/io/ObjectStreamClass;->requireInitialized()V
-HSPLjava/io/ObjectStreamClass;->setObjFieldValues(Ljava/lang/Object;[Ljava/lang/Object;)V
+HSPLjava/io/ObjectStreamClass;->setObjFieldValues(Ljava/lang/Object;[Ljava/lang/Object;)V+]Ljava/io/ObjectStreamClass$FieldReflector;Ljava/io/ObjectStreamClass$FieldReflector;
 HSPLjava/io/ObjectStreamClass;->setPrimFieldValues(Ljava/lang/Object;[B)V
-HSPLjava/io/ObjectStreamClass;->writeNonProxy(Ljava/io/ObjectOutputStream;)V
+HSPLjava/io/ObjectStreamClass;->writeNonProxy(Ljava/io/ObjectOutputStream;)V+]Ljava/io/ObjectOutputStream;Ljava/io/ObjectOutputStream;]Ljava/io/ObjectStreamClass;Ljava/io/ObjectStreamClass;]Ljava/io/ObjectStreamField;Ljava/io/ObjectStreamField;
 HSPLjava/io/ObjectStreamField;-><init>(Ljava/lang/String;Ljava/lang/Class;)V
 HSPLjava/io/ObjectStreamField;-><init>(Ljava/lang/String;Ljava/lang/Class;Z)V
 HSPLjava/io/ObjectStreamField;-><init>(Ljava/lang/String;Ljava/lang/String;Z)V+]Ljava/lang/String;Ljava/lang/String;
@@ -23964,14 +23979,14 @@
 HSPLjava/io/OutputStream;-><init>()V
 HSPLjava/io/OutputStream;->close()V
 HSPLjava/io/OutputStream;->flush()V
-HSPLjava/io/OutputStream;->write([B)V
+HSPLjava/io/OutputStream;->write([B)V+]Ljava/io/OutputStream;Lsun/security/util/DerOutputStream;
 HSPLjava/io/OutputStreamWriter;-><init>(Ljava/io/OutputStream;)V
 HSPLjava/io/OutputStreamWriter;-><init>(Ljava/io/OutputStream;Ljava/lang/String;)V
 HSPLjava/io/OutputStreamWriter;-><init>(Ljava/io/OutputStream;Ljava/nio/charset/Charset;)V
 HSPLjava/io/OutputStreamWriter;->close()V
 HSPLjava/io/OutputStreamWriter;->flush()V
 HSPLjava/io/OutputStreamWriter;->write(I)V
-HSPLjava/io/OutputStreamWriter;->write(Ljava/lang/String;II)V
+HSPLjava/io/OutputStreamWriter;->write(Ljava/lang/String;II)V+]Lsun/nio/cs/StreamEncoder;Lsun/nio/cs/StreamEncoder;
 HSPLjava/io/OutputStreamWriter;->write([CII)V
 HSPLjava/io/PrintStream;-><init>(Ljava/io/OutputStream;)V
 HSPLjava/io/PrintStream;-><init>(Ljava/io/OutputStream;Z)V
@@ -23984,28 +23999,28 @@
 HSPLjava/io/PrintWriter;-><init>(Ljava/io/OutputStream;Z)V
 HSPLjava/io/PrintWriter;-><init>(Ljava/io/Writer;)V
 HSPLjava/io/PrintWriter;-><init>(Ljava/io/Writer;Z)V
-HSPLjava/io/PrintWriter;->append(C)Ljava/io/PrintWriter;
-HSPLjava/io/PrintWriter;->append(Ljava/lang/CharSequence;)Ljava/io/PrintWriter;
-HSPLjava/io/PrintWriter;->append(Ljava/lang/CharSequence;)Ljava/lang/Appendable;
+HSPLjava/io/PrintWriter;->append(C)Ljava/io/PrintWriter;+]Ljava/io/PrintWriter;Lcom/android/internal/util/FastPrintWriter;
+HSPLjava/io/PrintWriter;->append(Ljava/lang/CharSequence;)Ljava/io/PrintWriter;+]Ljava/io/PrintWriter;Ljava/io/PrintWriter;,Lcom/android/internal/util/FastPrintWriter;
+HSPLjava/io/PrintWriter;->append(Ljava/lang/CharSequence;)Ljava/lang/Appendable;+]Ljava/io/PrintWriter;Ljava/io/PrintWriter;
 HSPLjava/io/PrintWriter;->close()V
 HSPLjava/io/PrintWriter;->ensureOpen()V
-HSPLjava/io/PrintWriter;->flush()V
-HSPLjava/io/PrintWriter;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintWriter;
-HSPLjava/io/PrintWriter;->newLine()V+]Ljava/io/Writer;Ljava/io/StringWriter;
+HSPLjava/io/PrintWriter;->flush()V+]Ljava/io/Writer;Landroid/util/Log$ImmediateLogWriter;
+HSPLjava/io/PrintWriter;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintWriter;+]Ljava/util/Formatter;Ljava/util/Formatter;
+HSPLjava/io/PrintWriter;->newLine()V+]Ljava/io/Writer;missing_types
 HSPLjava/io/PrintWriter;->print(C)V
 HSPLjava/io/PrintWriter;->print(I)V
 HSPLjava/io/PrintWriter;->print(J)V
-HSPLjava/io/PrintWriter;->print(Ljava/lang/String;)V
+HSPLjava/io/PrintWriter;->print(Ljava/lang/String;)V+]Ljava/io/PrintWriter;Lcom/android/internal/util/LineBreakBufferedWriter;,Ljava/io/PrintWriter;
 HSPLjava/io/PrintWriter;->print(Z)V
 HSPLjava/io/PrintWriter;->printf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintWriter;
 HSPLjava/io/PrintWriter;->println()V
 HSPLjava/io/PrintWriter;->println(I)V
-HSPLjava/io/PrintWriter;->println(Ljava/lang/Object;)V
-HSPLjava/io/PrintWriter;->println(Ljava/lang/String;)V
-HSPLjava/io/PrintWriter;->write(I)V
-HSPLjava/io/PrintWriter;->write(Ljava/lang/String;)V
-HSPLjava/io/PrintWriter;->write(Ljava/lang/String;II)V
-HSPLjava/io/PrintWriter;->write([CII)V
+HSPLjava/io/PrintWriter;->println(Ljava/lang/Object;)V+]Ljava/io/PrintWriter;Lcom/android/internal/util/FastPrintWriter;,Lcom/android/internal/util/LineBreakBufferedWriter;,Ljava/io/PrintWriter;
+HSPLjava/io/PrintWriter;->println(Ljava/lang/String;)V+]Ljava/io/PrintWriter;Ljava/io/PrintWriter;,Lcom/android/internal/util/LineBreakBufferedWriter;
+HSPLjava/io/PrintWriter;->write(I)V+]Ljava/io/Writer;Ljava/io/StringWriter;,Ljava/io/BufferedWriter;
+HSPLjava/io/PrintWriter;->write(Ljava/lang/String;)V+]Ljava/io/PrintWriter;missing_types
+HSPLjava/io/PrintWriter;->write(Ljava/lang/String;II)V+]Ljava/io/Writer;Ljava/io/StringWriter;,Ljava/io/BufferedWriter;
+HSPLjava/io/PrintWriter;->write([CII)V+]Ljava/io/Writer;Landroid/util/Log$ImmediateLogWriter;
 HSPLjava/io/PushbackInputStream;-><init>(Ljava/io/InputStream;I)V
 HSPLjava/io/PushbackInputStream;->close()V
 HSPLjava/io/PushbackInputStream;->ensureOpen()V
@@ -24017,7 +24032,7 @@
 HSPLjava/io/PushbackReader;->ensureOpen()V
 HSPLjava/io/PushbackReader;->read()I
 HSPLjava/io/PushbackReader;->unread(I)V
-HSPLjava/io/RandomAccessFile;-><init>(Ljava/io/File;Ljava/lang/String;)V
+HSPLjava/io/RandomAccessFile;-><init>(Ljava/io/File;Ljava/lang/String;)V+]Ljava/io/File;Ljava/io/File;]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
 HSPLjava/io/RandomAccessFile;-><init>(Ljava/lang/String;Ljava/lang/String;)V
 HSPLjava/io/RandomAccessFile;->close()V
 HSPLjava/io/RandomAccessFile;->finalize()V
@@ -24030,7 +24045,7 @@
 HSPLjava/io/RandomAccessFile;->read([B)I
 HSPLjava/io/RandomAccessFile;->read([BII)I
 HSPLjava/io/RandomAccessFile;->readByte()B
-HSPLjava/io/RandomAccessFile;->readBytes([BII)I
+HSPLjava/io/RandomAccessFile;->readBytes([BII)I+]Llibcore/io/IoTracker;Llibcore/io/IoTracker;
 HSPLjava/io/RandomAccessFile;->readFully([B)V
 HSPLjava/io/RandomAccessFile;->readFully([BII)V
 HSPLjava/io/RandomAccessFile;->readInt()I
@@ -24072,47 +24087,47 @@
 HSPLjava/io/StringWriter;->flush()V
 HSPLjava/io/StringWriter;->getBuffer()Ljava/lang/StringBuffer;
 HSPLjava/io/StringWriter;->toString()Ljava/lang/String;
-HSPLjava/io/StringWriter;->write(I)V
+HSPLjava/io/StringWriter;->write(I)V+]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;
 HSPLjava/io/StringWriter;->write(Ljava/lang/String;)V
-HSPLjava/io/StringWriter;->write(Ljava/lang/String;II)V
-HSPLjava/io/StringWriter;->write([CII)V
+HSPLjava/io/StringWriter;->write(Ljava/lang/String;II)V+]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;
+HSPLjava/io/StringWriter;->write([CII)V+]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;
 HSPLjava/io/UnixFileSystem;->canonicalize(Ljava/lang/String;)Ljava/lang/String;
-HSPLjava/io/UnixFileSystem;->checkAccess(Ljava/io/File;I)Z
+HSPLjava/io/UnixFileSystem;->checkAccess(Ljava/io/File;I)Z+]Ljava/io/File;Ljava/io/File;]Llibcore/io/Os;Landroid/app/ActivityThread$AndroidOs;
 HSPLjava/io/UnixFileSystem;->compare(Ljava/io/File;Ljava/io/File;)I+]Ljava/io/File;Ljava/io/File;
 HSPLjava/io/UnixFileSystem;->createDirectory(Ljava/io/File;)Z
 HSPLjava/io/UnixFileSystem;->createFileExclusively(Ljava/lang/String;)Z
-HSPLjava/io/UnixFileSystem;->delete(Ljava/io/File;)Z
-HSPLjava/io/UnixFileSystem;->getBooleanAttributes(Ljava/io/File;)I+]Ljava/io/File;Ljava/io/File;]Ldalvik/system/BlockGuard$VmPolicy;Landroid/os/StrictMode$5;]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;,Landroid/os/StrictMode$AndroidBlockGuardPolicy;
+HSPLjava/io/UnixFileSystem;->delete(Ljava/io/File;)Z+]Ljava/io/ExpiringCache;Ljava/io/ExpiringCache;]Ljava/io/File;Ljava/io/File;]Llibcore/io/Os;Landroid/app/ActivityThread$AndroidOs;
+HSPLjava/io/UnixFileSystem;->getBooleanAttributes(Ljava/io/File;)I+]Ljava/io/File;Ljava/io/File;]Ldalvik/system/BlockGuard$VmPolicy;Landroid/os/StrictMode$5;,Ldalvik/system/BlockGuard$2;]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;,Landroid/os/StrictMode$AndroidBlockGuardPolicy;
 HSPLjava/io/UnixFileSystem;->getDefaultParent()Ljava/lang/String;
-HSPLjava/io/UnixFileSystem;->getLastModifiedTime(Ljava/io/File;)J+]Ljava/io/File;Ljava/io/File;]Ldalvik/system/BlockGuard$VmPolicy;Landroid/os/StrictMode$5;]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;
+HSPLjava/io/UnixFileSystem;->getLastModifiedTime(Ljava/io/File;)J+]Ljava/io/File;Ljava/io/File;]Ldalvik/system/BlockGuard$VmPolicy;Landroid/os/StrictMode$5;,Ldalvik/system/BlockGuard$2;]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;,Landroid/os/StrictMode$AndroidBlockGuardPolicy;
 HSPLjava/io/UnixFileSystem;->getLength(Ljava/io/File;)J+]Ljava/io/File;Ljava/io/File;]Llibcore/io/Os;Landroid/app/ActivityThread$AndroidOs;
 HSPLjava/io/UnixFileSystem;->getSpace(Ljava/io/File;I)J
 HSPLjava/io/UnixFileSystem;->hashCode(Ljava/io/File;)I+]Ljava/lang/String;Ljava/lang/String;]Ljava/io/File;Ljava/io/File;
-HSPLjava/io/UnixFileSystem;->isAbsolute(Ljava/io/File;)Z
-HSPLjava/io/UnixFileSystem;->list(Ljava/io/File;)[Ljava/lang/String;+]Ljava/io/File;Ljava/io/File;]Ldalvik/system/BlockGuard$VmPolicy;Ldalvik/system/BlockGuard$2;]Ldalvik/system/BlockGuard$Policy;Landroid/os/StrictMode$AndroidBlockGuardPolicy;,Ldalvik/system/BlockGuard$1;
+HSPLjava/io/UnixFileSystem;->isAbsolute(Ljava/io/File;)Z+]Ljava/io/File;Ljava/io/File;
+HSPLjava/io/UnixFileSystem;->list(Ljava/io/File;)[Ljava/lang/String;+]Ljava/io/File;Ljava/io/File;]Ldalvik/system/BlockGuard$VmPolicy;Landroid/os/StrictMode$5;,Ldalvik/system/BlockGuard$2;]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;,Landroid/os/StrictMode$AndroidBlockGuardPolicy;
 HSPLjava/io/UnixFileSystem;->normalize(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/io/UnixFileSystem;->prefixLength(Ljava/lang/String;)I
 HSPLjava/io/UnixFileSystem;->rename(Ljava/io/File;Ljava/io/File;)Z
-HSPLjava/io/UnixFileSystem;->resolve(Ljava/io/File;)Ljava/lang/String;
-HSPLjava/io/UnixFileSystem;->resolve(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/io/UnixFileSystem;->resolve(Ljava/io/File;)Ljava/lang/String;+]Ljava/io/File;Ljava/io/File;]Ljava/io/UnixFileSystem;Ljava/io/UnixFileSystem;
+HSPLjava/io/UnixFileSystem;->resolve(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLjava/io/UnixFileSystem;->setLastModifiedTime(Ljava/io/File;J)Z
 HSPLjava/io/UnixFileSystem;->setPermission(Ljava/io/File;IZZ)Z
 HSPLjava/io/Writer;-><init>()V
 HSPLjava/io/Writer;-><init>(Ljava/lang/Object;)V
 HSPLjava/io/Writer;->append(C)Ljava/io/Writer;
 HSPLjava/io/Writer;->append(Ljava/lang/CharSequence;)Ljava/io/Writer;
-HSPLjava/io/Writer;->write(Ljava/lang/String;)V
+HSPLjava/io/Writer;->write(Ljava/lang/String;)V+]Ljava/io/Writer;Ljava/io/BufferedWriter;
 HSPLjava/lang/AbstractStringBuilder;-><init>(I)V
 HSPLjava/lang/AbstractStringBuilder;->append(C)Ljava/lang/AbstractStringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->append(D)Ljava/lang/AbstractStringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->append(F)Ljava/lang/AbstractStringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->append(I)Ljava/lang/AbstractStringBuilder;+]Ljava/lang/AbstractStringBuilder;Ljava/lang/StringBuilder;
-HSPLjava/lang/AbstractStringBuilder;->append(J)Ljava/lang/AbstractStringBuilder;
-HSPLjava/lang/AbstractStringBuilder;->append(Ljava/lang/AbstractStringBuilder;)Ljava/lang/AbstractStringBuilder;
+HSPLjava/lang/AbstractStringBuilder;->append(J)Ljava/lang/AbstractStringBuilder;+]Ljava/lang/AbstractStringBuilder;Ljava/lang/StringBuilder;
+HSPLjava/lang/AbstractStringBuilder;->append(Ljava/lang/AbstractStringBuilder;)Ljava/lang/AbstractStringBuilder;+]Ljava/lang/AbstractStringBuilder;Ljava/lang/StringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->append(Ljava/lang/CharSequence;)Ljava/lang/AbstractStringBuilder;+]Ljava/lang/CharSequence;Ljava/nio/HeapCharBuffer;,Landroid/icu/impl/FormattedStringBuilder;]Ljava/lang/AbstractStringBuilder;Ljava/lang/StringBuilder;,Ljava/lang/StringBuffer;
 HSPLjava/lang/AbstractStringBuilder;->append(Ljava/lang/CharSequence;II)Ljava/lang/AbstractStringBuilder;+]Ljava/lang/CharSequence;Ljava/lang/String;,Ljava/nio/HeapCharBuffer;,Landroid/icu/impl/FormattedStringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->append(Ljava/lang/String;)Ljava/lang/AbstractStringBuilder;+]Ljava/lang/String;Ljava/lang/String;
-HSPLjava/lang/AbstractStringBuilder;->append(Ljava/lang/StringBuffer;)Ljava/lang/AbstractStringBuilder;
+HSPLjava/lang/AbstractStringBuilder;->append(Ljava/lang/StringBuffer;)Ljava/lang/AbstractStringBuilder;+]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;
 HSPLjava/lang/AbstractStringBuilder;->append(Z)Ljava/lang/AbstractStringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->append([CII)Ljava/lang/AbstractStringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->appendCodePoint(I)Ljava/lang/AbstractStringBuilder;
@@ -24124,15 +24139,15 @@
 HSPLjava/lang/AbstractStringBuilder;->ensureCapacity(I)V
 HSPLjava/lang/AbstractStringBuilder;->ensureCapacityInternal(I)V
 HSPLjava/lang/AbstractStringBuilder;->getChars(II[CI)V
-HSPLjava/lang/AbstractStringBuilder;->indexOf(Ljava/lang/String;)I
+HSPLjava/lang/AbstractStringBuilder;->indexOf(Ljava/lang/String;)I+]Ljava/lang/AbstractStringBuilder;Ljava/lang/StringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->indexOf(Ljava/lang/String;I)I
 HSPLjava/lang/AbstractStringBuilder;->insert(IC)Ljava/lang/AbstractStringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->insert(II)Ljava/lang/AbstractStringBuilder;
-HSPLjava/lang/AbstractStringBuilder;->insert(ILjava/lang/String;)Ljava/lang/AbstractStringBuilder;
+HSPLjava/lang/AbstractStringBuilder;->insert(ILjava/lang/String;)Ljava/lang/AbstractStringBuilder;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/AbstractStringBuilder;Ljava/lang/StringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->lastIndexOf(Ljava/lang/String;I)I
 HSPLjava/lang/AbstractStringBuilder;->length()I
 HSPLjava/lang/AbstractStringBuilder;->newCapacity(I)I
-HSPLjava/lang/AbstractStringBuilder;->replace(IILjava/lang/String;)Ljava/lang/AbstractStringBuilder;
+HSPLjava/lang/AbstractStringBuilder;->replace(IILjava/lang/String;)Ljava/lang/AbstractStringBuilder;+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/lang/AbstractStringBuilder;->reverse()Ljava/lang/AbstractStringBuilder;
 HSPLjava/lang/AbstractStringBuilder;->setCharAt(IC)V
 HSPLjava/lang/AbstractStringBuilder;->setLength(I)V
@@ -24144,8 +24159,8 @@
 HSPLjava/lang/Boolean;->booleanValue()Z
 HSPLjava/lang/Boolean;->compare(ZZ)I
 HSPLjava/lang/Boolean;->compareTo(Ljava/lang/Boolean;)I
-HSPLjava/lang/Boolean;->compareTo(Ljava/lang/Object;)I
-HSPLjava/lang/Boolean;->equals(Ljava/lang/Object;)Z
+HSPLjava/lang/Boolean;->compareTo(Ljava/lang/Object;)I+]Ljava/lang/Boolean;Ljava/lang/Boolean;
+HSPLjava/lang/Boolean;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Boolean;Ljava/lang/Boolean;
 HSPLjava/lang/Boolean;->getBoolean(Ljava/lang/String;)Z
 HSPLjava/lang/Boolean;->hashCode()I
 HSPLjava/lang/Boolean;->hashCode(Z)I
@@ -24181,10 +24196,10 @@
 HSPLjava/lang/Character;-><init>(C)V
 HSPLjava/lang/Character;->charCount(I)I
 HSPLjava/lang/Character;->charValue()C
-HSPLjava/lang/Character;->codePointAt(Ljava/lang/CharSequence;I)I+]Ljava/lang/CharSequence;Landroid/text/method/ReplacementTransformationMethod$SpannedReplacementCharSequence;,Ljava/lang/StringBuilder;,Ljava/lang/String;,Landroid/text/SpannedString;
+HSPLjava/lang/Character;->codePointAt(Ljava/lang/CharSequence;I)I+]Ljava/lang/CharSequence;megamorphic_types
 HSPLjava/lang/Character;->codePointAtImpl([CII)I
 HSPLjava/lang/Character;->codePointBefore(Ljava/lang/CharSequence;I)I
-HSPLjava/lang/Character;->codePointCount(Ljava/lang/CharSequence;II)I
+HSPLjava/lang/Character;->codePointCount(Ljava/lang/CharSequence;II)I+]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLjava/lang/Character;->digit(CI)I
 HSPLjava/lang/Character;->digit(II)I
 HSPLjava/lang/Character;->equals(Ljava/lang/Object;)Z
@@ -24235,7 +24250,7 @@
 HSPLjava/lang/Character;->toUpperCase(I)I
 HSPLjava/lang/Character;->valueOf(C)Ljava/lang/Character;
 HSPLjava/lang/Class;->asSubclass(Ljava/lang/Class;)Ljava/lang/Class;
-HSPLjava/lang/Class;->cast(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/lang/Class;->cast(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/lang/Class;->classNameImpliesTopLevel()Z+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/lang/Class;->desiredAssertionStatus()Z
 HSPLjava/lang/Class;->findInterfaceMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
@@ -24243,11 +24258,11 @@
 HSPLjava/lang/Class;->forName(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;
 HSPLjava/lang/Class;->getAccessFlags()I
 HSPLjava/lang/Class;->getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
-HSPLjava/lang/Class;->getCanonicalName()Ljava/lang/String;
+HSPLjava/lang/Class;->getCanonicalName()Ljava/lang/String;+]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/lang/Class;->getClassLoader()Ljava/lang/ClassLoader;+]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/lang/Class;->getComponentType()Ljava/lang/Class;
 HSPLjava/lang/Class;->getConstructor([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
-HSPLjava/lang/Class;->getConstructor0([Ljava/lang/Class;I)Ljava/lang/reflect/Constructor;
+HSPLjava/lang/Class;->getConstructor0([Ljava/lang/Class;I)Ljava/lang/reflect/Constructor;+]Ljava/lang/reflect/Constructor;Ljava/lang/reflect/Constructor;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/lang/Class;->getConstructors()[Ljava/lang/reflect/Constructor;
 HSPLjava/lang/Class;->getDeclaredConstructor([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
 HSPLjava/lang/Class;->getDeclaredConstructors()[Ljava/lang/reflect/Constructor;
@@ -24258,20 +24273,20 @@
 HSPLjava/lang/Class;->getEnumConstants()[Ljava/lang/Object;
 HSPLjava/lang/Class;->getEnumConstantsShared()[Ljava/lang/Object;
 HSPLjava/lang/Class;->getField(Ljava/lang/String;)Ljava/lang/reflect/Field;
-HSPLjava/lang/Class;->getFields()[Ljava/lang/reflect/Field;
+HSPLjava/lang/Class;->getFields()[Ljava/lang/reflect/Field;+]Ljava/util/List;Ljava/util/ArrayList;
 HSPLjava/lang/Class;->getGenericInterfaces()[Ljava/lang/reflect/Type;
 HSPLjava/lang/Class;->getGenericSuperclass()Ljava/lang/reflect/Type;
 HSPLjava/lang/Class;->getInterfaces()[Ljava/lang/Class;
 HSPLjava/lang/Class;->getMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
-HSPLjava/lang/Class;->getMethod(Ljava/lang/String;[Ljava/lang/Class;Z)Ljava/lang/reflect/Method;
+HSPLjava/lang/Class;->getMethod(Ljava/lang/String;[Ljava/lang/Class;Z)Ljava/lang/reflect/Method;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/lang/Class;->getMethods()[Ljava/lang/reflect/Method;
-HSPLjava/lang/Class;->getModifiers()I
+HSPLjava/lang/Class;->getModifiers()I+]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/lang/Class;->getName()Ljava/lang/String;
 HSPLjava/lang/Class;->getPackage()Ljava/lang/Package;
-HSPLjava/lang/Class;->getPackageName()Ljava/lang/String;
+HSPLjava/lang/Class;->getPackageName()Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/lang/Class;->getProtectionDomain()Ljava/security/ProtectionDomain;
 HSPLjava/lang/Class;->getPublicFieldsRecursive(Ljava/util/List;)V
-HSPLjava/lang/Class;->getPublicMethodRecursive(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
+HSPLjava/lang/Class;->getPublicMethodRecursive(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;+]Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/lang/Class;->getPublicMethodsInternal(Ljava/util/List;)V
 HSPLjava/lang/Class;->getResourceAsStream(Ljava/lang/String;)Ljava/io/InputStream;
 HSPLjava/lang/Class;->getSignatureAttribute()Ljava/lang/String;
@@ -24287,7 +24302,7 @@
 HSPLjava/lang/Class;->isInstance(Ljava/lang/Object;)Z+]Ljava/lang/Object;missing_types]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/lang/Class;->isInterface()Z
 HSPLjava/lang/Class;->isLocalClass()Z+]Ljava/lang/Class;Ljava/lang/Class;
-HSPLjava/lang/Class;->isLocalOrAnonymousClass()Z
+HSPLjava/lang/Class;->isLocalOrAnonymousClass()Z+]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/lang/Class;->isMemberClass()Z+]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/lang/Class;->isPrimitive()Z
 HSPLjava/lang/Class;->isProxy()Z
@@ -24314,7 +24329,7 @@
 HSPLjava/lang/ClassNotFoundException;->getCause()Ljava/lang/Throwable;
 HSPLjava/lang/Daemons$Daemon;->interrupt(Ljava/lang/Thread;)V
 HSPLjava/lang/Daemons$Daemon;->isRunning()Z
-HSPLjava/lang/Daemons$Daemon;->run()V
+HSPLjava/lang/Daemons$Daemon;->run()V+]Ljava/lang/Daemons$Daemon;Ljava/lang/Daemons$ReferenceQueueDaemon;,Ljava/lang/Daemons$FinalizerWatchdogDaemon;,Ljava/lang/Daemons$FinalizerDaemon;,Ljava/lang/Daemons$HeapTaskDaemon;]Ljava/util/concurrent/CountDownLatch;Ljava/util/concurrent/CountDownLatch;
 HSPLjava/lang/Daemons$Daemon;->startInternal()V
 HSPLjava/lang/Daemons$Daemon;->startPostZygoteFork()V
 HSPLjava/lang/Daemons$Daemon;->stop()V
@@ -24344,7 +24359,7 @@
 HSPLjava/lang/Double;-><init>(D)V
 HSPLjava/lang/Double;->compare(DD)I
 HSPLjava/lang/Double;->compareTo(Ljava/lang/Double;)I
-HSPLjava/lang/Double;->compareTo(Ljava/lang/Object;)I
+HSPLjava/lang/Double;->compareTo(Ljava/lang/Object;)I+]Ljava/lang/Double;Ljava/lang/Double;
 HSPLjava/lang/Double;->doubleToLongBits(D)J
 HSPLjava/lang/Double;->doubleValue()D
 HSPLjava/lang/Double;->equals(Ljava/lang/Object;)Z
@@ -24364,17 +24379,17 @@
 HSPLjava/lang/Enum$1;->create(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/lang/Enum;->-$$Nest$smenumValues(Ljava/lang/Class;)[Ljava/lang/Object;
 HSPLjava/lang/Enum;-><init>(Ljava/lang/String;I)V
-HSPLjava/lang/Enum;->compareTo(Ljava/lang/Enum;)I
+HSPLjava/lang/Enum;->compareTo(Ljava/lang/Enum;)I+]Ljava/lang/Object;missing_types]Ljava/lang/Enum;Lcom/android/i18n/phonenumbers/PhoneNumberUtil$Leniency$2;,Lcom/android/i18n/phonenumbers/PhoneNumberUtil$Leniency$1;
 HSPLjava/lang/Enum;->compareTo(Ljava/lang/Object;)I
 HSPLjava/lang/Enum;->enumValues(Ljava/lang/Class;)[Ljava/lang/Object;
 HSPLjava/lang/Enum;->equals(Ljava/lang/Object;)Z
 HSPLjava/lang/Enum;->getDeclaringClass()Ljava/lang/Class;+]Ljava/lang/Class;Ljava/lang/Class;
-HSPLjava/lang/Enum;->getSharedConstants(Ljava/lang/Class;)[Ljava/lang/Enum;
+HSPLjava/lang/Enum;->getSharedConstants(Ljava/lang/Class;)[Ljava/lang/Enum;+]Llibcore/util/BasicLruCache;Ljava/lang/Enum$1;
 HSPLjava/lang/Enum;->hashCode()I
 HSPLjava/lang/Enum;->name()Ljava/lang/String;
 HSPLjava/lang/Enum;->ordinal()I
 HSPLjava/lang/Enum;->toString()Ljava/lang/String;
-HSPLjava/lang/Enum;->valueOf(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;+]Ljava/lang/Enum;Landroid/net/NetworkInfo$State;,Landroid/net/NetworkInfo$DetailedState;
+HSPLjava/lang/Enum;->valueOf(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;+]Ljava/lang/Enum;missing_types
 HSPLjava/lang/Error;-><init>(Ljava/lang/String;)V
 HSPLjava/lang/Exception;-><init>()V
 HSPLjava/lang/Exception;-><init>(Ljava/lang/String;)V
@@ -24384,7 +24399,7 @@
 HSPLjava/lang/Float;-><init>(F)V
 HSPLjava/lang/Float;->compare(FF)I
 HSPLjava/lang/Float;->compareTo(Ljava/lang/Float;)I
-HSPLjava/lang/Float;->compareTo(Ljava/lang/Object;)I
+HSPLjava/lang/Float;->compareTo(Ljava/lang/Object;)I+]Ljava/lang/Float;Ljava/lang/Float;
 HSPLjava/lang/Float;->doubleValue()D
 HSPLjava/lang/Float;->equals(Ljava/lang/Object;)Z
 HSPLjava/lang/Float;->floatToIntBits(F)I
@@ -24417,8 +24432,8 @@
 HSPLjava/lang/Integer;->byteValue()B
 HSPLjava/lang/Integer;->compare(II)I
 HSPLjava/lang/Integer;->compareTo(Ljava/lang/Integer;)I
-HSPLjava/lang/Integer;->compareTo(Ljava/lang/Object;)I
-HSPLjava/lang/Integer;->decode(Ljava/lang/String;)Ljava/lang/Integer;
+HSPLjava/lang/Integer;->compareTo(Ljava/lang/Object;)I+]Ljava/lang/Integer;Ljava/lang/Integer;
+HSPLjava/lang/Integer;->decode(Ljava/lang/String;)Ljava/lang/Integer;+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/lang/Integer;->divideUnsigned(II)I
 HSPLjava/lang/Integer;->doubleValue()D
 HSPLjava/lang/Integer;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Integer;Ljava/lang/Integer;
@@ -24460,15 +24475,15 @@
 HSPLjava/lang/Integer;->valueOf(Ljava/lang/String;)Ljava/lang/Integer;
 HSPLjava/lang/Integer;->valueOf(Ljava/lang/String;I)Ljava/lang/Integer;
 HSPLjava/lang/InterruptedException;-><init>()V
-HSPLjava/lang/Iterable;->forEach(Ljava/util/function/Consumer;)V+]Ljava/lang/Iterable;Ljava/util/HashSet;,Ljava/util/WeakHashMap$KeySet;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;,Ljava/util/WeakHashMap$KeyIterator;]Ljava/util/function/Consumer;missing_types
+HSPLjava/lang/Iterable;->forEach(Ljava/util/function/Consumer;)V+]Ljava/lang/Iterable;Ljava/util/WeakHashMap$KeySet;,Ljava/util/HashSet;,Ljava/util/WeakHashMap$EntrySet;,Ljava/util/ImmutableCollections$List12;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;,Ljava/util/WeakHashMap$KeyIterator;,Ljava/util/WeakHashMap$EntryIterator;,Ljava/util/ImmutableCollections$ListItr;]Ljava/util/function/Consumer;missing_types
 HSPLjava/lang/LinkageError;-><init>(Ljava/lang/String;)V
 HSPLjava/lang/Long;-><init>(J)V
 HSPLjava/lang/Long;->bitCount(J)I
 HSPLjava/lang/Long;->compare(JJ)I
 HSPLjava/lang/Long;->compareTo(Ljava/lang/Long;)I
-HSPLjava/lang/Long;->compareTo(Ljava/lang/Object;)I
+HSPLjava/lang/Long;->compareTo(Ljava/lang/Object;)I+]Ljava/lang/Long;Ljava/lang/Long;
 HSPLjava/lang/Long;->compareUnsigned(JJ)I
-HSPLjava/lang/Long;->decode(Ljava/lang/String;)Ljava/lang/Long;
+HSPLjava/lang/Long;->decode(Ljava/lang/String;)Ljava/lang/Long;+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/lang/Long;->divideUnsigned(JJ)J
 HSPLjava/lang/Long;->doubleValue()D
 HSPLjava/lang/Long;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Long;Ljava/lang/Long;
@@ -24533,7 +24548,7 @@
 HSPLjava/lang/Math;->nextAfter(DD)D
 HSPLjava/lang/Math;->powerOfTwoD(I)D
 HSPLjava/lang/Math;->powerOfTwoF(I)F
-HSPLjava/lang/Math;->random()D
+HSPLjava/lang/Math;->random()D+]Ljava/util/Random;Ljava/util/Random;
 HSPLjava/lang/Math;->randomLongInternal()J
 HSPLjava/lang/Math;->round(D)J
 HSPLjava/lang/Math;->round(F)I
@@ -24632,10 +24647,10 @@
 HSPLjava/lang/String;->equals(Ljava/lang/Object;)Z
 HSPLjava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;+]Ljava/util/Formatter;Ljava/util/Formatter;
-HSPLjava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
-HSPLjava/lang/String;->getBytes()[B
-HSPLjava/lang/String;->getBytes(Ljava/lang/String;)[B
-HSPLjava/lang/String;->getBytes(Ljava/nio/charset/Charset;)[B
+HSPLjava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;+]Ljava/util/Formatter;Ljava/util/Formatter;
+HSPLjava/lang/String;->getBytes()[B+]Ljava/lang/String;Ljava/lang/String;
+HSPLjava/lang/String;->getBytes(Ljava/lang/String;)[B+]Ljava/lang/String;Ljava/lang/String;
+HSPLjava/lang/String;->getBytes(Ljava/nio/charset/Charset;)[B+]Ljava/nio/charset/Charset;missing_types
 HSPLjava/lang/String;->getChars(II[CI)V
 HSPLjava/lang/String;->getChars([CI)V
 HSPLjava/lang/String;->hashCode()I
@@ -24644,12 +24659,12 @@
 HSPLjava/lang/String;->indexOf(Ljava/lang/String;)I+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/lang/String;->indexOf(Ljava/lang/String;I)I
 HSPLjava/lang/String;->indexOf(Ljava/lang/String;Ljava/lang/String;I)I
-HSPLjava/lang/String;->indexOf([CIILjava/lang/String;I)I
+HSPLjava/lang/String;->indexOf([CIILjava/lang/String;I)I+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/lang/String;->indexOf([CII[CIII)I
 HSPLjava/lang/String;->isEmpty()Z
 HSPLjava/lang/String;->join(Ljava/lang/CharSequence;Ljava/lang/Iterable;)Ljava/lang/String;
 HSPLjava/lang/String;->join(Ljava/lang/CharSequence;[Ljava/lang/CharSequence;)Ljava/lang/String;
-HSPLjava/lang/String;->lastIndexOf(I)I
+HSPLjava/lang/String;->lastIndexOf(I)I+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/lang/String;->lastIndexOf(II)I
 HSPLjava/lang/String;->lastIndexOf(Ljava/lang/String;)I+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/lang/String;->lastIndexOf(Ljava/lang/String;I)I
@@ -24659,10 +24674,10 @@
 HSPLjava/lang/String;->length()I
 HSPLjava/lang/String;->matches(Ljava/lang/String;)Z
 HSPLjava/lang/String;->regionMatches(ILjava/lang/String;II)Z
-HSPLjava/lang/String;->regionMatches(ZILjava/lang/String;II)Z
+HSPLjava/lang/String;->regionMatches(ZILjava/lang/String;II)Z+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/lang/String;->replace(CC)Ljava/lang/String;
 HSPLjava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/CharSequence;Ljava/lang/String;
-HSPLjava/lang/String;->replaceAll(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/lang/String;->replaceAll(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;]Ljava/util/regex/Pattern;Ljava/util/regex/Pattern;
 HSPLjava/lang/String;->replaceFirst(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLjava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;
 HSPLjava/lang/String;->split(Ljava/lang/String;I)[Ljava/lang/String;
@@ -24709,9 +24724,9 @@
 HSPLjava/lang/StringBuffer;->toString()Ljava/lang/String;
 HSPLjava/lang/StringBuilder;-><init>()V
 HSPLjava/lang/StringBuilder;-><init>(I)V
-HSPLjava/lang/StringBuilder;-><init>(Ljava/lang/CharSequence;)V
-HSPLjava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
-HSPLjava/lang/StringBuilder;->append(C)Ljava/lang/Appendable;
+HSPLjava/lang/StringBuilder;-><init>(Ljava/lang/CharSequence;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/CharSequence;Ljava/lang/String;,Ljava/lang/StringBuilder;
+HSPLjava/lang/StringBuilder;-><init>(Ljava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLjava/lang/StringBuilder;->append(C)Ljava/lang/Appendable;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLjava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
 HSPLjava/lang/StringBuilder;->append(D)Ljava/lang/StringBuilder;
 HSPLjava/lang/StringBuilder;->append(F)Ljava/lang/StringBuilder;
@@ -24719,7 +24734,7 @@
 HSPLjava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
 HSPLjava/lang/StringBuilder;->append(Ljava/lang/CharSequence;)Ljava/lang/Appendable;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLjava/lang/StringBuilder;->append(Ljava/lang/CharSequence;)Ljava/lang/StringBuilder;
-HSPLjava/lang/StringBuilder;->append(Ljava/lang/CharSequence;II)Ljava/lang/AbstractStringBuilder;
+HSPLjava/lang/StringBuilder;->append(Ljava/lang/CharSequence;II)Ljava/lang/AbstractStringBuilder;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLjava/lang/StringBuilder;->append(Ljava/lang/CharSequence;II)Ljava/lang/Appendable;
 HSPLjava/lang/StringBuilder;->append(Ljava/lang/CharSequence;II)Ljava/lang/StringBuilder;
 HSPLjava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
@@ -24773,7 +24788,7 @@
 HSPLjava/lang/System;->clearProperty(Ljava/lang/String;)Ljava/lang/String;
 HSPLjava/lang/System;->gc()V
 HSPLjava/lang/System;->getProperties()Ljava/util/Properties;
-HSPLjava/lang/System;->getProperty(Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/lang/System;->getProperty(Ljava/lang/String;)Ljava/lang/String;+]Ljava/util/Properties;Ljava/lang/System$PropertiesWithNonOverrideableDefaults;
 HSPLjava/lang/System;->getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLjava/lang/System;->getSecurityManager()Ljava/lang/SecurityManager;
 HSPLjava/lang/System;->getenv(Ljava/lang/String;)Ljava/lang/String;
@@ -24809,15 +24824,15 @@
 HSPLjava/lang/Thread;->getState()Ljava/lang/Thread$State;
 HSPLjava/lang/Thread;->getThreadGroup()Ljava/lang/ThreadGroup;
 HSPLjava/lang/Thread;->getUncaughtExceptionHandler()Ljava/lang/Thread$UncaughtExceptionHandler;
-HSPLjava/lang/Thread;->init2(Ljava/lang/Thread;Z)V+]Ljava/lang/Thread;Landroid/os/HandlerThread;,Ljava/lang/Thread;,Landroid/net/ConnectivityThread;
-HSPLjava/lang/Thread;->interrupt()V
+HSPLjava/lang/Thread;->init2(Ljava/lang/Thread;Z)V+]Ljava/lang/Thread;missing_types
+HSPLjava/lang/Thread;->interrupt()V+]Ljava/lang/Thread;Ljava/lang/Thread;
 HSPLjava/lang/Thread;->isAlive()Z
 HSPLjava/lang/Thread;->isDaemon()Z
 HSPLjava/lang/Thread;->join()V
 HSPLjava/lang/Thread;->join(J)V
 HSPLjava/lang/Thread;->nextThreadID()J
 HSPLjava/lang/Thread;->nextThreadNum()I
-HSPLjava/lang/Thread;->run()V
+HSPLjava/lang/Thread;->run()V+]Ljava/lang/Runnable;missing_types
 HSPLjava/lang/Thread;->setContextClassLoader(Ljava/lang/ClassLoader;)V
 HSPLjava/lang/Thread;->setDaemon(Z)V
 HSPLjava/lang/Thread;->setDefaultUncaughtExceptionHandler(Ljava/lang/Thread$UncaughtExceptionHandler;)V
@@ -24828,11 +24843,11 @@
 HSPLjava/lang/Thread;->setUncaughtExceptionPreHandler(Ljava/lang/Thread$UncaughtExceptionHandler;)V
 HSPLjava/lang/Thread;->sleep(J)V
 HSPLjava/lang/Thread;->sleep(JI)V
-HSPLjava/lang/Thread;->start()V
+HSPLjava/lang/Thread;->start()V+]Ljava/lang/ThreadGroup;Ljava/lang/ThreadGroup;
 HSPLjava/lang/Thread;->toString()Ljava/lang/String;
 HSPLjava/lang/ThreadGroup;-><init>(Ljava/lang/ThreadGroup;Ljava/lang/String;)V
 HSPLjava/lang/ThreadGroup;-><init>(Ljava/lang/Void;Ljava/lang/ThreadGroup;Ljava/lang/String;)V
-HSPLjava/lang/ThreadGroup;->activeCount()I
+HSPLjava/lang/ThreadGroup;->activeCount()I+]Ljava/lang/ThreadGroup;Ljava/lang/ThreadGroup;
 HSPLjava/lang/ThreadGroup;->activeGroupCount()I
 HSPLjava/lang/ThreadGroup;->add(Ljava/lang/Thread;)V
 HSPLjava/lang/ThreadGroup;->add(Ljava/lang/ThreadGroup;)V
@@ -24840,7 +24855,7 @@
 HSPLjava/lang/ThreadGroup;->checkAccess()V
 HSPLjava/lang/ThreadGroup;->checkParentAccess(Ljava/lang/ThreadGroup;)Ljava/lang/Void;
 HSPLjava/lang/ThreadGroup;->enumerate([Ljava/lang/Thread;)I
-HSPLjava/lang/ThreadGroup;->enumerate([Ljava/lang/Thread;IZ)I
+HSPLjava/lang/ThreadGroup;->enumerate([Ljava/lang/Thread;IZ)I+]Ljava/lang/Thread;missing_types
 HSPLjava/lang/ThreadGroup;->enumerate([Ljava/lang/ThreadGroup;)I
 HSPLjava/lang/ThreadGroup;->enumerate([Ljava/lang/ThreadGroup;IZ)I
 HSPLjava/lang/ThreadGroup;->getMaxPriority()I
@@ -24857,7 +24872,7 @@
 HSPLjava/lang/ThreadLocal$ThreadLocalMap;-><init>(Ljava/lang/ThreadLocal;Ljava/lang/Object;)V
 HSPLjava/lang/ThreadLocal$ThreadLocalMap;->cleanSomeSlots(II)Z
 HSPLjava/lang/ThreadLocal$ThreadLocalMap;->expungeStaleEntries()V
-HSPLjava/lang/ThreadLocal$ThreadLocalMap;->expungeStaleEntry(I)I
+HSPLjava/lang/ThreadLocal$ThreadLocalMap;->expungeStaleEntry(I)I+]Ljava/lang/ThreadLocal$ThreadLocalMap$Entry;Ljava/lang/ThreadLocal$ThreadLocalMap$Entry;
 HSPLjava/lang/ThreadLocal$ThreadLocalMap;->getEntry(Ljava/lang/ThreadLocal;)Ljava/lang/ThreadLocal$ThreadLocalMap$Entry;
 HSPLjava/lang/ThreadLocal$ThreadLocalMap;->getEntryAfterMiss(Ljava/lang/ThreadLocal;ILjava/lang/ThreadLocal$ThreadLocalMap$Entry;)Ljava/lang/ThreadLocal$ThreadLocalMap$Entry;
 HSPLjava/lang/ThreadLocal$ThreadLocalMap;->nextIndex(II)I
@@ -24876,9 +24891,9 @@
 HSPLjava/lang/ThreadLocal;->getMap(Ljava/lang/Thread;)Ljava/lang/ThreadLocal$ThreadLocalMap;
 HSPLjava/lang/ThreadLocal;->initialValue()Ljava/lang/Object;
 HSPLjava/lang/ThreadLocal;->nextHashCode()I
-HSPLjava/lang/ThreadLocal;->remove()V
+HSPLjava/lang/ThreadLocal;->remove()V+]Ljava/lang/ThreadLocal;missing_types
 HSPLjava/lang/ThreadLocal;->set(Ljava/lang/Object;)V+]Ljava/lang/ThreadLocal;megamorphic_types
-HSPLjava/lang/ThreadLocal;->setInitialValue()Ljava/lang/Object;
+HSPLjava/lang/ThreadLocal;->setInitialValue()Ljava/lang/Object;+]Ljava/lang/ThreadLocal;missing_types
 HSPLjava/lang/ThreadLocal;->withInitial(Ljava/util/function/Supplier;)Ljava/lang/ThreadLocal;
 HSPLjava/lang/Throwable$PrintStreamOrWriter;-><init>()V
 HSPLjava/lang/Throwable$PrintStreamOrWriter;-><init>(Ljava/lang/Throwable$PrintStreamOrWriter-IA;)V
@@ -24887,10 +24902,10 @@
 HSPLjava/lang/Throwable$WrappedPrintStream;->println(Ljava/lang/Object;)V
 HSPLjava/lang/Throwable$WrappedPrintWriter;-><init>(Ljava/io/PrintWriter;)V
 HSPLjava/lang/Throwable$WrappedPrintWriter;->lock()Ljava/lang/Object;
-HSPLjava/lang/Throwable$WrappedPrintWriter;->println(Ljava/lang/Object;)V
-HSPLjava/lang/Throwable;-><init>()V
+HSPLjava/lang/Throwable$WrappedPrintWriter;->println(Ljava/lang/Object;)V+]Ljava/io/PrintWriter;Lcom/android/internal/util/FastPrintWriter;,Lcom/android/internal/util/LineBreakBufferedWriter;,Ljava/io/PrintWriter;
+HSPLjava/lang/Throwable;-><init>()V+]Ljava/lang/Throwable;missing_types
 HSPLjava/lang/Throwable;-><init>(Ljava/lang/String;)V+]Ljava/lang/Throwable;megamorphic_types
-HSPLjava/lang/Throwable;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
+HSPLjava/lang/Throwable;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V+]Ljava/lang/Throwable;missing_types
 HSPLjava/lang/Throwable;-><init>(Ljava/lang/String;Ljava/lang/Throwable;ZZ)V
 HSPLjava/lang/Throwable;-><init>(Ljava/lang/Throwable;)V
 HSPLjava/lang/Throwable;->addSuppressed(Ljava/lang/Throwable;)V
@@ -24899,15 +24914,15 @@
 HSPLjava/lang/Throwable;->getLocalizedMessage()Ljava/lang/String;
 HSPLjava/lang/Throwable;->getMessage()Ljava/lang/String;
 HSPLjava/lang/Throwable;->getOurStackTrace()[Ljava/lang/StackTraceElement;
-HSPLjava/lang/Throwable;->getStackTrace()[Ljava/lang/StackTraceElement;
+HSPLjava/lang/Throwable;->getStackTrace()[Ljava/lang/StackTraceElement;+][Ljava/lang/StackTraceElement;[Ljava/lang/StackTraceElement;
 HSPLjava/lang/Throwable;->getSuppressed()[Ljava/lang/Throwable;
 HSPLjava/lang/Throwable;->initCause(Ljava/lang/Throwable;)Ljava/lang/Throwable;
-HSPLjava/lang/Throwable;->printEnclosedStackTrace(Ljava/lang/Throwable$PrintStreamOrWriter;[Ljava/lang/StackTraceElement;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V
+HSPLjava/lang/Throwable;->printEnclosedStackTrace(Ljava/lang/Throwable$PrintStreamOrWriter;[Ljava/lang/StackTraceElement;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Throwable$PrintStreamOrWriter;Ljava/lang/Throwable$WrappedPrintWriter;]Ljava/lang/StackTraceElement;Ljava/lang/StackTraceElement;]Ljava/util/Set;Ljava/util/Collections$SetFromMap;]Ljava/lang/Throwable;missing_types
 HSPLjava/lang/Throwable;->printStackTrace()V
 HSPLjava/lang/Throwable;->printStackTrace(Ljava/io/PrintStream;)V
 HSPLjava/lang/Throwable;->printStackTrace(Ljava/io/PrintWriter;)V
-HSPLjava/lang/Throwable;->printStackTrace(Ljava/lang/Throwable$PrintStreamOrWriter;)V
-HSPLjava/lang/Throwable;->readObject(Ljava/io/ObjectInputStream;)V
+HSPLjava/lang/Throwable;->printStackTrace(Ljava/lang/Throwable$PrintStreamOrWriter;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Throwable$PrintStreamOrWriter;Ljava/lang/Throwable$WrappedPrintWriter;]Ljava/lang/Throwable;megamorphic_types]Ljava/util/Set;Ljava/util/Collections$SetFromMap;
+HSPLjava/lang/Throwable;->readObject(Ljava/io/ObjectInputStream;)V+][Ljava/lang/StackTraceElement;[Ljava/lang/StackTraceElement;]Ljava/io/ObjectInputStream;Landroid/os/Parcel$2;
 HSPLjava/lang/Throwable;->setStackTrace([Ljava/lang/StackTraceElement;)V
 HSPLjava/lang/Throwable;->toString()Ljava/lang/String;
 HSPLjava/lang/Throwable;->writeObject(Ljava/io/ObjectOutputStream;)V
@@ -25005,7 +25020,7 @@
 HSPLjava/lang/ref/Reference$SinkHolder;->-$$Nest$sfgetfinalize_count()I
 HSPLjava/lang/ref/Reference;-><init>(Ljava/lang/Object;)V
 HSPLjava/lang/ref/Reference;-><init>(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V
-HSPLjava/lang/ref/Reference;->clear()V
+HSPLjava/lang/ref/Reference;->clear()V+]Ljava/lang/ref/Reference;missing_types
 HSPLjava/lang/ref/Reference;->get()Ljava/lang/Object;
 HSPLjava/lang/ref/Reference;->reachabilityFence(Ljava/lang/Object;)V
 HSPLjava/lang/ref/Reference;->refersTo(Ljava/lang/Object;)Z
@@ -25016,7 +25031,7 @@
 HSPLjava/lang/ref/ReferenceQueue;->poll()Ljava/lang/ref/Reference;
 HSPLjava/lang/ref/ReferenceQueue;->reallyPollLocked()Ljava/lang/ref/Reference;
 HSPLjava/lang/ref/ReferenceQueue;->remove()Ljava/lang/ref/Reference;
-HSPLjava/lang/ref/ReferenceQueue;->remove(J)Ljava/lang/ref/Reference;
+HSPLjava/lang/ref/ReferenceQueue;->remove(J)Ljava/lang/ref/Reference;+]Ljava/lang/Object;Ljava/lang/Object;
 HSPLjava/lang/ref/SoftReference;-><init>(Ljava/lang/Object;)V
 HSPLjava/lang/ref/SoftReference;-><init>(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V
 HSPLjava/lang/ref/SoftReference;->get()Ljava/lang/Object;
@@ -25026,10 +25041,10 @@
 HSPLjava/lang/reflect/AccessibleObject;->getAnnotations()[Ljava/lang/annotation/Annotation;
 HSPLjava/lang/reflect/AccessibleObject;->isAccessible()Z
 HSPLjava/lang/reflect/AccessibleObject;->setAccessible(Z)V
-HSPLjava/lang/reflect/AccessibleObject;->setAccessible0(Ljava/lang/reflect/AccessibleObject;Z)V
+HSPLjava/lang/reflect/AccessibleObject;->setAccessible0(Ljava/lang/reflect/AccessibleObject;Z)V+]Ljava/lang/reflect/Constructor;Ljava/lang/reflect/Constructor;
 HSPLjava/lang/reflect/Array;->get(Ljava/lang/Object;I)Ljava/lang/Object;
 HSPLjava/lang/reflect/Array;->getLength(Ljava/lang/Object;)I
-HSPLjava/lang/reflect/Array;->newArray(Ljava/lang/Class;I)Ljava/lang/Object;
+HSPLjava/lang/reflect/Array;->newArray(Ljava/lang/Class;I)Ljava/lang/Object;+]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/lang/reflect/Array;->newInstance(Ljava/lang/Class;I)Ljava/lang/Object;
 HSPLjava/lang/reflect/Array;->newInstance(Ljava/lang/Class;[I)Ljava/lang/Object;
 HSPLjava/lang/reflect/Array;->set(Ljava/lang/Object;ILjava/lang/Object;)V
@@ -25071,11 +25086,11 @@
 HSPLjava/lang/reflect/Field;->getDeclaringClass()Ljava/lang/Class;
 HSPLjava/lang/reflect/Field;->getGenericType()Ljava/lang/reflect/Type;+]Ljava/lang/reflect/Field;Ljava/lang/reflect/Field;]Ljava/lang/Class;Ljava/lang/Class;]Llibcore/reflect/GenericSignatureParser;Llibcore/reflect/GenericSignatureParser;
 HSPLjava/lang/reflect/Field;->getModifiers()I
-HSPLjava/lang/reflect/Field;->getName()Ljava/lang/String;
+HSPLjava/lang/reflect/Field;->getName()Ljava/lang/String;+]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/lang/reflect/Field;->getOffset()I
 HSPLjava/lang/reflect/Field;->getSignatureAttribute()Ljava/lang/String;
 HSPLjava/lang/reflect/Field;->getType()Ljava/lang/Class;
-HSPLjava/lang/reflect/Field;->hashCode()I
+HSPLjava/lang/reflect/Field;->hashCode()I+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/reflect/Field;Ljava/lang/reflect/Field;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/lang/reflect/Field;->isAnnotationPresent(Ljava/lang/Class;)Z
 HSPLjava/lang/reflect/Field;->isEnumConstant()Z
 HSPLjava/lang/reflect/Field;->isSynthetic()Z+]Ljava/lang/reflect/Field;Ljava/lang/reflect/Field;
@@ -25133,7 +25148,7 @@
 HSPLjava/lang/reflect/Proxy;->getMethodsRecursive([Ljava/lang/Class;Ljava/util/List;)V
 HSPLjava/lang/reflect/Proxy;->getProxyClass0(Ljava/lang/ClassLoader;[Ljava/lang/Class;)Ljava/lang/Class;
 HSPLjava/lang/reflect/Proxy;->intersectExceptions([Ljava/lang/Class;[Ljava/lang/Class;)[Ljava/lang/Class;
-HSPLjava/lang/reflect/Proxy;->invoke(Ljava/lang/reflect/Proxy;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/lang/reflect/InvocationHandler;Llibcore/reflect/AnnotationFactory;
+HSPLjava/lang/reflect/Proxy;->invoke(Ljava/lang/reflect/Proxy;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/lang/reflect/InvocationHandler;missing_types
 HSPLjava/lang/reflect/Proxy;->isProxyClass(Ljava/lang/Class;)Z
 HSPLjava/lang/reflect/Proxy;->newProxyInstance(Ljava/lang/ClassLoader;[Ljava/lang/Class;Ljava/lang/reflect/InvocationHandler;)Ljava/lang/Object;
 HSPLjava/lang/reflect/Proxy;->validateReturnTypes(Ljava/util/List;)V
@@ -25202,7 +25217,7 @@
 HSPLjava/math/BigInteger;-><init>(I[I)V
 HSPLjava/math/BigInteger;-><init>(J)V
 HSPLjava/math/BigInteger;-><init>(Ljava/lang/String;)V
-HSPLjava/math/BigInteger;-><init>(Ljava/lang/String;I)V
+HSPLjava/math/BigInteger;-><init>(Ljava/lang/String;I)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/math/BigInteger;-><init>([B)V
 HSPLjava/math/BigInteger;-><init>([BII)V
 HSPLjava/math/BigInteger;-><init>([II)V
@@ -25269,7 +25284,7 @@
 HSPLjava/math/MutableBigInteger;->divide(Ljava/math/MutableBigInteger;Ljava/math/MutableBigInteger;)Ljava/math/MutableBigInteger;
 HSPLjava/math/MutableBigInteger;->divide(Ljava/math/MutableBigInteger;Ljava/math/MutableBigInteger;Z)Ljava/math/MutableBigInteger;
 HSPLjava/math/MutableBigInteger;->divideKnuth(Ljava/math/MutableBigInteger;Ljava/math/MutableBigInteger;)Ljava/math/MutableBigInteger;
-HSPLjava/math/MutableBigInteger;->divideKnuth(Ljava/math/MutableBigInteger;Ljava/math/MutableBigInteger;Z)Ljava/math/MutableBigInteger;
+HSPLjava/math/MutableBigInteger;->divideKnuth(Ljava/math/MutableBigInteger;Ljava/math/MutableBigInteger;Z)Ljava/math/MutableBigInteger;+]Ljava/math/MutableBigInteger;Ljava/math/MutableBigInteger;
 HSPLjava/math/MutableBigInteger;->divideMagnitude(Ljava/math/MutableBigInteger;Ljava/math/MutableBigInteger;Z)Ljava/math/MutableBigInteger;+]Ljava/math/MutableBigInteger;Ljava/math/MutableBigInteger;
 HSPLjava/math/MutableBigInteger;->divideOneWord(ILjava/math/MutableBigInteger;)I
 HSPLjava/math/MutableBigInteger;->getLowestSetBit()I
@@ -25300,10 +25315,10 @@
 HSPLjava/net/AbstractPlainSocketImpl;->doConnect(Ljava/net/InetAddress;II)V
 HSPLjava/net/AbstractPlainSocketImpl;->finalize()V
 HSPLjava/net/AbstractPlainSocketImpl;->getInputStream()Ljava/io/InputStream;
-HSPLjava/net/AbstractPlainSocketImpl;->getOption(I)Ljava/lang/Object;
+HSPLjava/net/AbstractPlainSocketImpl;->getOption(I)Ljava/lang/Object;+]Ljava/net/AbstractPlainSocketImpl;Ljava/net/SocksSocketImpl;
 HSPLjava/net/AbstractPlainSocketImpl;->getOutputStream()Ljava/io/OutputStream;
 HSPLjava/net/AbstractPlainSocketImpl;->getTimeout()I
-HSPLjava/net/AbstractPlainSocketImpl;->isClosedOrPending()Z
+HSPLjava/net/AbstractPlainSocketImpl;->isClosedOrPending()Z+]Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;
 HSPLjava/net/AbstractPlainSocketImpl;->isConnectionReset()Z
 HSPLjava/net/AbstractPlainSocketImpl;->isConnectionResetPending()Z
 HSPLjava/net/AbstractPlainSocketImpl;->listen(I)V
@@ -25360,7 +25375,7 @@
 HSPLjava/net/DatagramSocket;->getImpl()Ljava/net/DatagramSocketImpl;
 HSPLjava/net/DatagramSocket;->isBound()Z
 HSPLjava/net/DatagramSocket;->isClosed()Z
-HSPLjava/net/DatagramSocket;->receive(Ljava/net/DatagramPacket;)V
+HSPLjava/net/DatagramSocket;->receive(Ljava/net/DatagramPacket;)V+]Ljava/net/DatagramSocket;Ljava/net/MulticastSocket;]Ljava/net/DatagramSocketImpl;Ljava/net/PlainDatagramSocketImpl;
 HSPLjava/net/DatagramSocket;->send(Ljava/net/DatagramPacket;)V
 HSPLjava/net/DatagramSocket;->setReuseAddress(Z)V
 HSPLjava/net/DatagramSocket;->setSoTimeout(I)V
@@ -25413,19 +25428,19 @@
 HSPLjava/net/InMemoryCookieStore;-><init>()V
 HSPLjava/net/InMemoryCookieStore;-><init>(I)V
 HSPLjava/net/InMemoryCookieStore;->add(Ljava/net/URI;Ljava/net/HttpCookie;)V+]Ljava/util/concurrent/locks/ReentrantLock;Ljava/util/concurrent/locks/ReentrantLock;
-HSPLjava/net/InMemoryCookieStore;->addIndex(Ljava/util/Map;Ljava/lang/Object;Ljava/net/HttpCookie;)V
+HSPLjava/net/InMemoryCookieStore;->addIndex(Ljava/util/Map;Ljava/lang/Object;Ljava/net/HttpCookie;)V+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Map;Ljava/util/HashMap;
 HSPLjava/net/InMemoryCookieStore;->get(Ljava/net/URI;)Ljava/util/List;
 HSPLjava/net/InMemoryCookieStore;->getEffectiveURI(Ljava/net/URI;)Ljava/net/URI;
 HSPLjava/net/InMemoryCookieStore;->getInternal1(Ljava/util/List;Ljava/util/Map;Ljava/lang/String;)V
 HSPLjava/net/InMemoryCookieStore;->getInternal2(Ljava/util/List;Ljava/util/Map;Ljava/lang/Comparable;)V
 HSPLjava/net/InMemoryCookieStore;->netscapeDomainMatches(Ljava/lang/String;Ljava/lang/String;)Z+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/net/Inet4Address;-><init>()V
-HSPLjava/net/Inet4Address;-><init>(Ljava/lang/String;[B)V
-HSPLjava/net/Inet4Address;->equals(Ljava/lang/Object;)Z
+HSPLjava/net/Inet4Address;-><init>(Ljava/lang/String;[B)V+]Ljava/net/Inet4Address;Ljava/net/Inet4Address;
+HSPLjava/net/Inet4Address;->equals(Ljava/lang/Object;)Z+]Ljava/net/Inet4Address;Ljava/net/Inet4Address;]Ljava/net/InetAddress;Ljava/net/Inet4Address;]Ljava/net/InetAddress$InetAddressHolder;Ljava/net/InetAddress$InetAddressHolder;
 HSPLjava/net/Inet4Address;->getAddress()[B
 HSPLjava/net/Inet4Address;->getHostAddress()Ljava/lang/String;
 HSPLjava/net/Inet4Address;->hashCode()I
-HSPLjava/net/Inet4Address;->isAnyLocalAddress()Z
+HSPLjava/net/Inet4Address;->isAnyLocalAddress()Z+]Ljava/net/Inet4Address;Ljava/net/Inet4Address;]Ljava/net/InetAddress$InetAddressHolder;Ljava/net/InetAddress$InetAddressHolder;
 HSPLjava/net/Inet4Address;->isLinkLocalAddress()Z
 HSPLjava/net/Inet4Address;->isLoopbackAddress()Z
 HSPLjava/net/Inet4Address;->isMulticastAddress()Z
@@ -25434,13 +25449,13 @@
 HSPLjava/net/Inet6Address$Inet6AddressHolder;-><init>(Ljava/net/Inet6Address;Ljava/net/Inet6Address$Inet6AddressHolder-IA;)V
 HSPLjava/net/Inet6Address$Inet6AddressHolder;->equals(Ljava/lang/Object;)Z
 HSPLjava/net/Inet6Address$Inet6AddressHolder;->hashCode()I
-HSPLjava/net/Inet6Address$Inet6AddressHolder;->init([BI)V
+HSPLjava/net/Inet6Address$Inet6AddressHolder;->init([BI)V+]Ljava/net/Inet6Address$Inet6AddressHolder;Ljava/net/Inet6Address$Inet6AddressHolder;
 HSPLjava/net/Inet6Address$Inet6AddressHolder;->isAnyLocalAddress()Z
 HSPLjava/net/Inet6Address$Inet6AddressHolder;->isLinkLocalAddress()Z
 HSPLjava/net/Inet6Address$Inet6AddressHolder;->isLoopbackAddress()Z
 HSPLjava/net/Inet6Address$Inet6AddressHolder;->isMulticastAddress()Z
 HSPLjava/net/Inet6Address$Inet6AddressHolder;->setAddr([B)V
-HSPLjava/net/Inet6Address;-><init>(Ljava/lang/String;[BI)V
+HSPLjava/net/Inet6Address;-><init>(Ljava/lang/String;[BI)V+]Ljava/net/Inet6Address$Inet6AddressHolder;Ljava/net/Inet6Address$Inet6AddressHolder;]Ljava/net/InetAddress$InetAddressHolder;Ljava/net/InetAddress$InetAddressHolder;
 HSPLjava/net/Inet6Address;->equals(Ljava/lang/Object;)Z
 HSPLjava/net/Inet6Address;->getAddress()[B
 HSPLjava/net/Inet6Address;->getByAddress(Ljava/lang/String;[BI)Ljava/net/Inet6Address;
@@ -25465,12 +25480,12 @@
 HSPLjava/net/InetAddress;->getByAddress(Ljava/lang/String;[B)Ljava/net/InetAddress;
 HSPLjava/net/InetAddress;->getByAddress(Ljava/lang/String;[BI)Ljava/net/InetAddress;
 HSPLjava/net/InetAddress;->getByAddress([B)Ljava/net/InetAddress;
-HSPLjava/net/InetAddress;->getByName(Ljava/lang/String;)Ljava/net/InetAddress;
+HSPLjava/net/InetAddress;->getByName(Ljava/lang/String;)Ljava/net/InetAddress;+]Ljava/net/InetAddressImpl;Ljava/net/Inet6AddressImpl;
 HSPLjava/net/InetAddress;->getHostName()Ljava/lang/String;
 HSPLjava/net/InetAddress;->holder()Ljava/net/InetAddress$InetAddressHolder;
 HSPLjava/net/InetAddress;->toString()Ljava/lang/String;
 HSPLjava/net/InetSocketAddress$InetSocketAddressHolder;-><init>(Ljava/lang/String;Ljava/net/InetAddress;I)V
-HSPLjava/net/InetSocketAddress$InetSocketAddressHolder;->equals(Ljava/lang/Object;)Z
+HSPLjava/net/InetSocketAddress$InetSocketAddressHolder;->equals(Ljava/lang/Object;)Z+]Ljava/net/InetAddress;Ljava/net/Inet4Address;
 HSPLjava/net/InetSocketAddress$InetSocketAddressHolder;->getAddress()Ljava/net/InetAddress;
 HSPLjava/net/InetSocketAddress$InetSocketAddressHolder;->getHostName()Ljava/lang/String;
 HSPLjava/net/InetSocketAddress$InetSocketAddressHolder;->getHostString()Ljava/lang/String;
@@ -25486,7 +25501,7 @@
 HSPLjava/net/InetSocketAddress;->checkHost(Ljava/lang/String;)Ljava/lang/String;
 HSPLjava/net/InetSocketAddress;->checkPort(I)I
 HSPLjava/net/InetSocketAddress;->createUnresolved(Ljava/lang/String;I)Ljava/net/InetSocketAddress;
-HSPLjava/net/InetSocketAddress;->equals(Ljava/lang/Object;)Z
+HSPLjava/net/InetSocketAddress;->equals(Ljava/lang/Object;)Z+]Ljava/net/InetSocketAddress$InetSocketAddressHolder;Ljava/net/InetSocketAddress$InetSocketAddressHolder;
 HSPLjava/net/InetSocketAddress;->getAddress()Ljava/net/InetAddress;
 HSPLjava/net/InetSocketAddress;->getHostName()Ljava/lang/String;
 HSPLjava/net/InetSocketAddress;->getHostString()Ljava/lang/String;
@@ -25505,7 +25520,7 @@
 HSPLjava/net/NetworkInterface$1checkedAddresses;->nextElement()Ljava/lang/Object;
 HSPLjava/net/NetworkInterface$1checkedAddresses;->nextElement()Ljava/net/InetAddress;
 HSPLjava/net/NetworkInterface;-><init>(Ljava/lang/String;I[Ljava/net/InetAddress;)V
-HSPLjava/net/NetworkInterface;->getAll()[Ljava/net/NetworkInterface;
+HSPLjava/net/NetworkInterface;->getAll()[Ljava/net/NetworkInterface;+]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;]Ljava/net/NetworkInterface;Ljava/net/NetworkInterface;]Llibcore/io/Os;Landroid/app/ActivityThread$AndroidOs;]Ljava/util/Collection;Ljava/util/HashMap$Values;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;,Ljava/util/ArrayList$Itr;]Ljava/util/Set;Ljava/util/HashMap$EntrySet;
 HSPLjava/net/NetworkInterface;->getByName(Ljava/lang/String;)Ljava/net/NetworkInterface;+]Ljava/net/NetworkInterface;Ljava/net/NetworkInterface;
 HSPLjava/net/NetworkInterface;->getFlags()I
 HSPLjava/net/NetworkInterface;->getHardwareAddress()[B
@@ -25523,7 +25538,7 @@
 HSPLjava/net/PlainDatagramSocketImpl;->bind0(ILjava/net/InetAddress;)V
 HSPLjava/net/PlainDatagramSocketImpl;->datagramSocketClose()V
 HSPLjava/net/PlainDatagramSocketImpl;->datagramSocketCreate()V
-HSPLjava/net/PlainDatagramSocketImpl;->doRecv(Ljava/net/DatagramPacket;I)V
+HSPLjava/net/PlainDatagramSocketImpl;->doRecv(Ljava/net/DatagramPacket;I)V+]Ljava/net/DatagramPacket;Ljava/net/DatagramPacket;]Ljava/net/PlainDatagramSocketImpl;Ljava/net/PlainDatagramSocketImpl;
 HSPLjava/net/PlainDatagramSocketImpl;->receive0(Ljava/net/DatagramPacket;)V
 HSPLjava/net/PlainDatagramSocketImpl;->send(Ljava/net/DatagramPacket;)V
 HSPLjava/net/PlainDatagramSocketImpl;->socketSetOption(ILjava/lang/Object;)V
@@ -25579,7 +25594,7 @@
 HSPLjava/net/Socket;->connect(Ljava/net/SocketAddress;I)V
 HSPLjava/net/Socket;->createImpl(Z)V
 HSPLjava/net/Socket;->getFileDescriptor$()Ljava/io/FileDescriptor;
-HSPLjava/net/Socket;->getImpl()Ljava/net/SocketImpl;
+HSPLjava/net/Socket;->getImpl()Ljava/net/SocketImpl;+]Ljava/net/Socket;Ljava/net/Socket;
 HSPLjava/net/Socket;->getInetAddress()Ljava/net/InetAddress;
 HSPLjava/net/Socket;->getInputStream()Ljava/io/InputStream;
 HSPLjava/net/Socket;->getLocalAddress()Ljava/net/InetAddress;
@@ -25589,7 +25604,7 @@
 HSPLjava/net/Socket;->getPort()I
 HSPLjava/net/Socket;->getRemoteSocketAddress()Ljava/net/SocketAddress;
 HSPLjava/net/Socket;->getReuseAddress()Z
-HSPLjava/net/Socket;->getSoTimeout()I
+HSPLjava/net/Socket;->getSoTimeout()I+]Ljava/net/SocketImpl;Ljava/net/SocksSocketImpl;]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/net/Socket;Ljava/net/Socket;
 HSPLjava/net/Socket;->isBound()Z
 HSPLjava/net/Socket;->isClosed()Z
 HSPLjava/net/Socket;->isConnected()Z
@@ -25616,11 +25631,11 @@
 HSPLjava/net/SocketInputStream;-><init>(Ljava/net/AbstractPlainSocketImpl;)V
 HSPLjava/net/SocketInputStream;->finalize()V
 HSPLjava/net/SocketInputStream;->read([BII)I
-HSPLjava/net/SocketInputStream;->read([BIII)I
+HSPLjava/net/SocketInputStream;->read([BIII)I+]Ljava/net/AbstractPlainSocketImpl;Ljava/net/SocksSocketImpl;]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;
 HSPLjava/net/SocketInputStream;->socketRead(Ljava/io/FileDescriptor;[BIII)I
 HSPLjava/net/SocketOutputStream;-><init>(Ljava/net/AbstractPlainSocketImpl;)V
 HSPLjava/net/SocketOutputStream;->finalize()V
-HSPLjava/net/SocketOutputStream;->socketWrite([BII)V
+HSPLjava/net/SocketOutputStream;->socketWrite([BII)V+]Ljava/net/AbstractPlainSocketImpl;Ljava/net/SocksSocketImpl;]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;
 HSPLjava/net/SocketOutputStream;->write([BII)V
 HSPLjava/net/SocketTimeoutException;-><init>(Ljava/lang/String;)V
 HSPLjava/net/SocksSocketImpl;-><init>()V
@@ -25705,7 +25720,7 @@
 HSPLjava/net/URL;-><init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)V
 HSPLjava/net/URL;-><init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/net/URLStreamHandler;)V
 HSPLjava/net/URL;-><init>(Ljava/net/URL;Ljava/lang/String;)V
-HSPLjava/net/URL;-><init>(Ljava/net/URL;Ljava/lang/String;Ljava/net/URLStreamHandler;)V
+HSPLjava/net/URL;-><init>(Ljava/net/URL;Ljava/lang/String;Ljava/net/URLStreamHandler;)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/net/URLStreamHandler;Lcom/android/okhttp/HttpsHandler;,Lsun/net/www/protocol/file/Handler;
 HSPLjava/net/URL;->createBuiltinHandler(Ljava/lang/String;)Ljava/net/URLStreamHandler;
 HSPLjava/net/URL;->getAuthority()Ljava/lang/String;
 HSPLjava/net/URL;->getFile()Ljava/lang/String;
@@ -25744,9 +25759,9 @@
 HSPLjava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLjava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/nio/charset/Charset;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;]Ljava/util/BitSet;Ljava/util/BitSet;]Ljava/io/CharArrayWriter;Ljava/io/CharArrayWriter;
 HSPLjava/net/URLStreamHandler;-><init>()V
-HSPLjava/net/URLStreamHandler;->parseURL(Ljava/net/URL;Ljava/lang/String;II)V
+HSPLjava/net/URLStreamHandler;->parseURL(Ljava/net/URL;Ljava/lang/String;II)V+]Ljava/net/URLStreamHandler;Lcom/android/okhttp/HttpsHandler;,Lsun/net/www/protocol/file/Handler;]Ljava/lang/String;Ljava/lang/String;]Ljava/net/URL;Ljava/net/URL;
 HSPLjava/net/URLStreamHandler;->setURL(Ljava/net/URL;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-HSPLjava/net/URLStreamHandler;->toExternalForm(Ljava/net/URL;)Ljava/lang/String;
+HSPLjava/net/URLStreamHandler;->toExternalForm(Ljava/net/URL;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/net/URL;Ljava/net/URL;
 HSPLjava/net/UnknownHostException;-><init>(Ljava/lang/String;)V
 HSPLjava/nio/Bits;->byteOrder()Ljava/nio/ByteOrder;
 HSPLjava/nio/Bits;->char0(C)B
@@ -25754,10 +25769,10 @@
 HSPLjava/nio/Bits;->getFloat(Ljava/nio/ByteBuffer;IZ)F
 HSPLjava/nio/Bits;->getFloatL(Ljava/nio/ByteBuffer;I)F
 HSPLjava/nio/Bits;->getInt(Ljava/nio/ByteBuffer;IZ)I
-HSPLjava/nio/Bits;->getIntB(Ljava/nio/ByteBuffer;I)I
+HSPLjava/nio/Bits;->getIntB(Ljava/nio/ByteBuffer;I)I+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/Bits;->getIntL(Ljava/nio/ByteBuffer;I)I+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/Bits;->getLong(Ljava/nio/ByteBuffer;IZ)J
-HSPLjava/nio/Bits;->getLongB(Ljava/nio/ByteBuffer;I)J
+HSPLjava/nio/Bits;->getLongB(Ljava/nio/ByteBuffer;I)J+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/Bits;->getLongL(Ljava/nio/ByteBuffer;I)J+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/Bits;->getShort(Ljava/nio/ByteBuffer;IZ)S
 HSPLjava/nio/Bits;->getShortB(Ljava/nio/ByteBuffer;I)S+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
@@ -25781,13 +25796,13 @@
 HSPLjava/nio/Bits;->pageSize()I
 HSPLjava/nio/Bits;->putChar(Ljava/nio/ByteBuffer;ICZ)V
 HSPLjava/nio/Bits;->putCharB(Ljava/nio/ByteBuffer;IC)V
-HSPLjava/nio/Bits;->putCharL(Ljava/nio/ByteBuffer;IC)V
+HSPLjava/nio/Bits;->putCharL(Ljava/nio/ByteBuffer;IC)V+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/Bits;->putFloat(Ljava/nio/ByteBuffer;IFZ)V
 HSPLjava/nio/Bits;->putInt(Ljava/nio/ByteBuffer;IIZ)V
-HSPLjava/nio/Bits;->putIntB(Ljava/nio/ByteBuffer;II)V
+HSPLjava/nio/Bits;->putIntB(Ljava/nio/ByteBuffer;II)V+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/Bits;->putIntL(Ljava/nio/ByteBuffer;II)V+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/Bits;->putLong(Ljava/nio/ByteBuffer;IJZ)V
-HSPLjava/nio/Bits;->putLongB(Ljava/nio/ByteBuffer;IJ)V
+HSPLjava/nio/Bits;->putLongB(Ljava/nio/ByteBuffer;IJ)V+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/Bits;->putLongL(Ljava/nio/ByteBuffer;IJ)V+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/Bits;->putShort(Ljava/nio/ByteBuffer;ISZ)V
 HSPLjava/nio/Bits;->putShortB(Ljava/nio/ByteBuffer;IS)V+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
@@ -25828,9 +25843,9 @@
 HSPLjava/nio/ByteBuffer;->compare(BB)I
 HSPLjava/nio/ByteBuffer;->compareTo(Ljava/nio/ByteBuffer;)I+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;,Ljava/nio/DirectByteBuffer;
 HSPLjava/nio/ByteBuffer;->equals(BB)Z
-HSPLjava/nio/ByteBuffer;->equals(Ljava/lang/Object;)Z
+HSPLjava/nio/ByteBuffer;->equals(Ljava/lang/Object;)Z+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;,Ljava/nio/DirectByteBuffer;
 HSPLjava/nio/ByteBuffer;->flip()Ljava/nio/Buffer;
-HSPLjava/nio/ByteBuffer;->get([B)Ljava/nio/ByteBuffer;
+HSPLjava/nio/ByteBuffer;->get([B)Ljava/nio/ByteBuffer;+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;,Ljava/nio/DirectByteBuffer;
 HSPLjava/nio/ByteBuffer;->hasArray()Z
 HSPLjava/nio/ByteBuffer;->hashCode()I+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;,Ljava/nio/DirectByteBuffer;
 HSPLjava/nio/ByteBuffer;->limit(I)Ljava/nio/Buffer;
@@ -25839,14 +25854,14 @@
 HSPLjava/nio/ByteBuffer;->order(Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer;
 HSPLjava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;
 HSPLjava/nio/ByteBuffer;->put(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;,Ljava/nio/DirectByteBuffer;
-HSPLjava/nio/ByteBuffer;->put([B)Ljava/nio/ByteBuffer;
+HSPLjava/nio/ByteBuffer;->put([B)Ljava/nio/ByteBuffer;+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;,Ljava/nio/DirectByteBuffer;
 HSPLjava/nio/ByteBuffer;->reset()Ljava/nio/Buffer;
 HSPLjava/nio/ByteBuffer;->rewind()Ljava/nio/Buffer;
 HSPLjava/nio/ByteBuffer;->wrap([B)Ljava/nio/ByteBuffer;
 HSPLjava/nio/ByteBuffer;->wrap([BII)Ljava/nio/ByteBuffer;
 HSPLjava/nio/ByteBufferAsCharBuffer;-><init>(Ljava/nio/ByteBuffer;IIIIILjava/nio/ByteOrder;)V
 HSPLjava/nio/ByteBufferAsCharBuffer;->duplicate()Ljava/nio/CharBuffer;
-HSPLjava/nio/ByteBufferAsCharBuffer;->get(I)C
+HSPLjava/nio/ByteBufferAsCharBuffer;->get(I)C+]Ljava/nio/ByteBuffer;Ljava/nio/DirectByteBuffer;]Ljava/nio/ByteBufferAsCharBuffer;Ljava/nio/ByteBufferAsCharBuffer;
 HSPLjava/nio/ByteBufferAsCharBuffer;->get([CII)Ljava/nio/CharBuffer;
 HSPLjava/nio/ByteBufferAsCharBuffer;->isDirect()Z
 HSPLjava/nio/ByteBufferAsCharBuffer;->ix(I)I
@@ -25864,7 +25879,7 @@
 HSPLjava/nio/ByteBufferAsLongBuffer;-><init>(Ljava/nio/ByteBuffer;IIIIILjava/nio/ByteOrder;)V
 HSPLjava/nio/ByteBufferAsLongBuffer;->get([JII)Ljava/nio/LongBuffer;
 HSPLjava/nio/ByteBufferAsLongBuffer;->ix(I)I
-HSPLjava/nio/ByteBufferAsShortBuffer;-><init>(Ljava/nio/ByteBuffer;IIIIILjava/nio/ByteOrder;)V
+HSPLjava/nio/ByteBufferAsShortBuffer;-><init>(Ljava/nio/ByteBuffer;IIIIILjava/nio/ByteOrder;)V+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;,Ljava/nio/DirectByteBuffer;
 HSPLjava/nio/ByteBufferAsShortBuffer;->get([SII)Ljava/nio/ShortBuffer;
 HSPLjava/nio/ByteBufferAsShortBuffer;->ix(I)I
 HSPLjava/nio/ByteBufferAsShortBuffer;->put([SII)Ljava/nio/ShortBuffer;
@@ -25874,16 +25889,16 @@
 HSPLjava/nio/CharBuffer;->allocate(I)Ljava/nio/CharBuffer;
 HSPLjava/nio/CharBuffer;->array()[C
 HSPLjava/nio/CharBuffer;->arrayOffset()I
-HSPLjava/nio/CharBuffer;->charAt(I)C
+HSPLjava/nio/CharBuffer;->charAt(I)C+]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;,Ljava/nio/ByteBufferAsCharBuffer;
 HSPLjava/nio/CharBuffer;->clear()Ljava/nio/Buffer;
 HSPLjava/nio/CharBuffer;->flip()Ljava/nio/Buffer;
 HSPLjava/nio/CharBuffer;->get([C)Ljava/nio/CharBuffer;
 HSPLjava/nio/CharBuffer;->get([CII)Ljava/nio/CharBuffer;
 HSPLjava/nio/CharBuffer;->hasArray()Z
-HSPLjava/nio/CharBuffer;->length()I
+HSPLjava/nio/CharBuffer;->length()I+]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;
 HSPLjava/nio/CharBuffer;->limit(I)Ljava/nio/Buffer;
 HSPLjava/nio/CharBuffer;->position(I)Ljava/nio/Buffer;
-HSPLjava/nio/CharBuffer;->toString()Ljava/lang/String;+]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;
+HSPLjava/nio/CharBuffer;->toString()Ljava/lang/String;+]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;,Ljava/nio/ByteBufferAsCharBuffer;
 HSPLjava/nio/CharBuffer;->wrap(Ljava/lang/CharSequence;)Ljava/nio/CharBuffer;
 HSPLjava/nio/CharBuffer;->wrap(Ljava/lang/CharSequence;II)Ljava/nio/CharBuffer;
 HSPLjava/nio/CharBuffer;->wrap([C)Ljava/nio/CharBuffer;
@@ -25902,8 +25917,8 @@
 HSPLjava/nio/DirectByteBuffer;->asReadOnlyBuffer()Ljava/nio/ByteBuffer;
 HSPLjava/nio/DirectByteBuffer;->asShortBuffer()Ljava/nio/ShortBuffer;
 HSPLjava/nio/DirectByteBuffer;->cleaner()Lsun/misc/Cleaner;
-HSPLjava/nio/DirectByteBuffer;->duplicate()Ljava/nio/ByteBuffer;
-HSPLjava/nio/DirectByteBuffer;->get()B
+HSPLjava/nio/DirectByteBuffer;->duplicate()Ljava/nio/ByteBuffer;+]Ljava/nio/DirectByteBuffer;Ljava/nio/DirectByteBuffer;
+HSPLjava/nio/DirectByteBuffer;->get()B+]Ljava/nio/DirectByteBuffer;Ljava/nio/DirectByteBuffer;
 HSPLjava/nio/DirectByteBuffer;->get(I)B+]Ljava/nio/DirectByteBuffer;Ljava/nio/DirectByteBuffer;
 HSPLjava/nio/DirectByteBuffer;->get(J)B
 HSPLjava/nio/DirectByteBuffer;->get([BII)Ljava/nio/ByteBuffer;+]Ljava/nio/DirectByteBuffer;Ljava/nio/DirectByteBuffer;
@@ -25953,12 +25968,12 @@
 HSPLjava/nio/HeapByteBuffer;-><init>([BIIZ)V
 HSPLjava/nio/HeapByteBuffer;->_get(I)B
 HSPLjava/nio/HeapByteBuffer;->_put(IB)V
-HSPLjava/nio/HeapByteBuffer;->asIntBuffer()Ljava/nio/IntBuffer;
+HSPLjava/nio/HeapByteBuffer;->asIntBuffer()Ljava/nio/IntBuffer;+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/HeapByteBuffer;->asLongBuffer()Ljava/nio/LongBuffer;
 HSPLjava/nio/HeapByteBuffer;->asReadOnlyBuffer()Ljava/nio/ByteBuffer;+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/HeapByteBuffer;->asShortBuffer()Ljava/nio/ShortBuffer;
 HSPLjava/nio/HeapByteBuffer;->compact()Ljava/nio/ByteBuffer;+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
-HSPLjava/nio/HeapByteBuffer;->duplicate()Ljava/nio/ByteBuffer;
+HSPLjava/nio/HeapByteBuffer;->duplicate()Ljava/nio/ByteBuffer;+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/HeapByteBuffer;->get()B+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/HeapByteBuffer;->get(I)B+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/HeapByteBuffer;->get([BII)Ljava/nio/ByteBuffer;+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
@@ -25975,10 +25990,10 @@
 HSPLjava/nio/HeapByteBuffer;->isDirect()Z
 HSPLjava/nio/HeapByteBuffer;->isReadOnly()Z
 HSPLjava/nio/HeapByteBuffer;->ix(I)I
-HSPLjava/nio/HeapByteBuffer;->put(B)Ljava/nio/ByteBuffer;
+HSPLjava/nio/HeapByteBuffer;->put(B)Ljava/nio/ByteBuffer;+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/HeapByteBuffer;->put(IB)Ljava/nio/ByteBuffer;+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/HeapByteBuffer;->put([BII)Ljava/nio/ByteBuffer;+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
-HSPLjava/nio/HeapByteBuffer;->putChar(C)Ljava/nio/ByteBuffer;
+HSPLjava/nio/HeapByteBuffer;->putChar(C)Ljava/nio/ByteBuffer;+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/HeapByteBuffer;->putFloat(F)Ljava/nio/ByteBuffer;+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/HeapByteBuffer;->putInt(I)Ljava/nio/ByteBuffer;+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLjava/nio/HeapByteBuffer;->putInt(II)Ljava/nio/ByteBuffer;+]Ljava/nio/HeapByteBuffer;Ljava/nio/HeapByteBuffer;
@@ -25992,9 +26007,9 @@
 HSPLjava/nio/HeapCharBuffer;-><init>([CII)V
 HSPLjava/nio/HeapCharBuffer;-><init>([CIIIIIZ)V
 HSPLjava/nio/HeapCharBuffer;-><init>([CIIZ)V
-HSPLjava/nio/HeapCharBuffer;->get(I)C
+HSPLjava/nio/HeapCharBuffer;->get(I)C+]Ljava/nio/HeapCharBuffer;Ljava/nio/HeapCharBuffer;
 HSPLjava/nio/HeapCharBuffer;->ix(I)I
-HSPLjava/nio/HeapCharBuffer;->put(Ljava/nio/CharBuffer;)Ljava/nio/CharBuffer;+]Ljava/nio/HeapCharBuffer;Ljava/nio/HeapCharBuffer;
+HSPLjava/nio/HeapCharBuffer;->put(Ljava/nio/CharBuffer;)Ljava/nio/CharBuffer;+]Ljava/nio/HeapCharBuffer;Ljava/nio/HeapCharBuffer;]Ljava/nio/CharBuffer;Ljava/nio/ByteBufferAsCharBuffer;
 HSPLjava/nio/HeapCharBuffer;->put([CII)Ljava/nio/CharBuffer;
 HSPLjava/nio/HeapCharBuffer;->slice()Ljava/nio/CharBuffer;
 HSPLjava/nio/HeapCharBuffer;->toString(II)Ljava/lang/String;
@@ -26023,7 +26038,7 @@
 HSPLjava/nio/MappedByteBuffer;->mappingOffset()J
 HSPLjava/nio/NIOAccess;->getBaseArray(Ljava/nio/Buffer;)Ljava/lang/Object;
 HSPLjava/nio/NIOAccess;->getBaseArrayOffset(Ljava/nio/Buffer;)I
-HSPLjava/nio/NioUtils;->freeDirectBuffer(Ljava/nio/ByteBuffer;)V
+HSPLjava/nio/NioUtils;->freeDirectBuffer(Ljava/nio/ByteBuffer;)V+]Ljava/nio/DirectByteBuffer$MemoryRef;Ljava/nio/DirectByteBuffer$MemoryRef;
 HSPLjava/nio/ShortBuffer;-><init>(IIII)V
 HSPLjava/nio/ShortBuffer;-><init>(IIII[SI)V
 HSPLjava/nio/ShortBuffer;->get([S)Ljava/nio/ShortBuffer;
@@ -26034,7 +26049,7 @@
 HSPLjava/nio/channels/Channels$1;-><init>(Ljava/nio/channels/WritableByteChannel;)V
 HSPLjava/nio/channels/Channels$1;->write([BII)V
 HSPLjava/nio/channels/Channels$WritableByteChannelImpl;-><init>(Ljava/io/OutputStream;)V
-HSPLjava/nio/channels/Channels$WritableByteChannelImpl;->write(Ljava/nio/ByteBuffer;)I
+HSPLjava/nio/channels/Channels$WritableByteChannelImpl;->write(Ljava/nio/ByteBuffer;)I+]Ljava/nio/channels/Channels$WritableByteChannelImpl;Ljava/nio/channels/Channels$WritableByteChannelImpl;]Ljava/nio/ByteBuffer;Ljava/nio/DirectByteBuffer;
 HSPLjava/nio/channels/Channels;->newChannel(Ljava/io/OutputStream;)Ljava/nio/channels/WritableByteChannel;
 HSPLjava/nio/channels/Channels;->newInputStream(Ljava/nio/channels/ReadableByteChannel;)Ljava/io/InputStream;
 HSPLjava/nio/channels/Channels;->newOutputStream(Ljava/nio/channels/WritableByteChannel;)Ljava/io/OutputStream;
@@ -26060,9 +26075,9 @@
 HSPLjava/nio/channels/SocketChannel;->validOps()I
 HSPLjava/nio/channels/spi/AbstractInterruptibleChannel$1;-><init>(Ljava/nio/channels/spi/AbstractInterruptibleChannel;)V
 HSPLjava/nio/channels/spi/AbstractInterruptibleChannel;-><init>()V
-HSPLjava/nio/channels/spi/AbstractInterruptibleChannel;->begin()V+]Ljava/lang/Thread;Landroid/os/HandlerThread;
-HSPLjava/nio/channels/spi/AbstractInterruptibleChannel;->blockedOn(Lsun/nio/ch/Interruptible;)V+]Ljava/lang/Thread;Landroid/os/HandlerThread;
-HSPLjava/nio/channels/spi/AbstractInterruptibleChannel;->close()V
+HSPLjava/nio/channels/spi/AbstractInterruptibleChannel;->begin()V+]Ljava/lang/Thread;missing_types
+HSPLjava/nio/channels/spi/AbstractInterruptibleChannel;->blockedOn(Lsun/nio/ch/Interruptible;)V+]Ljava/lang/Thread;Ljava/lang/Thread;,Landroid/os/HandlerThread;
+HSPLjava/nio/channels/spi/AbstractInterruptibleChannel;->close()V+]Ljava/nio/channels/spi/AbstractInterruptibleChannel;Lsun/nio/ch/FileChannelImpl;
 HSPLjava/nio/channels/spi/AbstractInterruptibleChannel;->end(Z)V
 HSPLjava/nio/channels/spi/AbstractInterruptibleChannel;->isOpen()Z
 HSPLjava/nio/channels/spi/AbstractSelectableChannel;-><init>(Ljava/nio/channels/spi/SelectorProvider;)V
@@ -26114,20 +26129,20 @@
 HSPLjava/nio/charset/CharsetDecoder;-><init>(Ljava/nio/charset/Charset;FFLjava/lang/String;)V
 HSPLjava/nio/charset/CharsetDecoder;->averageCharsPerByte()F
 HSPLjava/nio/charset/CharsetDecoder;->charset()Ljava/nio/charset/Charset;
-HSPLjava/nio/charset/CharsetDecoder;->decode(Ljava/nio/ByteBuffer;)Ljava/nio/CharBuffer;
-HSPLjava/nio/charset/CharsetDecoder;->decode(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;Z)Ljava/nio/charset/CoderResult;
-HSPLjava/nio/charset/CharsetDecoder;->flush(Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;
+HSPLjava/nio/charset/CharsetDecoder;->decode(Ljava/nio/ByteBuffer;)Ljava/nio/CharBuffer;+]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;]Ljava/nio/charset/CoderResult;Ljava/nio/charset/CoderResult;]Ljava/nio/charset/CharsetDecoder;Lcom/android/icu/charset/CharsetDecoderICU;
+HSPLjava/nio/charset/CharsetDecoder;->decode(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;Z)Ljava/nio/charset/CoderResult;+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;]Ljava/nio/charset/CoderResult;Ljava/nio/charset/CoderResult;]Ljava/nio/charset/CharsetDecoder;Lcom/android/icu/charset/CharsetDecoderICU;
+HSPLjava/nio/charset/CharsetDecoder;->flush(Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;+]Ljava/nio/charset/CoderResult;Ljava/nio/charset/CoderResult;]Ljava/nio/charset/CharsetDecoder;Lcom/android/icu/charset/CharsetDecoderICU;
 HSPLjava/nio/charset/CharsetDecoder;->implFlush(Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;
 HSPLjava/nio/charset/CharsetDecoder;->implOnMalformedInput(Ljava/nio/charset/CodingErrorAction;)V
 HSPLjava/nio/charset/CharsetDecoder;->implOnUnmappableCharacter(Ljava/nio/charset/CodingErrorAction;)V
 HSPLjava/nio/charset/CharsetDecoder;->implReset()V
 HSPLjava/nio/charset/CharsetDecoder;->malformedInputAction()Ljava/nio/charset/CodingErrorAction;
 HSPLjava/nio/charset/CharsetDecoder;->maxCharsPerByte()F
-HSPLjava/nio/charset/CharsetDecoder;->onMalformedInput(Ljava/nio/charset/CodingErrorAction;)Ljava/nio/charset/CharsetDecoder;
-HSPLjava/nio/charset/CharsetDecoder;->onUnmappableCharacter(Ljava/nio/charset/CodingErrorAction;)Ljava/nio/charset/CharsetDecoder;
-HSPLjava/nio/charset/CharsetDecoder;->replaceWith(Ljava/lang/String;)Ljava/nio/charset/CharsetDecoder;
+HSPLjava/nio/charset/CharsetDecoder;->onMalformedInput(Ljava/nio/charset/CodingErrorAction;)Ljava/nio/charset/CharsetDecoder;+]Ljava/nio/charset/CharsetDecoder;Lcom/android/icu/charset/CharsetDecoderICU;
+HSPLjava/nio/charset/CharsetDecoder;->onUnmappableCharacter(Ljava/nio/charset/CodingErrorAction;)Ljava/nio/charset/CharsetDecoder;+]Ljava/nio/charset/CharsetDecoder;Lcom/android/icu/charset/CharsetDecoderICU;
+HSPLjava/nio/charset/CharsetDecoder;->replaceWith(Ljava/lang/String;)Ljava/nio/charset/CharsetDecoder;+]Ljava/nio/charset/CharsetDecoder;Lcom/android/icu/charset/CharsetDecoderICU;
 HSPLjava/nio/charset/CharsetDecoder;->replacement()Ljava/lang/String;
-HSPLjava/nio/charset/CharsetDecoder;->reset()Ljava/nio/charset/CharsetDecoder;
+HSPLjava/nio/charset/CharsetDecoder;->reset()Ljava/nio/charset/CharsetDecoder;+]Ljava/nio/charset/CharsetDecoder;Lcom/android/icu/charset/CharsetDecoderICU;
 HSPLjava/nio/charset/CharsetDecoder;->unmappableCharacterAction()Ljava/nio/charset/CodingErrorAction;
 HSPLjava/nio/charset/CharsetEncoder;-><init>(Ljava/nio/charset/Charset;FF)V
 HSPLjava/nio/charset/CharsetEncoder;-><init>(Ljava/nio/charset/Charset;FF[B)V
@@ -26137,8 +26152,8 @@
 HSPLjava/nio/charset/CharsetEncoder;->canEncode(Ljava/nio/CharBuffer;)Z
 HSPLjava/nio/charset/CharsetEncoder;->charset()Ljava/nio/charset/Charset;
 HSPLjava/nio/charset/CharsetEncoder;->encode(Ljava/nio/CharBuffer;)Ljava/nio/ByteBuffer;
-HSPLjava/nio/charset/CharsetEncoder;->encode(Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;Z)Ljava/nio/charset/CoderResult;
-HSPLjava/nio/charset/CharsetEncoder;->flush(Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult;
+HSPLjava/nio/charset/CharsetEncoder;->encode(Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;Z)Ljava/nio/charset/CoderResult;+]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;]Ljava/nio/charset/CharsetEncoder;Lcom/android/icu/charset/CharsetEncoderICU;]Ljava/nio/charset/CoderResult;Ljava/nio/charset/CoderResult;
+HSPLjava/nio/charset/CharsetEncoder;->flush(Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult;+]Ljava/nio/charset/CharsetEncoder;Lcom/android/icu/charset/CharsetEncoderICU;]Ljava/nio/charset/CoderResult;Ljava/nio/charset/CoderResult;
 HSPLjava/nio/charset/CharsetEncoder;->implFlush(Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult;
 HSPLjava/nio/charset/CharsetEncoder;->implOnMalformedInput(Ljava/nio/charset/CodingErrorAction;)V
 HSPLjava/nio/charset/CharsetEncoder;->implOnUnmappableCharacter(Ljava/nio/charset/CodingErrorAction;)V
@@ -26149,7 +26164,7 @@
 HSPLjava/nio/charset/CharsetEncoder;->onUnmappableCharacter(Ljava/nio/charset/CodingErrorAction;)Ljava/nio/charset/CharsetEncoder;
 HSPLjava/nio/charset/CharsetEncoder;->replaceWith([B)Ljava/nio/charset/CharsetEncoder;
 HSPLjava/nio/charset/CharsetEncoder;->replacement()[B
-HSPLjava/nio/charset/CharsetEncoder;->reset()Ljava/nio/charset/CharsetEncoder;
+HSPLjava/nio/charset/CharsetEncoder;->reset()Ljava/nio/charset/CharsetEncoder;+]Ljava/nio/charset/CharsetEncoder;Lcom/android/icu/charset/CharsetEncoderICU;
 HSPLjava/nio/charset/CharsetEncoder;->unmappableCharacterAction()Ljava/nio/charset/CodingErrorAction;
 HSPLjava/nio/charset/CoderResult;->isError()Z
 HSPLjava/nio/charset/CoderResult;->isOverflow()Z
@@ -26180,7 +26195,7 @@
 HSPLjava/nio/file/attribute/FileTime;-><init>(JLjava/util/concurrent/TimeUnit;Ljava/time/Instant;)V
 HSPLjava/nio/file/attribute/FileTime;->append(Ljava/lang/StringBuilder;II)Ljava/lang/StringBuilder;
 HSPLjava/nio/file/attribute/FileTime;->from(JLjava/util/concurrent/TimeUnit;)Ljava/nio/file/attribute/FileTime;
-HSPLjava/nio/file/attribute/FileTime;->toString()Ljava/lang/String;
+HSPLjava/nio/file/attribute/FileTime;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/time/LocalDateTime;Ljava/time/LocalDateTime;]Ljava/util/concurrent/TimeUnit;Ljava/util/concurrent/TimeUnit;
 HSPLjava/nio/file/spi/FileSystemProvider;->newInputStream(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/InputStream;
 HSPLjava/security/AccessControlContext;-><init>([Ljava/security/ProtectionDomain;)V
 HSPLjava/security/AccessController;->doPrivileged(Ljava/security/PrivilegedAction;)Ljava/lang/Object;
@@ -26194,12 +26209,12 @@
 HSPLjava/security/DigestInputStream;->read([BII)I+]Ljava/io/InputStream;Ljava/io/FileInputStream;]Ljava/security/MessageDigest;Ljava/security/MessageDigest$Delegate;
 HSPLjava/security/DigestInputStream;->setMessageDigest(Ljava/security/MessageDigest;)V
 HSPLjava/security/GeneralSecurityException;-><init>(Ljava/lang/String;)V
-HSPLjava/security/KeyFactory;-><init>(Ljava/lang/String;)V
+HSPLjava/security/KeyFactory;-><init>(Ljava/lang/String;)V+]Ljava/util/List;Lsun/security/jca/ProviderList$ServiceList;
 HSPLjava/security/KeyFactory;-><init>(Ljava/security/KeyFactorySpi;Ljava/security/Provider;Ljava/lang/String;)V
 HSPLjava/security/KeyFactory;->generatePrivate(Ljava/security/spec/KeySpec;)Ljava/security/PrivateKey;
 HSPLjava/security/KeyFactory;->generatePublic(Ljava/security/spec/KeySpec;)Ljava/security/PublicKey;
 HSPLjava/security/KeyFactory;->getInstance(Ljava/lang/String;)Ljava/security/KeyFactory;
-HSPLjava/security/KeyFactory;->nextSpi(Ljava/security/KeyFactorySpi;)Ljava/security/KeyFactorySpi;
+HSPLjava/security/KeyFactory;->nextSpi(Ljava/security/KeyFactorySpi;)Ljava/security/KeyFactorySpi;+]Ljava/security/Provider$Service;Ljava/security/Provider$Service;]Ljava/util/Iterator;Lsun/security/jca/ProviderList$ServiceList$1;
 HSPLjava/security/KeyFactorySpi;-><init>()V
 HSPLjava/security/KeyPair;-><init>(Ljava/security/PublicKey;Ljava/security/PrivateKey;)V
 HSPLjava/security/KeyPair;->getPrivate()Ljava/security/PrivateKey;
@@ -26237,7 +26252,7 @@
 HSPLjava/security/MessageDigest$Delegate;->engineReset()V
 HSPLjava/security/MessageDigest$Delegate;->engineUpdate(B)V
 HSPLjava/security/MessageDigest$Delegate;->engineUpdate(Ljava/nio/ByteBuffer;)V
-HSPLjava/security/MessageDigest$Delegate;->engineUpdate([BII)V+]Ljava/security/MessageDigestSpi;Lcom/android/org/conscrypt/OpenSSLMessageDigestJDK$SHA1;
+HSPLjava/security/MessageDigest$Delegate;->engineUpdate([BII)V+]Ljava/security/MessageDigestSpi;missing_types
 HSPLjava/security/MessageDigest;-><init>(Ljava/lang/String;)V
 HSPLjava/security/MessageDigest;->digest()[B
 HSPLjava/security/MessageDigest;->digest([B)[B
@@ -26248,9 +26263,9 @@
 HSPLjava/security/MessageDigest;->getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/MessageDigest;
 HSPLjava/security/MessageDigest;->isEqual([B[B)Z
 HSPLjava/security/MessageDigest;->reset()V
-HSPLjava/security/MessageDigest;->update(B)V
+HSPLjava/security/MessageDigest;->update(B)V+]Ljava/security/MessageDigest;Ljava/security/MessageDigest$Delegate;
 HSPLjava/security/MessageDigest;->update(Ljava/nio/ByteBuffer;)V
-HSPLjava/security/MessageDigest;->update([B)V
+HSPLjava/security/MessageDigest;->update([B)V+]Ljava/security/MessageDigest;Ljava/security/MessageDigest$Delegate;
 HSPLjava/security/MessageDigest;->update([BII)V+]Ljava/security/MessageDigest;Ljava/security/MessageDigest$Delegate;
 HSPLjava/security/MessageDigestSpi;-><init>()V
 HSPLjava/security/MessageDigestSpi;->engineDigest([BII)I+]Ljava/security/MessageDigestSpi;Lcom/android/org/conscrypt/OpenSSLMessageDigestJDK$SHA1;
@@ -26269,20 +26284,20 @@
 HSPLjava/security/Provider$Service;->getAlgorithm()Ljava/lang/String;
 HSPLjava/security/Provider$Service;->getAttribute(Ljava/lang/String;)Ljava/lang/String;
 HSPLjava/security/Provider$Service;->getClassName()Ljava/lang/String;
-HSPLjava/security/Provider$Service;->getImplClass()Ljava/lang/Class;
+HSPLjava/security/Provider$Service;->getImplClass()Ljava/lang/Class;+]Ljava/lang/ref/Reference;Ljava/lang/ref/WeakReference;]Ljava/lang/ClassLoader;Ldalvik/system/PathClassLoader;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/security/Provider$Service;->getKeyClass(Ljava/lang/String;)Ljava/lang/Class;
 HSPLjava/security/Provider$Service;->getProvider()Ljava/security/Provider;
 HSPLjava/security/Provider$Service;->getType()Ljava/lang/String;
 HSPLjava/security/Provider$Service;->hasKeyAttributes()Z
 HSPLjava/security/Provider$Service;->isValid()Z
-HSPLjava/security/Provider$Service;->newInstance(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/security/Provider$Service;->newInstance(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/Map;Ljava/util/HashMap;]Ljava/lang/Class;Ljava/lang/Class;]Ljava/lang/reflect/Constructor;Ljava/lang/reflect/Constructor;]Ljava/security/Provider;missing_types
 HSPLjava/security/Provider$Service;->supportsKeyClass(Ljava/security/Key;)Z
 HSPLjava/security/Provider$Service;->supportsKeyFormat(Ljava/security/Key;)Z
 HSPLjava/security/Provider$Service;->supportsParameter(Ljava/lang/Object;)Z
-HSPLjava/security/Provider$ServiceKey;-><init>(Ljava/lang/String;Ljava/lang/String;Z)V
+HSPLjava/security/Provider$ServiceKey;-><init>(Ljava/lang/String;Ljava/lang/String;Z)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/security/Provider$ServiceKey;-><init>(Ljava/lang/String;Ljava/lang/String;ZLjava/security/Provider$ServiceKey-IA;)V
 HSPLjava/security/Provider$ServiceKey;->equals(Ljava/lang/Object;)Z
-HSPLjava/security/Provider$ServiceKey;->hashCode()I
+HSPLjava/security/Provider$ServiceKey;->hashCode()I+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/security/Provider$ServiceKey;->matches(Ljava/lang/String;Ljava/lang/String;)Z
 HSPLjava/security/Provider$UString;-><init>(Ljava/lang/String;)V
 HSPLjava/security/Provider$UString;->equals(Ljava/lang/Object;)Z
@@ -26295,7 +26310,7 @@
 HSPLjava/security/Provider;->ensureLegacyParsed()V
 HSPLjava/security/Provider;->getEngineName(Ljava/lang/String;)Ljava/lang/String;
 HSPLjava/security/Provider;->getName()Ljava/lang/String;
-HSPLjava/security/Provider;->getService(Ljava/lang/String;Ljava/lang/String;)Ljava/security/Provider$Service;
+HSPLjava/security/Provider;->getService(Ljava/lang/String;Ljava/lang/String;)Ljava/security/Provider$Service;+]Ljava/security/Provider$ServiceKey;Ljava/security/Provider$ServiceKey;]Ljava/util/Map;Ljava/util/LinkedHashMap;
 HSPLjava/security/Provider;->getServices()Ljava/util/Set;
 HSPLjava/security/Provider;->getTypeAndAlgorithm(Ljava/lang/String;)[Ljava/lang/String;
 HSPLjava/security/Provider;->implPut(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
@@ -26308,7 +26323,7 @@
 HSPLjava/security/SecureRandom;-><init>(Ljava/security/SecureRandomSpi;Ljava/security/Provider;Ljava/lang/String;)V
 HSPLjava/security/SecureRandom;->getDefaultPRNG(Z[B)V
 HSPLjava/security/SecureRandom;->getInstance(Ljava/lang/String;)Ljava/security/SecureRandom;
-HSPLjava/security/SecureRandom;->getPrngAlgorithm()Ljava/lang/String;
+HSPLjava/security/SecureRandom;->getPrngAlgorithm()Ljava/lang/String;+]Lsun/security/jca/ProviderList;Lsun/security/jca/ProviderList;]Ljava/security/Provider$Service;Ljava/security/Provider$Service;]Ljava/util/List;Lsun/security/jca/ProviderList$3;]Ljava/util/Iterator;Ljava/util/AbstractList$Itr;,Ljava/util/Collections$UnmodifiableCollection$1;]Ljava/util/Set;Ljava/util/Collections$UnmodifiableSet;
 HSPLjava/security/SecureRandom;->getProvider()Ljava/security/Provider;
 HSPLjava/security/SecureRandom;->getSecureRandomSpi()Ljava/security/SecureRandomSpi;
 HSPLjava/security/SecureRandom;->next(I)I
@@ -26316,12 +26331,12 @@
 HSPLjava/security/SecureRandom;->setSeed(J)V
 HSPLjava/security/SecureRandomSpi;-><init>()V
 HSPLjava/security/Security;->addProvider(Ljava/security/Provider;)I
-HSPLjava/security/Security;->getImpl(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/Object;
+HSPLjava/security/Security;->getImpl(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/Object;+]Lsun/security/jca/GetInstance$Instance;Lsun/security/jca/GetInstance$Instance;
 HSPLjava/security/Security;->getImpl(Ljava/lang/String;Ljava/lang/String;Ljava/security/Provider;)[Ljava/lang/Object;
 HSPLjava/security/Security;->getProperty(Ljava/lang/String;)Ljava/lang/String;
 HSPLjava/security/Security;->getProvider(Ljava/lang/String;)Ljava/security/Provider;
 HSPLjava/security/Security;->getProviders()[Ljava/security/Provider;
-HSPLjava/security/Security;->getSpiClass(Ljava/lang/String;)Ljava/lang/Class;
+HSPLjava/security/Security;->getSpiClass(Ljava/lang/String;)Ljava/lang/Class;+]Ljava/util/Map;Ljava/util/concurrent/ConcurrentHashMap;
 HSPLjava/security/Security;->getVersion()I
 HSPLjava/security/Security;->increaseVersion()V
 HSPLjava/security/Security;->insertProviderAt(Ljava/security/Provider;I)I
@@ -26329,7 +26344,7 @@
 HSPLjava/security/Security;->setProperty(Ljava/lang/String;Ljava/lang/String;)V
 HSPLjava/security/Signature$Delegate;-><init>(Ljava/lang/String;)V
 HSPLjava/security/Signature$Delegate;->chooseFirstProvider()V
-HSPLjava/security/Signature$Delegate;->chooseProvider(ILjava/security/Key;Ljava/security/SecureRandom;)V
+HSPLjava/security/Signature$Delegate;->chooseProvider(ILjava/security/Key;Ljava/security/SecureRandom;)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/security/Provider$Service;Ljava/security/Provider$Service;]Ljava/util/List;Lsun/security/jca/ProviderList$ServiceList;]Ljava/util/Iterator;Lsun/security/jca/ProviderList$ServiceList$1;
 HSPLjava/security/Signature$Delegate;->engineInitSign(Ljava/security/PrivateKey;)V
 HSPLjava/security/Signature$Delegate;->engineInitVerify(Ljava/security/PublicKey;)V
 HSPLjava/security/Signature$Delegate;->engineSign()[B
@@ -26461,8 +26476,8 @@
 HSPLjava/text/Collator;->setDecomposition(I)V
 HSPLjava/text/Collator;->setStrength(I)V
 HSPLjava/text/DateFormat;-><init>()V
-HSPLjava/text/DateFormat;->format(Ljava/lang/Object;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
-HSPLjava/text/DateFormat;->format(Ljava/util/Date;)Ljava/lang/String;
+HSPLjava/text/DateFormat;->format(Ljava/lang/Object;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;+]Ljava/lang/Number;Ljava/lang/Long;]Ljava/text/DateFormat;Ljava/text/SimpleDateFormat;
+HSPLjava/text/DateFormat;->format(Ljava/util/Date;)Ljava/lang/String;+]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;]Ljava/text/DateFormat;Ljava/text/SimpleDateFormat;
 HSPLjava/text/DateFormat;->get(IIILjava/util/Locale;)Ljava/text/DateFormat;
 HSPLjava/text/DateFormat;->getDateInstance(ILjava/util/Locale;)Ljava/text/DateFormat;
 HSPLjava/text/DateFormat;->getDateTimeInstance()Ljava/text/DateFormat;
@@ -26490,13 +26505,13 @@
 HSPLjava/text/DateFormatSymbols;->initializeSupplementaryData(Llibcore/icu/LocaleData;)V
 HSPLjava/text/DecimalFormat;-><init>(Ljava/lang/String;)V
 HSPLjava/text/DecimalFormat;-><init>(Ljava/lang/String;Ljava/text/DecimalFormatSymbols;)V
-HSPLjava/text/DecimalFormat;->clone()Ljava/lang/Object;
+HSPLjava/text/DecimalFormat;->clone()Ljava/lang/Object;+]Ljava/text/DecimalFormatSymbols;Ljava/text/DecimalFormatSymbols;]Landroid/icu/text/DecimalFormat;Landroid/icu/text/DecimalFormat;
 HSPLjava/text/DecimalFormat;->equals(Ljava/lang/Object;)Z
 HSPLjava/text/DecimalFormat;->format(DLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
-HSPLjava/text/DecimalFormat;->format(JLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
+HSPLjava/text/DecimalFormat;->format(JLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;+]Ljava/text/FieldPosition;Ljava/text/DontCareFieldPosition;]Landroid/icu/text/DecimalFormat;Landroid/icu/text/DecimalFormat;
 HSPLjava/text/DecimalFormat;->format(Ljava/lang/Object;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
 HSPLjava/text/DecimalFormat;->getDecimalFormatSymbols()Ljava/text/DecimalFormatSymbols;
-HSPLjava/text/DecimalFormat;->getIcuFieldPosition(Ljava/text/FieldPosition;)Ljava/text/FieldPosition;
+HSPLjava/text/DecimalFormat;->getIcuFieldPosition(Ljava/text/FieldPosition;)Ljava/text/FieldPosition;+]Ljava/text/FieldPosition;Ljava/text/DontCareFieldPosition;
 HSPLjava/text/DecimalFormat;->getMaximumFractionDigits()I
 HSPLjava/text/DecimalFormat;->getMaximumIntegerDigits()I
 HSPLjava/text/DecimalFormat;->getMinimumFractionDigits()I
@@ -26512,24 +26527,24 @@
 HSPLjava/text/DecimalFormat;->setDecimalSeparatorAlwaysShown(Z)V
 HSPLjava/text/DecimalFormat;->setGroupingUsed(Z)V
 HSPLjava/text/DecimalFormat;->setMaximumFractionDigits(I)V
-HSPLjava/text/DecimalFormat;->setMaximumIntegerDigits(I)V
+HSPLjava/text/DecimalFormat;->setMaximumIntegerDigits(I)V+]Ljava/text/DecimalFormat;Ljava/text/DecimalFormat;]Landroid/icu/text/DecimalFormat;Landroid/icu/text/DecimalFormat;
 HSPLjava/text/DecimalFormat;->setMinimumFractionDigits(I)V
-HSPLjava/text/DecimalFormat;->setMinimumIntegerDigits(I)V
+HSPLjava/text/DecimalFormat;->setMinimumIntegerDigits(I)V+]Ljava/text/DecimalFormat;Ljava/text/DecimalFormat;]Landroid/icu/text/DecimalFormat;Landroid/icu/text/DecimalFormat;
 HSPLjava/text/DecimalFormat;->setParseIntegerOnly(Z)V
 HSPLjava/text/DecimalFormat;->toPattern()Ljava/lang/String;
 HSPLjava/text/DecimalFormat;->updateFieldsFromIcu()V
 HSPLjava/text/DecimalFormatSymbols;-><init>(Ljava/util/Locale;)V
 HSPLjava/text/DecimalFormatSymbols;->clone()Ljava/lang/Object;
-HSPLjava/text/DecimalFormatSymbols;->fromIcuInstance(Landroid/icu/text/DecimalFormatSymbols;)Ljava/text/DecimalFormatSymbols;
+HSPLjava/text/DecimalFormatSymbols;->fromIcuInstance(Landroid/icu/text/DecimalFormatSymbols;)Ljava/text/DecimalFormatSymbols;+]Ljava/text/DecimalFormatSymbols;Ljava/text/DecimalFormatSymbols;]Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/text/DecimalFormatSymbols;]Landroid/icu/util/Currency;Landroid/icu/util/Currency;
 HSPLjava/text/DecimalFormatSymbols;->getCurrency()Ljava/util/Currency;
 HSPLjava/text/DecimalFormatSymbols;->getDecimalSeparator()C
 HSPLjava/text/DecimalFormatSymbols;->getGroupingSeparator()C
-HSPLjava/text/DecimalFormatSymbols;->getIcuDecimalFormatSymbols()Landroid/icu/text/DecimalFormatSymbols;
+HSPLjava/text/DecimalFormatSymbols;->getIcuDecimalFormatSymbols()Landroid/icu/text/DecimalFormatSymbols;+]Ljava/text/DecimalFormatSymbols;Ljava/text/DecimalFormatSymbols;]Ljava/util/Currency;Ljava/util/Currency;]Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/text/DecimalFormatSymbols;
 HSPLjava/text/DecimalFormatSymbols;->getInfinity()Ljava/lang/String;
 HSPLjava/text/DecimalFormatSymbols;->getInstance(Ljava/util/Locale;)Ljava/text/DecimalFormatSymbols;
 HSPLjava/text/DecimalFormatSymbols;->getNaN()Ljava/lang/String;
 HSPLjava/text/DecimalFormatSymbols;->getZeroDigit()C
-HSPLjava/text/DecimalFormatSymbols;->initialize(Ljava/util/Locale;)V
+HSPLjava/text/DecimalFormatSymbols;->initialize(Ljava/util/Locale;)V+]Llibcore/icu/DecimalFormatData;Llibcore/icu/DecimalFormatData;
 HSPLjava/text/DecimalFormatSymbols;->initializeCurrency(Ljava/util/Locale;)V+]Ljava/util/Currency;Ljava/util/Currency;]Ljava/util/Locale;Ljava/util/Locale;
 HSPLjava/text/DecimalFormatSymbols;->maybeStripMarkers(Ljava/lang/String;C)C
 HSPLjava/text/DecimalFormatSymbols;->setCurrency(Ljava/util/Currency;)V
@@ -26562,7 +26577,7 @@
 HSPLjava/text/FieldPosition;->setEndIndex(I)V
 HSPLjava/text/Format;-><init>()V
 HSPLjava/text/Format;->clone()Ljava/lang/Object;
-HSPLjava/text/Format;->format(Ljava/lang/Object;)Ljava/lang/String;
+HSPLjava/text/Format;->format(Ljava/lang/Object;)Ljava/lang/String;+]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;]Ljava/text/Format;Ljava/text/SimpleDateFormat;,Ljava/text/MessageFormat;
 HSPLjava/text/IcuIteratorWrapper;-><init>(Landroid/icu/text/BreakIterator;)V
 HSPLjava/text/IcuIteratorWrapper;->checkOffset(ILjava/text/CharacterIterator;)V
 HSPLjava/text/IcuIteratorWrapper;->following(I)I+]Landroid/icu/text/BreakIterator;Landroid/icu/text/RuleBasedBreakIterator;]Ljava/text/IcuIteratorWrapper;Ljava/text/IcuIteratorWrapper;
@@ -26580,7 +26595,7 @@
 HSPLjava/text/Normalizer$Form$$ExternalSyntheticLambda0;->get()Ljava/lang/Object;
 HSPLjava/text/Normalizer$Form$$ExternalSyntheticLambda2;->get()Ljava/lang/Object;
 HSPLjava/text/Normalizer$Form$$ExternalSyntheticLambda3;->get()Ljava/lang/Object;
-HSPLjava/text/Normalizer;->normalize(Ljava/lang/CharSequence;Ljava/text/Normalizer$Form;)Ljava/lang/String;
+HSPLjava/text/Normalizer;->normalize(Ljava/lang/CharSequence;Ljava/text/Normalizer$Form;)Ljava/lang/String;+]Ljava/util/function/Supplier;Ljava/text/Normalizer$Form$$ExternalSyntheticLambda2;]Landroid/icu/text/Normalizer2;Landroid/icu/impl/Norm2AllModes$DecomposeNormalizer2;
 HSPLjava/text/NumberFormat;-><init>()V
 HSPLjava/text/NumberFormat;->clone()Ljava/lang/Object;
 HSPLjava/text/NumberFormat;->format(D)Ljava/lang/String;
@@ -26615,14 +26630,14 @@
 HSPLjava/text/SimpleDateFormat;->checkNegativeNumberExpression()V
 HSPLjava/text/SimpleDateFormat;->compile(Ljava/lang/String;)[C+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLjava/text/SimpleDateFormat;->encode(IILjava/lang/StringBuilder;)V
-HSPLjava/text/SimpleDateFormat;->format(Ljava/util/Date;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;
-HSPLjava/text/SimpleDateFormat;->format(Ljava/util/Date;Ljava/lang/StringBuffer;Ljava/text/Format$FieldDelegate;)Ljava/lang/StringBuffer;
+HSPLjava/text/SimpleDateFormat;->format(Ljava/util/Date;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;+]Ljava/text/FieldPosition;Ljava/text/DontCareFieldPosition;,Ljava/text/FieldPosition;
+HSPLjava/text/SimpleDateFormat;->format(Ljava/util/Date;Ljava/lang/StringBuffer;Ljava/text/Format$FieldDelegate;)Ljava/lang/StringBuffer;+]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;]Ljava/util/Calendar;Ljava/util/GregorianCalendar;
 HSPLjava/text/SimpleDateFormat;->formatMonth(IIILjava/lang/StringBuffer;ZZII)Ljava/lang/String;
 HSPLjava/text/SimpleDateFormat;->formatWeekday(IIZZ)Ljava/lang/String;
 HSPLjava/text/SimpleDateFormat;->getDateTimeFormat(IILjava/util/Locale;)Ljava/lang/String;
 HSPLjava/text/SimpleDateFormat;->getExtendedTimeZoneNames()Lcom/android/icu/text/ExtendedTimeZoneNames;
 HSPLjava/text/SimpleDateFormat;->getTimeZoneNames()Landroid/icu/text/TimeZoneNames;
-HSPLjava/text/SimpleDateFormat;->initialize(Ljava/util/Locale;)V
+HSPLjava/text/SimpleDateFormat;->initialize(Ljava/util/Locale;)V+]Ljava/util/concurrent/ConcurrentMap;Ljava/util/concurrent/ConcurrentHashMap;]Ljava/text/NumberFormat;Ljava/text/DecimalFormat;
 HSPLjava/text/SimpleDateFormat;->initializeCalendar(Ljava/util/Locale;)V
 HSPLjava/text/SimpleDateFormat;->initializeDefaultCentury()V
 HSPLjava/text/SimpleDateFormat;->isDigit(C)Z
@@ -26633,12 +26648,12 @@
 HSPLjava/text/SimpleDateFormat;->parseMonth(Ljava/lang/String;IIIILjava/text/ParsePosition;ZZLjava/text/CalendarBuilder;)I
 HSPLjava/text/SimpleDateFormat;->parseWeekday(Ljava/lang/String;IIZZLjava/text/CalendarBuilder;)I
 HSPLjava/text/SimpleDateFormat;->shouldObeyCount(II)Z
-HSPLjava/text/SimpleDateFormat;->subFormat(IILjava/text/Format$FieldDelegate;Ljava/lang/StringBuffer;Z)V
-HSPLjava/text/SimpleDateFormat;->subParse(Ljava/lang/String;IIIZ[ZLjava/text/ParsePosition;ZLjava/text/CalendarBuilder;)I+]Ljava/lang/String;Ljava/lang/String;]Ljava/text/ParsePosition;Ljava/text/ParsePosition;]Ljava/text/CalendarBuilder;Ljava/text/CalendarBuilder;]Ljava/lang/Number;Ljava/lang/Long;]Ljava/text/NumberFormat;Ljava/text/DecimalFormat;
+HSPLjava/text/SimpleDateFormat;->subFormat(IILjava/text/Format$FieldDelegate;Ljava/lang/StringBuffer;Z)V+]Ljava/text/Format$FieldDelegate;Ljava/text/DontCareFieldPosition$1;,Ljava/text/FieldPosition$Delegate;]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;]Ljava/util/Calendar;Ljava/util/GregorianCalendar;]Ljava/text/DateFormatSymbols;Ljava/text/DateFormatSymbols;
+HSPLjava/text/SimpleDateFormat;->subParse(Ljava/lang/String;IIIZ[ZLjava/text/ParsePosition;ZLjava/text/CalendarBuilder;)I+]Ljava/text/ParsePosition;Ljava/text/ParsePosition;]Ljava/text/CalendarBuilder;Ljava/text/CalendarBuilder;]Ljava/lang/Number;Ljava/lang/Long;]Ljava/text/NumberFormat;Ljava/text/DecimalFormat;]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/text/SimpleDateFormat;->subParseNumericZone(Ljava/lang/String;IIIZLjava/text/CalendarBuilder;)I
 HSPLjava/text/SimpleDateFormat;->toPattern()Ljava/lang/String;
 HSPLjava/text/SimpleDateFormat;->useDateFormatSymbols()Z+]Ljava/lang/Object;Ljava/util/GregorianCalendar;]Ljava/lang/Class;Ljava/lang/Class;
-HSPLjava/text/SimpleDateFormat;->zeroPaddingNumber(IIILjava/lang/StringBuffer;)V
+HSPLjava/text/SimpleDateFormat;->zeroPaddingNumber(IIILjava/lang/StringBuffer;)V+]Ljava/text/DecimalFormatSymbols;Ljava/text/DecimalFormatSymbols;]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;]Ljava/text/DecimalFormat;Ljava/text/DecimalFormat;]Ljava/text/NumberFormat;Ljava/text/DecimalFormat;
 HSPLjava/text/StringCharacterIterator;-><init>(Ljava/lang/String;)V
 HSPLjava/text/StringCharacterIterator;-><init>(Ljava/lang/String;I)V
 HSPLjava/text/StringCharacterIterator;-><init>(Ljava/lang/String;III)V
@@ -26689,11 +26704,11 @@
 HSPLjava/time/Instant;->isSupported(Ljava/time/temporal/TemporalField;)Z
 HSPLjava/time/Instant;->minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/Instant;
 HSPLjava/time/Instant;->nanosUntil(Ljava/time/Instant;)J
-HSPLjava/time/Instant;->now()Ljava/time/Instant;
+HSPLjava/time/Instant;->now()Ljava/time/Instant;+]Ljava/time/Clock;Ljava/time/Clock$SystemClock;
 HSPLjava/time/Instant;->ofEpochMilli(J)Ljava/time/Instant;
 HSPLjava/time/Instant;->ofEpochSecond(JJ)Ljava/time/Instant;
 HSPLjava/time/Instant;->plus(JJ)Ljava/time/Instant;
-HSPLjava/time/Instant;->plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/Instant;
+HSPLjava/time/Instant;->plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/Instant;+]Ljava/time/Instant;Ljava/time/Instant;]Ljava/time/temporal/ChronoUnit;Ljava/time/temporal/ChronoUnit;
 HSPLjava/time/Instant;->plusMillis(J)Ljava/time/Instant;
 HSPLjava/time/Instant;->plusSeconds(J)Ljava/time/Instant;
 HSPLjava/time/Instant;->toEpochMilli()J
@@ -26720,12 +26735,12 @@
 HSPLjava/time/LocalDate;->minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/temporal/Temporal;
 HSPLjava/time/LocalDate;->of(III)Ljava/time/LocalDate;
 HSPLjava/time/LocalDate;->of(ILjava/time/Month;I)Ljava/time/LocalDate;
-HSPLjava/time/LocalDate;->ofEpochDay(J)Ljava/time/LocalDate;
+HSPLjava/time/LocalDate;->ofEpochDay(J)Ljava/time/LocalDate;+]Ljava/time/temporal/ChronoField;Ljava/time/temporal/ChronoField;
 HSPLjava/time/LocalDate;->plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/LocalDate;
 HSPLjava/time/LocalDate;->plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/temporal/Temporal;
 HSPLjava/time/LocalDate;->plusDays(J)Ljava/time/LocalDate;
 HSPLjava/time/LocalDate;->toEpochDay()J
-HSPLjava/time/LocalDate;->toString()Ljava/lang/String;
+HSPLjava/time/LocalDate;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLjava/time/LocalDate;->with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/LocalDate;
 HSPLjava/time/LocalDateTime;-><init>(Ljava/time/LocalDate;Ljava/time/LocalTime;)V
 HSPLjava/time/LocalDateTime;->atOffset(Ljava/time/ZoneOffset;)Ljava/time/OffsetDateTime;
@@ -26747,7 +26762,7 @@
 HSPLjava/time/LocalDateTime;->now()Ljava/time/LocalDateTime;
 HSPLjava/time/LocalDateTime;->now(Ljava/time/Clock;)Ljava/time/LocalDateTime;+]Ljava/time/Clock;Ljava/time/Clock$SystemClock;]Ljava/time/Instant;Ljava/time/Instant;]Ljava/time/ZoneId;Ljava/time/ZoneRegion;]Ljava/time/zone/ZoneRules;Ljava/time/zone/ZoneRules;
 HSPLjava/time/LocalDateTime;->of(Ljava/time/LocalDate;Ljava/time/LocalTime;)Ljava/time/LocalDateTime;
-HSPLjava/time/LocalDateTime;->ofEpochSecond(JILjava/time/ZoneOffset;)Ljava/time/LocalDateTime;
+HSPLjava/time/LocalDateTime;->ofEpochSecond(JILjava/time/ZoneOffset;)Ljava/time/LocalDateTime;+]Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;]Ljava/time/temporal/ChronoField;Ljava/time/temporal/ChronoField;
 HSPLjava/time/LocalDateTime;->ofInstant(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/LocalDateTime;
 HSPLjava/time/LocalDateTime;->plusSeconds(J)Ljava/time/LocalDateTime;
 HSPLjava/time/LocalDateTime;->plusWithOverflow(Ljava/time/LocalDate;JJJJI)Ljava/time/LocalDateTime;
@@ -26755,7 +26770,7 @@
 HSPLjava/time/LocalDateTime;->toLocalDate()Ljava/time/LocalDate;
 HSPLjava/time/LocalDateTime;->toLocalDate()Ljava/time/chrono/ChronoLocalDate;
 HSPLjava/time/LocalDateTime;->toLocalTime()Ljava/time/LocalTime;
-HSPLjava/time/LocalDateTime;->toString()Ljava/lang/String;
+HSPLjava/time/LocalDateTime;->toString()Ljava/lang/String;+]Ljava/time/LocalTime;Ljava/time/LocalTime;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/time/LocalDate;Ljava/time/LocalDate;
 HSPLjava/time/LocalDateTime;->with(Ljava/time/LocalDate;Ljava/time/LocalTime;)Ljava/time/LocalDateTime;
 HSPLjava/time/LocalTime$1;-><clinit>()V
 HSPLjava/time/LocalTime;-><init>(IIII)V
@@ -26772,7 +26787,7 @@
 HSPLjava/time/LocalTime;->ofSecondOfDay(J)Ljava/time/LocalTime;
 HSPLjava/time/LocalTime;->toNanoOfDay()J
 HSPLjava/time/LocalTime;->toSecondOfDay()I
-HSPLjava/time/LocalTime;->toString()Ljava/lang/String;
+HSPLjava/time/LocalTime;->toString()Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLjava/time/Month$1;-><clinit>()V
 HSPLjava/time/Month;->getValue()I
 HSPLjava/time/Month;->length(Z)I
@@ -26791,8 +26806,8 @@
 HSPLjava/time/ZoneId;->equals(Ljava/lang/Object;)Z
 HSPLjava/time/ZoneId;->from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/ZoneId;
 HSPLjava/time/ZoneId;->of(Ljava/lang/String;)Ljava/time/ZoneId;
-HSPLjava/time/ZoneId;->of(Ljava/lang/String;Ljava/util/Map;)Ljava/time/ZoneId;
-HSPLjava/time/ZoneId;->of(Ljava/lang/String;Z)Ljava/time/ZoneId;
+HSPLjava/time/ZoneId;->of(Ljava/lang/String;Ljava/util/Map;)Ljava/time/ZoneId;+]Ljava/util/Map;Ljava/util/ImmutableCollections$MapN;
+HSPLjava/time/ZoneId;->of(Ljava/lang/String;Z)Ljava/time/ZoneId;+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/time/ZoneId;->systemDefault()Ljava/time/ZoneId;
 HSPLjava/time/ZoneId;->toString()Ljava/lang/String;
 HSPLjava/time/ZoneOffset;-><init>(I)V
@@ -26986,7 +27001,7 @@
 HSPLjava/time/zone/ZoneRules;->findOffsetInfo(Ljava/time/LocalDateTime;Ljava/time/zone/ZoneOffsetTransition;)Ljava/lang/Object;
 HSPLjava/time/zone/ZoneRules;->findTransitionArray(I)[Ljava/time/zone/ZoneOffsetTransition;
 HSPLjava/time/zone/ZoneRules;->findYear(JLjava/time/ZoneOffset;)I
-HSPLjava/time/zone/ZoneRules;->getOffset(Ljava/time/Instant;)Ljava/time/ZoneOffset;
+HSPLjava/time/zone/ZoneRules;->getOffset(Ljava/time/Instant;)Ljava/time/ZoneOffset;+]Ljava/time/Instant;Ljava/time/Instant;]Ljava/time/zone/ZoneOffsetTransition;Ljava/time/zone/ZoneOffsetTransition;
 HSPLjava/time/zone/ZoneRules;->getOffsetInfo(Ljava/time/LocalDateTime;)Ljava/lang/Object;
 HSPLjava/time/zone/ZoneRules;->getValidOffsets(Ljava/time/LocalDateTime;)Ljava/util/List;
 HSPLjava/time/zone/ZoneRules;->of(Ljava/time/ZoneOffset;)Ljava/time/zone/ZoneRules;
@@ -26995,17 +27010,17 @@
 HSPLjava/time/zone/ZoneRulesProvider;->getProvider(Ljava/lang/String;)Ljava/time/zone/ZoneRulesProvider;
 HSPLjava/time/zone/ZoneRulesProvider;->getRules(Ljava/lang/String;Z)Ljava/time/zone/ZoneRules;
 HSPLjava/util/AbstractCollection;-><init>()V
-HSPLjava/util/AbstractCollection;->addAll(Ljava/util/Collection;)Z+]Ljava/util/AbstractCollection;missing_types]Ljava/util/Collection;missing_types]Ljava/util/Iterator;missing_types
+HSPLjava/util/AbstractCollection;->addAll(Ljava/util/Collection;)Z+]Ljava/util/AbstractCollection;missing_types]Ljava/util/Collection;megamorphic_types]Ljava/util/Iterator;megamorphic_types
 HSPLjava/util/AbstractCollection;->clear()V
-HSPLjava/util/AbstractCollection;->contains(Ljava/lang/Object;)Z+]Ljava/lang/Object;missing_types]Ljava/util/Iterator;Ljava/util/AbstractList$Itr;
+HSPLjava/util/AbstractCollection;->contains(Ljava/lang/Object;)Z+]Ljava/lang/Object;missing_types]Ljava/util/Iterator;Ljava/util/AbstractList$Itr;,Ljava/util/ArrayList$SubList$1;]Ljava/util/AbstractCollection;missing_types
 HSPLjava/util/AbstractCollection;->containsAll(Ljava/util/Collection;)Z
 HSPLjava/util/AbstractCollection;->isEmpty()Z+]Ljava/util/AbstractCollection;missing_types
 HSPLjava/util/AbstractCollection;->remove(Ljava/lang/Object;)Z
-HSPLjava/util/AbstractCollection;->removeAll(Ljava/util/Collection;)Z
+HSPLjava/util/AbstractCollection;->removeAll(Ljava/util/Collection;)Z+]Ljava/util/AbstractCollection;Ljava/util/HashMap$Values;]Ljava/util/Collection;Ljava/util/Collections$SingletonSet;]Ljava/util/Iterator;Ljava/util/HashMap$ValueIterator;
 HSPLjava/util/AbstractCollection;->retainAll(Ljava/util/Collection;)Z
-HSPLjava/util/AbstractCollection;->toArray()[Ljava/lang/Object;+]Ljava/util/AbstractCollection;missing_types]Ljava/util/Iterator;megamorphic_types
-HSPLjava/util/AbstractCollection;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;+]Ljava/util/AbstractCollection;Ljava/util/ArrayList$SubList;,Lsun/security/jca/ProviderList$3;,Ljava/util/HashMap$Values;,Ljava/util/HashSet;]Ljava/lang/Object;missing_types]Ljava/lang/Class;Ljava/lang/Class;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;,Ljava/util/AbstractList$Itr;,Ljava/util/ArrayList$SubList$1;,Ljava/util/HashMap$ValueIterator;
-HSPLjava/util/AbstractCollection;->toString()Ljava/lang/String;
+HSPLjava/util/AbstractCollection;->toArray()[Ljava/lang/Object;+]Ljava/util/AbstractCollection;megamorphic_types]Ljava/util/Iterator;megamorphic_types
+HSPLjava/util/AbstractCollection;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;+]Ljava/util/AbstractCollection;missing_types]Ljava/lang/Object;missing_types]Ljava/lang/Class;Ljava/lang/Class;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;,Ljava/util/ArrayList$SubList$1;,Ljava/util/LinkedHashMap$LinkedValueIterator;,Ljava/util/AbstractList$Itr;,Ljava/util/HashMap$ValueIterator;
+HSPLjava/util/AbstractCollection;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/AbstractCollection;missing_types]Ljava/util/Iterator;missing_types
 HSPLjava/util/AbstractList$Itr;-><init>(Ljava/util/AbstractList;)V
 HSPLjava/util/AbstractList$Itr;-><init>(Ljava/util/AbstractList;Ljava/util/AbstractList$Itr-IA;)V
 HSPLjava/util/AbstractList$Itr;->checkForComodification()V
@@ -27020,9 +27035,9 @@
 HSPLjava/util/AbstractList$RandomAccessSpliterator;->characteristics()I
 HSPLjava/util/AbstractList$RandomAccessSpliterator;->checkAbstractListModCount(Ljava/util/AbstractList;I)V
 HSPLjava/util/AbstractList$RandomAccessSpliterator;->estimateSize()J
-HSPLjava/util/AbstractList$RandomAccessSpliterator;->forEachRemaining(Ljava/util/function/Consumer;)V
+HSPLjava/util/AbstractList$RandomAccessSpliterator;->forEachRemaining(Ljava/util/function/Consumer;)V+]Ljava/util/function/Consumer;missing_types
 HSPLjava/util/AbstractList$RandomAccessSpliterator;->get(Ljava/util/List;I)Ljava/lang/Object;
-HSPLjava/util/AbstractList$RandomAccessSpliterator;->getFence()I
+HSPLjava/util/AbstractList$RandomAccessSpliterator;->getFence()I+]Ljava/util/List;missing_types
 HSPLjava/util/AbstractList$RandomAccessSpliterator;->tryAdvance(Ljava/util/function/Consumer;)Z
 HSPLjava/util/AbstractList$RandomAccessSubList;-><init>(Ljava/util/AbstractList;II)V
 HSPLjava/util/AbstractList$SubList$1;-><init>(Ljava/util/AbstractList$SubList;I)V
@@ -27040,12 +27055,12 @@
 HSPLjava/util/AbstractList;->add(Ljava/lang/Object;)Z
 HSPLjava/util/AbstractList;->clear()V
 HSPLjava/util/AbstractList;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;missing_types]Ljava/util/ListIterator;Ljava/util/ArrayList$ListItr;,Ljava/util/Collections$UnmodifiableList$1;]Ljava/util/AbstractList;Ljava/util/ArrayList;]Ljava/util/List;Ljava/util/ArrayList;,Ljava/util/Collections$UnmodifiableRandomAccessList;
-HSPLjava/util/AbstractList;->hashCode()I+]Ljava/lang/Object;missing_types]Ljava/util/AbstractList;Ljava/util/Collections$SingletonList;,Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;,Ljava/util/Collections$1;
+HSPLjava/util/AbstractList;->hashCode()I+]Ljava/lang/Object;missing_types]Ljava/util/AbstractList;Ljava/util/Collections$SingletonList;,Ljava/util/Arrays$ArrayList;,Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;,Ljava/util/Arrays$ArrayItr;,Ljava/util/Collections$1;
 HSPLjava/util/AbstractList;->indexOf(Ljava/lang/Object;)I
 HSPLjava/util/AbstractList;->iterator()Ljava/util/Iterator;
-HSPLjava/util/AbstractList;->listIterator()Ljava/util/ListIterator;
+HSPLjava/util/AbstractList;->listIterator()Ljava/util/ListIterator;+]Ljava/util/AbstractList;missing_types
 HSPLjava/util/AbstractList;->listIterator(I)Ljava/util/ListIterator;
-HSPLjava/util/AbstractList;->rangeCheckForAdd(I)V
+HSPLjava/util/AbstractList;->rangeCheckForAdd(I)V+]Ljava/util/AbstractList;missing_types
 HSPLjava/util/AbstractList;->subList(II)Ljava/util/List;
 HSPLjava/util/AbstractList;->subListRangeCheck(III)V
 HSPLjava/util/AbstractMap$2$1;-><init>(Ljava/util/AbstractMap$2;)V
@@ -27057,7 +27072,7 @@
 HSPLjava/util/AbstractMap$SimpleEntry;->getKey()Ljava/lang/Object;
 HSPLjava/util/AbstractMap$SimpleEntry;->getValue()Ljava/lang/Object;
 HSPLjava/util/AbstractMap$SimpleImmutableEntry;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLjava/util/AbstractMap$SimpleImmutableEntry;-><init>(Ljava/util/Map$Entry;)V
+HSPLjava/util/AbstractMap$SimpleImmutableEntry;-><init>(Ljava/util/Map$Entry;)V+]Ljava/util/Map$Entry;Ljava/util/TreeMap$TreeMapEntry;
 HSPLjava/util/AbstractMap$SimpleImmutableEntry;->equals(Ljava/lang/Object;)Z
 HSPLjava/util/AbstractMap$SimpleImmutableEntry;->getKey()Ljava/lang/Object;
 HSPLjava/util/AbstractMap$SimpleImmutableEntry;->getValue()Ljava/lang/Object;
@@ -27066,25 +27081,25 @@
 HSPLjava/util/AbstractMap;->clear()V
 HSPLjava/util/AbstractMap;->clone()Ljava/lang/Object;
 HSPLjava/util/AbstractMap;->eq(Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLjava/util/AbstractMap;->equals(Ljava/lang/Object;)Z+]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;]Ljava/util/AbstractMap;Ljava/util/HashMap;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;]Ljava/util/Set;Ljava/util/HashMap$EntrySet;
+HSPLjava/util/AbstractMap;->equals(Ljava/lang/Object;)Z+]Ljava/util/AbstractMap;Ljava/util/HashMap;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;]Ljava/util/Set;Ljava/util/HashMap$EntrySet;]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;
 HSPLjava/util/AbstractMap;->get(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/Map$Entry;Ljava/util/AbstractMap$SimpleImmutableEntry;]Ljava/lang/Object;Ljava/lang/Boolean;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;
-HSPLjava/util/AbstractMap;->hashCode()I+]Ljava/util/Map$Entry;Ljava/util/LinkedHashMap$LinkedHashMapEntry;,Ljava/util/HashMap$Node;]Ljava/util/AbstractMap;Ljava/util/HashMap;,Ljava/util/LinkedHashMap;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;,Ljava/util/LinkedHashMap$LinkedEntryIterator;]Ljava/util/Set;Ljava/util/LinkedHashMap$LinkedEntrySet;,Ljava/util/HashMap$EntrySet;
-HSPLjava/util/AbstractMap;->isEmpty()Z
+HSPLjava/util/AbstractMap;->hashCode()I+]Ljava/util/Map$Entry;Ljava/util/LinkedHashMap$LinkedHashMapEntry;,Ljava/util/AbstractMap$SimpleImmutableEntry;,Ljava/util/HashMap$Node;]Ljava/util/AbstractMap;Ljava/util/HashMap;,Ljava/util/LinkedHashMap;,Ljava/util/Collections$SingletonMap;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;,Ljava/util/Collections$1;,Ljava/util/LinkedHashMap$LinkedEntryIterator;]Ljava/util/Set;Ljava/util/LinkedHashMap$LinkedEntrySet;,Ljava/util/Collections$SingletonSet;,Ljava/util/HashMap$EntrySet;
+HSPLjava/util/AbstractMap;->isEmpty()Z+]Ljava/util/AbstractMap;missing_types
 HSPLjava/util/AbstractMap;->putAll(Ljava/util/Map;)V
 HSPLjava/util/AbstractMap;->size()I
 HSPLjava/util/AbstractMap;->toString()Ljava/lang/String;
 HSPLjava/util/AbstractMap;->values()Ljava/util/Collection;
 HSPLjava/util/AbstractQueue;-><init>()V
-HSPLjava/util/AbstractQueue;->add(Ljava/lang/Object;)Z
-HSPLjava/util/AbstractQueue;->addAll(Ljava/util/Collection;)Z
+HSPLjava/util/AbstractQueue;->add(Ljava/lang/Object;)Z+]Ljava/util/AbstractQueue;missing_types
+HSPLjava/util/AbstractQueue;->addAll(Ljava/util/Collection;)Z+]Ljava/util/Iterator;Ljava/util/AbstractList$Itr;]Ljava/util/AbstractQueue;Ljava/util/concurrent/ArrayBlockingQueue;
 HSPLjava/util/AbstractQueue;->clear()V
 HSPLjava/util/AbstractQueue;->remove()Ljava/lang/Object;
 HSPLjava/util/AbstractSequentialList;-><init>()V
 HSPLjava/util/AbstractSequentialList;->iterator()Ljava/util/Iterator;
 HSPLjava/util/AbstractSet;-><init>()V
 HSPLjava/util/AbstractSet;->equals(Ljava/lang/Object;)Z
-HSPLjava/util/AbstractSet;->hashCode()I+]Ljava/lang/Object;missing_types]Ljava/util/AbstractSet;Ljava/util/HashSet;,Ljava/util/LinkedHashSet;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;,Ljava/util/LinkedHashMap$LinkedKeyIterator;
-HSPLjava/util/AbstractSet;->removeAll(Ljava/util/Collection;)Z+]Ljava/util/Collection;missing_types]Ljava/util/AbstractSet;Ljava/util/TreeSet;,Ljava/util/HashSet;]Ljava/util/Iterator;missing_types
+HSPLjava/util/AbstractSet;->hashCode()I+]Ljava/lang/Object;missing_types]Ljava/util/AbstractSet;Ljava/util/Collections$SingletonSet;,Ljava/util/HashSet;,Ljava/util/LinkedHashSet;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;,Ljava/util/LinkedHashMap$LinkedKeyIterator;,Ljava/util/Collections$1;
+HSPLjava/util/AbstractSet;->removeAll(Ljava/util/Collection;)Z+]Ljava/util/Collection;missing_types]Ljava/util/AbstractSet;Ljava/util/HashMap$KeySet;,Ljava/util/TreeSet;,Ljava/util/HashSet;,Ljava/util/LinkedHashSet;]Ljava/util/Iterator;missing_types
 HSPLjava/util/ArrayDeque$DeqIterator;-><init>(Ljava/util/ArrayDeque;)V
 HSPLjava/util/ArrayDeque$DeqIterator;-><init>(Ljava/util/ArrayDeque;Ljava/util/ArrayDeque$DeqIterator-IA;)V
 HSPLjava/util/ArrayDeque$DeqIterator;->hasNext()Z
@@ -27111,9 +27126,9 @@
 HSPLjava/util/ArrayDeque;->getLast()Ljava/lang/Object;
 HSPLjava/util/ArrayDeque;->isEmpty()Z
 HSPLjava/util/ArrayDeque;->iterator()Ljava/util/Iterator;
-HSPLjava/util/ArrayDeque;->offer(Ljava/lang/Object;)Z
-HSPLjava/util/ArrayDeque;->offerLast(Ljava/lang/Object;)Z
-HSPLjava/util/ArrayDeque;->peek()Ljava/lang/Object;
+HSPLjava/util/ArrayDeque;->offer(Ljava/lang/Object;)Z+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;
+HSPLjava/util/ArrayDeque;->offerLast(Ljava/lang/Object;)Z+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;
+HSPLjava/util/ArrayDeque;->peek()Ljava/lang/Object;+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;
 HSPLjava/util/ArrayDeque;->peekFirst()Ljava/lang/Object;
 HSPLjava/util/ArrayDeque;->peekLast()Ljava/lang/Object;
 HSPLjava/util/ArrayDeque;->poll()Ljava/lang/Object;+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;
@@ -27125,7 +27140,7 @@
 HSPLjava/util/ArrayDeque;->remove(Ljava/lang/Object;)Z
 HSPLjava/util/ArrayDeque;->removeFirst()Ljava/lang/Object;+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;
 HSPLjava/util/ArrayDeque;->removeFirstOccurrence(Ljava/lang/Object;)Z
-HSPLjava/util/ArrayDeque;->removeLast()Ljava/lang/Object;
+HSPLjava/util/ArrayDeque;->removeLast()Ljava/lang/Object;+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;
 HSPLjava/util/ArrayDeque;->size()I
 HSPLjava/util/ArrayDeque;->toArray()[Ljava/lang/Object;
 HSPLjava/util/ArrayDeque;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
@@ -27139,18 +27154,18 @@
 HSPLjava/util/ArrayList$Itr;-><init>(Ljava/util/ArrayList;Ljava/util/ArrayList$Itr-IA;)V
 HSPLjava/util/ArrayList$Itr;->hasNext()Z
 HSPLjava/util/ArrayList$Itr;->next()Ljava/lang/Object;
-HSPLjava/util/ArrayList$Itr;->remove()V
+HSPLjava/util/ArrayList$Itr;->remove()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLjava/util/ArrayList$ListItr;-><init>(Ljava/util/ArrayList;I)V
 HSPLjava/util/ArrayList$ListItr;->hasPrevious()Z
 HSPLjava/util/ArrayList$ListItr;->nextIndex()I
 HSPLjava/util/ArrayList$ListItr;->previous()Ljava/lang/Object;
-HSPLjava/util/ArrayList$ListItr;->set(Ljava/lang/Object;)V
+HSPLjava/util/ArrayList$ListItr;->set(Ljava/lang/Object;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLjava/util/ArrayList$SubList$1;-><init>(Ljava/util/ArrayList$SubList;II)V
 HSPLjava/util/ArrayList$SubList$1;->hasNext()Z
 HSPLjava/util/ArrayList$SubList$1;->next()Ljava/lang/Object;
 HSPLjava/util/ArrayList$SubList;-><init>(Ljava/util/ArrayList;Ljava/util/AbstractList;III)V
 HSPLjava/util/ArrayList$SubList;->get(I)Ljava/lang/Object;
-HSPLjava/util/ArrayList$SubList;->iterator()Ljava/util/Iterator;
+HSPLjava/util/ArrayList$SubList;->iterator()Ljava/util/Iterator;+]Ljava/util/ArrayList$SubList;Ljava/util/ArrayList$SubList;
 HSPLjava/util/ArrayList$SubList;->listIterator(I)Ljava/util/ListIterator;
 HSPLjava/util/ArrayList$SubList;->removeRange(II)V
 HSPLjava/util/ArrayList$SubList;->size()I
@@ -27162,7 +27177,7 @@
 HSPLjava/util/ArrayList;->add(ILjava/lang/Object;)V
 HSPLjava/util/ArrayList;->add(Ljava/lang/Object;)Z
 HSPLjava/util/ArrayList;->addAll(ILjava/util/Collection;)Z
-HSPLjava/util/ArrayList;->addAll(Ljava/util/Collection;)Z+]Ljava/util/Collection;missing_types
+HSPLjava/util/ArrayList;->addAll(Ljava/util/Collection;)Z+]Ljava/util/Collection;megamorphic_types
 HSPLjava/util/ArrayList;->batchRemove(Ljava/util/Collection;Z)Z
 HSPLjava/util/ArrayList;->clear()V
 HSPLjava/util/ArrayList;->clone()Ljava/lang/Object;
@@ -27174,7 +27189,7 @@
 HSPLjava/util/ArrayList;->forEach(Ljava/util/function/Consumer;)V
 HSPLjava/util/ArrayList;->get(I)Ljava/lang/Object;
 HSPLjava/util/ArrayList;->grow(I)V
-HSPLjava/util/ArrayList;->indexOf(Ljava/lang/Object;)I+]Ljava/lang/Object;missing_types
+HSPLjava/util/ArrayList;->indexOf(Ljava/lang/Object;)I+]Ljava/lang/Object;megamorphic_types
 HSPLjava/util/ArrayList;->isEmpty()Z
 HSPLjava/util/ArrayList;->iterator()Ljava/util/Iterator;
 HSPLjava/util/ArrayList;->lastIndexOf(Ljava/lang/Object;)I
@@ -27182,7 +27197,7 @@
 HSPLjava/util/ArrayList;->listIterator(I)Ljava/util/ListIterator;
 HSPLjava/util/ArrayList;->readObject(Ljava/io/ObjectInputStream;)V
 HSPLjava/util/ArrayList;->remove(I)Ljava/lang/Object;
-HSPLjava/util/ArrayList;->remove(Ljava/lang/Object;)Z
+HSPLjava/util/ArrayList;->remove(Ljava/lang/Object;)Z+]Ljava/lang/Object;missing_types
 HSPLjava/util/ArrayList;->removeAll(Ljava/util/Collection;)Z
 HSPLjava/util/ArrayList;->removeIf(Ljava/util/function/Predicate;)Z
 HSPLjava/util/ArrayList;->removeRange(II)V
@@ -27204,13 +27219,13 @@
 HSPLjava/util/Arrays$ArrayList;->contains(Ljava/lang/Object;)Z
 HSPLjava/util/Arrays$ArrayList;->forEach(Ljava/util/function/Consumer;)V
 HSPLjava/util/Arrays$ArrayList;->get(I)Ljava/lang/Object;
-HSPLjava/util/Arrays$ArrayList;->indexOf(Ljava/lang/Object;)I
+HSPLjava/util/Arrays$ArrayList;->indexOf(Ljava/lang/Object;)I+]Ljava/lang/Object;missing_types
 HSPLjava/util/Arrays$ArrayList;->iterator()Ljava/util/Iterator;
 HSPLjava/util/Arrays$ArrayList;->set(ILjava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/Arrays$ArrayList;->size()I
 HSPLjava/util/Arrays$ArrayList;->sort(Ljava/util/Comparator;)V
 HSPLjava/util/Arrays$ArrayList;->spliterator()Ljava/util/Spliterator;
-HSPLjava/util/Arrays$ArrayList;->toArray()[Ljava/lang/Object;
+HSPLjava/util/Arrays$ArrayList;->toArray()[Ljava/lang/Object;+][Ljava/lang/Object;missing_types
 HSPLjava/util/Arrays$ArrayList;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
 HSPLjava/util/Arrays;->asList([Ljava/lang/Object;)Ljava/util/List;
 HSPLjava/util/Arrays;->binarySearch([CC)I
@@ -27241,7 +27256,7 @@
 HSPLjava/util/Arrays;->copyOfRange([Ljava/lang/Object;II)[Ljava/lang/Object;
 HSPLjava/util/Arrays;->copyOfRange([Ljava/lang/Object;IILjava/lang/Class;)[Ljava/lang/Object;
 HSPLjava/util/Arrays;->deepEquals([Ljava/lang/Object;[Ljava/lang/Object;)Z
-HSPLjava/util/Arrays;->deepEquals0(Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLjava/util/Arrays;->deepEquals0(Ljava/lang/Object;Ljava/lang/Object;)Z+]Ljava/lang/Object;Landroid/graphics/Rect;,Landroid/view/RoundedCorner;
 HSPLjava/util/Arrays;->deepHashCode([Ljava/lang/Object;)I
 HSPLjava/util/Arrays;->deepToString([Ljava/lang/Object;)Ljava/lang/String;
 HSPLjava/util/Arrays;->deepToString([Ljava/lang/Object;Ljava/lang/StringBuilder;Ljava/util/Set;)V
@@ -27268,7 +27283,7 @@
 HSPLjava/util/Arrays;->hashCode([F)I
 HSPLjava/util/Arrays;->hashCode([I)I
 HSPLjava/util/Arrays;->hashCode([J)I
-HSPLjava/util/Arrays;->hashCode([Ljava/lang/Object;)I+]Ljava/lang/Object;missing_types
+HSPLjava/util/Arrays;->hashCode([Ljava/lang/Object;)I+]Ljava/lang/Object;megamorphic_types
 HSPLjava/util/Arrays;->rangeCheck(III)V
 HSPLjava/util/Arrays;->sort([C)V
 HSPLjava/util/Arrays;->sort([F)V
@@ -27285,8 +27300,8 @@
 HSPLjava/util/Arrays;->stream([III)Ljava/util/stream/IntStream;
 HSPLjava/util/Arrays;->stream([Ljava/lang/Object;)Ljava/util/stream/Stream;
 HSPLjava/util/Arrays;->stream([Ljava/lang/Object;II)Ljava/util/stream/Stream;
-HSPLjava/util/Arrays;->toString([B)Ljava/lang/String;
-HSPLjava/util/Arrays;->toString([F)Ljava/lang/String;
+HSPLjava/util/Arrays;->toString([B)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLjava/util/Arrays;->toString([F)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLjava/util/Arrays;->toString([I)Ljava/lang/String;
 HSPLjava/util/Arrays;->toString([J)Ljava/lang/String;
 HSPLjava/util/Arrays;->toString([Ljava/lang/Object;)Ljava/lang/String;
@@ -27306,7 +27321,7 @@
 HSPLjava/util/BitSet;->checkRange(II)V
 HSPLjava/util/BitSet;->clear()V
 HSPLjava/util/BitSet;->clear(I)V
-HSPLjava/util/BitSet;->clone()Ljava/lang/Object;
+HSPLjava/util/BitSet;->clone()Ljava/lang/Object;+][J[J
 HSPLjava/util/BitSet;->ensureCapacity(I)V
 HSPLjava/util/BitSet;->equals(Ljava/lang/Object;)Z
 HSPLjava/util/BitSet;->expandTo(I)V
@@ -27322,7 +27337,7 @@
 HSPLjava/util/BitSet;->set(I)V
 HSPLjava/util/BitSet;->set(II)V
 HSPLjava/util/BitSet;->set(IIZ)V
-HSPLjava/util/BitSet;->set(IZ)V
+HSPLjava/util/BitSet;->set(IZ)V+]Ljava/util/BitSet;Ljava/util/BitSet;
 HSPLjava/util/BitSet;->size()I
 HSPLjava/util/BitSet;->toString()Ljava/lang/String;
 HSPLjava/util/BitSet;->trimToSize()V
@@ -27331,14 +27346,14 @@
 HSPLjava/util/Calendar;-><init>()V
 HSPLjava/util/Calendar;-><init>(Ljava/util/TimeZone;Ljava/util/Locale;)V
 HSPLjava/util/Calendar;->aggregateStamp(II)I
-HSPLjava/util/Calendar;->before(Ljava/lang/Object;)Z
+HSPLjava/util/Calendar;->before(Ljava/lang/Object;)Z+]Ljava/util/Calendar;Ljava/util/GregorianCalendar;
 HSPLjava/util/Calendar;->clear()V
-HSPLjava/util/Calendar;->clone()Ljava/lang/Object;
+HSPLjava/util/Calendar;->clone()Ljava/lang/Object;+]Ljava/util/TimeZone;Llibcore/util/ZoneInfo;
 HSPLjava/util/Calendar;->compareTo(J)I
 HSPLjava/util/Calendar;->compareTo(Ljava/util/Calendar;)I
-HSPLjava/util/Calendar;->complete()V
+HSPLjava/util/Calendar;->complete()V+]Ljava/util/Calendar;Ljava/util/GregorianCalendar;
 HSPLjava/util/Calendar;->createCalendar(Ljava/util/TimeZone;Ljava/util/Locale;)Ljava/util/Calendar;
-HSPLjava/util/Calendar;->get(I)I
+HSPLjava/util/Calendar;->get(I)I+]Ljava/util/Calendar;Ljava/util/GregorianCalendar;
 HSPLjava/util/Calendar;->getFirstDayOfWeek()I
 HSPLjava/util/Calendar;->getInstance()Ljava/util/Calendar;
 HSPLjava/util/Calendar;->getInstance(Ljava/util/Locale;)Ljava/util/Calendar;
@@ -27366,13 +27381,13 @@
 HSPLjava/util/Calendar;->setFieldsComputed(I)V
 HSPLjava/util/Calendar;->setFieldsNormalized(I)V
 HSPLjava/util/Calendar;->setLenient(Z)V
-HSPLjava/util/Calendar;->setTime(Ljava/util/Date;)V
-HSPLjava/util/Calendar;->setTimeInMillis(J)V
+HSPLjava/util/Calendar;->setTime(Ljava/util/Date;)V+]Ljava/util/Date;Ljava/util/Date;]Ljava/util/Calendar;Ljava/util/GregorianCalendar;
+HSPLjava/util/Calendar;->setTimeInMillis(J)V+]Ljava/util/Calendar;Ljava/util/GregorianCalendar;
 HSPLjava/util/Calendar;->setTimeZone(Ljava/util/TimeZone;)V
-HSPLjava/util/Calendar;->setWeekCountData(Ljava/util/Locale;)V
+HSPLjava/util/Calendar;->setWeekCountData(Ljava/util/Locale;)V+]Ljava/util/concurrent/ConcurrentMap;Ljava/util/concurrent/ConcurrentHashMap;
 HSPLjava/util/Calendar;->setZoneShared(Z)V
 HSPLjava/util/Calendar;->updateTime()V
-HSPLjava/util/Collection;->removeIf(Ljava/util/function/Predicate;)Z+]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;,Ljava/util/HashMap$EntrySet;,Landroid/util/MapCollections$KeySet;,Ljava/util/LinkedList;,Lcom/android/internal/telephony/data/DataNetworkController$NetworkRequestList;,Landroid/util/MapCollections$EntrySet;,Ljava/util/HashSet;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;,Ljava/util/HashMap$EntryIterator;,Ljava/util/LinkedList$ListItr;,Landroid/util/MapCollections$MapIterator;,Ljava/util/HashMap$KeyIterator;]Ljava/util/function/Predicate;Lcom/android/internal/telephony/data/DataNetworkController$$ExternalSyntheticLambda24;,Lcom/android/internal/telephony/data/DataNetworkController$$ExternalSyntheticLambda15;
+HSPLjava/util/Collection;->removeIf(Ljava/util/function/Predicate;)Z+]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;,Landroid/util/MapCollections$EntrySet;,Ljava/util/LinkedList;,Ljava/util/HashMap$EntrySet;,Ljava/util/HashSet;,Lcom/android/internal/telephony/data/DataNetworkController$NetworkRequestList;,Landroid/util/MapCollections$KeySet;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;,Landroid/util/MapCollections$MapIterator;,Ljava/util/LinkedList$ListItr;,Ljava/util/HashMap$EntryIterator;,Ljava/util/HashMap$KeyIterator;]Ljava/util/function/Predicate;Lcom/android/internal/telephony/data/DataNetworkController$$ExternalSyntheticLambda24;,Lcom/android/internal/telephony/data/DataNetworkController$$ExternalSyntheticLambda15;,Lcom/android/internal/telephony/data/DataNetworkController$$ExternalSyntheticLambda16;,Lcom/android/internal/telephony/data/DataNetworkController$$ExternalSyntheticLambda26;
 HSPLjava/util/Collection;->spliterator()Ljava/util/Spliterator;
 HSPLjava/util/Collection;->stream()Ljava/util/stream/Stream;+]Ljava/util/Collection;megamorphic_types
 HSPLjava/util/Collections$1;-><init>(Ljava/lang/Object;)V
@@ -27417,16 +27432,16 @@
 HSPLjava/util/Collections$ReverseComparator2;-><init>(Ljava/util/Comparator;)V
 HSPLjava/util/Collections$ReverseComparator2;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLjava/util/Collections$ReverseComparator;->compare(Ljava/lang/Comparable;Ljava/lang/Comparable;)I
-HSPLjava/util/Collections$ReverseComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLjava/util/Collections$ReverseComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I+]Ljava/util/Collections$ReverseComparator;Ljava/util/Collections$ReverseComparator;
 HSPLjava/util/Collections$SetFromMap;-><init>(Ljava/util/Map;)V
-HSPLjava/util/Collections$SetFromMap;->add(Ljava/lang/Object;)Z+]Ljava/util/Map;Ljava/util/WeakHashMap;,Ljava/util/concurrent/ConcurrentHashMap;,Ljava/util/IdentityHashMap;
+HSPLjava/util/Collections$SetFromMap;->add(Ljava/lang/Object;)Z+]Ljava/util/Map;Ljava/util/WeakHashMap;,Ljava/util/IdentityHashMap;,Ljava/util/concurrent/ConcurrentHashMap;
 HSPLjava/util/Collections$SetFromMap;->clear()V
-HSPLjava/util/Collections$SetFromMap;->contains(Ljava/lang/Object;)Z
+HSPLjava/util/Collections$SetFromMap;->contains(Ljava/lang/Object;)Z+]Ljava/util/Map;Ljava/util/IdentityHashMap;,Ljava/util/concurrent/ConcurrentHashMap;
 HSPLjava/util/Collections$SetFromMap;->forEach(Ljava/util/function/Consumer;)V
 HSPLjava/util/Collections$SetFromMap;->isEmpty()Z
 HSPLjava/util/Collections$SetFromMap;->iterator()Ljava/util/Iterator;
-HSPLjava/util/Collections$SetFromMap;->remove(Ljava/lang/Object;)Z
-HSPLjava/util/Collections$SetFromMap;->size()I
+HSPLjava/util/Collections$SetFromMap;->remove(Ljava/lang/Object;)Z+]Ljava/util/Map;Ljava/util/IdentityHashMap;
+HSPLjava/util/Collections$SetFromMap;->size()I+]Ljava/util/Map;Ljava/util/IdentityHashMap;
 HSPLjava/util/Collections$SetFromMap;->toArray()[Ljava/lang/Object;
 HSPLjava/util/Collections$SetFromMap;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
 HSPLjava/util/Collections$SingletonList;-><init>(Ljava/lang/Object;)V
@@ -27448,7 +27463,7 @@
 HSPLjava/util/Collections$SingletonSet;->size()I
 HSPLjava/util/Collections$SynchronizedCollection;-><init>(Ljava/util/Collection;)V
 HSPLjava/util/Collections$SynchronizedCollection;-><init>(Ljava/util/Collection;Ljava/lang/Object;)V
-HSPLjava/util/Collections$SynchronizedCollection;->add(Ljava/lang/Object;)Z
+HSPLjava/util/Collections$SynchronizedCollection;->add(Ljava/lang/Object;)Z+]Ljava/util/Collection;Ljava/util/Collections$SetFromMap;,Landroid/util/ArraySet;,Ljava/util/HashSet;,Ljava/util/ArrayList;
 HSPLjava/util/Collections$SynchronizedCollection;->addAll(Ljava/util/Collection;)Z
 HSPLjava/util/Collections$SynchronizedCollection;->clear()V
 HSPLjava/util/Collections$SynchronizedCollection;->contains(Ljava/lang/Object;)Z
@@ -27465,7 +27480,7 @@
 HSPLjava/util/Collections$SynchronizedMap;->clear()V
 HSPLjava/util/Collections$SynchronizedMap;->containsKey(Ljava/lang/Object;)Z
 HSPLjava/util/Collections$SynchronizedMap;->entrySet()Ljava/util/Set;
-HSPLjava/util/Collections$SynchronizedMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/Collections$SynchronizedMap;->get(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/Map;missing_types
 HSPLjava/util/Collections$SynchronizedMap;->getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/Collections$SynchronizedMap;->isEmpty()Z
 HSPLjava/util/Collections$SynchronizedMap;->keySet()Ljava/util/Set;
@@ -27478,16 +27493,16 @@
 HSPLjava/util/Collections$SynchronizedSet;-><init>(Ljava/util/Set;)V
 HSPLjava/util/Collections$SynchronizedSet;-><init>(Ljava/util/Set;Ljava/lang/Object;)V
 HSPLjava/util/Collections$SynchronizedSet;->equals(Ljava/lang/Object;)Z
-HSPLjava/util/Collections$UnmodifiableCollection$1;-><init>(Ljava/util/Collections$UnmodifiableCollection;)V
+HSPLjava/util/Collections$UnmodifiableCollection$1;-><init>(Ljava/util/Collections$UnmodifiableCollection;)V+]Ljava/util/Collection;megamorphic_types
 HSPLjava/util/Collections$UnmodifiableCollection$1;->hasNext()Z+]Ljava/util/Iterator;missing_types
-HSPLjava/util/Collections$UnmodifiableCollection$1;->next()Ljava/lang/Object;+]Ljava/util/Iterator;missing_types
+HSPLjava/util/Collections$UnmodifiableCollection$1;->next()Ljava/lang/Object;+]Ljava/util/Iterator;megamorphic_types
 HSPLjava/util/Collections$UnmodifiableCollection;-><init>(Ljava/util/Collection;)V
-HSPLjava/util/Collections$UnmodifiableCollection;->contains(Ljava/lang/Object;)Z+]Ljava/util/Collection;Ljava/util/HashSet;,Ljava/util/RegularEnumSet;,Ljava/util/ArrayList;,Ljava/util/LinkedHashSet;
-HSPLjava/util/Collections$UnmodifiableCollection;->containsAll(Ljava/util/Collection;)Z
+HSPLjava/util/Collections$UnmodifiableCollection;->contains(Ljava/lang/Object;)Z+]Ljava/util/Collection;megamorphic_types
+HSPLjava/util/Collections$UnmodifiableCollection;->containsAll(Ljava/util/Collection;)Z+]Ljava/util/Collection;Ljava/util/HashSet;
 HSPLjava/util/Collections$UnmodifiableCollection;->forEach(Ljava/util/function/Consumer;)V
 HSPLjava/util/Collections$UnmodifiableCollection;->isEmpty()Z
 HSPLjava/util/Collections$UnmodifiableCollection;->iterator()Ljava/util/Iterator;
-HSPLjava/util/Collections$UnmodifiableCollection;->size()I
+HSPLjava/util/Collections$UnmodifiableCollection;->size()I+]Ljava/util/Collection;missing_types
 HSPLjava/util/Collections$UnmodifiableCollection;->stream()Ljava/util/stream/Stream;
 HSPLjava/util/Collections$UnmodifiableCollection;->toArray()[Ljava/lang/Object;
 HSPLjava/util/Collections$UnmodifiableCollection;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
@@ -27498,18 +27513,18 @@
 HSPLjava/util/Collections$UnmodifiableList$1;->nextIndex()I
 HSPLjava/util/Collections$UnmodifiableList;-><init>(Ljava/util/List;)V
 HSPLjava/util/Collections$UnmodifiableList;->equals(Ljava/lang/Object;)Z
-HSPLjava/util/Collections$UnmodifiableList;->get(I)Ljava/lang/Object;
+HSPLjava/util/Collections$UnmodifiableList;->get(I)Ljava/lang/Object;+]Ljava/util/List;Ljava/util/AbstractList$RandomAccessSubList;,Ljava/util/ArrayList;
 HSPLjava/util/Collections$UnmodifiableList;->hashCode()I
 HSPLjava/util/Collections$UnmodifiableList;->indexOf(Ljava/lang/Object;)I
 HSPLjava/util/Collections$UnmodifiableList;->listIterator()Ljava/util/ListIterator;
 HSPLjava/util/Collections$UnmodifiableList;->listIterator(I)Ljava/util/ListIterator;
 HSPLjava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1;-><init>(Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet;)V
-HSPLjava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1;->hasNext()Z
-HSPLjava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1;->next()Ljava/lang/Object;
-HSPLjava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1;->next()Ljava/util/Map$Entry;
+HSPLjava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1;->hasNext()Z+]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;,Ljava/util/TreeMap$EntryIterator;,Ljava/util/LinkedHashMap$LinkedEntryIterator;
+HSPLjava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1;->next()Ljava/lang/Object;+]Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1;Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1;
+HSPLjava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1;->next()Ljava/util/Map$Entry;+]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;,Ljava/util/TreeMap$EntryIterator;,Ljava/util/LinkedHashMap$LinkedEntryIterator;
 HSPLjava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry;-><init>(Ljava/util/Map$Entry;)V
-HSPLjava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry;->getKey()Ljava/lang/Object;
-HSPLjava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry;->getValue()Ljava/lang/Object;
+HSPLjava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry;->getKey()Ljava/lang/Object;+]Ljava/util/Map$Entry;Ljava/util/TreeMap$TreeMapEntry;,Ljava/util/LinkedHashMap$LinkedHashMapEntry;,Ljava/util/HashMap$Node;
+HSPLjava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry;->getValue()Ljava/lang/Object;+]Ljava/util/Map$Entry;Ljava/util/TreeMap$TreeMapEntry;,Ljava/util/LinkedHashMap$LinkedHashMapEntry;,Ljava/util/HashMap$Node;
 HSPLjava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet;-><init>(Ljava/util/Set;)V
 HSPLjava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet;->iterator()Ljava/util/Iterator;
 HSPLjava/util/Collections$UnmodifiableMap;-><init>(Ljava/util/Map;)V
@@ -27517,7 +27532,7 @@
 HSPLjava/util/Collections$UnmodifiableMap;->entrySet()Ljava/util/Set;
 HSPLjava/util/Collections$UnmodifiableMap;->equals(Ljava/lang/Object;)Z
 HSPLjava/util/Collections$UnmodifiableMap;->forEach(Ljava/util/function/BiConsumer;)V
-HSPLjava/util/Collections$UnmodifiableMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/Collections$UnmodifiableMap;->get(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/Map;missing_types
 HSPLjava/util/Collections$UnmodifiableMap;->hashCode()I
 HSPLjava/util/Collections$UnmodifiableMap;->isEmpty()Z
 HSPLjava/util/Collections$UnmodifiableMap;->keySet()Ljava/util/Set;
@@ -27530,10 +27545,10 @@
 HSPLjava/util/Collections$UnmodifiableSet;->equals(Ljava/lang/Object;)Z
 HSPLjava/util/Collections$UnmodifiableSortedMap;-><init>(Ljava/util/SortedMap;)V
 HSPLjava/util/Collections$UnmodifiableSortedSet;-><init>(Ljava/util/SortedSet;)V
-HSPLjava/util/Collections;->addAll(Ljava/util/Collection;[Ljava/lang/Object;)Z
+HSPLjava/util/Collections;->addAll(Ljava/util/Collection;[Ljava/lang/Object;)Z+]Ljava/util/Collection;Ljava/util/ArrayList;
 HSPLjava/util/Collections;->binarySearch(Ljava/util/List;Ljava/lang/Object;)I
 HSPLjava/util/Collections;->binarySearch(Ljava/util/List;Ljava/lang/Object;Ljava/util/Comparator;)I
-HSPLjava/util/Collections;->disjoint(Ljava/util/Collection;Ljava/util/Collection;)Z+]Ljava/util/Iterator;Ljava/util/AbstractList$Itr;
+HSPLjava/util/Collections;->disjoint(Ljava/util/Collection;Ljava/util/Collection;)Z+]Ljava/util/Collection;Ljava/util/Arrays$ArrayList;,Ljava/util/HashSet;]Ljava/util/Iterator;Ljava/util/Arrays$ArrayItr;,Ljava/util/AbstractList$Itr;
 HSPLjava/util/Collections;->emptyEnumeration()Ljava/util/Enumeration;
 HSPLjava/util/Collections;->emptyIterator()Ljava/util/Iterator;
 HSPLjava/util/Collections;->emptyList()Ljava/util/List;
@@ -27542,10 +27557,10 @@
 HSPLjava/util/Collections;->emptySet()Ljava/util/Set;
 HSPLjava/util/Collections;->enumeration(Ljava/util/Collection;)Ljava/util/Enumeration;
 HSPLjava/util/Collections;->eq(Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLjava/util/Collections;->indexedBinarySearch(Ljava/util/List;Ljava/lang/Object;)I
-HSPLjava/util/Collections;->indexedBinarySearch(Ljava/util/List;Ljava/lang/Object;Ljava/util/Comparator;)I
+HSPLjava/util/Collections;->indexedBinarySearch(Ljava/util/List;Ljava/lang/Object;)I+]Ljava/util/List;missing_types]Ljava/lang/Comparable;missing_types
+HSPLjava/util/Collections;->indexedBinarySearch(Ljava/util/List;Ljava/lang/Object;Ljava/util/Comparator;)I+]Ljava/util/List;missing_types
 HSPLjava/util/Collections;->list(Ljava/util/Enumeration;)Ljava/util/ArrayList;
-HSPLjava/util/Collections;->max(Ljava/util/Collection;)Ljava/lang/Object;
+HSPLjava/util/Collections;->max(Ljava/util/Collection;)Ljava/lang/Object;+]Ljava/util/Collection;missing_types]Ljava/lang/Comparable;Ljava/lang/Integer;]Ljava/util/Iterator;missing_types
 HSPLjava/util/Collections;->max(Ljava/util/Collection;Ljava/util/Comparator;)Ljava/lang/Object;
 HSPLjava/util/Collections;->min(Ljava/util/Collection;Ljava/util/Comparator;)Ljava/lang/Object;
 HSPLjava/util/Collections;->nCopies(ILjava/lang/Object;)Ljava/util/List;
@@ -27577,16 +27592,16 @@
 HSPLjava/util/Collections;->unmodifiableSortedMap(Ljava/util/SortedMap;)Ljava/util/SortedMap;
 HSPLjava/util/Collections;->unmodifiableSortedSet(Ljava/util/SortedSet;)Ljava/util/SortedSet;
 HSPLjava/util/ComparableTimSort;-><init>([Ljava/lang/Object;[Ljava/lang/Object;II)V
-HSPLjava/util/ComparableTimSort;->binarySort([Ljava/lang/Object;III)V
-HSPLjava/util/ComparableTimSort;->countRunAndMakeAscending([Ljava/lang/Object;II)I
+HSPLjava/util/ComparableTimSort;->binarySort([Ljava/lang/Object;III)V+]Ljava/lang/Comparable;missing_types
+HSPLjava/util/ComparableTimSort;->countRunAndMakeAscending([Ljava/lang/Object;II)I+]Ljava/lang/Comparable;Ljava/lang/String;
 HSPLjava/util/ComparableTimSort;->ensureCapacity(I)[Ljava/lang/Object;
 HSPLjava/util/ComparableTimSort;->gallopLeft(Ljava/lang/Comparable;[Ljava/lang/Object;III)I
 HSPLjava/util/ComparableTimSort;->gallopRight(Ljava/lang/Comparable;[Ljava/lang/Object;III)I
 HSPLjava/util/ComparableTimSort;->mergeAt(I)V
 HSPLjava/util/ComparableTimSort;->mergeCollapse()V
 HSPLjava/util/ComparableTimSort;->mergeForceCollapse()V
-HSPLjava/util/ComparableTimSort;->mergeHi(IIII)V
-HSPLjava/util/ComparableTimSort;->mergeLo(IIII)V
+HSPLjava/util/ComparableTimSort;->mergeHi(IIII)V+]Ljava/lang/Comparable;Ljava/lang/Double;
+HSPLjava/util/ComparableTimSort;->mergeLo(IIII)V+]Ljava/lang/Comparable;Ljava/lang/Double;
 HSPLjava/util/ComparableTimSort;->minRunLength(I)I
 HSPLjava/util/ComparableTimSort;->pushRun(II)V
 HSPLjava/util/ComparableTimSort;->reverseRange([Ljava/lang/Object;II)V
@@ -27633,10 +27648,10 @@
 HSPLjava/util/Date;->getTime()J
 HSPLjava/util/Date;->getTimeImpl()J
 HSPLjava/util/Date;->getYear()I
-HSPLjava/util/Date;->normalize()Lsun/util/calendar/BaseCalendar$Date;
+HSPLjava/util/Date;->normalize()Lsun/util/calendar/BaseCalendar$Date;+]Lsun/util/calendar/BaseCalendar;Lsun/util/calendar/Gregorian;
 HSPLjava/util/Date;->setTime(J)V
 HSPLjava/util/Date;->toInstant()Ljava/time/Instant;
-HSPLjava/util/Date;->toString()Ljava/lang/String;
+HSPLjava/util/Date;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/TimeZone;Llibcore/util/ZoneInfo;]Lsun/util/calendar/BaseCalendar$Date;Lsun/util/calendar/Gregorian$Date;
 HSPLjava/util/Dictionary;-><init>()V
 HSPLjava/util/DualPivotQuicksort;->doSort([CII[CII)V
 HSPLjava/util/DualPivotQuicksort;->doSort([FII[FII)V
@@ -27678,9 +27693,9 @@
 HSPLjava/util/EnumMap;->clear()V
 HSPLjava/util/EnumMap;->containsKey(Ljava/lang/Object;)Z
 HSPLjava/util/EnumMap;->entrySet()Ljava/util/Set;
-HSPLjava/util/EnumMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/EnumMap;->get(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/lang/Enum;missing_types
 HSPLjava/util/EnumMap;->getKeyUniverse(Ljava/lang/Class;)[Ljava/lang/Enum;
-HSPLjava/util/EnumMap;->isValidKey(Ljava/lang/Object;)Z
+HSPLjava/util/EnumMap;->isValidKey(Ljava/lang/Object;)Z+]Ljava/lang/Object;missing_types
 HSPLjava/util/EnumMap;->keySet()Ljava/util/Set;
 HSPLjava/util/EnumMap;->maskNull(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/EnumMap;->put(Ljava/lang/Enum;Ljava/lang/Object;)Ljava/lang/Object;
@@ -27714,60 +27729,60 @@
 HSPLjava/util/Formatter$DateTime;->isValid(C)Z
 HSPLjava/util/Formatter$FixedString;-><init>(Ljava/util/Formatter;Ljava/lang/String;)V
 HSPLjava/util/Formatter$FixedString;->index()I
-HSPLjava/util/Formatter$FixedString;->print(Ljava/lang/Object;Ljava/util/Locale;)V+]Ljava/lang/Appendable;Ljava/lang/StringBuilder;
+HSPLjava/util/Formatter$FixedString;->print(Ljava/lang/Object;Ljava/util/Locale;)V+]Ljava/lang/Appendable;missing_types
 HSPLjava/util/Formatter$Flags;-><init>(I)V
-HSPLjava/util/Formatter$Flags;->add(Ljava/util/Formatter$Flags;)Ljava/util/Formatter$Flags;
+HSPLjava/util/Formatter$Flags;->add(Ljava/util/Formatter$Flags;)Ljava/util/Formatter$Flags;+]Ljava/util/Formatter$Flags;Ljava/util/Formatter$Flags;
 HSPLjava/util/Formatter$Flags;->contains(Ljava/util/Formatter$Flags;)Z+]Ljava/util/Formatter$Flags;Ljava/util/Formatter$Flags;
 HSPLjava/util/Formatter$Flags;->parse(C)Ljava/util/Formatter$Flags;
-HSPLjava/util/Formatter$Flags;->parse(Ljava/lang/String;)Ljava/util/Formatter$Flags;+]Ljava/lang/String;Ljava/lang/String;
+HSPLjava/util/Formatter$Flags;->parse(Ljava/lang/String;)Ljava/util/Formatter$Flags;+]Ljava/lang/String;Ljava/lang/String;]Ljava/util/Formatter$Flags;Ljava/util/Formatter$Flags;
 HSPLjava/util/Formatter$Flags;->valueOf()I
 HSPLjava/util/Formatter$FormatSpecifier;-><init>(Ljava/util/Formatter;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLjava/util/Formatter$FormatSpecifier;->addZeros([CI)[C
 HSPLjava/util/Formatter$FormatSpecifier;->adjustWidth(ILjava/util/Formatter$Flags;Z)I
 HSPLjava/util/Formatter$FormatSpecifier;->checkBadFlags([Ljava/util/Formatter$Flags;)V+]Ljava/util/Formatter$Flags;Ljava/util/Formatter$Flags;
 HSPLjava/util/Formatter$FormatSpecifier;->checkCharacter()V
-HSPLjava/util/Formatter$FormatSpecifier;->checkDateTime()V
+HSPLjava/util/Formatter$FormatSpecifier;->checkDateTime()V+]Ljava/util/Formatter$Flags;Ljava/util/Formatter$Flags;
 HSPLjava/util/Formatter$FormatSpecifier;->checkFloat()V
 HSPLjava/util/Formatter$FormatSpecifier;->checkGeneral()V+]Ljava/util/Formatter$Flags;Ljava/util/Formatter$Flags;
 HSPLjava/util/Formatter$FormatSpecifier;->checkInteger()V
-HSPLjava/util/Formatter$FormatSpecifier;->checkNumeric()V
+HSPLjava/util/Formatter$FormatSpecifier;->checkNumeric()V+]Ljava/util/Formatter$Flags;Ljava/util/Formatter$Flags;
 HSPLjava/util/Formatter$FormatSpecifier;->checkText()V
 HSPLjava/util/Formatter$FormatSpecifier;->conversion(Ljava/lang/String;)C
 HSPLjava/util/Formatter$FormatSpecifier;->flags(Ljava/lang/String;)Ljava/util/Formatter$Flags;+]Ljava/util/Formatter$Flags;Ljava/util/Formatter$Flags;
-HSPLjava/util/Formatter$FormatSpecifier;->getZero(Ljava/util/Locale;)C
+HSPLjava/util/Formatter$FormatSpecifier;->getZero(Ljava/util/Locale;)C+]Ljava/util/Formatter;Ljava/util/Formatter;]Ljava/util/Locale;Ljava/util/Locale;
 HSPLjava/util/Formatter$FormatSpecifier;->index()I
 HSPLjava/util/Formatter$FormatSpecifier;->index(Ljava/lang/String;)I
-HSPLjava/util/Formatter$FormatSpecifier;->justify(Ljava/lang/String;)Ljava/lang/String;
-HSPLjava/util/Formatter$FormatSpecifier;->leadingSign(Ljava/lang/StringBuilder;Z)Ljava/lang/StringBuilder;
+HSPLjava/util/Formatter$FormatSpecifier;->justify(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Formatter$Flags;Ljava/util/Formatter$Flags;
+HSPLjava/util/Formatter$FormatSpecifier;->leadingSign(Ljava/lang/StringBuilder;Z)Ljava/lang/StringBuilder;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Formatter$Flags;Ljava/util/Formatter$Flags;
 HSPLjava/util/Formatter$FormatSpecifier;->localizedMagnitude(Ljava/lang/StringBuilder;JLjava/util/Formatter$Flags;ILjava/util/Locale;)Ljava/lang/StringBuilder;
 HSPLjava/util/Formatter$FormatSpecifier;->localizedMagnitude(Ljava/lang/StringBuilder;[CLjava/util/Formatter$Flags;ILjava/util/Locale;)Ljava/lang/StringBuilder;+]Ljava/text/DecimalFormatSymbols;Ljava/text/DecimalFormatSymbols;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Formatter$Flags;Ljava/util/Formatter$Flags;]Ljava/util/Locale;Ljava/util/Locale;
 HSPLjava/util/Formatter$FormatSpecifier;->precision(Ljava/lang/String;)I
 HSPLjava/util/Formatter$FormatSpecifier;->print(BLjava/util/Locale;)V
-HSPLjava/util/Formatter$FormatSpecifier;->print(DLjava/util/Locale;)V
+HSPLjava/util/Formatter$FormatSpecifier;->print(DLjava/util/Locale;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Appendable;Lcom/android/internal/util/FastPrintWriter;,Ljava/lang/StringBuilder;
 HSPLjava/util/Formatter$FormatSpecifier;->print(FLjava/util/Locale;)V
 HSPLjava/util/Formatter$FormatSpecifier;->print(ILjava/util/Locale;)V
-HSPLjava/util/Formatter$FormatSpecifier;->print(JLjava/util/Locale;)V
-HSPLjava/util/Formatter$FormatSpecifier;->print(Ljava/lang/Object;Ljava/util/Locale;)V
-HSPLjava/util/Formatter$FormatSpecifier;->print(Ljava/lang/String;)V+]Ljava/util/Formatter$Flags;Ljava/util/Formatter$Flags;]Ljava/lang/Appendable;Ljava/lang/StringBuilder;
-HSPLjava/util/Formatter$FormatSpecifier;->print(Ljava/lang/StringBuilder;DLjava/util/Locale;Ljava/util/Formatter$Flags;CIZ)V
-HSPLjava/util/Formatter$FormatSpecifier;->print(Ljava/lang/StringBuilder;Ljava/util/Calendar;CLjava/util/Locale;)Ljava/lang/Appendable;
+HSPLjava/util/Formatter$FormatSpecifier;->print(JLjava/util/Locale;)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Formatter$Flags;Ljava/util/Formatter$Flags;]Ljava/lang/Appendable;missing_types
+HSPLjava/util/Formatter$FormatSpecifier;->print(Ljava/lang/Object;Ljava/util/Locale;)V+]Ljava/lang/Appendable;Ljava/lang/StringBuilder;
+HSPLjava/util/Formatter$FormatSpecifier;->print(Ljava/lang/String;)V+]Ljava/util/Formatter$Flags;Ljava/util/Formatter$Flags;]Ljava/lang/Appendable;missing_types
+HSPLjava/util/Formatter$FormatSpecifier;->print(Ljava/lang/StringBuilder;DLjava/util/Locale;Ljava/util/Formatter$Flags;CIZ)V+]Ljava/util/Formatter$Flags;Ljava/util/Formatter$Flags;]Ljdk/internal/math/FormattedFloatingDecimal;Ljdk/internal/math/FormattedFloatingDecimal;
+HSPLjava/util/Formatter$FormatSpecifier;->print(Ljava/lang/StringBuilder;Ljava/util/Calendar;CLjava/util/Locale;)Ljava/lang/Appendable;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Calendar;Ljava/util/GregorianCalendar;
 HSPLjava/util/Formatter$FormatSpecifier;->print(Ljava/math/BigInteger;Ljava/util/Locale;)V
-HSPLjava/util/Formatter$FormatSpecifier;->print(Ljava/util/Calendar;CLjava/util/Locale;)V
-HSPLjava/util/Formatter$FormatSpecifier;->printBoolean(Ljava/lang/Object;)V
+HSPLjava/util/Formatter$FormatSpecifier;->print(Ljava/util/Calendar;CLjava/util/Locale;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Formatter$Flags;Ljava/util/Formatter$Flags;]Ljava/lang/Appendable;Ljava/lang/StringBuilder;
+HSPLjava/util/Formatter$FormatSpecifier;->printBoolean(Ljava/lang/Object;)V+]Ljava/lang/Boolean;Ljava/lang/Boolean;
 HSPLjava/util/Formatter$FormatSpecifier;->printCharacter(Ljava/lang/Object;)V
 HSPLjava/util/Formatter$FormatSpecifier;->printDateTime(Ljava/lang/Object;Ljava/util/Locale;)V
-HSPLjava/util/Formatter$FormatSpecifier;->printFloat(Ljava/lang/Object;Ljava/util/Locale;)V
-HSPLjava/util/Formatter$FormatSpecifier;->printInteger(Ljava/lang/Object;Ljava/util/Locale;)V
+HSPLjava/util/Formatter$FormatSpecifier;->printFloat(Ljava/lang/Object;Ljava/util/Locale;)V+]Ljava/lang/Double;Ljava/lang/Double;]Ljava/lang/Float;Ljava/lang/Float;
+HSPLjava/util/Formatter$FormatSpecifier;->printInteger(Ljava/lang/Object;Ljava/util/Locale;)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/lang/Long;Ljava/lang/Long;]Ljava/lang/Byte;Ljava/lang/Byte;
 HSPLjava/util/Formatter$FormatSpecifier;->printString(Ljava/lang/Object;Ljava/util/Locale;)V+]Ljava/util/Formatter$Flags;Ljava/util/Formatter$Flags;]Ljava/lang/Object;missing_types
-HSPLjava/util/Formatter$FormatSpecifier;->trailingSign(Ljava/lang/StringBuilder;Z)Ljava/lang/StringBuilder;
+HSPLjava/util/Formatter$FormatSpecifier;->trailingSign(Ljava/lang/StringBuilder;Z)Ljava/lang/StringBuilder;+]Ljava/util/Formatter$Flags;Ljava/util/Formatter$Flags;
 HSPLjava/util/Formatter$FormatSpecifier;->width(Ljava/lang/String;)I
-HSPLjava/util/Formatter$FormatSpecifierParser;-><init>(Ljava/util/Formatter;Ljava/lang/String;I)V
+HSPLjava/util/Formatter$FormatSpecifierParser;-><init>(Ljava/util/Formatter;Ljava/lang/String;I)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLjava/util/Formatter$FormatSpecifierParser;->advance()C
 HSPLjava/util/Formatter$FormatSpecifierParser;->back(I)V
 HSPLjava/util/Formatter$FormatSpecifierParser;->getEndIdx()I
 HSPLjava/util/Formatter$FormatSpecifierParser;->getFormatSpecifier()Ljava/util/Formatter$FormatSpecifier;
 HSPLjava/util/Formatter$FormatSpecifierParser;->isEnd()Z
-HSPLjava/util/Formatter$FormatSpecifierParser;->nextInt()Ljava/lang/String;
+HSPLjava/util/Formatter$FormatSpecifierParser;->nextInt()Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/util/Formatter$FormatSpecifierParser;->nextIsInt()Z
 HSPLjava/util/Formatter$FormatSpecifierParser;->peek()C
 HSPLjava/util/Formatter;->-$$Nest$fgeta(Ljava/util/Formatter;)Ljava/lang/Appendable;
@@ -27781,23 +27796,23 @@
 HSPLjava/util/Formatter;->ensureOpen()V
 HSPLjava/util/Formatter;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/util/Formatter;+]Ljava/util/Formatter;Ljava/util/Formatter;
 HSPLjava/util/Formatter;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/util/Formatter;+]Ljava/util/Formatter$FormatString;Ljava/util/Formatter$FixedString;,Ljava/util/Formatter$FormatSpecifier;
-HSPLjava/util/Formatter;->getZero(Ljava/util/Locale;)C+]Ljava/util/Locale;Ljava/util/Locale;
+HSPLjava/util/Formatter;->getZero(Ljava/util/Locale;)C+]Ljava/util/Locale;Ljava/util/Locale;]Llibcore/icu/DecimalFormatData;Llibcore/icu/DecimalFormatData;
 HSPLjava/util/Formatter;->locale()Ljava/util/Locale;
 HSPLjava/util/Formatter;->nonNullAppendable(Ljava/lang/Appendable;)Ljava/lang/Appendable;
 HSPLjava/util/Formatter;->out()Ljava/lang/Appendable;
 HSPLjava/util/Formatter;->parse(Ljava/lang/String;)[Ljava/util/Formatter$FormatString;+]Ljava/lang/String;Ljava/lang/String;]Ljava/util/Formatter$FormatSpecifierParser;Ljava/util/Formatter$FormatSpecifierParser;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLjava/util/Formatter;->toString()Ljava/lang/String;+]Ljava/lang/Object;Ljava/lang/StringBuilder;
-HSPLjava/util/GregorianCalendar;-><init>()V
+HSPLjava/util/GregorianCalendar;-><init>()V+]Ljava/util/GregorianCalendar;Ljava/util/GregorianCalendar;
 HSPLjava/util/GregorianCalendar;-><init>(IIIIII)V
 HSPLjava/util/GregorianCalendar;-><init>(IIIIIII)V
 HSPLjava/util/GregorianCalendar;-><init>(Ljava/util/TimeZone;)V
-HSPLjava/util/GregorianCalendar;-><init>(Ljava/util/TimeZone;Ljava/util/Locale;)V
-HSPLjava/util/GregorianCalendar;->add(II)V
-HSPLjava/util/GregorianCalendar;->adjustDstOffsetForInvalidWallClock(JLjava/util/TimeZone;I)I
-HSPLjava/util/GregorianCalendar;->adjustForZoneAndDaylightSavingsTime(IJLjava/util/TimeZone;)J
-HSPLjava/util/GregorianCalendar;->clone()Ljava/lang/Object;
-HSPLjava/util/GregorianCalendar;->computeFields()V
-HSPLjava/util/GregorianCalendar;->computeFields(II)I+]Lsun/util/calendar/Gregorian;Lsun/util/calendar/Gregorian;]Ljava/util/GregorianCalendar;Ljava/util/GregorianCalendar;]Ljava/util/TimeZone;Ljava/util/SimpleTimeZone;]Lsun/util/calendar/BaseCalendar$Date;Lsun/util/calendar/Gregorian$Date;]Lsun/util/calendar/BaseCalendar;Lsun/util/calendar/Gregorian;]Llibcore/util/ZoneInfo;Llibcore/util/ZoneInfo;
+HSPLjava/util/GregorianCalendar;-><init>(Ljava/util/TimeZone;Ljava/util/Locale;)V+]Lsun/util/calendar/Gregorian;Lsun/util/calendar/Gregorian;]Ljava/util/GregorianCalendar;Ljava/util/GregorianCalendar;
+HSPLjava/util/GregorianCalendar;->add(II)V+]Ljava/util/GregorianCalendar;Ljava/util/GregorianCalendar;
+HSPLjava/util/GregorianCalendar;->adjustDstOffsetForInvalidWallClock(JLjava/util/TimeZone;I)I+]Ljava/util/TimeZone;Llibcore/util/ZoneInfo;
+HSPLjava/util/GregorianCalendar;->adjustForZoneAndDaylightSavingsTime(IJLjava/util/TimeZone;)J+]Ljava/util/TimeZone;Ljava/util/SimpleTimeZone;,Llibcore/util/ZoneInfo;]Llibcore/util/ZoneInfo;Llibcore/util/ZoneInfo;
+HSPLjava/util/GregorianCalendar;->clone()Ljava/lang/Object;+]Lsun/util/calendar/BaseCalendar$Date;Lsun/util/calendar/Gregorian$Date;
+HSPLjava/util/GregorianCalendar;->computeFields()V+]Ljava/util/GregorianCalendar;Ljava/util/GregorianCalendar;
+HSPLjava/util/GregorianCalendar;->computeFields(II)I+]Lsun/util/calendar/Gregorian;Lsun/util/calendar/Gregorian;]Ljava/util/GregorianCalendar;Ljava/util/GregorianCalendar;]Lsun/util/calendar/BaseCalendar$Date;Lsun/util/calendar/Gregorian$Date;]Lsun/util/calendar/BaseCalendar;Lsun/util/calendar/Gregorian;]Llibcore/util/ZoneInfo;Llibcore/util/ZoneInfo;]Ljava/util/TimeZone;Ljava/util/SimpleTimeZone;
 HSPLjava/util/GregorianCalendar;->computeTime()V+]Ljava/util/GregorianCalendar;Ljava/util/GregorianCalendar;
 HSPLjava/util/GregorianCalendar;->getActualMaximum(I)I
 HSPLjava/util/GregorianCalendar;->getCalendarDate(J)Lsun/util/calendar/BaseCalendar$Date;
@@ -27810,7 +27825,7 @@
 HSPLjava/util/GregorianCalendar;->getMinimum(I)I
 HSPLjava/util/GregorianCalendar;->getNormalizedCalendar()Ljava/util/GregorianCalendar;
 HSPLjava/util/GregorianCalendar;->getTimeZone()Ljava/util/TimeZone;
-HSPLjava/util/GregorianCalendar;->getWeekNumber(JJ)I
+HSPLjava/util/GregorianCalendar;->getWeekNumber(JJ)I+]Ljava/util/GregorianCalendar;Ljava/util/GregorianCalendar;
 HSPLjava/util/GregorianCalendar;->internalGetEra()I
 HSPLjava/util/GregorianCalendar;->isCutoverYear(I)Z
 HSPLjava/util/GregorianCalendar;->isLeapYear(I)Z
@@ -27839,7 +27854,7 @@
 HSPLjava/util/HashMap$KeyIterator;-><init>(Ljava/util/HashMap;)V
 HSPLjava/util/HashMap$KeyIterator;->next()Ljava/lang/Object;+]Ljava/util/HashMap$KeyIterator;Ljava/util/HashMap$KeyIterator;
 HSPLjava/util/HashMap$KeySet;-><init>(Ljava/util/HashMap;)V
-HSPLjava/util/HashMap$KeySet;->contains(Ljava/lang/Object;)Z
+HSPLjava/util/HashMap$KeySet;->contains(Ljava/lang/Object;)Z+]Ljava/util/HashMap;Ljava/util/HashMap;
 HSPLjava/util/HashMap$KeySet;->forEach(Ljava/util/function/Consumer;)V
 HSPLjava/util/HashMap$KeySet;->iterator()Ljava/util/Iterator;
 HSPLjava/util/HashMap$KeySet;->remove(Ljava/lang/Object;)Z
@@ -27854,10 +27869,10 @@
 HSPLjava/util/HashMap$Node;->setValue(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/HashMap$TreeNode;-><init>(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/HashMap$Node;)V
 HSPLjava/util/HashMap$TreeNode;->balanceInsertion(Ljava/util/HashMap$TreeNode;Ljava/util/HashMap$TreeNode;)Ljava/util/HashMap$TreeNode;
-HSPLjava/util/HashMap$TreeNode;->find(ILjava/lang/Object;Ljava/lang/Class;)Ljava/util/HashMap$TreeNode;
+HSPLjava/util/HashMap$TreeNode;->find(ILjava/lang/Object;Ljava/lang/Class;)Ljava/util/HashMap$TreeNode;+]Ljava/lang/Object;Ljava/lang/Long;
 HSPLjava/util/HashMap$TreeNode;->getTreeNode(ILjava/lang/Object;)Ljava/util/HashMap$TreeNode;
 HSPLjava/util/HashMap$TreeNode;->moveRootToFront([Ljava/util/HashMap$Node;Ljava/util/HashMap$TreeNode;)V
-HSPLjava/util/HashMap$TreeNode;->putTreeVal(Ljava/util/HashMap;[Ljava/util/HashMap$Node;ILjava/lang/Object;Ljava/lang/Object;)Ljava/util/HashMap$TreeNode;
+HSPLjava/util/HashMap$TreeNode;->putTreeVal(Ljava/util/HashMap;[Ljava/util/HashMap$Node;ILjava/lang/Object;Ljava/lang/Object;)Ljava/util/HashMap$TreeNode;+]Ljava/util/HashMap;Ljava/util/HashMap;,Ljava/util/LinkedHashMap;
 HSPLjava/util/HashMap$TreeNode;->rotateLeft(Ljava/util/HashMap$TreeNode;Ljava/util/HashMap$TreeNode;)Ljava/util/HashMap$TreeNode;
 HSPLjava/util/HashMap$TreeNode;->rotateRight(Ljava/util/HashMap$TreeNode;Ljava/util/HashMap$TreeNode;)Ljava/util/HashMap$TreeNode;
 HSPLjava/util/HashMap$TreeNode;->split(Ljava/util/HashMap;[Ljava/util/HashMap$Node;II)V
@@ -27877,7 +27892,7 @@
 HSPLjava/util/HashMap;-><init>()V
 HSPLjava/util/HashMap;-><init>(I)V
 HSPLjava/util/HashMap;-><init>(IF)V
-HSPLjava/util/HashMap;-><init>(Ljava/util/Map;)V
+HSPLjava/util/HashMap;-><init>(Ljava/util/Map;)V+]Ljava/util/HashMap;Ljava/util/HashMap;
 HSPLjava/util/HashMap;->afterNodeAccess(Ljava/util/HashMap$Node;)V
 HSPLjava/util/HashMap;->afterNodeInsertion(Z)V
 HSPLjava/util/HashMap;->afterNodeRemoval(Ljava/util/HashMap$Node;)V
@@ -27885,7 +27900,7 @@
 HSPLjava/util/HashMap;->clear()V
 HSPLjava/util/HashMap;->clone()Ljava/lang/Object;
 HSPLjava/util/HashMap;->computeIfAbsent(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;
-HSPLjava/util/HashMap;->containsKey(Ljava/lang/Object;)Z+]Ljava/util/HashMap;missing_types
+HSPLjava/util/HashMap;->containsKey(Ljava/lang/Object;)Z+]Ljava/util/HashMap;megamorphic_types
 HSPLjava/util/HashMap;->containsValue(Ljava/lang/Object;)Z
 HSPLjava/util/HashMap;->entrySet()Ljava/util/Set;
 HSPLjava/util/HashMap;->forEach(Ljava/util/function/BiConsumer;)V
@@ -27900,11 +27915,11 @@
 HSPLjava/util/HashMap;->merge(Ljava/lang/Object;Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/function/BiFunction;Lcom/android/internal/graphics/palette/QuantizerMap$$ExternalSyntheticLambda0;]Ljava/lang/Object;Ljava/lang/Integer;]Ljava/util/HashMap$TreeNode;Ljava/util/HashMap$TreeNode;
 HSPLjava/util/HashMap;->newNode(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/HashMap$Node;)Ljava/util/HashMap$Node;
 HSPLjava/util/HashMap;->newTreeNode(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/HashMap$Node;)Ljava/util/HashMap$TreeNode;
-HSPLjava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/HashMap;missing_types
-HSPLjava/util/HashMap;->putAll(Ljava/util/Map;)V
-HSPLjava/util/HashMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/HashMap;megamorphic_types
+HSPLjava/util/HashMap;->putAll(Ljava/util/Map;)V+]Ljava/util/HashMap;missing_types
+HSPLjava/util/HashMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/HashMap;Ljava/util/HashMap;
 HSPLjava/util/HashMap;->putMapEntries(Ljava/util/Map;Z)V+]Ljava/util/HashMap;missing_types]Ljava/util/Map$Entry;megamorphic_types]Ljava/util/Map;missing_types]Ljava/util/Iterator;missing_types]Ljava/util/Set;missing_types
-HSPLjava/util/HashMap;->putVal(ILjava/lang/Object;Ljava/lang/Object;ZZ)Ljava/lang/Object;+]Ljava/util/HashMap;missing_types]Ljava/lang/Object;megamorphic_types]Ljava/util/HashMap$TreeNode;Ljava/util/HashMap$TreeNode;
+HSPLjava/util/HashMap;->putVal(ILjava/lang/Object;Ljava/lang/Object;ZZ)Ljava/lang/Object;+]Ljava/util/HashMap;megamorphic_types]Ljava/lang/Object;megamorphic_types]Ljava/util/HashMap$TreeNode;Ljava/util/HashMap$TreeNode;
 HSPLjava/util/HashMap;->readObject(Ljava/io/ObjectInputStream;)V
 HSPLjava/util/HashMap;->reinitialize()V
 HSPLjava/util/HashMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/HashMap;missing_types
@@ -27921,16 +27936,16 @@
 HSPLjava/util/HashSet;-><init>(I)V
 HSPLjava/util/HashSet;-><init>(IF)V
 HSPLjava/util/HashSet;-><init>(IFZ)V
-HSPLjava/util/HashSet;-><init>(Ljava/util/Collection;)V
+HSPLjava/util/HashSet;-><init>(Ljava/util/Collection;)V+]Ljava/util/Collection;Ljava/util/WeakHashMap$KeySet;,Ljava/util/ArrayList;]Ljava/util/HashSet;Ljava/util/HashSet;
 HSPLjava/util/HashSet;->add(Ljava/lang/Object;)Z+]Ljava/util/HashMap;Ljava/util/HashMap;,Ljava/util/LinkedHashMap;
-HSPLjava/util/HashSet;->clear()V
+HSPLjava/util/HashSet;->clear()V+]Ljava/util/HashMap;Ljava/util/LinkedHashMap;,Ljava/util/HashMap;
 HSPLjava/util/HashSet;->clone()Ljava/lang/Object;
 HSPLjava/util/HashSet;->contains(Ljava/lang/Object;)Z+]Ljava/util/HashMap;Ljava/util/HashMap;,Ljava/util/LinkedHashMap;
-HSPLjava/util/HashSet;->isEmpty()Z
-HSPLjava/util/HashSet;->iterator()Ljava/util/Iterator;
+HSPLjava/util/HashSet;->isEmpty()Z+]Ljava/util/HashMap;Ljava/util/HashMap;,Ljava/util/LinkedHashMap;
+HSPLjava/util/HashSet;->iterator()Ljava/util/Iterator;+]Ljava/util/HashMap;Ljava/util/HashMap;,Ljava/util/LinkedHashMap;]Ljava/util/Set;Ljava/util/HashMap$KeySet;,Ljava/util/LinkedHashMap$LinkedKeySet;
 HSPLjava/util/HashSet;->readObject(Ljava/io/ObjectInputStream;)V
 HSPLjava/util/HashSet;->remove(Ljava/lang/Object;)Z+]Ljava/util/HashMap;Ljava/util/HashMap;,Ljava/util/LinkedHashMap;
-HSPLjava/util/HashSet;->size()I
+HSPLjava/util/HashSet;->size()I+]Ljava/util/HashMap;Ljava/util/HashMap;,Ljava/util/LinkedHashMap;
 HSPLjava/util/HashSet;->spliterator()Ljava/util/Spliterator;
 HSPLjava/util/HashSet;->writeObject(Ljava/io/ObjectOutputStream;)V
 HSPLjava/util/Hashtable$EntrySet;-><init>(Ljava/util/Hashtable;)V
@@ -27955,12 +27970,12 @@
 HSPLjava/util/Hashtable;-><init>()V
 HSPLjava/util/Hashtable;-><init>(I)V
 HSPLjava/util/Hashtable;-><init>(IF)V
-HSPLjava/util/Hashtable;->addEntry(ILjava/lang/Object;Ljava/lang/Object;I)V+]Ljava/lang/Object;Ljava/lang/String;]Ljava/util/Hashtable;Ljava/util/Hashtable;
+HSPLjava/util/Hashtable;->addEntry(ILjava/lang/Object;Ljava/lang/Object;I)V+]Ljava/lang/Object;Ljava/lang/String;,Ljava/lang/Integer;]Ljava/util/Hashtable;missing_types
 HSPLjava/util/Hashtable;->clear()V
 HSPLjava/util/Hashtable;->clone()Ljava/lang/Object;
 HSPLjava/util/Hashtable;->containsKey(Ljava/lang/Object;)Z
 HSPLjava/util/Hashtable;->entrySet()Ljava/util/Set;
-HSPLjava/util/Hashtable;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/Hashtable;->get(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/lang/Object;Ljava/lang/String;
 HSPLjava/util/Hashtable;->getEnumeration(I)Ljava/util/Enumeration;
 HSPLjava/util/Hashtable;->getIterator(I)Ljava/util/Iterator;
 HSPLjava/util/Hashtable;->isEmpty()Z
@@ -27977,8 +27992,8 @@
 HSPLjava/util/IdentityHashMap$EntryIterator$Entry;->getKey()Ljava/lang/Object;
 HSPLjava/util/IdentityHashMap$EntryIterator$Entry;->getValue()Ljava/lang/Object;
 HSPLjava/util/IdentityHashMap$EntryIterator;-><init>(Ljava/util/IdentityHashMap;)V
-HSPLjava/util/IdentityHashMap$EntryIterator;->next()Ljava/lang/Object;
-HSPLjava/util/IdentityHashMap$EntryIterator;->next()Ljava/util/Map$Entry;
+HSPLjava/util/IdentityHashMap$EntryIterator;->next()Ljava/lang/Object;+]Ljava/util/IdentityHashMap$EntryIterator;Ljava/util/IdentityHashMap$EntryIterator;
+HSPLjava/util/IdentityHashMap$EntryIterator;->next()Ljava/util/Map$Entry;+]Ljava/util/IdentityHashMap$EntryIterator;Ljava/util/IdentityHashMap$EntryIterator;
 HSPLjava/util/IdentityHashMap$EntrySet;-><init>(Ljava/util/IdentityHashMap;)V
 HSPLjava/util/IdentityHashMap$EntrySet;->iterator()Ljava/util/Iterator;
 HSPLjava/util/IdentityHashMap$IdentityHashMapIterator;-><init>(Ljava/util/IdentityHashMap;)V
@@ -28033,7 +28048,7 @@
 HSPLjava/util/ImmutableCollections$Set1;->iterator()Ljava/util/Iterator;
 HSPLjava/util/ImmutableCollections;-><clinit>()V
 HSPLjava/util/ImmutableCollections;->emptyList()Ljava/util/List;
-HSPLjava/util/Iterator;->forEachRemaining(Ljava/util/function/Consumer;)V+]Ljava/util/function/Consumer;missing_types]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;,Ljava/util/AbstractList$Itr;
+HSPLjava/util/Iterator;->forEachRemaining(Ljava/util/function/Consumer;)V+]Ljava/util/function/Consumer;megamorphic_types]Ljava/util/Iterator;Ljava/util/AbstractList$Itr;,Landroid/util/MapCollections$ArrayIterator;
 HSPLjava/util/JumboEnumSet$EnumSetIterator;-><init>(Ljava/util/JumboEnumSet;)V
 HSPLjava/util/JumboEnumSet$EnumSetIterator;->hasNext()Z
 HSPLjava/util/JumboEnumSet$EnumSetIterator;->next()Ljava/lang/Enum;
@@ -28049,15 +28064,15 @@
 HSPLjava/util/KeyValueHolder;->getKey()Ljava/lang/Object;
 HSPLjava/util/KeyValueHolder;->getValue()Ljava/lang/Object;
 HSPLjava/util/LinkedHashMap$LinkedEntryIterator;-><init>(Ljava/util/LinkedHashMap;)V
-HSPLjava/util/LinkedHashMap$LinkedEntryIterator;->next()Ljava/lang/Object;
-HSPLjava/util/LinkedHashMap$LinkedEntryIterator;->next()Ljava/util/Map$Entry;
+HSPLjava/util/LinkedHashMap$LinkedEntryIterator;->next()Ljava/lang/Object;+]Ljava/util/LinkedHashMap$LinkedEntryIterator;Ljava/util/LinkedHashMap$LinkedEntryIterator;
+HSPLjava/util/LinkedHashMap$LinkedEntryIterator;->next()Ljava/util/Map$Entry;+]Ljava/util/LinkedHashMap$LinkedEntryIterator;Ljava/util/LinkedHashMap$LinkedEntryIterator;
 HSPLjava/util/LinkedHashMap$LinkedEntrySet;-><init>(Ljava/util/LinkedHashMap;)V
 HSPLjava/util/LinkedHashMap$LinkedEntrySet;->iterator()Ljava/util/Iterator;
 HSPLjava/util/LinkedHashMap$LinkedEntrySet;->size()I
 HSPLjava/util/LinkedHashMap$LinkedHashIterator;-><init>(Ljava/util/LinkedHashMap;)V
 HSPLjava/util/LinkedHashMap$LinkedHashIterator;->hasNext()Z
 HSPLjava/util/LinkedHashMap$LinkedHashIterator;->nextNode()Ljava/util/LinkedHashMap$LinkedHashMapEntry;
-HSPLjava/util/LinkedHashMap$LinkedHashIterator;->remove()V
+HSPLjava/util/LinkedHashMap$LinkedHashIterator;->remove()V+]Ljava/util/LinkedHashMap;Ljava/util/LinkedHashMap;
 HSPLjava/util/LinkedHashMap$LinkedHashMapEntry;-><init>(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/HashMap$Node;)V
 HSPLjava/util/LinkedHashMap$LinkedKeyIterator;-><init>(Ljava/util/LinkedHashMap;)V
 HSPLjava/util/LinkedHashMap$LinkedKeyIterator;->next()Ljava/lang/Object;+]Ljava/util/LinkedHashMap$LinkedHashMapEntry;Ljava/util/LinkedHashMap$LinkedHashMapEntry;]Ljava/util/LinkedHashMap$LinkedKeyIterator;Ljava/util/LinkedHashMap$LinkedKeyIterator;
@@ -28066,7 +28081,7 @@
 HSPLjava/util/LinkedHashMap$LinkedKeySet;->iterator()Ljava/util/Iterator;
 HSPLjava/util/LinkedHashMap$LinkedKeySet;->size()I
 HSPLjava/util/LinkedHashMap$LinkedValueIterator;-><init>(Ljava/util/LinkedHashMap;)V
-HSPLjava/util/LinkedHashMap$LinkedValueIterator;->next()Ljava/lang/Object;
+HSPLjava/util/LinkedHashMap$LinkedValueIterator;->next()Ljava/lang/Object;+]Ljava/util/LinkedHashMap$LinkedValueIterator;Ljava/util/LinkedHashMap$LinkedValueIterator;
 HSPLjava/util/LinkedHashMap$LinkedValues;-><init>(Ljava/util/LinkedHashMap;)V
 HSPLjava/util/LinkedHashMap$LinkedValues;->iterator()Ljava/util/Iterator;
 HSPLjava/util/LinkedHashMap$LinkedValues;->size()I
@@ -28104,19 +28119,19 @@
 HSPLjava/util/LinkedList$ListItr;->set(Ljava/lang/Object;)V
 HSPLjava/util/LinkedList$Node;-><init>(Ljava/util/LinkedList$Node;Ljava/lang/Object;Ljava/util/LinkedList$Node;)V
 HSPLjava/util/LinkedList;-><init>()V
-HSPLjava/util/LinkedList;-><init>(Ljava/util/Collection;)V
+HSPLjava/util/LinkedList;-><init>(Ljava/util/Collection;)V+]Ljava/util/LinkedList;Ljava/util/LinkedList;
 HSPLjava/util/LinkedList;->add(ILjava/lang/Object;)V
 HSPLjava/util/LinkedList;->add(Ljava/lang/Object;)Z
 HSPLjava/util/LinkedList;->addAll(ILjava/util/Collection;)Z+]Ljava/util/Collection;Ljava/util/LinkedList;]Ljava/util/LinkedList;Ljava/util/LinkedList;
-HSPLjava/util/LinkedList;->addAll(Ljava/util/Collection;)Z
+HSPLjava/util/LinkedList;->addAll(Ljava/util/Collection;)Z+]Ljava/util/LinkedList;Ljava/util/LinkedList;
 HSPLjava/util/LinkedList;->addFirst(Ljava/lang/Object;)V
 HSPLjava/util/LinkedList;->addLast(Ljava/lang/Object;)V
 HSPLjava/util/LinkedList;->checkElementIndex(I)V
 HSPLjava/util/LinkedList;->checkPositionIndex(I)V
 HSPLjava/util/LinkedList;->clear()V
-HSPLjava/util/LinkedList;->contains(Ljava/lang/Object;)Z
+HSPLjava/util/LinkedList;->contains(Ljava/lang/Object;)Z+]Ljava/util/LinkedList;Ljava/util/LinkedList;
 HSPLjava/util/LinkedList;->descendingIterator()Ljava/util/Iterator;
-HSPLjava/util/LinkedList;->get(I)Ljava/lang/Object;
+HSPLjava/util/LinkedList;->get(I)Ljava/lang/Object;+]Ljava/util/LinkedList;Ljava/util/LinkedList;
 HSPLjava/util/LinkedList;->getFirst()Ljava/lang/Object;
 HSPLjava/util/LinkedList;->getLast()Ljava/lang/Object;
 HSPLjava/util/LinkedList;->indexOf(Ljava/lang/Object;)I
@@ -28162,7 +28177,7 @@
 HSPLjava/util/Locale$Cache;->createObject(Ljava/util/Locale$LocaleKey;)Ljava/util/Locale;
 HSPLjava/util/Locale$LocaleKey;->-$$Nest$fgetbase(Ljava/util/Locale$LocaleKey;)Lsun/util/locale/BaseLocale;
 HSPLjava/util/Locale$LocaleKey;->-$$Nest$fgetexts(Ljava/util/Locale$LocaleKey;)Lsun/util/locale/LocaleExtensions;
-HSPLjava/util/Locale$LocaleKey;-><init>(Lsun/util/locale/BaseLocale;Lsun/util/locale/LocaleExtensions;)V
+HSPLjava/util/Locale$LocaleKey;-><init>(Lsun/util/locale/BaseLocale;Lsun/util/locale/LocaleExtensions;)V+]Lsun/util/locale/BaseLocale;Lsun/util/locale/BaseLocale;
 HSPLjava/util/Locale$LocaleKey;-><init>(Lsun/util/locale/BaseLocale;Lsun/util/locale/LocaleExtensions;Ljava/util/Locale$LocaleKey-IA;)V
 HSPLjava/util/Locale$LocaleKey;->equals(Ljava/lang/Object;)Z+]Lsun/util/locale/BaseLocale;Lsun/util/locale/BaseLocale;
 HSPLjava/util/Locale$LocaleKey;->hashCode()I
@@ -28173,13 +28188,13 @@
 HSPLjava/util/Locale;-><init>(Lsun/util/locale/BaseLocale;Lsun/util/locale/LocaleExtensions;Ljava/util/Locale-IA;)V
 HSPLjava/util/Locale;->cleanCache()V
 HSPLjava/util/Locale;->clone()Ljava/lang/Object;
-HSPLjava/util/Locale;->convertOldISOCodes(Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/util/Locale;->convertOldISOCodes(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/util/Locale;->equals(Ljava/lang/Object;)Z+]Lsun/util/locale/BaseLocale;Lsun/util/locale/BaseLocale;
-HSPLjava/util/Locale;->forLanguageTag(Ljava/lang/String;)Ljava/util/Locale;
+HSPLjava/util/Locale;->forLanguageTag(Ljava/lang/String;)Ljava/util/Locale;+]Lsun/util/locale/InternalLocaleBuilder;Lsun/util/locale/InternalLocaleBuilder;]Lsun/util/locale/BaseLocale;Lsun/util/locale/BaseLocale;
 HSPLjava/util/Locale;->getAvailableLocales()[Ljava/util/Locale;
 HSPLjava/util/Locale;->getBaseLocale()Lsun/util/locale/BaseLocale;
 HSPLjava/util/Locale;->getCompatibilityExtensions(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lsun/util/locale/LocaleExtensions;
-HSPLjava/util/Locale;->getCountry()Ljava/lang/String;
+HSPLjava/util/Locale;->getCountry()Ljava/lang/String;+]Lsun/util/locale/BaseLocale;Lsun/util/locale/BaseLocale;
 HSPLjava/util/Locale;->getDefault()Ljava/util/Locale;
 HSPLjava/util/Locale;->getDefault(Ljava/util/Locale$Category;)Ljava/util/Locale;+]Ljava/util/Locale$Category;Ljava/util/Locale$Category;
 HSPLjava/util/Locale;->getDisplayCountry(Ljava/util/Locale;)Ljava/lang/String;
@@ -28190,10 +28205,10 @@
 HSPLjava/util/Locale;->getISO3Language()Ljava/lang/String;
 HSPLjava/util/Locale;->getISOLanguages()[Ljava/lang/String;
 HSPLjava/util/Locale;->getInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lsun/util/locale/LocaleExtensions;)Ljava/util/Locale;
-HSPLjava/util/Locale;->getInstance(Lsun/util/locale/BaseLocale;Lsun/util/locale/LocaleExtensions;)Ljava/util/Locale;
+HSPLjava/util/Locale;->getInstance(Lsun/util/locale/BaseLocale;Lsun/util/locale/LocaleExtensions;)Ljava/util/Locale;+]Ljava/util/Locale$Cache;Ljava/util/Locale$Cache;
 HSPLjava/util/Locale;->getLanguage()Ljava/lang/String;+]Lsun/util/locale/BaseLocale;Lsun/util/locale/BaseLocale;
 HSPLjava/util/Locale;->getScript()Ljava/lang/String;
-HSPLjava/util/Locale;->getVariant()Ljava/lang/String;
+HSPLjava/util/Locale;->getVariant()Ljava/lang/String;+]Lsun/util/locale/BaseLocale;Lsun/util/locale/BaseLocale;
 HSPLjava/util/Locale;->hasExtensions()Z
 HSPLjava/util/Locale;->hashCode()I
 HSPLjava/util/Locale;->isValidBcp47Alpha(Ljava/lang/String;II)Z
@@ -28203,7 +28218,7 @@
 HSPLjava/util/Locale;->readResolve()Ljava/lang/Object;+]Lsun/util/locale/BaseLocale;Lsun/util/locale/BaseLocale;
 HSPLjava/util/Locale;->setDefault(Ljava/util/Locale$Category;Ljava/util/Locale;)V
 HSPLjava/util/Locale;->setDefault(Ljava/util/Locale;)V
-HSPLjava/util/Locale;->toLanguageTag()Ljava/lang/String;
+HSPLjava/util/Locale;->toLanguageTag()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lsun/util/locale/LanguageTag;Lsun/util/locale/LanguageTag;]Ljava/util/List;Ljava/util/Collections$EmptyList;]Ljava/util/Iterator;Ljava/util/Collections$EmptyIterator;
 HSPLjava/util/Locale;->toString()Ljava/lang/String;
 HSPLjava/util/Locale;->writeObject(Ljava/io/ObjectOutputStream;)V
 HSPLjava/util/Map;->computeIfAbsent(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;+]Ljava/util/function/Function;missing_types]Ljava/util/Map;Landroid/util/ArrayMap;
@@ -28257,7 +28272,7 @@
 HSPLjava/util/PriorityQueue;-><init>(ILjava/util/Comparator;)V
 HSPLjava/util/PriorityQueue;-><init>(Ljava/util/Comparator;)V
 HSPLjava/util/PriorityQueue;-><init>(Ljava/util/PriorityQueue;)V
-HSPLjava/util/PriorityQueue;->add(Ljava/lang/Object;)Z
+HSPLjava/util/PriorityQueue;->add(Ljava/lang/Object;)Z+]Ljava/util/PriorityQueue;Ljava/util/PriorityQueue;
 HSPLjava/util/PriorityQueue;->clear()V
 HSPLjava/util/PriorityQueue;->comparator()Ljava/util/Comparator;
 HSPLjava/util/PriorityQueue;->contains(Ljava/lang/Object;)Z
@@ -28271,7 +28286,7 @@
 HSPLjava/util/PriorityQueue;->remove(Ljava/lang/Object;)Z
 HSPLjava/util/PriorityQueue;->removeAt(I)Ljava/lang/Object;
 HSPLjava/util/PriorityQueue;->siftDown(ILjava/lang/Object;)V
-HSPLjava/util/PriorityQueue;->siftDownComparable(ILjava/lang/Object;)V
+HSPLjava/util/PriorityQueue;->siftDownComparable(ILjava/lang/Object;)V+]Ljava/lang/Comparable;Ljava/lang/Integer;
 HSPLjava/util/PriorityQueue;->siftDownUsingComparator(ILjava/lang/Object;)V
 HSPLjava/util/PriorityQueue;->siftUp(ILjava/lang/Object;)V
 HSPLjava/util/PriorityQueue;->siftUpComparable(ILjava/lang/Object;)V
@@ -28284,7 +28299,7 @@
 HSPLjava/util/Properties$LineReader;->readLine()I
 HSPLjava/util/Properties;-><init>()V
 HSPLjava/util/Properties;-><init>(Ljava/util/Properties;)V
-HSPLjava/util/Properties;->getProperty(Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/util/Properties;->getProperty(Ljava/lang/String;)Ljava/lang/String;+]Ljava/util/Properties;Ljava/util/Properties;
 HSPLjava/util/Properties;->getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 HSPLjava/util/Properties;->load(Ljava/io/InputStream;)V
 HSPLjava/util/Properties;->load(Ljava/io/Reader;)V
@@ -28297,20 +28312,20 @@
 HSPLjava/util/Properties;->writeComments(Ljava/io/BufferedWriter;Ljava/lang/String;)V
 HSPLjava/util/PropertyResourceBundle;-><init>(Ljava/io/Reader;)V
 HSPLjava/util/Random;-><init>()V
-HSPLjava/util/Random;-><init>(J)V
+HSPLjava/util/Random;-><init>(J)V+]Ljava/util/Random;missing_types]Ljava/lang/Object;missing_types
 HSPLjava/util/Random;->initialScramble(J)J
-HSPLjava/util/Random;->next(I)I
+HSPLjava/util/Random;->next(I)I+]Ljava/util/concurrent/atomic/AtomicLong;Ljava/util/concurrent/atomic/AtomicLong;
 HSPLjava/util/Random;->nextBoolean()Z
 HSPLjava/util/Random;->nextBytes([B)V
-HSPLjava/util/Random;->nextDouble()D
+HSPLjava/util/Random;->nextDouble()D+]Ljava/util/Random;Ljava/util/Random;
 HSPLjava/util/Random;->nextFloat()F
-HSPLjava/util/Random;->nextGaussian()D
+HSPLjava/util/Random;->nextGaussian()D+]Ljava/util/Random;Ljava/util/Random;
 HSPLjava/util/Random;->nextInt()I
 HSPLjava/util/Random;->nextInt(I)I
 HSPLjava/util/Random;->nextLong()J
 HSPLjava/util/Random;->readObject(Ljava/io/ObjectInputStream;)V
 HSPLjava/util/Random;->resetSeed(J)V
-HSPLjava/util/Random;->seedUniquifier()J
+HSPLjava/util/Random;->seedUniquifier()J+]Ljava/util/concurrent/atomic/AtomicLong;Ljava/util/concurrent/atomic/AtomicLong;
 HSPLjava/util/Random;->setSeed(J)V
 HSPLjava/util/Random;->writeObject(Ljava/io/ObjectOutputStream;)V
 HSPLjava/util/RegularEnumSet$EnumSetIterator;-><init>(Ljava/util/RegularEnumSet;)V
@@ -28324,7 +28339,7 @@
 HSPLjava/util/RegularEnumSet;->addAll(Ljava/util/Collection;)Z
 HSPLjava/util/RegularEnumSet;->clear()V
 HSPLjava/util/RegularEnumSet;->complement()V
-HSPLjava/util/RegularEnumSet;->contains(Ljava/lang/Object;)Z
+HSPLjava/util/RegularEnumSet;->contains(Ljava/lang/Object;)Z+]Ljava/lang/Object;missing_types]Ljava/lang/Enum;missing_types
 HSPLjava/util/RegularEnumSet;->containsAll(Ljava/util/Collection;)Z
 HSPLjava/util/RegularEnumSet;->equals(Ljava/lang/Object;)Z
 HSPLjava/util/RegularEnumSet;->isEmpty()Z
@@ -28365,8 +28380,8 @@
 HSPLjava/util/ResourceBundle;->getBundle(Ljava/lang/String;Ljava/util/Locale;Ljava/lang/ClassLoader;)Ljava/util/ResourceBundle;
 HSPLjava/util/ResourceBundle;->getBundleImpl(Ljava/lang/String;Ljava/util/Locale;Ljava/lang/ClassLoader;Ljava/util/ResourceBundle$Control;)Ljava/util/ResourceBundle;
 HSPLjava/util/ResourceBundle;->getDefaultControl(Ljava/lang/String;)Ljava/util/ResourceBundle$Control;
-HSPLjava/util/ResourceBundle;->getObject(Ljava/lang/String;)Ljava/lang/Object;
-HSPLjava/util/ResourceBundle;->getString(Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/util/ResourceBundle;->getObject(Ljava/lang/String;)Ljava/lang/Object;+]Ljava/util/ResourceBundle;Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;
+HSPLjava/util/ResourceBundle;->getString(Ljava/lang/String;)Ljava/lang/String;+]Ljava/util/ResourceBundle;Landroid/icu/impl/ICUResourceBundleImpl$ResourceTable;
 HSPLjava/util/ResourceBundle;->isValidBundle(Ljava/util/ResourceBundle;)Z
 HSPLjava/util/ResourceBundle;->loadBundle(Ljava/util/ResourceBundle$CacheKey;Ljava/util/List;Ljava/util/ResourceBundle$Control;Z)Ljava/util/ResourceBundle;
 HSPLjava/util/ResourceBundle;->putBundleInCache(Ljava/util/ResourceBundle$CacheKey;Ljava/util/ResourceBundle;Ljava/util/ResourceBundle$Control;)Ljava/util/ResourceBundle;
@@ -28420,7 +28435,7 @@
 HSPLjava/util/SimpleTimeZone;->getOffsets(J[I)I
 HSPLjava/util/SimpleTimeZone;->getRawOffset()I
 HSPLjava/util/SimpleTimeZone;->hasSameRules(Ljava/util/TimeZone;)Z
-HSPLjava/util/Spliterator$OfInt;->forEachRemaining(Ljava/util/function/Consumer;)V+]Ljava/util/Spliterator$OfInt;Ljava/util/Spliterators$IntArraySpliterator;,Ljava/util/stream/Streams$RangeIntSpliterator;
+HSPLjava/util/Spliterator$OfInt;->forEachRemaining(Ljava/util/function/Consumer;)V+]Ljava/util/Spliterator$OfInt;Ljava/util/Spliterators$IntArraySpliterator;,Ljava/util/stream/Streams$RangeIntSpliterator;,Ljava/util/Spliterators$EmptySpliterator$OfInt;
 HSPLjava/util/Spliterator;->getExactSizeIfKnown()J+]Ljava/util/Spliterator;megamorphic_types
 HSPLjava/util/Spliterators$ArraySpliterator;-><init>([Ljava/lang/Object;I)V
 HSPLjava/util/Spliterators$ArraySpliterator;-><init>([Ljava/lang/Object;III)V
@@ -28440,8 +28455,8 @@
 HSPLjava/util/Spliterators$IntArraySpliterator;->tryAdvance(Ljava/util/function/IntConsumer;)Z
 HSPLjava/util/Spliterators$IteratorSpliterator;-><init>(Ljava/util/Collection;I)V
 HSPLjava/util/Spliterators$IteratorSpliterator;->characteristics()I
-HSPLjava/util/Spliterators$IteratorSpliterator;->estimateSize()J
-HSPLjava/util/Spliterators$IteratorSpliterator;->forEachRemaining(Ljava/util/function/Consumer;)V
+HSPLjava/util/Spliterators$IteratorSpliterator;->estimateSize()J+]Ljava/util/Collection;missing_types
+HSPLjava/util/Spliterators$IteratorSpliterator;->forEachRemaining(Ljava/util/function/Consumer;)V+]Ljava/util/Iterator;missing_types
 HSPLjava/util/Spliterators$IteratorSpliterator;->tryAdvance(Ljava/util/function/Consumer;)Z
 HSPLjava/util/Spliterators;->checkFromToBounds(III)V
 HSPLjava/util/Spliterators;->emptyIntSpliterator()Ljava/util/Spliterator$OfInt;
@@ -28458,7 +28473,7 @@
 HSPLjava/util/StringJoiner;-><init>(Ljava/lang/CharSequence;)V
 HSPLjava/util/StringJoiner;-><init>(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;)V
 HSPLjava/util/StringJoiner;->add(Ljava/lang/CharSequence;)Ljava/util/StringJoiner;
-HSPLjava/util/StringJoiner;->prepareBuilder()Ljava/lang/StringBuilder;
+HSPLjava/util/StringJoiner;->prepareBuilder()Ljava/lang/StringBuilder;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLjava/util/StringJoiner;->toString()Ljava/lang/String;
 HSPLjava/util/StringTokenizer;-><init>(Ljava/lang/String;)V
 HSPLjava/util/StringTokenizer;-><init>(Ljava/lang/String;Ljava/lang/String;)V
@@ -28479,17 +28494,17 @@
 HSPLjava/util/TaskQueue;->isEmpty()Z
 HSPLjava/util/TaskQueue;->removeMin()V
 HSPLjava/util/TaskQueue;->rescheduleMin(J)V
-HSPLjava/util/TimSort;-><init>([Ljava/lang/Object;Ljava/util/Comparator;[Ljava/lang/Object;II)V
+HSPLjava/util/TimSort;-><init>([Ljava/lang/Object;Ljava/util/Comparator;[Ljava/lang/Object;II)V+]Ljava/lang/Object;[Ljava/lang/Object;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/util/TimSort;->binarySort([Ljava/lang/Object;IIILjava/util/Comparator;)V+]Ljava/util/Comparator;missing_types
-HSPLjava/util/TimSort;->countRunAndMakeAscending([Ljava/lang/Object;IILjava/util/Comparator;)I
+HSPLjava/util/TimSort;->countRunAndMakeAscending([Ljava/lang/Object;IILjava/util/Comparator;)I+]Ljava/util/Comparator;missing_types
 HSPLjava/util/TimSort;->ensureCapacity(I)[Ljava/lang/Object;
 HSPLjava/util/TimSort;->gallopLeft(Ljava/lang/Object;[Ljava/lang/Object;IIILjava/util/Comparator;)I
 HSPLjava/util/TimSort;->gallopRight(Ljava/lang/Object;[Ljava/lang/Object;IIILjava/util/Comparator;)I
 HSPLjava/util/TimSort;->mergeAt(I)V
 HSPLjava/util/TimSort;->mergeCollapse()V
 HSPLjava/util/TimSort;->mergeForceCollapse()V
-HSPLjava/util/TimSort;->mergeHi(IIII)V
-HSPLjava/util/TimSort;->mergeLo(IIII)V+]Ljava/util/Comparator;Lcom/android/internal/graphics/palette/WSMeansQuantizer$$ExternalSyntheticLambda0;
+HSPLjava/util/TimSort;->mergeHi(IIII)V+]Ljava/util/Comparator;missing_types
+HSPLjava/util/TimSort;->mergeLo(IIII)V+]Ljava/util/Comparator;missing_types
 HSPLjava/util/TimSort;->minRunLength(I)I
 HSPLjava/util/TimSort;->pushRun(II)V
 HSPLjava/util/TimSort;->reverseRange([Ljava/lang/Object;II)V
@@ -28499,12 +28514,12 @@
 HSPLjava/util/TimeZone;->clone()Ljava/lang/Object;
 HSPLjava/util/TimeZone;->createGmtOffsetString(ZZI)Ljava/lang/String;
 HSPLjava/util/TimeZone;->getAvailableIDs()[Ljava/lang/String;
-HSPLjava/util/TimeZone;->getDefault()Ljava/util/TimeZone;
+HSPLjava/util/TimeZone;->getDefault()Ljava/util/TimeZone;+]Ljava/util/TimeZone;Llibcore/util/ZoneInfo;
 HSPLjava/util/TimeZone;->getDefaultRef()Ljava/util/TimeZone;
 HSPLjava/util/TimeZone;->getDisplayName(ZI)Ljava/lang/String;
-HSPLjava/util/TimeZone;->getDisplayName(ZILjava/util/Locale;)Ljava/lang/String;
+HSPLjava/util/TimeZone;->getDisplayName(ZILjava/util/Locale;)Ljava/lang/String;+]Landroid/icu/text/TimeZoneNames;Landroid/icu/impl/TimeZoneNamesImpl;]Ljava/util/TimeZone;Llibcore/util/ZoneInfo;
 HSPLjava/util/TimeZone;->getID()Ljava/lang/String;
-HSPLjava/util/TimeZone;->getTimeZone(Ljava/lang/String;)Ljava/util/TimeZone;
+HSPLjava/util/TimeZone;->getTimeZone(Ljava/lang/String;)Ljava/util/TimeZone;+]Lcom/android/i18n/timezone/ZoneInfoDb;Lcom/android/i18n/timezone/ZoneInfoDb;]Ljava/util/TimeZone;Ljava/util/SimpleTimeZone;
 HSPLjava/util/TimeZone;->setDefault(Ljava/util/TimeZone;)V
 HSPLjava/util/TimeZone;->setID(Ljava/lang/String;)V
 HSPLjava/util/TimeZone;->toZoneId()Ljava/time/ZoneId;
@@ -28541,7 +28556,7 @@
 HSPLjava/util/TreeMap$KeyIterator;->next()Ljava/lang/Object;+]Ljava/util/TreeMap$KeyIterator;Ljava/util/TreeMap$KeyIterator;
 HSPLjava/util/TreeMap$KeySet;-><init>(Ljava/util/NavigableMap;)V
 HSPLjava/util/TreeMap$KeySet;->isEmpty()Z
-HSPLjava/util/TreeMap$KeySet;->iterator()Ljava/util/Iterator;
+HSPLjava/util/TreeMap$KeySet;->iterator()Ljava/util/Iterator;+]Ljava/util/TreeMap;Ljava/util/TreeMap;
 HSPLjava/util/TreeMap$KeySet;->size()I
 HSPLjava/util/TreeMap$NavigableSubMap$DescendingSubMapKeyIterator;-><init>(Ljava/util/TreeMap$NavigableSubMap;Ljava/util/TreeMap$TreeMapEntry;Ljava/util/TreeMap$TreeMapEntry;)V
 HSPLjava/util/TreeMap$NavigableSubMap$DescendingSubMapKeyIterator;->next()Ljava/lang/Object;+]Ljava/util/TreeMap$NavigableSubMap$DescendingSubMapKeyIterator;Ljava/util/TreeMap$NavigableSubMap$DescendingSubMapKeyIterator;
@@ -28590,15 +28605,15 @@
 HSPLjava/util/TreeMap;-><init>(Ljava/util/Comparator;)V
 HSPLjava/util/TreeMap;-><init>(Ljava/util/Map;)V
 HSPLjava/util/TreeMap;->addAllForTreeSet(Ljava/util/SortedSet;Ljava/lang/Object;)V
-HSPLjava/util/TreeMap;->buildFromSorted(IIIILjava/util/Iterator;Ljava/io/ObjectInputStream;Ljava/lang/Object;)Ljava/util/TreeMap$TreeMapEntry;
+HSPLjava/util/TreeMap;->buildFromSorted(IIIILjava/util/Iterator;Ljava/io/ObjectInputStream;Ljava/lang/Object;)Ljava/util/TreeMap$TreeMapEntry;+]Ljava/util/Map$Entry;Ljava/util/TreeMap$TreeMapEntry;]Ljava/util/Iterator;Ljava/util/TreeMap$EntryIterator;
 HSPLjava/util/TreeMap;->buildFromSorted(ILjava/util/Iterator;Ljava/io/ObjectInputStream;Ljava/lang/Object;)V
 HSPLjava/util/TreeMap;->ceilingEntry(Ljava/lang/Object;)Ljava/util/Map$Entry;
-HSPLjava/util/TreeMap;->ceilingKey(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/TreeMap;->ceilingKey(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/TreeMap;Ljava/util/TreeMap;
 HSPLjava/util/TreeMap;->clear()V
 HSPLjava/util/TreeMap;->clone()Ljava/lang/Object;
 HSPLjava/util/TreeMap;->colorOf(Ljava/util/TreeMap$TreeMapEntry;)Z
 HSPLjava/util/TreeMap;->comparator()Ljava/util/Comparator;
-HSPLjava/util/TreeMap;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLjava/util/TreeMap;->compare(Ljava/lang/Object;Ljava/lang/Object;)I+]Ljava/lang/Comparable;missing_types
 HSPLjava/util/TreeMap;->computeRedLevel(I)I
 HSPLjava/util/TreeMap;->containsKey(Ljava/lang/Object;)Z+]Ljava/util/TreeMap;Ljava/util/TreeMap;
 HSPLjava/util/TreeMap;->deleteEntry(Ljava/util/TreeMap$TreeMapEntry;)V
@@ -28611,8 +28626,8 @@
 HSPLjava/util/TreeMap;->fixAfterInsertion(Ljava/util/TreeMap$TreeMapEntry;)V
 HSPLjava/util/TreeMap;->floorEntry(Ljava/lang/Object;)Ljava/util/Map$Entry;
 HSPLjava/util/TreeMap;->floorKey(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/util/TreeMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/util/TreeMap;->getCeilingEntry(Ljava/lang/Object;)Ljava/util/TreeMap$TreeMapEntry;
+HSPLjava/util/TreeMap;->get(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/TreeMap;Ljava/util/TreeMap;
+HSPLjava/util/TreeMap;->getCeilingEntry(Ljava/lang/Object;)Ljava/util/TreeMap$TreeMapEntry;+]Ljava/util/TreeMap;Ljava/util/TreeMap;
 HSPLjava/util/TreeMap;->getEntry(Ljava/lang/Object;)Ljava/util/TreeMap$TreeMapEntry;+]Ljava/util/TreeMap;Ljava/util/TreeMap;]Ljava/lang/Comparable;missing_types
 HSPLjava/util/TreeMap;->getEntryUsingComparator(Ljava/lang/Object;)Ljava/util/TreeMap$TreeMapEntry;+]Ljava/util/Comparator;missing_types
 HSPLjava/util/TreeMap;->getFirstEntry()Ljava/util/TreeMap$TreeMapEntry;
@@ -28622,7 +28637,7 @@
 HSPLjava/util/TreeMap;->getLowerEntry(Ljava/lang/Object;)Ljava/util/TreeMap$TreeMapEntry;
 HSPLjava/util/TreeMap;->headMap(Ljava/lang/Object;Z)Ljava/util/NavigableMap;
 HSPLjava/util/TreeMap;->key(Ljava/util/TreeMap$TreeMapEntry;)Ljava/lang/Object;
-HSPLjava/util/TreeMap;->keyIterator()Ljava/util/Iterator;
+HSPLjava/util/TreeMap;->keyIterator()Ljava/util/Iterator;+]Ljava/util/TreeMap;Ljava/util/TreeMap;
 HSPLjava/util/TreeMap;->keyOrNull(Ljava/util/TreeMap$TreeMapEntry;)Ljava/lang/Object;
 HSPLjava/util/TreeMap;->keySet()Ljava/util/Set;
 HSPLjava/util/TreeMap;->lastKey()Ljava/lang/Object;
@@ -28632,7 +28647,7 @@
 HSPLjava/util/TreeMap;->parentOf(Ljava/util/TreeMap$TreeMapEntry;)Ljava/util/TreeMap$TreeMapEntry;
 HSPLjava/util/TreeMap;->pollFirstEntry()Ljava/util/Map$Entry;
 HSPLjava/util/TreeMap;->predecessor(Ljava/util/TreeMap$TreeMapEntry;)Ljava/util/TreeMap$TreeMapEntry;
-HSPLjava/util/TreeMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/Comparator;missing_types]Ljava/util/TreeMap$TreeMapEntry;Ljava/util/TreeMap$TreeMapEntry;]Ljava/util/TreeMap;missing_types]Ljava/lang/Comparable;missing_types
+HSPLjava/util/TreeMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/TreeMap$TreeMapEntry;Ljava/util/TreeMap$TreeMapEntry;]Ljava/util/TreeMap;missing_types]Ljava/lang/Comparable;missing_types]Ljava/util/Comparator;missing_types
 HSPLjava/util/TreeMap;->putAll(Ljava/util/Map;)V
 HSPLjava/util/TreeMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/TreeMap;Ljava/util/TreeMap;
 HSPLjava/util/TreeMap;->rightOf(Ljava/util/TreeMap$TreeMapEntry;)Ljava/util/TreeMap$TreeMapEntry;
@@ -28651,7 +28666,7 @@
 HSPLjava/util/TreeSet;-><init>(Ljava/util/NavigableMap;)V
 HSPLjava/util/TreeSet;-><init>(Ljava/util/SortedSet;)V
 HSPLjava/util/TreeSet;->add(Ljava/lang/Object;)Z+]Ljava/util/NavigableMap;Ljava/util/TreeMap;
-HSPLjava/util/TreeSet;->addAll(Ljava/util/Collection;)Z
+HSPLjava/util/TreeSet;->addAll(Ljava/util/Collection;)Z+]Ljava/util/NavigableMap;Ljava/util/TreeMap;
 HSPLjava/util/TreeSet;->ceiling(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/TreeSet;->clear()V
 HSPLjava/util/TreeSet;->comparator()Ljava/util/Comparator;
@@ -28660,7 +28675,7 @@
 HSPLjava/util/TreeSet;->first()Ljava/lang/Object;
 HSPLjava/util/TreeSet;->floor(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/NavigableMap;Ljava/util/TreeMap;
 HSPLjava/util/TreeSet;->isEmpty()Z
-HSPLjava/util/TreeSet;->iterator()Ljava/util/Iterator;
+HSPLjava/util/TreeSet;->iterator()Ljava/util/Iterator;+]Ljava/util/NavigableMap;Ljava/util/TreeMap;]Ljava/util/NavigableSet;Ljava/util/TreeMap$KeySet;
 HSPLjava/util/TreeSet;->last()Ljava/lang/Object;
 HSPLjava/util/TreeSet;->remove(Ljava/lang/Object;)Z+]Ljava/util/NavigableMap;Ljava/util/TreeMap;
 HSPLjava/util/TreeSet;->size()I
@@ -28669,14 +28684,14 @@
 HSPLjava/util/UUID;-><init>(JJ)V
 HSPLjava/util/UUID;-><init>([B)V
 HSPLjava/util/UUID;->digits(JI)Ljava/lang/String;
-HSPLjava/util/UUID;->equals(Ljava/lang/Object;)Z
-HSPLjava/util/UUID;->fromString(Ljava/lang/String;)Ljava/util/UUID;
+HSPLjava/util/UUID;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Ljava/util/UUID;
+HSPLjava/util/UUID;->fromString(Ljava/lang/String;)Ljava/util/UUID;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/Long;Ljava/lang/Long;
 HSPLjava/util/UUID;->getLeastSignificantBits()J
 HSPLjava/util/UUID;->getMostSignificantBits()J
 HSPLjava/util/UUID;->hashCode()I
 HSPLjava/util/UUID;->nameUUIDFromBytes([B)Ljava/util/UUID;
 HSPLjava/util/UUID;->randomUUID()Ljava/util/UUID;
-HSPLjava/util/UUID;->toString()Ljava/lang/String;
+HSPLjava/util/UUID;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLjava/util/Vector$1;-><init>(Ljava/util/Vector;)V
 HSPLjava/util/Vector$1;->hasMoreElements()Z
 HSPLjava/util/Vector$1;->nextElement()Ljava/lang/Object;
@@ -28717,7 +28732,7 @@
 HSPLjava/util/WeakHashMap$EntryIterator;->next()Ljava/util/Map$Entry;
 HSPLjava/util/WeakHashMap$EntrySet;-><init>(Ljava/util/WeakHashMap;)V
 HSPLjava/util/WeakHashMap$EntrySet;->iterator()Ljava/util/Iterator;
-HSPLjava/util/WeakHashMap$HashIterator;-><init>(Ljava/util/WeakHashMap;)V
+HSPLjava/util/WeakHashMap$HashIterator;-><init>(Ljava/util/WeakHashMap;)V+]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;
 HSPLjava/util/WeakHashMap$HashIterator;->hasNext()Z+]Ljava/util/WeakHashMap$Entry;Ljava/util/WeakHashMap$Entry;
 HSPLjava/util/WeakHashMap$HashIterator;->nextEntry()Ljava/util/WeakHashMap$Entry;
 HSPLjava/util/WeakHashMap$KeyIterator;-><init>(Ljava/util/WeakHashMap;)V
@@ -28739,7 +28754,7 @@
 HSPLjava/util/WeakHashMap;->entrySet()Ljava/util/Set;
 HSPLjava/util/WeakHashMap;->eq(Ljava/lang/Object;Ljava/lang/Object;)Z
 HSPLjava/util/WeakHashMap;->expungeStaleEntries()V+]Ljava/lang/ref/ReferenceQueue;Ljava/lang/ref/ReferenceQueue;
-HSPLjava/util/WeakHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/WeakHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;]Ljava/util/WeakHashMap$Entry;Ljava/util/WeakHashMap$Entry;
 HSPLjava/util/WeakHashMap;->getEntry(Ljava/lang/Object;)Ljava/util/WeakHashMap$Entry;
 HSPLjava/util/WeakHashMap;->getTable()[Ljava/util/WeakHashMap$Entry;
 HSPLjava/util/WeakHashMap;->hash(Ljava/lang/Object;)I+]Ljava/lang/Object;missing_types
@@ -28748,11 +28763,11 @@
 HSPLjava/util/WeakHashMap;->keySet()Ljava/util/Set;
 HSPLjava/util/WeakHashMap;->maskNull(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/WeakHashMap;->newTable(I)[Ljava/util/WeakHashMap$Entry;
-HSPLjava/util/WeakHashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/util/WeakHashMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/WeakHashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;]Ljava/util/WeakHashMap$Entry;Ljava/util/WeakHashMap$Entry;
+HSPLjava/util/WeakHashMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;]Ljava/util/WeakHashMap$Entry;Ljava/util/WeakHashMap$Entry;
 HSPLjava/util/WeakHashMap;->resize(I)V
 HSPLjava/util/WeakHashMap;->size()I
-HSPLjava/util/WeakHashMap;->transfer([Ljava/util/WeakHashMap$Entry;[Ljava/util/WeakHashMap$Entry;)V
+HSPLjava/util/WeakHashMap;->transfer([Ljava/util/WeakHashMap$Entry;[Ljava/util/WeakHashMap$Entry;)V+]Ljava/util/WeakHashMap$Entry;Ljava/util/WeakHashMap$Entry;
 HSPLjava/util/WeakHashMap;->unmaskNull(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/WeakHashMap;->values()Ljava/util/Collection;
 HSPLjava/util/concurrent/AbstractExecutorService;-><init>()V
@@ -28765,14 +28780,14 @@
 HSPLjava/util/concurrent/ArrayBlockingQueue;-><init>(I)V
 HSPLjava/util/concurrent/ArrayBlockingQueue;-><init>(IZ)V
 HSPLjava/util/concurrent/ArrayBlockingQueue;->add(Ljava/lang/Object;)Z
-HSPLjava/util/concurrent/ArrayBlockingQueue;->dequeue()Ljava/lang/Object;
+HSPLjava/util/concurrent/ArrayBlockingQueue;->dequeue()Ljava/lang/Object;+]Ljava/util/concurrent/ArrayBlockingQueue$Itrs;Ljava/util/concurrent/ArrayBlockingQueue$Itrs;]Ljava/util/concurrent/locks/Condition;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;
 HSPLjava/util/concurrent/ArrayBlockingQueue;->drainTo(Ljava/util/Collection;)I+]Ljava/util/concurrent/ArrayBlockingQueue;Ljava/util/concurrent/ArrayBlockingQueue;
 HSPLjava/util/concurrent/ArrayBlockingQueue;->drainTo(Ljava/util/Collection;I)I
-HSPLjava/util/concurrent/ArrayBlockingQueue;->enqueue(Ljava/lang/Object;)V
+HSPLjava/util/concurrent/ArrayBlockingQueue;->enqueue(Ljava/lang/Object;)V+]Ljava/util/concurrent/locks/Condition;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;
 HSPLjava/util/concurrent/ArrayBlockingQueue;->itemAt(I)Ljava/lang/Object;
-HSPLjava/util/concurrent/ArrayBlockingQueue;->offer(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/ArrayBlockingQueue;->offer(Ljava/lang/Object;)Z+]Ljava/util/concurrent/locks/ReentrantLock;Ljava/util/concurrent/locks/ReentrantLock;
 HSPLjava/util/concurrent/ArrayBlockingQueue;->peek()Ljava/lang/Object;
-HSPLjava/util/concurrent/ArrayBlockingQueue;->poll()Ljava/lang/Object;
+HSPLjava/util/concurrent/ArrayBlockingQueue;->poll()Ljava/lang/Object;+]Ljava/util/concurrent/locks/ReentrantLock;Ljava/util/concurrent/locks/ReentrantLock;
 HSPLjava/util/concurrent/ArrayBlockingQueue;->poll(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
 HSPLjava/util/concurrent/ArrayBlockingQueue;->put(Ljava/lang/Object;)V
 HSPLjava/util/concurrent/ArrayBlockingQueue;->size()I
@@ -28808,22 +28823,22 @@
 HSPLjava/util/concurrent/CompletableFuture;->timedGet(J)Ljava/lang/Object;
 HSPLjava/util/concurrent/CompletableFuture;->tryPushStack(Ljava/util/concurrent/CompletableFuture$Completion;)Z
 HSPLjava/util/concurrent/CompletableFuture;->waitingGet(Z)Ljava/lang/Object;
-HSPLjava/util/concurrent/ConcurrentHashMap$BaseIterator;-><init>([Ljava/util/concurrent/ConcurrentHashMap$Node;IIILjava/util/concurrent/ConcurrentHashMap;)V
+HSPLjava/util/concurrent/ConcurrentHashMap$BaseIterator;-><init>([Ljava/util/concurrent/ConcurrentHashMap$Node;IIILjava/util/concurrent/ConcurrentHashMap;)V+]Ljava/util/concurrent/ConcurrentHashMap$BaseIterator;Ljava/util/concurrent/ConcurrentHashMap$ValueIterator;,Ljava/util/concurrent/ConcurrentHashMap$EntryIterator;,Ljava/util/concurrent/ConcurrentHashMap$KeyIterator;
 HSPLjava/util/concurrent/ConcurrentHashMap$BaseIterator;->hasNext()Z
 HSPLjava/util/concurrent/ConcurrentHashMap$BaseIterator;->remove()V
 HSPLjava/util/concurrent/ConcurrentHashMap$CollectionView;-><init>(Ljava/util/concurrent/ConcurrentHashMap;)V
 HSPLjava/util/concurrent/ConcurrentHashMap$CollectionView;->size()I
-HSPLjava/util/concurrent/ConcurrentHashMap$CollectionView;->toArray()[Ljava/lang/Object;
+HSPLjava/util/concurrent/ConcurrentHashMap$CollectionView;->toArray()[Ljava/lang/Object;+]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;]Ljava/util/Iterator;Ljava/util/concurrent/ConcurrentHashMap$KeyIterator;]Ljava/util/concurrent/ConcurrentHashMap$CollectionView;Ljava/util/concurrent/ConcurrentHashMap$KeySetView;
 HSPLjava/util/concurrent/ConcurrentHashMap$CounterCell;-><init>(J)V
 HSPLjava/util/concurrent/ConcurrentHashMap$EntryIterator;-><init>([Ljava/util/concurrent/ConcurrentHashMap$Node;IIILjava/util/concurrent/ConcurrentHashMap;)V
 HSPLjava/util/concurrent/ConcurrentHashMap$EntryIterator;->next()Ljava/lang/Object;
-HSPLjava/util/concurrent/ConcurrentHashMap$EntryIterator;->next()Ljava/util/Map$Entry;
+HSPLjava/util/concurrent/ConcurrentHashMap$EntryIterator;->next()Ljava/util/Map$Entry;+]Ljava/util/concurrent/ConcurrentHashMap$EntryIterator;Ljava/util/concurrent/ConcurrentHashMap$EntryIterator;
 HSPLjava/util/concurrent/ConcurrentHashMap$EntrySetView;-><init>(Ljava/util/concurrent/ConcurrentHashMap;)V
 HSPLjava/util/concurrent/ConcurrentHashMap$EntrySetView;->iterator()Ljava/util/Iterator;
 HSPLjava/util/concurrent/ConcurrentHashMap$ForwardingNode;-><init>([Ljava/util/concurrent/ConcurrentHashMap$Node;)V
 HSPLjava/util/concurrent/ConcurrentHashMap$ForwardingNode;->find(ILjava/lang/Object;)Ljava/util/concurrent/ConcurrentHashMap$Node;
 HSPLjava/util/concurrent/ConcurrentHashMap$KeyIterator;-><init>([Ljava/util/concurrent/ConcurrentHashMap$Node;IIILjava/util/concurrent/ConcurrentHashMap;)V
-HSPLjava/util/concurrent/ConcurrentHashMap$KeyIterator;->next()Ljava/lang/Object;
+HSPLjava/util/concurrent/ConcurrentHashMap$KeyIterator;->next()Ljava/lang/Object;+]Ljava/util/concurrent/ConcurrentHashMap$KeyIterator;Ljava/util/concurrent/ConcurrentHashMap$KeyIterator;
 HSPLjava/util/concurrent/ConcurrentHashMap$KeySetView;-><init>(Ljava/util/concurrent/ConcurrentHashMap;Ljava/lang/Object;)V
 HSPLjava/util/concurrent/ConcurrentHashMap$KeySetView;->iterator()Ljava/util/Iterator;
 HSPLjava/util/concurrent/ConcurrentHashMap$KeySetView;->spliterator()Ljava/util/Spliterator;
@@ -28838,34 +28853,34 @@
 HSPLjava/util/concurrent/ConcurrentHashMap$TreeBin;->find(ILjava/lang/Object;)Ljava/util/concurrent/ConcurrentHashMap$Node;
 HSPLjava/util/concurrent/ConcurrentHashMap$TreeNode;->findTreeNode(ILjava/lang/Object;Ljava/lang/Class;)Ljava/util/concurrent/ConcurrentHashMap$TreeNode;
 HSPLjava/util/concurrent/ConcurrentHashMap$ValueIterator;-><init>([Ljava/util/concurrent/ConcurrentHashMap$Node;IIILjava/util/concurrent/ConcurrentHashMap;)V
-HSPLjava/util/concurrent/ConcurrentHashMap$ValueIterator;->next()Ljava/lang/Object;
+HSPLjava/util/concurrent/ConcurrentHashMap$ValueIterator;->next()Ljava/lang/Object;+]Ljava/util/concurrent/ConcurrentHashMap$ValueIterator;Ljava/util/concurrent/ConcurrentHashMap$ValueIterator;
 HSPLjava/util/concurrent/ConcurrentHashMap$ValuesView;-><init>(Ljava/util/concurrent/ConcurrentHashMap;)V
 HSPLjava/util/concurrent/ConcurrentHashMap$ValuesView;->iterator()Ljava/util/Iterator;
 HSPLjava/util/concurrent/ConcurrentHashMap;-><init>()V
 HSPLjava/util/concurrent/ConcurrentHashMap;-><init>(I)V
 HSPLjava/util/concurrent/ConcurrentHashMap;-><init>(IFI)V
 HSPLjava/util/concurrent/ConcurrentHashMap;-><init>(Ljava/util/Map;)V
-HSPLjava/util/concurrent/ConcurrentHashMap;->addCount(JI)V+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;
+HSPLjava/util/concurrent/ConcurrentHashMap;->addCount(JI)V+]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
 HSPLjava/util/concurrent/ConcurrentHashMap;->casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
 HSPLjava/util/concurrent/ConcurrentHashMap;->clear()V
 HSPLjava/util/concurrent/ConcurrentHashMap;->computeIfAbsent(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;
 HSPLjava/util/concurrent/ConcurrentHashMap;->containsKey(Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/ConcurrentHashMap;->entrySet()Ljava/util/Set;
 HSPLjava/util/concurrent/ConcurrentHashMap;->fullAddCount(JZ)V
-HSPLjava/util/concurrent/ConcurrentHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/lang/Object;missing_types]Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$ForwardingNode;
+HSPLjava/util/concurrent/ConcurrentHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/lang/Object;megamorphic_types]Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$TreeBin;,Ljava/util/concurrent/ConcurrentHashMap$ForwardingNode;,Ljava/util/concurrent/ConcurrentHashMap$ReservationNode;
 HSPLjava/util/concurrent/ConcurrentHashMap;->getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/concurrent/ConcurrentHashMap;->helpTransfer([Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)[Ljava/util/concurrent/ConcurrentHashMap$Node;
 HSPLjava/util/concurrent/ConcurrentHashMap;->initTable()[Ljava/util/concurrent/ConcurrentHashMap$Node;
 HSPLjava/util/concurrent/ConcurrentHashMap;->isEmpty()Z
 HSPLjava/util/concurrent/ConcurrentHashMap;->keySet()Ljava/util/Set;
 HSPLjava/util/concurrent/ConcurrentHashMap;->mappingCount()J
-HSPLjava/util/concurrent/ConcurrentHashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/util/concurrent/ConcurrentHashMap;->putAll(Ljava/util/Map;)V
+HSPLjava/util/concurrent/ConcurrentHashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;
+HSPLjava/util/concurrent/ConcurrentHashMap;->putAll(Ljava/util/Map;)V+]Ljava/util/Map$Entry;Ljava/util/concurrent/ConcurrentHashMap$MapEntry;,Ljava/util/HashMap$Node;]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;]Ljava/util/Map;Ljava/util/concurrent/ConcurrentHashMap;,Ljava/util/HashMap;,Ljava/util/Collections$EmptyMap;]Ljava/util/Iterator;Ljava/util/concurrent/ConcurrentHashMap$EntryIterator;,Ljava/util/HashMap$EntryIterator;,Ljava/util/Collections$EmptyIterator;]Ljava/util/Set;Ljava/util/concurrent/ConcurrentHashMap$EntrySetView;,Ljava/util/HashMap$EntrySet;,Ljava/util/Collections$EmptySet;
 HSPLjava/util/concurrent/ConcurrentHashMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLjava/util/concurrent/ConcurrentHashMap;->putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;+]Ljava/lang/Object;missing_types
-HSPLjava/util/concurrent/ConcurrentHashMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/concurrent/ConcurrentHashMap;->putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;+]Ljava/lang/Object;missing_types]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;
+HSPLjava/util/concurrent/ConcurrentHashMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;
 HSPLjava/util/concurrent/ConcurrentHashMap;->replace(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLjava/util/concurrent/ConcurrentHashMap;->replaceNode(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLjava/util/concurrent/ConcurrentHashMap;->replaceNode(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/lang/Object;missing_types
 HSPLjava/util/concurrent/ConcurrentHashMap;->resizeStamp(I)I
 HSPLjava/util/concurrent/ConcurrentHashMap;->setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
 HSPLjava/util/concurrent/ConcurrentHashMap;->size()I
@@ -28906,7 +28921,7 @@
 HSPLjava/util/concurrent/ConcurrentLinkedQueue$Node;-><init>(Ljava/lang/Object;)V
 HSPLjava/util/concurrent/ConcurrentLinkedQueue$Node;->casItem(Ljava/lang/Object;Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/ConcurrentLinkedQueue;-><init>()V
-HSPLjava/util/concurrent/ConcurrentLinkedQueue;->add(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/ConcurrentLinkedQueue;->add(Ljava/lang/Object;)Z+]Ljava/util/concurrent/ConcurrentLinkedQueue;Ljava/util/concurrent/ConcurrentLinkedQueue;
 HSPLjava/util/concurrent/ConcurrentLinkedQueue;->bulkRemove(Ljava/util/function/Predicate;)Z+]Ljava/util/concurrent/ConcurrentLinkedQueue$Node;Ljava/util/concurrent/ConcurrentLinkedQueue$Node;]Ljava/util/function/Predicate;Ljava/util/concurrent/ConcurrentLinkedQueue$$ExternalSyntheticLambda0;,Ljava/util/concurrent/ConcurrentLinkedQueue$$ExternalSyntheticLambda2;
 HSPLjava/util/concurrent/ConcurrentLinkedQueue;->clear()V
 HSPLjava/util/concurrent/ConcurrentLinkedQueue;->contains(Ljava/lang/Object;)Z
@@ -28948,8 +28963,8 @@
 HSPLjava/util/concurrent/CopyOnWriteArrayList$COWIterator;-><init>([Ljava/lang/Object;I)V
 HSPLjava/util/concurrent/CopyOnWriteArrayList$COWIterator;->hasNext()Z
 HSPLjava/util/concurrent/CopyOnWriteArrayList$COWIterator;->next()Ljava/lang/Object;+]Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;
-HSPLjava/util/concurrent/CopyOnWriteArrayList;-><init>()V
-HSPLjava/util/concurrent/CopyOnWriteArrayList;-><init>(Ljava/util/Collection;)V
+HSPLjava/util/concurrent/CopyOnWriteArrayList;-><init>()V+]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;
+HSPLjava/util/concurrent/CopyOnWriteArrayList;-><init>(Ljava/util/Collection;)V+]Ljava/lang/Object;Ljava/util/concurrent/CopyOnWriteArrayList;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;
 HSPLjava/util/concurrent/CopyOnWriteArrayList;-><init>([Ljava/lang/Object;)V
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->add(ILjava/lang/Object;)V
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->add(Ljava/lang/Object;)Z
@@ -28962,7 +28977,7 @@
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->clear()V
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->contains(Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->elementAt([Ljava/lang/Object;I)Ljava/lang/Object;
-HSPLjava/util/concurrent/CopyOnWriteArrayList;->get(I)Ljava/lang/Object;
+HSPLjava/util/concurrent/CopyOnWriteArrayList;->get(I)Ljava/lang/Object;+]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->getArray()[Ljava/lang/Object;
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->indexOf(Ljava/lang/Object;)I+]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->indexOfRange(Ljava/lang/Object;[Ljava/lang/Object;II)I+]Ljava/lang/Object;missing_types
@@ -28976,7 +28991,7 @@
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->setArray([Ljava/lang/Object;)V
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->size()I
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->toArray()[Ljava/lang/Object;
-HSPLjava/util/concurrent/CopyOnWriteArrayList;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
+HSPLjava/util/concurrent/CopyOnWriteArrayList;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;+]Ljava/lang/Object;[Ljava/util/logging/Handler;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;
 HSPLjava/util/concurrent/CopyOnWriteArrayList;->toString()Ljava/lang/String;
 HSPLjava/util/concurrent/CopyOnWriteArraySet;-><init>()V
 HSPLjava/util/concurrent/CopyOnWriteArraySet;-><init>(Ljava/util/Collection;)V+]Ljava/lang/Object;missing_types]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;
@@ -28985,18 +29000,18 @@
 HSPLjava/util/concurrent/CopyOnWriteArraySet;->clear()V
 HSPLjava/util/concurrent/CopyOnWriteArraySet;->contains(Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/CopyOnWriteArraySet;->isEmpty()Z
-HSPLjava/util/concurrent/CopyOnWriteArraySet;->iterator()Ljava/util/Iterator;
+HSPLjava/util/concurrent/CopyOnWriteArraySet;->iterator()Ljava/util/Iterator;+]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;
 HSPLjava/util/concurrent/CopyOnWriteArraySet;->remove(Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/CopyOnWriteArraySet;->size()I
 HSPLjava/util/concurrent/CountDownLatch$Sync;-><init>(I)V
-HSPLjava/util/concurrent/CountDownLatch$Sync;->getCount()I
+HSPLjava/util/concurrent/CountDownLatch$Sync;->getCount()I+]Ljava/util/concurrent/CountDownLatch$Sync;Ljava/util/concurrent/CountDownLatch$Sync;
 HSPLjava/util/concurrent/CountDownLatch$Sync;->tryAcquireShared(I)I
 HSPLjava/util/concurrent/CountDownLatch$Sync;->tryReleaseShared(I)Z
 HSPLjava/util/concurrent/CountDownLatch;-><init>(I)V
 HSPLjava/util/concurrent/CountDownLatch;->await()V
 HSPLjava/util/concurrent/CountDownLatch;->await(JLjava/util/concurrent/TimeUnit;)Z
 HSPLjava/util/concurrent/CountDownLatch;->countDown()V
-HSPLjava/util/concurrent/CountDownLatch;->getCount()J
+HSPLjava/util/concurrent/CountDownLatch;->getCount()J+]Ljava/util/concurrent/CountDownLatch$Sync;Ljava/util/concurrent/CountDownLatch$Sync;
 HSPLjava/util/concurrent/DelayQueue;-><init>()V
 HSPLjava/util/concurrent/DelayQueue;->add(Ljava/util/concurrent/Delayed;)Z
 HSPLjava/util/concurrent/DelayQueue;->offer(Ljava/util/concurrent/Delayed;)Z
@@ -29005,21 +29020,21 @@
 HSPLjava/util/concurrent/Executors$DefaultThreadFactory;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;
 HSPLjava/util/concurrent/Executors$DelegatedExecutorService;-><init>(Ljava/util/concurrent/ExecutorService;)V
 HSPLjava/util/concurrent/Executors$DelegatedExecutorService;->awaitTermination(JLjava/util/concurrent/TimeUnit;)Z
-HSPLjava/util/concurrent/Executors$DelegatedExecutorService;->execute(Ljava/lang/Runnable;)V
+HSPLjava/util/concurrent/Executors$DelegatedExecutorService;->execute(Ljava/lang/Runnable;)V+]Ljava/util/concurrent/ExecutorService;Ljava/util/concurrent/ThreadPoolExecutor;,Ljava/util/concurrent/ScheduledThreadPoolExecutor;
 HSPLjava/util/concurrent/Executors$DelegatedExecutorService;->isShutdown()Z
 HSPLjava/util/concurrent/Executors$DelegatedExecutorService;->shutdown()V
 HSPLjava/util/concurrent/Executors$DelegatedExecutorService;->shutdownNow()Ljava/util/List;
 HSPLjava/util/concurrent/Executors$DelegatedExecutorService;->submit(Ljava/lang/Runnable;)Ljava/util/concurrent/Future;
 HSPLjava/util/concurrent/Executors$DelegatedExecutorService;->submit(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/Future;
 HSPLjava/util/concurrent/Executors$DelegatedScheduledExecutorService;-><init>(Ljava/util/concurrent/ScheduledExecutorService;)V
-HSPLjava/util/concurrent/Executors$DelegatedScheduledExecutorService;->schedule(Ljava/lang/Runnable;JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
+HSPLjava/util/concurrent/Executors$DelegatedScheduledExecutorService;->schedule(Ljava/lang/Runnable;JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;+]Ljava/util/concurrent/ScheduledExecutorService;Ljava/util/concurrent/ScheduledThreadPoolExecutor;
 HSPLjava/util/concurrent/Executors$DelegatedScheduledExecutorService;->schedule(Ljava/util/concurrent/Callable;JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;+]Ljava/util/concurrent/ScheduledExecutorService;Ljava/util/concurrent/ScheduledThreadPoolExecutor;
 HSPLjava/util/concurrent/Executors$DelegatedScheduledExecutorService;->scheduleAtFixedRate(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
 HSPLjava/util/concurrent/Executors$DelegatedScheduledExecutorService;->scheduleWithFixedDelay(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
 HSPLjava/util/concurrent/Executors$FinalizableDelegatedExecutorService;-><init>(Ljava/util/concurrent/ExecutorService;)V
 HSPLjava/util/concurrent/Executors$FinalizableDelegatedExecutorService;->finalize()V
 HSPLjava/util/concurrent/Executors$RunnableAdapter;-><init>(Ljava/lang/Runnable;Ljava/lang/Object;)V
-HSPLjava/util/concurrent/Executors$RunnableAdapter;->call()Ljava/lang/Object;
+HSPLjava/util/concurrent/Executors$RunnableAdapter;->call()Ljava/lang/Object;+]Ljava/lang/Runnable;missing_types
 HSPLjava/util/concurrent/Executors;->callable(Ljava/lang/Runnable;)Ljava/util/concurrent/Callable;
 HSPLjava/util/concurrent/Executors;->callable(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/Callable;
 HSPLjava/util/concurrent/Executors;->defaultThreadFactory()Ljava/util/concurrent/ThreadFactory;
@@ -29043,7 +29058,7 @@
 HSPLjava/util/concurrent/FutureTask;->awaitDone(ZJ)I
 HSPLjava/util/concurrent/FutureTask;->cancel(Z)Z
 HSPLjava/util/concurrent/FutureTask;->done()V
-HSPLjava/util/concurrent/FutureTask;->finishCompletion()V
+HSPLjava/util/concurrent/FutureTask;->finishCompletion()V+]Ljava/util/concurrent/FutureTask;missing_types
 HSPLjava/util/concurrent/FutureTask;->get()Ljava/lang/Object;
 HSPLjava/util/concurrent/FutureTask;->get(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
 HSPLjava/util/concurrent/FutureTask;->handlePossibleCancellationInterrupt(I)V
@@ -29051,8 +29066,8 @@
 HSPLjava/util/concurrent/FutureTask;->isDone()Z
 HSPLjava/util/concurrent/FutureTask;->removeWaiter(Ljava/util/concurrent/FutureTask$WaitNode;)V
 HSPLjava/util/concurrent/FutureTask;->report(I)Ljava/lang/Object;
-HSPLjava/util/concurrent/FutureTask;->run()V
-HSPLjava/util/concurrent/FutureTask;->runAndReset()Z
+HSPLjava/util/concurrent/FutureTask;->run()V+]Ljava/util/concurrent/Callable;Ljava/util/concurrent/Executors$RunnableAdapter;]Ljava/util/concurrent/FutureTask;Ljava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;
+HSPLjava/util/concurrent/FutureTask;->runAndReset()Z+]Ljava/util/concurrent/Callable;Ljava/util/concurrent/Executors$RunnableAdapter;
 HSPLjava/util/concurrent/FutureTask;->set(Ljava/lang/Object;)V
 HSPLjava/util/concurrent/FutureTask;->setException(Ljava/lang/Throwable;)V
 HSPLjava/util/concurrent/LinkedBlockingDeque$Node;-><init>(Ljava/lang/Object;)V
@@ -29074,8 +29089,8 @@
 HSPLjava/util/concurrent/LinkedBlockingDeque;->pollFirst(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
 HSPLjava/util/concurrent/LinkedBlockingDeque;->size()I
 HSPLjava/util/concurrent/LinkedBlockingDeque;->take()Ljava/lang/Object;
-HSPLjava/util/concurrent/LinkedBlockingDeque;->takeFirst()Ljava/lang/Object;
-HSPLjava/util/concurrent/LinkedBlockingDeque;->unlinkFirst()Ljava/lang/Object;
+HSPLjava/util/concurrent/LinkedBlockingDeque;->takeFirst()Ljava/lang/Object;+]Ljava/util/concurrent/locks/ReentrantLock;Ljava/util/concurrent/locks/ReentrantLock;]Ljava/util/concurrent/locks/Condition;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;
+HSPLjava/util/concurrent/LinkedBlockingDeque;->unlinkFirst()Ljava/lang/Object;+]Ljava/util/concurrent/locks/Condition;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;
 HSPLjava/util/concurrent/LinkedBlockingQueue$Node;-><init>(Ljava/lang/Object;)V
 HSPLjava/util/concurrent/LinkedBlockingQueue;-><init>()V
 HSPLjava/util/concurrent/LinkedBlockingQueue;-><init>(I)V
@@ -29086,20 +29101,20 @@
 HSPLjava/util/concurrent/LinkedBlockingQueue;->enqueue(Ljava/util/concurrent/LinkedBlockingQueue$Node;)V
 HSPLjava/util/concurrent/LinkedBlockingQueue;->fullyLock()V
 HSPLjava/util/concurrent/LinkedBlockingQueue;->fullyUnlock()V
-HSPLjava/util/concurrent/LinkedBlockingQueue;->offer(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/LinkedBlockingQueue;->offer(Ljava/lang/Object;)Z+]Ljava/util/concurrent/locks/ReentrantLock;Ljava/util/concurrent/locks/ReentrantLock;]Ljava/util/concurrent/locks/Condition;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
 HSPLjava/util/concurrent/LinkedBlockingQueue;->poll()Ljava/lang/Object;+]Ljava/util/concurrent/locks/ReentrantLock;Ljava/util/concurrent/locks/ReentrantLock;]Ljava/util/concurrent/locks/Condition;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
 HSPLjava/util/concurrent/LinkedBlockingQueue;->poll(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
 HSPLjava/util/concurrent/LinkedBlockingQueue;->put(Ljava/lang/Object;)V+]Ljava/util/concurrent/locks/ReentrantLock;Ljava/util/concurrent/locks/ReentrantLock;]Ljava/util/concurrent/locks/Condition;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
-HSPLjava/util/concurrent/LinkedBlockingQueue;->signalNotEmpty()V
+HSPLjava/util/concurrent/LinkedBlockingQueue;->signalNotEmpty()V+]Ljava/util/concurrent/locks/ReentrantLock;Ljava/util/concurrent/locks/ReentrantLock;]Ljava/util/concurrent/locks/Condition;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;
 HSPLjava/util/concurrent/LinkedBlockingQueue;->signalNotFull()V
 HSPLjava/util/concurrent/LinkedBlockingQueue;->size()I
-HSPLjava/util/concurrent/LinkedBlockingQueue;->take()Ljava/lang/Object;
+HSPLjava/util/concurrent/LinkedBlockingQueue;->take()Ljava/lang/Object;+]Ljava/util/concurrent/locks/ReentrantLock;Ljava/util/concurrent/locks/ReentrantLock;]Ljava/util/concurrent/locks/Condition;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
 HSPLjava/util/concurrent/PriorityBlockingQueue;-><init>()V
 HSPLjava/util/concurrent/PriorityBlockingQueue;-><init>(ILjava/util/Comparator;)V
 HSPLjava/util/concurrent/PriorityBlockingQueue;->add(Ljava/lang/Object;)Z
 HSPLjava/util/concurrent/PriorityBlockingQueue;->dequeue()Ljava/lang/Object;
 HSPLjava/util/concurrent/PriorityBlockingQueue;->indexOf(Ljava/lang/Object;)I
-HSPLjava/util/concurrent/PriorityBlockingQueue;->offer(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/PriorityBlockingQueue;->offer(Ljava/lang/Object;)Z+]Ljava/util/concurrent/locks/ReentrantLock;Ljava/util/concurrent/locks/ReentrantLock;]Ljava/util/concurrent/locks/Condition;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;
 HSPLjava/util/concurrent/PriorityBlockingQueue;->peek()Ljava/lang/Object;
 HSPLjava/util/concurrent/PriorityBlockingQueue;->poll()Ljava/lang/Object;
 HSPLjava/util/concurrent/PriorityBlockingQueue;->put(Ljava/lang/Object;)V
@@ -29118,25 +29133,25 @@
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue$Itr;->next()Ljava/lang/Runnable;
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue$Itr;->remove()V
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;-><init>()V
-HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->add(Ljava/lang/Object;)Z
-HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->add(Ljava/lang/Runnable;)Z
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->add(Ljava/lang/Object;)Z+]Ljava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;Ljava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->add(Ljava/lang/Runnable;)Z+]Ljava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;Ljava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->drainTo(Ljava/util/Collection;)I
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->drainTo(Ljava/util/Collection;I)I
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->finishPoll(Ljava/util/concurrent/RunnableScheduledFuture;)Ljava/util/concurrent/RunnableScheduledFuture;
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->grow()V
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->indexOf(Ljava/lang/Object;)I
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->isEmpty()Z
-HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->iterator()Ljava/util/Iterator;
-HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->offer(Ljava/lang/Runnable;)Z
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->iterator()Ljava/util/Iterator;+]Ljava/util/concurrent/locks/ReentrantLock;Ljava/util/concurrent/locks/ReentrantLock;
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->offer(Ljava/lang/Runnable;)Z+]Ljava/util/concurrent/locks/ReentrantLock;Ljava/util/concurrent/locks/ReentrantLock;]Ljava/util/concurrent/locks/Condition;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->poll(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->poll(JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/RunnableScheduledFuture;
-HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->remove(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->remove(Ljava/lang/Object;)Z+]Ljava/util/concurrent/locks/ReentrantLock;Ljava/util/concurrent/locks/ReentrantLock;
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->setIndex(Ljava/util/concurrent/RunnableScheduledFuture;I)V
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->siftDown(ILjava/util/concurrent/RunnableScheduledFuture;)V+]Ljava/util/concurrent/RunnableScheduledFuture;Ljava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;
-HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->siftUp(ILjava/util/concurrent/RunnableScheduledFuture;)V
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->siftUp(ILjava/util/concurrent/RunnableScheduledFuture;)V+]Ljava/util/concurrent/RunnableScheduledFuture;Ljava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->size()I
-HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->take()Ljava/lang/Object;
-HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->take()Ljava/util/concurrent/RunnableScheduledFuture;
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->take()Ljava/lang/Object;+]Ljava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;Ljava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->take()Ljava/util/concurrent/RunnableScheduledFuture;+]Ljava/util/concurrent/locks/ReentrantLock;Ljava/util/concurrent/locks/ReentrantLock;]Ljava/util/concurrent/RunnableScheduledFuture;missing_types]Ljava/util/concurrent/locks/Condition;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;->toArray()[Ljava/lang/Object;
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;-><init>(Ljava/util/concurrent/ScheduledThreadPoolExecutor;Ljava/lang/Runnable;Ljava/lang/Object;JJ)V
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;-><init>(Ljava/util/concurrent/ScheduledThreadPoolExecutor;Ljava/lang/Runnable;Ljava/lang/Object;JJJ)V
@@ -29144,23 +29159,23 @@
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;->cancel(Z)Z
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;->compareTo(Ljava/lang/Object;)I+]Ljava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;Ljava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;->compareTo(Ljava/util/concurrent/Delayed;)I
-HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;->getDelay(Ljava/util/concurrent/TimeUnit;)J
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;->getDelay(Ljava/util/concurrent/TimeUnit;)J+]Ljava/util/concurrent/TimeUnit;Ljava/util/concurrent/TimeUnit;
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;->isPeriodic()Z
-HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;->run()V
-HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;->setNextRunTime()V
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;->run()V+]Ljava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;Ljava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;]Ljava/util/concurrent/ScheduledThreadPoolExecutor;missing_types
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;->setNextRunTime()V+]Ljava/util/concurrent/ScheduledThreadPoolExecutor;Ljava/util/concurrent/ScheduledThreadPoolExecutor;
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;-><init>(I)V
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;-><init>(ILjava/util/concurrent/ThreadFactory;)V
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;-><init>(ILjava/util/concurrent/ThreadFactory;Ljava/util/concurrent/RejectedExecutionHandler;)V
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->canRunInCurrentRunState(Ljava/util/concurrent/RunnableScheduledFuture;)Z+]Ljava/util/concurrent/ScheduledThreadPoolExecutor;missing_types]Ljava/util/concurrent/RunnableScheduledFuture;Ljava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->decorateTask(Ljava/lang/Runnable;Ljava/util/concurrent/RunnableScheduledFuture;)Ljava/util/concurrent/RunnableScheduledFuture;
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->decorateTask(Ljava/util/concurrent/Callable;Ljava/util/concurrent/RunnableScheduledFuture;)Ljava/util/concurrent/RunnableScheduledFuture;
-HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->delayedExecute(Ljava/util/concurrent/RunnableScheduledFuture;)V
-HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->execute(Ljava/lang/Runnable;)V
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->delayedExecute(Ljava/util/concurrent/RunnableScheduledFuture;)V+]Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;]Ljava/util/concurrent/ScheduledThreadPoolExecutor;Ljava/util/concurrent/ScheduledThreadPoolExecutor;
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->execute(Ljava/lang/Runnable;)V+]Ljava/util/concurrent/ScheduledThreadPoolExecutor;Ljava/util/concurrent/ScheduledThreadPoolExecutor;
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->getContinueExistingPeriodicTasksAfterShutdownPolicy()Z
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->getExecuteExistingDelayedTasksAfterShutdownPolicy()Z
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->onShutdown()V
-HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->reExecutePeriodic(Ljava/util/concurrent/RunnableScheduledFuture;)V
-HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->schedule(Ljava/lang/Runnable;JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->reExecutePeriodic(Ljava/util/concurrent/RunnableScheduledFuture;)V+]Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;]Ljava/util/concurrent/ScheduledThreadPoolExecutor;Ljava/util/concurrent/ScheduledThreadPoolExecutor;
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->schedule(Ljava/lang/Runnable;JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;+]Ljava/util/concurrent/ScheduledThreadPoolExecutor;Ljava/util/concurrent/ScheduledThreadPoolExecutor;]Ljava/util/concurrent/atomic/AtomicLong;Ljava/util/concurrent/atomic/AtomicLong;
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->schedule(Ljava/util/concurrent/Callable;JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->scheduleAtFixedRate(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->scheduleWithFixedDelay(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;
@@ -29170,25 +29185,25 @@
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->submit(Ljava/lang/Runnable;)Ljava/util/concurrent/Future;
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->submit(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/Future;
 HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->triggerTime(J)J
-HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->triggerTime(JLjava/util/concurrent/TimeUnit;)J
+HSPLjava/util/concurrent/ScheduledThreadPoolExecutor;->triggerTime(JLjava/util/concurrent/TimeUnit;)J+]Ljava/util/concurrent/ScheduledThreadPoolExecutor;Ljava/util/concurrent/ScheduledThreadPoolExecutor;]Ljava/util/concurrent/TimeUnit;Ljava/util/concurrent/TimeUnit;
 HSPLjava/util/concurrent/Semaphore$FairSync;-><init>(I)V
 HSPLjava/util/concurrent/Semaphore$FairSync;->tryAcquireShared(I)I
 HSPLjava/util/concurrent/Semaphore$NonfairSync;-><init>(I)V
-HSPLjava/util/concurrent/Semaphore$NonfairSync;->tryAcquireShared(I)I
+HSPLjava/util/concurrent/Semaphore$NonfairSync;->tryAcquireShared(I)I+]Ljava/util/concurrent/Semaphore$NonfairSync;Ljava/util/concurrent/Semaphore$NonfairSync;
 HSPLjava/util/concurrent/Semaphore$Sync;-><init>(I)V
-HSPLjava/util/concurrent/Semaphore$Sync;->getPermits()I
-HSPLjava/util/concurrent/Semaphore$Sync;->nonfairTryAcquireShared(I)I
-HSPLjava/util/concurrent/Semaphore$Sync;->tryReleaseShared(I)Z
+HSPLjava/util/concurrent/Semaphore$Sync;->getPermits()I+]Ljava/util/concurrent/Semaphore$Sync;Ljava/util/concurrent/Semaphore$NonfairSync;
+HSPLjava/util/concurrent/Semaphore$Sync;->nonfairTryAcquireShared(I)I+]Ljava/util/concurrent/Semaphore$Sync;Ljava/util/concurrent/Semaphore$NonfairSync;
+HSPLjava/util/concurrent/Semaphore$Sync;->tryReleaseShared(I)Z+]Ljava/util/concurrent/Semaphore$Sync;Ljava/util/concurrent/Semaphore$NonfairSync;
 HSPLjava/util/concurrent/Semaphore;-><init>(I)V
 HSPLjava/util/concurrent/Semaphore;-><init>(IZ)V
 HSPLjava/util/concurrent/Semaphore;->acquire()V
 HSPLjava/util/concurrent/Semaphore;->acquireUninterruptibly()V
-HSPLjava/util/concurrent/Semaphore;->availablePermits()I
-HSPLjava/util/concurrent/Semaphore;->release()V
-HSPLjava/util/concurrent/Semaphore;->release(I)V
-HSPLjava/util/concurrent/Semaphore;->tryAcquire()Z
+HSPLjava/util/concurrent/Semaphore;->availablePermits()I+]Ljava/util/concurrent/Semaphore$Sync;Ljava/util/concurrent/Semaphore$NonfairSync;
+HSPLjava/util/concurrent/Semaphore;->release()V+]Ljava/util/concurrent/Semaphore$Sync;Ljava/util/concurrent/Semaphore$NonfairSync;
+HSPLjava/util/concurrent/Semaphore;->release(I)V+]Ljava/util/concurrent/Semaphore$Sync;Ljava/util/concurrent/Semaphore$NonfairSync;
+HSPLjava/util/concurrent/Semaphore;->tryAcquire()Z+]Ljava/util/concurrent/Semaphore$Sync;Ljava/util/concurrent/Semaphore$NonfairSync;
 HSPLjava/util/concurrent/Semaphore;->tryAcquire(IJLjava/util/concurrent/TimeUnit;)Z
-HSPLjava/util/concurrent/Semaphore;->tryAcquire(JLjava/util/concurrent/TimeUnit;)Z
+HSPLjava/util/concurrent/Semaphore;->tryAcquire(JLjava/util/concurrent/TimeUnit;)Z+]Ljava/util/concurrent/Semaphore$Sync;Ljava/util/concurrent/Semaphore$NonfairSync;]Ljava/util/concurrent/TimeUnit;Ljava/util/concurrent/TimeUnit;
 HSPLjava/util/concurrent/SynchronousQueue$TransferStack$SNode;-><init>(Ljava/lang/Object;)V
 HSPLjava/util/concurrent/SynchronousQueue$TransferStack$SNode;->casNext(Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;)Z
 HSPLjava/util/concurrent/SynchronousQueue$TransferStack$SNode;->isCancelled()Z
@@ -29197,7 +29212,7 @@
 HSPLjava/util/concurrent/SynchronousQueue$TransferStack;-><init>()V
 HSPLjava/util/concurrent/SynchronousQueue$TransferStack;->awaitFulfill(Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;ZJ)Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;+]Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;]Ljava/lang/Thread;Ljava/lang/Thread;]Ljava/util/concurrent/SynchronousQueue$TransferStack;Ljava/util/concurrent/SynchronousQueue$TransferStack;
 HSPLjava/util/concurrent/SynchronousQueue$TransferStack;->casHead(Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;)Z
-HSPLjava/util/concurrent/SynchronousQueue$TransferStack;->clean(Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;)V
+HSPLjava/util/concurrent/SynchronousQueue$TransferStack;->clean(Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;)V+]Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;]Ljava/util/concurrent/SynchronousQueue$TransferStack;Ljava/util/concurrent/SynchronousQueue$TransferStack;
 HSPLjava/util/concurrent/SynchronousQueue$TransferStack;->isFulfilling(I)Z
 HSPLjava/util/concurrent/SynchronousQueue$TransferStack;->shouldSpin(Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;)Z
 HSPLjava/util/concurrent/SynchronousQueue$TransferStack;->snode(Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;Ljava/lang/Object;Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;I)Ljava/util/concurrent/SynchronousQueue$TransferStack$SNode;
@@ -29206,7 +29221,7 @@
 HSPLjava/util/concurrent/SynchronousQueue;-><init>()V
 HSPLjava/util/concurrent/SynchronousQueue;-><init>(Z)V
 HSPLjava/util/concurrent/SynchronousQueue;->isEmpty()Z
-HSPLjava/util/concurrent/SynchronousQueue;->offer(Ljava/lang/Object;)Z
+HSPLjava/util/concurrent/SynchronousQueue;->offer(Ljava/lang/Object;)Z+]Ljava/util/concurrent/SynchronousQueue$Transferer;Ljava/util/concurrent/SynchronousQueue$TransferStack;
 HSPLjava/util/concurrent/SynchronousQueue;->poll(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;+]Ljava/util/concurrent/SynchronousQueue$Transferer;Ljava/util/concurrent/SynchronousQueue$TransferStack;]Ljava/util/concurrent/TimeUnit;Ljava/util/concurrent/TimeUnit;
 HSPLjava/util/concurrent/SynchronousQueue;->size()I
 HSPLjava/util/concurrent/SynchronousQueue;->take()Ljava/lang/Object;
@@ -29223,17 +29238,17 @@
 HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;->interruptIfStarted()V
 HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;->isHeldExclusively()Z
 HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;->isLocked()Z
-HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;->lock()V
+HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;->lock()V+]Ljava/util/concurrent/ThreadPoolExecutor$Worker;Ljava/util/concurrent/ThreadPoolExecutor$Worker;
 HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;->run()V
-HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;->tryAcquire(I)Z
+HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;->tryAcquire(I)Z+]Ljava/util/concurrent/ThreadPoolExecutor$Worker;Ljava/util/concurrent/ThreadPoolExecutor$Worker;
 HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;->tryLock()Z
-HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;->tryRelease(I)Z
-HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;->unlock()V
+HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;->tryRelease(I)Z+]Ljava/util/concurrent/ThreadPoolExecutor$Worker;Ljava/util/concurrent/ThreadPoolExecutor$Worker;
+HSPLjava/util/concurrent/ThreadPoolExecutor$Worker;->unlock()V+]Ljava/util/concurrent/ThreadPoolExecutor$Worker;Ljava/util/concurrent/ThreadPoolExecutor$Worker;
 HSPLjava/util/concurrent/ThreadPoolExecutor;-><init>(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;)V
 HSPLjava/util/concurrent/ThreadPoolExecutor;-><init>(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/RejectedExecutionHandler;)V
 HSPLjava/util/concurrent/ThreadPoolExecutor;-><init>(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/ThreadFactory;)V
-HSPLjava/util/concurrent/ThreadPoolExecutor;-><init>(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/ThreadFactory;Ljava/util/concurrent/RejectedExecutionHandler;)V
-HSPLjava/util/concurrent/ThreadPoolExecutor;->addWorker(Ljava/lang/Runnable;Z)Z
+HSPLjava/util/concurrent/ThreadPoolExecutor;-><init>(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/ThreadFactory;Ljava/util/concurrent/RejectedExecutionHandler;)V+]Ljava/util/concurrent/locks/ReentrantLock;Ljava/util/concurrent/locks/ReentrantLock;]Ljava/util/concurrent/TimeUnit;Ljava/util/concurrent/TimeUnit;
+HSPLjava/util/concurrent/ThreadPoolExecutor;->addWorker(Ljava/lang/Runnable;Z)Z+]Ljava/lang/Thread;missing_types]Ljava/util/concurrent/locks/ReentrantLock;Ljava/util/concurrent/locks/ReentrantLock;]Ljava/util/HashSet;Ljava/util/HashSet;]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
 HSPLjava/util/concurrent/ThreadPoolExecutor;->advanceRunState(I)V
 HSPLjava/util/concurrent/ThreadPoolExecutor;->afterExecute(Ljava/lang/Runnable;Ljava/lang/Throwable;)V
 HSPLjava/util/concurrent/ThreadPoolExecutor;->allowCoreThreadTimeOut(Z)V
@@ -29245,14 +29260,14 @@
 HSPLjava/util/concurrent/ThreadPoolExecutor;->ctlOf(II)I
 HSPLjava/util/concurrent/ThreadPoolExecutor;->decrementWorkerCount()V
 HSPLjava/util/concurrent/ThreadPoolExecutor;->drainQueue()Ljava/util/List;
-HSPLjava/util/concurrent/ThreadPoolExecutor;->ensurePrestart()V
-HSPLjava/util/concurrent/ThreadPoolExecutor;->execute(Ljava/lang/Runnable;)V
+HSPLjava/util/concurrent/ThreadPoolExecutor;->ensurePrestart()V+]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
+HSPLjava/util/concurrent/ThreadPoolExecutor;->execute(Ljava/lang/Runnable;)V+]Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/SynchronousQueue;,Ljava/util/concurrent/LinkedBlockingQueue;,Ljava/util/concurrent/PriorityBlockingQueue;]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
 HSPLjava/util/concurrent/ThreadPoolExecutor;->finalize()V
 HSPLjava/util/concurrent/ThreadPoolExecutor;->getCorePoolSize()I
 HSPLjava/util/concurrent/ThreadPoolExecutor;->getMaximumPoolSize()I
 HSPLjava/util/concurrent/ThreadPoolExecutor;->getQueue()Ljava/util/concurrent/BlockingQueue;
 HSPLjava/util/concurrent/ThreadPoolExecutor;->getRejectedExecutionHandler()Ljava/util/concurrent/RejectedExecutionHandler;
-HSPLjava/util/concurrent/ThreadPoolExecutor;->getTask()Ljava/lang/Runnable;
+HSPLjava/util/concurrent/ThreadPoolExecutor;->getTask()Ljava/lang/Runnable;+]Ljava/util/concurrent/BlockingQueue;megamorphic_types]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
 HSPLjava/util/concurrent/ThreadPoolExecutor;->getThreadFactory()Ljava/util/concurrent/ThreadFactory;
 HSPLjava/util/concurrent/ThreadPoolExecutor;->interruptIdleWorkers()V
 HSPLjava/util/concurrent/ThreadPoolExecutor;->interruptIdleWorkers(Z)V
@@ -29263,13 +29278,13 @@
 HSPLjava/util/concurrent/ThreadPoolExecutor;->onShutdown()V
 HSPLjava/util/concurrent/ThreadPoolExecutor;->prestartAllCoreThreads()I
 HSPLjava/util/concurrent/ThreadPoolExecutor;->prestartCoreThread()Z
-HSPLjava/util/concurrent/ThreadPoolExecutor;->processWorkerExit(Ljava/util/concurrent/ThreadPoolExecutor$Worker;Z)V
-HSPLjava/util/concurrent/ThreadPoolExecutor;->purge()V
+HSPLjava/util/concurrent/ThreadPoolExecutor;->processWorkerExit(Ljava/util/concurrent/ThreadPoolExecutor$Worker;Z)V+]Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/SynchronousQueue;]Ljava/util/concurrent/ThreadPoolExecutor;missing_types]Ljava/util/concurrent/locks/ReentrantLock;Ljava/util/concurrent/locks/ReentrantLock;]Ljava/util/HashSet;Ljava/util/HashSet;]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
+HSPLjava/util/concurrent/ThreadPoolExecutor;->purge()V+]Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue;]Ljava/util/concurrent/ThreadPoolExecutor;Ljava/util/concurrent/ScheduledThreadPoolExecutor;]Ljava/util/Iterator;Ljava/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue$Itr;
 HSPLjava/util/concurrent/ThreadPoolExecutor;->remove(Ljava/lang/Runnable;)Z
 HSPLjava/util/concurrent/ThreadPoolExecutor;->runStateAtLeast(II)Z
 HSPLjava/util/concurrent/ThreadPoolExecutor;->runStateLessThan(II)Z
 HSPLjava/util/concurrent/ThreadPoolExecutor;->runStateOf(I)I
-HSPLjava/util/concurrent/ThreadPoolExecutor;->runWorker(Ljava/util/concurrent/ThreadPoolExecutor$Worker;)V
+HSPLjava/util/concurrent/ThreadPoolExecutor;->runWorker(Ljava/util/concurrent/ThreadPoolExecutor$Worker;)V+]Ljava/util/concurrent/ThreadPoolExecutor;missing_types]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;]Ljava/lang/Runnable;missing_types]Ljava/util/concurrent/ThreadPoolExecutor$Worker;Ljava/util/concurrent/ThreadPoolExecutor$Worker;
 HSPLjava/util/concurrent/ThreadPoolExecutor;->setCorePoolSize(I)V
 HSPLjava/util/concurrent/ThreadPoolExecutor;->setKeepAliveTime(JLjava/util/concurrent/TimeUnit;)V
 HSPLjava/util/concurrent/ThreadPoolExecutor;->setMaximumPoolSize(I)V
@@ -29279,7 +29294,7 @@
 HSPLjava/util/concurrent/ThreadPoolExecutor;->shutdownNow()Ljava/util/List;
 HSPLjava/util/concurrent/ThreadPoolExecutor;->terminated()V
 HSPLjava/util/concurrent/ThreadPoolExecutor;->toString()Ljava/lang/String;
-HSPLjava/util/concurrent/ThreadPoolExecutor;->tryTerminate()V
+HSPLjava/util/concurrent/ThreadPoolExecutor;->tryTerminate()V+]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
 HSPLjava/util/concurrent/ThreadPoolExecutor;->workerCountOf(I)I
 HSPLjava/util/concurrent/TimeUnit;->convert(JLjava/util/concurrent/TimeUnit;)J+]Ljava/util/concurrent/TimeUnit;Ljava/util/concurrent/TimeUnit;
 HSPLjava/util/concurrent/TimeUnit;->cvt(JJJ)J
@@ -29317,10 +29332,10 @@
 HSPLjava/util/concurrent/atomic/AtomicInteger;->lazySet(I)V
 HSPLjava/util/concurrent/atomic/AtomicInteger;->set(I)V
 HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl;-><init>(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)V
-HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl;->accessCheck(Ljava/lang/Object;)V
+HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl;->accessCheck(Ljava/lang/Object;)V+]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl;->compareAndSet(Ljava/lang/Object;II)Z
-HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl;->decrementAndGet(Ljava/lang/Object;)I
-HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl;->getAndAdd(Ljava/lang/Object;I)I
+HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl;->decrementAndGet(Ljava/lang/Object;)I+]Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl;Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl;
+HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl;->getAndAdd(Ljava/lang/Object;I)I+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
 HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl;->incrementAndGet(Ljava/lang/Object;)I
 HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl;->set(Ljava/lang/Object;I)V
 HSPLjava/util/concurrent/atomic/AtomicIntegerFieldUpdater;-><init>()V
@@ -29339,10 +29354,10 @@
 HSPLjava/util/concurrent/atomic/AtomicLong;->set(J)V
 HSPLjava/util/concurrent/atomic/AtomicLong;->toString()Ljava/lang/String;
 HSPLjava/util/concurrent/atomic/AtomicLongFieldUpdater$CASUpdater;-><init>(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)V
-HSPLjava/util/concurrent/atomic/AtomicLongFieldUpdater$CASUpdater;->accessCheck(Ljava/lang/Object;)V
+HSPLjava/util/concurrent/atomic/AtomicLongFieldUpdater$CASUpdater;->accessCheck(Ljava/lang/Object;)V+]Ljava/lang/Class;Ljava/lang/Class;
 HSPLjava/util/concurrent/atomic/AtomicLongFieldUpdater$CASUpdater;->addAndGet(Ljava/lang/Object;J)J
 HSPLjava/util/concurrent/atomic/AtomicLongFieldUpdater$CASUpdater;->compareAndSet(Ljava/lang/Object;JJ)Z
-HSPLjava/util/concurrent/atomic/AtomicLongFieldUpdater$CASUpdater;->getAndAdd(Ljava/lang/Object;J)J
+HSPLjava/util/concurrent/atomic/AtomicLongFieldUpdater$CASUpdater;->getAndAdd(Ljava/lang/Object;J)J+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
 HSPLjava/util/concurrent/atomic/AtomicLongFieldUpdater$CASUpdater;->incrementAndGet(Ljava/lang/Object;)J
 HSPLjava/util/concurrent/atomic/AtomicLongFieldUpdater;-><init>()V
 HSPLjava/util/concurrent/atomic/AtomicLongFieldUpdater;->newUpdater(Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
@@ -29386,17 +29401,17 @@
 HSPLjava/util/concurrent/locks/AbstractOwnableSynchronizer;->getExclusiveOwnerThread()Ljava/lang/Thread;
 HSPLjava/util/concurrent/locks/AbstractOwnableSynchronizer;->setExclusiveOwnerThread(Ljava/lang/Thread;)V
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;-><init>(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;)V
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->addConditionWaiter()Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->await()V
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->awaitNanos(J)J
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->addConditionWaiter()Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->await()V+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->awaitNanos(J)J+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->checkInterruptWhileWaiting(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)I
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->doSignal(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->doSignal(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->doSignalAll(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->hasWaiters()Z+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->isOwnedBy(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;)Z
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->reportInterruptAfterWait(I)V
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->signal()V+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->signalAll()V
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->signal()V+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;,Ljava/util/concurrent/locks/ReentrantLock$FairSync;
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->signalAll()V+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;->unlinkCancelledWaiters()V
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;-><init>()V
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;-><init>(I)V
@@ -29407,24 +29422,24 @@
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;->predecessor()Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;->setPrevRelaxed(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;-><init>()V
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->acquire(I)V+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;,Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;,Ljava/util/concurrent/ThreadPoolExecutor$Worker;
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->acquireInterruptibly(I)V
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->acquireQueued(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;I)Z
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->acquireShared(I)V+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->acquire(I)V+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;megamorphic_types
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->acquireInterruptibly(I)V+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->acquireQueued(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;I)Z+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;,Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->acquireShared(I)V+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;,Ljava/util/concurrent/locks/ReentrantReadWriteLock$FairSync;,Ljava/util/concurrent/Semaphore$NonfairSync;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->acquireSharedInterruptibly(I)V
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->addWaiter(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->apparentlyFirstQueuedIsExclusive()Z
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->addWaiter(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->apparentlyFirstQueuedIsExclusive()Z+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->cancelAcquire(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->compareAndSetState(II)Z
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->compareAndSetTail(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->doAcquireInterruptibly(I)V
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->doAcquireInterruptibly(I)V+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->doAcquireShared(I)V
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->doAcquireSharedInterruptibly(I)V
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->doAcquireSharedNanos(IJ)Z
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->doReleaseShared()V
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->enq(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->doReleaseShared()V+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->enq(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->findNodeFromTail(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->fullyRelease(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)I
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->fullyRelease(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)I+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->getState()I
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->hasQueuedPredecessors()Z
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->hasWaiters(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)Z+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
@@ -29432,42 +29447,42 @@
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->isOnSyncQueue(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->owns(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)Z+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->parkAndCheckInterrupt()Z
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->release(I)Z+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;,Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;,Ljava/util/concurrent/locks/ReentrantLock$FairSync;,Ljava/util/concurrent/ThreadPoolExecutor$Worker;
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->releaseShared(I)Z+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->release(I)Z+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;megamorphic_types
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->releaseShared(I)Z+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;,Ljava/util/concurrent/CountDownLatch$Sync;,Ljava/util/concurrent/locks/ReentrantReadWriteLock$FairSync;,Ljava/util/concurrent/Semaphore$NonfairSync;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->selfInterrupt()V
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->setHead(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->setHeadAndPropagate(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;I)V
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->setState(I)V
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->shouldParkAfterFailedAcquire(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->transferAfterCancelledWait(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->transferForSignal(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->transferAfterCancelledWait(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->transferForSignal(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)Z+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
 HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->tryAcquireNanos(IJ)Z+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->tryAcquireSharedNanos(IJ)Z
-HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->unparkSuccessor(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V
-HSPLjava/util/concurrent/locks/LockSupport;->park(Ljava/lang/Object;)V
-HSPLjava/util/concurrent/locks/LockSupport;->parkNanos(J)V
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->tryAcquireSharedNanos(IJ)Z+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;Ljava/util/concurrent/CountDownLatch$Sync;,Ljava/util/concurrent/Semaphore$NonfairSync;
+HSPLjava/util/concurrent/locks/AbstractQueuedSynchronizer;->unparkSuccessor(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;)V+]Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$Node;
+HSPLjava/util/concurrent/locks/LockSupport;->park(Ljava/lang/Object;)V+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
+HSPLjava/util/concurrent/locks/LockSupport;->parkNanos(J)V+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
 HSPLjava/util/concurrent/locks/LockSupport;->parkNanos(Ljava/lang/Object;J)V+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
 HSPLjava/util/concurrent/locks/LockSupport;->setBlocker(Ljava/lang/Thread;Ljava/lang/Object;)V
-HSPLjava/util/concurrent/locks/LockSupport;->unpark(Ljava/lang/Thread;)V
+HSPLjava/util/concurrent/locks/LockSupport;->unpark(Ljava/lang/Thread;)V+]Ljdk/internal/misc/Unsafe;Ljdk/internal/misc/Unsafe;
 HSPLjava/util/concurrent/locks/ReentrantLock$FairSync;-><init>()V
 HSPLjava/util/concurrent/locks/ReentrantLock$FairSync;->tryAcquire(I)Z
 HSPLjava/util/concurrent/locks/ReentrantLock$NonfairSync;-><init>()V
 HSPLjava/util/concurrent/locks/ReentrantLock$NonfairSync;->tryAcquire(I)Z+]Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
 HSPLjava/util/concurrent/locks/ReentrantLock$Sync;-><init>()V
-HSPLjava/util/concurrent/locks/ReentrantLock$Sync;->isHeldExclusively()Z+]Ljava/util/concurrent/locks/ReentrantLock$Sync;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
+HSPLjava/util/concurrent/locks/ReentrantLock$Sync;->isHeldExclusively()Z+]Ljava/util/concurrent/locks/ReentrantLock$Sync;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;,Ljava/util/concurrent/locks/ReentrantLock$FairSync;
 HSPLjava/util/concurrent/locks/ReentrantLock$Sync;->newCondition()Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;
 HSPLjava/util/concurrent/locks/ReentrantLock$Sync;->nonfairTryAcquire(I)Z+]Ljava/util/concurrent/locks/ReentrantLock$Sync;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
-HSPLjava/util/concurrent/locks/ReentrantLock$Sync;->tryRelease(I)Z+]Ljava/util/concurrent/locks/ReentrantLock$Sync;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
+HSPLjava/util/concurrent/locks/ReentrantLock$Sync;->tryRelease(I)Z+]Ljava/util/concurrent/locks/ReentrantLock$Sync;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;,Ljava/util/concurrent/locks/ReentrantLock$FairSync;
 HSPLjava/util/concurrent/locks/ReentrantLock;-><init>()V
 HSPLjava/util/concurrent/locks/ReentrantLock;-><init>(Z)V
 HSPLjava/util/concurrent/locks/ReentrantLock;->hasWaiters(Ljava/util/concurrent/locks/Condition;)Z+]Ljava/util/concurrent/locks/ReentrantLock$Sync;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
 HSPLjava/util/concurrent/locks/ReentrantLock;->isHeldByCurrentThread()Z+]Ljava/util/concurrent/locks/ReentrantLock$Sync;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
-HSPLjava/util/concurrent/locks/ReentrantLock;->lock()V+]Ljava/util/concurrent/locks/ReentrantLock$Sync;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
-HSPLjava/util/concurrent/locks/ReentrantLock;->lockInterruptibly()V
+HSPLjava/util/concurrent/locks/ReentrantLock;->lock()V+]Ljava/util/concurrent/locks/ReentrantLock$Sync;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;,Ljava/util/concurrent/locks/ReentrantLock$FairSync;
+HSPLjava/util/concurrent/locks/ReentrantLock;->lockInterruptibly()V+]Ljava/util/concurrent/locks/ReentrantLock$Sync;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
 HSPLjava/util/concurrent/locks/ReentrantLock;->newCondition()Ljava/util/concurrent/locks/Condition;
-HSPLjava/util/concurrent/locks/ReentrantLock;->tryLock()Z
+HSPLjava/util/concurrent/locks/ReentrantLock;->tryLock()Z+]Ljava/util/concurrent/locks/ReentrantLock$Sync;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
 HSPLjava/util/concurrent/locks/ReentrantLock;->tryLock(JLjava/util/concurrent/TimeUnit;)Z+]Ljava/util/concurrent/TimeUnit;Ljava/util/concurrent/TimeUnit;]Ljava/util/concurrent/locks/ReentrantLock$Sync;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
-HSPLjava/util/concurrent/locks/ReentrantLock;->unlock()V+]Ljava/util/concurrent/locks/ReentrantLock$Sync;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;
+HSPLjava/util/concurrent/locks/ReentrantLock;->unlock()V+]Ljava/util/concurrent/locks/ReentrantLock$Sync;Ljava/util/concurrent/locks/ReentrantLock$NonfairSync;,Ljava/util/concurrent/locks/ReentrantLock$FairSync;
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$FairSync;-><init>()V
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$FairSync;->readerShouldBlock()Z
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$FairSync;->writerShouldBlock()Z
@@ -29475,8 +29490,8 @@
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;->readerShouldBlock()Z+]Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;->writerShouldBlock()Z
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$ReadLock;-><init>(Ljava/util/concurrent/locks/ReentrantReadWriteLock;)V
-HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$ReadLock;->lock()V+]Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;
-HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$ReadLock;->unlock()V+]Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$ReadLock;->lock()V+]Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;,Ljava/util/concurrent/locks/ReentrantReadWriteLock$FairSync;
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$ReadLock;->unlock()V+]Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;,Ljava/util/concurrent/locks/ReentrantReadWriteLock$FairSync;
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync$HoldCounter;-><init>()V
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter;-><init>()V
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter;->initialValue()Ljava/lang/Object;
@@ -29484,15 +29499,15 @@
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;-><init>()V
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->exclusiveCount(I)I
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->fullTryAcquireShared(Ljava/lang/Thread;)I
-HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->isHeldExclusively()Z
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->isHeldExclusively()Z+]Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->sharedCount(I)I
-HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->tryAcquire(I)Z
-HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->tryAcquireShared(I)I+]Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;
-HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->tryRelease(I)Z
-HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->tryReleaseShared(I)Z+]Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->tryAcquire(I)Z+]Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->tryAcquireShared(I)I+]Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;,Ljava/util/concurrent/locks/ReentrantReadWriteLock$FairSync;]Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter;Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter;
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->tryRelease(I)Z+]Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$Sync;->tryReleaseShared(I)Z+]Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;,Ljava/util/concurrent/locks/ReentrantReadWriteLock$FairSync;]Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter;Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter;
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;-><init>(Ljava/util/concurrent/locks/ReentrantReadWriteLock;)V
-HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;->lock()V
-HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;->unlock()V
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;->lock()V+]Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;
+HSPLjava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;->unlock()V+]Ljava/util/concurrent/locks/ReentrantReadWriteLock$Sync;Ljava/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync;
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock;-><init>()V
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock;-><init>(Z)V
 HSPLjava/util/concurrent/locks/ReentrantReadWriteLock;->readLock()Ljava/util/concurrent/locks/Lock;+]Ljava/util/concurrent/locks/ReentrantReadWriteLock;Ljava/util/concurrent/locks/ReentrantReadWriteLock;
@@ -29524,9 +29539,9 @@
 HSPLjava/util/jar/Attributes;->get(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLjava/util/jar/Attributes;->getValue(Ljava/util/jar/Attributes$Name;)Ljava/lang/String;
 HSPLjava/util/jar/Attributes;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/Map;Ljava/util/HashMap;
-HSPLjava/util/jar/Attributes;->putValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLjava/util/jar/Attributes;->putValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Ljava/util/jar/Attributes;Ljava/util/jar/Attributes;
 HSPLjava/util/jar/Attributes;->read(Ljava/util/jar/Manifest$FastInputStream;[B)V+]Ljava/util/jar/Attributes;Ljava/util/jar/Attributes;]Ljava/util/jar/Manifest$FastInputStream;Ljava/util/jar/Manifest$FastInputStream;
-HSPLjava/util/jar/Attributes;->size()I
+HSPLjava/util/jar/Attributes;->size()I+]Ljava/util/Map;Ljava/util/HashMap;
 HSPLjava/util/jar/JarEntry;-><init>(Ljava/util/zip/ZipEntry;)V
 HSPLjava/util/jar/JarFile$JarFileEntry;-><init>(Ljava/util/jar/JarFile;Ljava/util/zip/ZipEntry;)V
 HSPLjava/util/jar/JarFile;-><init>(Ljava/io/File;ZI)V
@@ -29577,7 +29592,7 @@
 HSPLjava/util/logging/FileHandler$MeteredStream;-><init>(Ljava/util/logging/FileHandler;Ljava/io/OutputStream;I)V
 HSPLjava/util/logging/FileHandler$MeteredStream;->close()V
 HSPLjava/util/logging/FileHandler$MeteredStream;->flush()V
-HSPLjava/util/logging/FileHandler$MeteredStream;->write([BII)V
+HSPLjava/util/logging/FileHandler$MeteredStream;->write([BII)V+]Ljava/io/OutputStream;Ljava/io/BufferedOutputStream;
 HSPLjava/util/logging/FileHandler;->-$$Nest$mrotate(Ljava/util/logging/FileHandler;)V
 HSPLjava/util/logging/FileHandler;-><clinit>()V
 HSPLjava/util/logging/FileHandler;-><init>(Ljava/lang/String;IIZ)V
@@ -29586,7 +29601,7 @@
 HSPLjava/util/logging/FileHandler;->isParentWritable(Ljava/nio/file/Path;)Z
 HSPLjava/util/logging/FileHandler;->open(Ljava/io/File;Z)V
 HSPLjava/util/logging/FileHandler;->openFiles()V
-HSPLjava/util/logging/FileHandler;->publish(Ljava/util/logging/LogRecord;)V
+HSPLjava/util/logging/FileHandler;->publish(Ljava/util/logging/LogRecord;)V+]Ljava/util/logging/FileHandler;Ljava/util/logging/FileHandler;
 HSPLjava/util/logging/FileHandler;->rotate()V
 HSPLjava/util/logging/Formatter;-><init>()V
 HSPLjava/util/logging/Formatter;->getHead(Ljava/util/logging/Handler;)Ljava/lang/String;
@@ -29597,7 +29612,7 @@
 HSPLjava/util/logging/Handler;->getFilter()Ljava/util/logging/Filter;
 HSPLjava/util/logging/Handler;->getFormatter()Ljava/util/logging/Formatter;
 HSPLjava/util/logging/Handler;->getLevel()Ljava/util/logging/Level;
-HSPLjava/util/logging/Handler;->isLoggable(Ljava/util/logging/LogRecord;)Z
+HSPLjava/util/logging/Handler;->isLoggable(Ljava/util/logging/LogRecord;)Z+]Ljava/util/logging/Handler;Ljava/util/logging/FileHandler;]Ljava/util/logging/Level;Ljava/util/logging/Level;]Ljava/util/logging/LogRecord;Ljava/util/logging/LogRecord;
 HSPLjava/util/logging/Handler;->setEncoding(Ljava/lang/String;)V
 HSPLjava/util/logging/Handler;->setErrorManager(Ljava/util/logging/ErrorManager;)V
 HSPLjava/util/logging/Handler;->setFilter(Ljava/util/logging/Filter;)V
@@ -29664,7 +29679,7 @@
 HSPLjava/util/logging/LogManager;->parseClassNames(Ljava/lang/String;)[Ljava/lang/String;
 HSPLjava/util/logging/LogManager;->reset()V
 HSPLjava/util/logging/LogManager;->resetLogger(Ljava/util/logging/Logger;)V
-HSPLjava/util/logging/LogRecord;-><init>(Ljava/util/logging/Level;Ljava/lang/String;)V
+HSPLjava/util/logging/LogRecord;-><init>(Ljava/util/logging/Level;Ljava/lang/String;)V+]Ljava/lang/Object;Ljava/util/logging/Level;]Ljava/util/concurrent/atomic/AtomicLong;Ljava/util/concurrent/atomic/AtomicLong;
 HSPLjava/util/logging/LogRecord;->defaultThreadID()I
 HSPLjava/util/logging/LogRecord;->getLevel()Ljava/util/logging/Level;
 HSPLjava/util/logging/LogRecord;->getLoggerName()Ljava/lang/String;
@@ -29685,12 +29700,12 @@
 HSPLjava/util/logging/Logger;->addHandler(Ljava/util/logging/Handler;)V
 HSPLjava/util/logging/Logger;->checkPermission()V
 HSPLjava/util/logging/Logger;->demandLogger(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Class;)Ljava/util/logging/Logger;
-HSPLjava/util/logging/Logger;->doLog(Ljava/util/logging/LogRecord;)V
+HSPLjava/util/logging/Logger;->doLog(Ljava/util/logging/LogRecord;)V+]Ljava/util/logging/LogRecord;Ljava/util/logging/LogRecord;]Ljava/util/logging/Logger;Ljava/util/logging/Logger;
 HSPLjava/util/logging/Logger;->doSetParent(Ljava/util/logging/Logger;)V
 HSPLjava/util/logging/Logger;->findResourceBundle(Ljava/lang/String;Z)Ljava/util/ResourceBundle;
 HSPLjava/util/logging/Logger;->findSystemResourceBundle(Ljava/util/Locale;)Ljava/util/ResourceBundle;
 HSPLjava/util/logging/Logger;->getCallersClassLoader()Ljava/lang/ClassLoader;
-HSPLjava/util/logging/Logger;->getEffectiveLoggerBundle()Ljava/util/logging/Logger$LoggerBundle;
+HSPLjava/util/logging/Logger;->getEffectiveLoggerBundle()Ljava/util/logging/Logger$LoggerBundle;+]Ljava/util/logging/Logger$LoggerBundle;Ljava/util/logging/Logger$LoggerBundle;]Ljava/util/logging/Logger;Ljava/util/logging/LogManager$RootLogger;,Ljava/util/logging/Logger;
 HSPLjava/util/logging/Logger;->getHandlers()[Ljava/util/logging/Handler;
 HSPLjava/util/logging/Logger;->getLogger(Ljava/lang/String;)Ljava/util/logging/Logger;
 HSPLjava/util/logging/Logger;->getName()Ljava/lang/String;
@@ -29700,10 +29715,10 @@
 HSPLjava/util/logging/Logger;->getResourceBundleName()Ljava/lang/String;
 HSPLjava/util/logging/Logger;->getUseParentHandlers()Z
 HSPLjava/util/logging/Logger;->info(Ljava/lang/String;)V
-HSPLjava/util/logging/Logger;->isLoggable(Ljava/util/logging/Level;)Z
+HSPLjava/util/logging/Logger;->isLoggable(Ljava/util/logging/Level;)Z+]Ljava/util/logging/Level;Ljava/util/logging/Level;
 HSPLjava/util/logging/Logger;->log(Ljava/util/logging/Level;Ljava/lang/String;)V
-HSPLjava/util/logging/Logger;->log(Ljava/util/logging/LogRecord;)V
-HSPLjava/util/logging/Logger;->logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HSPLjava/util/logging/Logger;->log(Ljava/util/logging/LogRecord;)V+]Ljava/util/logging/Handler;Ljava/util/logging/FileHandler;]Ljava/util/logging/LogRecord;Ljava/util/logging/LogRecord;]Ljava/util/logging/Logger;Ljava/util/logging/Logger;
+HSPLjava/util/logging/Logger;->logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V+]Ljava/util/logging/LogRecord;Ljava/util/logging/LogRecord;]Ljava/util/logging/Logger;Ljava/util/logging/Logger;
 HSPLjava/util/logging/Logger;->logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V
 HSPLjava/util/logging/Logger;->logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V
 HSPLjava/util/logging/Logger;->removeChildLogger(Ljava/util/logging/LogManager$LoggerWeakRef;)V
@@ -29722,42 +29737,42 @@
 HSPLjava/util/logging/StreamHandler;-><init>()V
 HSPLjava/util/logging/StreamHandler;->close()V
 HSPLjava/util/logging/StreamHandler;->configure()V
-HSPLjava/util/logging/StreamHandler;->flush()V
+HSPLjava/util/logging/StreamHandler;->flush()V+]Ljava/io/Writer;Ljava/io/OutputStreamWriter;
 HSPLjava/util/logging/StreamHandler;->flushAndClose()V
 HSPLjava/util/logging/StreamHandler;->isLoggable(Ljava/util/logging/LogRecord;)Z
-HSPLjava/util/logging/StreamHandler;->publish(Ljava/util/logging/LogRecord;)V
+HSPLjava/util/logging/StreamHandler;->publish(Ljava/util/logging/LogRecord;)V+]Ljava/io/Writer;Ljava/io/OutputStreamWriter;]Ljava/util/logging/StreamHandler;Ljava/util/logging/FileHandler;
 HSPLjava/util/logging/StreamHandler;->setEncoding(Ljava/lang/String;)V
 HSPLjava/util/logging/StreamHandler;->setOutputStream(Ljava/io/OutputStream;)V
 HSPLjava/util/logging/XMLFormatter;-><init>()V
-HSPLjava/util/regex/Matcher;-><init>(Ljava/util/regex/Pattern;Ljava/lang/CharSequence;)V
-HSPLjava/util/regex/Matcher;->appendEvaluated(Ljava/lang/StringBuffer;Ljava/lang/String;)V
+HSPLjava/util/regex/Matcher;-><init>(Ljava/util/regex/Pattern;Ljava/lang/CharSequence;)V+]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;
+HSPLjava/util/regex/Matcher;->appendEvaluated(Ljava/lang/StringBuffer;Ljava/lang/String;)V+]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;
 HSPLjava/util/regex/Matcher;->appendReplacement(Ljava/lang/StringBuffer;Ljava/lang/String;)Ljava/util/regex/Matcher;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;
-HSPLjava/util/regex/Matcher;->appendTail(Ljava/lang/StringBuffer;)Ljava/lang/StringBuffer;
-HSPLjava/util/regex/Matcher;->end()I
+HSPLjava/util/regex/Matcher;->appendTail(Ljava/lang/StringBuffer;)Ljava/lang/StringBuffer;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;
+HSPLjava/util/regex/Matcher;->end()I+]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;
 HSPLjava/util/regex/Matcher;->end(I)I+]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;
 HSPLjava/util/regex/Matcher;->ensureMatch()V
-HSPLjava/util/regex/Matcher;->find()Z
-HSPLjava/util/regex/Matcher;->find(I)Z
-HSPLjava/util/regex/Matcher;->getSubSequence(II)Ljava/lang/CharSequence;
+HSPLjava/util/regex/Matcher;->find()Z+]Lcom/android/icu/util/regex/MatcherNative;Lcom/android/icu/util/regex/MatcherNative;
+HSPLjava/util/regex/Matcher;->find(I)Z+]Lcom/android/icu/util/regex/MatcherNative;Lcom/android/icu/util/regex/MatcherNative;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;
+HSPLjava/util/regex/Matcher;->getSubSequence(II)Ljava/lang/CharSequence;+]Ljava/lang/String;Ljava/lang/String;
 HSPLjava/util/regex/Matcher;->getTextLength()I
 HSPLjava/util/regex/Matcher;->group()Ljava/lang/String;
 HSPLjava/util/regex/Matcher;->group(I)Ljava/lang/String;+]Ljava/lang/CharSequence;Ljava/lang/String;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;
-HSPLjava/util/regex/Matcher;->groupCount()I
+HSPLjava/util/regex/Matcher;->groupCount()I+]Lcom/android/icu/util/regex/MatcherNative;Lcom/android/icu/util/regex/MatcherNative;
 HSPLjava/util/regex/Matcher;->hitEnd()Z+]Lcom/android/icu/util/regex/MatcherNative;Lcom/android/icu/util/regex/MatcherNative;
 HSPLjava/util/regex/Matcher;->lookingAt()Z+]Lcom/android/icu/util/regex/MatcherNative;Lcom/android/icu/util/regex/MatcherNative;
 HSPLjava/util/regex/Matcher;->matches()Z+]Lcom/android/icu/util/regex/MatcherNative;Lcom/android/icu/util/regex/MatcherNative;
 HSPLjava/util/regex/Matcher;->pattern()Ljava/util/regex/Pattern;
 HSPLjava/util/regex/Matcher;->region(II)Ljava/util/regex/Matcher;
 HSPLjava/util/regex/Matcher;->replaceAll(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;
-HSPLjava/util/regex/Matcher;->replaceFirst(Ljava/lang/String;)Ljava/lang/String;
-HSPLjava/util/regex/Matcher;->reset()Ljava/util/regex/Matcher;
-HSPLjava/util/regex/Matcher;->reset(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;
-HSPLjava/util/regex/Matcher;->reset(Ljava/lang/CharSequence;II)Ljava/util/regex/Matcher;
-HSPLjava/util/regex/Matcher;->resetForInput()V
+HSPLjava/util/regex/Matcher;->replaceFirst(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuffer;Ljava/lang/StringBuffer;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;]Ljava/lang/String;Ljava/lang/String;
+HSPLjava/util/regex/Matcher;->reset()Ljava/util/regex/Matcher;+]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLjava/util/regex/Matcher;->reset(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;+]Ljava/lang/CharSequence;Ljava/lang/String;,Ljava/lang/StringBuilder;,Landroid/text/SpannableStringBuilder;,Landroid/text/SpannableString;
+HSPLjava/util/regex/Matcher;->reset(Ljava/lang/CharSequence;II)Ljava/util/regex/Matcher;+]Ljava/lang/CharSequence;Ljava/lang/String;,Ljava/nio/HeapCharBuffer;,Ljava/lang/StringBuilder;,Landroid/text/SpannableStringBuilder;,Landroid/text/SpannableString;
+HSPLjava/util/regex/Matcher;->resetForInput()V+]Lcom/android/icu/util/regex/MatcherNative;Lcom/android/icu/util/regex/MatcherNative;
 HSPLjava/util/regex/Matcher;->start()I
-HSPLjava/util/regex/Matcher;->start(I)I
+HSPLjava/util/regex/Matcher;->start(I)I+]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;
 HSPLjava/util/regex/Matcher;->useAnchoringBounds(Z)Ljava/util/regex/Matcher;
-HSPLjava/util/regex/Matcher;->usePattern(Ljava/util/regex/Pattern;)Ljava/util/regex/Matcher;
+HSPLjava/util/regex/Matcher;->usePattern(Ljava/util/regex/Pattern;)Ljava/util/regex/Matcher;+]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;
 HSPLjava/util/regex/Matcher;->useTransparentBounds(Z)Ljava/util/regex/Matcher;
 HSPLjava/util/regex/Pattern;-><init>(Ljava/lang/String;I)V
 HSPLjava/util/regex/Pattern;->compile()V
@@ -29769,26 +29784,26 @@
 HSPLjava/util/regex/Pattern;->pattern()Ljava/lang/String;
 HSPLjava/util/regex/Pattern;->quote(Ljava/lang/String;)Ljava/lang/String;
 HSPLjava/util/regex/Pattern;->split(Ljava/lang/CharSequence;)[Ljava/lang/String;
-HSPLjava/util/regex/Pattern;->split(Ljava/lang/CharSequence;I)[Ljava/lang/String;
+HSPLjava/util/regex/Pattern;->split(Ljava/lang/CharSequence;I)[Ljava/lang/String;+]Ljava/util/List;Ljava/util/ArrayList$SubList;]Ljava/lang/CharSequence;Ljava/lang/String;]Ljava/util/regex/Pattern;Ljava/util/regex/Pattern;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLjava/util/regex/Pattern;->toString()Ljava/lang/String;
 HSPLjava/util/stream/AbstractPipeline;-><init>(Ljava/util/Spliterator;IZ)V
-HSPLjava/util/stream/AbstractPipeline;-><init>(Ljava/util/stream/AbstractPipeline;I)V+]Ljava/util/stream/AbstractPipeline;Ljava/util/stream/IntPipeline$4;,Ljava/util/stream/ReferencePipeline$4;
+HSPLjava/util/stream/AbstractPipeline;-><init>(Ljava/util/stream/AbstractPipeline;I)V+]Ljava/util/stream/AbstractPipeline;megamorphic_types
 HSPLjava/util/stream/AbstractPipeline;->close()V
-HSPLjava/util/stream/AbstractPipeline;->copyInto(Ljava/util/stream/Sink;Ljava/util/Spliterator;)V+]Ljava/util/Spliterator;Ljava/util/Spliterators$IntArraySpliterator;,Ljava/util/HashMap$KeySpliterator;]Ljava/util/stream/AbstractPipeline;Ljava/util/stream/IntPipeline$4;,Ljava/util/stream/ReferencePipeline$4;]Ljava/util/stream/Sink;Ljava/util/stream/ReferencePipeline$4$1;,Ljava/util/stream/IntPipeline$4$1;]Ljava/util/stream/StreamOpFlag;Ljava/util/stream/StreamOpFlag;
+HSPLjava/util/stream/AbstractPipeline;->copyInto(Ljava/util/stream/Sink;Ljava/util/Spliterator;)V+]Ljava/util/Spliterator;megamorphic_types]Ljava/util/stream/AbstractPipeline;megamorphic_types]Ljava/util/stream/Sink;megamorphic_types]Ljava/util/stream/StreamOpFlag;Ljava/util/stream/StreamOpFlag;
 HSPLjava/util/stream/AbstractPipeline;->copyIntoWithCancel(Ljava/util/stream/Sink;Ljava/util/Spliterator;)V
 HSPLjava/util/stream/AbstractPipeline;->evaluate(Ljava/util/Spliterator;ZLjava/util/function/IntFunction;)Ljava/util/stream/Node;+]Ljava/util/stream/Node$Builder;Ljava/util/stream/Nodes$IntFixedNodeBuilder;]Ljava/util/stream/AbstractPipeline;Ljava/util/stream/ReferencePipeline$4;
-HSPLjava/util/stream/AbstractPipeline;->evaluate(Ljava/util/stream/TerminalOp;)Ljava/lang/Object;+]Ljava/util/stream/TerminalOp;Ljava/util/stream/ReduceOps$3;]Ljava/util/stream/AbstractPipeline;Ljava/util/stream/IntPipeline$4;
+HSPLjava/util/stream/AbstractPipeline;->evaluate(Ljava/util/stream/TerminalOp;)Ljava/lang/Object;+]Ljava/util/stream/TerminalOp;megamorphic_types]Ljava/util/stream/AbstractPipeline;megamorphic_types
 HSPLjava/util/stream/AbstractPipeline;->evaluateToArrayNode(Ljava/util/function/IntFunction;)Ljava/util/stream/Node;+]Ljava/util/stream/AbstractPipeline;Ljava/util/stream/ReferencePipeline$4;
 HSPLjava/util/stream/AbstractPipeline;->exactOutputSizeIfKnown(Ljava/util/Spliterator;)J+]Ljava/util/Spliterator;Ljava/util/HashMap$KeySpliterator;]Ljava/util/stream/AbstractPipeline;Ljava/util/stream/ReferencePipeline$4;]Ljava/util/stream/StreamOpFlag;Ljava/util/stream/StreamOpFlag;
 HSPLjava/util/stream/AbstractPipeline;->getStreamAndOpFlags()I
 HSPLjava/util/stream/AbstractPipeline;->isParallel()Z
 HSPLjava/util/stream/AbstractPipeline;->onClose(Ljava/lang/Runnable;)Ljava/util/stream/BaseStream;
 HSPLjava/util/stream/AbstractPipeline;->sequential()Ljava/util/stream/BaseStream;
-HSPLjava/util/stream/AbstractPipeline;->sourceSpliterator(I)Ljava/util/Spliterator;
+HSPLjava/util/stream/AbstractPipeline;->sourceSpliterator(I)Ljava/util/Spliterator;+]Ljava/util/stream/AbstractPipeline;megamorphic_types
 HSPLjava/util/stream/AbstractPipeline;->sourceStageSpliterator()Ljava/util/Spliterator;
 HSPLjava/util/stream/AbstractPipeline;->spliterator()Ljava/util/Spliterator;
-HSPLjava/util/stream/AbstractPipeline;->wrapAndCopyInto(Ljava/util/stream/Sink;Ljava/util/Spliterator;)Ljava/util/stream/Sink;+]Ljava/util/stream/AbstractPipeline;Ljava/util/stream/IntPipeline$4;,Ljava/util/stream/ReferencePipeline$4;
-HSPLjava/util/stream/AbstractPipeline;->wrapSink(Ljava/util/stream/Sink;)Ljava/util/stream/Sink;+]Ljava/util/stream/AbstractPipeline;Ljava/util/stream/IntPipeline$4;,Ljava/util/stream/ReferencePipeline$4;
+HSPLjava/util/stream/AbstractPipeline;->wrapAndCopyInto(Ljava/util/stream/Sink;Ljava/util/Spliterator;)Ljava/util/stream/Sink;+]Ljava/util/stream/AbstractPipeline;megamorphic_types
+HSPLjava/util/stream/AbstractPipeline;->wrapSink(Ljava/util/stream/Sink;)Ljava/util/stream/Sink;+]Ljava/util/stream/AbstractPipeline;megamorphic_types
 HSPLjava/util/stream/AbstractSpinedBuffer;-><init>()V
 HSPLjava/util/stream/AbstractSpinedBuffer;->count()J
 HSPLjava/util/stream/Collectors$$ExternalSyntheticLambda0;-><init>()V
@@ -29887,7 +29902,7 @@
 HSPLjava/util/stream/IntPipeline$9;-><init>(Ljava/util/stream/IntPipeline;Ljava/util/stream/AbstractPipeline;Ljava/util/stream/StreamShape;ILjava/util/function/IntPredicate;)V
 HSPLjava/util/stream/IntPipeline$9;->opWrapSink(ILjava/util/stream/Sink;)Ljava/util/stream/Sink;
 HSPLjava/util/stream/IntPipeline$Head;-><init>(Ljava/util/Spliterator;IZ)V
-HSPLjava/util/stream/IntPipeline$Head;->forEach(Ljava/util/function/IntConsumer;)V
+HSPLjava/util/stream/IntPipeline$Head;->forEach(Ljava/util/function/IntConsumer;)V+]Ljava/util/stream/IntPipeline$Head;Ljava/util/stream/IntPipeline$Head;]Ljava/util/Spliterator$OfInt;Ljava/util/Spliterators$EmptySpliterator$OfInt;,Ljava/util/stream/Streams$RangeIntSpliterator;
 HSPLjava/util/stream/IntPipeline$StatelessOp;-><init>(Ljava/util/stream/AbstractPipeline;Ljava/util/stream/StreamShape;I)V
 HSPLjava/util/stream/IntPipeline$StatelessOp;->opIsStateful()Z
 HSPLjava/util/stream/IntPipeline;->-$$Nest$smadapt(Ljava/util/Spliterator;)Ljava/util/Spliterator$OfInt;
@@ -29980,11 +29995,11 @@
 HSPLjava/util/stream/ReduceOps$2ReducingSink;->get()Ljava/lang/Object;
 HSPLjava/util/stream/ReduceOps$2ReducingSink;->get()Ljava/util/Optional;
 HSPLjava/util/stream/ReduceOps$3;-><init>(Ljava/util/stream/StreamShape;Ljava/util/function/BinaryOperator;Ljava/util/function/BiConsumer;Ljava/util/function/Supplier;Ljava/util/stream/Collector;)V
-HSPLjava/util/stream/ReduceOps$3;->getOpFlags()I+]Ljava/util/stream/Collector;Ljava/util/stream/Collectors$CollectorImpl;]Ljava/util/Set;Ljava/util/Collections$UnmodifiableSet;
+HSPLjava/util/stream/ReduceOps$3;->getOpFlags()I+]Ljava/util/stream/Collector;Ljava/util/stream/Collectors$CollectorImpl;]Ljava/util/Set;Ljava/util/Collections$UnmodifiableSet;,Ljava/util/Collections$EmptySet;
 HSPLjava/util/stream/ReduceOps$3;->makeSink()Ljava/util/stream/ReduceOps$3ReducingSink;
-HSPLjava/util/stream/ReduceOps$3;->makeSink()Ljava/util/stream/ReduceOps$AccumulatingSink;
+HSPLjava/util/stream/ReduceOps$3;->makeSink()Ljava/util/stream/ReduceOps$AccumulatingSink;+]Ljava/util/stream/ReduceOps$3;Ljava/util/stream/ReduceOps$3;
 HSPLjava/util/stream/ReduceOps$3ReducingSink;-><init>(Ljava/util/function/Supplier;Ljava/util/function/BiConsumer;Ljava/util/function/BinaryOperator;)V
-HSPLjava/util/stream/ReduceOps$3ReducingSink;->accept(Ljava/lang/Object;)V
+HSPLjava/util/stream/ReduceOps$3ReducingSink;->accept(Ljava/lang/Object;)V+]Ljava/util/function/BiConsumer;missing_types
 HSPLjava/util/stream/ReduceOps$3ReducingSink;->begin(J)V+]Ljava/util/function/Supplier;Ljava/util/stream/Collectors$$ExternalSyntheticLambda74;
 HSPLjava/util/stream/ReduceOps$5;-><init>(Ljava/util/stream/StreamShape;Ljava/util/function/IntBinaryOperator;I)V
 HSPLjava/util/stream/ReduceOps$5;->makeSink()Ljava/util/stream/ReduceOps$5ReducingSink;
@@ -30004,7 +30019,7 @@
 HSPLjava/util/stream/ReduceOps$Box;-><init>()V
 HSPLjava/util/stream/ReduceOps$Box;->get()Ljava/lang/Object;
 HSPLjava/util/stream/ReduceOps$ReduceOp;-><init>(Ljava/util/stream/StreamShape;)V
-HSPLjava/util/stream/ReduceOps$ReduceOp;->evaluateSequential(Ljava/util/stream/PipelineHelper;Ljava/util/Spliterator;)Ljava/lang/Object;+]Ljava/util/stream/ReduceOps$AccumulatingSink;Ljava/util/stream/ReduceOps$3ReducingSink;]Ljava/util/stream/PipelineHelper;Ljava/util/stream/IntPipeline$4;]Ljava/util/stream/ReduceOps$ReduceOp;Ljava/util/stream/ReduceOps$3;
+HSPLjava/util/stream/ReduceOps$ReduceOp;->evaluateSequential(Ljava/util/stream/PipelineHelper;Ljava/util/Spliterator;)Ljava/lang/Object;+]Ljava/util/stream/ReduceOps$AccumulatingSink;Ljava/util/stream/ReduceOps$3ReducingSink;,Ljava/util/stream/ReduceOps$8ReducingSink;,Ljava/util/stream/ReduceOps$2ReducingSink;]Ljava/util/stream/PipelineHelper;megamorphic_types]Ljava/util/stream/ReduceOps$ReduceOp;Ljava/util/stream/ReduceOps$3;,Ljava/util/stream/ReduceOps$8;,Ljava/util/stream/ReduceOps$2;
 HSPLjava/util/stream/ReduceOps;->makeDouble(Ljava/util/function/DoubleBinaryOperator;)Ljava/util/stream/TerminalOp;
 HSPLjava/util/stream/ReduceOps;->makeInt(ILjava/util/function/IntBinaryOperator;)Ljava/util/stream/TerminalOp;
 HSPLjava/util/stream/ReduceOps;->makeLong(JLjava/util/function/LongBinaryOperator;)Ljava/util/stream/TerminalOp;
@@ -30018,7 +30033,7 @@
 HSPLjava/util/stream/ReferencePipeline$2;-><init>(Ljava/util/stream/ReferencePipeline;Ljava/util/stream/AbstractPipeline;Ljava/util/stream/StreamShape;ILjava/util/function/Predicate;)V
 HSPLjava/util/stream/ReferencePipeline$2;->opWrapSink(ILjava/util/stream/Sink;)Ljava/util/stream/Sink;
 HSPLjava/util/stream/ReferencePipeline$3$1;-><init>(Ljava/util/stream/ReferencePipeline$3;Ljava/util/stream/Sink;)V
-HSPLjava/util/stream/ReferencePipeline$3$1;->accept(Ljava/lang/Object;)V
+HSPLjava/util/stream/ReferencePipeline$3$1;->accept(Ljava/lang/Object;)V+]Ljava/util/stream/Sink;Ljava/util/stream/ReduceOps$3ReducingSink;
 HSPLjava/util/stream/ReferencePipeline$3;-><init>(Ljava/util/stream/ReferencePipeline;Ljava/util/stream/AbstractPipeline;Ljava/util/stream/StreamShape;ILjava/util/function/Function;)V
 HSPLjava/util/stream/ReferencePipeline$3;->opWrapSink(ILjava/util/stream/Sink;)Ljava/util/stream/Sink;
 HSPLjava/util/stream/ReferencePipeline$4$1;-><init>(Ljava/util/stream/ReferencePipeline$4;Ljava/util/stream/Sink;)V
@@ -30034,12 +30049,12 @@
 HSPLjava/util/stream/ReferencePipeline$6;-><init>(Ljava/util/stream/ReferencePipeline;Ljava/util/stream/AbstractPipeline;Ljava/util/stream/StreamShape;ILjava/util/function/ToDoubleFunction;)V
 HSPLjava/util/stream/ReferencePipeline$6;->opWrapSink(ILjava/util/stream/Sink;)Ljava/util/stream/Sink;
 HSPLjava/util/stream/ReferencePipeline$7$1;-><init>(Ljava/util/stream/ReferencePipeline$7;Ljava/util/stream/Sink;)V
-HSPLjava/util/stream/ReferencePipeline$7$1;->accept(Ljava/lang/Object;)V+]Ljava/util/function/Function;missing_types]Ljava/util/stream/Stream;Ljava/util/stream/IntPipeline$4;,Ljava/util/stream/ReferencePipeline$Head;,Ljava/util/stream/ReferencePipeline$3;
+HSPLjava/util/stream/ReferencePipeline$7$1;->accept(Ljava/lang/Object;)V+]Ljava/util/stream/Stream;Ljava/util/stream/IntPipeline$4;,Ljava/util/stream/ReferencePipeline$Head;,Ljava/util/stream/ReferencePipeline$3;]Ljava/util/function/Function;missing_types
 HSPLjava/util/stream/ReferencePipeline$7$1;->begin(J)V
 HSPLjava/util/stream/ReferencePipeline$7;-><init>(Ljava/util/stream/ReferencePipeline;Ljava/util/stream/AbstractPipeline;Ljava/util/stream/StreamShape;ILjava/util/function/Function;)V
 HSPLjava/util/stream/ReferencePipeline$7;->opWrapSink(ILjava/util/stream/Sink;)Ljava/util/stream/Sink;
 HSPLjava/util/stream/ReferencePipeline$Head;-><init>(Ljava/util/Spliterator;IZ)V
-HSPLjava/util/stream/ReferencePipeline$Head;->forEach(Ljava/util/function/Consumer;)V
+HSPLjava/util/stream/ReferencePipeline$Head;->forEach(Ljava/util/function/Consumer;)V+]Ljava/util/Spliterator;Ljava/util/AbstractList$RandomAccessSpliterator;,Ljava/util/ArrayList$ArrayListSpliterator;,Ljava/util/stream/Streams$StreamBuilderImpl;]Ljava/util/stream/ReferencePipeline$Head;Ljava/util/stream/ReferencePipeline$Head;
 HSPLjava/util/stream/ReferencePipeline$StatefulOp;-><init>(Ljava/util/stream/AbstractPipeline;Ljava/util/stream/StreamShape;I)V
 HSPLjava/util/stream/ReferencePipeline$StatefulOp;->opIsStateful()Z
 HSPLjava/util/stream/ReferencePipeline$StatelessOp;-><init>(Ljava/util/stream/AbstractPipeline;Ljava/util/stream/StreamShape;I)V
@@ -30048,7 +30063,7 @@
 HSPLjava/util/stream/ReferencePipeline;-><init>(Ljava/util/stream/AbstractPipeline;I)V
 HSPLjava/util/stream/ReferencePipeline;->allMatch(Ljava/util/function/Predicate;)Z+]Ljava/util/stream/ReferencePipeline;Ljava/util/stream/ReferencePipeline$Head;]Ljava/lang/Boolean;Ljava/lang/Boolean;
 HSPLjava/util/stream/ReferencePipeline;->anyMatch(Ljava/util/function/Predicate;)Z
-HSPLjava/util/stream/ReferencePipeline;->collect(Ljava/util/stream/Collector;)Ljava/lang/Object;+]Ljava/util/stream/Collector;Ljava/util/stream/Collectors$CollectorImpl;]Ljava/util/stream/ReferencePipeline;Ljava/util/stream/IntPipeline$4;]Ljava/util/Set;Ljava/util/Collections$UnmodifiableSet;
+HSPLjava/util/stream/ReferencePipeline;->collect(Ljava/util/stream/Collector;)Ljava/lang/Object;+]Ljava/util/stream/Collector;Ljava/util/stream/Collectors$CollectorImpl;]Ljava/util/stream/ReferencePipeline;megamorphic_types]Ljava/util/Set;Ljava/util/Collections$UnmodifiableSet;,Ljava/util/Collections$EmptySet;]Ljava/util/function/Function;missing_types
 HSPLjava/util/stream/ReferencePipeline;->count()J
 HSPLjava/util/stream/ReferencePipeline;->distinct()Ljava/util/stream/Stream;
 HSPLjava/util/stream/ReferencePipeline;->filter(Ljava/util/function/Predicate;)Ljava/util/stream/Stream;
@@ -30056,7 +30071,7 @@
 HSPLjava/util/stream/ReferencePipeline;->findFirst()Ljava/util/Optional;+]Ljava/util/stream/ReferencePipeline;Ljava/util/stream/ReferencePipeline$2;
 HSPLjava/util/stream/ReferencePipeline;->flatMap(Ljava/util/function/Function;)Ljava/util/stream/Stream;
 HSPLjava/util/stream/ReferencePipeline;->forEach(Ljava/util/function/Consumer;)V
-HSPLjava/util/stream/ReferencePipeline;->forEachWithCancel(Ljava/util/Spliterator;Ljava/util/stream/Sink;)V+]Ljava/util/Spliterator;Ljava/util/Spliterators$ArraySpliterator;,Ljava/util/ArrayList$ArrayListSpliterator;]Ljava/util/stream/Sink;Ljava/util/stream/ReferencePipeline$2$1;,Ljava/util/stream/MatchOps$1MatchSink;
+HSPLjava/util/stream/ReferencePipeline;->forEachWithCancel(Ljava/util/Spliterator;Ljava/util/stream/Sink;)V+]Ljava/util/Spliterator;Ljava/util/AbstractList$RandomAccessSpliterator;,Ljava/util/ArrayList$ArrayListSpliterator;,Ljava/util/Spliterators$IteratorSpliterator;,Ljava/util/Spliterators$ArraySpliterator;]Ljava/util/stream/Sink;Ljava/util/stream/ReferencePipeline$3$1;,Ljava/util/stream/MatchOps$1MatchSink;,Ljava/util/stream/ReferencePipeline$2$1;
 HSPLjava/util/stream/ReferencePipeline;->lambda$count$2(Ljava/lang/Object;)J
 HSPLjava/util/stream/ReferencePipeline;->makeNodeBuilder(JLjava/util/function/IntFunction;)Ljava/util/stream/Node$Builder;
 HSPLjava/util/stream/ReferencePipeline;->map(Ljava/util/function/Function;)Ljava/util/stream/Stream;
@@ -30074,9 +30089,9 @@
 HSPLjava/util/stream/Sink$ChainedInt;->begin(J)V
 HSPLjava/util/stream/Sink$ChainedInt;->end()V
 HSPLjava/util/stream/Sink$ChainedReference;-><init>(Ljava/util/stream/Sink;)V
-HSPLjava/util/stream/Sink$ChainedReference;->begin(J)V
-HSPLjava/util/stream/Sink$ChainedReference;->cancellationRequested()Z+]Ljava/util/stream/Sink;Ljava/util/stream/FindOps$FindSink$OfRef;,Ljava/util/stream/ReferencePipeline$3$1;,Ljava/util/stream/ReferencePipeline$2$1;,Ljava/util/stream/MatchOps$1MatchSink;
-HSPLjava/util/stream/Sink$ChainedReference;->end()V+]Ljava/util/stream/Sink;Ljava/util/stream/Nodes$IntFixedNodeBuilder;
+HSPLjava/util/stream/Sink$ChainedReference;->begin(J)V+]Ljava/util/stream/Sink;Ljava/util/stream/ReduceOps$3ReducingSink;
+HSPLjava/util/stream/Sink$ChainedReference;->cancellationRequested()Z+]Ljava/util/stream/Sink;Ljava/util/stream/ReferencePipeline$2$1;,Ljava/util/stream/FindOps$FindSink$OfRef;,Ljava/util/stream/MatchOps$1MatchSink;,Ljava/util/stream/ReferencePipeline$3$1;
+HSPLjava/util/stream/Sink$ChainedReference;->end()V+]Ljava/util/stream/Sink;Ljava/util/stream/Nodes$IntFixedNodeBuilder;,Ljava/util/stream/FindOps$FindSink$OfRef;,Ljava/util/stream/ReferencePipeline$3$1;,Ljava/util/stream/ReduceOps$3ReducingSink;
 HSPLjava/util/stream/Sink;->begin(J)V
 HSPLjava/util/stream/Sink;->end()V
 HSPLjava/util/stream/SortedOps$AbstractRefSortingSink;-><init>(Ljava/util/stream/Sink;Ljava/util/Comparator;)V
@@ -30099,7 +30114,7 @@
 HSPLjava/util/stream/Stream;->concat(Ljava/util/stream/Stream;Ljava/util/stream/Stream;)Ljava/util/stream/Stream;
 HSPLjava/util/stream/Stream;->of([Ljava/lang/Object;)Ljava/util/stream/Stream;
 HSPLjava/util/stream/StreamOpFlag;->combineOpFlags(II)I
-HSPLjava/util/stream/StreamOpFlag;->fromCharacteristics(Ljava/util/Spliterator;)I
+HSPLjava/util/stream/StreamOpFlag;->fromCharacteristics(Ljava/util/Spliterator;)I+]Ljava/util/Spliterator;megamorphic_types
 HSPLjava/util/stream/StreamOpFlag;->getMask(I)I
 HSPLjava/util/stream/StreamOpFlag;->isKnown(I)Z
 HSPLjava/util/stream/StreamSupport;->intStream(Ljava/util/Spliterator$OfInt;Z)Ljava/util/stream/IntStream;
@@ -30112,7 +30127,7 @@
 HSPLjava/util/stream/Streams$RangeIntSpliterator;-><init>(IIZ)V
 HSPLjava/util/stream/Streams$RangeIntSpliterator;->characteristics()I
 HSPLjava/util/stream/Streams$RangeIntSpliterator;->estimateSize()J
-HSPLjava/util/stream/Streams$RangeIntSpliterator;->forEachRemaining(Ljava/util/function/IntConsumer;)V
+HSPLjava/util/stream/Streams$RangeIntSpliterator;->forEachRemaining(Ljava/util/function/IntConsumer;)V+]Ljava/util/function/IntConsumer;missing_types
 HSPLjava/util/stream/Streams$RangeIntSpliterator;->getComparator()Ljava/util/Comparator;
 HSPLjava/util/stream/Streams;->composedClose(Ljava/util/stream/BaseStream;Ljava/util/stream/BaseStream;)Ljava/lang/Runnable;
 HSPLjava/util/stream/TerminalOp;->getOpFlags()I
@@ -30131,10 +30146,10 @@
 HSPLjava/util/zip/CheckedInputStream;->read([BII)I
 HSPLjava/util/zip/Deflater;-><init>()V
 HSPLjava/util/zip/Deflater;-><init>(IZ)V
-HSPLjava/util/zip/Deflater;->deflate([BII)I
+HSPLjava/util/zip/Deflater;->deflate([BII)I+]Ljava/util/zip/Deflater;Ljava/util/zip/Deflater;
 HSPLjava/util/zip/Deflater;->deflate([BIII)I+]Ljava/util/zip/ZStreamRef;Ljava/util/zip/ZStreamRef;
 HSPLjava/util/zip/Deflater;->end()V
-HSPLjava/util/zip/Deflater;->ensureOpen()V
+HSPLjava/util/zip/Deflater;->ensureOpen()V+]Ljava/util/zip/ZStreamRef;Ljava/util/zip/ZStreamRef;
 HSPLjava/util/zip/Deflater;->finalize()V
 HSPLjava/util/zip/Deflater;->finish()V
 HSPLjava/util/zip/Deflater;->finished()Z
@@ -30149,16 +30164,16 @@
 HSPLjava/util/zip/DeflaterOutputStream;-><init>(Ljava/io/OutputStream;Ljava/util/zip/Deflater;IZ)V
 HSPLjava/util/zip/DeflaterOutputStream;-><init>(Ljava/io/OutputStream;Z)V
 HSPLjava/util/zip/DeflaterOutputStream;->close()V
-HSPLjava/util/zip/DeflaterOutputStream;->deflate()V
+HSPLjava/util/zip/DeflaterOutputStream;->deflate()V+]Ljava/util/zip/Deflater;Ljava/util/zip/Deflater;]Ljava/io/OutputStream;missing_types
 HSPLjava/util/zip/DeflaterOutputStream;->finish()V
 HSPLjava/util/zip/DeflaterOutputStream;->flush()V
-HSPLjava/util/zip/DeflaterOutputStream;->write([BII)V
+HSPLjava/util/zip/DeflaterOutputStream;->write([BII)V+]Ljava/util/zip/Deflater;Ljava/util/zip/Deflater;]Ljava/util/zip/DeflaterOutputStream;Ljava/util/zip/DeflaterOutputStream;,Ljava/util/zip/GZIPOutputStream;
 HSPLjava/util/zip/GZIPInputStream$1;-><init>(Ljava/util/zip/GZIPInputStream;Ljava/io/InputStream;)V
 HSPLjava/util/zip/GZIPInputStream;-><init>(Ljava/io/InputStream;)V
 HSPLjava/util/zip/GZIPInputStream;-><init>(Ljava/io/InputStream;I)V
 HSPLjava/util/zip/GZIPInputStream;->close()V
 HSPLjava/util/zip/GZIPInputStream;->ensureOpen()V
-HSPLjava/util/zip/GZIPInputStream;->read([BII)I
+HSPLjava/util/zip/GZIPInputStream;->read([BII)I+]Ljava/util/zip/CRC32;Ljava/util/zip/CRC32;
 HSPLjava/util/zip/GZIPInputStream;->readHeader(Ljava/io/InputStream;)I
 HSPLjava/util/zip/GZIPInputStream;->readTrailer()Z
 HSPLjava/util/zip/GZIPInputStream;->readUByte(Ljava/io/InputStream;)I
@@ -30194,9 +30209,9 @@
 HSPLjava/util/zip/InflaterInputStream;->available()I
 HSPLjava/util/zip/InflaterInputStream;->close()V
 HSPLjava/util/zip/InflaterInputStream;->ensureOpen()V
-HSPLjava/util/zip/InflaterInputStream;->fill()V+]Ljava/io/InputStream;Ljava/io/BufferedInputStream;,Ljava/io/ByteArrayInputStream;,Lcom/android/okhttp/okio/RealBufferedSource$1;,Ljava/io/PushbackInputStream;]Ljava/util/zip/Inflater;Ljava/util/zip/Inflater;
+HSPLjava/util/zip/InflaterInputStream;->fill()V+]Ljava/io/InputStream;Ljava/io/PushbackInputStream;,Ljava/io/BufferedInputStream;,Ljava/io/ByteArrayInputStream;,Lcom/android/okhttp/okio/RealBufferedSource$1;]Ljava/util/zip/Inflater;Ljava/util/zip/Inflater;
 HSPLjava/util/zip/InflaterInputStream;->read()I
-HSPLjava/util/zip/InflaterInputStream;->read([BII)I+]Ljava/util/zip/InflaterInputStream;Ljava/util/zip/GZIPInputStream;,Ljava/util/zip/ZipFile$ZipFileInflaterInputStream;,Ljava/util/zip/ZipInputStream;]Ljava/util/zip/Inflater;Ljava/util/zip/Inflater;
+HSPLjava/util/zip/InflaterInputStream;->read([BII)I+]Ljava/util/zip/InflaterInputStream;Ljava/util/zip/InflaterInputStream;,Ljava/util/zip/ZipInputStream;,Ljava/util/zip/GZIPInputStream;,Ljava/util/zip/ZipFile$ZipFileInflaterInputStream;]Ljava/util/zip/Inflater;Ljava/util/zip/Inflater;
 HSPLjava/util/zip/ZStreamRef;-><init>(J)V
 HSPLjava/util/zip/ZStreamRef;->address()J
 HSPLjava/util/zip/ZStreamRef;->clear()V
@@ -30232,7 +30247,7 @@
 HSPLjava/util/zip/ZipFile$ZipFileInputStream;->close()V
 HSPLjava/util/zip/ZipFile$ZipFileInputStream;->finalize()V
 HSPLjava/util/zip/ZipFile$ZipFileInputStream;->read()I
-HSPLjava/util/zip/ZipFile$ZipFileInputStream;->read([BII)I
+HSPLjava/util/zip/ZipFile$ZipFileInputStream;->read([BII)I+]Ljava/util/zip/ZipFile$ZipFileInputStream;Ljava/util/zip/ZipFile$ZipFileInputStream;
 HSPLjava/util/zip/ZipFile$ZipFileInputStream;->size()J
 HSPLjava/util/zip/ZipFile;->-$$Nest$mensureOpen(Ljava/util/zip/ZipFile;)V
 HSPLjava/util/zip/ZipFile;-><init>(Ljava/io/File;)V
@@ -30252,14 +30267,14 @@
 HSPLjava/util/zip/ZipInputStream;-><init>(Ljava/io/InputStream;)V
 HSPLjava/util/zip/ZipInputStream;-><init>(Ljava/io/InputStream;Ljava/nio/charset/Charset;)V
 HSPLjava/util/zip/ZipInputStream;->close()V
-HSPLjava/util/zip/ZipInputStream;->closeEntry()V
+HSPLjava/util/zip/ZipInputStream;->closeEntry()V+]Ljava/util/zip/ZipInputStream;Ljava/util/zip/ZipInputStream;
 HSPLjava/util/zip/ZipInputStream;->createZipEntry(Ljava/lang/String;)Ljava/util/zip/ZipEntry;
 HSPLjava/util/zip/ZipInputStream;->ensureOpen()V
 HSPLjava/util/zip/ZipInputStream;->getNextEntry()Ljava/util/zip/ZipEntry;+]Ljava/util/zip/CRC32;Ljava/util/zip/CRC32;]Ljava/util/zip/Inflater;Ljava/util/zip/Inflater;
 HSPLjava/util/zip/ZipInputStream;->read([BII)I+]Ljava/util/zip/CRC32;Ljava/util/zip/CRC32;]Ljava/io/InputStream;Ljava/io/PushbackInputStream;
 HSPLjava/util/zip/ZipInputStream;->readEnd(Ljava/util/zip/ZipEntry;)V+]Ljava/util/zip/CRC32;Ljava/util/zip/CRC32;]Ljava/io/PushbackInputStream;Ljava/io/PushbackInputStream;]Ljava/util/zip/Inflater;Ljava/util/zip/Inflater;
 HSPLjava/util/zip/ZipInputStream;->readFully([BII)V+]Ljava/io/InputStream;Ljava/io/PushbackInputStream;
-HSPLjava/util/zip/ZipInputStream;->readLOC()Ljava/util/zip/ZipEntry;+]Ljava/util/zip/ZipEntry;Ljava/util/zip/ZipEntry;]Ljava/util/zip/ZipInputStream;Ljava/util/zip/ZipInputStream;]Ljava/util/zip/ZipCoder;Ljava/util/zip/ZipCoder;
+HSPLjava/util/zip/ZipInputStream;->readLOC()Ljava/util/zip/ZipEntry;+]Ljava/util/zip/ZipInputStream;Ljava/util/zip/ZipInputStream;]Ljava/util/zip/ZipCoder;Ljava/util/zip/ZipCoder;]Ljava/util/zip/ZipEntry;Ljava/util/zip/ZipEntry;
 HSPLjava/util/zip/ZipUtils;->get16([BI)I
 HSPLjava/util/zip/ZipUtils;->get32([BI)J
 HSPLjava/util/zip/ZipUtils;->unixTimeToFileTime(J)Ljava/nio/file/attribute/FileTime;
@@ -30291,8 +30306,8 @@
 HSPLjavax/crypto/Cipher;->init(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V
 HSPLjavax/crypto/Cipher;->matchAttribute(Ljava/security/Provider$Service;Ljava/lang/String;Ljava/lang/String;)Z
 HSPLjavax/crypto/Cipher;->tokenizeTransformation(Ljava/lang/String;)[Ljava/lang/String;
-HSPLjavax/crypto/Cipher;->tryCombinations(Ljavax/crypto/Cipher$InitParams;Ljava/security/Provider;[Ljava/lang/String;)Ljavax/crypto/Cipher$CipherSpiAndProvider;
-HSPLjavax/crypto/Cipher;->tryTransformWithProvider(Ljavax/crypto/Cipher$InitParams;[Ljava/lang/String;Ljavax/crypto/Cipher$NeedToSet;Ljava/security/Provider$Service;)Ljavax/crypto/Cipher$CipherSpiAndProvider;
+HSPLjavax/crypto/Cipher;->tryCombinations(Ljavax/crypto/Cipher$InitParams;Ljava/security/Provider;[Ljava/lang/String;)Ljavax/crypto/Cipher$CipherSpiAndProvider;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/security/Provider$Service;Ljava/security/Provider$Service;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HSPLjavax/crypto/Cipher;->tryTransformWithProvider(Ljavax/crypto/Cipher$InitParams;[Ljava/lang/String;Ljavax/crypto/Cipher$NeedToSet;Ljava/security/Provider$Service;)Ljavax/crypto/Cipher$CipherSpiAndProvider;+]Ljava/security/Provider$Service;Ljava/security/Provider$Service;]Ljavax/crypto/Cipher$InitType;Ljavax/crypto/Cipher$InitType;
 HSPLjavax/crypto/Cipher;->unwrap([BLjava/lang/String;I)Ljava/security/Key;
 HSPLjavax/crypto/Cipher;->update([BII[BI)I+]Ljavax/crypto/Cipher;Ljavax/crypto/Cipher;]Ljavax/crypto/CipherSpi;missing_types
 HSPLjavax/crypto/Cipher;->updateAAD([B)V
@@ -30449,7 +30464,7 @@
 HSPLjavax/security/auth/x500/X500Principal;-><init>(Ljava/lang/String;Ljava/util/Map;)V
 HSPLjavax/security/auth/x500/X500Principal;-><init>(Lsun/security/x509/X500Name;)V
 HSPLjavax/security/auth/x500/X500Principal;-><init>([B)V
-HSPLjavax/security/auth/x500/X500Principal;->equals(Ljava/lang/Object;)Z
+HSPLjavax/security/auth/x500/X500Principal;->equals(Ljava/lang/Object;)Z+]Lsun/security/x509/X500Name;Lsun/security/x509/X500Name;
 HSPLjavax/security/auth/x500/X500Principal;->getEncoded()[B
 HSPLjavax/security/auth/x500/X500Principal;->getName()Ljava/lang/String;
 HSPLjavax/security/auth/x500/X500Principal;->getName(Ljava/lang/String;)Ljava/lang/String;
@@ -30514,7 +30529,7 @@
 HSPLjdk/internal/math/FloatingDecimal$BinaryToASCIIBuffer;->toJavaFormatString()Ljava/lang/String;
 HSPLjdk/internal/math/FloatingDecimal$PreparedASCIIToBinaryBuffer;->doubleValue()D
 HSPLjdk/internal/math/FloatingDecimal$PreparedASCIIToBinaryBuffer;->floatValue()F
-HSPLjdk/internal/math/FloatingDecimal;->appendTo(FLjava/lang/Appendable;)V
+HSPLjdk/internal/math/FloatingDecimal;->appendTo(FLjava/lang/Appendable;)V+]Ljdk/internal/math/FloatingDecimal$BinaryToASCIIConverter;Ljdk/internal/math/FloatingDecimal$BinaryToASCIIBuffer;
 HSPLjdk/internal/math/FloatingDecimal;->getBinaryToASCIIBuffer()Ljdk/internal/math/FloatingDecimal$BinaryToASCIIBuffer;+]Ljava/lang/ThreadLocal;Ljdk/internal/math/FloatingDecimal$1;
 HSPLjdk/internal/math/FloatingDecimal;->getBinaryToASCIIConverter(D)Ljdk/internal/math/FloatingDecimal$BinaryToASCIIConverter;
 HSPLjdk/internal/math/FloatingDecimal;->getBinaryToASCIIConverter(DZ)Ljdk/internal/math/FloatingDecimal$BinaryToASCIIConverter;
@@ -30522,8 +30537,8 @@
 HSPLjdk/internal/math/FloatingDecimal;->parseDouble(Ljava/lang/String;)D+]Ljdk/internal/math/FloatingDecimal$ASCIIToBinaryConverter;Ljdk/internal/math/FloatingDecimal$ASCIIToBinaryBuffer;
 HSPLjdk/internal/math/FloatingDecimal;->parseFloat(Ljava/lang/String;)F+]Ljdk/internal/math/FloatingDecimal$ASCIIToBinaryConverter;Ljdk/internal/math/FloatingDecimal$ASCIIToBinaryBuffer;
 HSPLjdk/internal/math/FloatingDecimal;->readJavaFormatString(Ljava/lang/String;)Ljdk/internal/math/FloatingDecimal$ASCIIToBinaryConverter;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HSPLjdk/internal/math/FloatingDecimal;->toJavaFormatString(D)Ljava/lang/String;
-HSPLjdk/internal/math/FloatingDecimal;->toJavaFormatString(F)Ljava/lang/String;
+HSPLjdk/internal/math/FloatingDecimal;->toJavaFormatString(D)Ljava/lang/String;+]Ljdk/internal/math/FloatingDecimal$BinaryToASCIIConverter;Ljdk/internal/math/FloatingDecimal$BinaryToASCIIBuffer;,Ljdk/internal/math/FloatingDecimal$ExceptionalBinaryToASCIIBuffer;
+HSPLjdk/internal/math/FloatingDecimal;->toJavaFormatString(F)Ljava/lang/String;+]Ljdk/internal/math/FloatingDecimal$BinaryToASCIIConverter;Ljdk/internal/math/FloatingDecimal$BinaryToASCIIBuffer;
 HSPLjdk/internal/math/FormattedFloatingDecimal$1;-><init>()V
 HSPLjdk/internal/math/FormattedFloatingDecimal$1;->initialValue()Ljava/lang/Object;
 HSPLjdk/internal/math/FormattedFloatingDecimal$2;-><clinit>()V
@@ -30605,7 +30620,7 @@
 HSPLlibcore/icu/ICU;->transformIcuDateTimePattern(Ljava/lang/String;)Ljava/lang/String;
 HSPLlibcore/icu/ICU;->transformIcuDateTimePattern_forJavaText(Ljava/lang/String;)Ljava/lang/String;
 HSPLlibcore/icu/LocaleData;->get(Ljava/util/Locale;)Llibcore/icu/LocaleData;
-HSPLlibcore/icu/LocaleData;->getCompatibleLocaleForBug159514442(Ljava/util/Locale;)Ljava/util/Locale;
+HSPLlibcore/icu/LocaleData;->getCompatibleLocaleForBug159514442(Ljava/util/Locale;)Ljava/util/Locale;+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;]Ljava/util/Locale;Ljava/util/Locale;
 HSPLlibcore/icu/LocaleData;->initLocaleData(Ljava/util/Locale;)Llibcore/icu/LocaleData;
 HSPLlibcore/icu/LocaleData;->initializeCalendarData(Ljava/util/Locale;)V
 HSPLlibcore/icu/LocaleData;->initializeDateFormatData(Ljava/util/Locale;)V
@@ -30617,7 +30632,7 @@
 HSPLlibcore/internal/StringPool;->contentEquals(Ljava/lang/String;[CII)Z
 HSPLlibcore/internal/StringPool;->get([CII)Ljava/lang/String;
 HSPLlibcore/io/BlockGuardOs;->accept(Ljava/io/FileDescriptor;Ljava/net/SocketAddress;)Ljava/io/FileDescriptor;
-HSPLlibcore/io/BlockGuardOs;->access(Ljava/lang/String;I)Z
+HSPLlibcore/io/BlockGuardOs;->access(Ljava/lang/String;I)Z+]Ldalvik/system/BlockGuard$VmPolicy;Landroid/os/StrictMode$5;,Ldalvik/system/BlockGuard$2;]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;,Landroid/os/StrictMode$AndroidBlockGuardPolicy;
 HSPLlibcore/io/BlockGuardOs;->android_getaddrinfo(Ljava/lang/String;Landroid/system/StructAddrinfo;I)[Ljava/net/InetAddress;
 HSPLlibcore/io/BlockGuardOs;->chmod(Ljava/lang/String;I)V
 HSPLlibcore/io/BlockGuardOs;->close(Ljava/io/FileDescriptor;)V
@@ -30636,7 +30651,7 @@
 HSPLlibcore/io/BlockGuardOs;->lseek(Ljava/io/FileDescriptor;JI)J
 HSPLlibcore/io/BlockGuardOs;->lstat(Ljava/lang/String;)Landroid/system/StructStat;
 HSPLlibcore/io/BlockGuardOs;->mkdir(Ljava/lang/String;I)V
-HSPLlibcore/io/BlockGuardOs;->open(Ljava/lang/String;II)Ljava/io/FileDescriptor;
+HSPLlibcore/io/BlockGuardOs;->open(Ljava/lang/String;II)Ljava/io/FileDescriptor;+]Ldalvik/system/BlockGuard$VmPolicy;Landroid/os/StrictMode$5;]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;
 HSPLlibcore/io/BlockGuardOs;->poll([Landroid/system/StructPollfd;I)I
 HSPLlibcore/io/BlockGuardOs;->posix_fallocate(Ljava/io/FileDescriptor;JJ)V
 HSPLlibcore/io/BlockGuardOs;->pread(Ljava/io/FileDescriptor;[BIIJ)I+]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;
@@ -30648,7 +30663,7 @@
 HSPLlibcore/io/BlockGuardOs;->sendto(Ljava/io/FileDescriptor;[BIIILjava/net/InetAddress;I)I
 HSPLlibcore/io/BlockGuardOs;->socket(III)Ljava/io/FileDescriptor;
 HSPLlibcore/io/BlockGuardOs;->socketpair(IIILjava/io/FileDescriptor;Ljava/io/FileDescriptor;)V
-HSPLlibcore/io/BlockGuardOs;->stat(Ljava/lang/String;)Landroid/system/StructStat;
+HSPLlibcore/io/BlockGuardOs;->stat(Ljava/lang/String;)Landroid/system/StructStat;+]Ldalvik/system/BlockGuard$VmPolicy;Landroid/os/StrictMode$5;]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;
 HSPLlibcore/io/BlockGuardOs;->statvfs(Ljava/lang/String;)Landroid/system/StructStatVfs;
 HSPLlibcore/io/BlockGuardOs;->tagSocket(Ljava/io/FileDescriptor;)Ljava/io/FileDescriptor;
 HSPLlibcore/io/BlockGuardOs;->write(Ljava/io/FileDescriptor;[BII)I+]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;,Landroid/os/StrictMode$AndroidBlockGuardPolicy;
@@ -30658,12 +30673,12 @@
 HSPLlibcore/io/ClassPathURLStreamHandler$ClassPathURLConnection;->connect()V
 HSPLlibcore/io/ClassPathURLStreamHandler$ClassPathURLConnection;->getInputStream()Ljava/io/InputStream;
 HSPLlibcore/io/ClassPathURLStreamHandler;-><init>(Ljava/lang/String;)V
-HSPLlibcore/io/ClassPathURLStreamHandler;->getEntryUrlOrNull(Ljava/lang/String;)Ljava/net/URL;
+HSPLlibcore/io/ClassPathURLStreamHandler;->getEntryUrlOrNull(Ljava/lang/String;)Ljava/net/URL;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/jar/JarFile;Ljava/util/jar/JarFile;
 HSPLlibcore/io/ClassPathURLStreamHandler;->isEntryStored(Ljava/lang/String;)Z
 HSPLlibcore/io/ClassPathURLStreamHandler;->openConnection(Ljava/net/URL;)Ljava/net/URLConnection;
 HSPLlibcore/io/ForwardingOs;-><init>(Llibcore/io/Os;)V
 HSPLlibcore/io/ForwardingOs;->accept(Ljava/io/FileDescriptor;Ljava/net/SocketAddress;)Ljava/io/FileDescriptor;
-HSPLlibcore/io/ForwardingOs;->access(Ljava/lang/String;I)Z
+HSPLlibcore/io/ForwardingOs;->access(Ljava/lang/String;I)Z+]Llibcore/io/Os;Llibcore/io/BlockGuardOs;,Llibcore/io/Linux;
 HSPLlibcore/io/ForwardingOs;->android_fdsan_exchange_owner_tag(Ljava/io/FileDescriptor;JJ)V
 HSPLlibcore/io/ForwardingOs;->android_getaddrinfo(Ljava/lang/String;Landroid/system/StructAddrinfo;I)[Ljava/net/InetAddress;
 HSPLlibcore/io/ForwardingOs;->bind(Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)V
@@ -30684,11 +30699,11 @@
 HSPLlibcore/io/ForwardingOs;->getnameinfo(Ljava/net/InetAddress;I)Ljava/lang/String;
 HSPLlibcore/io/ForwardingOs;->getpeername(Ljava/io/FileDescriptor;)Ljava/net/SocketAddress;
 HSPLlibcore/io/ForwardingOs;->getpgid(I)I
-HSPLlibcore/io/ForwardingOs;->getpid()I
+HSPLlibcore/io/ForwardingOs;->getpid()I+]Llibcore/io/Os;Llibcore/io/BlockGuardOs;,Llibcore/io/Linux;
 HSPLlibcore/io/ForwardingOs;->getsockname(Ljava/io/FileDescriptor;)Ljava/net/SocketAddress;
 HSPLlibcore/io/ForwardingOs;->getsockoptInt(Ljava/io/FileDescriptor;II)I
 HSPLlibcore/io/ForwardingOs;->getsockoptLinger(Ljava/io/FileDescriptor;II)Landroid/system/StructLinger;
-HSPLlibcore/io/ForwardingOs;->gettid()I
+HSPLlibcore/io/ForwardingOs;->gettid()I+]Llibcore/io/Os;Llibcore/io/BlockGuardOs;,Llibcore/io/Linux;
 HSPLlibcore/io/ForwardingOs;->getuid()I+]Llibcore/io/Os;Llibcore/io/BlockGuardOs;,Llibcore/io/Linux;
 HSPLlibcore/io/ForwardingOs;->getxattr(Ljava/lang/String;Ljava/lang/String;)[B
 HSPLlibcore/io/ForwardingOs;->if_nametoindex(Ljava/lang/String;)I
@@ -30718,7 +30733,7 @@
 HSPLlibcore/io/ForwardingOs;->shutdown(Ljava/io/FileDescriptor;I)V
 HSPLlibcore/io/ForwardingOs;->socket(III)Ljava/io/FileDescriptor;
 HSPLlibcore/io/ForwardingOs;->socketpair(IIILjava/io/FileDescriptor;Ljava/io/FileDescriptor;)V
-HSPLlibcore/io/ForwardingOs;->stat(Ljava/lang/String;)Landroid/system/StructStat;
+HSPLlibcore/io/ForwardingOs;->stat(Ljava/lang/String;)Landroid/system/StructStat;+]Llibcore/io/Os;Llibcore/io/BlockGuardOs;,Llibcore/io/Linux;
 HSPLlibcore/io/ForwardingOs;->statvfs(Ljava/lang/String;)Landroid/system/StructStatVfs;
 HSPLlibcore/io/ForwardingOs;->strerror(I)Ljava/lang/String;
 HSPLlibcore/io/ForwardingOs;->sysconf(I)J
@@ -30734,16 +30749,16 @@
 HSPLlibcore/io/IoBridge;->getSocketOption(Ljava/io/FileDescriptor;I)Ljava/lang/Object;
 HSPLlibcore/io/IoBridge;->getSocketOptionErrno(Ljava/io/FileDescriptor;I)Ljava/lang/Object;
 HSPLlibcore/io/IoBridge;->isConnected(Ljava/io/FileDescriptor;Ljava/net/InetAddress;III)Z
-HSPLlibcore/io/IoBridge;->open(Ljava/lang/String;I)Ljava/io/FileDescriptor;
+HSPLlibcore/io/IoBridge;->open(Ljava/lang/String;I)Ljava/io/FileDescriptor;+]Llibcore/io/Os;Landroid/app/ActivityThread$AndroidOs;
 HSPLlibcore/io/IoBridge;->poll(Ljava/io/FileDescriptor;II)V
-HSPLlibcore/io/IoBridge;->postRecvfrom(ZLjava/net/DatagramPacket;Ljava/net/InetSocketAddress;I)I
+HSPLlibcore/io/IoBridge;->postRecvfrom(ZLjava/net/DatagramPacket;Ljava/net/InetSocketAddress;I)I+]Ljava/net/DatagramPacket;Ljava/net/DatagramPacket;]Ljava/net/InetAddress;Ljava/net/Inet4Address;]Ljava/net/InetSocketAddress;Ljava/net/InetSocketAddress;
 HSPLlibcore/io/IoBridge;->read(Ljava/io/FileDescriptor;[BII)I+]Llibcore/io/Os;Landroid/app/ActivityThread$AndroidOs;
-HSPLlibcore/io/IoBridge;->recvfrom(ZLjava/io/FileDescriptor;[BIIILjava/net/DatagramPacket;Z)I
+HSPLlibcore/io/IoBridge;->recvfrom(ZLjava/io/FileDescriptor;[BIIILjava/net/DatagramPacket;Z)I+]Llibcore/io/Os;Landroid/app/ActivityThread$AndroidOs;
 HSPLlibcore/io/IoBridge;->sendto(Ljava/io/FileDescriptor;[BIIILjava/net/InetAddress;I)I
 HSPLlibcore/io/IoBridge;->setSocketOption(Ljava/io/FileDescriptor;ILjava/lang/Object;)V
 HSPLlibcore/io/IoBridge;->setSocketOptionErrno(Ljava/io/FileDescriptor;ILjava/lang/Object;)V
 HSPLlibcore/io/IoBridge;->socket(III)Ljava/io/FileDescriptor;
-HSPLlibcore/io/IoBridge;->write(Ljava/io/FileDescriptor;[BII)V+]Llibcore/io/Os;Landroid/app/ActivityThread$AndroidOs;
+HSPLlibcore/io/IoBridge;->write(Ljava/io/FileDescriptor;[BII)V+]Llibcore/io/Os;Landroid/app/ActivityThread$AndroidOs;]Landroid/system/ErrnoException;Landroid/system/ErrnoException;
 HSPLlibcore/io/IoTracker;-><init>()V
 HSPLlibcore/io/IoTracker;->reset()V
 HSPLlibcore/io/IoTracker;->trackIo(I)V+]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;,Landroid/os/StrictMode$AndroidBlockGuardPolicy;
@@ -30811,7 +30826,7 @@
 HSPLlibcore/reflect/GenericSignatureParser;->parseFieldTypeSignature()Ljava/lang/reflect/Type;
 HSPLlibcore/reflect/GenericSignatureParser;->parseForClass(Ljava/lang/reflect/GenericDeclaration;Ljava/lang/String;)V
 HSPLlibcore/reflect/GenericSignatureParser;->parseForConstructor(Ljava/lang/reflect/GenericDeclaration;Ljava/lang/String;[Ljava/lang/Class;)V+]Llibcore/reflect/GenericSignatureParser;Llibcore/reflect/GenericSignatureParser;]Ljava/lang/reflect/Constructor;Ljava/lang/reflect/Constructor;
-HSPLlibcore/reflect/GenericSignatureParser;->parseForField(Ljava/lang/reflect/GenericDeclaration;Ljava/lang/String;)V
+HSPLlibcore/reflect/GenericSignatureParser;->parseForField(Ljava/lang/reflect/GenericDeclaration;Ljava/lang/String;)V+]Llibcore/reflect/GenericSignatureParser;Llibcore/reflect/GenericSignatureParser;
 HSPLlibcore/reflect/GenericSignatureParser;->parseForMethod(Ljava/lang/reflect/GenericDeclaration;Ljava/lang/String;[Ljava/lang/Class;)V
 HSPLlibcore/reflect/GenericSignatureParser;->parseFormalTypeParameter()Llibcore/reflect/TypeVariableImpl;
 HSPLlibcore/reflect/GenericSignatureParser;->parseMethodTypeSignature([Ljava/lang/Class;)V
@@ -30834,8 +30849,8 @@
 HSPLlibcore/reflect/ListOfVariables;->add(Ljava/lang/reflect/TypeVariable;)V
 HSPLlibcore/reflect/ListOfVariables;->getArray()[Ljava/lang/reflect/TypeVariable;
 HSPLlibcore/reflect/ParameterizedTypeImpl;-><init>(Llibcore/reflect/ParameterizedTypeImpl;Ljava/lang/String;Llibcore/reflect/ListOfTypes;Ljava/lang/ClassLoader;)V
-HSPLlibcore/reflect/ParameterizedTypeImpl;->getActualTypeArguments()[Ljava/lang/reflect/Type;
-HSPLlibcore/reflect/ParameterizedTypeImpl;->getOwnerType()Ljava/lang/reflect/Type;
+HSPLlibcore/reflect/ParameterizedTypeImpl;->getActualTypeArguments()[Ljava/lang/reflect/Type;+]Llibcore/reflect/ListOfTypes;Llibcore/reflect/ListOfTypes;][Ljava/lang/reflect/Type;[Ljava/lang/reflect/Type;
+HSPLlibcore/reflect/ParameterizedTypeImpl;->getOwnerType()Ljava/lang/reflect/Type;+]Llibcore/reflect/ParameterizedTypeImpl;Llibcore/reflect/ParameterizedTypeImpl;]Ljava/lang/Class;Ljava/lang/Class;
 HSPLlibcore/reflect/ParameterizedTypeImpl;->getRawType()Ljava/lang/Class;
 HSPLlibcore/reflect/ParameterizedTypeImpl;->getRawType()Ljava/lang/reflect/Type;
 HSPLlibcore/reflect/ParameterizedTypeImpl;->getResolvedType()Ljava/lang/reflect/Type;
@@ -30857,7 +30872,7 @@
 HSPLlibcore/util/BasicLruCache;->create(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLlibcore/util/BasicLruCache;->entryEvicted(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLlibcore/util/BasicLruCache;->evictAll()V
-HSPLlibcore/util/BasicLruCache;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLlibcore/util/BasicLruCache;->get(Ljava/lang/Object;)Ljava/lang/Object;+]Llibcore/util/BasicLruCache;Llibcore/util/BasicLruCache;,Ljava/lang/Enum$1;]Ljava/util/LinkedHashMap;Ljava/util/LinkedHashMap;
 HSPLlibcore/util/BasicLruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLlibcore/util/BasicLruCache;->trimToSize(I)V
 HSPLlibcore/util/CollectionUtils;->removeDuplicates(Ljava/util/List;Ljava/util/Comparator;)V
@@ -30887,21 +30902,21 @@
 HSPLlibcore/util/NativeAllocationRegistry;->createNonmalloced(Ljava/lang/ClassLoader;JJ)Llibcore/util/NativeAllocationRegistry;
 HSPLlibcore/util/NativeAllocationRegistry;->registerNativeAllocation(J)V+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;
 HSPLlibcore/util/NativeAllocationRegistry;->registerNativeAllocation(Ljava/lang/Object;J)Ljava/lang/Runnable;+]Llibcore/util/NativeAllocationRegistry$CleanerThunk;Llibcore/util/NativeAllocationRegistry$CleanerThunk;
-HSPLlibcore/util/NativeAllocationRegistry;->registerNativeFree(J)V
+HSPLlibcore/util/NativeAllocationRegistry;->registerNativeFree(J)V+]Ldalvik/system/VMRuntime;Ldalvik/system/VMRuntime;
 HSPLlibcore/util/SneakyThrow;->sneakyThrow(Ljava/lang/Throwable;)V
 HSPLlibcore/util/SneakyThrow;->sneakyThrow_(Ljava/lang/Throwable;)V
 HSPLlibcore/util/XmlObjectFactory;->newXmlPullParser()Lorg/xmlpull/v1/XmlPullParser;
-HSPLlibcore/util/ZoneInfo;-><init>(Lcom/android/i18n/timezone/ZoneInfoData;IZ)V
+HSPLlibcore/util/ZoneInfo;-><init>(Lcom/android/i18n/timezone/ZoneInfoData;IZ)V+]Lcom/android/i18n/timezone/ZoneInfoData;Lcom/android/i18n/timezone/ZoneInfoData;]Llibcore/util/ZoneInfo;Llibcore/util/ZoneInfo;
 HSPLlibcore/util/ZoneInfo;->clone()Ljava/lang/Object;
 HSPLlibcore/util/ZoneInfo;->createZoneInfo(Lcom/android/i18n/timezone/ZoneInfoData;)Llibcore/util/ZoneInfo;
-HSPLlibcore/util/ZoneInfo;->createZoneInfo(Lcom/android/i18n/timezone/ZoneInfoData;J)Llibcore/util/ZoneInfo;
+HSPLlibcore/util/ZoneInfo;->createZoneInfo(Lcom/android/i18n/timezone/ZoneInfoData;J)Llibcore/util/ZoneInfo;+]Lcom/android/i18n/timezone/ZoneInfoData;Lcom/android/i18n/timezone/ZoneInfoData;]Ljava/lang/Integer;Ljava/lang/Integer;
 HSPLlibcore/util/ZoneInfo;->getDSTSavings()I
-HSPLlibcore/util/ZoneInfo;->getOffset(J)I
-HSPLlibcore/util/ZoneInfo;->getOffsetsByUtcTime(J[I)I
-HSPLlibcore/util/ZoneInfo;->getRawOffset()I
+HSPLlibcore/util/ZoneInfo;->getOffset(J)I+]Lcom/android/i18n/timezone/ZoneInfoData;Lcom/android/i18n/timezone/ZoneInfoData;
+HSPLlibcore/util/ZoneInfo;->getOffsetsByUtcTime(J[I)I+]Lcom/android/i18n/timezone/ZoneInfoData;Lcom/android/i18n/timezone/ZoneInfoData;
+HSPLlibcore/util/ZoneInfo;->getRawOffset()I+]Lcom/android/i18n/timezone/ZoneInfoData;Lcom/android/i18n/timezone/ZoneInfoData;
 HSPLlibcore/util/ZoneInfo;->hasSameRules(Ljava/util/TimeZone;)Z
 HSPLlibcore/util/ZoneInfo;->hashCode()I
-HSPLlibcore/util/ZoneInfo;->inDaylightTime(Ljava/util/Date;)Z
+HSPLlibcore/util/ZoneInfo;->inDaylightTime(Ljava/util/Date;)Z+]Ljava/util/Date;Ljava/util/Date;]Lcom/android/i18n/timezone/ZoneInfoData;Lcom/android/i18n/timezone/ZoneInfoData;
 HSPLorg/apache/harmony/dalvik/ddmc/Chunk;-><init>(ILjava/nio/ByteBuffer;)V
 HSPLorg/apache/harmony/dalvik/ddmc/Chunk;-><init>(I[BII)V
 HSPLorg/apache/harmony/dalvik/ddmc/DdmServer;->broadcast(I)V
@@ -31097,7 +31112,7 @@
 HSPLorg/json/JSONObject;->getJSONObject(Ljava/lang/String;)Lorg/json/JSONObject;
 HSPLorg/json/JSONObject;->getLong(Ljava/lang/String;)J
 HSPLorg/json/JSONObject;->getString(Ljava/lang/String;)Ljava/lang/String;
-HSPLorg/json/JSONObject;->has(Ljava/lang/String;)Z
+HSPLorg/json/JSONObject;->has(Ljava/lang/String;)Z+]Ljava/util/LinkedHashMap;Ljava/util/LinkedHashMap;
 HSPLorg/json/JSONObject;->isNull(Ljava/lang/String;)Z
 HSPLorg/json/JSONObject;->keys()Ljava/util/Iterator;
 HSPLorg/json/JSONObject;->length()I
@@ -31146,7 +31161,7 @@
 HSPLorg/json/JSONTokener;->nextCleanInternal()I
 HSPLorg/json/JSONTokener;->nextString(C)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLorg/json/JSONTokener;->nextToInternal(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
-HSPLorg/json/JSONTokener;->nextValue()Ljava/lang/Object;
+HSPLorg/json/JSONTokener;->nextValue()Ljava/lang/Object;+]Lorg/json/JSONTokener;Lorg/json/JSONTokener;
 HSPLorg/json/JSONTokener;->readArray()Lorg/json/JSONArray;
 HSPLorg/json/JSONTokener;->readEscapeCharacter()C
 HSPLorg/json/JSONTokener;->readLiteral()Ljava/lang/Object;+]Ljava/lang/String;Ljava/lang/String;
@@ -31187,14 +31202,14 @@
 HSPLsun/misc/ASCIICaseInsensitiveComparator;->toLower(I)I
 HSPLsun/misc/Cleaner;-><init>(Ljava/lang/Object;Ljava/lang/Runnable;)V
 HSPLsun/misc/Cleaner;->add(Lsun/misc/Cleaner;)Lsun/misc/Cleaner;
-HSPLsun/misc/Cleaner;->clean()V
+HSPLsun/misc/Cleaner;->clean()V+]Ljava/lang/Runnable;Landroid/graphics/HardwareRenderer$DestroyContextRunnable;,Llibcore/util/NativeAllocationRegistry$CleanerThunk;,Lsun/nio/fs/NativeBuffer$Deallocator;,Lsun/nio/ch/FileChannelImpl$Unmapper;,Landroid/view/autofill/AutofillManager$$ExternalSyntheticLambda0;
 HSPLsun/misc/Cleaner;->create(Ljava/lang/Object;Ljava/lang/Runnable;)Lsun/misc/Cleaner;
 HSPLsun/misc/Cleaner;->remove(Lsun/misc/Cleaner;)Z
 HSPLsun/misc/CompoundEnumeration;-><init>([Ljava/util/Enumeration;)V
 HSPLsun/misc/CompoundEnumeration;->hasMoreElements()Z
 HSPLsun/misc/CompoundEnumeration;->next()Z
 HSPLsun/misc/CompoundEnumeration;->nextElement()Ljava/lang/Object;
-HSPLsun/misc/IOUtils;->readFully(Ljava/io/InputStream;IZ)[B
+HSPLsun/misc/IOUtils;->readFully(Ljava/io/InputStream;IZ)[B+]Ljava/io/InputStream;Lsun/security/util/DerInputBuffer;,Ljava/io/ByteArrayInputStream;
 HSPLsun/misc/LRUCache;-><init>(I)V
 HSPLsun/misc/LRUCache;->forName(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLsun/misc/LRUCache;->moveToFront([Ljava/lang/Object;I)V
@@ -31205,8 +31220,8 @@
 HSPLsun/misc/Unsafe;->getAndSetInt(Ljava/lang/Object;JI)I
 HSPLsun/misc/Unsafe;->getAndSetLong(Ljava/lang/Object;JJ)J
 HSPLsun/misc/Unsafe;->getAndSetObject(Ljava/lang/Object;JLjava/lang/Object;)Ljava/lang/Object;
-HSPLsun/misc/Unsafe;->getUnsafe()Lsun/misc/Unsafe;
-HSPLsun/misc/Unsafe;->objectFieldOffset(Ljava/lang/reflect/Field;)J
+HSPLsun/misc/Unsafe;->getUnsafe()Lsun/misc/Unsafe;+]Ljava/lang/Class;Ljava/lang/Class;
+HSPLsun/misc/Unsafe;->objectFieldOffset(Ljava/lang/reflect/Field;)J+]Ljava/lang/reflect/Field;Ljava/lang/reflect/Field;
 HSPLsun/misc/VM;->isBooted()Z
 HSPLsun/net/NetHooks;->beforeTcpBind(Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)V
 HSPLsun/net/NetHooks;->beforeTcpConnect(Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)V
@@ -31244,25 +31259,25 @@
 HSPLsun/nio/ch/DefaultSelectorProvider;->create()Ljava/nio/channels/spi/SelectorProvider;
 HSPLsun/nio/ch/FileChannelImpl$Unmapper;-><init>(JJILjava/io/FileDescriptor;)V
 HSPLsun/nio/ch/FileChannelImpl$Unmapper;-><init>(JJILjava/io/FileDescriptor;Lsun/nio/ch/FileChannelImpl$Unmapper-IA;)V
-HSPLsun/nio/ch/FileChannelImpl$Unmapper;->run()V
-HSPLsun/nio/ch/FileChannelImpl;-><init>(Ljava/io/FileDescriptor;Ljava/lang/String;ZZZLjava/lang/Object;)V
+HSPLsun/nio/ch/FileChannelImpl$Unmapper;->run()V+]Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;
+HSPLsun/nio/ch/FileChannelImpl;-><init>(Ljava/io/FileDescriptor;Ljava/lang/String;ZZZLjava/lang/Object;)V+]Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;]Ldalvik/system/CloseGuard;Ldalvik/system/CloseGuard;
 HSPLsun/nio/ch/FileChannelImpl;->ensureOpen()V+]Lsun/nio/ch/FileChannelImpl;Lsun/nio/ch/FileChannelImpl;
-HSPLsun/nio/ch/FileChannelImpl;->fileLockTable()Lsun/nio/ch/FileLockTable;
+HSPLsun/nio/ch/FileChannelImpl;->fileLockTable()Lsun/nio/ch/FileLockTable;+]Lsun/nio/ch/NativeThreadSet;Lsun/nio/ch/NativeThreadSet;
 HSPLsun/nio/ch/FileChannelImpl;->finalize()V
 HSPLsun/nio/ch/FileChannelImpl;->force(Z)V
 HSPLsun/nio/ch/FileChannelImpl;->implCloseChannel()V
 HSPLsun/nio/ch/FileChannelImpl;->isSharedFileLockTable()Z
-HSPLsun/nio/ch/FileChannelImpl;->lock(JJZ)Ljava/nio/channels/FileLock;
-HSPLsun/nio/ch/FileChannelImpl;->map(Ljava/nio/channels/FileChannel$MapMode;JJ)Ljava/nio/MappedByteBuffer;
+HSPLsun/nio/ch/FileChannelImpl;->lock(JJZ)Ljava/nio/channels/FileLock;+]Lsun/nio/ch/FileDispatcher;Lsun/nio/ch/FileDispatcherImpl;]Lsun/nio/ch/NativeThreadSet;Lsun/nio/ch/NativeThreadSet;]Lsun/nio/ch/FileLockTable;Lsun/nio/ch/SharedFileLockTable;]Lsun/nio/ch/FileChannelImpl;Lsun/nio/ch/FileChannelImpl;
+HSPLsun/nio/ch/FileChannelImpl;->map(Ljava/nio/channels/FileChannel$MapMode;JJ)Ljava/nio/MappedByteBuffer;+]Lsun/nio/ch/NativeThreadSet;Lsun/nio/ch/NativeThreadSet;]Lsun/nio/ch/FileDispatcher;Lsun/nio/ch/FileDispatcherImpl;]Lsun/nio/ch/FileChannelImpl;Lsun/nio/ch/FileChannelImpl;]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;,Landroid/os/StrictMode$AndroidBlockGuardPolicy;
 HSPLsun/nio/ch/FileChannelImpl;->open(Ljava/io/FileDescriptor;Ljava/lang/String;ZZLjava/lang/Object;)Ljava/nio/channels/FileChannel;
 HSPLsun/nio/ch/FileChannelImpl;->open(Ljava/io/FileDescriptor;Ljava/lang/String;ZZZLjava/lang/Object;)Ljava/nio/channels/FileChannel;
 HSPLsun/nio/ch/FileChannelImpl;->position()J
 HSPLsun/nio/ch/FileChannelImpl;->position(J)Ljava/nio/channels/FileChannel;+]Lsun/nio/ch/NativeThreadSet;Lsun/nio/ch/NativeThreadSet;]Lsun/nio/ch/FileChannelImpl;Lsun/nio/ch/FileChannelImpl;]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;
 HSPLsun/nio/ch/FileChannelImpl;->read(Ljava/nio/ByteBuffer;)I
 HSPLsun/nio/ch/FileChannelImpl;->release(Lsun/nio/ch/FileLockImpl;)V
-HSPLsun/nio/ch/FileChannelImpl;->size()J
+HSPLsun/nio/ch/FileChannelImpl;->size()J+]Lsun/nio/ch/FileDispatcher;Lsun/nio/ch/FileDispatcherImpl;]Lsun/nio/ch/NativeThreadSet;Lsun/nio/ch/NativeThreadSet;]Lsun/nio/ch/FileChannelImpl;Lsun/nio/ch/FileChannelImpl;
 HSPLsun/nio/ch/FileChannelImpl;->tryLock(JJZ)Ljava/nio/channels/FileLock;
-HSPLsun/nio/ch/FileChannelImpl;->write(Ljava/nio/ByteBuffer;)I
+HSPLsun/nio/ch/FileChannelImpl;->write(Ljava/nio/ByteBuffer;)I+]Lsun/nio/ch/NativeThreadSet;Lsun/nio/ch/NativeThreadSet;]Lsun/nio/ch/FileChannelImpl;Lsun/nio/ch/FileChannelImpl;
 HSPLsun/nio/ch/FileDescriptorHolderSocketImpl;-><init>(Ljava/io/FileDescriptor;)V
 HSPLsun/nio/ch/FileDispatcher;-><init>()V
 HSPLsun/nio/ch/FileDispatcherImpl;-><init>(Z)V
@@ -31272,7 +31287,7 @@
 HSPLsun/nio/ch/FileDispatcherImpl;->lock(Ljava/io/FileDescriptor;ZJJZ)I
 HSPLsun/nio/ch/FileDispatcherImpl;->read(Ljava/io/FileDescriptor;JI)I
 HSPLsun/nio/ch/FileDispatcherImpl;->release(Ljava/io/FileDescriptor;JJ)V
-HSPLsun/nio/ch/FileDispatcherImpl;->size(Ljava/io/FileDescriptor;)J
+HSPLsun/nio/ch/FileDispatcherImpl;->size(Ljava/io/FileDescriptor;)J+]Ldalvik/system/BlockGuard$Policy;Ldalvik/system/BlockGuard$1;
 HSPLsun/nio/ch/FileDispatcherImpl;->truncate(Ljava/io/FileDescriptor;J)I
 HSPLsun/nio/ch/FileDispatcherImpl;->write(Ljava/io/FileDescriptor;JI)I
 HSPLsun/nio/ch/FileKey;-><init>()V
@@ -31288,8 +31303,8 @@
 HSPLsun/nio/ch/IOStatus;->normalize(I)I
 HSPLsun/nio/ch/IOStatus;->normalize(J)J
 HSPLsun/nio/ch/IOUtil;->newFD(I)Ljava/io/FileDescriptor;
-HSPLsun/nio/ch/IOUtil;->read(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;JLsun/nio/ch/NativeDispatcher;)I
-HSPLsun/nio/ch/IOUtil;->readIntoNativeBuffer(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;JLsun/nio/ch/NativeDispatcher;)I
+HSPLsun/nio/ch/IOUtil;->read(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;JLsun/nio/ch/NativeDispatcher;)I+]Ljava/nio/ByteBuffer;Ljava/nio/DirectByteBuffer;
+HSPLsun/nio/ch/IOUtil;->readIntoNativeBuffer(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;JLsun/nio/ch/NativeDispatcher;)I+]Lsun/nio/ch/NativeDispatcher;Lsun/nio/ch/FileDispatcherImpl;]Ljava/nio/ByteBuffer;Ljava/nio/DirectByteBuffer;]Lsun/nio/ch/DirectBuffer;Ljava/nio/DirectByteBuffer;
 HSPLsun/nio/ch/IOUtil;->write(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;JLsun/nio/ch/NativeDispatcher;)I
 HSPLsun/nio/ch/IOUtil;->writeFromNativeBuffer(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;JLsun/nio/ch/NativeDispatcher;)I
 HSPLsun/nio/ch/NativeDispatcher;-><init>()V
@@ -31344,7 +31359,7 @@
 HSPLsun/nio/ch/SharedFileLockTable$FileLockReference;-><init>(Ljava/nio/channels/FileLock;Ljava/lang/ref/ReferenceQueue;Lsun/nio/ch/FileKey;)V
 HSPLsun/nio/ch/SharedFileLockTable$FileLockReference;->fileKey()Lsun/nio/ch/FileKey;
 HSPLsun/nio/ch/SharedFileLockTable;-><init>(Ljava/nio/channels/Channel;Ljava/io/FileDescriptor;)V
-HSPLsun/nio/ch/SharedFileLockTable;->add(Ljava/nio/channels/FileLock;)V
+HSPLsun/nio/ch/SharedFileLockTable;->add(Ljava/nio/channels/FileLock;)V+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;
 HSPLsun/nio/ch/SharedFileLockTable;->checkList(Ljava/util/List;JJ)V
 HSPLsun/nio/ch/SharedFileLockTable;->remove(Ljava/nio/channels/FileLock;)V
 HSPLsun/nio/ch/SharedFileLockTable;->removeAll()Ljava/util/List;
@@ -31383,10 +31398,10 @@
 HSPLsun/nio/ch/Util$BufferCache;->removeFirst()Ljava/nio/ByteBuffer;
 HSPLsun/nio/ch/Util;->atBugLevel(Ljava/lang/String;)Z
 HSPLsun/nio/ch/Util;->free(Ljava/nio/ByteBuffer;)V
-HSPLsun/nio/ch/Util;->getTemporaryDirectBuffer(I)Ljava/nio/ByteBuffer;
+HSPLsun/nio/ch/Util;->getTemporaryDirectBuffer(I)Ljava/nio/ByteBuffer;+]Ljava/lang/ThreadLocal;Lsun/nio/ch/Util$1;]Lsun/nio/ch/Util$BufferCache;Lsun/nio/ch/Util$BufferCache;
 HSPLsun/nio/ch/Util;->isBufferTooLarge(I)Z
-HSPLsun/nio/ch/Util;->isBufferTooLarge(Ljava/nio/ByteBuffer;)Z
-HSPLsun/nio/ch/Util;->offerFirstTemporaryDirectBuffer(Ljava/nio/ByteBuffer;)V
+HSPLsun/nio/ch/Util;->isBufferTooLarge(Ljava/nio/ByteBuffer;)Z+]Ljava/nio/ByteBuffer;Ljava/nio/DirectByteBuffer;
+HSPLsun/nio/ch/Util;->offerFirstTemporaryDirectBuffer(Ljava/nio/ByteBuffer;)V+]Ljava/lang/ThreadLocal;Lsun/nio/ch/Util$1;]Lsun/nio/ch/Util$BufferCache;Lsun/nio/ch/Util$BufferCache;
 HSPLsun/nio/ch/Util;->ungrowableSet(Ljava/util/Set;)Ljava/util/Set;
 HSPLsun/nio/cs/StreamDecoder;-><init>(Ljava/io/InputStream;Ljava/lang/Object;Ljava/nio/charset/Charset;)V
 HSPLsun/nio/cs/StreamDecoder;-><init>(Ljava/io/InputStream;Ljava/lang/Object;Ljava/nio/charset/CharsetDecoder;)V
@@ -31396,35 +31411,35 @@
 HSPLsun/nio/cs/StreamDecoder;->forInputStreamReader(Ljava/io/InputStream;Ljava/lang/Object;Ljava/nio/charset/Charset;)Lsun/nio/cs/StreamDecoder;
 HSPLsun/nio/cs/StreamDecoder;->forInputStreamReader(Ljava/io/InputStream;Ljava/lang/Object;Ljava/nio/charset/CharsetDecoder;)Lsun/nio/cs/StreamDecoder;
 HSPLsun/nio/cs/StreamDecoder;->implClose()V
-HSPLsun/nio/cs/StreamDecoder;->implRead([CII)I
+HSPLsun/nio/cs/StreamDecoder;->implRead([CII)I+]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;]Ljava/nio/charset/CoderResult;Ljava/nio/charset/CoderResult;]Ljava/nio/charset/CharsetDecoder;Lcom/android/icu/charset/CharsetDecoderICU;
 HSPLsun/nio/cs/StreamDecoder;->implReady()Z
 HSPLsun/nio/cs/StreamDecoder;->inReady()Z
 HSPLsun/nio/cs/StreamDecoder;->read()I
 HSPLsun/nio/cs/StreamDecoder;->read([CII)I
 HSPLsun/nio/cs/StreamDecoder;->read0()I
-HSPLsun/nio/cs/StreamDecoder;->readBytes()I
+HSPLsun/nio/cs/StreamDecoder;->readBytes()I+]Ljava/io/InputStream;Ljava/io/BufferedInputStream;,Ljava/io/FileInputStream;,Ljava/util/zip/GZIPInputStream;,Landroid/os/ParcelFileDescriptor$AutoCloseInputStream;]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLsun/nio/cs/StreamDecoder;->ready()Z
 HSPLsun/nio/cs/StreamEncoder;-><init>(Ljava/io/OutputStream;Ljava/lang/Object;Ljava/nio/charset/Charset;)V
 HSPLsun/nio/cs/StreamEncoder;-><init>(Ljava/io/OutputStream;Ljava/lang/Object;Ljava/nio/charset/CharsetEncoder;)V
 HSPLsun/nio/cs/StreamEncoder;->close()V
 HSPLsun/nio/cs/StreamEncoder;->ensureOpen()V
-HSPLsun/nio/cs/StreamEncoder;->flush()V
+HSPLsun/nio/cs/StreamEncoder;->flush()V+]Lsun/nio/cs/StreamEncoder;Lsun/nio/cs/StreamEncoder;
 HSPLsun/nio/cs/StreamEncoder;->flushLeftoverChar(Ljava/nio/CharBuffer;Z)V
 HSPLsun/nio/cs/StreamEncoder;->forOutputStreamWriter(Ljava/io/OutputStream;Ljava/lang/Object;Ljava/lang/String;)Lsun/nio/cs/StreamEncoder;
 HSPLsun/nio/cs/StreamEncoder;->forOutputStreamWriter(Ljava/io/OutputStream;Ljava/lang/Object;Ljava/nio/charset/Charset;)Lsun/nio/cs/StreamEncoder;
 HSPLsun/nio/cs/StreamEncoder;->implClose()V
 HSPLsun/nio/cs/StreamEncoder;->implFlush()V
-HSPLsun/nio/cs/StreamEncoder;->implFlushBuffer()V
-HSPLsun/nio/cs/StreamEncoder;->implWrite([CII)V
+HSPLsun/nio/cs/StreamEncoder;->implFlushBuffer()V+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
+HSPLsun/nio/cs/StreamEncoder;->implWrite([CII)V+]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;]Ljava/nio/charset/CharsetEncoder;Lcom/android/icu/charset/CharsetEncoderICU;]Ljava/nio/charset/CoderResult;Ljava/nio/charset/CoderResult;
 HSPLsun/nio/cs/StreamEncoder;->write(I)V
 HSPLsun/nio/cs/StreamEncoder;->write(Ljava/lang/String;II)V
-HSPLsun/nio/cs/StreamEncoder;->write([CII)V
-HSPLsun/nio/cs/StreamEncoder;->writeBytes()V
+HSPLsun/nio/cs/StreamEncoder;->write([CII)V+]Lsun/nio/cs/StreamEncoder;Lsun/nio/cs/StreamEncoder;
+HSPLsun/nio/cs/StreamEncoder;->writeBytes()V+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;]Ljava/io/OutputStream;Ljava/util/logging/FileHandler$MeteredStream;,Ljava/io/FileOutputStream;
 HSPLsun/nio/cs/ThreadLocalCoders$1;->create(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLsun/nio/cs/ThreadLocalCoders$1;->hasName(Ljava/lang/Object;Ljava/lang/Object;)Z
 HSPLsun/nio/cs/ThreadLocalCoders$2;->create(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLsun/nio/cs/ThreadLocalCoders$2;->hasName(Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLsun/nio/cs/ThreadLocalCoders$Cache;->forName(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLsun/nio/cs/ThreadLocalCoders$Cache;->forName(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;]Lsun/nio/cs/ThreadLocalCoders$Cache;Lsun/nio/cs/ThreadLocalCoders$1;
 HSPLsun/nio/cs/ThreadLocalCoders$Cache;->moveToFront([Ljava/lang/Object;I)V
 HSPLsun/nio/cs/ThreadLocalCoders;->decoderFor(Ljava/lang/Object;)Ljava/nio/charset/CharsetDecoder;
 HSPLsun/nio/cs/ThreadLocalCoders;->encoderFor(Ljava/lang/Object;)Ljava/nio/charset/CharsetEncoder;
@@ -31444,8 +31459,8 @@
 HSPLsun/nio/fs/NativeBuffer;->size()I
 HSPLsun/nio/fs/NativeBuffers;->allocNativeBuffer(I)Lsun/nio/fs/NativeBuffer;
 HSPLsun/nio/fs/NativeBuffers;->copyCStringToNativeBuffer([BLsun/nio/fs/NativeBuffer;)V+]Lsun/nio/fs/NativeBuffer;Lsun/nio/fs/NativeBuffer;]Lsun/misc/Unsafe;Lsun/misc/Unsafe;
-HSPLsun/nio/fs/NativeBuffers;->getNativeBufferFromCache(I)Lsun/nio/fs/NativeBuffer;
-HSPLsun/nio/fs/NativeBuffers;->releaseNativeBuffer(Lsun/nio/fs/NativeBuffer;)V
+HSPLsun/nio/fs/NativeBuffers;->getNativeBufferFromCache(I)Lsun/nio/fs/NativeBuffer;+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;]Lsun/nio/fs/NativeBuffer;Lsun/nio/fs/NativeBuffer;
+HSPLsun/nio/fs/NativeBuffers;->releaseNativeBuffer(Lsun/nio/fs/NativeBuffer;)V+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;
 HSPLsun/nio/fs/UnixChannelFactory$1;-><clinit>()V
 HSPLsun/nio/fs/UnixChannelFactory$Flags;-><init>()V
 HSPLsun/nio/fs/UnixChannelFactory$Flags;->toFlags(Ljava/util/Set;)Lsun/nio/fs/UnixChannelFactory$Flags;
@@ -31456,7 +31471,7 @@
 HSPLsun/nio/fs/UnixDirectoryStream$UnixDirectoryIterator;-><init>(Lsun/nio/fs/UnixDirectoryStream;Ljava/nio/file/DirectoryStream;)V
 HSPLsun/nio/fs/UnixDirectoryStream$UnixDirectoryIterator;->hasNext()Z
 HSPLsun/nio/fs/UnixDirectoryStream$UnixDirectoryIterator;->isSelfOrParent([B)Z
-HSPLsun/nio/fs/UnixDirectoryStream$UnixDirectoryIterator;->readNextEntry()Ljava/nio/file/Path;
+HSPLsun/nio/fs/UnixDirectoryStream$UnixDirectoryIterator;->readNextEntry()Ljava/nio/file/Path;+]Lsun/nio/fs/UnixDirectoryStream;Lsun/nio/fs/UnixDirectoryStream;]Lsun/nio/fs/UnixPath;Lsun/nio/fs/UnixPath;]Ljava/nio/file/DirectoryStream$Filter;Ljava/nio/file/Files$AcceptAllFilter;]Ljava/util/concurrent/locks/Lock;Ljava/util/concurrent/locks/ReentrantReadWriteLock$ReadLock;
 HSPLsun/nio/fs/UnixDirectoryStream;->-$$Nest$fgetdp(Lsun/nio/fs/UnixDirectoryStream;)J
 HSPLsun/nio/fs/UnixDirectoryStream;-><init>(Lsun/nio/fs/UnixPath;JLjava/nio/file/DirectoryStream$Filter;)V
 HSPLsun/nio/fs/UnixDirectoryStream;->close()V
@@ -31472,7 +31487,7 @@
 HSPLsun/nio/fs/UnixException;->rethrowAsIOException(Lsun/nio/fs/UnixPath;Lsun/nio/fs/UnixPath;)V
 HSPLsun/nio/fs/UnixException;->translateToIOException(Ljava/lang/String;Ljava/lang/String;)Ljava/io/IOException;
 HSPLsun/nio/fs/UnixFileAttributeViews$Basic;-><init>(Lsun/nio/fs/UnixPath;Z)V
-HSPLsun/nio/fs/UnixFileAttributeViews$Basic;->readAttributes()Ljava/nio/file/attribute/BasicFileAttributes;
+HSPLsun/nio/fs/UnixFileAttributeViews$Basic;->readAttributes()Ljava/nio/file/attribute/BasicFileAttributes;+]Lsun/nio/fs/UnixPath;Lsun/nio/fs/UnixPath;]Lsun/nio/fs/UnixFileAttributes;Lsun/nio/fs/UnixFileAttributes;
 HSPLsun/nio/fs/UnixFileAttributeViews;->createBasicView(Lsun/nio/fs/UnixPath;Z)Lsun/nio/fs/UnixFileAttributeViews$Basic;
 HSPLsun/nio/fs/UnixFileAttributes$UnixAsBasicFileAttributes;-><init>(Lsun/nio/fs/UnixFileAttributes;)V
 HSPLsun/nio/fs/UnixFileAttributes$UnixAsBasicFileAttributes;->creationTime()Ljava/nio/file/attribute/FileTime;
@@ -31506,9 +31521,9 @@
 HSPLsun/nio/fs/UnixFileSystemProvider;->newByteChannel(Ljava/nio/file/Path;Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/SeekableByteChannel;
 HSPLsun/nio/fs/UnixFileSystemProvider;->newDirectoryStream(Ljava/nio/file/Path;Ljava/nio/file/DirectoryStream$Filter;)Ljava/nio/file/DirectoryStream;
 HSPLsun/nio/fs/UnixFileSystemProvider;->newFileChannel(Ljava/nio/file/Path;Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/FileChannel;
-HSPLsun/nio/fs/UnixFileSystemProvider;->readAttributes(Ljava/nio/file/Path;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/BasicFileAttributes;
+HSPLsun/nio/fs/UnixFileSystemProvider;->readAttributes(Ljava/nio/file/Path;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/BasicFileAttributes;+]Ljava/nio/file/attribute/BasicFileAttributeView;Lsun/nio/fs/UnixFileAttributeViews$Basic;]Lsun/nio/fs/UnixFileSystemProvider;Lsun/nio/fs/LinuxFileSystemProvider;
 HSPLsun/nio/fs/UnixNativeDispatcher;->access(Lsun/nio/fs/UnixPath;I)V
-HSPLsun/nio/fs/UnixNativeDispatcher;->copyToNativeBuffer(Lsun/nio/fs/UnixPath;)Lsun/nio/fs/NativeBuffer;
+HSPLsun/nio/fs/UnixNativeDispatcher;->copyToNativeBuffer(Lsun/nio/fs/UnixPath;)Lsun/nio/fs/NativeBuffer;+]Lsun/nio/fs/UnixPath;Lsun/nio/fs/UnixPath;]Lsun/nio/fs/NativeBuffer;Lsun/nio/fs/NativeBuffer;
 HSPLsun/nio/fs/UnixNativeDispatcher;->lstat(Lsun/nio/fs/UnixPath;Lsun/nio/fs/UnixFileAttributes;)V
 HSPLsun/nio/fs/UnixNativeDispatcher;->open(Lsun/nio/fs/UnixPath;II)I
 HSPLsun/nio/fs/UnixNativeDispatcher;->openatSupported()Z
@@ -31519,8 +31534,8 @@
 HSPLsun/nio/fs/UnixPath;->checkNotNul(Ljava/lang/String;C)V
 HSPLsun/nio/fs/UnixPath;->checkRead()V
 HSPLsun/nio/fs/UnixPath;->checkWrite()V
-HSPLsun/nio/fs/UnixPath;->encode(Lsun/nio/fs/UnixFileSystem;Ljava/lang/String;)[B
-HSPLsun/nio/fs/UnixPath;->getByteArrayForSysCalls()[B
+HSPLsun/nio/fs/UnixPath;->encode(Lsun/nio/fs/UnixFileSystem;Ljava/lang/String;)[B+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/ref/SoftReference;Ljava/lang/ref/SoftReference;]Ljava/nio/charset/Charset;Lcom/android/icu/charset/CharsetICU;]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;]Ljava/nio/charset/CharsetEncoder;Lcom/android/icu/charset/CharsetEncoderICU;]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal;]Lsun/nio/fs/UnixFileSystem;Lsun/nio/fs/LinuxFileSystem;]Ljava/nio/charset/CoderResult;Ljava/nio/charset/CoderResult;
+HSPLsun/nio/fs/UnixPath;->getByteArrayForSysCalls()[B+]Lsun/nio/fs/UnixPath;Lsun/nio/fs/UnixPath;]Lsun/nio/fs/UnixFileSystem;Lsun/nio/fs/LinuxFileSystem;
 HSPLsun/nio/fs/UnixPath;->getFileSystem()Ljava/nio/file/FileSystem;
 HSPLsun/nio/fs/UnixPath;->getFileSystem()Lsun/nio/fs/UnixFileSystem;
 HSPLsun/nio/fs/UnixPath;->getParent()Ljava/nio/file/Path;
@@ -31556,11 +31571,11 @@
 HSPLsun/security/jca/GetInstance$Instance;-><init>(Ljava/security/Provider;Ljava/lang/Object;Lsun/security/jca/GetInstance$Instance-IA;)V
 HSPLsun/security/jca/GetInstance$Instance;->toArray()[Ljava/lang/Object;
 HSPLsun/security/jca/GetInstance;->checkSuperClass(Ljava/security/Provider$Service;Ljava/lang/Class;Ljava/lang/Class;)V
-HSPLsun/security/jca/GetInstance;->getInstance(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;)Lsun/security/jca/GetInstance$Instance;
+HSPLsun/security/jca/GetInstance;->getInstance(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;)Lsun/security/jca/GetInstance$Instance;+]Lsun/security/jca/ProviderList;Lsun/security/jca/ProviderList;
 HSPLsun/security/jca/GetInstance;->getInstance(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;)Lsun/security/jca/GetInstance$Instance;
 HSPLsun/security/jca/GetInstance;->getInstance(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;)Lsun/security/jca/GetInstance$Instance;
 HSPLsun/security/jca/GetInstance;->getInstance(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;Ljava/security/Provider;)Lsun/security/jca/GetInstance$Instance;
-HSPLsun/security/jca/GetInstance;->getInstance(Ljava/security/Provider$Service;Ljava/lang/Class;)Lsun/security/jca/GetInstance$Instance;
+HSPLsun/security/jca/GetInstance;->getInstance(Ljava/security/Provider$Service;Ljava/lang/Class;)Lsun/security/jca/GetInstance$Instance;+]Ljava/security/Provider$Service;Ljava/security/Provider$Service;]Ljava/lang/Object;missing_types
 HSPLsun/security/jca/GetInstance;->getInstance(Ljava/security/Provider$Service;Ljava/lang/Class;Ljava/lang/Object;)Lsun/security/jca/GetInstance$Instance;
 HSPLsun/security/jca/GetInstance;->getService(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/security/Provider$Service;
 HSPLsun/security/jca/GetInstance;->getService(Ljava/lang/String;Ljava/lang/String;Ljava/security/Provider;)Ljava/security/Provider$Service;
@@ -31591,7 +31606,7 @@
 HSPLsun/security/jca/ProviderList;->getProvider(I)Ljava/security/Provider;+]Lsun/security/jca/ProviderConfig;Lsun/security/jca/ProviderConfig;
 HSPLsun/security/jca/ProviderList;->getProvider(Ljava/lang/String;)Ljava/security/Provider;
 HSPLsun/security/jca/ProviderList;->getProviderConfig(Ljava/lang/String;)Lsun/security/jca/ProviderConfig;
-HSPLsun/security/jca/ProviderList;->getService(Ljava/lang/String;Ljava/lang/String;)Ljava/security/Provider$Service;
+HSPLsun/security/jca/ProviderList;->getService(Ljava/lang/String;Ljava/lang/String;)Ljava/security/Provider$Service;+]Lsun/security/jca/ProviderList;Lsun/security/jca/ProviderList;]Ljava/security/Provider;missing_types
 HSPLsun/security/jca/ProviderList;->getServices(Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
 HSPLsun/security/jca/ProviderList;->insertAt(Lsun/security/jca/ProviderList;Ljava/security/Provider;I)Lsun/security/jca/ProviderList;
 HSPLsun/security/jca/ProviderList;->loadAll()I
@@ -31653,7 +31668,7 @@
 HSPLsun/security/provider/certpath/AlgorithmChecker;-><init>(Ljava/security/cert/TrustAnchor;)V
 HSPLsun/security/provider/certpath/AlgorithmChecker;-><init>(Ljava/security/cert/TrustAnchor;Ljava/security/AlgorithmConstraints;)V
 HSPLsun/security/provider/certpath/AlgorithmChecker;->check(Ljava/security/PublicKey;Lsun/security/x509/AlgorithmId;)V
-HSPLsun/security/provider/certpath/AlgorithmChecker;->check(Ljava/security/cert/Certificate;Ljava/util/Collection;)V
+HSPLsun/security/provider/certpath/AlgorithmChecker;->check(Ljava/security/cert/Certificate;Ljava/util/Collection;)V+]Lsun/security/x509/X509CertImpl;Lsun/security/x509/X509CertImpl;]Lsun/security/x509/AlgorithmId;Lsun/security/x509/AlgorithmId;]Lsun/security/util/DisabledAlgorithmConstraints;Lsun/security/util/DisabledAlgorithmConstraints;]Ljava/security/AlgorithmConstraints;Lsun/security/util/DisabledAlgorithmConstraints;]Ljava/util/Set;Ljava/util/RegularEnumSet;
 HSPLsun/security/provider/certpath/AlgorithmChecker;->checkFingerprint(Ljava/security/cert/X509Certificate;)Z
 HSPLsun/security/provider/certpath/AlgorithmChecker;->init(Z)V
 HSPLsun/security/provider/certpath/BasicChecker;-><init>(Ljava/security/cert/TrustAnchor;Ljava/util/Date;Ljava/lang/String;Z)V
@@ -31680,7 +31695,7 @@
 HSPLsun/security/provider/certpath/ConstraintsChecker;->mergeNameConstraints(Ljava/security/cert/X509Certificate;Lsun/security/x509/NameConstraintsExtension;)Lsun/security/x509/NameConstraintsExtension;
 HSPLsun/security/provider/certpath/ConstraintsChecker;->verifyNameConstraints(Ljava/security/cert/X509Certificate;)V
 HSPLsun/security/provider/certpath/KeyChecker;-><init>(ILjava/security/cert/CertSelector;)V
-HSPLsun/security/provider/certpath/KeyChecker;->check(Ljava/security/cert/Certificate;Ljava/util/Collection;)V
+HSPLsun/security/provider/certpath/KeyChecker;->check(Ljava/security/cert/Certificate;Ljava/util/Collection;)V+]Lsun/security/util/ObjectIdentifier;Lsun/security/util/ObjectIdentifier;]Ljava/util/Collection;Ljava/util/HashSet;
 HSPLsun/security/provider/certpath/KeyChecker;->init(Z)V
 HSPLsun/security/provider/certpath/KeyChecker;->verifyCAKeyUsage(Ljava/security/cert/X509Certificate;)V
 HSPLsun/security/provider/certpath/OCSPResponse$SingleResponse;-><init>(Lsun/security/util/DerValue;)V
@@ -31711,9 +31726,9 @@
 HSPLsun/security/provider/certpath/PKIXCertPathValidator;-><init>()V
 HSPLsun/security/provider/certpath/PKIXCertPathValidator;->engineGetRevocationChecker()Ljava/security/cert/CertPathChecker;
 HSPLsun/security/provider/certpath/PKIXCertPathValidator;->engineValidate(Ljava/security/cert/CertPath;Ljava/security/cert/CertPathParameters;)Ljava/security/cert/CertPathValidatorResult;
-HSPLsun/security/provider/certpath/PKIXCertPathValidator;->validate(Ljava/security/cert/TrustAnchor;Lsun/security/provider/certpath/PKIX$ValidatorParams;)Ljava/security/cert/PKIXCertPathValidatorResult;
+HSPLsun/security/provider/certpath/PKIXCertPathValidator;->validate(Ljava/security/cert/TrustAnchor;Lsun/security/provider/certpath/PKIX$ValidatorParams;)Ljava/security/cert/PKIXCertPathValidatorResult;+]Lsun/security/provider/certpath/PKIX$ValidatorParams;Lsun/security/provider/certpath/PKIX$ValidatorParams;]Lsun/security/provider/certpath/BasicChecker;Lsun/security/provider/certpath/BasicChecker;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;,Ljava/util/ArrayList;]Lsun/security/provider/certpath/PolicyChecker;Lsun/security/provider/certpath/PolicyChecker;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;
 HSPLsun/security/provider/certpath/PKIXCertPathValidator;->validate(Lsun/security/provider/certpath/PKIX$ValidatorParams;)Ljava/security/cert/PKIXCertPathValidatorResult;
-HSPLsun/security/provider/certpath/PKIXMasterCertPathValidator;->validate(Ljava/security/cert/CertPath;Ljava/util/List;Ljava/util/List;)V
+HSPLsun/security/provider/certpath/PKIXMasterCertPathValidator;->validate(Ljava/security/cert/CertPath;Ljava/util/List;Ljava/util/List;)V+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/security/cert/PKIXCertPathChecker;megamorphic_types]Ljava/util/Set;Ljava/util/HashSet;
 HSPLsun/security/provider/certpath/PolicyChecker;-><init>(Ljava/util/Set;IZZZZLsun/security/provider/certpath/PolicyNodeImpl;)V
 HSPLsun/security/provider/certpath/PolicyChecker;->check(Ljava/security/cert/Certificate;Ljava/util/Collection;)V
 HSPLsun/security/provider/certpath/PolicyChecker;->checkPolicy(Ljava/security/cert/X509Certificate;)V
@@ -31722,10 +31737,10 @@
 HSPLsun/security/provider/certpath/PolicyChecker;->mergeExplicitPolicy(ILsun/security/x509/X509CertImpl;Z)I
 HSPLsun/security/provider/certpath/PolicyChecker;->mergeInhibitAnyPolicy(ILsun/security/x509/X509CertImpl;)I
 HSPLsun/security/provider/certpath/PolicyChecker;->mergePolicyMapping(ILsun/security/x509/X509CertImpl;)I
-HSPLsun/security/provider/certpath/PolicyChecker;->processParents(IZZLsun/security/provider/certpath/PolicyNodeImpl;Ljava/lang/String;Ljava/util/Set;Z)Z
-HSPLsun/security/provider/certpath/PolicyChecker;->processPolicies(ILjava/util/Set;IIIZLsun/security/provider/certpath/PolicyNodeImpl;Lsun/security/x509/X509CertImpl;Z)Lsun/security/provider/certpath/PolicyNodeImpl;
+HSPLsun/security/provider/certpath/PolicyChecker;->processParents(IZZLsun/security/provider/certpath/PolicyNodeImpl;Ljava/lang/String;Ljava/util/Set;Z)Z+]Lsun/security/provider/certpath/PolicyNodeImpl;Lsun/security/provider/certpath/PolicyNodeImpl;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;]Ljava/util/Set;Ljava/util/HashSet;
+HSPLsun/security/provider/certpath/PolicyChecker;->processPolicies(ILjava/util/Set;IIIZLsun/security/provider/certpath/PolicyNodeImpl;Lsun/security/x509/X509CertImpl;Z)Lsun/security/provider/certpath/PolicyNodeImpl;+]Lsun/security/x509/CertificatePoliciesExtension;Lsun/security/x509/CertificatePoliciesExtension;]Lsun/security/x509/CertificatePolicyId;Lsun/security/x509/CertificatePolicyId;]Lsun/security/x509/X509CertImpl;Lsun/security/x509/X509CertImpl;]Lsun/security/util/ObjectIdentifier;Lsun/security/util/ObjectIdentifier;]Lsun/security/x509/PolicyInformation;Lsun/security/x509/PolicyInformation;]Ljava/util/List;Ljava/util/ArrayList;]Lsun/security/provider/certpath/PolicyNodeImpl;Lsun/security/provider/certpath/PolicyNodeImpl;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;,Ljava/util/Collections$UnmodifiableCollection$1;]Ljava/util/Set;Ljava/util/HashSet;,Ljava/util/Collections$EmptySet;,Ljava/util/LinkedHashSet;
 HSPLsun/security/provider/certpath/PolicyChecker;->processPolicyMappings(Lsun/security/x509/X509CertImpl;IILsun/security/provider/certpath/PolicyNodeImpl;ZLjava/util/Set;)Lsun/security/provider/certpath/PolicyNodeImpl;
-HSPLsun/security/provider/certpath/PolicyNodeImpl;-><init>(Lsun/security/provider/certpath/PolicyNodeImpl;Ljava/lang/String;Ljava/util/Set;ZLjava/util/Set;Z)V
+HSPLsun/security/provider/certpath/PolicyNodeImpl;-><init>(Lsun/security/provider/certpath/PolicyNodeImpl;Ljava/lang/String;Ljava/util/Set;ZLjava/util/Set;Z)V+]Lsun/security/provider/certpath/PolicyNodeImpl;Lsun/security/provider/certpath/PolicyNodeImpl;
 HSPLsun/security/provider/certpath/PolicyNodeImpl;-><init>(Lsun/security/provider/certpath/PolicyNodeImpl;Lsun/security/provider/certpath/PolicyNodeImpl;)V
 HSPLsun/security/provider/certpath/PolicyNodeImpl;->addChild(Lsun/security/provider/certpath/PolicyNodeImpl;)V
 HSPLsun/security/provider/certpath/PolicyNodeImpl;->copyTree()Lsun/security/provider/certpath/PolicyNodeImpl;
@@ -31736,9 +31751,9 @@
 HSPLsun/security/provider/certpath/PolicyNodeImpl;->getPolicyNodes(I)Ljava/util/Set;
 HSPLsun/security/provider/certpath/PolicyNodeImpl;->getPolicyNodes(ILjava/util/Set;)V
 HSPLsun/security/provider/certpath/PolicyNodeImpl;->getPolicyNodesExpected(ILjava/lang/String;Z)Ljava/util/Set;
-HSPLsun/security/provider/certpath/PolicyNodeImpl;->getPolicyNodesExpectedHelper(ILjava/lang/String;Z)Ljava/util/Set;
+HSPLsun/security/provider/certpath/PolicyNodeImpl;->getPolicyNodesExpectedHelper(ILjava/lang/String;Z)Ljava/util/Set;+]Ljava/util/HashSet;Ljava/util/HashSet;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;
 HSPLsun/security/provider/certpath/PolicyNodeImpl;->getValidPolicy()Ljava/lang/String;
-HSPLsun/security/provider/certpath/PolicyNodeImpl;->prune(I)V
+HSPLsun/security/provider/certpath/PolicyNodeImpl;->prune(I)V+]Ljava/util/HashSet;Ljava/util/HashSet;]Lsun/security/provider/certpath/PolicyNodeImpl;Lsun/security/provider/certpath/PolicyNodeImpl;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;
 HSPLsun/security/provider/certpath/PolicyNodeImpl;->setImmutable()V
 HSPLsun/security/provider/certpath/RevocationChecker$1;-><init>()V
 HSPLsun/security/provider/certpath/RevocationChecker$1;->run()Ljava/lang/Object;
@@ -31757,9 +31772,9 @@
 HSPLsun/security/provider/certpath/RevocationChecker;->init(Z)V
 HSPLsun/security/provider/certpath/RevocationChecker;->toURI(Ljava/lang/String;)Ljava/net/URI;
 HSPLsun/security/provider/certpath/RevocationChecker;->updateState(Ljava/security/cert/X509Certificate;)V
-HSPLsun/security/util/AbstractAlgorithmConstraints;->checkAlgorithm([Ljava/lang/String;Ljava/lang/String;Lsun/security/util/AlgorithmDecomposer;)Z
-HSPLsun/security/util/AlgorithmDecomposer;->decompose(Ljava/lang/String;)Ljava/util/Set;
-HSPLsun/security/util/AlgorithmDecomposer;->decomposeImpl(Ljava/lang/String;)Ljava/util/Set;
+HSPLsun/security/util/AbstractAlgorithmConstraints;->checkAlgorithm([Ljava/lang/String;Ljava/lang/String;Lsun/security/util/AlgorithmDecomposer;)Z+]Ljava/lang/String;Ljava/lang/String;]Lsun/security/util/AlgorithmDecomposer;Lsun/security/util/AlgorithmDecomposer;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;]Ljava/util/Set;Ljava/util/HashSet;
+HSPLsun/security/util/AlgorithmDecomposer;->decompose(Ljava/lang/String;)Ljava/util/Set;+]Ljava/util/Set;Ljava/util/HashSet;
+HSPLsun/security/util/AlgorithmDecomposer;->decomposeImpl(Ljava/lang/String;)Ljava/util/Set;+]Ljava/util/regex/Pattern;Ljava/util/regex/Pattern;]Ljava/util/Set;Ljava/util/HashSet;
 HSPLsun/security/util/AlgorithmDecomposer;->decomposeOneHash(Ljava/lang/String;)Ljava/util/Set;
 HSPLsun/security/util/AlgorithmDecomposer;->hasLoop(Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;)V
 HSPLsun/security/util/BitArray;-><init>(I[B)V
@@ -31778,7 +31793,7 @@
 HSPLsun/security/util/DerIndefLenConverter;->isLongForm(I)Z
 HSPLsun/security/util/DerInputBuffer;-><init>([B)V
 HSPLsun/security/util/DerInputBuffer;-><init>([BII)V
-HSPLsun/security/util/DerInputBuffer;->dup()Lsun/security/util/DerInputBuffer;
+HSPLsun/security/util/DerInputBuffer;->dup()Lsun/security/util/DerInputBuffer;+]Lsun/security/util/DerInputBuffer;Lsun/security/util/DerInputBuffer;]Ljava/lang/Object;Lsun/security/util/DerInputBuffer;
 HSPLsun/security/util/DerInputBuffer;->getBigInteger(IZ)Ljava/math/BigInteger;
 HSPLsun/security/util/DerInputBuffer;->getBitString()[B
 HSPLsun/security/util/DerInputBuffer;->getBitString(I)[B
@@ -31790,25 +31805,25 @@
 HSPLsun/security/util/DerInputBuffer;->getUTCTime(I)Ljava/util/Date;
 HSPLsun/security/util/DerInputBuffer;->getUnalignedBitString()Lsun/security/util/BitArray;
 HSPLsun/security/util/DerInputBuffer;->peek()I
-HSPLsun/security/util/DerInputBuffer;->toByteArray()[B
-HSPLsun/security/util/DerInputBuffer;->truncate(I)V
+HSPLsun/security/util/DerInputBuffer;->toByteArray()[B+]Lsun/security/util/DerInputBuffer;Lsun/security/util/DerInputBuffer;
+HSPLsun/security/util/DerInputBuffer;->truncate(I)V+]Lsun/security/util/DerInputBuffer;Lsun/security/util/DerInputBuffer;
 HSPLsun/security/util/DerInputStream;-><init>(Lsun/security/util/DerInputBuffer;)V+]Lsun/security/util/DerInputBuffer;Lsun/security/util/DerInputBuffer;
 HSPLsun/security/util/DerInputStream;-><init>([B)V
-HSPLsun/security/util/DerInputStream;->available()I
+HSPLsun/security/util/DerInputStream;->available()I+]Lsun/security/util/DerInputBuffer;Lsun/security/util/DerInputBuffer;
 HSPLsun/security/util/DerInputStream;->getBigInteger()Ljava/math/BigInteger;
-HSPLsun/security/util/DerInputStream;->getByte()I
-HSPLsun/security/util/DerInputStream;->getBytes([B)V
+HSPLsun/security/util/DerInputStream;->getByte()I+]Lsun/security/util/DerInputBuffer;Lsun/security/util/DerInputBuffer;
+HSPLsun/security/util/DerInputStream;->getBytes([B)V+]Lsun/security/util/DerInputBuffer;Lsun/security/util/DerInputBuffer;
 HSPLsun/security/util/DerInputStream;->getDerValue()Lsun/security/util/DerValue;
 HSPLsun/security/util/DerInputStream;->getEnumerated()I
 HSPLsun/security/util/DerInputStream;->getGeneralizedTime()Ljava/util/Date;
 HSPLsun/security/util/DerInputStream;->getLength()I
 HSPLsun/security/util/DerInputStream;->getLength(ILjava/io/InputStream;)I
-HSPLsun/security/util/DerInputStream;->getLength(Ljava/io/InputStream;)I
+HSPLsun/security/util/DerInputStream;->getLength(Ljava/io/InputStream;)I+]Ljava/io/InputStream;Lsun/security/util/DerInputBuffer;
 HSPLsun/security/util/DerInputStream;->getOID()Lsun/security/util/ObjectIdentifier;
 HSPLsun/security/util/DerInputStream;->getOctetString()[B
 HSPLsun/security/util/DerInputStream;->getSequence(I)[Lsun/security/util/DerValue;
-HSPLsun/security/util/DerInputStream;->getSequence(IZ)[Lsun/security/util/DerValue;
-HSPLsun/security/util/DerInputStream;->getSet(I)[Lsun/security/util/DerValue;
+HSPLsun/security/util/DerInputStream;->getSequence(IZ)[Lsun/security/util/DerValue;+]Lsun/security/util/DerInputBuffer;Lsun/security/util/DerInputBuffer;]Lsun/security/util/DerInputStream;Lsun/security/util/DerInputStream;
+HSPLsun/security/util/DerInputStream;->getSet(I)[Lsun/security/util/DerValue;+]Lsun/security/util/DerInputBuffer;Lsun/security/util/DerInputBuffer;]Lsun/security/util/DerInputStream;Lsun/security/util/DerInputStream;
 HSPLsun/security/util/DerInputStream;->getSet(IZ)[Lsun/security/util/DerValue;
 HSPLsun/security/util/DerInputStream;->getSet(IZZ)[Lsun/security/util/DerValue;
 HSPLsun/security/util/DerInputStream;->getUTCTime()Ljava/util/Date;
@@ -31818,9 +31833,9 @@
 HSPLsun/security/util/DerInputStream;->peekByte()I
 HSPLsun/security/util/DerInputStream;->readVector(I)[Lsun/security/util/DerValue;
 HSPLsun/security/util/DerInputStream;->readVector(IZ)[Lsun/security/util/DerValue;+]Lsun/security/util/DerInputBuffer;Lsun/security/util/DerInputBuffer;]Ljava/util/Vector;Ljava/util/Vector;]Lsun/security/util/DerInputStream;Lsun/security/util/DerInputStream;
-HSPLsun/security/util/DerInputStream;->reset()V
+HSPLsun/security/util/DerInputStream;->reset()V+]Lsun/security/util/DerInputBuffer;Lsun/security/util/DerInputBuffer;
 HSPLsun/security/util/DerInputStream;->subStream(IZ)Lsun/security/util/DerInputStream;
-HSPLsun/security/util/DerInputStream;->toByteArray()[B
+HSPLsun/security/util/DerInputStream;->toByteArray()[B+]Lsun/security/util/DerInputBuffer;Lsun/security/util/DerInputBuffer;
 HSPLsun/security/util/DerOutputStream;-><init>()V
 HSPLsun/security/util/DerOutputStream;->putDerValue(Lsun/security/util/DerValue;)V
 HSPLsun/security/util/DerOutputStream;->putLength(I)V
@@ -31842,7 +31857,7 @@
 HSPLsun/security/util/DerValue;->getBitString()[B
 HSPLsun/security/util/DerValue;->getBoolean()Z
 HSPLsun/security/util/DerValue;->getData()Lsun/security/util/DerInputStream;
-HSPLsun/security/util/DerValue;->getDataBytes()[B
+HSPLsun/security/util/DerValue;->getDataBytes()[B+]Lsun/security/util/DerInputStream;Lsun/security/util/DerInputStream;
 HSPLsun/security/util/DerValue;->getIA5String()Ljava/lang/String;
 HSPLsun/security/util/DerValue;->getInteger()I
 HSPLsun/security/util/DerValue;->getOID()Lsun/security/util/ObjectIdentifier;
@@ -31858,11 +31873,11 @@
 HSPLsun/security/util/DerValue;->isPrintableStringChar(C)Z
 HSPLsun/security/util/DerValue;->length()I
 HSPLsun/security/util/DerValue;->resetTag(B)V
-HSPLsun/security/util/DerValue;->toByteArray()[B
+HSPLsun/security/util/DerValue;->toByteArray()[B+]Lsun/security/util/DerValue;Lsun/security/util/DerValue;]Lsun/security/util/DerOutputStream;Lsun/security/util/DerOutputStream;]Lsun/security/util/DerInputStream;Lsun/security/util/DerInputStream;
 HSPLsun/security/util/DerValue;->toDerInputStream()Lsun/security/util/DerInputStream;
 HSPLsun/security/util/DisabledAlgorithmConstraints$Constraints;->getConstraints(Ljava/lang/String;)Ljava/util/Set;
 HSPLsun/security/util/DisabledAlgorithmConstraints$Constraints;->permits(Ljava/security/Key;)Z
-HSPLsun/security/util/DisabledAlgorithmConstraints$Constraints;->permits(Lsun/security/util/CertConstraintParameters;)V
+HSPLsun/security/util/DisabledAlgorithmConstraints$Constraints;->permits(Lsun/security/util/CertConstraintParameters;)V+]Lsun/security/util/CertConstraintParameters;Lsun/security/util/CertConstraintParameters;]Lsun/security/util/DisabledAlgorithmConstraints$Constraint;Lsun/security/util/DisabledAlgorithmConstraints$KeySizeConstraint;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;]Ljava/util/Set;Ljava/util/HashSet;
 HSPLsun/security/util/DisabledAlgorithmConstraints$KeySizeConstraint;->permits(Ljava/security/Key;)Z
 HSPLsun/security/util/DisabledAlgorithmConstraints$KeySizeConstraint;->permits(Lsun/security/util/CertConstraintParameters;)V
 HSPLsun/security/util/DisabledAlgorithmConstraints$KeySizeConstraint;->permitsImpl(Ljava/security/Key;)Z
@@ -31889,7 +31904,7 @@
 HSPLsun/security/util/MemoryCache$SoftCacheEntry;->getValue()Ljava/lang/Object;
 HSPLsun/security/util/MemoryCache$SoftCacheEntry;->isValid(J)Z
 HSPLsun/security/util/MemoryCache;->emptyQueue()V
-HSPLsun/security/util/MemoryCache;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLsun/security/util/MemoryCache;->get(Ljava/lang/Object;)Ljava/lang/Object;+]Lsun/security/util/MemoryCache$CacheEntry;Lsun/security/util/MemoryCache$SoftCacheEntry;]Ljava/util/Map;Ljava/util/LinkedHashMap;
 HSPLsun/security/util/MemoryCache;->newEntry(Ljava/lang/Object;Ljava/lang/Object;JLjava/lang/ref/ReferenceQueue;)Lsun/security/util/MemoryCache$CacheEntry;
 HSPLsun/security/util/MemoryCache;->put(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLsun/security/util/ObjectIdentifier;-><init>(Lsun/security/util/DerInputBuffer;)V
@@ -31921,7 +31936,7 @@
 HSPLsun/security/x509/AVA;->toKeyword(ILjava/util/Map;)Ljava/lang/String;
 HSPLsun/security/x509/AVA;->toRFC2253CanonicalString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;]Lsun/security/util/DerValue;Lsun/security/util/DerValue;
 HSPLsun/security/x509/AVA;->toRFC2253String(Ljava/util/Map;)Ljava/lang/String;
-HSPLsun/security/x509/AVAKeyword;->getKeyword(Lsun/security/util/ObjectIdentifier;ILjava/util/Map;)Ljava/lang/String;
+HSPLsun/security/x509/AVAKeyword;->getKeyword(Lsun/security/util/ObjectIdentifier;ILjava/util/Map;)Ljava/lang/String;+]Lsun/security/util/ObjectIdentifier;Lsun/security/util/ObjectIdentifier;]Ljava/util/Map;Ljava/util/HashMap;,Ljava/util/Collections$EmptyMap;
 HSPLsun/security/x509/AVAKeyword;->getOID(Ljava/lang/String;ILjava/util/Map;)Lsun/security/util/ObjectIdentifier;
 HSPLsun/security/x509/AVAKeyword;->isCompliant(I)Z
 HSPLsun/security/x509/AccessDescription;-><init>(Lsun/security/util/DerValue;)V
@@ -32008,7 +32023,7 @@
 HSPLsun/security/x509/RDN;->encode(Lsun/security/util/DerOutputStream;)V
 HSPLsun/security/x509/RDN;->toRFC2253String(Ljava/util/Map;)Ljava/lang/String;
 HSPLsun/security/x509/RDN;->toRFC2253String(Z)Ljava/lang/String;
-HSPLsun/security/x509/RDN;->toRFC2253StringInternal(ZLjava/util/Map;)Ljava/lang/String;
+HSPLsun/security/x509/RDN;->toRFC2253StringInternal(ZLjava/util/Map;)Ljava/lang/String;+]Lsun/security/x509/AVA;Lsun/security/x509/AVA;
 HSPLsun/security/x509/SerialNumber;-><init>(Lsun/security/util/DerInputStream;)V
 HSPLsun/security/x509/SerialNumber;-><init>(Lsun/security/util/DerValue;)V
 HSPLsun/security/x509/SerialNumber;->construct(Lsun/security/util/DerValue;)V
@@ -32028,32 +32043,32 @@
 HSPLsun/security/x509/X500Name;->asX500Principal()Ljavax/security/auth/x500/X500Principal;
 HSPLsun/security/x509/X500Name;->checkNoNewLinesNorTabsAtBeginningOfDN(Ljava/lang/String;)V
 HSPLsun/security/x509/X500Name;->countQuotes(Ljava/lang/String;II)I
-HSPLsun/security/x509/X500Name;->equals(Ljava/lang/Object;)Z
+HSPLsun/security/x509/X500Name;->equals(Ljava/lang/Object;)Z+]Lsun/security/x509/X500Name;Lsun/security/x509/X500Name;
 HSPLsun/security/x509/X500Name;->escaped(IILjava/lang/String;)Z
 HSPLsun/security/x509/X500Name;->generateRFC2253DN(Ljava/util/Map;)Ljava/lang/String;
 HSPLsun/security/x509/X500Name;->getEncoded()[B
 HSPLsun/security/x509/X500Name;->getEncodedInternal()[B
-HSPLsun/security/x509/X500Name;->getRFC2253CanonicalName()Ljava/lang/String;
+HSPLsun/security/x509/X500Name;->getRFC2253CanonicalName()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lsun/security/x509/RDN;Lsun/security/x509/RDN;
 HSPLsun/security/x509/X500Name;->getRFC2253Name()Ljava/lang/String;
 HSPLsun/security/x509/X500Name;->getRFC2253Name(Ljava/util/Map;)Ljava/lang/String;
 HSPLsun/security/x509/X500Name;->hashCode()I
-HSPLsun/security/x509/X500Name;->intern(Lsun/security/util/ObjectIdentifier;)Lsun/security/util/ObjectIdentifier;
+HSPLsun/security/x509/X500Name;->intern(Lsun/security/util/ObjectIdentifier;)Lsun/security/util/ObjectIdentifier;+]Ljava/util/Map;Ljava/util/HashMap;
 HSPLsun/security/x509/X500Name;->isEmpty()Z
-HSPLsun/security/x509/X500Name;->parseDER(Lsun/security/util/DerInputStream;)V
+HSPLsun/security/x509/X500Name;->parseDER(Lsun/security/util/DerInputStream;)V+]Lsun/security/util/DerInputStream;Lsun/security/util/DerInputStream;
 HSPLsun/security/x509/X500Name;->parseDN(Ljava/lang/String;Ljava/util/Map;)V
-HSPLsun/security/x509/X509AttributeName;-><init>(Ljava/lang/String;)V
+HSPLsun/security/x509/X509AttributeName;-><init>(Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;
 HSPLsun/security/x509/X509AttributeName;->getPrefix()Ljava/lang/String;
 HSPLsun/security/x509/X509AttributeName;->getSuffix()Ljava/lang/String;
 HSPLsun/security/x509/X509CertImpl;-><init>([B)V
 HSPLsun/security/x509/X509CertImpl;->checkValidity(Ljava/util/Date;)V
-HSPLsun/security/x509/X509CertImpl;->get(Ljava/lang/String;)Ljava/lang/Object;
+HSPLsun/security/x509/X509CertImpl;->get(Ljava/lang/String;)Ljava/lang/Object;+]Ljava/lang/String;Ljava/lang/String;]Lsun/security/x509/X509AttributeName;Lsun/security/x509/X509AttributeName;
 HSPLsun/security/x509/X509CertImpl;->getAuthorityKeyIdentifierExtension()Lsun/security/x509/AuthorityKeyIdentifierExtension;
 HSPLsun/security/x509/X509CertImpl;->getCertificatePoliciesExtension()Lsun/security/x509/CertificatePoliciesExtension;
 HSPLsun/security/x509/X509CertImpl;->getEncodedInternal()[B
 HSPLsun/security/x509/X509CertImpl;->getEncodedInternal(Ljava/security/cert/Certificate;)[B
 HSPLsun/security/x509/X509CertImpl;->getExtendedKeyUsage()Ljava/util/List;
 HSPLsun/security/x509/X509CertImpl;->getExtendedKeyUsageExtension()Lsun/security/x509/ExtendedKeyUsageExtension;
-HSPLsun/security/x509/X509CertImpl;->getExtension(Lsun/security/util/ObjectIdentifier;)Lsun/security/x509/Extension;
+HSPLsun/security/x509/X509CertImpl;->getExtension(Lsun/security/util/ObjectIdentifier;)Lsun/security/x509/Extension;+]Lsun/security/x509/Extension;megamorphic_types]Lsun/security/util/ObjectIdentifier;Lsun/security/util/ObjectIdentifier;]Lsun/security/x509/X509CertInfo;Lsun/security/x509/X509CertInfo;]Ljava/util/Collection;Ljava/util/Collections$SynchronizedCollection;]Lsun/security/x509/CertificateExtensions;Lsun/security/x509/CertificateExtensions;]Ljava/util/Iterator;Ljava/util/TreeMap$ValueIterator;
 HSPLsun/security/x509/X509CertImpl;->getIssuerX500Principal()Ljavax/security/auth/x500/X500Principal;
 HSPLsun/security/x509/X509CertImpl;->getKeyUsage()[Z
 HSPLsun/security/x509/X509CertImpl;->getNameConstraintsExtension()Lsun/security/x509/NameConstraintsExtension;
@@ -32074,7 +32089,7 @@
 HSPLsun/security/x509/X509CertInfo;-><init>(Lsun/security/util/DerValue;)V
 HSPLsun/security/x509/X509CertInfo;-><init>([B)V
 HSPLsun/security/x509/X509CertInfo;->attributeMap(Ljava/lang/String;)I
-HSPLsun/security/x509/X509CertInfo;->get(Ljava/lang/String;)Ljava/lang/Object;
+HSPLsun/security/x509/X509CertInfo;->get(Ljava/lang/String;)Ljava/lang/Object;+]Lsun/security/x509/X509AttributeName;Lsun/security/x509/X509AttributeName;
 HSPLsun/security/x509/X509CertInfo;->getEncodedInfo()[B
 HSPLsun/security/x509/X509CertInfo;->getX500Name(Ljava/lang/String;Z)Ljava/lang/Object;
 HSPLsun/security/x509/X509CertInfo;->parse(Lsun/security/util/DerValue;)V
@@ -32083,14 +32098,14 @@
 HSPLsun/security/x509/X509Key;->encode(Lsun/security/util/DerOutputStream;Lsun/security/x509/AlgorithmId;Lsun/security/util/BitArray;)V
 HSPLsun/security/x509/X509Key;->parse(Lsun/security/util/DerValue;)Ljava/security/PublicKey;
 HSPLsun/util/calendar/AbstractCalendar;-><init>()V
-HSPLsun/util/calendar/AbstractCalendar;->getCalendarDate(JLsun/util/calendar/CalendarDate;)Lsun/util/calendar/CalendarDate;
+HSPLsun/util/calendar/AbstractCalendar;->getCalendarDate(JLsun/util/calendar/CalendarDate;)Lsun/util/calendar/CalendarDate;+]Lsun/util/calendar/AbstractCalendar;Lsun/util/calendar/Gregorian;]Lsun/util/calendar/CalendarDate;Lsun/util/calendar/Gregorian$Date;]Llibcore/util/ZoneInfo;Llibcore/util/ZoneInfo;
 HSPLsun/util/calendar/AbstractCalendar;->getDayOfWeekDateOnOrBefore(JI)J
 HSPLsun/util/calendar/AbstractCalendar;->getEras()[Lsun/util/calendar/Era;
 HSPLsun/util/calendar/AbstractCalendar;->getTime(Lsun/util/calendar/CalendarDate;)J
 HSPLsun/util/calendar/AbstractCalendar;->getTimeOfDay(Lsun/util/calendar/CalendarDate;)J
 HSPLsun/util/calendar/AbstractCalendar;->getTimeOfDayValue(Lsun/util/calendar/CalendarDate;)J
 HSPLsun/util/calendar/AbstractCalendar;->setEras([Lsun/util/calendar/Era;)V
-HSPLsun/util/calendar/AbstractCalendar;->setTimeOfDay(Lsun/util/calendar/CalendarDate;I)Lsun/util/calendar/CalendarDate;
+HSPLsun/util/calendar/AbstractCalendar;->setTimeOfDay(Lsun/util/calendar/CalendarDate;I)Lsun/util/calendar/CalendarDate;+]Lsun/util/calendar/CalendarDate;Lsun/util/calendar/Gregorian$Date;
 HSPLsun/util/calendar/BaseCalendar$Date;-><init>(Ljava/util/TimeZone;)V
 HSPLsun/util/calendar/BaseCalendar$Date;->getCachedJan1()J
 HSPLsun/util/calendar/BaseCalendar$Date;->getCachedYear()I
@@ -32101,7 +32116,7 @@
 HSPLsun/util/calendar/BaseCalendar;->getCalendarDateFromFixedDate(Lsun/util/calendar/CalendarDate;J)V+]Lsun/util/calendar/BaseCalendar$Date;Lsun/util/calendar/Gregorian$Date;]Lsun/util/calendar/BaseCalendar;Lsun/util/calendar/Gregorian;
 HSPLsun/util/calendar/BaseCalendar;->getDayOfWeekFromFixedDate(J)I
 HSPLsun/util/calendar/BaseCalendar;->getDayOfYear(III)J
-HSPLsun/util/calendar/BaseCalendar;->getFixedDate(IIILsun/util/calendar/BaseCalendar$Date;)J
+HSPLsun/util/calendar/BaseCalendar;->getFixedDate(IIILsun/util/calendar/BaseCalendar$Date;)J+]Lsun/util/calendar/BaseCalendar$Date;Lsun/util/calendar/Gregorian$Date;]Lsun/util/calendar/BaseCalendar;Lsun/util/calendar/Gregorian;
 HSPLsun/util/calendar/BaseCalendar;->getFixedDate(Lsun/util/calendar/CalendarDate;)J
 HSPLsun/util/calendar/BaseCalendar;->getGregorianYearFromFixedDate(J)I
 HSPLsun/util/calendar/BaseCalendar;->isLeapYear(I)Z
@@ -32110,7 +32125,7 @@
 HSPLsun/util/calendar/CalendarDate;-><init>(Ljava/util/TimeZone;)V
 HSPLsun/util/calendar/CalendarDate;->clone()Ljava/lang/Object;
 HSPLsun/util/calendar/CalendarDate;->getDayOfMonth()I
-HSPLsun/util/calendar/CalendarDate;->getDayOfWeek()I
+HSPLsun/util/calendar/CalendarDate;->getDayOfWeek()I+]Lsun/util/calendar/CalendarDate;Lsun/util/calendar/Gregorian$Date;
 HSPLsun/util/calendar/CalendarDate;->getEra()Lsun/util/calendar/Era;
 HSPLsun/util/calendar/CalendarDate;->getHours()I
 HSPLsun/util/calendar/CalendarDate;->getMillis()I
@@ -32152,8 +32167,8 @@
 HSPLsun/util/calendar/CalendarUtils;->mod(JJ)J
 HSPLsun/util/calendar/CalendarUtils;->sprintf0d(Ljava/lang/StringBuilder;II)Ljava/lang/StringBuilder;
 HSPLsun/util/calendar/Gregorian$Date;-><init>(Ljava/util/TimeZone;)V
-HSPLsun/util/calendar/Gregorian$Date;->getNormalizedYear()I
-HSPLsun/util/calendar/Gregorian$Date;->setNormalizedYear(I)V
+HSPLsun/util/calendar/Gregorian$Date;->getNormalizedYear()I+]Lsun/util/calendar/Gregorian$Date;Lsun/util/calendar/Gregorian$Date;
+HSPLsun/util/calendar/Gregorian$Date;->setNormalizedYear(I)V+]Lsun/util/calendar/Gregorian$Date;Lsun/util/calendar/Gregorian$Date;
 HSPLsun/util/calendar/Gregorian;->getCalendarDate(JLjava/util/TimeZone;)Lsun/util/calendar/CalendarDate;
 HSPLsun/util/calendar/Gregorian;->getCalendarDate(JLjava/util/TimeZone;)Lsun/util/calendar/Gregorian$Date;
 HSPLsun/util/calendar/Gregorian;->getCalendarDate(JLsun/util/calendar/CalendarDate;)Lsun/util/calendar/CalendarDate;
@@ -32187,7 +32202,7 @@
 HSPLsun/util/locale/BaseLocale;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lsun/util/locale/BaseLocale-IA;)V
 HSPLsun/util/locale/BaseLocale;->cleanCache()V
 HSPLsun/util/locale/BaseLocale;->equals(Ljava/lang/Object;)Z
-HSPLsun/util/locale/BaseLocale;->getInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lsun/util/locale/BaseLocale;
+HSPLsun/util/locale/BaseLocale;->getInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lsun/util/locale/BaseLocale;+]Lsun/util/locale/BaseLocale$Cache;Lsun/util/locale/BaseLocale$Cache;
 HSPLsun/util/locale/BaseLocale;->getLanguage()Ljava/lang/String;
 HSPLsun/util/locale/BaseLocale;->getRegion()Ljava/lang/String;
 HSPLsun/util/locale/BaseLocale;->getScript()Ljava/lang/String;
@@ -32195,13 +32210,13 @@
 HSPLsun/util/locale/BaseLocale;->hashCode()I
 HSPLsun/util/locale/InternalLocaleBuilder;-><init>()V
 HSPLsun/util/locale/InternalLocaleBuilder;->checkVariants(Ljava/lang/String;Ljava/lang/String;)I
-HSPLsun/util/locale/InternalLocaleBuilder;->clear()Lsun/util/locale/InternalLocaleBuilder;
+HSPLsun/util/locale/InternalLocaleBuilder;->clear()Lsun/util/locale/InternalLocaleBuilder;+]Lsun/util/locale/InternalLocaleBuilder;Lsun/util/locale/InternalLocaleBuilder;
 HSPLsun/util/locale/InternalLocaleBuilder;->clearExtensions()Lsun/util/locale/InternalLocaleBuilder;
 HSPLsun/util/locale/InternalLocaleBuilder;->getBaseLocale()Lsun/util/locale/BaseLocale;
 HSPLsun/util/locale/InternalLocaleBuilder;->getLocaleExtensions()Lsun/util/locale/LocaleExtensions;
-HSPLsun/util/locale/InternalLocaleBuilder;->setExtensions(Ljava/util/List;Ljava/lang/String;)Lsun/util/locale/InternalLocaleBuilder;
+HSPLsun/util/locale/InternalLocaleBuilder;->setExtensions(Ljava/util/List;Ljava/lang/String;)Lsun/util/locale/InternalLocaleBuilder;+]Lsun/util/locale/InternalLocaleBuilder;Lsun/util/locale/InternalLocaleBuilder;
 HSPLsun/util/locale/InternalLocaleBuilder;->setLanguage(Ljava/lang/String;)Lsun/util/locale/InternalLocaleBuilder;
-HSPLsun/util/locale/InternalLocaleBuilder;->setLanguageTag(Lsun/util/locale/LanguageTag;)Lsun/util/locale/InternalLocaleBuilder;
+HSPLsun/util/locale/InternalLocaleBuilder;->setLanguageTag(Lsun/util/locale/LanguageTag;)Lsun/util/locale/InternalLocaleBuilder;+]Lsun/util/locale/InternalLocaleBuilder;Lsun/util/locale/InternalLocaleBuilder;]Lsun/util/locale/LanguageTag;Lsun/util/locale/LanguageTag;]Ljava/util/List;Ljava/util/Collections$EmptyList;
 HSPLsun/util/locale/InternalLocaleBuilder;->setRegion(Ljava/lang/String;)Lsun/util/locale/InternalLocaleBuilder;
 HSPLsun/util/locale/InternalLocaleBuilder;->setScript(Ljava/lang/String;)Lsun/util/locale/InternalLocaleBuilder;
 HSPLsun/util/locale/InternalLocaleBuilder;->setVariant(Ljava/lang/String;)Lsun/util/locale/InternalLocaleBuilder;
@@ -32209,31 +32224,31 @@
 HSPLsun/util/locale/LanguageTag;->canonicalizeLanguage(Ljava/lang/String;)Ljava/lang/String;
 HSPLsun/util/locale/LanguageTag;->canonicalizeRegion(Ljava/lang/String;)Ljava/lang/String;
 HSPLsun/util/locale/LanguageTag;->canonicalizeScript(Ljava/lang/String;)Ljava/lang/String;
-HSPLsun/util/locale/LanguageTag;->getExtensions()Ljava/util/List;
-HSPLsun/util/locale/LanguageTag;->getExtlangs()Ljava/util/List;
+HSPLsun/util/locale/LanguageTag;->getExtensions()Ljava/util/List;+]Ljava/util/List;Ljava/util/Collections$EmptyList;
+HSPLsun/util/locale/LanguageTag;->getExtlangs()Ljava/util/List;+]Ljava/util/List;Ljava/util/Collections$EmptyList;
 HSPLsun/util/locale/LanguageTag;->getLanguage()Ljava/lang/String;
 HSPLsun/util/locale/LanguageTag;->getPrivateuse()Ljava/lang/String;
 HSPLsun/util/locale/LanguageTag;->getRegion()Ljava/lang/String;
 HSPLsun/util/locale/LanguageTag;->getScript()Ljava/lang/String;
-HSPLsun/util/locale/LanguageTag;->getVariants()Ljava/util/List;
+HSPLsun/util/locale/LanguageTag;->getVariants()Ljava/util/List;+]Ljava/util/List;Ljava/util/Collections$EmptyList;
 HSPLsun/util/locale/LanguageTag;->isExtlang(Ljava/lang/String;)Z
 HSPLsun/util/locale/LanguageTag;->isLanguage(Ljava/lang/String;)Z
 HSPLsun/util/locale/LanguageTag;->isRegion(Ljava/lang/String;)Z
 HSPLsun/util/locale/LanguageTag;->isScript(Ljava/lang/String;)Z
 HSPLsun/util/locale/LanguageTag;->isVariant(Ljava/lang/String;)Z
-HSPLsun/util/locale/LanguageTag;->parse(Ljava/lang/String;Lsun/util/locale/ParseStatus;)Lsun/util/locale/LanguageTag;
+HSPLsun/util/locale/LanguageTag;->parse(Ljava/lang/String;Lsun/util/locale/ParseStatus;)Lsun/util/locale/LanguageTag;+]Lsun/util/locale/StringTokenIterator;Lsun/util/locale/StringTokenIterator;]Ljava/util/Map;Ljava/util/HashMap;]Lsun/util/locale/ParseStatus;Lsun/util/locale/ParseStatus;
 HSPLsun/util/locale/LanguageTag;->parseExtensions(Lsun/util/locale/StringTokenIterator;Lsun/util/locale/ParseStatus;)Z
-HSPLsun/util/locale/LanguageTag;->parseExtlangs(Lsun/util/locale/StringTokenIterator;Lsun/util/locale/ParseStatus;)Z
-HSPLsun/util/locale/LanguageTag;->parseLanguage(Lsun/util/locale/StringTokenIterator;Lsun/util/locale/ParseStatus;)Z
+HSPLsun/util/locale/LanguageTag;->parseExtlangs(Lsun/util/locale/StringTokenIterator;Lsun/util/locale/ParseStatus;)Z+]Lsun/util/locale/StringTokenIterator;Lsun/util/locale/StringTokenIterator;]Lsun/util/locale/ParseStatus;Lsun/util/locale/ParseStatus;
+HSPLsun/util/locale/LanguageTag;->parseLanguage(Lsun/util/locale/StringTokenIterator;Lsun/util/locale/ParseStatus;)Z+]Lsun/util/locale/StringTokenIterator;Lsun/util/locale/StringTokenIterator;]Lsun/util/locale/ParseStatus;Lsun/util/locale/ParseStatus;
 HSPLsun/util/locale/LanguageTag;->parseLocale(Lsun/util/locale/BaseLocale;Lsun/util/locale/LocaleExtensions;)Lsun/util/locale/LanguageTag;
 HSPLsun/util/locale/LanguageTag;->parsePrivateuse(Lsun/util/locale/StringTokenIterator;Lsun/util/locale/ParseStatus;)Z
-HSPLsun/util/locale/LanguageTag;->parseRegion(Lsun/util/locale/StringTokenIterator;Lsun/util/locale/ParseStatus;)Z
-HSPLsun/util/locale/LanguageTag;->parseScript(Lsun/util/locale/StringTokenIterator;Lsun/util/locale/ParseStatus;)Z
-HSPLsun/util/locale/LanguageTag;->parseVariants(Lsun/util/locale/StringTokenIterator;Lsun/util/locale/ParseStatus;)Z
+HSPLsun/util/locale/LanguageTag;->parseRegion(Lsun/util/locale/StringTokenIterator;Lsun/util/locale/ParseStatus;)Z+]Lsun/util/locale/StringTokenIterator;Lsun/util/locale/StringTokenIterator;]Lsun/util/locale/ParseStatus;Lsun/util/locale/ParseStatus;
+HSPLsun/util/locale/LanguageTag;->parseScript(Lsun/util/locale/StringTokenIterator;Lsun/util/locale/ParseStatus;)Z+]Lsun/util/locale/StringTokenIterator;Lsun/util/locale/StringTokenIterator;]Lsun/util/locale/ParseStatus;Lsun/util/locale/ParseStatus;
+HSPLsun/util/locale/LanguageTag;->parseVariants(Lsun/util/locale/StringTokenIterator;Lsun/util/locale/ParseStatus;)Z+]Lsun/util/locale/StringTokenIterator;Lsun/util/locale/StringTokenIterator;
 HSPLsun/util/locale/LocaleObjectCache$CacheEntry;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V
 HSPLsun/util/locale/LocaleObjectCache$CacheEntry;->getKey()Ljava/lang/Object;
-HSPLsun/util/locale/LocaleObjectCache;->cleanStaleEntries()V
-HSPLsun/util/locale/LocaleObjectCache;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLsun/util/locale/LocaleObjectCache;->cleanStaleEntries()V+]Ljava/lang/ref/ReferenceQueue;Ljava/lang/ref/ReferenceQueue;
+HSPLsun/util/locale/LocaleObjectCache;->get(Ljava/lang/Object;)Ljava/lang/Object;+]Ljava/util/concurrent/ConcurrentMap;Ljava/util/concurrent/ConcurrentHashMap;]Lsun/util/locale/LocaleObjectCache;Lsun/util/locale/BaseLocale$Cache;,Ljava/util/Locale$Cache;]Lsun/util/locale/LocaleObjectCache$CacheEntry;Lsun/util/locale/LocaleObjectCache$CacheEntry;
 HSPLsun/util/locale/LocaleObjectCache;->normalizeKey(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLsun/util/locale/LocaleUtils;->caseIgnoreMatch(Ljava/lang/String;Ljava/lang/String;)Z
 HSPLsun/util/locale/LocaleUtils;->isAlpha(C)Z
@@ -32252,17 +32267,17 @@
 HSPLsun/util/locale/LocaleUtils;->toLowerString(Ljava/lang/String;)Ljava/lang/String;
 HSPLsun/util/locale/LocaleUtils;->toTitleString(Ljava/lang/String;)Ljava/lang/String;
 HSPLsun/util/locale/LocaleUtils;->toUpperString(Ljava/lang/String;)Ljava/lang/String;
-HSPLsun/util/locale/ParseStatus;-><init>()V
+HSPLsun/util/locale/ParseStatus;-><init>()V+]Lsun/util/locale/ParseStatus;Lsun/util/locale/ParseStatus;
 HSPLsun/util/locale/ParseStatus;->isError()Z
 HSPLsun/util/locale/ParseStatus;->reset()V
-HSPLsun/util/locale/StringTokenIterator;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+HSPLsun/util/locale/StringTokenIterator;-><init>(Ljava/lang/String;Ljava/lang/String;)V+]Lsun/util/locale/StringTokenIterator;Lsun/util/locale/StringTokenIterator;
 HSPLsun/util/locale/StringTokenIterator;->current()Ljava/lang/String;
 HSPLsun/util/locale/StringTokenIterator;->currentEnd()I
 HSPLsun/util/locale/StringTokenIterator;->hasNext()Z
 HSPLsun/util/locale/StringTokenIterator;->isDone()Z
-HSPLsun/util/locale/StringTokenIterator;->next()Ljava/lang/String;
+HSPLsun/util/locale/StringTokenIterator;->next()Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;]Lsun/util/locale/StringTokenIterator;Lsun/util/locale/StringTokenIterator;
 HSPLsun/util/locale/StringTokenIterator;->nextDelimiter(I)I
-HSPLsun/util/locale/StringTokenIterator;->setStart(I)Lsun/util/locale/StringTokenIterator;
+HSPLsun/util/locale/StringTokenIterator;->setStart(I)Lsun/util/locale/StringTokenIterator;+]Ljava/lang/String;Ljava/lang/String;
 HSPLsun/util/logging/LoggingSupport$2;-><init>()V
 HSPLsun/util/logging/LoggingSupport$2;->run()Ljava/lang/Object;
 HSPLsun/util/logging/LoggingSupport$2;->run()Ljava/lang/String;
@@ -32334,6 +32349,7 @@
 Landroid/accounts/IAccountManagerResponse;
 Landroid/accounts/OnAccountsUpdateListener;
 Landroid/accounts/OperationCanceledException;
+Landroid/animation/AnimationHandler$$ExternalSyntheticLambda0;
 Landroid/animation/AnimationHandler$1;
 Landroid/animation/AnimationHandler$2;
 Landroid/animation/AnimationHandler$AnimationFrameCallback;
@@ -32472,6 +32488,7 @@
 Landroid/app/ActivityThread$$ExternalSyntheticLambda0;
 Landroid/app/ActivityThread$$ExternalSyntheticLambda1;
 Landroid/app/ActivityThread$$ExternalSyntheticLambda2;
+Landroid/app/ActivityThread$$ExternalSyntheticLambda3;
 Landroid/app/ActivityThread$$ExternalSyntheticLambda5;
 Landroid/app/ActivityThread$1$$ExternalSyntheticLambda0;
 Landroid/app/ActivityThread$1;
@@ -33125,6 +33142,7 @@
 Landroid/app/admin/IKeyguardCallback;
 Landroid/app/admin/NetworkEvent$1;
 Landroid/app/admin/NetworkEvent;
+Landroid/app/admin/ParcelableResource$1;
 Landroid/app/admin/ParcelableResource;
 Landroid/app/admin/PasswordMetrics$1;
 Landroid/app/admin/PasswordMetrics$ComplexityBucket$1;
@@ -33349,9 +33367,17 @@
 Landroid/app/slice/SliceProvider;
 Landroid/app/slice/SliceSpec$1;
 Landroid/app/slice/SliceSpec;
+Landroid/app/smartspace/SmartspaceAction$1;
+Landroid/app/smartspace/SmartspaceAction;
+Landroid/app/smartspace/SmartspaceConfig$1;
 Landroid/app/smartspace/SmartspaceConfig;
 Landroid/app/smartspace/SmartspaceManager;
+Landroid/app/smartspace/SmartspaceSessionId$1;
 Landroid/app/smartspace/SmartspaceSessionId;
+Landroid/app/smartspace/SmartspaceTarget$1;
+Landroid/app/smartspace/SmartspaceTarget;
+Landroid/app/smartspace/SmartspaceTargetEvent$1;
+Landroid/app/smartspace/SmartspaceTargetEvent;
 Landroid/app/tare/EconomyManager;
 Landroid/app/time/ITimeZoneDetectorListener$Stub$Proxy;
 Landroid/app/time/ITimeZoneDetectorListener$Stub;
@@ -33673,6 +33699,7 @@
 Landroid/content/pm/ChangedPackages$1;
 Landroid/content/pm/ChangedPackages;
 Landroid/content/pm/Checksum$1;
+Landroid/content/pm/Checksum$Type;
 Landroid/content/pm/Checksum;
 Landroid/content/pm/ComponentInfo;
 Landroid/content/pm/ConfigurationInfo$1;
@@ -33819,6 +33846,7 @@
 Landroid/content/pm/PackageManager$Flags;
 Landroid/content/pm/PackageManager$MoveCallback;
 Landroid/content/pm/PackageManager$NameNotFoundException;
+Landroid/content/pm/PackageManager$OnChecksumsReadyListener;
 Landroid/content/pm/PackageManager$OnPermissionsChangedListener;
 Landroid/content/pm/PackageManager$PackageInfoFlags;
 Landroid/content/pm/PackageManager$PackageInfoQuery;
@@ -33983,6 +34011,7 @@
 Landroid/content/res/ObbScanner;
 Landroid/content/res/ResourceId;
 Landroid/content/res/Resources$$ExternalSyntheticLambda0;
+Landroid/content/res/Resources$$ExternalSyntheticLambda1;
 Landroid/content/res/Resources$AssetManagerUpdateHandler;
 Landroid/content/res/Resources$NotFoundException;
 Landroid/content/res/Resources$Theme;
@@ -37341,11 +37370,14 @@
 Landroid/media/browse/MediaBrowser$SubscriptionCallback;
 Landroid/media/browse/MediaBrowser;
 Landroid/media/browse/MediaBrowserUtils;
+Landroid/media/metrics/Event;
 Landroid/media/metrics/IMediaMetricsManager$Stub$Proxy;
 Landroid/media/metrics/IMediaMetricsManager$Stub;
 Landroid/media/metrics/IMediaMetricsManager;
 Landroid/media/metrics/LogSessionId;
 Landroid/media/metrics/MediaMetricsManager;
+Landroid/media/metrics/NetworkEvent$1;
+Landroid/media/metrics/NetworkEvent;
 Landroid/media/metrics/PlaybackSession;
 Landroid/media/midi/IMidiDeviceListener$Stub$Proxy;
 Landroid/media/midi/IMidiDeviceListener$Stub;
@@ -39073,6 +39105,7 @@
 Landroid/sysprop/HdmiProperties;
 Landroid/sysprop/InitProperties;
 Landroid/sysprop/InputProperties;
+Landroid/sysprop/MediaProperties;
 Landroid/sysprop/PowerProperties;
 Landroid/sysprop/SocProperties;
 Landroid/sysprop/TelephonyProperties$$ExternalSyntheticLambda0;
@@ -39363,10 +39396,12 @@
 Landroid/telephony/PhoneNumberUtils;
 Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda0;
 Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda10;
+Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda13;
 Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda19;
 Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda1;
 Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda20;
 Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda24;
+Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda27;
 Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda28;
 Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda2;
 Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub$$ExternalSyntheticLambda32;
@@ -40629,6 +40664,8 @@
 Landroid/view/SurfaceView$$ExternalSyntheticLambda4;
 Landroid/view/SurfaceView$$ExternalSyntheticLambda5;
 Landroid/view/SurfaceView$$ExternalSyntheticLambda6;
+Landroid/view/SurfaceView$$ExternalSyntheticLambda7;
+Landroid/view/SurfaceView$$ExternalSyntheticLambda8;
 Landroid/view/SurfaceView$1;
 Landroid/view/SurfaceView$SurfaceViewPositionUpdateListener;
 Landroid/view/SurfaceView$SyncBufferTransactionCallback;
@@ -40657,6 +40694,7 @@
 Landroid/view/View$$ExternalSyntheticLambda0;
 Landroid/view/View$$ExternalSyntheticLambda10;
 Landroid/view/View$$ExternalSyntheticLambda11;
+Landroid/view/View$$ExternalSyntheticLambda12;
 Landroid/view/View$$ExternalSyntheticLambda13;
 Landroid/view/View$$ExternalSyntheticLambda1;
 Landroid/view/View$$ExternalSyntheticLambda2;
@@ -40772,6 +40810,7 @@
 Landroid/view/ViewRootImpl$3;
 Landroid/view/ViewRootImpl$4;
 Landroid/view/ViewRootImpl$5;
+Landroid/view/ViewRootImpl$6$$ExternalSyntheticLambda0;
 Landroid/view/ViewRootImpl$6;
 Landroid/view/ViewRootImpl$7;
 Landroid/view/ViewRootImpl$8$$ExternalSyntheticLambda0;
@@ -41053,7 +41092,9 @@
 Landroid/view/contentcapture/ViewNode$ViewNodeText;
 Landroid/view/contentcapture/ViewNode$ViewStructureImpl;
 Landroid/view/contentcapture/ViewNode;
+Landroid/view/displayhash/DisplayHash;
 Landroid/view/displayhash/DisplayHashManager;
+Landroid/view/displayhash/DisplayHashResultCallback;
 Landroid/view/inputmethod/BaseInputConnection;
 Landroid/view/inputmethod/CompletionInfo$1;
 Landroid/view/inputmethod/CompletionInfo;
@@ -41094,6 +41135,7 @@
 Landroid/view/inputmethod/InputMethodManager$$ExternalSyntheticLambda3;
 Landroid/view/inputmethod/InputMethodManager$1;
 Landroid/view/inputmethod/InputMethodManager$2;
+Landroid/view/inputmethod/InputMethodManager$DelegateImpl$$ExternalSyntheticLambda0;
 Landroid/view/inputmethod/InputMethodManager$DelegateImpl;
 Landroid/view/inputmethod/InputMethodManager$FinishedInputEventCallback;
 Landroid/view/inputmethod/InputMethodManager$H$$ExternalSyntheticLambda0;
@@ -41488,6 +41530,7 @@
 Landroid/widget/PopupWindow$3;
 Landroid/widget/PopupWindow$OnDismissListener;
 Landroid/widget/PopupWindow$PopupBackgroundView;
+Landroid/widget/PopupWindow$PopupDecorView$$ExternalSyntheticLambda0;
 Landroid/widget/PopupWindow$PopupDecorView$1$1;
 Landroid/widget/PopupWindow$PopupDecorView$1;
 Landroid/widget/PopupWindow$PopupDecorView$2;
@@ -41517,6 +41560,7 @@
 Landroid/widget/RemoteViews$2;
 Landroid/widget/RemoteViews$Action;
 Landroid/widget/RemoteViews$ActionException;
+Landroid/widget/RemoteViews$ApplicationInfoCache$$ExternalSyntheticLambda0;
 Landroid/widget/RemoteViews$ApplicationInfoCache;
 Landroid/widget/RemoteViews$AsyncApplyTask;
 Landroid/widget/RemoteViews$AttributeReflectionAction;
@@ -41671,6 +41715,7 @@
 Landroid/window/BackEvent;
 Landroid/window/ClientWindowFrames$1;
 Landroid/window/ClientWindowFrames;
+Landroid/window/CompatOnBackInvokedCallback;
 Landroid/window/ConfigurationHelper;
 Landroid/window/DisplayAreaAppearedInfo$1;
 Landroid/window/DisplayAreaAppearedInfo;
@@ -41682,6 +41727,7 @@
 Landroid/window/IDisplayAreaOrganizerController$Stub$Proxy;
 Landroid/window/IDisplayAreaOrganizerController$Stub;
 Landroid/window/IDisplayAreaOrganizerController;
+Landroid/window/IOnBackInvokedCallback$Stub$Proxy;
 Landroid/window/IOnBackInvokedCallback$Stub;
 Landroid/window/IOnBackInvokedCallback;
 Landroid/window/IRemoteTransition$Stub$Proxy;
@@ -41722,6 +41768,7 @@
 Landroid/window/SplashScreenView;
 Landroid/window/StartingWindowInfo$1;
 Landroid/window/StartingWindowInfo;
+Landroid/window/SurfaceSyncer$$ExternalSyntheticLambda1;
 Landroid/window/SurfaceSyncer$SyncBufferCallback;
 Landroid/window/SurfaceSyncer$SyncSet$1;
 Landroid/window/SurfaceSyncer$SyncSet;
@@ -41743,6 +41790,9 @@
 Landroid/window/WindowContextController;
 Landroid/window/WindowInfosListener$DisplayInfo;
 Landroid/window/WindowInfosListener;
+Landroid/window/WindowOnBackInvokedDispatcher$Checker;
+Landroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper$$ExternalSyntheticLambda0;
+Landroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper$$ExternalSyntheticLambda1;
 Landroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper$$ExternalSyntheticLambda2;
 Landroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper$$ExternalSyntheticLambda3;
 Landroid/window/WindowOnBackInvokedDispatcher$OnBackInvokedCallbackWrapper;
@@ -42493,6 +42543,7 @@
 Lcom/android/internal/graphics/ColorUtils;
 Lcom/android/internal/graphics/SfVsyncFrameCallbackProvider;
 Lcom/android/internal/graphics/cam/Cam;
+Lcom/android/internal/graphics/cam/CamUtils;
 Lcom/android/internal/graphics/cam/Frame;
 Lcom/android/internal/graphics/drawable/AnimationScaleListDrawable$AnimationScaleListState;
 Lcom/android/internal/graphics/drawable/AnimationScaleListDrawable;
@@ -42527,6 +42578,7 @@
 Lcom/android/internal/infra/ServiceConnector;
 Lcom/android/internal/infra/WhitelistHelper;
 Lcom/android/internal/inputmethod/EditableInputConnection;
+Lcom/android/internal/inputmethod/IAccessibilityInputMethodSession$Stub$Proxy;
 Lcom/android/internal/inputmethod/IAccessibilityInputMethodSession$Stub;
 Lcom/android/internal/inputmethod/IAccessibilityInputMethodSession;
 Lcom/android/internal/inputmethod/IInputContentUriToken;
@@ -42546,12 +42598,19 @@
 Lcom/android/internal/inputmethod/InputMethodPrivilegedOperations$OpsHolder;
 Lcom/android/internal/inputmethod/InputMethodPrivilegedOperations;
 Lcom/android/internal/inputmethod/InputMethodPrivilegedOperationsRegistry;
+Lcom/android/internal/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda19;
 Lcom/android/internal/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda25;
 Lcom/android/internal/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda28;
+Lcom/android/internal/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda2;
+Lcom/android/internal/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda34;
+Lcom/android/internal/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda39;
 Lcom/android/internal/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda3;
+Lcom/android/internal/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda40;
 Lcom/android/internal/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda41;
+Lcom/android/internal/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda44;
 Lcom/android/internal/inputmethod/RemoteInputConnectionImpl$$ExternalSyntheticLambda7;
 Lcom/android/internal/inputmethod/RemoteInputConnectionImpl$1;
+Lcom/android/internal/inputmethod/RemoteInputConnectionImpl$KnownAlwaysTrueEndBatchEditCache;
 Lcom/android/internal/inputmethod/RemoteInputConnectionImpl;
 Lcom/android/internal/inputmethod/SubtypeLocaleUtils;
 Lcom/android/internal/jank/FrameTracker$$ExternalSyntheticLambda0;
@@ -44799,8 +44858,11 @@
 Lcom/android/okhttp/internal/Version;
 Lcom/android/okhttp/internal/framed/FrameWriter;
 Lcom/android/okhttp/internal/framed/FramedConnection$Builder;
+Lcom/android/okhttp/internal/framed/FramedConnection$Listener$1;
 Lcom/android/okhttp/internal/framed/FramedConnection$Listener;
 Lcom/android/okhttp/internal/framed/FramedConnection;
+Lcom/android/okhttp/internal/framed/Header;
+Lcom/android/okhttp/internal/framed/PushObserver$1;
 Lcom/android/okhttp/internal/framed/PushObserver;
 Lcom/android/okhttp/internal/framed/Settings;
 Lcom/android/okhttp/internal/http/AuthenticatorAdapter;
@@ -46150,6 +46212,7 @@
 Ljava/lang/reflect/WildcardType;
 Ljava/math/BigDecimal$1;
 Ljava/math/BigDecimal$LongOverflow;
+Ljava/math/BigDecimal$StringBuilderHelper;
 Ljava/math/BigDecimal;
 Ljava/math/BigInteger$UnsafeHolder;
 Ljava/math/BigInteger;
@@ -46887,6 +46950,7 @@
 Ljava/util/ImmutableCollections$AbstractImmutableMap;
 Ljava/util/ImmutableCollections$AbstractImmutableSet;
 Ljava/util/ImmutableCollections$List12;
+Ljava/util/ImmutableCollections$ListItr;
 Ljava/util/ImmutableCollections$ListN;
 Ljava/util/ImmutableCollections$Map0;
 Ljava/util/ImmutableCollections$Map1;
@@ -46911,6 +46975,7 @@
 Ljava/util/LinkedHashMap$LinkedValues;
 Ljava/util/LinkedHashMap;
 Ljava/util/LinkedHashSet;
+Ljava/util/LinkedList$DescendingIterator;
 Ljava/util/LinkedList$ListItr;
 Ljava/util/LinkedList$Node;
 Ljava/util/LinkedList;
@@ -46962,6 +47027,7 @@
 Ljava/util/ResourceBundle$Control$CandidateListCache;
 Ljava/util/ResourceBundle$Control;
 Ljava/util/ResourceBundle$LoaderReference;
+Ljava/util/ResourceBundle$RBClassLoader;
 Ljava/util/ResourceBundle$SingleFormatControl;
 Ljava/util/ResourceBundle;
 Ljava/util/Scanner$1;
@@ -47019,6 +47085,7 @@
 Ljava/util/TreeMap$Values;
 Ljava/util/TreeMap;
 Ljava/util/TreeSet;
+Ljava/util/Tripwire$$ExternalSyntheticLambda0;
 Ljava/util/Tripwire;
 Ljava/util/UUID$Holder;
 Ljava/util/UUID;
@@ -47047,6 +47114,8 @@
 Ljava/util/concurrent/Callable;
 Ljava/util/concurrent/CancellationException;
 Ljava/util/concurrent/CompletableFuture$AltResult;
+Ljava/util/concurrent/CompletableFuture$AsyncRun;
+Ljava/util/concurrent/CompletableFuture$AsyncSupply;
 Ljava/util/concurrent/CompletableFuture$AsynchronousCompletionTask;
 Ljava/util/concurrent/CompletableFuture$Completion;
 Ljava/util/concurrent/CompletableFuture$Signaller;
@@ -47402,6 +47471,8 @@
 Ljava/util/stream/IntPipeline$$ExternalSyntheticLambda8;
 Ljava/util/stream/IntPipeline$4$1;
 Ljava/util/stream/IntPipeline$4;
+Ljava/util/stream/IntPipeline$9$1;
+Ljava/util/stream/IntPipeline$9;
 Ljava/util/stream/IntPipeline$Head;
 Ljava/util/stream/IntPipeline$StatelessOp;
 Ljava/util/stream/IntPipeline;
@@ -47474,6 +47545,7 @@
 Ljava/util/stream/ReferencePipeline$5;
 Ljava/util/stream/ReferencePipeline$6$1;
 Ljava/util/stream/ReferencePipeline$6;
+Ljava/util/stream/ReferencePipeline$7$1;
 Ljava/util/stream/ReferencePipeline$7;
 Ljava/util/stream/ReferencePipeline$Head;
 Ljava/util/stream/ReferencePipeline$StatefulOp;
@@ -47518,6 +47590,7 @@
 Ljava/util/stream/Streams;
 Ljava/util/stream/TerminalOp;
 Ljava/util/stream/TerminalSink;
+Ljava/util/stream/Tripwire$$ExternalSyntheticLambda0;
 Ljava/util/stream/Tripwire;
 Ljava/util/zip/Adler32;
 Ljava/util/zip/CRC32;
@@ -47874,17 +47947,24 @@
 Lorg/apache/harmony/xml/ExpatException;
 Lorg/apache/harmony/xml/ExpatParser$CurrentAttributes;
 Lorg/apache/harmony/xml/ExpatParser$ExpatLocator;
+Lorg/apache/harmony/xml/ExpatParser$ParseException;
 Lorg/apache/harmony/xml/ExpatParser;
 Lorg/apache/harmony/xml/ExpatReader;
+Lorg/apache/harmony/xml/dom/AttrImpl;
+Lorg/apache/harmony/xml/dom/CDATASectionImpl;
 Lorg/apache/harmony/xml/dom/CharacterDataImpl;
+Lorg/apache/harmony/xml/dom/CommentImpl;
 Lorg/apache/harmony/xml/dom/DOMImplementationImpl;
 Lorg/apache/harmony/xml/dom/DocumentImpl;
+Lorg/apache/harmony/xml/dom/DocumentTypeImpl;
 Lorg/apache/harmony/xml/dom/ElementImpl;
+Lorg/apache/harmony/xml/dom/EntityReferenceImpl;
 Lorg/apache/harmony/xml/dom/InnerNodeImpl;
 Lorg/apache/harmony/xml/dom/LeafNodeImpl;
 Lorg/apache/harmony/xml/dom/NodeImpl$1;
 Lorg/apache/harmony/xml/dom/NodeImpl;
 Lorg/apache/harmony/xml/dom/NodeListImpl;
+Lorg/apache/harmony/xml/dom/ProcessingInstructionImpl;
 Lorg/apache/harmony/xml/dom/TextImpl;
 Lorg/apache/harmony/xml/parsers/DocumentBuilderFactoryImpl;
 Lorg/apache/harmony/xml/parsers/DocumentBuilderImpl;
@@ -47935,15 +48015,20 @@
 Lorg/json/JSONStringer$Scope;
 Lorg/json/JSONStringer;
 Lorg/json/JSONTokener;
+Lorg/w3c/dom/Attr;
+Lorg/w3c/dom/CDATASection;
 Lorg/w3c/dom/CharacterData;
+Lorg/w3c/dom/Comment;
 Lorg/w3c/dom/DOMException;
 Lorg/w3c/dom/DOMImplementation;
 Lorg/w3c/dom/Document;
 Lorg/w3c/dom/DocumentFragment;
 Lorg/w3c/dom/DocumentType;
 Lorg/w3c/dom/Element;
+Lorg/w3c/dom/EntityReference;
 Lorg/w3c/dom/Node;
 Lorg/w3c/dom/NodeList;
+Lorg/w3c/dom/ProcessingInstruction;
 Lorg/w3c/dom/Text;
 Lorg/w3c/dom/TypeInfo;
 Lorg/xml/sax/AttributeList;
@@ -47959,6 +48044,7 @@
 Lorg/xml/sax/SAXException;
 Lorg/xml/sax/SAXNotRecognizedException;
 Lorg/xml/sax/SAXNotSupportedException;
+Lorg/xml/sax/SAXParseException;
 Lorg/xml/sax/XMLFilter;
 Lorg/xml/sax/XMLReader;
 Lorg/xml/sax/ext/DeclHandler;
@@ -47967,6 +48053,7 @@
 Lorg/xml/sax/ext/LexicalHandler;
 Lorg/xml/sax/helpers/AttributesImpl;
 Lorg/xml/sax/helpers/DefaultHandler;
+Lorg/xml/sax/helpers/LocatorImpl;
 Lorg/xml/sax/helpers/NamespaceSupport;
 Lorg/xml/sax/helpers/XMLFilterImpl;
 Lorg/xmlpull/v1/XmlPullParser;
@@ -48156,6 +48243,7 @@
 Lsun/security/util/AbstractAlgorithmConstraints$1;
 Lsun/security/util/AbstractAlgorithmConstraints;
 Lsun/security/util/AlgorithmDecomposer;
+Lsun/security/util/AnchorCertificates$1;
 Lsun/security/util/AnchorCertificates;
 Lsun/security/util/BitArray;
 Lsun/security/util/ByteArrayLexOrder;
@@ -48188,6 +48276,7 @@
 Lsun/security/util/MemoryCache$SoftCacheEntry;
 Lsun/security/util/MemoryCache;
 Lsun/security/util/ObjectIdentifier;
+Lsun/security/util/Resources;
 Lsun/security/util/ResourcesMgr$1;
 Lsun/security/util/ResourcesMgr;
 Lsun/security/util/SecurityConstants;
@@ -48789,10 +48878,12 @@
 [Lcom/android/okhttp/HttpUrl$Builder$ParseResult;
 [Lcom/android/okhttp/Protocol;
 [Lcom/android/okhttp/TlsVersion;
+[Lcom/android/okhttp/okio/ByteString;
 [Lcom/android/org/bouncycastle/asn1/ASN1Encodable;
 [Lcom/android/org/bouncycastle/asn1/ASN1Enumerated;
 [Lcom/android/org/bouncycastle/asn1/ASN1ObjectIdentifier;
 [Lcom/android/org/bouncycastle/asn1/ASN1OctetString;
+[Lcom/android/org/bouncycastle/asn1/ASN1Primitive;
 [Lcom/android/org/bouncycastle/crypto/params/DHParameters;
 [Lcom/android/org/bouncycastle/crypto/params/DSAParameters;
 [Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/x509/PEMUtil$Boundaries;
@@ -48981,6 +49072,7 @@
 [Z
 [[B
 [[C
+[[D
 [[F
 [[I
 [[J
diff --git a/config/preloaded-classes b/config/preloaded-classes
index f253051..20ea3cbe 100644
--- a/config/preloaded-classes
+++ b/config/preloaded-classes
@@ -1165,7 +1165,6 @@
 android.companion.ICompanionDeviceManager$Stub$Proxy
 android.companion.ICompanionDeviceManager$Stub
 android.companion.ICompanionDeviceManager
-android.companion.virtual.IVirtualDevice$Stub
 android.companion.virtual.IVirtualDevice
 android.companion.virtual.VirtualDeviceManager
 android.compat.Compatibility$1
@@ -3692,6 +3691,7 @@
 android.icu.number.NumberFormatter$GroupingStrategy
 android.icu.number.NumberFormatter$RoundingPriority
 android.icu.number.NumberFormatter$SignDisplay
+android.icu.number.NumberFormatter$TrailingZeroDisplay
 android.icu.number.NumberFormatter$UnitWidth
 android.icu.number.NumberFormatter
 android.icu.number.NumberFormatterImpl
@@ -9161,6 +9161,7 @@
 android.widget.inline.InlinePresentationSpec
 android.window.ClientWindowFrames$1
 android.window.ClientWindowFrames
+android.window.ConfigurationHelper
 android.window.DisplayAreaAppearedInfo$1
 android.window.DisplayAreaAppearedInfo
 android.window.DisplayAreaOrganizer$1
@@ -9190,6 +9191,7 @@
 android.window.IWindowOrganizerController$Stub$Proxy
 android.window.IWindowOrganizerController$Stub
 android.window.IWindowOrganizerController
+android.window.OnBackInvokedDispatcher
 android.window.SizeConfigurationBuckets$1
 android.window.SizeConfigurationBuckets
 android.window.SplashScreen$SplashScreenManagerGlobal$1
@@ -14588,7 +14590,6 @@
 java.util.concurrent.SynchronousQueue$Transferer
 java.util.concurrent.SynchronousQueue
 java.util.concurrent.ThreadFactory
-java.util.concurrent.ThreadLocalRandom
 java.util.concurrent.ThreadPoolExecutor$AbortPolicy
 java.util.concurrent.ThreadPoolExecutor$DiscardPolicy
 java.util.concurrent.ThreadPoolExecutor$Worker
@@ -15810,6 +15811,7 @@
 [Landroid.icu.impl.number.CompactData$CompactType;
 [Landroid.icu.impl.number.DecimalFormatProperties$ParseMode;
 [Landroid.icu.impl.number.Modifier$Signum;
+[Landroid.icu.impl.number.Modifier;
 [Landroid.icu.impl.number.Padder$PadPosition;
 [Landroid.icu.impl.number.PatternStringUtils$PatternSignType;
 [Landroid.icu.impl.units.MeasureUnitImpl$CompoundPart;
@@ -15830,6 +15832,11 @@
 [Landroid.icu.number.NumberSkeletonImpl$ParseState;
 [Landroid.icu.number.NumberSkeletonImpl$StemEnum;
 [Landroid.icu.text.AlphabeticIndex$Bucket$LabelType;
+[Landroid.icu.text.Bidi$IsoRun;
+[Landroid.icu.text.Bidi$Isolate;
+[Landroid.icu.text.Bidi$Opening;
+[Landroid.icu.text.Bidi$Point;
+[Landroid.icu.text.BidiRun;
 [Landroid.icu.text.BidiTransform$Mirroring;
 [Landroid.icu.text.BidiTransform$Order;
 [Landroid.icu.text.BidiTransform$ReorderingScheme;
@@ -15898,7 +15905,9 @@
 [Landroid.icu.util.Region$RegionType;
 [Landroid.icu.util.StringTrieBuilder$Option;
 [Landroid.icu.util.StringTrieBuilder$State;
+[Landroid.icu.util.TimeArrayTimeZoneRule;
 [Landroid.icu.util.TimeZone$SystemTimeZoneType;
+[Landroid.icu.util.TimeZoneRule;
 [Landroid.icu.util.ULocale$AvailableType;
 [Landroid.icu.util.ULocale$Category;
 [Landroid.icu.util.ULocale$Minimize;
diff --git a/core/api/test-current.txt b/core/api/test-current.txt
index 1796c7b..da5b88b 100644
--- a/core/api/test-current.txt
+++ b/core/api/test-current.txt
@@ -488,8 +488,6 @@
     field public static final int WINDOWING_MODE_FULLSCREEN = 1; // 0x1
     field public static final int WINDOWING_MODE_MULTI_WINDOW = 6; // 0x6
     field public static final int WINDOWING_MODE_PINNED = 2; // 0x2
-    field public static final int WINDOWING_MODE_SPLIT_SCREEN_PRIMARY = 3; // 0x3
-    field public static final int WINDOWING_MODE_SPLIT_SCREEN_SECONDARY = 4; // 0x4
     field public static final int WINDOWING_MODE_UNDEFINED = 0; // 0x0
   }
 
@@ -1863,7 +1861,6 @@
     method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS, android.Manifest.permission.QUERY_USERS}) public String getUserType();
     method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public java.util.List<android.content.pm.UserInfo> getUsers(boolean, boolean, boolean);
     method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public boolean hasBaseUserRestriction(@NonNull String, @NonNull android.os.UserHandle);
-    method public static boolean isGuestUserEphemeral();
     method public static boolean isSplitSystemUser();
     method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.content.pm.UserInfo preCreateUser(@NonNull String) throws android.os.UserManager.UserOperationException;
   }
@@ -3353,7 +3350,8 @@
     method @NonNull public java.util.concurrent.Executor getExecutor();
     method @NonNull public android.window.TaskFragmentOrganizerToken getOrganizerToken();
     method public void onTaskFragmentAppeared(@NonNull android.window.TaskFragmentInfo);
-    method public void onTaskFragmentError(@NonNull android.os.IBinder, @NonNull Throwable);
+    method @Deprecated public void onTaskFragmentError(@NonNull android.os.IBinder, @NonNull Throwable);
+    method public void onTaskFragmentError(@NonNull android.os.IBinder, @Nullable android.window.TaskFragmentInfo, int, @NonNull Throwable);
     method public void onTaskFragmentInfoChanged(@NonNull android.window.TaskFragmentInfo);
     method public void onTaskFragmentParentInfoChanged(@NonNull android.os.IBinder, @NonNull android.content.res.Configuration);
     method public void onTaskFragmentVanished(@NonNull android.window.TaskFragmentInfo);
@@ -3402,7 +3400,8 @@
     method @NonNull public android.window.WindowContainerTransaction reparentTasks(@Nullable android.window.WindowContainerToken, @Nullable android.window.WindowContainerToken, @Nullable int[], @Nullable int[], boolean);
     method @NonNull public android.window.WindowContainerTransaction scheduleFinishEnterPip(@NonNull android.window.WindowContainerToken, @NonNull android.graphics.Rect);
     method @NonNull public android.window.WindowContainerTransaction setActivityWindowingMode(@NonNull android.window.WindowContainerToken, int);
-    method @NonNull public android.window.WindowContainerTransaction setAdjacentRoots(@NonNull android.window.WindowContainerToken, @NonNull android.window.WindowContainerToken, boolean);
+    method @NonNull public android.window.WindowContainerTransaction setAdjacentRoots(@NonNull android.window.WindowContainerToken, @NonNull android.window.WindowContainerToken);
+    method @Deprecated @NonNull public android.window.WindowContainerTransaction setAdjacentRoots(@NonNull android.window.WindowContainerToken, @NonNull android.window.WindowContainerToken, boolean);
     method @NonNull public android.window.WindowContainerTransaction setAdjacentTaskFragments(@NonNull android.os.IBinder, @Nullable android.os.IBinder, @Nullable android.window.WindowContainerTransaction.TaskFragmentAdjacentParams);
     method @NonNull public android.window.WindowContainerTransaction setAppBounds(@NonNull android.window.WindowContainerToken, @NonNull android.graphics.Rect);
     method @NonNull public android.window.WindowContainerTransaction setBounds(@NonNull android.window.WindowContainerToken, @NonNull android.graphics.Rect);
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 7d5fb3e..4ea0c32 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -6433,6 +6433,20 @@
     }
 
     /**
+     * Ensures the activity's result is immediately returned to the caller when {@link #finish()}
+     * is invoked
+     *
+     * <p>Should be invoked alongside {@link #setResult(int, Intent)}, so the provided results are
+     * in place before finishing. Must only be invoked during MediaProjection setup.
+     *
+     * @hide
+     */
+    @RequiresPermission(android.Manifest.permission.MANAGE_MEDIA_PROJECTION)
+    public final void setForceSendResultForMediaProjection() {
+        ActivityClient.getInstance().setForceSendResultForMediaProjection(mToken);
+    }
+
+    /**
      * Call this to set the result that your activity will return to its
      * caller.
      *
diff --git a/core/java/android/app/ActivityClient.java b/core/java/android/app/ActivityClient.java
index 73678d9..482f456 100644
--- a/core/java/android/app/ActivityClient.java
+++ b/core/java/android/app/ActivityClient.java
@@ -17,6 +17,7 @@
 package android.app;
 
 import android.annotation.Nullable;
+import android.annotation.RequiresPermission;
 import android.content.ComponentName;
 import android.content.Intent;
 import android.content.res.Configuration;
@@ -184,6 +185,15 @@
         }
     }
 
+    @RequiresPermission(android.Manifest.permission.MANAGE_MEDIA_PROJECTION)
+    void setForceSendResultForMediaProjection(IBinder token) {
+        try {
+            getActivityClientController().setForceSendResultForMediaProjection(token);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
     public boolean isTopOfTask(IBinder token) {
         try {
             return getActivityClientController().isTopOfTask(token);
@@ -217,6 +227,18 @@
     }
 
     /**
+     * Returns the windowing mode of the task that hosts the activity, or {@code -1} if task is not
+     * found.
+     */
+    public int getTaskWindowingMode(IBinder activityToken) {
+        try {
+            return getActivityClientController().getTaskWindowingMode(activityToken);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
      * Returns the non-finishing activity token below in the same task if it belongs to the same
      * process.
      */
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index 5d1d225..449729e 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -2210,7 +2210,6 @@
             pw.print(((baseIntent.getFlags() & FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) != 0));
             pw.print(" activityType="); pw.print(activityTypeToString(getActivityType()));
             pw.print(" windowingMode="); pw.print(windowingModeToString(getWindowingMode()));
-            pw.print(" supportsSplitScreenMultiWindow="); pw.print(supportsSplitScreenMultiWindow);
             pw.print(" supportsMultiWindow=");
             pw.println(supportsMultiWindow);
             if (taskDescription != null) {
@@ -5125,7 +5124,7 @@
         Preconditions.checkNotNull(listener);
         Preconditions.checkNotNull(executor);
         try {
-            listener.init(mContext, executor, this);
+            listener.init(mContext, executor);
             getService().registerProcessObserver(listener.mObserver);
             // Notify upon first registration.
             executor.execute(() ->
diff --git a/core/java/android/app/ActivityOptions.java b/core/java/android/app/ActivityOptions.java
index 4e42672..61cca00 100644
--- a/core/java/android/app/ActivityOptions.java
+++ b/core/java/android/app/ActivityOptions.java
@@ -1149,7 +1149,6 @@
         opts.mLaunchIntoPipParams = new PictureInPictureParams.Builder(pictureInPictureParams)
                 .setIsLaunchIntoPip(true)
                 .build();
-        opts.mLaunchBounds = new Rect(pictureInPictureParams.getSourceRectHint());
         return opts;
     }
 
diff --git a/core/java/android/app/ActivityTaskManager.java b/core/java/android/app/ActivityTaskManager.java
index 6fc0c26..f17d5b7 100644
--- a/core/java/android/app/ActivityTaskManager.java
+++ b/core/java/android/app/ActivityTaskManager.java
@@ -16,6 +16,8 @@
 
 package android.app;
 
+import static android.view.Display.INVALID_DISPLAY;
+
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.RequiresPermission;
@@ -369,7 +371,8 @@
      * @hide
      */
     public List<ActivityManager.RunningTaskInfo> getTasks(int maxNum) {
-        return getTasks(maxNum, false /* filterForVisibleRecents */);
+        return getTasks(maxNum, false /* filterForVisibleRecents */, false /* keepIntentExtra */,
+                INVALID_DISPLAY);
     }
 
     /**
@@ -378,7 +381,8 @@
      */
     public List<ActivityManager.RunningTaskInfo> getTasks(
             int maxNum, boolean filterOnlyVisibleRecents) {
-        return getTasks(maxNum, filterOnlyVisibleRecents, false /* keepIntentExtra */);
+        return getTasks(maxNum, filterOnlyVisibleRecents, false /* keepIntentExtra */,
+                INVALID_DISPLAY);
     }
 
     /**
@@ -388,8 +392,20 @@
      */
     public List<ActivityManager.RunningTaskInfo> getTasks(
             int maxNum, boolean filterOnlyVisibleRecents, boolean keepIntentExtra) {
+        return getTasks(maxNum, filterOnlyVisibleRecents, keepIntentExtra, INVALID_DISPLAY);
+    }
+
+    /**
+     * @return List of running tasks that can be filtered by visibility and displayId in recents
+     * and keep intent extra.
+     * @param displayId the target display id, or {@link INVALID_DISPLAY} not to filter by displayId
+     * @hide
+     */
+    public List<ActivityManager.RunningTaskInfo> getTasks(
+            int maxNum, boolean filterOnlyVisibleRecents, boolean keepIntentExtra, int displayId) {
         try {
-            return getService().getTasks(maxNum, filterOnlyVisibleRecents, keepIntentExtra);
+            return getService().getTasks(maxNum, filterOnlyVisibleRecents, keepIntentExtra,
+                    displayId);
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index ae8809d..f384fa9 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -3423,26 +3423,12 @@
         }
     }
 
-    /**
-     * Returns {@code true} if the {@link android.app.ActivityManager.ProcessState} of the current
-     * process is cached.
-     */
-    @Override
-    @VisibleForTesting
-    public boolean isCachedProcessState() {
-        synchronized (mAppThread) {
-            return mLastProcessState >= ActivityManager.PROCESS_STATE_CACHED_ACTIVITY;
-        }
-    }
-
     @Override
     public void updateProcessState(int processState, boolean fromIpc) {
-        final boolean wasCached;
         synchronized (mAppThread) {
             if (mLastProcessState == processState) {
                 return;
             }
-            wasCached = isCachedProcessState();
             mLastProcessState = processState;
             updateVmProcessState(processState);
             if (localLOGV) {
@@ -3450,22 +3436,6 @@
                         + (fromIpc ? " (from ipc" : ""));
             }
         }
-
-        // Handle the pending configuration if the process state is changed from cached to
-        // non-cached. Except the case where there is a launching activity because the
-        // LaunchActivityItem will handle it.
-        if (wasCached && !isCachedProcessState() && mNumLaunchingActivities.get() == 0) {
-            final Configuration pendingConfig =
-                    mConfigurationController.getPendingConfiguration(false /* clearPending */);
-            if (pendingConfig == null) {
-                return;
-            }
-            if (Looper.myLooper() == mH.getLooper()) {
-                handleConfigurationChanged(pendingConfig);
-            } else {
-                sendMessage(H.CONFIGURATION_CHANGED, pendingConfig);
-            }
-        }
     }
 
     /** Update VM state based on ActivityManager.PROCESS_STATE_* constants. */
@@ -5893,20 +5863,20 @@
 
         final boolean movedToDifferentDisplay = isDifferentDisplay(activity.getDisplayId(),
                 displayId);
-        final Configuration currentConfig = activity.mCurrentConfig;
-        final int diff = currentConfig.diffPublicOnly(newConfig);
-        final boolean hasPublicConfigChange = diff != 0;
+        final Configuration currentResConfig = activity.getResources().getConfiguration();
+        final int diff = currentResConfig.diffPublicOnly(newConfig);
+        final boolean hasPublicResConfigChange = diff != 0;
         final ActivityClientRecord r = getActivityClient(activityToken);
         // TODO(b/173090263): Use diff instead after the improvement of AssetManager and
         // ResourcesImpl constructions.
-        final boolean shouldUpdateResources = hasPublicConfigChange
-                || shouldUpdateResources(activityToken, currentConfig, newConfig, amOverrideConfig,
-                movedToDifferentDisplay, hasPublicConfigChange);
-        final boolean shouldReportChange = shouldReportChange(diff, currentConfig, newConfig,
+        final boolean shouldUpdateResources = hasPublicResConfigChange
+                || shouldUpdateResources(activityToken, currentResConfig, newConfig,
+                amOverrideConfig, movedToDifferentDisplay, hasPublicResConfigChange);
+        final boolean shouldReportChange = shouldReportChange(activity.mCurrentConfig, newConfig,
                 r != null ? r.mSizeConfigurations : null,
                 activity.mActivityInfo.getRealConfigChanged());
         // Nothing significant, don't proceed with updating and reporting.
-        if (!shouldUpdateResources) {
+        if (!shouldUpdateResources && !shouldReportChange) {
             return null;
         }
 
@@ -5926,9 +5896,6 @@
                 amOverrideConfig, contextThemeWrapperOverrideConfig);
         mResourcesManager.updateResourcesForActivity(activityToken, finalOverrideConfig, displayId);
 
-        activity.mConfigChangeFlags = 0;
-        activity.mCurrentConfig = new Configuration(newConfig);
-
         // Apply the ContextThemeWrapper override if necessary.
         // NOTE: Make sure the configurations are not modified, as they are treated as immutable
         // in many places.
@@ -5939,8 +5906,10 @@
             activity.dispatchMovedToDisplay(displayId, configToReport);
         }
 
+        activity.mConfigChangeFlags = 0;
         if (shouldReportChange) {
             activity.mCalled = false;
+            activity.mCurrentConfig = new Configuration(newConfig);
             activity.onConfigurationChanged(configToReport);
             if (!activity.mCalled) {
                 throw new SuperNotCalledException("Activity " + activity.getLocalClassName() +
@@ -5955,8 +5924,6 @@
      * Returns {@code true} if {@link Activity#onConfigurationChanged(Configuration)} should be
      * dispatched.
      *
-     * @param publicDiff Usually computed by {@link Configuration#diffPublicOnly(Configuration)}.
-     *                   This parameter is to prevent we compute it again.
      * @param currentConfig The current configuration cached in {@link Activity#mCurrentConfig}.
      *                      It is {@code null} before the first config update from the server side.
      * @param newConfig The updated {@link Configuration}
@@ -5965,9 +5932,10 @@
      * @return {@code true} if the config change should be reported to the Activity
      */
     @VisibleForTesting
-    public static boolean shouldReportChange(int publicDiff, @Nullable Configuration currentConfig,
+    public static boolean shouldReportChange(@Nullable Configuration currentConfig,
             @NonNull Configuration newConfig, @Nullable SizeConfigurationBuckets sizeBuckets,
             int handledConfigChanges) {
+        final int publicDiff = currentConfig.diffPublicOnly(newConfig);
         // Don't report the change if there's no public diff between current and new config.
         if (publicDiff == 0) {
             return false;
diff --git a/core/java/android/app/ActivityThreadInternal.java b/core/java/android/app/ActivityThreadInternal.java
index b9ad5c3..72506b9 100644
--- a/core/java/android/app/ActivityThreadInternal.java
+++ b/core/java/android/app/ActivityThreadInternal.java
@@ -32,8 +32,6 @@
 
     boolean isInDensityCompatMode();
 
-    boolean isCachedProcessState();
-
     Application getApplication();
 
     ArrayList<ComponentCallbacks2> collectComponentCallbacks(boolean includeUiContexts);
diff --git a/core/java/android/app/BroadcastOptions.java b/core/java/android/app/BroadcastOptions.java
index 56f8760..f0e1448 100644
--- a/core/java/android/app/BroadcastOptions.java
+++ b/core/java/android/app/BroadcastOptions.java
@@ -53,6 +53,7 @@
     private String[] mRequireNoneOfPermissions;
     private long mRequireCompatChangeId = CHANGE_INVALID;
     private boolean mRequireCompatChangeEnabled = true;
+    private boolean mIsAlarmBroadcast = false;
     private long mIdForResponseEvent;
 
     /**
@@ -149,6 +150,13 @@
             "android:broadcast.requireCompatChangeEnabled";
 
     /**
+     * Corresponds to {@link #setAlarmBroadcast(boolean)}
+     * @hide
+     */
+    public static final String KEY_ALARM_BROADCAST =
+            "android:broadcast.is_alarm";
+
+    /**
      * @hide
      * @deprecated Use {@link android.os.PowerExemptionManager#
      * TEMPORARY_ALLOW_LIST_TYPE_FOREGROUND_SERVICE_ALLOWED} instead.
@@ -207,6 +215,7 @@
         mRequireCompatChangeId = opts.getLong(KEY_REQUIRE_COMPAT_CHANGE_ID, CHANGE_INVALID);
         mRequireCompatChangeEnabled = opts.getBoolean(KEY_REQUIRE_COMPAT_CHANGE_ENABLED, true);
         mIdForResponseEvent = opts.getLong(KEY_ID_FOR_RESPONSE_EVENT);
+        mIsAlarmBroadcast = opts.getBoolean(KEY_ALARM_BROADCAST, false);
     }
 
     /**
@@ -498,6 +507,27 @@
         mRequireCompatChangeEnabled = true;
     }
 
+    /**
+     * When set, this broadcast will be understood as having originated from an
+     * alarm going off.  Only the OS itself can use this option; uses by other
+     * senders will be ignored.
+     * @hide
+     *
+     * @param senderIsAlarm Whether the broadcast is alarm-triggered.
+     */
+    public void setAlarmBroadcast(boolean senderIsAlarm) {
+        mIsAlarmBroadcast = senderIsAlarm;
+    }
+
+    /**
+     * Did this broadcast originate from an alarm triggering?
+     * @return true if this broadcast is an alarm message, false otherwise
+     * @hide
+     */
+    public boolean isAlarmBroadcast() {
+        return mIsAlarmBroadcast;
+    }
+
     /** {@hide} */
     public long getRequireCompatChangeId() {
         return mRequireCompatChangeId;
@@ -560,6 +590,9 @@
             b.putInt(KEY_TEMPORARY_APP_ALLOWLIST_REASON_CODE, mTemporaryAppAllowlistReasonCode);
             b.putString(KEY_TEMPORARY_APP_ALLOWLIST_REASON, mTemporaryAppAllowlistReason);
         }
+        if (mIsAlarmBroadcast) {
+            b.putBoolean(KEY_ALARM_BROADCAST, true);
+        }
         if (mMinManifestReceiverApiLevel != 0) {
             b.putInt(KEY_MIN_MANIFEST_RECEIVER_API_LEVEL, mMinManifestReceiverApiLevel);
         }
diff --git a/core/java/android/app/ConfigurationController.java b/core/java/android/app/ConfigurationController.java
index 1a77b65..18dc1ce1 100644
--- a/core/java/android/app/ConfigurationController.java
+++ b/core/java/android/app/ConfigurationController.java
@@ -124,12 +124,6 @@
      * @param config The new configuration.
      */
     void handleConfigurationChanged(@NonNull Configuration config) {
-        if (mActivityThread.isCachedProcessState()) {
-            updatePendingConfiguration(config);
-            // If the process is in a cached state, delay the handling until the process is no
-            // longer cached.
-            return;
-        }
         Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "configChanged");
         handleConfigurationChanged(config, null /* compat */);
         Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
diff --git a/core/java/android/app/HomeVisibilityListener.java b/core/java/android/app/HomeVisibilityListener.java
index 57d868b..ca20648 100644
--- a/core/java/android/app/HomeVisibilityListener.java
+++ b/core/java/android/app/HomeVisibilityListener.java
@@ -16,16 +16,17 @@
 
 package android.app;
 
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
+import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS;
+import static android.view.Display.DEFAULT_DISPLAY;
+
 import android.annotation.SuppressLint;
 import android.annotation.SystemApi;
 import android.annotation.TestApi;
-import android.content.ComponentName;
 import android.content.Context;
 import android.os.Binder;
 
-import java.util.ArrayList;
 import java.util.List;
-import java.util.Objects;
 import java.util.concurrent.Executor;
 
 /**
@@ -39,20 +40,21 @@
 @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
 @TestApi
 public abstract class HomeVisibilityListener {
-    private Context mContext;
-    private ActivityManager mActivityManager;
+    private ActivityTaskManager mActivityTaskManager;
     private Executor mExecutor;
+    private int mMaxScanTasksForHomeVisibility;
     /** @hide */
     android.app.IProcessObserver.Stub mObserver;
     /** @hide */
     boolean mIsHomeActivityVisible;
 
     /** @hide */
-    void init(Context context, Executor executor, ActivityManager activityManager) {
-        mContext = context;
-        mActivityManager = activityManager;
-        mIsHomeActivityVisible = isHomeActivityVisible();
+    void init(Context context, Executor executor) {
+        mActivityTaskManager = ActivityTaskManager.getInstance();
         mExecutor = executor;
+        mMaxScanTasksForHomeVisibility = context.getResources().getInteger(
+                com.android.internal.R.integer.config_maxScanTasksForHomeVisibility);
+        mIsHomeActivityVisible = isHomeActivityVisible();
     }
 
     /**
@@ -91,22 +93,21 @@
     }
 
     private boolean isHomeActivityVisible() {
-        List<ActivityManager.RunningTaskInfo> tasks = mActivityManager.getRunningTasks(1);
-        if (tasks == null || tasks.isEmpty()) {
+        List<ActivityManager.RunningTaskInfo> tasksTopToBottom = mActivityTaskManager.getTasks(
+                mMaxScanTasksForHomeVisibility, /* filterOnlyVisibleRecents= */ true,
+                /* keepIntentExtra= */ false, DEFAULT_DISPLAY);
+        if (tasksTopToBottom == null || tasksTopToBottom.isEmpty()) {
             return false;
         }
 
-        String top = tasks.get(0).topActivity.getPackageName();
-        if (top == null) {
-            return false;
+        for (int i = 0, taskSize = tasksTopToBottom.size(); i < taskSize; ++i) {
+            ActivityManager.RunningTaskInfo task = tasksTopToBottom.get(i);
+            if (!task.isVisible()
+                    || (task.baseIntent.getFlags() & FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) != 0) {
+                continue;
+            }
+            return task.getActivityType() == ACTIVITY_TYPE_HOME;
         }
-
-        // We can assume that the screen is idle if the home application is in the foreground.
-        ComponentName defaultHomeComponent = mContext.getPackageManager()
-                .getHomeActivities(new ArrayList<>());
-        if (defaultHomeComponent == null) return false;
-
-        String defaultHomePackage = defaultHomeComponent.getPackageName();
-        return Objects.equals(top, defaultHomePackage);
+        return false;
     }
 }
diff --git a/core/java/android/app/IActivityClientController.aidl b/core/java/android/app/IActivityClientController.aidl
index 0138186..f5e5cda 100644
--- a/core/java/android/app/IActivityClientController.aidl
+++ b/core/java/android/app/IActivityClientController.aidl
@@ -67,11 +67,18 @@
     boolean finishActivityAffinity(in IBinder token);
     /** Finish all activities that were started for result from the specified activity. */
     void finishSubActivity(in IBinder token, in String resultWho, int requestCode);
+    /**
+     * Indicates that when the activity finsihes, the result should be immediately sent to the
+     * originating activity. Must only be invoked during MediaProjection setup.
+     */
+    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.MANAGE_MEDIA_PROJECTION)")
+    void setForceSendResultForMediaProjection(in IBinder token);
 
     boolean isTopOfTask(in IBinder token);
     boolean willActivityBeVisible(in IBinder token);
     int getDisplayId(in IBinder activityToken);
     int getTaskForActivity(in IBinder token, in boolean onlyRoot);
+    int getTaskWindowingMode(in IBinder activityToken);
     IBinder getActivityTokenBelow(IBinder token);
     ComponentName getCallingActivity(in IBinder token);
     String getCallingPackage(in IBinder token);
diff --git a/core/java/android/app/IActivityTaskManager.aidl b/core/java/android/app/IActivityTaskManager.aidl
index fe75dd3..02be051 100644
--- a/core/java/android/app/IActivityTaskManager.aidl
+++ b/core/java/android/app/IActivityTaskManager.aidl
@@ -69,6 +69,7 @@
 import android.service.voice.IVoiceInteractionSession;
 import android.view.IRecentsAnimationRunner;
 import android.view.IRemoteAnimationRunner;
+import android.view.IWindowFocusObserver;
 import android.view.RemoteAnimationDefinition;
 import android.view.RemoteAnimationAdapter;
 import android.window.IWindowOrganizerController;
@@ -157,7 +158,7 @@
     boolean removeTask(int taskId);
     void removeAllVisibleRecentTasks();
     List<ActivityManager.RunningTaskInfo> getTasks(int maxNum, boolean filterOnlyVisibleRecents,
-            boolean keepIntentExtra);
+            boolean keepIntentExtra, int displayId);
     void moveTaskToFront(in IApplicationThread app, in String callingPackage, int task,
             int flags, in Bundle options);
     ParceledListSlice<ActivityManager.RecentTaskInfo> getRecentTasks(int maxNum, int flags,
@@ -263,9 +264,12 @@
      * @param taskId the id of the task to retrieve the sAutoapshots for
      * @param isLowResolution if set, if the snapshot needs to be loaded from disk, this will load
      *                          a reduced resolution of it, which is much faster
+     * @param takeSnapshotIfNeeded if set, call {@link #takeTaskSnapshot} to trigger the snapshot
+                                   if no cache exists.
      * @return a graphic buffer representing a screenshot of a task
      */
-    android.window.TaskSnapshot getTaskSnapshot(int taskId, boolean isLowResolution);
+    android.window.TaskSnapshot getTaskSnapshot(
+            int taskId, boolean isLowResolution, boolean takeSnapshotIfNeeded);
 
     /**
      * @param taskId the id of the task to take a snapshot of
@@ -349,6 +353,8 @@
      * Prepare the back navigation in the server. This setups the leashed for sysui to animate
      * the back gesture and returns the data needed for the animation.
      * @param requestAnimation true if the caller wishes to animate the back navigation
+     * @param focusObserver a remote callback to nofify shell when the focused window lost focus.
      */
-    android.window.BackNavigationInfo startBackNavigation(in boolean requestAnimation);
+    android.window.BackNavigationInfo startBackNavigation(in boolean requestAnimation,
+            in IWindowFocusObserver focusObserver);
 }
diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java
index 8984c42..556058b 100644
--- a/core/java/android/app/Instrumentation.java
+++ b/core/java/android/app/Instrumentation.java
@@ -783,6 +783,17 @@
             return null;
         }
 
+        /**
+         * This is called after starting an Activity and provides the result code that defined in
+         * {@link ActivityManager}, like {@link ActivityManager#START_SUCCESS}.
+         *
+         * @param result the result code that returns after starting an Activity.
+         * @param bOptions the bundle generated from {@link ActivityOptions} that originally
+         *                 being used to start the Activity.
+         * @hide
+         */
+        public void onStartActivityResult(int result, @NonNull Bundle bOptions) {}
+
         final boolean match(Context who,
                             Activity activity,
                             Intent intent) {
@@ -1344,6 +1355,28 @@
         return apk.getAppFactory();
     }
 
+    /**
+     * This should be called before {@link #checkStartActivityResult(int, Object)}, because
+     * exceptions might be thrown while checking the results.
+     */
+    private void notifyStartActivityResult(int result, @Nullable Bundle options) {
+        if (mActivityMonitors == null) {
+            return;
+        }
+        synchronized (mSync) {
+            final int size = mActivityMonitors.size();
+            for (int i = 0; i < size; i++) {
+                final ActivityMonitor am = mActivityMonitors.get(i);
+                if (am.ignoreMatchingSpecificIntents()) {
+                    if (options == null) {
+                        options = ActivityOptions.makeBasic().toBundle();
+                    }
+                    am.onStartActivityResult(result, options);
+                }
+            }
+        }
+    }
+
     private void prePerformCreate(Activity activity) {
         if (mWaitingActivities != null) {
             synchronized (mSync) {
@@ -1802,6 +1835,7 @@
                     who.getOpPackageName(), who.getAttributionTag(), intent,
                     intent.resolveTypeIfNeeded(who.getContentResolver()), token,
                     target != null ? target.mEmbeddedID : null, requestCode, 0, null, options);
+            notifyStartActivityResult(result, options);
             checkStartActivityResult(result, intent);
         } catch (RemoteException e) {
             throw new RuntimeException("Failure from system", e);
@@ -1876,6 +1910,7 @@
             int result = ActivityTaskManager.getService().startActivities(whoThread,
                     who.getOpPackageName(), who.getAttributionTag(), intents, resolvedTypes,
                     token, options, userId);
+            notifyStartActivityResult(result, options);
             checkStartActivityResult(result, intents[0]);
             return result;
         } catch (RemoteException e) {
@@ -1947,6 +1982,7 @@
                     who.getOpPackageName(), who.getAttributionTag(), intent,
                     intent.resolveTypeIfNeeded(who.getContentResolver()), token, target,
                     requestCode, 0, null, options);
+            notifyStartActivityResult(result, options);
             checkStartActivityResult(result, intent);
         } catch (RemoteException e) {
             throw new RuntimeException("Failure from system", e);
@@ -2017,6 +2053,7 @@
                     who.getOpPackageName(), who.getAttributionTag(), intent,
                     intent.resolveTypeIfNeeded(who.getContentResolver()), token, resultWho,
                     requestCode, 0, null, options, user.getIdentifier());
+            notifyStartActivityResult(result, options);
             checkStartActivityResult(result, intent);
         } catch (RemoteException e) {
             throw new RuntimeException("Failure from system", e);
@@ -2068,6 +2105,7 @@
                             token, target != null ? target.mEmbeddedID : null,
                             requestCode, 0, null, options,
                             ignoreTargetSecurity, userId);
+            notifyStartActivityResult(result, options);
             checkStartActivityResult(result, intent);
         } catch (RemoteException e) {
             throw new RuntimeException("Failure from system", e);
@@ -2115,6 +2153,7 @@
             int result = appTask.startActivity(whoThread.asBinder(), who.getOpPackageName(),
                     who.getAttributionTag(), intent,
                     intent.resolveTypeIfNeeded(who.getContentResolver()), options);
+            notifyStartActivityResult(result, options);
             checkStartActivityResult(result, intent);
         } catch (RemoteException e) {
             throw new RuntimeException("Failure from system", e);
diff --git a/core/java/android/app/ResourcesManager.java b/core/java/android/app/ResourcesManager.java
index 2a1883d..d275c83 100644
--- a/core/java/android/app/ResourcesManager.java
+++ b/core/java/android/app/ResourcesManager.java
@@ -365,8 +365,8 @@
             @NonNull Configuration config) {
         config.touchscreen = Configuration.TOUCHSCREEN_NOTOUCH;
         config.densityDpi = dm.densityDpi;
-        config.screenWidthDp = (int) (dm.widthPixels / dm.density);
-        config.screenHeightDp = (int) (dm.heightPixels / dm.density);
+        config.screenWidthDp = (int) (dm.widthPixels / dm.density + 0.5f);
+        config.screenHeightDp = (int) (dm.heightPixels / dm.density + 0.5f);
         int sl = Configuration.resetScreenLayout(config.screenLayout);
         if (dm.widthPixels > dm.heightPixels) {
             config.orientation = Configuration.ORIENTATION_LANDSCAPE;
diff --git a/core/java/android/app/TaskInfo.java b/core/java/android/app/TaskInfo.java
index 7910f1a..b09463e 100644
--- a/core/java/android/app/TaskInfo.java
+++ b/core/java/android/app/TaskInfo.java
@@ -140,13 +140,6 @@
     public LocusId mTopActivityLocusId;
 
     /**
-     * True if the task can go in the split-screen primary stack.
-     * @hide
-     */
-    @UnsupportedAppUsage
-    public boolean supportsSplitScreenMultiWindow;
-
-    /**
      * Whether this task supports multi windowing modes based on the device settings and the
      * root activity resizability and configuration.
      * @hide
@@ -499,7 +492,6 @@
         lastActiveTime = source.readLong();
 
         taskDescription = source.readTypedObject(ActivityManager.TaskDescription.CREATOR);
-        supportsSplitScreenMultiWindow = source.readBoolean();
         supportsMultiWindow = source.readBoolean();
         resizeMode = source.readInt();
         configuration.readFromParcel(source);
@@ -546,7 +538,6 @@
         dest.writeLong(lastActiveTime);
 
         dest.writeTypedObject(taskDescription, flags);
-        dest.writeBoolean(supportsSplitScreenMultiWindow);
         dest.writeBoolean(supportsMultiWindow);
         dest.writeInt(resizeMode);
         configuration.writeToParcel(dest, flags);
@@ -584,7 +575,6 @@
                 + " realActivity=" + realActivity
                 + " numActivities=" + numActivities
                 + " lastActiveTime=" + lastActiveTime
-                + " supportsSplitScreenMultiWindow=" + supportsSplitScreenMultiWindow
                 + " supportsMultiWindow=" + supportsMultiWindow
                 + " resizeMode=" + resizeMode
                 + " isResizeable=" + isResizeable
diff --git a/core/java/android/app/WindowConfiguration.java b/core/java/android/app/WindowConfiguration.java
index e96a986..397c8e0 100644
--- a/core/java/android/app/WindowConfiguration.java
+++ b/core/java/android/app/WindowConfiguration.java
@@ -104,19 +104,6 @@
     public static final int WINDOWING_MODE_FULLSCREEN = 1;
     /** Always on-top (always visible). of other siblings in its parent container. */
     public static final int WINDOWING_MODE_PINNED = 2;
-    /** The primary container driving the screen to be in split-screen mode. */
-    // TODO: Remove once split-screen is migrated to wm-shell.
-    public static final int WINDOWING_MODE_SPLIT_SCREEN_PRIMARY = 3;
-    /**
-     * The containers adjacent to the {@link #WINDOWING_MODE_SPLIT_SCREEN_PRIMARY} container in
-     * split-screen mode.
-     * NOTE: Containers launched with the windowing mode with APIs like
-     * {@link ActivityOptions#setLaunchWindowingMode(int)} will be launched in
-     * {@link #WINDOWING_MODE_FULLSCREEN} if the display isn't currently in split-screen windowing
-     * mode
-     */
-    // TODO: Remove once split-screen is migrated to wm-shell.
-    public static final int WINDOWING_MODE_SPLIT_SCREEN_SECONDARY = 4;
     /** Can be freely resized within its parent container. */
     // TODO: Remove once freeform is migrated to wm-shell.
     public static final int WINDOWING_MODE_FREEFORM = 5;
@@ -129,8 +116,6 @@
             WINDOWING_MODE_FULLSCREEN,
             WINDOWING_MODE_MULTI_WINDOW,
             WINDOWING_MODE_PINNED,
-            WINDOWING_MODE_SPLIT_SCREEN_PRIMARY,
-            WINDOWING_MODE_SPLIT_SCREEN_SECONDARY,
             WINDOWING_MODE_FREEFORM,
     })
     public @interface WindowingMode {}
@@ -475,6 +460,15 @@
         setDisplayWindowingMode(WINDOWING_MODE_UNDEFINED);
     }
 
+    /** @hide */
+    public void scale(float scale) {
+        mBounds.scale(scale);
+        mMaxBounds.scale(scale);
+        if (mAppBounds != null) {
+            mAppBounds.scale(scale);
+        }
+    }
+
     /**
      * Copies the fields from delta into this Configuration object, keeping
      * track of which ones have changed. Any undefined fields in {@code delta}
@@ -890,9 +884,8 @@
     }
 
     /**
-     * Returns true if this container can be put in either
-     * {@link #WINDOWING_MODE_SPLIT_SCREEN_PRIMARY} or
-     * {@link #WINDOWING_MODE_SPLIT_SCREEN_SECONDARY} windowing modes based on its current state.
+     * Returns true if this container can be put in {@link #WINDOWING_MODE_MULTI_WINDOW}
+     * windowing mode based on its current state.
      * @hide
      */
     public boolean supportSplitScreenWindowingMode() {
@@ -911,8 +904,6 @@
             case WINDOWING_MODE_FULLSCREEN: return "fullscreen";
             case WINDOWING_MODE_MULTI_WINDOW: return "multi-window";
             case WINDOWING_MODE_PINNED: return "pinned";
-            case WINDOWING_MODE_SPLIT_SCREEN_PRIMARY: return "split-screen-primary";
-            case WINDOWING_MODE_SPLIT_SCREEN_SECONDARY: return "split-screen-secondary";
             case WINDOWING_MODE_FREEFORM: return "freeform";
         }
         return String.valueOf(windowingMode);
diff --git a/core/java/android/app/search/SearchAction.java b/core/java/android/app/search/SearchAction.java
index 9e40e7e..0c4508a 100644
--- a/core/java/android/app/search/SearchAction.java
+++ b/core/java/android/app/search/SearchAction.java
@@ -67,7 +67,7 @@
     private final UserHandle mUserHandle;
 
     @Nullable
-    private Bundle mExtras;
+    private final Bundle mExtras;
 
     SearchAction(Parcel in) {
         mId = in.readString();
@@ -99,7 +99,7 @@
         mPendingIntent = pendingIntent;
         mIntent = intent;
         mUserHandle = userHandle;
-        mExtras = extras;
+        mExtras = extras != null ? extras : new Bundle();
 
         if (mPendingIntent == null && mIntent == null) {
             throw new IllegalStateException("At least one type of intent should be available.");
diff --git a/core/java/android/app/search/SearchTarget.java b/core/java/android/app/search/SearchTarget.java
index a590a5d..a3874f7 100644
--- a/core/java/android/app/search/SearchTarget.java
+++ b/core/java/android/app/search/SearchTarget.java
@@ -185,7 +185,7 @@
         mShortcutInfo = shortcutInfo;
         mAppWidgetProviderInfo = appWidgetProviderInfo;
         mSliceUri = sliceUri;
-        mExtras = extras;
+        mExtras = extras != null ? extras : new Bundle();
 
         int published = 0;
         if (mSearchAction != null) published++;
diff --git a/core/java/android/app/usage/UsageStats.java b/core/java/android/app/usage/UsageStats.java
index d61abc6..e213c93 100644
--- a/core/java/android/app/usage/UsageStats.java
+++ b/core/java/android/app/usage/UsageStats.java
@@ -293,6 +293,17 @@
     }
 
     /**
+     * Returns the last time the package was used - defined by the latest of
+     * mLastTimeUsed, mLastTimeVisible, mLastTimeForegroundServiceUsed, or mLastTimeComponentUsed.
+     * @hide
+     */
+    public long getLastTimePackageUsed() {
+        return Math.max(mLastTimeUsed,
+                        Math.max(mLastTimeVisible,
+                                 Math.max(mLastTimeForegroundServiceUsed, mLastTimeComponentUsed)));
+    }
+
+    /**
      * Returns the number of times the app was launched as an activity from outside of the app.
      * Excludes intra-app activity transitions.
      * @hide
diff --git a/core/java/android/app/usage/UsageStatsManager.java b/core/java/android/app/usage/UsageStatsManager.java
index c013fcd..1dfc7d4 100644
--- a/core/java/android/app/usage/UsageStatsManager.java
+++ b/core/java/android/app/usage/UsageStatsManager.java
@@ -220,6 +220,11 @@
      */
     public static final int REASON_SUB_DEFAULT_APP_UPDATE = 0x0001;
     /**
+     * The app was restored.
+     * @hide
+     */
+    public static final int REASON_SUB_DEFAULT_APP_RESTORED = 0x0002;
+    /**
      * The app was interacted with in some way by the system.
      * @hide
      */
@@ -1209,6 +1214,9 @@
                     case REASON_SUB_DEFAULT_APP_UPDATE:
                         sb.append("-au");
                         break;
+                    case REASON_SUB_DEFAULT_APP_RESTORED:
+                        sb.append("-ar");
+                        break;
                 }
                 break;
             case REASON_MAIN_FORCED_BY_SYSTEM:
diff --git a/core/java/android/appwidget/AppWidgetHostView.java b/core/java/android/appwidget/AppWidgetHostView.java
index 8be2b48..e3bca9c 100644
--- a/core/java/android/appwidget/AppWidgetHostView.java
+++ b/core/java/android/appwidget/AppWidgetHostView.java
@@ -103,7 +103,6 @@
     private boolean mOnLightBackground;
     private SizeF mCurrentSize = null;
     private RemoteViews.ColorResources mColorResources = null;
-    private SparseIntArray mColorMapping = null;
     // Stores the last remote views last inflated.
     private RemoteViews mLastInflatedRemoteViews = null;
     private long mLastInflatedRemoteViewsId = -1;
@@ -900,11 +899,19 @@
      * {@link android.R.color#system_neutral1_500}.
      */
     public void setColorResources(@NonNull SparseIntArray colorMapping) {
-        if (mColorMapping != null && isSameColorMapping(mColorMapping, colorMapping)) {
+        if (mColorResources != null
+                && isSameColorMapping(mColorResources.getColorMapping(), colorMapping)) {
             return;
         }
-        mColorMapping = colorMapping.clone();
-        mColorResources = RemoteViews.ColorResources.create(mContext, mColorMapping);
+        setColorResources(RemoteViews.ColorResources.create(mContext, colorMapping));
+    }
+
+    /** @hide **/
+    public void setColorResources(RemoteViews.ColorResources colorResources) {
+        if (colorResources == mColorResources) {
+            return;
+        }
+        mColorResources = colorResources;
         mColorMappingChanged = true;
         mViewMode = VIEW_MODE_NOINIT;
         reapplyLastRemoteViews();
@@ -934,7 +941,6 @@
     public void resetColorResources() {
         if (mColorResources != null) {
             mColorResources = null;
-            mColorMapping = null;
             mColorMappingChanged = true;
             mViewMode = VIEW_MODE_NOINIT;
             reapplyLastRemoteViews();
diff --git a/core/java/android/appwidget/AppWidgetManager.java b/core/java/android/appwidget/AppWidgetManager.java
index 18c6381..a432b8d 100644
--- a/core/java/android/appwidget/AppWidgetManager.java
+++ b/core/java/android/appwidget/AppWidgetManager.java
@@ -1130,7 +1130,9 @@
      * @param intent        The intent of the service which will be providing the data to the
      *                      RemoteViewsAdapter.
      * @param connection    The callback interface to be notified when a connection is made or lost.
-     * @param flags         Flags used for binding to the service
+     * @param flags         Flags used for binding to the service. Currently only
+     *                     {@link Context#BIND_AUTO_CREATE} and
+     *                     {@link Context#BIND_FOREGROUND_SERVICE_WHILE_AWAKE} are supported.
      *
      * @see Context#getServiceDispatcher(ServiceConnection, Handler, int)
      * @hide
diff --git a/core/java/android/companion/AssociationInfo.java b/core/java/android/companion/AssociationInfo.java
index f7f0235..93748f8 100644
--- a/core/java/android/companion/AssociationInfo.java
+++ b/core/java/android/companion/AssociationInfo.java
@@ -55,6 +55,14 @@
 
     private final boolean mSelfManaged;
     private final boolean mNotifyOnDeviceNearby;
+
+    /**
+     * Indicates that the association has been revoked (removed), but we keep the association
+     * record for final clean up (e.g. removing the app from the list of the role holders).
+     *
+     * @see CompanionDeviceManager#disassociate(int)
+     */
+    private final boolean mRevoked;
     private final long mTimeApprovedMs;
     /**
      * A long value indicates the last time connected reported by selfManaged devices
@@ -71,7 +79,7 @@
     public AssociationInfo(int id, @UserIdInt int userId, @NonNull String packageName,
             @Nullable MacAddress macAddress, @Nullable CharSequence displayName,
             @Nullable String deviceProfile, boolean selfManaged, boolean notifyOnDeviceNearby,
-            long timeApprovedMs, long lastTimeConnectedMs) {
+            boolean revoked, long timeApprovedMs, long lastTimeConnectedMs) {
         if (id <= 0) {
             throw new IllegalArgumentException("Association ID should be greater than 0");
         }
@@ -91,6 +99,7 @@
 
         mSelfManaged = selfManaged;
         mNotifyOnDeviceNearby = notifyOnDeviceNearby;
+        mRevoked = revoked;
         mTimeApprovedMs = timeApprovedMs;
         mLastTimeConnectedMs = lastTimeConnectedMs;
     }
@@ -176,6 +185,14 @@
     }
 
     /**
+     * @return if the association has been revoked (removed).
+     * @hide
+     */
+    public boolean isRevoked() {
+        return mRevoked;
+    }
+
+    /**
      * @return the last time self reported disconnected for selfManaged only.
      * @hide
      */
@@ -244,6 +261,7 @@
                 + ", mDeviceProfile='" + mDeviceProfile + '\''
                 + ", mSelfManaged=" + mSelfManaged
                 + ", mNotifyOnDeviceNearby=" + mNotifyOnDeviceNearby
+                + ", mRevoked=" + mRevoked
                 + ", mTimeApprovedMs=" + new Date(mTimeApprovedMs)
                 + ", mLastTimeConnectedMs=" + (
                     mLastTimeConnectedMs == Long.MAX_VALUE
@@ -260,6 +278,7 @@
                 && mUserId == that.mUserId
                 && mSelfManaged == that.mSelfManaged
                 && mNotifyOnDeviceNearby == that.mNotifyOnDeviceNearby
+                && mRevoked == that.mRevoked
                 && mTimeApprovedMs == that.mTimeApprovedMs
                 && mLastTimeConnectedMs == that.mLastTimeConnectedMs
                 && Objects.equals(mPackageName, that.mPackageName)
@@ -271,7 +290,7 @@
     @Override
     public int hashCode() {
         return Objects.hash(mId, mUserId, mPackageName, mDeviceMacAddress, mDisplayName,
-                mDeviceProfile, mSelfManaged, mNotifyOnDeviceNearby, mTimeApprovedMs,
+                mDeviceProfile, mSelfManaged, mNotifyOnDeviceNearby, mRevoked, mTimeApprovedMs,
                 mLastTimeConnectedMs);
     }
 
@@ -293,6 +312,7 @@
 
         dest.writeBoolean(mSelfManaged);
         dest.writeBoolean(mNotifyOnDeviceNearby);
+        dest.writeBoolean(mRevoked);
         dest.writeLong(mTimeApprovedMs);
         dest.writeLong(mLastTimeConnectedMs);
     }
@@ -309,6 +329,7 @@
 
         mSelfManaged = in.readBoolean();
         mNotifyOnDeviceNearby = in.readBoolean();
+        mRevoked = in.readBoolean();
         mTimeApprovedMs = in.readLong();
         mLastTimeConnectedMs = in.readLong();
     }
@@ -352,11 +373,13 @@
         @NonNull
         private final AssociationInfo mOriginalInfo;
         private boolean mNotifyOnDeviceNearby;
+        private boolean mRevoked;
         private long mLastTimeConnectedMs;
 
         private Builder(@NonNull AssociationInfo info) {
             mOriginalInfo = info;
             mNotifyOnDeviceNearby = info.mNotifyOnDeviceNearby;
+            mRevoked = info.mRevoked;
             mLastTimeConnectedMs = info.mLastTimeConnectedMs;
         }
 
@@ -388,6 +411,17 @@
         }
 
         /**
+         * Should only be used by the CompanionDeviceManagerService.
+         * @hide
+         */
+        @Override
+        @NonNull
+        public Builder setRevoked(boolean revoked) {
+            mRevoked = revoked;
+            return this;
+        }
+
+        /**
          * @hide
          */
         @NonNull
@@ -401,6 +435,7 @@
                     mOriginalInfo.mDeviceProfile,
                     mOriginalInfo.mSelfManaged,
                     mNotifyOnDeviceNearby,
+                    mRevoked,
                     mOriginalInfo.mTimeApprovedMs,
                     mLastTimeConnectedMs
             );
@@ -433,5 +468,12 @@
          */
         @NonNull
         Builder setLastTimeConnected(long lastTimeConnectedMs);
+
+        /**
+         * Should only be used by the CompanionDeviceManagerService.
+         * @hide
+         */
+        @NonNull
+        Builder setRevoked(boolean revoked);
     }
 }
diff --git a/core/java/android/content/ClipboardManager.java b/core/java/android/content/ClipboardManager.java
index d41cda1..85af877 100644
--- a/core/java/android/content/ClipboardManager.java
+++ b/core/java/android/content/ClipboardManager.java
@@ -129,7 +129,11 @@
         try {
             Objects.requireNonNull(clip);
             clip.prepareToLeaveProcess(true);
-            mService.setPrimaryClip(clip, mContext.getOpPackageName(), mContext.getUserId());
+            mService.setPrimaryClip(
+                    clip,
+                    mContext.getOpPackageName(),
+                    mContext.getAttributionTag(),
+                    mContext.getUserId());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -154,7 +158,11 @@
             Objects.requireNonNull(sourcePackage);
             clip.prepareToLeaveProcess(true);
             mService.setPrimaryClipAsPackage(
-                    clip, mContext.getOpPackageName(), mContext.getUserId(), sourcePackage);
+                    clip,
+                    mContext.getOpPackageName(),
+                    mContext.getAttributionTag(),
+                    mContext.getUserId(),
+                    sourcePackage);
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -167,7 +175,10 @@
      */
     public void clearPrimaryClip() {
         try {
-            mService.clearPrimaryClip(mContext.getOpPackageName(), mContext.getUserId());
+            mService.clearPrimaryClip(
+                    mContext.getOpPackageName(),
+                    mContext.getAttributionTag(),
+                    mContext.getUserId());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -183,24 +194,29 @@
      */
     public @Nullable ClipData getPrimaryClip() {
         try {
-            return mService.getPrimaryClip(mContext.getOpPackageName(), mContext.getUserId());
+            return mService.getPrimaryClip(
+                    mContext.getOpPackageName(),
+                    mContext.getAttributionTag(),
+                    mContext.getUserId());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
     }
 
     /**
-     * Returns a description of the current primary clip on the clipboard
-     * but not a copy of its data.
+     * Returns a description of the current primary clip on the clipboard but not a copy of its
+     * data.
      *
-     * <em>If the application is not the default IME or does not have input focus this return
+     * <p><em>If the application is not the default IME or does not have input focus this return
      * {@code null}.</em>
      *
      * @see #setPrimaryClip(ClipData)
      */
     public @Nullable ClipDescription getPrimaryClipDescription() {
         try {
-            return mService.getPrimaryClipDescription(mContext.getOpPackageName(),
+            return mService.getPrimaryClipDescription(
+                    mContext.getOpPackageName(),
+                    mContext.getAttributionTag(),
                     mContext.getUserId());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
@@ -215,7 +231,10 @@
      */
     public boolean hasPrimaryClip() {
         try {
-            return mService.hasPrimaryClip(mContext.getOpPackageName(), mContext.getUserId());
+            return mService.hasPrimaryClip(
+                    mContext.getOpPackageName(),
+                    mContext.getAttributionTag(),
+                    mContext.getUserId());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -226,7 +245,9 @@
             if (mPrimaryClipChangedListeners.isEmpty()) {
                 try {
                     mService.addPrimaryClipChangedListener(
-                            mPrimaryClipChangedServiceListener, mContext.getOpPackageName(),
+                            mPrimaryClipChangedServiceListener,
+                            mContext.getOpPackageName(),
+                            mContext.getAttributionTag(),
                             mContext.getUserId());
                 } catch (RemoteException e) {
                     throw e.rethrowFromSystemServer();
@@ -242,7 +263,9 @@
             if (mPrimaryClipChangedListeners.isEmpty()) {
                 try {
                     mService.removePrimaryClipChangedListener(
-                            mPrimaryClipChangedServiceListener, mContext.getOpPackageName(),
+                            mPrimaryClipChangedServiceListener,
+                            mContext.getOpPackageName(),
+                            mContext.getAttributionTag(),
                             mContext.getUserId());
                 } catch (RemoteException e) {
                     throw e.rethrowFromSystemServer();
@@ -280,7 +303,10 @@
     @Deprecated
     public boolean hasText() {
         try {
-            return mService.hasClipboardText(mContext.getOpPackageName(), mContext.getUserId());
+            return mService.hasClipboardText(
+                    mContext.getOpPackageName(),
+                    mContext.getAttributionTag(),
+                    mContext.getUserId());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
@@ -297,7 +323,10 @@
     @RequiresPermission(Manifest.permission.SET_CLIP_SOURCE)
     public String getPrimaryClipSource() {
         try {
-            return mService.getPrimaryClipSource(mContext.getOpPackageName(), mContext.getUserId());
+            return mService.getPrimaryClipSource(
+                    mContext.getOpPackageName(),
+                    mContext.getAttributionTag(),
+                    mContext.getUserId());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
         }
diff --git a/core/java/android/content/IClipboard.aidl b/core/java/android/content/IClipboard.aidl
index 102b8e7..46ece2b 100644
--- a/core/java/android/content/IClipboard.aidl
+++ b/core/java/android/content/IClipboard.aidl
@@ -26,22 +26,22 @@
  * {@hide}
  */
 interface IClipboard {
-    void setPrimaryClip(in ClipData clip, String callingPackage, int userId);
-    void setPrimaryClipAsPackage(in ClipData clip, String callingPackage, int userId,
+    void setPrimaryClip(in ClipData clip, String callingPackage, String attributionTag, int userId);
+    void setPrimaryClipAsPackage(in ClipData clip, String callingPackage, String attributionTag, int userId,
             String sourcePackage);
-    void clearPrimaryClip(String callingPackage, int userId);
-    ClipData getPrimaryClip(String pkg, int userId);
-    ClipDescription getPrimaryClipDescription(String callingPackage, int userId);
-    boolean hasPrimaryClip(String callingPackage, int userId);
+    void clearPrimaryClip(String callingPackage, String attributionTag, int userId);
+    ClipData getPrimaryClip(String pkg, String attributionTag, int userId);
+    ClipDescription getPrimaryClipDescription(String callingPackage, String attributionTag, int userId);
+    boolean hasPrimaryClip(String callingPackage, String attributionTag, int userId);
     void addPrimaryClipChangedListener(in IOnPrimaryClipChangedListener listener,
-            String callingPackage, int userId);
+            String callingPackage, String attributionTag, int userId);
     void removePrimaryClipChangedListener(in IOnPrimaryClipChangedListener listener,
-            String callingPackage, int userId);
+            String callingPackage, String attributionTag, int userId);
 
     /**
      * Returns true if the clipboard contains text; false otherwise.
      */
-    boolean hasClipboardText(String callingPackage, int userId);
+    boolean hasClipboardText(String callingPackage, String attributionTag, int userId);
 
-    String getPrimaryClipSource(String callingPackage, int userId);
+    String getPrimaryClipSource(String callingPackage, String attributionTag, int userId);
 }
diff --git a/core/java/android/content/integrity/AppInstallMetadata.java b/core/java/android/content/integrity/AppInstallMetadata.java
index 9874890..91b0007 100644
--- a/core/java/android/content/integrity/AppInstallMetadata.java
+++ b/core/java/android/content/integrity/AppInstallMetadata.java
@@ -129,9 +129,18 @@
     @Override
     public String toString() {
         return String.format(
-                "AppInstallMetadata { PackageName = %s, AppCerts = %s, InstallerName = %s,"
-                    + " InstallerCerts = %s, VersionCode = %d, PreInstalled = %b, StampPresent ="
-                    + " %b, StampVerified = %b, StampTrusted = %b, StampCert = %s }",
+                "AppInstallMetadata {"
+                    + " PackageName = %s,"
+                    + " AppCerts = %s,"
+                    + " AppCertsLineage = %s,"
+                    + " InstallerName = %s,"
+                    + " InstallerCerts = %s,"
+                    + " VersionCode = %d,"
+                    + " PreInstalled = %b,"
+                    + " StampPresent = %b,"
+                    + " StampVerified = %b,"
+                    + " StampTrusted = %b,"
+                    + " StampCert = %s }",
                 mPackageName,
                 mAppCertificates,
                 mAppCertificateLineage,
diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java
index 0673b3a..a3d595ef 100644
--- a/core/java/android/content/pm/ActivityInfo.java
+++ b/core/java/android/content/pm/ActivityInfo.java
@@ -106,6 +106,24 @@
     public @interface LaunchMode {
     }
 
+    /** @hide */
+    public static String launchModeToString(@LaunchMode int launchMode) {
+        switch(launchMode) {
+            case LAUNCH_MULTIPLE:
+                return "LAUNCH_MULTIPLE";
+            case LAUNCH_SINGLE_TOP:
+                return "LAUNCH_SINGLE_TOP";
+            case LAUNCH_SINGLE_TASK:
+                return "LAUNCH_SINGLE_TASK";
+            case LAUNCH_SINGLE_INSTANCE:
+                return "LAUNCH_SINGLE_INSTANCE";
+            case LAUNCH_SINGLE_INSTANCE_PER_TASK:
+                return "LAUNCH_SINGLE_INSTANCE_PER_TASK";
+            default:
+                return "unknown=" + launchMode;
+        }
+    }
+
     /**
      * The launch mode style requested by the activity.  From the
      * {@link android.R.attr#launchMode} attribute.
@@ -1585,7 +1603,7 @@
                     + " persistableMode=" + persistableModeToString());
         }
         if (launchMode != 0 || flags != 0 || privateFlags != 0 || theme != 0) {
-            pw.println(prefix + "launchMode=" + launchMode
+            pw.println(prefix + "launchMode=" + launchModeToString(launchMode)
                     + " flags=0x" + Integer.toHexString(flags)
                     + " privateFlags=0x" + Integer.toHexString(privateFlags)
                     + " theme=0x" + Integer.toHexString(theme));
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 44dc28d..c15b3e0 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -713,6 +713,15 @@
         if (!checkUseInstalledOrHidden(flags, state, p.applicationInfo) || !p.isMatch(flags)) {
             return null;
         }
+
+        final ApplicationInfo applicationInfo;
+        if ((flags & (PackageManager.GET_ACTIVITIES | PackageManager.GET_RECEIVERS
+                | PackageManager.GET_SERVICES | PackageManager.GET_PROVIDERS)) != 0) {
+            applicationInfo = generateApplicationInfo(p, flags, state, userId);
+        } else {
+            applicationInfo = null;
+        }
+
         PackageInfo pi = new PackageInfo();
         pi.packageName = p.packageName;
         pi.splitNames = p.splitNames;
@@ -773,7 +782,7 @@
                         if (PackageManager.APP_DETAILS_ACTIVITY_CLASS_NAME.equals(a.className)) {
                             continue;
                         }
-                        res[num++] = generateActivityInfo(a, flags, state, userId);
+                        res[num++] = generateActivityInfo(a, flags, state, userId, applicationInfo);
                     }
                 }
                 pi.activities = ArrayUtils.trimToSize(res, num);
@@ -787,7 +796,7 @@
                 for (int i = 0; i < N; i++) {
                     final Activity a = p.receivers.get(i);
                     if (isMatch(state, a.info, flags)) {
-                        res[num++] = generateActivityInfo(a, flags, state, userId);
+                        res[num++] = generateActivityInfo(a, flags, state, userId, applicationInfo);
                     }
                 }
                 pi.receivers = ArrayUtils.trimToSize(res, num);
@@ -801,7 +810,7 @@
                 for (int i = 0; i < N; i++) {
                     final Service s = p.services.get(i);
                     if (isMatch(state, s.info, flags)) {
-                        res[num++] = generateServiceInfo(s, flags, state, userId);
+                        res[num++] = generateServiceInfo(s, flags, state, userId, applicationInfo);
                     }
                 }
                 pi.services = ArrayUtils.trimToSize(res, num);
@@ -815,7 +824,8 @@
                 for (int i = 0; i < N; i++) {
                     final Provider pr = p.providers.get(i);
                     if (isMatch(state, pr.info, flags)) {
-                        res[num++] = generateProviderInfo(pr, flags, state, userId);
+                        res[num++] = generateProviderInfo(pr, flags, state, userId,
+                                applicationInfo);
                     }
                 }
                 pi.providers = ArrayUtils.trimToSize(res, num);
@@ -8216,6 +8226,11 @@
     @UnsupportedAppUsage
     public static final ActivityInfo generateActivityInfo(Activity a, int flags,
             FrameworkPackageUserState state, int userId) {
+        return generateActivityInfo(a, flags, state, userId, null);
+    }
+
+    private static ActivityInfo generateActivityInfo(Activity a, int flags,
+            FrameworkPackageUserState state, int userId, ApplicationInfo applicationInfo) {
         if (a == null) return null;
         if (!checkUseInstalledOrHidden(flags, state, a.owner.applicationInfo)) {
             return null;
@@ -8227,7 +8242,12 @@
         // Make shallow copies so we can store the metadata safely
         ActivityInfo ai = new ActivityInfo(a.info);
         ai.metaData = a.metaData;
-        ai.applicationInfo = generateApplicationInfo(a.owner, flags, state, userId);
+
+        if (applicationInfo == null) {
+            applicationInfo = generateApplicationInfo(a.owner, flags, state, userId);
+        }
+        ai.applicationInfo = applicationInfo;
+
         return ai;
     }
 
@@ -8308,6 +8328,11 @@
     @UnsupportedAppUsage
     public static final ServiceInfo generateServiceInfo(Service s, int flags,
             FrameworkPackageUserState state, int userId) {
+        return generateServiceInfo(s, flags, state, userId, null);
+    }
+
+    private static ServiceInfo generateServiceInfo(Service s, int flags,
+            FrameworkPackageUserState state, int userId, ApplicationInfo applicationInfo) {
         if (s == null) return null;
         if (!checkUseInstalledOrHidden(flags, state, s.owner.applicationInfo)) {
             return null;
@@ -8319,7 +8344,12 @@
         // Make shallow copies so we can store the metadata safely
         ServiceInfo si = new ServiceInfo(s.info);
         si.metaData = s.metaData;
-        si.applicationInfo = generateApplicationInfo(s.owner, flags, state, userId);
+
+        if (applicationInfo == null) {
+            applicationInfo = generateApplicationInfo(s.owner, flags, state, userId);
+        }
+        si.applicationInfo = applicationInfo;
+
         return si;
     }
 
@@ -8406,13 +8436,18 @@
     @UnsupportedAppUsage
     public static final ProviderInfo generateProviderInfo(Provider p, int flags,
             FrameworkPackageUserState state, int userId) {
+        return generateProviderInfo(p, flags, state, userId, null);
+    }
+
+    private static ProviderInfo generateProviderInfo(Provider p, int flags,
+            FrameworkPackageUserState state, int userId, ApplicationInfo applicationInfo) {
         if (p == null) return null;
         if (!checkUseInstalledOrHidden(flags, state, p.owner.applicationInfo)) {
             return null;
         }
         if (!copyNeeded(flags, p.owner, state, p.metaData, userId)
                 && ((flags & PackageManager.GET_URI_PERMISSION_PATTERNS) != 0
-                        || p.info.uriPermissionPatterns == null)) {
+                || p.info.uriPermissionPatterns == null)) {
             updateApplicationInfo(p.info.applicationInfo, flags, state);
             return p.info;
         }
@@ -8422,7 +8457,12 @@
         if ((flags & PackageManager.GET_URI_PERMISSION_PATTERNS) == 0) {
             pi.uriPermissionPatterns = null;
         }
-        pi.applicationInfo = generateApplicationInfo(p.owner, flags, state, userId);
+
+        if (applicationInfo == null) {
+            applicationInfo = generateApplicationInfo(p.owner, flags, state, userId);
+        }
+        pi.applicationInfo = applicationInfo;
+
         return pi;
     }
 
diff --git a/core/java/android/content/pm/UserInfo.java b/core/java/android/content/pm/UserInfo.java
index d6e13ac..9baa6ba 100644
--- a/core/java/android/content/pm/UserInfo.java
+++ b/core/java/android/content/pm/UserInfo.java
@@ -143,6 +143,22 @@
     public static final int FLAG_PROFILE = 0x00001000;
 
     /**
+     * Indicates that this user is created in ephemeral mode via
+     * {@link IUserManager} create user.
+     *
+     * When a user is created with {@link #FLAG_EPHEMERAL}, {@link #FLAG_EPHEMERAL_ON_CREATE}
+     * is set internally within the user manager.
+     *
+     * When {@link #FLAG_EPHEMERAL_ON_CREATE} is set {@link IUserManager.setUserEphemeral}
+     * has no effect because a user that was created ephemeral can never be made non-ephemeral.
+     *
+     * {@link #FLAG_EPHEMERAL_ON_CREATE} should NOT be set by client's of user manager
+     *
+     * @hide
+     */
+    public static final int FLAG_EPHEMERAL_ON_CREATE = 0x00002000;
+
+    /**
      * @hide
      */
     @IntDef(flag = true, prefix = "FLAG_", value = {
@@ -158,7 +174,8 @@
             FLAG_DEMO,
             FLAG_FULL,
             FLAG_SYSTEM,
-            FLAG_PROFILE
+            FLAG_PROFILE,
+            FLAG_EPHEMERAL_ON_CREATE
     })
     @Retention(RetentionPolicy.SOURCE)
     public @interface UserInfoFlag {
diff --git a/core/java/android/content/res/CompatibilityInfo.java b/core/java/android/content/res/CompatibilityInfo.java
index 439c639..e146bb9 100644
--- a/core/java/android/content/res/CompatibilityInfo.java
+++ b/core/java/android/content/res/CompatibilityInfo.java
@@ -420,7 +420,10 @@
          * Translate a Rect in screen coordinates into the app window's coordinates.
          */
         @UnsupportedAppUsage
-        public void translateRectInScreenToAppWindow(Rect rect) {
+        public void translateRectInScreenToAppWindow(@Nullable Rect rect) {
+            if (rect == null) {
+                return;
+            }
             rect.scale(applicationInvertedScale);
         }
 
@@ -548,12 +551,7 @@
         if (isScalingRequired()) {
             float invertedRatio = applicationInvertedScale;
             inoutConfig.densityDpi = (int)((inoutConfig.densityDpi * invertedRatio) + .5f);
-            inoutConfig.windowConfiguration.getMaxBounds().scale(invertedRatio);
-            inoutConfig.windowConfiguration.getBounds().scale(invertedRatio);
-            final Rect appBounds = inoutConfig.windowConfiguration.getAppBounds();
-            if (appBounds != null) {
-                appBounds.scale(invertedRatio);
-            }
+            inoutConfig.windowConfiguration.scale(invertedRatio);
         }
     }
 
diff --git a/core/java/android/hardware/biometrics/BiometricConstants.java b/core/java/android/hardware/biometrics/BiometricConstants.java
index 99e4feb..943eee4 100644
--- a/core/java/android/hardware/biometrics/BiometricConstants.java
+++ b/core/java/android/hardware/biometrics/BiometricConstants.java
@@ -157,6 +157,11 @@
     int BIOMETRIC_ERROR_SENSOR_PRIVACY_ENABLED = 18;
 
     /**
+     * A power press stopped this biometric operation.
+     * @hide
+     */
+    int BIOMETRIC_ERROR_POWER_PRESSED = 19;
+    /**
      * This constant is only used by SystemUI. It notifies SystemUI that authentication was paused
      * because the authentication attempt was unsuccessful.
      * @hide
diff --git a/core/java/android/hardware/biometrics/BiometricFaceConstants.java b/core/java/android/hardware/biometrics/BiometricFaceConstants.java
index fd46f24..2b62b98 100644
--- a/core/java/android/hardware/biometrics/BiometricFaceConstants.java
+++ b/core/java/android/hardware/biometrics/BiometricFaceConstants.java
@@ -70,6 +70,7 @@
             BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED,
             BIOMETRIC_ERROR_RE_ENROLL,
             FACE_ERROR_UNKNOWN,
+            BIOMETRIC_ERROR_POWER_PRESSED,
     })
     @Retention(RetentionPolicy.SOURCE)
     @interface FaceError {}
@@ -184,6 +185,12 @@
     int FACE_ERROR_UNKNOWN = 17;
 
     /**
+     * A power press stopped this biometric operation.
+     * @hide
+     */
+    int BIOMETRIC_ERROR_POWER_PRESSED = 19;
+
+    /**
      * Vendor codes received from the HAL start at 0. Codes that the framework exposes to keyguard
      * append this value for some reason. We should probably remove this and just send the actual
      * vendor code.
diff --git a/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java b/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java
index d8ebb62..98f571b 100644
--- a/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java
+++ b/core/java/android/hardware/biometrics/BiometricFingerprintConstants.java
@@ -61,7 +61,8 @@
             BIOMETRIC_ERROR_RE_ENROLL,
             BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED,
             FINGERPRINT_ERROR_UNKNOWN,
-            FINGERPRINT_ERROR_BAD_CALIBRATION})
+            FINGERPRINT_ERROR_BAD_CALIBRATION,
+            BIOMETRIC_ERROR_POWER_PRESSED})
     @Retention(RetentionPolicy.SOURCE)
     @interface FingerprintError {}
 
@@ -188,6 +189,12 @@
     int FINGERPRINT_ERROR_BAD_CALIBRATION = 18;
 
     /**
+     * A power press stopped this biometric operation.
+     * @hide
+     */
+    int BIOMETRIC_ERROR_POWER_PRESSED = 19;
+
+    /**
      * @hide
      */
     @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
diff --git a/core/java/android/hardware/biometrics/BiometricStateListener.java b/core/java/android/hardware/biometrics/BiometricStateListener.java
index 2ac0c1e..b167cc6 100644
--- a/core/java/android/hardware/biometrics/BiometricStateListener.java
+++ b/core/java/android/hardware/biometrics/BiometricStateListener.java
@@ -46,6 +46,14 @@
     public @interface State {
     }
 
+    // The sensor received a touch.
+    public static final int ACTION_SENSOR_TOUCH = 0;
+
+    @IntDef({ACTION_SENSOR_TOUCH})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface Action {
+    }
+
     /**
      * Defines behavior in response to state update
      * @param newState new state of the biometric sensor
@@ -53,6 +61,13 @@
     public void onStateChanged(@BiometricStateListener.State int newState) {
     }
 
+
+    /**
+     * Invoked when a biometric action has occurred.
+     */
+    public void onBiometricAction(@BiometricStateListener.Action int action) {
+    }
+
     /**
      * Invoked when enrollment state changes for the specified user
      */
diff --git a/core/java/android/hardware/biometrics/IBiometricStateListener.aidl b/core/java/android/hardware/biometrics/IBiometricStateListener.aidl
index 5bdced0..6bb170d 100644
--- a/core/java/android/hardware/biometrics/IBiometricStateListener.aidl
+++ b/core/java/android/hardware/biometrics/IBiometricStateListener.aidl
@@ -22,5 +22,6 @@
  */
 oneway interface IBiometricStateListener {
     void onStateChanged(int newState);
+    void onBiometricAction(int action);
     void onEnrollmentsChanged(int userId, int sensorId, boolean hasEnrollments);
 }
diff --git a/core/java/android/hardware/display/AmbientDisplayConfiguration.java b/core/java/android/hardware/display/AmbientDisplayConfiguration.java
index 7d8f2ff..8c71b36 100644
--- a/core/java/android/hardware/display/AmbientDisplayConfiguration.java
+++ b/core/java/android/hardware/display/AmbientDisplayConfiguration.java
@@ -89,7 +89,8 @@
 
     /** @hide */
     public boolean pulseOnNotificationAvailable() {
-        return ambientDisplayAvailable();
+        return mContext.getResources().getBoolean(R.bool.config_pulseOnNotificationsAvailable)
+                && ambientDisplayAvailable();
     }
 
     /** @hide */
diff --git a/core/java/android/hardware/display/DisplayManager.java b/core/java/android/hardware/display/DisplayManager.java
index 69c6ba9..8bc11cb 100644
--- a/core/java/android/hardware/display/DisplayManager.java
+++ b/core/java/android/hardware/display/DisplayManager.java
@@ -559,21 +559,18 @@
      * @see #DISPLAY_CATEGORY_PRESENTATION
      */
     public Display[] getDisplays(String category) {
-        boolean includeDisabledDisplays = (category != null
-                && category.equals(DISPLAY_CATEGORY_ALL_INCLUDING_DISABLED));
-        final int[] displayIds = mGlobal.getDisplayIds(includeDisabledDisplays);
+        final int[] displayIds = mGlobal.getDisplayIds();
         synchronized (mLock) {
             try {
-                if (category != null && category.equals(DISPLAY_CATEGORY_PRESENTATION)) {
+                if (category == null
+                        || DISPLAY_CATEGORY_ALL_INCLUDING_DISABLED.equals(category)) {
+                    addAllDisplaysLocked(mTempDisplays, displayIds);
+                } else if (category.equals(DISPLAY_CATEGORY_PRESENTATION)) {
                     addPresentationDisplaysLocked(mTempDisplays, displayIds, Display.TYPE_WIFI);
                     addPresentationDisplaysLocked(mTempDisplays, displayIds, Display.TYPE_EXTERNAL);
                     addPresentationDisplaysLocked(mTempDisplays, displayIds, Display.TYPE_OVERLAY);
                     addPresentationDisplaysLocked(mTempDisplays, displayIds, Display.TYPE_VIRTUAL);
                     addPresentationDisplaysLocked(mTempDisplays, displayIds, Display.TYPE_INTERNAL);
-                } else if ((category == null
-                        || DISPLAY_CATEGORY_ALL_INCLUDING_DISABLED.equals(category))) {
-                    // All displays requested.
-                    addAllDisplaysLocked(mTempDisplays, displayIds);
                 }
                 return mTempDisplays.toArray(new Display[mTempDisplays.size()]);
             } finally {
@@ -1451,5 +1448,15 @@
          * @hide
          */
         String KEY_HIGH_REFRESH_RATE_BLACKLIST = "high_refresh_rate_blacklist";
+
+        /**
+         * Key for the brightness throttling data as a String formatted:
+         * <displayId>,<no of throttling levels>,[<severity as string>,<brightness cap>]
+         * Where the latter part is repeated for each throttling level, and the entirety is repeated
+         * for each display, separated by a semicolon.
+         * For example:
+         * 123,1,critical,0.8;456,2,moderate,0.9,critical,0.7
+         */
+        String KEY_BRIGHTNESS_THROTTLING_DATA = "brightness_throttling_data";
     }
 }
diff --git a/core/java/android/hardware/display/DisplayManagerGlobal.java b/core/java/android/hardware/display/DisplayManagerGlobal.java
index da3a580..74356dd 100644
--- a/core/java/android/hardware/display/DisplayManagerGlobal.java
+++ b/core/java/android/hardware/display/DisplayManagerGlobal.java
@@ -206,16 +206,6 @@
      */
     @UnsupportedAppUsage
     public int[] getDisplayIds() {
-        return getDisplayIds(/* includeDisabledDisplays= */ false);
-    }
-
-    /**
-     * Gets all valid logical display ids and invalid ones if specified.
-     *
-     * @return An array containing all display ids.
-     */
-    @UnsupportedAppUsage
-    public int[] getDisplayIds(boolean includeDisabledDisplays) {
         try {
             synchronized (mLock) {
                 if (USE_CACHE) {
@@ -224,8 +214,7 @@
                     }
                 }
 
-                int[] displayIds =
-                        mDm.getDisplayIds(includeDisabledDisplays);
+                int[] displayIds = mDm.getDisplayIds();
                 if (USE_CACHE) {
                     mDisplayIdCache = displayIds;
                 }
diff --git a/core/java/android/hardware/display/IDisplayManager.aidl b/core/java/android/hardware/display/IDisplayManager.aidl
index a4115d1..ca3e580 100644
--- a/core/java/android/hardware/display/IDisplayManager.aidl
+++ b/core/java/android/hardware/display/IDisplayManager.aidl
@@ -36,7 +36,7 @@
 interface IDisplayManager {
     @UnsupportedAppUsage
     DisplayInfo getDisplayInfo(int displayId);
-    int[] getDisplayIds(boolean includeDisabled);
+    int[] getDisplayIds();
 
     boolean isUidPresentOnDisplay(int uid, int displayId);
 
diff --git a/core/java/android/hardware/fingerprint/FingerprintManager.java b/core/java/android/hardware/fingerprint/FingerprintManager.java
index 28f1f02..c614cdb 100644
--- a/core/java/android/hardware/fingerprint/FingerprintManager.java
+++ b/core/java/android/hardware/fingerprint/FingerprintManager.java
@@ -101,6 +101,7 @@
     private static final int MSG_FINGERPRINT_DETECTED = 107;
     private static final int MSG_UDFPS_POINTER_DOWN = 108;
     private static final int MSG_UDFPS_POINTER_UP = 109;
+    private static final int MSG_POWER_BUTTON_PRESSED = 110;
 
     /**
      * @hide
@@ -984,6 +985,16 @@
     }
 
     /**
+     * This is triggered by SideFpsEventHandler
+     * @hide
+     */
+    @RequiresPermission(USE_BIOMETRIC_INTERNAL)
+    public void onPowerPressed() {
+        Slog.i(TAG, "onPowerPressed");
+        mHandler.obtainMessage(MSG_POWER_BUTTON_PRESSED).sendToTarget();
+    }
+
+    /**
      * Determine if there is at least one fingerprint enrolled.
      *
      * @return true if at least one fingerprint is enrolled, false otherwise
@@ -1196,6 +1207,9 @@
                 case MSG_UDFPS_POINTER_UP:
                     sendUdfpsPointerUp(msg.arg1 /* sensorId */);
                     break;
+                case MSG_POWER_BUTTON_PRESSED:
+                    sendPowerPressed();
+                    break;
                 default:
                     Slog.w(TAG, "Unknown message: " + msg.what);
 
@@ -1325,6 +1339,14 @@
         mAuthenticationCallback.onUdfpsPointerUp(sensorId);
     }
 
+    private void sendPowerPressed() {
+        try {
+            mService.onPowerPressed();
+        } catch (RemoteException e) {
+            Slog.e(TAG, "Error sending power press", e);
+        }
+    }
+
     /**
      * @hide
      */
@@ -1461,6 +1483,9 @@
             case FINGERPRINT_ERROR_BAD_CALIBRATION:
                 return context.getString(
                             com.android.internal.R.string.fingerprint_error_bad_calibration);
+            case BIOMETRIC_ERROR_POWER_PRESSED:
+                return context.getString(
+                    com.android.internal.R.string.fingerprint_error_power_pressed);
             case FINGERPRINT_ERROR_VENDOR: {
                 String[] msgArray = context.getResources().getStringArray(
                         com.android.internal.R.array.fingerprint_error_vendor);
diff --git a/core/java/android/hardware/fingerprint/IFingerprintService.aidl b/core/java/android/hardware/fingerprint/IFingerprintService.aidl
index 0b63446..20cc58c 100644
--- a/core/java/android/hardware/fingerprint/IFingerprintService.aidl
+++ b/core/java/android/hardware/fingerprint/IFingerprintService.aidl
@@ -171,4 +171,7 @@
 
     // Registers BiometricStateListener.
     void registerBiometricStateListener(IBiometricStateListener listener);
+
+    // Sends a power button pressed event to all listeners.
+    oneway void onPowerPressed();
 }
diff --git a/core/java/android/hardware/radio/ProgramList.java b/core/java/android/hardware/radio/ProgramList.java
index 3a042a5..f2525d1 100644
--- a/core/java/android/hardware/radio/ProgramList.java
+++ b/core/java/android/hardware/radio/ProgramList.java
@@ -22,11 +22,11 @@
 import android.annotation.SystemApi;
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.util.ArrayMap;
 
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -42,7 +42,7 @@
 
     private final Object mLock = new Object();
     private final Map<ProgramSelector.Identifier, RadioManager.ProgramInfo> mPrograms =
-            new HashMap<>();
+            new ArrayMap<>();
 
     private final List<ListCallback> mListCallbacks = new ArrayList<>();
     private final List<OnCompleteListener> mOnCompleteListeners = new ArrayList<>();
@@ -173,38 +173,69 @@
         }
     }
 
-    void apply(@NonNull Chunk chunk) {
+    void apply(Chunk chunk) {
+        List<ProgramSelector.Identifier> removedList = new ArrayList<>();
+        List<ProgramSelector.Identifier> changedList = new ArrayList<>();
+        List<ProgramList.ListCallback> listCallbacksCopied;
+        List<OnCompleteListener> onCompleteListenersCopied = new ArrayList<>();
         synchronized (mLock) {
             if (mIsClosed) return;
 
             mIsComplete = false;
+            listCallbacksCopied = new ArrayList<>(mListCallbacks);
 
             if (chunk.isPurge()) {
-                new HashSet<>(mPrograms.keySet()).stream().forEach(id -> removeLocked(id));
+                Iterator<Map.Entry<ProgramSelector.Identifier, RadioManager.ProgramInfo>>
+                        programsIterator = mPrograms.entrySet().iterator();
+                while (programsIterator.hasNext()) {
+                    RadioManager.ProgramInfo removed = programsIterator.next().getValue();
+                    if (removed != null) {
+                        removedList.add(removed.getSelector().getPrimaryId());
+                    }
+                    programsIterator.remove();
+                }
             }
 
-            chunk.getRemoved().stream().forEach(id -> removeLocked(id));
-            chunk.getModified().stream().forEach(info -> putLocked(info));
+            chunk.getRemoved().stream().forEach(id -> removeLocked(id, removedList));
+            chunk.getModified().stream().forEach(info -> putLocked(info, changedList));
 
             if (chunk.isComplete()) {
                 mIsComplete = true;
-                mOnCompleteListeners.forEach(cb -> cb.onComplete());
+                onCompleteListenersCopied = new ArrayList<>(mOnCompleteListeners);
+            }
+        }
+
+        for (int i = 0; i < removedList.size(); i++) {
+            for (int cbIndex = 0; cbIndex < listCallbacksCopied.size(); cbIndex++) {
+                listCallbacksCopied.get(cbIndex).onItemRemoved(removedList.get(i));
+            }
+        }
+        for (int i = 0; i < changedList.size(); i++) {
+            for (int cbIndex = 0; cbIndex < listCallbacksCopied.size(); cbIndex++) {
+                listCallbacksCopied.get(cbIndex).onItemChanged(changedList.get(i));
+            }
+        }
+        if (chunk.isComplete()) {
+            for (int cbIndex = 0; cbIndex < onCompleteListenersCopied.size(); cbIndex++) {
+                onCompleteListenersCopied.get(cbIndex).onComplete();
             }
         }
     }
 
-    private void putLocked(@NonNull RadioManager.ProgramInfo value) {
+    private void putLocked(RadioManager.ProgramInfo value,
+            List<ProgramSelector.Identifier> changedIdentifierList) {
         ProgramSelector.Identifier key = value.getSelector().getPrimaryId();
         mPrograms.put(Objects.requireNonNull(key), value);
         ProgramSelector.Identifier sel = value.getSelector().getPrimaryId();
-        mListCallbacks.forEach(cb -> cb.onItemChanged(sel));
+        changedIdentifierList.add(sel);
     }
 
-    private void removeLocked(@NonNull ProgramSelector.Identifier key) {
+    private void removeLocked(ProgramSelector.Identifier key,
+            List<ProgramSelector.Identifier> removedIdentifierList) {
         RadioManager.ProgramInfo removed = mPrograms.remove(Objects.requireNonNull(key));
         if (removed == null) return;
         ProgramSelector.Identifier sel = removed.getSelector().getPrimaryId();
-        mListCallbacks.forEach(cb -> cb.onItemRemoved(sel));
+        removedIdentifierList.add(sel);
     }
 
     /**
diff --git a/core/java/android/nfc/INfcTag.aidl b/core/java/android/nfc/INfcTag.aidl
index e1ccc4f..170df71 100644
--- a/core/java/android/nfc/INfcTag.aidl
+++ b/core/java/android/nfc/INfcTag.aidl
@@ -46,6 +46,5 @@
     int getMaxTransceiveLength(int technology);
     boolean getExtendedLengthApdusSupported();
 
-    void setTagUpToDate(long cookie);
     boolean isTagUpToDate(long cookie);
 }
diff --git a/core/java/android/nfc/Tag.java b/core/java/android/nfc/Tag.java
index 731d1ba..500038f 100644
--- a/core/java/android/nfc/Tag.java
+++ b/core/java/android/nfc/Tag.java
@@ -34,7 +34,6 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.os.RemoteException;
-import android.os.SystemClock;
 
 import java.io.IOException;
 import java.util.Arrays;
@@ -119,17 +118,17 @@
     final String[] mTechStringList;
     final Bundle[] mTechExtras;
     final int mServiceHandle;  // for use by NFC service, 0 indicates a mock
+    final long mCookie;        // for accessibility checking
     final INfcTag mTagService; // interface to NFC service, will be null if mock tag
 
     int mConnectedTechnology;
-    long mCookie;
 
     /**
      * Hidden constructor to be used by NFC service and internal classes.
      * @hide
      */
     public Tag(byte[] id, int[] techList, Bundle[] techListExtras, int serviceHandle,
-            INfcTag tagService) {
+            long cookie, INfcTag tagService) {
         if (techList == null) {
             throw new IllegalArgumentException("rawTargets cannot be null");
         }
@@ -139,20 +138,13 @@
         // Ensure mTechExtras is as long as mTechList
         mTechExtras = Arrays.copyOf(techListExtras, techList.length);
         mServiceHandle = serviceHandle;
+        mCookie = cookie;
         mTagService = tagService;
-
         mConnectedTechnology = -1;
-        mCookie = SystemClock.elapsedRealtime();
 
         if (tagService == null) {
             return;
         }
-
-        try {
-            tagService.setTagUpToDate(mCookie);
-        } catch (RemoteException e) {
-            throw e.rethrowAsRuntimeException();
-        }
     }
 
     /**
@@ -165,9 +157,10 @@
      * @return freshly constructed tag
      * @hide
      */
-    public static Tag createMockTag(byte[] id, int[] techList, Bundle[] techListExtras) {
+    public static Tag createMockTag(byte[] id, int[] techList, Bundle[] techListExtras,
+            long cookie) {
         // set serviceHandle to 0 and tagService to null to indicate mock tag
-        return new Tag(id, techList, techListExtras, 0, null);
+        return new Tag(id, techList, techListExtras, 0, cookie, null);
     }
 
     private String[] generateTechStringList(int[] techList) {
@@ -445,6 +438,7 @@
         dest.writeIntArray(mTechList);
         dest.writeTypedArray(mTechExtras, 0);
         dest.writeInt(mServiceHandle);
+        dest.writeLong(mCookie);
         dest.writeInt(isMock);
         if (isMock == 0) {
             dest.writeStrongBinder(mTagService.asBinder());
@@ -463,6 +457,7 @@
             in.readIntArray(techList);
             Bundle[] techExtras = in.createTypedArray(Bundle.CREATOR);
             int serviceHandle = in.readInt();
+            long cookie = in.readLong();
             int isMock = in.readInt();
             if (isMock == 0) {
                 tagService = INfcTag.Stub.asInterface(in.readStrongBinder());
@@ -471,7 +466,7 @@
                 tagService = null;
             }
 
-            return new Tag(id, techList, techExtras, serviceHandle, tagService);
+            return new Tag(id, techList, techExtras, serviceHandle, cookie, tagService);
         }
 
         @Override
diff --git a/core/java/android/os/IUserManager.aidl b/core/java/android/os/IUserManager.aidl
index 3cde031..e5de3e1 100644
--- a/core/java/android/os/IUserManager.aidl
+++ b/core/java/android/os/IUserManager.aidl
@@ -131,4 +131,5 @@
     String getUserName();
     long getUserStartRealtime();
     long getUserUnlockRealtime();
+    boolean setUserEphemeral(int userId, boolean enableEphemeral);
 }
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index 0ffdfc6..d656604 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -2001,13 +2001,22 @@
      * @return Whether guest user is always ephemeral
      * @hide
      */
-    @TestApi
-    public static boolean isGuestUserEphemeral() {
+    public static boolean isGuestUserAlwaysEphemeral() {
         return Resources.getSystem()
                 .getBoolean(com.android.internal.R.bool.config_guestUserEphemeral);
     }
 
     /**
+     * @return true, when we want to enable user manager API and UX to allow
+     *           guest user ephemeral state change based on user input
+     * @hide
+     */
+    public static boolean isGuestUserAllowEphemeralStateChange() {
+        return Resources.getSystem()
+                .getBoolean(com.android.internal.R.bool.config_guestUserAllowEphemeralStateChange);
+    }
+
+    /**
      * Checks whether the device is running in a headless system user mode.
      *
      * <p>Headless system user mode means the {@link #isSystemUser() system user} runs system
@@ -3431,6 +3440,20 @@
             if (guest != null) {
                 Settings.Secure.putStringForUser(context.getContentResolver(),
                         Settings.Secure.SKIP_FIRST_USE_HINTS, "1", guest.id);
+
+                if (UserManager.isGuestUserAllowEphemeralStateChange()) {
+                    // Mark guest as (changeably) ephemeral if REMOVE_GUEST_ON_EXIT is 1
+                    // This is done so that a user via a UI controller can choose to
+                    // make a guest as ephemeral or not.
+                    // Settings.Global.REMOVE_GUEST_ON_EXIT holds the choice on what the guest state
+                    // should be, with default being ephemeral.
+                    boolean resetGuestOnExit = Settings.Global.getInt(context.getContentResolver(),
+                                                 Settings.Global.REMOVE_GUEST_ON_EXIT, 1) == 1;
+
+                    if (resetGuestOnExit && !guest.isEphemeral()) {
+                        setUserEphemeral(guest.id, true);
+                    }
+                }
             }
             return guest;
         } catch (ServiceSpecificException e) {
@@ -4948,6 +4971,31 @@
     }
 
     /**
+     * Set the user as ephemeral or non-ephemeral.
+     *
+     * If the user was initially created as ephemeral then this
+     * method has no effect and false is returned.
+     *
+     * @param userId the user's integer id
+     * @param enableEphemeral true: change user state to ephemeral,
+     *                        false: change user state to non-ephemeral
+     * @return true: user now has the desired ephemeral state,
+     *         false: desired user ephemeral state could not be set
+     *
+     * @hide
+     */
+    @RequiresPermission(anyOf = {
+            android.Manifest.permission.MANAGE_USERS,
+            android.Manifest.permission.CREATE_USERS})
+    public boolean setUserEphemeral(@UserIdInt int userId, boolean enableEphemeral) {
+        try {
+            return mService.setUserEphemeral(userId, enableEphemeral);
+        } catch (RemoteException re) {
+            throw re.rethrowFromSystemServer();
+        }
+    }
+
+    /**
      * Updates the context user's name.
      *
      * @param name the new name for the user
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 805fdc4..ce35461 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -9141,6 +9141,57 @@
         public static final String SCREENSAVER_ENABLED_COMPLICATIONS =
                 "screensaver_enabled_complications";
 
+
+        /**
+         * Default, indicates that the user has not yet started the dock setup flow.
+         *
+         * @hide
+         */
+        public static final int DOCK_SETUP_NOT_STARTED = 0;
+
+        /**
+         * Indicates that the user has started but not yet completed dock setup.
+         * One of the possible states for {@link #DOCK_SETUP_STATE}.
+         *
+         * @hide
+         */
+        public static final int DOCK_SETUP_STARTED = 1;
+
+        /**
+         * Indicates that the user has snoozed dock setup and will complete it later.
+         * One of the possible states for {@link #DOCK_SETUP_STATE}.
+         *
+         * @hide
+         */
+        public static final int DOCK_SETUP_PAUSED = 2;
+
+        /**
+         * Indicates that the user has completed dock setup.
+         * One of the possible states for {@link #DOCK_SETUP_STATE}.
+         *
+         * @hide
+         */
+        public static final int DOCK_SETUP_COMPLETED = 10;
+
+        /** @hide */
+        @Retention(RetentionPolicy.SOURCE)
+        @IntDef({
+                DOCK_SETUP_NOT_STARTED,
+                DOCK_SETUP_STARTED,
+                DOCK_SETUP_PAUSED,
+                DOCK_SETUP_COMPLETED
+        })
+        public @interface DockSetupState {
+        }
+
+        /**
+         * Defines the user's current state of dock setup.
+         * The possible states are defined in {@link DockSetupState}.
+         *
+         * @hide
+         */
+        public static final String DOCK_SETUP_STATE = "dock_setup_state";
+
         /**
          * The default NFC payment component
          * @hide
@@ -9653,6 +9704,43 @@
         public static final String FACE_UNLOCK_RE_ENROLL = "face_unlock_re_enroll";
 
         /**
+         * The time (in millis) to wait for a power button before sending a
+         * successful auth in to keyguard(for side fingerprint)
+         * @hide
+         */
+        @Readable
+        public static final String FINGERPRINT_SIDE_FPS_KG_POWER_WINDOW =
+                "fingerprint_side_fps_kg_power_window";
+
+        /**
+         * The time (in millis) to wait for a power button before sending
+         * a successful auth in biometric prompt(for side fingerprint)
+         * @hide
+         */
+        @Readable
+        public static final String FINGERPRINT_SIDE_FPS_BP_POWER_WINDOW =
+                "fingerprint_side_fps_bp_power_window";
+
+        /**
+         * The time (in millis) that a finger tap will wait for a power button
+         * before dismissing the power dialog during enrollment(for side
+         * fingerprint)
+         * @hide
+         */
+        @Readable
+        public static final String FINGERPRINT_SIDE_FPS_ENROLL_TAP_WINDOW =
+                "fingerprint_side_fps_enroll_tap_window";
+
+        /**
+         * The time (in millis) that a power event will ignore future authentications
+         * (for side fingerprint)
+         * @hide
+         */
+        @Readable
+        public static final String FINGERPRINT_SIDE_FPS_AUTH_DOWNTIME =
+                "fingerprint_side_fps_auth_downtime";
+
+        /**
          * Whether or not debugging is enabled.
          * @hide
          */
@@ -10820,6 +10908,23 @@
                 "launcher_taskbar_education_showing";
 
         /**
+         * Whether or not adaptive charging feature is enabled by user.
+         * Type: int (0 for false, 1 for true)
+         * Default: 1
+         *
+         * @hide
+         */
+        public static final String ADAPTIVE_CHARGING_ENABLED = "adaptive_charging_enabled";
+
+        /**
+         * Whether battery saver is currently set to different schedule mode.
+         *
+         * @hide
+         */
+        public static final String EXTRA_AUTOMATIC_POWER_SAVE_MODE =
+                "extra_automatic_power_save_mode";
+
+        /**
          * These entries are considered common between the personal and the managed profile,
          * since the managed profile doesn't get to change them.
          */
@@ -10945,6 +11050,14 @@
         public static final String ADD_USERS_WHEN_LOCKED = "add_users_when_locked";
 
         /**
+         * Whether guest user should be removed on exit from guest mode.
+         * <p>
+         * Type: int
+         * @hide
+         */
+        public static final String REMOVE_GUEST_ON_EXIT = "remove_guest_on_exit";
+
+        /**
          * Whether applying ramping ringer on incoming phone call ringtone.
          * <p>1 = apply ramping ringer
          * <p>0 = do not apply ramping ringer
@@ -11233,6 +11346,7 @@
          * <li>{@link BatteryManager#BATTERY_PLUGGED_AC} to stay on for AC charger</li>
          * <li>{@link BatteryManager#BATTERY_PLUGGED_USB} to stay on for USB charger</li>
          * <li>{@link BatteryManager#BATTERY_PLUGGED_WIRELESS} to stay on for wireless charger</li>
+         * <li>{@link BatteryManager#BATTERY_PLUGGED_DOCK} to stay on for dock charger</li>
          * </ul>
          * These values can be OR-ed together.
          */
diff --git a/core/java/android/service/dreams/DreamActivity.java b/core/java/android/service/dreams/DreamActivity.java
index bf64d06..f6a7c8e 100644
--- a/core/java/android/service/dreams/DreamActivity.java
+++ b/core/java/android/service/dreams/DreamActivity.java
@@ -21,8 +21,6 @@
 import android.os.Bundle;
 import android.text.TextUtils;
 
-import com.android.internal.R;
-
 /**
  * The Activity used by the {@link DreamService} to draw screensaver content
  * on the screen. This activity runs in dream application's process, but is started by a
@@ -66,17 +64,4 @@
             callback.onActivityCreated(this);
         }
     }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        overridePendingTransition(R.anim.dream_activity_open_enter,
-                                  R.anim.dream_activity_open_exit);
-    }
-
-    @Override
-    public void finishAndRemoveTask() {
-        super.finishAndRemoveTask();
-        overridePendingTransition(0, R.anim.dream_activity_close_exit);
-    }
 }
diff --git a/core/java/android/service/voice/VoiceInteractionManagerInternal.java b/core/java/android/service/voice/VoiceInteractionManagerInternal.java
index b20dccc..a09b74d 100644
--- a/core/java/android/service/voice/VoiceInteractionManagerInternal.java
+++ b/core/java/android/service/voice/VoiceInteractionManagerInternal.java
@@ -17,6 +17,7 @@
 package android.service.voice;
 
 import android.annotation.Nullable;
+import android.annotation.UserIdInt;
 import android.os.Bundle;
 import android.os.IBinder;
 
@@ -65,6 +66,13 @@
     public abstract HotwordDetectionServiceIdentity getHotwordDetectionServiceIdentity();
 
     /**
+     * Called by {@code UMS.convertPreCreatedUserIfPossible()} when a new user is not created from
+     * scratched, but converted from the pool of existing pre-created users.
+     */
+    // TODO(b/226201975): remove method once RoleService supports pre-created users
+    public abstract void onPreCreatedUserConversion(@UserIdInt int userId);
+
+    /**
      * Provides the uids of the currently active
      * {@link android.service.voice.HotwordDetectionService} and its owning package. The
      * HotwordDetectionService is an isolated service, so it has a separate uid.
diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java
index 1e22856..90e4e94 100644
--- a/core/java/android/service/wallpaper/WallpaperService.java
+++ b/core/java/android/service/wallpaper/WallpaperService.java
@@ -24,7 +24,6 @@
 import static android.graphics.Matrix.MSKEW_Y;
 import static android.view.SurfaceControl.METADATA_WINDOW_TYPE;
 import static android.view.View.SYSTEM_UI_FLAG_VISIBLE;
-import static android.view.ViewRootImpl.LOCAL_LAYOUT;
 import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER;
 
 import android.animation.AnimationHandler;
@@ -41,7 +40,6 @@
 import android.app.WallpaperColors;
 import android.app.WallpaperInfo;
 import android.app.WallpaperManager;
-import android.app.WindowConfiguration;
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.Context;
 import android.content.Intent;
@@ -260,8 +258,6 @@
         private final Point mLastSurfaceSize = new Point();
         private final Matrix mTmpMatrix = new Matrix();
         private final float[] mTmpValues = new float[9];
-        private final WindowLayout mWindowLayout = new WindowLayout();
-        private final Rect mTempRect = new Rect();
 
         final WindowManager.LayoutParams mLayout
                 = new WindowManager.LayoutParams();
@@ -1100,8 +1096,7 @@
                             | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
 
                     final Configuration config = mMergedConfiguration.getMergedConfiguration();
-                    final WindowConfiguration winConfig = config.windowConfiguration;
-                    final Rect maxBounds = winConfig.getMaxBounds();
+                    final Rect maxBounds = config.windowConfiguration.getMaxBounds();
                     if (myWidth == ViewGroup.LayoutParams.MATCH_PARENT
                             && myHeight == ViewGroup.LayoutParams.MATCH_PARENT) {
                         mLayout.width = myWidth;
@@ -1139,7 +1134,7 @@
 
                         if (mSession.addToDisplay(mWindow, mLayout, View.VISIBLE,
                                 mDisplay.getDisplayId(), mRequestedVisibilities, inputChannel,
-                                mInsetsState, mTempControls) < 0) {
+                                mInsetsState, mTempControls, new Rect(), new float[1]) < 0) {
                             Log.w(TAG, "Failed to add window while updating wallpaper surface.");
                             return;
                         }
@@ -1158,29 +1153,9 @@
                     } else {
                         mLayout.surfaceInsets.set(0, 0, 0, 0);
                     }
-
-                    int relayoutResult = 0;
-                    if (LOCAL_LAYOUT) {
-                        if (!mSurfaceControl.isValid()) {
-                            relayoutResult = mSession.updateVisibility(mWindow, mLayout,
-                                    View.VISIBLE, mMergedConfiguration, mSurfaceControl,
-                                    mInsetsState, mTempControls);
-                        }
-
-                        final Rect displayCutoutSafe = mTempRect;
-                        mInsetsState.getDisplayCutoutSafe(displayCutoutSafe);
-                        mWindowLayout.computeFrames(mLayout, mInsetsState, displayCutoutSafe,
-                                winConfig.getBounds(), winConfig.getWindowingMode(), mWidth,
-                                mHeight, mRequestedVisibilities, null /* attachedWindowFrame */,
-                                1f /* compatScale */, mWinFrames);
-
-                        mSession.updateLayout(mWindow, mLayout, 0 /* flags */, mWinFrames, mWidth,
-                                mHeight);
-                    } else {
-                        relayoutResult = mSession.relayout(mWindow, mLayout, mWidth, mHeight,
-                                View.VISIBLE, 0, mWinFrames, mMergedConfiguration,
-                                mSurfaceControl, mInsetsState, mTempControls, mSyncSeqIdBundle);
-                    }
+                    final int relayoutResult = mSession.relayout(mWindow, mLayout, mWidth, mHeight,
+                            View.VISIBLE, 0, mWinFrames, mMergedConfiguration, mSurfaceControl,
+                            mInsetsState, mTempControls, mSyncSeqIdBundle);
 
                     final int transformHint = SurfaceControl.rotationToBufferTransform(
                             (mDisplayInstallOrientation + mDisplay.getRotation()) % 4);
@@ -1229,7 +1204,7 @@
                             null /* ignoringVisibilityState */, config.isScreenRound(),
                             false /* alwaysConsumeSystemBars */, mLayout.softInputMode,
                             mLayout.flags, SYSTEM_UI_FLAG_VISIBLE, mLayout.type,
-                            winConfig.getWindowingMode(), null /* typeSideMap */);
+                            config.windowConfiguration.getWindowingMode(), null /* typeSideMap */);
 
                     if (!fixedSize) {
                         final Rect padding = mIWallpaperEngine.mDisplayPadding;
@@ -1539,8 +1514,9 @@
                         // may have been destroyed so now we need to make
                         // sure it is re-created.
                         doOffsetsChanged(false);
-                        // force relayout to get new surface
-                        updateSurface(true, false, false);
+                        // It will check mSurfaceCreated so no need to force relayout.
+                        updateSurface(false /* forceRelayout */, false /* forceReport */,
+                                false /* redrawNeeded */);
                     }
                     onVisibilityChanged(visible);
                     if (mReportedVisible && mFrozenRequested) {
diff --git a/core/java/android/util/FeatureFlagUtils.java b/core/java/android/util/FeatureFlagUtils.java
index 24ded93..195cf82 100644
--- a/core/java/android/util/FeatureFlagUtils.java
+++ b/core/java/android/util/FeatureFlagUtils.java
@@ -83,6 +83,16 @@
     public static final String SETTINGS_HIDE_SECOND_LAYER_PAGE_NAVIGATE_UP_BUTTON_IN_TWO_PANE =
             "settings_hide_second_layer_page_navigate_up_button_in_two_pane";
 
+    /** Flag to enable/disable guest mode UX changes as mentioned in b/214031645
+     *  @hide
+     */
+    public static final String SETTINGS_GUEST_MODE_UX_CHANGES = "settings_guest_mode_ux_changes";
+
+    /** Support Clear Calling feature.
+     *  @hide
+     */
+    public static final String SETTINGS_ENABLE_CLEAR_CALLING = "settings_enable_clear_calling";
+
     private static final Map<String, String> DEFAULT_FLAGS;
 
     static {
@@ -110,6 +120,8 @@
         DEFAULT_FLAGS.put(SETTINGS_ENABLE_MONITOR_PHANTOM_PROCS, "true");
         DEFAULT_FLAGS.put(SETTINGS_APP_ALLOW_DARK_THEME_ACTIVATION_AT_BEDTIME, "true");
         DEFAULT_FLAGS.put(SETTINGS_HIDE_SECOND_LAYER_PAGE_NAVIGATE_UP_BUTTON_IN_TWO_PANE, "true");
+        DEFAULT_FLAGS.put(SETTINGS_GUEST_MODE_UX_CHANGES, "true");
+        DEFAULT_FLAGS.put(SETTINGS_ENABLE_CLEAR_CALLING, "false");
     }
 
     private static final Set<String> PERSISTENT_FLAGS;
diff --git a/core/java/android/util/SafetyProtectionUtils.java b/core/java/android/util/SafetyProtectionUtils.java
new file mode 100644
index 0000000..af985c5
--- /dev/null
+++ b/core/java/android/util/SafetyProtectionUtils.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.util;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.provider.DeviceConfig;
+
+/**
+ * Util class for whether we should show the safety protection resources.
+ *
+ * @hide
+ */
+public class SafetyProtectionUtils {
+    private static final String SAFETY_PROTECTION_RESOURCES_ENABLED = "safety_protection_enabled";
+
+    /**
+     * Determines whether we should show the safety protection resources.
+     * We show the resources only if
+     * (1) the feature flag safety_protection_enabled is enabled and
+     * (2) the config value config_safetyProtectionEnabled is enabled/true and
+     * (3) the resources exist (currently the resources only exist on GMS devices)
+     *
+     * TODO: make this an API in U
+     *
+     * @hide
+     */
+    public static boolean shouldShowSafetyProtectionResources(Context context) {
+        return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY,
+                SAFETY_PROTECTION_RESOURCES_ENABLED, false)
+                && context.getResources().getBoolean(
+                        Resources.getSystem()
+                                .getIdentifier("config_safetyProtectionEnabled",
+                                        "bool", "android"))
+                && context.getDrawable(android.R.drawable.ic_safety_protection) != null
+                && context.getString(android.R.string.safety_protection_display_text) != null
+                && !context.getString(android.R.string.safety_protection_display_text).isEmpty();
+    }
+}
diff --git a/core/java/android/view/IDisplayChangeWindowCallback.aidl b/core/java/android/view/IDisplayChangeWindowCallback.aidl
new file mode 100644
index 0000000..00a5b7b
--- /dev/null
+++ b/core/java/android/view/IDisplayChangeWindowCallback.aidl
@@ -0,0 +1,31 @@
+/*
+ * 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
+ */
+
+package android.view;
+
+import android.window.WindowContainerTransaction;
+import android.window.DisplayAreaInfo;
+
+/**
+ * Interface to be invoked by the controller when it has finished preparing for a display
+ * size change.
+ *
+ * @see IDisplayChangeWindowController
+ * @hide
+ */
+interface IDisplayChangeWindowCallback {
+    void continueDisplayChange(in WindowContainerTransaction t);
+}
diff --git a/core/java/android/view/IDisplayChangeWindowController.aidl b/core/java/android/view/IDisplayChangeWindowController.aidl
new file mode 100644
index 0000000..8c0bb6a
--- /dev/null
+++ b/core/java/android/view/IDisplayChangeWindowController.aidl
@@ -0,0 +1,54 @@
+/**
+ * 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.
+ */
+
+package android.view;
+
+import android.view.IDisplayChangeWindowCallback;
+import android.window.DisplayAreaInfo;
+
+/**
+ * Singular controller of a "remote" display change. When a display rotation or change is started,
+ * WM freezes the screen. It will then call into this controller and wait for a response via the
+ * callback.
+ *
+ * This needs to provide configuration changes because those changes need to be applied in sync
+ * with the actual display rotation to prevent relayouts with mismatched information.
+ *
+ * The flow is like this:
+ *  1. DisplayContent/Rotation freezes the screen
+ *  2. This controller is notified of a rotation and provided a callback.
+ *  3. This controller is responsible for collecting a set of configuration changes to go along with
+ *     the rotation.
+ *  4. The callback is fired which tells DisplayContent/Rotation to apply the provided configuration
+ *     changes and continue the rotation.
+ *
+ * @hide
+ */
+oneway interface IDisplayChangeWindowController {
+
+    /**
+     * Called when WM needs to know how to update tasks in response to a display change.
+     * If this isn't called, a timeout will continue the change in WM.
+     *
+     * @param fromRotation the old rotation
+     * @param newRotation the new rotation
+     * @param newDisplayAreaInfo the new display area info after the change
+     * @param callback A callback to be called when this has calculated updated configs.
+     */
+    void onDisplayChange(int displayId, int fromRotation, int toRotation,
+            in DisplayAreaInfo newDisplayAreaInfo, in IDisplayChangeWindowCallback callback);
+
+}
diff --git a/core/java/android/view/IDisplayWindowInsetsController.aidl b/core/java/android/view/IDisplayWindowInsetsController.aidl
index f4a0dfa..1940042 100644
--- a/core/java/android/view/IDisplayWindowInsetsController.aidl
+++ b/core/java/android/view/IDisplayWindowInsetsController.aidl
@@ -16,6 +16,7 @@
 
 package android.view;
 
+import android.content.ComponentName;
 import android.view.InsetsSourceControl;
 import android.view.InsetsState;
 import android.view.InsetsVisibilities;
@@ -30,10 +31,11 @@
     /**
      * Called when top focused window changes to determine whether or not to take over insets
      * control. Won't be called if config_remoteInsetsControllerControlsSystemBars is false.
-     * @param packageName: Passes the top package name
+     * @param component: Passes the top application component in the focused window.
      * @param requestedVisibilities The insets visibilities requested by the focussed window.
      */
-    void topFocusedWindowChanged(String packageName, in InsetsVisibilities insetsVisibilities);
+    void topFocusedWindowChanged(in ComponentName component,
+            in InsetsVisibilities insetsVisibilities);
 
     /**
      * @see IWindow#insetsChanged
diff --git a/core/java/android/view/IDisplayWindowRotationCallback.aidl b/core/java/android/view/IDisplayWindowRotationCallback.aidl
deleted file mode 100644
index 1ffe2dd..0000000
--- a/core/java/android/view/IDisplayWindowRotationCallback.aidl
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * 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
- */
-
-package android.view;
-
-import android.window.WindowContainerTransaction;
-
-/**
- * Interface to be invoked by the controller when it has finished preparing for a display rotation.
- *
- * @see IDisplayWindowRotationController
- * @hide
- */
-interface IDisplayWindowRotationCallback {
-    void continueRotateDisplay(int targetRotation, in WindowContainerTransaction t);
-}
diff --git a/core/java/android/view/IDisplayWindowRotationController.aidl b/core/java/android/view/IDisplayWindowRotationController.aidl
deleted file mode 100644
index c1c7464..0000000
--- a/core/java/android/view/IDisplayWindowRotationController.aidl
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * 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.
- */
-
-package android.view;
-
-import android.view.IDisplayWindowRotationCallback;
-
-/**
- * Singular controller of a "remote" display rotation. When a display rotation is started, WM
- * freezes the screen. It will then call into this controller and wait for a response via the
- * callback.
- *
- * This needs to provide configuration changes because those changes need to be applied in sync
- * with the actual display rotation to prevent relayouts with mismatched information.
- *
- * The flow is like this:
- *  1. DisplayContent/Rotation freezes the screen
- *  2. This controller is notified of a rotation and provided a callback.
- *  3. This controller is responsible for collecting a set of configuration changes to go along with
- *     the rotation.
- *  4. The callback is fired which tells DisplayContent/Rotation to apply the provided configuration
- *     changes and continue the rotation.
- *
- * @hide
- */
-oneway interface IDisplayWindowRotationController {
-
-    /**
-     * Called when WM needs to know how to update tasks in response to a display rotation.
-     * If this isn't called, a timeout will continue the rotation in WM.
-     *
-     * @param displayId the display that is rotating.
-     * @param fromRotation the rotation the display is rotating from.
-     * @param toRotation the rotation the display is rotating to.
-     * @param callback A callback to be called when this has calculated updated configs.
-     */
-    void onRotateDisplay(int displayId, int fromRotation, int toRotation,
-            in IDisplayWindowRotationCallback callback);
-}
diff --git a/core/java/android/view/IRecentsAnimationController.aidl b/core/java/android/view/IRecentsAnimationController.aidl
index 61f524f..c4d3070 100644
--- a/core/java/android/view/IRecentsAnimationController.aidl
+++ b/core/java/android/view/IRecentsAnimationController.aidl
@@ -80,11 +80,6 @@
     void setAnimationTargetsBehindSystemBars(boolean behindSystemBars);
 
     /**
-     * Hides the current input method if one is showing.
-     */
-    void hideCurrentInputMethod();
-
-    /**
      * Clean up the screenshot of previous task which was created during recents animation that
      * was cancelled by a stack order change.
      *
diff --git a/core/java/android/view/IWindowFocusObserver.aidl b/core/java/android/view/IWindowFocusObserver.aidl
index d14bb48..3b23c77 100644
--- a/core/java/android/view/IWindowFocusObserver.aidl
+++ b/core/java/android/view/IWindowFocusObserver.aidl
@@ -16,7 +16,7 @@
 package android.view;
 
 /** {@hide} */
-interface IWindowFocusObserver
+oneway interface IWindowFocusObserver
 {
     void focusGained(IBinder inputToken);
     void focusLost(IBinder inputToken);
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index fb562d8..0ef23bb 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -39,7 +39,7 @@
 import android.view.IDisplayWindowInsetsController;
 import android.view.IDisplayWindowListener;
 import android.view.IDisplayFoldListener;
-import android.view.IDisplayWindowRotationController;
+import android.view.IDisplayChangeWindowController;
 import android.view.IOnKeyguardExitResult;
 import android.view.IPinnedTaskListener;
 import android.view.IScrollCaptureResponseListener;
@@ -145,7 +145,7 @@
      * controller is called after the display has "frozen" for a rotation and display rotation will
      * only continue once the controller has finished calculating associated configurations.
      */
-    void setDisplayWindowRotationController(IDisplayWindowRotationController controller);
+    void setDisplayChangeWindowController(IDisplayChangeWindowController controller);
 
     /**
      * Adds a root container that a client shell can populate with its own windows (usually via
@@ -250,18 +250,6 @@
      */
     void refreshScreenCaptureDisabled();
 
-    // These can only be called with the SET_ORIENTATION permission.
-    /**
-     * Update the current screen rotation based on the current state of
-     * the world.
-     * @param alwaysSendConfiguration Flag to force a new configuration to
-     * be evaluated.  This can be used when there are other parameters in
-     * configuration that are changing.
-     * @param forceRelayout If true, the window manager will always do a relayout
-     * of its windows even if the rotation hasn't changed.
-     */
-    void updateRotation(boolean alwaysSendConfiguration, boolean forceRelayout);
-
     /**
      * Retrieve the current orientation of the primary screen.
      * @return Constant as per {@link android.view.Surface.Rotation}.
@@ -442,11 +430,6 @@
     boolean isSafeModeEnabled();
 
     /**
-     * Enables the screen if all conditions are met.
-     */
-    void enableScreenIfNeeded();
-
-    /**
      * Clears the frame statistics for a given window.
      *
      * @param token The window token.
@@ -560,6 +543,21 @@
     boolean isWindowTraceEnabled();
 
     /**
+     * Starts a transition trace.
+     */
+    void startTransitionTrace();
+
+    /**
+     * Stops a transition trace.
+     */
+    void stopTransitionTrace();
+
+    /**
+     * Returns true if transition trace is enabled.
+     */
+    boolean isTransitionTraceEnabled();
+
+    /**
      * Gets the windowing mode of the display.
      *
      * @param displayId The id of the display.
@@ -955,4 +953,18 @@
      * means the recents app can control the SystemUI flags, and vice-versa.
      */
     void setRecentsAppBehindSystemBars(boolean behindSystemBars);
+
+    /**
+     * Gets the background color of the letterbox. Considered invalid if the background has
+     * multiple colors {@link #isLetterboxBackgroundMultiColored}. Should be called by SystemUI when
+     * computing the letterbox appearance for status bar treatment.
+     */
+    int getLetterboxBackgroundColorInArgb();
+
+    /**
+     * Whether the outer area of the letterbox has multiple colors (e.g. blurred background).
+     * Should be called by SystemUI when computing the letterbox appearance for status bar
+     * treatment.
+     */
+    boolean isLetterboxBackgroundMultiColored();
 }
diff --git a/core/java/android/view/IWindowSession.aidl b/core/java/android/view/IWindowSession.aidl
index 649accd..3016473 100644
--- a/core/java/android/view/IWindowSession.aidl
+++ b/core/java/android/view/IWindowSession.aidl
@@ -50,13 +50,16 @@
     int addToDisplay(IWindow window, in WindowManager.LayoutParams attrs,
             in int viewVisibility, in int layerStackId, in InsetsVisibilities requestedVisibilities,
             out InputChannel outInputChannel, out InsetsState insetsState,
-            out InsetsSourceControl[] activeControls);
+            out InsetsSourceControl[] activeControls, out Rect attachedFrame,
+            out float[] sizeCompatScale);
     int addToDisplayAsUser(IWindow window, in WindowManager.LayoutParams attrs,
             in int viewVisibility, in int layerStackId, in int userId,
             in InsetsVisibilities requestedVisibilities, out InputChannel outInputChannel,
-            out InsetsState insetsState, out InsetsSourceControl[] activeControls);
+            out InsetsState insetsState, out InsetsSourceControl[] activeControls,
+            out Rect attachedFrame, out float[] sizeCompatScale);
     int addToDisplayWithoutInputChannel(IWindow window, in WindowManager.LayoutParams attrs,
-            in int viewVisibility, in int layerStackId, out InsetsState insetsState);
+            in int viewVisibility, in int layerStackId, out InsetsState insetsState,
+            out Rect attachedFrame, out float[] sizeCompatScale);
     @UnsupportedAppUsage
     void remove(IWindow window);
 
@@ -107,41 +110,6 @@
             out InsetsState insetsState, out InsetsSourceControl[] activeControls,
             out Bundle bundle);
 
-    /**
-     * Changes the view visibility and the attributes of a window. This should only be called when
-     * the visibility of the root view is changed. This returns a valid surface if the root view is
-     * visible. This also returns the latest information for the caller to compute its window frame.
-     *
-     * @param window The window being updated.
-     * @param attrs If non-null, new attributes to apply to the window.
-     * @param viewVisibility Window root view's visibility.
-     * @param outMergedConfiguration New config container that holds global, override and merged
-     * config for window, if it is now becoming visible and the merged configuration has changed
-     * since it was last displayed.
-     * @param outSurfaceControl Object in which is placed the new display surface.
-     * @param outInsetsState The current insets state in the system.
-     * @param outActiveControls The insets source controls for the caller to override the insets
-     * state in the system.
-     *
-     * @return int Result flags: {@link WindowManagerGlobal#RELAYOUT_FIRST_TIME}.
-     */
-    int updateVisibility(IWindow window, in WindowManager.LayoutParams attrs, int viewVisibility,
-            out MergedConfiguration outMergedConfiguration, out SurfaceControl outSurfaceControl,
-            out InsetsState outInsetsState, out InsetsSourceControl[] outActiveControls);
-
-    /**
-     * Reports the layout results and the attributes of a window to the server.
-     *
-     * @param window The window being reported.
-     * @param attrs If non-null, new attributes to apply to the window.
-     * @param flags Request flags: {@link WindowManagerGlobal#RELAYOUT_INSETS_PENDING}.
-     * @param clientFrames the window frames computed by the client.
-     * @param requestedWidth The width the window wants to be.
-     * @param requestedHeight The height the window wants to be.
-     */
-    oneway void updateLayout(IWindow window, in WindowManager.LayoutParams attrs, int flags,
-            in ClientWindowFrames clientFrames, int requestedWidth, int requestedHeight);
-
     /*
      * Notify the window manager that an application is relaunching and
      * windows should be prepared for replacement.
@@ -384,4 +352,9 @@
      * Clears a touchable region set by {@link #setInsets}.
      */
     void clearTouchableRegion(IWindow window);
+
+    /**
+     * Returns whether this window needs to cancel draw and retry later.
+     */
+    boolean cancelDraw(IWindow window);
 }
diff --git a/core/java/android/view/InsetsController.java b/core/java/android/view/InsetsController.java
index cce3e8c..a2cb1d5 100644
--- a/core/java/android/view/InsetsController.java
+++ b/core/java/android/view/InsetsController.java
@@ -733,7 +733,7 @@
         }
         for (@InternalInsetsType int type = 0; type < InsetsState.SIZE; type++) {
             // Only update the server side insets here.
-            if (type == ITYPE_CAPTION_BAR) continue;
+            if (!CAPTION_ON_SHELL && type == ITYPE_CAPTION_BAR) continue;
             InsetsSource source = mState.peekSource(type);
             if (source == null) continue;
             if (newState.peekSource(type) == null) {
diff --git a/core/java/android/view/InsetsFrameProvider.java b/core/java/android/view/InsetsFrameProvider.java
new file mode 100644
index 0000000..eb8687c
--- /dev/null
+++ b/core/java/android/view/InsetsFrameProvider.java
@@ -0,0 +1,294 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.view;
+
+import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_LAYOUT_SIZE_EXTENDED_BY_CUTOUT;
+
+import android.graphics.Insets;
+import android.graphics.Rect;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.Arrays;
+import java.util.Objects;
+
+/**
+ * Insets provided by a window.
+ *
+ * The insets frame will by default as the window frame size. If the providers are set, the
+ * calculation result based on the source size will be used as the insets frame.
+ * @hide
+ */
+public class InsetsFrameProvider implements Parcelable {
+
+    /**
+     * If specified in source field, the insets calculation will be based on the display frame.
+     */
+    public static final int SOURCE_DISPLAY = 0;
+
+    /**
+     * If specified in source field, the insets calculation will be based on the window bounds. The
+     * container bounds can sometimes be different from the window frame. For example, when a task
+     * bar needs the entire screen to be prepared to showing the apps, the window container can take
+     * the entire display, or display area, but the window frame, as a result of the layout, will
+     * stay small until it actually taking the entire display to draw their view.
+     */
+    public static final int SOURCE_CONTAINER_BOUNDS = 1;
+
+    /**
+     * If specified in source field, the insets calculation will be based on the window frame. This
+     * is also the default value of the source.
+     */
+    public static final int SOURCE_FRAME = 2;
+
+    private static final int HAS_INSETS_SIZE = 1;
+    private static final int HAS_INSETS_SIZE_OVERRIDE = 2;
+
+    private static Rect sTmpRect = new Rect();
+
+    /**
+     * The type of insets to provide.
+     */
+    public @InsetsState.InternalInsetsType int type;
+
+    /**
+     * The source of frame. By default, all adjustment will be based on the window frame, it
+     * can be set to window bounds or display bounds instead.
+     */
+    public int source = SOURCE_FRAME;
+
+    /**
+     * The provided insets size based on the source frame. The result will be used as the insets
+     * size to windows other than IME. Only one side should be set.
+     *
+     * For example, when the given source frame is (0, 0) - (100, 200), and the insetsSize is null,
+     * the source frame will be directly used as the final insets frame. If the insetsSize is set to
+     * (0, 0, 0, 50) instead, the insets frame will be a frame starting from the bottom side of the
+     * source frame with height of 50, i.e., (0, 150) - (100, 200).
+     */
+    public Insets insetsSize = null;
+
+    /**
+     * 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.
+     */
+    public InsetsSizeOverride[] insetsSizeOverrides = null;
+
+    public InsetsFrameProvider(int type) {
+        this(type, SOURCE_FRAME, null, null);
+    }
+
+    public InsetsFrameProvider(int type, Insets insetsSize) {
+        this(type, SOURCE_FRAME, insetsSize, null);
+    }
+
+    public InsetsFrameProvider(int type, int source, Insets insetsSize,
+            InsetsSizeOverride[] insetsSizeOverride) {
+        this.type = type;
+        this.source = source;
+        this.insetsSize = insetsSize;
+        this.insetsSizeOverrides = insetsSizeOverride;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder(32);
+        sb.append("InsetsFrameProvider: {");
+        sb.append("type=").append(InsetsState.typeToString(type));
+        sb.append(", source=");
+        switch (source) {
+            case SOURCE_DISPLAY:
+                sb.append("SOURCE_DISPLAY");
+                break;
+            case SOURCE_CONTAINER_BOUNDS:
+                sb.append("SOURCE_CONTAINER_BOUNDS Bounds");
+                break;
+            case SOURCE_FRAME:
+                sb.append("SOURCE_FRAME");
+                break;
+        }
+        if (insetsSize != null) {
+            sb.append(", insetsSize=").append(insetsSize);
+        }
+        if (insetsSizeOverrides != null) {
+            sb.append(", insetsSizeOverrides=").append(Arrays.toString(insetsSizeOverrides));
+        }
+        sb.append("}");
+        return sb.toString();
+    }
+
+    public InsetsFrameProvider(Parcel in) {
+        int insetsSizeModified = in.readInt();
+        type = in.readInt();
+        source = in.readInt();
+        if ((insetsSizeModified & HAS_INSETS_SIZE) != 0) {
+            insetsSize = Insets.CREATOR.createFromParcel(in);
+        }
+        if ((insetsSizeModified & HAS_INSETS_SIZE_OVERRIDE) != 0) {
+            insetsSizeOverrides = in.createTypedArray(InsetsSizeOverride.CREATOR);
+        }
+    }
+
+    @Override
+    public void writeToParcel(Parcel out, int flags) {
+        int insetsSizeModified = 0;
+        if (insetsSize != null) {
+            insetsSizeModified |= HAS_INSETS_SIZE;
+        }
+        if (insetsSizeOverrides != null) {
+            insetsSizeModified |= HAS_INSETS_SIZE_OVERRIDE;
+        }
+        out.writeInt(insetsSizeModified);
+        out.writeInt(type);
+        out.writeInt(source);
+        if (insetsSize != null) {
+            insetsSize.writeToParcel(out, flags);
+        }
+        if (insetsSizeOverrides != null) {
+            out.writeTypedArray(insetsSizeOverrides, flags);
+        }
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        InsetsFrameProvider other = (InsetsFrameProvider) o;
+        return type == other.type && source == other.source
+                && Objects.equals(insetsSize, other.insetsSize)
+                && Arrays.equals(insetsSizeOverrides, other.insetsSizeOverrides);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(type, source, insetsSize, Arrays.hashCode(insetsSizeOverrides));
+    }
+
+    public static final @android.annotation.NonNull Parcelable.Creator<InsetsFrameProvider>
+            CREATOR = new Parcelable.Creator<InsetsFrameProvider>() {
+                @Override
+                public InsetsFrameProvider createFromParcel(Parcel in) {
+                    return new InsetsFrameProvider(in);
+                }
+
+                @Override
+                public InsetsFrameProvider[] newArray(int size) {
+                    return new InsetsFrameProvider[size];
+                }
+            };
+
+    public static void calculateInsetsFrame(Rect displayFrame, Rect containerBounds,
+            Rect displayCutoutSafe, Rect inOutFrame, int source, Insets insetsSize,
+            @WindowManager.LayoutParams.PrivateFlags int privateFlags) {
+        boolean extendByCutout = false;
+        if (source == InsetsFrameProvider.SOURCE_DISPLAY) {
+            inOutFrame.set(displayFrame);
+        } else if (source == InsetsFrameProvider.SOURCE_CONTAINER_BOUNDS) {
+            inOutFrame.set(containerBounds);
+        } else {
+            extendByCutout = (privateFlags & PRIVATE_FLAG_LAYOUT_SIZE_EXTENDED_BY_CUTOUT) != 0;
+        }
+        if (insetsSize == null) {
+            return;
+        }
+        // Only one side of the provider shall be applied. Check in the order of left - top -
+        // right - bottom, only the first non-zero value will be applied.
+        if (insetsSize.left != 0) {
+            inOutFrame.right = inOutFrame.left + insetsSize.left;
+        } else if (insetsSize.top != 0) {
+            inOutFrame.bottom = inOutFrame.top + insetsSize.top;
+        } else if (insetsSize.right != 0) {
+            inOutFrame.left = inOutFrame.right - insetsSize.right;
+        } else if (insetsSize.bottom != 0) {
+            inOutFrame.top = inOutFrame.bottom - insetsSize.bottom;
+        } else {
+            inOutFrame.setEmpty();
+        }
+
+        if (extendByCutout) {
+            WindowLayout.extendFrameByCutout(displayCutoutSafe, displayFrame, inOutFrame, sTmpRect);
+        }
+    }
+
+    /**
+     * Class to describe the insets size to be provided to window with specific window type. If not
+     * used, same insets size will be sent as instructed in the insetsSize and source.
+     */
+    public static class InsetsSizeOverride implements Parcelable {
+        public final int windowType;
+        public Insets insetsSize;
+
+        protected InsetsSizeOverride(Parcel in) {
+            windowType = in.readInt();
+            insetsSize = in.readParcelable(null, android.graphics.Insets.class);
+        }
+
+        public InsetsSizeOverride(int type, Insets size) {
+            windowType = type;
+            insetsSize = size;
+        }
+
+        public static final Creator<InsetsSizeOverride> CREATOR =
+                new Creator<InsetsSizeOverride>() {
+            @Override
+            public InsetsSizeOverride createFromParcel(Parcel in) {
+                return new InsetsSizeOverride(in);
+            }
+
+            @Override
+            public InsetsSizeOverride[] newArray(int size) {
+                return new InsetsSizeOverride[size];
+            }
+        };
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        @Override
+        public void writeToParcel(Parcel out, int flags) {
+            out.writeInt(windowType);
+            out.writeParcelable(insetsSize, flags);
+        }
+
+        @Override
+        public String toString() {
+            StringBuilder sb = new StringBuilder(32);
+            sb.append("TypedInsetsSize: {");
+            sb.append("windowType=").append(windowType);
+            sb.append(", insetsSize=").append(insetsSize);
+            sb.append("}");
+            return sb.toString();
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(windowType, insetsSize);
+        }
+    }
+}
+
diff --git a/core/java/android/view/InsetsSourceConsumer.java b/core/java/android/view/InsetsSourceConsumer.java
index b17e199..d63c25a 100644
--- a/core/java/android/view/InsetsSourceConsumer.java
+++ b/core/java/android/view/InsetsSourceConsumer.java
@@ -25,7 +25,6 @@
 import static android.view.InsetsSourceConsumerProto.PENDING_FRAME;
 import static android.view.InsetsSourceConsumerProto.PENDING_VISIBLE_FRAME;
 import static android.view.InsetsSourceConsumerProto.SOURCE_CONTROL;
-import static android.view.InsetsSourceControl.INVALID_HINTS;
 import static android.view.InsetsState.ITYPE_IME;
 import static android.view.InsetsState.getDefaultVisibility;
 import static android.view.InsetsState.toPublicType;
@@ -34,7 +33,6 @@
 
 import android.annotation.IntDef;
 import android.annotation.Nullable;
-import android.graphics.Insets;
 import android.graphics.Rect;
 import android.util.ArraySet;
 import android.util.Log;
@@ -94,13 +92,6 @@
     private Rect mPendingVisibleFrame;
 
     /**
-     * Indicates if we have the pending animation. When we have the control, we need to play the
-     * animation if the requested visibility is different from the current state. But if we haven't
-     * had a leash yet, we will set this flag, and play the animation once we get the leash.
-     */
-    private boolean mIsAnimationPending;
-
-    /**
      * @param type The {@link InternalInsetsType} of the consumed insets.
      * @param state The current {@link InsetsState} of the consumed insets.
      * @param transactionSupplier The source of new {@link Transaction} instances. The supplier
@@ -138,7 +129,6 @@
             }
             return false;
         }
-        SurfaceControl oldLeash = mSourceControl != null ? mSourceControl.getLeash() : null;
 
         final InsetsSourceControl lastControl = mSourceControl;
         mSourceControl = control;
@@ -163,27 +153,21 @@
             // For updateCompatSysUiVisibility
             applyLocalVisibilityOverride();
         } else {
-            // We are gaining control, and need to run an animation since previous state
-            // didn't match
             final boolean requestedVisible = isRequestedVisibleAwaitingControl();
-            final boolean fakeControl = INVALID_HINTS.equals(control.getInsetsHint());
-            final boolean needsAnimation = requestedVisible != mState.getSource(mType).isVisible()
-                    && !fakeControl;
-            if (control.getLeash() != null && (needsAnimation || mIsAnimationPending)) {
-                if (DEBUG) Log.d(TAG, String.format("Gaining control in %s, requestedVisible: %b",
+            final SurfaceControl oldLeash = lastControl != null ? lastControl.getLeash() : null;
+            final SurfaceControl newLeash = control.getLeash();
+            if (newLeash != null && (oldLeash == null || !newLeash.isSameSurface(oldLeash))
+                    && requestedVisible != control.isInitiallyVisible()) {
+                // We are gaining leash, and need to run an animation since previous state
+                // didn't match.
+                if (DEBUG) Log.d(TAG, String.format("Gaining leash in %s, requestedVisible: %b",
                         mController.getHost().getRootViewTitle(), requestedVisible));
                 if (requestedVisible) {
                     showTypes[0] |= toPublicType(getType());
                 } else {
                     hideTypes[0] |= toPublicType(getType());
                 }
-                mIsAnimationPending = false;
             } else {
-                if (needsAnimation) {
-                    // We need animation but we haven't had a leash yet. Set this flag that when we
-                    // get the leash we can play the deferred animation.
-                    mIsAnimationPending = true;
-                }
                 // We are gaining control, but don't need to run an animation.
                 // However make sure that the leash visibility is still up to date.
                 if (applyLocalVisibilityOverride()) {
@@ -195,7 +179,7 @@
                 applyRequestedVisibilityToControl();
 
                 // Remove the surface that owned by last control when it lost.
-                if (!requestedVisible && !mIsAnimationPending && lastControl == null) {
+                if (!requestedVisible && lastControl == null) {
                     removeSurface();
                 }
             }
@@ -406,16 +390,6 @@
     protected void setRequestedVisible(boolean requestedVisible) {
         if (mRequestedVisible != requestedVisible) {
             mRequestedVisible = requestedVisible;
-
-            // We need an animation later if the leash of a real control (which has an insets hint)
-            // is not ready. The !mIsAnimationPending check is in case that the requested visibility
-            // is changed twice before playing the animation -- we don't need an animation in this
-            // case.
-            mIsAnimationPending = !mIsAnimationPending
-                    && mSourceControl != null
-                    && mSourceControl.getLeash() == null
-                    && !Insets.NONE.equals(mSourceControl.getInsetsHint());
-
             mController.onRequestedVisibilityChanged(this);
             if (DEBUG) Log.d(TAG, "setRequestedVisible: " + requestedVisible);
         }
diff --git a/core/java/android/view/InsetsSourceControl.java b/core/java/android/view/InsetsSourceControl.java
index 2cf827d..5f1cbba 100644
--- a/core/java/android/view/InsetsSourceControl.java
+++ b/core/java/android/view/InsetsSourceControl.java
@@ -31,6 +31,7 @@
 import android.view.InsetsState.InternalInsetsType;
 
 import java.io.PrintWriter;
+import java.util.Objects;
 import java.util.function.Consumer;
 
 /**
@@ -39,10 +40,9 @@
  */
 public class InsetsSourceControl implements Parcelable {
 
-    public static final Insets INVALID_HINTS = Insets.of(-1, -1, -1, -1);
-
     private final @InternalInsetsType int mType;
     private final @Nullable SurfaceControl mLeash;
+    private final boolean mInitiallyVisible;
     private final Point mSurfacePosition;
 
     // This is used while playing an insets animation regardless of the relative frame. This would
@@ -53,9 +53,10 @@
     private int mParcelableFlags;
 
     public InsetsSourceControl(@InternalInsetsType int type, @Nullable SurfaceControl leash,
-            Point surfacePosition, Insets insetsHint) {
+            boolean initiallyVisible, Point surfacePosition, Insets insetsHint) {
         mType = type;
         mLeash = leash;
+        mInitiallyVisible = initiallyVisible;
         mSurfacePosition = surfacePosition;
         mInsetsHint = insetsHint;
     }
@@ -67,6 +68,7 @@
         } else {
             mLeash = null;
         }
+        mInitiallyVisible = other.mInitiallyVisible;
         mSurfacePosition = new Point(other.mSurfacePosition);
         mInsetsHint = other.mInsetsHint;
         mSkipAnimationOnce = other.getAndClearSkipAnimationOnce();
@@ -75,6 +77,7 @@
     public InsetsSourceControl(Parcel in) {
         mType = in.readInt();
         mLeash = in.readTypedObject(SurfaceControl.CREATOR);
+        mInitiallyVisible = in.readBoolean();
         mSurfacePosition = in.readTypedObject(Point.CREATOR);
         mInsetsHint = in.readTypedObject(Insets.CREATOR);
         mSkipAnimationOnce = in.readBoolean();
@@ -94,6 +97,10 @@
         return mLeash;
     }
 
+    public boolean isInitiallyVisible() {
+        return mInitiallyVisible;
+    }
+
     public boolean setSurfacePosition(int left, int top) {
         if (mSurfacePosition.equals(left, top)) {
             return false;
@@ -148,6 +155,7 @@
     public void writeToParcel(Parcel dest, int flags) {
         dest.writeInt(mType);
         dest.writeTypedObject(mLeash, mParcelableFlags);
+        dest.writeBoolean(mInitiallyVisible);
         dest.writeTypedObject(mSurfacePosition, mParcelableFlags);
         dest.writeTypedObject(mInsetsHint, mParcelableFlags);
         dest.writeBoolean(mSkipAnimationOnce);
@@ -172,6 +180,7 @@
         return mType == that.mType
                 && ((mLeash == thatLeash)
                         || (mLeash != null && thatLeash != null && mLeash.isSameSurface(thatLeash)))
+                && mInitiallyVisible == that.mInitiallyVisible
                 && mSurfacePosition.equals(that.mSurfacePosition)
                 && mInsetsHint.equals(that.mInsetsHint)
                 && mSkipAnimationOnce == that.mSkipAnimationOnce;
@@ -179,12 +188,8 @@
 
     @Override
     public int hashCode() {
-        int result = mType;
-        result = 31 * result + (mLeash != null ? mLeash.hashCode() : 0);
-        result = 31 * result + mSurfacePosition.hashCode();
-        result = 31 * result + mInsetsHint.hashCode();
-        result = 31 * result + (mSkipAnimationOnce ? 1 : 0);
-        return result;
+        return Objects.hash(mType, mLeash, mInitiallyVisible, mSurfacePosition, mInsetsHint,
+                mSkipAnimationOnce);
     }
 
     @Override
@@ -200,6 +205,7 @@
         pw.print(prefix);
         pw.print("InsetsSourceControl type="); pw.print(InsetsState.typeToString(mType));
         pw.print(" mLeash="); pw.print(mLeash);
+        pw.print(" mInitiallyVisible="); pw.print(mInitiallyVisible);
         pw.print(" mSurfacePosition="); pw.print(mSurfacePosition);
         pw.print(" mInsetsHint="); pw.print(mInsetsHint);
         pw.print(" mSkipAnimationOnce="); pw.print(mSkipAnimationOnce);
diff --git a/core/java/android/view/InsetsState.java b/core/java/android/view/InsetsState.java
index f6e4f6e..c198098 100644
--- a/core/java/android/view/InsetsState.java
+++ b/core/java/android/view/InsetsState.java
@@ -90,8 +90,10 @@
             ITYPE_IME,
             ITYPE_CLIMATE_BAR,
             ITYPE_EXTRA_NAVIGATION_BAR,
-            ITYPE_LOCAL_NAVIGATION_BAR_1,
-            ITYPE_LOCAL_NAVIGATION_BAR_2
+            ITYPE_LEFT_GENERIC_OVERLAY,
+            ITYPE_TOP_GENERIC_OVERLAY,
+            ITYPE_RIGHT_GENERIC_OVERLAY,
+            ITYPE_BOTTOM_GENERIC_OVERLAY
     })
     public @interface InternalInsetsType {}
 
@@ -135,10 +137,12 @@
     public static final int ITYPE_EXTRA_NAVIGATION_BAR = 21;
 
     /** Additional types for local insets. **/
-    public static final int ITYPE_LOCAL_NAVIGATION_BAR_1 = 22;
-    public static final int ITYPE_LOCAL_NAVIGATION_BAR_2 = 23;
+    public static final int ITYPE_LEFT_GENERIC_OVERLAY = 22;
+    public static final int ITYPE_TOP_GENERIC_OVERLAY = 23;
+    public static final int ITYPE_RIGHT_GENERIC_OVERLAY = 24;
+    public static final int ITYPE_BOTTOM_GENERIC_OVERLAY = 25;
 
-    static final int LAST_TYPE = ITYPE_LOCAL_NAVIGATION_BAR_2;
+    static final int LAST_TYPE = ITYPE_BOTTOM_GENERIC_OVERLAY;
     public static final int SIZE = LAST_TYPE + 1;
 
     // Derived types
@@ -404,27 +408,20 @@
             if (source == null) {
                 continue;
             }
-            if (!canControlSide(frame, getInsetSide(
-                    source.calculateInsets(frame, true /* ignoreVisibility */)))) {
+            if (!canControlSource(frame, source)) {
                 blocked |= toPublicType(type);
             }
         }
         return blocked;
     }
 
-    private boolean canControlSide(Rect frame, int side) {
-        switch (side) {
-            case ISIDE_LEFT:
-            case ISIDE_RIGHT:
-                return frame.left == mDisplayFrame.left && frame.right == mDisplayFrame.right;
-            case ISIDE_TOP:
-            case ISIDE_BOTTOM:
-                return frame.top == mDisplayFrame.top && frame.bottom == mDisplayFrame.bottom;
-            case ISIDE_FLOATING:
-                return true;
-            default:
-                return false;
-        }
+    private static boolean canControlSource(Rect frame, InsetsSource source) {
+        final Insets insets = source.calculateInsets(frame, true /* ignoreVisibility */);
+        final Rect sourceFrame = source.getFrame();
+        final int sourceWidth = sourceFrame.width();
+        final int sourceHeight = sourceFrame.height();
+        return insets.left == sourceWidth || insets.right == sourceWidth
+                || insets.top == sourceHeight || insets.bottom == sourceHeight;
     }
 
     private void processSource(InsetsSource source, Rect relativeFrame, boolean ignoreVisibility,
@@ -705,8 +702,12 @@
         if ((types & Type.NAVIGATION_BARS) != 0) {
             result.add(ITYPE_NAVIGATION_BAR);
             result.add(ITYPE_EXTRA_NAVIGATION_BAR);
-            result.add(ITYPE_LOCAL_NAVIGATION_BAR_1);
-            result.add(ITYPE_LOCAL_NAVIGATION_BAR_2);
+        }
+        if ((types & Type.GENERIC_OVERLAYS) != 0) {
+            result.add(ITYPE_LEFT_GENERIC_OVERLAY);
+            result.add(ITYPE_TOP_GENERIC_OVERLAY);
+            result.add(ITYPE_RIGHT_GENERIC_OVERLAY);
+            result.add(ITYPE_BOTTOM_GENERIC_OVERLAY);
         }
         if ((types & Type.CAPTION_BAR) != 0) {
             result.add(ITYPE_CAPTION_BAR);
@@ -747,9 +748,12 @@
                 return Type.STATUS_BARS;
             case ITYPE_NAVIGATION_BAR:
             case ITYPE_EXTRA_NAVIGATION_BAR:
-            case ITYPE_LOCAL_NAVIGATION_BAR_1:
-            case ITYPE_LOCAL_NAVIGATION_BAR_2:
                 return Type.NAVIGATION_BARS;
+            case ITYPE_LEFT_GENERIC_OVERLAY:
+            case ITYPE_TOP_GENERIC_OVERLAY:
+            case ITYPE_RIGHT_GENERIC_OVERLAY:
+            case ITYPE_BOTTOM_GENERIC_OVERLAY:
+                return Type.GENERIC_OVERLAYS;
             case ITYPE_CAPTION_BAR:
                 return Type.CAPTION_BAR;
             case ITYPE_IME:
@@ -868,10 +872,14 @@
                 return "ITYPE_CLIMATE_BAR";
             case ITYPE_EXTRA_NAVIGATION_BAR:
                 return "ITYPE_EXTRA_NAVIGATION_BAR";
-            case ITYPE_LOCAL_NAVIGATION_BAR_1:
-                return "ITYPE_LOCAL_NAVIGATION_BAR_1";
-            case ITYPE_LOCAL_NAVIGATION_BAR_2:
-                return "ITYPE_LOCAL_NAVIGATION_BAR_2";
+            case ITYPE_LEFT_GENERIC_OVERLAY:
+                return "ITYPE_LEFT_GENERIC_OVERLAY";
+            case ITYPE_TOP_GENERIC_OVERLAY:
+                return "ITYPE_TOP_GENERIC_OVERLAY";
+            case ITYPE_RIGHT_GENERIC_OVERLAY:
+                return "ITYPE_RIGHT_GENERIC_OVERLAY";
+            case ITYPE_BOTTOM_GENERIC_OVERLAY:
+                return "ITYPE_BOTTOM_GENERIC_OVERLAY";
             default:
                 return "ITYPE_UNKNOWN_" + type;
         }
@@ -916,6 +924,11 @@
             if (source == null && otherSource == null) {
                 continue;
             }
+            if (excludeInvisibleImeFrames && i == ITYPE_IME
+                    && ((source == null && !otherSource.isVisible())
+                            || (otherSource == null && !source.isVisible()))) {
+                continue;
+            }
             if (source == null || otherSource == null) {
                 return false;
             }
diff --git a/core/java/android/view/RemoteAccessibilityController.java b/core/java/android/view/RemoteAccessibilityController.java
index 28b567d..b0911d7 100644
--- a/core/java/android/view/RemoteAccessibilityController.java
+++ b/core/java/android/view/RemoteAccessibilityController.java
@@ -24,6 +24,8 @@
 import android.util.Log;
 import android.view.accessibility.IAccessibilityEmbeddedConnection;
 
+import java.lang.ref.WeakReference;
+
 class RemoteAccessibilityController {
     private static final String TAG = "RemoteAccessibilityController";
     private int mHostId;
@@ -80,12 +82,17 @@
     /**
      * Wrapper of accessibility embedded connection for embedded view hierarchy.
      */
-    private final class RemoteAccessibilityEmbeddedConnection implements IBinder.DeathRecipient {
+    private static final class RemoteAccessibilityEmbeddedConnection
+            implements IBinder.DeathRecipient {
+        private final WeakReference<RemoteAccessibilityController> mController;
         private final IAccessibilityEmbeddedConnection mConnection;
         private final IBinder mLeashToken;
 
-        RemoteAccessibilityEmbeddedConnection(IAccessibilityEmbeddedConnection connection,
+        RemoteAccessibilityEmbeddedConnection(
+                RemoteAccessibilityController controller,
+                IAccessibilityEmbeddedConnection connection,
                 IBinder leashToken) {
+            mController = new WeakReference<>(controller);
             mConnection = connection;
             mLeashToken = leashToken;
         }
@@ -109,9 +116,13 @@
         @Override
         public void binderDied() {
             unlinkToDeath();
-            runOnUiThread(() -> {
-                if (mConnectionWrapper == this) {
-                    mConnectionWrapper = null;
+            RemoteAccessibilityController controller = mController.get();
+            if (controller == null) {
+                return;
+            }
+            controller.runOnUiThread(() -> {
+                if (controller.mConnectionWrapper == this) {
+                    controller.mConnectionWrapper = null;
                 }
             });
         }
@@ -128,7 +139,7 @@
             }
             if (connection != null && leashToken != null) {
                 mConnectionWrapper =
-                    new RemoteAccessibilityEmbeddedConnection(connection, leashToken);
+                    new RemoteAccessibilityEmbeddedConnection(this, connection, leashToken);
                 mConnectionWrapper.linkToDeath();
             }
         } catch (RemoteException e) {
diff --git a/core/java/android/view/RemoteAnimationTarget.java b/core/java/android/view/RemoteAnimationTarget.java
index e98d046..44f419a 100644
--- a/core/java/android/view/RemoteAnimationTarget.java
+++ b/core/java/android/view/RemoteAnimationTarget.java
@@ -45,6 +45,7 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.util.proto.ProtoOutputStream;
+import android.window.TaskSnapshot;
 
 import java.io.PrintWriter;
 import java.lang.annotation.Retention;
@@ -223,11 +224,23 @@
     public boolean hasAnimatingParent;
 
     /**
+     * Whether an activity has enabled {@link android.R.styleable#Animation_showBackdrop} for
+     * transition.
+     */
+    public boolean showBackdrop;
+
+    /**
      * The background color of animation in case the task info is not available if the transition
      * is activity level.
      */
     public @ColorInt int backgroundColor;
 
+    /**
+     * Whether the activity is going to show IME on the target window after the app transition.
+     * @see TaskSnapshot#hasImeSurface() that used the task snapshot during animating task.
+     */
+    public boolean willShowImeOnTarget;
+
     public RemoteAnimationTarget(int taskId, int mode, SurfaceControl leash, boolean isTranslucent,
             Rect clipRect, Rect contentInsets, int prefixOrderIndex, Point position,
             Rect localBounds, Rect screenSpaceBounds,
@@ -287,6 +300,20 @@
         windowType = in.readInt();
         hasAnimatingParent = in.readBoolean();
         backgroundColor = in.readInt();
+        showBackdrop = in.readBoolean();
+        willShowImeOnTarget = in.readBoolean();
+    }
+
+    public void setShowBackdrop(boolean shouldShowBackdrop) {
+        showBackdrop = shouldShowBackdrop;
+    }
+
+    public void setWillShowImeOnTarget(boolean showImeOnTarget) {
+        willShowImeOnTarget = showImeOnTarget;
+    }
+
+    public boolean willShowImeOnTarget() {
+        return willShowImeOnTarget;
     }
 
     @Override
@@ -316,6 +343,8 @@
         dest.writeInt(windowType);
         dest.writeBoolean(hasAnimatingParent);
         dest.writeInt(backgroundColor);
+        dest.writeBoolean(showBackdrop);
+        dest.writeBoolean(willShowImeOnTarget);
     }
 
     public void dump(PrintWriter pw, String prefix) {
@@ -337,6 +366,8 @@
         pw.print(prefix); pw.print("windowType="); pw.print(windowType);
         pw.print(prefix); pw.print("hasAnimatingParent="); pw.print(hasAnimatingParent);
         pw.print(prefix); pw.print("backgroundColor="); pw.print(backgroundColor);
+        pw.print(prefix); pw.print("showBackdrop="); pw.print(showBackdrop);
+        pw.print(prefix); pw.print("willShowImeOnTarget="); pw.print(willShowImeOnTarget);
     }
 
     public void dumpDebug(ProtoOutputStream proto, long fieldId) {
diff --git a/core/java/android/view/ScrollCaptureConnection.java b/core/java/android/view/ScrollCaptureConnection.java
index d70de74..c50f70a 100644
--- a/core/java/android/view/ScrollCaptureConnection.java
+++ b/core/java/android/view/ScrollCaptureConnection.java
@@ -214,7 +214,7 @@
 
     @BinderThread
     @Override
-    public void close() {
+    public synchronized void close() {
         Trace.instantForTrack(TRACE_TAG_GRAPHICS, TRACE_TRACK, "close");
         if (mActive) {
             Log.w(TAG, "close(): capture session still active! Ending now.");
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java
index a1ce39e..92bdfdd 100644
--- a/core/java/android/view/SurfaceControl.java
+++ b/core/java/android/view/SurfaceControl.java
@@ -121,6 +121,7 @@
     private static native void nativeSetAnimationTransaction(long transactionObj);
     private static native void nativeSetEarlyWakeupStart(long transactionObj);
     private static native void nativeSetEarlyWakeupEnd(long transactionObj);
+    private static native long nativeGetTransactionId(long transactionObj);
 
     private static native void nativeSetLayer(long transactionObj, long nativeObject, int zorder);
     private static native void nativeSetRelativeLayer(long transactionObj, long nativeObject,
@@ -3537,6 +3538,15 @@
         }
 
         /**
+         * @hide
+         * @return The transaction's current id.
+         *         The id changed every time the transaction is applied.
+         */
+        public long getId() {
+            return nativeGetTransactionId(mNativeObject);
+        }
+
+        /**
          * Sets an arbitrary piece of metadata on the surface. This is a helper for int data.
          * @hide
          */
diff --git a/core/java/android/view/SurfaceControlViewHost.java b/core/java/android/view/SurfaceControlViewHost.java
index f7bca5b..d75ff2f 100644
--- a/core/java/android/view/SurfaceControlViewHost.java
+++ b/core/java/android/view/SurfaceControlViewHost.java
@@ -29,8 +29,6 @@
 import android.os.RemoteException;
 import android.util.Log;
 import android.window.WindowTokenClient;
-import android.view.InsetsState;
-import android.view.WindowManagerGlobal;
 import android.view.accessibility.IAccessibilityEmbeddedConnection;
 
 import java.util.Objects;
@@ -280,7 +278,7 @@
     public SurfaceControlViewHost(@NonNull Context c, @NonNull Display d,
             @NonNull WindowlessWindowManager wwm, boolean useSfChoreographer) {
         mWm = wwm;
-        mViewRoot = new ViewRootImpl(c, d, mWm, useSfChoreographer);
+        mViewRoot = new ViewRootImpl(c, d, mWm, new WindowlessWindowLayout(), useSfChoreographer);
         addConfigCallback(c, d);
 
         WindowManagerGlobal.getInstance().addWindowlessRoot(mViewRoot);
@@ -310,7 +308,7 @@
         mWm = new WindowlessWindowManager(context.getResources().getConfiguration(),
                 mSurfaceControl, hostToken);
 
-        mViewRoot = new ViewRootImpl(context, display, mWm);
+        mViewRoot = new ViewRootImpl(context, display, mWm, new WindowlessWindowLayout());
         addConfigCallback(context, display);
 
         WindowManagerGlobal.getInstance().addWindowlessRoot(mViewRoot);
diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java
index 785735c..c97eb73 100644
--- a/core/java/android/view/ThreadedRenderer.java
+++ b/core/java/android/view/ThreadedRenderer.java
@@ -25,11 +25,11 @@
 import android.graphics.FrameInfo;
 import android.graphics.HardwareRenderer;
 import android.graphics.Picture;
-import android.graphics.Point;
 import android.graphics.RecordingCanvas;
 import android.graphics.Rect;
 import android.graphics.RenderNode;
 import android.os.Trace;
+import android.util.DisplayMetrics;
 import android.util.Log;
 import android.view.Surface.OutOfResourcesException;
 import android.view.View.AttachInfo;
@@ -596,11 +596,18 @@
      */
     void setLightCenter(AttachInfo attachInfo) {
         // Adjust light position for window offsets.
-        final Point displaySize = attachInfo.mPoint;
-        attachInfo.mDisplay.getRealSize(displaySize);
-        final float lightX = displaySize.x / 2f - attachInfo.mWindowLeft;
+        DisplayMetrics displayMetrics = new DisplayMetrics();
+        attachInfo.mDisplay.getRealMetrics(displayMetrics);
+        final float lightX = displayMetrics.widthPixels / 2f - attachInfo.mWindowLeft;
         final float lightY = mLightY - attachInfo.mWindowTop;
-        setLightSourceGeometry(lightX, lightY, mLightZ, mLightRadius);
+        // To prevent shadow distortion on larger screens, scale the z position of the light source
+        // relative to the smallest screen dimension.
+        final float zRatio = Math.min(displayMetrics.widthPixels, displayMetrics.heightPixels)
+                / (450f * displayMetrics.density);
+        final float zWeightedAdjustment = (zRatio + 2) / 3f;
+        final float lightZ = mLightZ * zWeightedAdjustment;
+
+        setLightSourceGeometry(lightX, lightY, lightZ, mLightRadius);
     }
 
     /**
@@ -849,12 +856,18 @@
         public void setLightCenter(final Display display,
                 final int windowLeft, final int windowTop) {
             // Adjust light position for window offsets.
-            final Point displaySize = new Point();
-            display.getRealSize(displaySize);
-            final float lightX = displaySize.x / 2f - windowLeft;
+            DisplayMetrics displayMetrics = new DisplayMetrics();
+            display.getRealMetrics(displayMetrics);
+            final float lightX = displayMetrics.widthPixels / 2f - windowLeft;
             final float lightY = mLightY - windowTop;
+            // To prevent shadow distortion on larger screens, scale the z position of the light
+            // source relative to the smallest screen dimension.
+            final float zRatio = Math.min(displayMetrics.widthPixels, displayMetrics.heightPixels)
+                    / (450f * displayMetrics.density);
+            final float zWeightedAdjustment = (zRatio + 2) / 3f;
+            final float lightZ = mLightZ * zWeightedAdjustment;
 
-            setLightSourceGeometry(lightX, lightY, mLightZ, mLightRadius);
+            setLightSourceGeometry(lightX, lightY, lightZ, mLightRadius);
         }
 
         public RenderNode getRootNode() {
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index a13872e..fa37ca1 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -60,13 +60,11 @@
 import static android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
 import static android.view.WindowLayout.UNSPECIFIED_LENGTH;
 import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;
-import static android.view.WindowManager.LayoutParams.FIRST_SUB_WINDOW;
 import static android.view.WindowManager.LayoutParams.FLAG_FULLSCREEN;
 import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
 import static android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;
 import static android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
 import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW;
-import static android.view.WindowManager.LayoutParams.LAST_SUB_WINDOW;
 import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
 import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
 import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_APPEARANCE_CONTROLLED;
@@ -77,13 +75,12 @@
 import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_LAYOUT_SIZE_EXTENDED_BY_CUTOUT;
 import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
 import static android.view.WindowManager.LayoutParams.SOFT_INPUT_MASK_ADJUST;
-import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG;
-import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
 import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
 import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_ADDITIONAL;
 import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
 import static android.view.WindowManager.LayoutParams.TYPE_TOAST;
 import static android.view.WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY;
+import static android.view.WindowManagerGlobal.RELAYOUT_RES_CANCEL_AND_REDRAW;
 import static android.view.WindowManagerGlobal.RELAYOUT_RES_CONSUME_ALWAYS_SYSTEM_BARS;
 import static android.view.WindowManagerGlobal.RELAYOUT_RES_SURFACE_CHANGED;
 import static android.view.inputmethod.InputMethodEditorTraceProto.InputMethodClientsTraceProto.ClientSideProto.IME_FOCUS_CONTROLLER;
@@ -279,7 +276,7 @@
      * @hide
      */
     public static final boolean CAPTION_ON_SHELL =
-            SystemProperties.getBoolean("persist.debug.caption_on_shell", false);
+            SystemProperties.getBoolean("persist.wm.debug.caption_on_shell", false);
 
     /**
      * Whether the client should compute the window frame on its own.
@@ -564,9 +561,7 @@
     private final Rect mVisRect = new Rect(); // used to retrieve visible rect of focused view.
     private final Rect mTempRect = new Rect();
 
-    private final WindowLayout mWindowLayout = new WindowLayout();
-
-    private ViewRootImpl mParentViewRoot;
+    private final WindowLayout mWindowLayout;
 
     // This is used to reduce the race between window focus changes being dispatched from
     // the window manager and input events coming through the input system.
@@ -601,9 +596,20 @@
      */
     private boolean mSyncBuffer = false;
 
+    /**
+     * Flag to determine whether the client needs to check with WMS if it can draw. WMS will notify
+     * the client that it can't draw if we're still in the middle of a sync set that includes this
+     * window. Once the sync is complete, the window can resume drawing. This is to ensure we don't
+     * deadlock the client by trying to request draws when there may not be any buffers available.
+     */
+    private boolean mCheckIfCanDraw = false;
+
+    private boolean mDrewOnceForSync = false;
+
     int mSyncSeqId = 0;
     int mLastSyncSeqId = 0;
 
+    private boolean mUpdateSurfaceNeeded;
     boolean mFullRedrawNeeded;
     boolean mNewSurfaceNeeded;
     boolean mForceNextWindowRelayout;
@@ -689,6 +695,8 @@
     boolean mPendingAlwaysConsumeSystemBars;
     private final InsetsState mTempInsets = new InsetsState();
     private final InsetsSourceControl[] mTempControls = new InsetsSourceControl[SIZE];
+    private final WindowConfiguration mTempWinConfig = new WindowConfiguration();
+    private float mInvSizeCompatScale = 1f;
     final ViewTreeObserver.InternalInsetsInfo mLastGivenInsets
             = new ViewTreeObserver.InternalInsetsInfo();
 
@@ -881,18 +889,20 @@
     private String mTag = TAG;
 
     public ViewRootImpl(Context context, Display display) {
-        this(context, display, WindowManagerGlobal.getWindowSession(),
+        this(context, display, WindowManagerGlobal.getWindowSession(), new WindowLayout(),
                 false /* useSfChoreographer */);
     }
 
-    public ViewRootImpl(@UiContext Context context, Display display, IWindowSession session) {
-        this(context, display, session, false /* useSfChoreographer */);
+    public ViewRootImpl(@UiContext Context context, Display display, IWindowSession session,
+            WindowLayout windowLayout) {
+        this(context, display, session, windowLayout, false /* useSfChoreographer */);
     }
 
     public ViewRootImpl(@UiContext Context context, Display display, IWindowSession session,
-            boolean useSfChoreographer) {
+            WindowLayout windowLayout, boolean useSfChoreographer) {
         mContext = context;
         mWindowSession = session;
+        mWindowLayout = windowLayout;
         mDisplay = display;
         mBasePackageName = context.getBasePackageName();
         mThread = Thread.currentThread();
@@ -1086,6 +1096,16 @@
         return mContext.getResources().getConfiguration();
     }
 
+    private WindowConfiguration getCompatWindowConfiguration() {
+        final WindowConfiguration winConfig = getConfiguration().windowConfiguration;
+        if (mInvSizeCompatScale == 1f) {
+            return winConfig;
+        }
+        mTempWinConfig.setTo(winConfig);
+        mTempWinConfig.scale(mInvSizeCompatScale);
+        return mTempWinConfig;
+    }
+
     /**
      * We have one child
      */
@@ -1184,7 +1204,6 @@
                 if (panelParentView != null) {
                     mAttachInfo.mPanelParentWindowToken
                             = panelParentView.getApplicationWindowToken();
-                    mParentViewRoot = panelParentView.getViewRootImpl();
                 }
                 mAdded = true;
                 int res; /* = WindowManagerImpl.ADD_OKAY; */
@@ -1215,14 +1234,24 @@
                     collectViewAttributes();
                     adjustLayoutParamsForCompatibility(mWindowAttributes);
                     controlInsetsForCompatibility(mWindowAttributes);
+
+                    Rect attachedFrame = new Rect();
+                    final float[] sizeCompatScale = { 1f };
                     res = mWindowSession.addToDisplayAsUser(mWindow, mWindowAttributes,
                             getHostVisibility(), mDisplay.getDisplayId(), userId,
                             mInsetsController.getRequestedVisibilities(), inputChannel, mTempInsets,
-                            mTempControls);
+                            mTempControls, attachedFrame, sizeCompatScale);
+                    if (!attachedFrame.isValid()) {
+                        attachedFrame = null;
+                    }
                     if (mTranslator != null) {
                         mTranslator.translateInsetsStateInScreenToAppWindow(mTempInsets);
                         mTranslator.translateSourceControlsInScreenToAppWindow(mTempControls);
+                        mTranslator.translateRectInScreenToAppWindow(attachedFrame);
                     }
+                    mTmpFrames.attachedFrame = attachedFrame;
+                    mTmpFrames.sizeCompatScale = sizeCompatScale[0];
+                    mInvSizeCompatScale = 1f / sizeCompatScale[0];
                 } catch (RemoteException e) {
                     mAdded = false;
                     mView = null;
@@ -1245,12 +1274,12 @@
                 final InsetsState state = mInsetsController.getState();
                 final Rect displayCutoutSafe = mTempRect;
                 state.getDisplayCutoutSafe(displayCutoutSafe);
-                final WindowConfiguration winConfig = getConfiguration().windowConfiguration;
+                final WindowConfiguration winConfig = getCompatWindowConfiguration();
                 mWindowLayout.computeFrames(mWindowAttributes, state,
                         displayCutoutSafe, winConfig.getBounds(), winConfig.getWindowingMode(),
                         UNSPECIFIED_LENGTH, UNSPECIFIED_LENGTH,
-                        mInsetsController.getRequestedVisibilities(),
-                        getAttachedWindowFrame(), 1f /* compactScale */, mTmpFrames);
+                        mInsetsController.getRequestedVisibilities(), 1f /* compactScale */,
+                        mTmpFrames);
                 setFrame(mTmpFrames.frame);
                 registerBackCallbackOnWindow();
                 if (!WindowOnBackInvokedDispatcher.isOnBackInvokedCallbackEnabled(mContext)) {
@@ -1372,14 +1401,6 @@
         }
     }
 
-    private Rect getAttachedWindowFrame() {
-        final int type = mWindowAttributes.type;
-        final boolean layoutAttached = (mParentViewRoot != null
-                && type >= FIRST_SUB_WINDOW && type <= LAST_SUB_WINDOW
-                && type != TYPE_APPLICATION_ATTACHED_DIALOG);
-        return layoutAttached ? mParentViewRoot.mWinFrame : null;
-    }
-
     /**
      * Register any kind of listeners if setView was success.
      */
@@ -1737,21 +1758,30 @@
 
         final Rect frame = frames.frame;
         final Rect displayFrame = frames.displayFrame;
+        final Rect attachedFrame = frames.attachedFrame;
         if (mTranslator != null) {
             mTranslator.translateRectInScreenToAppWindow(frame);
             mTranslator.translateRectInScreenToAppWindow(displayFrame);
+            mTranslator.translateRectInScreenToAppWindow(attachedFrame);
         }
+        final float sizeCompatScale = frames.sizeCompatScale;
         final boolean frameChanged = !mWinFrame.equals(frame);
         final boolean configChanged = !mLastReportedMergedConfiguration.equals(mergedConfiguration);
+        final boolean attachedFrameChanged = LOCAL_LAYOUT
+                && !Objects.equals(mTmpFrames.attachedFrame, attachedFrame);
         final boolean displayChanged = mDisplay.getDisplayId() != displayId;
         final boolean resizeModeChanged = mResizeMode != resizeMode;
-        if (msg == MSG_RESIZED && !frameChanged && !configChanged && !displayChanged
-                && !resizeModeChanged && !forceNextWindowRelayout) {
+        final boolean sizeCompatScaleChanged = mTmpFrames.sizeCompatScale != sizeCompatScale;
+        if (msg == MSG_RESIZED && !frameChanged && !configChanged && !attachedFrameChanged
+                && !displayChanged && !resizeModeChanged && !forceNextWindowRelayout
+                && !sizeCompatScaleChanged) {
             return;
         }
 
         mPendingDragResizing = resizeMode != RESIZE_MODE_INVALID;
         mResizeMode = resizeMode;
+        mTmpFrames.sizeCompatScale = sizeCompatScale;
+        mInvSizeCompatScale = 1f / sizeCompatScale;
 
         if (configChanged) {
             // If configuration changed - notify about that and, maybe, about move to display.
@@ -1764,6 +1794,9 @@
 
         setFrame(frame);
         mTmpFrames.displayFrame.set(displayFrame);
+        if (mTmpFrames.attachedFrame != null && attachedFrame != null) {
+            mTmpFrames.attachedFrame.set(attachedFrame);
+        }
 
         if (mDragResizing && mUseMTRenderer) {
             boolean fullscreen = frame.equals(mPendingBackDropFrame);
@@ -1773,7 +1806,7 @@
             }
         }
 
-        mForceNextWindowRelayout = forceNextWindowRelayout;
+        mForceNextWindowRelayout |= forceNextWindowRelayout;
         mPendingAlwaysConsumeSystemBars = args.argi2 != 0;
         mSyncSeqId = args.argi4 > mSyncSeqId ? args.argi4 : mSyncSeqId;
 
@@ -2697,6 +2730,9 @@
 
         mIsInTraversal = true;
         mWillDrawSoon = true;
+        boolean cancelDraw = false;
+        boolean isSyncRequest = false;
+
         boolean windowSizeMayChange = false;
         WindowManager.LayoutParams lp = mWindowAttributes;
 
@@ -2785,6 +2821,7 @@
         if (viewVisibilityChanged) {
             mAttachInfo.mWindowVisibility = viewVisibility;
             host.dispatchWindowVisibilityChanged(viewVisibility);
+            mAttachInfo.mTreeObserver.dispatchOnWindowVisibilityChange(viewVisibility);
             if (viewUserVisibilityChanged) {
                 host.dispatchVisibilityAggregated(viewVisibility == View.VISIBLE);
             }
@@ -2911,7 +2948,6 @@
         final int surfaceGenerationId = mSurface.getGenerationId();
 
         final boolean isViewVisible = viewVisibility == View.VISIBLE;
-        final boolean windowRelayoutWasForced = mForceNextWindowRelayout;
         boolean surfaceSizeChanged = false;
         boolean surfaceCreated = false;
         boolean surfaceDestroyed = false;
@@ -2975,6 +3011,8 @@
                     mViewFrameInfo.flags |= FrameInfo.FLAG_WINDOW_VISIBILITY_CHANGED;
                 }
                 relayoutResult = relayoutWindow(params, viewVisibility, insetsPending);
+                cancelDraw = (relayoutResult & RELAYOUT_RES_CANCEL_AND_REDRAW)
+                        == RELAYOUT_RES_CANCEL_AND_REDRAW;
                 final boolean dragResizing = mPendingDragResizing;
                 if (mSyncSeqId > mLastSyncSeqId) {
                     mLastSyncSeqId = mSyncSeqId;
@@ -2983,6 +3021,10 @@
                     }
                     reportNextDraw();
                     mSyncBuffer = true;
+                    isSyncRequest = true;
+                    if (!cancelDraw) {
+                        mDrewOnceForSync = false;
+                    }
                 }
 
                 final boolean surfaceControlChanged =
@@ -3015,6 +3057,8 @@
                             !mFirst, INVALID_DISPLAY /* same display */);
                     updatedConfiguration = true;
                 }
+                final boolean updateSurfaceNeeded = mUpdateSurfaceNeeded;
+                mUpdateSurfaceNeeded = false;
 
                 surfaceSizeChanged = false;
                 if (!mLastSurfaceSize.equals(mSurfaceSize)) {
@@ -3093,8 +3137,7 @@
                     if (isHardwareEnabled()) {
                         mAttachInfo.mThreadedRenderer.destroy();
                     }
-                } else if ((surfaceReplaced
-                        || surfaceSizeChanged || windowRelayoutWasForced)
+                } else if ((surfaceReplaced || surfaceSizeChanged || updateSurfaceNeeded)
                         && mSurfaceHolder == null
                         && mAttachInfo.mThreadedRenderer != null
                         && mSurface.isValid()) {
@@ -3270,6 +3313,19 @@
                 }
             }
         } else {
+            // If a relayout isn't going to happen, we still need to check if this window can draw
+            // when mCheckIfCanDraw is set. This is because it means we had a sync in the past, but
+            // have not been told by WMS that the sync is complete and that we can continue to draw
+            if (mCheckIfCanDraw) {
+                try {
+                    cancelDraw = mWindowSession.cancelDraw(mWindow);
+                    if (DEBUG_BLAST) {
+                        Log.d(mTag, "cancelDraw returned " + cancelDraw);
+                    }
+                } catch (RemoteException e) {
+                }
+            }
+
             // Not the first pass and no window/insets/visibility change but the window
             // may have moved and we need check that and if so to update the left and right
             // in the attach info. We translate only the window frame since on window move
@@ -3488,9 +3544,13 @@
             reportNextDraw();
         }
 
-        boolean cancelAndRedraw = mAttachInfo.mTreeObserver.dispatchOnPreDraw();
+        mCheckIfCanDraw = isSyncRequest || cancelDraw;
+
+        boolean cancelAndRedraw =
+                mAttachInfo.mTreeObserver.dispatchOnPreDraw() || (cancelDraw && mDrewOnceForSync);
         if (!cancelAndRedraw) {
             createSyncIfNeeded();
+            mDrewOnceForSync = true;
         }
 
         if (!isViewVisible) {
@@ -5226,6 +5286,21 @@
             throw new IllegalArgumentException("No merged config provided.");
         }
 
+        final int lastRotation = mLastReportedMergedConfiguration.getMergedConfiguration()
+                .windowConfiguration.getRotation();
+        final int newRotation = mergedConfiguration.getMergedConfiguration()
+                .windowConfiguration.getRotation();
+        if (lastRotation != newRotation) {
+            // Trigger ThreadedRenderer#updateSurface() if the surface control doesn't change.
+            // Because even if the actual surface size is not changed, e.g. flip 180 degrees,
+            // the buffers may still have content in previous rotation. And the next draw may
+            // not update all regions, that causes some afterimages to flicker.
+            mUpdateSurfaceNeeded = true;
+            if (!mIsInTraversal) {
+                mForceNextWindowRelayout = true;
+            }
+        }
+
         Configuration globalConfig = mergedConfiguration.getGlobalConfiguration();
         final Configuration overrideConfig = mergedConfiguration.getOverrideConfiguration();
         if (DEBUG_CONFIGURATION) Log.v(mTag,
@@ -7998,69 +8073,21 @@
         final int requestedWidth = (int) (mView.getMeasuredWidth() * appScale + 0.5f);
         final int requestedHeight = (int) (mView.getMeasuredHeight() * appScale + 0.5f);
 
-        int relayoutResult = 0;
-        WindowConfiguration winConfig = getConfiguration().windowConfiguration;
-        if (LOCAL_LAYOUT) {
-            if (mFirst || viewVisibility != mViewVisibility) {
-                relayoutResult = mWindowSession.updateVisibility(mWindow, params, viewVisibility,
-                        mPendingMergedConfiguration, mSurfaceControl, mTempInsets, mTempControls);
-                if (mTranslator != null) {
-                    mTranslator.translateInsetsStateInScreenToAppWindow(mTempInsets);
-                    mTranslator.translateSourceControlsInScreenToAppWindow(mTempControls);
-                }
-                mInsetsController.onStateChanged(mTempInsets);
-                mInsetsController.onControlsChanged(mTempControls);
-
-                mPendingAlwaysConsumeSystemBars =
-                        (relayoutResult & RELAYOUT_RES_CONSUME_ALWAYS_SYSTEM_BARS) != 0;
-            }
-            final InsetsState state = mInsetsController.getState();
-            final Rect displayCutoutSafe = mTempRect;
-            state.getDisplayCutoutSafe(displayCutoutSafe);
-            if (mWindowAttributes.type == TYPE_APPLICATION_STARTING) {
-                // TODO(b/210378379): Remove the special logic.
-                // Letting starting window use the window bounds from the pending config is for the
-                // fixed rotation, because the config is not overridden before the starting window
-                // is created.
-                winConfig = mPendingMergedConfiguration.getMergedConfiguration()
-                        .windowConfiguration;
-            }
-            mWindowLayout.computeFrames(mWindowAttributes, state, displayCutoutSafe,
-                    winConfig.getBounds(), winConfig.getWindowingMode(), requestedWidth,
-                    requestedHeight, mInsetsController.getRequestedVisibilities(),
-                    getAttachedWindowFrame(), 1f /* compatScale */, mTmpFrames);
-
-            mWindowSession.updateLayout(mWindow, params,
-                    insetsPending ? WindowManagerGlobal.RELAYOUT_INSETS_PENDING : 0, mTmpFrames,
-                    requestedWidth, requestedHeight);
-
-        } else {
-            relayoutResult = mWindowSession.relayout(mWindow, params,
-                    requestedWidth, requestedHeight, viewVisibility,
-                    insetsPending ? WindowManagerGlobal.RELAYOUT_INSETS_PENDING : 0,
-                    mTmpFrames, mPendingMergedConfiguration, mSurfaceControl, mTempInsets,
-                    mTempControls, mRelayoutBundle);
-            final int maybeSyncSeqId = mRelayoutBundle.getInt("seqid");
-            if (maybeSyncSeqId > 0) {
-                mSyncSeqId = maybeSyncSeqId;
-            }
-
-            if (mTranslator != null) {
-                mTranslator.translateRectInScreenToAppWindow(mTmpFrames.frame);
-                mTranslator.translateRectInScreenToAppWindow(mTmpFrames.displayFrame);
-                mTranslator.translateInsetsStateInScreenToAppWindow(mTempInsets);
-                mTranslator.translateSourceControlsInScreenToAppWindow(mTempControls);
-            }
-            mInsetsController.onStateChanged(mTempInsets);
-            mInsetsController.onControlsChanged(mTempControls);
-
-            mPendingAlwaysConsumeSystemBars =
-                    (relayoutResult & RELAYOUT_RES_CONSUME_ALWAYS_SYSTEM_BARS) != 0;
+        int relayoutResult = mWindowSession.relayout(mWindow, params,
+                requestedWidth, requestedHeight, viewVisibility,
+                insetsPending ? WindowManagerGlobal.RELAYOUT_INSETS_PENDING : 0,
+                mTmpFrames, mPendingMergedConfiguration, mSurfaceControl, mTempInsets,
+                mTempControls, mRelayoutBundle);
+        final int maybeSyncSeqId = mRelayoutBundle.getInt("seqid");
+        if (maybeSyncSeqId > 0) {
+            mSyncSeqId = maybeSyncSeqId;
         }
+        mInvSizeCompatScale = 1f / mTmpFrames.sizeCompatScale;
 
         final int transformHint = SurfaceControl.rotationToBufferTransform(
                 (mDisplayInstallOrientation + mDisplay.getRotation()) % 4);
 
+        final WindowConfiguration winConfig = getCompatWindowConfiguration();
         WindowLayout.computeSurfaceSize(mWindowAttributes, winConfig.getMaxBounds(), requestedWidth,
                 requestedHeight, mTmpFrames.frame, mPendingDragResizing, mSurfaceSize);
 
@@ -8109,10 +8136,23 @@
             destroySurface();
         }
 
+        mPendingAlwaysConsumeSystemBars =
+                (relayoutResult & RELAYOUT_RES_CONSUME_ALWAYS_SYSTEM_BARS) != 0;
+
         if (restore) {
             params.restore();
         }
+
+        if (mTranslator != null) {
+            mTranslator.translateRectInScreenToAppWindow(mTmpFrames.frame);
+            mTranslator.translateRectInScreenToAppWindow(mTmpFrames.displayFrame);
+            mTranslator.translateRectInScreenToAppWindow(mTmpFrames.attachedFrame);
+            mTranslator.translateInsetsStateInScreenToAppWindow(mTempInsets);
+            mTranslator.translateSourceControlsInScreenToAppWindow(mTempControls);
+        }
         setFrame(mTmpFrames.frame);
+        mInsetsController.onStateChanged(mTempInsets);
+        mInsetsController.onControlsChanged(mTempControls);
         return relayoutResult;
     }
 
@@ -8150,7 +8190,7 @@
     private void setFrame(Rect frame) {
         mWinFrame.set(frame);
 
-        final WindowConfiguration winConfig = getConfiguration().windowConfiguration;
+        final WindowConfiguration winConfig = getCompatWindowConfiguration();
         mPendingBackDropFrame.set(mPendingDragResizing && !winConfig.useWindowFrameForBackdrop()
                 ? winConfig.getMaxBounds()
                 : frame);
@@ -10839,8 +10879,8 @@
 
     private void registerCompatOnBackInvokedCallback() {
         mCompatOnBackInvokedCallback = () -> {
-                sendBackKeyEvent(KeyEvent.ACTION_DOWN);
-                sendBackKeyEvent(KeyEvent.ACTION_UP);
+            sendBackKeyEvent(KeyEvent.ACTION_DOWN);
+            sendBackKeyEvent(KeyEvent.ACTION_UP);
         };
         mOnBackInvokedDispatcher.registerOnBackInvokedCallback(
                 OnBackInvokedDispatcher.PRIORITY_DEFAULT, mCompatOnBackInvokedCallback);
diff --git a/core/java/android/view/ViewTreeObserver.java b/core/java/android/view/ViewTreeObserver.java
index 5a99ab2..ed8350a 100644
--- a/core/java/android/view/ViewTreeObserver.java
+++ b/core/java/android/view/ViewTreeObserver.java
@@ -43,6 +43,7 @@
     // Recursive listeners use CopyOnWriteArrayList
     private CopyOnWriteArrayList<OnWindowFocusChangeListener> mOnWindowFocusListeners;
     private CopyOnWriteArrayList<OnWindowAttachListener> mOnWindowAttachListeners;
+    private CopyOnWriteArrayList<OnWindowVisibilityChangeListener> mOnWindowVisibilityListeners;
     private CopyOnWriteArrayList<OnGlobalFocusChangeListener> mOnGlobalFocusListeners;
     @UnsupportedAppUsage
     private CopyOnWriteArrayList<OnTouchModeChangeListener> mOnTouchModeChangeListeners;
@@ -106,6 +107,21 @@
     }
 
     /**
+     * Interface definition for a callback to be invoked when the view hierarchy's window
+     * visibility changes.
+     *
+     * @hide
+     */
+    public interface OnWindowVisibilityChangeListener {
+        /**
+         * Callback method to be invoked when the window visibility changes in the view tree.
+         *
+         * @param visibility The new visibility of the window.
+         */
+        void onWindowVisibilityChanged(@View.Visibility int visibility);
+    }
+
+    /**
      * Interface definition for a callback to be invoked when the focus state within
      * the view tree changes.
      */
@@ -386,6 +402,14 @@
             }
         }
 
+        if (observer.mOnWindowVisibilityListeners != null) {
+            if (mOnWindowVisibilityListeners != null) {
+                mOnWindowVisibilityListeners.addAll(observer.mOnWindowVisibilityListeners);
+            } else {
+                mOnWindowVisibilityListeners = observer.mOnWindowVisibilityListeners;
+            }
+        }
+
         if (observer.mOnGlobalFocusListeners != null) {
             if (mOnGlobalFocusListeners != null) {
                 mOnGlobalFocusListeners.addAll(observer.mOnGlobalFocusListeners);
@@ -540,6 +564,49 @@
     }
 
     /**
+     * Register a callback to be invoked when the window visibility changes.
+     *
+     * @param listener The callback to add
+     *
+     * @throws IllegalStateException If {@link #isAlive()} returns false
+     *
+     * @hide
+     */
+    public void addOnWindowVisibilityChangeListener(
+            @NonNull OnWindowVisibilityChangeListener listener) {
+        checkIsAlive();
+
+        if (mOnWindowVisibilityListeners == null) {
+            mOnWindowVisibilityListeners =
+                new CopyOnWriteArrayList<OnWindowVisibilityChangeListener>();
+        }
+
+        mOnWindowVisibilityListeners.add(listener);
+    }
+
+    /**
+     * Remove a previously installed window visibility callback.
+     *
+     * @param victim The callback to remove
+     *
+     * @throws IllegalStateException If {@link #isAlive()} returns false
+     *
+     * @see #addOnWindowVisibilityChangeListener(
+     * android.view.ViewTreeObserver.OnWindowVisibilityChangeListener)
+     *
+     * @hide
+     */
+    public void removeOnWindowVisibilityChangeListener(
+            @NonNull OnWindowVisibilityChangeListener victim) {
+        checkIsAlive();
+        if (mOnWindowVisibilityListeners == null) {
+            return;
+        }
+
+        mOnWindowVisibilityListeners.remove(victim);
+    }
+
+    /*
      * Register a callback to be invoked when the focus state within the view tree changes.
      *
      * @param listener The callback to add
@@ -1026,6 +1093,23 @@
     }
 
     /**
+     * Notifies registered listeners that window visibility has changed.
+     */
+    void dispatchOnWindowVisibilityChange(int visibility) {
+        // NOTE: because of the use of CopyOnWriteArrayList, we *must* use an iterator to
+        // perform the dispatching. The iterator is a safe guard against listeners that
+        // could mutate the list by calling the various add/remove methods. This prevents
+        // the array from being modified while we iterate it.
+        final CopyOnWriteArrayList<OnWindowVisibilityChangeListener> listeners =
+                mOnWindowVisibilityListeners;
+        if (listeners != null && listeners.size() > 0) {
+            for (OnWindowVisibilityChangeListener listener : listeners) {
+                listener.onWindowVisibilityChanged(visibility);
+            }
+        }
+    }
+
+    /**
      * Notifies registered listeners that focus has changed.
      */
     @UnsupportedAppUsage
diff --git a/core/java/android/view/WindowInsets.java b/core/java/android/view/WindowInsets.java
index c846175..c1dddbe 100644
--- a/core/java/android/view/WindowInsets.java
+++ b/core/java/android/view/WindowInsets.java
@@ -1423,9 +1423,11 @@
 
         static final int DISPLAY_CUTOUT = 1 << 7;
 
-        static final int LAST = 1 << 8;
-        static final int SIZE = 9;
-        static final int WINDOW_DECOR = LAST;
+        static final int WINDOW_DECOR = 1 << 8;
+
+        static final int GENERIC_OVERLAYS = 1 << 9;
+        static final int LAST = GENERIC_OVERLAYS;
+        static final int SIZE = 10;
 
         static int indexOf(@InsetsType int type) {
             switch (type) {
@@ -1447,6 +1449,8 @@
                     return 7;
                 case WINDOW_DECOR:
                     return 8;
+                case GENERIC_OVERLAYS:
+                    return 9;
                 default:
                     throw new IllegalArgumentException("type needs to be >= FIRST and <= LAST,"
                             + " type=" + type);
@@ -1482,6 +1486,9 @@
             if ((types & WINDOW_DECOR) != 0) {
                 result.append("windowDecor |");
             }
+            if ((types & GENERIC_OVERLAYS) != 0) {
+                result.append("genericOverlays |");
+            }
             if (result.length() > 0) {
                 result.delete(result.length() - 2, result.length());
             }
@@ -1494,7 +1501,8 @@
         /** @hide */
         @Retention(RetentionPolicy.SOURCE)
         @IntDef(flag = true, value = {STATUS_BARS, NAVIGATION_BARS, CAPTION_BAR, IME, WINDOW_DECOR,
-                SYSTEM_GESTURES, MANDATORY_SYSTEM_GESTURES, TAPPABLE_ELEMENT, DISPLAY_CUTOUT})
+                SYSTEM_GESTURES, MANDATORY_SYSTEM_GESTURES, TAPPABLE_ELEMENT, DISPLAY_CUTOUT,
+                GENERIC_OVERLAYS})
         public @interface InsetsType {
         }
 
@@ -1586,7 +1594,7 @@
          *         {@link #navigationBars()}, but not {@link #ime()}.
          */
         public static @InsetsType int systemBars() {
-            return STATUS_BARS | NAVIGATION_BARS | CAPTION_BAR;
+            return STATUS_BARS | NAVIGATION_BARS | CAPTION_BAR | GENERIC_OVERLAYS;
         }
 
         /**
diff --git a/core/java/android/view/WindowLayout.java b/core/java/android/view/WindowLayout.java
index c320b26..57a0330 100644
--- a/core/java/android/view/WindowLayout.java
+++ b/core/java/android/view/WindowLayout.java
@@ -16,8 +16,6 @@
 
 package android.view;
 
-import static android.view.Gravity.DISPLAY_CLIP_HORIZONTAL;
-import static android.view.Gravity.DISPLAY_CLIP_VERTICAL;
 import static android.view.InsetsState.ITYPE_IME;
 import static android.view.InsetsState.ITYPE_NAVIGATION_BAR;
 import static android.view.InsetsState.ITYPE_STATUS_BAR;
@@ -66,14 +64,15 @@
     public void computeFrames(WindowManager.LayoutParams attrs, InsetsState state,
             Rect displayCutoutSafe, Rect windowBounds, @WindowingMode int windowingMode,
             int requestedWidth, int requestedHeight, InsetsVisibilities requestedVisibilities,
-            Rect attachedWindowFrame, float compatScale, ClientWindowFrames outFrames) {
+            float compatScale, ClientWindowFrames frames) {
         final int type = attrs.type;
         final int fl = attrs.flags;
         final int pfl = attrs.privateFlags;
         final boolean layoutInScreen = (fl & FLAG_LAYOUT_IN_SCREEN) == FLAG_LAYOUT_IN_SCREEN;
-        final Rect outDisplayFrame = outFrames.displayFrame;
-        final Rect outParentFrame = outFrames.parentFrame;
-        final Rect outFrame = outFrames.frame;
+        final Rect attachedWindowFrame = frames.attachedFrame;
+        final Rect outDisplayFrame = frames.displayFrame;
+        final Rect outParentFrame = frames.parentFrame;
+        final Rect outFrame = frames.frame;
 
         // Compute bounds restricted by insets
         final Insets insets = state.calculateInsets(windowBounds, attrs.getFitInsetsTypes(),
@@ -104,7 +103,7 @@
         final DisplayCutout cutout = state.getDisplayCutout();
         final Rect displayCutoutSafeExceptMaybeBars = mTempDisplayCutoutSafeExceptMaybeBarsRect;
         displayCutoutSafeExceptMaybeBars.set(displayCutoutSafe);
-        outFrames.isParentFrameClippedByDisplayCutout = false;
+        frames.isParentFrameClippedByDisplayCutout = false;
         if (cutoutMode != LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS && !cutout.isEmpty()) {
             // Ensure that windows with a non-ALWAYS display cutout mode are laid out in
             // the cutout safe zone.
@@ -167,7 +166,7 @@
             if (!attachedInParent && !floatingInScreenWindow) {
                 mTempRect.set(outParentFrame);
                 outParentFrame.intersectUnchecked(displayCutoutSafeExceptMaybeBars);
-                outFrames.isParentFrameClippedByDisplayCutout = !mTempRect.equals(outParentFrame);
+                frames.isParentFrameClippedByDisplayCutout = !mTempRect.equals(outParentFrame);
             }
             outDisplayFrame.intersectUnchecked(displayCutoutSafeExceptMaybeBars);
         }
@@ -274,25 +273,14 @@
             Gravity.applyDisplay(attrs.gravity, outDisplayFrame, outFrame);
         }
 
-        if (extendedByCutout && !displayCutoutSafe.contains(outFrame)) {
-            mTempRect.set(outFrame);
-
-            // Move the frame into displayCutoutSafe.
-            final int clipFlags = DISPLAY_CLIP_VERTICAL | DISPLAY_CLIP_HORIZONTAL;
-            Gravity.applyDisplay(attrs.gravity & ~clipFlags, displayCutoutSafe,
+        if (extendedByCutout) {
+            extendFrameByCutout(displayCutoutSafe, outDisplayFrame, outFrame,
                     mTempRect);
-
-            if (mTempRect.intersect(outDisplayFrame)) {
-                outFrame.union(mTempRect);
-            }
         }
 
-        if (DEBUG) Log.d(TAG, "computeWindowFrames " + attrs.getTitle()
-                + " outFrames=" + outFrames
+        if (DEBUG) Log.d(TAG, "computeFrames " + attrs.getTitle()
+                + " frames=" + frames
                 + " windowBounds=" + windowBounds.toShortString()
-                + " attachedWindowFrame=" + (attachedWindowFrame != null
-                        ? attachedWindowFrame.toShortString()
-                        : "null")
                 + " requestedWidth=" + requestedWidth
                 + " requestedHeight=" + requestedHeight
                 + " compatScale=" + compatScale
@@ -303,6 +291,21 @@
                 + " requestedVisibilities=" + requestedVisibilities);
     }
 
+    public static void extendFrameByCutout(Rect displayCutoutSafe,
+            Rect displayFrame, Rect inOutFrame, Rect tempRect) {
+        if (displayCutoutSafe.contains(inOutFrame)) {
+            return;
+        }
+        tempRect.set(inOutFrame);
+
+        // Move the frame into displayCutoutSafe.
+        Gravity.applyDisplay(0 /* gravity */, displayCutoutSafe, tempRect);
+
+        if (tempRect.intersect(displayFrame)) {
+            inOutFrame.union(tempRect);
+        }
+    }
+
     public static void computeSurfaceSize(WindowManager.LayoutParams attrs, Rect maxBounds,
             int requestedWidth, int requestedHeight, Rect winFrame, boolean dragResizing,
             Point outSurfaceSize) {
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index 00052f6..63d42c0 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -98,7 +98,6 @@
 import android.content.pm.ActivityInfo;
 import android.content.res.Configuration;
 import android.graphics.Bitmap;
-import android.graphics.Insets;
 import android.graphics.PixelFormat;
 import android.graphics.Point;
 import android.graphics.Rect;
@@ -341,6 +340,18 @@
     int TRANSIT_OLD_TASK_FRAGMENT_CHANGE = 30;
 
     /**
+     * A dream activity is being opened.
+     * @hide
+     */
+    int TRANSIT_OLD_DREAM_ACTIVITY_OPEN = 31;
+
+    /**
+     * A dream activity is being closed.
+     * @hide
+     */
+    int TRANSIT_OLD_DREAM_ACTIVITY_CLOSE = 32;
+
+    /**
      * @hide
      */
     @IntDef(prefix = { "TRANSIT_OLD_" }, value = {
@@ -368,7 +379,9 @@
             TRANSIT_OLD_TASK_CHANGE_WINDOWING_MODE,
             TRANSIT_OLD_TASK_FRAGMENT_OPEN,
             TRANSIT_OLD_TASK_FRAGMENT_CLOSE,
-            TRANSIT_OLD_TASK_FRAGMENT_CHANGE
+            TRANSIT_OLD_TASK_FRAGMENT_CHANGE,
+            TRANSIT_OLD_DREAM_ACTIVITY_OPEN,
+            TRANSIT_OLD_DREAM_ACTIVITY_CLOSE
     })
     @Retention(RetentionPolicy.SOURCE)
     @interface TransitionOldType {}
@@ -2354,6 +2367,14 @@
         public static final int SYSTEM_FLAG_SHOW_FOR_ALL_USERS = 0x00000010;
 
         /**
+         * Flag to allow this window to have unrestricted gesture exclusion.
+         *
+         * @see View#setSystemGestureExclusionRects(List)
+         * @hide
+         */
+        public static final int PRIVATE_FLAG_UNRESTRICTED_GESTURE_EXCLUSION = 0x00000020;
+
+        /**
          * Never animate position changes of the window.
          *
          * {@hide}
@@ -2573,11 +2594,13 @@
                 PRIVATE_FLAG_FORCE_HARDWARE_ACCELERATED,
                 PRIVATE_FLAG_WANTS_OFFSET_NOTIFICATIONS,
                 SYSTEM_FLAG_SHOW_FOR_ALL_USERS,
+                PRIVATE_FLAG_UNRESTRICTED_GESTURE_EXCLUSION,
                 PRIVATE_FLAG_NO_MOVE_ANIMATION,
                 PRIVATE_FLAG_COMPATIBLE_WINDOW,
                 PRIVATE_FLAG_SYSTEM_ERROR,
                 PRIVATE_FLAG_DISABLE_WALLPAPER_TOUCH_EVENTS,
                 PRIVATE_FLAG_FORCE_SHOW_STATUS_BAR,
+                PRIVATE_FLAG_LAYOUT_SIZE_EXTENDED_BY_CUTOUT,
                 PRIVATE_FLAG_FORCE_DECOR_VIEW_VISIBILITY,
                 PRIVATE_FLAG_WILL_NOT_REPLACE_ON_RELAUNCH,
                 PRIVATE_FLAG_LAYOUT_CHILD_WINDOW_IN_PARENT_FRAME,
@@ -2619,6 +2642,10 @@
                         equals = SYSTEM_FLAG_SHOW_FOR_ALL_USERS,
                         name = "SHOW_FOR_ALL_USERS"),
                 @ViewDebug.FlagToString(
+                        mask = PRIVATE_FLAG_UNRESTRICTED_GESTURE_EXCLUSION,
+                        equals = PRIVATE_FLAG_UNRESTRICTED_GESTURE_EXCLUSION,
+                        name = "UNRESTRICTED_GESTURE_EXCLUSION"),
+                @ViewDebug.FlagToString(
                         mask = PRIVATE_FLAG_NO_MOVE_ANIMATION,
                         equals = PRIVATE_FLAG_NO_MOVE_ANIMATION,
                         name = "NO_MOVE_ANIMATION"),
@@ -2639,6 +2666,10 @@
                         equals = PRIVATE_FLAG_FORCE_SHOW_STATUS_BAR,
                         name = "FORCE_STATUS_BAR_VISIBLE"),
                 @ViewDebug.FlagToString(
+                        mask = PRIVATE_FLAG_LAYOUT_SIZE_EXTENDED_BY_CUTOUT,
+                        equals = PRIVATE_FLAG_LAYOUT_SIZE_EXTENDED_BY_CUTOUT,
+                        name = "LAYOUT_SIZE_EXTENDED_BY_CUTOUT"),
+                @ViewDebug.FlagToString(
                         mask = PRIVATE_FLAG_FORCE_DECOR_VIEW_VISIBILITY,
                         equals = PRIVATE_FLAG_FORCE_DECOR_VIEW_VISIBILITY,
                         name = "FORCE_DECOR_VIEW_VISIBILITY"),
@@ -3589,34 +3620,17 @@
         private boolean mFitInsetsIgnoringVisibility = false;
 
         /**
-         * {@link InsetsState.InternalInsetsType}s to be applied to the window
-         * If {@link #type} has the predefined insets (like {@link #TYPE_STATUS_BAR} or
-         * {@link #TYPE_NAVIGATION_BAR}), this field will be ignored.
-         *
-         * <p>Note: provide only one inset corresponding to the window type (like
-         * {@link InsetsState.InternalInsetsType#ITYPE_STATUS_BAR} or
-         * {@link InsetsState.InternalInsetsType#ITYPE_NAVIGATION_BAR})</p>
-         * @hide
-         */
-        public @InsetsState.InternalInsetsType int[] providesInsetsTypes;
-
-        /**
-         * If specified, the insets provided by this window will be our window frame minus the
-         * insets specified by providedInternalInsets for each type. This should not be used
-         * together with {@link WindowState#mGivenContentInsets}. If both of them are set, both will
-         * be applied.
+         * If set, the specified insets types will be provided by the window and the insets frame
+         * will be calculated based on the provider's parameters. The insets types and the array
+         * should not be modified after the window is added. If multiple layout parameters are
+         * provided for different rotations in {@link LayoutParams#paramsForRotation}, the types in
+         * the providedInsets array should be the same in all rotations, including the base one.
+         * All other params can be adjusted at runtime.
+         * See {@link InsetsFrameProvider}.
          *
          * @hide
          */
-        public Insets[] providedInternalInsets;
-
-        /**
-         * If specified, the insets provided by this window for the IME will be our window frame
-         * minus the insets specified by providedInternalImeInsets.
-         *
-         * @hide
-         */
-        public Insets[] providedInternalImeInsets;
+        public InsetsFrameProvider[] providedInsets;
 
         /**
          * If specified, the frame that used to calculate relative {@link RoundedCorner} will be
@@ -3748,6 +3762,18 @@
             }
         }
 
+        /**
+         * @see #paramsForRotation
+         * @hide
+         */
+        public LayoutParams forRotation(int rotation) {
+            if (paramsForRotation == null || paramsForRotation.length <= rotation
+                    || paramsForRotation[rotation] == null) {
+                return this;
+            }
+            return paramsForRotation[rotation];
+        }
+
         public LayoutParams() {
             super(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
             type = TYPE_APPLICATION;
@@ -3996,32 +4022,10 @@
             out.writeBoolean(mFitInsetsIgnoringVisibility);
             out.writeBoolean(preferMinimalPostProcessing);
             out.writeInt(mBlurBehindRadius);
-            if (providesInsetsTypes != null) {
-                out.writeInt(providesInsetsTypes.length);
-                out.writeIntArray(providesInsetsTypes);
-            } else {
-                out.writeInt(0);
-            }
-            if (providedInternalInsets != null) {
-                out.writeInt(providedInternalInsets.length);
-                out.writeTypedArray(providedInternalInsets, 0 /* parcelableFlags */);
-            } else {
-                out.writeInt(0);
-            }
-            if (providedInternalImeInsets != null) {
-                out.writeInt(providedInternalImeInsets.length);
-                out.writeTypedArray(providedInternalImeInsets, 0 /* parcelableFlags */);
-            } else {
-                out.writeInt(0);
-            }
             out.writeBoolean(insetsRoundedCornerFrame);
-            if (paramsForRotation != null) {
-                checkNonRecursiveParams();
-                out.writeInt(paramsForRotation.length);
-                out.writeTypedArray(paramsForRotation, 0 /* parcelableFlags */);
-            } else {
-                out.writeInt(0);
-            }
+            out.writeTypedArray(providedInsets, 0 /* parcelableFlags */);
+            checkNonRecursiveParams();
+            out.writeTypedArray(paramsForRotation, 0 /* parcelableFlags */);
         }
 
         public static final @android.annotation.NonNull Parcelable.Creator<LayoutParams> CREATOR
@@ -4088,27 +4092,9 @@
             mFitInsetsIgnoringVisibility = in.readBoolean();
             preferMinimalPostProcessing = in.readBoolean();
             mBlurBehindRadius = in.readInt();
-            int insetsTypesLength = in.readInt();
-            if (insetsTypesLength > 0) {
-                providesInsetsTypes = new int[insetsTypesLength];
-                in.readIntArray(providesInsetsTypes);
-            }
-            int providedInternalInsetsLength = in.readInt();
-            if (providedInternalInsetsLength > 0) {
-                providedInternalInsets = new Insets[providedInternalInsetsLength];
-                in.readTypedArray(providedInternalInsets, Insets.CREATOR);
-            }
-            int providedInternalImeInsetsLength = in.readInt();
-            if (providedInternalImeInsetsLength > 0) {
-                providedInternalImeInsets = new Insets[providedInternalImeInsetsLength];
-                in.readTypedArray(providedInternalImeInsets, Insets.CREATOR);
-            }
             insetsRoundedCornerFrame = in.readBoolean();
-            int paramsForRotationLength = in.readInt();
-            if (paramsForRotationLength > 0) {
-                paramsForRotation = new LayoutParams[paramsForRotationLength];
-                in.readTypedArray(paramsForRotation, LayoutParams.CREATOR);
-            }
+            providedInsets = in.createTypedArray(InsetsFrameProvider.CREATOR);
+            paramsForRotation = in.createTypedArray(LayoutParams.CREATOR);
         }
 
         @SuppressWarnings({"PointlessBitwiseExpression"})
@@ -4400,18 +4386,8 @@
                 changes |= LAYOUT_CHANGED;
             }
 
-            if (!Arrays.equals(providesInsetsTypes, o.providesInsetsTypes)) {
-                providesInsetsTypes = o.providesInsetsTypes;
-                changes |= LAYOUT_CHANGED;
-            }
-
-            if (!Arrays.equals(providedInternalInsets, o.providedInternalInsets)) {
-                providedInternalInsets = o.providedInternalInsets;
-                changes |= LAYOUT_CHANGED;
-            }
-
-            if (!Arrays.equals(providedInternalImeInsets, o.providedInternalImeInsets)) {
-                providedInternalImeInsets = o.providedInternalImeInsets;
+            if (!Arrays.equals(providedInsets, o.providedInsets)) {
+                providedInsets = o.providedInsets;
                 changes |= LAYOUT_CHANGED;
             }
 
@@ -4613,28 +4589,12 @@
                 sb.append(System.lineSeparator());
                 sb.append(prefix).append("  fitIgnoreVis");
             }
-            if (providesInsetsTypes != null) {
+            if (providedInsets != null) {
                 sb.append(System.lineSeparator());
-                sb.append(prefix).append("  insetsTypes=");
-                for (int i = 0; i < providesInsetsTypes.length; ++i) {
+                sb.append(" providedInsets=");
+                for (int i = 0; i < providedInsets.length; ++i) {
                     if (i > 0) sb.append(' ');
-                    sb.append(InsetsState.typeToString(providesInsetsTypes[i]));
-                }
-            }
-            if (providedInternalInsets != null) {
-                sb.append(System.lineSeparator());
-                sb.append(" providedInternalInsets=");
-                for (int i = 0; i < providedInternalInsets.length; ++i) {
-                    if (i > 0) sb.append(' ');
-                    sb.append((providedInternalInsets[i]));
-                }
-            }
-            if (providedInternalImeInsets != null) {
-                sb.append(System.lineSeparator());
-                sb.append(" providedInternalImeInsets=");
-                for (int i = 0; i < providedInternalImeInsets.length; ++i) {
-                    if (i > 0) sb.append(' ');
-                    sb.append((providedInternalImeInsets[i]));
+                    sb.append((providedInsets[i]));
                 }
             }
             if (insetsRoundedCornerFrame) {
diff --git a/core/java/android/view/WindowManagerGlobal.java b/core/java/android/view/WindowManagerGlobal.java
index aae930e..d377565 100644
--- a/core/java/android/view/WindowManagerGlobal.java
+++ b/core/java/android/view/WindowManagerGlobal.java
@@ -83,6 +83,11 @@
     public static final int RELAYOUT_RES_CONSUME_ALWAYS_SYSTEM_BARS = 1 << 3;
 
     /**
+     * The window manager has told the window it cannot draw this frame and should retry again.
+     */
+    public static final int RELAYOUT_RES_CANCEL_AND_REDRAW = 1 << 4;
+
+    /**
      * Flag for relayout: the client will be later giving
      * internal insets; as a result, the window will not impact other window
      * layouts until the insets are given.
@@ -386,7 +391,7 @@
                 root = new ViewRootImpl(view.getContext(), display);
             } else {
                 root = new ViewRootImpl(view.getContext(), display,
-                        windowlessSession);
+                        windowlessSession, new WindowlessWindowLayout());
             }
 
             view.setLayoutParams(wparams);
@@ -399,9 +404,10 @@
             try {
                 root.setView(view, wparams, panelParentView, userId);
             } catch (RuntimeException e) {
+                final int viewIndex = (index >= 0) ? index : (mViews.size() - 1);
                 // BadTokenException or InvalidDisplayException, clean up.
-                if (index >= 0) {
-                    removeViewLocked(index, true);
+                if (viewIndex >= 0) {
+                    removeViewLocked(viewIndex, true);
                 }
                 throw e;
             }
diff --git a/core/java/android/view/WindowManagerPolicyConstants.java b/core/java/android/view/WindowManagerPolicyConstants.java
index 4d07171..43d427d 100644
--- a/core/java/android/view/WindowManagerPolicyConstants.java
+++ b/core/java/android/view/WindowManagerPolicyConstants.java
@@ -237,10 +237,6 @@
      */
     int LAYER_OFFSET_THUMBNAIL = WINDOW_LAYER_MULTIPLIER - 1;
 
-    // TODO(b/207185041): Remove this divider workaround after we full remove leagacy split and
-    //                    make app pair split only have single root then we can just attach the
-    //                    divider to the single root task in shell.
-    int SPLIT_DIVIDER_LAYER = TYPE_LAYER_MULTIPLIER * 3;
     int WATERMARK_LAYER = TYPE_LAYER_MULTIPLIER * 100;
     int STRICT_MODE_LAYER = TYPE_LAYER_MULTIPLIER * 101;
     int WINDOW_FREEZE_LAYER = TYPE_LAYER_MULTIPLIER * 200;
diff --git a/core/java/android/view/WindowlessWindowLayout.java b/core/java/android/view/WindowlessWindowLayout.java
new file mode 100644
index 0000000..5bec5b6
--- /dev/null
+++ b/core/java/android/view/WindowlessWindowLayout.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.view;
+
+import android.app.WindowConfiguration.WindowingMode;
+import android.graphics.Rect;
+import android.window.ClientWindowFrames;
+
+/**
+ * Computes window frames for the windowless window.
+ * @hide
+ */
+public class WindowlessWindowLayout extends WindowLayout {
+
+    @Override
+    public void computeFrames(WindowManager.LayoutParams attrs, InsetsState state,
+            Rect displayCutoutSafe, Rect windowBounds, @WindowingMode int windowingMode,
+            int requestedWidth, int requestedHeight, InsetsVisibilities requestedVisibilities,
+            float compatScale, ClientWindowFrames frames) {
+        frames.frame.set(0, 0, attrs.width, attrs.height);
+        frames.displayFrame.set(frames.frame);
+        frames.parentFrame.set(frames.frame);
+    }
+}
+
diff --git a/core/java/android/view/WindowlessWindowManager.java b/core/java/android/view/WindowlessWindowManager.java
index a212348..d55c838 100644
--- a/core/java/android/view/WindowlessWindowManager.java
+++ b/core/java/android/view/WindowlessWindowManager.java
@@ -149,7 +149,8 @@
     public int addToDisplay(IWindow window, WindowManager.LayoutParams attrs,
             int viewVisibility, int displayId, InsetsVisibilities requestedVisibilities,
             InputChannel outInputChannel, InsetsState outInsetsState,
-            InsetsSourceControl[] outActiveControls) {
+            InsetsSourceControl[] outActiveControls, Rect outAttachedFrame,
+            float[] outSizeCompatScale) {
         final SurfaceControl.Builder b = new SurfaceControl.Builder(mSurfaceSession)
                 .setFormat(attrs.format)
                 .setBLASTLayer()
@@ -181,6 +182,8 @@
         synchronized (this) {
             mStateForWindow.put(window.asBinder(), state);
         }
+        outAttachedFrame.set(0, 0, -1, -1);
+        outSizeCompatScale[0] = 1f;
 
         final int res = WindowManagerGlobal.ADD_OKAY | WindowManagerGlobal.ADD_FLAG_APP_VISIBLE |
                         WindowManagerGlobal.ADD_FLAG_USE_BLAST;
@@ -196,15 +199,18 @@
     public int addToDisplayAsUser(IWindow window, WindowManager.LayoutParams attrs,
             int viewVisibility, int displayId, int userId, InsetsVisibilities requestedVisibilities,
             InputChannel outInputChannel, InsetsState outInsetsState,
-            InsetsSourceControl[] outActiveControls) {
+            InsetsSourceControl[] outActiveControls, Rect outAttachedFrame,
+            float[] outSizeCompatScale) {
         return addToDisplay(window, attrs, viewVisibility, displayId, requestedVisibilities,
-                outInputChannel, outInsetsState, outActiveControls);
+                outInputChannel, outInsetsState, outActiveControls, outAttachedFrame,
+                outSizeCompatScale);
     }
 
     @Override
     public int addToDisplayWithoutInputChannel(android.view.IWindow window,
             android.view.WindowManager.LayoutParams attrs, int viewVisibility, int layerStackId,
-            android.view.InsetsState insetsState) {
+            android.view.InsetsState insetsState, Rect outAttachedFrame,
+            float[] outSizeCompatScale) {
         return 0;
     }
 
@@ -337,21 +343,6 @@
     }
 
     @Override
-    public int updateVisibility(IWindow window, WindowManager.LayoutParams inAttrs,
-            int viewVisibility, MergedConfiguration outMergedConfiguration,
-            SurfaceControl outSurfaceControl, InsetsState outInsetsState,
-            InsetsSourceControl[] outActiveControls) {
-        // TODO(b/161810301): Finish the implementation.
-        return 0;
-    }
-
-    @Override
-    public void updateLayout(IWindow window, WindowManager.LayoutParams inAttrs, int flags,
-            ClientWindowFrames clientWindowFrames, int requestedWidth, int requestedHeight) {
-        // TODO(b/161810301): Finish the implementation.
-    }
-
-    @Override
     public void prepareToReplaceWindows(android.os.IBinder appToken, boolean childrenOnly) {
     }
 
@@ -552,4 +543,9 @@
             }
         }
     }
+
+    @Override
+    public boolean cancelDraw(IWindow window) {
+        return false;
+    }
 }
diff --git a/core/java/android/view/contentcapture/MainContentCaptureSession.java b/core/java/android/view/contentcapture/MainContentCaptureSession.java
index 98ef4e7..90384b5 100644
--- a/core/java/android/view/contentcapture/MainContentCaptureSession.java
+++ b/core/java/android/view/contentcapture/MainContentCaptureSession.java
@@ -64,6 +64,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.NoSuchElementException;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 /**
@@ -630,7 +631,11 @@
         mComponentName = null;
         mEvents = null;
         if (mDirectServiceInterface != null) {
-            mDirectServiceInterface.asBinder().unlinkToDeath(mDirectServiceVulture, 0);
+            try {
+                mDirectServiceInterface.asBinder().unlinkToDeath(mDirectServiceVulture, 0);
+            } catch (NoSuchElementException e) {
+                Log.w(TAG, "IContentCaptureDirectManager does not exist");
+            }
         }
         mDirectServiceInterface = null;
         mHandler.removeMessages(MSG_FLUSH);
diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java
index 2879cd8..5eec054 100644
--- a/core/java/android/widget/RemoteViews.java
+++ b/core/java/android/widget/RemoteViews.java
@@ -594,8 +594,8 @@
      *  SUBCLASSES MUST BE IMMUTABLE SO CLONE WORKS!!!!!
      */
     private abstract static class Action implements Parcelable {
-        public abstract void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                ColorResources colorResources) throws ActionException;
+        public abstract void apply(View root, ViewGroup rootParent, ActionApplyParams params)
+                throws ActionException;
 
         public static final int MERGE_REPLACE = 0;
         public static final int MERGE_APPEND = 1;
@@ -626,7 +626,7 @@
          * Override this if some of the tasks can be performed async.
          */
         public Action initActionAsync(ViewTree root, ViewGroup rootParent,
-                InteractionHandler handler, ColorResources colorResources) {
+                ActionApplyParams params) {
             return this;
         }
 
@@ -661,9 +661,7 @@
     // Constant used during async execution. It is not parcelable.
     private static final Action ACTION_NOOP = new RuntimeAction() {
         @Override
-        public void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                ColorResources colorResources) {
-        }
+        public void apply(View root, ViewGroup rootParent, ActionApplyParams params) { }
     };
 
     /**
@@ -798,8 +796,7 @@
         }
 
         @Override
-        public void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                ColorResources colorResources) {
+        public void apply(View root, ViewGroup rootParent, ActionApplyParams params) {
             final View view = root.findViewById(viewId);
             if (!(view instanceof AdapterView<?>)) return;
 
@@ -834,8 +831,7 @@
         }
 
         @Override
-        public void apply(View root, ViewGroup rootParent, final InteractionHandler handler,
-                ColorResources colorResources) {
+        public void apply(View root, ViewGroup rootParent, ActionApplyParams params) {
             final View target = root.findViewById(viewId);
             if (target == null) return;
 
@@ -846,7 +842,7 @@
                 OnItemClickListener listener = (parent, view, position, id) -> {
                     RemoteResponse response = findRemoteResponseTag(view);
                     if (response != null) {
-                        response.handleViewInteraction(view, handler);
+                        response.handleViewInteraction(view, params.handler);
                     }
                 };
                 av.setOnItemClickListener(listener);
@@ -910,8 +906,7 @@
         }
 
         @Override
-        public void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                ColorResources colorResources) {
+        public void apply(View root, ViewGroup rootParent, ActionApplyParams params) {
             final View target = root.findViewById(viewId);
             if (target == null) return;
 
@@ -935,7 +930,7 @@
                     ((RemoteViewsListAdapter) a).setViewsList(list);
                 } else {
                     v.setAdapter(new RemoteViewsListAdapter(v.getContext(), list, viewTypeCount,
-                            colorResources));
+                            params.colorResources));
                 }
             } else if (target instanceof AdapterViewAnimator) {
                 AdapterViewAnimator v = (AdapterViewAnimator) target;
@@ -944,7 +939,7 @@
                     ((RemoteViewsListAdapter) a).setViewsList(list);
                 } else {
                     v.setAdapter(new RemoteViewsListAdapter(v.getContext(), list, viewTypeCount,
-                            colorResources));
+                            params.colorResources));
                 }
             }
         }
@@ -1025,8 +1020,8 @@
         }
 
         @Override
-        public void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                ColorResources colorResources) throws ActionException {
+        public void apply(View root, ViewGroup rootParent, ActionApplyParams params)
+                throws ActionException {
             View target = root.findViewById(viewId);
             if (target == null) return;
 
@@ -1053,7 +1048,7 @@
                     && adapter.getViewTypeCount() >= mItems.getViewTypeCount()) {
                 try {
                     ((RemoteCollectionItemsAdapter) adapter).setData(
-                            mItems, handler, colorResources);
+                            mItems, params.handler, params.colorResources);
                 } catch (Throwable throwable) {
                     // setData should never failed with the validation in the items builder, but if
                     // it does, catch and rethrow.
@@ -1063,8 +1058,8 @@
             }
 
             try {
-                adapterView.setAdapter(
-                        new RemoteCollectionItemsAdapter(mItems, handler, colorResources));
+                adapterView.setAdapter(new RemoteCollectionItemsAdapter(mItems,
+                        params.handler, params.colorResources));
             } catch (Throwable throwable) {
                 // This could throw if the AdapterView somehow doesn't accept BaseAdapter due to
                 // a type error.
@@ -1095,8 +1090,7 @@
         }
 
         @Override
-        public void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                ColorResources colorResources) {
+        public void apply(View root, ViewGroup rootParent, ActionApplyParams params) {
             final View target = root.findViewById(viewId);
             if (target == null) return;
 
@@ -1124,17 +1118,17 @@
             if (target instanceof AbsListView) {
                 AbsListView v = (AbsListView) target;
                 v.setRemoteViewsAdapter(intent, isAsync);
-                v.setRemoteViewsInteractionHandler(handler);
+                v.setRemoteViewsInteractionHandler(params.handler);
             } else if (target instanceof AdapterViewAnimator) {
                 AdapterViewAnimator v = (AdapterViewAnimator) target;
                 v.setRemoteViewsAdapter(intent, isAsync);
-                v.setRemoteViewsOnClickHandler(handler);
+                v.setRemoteViewsOnClickHandler(params.handler);
             }
         }
 
         @Override
         public Action initActionAsync(ViewTree root, ViewGroup rootParent,
-                InteractionHandler handler, ColorResources colorResources) {
+                ActionApplyParams params) {
             SetRemoteViewsAdapterIntent copy = new SetRemoteViewsAdapterIntent(viewId, intent);
             copy.isAsync = true;
             return copy;
@@ -1173,8 +1167,7 @@
         }
 
         @Override
-        public void apply(View root, ViewGroup rootParent, final InteractionHandler handler,
-                ColorResources colorResources) {
+        public void apply(View root, ViewGroup rootParent, ActionApplyParams params) {
             final View target = root.findViewById(viewId);
             if (target == null) return;
 
@@ -1215,7 +1208,7 @@
                 target.setTagInternal(com.android.internal.R.id.fillInIntent, null);
                 return;
             }
-            target.setOnClickListener(v -> mResponse.handleViewInteraction(v, handler));
+            target.setOnClickListener(v -> mResponse.handleViewInteraction(v, params.handler));
         }
 
         @Override
@@ -1253,8 +1246,7 @@
         }
 
         @Override
-        public void apply(View root, ViewGroup rootParent, final InteractionHandler handler,
-                ColorResources colorResources) {
+        public void apply(View root, ViewGroup rootParent, ActionApplyParams params) {
             final View target = root.findViewById(viewId);
             if (target == null) return;
             if (!(target instanceof CompoundButton)) {
@@ -1287,7 +1279,7 @@
             }
 
             OnCheckedChangeListener onCheckedChangeListener =
-                    (v, isChecked) -> mResponse.handleViewInteraction(v, handler);
+                    (v, isChecked) -> mResponse.handleViewInteraction(v, params.handler);
             button.setTagInternal(R.id.remote_checked_change_listener_tag, onCheckedChangeListener);
             button.setOnCheckedChangeListener(onCheckedChangeListener);
         }
@@ -1459,8 +1451,7 @@
         }
 
         @Override
-        public void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                ColorResources colorResources) {
+        public void apply(View root, ViewGroup rootParent, ActionApplyParams params) {
             final View target = root.findViewById(viewId);
             if (target == null) return;
 
@@ -1517,8 +1508,7 @@
         }
 
         @Override
-        public void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                ColorResources colorResources) {
+        public void apply(View root, ViewGroup rootParent, ActionApplyParams params) {
             final View target = root.findViewById(viewId);
             if (target == null) return;
 
@@ -1561,8 +1551,7 @@
         }
 
         @Override
-        public void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                ColorResources colorResources) {
+        public void apply(View root, ViewGroup rootParent, ActionApplyParams params) {
             final View view = root.findViewById(viewId);
             if (view == null) return;
 
@@ -1675,12 +1664,12 @@
         }
 
         @Override
-        public void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                ColorResources colorResources) throws ActionException {
+        public void apply(View root, ViewGroup rootParent, ActionApplyParams params)
+                throws ActionException {
             ReflectionAction ra = new ReflectionAction(viewId, methodName,
                     BaseReflectionAction.BITMAP,
                     bitmap);
-            ra.apply(root, rootParent, handler, colorResources);
+            ra.apply(root, rootParent, params);
         }
 
         @Override
@@ -1756,8 +1745,7 @@
         protected abstract Object getParameterValue(@Nullable View view) throws ActionException;
 
         @Override
-        public final void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                ColorResources colorResources) {
+        public final void apply(View root, ViewGroup rootParent, ActionApplyParams params) {
             final View view = root.findViewById(viewId);
             if (view == null) return;
 
@@ -1775,7 +1763,7 @@
 
         @Override
         public final Action initActionAsync(ViewTree root, ViewGroup rootParent,
-                InteractionHandler handler, ColorResources colorResources) {
+                ActionApplyParams params) {
             final View view = root.findViewById(viewId);
             if (view == null) return ACTION_NOOP;
 
@@ -2307,8 +2295,7 @@
         }
 
         @Override
-        public void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                ColorResources colorResources) {
+        public void apply(View root, ViewGroup rootParent, ActionApplyParams params) {
             mRunnable.run();
         }
     }
@@ -2421,8 +2408,7 @@
         }
 
         @Override
-        public void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                ColorResources colorResources) {
+        public void apply(View root, ViewGroup rootParent, ActionApplyParams params) {
             final Context context = root.getContext();
             final ViewGroup target = root.findViewById(viewId);
 
@@ -2451,8 +2437,7 @@
                             target.removeViews(nextChild, recycledViewIndex - nextChild);
                         }
                         setNextRecyclableChild(target, nextChild + 1, target.getChildCount());
-                        rvToApply.reapplyNestedViews(context, child, rootParent, handler,
-                                null /* size */, colorResources);
+                        rvToApply.reapplyNestedViews(context, child, rootParent, params);
                         return;
                     }
                     // If we cannot recycle the views, we still remove all views in between to
@@ -2463,8 +2448,7 @@
             // If we cannot recycle, insert the new view before the next recyclable child.
 
             // Inflate nested views and add as children
-            View nestedView = rvToApply.applyNestedViews(context, target, rootParent, handler,
-                    null /* size */, colorResources);
+            View nestedView = rvToApply.apply(context, target, rootParent, null /* size */, params);
             if (mStableId != NO_ID) {
                 setStableId(nestedView, mStableId);
             }
@@ -2477,7 +2461,7 @@
 
         @Override
         public Action initActionAsync(ViewTree root, ViewGroup rootParent,
-                InteractionHandler handler, ColorResources colorResources) {
+                ActionApplyParams params) {
             // In the async implementation, update the view tree so that subsequent calls to
             // findViewById return the current view.
             root.createTree();
@@ -2511,8 +2495,7 @@
                         setNextRecyclableChild(targetVg, nextChild + 1, target.mChildren.size());
                         final AsyncApplyTask reapplyTask = rvToApply.getInternalAsyncApplyTask(
                                 context,
-                                targetVg, null /* listener */, handler, null /* size */,
-                                colorResources,
+                                targetVg, null /* listener */, params, null /* size */,
                                 recycled.mRoot);
                         final ViewTree tree = reapplyTask.doInBackground();
                         if (tree == null) {
@@ -2521,8 +2504,7 @@
                         return new RuntimeAction() {
                             @Override
                             public void apply(View root, ViewGroup rootParent,
-                                    InteractionHandler handler, ColorResources colorResources)
-                                    throws ActionException {
+                                    ActionApplyParams params) throws ActionException {
                                 reapplyTask.onPostExecute(tree);
                                 if (recycledViewIndex > nextChild) {
                                     targetVg.removeViews(nextChild, recycledViewIndex - nextChild);
@@ -2533,23 +2515,22 @@
                     // If the layout id is different, still remove the children as if we recycled
                     // the view, to insert at the same place.
                     target.removeChildren(nextChild, recycledViewIndex - nextChild + 1);
-                    return insertNewView(context, target, handler, colorResources,
+                    return insertNewView(context, target, params,
                             () -> targetVg.removeViews(nextChild,
                                     recycledViewIndex - nextChild + 1));
 
                 }
             }
             // If we cannot recycle, simply add the view at the same available slot.
-            return insertNewView(context, target, handler, colorResources, () -> {});
+            return insertNewView(context, target, params, () -> {});
         }
 
-        private Action insertNewView(Context context, ViewTree target, InteractionHandler handler,
-                ColorResources colorResources, Runnable finalizeAction) {
+        private Action insertNewView(Context context, ViewTree target,
+                ActionApplyParams params, Runnable finalizeAction) {
             ViewGroup targetVg = (ViewGroup) target.mRoot;
             int nextChild = getNextRecyclableChild(targetVg);
             final AsyncApplyTask task = mNestedViews.getInternalAsyncApplyTask(context, targetVg,
-                    null /* listener */, handler, null /* size */, colorResources,
-                    null /* result */);
+                    null /* listener */, params, null /* size */,  null /* result */);
             final ViewTree tree = task.doInBackground();
 
             if (tree == null) {
@@ -2569,8 +2550,7 @@
 
             return new RuntimeAction() {
                 @Override
-                public void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                        ColorResources colorResources) throws ActionException {
+                public void apply(View root, ViewGroup rootParent, ActionApplyParams params) {
                     task.onPostExecute(tree);
                     finalizeAction.run();
                     targetVg.addView(task.mResult, insertIndex);
@@ -2627,8 +2607,7 @@
         }
 
         @Override
-        public void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                ColorResources colorResources) {
+        public void apply(View root, ViewGroup rootParent, ActionApplyParams params) {
             final ViewGroup target = root.findViewById(viewId);
 
             if (target == null) {
@@ -2652,7 +2631,7 @@
 
         @Override
         public Action initActionAsync(ViewTree root, ViewGroup rootParent,
-                InteractionHandler handler, ColorResources colorResources) {
+                ActionApplyParams params) {
             // In the async implementation, update the view tree so that subsequent calls to
             // findViewById return the current view.
             root.createTree();
@@ -2676,8 +2655,7 @@
             }
             return new RuntimeAction() {
                 @Override
-                public void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                        ColorResources colorResources) throws ActionException {
+                public void apply(View root, ViewGroup rootParent, ActionApplyParams params) {
                     if (mViewIdToKeep == REMOVE_ALL_VIEWS_ID) {
                         for (int i = targetVg.getChildCount() - 1; i >= 0; i--) {
                             if (!hasStableId(targetVg.getChildAt(i))) {
@@ -2736,8 +2714,7 @@
         }
 
         @Override
-        public void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                ColorResources colorResources) {
+        public void apply(View root, ViewGroup rootParent, ActionApplyParams params) {
             final View target = root.findViewById(viewId);
 
             if (target == null || target == root) {
@@ -2752,7 +2729,7 @@
 
         @Override
         public Action initActionAsync(ViewTree root, ViewGroup rootParent,
-                InteractionHandler handler, ColorResources colorResources) {
+                ActionApplyParams params) {
             // In the async implementation, update the view tree so that subsequent calls to
             // findViewById return the correct view.
             root.createTree();
@@ -2771,8 +2748,7 @@
             parent.mChildren.remove(target);
             return new RuntimeAction() {
                 @Override
-                public void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                        ColorResources colorResources) throws ActionException {
+                public void apply(View root, ViewGroup rootParent, ActionApplyParams params) {
                     parentVg.removeView(target.mRoot);
                 }
             };
@@ -2851,8 +2827,7 @@
         }
 
         @Override
-        public void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                ColorResources colorResources) {
+        public void apply(View root, ViewGroup rootParent, ActionApplyParams params) {
             final TextView target = root.findViewById(viewId);
             if (target == null) return;
             if (drawablesLoaded) {
@@ -2883,7 +2858,7 @@
 
         @Override
         public Action initActionAsync(ViewTree root, ViewGroup rootParent,
-                InteractionHandler handler, ColorResources colorResources) {
+                ActionApplyParams params) {
             final TextView target = root.findViewById(viewId);
             if (target == null) return ACTION_NOOP;
 
@@ -2961,8 +2936,7 @@
         }
 
         @Override
-        public void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                ColorResources colorResources) {
+        public void apply(View root, ViewGroup rootParent, ActionApplyParams params) {
             final TextView target = root.findViewById(viewId);
             if (target == null) return;
             target.setTextSize(units, size);
@@ -3007,8 +2981,7 @@
         }
 
         @Override
-        public void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                ColorResources colorResources) {
+        public void apply(View root, ViewGroup rootParent, ActionApplyParams params) {
             final View target = root.findViewById(viewId);
             if (target == null) return;
             target.setPadding(left, top, right, bottom);
@@ -3084,8 +3057,7 @@
         }
 
         @Override
-        public void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                ColorResources colorResources) {
+        public void apply(View root, ViewGroup rootParent, ActionApplyParams params) {
             final View target = root.findViewById(viewId);
             if (target == null) {
                 return;
@@ -3230,8 +3202,7 @@
         }
 
         @Override
-        public void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                ColorResources colorResources) {
+        public void apply(View root, ViewGroup rootParent, ActionApplyParams params) {
             final View target = root.findViewById(viewId);
             if (target == null) return;
 
@@ -3266,8 +3237,7 @@
         }
 
         @Override
-        public void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                ColorResources colorResources) {
+        public void apply(View root, ViewGroup rootParent, ActionApplyParams params) {
             // Let's traverse the viewtree and override all textColors!
             Stack<View> viewsToProcess = new Stack<>();
             viewsToProcess.add(root);
@@ -3317,8 +3287,7 @@
         }
 
         @Override
-        public void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                ColorResources colorResources) {
+        public void apply(View root, ViewGroup rootParent, ActionApplyParams params) {
             final View target = root.findViewById(mViewId);
             if (target == null) return;
 
@@ -3352,8 +3321,7 @@
         }
 
         @Override
-        public void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                ColorResources colorResources)
+        public void apply(View root, ViewGroup rootParent, ActionApplyParams params)
                 throws ActionException {
             final View target = root.findViewById(viewId);
             if (target == null) return;
@@ -3404,8 +3372,8 @@
         }
 
         @Override
-        public void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                ColorResources colorResources) throws ActionException {
+        public void apply(View root, ViewGroup rootParent, ActionApplyParams params)
+                throws ActionException {
             final View target = root.findViewById(viewId);
             if (target == null) return;
 
@@ -3483,8 +3451,8 @@
         }
 
         @Override
-        public void apply(View root, ViewGroup rootParent, InteractionHandler handler,
-                ColorResources colorResources) throws ActionException {
+        public void apply(View root, ViewGroup rootParent, ActionApplyParams params)
+                throws ActionException {
             final View target = root.findViewById(viewId);
             if (target == null) return;
 
@@ -5578,52 +5546,39 @@
     /** @hide */
     public View apply(@NonNull Context context, @NonNull ViewGroup parent,
             @Nullable InteractionHandler handler, @Nullable SizeF size) {
-        RemoteViews rvToApply = getRemoteViewsToApply(context, size);
-
-        View result = inflateView(context, rvToApply, parent);
-        rvToApply.performApply(result, parent, handler, null);
-        return result;
+        return apply(context, parent, size, new ActionApplyParams()
+                .withInteractionHandler(handler));
     }
 
     /** @hide */
     public View applyWithTheme(@NonNull Context context, @NonNull ViewGroup parent,
             @Nullable InteractionHandler handler, @StyleRes int applyThemeResId) {
-        return applyWithTheme(context, parent, handler, applyThemeResId, null);
-    }
-
-    /** @hide */
-    public View applyWithTheme(@NonNull Context context, @NonNull ViewGroup parent,
-            @Nullable InteractionHandler handler, @StyleRes int applyThemeResId,
-            @Nullable SizeF size) {
-        RemoteViews rvToApply = getRemoteViewsToApply(context, size);
-
-        View result = inflateView(context, rvToApply, parent, applyThemeResId, null);
-        rvToApply.performApply(result, parent, handler, null);
-        return result;
+        return apply(context, parent, null, new ActionApplyParams()
+                .withInteractionHandler(handler)
+                .withThemeResId(applyThemeResId));
     }
 
     /** @hide */
     public View apply(Context context, ViewGroup parent, InteractionHandler handler,
             @Nullable SizeF size, @Nullable ColorResources colorResources) {
-        RemoteViews rvToApply = getRemoteViewsToApply(context, size);
-
-        View result = inflateView(context, rvToApply, parent, 0, colorResources);
-        rvToApply.performApply(result, parent, handler, colorResources);
-        return result;
+        return apply(context, parent, size, new ActionApplyParams()
+                .withInteractionHandler(handler)
+                .withColorResources(colorResources));
     }
 
-    private View applyNestedViews(Context context, ViewGroup directParent,
-            ViewGroup rootParent, InteractionHandler handler, SizeF size,
-            ColorResources colorResources) {
-        RemoteViews rvToApply = getRemoteViewsToApply(context, size);
-
-        View result = inflateView(context, rvToApply, directParent, 0, colorResources);
-        rvToApply.performApply(result, rootParent, handler, colorResources);
-        return result;
+    /** @hide **/
+    public View apply(Context context, ViewGroup parent, @Nullable SizeF size,
+            ActionApplyParams params) {
+        return apply(context, parent, parent, size, params);
     }
 
-    private View inflateView(Context context, RemoteViews rv, ViewGroup parent) {
-        return inflateView(context, rv, parent, 0, null);
+    private View apply(Context context, ViewGroup directParent, ViewGroup rootParent,
+            @Nullable SizeF size, ActionApplyParams params) {
+        RemoteViews rvToApply = getRemoteViewsToApply(context, size);
+        View result = inflateView(context, rvToApply, directParent,
+                params.applyThemeResId, params.colorResources);
+        rvToApply.performApply(result, rootParent, params);
+        return result;
     }
 
     private View inflateView(Context context, RemoteViews rv, @Nullable ViewGroup parent,
@@ -5704,7 +5659,6 @@
         return applyAsync(context, parent, executor, listener, null /* handler */);
     }
 
-
     /** @hide */
     public CancellationSignal applyAsync(Context context, ViewGroup parent,
             Executor executor, OnViewAppliedListener listener, InteractionHandler handler) {
@@ -5723,16 +5677,19 @@
     public CancellationSignal applyAsync(Context context, ViewGroup parent, Executor executor,
             OnViewAppliedListener listener, InteractionHandler handler, SizeF size,
             ColorResources colorResources) {
+
+        ActionApplyParams params = new ActionApplyParams()
+                .withInteractionHandler(handler)
+                .withColorResources(colorResources)
+                .withExecutor(executor);
         return new AsyncApplyTask(getRemoteViewsToApply(context, size), parent, context, listener,
-                handler, colorResources, null /* result */,
-                true /* topLevel */).startTaskOnExecutor(executor);
+                params, null /* result */, true /* topLevel */).startTaskOnExecutor(executor);
     }
 
     private AsyncApplyTask getInternalAsyncApplyTask(Context context, ViewGroup parent,
-            OnViewAppliedListener listener, InteractionHandler handler, SizeF size,
-            ColorResources colorResources, View result) {
+            OnViewAppliedListener listener, ActionApplyParams params, SizeF size, View result) {
         return new AsyncApplyTask(getRemoteViewsToApply(context, size), parent, context, listener,
-                handler, colorResources, result, false /* topLevel */);
+                params, result, false /* topLevel */);
     }
 
     private class AsyncApplyTask extends AsyncTask<Void, Void, ViewTree>
@@ -5742,8 +5699,8 @@
         final ViewGroup mParent;
         final Context mContext;
         final OnViewAppliedListener mListener;
-        final InteractionHandler mHandler;
-        final ColorResources mColorResources;
+        final ActionApplyParams mApplyParams;
+
         /**
          * Whether the remote view is the top-level one (i.e. not within an action).
          *
@@ -5758,16 +5715,13 @@
 
         private AsyncApplyTask(
                 RemoteViews rv, ViewGroup parent, Context context, OnViewAppliedListener listener,
-                InteractionHandler handler, ColorResources colorResources,
-                View result, boolean topLevel) {
+                ActionApplyParams applyParams, View result, boolean topLevel) {
             mRV = rv;
             mParent = parent;
             mContext = context;
             mListener = listener;
-            mColorResources = colorResources;
-            mHandler = handler;
             mTopLevel = topLevel;
-
+            mApplyParams = applyParams;
             mResult = result;
         }
 
@@ -5776,17 +5730,18 @@
         protected ViewTree doInBackground(Void... params) {
             try {
                 if (mResult == null) {
-                    mResult = inflateView(mContext, mRV, mParent, 0, mColorResources);
+                    mResult = inflateView(mContext, mRV, mParent, 0, mApplyParams.colorResources);
                 }
 
                 mTree = new ViewTree(mResult);
+
                 if (mRV.mActions != null) {
                     int count = mRV.mActions.size();
                     mActions = new Action[count];
                     for (int i = 0; i < count && !isCancelled(); i++) {
                         // TODO: check if isCancelled in nested views.
-                        mActions[i] = mRV.mActions.get(i).initActionAsync(mTree, mParent, mHandler,
-                                mColorResources);
+                        mActions[i] = mRV.mActions.get(i)
+                                .initActionAsync(mTree, mParent, mApplyParams);
                     }
                 } else {
                     mActions = null;
@@ -5808,10 +5763,13 @@
 
                 try {
                     if (mActions != null) {
-                        InteractionHandler handler = mHandler == null
-                                ? DEFAULT_INTERACTION_HANDLER : mHandler;
+
+                        ActionApplyParams applyParams = mApplyParams.clone();
+                        if (applyParams.handler == null) {
+                            applyParams.handler = DEFAULT_INTERACTION_HANDLER;
+                        }
                         for (Action a : mActions) {
-                            a.apply(viewTree.mRoot, mParent, handler, mColorResources);
+                            a.apply(viewTree.mRoot, mParent, applyParams);
                         }
                     }
                     // If the parent of the view is has is a root, resolve the recycling.
@@ -5859,18 +5817,43 @@
      * the {@link #apply(Context,ViewGroup)} call.
      */
     public void reapply(Context context, View v) {
-        reapply(context, v, null /* handler */);
+        reapply(context, v, null /* size */, new ActionApplyParams());
     }
 
     /** @hide */
     public void reapply(Context context, View v, InteractionHandler handler) {
-        reapply(context, v, handler, null /* size */, null /* colorResources */);
+        reapply(context, v, null /* size */,
+                new ActionApplyParams().withInteractionHandler(handler));
     }
 
     /** @hide */
     public void reapply(Context context, View v, InteractionHandler handler, SizeF size,
             ColorResources colorResources) {
-        reapply(context, v, handler, size, colorResources, true);
+        reapply(context, v, size, new ActionApplyParams()
+                .withInteractionHandler(handler).withColorResources(colorResources));
+    }
+
+    /** @hide */
+    public void reapply(Context context, View v, @Nullable SizeF size, ActionApplyParams params) {
+        reapply(context, v, (ViewGroup) v.getParent(), size, params, true);
+    }
+
+    private void reapplyNestedViews(Context context, View v, ViewGroup rootParent,
+            ActionApplyParams params) {
+        reapply(context, v, rootParent, null, params, false);
+    }
+
+    // Note: topLevel should be true only for calls on the topLevel RemoteViews, internal calls
+    // should set it to false.
+    private void reapply(Context context, View v, ViewGroup rootParent,
+            @Nullable SizeF size, ActionApplyParams params, boolean topLevel) {
+        RemoteViews rvToApply = getRemoteViewsToReapply(context, v, size);
+        rvToApply.performApply(v, rootParent, params);
+
+        // If the parent of the view is has is a root, resolve the recycling.
+        if (topLevel && v instanceof ViewGroup) {
+            finalizeViewRecycling((ViewGroup) v);
+        }
     }
 
     /** @hide */
@@ -5922,27 +5905,6 @@
         return rvToApply;
     }
 
-    // Note: topLevel should be true only for calls on the topLevel RemoteViews, internal calls
-    // should set it to false.
-    private void reapply(Context context, View v, InteractionHandler handler, SizeF size,
-            ColorResources colorResources, boolean topLevel) {
-
-        RemoteViews rvToApply = getRemoteViewsToReapply(context, v, size);
-
-        rvToApply.performApply(v, (ViewGroup) v.getParent(), handler, colorResources);
-
-        // If the parent of the view is has is a root, resolve the recycling.
-        if (topLevel && v instanceof ViewGroup) {
-            finalizeViewRecycling((ViewGroup) v);
-        }
-    }
-
-    private void reapplyNestedViews(Context context, View v, ViewGroup rootParent,
-            InteractionHandler handler, SizeF size, ColorResources colorResources) {
-        RemoteViews rvToApply = getRemoteViewsToReapply(context, v, size);
-        rvToApply.performApply(v, rootParent, handler, colorResources);
-    }
-
     /**
      * Applies all the actions to the provided view, moving as much of the task on the background
      * thread as possible.
@@ -5973,19 +5935,25 @@
             ColorResources colorResources) {
         RemoteViews rvToApply = getRemoteViewsToReapply(context, v, size);
 
+        ActionApplyParams params = new ActionApplyParams()
+                .withColorResources(colorResources)
+                .withInteractionHandler(handler)
+                .withExecutor(executor);
+
         return new AsyncApplyTask(rvToApply, (ViewGroup) v.getParent(),
-                context, listener, handler, colorResources, v, true /* topLevel */)
+                context, listener, params, v, true /* topLevel */)
                 .startTaskOnExecutor(executor);
     }
 
-    private void performApply(View v, ViewGroup parent, InteractionHandler handler,
-            ColorResources colorResources) {
+    private void performApply(View v, ViewGroup parent, ActionApplyParams params) {
+        params = params.clone();
+        if (params.handler == null) {
+            params.handler = DEFAULT_INTERACTION_HANDLER;
+        }
         if (mActions != null) {
-            handler = handler == null ? DEFAULT_INTERACTION_HANDLER : handler;
             final int count = mActions.size();
             for (int i = 0; i < count; i++) {
-                Action a = mActions.get(i);
-                a.apply(v, parent, handler, colorResources);
+                mActions.get(i).apply(v, parent, params);
             }
         }
     }
@@ -6043,6 +6011,47 @@
     }
 
     /**
+     * Utility class to hold all the options when applying the remote views
+     * @hide
+     */
+    public class ActionApplyParams {
+
+        public InteractionHandler handler;
+        public ColorResources colorResources;
+        public Executor executor;
+        @StyleRes public int applyThemeResId;
+
+        @Override
+        public ActionApplyParams clone() {
+            return new ActionApplyParams()
+                    .withInteractionHandler(handler)
+                    .withColorResources(colorResources)
+                    .withExecutor(executor)
+                    .withThemeResId(applyThemeResId);
+        }
+
+        public ActionApplyParams withInteractionHandler(InteractionHandler handler) {
+            this.handler = handler;
+            return this;
+        }
+
+        public ActionApplyParams withColorResources(ColorResources colorResources) {
+            this.colorResources = colorResources;
+            return this;
+        }
+
+        public ActionApplyParams withThemeResId(@StyleRes int themeResId) {
+            this.applyThemeResId = themeResId;
+            return this;
+        }
+
+        public ActionApplyParams withExecutor(Executor executor) {
+            this.executor = executor;
+            return this;
+        }
+    }
+
+    /**
      * Object allowing the modification of a context to overload the system's dynamic colors.
      *
      * Only colors from {@link android.R.color#system_accent1_0} to
@@ -6056,10 +6065,12 @@
         // Size, in bytes, of an entry in the array of colors in an ARSC file.
         private static final int ARSC_ENTRY_SIZE = 16;
 
-        private ResourcesLoader mLoader;
+        private final ResourcesLoader mLoader;
+        private final SparseIntArray mColorMapping;
 
-        private ColorResources(ResourcesLoader loader) {
+        private ColorResources(ResourcesLoader loader, SparseIntArray colorMapping) {
             mLoader = loader;
+            mColorMapping = colorMapping;
         }
 
         /**
@@ -6071,6 +6082,10 @@
             context.getResources().addLoaders(mLoader);
         }
 
+        public SparseIntArray getColorMapping() {
+            return mColorMapping;
+        }
+
         private static ByteArrayOutputStream readFileContent(InputStream input) throws IOException {
             ByteArrayOutputStream content = new ByteArrayOutputStream(2048);
             byte[] buffer = new byte[4096];
@@ -6145,7 +6160,7 @@
                             ResourcesLoader colorsLoader = new ResourcesLoader();
                             colorsLoader.addProvider(ResourcesProvider
                                     .loadFromTable(pfd, null /* assetsProvider */));
-                            return new ColorResources(colorsLoader);
+                            return new ColorResources(colorsLoader, colorMapping.clone());
                         }
                     }
                 } finally {
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 23393ff..2268bef 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -6440,9 +6440,8 @@
     public void setText(CharSequence text, BufferType type) {
         setText(text, type, true, 0);
 
-        if (mCharWrapper != null) {
-            mCharWrapper.mChars = null;
-        }
+        // drop any potential mCharWrappper leaks
+        mCharWrapper = null;
     }
 
     @UnsupportedAppUsage
@@ -6653,11 +6652,14 @@
      * since the TextView has no way to know that the text
      * has changed and that it needs to invalidate and re-layout.
      *
+     * @throws NullPointerException if text is null
+     * @throws IndexOutOfBoundsException if start or start+len are not in 0 to text.length
+     *
      * @param text char array to be displayed
      * @param start start index in the char array
      * @param len length of char count after {@code start}
      */
-    public final void setText(char[] text, int start, int len) {
+    public final void setText(/* @NonNull */ char[] text, int start, int len) {
         int oldlen = 0;
 
         if (start < 0 || len < 0 || start + len > text.length) {
@@ -13888,16 +13890,17 @@
     }
 
     private static class CharWrapper implements CharSequence, GetChars, GraphicsOperations {
+        @NonNull
         private char[] mChars;
         private int mStart, mLength;
 
-        public CharWrapper(char[] chars, int start, int len) {
+        CharWrapper(@NonNull char[] chars, int start, int len) {
             mChars = chars;
             mStart = start;
             mLength = len;
         }
 
-        /* package */ void set(char[] chars, int start, int len) {
+        /* package */ void set(@NonNull char[] chars, int start, int len) {
             mChars = chars;
             mStart = start;
             mLength = len;
diff --git a/core/java/android/widget/Toast.java b/core/java/android/widget/Toast.java
index dbf3570..ca57c84 100644
--- a/core/java/android/widget/Toast.java
+++ b/core/java/android/widget/Toast.java
@@ -32,6 +32,7 @@
 import android.compat.annotation.UnsupportedAppUsage;
 import android.content.Context;
 import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
 import android.os.Binder;
 import android.os.Build;
 import android.os.Handler;
@@ -494,19 +495,39 @@
      */
     public static Toast makeText(@NonNull Context context, @Nullable Looper looper,
             @NonNull CharSequence text, @Duration int duration) {
-        if (Compatibility.isChangeEnabled(CHANGE_TEXT_TOASTS_IN_THE_SYSTEM)) {
-            Toast result = new Toast(context, looper);
-            result.mText = text;
-            result.mDuration = duration;
-            return result;
-        } else {
-            Toast result = new Toast(context, looper);
-            View v = ToastPresenter.getTextToastView(context, text);
-            result.mNextView = v;
-            result.mDuration = duration;
+        Toast result = new Toast(context, looper);
 
-            return result;
+        if (Compatibility.isChangeEnabled(CHANGE_TEXT_TOASTS_IN_THE_SYSTEM)) {
+            result.mText = text;
+        } else {
+            result.mNextView = ToastPresenter.getTextToastView(context, text);
         }
+
+        result.mDuration = duration;
+        return result;
+    }
+
+    /**
+     * Make a standard toast with an icon to display using the specified looper.
+     * If looper is null, Looper.myLooper() is used.
+     *
+     * The toast will be a custom view that's rendered by the app (instead of by SystemUI).
+     * In Android version R and above, non-system apps can only render the toast
+     * when it's in the foreground.
+     *
+     * @hide
+     */
+    public static Toast makeCustomToastWithIcon(@NonNull Context context, @Nullable Looper looper,
+            @NonNull CharSequence text, @Duration int duration, @NonNull Drawable icon) {
+        if (icon == null) {
+            throw new IllegalArgumentException("Drawable icon should not be null "
+                    + "for makeCustomToastWithIcon");
+        }
+
+        Toast result = new Toast(context, looper);
+        result.mNextView = ToastPresenter.getTextToastViewWithIcon(context, text, icon);
+        result.mDuration = duration;
+        return result;
     }
 
     /**
diff --git a/core/java/android/widget/ToastPresenter.java b/core/java/android/widget/ToastPresenter.java
index eccff06..7467100 100644
--- a/core/java/android/widget/ToastPresenter.java
+++ b/core/java/android/widget/ToastPresenter.java
@@ -25,6 +25,7 @@
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.graphics.PixelFormat;
+import android.graphics.drawable.Drawable;
 import android.os.IBinder;
 import android.os.RemoteException;
 import android.util.Log;
@@ -55,6 +56,8 @@
 
     @VisibleForTesting
     public static final int TEXT_TOAST_LAYOUT = R.layout.transient_notification;
+    @VisibleForTesting
+    public static final int TEXT_TOAST_LAYOUT_WITH_ICON = R.layout.transient_notification_with_icon;
 
     /**
      * Returns the default text toast view for message {@code text}.
@@ -66,6 +69,24 @@
         return view;
     }
 
+    /**
+     * Returns the default icon text toast view for message {@code text} and the icon {@code icon}.
+     */
+    public static View getTextToastViewWithIcon(Context context, CharSequence text, Drawable icon) {
+        if (icon == null) {
+            return getTextToastView(context, text);
+        }
+
+        View view = LayoutInflater.from(context).inflate(TEXT_TOAST_LAYOUT_WITH_ICON, null);
+        TextView textView = view.findViewById(com.android.internal.R.id.message);
+        textView.setText(text);
+        ImageView imageView = view.findViewById(com.android.internal.R.id.icon);
+        if (imageView != null) {
+            imageView.setImageDrawable(icon);
+        }
+        return view;
+    }
+
     private final Context mContext;
     private final Resources mResources;
     private final WindowManager mWindowManager;
diff --git a/core/java/android/window/BackNavigationInfo.java b/core/java/android/window/BackNavigationInfo.java
index 0ab6db5..dd49014 100644
--- a/core/java/android/window/BackNavigationInfo.java
+++ b/core/java/android/window/BackNavigationInfo.java
@@ -118,7 +118,7 @@
      *                                back preview.
      * @param onBackInvokedCallback   The back callback registered by the current top level window.
      */
-    public BackNavigationInfo(@BackTargetType int type,
+    private BackNavigationInfo(@BackTargetType int type,
             @Nullable RemoteAnimationTarget departingAnimationTarget,
             @Nullable SurfaceControl screenshotSurface,
             @Nullable HardwareBuffer screenshotBuffer,
diff --git a/core/java/android/window/ClientWindowFrames.java b/core/java/android/window/ClientWindowFrames.java
index 51f3fe2..f274d1a 100644
--- a/core/java/android/window/ClientWindowFrames.java
+++ b/core/java/android/window/ClientWindowFrames.java
@@ -17,6 +17,7 @@
 package android.window;
 
 import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.graphics.Rect;
 import android.os.Parcel;
 import android.os.Parcelable;
@@ -40,8 +41,16 @@
      */
     public final @NonNull Rect parentFrame = new Rect();
 
+    /**
+     * The frame this window attaches to. If this is not null, this is the frame of the parent
+     * window.
+     */
+    public @Nullable Rect attachedFrame;
+
     public boolean isParentFrameClippedByDisplayCutout;
 
+    public float sizeCompatScale = 1f;
+
     public ClientWindowFrames() {
     }
 
@@ -49,7 +58,11 @@
         frame.set(other.frame);
         displayFrame.set(other.displayFrame);
         parentFrame.set(other.parentFrame);
+        if (other.attachedFrame != null) {
+            attachedFrame = new Rect(other.attachedFrame);
+        }
         isParentFrameClippedByDisplayCutout = other.isParentFrameClippedByDisplayCutout;
+        sizeCompatScale = other.sizeCompatScale;
     }
 
     private ClientWindowFrames(Parcel in) {
@@ -61,7 +74,9 @@
         frame.readFromParcel(in);
         displayFrame.readFromParcel(in);
         parentFrame.readFromParcel(in);
+        attachedFrame = in.readTypedObject(Rect.CREATOR);
         isParentFrameClippedByDisplayCutout = in.readBoolean();
+        sizeCompatScale = in.readFloat();
     }
 
     @Override
@@ -69,7 +84,9 @@
         frame.writeToParcel(dest, flags);
         displayFrame.writeToParcel(dest, flags);
         parentFrame.writeToParcel(dest, flags);
+        dest.writeTypedObject(attachedFrame, flags);
         dest.writeBoolean(isParentFrameClippedByDisplayCutout);
+        dest.writeFloat(sizeCompatScale);
     }
 
     @Override
@@ -78,7 +95,9 @@
         return "ClientWindowFrames{frame=" + frame.toShortString(sb)
                 + " display=" + displayFrame.toShortString(sb)
                 + " parentFrame=" + parentFrame.toShortString(sb)
-                + " parentClippedByDisplayCutout=" + isParentFrameClippedByDisplayCutout + "}";
+                + (attachedFrame != null ? " attachedFrame=" + attachedFrame.toShortString() : "")
+                + (isParentFrameClippedByDisplayCutout ? " parentClippedByDisplayCutout" : "")
+                + (sizeCompatScale != 1f ? " sizeCompatScale=" + sizeCompatScale : "") +  "}";
     }
 
     @Override
diff --git a/core/java/android/window/ITaskFragmentOrganizer.aidl b/core/java/android/window/ITaskFragmentOrganizer.aidl
index 8dfda7d..79ddadb 100644
--- a/core/java/android/window/ITaskFragmentOrganizer.aidl
+++ b/core/java/android/window/ITaskFragmentOrganizer.aidl
@@ -16,53 +16,9 @@
 
 package android.window;
 
-import android.content.Intent;
-import android.content.res.Configuration;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.window.TaskFragmentInfo;
+import android.window.TaskFragmentTransaction;
 
 /** @hide */
 oneway interface ITaskFragmentOrganizer {
-    void onTaskFragmentAppeared(in TaskFragmentInfo taskFragmentInfo);
-    void onTaskFragmentInfoChanged(in TaskFragmentInfo taskFragmentInfo);
-    void onTaskFragmentVanished(in TaskFragmentInfo taskFragmentInfo);
-
-    /**
-     * Called when the parent leaf Task of organized TaskFragments is changed.
-     * When the leaf Task is changed, the organizer may want to update the TaskFragments in one
-     * transaction.
-     *
-     * For case like screen size change, it will trigger onTaskFragmentParentInfoChanged with new
-     * Task bounds, but may not trigger onTaskFragmentInfoChanged because there can be an override
-     * bounds.
-     */
-    void onTaskFragmentParentInfoChanged(in IBinder fragmentToken, in Configuration parentConfig);
-
-    /**
-     * Called when the {@link WindowContainerTransaction} created with
-     * {@link WindowContainerTransaction#setErrorCallbackToken(IBinder)} failed on the server side.
-     *
-     * @param errorCallbackToken    Token set through {@link
-     *                              WindowContainerTransaction#setErrorCallbackToken(IBinder)}
-     * @param exceptionBundle   Bundle containing the exception. Should be created with
-     *                          {@link TaskFragmentOrganizer#putExceptionInBundle}.
-     */
-    void onTaskFragmentError(in IBinder errorCallbackToken, in Bundle exceptionBundle);
-
-    /**
-     * Called when an Activity is reparented to the Task with organized TaskFragment. For example,
-     * when an Activity enters and then exits Picture-in-picture, it will be reparented back to its
-     * orginial Task. In this case, we need to notify the organizer so that it can check if the
-     * Activity matches any split rule.
-     *
-     * @param taskId            The Task that the activity is reparented to.
-     * @param activityIntent    The intent that the activity is original launched with.
-     * @param activityToken     If the activity belongs to the same process as the organizer, this
-     *                          will be the actual activity token; if the activity belongs to a
-     *                          different process, the server will generate a temporary token that
-     *                          the organizer can use to reparent the activity through
-     *                          {@link WindowContainerTransaction} if needed.
-     */
-    void onActivityReparentToTask(int taskId, in Intent activityIntent, in IBinder activityToken);
+    void onTransactionReady(in TaskFragmentTransaction transaction);
 }
diff --git a/core/java/android/window/ImeOnBackInvokedDispatcher.java b/core/java/android/window/ImeOnBackInvokedDispatcher.java
index 5924844..14f5228 100644
--- a/core/java/android/window/ImeOnBackInvokedDispatcher.java
+++ b/core/java/android/window/ImeOnBackInvokedDispatcher.java
@@ -81,6 +81,7 @@
             @OnBackInvokedDispatcher.Priority int priority,
             @NonNull OnBackInvokedCallback callback) {
         final Bundle bundle = new Bundle();
+        // Always invoke back for ime without checking the window focus.
         final IOnBackInvokedCallback iCallback =
                 new WindowOnBackInvokedDispatcher.OnBackInvokedCallbackWrapper(callback);
         bundle.putBinder(RESULT_KEY_CALLBACK, iCallback.asBinder());
diff --git a/core/java/android/window/PictureInPictureSurfaceTransaction.java b/core/java/android/window/PictureInPictureSurfaceTransaction.java
index 0a751c3..3b1fdf5 100644
--- a/core/java/android/window/PictureInPictureSurfaceTransaction.java
+++ b/core/java/android/window/PictureInPictureSurfaceTransaction.java
@@ -51,6 +51,8 @@
 
     private final Rect mWindowCrop;
 
+    private boolean mShouldDisableCanAffectSystemUiFlags;
+
     private PictureInPictureSurfaceTransaction(Parcel in) {
         mAlpha = in.readFloat();
         mPosition = in.readTypedObject(PointF.CREATOR);
@@ -60,6 +62,7 @@
         mCornerRadius = in.readFloat();
         mShadowRadius = in.readFloat();
         mWindowCrop = in.readTypedObject(Rect.CREATOR);
+        mShouldDisableCanAffectSystemUiFlags = in.readBoolean();
     }
 
     private PictureInPictureSurfaceTransaction(float alpha, @Nullable PointF position,
@@ -84,6 +87,7 @@
         this(other.mAlpha, other.mPosition,
                 other.mFloat9, other.mRotation, other.mCornerRadius, other.mShadowRadius,
                 other.mWindowCrop);
+        mShouldDisableCanAffectSystemUiFlags = other.mShouldDisableCanAffectSystemUiFlags;
     }
 
     /** @return {@link Matrix} from {@link #mFloat9} */
@@ -103,6 +107,16 @@
         return mShadowRadius > 0;
     }
 
+    /** Sets the internal {@link #mShouldDisableCanAffectSystemUiFlags}. */
+    public void setShouldDisableCanAffectSystemUiFlags(boolean shouldDisable) {
+        mShouldDisableCanAffectSystemUiFlags = shouldDisable;
+    }
+
+    /** @return {@code true} if we should disable Task#setCanAffectSystemUiFlags. */
+    public boolean getShouldDisableCanAffectSystemUiFlags() {
+        return mShouldDisableCanAffectSystemUiFlags;
+    }
+
     @Override
     public boolean equals(Object o) {
         if (this == o) return true;
@@ -114,13 +128,16 @@
                 && Objects.equals(mRotation, that.mRotation)
                 && Objects.equals(mCornerRadius, that.mCornerRadius)
                 && Objects.equals(mShadowRadius, that.mShadowRadius)
-                && Objects.equals(mWindowCrop, that.mWindowCrop);
+                && Objects.equals(mWindowCrop, that.mWindowCrop)
+                && mShouldDisableCanAffectSystemUiFlags
+                == that.mShouldDisableCanAffectSystemUiFlags;
     }
 
     @Override
     public int hashCode() {
         return Objects.hash(mAlpha, mPosition, Arrays.hashCode(mFloat9),
-                mRotation, mCornerRadius, mShadowRadius, mWindowCrop);
+                mRotation, mCornerRadius, mShadowRadius, mWindowCrop,
+                mShouldDisableCanAffectSystemUiFlags);
     }
 
     @Override
@@ -137,6 +154,7 @@
         out.writeFloat(mCornerRadius);
         out.writeFloat(mShadowRadius);
         out.writeTypedObject(mWindowCrop, 0 /* flags */);
+        out.writeBoolean(mShouldDisableCanAffectSystemUiFlags);
     }
 
     @Override
@@ -150,6 +168,7 @@
                 + " cornerRadius=" + mCornerRadius
                 + " shadowRadius=" + mShadowRadius
                 + " crop=" + mWindowCrop
+                + " shouldDisableCanAffectSystemUiFlags" + mShouldDisableCanAffectSystemUiFlags
                 + ")";
     }
 
diff --git a/core/java/android/window/ProxyOnBackInvokedDispatcher.java b/core/java/android/window/ProxyOnBackInvokedDispatcher.java
index 8ad1093..49acde9 100644
--- a/core/java/android/window/ProxyOnBackInvokedDispatcher.java
+++ b/core/java/android/window/ProxyOnBackInvokedDispatcher.java
@@ -122,7 +122,7 @@
         }
         for (Pair<OnBackInvokedCallback, Integer> callbackPair : mCallbacks) {
             int priority = callbackPair.second;
-            if (priority >= 0) {
+            if (priority >= PRIORITY_DEFAULT) {
                 mActualDispatcher.registerOnBackInvokedCallback(priority, callbackPair.first);
             } else {
                 mActualDispatcher.registerSystemOnBackInvokedCallback(callbackPair.first);
diff --git a/core/java/android/window/SizeConfigurationBuckets.java b/core/java/android/window/SizeConfigurationBuckets.java
index f474f0a..998bec0 100644
--- a/core/java/android/window/SizeConfigurationBuckets.java
+++ b/core/java/android/window/SizeConfigurationBuckets.java
@@ -104,24 +104,15 @@
     /**
      * Get the changes between two configurations but don't count changes in sizes if they don't
      * cross boundaries that are important to the app.
-     *
-     * This is a static helper to deal with null `buckets`. When no buckets have been specified,
-     * this actually filters out all 3 size-configs. This is legacy behavior.
      */
     public static int filterDiff(int diff, @NonNull Configuration oldConfig,
             @NonNull Configuration newConfig, @Nullable SizeConfigurationBuckets buckets) {
+        if (buckets == null) {
+            return diff;
+        }
+
         final boolean nonSizeLayoutFieldsUnchanged =
                 areNonSizeLayoutFieldsUnchanged(oldConfig.screenLayout, newConfig.screenLayout);
-        if (buckets == null) {
-            // Only unflip CONFIG_SCREEN_LAYOUT if non-size-related  attributes of screen layout do
-            // not change.
-            if (nonSizeLayoutFieldsUnchanged) {
-                return diff & ~(CONFIG_SCREEN_SIZE | CONFIG_SMALLEST_SCREEN_SIZE
-                        | CONFIG_SCREEN_LAYOUT);
-            } else {
-                return diff & ~(CONFIG_SCREEN_SIZE | CONFIG_SMALLEST_SCREEN_SIZE);
-            }
-        }
         if ((diff & CONFIG_SCREEN_SIZE) != 0) {
             final boolean crosses = buckets.crossesHorizontalSizeThreshold(oldConfig.screenWidthDp,
                     newConfig.screenWidthDp)
diff --git a/core/java/android/window/TaskFragmentOrganizer.java b/core/java/android/window/TaskFragmentOrganizer.java
index 2ef49c3..84302dd 100644
--- a/core/java/android/window/TaskFragmentOrganizer.java
+++ b/core/java/android/window/TaskFragmentOrganizer.java
@@ -16,16 +16,27 @@
 
 package android.window;
 
+import static android.window.TaskFragmentTransaction.TYPE_ACTIVITY_REPARENT_TO_TASK;
+import static android.window.TaskFragmentTransaction.TYPE_TASK_FRAGMENT_APPEARED;
+import static android.window.TaskFragmentTransaction.TYPE_TASK_FRAGMENT_ERROR;
+import static android.window.TaskFragmentTransaction.TYPE_TASK_FRAGMENT_INFO_CHANGED;
+import static android.window.TaskFragmentTransaction.TYPE_TASK_FRAGMENT_PARENT_INFO_CHANGED;
+import static android.window.TaskFragmentTransaction.TYPE_TASK_FRAGMENT_VANISHED;
+
 import android.annotation.CallSuper;
 import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.annotation.TestApi;
 import android.content.Intent;
 import android.content.res.Configuration;
 import android.os.Bundle;
 import android.os.IBinder;
 import android.os.RemoteException;
+import android.util.SparseArray;
 import android.view.RemoteAnimationDefinition;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.concurrent.Executor;
 
 /**
@@ -39,16 +50,23 @@
      * Key to the exception in {@link Bundle} in {@link ITaskFragmentOrganizer#onTaskFragmentError}.
      */
     private static final String KEY_ERROR_CALLBACK_EXCEPTION = "fragment_exception";
+    private static final String KEY_ERROR_CALLBACK_TASK_FRAGMENT_INFO = "task_fragment_info";
+    private static final String KEY_ERROR_CALLBACK_OP_TYPE = "operation_type";
 
     /**
-     * Creates a {@link Bundle} with an exception that can be passed to
-     * {@link ITaskFragmentOrganizer#onTaskFragmentError}.
+     * Creates a {@link Bundle} with an exception, operation type and TaskFragmentInfo (if any)
+     * that can be passed to {@link ITaskFragmentOrganizer#onTaskFragmentError}.
      * @hide
      */
-    public static Bundle putExceptionInBundle(@NonNull Throwable exception) {
-        final Bundle exceptionBundle = new Bundle();
-        exceptionBundle.putSerializable(KEY_ERROR_CALLBACK_EXCEPTION, exception);
-        return exceptionBundle;
+    public static @NonNull Bundle putErrorInfoInBundle(@NonNull Throwable exception,
+            @Nullable TaskFragmentInfo info, int opType) {
+        final Bundle errorBundle = new Bundle();
+        errorBundle.putSerializable(KEY_ERROR_CALLBACK_EXCEPTION, exception);
+        if (info != null) {
+            errorBundle.putParcelable(KEY_ERROR_CALLBACK_TASK_FRAGMENT_INFO, info);
+        }
+        errorBundle.putInt(KEY_ERROR_CALLBACK_OP_TYPE, opType);
+        return errorBundle;
     }
 
     /**
@@ -56,6 +74,12 @@
      */
     private final Executor mExecutor;
 
+    // TODO(b/240519866): doing so to keep CTS compatibility. Remove in the next release.
+    /** Map from Task id to client tokens of TaskFragments in the Task. */
+    private final SparseArray<List<IBinder>> mTaskIdToFragmentTokens = new SparseArray<>();
+    /** Map from Task id to Task configuration. */
+    private final SparseArray<Configuration> mTaskIdToConfigurations = new SparseArray<>();
+
     public TaskFragmentOrganizer(@NonNull Executor executor) {
         mExecutor = executor;
     }
@@ -145,17 +169,61 @@
             @NonNull IBinder fragmentToken, @NonNull Configuration parentConfig) {}
 
     /**
+     * Called when the parent leaf Task of organized TaskFragments is changed.
+     * When the leaf Task is changed, the organizer may want to update the TaskFragments in one
+     * transaction.
+     *
+     * For case like screen size change, it will trigger onTaskFragmentParentInfoChanged with new
+     * Task bounds, but may not trigger onTaskFragmentInfoChanged because there can be an override
+     * bounds.
+     * @hide
+     */
+    public void onTaskFragmentParentInfoChanged(int taskId, @NonNull Configuration parentConfig) {
+        // TODO(b/240519866): doing so to keep CTS compatibility. Remove in the next release.
+        final List<IBinder> tokens = mTaskIdToFragmentTokens.get(taskId);
+        if (tokens == null || tokens.isEmpty()) {
+            return;
+        }
+        for (int i = tokens.size() - 1; i >= 0; i--) {
+            onTaskFragmentParentInfoChanged(tokens.get(i), parentConfig);
+        }
+    }
+
+    /**
      * Called when the {@link WindowContainerTransaction} created with
      * {@link WindowContainerTransaction#setErrorCallbackToken(IBinder)} failed on the server side.
      *
      * @param errorCallbackToken    token set in
      *                             {@link WindowContainerTransaction#setErrorCallbackToken(IBinder)}
      * @param exception             exception from the server side.
+     *
+     * @deprecated Use {@link #onTaskFragmentError(IBinder, TaskFragmentInfo, int, Throwable)}
+     * instead.
      */
+    @Deprecated
     public void onTaskFragmentError(
             @NonNull IBinder errorCallbackToken, @NonNull Throwable exception) {}
 
     /**
+     * Called when the {@link WindowContainerTransaction} created with
+     * {@link WindowContainerTransaction#setErrorCallbackToken(IBinder)} failed on the server side.
+     *
+     * @param errorCallbackToken    token set in
+     *                             {@link WindowContainerTransaction#setErrorCallbackToken(IBinder)}
+     * @param taskFragmentInfo  The {@link TaskFragmentInfo}. This could be {@code null} if no
+     *                          TaskFragment created.
+     * @param opType            The {@link WindowContainerTransaction.HierarchyOp} of the failed
+     *                          transaction operation.
+     * @param exception             exception from the server side.
+     */
+    public void onTaskFragmentError(
+            @NonNull IBinder errorCallbackToken, @Nullable TaskFragmentInfo taskFragmentInfo,
+            int opType, @NonNull Throwable exception) {
+        // Doing so to keep compatibility. This will be removed in the next release.
+        onTaskFragmentError(errorCallbackToken, exception);
+    }
+
+    /**
      * Called when an Activity is reparented to the Task with organized TaskFragment. For example,
      * when an Activity enters and then exits Picture-in-picture, it will be reparented back to its
      * orginial Task. In this case, we need to notify the organizer so that it can check if the
@@ -173,6 +241,76 @@
     public void onActivityReparentToTask(int taskId, @NonNull Intent activityIntent,
             @NonNull IBinder activityToken) {}
 
+    /**
+     * Called when the transaction is ready so that the organizer can update the TaskFragments based
+     * on the changes in transaction.
+     * @hide
+     */
+    public void onTransactionReady(@NonNull TaskFragmentTransaction transaction) {
+        final List<TaskFragmentTransaction.Change> changes = transaction.getChanges();
+        for (TaskFragmentTransaction.Change change : changes) {
+            // TODO(b/240519866): apply all changes in one WCT.
+            final int taskId = change.getTaskId();
+            switch (change.getType()) {
+                case TYPE_TASK_FRAGMENT_APPEARED:
+                    // TODO(b/240519866): doing so to keep CTS compatibility. Remove in the next
+                    // release.
+                    if (!mTaskIdToFragmentTokens.contains(taskId)) {
+                        mTaskIdToFragmentTokens.put(taskId, new ArrayList<>());
+                    }
+                    mTaskIdToFragmentTokens.get(taskId).add(change.getTaskFragmentToken());
+                    onTaskFragmentParentInfoChanged(change.getTaskFragmentToken(),
+                            mTaskIdToConfigurations.get(taskId));
+
+                    onTaskFragmentAppeared(change.getTaskFragmentInfo());
+                    break;
+                case TYPE_TASK_FRAGMENT_INFO_CHANGED:
+                    onTaskFragmentInfoChanged(change.getTaskFragmentInfo());
+                    break;
+                case TYPE_TASK_FRAGMENT_VANISHED:
+                    // TODO(b/240519866): doing so to keep CTS compatibility. Remove in the next
+                    // release.
+                    if (mTaskIdToFragmentTokens.contains(taskId)) {
+                        final List<IBinder> tokens = mTaskIdToFragmentTokens.get(taskId);
+                        tokens.remove(change.getTaskFragmentToken());
+                        if (tokens.isEmpty()) {
+                            mTaskIdToFragmentTokens.remove(taskId);
+                            mTaskIdToConfigurations.remove(taskId);
+                        }
+                    }
+
+                    onTaskFragmentVanished(change.getTaskFragmentInfo());
+                    break;
+                case TYPE_TASK_FRAGMENT_PARENT_INFO_CHANGED:
+                    // TODO(b/240519866): doing so to keep CTS compatibility. Remove in the next
+                    // release.
+                    mTaskIdToConfigurations.put(taskId, change.getTaskConfiguration());
+
+                    onTaskFragmentParentInfoChanged(taskId, change.getTaskConfiguration());
+                    break;
+                case TYPE_TASK_FRAGMENT_ERROR:
+                    final Bundle errorBundle = change.getErrorBundle();
+                    onTaskFragmentError(
+                            change.getErrorCallbackToken(),
+                            errorBundle.getParcelable(
+                                    KEY_ERROR_CALLBACK_TASK_FRAGMENT_INFO, TaskFragmentInfo.class),
+                            errorBundle.getInt(KEY_ERROR_CALLBACK_OP_TYPE),
+                            errorBundle.getSerializable(KEY_ERROR_CALLBACK_EXCEPTION,
+                                    java.lang.Throwable.class));
+                    break;
+                case TYPE_ACTIVITY_REPARENT_TO_TASK:
+                    onActivityReparentToTask(
+                            change.getTaskId(),
+                            change.getActivityIntent(),
+                            change.getActivityToken());
+                    break;
+                default:
+                    throw new IllegalArgumentException(
+                            "Unknown TaskFragmentEvent=" + change.getType());
+            }
+        }
+    }
+
     @Override
     public void applyTransaction(@NonNull WindowContainerTransaction t) {
         t.setTaskFragmentOrganizer(mInterface);
@@ -190,45 +328,8 @@
 
     private final ITaskFragmentOrganizer mInterface = new ITaskFragmentOrganizer.Stub() {
         @Override
-        public void onTaskFragmentAppeared(@NonNull TaskFragmentInfo taskFragmentInfo) {
-            mExecutor.execute(
-                    () -> TaskFragmentOrganizer.this.onTaskFragmentAppeared(taskFragmentInfo));
-        }
-
-        @Override
-        public void onTaskFragmentInfoChanged(@NonNull TaskFragmentInfo taskFragmentInfo) {
-            mExecutor.execute(
-                    () -> TaskFragmentOrganizer.this.onTaskFragmentInfoChanged(taskFragmentInfo));
-        }
-
-        @Override
-        public void onTaskFragmentVanished(@NonNull TaskFragmentInfo taskFragmentInfo) {
-            mExecutor.execute(
-                    () -> TaskFragmentOrganizer.this.onTaskFragmentVanished(taskFragmentInfo));
-        }
-
-        @Override
-        public void onTaskFragmentParentInfoChanged(
-                @NonNull IBinder fragmentToken, @NonNull Configuration parentConfig) {
-            mExecutor.execute(
-                    () -> TaskFragmentOrganizer.this.onTaskFragmentParentInfoChanged(
-                            fragmentToken, parentConfig));
-        }
-
-        @Override
-        public void onTaskFragmentError(
-                @NonNull IBinder errorCallbackToken, @NonNull Bundle exceptionBundle) {
-            mExecutor.execute(() -> TaskFragmentOrganizer.this.onTaskFragmentError(
-                    errorCallbackToken,
-                    (Throwable) exceptionBundle.getSerializable(KEY_ERROR_CALLBACK_EXCEPTION)));
-        }
-
-        @Override
-        public void onActivityReparentToTask(int taskId, @NonNull Intent activityIntent,
-                @NonNull IBinder activityToken) {
-            mExecutor.execute(
-                    () -> TaskFragmentOrganizer.this.onActivityReparentToTask(
-                            taskId, activityIntent, activityToken));
+        public void onTransactionReady(@NonNull TaskFragmentTransaction transaction) {
+            mExecutor.execute(() -> TaskFragmentOrganizer.this.onTransactionReady(transaction));
         }
     };
 
diff --git a/core/java/android/window/TaskFragmentTransaction.aidl b/core/java/android/window/TaskFragmentTransaction.aidl
new file mode 100644
index 0000000..aaa2db4
--- /dev/null
+++ b/core/java/android/window/TaskFragmentTransaction.aidl
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.window;
+
+parcelable TaskFragmentTransaction;
+parcelable TaskFragmentTransaction.Change;
diff --git a/core/java/android/window/TaskFragmentTransaction.java b/core/java/android/window/TaskFragmentTransaction.java
new file mode 100644
index 0000000..755864f
--- /dev/null
+++ b/core/java/android/window/TaskFragmentTransaction.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 android.window;
+
+import static java.util.Objects.requireNonNull;
+
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.Intent;
+import android.content.res.Configuration;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Used to communicate information about what are changing on embedded TaskFragments belonging to
+ * the same TaskFragmentOrganizer. A transaction can contain multiple changes.
+ * @see TaskFragmentTransaction.Change
+ * @hide
+ */
+public final class TaskFragmentTransaction implements Parcelable {
+
+    private final ArrayList<Change> mChanges = new ArrayList<>();
+
+    public TaskFragmentTransaction() {}
+
+    private TaskFragmentTransaction(Parcel in) {
+        in.readTypedList(mChanges, Change.CREATOR);
+    }
+
+    @Override
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
+        dest.writeTypedList(mChanges);
+    }
+
+    /** Adds a {@link Change} to this transaction. */
+    public void addChange(@Nullable Change change) {
+        if (change != null) {
+            mChanges.add(change);
+        }
+    }
+
+    /** Whether this transaction contains any {@link Change}. */
+    public boolean isEmpty() {
+        return mChanges.isEmpty();
+    }
+
+    @NonNull
+    public List<Change> getChanges() {
+        return mChanges;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append("TaskFragmentTransaction{changes=[");
+        for (int i = 0; i < mChanges.size(); ++i) {
+            if (i > 0) {
+                sb.append(',');
+            }
+            sb.append(mChanges.get(i));
+        }
+        sb.append("]}");
+        return sb.toString();
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    public static final Creator<TaskFragmentTransaction> CREATOR = new Creator<>() {
+        @Override
+        public TaskFragmentTransaction createFromParcel(Parcel in) {
+            return new TaskFragmentTransaction(in);
+        }
+
+        @Override
+        public TaskFragmentTransaction[] newArray(int size) {
+            return new TaskFragmentTransaction[size];
+        }
+    };
+
+    /** Change type: the TaskFragment is attached to the hierarchy. */
+    public static final int TYPE_TASK_FRAGMENT_APPEARED = 1;
+
+    /** Change type: the status of the TaskFragment is changed. */
+    public static final int TYPE_TASK_FRAGMENT_INFO_CHANGED = 2;
+
+    /** Change type: the TaskFragment is removed form the hierarchy. */
+    public static final int TYPE_TASK_FRAGMENT_VANISHED = 3;
+
+    /** Change type: the status of the parent leaf Task is changed. */
+    public static final int TYPE_TASK_FRAGMENT_PARENT_INFO_CHANGED = 4;
+
+    /** Change type: the TaskFragment related operation failed on the server side. */
+    public static final int TYPE_TASK_FRAGMENT_ERROR = 5;
+
+    /**
+     * Change type: an Activity is reparented to the Task. For example, when an Activity enters and
+     * then exits Picture-in-picture, it will be reparented back to its original Task. In this case,
+     * we need to notify the organizer so that it can check if the Activity matches any split rule.
+     */
+    public static final int TYPE_ACTIVITY_REPARENT_TO_TASK = 6;
+
+    @IntDef(prefix = { "TYPE_" }, value = {
+            TYPE_TASK_FRAGMENT_APPEARED,
+            TYPE_TASK_FRAGMENT_INFO_CHANGED,
+            TYPE_TASK_FRAGMENT_VANISHED,
+            TYPE_TASK_FRAGMENT_PARENT_INFO_CHANGED,
+            TYPE_TASK_FRAGMENT_ERROR,
+            TYPE_ACTIVITY_REPARENT_TO_TASK
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    @interface ChangeType {}
+
+    /** Represents the change an embedded TaskFragment undergoes. */
+    public static final class Change implements Parcelable {
+
+        /** @see ChangeType */
+        @ChangeType
+        private final int mType;
+
+        /** @see #setTaskFragmentToken(IBinder) */
+        @Nullable
+        private IBinder mTaskFragmentToken;
+
+        /** @see #setTaskFragmentInfo(TaskFragmentInfo) */
+        @Nullable
+        private TaskFragmentInfo mTaskFragmentInfo;
+
+        /** @see #setTaskId(int) */
+        private int mTaskId;
+
+        /** @see #setTaskConfiguration(Configuration) */
+        @Nullable
+        private Configuration mTaskConfiguration;
+
+        /** @see #setErrorCallbackToken(IBinder) */
+        @Nullable
+        private IBinder mErrorCallbackToken;
+
+        /** @see #setErrorBundle(Bundle) */
+        @Nullable
+        private Bundle mErrorBundle;
+
+        /** @see #setActivityIntent(Intent) */
+        @Nullable
+        private Intent mActivityIntent;
+
+        /** @see #setActivityToken(IBinder) */
+        @Nullable
+        private IBinder mActivityToken;
+
+        public Change(@ChangeType int type) {
+            mType = type;
+        }
+
+        private Change(Parcel in) {
+            mType = in.readInt();
+            mTaskFragmentToken = in.readStrongBinder();
+            mTaskFragmentInfo = in.readTypedObject(TaskFragmentInfo.CREATOR);
+            mTaskId = in.readInt();
+            mTaskConfiguration = in.readTypedObject(Configuration.CREATOR);
+            mErrorCallbackToken = in.readStrongBinder();
+            mErrorBundle = in.readBundle(TaskFragmentTransaction.class.getClassLoader());
+            mActivityIntent = in.readTypedObject(Intent.CREATOR);
+            mActivityToken = in.readStrongBinder();
+        }
+
+        @Override
+        public void writeToParcel(@NonNull Parcel dest, int flags) {
+            dest.writeInt(mType);
+            dest.writeStrongBinder(mTaskFragmentToken);
+            dest.writeTypedObject(mTaskFragmentInfo, flags);
+            dest.writeInt(mTaskId);
+            dest.writeTypedObject(mTaskConfiguration, flags);
+            dest.writeStrongBinder(mErrorCallbackToken);
+            dest.writeBundle(mErrorBundle);
+            dest.writeTypedObject(mActivityIntent, flags);
+            dest.writeStrongBinder(mActivityToken);
+        }
+
+        /** The change is related to the TaskFragment created with this unique token. */
+        public Change setTaskFragmentToken(@NonNull IBinder taskFragmentToken) {
+            mTaskFragmentToken = requireNonNull(taskFragmentToken);
+            return this;
+        }
+
+        /** Info of the embedded TaskFragment. */
+        public Change setTaskFragmentInfo(@NonNull TaskFragmentInfo info) {
+            mTaskFragmentInfo = requireNonNull(info);
+            return this;
+        }
+
+        /** Task id the parent Task. */
+        public Change setTaskId(int taskId) {
+            mTaskId = taskId;
+            return this;
+        }
+
+        /** Configuration of the parent Task. */
+        public Change setTaskConfiguration(@NonNull Configuration configuration) {
+            mTaskConfiguration = requireNonNull(configuration);
+            return this;
+        }
+
+        /**
+         * If the {@link #TYPE_TASK_FRAGMENT_ERROR} is from a {@link WindowContainerTransaction}
+         * from the {@link TaskFragmentOrganizer}, it may come with an error callback token to
+         * report back.
+         */
+        public Change setErrorCallbackToken(@Nullable IBinder errorCallbackToken) {
+            mErrorCallbackToken = errorCallbackToken;
+            return this;
+        }
+
+        /**
+         * Bundle with necessary info about the failure operation of
+         * {@link #TYPE_TASK_FRAGMENT_ERROR}.
+         */
+        public Change setErrorBundle(@NonNull Bundle errorBundle) {
+            mErrorBundle = requireNonNull(errorBundle);
+            return this;
+        }
+
+        /**
+         * Intent of the activity that is reparented to the Task for
+         * {@link #TYPE_ACTIVITY_REPARENT_TO_TASK}.
+         */
+        public Change setActivityIntent(@NonNull Intent intent) {
+            mActivityIntent = requireNonNull(intent);
+            return this;
+        }
+
+        /**
+         * Token of the reparent activity for {@link #TYPE_ACTIVITY_REPARENT_TO_TASK}.
+         * If the activity belongs to the same process as the organizer, this will be the actual
+         * activity token; if the activity belongs to a different process, the server will generate
+         * a temporary token that the organizer can use to reparent the activity through
+         * {@link WindowContainerTransaction} if needed.
+         */
+        public Change setActivityToken(@NonNull IBinder activityToken) {
+            mActivityToken = requireNonNull(activityToken);
+            return this;
+        }
+
+        @ChangeType
+        public int getType() {
+            return mType;
+        }
+
+        @Nullable
+        public IBinder getTaskFragmentToken() {
+            return mTaskFragmentToken;
+        }
+
+        @Nullable
+        public TaskFragmentInfo getTaskFragmentInfo() {
+            return mTaskFragmentInfo;
+        }
+
+        public int getTaskId() {
+            return mTaskId;
+        }
+
+        @Nullable
+        public Configuration getTaskConfiguration() {
+            return mTaskConfiguration;
+        }
+
+        @Nullable
+        public IBinder getErrorCallbackToken() {
+            return mErrorCallbackToken;
+        }
+
+        @Nullable
+        public Bundle getErrorBundle() {
+            return mErrorBundle;
+        }
+
+        @Nullable
+        public Intent getActivityIntent() {
+            return mActivityIntent;
+        }
+
+        @Nullable
+        public IBinder getActivityToken() {
+            return mActivityToken;
+        }
+
+        @Override
+        public String toString() {
+            return "Change{ type=" + mType + " }";
+        }
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        public static final Creator<Change> CREATOR = new Creator<>() {
+            @Override
+            public Change createFromParcel(Parcel in) {
+                return new Change(in);
+            }
+
+            @Override
+            public Change[] newArray(int size) {
+                return new Change[size];
+            }
+        };
+    }
+}
diff --git a/core/java/android/window/TransitionInfo.java b/core/java/android/window/TransitionInfo.java
index 51da61f..b263b08 100644
--- a/core/java/android/window/TransitionInfo.java
+++ b/core/java/android/window/TransitionInfo.java
@@ -107,8 +107,17 @@
      */
     public static final int FLAG_DISPLAY_HAS_ALERT_WINDOWS = 1 << 7;
 
+    /** The container is an input-method window. */
+    public static final int FLAG_IS_INPUT_METHOD = 1 << 8;
+
+    /** The container is ActivityEmbedding embedded. */
+    public static final int FLAG_IS_EMBEDDED = 1 << 9;
+
     /** 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 << 8;
+    public static final int FLAG_FIRST_CUSTOM = 1 << 10;
+
+    /** The container is going to show IME on its task after the transition. */
+    public static final int FLAG_WILL_IME_SHOWN = 1 << 11;
 
     /** @hide */
     @IntDef(prefix = { "FLAG_" }, value = {
@@ -121,7 +130,10 @@
             FLAG_IS_DISPLAY,
             FLAG_OCCLUDES_KEYGUARD,
             FLAG_DISPLAY_HAS_ALERT_WINDOWS,
-            FLAG_FIRST_CUSTOM
+            FLAG_IS_INPUT_METHOD,
+            FLAG_IS_EMBEDDED,
+            FLAG_FIRST_CUSTOM,
+            FLAG_WILL_IME_SHOWN
     })
     public @interface ChangeFlags {}
 
@@ -300,6 +312,9 @@
         if ((flags & FLAG_IS_WALLPAPER) != 0) {
             sb.append("IS_WALLPAPER");
         }
+        if ((flags & FLAG_IS_INPUT_METHOD) != 0) {
+            sb.append("IS_INPUT_METHOD");
+        }
         if ((flags & FLAG_TRANSLUCENT) != 0) {
             sb.append((sb.length() == 0 ? "" : "|") + "TRANSLUCENT");
         }
@@ -318,6 +333,9 @@
         if ((flags & FLAG_DISPLAY_HAS_ALERT_WINDOWS) != 0) {
             sb.append((sb.length() == 0 ? "" : "|") + "DISPLAY_HAS_ALERT_WINDOWS");
         }
+        if ((flags & FLAG_IS_EMBEDDED) != 0) {
+            sb.append((sb.length() == 0 ? "" : "|") + "IS_EMBEDDED");
+        }
         if ((flags & FLAG_FIRST_CUSTOM) != 0) {
             sb.append((sb.length() == 0 ? "" : "|") + "FIRST_CUSTOM");
         }
diff --git a/core/java/android/window/TransitionRequestInfo.java b/core/java/android/window/TransitionRequestInfo.java
index 48211a8..1404694 100644
--- a/core/java/android/window/TransitionRequestInfo.java
+++ b/core/java/android/window/TransitionRequestInfo.java
@@ -16,6 +16,8 @@
 
 package android.window;
 
+import static android.view.WindowManager.transitTypeToString;
+
 import android.annotation.Nullable;
 import android.app.ActivityManager;
 import android.app.WindowConfiguration;
@@ -366,7 +368,7 @@
         // String fieldNameToString() { ... }
 
         return "TransitionRequestInfo { " +
-                "type = " + mType + ", " +
+                "type = " + transitTypeToString(mType) + ", " +
                 "triggerTask = " + mTriggerTask + ", " +
                 "remoteTransition = " + mRemoteTransition + ", " +
                 "displayChange = " + mDisplayChange +
diff --git a/core/java/android/window/WindowContainerTransaction.java b/core/java/android/window/WindowContainerTransaction.java
index 7dc039d..3bffa89 100644
--- a/core/java/android/window/WindowContainerTransaction.java
+++ b/core/java/android/window/WindowContainerTransaction.java
@@ -348,8 +348,10 @@
      * @param currentParent of the tasks to perform the operation no.
      *                      {@code null} will perform the operation on the display.
      * @param newParent for the tasks. {@code null} will perform the operation on the display.
-     * @param windowingModes of the tasks to reparent.
-     * @param activityTypes of the tasks to reparent.
+     * @param windowingModes of the tasks to reparent. {@code null} ignore this attribute when
+     *                       perform the operation.
+     * @param activityTypes of the tasks to reparent.  {@code null} ignore this attribute when
+     *                      perform the operation.
      * @param onTop When {@code true}, the child goes to the top of parent; otherwise it goes to
      *              the bottom.
      */
@@ -384,16 +386,27 @@
      */
     @NonNull
     public WindowContainerTransaction setAdjacentRoots(
-            @NonNull WindowContainerToken root1, @NonNull WindowContainerToken root2,
-            boolean moveTogether) {
+            @NonNull WindowContainerToken root1, @NonNull WindowContainerToken root2) {
         mHierarchyOps.add(HierarchyOp.createForAdjacentRoots(
                 root1.asBinder(),
-                root2.asBinder(),
-                moveTogether));
+                root2.asBinder()));
         return this;
     }
 
     /**
+     * This is temp function for compatible with old cts tests suite and it equal to
+     * {@link #setAdjacentRoots(WindowContainerToken, WindowContainerToken).
+     * @deprecated should use {@link #setAdjacentRoots(WindowContainerToken, WindowContainerToken)}
+     */
+    @Deprecated
+    @NonNull
+    public WindowContainerTransaction setAdjacentRoots(
+            @NonNull WindowContainerToken root1, @NonNull WindowContainerToken root2,
+            boolean moveTogether) {
+        return setAdjacentRoots(root1, root2);
+    }
+
+    /**
      * Sets the container as launch adjacent flag root. Task starting with
      * {@link FLAG_ACTIVITY_LAUNCH_ADJACENT} will be launching to.
      */
@@ -1106,9 +1119,6 @@
 
         private boolean mReparentTopOnly;
 
-        // TODO(b/207185041): Remove this once having a single-top root for split screen.
-        private boolean mMoveAdjacentTogether;
-
         @Nullable
         private int[]  mWindowingModes;
 
@@ -1171,12 +1181,10 @@
         }
 
         /** Create a hierarchy op for setting adjacent root tasks. */
-        public static HierarchyOp createForAdjacentRoots(IBinder root1, IBinder root2,
-                boolean moveTogether) {
+        public static HierarchyOp createForAdjacentRoots(IBinder root1, IBinder root2) {
             return new HierarchyOp.Builder(HIERARCHY_OP_TYPE_SET_ADJACENT_ROOTS)
                     .setContainer(root1)
                     .setReparentContainer(root2)
-                    .setMoveAdjacentTogether(moveTogether)
                     .build();
         }
 
@@ -1223,7 +1231,6 @@
             mInsetsProviderFrame = copy.mInsetsProviderFrame;
             mToTop = copy.mToTop;
             mReparentTopOnly = copy.mReparentTopOnly;
-            mMoveAdjacentTogether = copy.mMoveAdjacentTogether;
             mWindowingModes = copy.mWindowingModes;
             mActivityTypes = copy.mActivityTypes;
             mLaunchOptions = copy.mLaunchOptions;
@@ -1245,7 +1252,6 @@
             }
             mToTop = in.readBoolean();
             mReparentTopOnly = in.readBoolean();
-            mMoveAdjacentTogether = in.readBoolean();
             mWindowingModes = in.createIntArray();
             mActivityTypes = in.createIntArray();
             mLaunchOptions = in.readBundle();
@@ -1300,10 +1306,6 @@
             return mReparentTopOnly;
         }
 
-        public boolean getMoveAdjacentTogether() {
-            return mMoveAdjacentTogether;
-        }
-
         public int[] getWindowingModes() {
             return mWindowingModes;
         }
@@ -1356,8 +1358,7 @@
                     return "{reorder: " + mContainer + " to " + (mToTop ? "top" : "bottom") + "}";
                 case HIERARCHY_OP_TYPE_SET_ADJACENT_ROOTS:
                     return "{SetAdjacentRoot: container=" + mContainer
-                            + " adjacentRoot=" + mReparent + " mMoveAdjacentTogether="
-                            + mMoveAdjacentTogether + "}";
+                            + " adjacentRoot=" + mReparent + "}";
                 case HIERARCHY_OP_TYPE_LAUNCH_TASK:
                     return "{LaunchTask: " + mLaunchOptions + "}";
                 case HIERARCHY_OP_TYPE_SET_LAUNCH_ADJACENT_FLAG_ROOT:
@@ -1413,7 +1414,6 @@
             }
             dest.writeBoolean(mToTop);
             dest.writeBoolean(mReparentTopOnly);
-            dest.writeBoolean(mMoveAdjacentTogether);
             dest.writeIntArray(mWindowingModes);
             dest.writeIntArray(mActivityTypes);
             dest.writeBundle(mLaunchOptions);
@@ -1458,8 +1458,6 @@
 
             private boolean mReparentTopOnly;
 
-            private boolean mMoveAdjacentTogether;
-
             @Nullable
             private int[]  mWindowingModes;
 
@@ -1515,11 +1513,6 @@
                 return this;
             }
 
-            Builder setMoveAdjacentTogether(boolean moveAdjacentTogether) {
-                mMoveAdjacentTogether = moveAdjacentTogether;
-                return this;
-            }
-
             Builder setWindowingModes(@Nullable int[] windowingModes) {
                 mWindowingModes = windowingModes;
                 return this;
@@ -1570,7 +1563,6 @@
                 hierarchyOp.mInsetsProviderFrame = mInsetsProviderFrame;
                 hierarchyOp.mToTop = mToTop;
                 hierarchyOp.mReparentTopOnly = mReparentTopOnly;
-                hierarchyOp.mMoveAdjacentTogether = mMoveAdjacentTogether;
                 hierarchyOp.mLaunchOptions = mLaunchOptions;
                 hierarchyOp.mActivityIntent = mActivityIntent;
                 hierarchyOp.mPendingIntent = mPendingIntent;
diff --git a/core/java/android/window/WindowOnBackInvokedDispatcher.java b/core/java/android/window/WindowOnBackInvokedDispatcher.java
index d147524d..1d396be 100644
--- a/core/java/android/window/WindowOnBackInvokedDispatcher.java
+++ b/core/java/android/window/WindowOnBackInvokedDispatcher.java
@@ -221,7 +221,6 @@
 
     static class OnBackInvokedCallbackWrapper extends IOnBackInvokedCallback.Stub {
         private final WeakReference<OnBackInvokedCallback> mCallback;
-
         OnBackInvokedCallbackWrapper(@NonNull OnBackInvokedCallback callback) {
             mCallback = new WeakReference<>(callback);
         }
@@ -263,7 +262,6 @@
                 if (callback == null) {
                     return;
                 }
-
                 callback.onBackInvoked();
             });
         }
diff --git a/core/java/com/android/internal/app/BlockedAppStreamingActivity.java b/core/java/com/android/internal/app/BlockedAppStreamingActivity.java
index ca111a4..7c24892 100644
--- a/core/java/com/android/internal/app/BlockedAppStreamingActivity.java
+++ b/core/java/com/android/internal/app/BlockedAppStreamingActivity.java
@@ -36,6 +36,7 @@
     private static final String EXTRA_BLOCKED_ACTIVITY_INFO =
             PACKAGE_NAME + ".extra.BLOCKED_ACTIVITY_INFO";
     private static final String EXTRA_STREAMED_DEVICE = PACKAGE_NAME + ".extra.STREAMED_DEVICE";
+    private static final String BLOCKED_COMPONENT_PLAYSTORE = "com.android.vending";
     private static final String BLOCKED_COMPONENT_SETTINGS = "com.android.settings";
 
     @Override
@@ -62,21 +63,25 @@
                 mAlertParams.mTitle =
                         getString(R.string.app_streaming_blocked_title_for_permission_dialog);
                 mAlertParams.mMessage =
-                        getString(R.string.app_streaming_blocked_message_for_permission_dialog,
-                                streamedDeviceName);
+                        getString(R.string.app_streaming_blocked_message, streamedDeviceName);
+            } else if (TextUtils.equals(activityInfo.packageName, BLOCKED_COMPONENT_PLAYSTORE)) {
+                mAlertParams.mTitle =
+                        getString(R.string.app_streaming_blocked_title_for_playstore_dialog);
+                mAlertParams.mMessage =
+                        getString(R.string.app_streaming_blocked_message, streamedDeviceName);
             } else if (TextUtils.equals(activityInfo.packageName, BLOCKED_COMPONENT_SETTINGS)) {
                 mAlertParams.mTitle =
                         getString(R.string.app_streaming_blocked_title_for_settings_dialog);
                 mAlertParams.mMessage =
-                        getString(R.string.app_streaming_blocked_message, streamedDeviceName);
+                        getString(R.string.app_streaming_blocked_message_for_settings_dialog,
+                                streamedDeviceName);
             } else {
-                mAlertParams.mTitle =
-                        getString(R.string.app_streaming_blocked_title, appLabel);
+                // No title required
                 mAlertParams.mMessage =
                         getString(R.string.app_streaming_blocked_message, streamedDeviceName);
             }
         } else {
-            mAlertParams.mTitle = getString(R.string.app_blocked_title);
+            // No title required
             mAlertParams.mMessage = getString(R.string.app_blocked_message, appLabel);
         }
         mAlertParams.mPositiveButtonText = getString(android.R.string.ok);
diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java
index 66abe30..fbabf52 100644
--- a/core/java/com/android/internal/app/ChooserActivity.java
+++ b/core/java/com/android/internal/app/ChooserActivity.java
@@ -30,6 +30,7 @@
 import android.annotation.Nullable;
 import android.app.Activity;
 import android.app.ActivityManager;
+import android.app.ActivityOptions;
 import android.app.SharedElementCallback;
 import android.app.prediction.AppPredictionContext;
 import android.app.prediction.AppPredictionManager;
@@ -101,7 +102,10 @@
 import android.view.ViewTreeObserver;
 import android.view.WindowInsets;
 import android.view.animation.AccelerateInterpolator;
+import android.view.animation.AlphaAnimation;
+import android.view.animation.Animation;
 import android.view.animation.DecelerateInterpolator;
+import android.view.animation.LinearInterpolator;
 import android.widget.Button;
 import android.widget.ImageView;
 import android.widget.Space;
@@ -197,6 +201,8 @@
     private static final String PLURALS_COUNT = "count";
     private static final String PLURALS_FILE_NAME = "file_name";
 
+    private static final String IMAGE_EDITOR_SHARED_ELEMENT = "screenshot_preview_image";
+
     private boolean mIsAppPredictorComponentAvailable;
     private Map<ChooserTarget, AppTarget> mDirectShareAppTargetCache;
     private Map<ChooserTarget, ShortcutInfo> mDirectShareShortcutInfoCache;
@@ -248,7 +254,12 @@
                     SystemUiDeviceConfigFlags.IS_NEARBY_SHARE_FIRST_TARGET_IN_RANKED_APP,
                     DEFAULT_IS_NEARBY_SHARE_FIRST_TARGET_IN_RANKED_APP);
 
-    private static final int DEFAULT_LIST_VIEW_UPDATE_DELAY_MS = 125;
+    private static final int DEFAULT_LIST_VIEW_UPDATE_DELAY_MS = 0;
+
+    private static final int URI_PERMISSION_INTENT_FLAGS = Intent.FLAG_GRANT_READ_URI_PERMISSION
+            | Intent.FLAG_GRANT_WRITE_URI_PERMISSION
+            | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
+            | Intent.FLAG_GRANT_PREFIX_URI_PERMISSION;
 
     @VisibleForTesting
     int mListViewUpdateDelayMs = DeviceConfig.getInt(DeviceConfig.NAMESPACE_SYSTEMUI,
@@ -305,6 +316,8 @@
 
     private boolean mRemoveSharedElements = false;
 
+    private View mContentView = null;
+
     private class ContentPreviewCoordinator {
         private static final int IMAGE_FADE_IN_MILLIS = 150;
         private static final int IMAGE_LOAD_TIMEOUT = 1;
@@ -990,6 +1003,7 @@
     protected void onResume() {
         super.onResume();
         Log.d(TAG, "onResume: " + getComponentName().flattenToShortString());
+        maybeCancelFinishAnimation();
     }
 
     @Override
@@ -1002,6 +1016,7 @@
 
         mShouldDisplayLandscape = shouldDisplayLandscape(newConfig.orientation);
         mMaxTargetsPerRow = getResources().getInteger(R.integer.config_chooser_max_targets_per_row);
+        mChooserMultiProfilePagerAdapter.setMaxTargetsPerRow(mMaxTargetsPerRow);
         adjustPreviewWidth(newConfig.orientation, null);
         updateStickyContentPreview();
         updateTabPadding();
@@ -1084,6 +1099,10 @@
         final ComponentName cn = getEditSharingComponent();
 
         final Intent resolveIntent = new Intent(originalIntent);
+        // Retain only URI permission grant flags if present. Other flags may prevent the scene
+        // transition animation from running (i.e FLAG_ACTIVITY_NO_ANIMATION,
+        // FLAG_ACTIVITY_NEW_TASK, FLAG_ACTIVITY_NEW_DOCUMENT) but also not needed.
+        resolveIntent.setFlags(originalIntent.getFlags() & URI_PERMISSION_INTENT_FLAGS);
         resolveIntent.setComponent(cn);
         resolveIntent.setAction(Intent.ACTION_EDIT);
         final ResolveInfo ri = getPackageManager().resolveActivity(
@@ -1100,7 +1119,6 @@
         return dri;
     }
 
-
     @VisibleForTesting
     protected TargetInfo getNearbySharingTarget(Intent originalIntent) {
         final ComponentName cn = getNearbySharingComponent();
@@ -1203,15 +1221,30 @@
                             "",
                             -1,
                             false);
+                    View firstImgView = getFirstVisibleImgPreviewView();
                     // Action bar is user-independent, always start as primary
-                    safelyStartActivityAsUser(ti, getPersonalProfileUserHandle());
-                    finish();
+                    if (firstImgView == null) {
+                        safelyStartActivityAsUser(ti, getPersonalProfileUserHandle());
+                        finish();
+                    } else {
+                        ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(
+                                this, firstImgView, IMAGE_EDITOR_SHARED_ELEMENT);
+                        safelyStartActivityAsUser(
+                                ti, getPersonalProfileUserHandle(), options.toBundle());
+                        startFinishAnimation();
+                    }
                 }
         );
         b.setId(R.id.chooser_edit_button);
         return b;
     }
 
+    @Nullable
+    private View getFirstVisibleImgPreviewView() {
+        View firstImage = findViewById(R.id.content_preview_image_1_large);
+        return firstImage != null && firstImage.isVisibleToUser() ? firstImage : null;
+    }
+
     private void addActionButton(ViewGroup parent, Button b) {
         if (b == null) return;
         final ViewGroup.MarginLayoutParams lp = new ViewGroup.MarginLayoutParams(
@@ -1559,6 +1592,14 @@
     }
 
     @Override
+    protected void onStop() {
+        super.onStop();
+        if (maybeCancelFinishAnimation()) {
+            finish();
+        }
+    }
+
+    @Override
     protected void onDestroy() {
         super.onDestroy();
 
@@ -2886,6 +2927,30 @@
                 .setSubtype(previewType));
     }
 
+    private void startFinishAnimation() {
+        View rootView = findRootView();
+        rootView.startAnimation(new FinishAnimation(this, rootView));
+    }
+
+    private boolean maybeCancelFinishAnimation() {
+        View rootView = findRootView();
+        Animation animation = rootView.getAnimation();
+        if (animation instanceof FinishAnimation) {
+            boolean hasEnded = animation.hasEnded();
+            animation.cancel();
+            rootView.clearAnimation();
+            return !hasEnded;
+        }
+        return false;
+    }
+
+    private View findRootView() {
+        if (mContentView == null) {
+            mContentView = findViewById(android.R.id.content);
+        }
+        return mContentView;
+    }
+
     abstract static class ViewHolderBase extends RecyclerView.ViewHolder {
         private int mViewType;
 
@@ -3986,6 +4051,66 @@
         }
     }
 
+    /**
+     * Used in combination with the scene transition when launching the image editor
+     */
+    private static class FinishAnimation extends AlphaAnimation implements
+            Animation.AnimationListener {
+        private Activity mActivity;
+        private View mRootView;
+        private final float mFromAlpha;
+
+        FinishAnimation(Activity activity, View rootView) {
+            super(rootView.getAlpha(), 0.0f);
+            mActivity = activity;
+            mRootView = rootView;
+            mFromAlpha = rootView.getAlpha();
+            setInterpolator(new LinearInterpolator());
+            long duration = activity.getWindow().getTransitionBackgroundFadeDuration();
+            setDuration(duration);
+            // The scene transition animation looks better when it's not overlapped with this
+            // fade-out animation thus the delay.
+            // It is most likely that the image editor will cause this activity to stop and this
+            // animation will be cancelled in the background without running (i.e. we'll animate
+            // only when this activity remains partially visible after the image editor launch).
+            setStartOffset(duration);
+            super.setAnimationListener(this);
+        }
+
+        @Override
+        public void setAnimationListener(AnimationListener listener) {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public void cancel() {
+            mRootView.setAlpha(mFromAlpha);
+            cleanup();
+            super.cancel();
+        }
+
+        @Override
+        public void onAnimationStart(Animation animation) {
+        }
+
+        @Override
+        public void onAnimationEnd(Animation animation) {
+            if (mActivity != null) {
+                mActivity.finish();
+                cleanup();
+            }
+        }
+
+        @Override
+        public void onAnimationRepeat(Animation animation) {
+        }
+
+        private void cleanup() {
+            mActivity = null;
+            mRootView = null;
+        }
+    }
+
     @Override
     protected void maybeLogProfileChange() {
         getChooserActivityLogger().logShareheetProfileChanged();
diff --git a/core/java/com/android/internal/app/ChooserMultiProfilePagerAdapter.java b/core/java/com/android/internal/app/ChooserMultiProfilePagerAdapter.java
index e6cc624..df1130b 100644
--- a/core/java/com/android/internal/app/ChooserMultiProfilePagerAdapter.java
+++ b/core/java/com/android/internal/app/ChooserMultiProfilePagerAdapter.java
@@ -93,6 +93,10 @@
         return profileDescriptor;
     }
 
+    public void setMaxTargetsPerRow(int maxTargetsPerRow) {
+        mMaxTargetsPerRow = maxTargetsPerRow;
+    }
+
     RecyclerView getListViewForIndex(int index) {
         return getItem(index).recyclerView;
     }
diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java
index 40429c6..e9e437f 100644
--- a/core/java/com/android/internal/app/ResolverActivity.java
+++ b/core/java/com/android/internal/app/ResolverActivity.java
@@ -1314,7 +1314,7 @@
         StrictMode.disableDeathOnFileUriExposure();
         try {
             UserHandle currentUserHandle = mMultiProfilePagerAdapter.getCurrentUserHandle();
-            safelyStartActivityInternal(cti, currentUserHandle);
+            safelyStartActivityInternal(cti, currentUserHandle, null);
         } finally {
             StrictMode.enableDeathOnFileUriExposure();
         }
@@ -1327,18 +1327,23 @@
      */
     @VisibleForTesting
     public void safelyStartActivityAsUser(TargetInfo cti, UserHandle user) {
+        safelyStartActivityAsUser(cti, user, null);
+    }
+
+    protected void safelyStartActivityAsUser(
+            TargetInfo cti, UserHandle user, @Nullable Bundle options) {
         // We're dispatching intents that might be coming from legacy apps, so
         // don't kill ourselves.
         StrictMode.disableDeathOnFileUriExposure();
         try {
-            safelyStartActivityInternal(cti, user);
+            safelyStartActivityInternal(cti, user, options);
         } finally {
             StrictMode.enableDeathOnFileUriExposure();
         }
     }
 
-
-    private void safelyStartActivityInternal(TargetInfo cti, UserHandle user) {
+    private void safelyStartActivityInternal(
+            TargetInfo cti, UserHandle user, @Nullable Bundle options) {
         // If the target is suspended, the activity will not be successfully launched.
         // Do not unregister from package manager updates in this case
         if (!cti.isSuspended() && mRegistered) {
@@ -1356,14 +1361,14 @@
             Toast.makeText(this, mProfileSwitchMessage, Toast.LENGTH_LONG).show();
         }
         if (!mSafeForwardingMode) {
-            if (cti.startAsUser(this, null, user)) {
+            if (cti.startAsUser(this, options, user)) {
                 onActivityStarted(cti);
                 maybeLogCrossProfileTargetLaunch(cti, user);
             }
             return;
         }
         try {
-            if (cti.startAsCaller(this, null, user.getIdentifier())) {
+            if (cti.startAsCaller(this, options, user.getIdentifier())) {
                 onActivityStarted(cti);
                 maybeLogCrossProfileTargetLaunch(cti, user);
             }
diff --git a/core/java/com/android/internal/app/ResolverListAdapter.java b/core/java/com/android/internal/app/ResolverListAdapter.java
index 2ed0f98..66fff5c 100644
--- a/core/java/com/android/internal/app/ResolverListAdapter.java
+++ b/core/java/com/android/internal/app/ResolverListAdapter.java
@@ -265,6 +265,7 @@
             return mResolverListController.getResolversForIntent(
                             /* shouldGetResolvedFilter= */ true,
                             mResolverListCommunicator.shouldGetActivityMetadata(),
+                            mResolverListCommunicator.shouldGetOnlyDefaultActivities(),
                             mIntents);
         }
     }
@@ -416,8 +417,9 @@
                     if (ii == null) {
                         continue;
                     }
-                    ActivityInfo ai = ii.resolveActivityInfo(
-                            mPm, 0);
+                    // Because of AIDL bug, resolveActivityInfo can't accept subclasses of Intent.
+                    final Intent rii = (ii.getClass() == Intent.class) ? ii : new Intent(ii);
+                    ActivityInfo ai = rii.resolveActivityInfo(mPm, 0);
                     if (ai == null) {
                         Log.w(TAG, "No activity found for " + ii);
                         continue;
@@ -727,6 +729,7 @@
     protected List<ResolvedComponentInfo> getResolversForUser(UserHandle userHandle) {
         return mResolverListController.getResolversForIntentAsUser(true,
                 mResolverListCommunicator.shouldGetActivityMetadata(),
+                mResolverListCommunicator.shouldGetOnlyDefaultActivities(),
                 mIntents, userHandle);
     }
 
@@ -820,6 +823,12 @@
 
         boolean shouldGetActivityMetadata();
 
+        /**
+         * @return true to filter only apps that can handle
+         *     {@link android.content.Intent#CATEGORY_DEFAULT} intents
+         */
+        default boolean shouldGetOnlyDefaultActivities() { return true; };
+
         Intent getTargetIntent();
 
         void onHandlePackagesChanged(ResolverListAdapter listAdapter);
@@ -942,7 +951,7 @@
         protected void onPostExecute(Drawable d) {
             if (getOtherProfile() == mDisplayResolveInfo) {
                 mResolverListCommunicator.updateProfileViewButton();
-            } else {
+            } else if (!mDisplayResolveInfo.hasDisplayIcon()) {
                 mDisplayResolveInfo.setDisplayIcon(d);
                 mHolder.bindIcon(mDisplayResolveInfo);
                 // Notify in case view is already bound to resolve the race conditions on
diff --git a/core/java/com/android/internal/app/ResolverListController.java b/core/java/com/android/internal/app/ResolverListController.java
index 2757363..01dcf962 100644
--- a/core/java/com/android/internal/app/ResolverListController.java
+++ b/core/java/com/android/internal/app/ResolverListController.java
@@ -110,17 +110,19 @@
     public List<ResolverActivity.ResolvedComponentInfo> getResolversForIntent(
             boolean shouldGetResolvedFilter,
             boolean shouldGetActivityMetadata,
+            boolean shouldGetOnlyDefaultActivities,
             List<Intent> intents) {
         return getResolversForIntentAsUser(shouldGetResolvedFilter, shouldGetActivityMetadata,
-                intents, mUserHandle);
+                shouldGetOnlyDefaultActivities, intents, mUserHandle);
     }
 
     public List<ResolverActivity.ResolvedComponentInfo> getResolversForIntentAsUser(
             boolean shouldGetResolvedFilter,
             boolean shouldGetActivityMetadata,
+            boolean shouldGetOnlyDefaultActivities,
             List<Intent> intents,
             UserHandle userHandle) {
-        int baseFlags = PackageManager.MATCH_DEFAULT_ONLY
+        int baseFlags = (shouldGetOnlyDefaultActivities ? PackageManager.MATCH_DEFAULT_ONLY : 0)
                 | PackageManager.MATCH_DIRECT_BOOT_AWARE
                 | PackageManager.MATCH_DIRECT_BOOT_UNAWARE
                 | (shouldGetResolvedFilter ? PackageManager.GET_RESOLVED_FILTER : 0)
@@ -134,12 +136,15 @@
             int baseFlags) {
         List<ResolverActivity.ResolvedComponentInfo> resolvedComponents = null;
         for (int i = 0, N = intents.size(); i < N; i++) {
-            final Intent intent = intents.get(i);
+            Intent intent = intents.get(i);
             int flags = baseFlags;
             if (intent.isWebIntent()
                         || (intent.getFlags() & Intent.FLAG_ACTIVITY_MATCH_EXTERNAL) != 0) {
                 flags |= PackageManager.MATCH_INSTANT;
             }
+            // Because of AIDL bug, queryIntentActivitiesAsUser can't accept subclasses of Intent.
+            intent = (intent.getClass() == Intent.class) ? intent : new Intent(
+                    intent);
             final List<ResolveInfo> infos = mpm.queryIntentActivitiesAsUser(intent, flags,
                     userHandle);
             if (infos != null) {
diff --git a/core/java/com/android/internal/jank/FrameTracker.java b/core/java/com/android/internal/jank/FrameTracker.java
index 825b486..48343803 100644
--- a/core/java/com/android/internal/jank/FrameTracker.java
+++ b/core/java/com/android/internal/jank/FrameTracker.java
@@ -26,10 +26,12 @@
 
 import static com.android.internal.jank.InteractionJankMonitor.ACTION_SESSION_CANCEL;
 import static com.android.internal.jank.InteractionJankMonitor.ACTION_SESSION_END;
+import static com.android.internal.jank.InteractionJankMonitor.EXECUTOR_TASK_TIMEOUT;
 
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.annotation.UiThread;
 import android.graphics.HardwareRendererObserver;
 import android.os.Handler;
 import android.os.Trace;
@@ -64,6 +66,8 @@
     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;
+
     static final int REASON_END_UNKNOWN = -1;
     static final int REASON_END_NORMAL = 0;
     static final int REASON_END_SURFACE_DESTROYED = 1;
@@ -85,8 +89,9 @@
     public @interface Reasons {
     }
 
+    @VisibleForTesting
+    public final InteractionJankMonitor mMonitor;
     private final HardwareRendererObserver mObserver;
-    private SurfaceControl mSurfaceControl;
     private final int mTraceThresholdMissedFrames;
     private final int mTraceThresholdFrameTimeMillis;
     private final ThreadedRendererWrapper mRendererWrapper;
@@ -99,17 +104,17 @@
     private final Handler mHandler;
     private final ChoreographerWrapper mChoreographer;
     private final StatsLogWrapper mStatsLog;
-    private final Object mLock = InteractionJankMonitor.getInstance().getLock();
     private final boolean mDeferMonitoring;
+    private final FrameTrackerListener mListener;
 
     @VisibleForTesting
     public final boolean mSurfaceOnly;
 
+    private SurfaceControl mSurfaceControl;
     private long mBeginVsyncId = INVALID_ID;
     private long mEndVsyncId = INVALID_ID;
     private boolean mMetricsFinalized;
     private boolean mCancelled = false;
-    private FrameTrackerListener mListener;
     private boolean mTracingStarted = false;
     private Runnable mWaitForFinishTimedOut;
 
@@ -142,16 +147,52 @@
             this.jankType = jankType;
             this.isFirstFrame = isFirstFrame;
         }
+
+        @Override
+        public String toString() {
+            StringBuilder str = new StringBuilder();
+            switch (jankType) {
+                case JANK_NONE:
+                    str.append("JANK_NONE");
+                    break;
+                case JANK_APP_DEADLINE_MISSED:
+                    str.append("JANK_APP_DEADLINE_MISSED");
+                    break;
+                case JANK_SURFACEFLINGER_DEADLINE_MISSED:
+                    str.append("JANK_SURFACEFLINGER_DEADLINE_MISSED");
+                    break;
+                case JANK_SURFACEFLINGER_GPU_DEADLINE_MISSED:
+                    str.append("JANK_SURFACEFLINGER_GPU_DEADLINE_MISSED");
+                    break;
+                case DISPLAY_HAL:
+                    str.append("DISPLAY_HAL");
+                    break;
+                case PREDICTION_ERROR:
+                    str.append("PREDICTION_ERROR");
+                    break;
+                case SURFACE_FLINGER_SCHEDULING:
+                    str.append("SURFACE_FLINGER_SCHEDULING");
+                    break;
+                default:
+                    str.append("UNKNOWN: ").append(jankType);
+                    break;
+            }
+            str.append(", ").append(frameVsyncId);
+            str.append(", ").append(totalDurationNanos);
+            return str.toString();
+        }
     }
 
-    public FrameTracker(@NonNull Session session, @NonNull Handler handler,
-            @Nullable ThreadedRendererWrapper renderer, @Nullable ViewRootWrapper viewRootWrapper,
+    public FrameTracker(@NonNull InteractionJankMonitor monitor, @NonNull Session session,
+            @NonNull Handler handler, @Nullable ThreadedRendererWrapper renderer,
+            @Nullable ViewRootWrapper viewRootWrapper,
             @NonNull SurfaceControlWrapper surfaceControlWrapper,
             @NonNull ChoreographerWrapper choreographer,
             @Nullable FrameMetricsWrapper metrics,
             @NonNull StatsLogWrapper statsLog,
             int traceThresholdMissedFrames, int traceThresholdFrameTimeMillis,
             @Nullable FrameTrackerListener listener, @NonNull Configuration config) {
+        mMonitor = monitor;
         mSurfaceOnly = config.isSurfaceOnly();
         mSession = session;
         mHandler = handler;
@@ -186,17 +227,15 @@
             mSurfaceChangedCallback = new ViewRootImpl.SurfaceChangedCallback() {
                 @Override
                 public void surfaceCreated(SurfaceControl.Transaction t) {
-                    synchronized (mLock) {
+                    getHandler().runWithScissors(() -> {
                         if (mSurfaceControl == null) {
                             mSurfaceControl = mViewRoot.getSurfaceControl();
                             if (mBeginVsyncId != INVALID_ID) {
-                                mSurfaceControlWrapper.addJankStatsListener(
-                                        FrameTracker.this, mSurfaceControl);
-                                markEvent("FT#deferMonitoring");
-                                postTraceStartMarker();
+                                // Previous begin invocation is not successfully, begin it again.
+                                begin();
                             }
                         }
-                    }
+                    }, EXECUTOR_TASK_TIMEOUT);
                 }
 
                 @Override
@@ -208,18 +247,16 @@
 
                     // Wait a while to give the system a chance for the remaining
                     // frames to arrive, then force finish the session.
-                    mHandler.postDelayed(() -> {
-                        synchronized (mLock) {
-                            if (DEBUG) {
-                                Log.d(TAG, "surfaceDestroyed: " + mSession.getName()
-                                        + ", finalized=" + mMetricsFinalized
-                                        + ", info=" + mJankInfos.size()
-                                        + ", vsync=" + mBeginVsyncId);
-                            }
-                            if (!mMetricsFinalized) {
-                                end(REASON_END_SURFACE_DESTROYED);
-                                finish();
-                            }
+                    getHandler().postDelayed(() -> {
+                        if (DEBUG) {
+                            Log.d(TAG, "surfaceDestroyed: " + mSession.getName()
+                                    + ", finalized=" + mMetricsFinalized
+                                    + ", info=" + mJankInfos.size()
+                                    + ", vsync=" + mBeginVsyncId);
+                        }
+                        if (!mMetricsFinalized) {
+                            end(REASON_END_SURFACE_DESTROYED);
+                            finish();
                         }
                     }, 50);
                 }
@@ -230,35 +267,42 @@
         }
     }
 
+    @VisibleForTesting
+    public Handler getHandler() {
+        return mHandler;
+    }
+
     /**
      * Begin a trace session of the CUJ.
      */
+    @UiThread
     public void begin() {
-        synchronized (mLock) {
-            final long currentVsync = mChoreographer.getVsyncId();
-            // In normal case, we should begin at the next frame,
-            // the id of the next frame is not simply increased by 1,
-            // but we can exclude the current frame at least.
+        final long currentVsync = mChoreographer.getVsyncId();
+        // In normal case, we should begin at the next frame,
+        // the id of the next frame is not simply increased by 1,
+        // but we can exclude the current frame at least.
+        if (mBeginVsyncId == INVALID_ID) {
             mBeginVsyncId = mDeferMonitoring ? currentVsync + 1 : currentVsync;
+        }
+        if (mSurfaceControl != null) {
             if (DEBUG) {
                 Log.d(TAG, "begin: " + mSession.getName() + ", begin=" + mBeginVsyncId
-                        + ", defer=" + mDeferMonitoring);
+                        + ", defer=" + mDeferMonitoring + ", current=" + currentVsync);
             }
-            if (mSurfaceControl != null) {
-                if (mDeferMonitoring) {
-                    markEvent("FT#deferMonitoring");
-                    // Normal case, we begin the instrument from the very beginning,
-                    // will exclude the first frame.
-                    postTraceStartMarker();
-                } else {
-                    // If we don't begin the instrument from the very beginning,
-                    // there is no need to skip the frame where the begin invocation happens.
-                    beginInternal();
-                }
-                mSurfaceControlWrapper.addJankStatsListener(this, mSurfaceControl);
+            if (mDeferMonitoring && currentVsync < mBeginVsyncId) {
+                markEvent("FT#deferMonitoring");
+                // Normal case, we begin the instrument from the very beginning,
+                // will exclude the first frame.
+                postTraceStartMarker(this::beginInternal);
+            } else {
+                // If we don't begin the instrument from the very beginning,
+                // there is no need to skip the frame where the begin invocation happens.
+                beginInternal();
             }
-            if (!mSurfaceOnly) {
-                mRendererWrapper.addObserver(mObserver);
+        } else {
+            if (DEBUG) {
+                Log.d(TAG, "begin: defer beginning since the surface is not ready for CUJ="
+                        + mSession.getName());
             }
         }
     }
@@ -267,92 +311,103 @@
      * Start trace section at appropriate time.
      */
     @VisibleForTesting
-    public void postTraceStartMarker() {
-        mChoreographer.mChoreographer.postCallback(
-                Choreographer.CALLBACK_INPUT, this::beginInternal, null);
+    public void postTraceStartMarker(Runnable action) {
+        mChoreographer.mChoreographer.postCallback(Choreographer.CALLBACK_INPUT, action, null);
     }
 
+    @UiThread
     private void beginInternal() {
-        synchronized (mLock) {
-            if (mCancelled || mEndVsyncId != INVALID_ID) {
-                return;
-            }
-            mTracingStarted = true;
-            markEvent("FT#begin");
-            Trace.beginAsyncSection(mSession.getName(), (int) mBeginVsyncId);
+        if (mCancelled || mEndVsyncId != INVALID_ID) {
+            return;
+        }
+        mTracingStarted = true;
+        markEvent("FT#begin");
+        Trace.beginAsyncSection(mSession.getName(), (int) mBeginVsyncId);
+        mSurfaceControlWrapper.addJankStatsListener(this, mSurfaceControl);
+        if (!mSurfaceOnly) {
+            mRendererWrapper.addObserver(mObserver);
         }
     }
 
     /**
      * End the trace session of the CUJ.
      */
+    @UiThread
     public boolean end(@Reasons int reason) {
-        synchronized (mLock) {
-            if (mCancelled || mEndVsyncId != INVALID_ID) return false;
-            mEndVsyncId = mChoreographer.getVsyncId();
-            // Cancel the session if:
-            // 1. The session begins and ends at the same vsync id.
-            // 2. The session never begun.
-            if (mBeginVsyncId == INVALID_ID) {
-                return cancel(REASON_CANCEL_NOT_BEGUN);
-            } else if (mEndVsyncId <= mBeginVsyncId) {
-                return cancel(REASON_CANCEL_SAME_VSYNC);
-            } else {
-                if (DEBUG) {
-                    Log.d(TAG, "end: " + mSession.getName()
-                            + ", end=" + mEndVsyncId + ", reason=" + reason);
-                }
-                markEvent("FT#end#" + reason);
-                Trace.endAsyncSection(mSession.getName(), (int) mBeginVsyncId);
-                mSession.setReason(reason);
-
-                // We don't remove observer here,
-                // will remove it when all the frame metrics in this duration are called back.
-                // See onFrameMetricsAvailable for the logic of removing the observer.
-                // Waiting at most 10 seconds for all callbacks to finish.
-                mWaitForFinishTimedOut = () -> {
-                    Log.e(TAG, "force finish cuj because of time out:" + mSession.getName());
-                    finish();
-                };
-                mHandler.postDelayed(mWaitForFinishTimedOut, TimeUnit.SECONDS.toMillis(10));
-                notifyCujEvent(ACTION_SESSION_END);
-                return true;
+        if (mCancelled || mEndVsyncId != INVALID_ID) return false;
+        mEndVsyncId = mChoreographer.getVsyncId();
+        // Cancel the session if:
+        // 1. The session begins and ends at the same vsync id.
+        // 2. The session never begun.
+        if (mBeginVsyncId == INVALID_ID) {
+            return cancel(REASON_CANCEL_NOT_BEGUN);
+        } else if (mEndVsyncId <= mBeginVsyncId) {
+            return cancel(REASON_CANCEL_SAME_VSYNC);
+        } else {
+            if (DEBUG) {
+                Log.d(TAG, "end: " + mSession.getName()
+                        + ", end=" + mEndVsyncId + ", reason=" + reason);
             }
+            markEvent("FT#end#" + reason);
+            Trace.endAsyncSection(mSession.getName(), (int) mBeginVsyncId);
+            mSession.setReason(reason);
+
+            // We don't remove observer here,
+            // will remove it when all the frame metrics in this duration are called back.
+            // See onFrameMetricsAvailable for the logic of removing the observer.
+            // Waiting at most 10 seconds for all callbacks to finish.
+            mWaitForFinishTimedOut = () -> {
+                Log.e(TAG, "force finish cuj because of time out:" + mSession.getName());
+                finish();
+            };
+            getHandler().postDelayed(mWaitForFinishTimedOut, TimeUnit.SECONDS.toMillis(10));
+            notifyCujEvent(ACTION_SESSION_END);
+            return true;
         }
     }
 
     /**
      * Cancel the trace session of the CUJ.
      */
+    @UiThread
     public boolean cancel(@Reasons int reason) {
-        synchronized (mLock) {
-            final boolean cancelFromEnd =
-                    reason == REASON_CANCEL_NOT_BEGUN || reason == REASON_CANCEL_SAME_VSYNC;
-            if (mCancelled || (mEndVsyncId != INVALID_ID && !cancelFromEnd)) return false;
-            mCancelled = true;
-            markEvent("FT#cancel#" + reason);
-            // We don't need to end the trace section if it never begun.
-            if (mTracingStarted) {
-                Trace.endAsyncSection(mSession.getName(), (int) mBeginVsyncId);
-            }
-
-            // Always remove the observers in cancel call to avoid leakage.
-            removeObservers();
-
-            if (DEBUG) {
-                Log.d(TAG, "cancel: " + mSession.getName() + ", begin=" + mBeginVsyncId
-                        + ", end=" + mEndVsyncId + ", reason=" + reason);
-            }
-
-            mSession.setReason(reason);
-            // Notify the listener the session has been cancelled.
-            // We don't notify the listeners if the session never begun.
-            notifyCujEvent(ACTION_SESSION_CANCEL);
-            return true;
+        final boolean cancelFromEnd =
+                reason == REASON_CANCEL_NOT_BEGUN || reason == REASON_CANCEL_SAME_VSYNC;
+        if (mCancelled || (mEndVsyncId != INVALID_ID && !cancelFromEnd)) return false;
+        mCancelled = true;
+        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);
         }
+
+        // Always remove the observers in cancel call to avoid leakage.
+        removeObservers();
+
+        if (DEBUG) {
+            Log.d(TAG, "cancel: " + mSession.getName() + ", begin=" + mBeginVsyncId
+                    + ", end=" + mEndVsyncId + ", reason=" + reason);
+        }
+
+        mSession.setReason(reason);
+        // Notify the listener the session has been cancelled.
+        // We don't notify the listeners if the session never begun.
+        notifyCujEvent(ACTION_SESSION_CANCEL);
+        return true;
     }
 
-    private void markEvent(String desc) {
+    /**
+     * Mark the FrameTracker events in the trace.
+     *
+     * @param desc The description of the trace event,
+     *            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));
+        }
         Trace.beginSection(TextUtils.formatSimple("%s#%s", mSession.getName(), desc));
         Trace.endSection();
     }
@@ -364,8 +419,8 @@
 
     @Override
     public void onJankDataAvailable(SurfaceControl.JankData[] jankData) {
-        synchronized (mLock) {
-            if (mCancelled) {
+        postCallback(() -> {
+            if (mCancelled || mMetricsFinalized) {
                 return;
             }
 
@@ -384,10 +439,19 @@
                 }
             }
             processJankInfos();
-        }
+        });
     }
 
-    private @Nullable JankInfo findJankInfo(long frameVsyncId) {
+    /**
+     * For easier argument capture.
+     */
+    @VisibleForTesting
+    public void postCallback(Runnable callback) {
+        getHandler().post(callback);
+    }
+
+    @Nullable
+    private JankInfo findJankInfo(long frameVsyncId) {
         return mJankInfos.get((int) frameVsyncId);
     }
 
@@ -400,8 +464,8 @@
 
     @Override
     public void onFrameMetricsAvailable(int dropCountSinceLastInvocation) {
-        synchronized (mLock) {
-            if (mCancelled) {
+        postCallback(() -> {
+            if (mCancelled || mMetricsFinalized) {
                 return;
             }
 
@@ -426,9 +490,10 @@
                         frameVsyncId, totalDurationNanos, isFirstFrame));
             }
             processJankInfos();
-        }
+        });
     }
 
+    @UiThread
     private boolean hasReceivedCallbacksAfterEnd() {
         if (mEndVsyncId == INVALID_ID) {
             return false;
@@ -451,6 +516,7 @@
         return false;
     }
 
+    @UiThread
     private void processJankInfos() {
         if (mMetricsFinalized) {
             return;
@@ -467,9 +533,12 @@
                 : info.hwuiCallbackFired && info.surfaceControlCallbackFired;
     }
 
+    @UiThread
     private void finish() {
-        mHandler.removeCallbacks(mWaitForFinishTimedOut);
+        getHandler().removeCallbacks(mWaitForFinishTimedOut);
         mWaitForFinishTimedOut = null;
+        if (mMetricsFinalized || mCancelled) return;
+        markEvent("FT#finish#" + mJankInfos.size());
         mMetricsFinalized = true;
 
         // The tracing has been ended, remove the observer, see if need to trigger perfetto.
@@ -496,7 +565,7 @@
                 totalFramesCount++;
                 boolean missedFrame = false;
                 if ((info.jankType & JANK_APP_DEADLINE_MISSED) != 0) {
-                    Log.w(TAG, "Missed App frame:" + info.jankType);
+                    Log.w(TAG, "Missed App frame:" + info + ", CUJ=" + mSession.getName());
                     missedAppFramesCount++;
                     missedFrame = true;
                 }
@@ -505,7 +574,7 @@
                         || (info.jankType & JANK_SURFACEFLINGER_GPU_DEADLINE_MISSED) != 0
                         || (info.jankType & SURFACE_FLINGER_SCHEDULING) != 0
                         || (info.jankType & PREDICTION_ERROR) != 0) {
-                    Log.w(TAG, "Missed SF frame:" + info.jankType);
+                    Log.w(TAG, "Missed SF frame:" + info + ", CUJ=" + mSession.getName());
                     missedSfFramesCount++;
                     missedFrame = true;
                 }
@@ -520,13 +589,15 @@
                 // TODO (b/174755489): Early latch currently gets fired way too often, so we have
                 // to ignore it for now.
                 if (!mSurfaceOnly && !info.hwuiCallbackFired) {
-                    Log.w(TAG, "Missing HWUI jank callback for vsyncId: " + info.frameVsyncId);
+                    Log.w(TAG, "Missing HWUI jank callback for vsyncId: " + info.frameVsyncId
+                            + ", CUJ=" + mSession.getName());
                 }
             }
             if (!mSurfaceOnly && info.hwuiCallbackFired) {
                 maxFrameTimeNanos = Math.max(info.totalDurationNanos, maxFrameTimeNanos);
                 if (!info.surfaceControlCallbackFired) {
-                    Log.w(TAG, "Missing SF jank callback for vsyncId: " + info.frameVsyncId);
+                    Log.w(TAG, "Missing SF jank callback for vsyncId: " + info.frameVsyncId
+                            + ", CUJ=" + mSession.getName());
                 }
             }
         }
@@ -586,6 +657,7 @@
      * Remove all the registered listeners, observers and callbacks.
      */
     @VisibleForTesting
+    @UiThread
     public void removeObservers() {
         mSurfaceControlWrapper.removeJankStatsListener(this);
         if (!mSurfaceOnly) {
@@ -601,7 +673,7 @@
      * Trigger the prefetto daemon.
      */
     public void triggerPerfetto() {
-        InteractionJankMonitor.getInstance().trigger(mSession);
+        mMonitor.trigger(mSession);
     }
 
     /**
@@ -666,10 +738,18 @@
             mViewRoot = viewRoot;
         }
 
+        /**
+         * {@link ViewRootImpl#addSurfaceChangedCallback(ViewRootImpl.SurfaceChangedCallback)}
+         * @param callback {@link ViewRootImpl.SurfaceChangedCallback}
+         */
         public void addSurfaceChangedCallback(ViewRootImpl.SurfaceChangedCallback callback) {
             mViewRoot.addSurfaceChangedCallback(callback);
         }
 
+        /**
+         * {@link ViewRootImpl#removeSurfaceChangedCallback(ViewRootImpl.SurfaceChangedCallback)}
+         * @param callback {@link ViewRootImpl.SurfaceChangedCallback}
+         */
         public void removeSurfaceChangedCallback(ViewRootImpl.SurfaceChangedCallback callback) {
             mViewRoot.removeSurfaceChangedCallback(callback);
         }
diff --git a/core/java/com/android/internal/jank/InteractionJankMonitor.java b/core/java/com/android/internal/jank/InteractionJankMonitor.java
index 65e7abf..72de78c 100644
--- a/core/java/com/android/internal/jank/InteractionJankMonitor.java
+++ b/core/java/com/android/internal/jank/InteractionJankMonitor.java
@@ -53,7 +53,8 @@
 import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_APP_LAUNCH_FROM_MEDIA_PLAYER;
 import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_APP_LAUNCH_FROM_QS_TILE;
 import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_APP_LAUNCH_FROM_SETTINGS_BUTTON;
-import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_EXPAND_COLLAPSE_LOCK;
+import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_CLEAR_ALL;
+import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_DIALOG_OPEN;
 import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_HEADS_UP_APPEAR;
 import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_HEADS_UP_DISAPPEAR;
 import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_NOTIFICATION_ADD;
@@ -74,15 +75,21 @@
 import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SUW_LOADING_TO_SHOW_INFO_WITH_ACTIONS;
 import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SUW_SHOW_FUNCTION_SCREEN_WITH_ACTIONS;
 import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__TAKE_SCREENSHOT;
+import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__TASKBAR_COLLAPSE;
+import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__TASKBAR_EXPAND;
 import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__UNFOLD_ANIM;
+import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__USER_DIALOG_OPEN;
 import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__USER_SWITCH;
 import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__VOLUME_CONTROL;
 import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__WALLPAPER_TRANSITION;
 
 import android.annotation.IntDef;
 import android.annotation.NonNull;
+import android.annotation.UiThread;
+import android.annotation.WorkerThread;
 import android.content.Context;
 import android.os.Build;
+import android.os.Handler;
 import android.os.HandlerExecutor;
 import android.os.HandlerThread;
 import android.provider.DeviceConfig;
@@ -93,6 +100,7 @@
 import android.view.SurfaceControl;
 import android.view.View;
 
+import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.jank.FrameTracker.ChoreographerWrapper;
 import com.android.internal.jank.FrameTracker.FrameMetricsWrapper;
@@ -126,6 +134,7 @@
 
     private static final String DEFAULT_WORKER_NAME = TAG + "-Worker";
     private static final long DEFAULT_TIMEOUT_MS = TimeUnit.SECONDS.toMillis(2L);
+    static final long EXECUTOR_TASK_TIMEOUT = 500;
     private static final String SETTINGS_ENABLED_KEY = "enabled";
     private static final String SETTINGS_SAMPLING_INTERVAL_KEY = "sampling_interval";
     private static final String SETTINGS_THRESHOLD_MISSED_FRAMES_KEY =
@@ -140,12 +149,15 @@
     private static final int DEFAULT_TRACE_THRESHOLD_MISSED_FRAMES = 3;
     private static final int DEFAULT_TRACE_THRESHOLD_FRAME_TIME_MILLIS = 64;
 
+    @VisibleForTesting
+    public static final int MAX_LENGTH_OF_CUJ_NAME = 80;
+    private static final int MAX_LENGTH_SESSION_NAME = 100;
+
     public static final String ACTION_SESSION_END = ACTION_PREFIX + ".ACTION_SESSION_END";
     public static final String ACTION_SESSION_CANCEL = ACTION_PREFIX + ".ACTION_SESSION_CANCEL";
 
     // Every value must have a corresponding entry in CUJ_STATSD_INTERACTION_TYPE.
     public static final int CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE = 0;
-    public static final int CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE_LOCK = 1;
     public static final int CUJ_NOTIFICATION_SHADE_SCROLL_FLING = 2;
     public static final int CUJ_NOTIFICATION_SHADE_ROW_EXPAND = 3;
     public static final int CUJ_NOTIFICATION_SHADE_ROW_SWIPE = 4;
@@ -202,6 +214,11 @@
     public static final int CUJ_VOLUME_CONTROL = 55;
     public static final int CUJ_BIOMETRIC_PROMPT_TRANSITION = 56;
     public static final int CUJ_SETTINGS_TOGGLE = 57;
+    public static final int CUJ_SHADE_DIALOG_OPEN = 58;
+    public static final int CUJ_USER_DIALOG_OPEN = 59;
+    public static final int CUJ_TASKBAR_EXPAND = 60;
+    public static final int CUJ_TASKBAR_COLLAPSE = 61;
+    public static final int CUJ_SHADE_CLEAR_ALL = 62;
 
     private static final int NO_STATSD_LOGGING = -1;
 
@@ -211,7 +228,7 @@
     public static final int[] CUJ_TO_STATSD_INTERACTION_TYPE = {
             // This should be mapping to CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE.
             UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__NOTIFICATION_SHADE_SWIPE,
-            UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_EXPAND_COLLAPSE_LOCK,
+            NO_STATSD_LOGGING, // This is deprecated.
             UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_SCROLL_FLING,
             UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_ROW_EXPAND,
             UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_ROW_SWIPE,
@@ -268,6 +285,11 @@
             UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__VOLUME_CONTROL,
             UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__BIOMETRIC_PROMPT_TRANSITION,
             UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SETTINGS_TOGGLE,
+            UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_DIALOG_OPEN,
+            UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__USER_DIALOG_OPEN,
+            UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__TASKBAR_EXPAND,
+            UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__TASKBAR_COLLAPSE,
+            UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_CLEAR_ALL,
     };
 
     private static volatile InteractionJankMonitor sInstance;
@@ -275,13 +297,14 @@
     private final DeviceConfig.OnPropertiesChangedListener mPropertiesChangedListener =
             this::updateProperties;
 
-    private final FrameMetricsWrapper mMetrics;
+    @GuardedBy("mLock")
     private final SparseArray<FrameTracker> mRunningTrackers;
+    @GuardedBy("mLock")
     private final SparseArray<Runnable> mTimeoutActions;
     private final HandlerThread mWorker;
     private final Object mLock = new Object();
 
-    private boolean mEnabled = DEFAULT_ENABLED;
+    private volatile boolean mEnabled = DEFAULT_ENABLED;
     private int mSamplingInterval = DEFAULT_SAMPLING_INTERVAL;
     private int mTraceThresholdMissedFrames = DEFAULT_TRACE_THRESHOLD_MISSED_FRAMES;
     private int mTraceThresholdFrameTimeMillis = DEFAULT_TRACE_THRESHOLD_FRAME_TIME_MILLIS;
@@ -289,7 +312,6 @@
     /** @hide */
     @IntDef({
             CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE,
-            CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE_LOCK,
             CUJ_NOTIFICATION_SHADE_SCROLL_FLING,
             CUJ_NOTIFICATION_SHADE_ROW_EXPAND,
             CUJ_NOTIFICATION_SHADE_ROW_SWIPE,
@@ -346,6 +368,11 @@
             CUJ_VOLUME_CONTROL,
             CUJ_BIOMETRIC_PROMPT_TRANSITION,
             CUJ_SETTINGS_TOGGLE,
+            CUJ_SHADE_DIALOG_OPEN,
+            CUJ_USER_DIALOG_OPEN,
+            CUJ_TASKBAR_EXPAND,
+            CUJ_TASKBAR_COLLAPSE,
+            CUJ_SHADE_CLEAR_ALL
     })
     @Retention(RetentionPolicy.SOURCE)
     public @interface CujType {
@@ -378,9 +405,7 @@
         mRunningTrackers = new SparseArray<>();
         mTimeoutActions = new SparseArray<>();
         mWorker = worker;
-        mMetrics = new FrameMetricsWrapper();
         mWorker.start();
-        mEnabled = DEFAULT_ENABLED;
         mSamplingInterval = DEFAULT_SAMPLING_INTERVAL;
 
         // Post initialization to the background in case we're running on the main
@@ -393,10 +418,7 @@
                 DeviceConfig.NAMESPACE_INTERACTION_JANK_MONITOR,
                 new HandlerExecutor(mWorker.getThreadHandler()),
                 mPropertiesChangedListener);
-    }
-
-    Object getLock() {
-        return mLock;
+        mEnabled = DEFAULT_ENABLED;
     }
 
     /**
@@ -413,27 +435,27 @@
                 view == null ? null : new ThreadedRendererWrapper(view.getThreadedRenderer());
         final ViewRootWrapper viewRoot =
                 view == null ? null : new ViewRootWrapper(view.getViewRootImpl());
-
         final SurfaceControlWrapper surfaceControl = new SurfaceControlWrapper();
         final ChoreographerWrapper choreographer =
                 new ChoreographerWrapper(Choreographer.getInstance());
+        final FrameTrackerListener eventsListener = (s, act) -> handleCujEvents(act, s);
+        final FrameMetricsWrapper frameMetrics = new FrameMetricsWrapper();
 
-        synchronized (mLock) {
-            FrameTrackerListener eventsListener = (s, act) -> handleCujEvents(act, s);
-            return new FrameTracker(session, mWorker.getThreadHandler(),
-                    threadedRenderer, viewRoot, surfaceControl, choreographer,
-                    mMetrics, new FrameTracker.StatsLogWrapper(),
-                    mTraceThresholdMissedFrames, mTraceThresholdFrameTimeMillis,
-                    eventsListener, config);
-        }
+        return new FrameTracker(this, session, config.getHandler(), threadedRenderer, viewRoot,
+                surfaceControl, choreographer, frameMetrics, new FrameTracker.StatsLogWrapper(),
+                mTraceThresholdMissedFrames, mTraceThresholdFrameTimeMillis,
+                eventsListener, config);
     }
 
+    @UiThread
     private void handleCujEvents(String action, Session session) {
         // Clear the running and timeout tasks if the end / cancel was fired within the tracker.
         // Or we might have memory leaks.
         if (needRemoveTasks(action, session)) {
-            removeTimeout(session.getCuj());
-            removeTracker(session.getCuj());
+            getTracker(session.getCuj()).getHandler().runWithScissors(() -> {
+                removeTimeout(session.getCuj());
+                removeTracker(session.getCuj());
+            }, EXECUTOR_TASK_TIMEOUT);
         }
     }
 
@@ -450,7 +472,7 @@
         synchronized (mLock) {
             Runnable timeout = mTimeoutActions.get(cujType);
             if (timeout != null) {
-                mWorker.getThreadHandler().removeCallbacks(timeout);
+                getTracker(cujType).getHandler().removeCallbacks(timeout);
                 mTimeoutActions.remove(cujType);
             }
         }
@@ -475,9 +497,7 @@
      */
     public boolean begin(View v, @CujType int cujType) {
         try {
-            return beginInternal(
-                    Configuration.Builder.withView(cujType, v)
-                            .build());
+            return begin(Configuration.Builder.withView(cujType, v));
         } catch (IllegalArgumentException ex) {
             Log.d(TAG, "Build configuration failed!", ex);
             return false;
@@ -488,35 +508,42 @@
      * Begins a trace session.
      *
      * @param builder the builder of the configurations for instrumenting the CUJ.
-     * @return boolean true if the tracker is started successfully, false otherwise.
+     * @return boolean true if the tracker is begun successfully, false otherwise.
      */
     public boolean begin(@NonNull Configuration.Builder builder) {
         try {
-            return beginInternal(builder.build());
+            final Configuration config = builder.build();
+            final TrackerResult result = new TrackerResult();
+            final boolean success = config.getHandler().runWithScissors(
+                    () -> result.mResult = beginInternal(config), EXECUTOR_TASK_TIMEOUT);
+            if (!success) {
+                Log.d(TAG, "begin failed due to timeout, CUJ=" + getNameOfCuj(config.mCujType));
+                return false;
+            }
+            return result.mResult;
         } catch (IllegalArgumentException ex) {
             Log.d(TAG, "Build configuration failed!", ex);
             return false;
         }
     }
 
+    @UiThread
     private boolean beginInternal(@NonNull Configuration conf) {
-        synchronized (mLock) {
-            int cujType = conf.mCujType;
-            if (!shouldMonitor(cujType)) return false;
-            FrameTracker tracker = getTracker(cujType);
-            // Skip subsequent calls if we already have an ongoing tracing.
-            if (tracker != null) return false;
+        int cujType = conf.mCujType;
+        if (!shouldMonitor(cujType)) return false;
+        FrameTracker tracker = getTracker(cujType);
+        // Skip subsequent calls if we already have an ongoing tracing.
+        if (tracker != null) return false;
 
-            // begin a new trace session.
-            tracker = createFrameTracker(conf, new Session(cujType, conf.mTag));
-            mRunningTrackers.put(cujType, tracker);
-            tracker.begin();
+        // begin a new trace session.
+        tracker = createFrameTracker(conf, new Session(cujType, conf.mTag));
+        putTracker(cujType, tracker);
+        tracker.begin();
 
-            // Cancel the trace if we don't get an end() call in specified duration.
-            scheduleTimeoutAction(
-                    cujType, conf.mTimeout, () -> cancel(cujType, REASON_CANCEL_TIMEOUT));
-            return true;
-        }
+        // Cancel the trace if we don't get an end() call in specified duration.
+        scheduleTimeoutAction(
+                cujType, conf.mTimeout, () -> cancel(cujType, REASON_CANCEL_TIMEOUT));
+        return true;
     }
 
     /**
@@ -545,8 +572,10 @@
      */
     @VisibleForTesting
     public void scheduleTimeoutAction(@CujType int cuj, long timeout, Runnable action) {
-        mTimeoutActions.put(cuj, action);
-        mWorker.getThreadHandler().postDelayed(action, timeout);
+        synchronized (mLock) {
+            mTimeoutActions.put(cuj, action);
+            getTracker(cuj).getHandler().postDelayed(action, timeout);
+        }
     }
 
     /**
@@ -556,20 +585,37 @@
      * @return boolean true if the tracker is ended successfully, false otherwise.
      */
     public boolean end(@CujType int cujType) {
-        synchronized (mLock) {
-            // remove the timeout action first.
-            removeTimeout(cujType);
-            FrameTracker tracker = getTracker(cujType);
-            // Skip this call since we haven't started a trace yet.
-            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);
+        FrameTracker tracker = getTracker(cujType);
+        // Skip this call since we haven't started a trace yet.
+        if (tracker == null) return false;
+        try {
+            final TrackerResult result = new TrackerResult();
+            final boolean success = tracker.getHandler().runWithScissors(
+                    () -> result.mResult = endInternal(cujType), EXECUTOR_TASK_TIMEOUT);
+            if (!success) {
+                Log.d(TAG, "end failed due to timeout, CUJ=" + getNameOfCuj(cujType));
+                return false;
             }
-            return true;
+            return result.mResult;
+        } catch (IllegalArgumentException ex) {
+            Log.d(TAG, "Execute end task failed!", ex);
+            return false;
         }
     }
 
+    @UiThread
+    private boolean endInternal(@CujType int cujType) {
+        // remove the timeout action first.
+        removeTimeout(cujType);
+        FrameTracker tracker = getTracker(cujType);
+        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);
+        }
+        return true;
+    }
+
     /**
      * Cancels the trace session.
      *
@@ -586,39 +632,66 @@
      */
     @VisibleForTesting
     public boolean cancel(@CujType int cujType, @Reasons int reason) {
-        synchronized (mLock) {
-            // remove the timeout action first.
-            removeTimeout(cujType);
-            FrameTracker tracker = getTracker(cujType);
-            // Skip this call since we haven't started a trace yet.
-            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);
+        FrameTracker tracker = getTracker(cujType);
+        // Skip this call since we haven't started a trace yet.
+        if (tracker == null) return false;
+        try {
+            final TrackerResult result = new TrackerResult();
+            final boolean success = tracker.getHandler().runWithScissors(
+                    () -> result.mResult = cancelInternal(cujType, reason), EXECUTOR_TASK_TIMEOUT);
+            if (!success) {
+                Log.d(TAG, "cancel failed due to timeout, CUJ=" + getNameOfCuj(cujType));
+                return false;
             }
-            return true;
+            return result.mResult;
+        } catch (IllegalArgumentException ex) {
+            Log.d(TAG, "Execute cancel task failed!", ex);
+            return false;
+        }
+    }
+
+    @UiThread
+    private boolean cancelInternal(@CujType int cujType, @Reasons int reason) {
+        // remove the timeout action first.
+        removeTimeout(cujType);
+        FrameTracker tracker = getTracker(cujType);
+        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);
+        }
+        return true;
+    }
+
+    private void putTracker(@CujType int cuj, @NonNull FrameTracker tracker) {
+        synchronized (mLock) {
+            mRunningTrackers.put(cuj, tracker);
         }
     }
 
     private FrameTracker getTracker(@CujType int cuj) {
-        return mRunningTrackers.get(cuj);
+        synchronized (mLock) {
+            return mRunningTrackers.get(cuj);
+        }
     }
 
     private void removeTracker(@CujType int cuj) {
-        mRunningTrackers.remove(cuj);
+        synchronized (mLock) {
+            mRunningTrackers.remove(cuj);
+        }
     }
 
+    @WorkerThread
     private void updateProperties(DeviceConfig.Properties properties) {
-        synchronized (mLock) {
-            mSamplingInterval = properties.getInt(SETTINGS_SAMPLING_INTERVAL_KEY,
-                    DEFAULT_SAMPLING_INTERVAL);
-            mEnabled = properties.getBoolean(SETTINGS_ENABLED_KEY, DEFAULT_ENABLED);
-            mTraceThresholdMissedFrames = properties.getInt(SETTINGS_THRESHOLD_MISSED_FRAMES_KEY,
-                    DEFAULT_TRACE_THRESHOLD_MISSED_FRAMES);
-            mTraceThresholdFrameTimeMillis = properties.getInt(
-                    SETTINGS_THRESHOLD_FRAME_TIME_MILLIS_KEY,
-                    DEFAULT_TRACE_THRESHOLD_FRAME_TIME_MILLIS);
-        }
+        mSamplingInterval = properties.getInt(SETTINGS_SAMPLING_INTERVAL_KEY,
+                DEFAULT_SAMPLING_INTERVAL);
+        mTraceThresholdMissedFrames = properties.getInt(SETTINGS_THRESHOLD_MISSED_FRAMES_KEY,
+                DEFAULT_TRACE_THRESHOLD_MISSED_FRAMES);
+        mTraceThresholdFrameTimeMillis = properties.getInt(
+                SETTINGS_THRESHOLD_FRAME_TIME_MILLIS_KEY,
+                DEFAULT_TRACE_THRESHOLD_FRAME_TIME_MILLIS);
+        // The memory visibility is powered by the volatile field, mEnabled.
+        mEnabled = properties.getBoolean(SETTINGS_ENABLED_KEY, DEFAULT_ENABLED);
     }
 
     @VisibleForTesting
@@ -663,11 +736,12 @@
      * @return the name of the cuj type
      */
     public static String getNameOfCuj(int cujType) {
+        // Please note:
+        // 1. The length of the returned string shouldn't exceed MAX_LENGTH_OF_CUJ_NAME.
+        // 2. The returned string should be the same with the name defined in atoms.proto.
         switch (cujType) {
             case CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE:
                 return "SHADE_EXPAND_COLLAPSE";
-            case CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE_LOCK:
-                return "SHADE_EXPAND_COLLAPSE_LOCK";
             case CUJ_NOTIFICATION_SHADE_SCROLL_FLING:
                 return "SHADE_SCROLL_FLING";
             case CUJ_NOTIFICATION_SHADE_ROW_EXPAND:
@@ -780,10 +854,24 @@
                 return "BIOMETRIC_PROMPT_TRANSITION";
             case CUJ_SETTINGS_TOGGLE:
                 return "SETTINGS_TOGGLE";
+            case CUJ_SHADE_DIALOG_OPEN:
+                return "SHADE_DIALOG_OPEN";
+            case CUJ_USER_DIALOG_OPEN:
+                return "USER_DIALOG_OPEN";
+            case CUJ_TASKBAR_EXPAND:
+                return "TASKBAR_EXPAND";
+            case CUJ_TASKBAR_COLLAPSE:
+                return "TASKBAR_COLLAPSE";
+            case CUJ_SHADE_CLEAR_ALL:
+                return "SHADE_CLEAR_ALL";
         }
         return "UNKNOWN";
     }
 
+    private static class TrackerResult {
+        private boolean mResult;
+    }
+
     /**
      * Configurations used while instrumenting the CUJ. <br/>
      * <b>It may refer to an attached view, don't use static reference for any purpose.</b>
@@ -797,6 +885,7 @@
         private final SurfaceControl mSurfaceControl;
         private final @CujType int mCujType;
         private final boolean mDeferMonitor;
+        private final Handler mHandler;
 
         /**
          * A builder for building Configuration. {@link #setView(View)} is essential
@@ -940,6 +1029,7 @@
             mSurfaceControl = surfaceControl;
             mDeferMonitor = deferMonitor;
             validate();
+            mHandler = mSurfaceOnly ? mContext.getMainThreadHandler() : mView.getHandler();
         }
 
         private void validate() {
@@ -988,20 +1078,25 @@
             return mSurfaceControl;
         }
 
-        View getView() {
+        @VisibleForTesting
+        /**
+         * @return a view which is attached to the view tree.
+         */
+        public View getView() {
             return mView;
         }
 
-        Context getContext() {
-            return mContext;
-        }
-
         /**
          * @return true if the monitoring should be deferred to the next frame, false otherwise.
          */
         public boolean shouldDeferMonitor() {
             return mDeferMonitor;
         }
+
+        @VisibleForTesting
+        public Handler getHandler() {
+            return mHandler;
+        }
     }
 
     /**
@@ -1018,9 +1113,27 @@
         public Session(@CujType int cujType, @NonNull String postfix) {
             mCujType = cujType;
             mTimeStamp = System.nanoTime();
-            mName = TextUtils.isEmpty(postfix)
-                    ? String.format("J<%s>", getNameOfCuj(mCujType))
-                    : String.format("J<%s::%s>", getNameOfCuj(mCujType), postfix);
+            mName = generateSessionName(getNameOfCuj(cujType), postfix);
+        }
+
+        private String generateSessionName(@NonNull String cujName, @NonNull String cujPostfix) {
+            final boolean hasPostfix = !TextUtils.isEmpty(cujPostfix);
+            // We assert that the cujName shouldn't exceed MAX_LENGTH_OF_CUJ_NAME.
+            if (cujName.length() > MAX_LENGTH_OF_CUJ_NAME) {
+                throw new IllegalArgumentException(TextUtils.formatSimple(
+                        "The length of cuj name <%s> exceeds %d", cujName, MAX_LENGTH_OF_CUJ_NAME));
+            }
+            if (hasPostfix) {
+                final int remaining = MAX_LENGTH_SESSION_NAME - cujName.length();
+                if (cujPostfix.length() > remaining) {
+                    cujPostfix = cujPostfix.substring(0, remaining - 3).concat("...");
+                }
+            }
+            // The max length of the whole string should be:
+            // 105 with postfix, 83 without postfix
+            return hasPostfix
+                    ? TextUtils.formatSimple("J<%s::%s>", cujName, cujPostfix)
+                    : TextUtils.formatSimple("J<%s>", cujName);
         }
 
         @CujType
@@ -1054,7 +1167,8 @@
             mReason = reason;
         }
 
-        public @Reasons int getReason() {
+        @Reasons
+        public int getReason() {
             return mReason;
         }
     }
diff --git a/core/java/com/android/internal/policy/DecorView.java b/core/java/com/android/internal/policy/DecorView.java
index ea5797d..a352063 100644
--- a/core/java/com/android/internal/policy/DecorView.java
+++ b/core/java/com/android/internal/policy/DecorView.java
@@ -42,6 +42,7 @@
 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
 import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
 import static android.view.WindowManager.LayoutParams.TYPE_DRAWN_APPLICATION;
+import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
 
 import static com.android.internal.policy.PhoneWindow.FEATURE_OPTIONS_PANEL;
 
@@ -309,6 +310,7 @@
                 R.integer.dock_enter_exit_duration);
         mForceWindowDrawsBarBackgrounds = context.getResources().getBoolean(
                 R.bool.config_forceWindowDrawsStatusBarBackground)
+                && params.type != TYPE_INPUT_METHOD
                 && context.getApplicationInfo().targetSdkVersion >= N;
         mSemiTransparentBarColor = context.getResources().getColor(
                 R.color.system_bar_background_semi_transparent, null /* theme */);
@@ -1164,8 +1166,8 @@
                     0 /* sideInset */, animate && !disallowAnimate,
                     mForceWindowDrawsBarBackgrounds, controller);
             boolean oldDrawLegacy = mDrawLegacyNavigationBarBackground;
-            mDrawLegacyNavigationBarBackground = mNavigationColorViewState.visible
-                    && (mWindow.getAttributes().flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) == 0;
+            mDrawLegacyNavigationBarBackground =
+                    (mWindow.getAttributes().flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) == 0;
             if (oldDrawLegacy != mDrawLegacyNavigationBarBackground) {
                 mDrawLegacyNavigationBarBackgroundHandled =
                         mWindow.onDrawLegacyNavigationBarBackgroundChanged(
@@ -1206,7 +1208,8 @@
         boolean hideNavigation = (sysUiVisibility & SYSTEM_UI_FLAG_HIDE_NAVIGATION) != 0
                 || !(controller == null || controller.isRequestedVisible(ITYPE_NAVIGATION_BAR));
         boolean decorFitsSystemWindows = mWindow.mDecorFitsSystemWindows;
-        boolean forceConsumingNavBar = (mForceWindowDrawsBarBackgrounds
+        boolean forceConsumingNavBar =
+                ((mForceWindowDrawsBarBackgrounds || mDrawLegacyNavigationBarBackgroundHandled)
                         && (attrs.flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) == 0
                         && (sysUiVisibility & SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) == 0
                         && decorFitsSystemWindows
@@ -1437,8 +1440,9 @@
             int size, boolean verticalBar, boolean seascape, int sideMargin, boolean animate,
             boolean force, WindowInsetsController controller) {
         state.present = state.attributes.isPresent(
-                        controller.isRequestedVisible(state.attributes.insetsType),
-                        mWindow.getAttributes().flags, force);
+                (controller.isRequestedVisible(state.attributes.insetsType)
+                        || mLastShouldAlwaysConsumeSystemBars),
+                mWindow.getAttributes().flags, force);
         boolean show = state.attributes.isVisible(state.present, color,
                 mWindow.getAttributes().flags, force);
         boolean showView = show && !isResizing() && !mHasCaption && size > 0;
diff --git a/core/java/com/android/internal/policy/PhoneWindow.java b/core/java/com/android/internal/policy/PhoneWindow.java
index 9c0fad9..fb38bba 100644
--- a/core/java/com/android/internal/policy/PhoneWindow.java
+++ b/core/java/com/android/internal/policy/PhoneWindow.java
@@ -915,6 +915,12 @@
             }
         }
 
+        if (!st.hasPanelItems()) {
+            // Ensure that |st.decorView| has its actual content. Otherwise, an empty window can be
+            // created and cause ANR.
+            return;
+        }
+
         st.isHandled = false;
 
         WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
diff --git a/core/java/com/android/internal/policy/TransitionAnimation.java b/core/java/com/android/internal/policy/TransitionAnimation.java
index 377dfd0..295dc54 100644
--- a/core/java/com/android/internal/policy/TransitionAnimation.java
+++ b/core/java/com/android/internal/policy/TransitionAnimation.java
@@ -25,6 +25,7 @@
 import static android.view.WindowManager.TRANSIT_OLD_NONE;
 import static android.view.WindowManager.TRANSIT_OLD_TRANSLUCENT_ACTIVITY_CLOSE;
 import static android.view.WindowManager.TRANSIT_OLD_TRANSLUCENT_ACTIVITY_OPEN;
+import static android.view.WindowManager.TRANSIT_OLD_UNSET;
 import static android.view.WindowManager.TRANSIT_OLD_WALLPAPER_INTRA_CLOSE;
 import static android.view.WindowManager.TRANSIT_OLD_WALLPAPER_INTRA_OPEN;
 import static android.view.WindowManager.TRANSIT_OPEN;
@@ -258,11 +259,17 @@
         }
         return null;
     }
-
-    /** Load animation by attribute Id from a specific AnimationStyle resource. */
+    /**
+     * Load animation by attribute Id from a specific AnimationStyle resource.
+     *
+     * @param translucent {@code true} if we're sure that the animation is applied on a translucent
+     *                    window container, {@code false} otherwise.
+     * @param transit {@link TransitionOldType} for the app transition of this animation, or
+     *                {@link TransitionOldType#TRANSIT_OLD_UNSET} if app transition type is unknown.
+     */
     @Nullable
-    public Animation loadAnimationAttr(String packageName, int animStyleResId, int animAttr,
-            boolean translucent) {
+    private Animation loadAnimationAttr(String packageName, int animStyleResId, int animAttr,
+            boolean translucent, @TransitionOldType int transit) {
         if (animStyleResId == 0) {
             return null;
         }
@@ -278,6 +285,8 @@
         }
         if (translucent) {
             resId = updateToTranslucentAnimIfNeeded(resId);
+        } else if (transit != TRANSIT_OLD_UNSET) {
+            resId = updateToTranslucentAnimIfNeeded(resId, transit);
         }
         if (ResourceId.isValid(resId)) {
             return loadAnimationSafely(context, resId, mTag);
@@ -285,6 +294,15 @@
         return null;
     }
 
+
+    /** Load animation by attribute Id from a specific AnimationStyle resource. */
+    @Nullable
+    public Animation loadAnimationAttr(String packageName, int animStyleResId, int animAttr,
+            boolean translucent) {
+        return loadAnimationAttr(packageName, animStyleResId, animAttr, translucent,
+                TRANSIT_OLD_UNSET);
+    }
+
     /** Load animation by attribute Id from android package. */
     @Nullable
     public Animation loadDefaultAnimationAttr(int animAttr, boolean translucent) {
@@ -292,6 +310,13 @@
                 translucent);
     }
 
+    /** Load animation by attribute Id from android package. */
+    @Nullable
+    public Animation loadDefaultAnimationAttr(int animAttr, @TransitionOldType int transit) {
+        return loadAnimationAttr(DEFAULT_PACKAGE, mDefaultWindowAnimationStyleResId, animAttr,
+                false /* translucent */, transit);
+    }
+
     @Nullable
     private AttributeCache.Entry getCachedAnimations(LayoutParams lp) {
         if (mDebug) {
diff --git a/core/java/com/android/internal/statusbar/IStatusBar.aidl b/core/java/com/android/internal/statusbar/IStatusBar.aidl
index e93a785..65bec0e 100644
--- a/core/java/com/android/internal/statusbar/IStatusBar.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBar.aidl
@@ -33,6 +33,7 @@
 
 import com.android.internal.statusbar.IAddTileResultCallback;
 import com.android.internal.statusbar.IUndoMediaTransferCallback;
+import com.android.internal.statusbar.LetterboxDetails;
 import com.android.internal.statusbar.StatusBarIcon;
 import com.android.internal.view.AppearanceRegion;
 
@@ -202,10 +203,12 @@
      * @param behavior the behavior of the focused window.
      * @param requestedVisibilities the collection of the requested visibilities of system insets.
      * @param packageName the package name of the focused app.
+     * @param letterboxDetails a set of letterbox details of apps visible on the screen.
      */
     void onSystemBarAttributesChanged(int displayId, int appearance,
             in AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
-            int behavior, in InsetsVisibilities requestedVisibilities, String packageName);
+            int behavior, in InsetsVisibilities requestedVisibilities, String packageName,
+            in LetterboxDetails[] letterboxDetails);
 
     /**
      * Notifies System UI to show transient bars. The transient bars are system bars, e.g., status
diff --git a/core/java/com/android/internal/statusbar/LetterboxDetails.aidl b/core/java/com/android/internal/statusbar/LetterboxDetails.aidl
new file mode 100644
index 0000000..7875796
--- /dev/null
+++ b/core/java/com/android/internal/statusbar/LetterboxDetails.aidl
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.statusbar;
+
+parcelable LetterboxDetails;
diff --git a/core/java/com/android/internal/statusbar/LetterboxDetails.java b/core/java/com/android/internal/statusbar/LetterboxDetails.java
new file mode 100644
index 0000000..5d14ee3
--- /dev/null
+++ b/core/java/com/android/internal/statusbar/LetterboxDetails.java
@@ -0,0 +1,243 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.statusbar;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.graphics.Rect;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.view.InsetsFlags;
+import android.view.ViewDebug;
+import android.view.WindowInsetsController.Appearance;
+
+import com.android.internal.util.DataClass;
+
+/**
+ * Details about the letterbox state of an app.
+ */
+@DataClass(
+        genParcelable = true,
+        genAidl = true,
+        genToString = true,
+        genGetters = false,
+        genEqualsHashCode = true
+)
+public class LetterboxDetails implements Parcelable {
+
+    @NonNull
+    private final Rect mLetterboxInnerBounds;
+    @NonNull
+    private final Rect mLetterboxFullBounds;
+    private final int mAppAppearance;
+
+    /**
+     * Returns the bounds of the inner letterbox (app content).
+     *
+     * <p>When an app is letterboxed, it is not using the full bounds of its window. Here we return
+     * the bounds that are being used for the app content.
+     *
+     * <pre>
+     * +-------+---------+-------+
+     * |       |         |       |
+     * |       |         |       |
+     * | Outer |  Inner  | Outer |
+     * |       |         |       |
+     * |       |         |       |
+     * +-------+-------- +-------+
+     * <pre>
+     */
+    @NonNull
+    public Rect getLetterboxInnerBounds() {
+        return mLetterboxInnerBounds;
+    }
+
+    /**
+     * Returns the full bounds of the letterbox.
+     *
+     * <p>These are the entire bounds of the window where the app is placed. We cannot assume that
+     * the full bounds are the bounds of the screen, as the app can be in split-screen, or can have
+     * some margin due to display cutouts.
+     *
+     * <pre>
+     * ---- Full bounds width ----
+     * +-------+---------+-------+ |
+     * |       |         |       | |
+     * |       |         |       | |
+     * | Outer |  Inner  | Outer | + Full bounds height
+     * |       |         |       | |
+     * |       |         |       | |
+     * +-------+-------- +-------+ |
+     * </pre>
+     */
+    @NonNull
+    public Rect getLetterboxFullBounds() {
+        return mLetterboxFullBounds;
+    }
+
+    /**
+     * Returns the {@link Appearance} of the inner letterbox (app content).
+     */
+    @Appearance
+    public int getAppAppearance() {
+        return mAppAppearance;
+    }
+
+    /** Returns a string representation of the {@link #getAppAppearance()} property. */
+    public String appAppearanceToString() {
+        return ViewDebug.flagsToString(InsetsFlags.class, "appearance", mAppAppearance);
+    }
+
+
+
+    // Code below generated by codegen v1.0.23.
+    //
+    // DO NOT MODIFY!
+    // CHECKSTYLE:OFF Generated code
+    //
+    // To regenerate run:
+    // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/com/android/internal/statusbar/LetterboxDetails.java
+    //
+    // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
+    //   Settings > Editor > Code Style > Formatter Control
+    //@formatter:off
+
+
+    @DataClass.Generated.Member
+    public LetterboxDetails(
+            @NonNull Rect letterboxInnerBounds,
+            @NonNull Rect letterboxFullBounds,
+            int appAppearance) {
+        this.mLetterboxInnerBounds = letterboxInnerBounds;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, mLetterboxInnerBounds);
+        this.mLetterboxFullBounds = letterboxFullBounds;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, mLetterboxFullBounds);
+        this.mAppAppearance = appAppearance;
+
+        // onConstructed(); // You can define this method to get a callback
+    }
+
+    @Override
+    @DataClass.Generated.Member
+    public String toString() {
+        // You can override field toString logic by defining methods like:
+        // String fieldNameToString() { ... }
+
+        return "LetterboxDetails { " +
+                "letterboxInnerBounds = " + mLetterboxInnerBounds + ", " +
+                "letterboxFullBounds = " + mLetterboxFullBounds + ", " +
+                "appAppearance = " + appAppearanceToString() +
+        " }";
+    }
+
+    @Override
+    @DataClass.Generated.Member
+    public boolean equals(@Nullable Object o) {
+        // You can override field equality logic by defining either of the methods like:
+        // boolean fieldNameEquals(LetterboxDetails other) { ... }
+        // boolean fieldNameEquals(FieldType otherValue) { ... }
+
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        @SuppressWarnings("unchecked")
+        LetterboxDetails that = (LetterboxDetails) o;
+        //noinspection PointlessBooleanExpression
+        return true
+                && java.util.Objects.equals(mLetterboxInnerBounds, that.mLetterboxInnerBounds)
+                && java.util.Objects.equals(mLetterboxFullBounds, that.mLetterboxFullBounds)
+                && mAppAppearance == that.mAppAppearance;
+    }
+
+    @Override
+    @DataClass.Generated.Member
+    public int hashCode() {
+        // You can override field hashCode logic by defining methods like:
+        // int fieldNameHashCode() { ... }
+
+        int _hash = 1;
+        _hash = 31 * _hash + java.util.Objects.hashCode(mLetterboxInnerBounds);
+        _hash = 31 * _hash + java.util.Objects.hashCode(mLetterboxFullBounds);
+        _hash = 31 * _hash + mAppAppearance;
+        return _hash;
+    }
+
+    @Override
+    @DataClass.Generated.Member
+    public void writeToParcel(@NonNull Parcel dest, int flags) {
+        // You can override field parcelling by defining methods like:
+        // void parcelFieldName(Parcel dest, int flags) { ... }
+
+        dest.writeTypedObject(mLetterboxInnerBounds, flags);
+        dest.writeTypedObject(mLetterboxFullBounds, flags);
+        dest.writeInt(mAppAppearance);
+    }
+
+    @Override
+    @DataClass.Generated.Member
+    public int describeContents() { return 0; }
+
+    /** @hide */
+    @SuppressWarnings({"unchecked", "RedundantCast"})
+    @DataClass.Generated.Member
+    protected LetterboxDetails(@NonNull Parcel in) {
+        // You can override field unparcelling by defining methods like:
+        // static FieldType unparcelFieldName(Parcel in) { ... }
+
+        Rect letterboxInnerBounds = (Rect) in.readTypedObject(Rect.CREATOR);
+        Rect letterboxFullBounds = (Rect) in.readTypedObject(Rect.CREATOR);
+        int appAppearance = in.readInt();
+
+        this.mLetterboxInnerBounds = letterboxInnerBounds;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, mLetterboxInnerBounds);
+        this.mLetterboxFullBounds = letterboxFullBounds;
+        com.android.internal.util.AnnotationValidations.validate(
+                NonNull.class, null, mLetterboxFullBounds);
+        this.mAppAppearance = appAppearance;
+
+        // onConstructed(); // You can define this method to get a callback
+    }
+
+    @DataClass.Generated.Member
+    public static final @NonNull Parcelable.Creator<LetterboxDetails> CREATOR
+            = new Parcelable.Creator<LetterboxDetails>() {
+        @Override
+        public LetterboxDetails[] newArray(int size) {
+            return new LetterboxDetails[size];
+        }
+
+        @Override
+        public LetterboxDetails createFromParcel(@NonNull Parcel in) {
+            return new LetterboxDetails(in);
+        }
+    };
+
+    @DataClass.Generated(
+            time = 1656941109526L,
+            codegenVersion = "1.0.23",
+            sourceFile = "frameworks/base/core/java/com/android/internal/statusbar/LetterboxDetails.java",
+            inputSignatures = "private final @android.annotation.NonNull android.graphics.Rect mLetterboxInnerBounds\nprivate final @android.annotation.NonNull android.graphics.Rect mLetterboxFullBounds\nprivate final  int mAppAppearance\npublic @android.annotation.NonNull android.graphics.Rect getLetterboxInnerBounds()\npublic @android.annotation.NonNull android.graphics.Rect getLetterboxFullBounds()\npublic @android.view.WindowInsetsController.Appearance int getAppAppearance()\npublic  java.lang.String appAppearanceToString()\nclass LetterboxDetails extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genParcelable=true, genAidl=true, genToString=true, genGetters=false, genEqualsHashCode=true)")
+    @Deprecated
+    private void __metadata() {}
+
+
+    //@formatter:on
+    // End of generated code
+
+}
diff --git a/core/java/com/android/internal/statusbar/RegisterStatusBarResult.java b/core/java/com/android/internal/statusbar/RegisterStatusBarResult.java
index 4dcc82e..8b898f0 100644
--- a/core/java/com/android/internal/statusbar/RegisterStatusBarResult.java
+++ b/core/java/com/android/internal/statusbar/RegisterStatusBarResult.java
@@ -43,12 +43,14 @@
     public final InsetsVisibilities mRequestedVisibilities;
     public final String mPackageName;
     public final int[] mTransientBarTypes;
+    public final LetterboxDetails[] mLetterboxDetails;
 
     public RegisterStatusBarResult(ArrayMap<String, StatusBarIcon> icons, int disabledFlags1,
             int appearance, AppearanceRegion[] appearanceRegions, int imeWindowVis,
             int imeBackDisposition, boolean showImeSwitcher, int disabledFlags2, IBinder imeToken,
             boolean navbarColorManagedByIme, int behavior, InsetsVisibilities requestedVisibilities,
-            String packageName, @NonNull int[] transientBarTypes) {
+            String packageName, @NonNull int[] transientBarTypes,
+            LetterboxDetails[] letterboxDetails) {
         mIcons = new ArrayMap<>(icons);
         mDisabledFlags1 = disabledFlags1;
         mAppearance = appearance;
@@ -63,6 +65,7 @@
         mRequestedVisibilities = requestedVisibilities;
         mPackageName = packageName;
         mTransientBarTypes = transientBarTypes;
+        mLetterboxDetails = letterboxDetails;
     }
 
     @Override
@@ -86,6 +89,7 @@
         dest.writeTypedObject(mRequestedVisibilities, 0);
         dest.writeString(mPackageName);
         dest.writeIntArray(mTransientBarTypes);
+        dest.writeParcelableArray(mLetterboxDetails, flags);
     }
 
     /**
@@ -112,10 +116,13 @@
                             source.readTypedObject(InsetsVisibilities.CREATOR);
                     final String packageName = source.readString();
                     final int[] transientBarTypes = source.createIntArray();
+                    final LetterboxDetails[] letterboxDetails =
+                            source.readParcelableArray(null, LetterboxDetails.class);
                     return new RegisterStatusBarResult(icons, disabledFlags1, appearance,
                             appearanceRegions, imeWindowVis, imeBackDisposition, showImeSwitcher,
                             disabledFlags2, imeToken, navbarColorManagedByIme, behavior,
-                            requestedVisibilities, packageName, transientBarTypes);
+                            requestedVisibilities, packageName, transientBarTypes,
+                            letterboxDetails);
                 }
 
                 @Override
diff --git a/core/java/com/android/internal/util/LatencyTracker.java b/core/java/com/android/internal/util/LatencyTracker.java
index ca40a40..14a6d5e 100644
--- a/core/java/com/android/internal/util/LatencyTracker.java
+++ b/core/java/com/android/internal/util/LatencyTracker.java
@@ -142,6 +142,11 @@
      */
     public static final int ACTION_LOAD_SHARE_SHEET = 16;
 
+    /**
+     * Time it takes to show AOD display after folding the device.
+     */
+    public static final int ACTION_FOLD_TO_AOD = 17;
+
     private static final int[] ACTIONS_ALL = {
         ACTION_EXPAND_PANEL,
         ACTION_TOGGLE_RECENTS,
@@ -160,6 +165,7 @@
         ACTION_UDFPS_ILLUMINATE,
         ACTION_SHOW_BACK_ARROW,
         ACTION_LOAD_SHARE_SHEET,
+        ACTION_FOLD_TO_AOD,
     };
 
     /** @hide */
@@ -181,6 +187,7 @@
         ACTION_UDFPS_ILLUMINATE,
         ACTION_SHOW_BACK_ARROW,
         ACTION_LOAD_SHARE_SHEET,
+        ACTION_FOLD_TO_AOD
     })
     @Retention(RetentionPolicy.SOURCE)
     public @interface Action {
@@ -204,6 +211,7 @@
             FrameworkStatsLog.UIACTION_LATENCY_REPORTED__ACTION__ACTION_UDFPS_ILLUMINATE,
             FrameworkStatsLog.UIACTION_LATENCY_REPORTED__ACTION__ACTION_SHOW_BACK_ARROW,
             FrameworkStatsLog.UIACTION_LATENCY_REPORTED__ACTION__ACTION_LOAD_SHARE_SHEET,
+            FrameworkStatsLog.UIACTION_LATENCY_REPORTED__ACTION__ACTION_FOLD_TO_AOD
     };
 
     private static LatencyTracker sLatencyTracker;
@@ -297,6 +305,8 @@
                 return "ACTION_SHOW_BACK_ARROW";
             case 17:
                 return "ACTION_LOAD_SHARE_SHEET";
+            case 19:
+                return "ACTION_FOLD_TO_AOD";
             default:
                 throw new IllegalArgumentException("Invalid action");
         }
diff --git a/core/java/com/android/internal/util/OWNERS b/core/java/com/android/internal/util/OWNERS
index 354dd9a..1808bd5 100644
--- a/core/java/com/android/internal/util/OWNERS
+++ b/core/java/com/android/internal/util/OWNERS
@@ -5,3 +5,4 @@
 per-file Protocol* = etancohen@google.com, lorenzo@google.com
 per-file State* = jchalard@google.com, lorenzo@google.com, satk@google.com
 per-file *Dump* = file:/core/java/com/android/internal/util/dump/OWNERS
+per-file *Screenshot* = file:/packages/SystemUI/src/com/android/systemui/screenshot/OWNERS
diff --git a/core/java/com/android/internal/util/ScreenshotHelper.java b/core/java/com/android/internal/util/ScreenshotHelper.java
index f4f438b..8af2450 100644
--- a/core/java/com/android/internal/util/ScreenshotHelper.java
+++ b/core/java/com/android/internal/util/ScreenshotHelper.java
@@ -1,7 +1,6 @@
 package com.android.internal.util;
 
 import static android.content.Intent.ACTION_USER_SWITCHED;
-import static android.view.WindowManager.ScreenshotSource.SCREENSHOT_OTHER;
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
@@ -29,6 +28,10 @@
 import android.os.UserHandle;
 import android.util.Log;
 import android.view.WindowManager;
+import android.view.WindowManager.ScreenshotSource;
+import android.view.WindowManager.ScreenshotType;
+
+import com.android.internal.annotations.VisibleForTesting;
 
 import java.util.Objects;
 import java.util.function.Consumer;
@@ -42,24 +45,28 @@
      * Describes a screenshot request (to make it easier to pass data through to the handler).
      */
     public static class ScreenshotRequest implements Parcelable {
-        private int mSource;
-        private boolean mHasStatusBar;
-        private boolean mHasNavBar;
-        private Bundle mBitmapBundle;
-        private Rect mBoundsInScreen;
-        private Insets mInsets;
-        private int mTaskId;
-        private int mUserId;
-        private ComponentName mTopComponent;
+        private final int mSource;
+        private final Bundle mBitmapBundle;
+        private final Rect mBoundsInScreen;
+        private final Insets mInsets;
+        private final int mTaskId;
+        private final int mUserId;
+        private final ComponentName mTopComponent;
 
-        ScreenshotRequest(int source, boolean hasStatus, boolean hasNav) {
+        @VisibleForTesting
+        public ScreenshotRequest(int source) {
             mSource = source;
-            mHasStatusBar = hasStatus;
-            mHasNavBar = hasNav;
+            mBitmapBundle = null;
+            mBoundsInScreen = null;
+            mInsets = null;
+            mTaskId = -1;
+            mUserId = -1;
+            mTopComponent = null;
         }
 
-        ScreenshotRequest(int source, Bundle bitmapBundle, Rect boundsInScreen, Insets insets,
-                int taskId, int userId, ComponentName topComponent) {
+        @VisibleForTesting
+        public ScreenshotRequest(int source, Bundle bitmapBundle, Rect boundsInScreen,
+                Insets insets, int taskId, int userId, ComponentName topComponent) {
             mSource = source;
             mBitmapBundle = bitmapBundle;
             mBoundsInScreen = boundsInScreen;
@@ -71,16 +78,21 @@
 
         ScreenshotRequest(Parcel in) {
             mSource = in.readInt();
-            mHasStatusBar = in.readBoolean();
-            mHasNavBar = in.readBoolean();
-
             if (in.readInt() == 1) {
                 mBitmapBundle = in.readBundle(getClass().getClassLoader());
-                mBoundsInScreen = in.readParcelable(Rect.class.getClassLoader(), android.graphics.Rect.class);
-                mInsets = in.readParcelable(Insets.class.getClassLoader(), android.graphics.Insets.class);
+                mBoundsInScreen = in.readParcelable(Rect.class.getClassLoader(), Rect.class);
+                mInsets = in.readParcelable(Insets.class.getClassLoader(), Insets.class);
                 mTaskId = in.readInt();
                 mUserId = in.readInt();
-                mTopComponent = in.readParcelable(ComponentName.class.getClassLoader(), android.content.ComponentName.class);
+                mTopComponent = in.readParcelable(ComponentName.class.getClassLoader(),
+                        ComponentName.class);
+            } else {
+                mBitmapBundle = null;
+                mBoundsInScreen = null;
+                mInsets = null;
+                mTaskId = -1;
+                mUserId = -1;
+                mTopComponent = null;
             }
         }
 
@@ -88,14 +100,6 @@
             return mSource;
         }
 
-        public boolean getHasStatusBar() {
-            return mHasStatusBar;
-        }
-
-        public boolean getHasNavBar() {
-            return mHasNavBar;
-        }
-
         public Bundle getBitmapBundle() {
             return mBitmapBundle;
         }
@@ -112,7 +116,6 @@
             return mTaskId;
         }
 
-
         public int getUserId() {
             return mUserId;
         }
@@ -129,8 +132,6 @@
         @Override
         public void writeToParcel(Parcel dest, int flags) {
             dest.writeInt(mSource);
-            dest.writeBoolean(mHasStatusBar);
-            dest.writeBoolean(mHasNavBar);
             if (mBitmapBundle == null) {
                 dest.writeInt(0);
             } else {
@@ -144,7 +145,8 @@
             }
         }
 
-        public static final @NonNull Parcelable.Creator<ScreenshotRequest> CREATOR =
+        @NonNull
+        public static final Parcelable.Creator<ScreenshotRequest> CREATOR =
                 new Parcelable.Creator<ScreenshotRequest>() {
 
                     @Override
@@ -254,113 +256,71 @@
 
     /**
      * Request a screenshot be taken.
-     *
+     * <p>
      * Added to support reducing unit test duration; the method variant without a timeout argument
      * is recommended for general use.
      *
-     * @param screenshotType     The type of screenshot, for example either
-     *                           {@link android.view.WindowManager#TAKE_SCREENSHOT_FULLSCREEN}
-     *                           or
-     *                           {@link android.view.WindowManager#TAKE_SCREENSHOT_SELECTED_REGION}
-     * @param hasStatus          {@code true} if the status bar is currently showing. {@code false}
-     *                           if not.
-     * @param hasNav             {@code true} if the navigation bar is currently showing. {@code
-     *                           false} if not.
-     * @param source             The source of the screenshot request. One of
-     *                           {SCREENSHOT_GLOBAL_ACTIONS, SCREENSHOT_KEY_CHORD,
-     *                           SCREENSHOT_OVERVIEW, SCREENSHOT_OTHER}
-     * @param handler            A handler used in case the screenshot times out
-     * @param completionConsumer Consumes `false` if a screenshot was not taken, and `true` if the
-     *                           screenshot was taken.
+     * @param screenshotType The type of screenshot, defined by {@link ScreenshotType}
+     * @param source The source of the screenshot request, defined by {@link ScreenshotSource}
+     * @param handler used to process messages received from the screenshot service
+     * @param completionConsumer receives the URI of the captured screenshot, once saved or
+     *         null if no screenshot was saved
      */
-    public void takeScreenshot(final int screenshotType, final boolean hasStatus,
-            final boolean hasNav, int source, @NonNull Handler handler,
-            @Nullable Consumer<Uri> completionConsumer) {
-        ScreenshotRequest screenshotRequest = new ScreenshotRequest(source, hasStatus, hasNav);
-        takeScreenshot(screenshotType, SCREENSHOT_TIMEOUT_MS, handler, screenshotRequest,
+    public void takeScreenshot(@ScreenshotType int screenshotType, @ScreenshotSource int source,
+            @NonNull Handler handler, @Nullable Consumer<Uri> completionConsumer) {
+        ScreenshotRequest screenshotRequest = new ScreenshotRequest(source);
+        takeScreenshot(screenshotType, handler, screenshotRequest, SCREENSHOT_TIMEOUT_MS,
                 completionConsumer);
     }
 
     /**
-     * Request a screenshot be taken, with provided reason.
-     *
-     * @param screenshotType     The type of screenshot, for example either
-     *                           {@link android.view.WindowManager#TAKE_SCREENSHOT_FULLSCREEN}
-     *                           or
-     *                           {@link android.view.WindowManager#TAKE_SCREENSHOT_SELECTED_REGION}
-     * @param hasStatus          {@code true} if the status bar is currently showing. {@code false}
-     *                           if
-     *                           not.
-     * @param hasNav             {@code true} if the navigation bar is currently showing. {@code
-     *                           false}
-     *                           if not.
-     * @param handler            A handler used in case the screenshot times out
-     * @param completionConsumer Consumes `false` if a screenshot was not taken, and `true` if the
-     *                           screenshot was taken.
-     */
-    public void takeScreenshot(final int screenshotType, final boolean hasStatus,
-            final boolean hasNav, @NonNull Handler handler,
-            @Nullable Consumer<Uri> completionConsumer) {
-        takeScreenshot(screenshotType, hasStatus, hasNav, SCREENSHOT_TIMEOUT_MS, handler,
-                completionConsumer);
-    }
-
-    /**
-     * Request a screenshot be taken with a specific timeout.
-     *
+     * Request a screenshot be taken.
+     * <p>
      * Added to support reducing unit test duration; the method variant without a timeout argument
      * is recommended for general use.
      *
-     * @param screenshotType     The type of screenshot, for example either
-     *                           {@link android.view.WindowManager#TAKE_SCREENSHOT_FULLSCREEN}
-     *                           or
-     *                           {@link android.view.WindowManager#TAKE_SCREENSHOT_SELECTED_REGION}
-     * @param hasStatus          {@code true} if the status bar is currently showing. {@code false}
-     *                           if
-     *                           not.
-     * @param hasNav             {@code true} if the navigation bar is currently showing. {@code
-     *                           false}
-     *                           if not.
-     * @param timeoutMs          If the screenshot hasn't been completed within this time period,
-     *                           the screenshot attempt will be cancelled and `completionConsumer`
-     *                           will be run.
-     * @param handler            A handler used in case the screenshot times out
-     * @param completionConsumer Consumes `false` if a screenshot was not taken, and `true` if the
-     *                           screenshot was taken.
+     * @param screenshotType The type of screenshot, defined by {@link ScreenshotType}
+     * @param source The source of the screenshot request, defined by {@link ScreenshotSource}
+     * @param handler used to process messages received from the screenshot service
+     * @param timeoutMs time limit for processing, intended only for testing
+     * @param completionConsumer receives the URI of the captured screenshot, once saved or
+     *         null if no screenshot was saved
      */
-    public void takeScreenshot(final int screenshotType, final boolean hasStatus,
-            final boolean hasNav, long timeoutMs, @NonNull Handler handler,
-            @Nullable Consumer<Uri> completionConsumer) {
-        ScreenshotRequest screenshotRequest = new ScreenshotRequest(SCREENSHOT_OTHER, hasStatus,
-                hasNav);
-        takeScreenshot(screenshotType, timeoutMs, handler, screenshotRequest, completionConsumer);
+    @VisibleForTesting
+    public void takeScreenshot(@ScreenshotType int screenshotType, @ScreenshotSource int source,
+            @NonNull Handler handler, long timeoutMs, @Nullable Consumer<Uri> completionConsumer) {
+        ScreenshotRequest screenshotRequest = new ScreenshotRequest(source);
+        takeScreenshot(screenshotType, handler, screenshotRequest, timeoutMs, completionConsumer);
     }
 
     /**
      * Request that provided image be handled as if it was a screenshot.
      *
-     * @param screenshotBundle   Bundle containing the buffer and color space of the screenshot.
-     * @param boundsInScreen     The bounds in screen coordinates that the bitmap orginated from.
-     * @param insets             The insets that the image was shown with, inside the screenbounds.
-     * @param taskId             The taskId of the task that the screen shot was taken of.
-     * @param userId             The userId of user running the task provided in taskId.
-     * @param topComponent       The component name of the top component running in the task.
-     * @param handler            A handler used in case the screenshot times out
-     * @param completionConsumer Consumes `false` if a screenshot was not taken, and `true` if the
-     *                           screenshot was taken.
+     * @param screenshotBundle Bundle containing the buffer and color space of the screenshot.
+     * @param boundsInScreen The bounds in screen coordinates that the bitmap originated from.
+     * @param insets The insets that the image was shown with, inside the screen bounds.
+     * @param taskId The taskId of the task that the screen shot was taken of.
+     * @param userId The userId of user running the task provided in taskId.
+     * @param topComponent The component name of the top component running in the task.
+     * @param source The source of the screenshot request, defined by {@link ScreenshotSource}
+     * @param handler A handler used in case the screenshot times out
+     * @param completionConsumer receives the URI of the captured screenshot, once saved or
+     *         null if no screenshot was saved
      */
     public void provideScreenshot(@NonNull Bundle screenshotBundle, @NonNull Rect boundsInScreen,
-            @NonNull Insets insets, int taskId, int userId, ComponentName topComponent, int source,
-            @NonNull Handler handler, @Nullable Consumer<Uri> completionConsumer) {
-        ScreenshotRequest screenshotRequest =
-                new ScreenshotRequest(source, screenshotBundle, boundsInScreen, insets, taskId,
-                        userId, topComponent);
-        takeScreenshot(WindowManager.TAKE_SCREENSHOT_PROVIDED_IMAGE, SCREENSHOT_TIMEOUT_MS,
-                handler, screenshotRequest, completionConsumer);
+            @NonNull Insets insets, int taskId, int userId, ComponentName topComponent,
+            @ScreenshotSource int source, @NonNull Handler handler,
+            @Nullable Consumer<Uri> completionConsumer) {
+        ScreenshotRequest screenshotRequest = new ScreenshotRequest(source, screenshotBundle,
+                boundsInScreen, insets, taskId, userId, topComponent);
+        takeScreenshot(WindowManager.TAKE_SCREENSHOT_PROVIDED_IMAGE, handler, screenshotRequest,
+                SCREENSHOT_TIMEOUT_MS,
+                completionConsumer);
     }
 
-    private void takeScreenshot(final int screenshotType, long timeoutMs, @NonNull Handler handler,
-            ScreenshotRequest screenshotRequest, @Nullable Consumer<Uri> completionConsumer) {
+    private void takeScreenshot(@ScreenshotType int screenshotType, @NonNull Handler handler,
+            ScreenshotRequest screenshotRequest, long timeoutMs,
+            @Nullable Consumer<Uri> completionConsumer) {
         synchronized (mScreenshotLock) {
 
             final Runnable mScreenshotTimeout = () -> {
diff --git a/core/java/com/android/internal/widget/PointerLocationView.java b/core/java/com/android/internal/widget/PointerLocationView.java
index 09ff4e0..9ee9b82 100644
--- a/core/java/com/android/internal/widget/PointerLocationView.java
+++ b/core/java/com/android/internal/widget/PointerLocationView.java
@@ -828,6 +828,8 @@
                     mSystemGestureExclusionListener, mContext.getDisplayId());
         } catch (RemoteException e) {
             throw e.rethrowFromSystemServer();
+        } catch (IllegalArgumentException e) {
+            Log.e(TAG, "Failed to unregister window manager callbacks", e);
         }
     }
 
diff --git a/core/java/com/android/internal/widget/ResolverDrawerLayout.java b/core/java/com/android/internal/widget/ResolverDrawerLayout.java
index 1cdc108..af9c5a5 100644
--- a/core/java/com/android/internal/widget/ResolverDrawerLayout.java
+++ b/core/java/com/android/internal/widget/ResolverDrawerLayout.java
@@ -53,7 +53,7 @@
     /**
      * Max width of the whole drawer layout
      */
-    private int mMaxWidth;
+    private final int mMaxWidth;
 
     /**
      * Max total visible height of views not marked always-show when in the closed/initial state
@@ -187,8 +187,10 @@
     }
 
     public void setSmallCollapsed(boolean smallCollapsed) {
-        mSmallCollapsed = smallCollapsed;
-        requestLayout();
+        if (mSmallCollapsed != smallCollapsed) {
+            mSmallCollapsed = smallCollapsed;
+            requestLayout();
+        }
     }
 
     public boolean isSmallCollapsed() {
@@ -200,9 +202,10 @@
     }
 
     public void setShowAtTop(boolean showOnTop) {
-        mShowAtTop = showOnTop;
-        invalidate();
-        requestLayout();
+        if (mShowAtTop != showOnTop) {
+            mShowAtTop = showOnTop;
+            requestLayout();
+        }
     }
 
     public boolean getShowAtTop() {
@@ -220,6 +223,9 @@
     public void setCollapsibleHeightReserved(int heightPixels) {
         final int oldReserved = mCollapsibleHeightReserved;
         mCollapsibleHeightReserved = heightPixels;
+        if (oldReserved != mCollapsibleHeightReserved) {
+            requestLayout();
+        }
 
         final int dReserved = mCollapsibleHeightReserved - oldReserved;
         if (dReserved != 0 && mIsDragging) {
@@ -255,7 +261,7 @@
 
         if (getShowAtTop()) {
             // Keep the drawer fully open.
-            mCollapseOffset = 0;
+            setCollapseOffset(0);
             return false;
         }
 
@@ -264,9 +270,9 @@
             if (remainClosed && (oldCollapsibleHeight < mCollapsibleHeight
                     && mCollapseOffset == oldCollapsibleHeight)) {
                 // Stay closed even at the new height.
-                mCollapseOffset = mCollapsibleHeight;
+                setCollapseOffset(mCollapsibleHeight);
             } else {
-                mCollapseOffset = Math.min(mCollapseOffset, mCollapsibleHeight);
+                setCollapseOffset(Math.min(mCollapseOffset, mCollapsibleHeight));
             }
             final boolean isCollapsedNew = mCollapseOffset != 0;
             if (isCollapsedOld != isCollapsedNew) {
@@ -274,11 +280,18 @@
             }
         } else {
             // Start out collapsed at first unless we restored state for otherwise
-            mCollapseOffset = mOpenOnLayout ? 0 : mCollapsibleHeight;
+            setCollapseOffset(mOpenOnLayout ? 0 : mCollapsibleHeight);
         }
         return true;
     }
 
+    private void setCollapseOffset(float collapseOffset) {
+        if (mCollapseOffset != collapseOffset) {
+            mCollapseOffset = collapseOffset;
+            requestLayout();
+        }
+    }
+
     private int getMaxCollapsedHeight() {
         return (isSmallCollapsed() ? mMaxCollapsedHeightSmall : mMaxCollapsedHeight)
                 + mCollapsibleHeightReserved;
@@ -420,8 +433,7 @@
 
             case MotionEvent.ACTION_POINTER_DOWN: {
                 final int pointerIndex = ev.getActionIndex();
-                final int pointerId = ev.getPointerId(pointerIndex);
-                mActivePointerId = pointerId;
+                mActivePointerId = ev.getPointerId(pointerIndex);
                 mInitialTouchX = ev.getX(pointerIndex);
                 mInitialTouchY = mLastTouchY = ev.getY(pointerIndex);
             }
@@ -924,7 +936,7 @@
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
         final int sourceWidth = MeasureSpec.getSize(widthMeasureSpec);
         int widthSize = sourceWidth;
-        int heightSize = MeasureSpec.getSize(heightMeasureSpec);
+        final int heightSize = MeasureSpec.getSize(heightMeasureSpec);
 
         // Single-use layout; just ignore the mode and use available space.
         // Clamp to maxWidth.
diff --git a/core/java/com/android/server/SystemConfig.java b/core/java/com/android/server/SystemConfig.java
index 9b583be..00b0105 100644
--- a/core/java/com/android/server/SystemConfig.java
+++ b/core/java/com/android/server/SystemConfig.java
@@ -339,6 +339,8 @@
     // A map from package name of vendor APEXes that can be updated to an installer package name
     // allowed to install updates for it.
     private final ArrayMap<String, String> mAllowedVendorApexes = new ArrayMap<>();
+    // A set of package names that are allowed to use <install-constraints> manifest tag.
+    private final Set<String> mInstallConstraintsAllowlist = new ArraySet<>();
 
     private String mModulesInstallerPackageName;
 
@@ -535,6 +537,10 @@
         return mAllowedVendorApexes;
     }
 
+    public Set<String> getInstallConstraintsAllowlist() {
+        return mInstallConstraintsAllowlist;
+    }
+
     public String getModulesInstallerPackageName() {
         return mModulesInstallerPackageName;
     }
@@ -1455,6 +1461,20 @@
                         }
                         XmlUtils.skipCurrentTag(parser);
                     } break;
+                    case "install-constraints-allowed": {
+                        if (allowAppConfigs) {
+                            String packageName = parser.getAttributeValue(null, "package");
+                            if (packageName == null) {
+                                Slog.w(TAG, "<" + name + "> without package in " + permFile
+                                        + " at " + parser.getPositionDescription());
+                            } else {
+                                mInstallConstraintsAllowlist.add(packageName);
+                            }
+                        } else {
+                            logNotAllowedInPartition(name, permFile, parser);
+                        }
+                        XmlUtils.skipCurrentTag(parser);
+                    } break;
                     default: {
                         Slog.w(TAG, "Tag " + name + " is unknown in "
                                 + permFile + " at " + parser.getPositionDescription());
diff --git a/core/jni/android_graphics_BLASTBufferQueue.cpp b/core/jni/android_graphics_BLASTBufferQueue.cpp
index 4af28ea..1520ea5 100644
--- a/core/jni/android_graphics_BLASTBufferQueue.cpp
+++ b/core/jni/android_graphics_BLASTBufferQueue.cpp
@@ -41,7 +41,12 @@
 
 static JNIEnv* getenv(JavaVM* vm) {
     JNIEnv* env;
-    if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
+    auto result = vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6);
+    if (result == JNI_EDETACHED) {
+        if (vm->AttachCurrentThreadAsDaemon(&env, nullptr) != JNI_OK) {
+            LOG_ALWAYS_FATAL("Failed to AttachCurrentThread!");
+        }
+    } else if (result != JNI_OK) {
         LOG_ALWAYS_FATAL("Failed to get JNIEnv for JavaVM: %p", vm);
     }
     return env;
@@ -60,28 +65,22 @@
     }
 
     ~TransactionHangCallbackWrapper() {
-        if (mTransactionHangObject) {
-            getenv()->DeleteGlobalRef(mTransactionHangObject);
+        if (mTransactionHangObject != nullptr) {
+            getenv(mVm)->DeleteGlobalRef(mTransactionHangObject);
             mTransactionHangObject = nullptr;
         }
     }
 
     void onTransactionHang(bool isGpuHang) {
         if (mTransactionHangObject) {
-            getenv()->CallVoidMethod(mTransactionHangObject,
-                                     gTransactionHangCallback.onTransactionHang, isGpuHang);
+            getenv(mVm)->CallVoidMethod(mTransactionHangObject,
+                                        gTransactionHangCallback.onTransactionHang, isGpuHang);
         }
     }
 
 private:
     JavaVM* mVm;
     jobject mTransactionHangObject;
-
-    JNIEnv* getenv() {
-        JNIEnv* env;
-        mVm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6);
-        return env;
-    }
 };
 
 static jlong nativeCreate(JNIEnv* env, jclass clazz, jstring jName,
diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp
index f388fec..b1610d7 100644
--- a/core/jni/android_view_SurfaceControl.cpp
+++ b/core/jni/android_view_SurfaceControl.cpp
@@ -580,6 +580,11 @@
     transaction->setEarlyWakeupEnd();
 }
 
+static jlong nativeGetTransactionId(JNIEnv* env, jclass clazz, jlong transactionObj) {
+    auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj);
+    return transaction->getId();
+}
+
 static void nativeSetLayer(JNIEnv* env, jclass clazz, jlong transactionObj,
         jlong nativeObject, jint zorder) {
     auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj);
@@ -2103,6 +2108,8 @@
             (void*)nativeSetEarlyWakeupStart },
     {"nativeSetEarlyWakeupEnd", "(J)V",
             (void*)nativeSetEarlyWakeupEnd },
+    {"nativeGetTransactionId", "(J)J",
+                (void*)nativeGetTransactionId },
     {"nativeSetLayer", "(JJI)V",
             (void*)nativeSetLayer },
     {"nativeSetRelativeLayer", "(JJJI)V",
diff --git a/core/proto/android/providers/settings/secure.proto b/core/proto/android/providers/settings/secure.proto
index 6a421f0..285258a 100644
--- a/core/proto/android/providers/settings/secure.proto
+++ b/core/proto/android/providers/settings/secure.proto
@@ -473,6 +473,13 @@
     }
     optional PowerMenuPrivacy power_menu_privacy = 81;
 
+    message ExtraLowPowerMode {
+        option (android.msg_privacy).dest = DEST_EXPLICIT;
+
+        optional SettingProto extra_automatic_power_save_mode = 1 [ (android.privacy).dest = DEST_AUTOMATIC ];
+    }
+    optional ExtraLowPowerMode extra_low_power_mode = 93;
+
     message PrintService {
         option (android.msg_privacy).dest = DEST_EXPLICIT;
 
@@ -679,5 +686,5 @@
 
     // Please insert fields in alphabetical order and group them into messages
     // if possible (to avoid reaching the method limit).
-    // Next tag = 93;
+    // Next tag = 94;
 }
diff --git a/core/proto/android/server/powermanagerservice.proto b/core/proto/android/server/powermanagerservice.proto
index 04f4d7b..bd4f990 100644
--- a/core/proto/android/server/powermanagerservice.proto
+++ b/core/proto/android/server/powermanagerservice.proto
@@ -238,6 +238,7 @@
         optional bool is_stay_on_while_plugged_in_ac = 1;
         optional bool is_stay_on_while_plugged_in_usb = 2;
         optional bool is_stay_on_while_plugged_in_wireless = 3;
+        optional bool is_stay_on_while_plugged_in_dock = 4;
     }
     message ScreenBrightnessSettingLimitsProto {
         option (.android.msg_privacy).dest = DEST_AUTOMATIC;
diff --git a/core/proto/android/server/windowmanagerservice.proto b/core/proto/android/server/windowmanagerservice.proto
index 92ac389..505ef30 100644
--- a/core/proto/android/server/windowmanagerservice.proto
+++ b/core/proto/android/server/windowmanagerservice.proto
@@ -578,7 +578,7 @@
     optional WindowStateProto pending_control_target = 6;
     optional WindowStateProto fake_control_target = 7;
     optional .android.view.SurfaceControlProto captured_leash = 8;
-    optional .android.graphics.RectProto ime_overridden_frame = 9;
+    optional .android.graphics.RectProto ime_overridden_frame = 9 [deprecated=true];
     optional bool is_leash_ready_for_dispatching = 10;
     optional bool client_visible = 11;
     optional bool server_visible = 12;
diff --git a/core/proto/android/server/windowmanagertransitiontrace.proto b/core/proto/android/server/windowmanagertransitiontrace.proto
new file mode 100644
index 0000000..4161f65
--- /dev/null
+++ b/core/proto/android/server/windowmanagertransitiontrace.proto
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+syntax = "proto3";
+
+package com.android.server.wm.shell;
+
+import "frameworks/base/core/proto/android/server/windowmanagerservice.proto";
+
+option java_multiple_files = true;
+
+/* Represents a file full of transition entries.
+   Encoded, it should start with 0x9 0x57 0x49 0x4e 0x54 0x52 0x41 0x43 0x45 (.TRNTRACE), such
+   that it can be easily identified. */
+message TransitionTraceProto {
+
+  /* constant; MAGIC_NUMBER = (long) MAGIC_NUMBER_H << 32 | MagicNumber.MAGIC_NUMBER_L
+     (this is needed because enums have to be 32 bits and there's no nice way to put 64bit
+      constants into .proto files. */
+  enum MagicNumber {
+    INVALID = 0;
+    MAGIC_NUMBER_L = 0x544e5254;  /* TRNT (little-endian ASCII) */
+    MAGIC_NUMBER_H = 0x45434152;  /* RACE (little-endian ASCII) */
+  }
+
+  fixed64 magic_number = 1;  /* Must be the first field, set to value in MagicNumber */
+  int64 timestamp = 2; /* The timestamp of when the trace was started. */
+  repeated Transition transition = 3;
+}
+
+message Transition {
+
+  enum State {
+    COLLECTING = 0;
+    PENDING = -1;
+    STARTED = 1;
+    PLAYING = 2;
+    ABORT = 3;
+    FINISHED = 4;
+  }
+
+  int32 id = 1;
+  int32 transition_type = 2;
+  int64 timestamp = 3;
+  State state = 5;
+  int32 flags = 6;
+  repeated ChangeInfo change = 7;
+  uint64 start_transaction_id = 8;
+  uint64 finish_transaction_id = 9;
+}
+
+message ChangeInfo {
+  com.android.server.wm.IdentifierProto window_identifier = 1;
+  int32 transit_mode = 2;
+  bool has_changed = 3;
+  int32 change_flags = 4;
+}
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 7439b2f..ce372e7 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -6498,6 +6498,13 @@
     <permission android:name="android.permission.SET_UNRESTRICTED_KEEP_CLEAR_AREAS"
                 android:protectionLevel="signature|privileged" />
 
+    <!-- Allows an app to set gesture exclusion without restrictions on the vertical extent of the
+         exclusions (see {@link android.view.View#setSystemGestureExclusionRects}).
+         @hide
+    -->
+    <permission android:name="android.permission.SET_UNRESTRICTED_GESTURE_EXCLUSION"
+                android:protectionLevel="signature|privileged|recents" />
+
     <!-- @SystemApi Allows TV input apps and TV apps to use TIS extension interfaces for
          domain-specific features.
          <p>Protection level: signature|privileged|vendorPrivileged
@@ -7061,6 +7068,10 @@
                  android:permission="android.permission.BIND_JOB_SERVICE">
         </service>
 
+        <service android:name="com.android.server.notification.NotificationHistoryJobService"
+                 android:permission="android.permission.BIND_JOB_SERVICE" >
+        </service>
+
         <service android:name="com.android.server.pm.PackageManagerShellCommandDataLoader"
             android:exported="false">
             <intent-filter>
diff --git a/core/res/res/anim-ldrtl/task_fragment_clear_top_close_enter.xml b/core/res/res/anim-ldrtl/task_fragment_clear_top_close_enter.xml
new file mode 100644
index 0000000..6c44bdc0
--- /dev/null
+++ b/core/res/res/anim-ldrtl/task_fragment_clear_top_close_enter.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+     android:shareInterpolator="false"
+     android:showBackdrop="true">
+    <alpha
+        android:fromAlpha="0.0"
+        android:toAlpha="1.0"
+        android:fillEnabled="true"
+        android:fillBefore="true"
+        android:fillAfter="true"
+        android:interpolator="@interpolator/linear"
+        android:startOffset="100"
+        android:duration="350" />
+
+    <translate
+        android:fromXDelta="5%"
+        android:toXDelta="0"
+        android:fillEnabled="true"
+        android:fillBefore="true"
+        android:fillAfter="true"
+        android:interpolator="@interpolator/fast_out_extra_slow_in"
+        android:startOffset="0"
+        android:duration="450" />
+</set>
\ No newline at end of file
diff --git a/core/res/res/anim-ldrtl/task_fragment_clear_top_close_exit.xml b/core/res/res/anim-ldrtl/task_fragment_clear_top_close_exit.xml
new file mode 100644
index 0000000..65cf2c2c
--- /dev/null
+++ b/core/res/res/anim-ldrtl/task_fragment_clear_top_close_exit.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+     android:shareInterpolator="false">
+    <alpha
+        android:fromAlpha="1.0"
+        android:toAlpha="0.0"
+        android:fillEnabled="true"
+        android:fillBefore="true"
+        android:fillAfter="true"
+        android:interpolator="@interpolator/linear"
+        android:startOffset="0"
+        android:duration="100" />
+
+    <translate
+        android:fromXDelta="0"
+        android:toXDelta="-25%"
+        android:fillEnabled="true"
+        android:fillBefore="true"
+        android:fillAfter="true"
+        android:interpolator="@interpolator/fast_out_extra_slow_in"
+        android:startOffset="0"
+        android:duration="450" />
+</set>
\ No newline at end of file
diff --git a/core/res/res/anim-ldrtl/task_fragment_clear_top_open_enter.xml b/core/res/res/anim-ldrtl/task_fragment_clear_top_open_enter.xml
new file mode 100644
index 0000000..022bc22
--- /dev/null
+++ b/core/res/res/anim-ldrtl/task_fragment_clear_top_open_enter.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+     android:shareInterpolator="false"
+     android:showBackdrop="true">
+    <alpha
+        android:fromAlpha="0.0"
+        android:toAlpha="1.0"
+        android:fillEnabled="true"
+        android:fillBefore="true"
+        android:fillAfter="true"
+        android:interpolator="@interpolator/linear"
+        android:startOffset="100"
+        android:duration="350" />
+
+    <translate
+        android:fromXDelta="-5%"
+        android:toXDelta="0"
+        android:fillEnabled="true"
+        android:fillBefore="true"
+        android:fillAfter="true"
+        android:interpolator="@interpolator/fast_out_extra_slow_in"
+        android:duration="450" />
+</set>
\ No newline at end of file
diff --git a/core/res/res/anim-ldrtl/task_fragment_clear_top_open_exit.xml b/core/res/res/anim-ldrtl/task_fragment_clear_top_open_exit.xml
new file mode 100644
index 0000000..3644dea
--- /dev/null
+++ b/core/res/res/anim-ldrtl/task_fragment_clear_top_open_exit.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+     android:shareInterpolator="false">
+    <alpha
+        android:fromAlpha="1.0"
+        android:toAlpha="0.0"
+        android:fillEnabled="true"
+        android:fillBefore="true"
+        android:fillAfter="true"
+        android:interpolator="@interpolator/standard_accelerate"
+        android:startOffset="0"
+        android:duration="100" />
+
+    <translate
+        android:fromXDelta="0"
+        android:toXDelta="25%"
+        android:fillEnabled="true"
+        android:fillBefore="true"
+        android:fillAfter="true"
+        android:interpolator="@interpolator/fast_out_extra_slow_in"
+        android:duration="450" />
+</set>
\ No newline at end of file
diff --git a/core/res/res/anim-ldrtl/task_fragment_open_enter.xml b/core/res/res/anim-ldrtl/task_fragment_open_enter.xml
index b6f1af3..9e3780a 100644
--- a/core/res/res/anim-ldrtl/task_fragment_open_enter.xml
+++ b/core/res/res/anim-ldrtl/task_fragment_open_enter.xml
@@ -17,7 +17,7 @@
 -->
 
 <set xmlns:android="http://schemas.android.com/apk/res/android"
-     android:shareInterpolator="false">
+    android:shareInterpolator="false">
 
     <alpha
         android:fromAlpha="0"
diff --git a/core/res/res/anim/task_fragment_clear_top_close_enter.xml b/core/res/res/anim/task_fragment_clear_top_close_enter.xml
new file mode 100644
index 0000000..e33f718
--- /dev/null
+++ b/core/res/res/anim/task_fragment_clear_top_close_enter.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+     android:shareInterpolator="false"
+     android:showBackdrop="true">
+    <alpha
+        android:fromAlpha="0.0"
+        android:toAlpha="1.0"
+        android:fillEnabled="true"
+        android:fillBefore="true"
+        android:fillAfter="true"
+        android:interpolator="@interpolator/standard_decelerate"
+        android:startOffset="100"
+        android:duration="350" />
+
+    <translate
+        android:fromXDelta="-5%"
+        android:toXDelta="0"
+        android:fillEnabled="true"
+        android:fillBefore="true"
+        android:fillAfter="true"
+        android:interpolator="@interpolator/fast_out_extra_slow_in"
+        android:startOffset="0"
+        android:duration="450" />
+
+</set>
\ No newline at end of file
diff --git a/core/res/res/anim/task_fragment_clear_top_close_exit.xml b/core/res/res/anim/task_fragment_clear_top_close_exit.xml
new file mode 100644
index 0000000..3d274ba9
--- /dev/null
+++ b/core/res/res/anim/task_fragment_clear_top_close_exit.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+     android:shareInterpolator="false">
+
+    <alpha
+        android:fromAlpha="1.0"
+        android:toAlpha="0.0"
+        android:fillEnabled="true"
+        android:fillBefore="true"
+        android:fillAfter="true"
+        android:interpolator="@interpolator/standard_accelerate"
+        android:startOffset="0"
+        android:duration="100" />
+
+    <translate
+        android:fromXDelta="0"
+        android:toXDelta="25%"
+        android:fillEnabled="true"
+        android:fillBefore="true"
+        android:fillAfter="true"
+        android:interpolator="@interpolator/fast_out_extra_slow_in"
+        android:startOffset="0"
+        android:duration="450" />
+
+</set>
\ No newline at end of file
diff --git a/core/res/res/anim/task_fragment_clear_top_open_enter.xml b/core/res/res/anim/task_fragment_clear_top_open_enter.xml
new file mode 100644
index 0000000..b963661
--- /dev/null
+++ b/core/res/res/anim/task_fragment_clear_top_open_enter.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+     android:shareInterpolator="false"
+     android:showBackdrop="true">
+
+    <alpha
+        android:fromAlpha="0.0"
+        android:toAlpha="1.0"
+        android:fillEnabled="true"
+        android:fillBefore="true"
+        android:fillAfter="true"
+        android:interpolator="@interpolator/standard_decelerate"
+        android:startOffset="100"
+        android:duration="350" />
+
+    <translate
+        android:fromXDelta="5%"
+        android:toXDelta="0"
+        android:fillEnabled="true"
+        android:fillBefore="true"
+        android:fillAfter="true"
+        android:interpolator="@interpolator/fast_out_slow_in"
+        android:startOffset="0"
+        android:duration="450" />
+
+</set>
\ No newline at end of file
diff --git a/core/res/res/anim/task_fragment_clear_top_open_exit.xml b/core/res/res/anim/task_fragment_clear_top_open_exit.xml
new file mode 100644
index 0000000..22be7d1
--- /dev/null
+++ b/core/res/res/anim/task_fragment_clear_top_open_exit.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+     android:shareInterpolator="false">
+
+    <alpha
+        android:fromAlpha="1.0"
+        android:toAlpha="0.0"
+        android:fillEnabled="true"
+        android:fillBefore="true"
+        android:fillAfter="true"
+        android:interpolator="@interpolator/standard_accelerate"
+        android:startOffset="0"
+        android:duration="100" />
+
+    <translate
+        android:fromXDelta="0"
+        android:toXDelta="-25%"
+        android:fillEnabled="true"
+        android:fillBefore="true"
+        android:fillAfter="true"
+        android:interpolator="@interpolator/fast_out_extra_slow_in"
+        android:duration="450" />
+
+</set>
\ No newline at end of file
diff --git a/core/res/res/anim/task_fragment_open_enter.xml b/core/res/res/anim/task_fragment_open_enter.xml
index aa61e6f..87ee179 100644
--- a/core/res/res/anim/task_fragment_open_enter.xml
+++ b/core/res/res/anim/task_fragment_open_enter.xml
@@ -16,7 +16,7 @@
    -->
 
 <set xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shareInterpolator="false">
+     android:shareInterpolator="false">
     <alpha
         android:fromAlpha="0"
         android:toAlpha="1.0"
diff --git a/core/res/res/anim/task_fragment_open_exit.xml b/core/res/res/anim/task_fragment_open_exit.xml
index b4914d2..55a472d 100644
--- a/core/res/res/anim/task_fragment_open_exit.xml
+++ b/core/res/res/anim/task_fragment_open_exit.xml
@@ -32,5 +32,5 @@
         android:fillBefore="true"
         android:fillAfter="true"
         android:interpolator="@interpolator/fast_out_extra_slow_in"
-        android:duration="400" />
-</set>
\ No newline at end of file
+        android:duration="400"/>
+</set>
diff --git a/core/res/res/drawable-nodpi/default_wallpaper.png b/core/res/res/drawable-nodpi/default_wallpaper.png
index 5152972..a23f553 100644
--- a/core/res/res/drawable-nodpi/default_wallpaper.png
+++ b/core/res/res/drawable-nodpi/default_wallpaper.png
Binary files differ
diff --git a/core/res/res/drawable-sw600dp-nodpi/default_wallpaper.png b/core/res/res/drawable-sw600dp-nodpi/default_wallpaper.png
index 26376fb..1e272e0 100644
--- a/core/res/res/drawable-sw600dp-nodpi/default_wallpaper.png
+++ b/core/res/res/drawable-sw600dp-nodpi/default_wallpaper.png
Binary files differ
diff --git a/core/res/res/drawable-sw720dp-nodpi/default_wallpaper.png b/core/res/res/drawable-sw720dp-nodpi/default_wallpaper.png
index 490ebee..d10c77d 100644
--- a/core/res/res/drawable-sw720dp-nodpi/default_wallpaper.png
+++ b/core/res/res/drawable-sw720dp-nodpi/default_wallpaper.png
Binary files differ
diff --git a/core/res/res/layout-car/car_alert_dialog.xml b/core/res/res/layout-car/car_alert_dialog.xml
index 2e7b62c..3c7a5c5 100644
--- a/core/res/res/layout-car/car_alert_dialog.xml
+++ b/core/res/res/layout-car/car_alert_dialog.xml
@@ -54,7 +54,7 @@
                     android:layout_height="wrap_content"
                     android:layout_marginStart="@dimen/text_view_start_margin"
                     android:layout_marginEnd="@dimen/text_view_end_margin"
-                    style="@style/CarBody4"/>
+                    style="@style/CarDialogMessageText"/>
 
                 <!-- we don't need this spacer, but the id needs to be here for compatibility -->
                 <Space
diff --git a/core/res/res/layout-car/car_alert_dialog_button_bar.xml b/core/res/res/layout-car/car_alert_dialog_button_bar.xml
index 4f815b8..43fd1eb 100644
--- a/core/res/res/layout-car/car_alert_dialog_button_bar.xml
+++ b/core/res/res/layout-car/car_alert_dialog_button_bar.xml
@@ -16,13 +16,13 @@
   -->
 
 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
-            android:id="@+id/buttonPanel"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:scrollbarAlwaysDrawVerticalTrack="true"
-            android:scrollIndicators="top|bottom"
-            android:fillViewport="true"
-            style="?attr/buttonBarStyle">
+    android:id="@+id/buttonPanel"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:scrollbarAlwaysDrawVerticalTrack="true"
+    android:scrollIndicators="top|bottom"
+    android:fillViewport="true"
+    style="?attr/buttonBarStyle">
     <com.android.internal.widget.ButtonBarLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
@@ -35,7 +35,7 @@
 
         <Button
             android:id="@+id/button3"
-            style="@style/CarAction1"
+            style="@style/CarDialogButtonText"
             android:minWidth="@dimen/car_touch_target_size"
             android:paddingStart="@dimen/car_padding_2"
             android:paddingEnd="@dimen/car_padding_2"
@@ -46,7 +46,7 @@
 
         <Button
             android:id="@+id/button2"
-            style="@style/CarAction1"
+            style="@style/CarDialogButtonText"
             android:minWidth="@dimen/car_touch_target_size"
             android:paddingStart="@dimen/car_padding_2"
             android:paddingEnd="@dimen/car_padding_2"
@@ -57,7 +57,7 @@
 
         <Button
             android:id="@+id/button1"
-            style="@style/CarAction1"
+            style="@style/CarDialogButtonText"
             android:minWidth="@dimen/car_touch_target_size"
             android:paddingStart="@dimen/car_padding_2"
             android:paddingEnd="@dimen/car_padding_2"
diff --git a/core/res/res/layout/transient_notification_with_icon.xml b/core/res/res/layout/transient_notification_with_icon.xml
new file mode 100644
index 0000000..e9b17df
--- /dev/null
+++ b/core/res/res/layout/transient_notification_with_icon.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:orientation="horizontal"
+    android:gravity="center_vertical"
+    android:maxWidth="@dimen/toast_width"
+    android:background="?android:attr/toastFrameBackground"
+    android:elevation="@dimen/toast_elevation"
+    android:layout_marginEnd="16dp"
+    android:layout_marginStart="16dp"
+    android:paddingStart="16dp"
+    android:paddingEnd="16dp">
+
+    <ImageView
+        android:id="@android:id/icon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content" />
+
+    <TextView
+        android:id="@android:id/message"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:ellipsize="end"
+        android:maxLines="2"
+        android:paddingTop="12dp"
+        android:paddingBottom="12dp"
+        android:textAppearance="@style/TextAppearance.Toast"/>
+</LinearLayout>
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index e8244c4..37435c1 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Hierdie toetstel het nie \'n vingerafdruksensor nie."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor is tydelik gedeaktiveer."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Kan nie vingerafdruksensor gebruik nie. Besoek \'n verskaffer wat herstelwerk doen"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Aan/af-skakelaar is gedruk"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Vinger <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Gebruik vingerafdruk"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Gebruik vingerafdruk of skermslot"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Kyk meer reguit na jou foon"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Verwyder enigiets wat jou gesig versteek."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Maak die bokant van jou skerm skoon, insluitend die swart balk"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Jou gesig moet heeltemal sigbaar wees"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Jou gesig moet heeltemal sigbaar wees"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Kan nie jou gesigmodel skep nie. Probeer weer."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Donkerbril bespeur. Jou gesig moet heeltemal sigbaar wees."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Gesigbedekking bespeur. Jou gesig moet heeltemal sigbaar wees."</string>
@@ -1941,18 +1944,19 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Kamera is nie beskikbaar nie"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Gaan voort op foon"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Mikrofoon is nie beskikbaar nie"</string>
+    <string name="app_streaming_blocked_title_for_playstore_dialog" msgid="8149823099822897538">"Play Winkel is nie beskikbaar nie"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV-instellings is nie beskikbaar nie"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Tabletinstellings is nie beskikbaar nie"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Fooninstellings is nie beskikbaar nie"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Jou <xliff:g id="DEVICE">%1$s</xliff:g> kan nie toegang hiertoe kry nie. Probeer eerder op jou Android TV-toestel."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Jou <xliff:g id="DEVICE">%1$s</xliff:g> kan nie toegang hiertoe kry nie. Probeer eerder op jou tablet."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Jou <xliff:g id="DEVICE">%1$s</xliff:g> kan nie toegang hiertoe kry nie. Probeer eerder op jou foon."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Jy kan nie nou toegang hiertoe op jou <xliff:g id="DEVICE">%1$s</xliff:g> kry nie. Probeer eerder op jou Android TV-toestel."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Jy kan nie nou toegang hiertoe op jou <xliff:g id="DEVICE">%1$s</xliff:g> kry nie. Probeer eerder op jou tablet."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Jy kan nie nou toegang hiertoe op jou <xliff:g id="DEVICE">%1$s</xliff:g> kry nie. Probeer eerder op jou foon."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Jy kan nie nou toegang hiertoe op jou <xliff:g id="DEVICE">%1$s</xliff:g> kry nie. Probeer eerder op jou Android TV-toestel."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Jy kan nie nou toegang hiertoe op jou <xliff:g id="DEVICE">%1$s</xliff:g> kry nie. Probeer eerder op jou tablet."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Jy kan nie nou toegang hiertoe op jou <xliff:g id="DEVICE">%1$s</xliff:g> kry nie. Probeer eerder op jou foon."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Hierdie program versoek tans bykomende sekuriteit. Probeer eerder op jou Android TV-toestel."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Hierdie program versoek tans bykomende sekuriteit. Probeer eerder op jou tablet."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Hierdie program versoek tans bykomende sekuriteit. Probeer eerder op jou foon."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tv" msgid="820334666354451145">"Jy kan nie op jou <xliff:g id="DEVICE">%1$s</xliff:g> toegang hiertoe kry nie. Probeer eerder op jou Android TV-toestel."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tablet" msgid="3286849551133045896">"Jy kan nie op jou <xliff:g id="DEVICE">%1$s</xliff:g> toegang hiertoe kry nie. Probeer eerder op jou tablet."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Jy kan nie op jou <xliff:g id="DEVICE">%1$s</xliff:g> toegang hiertoe kry nie. Probeer eerder op jou foon."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Hierdie program is vir \'n ouer weergawe van Android gebou en sal dalk nie behoorlik werk nie. Probeer kyk vir opdaterings, of kontak die ontwikkelaar."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Kyk vir opdatering"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Jy het nuwe boodskappe"</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index a4d6bb4..cc1d9d1 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ይህ መሣሪያ የጣት አሻራ ዳሳሽ የለውም።"</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"ዳሳሽ ለጊዜው ተሰናክሏል።"</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"የጣት አሻራ ዳሳሽን መጠቀም አይቻልም። የጥገና አገልግሎት ሰጪን ይጎብኙ"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"የኃይል አዝራር ተጭኗል"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"ጣት <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"የጣት አሻራ ይጠቀሙ"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"የጣት አሻራ ወይም የማያ ገጽ መቆለፊያ ይጠቀሙ"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"ስልክዎን ይበልጥ በቀጥታ ይመልከቱ"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"የእርስዎን ፊት የሚደብቀውን ሁሉንም ነገር በማስወገድ ላይ"</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"የማያ ገጽዎን አናት ያጽዱት፣ ጥቁር አሞሌውን ጨምሮ"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"መልክዎ ሙሉ በሙሉ መታየት አለበት"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"መልክዎ ሙሉ በሙሉ መታየት አለበት"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"የመልክዎን ሞዴል መፍጠር አልተቻለም። እንደገና ይሞክሩ።"</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"ጠቆር ያሉ መነጽሮች ተገኝተዋል። መልክዎ ሙሉ በሙሉ መታየት አለበት።"</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"የመልክ መሸፈኛ ተገኝቷል። መልክዎ ሙሉ በሙሉ መታየት አለበት።"</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"ካሜራ አይገኝም"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"በስልክ ላይ ይቀጥሉ"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"ማይክሮፎን አይገኝም"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"የAndroid TV ቅንጅቶች አይገኙም"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"የጡባዊ ቅንብሮች አይገኝም"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"የስልክ ቅንብሮች አይገኙም"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"ይህ በእርስዎ <xliff:g id="DEVICE">%1$s</xliff:g> ላይ ሊደረስበት አይችልም። በምትኩ በAndroid TV መሣሪያዎ ላይ ይሞክሩ።"</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"ይህ በእርስዎ <xliff:g id="DEVICE">%1$s</xliff:g> ላይ ሊደረስበት አይችልም። በምትኩ በጡባዊዎ ላይ ይሞክሩ።"</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"ይህ በእርስዎ <xliff:g id="DEVICE">%1$s</xliff:g> ላይ ሊደረስበት አይችልም። በምትኩ በስልክዎ ላይ ይሞክሩ።"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"ይህ በዚህ ጊዜ በእርስዎ <xliff:g id="DEVICE">%1$s</xliff:g> ላይ ሊደረስበት አይችልም። በምትኩ በAndroid TV መሣሪያዎ ላይ ይሞክሩ።"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"ይህ በዚህ ጊዜ በእርስዎ <xliff:g id="DEVICE">%1$s</xliff:g> ላይ ሊደረስበት አይችልም። በምትኩ በጡባዊዎ ላይ ይሞክሩ።"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"ይህ በዚህ ጊዜ በእርስዎ <xliff:g id="DEVICE">%1$s</xliff:g> ላይ ሊደረስበት አይችልም። በምትኩ በስልክዎ ላይ ይሞክሩ።"</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"ይህ በዚህ ጊዜ በእርስዎ <xliff:g id="DEVICE">%1$s</xliff:g> ላይ ሊደረስበት አይችልም። በምትኩ በAndroid TV መሣሪያዎ ላይ ይሞክሩ።"</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"ይህ በዚህ ጊዜ በእርስዎ <xliff:g id="DEVICE">%1$s</xliff:g> ላይ ሊደረስበት አይችልም። በምትኩ በጡባዊዎ ላይ ይሞክሩ።"</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"ይህ በዚህ ጊዜ በእርስዎ <xliff:g id="DEVICE">%1$s</xliff:g> ላይ ሊደረስበት አይችልም። በምትኩ በስልክዎ ላይ ይሞክሩ።"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"ይህ መተግበሪያ ተጨማሪ ደህንነትን እየጠየቀ ነው። በምትኩ በAndroid TV መሣሪያዎ ላይ ይሞክሩ።"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"ይህ መተግበሪያ ተጨማሪ ደህንነትን እየጠየቀ ነው። በምትኩ በጡባዊዎ ላይ ይሞክሩ።"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"ይህ መተግበሪያ ተጨማሪ ደህንነትን እየጠየቀ ነው። በምትኩ በስልክዎ ላይ ይሞክሩ።"</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"ይህ መተግበሪያ ለቆየ የAndroid ስሪት ነው የተገነባው፣ እና በአግባቡ ላይሰራ ይችላል። ዝማኔዎች ካሉ ለመመልከት ይሞክሩ፣ ወይም ደግሞ ገንቢውን ያነጋግሩ።"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"ዝማኔ ካለ አረጋግጥ"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"አዲስ መልዕክቶች አለዎት"</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 08929b2..77c447e 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -618,6 +618,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"لا يحتوي هذا الجهاز على مستشعِر بصمات إصبع."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"تم إيقاف جهاز الاستشعار مؤقتًا."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"لا يمكن استخدام أداة استشعار بصمة الإصبع. يُرجى التواصل مع مقدِّم خدمات إصلاح."</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"تم الضغط على زر التشغيل"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"الإصبع <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"استخدام بصمة الإصبع"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"استخدام بصمة الإصبع أو قفل الشاشة"</string>
@@ -658,8 +659,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"يُرجى النظر إلى هاتفك مباشرةً."</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"عليك بإزالة أي شيء يُخفي وجهك."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"يُرجى تنظيف الجزء العلوي من الشاشة، بما في ذلك الشريط الأسود."</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"يجب أن يكون وجهك ظاهرًا بالكامل."</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"يجب أن يكون وجهك ظاهرًا بالكامل."</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"يتعذّر إنشاء نموذج الوجه. يُرجى إعادة المحاولة."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"تمّ رصد نظارة شمسية. يجب أن يكون وجهك ظاهرًا بالكامل."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"تمّ رصد قناع على الوجه. يجب أن يكون وجهك ظاهرًا بالكامل."</string>
@@ -1945,18 +1948,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"الكاميرا غير متاحة"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"الاستمرار على الهاتف"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"الميكروفون غير متاح"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"‏إعدادات Android TV غير متاحة"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"إعدادات الجهاز اللوحي غير متاحة"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"إعدادات الهاتف غير متاحة"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"‏لا يمكن الوصول إلى هذا التطبيق على <xliff:g id="DEVICE">%1$s</xliff:g>. بدلاً من ذلك، جرِّب استخدام Android TV."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"لا يمكن الوصول إلى هذا التطبيق على <xliff:g id="DEVICE">%1$s</xliff:g>. بدلاً من ذلك، جرِّب استخدام جهازك اللوحي."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"لا يمكن الوصول إلى هذا التطبيق على <xliff:g id="DEVICE">%1$s</xliff:g>. بدلاً من ذلك، جرِّب استخدام هاتفك."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"‏لا يمكن الوصول إلى هذا التطبيق على <xliff:g id="DEVICE">%1$s</xliff:g> في الوقت الحالي. بدلاً من ذلك، جرِّب استخدام Android TV."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"لا يمكن الوصول إلى هذا التطبيق على <xliff:g id="DEVICE">%1$s</xliff:g> في الوقت الحالي. بدلاً من ذلك، جرِّب استخدام جهازك اللوحي."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"لا يمكن الوصول إلى هذا التطبيق على <xliff:g id="DEVICE">%1$s</xliff:g> في الوقت الحالي. بدلاً من ذلك، جرِّب استخدام هاتفك."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"‏لا يمكن الوصول إلى هذا التطبيق على <xliff:g id="DEVICE">%1$s</xliff:g> في الوقت الحالي. حاوِل الوصول إليه على جهاز Android TV بدلاً من ذلك."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"لا يمكن الوصول إلى هذا التطبيق على <xliff:g id="DEVICE">%1$s</xliff:g> في الوقت الحالي. حاوِل الوصول إليه على جهازك اللوحي بدلاً من ذلك."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"لا يمكن الوصول إلى هذا التطبيق على <xliff:g id="DEVICE">%1$s</xliff:g> في الوقت الحالي. حاوِل الوصول إليه على هاتفك بدلاً من ذلك."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"‏يطلب هذا التطبيق الحصول على ميزات أمان إضافية. بدلاً من ذلك، جرِّب استخدام Android TV."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"يطلب هذا التطبيق الحصول على ميزات أمان إضافية. بدلاً من ذلك، جرِّب استخدام جهازك اللوحي."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"يطلب هذا التطبيق الحصول على ميزات أمان إضافية. بدلاً من ذلك، جرِّب استخدام هاتفك."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"‏تمّ إنشاء هذا التطبيق لإصدار قديم من Android وقد لا يعمل بشكل صحيح. جرِّب البحث عن تحديثات أو الاتصال بمطوّر البرامج."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"البحث عن تحديث"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"لديك رسائل جديدة"</string>
diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml
index 28ca156..4fc1153 100644
--- a/core/res/res/values-as/strings.xml
+++ b/core/res/res/values-as/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"এই ডিভাইচটোত ফিংগাৰপ্ৰিণ্ট ছেন্সৰ নাই।"</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"ছেন্সৰটো সাময়িকভাৱে অক্ষম হৈ আছে।"</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"ফিংগাৰপ্ৰিণ্ট ছেন্সৰ ব্যৱহাৰ কৰিব নোৱাৰি। মেৰামতি সেৱা প্ৰদানকাৰী কোনো প্ৰতিষ্ঠানলৈ যাওক"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"পাৱাৰ বুটাম টিপা হৈছে"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"<xliff:g id="FINGERID">%d</xliff:g> আঙুলি"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"ফিংগাৰপ্ৰিণ্ট ব্যৱহাৰ কৰক"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"ফিংগাৰপ্ৰিণ্ট অথবা স্ক্ৰীন লক ব্যৱহাৰ কৰক"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"আপোনাৰ ফ’নটোলৈ আৰু পোনপটীয়াকৈ চাওক"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"আপোনাৰ মুখখন ঢাকি ৰখা বস্তুবোৰ আঁতৰাওক।"</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"ক’লা বাৰডালকে ধৰি আপোনাৰ স্ক্রীনৰ ওপৰৰ অংশ চাফা কৰক"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"আপোনাৰ মুখাৱয়ব সম্পূৰ্ণৰূপে দেখা পোৱা হৈ থাকিবই লাগিব"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"আপোনাৰ মুখাৱয়ব সম্পূৰ্ণৰূপে দেখা পোৱা হৈ থাকিবই লাগিব"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"মুখাৱয়বৰ মডেল সৃষ্টি কৰিব নোৱাৰি। পুনৰ চেষ্টা কৰক।"</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"ডাঠ ৰঙৰ চশমা চিনাক্ত কৰা হৈছে। আপোনাৰ মুখাৱয়ব সম্পূৰ্ণৰূপে দেখা পোৱা হৈ থাকিবই লাগিব।"</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"মুখাৱয়বত আৱৰণ চিনাক্ত কৰা হৈছে। আপোনাৰ মুখাৱয়ব সম্পূৰ্ণৰূপে দেখা পোৱা হৈ থাকিবই লাগিব।"</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"কেমেৰা উপলব্ধ নহয়"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"ফ’নতে অব্যাহত ৰাখক"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"মাইক্ৰ’ফ’ন উপলব্ধ নহয়"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TVৰ ছেটিং উপলব্ধ নহয়"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"টেবলেটৰ ছেটিং উপলব্ধ নহয়"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"ফ’নৰ ছেটিং উপলব্ধ নহয়"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"এইটো আপোনাৰ <xliff:g id="DEVICE">%1$s</xliff:g>ত এক্সেছ কৰিব নোৱৰি। তাৰ পৰিৱৰ্তে আপোনাৰ Android TV ডিভাইচত চেষ্টা কৰি চাওক।"</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"এইটো আপোনাৰ <xliff:g id="DEVICE">%1$s</xliff:g>ত এক্সেছ কৰিব নোৱৰি। তাৰ পৰিৱৰ্তে আপোনাৰ টেবলেটত চেষ্টা কৰি চাওক।"</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"এইটো আপোনাৰ <xliff:g id="DEVICE">%1$s</xliff:g>ত এক্সেছ কৰিব নোৱৰি। তাৰ পৰিৱৰ্তে আপোনাৰ ফ’নত চেষ্টা কৰি চাওক।"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"এইটো এই মুহূৰ্তত আপোনাৰ <xliff:g id="DEVICE">%1$s</xliff:g>ত এক্সেছ কৰিব নোৱাৰি। তাৰ পৰিৱৰ্তে আপোনাৰ Android TV ডিভাইচত চেষ্টা কৰি চাওক।"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"এইটো এই মুহূৰ্তত আপোনাৰ <xliff:g id="DEVICE">%1$s</xliff:g>ত এক্সেছ কৰিব নোৱাৰি। তাৰ পৰিৱৰ্তে আপোনাৰ টেবলেটত চেষ্টা কৰি চাওক।"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"এইটো এই মুহূৰ্তত আপোনাৰ <xliff:g id="DEVICE">%1$s</xliff:g>ত এক্সেছ কৰিব নোৱাৰি। তাৰ পৰিৱৰ্তে আপোনাৰ ফ’নত চেষ্টা কৰি চাওক।"</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"এইটো এতিয়া আপোনাৰ <xliff:g id="DEVICE">%1$s</xliff:g>ত এক্সেছ কৰিব পৰা নাযায়। তাৰ পৰিৱৰ্তে আপোনাৰ Android TVত চেষ্টা কৰি চাওক।"</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"এইটো এতিয়া আপোনাৰ <xliff:g id="DEVICE">%1$s</xliff:g>ত এক্সেছ কৰিব পৰা নাযায়। তাৰ পৰিৱৰ্তে আপোনাৰ টেবলেটটোত চেষ্টা কৰি চাওক।"</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"এইটো এতিয়া আপোনাৰ <xliff:g id="DEVICE">%1$s</xliff:g>ত এক্সেছ কৰিব পৰা নাযায়। তাৰ পৰিৱৰ্তে আপোনাৰ ফ’নত চেষ্টা কৰি চাওক।"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"এই এপ্‌টোৱে অতিৰিক্ত সুৰক্ষাৰ বাবে অনুৰোধ কৰিছে। তাৰ পৰিৱৰ্তে আপোনাৰ Android TV ডিভাইচত চেষ্টা কৰি চাওক।"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"এই এপ্‌টোৱে অতিৰিক্ত সুৰক্ষাৰ বাবে অনুৰোধ কৰিছে। তাৰ পৰিৱৰ্তে আপোনাৰ টেবলেটত চেষ্টা কৰি চাওক।"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"এই এপ্‌টোৱে অতিৰিক্ত সুৰক্ষাৰ বাবে অনুৰোধ কৰিছে। তাৰ পৰিৱৰ্তে আপোনাৰ ফ’নত চেষ্টা কৰি চাওক।"</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"এই এপটো Androidৰ এটা পুৰণা সংস্কৰণৰ বাবে প্ৰস্তুত কৰা হৈছিল, আৰু ই বিচৰাধৰণে কাম নকৰিবও পাৰে। ইয়াৰ আপডে’ট আছে নেকি চাওক, বা বিকাশকৰ্তাৰ সৈতে যোগাযোগ কৰক।"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"আপডে’ট আছে নেকি চাওক"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"আপুনি নতুন বার্তা লাভ কৰিছে"</string>
diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml
index a7911de..9cc5e5d 100644
--- a/core/res/res/values-az/strings.xml
+++ b/core/res/res/values-az/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Bu cihazda barmaq izi sensoru yoxdur."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor müvəqqəti deaktivdir."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Barmaq izi sensorundan istifadə etmək mümkün deyil. Təmir provayderini ziyarət edin"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Qidalanma düyməsi basılıb"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Barmaq <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Barmaq izini istifadə edin"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Barmaq izi və ya ekran kilidindən istifadə edin"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Telefonunuza düz baxın"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Üzünüzü gizlədən maneələri kənarlaşdırın."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Qara panel daxil olmaqla, ekranın yuxarısını təmizləyin"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Üzünüz tam görünməlidir"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Üzünüz tam görünməlidir"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Üz modelinizi yaratmaq olmur. Yenə cəhd edin."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Tünd eynək aşkar edildi. Üzünüz tam görünməlidir."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Üz örtüyü aşkar edildi. Üzünüz tam görünməlidir."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Kamera əlçatan deyil"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Telefonda davam edin"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Mikrofon əlçatan deyil"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV ayarları əlçatan deyil"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Planşet ayarları əlçatan deyil"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Telefon ayarları əlçatan deyil"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"<xliff:g id="DEVICE">%1$s</xliff:g> cihazınızda buna giriş mümkün deyil. Android TV cihazınızda sınayın."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"<xliff:g id="DEVICE">%1$s</xliff:g> cihazınızda buna giriş mümkün deyil. Planşetinizdə sınayın."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"<xliff:g id="DEVICE">%1$s</xliff:g> cihazınızda buna giriş mümkün deyil. Telefonunuzda sınayın."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Hazırda <xliff:g id="DEVICE">%1$s</xliff:g> cihazınızda buna giriş mümkün deyil. Android TV cihazınızda sınayın."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Hazırda <xliff:g id="DEVICE">%1$s</xliff:g> cihazınızda buna giriş mümkün deyil. Planşetinizdə sınayın."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Hazırda <xliff:g id="DEVICE">%1$s</xliff:g> cihazınızda buna giriş mümkün deyil. Telefonunuzda sınayın."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Hazırda <xliff:g id="DEVICE">%1$s</xliff:g> cihazınızda buna giriş mümkün deyil. Android TV cihazınızda sınayın."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Hazırda <xliff:g id="DEVICE">%1$s</xliff:g> cihazınızda buna giriş mümkün deyil. Planşetinizdə sınayın."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Hazırda <xliff:g id="DEVICE">%1$s</xliff:g> cihazınızda buna giriş mümkün deyil. Telefonunuzda sınayın."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Bu tətbiq əlavə təhlükəsizlik tələb edir. Android TV cihazınızda sınayın."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Bu tətbiq əlavə təhlükəsizlik tələb edir. Planşetinizdə sınayın."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Bu tətbiq əlavə təhlükəsizlik tələb edir. Telefonunuzda sınayın."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Bu tətbiq köhnə Android versiyası üçün hazırlanıb və düzgün işləməyə bilər. Güncəlləməni yoxlayın və ya developer ilə əlaqə saxlayın."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Güncəllənmə olmasını yoxlayın"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Yeni mesajlarınız var"</string>
diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml
index 971d23d..c39495d 100644
--- a/core/res/res/values-b+sr+Latn/strings.xml
+++ b/core/res/res/values-b+sr+Latn/strings.xml
@@ -615,6 +615,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Ovaj uređaj nema senzor za otisak prsta."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Senzor je privremeno onemogućen."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Ne možete da koristite senzor za otisak prsta. Posetite dobavljača za popravke"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Pritisnuto je dugme za uključivanje"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Prst <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Koristite otisak prsta"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Koristite otisak prsta ili zaključavanje ekrana"</string>
@@ -655,8 +656,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Gledajte pravo u telefon"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Uklonite sve što vam zaklanja lice."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Očistite gornji deo ekrana, uključujući crnu traku"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Lice mora da bude potpuno vidljivo"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Lice mora da bude potpuno vidljivo"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Pravljenje modela lica nije uspelo. Probajte ponovo."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Otkrivene su tamne naočari. Lice mora da bude potpuno vidljivo."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Otkriveno je prekrivanje lica. Lice mora da bude potpuno vidljivo."</string>
@@ -1942,18 +1945,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Kamera nije dostupna"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Nastavite na telefonu"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Mikrofon je nedostupan"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Podešavanja Android TV-a su nedostupna"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Podešavanja tableta su nedostupna"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Podešavanja telefona su nedostupna"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Ovoj aplikaciji ne može da se pristupi sa uređaja <xliff:g id="DEVICE">%1$s</xliff:g>. Probajte na Android TV uređaju."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Ovoj aplikaciji ne može da se pristupi sa uređaja <xliff:g id="DEVICE">%1$s</xliff:g>. Probajte na tabletu."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Ovoj aplikaciji ne može da se pristupi sa uređaja <xliff:g id="DEVICE">%1$s</xliff:g>. Probajte na telefonu."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Ovoj aplikaciji trenutno ne može da se pristupi sa uređaja <xliff:g id="DEVICE">%1$s</xliff:g>. Probajte na Android TV uređaju."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Ovoj aplikaciji trenutno ne može da se pristupi sa uređaja <xliff:g id="DEVICE">%1$s</xliff:g>. Probajte na tabletu."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Ovoj aplikaciji trenutno ne može da se pristupi sa uređaja <xliff:g id="DEVICE">%1$s</xliff:g>. Probajte na telefonu."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Ovoj aplikaciji trenutno ne može da se pristupi sa uređaja <xliff:g id="DEVICE">%1$s</xliff:g>. Probajte na Android TV uređaju."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Ovoj aplikaciji trenutno ne može da se pristupi sa uređaja <xliff:g id="DEVICE">%1$s</xliff:g>. Probajte na tabletu."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Ovoj aplikaciji trenutno ne može da se pristupi sa uređaja <xliff:g id="DEVICE">%1$s</xliff:g>. Probajte na telefonu."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Ova aplikacija zahteva dodatnu bezbednost. Probajte na Android TV uređaju."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Ova aplikacija zahteva dodatnu bezbednost. Probajte na tabletu."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Ova aplikacija zahteva dodatnu bezbednost. Probajte na telefonu."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Ova aplikacija je napravljena za stariju verziju Android-a, pa možda neće raditi ispravno. Potražite ažuriranja ili kontaktirajte programera."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Potraži ažuriranje"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Imate nove poruke"</string>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index 706c870..0377c092 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -616,6 +616,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"На гэтай прыладзе няма сканера адбіткаў пальцаў."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Датчык часова выключаны."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Не ўдалося скарыстаць сканер адбіткаў пальцаў. Звярніцеся ў сэрвісны цэнтр."</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Націснута кнопка сілкавання"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Палец <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Выкарыстоўваць адбітак пальца"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Выкарыстоўваць адбітак пальца ці блакіроўку экрана"</string>
@@ -656,8 +657,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Глядзіце прама на экран тэлефона"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Прыміце ўсё, што закрывае ваш твар."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Ачысціце ад бруду верхнюю частку экрана, у тым ліку чорную панэль"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Твар павінен быць цалкам бачным"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Твар павінен быць цалкам бачным"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Не ўдалося стварыць мадэль твару. Паўтарыце спробу."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Выяўлены цёмныя акуляры. Твар павінен быць цалкам бачным."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Нешта засланяе твар. Твар павінен быць цалкам бачным."</string>
@@ -1943,18 +1946,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Камера недаступная"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Працягніце на тэлефоне"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Мікрафон недаступны"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Налады Android TV недаступныя"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Налады планшэта недаступныя"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Налады тэлефона недаступныя"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Не ўдаецца атрымаць доступ з прылады \"<xliff:g id="DEVICE">%1$s</xliff:g>\". Паспрабуйце скарыстаць прыладу Android TV."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Не ўдаецца атрымаць доступ з прылады \"<xliff:g id="DEVICE">%1$s</xliff:g>\". Паспрабуйце скарыстаць планшэт."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Не ўдаецца атрымаць доступ з прылады \"<xliff:g id="DEVICE">%1$s</xliff:g>\". Паспрабуйце скарыстаць тэлефон."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Не ўдаецца атрымаць доступ з прылады \"<xliff:g id="DEVICE">%1$s</xliff:g>\". Паспрабуйце скарыстаць прыладу Android TV."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Не ўдаецца атрымаць доступ з прылады \"<xliff:g id="DEVICE">%1$s</xliff:g>\". Паспрабуйце скарыстаць планшэт."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Не ўдаецца атрымаць доступ з прылады \"<xliff:g id="DEVICE">%1$s</xliff:g>\". Паспрабуйце скарыстаць тэлефон."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Не ўдаецца атрымаць доступ з вашай прылады \"<xliff:g id="DEVICE">%1$s</xliff:g>\". Паспрабуйце скарыстаць прыладу Android TV."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Не ўдаецца атрымаць доступ з вашай прылады \"<xliff:g id="DEVICE">%1$s</xliff:g>\". Паспрабуйце скарыстаць планшэт."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Не ўдаецца атрымаць доступ з вашай прылады \"<xliff:g id="DEVICE">%1$s</xliff:g>\". Паспрабуйце скарыстаць тэлефон."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Гэтай праграме патрабуецца дадатковая бяспека. Паспрабуйце скарыстаць прыладу Android TV."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Гэтай праграме патрабуецца дадатковая бяспека. Паспрабуйце скарыстаць планшэт."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Гэтай праграме патрабуецца дадатковая бяспека. Паспрабуйце скарыстаць тэлефон."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Гэта праграма была створана для больш старой версіі Android і можа не працаваць належным чынам. Праверце наяўнасць абнаўленняў або звярніцеся да распрацоўшчыка."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Праверыць наяўнасць абнаўленняў"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"У вас ёсць новыя паведамленні"</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 6a8240a..c6df6a4 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Това устройство няма сензор за отпечатъци."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Сензорът е временно деактивиран."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Сензорът за отпечатъци не може да се използва. Посетете оторизиран сервиз."</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Бутонът за захранване е натиснат"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Пръст <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Използване на отпечатък"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Използване на отпечатък или опцията за заключване на екрана"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Гледайте директно към телефона си"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Премахнете всичко, което закрива лицето ви."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Почистете горната част на екрана си, включително черната лента"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Лицето ви трябва да е напълно видимо"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Лицето ви трябва да е напълно видимо"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Моделът на лицето ви не бе създаден. Опитайте отново."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Изглежда, че носите тъмни очила. То трябва да е напълно видимо."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Изглежда, че лицето ви е покрито. То трябва да е напълно видимо."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Няма достъп до камерата"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Продължете на телефона"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Микрофонът не е достъпен"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Настройките за Android TV не са достъпни"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Настройките за таблета не са достъпни"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Настройките за телефона не са достъпни"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Не може да се осъществи достъп от устройството ви <xliff:g id="DEVICE">%1$s</xliff:g>. Вместо това опитайте от устройството си с Android TV."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Не може да се осъществи достъп от устройството ви <xliff:g id="DEVICE">%1$s</xliff:g>. Вместо това опитайте от таблета си."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Не може да се осъществи достъп от устройството ви <xliff:g id="DEVICE">%1$s</xliff:g>. Вместо това опитайте от телефона си."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Понастоящем не може да се осъществи достъп от устройството ви <xliff:g id="DEVICE">%1$s</xliff:g>. Вместо това опитайте от устройството си с Android TV."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Понастоящем не може да се осъществи достъп от устройството ви <xliff:g id="DEVICE">%1$s</xliff:g>. Вместо това опитайте от таблета си."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Понастоящем не може да се осъществи достъп от устройството ви <xliff:g id="DEVICE">%1$s</xliff:g>. Вместо това опитайте от телефона си."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Понастоящем не може да се осъществи достъп от устройството ви <xliff:g id="DEVICE">%1$s</xliff:g>. Вместо това опитайте от устройството си с Android TV."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Понастоящем не може да се осъществи достъп от устройството ви <xliff:g id="DEVICE">%1$s</xliff:g>. Вместо това опитайте от таблета си."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Понастоящем не може да се осъществи достъп от устройството ви <xliff:g id="DEVICE">%1$s</xliff:g>. Вместо това опитайте от телефона си."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Това приложение изисква допълнителна стъпка за сигурност. Вместо това опитайте от устройството си с Android TV."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Това приложение изисква допълнителна стъпка за сигурност. Вместо това опитайте от таблета си."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Това приложение изисква допълнителна стъпка за сигурност. Вместо това опитайте от телефона си."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Това приложение бе създадено за по-стара версия на Android и може да не работи правилно. Опитайте да проверите за актуализации или се свържете с програмиста."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Проверка за актуализация"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Имате нови съобщения"</string>
diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml
index 40dab78..c0e2a06 100644
--- a/core/res/res/values-bn/strings.xml
+++ b/core/res/res/values-bn/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"এই ডিভাইসে আঙ্গুলের ছাপ নেওয়ার সেন্সর নেই।"</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"সেন্সর অস্থায়ীভাবে বন্ধ করা আছে।"</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"আঙ্গুলের ছাপের সেন্সর ব্যবহার করা যাচ্ছে না। একজন মেরামতি মিস্ত্রির কাছে যান"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"পাওয়ার বোতাম প্রেস করা হয়েছে"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"আঙ্গুল <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"আঙ্গুলের ছাপ ব্যবহার করুন"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"আঙ্গুলের ছাপ অথবা স্ক্রিন লক ব্যবহার করুন"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"আপনার ফোনের দিকে আরও সরাসরি তাকান"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"আপনার মুখকে আড়াল করে এমন সব কিছু সরিয়ে দিন।"</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"ব্ল্যাক বার সহ আপনার স্ক্রিনের উপরের অংশ মুছে ফেলুন"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"আপনার মুখ পুরোপুরি দৃশ্যমান হতে হবে"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"আপনার মুখ পুরোপুরি দৃশ্যমান হতে হবে"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"ফেস মডেল তৈরি করা যাচ্ছে না। আবার চেষ্টা করুন।"</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"কালো চশমা শনাক্ত করা হয়েছে। আপনার মুখ পুরোপুরি দৃশ্যমান হতে হবে।"</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"মুখে মাস্ক শনাক্ত করা হয়েছে। আপনার মুখ পুরোপুরি দৃশ্যমান হতে হবে।"</string>
@@ -1941,18 +1944,19 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"ক্যামেরা উপলভ্য নেই"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"ফোনে চালিয়ে যান"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"মাইক্রোফোন উপলভ্য নেই"</string>
+    <string name="app_streaming_blocked_title_for_playstore_dialog" msgid="8149823099822897538">"Play Store উপলভ্য নেই"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV-এর সেটিংস উপলভ্য নেই"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"ট্যাবলেটের সেটিংস উপলভ্য নেই"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"ফোনের সেটিংস উপলভ্য নেই"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"এটি আপনার <xliff:g id="DEVICE">%1$s</xliff:g>-এ অ্যাক্সেস করা যাবে না। পরিবর্তে আপনার Android TV ডিভাইস ব্যবহার করে দেখুন।"</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"এটি আপনার <xliff:g id="DEVICE">%1$s</xliff:g>-এ অ্যাক্সেস করা যাবে না। পরিবর্তে আপনার ট্যাবলেটে ব্যবহার করে দেখুন।"</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"এটি আপনার <xliff:g id="DEVICE">%1$s</xliff:g>-এ অ্যাক্সেস করা যাবে না। পরিবর্তে আপনার ফোনে ব্যবহার করে দেখুন।"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"এই সময়ে আপনার <xliff:g id="DEVICE">%1$s</xliff:g>-এ এটি অ্যাক্সেস করা যাবে না। পরিবর্তে আপনার Android TV ডিভাইস ব্যবহার করে দেখুন।"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"এই সময়ে আপনার <xliff:g id="DEVICE">%1$s</xliff:g>-এ এটি অ্যাক্সেস করা যাবে না। পরিবর্তে আপনার ট্যাবলেটে ব্যবহার করে দেখুন।"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"এই সময়ে আপনার <xliff:g id="DEVICE">%1$s</xliff:g>-এ এটি অ্যাক্সেস করা যাবে না। পরিবর্তে আপনার ফোনে ব্যবহার করে দেখুন।"</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"এই সময়ে আপনার <xliff:g id="DEVICE">%1$s</xliff:g>-এ এটি অ্যাক্সেস করা যাবে না। পরিবর্তে আপনার Android TV ডিভাইস ব্যবহার করে দেখুন।"</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"এই সময়ে আপনার <xliff:g id="DEVICE">%1$s</xliff:g>-এ এটি অ্যাক্সেস করা যাবে না। পরিবর্তে আপনার ট্যাবলেটে ব্যবহার করে দেখুন।"</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"এই সময়ে আপনার <xliff:g id="DEVICE">%1$s</xliff:g>-এ এটি অ্যাক্সেস করা যাবে না। পরিবর্তে আপনার ফোনে ব্যবহার করে দেখুন।"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"এই অ্যাপ অতিরিক্ত নিরাপত্তার জন্য অনুরোধ করছে। পরিবর্তে আপনার Android TV ডিভাইস ব্যবহার করে দেখুন।"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"এই অ্যাপ অতিরিক্ত নিরাপত্তার জন্য অনুরোধ করছে। পরিবর্তে আপনার ট্যাবলেটে ব্যবহার করে দেখুন।"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"এই অ্যাপ অতিরিক্ত নিরাপত্তার জন্য অনুরোধ করছে। পরিবর্তে আপনার ফোনে ব্যবহার করে দেখুন।"</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tv" msgid="820334666354451145">"আপনার <xliff:g id="DEVICE">%1$s</xliff:g>-এ এটি অ্যাক্সেস করা যাবে না। পরিবর্তে আপনার Android TV ডিভাইসে ব্যবহার করে দেখুন।"</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tablet" msgid="3286849551133045896">"আপনার <xliff:g id="DEVICE">%1$s</xliff:g>-এ এটি অ্যাক্সেস করা যাবে না। পরিবর্তে আপনার ট্যাবলেটে ব্যবহার করে দেখুন।"</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"আপনার <xliff:g id="DEVICE">%1$s</xliff:g>-এ এটি অ্যাক্সেস করা যাবে না। পরিবর্তে আপনার ফোনে ব্যবহার করে দেখুন।"</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"এই অ্যাপটি Android এর একটি পুরনো ভার্সনের জন্য তৈরি করা হয়েছিল, তাই এখানে সেটি ঠিকমতো কাজ নাও করতে পারে। আপডেট পাওয়া যাচ্ছে কিনা দেখুন বা ডেভেলপারের সাথে যোগাযোগ করুন।"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"আপডেট পাওয়া যাচ্ছে কিনা দেখুন"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"আপনার নতুন মেসেজ আছে"</string>
diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml
index 6bc16c1..51d8d25 100644
--- a/core/res/res/values-bs/strings.xml
+++ b/core/res/res/values-bs/strings.xml
@@ -615,6 +615,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Ovaj uređaj nema senzor za otisak prsta."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Senzor je privremeno onemogućen."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Nije moguće koristiti senzor za otisak prsta. Posjetite pružaoca usluga za popravke"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Dugme za uključivanje je pritisnuto"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Prst <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Koristi otisak prsta"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Koristi otisak prsta ili zaključavanje ekrana"</string>
@@ -655,8 +656,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Gledajte direktno u telefon"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Uklonite sve što vam zaklanja lice."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Očistite vrh ekrana, uključujući crnu traku"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Lice se mora u potpunosti vidjeti"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Lice se mora u potpunosti vidjeti"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Nije moguće kreirati model lica. Pokušajte ponovo."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Otkrivene su tamne naočale. Lice se mora u potpunosti vidjeti."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Otkriveno je pokrivalo preko lica. Lice se mora u potpunosti vidjeti."</string>
@@ -1942,18 +1945,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Kamera nije dostupna"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Nastavite na telefonu"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Mikrofon nije dostupan"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Postavke Android TV-a nisu dostupne"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Postavke tableta nisu dostupne"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Postavke telefona nisu dostupne"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Ne možete pristupiti ovoj aplikaciji na uređaju <xliff:g id="DEVICE">%1$s</xliff:g>. Umjesto toga pokušajte na uređaju Android TV."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Ne možete pristupiti ovoj aplikaciji na uređaju <xliff:g id="DEVICE">%1$s</xliff:g>. Umjesto toga pokušajte na tabletu."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Ne možete pristupiti ovoj aplikaciji na uređaju <xliff:g id="DEVICE">%1$s</xliff:g>. Umjesto toga pokušajte na telefonu."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Trenutno ne možete pristupiti ovoj aplikaciji na uređaju <xliff:g id="DEVICE">%1$s</xliff:g>. Umjesto toga pokušajte na uređaju Android TV."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Trenutno ne možete pristupiti ovoj aplikaciji na uređaju <xliff:g id="DEVICE">%1$s</xliff:g>. Umjesto toga pokušajte na tabletu."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Trenutno ne možete pristupiti ovoj aplikaciji na uređaju <xliff:g id="DEVICE">%1$s</xliff:g>. Umjesto toga pokušajte na telefonu."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Trenutno ne možete pristupiti ovoj aplikaciji na uređaju <xliff:g id="DEVICE">%1$s</xliff:g>. Umjesto toga pokušajte na uređaju Android TV."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Trenutno ne možete pristupiti ovoj aplikaciji na uređaju <xliff:g id="DEVICE">%1$s</xliff:g>. Umjesto toga pokušajte na tabletu."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Trenutno ne možete pristupiti ovoj aplikaciji na uređaju <xliff:g id="DEVICE">%1$s</xliff:g>. Umjesto toga pokušajte na telefonu."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Ova aplikacija zahtijeva dodatnu sigurnost. Umjesto toga pokušajte na uređaju Android TV."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Ova aplikacija zahtijeva dodatnu sigurnost. Umjesto toga pokušajte na tabletu."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Ova aplikacija zahtijeva dodatnu sigurnost. Umjesto toga pokušajte na telefonu."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Ova aplikacija je pravljena za stariju verziju Androida i možda neće ispravno raditi. Provjerite jesu li dostupna ažuriranja ili kontaktirajte programera."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Provjeri je li dostupno ažuriranje"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Imate nove poruke"</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 1970123..f555a56 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Aquest dispositiu no té sensor d\'empremtes digitals."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"El sensor està desactivat temporalment."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"No es pot utilitzar el sensor d\'empremtes digitals. Visita un proveïdor de reparacions."</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"S\'ha premut el botó d\'engegada"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Dit <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Utilitza l\'empremta digital"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Utilitza l\'empremta digital o el bloqueig de pantalla"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Mira més directament al telèfon"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Treu qualsevol cosa que amagui la teva cara."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Neteja la part superior de la pantalla, inclosa la barra negra"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"La cara ha de ser completament visible"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"La cara ha de ser completament visible"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"No es pot crear el model facial. Torna-ho a provar."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"S\'han detectat ulleres fosques. La cara ha de ser completament visible."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"S\'ha detectat una mascareta. La cara ha de ser completament visible."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"La càmera no està disponible"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Continua al telèfon"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"El micròfon no està disponible"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"La configuració d\'Android TV no està disponible"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"La configuració de la tauleta no està disponible"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"La configuració del telèfon no està disponible"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"No es pot accedir a aquesta aplicació al dispositiu <xliff:g id="DEVICE">%1$s</xliff:g>. Prova-ho al dispositiu Android TV."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"No es pot accedir a aquesta aplicació al dispositiu <xliff:g id="DEVICE">%1$s</xliff:g>. Prova-ho a la tauleta."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"No es pot accedir a aquesta aplicació al dispositiu <xliff:g id="DEVICE">%1$s</xliff:g>. Prova-ho al telèfon."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"En aquests moments, no es pot accedir a aquesta aplicació al dispositiu <xliff:g id="DEVICE">%1$s</xliff:g>. Prova-ho al dispositiu Android TV."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"En aquests moments, no es pot accedir a aquesta aplicació al dispositiu <xliff:g id="DEVICE">%1$s</xliff:g>. Prova-ho a la tauleta."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"En aquests moments, no es pot accedir a aquesta aplicació al dispositiu <xliff:g id="DEVICE">%1$s</xliff:g>. Prova-ho al telèfon."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"En aquests moments, no es pot accedir a aquesta aplicació al dispositiu <xliff:g id="DEVICE">%1$s</xliff:g>. Prova-ho al dispositiu Android TV."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"En aquests moments, no es pot accedir a aquesta aplicació al dispositiu <xliff:g id="DEVICE">%1$s</xliff:g>. Prova-ho a la tauleta."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"En aquests moments, no es pot accedir a aquesta aplicació al dispositiu <xliff:g id="DEVICE">%1$s</xliff:g>. Prova-ho al telèfon."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Aquesta aplicació sol·licita seguretat addicional. Prova-ho al dispositiu Android TV."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Aquesta aplicació sol·licita seguretat addicional. Prova-ho a la tauleta."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Aquesta aplicació sol·licita seguretat addicional. Prova-ho al telèfon."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Aquesta aplicació es va crear per a una versió antiga d\'Android i pot ser que no funcioni correctament. Prova de cercar actualitzacions o contacta amb el desenvolupador."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Cerca actualitzacions"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Tens missatges nous"</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index b57d3ec1..01a448b 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -616,6 +616,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Toto zařízení nemá snímač otisků prstů."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Senzor je dočasně deaktivován."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Snímač otisků prstů nelze použít. Navštivte servis"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Bylo stisknut vypínač"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Prst <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Použít otisk prstu"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Použít otisk prstu nebo zámek obrazovky"</string>
@@ -656,8 +657,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Dívejte se přímo na telefon"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Odstraňte vše, co vám zakrývá obličej."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Očistěte horní část obrazovky včetně černé části"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Obličej musí být plně viditelný"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Obličej musí být plně viditelný"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Model se nepodařilo vytvořit. Zkuste to znovu."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Byly zjištěny tmavé brýle. Obličej musí být plně viditelný."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Byl zjištěn zakrytý obličej. Obličej musí být plně viditelný."</string>
@@ -1943,18 +1946,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Kamera není k dispozici"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Pokračujte na telefonu"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Mikrofon není k dispozici"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Nastavení Android TV není k dispozici"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Nastavení tabletu není k dispozici"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Nastavení telefonu není k dispozici"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Tato položka na vašem zařízení <xliff:g id="DEVICE">%1$s</xliff:g> není k dispozici. Zkuste to na zařízení Android TV."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Tato položka na vašem zařízení <xliff:g id="DEVICE">%1$s</xliff:g> není k dispozici. Zkuste to na tabletu."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Tato položka na vašem zařízení <xliff:g id="DEVICE">%1$s</xliff:g> není k dispozici. Zkuste to na telefonu."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Tato položka na vašem zařízení <xliff:g id="DEVICE">%1$s</xliff:g> v tuto chvíli není k dispozici. Zkuste to na zařízení Android TV."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Tato položka na vašem zařízení <xliff:g id="DEVICE">%1$s</xliff:g> v tuto chvíli není k dispozici. Zkuste to na tabletu."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Tato položka na vašem zařízení <xliff:g id="DEVICE">%1$s</xliff:g> v tuto chvíli není k dispozici. Zkuste to na telefonu."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Tato položka na vašem zařízení <xliff:g id="DEVICE">%1$s</xliff:g> v tuto chvíli není k dispozici. Zkuste to na zařízení Android TV."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Tato položka na vašem zařízení <xliff:g id="DEVICE">%1$s</xliff:g> v tuto chvíli není k dispozici. Zkuste to na tabletu."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Tato položka na vašem zařízení <xliff:g id="DEVICE">%1$s</xliff:g> v tuto chvíli není k dispozici. Zkuste to na telefonu."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Tato aplikace požaduje další zabezpečení. Zkuste to na zařízení Android TV."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Tato aplikace požaduje další zabezpečení. Zkuste to na tabletu."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Tato aplikace požaduje další zabezpečení. Zkuste to na telefonu."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Tato aplikace byla vytvořena pro starší verzi systému Android a nemusí fungovat správně. Zkuste vyhledat aktualizace, případně kontaktujte vývojáře."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Zkontrolovat aktualizace"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Máte nové zprávy"</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 4db987f..3aff205 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Denne enhed har ingen fingeraftrykslæser."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensoren er midlertidigt deaktiveret."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Fingeraftrykslæseren kan ikke bruges. Få den repareret"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Der blev trykket på afbryderknappen"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Fingeraftryk <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Brug fingeraftryk"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Brug fingeraftryk eller skærmlås"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Kig mere direkte på din telefon"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Hvis noget skjuler dit ansigt, skal du fjerne det."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Rengør toppen af din skærm, inkl. den sorte bjælke"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Dit ansigt skal være helt synligt"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Dit ansigt skal være helt synligt"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Din ansigtsmodel kan ikke oprettes. Prøv igen."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Mørke briller er registreret. Dit ansigt skal være helt synligt."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Ansigtsdækning er registreret. Dit ansigt skal være helt synligt."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Kameraet er ikke tilgængeligt"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Fortsæt på telefonen"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Mikrofonen er ikke tilgængelig"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV-indstillingerne er ikke tilgængelige"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Tabletindstillingerne er ikke tilgængelige"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Telefonindstillingerne er ikke tilgængelige"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Du har ikke adgang til denne app på din <xliff:g id="DEVICE">%1$s</xliff:g>. Prøv på din Android TV-enhed i stedet."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Du har ikke adgang til denne app på din <xliff:g id="DEVICE">%1$s</xliff:g>. Prøv på din tablet i stedet."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Du har ikke adgang til denne app på din <xliff:g id="DEVICE">%1$s</xliff:g>. Prøv på din telefon i stedet."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Du har ikke adgang til denne app på din <xliff:g id="DEVICE">%1$s</xliff:g> på nuværende tidspunkt. Prøv på din Android TV-enhed i stedet."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Du har ikke adgang til denne app på din <xliff:g id="DEVICE">%1$s</xliff:g> på nuværende tidspunkt. Prøv på din tablet i stedet."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Du har ikke adgang til denne app på din <xliff:g id="DEVICE">%1$s</xliff:g> på nuværende tidspunkt. Prøv på din telefon i stedet."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Du har ikke adgang til denne app på din <xliff:g id="DEVICE">%1$s</xliff:g> på nuværende tidspunkt. Prøv på din Android TV-enhed i stedet."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Du har ikke adgang til denne app på din <xliff:g id="DEVICE">%1$s</xliff:g> på nuværende tidspunkt. Prøv på din tablet i stedet."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Du har ikke adgang til denne app på din <xliff:g id="DEVICE">%1$s</xliff:g> på nuværende tidspunkt. Prøv på din telefon i stedet."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Denne app anmoder om yderligere sikkerhed. Prøv på din Android TV-enhed i stedet."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Denne app anmoder om yderligere sikkerhed. Prøv på din tablet i stedet."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Denne app anmoder om yderligere sikkerhed. Prøv på din telefon i stedet."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Denne app er lavet til en ældre version af Android og fungerer muligvis ikke korrekt. Prøv at søge efter opdateringer, eller kontakt udvikleren."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Søg efter opdatering"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Du har nye beskeder"</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 4a6f837..98413f7 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Dieses Gerät hat keinen Fingerabdrucksensor."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Der Sensor ist vorübergehend deaktiviert."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Der Fingerabdrucksensor kann nicht verwendet werden. Suche einen Reparaturdienstleister auf."</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Ein-/Aus-Taste wurde gedrückt"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Finger <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Fingerabdruck verwenden"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Fingerabdruck oder Displaysperre verwenden"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Sieh direkt auf dein Smartphone"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Entferne alles, was dein Gesicht verdeckt."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Reinige den oberen Teil deines Bildschirms, einschließlich der schwarzen Leiste"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Dein Gesicht muss vollständig sichtbar sein"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Dein Gesicht muss vollständig sichtbar sein"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Dein Gesichtsmodell kann nicht erstellt werden. Versuche es noch einmal."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Dunkle Brille erkannt. Dein Gesicht muss vollständig sichtbar sein."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Dein Gesicht ist bedeckt. Es muss vollständig sichtbar sein."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Kamera nicht verfügbar"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Weiter auf Smartphone"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Mikrofon nicht verfügbar"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV-Einstellungen nicht verfügbar"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Tablet-Einstellungen nicht verfügbar"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Smartphone-Einstellungen nicht verfügbar"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Auf deinem <xliff:g id="DEVICE">%1$s</xliff:g> ist kein Zugriff möglich. Versuch es stattdessen auf deinem Android TV-Gerät."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Auf deinem <xliff:g id="DEVICE">%1$s</xliff:g> ist kein Zugriff möglich. Versuch es stattdessen auf deinem Tablet."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Auf deinem <xliff:g id="DEVICE">%1$s</xliff:g> ist kein Zugriff möglich. Versuch es stattdessen auf deinem Smartphone."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Auf deinem <xliff:g id="DEVICE">%1$s</xliff:g> ist derzeit kein Zugriff möglich. Versuch es stattdessen auf deinem Android TV-Gerät."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Auf deinem <xliff:g id="DEVICE">%1$s</xliff:g> ist derzeit kein Zugriff möglich. Versuch es stattdessen auf deinem Tablet."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Auf deinem <xliff:g id="DEVICE">%1$s</xliff:g> ist derzeit kein Zugriff möglich. Versuch es stattdessen auf deinem Smartphone."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Auf deinem <xliff:g id="DEVICE">%1$s</xliff:g> ist derzeit kein Zugriff möglich. Versuche es stattdessen auf deinem Android TV-Gerät."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Auf deinem <xliff:g id="DEVICE">%1$s</xliff:g> ist derzeit kein Zugriff möglich. Versuche es stattdessen auf deinem Tablet."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Auf deinem <xliff:g id="DEVICE">%1$s</xliff:g> ist derzeit kein Zugriff möglich. Versuche es stattdessen auf deinem Smartphone."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Diese App fordert zusätzliche Sicherheit an. Versuch es stattdessen auf deinem Android TV-Gerät."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Diese App fordert zusätzliche Sicherheit an. Versuch es stattdessen auf deinem Tablet."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Diese App fordert zusätzliche Sicherheit an. Versuch es stattdessen auf deinem Smartphone."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Diese App wurde für eine ältere Android-Version entwickelt und funktioniert möglicherweise nicht mehr richtig. Prüfe, ob Updates verfügbar sind oder kontaktiere den Entwickler."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Auf Updates prüfen"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Du hast neue Nachrichten"</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 8389e30..7cc2bcb 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Αυτή η συσκευή δεν διαθέτει αισθητήρα δακτυλικού αποτυπώματος."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Ο αισθητήρας απενεργοποιήθηκε προσωρινά."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Δεν είναι δυνατή η χρήση του αισθητήρα δακτυλικών αποτυπωμάτων. Επισκεφτείτε έναν πάροχο υπηρεσιών επισκευής."</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Το κουμπί λειτουργίας πατήθηκε"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Δάχτυλο <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Χρήση δακτυλικού αποτυπώματος"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Χρήση δακτυλικού αποτυπώματος ή κλειδώματος οθόνης"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Κοιτάξτε απευθείας το τηλέφωνό σας"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Απομακρύνετε οτιδήποτε κρύβει το πρόσωπό σας."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Καθαρίστε το επάνω μέρος της οθόνης σας, συμπεριλαμβανομένης της μαύρης γραμμής"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Το πρόσωπό σας πρέπει να φαίνεται πλήρως."</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Το πρόσωπό σας πρέπει να φαίνεται πλήρως."</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Αδύνατη η δημιουργία του μοντέλου προσώπου. Δοκιμάστε ξανά."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Ανιχνεύτηκαν σκούρα γυαλιά. Το πρόσωπό σας πρέπει να φαίνεται πλήρως."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Ανιχνεύτηκε κάλυμμα προσώπου. Το πρόσωπό σας πρέπει να φαίνεται πλήρως."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Η κάμερα δεν είναι διαθέσιμη"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Συνέχεια στο τηλέφωνο"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Το μικρόφωνο δεν είναι διαθέσιμο"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Οι ρυθμίσεις του Android TV δεν είναι διαθέσιμες"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Οι ρυθμίσεις του tablet δεν είναι διαθέσιμες"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Οι ρυθμίσεις του τηλεφώνου δεν είναι διαθέσιμες"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Δεν είναι δυνατή η πρόσβαση στη συγκεκριμένη εφαρμογή από τη συσκευή <xliff:g id="DEVICE">%1$s</xliff:g>. Δοκιμάστε στη συσκευή Android TV."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Δεν είναι δυνατή η πρόσβαση στη συγκεκριμένη εφαρμογή από τη συσκευή <xliff:g id="DEVICE">%1$s</xliff:g>. Δοκιμάστε στο tablet σας."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Δεν είναι δυνατή η πρόσβαση στη συγκεκριμένη εφαρμογή από τη συσκευή <xliff:g id="DEVICE">%1$s</xliff:g>. Δοκιμάστε στο τηλέφωνό σας."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Δεν είναι δυνατή η πρόσβαση στη συγκεκριμένη εφαρμογή από τη συσκευή <xliff:g id="DEVICE">%1$s</xliff:g> αυτήν τη στιγμή. Δοκιμάστε στη συσκευή Android TV."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Δεν είναι δυνατή η πρόσβαση στη συγκεκριμένη εφαρμογή από τη συσκευή <xliff:g id="DEVICE">%1$s</xliff:g> αυτήν τη στιγμή. Δοκιμάστε στο tablet σας."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Δεν είναι δυνατή η πρόσβαση στη συγκεκριμένη εφαρμογή από τη συσκευή <xliff:g id="DEVICE">%1$s</xliff:g> αυτήν τη στιγμή. Δοκιμάστε στο τηλέφωνό σας."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Δεν είναι δυνατή η πρόσβαση στη συγκεκριμένη εφαρμογή από τη συσκευή <xliff:g id="DEVICE">%1$s</xliff:g> αυτήν τη στιγμή. Δοκιμάστε στη συσκευή Android TV."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Δεν είναι δυνατή η πρόσβαση στη συγκεκριμένη εφαρμογή από τη συσκευή <xliff:g id="DEVICE">%1$s</xliff:g> αυτήν τη στιγμή. Δοκιμάστε στο tablet σας."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Δεν είναι δυνατή η πρόσβαση στη συγκεκριμένη εφαρμογή από τη συσκευή <xliff:g id="DEVICE">%1$s</xliff:g> αυτήν τη στιγμή. Δοκιμάστε στο τηλέφωνό σας."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Αυτή η εφαρμογή ζητά πρόσθετη ασφάλεια. Δοκιμάστε στη συσκευή Android TV."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Αυτή η εφαρμογή ζητά πρόσθετη ασφάλεια. Δοκιμάστε στο tablet σας."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Αυτή η εφαρμογή ζητά πρόσθετη ασφάλεια. Δοκιμάστε στο τηλέφωνό σας."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Αυτή η εφαρμογή δημιουργήθηκε για παλαιότερη έκδοση του Android και μπορεί να μην λειτουργεί σωστά. Δοκιμάστε να ελέγξετε εάν υπάρχουν ενημερώσεις ή επικοινωνήστε με τον προγραμματιστή."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Έλεγχος για ενημέρωση"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Έχετε νέα μηνύματα"</string>
diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml
index 180ff8f..8863c34 100644
--- a/core/res/res/values-en-rAU/strings.xml
+++ b/core/res/res/values-en-rAU/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"This device does not have a fingerprint sensor."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor temporarily disabled."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Can’t use fingerprint sensor. Visit a repair provider"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Power button pressed"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Finger <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Use fingerprint"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Use fingerprint or screen lock"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Look more directly at your phone"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Remove anything hiding your face."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Clean the top of your screen, including the black bar"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Your face must be fully visible"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Your face must be fully visible"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Can’t create your face model. Try again."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Dark glasses detected. Your face must be fully visible."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Face covering detected. Your face must be fully visible."</string>
@@ -1941,18 +1944,19 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Camera unavailable"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Continue on phone"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Microphone unavailable"</string>
+    <string name="app_streaming_blocked_title_for_playstore_dialog" msgid="8149823099822897538">"Play Store unavailable"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV settings unavailable"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Tablet settings unavailable"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Phone settings unavailable"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g>. Try on your Android TV device instead."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g>. Try on your tablet instead."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g>. Try on your phone instead."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g> at this time. Try on your Android TV device instead."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g> at this time. Try on your tablet instead."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g> at this time. Try on your phone instead."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g> at this time. Try on your Android TV device instead."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g> at this time. Try on your tablet instead."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g> at this time. Try on your phone instead."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"This app is requesting additional security. Try on your Android TV device instead."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"This app is requesting additional security. Try on your tablet instead."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"This app is requesting additional security. Try on your phone instead."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tv" msgid="820334666354451145">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g>. Try on your Android TV device instead."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tablet" msgid="3286849551133045896">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g>. Try on your tablet instead."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g>. Try on your phone instead."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"This app was built for an older version of Android and may not work properly. Try checking for updates or contact the developer."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Check for update"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"You have new messages"</string>
diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml
index 12821fe..1204d01 100644
--- a/core/res/res/values-en-rCA/strings.xml
+++ b/core/res/res/values-en-rCA/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"This device does not have a fingerprint sensor."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor temporarily disabled."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Can’t use fingerprint sensor. Visit a repair provider"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Power button pressed"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Finger <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Use fingerprint"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Use fingerprint or screen lock"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Look more directly at your phone"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Remove anything hiding your face."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Clean the top of your screen, including the black bar"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Your face must be fully visible"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Your face must be fully visible"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Can’t create your face model. Try again."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Dark glasses detected. Your face must be fully visible."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Face covering detected. Your face must be fully visible."</string>
@@ -1941,18 +1944,19 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Camera unavailable"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Continue on phone"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Microphone unavailable"</string>
+    <string name="app_streaming_blocked_title_for_playstore_dialog" msgid="8149823099822897538">"Play Store unavailable"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV settings unavailable"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Tablet settings unavailable"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Phone settings unavailable"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g>. Try on your Android TV device instead."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g>. Try on your tablet instead."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g>. Try on your phone instead."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g> at this time. Try on your Android TV device instead."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g> at this time. Try on your tablet instead."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g> at this time. Try on your phone instead."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g> at this time. Try on your Android TV device instead."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g> at this time. Try on your tablet instead."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g> at this time. Try on your phone instead."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"This app is requesting additional security. Try on your Android TV device instead."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"This app is requesting additional security. Try on your tablet instead."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"This app is requesting additional security. Try on your phone instead."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tv" msgid="820334666354451145">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g>. Try on your Android TV device instead."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tablet" msgid="3286849551133045896">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g>. Try on your tablet instead."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g>. Try on your phone instead."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"This app was built for an older version of Android and may not work properly. Try checking for updates or contact the developer."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Check for update"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"You have new messages"</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index f4f7e80..753be10 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"This device does not have a fingerprint sensor."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor temporarily disabled."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Can’t use fingerprint sensor. Visit a repair provider"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Power button pressed"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Finger <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Use fingerprint"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Use fingerprint or screen lock"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Look more directly at your phone"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Remove anything hiding your face."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Clean the top of your screen, including the black bar"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Your face must be fully visible"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Your face must be fully visible"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Can’t create your face model. Try again."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Dark glasses detected. Your face must be fully visible."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Face covering detected. Your face must be fully visible."</string>
@@ -1941,18 +1944,19 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Camera unavailable"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Continue on phone"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Microphone unavailable"</string>
+    <string name="app_streaming_blocked_title_for_playstore_dialog" msgid="8149823099822897538">"Play Store unavailable"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV settings unavailable"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Tablet settings unavailable"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Phone settings unavailable"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g>. Try on your Android TV device instead."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g>. Try on your tablet instead."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g>. Try on your phone instead."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g> at this time. Try on your Android TV device instead."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g> at this time. Try on your tablet instead."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g> at this time. Try on your phone instead."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g> at this time. Try on your Android TV device instead."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g> at this time. Try on your tablet instead."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g> at this time. Try on your phone instead."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"This app is requesting additional security. Try on your Android TV device instead."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"This app is requesting additional security. Try on your tablet instead."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"This app is requesting additional security. Try on your phone instead."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tv" msgid="820334666354451145">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g>. Try on your Android TV device instead."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tablet" msgid="3286849551133045896">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g>. Try on your tablet instead."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g>. Try on your phone instead."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"This app was built for an older version of Android and may not work properly. Try checking for updates or contact the developer."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Check for update"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"You have new messages"</string>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 631cf2b..8db1151 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"This device does not have a fingerprint sensor."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor temporarily disabled."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Can’t use fingerprint sensor. Visit a repair provider"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Power button pressed"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Finger <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Use fingerprint"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Use fingerprint or screen lock"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Look more directly at your phone"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Remove anything hiding your face."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Clean the top of your screen, including the black bar"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Your face must be fully visible"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Your face must be fully visible"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Can’t create your face model. Try again."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Dark glasses detected. Your face must be fully visible."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Face covering detected. Your face must be fully visible."</string>
@@ -1941,18 +1944,19 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Camera unavailable"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Continue on phone"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Microphone unavailable"</string>
+    <string name="app_streaming_blocked_title_for_playstore_dialog" msgid="8149823099822897538">"Play Store unavailable"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV settings unavailable"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Tablet settings unavailable"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Phone settings unavailable"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g>. Try on your Android TV device instead."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g>. Try on your tablet instead."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g>. Try on your phone instead."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g> at this time. Try on your Android TV device instead."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g> at this time. Try on your tablet instead."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g> at this time. Try on your phone instead."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g> at this time. Try on your Android TV device instead."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g> at this time. Try on your tablet instead."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g> at this time. Try on your phone instead."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"This app is requesting additional security. Try on your Android TV device instead."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"This app is requesting additional security. Try on your tablet instead."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"This app is requesting additional security. Try on your phone instead."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tv" msgid="820334666354451145">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g>. Try on your Android TV device instead."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tablet" msgid="3286849551133045896">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g>. Try on your tablet instead."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"This can’t be accessed on your <xliff:g id="DEVICE">%1$s</xliff:g>. Try on your phone instead."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"This app was built for an older version of Android and may not work properly. Try checking for updates or contact the developer."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Check for update"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"You have new messages"</string>
diff --git a/core/res/res/values-en-rXC/strings.xml b/core/res/res/values-en-rXC/strings.xml
index 3bb25cb..4f643c3 100644
--- a/core/res/res/values-en-rXC/strings.xml
+++ b/core/res/res/values-en-rXC/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‎‎‎‏‎‎‎‏‎‏‏‎‏‏‏‏‎‎‎‏‎‎‎‏‏‏‏‎‏‎‎‏‏‎‎‏‎‏‎‎‎‎‎‎‎‎‏‏‎‎‏‎‏‏‎‎This device does not have a fingerprint sensor.‎‏‎‎‏‎"</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‏‏‏‎‎‎‏‏‎‎‏‎‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎‏‏‎‎‎‏‎‎‎‏‏‏‎‎‎‎‏‎‏‏‏‎‎‎‏‎Sensor temporarily disabled.‎‏‎‎‏‎"</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‏‏‏‎‎‎‏‏‏‎‎‎‏‎‎‏‎‎‏‏‎‏‏‎‏‎‎‎‏‏‏‎‏‏‏‎‎‎‎Can’t use fingerprint sensor. Visit a repair provider‎‏‎‎‏‎"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‎‎‎‏‎‏‏‎‎‏‎‏‏‏‎‏‎‎‎‎‎‎‎‎‏‏‎‎‎‎‎‏‏‎‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‎‎‎‏‏‎‎Power button pressed‎‏‎‎‏‎"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‏‏‎‎‏‎‏‎‏‎‎‏‎‎‏‎‏‏‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‏‎‎‏‎‎Finger ‎‏‎‎‏‏‎<xliff:g id="FINGERID">%d</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‎‏‎‎‎‎‏‏‎‏‎‏‏‎‏‎‏‏‎‎‎‏‏‎‎‎‏‏‏‎‎‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‎‏‎‎‏‎‎‎Use fingerprint‎‏‎‎‏‎"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‎‎‎‏‎‏‏‎‎‎‏‎‎‏‎‏‏‏‎‎‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‎‏‏‏‏‏‎‎‏‏‏‎‏‎‏‏‎Use fingerprint or screen lock‎‏‎‎‏‎"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‏‎‎‎‎‏‎‎‏‏‏‎‏‎‎‎‏‏‎‎‏‏‎‎‎‎‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‎‏‏‏‎‏‎‏‎‏‎‎Look more directly at your phone‎‏‎‎‏‎"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‎‎‏‎‏‏‎‎‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‎‎‏‎‎‎‎‎‏‎‏‏‏‏‎Remove anything hiding your face.‎‏‎‎‏‎"</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‏‏‎‏‎‎‎‏‎‎‎‏‎‏‎‏‎‏‏‎‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎‏‏‏‎‎Clean the top of your screen, including the black bar‎‏‎‎‏‎"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‎‏‏‎‏‏‎‏‎‎‎‎‎‏‎‏‎‏‎‏‏‎‏‏‎‏‎‏‏‏‏‏‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‎‎‎Your face must be fully visible‎‏‎‎‏‎"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‏‎‎‎‏‏‎‎‎‏‏‏‎‎‎‏‎‎‏‎‏‎‎‏‎‎‏‏‎‎‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎‏‏‏‏‎‏‏‏‏‏‏‎Your face must be fully visible‎‏‎‎‏‎"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‎‏‏‎‎‏‎‏‏‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎Can’t create your face model. Try again.‎‏‎‎‏‎"</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‏‎‏‏‎‎‎‎‎‏‏‎‏‎‎‏‏‎‎‎‏‎‏‏‎‏‎‏‎‏‏‏‎‏‎‎‎Dark glasses detected. Your face must be fully visible.‎‏‎‎‏‎"</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‎‏‏‎‎‎‏‎‏‎‏‎‏‏‏‎‎‏‏‏‎‏‎‎‎‎‎‎‎‏‏‎‎‏‏‎‏‎‎‎‏‎‎‎‏‏‎‎Face covering detected. Your face must be fully visible.‎‏‎‎‏‎"</string>
@@ -1941,18 +1944,19 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‏‏‏‏‎‎‏‏‎‏‎‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‎‏‏‏‎‎‎‏‎‎‎‎‎‎‏‏‎‏‎‏‎‎‎‏‎‎‏‎Camera unavailable‎‏‎‎‏‎"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‎‏‏‏‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‏‏‎‏‏‎‏‎‏‏‏‎‏‎‎‎‎‎‎‏‎‏‏‏‏‏‏‏‏‎Continue on phone‎‏‎‎‏‎"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‏‏‏‎‎‏‏‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‎‎‏‏‎‎Microphone unavailable‎‏‎‎‏‎"</string>
+    <string name="app_streaming_blocked_title_for_playstore_dialog" msgid="8149823099822897538">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‎‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‎‏‏‏‏‎‎‏‏‎‎‎‎‎‏‎‎Play Store unavailable‎‏‎‎‏‎"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‎‏‏‏‎‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‎‎‏‎‏‎‏‎‏‎‎‎‏‎‎‎‏‎‏‎‏‎‎‏‎‏‏‎‏‏‏‎‏‎‏‎Android TV settings unavailable‎‏‎‎‏‎"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‏‎‎‏‏‏‎‏‏‏‏‎‏‎‎‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‏‎‏‎‎‏‎‎‏‏‎‎‏‏‎‎‏‏‏‎Tablet settings unavailable‎‏‎‎‏‎"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‏‎‎‏‏‎‎‏‎‏‎‎‏‏‎‏‎‏‏‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‎Phone settings unavailable‎‏‎‎‏‎"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‏‏‎‏‎‏‏‏‏‎‏‏‎‎‏‏‎‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‏‎‎‎‏‎‎‎‏‏‎‎‏‎‎‏‎‏‏‏‏‎This can’t be accessed on your ‎‏‎‎‏‏‎<xliff:g id="DEVICE">%1$s</xliff:g>‎‏‎‎‏‏‏‎. Try on your Android TV device instead.‎‏‎‎‏‎"</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎‎‏‎‏‎‎‏‎‎‎‏‎‎‎‏‎‎‏‏‏‎‎‎‏‎‎‎‏‎‏‎‏‎‏‏‏‎‏‏‏‎‎This can’t be accessed on your ‎‏‎‎‏‏‎<xliff:g id="DEVICE">%1$s</xliff:g>‎‏‎‎‏‏‏‎. Try on your tablet instead.‎‏‎‎‏‎"</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‎‎‏‏‏‏‏‎‎‎‏‎‎‏‎‏‏‏‎‏‏‏‎‎‎‎‏‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‎‏‏‎‎‏‎‏‏‎‏‎This can’t be accessed on your ‎‏‎‎‏‏‎<xliff:g id="DEVICE">%1$s</xliff:g>‎‏‎‎‏‏‏‎. Try on your phone instead.‎‏‎‎‏‎"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‎‏‎‏‎‏‏‏‏‏‎‎‎‏‏‎‏‏‎‏‏‎‎‎‏‏‏‏‏‎‏‎‏‏‎‎‏‏‎‏‏‏‎‏‏‎‎‏‏‎‏‏‎This can’t be accessed on your ‎‏‎‎‏‏‎<xliff:g id="DEVICE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ at this time. Try on your Android TV device instead.‎‏‎‎‏‎"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‎‏‏‏‎‏‏‎‎‏‏‎‏‎‎‏‎‎‎‎‎‏‏‎‎‎‏‏‏‏‎‏‏‏‎‏‎‏‏‎‎‎‎‎‎‎‎‎This can’t be accessed on your ‎‏‎‎‏‏‎<xliff:g id="DEVICE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ at this time. Try on your tablet instead.‎‏‎‎‏‎"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‏‏‎‏‏‎‎‎‏‏‏‎‎‎‏‎‎‎‏‎‏‏‎‏‏‎‎‏‏‎‏‏‏‎‎‏‏‎‎‏‎‎‎‏‏‏‎‎‎‎This can’t be accessed on your ‎‏‎‎‏‏‎<xliff:g id="DEVICE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ at this time. Try on your phone instead.‎‏‎‎‏‎"</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‏‏‎‏‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‏‎‏‎‏‎‎‎‏‎‏‎‏‏‎‏‎‎‏‎‏‎‎‏‎This can’t be accessed on your ‎‏‎‎‏‏‎<xliff:g id="DEVICE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ at this time. Try on your Android TV device instead.‎‏‎‎‏‎"</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‏‏‏‎‏‏‎‎‏‏‎‎‏‏‎‎‎‏‎‏‎‎‎‏‏‎‏‏‎‎‎‏‏‎‏‎‏‎‏‏‏‎‏‎‏‎‎‎‏‏‏‎‎This can’t be accessed on your ‎‏‎‎‏‏‎<xliff:g id="DEVICE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ at this time. Try on your tablet instead.‎‏‎‎‏‎"</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‏‎‎‏‏‏‎‎‎‎‏‏‎‏‎‏‎‏‎‎‏‏‏‏‎‎‏‏‎‎‏‏‎‎‏‏‎‎‎‎‎‎‎‏‏‏‎‎‎‏‏‎‎This can’t be accessed on your ‎‏‎‎‏‏‎<xliff:g id="DEVICE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ at this time. Try on your phone instead.‎‏‎‎‏‎"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‏‎‏‏‎‏‏‎‎‎‏‏‎‏‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‎‎‏‏‎‏‎‏‏‎‎‏‏‏‏‎‏‏‏‎‏‏‏‎This app is requesting additional security. Try on your Android TV device instead.‎‏‎‎‏‎"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‏‎‎‎‏‎‏‏‎‏‏‎‏‏‏‎‎‎‎‎‎‏‏‎‎‎‎‏‏‏‎‎‏‎‎‏‎‏‏‎‏‎‎‏‎‎‎‎‎‎‏‎‎‎This app is requesting additional security. Try on your tablet instead.‎‏‎‎‏‎"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‎‏‎‏‎‎‎‏‎‎‎‎‎‎‏‎‎‎‏‏‎‎‏‎‏‏‎‎‎‏‎‎‎‏‎‎‎‏‎‏‎‎‏‎‎‎‎‎‏‏‎This app is requesting additional security. Try on your phone instead.‎‏‎‎‏‎"</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tv" msgid="820334666354451145">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‏‏‎‎‎‏‎‎‏‏‎‏‎‏‎‎‎‎‎‏‎‎‎‎‏‏‎‎‎‎‎‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‏‏‎‎‏‎‎‏‎This can’t be accessed on your ‎‏‎‎‏‏‎<xliff:g id="DEVICE">%1$s</xliff:g>‎‏‎‎‏‏‏‎. Try on your Android TV device instead.‎‏‎‎‏‎"</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tablet" msgid="3286849551133045896">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‎‏‏‏‎‏‎‎‏‏‏‏‎‎‎‏‎‎‎‎‎‎‏‎‎‏‎‏‎‏‎‏‏‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‎‎‎‎This can’t be accessed on your ‎‏‎‎‏‏‎<xliff:g id="DEVICE">%1$s</xliff:g>‎‏‎‎‏‏‏‎. Try on your tablet instead.‎‏‎‎‏‎"</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‎‎‏‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‎‎‏‏‎‎‎‏‏‏‎This can’t be accessed on your ‎‏‎‎‏‏‎<xliff:g id="DEVICE">%1$s</xliff:g>‎‏‎‎‏‏‏‎. Try on your phone instead.‎‏‎‎‏‎"</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‏‏‎‏‎‏‏‎‎‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎‎‏‎‏‎‏‏‎‏‏‏‏‎‏‏‎‏‏‎‎‎‏‎This app was built for an older version of Android and may not work properly. Try checking for updates, or contact the developer.‎‏‎‎‏‎"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‎‎‏‎‎‎‏‎‎‎‎‏‎‎‏‎‎‏‎‏‎‎‎‏‎‎‏‎‎‎‏‎‎‏‏‎‎‏‏‏‏‏‎‏‎‎‏‏‎‏‎Check for update‎‏‎‎‏‎"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‏‏‎‏‎‏‏‎‎‏‏‏‏‎‎‎‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‎‏‎‎‎‎‏‏‎You have new messages‎‏‎‎‏‎"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 5949b44..e3fd3a0 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Este dispositivo no tiene sensor de huellas dactilares."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Se inhabilitó temporalmente el sensor."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"No se puede usar el sensor de huellas dactilares. Consulta a un proveedor de reparaciones."</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Se presionó el botón de encendido"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Dedo <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Usar huella dactilar"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Usar bloqueo de huella dactilar o pantalla"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Mira el teléfono de forma más directa"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Quítate cualquier objeto que te cubra el rostro."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Limpia la parte superior de la pantalla, incluida la barra negra"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Tu rostro debe verse completamente"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Tu rostro debe verse completamente"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"No se puede crear modelo de rostro. Vuelve a intentarlo."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Se detectaron lentes oscuros. Tu rostro debe verse completamente."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Se detectó que llevas mascarilla. Tu rostro debe verse completamente."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"La cámara no está disponible"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Continúa en el teléfono"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"El micrófono no está disponible"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"La configuración de Android TV no está disponible"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"La configuración de la tablet no está disponible"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"La configuración del teléfono no está disponible"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Por el momento, no se puede acceder a esto en tu <xliff:g id="DEVICE">%1$s</xliff:g>. Inténtalo en tu dispositivo Android TV."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Por el momento, no se puede acceder a esto en tu <xliff:g id="DEVICE">%1$s</xliff:g>. Inténtalo en tu tablet."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Por el momento, no se puede acceder a esto en tu <xliff:g id="DEVICE">%1$s</xliff:g>. Inténtalo en tu teléfono."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Por el momento, no se puede acceder a esto en tu <xliff:g id="DEVICE">%1$s</xliff:g>. Inténtalo en tu dispositivo Android TV."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Por el momento, no se puede acceder a esto en tu <xliff:g id="DEVICE">%1$s</xliff:g>. Inténtalo en tu tablet."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Por el momento, no se puede acceder a esto en tu <xliff:g id="DEVICE">%1$s</xliff:g>. Inténtalo en tu teléfono."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Por el momento, no se puede acceder a esto en tu <xliff:g id="DEVICE">%1$s</xliff:g>. Inténtalo en tu dispositivo Android TV."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Por el momento, no se puede acceder a esto en tu <xliff:g id="DEVICE">%1$s</xliff:g>. Inténtalo en tu tablet."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Por el momento, no se puede acceder a esto en tu <xliff:g id="DEVICE">%1$s</xliff:g>. Inténtalo en tu teléfono."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Esta app solicita seguridad adicional. Inténtalo en tu dispositivo Android TV."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Esta app solicita seguridad adicional. Inténtalo en tu tablet."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Esta app solicita seguridad adicional. Inténtalo en tu teléfono."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Esta app se creó para una versión anterior de Android y es posible que no funcione correctamente. Busca actualizaciones o comunícate con el programador."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Buscar actualización"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Tienes mensajes nuevos"</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index c8c3804..3a85197 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Este dispositivo no tiene sensor de huellas digitales."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"El sensor está inhabilitado en estos momentos."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"No se puede usar el sensor de huellas digitales. Visita un proveedor de reparaciones."</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Se ha pulsado el botón de encendido"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Dedo <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Usar huella digital"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Usar huella digital o bloqueo de pantalla"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Mira al teléfono de forma más directa"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Retira cualquier objeto que te tape la cara."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Limpia la parte superior de la pantalla, incluida la barra de color negro"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Tu cara se debe poder ver por completo"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Tu cara se debe poder ver por completo"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"No se puede crear tu modelo. Inténtalo de nuevo."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Gafas oscuras detectadas. Tu cara se debe poder ver por completo."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Mascarilla detectada. Tu cara se debe poder ver por completo."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Cámara no disponible"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Continúa en el teléfono"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Micrófono no disponible"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Ajustes de Android TV no disponibles"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Ajustes del tablet no disponibles"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Ajustes del teléfono no disponibles"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"No se puede acceder a este contenido en tu <xliff:g id="DEVICE">%1$s</xliff:g>. Prueba en tu dispositivo Android TV."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"No se puede acceder a este contenido en tu <xliff:g id="DEVICE">%1$s</xliff:g>. Prueba en tu tablet."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"No se puede acceder a este contenido en tu <xliff:g id="DEVICE">%1$s</xliff:g>. Prueba en tu teléfono."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"En estos momentos, no se puede acceder a este contenido en tu <xliff:g id="DEVICE">%1$s</xliff:g>. Prueba en tu dispositivo Android TV."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"En estos momentos, no se puede acceder a este contenido en tu <xliff:g id="DEVICE">%1$s</xliff:g>. Prueba en tu tablet."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"En estos momentos, no se puede acceder a este contenido en tu <xliff:g id="DEVICE">%1$s</xliff:g>. Prueba en tu teléfono."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"En estos momentos, no se puede acceder a este contenido en tu <xliff:g id="DEVICE">%1$s</xliff:g>. Prueba en tu dispositivo Android TV."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"En estos momentos, no se puede acceder a este contenido en tu <xliff:g id="DEVICE">%1$s</xliff:g>. Prueba en tu tablet."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"En estos momentos, no se puede acceder a este contenido en tu <xliff:g id="DEVICE">%1$s</xliff:g>. Prueba en tu teléfono."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Esta aplicación solicita seguridad adicional. Prueba en tu dispositivo Android TV."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Esta aplicación solicita seguridad adicional. Prueba en tu tablet."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Esta aplicación solicita seguridad adicional. Prueba en tu teléfono."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Esta aplicación se ha diseñado para una versión anterior de Android y es posible que no funcione correctamente. Busca actualizaciones o ponte en contacto con el desarrollador."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Buscar actualizaciones"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Tienes mensajes nuevos"</string>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index 85aab33..4c6a68d 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Selles seadmes pole sõrmejäljeandurit."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Andur on ajutiselt keelatud."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Sõrmejäljeandurit ei saa kasutada. Külastage remonditeenuse pakkujat"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Vajutati toitenuppu"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Sõrmejälg <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Sõrmejälje kasutamine"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Sõrmejälje või ekraaniluku kasutamine"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Vaadake otse telefoni"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Eemaldage kõik, mis varjab teie nägu."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Puhastage ekraani ülaosa, sh musta värvi riba"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Teie nägu peab olema täielikult nähtaval"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Teie nägu peab olema täielikult nähtaval"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Teie näomudelit ei saa luua. Proovige uuesti."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Tuvastati tumedad prillid. Teie nägu peab olema täielikult nähtaval."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Tuvastati nägu kattev ese. Teie nägu peab olema täielikult nähtaval."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Kaamera pole saadaval"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Jätkake telefonis"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Mikrofon pole saadaval"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV seaded pole saadaval"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Tahvelarvuti seaded pole saadaval"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Telefoni seaded pole saadaval"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Sellele ei pääse teie seadmes <xliff:g id="DEVICE">%1$s</xliff:g> juurde. Proovige juurde pääseda oma Android TV seadmes."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Sellele ei pääse teie seadmes <xliff:g id="DEVICE">%1$s</xliff:g> juurde. Proovige juurde pääseda oma tahvelarvutis."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Sellele ei pääse teie seadmes <xliff:g id="DEVICE">%1$s</xliff:g> juurde. Proovige juurde pääseda oma telefonis."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Sellele ei pääse praegu teie seadmes <xliff:g id="DEVICE">%1$s</xliff:g> juurde. Proovige juurde pääseda oma Android TV seadmes."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Sellele ei pääse praegu teie seadmes <xliff:g id="DEVICE">%1$s</xliff:g> juurde. Proovige juurde pääseda oma tahvelarvutis."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Sellele ei pääse praegu teie seadmes <xliff:g id="DEVICE">%1$s</xliff:g> juurde. Proovige juurde pääseda oma telefonis."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Sellele ei pääse praegu teie seadmega (<xliff:g id="DEVICE">%1$s</xliff:g>) juurde. Proovige juurde pääseda oma Android TV seadmega."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Sellele ei pääse praegu teie seadmega (<xliff:g id="DEVICE">%1$s</xliff:g>) juurde. Proovige juurde pääseda oma tahvelarvutiga."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Sellele ei pääse praegu teie seadmega (<xliff:g id="DEVICE">%1$s</xliff:g>) juurde. Proovige juurde pääseda oma telefoniga."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"See rakendus nõuab lisaturvalisust. Proovige juurde pääseda oma Android TV seadmes."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"See rakendus nõuab lisaturvalisust. Proovige juurde pääseda oma tahvelarvutis."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"See rakendus nõuab lisaturvalisust. Proovige juurde pääseda oma telefonis."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"See rakendus on loodud Androidi vanema versiooni jaoks ega pruugi õigesti töötada. Otsige värskendusi või võtke ühendust arendajaga."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Otsi värskendust"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Teile on uusi sõnumeid"</string>
diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml
index aa7594c..42161bf 100644
--- a/core/res/res/values-eu/strings.xml
+++ b/core/res/res/values-eu/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Gailu honek ez du hatz-marken sentsorerik."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sentsorea aldi baterako desgaitu da."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Ezin da erabili hatz-marken sentsorea. Jarri harremanetan konponketak egiten dituen hornitzaile batekin."</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Etengailua sakatu da"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"<xliff:g id="FINGERID">%d</xliff:g>. hatza"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Erabili hatz-marka"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Erabili hatz-marka edo pantailaren blokeoa"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Begiratu zuzenago telefonoari"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Kendu aurpegia estaltzen dizuten gauzak."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Garbitu pantailaren goialdea, barra beltza barne"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Aurpegi osoak egon behar du ikusgai"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Aurpegi osoak egon behar du ikusgai"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Ezin da sortu aurpegi-eredua. Saiatu berriro."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Betaurreko ilunak hauteman dira. Aurpegi osoak egon behar du ikusgai."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Maskara bat hauteman da. Aurpegi osoak egon behar du ikusgai."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Kamera ez dago erabilgarri"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Jarraitu telefonoan"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Mikrofonoa ez dago erabilgarri"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV-ren ezarpenak ez daude erabilgarri"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Tabletaren ezarpenak ez daude erabilgarri"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Telefonoaren ezarpenak ez daude erabilgarri"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Aplikazioa ezin da <xliff:g id="DEVICE">%1$s</xliff:g> erabilita atzitu. Gailu horren ordez, erabili Android TV darabilen bat."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Aplikazioa ezin da <xliff:g id="DEVICE">%1$s</xliff:g> erabilita atzitu. Gailu horren ordez, erabili tableta."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Aplikazioa ezin da <xliff:g id="DEVICE">%1$s</xliff:g> erabilita atzitu. Gailu horren ordez, erabili telefonoa."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Une honetan, aplikazioa ezin da <xliff:g id="DEVICE">%1$s</xliff:g> erabilita atzitu. Gailu horren ordez, erabili Android TV darabilen bat."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Une honetan, aplikazioa ezin da <xliff:g id="DEVICE">%1$s</xliff:g> erabilita atzitu. Gailu horren ordez, erabili tableta."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Une honetan, aplikazioa ezin da <xliff:g id="DEVICE">%1$s</xliff:g> erabilita atzitu. Gailu horren ordez, erabili telefonoa."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Une honetan, aplikazioa ezin da <xliff:g id="DEVICE">%1$s</xliff:g> erabilita atzitu. Gailu horren ordez, erabili Android TV gailua."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Une honetan, aplikazioa ezin da <xliff:g id="DEVICE">%1$s</xliff:g> erabilita atzitu. Gailu horren ordez, erabili tableta."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Une honetan, aplikazioa ezin da <xliff:g id="DEVICE">%1$s</xliff:g> erabilita atzitu. Gailu horren ordez, erabili telefonoa."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Segurtasun gehigarria eskatzen ari da aplikazioa. Gailu horren ordez, erabili Android TV darabilen bat."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Segurtasun gehigarria eskatzen ari da aplikazioa. Gailu horren ordez, erabili tableta."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Segurtasun gehigarria eskatzen ari da aplikazioa. Gailu horren ordez, erabili telefonoa."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Aplikazioa Android-en bertsio zaharrago baterako sortu zenez, baliteke behar bezala ez funtzionatzea. Bilatu eguneratzerik baden, edo jarri garatzailearekin harremanetan."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Bilatu eguneratzeak"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Mezu berriak dituzu"</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index a8d1639..247bd29 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"این دستگاه حسگر اثر انگشت ندارد."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"حسگر به‌طور موقت غیرفعال است."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"امکان استفاده از حسگر اثر انگشت وجود ندارد. به ارائه‌دهنده خدمات تعمیر مراجعه کنید"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"دکمه روشن/ خاموش فشار داده شد"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"انگشت <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"استفاده از اثر انگشت"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"استفاده از اثر انگشت یا قفل صفحه"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"مستقیم‌تر به تلفن نگاه کنید"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"هر چیزی که جلو صورت شما را می‌گیرد بردارید."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"بالای صفحه و همچنین نوار مشکی را تمیز کنید."</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"چهره‌تان باید کاملاً نمایان باشد"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"چهره‌تان باید کاملاً نمایان باشد"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"مدل چهره ایجاد نشد. دوباره امتحان کنید."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"عینک تیره شناسایی شد. چهره‌تان باید کاملاً نمایان باشد."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"پوشش صورت شناسایی شد. چهره‌تان باید کاملاً نمایان باشد."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"دوربین دردسترس نیست"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"ادامه دادن در تلفن"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"میکروفون دردسترس نیست"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"‏تنظیمات Android TV دردسترس نیست"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"تنظیمات رایانه لوحی دردسترس نیست"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"تنظیمات تلفن دردسترس نیست"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"‏نمی‌توان در <xliff:g id="DEVICE">%1$s</xliff:g> به این برنامه دسترسی داشت. دسترسی به آن را در دستگاه Android TV امتحان کنید."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"نمی‌توان در <xliff:g id="DEVICE">%1$s</xliff:g> به این برنامه دسترسی داشت. دسترسی به آن را در رایانه لوحی‌تان امتحان کنید."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"نمی‌توان در <xliff:g id="DEVICE">%1$s</xliff:g> به این برنامه دسترسی داشت. دسترسی به آن را در تلفنتان امتحان کنید."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"‏درحال‌حاضر نمی‌توانید در <xliff:g id="DEVICE">%1$s</xliff:g> به این برنامه دسترسی داشت. دسترسی به آن را در دستگاه Android TV امتحان کنید."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"درحال‌حاضر نمی‌توانید در <xliff:g id="DEVICE">%1$s</xliff:g> به این برنامه دسترسی داشت. دسترسی به آن را در رایانه لوحی‌تان امتحان کنید."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"درحال‌حاضر نمی‌توانید در <xliff:g id="DEVICE">%1$s</xliff:g> به این برنامه دسترسی داشت. دسترسی به آن را در تلفنتان امتحان کنید."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"‏درحال‌حاضر نمی‌توان در <xliff:g id="DEVICE">%1$s</xliff:g> شما به این برنامه دسترسی داشت. دسترسی به آن را در دستگاه Android TV امتحان کنید."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"درحال‌حاضر نمی‌توان در <xliff:g id="DEVICE">%1$s</xliff:g> شما به این برنامه دسترسی داشت. دسترسی به آن را در رایانه لوحی‌تان امتحان کنید."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"درحال‌حاضر نمی‌توان در <xliff:g id="DEVICE">%1$s</xliff:g> شما به این برنامه دسترسی داشت. دسترسی به آن را در تلفنتان امتحان کنید."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"‏این برنامه درخواست امنیت اضافی دارد. دسترسی به آن را در دستگاه Android TV امتحان کنید."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"این برنامه درخواست امنیت اضافی دارد. دسترسی به آن را در رایانه لوحی‌تان امتحان کنید."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"این برنامه درخواست امنیت اضافی دارد. دسترسی به آن را در تلفنتان امتحان کنید."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"‏این برنامه برای نسخه قدیمی‌تری از Android ساخته شده است و ممکن است درست کار نکند. وجود به‌روزرسانی را بررسی کنید یا با برنامه‌نویس تماس بگیرید."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"بررسی وجود به‌روزرسانی"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"پیام‌های جدیدی دارید"</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 6d2424f..a93a185 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Laitteessa ei ole sormenjälkitunnistinta."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Tunnistin poistettu väliaikaisesti käytöstä."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Sormenjälkitunnistinta ei voi käyttää. Ota yhteys korjauspalveluun"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Virtapainiketta on painettu"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Sormi <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Käytä sormenjälkeä"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Käytä sormenjälkeä tai näytön lukitusta"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Katso suoremmin puhelimeen"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Poista esteet kasvojesi edestä."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Puhdista näytön yläreuna, mukaan lukien musta palkki"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Kasvojen täytyy näkyä kokonaan"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Kasvojen täytyy näkyä kokonaan"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Kasvomallia ei voi luoda. Yritä uudelleen."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Tummat lasit havaittu. Kasvojen täytyy näkyä kokonaan."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Kasvot peittävä asia havaittu. Kasvojen täytyy näkyä kokonaan."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Kamera ei käytettävissä"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Jatka puhelimella"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Mikrofoni ei ole käytettävissä"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV:n asetukset eivät ole käytettävissä"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Tabletin asetukset eivät ole käytettävissä"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Puhelimen asetukset eivät ole käytettävissä"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"<xliff:g id="DEVICE">%1$s</xliff:g> ei saa pääsyä sovellukseen. Kokeile striimausta Android TV ‑laitteella."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"<xliff:g id="DEVICE">%1$s</xliff:g> ei saa pääsyä sovellukseen. Kokeile striimausta tabletilla."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"<xliff:g id="DEVICE">%1$s</xliff:g> ei saa pääsyä sovellukseen. Kokeile striimausta puhelimella."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"<xliff:g id="DEVICE">%1$s</xliff:g> ei tällä hetkellä saa pääsyä sovellukseen. Kokeile striimausta Android TV ‑laitteella."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"<xliff:g id="DEVICE">%1$s</xliff:g> ei tällä hetkellä saa pääsyä sovellukseen. Kokeile striimausta tabletilla."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"<xliff:g id="DEVICE">%1$s</xliff:g> ei tällä hetkellä saa pääsyä sovellukseen. Kokeile striimausta puhelimella."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"<xliff:g id="DEVICE">%1$s</xliff:g> ei tällä hetkellä saa pääsyä sovellukseen. Kokeile striimausta Android TV ‑laitteella."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"<xliff:g id="DEVICE">%1$s</xliff:g> ei tällä hetkellä saa pääsyä sovellukseen. Kokeile striimausta tabletilla."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"<xliff:g id="DEVICE">%1$s</xliff:g> ei tällä hetkellä saa pääsyä sovellukseen. Kokeile striimausta puhelimella."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Sovellus pyytää lisäsuojausta. Kokeile striimausta Android TV ‑laitteella."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Sovellus pyytää lisäsuojausta. Kokeile striimausta tabletilla."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Sovellus pyytää lisäsuojausta. Kokeile striimausta puhelimella."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Tämä sovellus on suunniteltu vanhemmalle Android-versiolle eikä välttämättä toimi oikein. Kokeile tarkistaa päivitykset tai ottaa yhteyttä kehittäjään."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Tarkista päivitykset"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Sinulle on uusia viestejä"</string>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index e709da8..a930ecc 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Cet appareil ne possède pas de capteur d\'empreintes digitales."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Le capteur a été désactivé temporairement."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Impossible d\'utiliser le capteur d\'empreintes digitales. Consultez un fournisseur de services de réparation"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Vous avez appuyé sur l\'interrupteur"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Doigt <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Utiliser l\'empreinte digitale"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Utiliser l\'empreinte digitale ou le verrouillage de l\'écran"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Regardez plus directement votre téléphone"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Retirez tout ce qui pourrait couvrir votre visage."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Nettoyez le haut de l\'écran, y compris la barre noire"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Votre visage doit être entièrement visible"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Votre visage doit être entièrement visible"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Impossible de créer votre modèle facial. Réessayez."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Lunettes sombres détectées. Votre visage doit être entièrement visible."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Couvre-visage détecté. Votre visage doit être entièrement visible."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Appareil photo non accessible"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Continuer sur le téléphone"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Microphone non accessible"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Paramètres Android TV non accessibles"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Paramètres de la tablette non accessibles"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Paramètres du téléphone non accessibles"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Impossible d\'accéder à ce contenu sur votre appareil <xliff:g id="DEVICE">%1$s</xliff:g>. Essayez sur votre appareil Android TV à la place."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Impossible d\'accéder à ce contenu sur votre appareil <xliff:g id="DEVICE">%1$s</xliff:g>. Essayez sur votre tablette à la place."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Impossible d\'accéder à ce contenu sur votre appareil <xliff:g id="DEVICE">%1$s</xliff:g>. Essayez sur votre téléphone à la place."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Impossible d\'accéder à ce contenu sur votre appareil <xliff:g id="DEVICE">%1$s</xliff:g> pour le moment. Essayez sur votre appareil Android TV à la place."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Impossible d\'accéder à ce contenu sur votre appareil <xliff:g id="DEVICE">%1$s</xliff:g> pour le moment. Essayez sur votre tablette à la place."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Impossible d\'accéder à ce contenu sur votre appareil <xliff:g id="DEVICE">%1$s</xliff:g> pour le moment. Essayez sur votre téléphone à la place."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Impossible d\'accéder à ce contenu sur votre appareil <xliff:g id="DEVICE">%1$s</xliff:g> pour le moment. Essayez sur votre appareil Android TV à la place."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Impossible d\'accéder à ce contenu sur votre appareil <xliff:g id="DEVICE">%1$s</xliff:g> pour le moment. Essayez sur votre tablette à la place."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Impossible d\'accéder à ce contenu sur votre appareil <xliff:g id="DEVICE">%1$s</xliff:g> pour le moment. Essayez sur votre téléphone à la place."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Cette application demande une sécurité supplémentaire. Essayez sur votre appareil Android TV à la place."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Cette application demande une sécurité supplémentaire. Essayez sur votre tablette à la place."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Cette application demande une sécurité supplémentaire. Essayez sur votre téléphone à la place."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Cette application a été conçue pour une ancienne version d\'Android et pourrait ne pas fonctionner correctement. Essayez de vérifier les mises à jour ou communiquez avec son développeur."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Vérifier la présence de mises à jour"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Vous avez de nouveaux messages"</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index ec0f30c..26a04c7 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Aucun lecteur d\'empreinte digitale n\'est installé sur cet appareil."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Capteur temporairement désactivé."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Impossible d\'utiliser le lecteur d\'empreinte digitale. Contactez un réparateur"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Bouton Marche/Arrêt appuyé"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Doigt <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Utiliser l\'empreinte digitale"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Utiliser votre empreinte digitale ou le verrouillage de l\'écran"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Regardez plus directement votre téléphone"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Retirez tout ce qui cache votre visage."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Nettoyez la partie supérieure de l\'écran, y compris la barre noire"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Votre visage doit être entièrement visible"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Votre visage doit être entièrement visible"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Impossible de créer votre empreinte faciale. Réessayez."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Lunettes sombres détectées. Votre visage doit être entièrement visible."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Masque détecté. Votre visage doit être entièrement visible."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Caméra indisponible"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Continuez sur le téléphone"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Micro indisponible"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Paramètres Android TV indisponibles"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Paramètres de la tablette indisponibles"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Paramètres du téléphone indisponibles"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Impossible d\'accéder à cette application sur votre <xliff:g id="DEVICE">%1$s</xliff:g>. Essayez plutôt d\'y accéder sur votre appareil Android TV."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Impossible d\'accéder à cette application sur votre <xliff:g id="DEVICE">%1$s</xliff:g>. Essayez plutôt d\'y accéder sur votre tablette."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Impossible d\'accéder à cette application sur votre <xliff:g id="DEVICE">%1$s</xliff:g>. Essayez plutôt d\'y accéder sur votre téléphone."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Vous ne pouvez pas accéder à cette appli sur votre <xliff:g id="DEVICE">%1$s</xliff:g> pour le moment. Essayez plutôt d\'y accéder sur votre appareil Android TV."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Vous ne pouvez pas accéder à cette appli sur votre <xliff:g id="DEVICE">%1$s</xliff:g> pour le moment. Essayez plutôt d\'y accéder sur votre tablette."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Vous ne pouvez pas accéder à cette appli sur votre <xliff:g id="DEVICE">%1$s</xliff:g> pour le moment. Essayez plutôt d\'y accéder sur votre téléphone."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Actuellement, vous ne pouvez pas accéder à cette application sur votre <xliff:g id="DEVICE">%1$s</xliff:g>. Essayez plutôt d\'y accéder sur votre appareil Android TV."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Actuellement, vous ne pouvez pas accéder à cette application sur votre <xliff:g id="DEVICE">%1$s</xliff:g>. Essayez plutôt d\'y accéder sur votre tablette."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Actuellement, vous ne pouvez pas accéder à cette application sur votre <xliff:g id="DEVICE">%1$s</xliff:g>. Essayez plutôt d\'y accéder sur votre téléphone."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Cette appli demande une sécurité supplémentaire. Essayez plutôt d\'y accéder sur votre appareil Android TV."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Cette appli demande une sécurité supplémentaire. Essayez plutôt d\'y accéder sur votre tablette."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Cette appli demande une sécurité supplémentaire. Essayez plutôt d\'y accéder sur votre téléphone."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Cette application a été conçue pour une ancienne version d\'Android et risque de ne pas fonctionner correctement. Recherchez des mises à jour ou contactez le développeur."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Rechercher une mise à jour"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Vous avez de nouveaux messages"</string>
diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml
index a37889d..a754421 100644
--- a/core/res/res/values-gl/strings.xml
+++ b/core/res/res/values-gl/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Este dispositivo non ten sensor de impresión dixital."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Desactivouse o sensor temporalmente."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Non se puido usar o sensor de impresión dixital. Visita un provedor de reparacións"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Premeuse o botón de acendido"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Dedo <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Utilizar impresión dixital"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Utilizar impresión dixital ou credencial do dispositivo"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Mira o teléfono de forma máis directa"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Quita todo o que oculte a túa cara."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Limpa a parte superior da pantalla, incluída a barra de cor negra"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"A cara debe poder verse por completo"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"A cara debe poder verse por completo"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Non se puido crear o modelo facial. Téntao de novo."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Detectáronse lentes escuras. A cara debe poder verse por completo."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Detectouse unha máscara. A cara debe poder verse por completo."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"A cámara non está dispoñible"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Continúa no teléfono"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"O micrófono non está dispoñible"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"A configuración de Android TV non está dispoñible"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"A configuración da tableta non está dispoñible"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"A configuración do teléfono non está dispoñible"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Non se puido acceder a este contido desde o teu dispositivo (<xliff:g id="DEVICE">%1$s</xliff:g>). Proba a facelo desde o dispositivo con Android TV."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Non se puido acceder a este contido desde o teu dispositivo (<xliff:g id="DEVICE">%1$s</xliff:g>). Proba a facelo desde a tableta."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Non se puido acceder a este contido desde o teu dispositivo (<xliff:g id="DEVICE">%1$s</xliff:g>). Proba a facelo desde o teléfono."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Nestes momentos, non podes acceder a este contido desde o teu dispositivo (<xliff:g id="DEVICE">%1$s</xliff:g>). Proba a facelo desde o dispositivo con Android TV."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Nestes momentos, non podes acceder a este contido desde o teu dispositivo (<xliff:g id="DEVICE">%1$s</xliff:g>). Proba a facelo desde a tableta."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Nestes momentos, non podes acceder a este contido desde o teu dispositivo (<xliff:g id="DEVICE">%1$s</xliff:g>). Proba a facelo desde o teléfono."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Nestes momentos, non podes acceder a este contido desde o teu dispositivo (<xliff:g id="DEVICE">%1$s</xliff:g>). Proba a facelo desde o dispositivo con Android TV."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Nestes momentos, non podes acceder a este contido desde o teu dispositivo (<xliff:g id="DEVICE">%1$s</xliff:g>). Proba a facelo desde a tableta."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Nestes momentos, non podes acceder a este contido desde o teu dispositivo (<xliff:g id="DEVICE">%1$s</xliff:g>). Proba a facelo desde o teléfono."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Esta aplicación solicita seguranza adicional. Proba a facelo desde o dispositivo con Android TV."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Esta aplicación solicita seguranza adicional. Proba a facelo desde a tableta."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Esta aplicación solicita seguranza adicional. Proba a facelo desde o teléfono."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Esta aplicación deseñouse para unha versión anterior de Android e quizais non funcione correctamente. Proba a buscar actualizacións ou contacta co programador."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Buscar actualización"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Tes mensaxes novas"</string>
diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml
index 889ef9c..5ac8039 100644
--- a/core/res/res/values-gu/strings.xml
+++ b/core/res/res/values-gu/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"આ ડિવાઇસમાં કોઈ ફિંગરપ્રિન્ટ સેન્સર નથી."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"સેન્સર હંગામી રૂપે બંધ કર્યું છે."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"ફિંગરપ્રિન્ટ સેન્સરનો ઉપયોગ કરી શકાતો નથી. રિપેર કરવાની સેવા આપતા પ્રદાતાની મુલાકાત લો"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"પાવર બટન દબાવવામાં આવ્યું"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"આંગળી <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"ફિંગરપ્રિન્ટનો ઉપયોગ કરો"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"ફિંગરપ્રિન્ટ અથવા સ્ક્રીન લૉકનો ઉપયોગ કરો"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"વધારે પ્રમાણમાં સીધું તમારા ફોન તરફ જુઓ"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"તમારા ચહેરાને છુપાવતી કંઈપણ વસ્તુ દૂર કરો."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"કાળી પટ્ટી સહિત, તમારી સ્ક્રીનની ટોચ સાફ કરો"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"તમારો આખો ચહેરો દેખાવો આવશ્યક છે"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"તમારો આખો ચહેરો દેખાવો આવશ્યક છે"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"તમારા ચહેરાનું મૉડલ ન બનાવી શકાય. ફરી પ્રયાસ કરો."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"કાળા ચશ્માંની ભાળ મળી. તમારો આખો ચહેરો દેખાવો આવશ્યક છે."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"ચહેરો ઢંકાયેલો હોવાની ભાળ મળી. તમારો આખો ચહેરો દેખાવો આવશ્યક છે."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"કૅમેરા ઉપલબ્ધ નથી"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"ફોન પર ચાલુ રાખો"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"માઇક્રોફોન ઉપલબ્ધ નથી"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV સેટિંગ ઉપલબ્ધ નથી"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"ટૅબ્લેટ સેટિંગ ઉપલબ્ધ નથી"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"ફોન સેટિંગ ઉપલબ્ધ નથી"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"આને તમારા <xliff:g id="DEVICE">%1$s</xliff:g> પર ઍક્સેસ કરી શકાતી નથી. તેના બદલે તમારા Android TV ડિવાઇસ પર પ્રયાસ કરો."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"આને તમારા <xliff:g id="DEVICE">%1$s</xliff:g> પર ઍક્સેસ કરી શકાતી નથી. તેના બદલે તમારા ટૅબ્લેટ પર પ્રયાસ કરો."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"આને તમારા <xliff:g id="DEVICE">%1$s</xliff:g> પર ઍક્સેસ કરી શકાતી નથી. તેના બદલે તમારા ફોન પર પ્રયાસ કરો."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"અત્યારે આને તમારા <xliff:g id="DEVICE">%1$s</xliff:g> પર ઍક્સેસ કરી શકાતી નથી. તેના બદલે તમારા Android TV ડિવાઇસ પર પ્રયાસ કરો."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"અત્યારે આને તમારા <xliff:g id="DEVICE">%1$s</xliff:g> પર ઍક્સેસ કરી શકાતી નથી. તેના બદલે તમારા ટૅબ્લેટ પર પ્રયાસ કરો."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"અત્યારે આને તમારા <xliff:g id="DEVICE">%1$s</xliff:g> પર ઍક્સેસ કરી શકાતી નથી. તેના બદલે તમારા ફોન પર પ્રયાસ કરો."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"અત્યારે આને તમારા <xliff:g id="DEVICE">%1$s</xliff:g> પર ઍક્સેસ કરી શકાતી નથી. તેના બદલે તમારા Android TV ડિવાઇસ પર પ્રયાસ કરો."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"અત્યારે આને તમારા <xliff:g id="DEVICE">%1$s</xliff:g> પર ઍક્સેસ કરી શકાતી નથી. તેના બદલે તમારા ટૅબ્લેટ પર પ્રયાસ કરો."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"અત્યારે આને તમારા <xliff:g id="DEVICE">%1$s</xliff:g> પર ઍક્સેસ કરી શકાતી નથી. તેના બદલે તમારા ફોન પર પ્રયાસ કરો."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"આ ઍપ દ્વારા વધારાની સુરક્ષાની વિનંતી કરવામાં આવી રહી છે. તેના બદલે તમારા Android TV ડિવાઇસ પર પ્રયાસ કરો."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"આ ઍપ દ્વારા વધારાની સુરક્ષાની વિનંતી કરવામાં આવી રહી છે. તેના બદલે તમારા ટૅબ્લેટ પર પ્રયાસ કરો."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"આ ઍપ દ્વારા વધારાની સુરક્ષાની વિનંતી કરવામાં આવી રહી છે. તેના બદલે તમારા ફોન પર પ્રયાસ કરો."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"આ ઍપ Androidના જૂના વર્ઝન માટે બનાવવામાં આવ્યું હતું અને તે કદાચ તે યોગ્ય રીતે કાર્ય કરી શકશે નહીં. અપડેટ માટે તપાસવાનો પ્રયાસ કરો અથવા ડેવલપરનો સંપર્ક કરો."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"અપડેટ માટે તપાસો"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"તમારી પાસે નવા સંદેશા છે"</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index 19ee6e1..f311494 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"इस डिवाइस में फ़िंगरप्रिंट सेंसर नहीं है."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"सेंसर कुछ समय के लिए बंद कर दिया गया है."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"फ़िंगरप्रिंट सेंसर इस्तेमाल नहीं किया जा सकता. रिपेयर की सेवा देने वाली कंपनी से संपर्क करें"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"पावर बटन दबाने की वजह से गड़बड़ी हुई"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"फ़िंगरप्रिंट <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"फ़िंगरप्रिंट इस्तेमाल करें"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"फ़िंगरप्रिंट या स्क्रीन लॉक का क्रेडेंशियल इस्तेमाल करें"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"अपने फ़ोन की तरफ़ बिलकुल सीधा देखें"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"आपके चेहरे को छिपाने वाली सभी चीज़ों को हटाएं."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"अपनी स्क्रीन के सबसे ऊपरी हिस्से को साफ़ करें, जिसमें काले रंग वाला बार भी शामिल है"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"आपका पूरा चेहरा दिखना चाहिए"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"आपका पूरा चेहरा दिखना चाहिए"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"चेहरे का माॅडल नहीं बन सका. फिर से कोशिश करें."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"आपने गहरे रंग का चश्मा पहना है. आपका पूरा चेहरा दिखना चाहिए."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"चेहरा ढका हुआ है. आपका पूरा चेहरा दिखना चाहिए."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"कैमरा उपलब्ध नहीं है"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"फ़ोन पर जारी रखें"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"माइक्रोफ़ोन उपलब्ध नहीं है"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV की सेटिंग उपलब्ध नहीं हैं"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"टैबलेट की सेटिंग उपलब्ध नहीं हैं"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"फ़ोन की सेटिंग उपलब्ध नहीं हैं"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"आपके <xliff:g id="DEVICE">%1$s</xliff:g> पर इसे ऐक्सेस नहीं किया जा सकता. इसके बजाय, अपने Android TV डिवाइस पर ऐक्सेस करने की कोशिश करें."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"आपके <xliff:g id="DEVICE">%1$s</xliff:g> पर इसे ऐक्सेस नहीं किया जा सकता. इसके बजाय, अपने टैबलेट पर ऐक्सेस करने की कोशिश करें."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"आपके <xliff:g id="DEVICE">%1$s</xliff:g> पर इसे ऐक्सेस नहीं किया जा सकता. इसके बजाय, अपने फ़ोन पर ऐक्सेस करने की कोशिश करें."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"इस समय, आपके <xliff:g id="DEVICE">%1$s</xliff:g> पर इसे ऐक्सेस नहीं किया जा सकता. इसके बजाय, अपने Android TV डिवाइस पर ऐक्सेस करने की कोशिश करें."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"इस समय, आपके <xliff:g id="DEVICE">%1$s</xliff:g> पर इसे ऐक्सेस नहीं किया जा सकता. इसके बजाय, अपने टैबलेट पर ऐक्सेस करने की कोशिश करें."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"इस समय, आपके <xliff:g id="DEVICE">%1$s</xliff:g> पर इसे ऐक्सेस नहीं किया जा सकता. इसके बजाय, अपने फ़ोन पर ऐक्सेस करने की कोशिश करें."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"इस समय, आपके <xliff:g id="DEVICE">%1$s</xliff:g> पर इसे ऐक्सेस नहीं किया जा सकता. इसके बजाय, अपने Android TV डिवाइस पर कोशिश करें."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"इस समय, आपके <xliff:g id="DEVICE">%1$s</xliff:g> पर इसे ऐक्सेस नहीं किया जा सकता. इसके बजाय, अपने टैबलेट पर कोशिश करें."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"इस समय, आपके <xliff:g id="DEVICE">%1$s</xliff:g> पर इसे ऐक्सेस नहीं किया जा सकता. इसके बजाय, अपने फ़ोन पर कोशिश करें."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"यह ऐप्लिकेशन ज़्यादा सुरक्षा का अनुरोध कर रहा है. इसके बजाय, अपने Android TV डिवाइस पर ऐक्सेस करने की कोशिश करें."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"यह ऐप्लिकेशन ज़्यादा सुरक्षा का अनुरोध कर रहा है. इसके बजाय, अपने टैबलेट पर ऐक्सेस करने की कोशिश करें."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"यह ऐप्लिकेशन ज़्यादा सुरक्षा का अनुरोध कर रहा है. इसके बजाय, अपने फ़ोन पर ऐक्सेस करने की कोशिश करें."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"यह ऐप्लिकेशन Android के पुराने वर्शन के लिए बनाया गया था, इसलिए हो सकता है कि यह सही से काम न करे. देखें कि अपडेट मौजूद हैं या नहीं, या फिर डेवलपर से संपर्क करें."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"देखें कि अपडेट मौजूद है या नहीं"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"आपके पास नए संदेश हैं"</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 40c6e7b..cfdddd9 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -615,6 +615,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Ovaj uređaj nema senzor otiska prsta."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Senzor je privremeno onemogućen."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Senzor otiska prsta ne može se koristiti. Posjetite davatelja usluga popravaka"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Pritisnuta je tipka za uključivanje/isključivanje"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Prst <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Upotreba otiska prsta"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Upotreba otiska prsta ili zaključavanja zaslona"</string>
@@ -655,8 +656,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Gledajte izravnije prema telefonu"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Uklonite sve što vam zakriva lice."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Očistite vrh zaslona, uključujući crnu traku"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Vaše lice mora biti potpuno vidljivo"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Vaše lice mora biti potpuno vidljivo"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Izrada modela lica nije uspjela. Pokušajte ponovo."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Otkrivene su tamne naočale. Vaše lice mora biti potpuno vidljivo."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Otkriveno je prekrivanje lica. Vaše lice mora biti potpuno vidljivo."</string>
@@ -1942,18 +1945,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Kamera nije dostupna"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Nastavite na telefonu"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Mikrofon nije dostupan"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Postavke Android TV-a nisu dostupne"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Postavke tableta nisu dostupne"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Postavke telefona nisu dostupne"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Toj aplikaciji nije moguće pristupiti na vašem uređaju <xliff:g id="DEVICE">%1$s</xliff:g>. Pokušajte joj pristupiti na Android TV uređaju."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Toj aplikaciji nije moguće pristupiti na vašem uređaju <xliff:g id="DEVICE">%1$s</xliff:g>. Pokušajte joj pristupiti na tabletu."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Toj aplikaciji nije moguće pristupiti na vašem uređaju <xliff:g id="DEVICE">%1$s</xliff:g>. Pokušajte joj pristupiti na telefonu."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Trenutačno toj aplikaciji nije moguće pristupiti na vašem uređaju <xliff:g id="DEVICE">%1$s</xliff:g>. Pokušajte joj pristupiti na Android TV uređaju."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Trenutačno toj aplikaciji nije moguće pristupiti na vašem uređaju <xliff:g id="DEVICE">%1$s</xliff:g>. Pokušajte joj pristupiti na tabletu."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Trenutačno toj aplikaciji nije moguće pristupiti na vašem uređaju <xliff:g id="DEVICE">%1$s</xliff:g>. Pokušajte joj pristupiti na telefonu."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Trenutačno toj aplikaciji nije moguće pristupiti na vašem uređaju <xliff:g id="DEVICE">%1$s</xliff:g>. Pokušajte joj pristupiti na Android TV uređaju."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Trenutačno toj aplikaciji nije moguće pristupiti na vašem uređaju <xliff:g id="DEVICE">%1$s</xliff:g>. Pokušajte joj pristupiti na svojem tabletu."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Trenutačno toj aplikaciji nije moguće pristupiti na vašem uređaju <xliff:g id="DEVICE">%1$s</xliff:g>. Pokušajte joj pristupiti na svojem telefonu."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Ta aplikacija zahtijeva dodatnu sigurnost. Pokušajte joj pristupiti na Android TV uređaju."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Ta aplikacija zahtijeva dodatnu sigurnost. Pokušajte joj pristupiti na tabletu."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Ta aplikacija zahtijeva dodatnu sigurnost. Pokušajte joj pristupiti na telefonu."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Ova je aplikacija razvijena za stariju verziju Androida i možda neće funkcionirati pravilno. Potražite ažuriranja ili se obratite razvojnom programeru."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Provjeri ažuriranja"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Imate nove poruke"</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 3cc4b63..92fcde2 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Ez az eszköz nem rendelkezik ujjlenyomat-érzékelővel."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Az érzékelő átmenetileg le van tiltva."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Nem lehet használni az ujjlenyomat-érzékelőt. Keresse fel a szervizt."</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Bekapcsológomb megnyomva"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"<xliff:g id="FINGERID">%d</xliff:g>. ujj"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Ujjlenyomat használata"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"A folytatás ujjlenyomattal vagy képernyőzárral lehetséges"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Nézzen egyenesen a telefonjára"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Távolítson el mindent, ami takarja az arcát."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Tisztítsa meg a képernyő tetejét, a fekete sávot is beleértve."</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Arcának teljesen láthatónak kell lennie"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Arcának teljesen láthatónak kell lennie"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Nem lehet létrehozni az arcmodellt. Próbálja újra."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Sötét szemüveget észlelt a rendszer. Arcának teljesen láthatónak kell lennie."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Valami eltakarja az arcát. Arcának teljesen láthatónak kell lennie."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"A kamera nem áll rendelkezésre"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Folytatás a telefonon"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"A mikrofon nem áll rendelkezésre"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Az Android TV beállításai nem állnak rendelkezésre"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"A táblagép beállításai nem állnak rendelkezésre"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"A telefon beállításai nem állnak rendelkezésre"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Ehhez nem lehet hozzáférni a következő eszközön: <xliff:g id="DEVICE">%1$s</xliff:g>. Próbálja újra Android TV-eszközén."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Ehhez nem lehet hozzáférni a következő eszközön: <xliff:g id="DEVICE">%1$s</xliff:g>. Próbálja újra a táblagépén."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Ehhez nem lehet hozzáférni a következő eszközön: <xliff:g id="DEVICE">%1$s</xliff:g>. Próbálja újra a telefonján."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Ehhez jelenleg nem lehet hozzáférni a következő eszközön: <xliff:g id="DEVICE">%1$s</xliff:g>. Próbálja újra Android TV-eszközén."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Ehhez jelenleg nem lehet hozzáférni a következő eszközön: <xliff:g id="DEVICE">%1$s</xliff:g>. Próbálja újra a táblagépén."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Ehhez jelenleg nem lehet hozzáférni a következő eszközön: <xliff:g id="DEVICE">%1$s</xliff:g>. Próbálja újra a telefonján."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Ehhez jelenleg nem lehet hozzáférni a következő eszközön: <xliff:g id="DEVICE">%1$s</xliff:g>. Próbálja újra Android TV-eszközén."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Ehhez jelenleg nem lehet hozzáférni a következő eszközön: <xliff:g id="DEVICE">%1$s</xliff:g>. Próbálja újra a táblagépén."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Ehhez jelenleg nem lehet hozzáférni a következő eszközön: <xliff:g id="DEVICE">%1$s</xliff:g>. Próbálja újra a telefonján."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Ez az alkalmazás nagyobb biztonságot igényel. Próbálja újra Android TV-eszközén."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Ez az alkalmazás nagyobb biztonságot igényel. Próbálja újra a táblagépén."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Ez az alkalmazás nagyobb biztonságot igényel. Próbálja újra a telefonján."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Ez az alkalmazás az Android egyik korábbi verziójához készült, így elképzelhető, hogy nem működik majd megfelelően ezen a rendszeren. Keressen frissítéseket, vagy vegye fel a kapcsolatot a fejlesztővel."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Frissítés keresése"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Új üzenetei érkeztek"</string>
diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml
index c9cf7a7..a64cf9e 100644
--- a/core/res/res/values-hy/strings.xml
+++ b/core/res/res/values-hy/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Այս սարքը չունի մատնահետքերի սկաներ։"</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Տվիչը ժամանակավորապես անջատված է:"</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Մատնահետքերի սկաները հնարավոր չէ օգտագործել։ Այցելեք սպասարկման կենտրոն։"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Սեղմվել է սնուցման կոճակը"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Մատնահետք <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Օգտագործել մատնահետք"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Օգտագործել մատնահետք կամ էկրանի կողպում"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Նայեք ուղիղ էկրանին"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Հեռացրեք այն ամենը, ինչը թաքցնում է ձեր երեսը:"</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Մաքրեք էկրանի վերևի մասը, ներառյալ սև գոտին"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Ձեր դեմքը պետք է ամբողջովին տեսանելի լինի"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Ձեր դեմքը պետք է ամբողջովին տեսանելի լինի"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Չհաջողվեց ստեղծել ձեր դեմքի մոդելը։ Նորից փորձեք։"</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Հանեք ակնոցը։ Ձեր դեմքը պետք է ամբողջովին տեսանելի լինի։"</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Դեմքի մի մասը ծածկված է։ Ձեր դեմքը պետք է ամբողջովին տեսանելի լինի։"</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Տեսախցիկն անհասանելի է"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Շարունակեք հեռախոսով"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Խոսափողն անհասանելի է"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV-ի կարգավորումներն անհասանելի են"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Պլանշետի կարգավորումներն անհասանելի են"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Հեռախոսի կարգավորումներն անհասանելի են"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Հնարավոր չէ բացել հավելվածը ձեր <xliff:g id="DEVICE">%1$s</xliff:g> սարքում։ Օգտագործեք ձեր Android TV սարքը։"</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Հնարավոր չէ բացել հավելվածը ձեր <xliff:g id="DEVICE">%1$s</xliff:g> սարքում։ Օգտագործեք ձեր պլանշետը։"</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Հնարավոր չէ բացել հավելվածը ձեր <xliff:g id="DEVICE">%1$s</xliff:g> սարքում։ Օգտագործեք ձեր հեռախոսը։"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Այս պահին հնարավոր չէ բացել հավելվածը <xliff:g id="DEVICE">%1$s</xliff:g> սարքում։ Օգտագործեք ձեր Android TV սարքը։"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Այս պահին հնարավոր չէ բացել հավելվածը <xliff:g id="DEVICE">%1$s</xliff:g> սարքում։ Օգտագործեք ձեր պլանշետը։"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Այս պահին հնարավոր չէ բացել հավելվածը <xliff:g id="DEVICE">%1$s</xliff:g> սարքում։ Օգտագործեք ձեր հեռախոսը։"</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Այս պահին հնարավոր չէ բացել հավելվածը <xliff:g id="DEVICE">%1$s</xliff:g> սարքում։ Փորձեք Android TV սարքում։"</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Այս պահին հնարավոր չէ բացել հավելվածը <xliff:g id="DEVICE">%1$s</xliff:g> սարքում։ Փորձեք ձեր պլանշետում։"</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Այս պահին հնարավոր չէ բացել հավելվածը <xliff:g id="DEVICE">%1$s</xliff:g> սարքում։ Փորձեք ձեր հեռախոսում։"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Այս հավելվածը պահանջում է անվտանգության լրացուցիչ միջոցներ։ Օգտագործեք ձեր Android TV սարքը։"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Այս հավելվածը պահանջում է անվտանգության լրացուցիչ միջոցներ։ Օգտագործեք ձեր պլանշետը։"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Այս հավելվածը պահանջում է անվտանգության լրացուցիչ միջոցներ։ Օգտագործեք ձեր հեռախոսը։"</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Այս հավելվածը ստեղծվել է Android-ի ավելի հին տարբերակի համար և կարող է պատշաճ չաշխատել: Ստուգեք թարմացումների առկայությունը կամ դիմեք մշակողին:"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Ստուգել նոր տարբերակի առկայությունը"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Դուք ունեք նոր հաղորդագրություններ"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index ad6f909..5c3522b 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Perangkat ini tidak memiliki sensor sidik jari."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor dinonaktifkan untuk sementara."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Tidak dapat menggunakan sensor sidik jari. Kunjungi penyedia reparasi"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Tombol daya ditekan"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Jari <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Gunakan sidik jari"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Gunakan sidik jari atau kunci layar"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Lihat lebih lurus ke arah ponsel"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Singkirkan apa saja yang menutupi wajah Anda."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Bersihkan bagian atas layar, termasuk kotak hitam"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Wajah Anda harus terlihat sepenuhnya"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Wajah Anda harus terlihat sepenuhnya"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Tidak dapat membuat model wajah Anda. Coba lagi."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Kacamata hitam terdeteksi. Wajah Anda harus terlihat sepenuhnya."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Penutup wajah terdeteksi. Wajah Anda harus terlihat sepenuhnya."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Kamera tidak tersedia"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Lanjutkan di ponsel"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Mikrofon tidak tersedia"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Setelan Android TV tidak tersedia"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Setelan tablet tidak tersedia"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Setelan ponsel tidak tersedia"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Aplikasi ini tidak dapat diakses di <xliff:g id="DEVICE">%1$s</xliff:g>. Coba di perangkat Android TV."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Aplikasi ini tidak dapat diakses di <xliff:g id="DEVICE">%1$s</xliff:g>. Coba di tablet."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Aplikasi ini tidak dapat diakses di <xliff:g id="DEVICE">%1$s</xliff:g>. Coba di ponsel."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Aplikasi ini tidak dapat diakses di <xliff:g id="DEVICE">%1$s</xliff:g> untuk saat ini. Coba di perangkat Android TV."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Aplikasi ini tidak dapat diakses di <xliff:g id="DEVICE">%1$s</xliff:g> untuk saat ini. Coba di tablet."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Aplikasi ini tidak dapat diakses di <xliff:g id="DEVICE">%1$s</xliff:g> untuk saat ini. Coba di ponsel."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Aplikasi ini tidak dapat diakses di <xliff:g id="DEVICE">%1$s</xliff:g> untuk saat ini. Coba di perangkat Android TV."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Aplikasi ini tidak dapat diakses di <xliff:g id="DEVICE">%1$s</xliff:g> untuk saat ini. Coba di tablet."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Aplikasi ini tidak dapat diakses di <xliff:g id="DEVICE">%1$s</xliff:g> untuk saat ini. Coba di ponsel."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Aplikasi ini meminta keamanan tambahan. Coba di perangkat Android TV."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Aplikasi ini meminta keamanan tambahan. Coba di tablet."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Aplikasi ini meminta keamanan tambahan. Coba di ponsel."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Aplikasi ini dibuat untuk Android versi lama dan mungkin tidak berfungsi sebagaimana mestinya. Coba periksa apakah ada update, atau hubungi developer."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Periksa apakah ada update"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Ada pesan baru"</string>
diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml
index 1860746..8b1793d 100644
--- a/core/res/res/values-is/strings.xml
+++ b/core/res/res/values-is/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Þetta tæki er ekki með fingrafaralesara."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Slökkt tímabundið á skynjara."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Ekki er hægt að nota fingrafaralesara. Þú verður að fara með hann á verkstæði"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Ýtt á aflrofa"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Fingur <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Nota fingrafar"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Nota fingrafar eða skjálás"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Horfðu beint á símann"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Fjarlægðu það sem kann að hylja andlitið."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Hreinsaðu efsta hluta skjásins þíns, þ.m.t. svörtu stikuna"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Allt andlitið á þér þarf að sjást"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Allt andlitið á þér þarf að sjást"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Ekki tekst að búa til andlitslíkan. Reyndu aftur."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Dökk gleraugu greindust. Allt andlitið á þér þarf að sjást."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Eitthvað er fyrir andlitinu. Allt andlitið á þér þarf að sjást."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Myndavél ekki tiltæk"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Halda áfram í símanum"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Hljóðnemi ekki tiltækur"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV stillingar ekki tiltækar"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Spjaldtölvustillingar ekki tiltækar"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Símastillingar ekki tiltækar"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Ekki er hægt að opna þetta í <xliff:g id="DEVICE">%1$s</xliff:g>. Prófaðu það í Android TV tækinu í staðinn."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Ekki er hægt að opna þetta í <xliff:g id="DEVICE">%1$s</xliff:g>. Prófaðu það í spjaldtölvunni í staðinn."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Ekki er hægt að opna þetta í <xliff:g id="DEVICE">%1$s</xliff:g>. Prófaðu það í símanum í staðinn."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Aðgangur að þessu í <xliff:g id="DEVICE">%1$s</xliff:g> er ekki í boði eins og er. Prófaðu það í Android TV tækinu í staðinn."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Aðgangur að þessu í <xliff:g id="DEVICE">%1$s</xliff:g> er ekki í boði eins og er. Prófaðu það í spjaldtölvunni í staðinn."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Aðgangur að þessu í <xliff:g id="DEVICE">%1$s</xliff:g> er ekki í boði eins og er. Prófaðu það í símanum í staðinn."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Aðgangur að þessu í <xliff:g id="DEVICE">%1$s</xliff:g> er ekki í boði eins og er. Prófaðu það í Android TV tækinu í staðinn."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Aðgangur að þessu í <xliff:g id="DEVICE">%1$s</xliff:g> er ekki í boði eins og er. Prófaðu það í spjaldtölvunni í staðinn."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Aðgangur að þessu í <xliff:g id="DEVICE">%1$s</xliff:g> er ekki í boði eins og er. Prófaðu það í símanum í staðinn."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Þetta forrit biður um viðbótaröryggi. Prófaðu það í Android TV tækinu í staðinn."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Þetta forrit biður um viðbótaröryggi. Prófaðu það í spjaldtölvunni í staðinn."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Þetta forrit biður um viðbótaröryggi. Prófaðu það í símanum í staðinn."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Þetta forrit var hannað fyrir eldri útgáfu af Android og ekki er víst að það virki eðlilega. Athugaðu hvort uppfærslur séu í boði eða hafðu samband við þróunaraðilann."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Leita að uppfærslu"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Þú ert með ný skilaboð"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 1b2138b..1e2c276 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Questo dispositivo non dispone di sensore di impronte."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensore temporaneamente disattivato."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Impossibile usare il sensore di impronte digitali. Contatta un fornitore di servizi di riparazione"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Tasto di accensione premuto"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Dito <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Usa l\'impronta"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Usa l\'impronta o il blocco schermo"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Guarda dritto nel telefono"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Rimuovi tutto ciò che ti nasconde il viso."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Pulisci la parte superiore dello schermo, inclusa la barra nera"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Il tuo volto deve essere visibile per intero"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Il tuo volto deve essere visibile per intero"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Impossibile creare il modello del volto. Riprova."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Sono stati rilevati occhiali scuri. Il tuo volto deve essere visibile per intero."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"È stata rilevata una mascherina. Il tuo volto deve essere visibile per intero."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Fotocamera non disponibile"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Continua sul telefono"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Microfono non disponibile"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Impostazioni di Android TV non disponibili"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Impostazioni del tablet non disponibili"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Impostazioni del telefono non disponibili"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Non è possibile accedere a questa app su <xliff:g id="DEVICE">%1$s</xliff:g>. Prova a usare il dispositivo Android TV."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Non è possibile accedere a questa app su <xliff:g id="DEVICE">%1$s</xliff:g>. Prova a usare il tablet."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Non è possibile accedere a questa app su <xliff:g id="DEVICE">%1$s</xliff:g>. Prova a usare il telefono."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Al momento non è possibile accedere a questa app su <xliff:g id="DEVICE">%1$s</xliff:g>. Prova a usare il dispositivo Android TV."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Al momento non è possibile accedere a questa app su <xliff:g id="DEVICE">%1$s</xliff:g>. Prova a usare il tablet."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Al momento non è possibile accedere a questa app su <xliff:g id="DEVICE">%1$s</xliff:g>. Prova a usare il telefono."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Al momento non è possibile accedere a questa app su <xliff:g id="DEVICE">%1$s</xliff:g>. Prova a usare il dispositivo Android TV."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Al momento non è possibile accedere a questa app su <xliff:g id="DEVICE">%1$s</xliff:g>. Prova a usare il tablet."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Al momento non è possibile accedere a questa app su <xliff:g id="DEVICE">%1$s</xliff:g>. Prova a usare il telefono."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Questa app richiede maggiore sicurezza. Prova a usare il dispositivo Android TV."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Questa app richiede maggiore sicurezza. Prova a usare il tablet."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Questa app richiede maggiore sicurezza. Prova a usare il telefono."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Questa app è stata realizzata per una versione precedente di Android e potrebbe non funzionare correttamente. Prova a verificare la disponibilità di aggiornamenti o contatta lo sviluppatore."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Cerca aggiornamenti"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Hai nuovi messaggi"</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index b2e0802..246bc91 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -616,6 +616,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"במכשיר הזה אין חיישן טביעות אצבע."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"החיישן מושבת באופן זמני."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"לא ניתן להשתמש בחיישן טביעות האצבע. צריך ליצור קשר עם ספק תיקונים"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"לחצן ההפעלה נלחץ"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"אצבע <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"שימוש בטביעת אצבע"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"שימוש בטביעת אצבע או בנעילת מסך"</string>
@@ -656,8 +657,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"צריך להביט ישירות בטלפון"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"יש להסיר כל דבר שמסתיר את הפנים."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"צריך לנקות את החלק העליון של המסך, כולל הסרגל השחור"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"הפנים שלך חייבות להיות גלויות לגמרי"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"הפנים שלך חייבות להיות גלויות לגמרי"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"לא ניתן ליצור את התבנית לזיהוי הפנים. יש לנסות שוב."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"זוהו משקפיים כהים. הפנים שלך חייבות להיות גלויות לגמרי."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"זוהה כיסוי על הפנים. הפנים שלך חייבות להיות גלויות לגמרי."</string>
@@ -1943,18 +1946,19 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"המצלמה לא זמינה"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"יש להמשיך בטלפון"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"המיקרופון לא זמין"</string>
+    <string name="app_streaming_blocked_title_for_playstore_dialog" msgid="8149823099822897538">"‏חנות Play לא זמינה"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"‏ההגדרות של Android TV לא זמינות"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"ההגדרות של הטאבלט לא זמינות"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"ההגדרות של הטלפון לא זמינות"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"‏אי אפשר לגשת לאפליקציה הזו במכשיר <xliff:g id="DEVICE">%1$s</xliff:g>. במקום זאת, יש לנסות במכשיר Android TV."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"אי אפשר לגשת לאפליקציה הזו במכשיר <xliff:g id="DEVICE">%1$s</xliff:g>. במקום זאת, יש לנסות בטאבלט."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"אי אפשר לגשת לאפליקציה הזו במכשיר <xliff:g id="DEVICE">%1$s</xliff:g>. במקום זאת, יש לנסות בטלפון."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"‏אי אפשר לגשת לאפליקציה הזו במכשיר <xliff:g id="DEVICE">%1$s</xliff:g> כרגע. במקום זאת, יש לנסות במכשיר Android TV."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"אי אפשר לגשת לאפליקציה הזו במכשיר <xliff:g id="DEVICE">%1$s</xliff:g> כרגע. במקום זאת, יש לנסות בטאבלט."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"אי אפשר לגשת לאפליקציה הזו במכשיר <xliff:g id="DEVICE">%1$s</xliff:g> כרגע. במקום זאת, יש לנסות בטלפון."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"‏אי אפשר לגשת לאפליקציה הזו במכשיר <xliff:g id="DEVICE">%1$s</xliff:g> כרגע. במקום זאת, יש לנסות במכשיר Android TV."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"אי אפשר לגשת לאפליקציה הזו במכשיר <xliff:g id="DEVICE">%1$s</xliff:g> כרגע. במקום זאת, יש לנסות בטאבלט."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"אי אפשר לגשת לאפליקציה הזו במכשיר <xliff:g id="DEVICE">%1$s</xliff:g> כרגע. במקום זאת, יש לנסות בטלפון."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"‏האפליקציה הזו מבקשת אמצעי אבטחה נוסף. במקום זאת, יש לנסות במכשיר Android TV."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"האפליקציה הזו מבקשת אמצעי אבטחה נוסף. במקום זאת, יש לנסות בטאבלט."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"האפליקציה הזו מבקשת אמצעי אבטחה נוסף. במקום זאת, יש לנסות בטלפון."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tv" msgid="820334666354451145">"‏אי אפשר לגשת להגדרה הזו במכשיר <xliff:g id="DEVICE">%1$s</xliff:g>. במקום זאת, יש לנסות במכשיר Android TV."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tablet" msgid="3286849551133045896">"אי אפשר לגשת להגדרה הזו במכשיר <xliff:g id="DEVICE">%1$s</xliff:g>. במקום זאת, יש לנסות בטאבלט."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"אי אפשר לגשת להגדרה הזו במכשיר <xliff:g id="DEVICE">%1$s</xliff:g>. במקום זאת, יש לנסות בטלפון."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"‏האפליקציה הזו עוצבה לגרסה ישנה יותר של Android וייתכן שלא תפעל כראוי. ניתן לבדוק אם יש עדכונים או ליצור קשר עם המפתח."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"יש עדכון חדש?"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"יש לך הודעות חדשות"</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 74af0a4..7f62a24 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"このデバイスには指紋認証センサーがありません。"</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"センサーが一時的に無効になっています。"</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"指紋認証センサーを使用できません。修理業者に調整を依頼してください"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"電源ボタンが押されました"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"指紋 <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"指紋の使用"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"指紋または画面ロックの使用"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"もっとまっすぐスマートフォンに顔を向けてください"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"顔を隠しているものをすべて外してください"</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"黒いバーを含め、画面の上部をきれいにしてください"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"顔が完全に写るようにしてください"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"顔が完全に写るようにしてください"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"顔モデルを作成できません。もう一度お試しください。"</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"サングラスが検出されました。顔が完全に写るようにしてください。"</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"マスクが検出されました。顔が完全に写るようにしてください。"</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"カメラ: 使用不可"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"スマートフォンで続行"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"マイク: 使用不可"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV の設定: 使用不可"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"タブレットの設定: 使用不可"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"スマートフォンの設定: 使用不可"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"<xliff:g id="DEVICE">%1$s</xliff:g> からはアクセスできません。Android TV デバイスでのアクセスをお試しください。"</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"<xliff:g id="DEVICE">%1$s</xliff:g> からはアクセスできません。タブレットでのアクセスをお試しください。"</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"<xliff:g id="DEVICE">%1$s</xliff:g> からはアクセスできません。スマートフォンでのアクセスをお試しください。"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"現在、<xliff:g id="DEVICE">%1$s</xliff:g> からアクセスできません。Android TV デバイスでのアクセスをお試しください。"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"現在、<xliff:g id="DEVICE">%1$s</xliff:g> からアクセスできません。タブレットでのアクセスをお試しください。"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"現在、<xliff:g id="DEVICE">%1$s</xliff:g> からアクセスできません。スマートフォンでのアクセスをお試しください。"</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"現在、<xliff:g id="DEVICE">%1$s</xliff:g> からアクセスできません。Android TV デバイスでのアクセスをお試しください。"</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"現在、<xliff:g id="DEVICE">%1$s</xliff:g> からアクセスできません。タブレットでのアクセスをお試しください。"</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"現在、<xliff:g id="DEVICE">%1$s</xliff:g> からアクセスできません。スマートフォンでのアクセスをお試しください。"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"このアプリはセキュリティの強化を求めています。Android TV デバイスでのアクセスをお試しください。"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"このアプリはセキュリティの強化を求めています。タブレットでのアクセスをお試しください。"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"このアプリはセキュリティの強化を求めています。スマートフォンでのアクセスをお試しください。"</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"このアプリは以前のバージョンの Android 用に作成されており、正常に動作しない可能性があります。アップデートを確認するか、デベロッパーにお問い合わせください。"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"アップデートを確認"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"新着メッセージがあります"</string>
diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml
index 9aeb034..eb0e49f 100644
--- a/core/res/res/values-ka/strings.xml
+++ b/core/res/res/values-ka/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ამ მოწყობილობას არ აქვს თითის ანაბეჭდის სენსორი."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"სენსორი დროებით გათიშულია."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"თითის ანაბეჭდის სენსორის გამოყენება ვერ ხერხდება. ეწვიეთ შეკეთების სერვისის პროვაიდერს"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"ჩართვის ღილაკზე დაეჭირა"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"თითი <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"გამოიყენეთ თითის ანაბეჭდი"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"გამოიყენეთ თითის ანაბეჭდი ან ეკრანის დაბლოკვა"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"პირდაპირ უყურეთ ტელეფონს"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"მოაშორეთ ყველაფერი, რაც სახეს გიფარავთ."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"გაწმინდეთ ეკრანის ზედა ნაწილი, შავი ზოლის ჩათვლით."</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"თქვენი სახე მთლიანად უნდა ჩანდეს"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"თქვენი სახე მთლიანად უნდა ჩანდეს"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"თქვენი სახის მოდელი ვერ იქმნება. ცადეთ ხელახლა."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"აღმოჩენილია მუქი სათვალე. თქვენი სახე მთლიანად უნდა ჩანდეს."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"აღმოჩენილია სახის დაფარვა. თქვენი სახე მთლიანად უნდა ჩანდეს."</string>
@@ -1941,18 +1944,19 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"კამერა მიუწვდომელია"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"ტელეფონზე გაგრძელება"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"მიკროფონი მიუწვდომელია"</string>
+    <string name="app_streaming_blocked_title_for_playstore_dialog" msgid="8149823099822897538">"Play Store მიუწვდომელია"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV-ს პარამეტრები მიუწვდომელია"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"ტაბლეტის პარამეტრები მიუწვდომელია"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"ტელეფონის პარამეტრები მიუწვდომელია"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"ამჟამად ამ აპზე თქვენი <xliff:g id="DEVICE">%1$s</xliff:g>-დან წვდომა შეუძლებელია. ცადეთ Android TV მოწყობილობიდან."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"ამჟამად ამ აპზე თქვენი <xliff:g id="DEVICE">%1$s</xliff:g>-დან წვდომა შეუძლებელია. ცადეთ ტაბლეტიდან."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"ამჟამად ამ აპზე თქვენი <xliff:g id="DEVICE">%1$s</xliff:g>-დან წვდომა შეუძლებელია. ცადეთ ტელეფონიდან."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"ამჟამად ამ აპზე თქვენი <xliff:g id="DEVICE">%1$s</xliff:g>-დან წვდომა შეუძლებელია. ცადეთ Android TV მოწყობილობიდან."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"ამჟამად ამ აპზე თქვენი <xliff:g id="DEVICE">%1$s</xliff:g>-დან წვდომა შეუძლებელია. ცადეთ ტაბლეტიდან."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"ამჟამად ამ აპზე თქვენი <xliff:g id="DEVICE">%1$s</xliff:g>-დან წვდომა შეუძლებელია. ცადეთ ტელეფონიდან."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"ამჟამად ამ აპზე თქვენი <xliff:g id="DEVICE">%1$s</xliff:g>-დან წვდომა შეუძლებელია. ცადეთ Android TV მოწყობილობიდან."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"ამჟამად ამ აპზე თქვენი <xliff:g id="DEVICE">%1$s</xliff:g>-დან წვდომა შეუძლებელია. ცადეთ ტაბლეტიდან."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"ამჟამად ამ აპზე თქვენი <xliff:g id="DEVICE">%1$s</xliff:g>-დან წვდომა შეუძლებელია. ცადეთ ტელეფონიდან."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"ეს აპი დამატებით უსაფრთხოებას ითხოვს. ცადეთ Android TV მოწყობილობიდან."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"ეს აპი დამატებით უსაფრთხოებას ითხოვს. ცადეთ ტაბლეტიდან."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"ეს აპი დამატებით უსაფრთხოებას ითხოვს. ცადეთ ტელეფონიდან."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tv" msgid="820334666354451145">"ამჟამად ამ აპზე თქვენი <xliff:g id="DEVICE">%1$s</xliff:g>-დან წვდომა შეუძლებელია. ცადეთ Android TV მოწყობილობიდან."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tablet" msgid="3286849551133045896">"ამჟამად ამ აპზე თქვენი <xliff:g id="DEVICE">%1$s</xliff:g>-დან წვდომა შეუძლებელია. ცადეთ ტაბლეტიდან."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"ამჟამად ამ აპზე თქვენი <xliff:g id="DEVICE">%1$s</xliff:g>-დან წვდომა შეუძლებელია. ცადეთ ტელეფონიდან."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"ეს აპი Android-ის ძველი ვერსიისთვის შეიქმნა და შესაძლოა სათანადოდ არ მუშაობდეს. გადაამოწმეთ განახლებები ან დაუკავშირდით დეველოპერს."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"განახლების შემოწმება"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"თქვენ ახალი შეტყობინებები გაქვთ"</string>
diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml
index c0fae1b..b810de07 100644
--- a/core/res/res/values-kk/strings.xml
+++ b/core/res/res/values-kk/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Бұл құрылғыда саусақ ізін оқу сканері жоқ."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Датчик уақытша өшірулі."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Саусақ ізін оқу сканерін пайдалану мүмкін емес. Жөндеу қызметіне барыңыз."</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Қуат түймесі басулы."</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"<xliff:g id="FINGERID">%d</xliff:g>-саусақ"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Саусақ ізін пайдалану"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Саусақ ізін немесе экран құлпын пайдалану"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Телефонға барынша тура қараңыз."</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Бетіңізді жауып тұрған нәрсені алып тастаңыз."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Экранның жоғарғы жағын, сонымен қатар қара жолақты өшіріңіз."</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Бетіңіз толық көрініп тұруы керек."</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Бетіңіз толық көрініп тұруы керек."</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Бет үлгісі жасалмады. Қайталап көріңіз."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Қою түсті көзілдірік анықталды. Бетіңіз толық көрініп тұруы керек."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Бетперде анықталды. Бетіңіз толық көрініп тұруы керек."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Камера қолжетімді емес"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Телефоннан жалғастыру"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Микрофон қолжетімді емес"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV параметрлері қолжетімді емес"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Планшет параметрлері қолжетімді емес"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Телефон параметрлері қолжетімді емес"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Бұған <xliff:g id="DEVICE">%1$s</xliff:g> құрылғысынан кіру мүмкін емес. Оның орнына Android TV құрылғысын пайдаланып көріңіз."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Бұған <xliff:g id="DEVICE">%1$s</xliff:g> құрылғысынан кіру мүмкін емес. Оның орнына планшетті пайдаланып көріңіз."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Бұған <xliff:g id="DEVICE">%1$s</xliff:g> құрылғысынан кіру мүмкін емес. Оның орнына телефонды пайдаланып көріңіз."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Қазір бұған <xliff:g id="DEVICE">%1$s</xliff:g> құрылғысынан кіру мүмкін емес. Оның орнына Android TV құрылғысын пайдаланып көріңіз."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Қазір бұған <xliff:g id="DEVICE">%1$s</xliff:g> құрылғысынан кіру мүмкін емес. Оның орнына планшетті пайдаланып көріңіз."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Қазір бұған <xliff:g id="DEVICE">%1$s</xliff:g> құрылғысынан кіру мүмкін емес. Оның орнына телефонды пайдаланып көріңіз."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Қазір бұған <xliff:g id="DEVICE">%1$s</xliff:g> құрылғысынан кіру мүмкін емес. Оның орнына Android TV құрылғысын пайдаланып көріңіз."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Қазір бұған <xliff:g id="DEVICE">%1$s</xliff:g> құрылғысынан кіру мүмкін емес. Оның орнына планшетті пайдаланып көріңіз."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Қазір бұған <xliff:g id="DEVICE">%1$s</xliff:g> құрылғысынан кіру мүмкін емес. Оның орнына телефонды пайдаланып көріңіз."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Бұл қолданба үшін қосымша қауіпсіздік шарасы қажет. Оның орнына Android TV құрылғысын пайдаланып көріңіз."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Бұл қолданба үшін қосымша қауіпсіздік шарасы қажет. Оның орнына планшетті пайдаланып көріңіз."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Бұл қолданба үшін қосымша қауіпсіздік шарасы қажет. Оның орнына телефонды пайдаланып көріңіз."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Қолданба Android жүйесінің ескі нұсқасына арналған және дұрыс жұмыс істемеуі мүмкін. Жаңартылған нұсқаны тексеріңіз немесе әзірлеушіге хабарласыңыз."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Жаңарту бар-жоғын тексеру"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Сізде жаңа хабарлар бар"</string>
diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml
index 6c1163f..cd0828d 100644
--- a/core/res/res/values-km/strings.xml
+++ b/core/res/res/values-km/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ឧបករណ៍នេះ​មិនមាន​ឧបករណ៍ចាប់​ស្នាមម្រាមដៃទេ។"</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"បានបិទ​ឧបករណ៍​ចាប់សញ្ញាជា​បណ្តោះអាសន្ន។"</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"មិនអាចប្រើ​ឧបករណ៍ចាប់ស្នាមម្រាមដៃ​បានទេ។ សូមទាក់ទង​ក្រុមហ៊ុនផ្ដល់​ការជួសជុល"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"បាន​ចុច​ប៊ូតុង​ថាមពល"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"ម្រាមដៃ <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"ប្រើស្នាមម្រាមដៃ"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"ប្រើស្នាមម្រាមដៃ ឬ​ការចាក់សោអេក្រង់"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"មើល​ទូរសព្ទ​របស់អ្នក​ឱ្យចំជាងនេះ"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"យកអ្វី​ដែលបាំង​មុខ​របស់អ្នកចេញ។"</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"សម្អាតផ្នែកខាង​លើនៃ​អេក្រង់​របស់​អ្នក រួមទាំង​របារខ្មៅ"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"មុខរបស់អ្នកត្រូវតែ​អាចមើលឃើញ​ពេញលេញ"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"មុខរបស់អ្នកត្រូវតែ​អាចមើលឃើញ​ពេញលេញ"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"មិនអាចបង្កើតគំរូមុខរបស់អ្នកបានទេ។ សូមព្យាយាមម្ដងទៀត។"</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"បានរកឃើញ​វ៉ែនតាខ្មៅ។ មុខរបស់អ្នកត្រូវតែ​អាចមើលឃើញ​ពេញលេញ។"</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"បានរកឃើញ​គ្រឿងពាក់លើមុខ។ មុខរបស់អ្នកត្រូវតែ​អាចមើលឃើញ​ពេញលេញ។"</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"មិនអាចប្រើ​កាមេរ៉ា​បានទេ"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"បន្ត​នៅលើ​ទូរសព្ទ"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"មិនអាចប្រើ​មីក្រូហ្វូនបានទេ"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"មិនអាចប្រើការកំណត់ Android TV បានទេ"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"មិនអាចប្រើ​ការកំណត់ថេប្លេត​បានទេ"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"មិនអាចប្រើ​ការកំណត់ទូរសព្ទ​បានទេ"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"មិនអាច​ចូលប្រើ​កម្មវិធីនេះ​នៅលើ <xliff:g id="DEVICE">%1$s</xliff:g> របស់អ្នកទេ។ សូមសាកល្បងប្រើ​នៅលើ​ឧបករណ៍ Android TV របស់អ្នក​ជំនួសវិញ។"</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"មិនអាច​ចូលប្រើ​កម្មវិធីនេះ​នៅលើ <xliff:g id="DEVICE">%1$s</xliff:g> របស់អ្នកទេ។ សូមសាកល្បងប្រើ​នៅលើ​ថេប្លេត​របស់អ្នក​ជំនួសវិញ។"</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"មិនអាច​ចូលប្រើ​កម្មវិធីនេះ​នៅលើ <xliff:g id="DEVICE">%1$s</xliff:g> របស់អ្នកទេ។ សូមសាកល្បងប្រើ​នៅលើ​ទូរសព្ទរបស់អ្នក​ជំនួសវិញ។"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"មិនអាចប្រើ​កម្មវិធីនេះ​នៅលើ <xliff:g id="DEVICE">%1$s</xliff:g> របស់អ្នក​នៅពេលនេះ​បានទេ។ សូមសាកល្បងប្រើ​នៅលើ​ឧបករណ៍ Android TV របស់អ្នក​ជំនួសវិញ។"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"មិនអាចប្រើ​កម្មវិធីនេះ​នៅលើ <xliff:g id="DEVICE">%1$s</xliff:g> របស់អ្នក​នៅពេលនេះ​បានទេ។ សូមសាកល្បងប្រើ​នៅលើ​ថេប្លេត​របស់អ្នក​ជំនួសវិញ។"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"មិនអាចប្រើ​កម្មវិធីនេះ​នៅលើ <xliff:g id="DEVICE">%1$s</xliff:g> របស់អ្នក​នៅពេលនេះ​បានទេ។ សូមសាកល្បងប្រើ​នៅលើ​ទូរសព្ទរបស់អ្នក​ជំនួសវិញ។"</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"មិនអាចប្រើ​កម្មវិធីនេះ​នៅលើ <xliff:g id="DEVICE">%1$s</xliff:g> របស់អ្នក​នៅពេលនេះ​បានទេ។ សូមសាកល្បងប្រើ​នៅលើ​ឧបករណ៍ Android TV របស់អ្នក​ជំនួសវិញ។"</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"មិនអាចប្រើ​កម្មវិធីនេះ​នៅលើ <xliff:g id="DEVICE">%1$s</xliff:g> របស់អ្នក​នៅពេលនេះ​បានទេ។ សូមសាកល្បងប្រើ​នៅលើ​ថេប្លេត​របស់អ្នក​ជំនួសវិញ។"</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"មិនអាចប្រើ​កម្មវិធីនេះ​នៅលើ <xliff:g id="DEVICE">%1$s</xliff:g> របស់អ្នក​នៅពេលនេះ​បានទេ។ សូមសាកល្បងប្រើ​នៅលើ​ទូរសព្ទរបស់អ្នក​ជំនួសវិញ។"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"កម្មវិធីនេះ​កំពុងស្នើសុំ​សុវត្ថិភាពបន្ថែម។ សូមសាកល្បងប្រើ​នៅលើ​ឧបករណ៍ Android TV របស់អ្នក​ជំនួសវិញ។"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"កម្មវិធីនេះ​កំពុងស្នើសុំ​សុវត្ថិភាពបន្ថែម។ សូមសាកល្បងប្រើ​នៅលើ​ថេប្លេត​របស់អ្នក​ជំនួសវិញ។"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"កម្មវិធីនេះ​កំពុងស្នើសុំ​សុវត្ថិភាពបន្ថែម។ សូមសាកល្បងប្រើ​នៅលើ​ទូរសព្ទរបស់អ្នក​ជំនួសវិញ។"</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"កម្មវិធី​នេះ​ត្រូវបាន​បង្កើត​ឡើង​សម្រាប់​កំណែ​ប្រព័ន្ធ​ប្រតិបត្តិការ Android ចាស់ ហើយ​វាអាច​ដំណើរការ​ខុសប្រក្រតី។ សូម​សាកល្បង​ពិនិត្យមើល​កំណែ​ថ្មី ឬ​ទាក់ទង​ទៅអ្នក​អភិវឌ្ឍន៍។"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"រក​មើល​កំណែ​ថ្មី"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"អ្នកមានសារថ្មី"</string>
diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml
index 46fe03e..c9edf3f 100644
--- a/core/res/res/values-kn/strings.xml
+++ b/core/res/res/values-kn/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ಈ ಸಾಧನವು ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಸೆನ್ಸರ್‌‌ ಅನ್ನು ಹೊಂದಿಲ್ಲ."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"ಸೆನ್ಸಾರ್ ಅನ್ನು ತಾತ್ಕಾಲಿಕವಾಗಿ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಸೆನ್ಸರ್ ಅನ್ನು ಬಳಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ರಿಪೇರಿ ಮಾಡುವವರನ್ನು ಸಂಪರ್ಕಿಸಿ"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"ಪವರ್ ಬಟನ್ ಒತ್ತಲಾಗಿದೆ"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"ಫಿಂಗರ್ <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"ಫಿಂಗರ್ ಪ್ರಿಂಟ್ ಬಳಸಿ"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"ಫಿಂಗರ್‌ ಪ್ರಿಂಟ್ ಅಥವಾ ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಬಳಸಿ"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ನೇರವಾಗಿ ನೋಡಿ"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"ನಿಮ್ಮ ಮುಖವನ್ನು ಮರೆಮಾಡುವ ಯಾವುದನ್ನಾದರೂ ತೆಗೆದುಹಾಕಿ."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"ಬ್ಲ್ಯಾಕ್ ಬಾರ್ ಸೇರಿದಂತೆ ನಿಮ್ಮ ಸ್ಕ್ರೀನ್‌ನ ಮೇಲ್ಭಾಗವನ್ನು ತೆರವುಗೊಳಿಸಿ"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"ನಿಮ್ಮ ಮುಖವು ಸಂಪೂರ್ಣವಾಗಿ ಗೋಚರಿಸಬೇಕು"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"ನಿಮ್ಮ ಮುಖವು ಸಂಪೂರ್ಣವಾಗಿ ಗೋಚರಿಸಬೇಕು"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"ಫೇಸ್ ಮಾಡೆಲ್ ರಚಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"ಕಪ್ಪು ಕನ್ನಡಕ ಪತ್ತೆಯಾಗಿದೆ. ನಿಮ್ಮ ಮುಖವು ಸಂಪೂರ್ಣವಾಗಿ ಗೋಚರಿಸಬೇಕು."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"ಮುಖವಾಡ ಪತ್ತೆಯಾಗಿದೆ. ನಿಮ್ಮ ಮುಖವು ಸಂಪೂರ್ಣವಾಗಿ ಗೋಚರಿಸಬೇಕು."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"ಕ್ಯಾಮರಾ ಲಭ್ಯವಿಲ್ಲ"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"ಫೋನ್‌ನಲ್ಲಿ ಮುಂದುವರಿಸಿ"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"ಮೈಕ್ರೊಫೋನ್ ಲಭ್ಯವಿಲ್ಲ"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಲಭ್ಯವಿಲ್ಲ"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"ಟ್ಯಾಬ್ಲೆಟ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಲಭ್ಯವಿಲ್ಲ"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"ಫೋನ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಲಭ್ಯವಿಲ್ಲ"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"ನಿಮ್ಮ <xliff:g id="DEVICE">%1$s</xliff:g> ನಲ್ಲಿ ಇದನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಅದರ ಬದಲು ನಿಮ್ಮ Android TV ಸಾಧನದಲ್ಲಿ ಪ್ರಯತ್ನಿಸಿ."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"ನಿಮ್ಮ <xliff:g id="DEVICE">%1$s</xliff:g> ನಲ್ಲಿ ಇದನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಅದರ ಬದಲು ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್‌ನಲ್ಲಿ ಪ್ರಯತ್ನಿಸಿ."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"ನಿಮ್ಮ <xliff:g id="DEVICE">%1$s</xliff:g> ನಲ್ಲಿ ಇದನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಅದರ ಬದಲು ನಿಮ್ಮ ಫೋನ್‌ನಲ್ಲಿ ಪ್ರಯತ್ನಿಸಿ."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"ಈ ಸಮಯದಲ್ಲಿ ನಿಮ್ಮ <xliff:g id="DEVICE">%1$s</xliff:g> ನಲ್ಲಿ ಇದನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಅದರ ಬದಲು ನಿಮ್ಮ Android TV ಸಾಧನದಲ್ಲಿ ಪ್ರಯತ್ನಿಸಿ."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"ಈ ಸಮಯದಲ್ಲಿ ನಿಮ್ಮ <xliff:g id="DEVICE">%1$s</xliff:g> ನಲ್ಲಿ ಇದನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಅದರ ಬದಲು ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್‌ನಲ್ಲಿ ಪ್ರಯತ್ನಿಸಿ."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"ಈ ಸಮಯದಲ್ಲಿ ನಿಮ್ಮ <xliff:g id="DEVICE">%1$s</xliff:g> ನಲ್ಲಿ ಇದನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಅದರ ಬದಲು ನಿಮ್ಮ ಫೋನ್‌ನಲ್ಲಿ ಪ್ರಯತ್ನಿಸಿ."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"ಈ ಸಮಯದಲ್ಲಿ ನಿಮ್ಮ <xliff:g id="DEVICE">%1$s</xliff:g> ನಲ್ಲಿ ಇದನ್ನು ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಅದರ ಬದಲು ನಿಮ್ಮ Android TV ಸಾಧನದಲ್ಲಿ ಪ್ರಯತ್ನಿಸಿ."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"ಈ ಸಮಯದಲ್ಲಿ ನಿಮ್ಮ <xliff:g id="DEVICE">%1$s</xliff:g> ನಲ್ಲಿ ಇದನ್ನು ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಅದರ ಬದಲು ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್‌ನಲ್ಲಿ ಪ್ರಯತ್ನಿಸಿ."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"ಈ ಸಮಯದಲ್ಲಿ ನಿಮ್ಮ <xliff:g id="DEVICE">%1$s</xliff:g> ನಲ್ಲಿ ಇದನ್ನು ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಅದರ ಬದಲು ನಿಮ್ಮ ಫೋನ್‌ನಲ್ಲಿ ಪ್ರಯತ್ನಿಸಿ."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"ಈ ಆ್ಯಪ್ ಹೆಚ್ಚುವರಿ ಭದ್ರತೆಯನ್ನು ವಿನಂತಿಸುತ್ತಿದೆ. ಅದರ ಬದಲು ನಿಮ್ಮ Android TV ಸಾಧನದಲ್ಲಿ ಪ್ರಯತ್ನಿಸಿ."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"ಈ ಆ್ಯಪ್ ಹೆಚ್ಚುವರಿ ಭದ್ರತೆಯನ್ನು ವಿನಂತಿಸುತ್ತಿದೆ. ಅದರ ಬದಲು ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್‌ನಲ್ಲಿ ಪ್ರಯತ್ನಿಸಿ."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"ಈ ಆ್ಯಪ್ ಹೆಚ್ಚುವರಿ ಭದ್ರತೆಯನ್ನು ವಿನಂತಿಸುತ್ತಿದೆ. ಅದರ ಬದಲು ನಿಮ್ಮ ಫೋನ್‌ನಲ್ಲಿ ಪ್ರಯತ್ನಿಸಿ."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"ಈ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು Android ನ ಹಳೆಯ ಆವೃತ್ತಿಗೆ ರಚಿಸಲಾಗಿದೆ ಮತ್ತು ಸರಿಯಾಗಿ ಕೆಲಸ ಮಾಡದಿರಬಹುದು. ಅಪ್‌ಡೇಟ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಲು ಪ್ರಯತ್ನಿಸಿ ಅಥವಾ ಡೆವಲಪರ್ ಅನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"ಅಪ್‌ಡೇಟ್‌ಗಾಗಿ ಪರಿಶೀಲಿಸಿ"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"ನೀವು ಹೊಸ ಸಂದೇಶಗಳನ್ನು ಹೊಂದಿರುವಿರಿ"</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 03a1f61..1e6954d 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"기기에 지문 센서가 없습니다."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"센서가 일시적으로 사용 중지되었습니다."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"지문 센서를 사용할 수 없습니다. 수리업체에 방문하세요."</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"전원 버튼을 눌렀습니다."</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"손가락 <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"지문 사용"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"지문 또는 화면 잠금 사용"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"휴대전화를 좀 더 똑바로 바라봐 주세요."</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"얼굴이 가려지지 않도록 해 주세요."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"검은색 바를 포함한 화면 상단을 청소하세요."</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"전체 얼굴이 보여야 합니다."</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"전체 얼굴이 보여야 합니다."</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"얼굴 모델을 만들 수 없습니다. 다시 시도해 주세요."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"선글라스가 감지되었습니다. 전체 얼굴이 보여야 합니다."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"마스크가 감지되었습니다. 전체 얼굴이 보여야 합니다."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"카메라를 사용할 수 없음"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"휴대전화에서 진행하기"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"마이크를 사용할 수 없음"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV 설정을 사용할 수 없음"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"태블릿 설정을 사용할 수 없음"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"휴대전화 설정을 사용할 수 없음"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"<xliff:g id="DEVICE">%1$s</xliff:g>에서 앱에 액세스할 수 없습니다. 대신 Android TV 기기에서 시도해 보세요."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"<xliff:g id="DEVICE">%1$s</xliff:g>에서 앱에 액세스할 수 없습니다. 대신 태블릿에서 시도해 보세요."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"<xliff:g id="DEVICE">%1$s</xliff:g>에서 앱에 액세스할 수 없습니다. 대신 휴대전화에서 시도해 보세요."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"현재 <xliff:g id="DEVICE">%1$s</xliff:g>에서 앱에 액세스할 수 없습니다. 대신 Android TV 기기에서 시도해 보세요."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"현재 <xliff:g id="DEVICE">%1$s</xliff:g>에서 앱에 액세스할 수 없습니다. 대신 태블릿에서 시도해 보세요."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"현재 <xliff:g id="DEVICE">%1$s</xliff:g>에서 앱에 액세스할 수 없습니다. 대신 휴대전화에서 시도해 보세요."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"현재 <xliff:g id="DEVICE">%1$s</xliff:g>에서 액세스할 수 없습니다. 대신 Android TV 기기에서 시도해 보세요."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"현재 <xliff:g id="DEVICE">%1$s</xliff:g>에서 액세스할 수 없습니다. 대신 태블릿에서 시도해 보세요."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"현재 <xliff:g id="DEVICE">%1$s</xliff:g>에서 액세스할 수 없습니다. 대신 스마트폰에서 시도해 보세요."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"앱에서 추가 보안을 요청합니다. 대신 Android TV 기기에서 시도해 보세요."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"앱에서 추가 보안을 요청합니다. 대신 태블릿에서 시도해 보세요."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"앱에서 추가 보안을 요청합니다. 대신 휴대전화에서 시도해 보세요."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"이 앱은 Android 이전 버전에 맞게 개발되었기 때문에 제대로 작동하지 않을 수 있습니다. 업데이트를 확인하거나 개발자에게 문의하세요."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"업데이트 확인"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"새 메시지 있음"</string>
diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml
index 048149b..96db982 100644
--- a/core/res/res/values-ky/strings.xml
+++ b/core/res/res/values-ky/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Бул түзмөктө манжа изинин сенсору жок."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Сенсор убактылуу өчүрүлгөн."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Манжа изинин сенсорун колдонууга болбойт. Тейлөө кызматына кайрылыңыз"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Кубат баскычы басылды"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"<xliff:g id="FINGERID">%d</xliff:g>-манжа"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Манжа изин колдонуу"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Манжа изин же экрандын кулпусун колдонуу"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Телефонуңузду караңыз"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Жүзүңүз жакшы көрүнбөй жатат."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Экраныңыздын жогору жагын, анын ичинде тилкени да тазалаңыз"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Жүзүңүз толук көрүнүшү керек"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Жүзүңүз толук көрүнүшү керек"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Жүзүңүздүн үлгүсү түзүлгөн жок. Кайталаңыз."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Кара көз айнек кийгенге болбойт. Жүзүңүз толук көрүнүшү керек."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Жүзүңүз жабылып калды. Ал толук көрүнүшү керек."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Камера жеткиликсиз"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Телефондон улантуу"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Микрофон жеткиликсиз"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV параметрлери жеткиликсиз"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Планшеттин параметрлери жеткиликсиз"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Телефондун параметрлери жеткиликсиз"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Буга <xliff:g id="DEVICE">%1$s</xliff:g> түзмөгүңүздөн кире албайсыз. Android TV түзмөгүңүздөн аракет кылып көрүңүз."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Буга <xliff:g id="DEVICE">%1$s</xliff:g> түзмөгүңүздөн кире албайсыз. Планшетиңизден кирип көрүңүз."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Буга <xliff:g id="DEVICE">%1$s</xliff:g> түзмөгүңүздөн кире албайсыз. Анын ордуна телефондон кирип көрүңүз."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Учурда буга <xliff:g id="DEVICE">%1$s</xliff:g> түзмөгүңүздөн кире албайсыз. Android TV түзмөгүңүздөн аракет кылып көрүңүз."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Учурда буга <xliff:g id="DEVICE">%1$s</xliff:g> түзмөгүңүздөн кире албайсыз. Планшетиңизден кирип көрүңүз."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Учурда буга <xliff:g id="DEVICE">%1$s</xliff:g> түзмөгүңүздөн кире албайсыз. Анын ордуна телефондон кирип көрүңүз."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Учурда буга <xliff:g id="DEVICE">%1$s</xliff:g> түзмөгүңүздөн кире албайсыз. Android TV түзмөгүңүздөн аракет кылып көрүңүз."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Учурда буга <xliff:g id="DEVICE">%1$s</xliff:g> түзмөгүңүздөн кире албайсыз. Планшетиңизден кирип көрүңүз."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Учурда буга <xliff:g id="DEVICE">%1$s</xliff:g> түзмөгүңүздөн кире албайсыз. Анын ордуна телефондон кирип көрүңүз."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Бул колдонмо кошумча коопсуздукту иштетүүнү суранып жатат. Android TV түзмөгүңүздөн аракет кылып көрүңүз."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Бул колдонмо кошумча коопсуздукту иштетүүнү суранып жатат. Планшетиңизден кирип көрүңүз."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Бул колдонмо кошумча коопсуздукту иштетүүнү суранып жатат. Анын ордуна телефондон кирип көрүңүз."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Бул колдонмо Android\'дин эски версиясы үчүн иштеп чыгарылган, андыктан туура эмес иштеши мүмкүн. Жаңыртууларды издеп көрүңүз же иштеп чыгуучуга кайрылыңыз."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Жаңыртууларды текшерүү"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Сизге жаңы билдирүүлөр келди"</string>
diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml
index e4b34b1..f91b889 100644
--- a/core/res/res/values-lo/strings.xml
+++ b/core/res/res/values-lo/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ອຸປະກອນນີ້ບໍ່ມີເຊັນເຊີລາຍນິ້ວມື."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"ປິດການເຮັດວຽກຂອງເຊັນເຊີໄວ້ຊົ່ວຄາວແລ້ວ."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"ບໍ່ສາມາດໃຊ້ເຊັນ​ເຊີລາຍນິ້ວ​ມືໄດ້. ກະລຸນາໄປຫາຜູ້ໃຫ້ບໍລິການສ້ອມແປງ"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"ກົດປຸ່ມເປີດປິດແລ້ວ"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"ນີ້ວ​ມື <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"ໃຊ້ລາຍນິ້ວມື"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"ໃຊ້ລາຍນິ້ວມື ຫຼື ການລັອກໜ້າຈໍ"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"ເບິ່ງຊື່ໆໄປຫາໂທລະສັບຂອງທ່ານໃຫ້ຫຼາຍຂຶ້ນ"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"ນຳສິ່ງທີ່ກີດຂວາງໃບໜ້າທ່ານອອກ."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"ທຳຄວາມສະອາດສ່ວນເທິງສຸດຂອງໜ້າຈໍທ່ານ, ຮວມທັງແຖບດຳນຳ"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"ໃບໜ້າຂອງທ່ານຕ້ອງສະແດງໃຫ້ເຫັນໝົດ"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"ໃບໜ້າຂອງທ່ານຕ້ອງສະແດງໃຫ້ເຫັນໝົດ"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"ບໍ່ສາມາດສ້າງຮູບແບບໃບໜ້າຂອງທ່ານໄດ້. ກະລຸນາລອງໃໝ່."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"ກວດພົບແວ່ນຕາດຳ. ໃບໜ້າຂອງທ່ານຕ້ອງສະແດງໃຫ້ເຫັນໝົດ."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"ກວດພົບການປົກປິດໃບໜ້າ. ໃບໜ້າຂອງທ່ານຕ້ອງສະແດງໃຫ້ເຫັນໝົດ."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"ກ້ອງຖ່າຍຮູບບໍ່ສາມາດໃຊ້ໄດ້"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"ສືບຕໍ່ຢູ່ໂທລະສັບ"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"ໄມໂຄຣໂຟນບໍ່ສາມາດໃຊ້ໄດ້"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"ການຕັ້ງຄ່າ Android TV ບໍ່ສາມາດໃຊ້ໄດ້"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"ການຕັ້ງຄ່າແທັບເລັດບໍ່ສາມາດໃຊ້ໄດ້"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"ການຕັ້ງຄ່າໂທລະສັບບໍ່ສາມາດໃຊ້ໄດ້"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"ບໍ່ສາມາດເຂົ້າເຖິງແອັບນີ້ໄດ້ຢູ່ <xliff:g id="DEVICE">%1$s</xliff:g> ຂອງທ່ານ. ກະລຸນາລອງໃຊ້ຢູ່ອຸປະກອນ Android TV ຂອງທ່ານແທນ."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"ບໍ່ສາມາດເຂົ້າເຖິງແອັບນີ້ໄດ້ຢູ່ <xliff:g id="DEVICE">%1$s</xliff:g> ຂອງທ່ານ. ກະລຸນາລອງຢູ່ແທັບເລັດຂອງທ່ານແທນ."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"ບໍ່ສາມາດເຂົ້າເຖິງແອັບນີ້ໄດ້ຢູ່ <xliff:g id="DEVICE">%1$s</xliff:g> ຂອງທ່ານ. ກະລຸນາລອງຢູ່ໂທລະສັບຂອງທ່ານແທນ."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"ບໍ່ສາມາດເຂົ້າເຖິງແອັບນີ້ໄດ້ຢູ່ <xliff:g id="DEVICE">%1$s</xliff:g> ຂອງທ່ານໃນຕອນນີ້. ກະລຸນາລອງໃຊ້ຢູ່ອຸປະກອນ Android TV ຂອງທ່ານແທນ."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"ບໍ່ສາມາດເຂົ້າເຖິງແອັບນີ້ໄດ້ຢູ່ <xliff:g id="DEVICE">%1$s</xliff:g> ຂອງທ່ານໃນຕອນນີ້. ກະລຸນາລອງຢູ່ແທັບເລັດຂອງທ່ານແທນ."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"ບໍ່ສາມາດເຂົ້າເຖິງແອັບນີ້ໄດ້ຢູ່ <xliff:g id="DEVICE">%1$s</xliff:g> ຂອງທ່ານໃນຕອນນີ້. ກະລຸນາລອງຢູ່ໂທລະສັບຂອງທ່ານແທນ."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"ບໍ່ສາມາດເຂົ້າເຖິງແອັບນີ້ໄດ້ຢູ່ <xliff:g id="DEVICE">%1$s</xliff:g> ຂອງທ່ານໃນຕອນນີ້. ກະລຸນາລອງໃຊ້ຢູ່ອຸປະກອນ Android TV ຂອງທ່ານແທນ."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"ບໍ່ສາມາດເຂົ້າເຖິງແອັບນີ້ໄດ້ຢູ່ <xliff:g id="DEVICE">%1$s</xliff:g> ຂອງທ່ານໃນຕອນນີ້. ກະລຸນາລອງຢູ່ແທັບເລັດຂອງທ່ານແທນ."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"ບໍ່ສາມາດເຂົ້າເຖິງແອັບນີ້ໄດ້ຢູ່ <xliff:g id="DEVICE">%1$s</xliff:g> ຂອງທ່ານໃນຕອນນີ້. ກະລຸນາລອງຢູ່ໂທລະສັບຂອງທ່ານແທນ."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"ແອັບນີ້ກຳລັງຮ້ອງຂໍຄວາມປອດໄພເພີ່ມເຕີມ. ກະລຸນາລອງໃຊ້ຢູ່ອຸປະກອນ Android TV ຂອງທ່ານແທນ."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"ແອັບນີ້ກຳລັງຮ້ອງຂໍຄວາມປອດໄພເພີ່ມເຕີມ. ກະລຸນາລອງຢູ່ແທັບເລັດຂອງທ່ານແທນ."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"ແອັບນີ້ກຳລັງຮ້ອງຂໍຄວາມປອດໄພເພີ່ມເຕີມ. ກະລຸນາລອງຢູ່ໂທລະສັບຂອງທ່ານແທນ."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"ແອັບນີ້ຖືກສ້າງຂຶ້ນສຳລັບ Android ເວີຊັນທີ່ເກົ່າກວ່າ ແລະ ອາດເຮັດວຽກໄດ້ບໍ່ປົກກະຕິ. ໃຫ້ລອງກວດສອບເບິ່ງອັບເດດ ຫຼື ຕິດຕໍ່ຜູ້ພັດທະນາ."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"ກວດເບິ່ງອັບເດດ"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"ທ່ານມີຂໍ້ຄວາມໃໝ່"</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index dfa4b57..e1ba13b 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -616,6 +616,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Šiame įrenginyje nėra kontrolinio kodo jutiklio."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Jutiklis laikinai išjungtas."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Negalima naudoti kontrolinio kodo jutiklio. Apsilankykite pas taisymo paslaugos teikėją"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Paspaustas maitinimo mygtukas"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"<xliff:g id="FINGERID">%d</xliff:g> pirštas"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Naudoti kontrolinį kodą"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Naudoti kontrolinį kodą arba ekrano užraktą"</string>
@@ -656,8 +657,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Žiūrėkite tiesiai į telefoną"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Patraukite viską, kas užstoja jūsų veidą."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Išvalykite ekrano viršų, įskaitant juodą juostą"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Veidas turi būti visas matomas"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Veidas turi būti visas matomas"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Nepavyko sukurti veido modelio. Band. dar kartą."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Aptikti akiniai nuo saulės. Visas veidas turi būti matomas."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Aptikta veido kaukė. Visas veidas turi būti matomas."</string>
@@ -1943,18 +1946,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Kamera nepasiekiama"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Tęsti telefone"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Mikrofonas nepasiekiamas"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"„Android TV“ nustatymai nepasiekiami"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Planšetinio kompiuterio nustatymai nepasiekiami"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Telefono nustatymai nepasiekiami"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Nepavyksta pasiekti programos iš jūsų „<xliff:g id="DEVICE">%1$s</xliff:g>“. Pabandykite naudoti „Android TV“ įrenginį."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Nepavyksta pasiekti programos iš jūsų „<xliff:g id="DEVICE">%1$s</xliff:g>“. Pabandykite naudoti planšetinį kompiuterį."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Nepavyksta pasiekti programos iš jūsų „<xliff:g id="DEVICE">%1$s</xliff:g>“. Pabandykite naudoti telefoną."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Šįkart nepavyksta pasiekti programos iš jūsų „<xliff:g id="DEVICE">%1$s</xliff:g>“. Pabandykite naudoti „Android TV“ įrenginį."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Šįkart nepavyksta pasiekti programos iš jūsų „<xliff:g id="DEVICE">%1$s</xliff:g>“. Pabandykite naudoti planšetinį kompiuterį."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Šįkart nepavyksta pasiekti programos iš jūsų „<xliff:g id="DEVICE">%1$s</xliff:g>“. Pabandykite naudoti telefoną."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Šįkart nepavyksta pasiekti programos iš jūsų „<xliff:g id="DEVICE">%1$s</xliff:g>“. Pabandykite naudoti „Android TV“ įrenginį."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Šįkart nepavyksta pasiekti programos iš jūsų „<xliff:g id="DEVICE">%1$s</xliff:g>“. Pabandykite naudoti planšetinį kompiuterį."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Šįkart nepavyksta pasiekti programos iš jūsų „<xliff:g id="DEVICE">%1$s</xliff:g>“. Pabandykite naudoti telefoną."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Ši programa prašo papildomų saugos funkcijų. Pabandykite naudoti „Android TV“ įrenginį."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Ši programa prašo papildomų saugos funkcijų. Pabandykite naudoti planšetinį kompiuterį."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Ši programa prašo papildomų saugos funkcijų. Pabandykite naudoti telefoną."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Ši programa sukurta naudoti senesnės versijos sistemoje „Android“ ir gali tinkamai neveikti. Pabandykite patikrinti, ar yra naujinių, arba susisiekite su kūrėju."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Tikrinti, ar yra naujinių"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Turite naujų pranešimų"</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index bad52d4..16b0c5b 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -615,6 +615,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Šajā ierīcē nav pirksta nospieduma sensora."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensors ir īslaicīgi atspējots."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Nevar izmantot pirksta nospieduma sensoru. Sazinieties ar remonta pakalpojumu sniedzēju."</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Tika nospiesta barošanas poga"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"<xliff:g id="FINGERID">%d</xliff:g>. pirksts"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Pirksta nospieduma izmantošana"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Pirksta nospieduma vai ekrāna bloķēšanas metodes izmantošana"</string>
@@ -655,8 +656,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Skatieties tieši uz tālruni"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Noņemiet visu, kas aizsedz jūsu seju."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Notīriet ekrāna augšdaļu, tostarp melno joslu."</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Sejai ir jābūt pilnībā redzamai"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Sejai ir jābūt pilnībā redzamai"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Nevar izveidot sejas modeli. Mēģiniet vēlreiz."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Konstatētas tumšas brilles. Sejai ir jābūt pilnībā redzamai."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Konstatēts sejas aizsegs. Sejai ir jābūt pilnībā redzamai."</string>
@@ -1942,18 +1945,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Kamera nav pieejama"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Turpiniet tālrunī"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Mikrofons nav pieejams"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV iestatījumi nav pieejami"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Planšetdatora iestatījumi nav pieejami"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Tālruņa iestatījumi nav pieejami"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Šajā ierīcē (<xliff:g id="DEVICE">%1$s</xliff:g>) nevar piekļūt šai lietotnei. Mēģiniet tai piekļūt savā Android TV ierīcē."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Šajā ierīcē (<xliff:g id="DEVICE">%1$s</xliff:g>) nevar piekļūt šai lietotnei. Mēģiniet tai piekļūt savā planšetdatorā."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Šajā ierīcē (<xliff:g id="DEVICE">%1$s</xliff:g>) nevar piekļūt šai lietotnei. Mēģiniet tai piekļūt savā tālrunī."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Šajā ierīcē (<xliff:g id="DEVICE">%1$s</xliff:g>) pašlaik nevar piekļūt šai lietotnei. Mēģiniet tai piekļūt savā Android TV ierīcē."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Šajā ierīcē (<xliff:g id="DEVICE">%1$s</xliff:g>) pašlaik nevar piekļūt šai lietotnei. Mēģiniet tai piekļūt savā planšetdatorā."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Šajā ierīcē (<xliff:g id="DEVICE">%1$s</xliff:g>) pašlaik nevar piekļūt šai lietotnei. Mēģiniet tai piekļūt savā tālrunī."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Šajā ierīcē (<xliff:g id="DEVICE">%1$s</xliff:g>) pašlaik nevar piekļūt šai lietotnei. Mēģiniet tai piekļūt savā Android TV ierīcē."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Šajā ierīcē (<xliff:g id="DEVICE">%1$s</xliff:g>) pašlaik nevar piekļūt šai lietotnei. Mēģiniet tai piekļūt savā planšetdatorā."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Šajā ierīcē (<xliff:g id="DEVICE">%1$s</xliff:g>) pašlaik nevar piekļūt šai lietotnei. Mēģiniet tai piekļūt savā tālrunī."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Šī lietotne pieprasa papildu drošību. Mēģiniet tai piekļūt savā Android TV ierīcē."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Šī lietotne pieprasa papildu drošību. Mēģiniet tai piekļūt savā planšetdatorā."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Šī lietotne pieprasa papildu drošību. Mēģiniet tai piekļūt savā tālrunī."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Šī lietotne tika izstrādāta vecākai Android versijai un var nedarboties pareizi. Meklējiet atjauninājumus vai sazinieties ar izstrādātāju."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Meklēt atjauninājumu"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Jums ir jaunas īsziņas."</string>
diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml
index 8718635..2d911a7 100644
--- a/core/res/res/values-mk/strings.xml
+++ b/core/res/res/values-mk/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Уредов нема сензор за отпечатоци."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Сензорот е привремено оневозможен."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Не може да се користи сензорот за отпечатоци. Однесете го на поправка"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Притиснато е копчето за вклучување"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Прст <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Користи отпечаток"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Користи отпечаток или заклучување екран"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Гледајте подиректно во телефонот"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Отстранете ги работите што ви го покриваат лицето."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Исчистете го врвот на екранот, вклучувајќи ја црната лента"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Лицето мора да ви се гледа целосно"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Лицето мора да ви се гледа целосно"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Не може да создаде модел на лик. Обидете се пак."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Носите темни очила. Лицето мора да ви се гледа целосно."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Лицето е покриено. Лицето мора да ви се гледа целосно."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Камерата е недостапна"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Продолжете на телефонот"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Микрофонот не е достапен"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Поставките за Android TV не се достапни"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Поставките за таблетот не се достапни"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Поставките за телефонот не се достапни"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Ова не може да се отвори на <xliff:g id="DEVICE">%1$s</xliff:g>. Пробајте на вашиот Android TV како алтернатива."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Ова не може да се отвори на <xliff:g id="DEVICE">%1$s</xliff:g>. Пробајте на вашиот таблет како алтернатива."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Ова не може да се отвори на <xliff:g id="DEVICE">%1$s</xliff:g>. Пробајте на вашиот телефон како алтернатива."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Ова не може да се отвори на <xliff:g id="DEVICE">%1$s</xliff:g> во моментов. Пробајте на вашиот Android TV како алтернатива."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Ова не може да се отвори на <xliff:g id="DEVICE">%1$s</xliff:g> во моментов. Пробајте на вашиот таблет како алтернатива."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Ова не може да се отвори на <xliff:g id="DEVICE">%1$s</xliff:g> во моментов. Пробајте на вашиот телефон како алтернатива."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Ова не може да се отвори на <xliff:g id="DEVICE">%1$s</xliff:g> во моментов. Пробајте на вашиот Android TV како алтернатива."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Ова не може да се отвори на <xliff:g id="DEVICE">%1$s</xliff:g> во моментов. Пробајте на вашиот таблет како алтернатива."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Ова не може да се отвори на <xliff:g id="DEVICE">%1$s</xliff:g> во моментов. Пробајте на вашиот телефон како алтернатива."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Апликацијава бара дополнителна безбедност. Пробајте на вашиот Android TV како алтернатива."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Апликацијава бара дополнителна безбедност. Пробајте на вашиот таблет како алтернатива."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Апликацијава бара дополнителна безбедност. Пробајте на вашиот телефон како алтернатива."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Апликацијава е создадена за постара верзија на Android и може да не функционира правилно. Проверете за ажурирања или контактирајте со програмерот."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Проверка за ажурирање"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Имате нови пораки"</string>
diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml
index b9a6fe9..08cc1fe 100644
--- a/core/res/res/values-ml/strings.xml
+++ b/core/res/res/values-ml/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ഈ ഉപകരണത്തിൽ ഫിംഗർപ്രിന്റ് സെൻസറില്ല."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"സെൻസർ താൽക്കാലികമായി പ്രവർത്തനരഹിതമാക്കി."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"വിരലടയാള സെൻസർ ഉപയോഗിക്കാനാകുന്നില്ല. റിപ്പയർ കേന്ദ്രം സന്ദർശിക്കുക"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"പവർ ബട്ടൺ അമർത്തി"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"ഫിംഗർ <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"ഫിംഗർപ്രിന്റ് ഉപയോഗിക്കുക"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"ഫിംഗർപ്രിന്റ് അല്ലെങ്കിൽ സ്‌ക്രീൻ ലോക്ക് ഉപയോഗിക്കുക"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"കൂടുതൽ കൃത്യമായി ഫോണിന് നേരെ നോക്കുക"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"നിങ്ങളുടെ മുഖം മറയ്‌ക്കുന്നത് എല്ലാം നീക്കം ചെയ്യൂ."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"കറുപ്പ് ബാർ ഉൾപ്പെടെ നിങ്ങളുടെ സ്ക്രീനിന്റെ മുകൾഭാഗം വൃത്തിയാക്കുക"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"നിങ്ങളുടെ മുഖം പൂർണ്ണമായും ദൃശ്യമായിരിക്കണം"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"നിങ്ങളുടെ മുഖം പൂർണ്ണമായും ദൃശ്യമായിരിക്കണം"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"മുഖ മോഡൽ സൃഷ്ടിക്കാനാകില്ല. വീണ്ടും ശ്രമിക്കൂ."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"കറുത്ത കണ്ണട കണ്ടെത്തി. നിങ്ങളുടെ മുഖം പൂർണ്ണമായും ദൃശ്യമായിരിക്കണം."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"മുഖം മറച്ചിരിക്കുന്നതായി കണ്ടെത്തി. നിങ്ങളുടെ മുഖം പൂർണ്ണമായും ദൃശ്യമായിരിക്കണം."</string>
@@ -1941,18 +1944,19 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"ക്യാമറ ലഭ്യമല്ല"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"ഫോണിൽ തുടരുക"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"മൈക്രോഫോൺ ലഭ്യമല്ല"</string>
+    <string name="app_streaming_blocked_title_for_playstore_dialog" msgid="8149823099822897538">"Play Store ലഭ്യമല്ല"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV ക്രമീകരണം ലഭ്യമല്ല"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Tablet ക്രമീകരണം ലഭ്യമല്ല"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"ഫോൺ ക്രമീകരണം ലഭ്യമല്ല"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"നിങ്ങളുടെ <xliff:g id="DEVICE">%1$s</xliff:g> ഉപകരണത്തിൽ ഇത് ആക്‌സസ് ചെയ്യാനാകില്ല. പകരം നിങ്ങളുടെ Android TV ഉപകരണത്തിൽ ശ്രമിച്ച് നോക്കൂ."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"നിങ്ങളുടെ <xliff:g id="DEVICE">%1$s</xliff:g> ഉപകരണത്തിൽ ഇത് ആക്‌സസ് ചെയ്യാനാകില്ല. പകരം നിങ്ങളുടെ ടാബ്‌ലെറ്റിൽ ശ്രമിച്ച് നോക്കൂ."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"നിങ്ങളുടെ <xliff:g id="DEVICE">%1$s</xliff:g> ഉപകരണത്തിൽ ഇത് ആക്‌സസ് ചെയ്യാനാകില്ല. പകരം നിങ്ങളുടെ ഫോണിൽ ശ്രമിച്ച് നോക്കൂ."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"നിങ്ങളുടെ <xliff:g id="DEVICE">%1$s</xliff:g> ഉപകരണത്തിൽ ഇത് ഇപ്പോൾ ആക്‌സസ് ചെയ്യാനാകില്ല. പകരം നിങ്ങളുടെ Android TV ഉപകരണത്തിൽ ശ്രമിച്ച് നോക്കൂ."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"നിങ്ങളുടെ <xliff:g id="DEVICE">%1$s</xliff:g> ഉപകരണത്തിൽ ഇത് ഇപ്പോൾ ആക്‌സസ് ചെയ്യാനാകില്ല. പകരം നിങ്ങളുടെ ടാബ്‌ലെറ്റിൽ ശ്രമിച്ച് നോക്കൂ."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"നിങ്ങളുടെ <xliff:g id="DEVICE">%1$s</xliff:g> ഉപകരണത്തിൽ ഇത് ഇപ്പോൾ ആക്‌സസ് ചെയ്യാനാകില്ല. പകരം നിങ്ങളുടെ ഫോണിൽ ശ്രമിച്ച് നോക്കൂ."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"ഇപ്പോൾ നിങ്ങളുടെ <xliff:g id="DEVICE">%1$s</xliff:g> ഉപകരണത്തിൽ ഇത് ആക്‌സസ് ചെയ്യാനാകില്ല. പകരം Android TV ഉപകരണത്തിൽ ശ്രമിച്ച് നോക്കൂ."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"ഇപ്പോൾ നിങ്ങളുടെ <xliff:g id="DEVICE">%1$s</xliff:g> ഉപകരണത്തിൽ ഇത് ആക്‌സസ് ചെയ്യാനാകില്ല. പകരം നിങ്ങളുടെ ടാബ്‌ലെറ്റിൽ ശ്രമിച്ച് നോക്കൂ."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"ഇപ്പോൾ നിങ്ങളുടെ <xliff:g id="DEVICE">%1$s</xliff:g> ഉപകരണത്തിൽ ഇത് ആക്‌സസ് ചെയ്യാനാകില്ല. പകരം നിങ്ങളുടെ ഫോണിൽ ശ്രമിച്ച് നോക്കൂ."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"ഈ ആപ്പ് അധിക സുരക്ഷ അഭ്യർത്ഥിക്കുന്നു. പകരം നിങ്ങളുടെ Android TV ഉപകരണത്തിൽ ശ്രമിച്ച് നോക്കൂ."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"ഈ ആപ്പ് അധിക സുരക്ഷ അഭ്യർത്ഥിക്കുന്നു. പകരം നിങ്ങളുടെ ടാബ്‌ലെറ്റിൽ ശ്രമിച്ച് നോക്കൂ."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"ഈ ആപ്പ് അധിക സുരക്ഷ അഭ്യർത്ഥിക്കുന്നു. പകരം നിങ്ങളുടെ ഫോണിൽ ശ്രമിച്ച് നോക്കൂ."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tv" msgid="820334666354451145">"നിങ്ങളുടെ <xliff:g id="DEVICE">%1$s</xliff:g> ഉപകരണത്തിൽ ഇത് ആക്‌സസ് ചെയ്യാനാകില്ല. പകരം നിങ്ങളുടെ Android TV ഉപകരണത്തിൽ ശ്രമിച്ച് നോക്കൂ."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tablet" msgid="3286849551133045896">"നിങ്ങളുടെ <xliff:g id="DEVICE">%1$s</xliff:g> ഉപകരണത്തിൽ ഇത് ആക്‌സസ് ചെയ്യാനാകില്ല. പകരം നിങ്ങളുടെ ടാബ്‌ലെറ്റിൽ ശ്രമിച്ച് നോക്കൂ."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"നിങ്ങളുടെ <xliff:g id="DEVICE">%1$s</xliff:g> ഉപകരണത്തിൽ ഇത് ആക്‌സസ് ചെയ്യാനാകില്ല. പകരം നിങ്ങളുടെ ഫോണിൽ ശ്രമിച്ച് നോക്കൂ."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"ഈ ആപ്പ് Android-ന്റെ പഴയ പതിപ്പിനായി നിർമ്മിച്ചിരിക്കുന്നതിനാൽ ശരിയായി പ്രവർത്തിച്ചേക്കില്ല. അപ്‌ഡേറ്റിനായി പരിശോധിക്കുക, അല്ലെങ്കിൽ ഡെവലപ്പറുമായി ബന്ധപ്പെടുക."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"അപ്‌ഡേറ്റിനായി പരിശോധിക്കുക"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"നിങ്ങൾക്ക് പുതിയ സന്ദേശങ്ങൾ ഉണ്ട്"</string>
diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml
index 7293701..1b4e960 100644
--- a/core/res/res/values-mn/strings.xml
+++ b/core/res/res/values-mn/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Энэ төхөөрөмжид хурууны хээ мэдрэгч алга."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Мэдрэгчийг түр хугацаанд идэвхгүй болгосон."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Хурууны хээ мэдрэгч ашиглах боломжгүй. Засварын үйлчилгээ үзүүлэгчид зочилно уу"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Асаах/Унтраах товчийг дарсан"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Хурууны хээ <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Хурууны хээ ашиглах"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Хурууны хээ эсвэл дэлгэцийн түгжээ ашиглах"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Утас руугаа аль болох эгц харна уу"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Таны нүүрийг далдалж буй аливаа зүйлийг хасна уу."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Хар хэсэг зэрэг дэлгэцийнхээ дээд хэсгийг цэвэрлэнэ үү"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Таны нүүр бүтэн харагдах ёстой"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Таны нүүр бүтэн харагдах ёстой"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Нүүрний загвар үүсгэж чадсангүй. Дахин оролдоно уу."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Хар шил илэрлээ. Таны нүүр бүтэн харагдах ёстой."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Нүүрний халхавч илэрлээ. Таны нүүр бүтэн харагдах ёстой."</string>
@@ -1941,18 +1944,19 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Камер боломжгүй байна"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Утсан дээр үргэлжлүүлэх"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Микрофон боломжгүй байна"</string>
+    <string name="app_streaming_blocked_title_for_playstore_dialog" msgid="8149823099822897538">"Play Store боломжгүй"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV-н тохиргоо боломжгүй байна"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Таблетын тохиргоо боломжгүй байна"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Утасны тохиргоо боломжгүй байна"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Үүнд таны <xliff:g id="DEVICE">%1$s</xliff:g>-с хандах боломжгүй. Оронд нь Android TV төхөөрөмж дээрээ туршиж үзнэ үү."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Үүнд таны <xliff:g id="DEVICE">%1$s</xliff:g>-с хандах боломжгүй. Оронд нь таблет дээрээ туршиж үзнэ үү."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Үүнд таны <xliff:g id="DEVICE">%1$s</xliff:g>-с хандах боломжгүй. Оронд нь утсан дээрээ туршиж үзнэ үү."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Одоогоор үүнд таны <xliff:g id="DEVICE">%1$s</xliff:g> дээрээс хандах боломжгүй. Оронд нь Android TV төхөөрөмж дээрээ туршиж үзнэ үү."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Одоогоор үүнд таны <xliff:g id="DEVICE">%1$s</xliff:g> дээрээс хандах боломжгүй. Оронд нь таблет дээрээ туршиж үзнэ үү."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Одоогоор үүнд таны <xliff:g id="DEVICE">%1$s</xliff:g> дээрээс хандах боломжгүй. Оронд нь утсан дээрээ туршиж үзнэ үү."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Одоогоор үүнд таны <xliff:g id="DEVICE">%1$s</xliff:g> дээрээс хандах боломжгүй. Оронд нь Android TV төхөөрөмж дээрээ туршиж үзнэ үү."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Одоогоор үүнд таны <xliff:g id="DEVICE">%1$s</xliff:g> дээрээс хандах боломжгүй. Оронд нь таблет дээрээ туршиж үзнэ үү."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Одоогоор үүнд таны <xliff:g id="DEVICE">%1$s</xliff:g> дээрээс хандах боломжгүй. Оронд нь утсан дээрээ туршиж үзнэ үү."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Энэ апп нэмэлт аюулгүй байдал хүсэж байна. Оронд нь Android TV төхөөрөмж дээрээ туршиж үзнэ үү."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Энэ апп нэмэлт аюулгүй байдал хүсэж байна. Оронд нь таблет дээрээ туршиж үзнэ үү."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Энэ апп нэмэлт аюулгүй байдал хүсэж байна. Оронд нь утсан дээрээ туршиж үзнэ үү."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tv" msgid="820334666354451145">"Үүнд таны <xliff:g id="DEVICE">%1$s</xliff:g>-с хандах боломжгүй. Оронд нь Android TV төхөөрөмж дээрээ туршиж үзнэ үү."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tablet" msgid="3286849551133045896">"Үүнд таны <xliff:g id="DEVICE">%1$s</xliff:g>-с хандах боломжгүй. Оронд нь таблет дээрээ туршиж үзнэ үү."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Үүнд таны <xliff:g id="DEVICE">%1$s</xliff:g>-с хандах боломжгүй. Оронд нь утсан дээрээ туршиж үзнэ үү."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Энэ аппыг Андройдын хуучин хувилбарт зориулсан бөгөөд буруу ажиллаж болзошгүй. Шинэчлэлтийг шалгаж эсвэл хөгжүүлэгчтэй холбогдоно уу."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Шинэчлэлтийг шалгах"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Танд шинэ мессежүүд байна"</string>
diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml
index 92db64c..fd49247 100644
--- a/core/res/res/values-mr/strings.xml
+++ b/core/res/res/values-mr/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"या डिव्हाइसमध्ये फिंगरप्रिंट सेन्सर नाही."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"सेन्सर तात्पुरता बंद केला आहे."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"फिंगरप्रिंट सेन्सर वापरू शकत नाही. दुरुस्तीच्या सेवा पुरवठादाराला भेट द्या"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"पॉवर बटण दाबले"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"<xliff:g id="FINGERID">%d</xliff:g> बोट"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"फिंगरप्रिंट वापरा"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"फिंगरप्रिंट किंवा स्क्रीन लॉक वापरा"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"तुमच्या फोनकडे आणखी थेट पहा"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"तुमचा चेहरा लपवणारे काहीही काढून टाका."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"ब्लॅक बार सह तुमच्या स्क्रीनची वरची बाजू साफ करा"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"तुमचा चेहरा पूर्णपणे दृश्यमान असणे आवश्यक आहे"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"तुमचा चेहरा पूर्णपणे दृश्यमान असणे आवश्यक आहे"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"फेस मॉडेल तयार करू शकत नाही. पुन्हा प्रयत्न करा."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"गडद चष्मा डिटेक्ट केला. तुमचा चेहरा पूर्णपणे दृश्यमान असणे आवश्यक आहे."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"चेहर्‍यावरील आच्छादन डिटेक्ट केले. तुमचा चेहरा पूर्णपणे दृश्यमान असणे आवश्यक आहे."</string>
@@ -1941,18 +1944,19 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"कॅमेरा उपलब्ध नाही"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"फोनवर पुढे सुरू ठेवा"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"मायक्रोफोन उपलब्ध नाही"</string>
+    <string name="app_streaming_blocked_title_for_playstore_dialog" msgid="8149823099822897538">"Play Store उपलब्ध नाही"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV सेटिंग्ज उपलब्ध नाहीत"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"टॅबलेट सेटिंग्ज उपलब्ध नाहीत"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"फोन सेटिंग्ज उपलब्ध नाहीत"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"हे तुमच्या <xliff:g id="DEVICE">%1$s</xliff:g> वर अ‍ॅक्सेस केले जाऊ शकत नाही. त्याऐवजी तुमच्या Android TV डिव्हाइसवर अ‍ॅक्सेस करून पहा."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"हे तुमच्या <xliff:g id="DEVICE">%1$s</xliff:g> वर अ‍ॅक्सेस केले जाऊ शकत नाही. त्याऐवजी तुमच्या टॅबलेटवर अ‍ॅक्सेस करून पहा."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"हे तुमच्या <xliff:g id="DEVICE">%1$s</xliff:g> वर अ‍ॅक्सेस केले जाऊ शकत नाही. त्याऐवजी तुमच्या फोनवर अ‍ॅक्सेस करून पहा."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"हे यावेळी तुमच्या <xliff:g id="DEVICE">%1$s</xliff:g> वर अ‍ॅक्सेस केले जाऊ शकत नाही. त्याऐवजी तुमच्या Android TV डिव्हाइसवर अ‍ॅक्सेस करून पहा."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"हे यावेळी तुमच्या <xliff:g id="DEVICE">%1$s</xliff:g> वर अ‍ॅक्सेस केले जाऊ शकत नाही. त्याऐवजी तुमच्या टॅबलेटवर अ‍ॅक्सेस करून पहा."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"हे यावेळी तुमच्या <xliff:g id="DEVICE">%1$s</xliff:g> वर अ‍ॅक्सेस केले जाऊ शकत नाही. त्याऐवजी तुमच्या फोनवर अ‍ॅक्सेस करून पहा."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"हे यावेळी तुमच्या <xliff:g id="DEVICE">%1$s</xliff:g> वर अ‍ॅक्सेस करू शकत नाही. त्याऐवजी तुमच्या Android TV डिव्हाइसवर अ‍ॅक्सेस करून पहा."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"हे यावेळी तुमच्या <xliff:g id="DEVICE">%1$s</xliff:g> वर अ‍ॅक्सेस करू शकत नाही. त्याऐवजी तुमच्या टॅबलेटवर अ‍ॅक्सेस करून पहा."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"हे यावेळी तुमच्या <xliff:g id="DEVICE">%1$s</xliff:g> वर अ‍ॅक्सेस करू शकत नाही. त्याऐवजी तुमच्या फोनवर अ‍ॅक्सेस करून पहा."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"हे अ‍ॅप अतिरिक्त सुरक्षेची विनंती करत आहे. त्याऐवजी तुमच्या Android TV डिव्हाइसवर अ‍ॅक्सेस करून पहा."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"हे अ‍ॅप अतिरिक्त सुरक्षेची विनंती करत आहे. त्याऐवजी तुमच्या टॅबलेटवर अ‍ॅक्सेस करून पहा."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"हे अ‍ॅप अतिरिक्त सुरक्षेची विनंती करत आहे. त्याऐवजी तुमच्या फोनवर अ‍ॅक्सेस करून पहा."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tv" msgid="820334666354451145">"हे तुमच्या <xliff:g id="DEVICE">%1$s</xliff:g> वर अ‍ॅक्सेस केले जाऊ शकत नाही. त्याऐवजी तुमच्या Android TV डिव्हाइसवर अ‍ॅक्सेस करून पहा."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tablet" msgid="3286849551133045896">"हे तुमच्या <xliff:g id="DEVICE">%1$s</xliff:g> वर अ‍ॅक्सेस केले जाऊ शकत नाही. त्याऐवजी तुमच्या टॅबलेटवर अ‍ॅक्सेस करून पहा."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"हे तुमच्या <xliff:g id="DEVICE">%1$s</xliff:g> वर अ‍ॅक्सेस केले जाऊ शकत नाही. त्याऐवजी तुमच्या फोनवर अ‍ॅक्सेस करून पहा."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"हे अ‍ॅप Android च्या जुन्या आवृत्ती साठी तयार करण्यात आले होते आणि योग्यरितीने कार्य करू शकणार नाही. अपडेट आहेत का ते तपासून पहा, किंवा डेव्हलपरशी संपर्क साधण्याचा प्रयत्न करा."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"अपडेटसाठी तपासा"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"आपल्याकडे नवीन मेसेज आहेत"</string>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index 7c870d2..baa17eb 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Peranti ini tiada penderia cap jari."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Penderia dilumpuhkan sementara."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Tidak boleh menggunakan penderia cap jari. Lawati penyedia pembaikan"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Butang kuasa ditekan"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Jari <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Gunakan cap jari"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Gunakan cap jari atau kunci skrin"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Lihat terus pada telefon anda"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Alih keluar apa-apa yang melindungi wajah anda."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Bersihkan bahagian atas skrin anda, termasuk bar hitam"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Wajah anda mesti terlihat sepenuhnya"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Wajah anda mesti terlihat sepenuhnya"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Tidak dapat membuat model wajah anda. Cuba lagi."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Cermin mata gelap dikesan. Wajah anda mesti terlihat sepenuhnya."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Pelitup muka dikesan. Wajah anda mesti terlihat sepenuhnya."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Kamera tidak tersedia"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Teruskan pada telefon"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Mikrofon tidak tersedia"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Tetapan Android TV tidak tersedia"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Tetapan tablet tidak tersedia"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Tetapan telefon tidak tersedia"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Apl ini tidak boleh diakses pada <xliff:g id="DEVICE">%1$s</xliff:g>. Cuba pada peranti Android TV anda."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Apl ini tidak boleh diakses pada <xliff:g id="DEVICE">%1$s</xliff:g>. Cuba pada tablet anda."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Apl ini tidak boleh diakses pada <xliff:g id="DEVICE">%1$s</xliff:g>. Cuba pada telefon anda."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Aplikasi ini tidak boleh diakses pada <xliff:g id="DEVICE">%1$s</xliff:g> anda pada masa ini. Cuba pada peranti Android TV anda."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Aplikasi ini tidak boleh diakses pada <xliff:g id="DEVICE">%1$s</xliff:g> anda pada masa ini. Cuba pada tablet anda."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Aplikasi ini tidak boleh diakses pada <xliff:g id="DEVICE">%1$s</xliff:g> anda pada masa ini. Cuba pada telefon anda."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Aplikasi ini tidak boleh diakses pada <xliff:g id="DEVICE">%1$s</xliff:g> anda pada masa ini. Cuba pada peranti Android TV anda."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Aplikasi ini tidak boleh diakses pada <xliff:g id="DEVICE">%1$s</xliff:g> anda pada masa ini. Cuba pada tablet anda."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Aplikasi ini tidak boleh diakses pada <xliff:g id="DEVICE">%1$s</xliff:g> anda pada masa ini. Cuba pada telefon anda."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Apl ini meminta keselamatan tambahan. Cuba pada peranti Android TV anda."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Apl ini meminta keselamatan tambahan. Cuba pada tablet anda."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Apl ini meminta keselamatan tambahan. Cuba pada telefon anda."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Apl ini dibina untuk versi Android yang lebih lama dan mungkin tidak berfungsi dengan betul. Cuba semak kemas kini atau hubungi pembangun."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Semak kemaskinian"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Anda mempunyai mesej baharu"</string>
diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml
index d5035a0..0696ddd 100644
--- a/core/res/res/values-my/strings.xml
+++ b/core/res/res/values-my/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ဤစက်တွင် လက်ဗွေအာရုံခံကိရိယာ မရှိပါ။"</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"အာရုံခံကိရိယာကို ယာယီပိတ်ထားသည်။"</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"လက်ဗွေ အာရုံခံကိရိယာကို အသုံးပြု၍ မရပါ။ ပြုပြင်ရေး ဝန်ဆောင်မှုပေးသူထံသို့ သွားပါ"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"ဖွင့်ပိတ်ခလုတ် နှိပ်ထားသည်"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"လက်ချောင်း <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"လက်ဗွေ သုံးခြင်း"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"လက်ဗွေ (သို့) ဖန်သားပြင်လော့ခ်ချခြင်းကို သုံးခြင်း"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"သင့်ဖုန်းကို တည့်တည့်ကြည့်ပါ"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"သင့်မျက်နှာကို ကွယ်နေသည့်အရာအားလုံး ဖယ်ပါ။"</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"အနက်ရောင်ဘားအပါအဝင် ဖန်သားပြင်ထိပ်ကို သန့်ရှင်းရေး လုပ်ပါ"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"သင့်မျက်နှာကို အပြည့်အဝ မြင်ရရန်လိုအပ်သည်"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"သင့်မျက်နှာကို အပြည့်အဝ မြင်ရရန်လိုအပ်သည်"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"သင့်မျက်နှာနမူနာ ပြုလုပ်၍မရပါ။ ထပ်စမ်းကြည့်ပါ။"</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"အရောင်ရင့်သောမျက်မှန် တွေ့သည်။ သင့်မျက်နှာကို အပြည့်အဝ မြင်ရရန်လိုအပ်သည်။"</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"မျက်နှာဖုံး တွေ့သည်။ သင့်မျက်နှာကို အပြည့်အဝ မြင်ရရန်လိုအပ်သည်။"</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"ကင်မရာ မရနိုင်ပါ"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"ဖုန်းပေါ်တွင် ရှေ့ဆက်ပါ"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"မိုက်ခရိုဖုန်း မရနိုင်ပါ"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV ဆက်တင်များ မရနိုင်ပါ"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Tablet ဆက်တင်များ မရနိုင်ပါ"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Phone ဆက်တင်များ မရနိုင်ပါ"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"၎င်းကို သင်၏ <xliff:g id="DEVICE">%1$s</xliff:g> တွင် သုံး၍မရပါ။ Android TV စက်တွင် စမ်းကြည့်ပါ။"</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"၎င်းကို သင်၏ <xliff:g id="DEVICE">%1$s</xliff:g> တွင် သုံး၍မရပါ။ တက်ဘလက်တွင် စမ်းကြည့်ပါ။"</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"၎င်းကို သင်၏ <xliff:g id="DEVICE">%1$s</xliff:g> တွင် သုံး၍မရပါ။ ဖုန်းတွင် စမ်းကြည့်ပါ။"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"၎င်းကို သင်၏ <xliff:g id="DEVICE">%1$s</xliff:g> တွင် ယခုသုံး၍မရပါ။ Android TV စက်တွင် စမ်းကြည့်ပါ။"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"၎င်းကို သင်၏ <xliff:g id="DEVICE">%1$s</xliff:g> တွင် ယခုသုံး၍မရပါ။ တက်ဘလက်တွင် စမ်းကြည့်ပါ။"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"၎င်းကို သင်၏ <xliff:g id="DEVICE">%1$s</xliff:g> တွင် ယခုသုံး၍မရပါ။ ဖုန်းတွင် စမ်းကြည့်ပါ။"</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"၎င်းအား ယခု သင့် <xliff:g id="DEVICE">%1$s</xliff:g> တွင် ဝင်၍မရပါ။ ယင်းအစား Android TV စက်တွင် စမ်းကြည့်ပါ။"</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"၎င်းအား ယခု သင့် <xliff:g id="DEVICE">%1$s</xliff:g> တွင် ဝင်၍မရပါ။ ယင်းအစား တက်ဘလက်တွင် စမ်းကြည့်ပါ။"</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"၎င်းအား ယခု သင့် <xliff:g id="DEVICE">%1$s</xliff:g> တွင် ဝင်၍မရပါ။ ယင်းအစား ဖုန်းတွင် စမ်းကြည့်ပါ။"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"ဤအက်ပ်က ထပ်ဆောင်းလုံခြုံရေးကို တောင်းဆိုနေသည်။ Android TV စက်တွင် စမ်းကြည့်ပါ။"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"ဤအက်ပ်က ထပ်ဆောင်းလုံခြုံရေးကို တောင်းဆိုနေသည်။ တက်ဘလက်တွင် စမ်းကြည့်ပါ။"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"ဤအက်ပ်က ထပ်ဆောင်းလုံခြုံရေးကို တောင်းဆိုနေသည်။ ဖုန်းတွင် စမ်းကြည့်ပါ။"</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"ဤအက်ပ်ကို Android ဗားရှင်းဟောင်းအတွက် ပြုလုပ်ထားခြင်းဖြစ်ပြီး ပုံမှန်အလုပ်မလုပ်နိုင်ပါ။ အပ်ဒိတ်များအတွက် ရှာကြည့်ပါ သို့မဟုတ် ဆော့ဖ်ဝဲအင်ဂျင်နီယာကို ဆက်သွယ်ပါ။"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"အပ်ဒိတ်စစ်ရန်"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"သင့်ထံတွင် စာအသစ်များရောက်နေသည်"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index f26f7d4..e9660a0 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Denne enheten har ikke fingeravtrykkssensor."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensoren er midlertidig slått av."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Kan ikke bruke fingeravtrykkssensoren. Gå til en reparasjonsleverandør"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Av/på-knappen ble trykket"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Finger <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Bruk fingeravtrykk"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Bruk fingeravtrykk eller skjermlås"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Se mer direkte på telefonen"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Fjern alt som skjuler ansiktet ditt."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Rengjør den øverste delen av skjermen, inkludert den svarte linjen"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Ansiktet må være helt synlig"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Ansiktet må være helt synlig"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Kan ikke lage ansiktsmodell. Prøv på nytt."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Mørke briller er registrert. Ansiktet må være helt synlig."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Ansiktsdekke er registrert. Ansiktet må være helt synlig."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Kameraet er utilgjengelig"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Fortsett på telefonen"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Mikrofonen er utilgjengelig"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV-innstillingene er utilgjengelige"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Nettbrettinnstillingene er utilgjengelige"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Telefoninnstillingene er utilgjengelige"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Dette er ikke tilgjengelig på <xliff:g id="DEVICE">%1$s</xliff:g>. Prøv på Android TV-enheten din i stedet."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Dette er ikke tilgjengelig på <xliff:g id="DEVICE">%1$s</xliff:g>. Prøv på nettbrettet ditt i stedet."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Dette er ikke tilgjengelig på <xliff:g id="DEVICE">%1$s</xliff:g>. Prøv på telefonen din i stedet."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Dette er ikke tilgjengelig på <xliff:g id="DEVICE">%1$s</xliff:g> for øyeblikket. Prøv på Android TV-enheten din i stedet."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Dette er ikke tilgjengelig på <xliff:g id="DEVICE">%1$s</xliff:g> for øyeblikket. Prøv på nettbrettet ditt i stedet."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Dette er ikke tilgjengelig på <xliff:g id="DEVICE">%1$s</xliff:g> for øyeblikket. Prøv på telefonen din i stedet."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Dette er ikke tilgjengelig på <xliff:g id="DEVICE">%1$s</xliff:g> for øyeblikket. Prøv på Android TV-enheten din i stedet."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Dette er ikke tilgjengelig på <xliff:g id="DEVICE">%1$s</xliff:g> for øyeblikket. Prøv på nettbrettet ditt i stedet."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Dette er ikke tilgjengelig på <xliff:g id="DEVICE">%1$s</xliff:g> for øyeblikket. Prøv på telefonen din i stedet."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Denne appen ber om ekstra sikkerhet. Prøv på Android TV-enheten din i stedet."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Denne appen ber om ekstra sikkerhet. Prøv på nettbrettet ditt i stedet."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Denne appen ber om ekstra sikkerhet. Prøv på telefonen din i stedet."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Denne appen er utviklet for en eldre versjon av Android og fungerer kanskje ikke som den skal. Prøv å se etter oppdateringer, eller kontakt utvikleren."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Se etter oppdateringer"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Du har nye meldinger"</string>
diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml
index d6e98ce..0fbaadb 100644
--- a/core/res/res/values-ne/strings.xml
+++ b/core/res/res/values-ne/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"यो डिभाइसमा कुनै पनि फिंगरप्रिन्ट सेन्सर छैन।"</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"केही समयका लागि सेन्सर असक्षम पारियो।"</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"फिंगरप्रिन्ट सेन्सर प्रयोग गर्न मिल्दैन। फिंगरप्रिन्ट सेन्सर मर्मत गर्ने सेवा प्रदायक कम्पनीमा सम्पर्क गर्नुहोस्"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"पावर बटन थिचियो"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"औंला <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"फिंगरप्रिन्ट प्रयोग गर्नुहोस्"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"फिंगरप्रिन्ट वा स्क्रिन लक प्रयोग गर्नुहोस्"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"आफ्नो फोनमा अझ सीधा हेर्नुहोस्"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"तपाईंको अनुहार लुकाउने सबै कुरा हटाउनुहोस्।"</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"कालो रङको पट्टीलगायत आफ्नो स्क्रिनको माथिल्लो भाग सफा गर्नुहोस्"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"तपाईंको अनुहार पूरै देखिनु पर्छ"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"तपाईंको अनुहार पूरै देखिनु पर्छ"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"तपाईंको फेस मोडेल सिर्जना गर्न सकिएन। फेरि प्रयास गर्नुहोस्।"</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"कालो चस्मा लगाइएको पाइयो। तपाईंको अनुहार पूरै देखिनु पर्छ।"</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"अनुहार छोपिएको पाइयो। तपाईंको अनुहार पूरै देखिनु पर्छ।"</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"क्यामेरा उपलब्ध छैन"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"फोनमा जारी राख्नुहोस्"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"माइक्रोफोन उपलब्ध छैन"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV सम्बन्धी सेटिङ उपलब्ध छैनन्"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"ट्याब्लेटका सेटिङ उपलब्ध छैनन्"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"फोनका सेटिङ उपलब्ध छैनन्"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"हाल तपाईंको <xliff:g id="DEVICE">%1$s</xliff:g> मा यो एप चलाउन मिल्दैन। बरु तपाईंको Android TV डिभाइसमा स्ट्रिम गरी हेर्नुहोस्।"</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"हाल तपाईंको <xliff:g id="DEVICE">%1$s</xliff:g> मा यो एप चलाउन मिल्दैन। बरु तपाईंको ट्याब्लेटमा स्ट्रिम गरी हेर्नुहोस्।"</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"हाल तपाईंको <xliff:g id="DEVICE">%1$s</xliff:g> मा यो एप चलाउन मिल्दैन। बरु तपाईंको फोनमा स्ट्रिम गरी हेर्नुहोस्।"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"यस बखत तपाईंको <xliff:g id="DEVICE">%1$s</xliff:g> मा यो एप स्ट्रिम गर्न मिल्दैन। बरु तपाईंको Android TV डिभाइसमा स्ट्रिम गरी हेर्नुहोस्।"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"यस बखत तपाईंको <xliff:g id="DEVICE">%1$s</xliff:g> मा यो एप स्ट्रिम गर्न मिल्दैन। बरु तपाईंको ट्याब्लेटमा स्ट्रिम गरी हेर्नुहोस्।"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"यस बखत तपाईंको <xliff:g id="DEVICE">%1$s</xliff:g> मा यो एप स्ट्रिम गर्न मिल्दैन। बरु तपाईंको फोनमा स्ट्रिम गरी हेर्नुहोस्।"</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"यस बखत तपाईंको <xliff:g id="DEVICE">%1$s</xliff:g> मा यो एप स्ट्रिम गर्न मिल्दैन। बरु तपाईंको Android TV डिभाइसमा स्ट्रिम गरी हेर्नुहोस्।"</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"यस बखत तपाईंको <xliff:g id="DEVICE">%1$s</xliff:g> मा यो एप स्ट्रिम गर्न मिल्दैन। बरु तपाईंको ट्याब्लेटमा स्ट्रिम गरी हेर्नुहोस्।"</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"यस बखत तपाईंको <xliff:g id="DEVICE">%1$s</xliff:g> मा यो एप स्ट्रिम गर्न मिल्दैन। बरु तपाईंको फोनमा स्ट्रिम गरी हेर्नुहोस्।"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"यो एपले सुरक्षासम्बन्धी अतिरिक्त सुविधा अन गर्न अनुरोध गरिरहेको छ। बरु तपाईंको Android TV डिभाइसमा स्ट्रिम गरी हेर्नुहोस्।"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"यो एपले सुरक्षासम्बन्धी अतिरिक्त सुविधा अन गर्न अनुरोध गरिरहेको छ। बरु तपाईंको ट्याब्लेटमा स्ट्रिम गरी हेर्नुहोस्।"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"यो एपले सुरक्षासम्बन्धी अतिरिक्त सुविधा अन गर्न अनुरोध गरिरहेको छ। बरु तपाईंको फोनमा स्ट्रिम गरी हेर्नुहोस्।"</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"यो एप Android को पुरानो संस्करणका लागि बनाइएको हुनाले यसले सही ढङ्गले काम नगर्न सक्छ। अद्यावधिकहरू उपलब्ध छन् वा छैनन् भनी जाँच गरी हेर्नुहोस् वा यसको विकासकर्तालाई सम्पर्क गर्नुहोस्।"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"अपडेट उपलब्ध छ वा छैन जाँच्नुहोस्"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"तपाईंलाई नयाँ सन्देश आएको छ"</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 8ebf2db..8ead9026 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Dit apparaat heeft geen vingerafdruksensor."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor staat tijdelijk uit."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Kan vingerafdruksensor niet gebruiken. Ga naar een reparateur."</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Aan/uit-knop ingedrukt"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Vinger <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Vingerafdruk gebruiken"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Vingerafdruk of schermvergrendeling gebruiken"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Kijk goed recht naar je telefoon"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Zorg dat je gezicht volledig zichtbaar is"</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Reinig de bovenkant van je scherm, inclusief de zwarte balk"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Je gezicht moet geheel zichtbaar zijn"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Je gezicht moet geheel zichtbaar zijn"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Kan gezichtsmodel niet maken. Probeer het opnieuw."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Donkere bril waargenomen. Je gezicht moet geheel zichtbaar zijn."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Gezichtsbedekking waargenomen. Je gezicht moet geheel zichtbaar zijn."</string>
@@ -1941,18 +1944,19 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Camera niet beschikbaar"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Doorgaan op telefoon"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Microfoon niet beschikbaar"</string>
+    <string name="app_streaming_blocked_title_for_playstore_dialog" msgid="8149823099822897538">"Play Store niet beschikbaar"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV-instellingen niet beschikbaar"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Tabletinstellingen niet beschikbaar"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Telefooninstellingen niet beschikbaar"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Je hebt hier geen toegang toe op je <xliff:g id="DEVICE">%1$s</xliff:g>. Probeer het in plaats daarvan op je Android TV-apparaat."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Je hebt hier geen toegang toe op je <xliff:g id="DEVICE">%1$s</xliff:g>. Probeer het in plaats daarvan op je tablet."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Je hebt hier geen toegang toe op je <xliff:g id="DEVICE">%1$s</xliff:g>. Probeer het in plaats daarvan op je telefoon."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Je hebt hier nu geen toegang toe op je <xliff:g id="DEVICE">%1$s</xliff:g>. Probeer het in plaats daarvan op je Android TV-apparaat."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Je hebt hier nu geen toegang toe op je <xliff:g id="DEVICE">%1$s</xliff:g>. Probeer het in plaats daarvan op je tablet."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Je hebt hier nu geen toegang toe op je <xliff:g id="DEVICE">%1$s</xliff:g>. Probeer het in plaats daarvan op je telefoon."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Je hebt hier nu geen toegang toe op je <xliff:g id="DEVICE">%1$s</xliff:g>. Probeer het in plaats daarvan op je Android TV-apparaat."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Je hebt hier nu geen toegang toe op je <xliff:g id="DEVICE">%1$s</xliff:g>. Probeer het in plaats daarvan op je tablet."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Je hebt hier nu geen toegang toe op je <xliff:g id="DEVICE">%1$s</xliff:g>. Probeer het in plaats daarvan op je telefoon."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Deze app vraagt om aanvullende beveiliging. Probeer het in plaats daarvan op je Android TV-apparaat."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Deze app vraagt om aanvullende beveiliging. Probeer het in plaats daarvan op je tablet."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Deze app vraagt om aanvullende beveiliging. Probeer het in plaats daarvan op je telefoon."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tv" msgid="820334666354451145">"Je hebt hier geen toegang toe op je <xliff:g id="DEVICE">%1$s</xliff:g>. Probeer het in plaats daarvan op je Android TV-apparaat."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tablet" msgid="3286849551133045896">"Je hebt hier geen toegang toe op je <xliff:g id="DEVICE">%1$s</xliff:g>. Probeer het in plaats daarvan op je tablet."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Je hebt hier geen toegang toe op je <xliff:g id="DEVICE">%1$s</xliff:g>. Probeer het in plaats daarvan op je telefoon."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Deze app is ontwikkeld voor een oudere versie van Android en werkt mogelijk niet op de juiste manier. Controleer op updates of neem contact op met de ontwikkelaar."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Checken op updates"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Je hebt nieuwe berichten"</string>
diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml
index afa0405..3541a5d 100644
--- a/core/res/res/values-or/strings.xml
+++ b/core/res/res/values-or/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ଏହି ଡିଭାଇସ୍‌ରେ ଟିପଚିହ୍ନ ସେନ୍‍ସର୍ ନାହିଁ।"</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"ସେନ୍ସରକୁ ଅସ୍ଥାୟୀ ଭାବେ ଅକ୍ଷମ କରାଯାଇଛି।"</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"ଟିପଚିହ୍ନ ସେନ୍ସରକୁ ବ୍ୟବହାର କରାଯାଇପାରିବ ନାହିଁ। ଏକ ମରାମତି କେନ୍ଦ୍ରକୁ ଭିଜିଟ୍ କରନ୍ତୁ"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"ପାୱାର ବଟନ ଦବାଯାଇଛି"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"ଆଙ୍ଗୁଠି <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"ଟିପଚିହ୍ନ ବ୍ୟବହାର କରନ୍ତୁ"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"ଟିପଚିହ୍ନ ବା ସ୍କ୍ରିନ୍ ଲକ୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"ଆପଣଙ୍କ ଫୋନକୁ ସମ୍ପୂର୍ଣ୍ଣ ସିଧା ଦେଖନ୍ତୁ"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"ଆପଣଙ୍କ ମୁହଁକୁ ଲୁଚାଉଥିବା ଯେ କୌଣସି ଜିନିଷକୁ କାଢ଼ି ଦିଅନ୍ତୁ।"</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"କଳା ବାର୍ ସମେତ ଆପଣଙ୍କ ସ୍କ୍ରିନ୍‌ର ଶୀର୍ଷକୁ ସଫା କରନ୍ତୁ"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"ଆପଣଙ୍କ ଫେସ ସମ୍ପୂର୍ଣ୍ଣ ଭାବରେ ଦେଖାଯିବା ଆବଶ୍ଯକ"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"ଆପଣଙ୍କ ଫେସ ସମ୍ପୂର୍ଣ୍ଣ ଭାବରେ ଦେଖାଯିବା ଆବଶ୍ଯକ"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"ଫେସର ମଡେଲ ତିଆରି କରାଯାଇପାରିବ ନାହିଁ। ପୁଣି ଚେଷ୍ଟା କର।"</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"କଳା ଚଷମା ଚିହ୍ନଟ କରାଯାଇଛି। ଆପଣଙ୍କ ଫେସ ସମ୍ପୂର୍ଣ୍ଣ ଭାବରେ ଦେଖାଯିବା ଆବଶ୍ଯକ।"</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"ଫେସରେ କଭରିଂ ଚିହ୍ନଟ କରାଯାଇଛି। ଆପଣଙ୍କ ଫେସ ସମ୍ପୂର୍ଣ୍ଣ ଭାବରେ ଦେଖାଯିବା ଆବଶ୍ଯକ।"</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"କ୍ୟାମେରା ଉପଲବ୍ଧ ନାହିଁ"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"ଫୋନରେ ଜାରି ରଖନ୍ତୁ"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"ମାଇକ୍ରୋଫୋନ ଉପଲବ୍ଧ ନାହିଁ"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV ସେଟିଂସ ଉପଲବ୍ଧ ନାହିଁ"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"ଟାବଲେଟ ସେଟିଂସ ଉପଲବ୍ଧ ନାହିଁ"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"ଫୋନ ସେଟିଂସ ଉପଲବ୍ଧ ନାହିଁ"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"ଏହାକୁ ଆପଣଙ୍କ <xliff:g id="DEVICE">%1$s</xliff:g>ରେ ଆକ୍ସେସ କରାଯାଇପାରିବ ନାହିଁ। ଏହା ପରିବର୍ତ୍ତେ ଆପଣଙ୍କ Android TV ଡିଭାଇସରେ ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"ଏହାକୁ ଆପଣଙ୍କ <xliff:g id="DEVICE">%1$s</xliff:g>ରେ ଆକ୍ସେସ କରାଯାଇପାରିବ ନାହିଁ। ଏହା ପରିବର୍ତ୍ତେ ଆପଣଙ୍କ ଟାବଲେଟରେ ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"ଏହାକୁ ଆପଣଙ୍କ <xliff:g id="DEVICE">%1$s</xliff:g>ରେ ଆକ୍ସେସ କରାଯାଇପାରିବ ନାହିଁ। ଏହା ପରିବର୍ତ୍ତେ ଆପଣଙ୍କ ଫୋନରେ ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"ବର୍ତ୍ତମାନ ଏହାକୁ ଆପଣଙ୍କ <xliff:g id="DEVICE">%1$s</xliff:g>ରେ ଆକ୍ସେସ କରାଯାଇପାରିବ ନାହିଁ। ଏହା ପରିବର୍ତ୍ତେ ଆପଣଙ୍କ Android TV ଡିଭାଇସରେ ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"ବର୍ତ୍ତମାନ ଏହାକୁ ଆପଣଙ୍କ <xliff:g id="DEVICE">%1$s</xliff:g>ରେ ଆକ୍ସେସ କରାଯାଇପାରିବ ନାହିଁ। ଏହା ପରିବର୍ତ୍ତେ ଆପଣଙ୍କ ଟାବଲେଟରେ ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"ବର୍ତ୍ତମାନ ଏହାକୁ ଆପଣଙ୍କ <xliff:g id="DEVICE">%1$s</xliff:g>ରେ ଆକ୍ସେସ କରାଯାଇପାରିବ ନାହିଁ। ଏହା ପରିବର୍ତ୍ତେ ଆପଣଙ୍କ ଫୋନରେ ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"ବର୍ତ୍ତମାନ ଏହାକୁ ଆପଣଙ୍କ <xliff:g id="DEVICE">%1$s</xliff:g>ରେ ଆକ୍ସେସ କରାଯାଇପାରିବ ନାହିଁ। ଏହା ପରିବର୍ତ୍ତେ ଆପଣଙ୍କ Android TV ଡିଭାଇସରେ ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"ବର୍ତ୍ତମାନ ଏହାକୁ ଆପଣଙ୍କ <xliff:g id="DEVICE">%1$s</xliff:g>ରେ ଆକ୍ସେସ କରାଯାଇପାରିବ ନାହିଁ। ଏହା ପରିବର୍ତ୍ତେ ଆପଣଙ୍କ ଟାବଲେଟରେ ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"ବର୍ତ୍ତମାନ ଏହାକୁ ଆପଣଙ୍କ <xliff:g id="DEVICE">%1$s</xliff:g>ରେ ଆକ୍ସେସ କରାଯାଇପାରିବ ନାହିଁ। ଏହା ପରିବର୍ତ୍ତେ ଆପଣଙ୍କ ଫୋନରେ ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"ଏହି ଆପ ଅତିରିକ୍ତ ସୁରକ୍ଷା ପାଇଁ ଅନୁରୋଧ କରୁଛି। ଏହା ପରିବର୍ତ୍ତେ ଆପଣଙ୍କ Android TV ଡିଭାଇସରେ ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"ଏହି ଆପ ଅତିରିକ୍ତ ସୁରକ୍ଷା ପାଇଁ ଅନୁରୋଧ କରୁଛି। ଏହା ପରିବର୍ତ୍ତେ ଆପଣଙ୍କ ଟାବଲେଟରେ ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"ଏହି ଆପ ଅତିରିକ୍ତ ସୁରକ୍ଷା ପାଇଁ ଅନୁରୋଧ କରୁଛି। ଏହା ପରିବର୍ତ୍ତେ ଆପଣଙ୍କ ଫୋନରେ ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"ଏହି ଆପ୍‌କୁ Androidର ପୁରୁଣା ଭର୍ସନ୍ ପାଇଁ ନିର୍ମାଣ କରାଯାଇଥିଲା ଏବଂ ଠିକ୍ ଭାବେ କାମ କରିନପାରେ। ଏହାପାଇଁ ଅପଡେଟ୍‌ ଅଛି କି ନାହିଁ ଯାଞ୍ଚ କରନ୍ତୁ କିମ୍ବା ଡେଭେଲପର୍‌ଙ୍କ ସହିତ ସମ୍ପର୍କ କରନ୍ତୁ।"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"ଅପଡେଟ୍‌ ପାଇଁ ଯାଞ୍ଚ କରନ୍ତୁ"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"ଆପଣଙ୍କ ପାଖରେ ନୂଆ ମେସେଜ୍‍ ରହିଛି"</string>
diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml
index 3635e69..13a5f97 100644
--- a/core/res/res/values-pa/strings.xml
+++ b/core/res/res/values-pa/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ਇਸ ਡੀਵਾਈਸ ਵਿੱਚ ਫਿੰਗਰਪ੍ਰਿੰਟ ਸੈਂਸਰ ਨਹੀਂ ਹੈ।"</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"ਸੈਂਸਰ ਅਸਥਾਈ ਤੌਰ \'ਤੇ ਬੰਦ ਕੀਤਾ ਗਿਆ।"</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਸੈਂਸਰ ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ। ਮੁਰੰਮਤ ਪ੍ਰਦਾਨਕ \'ਤੇ ਜਾਓ"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"\'ਪਾਵਰ\' ਬਟਨ ਦਬਾਇਆ ਗਿਆ"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"ਉਂਗਲ <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਜਾਂ ਸਕ੍ਰੀਨ ਲਾਕ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"ਸਿੱਧਾ ਆਪਣੇ ਫ਼ੋਨ ਵੱਲ ਦੇਖੋ"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"ਤੁਹਾਡਾ ਚਿਹਰਾ ਲੁਕਾਉਣ ਵਾਲੀ ਕੋਈ ਵੀ ਚੀਜ਼ ਹਟਾਓ।"</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"ਕਾਲੀ ਪੱਟੀ ਸਮੇਤ, ਆਪਣੀ ਸਕ੍ਰੀਨ ਦੇ ਸਿਖਰ ਨੂੰ ਸਾਫ਼ ਕਰੋ"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"ਤੁਹਾਡਾ ਪੂਰਾ ਚਿਹਰਾ ਦਿਸਣਾ ਲਾਜ਼ਮੀ ਹੈ"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"ਤੁਹਾਡਾ ਪੂਰਾ ਚਿਹਰਾ ਦਿਸਣਾ ਲਾਜ਼ਮੀ ਹੈ"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"ਤੁਹਾਡੇ ਚਿਹਰੇ ਦਾ ਮਾਡਲ ਨਹੀਂ ਬਣਿਆ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"ਧੁੱਪ ਦੀਆਂ ਐਨਕਾਂ ਦਾ ਪਤਾ ਲੱਗਾ। ਤੁਹਾਡਾ ਪੂਰਾ ਚਿਹਰਾ ਦਿਸਣਾ ਲਾਜ਼ਮੀ ਹੈ।"</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"ਚਿਹਰਾ ਢੱਕਿਆ ਹੋਣ ਦਾ ਪਤਾ ਲੱਗਾ। ਤੁਹਾਡਾ ਪੂਰਾ ਚਿਹਰਾ ਦਿਸਣਾ ਲਾਜ਼ਮੀ ਹੈ।"</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"ਕੈਮਰਾ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"ਫ਼ੋਨ \'ਤੇ ਜਾਰੀ ਰੱਖੋ"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਅਣਉਪਲਬਧ ਹੈ"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV ਸੈਟਿੰਗਾਂ ਅਣਉਪਲਬਧ ਹਨ"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"ਟੈਬਲੈੱਟ ਸੈਟਿੰਗਾਂ ਅਣਉਪਲਬਧ ਹਨ"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"ਫ਼ੋਨ ਸੈਟਿੰਗਾਂ ਅਣਉਪਲਬਧ ਹਨ"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"ਤੁਹਾਡੇ <xliff:g id="DEVICE">%1$s</xliff:g> \'ਤੇ ਇਸ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ। ਇਸਦੀ ਬਜਾਏ ਆਪਣੇ Android TV ਡੀਵਾਈਸ \'ਤੇ ਵਰਤ ਕੇ ਦੇਖੋ।"</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"ਤੁਹਾਡੇ <xliff:g id="DEVICE">%1$s</xliff:g> \'ਤੇ ਇਸ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ। ਇਸਦੀ ਬਜਾਏ ਆਪਣੇ ਟੈਬਲੈੱਟ \'ਤੇ ਵਰਤ ਕੇ ਦੇਖੋ।"</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"ਤੁਹਾਡੇ <xliff:g id="DEVICE">%1$s</xliff:g> \'ਤੇ ਇਸ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ। ਇਸਦੀ ਬਜਾਏ ਆਪਣੇ ਫ਼ੋਨ \'ਤੇ ਵਰਤ ਕੇ ਦੇਖੋ।"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"ਇਸ ਸਮੇਂ ਤੁਹਾਡੇ <xliff:g id="DEVICE">%1$s</xliff:g> \'ਤੇ ਇਸ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ। ਇਸਦੀ ਬਜਾਏ ਆਪਣੇ Android TV ਡੀਵਾਈਸ \'ਤੇ ਵਰਤ ਕੇ ਦੇਖੋ।"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"ਇਸ ਸਮੇਂ ਤੁਹਾਡੇ <xliff:g id="DEVICE">%1$s</xliff:g> \'ਤੇ ਇਸ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ। ਇਸਦੀ ਬਜਾਏ ਆਪਣੇ ਟੈਬਲੈੱਟ \'ਤੇ ਵਰਤ ਕੇ ਦੇਖੋ।"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"ਇਸ ਸਮੇਂ ਤੁਹਾਡੇ <xliff:g id="DEVICE">%1$s</xliff:g> \'ਤੇ ਇਸ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ। ਇਸਦੀ ਬਜਾਏ ਆਪਣੇ ਫ਼ੋਨ \'ਤੇ ਵਰਤ ਕੇ ਦੇਖੋ।"</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"ਇਸ ਸਮੇਂ ਤੁਹਾਡੇ <xliff:g id="DEVICE">%1$s</xliff:g> \'ਤੇ ਇਸ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ। ਇਸਦੀ ਬਜਾਏ ਆਪਣੇ Android TV ਡੀਵਾਈਸ \'ਤੇ ਵਰਤ ਕੇ ਦੇਖੋ।"</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"ਇਸ ਸਮੇਂ ਤੁਹਾਡੇ <xliff:g id="DEVICE">%1$s</xliff:g> \'ਤੇ ਇਸ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ। ਇਸਦੀ ਬਜਾਏ ਆਪਣੇ ਟੈਬਲੈੱਟ \'ਤੇ ਵਰਤ ਕੇ ਦੇਖੋ।"</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"ਇਸ ਸਮੇਂ ਤੁਹਾਡੇ <xliff:g id="DEVICE">%1$s</xliff:g> \'ਤੇ ਇਸ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ। ਇਸਦੀ ਬਜਾਏ ਆਪਣੇ ਫ਼ੋਨ \'ਤੇ ਵਰਤ ਕੇ ਦੇਖੋ।"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"ਇਹ ਐਪ ਵਧੀਕ ਸੁਰੱਖਿਆ ਦੀ ਬੇਨਤੀ ਕਰ ਰਹੀ ਹੈ। ਇਸਦੀ ਬਜਾਏ ਆਪਣੇ Android TV ਡੀਵਾਈਸ \'ਤੇ ਵਰਤ ਕੇ ਦੇਖੋ।"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"ਇਹ ਐਪ ਵਧੀਕ ਸੁਰੱਖਿਆ ਦੀ ਬੇਨਤੀ ਕਰ ਰਹੀ ਹੈ। ਇਸਦੀ ਬਜਾਏ ਆਪਣੇ ਟੈਬਲੈੱਟ \'ਤੇ ਵਰਤ ਕੇ ਦੇਖੋ।"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"ਇਹ ਐਪ ਵਧੀਕ ਸੁਰੱਖਿਆ ਦੀ ਬੇਨਤੀ ਕਰ ਰਹੀ ਹੈ। ਇਸਦੀ ਬਜਾਏ ਆਪਣੇ ਫ਼ੋਨ \'ਤੇ ਵਰਤ ਕੇ ਦੇਖੋ।"</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"ਇਹ ਐਪ Android ਦੇ ਕਿਸੇ ਵਧੇਰੇ ਪੁਰਾਣੇ ਵਰਜਨ ਲਈ ਬਣਾਈ ਗਈ ਸੀ ਅਤੇ ਸ਼ਾਇਦ ਸਹੀ ਢੰਗ ਨਾਲ ਕੰਮ ਨਾ ਕਰੇ। ਅੱਪਡੇਟਾਂ ਲਈ ਜਾਂਚ ਕਰੋ ਜਾਂ ਵਿਕਾਸਕਾਰ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"ਅੱਪਡੇਟ ਲਈ ਜਾਂਚ ਕਰੋ"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"ਤੁਹਾਨੂੰ ਨਵੇਂ ਸੁਨੇਹੇ ਪ੍ਰਾਪਤ ਹੋਏ ਹਨ"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 2e491b3..e9d6d63 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -616,6 +616,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"To urządzenie nie jest wyposażone w czytnik linii papilarnych."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Czujnik jest tymczasowo wyłączony."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Nie można użyć czytnika linii papilarnych. Odwiedź serwis."</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Naciśnięto przycisk zasilania"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Odcisk palca <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Używaj odcisku palca"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Używaj odcisku palca lub blokady ekranu"</string>
@@ -656,8 +657,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Patrz prosto na telefon"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Usuń wszystko, co zasłania Ci twarz."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Wyczyść górną krawędź ekranu, w tym czarny pasek"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Twarz musi być widoczna w całości"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Twarz musi być widoczna w całości"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Nie można utworzyć modelu twarzy. Spróbuj ponownie."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Wykryto ciemne okulary. Twarz musi być widoczna w całości."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Wykryto zasłonę twarzy. Twarz musi być widoczna w całości."</string>
@@ -1943,18 +1946,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Aparat niedostępny"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Kontynuuj na telefonie"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Mikrofon niedostępny"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Ustawienia Androida TV są niedostępne"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Ustawienia tabletu są niedostępne"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Ustawienia telefonu są niedostępne"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Z aplikacji nie można skorzystać na urządzeniu <xliff:g id="DEVICE">%1$s</xliff:g>. Użyj urządzenia z Androidem TV."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Z aplikacji nie można skorzystać na urządzeniu <xliff:g id="DEVICE">%1$s</xliff:g>. Użyj tabletu."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Z aplikacji nie można skorzystać na urządzeniu <xliff:g id="DEVICE">%1$s</xliff:g>. Użyj telefonu."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"W tej chwili na urządzeniu <xliff:g id="DEVICE">%1$s</xliff:g> nie można skorzystać z aplikacji. Użyj urządzenia z Androidem TV."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"W tej chwili na urządzeniu <xliff:g id="DEVICE">%1$s</xliff:g> nie można skorzystać z aplikacji. Użyj tabletu."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"W tej chwili na urządzeniu <xliff:g id="DEVICE">%1$s</xliff:g> nie można skorzystać z aplikacji. Użyj telefonu."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"W tej chwili nie można z tego skorzystać na urządzeniu <xliff:g id="DEVICE">%1$s</xliff:g>. Użyj urządzenia z Androidem TV."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"W tej chwili nie można z tego skorzystać na urządzeniu <xliff:g id="DEVICE">%1$s</xliff:g>. Użyj tabletu."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"W tej chwili nie można z tego skorzystać na urządzeniu <xliff:g id="DEVICE">%1$s</xliff:g>. Użyj telefonu."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Ta aplikacja wymaga dodatkowych zabezpieczeń. Użyj urządzenia z Androidem TV."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Ta aplikacja wymaga dodatkowych zabezpieczeń. Użyj tabletu."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Ta aplikacja wymaga dodatkowych zabezpieczeń. Użyj telefonu."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Ta aplikacja jest na starszą wersję Androida i może nie działać prawidłowo. Sprawdź dostępność aktualizacji lub skontaktuj się z programistą."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Sprawdź dostępność aktualizacji"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Masz nowe wiadomości"</string>
diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml
index bdb1993..e6c8c81 100644
--- a/core/res/res/values-pt-rBR/strings.xml
+++ b/core/res/res/values-pt-rBR/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Este dispositivo não tem um sensor de impressão digital."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor desativado temporariamente."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Não foi possível usar o sensor de impressão digital. Entre em contato com uma assistência técnica"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Botão liga/desliga pressionado"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Dedo <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Usar impressão digital"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Usar impressão digital ou bloqueio de tela"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Olhe diretamente para o smartphone"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Remova tudo que esteja ocultando seu rosto."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Limpe a parte superior da tela, inclusive a barra preta"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Seu rosto precisa estar completamente visível"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Seu rosto precisa estar completamente visível"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Falha ao criar o modelo de rosto. Tente de novo."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Óculos escuros detectados. Seu rosto precisa estar completamente visível."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Máscara detectada. Seu rosto precisa estar completamente visível."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Câmera indisponível"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Continuar no smartphone"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Microfone indisponível"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Configurações do Android TV indisponíveis"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Configurações do tablet indisponíveis"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Configurações do smartphone indisponíveis"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Não é possível acessar esse app pelo seu <xliff:g id="DEVICE">%1$s</xliff:g>. Tente pelo dispositivo Android TV."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Não é possível acessar esse app pelo seu <xliff:g id="DEVICE">%1$s</xliff:g>. Tente pelo tablet."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Não é possível acessar esse app pelo seu <xliff:g id="DEVICE">%1$s</xliff:g>. Tente pelo smartphone."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"No momento, não é possível acessar esse app pelo seu <xliff:g id="DEVICE">%1$s</xliff:g>. Tente pelo dispositivo Android TV."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"No momento, não é possível acessar esse app pelo seu <xliff:g id="DEVICE">%1$s</xliff:g>. Tente pelo tablet."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"No momento, não é possível acessar esse app pelo seu <xliff:g id="DEVICE">%1$s</xliff:g>. Tente pelo smartphone."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"No momento, não é possível acessar esse app pelo <xliff:g id="DEVICE">%1$s</xliff:g>. Tente pelo dispositivo Android TV."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"No momento, não é possível acessar esse app pelo <xliff:g id="DEVICE">%1$s</xliff:g>. Tente pelo seu tablet."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"No momento, não é possível acessar esse app pelo <xliff:g id="DEVICE">%1$s</xliff:g>. Tente pelo seu smartphone."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Esse app está solicitando segurança extra. Tente pelo dispositivo Android TV."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Esse app está solicitando segurança extra. Tente pelo tablet."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Esse app está solicitando segurança extra. Tente pelo smartphone."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Este app foi criado para uma versão mais antiga do Android e pode não funcionar corretamente. Tente verificar se há atualizações ou entre em contato com o desenvolvedor."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Procurar atualizações"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Você tem mensagens novas"</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 28412db..aa21dcc 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Este dispositivo não tem sensor de impressões digitais."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor temporariamente desativado."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Não é possível usar o sensor de impressões digitais. Visite um fornecedor de serviços de reparação"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Botão ligar/desligar premido"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Dedo <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Utilizar a impressão digital"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Utilizar o bloqueio de ecrã ou a impressão digital"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Olhe mais diretamente para o telemóvel"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Remova tudo o que esteja a ocultar o seu rosto."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Limpe a parte superior do ecrã, incluindo a barra preta."</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"O seu rosto tem de estar completamente visível"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"O seu rosto tem de estar completamente visível"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Não é possível criar o seu modelo de rosto. Tente novamente."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Óculos escuros detetados. O seu rosto tem de estar completamente visível."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Cobertura facial detetada. O seu rosto tem de estar completamente visível."</string>
@@ -1941,18 +1944,19 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Câmara indisponível"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Continue no telemóvel"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Microfone indisponível"</string>
+    <string name="app_streaming_blocked_title_for_playstore_dialog" msgid="8149823099822897538">"Play Store indisponível"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Definições do Android TV indisponíveis"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Definições do tablet indisponíveis"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Definições do telemóvel indisponíveis"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Não é possível aceder a esta app no seu dispositivo <xliff:g id="DEVICE">%1$s</xliff:g>. Em alternativa, experimente no dispositivo Android TV."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Não é possível aceder a esta app no seu dispositivo <xliff:g id="DEVICE">%1$s</xliff:g>. Em alternativa, experimente no tablet."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Não é possível aceder a esta app no seu dispositivo <xliff:g id="DEVICE">%1$s</xliff:g>. Em alternativa, experimente no telemóvel."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"De momento, não é possível aceder a esta app no seu <xliff:g id="DEVICE">%1$s</xliff:g>. Em alternativa, experimente no dispositivo Android TV."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"De momento, não é possível aceder a esta app no seu <xliff:g id="DEVICE">%1$s</xliff:g>. Em alternativa, experimente no tablet."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"De momento, não é possível aceder a esta app no seu <xliff:g id="DEVICE">%1$s</xliff:g>. Em alternativa, experimente no telemóvel."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"De momento, não é possível aceder a esta app no seu <xliff:g id="DEVICE">%1$s</xliff:g>. Em alternativa, experimente no dispositivo Android TV."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"De momento, não é possível aceder a esta app no seu <xliff:g id="DEVICE">%1$s</xliff:g>. Em alternativa, experimente no tablet."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"De momento, não é possível aceder a esta app no seu <xliff:g id="DEVICE">%1$s</xliff:g>. Em alternativa, experimente no telemóvel."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Esta app está a solicitar segurança adicional. Em alternativa, experimente no dispositivo Android TV."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Esta app está a solicitar segurança adicional. Em alternativa, experimente no tablet."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Esta app está a solicitar segurança adicional. Em alternativa, experimente no telemóvel."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tv" msgid="820334666354451145">"Não é possível aceder a esta app no seu dispositivo <xliff:g id="DEVICE">%1$s</xliff:g>. Em alternativa, experimente no dispositivo Android TV."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tablet" msgid="3286849551133045896">"Não é possível aceder a esta app no seu dispositivo <xliff:g id="DEVICE">%1$s</xliff:g>. Em alternativa, experimente no tablet."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"Não é possível aceder a esta app no seu dispositivo <xliff:g id="DEVICE">%1$s</xliff:g>. Em alternativa, experimente no telemóvel."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Esta app foi concebida para uma versão mais antiga do Android e pode não funcionar corretamente. Experimente verificar se existem atualizações ou contacte o programador."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Verificar atualizações"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Tem mensagens novas"</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index bdb1993..e6c8c81 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Este dispositivo não tem um sensor de impressão digital."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor desativado temporariamente."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Não foi possível usar o sensor de impressão digital. Entre em contato com uma assistência técnica"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Botão liga/desliga pressionado"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Dedo <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Usar impressão digital"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Usar impressão digital ou bloqueio de tela"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Olhe diretamente para o smartphone"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Remova tudo que esteja ocultando seu rosto."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Limpe a parte superior da tela, inclusive a barra preta"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Seu rosto precisa estar completamente visível"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Seu rosto precisa estar completamente visível"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Falha ao criar o modelo de rosto. Tente de novo."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Óculos escuros detectados. Seu rosto precisa estar completamente visível."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Máscara detectada. Seu rosto precisa estar completamente visível."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Câmera indisponível"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Continuar no smartphone"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Microfone indisponível"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Configurações do Android TV indisponíveis"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Configurações do tablet indisponíveis"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Configurações do smartphone indisponíveis"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Não é possível acessar esse app pelo seu <xliff:g id="DEVICE">%1$s</xliff:g>. Tente pelo dispositivo Android TV."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Não é possível acessar esse app pelo seu <xliff:g id="DEVICE">%1$s</xliff:g>. Tente pelo tablet."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Não é possível acessar esse app pelo seu <xliff:g id="DEVICE">%1$s</xliff:g>. Tente pelo smartphone."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"No momento, não é possível acessar esse app pelo seu <xliff:g id="DEVICE">%1$s</xliff:g>. Tente pelo dispositivo Android TV."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"No momento, não é possível acessar esse app pelo seu <xliff:g id="DEVICE">%1$s</xliff:g>. Tente pelo tablet."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"No momento, não é possível acessar esse app pelo seu <xliff:g id="DEVICE">%1$s</xliff:g>. Tente pelo smartphone."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"No momento, não é possível acessar esse app pelo <xliff:g id="DEVICE">%1$s</xliff:g>. Tente pelo dispositivo Android TV."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"No momento, não é possível acessar esse app pelo <xliff:g id="DEVICE">%1$s</xliff:g>. Tente pelo seu tablet."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"No momento, não é possível acessar esse app pelo <xliff:g id="DEVICE">%1$s</xliff:g>. Tente pelo seu smartphone."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Esse app está solicitando segurança extra. Tente pelo dispositivo Android TV."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Esse app está solicitando segurança extra. Tente pelo tablet."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Esse app está solicitando segurança extra. Tente pelo smartphone."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Este app foi criado para uma versão mais antiga do Android e pode não funcionar corretamente. Tente verificar se há atualizações ou entre em contato com o desenvolvedor."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Procurar atualizações"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Você tem mensagens novas"</string>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index e8353dd..5e69144 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -615,6 +615,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Dispozitivul nu are senzor de amprentă."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Senzorul este dezactivat temporar."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Nu se poate folosi senzorul de amprentă. Vizitați un furnizor de servicii de reparații."</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"A fost apăsat butonul de pornire"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Degetul <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Folosiți amprenta"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Folosiți amprenta sau blocarea ecranului"</string>
@@ -655,8 +656,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Priviți direct spre telefon"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Eliminați orice vă ascunde chipul."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Curățați partea de sus a ecranului, inclusiv bara neagră"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Chipul trebuie să fie vizibil în totalitate"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Chipul trebuie să fie vizibil în totalitate"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Nu se poate crea modelul facial. Reîncercați."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"S-au detectat ochelari de culoare închisă. Chipul trebuie să fie vizibil în totalitate."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"S-a detectat un articol care acoperă chipul. Chipul trebuie să fie vizibil în totalitate."</string>
@@ -1942,18 +1945,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Camera video nu este disponibilă"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Continuați pe telefon"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Microfon indisponibil"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Setările pentru Android TV sunt indisponibile"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Setările pentru tabletă sunt indisponibile"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Setările pentru telefon sunt indisponibile"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Aplicația nu se poate accesa pe <xliff:g id="DEVICE">%1$s</xliff:g>. Încercați pe dispozitivul Android TV."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Aplicația nu se poate accesa pe <xliff:g id="DEVICE">%1$s</xliff:g>. Încercați pe tabletă."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Aplicația nu se poate accesa pe <xliff:g id="DEVICE">%1$s</xliff:g>. Încercați pe telefon."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Aplicația nu poate fi accesată pe <xliff:g id="DEVICE">%1$s</xliff:g> momentan. Încercați pe dispozitivul Android TV."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Aplicația nu poate fi accesată pe <xliff:g id="DEVICE">%1$s</xliff:g> momentan. Încercați pe tabletă."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Aplicația nu poate fi accesată pe <xliff:g id="DEVICE">%1$s</xliff:g> momentan. Încercați pe telefon."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Aplicația nu poate fi accesată pe <xliff:g id="DEVICE">%1$s</xliff:g> momentan. Încercați pe dispozitivul Android TV."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Aplicația nu poate fi accesată pe <xliff:g id="DEVICE">%1$s</xliff:g> momentan. Încercați pe tabletă."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Aplicația nu poate fi accesată pe <xliff:g id="DEVICE">%1$s</xliff:g> momentan. Încercați pe telefon."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Aplicația necesită securitate suplimentară. Încercați pe dispozitivul Android TV."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Aplicația necesită securitate suplimentară. Încercați pe tabletă."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Aplicația necesită securitate suplimentară. Încercați pe telefon."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Această aplicație a fost creată pentru o versiune Android mai veche și este posibil să nu funcționeze corect. Încercați să căutați actualizări sau contactați dezvoltatorul."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Căutați actualizări"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Aveți mesaje noi"</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index e43aae9..8ce479a 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -616,6 +616,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"На этом устройстве нет сканера отпечатков пальцев."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Сканер отпечатков пальцев временно отключен."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Невозможно использовать сканер отпечатков пальцев. Обратитесь в сервисный центр."</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Нажата кнопка питания."</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Отпечаток <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Использовать отпечаток пальца"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Использовать отпечаток пальца или блокировку экрана"</string>
@@ -656,8 +657,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Смотрите прямо на телефон"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Ваше лицо плохо видно"</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Протрите верхнюю часть экрана (в том числе черную панель)."</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Лицо должно быть полностью видно"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Лицо должно быть полностью видно"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Невозможно создать модель лица. Повторите попытку."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Обнаружены темные очки. Лицо должно быть полностью видно"</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Часть лица закрыта. Оно должно быть полностью видно."</string>
@@ -1943,18 +1946,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Камера недоступна"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Продолжите на телефоне"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Микрофон недоступен"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Настройки Android TV недоступны"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Настройки планшета недоступны"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Настройки телефона недоступны"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Эта функция недоступна на устройстве <xliff:g id="DEVICE">%1$s</xliff:g>. Используйте Android TV."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Эта функция недоступна на устройстве <xliff:g id="DEVICE">%1$s</xliff:g>. Используйте планшет."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Эта функция недоступна на устройстве <xliff:g id="DEVICE">%1$s</xliff:g>. Используйте телефон."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Эта функция пока недоступна на устройстве <xliff:g id="DEVICE">%1$s</xliff:g>. Используйте Android TV."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Эта функция пока недоступна на устройстве <xliff:g id="DEVICE">%1$s</xliff:g>. Используйте планшет."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Эта функция пока недоступна на устройстве <xliff:g id="DEVICE">%1$s</xliff:g>. Используйте телефон."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Эта функция пока недоступна на устройстве <xliff:g id="DEVICE">%1$s</xliff:g>. Используйте Android TV."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Эта функция пока недоступна на устройстве <xliff:g id="DEVICE">%1$s</xliff:g>. Используйте планшет."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Эта функция пока недоступна на устройстве <xliff:g id="DEVICE">%1$s</xliff:g>. Используйте телефон."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Это приложение запрашивает дополнительные меры защиты. Используйте Android TV."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Это приложение запрашивает дополнительные меры защиты. Используйте планшет."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Это приложение запрашивает дополнительные меры защиты. Используйте телефон."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Это приложение было создано для более ранней версии Android и может работать со сбоями. Проверьте наличие обновлений или свяжитесь с разработчиком."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Проверить обновления"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Новые сообщения"</string>
diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml
index e8d2be9..7c8de57 100644
--- a/core/res/res/values-si/strings.xml
+++ b/core/res/res/values-si/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"මෙම උපාංගයේ ඇඟිලි සලකුණු සංවේදකයක් නොමැත."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"සංවේදකය තාවකාලිකව අබල කර ඇත."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"ඇඟිලි සලකුණු සංවේදකය භාවිත කළ නොහැකිය. අළුත්වැඩියා සැපයුම්කරුවෙකු බලන්න"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"බල බොත්තම ඔබා ඇත"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"ඇඟිලි <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"ඇඟිලි සලකුණ භාවිත කරන්න"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"ඇඟිලි සලකුණ හෝ තිර අගුල භාවිත කරන්න"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"ඔබගේ දුරකථනය දෙස වඩාත් ඍජුව බලන්න"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"ඔබේ මුහුණ සඟවන කිසිවක් ඉවත් කරන්න."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"කලු තීරුව ඇතුළුව, ඔබේ තිරයෙහි මුදුන පිරිසිදු කරන්න"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"ඔබගේ මුහුණ සම්පූර්ණයෙන් දෘශ්‍යමාන විය යුතුය"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"ඔබගේ මුහුණ සම්පූර්ණයෙන් දෘශ්‍යමාන විය යුතුය"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"ඔබගේ මුහුණු ආකෘතිය තැනිය නොහැකිය. නැවත උත්සාහ කරන්න."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"අඳුරු කණ්ණාඩි අනාවරණය කර ගන්නා ලදි. ඔබගේ මුහුණ සම්පූර්ණයෙන් දෘශ්‍යමාන විය යුතුය."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"මුහුණු ආවරණය අනාවරණය කර ගන්නා ලදි. ඔබගේ මුහුණ සම්පූර්ණයෙන් දෘශ්‍යමාන විය යුතුය."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"කැමරාව ලබා ගත නොහැකිය"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"දුරකථනයෙන් දිගටම කර ගෙන යන්න"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"මයික්‍රෆෝනය ලබා ගත නොහැකිය"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV සැකසීම් ලබා ගත නොහැකිය"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"ටැබ්ලට් සැකසීම් ලබා ගත නොහැකිය"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"දුරකථන සැකසීම් ලබා ගත නොහැකිය"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"මෙයට ඔබගේ <xliff:g id="DEVICE">%1$s</xliff:g> හිදී ප්‍රවේශ විය නොහැකිය. ඒ වෙනුවට ඔබගේ Android TV උපාංගයෙහි උත්සාහ කරන්න."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"මෙයට ඔබගේ <xliff:g id="DEVICE">%1$s</xliff:g> හිදී ප්‍රවේශ විය නොහැකිය. ඒ වෙනුවට ඔබගේ ටැබ්ලටයෙහි උත්සාහ කරන්න."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"මෙයට ඔබගේ <xliff:g id="DEVICE">%1$s</xliff:g> හිදී ප්‍රවේශ විය නොහැකිය. ඒ වෙනුවට ඔබගේ දුරකථනයෙහි උත්සාහ කරන්න."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"මේ අවස්ථාවේදී මෙයට ඔබගේ <xliff:g id="DEVICE">%1$s</xliff:g> හිදී ප්‍රවේශ විය නොහැකිය. ඒ වෙනුවට ඔබගේ Android TV උපාංගයෙහි උත්සාහ කරන්න."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"මේ අවස්ථාවේදී මෙයට ඔබගේ <xliff:g id="DEVICE">%1$s</xliff:g> හිදී ප්‍රවේශ විය නොහැකිය. ඒ වෙනුවට ඔබගේ ටැබ්ලටයෙහි උත්සාහ කරන්න."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"මේ අවස්ථාවේදී මෙයට ඔබගේ <xliff:g id="DEVICE">%1$s</xliff:g> හිදී ප්‍රවේශ විය නොහැකිය. ඒ වෙනුවට ඔබගේ දුරකථනයෙහි උත්සාහ කරන්න."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"මේ අවස්ථාවේදී මෙයට ඔබගේ <xliff:g id="DEVICE">%1$s</xliff:g> හි ප්‍රවේශ විය නොහැකිය. ඒ වෙනුවට ඔබගේ Android TV උපාංගයෙහි උත්සාහ කරන්න."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"මේ අවස්ථාවේදී මෙයට ඔබගේ <xliff:g id="DEVICE">%1$s</xliff:g> හි ප්‍රවේශ විය නොහැකිය. ඒ වෙනුවට ඔබගේ ටැබ්ලටයෙහි උත්සාහ කරන්න."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"මේ අවස්ථාවේදී මෙයට ඔබගේ <xliff:g id="DEVICE">%1$s</xliff:g> හි ප්‍රවේශ විය නොහැකිය. ඒ වෙනුවට ඔබගේ දුරකථනයෙහි උත්සාහ කරන්න."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"මෙම යෙදුම අමතර ආරක්ෂාවක් ඉල්ලා සිටී. ඒ වෙනුවට ඔබගේ Android TV උපාංගයෙහි උත්සාහ කරන්න."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"මෙම යෙදුම අමතර ආරක්ෂාවක් ඉල්ලා සිටී. ඒ වෙනුවට ඔබගේ ටැබ්ලටයෙහි උත්සාහ කරන්න."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"මෙම යෙදුම අමතර ආරක්ෂාවක් ඉල්ලා සිටී. ඒ වෙනුවට ඔබගේ දුරකථනයෙහි උත්සාහ කරන්න."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"මෙම යෙදුම Android හි පැරණි අනුවාදයක් සඳහා තනා ඇති අතර නිසියාකාරව ක්‍රියා නොකරනු ඇත. යාවත්කාලීන සඳහා පරික්ෂා කිරීම උත්සාහ කරන්න, නැතහොත් සංවර්ධක අමතන්න."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"යාවත්කාලීන සඳහා පරික්ෂා කරන්න"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"ඔබට නව පණිවිඩ තිබේ"</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 0d2f038..f3c28a8 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -616,6 +616,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Toto zariadenie nemá senzor odtlačkov prstov."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Senzor je dočasne vypnutý."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Senzor odtlačkov prstov nie je možné používať. Navštívte poskytovateľa opráv."</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Bol stlačený vypínač"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Prst: <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Použiť odtlačok prsta"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Použiť odtlačok prsta alebo zámku obrazovky"</string>
@@ -656,8 +657,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Pozrite sa na telefón priamejšie"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Odstráňte všetko, čo vám zakrýva tvár."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Vyčistite hornú časť obrazovky vrátane čierneho panela"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Musí vám byť vidieť celú tvár"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Musí vám byť vidieť celú tvár"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Model tváre sa nedá vytvoriť. Skúste to znova."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Boli rozpoznané tmavé okuliare. Musí vám byť vidieť celú tvár."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Bolo rozpoznané rúško. Musí vám byť vidieť celú tvár."</string>
@@ -1943,18 +1946,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Kamera nie je k dispozícii"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Pokračujte v telefóne"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Mikrofón nie je k dispozícii"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Nastavenia zariadenia Android TV nie sú k dispozícii"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Nastavenia tabletu nie sú k dispozícii"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Nastavenia telefónu nie sú k dispozícii"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"V zariadení <xliff:g id="DEVICE">%1$s</xliff:g> momentálne nemáte prístup k tomuto obsahu. Skúste namiesto toho použiť zariadenie Android TV."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"V zariadení <xliff:g id="DEVICE">%1$s</xliff:g> momentálne nemáte prístup k tomuto obsahu. Skúste namiesto toho použiť tablet."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"V zariadení <xliff:g id="DEVICE">%1$s</xliff:g> momentálne nemáte prístup k tomuto obsahu. Skúste namiesto toho použiť telefón."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"V zariadení <xliff:g id="DEVICE">%1$s</xliff:g> momentálne nemáte prístup k tomuto obsahu. Skúste namiesto toho použiť zariadenie Android TV."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"V zariadení <xliff:g id="DEVICE">%1$s</xliff:g> momentálne nemáte prístup k tomuto obsahu. Skúste namiesto toho použiť tablet."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"V zariadení <xliff:g id="DEVICE">%1$s</xliff:g> momentálne nemáte prístup k tomuto obsahu. Skúste namiesto toho použiť telefón."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"V zariadení <xliff:g id="DEVICE">%1$s</xliff:g> momentálne nemáte k tomuto obsahu prístup. Skúste namiesto toho použiť zariadenie Android TV."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"V zariadení <xliff:g id="DEVICE">%1$s</xliff:g> momentálne nemáte k tomuto obsahu prístup. Skúste namiesto toho použiť tablet."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"V zariadení <xliff:g id="DEVICE">%1$s</xliff:g> momentálne nemáte k tomuto obsahu prístup. Skúste namiesto toho použiť telefón."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Táto aplikácia požaduje dodatočné zabezpečenie. Skúste namiesto toho použiť zariadenie Android TV."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Táto aplikácia požaduje dodatočné zabezpečenie. Skúste namiesto toho použiť tablet."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Táto aplikácia požaduje dodatočné zabezpečenie. Skúste namiesto toho použiť telefón."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Táto aplikácia bola zostavená pre staršiu verziu Androidu a nemusí správne fungovať. Skúste skontrolovať dostupnosť aktualizácií alebo kontaktovať vývojára."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Skontrolovať dostupnosť aktualizácie"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Máte nové správy."</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index fd1070c..759960f 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -616,6 +616,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Ta naprava nima tipala prstnih odtisov."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Tipalo je začasno onemogočeno."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Tipala prstnih odtisov ni mogoče uporabiti. Obiščite ponudnika popravil."</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Gumb za vklop je pritisnjen."</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Prst <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Uporaba prstnega odtisa"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Uporaba prstnega odtisa ali odklepanja s poverilnico"</string>
@@ -656,8 +657,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Glejte bolj naravnost v telefon."</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Umaknite vse, kar vam morda zakriva obraz."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Očistite vrhnji del zaslona, vključno s črno vrstico"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Videti se mora cel obraz."</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Videti se mora cel obraz."</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Modela obraza ni mogoče ustvariti. Poskusite znova."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Zaznana so temna očala. Videti se mora cel obraz."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Zaznano je, da je obraz prekrit. Videti se mora cel obraz."</string>
@@ -1943,18 +1946,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Fotoaparat ni na voljo"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Nadaljevanje v telefonu"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Mikrofon ni na voljo"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Nastavitve naprave Android TV niso na voljo"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Nastavitve tabličnega računalnika niso na voljo"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Nastavitve telefona niso na voljo"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"V napravi <xliff:g id="DEVICE">%1$s</xliff:g> ni mogoče dostopati do te vsebine. Poskusite z napravo Android TV."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"V napravi <xliff:g id="DEVICE">%1$s</xliff:g> ni mogoče dostopati do te vsebine. Poskusite s tabličnim računalnikom."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"V napravi <xliff:g id="DEVICE">%1$s</xliff:g> ni mogoče dostopati do te vsebine. Poskusite s telefonom."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"V napravi <xliff:g id="DEVICE">%1$s</xliff:g> trenutno ni mogoče dostopati do te vsebine. Poskusite z napravo Android TV."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"V napravi <xliff:g id="DEVICE">%1$s</xliff:g> trenutno ni mogoče dostopati do te vsebine. Poskusite s tabličnim računalnikom."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"V napravi <xliff:g id="DEVICE">%1$s</xliff:g> trenutno ni mogoče dostopati do te vsebine. Poskusite s telefonom."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"V napravi <xliff:g id="DEVICE">%1$s</xliff:g> trenutno ni mogoče dostopati do te vsebine. Poskusite z napravo Android TV."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"V napravi <xliff:g id="DEVICE">%1$s</xliff:g> trenutno ni mogoče dostopati do te vsebine. Poskusite s tabličnim računalnikom."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"V napravi <xliff:g id="DEVICE">%1$s</xliff:g> trenutno ni mogoče dostopati do te vsebine. Poskusite s telefonom."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Ta aplikacija zahteva dodatno varnost. Poskusite z napravo Android TV."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Ta aplikacija zahteva dodatno varnost. Poskusite s tabličnim računalnikom."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Ta aplikacija zahteva dodatno varnost. Poskusite s telefonom."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Ta aplikacija je bila zasnovana za starejšo različico Androida in morda ne bo delovala pravilno. Preverite, ali so na voljo posodobitve, ali pa se obrnite na razvijalca."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Preveri, ali je na voljo posodobitev"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Imate nova sporočila."</string>
diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml
index 41efa8d..b8d6d6b 100644
--- a/core/res/res/values-sq/strings.xml
+++ b/core/res/res/values-sq/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Kjo pajisje nuk ka sensor të gjurmës së gishtit."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensori është çaktivizuar përkohësisht."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Sensori i gjurmës së gishtit nuk mund të përdoret. Vizito një ofrues të shërbimit të riparimit"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Butoni i energjisë u shtyp"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Gishti <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Përdor gjurmën e gishtit"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Përdor gjurmën e gishtit ose kyçjen e ekranit"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Shiko më drejtpërdrejt telefonin"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Hiq gjithçka që fsheh fytyrën tënde."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Pastro kreun e ekranit, duke përfshirë shiritin e zi"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Fytyra jote duhet të jetë plotësisht e dukshme"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Fytyra jote duhet të jetë plotësisht e dukshme"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Modeli i fytyrës nuk krijohet. Provo sërish."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"U zbuluan syze të errëta. Fytyra jote duhet të jetë plotësisht e dukshme."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"U zbulua mbulim i fytyrës. Fytyra jote duhet të jetë plotësisht e dukshme."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Kamera nuk ofrohet"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Vazhdo në telefon"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Mikrofoni nuk ofrohet"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Cilësimet e Android TV nuk ofrohen"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Cilësimet e tabletit nuk ofrohen"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Cilësimet e telefonit nuk ofrohen"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Qasja është e pamundur në <xliff:g id="DEVICE">%1$s</xliff:g>. Provoje në pajisjen Android TV më mirë."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Qasja është e pamundur në <xliff:g id="DEVICE">%1$s</xliff:g>. Provoje në tablet më mirë."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Qasja është e pamundur në <xliff:g id="DEVICE">%1$s</xliff:g>. Provoje në telefon më mirë."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Qasja është e pamundur në <xliff:g id="DEVICE">%1$s</xliff:g> për momentin. Provoje në pajisjen Android TV më mirë."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Qasja është e pamundur në <xliff:g id="DEVICE">%1$s</xliff:g> për momentin. Provoje në tablet më mirë."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Qasja është e pamundur në <xliff:g id="DEVICE">%1$s</xliff:g> për momentin. Provoje në telefon më mirë."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Qasja është e pamundur në <xliff:g id="DEVICE">%1$s</xliff:g> për momentin. Provoje në pajisjen Android TV më mirë."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Qasja është e pamundur në <xliff:g id="DEVICE">%1$s</xliff:g> për momentin. Provoje në tablet më mirë."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Qasja është e pamundur në <xliff:g id="DEVICE">%1$s</xliff:g> për momentin. Provoje në telefon më mirë."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Ky aplikacion po kërkon siguri shtesë. Provoje në pajisjen Android TV më mirë."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Ky aplikacion po kërkon siguri shtesë. Provoje në tablet më mirë."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Ky aplikacion po kërkon siguri shtesë. Provoje në telefon më mirë."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Ky aplikacion është ndërtuar për një version më të vjetër të Android dhe mund të mos funksionojë mirë. Provo të kontrollosh për përditësime ose kontakto me zhvilluesin."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Kontrollo për përditësim"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Ke mesazhe të reja"</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 8c6689a..fe27b01 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -615,6 +615,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Овај уређај нема сензор за отисак прста."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Сензор је привремено онемогућен."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Не можете да користите сензор за отисак прста. Посетите добављача за поправке"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Притиснуто је дугме за укључивање"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Прст <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Користите отисак прста"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Користите отисак прста или закључавање екрана"</string>
@@ -655,8 +656,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Гледајте право у телефон"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Уклоните све што вам заклања лице."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Очистите горњи део екрана, укључујући црну траку"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Лице мора да буде потпуно видљиво"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Лице мора да буде потпуно видљиво"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Прављење модела лица није успело. Пробајте поново."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Откривене су тамне наочари. Лице мора да буде потпуно видљиво."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Откривено је прекривање лица. Лице мора да буде потпуно видљиво."</string>
@@ -1942,18 +1945,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Камера није доступна"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Наставите на телефону"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Микрофон је недоступан"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Подешавања Android TV-а су недоступна"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Подешавања таблета су недоступна"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Подешавања телефона су недоступна"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Овој апликацији не може да се приступи са уређаја <xliff:g id="DEVICE">%1$s</xliff:g>. Пробајте на Android TV уређају."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Овој апликацији не може да се приступи са уређаја <xliff:g id="DEVICE">%1$s</xliff:g>. Пробајте на таблету."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Овој апликацији не може да се приступи са уређаја <xliff:g id="DEVICE">%1$s</xliff:g>. Пробајте на телефону."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Овој апликацији тренутно не може да се приступи са уређаја <xliff:g id="DEVICE">%1$s</xliff:g>. Пробајте на Android TV уређају."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Овој апликацији тренутно не може да се приступи са уређаја <xliff:g id="DEVICE">%1$s</xliff:g>. Пробајте на таблету."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Овој апликацији тренутно не може да се приступи са уређаја <xliff:g id="DEVICE">%1$s</xliff:g>. Пробајте на телефону."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Овој апликацији тренутно не може да се приступи са уређаја <xliff:g id="DEVICE">%1$s</xliff:g>. Пробајте на Android TV уређају."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Овој апликацији тренутно не може да се приступи са уређаја <xliff:g id="DEVICE">%1$s</xliff:g>. Пробајте на таблету."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Овој апликацији тренутно не може да се приступи са уређаја <xliff:g id="DEVICE">%1$s</xliff:g>. Пробајте на телефону."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Ова апликација захтева додатну безбедност. Пробајте на Android TV уређају."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Ова апликација захтева додатну безбедност. Пробајте на таблету."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Ова апликација захтева додатну безбедност. Пробајте на телефону."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Ова апликација је направљена за старију верзију Android-а, па можда неће радити исправно. Потражите ажурирања или контактирајте програмера."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Потражи ажурирање"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Имате нове поруке"</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 500e566..49c9007 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Enheten har ingen fingeravtryckssensor."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensorn har tillfälligt inaktiverats."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Det går inte att använda fingeravtryckssensorn. Besök ett reparationsställe"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Strömbrytaren nedtryckt"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Finger <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Använd ditt fingeravtryck"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Använd ditt fingeravtryck eller skärmlåset"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Titta rakt på telefonen"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Ta bort allt som täcker ansiktet."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Rengör skärmens överkant, inklusive det svarta fältet"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Hela ansiktet måste synas"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Hela ansiktet måste synas"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Ansiktsmodellen kunde inte skapas. Försök igen."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Mörka glasögon identifierades. Hela ansiktet måste synas."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Något som täcker ansiktet identifierades. Hela ansiktet måste synas."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Kameran är inte tillgänglig"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Fortsätt på telefonen"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Mikrofonen är inte tillgänglig"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Inställningarna för Android TV är inte tillgängliga"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Surfplattans inställningar är inte tillgängliga"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Telefonens inställningar är inte tillgängliga"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Det går inte att streama detta till <xliff:g id="DEVICE">%1$s</xliff:g>. Testa med Android TV-enheten i stället."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Det går inte att streama detta till <xliff:g id="DEVICE">%1$s</xliff:g>. Testa med surfplattan i stället."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Det går inte att streama detta till <xliff:g id="DEVICE">%1$s</xliff:g>. Testa med telefonen i stället."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Det går inte att streama detta till <xliff:g id="DEVICE">%1$s</xliff:g> för närvarande. Testa med Android TV-enheten i stället."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Det går inte att streama detta till <xliff:g id="DEVICE">%1$s</xliff:g> för närvarande. Testa med surfplattan i stället."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Det går inte att streama detta till <xliff:g id="DEVICE">%1$s</xliff:g> för närvarande. Testa med telefonen i stället."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Det går inte att streama detta till <xliff:g id="DEVICE">%1$s</xliff:g> för närvarande. Testa med Android TV-enheten i stället."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Det går inte att streama detta till <xliff:g id="DEVICE">%1$s</xliff:g> för närvarande. Testa med surfplattan i stället."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Det går inte att streama detta till <xliff:g id="DEVICE">%1$s</xliff:g> för närvarande. Testa med telefonen i stället."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Appen begär ytterligare säkerhet. Testa med Android TV-enheten i stället."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Appen begär ytterligare säkerhet. Testa med surfplattan i stället."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Appen begär ytterligare säkerhet. Testa med telefonen i stället."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Appen har utvecklats för en äldre version av Android och kanske inte fungerar som den ska. Testa att söka efter uppdateringar eller kontakta utvecklaren."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Sök efter uppdateringar"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Du har nya meddelanden"</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index e23cbd1..f10ac5b 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Kifaa hiki hakina kitambua alama ya kidole."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Kitambuzi kimezimwa kwa muda."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Imeshindwa kutumia kitambua alama ya kidole. Tembelea mtoa huduma za urekebishaji"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Kitufe cha kuwasha au kuzima kimebonyezwa"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Kidole cha <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Tumia alama ya kidole"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Tumia alama ya kidole au mbinu ya kufunga skrini"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Angalia simu yako moja kwa moja"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Ondoa kitu chochote kinachoficha uso wako."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Safisha sehemu ya juu ya skrini yako, ikiwa ni pamoja na upau mweusi"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Ni lazima uso wako wote uonekane"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Ni lazima uso wako wote uonekane"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Imeshindwa kuunda muundo wa uso wako. Jaribu tena."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Vioo vyeusi vimetambuliwa. Ni lazima uso wako wote uonekane."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Kifuniko cha uso kimetambuliwa. Ni lazima uso wako wote uonekane."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Kamera haipatikani"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Endelea kwenye simu"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Maikrofoni haipatikani"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Mipangilio ya Android TV haipatikani"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Mipangilio ya kompyuta kibao haipatikani"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Mipangilio ya simu haipatikani"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Huwezi kufikia programu hii kwenye <xliff:g id="DEVICE">%1$s</xliff:g> chako. Badala yake jaribu kwenye kifaa chako cha Android TV."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Huwezi kufikia programu hii kwenye <xliff:g id="DEVICE">%1$s</xliff:g> chako. Badala yake jaribu kwenye kompyuta yako kibao."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Huwezi kufikia programu hii kwenye <xliff:g id="DEVICE">%1$s</xliff:g> chako. Badala yake jaribu kwenye simu yako."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Huwezi kufikia programu hii kwenye <xliff:g id="DEVICE">%1$s</xliff:g> chako kwa muda huu. Badala yake jaribu kwenye kifaa chako cha Android TV."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Huwezi kufikia programu hii kwenye <xliff:g id="DEVICE">%1$s</xliff:g> chako kwa muda huu. Badala yake jaribu kwenye kompyuta yako kibao."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Huwezi kufikia programu hii kwenye <xliff:g id="DEVICE">%1$s</xliff:g> chako kwa muda huu. Badala yake jaribu kwenye simu yako."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Programu hii haiwezi kufikiwa kwenye <xliff:g id="DEVICE">%1$s</xliff:g> kwa muda huu. Badala yake jaribu kwenye kifaa chako cha Android TV."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Programu hii haiwezi kufikiwa kwenye <xliff:g id="DEVICE">%1$s</xliff:g> kwa muda huu. Badala yake jaribu kwenye kompyuta kibao yako."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Programu hii haiwezi kufikiwa kwenye <xliff:g id="DEVICE">%1$s</xliff:g> kwa muda huu. Badala yake jaribu kwenye simu yako."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Programu hii inaomba usalama wa ziada. Badala yake jaribu kwenye kifaa chako cha Android TV."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Programu hii inaomba usalama wa ziada. Badala yake jaribu kwenye kompyuta yako kibao."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Programu hii inaomba usalama wa ziada. Badala yake jaribu kwenye simu yako."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Programu hii iliundwa kwa ajili ya toleo la zamani la Android na huenda isifanye kazi vizuri. Jaribu kuangalia masasisho au uwasiliane na msanidi programu."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Angalia masasisho"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Una ujumbe mpya"</string>
diff --git a/core/res/res/values-sw600dp/config.xml b/core/res/res/values-sw600dp/config.xml
index d686dd2..34b6a54 100644
--- a/core/res/res/values-sw600dp/config.xml
+++ b/core/res/res/values-sw600dp/config.xml
@@ -51,7 +51,5 @@
 
     <!-- If true, show multiuser switcher by default unless the user specifically disables it. -->
     <bool name="config_showUserSwitcherByDefault">true</bool>
-
-    <integer name="config_chooser_max_targets_per_row">6</integer>
 </resources>
 
diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml
index f657bd7..70cb7ee 100644
--- a/core/res/res/values-ta/strings.xml
+++ b/core/res/res/values-ta/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"இந்தச் சாதனத்தில் கைரேகை சென்சார் இல்லை."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"சென்சார் தற்காலிகமாக முடக்கப்பட்டுள்ளது."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"கைரேகை சென்சாரைப் பயன்படுத்த முடியவில்லை. பழுதுபார்ப்புச் சேவை வழங்குநரைத் தொடர்புகொள்ளவும்"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"பவர் பட்டன் அழுத்தப்பட்டுள்ளது"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"கைரேகை <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"கைரேகையைப் பயன்படுத்து"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"கைரேகையையோ திரைப் பூட்டையோ பயன்படுத்து"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"உங்கள் மொபைலை நேராகப் பார்க்கவும்"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"உங்கள் முகத்தை மறைக்கும் அனைத்தையும் நீக்குக."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"திரையையும் அதிலுள்ள கருப்புப் பட்டியையும் சுத்தம் செய்யவும்"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"உங்கள் முகத்தை முழுமையாகக் காட்டவும்"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"உங்கள் முகத்தை முழுமையாகக் காட்டவும்"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"முகத் தோற்றம் பதிவாகவில்லை. மீண்டும் முயலவும்."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"அடர் நிறக் கண்ணாடிகள் கண்டறியப்பட்டுள்ளது. உங்கள் முகத்தை முழுமையாகக் காட்டவும்."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"முகம் மறைக்கப்பட்டுள்ளது. உங்கள் முகத்தை முழுமையாகக் காட்டவும்."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"கேமராவைப் பயன்படுத்த முடியாது"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"மொபைலில் தொடருங்கள்"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"மைக்ரோஃபோனைப் பயன்படுத்த முடியாது"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV அமைப்புகளைப் பயன்படுத்த முடியாது"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"டேப்லெட் அமைப்புகளைப் பயன்படுத்த முடியாது"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"மொபைல் அமைப்புகளைப் பயன்படுத்த முடியாது"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"உங்கள் <xliff:g id="DEVICE">%1$s</xliff:g> சாதனத்தில் இதை அணுக முடியாது. அதற்குப் பதிலாக உங்கள் Android TV சாதனத்தில் பயன்படுத்திப் பார்க்கவும்."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"உங்கள் <xliff:g id="DEVICE">%1$s</xliff:g> சாதனத்தில் இதை அணுக முடியாது. அதற்குப் பதிலாக உங்கள் டேப்லெட்டில் பயன்படுத்திப் பார்க்கவும்."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"உங்கள் <xliff:g id="DEVICE">%1$s</xliff:g> சாதனத்தில் இதை அணுக முடியாது. அதற்குப் பதிலாக உங்கள் மொபைலில் பயன்படுத்திப் பார்க்கவும்."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"தற்போது உங்கள் <xliff:g id="DEVICE">%1$s</xliff:g> சாதனத்தில் இதை அணுக முடியாது. அதற்குப் பதிலாக உங்கள் Android TV சாதனத்தில் பயன்படுத்திப் பார்க்கவும்."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"தற்போது உங்கள் <xliff:g id="DEVICE">%1$s</xliff:g> சாதனத்தில் இதை அணுக முடியாது. அதற்குப் பதிலாக உங்கள் டேப்லெட்டில் பயன்படுத்திப் பார்க்கவும்."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"தற்போது உங்கள் <xliff:g id="DEVICE">%1$s</xliff:g> சாதனத்தில் இதை அணுக முடியாது. அதற்குப் பதிலாக உங்கள் மொபைலில் பயன்படுத்திப் பார்க்கவும்."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"தற்போது உங்கள் <xliff:g id="DEVICE">%1$s</xliff:g> சாதனத்தில் இதை அணுக முடியாது. அதற்குப் பதிலாக Android TV சாதனத்தில் பயன்படுத்திப் பாருங்கள்."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"தற்போது உங்கள் <xliff:g id="DEVICE">%1$s</xliff:g> சாதனத்தில் இதை அணுக முடியாது. அதற்குப் பதிலாக உங்கள் டேப்லெட்டில் பயன்படுத்திப் பாருங்கள்."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"தற்போது உங்கள் <xliff:g id="DEVICE">%1$s</xliff:g> சாதனத்தில் இதை அணுக முடியாது. அதற்குப் பதிலாக உங்கள் மொபைலில் பயன்படுத்திப் பாருங்கள்."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"இந்த ஆப்ஸ் கூடுதல் பாதுகாப்பைக் கோருகிறது. அதற்குப் பதிலாக உங்கள் Android TV சாதனத்தில் பயன்படுத்திப் பார்க்கவும்."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"இந்த ஆப்ஸ் கூடுதல் பாதுகாப்பைக் கோருகிறது. அதற்குப் பதிலாக உங்கள் டேப்லெட்டில் பயன்படுத்திப் பார்க்கவும்."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"இந்த ஆப்ஸ் கூடுதல் பாதுகாப்பைக் கோருகிறது. அதற்குப் பதிலாக உங்கள் மொபைலில் பயன்படுத்திப் பார்க்கவும்."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"இந்த ஆப்ஸ் Android இன் பழைய பதிப்புக்காக உருவாக்கப்பட்டதால், சரியாக வேலை செய்யாமல் போகலாம். புதுப்பிப்புகள் ஏதேனும் உள்ளதா எனப் பார்க்கவும் அல்லது டெவெலப்பரைத் தொடர்புகொள்ளவும்."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"புதுப்பிப்பு உள்ளதா எனப் பார்"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"புதிய செய்திகள் வந்துள்ளன"</string>
diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml
index b85ae09..a9b0f44 100644
--- a/core/res/res/values-te/strings.xml
+++ b/core/res/res/values-te/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"ఈ పరికరంలో వేలిముద్ర సెన్సార్ ఎంపిక లేదు."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"సెన్సార్ తాత్కాలికంగా డిజేబుల్ చేయబడింది."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"వేలిముద్ర సెన్సార్‌ను ఉపయోగించడం సాధ్యం కాదు. రిపెయిర్ ప్రొవైడర్‌ను సందర్శించండి"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Power button pressed"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"వేలు <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"వేలిముద్రను ఉపయోగించండి"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"వేలిముద్ర లేదా స్క్రీన్ లాక్‌ను ఉపయోగించండి"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"మీ ఫోన్ వైపు మరింత నేరుగా చూడండి"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"మీ ముఖానికి అడ్డుగా ఉన్నవాటిని తీసివేయండి."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"నల్లని బార్‌తో సహా మీ స్క్రీన్ పైభాగం అంతటినీ శుభ్రంగా తుడవండి"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"మీ ముఖం పూర్తిగా కనిపించాలి"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"మీ ముఖం పూర్తిగా కనిపించాలి"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"మీ ఫేస్‌మోడల్ క్రియేషన్ కుదరదు. మళ్లీ ట్రై చేయండి."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"డార్క్ గ్లాసెస్ గుర్తించబడ్డాయి. మీ ముఖం పూర్తిగా కనిపించాలి."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"ముఖం కవర్ చేయబడింది. మీ ముఖం పూర్తిగా కనిపించాలి."</string>
@@ -1941,18 +1944,19 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"కెమెరా అందుబాటులో లేదు"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"ఫోన్‌లో కొనసాగించండి"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"మైక్రోఫోన్ అందుబాటులో లేదు"</string>
+    <string name="app_streaming_blocked_title_for_playstore_dialog" msgid="8149823099822897538">"Play Store అందుబాటులో లేదు"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV సెట్టింగ్‌లు అందుబాటులో లేవు"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"టాబ్లెట్ సెట్టింగ్‌లు అందుబాటులో లేవు"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"ఫోన్ సెట్టింగ్‌లు అందుబాటులో లేవు"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"మీ <xliff:g id="DEVICE">%1$s</xliff:g>లో దీన్ని యాక్సెస్ చేయడం సాధ్యపడదు. బదులుగా మీ Android TV పరికరంలో ట్రై చేయండి."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"మీ <xliff:g id="DEVICE">%1$s</xliff:g>లో దీన్ని యాక్సెస్ చేయడం సాధ్యపడదు. బదులుగా మీ టాబ్లెట్‌లో ట్రై చేయండి."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"మీ <xliff:g id="DEVICE">%1$s</xliff:g>లో దీన్ని యాక్సెస్ చేయడం సాధ్యపడదు. బదులుగా మీ ఫోన్‌లో ట్రై చేయండి."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"ఈ సమయంలో మీ <xliff:g id="DEVICE">%1$s</xliff:g>లో దీన్ని యాక్సెస్ చేయడం సాధ్యపడదు. బదులుగా మీ Android TV పరికరంలో ట్రై చేయండి."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"ఈ సమయంలో మీ <xliff:g id="DEVICE">%1$s</xliff:g>లో దీన్ని యాక్సెస్ చేయడం సాధ్యపడదు. బదులుగా మీ టాబ్లెట్‌లో ట్రై చేయండి."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"ఈ సమయంలో మీ <xliff:g id="DEVICE">%1$s</xliff:g>లో దీన్ని యాక్సెస్ చేయడం సాధ్యపడదు. బదులుగా మీ ఫోన్‌లో ట్రై చేయండి."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"ఈ సమయంలో మీ <xliff:g id="DEVICE">%1$s</xliff:g>లో దీన్ని యాక్సెస్ చేయడం సాధ్యపడదు. బదులుగా మీ Android TV పరికరంలో ట్రై చేయండి."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"ఈ సమయంలో మీ <xliff:g id="DEVICE">%1$s</xliff:g>లో దీన్ని యాక్సెస్ చేయడం సాధ్యపడదు. బదులుగా మీ టాబ్లెట్‌లో ట్రై చేయండి."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"ఈ సమయంలో మీ <xliff:g id="DEVICE">%1$s</xliff:g>లో దీన్ని యాక్సెస్ చేయడం సాధ్యపడదు. బదులుగా మీ ఫోన్‌లో ట్రై చేయండి."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"ఈ యాప్ అదనపు సెక్యూరిటీ కోసం రిక్వెస్ట్ చేస్తోంది. బదులుగా మీ Android TV పరికరంలో ట్రై చేయండి."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"ఈ యాప్ అదనపు సెక్యూరిటీ కోసం రిక్వెస్ట్ చేస్తోంది. బదులుగా మీ టాబ్లెట్‌లో ట్రై చేయండి."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"ఈ యాప్ అదనపు సెక్యూరిటీ కోసం రిక్వెస్ట్ చేస్తోంది. బదులుగా మీ ఫోన్‌లో ట్రై చేయండి."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tv" msgid="820334666354451145">"మీ <xliff:g id="DEVICE">%1$s</xliff:g>లో దీన్ని యాక్సెస్ చేయడం సాధ్యపడదు. బదులుగా మీ Android TV పరికరంలో ట్రై చేయండి."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tablet" msgid="3286849551133045896">"మీ <xliff:g id="DEVICE">%1$s</xliff:g>లో దీన్ని యాక్సెస్ చేయడం సాధ్యపడదు. బదులుగా మీ టాబ్లెట్‌లో ట్రై చేయండి."</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"మీ <xliff:g id="DEVICE">%1$s</xliff:g>లో దీన్ని యాక్సెస్ చేయడం సాధ్యపడదు. బదులుగా మీ ఫోన్‌లో ట్రై చేయండి."</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"ఈ యాప్ పాత వెర్షన్ Android కోసం రూపొందించబడింది మరియు అది సరిగ్గా పని చేయకపోవచ్చు. అప్‌డేట్‌ల కోసం చెక్ చేయడానికి ప్రయత్నించండి లేదా డెవలపర్‌ని సంప్రదించండి."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"అప్‌డేట్ కోసం చెక్ చేయండి"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"మీకు కొత్త మెసేజ్‌లు ఉన్నాయి"</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 27436e1..26b0b98 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"อุปกรณ์นี้ไม่มีเซ็นเซอร์ลายนิ้วมือ"</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"ปิดใช้เซ็นเซอร์ชั่วคราวแล้ว"</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"ใช้เซ็นเซอร์ลายนิ้วมือไม่ได้ โปรดติดต่อผู้ให้บริการซ่อม"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"กดปุ่มเปิด/ปิดแล้ว"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"นิ้ว <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"ใช้ลายนิ้วมือ"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"ใช้ลายนิ้วมือหรือการล็อกหน้าจอ"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"โปรดมองตรงมาที่โทรศัพท์"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"เอาสิ่งที่ปิดบังใบหน้าออก"</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"ทำความสะอาดด้านบนของหน้าจอ รวมถึงแถบสีดำ"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"ต้องมองเห็นใบหน้าของคุณทั้งหมด"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"ต้องมองเห็นใบหน้าของคุณทั้งหมด"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"สร้างรูปแบบใบหน้าไม่ได้ โปรดลองอีกครั้ง"</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"ตรวจพบแว่นตาดำ ต้องมองเห็นใบหน้าของคุณทั้งหมด"</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"ตรวจพบหน้ากากอนามัย ต้องมองเห็นใบหน้าของคุณทั้งหมด"</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"กล้องไม่พร้อมใช้งาน"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"ดำเนินการต่อบนโทรศัพท์"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"ไมโครโฟนไม่พร้อมใช้งาน"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"การตั้งค่า Android TV ไม่พร้อมใช้งาน"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"การตั้งค่าแท็บเล็ตไม่พร้อมใช้งาน"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"การตั้งค่าโทรศัพท์ไม่พร้อมใช้งาน"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"เข้าถึงแอปนี้ใน <xliff:g id="DEVICE">%1$s</xliff:g> ของคุณไม่ได้ โปรดลองเข้าถึงในอุปกรณ์ Android TV แทน"</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"เข้าถึงแอปนี้ใน <xliff:g id="DEVICE">%1$s</xliff:g> ของคุณไม่ได้ โปรดลองเข้าถึงในแท็บเล็ตแทน"</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"เข้าถึงแอปนี้ใน <xliff:g id="DEVICE">%1$s</xliff:g> ของคุณไม่ได้ โปรดลองเข้าถึงในโทรศัพท์แทน"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"เข้าถึงแอปนี้ใน <xliff:g id="DEVICE">%1$s</xliff:g> ของคุณไม่ได้ในขณะนี้ โปรดลองเข้าถึงในอุปกรณ์ Android TV แทน"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"เข้าถึงแอปนี้ใน <xliff:g id="DEVICE">%1$s</xliff:g> ของคุณไม่ได้ในขณะนี้ โปรดลองเข้าถึงในแท็บเล็ตแทน"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"เข้าถึงแอปนี้ใน <xliff:g id="DEVICE">%1$s</xliff:g> ของคุณไม่ได้ในขณะนี้ โปรดลองเข้าถึงในโทรศัพท์แทน"</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"เข้าถึงแอปนี้ใน <xliff:g id="DEVICE">%1$s</xliff:g> ของคุณไม่ได้ในขณะนี้ โปรดลองเข้าถึงในอุปกรณ์ Android TV แทน"</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"เข้าถึงแอปนี้ใน <xliff:g id="DEVICE">%1$s</xliff:g> ของคุณไม่ได้ในขณะนี้ โปรดลองเข้าถึงในแท็บเล็ตแทน"</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"เข้าถึงแอปนี้ใน <xliff:g id="DEVICE">%1$s</xliff:g> ของคุณไม่ได้ในขณะนี้ โปรดลองเข้าถึงในโทรศัพท์แทน"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"แอปนี้มีการขอการรักษาความปลอดภัยเพิ่มเติม โปรดลองเข้าถึงในอุปกรณ์ Android TV แทน"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"แอปนี้มีการขอการรักษาความปลอดภัยเพิ่มเติม โปรดลองเข้าถึงในแท็บเล็ตแทน"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"แอปนี้มีการขอการรักษาความปลอดภัยเพิ่มเติม โปรดลองเข้าถึงในโทรศัพท์แทน"</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"แอปนี้สร้างขึ้นเพื่อ Android เวอร์ชันเก่าและอาจทำงานผิดปกติ โปรดลองตรวจหาการอัปเดตหรือติดต่อนักพัฒนาซอฟต์แวร์"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"ตรวจสอบอัปเดต"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"คุณมีข้อความใหม่"</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 0383ae6..47f433c 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Walang sensor ng fingerprint ang device na ito."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Pansamantalang na-disable ang sensor."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Hindi magamit ang sensor para sa fingerprint. Bumisita sa provider ng pag-aayos"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Napindot ang power button"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Daliri <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Gumamit ng fingerprint"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Gumamit ng fingerprint o lock ng screen"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Tumingin nang mas direkta sa iyong telepono"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Alisin ang anumang humaharang sa iyong mukha."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Linisin ang itaas ng iyong screen, kasama ang itim na bar"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Dapat ganap na nakikita ang iyong mukha"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Dapat ganap na nakikita ang iyong mukha"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Hindi magawa ang iyong face model. Subukan ulit."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"May na-detect na madilim na salamin. Dapat ganap na nakikita ang iyong mukha."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"May na-detect na pantakip sa mukha. Dapat ganap na nakikita ang iyong mukha."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Hindi available ang camera"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Magpatuloy sa telepono"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Hindi available ang mikropono"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Hindi available ang mga setting ng Android TV"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Hindi available ang mga setting ng tablet"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Hindi available ang mga setting ng telepono"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Hindi ito maa-access sa iyong <xliff:g id="DEVICE">%1$s</xliff:g>. Subukan na lang sa iyong Android TV device."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Hindi ito maa-access sa iyong <xliff:g id="DEVICE">%1$s</xliff:g>. Subukan na lang sa iyong tablet."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Hindi ito maa-access sa iyong <xliff:g id="DEVICE">%1$s</xliff:g>. Subukan na lang sa iyong telepono."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Hindi ito maa-access sa iyong <xliff:g id="DEVICE">%1$s</xliff:g> sa ngayon. Subukan na lang sa iyong Android TV device."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Hindi ito maa-access sa iyong <xliff:g id="DEVICE">%1$s</xliff:g> sa ngayon. Subukan na lang sa iyong tablet."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Hindi ito maa-access sa iyong <xliff:g id="DEVICE">%1$s</xliff:g> sa ngayon. Subukan na lang sa iyong telepono."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Hindi ito maa-access sa iyong <xliff:g id="DEVICE">%1$s</xliff:g> sa ngayon. Subukan na lang sa iyong Android TV device."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Hindi ito maa-access sa iyong <xliff:g id="DEVICE">%1$s</xliff:g> sa ngayon. Subukan na lang sa iyong tablet."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Hindi ito maa-access sa iyong <xliff:g id="DEVICE">%1$s</xliff:g> sa ngayon. Subukan na lang sa iyong telepono."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Humihiling ng karagdagang seguridad ang app na ito. Subukan na lang sa iyong Android TV device."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Humihiling ng karagdagang seguridad ang app na ito. Subukan na lang sa iyong tablet."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Humihiling ng karagdagang seguridad ang app na ito. Subukan na lang sa iyong telepono."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Ang app na ito ay ginawa para sa mas lumang bersyon ng Android at maaaring hindi gumana nang maayos. Subukang tingnan kung may mga update, o makipag-ugnayan sa developer."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Tingnan kung may update"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Mayroon kang mga bagong mensahe"</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index c67d8fb..de4499b 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Bu cihazda parmak izi sensörü yok."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensör geçici olarak devre dışı bırakıldı."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Parmak izi sensörü kullanılamıyor. Bir onarım hizmeti sağlayıcıyı ziyaret edin"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Güç düğmesine basıldı"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"<xliff:g id="FINGERID">%d</xliff:g>. parmak"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Parmak izi kullan"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Parmak izi veya ekran kilidi kullan"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Telefonunuza daha doğrudan bakın"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Yüzünüzün görünmesini engelleyen şeyleri kaldırın."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Siyah çubuk da dahil olmak üzere ekranınızın üst kısmını temizleyin"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Yüzünüz tamamen görünür olmalıdır"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Yüzünüz tamamen görünür olmalıdır"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Yüzünüzün modeli oluşturulamıyor. Tekrar deneyin."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Koyu renk gözlükler algılandı. Yüzünüz tamamen görünür olmalıdır."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Yüzünüzü kapattığınız algılandı. Yüzünüz tamamen görünür olmalıdır."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Kamera kullanılamıyor"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"İşleme telefonda devam edin"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Mikrofon kullanılamıyor"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV ayarları kullanılamıyor"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Tablet ayarları kullanılamıyor"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Telefon ayarları kullanılamıyor"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Bu uygulamaya <xliff:g id="DEVICE">%1$s</xliff:g> cihazınızdan erişilemiyor. Bunun yerine Android TV cihazınızı kullanmayı deneyin."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Bu uygulamaya <xliff:g id="DEVICE">%1$s</xliff:g> cihazınızdan erişilemiyor. Bunun yerine tabletinizi kullanmayı deneyin."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Bu uygulamaya <xliff:g id="DEVICE">%1$s</xliff:g> cihazınızdan erişilemiyor. Bunun yerine telefonunuzu kullanmayı deneyin."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Bu uygulamaya şu anda <xliff:g id="DEVICE">%1$s</xliff:g> cihazınızdan erişilemiyor. Bunun yerine Android TV cihazınızı kullanmayı deneyin."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Bu uygulamaya şu anda <xliff:g id="DEVICE">%1$s</xliff:g> cihazınızdan erişilemiyor. Bunun yerine tabletinizi kullanmayı deneyin."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Bu uygulamaya şu anda <xliff:g id="DEVICE">%1$s</xliff:g> cihazınızdan erişilemiyor. Bunun yerine telefonunuzu kullanmayı deneyin."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Bu uygulamaya şu anda <xliff:g id="DEVICE">%1$s</xliff:g> cihazınızdan erişilemiyor. Bunun yerine Android TV cihazınızı kullanmayı deneyin."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Bu uygulamaya şu anda <xliff:g id="DEVICE">%1$s</xliff:g> cihazınızdan erişilemiyor. Bunun yerine tabletinizi kullanmayı deneyin."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Bu uygulamaya şu anda <xliff:g id="DEVICE">%1$s</xliff:g> cihazınızdan erişilemiyor. Bunun yerine telefonunuzu kullanmayı deneyin."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Bu uygulama daha fazla güvenlik istiyor. Bunun yerine Android TV cihazınızı kullanmayı deneyin."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Bu uygulama daha fazla güvenlik istiyor. Bunun yerine tabletinizi kullanmayı deneyin."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Bu uygulama daha fazla güvenlik istiyor. Bunun yerine telefonunuzu kullanmayı deneyin."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Bu uygulama Android\'in daha eski bir sürümü için oluşturuldu ve düzgün çalışmayabilir. Güncellemeleri kontrol etmeyi deneyin veya geliştiriciyle iletişime geçin."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Güncellemeleri denetle"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Yeni mesajlarınız var"</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 17e86fa..9817167 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -616,6 +616,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"На цьому пристрої немає сканера відбитків пальців."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Датчик тимчасово вимкнено."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Не вдається скористатися сканером відбитків пальців. Зверніться до постачальника послуг із ремонту."</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Натиснуто кнопку живлення"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Відбиток пальця <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Доступ за відбитком пальця"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Використовувати відбиток пальця або дані для розблокування екрана"</string>
@@ -656,8 +657,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Дивіться на телефон прямо"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Приберіть об’єкти, які затуляють ваше обличчя."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Очистьте верхню частину екрана, зокрема чорну панель"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Обличчя має бути видно повністю"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Обличчя має бути видно повністю"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Не вдається створити модель обличчя. Повторіть спробу."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Виявлено темні окуляри. Обличчя має бути видно повністю."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Виявлено аксесуар, який закриває обличчя. Обличчя має бути видно повністю."</string>
@@ -1943,18 +1946,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Камера недоступна"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Продовжте на телефоні"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Мікрофон недоступний"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Налаштування Android TV недоступні"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Налаштування планшета недоступні"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Налаштування телефона недоступні"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Цей додаток недоступний на вашому пристрої (<xliff:g id="DEVICE">%1$s</xliff:g>). Спробуйте натомість скористатися пристроєм Android TV."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Цей додаток недоступний на вашому пристрої (<xliff:g id="DEVICE">%1$s</xliff:g>). Спробуйте натомість скористатися планшетом."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Цей додаток недоступний на вашому пристрої (<xliff:g id="DEVICE">%1$s</xliff:g>). Спробуйте натомість скористатися телефоном."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Цей додаток зараз недоступний на вашому пристрої (<xliff:g id="DEVICE">%1$s</xliff:g>). Спробуйте натомість скористатися пристроєм Android TV."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Цей додаток зараз недоступний на вашому пристрої (<xliff:g id="DEVICE">%1$s</xliff:g>). Спробуйте натомість скористатися планшетом."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Цей додаток зараз недоступний на вашому пристрої (<xliff:g id="DEVICE">%1$s</xliff:g>). Спробуйте натомість скористатися телефоном."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Цей додаток зараз недоступний на вашому <xliff:g id="DEVICE">%1$s</xliff:g>. Спробуйте натомість скористатися пристроєм Android TV."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Цей додаток зараз недоступний на вашому <xliff:g id="DEVICE">%1$s</xliff:g>. Спробуйте натомість скористатися планшетом."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Цей додаток зараз недоступний на вашому <xliff:g id="DEVICE">%1$s</xliff:g>. Спробуйте натомість скористатися телефоном."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Цьому додатку потрібен додатковий рівень безпеки. Спробуйте натомість скористатися пристроєм Android TV."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Цьому додатку потрібен додатковий рівень безпеки. Спробуйте натомість скористатися планшетом."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Цьому додатку потрібен додатковий рівень безпеки. Спробуйте натомість скористатися телефоном."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Цей додаток створений для старішої версії Android і може працювати неналежним чином. Спробуйте знайти оновлення або зв’яжіться з розробником."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Шукати оновлення"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"У вас є нові повідомлення"</string>
diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml
index b6d19b9..0d6538e 100644
--- a/core/res/res/values-ur/strings.xml
+++ b/core/res/res/values-ur/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"اس آلہ میں فنگر پرنٹ سینسر نہیں ہے۔"</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"سینسر عارضی طور غیر فعال ہے۔"</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"فنگر پرنٹ سینسر کا استعمال نہیں کر سکتے۔ ایک مرمت فراہم کنندہ کو ملاحظہ کریں"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"پاور بٹن دبایا گیا"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"انگلی <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"فنگر پرنٹ استعمال کریں"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"فنگر پرنٹ یا اسکرین لاک استعمال کریں"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"اپنے فون کی طرف چہرے کو سیدھا رکھیں"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"آپ کے چہرہ کو چھپانے والی ہر چیز کو ہٹائیں۔"</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"سیاہ بار سمیت، اپنی اسکرین کے اوپری حصے کو صاف کریں"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"آپ کا چہرہ مکمل طور پر دکھائی دینا ضروری ہے"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"آپ کا چہرہ مکمل طور پر دکھائی دینا ضروری ہے"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"آپکے چہرے کا ماڈل تخلیق نہیں ہو سکا۔ پھر کوشش کریں۔"</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"گہرے چشمے کا پتہ چلا۔ آپ کا چہرہ مکمل طور پر دکھائی دینا ضروری ہے۔"</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"چہرے کو ڈھانپنے کا پتہ چلا۔ آپ کا چہرہ مکمل طور پر دکھائی دینا ضروری ہے۔"</string>
@@ -1941,18 +1944,19 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"کیمرا دستیاب نہیں ہے"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"فون پر جاری رکھیں"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"مائیکروفون دستیاب نہیں ہے"</string>
+    <string name="app_streaming_blocked_title_for_playstore_dialog" msgid="8149823099822897538">"‏Play اسٹور دستیاب نہیں ہے"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"‏Android TV کی ترتیبات دستیاب نہیں ہے"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"ٹیبلیٹ کی ترتیبات دستیاب نہیں ہے"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"فون کی ترتیبات دستیاب نہیں ہے"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"‏آپ کے <xliff:g id="DEVICE">%1$s</xliff:g> پر اس تک رسائی حاصل نہیں ہو سکتی۔ اس کے بجائے اپنے Android TV آلے پر کوشش کریں۔"</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"آپ کے <xliff:g id="DEVICE">%1$s</xliff:g> پر اس تک رسائی حاصل نہیں ہو سکتی۔ اس کے بجائے اپنے ٹیبلیٹ پر کوشش کریں۔"</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"آپ کے <xliff:g id="DEVICE">%1$s</xliff:g> پر اس تک رسائی حاصل نہیں ہو سکتی۔ اس کے بجائے اپنے فون پر کوشش کریں۔"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"‏اس وقت آپ کے <xliff:g id="DEVICE">%1$s</xliff:g> پر اس تک رسائی حاصل نہیں ہو سکتی۔ اس کے بجائے اپنے Android TV آلے پر کوشش کریں۔"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"اس وقت آپ کے <xliff:g id="DEVICE">%1$s</xliff:g> پر اس تک رسائی حاصل نہیں ہو سکتی۔ اس کے بجائے اپنے ٹیبلیٹ پر کوشش کریں۔"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"اس وقت آپ کے <xliff:g id="DEVICE">%1$s</xliff:g> پر اس تک رسائی حاصل نہیں ہو سکتی۔ اس کے بجائے اپنے فون پر کوشش کریں۔"</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"‏اس وقت آپ کے <xliff:g id="DEVICE">%1$s</xliff:g> پر اس تک رسائی نہیں مل سکتی۔ اس کے بجائے اپنے Android TV آلے پر کوشش کریں۔"</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"اس وقت آپ کے <xliff:g id="DEVICE">%1$s</xliff:g> پر اس تک رسائی نہیں مل سکتی۔ اس کے بجائے اپنے ٹیبلیٹ پر کوشش کریں۔"</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"اس وقت آپ کے <xliff:g id="DEVICE">%1$s</xliff:g> پر اس تک رسائی نہیں مل سکتی۔ اس کے بجائے اپنے فون پر کوشش کریں۔"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"‏یہ ایپ اضافی سیکیورٹی کی درخواست کر رہی ہے۔ اس کے بجائے اپنے Android TV آلے پر کوشش کریں۔"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"یہ ایپ اضافی سیکیورٹی کی درخواست کر رہی ہے۔ اس کے بجائے اپنے ٹیبلیٹ پر کوشش کریں۔"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"یہ ایپ اضافی سیکیورٹی کی درخواست کر رہی ہے۔ اس کے بجائے اپنے فون پر کوشش کریں۔"</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tv" msgid="820334666354451145">"‏آپ کے <xliff:g id="DEVICE">%1$s</xliff:g> پر اس تک رسائی حاصل نہیں ہو سکتی۔ اس کے بجائے اپنے Android TV آلے پر کوشش کریں۔"</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tablet" msgid="3286849551133045896">"آپ کے <xliff:g id="DEVICE">%1$s</xliff:g> پر اس تک رسائی حاصل نہیں ہو سکتی۔ اس کے بجائے اپنے ٹیبلیٹ پر کوشش کریں۔"</string>
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="default" msgid="6264287556598916295">"آپ کے <xliff:g id="DEVICE">%1$s</xliff:g> پر اس تک رسائی حاصل نہیں ہو سکتی۔ اس کے بجائے اپنے فون پر کوشش کریں۔"</string>
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"‏یہ ایپ Android کے پرانے ورژن کے لئے بنائی گئی ہے اور ہو سکتا ہے صحیح طور پر کام نہ کرے۔ اپ ڈیٹس چیک کر کے آزمائیں یا ڈویلپر سے رابطہ کریں۔"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"اپ ڈیٹ چیک کریں"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"آپ کے پاس نئے پیغامات ہیں"</string>
diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml
index 247ca77..e3aaa68 100644
--- a/core/res/res/values-uz/strings.xml
+++ b/core/res/res/values-uz/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Bu qurilmada barmoq izi skaneri mavjud emas."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor vaqtincha faol emas."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Barmoq izi skaneridan foydalanish imkonsiz. Xizmat koʻrsatish markaziga murojaat qiling"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Quvvat tugmasi bosildi"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Barmoq izi <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Barmoq izi ishlatish"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Barmoq izi yoki ekran qulfi"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Telefonga tik qarab turing"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Yuzingizni berkitayotgan narsalarni olib tashlang."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Ekranning yuqori qismini, shuningdek, qora panelni ham tozalang"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Yuzingiz toʻliq koʻrinishi kerak"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Yuzingiz toʻliq koʻrinishi kerak"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Yuzingiz modeli yaratilmadi. Qayta urining."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Qora koʻzoynak aniqlandi. Yuzingiz toʻliq koʻrinishi kerak."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Yuzning bir qismi yopilib qolgan. Yuzingiz toʻliq koʻrinishi kerak."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Kamera ishlamayapti"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Telefonda davom ettirish"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Mikrofon ishlamayapti"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Android TV sozlamalari ishlamayapti"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Planshet sozlamalari ishlamayapti"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Telefon sozlamalari ishlamayapti"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Bu <xliff:g id="DEVICE">%1$s</xliff:g> qurilmangizda ochilmaydi. Android TV qurilmasi orqali urinib koʻring."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Bu <xliff:g id="DEVICE">%1$s</xliff:g> qurilmangizda ochilmaydi. Planshet orqali urinib koʻring."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Bu <xliff:g id="DEVICE">%1$s</xliff:g> qurilmangizda ochilmaydi. Telefon orqali urininb koʻring."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Ayni vaqtda bu translatsiya <xliff:g id="DEVICE">%1$s</xliff:g> qurilmangizda ishlamaydi. Android TV qurilmasi orqali urinib koʻring."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Ayni vaqtda bu translatsiya <xliff:g id="DEVICE">%1$s</xliff:g> qurilmangizda ishlamaydi. Planshet orqali urinib koʻring."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Ayni vaqtda bu translatsiya <xliff:g id="DEVICE">%1$s</xliff:g> qurilmangizda ishlamaydi. Telefon orqali urininb koʻring."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Ayni vaqtda bu translatsiya <xliff:g id="DEVICE">%1$s</xliff:g> qurilmangizda ishlamaydi. Android TV qurilmasi orqali urinib koʻring."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Ayni vaqtda bu translatsiya <xliff:g id="DEVICE">%1$s</xliff:g> qurilmangizda ishlamaydi. Planshet orqali urinib koʻring."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Ayni vaqtda bu translatsiya <xliff:g id="DEVICE">%1$s</xliff:g> qurilmangizda ishlamaydi. Telefon orqali urininb koʻring."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Bu ilova qoʻshimcha himoyani talab qilmoqda. Android TV qurilmasi orqali urinib koʻring."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Bu ilova qoʻshimcha himoyani talab qilmoqda. Planshet orqali urinib koʻring."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Bu ilova qoʻshimcha himoyani talab qilmoqda. Telefon orqali urininb koʻring."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Bu ilova eskiroq Android versiyalariga chiqarilgan va xato ishlashi mumkin. Yangilanishlarini tekshiring yoki dasturchi bilan bog‘laning."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Yangilanish borligini tekshirish"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Sizga yangi SMS keldi"</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 4df2c22..9db9285 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Thiết bị này không có cảm biến vân tay."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Đã tạm thời tắt cảm biến."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Không thể dùng cảm biến vân tay. Hãy liên hệ với một nhà cung cấp dịch vụ sửa chữa"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Đã nhấn nút nguồn"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Ngón tay <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Dùng vân tay"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Dùng vân tay hoặc phương thức khóa màn hình"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Nhìn thẳng vào điện thoại"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Hãy loại bỏ mọi thứ che khuất khuôn mặt bạn."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Vệ sinh phần đầu màn hình, bao gồm cả thanh màu đen"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Bạn cần cho thấy toàn bộ khuôn mặt của mình"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Toàn bộ khuôn mặt của bạn phải được hiển thị"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Không thể tạo mẫu khuôn mặt của bạn. Hãy thử lại."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Đã phát hiện thấy kính râm. Toàn bộ khuôn mặt của bạn phải được trông thấy rõ ràng."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Đã phát hiện khuôn mặt bị che khuất. Toàn bộ khuôn mặt của bạn phải được hiển thị."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Không dùng được máy ảnh"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Tiếp tục trên điện thoại"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Không dùng được micrô"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Không dùng được các chế độ cài đặt của Android TV"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Không dùng được các chế độ cài đặt của máy tính bảng"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Không dùng được các chế độ cài đặt của điện thoại"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Hiện tại, bạn không thể truy cập vào ứng dụng này trên <xliff:g id="DEVICE">%1$s</xliff:g>. Hãy thử trên thiết bị Android TV."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Hiện tại, bạn không thể truy cập vào ứng dụng này trên <xliff:g id="DEVICE">%1$s</xliff:g>. Hãy thử trên máy tính bảng."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Hiện tại, bạn không thể truy cập vào ứng dụng này trên <xliff:g id="DEVICE">%1$s</xliff:g>. Hãy thử trên điện thoại."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Hiện tại, bạn không thể truy cập vào ứng dụng này trên <xliff:g id="DEVICE">%1$s</xliff:g>. Hãy thử trên thiết bị Android TV."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Hiện tại, bạn không thể truy cập vào ứng dụng này trên <xliff:g id="DEVICE">%1$s</xliff:g>. Hãy thử trên máy tính bảng."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Hiện tại, bạn không thể truy cập vào ứng dụng này trên <xliff:g id="DEVICE">%1$s</xliff:g>. Hãy thử trên điện thoại."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Hiện tại, bạn không thể truy cập vào ứng dụng này trên <xliff:g id="DEVICE">%1$s</xliff:g>. Hãy thử trên thiết bị Android TV."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Hiện tại, bạn không thể truy cập vào ứng dụng này trên <xliff:g id="DEVICE">%1$s</xliff:g>. Hãy thử trên máy tính bảng."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Hiện tại, bạn không thể truy cập vào ứng dụng này trên <xliff:g id="DEVICE">%1$s</xliff:g>. Hãy thử trên điện thoại."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Ứng dụng này đang yêu cầu tính năng bảo mật bổ sung. Hãy thử trên thiết bị Android TV."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Ứng dụng này đang yêu cầu tính năng bảo mật bổ sung. Hãy thử trên máy tính bảng."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Ứng dụng này đang yêu cầu tính năng bảo mật bổ sung. Hãy thử trên điện thoại."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Ứng dụng này được xây dựng cho một phiên bản Android cũ hơn và có thể hoạt động không bình thường. Hãy thử kiểm tra các bản cập nhật hoặc liên hệ với nhà phát triển."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Kiểm tra bản cập nhật"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Bạn có tin nhắn mới"</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index d765869b..e715c73 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"此设备没有指纹传感器。"</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"传感器已暂时停用。"</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"无法使用指纹传感器。请联系维修服务提供商"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"已按下电源按钮"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"手指 <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"使用指纹"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"使用指纹或屏幕锁定凭据"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"请尽量直视手机"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"请移除所有遮挡您面部的物体。"</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"请将屏幕顶部(包括黑色条栏)清理干净"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"您的脸部必须完全可见"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"您的脸部必须完全可见"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"无法创建您的脸部模型,请重试。"</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"检测到墨镜,您的脸部必须完全可见。"</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"检测到脸部有遮挡物,您的脸部必须完全可见。"</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"无法使用摄像头"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"继续在手机上操作"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"无法使用麦克风"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"无法使用 Android TV 设置"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"无法使用平板电脑设置"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"无法使用手机设置"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"无法在您的<xliff:g id="DEVICE">%1$s</xliff:g>上访问此应用,您可以尝试在 Android TV 设备上访问。"</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"无法在您的<xliff:g id="DEVICE">%1$s</xliff:g>上访问此应用,您可以尝试在平板电脑上访问。"</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"无法在您的<xliff:g id="DEVICE">%1$s</xliff:g>上访问此应用,您可以尝试在手机上访问。"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"目前无法在您的<xliff:g id="DEVICE">%1$s</xliff:g>上访问此应用,您可以尝试在 Android TV 设备上访问。"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"目前无法在您的<xliff:g id="DEVICE">%1$s</xliff:g>上访问此应用,您可以尝试在平板电脑上访问。"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"目前无法在您的<xliff:g id="DEVICE">%1$s</xliff:g>上访问此应用,您可以尝试在手机上访问。"</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"目前无法在您的<xliff:g id="DEVICE">%1$s</xliff:g>上访问此内容。您可以尝试在 Android TV 设备上访问。"</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"目前无法在您的<xliff:g id="DEVICE">%1$s</xliff:g>上访问此内容。您可以尝试在平板电脑上访问。"</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"目前无法在您的<xliff:g id="DEVICE">%1$s</xliff:g>上访问此内容。您可以尝试在手机上访问。"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"此应用要求进行额外的安全性验证,您可以尝试在 Android TV 设备上访问。"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"此应用要求进行额外的安全性验证,您可以尝试在平板电脑上访问。"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"此应用要求进行额外的安全性验证,您可以尝试在手机上访问。"</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"此应用专为旧版 Android 打造,因此可能无法正常运行。请尝试检查更新或与开发者联系。"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"检查更新"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"您有新消息"</string>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index c71bd6d..50c06b7 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"此裝置沒有指紋感應器。"</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"感應器已暫時停用。"</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"無法使用指紋感應器。請諮詢維修服務供應商"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"已按下開關按鈕"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"手指 <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"使用指紋鎖定"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"使用指紋或螢幕鎖定"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"盡可能直視手機"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"移開遮住面孔的任何物件。"</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"請清理螢幕頂部,包括黑色列"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"必須展示整個面孔"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"您必須展示整個面孔。"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"無法建立面部模型,請再試一次。"</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"偵測到深色眼鏡。您必須展示整個面孔。"</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"偵測到面部遮蓋物。您必須展示整個面孔。"</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"無法使用相機"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"請繼續透過手機操作"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"無法使用麥克風"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"無法使用 Android TV 設定"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"無法使用平板電腦設定"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"無法使用手機設定"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"無法在 <xliff:g id="DEVICE">%1$s</xliff:g> 上存取此應用程式,請改用 Android TV 裝置。"</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"無法在 <xliff:g id="DEVICE">%1$s</xliff:g> 上存取此應用程式,請改用平板電腦。"</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"無法在 <xliff:g id="DEVICE">%1$s</xliff:g> 上存取此應用程式,請改用手機。"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"目前無法在 <xliff:g id="DEVICE">%1$s</xliff:g> 上存取此應用程式,請改用 Android TV 裝置。"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"目前無法在 <xliff:g id="DEVICE">%1$s</xliff:g> 上存取此應用程式,請改用平板電腦。"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"目前無法在 <xliff:g id="DEVICE">%1$s</xliff:g> 上存取此應用程式,請改用手機。"</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"目前無法在 <xliff:g id="DEVICE">%1$s</xliff:g> 上存取此應用程式,請改用 Android TV 裝置存取。"</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"目前無法在 <xliff:g id="DEVICE">%1$s</xliff:g> 上存取此應用程式,請改用平板電腦存取。"</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"目前無法在 <xliff:g id="DEVICE">%1$s</xliff:g> 上存取此應用程式,請改用手機存取。"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"此應用程式要求額外的安全措施,請改用 Android TV 裝置。"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"此應用程式要求額外的安全措施,請改用平板電腦。"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"此應用程式要求額外的安全措施,請改用手機。"</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"此應用程式專為舊版 Android 打造,因此可能無法正常運作。請嘗試檢查更新,或與開發人員聯絡。"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"檢查更新"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"您有新的訊息"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 453c14a..0c57cf3 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"這個裝置沒有指紋感應器。"</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"感應器已暫時停用。"</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"指紋感應器無法使用,請洽詢維修供應商"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"已按下電源鍵"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"手指 <xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"使用指紋"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"使用指紋或螢幕鎖定功能"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"請盡可能直視手機"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"請移除任何會遮住臉孔的物體。"</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"請清理螢幕頂端,包括黑色橫列"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"請露出整張臉"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"請露出整張臉"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"無法建立臉部模型,請再試一次。"</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"偵測到墨鏡,請露出整張臉。"</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"偵測到有物品遮住臉,請露出整張臉。"</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"無法使用相機"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"請繼續在手機上操作"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"無法使用麥克風"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"無法使用 Android TV 設定"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"無法使用平板電腦設定"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"無法使用手機設定"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"無法在 <xliff:g id="DEVICE">%1$s</xliff:g> 上存取這個應用程式,請改用 Android TV 裝置。"</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"無法在 <xliff:g id="DEVICE">%1$s</xliff:g> 上存取這個應用程式,請改用平板電腦。"</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"無法在 <xliff:g id="DEVICE">%1$s</xliff:g> 上存取這個應用程式,請改用手機。"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"目前無法在 <xliff:g id="DEVICE">%1$s</xliff:g> 上存取這個應用程式,請改用 Android TV 裝置。"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"目前無法在 <xliff:g id="DEVICE">%1$s</xliff:g> 上存取這個應用程式,請改用平板電腦。"</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"目前無法在 <xliff:g id="DEVICE">%1$s</xliff:g> 上存取這個應用程式,請改用手機。"</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"目前無法在 <xliff:g id="DEVICE">%1$s</xliff:g> 上存取這個應用程式,請改用 Android TV 裝置。"</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"目前無法在 <xliff:g id="DEVICE">%1$s</xliff:g> 上存取這個應用程式,請改用平板電腦。"</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"目前無法在 <xliff:g id="DEVICE">%1$s</xliff:g> 上存取這個應用程式,請改用手機。"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"這個應用程式要求進行額外的安全性驗證,請改用 Android TV 裝置。"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"這個應用程式要求進行額外的安全性驗證,請改用平板電腦。"</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"這個應用程式要求進行額外的安全性驗證,請改用手機。"</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"這個應用程式是專為舊版 Android 所打造,因此可能無法正常運作。請嘗試檢查更新,或是與開發人員聯絡。"</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"檢查更新"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"你有新訊息"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 381f864..97a3fa0 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -614,6 +614,7 @@
     <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Le divayisi ayinayo inzwa yezigxivizo zeminwe."</string>
     <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Inzwa ikhutshazwe okwesikhashana."</string>
     <string name="fingerprint_error_bad_calibration" msgid="4385512597740168120">"Ayikwazi ukusebenzisa inzwa yesigxivizo somunwe. Vakashela umhlinzeki wokulungisa"</string>
+    <string name="fingerprint_error_power_pressed" msgid="5479524500542129414">"Inkinobho yamandla icindezelwe"</string>
     <string name="fingerprint_name_template" msgid="8941662088160289778">"Umunwe ongu-<xliff:g id="FINGERID">%d</xliff:g>"</string>
     <string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Sebenzisa izigxivizo zeminwe"</string>
     <string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Sebenzisa izigxivizo zeminwe noma ukukhiya isikrini"</string>
@@ -654,8 +655,10 @@
     <string name="face_acquired_roll_too_extreme" msgid="8261939882838881194">"Bheka ngqo kakhulu kufoni yakho"</string>
     <string name="face_acquired_obscured" msgid="4917643294953326639">"Susa noma yini efihle ubuso bakho."</string>
     <string name="face_acquired_sensor_dirty" msgid="8968391891086721678">"Hlanza okuphezulu kwesikrini sakho, kufaka phakathi ibha emnyama"</string>
-    <string name="face_acquired_dark_glasses_detected" msgid="7263638432128692048">"Ubuso bakho kufanele bubonakale ngokugcwele"</string>
-    <string name="face_acquired_mouth_covering_detected" msgid="615991670821926847">"Ubuso bakho kufanele bubonakale ngokugcwele"</string>
+    <!-- no translation found for face_acquired_dark_glasses_detected (5643703296620631986) -->
+    <skip />
+    <!-- no translation found for face_acquired_mouth_covering_detected (8219428572168642593) -->
+    <skip />
     <string name="face_acquired_recalibrate_alt" msgid="5702674220280332115">"Ayikwazi ukusungula imodeli yobuso bakho. Zama futhi."</string>
     <string name="face_acquired_dark_glasses_detected_alt" msgid="4052123776406041972">"Kutholwe izibuko ezimnyama. Ubuso bakho kufanele bubonakale ngokugcwele."</string>
     <string name="face_acquired_mouth_covering_detected_alt" msgid="1122294982850589766">"Kutholwe ukumbozwa kobuso. Ubuso bakho kufanele bubonakale ngokugcwele."</string>
@@ -1941,18 +1944,23 @@
     <string name="app_streaming_blocked_title_for_camera_dialog" msgid="3935701653713853065">"Ikhamera ayitholakali"</string>
     <string name="app_streaming_blocked_title_for_fingerprint_dialog" msgid="3516853717714141951">"Qhubeka kufoni"</string>
     <string name="app_streaming_blocked_title_for_microphone_dialog" msgid="544822455127171206">"Imakrofoni ayitholakali"</string>
+    <!-- no translation found for app_streaming_blocked_title_for_playstore_dialog (8149823099822897538) -->
+    <skip />
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv" msgid="196994247017450357">"Amasethingi e-Android TV awatholakali"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tablet" msgid="8222710146267948647">"Amasethingi ethebulethi awatholakali"</string>
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default" msgid="6895719984375299791">"Amasethingi efoni awatholakali"</string>
-    <string name="app_streaming_blocked_message" product="tv" msgid="5024599278277957935">"Lokhu akukwazi ukufinyelelwa ku-<xliff:g id="DEVICE">%1$s</xliff:g> yakho. Zama kudivayisi yakho ye-Android TV kunalokho."</string>
-    <string name="app_streaming_blocked_message" product="tablet" msgid="7491114163056552686">"Lokhu akukwazi ukufinyelelwa ku-<xliff:g id="DEVICE">%1$s</xliff:g> yakho. Zama kuthebhulethi yakho kunalokho."</string>
-    <string name="app_streaming_blocked_message" product="default" msgid="1245180131667647277">"Lokhu akukwazi ukufinyelelwa ku-<xliff:g id="DEVICE">%1$s</xliff:g> yakho. Zama efonini yakho kunalokho."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv" msgid="6306583663205997979">"Lokhu akukwazi ukufinyelelwa ku-<xliff:g id="DEVICE">%1$s</xliff:g> yakho ngalesi sikhathi. Zama kudivayisi yakho ye-Android TV kunalokho."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet" msgid="6545624942642129664">"Lokhu akukwazi ukufinyelelwa ku-<xliff:g id="DEVICE">%1$s</xliff:g> yakho ngalesi sikhathi. Zama kuthebhulethi yakho kunalokho."</string>
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default" msgid="8462740631707923000">"Lokhu akukwazi ukufinyelelwa ku-<xliff:g id="DEVICE">%1$s</xliff:g> yakho ngalesi sikhathi. Zama efonini yakho kunalokho."</string>
+    <string name="app_streaming_blocked_message" product="tv" msgid="4003011766528814377">"Lokhu akukwazi ukufinyelelwa ku-<xliff:g id="DEVICE">%1$s</xliff:g> yakho ngalesi sikhathi. Zama kudivayisi yakho ye-Android TV kunalokho."</string>
+    <string name="app_streaming_blocked_message" product="tablet" msgid="4242053045964946062">"Lokhu akukwazi ukufinyelelwa ku-<xliff:g id="DEVICE">%1$s</xliff:g> yakho ngalesi sikhathi. Zama kuthebhulethi yakho kunalokho."</string>
+    <string name="app_streaming_blocked_message" product="default" msgid="6159168735030739398">"Lokhu akukwazi ukufinyelelwa ku-<xliff:g id="DEVICE">%1$s</xliff:g> yakho ngalesi sikhathi. Zama efonini yakho kunalokho."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv" msgid="3470977315395784567">"Le app icela ukuvikeleka okwengeziwe. Zama kudivayisi yakho ye-Android TV kunalokho."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet" msgid="698460091901465092">"Le app icela ukuvikeleka okwengeziwe. Zama kuthebhulethi yakho kunalokho."</string>
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default" msgid="8552691971910603907">"Le app icela ukuvikeleka okwengeziwe. Zama efonini yakho kunalokho."</string>
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (820334666354451145) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (3286849551133045896) -->
+    <skip />
+    <!-- no translation found for app_streaming_blocked_message_for_settings_dialog (6264287556598916295) -->
+    <skip />
     <string name="deprecated_target_sdk_message" msgid="5203207875657579953">"Lolu hlelo lokusebenza belakhelwe inguqulo endala ye-Android futhi kungenzeka lungasebenzi kahle. Zama ukuhlolela izibuyekezo, noma uxhumane nonjiniyela."</string>
     <string name="deprecated_target_sdk_app_store" msgid="8456784048558808909">"Hlola izibuyekezo"</string>
     <string name="new_sms_notification_title" msgid="6528758221319927107">"Unemilayezo emisha"</string>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index d2f31b0..515ea50 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -2422,6 +2422,15 @@
         <!--  When closing the current activity, this is the animation that is
               run on the current activity (which is exiting the screen). -->
         <attr name="activityCloseExitAnimation" format="reference" />
+        <!--  When closing a dream activity, this is the animation that is
+              run on the dream activity (which is exiting the screen). -->
+        <attr name="dreamActivityCloseExitAnimation" format="reference" />
+        <!--  When opening a dream activity, this is the animation that is
+              run on the dream activity (which is entering the screen). -->
+        <attr name="dreamActivityOpenEnterAnimation" format="reference" />
+        <!--  When opening a dream activity, this is the animation that is
+              run on the old activity (which is exiting the screen). -->
+        <attr name="dreamActivityOpenExitAnimation" format="reference" />
         <!--  When opening an activity in a new task, this is the animation that is
               run on the activity of the new task (which is entering the screen). -->
         <attr name="taskOpenEnterAnimation" format="reference" />
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index 7562b9a..a62f6ad 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -3602,4 +3602,19 @@
              false, the application cannot be profiled at all. Defaults to true. -->
         <attr name="enabled" format="boolean" />
     </declare-styleable>
+
+    <!-- <code>install-constraints</code> tag rejects installs unless one the constraints defined by
+         its child elements is true.
+         It is possible to have multiple <code>install-constraints</code> tags in a single manifest,
+         where each tag is evaluated independently.
+         @hide -->
+    <declare-styleable name="AndroidManifestInstallConstraints" parent="AndroidManifest" />
+
+    <!-- A constraint for <code>install-constraints</code>. Checks that the device fingerprint
+         starts with the given prefix.
+         @hide -->
+    <declare-styleable name="AndroidManifestInstallConstraintsFingerprintPrefix"
+                       parent="AndroidManifestInstallConstraints">
+        <attr name="value" />
+    </declare-styleable>
 </resources>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 31229e9..d13bc87 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -757,6 +757,15 @@
          bar for all apps. -->
     <bool name="config_remoteInsetsControllerControlsSystemBars">false</bool>
 
+    <!-- Control whether the system bars can be requested when using a remote insets control target.
+         This allows for specifying whether or not system bars can be shown by the user (via swipe
+         or other means) when they are hidden by the logic defined by the remote insets controller.
+         This is useful for cases where the system provides alternative affordances for showing and
+         hiding the bars or for cases in which it's desired the bars not be shown for any reason.
+         This configuration will only apply when config_remoteInsetsControllerControlsSystemBars.
+         is set to true. -->
+    <bool name="config_remoteInsetsControllerSystemBarsCanBeShownByUserAction">false</bool>
+
     <!-- HDMI behavior -->
 
     <!-- The number of degrees to rotate the display when the device has HDMI connected
@@ -2030,6 +2039,10 @@
          STREAM_MUSIC as if it's on TV platform. -->
     <bool name="config_single_volume">false</bool>
 
+    <!-- Flag indicating whether notification and ringtone volumes
+         are controlled together (aliasing is true) or not. -->
+    <bool name="config_alias_ring_notif_stream_types">true</bool>
+
     <!-- Flag indicating whether platform level volume adjustments are enabled for remote sessions
          on grouped devices. -->
     <bool name="config_volumeAdjustmentForRemoteGroupSessions">true</bool>
@@ -3494,6 +3507,22 @@
     <!-- Specify if the fingerprint hardware support gestures-->
     <bool name="config_fingerprintSupportsGestures">false</bool>
 
+    <!-- The time (in millis) to wait for a power button before sending
+         a successful auth in biometric prompt(for side fingerprint) -->
+    <integer name="config_sidefpsBpPowerPressWindow">300</integer>
+
+    <!-- The time (in millis) to wait for a power button before sending a
+         successful auth in to keyguard(for side fingerprint) -->
+    <integer name="config_sidefpsKeyguardPowerPressWindow">300</integer>
+
+    <!-- The time (in millis) that a power event will ignore future authentications
+         (for side fingerprint) -->
+    <integer name="config_sidefpsPostAuthDowntime">400</integer>
+
+    <!-- The time (in millis) that a finger tap will wait for a power button
+         before dismissing the power dialog during enrollment(for side fingerprint) -->
+    <integer name="config_sidefpsEnrollPowerPressWindow">300</integer>
+
     <!-- This config is used to force VoiceInteractionService to start on certain low ram devices.
          It declares the package name of VoiceInteractionService that should be started. -->
     <string translatable="false" name="config_forceVoiceInteractionServicePackage"></string>
@@ -3755,6 +3784,9 @@
          "Guest" and "Reset guest". -->
     <bool name="config_guestUserAutoCreated">false</bool>
 
+    <!-- If true, owner can change guest user ephemeral state via UI option -->
+    <bool name="config_guestUserAllowEphemeralStateChange">true</bool>
+
     <!-- Enforce strong auth on boot. Setting this to false represents a security risk and should
          not be ordinarily done. The only case in which this might be permissible is in a car head
          unit where there are hardware mechanisms to protect the device (physical keys) and not
@@ -4367,6 +4399,9 @@
     <!-- Name of a font family to use for medium body text. -->
     <string name="config_bodyFontFamilyMedium" translatable="false">sans-serif-medium</string>
 
+    <!-- Name of the font family to use in the default lockscreen clock -->
+    <string name="config_clockFontFamily" translatable="false">monospace</string>
+
     <!-- Size of icon shown beside a preference locked by admin -->
     <dimen name="config_restrictedIconSize">@dimen/restricted_icon_size_material</dimen>
 
@@ -5133,16 +5168,24 @@
      -->
     <color name="config_letterboxBackgroundColor">@android:color/system_neutral2_900</color>
 
-    <!-- Horizonal position of a center of the letterboxed app window.
+    <!-- Horizontal position of a center of the letterboxed app window.
         0 corresponds to the left side of the screen and 1 to the right side. If given value < 0
-        or > 1, it is ignored and central positionis used (0.5). -->
+        or > 1, it is ignored and central position is used (0.5). -->
     <item name="config_letterboxHorizontalPositionMultiplier" format="float" type="dimen">0.5</item>
 
-    <!-- Whether reachability repositioning is allowed for letterboxed fullscreen apps in landscape
-        device orientation. -->
-    <bool name="config_letterboxIsReachabilityEnabled">false</bool>
+    <!-- Vertical position of a center of the letterboxed app window.
+        0 corresponds to the upper side of the screen and 1 to the lower side. If given value < 0
+        or > 1, it is ignored and central position is used (0.5). -->
+    <item name="config_letterboxVerticalPositionMultiplier" format="float" type="dimen">0.5</item>
 
-    <!-- Default horizonal position of the letterboxed app window when reachability is
+    <!-- Whether horizontal reachability repositioning is allowed for letterboxed fullscreen apps.
+    -->
+    <bool name="config_letterboxIsHorizontalReachabilityEnabled">false</bool>
+
+    <!-- Whether vertical reachability repositioning is allowed for letterboxed fullscreen apps. -->
+    <bool name="config_letterboxIsVerticalReachabilityEnabled">false</bool>
+
+    <!-- Default horizontal position of the letterboxed app window when reachability is
         enabled and an app is fullscreen in landscape device orientation. When reachability is
         enabled, the position can change between left, center and right. This config defines the
         default one:
@@ -5150,11 +5193,30 @@
             - Option 1 - Center.
             - Option 2 - Right.
         If given value is outside of this range, the option 1 (center) is assummed. -->
-    <integer name="config_letterboxDefaultPositionForReachability">1</integer>
+    <integer name="config_letterboxDefaultPositionForHorizontalReachability">1</integer>
+
+    <!-- Default vertical position of the letterboxed app window when reachability is
+        enabled and an app is fullscreen in portrait device orientation. When reachability is
+        enabled, the position can change between top, center and bottom. This config defines the
+        default one:
+            - Option 0 - Top.
+            - Option 1 - Center.
+            - Option 2 - Bottom.
+        If given value is outside of this range, the option 1 (center) is assummed. -->
+    <integer name="config_letterboxDefaultPositionForVerticalReachability">1</integer>
 
     <!-- Whether displaying letterbox education is enabled for letterboxed fullscreen apps. -->
     <bool name="config_letterboxIsEducationEnabled">false</bool>
 
+    <!-- Default min aspect ratio for unresizable apps which are eligible for size compat mode.
+         Values <= 1.0 will be ignored. Activity min/max aspect ratio restrictions will still be
+         espected so this override can control the maximum screen area that can be occupied by
+         the app in the letterbox mode. -->
+    <item name="config_letterboxDefaultMinAspectRatioForUnresizableApps" format="float" type="dimen">0.0</item>
+
+    <!-- Whether using split screen aspect ratio as a default aspect ratio for unresizable apps. -->
+    <bool name="config_letterboxIsSplitScreenAspectRatioForUnresizableAppsEnabled">false</bool>
+
     <!-- Whether a camera compat controller is enabled to allow the user to apply or revert
          treatment for stretched issues in camera viewfinder. -->
     <bool name="config_isCameraCompatControlForStretchedIssuesEnabled">false</bool>
@@ -5816,4 +5878,10 @@
     <string-array name="config_serviceStateLocationAllowedPackages">
         <item>"com.android.phone"</item>
     </string-array>
+
+    <!-- Whether the wake screen on notifications feature is available. -->
+    <bool name="config_pulseOnNotificationsAvailable">true</bool>
+
+    <!-- The number of tasks to scan to get the visibility of Home -->
+    <integer name="config_maxScanTasksForHomeVisibility">10</integer>
 </resources>
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index b754100..2542268 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -684,7 +684,7 @@
 
     <!-- Lighting and shadow properties -->
     <dimen name="light_y">0dp</dimen>
-    <dimen name="light_z">600dp</dimen>
+    <dimen name="light_z">500dp</dimen>
     <dimen name="light_radius">800dp</dimen>
     <item type="dimen" format="float" name="ambient_shadow_alpha">0.039</item>
     <item type="dimen" format="float" name="spot_shadow_alpha">0.19</item>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index c6b60f5..a3b05b5 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -1751,6 +1751,8 @@
     <string name="fingerprint_error_security_update_required">Sensor temporarily disabled.</string>
     <!-- Generic error message shown when fingerprint needs calibration [CHAR LIMIT=150] -->
     <string name="fingerprint_error_bad_calibration">Can\u2019t use fingerprint sensor. Visit a repair provider</string>
+    <!-- Generic error message shown when the power button has been pressed. [CHAR LIMIT=150] -->
+    <string name="fingerprint_error_power_pressed">Power button pressed</string>
 
     <!-- Template to be used to name enrolled fingerprints by default. -->
     <string name="fingerprint_name_template">Finger <xliff:g id="fingerId" example="1">%d</xliff:g></string>
@@ -1838,9 +1840,9 @@
     <!-- Message shown during acquisition when the sensor is dirty [CHAR LIMIT=100] -->
     <string name="face_acquired_sensor_dirty">Clean the top of your screen, including the black bar</string>
     <!-- Message shown during acquisition when dark glasses were detected [CHAR LIMIT=75] -->
-    <string name="face_acquired_dark_glasses_detected">Your face must be fully visible</string>
+    <string name="face_acquired_dark_glasses_detected">@string/face_acquired_dark_glasses_detected_alt</string>
     <!-- Message shown during acquisition when a mouth covering was detected [CHAR LIMIT=75] -->
-    <string name="face_acquired_mouth_covering_detected">Your face must be fully visible</string>
+    <string name="face_acquired_mouth_covering_detected">@string/face_acquired_mouth_covering_detected_alt</string>
 
     <!-- Message shown during face acquisition when the sensor needs to be recalibrated [CHAR LIMIT=75] -->
     <string name="face_acquired_recalibrate_alt">Can\u2019t create your face model. Try again.</string>
@@ -5477,6 +5479,8 @@
     <string name="app_streaming_blocked_title_for_fingerprint_dialog">Continue on phone</string>
     <!-- Title of the dialog shown when the microphone permission is blocked from being streamed to a remote device. [CHAR LIMIT=NONE] -->
     <string name="app_streaming_blocked_title_for_microphone_dialog">Microphone unavailable</string>
+    <!-- Title of the dialog shown when the play store is blocked from being streamed to a remote device. [CHAR LIMIT=NONE] -->
+    <string name="app_streaming_blocked_title_for_playstore_dialog">Play Store unavailable</string>
     <!-- Title of the dialog shown when the settings is blocked from being streamed to a remote device. [CHAR LIMIT=NONE] -->
     <string name="app_streaming_blocked_title_for_settings_dialog" product="tv">Android TV settings unavailable</string>
     <!-- Title of the dialog shown when the settings is blocked from being streamed to a remote device. [CHAR LIMIT=NONE] -->
@@ -5484,23 +5488,23 @@
     <!-- Title of the dialog shown when the settings is blocked from being streamed to a remote device. [CHAR LIMIT=NONE] -->
     <string name="app_streaming_blocked_title_for_settings_dialog" product="default">Phone settings unavailable</string>
     <!-- Message shown when an app is blocked from being streamed to a remote device. [CHAR LIMIT=NONE] -->
-    <string name="app_streaming_blocked_message" product="tv">This can’t be accessed on your <xliff:g id="device" example="Chromebook">%1$s</xliff:g>. Try on your Android TV device instead.</string>
+    <string name="app_streaming_blocked_message" product="tv">This can’t be accessed on your <xliff:g id="device" example="Chromebook">%1$s</xliff:g> at this time. Try on your Android TV device instead.</string>
     <!-- Message shown when an app is blocked from being streamed to a remote device. [CHAR LIMIT=NONE] -->
-    <string name="app_streaming_blocked_message" product="tablet">This can’t be accessed on your <xliff:g id="device" example="Chromebook">%1$s</xliff:g>. Try on your tablet instead.</string>
+    <string name="app_streaming_blocked_message" product="tablet">This can’t be accessed on your <xliff:g id="device" example="Chromebook">%1$s</xliff:g> at this time. Try on your tablet instead.</string>
     <!-- Message shown when an app is blocked from being streamed to a remote device. [CHAR LIMIT=NONE] -->
-    <string name="app_streaming_blocked_message" product="default">This can’t be accessed on your <xliff:g id="device" example="Chromebook">%1$s</xliff:g>. Try on your phone instead.</string>
-    <!-- Message shown when an app is blocked from being streamed to a remote device. [CHAR LIMIT=NONE] -->
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tv">This can’t be accessed on your <xliff:g id="device" example="Chromebook">%1$s</xliff:g> at this time. Try on your Android TV device instead.</string>
-    <!-- Message shown when an app is blocked from being streamed to a remote device. [CHAR LIMIT=NONE] -->
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="tablet">This can’t be accessed on your <xliff:g id="device" example="Chromebook">%1$s</xliff:g> at this time. Try on your tablet instead.</string>
-    <!-- Message shown when an app is blocked from being streamed to a remote device. [CHAR LIMIT=NONE] -->
-    <string name="app_streaming_blocked_message_for_permission_dialog" product="default">This can’t be accessed on your <xliff:g id="device" example="Chromebook">%1$s</xliff:g> at this time. Try on your phone instead.</string>
+    <string name="app_streaming_blocked_message" product="default">This can’t be accessed on your <xliff:g id="device" example="Chromebook">%1$s</xliff:g> at this time. Try on your phone instead.</string>
     <!-- Message shown when the fingerprint permission is blocked from being streamed to a remote device. [CHAR LIMIT=NONE] -->
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tv">This app is requesting additional security. Try on your Android TV device instead.</string>
     <!-- Message shown when the fingerprint permission is blocked from being streamed to a remote device. [CHAR LIMIT=NONE] -->
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="tablet">This app is requesting additional security. Try on your tablet instead.</string>
     <!-- Message shown when the fingerprint permission is blocked from being streamed to a remote device. [CHAR LIMIT=NONE] -->
     <string name="app_streaming_blocked_message_for_fingerprint_dialog" product="default">This app is requesting additional security. Try on your phone instead.</string>
+    <!-- Message shown when the settings is blocked from being streamed to a remote device. [CHAR LIMIT=NONE] -->
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tv">This can’t be accessed on your <xliff:g id="device" example="Chromebook">%1$s</xliff:g>. Try on your Android TV device instead.</string>
+    <!-- Message shown when the settings is blocked from being streamed to a remote device. [CHAR LIMIT=NONE] -->
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="tablet">This can’t be accessed on your <xliff:g id="device" example="Chromebook">%1$s</xliff:g>. Try on your tablet instead.</string>
+    <!-- Message shown when the settings is blocked from being streamed to a remote device. [CHAR LIMIT=NONE] -->
+    <string name="app_streaming_blocked_message_for_settings_dialog" product="default">This can’t be accessed on your <xliff:g id="device" example="Chromebook">%1$s</xliff:g>. Try on your phone instead.</string>
 
     <!-- Message displayed in dialog when app is too old to run on this verison of android. [CHAR LIMIT=NONE] -->
     <string name="deprecated_target_sdk_message">This app was built for an older version of Android and may not work properly. Try checking for updates, or contact the developer.</string>
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index 5d17047..bad05e0 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -85,6 +85,9 @@
         <item name="activityOpenExitAnimation">@anim/activity_open_exit</item>
         <item name="activityCloseEnterAnimation">@anim/activity_close_enter</item>
         <item name="activityCloseExitAnimation">@anim/activity_close_exit</item>
+        <item name="dreamActivityCloseExitAnimation">@anim/dream_activity_close_exit</item>
+        <item name="dreamActivityOpenEnterAnimation">@anim/dream_activity_open_enter</item>
+        <item name="dreamActivityOpenExitAnimation">@anim/dream_activity_open_exit</item>
         <item name="taskOpenEnterAnimation">@anim/task_open_enter</item>
         <item name="taskOpenExitAnimation">@anim/task_open_exit</item>
         <item name="launchTaskBehindTargetAnimation">@anim/launch_task_behind_target</item>
diff --git a/core/res/res/values/styles_car.xml b/core/res/res/values/styles_car.xml
index ca3ba93..0655fde 100644
--- a/core/res/res/values/styles_car.xml
+++ b/core/res/res/values/styles_car.xml
@@ -14,96 +14,15 @@
      limitations under the License.
 -->
 <resources>
-    <!-- Car text -->
-    <style name="CarBody1">
-        <item name="textStyle">normal</item>
-        <item name="textSize">@dimen/car_body1_size</item>
-        <item name="textColor">@color/car_body1</item>
-    </style>
-
-    <style name="CarBody1.Light">
-        <item name="textColor">@color/car_body1_light</item>
-    </style>
-
-    <style name="CarBody1.Dark">
-        <item name="textColor">@color/car_body2_dark</item>
-    </style>
-
-    <style name="CarBody2">
-        <item name="textStyle">normal</item>
-        <item name="textSize">@dimen/car_body2_size</item>
-        <item name="textColor">@color/car_body2</item>
-    </style>
-
-    <style name="CarBody2.Dark">
-        <item name="textColor">@color/car_body2_dark</item>
-    </style>
-    <style name="CarBody2.Light">
-        <item name="textColor">@color/car_body2_light</item>
-    </style>
-
-    <style name="CarBody3">
-        <item name="textStyle">normal</item>
-        <item name="textSize">@dimen/car_body3_size</item>
-        <item name="textColor">@color/car_body3</item>
-    </style>
-
-    <!-- The smallest styling for body text. The color of this text changes based on the day/night
-         mode. -->
-    <style name="CarBody4">
+    <!-- The Dialog message text style-->
+    <style name="CarDialogMessageText">
         <item name="textStyle">normal</item>
         <item name="textSize">@dimen/car_body4_size</item>
         <item name="textColor">@color/car_body4</item>
     </style>
-
-    <style name="CarAction1">
-        <item name="textStyle">bold</item>
-        <item name="textSize">@dimen/car_action1_size</item>
-        <item name="textColor">@color/control_default_material</item>
-    </style>
-
-    <style name="CarAction1.Dark">
-        <item name="textColor">@color/car_highlight_dark</item>
-    </style>
-    <style name="CarAction1.Light">
-        <item name="textColor">@color/car_highlight_light</item>
-    </style>
-
-    <!-- The styling for title text. The color of this text changes based on day/night mode. -->
-    <style name="CarTitle" >
-        <item name="textStyle">bold</item>
-        <item name="textSize">@dimen/car_title2_size</item>
-        <item name="textColor">@color/car_title</item>
-    </style>
-
-    <!-- Title text that is permanently a dark color. -->
-    <style name="CarTitle.Dark" >
-        <item name="textColor">@color/car_title_dark</item>
-    </style>
-
-    <!-- Title text that is permanently a light color. -->
-    <style name="CarTitle.Light" >
-        <item name="textColor">@color/car_title_light</item>
-    </style>
-
-    <!-- Action bar -->
-    <style name="ActionBarTitle" parent="@style/Widget.DeviceDefault.TextView">
-        <item name="android:singleLine">true</item>
-        <item name="android:textAppearance">?attr/textAppearanceLarge</item>
-    </style>
-
-    <style name="ActionBarButton"
-           parent="@style/Widget.DeviceDefault.Button.Borderless.Colored">
-        <item name="android:textAppearance">@style/ActionBarButtonTextAppearance</item>
-        <!-- Button's internal horizontal padding -->
-        <item name="android:paddingStart">@*android:dimen/car_padding_3</item>
-        <item name="android:paddingEnd">@*android:dimen/car_padding_3</item>
-        <item name="android:drawablePadding">@*android:dimen/car_padding_2</item>
-        <item name="android:maxWidth">@*android:dimen/action_bar_button_max_width</item>
-    </style>
-
-    <style name="ActionBarButtonTextAppearance"
-           parent="@style/TextAppearance.DeviceDefault.Widget.Button.Borderless.Colored">
-        <item name="android:textAllCaps">false</item>
+    <!-- This style makes Dialog button text use medium font weight.  -->
+    <style name="CarDialogButtonText">
+        <item name="android:textAppearance">@style/TextAppearance.DeviceDefault.Widget.Button</item>
+        <item name="android:textColor">@color/control_default_material</item>
     </style>
 </resources>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index a8258118..d7484c7 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -273,6 +273,7 @@
   <java-symbol type="attr" name="autofillSaveCustomSubtitleMaxHeight"/>
   <java-symbol type="bool" name="action_bar_embed_tabs" />
   <java-symbol type="bool" name="action_bar_expanded_action_views_exclusive" />
+  <java-symbol type="bool" name="config_alias_ring_notif_stream_types" />
   <java-symbol type="bool" name="config_avoidGfxAccel" />
   <java-symbol type="bool" name="config_bluetooth_address_validation" />
   <java-symbol type="integer" name="config_chooser_max_targets_per_row" />
@@ -394,6 +395,7 @@
   <java-symbol type="bool" name="config_supportsInsecureLockScreen" />
   <java-symbol type="bool" name="config_guestUserEphemeral" />
   <java-symbol type="bool" name="config_guestUserAutoCreated" />
+  <java-symbol type="bool" name="config_guestUserAllowEphemeralStateChange" />
   <java-symbol type="bool" name="config_localDisplaysMirrorContent" />
   <java-symbol type="array" name="config_localPrivateDisplayPorts" />
   <java-symbol type="integer" name="config_defaultDisplayDefaultColorMode" />
@@ -1572,6 +1574,7 @@
   <java-symbol type="layout" name="time_picker_dialog" />
   <java-symbol type="layout" name="tooltip" />
   <java-symbol type="layout" name="transient_notification" />
+  <java-symbol type="layout" name="transient_notification_with_icon" />
   <java-symbol type="layout" name="voice_interaction_session" />
   <java-symbol type="layout" name="web_text_view_dropdown" />
   <java-symbol type="layout" name="webview_find" />
@@ -1704,6 +1707,10 @@
   <java-symbol type="anim" name="task_fragment_close_exit" />
   <java-symbol type="anim" name="task_fragment_open_enter" />
   <java-symbol type="anim" name="task_fragment_open_exit" />
+  <java-symbol type="anim" name="task_fragment_clear_top_close_enter" />
+  <java-symbol type="anim" name="task_fragment_clear_top_close_exit" />
+  <java-symbol type="anim" name="task_fragment_clear_top_open_enter" />
+  <java-symbol type="anim" name="task_fragment_clear_top_open_exit" />
 
   <java-symbol type="array" name="config_autoRotationTiltTolerance" />
   <java-symbol type="array" name="config_longPressVibePattern" />
@@ -1725,6 +1732,7 @@
   <java-symbol type="bool" name="config_enableLockBeforeUnlockScreen" />
   <java-symbol type="bool" name="config_enableLockScreenRotation" />
   <java-symbol type="bool" name="config_remoteInsetsControllerControlsSystemBars" />
+  <java-symbol type="bool" name="config_remoteInsetsControllerSystemBarsCanBeShownByUserAction" />
   <java-symbol type="bool" name="config_lidControlsScreenLock" />
   <java-symbol type="bool" name="config_lidControlsSleep" />
   <java-symbol type="bool" name="config_lockDayNightMode" />
@@ -2615,10 +2623,15 @@
   <java-symbol type="string" name="fingerprint_recalibrate_notification_name" />
   <java-symbol type="string" name="fingerprint_recalibrate_notification_title" />
   <java-symbol type="string" name="fingerprint_recalibrate_notification_content" />
+  <java-symbol type="string" name="fingerprint_error_power_pressed" />
 
   <!-- Fingerprint config -->
   <java-symbol type="integer" name="config_fingerprintMaxTemplatesPerUser"/>
   <java-symbol type="bool" name="config_fingerprintSupportsGestures"/>
+  <java-symbol type="integer" name="config_sidefpsBpPowerPressWindow"/>
+  <java-symbol type="integer" name="config_sidefpsKeyguardPowerPressWindow"/>
+  <java-symbol type="integer" name="config_sidefpsPostAuthDowntime"/>
+  <java-symbol type="integer" name="config_sidefpsEnrollPowerPressWindow"/>
 
   <!-- Face authentication messages -->
   <java-symbol type="string" name="face_recalibrate_notification_name" />
@@ -3297,10 +3310,11 @@
   <java-symbol type="string" name="app_streaming_blocked_title_for_camera_dialog" />
   <java-symbol type="string" name="app_streaming_blocked_title_for_fingerprint_dialog" />
   <java-symbol type="string" name="app_streaming_blocked_title_for_microphone_dialog" />
+  <java-symbol type="string" name="app_streaming_blocked_title_for_playstore_dialog" />
   <java-symbol type="string" name="app_streaming_blocked_title_for_settings_dialog" />
   <java-symbol type="string" name="app_streaming_blocked_message" />
-  <java-symbol type="string" name="app_streaming_blocked_message_for_permission_dialog" />
   <java-symbol type="string" name="app_streaming_blocked_message_for_fingerprint_dialog" />
+  <java-symbol type="string" name="app_streaming_blocked_message_for_settings_dialog" />
 
   <!-- Used internally for assistant to launch activity transitions -->
   <java-symbol type="id" name="cross_task_transition" />
@@ -3336,6 +3350,7 @@
   <java-symbol type="string" name="config_dozeTapSensorType" />
   <java-symbol type="array" name="config_dozeTapSensorPostureMapping" />
   <java-symbol type="bool" name="config_dozePulsePickup" />
+  <java-symbol type="bool" name="config_pulseOnNotificationsAvailable" />
 
   <!-- Used for MimeIconUtils. -->
   <java-symbol type="drawable" name="ic_doc_apk" />
@@ -3963,6 +3978,8 @@
 
   <java-symbol type="string" name="config_customCountryDetector" />
 
+  <java-symbol type="integer" name="config_maxScanTasksForHomeVisibility" />
+
   <!-- For Foldables -->
   <java-symbol type="array" name="config_foldedDeviceStates" />
   <java-symbol type="array" name="config_deviceStatesOnWhichToWakeUp" />
@@ -4387,9 +4404,14 @@
   <java-symbol type="integer" name="config_letterboxBackgroundType" />
   <java-symbol type="color" name="config_letterboxBackgroundColor" />
   <java-symbol type="dimen" name="config_letterboxHorizontalPositionMultiplier" />
-  <java-symbol type="bool" name="config_letterboxIsReachabilityEnabled" />
-  <java-symbol type="integer" name="config_letterboxDefaultPositionForReachability" />
+  <java-symbol type="dimen" name="config_letterboxVerticalPositionMultiplier" />
+  <java-symbol type="bool" name="config_letterboxIsHorizontalReachabilityEnabled" />
+  <java-symbol type="bool" name="config_letterboxIsVerticalReachabilityEnabled" />
+  <java-symbol type="integer" name="config_letterboxDefaultPositionForHorizontalReachability" />
+  <java-symbol type="integer" name="config_letterboxDefaultPositionForVerticalReachability" />
   <java-symbol type="bool" name="config_letterboxIsEducationEnabled" />
+  <java-symbol type="dimen" name="config_letterboxDefaultMinAspectRatioForUnresizableApps" />
+  <java-symbol type="bool" name="config_letterboxIsSplitScreenAspectRatioForUnresizableAppsEnabled" />
   <java-symbol type="bool" name="config_isCameraCompatControlForStretchedIssuesEnabled" />
 
   <java-symbol type="bool" name="config_hideDisplayCutoutWithDisplayArea" />
diff --git a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java
index bfb2fd5..a2d4baf 100644
--- a/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java
+++ b/core/tests/coretests/src/android/app/activity/ActivityThreadTest.java
@@ -31,7 +31,6 @@
 
 import android.annotation.Nullable;
 import android.app.Activity;
-import android.app.ActivityManager;
 import android.app.ActivityThread;
 import android.app.ActivityThread.ActivityClientRecord;
 import android.app.IApplicationThread;
@@ -571,53 +570,6 @@
     }
 
     @Test
-    public void testHandleProcessConfigurationChanged_DependOnProcessState() {
-        final ActivityThread activityThread = ActivityThread.currentActivityThread();
-        final Configuration origConfig = activityThread.getConfiguration();
-        final int newDpi = origConfig.densityDpi + 10;
-        final Configuration newConfig = new Configuration(origConfig);
-        newConfig.seq++;
-        newConfig.densityDpi = newDpi;
-
-        activityThread.updateProcessState(ActivityManager.PROCESS_STATE_CACHED_ACTIVITY,
-                false /* fromIPC */);
-
-        applyProcessConfiguration(activityThread, newConfig);
-        try {
-            // In the cached state, the configuration is only set as pending and not applied.
-            assertEquals(origConfig.densityDpi, activityThread.getConfiguration().densityDpi);
-            assertTrue(activityThread.isCachedProcessState());
-        } finally {
-            // The foreground state is the default state of instrumentation.
-            activityThread.updateProcessState(ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE,
-                    false /* fromIPC */);
-        }
-        InstrumentationRegistry.getInstrumentation().waitForIdleSync();
-
-        try {
-            // The state becomes non-cached, the pending configuration should be applied.
-            assertEquals(newConfig.densityDpi, activityThread.getConfiguration().densityDpi);
-            assertFalse(activityThread.isCachedProcessState());
-        } finally {
-            // Restore to the original configuration.
-            activityThread.getConfiguration().seq = origConfig.seq - 1;
-            applyProcessConfiguration(activityThread, origConfig);
-        }
-    }
-
-    private static void applyProcessConfiguration(ActivityThread thread, Configuration config) {
-        final ClientTransaction clientTransaction = newTransaction(thread,
-                null /* activityToken */);
-        clientTransaction.addCallback(ConfigurationChangeItem.obtain(config));
-        final IApplicationThread appThread = thread.getApplicationThread();
-        try {
-            appThread.scheduleTransaction(clientTransaction);
-        } catch (Exception ignored) {
-        }
-        InstrumentationRegistry.getInstrumentation().waitForIdleSync();
-    }
-
-    @Test
     public void testResumeAfterNewIntent() {
         final Activity activity = mActivityTestRule.launchActivity(new Intent());
         final ActivityThread activityThread = activity.getActivityThread();
diff --git a/core/tests/coretests/src/android/graphics/drawable/AdaptiveIconDrawableTest.java b/core/tests/coretests/src/android/graphics/drawable/AdaptiveIconDrawableTest.java
index 7338c3a..ddc05e0 100644
--- a/core/tests/coretests/src/android/graphics/drawable/AdaptiveIconDrawableTest.java
+++ b/core/tests/coretests/src/android/graphics/drawable/AdaptiveIconDrawableTest.java
@@ -204,6 +204,19 @@
         assertEquals(100, Color.alpha(bitmap.getPixel(50, 50)));
     }
 
+    @Test
+    public void testSetBounds() throws Exception {
+        mIconDrawable = new AdaptiveIconDrawable(mBackgroundDrawable, mForegroundDrawable);
+        mIconDrawable.setBounds(0, 0, 100, 100);
+
+        assertEquals(new Rect(-25, -25, 125, 125), mBackgroundDrawable.getBounds());
+        assertEquals(new Rect(-25, -25, 125, 125), mForegroundDrawable.getBounds());
+
+        mIconDrawable.setBounds(10, 10, 110, 110);
+        assertEquals(new Rect(-15, -15, 135, 135), mBackgroundDrawable.getBounds());
+        assertEquals(new Rect(-15, -15, 135, 135), mForegroundDrawable.getBounds());
+    }
+
     //
     // Utils
     //
diff --git a/core/tests/coretests/src/android/view/ImeInsetsSourceConsumerTest.java b/core/tests/coretests/src/android/view/ImeInsetsSourceConsumerTest.java
index 34a1fd8..44bb062 100644
--- a/core/tests/coretests/src/android/view/ImeInsetsSourceConsumerTest.java
+++ b/core/tests/coretests/src/android/view/ImeInsetsSourceConsumerTest.java
@@ -92,7 +92,7 @@
     @Test
     public void testImeVisibility() {
         final InsetsSourceControl ime =
-                new InsetsSourceControl(ITYPE_IME, mLeash, new Point(), Insets.NONE);
+                new InsetsSourceControl(ITYPE_IME, mLeash, false, new Point(), Insets.NONE);
         mController.onControlsChanged(new InsetsSourceControl[] { ime });
 
         InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
@@ -121,7 +121,7 @@
 
             // set control and verify visibility is applied.
             InsetsSourceControl control =
-                    new InsetsSourceControl(ITYPE_IME, mLeash, new Point(), Insets.NONE);
+                    new InsetsSourceControl(ITYPE_IME, mLeash, false, new Point(), Insets.NONE);
             mController.onControlsChanged(new InsetsSourceControl[] { control });
             // IME show animation should be triggered when control becomes available.
             verify(mController).applyAnimation(
@@ -158,7 +158,7 @@
 
             // set control and verify visibility is applied.
             InsetsSourceControl control = Mockito.spy(
-                    new InsetsSourceControl(ITYPE_IME, mLeash, new Point(), Insets.NONE));
+                    new InsetsSourceControl(ITYPE_IME, mLeash, false, new Point(), Insets.NONE));
             // Simulate IME source control set this flag when the target has starting window.
             control.setSkipAnimationOnce(true);
 
diff --git a/core/tests/coretests/src/android/view/InsetsAnimationControlImplTest.java b/core/tests/coretests/src/android/view/InsetsAnimationControlImplTest.java
index 4f1da1b2..d0f7fe04 100644
--- a/core/tests/coretests/src/android/view/InsetsAnimationControlImplTest.java
+++ b/core/tests/coretests/src/android/view/InsetsAnimationControlImplTest.java
@@ -95,12 +95,13 @@
                 () -> mMockTransaction, mMockController);
         topConsumer.setControl(
                 new InsetsSourceControl(
-                        ITYPE_STATUS_BAR, mTopLeash, new Point(0, 0), Insets.of(0, 100, 0, 0)),
+                        ITYPE_STATUS_BAR, mTopLeash, true, new Point(0, 0),
+                        Insets.of(0, 100, 0, 0)),
                 new int[1], new int[1]);
 
         InsetsSourceConsumer navConsumer = new InsetsSourceConsumer(ITYPE_NAVIGATION_BAR,
                 mInsetsState, () -> mMockTransaction, mMockController);
-        navConsumer.setControl(new InsetsSourceControl(ITYPE_NAVIGATION_BAR, mNavLeash,
+        navConsumer.setControl(new InsetsSourceControl(ITYPE_NAVIGATION_BAR, mNavLeash, true,
                 new Point(400, 0), Insets.of(0, 0, 100, 0)), new int[1], new int[1]);
         navConsumer.hide();
 
diff --git a/core/tests/coretests/src/android/view/InsetsControllerTest.java b/core/tests/coretests/src/android/view/InsetsControllerTest.java
index c504f0c..ed6a649 100644
--- a/core/tests/coretests/src/android/view/InsetsControllerTest.java
+++ b/core/tests/coretests/src/android/view/InsetsControllerTest.java
@@ -214,19 +214,23 @@
     }
 
     @Test
-    public void testFrameDoesntMatchDisplay() {
-        mController.onFrameChanged(new Rect(0, 0, 100, 100));
-        mController.getState().setDisplayFrame(new Rect(0, 0, 200, 200));
-        InsetsSourceControl control =
-                new InsetsSourceControl(
-                        ITYPE_STATUS_BAR, mLeash, new Point(), Insets.of(0, 10, 0, 0));
-        mController.onControlsChanged(new InsetsSourceControl[] { control });
+    public void testFrameDoesntOverlapWithInsets() {
         WindowInsetsAnimationControlListener controlListener =
                 mock(WindowInsetsAnimationControlListener.class);
-        mController.controlWindowInsetsAnimation(0, 0 /* durationMs */, new LinearInterpolator(),
-                new CancellationSignal(), controlListener);
-        mController.addOnControllableInsetsChangedListener(
-                (controller, typeMask) -> assertEquals(0, typeMask));
+        InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
+            //  The frame doesn't overlap with status bar.
+            mController.onFrameChanged(new Rect(0, 10, 100, 100));
+
+            InsetsSourceControl control =
+                    new InsetsSourceControl(
+                            ITYPE_STATUS_BAR, mLeash, true, new Point(), Insets.of(0, 10, 0, 0));
+            mController.onControlsChanged(new InsetsSourceControl[]{control});
+            mController.controlWindowInsetsAnimation(0, 0 /* durationMs */,
+                    new LinearInterpolator(),
+                    new CancellationSignal(), controlListener);
+            mController.addOnControllableInsetsChangedListener(
+                    (controller, typeMask) -> assertEquals(0, typeMask));
+        });
         verify(controlListener).onCancelled(null);
         verify(controlListener, never()).onReady(any(), anyInt());
     }
@@ -922,7 +926,8 @@
         // Simulate binder behavior by copying SurfaceControl. Otherwise, InsetsController will
         // attempt to release mLeash directly.
         SurfaceControl copy = new SurfaceControl(mLeash, "InsetsControllerTest.createControl");
-        return new InsetsSourceControl(type, copy, new Point(), Insets.NONE);
+        return new InsetsSourceControl(type, copy, InsetsState.getDefaultVisibility(type),
+                new Point(), Insets.NONE);
     }
 
     private InsetsSourceControl[] createSingletonControl(@InternalInsetsType int type) {
diff --git a/core/tests/coretests/src/android/view/InsetsSourceConsumerTest.java b/core/tests/coretests/src/android/view/InsetsSourceConsumerTest.java
index b3aa7e8..2054b4f 100644
--- a/core/tests/coretests/src/android/view/InsetsSourceConsumerTest.java
+++ b/core/tests/coretests/src/android/view/InsetsSourceConsumerTest.java
@@ -110,7 +110,8 @@
         instrumentation.waitForIdleSync();
 
         mConsumer.setControl(
-                new InsetsSourceControl(ITYPE_STATUS_BAR, mLeash, new Point(), Insets.NONE),
+                new InsetsSourceControl(ITYPE_STATUS_BAR, mLeash, true /* initialVisible */,
+                        new Point(), Insets.NONE),
                 new int[1], new int[1]);
     }
 
@@ -180,7 +181,8 @@
             verifyZeroInteractions(mMockTransaction);
             int[] hideTypes = new int[1];
             mConsumer.setControl(
-                    new InsetsSourceControl(ITYPE_STATUS_BAR, mLeash, new Point(), Insets.NONE),
+                    new InsetsSourceControl(ITYPE_STATUS_BAR, mLeash, true /* initialVisible */,
+                            new Point(), Insets.NONE),
                     new int[1], hideTypes);
             assertEquals(statusBars(), hideTypes[0]);
             assertFalse(mRemoveSurfaceCalled);
@@ -191,14 +193,14 @@
     public void testRestore_noAnimation() {
         InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
             mConsumer.hide();
-            mController.onStateChanged(mState);
             mConsumer.setControl(null, new int[1], new int[1]);
             reset(mMockTransaction);
             verifyZeroInteractions(mMockTransaction);
             mRemoveSurfaceCalled = false;
             int[] hideTypes = new int[1];
             mConsumer.setControl(
-                    new InsetsSourceControl(ITYPE_STATUS_BAR, mLeash, new Point(), Insets.NONE),
+                    new InsetsSourceControl(ITYPE_STATUS_BAR, mLeash, false /* initialVisible */,
+                            new Point(), Insets.NONE),
                     new int[1], hideTypes);
             assertTrue(mRemoveSurfaceCalled);
             assertEquals(0, hideTypes[0]);
diff --git a/core/tests/coretests/src/android/widget/TextViewTest.java b/core/tests/coretests/src/android/widget/TextViewTest.java
index 47ce2d8..cc4fbab 100644
--- a/core/tests/coretests/src/android/widget/TextViewTest.java
+++ b/core/tests/coretests/src/android/widget/TextViewTest.java
@@ -304,6 +304,23 @@
         assertFalse(mTextView.isCursorVisible());
     }
 
+    @Test(expected = NullPointerException.class)
+    @UiThreadTest
+    public void setTextCharArrayNullThrows() {
+        mTextView = new TextView(mActivity);
+        mTextView.setText((char[]) null, 0, 0);
+    }
+
+    @Test
+    @UiThreadTest
+    public void setTextCharArrayValidAfterSetTextString() {
+        mTextView = new TextView(mActivity);
+        mTextView.setText(new char[] { 'h', 'i'}, 0, 2);
+        CharSequence charWrapper = mTextView.getText();
+        mTextView.setText("null out char wrapper");
+        assertEquals("hi", charWrapper.toString());
+    }
+
     private String createLongText() {
         int size = 600 * 1000;
         final StringBuilder builder = new StringBuilder(size);
diff --git a/core/tests/coretests/src/android/window/BackNavigationTest.java b/core/tests/coretests/src/android/window/BackNavigationTest.java
index ce69f12..bbbc423 100644
--- a/core/tests/coretests/src/android/window/BackNavigationTest.java
+++ b/core/tests/coretests/src/android/window/BackNavigationTest.java
@@ -91,7 +91,8 @@
     private void assertCallbackIsCalled(CountDownLatch latch) {
         try {
             mInstrumentation.getUiAutomation().waitForIdle(500, 1000);
-            BackNavigationInfo info = ActivityTaskManager.getService().startBackNavigation(true);
+            BackNavigationInfo info = ActivityTaskManager.getService()
+                    .startBackNavigation(true, null);
             assertNotNull("BackNavigationInfo is null", info);
             assertNotNull("OnBackInvokedCallback is null", info.getOnBackInvokedCallback());
             info.getOnBackInvokedCallback().onBackInvoked();
diff --git a/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java b/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java
index b38e1c2..e8c7ce0 100644
--- a/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java
+++ b/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java
@@ -84,17 +84,23 @@
 import android.view.View;
 
 import androidx.annotation.CallSuper;
+import androidx.test.espresso.matcher.BoundedDiagnosingMatcher;
 import androidx.test.platform.app.InstrumentationRegistry;
 import androidx.test.rule.ActivityTestRule;
 
+import com.android.internal.R;
 import com.android.internal.app.ResolverActivity.ResolvedComponentInfo;
 import com.android.internal.app.chooser.DisplayResolveInfo;
 import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.internal.util.FrameworkStatsLog;
+import com.android.internal.widget.GridLayoutManager;
+import com.android.internal.widget.RecyclerView;
 
+import org.hamcrest.Description;
 import org.hamcrest.Matcher;
+import org.hamcrest.Matchers;
 import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Rule;
@@ -260,6 +266,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
         final IChooserWrapper activity = (IChooserWrapper) mActivityRule.launchActivity(
@@ -283,6 +290,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
         mActivityRule.launchActivity(Intent.createChooser(sendIntent, "chooser test"));
@@ -303,6 +311,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
         mActivityRule.launchActivity(Intent.createChooser(sendIntent, null));
@@ -323,6 +332,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
         mActivityRule.launchActivity(Intent.createChooser(sendIntent, null));
@@ -346,6 +356,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
         mActivityRule.launchActivity(Intent.createChooser(sendIntent, null));
@@ -372,6 +383,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
         mActivityRule.launchActivity(Intent.createChooser(sendIntent, null));
@@ -397,6 +409,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
         mActivityRule.launchActivity(Intent.createChooser(sendIntent, null));
@@ -418,6 +431,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
 
@@ -472,6 +486,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
 
@@ -512,6 +527,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
 
@@ -546,6 +562,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(null);
         Intent sendIntent = createSendTextIntent();
@@ -581,6 +598,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
 
@@ -643,6 +661,7 @@
         when(ChooserActivityOverrideData.getInstance().resolverListController.getResolversForIntent(
                 Mockito.anyBoolean(),
                 Mockito.anyBoolean(),
+                Mockito.anyBoolean(),
                 Mockito.isA(List.class))).thenReturn(resolvedComponentInfos);
         when(ChooserActivityOverrideData.getInstance().resolverListController.getLastChosen())
                 .thenReturn(resolvedComponentInfos.get(0).getResolveInfoAt(0));
@@ -682,6 +701,7 @@
         when(ChooserActivityOverrideData.getInstance().resolverListController.getResolversForIntent(
                 Mockito.anyBoolean(),
                 Mockito.anyBoolean(),
+                Mockito.anyBoolean(),
                 Mockito.isA(List.class))).thenReturn(resolvedComponentInfos);
 
         final IChooserWrapper activity = (IChooserWrapper)
@@ -714,6 +734,7 @@
         when(ChooserActivityOverrideData.getInstance().resolverListController.getResolversForIntent(
             Mockito.anyBoolean(),
             Mockito.anyBoolean(),
+            Mockito.anyBoolean(),
             Mockito.isA(List.class))).thenReturn(resolvedComponentInfos);
 
         final ChooserActivity activity =
@@ -741,6 +762,7 @@
         when(ChooserActivityOverrideData.getInstance().resolverListController.getResolversForIntent(
             Mockito.anyBoolean(),
             Mockito.anyBoolean(),
+            Mockito.anyBoolean(),
             Mockito.isA(List.class))).thenReturn(resolvedComponentInfos);
 
         MetricsLogger mockLogger = ChooserActivityOverrideData.getInstance().metricsLogger;
@@ -770,6 +792,7 @@
         when(ChooserActivityOverrideData.getInstance().resolverListController.getResolversForIntent(
                 Mockito.anyBoolean(),
                 Mockito.anyBoolean(),
+                Mockito.anyBoolean(),
                 Mockito.isA(List.class))).thenReturn(resolvedComponentInfos);
 
         final IChooserWrapper activity = (IChooserWrapper)
@@ -840,6 +863,7 @@
         when(ChooserActivityOverrideData.getInstance().resolverListController.getResolversForIntent(
                 Mockito.anyBoolean(),
                 Mockito.anyBoolean(),
+                Mockito.anyBoolean(),
                 Mockito.isA(List.class))).thenReturn(resolvedComponentInfos);
 
         final IChooserWrapper activity = (IChooserWrapper)
@@ -916,6 +940,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
         mActivityRule.launchActivity(Intent.createChooser(sendIntent, null));
@@ -952,6 +977,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
         mActivityRule.launchActivity(Intent.createChooser(sendIntent, null));
@@ -991,6 +1017,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
         mActivityRule.launchActivity(Intent.createChooser(sendIntent, null));
@@ -1085,6 +1112,7 @@
         when(ChooserActivityOverrideData.getInstance().resolverListController.getResolversForIntent(
             Mockito.anyBoolean(),
             Mockito.anyBoolean(),
+            Mockito.anyBoolean(),
             Mockito.isA(List.class))).thenReturn(resolvedComponentInfos);
 
         mActivityRule.launchActivity(Intent.createChooser(sendIntent, null));
@@ -1118,6 +1146,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
 
@@ -1151,6 +1180,7 @@
                     .getResolversForIntent(
                             Mockito.anyBoolean(),
                             Mockito.anyBoolean(),
+                            Mockito.anyBoolean(),
                             Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
         mActivityRule.launchActivity(Intent.createChooser(sendIntent, null));
@@ -1183,6 +1213,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
         mActivityRule.launchActivity(Intent.createChooser(sendIntent, null));
@@ -1212,6 +1243,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
 
@@ -1244,6 +1276,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
 
@@ -1278,6 +1311,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
         when(
@@ -1317,6 +1351,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
 
@@ -1359,6 +1394,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
 
@@ -1403,6 +1439,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
 
@@ -1479,6 +1516,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
 
@@ -1560,6 +1598,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
         // Create direct share target
@@ -1632,6 +1671,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
         // Create direct share target
@@ -1680,6 +1720,25 @@
                 wrapper.getAdapter().getItem(1).getDisplayLabel(), is("testTitle1"));
     }
 
+    @Test
+    public void testUpdateMaxTargetsPerRow_columnCountIsUpdated() throws InterruptedException {
+        updateMaxTargetsPerRowResource(/* targetsPerRow= */ 4);
+        givenAppTargets(/* appCount= */ 16);
+        Intent sendIntent = createSendTextIntent();
+        final ChooserActivity activity =
+                mActivityRule.launchActivity(Intent.createChooser(sendIntent, null));
+
+        updateMaxTargetsPerRowResource(/* targetsPerRow= */ 6);
+        InstrumentationRegistry.getInstrumentation()
+                .runOnMainSync(() -> activity.onConfigurationChanged(
+                        InstrumentationRegistry.getInstrumentation()
+                                .getContext().getResources().getConfiguration()));
+
+        waitForIdle();
+        onView(withIdFromRuntimeResource("resolver_list"))
+                .check(matches(withGridColumnCount(6)));
+    }
+
     // This test is too long and too slow and should not be taken as an example for future tests.
     @Test @Ignore
     public void testDirectTargetLoggingWithAppTargetNotRankedPortrait()
@@ -1720,6 +1779,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
 
@@ -2035,6 +2095,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
 
@@ -2117,6 +2178,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
 
@@ -2204,6 +2266,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
 
@@ -2273,6 +2336,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(resolvedComponentInfos);
 
@@ -2421,6 +2485,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(new ArrayList<>(personalResolvedComponentInfos));
         Intent sendIntent = createSendTextIntent();
@@ -2450,6 +2515,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(new ArrayList<>(personalResolvedComponentInfos));
         Intent sendIntent = createSendTextIntent();
@@ -2503,6 +2569,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(new ArrayList<>(personalResolvedComponentInfos));
         Intent chooserIntent = createChooserIntent(createSendTextIntent(),
@@ -2639,6 +2706,7 @@
         when(ChooserActivityOverrideData.getInstance().resolverListController.getResolversForIntent(
                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(new ArrayList<>(personalResolvedComponentInfos));
         // Create caller target which is duplicate with one of app targets
@@ -3032,6 +3100,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(new ArrayList<>(personalResolvedComponentInfos));
         when(
@@ -3041,6 +3110,7 @@
                         .getResolversForIntent(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class)))
                 .thenReturn(new ArrayList<>(workResolvedComponentInfos));
         when(
@@ -3050,6 +3120,7 @@
                         .getResolversForIntentAsUser(
                                 Mockito.anyBoolean(),
                                 Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
                                 Mockito.isA(List.class),
                                 eq(UserHandle.SYSTEM)))
                 .thenReturn(new ArrayList<>(personalResolvedComponentInfos));
@@ -3063,6 +3134,65 @@
         return withText(getRuntimeResourceId(id, "string"));
     }
 
+    private static GridRecyclerSpanCountMatcher withGridColumnCount(int columnCount) {
+        return new GridRecyclerSpanCountMatcher(Matchers.is(columnCount));
+    }
+
+    private static class GridRecyclerSpanCountMatcher extends
+            BoundedDiagnosingMatcher<View, RecyclerView> {
+
+        private final Matcher<Integer> mIntegerMatcher;
+
+        private GridRecyclerSpanCountMatcher(Matcher<Integer> integerMatcher) {
+            super(RecyclerView.class);
+            this.mIntegerMatcher = integerMatcher;
+        }
+
+        @Override
+        protected void describeMoreTo(Description description) {
+            description.appendText("RecyclerView grid layout span count to match: ");
+            this.mIntegerMatcher.describeTo(description);
+        }
+
+        @Override
+        protected boolean matchesSafely(RecyclerView view, Description mismatchDescription) {
+            int spanCount = ((GridLayoutManager) view.getLayoutManager()).getSpanCount();
+            if (this.mIntegerMatcher.matches(spanCount)) {
+                return true;
+            } else {
+                mismatchDescription.appendText("RecyclerView grid layout span count was ")
+                        .appendValue(spanCount);
+                return false;
+            }
+        }
+    }
+
+    private void givenAppTargets(int appCount) {
+        List<ResolvedComponentInfo> resolvedComponentInfos =
+                createResolvedComponentsForTest(appCount);
+        when(
+                ChooserActivityOverrideData
+                        .getInstance()
+                        .resolverListController
+                        .getResolversForIntent(
+                                Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
+                                Mockito.anyBoolean(),
+                                Mockito.isA(List.class)))
+                .thenReturn(resolvedComponentInfos);
+    }
+
+    private void updateMaxTargetsPerRowResource(int targetsPerRow) {
+        ChooserActivityOverrideData.getInstance().resources = Mockito.spy(
+                InstrumentationRegistry.getInstrumentation().getContext().getResources());
+        when(
+                ChooserActivityOverrideData
+                        .getInstance()
+                        .resources
+                        .getInteger(R.integer.config_chooser_max_targets_per_row))
+                .thenReturn(targetsPerRow);
+    }
+
     // ChooserWrapperActivity inherits from the framework ChooserActivity, so if the framework
     // resources have been updated since the framework was last built/pushed, the inherited behavior
     // (which is the focus of our testing) will still be implemented in terms of the old resource
diff --git a/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java b/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java
index 43fba52..92c05b0 100644
--- a/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java
+++ b/core/tests/coretests/src/com/android/internal/app/ResolverActivityTest.java
@@ -96,6 +96,7 @@
 
         when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(),
                 Mockito.anyBoolean(),
+                Mockito.anyBoolean(),
                 Mockito.isA(List.class))).thenReturn(resolvedComponentInfos);
 
         final ResolverWrapperActivity activity = mActivityRule.launchActivity(sendIntent);
@@ -127,6 +128,7 @@
 
         when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(),
                 Mockito.anyBoolean(),
+                Mockito.anyBoolean(),
                 Mockito.isA(List.class))).thenReturn(resolvedComponentInfos);
         waitForIdle();
 
@@ -171,6 +173,7 @@
 
         when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(),
                 Mockito.anyBoolean(),
+                Mockito.anyBoolean(),
                 Mockito.isA(List.class))).thenReturn(resolvedComponentInfos);
         waitForIdle();
 
@@ -203,6 +206,7 @@
 
         when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(),
                 Mockito.anyBoolean(),
+                Mockito.anyBoolean(),
                 Mockito.isA(List.class))).thenReturn(resolvedComponentInfos);
         when(sOverrides.resolverListController.getLastChosen())
                 .thenReturn(resolvedComponentInfos.get(0).getResolveInfoAt(0));
@@ -273,6 +277,7 @@
 
         when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(),
                 Mockito.anyBoolean(),
+                Mockito.anyBoolean(),
                 Mockito.isA(List.class))).thenReturn(resolvedComponentInfos);
 
         final ResolverWrapperActivity activity = mActivityRule.launchActivity(sendIntent);
@@ -317,6 +322,7 @@
 
         when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(),
                 Mockito.anyBoolean(),
+                Mockito.anyBoolean(),
                 Mockito.isA(List.class))).thenReturn(resolvedComponentInfos);
         when(sOverrides.resolverListController.getLastChosen())
                 .thenReturn(resolvedComponentInfos.get(1).getResolveInfoAt(0));
@@ -807,6 +813,7 @@
                 createResolvedComponentsForTestWithOtherProfile(2, /* userId */ 10);
         when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(),
                 Mockito.anyBoolean(),
+                Mockito.anyBoolean(),
                 Mockito.isA(List.class)))
                 .thenReturn(new ArrayList<>(personalResolvedComponentInfos));
         Intent sendIntent = createSendImageIntent();
@@ -831,6 +838,7 @@
                 createResolvedComponentsForTest(1);
         when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(),
                 Mockito.anyBoolean(),
+                Mockito.anyBoolean(),
                 Mockito.isA(List.class)))
                 .thenReturn(new ArrayList<>(personalResolvedComponentInfos));
         Intent sendIntent = createSendImageIntent();
@@ -888,6 +896,7 @@
 
         when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(),
                 Mockito.anyBoolean(),
+                Mockito.anyBoolean(),
                 Mockito.isA(List.class))).thenReturn(resolvedComponentInfos);
         when(sOverrides.resolverListController.getLastChosen())
                 .thenReturn(resolvedComponentInfos.get(1).getResolveInfoAt(0));
@@ -965,13 +974,16 @@
             List<ResolvedComponentInfo> workResolvedComponentInfos) {
         when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(),
                 Mockito.anyBoolean(),
+                Mockito.anyBoolean(),
                 Mockito.isA(List.class)))
                 .thenReturn(new ArrayList<>(personalResolvedComponentInfos));
         when(sOverrides.workResolverListController.getResolversForIntent(Mockito.anyBoolean(),
                 Mockito.anyBoolean(),
+                Mockito.anyBoolean(),
                 Mockito.isA(List.class))).thenReturn(workResolvedComponentInfos);
         when(sOverrides.workResolverListController.getResolversForIntentAsUser(Mockito.anyBoolean(),
                 Mockito.anyBoolean(),
+                Mockito.anyBoolean(),
                 Mockito.isA(List.class),
                 eq(UserHandle.SYSTEM)))
                 .thenReturn(new ArrayList<>(personalResolvedComponentInfos));
diff --git a/core/tests/coretests/src/com/android/internal/app/ResolverListControllerTest.java b/core/tests/coretests/src/com/android/internal/app/ResolverListControllerTest.java
index e16d448..42593f6 100644
--- a/core/tests/coretests/src/com/android/internal/app/ResolverListControllerTest.java
+++ b/core/tests/coretests/src/com/android/internal/app/ResolverListControllerTest.java
@@ -20,11 +20,14 @@
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.hasSize;
+import static org.mockito.ArgumentMatchers.intThat;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyInt;
 import static org.mockito.Matchers.anyLong;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import android.app.usage.IUsageStatsManager;
@@ -48,6 +51,7 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.ArgumentMatcher;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.mockito.invocation.InvocationOnMock;
@@ -78,6 +82,8 @@
         Configuration config = new Configuration();
         config.locale = Locale.getDefault();
         List<ResolveInfo> services = new ArrayList<>();
+        mUsm = new UsageStatsManager(mMockContext, mMockService);
+        when(mMockContext.getSystemService(Context.USAGE_STATS_SERVICE)).thenReturn(mUsm);
         when(mMockPackageManager.queryIntentServices(any(), anyInt())).thenReturn(services);
         when(mMockResources.getConfiguration()).thenReturn(config);
         when(mMockContext.getResources()).thenReturn(mMockResources);
@@ -112,8 +118,6 @@
         doAnswer(answer).when(mMockService).reportChooserSelection(
                 anyString(), anyInt(), anyString(), any(), anyString());
         when(mMockContext.getOpPackageName()).thenReturn(refererPackage);
-        mUsm = new UsageStatsManager(mMockContext, mMockService);
-        when(mMockContext.getSystemService(Context.USAGE_STATS_SERVICE)).thenReturn(mUsm);
         mController = new ResolverListController(mMockContext, mMockPackageManager, sendIntent,
                 refererPackage, UserHandle.USER_CURRENT, /* userHandle */ UserHandle.SYSTEM);
         mController.sort(new ArrayList<ResolvedComponentInfo>());
@@ -129,8 +133,6 @@
         Intent sendIntent = createSendImageIntent(annotation);
         String refererPackage = "test_referer_package";
         List<ResolvedComponentInfo> resolvedComponents = createResolvedComponentsForTest(10);
-        mUsm = new UsageStatsManager(mMockContext, mMockService);
-        when(mMockContext.getSystemService(Context.USAGE_STATS_SERVICE)).thenReturn(mUsm);
         mController = new ResolverListController(mMockContext, mMockPackageManager, sendIntent,
                 refererPackage, UserHandle.USER_CURRENT, /* userHandle */ UserHandle.SYSTEM);
         List<ResolvedComponentInfo> topKList = new ArrayList<>(resolvedComponents);
@@ -151,6 +153,102 @@
                 sortList, topKList);
     }
 
+    @Test
+    public void getResolversForIntent_usesResultsFromPackageManager() {
+        mockStats();
+        List<ResolveInfo> infos = new ArrayList<>();
+        infos.add(ResolverDataProvider.createResolveInfo(0, UserHandle.USER_CURRENT));
+        when(mMockPackageManager.queryIntentActivitiesAsUser(any(), anyInt(),
+                any(UserHandle.class))).thenReturn(infos);
+        mController = new ResolverListController(mMockContext, mMockPackageManager,
+                createSendImageIntent("test"), null, UserHandle.USER_CURRENT,
+                /* userHandle= */ UserHandle.SYSTEM);
+        List<Intent> intents = new ArrayList<>();
+        intents.add(createActionMainIntent());
+
+        List<ResolvedComponentInfo> resolvers = mController
+                .getResolversForIntent(
+                        /* shouldGetResolvedFilter= */ true,
+                        /* shouldGetActivityMetadata= */ true,
+                        /* shouldGetOnlyDefaultActivities= */ true,
+                        intents);
+
+        assertThat(resolvers, hasSize(1));
+        assertThat(resolvers.get(0).getResolveInfoAt(0), is(infos.get(0)));
+    }
+
+    @Test
+    public void getResolversForIntent_shouldGetOnlyDefaultActivitiesTrue_addsFlag() {
+        mockStats();
+        List<ResolveInfo> infos = new ArrayList<>();
+        infos.add(ResolverDataProvider.createResolveInfo(0, UserHandle.USER_CURRENT));
+        when(mMockPackageManager.queryIntentActivitiesAsUser(any(), anyInt(),
+                any(UserHandle.class))).thenReturn(infos);
+        mController = new ResolverListController(mMockContext, mMockPackageManager,
+                createSendImageIntent("test"), null, UserHandle.USER_CURRENT,
+                /* userHandle= */ UserHandle.SYSTEM);
+        List<Intent> intents = new ArrayList<>();
+        intents.add(createActionMainIntent());
+
+        mController
+                .getResolversForIntent(
+                        /* shouldGetResolvedFilter= */ true,
+                        /* shouldGetActivityMetadata= */ true,
+                        /* shouldGetOnlyDefaultActivities= */ true,
+                        intents);
+
+        verify(mMockPackageManager).queryIntentActivitiesAsUser(any(),
+                containsFlag(PackageManager.MATCH_DEFAULT_ONLY), any());
+    }
+
+    @Test
+    public void getResolversForIntent_shouldGetOnlyDefaultActivitiesFalse_doesNotAddFlag() {
+        mockStats();
+        List<ResolveInfo> infos = new ArrayList<>();
+        infos.add(ResolverDataProvider.createResolveInfo(0, UserHandle.USER_CURRENT));
+        when(mMockPackageManager.queryIntentActivitiesAsUser(any(), anyInt(),
+                any(UserHandle.class))).thenReturn(infos);
+        mController = new ResolverListController(mMockContext, mMockPackageManager,
+                createSendImageIntent("test"), null, UserHandle.USER_CURRENT,
+                /* userHandle= */ UserHandle.SYSTEM);
+        List<Intent> intents = new ArrayList<>();
+        intents.add(createActionMainIntent());
+
+        mController
+                .getResolversForIntent(
+                        /* shouldGetResolvedFilter= */ true,
+                        /* shouldGetActivityMetadata= */ true,
+                        /* shouldGetOnlyDefaultActivities= */ false,
+                        intents);
+
+        verify(mMockPackageManager).queryIntentActivitiesAsUser(any(),
+                doesNotContainFlag(PackageManager.MATCH_DEFAULT_ONLY), any());
+    }
+
+    private int containsFlag(int flag) {
+        return intThat(new FlagMatcher(flag, /* contains= */ true));
+    }
+
+    private int doesNotContainFlag(int flag) {
+        return intThat(new FlagMatcher(flag, /* contains= */ false));
+    }
+
+    public static class FlagMatcher implements ArgumentMatcher<Integer> {
+
+        private final int mFlag;
+        private final boolean mContains;
+
+        public FlagMatcher(int flag, boolean contains) {
+            mFlag = flag;
+            mContains = contains;
+        }
+
+        @Override
+        public boolean matches(Integer integer) {
+            return ((integer & mFlag) != 0) == mContains;
+        }
+    }
+
     private UsageStats initStats(String packageName, String action,
                                  String annotation, int count) {
         ArrayMap<String, ArrayMap<String, Integer>> chooserCounts = new ArrayMap<>();
@@ -174,6 +272,24 @@
         return sendIntent;
     }
 
+    private Intent createActionMainIntent() {
+        Intent sendIntent = new Intent();
+        sendIntent.setAction(Intent.ACTION_MAIN);
+        sendIntent.addCategory(Intent.CATEGORY_LAUNCHER);
+        return sendIntent;
+    }
+
+    private void mockStats() {
+        final List<UsageStats> slices = new ArrayList<>();
+        ParceledListSlice<UsageStats> stats = new ParceledListSlice<>(slices);
+        try {
+            when(mMockService.queryUsageStats(anyInt(), anyLong(), anyLong(), anyString(),
+                    anyInt())).thenReturn(stats);
+        } catch (RemoteException e) {
+            e.printStackTrace();
+        }
+    }
+
     private Integer getCount(
             UsageStatsManager usm, String packageName, String action, String annotation) {
         if (usm == null) {
diff --git a/core/tests/coretests/src/com/android/internal/jank/FrameTrackerTest.java b/core/tests/coretests/src/com/android/internal/jank/FrameTrackerTest.java
index 09fc7ea..e068730 100644
--- a/core/tests/coretests/src/com/android/internal/jank/FrameTrackerTest.java
+++ b/core/tests/coretests/src/com/android/internal/jank/FrameTrackerTest.java
@@ -36,6 +36,7 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.only;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -83,6 +84,7 @@
     private StatsLogWrapper mStatsLog;
     private ArgumentCaptor<OnJankDataListener> mListenerCapture;
     private SurfaceControl mSurfaceControl;
+    private ArgumentCaptor<Runnable> mRunnableArgumentCaptor;
 
     @Before
     public void setup() {
@@ -99,6 +101,8 @@
         mSurfaceControl = new SurfaceControl.Builder().setName("Surface").build();
         mViewRootWrapper = mock(ViewRootWrapper.class);
         when(mViewRootWrapper.getSurfaceControl()).thenReturn(mSurfaceControl);
+        doNothing().when(mViewRootWrapper).addSurfaceChangedCallback(any());
+        doNothing().when(mViewRootWrapper).removeSurfaceChangedCallback(any());
         mSurfaceControlWrapper = mock(SurfaceControlWrapper.class);
 
         mListenerCapture = ArgumentCaptor.forClass(OnJankDataListener.class);
@@ -109,23 +113,29 @@
 
         mChoreographer = mock(ChoreographerWrapper.class);
         mStatsLog = mock(StatsLogWrapper.class);
+        mRunnableArgumentCaptor = ArgumentCaptor.forClass(Runnable.class);
     }
 
     private FrameTracker spyFrameTracker(int cuj, String postfix, boolean surfaceOnly) {
+        InteractionJankMonitor monitor = mock(InteractionJankMonitor.class);
         Handler handler = mRule.getActivity().getMainThreadHandler();
         Session session = new Session(cuj, postfix);
         Configuration config = mock(Configuration.class);
         when(config.isSurfaceOnly()).thenReturn(surfaceOnly);
         when(config.getSurfaceControl()).thenReturn(mSurfaceControl);
         when(config.shouldDeferMonitor()).thenReturn(true);
+        View view = mRule.getActivity().getWindow().getDecorView();
+        Handler spyHandler = spy(new Handler(handler.getLooper()));
+        when(config.getView()).thenReturn(surfaceOnly ? null : view);
+        when(config.getHandler()).thenReturn(spyHandler);
         FrameTracker frameTracker = Mockito.spy(
-                new FrameTracker(session, handler, mRenderer, mViewRootWrapper,
+                new FrameTracker(monitor, session, spyHandler, mRenderer, mViewRootWrapper,
                         mSurfaceControlWrapper, mChoreographer, mWrapper, mStatsLog,
                         /* traceThresholdMissedFrames= */ 1,
                         /* traceThresholdFrameTimeMillis= */ -1,
                         /* FrameTrackerListener= */ null, config));
         doNothing().when(frameTracker).triggerPerfetto();
-        doNothing().when(frameTracker).postTraceStartMarker();
+        doNothing().when(frameTracker).postTraceStartMarker(mRunnableArgumentCaptor.capture());
         return frameTracker;
     }
 
@@ -140,6 +150,7 @@
 
         when(mChoreographer.getVsyncId()).thenReturn(100L);
         tracker.begin();
+        mRunnableArgumentCaptor.getValue().run();
         verify(mRenderer, only()).addObserver(any());
 
         // send first frame with a long duration - should not be taken into account
@@ -173,6 +184,7 @@
 
         when(mChoreographer.getVsyncId()).thenReturn(100L);
         tracker.begin();
+        mRunnableArgumentCaptor.getValue().run();
         verify(mRenderer, only()).addObserver(any());
 
         // send first frame - not janky
@@ -208,6 +220,7 @@
 
         when(mChoreographer.getVsyncId()).thenReturn(100L);
         tracker.begin();
+        mRunnableArgumentCaptor.getValue().run();
         verify(mRenderer, only()).addObserver(any());
 
         // send first frame - janky
@@ -243,6 +256,7 @@
 
         when(mChoreographer.getVsyncId()).thenReturn(100L);
         tracker.begin();
+        mRunnableArgumentCaptor.getValue().run();
         verify(mRenderer, only()).addObserver(any());
 
         // send first frame - not janky
@@ -278,6 +292,7 @@
 
         when(mChoreographer.getVsyncId()).thenReturn(100L);
         tracker.begin();
+        mRunnableArgumentCaptor.getValue().run();
         verify(mRenderer, only()).addObserver(any());
 
         // send first frame - not janky
@@ -319,6 +334,7 @@
 
         when(mChoreographer.getVsyncId()).thenReturn(100L);
         tracker.begin();
+        mRunnableArgumentCaptor.getValue().run();
         verify(mRenderer, only()).addObserver(any());
 
         // send first frame - not janky
@@ -332,7 +348,7 @@
         tracker.end(FrameTracker.REASON_END_NORMAL);
 
         // Send incomplete callback for 102L
-        sendSfFrame(102L, JANK_NONE);
+        sendSfFrame(tracker, 102L, JANK_NONE);
 
         // Send janky but complete callbck fo 103L
         sendFrame(tracker, 50, JANK_APP_DEADLINE_MISSED, 103L);
@@ -356,6 +372,7 @@
 
         when(mChoreographer.getVsyncId()).thenReturn(100L);
         tracker.begin();
+        mRunnableArgumentCaptor.getValue().run();
         verify(mRenderer).addObserver(any());
 
         // First frame - not janky
@@ -380,6 +397,7 @@
 
         when(mChoreographer.getVsyncId()).thenReturn(100L);
         tracker.begin();
+        mRunnableArgumentCaptor.getValue().run();
         verify(mRenderer, only()).addObserver(any());
 
         // end the trace session
@@ -403,6 +421,7 @@
 
         when(mChoreographer.getVsyncId()).thenReturn(100L);
         tracker.begin();
+        mRunnableArgumentCaptor.getValue().run();
         verify(mRenderer, only()).addObserver(any());
 
         // end the trace session at the same vsync id, end vsync id will less than the begin one.
@@ -444,6 +463,7 @@
 
         when(mChoreographer.getVsyncId()).thenReturn(100L);
         tracker.begin();
+        mRunnableArgumentCaptor.getValue().run();
         verify(mSurfaceControlWrapper).addJankStatsListener(any(), any());
 
         // First frame - not janky
@@ -479,6 +499,7 @@
 
         when(mChoreographer.getVsyncId()).thenReturn(100L);
         tracker.begin();
+        mRunnableArgumentCaptor.getValue().run();
         verify(mSurfaceControlWrapper).addJankStatsListener(any(), any());
 
         // First frame - janky
@@ -514,6 +535,7 @@
 
         when(mChoreographer.getVsyncId()).thenReturn(100L);
         tracker.begin();
+        mRunnableArgumentCaptor.getValue().run();
         verify(mSurfaceControlWrapper).addJankStatsListener(any(), any());
 
         // First frame - not janky
@@ -548,6 +570,7 @@
                 CUJ_WALLPAPER_TRANSITION, CUJ_POSTFIX, /* surfaceOnly= */ true);
         when(mChoreographer.getVsyncId()).thenReturn(100L);
         tracker.begin();
+        mRunnableArgumentCaptor.getValue().run();
         verify(mSurfaceControlWrapper).addJankStatsListener(any(), any());
         sendFrame(tracker, JANK_SURFACEFLINGER_DEADLINE_MISSED, 100L);
         sendFrame(tracker, JANK_SURFACEFLINGER_DEADLINE_MISSED, 101L);
@@ -594,7 +617,7 @@
         if (!tracker.mSurfaceOnly) {
             sendHwuiFrame(tracker, durationMillis, vsyncId, firstWindowFrame);
         }
-        sendSfFrame(vsyncId, jankType);
+        sendSfFrame(tracker, vsyncId, jankType);
     }
 
     private void sendHwuiFrame(FrameTracker tracker, long durationMillis, long vsyncId,
@@ -604,12 +627,18 @@
                 .getMetric(FrameMetrics.FIRST_DRAW_FRAME);
         doReturn(TimeUnit.MILLISECONDS.toNanos(durationMillis))
                 .when(mWrapper).getMetric(FrameMetrics.TOTAL_DURATION);
+        final ArgumentCaptor<Runnable> captor = ArgumentCaptor.forClass(Runnable.class);
+        doNothing().when(tracker).postCallback(captor.capture());
         tracker.onFrameMetricsAvailable(0);
+        captor.getValue().run();
     }
 
-    private void sendSfFrame(long vsyncId, @JankType int jankType) {
+    private void sendSfFrame(FrameTracker tracker, long vsyncId, @JankType int jankType) {
+        final ArgumentCaptor<Runnable> captor = ArgumentCaptor.forClass(Runnable.class);
+        doNothing().when(tracker).postCallback(captor.capture());
         mListenerCapture.getValue().onJankDataAvailable(new JankData[] {
                 new JankData(vsyncId, jankType)
         });
+        captor.getValue().run();
     }
 }
diff --git a/core/tests/coretests/src/com/android/internal/jank/InteractionJankMonitorTest.java b/core/tests/coretests/src/com/android/internal/jank/InteractionJankMonitorTest.java
index 5a6fd53..1519e48 100644
--- a/core/tests/coretests/src/com/android/internal/jank/InteractionJankMonitorTest.java
+++ b/core/tests/coretests/src/com/android/internal/jank/InteractionJankMonitorTest.java
@@ -16,10 +16,26 @@
 
 package com.android.internal.jank;
 
+import static android.text.TextUtils.formatSimple;
+
 import static com.android.internal.jank.FrameTracker.REASON_CANCEL_TIMEOUT;
 import static com.android.internal.jank.FrameTracker.REASON_END_NORMAL;
+import static com.android.internal.jank.InteractionJankMonitor.CUJ_LOCKSCREEN_LAUNCH_CAMERA;
+import static com.android.internal.jank.InteractionJankMonitor.CUJ_NOTIFICATION_ADD;
+import static com.android.internal.jank.InteractionJankMonitor.CUJ_NOTIFICATION_APP_START;
+import static com.android.internal.jank.InteractionJankMonitor.CUJ_NOTIFICATION_HEADS_UP_APPEAR;
+import static com.android.internal.jank.InteractionJankMonitor.CUJ_NOTIFICATION_HEADS_UP_DISAPPEAR;
+import static com.android.internal.jank.InteractionJankMonitor.CUJ_NOTIFICATION_REMOVE;
 import static com.android.internal.jank.InteractionJankMonitor.CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE;
+import static com.android.internal.jank.InteractionJankMonitor.CUJ_NOTIFICATION_SHADE_QS_EXPAND_COLLAPSE;
+import static com.android.internal.jank.InteractionJankMonitor.CUJ_NOTIFICATION_SHADE_QS_SCROLL_SWIPE;
+import static com.android.internal.jank.InteractionJankMonitor.CUJ_NOTIFICATION_SHADE_ROW_EXPAND;
+import static com.android.internal.jank.InteractionJankMonitor.CUJ_NOTIFICATION_SHADE_ROW_SWIPE;
+import static com.android.internal.jank.InteractionJankMonitor.CUJ_NOTIFICATION_SHADE_SCROLL_FLING;
+import static com.android.internal.jank.InteractionJankMonitor.CUJ_SPLIT_SCREEN_RESIZE;
 import static com.android.internal.jank.InteractionJankMonitor.CUJ_TO_STATSD_INTERACTION_TYPE;
+import static com.android.internal.jank.InteractionJankMonitor.MAX_LENGTH_OF_CUJ_NAME;
+import static com.android.internal.jank.InteractionJankMonitor.getNameOfCuj;
 
 import static com.google.common.truth.Truth.assertThat;
 import static com.google.common.truth.Truth.assertWithMessage;
@@ -38,6 +54,7 @@
 import android.os.HandlerThread;
 import android.os.SystemClock;
 import android.provider.DeviceConfig;
+import android.util.SparseArray;
 import android.view.View;
 import android.view.ViewAttachTestActivity;
 
@@ -52,8 +69,12 @@
 import com.android.internal.jank.FrameTracker.ViewRootWrapper;
 import com.android.internal.jank.InteractionJankMonitor.Configuration;
 import com.android.internal.jank.InteractionJankMonitor.Session;
+import com.android.internal.util.FrameworkStatsLog;
+
+import com.google.common.truth.Expect;
 
 import org.junit.Before;
+import org.junit.BeforeClass;
 import org.junit.Rule;
 import org.junit.Test;
 import org.mockito.ArgumentCaptor;
@@ -64,11 +85,17 @@
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 @SmallTest
 public class InteractionJankMonitorTest {
     private static final String CUJ_POSTFIX = "";
+    private static final SparseArray<String> ENUM_NAME_EXCEPTION_MAP = new SparseArray<>();
+    private static final SparseArray<String> CUJ_NAME_EXCEPTION_MAP = new SparseArray<>();
+    private static final String ENUM_NAME_PREFIX =
+            "UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__";
+
     private ViewAttachTestActivity mActivity;
     private View mView;
     private HandlerThread mWorker;
@@ -77,6 +104,53 @@
     public ActivityTestRule<ViewAttachTestActivity> mRule =
             new ActivityTestRule<>(ViewAttachTestActivity.class);
 
+    @Rule
+    public final Expect mExpect = Expect.create();
+
+    @BeforeClass
+    public static void initialize() {
+        ENUM_NAME_EXCEPTION_MAP.put(CUJ_NOTIFICATION_ADD, getEnumName("SHADE_NOTIFICATION_ADD"));
+        ENUM_NAME_EXCEPTION_MAP.put(CUJ_NOTIFICATION_APP_START, getEnumName("SHADE_APP_LAUNCH"));
+        ENUM_NAME_EXCEPTION_MAP.put(
+                CUJ_NOTIFICATION_HEADS_UP_APPEAR, getEnumName("SHADE_HEADS_UP_APPEAR"));
+        ENUM_NAME_EXCEPTION_MAP.put(
+                CUJ_NOTIFICATION_HEADS_UP_DISAPPEAR, getEnumName("SHADE_HEADS_UP_DISAPPEAR"));
+        ENUM_NAME_EXCEPTION_MAP.put(
+                CUJ_NOTIFICATION_REMOVE, getEnumName("SHADE_NOTIFICATION_REMOVE"));
+        ENUM_NAME_EXCEPTION_MAP.put(
+                CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE, getEnumName("NOTIFICATION_SHADE_SWIPE"));
+        ENUM_NAME_EXCEPTION_MAP.put(
+                CUJ_NOTIFICATION_SHADE_QS_EXPAND_COLLAPSE, getEnumName("SHADE_QS_EXPAND_COLLAPSE"));
+        ENUM_NAME_EXCEPTION_MAP.put(
+                CUJ_NOTIFICATION_SHADE_QS_SCROLL_SWIPE, getEnumName("SHADE_QS_SCROLL_SWIPE"));
+        ENUM_NAME_EXCEPTION_MAP.put(
+                CUJ_NOTIFICATION_SHADE_ROW_EXPAND, getEnumName("SHADE_ROW_EXPAND"));
+        ENUM_NAME_EXCEPTION_MAP.put(
+                CUJ_NOTIFICATION_SHADE_ROW_SWIPE, getEnumName("SHADE_ROW_SWIPE"));
+        ENUM_NAME_EXCEPTION_MAP.put(
+                CUJ_NOTIFICATION_SHADE_SCROLL_FLING, getEnumName("SHADE_SCROLL_FLING"));
+
+        CUJ_NAME_EXCEPTION_MAP.put(
+                CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE, "CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE");
+        CUJ_NAME_EXCEPTION_MAP.put(
+                CUJ_NOTIFICATION_SHADE_QS_EXPAND_COLLAPSE,
+                "CUJ_NOTIFICATION_SHADE_QS_EXPAND_COLLAPSE");
+        CUJ_NAME_EXCEPTION_MAP.put(
+                CUJ_NOTIFICATION_SHADE_QS_SCROLL_SWIPE, "CUJ_NOTIFICATION_SHADE_QS_SCROLL_SWIPE");
+        CUJ_NAME_EXCEPTION_MAP.put(
+                CUJ_NOTIFICATION_SHADE_ROW_EXPAND, "CUJ_NOTIFICATION_SHADE_ROW_EXPAND");
+        CUJ_NAME_EXCEPTION_MAP.put(
+                CUJ_NOTIFICATION_SHADE_ROW_SWIPE, "CUJ_NOTIFICATION_SHADE_ROW_SWIPE");
+        CUJ_NAME_EXCEPTION_MAP.put(
+                CUJ_NOTIFICATION_SHADE_SCROLL_FLING, "CUJ_NOTIFICATION_SHADE_SCROLL_FLING");
+        CUJ_NAME_EXCEPTION_MAP.put(CUJ_LOCKSCREEN_LAUNCH_CAMERA, "CUJ_LOCKSCREEN_LAUNCH_CAMERA");
+        CUJ_NAME_EXCEPTION_MAP.put(CUJ_SPLIT_SCREEN_RESIZE, "CUJ_SPLIT_SCREEN_RESIZE");
+    }
+
+    private static String getEnumName(String name) {
+        return formatSimple("%s%s", ENUM_NAME_PREFIX, name);
+    }
+
     @Before
     public void setup() {
         // Prepare an activity for getting ThreadedRenderer later.
@@ -93,7 +167,7 @@
     @Test
     public void testBeginEnd() {
         InteractionJankMonitor monitor = createMockedInteractionJankMonitor();
-        FrameTracker tracker = createMockedFrameTracker(null);
+        FrameTracker tracker = createMockedFrameTracker(monitor, null);
         doReturn(tracker).when(monitor).createFrameTracker(any(), any());
         doNothing().when(tracker).begin();
         doReturn(true).when(tracker).end(anyInt());
@@ -134,7 +208,7 @@
     public void testBeginTimeout() {
         ArgumentCaptor<Runnable> captor = ArgumentCaptor.forClass(Runnable.class);
         InteractionJankMonitor monitor = createMockedInteractionJankMonitor();
-        FrameTracker tracker = createMockedFrameTracker(null);
+        FrameTracker tracker = createMockedFrameTracker(monitor, null);
         doReturn(tracker).when(monitor).createFrameTracker(any(), any());
         doNothing().when(tracker).begin();
         doReturn(true).when(tracker).cancel(anyInt());
@@ -174,13 +248,90 @@
         }
     }
 
+    @Test
+    public void testCujsMapToEnumsCorrectly() {
+        List<Field> cujs = Arrays.stream(InteractionJankMonitor.class.getDeclaredFields())
+                .filter(f -> f.getName().startsWith("CUJ_")
+                        && Modifier.isStatic(f.getModifiers())
+                        && f.getType() == int.class)
+                .collect(Collectors.toList());
+
+        Map<Integer, String> enumsMap = Arrays.stream(FrameworkStatsLog.class.getDeclaredFields())
+                .filter(f -> f.getName().startsWith(ENUM_NAME_PREFIX)
+                        && Modifier.isStatic(f.getModifiers())
+                        && f.getType() == int.class)
+                .collect(Collectors.toMap(this::getIntFieldChecked, Field::getName));
+
+        cujs.forEach(f -> {
+            final int cuj = getIntFieldChecked(f);
+            final String cujName = f.getName();
+            final String expectedEnumName = ENUM_NAME_EXCEPTION_MAP.contains(cuj)
+                    ? ENUM_NAME_EXCEPTION_MAP.get(cuj)
+                    : formatSimple("%s%s", ENUM_NAME_PREFIX, cujName.substring(4));
+            final int enumKey = CUJ_TO_STATSD_INTERACTION_TYPE[cuj];
+            final String enumName = enumsMap.get(enumKey);
+            final String expectedNameOfCuj = CUJ_NAME_EXCEPTION_MAP.contains(cuj)
+                    ? CUJ_NAME_EXCEPTION_MAP.get(cuj)
+                    : formatSimple("CUJ_%s", getNameOfCuj(cuj));
+            mExpect
+                    .withMessage(formatSimple(
+                            "%s (%d) not matches %s (%d)", cujName, cuj, enumName, enumKey))
+                    .that(expectedEnumName.equals(enumName))
+                    .isTrue();
+            mExpect
+                    .withMessage(formatSimple("getNameOfCuj(%d) not matches %s", cuj, cujName))
+                    .that(cujName.equals(expectedNameOfCuj))
+                    .isTrue();
+        });
+    }
+
+    @Test
+    public void testCujNameLimit() {
+        Arrays.stream(InteractionJankMonitor.class.getDeclaredFields())
+                .filter(f -> f.getName().startsWith("CUJ_")
+                        && Modifier.isStatic(f.getModifiers())
+                        && f.getType() == int.class)
+                .forEach(f -> {
+                    final int cuj = getIntFieldChecked(f);
+                    mExpect
+                            .withMessage(formatSimple(
+                                    "Too long CUJ(%d) name: %s", cuj, getNameOfCuj(cuj)))
+                            .that(getNameOfCuj(cuj).length())
+                            .isAtMost(MAX_LENGTH_OF_CUJ_NAME);
+                });
+    }
+
+    @Test
+    public void testSessionNameLengthLimit() {
+        final int cujType = CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE;
+        final String cujName = getNameOfCuj(cujType);
+        final String cujTag = "ThisIsTheCujTag";
+        final String tooLongTag = cujTag.repeat(10);
+
+        // Normal case, no postfix.
+        Session noPostfix = new Session(cujType, "");
+        assertThat(noPostfix.getName()).isEqualTo(formatSimple("J<%s>", cujName));
+
+        // Normal case, with postfix.
+        Session withPostfix = new Session(cujType, cujTag);
+        assertThat(withPostfix.getName()).isEqualTo(formatSimple("J<%s::%s>", cujName, cujTag));
+
+        // Since the length of the cuj name is tested in another test, no need to test it here.
+        // Too long postfix case, should trim the postfix and keep the cuj name completed.
+        final String expectedTrimmedName = formatSimple("J<%s::%s>", cujName,
+                "ThisIsTheCujTagThisIsTheCujTagThisIsTheCujTagThisIsTheCujTagThisIsTheCujTagT...");
+        Session longPostfix = new Session(cujType, tooLongTag);
+        assertThat(longPostfix.getName()).isEqualTo(expectedTrimmedName);
+    }
+
     private InteractionJankMonitor createMockedInteractionJankMonitor() {
         InteractionJankMonitor monitor = spy(new InteractionJankMonitor(mWorker));
         doReturn(true).when(monitor).shouldMonitor(anyInt());
         return monitor;
     }
 
-    private FrameTracker createMockedFrameTracker(FrameTracker.FrameTrackerListener listener) {
+    private FrameTracker createMockedFrameTracker(InteractionJankMonitor monitor,
+            FrameTracker.FrameTrackerListener listener) {
         Session session = spy(new Session(CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE, CUJ_POSTFIX));
         doReturn(false).when(session).logToStatsd();
 
@@ -190,6 +341,7 @@
 
         ViewRootWrapper viewRoot = spy(new ViewRootWrapper(mView.getViewRootImpl()));
         doNothing().when(viewRoot).addSurfaceChangedCallback(any());
+        doNothing().when(viewRoot).removeSurfaceChangedCallback(any());
 
         SurfaceControlWrapper surfaceControl = mock(SurfaceControlWrapper.class);
         doNothing().when(surfaceControl).addJankStatsListener(any(), any());
@@ -200,16 +352,27 @@
 
         Configuration configuration = mock(Configuration.class);
         when(configuration.isSurfaceOnly()).thenReturn(false);
+        when(configuration.getView()).thenReturn(mView);
+        when(configuration.getHandler()).thenReturn(mView.getHandler());
 
-        FrameTracker tracker = spy(new FrameTracker(session, mWorker.getThreadHandler(),
+        FrameTracker tracker = spy(new FrameTracker(monitor, session, mWorker.getThreadHandler(),
                 threadedRenderer, viewRoot, surfaceControl, choreographer,
                 new FrameMetricsWrapper(), new StatsLogWrapper(),
                 /* traceThresholdMissedFrames= */ 1,
                 /* traceThresholdFrameTimeMillis= */ -1, listener, configuration));
 
-        doNothing().when(tracker).postTraceStartMarker();
+        doNothing().when(tracker).postTraceStartMarker(any());
         doNothing().when(tracker).triggerPerfetto();
+        doReturn(configuration.getHandler()).when(tracker).getHandler();
 
         return tracker;
     }
+
+    private int getIntFieldChecked(Field field) {
+        try {
+            return field.getInt(null);
+        } catch (IllegalAccessException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
 }
diff --git a/core/tests/coretests/src/com/android/internal/statusbar/RegisterStatusBarResultTest.java b/core/tests/coretests/src/com/android/internal/statusbar/RegisterStatusBarResultTest.java
index 0f05be0..c53fb23 100644
--- a/core/tests/coretests/src/com/android/internal/statusbar/RegisterStatusBarResultTest.java
+++ b/core/tests/coretests/src/com/android/internal/statusbar/RegisterStatusBarResultTest.java
@@ -20,6 +20,7 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import android.graphics.Rect;
 import android.os.Binder;
 import android.os.Parcel;
 import android.os.UserHandle;
@@ -48,7 +49,11 @@
         final ArrayMap<String, StatusBarIcon> iconMap = new ArrayMap<>();
         iconMap.put(dumyIconKey, new StatusBarIcon("com.android.internal.statusbar.test",
                 UserHandle.of(100), 123, 1, 2, "dummyIconDescription"));
-
+        final LetterboxDetails letterboxDetails = new LetterboxDetails(
+                /* letterboxInnerBounds= */ new Rect(1, 2, 3, 4),
+                /* letterboxFullBounds= */ new Rect(5, 6, 7, 8),
+                /* appAppearance= */ 321
+        );
         final RegisterStatusBarResult original = new RegisterStatusBarResult(iconMap,
                 0x2 /* disabledFlags1 */,
                 0x4 /* appearance */,
@@ -62,7 +67,8 @@
                 BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE,
                 new InsetsVisibilities() /* requestedVisibilities */,
                 "test" /* packageName */,
-                new int[0] /* transientBarTypes */);
+                new int[0] /* transientBarTypes */,
+                new LetterboxDetails[] {letterboxDetails});
 
         final RegisterStatusBarResult copy = clone(original);
 
@@ -84,6 +90,7 @@
         assertThat(copy.mRequestedVisibilities).isEqualTo(original.mRequestedVisibilities);
         assertThat(copy.mPackageName).isEqualTo(original.mPackageName);
         assertThat(copy.mTransientBarTypes).isEqualTo(original.mTransientBarTypes);
+        assertThat(copy.mLetterboxDetails).isEqualTo(original.mLetterboxDetails);
     }
 
     private RegisterStatusBarResult clone(RegisterStatusBarResult original) {
diff --git a/core/tests/mockingcoretests/src/android/app/activity/ActivityThreadClientTest.java b/core/tests/mockingcoretests/src/android/app/activity/ActivityThreadClientTest.java
index 8d3751e..47f70dd 100644
--- a/core/tests/mockingcoretests/src/android/app/activity/ActivityThreadClientTest.java
+++ b/core/tests/mockingcoretests/src/android/app/activity/ActivityThreadClientTest.java
@@ -207,8 +207,8 @@
         final Configuration currentConfig = new Configuration();
 
         assertFalse("Must not report change if no public diff",
-                shouldReportChange(0 /* publicDiff */, currentConfig, newConfig,
-                null /* sizeBuckets */, 0 /* handledConfigChanges */));
+                shouldReportChange(currentConfig, newConfig, null /* sizeBuckets */,
+                        0 /* handledConfigChanges */));
 
         final int[] verticalThresholds = {100, 400};
         final SizeConfigurationBuckets buckets = new SizeConfigurationBuckets(
@@ -221,25 +221,25 @@
         newConfig.screenHeightDp = 300;
 
         assertFalse("Must not report changes if the diff is small and not handled",
-                shouldReportChange(CONFIG_SCREEN_SIZE /* publicDiff */, currentConfig,
-                newConfig, buckets, CONFIG_FONT_SCALE /* handledConfigChanges */));
+                shouldReportChange(currentConfig, newConfig, buckets,
+                        CONFIG_FONT_SCALE /* handledConfigChanges */));
 
         assertTrue("Must report changes if the small diff is handled",
-                shouldReportChange(CONFIG_SCREEN_SIZE /* publicDiff */, currentConfig, newConfig,
-                buckets, CONFIG_SCREEN_SIZE /* handledConfigChanges */));
+                shouldReportChange(currentConfig, newConfig, buckets,
+                        CONFIG_SCREEN_SIZE /* handledConfigChanges */));
 
         currentConfig.fontScale = 0.8f;
         newConfig.fontScale = 1.2f;
 
         assertTrue("Must report handled changes regardless of small unhandled change",
-                shouldReportChange(CONFIG_SCREEN_SIZE | CONFIG_FONT_SCALE /* publicDiff */,
-                currentConfig, newConfig, buckets, CONFIG_FONT_SCALE /* handledConfigChanges */));
+                shouldReportChange(currentConfig, newConfig, buckets,
+                        CONFIG_FONT_SCALE /* handledConfigChanges */));
 
         newConfig.screenHeightDp = 500;
 
         assertFalse("Must not report changes if there's unhandled big changes",
-                shouldReportChange(CONFIG_SCREEN_SIZE | CONFIG_FONT_SCALE /* publicDiff */,
-                currentConfig, newConfig, buckets, CONFIG_FONT_SCALE /* handledConfigChanges */));
+                shouldReportChange(currentConfig, newConfig, buckets,
+                        CONFIG_FONT_SCALE /* handledConfigChanges */));
     }
 
     private void recreateAndVerifyNoRelaunch(ActivityThread activityThread, TestActivity activity) {
diff --git a/core/tests/mockingcoretests/src/android/window/SizeConfigurationBucketsTest.java b/core/tests/mockingcoretests/src/android/window/SizeConfigurationBucketsTest.java
index fa4aa80..ed857e8 100644
--- a/core/tests/mockingcoretests/src/android/window/SizeConfigurationBucketsTest.java
+++ b/core/tests/mockingcoretests/src/android/window/SizeConfigurationBucketsTest.java
@@ -88,26 +88,15 @@
     }
 
     /**
-     * Tests that null size configuration buckets unflips the correct configuration flags.
+     * Tests that {@code null} size configuration buckets do not unflip the configuration flags.
      */
     @Test
     public void testNullSizeConfigurationBuckets() {
-        // Check that all 3 size configurations are filtered out of the diff if the buckets are null
-        // and non-size attributes of screen layout are unchanged. Add a non-size related config
-        // change (i.e. CONFIG_LOCALE) to test that the diff is not set to zero.
         final int diff = CONFIG_SCREEN_SIZE | CONFIG_SMALLEST_SCREEN_SIZE | CONFIG_SCREEN_LAYOUT
                 | CONFIG_LOCALE;
         final int filteredDiffNonSizeLayoutUnchanged = SizeConfigurationBuckets.filterDiff(diff,
                 Configuration.EMPTY, Configuration.EMPTY, null);
-        assertEquals(CONFIG_LOCALE, filteredDiffNonSizeLayoutUnchanged);
-
-        // Check that only screen size and smallest screen size are filtered out of the diff if the
-        // buckets are null and non-size attributes of screen layout are changed.
-        final Configuration newConfig = new Configuration();
-        newConfig.screenLayout |= SCREENLAYOUT_ROUND_YES;
-        final int filteredDiffNonSizeLayoutChanged = SizeConfigurationBuckets.filterDiff(diff,
-                Configuration.EMPTY, newConfig, null);
-        assertEquals(CONFIG_SCREEN_LAYOUT | CONFIG_LOCALE, filteredDiffNonSizeLayoutChanged);
+        assertEquals(diff, filteredDiffNonSizeLayoutUnchanged);
     }
 
     /**
diff --git a/core/tests/screenshothelpertests/OWNERS b/core/tests/screenshothelpertests/OWNERS
new file mode 100644
index 0000000..23dc8fb
--- /dev/null
+++ b/core/tests/screenshothelpertests/OWNERS
@@ -0,0 +1,2 @@
+# Bug component: 801321
+file:/packages/SystemUI/src/com/android/systemui/screenshot/OWNERS
diff --git a/core/tests/screenshothelpertests/src/com/android/internal/util/ScreenshotHelperTest.java b/core/tests/screenshothelpertests/src/com/android/internal/util/ScreenshotHelperTest.java
index 4b81737..fd4fb13 100644
--- a/core/tests/screenshothelpertests/src/com/android/internal/util/ScreenshotHelperTest.java
+++ b/core/tests/screenshothelpertests/src/com/android/internal/util/ScreenshotHelperTest.java
@@ -80,13 +80,14 @@
 
     @Test
     public void testFullscreenScreenshot() {
-        mScreenshotHelper.takeScreenshot(TAKE_SCREENSHOT_FULLSCREEN, false, false, mHandler, null);
+        mScreenshotHelper.takeScreenshot(TAKE_SCREENSHOT_FULLSCREEN,
+                WindowManager.ScreenshotSource.SCREENSHOT_OTHER, mHandler, null);
     }
 
     @Test
     public void testSelectedRegionScreenshot() {
-        mScreenshotHelper.takeScreenshot(TAKE_SCREENSHOT_SELECTED_REGION, false, false, mHandler,
-                null);
+        mScreenshotHelper.takeScreenshot(TAKE_SCREENSHOT_SELECTED_REGION,
+                WindowManager.ScreenshotSource.SCREENSHOT_OTHER, mHandler, null);
     }
 
     @Test
@@ -101,8 +102,10 @@
         long timeoutMs = 10;
 
         CountDownLatch lock = new CountDownLatch(1);
-        mScreenshotHelper.takeScreenshot(TAKE_SCREENSHOT_FULLSCREEN, false, false, timeoutMs,
+        mScreenshotHelper.takeScreenshot(TAKE_SCREENSHOT_FULLSCREEN,
+                WindowManager.ScreenshotSource.SCREENSHOT_OTHER,
                 mHandler,
+                timeoutMs,
                 uri -> {
                     assertNull(uri);
                     lock.countDown();
diff --git a/data/etc/services.core.protolog.json b/data/etc/services.core.protolog.json
index f7c2b73..f9bfd58 100644
--- a/data/etc/services.core.protolog.json
+++ b/data/etc/services.core.protolog.json
@@ -163,6 +163,12 @@
       "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",
@@ -571,12 +577,6 @@
       "group": "WM_ERROR",
       "at": "com\/android\/server\/wm\/WindowManagerService.java"
     },
-    "-1521427940": {
-      "message": "commitVisibility: %s: visible=%b mVisibleRequested=%b",
-      "level": "VERBOSE",
-      "group": "WM_DEBUG_APP_TRANSITIONS",
-      "at": "com\/android\/server\/wm\/ActivityRecord.java"
-    },
     "-1517908912": {
       "message": "requestScrollCapture: caught exception dispatching to window.token=%s",
       "level": "WARN",
@@ -757,6 +757,12 @@
       "group": "WM_ERROR",
       "at": "com\/android\/server\/wm\/WindowManagerService.java"
     },
+    "-1383884640": {
+      "message": " allReady query: used=%b override=%b defer=%d states=[%s]",
+      "level": "VERBOSE",
+      "group": "WM_DEBUG_WINDOW_TRANSITIONS",
+      "at": "com\/android\/server\/wm\/Transition.java"
+    },
     "-1376035390": {
       "message": "No task found",
       "level": "DEBUG",
@@ -1063,6 +1069,12 @@
       "group": "WM_DEBUG_ORIENTATION",
       "at": "com\/android\/server\/wm\/WindowManagerService.java"
     },
+    "-1075136930": {
+      "message": "startLockTaskMode: Can't lock due to auth",
+      "level": "WARN",
+      "group": "WM_DEBUG_LOCKTASK",
+      "at": "com\/android\/server\/wm\/LockTaskController.java"
+    },
     "-1069336896": {
       "message": "onRootTaskOrderChanged(): rootTask=%s",
       "level": "DEBUG",
@@ -1501,6 +1513,12 @@
       "group": "WM_DEBUG_FOCUS_LIGHT",
       "at": "com\/android\/server\/wm\/DisplayContent.java"
     },
+    "-636553602": {
+      "message": "commitVisibility: %s: visible=%b visibleRequested=%b, isInTransition=%b, runningAnimation=%b, caller=%s",
+      "level": "VERBOSE",
+      "group": "WM_DEBUG_APP_TRANSITIONS",
+      "at": "com\/android\/server\/wm\/ActivityRecord.java"
+    },
     "-635082269": {
       "message": "******** booted=%b msg=%b haveBoot=%b haveApp=%b haveWall=%b wallEnabled=%b haveKeyguard=%b",
       "level": "INFO",
@@ -1693,6 +1711,12 @@
       "group": "WM_DEBUG_STATES",
       "at": "com\/android\/server\/wm\/RootWindowContainer.java"
     },
+    "-417730399": {
+      "message": "Preparing to sync a window that was already in the sync, so try dropping buffer. win=%s",
+      "level": "DEBUG",
+      "group": "WM_DEBUG_SYNC_ENGINE",
+      "at": "com\/android\/server\/wm\/WindowState.java"
+    },
     "-415865166": {
       "message": "findFocusedWindow: Found new focus @ %s",
       "level": "VERBOSE",
@@ -2071,6 +2095,12 @@
       "group": "WM_DEBUG_IME",
       "at": "com\/android\/server\/wm\/DisplayContent.java"
     },
+    "-57572004": {
+      "message": "applyAnimation: anim=%s animAttr=0x%x transit=%s isEntrance=%b  canCustomizeAppTransition=%b Callers=%s",
+      "level": "VERBOSE",
+      "group": "WM_DEBUG_APP_TRANSITIONS_ANIM",
+      "at": "com\/android\/server\/wm\/AppTransition.java"
+    },
     "-55185509": {
       "message": "setFocusedTask: taskId=%d touchedActivity=%s",
       "level": "DEBUG",
@@ -2113,6 +2143,12 @@
       "group": "WM_DEBUG_RECENTS_ANIMATIONS",
       "at": "com\/android\/server\/wm\/RecentsAnimation.java"
     },
+    "-4263657": {
+      "message": "Got a buffer for request id=%d but latest request is id=%d. Since the buffer is out-of-date, drop it. win=%s",
+      "level": "DEBUG",
+      "group": "WM_DEBUG_SYNC_ENGINE",
+      "at": "com\/android\/server\/wm\/WindowState.java"
+    },
     "3593205": {
       "message": "commitVisibility: %s: visible=%b mVisibleRequested=%b",
       "level": "VERBOSE",
@@ -2143,6 +2179,12 @@
       "group": "WM_DEBUG_RECENTS_ANIMATIONS",
       "at": "com\/android\/server\/wm\/RecentsAnimationController.java"
     },
+    "25888308": {
+      "message": "Resize reasons for w=%s:  %s configChanged=%b dragResizingChanged=%b",
+      "level": "VERBOSE",
+      "group": "WM_DEBUG_RESIZE",
+      "at": "com\/android\/server\/wm\/WindowState.java"
+    },
     "35398067": {
       "message": "goodToGo(): onAnimationStart, transit=%s, apps=%d, wallpapers=%d, nonApps=%d",
       "level": "DEBUG",
@@ -2527,12 +2569,6 @@
       "group": "WM_DEBUG_ADD_REMOVE",
       "at": "com\/android\/server\/wm\/ActivityRecord.java"
     },
-    "352982444": {
-      "message": " allReady query: used=%b override=%b states=[%s]",
-      "level": "VERBOSE",
-      "group": "WM_DEBUG_WINDOW_TRANSITIONS",
-      "at": "com\/android\/server\/wm\/Transition.java"
-    },
     "355720268": {
       "message": "stopFreezingDisplayLocked: Unfreezing now",
       "level": "DEBUG",
@@ -2575,6 +2611,12 @@
       "group": "WM_DEBUG_STATES",
       "at": "com\/android\/server\/wm\/TaskFragment.java"
     },
+    "385237117": {
+      "message": "moveFocusableActivityToTop: already on top and focused, activity=%s",
+      "level": "DEBUG",
+      "group": "WM_DEBUG_FOCUS",
+      "at": "com\/android\/server\/wm\/ActivityRecord.java"
+    },
     "385595355": {
       "message": "Starting animation on %s: type=%d, anim=%s",
       "level": "VERBOSE",
@@ -2797,12 +2839,6 @@
       "group": "WM_DEBUG_FOCUS_LIGHT",
       "at": "com\/android\/server\/wm\/DisplayContent.java"
     },
-    "625447638": {
-      "message": "Resize reasons for w=%s:  %s configChanged=%b dragResizingChanged=%b reportOrientationChanged=%b",
-      "level": "VERBOSE",
-      "group": "WM_DEBUG_RESIZE",
-      "at": "com\/android\/server\/wm\/WindowState.java"
-    },
     "628276090": {
       "message": "Delaying app transition for screen rotation animation to finish",
       "level": "VERBOSE",
@@ -3049,6 +3085,12 @@
       "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",
@@ -3103,6 +3145,12 @@
       "group": "WM_DEBUG_LOCKTASK",
       "at": "com\/android\/server\/wm\/LockTaskController.java"
     },
+    "956467125": {
+      "message": "Reparenting Activity to embedded TaskFragment, but the Activity is not collected",
+      "level": "WARN",
+      "group": "WM_DEBUG_WINDOW_TRANSITIONS",
+      "at": "com\/android\/server\/wm\/WindowOrganizerController.java"
+    },
     "958338552": {
       "message": "grantEmbeddedWindowFocus win=%s dropped focus so setting focus to null since no candidate was found",
       "level": "VERBOSE",
@@ -3379,11 +3427,11 @@
       "group": "WM_DEBUG_BOOT",
       "at": "com\/android\/server\/wm\/WindowManagerService.java"
     },
-    "1246035185": {
-      "message": "stopFreezingDisplayLocked: Returning waitingForConfig=%b, waitingForRemoteRotation=%b, mAppsFreezingScreen=%d, mWindowsFreezingScreen=%d, mClientFreezingScreen=%b, mOpeningApps.size()=%d",
+    "1239439010": {
+      "message": "moveFocusableActivityToTop: set focused, activity=%s",
       "level": "DEBUG",
-      "group": "WM_DEBUG_ORIENTATION",
-      "at": "com\/android\/server\/wm\/WindowManagerService.java"
+      "group": "WM_DEBUG_FOCUS",
+      "at": "com\/android\/server\/wm\/ActivityRecord.java"
     },
     "1252594551": {
       "message": "Window types in WindowContext and LayoutParams.type should match! Type from LayoutParams is %d, but type from WindowContext is %d",
@@ -3481,6 +3529,12 @@
       "group": "WM_DEBUG_ORIENTATION",
       "at": "com\/android\/server\/wm\/ScreenRotationAnimation.java"
     },
+    "1360176455": {
+      "message": "stopFreezingDisplayLocked: Returning waitingForConfig=%b, waitingForRemoteDisplayChange=%b, mAppsFreezingScreen=%d, mWindowsFreezingScreen=%d, mClientFreezingScreen=%b, mOpeningApps.size()=%d",
+      "level": "DEBUG",
+      "group": "WM_DEBUG_ORIENTATION",
+      "at": "com\/android\/server\/wm\/WindowManagerService.java"
+    },
     "1364126018": {
       "message": "Resumed activity; dropping state of: %s",
       "level": "INFO",
@@ -3505,6 +3559,12 @@
       "group": "WM_DEBUG_ORIENTATION",
       "at": "com\/android\/server\/wm\/TaskDisplayArea.java"
     },
+    "1393721079": {
+      "message": "Starting remote display change: from [rot = %d], to [%dx%d, rot = %d]",
+      "level": "VERBOSE",
+      "group": "WM_DEBUG_CONFIGURATION",
+      "at": "com\/android\/server\/wm\/RemoteDisplayChangeController.java"
+    },
     "1396893178": {
       "message": "createRootTask unknown displayId=%d",
       "level": "ERROR",
@@ -3955,12 +4015,6 @@
       "group": "WM_DEBUG_STARTING_WINDOW",
       "at": "com\/android\/server\/wm\/ActivityRecord.java"
     },
-    "1856211951": {
-      "message": "moveFocusableActivityToTop: already on top, activity=%s",
-      "level": "DEBUG",
-      "group": "WM_DEBUG_FOCUS",
-      "at": "com\/android\/server\/wm\/ActivityRecord.java"
-    },
     "1856783490": {
       "message": "resumeTopActivity: Restarting %s",
       "level": "DEBUG",
@@ -4171,6 +4225,12 @@
       "group": "WM_DEBUG_ANIM",
       "at": "com\/android\/server\/wm\/WindowManagerService.java"
     },
+    "2079410261": {
+      "message": "applyAnimation:  override requested, but it is prohibited by policy.",
+      "level": "ERROR",
+      "group": "WM_DEBUG_APP_TRANSITIONS_ANIM",
+      "at": "com\/android\/server\/wm\/AppTransition.java"
+    },
     "2083556954": {
       "message": "Set mOrientationChanging of %s",
       "level": "VERBOSE",
@@ -4224,12 +4284,6 @@
       "level": "VERBOSE",
       "group": "WM_DEBUG_ORIENTATION",
       "at": "com\/android\/server\/wm\/DisplayRotation.java"
-    },
-    "2137411379": {
-      "message": "applyAnimation: anim=%s animAttr=0x%x transit=%s isEntrance=%b Callers=%s",
-      "level": "VERBOSE",
-      "group": "WM_DEBUG_APP_TRANSITIONS_ANIM",
-      "at": "com\/android\/server\/wm\/AppTransition.java"
     }
   },
   "groups": {
diff --git a/data/fonts/fonts.xml b/data/fonts/fonts.xml
index 84e949a..f8c015f 100644
--- a/data/fonts/fonts.xml
+++ b/data/fonts/fonts.xml
@@ -932,7 +932,7 @@
         <font weight="700" style="normal" fallbackFor="serif">NotoSerifLao-Bold.ttf</font>
     </family>
     <family lang="und-Laoo" variant="compact">
-        <font weight="400" style="normal">NotoSansLaoUI-Regular.ttf
+        <font weight="400" style="normal" postScriptName="NotoSansLaoUI">NotoSansLaoUI-Regular.ttf
         </font>
         <font weight="700" style="normal">NotoSansLaoUI-Bold.ttf</font>
     </family>
diff --git a/graphics/java/android/graphics/ImageDecoder.java b/graphics/java/android/graphics/ImageDecoder.java
index 1629b6a..239621e 100644
--- a/graphics/java/android/graphics/ImageDecoder.java
+++ b/graphics/java/android/graphics/ImageDecoder.java
@@ -40,6 +40,7 @@
 import android.graphics.drawable.NinePatchDrawable;
 import android.net.Uri;
 import android.os.Build;
+import android.os.Trace;
 import android.system.ErrnoException;
 import android.system.Os;
 import android.util.DisplayMetrics;
@@ -223,13 +224,21 @@
         public ImageDecoder createImageDecoder(boolean preferAnimation) throws IOException {
             return nCreate(mData, mOffset, mLength, preferAnimation, this);
         }
+
+        @Override
+        public String toString() {
+            return "ByteArraySource{len=" + mLength + "}";
+        }
     }
 
     private static class ByteBufferSource extends Source {
         ByteBufferSource(@NonNull ByteBuffer buffer) {
             mBuffer = buffer;
+            mLength = mBuffer.limit() - mBuffer.position();
         }
+
         private final ByteBuffer mBuffer;
+        private final int mLength;
 
         @Override
         public ImageDecoder createImageDecoder(boolean preferAnimation) throws IOException {
@@ -241,6 +250,11 @@
             ByteBuffer buffer = mBuffer.slice();
             return nCreate(buffer, buffer.position(), buffer.limit(), preferAnimation, this);
         }
+
+        @Override
+        public String toString() {
+            return "ByteBufferSource{len=" + mLength + "}";
+        }
     }
 
     private static class ContentResolverSource extends Source {
@@ -285,6 +299,16 @@
 
             return createFromAssetFileDescriptor(assetFd, preferAnimation, this);
         }
+
+        @Override
+        public String toString() {
+            String uri = mUri.toString();
+            if (uri.length() > 90) {
+                // We want to keep the Uri usable - usually the authority and the end is important.
+                uri = uri.substring(0, 80) + ".." + uri.substring(uri.length() - 10);
+            }
+            return "ContentResolverSource{uri=" + uri + "}";
+        }
     }
 
     @NonNull
@@ -399,6 +423,11 @@
                 return createFromStream(is, false, preferAnimation, this);
             }
         }
+
+        @Override
+        public String toString() {
+            return "InputStream{s=" + mInputStream + "}";
+        }
     }
 
     /**
@@ -444,6 +473,11 @@
                 return createFromAsset(ais, preferAnimation, this);
             }
         }
+
+        @Override
+        public String toString() {
+            return "AssetInputStream{s=" + mAssetInputStream + "}";
+        }
     }
 
     private static class ResourceSource extends Source {
@@ -485,6 +519,17 @@
 
             return createFromAsset((AssetInputStream) is, preferAnimation, this);
         }
+
+        @Override
+        public String toString() {
+            // Try to return a human-readable name for debugging purposes.
+            try {
+                return "Resource{name=" + mResources.getResourceName(mResId) + "}";
+            } catch (Resources.NotFoundException e) {
+                // It's ok if we don't find it, fall back to ID.
+            }
+            return "Resource{id=" + mResId + "}";
+        }
     }
 
     /**
@@ -521,6 +566,11 @@
             InputStream is = mAssets.open(mFileName);
             return createFromAsset((AssetInputStream) is, preferAnimation, this);
         }
+
+        @Override
+        public String toString() {
+            return "AssetSource{file=" + mFileName + "}";
+        }
     }
 
     private static class FileSource extends Source {
@@ -534,6 +584,11 @@
         public ImageDecoder createImageDecoder(boolean preferAnimation) throws IOException {
             return createFromFile(mFile, preferAnimation, this);
         }
+
+        @Override
+        public String toString() {
+            return "FileSource{file=" + mFile + "}";
+        }
     }
 
     private static class CallableSource extends Source {
@@ -557,6 +612,11 @@
             }
             return createFromAssetFileDescriptor(assetFd, preferAnimation, this);
         }
+
+        @Override
+        public String toString() {
+            return "CallableSource{obj=" + mCallable.toString() + "}";
+        }
     }
 
     /**
@@ -1763,61 +1823,65 @@
     @NonNull
     private static Drawable decodeDrawableImpl(@NonNull Source src,
             @Nullable OnHeaderDecodedListener listener) throws IOException {
+        Trace.traceBegin(Trace.TRACE_TAG_RESOURCES, "ImageDecoder#decodeDrawable");
         try (ImageDecoder decoder = src.createImageDecoder(true /*preferAnimation*/)) {
             decoder.mSource = src;
             decoder.callHeaderDecoded(listener, src);
 
-            if (decoder.mUnpremultipliedRequired) {
-                // Though this could be supported (ignored) for opaque images,
-                // it seems better to always report this error.
-                throw new IllegalStateException("Cannot decode a Drawable " +
-                                                "with unpremultiplied pixels!");
-            }
-
-            if (decoder.mMutable) {
-                throw new IllegalStateException("Cannot decode a mutable " +
-                                                "Drawable!");
-            }
-
-            // this call potentially manipulates the decoder so it must be performed prior to
-            // decoding the bitmap and after decode set the density on the resulting bitmap
-            final int srcDensity = decoder.computeDensity(src);
-            if (decoder.mAnimated) {
-                // AnimatedImageDrawable calls postProcessAndRelease only if
-                // mPostProcessor exists.
-                ImageDecoder postProcessPtr = decoder.mPostProcessor == null ?
-                        null : decoder;
-                decoder.checkState(true);
-                Drawable d = new AnimatedImageDrawable(decoder.mNativePtr,
-                        postProcessPtr, decoder.mDesiredWidth,
-                        decoder.mDesiredHeight, decoder.getColorSpacePtr(),
-                        decoder.checkForExtended(), srcDensity,
-                        src.computeDstDensity(), decoder.mCropRect,
-                        decoder.mInputStream, decoder.mAssetFd);
-                // d has taken ownership of these objects.
-                decoder.mInputStream = null;
-                decoder.mAssetFd = null;
-                return d;
-            }
-
-            Bitmap bm = decoder.decodeBitmapInternal();
-            bm.setDensity(srcDensity);
-
-            Resources res = src.getResources();
-            byte[] np = bm.getNinePatchChunk();
-            if (np != null && NinePatch.isNinePatchChunk(np)) {
-                Rect opticalInsets = new Rect();
-                bm.getOpticalInsets(opticalInsets);
-                Rect padding = decoder.mOutPaddingRect;
-                if (padding == null) {
-                    padding = new Rect();
+            try (ImageDecoderSourceTrace unused = new ImageDecoderSourceTrace(decoder)) {
+                if (decoder.mUnpremultipliedRequired) {
+                    // Though this could be supported (ignored) for opaque images,
+                    // it seems better to always report this error.
+                    throw new IllegalStateException(
+                            "Cannot decode a Drawable with unpremultiplied pixels!");
                 }
-                nGetPadding(decoder.mNativePtr, padding);
-                return new NinePatchDrawable(res, bm, np, padding,
-                        opticalInsets, null);
-            }
 
-            return new BitmapDrawable(res, bm);
+                if (decoder.mMutable) {
+                    throw new IllegalStateException("Cannot decode a mutable Drawable!");
+                }
+
+                // this call potentially manipulates the decoder so it must be performed prior to
+                // decoding the bitmap and after decode set the density on the resulting bitmap
+                final int srcDensity = decoder.computeDensity(src);
+                if (decoder.mAnimated) {
+                    // AnimatedImageDrawable calls postProcessAndRelease only if
+                    // mPostProcessor exists.
+                    ImageDecoder postProcessPtr = decoder.mPostProcessor == null ? null : decoder;
+                    decoder.checkState(true);
+                    Drawable d = new AnimatedImageDrawable(decoder.mNativePtr,
+                            postProcessPtr, decoder.mDesiredWidth,
+                            decoder.mDesiredHeight, decoder.getColorSpacePtr(),
+                            decoder.checkForExtended(), srcDensity,
+                            src.computeDstDensity(), decoder.mCropRect,
+                            decoder.mInputStream, decoder.mAssetFd);
+                    // d has taken ownership of these objects.
+                    decoder.mInputStream = null;
+                    decoder.mAssetFd = null;
+                    return d;
+                }
+
+                Bitmap bm = decoder.decodeBitmapInternal();
+                bm.setDensity(srcDensity);
+
+                Resources res = src.getResources();
+                byte[] np = bm.getNinePatchChunk();
+                if (np != null && NinePatch.isNinePatchChunk(np)) {
+                    Rect opticalInsets = new Rect();
+                    bm.getOpticalInsets(opticalInsets);
+                    Rect padding = decoder.mOutPaddingRect;
+                    if (padding == null) {
+                        padding = new Rect();
+                    }
+                    nGetPadding(decoder.mNativePtr, padding);
+                    return new NinePatchDrawable(res, bm, np, padding,
+                            opticalInsets, null);
+                }
+
+                return new BitmapDrawable(res, bm);
+            }
+        } finally {
+            // Close the ImageDecoder#decode trace.
+            Trace.traceEnd(Trace.TRACE_TAG_RESOURCES);
         }
     }
 
@@ -1867,26 +1931,51 @@
     @NonNull
     private static Bitmap decodeBitmapImpl(@NonNull Source src,
             @Nullable OnHeaderDecodedListener listener) throws IOException {
+        Trace.traceBegin(Trace.TRACE_TAG_RESOURCES, "ImageDecoder#decodeBitmap");
         try (ImageDecoder decoder = src.createImageDecoder(false /*preferAnimation*/)) {
             decoder.mSource = src;
             decoder.callHeaderDecoded(listener, src);
+            try (ImageDecoderSourceTrace unused = new ImageDecoderSourceTrace(decoder)) {
+                // this call potentially manipulates the decoder so it must be performed prior to
+                // decoding the bitmap
+                final int srcDensity = decoder.computeDensity(src);
+                Bitmap bm = decoder.decodeBitmapInternal();
+                bm.setDensity(srcDensity);
 
-            // this call potentially manipulates the decoder so it must be performed prior to
-            // decoding the bitmap
-            final int srcDensity = decoder.computeDensity(src);
-            Bitmap bm = decoder.decodeBitmapInternal();
-            bm.setDensity(srcDensity);
+                Rect padding = decoder.mOutPaddingRect;
+                if (padding != null) {
+                    byte[] np = bm.getNinePatchChunk();
+                    if (np != null && NinePatch.isNinePatchChunk(np)) {
+                        nGetPadding(decoder.mNativePtr, padding);
+                    }
+                }
+                return bm;
+            }
+        } finally {
+            // Close the ImageDecoder#decode trace.
+            Trace.traceEnd(Trace.TRACE_TAG_RESOURCES);
+        }
+    }
 
-            Rect padding = decoder.mOutPaddingRect;
-            if (padding != null) {
-                byte[] np = bm.getNinePatchChunk();
-                if (np != null && NinePatch.isNinePatchChunk(np)) {
-                    nGetPadding(decoder.mNativePtr, padding);
+    /**
+     * This describes the decoder in traces to ease debugging. It has to be called after
+     * header has been decoded and width/height have been populated. It should be used
+     * inside a try-with-resources call to automatically complete the trace.
+     */
+    private static AutoCloseable traceDecoderSource(ImageDecoder decoder) {
+        final boolean resourceTracingEnabled = Trace.isTagEnabled(Trace.TRACE_TAG_RESOURCES);
+        if (resourceTracingEnabled) {
+            Trace.traceBegin(Trace.TRACE_TAG_RESOURCES, describeDecoderForTrace(decoder));
+        }
+
+        return new AutoCloseable() {
+            @Override
+            public void close() throws Exception {
+                if (resourceTracingEnabled) {
+                    Trace.traceEnd(Trace.TRACE_TAG_RESOURCES);
                 }
             }
-
-            return bm;
-        }
+        };
     }
 
     // This method may modify the decoder so it must be called prior to performing the decode
@@ -1994,6 +2083,66 @@
         }
     }
 
+    /**
+     * Returns a short string describing what passed ImageDecoder is loading -
+     * it reports image dimensions, desired dimensions (if any) and source resource.
+     *
+     * The string appears in perf traces to simplify search for slow or memory intensive
+     * image loads.
+     *
+     * Example: ID#w=300;h=250;dw=150;dh=150;src=Resource{name=@resource}
+     *
+     * @hide
+     */
+    private static String describeDecoderForTrace(@NonNull ImageDecoder decoder) {
+        StringBuilder builder = new StringBuilder();
+        // Source dimensions
+        builder.append("ID#w=");
+        builder.append(decoder.mWidth);
+        builder.append(";h=");
+        builder.append(decoder.mHeight);
+        // Desired dimensions (if present)
+        if (decoder.mDesiredWidth != decoder.mWidth
+                || decoder.mDesiredHeight != decoder.mHeight) {
+            builder.append(";dw=");
+            builder.append(decoder.mDesiredWidth);
+            builder.append(";dh=");
+            builder.append(decoder.mDesiredHeight);
+        }
+        // Source description
+        builder.append(";src=");
+        builder.append(decoder.mSource);
+        return builder.toString();
+    }
+
+    /**
+     * Records a trace with information about the source being decoded - dimensions,
+     * desired dimensions and source information.
+     *
+     * It significantly eases debugging of slow resource loads on main thread and
+     * possible large memory consumers.
+     *
+     * @hide
+     */
+    private static final class ImageDecoderSourceTrace implements AutoCloseable {
+
+        private final boolean mResourceTracingEnabled;
+
+        ImageDecoderSourceTrace(ImageDecoder decoder) {
+            mResourceTracingEnabled = Trace.isTagEnabled(Trace.TRACE_TAG_RESOURCES);
+            if (mResourceTracingEnabled) {
+                Trace.traceBegin(Trace.TRACE_TAG_RESOURCES, describeDecoderForTrace(decoder));
+            }
+        }
+
+        @Override
+        public void close() {
+            if (mResourceTracingEnabled) {
+                Trace.traceEnd(Trace.TRACE_TAG_RESOURCES);
+            }
+        }
+    }
+
     private static native ImageDecoder nCreate(long asset,
             boolean preferAnimation, Source src) throws IOException;
     private static native ImageDecoder nCreate(ByteBuffer buffer, int position, int limit,
diff --git a/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java b/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java
index 2f56b18..47de37d 100644
--- a/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java
+++ b/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java
@@ -26,8 +26,6 @@
 import android.content.res.Resources;
 import android.content.res.Resources.Theme;
 import android.content.res.TypedArray;
-import android.graphics.Bitmap;
-import android.graphics.BitmapShader;
 import android.graphics.BlendMode;
 import android.graphics.Canvas;
 import android.graphics.Color;
@@ -39,8 +37,6 @@
 import android.graphics.PixelFormat;
 import android.graphics.Rect;
 import android.graphics.Region;
-import android.graphics.Shader;
-import android.graphics.Shader.TileMode;
 import android.util.AttributeSet;
 import android.util.DisplayMetrics;
 import android.util.PathParser;
@@ -106,7 +102,8 @@
     private static final float DEFAULT_VIEW_PORT_SCALE = 1f / (1 + 2 * EXTRA_INSET_PERCENTAGE);
 
     /**
-     * Clip path defined in R.string.config_icon_mask.
+     * Unused path.
+     * TODO: Remove once the layoutLib is updated
      */
     private static Path sMask;
 
@@ -114,9 +111,10 @@
      * Scaled mask based on the view bounds.
      */
     private final Path mMask;
-    private final Path mMaskScaleOnly;
+    private final Path mMaskTransformed;
     private final Matrix mMaskMatrix;
     private final Region mTransparentRegion;
+    private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
 
     /**
      * Indices used to access {@link #mLayerState.mChildDrawable} array for foreground and
@@ -131,19 +129,10 @@
      */
     LayerState mLayerState;
 
-    private Shader mLayersShader;
-    private Bitmap mLayersBitmap;
-
     private final Rect mTmpOutRect = new Rect();
     private Rect mHotspotBounds;
     private boolean mMutated;
 
-    private boolean mSuspendChildInvalidation;
-    private boolean mChildRequestedInvalidation;
-    private final Canvas mCanvas;
-    private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG |
-        Paint.FILTER_BITMAP_FLAG);
-
     /**
      * Constructor used for xml inflation.
      */
@@ -157,19 +146,16 @@
      */
     AdaptiveIconDrawable(@Nullable LayerState state, @Nullable Resources res) {
         mLayerState = createConstantState(state, res);
-        // config_icon_mask from context bound resource may have been chaged using
+        // config_icon_mask from context bound resource may have been changed using
         // OverlayManager. Read that one first.
         Resources r = ActivityThread.currentActivityThread() == null
                 ? Resources.getSystem()
                 : ActivityThread.currentActivityThread().getApplication().getResources();
-        // TODO: either make sMask update only when config_icon_mask changes OR
-        // get rid of it all-together in layoutlib
-        sMask = PathParser.createPathFromPathData(r.getString(R.string.config_icon_mask));
-        mMask = new Path(sMask);
-        mMaskScaleOnly = new Path(mMask);
+        mMask = PathParser.createPathFromPathData(r.getString(R.string.config_icon_mask));
+        mMaskTransformed = new Path();
         mMaskMatrix = new Matrix();
-        mCanvas = new Canvas();
         mTransparentRegion = new Region();
+        mPaint.setColor(Color.BLACK);
     }
 
     private ChildDrawable createChildDrawable(Drawable drawable) {
@@ -280,7 +266,7 @@
      * @return the mask path object used to clip the drawable
      */
     public Path getIconMask() {
-        return mMask;
+        return mMaskTransformed;
     }
 
     /**
@@ -322,92 +308,47 @@
         if (bounds.isEmpty()) {
             return;
         }
-        updateLayerBounds(bounds);
-    }
-
-    private void updateLayerBounds(Rect bounds) {
-        if (bounds.isEmpty()) {
-            return;
-        }
-        try {
-            suspendChildInvalidation();
-            updateLayerBoundsInternal(bounds);
-            updateMaskBoundsInternal(bounds);
-        } finally {
-            resumeChildInvalidation();
-        }
-    }
-
-    /**
-     * Set the child layer bounds bigger than the view port size by {@link #DEFAULT_VIEW_PORT_SCALE}
-     */
-    private void updateLayerBoundsInternal(Rect bounds) {
-        int cX = bounds.width() / 2;
-        int cY = bounds.height() / 2;
+        // Set the child layer bounds bigger than the view port size
+        // by {@link #DEFAULT_VIEW_PORT_SCALE}
+        float cX = bounds.exactCenterX();
+        float cY = bounds.exactCenterY();
+        float insetWidth = bounds.width() / (DEFAULT_VIEW_PORT_SCALE * 2);
+        float insetHeight = bounds.height() / (DEFAULT_VIEW_PORT_SCALE * 2);
+        final Rect outRect = mTmpOutRect;
+        outRect.set(
+                (int) (cX - insetWidth),
+                (int) (cY - insetHeight),
+                (int) (cX + insetWidth),
+                (int) (cY + insetHeight));
 
         for (int i = 0, count = mLayerState.N_CHILDREN; i < count; i++) {
             final ChildDrawable r = mLayerState.mChildren[i];
-            final Drawable d = r.mDrawable;
-            if (d == null) {
-                continue;
+            if (r.mDrawable != null) {
+                r.mDrawable.setBounds(outRect);
             }
-
-            int insetWidth = (int) (bounds.width() / (DEFAULT_VIEW_PORT_SCALE * 2));
-            int insetHeight = (int) (bounds.height() / (DEFAULT_VIEW_PORT_SCALE * 2));
-            final Rect outRect = mTmpOutRect;
-            outRect.set(cX - insetWidth, cY - insetHeight, cX + insetWidth, cY + insetHeight);
-
-            d.setBounds(outRect);
-        }
-    }
-
-    private void updateMaskBoundsInternal(Rect b) {
-        // reset everything that depends on the view bounds
-        mMaskMatrix.setScale(b.width() / MASK_SIZE, b.height() / MASK_SIZE);
-        sMask.transform(mMaskMatrix, mMaskScaleOnly);
-
-        mMaskMatrix.postTranslate(b.left, b.top);
-        sMask.transform(mMaskMatrix, mMask);
-
-        if (mLayersBitmap == null || mLayersBitmap.getWidth() != b.width()
-                || mLayersBitmap.getHeight() != b.height()) {
-            mLayersBitmap = Bitmap.createBitmap(b.width(), b.height(), Bitmap.Config.ARGB_8888);
         }
 
-        mPaint.setShader(null);
+        // Update the clipping mask
+        mMaskMatrix.setScale(bounds.width() / MASK_SIZE, bounds.height() / MASK_SIZE);
+        mMaskMatrix.postTranslate(bounds.left, bounds.top);
+        mMask.transform(mMaskMatrix, mMaskTransformed);
+
+        // Clear the transparent region, it is calculated lazily
         mTransparentRegion.setEmpty();
-        mLayersShader = null;
     }
 
     @Override
     public void draw(Canvas canvas) {
-        if (mLayersBitmap == null) {
-            return;
+        int saveCount = canvas.save();
+        canvas.clipPath(mMaskTransformed);
+        canvas.drawPaint(mPaint);
+        if (mLayerState.mChildren[BACKGROUND_ID].mDrawable != null) {
+            mLayerState.mChildren[BACKGROUND_ID].mDrawable.draw(canvas);
         }
-        if (mLayersShader == null) {
-            mCanvas.setBitmap(mLayersBitmap);
-            mCanvas.drawColor(Color.BLACK);
-            if (mLayerState.mChildren[BACKGROUND_ID].mDrawable != null) {
-                mLayerState.mChildren[BACKGROUND_ID].mDrawable.draw(mCanvas);
-            }
-            if (mLayerState.mChildren[FOREGROUND_ID].mDrawable != null) {
-                mLayerState.mChildren[FOREGROUND_ID].mDrawable.draw(mCanvas);
-            }
-            mLayersShader = new BitmapShader(mLayersBitmap, TileMode.CLAMP, TileMode.CLAMP);
-            mPaint.setShader(mLayersShader);
+        if (mLayerState.mChildren[FOREGROUND_ID].mDrawable != null) {
+            mLayerState.mChildren[FOREGROUND_ID].mDrawable.draw(canvas);
         }
-        if (mMaskScaleOnly != null) {
-            Rect bounds = getBounds();
-            canvas.translate(bounds.left, bounds.top);
-            canvas.drawPath(mMaskScaleOnly, mPaint);
-            canvas.translate(-bounds.left, -bounds.top);
-        }
-    }
-
-    @Override
-    public void invalidateSelf() {
-        mLayersShader = null;
-        super.invalidateSelf();
+        canvas.restoreToCount(saveCount);
     }
 
     @Override
@@ -418,10 +359,10 @@
     /** @hide */
     @TestApi
     public Region getSafeZone() {
-        mMaskMatrix.reset();
+        Path mask = getIconMask();
         mMaskMatrix.setScale(SAFEZONE_SCALE, SAFEZONE_SCALE, getBounds().centerX(), getBounds().centerY());
         Path p = new Path();
-        mMask.transform(mMaskMatrix, p);
+        mask.transform(mMaskMatrix, p);
         Region safezoneRegion = new Region(getBounds());
         safezoneRegion.setPath(p, safezoneRegion);
         return safezoneRegion;
@@ -600,37 +541,9 @@
         return false;
     }
 
-    /**
-     * Temporarily suspends child invalidation.
-     *
-     * @see #resumeChildInvalidation()
-     */
-    private void suspendChildInvalidation() {
-        mSuspendChildInvalidation = true;
-    }
-
-    /**
-     * Resumes child invalidation after suspension, immediately performing an
-     * invalidation if one was requested by a child during suspension.
-     *
-     * @see #suspendChildInvalidation()
-     */
-    private void resumeChildInvalidation() {
-        mSuspendChildInvalidation = false;
-
-        if (mChildRequestedInvalidation) {
-            mChildRequestedInvalidation = false;
-            invalidateSelf();
-        }
-    }
-
     @Override
     public void invalidateDrawable(@NonNull Drawable who) {
-        if (mSuspendChildInvalidation) {
-            mChildRequestedInvalidation = true;
-        } else {
-            invalidateSelf();
-        }
+        invalidateSelf();
     }
 
     @Override
@@ -714,6 +627,13 @@
     @Override
     public void setAlpha(int alpha) {
         mPaint.setAlpha(alpha);
+        final ChildDrawable[] array = mLayerState.mChildren;
+        for (int i = 0; i < mLayerState.N_CHILDREN; i++) {
+            final Drawable dr = array[i].mDrawable;
+            if (dr != null) {
+                dr.setAlpha(alpha);
+            }
+        }
     }
 
     @Override
@@ -816,10 +736,6 @@
             }
         }
 
-        if (changed) {
-            updateLayerBounds(getBounds());
-        }
-
         return changed;
     }
 
@@ -835,10 +751,6 @@
             }
         }
 
-        if (changed) {
-            updateLayerBounds(getBounds());
-        }
-
         return changed;
     }
 
@@ -979,6 +891,7 @@
         int mDensity;
 
         // The density to use when inflating/looking up the children drawables. A value of 0 means
+
         // use the system's density.
         int mSrcDensityOverride = 0;
 
diff --git a/graphics/java/android/graphics/drawable/RippleDrawable.java b/graphics/java/android/graphics/drawable/RippleDrawable.java
index 74cad1a..417a27d 100644
--- a/graphics/java/android/graphics/drawable/RippleDrawable.java
+++ b/graphics/java/android/graphics/drawable/RippleDrawable.java
@@ -321,6 +321,7 @@
         boolean pressed = false;
         boolean focused = false;
         boolean hovered = false;
+        boolean windowFocused = false;
 
         for (int state : stateSet) {
             if (state == R.attr.state_enabled) {
@@ -331,10 +332,12 @@
                 pressed = true;
             } else if (state == R.attr.state_hovered) {
                 hovered = true;
+            } else if (state == R.attr.state_window_focused) {
+                windowFocused = true;
             }
         }
         setRippleActive(enabled && pressed);
-        setBackgroundActive(hovered, focused, pressed);
+        setBackgroundActive(hovered, focused, pressed, windowFocused);
 
         return changed;
     }
@@ -358,7 +361,8 @@
         }
     }
 
-    private void setBackgroundActive(boolean hovered, boolean focused, boolean pressed) {
+    private void setBackgroundActive(boolean hovered, boolean focused, boolean pressed,
+            boolean windowFocused) {
         if (mState.mRippleStyle == STYLE_SOLID) {
             if (mBackground == null && (hovered || focused)) {
                 mBackground = new RippleBackground(this, mHotspotBounds, isBounded());
@@ -370,7 +374,7 @@
         } else {
             if (focused || hovered) {
                 if (!pressed) {
-                    enterPatternedBackgroundAnimation(focused, hovered);
+                    enterPatternedBackgroundAnimation(focused, hovered, windowFocused);
                 }
             } else {
                 exitPatternedBackgroundAnimation();
@@ -840,9 +844,14 @@
         invalidateSelf(false);
     }
 
-    private void enterPatternedBackgroundAnimation(boolean focused, boolean hovered) {
+    private void enterPatternedBackgroundAnimation(boolean focused, boolean hovered,
+            boolean windowFocused) {
         mBackgroundOpacity = 0;
-        mTargetBackgroundOpacity = focused ? .6f : hovered ? .2f : 0f;
+        if (focused) {
+            mTargetBackgroundOpacity = windowFocused ? .6f : .2f;
+        } else {
+            mTargetBackgroundOpacity = hovered ? .2f : 0f;
+        }
         if (mBackgroundAnimation != null) mBackgroundAnimation.cancel();
         // after cancel
         mRunBackgroundAnimation = true;
diff --git a/identity/java/android/security/identity/Util.java b/identity/java/android/security/identity/Util.java
index e56bd51..789ff06 100644
--- a/identity/java/android/security/identity/Util.java
+++ b/identity/java/android/security/identity/Util.java
@@ -20,12 +20,12 @@
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.math.BigInteger;
 import java.security.InvalidKeyException;
 import java.security.NoSuchAlgorithmException;
 import java.security.PublicKey;
 import java.security.interfaces.ECPublicKey;
 import java.security.spec.ECPoint;
-import java.util.Collection;
 
 import javax.crypto.Mac;
 import javax.crypto.spec.SecretKeySpec;
@@ -36,15 +36,6 @@
 public class Util {
     private static final String TAG = "Util";
 
-    static int[] integerCollectionToArray(Collection<Integer> collection) {
-        int[] result = new int[collection.size()];
-        int n = 0;
-        for (int item : collection) {
-            result[n++] = item;
-        }
-        return result;
-    }
-
     static byte[] stripLeadingZeroes(byte[] value) {
         int n = 0;
         while (n < value.length && value[n] == 0) {
@@ -61,15 +52,47 @@
 
     static byte[] publicKeyEncodeUncompressedForm(PublicKey publicKey) {
         ECPoint w = ((ECPublicKey) publicKey).getW();
-        // X and Y are always positive so for interop we remove any leading zeroes
-        // inserted by the BigInteger encoder.
-        byte[] x = stripLeadingZeroes(w.getAffineX().toByteArray());
-        byte[] y = stripLeadingZeroes(w.getAffineY().toByteArray());
+        BigInteger x = w.getAffineX();
+        BigInteger y = w.getAffineY();
+        if (x.compareTo(BigInteger.ZERO) < 0) {
+            throw new RuntimeException("X is negative");
+        }
+        if (y.compareTo(BigInteger.ZERO) < 0) {
+            throw new RuntimeException("Y is negative");
+        }
         try {
             ByteArrayOutputStream baos = new ByteArrayOutputStream();
             baos.write(0x04);
-            baos.write(x);
-            baos.write(y);
+
+            // Each coordinate may be encoded in 33*, 32, or fewer bytes.
+            //
+            //  * : it can be 33 bytes because toByteArray() guarantees "The array will contain the
+            //      minimum number of bytes required to represent this BigInteger, including at
+            //      least one sign bit, which is (ceil((this.bitLength() + 1)/8))" which means that
+            //      the MSB is always 0x00. This is taken care of by calling calling
+            //      stripLeadingZeroes().
+            //
+            // We need the encoding to be exactly 32 bytes since according to RFC 5480 section 2.2
+            // and SEC 1: Elliptic Curve Cryptography section 2.3.3 the encoding is 0x04 | X | Y
+            // where X and Y are encoded in exactly 32 byte, big endian integer values each.
+            //
+            byte[] xBytes = stripLeadingZeroes(x.toByteArray());
+            if (xBytes.length > 32) {
+                throw new RuntimeException("xBytes is " + xBytes.length + " which is unexpected");
+            }
+            for (int n = 0; n < 32 - xBytes.length; n++) {
+                baos.write(0x00);
+            }
+            baos.write(xBytes);
+
+            byte[] yBytes = stripLeadingZeroes(y.toByteArray());
+            if (yBytes.length > 32) {
+                throw new RuntimeException("yBytes is " + yBytes.length + " which is unexpected");
+            }
+            for (int n = 0; n < 32 - yBytes.length; n++) {
+                baos.write(0x00);
+            }
+            baos.write(yBytes);
             return baos.toByteArray();
         } catch (IOException e) {
             throw new RuntimeException("Unexpected IOException", e);
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/common/CommonFoldingFeature.java b/libs/WindowManager/Jetpack/src/androidx/window/common/CommonFoldingFeature.java
index 921552b..68ff806 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/common/CommonFoldingFeature.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/common/CommonFoldingFeature.java
@@ -199,7 +199,7 @@
             throw new IllegalArgumentException(
                     "Display feature rectangle cannot have zero width and height simultaneously.");
         }
-        this.mRect = rect;
+        this.mRect = new Rect(rect);
     }
 
     /** Returns the type of the feature. */
@@ -217,7 +217,7 @@
     /** Returns the bounds of the feature. */
     @NonNull
     public Rect getRect() {
-        return mRect;
+        return new Rect(mRect);
     }
 
     @Override
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/common/DeviceStateManagerFoldingFeatureProducer.java b/libs/WindowManager/Jetpack/src/androidx/window/common/DeviceStateManagerFoldingFeatureProducer.java
index fdcb7be..cc2bb63 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/common/DeviceStateManagerFoldingFeatureProducer.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/common/DeviceStateManagerFoldingFeatureProducer.java
@@ -22,7 +22,6 @@
 import static androidx.window.common.CommonFoldingFeature.parseListFromString;
 
 import android.annotation.NonNull;
-import android.annotation.Nullable;
 import android.content.Context;
 import android.hardware.devicestate.DeviceStateManager;
 import android.hardware.devicestate.DeviceStateManager.DeviceStateCallback;
@@ -30,22 +29,25 @@
 import android.util.Log;
 import android.util.SparseIntArray;
 
+import androidx.window.util.AcceptOnceConsumer;
 import androidx.window.util.BaseDataProducer;
-import androidx.window.util.DataProducer;
 
 import com.android.internal.R;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
+import java.util.function.Consumer;
 
 /**
- * An implementation of {@link androidx.window.util.DataProducer} that returns the device's posture
- * by mapping the state returned from {@link DeviceStateManager} to values provided in the resources
- * config at {@link R.array#config_device_state_postures}.
+ * An implementation of {@link androidx.window.util.BaseDataProducer} that returns
+ * the device's posture by mapping the state returned from {@link DeviceStateManager} to
+ * values provided in the resources' config at {@link R.array#config_device_state_postures}.
  */
-public final class DeviceStateManagerFoldingFeatureProducer extends
-        BaseDataProducer<List<CommonFoldingFeature>> {
+public final class DeviceStateManagerFoldingFeatureProducer
+        extends BaseDataProducer<List<CommonFoldingFeature>> {
     private static final String TAG =
             DeviceStateManagerFoldingFeatureProducer.class.getSimpleName();
     private static final boolean DEBUG = false;
@@ -54,15 +56,11 @@
 
     private int mCurrentDeviceState = INVALID_DEVICE_STATE;
 
-    private final DeviceStateCallback mDeviceStateCallback = (state) -> {
-        mCurrentDeviceState = state;
-        notifyDataChanged();
-    };
     @NonNull
-    private final DataProducer<String> mRawFoldSupplier;
+    private final BaseDataProducer<String> mRawFoldSupplier;
 
     public DeviceStateManagerFoldingFeatureProducer(@NonNull Context context,
-            @NonNull DataProducer<String> rawFoldSupplier) {
+            @NonNull BaseDataProducer<String> rawFoldSupplier) {
         mRawFoldSupplier = rawFoldSupplier;
         String[] deviceStatePosturePairs = context.getResources()
                 .getStringArray(R.array.config_device_state_postures);
@@ -70,7 +68,8 @@
             String[] deviceStatePostureMapping = deviceStatePosturePair.split(":");
             if (deviceStatePostureMapping.length != 2) {
                 if (DEBUG) {
-                    Log.e(TAG, "Malformed device state posture pair: " + deviceStatePosturePair);
+                    Log.e(TAG, "Malformed device state posture pair: "
+                            + deviceStatePosturePair);
                 }
                 continue;
             }
@@ -82,7 +81,8 @@
                 posture = Integer.parseInt(deviceStatePostureMapping[1]);
             } catch (NumberFormatException e) {
                 if (DEBUG) {
-                    Log.e(TAG, "Failed to parse device state or posture: " + deviceStatePosturePair,
+                    Log.e(TAG, "Failed to parse device state or posture: "
+                                    + deviceStatePosturePair,
                             e);
                 }
                 continue;
@@ -92,32 +92,95 @@
         }
 
         if (mDeviceStateToPostureMap.size() > 0) {
-            context.getSystemService(DeviceStateManager.class)
-                    .registerCallback(context.getMainExecutor(), mDeviceStateCallback);
+            DeviceStateCallback deviceStateCallback = (state) -> {
+                mCurrentDeviceState = state;
+                mRawFoldSupplier.getData(this::notifyFoldingFeatureChange);
+            };
+            Objects.requireNonNull(context.getSystemService(DeviceStateManager.class))
+                    .registerCallback(context.getMainExecutor(), deviceStateCallback);
         }
     }
 
-    @Override
-    @Nullable
-    public Optional<List<CommonFoldingFeature>> getData() {
-        final int globalHingeState = globalHingeState();
-        Optional<String> displayFeaturesString = mRawFoldSupplier.getData();
-        if (displayFeaturesString.isEmpty() || TextUtils.isEmpty(displayFeaturesString.get())) {
-            return Optional.empty();
+    /**
+     * Add a callback to mCallbacks if there is no device state. This callback will be run
+     * once a device state is set. Otherwise,run the callback immediately.
+     */
+    private void runCallbackWhenValidState(@NonNull Consumer<List<CommonFoldingFeature>> callback,
+            String displayFeaturesString) {
+        if (isCurrentStateValid()) {
+            callback.accept(calculateFoldingFeature(displayFeaturesString));
+        } else {
+            // This callback will be added to mCallbacks and removed once it runs once.
+            AcceptOnceConsumer<List<CommonFoldingFeature>> singleRunCallback =
+                    new AcceptOnceConsumer<>(this, callback);
+            addDataChangedCallback(singleRunCallback);
         }
-        return Optional.of(parseListFromString(displayFeaturesString.get(), globalHingeState));
+    }
+
+    /**
+     * Checks to find {@link DeviceStateManagerFoldingFeatureProducer#mCurrentDeviceState} in the
+     * {@link DeviceStateManagerFoldingFeatureProducer#mDeviceStateToPostureMap} which was
+     * initialized in the constructor of {@link DeviceStateManagerFoldingFeatureProducer}.
+     * Returns a boolean value of whether the device state is valid.
+     */
+    private boolean isCurrentStateValid() {
+        // If the device state is not found in the map, indexOfKey returns a negative number.
+        return mDeviceStateToPostureMap.indexOfKey(mCurrentDeviceState) >= 0;
     }
 
     @Override
-    protected void onListenersChanged(Set<Runnable> callbacks) {
+    protected void onListenersChanged(
+            @NonNull Set<Consumer<List<CommonFoldingFeature>>> callbacks) {
         super.onListenersChanged(callbacks);
         if (callbacks.isEmpty()) {
-            mRawFoldSupplier.removeDataChangedCallback(this::notifyDataChanged);
+            mCurrentDeviceState = INVALID_DEVICE_STATE;
+            mRawFoldSupplier.removeDataChangedCallback(this::notifyFoldingFeatureChange);
         } else {
-            mRawFoldSupplier.addDataChangedCallback(this::notifyDataChanged);
+            mRawFoldSupplier.addDataChangedCallback(this::notifyFoldingFeatureChange);
         }
     }
 
+    @NonNull
+    @Override
+    public Optional<List<CommonFoldingFeature>> getCurrentData() {
+        Optional<String> displayFeaturesString = mRawFoldSupplier.getCurrentData();
+        if (!isCurrentStateValid()) {
+            return Optional.empty();
+        } else {
+            return displayFeaturesString.map(this::calculateFoldingFeature);
+        }
+    }
+
+    /**
+     * Adds the data to the storeFeaturesConsumer when the data is ready.
+     * @param storeFeaturesConsumer a consumer to collect the data when it is first available.
+     */
+    public void getData(Consumer<List<CommonFoldingFeature>> storeFeaturesConsumer) {
+        mRawFoldSupplier.getData((String displayFeaturesString) -> {
+            if (TextUtils.isEmpty(displayFeaturesString)) {
+                storeFeaturesConsumer.accept(new ArrayList<>());
+            } else {
+                runCallbackWhenValidState(storeFeaturesConsumer, displayFeaturesString);
+            }
+        });
+    }
+
+    private void notifyFoldingFeatureChange(String displayFeaturesString) {
+        if (!isCurrentStateValid()) {
+            return;
+        }
+        if (TextUtils.isEmpty(displayFeaturesString)) {
+            notifyDataChanged(new ArrayList<>());
+        } else {
+            notifyDataChanged(calculateFoldingFeature(displayFeaturesString));
+        }
+    }
+
+    private List<CommonFoldingFeature> calculateFoldingFeature(String displayFeaturesString) {
+        final int globalHingeState = globalHingeState();
+        return parseListFromString(displayFeaturesString, globalHingeState);
+    }
+
     private int globalHingeState() {
         return mDeviceStateToPostureMap.get(mCurrentDeviceState, COMMON_STATE_UNKNOWN);
     }
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/common/RawFoldingFeatureProducer.java b/libs/WindowManager/Jetpack/src/androidx/window/common/RawFoldingFeatureProducer.java
index 69ad1ba..7906342 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/common/RawFoldingFeatureProducer.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/common/RawFoldingFeatureProducer.java
@@ -32,6 +32,7 @@
 
 import java.util.Optional;
 import java.util.Set;
+import java.util.function.Consumer;
 
 /**
  * Implementation of {@link androidx.window.util.DataProducer} that produces a
@@ -40,7 +41,7 @@
  * settings where the {@link String} property is saved with the key
  * {@link RawFoldingFeatureProducer#DISPLAY_FEATURES}. If this value is null or empty then the
  * value in {@link android.content.res.Resources} is used. If both are empty then
- * {@link RawFoldingFeatureProducer#getData()} returns an empty object.
+ * {@link RawFoldingFeatureProducer#getData} returns an empty object.
  * {@link RawFoldingFeatureProducer} listens to changes in the setting so that it can override
  * the system {@link CommonFoldingFeature} data.
  */
@@ -63,12 +64,13 @@
 
     @Override
     @NonNull
-    public Optional<String> getData() {
+    public void getData(Consumer<String> dataConsumer) {
         String displayFeaturesString = getFeatureString();
         if (displayFeaturesString == null) {
-            return Optional.empty();
+            dataConsumer.accept("");
+        } else {
+            dataConsumer.accept(displayFeaturesString);
         }
-        return Optional.of(displayFeaturesString);
     }
 
     /**
@@ -84,7 +86,7 @@
     }
 
     @Override
-    protected void onListenersChanged(Set<Runnable> callbacks) {
+    protected void onListenersChanged(Set<Consumer<String>> callbacks) {
         if (callbacks.isEmpty()) {
             unregisterObserversIfNeeded();
         } else {
@@ -92,6 +94,12 @@
         }
     }
 
+    @NonNull
+    @Override
+    public Optional<String> getCurrentData() {
+        return Optional.of(getFeatureString());
+    }
+
     /**
      * Registers settings observers, if needed. When settings observers are registered for this
      * producer callbacks for changes in data will be triggered.
@@ -125,8 +133,8 @@
         @Override
         public void onChange(boolean selfChange, Uri uri) {
             if (mDisplayFeaturesUri.equals(uri)) {
-                notifyDataChanged();
+                notifyDataChanged(getFeatureString());
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/JetpackTaskFragmentOrganizer.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/JetpackTaskFragmentOrganizer.java
index 3ff5315..d42fca2 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/JetpackTaskFragmentOrganizer.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/JetpackTaskFragmentOrganizer.java
@@ -51,12 +51,6 @@
     @VisibleForTesting
     final Map<IBinder, TaskFragmentInfo> mFragmentInfos = new ArrayMap<>();
 
-    /**
-     * Mapping from the client assigned unique token to the TaskFragment parent
-     * {@link Configuration}.
-     */
-    final Map<IBinder, Configuration> mFragmentParentConfigs = new ArrayMap<>();
-
     private final TaskFragmentCallback mCallback;
     @VisibleForTesting
     TaskFragmentAnimationController mAnimationController;
@@ -68,10 +62,10 @@
         void onTaskFragmentAppeared(@NonNull TaskFragmentInfo taskFragmentInfo);
         void onTaskFragmentInfoChanged(@NonNull TaskFragmentInfo taskFragmentInfo);
         void onTaskFragmentVanished(@NonNull TaskFragmentInfo taskFragmentInfo);
-        void onTaskFragmentParentInfoChanged(@NonNull IBinder fragmentToken,
-                @NonNull Configuration parentConfig);
+        void onTaskFragmentParentInfoChanged(int taskId, @NonNull Configuration parentConfig);
         void onActivityReparentToTask(int taskId, @NonNull Intent activityIntent,
                 @NonNull IBinder activityToken);
+        void onTaskFragmentError(@Nullable TaskFragmentInfo taskFragmentInfo, int opType);
     }
 
     /**
@@ -299,7 +293,6 @@
     @Override
     public void onTaskFragmentVanished(@NonNull TaskFragmentInfo taskFragmentInfo) {
         mFragmentInfos.remove(taskFragmentInfo.getFragmentToken());
-        mFragmentParentConfigs.remove(taskFragmentInfo.getFragmentToken());
 
         if (mCallback != null) {
             mCallback.onTaskFragmentVanished(taskFragmentInfo);
@@ -307,12 +300,9 @@
     }
 
     @Override
-    public void onTaskFragmentParentInfoChanged(
-            @NonNull IBinder fragmentToken, @NonNull Configuration parentConfig) {
-        mFragmentParentConfigs.put(fragmentToken, parentConfig);
-
+    public void onTaskFragmentParentInfoChanged(int taskId, @NonNull Configuration parentConfig) {
         if (mCallback != null) {
-            mCallback.onTaskFragmentParentInfoChanged(fragmentToken, parentConfig);
+            mCallback.onTaskFragmentParentInfoChanged(taskId, parentConfig);
         }
     }
 
@@ -323,4 +313,18 @@
             mCallback.onActivityReparentToTask(taskId, activityIntent, activityToken);
         }
     }
+
+    @Override
+    public void onTaskFragmentError(@NonNull IBinder errorCallbackToken,
+            @Nullable TaskFragmentInfo taskFragmentInfo,
+            int opType, @NonNull Throwable exception) {
+        if (taskFragmentInfo != null) {
+            final IBinder fragmentToken = taskFragmentInfo.getFragmentToken();
+            mFragmentInfos.put(fragmentToken, taskFragmentInfo);
+        }
+
+        if (mCallback != null) {
+            mCallback.onTaskFragmentError(taskFragmentInfo, opType);
+        }
+    }
 }
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java
index c9a0d7d9..dad0739 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java
@@ -16,8 +16,11 @@
 
 package androidx.window.extensions.embedding;
 
+import static android.app.ActivityManager.START_SUCCESS;
 import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
 import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
+import static android.window.WindowContainerTransaction.HierarchyOp.HIERARCHY_OP_TYPE_REPARENT_ACTIVITY_TO_TASK_FRAGMENT;
+import static android.window.WindowContainerTransaction.HierarchyOp.HIERARCHY_OP_TYPE_START_ACTIVITY_IN_TASK_FRAGMENT;
 
 import static androidx.window.extensions.embedding.SplitContainer.getFinishPrimaryWithSecondaryBehavior;
 import static androidx.window.extensions.embedding.SplitContainer.getFinishSecondaryWithPrimaryBehavior;
@@ -43,6 +46,7 @@
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.Looper;
+import android.os.SystemProperties;
 import android.util.ArraySet;
 import android.util.Log;
 import android.util.Pair;
@@ -70,6 +74,8 @@
 public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmentCallback,
         ActivityEmbeddingComponent {
     static final String TAG = "SplitController";
+    static final boolean ENABLE_SHELL_TRANSITIONS =
+            SystemProperties.getBoolean("persist.wm.debug.shell_transit", false);
 
     @VisibleForTesting
     @GuardedBy("mLock")
@@ -94,6 +100,7 @@
     private final List<SplitInfo> mLastReportedSplitStates = new ArrayList<>();
     private final Handler mHandler;
     private final Object mLock = new Object();
+    private final ActivityStartMonitor mActivityStartMonitor;
 
     public SplitController() {
         final MainThreadExecutor executor = new MainThreadExecutor();
@@ -105,7 +112,8 @@
                 new LifecycleCallbacks());
         // Intercept activity starts to route activities to new containers if necessary.
         Instrumentation instrumentation = activityThread.getInstrumentation();
-        instrumentation.addMonitor(new ActivityStartMonitor());
+        mActivityStartMonitor = new ActivityStartMonitor();
+        instrumentation.addMonitor(mActivityStartMonitor);
     }
 
     /** Updates the embedding rules applied to future activity launches. */
@@ -147,6 +155,9 @@
             container.setInfo(taskFragmentInfo);
             if (container.isFinished()) {
                 mPresenter.cleanupContainer(container, false /* shouldFinishDependent */);
+            } else {
+                // Update with the latest Task configuration.
+                mPresenter.updateContainer(container);
             }
             updateCallbackIfNecessary();
         }
@@ -225,19 +236,30 @@
     }
 
     @Override
-    public void onTaskFragmentParentInfoChanged(@NonNull IBinder fragmentToken,
-            @NonNull Configuration parentConfig) {
+    public void onTaskFragmentParentInfoChanged(int taskId, @NonNull Configuration parentConfig) {
         synchronized (mLock) {
-            final TaskFragmentContainer container = getContainer(fragmentToken);
-            if (container != null) {
-                onTaskConfigurationChanged(container.getTaskId(), parentConfig);
-                if (isInPictureInPicture(parentConfig)) {
-                    // No need to update presentation in PIP until the Task exit PIP.
-                    return;
-                }
-                mPresenter.updateContainer(container);
-                updateCallbackIfNecessary();
+            onTaskConfigurationChanged(taskId, parentConfig);
+            if (isInPictureInPicture(parentConfig)) {
+                // No need to update presentation in PIP until the Task exit PIP.
+                return;
             }
+            final TaskContainer taskContainer = getTaskContainer(taskId);
+            if (taskContainer == null || taskContainer.isEmpty()) {
+                Log.e(TAG, "onTaskFragmentParentInfoChanged on empty Task id=" + taskId);
+                return;
+            }
+            // Update all TaskFragments in the Task. Make a copy of the list since some may be
+            // removed on updating.
+            final List<TaskFragmentContainer> containers =
+                    new ArrayList<>(taskContainer.mContainers);
+            for (int i = containers.size() - 1; i >= 0; i--) {
+                final TaskFragmentContainer container = containers.get(i);
+                // Wait until onTaskFragmentAppeared to update new container.
+                if (!container.isFinished() && !container.isWaitingActivityAppear()) {
+                    mPresenter.updateContainer(container);
+                }
+            }
+            updateCallbackIfNecessary();
         }
     }
 
@@ -290,6 +312,37 @@
         }
     }
 
+    @Override
+    public void onTaskFragmentError(@Nullable TaskFragmentInfo taskFragmentInfo, int opType) {
+        synchronized (mLock) {
+            switch (opType) {
+                case HIERARCHY_OP_TYPE_START_ACTIVITY_IN_TASK_FRAGMENT:
+                case HIERARCHY_OP_TYPE_REPARENT_ACTIVITY_TO_TASK_FRAGMENT: {
+                    final TaskFragmentContainer container;
+                    if (taskFragmentInfo != null) {
+                        container = getContainer(taskFragmentInfo.getFragmentToken());
+                    } else {
+                        container = null;
+                    }
+                    if (container == null) {
+                        break;
+                    }
+
+                    // Update the latest taskFragmentInfo and perform necessary clean-up
+                    container.setInfo(taskFragmentInfo);
+                    container.clearPendingAppearedActivities();
+                    if (container.isEmpty()) {
+                        mPresenter.cleanupContainer(container, false /* shouldFinishDependent */);
+                    }
+                    break;
+                }
+                default:
+                    Log.e(TAG, "onTaskFragmentError: taskFragmentInfo = " + taskFragmentInfo
+                            + ", opType = " + opType);
+            }
+        }
+    }
+
     /** Called on receiving {@link #onTaskFragmentVanished(TaskFragmentInfo)} for cleanup. */
     private void cleanupTaskFragment(@NonNull IBinder taskFragmentToken) {
         for (int i = mTaskContainers.size() - 1; i >= 0; i--) {
@@ -332,6 +385,11 @@
      * bounds is large enough for at least one split rule.
      */
     private void updateAnimationOverride(@NonNull TaskContainer taskContainer) {
+        if (ENABLE_SHELL_TRANSITIONS) {
+            // TODO(b/207070762): cleanup with legacy app transition
+            // Animation will be handled by WM Shell with Shell transition enabled.
+            return;
+        }
         if (!taskContainer.isTaskBoundsInitialized()
                 || !taskContainer.isWindowingModeInitialized()) {
             // We don't know about the Task bounds/windowingMode yet.
@@ -381,6 +439,7 @@
      *         in a state that the caller shouldn't handle.
      */
     @VisibleForTesting
+    @GuardedBy("mLock")
     boolean resolveActivityToContainer(@NonNull Activity activity, boolean isOnReparent) {
         if (isInPictureInPicture(activity) || activity.isFinishing()) {
             // We don't embed activity when it is in PIP, or finishing. Return true since we don't
@@ -607,6 +666,7 @@
      * Checks if there is a rule to split the two activities. If there is one, puts them into split
      * and returns {@code true}. Otherwise, returns {@code false}.
      */
+    @GuardedBy("mLock")
     private boolean putActivitiesIntoSplitIfNecessary(@NonNull Activity primaryActivity,
             @NonNull Activity secondaryActivity) {
         final SplitPairRule splitRule = getSplitRule(primaryActivity, secondaryActivity);
@@ -793,6 +853,7 @@
      * Returns a container for the new activity intent to launch into as splitting with the primary
      * activity.
      */
+    @GuardedBy("mLock")
     @Nullable
     private TaskFragmentContainer getSecondaryContainerForSplitIfAny(
             @NonNull WindowContainerTransaction wct, @NonNull Activity primaryActivity,
@@ -865,6 +926,7 @@
      *                                  if needed.
      * @param taskId                    parent Task of the new TaskFragment.
      */
+    @GuardedBy("mLock")
     TaskFragmentContainer newContainer(@Nullable Activity pendingAppearedActivity,
             @Nullable Intent pendingAppearedIntent, @NonNull Activity activityInTask, int taskId) {
         if (activityInTask == null) {
@@ -1373,6 +1435,11 @@
         return ActivityThread.currentActivityThread().getActivity(activityToken);
     }
 
+    @VisibleForTesting
+    ActivityStartMonitor getActivityStartMonitor() {
+        return mActivityStartMonitor;
+    }
+
     /**
      * Gets the token of the initial TaskFragment that embedded this activity. Do not rely on it
      * after creation because the activity could be reparented.
@@ -1524,7 +1591,10 @@
      * A monitor that intercepts all activity start requests originating in the client process and
      * can amend them to target a specific task fragment to form a split.
      */
-    private class ActivityStartMonitor extends Instrumentation.ActivityMonitor {
+    @VisibleForTesting
+    class ActivityStartMonitor extends Instrumentation.ActivityMonitor {
+        @VisibleForTesting
+        Intent mCurrentIntent;
 
         @Override
         public Instrumentation.ActivityResult onStartActivity(@NonNull Context who,
@@ -1552,11 +1622,29 @@
                     // the dedicated container.
                     options.putBinder(ActivityOptions.KEY_LAUNCH_TASK_FRAGMENT_TOKEN,
                             launchedInTaskFragment.getTaskFragmentToken());
+                    mCurrentIntent = intent;
                 }
             }
 
             return super.onStartActivity(who, intent, options);
         }
+
+        @Override
+        public void onStartActivityResult(int result, @NonNull Bundle bOptions) {
+            super.onStartActivityResult(result, bOptions);
+            if (mCurrentIntent != null && result != START_SUCCESS) {
+                // Clear the pending appeared intent if the activity was not started successfully.
+                final IBinder token = bOptions.getBinder(
+                        ActivityOptions.KEY_LAUNCH_TASK_FRAGMENT_TOKEN);
+                if (token != null) {
+                    final TaskFragmentContainer container = getContainer(token);
+                    if (container != null) {
+                        container.clearPendingAppearedIntentIfNeeded(mCurrentIntent);
+                    }
+                }
+            }
+            mCurrentIntent = null;
+        }
     }
 
     /**
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationSpec.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationSpec.java
index 586ac1f..5cc496a 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationSpec.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationSpec.java
@@ -180,9 +180,18 @@
     Animation loadOpenAnimation(@NonNull RemoteAnimationTarget target,
             @NonNull Rect wholeAnimationBounds) {
         final boolean isEnter = target.mode != MODE_CLOSING;
-        final Animation animation = mTransitionAnimation.loadDefaultAnimationRes(isEnter
-                ? com.android.internal.R.anim.task_fragment_open_enter
-                : com.android.internal.R.anim.task_fragment_open_exit);
+        final Animation animation;
+        // Background color on TaskDisplayArea has already been set earlier in
+        // WindowContainer#getAnimationAdapter.
+        if (target.showBackdrop) {
+            animation = mTransitionAnimation.loadDefaultAnimationRes(isEnter
+                    ? com.android.internal.R.anim.task_fragment_clear_top_open_enter
+                    : com.android.internal.R.anim.task_fragment_clear_top_open_exit);
+        } else {
+            animation = mTransitionAnimation.loadDefaultAnimationRes(isEnter
+                    ? com.android.internal.R.anim.task_fragment_open_enter
+                    : com.android.internal.R.anim.task_fragment_open_exit);
+        }
         animation.initialize(target.localBounds.width(), target.localBounds.height(),
                 wholeAnimationBounds.width(), wholeAnimationBounds.height());
         animation.scaleCurrentDuration(mTransitionAnimationScaleSetting);
@@ -192,9 +201,16 @@
     Animation loadCloseAnimation(@NonNull RemoteAnimationTarget target,
             @NonNull Rect wholeAnimationBounds) {
         final boolean isEnter = target.mode != MODE_CLOSING;
-        final Animation animation = mTransitionAnimation.loadDefaultAnimationRes(isEnter
-                ? com.android.internal.R.anim.task_fragment_close_enter
-                : com.android.internal.R.anim.task_fragment_close_exit);
+        final Animation animation;
+        if (target.showBackdrop) {
+            animation = mTransitionAnimation.loadDefaultAnimationRes(isEnter
+                    ? com.android.internal.R.anim.task_fragment_clear_top_close_enter
+                    : com.android.internal.R.anim.task_fragment_clear_top_close_exit);
+        } else {
+            animation = mTransitionAnimation.loadDefaultAnimationRes(isEnter
+                    ? com.android.internal.R.anim.task_fragment_close_enter
+                    : com.android.internal.R.anim.task_fragment_close_exit);
+        }
         animation.initialize(target.localBounds.width(), target.localBounds.height(),
                 wholeAnimationBounds.width(), wholeAnimationBounds.height());
         animation.scaleCurrentDuration(mTransitionAnimationScaleSetting);
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentContainer.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentContainer.java
index abf32a2..37f5b6d 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentContainer.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentContainer.java
@@ -193,11 +193,32 @@
         mPendingAppearedActivities.remove(pendingAppearedActivity);
     }
 
+    void clearPendingAppearedActivities() {
+        mPendingAppearedActivities.clear();
+        mPendingAppearedIntent = null;
+    }
+
     @Nullable
     Intent getPendingAppearedIntent() {
         return mPendingAppearedIntent;
     }
 
+    void setPendingAppearedIntent(@Nullable Intent intent) {
+        mPendingAppearedIntent = intent;
+    }
+
+    /**
+     * Clears the pending appeared Intent if it is the same as given Intent. Otherwise, the
+     * pending appeared Intent is cleared when TaskFragmentInfo is set and is not empty (has
+     * running activities).
+     */
+    void clearPendingAppearedIntentIfNeeded(@NonNull Intent intent) {
+        if (mPendingAppearedIntent == null || mPendingAppearedIntent != intent) {
+            return;
+        }
+        mPendingAppearedIntent = null;
+    }
+
     boolean hasActivity(@NonNull IBinder token) {
         if (mInfo != null && mInfo.getActivities().contains(token)) {
             return true;
@@ -230,13 +251,18 @@
 
     void setInfo(@NonNull TaskFragmentInfo info) {
         if (!mIsFinished && mInfo == null && info.isEmpty()) {
-            // onTaskFragmentAppeared with empty info. We will remove the TaskFragment if it is
-            // still empty after timeout.
+            // onTaskFragmentAppeared with empty info. We will remove the TaskFragment if no
+            // pending appeared intent/activities. Otherwise, wait and removing the TaskFragment if
+            // it is still empty after timeout.
             mAppearEmptyTimeout = () -> {
                 mAppearEmptyTimeout = null;
                 mController.onTaskFragmentAppearEmptyTimeout(this);
             };
-            mController.getHandler().postDelayed(mAppearEmptyTimeout, APPEAR_EMPTY_TIMEOUT_MS);
+            if (mPendingAppearedIntent != null || !mPendingAppearedActivities.isEmpty()) {
+                mController.getHandler().postDelayed(mAppearEmptyTimeout, APPEAR_EMPTY_TIMEOUT_MS);
+            } else {
+                mAppearEmptyTimeout.run();
+            }
         } else if (mAppearEmptyTimeout != null && !info.isEmpty()) {
             mController.getHandler().removeCallbacks(mAppearEmptyTimeout);
             mAppearEmptyTimeout = null;
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 c1d1c8e..6bfb16a 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponentImpl.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/layout/WindowLayoutComponentImpl.java
@@ -25,8 +25,7 @@
 
 import android.annotation.Nullable;
 import android.app.Activity;
-import android.app.ActivityManager;
-import android.app.ActivityManager.AppTask;
+import android.app.ActivityClient;
 import android.app.Application;
 import android.app.WindowConfiguration;
 import android.content.Context;
@@ -34,7 +33,6 @@
 import android.os.Bundle;
 import android.os.IBinder;
 import android.util.ArrayMap;
-import android.util.Log;
 
 import androidx.annotation.NonNull;
 import androidx.window.common.CommonFoldingFeature;
@@ -46,7 +44,6 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 import java.util.Set;
 import java.util.function.Consumer;
 
@@ -66,7 +63,7 @@
 
     private final DataProducer<List<CommonFoldingFeature>> mFoldingFeatureProducer;
 
-    public WindowLayoutComponentImpl(Context context) {
+    public WindowLayoutComponentImpl(@NonNull Context context) {
         ((Application) context.getApplicationContext())
                 .registerActivityLifecycleCallbacks(new NotifyOnConfigurationChanged());
         RawFoldingFeatureProducer foldingFeatureProducer = new RawFoldingFeatureProducer(context);
@@ -83,8 +80,12 @@
      */
     public void addWindowLayoutInfoListener(@NonNull Activity activity,
             @NonNull Consumer<WindowLayoutInfo> consumer) {
+        mFoldingFeatureProducer.getData((features) -> {
+            // Get the WindowLayoutInfo from the activity and pass the value to the layoutConsumer.
+            WindowLayoutInfo newWindowLayout = getWindowLayoutInfo(activity, features);
+            consumer.accept(newWindowLayout);
+        });
         mWindowLayoutChangeListeners.put(activity, consumer);
-        onDisplayFeaturesChanged();
     }
 
     /**
@@ -92,18 +93,8 @@
      *
      * @param consumer no longer interested in receiving updates to {@link WindowLayoutInfo}
      */
-    public void removeWindowLayoutInfoListener(
-            @NonNull Consumer<WindowLayoutInfo> consumer) {
+    public void removeWindowLayoutInfoListener(@NonNull Consumer<WindowLayoutInfo> consumer) {
         mWindowLayoutChangeListeners.values().remove(consumer);
-        onDisplayFeaturesChanged();
-    }
-
-    void updateWindowLayout(@NonNull Activity activity,
-            @NonNull WindowLayoutInfo newLayout) {
-        Consumer<WindowLayoutInfo> consumer = mWindowLayoutChangeListeners.get(activity);
-        if (consumer != null) {
-            consumer.accept(newLayout);
-        }
     }
 
     @NonNull
@@ -111,7 +102,6 @@
         return mWindowLayoutChangeListeners.keySet();
     }
 
-    @NonNull
     private boolean isListeningForLayoutChanges(IBinder token) {
         for (Activity activity: getActivitiesListeningForLayoutChanges()) {
             if (token.equals(activity.getWindow().getAttributes().token)) {
@@ -128,12 +118,12 @@
     /**
      * A convenience method to translate from the common feature state to the extensions feature
      * state.  More specifically, translates from {@link CommonFoldingFeature.State} to
-     * {@link FoldingFeature.STATE_FLAT} or {@link FoldingFeature.STATE_HALF_OPENED}. If it is not
+     * {@link FoldingFeature#STATE_FLAT} or {@link FoldingFeature#STATE_HALF_OPENED}. If it is not
      * possible to translate, then we will return a {@code null} value.
      *
      * @param state if it matches a value in {@link CommonFoldingFeature.State}, {@code null}
-     *              otherwise. @return a {@link FoldingFeature.STATE_FLAT} or
-     *              {@link FoldingFeature.STATE_HALF_OPENED} if the given state matches a value in
+     *              otherwise. @return a {@link FoldingFeature#STATE_FLAT} or
+     *              {@link FoldingFeature#STATE_HALF_OPENED} if the given state matches a value in
      *              {@link CommonFoldingFeature.State} and {@code null} otherwise.
      */
     @Nullable
@@ -147,17 +137,24 @@
         }
     }
 
-    private void onDisplayFeaturesChanged() {
+    private void onDisplayFeaturesChanged(List<CommonFoldingFeature> storedFeatures) {
         for (Activity activity : getActivitiesListeningForLayoutChanges()) {
-            WindowLayoutInfo newLayout = getWindowLayoutInfo(activity);
-            updateWindowLayout(activity, newLayout);
+            // Get the WindowLayoutInfo from the activity and pass the value to the layoutConsumer.
+            Consumer<WindowLayoutInfo> layoutConsumer = mWindowLayoutChangeListeners.get(activity);
+            WindowLayoutInfo newWindowLayout = getWindowLayoutInfo(activity, storedFeatures);
+            layoutConsumer.accept(newWindowLayout);
         }
     }
 
-    @NonNull
-    private WindowLayoutInfo getWindowLayoutInfo(@NonNull Activity activity) {
-        List<DisplayFeature> displayFeatures = getDisplayFeatures(activity);
-        return new WindowLayoutInfo(displayFeatures);
+    /**
+     * Translates the {@link DisplayFeature} into a {@link WindowLayoutInfo} when a
+     * valid state is found.
+     * @param activity a proxy for the {@link android.view.Window} that contains the
+     */
+    private WindowLayoutInfo getWindowLayoutInfo(
+            @NonNull Activity activity, List<CommonFoldingFeature> storedFeatures) {
+        List<DisplayFeature> displayFeatureList = getDisplayFeatures(activity, storedFeatures);
+        return new WindowLayoutInfo(displayFeatureList);
     }
 
     /**
@@ -175,67 +172,54 @@
      *
      * @param activity a proxy for the {@link android.view.Window} that contains the
      * {@link DisplayFeature}.
-     * @return a {@link List} of valid {@link DisplayFeature} that
      * are within the {@link android.view.Window} of the {@link Activity}
      */
-    private List<DisplayFeature> getDisplayFeatures(@NonNull Activity activity) {
+    private List<DisplayFeature> getDisplayFeatures(
+            @NonNull Activity activity, List<CommonFoldingFeature> storedFeatures) {
         List<DisplayFeature> features = new ArrayList<>();
+        if (!shouldReportDisplayFeatures(activity)) {
+            return features;
+        }
+
         int displayId = activity.getDisplay().getDisplayId();
-        if (displayId != DEFAULT_DISPLAY) {
-            Log.w(TAG, "This sample doesn't support display features on secondary displays");
-            return features;
-        }
+        for (CommonFoldingFeature baseFeature : storedFeatures) {
+            Integer state = convertToExtensionState(baseFeature.getState());
+            if (state == null) {
+                continue;
+            }
+            Rect featureRect = baseFeature.getRect();
+            rotateRectToDisplayRotation(displayId, featureRect);
+            transformToWindowSpaceRect(activity, featureRect);
 
-        if (isTaskInMultiWindowMode(activity)) {
-            // It is recommended not to report any display features in multi-window mode, since it
-            // won't be possible to synchronize the display feature positions with window movement.
-            return features;
-        }
-
-        Optional<List<CommonFoldingFeature>> storedFeatures = mFoldingFeatureProducer.getData();
-        if (storedFeatures.isPresent()) {
-            for (CommonFoldingFeature baseFeature : storedFeatures.get()) {
-                Integer state = convertToExtensionState(baseFeature.getState());
-                if (state == null) {
-                    continue;
-                }
-                Rect featureRect = baseFeature.getRect();
-                rotateRectToDisplayRotation(displayId, featureRect);
-                transformToWindowSpaceRect(activity, featureRect);
-
-                if (!isRectZero(featureRect)) {
-                    // TODO(b/228641877) Remove guarding if when fixed.
-                    features.add(new FoldingFeature(featureRect, baseFeature.getType(), state));
-                }
+            if (!isRectZero(featureRect)) {
+                // TODO(b/228641877): Remove guarding when fixed.
+                features.add(new FoldingFeature(featureRect, baseFeature.getType(), state));
             }
         }
         return features;
     }
 
     /**
-     * Checks whether the task associated with the activity is in multi-window. If task info is not
-     * available it defaults to {@code true}.
+     * Checks whether display features should be reported for the activity.
+     * TODO(b/238948678): Support reporting display features in all windowing modes.
      */
-    private boolean isTaskInMultiWindowMode(@NonNull Activity activity) {
-        final ActivityManager am = activity.getSystemService(ActivityManager.class);
-        if (am == null) {
-            return true;
+    private boolean shouldReportDisplayFeatures(@NonNull Activity activity) {
+        int displayId = activity.getDisplay().getDisplayId();
+        if (displayId != DEFAULT_DISPLAY) {
+            // Display features are not supported on secondary displays.
+            return false;
         }
-
-        final List<AppTask> appTasks = am.getAppTasks();
-        final int taskId = activity.getTaskId();
-        AppTask task = null;
-        for (AppTask t : appTasks) {
-            if (t.getTaskInfo().taskId == taskId) {
-                task = t;
-                break;
-            }
+        final int taskWindowingMode = ActivityClient.getInstance().getTaskWindowingMode(
+                activity.getActivityToken());
+        if (taskWindowingMode == -1) {
+            // If we cannot determine the task windowing mode for any reason, it is likely that we
+            // won't be able to determine its position correctly as well. DisplayFeatures' bounds
+            // in this case can't be computed correctly, so we should skip.
+            return false;
         }
-        if (task == null) {
-            // The task might be removed on the server already.
-            return true;
-        }
-        return WindowConfiguration.inMultiWindowMode(task.getTaskInfo().getWindowingMode());
+        // It is recommended not to report any display features in multi-window mode, since it
+        // won't be possible to synchronize the display feature positions with window movement.
+        return !WindowConfiguration.inMultiWindowMode(taskWindowingMode);
     }
 
     /**
@@ -262,7 +246,8 @@
         private void onDisplayFeaturesChangedIfListening(Activity activity) {
             IBinder token = activity.getWindow().getAttributes().token;
             if (token == null || isListeningForLayoutChanges(token)) {
-                onDisplayFeaturesChanged();
+                mFoldingFeatureProducer.getData(
+                        WindowLayoutComponentImpl.this::onDisplayFeaturesChanged);
             }
         }
     }
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/sidecar/SampleSidecarImpl.java b/libs/WindowManager/Jetpack/src/androidx/window/sidecar/SampleSidecarImpl.java
index 970f0a2..5bfb0eb 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/sidecar/SampleSidecarImpl.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/sidecar/SampleSidecarImpl.java
@@ -28,41 +28,42 @@
 import android.graphics.Rect;
 import android.os.Bundle;
 import android.os.IBinder;
-import android.util.Log;
 
 import androidx.annotation.NonNull;
 import androidx.window.common.CommonFoldingFeature;
 import androidx.window.common.DeviceStateManagerFoldingFeatureProducer;
 import androidx.window.common.EmptyLifecycleCallbacksAdapter;
 import androidx.window.common.RawFoldingFeatureProducer;
-import androidx.window.util.DataProducer;
+import androidx.window.util.BaseDataProducer;
 
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
-import java.util.Optional;
 
 /**
  * Reference implementation of androidx.window.sidecar OEM interface for use with
  * WindowManager Jetpack.
  */
 class SampleSidecarImpl extends StubSidecar {
-    private static final String TAG = "SampleSidecar";
-
-    private final DataProducer<List<CommonFoldingFeature>> mFoldingFeatureProducer;
-
+    private List<CommonFoldingFeature> mStoredFeatures = new ArrayList<>();
 
     SampleSidecarImpl(Context context) {
         ((Application) context.getApplicationContext())
                 .registerActivityLifecycleCallbacks(new NotifyOnConfigurationChanged());
-        DataProducer<String> settingsFeatureProducer = new RawFoldingFeatureProducer(context);
-        mFoldingFeatureProducer = new DeviceStateManagerFoldingFeatureProducer(context,
-                settingsFeatureProducer);
+        BaseDataProducer<String> settingsFeatureProducer = new RawFoldingFeatureProducer(context);
+        BaseDataProducer<List<CommonFoldingFeature>> foldingFeatureProducer =
+                new DeviceStateManagerFoldingFeatureProducer(context,
+                        settingsFeatureProducer);
 
-        mFoldingFeatureProducer.addDataChangedCallback(this::onDisplayFeaturesChanged);
+        foldingFeatureProducer.addDataChangedCallback(this::onDisplayFeaturesChanged);
     }
 
-    private void onDisplayFeaturesChanged() {
+    private void setStoredFeatures(List<CommonFoldingFeature> storedFeatures) {
+        mStoredFeatures = storedFeatures;
+    }
+
+    private void onDisplayFeaturesChanged(List<CommonFoldingFeature> storedFeatures) {
+        setStoredFeatures(storedFeatures);
         updateDeviceState(getDeviceState());
         for (IBinder windowToken : getWindowsListeningForLayoutChanges()) {
             SidecarWindowLayoutInfo newLayout = getWindowLayoutInfo(windowToken);
@@ -79,16 +80,16 @@
     }
 
     private int deviceStateFromFeature() {
-        List<CommonFoldingFeature> storedFeatures = mFoldingFeatureProducer.getData()
-                .orElse(Collections.emptyList());
-        for (int i = 0; i < storedFeatures.size(); i++) {
-            CommonFoldingFeature feature = storedFeatures.get(i);
+        for (int i = 0; i < mStoredFeatures.size(); i++) {
+            CommonFoldingFeature feature = mStoredFeatures.get(i);
             final int state = feature.getState();
             switch (state) {
                 case CommonFoldingFeature.COMMON_STATE_FLAT:
                     return SidecarDeviceState.POSTURE_OPENED;
                 case CommonFoldingFeature.COMMON_STATE_HALF_OPENED:
                     return SidecarDeviceState.POSTURE_HALF_OPENED;
+                case CommonFoldingFeature.COMMON_STATE_UNKNOWN:
+                    return SidecarDeviceState.POSTURE_UNKNOWN;
             }
         }
         return SidecarDeviceState.POSTURE_UNKNOWN;
@@ -109,7 +110,6 @@
     private List<SidecarDisplayFeature> getDisplayFeatures(@NonNull Activity activity) {
         int displayId = activity.getDisplay().getDisplayId();
         if (displayId != DEFAULT_DISPLAY) {
-            Log.w(TAG, "This sample doesn't support display features on secondary displays");
             return Collections.emptyList();
         }
 
@@ -119,18 +119,15 @@
             return Collections.emptyList();
         }
 
-        Optional<List<CommonFoldingFeature>> storedFeatures = mFoldingFeatureProducer.getData();
         List<SidecarDisplayFeature> features = new ArrayList<>();
-        if (storedFeatures.isPresent()) {
-            for (CommonFoldingFeature baseFeature : storedFeatures.get()) {
-                SidecarDisplayFeature feature = new SidecarDisplayFeature();
-                Rect featureRect = baseFeature.getRect();
-                rotateRectToDisplayRotation(displayId, featureRect);
-                transformToWindowSpaceRect(activity, featureRect);
-                feature.setRect(featureRect);
-                feature.setType(baseFeature.getType());
-                features.add(feature);
-            }
+        for (CommonFoldingFeature baseFeature : mStoredFeatures) {
+            SidecarDisplayFeature feature = new SidecarDisplayFeature();
+            Rect featureRect = baseFeature.getRect();
+            rotateRectToDisplayRotation(displayId, featureRect);
+            transformToWindowSpaceRect(activity, featureRect);
+            feature.setRect(featureRect);
+            feature.setType(baseFeature.getType());
+            features.add(feature);
         }
         return Collections.unmodifiableList(features);
     }
@@ -138,7 +135,7 @@
     @Override
     protected void onListenersChanged() {
         if (hasListeners()) {
-            onDisplayFeaturesChanged();
+            onDisplayFeaturesChanged(mStoredFeatures);
         }
     }
 
@@ -158,7 +155,7 @@
         private void onDisplayFeaturesChangedForActivity(@NonNull Activity activity) {
             IBinder token = activity.getWindow().getAttributes().token;
             if (token == null || mWindowLayoutChangeListenerTokens.contains(token)) {
-                onDisplayFeaturesChanged();
+                onDisplayFeaturesChanged(mStoredFeatures);
             }
         }
     }
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/util/AcceptOnceConsumer.java b/libs/WindowManager/Jetpack/src/androidx/window/util/AcceptOnceConsumer.java
new file mode 100644
index 0000000..7624b69
--- /dev/null
+++ b/libs/WindowManager/Jetpack/src/androidx/window/util/AcceptOnceConsumer.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.window.util;
+
+import android.annotation.NonNull;
+
+import java.util.function.Consumer;
+
+/**
+ * A base class that works with {@link BaseDataProducer} to add/remove a consumer that should
+ * only be used once when {@link BaseDataProducer#notifyDataChanged} is called.
+ * @param <T> The type of data this producer returns through {@link DataProducer#getData}.
+ */
+public class AcceptOnceConsumer<T> implements Consumer<T> {
+    private final Consumer<T> mCallback;
+    private final DataProducer<T> mProducer;
+
+    public AcceptOnceConsumer(@NonNull DataProducer<T> producer, @NonNull Consumer<T> callback) {
+        mProducer = producer;
+        mCallback = callback;
+    }
+
+    @Override
+    public void accept(@NonNull T t) {
+        mCallback.accept(t);
+        mProducer.removeDataChangedCallback(this);
+    }
+}
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/util/BaseDataProducer.java b/libs/WindowManager/Jetpack/src/androidx/window/util/BaseDataProducer.java
index 930db3b..0da44ac 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/util/BaseDataProducer.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/util/BaseDataProducer.java
@@ -19,38 +19,48 @@
 import androidx.annotation.NonNull;
 
 import java.util.LinkedHashSet;
+import java.util.Optional;
 import java.util.Set;
+import java.util.function.Consumer;
 
 /**
  * Base class that provides the implementation for the callback mechanism of the
  * {@link DataProducer} API.
  *
- * @param <T> The type of data this producer returns through {@link #getData()}.
+ * @param <T> The type of data this producer returns through {@link DataProducer#getData}.
  */
 public abstract class BaseDataProducer<T> implements DataProducer<T> {
-    private final Set<Runnable> mCallbacks = new LinkedHashSet<>();
+    private final Set<Consumer<T>> mCallbacks = new LinkedHashSet<>();
 
     @Override
-    public final void addDataChangedCallback(@NonNull Runnable callback) {
+    public final void addDataChangedCallback(@NonNull Consumer<T> callback) {
         mCallbacks.add(callback);
+        Optional<T> currentData = getCurrentData();
+        currentData.ifPresent(callback);
         onListenersChanged(mCallbacks);
     }
 
     @Override
-    public final void removeDataChangedCallback(@NonNull Runnable callback) {
+    public final void removeDataChangedCallback(@NonNull Consumer<T> callback) {
         mCallbacks.remove(callback);
         onListenersChanged(mCallbacks);
     }
 
-    protected void onListenersChanged(Set<Runnable> callbacks) {}
+    protected void onListenersChanged(Set<Consumer<T>> callbacks) {}
 
     /**
-     * Called to notify all registered callbacks that the data provided by {@link #getData()} has
-     * changed.
+     * @return the current data if available and {@code Optional.empty()} otherwise.
      */
-    protected void notifyDataChanged() {
-        for (Runnable callback : mCallbacks) {
-            callback.run();
+    @NonNull
+    public abstract Optional<T> getCurrentData();
+
+    /**
+     * Called to notify all registered consumers that the data provided
+     * by {@link DataProducer#getData} has changed.
+     */
+    protected void notifyDataChanged(T value) {
+        for (Consumer<T> callback : mCallbacks) {
+            callback.accept(value);
         }
     }
-}
+}
\ No newline at end of file
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/util/DataProducer.java b/libs/WindowManager/Jetpack/src/androidx/window/util/DataProducer.java
index d4d1a23..ec301dc 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/util/DataProducer.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/util/DataProducer.java
@@ -18,26 +18,27 @@
 
 import android.annotation.NonNull;
 
-import java.util.Optional;
+import java.util.function.Consumer;
 
 /**
- * Produces data through {@link #getData()} and provides a mechanism for receiving a callback when
- * the data managed by the produces has changed.
+ * Produces data through {@link DataProducer#getData} and provides a mechanism for receiving
+ * a callback when the data managed by the produces has changed.
  *
- * @param <T> The type of data this producer returns through {@link #getData()}.
+ * @param <T> The type of data this producer returns through {@link DataProducer#getData}.
  */
 public interface DataProducer<T> {
     /**
-     * Returns the data currently stored in the provider, or {@link Optional#empty()} if the
-     * provider has no data.
+     * Emits the first available data at that point in time.
+     * @param dataConsumer a {@link Consumer} that will receive one value.
      */
-    Optional<T> getData();
+    void getData(@NonNull Consumer<T> dataConsumer);
 
     /**
-     * Adds a callback to be notified when the data returned from {@link #getData()} has changed.
+     * Adds a callback to be notified when the data returned
+     * from {@link DataProducer#getData} has changed.
      */
-    void addDataChangedCallback(@NonNull Runnable callback);
+    void addDataChangedCallback(@NonNull Consumer<T> callback);
 
-    /** Removes a callback previously added with {@link #addDataChangedCallback(Runnable)}.  */
-    void removeDataChangedCallback(@NonNull Runnable callback);
+    /** Removes a callback previously added with {@link #addDataChangedCallback(Consumer)}. */
+    void removeDataChangedCallback(@NonNull Consumer<T> callback);
 }
diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/SplitControllerTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/SplitControllerTest.java
index ad496a9..4bc5033 100644
--- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/SplitControllerTest.java
+++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/SplitControllerTest.java
@@ -16,6 +16,7 @@
 
 package androidx.window.extensions.embedding;
 
+import static android.app.ActivityManager.START_CANCELED;
 import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
 import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
 
@@ -293,6 +294,26 @@
     }
 
     @Test
+    public void testOnStartActivityResultError() {
+        final Intent intent = new Intent();
+        final TaskContainer taskContainer = new TaskContainer(TASK_ID);
+        final TaskFragmentContainer container = new TaskFragmentContainer(null /* activity */,
+                intent, taskContainer, mSplitController);
+        final SplitController.ActivityStartMonitor monitor =
+                mSplitController.getActivityStartMonitor();
+
+        container.setPendingAppearedIntent(intent);
+        final Bundle bundle = new Bundle();
+        bundle.putBinder(ActivityOptions.KEY_LAUNCH_TASK_FRAGMENT_TOKEN,
+                container.getTaskFragmentToken());
+        monitor.mCurrentIntent = intent;
+        doReturn(container).when(mSplitController).getContainer(any());
+
+        monitor.onStartActivityResult(START_CANCELED, bundle);
+        assertNull(container.getPendingAppearedIntent());
+    }
+
+    @Test
     public void testOnActivityCreated() {
         mSplitController.onActivityCreated(mActivity);
 
@@ -865,6 +886,8 @@
         assertSplitPair(activityBelow, mActivity, true /* matchParentBounds */);
     }
 
+    // Suppress GuardedBy warning on unit tests
+    @SuppressWarnings("GuardedBy")
     @Test
     public void testResolveActivityToContainer_minDimensions_shouldExpandSplitContainer() {
         final Activity primaryActivity = createMockActivity();
diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskFragmentContainerTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskFragmentContainerTest.java
index 28c2773..44c7e6c 100644
--- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskFragmentContainerTest.java
+++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskFragmentContainerTest.java
@@ -209,21 +209,21 @@
 
         assertNull(container.mAppearEmptyTimeout);
 
-        // Not set if it is not appeared empty.
-        final TaskFragmentInfo info = mock(TaskFragmentInfo.class);
-        doReturn(new ArrayList<>()).when(info).getActivities();
-        doReturn(false).when(info).isEmpty();
-        container.setInfo(info);
-
-        assertNull(container.mAppearEmptyTimeout);
-
         // Set timeout if the first info set is empty.
+        final TaskFragmentInfo info = mock(TaskFragmentInfo.class);
         container.mInfo = null;
         doReturn(true).when(info).isEmpty();
         container.setInfo(info);
 
         assertNotNull(container.mAppearEmptyTimeout);
 
+        // Not set if it is not appeared empty.
+        doReturn(new ArrayList<>()).when(info).getActivities();
+        doReturn(false).when(info).isEmpty();
+        container.setInfo(info);
+
+        assertNull(container.mAppearEmptyTimeout);
+
         // Remove timeout after the container becomes non-empty.
         doReturn(false).when(info).isEmpty();
         container.setInfo(info);
@@ -232,6 +232,7 @@
 
         // Running the timeout will call into SplitController.onTaskFragmentAppearEmptyTimeout.
         container.mInfo = null;
+        container.setPendingAppearedIntent(mIntent);
         doReturn(true).when(info).isEmpty();
         container.setInfo(info);
         container.mAppearEmptyTimeout.run();
diff --git a/libs/WindowManager/OWNERS b/libs/WindowManager/OWNERS
index 780e4c1..2c61df9 100644
--- a/libs/WindowManager/OWNERS
+++ b/libs/WindowManager/OWNERS
@@ -1,6 +1,3 @@
 set noparent
 
 include /services/core/java/com/android/server/wm/OWNERS
-
-# Give submodule owners in shell resource approval
-per-file Shell/res*/*/*.xml = hwwang@google.com, lbill@google.com, madym@google.com
diff --git a/libs/WindowManager/Shell/OWNERS b/libs/WindowManager/Shell/OWNERS
new file mode 100644
index 0000000..4b12590
--- /dev/null
+++ b/libs/WindowManager/Shell/OWNERS
@@ -0,0 +1,4 @@
+xutan@google.com
+
+# Give submodule owners in shell resource approval
+per-file res*/*/*.xml = hwwang@google.com, lbill@google.com, madym@google.com
diff --git a/libs/WindowManager/Shell/res/color/decor_button_dark_color.xml b/libs/WindowManager/Shell/res/color/decor_button_dark_color.xml
new file mode 100644
index 0000000..bf325bd
--- /dev/null
+++ b/libs/WindowManager/Shell/res/color/decor_button_dark_color.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.
+  -->
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+          xmlns:app="http://schemas.android.com/apk/res-auto">
+    <item app:state_task_focused="true" android:color="#FF000000" />
+    <item android:color="#33000000" />
+</selector>
diff --git a/libs/WindowManager/Shell/res/color/decor_button_light_color.xml b/libs/WindowManager/Shell/res/color/decor_button_light_color.xml
new file mode 100644
index 0000000..2e48bca
--- /dev/null
+++ b/libs/WindowManager/Shell/res/color/decor_button_light_color.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.
+  -->
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:app="http://schemas.android.com/apk/res-auto">
+    <item app:state_task_focused="true" android:color="#FFFFFFFF" />
+    <item android:color="#33FFFFFF" />
+</selector>
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/res/color/decor_caption_title_color.xml b/libs/WindowManager/Shell/res/color/decor_caption_title_color.xml
new file mode 100644
index 0000000..1ecc13e
--- /dev/null
+++ b/libs/WindowManager/Shell/res/color/decor_caption_title_color.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:app="http://schemas.android.com/apk/res-auto">
+     <!-- Fading the to 85% blackness -->
+    <item app:state_task_focused="true" android:color="#D8D8D8" />
+    <!-- Fading the to 95% blackness -->
+    <item android:color="#F2F2F2" />
+</selector>
diff --git a/libs/WindowManager/Shell/res/color/taskbar_background.xml b/libs/WindowManager/Shell/res/color/taskbar_background.xml
index 329e5b9b..b3d26029 100644
--- a/libs/WindowManager/Shell/res/color/taskbar_background.xml
+++ b/libs/WindowManager/Shell/res/color/taskbar_background.xml
@@ -14,6 +14,7 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
+<!-- Should be the same as in packages/apps/Launcher3/res/color-v31/taskbar_background.xml -->
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:color="@android:color/system_neutral1_500" android:lStar="35" />
+    <item android:color="@android:color/system_neutral1_500" android:lStar="15" />
 </selector>
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/res/color/unfold_transition_background.xml b/libs/WindowManager/Shell/res/color/unfold_transition_background.xml
deleted file mode 100644
index 63289a3..0000000
--- a/libs/WindowManager/Shell/res/color/unfold_transition_background.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?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.
--->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <!-- Matches taskbar color -->
-    <item android:color="@android:color/system_neutral2_500" android:lStar="35" />
-</selector>
diff --git a/libs/WindowManager/Shell/res/drawable/decor_caption_title.xml b/libs/WindowManager/Shell/res/drawable/decor_caption_title.xml
new file mode 100644
index 0000000..8207365
--- /dev/null
+++ b/libs/WindowManager/Shell/res/drawable/decor_caption_title.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.
+  -->
+<shape android:shape="rectangle"
+       android:tintMode="multiply"
+       android:tint="@color/decor_caption_title_color"
+       xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="?android:attr/colorPrimary" />
+</shape>
diff --git a/libs/WindowManager/Shell/res/drawable/decor_close_button_dark.xml b/libs/WindowManager/Shell/res/drawable/decor_close_button_dark.xml
new file mode 100644
index 0000000..f2f1a1d
--- /dev/null
+++ b/libs/WindowManager/Shell/res/drawable/decor_close_button_dark.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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="32.0dp"
+        android:height="32.0dp"
+        android:viewportWidth="32.0"
+        android:viewportHeight="32.0"
+        android:tint="@color/decor_button_dark_color"
+        >
+    <group android:scaleX="0.5"
+            android:scaleY="0.5"
+            android:translateX="8.0"
+            android:translateY="8.0" >
+        <path
+            android:fillColor="@android:color/white"
+            android:pathData="M6.9,4.0l-2.9,2.9 9.1,9.1 -9.1,9.200001 2.9,2.799999 9.1,-9.1 9.1,9.1 2.9,-2.799999 -9.1,-9.200001 9.1,-9.1 -2.9,-2.9 -9.1,9.2z"/>
+    </group>
+</vector>
diff --git a/libs/WindowManager/Shell/res/drawable/decor_maximize_button_dark.xml b/libs/WindowManager/Shell/res/drawable/decor_maximize_button_dark.xml
new file mode 100644
index 0000000..ab4e29a
--- /dev/null
+++ b/libs/WindowManager/Shell/res/drawable/decor_maximize_button_dark.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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="32.0dp"
+        android:height="32.0dp"
+        android:viewportWidth="32.0"
+        android:viewportHeight="32.0"
+        android:tint="@color/decor_button_dark_color">
+    <group android:scaleX="0.5"
+            android:scaleY="0.5"
+            android:translateX="8.0"
+            android:translateY="8.0" >
+        <path
+            android:fillColor="@android:color/white"
+            android:pathData="M2.0,4.0l0.0,16.0l28.0,0.0L30.0,4.0L2.0,4.0zM26.0,16.0L6.0,16.0L6.0,8.0l20.0,0.0L26.0,16.0z"/>
+        <path
+            android:fillColor="@android:color/white"
+            android:pathData="M2.0,24.0l28.0,0.0l0.0,4.0l-28.0,0.0z"/>
+    </group>
+</vector>
+
+
diff --git a/libs/WindowManager/Shell/res/layout/bubble_overflow_container.xml b/libs/WindowManager/Shell/res/layout/bubble_overflow_container.xml
index cb516cd..df5985c 100644
--- a/libs/WindowManager/Shell/res/layout/bubble_overflow_container.xml
+++ b/libs/WindowManager/Shell/res/layout/bubble_overflow_container.xml
@@ -30,7 +30,8 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_gravity="center_horizontal"
-        android:gravity="center"/>
+        android:gravity="center"
+        android:clipChildren="false"/>
 
     <LinearLayout
         android:id="@+id/bubble_overflow_empty_state"
diff --git a/libs/WindowManager/Shell/res/layout/caption_window_decoration.xml b/libs/WindowManager/Shell/res/layout/caption_window_decoration.xml
new file mode 100644
index 0000000..a112f19
--- /dev/null
+++ b/libs/WindowManager/Shell/res/layout/caption_window_decoration.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<com.android.wm.shell.windowdecor.WindowDecorLinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/caption"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:gravity="end"
+    android:background="@drawable/decor_caption_title">
+    <Button
+        android:id="@+id/maximize_window"
+        android:layout_width="32dp"
+        android:layout_height="32dp"
+        android:layout_margin="5dp"
+        android:padding="4dp"
+        android:layout_gravity="center_vertical|end"
+        android:contentDescription="@string/maximize_button_text"
+        android:background="@drawable/decor_maximize_button_dark"
+        android:duplicateParentState="true"/>
+    <Button
+        android:id="@+id/close_window"
+        android:layout_width="32dp"
+        android:layout_height="32dp"
+        android:layout_margin="5dp"
+        android:padding="4dp"
+        android:layout_gravity="center_vertical|end"
+        android:contentDescription="@string/close_button_text"
+        android:background="@drawable/decor_close_button_dark"
+        android:duplicateParentState="true"/>
+</com.android.wm.shell.windowdecor.WindowDecorLinearLayout>
+
diff --git a/libs/WindowManager/Shell/res/values-af/strings.xml b/libs/WindowManager/Shell/res/values-af/strings.xml
index 2476f65..6959a59 100644
--- a/libs/WindowManager/Shell/res/values-af/strings.xml
+++ b/libs/WindowManager/Shell/res/values-af/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Borrel"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Bestuur"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Borrel is toegemaak."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Tik om hierdie program te herbegin en maak volskerm oop."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Tik om hierdie program te herbegin vir ’n beter aansig."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Kamerakwessies?\nTik om aan te pas"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Nie opgelos nie?\nTik om terug te stel"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Geen kamerakwessies nie? Tik om toe te maak."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Draai jou toestel om dit volskerm te maak"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Dubbeltik langs ’n program om dit te herposisioneer"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Het dit"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Vou uit vir meer inligting."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maksimeer"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Maak toe"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-am/strings.xml b/libs/WindowManager/Shell/res/values-am/strings.xml
index f0c391c..fe22b2c 100644
--- a/libs/WindowManager/Shell/res/values-am/strings.xml
+++ b/libs/WindowManager/Shell/res/values-am/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"አረፋ"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"ያቀናብሩ"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"አረፋ ተሰናብቷል።"</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"ይህን መተግበሪያ ዳግም ለማስነሳት መታ ያድርጉ እና ወደ ሙሉ ማያ ገጽ ይሂዱ።"</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"ለተሻለ ዕይታ ይህን መተግበሪያ ዳግም ለማስነሳት መታ ያድርጉ።"</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"የካሜራ ችግሮች አሉ?\nዳግም ለማበጀት መታ ያድርጉ"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"አልተስተካከለም?\nለማህደር መታ ያድርጉ"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"ምንም የካሜራ ችግሮች የሉም? ለማሰናበት መታ ያድርጉ።"</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"ወደ የሙሉ ገጽ ዕይታ ለመሄድ መሣሪያዎን ያሽከርክሩት"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"ቦታውን ለመቀየር ከመተግበሪያው ቀጥሎ ላይ ሁለቴ መታ ያድርጉ"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"ገባኝ"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"ለተጨማሪ መረጃ ይዘርጉ።"</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"አስፋ"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"ዝጋ"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-ar/strings.xml b/libs/WindowManager/Shell/res/values-ar/strings.xml
index aa4b3b7..2be6f39 100644
--- a/libs/WindowManager/Shell/res/values-ar/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ar/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"فقاعة"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"إدارة"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"تم إغلاق الفقاعة."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"انقر لإعادة تشغيل هذا التطبيق والانتقال إلى وضع ملء الشاشة."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"انقر لإعادة تشغيل هذا التطبيق للحصول على عرض أفضل."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"هل هناك مشاكل في الكاميرا؟\nانقر لإعادة الضبط."</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"ألم يتم حل المشكلة؟\nانقر للعودة"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"أليس هناك مشاكل في الكاميرا؟ انقر للإغلاق."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"قم بتدوير الشاشة للانتقال إلى وضع ملء الشاشة."</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"انقر مرتين بجانب التطبيق لتغيير موضعه."</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"حسنًا"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"التوسيع للحصول على مزيد من المعلومات"</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"تكبير"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"إغلاق"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-as/strings.xml b/libs/WindowManager/Shell/res/values-as/strings.xml
index 985d3b9..098ee84 100644
--- a/libs/WindowManager/Shell/res/values-as/strings.xml
+++ b/libs/WindowManager/Shell/res/values-as/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"বাবল"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"পৰিচালনা কৰক"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"বাবল অগ্ৰাহ্য কৰা হৈছে"</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"এপ্‌টো ৰিষ্টাৰ্ট কৰিবলৈ আৰু পূৰ্ণ স্ক্ৰীন ব্যৱহাৰ কৰিবলৈ টিপক।"</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"উন্নত ভিউৰ বাবে এপ্‌টো ৰিষ্টাৰ্ট কৰিবলৈ টিপক।"</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"কেমেৰাৰ কোনো সমস্যা হৈছে নেকি?\nপুনৰ খাপ খোৱাবলৈ টিপক"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"এইটো সমাধান কৰা নাই নেকি?\nপূৰ্বাৱস্থালৈ নিবলৈ টিপক"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"কেমেৰাৰ কোনো সমস্যা নাই নেকি? অগ্ৰাহ্য কৰিবলৈ টিপক।"</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"পূৰ্ণ স্ক্ৰীনলৈ যাবলৈ আপোনাৰ ডিভাইচটো ঘূৰাওক"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"এপ্‌টোৰ স্থান সলনি কৰিবলৈ ইয়াৰ কাষত দুবাৰ টিপক"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"বুজি পালোঁ"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"অধিক তথ্যৰ বাবে বিস্তাৰ কৰক।"</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"সৰ্বাধিক মাত্ৰালৈ বঢ়াওক"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"বন্ধ কৰক"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-az/strings.xml b/libs/WindowManager/Shell/res/values-az/strings.xml
index 8cd9b7a..2f49ae6 100644
--- a/libs/WindowManager/Shell/res/values-az/strings.xml
+++ b/libs/WindowManager/Shell/res/values-az/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Qabarcıq"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"İdarə edin"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Qabarcıqdan imtina edilib."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Bu tətbiqi sıfırlayaraq tam ekrana keçmək üçün toxunun."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Toxunaraq bu tətbiqi yenidən başladın ki, daha görüntü əldə edəsiniz."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Kamera problemi var?\nBərpa etmək üçün toxunun"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Düzəltməmisiniz?\nGeri qaytarmaq üçün toxunun"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Kamera problemi yoxdur? Qapatmaq üçün toxunun."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Tam ekrana keçmək üçün cihazınızı fırladın"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Tətbiqin yerini dəyişmək üçün yanına iki dəfə toxunun"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Anladım"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Ətraflı məlumat üçün genişləndirin."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Böyüdün"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Bağlayı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 49524c6..0656fe1 100644
--- a/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml
+++ b/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Oblačić"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Upravljajte"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Oblačić je odbačen."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Dodirnite da biste restartovali aplikaciju i prešli u režim celog ekrana."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Dodirnite da biste restartovali ovu aplikaciju radi boljeg prikaza."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Imate problema sa kamerom?\nDodirnite da biste ponovo uklopili"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Problem nije rešen?\nDodirnite da biste vratili"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nemate problema sa kamerom? Dodirnite da biste odbacili."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Rotirajte uređaj za prikaz preko celog ekrana"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Dvaput dodirnite pored aplikacije da biste promenili njenu poziciju"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Važi"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Proširite za još informacija."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Uvećajte"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Zatvorite"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-be/strings.xml b/libs/WindowManager/Shell/res/values-be/strings.xml
index 1767e0d..702f0ab 100644
--- a/libs/WindowManager/Shell/res/values-be/strings.xml
+++ b/libs/WindowManager/Shell/res/values-be/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Усплывальнае апавяшчэнне"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Кіраваць"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Усплывальнае апавяшчэнне адхілена."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Націсніце, каб перазапусціць гэту праграму і перайсці ў поўнаэкранны рэжым."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Націсніце, каб перазапусціць гэту праграму для лепшага прагляду."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Праблемы з камерай?\nНацісніце, каб пераабсталяваць"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Не ўдалося выправіць?\nНацісніце, каб аднавіць"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Ніякіх праблем з камерай? Націсніце, каб адхіліць."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Каб перайсці ў поўнаэкранны рэжым, павярніце прыладу"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Двойчы націсніце побач з праграмай, каб перамясціць яе"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Зразумела"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Разгарнуць для дадатковай інфармацыі"</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Разгарнуць"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Закрыць"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-bg/strings.xml b/libs/WindowManager/Shell/res/values-bg/strings.xml
index c22fb86..0de16d3 100644
--- a/libs/WindowManager/Shell/res/values-bg/strings.xml
+++ b/libs/WindowManager/Shell/res/values-bg/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Балонче"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Управление"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Балончето е отхвърлено."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Докоснете, за да рестартирате това приложение в режим на цял екран."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Докоснете, за да рестартирате това приложение с цел по-добър изглед."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Имате проблеми с камерата?\nДокоснете за ремонтиране"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Проблемът не се отстрани?\nДокоснете за връщане в предишното състояние"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Нямате проблеми с камерата? Докоснете, за да отхвърлите."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Завъртете екрана си, за да преминете в режим на цял екран"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Докоснете два пъти дадено приложение, за да промените позицията му"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Разбрах"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Разгъване за още информация."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Увеличаване"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Затваряне"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-bn/strings.xml b/libs/WindowManager/Shell/res/values-bn/strings.xml
index c0944e05..9a48d18 100644
--- a/libs/WindowManager/Shell/res/values-bn/strings.xml
+++ b/libs/WindowManager/Shell/res/values-bn/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"বাবল"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"ম্যানেজ করুন"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"বাবল বাতিল করা হয়েছে।"</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"এই অ্যাপ রিস্টার্ট করতে ট্যাপ করুন ও \'ফুল-স্ক্রিন\' মোড ব্যবহার করুন।"</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"আরও ভাল ভিউয়ের জন্য এই অ্যাপ রিস্টার্ট করতে ট্যাপ করুন।"</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"ক্যামেরা সংক্রান্ত সমস্যা?\nরিফিট করতে ট্যাপ করুন"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"এখনও সমাধান হয়নি?\nরিভার্ট করার জন্য ট্যাপ করুন"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"ক্যামেরা সংক্রান্ত সমস্যা নেই? বাতিল করতে ট্যাপ করুন।"</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"\'ফুল স্ক্রিন\' মোডে যেতে ডিভাইস ঘোরান"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"কোনও অ্যাপের পাশে ডবল ট্যাপ করে সেটির জায়গা পরিবর্তন করুন"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"বুঝেছি"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"আরও তথ্যের জন্য বড় করুন।"</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"বড় করুন"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"বন্ধ করুন"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-bs/strings.xml b/libs/WindowManager/Shell/res/values-bs/strings.xml
index f10b62e..11431d5 100644
--- a/libs/WindowManager/Shell/res/values-bs/strings.xml
+++ b/libs/WindowManager/Shell/res/values-bs/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Oblačić"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Upravljaj"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Oblačić je odbačen."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Dodirnite da ponovo pokrenete ovu aplikaciju i aktivirate prikaz preko cijelog ekrana."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Dodirnite da ponovo pokrenete ovu aplikaciju radi boljeg prikaza."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problemi s kamerom?\nDodirnite da ponovo namjestite"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Nije popravljeno?\nDodirnite da vratite"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nema problema s kamerom? Dodirnite da odbacite."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Zarotirajte uređaj da aktivirate prikaz preko cijelog ekrana"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Dvaput dodirnite pored aplikacije da promijenite njen položaj"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Razumijem"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Proširite za više informacija."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maksimiziranje"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Zatvaranje"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-ca/strings.xml b/libs/WindowManager/Shell/res/values-ca/strings.xml
index 8a522b3..ca0a421 100644
--- a/libs/WindowManager/Shell/res/values-ca/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ca/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Bombolla"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Gestiona"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"La bombolla s\'ha ignorat."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Toca per reiniciar aquesta aplicació i passar a pantalla completa."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Toca per reiniciar aquesta aplicació i obtenir una millor visualització."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Tens problemes amb la càmera?\nToca per resoldre\'ls"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"El problema no s\'ha resolt?\nToca per desfer els canvis"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"No tens cap problema amb la càmera? Toca per ignorar."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Gira el dispositiu per passar a pantalla completa"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Fes doble toc al costat d\'una aplicació per canviar-ne la posició"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Entesos"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Desplega per obtenir més informació."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maximitza"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Tanca"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-cs/strings.xml b/libs/WindowManager/Shell/res/values-cs/strings.xml
index d0cf80a..e8772fe 100644
--- a/libs/WindowManager/Shell/res/values-cs/strings.xml
+++ b/libs/WindowManager/Shell/res/values-cs/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Bublina"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Spravovat"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bublina byla zavřena."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Klepnutím aplikaci restartujete a přejdete na režim celé obrazovky"</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Klepnutím tuto aplikaci kvůli lepšímu zobrazení restartujete."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problémy s fotoaparátem?\nKlepnutím vyřešíte"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Nepomohlo to?\nKlepnutím se vrátíte"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Žádné problémy s fotoaparátem? Klepnutím zavřete."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Otočením zařízení přejděte do režimu celé obrazovky"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Dvojitým klepnutím vedle aplikace změňte její umístění"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Rozbalením zobrazíte další informace."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maximalizovat"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Zavřít"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-da/strings.xml b/libs/WindowManager/Shell/res/values-da/strings.xml
index bb81c10..2b55d4d 100644
--- a/libs/WindowManager/Shell/res/values-da/strings.xml
+++ b/libs/WindowManager/Shell/res/values-da/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Boble"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Administrer"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Boblen blev lukket."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Tryk for at genstarte denne app, og gå til fuld skærm."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Tryk for at genstarte denne app, så visningen forbedres."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Har du problemer med dit kamera?\nTryk for at gendanne det oprindelige format"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Løste det ikke problemet?\nTryk for at fortryde"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Har du ingen problemer med dit kamera? Tryk for at afvise."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Drej din enhed for at gå til fuld skærm"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Tryk to gange ud for en app for at ændre dens placering"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Udvid for at få flere oplysninger."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maksimér"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Luk"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-de/strings.xml b/libs/WindowManager/Shell/res/values-de/strings.xml
index c5d945a..03eee02 100644
--- a/libs/WindowManager/Shell/res/values-de/strings.xml
+++ b/libs/WindowManager/Shell/res/values-de/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Bubble"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Verwalten"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bubble verworfen."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Tippe, um die App im Vollbildmodus neu zu starten."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Tippe, um diese App neu zu starten und die Ansicht zu verbessern."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Probleme mit der Kamera?\nZum Anpassen tippen."</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Das Problem ist nicht behoben?\nZum Rückgängigmachen tippen."</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Keine Probleme mit der Kamera? Zum Schließen tippen."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Gerät drehen, um zum Vollbildmodus zu wechseln"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Neben einer App doppeltippen, um die Position zu ändern"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Ok"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Für weitere Informationen maximieren."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maximieren"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Schließen"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-el/strings.xml b/libs/WindowManager/Shell/res/values-el/strings.xml
index 70f5505..49bfdf1 100644
--- a/libs/WindowManager/Shell/res/values-el/strings.xml
+++ b/libs/WindowManager/Shell/res/values-el/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Συννεφάκι"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Διαχείριση"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Το συννεφάκι παραβλέφθηκε."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Πατήστε για επανεκκίνηση αυτής της εφαρμογής και ενεργοποίηση πλήρους οθόνης."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Πατήστε για να επανεκκινήσετε αυτή την εφαρμογή για καλύτερη προβολή."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Προβλήματα με την κάμερα;\nΠατήστε για επιδιόρθωση."</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Δεν διορθώθηκε;\nΠατήστε για επαναφορά."</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Δεν αντιμετωπίζετε προβλήματα με την κάμερα; Πατήστε για παράβλεψη."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Περιστρέψτε τη συσκευή σας για μετάβαση σε πλήρη οθόνη."</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Πατήστε δύο φορές δίπλα σε μια εφαρμογή για να αλλάξετε τη θέση της."</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Το κατάλαβα"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Ανάπτυξη για περισσότερες πληροφορίες."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Μεγιστοποίηση"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Κλείσιμο"</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 0b5aefa5..081a01a 100644
--- a/libs/WindowManager/Shell/res/values-en-rAU/strings.xml
+++ b/libs/WindowManager/Shell/res/values-en-rAU/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Bubble"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Manage"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bubble dismissed."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Tap to restart this app and go full screen."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Tap to restart this app for a better view."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Camera issues?\nTap to refit"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Didn’t fix it?\nTap to revert"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"No camera issues? Tap to dismiss."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Rotate your device to go full screen"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Double-tap next to an app to reposition it"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Got it"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Expand for more information."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maximise"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Close"</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 0b5aefa5..081a01a 100644
--- a/libs/WindowManager/Shell/res/values-en-rCA/strings.xml
+++ b/libs/WindowManager/Shell/res/values-en-rCA/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Bubble"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Manage"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bubble dismissed."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Tap to restart this app and go full screen."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Tap to restart this app for a better view."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Camera issues?\nTap to refit"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Didn’t fix it?\nTap to revert"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"No camera issues? Tap to dismiss."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Rotate your device to go full screen"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Double-tap next to an app to reposition it"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Got it"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Expand for more information."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maximise"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Close"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-en-rGB/strings.xml b/libs/WindowManager/Shell/res/values-en-rGB/strings.xml
index 0b5aefa5..081a01a 100644
--- a/libs/WindowManager/Shell/res/values-en-rGB/strings.xml
+++ b/libs/WindowManager/Shell/res/values-en-rGB/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Bubble"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Manage"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bubble dismissed."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Tap to restart this app and go full screen."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Tap to restart this app for a better view."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Camera issues?\nTap to refit"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Didn’t fix it?\nTap to revert"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"No camera issues? Tap to dismiss."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Rotate your device to go full screen"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Double-tap next to an app to reposition it"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Got it"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Expand for more information."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maximise"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Close"</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 0b5aefa5..081a01a 100644
--- a/libs/WindowManager/Shell/res/values-en-rIN/strings.xml
+++ b/libs/WindowManager/Shell/res/values-en-rIN/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Bubble"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Manage"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bubble dismissed."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Tap to restart this app and go full screen."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Tap to restart this app for a better view."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Camera issues?\nTap to refit"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Didn’t fix it?\nTap to revert"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"No camera issues? Tap to dismiss."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Rotate your device to go full screen"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Double-tap next to an app to reposition it"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Got it"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Expand for more information."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maximise"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Close"</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 5c3d0f6..afc14b8 100644
--- a/libs/WindowManager/Shell/res/values-en-rXC/strings.xml
+++ b/libs/WindowManager/Shell/res/values-en-rXC/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‎‏‎‏‏‎‏‎‏‏‎‏‎‎‏‏‏‏‎‏‏‎‏‏‎‏‏‎‎‏‏‎‏‏‎‏‏‎‎‎‏‏‏‏‏‎‎‎‎‏‎‎Bubble‎‏‎‎‏‎"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‏‎‎‎‏‎‏‏‎‎‎‏‏‏‎‏‎‎‎‎‏‎‎‎‏‏‎‎‏‎‎‎‏‎‎‏‏‎‎‎‏‎‏‎‎‏‏‏‎‎‏‏‎Manage‎‏‎‎‏‎"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‎‎‏‎‏‏‎‏‏‎‏‎‏‎‏‎‏‏‏‏‏‎‏‎Bubble dismissed.‎‏‎‎‏‎"</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‏‏‎‏‎‏‎‎‏‎‏‎‎‎‎‎‎‎‏‎‎‏‎‎‏‎‏‎‎‎‎‎‏‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‏‏‎‏‏‏‎Tap to restart this app and go full screen.‎‏‎‎‏‎"</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‎‏‏‎‎‏‎‏‎‎‎‏‎‏‎‎‎‏‎‎‎‏‏‎‎‏‏‎‏‎‏‏‏‏‎‎‎‏‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎Tap to restart this app for a better view.‎‏‎‎‏‎"</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‎‏‏‎‏‏‏‎‎‏‎‏‏‎‎‎‏‏‎‎‎‎‎‎‎‎‏‏‏‏‏‏‎‎‎‎‏‎‏‏‏‎‏‏‏‏‎‏‏‏‏‏‎Camera issues?‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Tap to refit‎‏‎‎‏‎"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‏‎‏‏‏‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‏‏‎‏‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‏‏‎‎‎‎‏‏‎‎‏‎Didn’t fix it?‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Tap to revert‎‏‎‎‏‎"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‎‎‏‎‏‏‎‎‏‎‎‎‎‏‎‎‏‎‎‏‎‎‎‏‎‎‏‏‎‎‏‏‎‎‎‎‎‏‏‎‎‎‏‏‏‏‎‎‏‎‎‏‏‏‎No camera issues? Tap to dismiss.‎‏‎‎‏‎"</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‎‏‎‏‎‎‎‏‎‏‏‎‎‎‎‎‎‎‏‎‏‏‏‏‏‎‎‏‏‏‏‏‏‎‎‎‎‏‏‎‎‏‏‎‎‏‏‏‎‏‎‎‏‏‎Rotate your device to go full screen‎‏‎‎‏‎"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‎‏‏‎‏‎‏‎‏‏‏‎‎‏‎‎‏‎‏‎‏‎‎‎‎‎‎‎‏‏‏‎‏‏‏‏‎‏‏‏‏‎‎‎‎‎‎‎‏‏‏‎Double-tap next to an app to reposition it‎‏‎‎‏‎"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‎‏‏‏‏‏‎‎‏‏‏‎‏‎‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎‏‏‎‏‎‎‎‎‏‏‎‎‏‎‎‎‎‏‏‎‏‎‎‏‎Got it‎‏‎‎‏‎"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‎‎‎‏‎‏‏‏‏‎‎‎‏‏‎‏‎‎‎‎‎‎‎‏‏‎‏‏‏‏‎‎‎‎‎‎‏‏‎‎‎‏‎‎‎‏‏‎‏‎‏‎‎Expand for more information.‎‏‎‎‏‎"</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‏‏‎‏‎‎‏‎‎‎‎‎‏‏‏‏‎‏‏‎‎‎‏‎‏‎‎‎‎‎‏‎‎‎‏‎‎‏‎‎‎‎‎‎‎‎‎‎‎‎‎‏‎‏‏‎Maximize‎‏‎‎‏‎"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‏‎‏‏‏‎‎‎‎‎‏‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‎‏‏‏‏‎‎‎‏‏‎‏‏‎‏‏‎‎‎‎‎‎‎‏‎‎‏‏‎Close‎‏‎‎‏‎"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-es-rUS/strings.xml b/libs/WindowManager/Shell/res/values-es-rUS/strings.xml
index e523ae5..b376b78 100644
--- a/libs/WindowManager/Shell/res/values-es-rUS/strings.xml
+++ b/libs/WindowManager/Shell/res/values-es-rUS/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Cuadro"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Administrar"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Se descartó el cuadro."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Presiona para reiniciar esta app y acceder al modo de pantalla completa."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Presiona para reiniciar esta app y tener una mejor vista."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"¿Tienes problemas con la cámara?\nPresiona para reajustarla"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"¿No se resolvió?\nPresiona para revertir los cambios"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"¿No tienes problemas con la cámara? Presionar para descartar."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Rota el dispositivo para ver la pantalla completa"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Presiona dos veces junto a una app para cambiar su posición"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Entendido"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Expande para obtener más información."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maximizar"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Cerrar"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-es/strings.xml b/libs/WindowManager/Shell/res/values-es/strings.xml
index 39990dc..79c1f90 100644
--- a/libs/WindowManager/Shell/res/values-es/strings.xml
+++ b/libs/WindowManager/Shell/res/values-es/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Burbuja"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Gestionar"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Burbuja cerrada."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Toca para reiniciar esta aplicación e ir a la pantalla completa."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Toca para reiniciar esta aplicación y obtener una mejor vista."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"¿Problemas con la cámara?\nToca para reajustar"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"¿No se ha solucionado?\nToca para revertir"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"¿No hay problemas con la cámara? Toca para cerrar."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Gira el dispositivo para ir al modo de pantalla completa"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Toca dos veces junto a una aplicación para cambiar su posición"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Entendido"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Mostrar más información"</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maximizar"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Cerrar"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-et/strings.xml b/libs/WindowManager/Shell/res/values-et/strings.xml
index a5f82a6..a7fead6 100644
--- a/libs/WindowManager/Shell/res/values-et/strings.xml
+++ b/libs/WindowManager/Shell/res/values-et/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Mull"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Halda"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Mullist loobuti."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Puudutage rakenduse taaskäivitamiseks ja täisekraanrežiimi aktiveerimiseks."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Puudutage, et see rakendus parema vaate jaoks taaskäivitada."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Kas teil on kaameraprobleeme?\nPuudutage ümberpaigutamiseks."</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Kas probleemi ei lahendatud?\nPuudutage ennistamiseks."</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Kas kaameraprobleeme pole? Puudutage loobumiseks."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Pöörake seadet, et aktiveerida täisekraanirežiim"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Topeltpuudutage rakenduse kõrval, et selle asendit muuta"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Selge"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Laiendage lisateabe saamiseks."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maksimeeri"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Sule"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-eu/strings.xml b/libs/WindowManager/Shell/res/values-eu/strings.xml
index 67b9a43..e7530c9 100644
--- a/libs/WindowManager/Shell/res/values-eu/strings.xml
+++ b/libs/WindowManager/Shell/res/values-eu/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Burbuila"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Kudeatu"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Baztertu da globoa."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Saka ezazu aplikazioa berrabiarazteko, eta ezarri pantaila osoko modua."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Hobeto ikusteko, sakatu hau aplikazioa berrabiarazteko."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Arazoak dauzkazu kamerarekin?\nBerriro doitzeko, sakatu hau."</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Ez al da konpondu?\nLeheneratzeko, sakatu hau."</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Ez daukazu arazorik kamerarekin? Baztertzeko, sakatu hau."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Pantaila osoko modua erabiltzeko, biratu gailua"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Aplikazioaren posizioa aldatzeko, sakatu birritan haren ondoko edozein toki"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Ados"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Informazio gehiago lortzeko, zabaldu hau."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maximizatu"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Itxi"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-fa/strings.xml b/libs/WindowManager/Shell/res/values-fa/strings.xml
index 761fb9d..66a657e 100644
--- a/libs/WindowManager/Shell/res/values-fa/strings.xml
+++ b/libs/WindowManager/Shell/res/values-fa/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"حباب"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"مدیریت"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"حبابک رد شد."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"برای بازراه‌اندازی این برنامه و تغییر به حالت تمام‌صفحه، ضربه بزنید."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"برای داشتن نمایی بهتر، ضربه بزنید تا این برنامه بازراه‌اندازی شود."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"دوربین مشکل دارد؟\nبرای تنظیم مجدد اندازه ضربه بزنید"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"مشکل برطرف نشد؟\nبرای برگرداندن ضربه بزنید"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"دوربین مشکلی ندارد؟ برای بستن ضربه بزنید."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"برای رفتن به حالت تمام صفحه، دستگاهتان را بچرخانید"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"در کنار برنامه دوضربه بزنید تا جابه‌جا شود"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"متوجه‌ام"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"برای اطلاعات بیشتر، گسترده کنید."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"بزرگ کردن"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"بستن"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-fi/strings.xml b/libs/WindowManager/Shell/res/values-fi/strings.xml
index c809b487..eaf369a 100644
--- a/libs/WindowManager/Shell/res/values-fi/strings.xml
+++ b/libs/WindowManager/Shell/res/values-fi/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Kupla"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Ylläpidä"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Kupla ohitettu."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Napauta, niin sovellus käynnistyy uudelleen ja siirtyy koko näytön tilaan."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Napauta, niin sovellus käynnistyy uudelleen paremmin näytölle sopivana."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Onko kameran kanssa ongelmia?\nKorjaa napauttamalla"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Eikö ongelma ratkennut?\nKumoa napauttamalla"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Ei ongelmia kameran kanssa? Hylkää napauttamalla."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Käännä laitetta, niin se siirtyy koko näytön tilaan"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Kaksoisnapauta sovellusta, jos haluat siirtää sitä"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Katso lisätietoja laajentamalla."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Suurenna"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Sulje"</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 62b2bb6..8f614c5 100644
--- a/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml
+++ b/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Bulle"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Gérer"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bulle ignorée."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Touchez pour redémarrer cette application et passer en plein écran."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Touchez pour redémarrer cette application afin d\'obtenir un meilleur affichage."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problèmes d\'appareil photo?\nTouchez pour réajuster"</string>
     <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>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Faites pivoter votre appareil pour passer en plein écran"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"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>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Agrandir"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Fermer"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-fr/strings.xml b/libs/WindowManager/Shell/res/values-fr/strings.xml
index 0747505..ec3e1b3 100644
--- a/libs/WindowManager/Shell/res/values-fr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-fr/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Bulle"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Gérer"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bulle fermée."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Appuyez pour redémarrer cette application et activer le mode plein écran."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Appuyez pour redémarrer cette appli et avoir une meilleure vue."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problèmes d\'appareil photo ?\nAppuyez pour réajuster"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Problème non résolu ?\nAppuyez pour rétablir"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Aucun problème d\'appareil photo ? Appuyez pour ignorer."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Faites pivoter l\'appareil pour passer en plein écran"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Appuyez deux fois à côté d\'une appli pour la repositionner"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Développez pour obtenir plus d\'informations"</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Agrandir"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Fermer"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-gl/strings.xml b/libs/WindowManager/Shell/res/values-gl/strings.xml
index b8e0396..651353d 100644
--- a/libs/WindowManager/Shell/res/values-gl/strings.xml
+++ b/libs/WindowManager/Shell/res/values-gl/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Burbulla"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Xestionar"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Ignorouse a burbulla."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Toca o botón para reiniciar esta aplicación e abrila en pantalla completa."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Toca o botón para reiniciar esta aplicación e gozar dunha mellor visualización."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Tes problemas coa cámara?\nToca para reaxustala"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Non se solucionaron os problemas?\nToca para reverter o seu tratamento"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Non hai problemas coa cámara? Tocar para ignorar."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Xira o dispositivo para ver o contido en pantalla completa"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Toca dúas veces a carón dunha aplicación para cambiala de posición"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Entendido"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Despregar para obter máis información."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maximizar"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Pechar"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-gu/strings.xml b/libs/WindowManager/Shell/res/values-gu/strings.xml
index deda2d7..3543be0b 100644
--- a/libs/WindowManager/Shell/res/values-gu/strings.xml
+++ b/libs/WindowManager/Shell/res/values-gu/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"બબલ"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"મેનેજ કરો"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"બબલ છોડી દેવાયો."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"આ ઍપ ફરીથી ચાલુ કરવા માટે ટૅપ કરીને પૂર્ણ સ્ક્રીન કરો."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"વધુ સારા વ્યૂ માટે, આ ઍપને ફરી શરૂ કરવા ટૅપ કરો."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"કૅમેરામાં સમસ્યાઓ છે?\nફરીથી ફિટ કરવા માટે ટૅપ કરો"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"સુધારો નથી થયો?\nપહેલાંના પર પાછું ફેરવવા માટે ટૅપ કરો"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"કૅમેરામાં કોઈ સમસ્યા નથી? છોડી દેવા માટે ટૅપ કરો."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"પૂર્ણ સ્ક્રીન મોડ લાગુ કરવા માટે, તમારા ડિવાઇસને ફેરવો"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"કોઈ ઍપની જગ્યા બદલવા માટે, તેની બાજુમાં બે વાર ટૅપ કરો"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"સમજાઈ ગયું"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"વધુ માહિતી માટે મોટું કરો."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"મોટું કરો"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"બંધ કરો"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-hi/strings.xml b/libs/WindowManager/Shell/res/values-hi/strings.xml
index a5fcb97..87ac5d6 100644
--- a/libs/WindowManager/Shell/res/values-hi/strings.xml
+++ b/libs/WindowManager/Shell/res/values-hi/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"बबल"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"मैनेज करें"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"बबल खारिज किया गया."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"इस ऐप्लिकेशन को रीस्टार्ट करने और फ़ुल स्क्रीन पर देखने के लिए टैप करें."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"टैप करके ऐप्लिकेशन को रीस्टार्ट करें और बेहतर व्यू पाएं."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"क्या कैमरे से जुड़ी कोई समस्या है?\nफिर से फ़िट करने के लिए टैप करें"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"क्या समस्या ठीक नहीं हुई?\nपहले जैसा करने के लिए टैप करें"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"क्या कैमरे से जुड़ी कोई समस्या नहीं है? खारिज करने के लिए टैप करें."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"फ़ुल स्क्रीन मोड में जाने के लिए, डिवाइस को घुमाएं"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"किसी ऐप्लिकेशन की जगह बदलने के लिए, उसके बगल में दो बार टैप करें"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"ठीक है"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"ज़्यादा जानकारी के लिए बड़ा करें."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"बड़ा करें"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"बंद करें"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-hr/strings.xml b/libs/WindowManager/Shell/res/values-hr/strings.xml
index 5ecc558..cb4f424 100644
--- a/libs/WindowManager/Shell/res/values-hr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-hr/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Oblačić"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Upravljanje"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Oblačić odbačen."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Dodirnite da biste ponovo pokrenuli tu aplikaciju i prikazali je na cijelom zaslonu."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Dodirnite da biste ponovo pokrenuli tu aplikaciju kako biste bolje vidjeli."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problemi s fotoaparatom?\nDodirnite za popravak"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Problem nije riješen?\nDodirnite za vraćanje"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nemate problema s fotoaparatom? Dodirnite za odbacivanje."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Zakrenite uređaj radi prikaza na cijelom zaslonu"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Dvaput dodirnite pored aplikacije da biste joj promijenili položaj"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Shvaćam"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Proširite da biste saznali više."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maksimiziraj"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Zatvori"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-hu/strings.xml b/libs/WindowManager/Shell/res/values-hu/strings.xml
index 2295250..635f4da 100644
--- a/libs/WindowManager/Shell/res/values-hu/strings.xml
+++ b/libs/WindowManager/Shell/res/values-hu/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Buborék"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Kezelés"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Buborék elvetve."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Koppintson az alkalmazás újraindításához és a teljes képernyős mód elindításához."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"A jobb nézet érdekében koppintson az alkalmazás újraindításához."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Kamerával kapcsolatos problémába ütközött?\nKoppintson a megoldáshoz."</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Nem sikerült a hiba kijavítása?\nKoppintson a visszaállításhoz."</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nincsenek problémái kamerával? Koppintson az elvetéshez."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"A teljes képernyős mód elindításához forgassa el az eszközt"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Koppintson duplán az alkalmazás mellett az áthelyezéséhez"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Értem"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Kibontással további információkhoz juthat."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Teljes méret"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Bezárás"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-hy/strings.xml b/libs/WindowManager/Shell/res/values-hy/strings.xml
index 2089365..da382c1 100644
--- a/libs/WindowManager/Shell/res/values-hy/strings.xml
+++ b/libs/WindowManager/Shell/res/values-hy/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Պղպջակ"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Կառավարել"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Ամպիկը փակվեց։"</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Հպեք՝ հավելվածը վերագործարկելու և լիաէկրան ռեժիմին անցնելու համար։"</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Հպեք՝ հավելվածը վերագործարկելու և ավելի հարմար տեսք ընտրելու համար։"</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Տեսախցիկի հետ կապված խնդիրնե՞ր կան։\nՀպեք՝ վերակարգավորելու համար։"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Չհաջողվե՞ց շտկել։\nՀպեք՝ փոփոխությունները չեղարկելու համար։"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Տեսախցիկի հետ կապված խնդիրներ չկա՞ն։ Փակելու համար հպեք։"</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Պտտեք սարքը՝ լիաէկրան ռեժիմին անցնելու համար"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Կրկնակի հպեք հավելվածի կողքին՝ այն տեղափոխելու համար"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Եղավ"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Ծավալեք՝ ավելին իմանալու համար։"</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Ծավալել"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Փակել"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-in/strings.xml b/libs/WindowManager/Shell/res/values-in/strings.xml
index 1b46b2f..cd79539 100644
--- a/libs/WindowManager/Shell/res/values-in/strings.xml
+++ b/libs/WindowManager/Shell/res/values-in/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Balon"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Kelola"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Balon ditutup."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Ketuk untuk memulai ulang aplikasi ini dan membuka layar penuh."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Ketuk untuk memulai ulang aplikasi ini agar mendapatkan tampilan yang lebih baik."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Masalah kamera?\nKetuk untuk memperbaiki"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Tidak dapat diperbaiki?\nKetuk untuk mengembalikan"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Tidak ada masalah kamera? Ketuk untuk menutup."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Putar perangkat untuk tampilan layar penuh"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Ketuk dua kali di samping aplikasi untuk mengubah posisinya"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Oke"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Luaskan untuk melihat informasi selengkapnya."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maksimalkan"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Tutup"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-is/strings.xml b/libs/WindowManager/Shell/res/values-is/strings.xml
index a201c95..37141b7 100644
--- a/libs/WindowManager/Shell/res/values-is/strings.xml
+++ b/libs/WindowManager/Shell/res/values-is/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Blaðra"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Stjórna"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Blöðru lokað."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Ýttu til að endurræsa forritið og sýna það á öllum skjánum."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Ýta til að endurræsa forritið og fá betri sýn."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Myndavélavesen?\nÝttu til að breyta stærð"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Ennþá vesen?\nÝttu til að afturkalla"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Ekkert myndavélavesen? Ýttu til að hunsa."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Snúðu tækinu til að nota allan skjáinn"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Ýttu tvisvar við hlið forritsins til að færa það"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Ég skil"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Stækka til að sjá frekari upplýsingar."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Stækka"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Loka"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-it/strings.xml b/libs/WindowManager/Shell/res/values-it/strings.xml
index 7157ed0..a2aff15 100644
--- a/libs/WindowManager/Shell/res/values-it/strings.xml
+++ b/libs/WindowManager/Shell/res/values-it/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Fumetto"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Gestisci"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Fumetto ignorato."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Tocca per riavviare l\'app e passare alla modalità a schermo intero."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Tocca per riavviare quest\'app per una migliore visualizzazione."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problemi con la fotocamera?\nTocca per risolverli"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Il problema non si è risolto?\nTocca per ripristinare"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nessun problema con la fotocamera? Tocca per ignorare."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Ruota il dispositivo per passare alla modalità a schermo intero"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Tocca due volte accanto a un\'app per riposizionarla"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Espandi per avere ulteriori informazioni."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Ingrandisci"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Chiudi"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-iw/strings.xml b/libs/WindowManager/Shell/res/values-iw/strings.xml
index 52a6b06..0e500ea 100644
--- a/libs/WindowManager/Shell/res/values-iw/strings.xml
+++ b/libs/WindowManager/Shell/res/values-iw/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"בועה"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"ניהול"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"הבועה נסגרה."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"צריך להקיש כדי להפעיל מחדש את האפליקציה הזו ולעבור למסך מלא."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"כדי לראות טוב יותר יש להקיש ולהפעיל את האפליקציה הזו מחדש."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"בעיות במצלמה?\nאפשר להקיש כדי לבצע התאמה מחדש"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"הבעיה לא נפתרה?\nאפשר להקיש כדי לחזור לגרסה הקודמת"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"אין בעיות במצלמה? אפשר להקיש כדי לסגור."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"מסובבים את המכשיר כדי לעבור לתצוגה במסך מלא"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"מקישים הקשה כפולה ליד אפליקציה כדי למקם אותה מחדש"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"הבנתי"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"מרחיבים כדי לקבל מידע נוסף."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"הגדלה"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"סגירה"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-ja/strings.xml b/libs/WindowManager/Shell/res/values-ja/strings.xml
index 5a25c24..34ed9c7 100644
--- a/libs/WindowManager/Shell/res/values-ja/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ja/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"バブル"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"管理"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ふきだしが非表示になっています。"</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"タップしてこのアプリを再起動すると、全画面表示になります。"</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"タップしてこのアプリを再起動すると、表示が適切になります。"</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"カメラに関する問題の場合は、\nタップすると修正できます"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"修正されなかった場合は、\nタップすると元に戻ります"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"カメラに関する問題でない場合は、タップすると閉じます。"</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"全画面表示にするにはデバイスを回転させてください"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"位置を変えるにはアプリの横をダブルタップしてください"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"開くと詳細が表示されます。"</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"最大化"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"閉じる"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-ka/strings.xml b/libs/WindowManager/Shell/res/values-ka/strings.xml
index bff86fa..14b26c1 100644
--- a/libs/WindowManager/Shell/res/values-ka/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ka/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"ბუშტი"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"მართვა"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ბუშტი დაიხურა."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"შეეხეთ ამ აპის გადასატვირთად და გადადით სრულ ეკრანზე."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"შეეხეთ, რომ გადატვირთოთ ეს აპი უკეთესი ხედისთვის."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"კამერად პრობლემები აქვს?\nშეეხეთ გამოსასწორებლად"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"არ გამოსწორდა?\nშეეხეთ წინა ვერსიის დასაბრუნებლად"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"კამერას პრობლემები არ აქვს? შეეხეთ უარყოფისთვის."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"მოატრიალეთ თქვენი მოწყობილობა სრული ეკრანის გასაშლელად"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"ორმაგად შეეხეთ აპის გვერდითა სივრცეს, რათა ის სხვაგან გადაიტანოთ"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"გასაგებია"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"დამატებითი ინფორმაციისთვის გააფართოეთ."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"მაქსიმალურად გაშლა"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"დახურვა"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-kk/strings.xml b/libs/WindowManager/Shell/res/values-kk/strings.xml
index f57f3f5..c42efdc 100644
--- a/libs/WindowManager/Shell/res/values-kk/strings.xml
+++ b/libs/WindowManager/Shell/res/values-kk/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Көпіршік"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Басқару"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Қалқыма хабар жабылды."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Бұл қолданбаны қайта қосып, толық экранға өту үшін түртіңіз."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Ыңғайлы көріністі реттеу үшін қолданбаны түртіп, өшіріп қосыңыз."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Камерада қателер шықты ма?\nЖөндеу үшін түртіңіз."</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Жөнделмеді ме?\nҚайтару үшін түртіңіз."</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Камерада қателер шықпады ма? Жабу үшін түртіңіз."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Толық экранға ауысу үшін құрылғыңызды бұрыңыз."</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Қолданбаның орнын ауыстыру үшін жанынан екі рет түртіңіз."</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Түсінікті"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Толығырақ ақпарат алу үшін терезені жайыңыз."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Жаю"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Жабу"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-km/strings.xml b/libs/WindowManager/Shell/res/values-km/strings.xml
index 5c04f88..302b25e 100644
--- a/libs/WindowManager/Shell/res/values-km/strings.xml
+++ b/libs/WindowManager/Shell/res/values-km/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"ពពុះ"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"គ្រប់គ្រង"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"បានច្រានចោល​សារលេចឡើង។"</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"ចុចដើម្បី​ចាប់ផ្ដើម​កម្មវិធី​នេះឡើងវិញ រួចចូលប្រើ​ពេញអេក្រង់។"</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"ចុចដើម្បី​ចាប់ផ្ដើម​កម្មវិធី​នេះឡើងវិញសម្រាប់ទិដ្ឋភាពកាន់តែប្រសើរ។"</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"មានបញ្ហា​ពាក់ព័ន្ធនឹង​កាមេរ៉ាឬ?\nចុចដើម្បី​ដោះស្រាយ"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"មិនបាន​ដោះស្រាយ​បញ្ហានេះទេឬ?\nចុចដើម្បី​ត្រឡប់"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"មិនមាន​បញ្ហាពាក់ព័ន្ធនឹង​កាមេរ៉ាទេឬ? ចុចដើម្បី​ច្រានចោល។"</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"បង្វិលឧបករណ៍របស់អ្នក ដើម្បីចូលប្រើអេក្រង់ពេញ"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"ចុចពីរដងនៅជាប់កម្មវិធីណាមួយ ដើម្បីប្ដូរទីតាំងកម្មវិធីនោះ"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"យល់ហើយ"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"ពង្រីកដើម្បីទទួលបានព័ត៌មានបន្ថែម។"</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"ពង្រីក"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"បិទ"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-kn/strings.xml b/libs/WindowManager/Shell/res/values-kn/strings.xml
index e91383c..2b3aa07 100644
--- a/libs/WindowManager/Shell/res/values-kn/strings.xml
+++ b/libs/WindowManager/Shell/res/values-kn/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"ಬಬಲ್"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"ನಿರ್ವಹಿಸಿ"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ಬಬಲ್ ವಜಾಗೊಳಿಸಲಾಗಿದೆ."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"ಈ ಆ್ಯಪ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಲು ಮತ್ತು ಪೂರ್ಣ ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿ ನೋಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"ಉತ್ತಮ ವೀಕ್ಷಣೆಗಾಗಿ ಈ ಆ್ಯಪ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"ಕ್ಯಾಮರಾ ಸಮಸ್ಯೆಗಳಿವೆಯೇ?\nಮರುಹೊಂದಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"ಅದನ್ನು ಸರಿಪಡಿಸಲಿಲ್ಲವೇ?\nಹಿಂತಿರುಗಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"ಕ್ಯಾಮರಾ ಸಮಸ್ಯೆಗಳಿಲ್ಲವೇ? ವಜಾಗೊಳಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"ಪೂರ್ಣ ಸ್ಕ್ರೀನ್‌ಗೆ ಹೋಗಲು ನಿಮ್ಮ ಸಾಧನವನ್ನು ತಿರುಗಿಸಿ"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"ಆ್ಯಪ್ ಒಂದರ ಸ್ಥಾನವನ್ನು ಬದಲಾಯಿಸಲು ಅದರ ಪಕ್ಕದಲ್ಲಿ ಡಬಲ್-ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"ಸರಿ"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"ಇನ್ನಷ್ಟು ಮಾಹಿತಿಗಾಗಿ ವಿಸ್ತೃತಗೊಳಿಸಿ."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"ಹಿಗ್ಗಿಸಿ"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"ಮುಚ್ಚಿರಿ"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-ko/strings.xml b/libs/WindowManager/Shell/res/values-ko/strings.xml
index 104ba3f..5505955 100644
--- a/libs/WindowManager/Shell/res/values-ko/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ko/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"버블"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"관리"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"대화창을 닫았습니다."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"탭하여 이 앱을 다시 시작하고 전체 화면으로 이동합니다."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"보기를 개선하려면 탭하여 앱을 다시 시작합니다."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"카메라 문제가 있나요?\n해결하려면 탭하세요."</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"해결되지 않았나요?\n되돌리려면 탭하세요."</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"카메라에 문제가 없나요? 닫으려면 탭하세요."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"전체 화면 모드로 전환하려면 기기를 회전하세요."</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"앱 위치를 조정하려면 앱 옆을 두 번 탭하세요."</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"확인"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"추가 정보는 펼쳐서 확인하세요."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"최대화"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"닫기"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-ky/strings.xml b/libs/WindowManager/Shell/res/values-ky/strings.xml
index 8203622..d45a984 100644
--- a/libs/WindowManager/Shell/res/values-ky/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ky/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Көбүк"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Башкаруу"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Калкып чыкма билдирме жабылды."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Бул колдонмону өчүрүп күйгүзүп, толук экранга өтүү үчүн таптап коюңуз."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Жакшыраак көрүү үчүн бул колдонмону өчүрүп күйгүзүңүз. Ал үчүн таптап коюңуз."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Камерада маселелер келип чыктыбы?\nОңдоо үчүн таптаңыз"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Оңдолгон жокпу?\nАртка кайтаруу үчүн таптаңыз"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Камерада маселе жокпу? Этибарга албоо үчүн таптаңыз."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Толук экран режимине өтүү үчүн түзмөктү буруңуз"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Колдонмонун ракурсун өзгөртүү үчүн анын тушуна эки жолу басыңыз"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Түшүндүм"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Толук маалымат алуу үчүн жайып көрүңүз."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Чоңойтуу"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Жабуу"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-lo/strings.xml b/libs/WindowManager/Shell/res/values-lo/strings.xml
index 2439678..0eeee90 100644
--- a/libs/WindowManager/Shell/res/values-lo/strings.xml
+++ b/libs/WindowManager/Shell/res/values-lo/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"ຟອງ"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"ຈັດການ"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ປິດ Bubble ໄສ້ແລ້ວ."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"ແຕະເພື່ອຣີສະຕາດແອັບນີ້ ແລະ ໃຊ້ແບບເຕັມຈໍ."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"ແຕະເພື່ອຣີສະຕາດແອັບນີ້ເພື່ອມຸມມອງທີ່ດີຂຶ້ນ."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"ມີບັນຫາກ້ອງຖ່າຍຮູບບໍ?\nແຕະເພື່ອປັບໃໝ່"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"ບໍ່ໄດ້ແກ້ໄຂມັນບໍ?\nແຕະເພື່ອແປງກັບຄືນ"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"ບໍ່ມີບັນຫາກ້ອງຖ່າຍຮູບບໍ? ແຕະເພື່ອ​ປິດ​ໄວ້."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"ໝຸນອຸປະກອນຂອງທ່ານເພື່ອໃຊ້ແບບເຕັມຈໍ"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"ແຕະສອງເທື່ອໃສ່ຖັດຈາກແອັບໃດໜຶ່ງເພື່ອຈັດຕຳແໜ່ງຂອງມັນຄືນໃໝ່"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"ເຂົ້າໃຈແລ້ວ"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"ຂະຫຍາຍເພື່ອເບິ່ງຂໍ້ມູນເພີ່ມເຕີມ."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"ຂະຫຍາຍໃຫຍ່ສຸດ"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"ປິດ"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-lt/strings.xml b/libs/WindowManager/Shell/res/values-lt/strings.xml
index e2ae643..fc118e2 100644
--- a/libs/WindowManager/Shell/res/values-lt/strings.xml
+++ b/libs/WindowManager/Shell/res/values-lt/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Debesėlis"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Tvarkyti"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Debesėlio atsisakyta."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Palieskite, kad paleistumėte iš naujo šią programą ir įjungtumėte viso ekrano režimą."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Palieskite, kad iš naujo paleistumėte šią programą ir matytumėte aiškiau."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Iškilo problemų dėl kameros?\nPalieskite, kad pritaikytumėte iš naujo"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Nepavyko pataisyti?\nPalieskite, kad grąžintumėte"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nėra jokių problemų dėl kameros? Palieskite, kad atsisakytumėte."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Pasukite įrenginį, kad įjungtumėte viso ekrano režimą"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Dukart palieskite šalia programos, kad pakeistumėte jos poziciją"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Supratau"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Išskleiskite, jei reikia daugiau informacijos."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Padidinti"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Uždaryti"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-lv/strings.xml b/libs/WindowManager/Shell/res/values-lv/strings.xml
index a77160b..cd2af07 100644
--- a/libs/WindowManager/Shell/res/values-lv/strings.xml
+++ b/libs/WindowManager/Shell/res/values-lv/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Burbulis"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Pārvaldīt"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Burbulis ir noraidīts."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Pieskarieties, lai restartētu šo lietotni un pārietu pilnekrāna režīmā."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Pieskarieties, lai restartētu šo lietotni un uzlabotu attēlojumu."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Vai ir problēmas ar kameru?\nPieskarieties, lai tās novērstu."</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Vai problēma netika novērsta?\nPieskarieties, lai atjaunotu."</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Vai nav problēmu ar kameru? Pieskarieties, lai nerādītu."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Pagrieziet ierīci, lai aktivizētu pilnekrāna režīmu"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Veiciet dubultskārienu blakus lietotnei, lai manītu tās pozīciju"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Labi"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Izvērsiet, lai iegūtu plašāku informāciju."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maksimizēt"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Aizvērt"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-mk/strings.xml b/libs/WindowManager/Shell/res/values-mk/strings.xml
index bac0c9e..c0dff00 100644
--- a/libs/WindowManager/Shell/res/values-mk/strings.xml
+++ b/libs/WindowManager/Shell/res/values-mk/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Балонче"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Управувајте"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Балончето е отфрлено."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Допрете за да ја рестартирате апликацијава и да ја отворите на цел екран."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Допрете за да ја рестартирате апликацијава за подобар приказ."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Проблеми со камерата?\nДопрете за да се совпадне повторно"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Не се поправи?\nДопрете за враќање"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Нема проблеми со камерата? Допрете за отфрлање."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Ротирајте го уредот за да отворите на цел екран"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Допрете двапати до некоја апликација за да ја преместите"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Сфатив"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Проширете за повеќе информации."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Зголеми"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Затвори"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-ml/strings.xml b/libs/WindowManager/Shell/res/values-ml/strings.xml
index de0f837..52ea1c7 100644
--- a/libs/WindowManager/Shell/res/values-ml/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ml/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"ബബിൾ"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"മാനേജ് ചെയ്യുക"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ബബിൾ ഡിസ്മിസ് ചെയ്തു."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"ഈ ആപ്പ് റീസ്‌റ്റാർട്ട് ചെയ്‌ത് പൂർണ്ണ സ്ക്രീനിലേക്ക് മാറാൻ ടാപ്പ് ചെയ്യുക."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"മികച്ച കാഴ്‌ചയ്‌ക്കായി ഈ ആപ്പ് റീസ്‌റ്റാർട്ട് ചെയ്യാൻ ടാപ്പ് ചെയ്യുക."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"ക്യാമറ പ്രശ്നങ്ങളുണ്ടോ?\nശരിയാക്കാൻ ടാപ്പ് ചെയ്യുക"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"അത് പരിഹരിച്ചില്ലേ?\nപുനഃസ്ഥാപിക്കാൻ ടാപ്പ് ചെയ്യുക"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"ക്യാമറാ പ്രശ്നങ്ങളൊന്നുമില്ലേ? നിരസിക്കാൻ ടാപ്പ് ചെയ്യുക."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"പൂർണ്ണ സ്ക്രീനിലേക്ക് മാറാൻ ഈ ഉപകരണം റൊട്ടേറ്റ് ചെയ്യുക"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"ഒരു ആപ്പിന്റെ സ്ഥാനം മാറ്റാൻ, അതിന് തൊട്ടടുത്ത് ഡബിൾ ടാപ്പ് ചെയ്യുക"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"മനസ്സിലായി"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"കൂടുതൽ വിവരങ്ങൾക്ക് വികസിപ്പിക്കുക."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"വലുതാക്കുക"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"അടയ്ക്കുക"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-mn/strings.xml b/libs/WindowManager/Shell/res/values-mn/strings.xml
index 1205306..fd4c4aa 100644
--- a/libs/WindowManager/Shell/res/values-mn/strings.xml
+++ b/libs/WindowManager/Shell/res/values-mn/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Бөмбөлөг"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Удирдах"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Бөмбөлгийг үл хэрэгссэн."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Энэ аппыг дахин эхлүүлж, бүтэн дэлгэцэд орохын тулд товшино уу."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Харагдах байдлыг сайжруулахын тулд энэ аппыг товшиж, дахин эхлүүлнэ үү."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Камерын асуудал гарсан уу?\nДахин тааруулахын тулд товшино уу"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Үүнийг засаагүй юу?\nБуцаахын тулд товшино уу"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Камерын асуудал байхгүй юу? Хаахын тулд товшино уу."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Төхөөрөмжөө бүтэн дэлгэцээр үзэхийн тулд эргүүлнэ"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Аппыг дахин байрлуулахын тулд хажууд нь хоёр товшино"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Ойлголоо"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Нэмэлт мэдээлэл авах бол дэлгэнэ үү."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Томруулах"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Хаах"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-mr/strings.xml b/libs/WindowManager/Shell/res/values-mr/strings.xml
index c91d06f..b9a165e 100644
--- a/libs/WindowManager/Shell/res/values-mr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-mr/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"बबल"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"व्यवस्थापित करा"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"बबल डिसमिस केला."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"हे अ‍ॅप रीस्टार्ट करण्यासाठी आणि फुल स्क्रीन करण्यासाठी टॅप करा."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"अधिक चांगल्या व्ह्यूसाठी हे अ‍ॅप रीस्टार्ट करण्याकरिता टॅप करा."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"कॅमेराशी संबंधित काही समस्या आहेत का?\nपुन्हा फिट करण्यासाठी टॅप करा"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"निराकरण झाले नाही?\nरिव्हर्ट करण्यासाठी कृपया टॅप करा"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"कॅमेराशी संबंधित कोणत्याही समस्या नाहीत का? डिसमिस करण्‍यासाठी टॅप करा."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"फुल स्क्रीन करण्यासाठी, तुमचे डिव्हाइस फिरवा"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"ॲपची स्थिती पुन्हा बदलण्यासाठी, त्याच्या शेजारी दोनदा टॅप करा"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"समजले"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"अधिक माहितीसाठी विस्तार करा."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"मोठे करा"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"बंद करा"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-ms/strings.xml b/libs/WindowManager/Shell/res/values-ms/strings.xml
index 652a991..3d81c9a 100644
--- a/libs/WindowManager/Shell/res/values-ms/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ms/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Gelembung"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Urus"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Gelembung diketepikan."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Ketik untuk memulakan semula apl ini dan menggunakan skrin penuh."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Ketik untuk memulakan semula apl ini untuk mendapatkan paparan yang lebih baik."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Isu kamera?\nKetik untuk memuatkan semula"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Isu tidak dibetulkan?\nKetik untuk kembali"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Tiada isu kamera? Ketik untuk mengetepikan."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Putar peranti anda untuk beralih ke skrin penuh"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Ketik dua kali bersebelahan apl untuk menempatkan semula apl"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Kembangkan untuk mendapatkan maklumat lanjut."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maksimumkan"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Tutup"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-my/strings.xml b/libs/WindowManager/Shell/res/values-my/strings.xml
index 15d182c..50adfe9 100644
--- a/libs/WindowManager/Shell/res/values-my/strings.xml
+++ b/libs/WindowManager/Shell/res/values-my/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"ပူဖောင်းဖောက်သံ"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"စီမံရန်"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ပူဖောင်းကွက် ဖယ်လိုက်သည်။"</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"ဤအက်ပ်ကို ပြန်စပြီး ဖန်သားပြင်အပြည့်လုပ်ရန် တို့ပါ။"</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"ပိုကောင်းသောမြင်ကွင်းအတွက် ဤအက်ပ်ပြန်စရန် တို့နိုင်သည်။"</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"ကင်မရာပြဿနာလား။\nပြင်ဆင်ရန် တို့ပါ"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"ကောင်းမသွားဘူးလား။\nပြန်ပြောင်းရန် တို့ပါ"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"ကင်မရာပြဿနာ မရှိဘူးလား။ ပယ်ရန် တို့ပါ။"</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"ဖန်သားပြင်အပြည့်လုပ်ရန် သင့်စက်ကို လှည့်နိုင်သည်"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"အက်ပ်နေရာပြန်ချရန် ၎င်းဘေးတွင် နှစ်ချက်တို့နိုင်သည်"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"ရပြီ"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"နောက်ထပ်အချက်အလက်များအတွက် ချဲ့နိုင်သည်။"</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"ချဲ့ရန်"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"ပိတ်ရန်"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-nb/strings.xml b/libs/WindowManager/Shell/res/values-nb/strings.xml
index 2f2fea6..74e066e 100644
--- a/libs/WindowManager/Shell/res/values-nb/strings.xml
+++ b/libs/WindowManager/Shell/res/values-nb/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Boble"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Administrer"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Boblen er avvist."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Trykk for å starte denne appen på nytt og vise den i fullskjerm."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Trykk for å starte denne appen på nytt for bedre visning."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Har du kameraproblemer?\nTrykk for å tilpasse"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Ble ikke problemet løst?\nTrykk for å gå tilbake"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Har du ingen kameraproblemer? Trykk for å lukke."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Roter enheten for å starte fullskjerm"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Dobbelttrykk ved siden av en app for å flytte den"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Greit"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Vis for å få mer informasjon."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maksimer"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Lukk"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-ne/strings.xml b/libs/WindowManager/Shell/res/values-ne/strings.xml
index 8dfec88..b257f9e 100644
--- a/libs/WindowManager/Shell/res/values-ne/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ne/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"बबल"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"व्यवस्थापन गर्नुहोस्"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"बबल हटाइयो।"</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"यो एप रिस्टार्ट गर्न ट्याप गर्नुहोस् र फुल स्क्रिन मोडमा जानुहोस्।"</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"यो एप अझ राम्रो हेर्न मिल्ने बनाउनका लागि यसलाई रिस्टार्ट गर्न ट्याप गर्नुहोस्।"</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"क्यामेरासम्बन्धी समस्या देखियो?\nसमस्या हल गर्न ट्याप गर्नुहोस्"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"समस्या हल भएन?\nपहिलेको जस्तै बनाउन ट्याप गर्नुहोस्"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"क्यामेरासम्बन्धी कुनै पनि समस्या छैन? खारेज गर्न ट्याप गर्नुहोस्।"</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"तपाईं फुल स्क्रिन मोड हेर्न चाहनुहुन्छ भने आफ्नो डिभाइस रोटेट गर्नुहोस्"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"तपाईं जुन एपको स्थिति मिलाउन चाहनुहुन्छ सोही एपको छेउमा डबल ट्याप गर्नुहोस्"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"बुझेँ"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"थप जानकारी प्राप्त गर्न चाहनुहुन्छ भने एक्स्पान्ड गर्नुहोस्।"</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"ठुलो बनाउनुहोस्"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"बन्द गर्नुहोस्"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-nl/strings.xml b/libs/WindowManager/Shell/res/values-nl/strings.xml
index 8468b04..6ea24a8 100644
--- a/libs/WindowManager/Shell/res/values-nl/strings.xml
+++ b/libs/WindowManager/Shell/res/values-nl/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Bubbel"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Beheren"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bubbel gesloten."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Tik om deze app opnieuw te starten en te openen op het volledige scherm."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Tik om deze app opnieuw op te starten voor een betere weergave."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Cameraproblemen?\nTik om opnieuw passend te maken."</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Is dit geen oplossing?\nTik om terug te zetten."</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Geen cameraproblemen? Tik om te sluiten."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Draai je apparaat om naar volledig scherm te schakelen"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Dubbeltik naast een app om deze opnieuw te positioneren"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Uitvouwen voor meer informatie."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maximaliseren"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Sluiten"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-or/strings.xml b/libs/WindowManager/Shell/res/values-or/strings.xml
index a8d8448..f8c9248 100644
--- a/libs/WindowManager/Shell/res/values-or/strings.xml
+++ b/libs/WindowManager/Shell/res/values-or/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"ବବଲ୍"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"ପରିଚାଳନା କରନ୍ତୁ"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ବବଲ୍ ଖାରଜ କରାଯାଇଛି।"</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"ଏହି ଆପକୁ ରିଷ୍ଟାର୍ଟ କରି ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନ୍ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ।"</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"ଏକ ଆହୁରି ଭଲ ଭ୍ୟୁ ପାଇଁ ଏହି ଆପ ରିଷ୍ଟାର୍ଟ କରିବାକୁ ଟାପ କରନ୍ତୁ।"</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"କ୍ୟାମେରାରେ ସମସ୍ୟା ଅଛି?\nପୁଣି ଫିଟ କରିବାକୁ ଟାପ କରନ୍ତୁ"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"ଏହାର ସମାଧାନ ହୋଇନାହିଁ?\nଫେରିଯିବା ପାଇଁ ଟାପ କରନ୍ତୁ"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"କ୍ୟାମେରାରେ କିଛି ସମସ୍ୟା ନାହିଁ? ଖାରଜ କରିବାକୁ ଟାପ କରନ୍ତୁ।"</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"ପୂର୍ଣ୍ଣ-ସ୍କ୍ରିନ ବ୍ୟବହାର କରିବାକୁ ଆପଣଙ୍କ ଡିଭାଇସକୁ ରୋଟେଟ କରନ୍ତୁ"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"ଏକ ଆପକୁ ରିପୋଜିସନ କରିବା ପାଇଁ ଏହା ପାଖରେ ଦୁଇଥର-ଟାପ କରନ୍ତୁ"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"ବୁଝିଗଲି"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"ଅଧିକ ସୂଚନା ପାଇଁ ବିସ୍ତାର କରନ୍ତୁ।"</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"ବଡ଼ କରନ୍ତୁ"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"ବନ୍ଦ କରନ୍ତୁ"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-pa/strings.xml b/libs/WindowManager/Shell/res/values-pa/strings.xml
index f99176c..b80da0b 100644
--- a/libs/WindowManager/Shell/res/values-pa/strings.xml
+++ b/libs/WindowManager/Shell/res/values-pa/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"ਬੁਲਬੁਲਾ"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"ਪ੍ਰਬੰਧਨ ਕਰੋ"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ਬਬਲ ਨੂੰ ਖਾਰਜ ਕੀਤਾ ਗਿਆ।"</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"ਇਸ ਐਪ ਨੂੰ ਮੁੜ-ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ ਅਤੇ ਪੂਰੀ ਸਕ੍ਰੀਨ ਮੋਡ \'ਤੇ ਜਾਓ।"</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"ਬਿਹਤਰ ਦ੍ਰਿਸ਼ ਲਈ ਇਸ ਐਪ ਨੂੰ ਮੁੜ-ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।"</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"ਕੀ ਕੈਮਰੇ ਸੰਬੰਧੀ ਸਮੱਸਿਆਵਾਂ ਹਨ?\nਮੁੜ-ਫਿੱਟ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"ਕੀ ਇਹ ਠੀਕ ਨਹੀਂ ਹੋਈ?\nਵਾਪਸ ਉਹੀ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"ਕੀ ਕੈਮਰੇ ਸੰਬੰਧੀ ਕੋਈ ਸਮੱਸਿਆ ਨਹੀਂ ਹੈ? ਖਾਰਜ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।"</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"ਪੂਰੀ-ਸਕ੍ਰੀਨ ਮੋਡ \'ਤੇ ਜਾਣ ਲਈ ਆਪਣੇ ਡੀਵਾਈਸ ਨੂੰ ਘੁਮਾਓ"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"ਕਿਸੇ ਐਪ ਦੀ ਜਗ੍ਹਾ ਬਦਲਣ ਲਈ ਉਸ ਦੇ ਅੱਗੇ ਡਬਲ ਟੈਪ ਕਰੋ"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"ਸਮਝ ਲਿਆ"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"ਹੋਰ ਜਾਣਕਾਰੀ ਲਈ ਵਿਸਤਾਰ ਕਰੋ।"</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"ਵੱਡਾ ਕਰੋ"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"ਬੰਦ ਕਰੋ"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-pl/strings.xml b/libs/WindowManager/Shell/res/values-pl/strings.xml
index f2147c0..bdd44dd 100644
--- a/libs/WindowManager/Shell/res/values-pl/strings.xml
+++ b/libs/WindowManager/Shell/res/values-pl/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Dymek"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Zarządzaj"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Zamknięto dymek"</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Kliknij, by uruchomić tę aplikację ponownie i przejść w tryb pełnoekranowy."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Kliknij, aby zrestartować aplikację i zyskać lepszą widoczność."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problemy z aparatem?\nKliknij, aby dopasować"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Naprawa się nie udała?\nKliknij, aby cofnąć"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Brak problemów z aparatem? Kliknij, aby zamknąć"</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Obróć urządzenie, aby przejść do pełnego ekranu"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Kliknij dwukrotnie obok aplikacji, aby ją przenieść"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Rozwiń, aby wyświetlić więcej informacji."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maksymalizuj"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Zamknij"</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 2efc554..b9e41ea 100644
--- a/libs/WindowManager/Shell/res/values-pt-rBR/strings.xml
+++ b/libs/WindowManager/Shell/res/values-pt-rBR/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Bolha"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Gerenciar"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Balão dispensado."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Toque para reiniciar o app e usar tela cheia."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Toque para reiniciar o app e atualizar a visualização."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problemas com a câmera?\nToque para ajustar o enquadramento"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"O problema não foi corrigido?\nToque para reverter"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Não tem problemas com a câmera? Toque para dispensar."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Gire o dispositivo para entrar no modo de tela cheia"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Toque duas vezes ao lado de um app para reposicionar"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Entendi"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Abra para ver mais informações."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maximizar"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Fechar"</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 c68a693..c1e57d8 100644
--- a/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml
+++ b/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Balão"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Gerir"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Balão ignorado."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Toque para reiniciar esta app e ficar em ecrã inteiro."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Toque para reiniciar esta app e ficar com uma melhor visão."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problemas com a câmara?\nToque aqui para reajustar"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Não foi corrigido?\nToque para reverter"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nenhum problema com a câmara? Toque para ignorar."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Rode o dispositivo para ficar em ecrã inteiro"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Toque duas vezes junto a uma app para a reposicionar"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Expandir para obter mais informações"</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maximizar"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Fechar"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-pt/strings.xml b/libs/WindowManager/Shell/res/values-pt/strings.xml
index 2efc554..b9e41ea 100644
--- a/libs/WindowManager/Shell/res/values-pt/strings.xml
+++ b/libs/WindowManager/Shell/res/values-pt/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Bolha"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Gerenciar"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Balão dispensado."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Toque para reiniciar o app e usar tela cheia."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Toque para reiniciar o app e atualizar a visualização."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problemas com a câmera?\nToque para ajustar o enquadramento"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"O problema não foi corrigido?\nToque para reverter"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Não tem problemas com a câmera? Toque para dispensar."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Gire o dispositivo para entrar no modo de tela cheia"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Toque duas vezes ao lado de um app para reposicionar"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Entendi"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Abra para ver mais informações."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maximizar"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Fechar"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-ro/strings.xml b/libs/WindowManager/Shell/res/values-ro/strings.xml
index 804d34f..c49bf9d 100644
--- a/libs/WindowManager/Shell/res/values-ro/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ro/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Balon"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Gestionați"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Balonul a fost respins."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Atingeți ca să reporniți aplicația și să treceți în modul ecran complet."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Atingeți ca să reporniți aplicația pentru o vizualizare mai bună."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Aveți probleme cu camera foto?\nAtingeți pentru a reîncadra"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Nu ați remediat problema?\nAtingeți pentru a reveni"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nu aveți probleme cu camera foto? Atingeți pentru a închide."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Rotiți dispozitivul pentru a trece în modul ecran complet"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Atingeți de două ori lângă o aplicație pentru a o repoziționa"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Extindeți pentru mai multe informații"</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maximizați"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Închideți"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-ru/strings.xml b/libs/WindowManager/Shell/res/values-ru/strings.xml
index 95bf1cf..ffe031d 100644
--- a/libs/WindowManager/Shell/res/values-ru/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ru/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Всплывающая подсказка"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Настроить"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Всплывающий чат закрыт."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Нажмите, чтобы перезапустить приложение и перейти в полноэкранный режим."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Нажмите, чтобы перезапустить приложение и настроить удобный для просмотра вид"</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Проблемы с камерой?\nНажмите, чтобы исправить."</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Не помогло?\nНажмите, чтобы отменить изменения."</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Нет проблем с камерой? Нажмите, чтобы закрыть."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Чтобы перейти в полноэкранный режим, поверните устройство."</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Чтобы переместить приложение, нажмите на него дважды."</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"ОК"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Развернуть, чтобы узнать больше."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Развернуть"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Закрыть"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-si/strings.xml b/libs/WindowManager/Shell/res/values-si/strings.xml
index 23dd65a..b27e1b9 100644
--- a/libs/WindowManager/Shell/res/values-si/strings.xml
+++ b/libs/WindowManager/Shell/res/values-si/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"බුබුළු"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"කළමනා කරන්න"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"බුබුල ඉවත දමා ඇත."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"මෙම යෙදුම යළි ඇරඹීමට සහ පූර්ණ තිරයට යාමට තට්ටු කරන්න."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"වඩා හොඳ දසුනක් ලබා ගැනීම සඳහා මෙම යෙදුම යළි ඇරඹීමට තට්ටු කරන්න."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"කැමරා ගැටලුද?\nයළි සවි කිරීමට තට්ටු කරන්න"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"එය විසඳුවේ නැතිද?\nප්‍රතිවර්තනය කිරීමට තට්ටු කරන්න"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"කැමරා ගැටලු නොමැතිද? ඉවත දැමීමට තට්ටු කරන්න"</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"සම්පූර්ණ තිරයට යාමට ඔබගේ උපාංගය කරකවන්න"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"එය නැවත ස්ථානගත කිරීමට යෙදුමකට යාබදව දෙවරක් තට්ටු කරන්න"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"තේරුණා"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"වැඩිදුර තොරතුරු සඳහා දිග හරින්න"</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"විහිදන්න"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"වසන්න"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-sk/strings.xml b/libs/WindowManager/Shell/res/values-sk/strings.xml
index a231cac..b5bedf7 100644
--- a/libs/WindowManager/Shell/res/values-sk/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sk/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Bublina"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Spravovať"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bublina bola zavretá."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Klepnutím reštartujete túto aplikáciu a prejdete do režimu celej obrazovky."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Ak chcete zlepšiť zobrazenie, klepnutím túto aplikáciu reštartujte."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problémy s kamerou?\nKlepnutím znova upravte."</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Nevyriešilo sa to?\nKlepnutím sa vráťte."</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nemáte problémy s kamerou? Klepnutím zatvoríte."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Otočením zariadenia prejdete do režimu celej obrazovky"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Dvojitým klepnutím vedľa aplikácie zmeníte jej pozíciu"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Dobre"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Po rozbalení sa dozviete viac."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maximalizovať"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Zavrieť"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-sl/strings.xml b/libs/WindowManager/Shell/res/values-sl/strings.xml
index adeaae97..ac926b9 100644
--- a/libs/WindowManager/Shell/res/values-sl/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sl/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Mehurček"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Upravljanje"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Oblaček je bil opuščen."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Dotaknite se za vnovični zagon te aplikacije in preklop v celozaslonski način."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Če želite boljši prikaz, se dotaknite za vnovični zagon te aplikacije."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Težave s fotoaparatom?\nDotaknite se za vnovično prilagoditev"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"To ni odpravilo težave?\nDotaknite se za povrnitev"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nimate težav s fotoaparatom? Dotaknite se za opustitev."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Če želite preklopiti v celozaslonski način, zasukajte napravo."</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Dvakrat se dotaknite ob aplikaciji, če jo želite prestaviti."</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"V redu"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Razširitev za več informacij"</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maksimiraj"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Zapri"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-sq/strings.xml b/libs/WindowManager/Shell/res/values-sq/strings.xml
index 2839b4b..07c52fe 100644
--- a/libs/WindowManager/Shell/res/values-sq/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sq/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Flluskë"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Menaxho"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Flluska u hoq."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Trokit për ta rinisur këtë aplikacion dhe për të kaluar në ekranin e plotë."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Trokit për të rifilluar këtë aplikacion për një pamje më të mirë."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Ka probleme me kamerën?\nTrokit për ta ripërshtatur"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Nuk u rregullua?\nTrokit për ta rikthyer"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nuk ka probleme me kamerën? Trokit për ta shpërfillur."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Rrotullo ekranin për të kaluar në ekran të plotë"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Trokit dy herë pranë një aplikacioni për ta ripozicionuar"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"E kuptova"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Zgjeroje për më shumë informacion."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Maksimizo"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Mbyll"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-sr/strings.xml b/libs/WindowManager/Shell/res/values-sr/strings.xml
index 9db6b7c..0289dd1 100644
--- a/libs/WindowManager/Shell/res/values-sr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sr/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Облачић"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Управљајте"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Облачић је одбачен."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Додирните да бисте рестартовали апликацију и прешли у режим целог екрана."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Додирните да бисте рестартовали ову апликацију ради бољег приказа."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Имате проблема са камером?\nДодирните да бисте поново уклопили"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Проблем није решен?\nДодирните да бисте вратили"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Немате проблема са камером? Додирните да бисте одбацили."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Ротирајте уређај за приказ преко целог екрана"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Двапут додирните поред апликације да бисте променили њену позицију"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Важи"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Проширите за још информација."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Увећајте"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Затворите"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-sv/strings.xml b/libs/WindowManager/Shell/res/values-sv/strings.xml
index f6bd554..cfdb1dd 100644
--- a/libs/WindowManager/Shell/res/values-sv/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sv/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Bubbla"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Hantera"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bubblan ignorerades."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Tryck för att starta om appen i helskärmsläge."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Tryck för att starta om appen och få en bättre vy."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problem med kameran?\nTryck för att anpassa på nytt"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Löstes inte problemet?\nTryck för att återställa"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Inga problem med kameran? Tryck för att ignorera."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Rotera skärmen för att gå över till helskärmsläge"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Tryck snabbt två gånger bredvid en app för att flytta den"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Utöka för mer information."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Utöka"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Stäng"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-sw/strings.xml b/libs/WindowManager/Shell/res/values-sw/strings.xml
index f6e55852..383e9bb 100644
--- a/libs/WindowManager/Shell/res/values-sw/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sw/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Kiputo"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Dhibiti"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Umeondoa kiputo."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Gusa ili uzime na uwashe programu hii, kisha nenda kwenye skrini nzima."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Gusa ili uzime kisha uwashe programu hii, ili upate mwonekano bora."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Je, kuna hitilafu za kamera?\nGusa ili urekebishe"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Umeshindwa kurekebisha?\nGusa ili urejeshe nakala ya awali"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Je, hakuna hitilafu za kamera? Gusa ili uondoe."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Zungusha kifaa chako ili uende kwenye hali ya skrini nzima"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Gusa mara mbili karibu na programu ili uihamishe"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Nimeelewa"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Panua ili upate maelezo zaidi."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Panua"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Funga"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-ta/strings.xml b/libs/WindowManager/Shell/res/values-ta/strings.xml
index d8334ad..cc512f3 100644
--- a/libs/WindowManager/Shell/res/values-ta/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ta/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"பபிள்"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"நிர்வகி"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"குமிழ் நிராகரிக்கப்பட்டது."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"தட்டுவதன் மூலம் இந்த ஆப்ஸை மீண்டும் தொடங்கலாம், முழுத்திரையில் பார்க்கலாம்."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"இங்கு தட்டுவதன் மூலம் இந்த ஆப்ஸை மீண்டும் தொடங்கி, ஆப்ஸ் காட்டப்படும் விதத்தை இன்னும் சிறப்பாக்கலாம்."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"கேமரா தொடர்பான சிக்கல்களா?\nமீண்டும் பொருத்த தட்டவும்"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"சிக்கல்கள் சரிசெய்யப்படவில்லையா?\nமாற்றியமைக்க தட்டவும்"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"கேமரா தொடர்பான சிக்கல்கள் எதுவும் இல்லையா? நிராகரிக்க தட்டவும்."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"முழுத்திரைக்குச் செல்ல உங்கள் சாதனத்தைச் சுழற்றவும்"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"ஆப்ஸை இடம் மாற்ற, ஆப்ஸுக்கு அடுத்து இருமுறை தட்டவும்"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"சரி"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"கூடுதல் தகவல்களுக்கு விரிவாக்கலாம்."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"பெரிதாக்கும்"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"மூடும்"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-te/strings.xml b/libs/WindowManager/Shell/res/values-te/strings.xml
index 7330755..cdbe021 100644
--- a/libs/WindowManager/Shell/res/values-te/strings.xml
+++ b/libs/WindowManager/Shell/res/values-te/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"బబుల్"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"మేనేజ్ చేయండి"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"బబుల్ విస్మరించబడింది."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"ఈ యాప్‌ను రీస్టార్ట్ చేయడానికి ట్యాప్ చేసి, ఆపై పూర్తి స్క్రీన్‌లోకి వెళ్లండి."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"మెరుగైన వీక్షణ కోసం ఈ యాప్‌ను రీస్టార్ట్ చేయడానికి ట్యాప్ చేయండి."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"కెమెరా సమస్యలు ఉన్నాయా?\nరీఫిట్ చేయడానికి ట్యాప్ చేయండి"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"దాని సమస్యను పరిష్కరించలేదా?\nపూర్వస్థితికి మార్చడానికి ట్యాప్ చేయండి"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"కెమెరా సమస్యలు లేవా? తీసివేయడానికి ట్యాప్ చేయండి."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"ఫుల్ స్క్రీన్‌కు వెళ్లడానికి మీ పరికరాన్ని తిప్పండి"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"యాప్ స్థానాన్ని మార్చడానికి దాని పక్కన డబుల్-ట్యాప్ చేయండి"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"అర్థమైంది"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"మరింత సమాచారం కోసం విస్తరించండి."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"గరిష్టీకరించండి"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"మూసివేయండి"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-th/strings.xml b/libs/WindowManager/Shell/res/values-th/strings.xml
index cfee8ea..136a81c 100644
--- a/libs/WindowManager/Shell/res/values-th/strings.xml
+++ b/libs/WindowManager/Shell/res/values-th/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"บับเบิล"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"จัดการ"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ปิดบับเบิลแล้ว"</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"แตะเพื่อรีสตาร์ทแอปนี้และแสดงแบบเต็มหน้าจอ"</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"แตะเพื่อรีสตาร์ทแอปนี้และรับมุมมองที่ดียิ่งขึ้น"</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"หากพบปัญหากับกล้อง\nแตะเพื่อแก้ไข"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"หากไม่ได้แก้ไข\nแตะเพื่อเปลี่ยนกลับ"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"หากไม่พบปัญหากับกล้อง แตะเพื่อปิด"</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"หมุนอุปกรณ์ให้แสดงเต็มหน้าจอ"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"แตะสองครั้งข้างแอปเพื่อเปลี่ยนตำแหน่ง"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"รับทราบ"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"ขยายเพื่อดูข้อมูลเพิ่มเติม"</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"ขยายใหญ่สุด"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"ปิด"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-tl/strings.xml b/libs/WindowManager/Shell/res/values-tl/strings.xml
index eed624d..4d32af3 100644
--- a/libs/WindowManager/Shell/res/values-tl/strings.xml
+++ b/libs/WindowManager/Shell/res/values-tl/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Bubble"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Pamahalaan"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Na-dismiss na ang bubble."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"I-tap para i-restart ang app na ito at mag-full screen."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"I-tap para i-restart ang app na ito para sa mas magandang view."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"May mga isyu sa camera?\nI-tap para i-refit"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Hindi ito naayos?\nI-tap para i-revert"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Walang isyu sa camera? I-tap para i-dismiss."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"I-rotate ang iyong device para mag-full screen"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Mag-double tap sa tabi ng isang app para iposisyon ito ulit"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"I-expand para sa higit pang impormasyon."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"I-maximize"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Isara"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-tr/strings.xml b/libs/WindowManager/Shell/res/values-tr/strings.xml
index 2b4a2d0..f3ab370 100644
--- a/libs/WindowManager/Shell/res/values-tr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-tr/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Baloncuk"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Yönet"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Balon kapatıldı."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Bu uygulamayı yeniden başlatmak ve tam ekrana geçmek için dokunun."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Bu uygulamayı yeniden başlatarak daha iyi bir görünüm elde etmek için dokunun."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Kameranızda sorun mu var?\nDüzeltmek için dokunun"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Bu işlem sorunu düzeltmedi mi?\nİşlemi geri almak için dokunun"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Kameranızda sorun yok mu? Kapatmak için dokunun."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Tam ekrana geçmek için cihazınızı döndürün"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Yeniden konumlandırmak için uygulamanın yanına iki kez dokunun"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Anladım"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Daha fazla bilgi için genişletin."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Ekranı Kapla"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Kapat"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-uk/strings.xml b/libs/WindowManager/Shell/res/values-uk/strings.xml
index c3411a8..d7d82cb 100644
--- a/libs/WindowManager/Shell/res/values-uk/strings.xml
+++ b/libs/WindowManager/Shell/res/values-uk/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Спливаюче сповіщення"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Налаштувати"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Спливаюче сповіщення закрито."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Натисніть, щоб перезапустити додаток і перейти в повноекранний режим."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Натисніть, щоб перезапустити цей додаток для зручнішого перегляду."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Проблеми з камерою?\nНатисніть, щоб пристосувати"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Проблему не вирішено?\nНатисніть, щоб скасувати зміни"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Немає проблем із камерою? Торкніться, щоб закрити."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Щоб перейти в повноекранний режим, поверніть пристрій"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Щоб перемістити додаток, двічі торкніться області поруч із ним"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"ОK"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Розгорніть, щоб дізнатися більше."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Збільшити"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Закрити"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-ur/strings.xml b/libs/WindowManager/Shell/res/values-ur/strings.xml
index a31c2be..4a8476a 100644
--- a/libs/WindowManager/Shell/res/values-ur/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ur/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"بلبلہ"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"نظم کریں"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"بلبلہ برخاست کر دیا گیا۔"</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"یہ ایپ دوبارہ شروع کرنے کے لیے تھپتھپائیں اور پوری اسکرین پر جائیں۔"</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"بہتر منظر کے لیے اس ایپ کو ری اسٹارٹ کرنے کی خاطر تھپتھپائیں۔"</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"کیمرے کے مسائل؟\nدوبارہ فٹ کرنے کیلئے تھپتھپائیں"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"یہ حل نہیں ہوا؟\nلوٹانے کیلئے تھپتھپائیں"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"کوئی کیمرے کا مسئلہ نہیں ہے؟ برخاست کرنے کیلئے تھپتھپائیں۔"</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"پوری اسکرین پر جانے کیلئے اپنا آلہ گھمائیں"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"کسی ایپ کی پوزیشن تبدیل کرنے کے لیے اس کے آگے دو بار تھپتھپائیں"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"سمجھ آ گئی"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"مزید معلومات کے لیے پھیلائیں۔"</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"بڑا کریں"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"بند کریں"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-uz/strings.xml b/libs/WindowManager/Shell/res/values-uz/strings.xml
index 2e32225..8a4eac3 100644
--- a/libs/WindowManager/Shell/res/values-uz/strings.xml
+++ b/libs/WindowManager/Shell/res/values-uz/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Pufaklar"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Boshqarish"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bulutcha yopildi."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Bu ilovani qaytadan ishga tushirish va butun ekranda ochish uchun bosing."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Yaxshiroq koʻrish maqsadida bu ilovani qayta ishga tushirish uchun bosing."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Kamera nosozmi?\nQayta moslash uchun bosing"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Tuzatilmadimi?\nQaytarish uchun bosing"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Kamera muammosizmi? Yopish uchun bosing."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Butun ekranda ochish uchun qurilmani buring"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Qayta joylash uchun keyingi ilova ustiga ikki marta bosing"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"OK"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Batafsil axborot olish uchun kengaytiring."</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Yoyish"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Yopish"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-vi/strings.xml b/libs/WindowManager/Shell/res/values-vi/strings.xml
index 8f3cffe..2f8fe60 100644
--- a/libs/WindowManager/Shell/res/values-vi/strings.xml
+++ b/libs/WindowManager/Shell/res/values-vi/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Bong bóng"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Quản lý"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Đã đóng bong bóng."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Nhấn để khởi động lại ứng dụng này và xem ở chế độ toàn màn hình."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Nhấn để khởi động lại ứng dụng này để xem tốt hơn."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Có vấn đề với máy ảnh?\nHãy nhấn để sửa lỗi"</string>
     <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>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Xoay thiết bị để chuyển sang chế độ toàn màn hình"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Nhấn đúp vào bên cạnh ứ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>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Phóng to"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Đóng"</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 19a9d37..ab44fb1 100644
--- a/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml
+++ b/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"气泡"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"管理"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"已关闭对话泡。"</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"点按即可重启此应用并进入全屏模式。"</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"点按即可重启此应用,获得更好的视图体验。"</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"相机有问题?\n点按即可整修"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"没有解决此问题?\n点按即可恢复"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"相机没有问题?点按即可忽略。"</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"旋转设备即可进入全屏模式"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"在某个应用旁边连续点按两次,即可调整它的位置"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"知道了"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"展开即可了解详情。"</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"最大化"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"关闭"</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 0c40e96..8fb7ade 100644
--- a/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml
+++ b/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"氣泡"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"管理"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"對話氣泡已關閉。"</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"輕按即可重新開啟此應用程式並放大至全螢幕。"</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"輕按並重新啟動此應用程式,以取得更佳的觀看體驗。"</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"相機有問題?\n輕按即可修正"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"未能修正問題?\n輕按即可還原"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"相機冇問題?㩒一下就可以即可閂咗佢。"</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"旋轉裝置方向即可進入全螢幕模式"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"在應用程式旁輕按兩下即可調整位置"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"知道了"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"展開即可查看詳情。"</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"最大化"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"關閉"</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 8691352..45de415 100644
--- a/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml
+++ b/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"泡泡"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"管理"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"已關閉泡泡。"</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"輕觸即可重新啟動這個應用程式並進入全螢幕模式。"</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"請輕觸並重新啟動此應用程式,取得更良好的觀看體驗。"</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"相機有問題嗎?\n輕觸即可修正"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"未修正問題嗎?\n輕觸即可還原"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"相機沒問題嗎?輕觸即可關閉。"</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"旋轉裝置方向即可進入全螢幕模式"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"在應用程式旁輕觸兩下即可調整位置"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"我知道了"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"展開即可查看詳細資訊。"</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"最大化"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"關閉"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values-zu/strings.xml b/libs/WindowManager/Shell/res/values-zu/strings.xml
index 44ffbc6..7c31a16 100644
--- a/libs/WindowManager/Shell/res/values-zu/strings.xml
+++ b/libs/WindowManager/Shell/res/values-zu/strings.xml
@@ -72,7 +72,7 @@
     <string name="notification_bubble_title" msgid="6082910224488253378">"Ibhamuza"</string>
     <string name="manage_bubbles_text" msgid="7730624269650594419">"Phatha"</string>
     <string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Ibhamuza licashisiwe."</string>
-    <string name="restart_button_description" msgid="5887656107651190519">"Thepha ukuze uqale kabusha lolu hlelo lokusebenza uphinde uye kusikrini esigcwele."</string>
+    <string name="restart_button_description" msgid="6712141648865547958">"Thepha ukuze uqale kabusha le app ukuze ibonakale kangcono."</string>
     <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Izinkinga zekhamera?\nThepha ukuze uyilinganise kabusha"</string>
     <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Akuyilungisanga?\nThepha ukuze ubuyele"</string>
     <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Azikho izinkinga zekhamera? Thepha ukuze ucashise."</string>
@@ -81,4 +81,7 @@
     <string name="letterbox_education_screen_rotation_text" msgid="5085786687366339027">"Zungezisa idivayisi yakho ukuze uye esikrinini esigcwele"</string>
     <string name="letterbox_education_reposition_text" msgid="1068293354123934727">"Thepha kabili eduze kwe-app ukuze uyimise kabusha"</string>
     <string name="letterbox_education_got_it" msgid="4057634570866051177">"Ngiyezwa"</string>
+    <string name="letterbox_education_expand_button_description" msgid="1729796567101129834">"Nweba ukuze uthole ulwazi olwengeziwe"</string>
+    <string name="maximize_button_text" msgid="1650859196290301963">"Khulisa"</string>
+    <string name="close_button_text" msgid="2913281996024033299">"Vala"</string>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values/attrs.xml b/libs/WindowManager/Shell/res/values/attrs.xml
index 4aaeef8..2aad4c1c 100644
--- a/libs/WindowManager/Shell/res/values/attrs.xml
+++ b/libs/WindowManager/Shell/res/values/attrs.xml
@@ -19,4 +19,8 @@
         <attr name="icon" format="reference" />
         <attr name="text" format="string" />
     </declare-styleable>
+
+    <declare-styleable name="MessageState">
+        <attr name="state_task_focused" format="boolean"/>
+    </declare-styleable>
 </resources>
diff --git a/libs/WindowManager/Shell/res/values/strings.xml b/libs/WindowManager/Shell/res/values/strings.xml
index a24311f..68a08513 100644
--- a/libs/WindowManager/Shell/res/values/strings.xml
+++ b/libs/WindowManager/Shell/res/values/strings.xml
@@ -157,7 +157,7 @@
     <string name="accessibility_bubble_dismissed">Bubble dismissed.</string>
 
     <!-- Description of the restart button in the hint of size compatibility mode. [CHAR LIMIT=NONE] -->
-    <string name="restart_button_description">Tap to restart this app and go full screen.</string>
+    <string name="restart_button_description">Tap to restart this app for a better view.</string>
 
     <!-- Description of the camera compat button for applying stretched issues treatment in the hint for
          compatibility control. [CHAR LIMIT=NONE] -->
@@ -186,4 +186,12 @@
     <!-- Button text for dismissing the letterbox education dialog. [CHAR LIMIT=20] -->
     <string name="letterbox_education_got_it">Got it</string>
 
+    <!-- Accessibility description of the letterbox education toast expand to dialog button. [CHAR LIMIT=NONE] -->
+    <string name="letterbox_education_expand_button_description">Expand for more information.</string>
+
+    <!-- Freeform window caption strings -->
+    <!-- Accessibility text for the maximize window button [CHAR LIMIT=NONE] -->
+    <string name="maximize_button_text">Maximize</string>
+    <!-- Accessibility text for the close window button [CHAR LIMIT=NONE] -->
+    <string name="close_button_text">Close</string>
 </resources>
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/RootDisplayAreaOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/RootDisplayAreaOrganizer.java
index 14ba9df..764e650 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/RootDisplayAreaOrganizer.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/RootDisplayAreaOrganizer.java
@@ -85,6 +85,8 @@
         }
 
         mDisplayAreasInfo.remove(displayId);
+        mLeashes.get(displayId).release();
+        mLeashes.remove(displayId);
     }
 
     @Override
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellCommandHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/ShellCommandHandler.java
deleted file mode 100644
index 73fd693..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellCommandHandler.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.wm.shell;
-
-import com.android.wm.shell.common.annotations.ExternalThread;
-
-import java.io.PrintWriter;
-
-/**
- * An entry point into the shell for dumping shell internal state and running adb commands.
- *
- * Use with {@code adb shell dumpsys activity service SystemUIService WMShell ...}.
- */
-@ExternalThread
-public interface ShellCommandHandler {
-    /**
-     * Dumps the shell state.
-     */
-    void dump(PrintWriter pw);
-
-    /**
-     * Handles a shell command.
-     */
-    boolean handleCommand(final String[] args, PrintWriter pw);
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellCommandHandlerImpl.java b/libs/WindowManager/Shell/src/com/android/wm/shell/ShellCommandHandlerImpl.java
deleted file mode 100644
index 06f4367..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellCommandHandlerImpl.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.wm.shell;
-
-import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_BOTTOM_OR_RIGHT;
-
-import com.android.wm.shell.apppairs.AppPairsController;
-import com.android.wm.shell.common.ShellExecutor;
-import com.android.wm.shell.hidedisplaycutout.HideDisplayCutoutController;
-import com.android.wm.shell.kidsmode.KidsModeTaskOrganizer;
-import com.android.wm.shell.legacysplitscreen.LegacySplitScreenController;
-import com.android.wm.shell.onehanded.OneHandedController;
-import com.android.wm.shell.pip.Pip;
-import com.android.wm.shell.recents.RecentTasksController;
-import com.android.wm.shell.splitscreen.SplitScreenController;
-
-import java.io.PrintWriter;
-import java.util.Optional;
-
-/**
- * An entry point into the shell for dumping shell internal state and running adb commands.
- *
- * Use with {@code adb shell dumpsys activity service SystemUIService WMShell ...}.
- */
-public final class ShellCommandHandlerImpl {
-    private static final String TAG = ShellCommandHandlerImpl.class.getSimpleName();
-
-    private final Optional<LegacySplitScreenController> mLegacySplitScreenOptional;
-    private final Optional<SplitScreenController> mSplitScreenOptional;
-    private final Optional<Pip> mPipOptional;
-    private final Optional<OneHandedController> mOneHandedOptional;
-    private final Optional<HideDisplayCutoutController> mHideDisplayCutout;
-    private final Optional<AppPairsController> mAppPairsOptional;
-    private final Optional<RecentTasksController> mRecentTasks;
-    private final ShellTaskOrganizer mShellTaskOrganizer;
-    private final KidsModeTaskOrganizer mKidsModeTaskOrganizer;
-    private final ShellExecutor mMainExecutor;
-    private final HandlerImpl mImpl = new HandlerImpl();
-
-    public ShellCommandHandlerImpl(
-            ShellTaskOrganizer shellTaskOrganizer,
-            KidsModeTaskOrganizer kidsModeTaskOrganizer,
-            Optional<LegacySplitScreenController> legacySplitScreenOptional,
-            Optional<SplitScreenController> splitScreenOptional,
-            Optional<Pip> pipOptional,
-            Optional<OneHandedController> oneHandedOptional,
-            Optional<HideDisplayCutoutController> hideDisplayCutout,
-            Optional<AppPairsController> appPairsOptional,
-            Optional<RecentTasksController> recentTasks,
-            ShellExecutor mainExecutor) {
-        mShellTaskOrganizer = shellTaskOrganizer;
-        mKidsModeTaskOrganizer = kidsModeTaskOrganizer;
-        mRecentTasks = recentTasks;
-        mLegacySplitScreenOptional = legacySplitScreenOptional;
-        mSplitScreenOptional = splitScreenOptional;
-        mPipOptional = pipOptional;
-        mOneHandedOptional = oneHandedOptional;
-        mHideDisplayCutout = hideDisplayCutout;
-        mAppPairsOptional = appPairsOptional;
-        mMainExecutor = mainExecutor;
-    }
-
-    public ShellCommandHandler asShellCommandHandler() {
-        return mImpl;
-    }
-
-    /** Dumps WM Shell internal state. */
-    private void dump(PrintWriter pw) {
-        mShellTaskOrganizer.dump(pw, "");
-        pw.println();
-        pw.println();
-        mPipOptional.ifPresent(pip -> pip.dump(pw));
-        mLegacySplitScreenOptional.ifPresent(splitScreen -> splitScreen.dump(pw));
-        mOneHandedOptional.ifPresent(oneHanded -> oneHanded.dump(pw));
-        mHideDisplayCutout.ifPresent(hideDisplayCutout -> hideDisplayCutout.dump(pw));
-        pw.println();
-        pw.println();
-        mAppPairsOptional.ifPresent(appPairs -> appPairs.dump(pw, ""));
-        pw.println();
-        pw.println();
-        mSplitScreenOptional.ifPresent(splitScreen -> splitScreen.dump(pw, ""));
-        pw.println();
-        pw.println();
-        mRecentTasks.ifPresent(recentTasks -> recentTasks.dump(pw, ""));
-        pw.println();
-        pw.println();
-        mKidsModeTaskOrganizer.dump(pw, "");
-    }
-
-
-    /** Returns {@code true} if command was found and executed. */
-    private boolean handleCommand(final String[] args, PrintWriter pw) {
-        if (args.length < 2) {
-            // Argument at position 0 is "WMShell".
-            return false;
-        }
-        switch (args[1]) {
-            case "pair":
-                return runPair(args, pw);
-            case "unpair":
-                return runUnpair(args, pw);
-            case "moveToSideStage":
-                return runMoveToSideStage(args, pw);
-            case "removeFromSideStage":
-                return runRemoveFromSideStage(args, pw);
-            case "setSideStagePosition":
-                return runSetSideStagePosition(args, pw);
-            case "help":
-                return runHelp(pw);
-            default:
-                return false;
-        }
-    }
-
-    private boolean runPair(String[] args, PrintWriter pw) {
-        if (args.length < 4) {
-            // First two arguments are "WMShell" and command name.
-            pw.println("Error: two task ids should be provided as arguments");
-            return false;
-        }
-        final int taskId1 = new Integer(args[2]);
-        final int taskId2 = new Integer(args[3]);
-        mAppPairsOptional.ifPresent(appPairs -> appPairs.pair(taskId1, taskId2));
-        return true;
-    }
-
-    private boolean runUnpair(String[] args, PrintWriter pw) {
-        if (args.length < 3) {
-            // First two arguments are "WMShell" and command name.
-            pw.println("Error: task id should be provided as an argument");
-            return false;
-        }
-        final int taskId = new Integer(args[2]);
-        mAppPairsOptional.ifPresent(appPairs -> appPairs.unpair(taskId));
-        return true;
-    }
-
-    private boolean runMoveToSideStage(String[] args, PrintWriter pw) {
-        if (args.length < 3) {
-            // First arguments are "WMShell" and command name.
-            pw.println("Error: task id should be provided as arguments");
-            return false;
-        }
-        final int taskId = new Integer(args[2]);
-        final int sideStagePosition = args.length > 3
-                ? new Integer(args[3]) : SPLIT_POSITION_BOTTOM_OR_RIGHT;
-        mSplitScreenOptional.ifPresent(split -> split.moveToSideStage(taskId, sideStagePosition));
-        return true;
-    }
-
-    private boolean runRemoveFromSideStage(String[] args, PrintWriter pw) {
-        if (args.length < 3) {
-            // First arguments are "WMShell" and command name.
-            pw.println("Error: task id should be provided as arguments");
-            return false;
-        }
-        final int taskId = new Integer(args[2]);
-        mSplitScreenOptional.ifPresent(split -> split.removeFromSideStage(taskId));
-        return true;
-    }
-
-    private boolean runSetSideStagePosition(String[] args, PrintWriter pw) {
-        if (args.length < 3) {
-            // First arguments are "WMShell" and command name.
-            pw.println("Error: side stage position should be provided as arguments");
-            return false;
-        }
-        final int position = new Integer(args[2]);
-        mSplitScreenOptional.ifPresent(split -> split.setSideStagePosition(position));
-        return true;
-    }
-
-    private boolean runHelp(PrintWriter pw) {
-        pw.println("Window Manager Shell commands:");
-        pw.println("  help");
-        pw.println("      Print this help text.");
-        pw.println("  <no arguments provided>");
-        pw.println("    Dump Window Manager Shell internal state");
-        pw.println("  pair <taskId1> <taskId2>");
-        pw.println("  unpair <taskId>");
-        pw.println("    Pairs/unpairs tasks with given ids.");
-        pw.println("  moveToSideStage <taskId> <SideStagePosition>");
-        pw.println("    Move a task with given id in split-screen mode.");
-        pw.println("  removeFromSideStage <taskId>");
-        pw.println("    Remove a task with given id in split-screen mode.");
-        pw.println("  setSideStageOutline <true/false>");
-        pw.println("    Enable/Disable outline on the side-stage.");
-        pw.println("  setSideStagePosition <SideStagePosition>");
-        pw.println("    Sets the position of the side-stage.");
-        return true;
-    }
-
-    private class HandlerImpl implements ShellCommandHandler {
-        @Override
-        public void dump(PrintWriter pw) {
-            try {
-                mMainExecutor.executeBlocking(() -> ShellCommandHandlerImpl.this.dump(pw));
-            } catch (InterruptedException e) {
-                throw new RuntimeException("Failed to dump the Shell in 2s", e);
-            }
-        }
-
-        @Override
-        public boolean handleCommand(String[] args, PrintWriter pw) {
-            try {
-                boolean[] result = new boolean[1];
-                mMainExecutor.executeBlocking(() -> {
-                    result[0] = ShellCommandHandlerImpl.this.handleCommand(args, pw);
-                });
-                return result[0];
-            } catch (InterruptedException e) {
-                throw new RuntimeException("Failed to handle Shell command in 2s", e);
-            }
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellInit.java b/libs/WindowManager/Shell/src/com/android/wm/shell/ShellInit.java
deleted file mode 100644
index d7010b1..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellInit.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.wm.shell;
-
-import com.android.wm.shell.common.annotations.ExternalThread;
-
-/**
- * An entry point into the shell for initializing shell internal state.
- */
-@ExternalThread
-public interface ShellInit {
-    /**
-     * Initializes the shell state.
-     */
-    void init();
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellInitImpl.java b/libs/WindowManager/Shell/src/com/android/wm/shell/ShellInitImpl.java
deleted file mode 100644
index 62fb840..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellInitImpl.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.wm.shell;
-
-import static com.android.wm.shell.ShellTaskOrganizer.TASK_LISTENER_TYPE_FULLSCREEN;
-
-import com.android.wm.shell.apppairs.AppPairsController;
-import com.android.wm.shell.bubbles.BubbleController;
-import com.android.wm.shell.common.DisplayController;
-import com.android.wm.shell.common.DisplayImeController;
-import com.android.wm.shell.common.DisplayInsetsController;
-import com.android.wm.shell.common.ShellExecutor;
-import com.android.wm.shell.common.annotations.ExternalThread;
-import com.android.wm.shell.draganddrop.DragAndDropController;
-import com.android.wm.shell.freeform.FreeformTaskListener;
-import com.android.wm.shell.fullscreen.FullscreenTaskListener;
-import com.android.wm.shell.fullscreen.FullscreenUnfoldController;
-import com.android.wm.shell.kidsmode.KidsModeTaskOrganizer;
-import com.android.wm.shell.pip.phone.PipTouchHandler;
-import com.android.wm.shell.recents.RecentTasksController;
-import com.android.wm.shell.splitscreen.SplitScreenController;
-import com.android.wm.shell.startingsurface.StartingWindowController;
-import com.android.wm.shell.transition.Transitions;
-import com.android.wm.shell.unfold.UnfoldTransitionHandler;
-
-import java.util.Optional;
-
-/**
- * The entry point implementation into the shell for initializing shell internal state.
- */
-public class ShellInitImpl {
-    private static final String TAG = ShellInitImpl.class.getSimpleName();
-
-    private final DisplayController mDisplayController;
-    private final DisplayImeController mDisplayImeController;
-    private final DisplayInsetsController mDisplayInsetsController;
-    private final DragAndDropController mDragAndDropController;
-    private final ShellTaskOrganizer mShellTaskOrganizer;
-    private final KidsModeTaskOrganizer mKidsModeTaskOrganizer;
-    private final Optional<BubbleController> mBubblesOptional;
-    private final Optional<SplitScreenController> mSplitScreenOptional;
-    private final Optional<AppPairsController> mAppPairsOptional;
-    private final Optional<PipTouchHandler> mPipTouchHandlerOptional;
-    private final FullscreenTaskListener mFullscreenTaskListener;
-    private final Optional<FullscreenUnfoldController> mFullscreenUnfoldController;
-    private final Optional<UnfoldTransitionHandler> mUnfoldTransitionHandler;
-    private final Optional<FreeformTaskListener> mFreeformTaskListenerOptional;
-    private final ShellExecutor mMainExecutor;
-    private final Transitions mTransitions;
-    private final StartingWindowController mStartingWindow;
-    private final Optional<RecentTasksController> mRecentTasks;
-
-    private final InitImpl mImpl = new InitImpl();
-
-    public ShellInitImpl(
-            DisplayController displayController,
-            DisplayImeController displayImeController,
-            DisplayInsetsController displayInsetsController,
-            DragAndDropController dragAndDropController,
-            ShellTaskOrganizer shellTaskOrganizer,
-            KidsModeTaskOrganizer kidsModeTaskOrganizer,
-            Optional<BubbleController> bubblesOptional,
-            Optional<SplitScreenController> splitScreenOptional,
-            Optional<AppPairsController> appPairsOptional,
-            Optional<PipTouchHandler> pipTouchHandlerOptional,
-            FullscreenTaskListener fullscreenTaskListener,
-            Optional<FullscreenUnfoldController> fullscreenUnfoldTransitionController,
-            Optional<UnfoldTransitionHandler> unfoldTransitionHandler,
-            Optional<FreeformTaskListener> freeformTaskListenerOptional,
-            Optional<RecentTasksController> recentTasks,
-            Transitions transitions,
-            StartingWindowController startingWindow,
-            ShellExecutor mainExecutor) {
-        mDisplayController = displayController;
-        mDisplayImeController = displayImeController;
-        mDisplayInsetsController = displayInsetsController;
-        mDragAndDropController = dragAndDropController;
-        mShellTaskOrganizer = shellTaskOrganizer;
-        mKidsModeTaskOrganizer = kidsModeTaskOrganizer;
-        mBubblesOptional = bubblesOptional;
-        mSplitScreenOptional = splitScreenOptional;
-        mAppPairsOptional = appPairsOptional;
-        mFullscreenTaskListener = fullscreenTaskListener;
-        mPipTouchHandlerOptional = pipTouchHandlerOptional;
-        mFullscreenUnfoldController = fullscreenUnfoldTransitionController;
-        mUnfoldTransitionHandler = unfoldTransitionHandler;
-        mFreeformTaskListenerOptional = freeformTaskListenerOptional;
-        mRecentTasks = recentTasks;
-        mTransitions = transitions;
-        mMainExecutor = mainExecutor;
-        mStartingWindow = startingWindow;
-    }
-
-    public ShellInit asShellInit() {
-        return mImpl;
-    }
-
-    private void init() {
-        // Start listening for display and insets changes
-        mDisplayController.initialize();
-        mDisplayInsetsController.initialize();
-        mDisplayImeController.startMonitorDisplays();
-
-        // Setup the shell organizer
-        mShellTaskOrganizer.addListenerForType(
-                mFullscreenTaskListener, TASK_LISTENER_TYPE_FULLSCREEN);
-        mShellTaskOrganizer.initStartingWindow(mStartingWindow);
-        mShellTaskOrganizer.registerOrganizer();
-
-        mAppPairsOptional.ifPresent(AppPairsController::onOrganizerRegistered);
-        mSplitScreenOptional.ifPresent(SplitScreenController::onOrganizerRegistered);
-        mBubblesOptional.ifPresent(BubbleController::initialize);
-
-        // Bind the splitscreen impl to the drag drop controller
-        mDragAndDropController.initialize(mSplitScreenOptional);
-
-        if (Transitions.ENABLE_SHELL_TRANSITIONS) {
-            mTransitions.register(mShellTaskOrganizer);
-            mUnfoldTransitionHandler.ifPresent(UnfoldTransitionHandler::init);
-        }
-
-        // TODO(b/181599115): This should really be the pip controller, but until we can provide the
-        // controller instead of the feature interface, can just initialize the touch handler if
-        // needed
-        mPipTouchHandlerOptional.ifPresent((handler) -> handler.init());
-
-        // Initialize optional freeform
-        mFreeformTaskListenerOptional.ifPresent(f ->
-                mShellTaskOrganizer.addListenerForType(
-                        f, ShellTaskOrganizer.TASK_LISTENER_TYPE_FREEFORM));
-
-        mFullscreenUnfoldController.ifPresent(FullscreenUnfoldController::init);
-        mRecentTasks.ifPresent(RecentTasksController::init);
-
-        // Initialize kids mode task organizer
-        mKidsModeTaskOrganizer.initialize(mStartingWindow);
-    }
-
-    @ExternalThread
-    private class InitImpl implements ShellInit {
-        @Override
-        public void init() {
-            try {
-                mMainExecutor.executeBlocking(() -> ShellInitImpl.this.init());
-            } catch (InterruptedException e) {
-                throw new RuntimeException("Failed to initialize the Shell in 2s", e);
-            }
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java
index 31f0ef01..5cba3b4 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java
@@ -23,6 +23,7 @@
 import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
 
 import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_TASK_ORG;
+import static com.android.wm.shell.transition.Transitions.ENABLE_SHELL_TRANSITIONS;
 
 import android.annotation.IntDef;
 import android.annotation.NonNull;
@@ -30,7 +31,6 @@
 import android.app.ActivityManager.RunningTaskInfo;
 import android.app.TaskInfo;
 import android.app.WindowConfiguration;
-import android.content.Context;
 import android.content.LocusId;
 import android.content.pm.ActivityInfo;
 import android.graphics.Rect;
@@ -55,6 +55,8 @@
 import com.android.wm.shell.compatui.CompatUIController;
 import com.android.wm.shell.recents.RecentTasksController;
 import com.android.wm.shell.startingsurface.StartingWindowController;
+import com.android.wm.shell.sysui.ShellInit;
+import com.android.wm.shell.unfold.UnfoldAnimationController;
 
 import java.io.PrintWriter;
 import java.util.ArrayList;
@@ -179,38 +181,50 @@
     private final Optional<RecentTasksController> mRecentTasks;
 
     @Nullable
+    private final UnfoldAnimationController mUnfoldAnimationController;
+
+    @Nullable
     private RunningTaskInfo mLastFocusedTaskInfo;
 
-    public ShellTaskOrganizer(ShellExecutor mainExecutor, Context context) {
-        this(null /* taskOrganizerController */, mainExecutor, context, null /* compatUI */,
-                Optional.empty() /* recentTasksController */);
+    public ShellTaskOrganizer(ShellExecutor mainExecutor) {
+        this(null /* shellInit */, null /* taskOrganizerController */, null /* compatUI */,
+                Optional.empty() /* unfoldAnimationController */,
+                Optional.empty() /* recentTasksController */,
+                mainExecutor);
     }
 
-    public ShellTaskOrganizer(ShellExecutor mainExecutor, Context context, @Nullable
-            CompatUIController compatUI) {
-        this(null /* taskOrganizerController */, mainExecutor, context, compatUI,
-                Optional.empty() /* recentTasksController */);
-    }
-
-    public ShellTaskOrganizer(ShellExecutor mainExecutor, Context context, @Nullable
-            CompatUIController compatUI,
-            Optional<RecentTasksController> recentTasks) {
-        this(null /* taskOrganizerController */, mainExecutor, context, compatUI,
-                recentTasks);
+    public ShellTaskOrganizer(ShellInit shellInit,
+            @Nullable CompatUIController compatUI,
+            Optional<UnfoldAnimationController> unfoldAnimationController,
+            Optional<RecentTasksController> recentTasks,
+            ShellExecutor mainExecutor) {
+        this(shellInit, null /* taskOrganizerController */, compatUI,
+                unfoldAnimationController, recentTasks, mainExecutor);
     }
 
     @VisibleForTesting
-    protected ShellTaskOrganizer(ITaskOrganizerController taskOrganizerController,
-            ShellExecutor mainExecutor, Context context, @Nullable CompatUIController compatUI,
-            Optional<RecentTasksController> recentTasks) {
+    protected ShellTaskOrganizer(ShellInit shellInit,
+            ITaskOrganizerController taskOrganizerController,
+            @Nullable CompatUIController compatUI,
+            Optional<UnfoldAnimationController> unfoldAnimationController,
+            Optional<RecentTasksController> recentTasks,
+            ShellExecutor mainExecutor) {
         super(taskOrganizerController, mainExecutor);
         mCompatUI = compatUI;
         mRecentTasks = recentTasks;
-        if (compatUI != null) {
-            compatUI.setCompatUICallback(this);
+        mUnfoldAnimationController = unfoldAnimationController.orElse(null);
+        if (shellInit != null) {
+            shellInit.addInitCallback(this::onInit, this);
         }
     }
 
+    private void onInit() {
+        if (mCompatUI != null) {
+            mCompatUI.setCompatUICallback(this);
+        }
+        registerOrganizer();
+    }
+
     @Override
     public List<TaskAppearedInfo> registerOrganizer() {
         synchronized (mLock) {
@@ -437,8 +451,12 @@
         if (listener != null) {
             listener.onTaskAppeared(info.getTaskInfo(), info.getLeash());
         }
+        if (mUnfoldAnimationController != null) {
+            mUnfoldAnimationController.onTaskAppeared(info.getTaskInfo(), info.getLeash());
+        }
         notifyLocusVisibilityIfNeeded(info.getTaskInfo());
         notifyCompatUI(info.getTaskInfo(), listener);
+        mRecentTasks.ifPresent(recentTasks -> recentTasks.onTaskAdded(info.getTaskInfo()));
     }
 
     /**
@@ -458,6 +476,11 @@
     public void onTaskInfoChanged(RunningTaskInfo taskInfo) {
         synchronized (mLock) {
             ProtoLog.v(WM_SHELL_TASK_ORG, "Task info changed taskId=%d", taskInfo.taskId);
+
+            if (mUnfoldAnimationController != null) {
+                mUnfoldAnimationController.onTaskInfoChanged(taskInfo);
+            }
+
             final TaskAppearedInfo data = mTasks.get(taskInfo.taskId);
             final TaskListener oldListener = getTaskListener(data.getTaskInfo());
             final TaskListener newListener = getTaskListener(taskInfo);
@@ -482,7 +505,9 @@
                     || (taskInfo.topActivityType == WindowConfiguration.ACTIVITY_TYPE_HOME
                     && taskInfo.isVisible);
             final boolean focusTaskChanged = (mLastFocusedTaskInfo == null
-                    || mLastFocusedTaskInfo.taskId != taskInfo.taskId) && isFocusedOrHome;
+                    || mLastFocusedTaskInfo.taskId != taskInfo.taskId
+                    || mLastFocusedTaskInfo.getWindowingMode() != taskInfo.getWindowingMode())
+                    && isFocusedOrHome;
             if (focusTaskChanged) {
                 for (int i = 0; i < mFocusListeners.size(); i++) {
                     mFocusListeners.valueAt(i).onFocusTaskChanged(taskInfo);
@@ -507,8 +532,13 @@
     public void onTaskVanished(RunningTaskInfo taskInfo) {
         synchronized (mLock) {
             ProtoLog.v(WM_SHELL_TASK_ORG, "Task vanished taskId=%d", taskInfo.taskId);
+            if (mUnfoldAnimationController != null) {
+                mUnfoldAnimationController.onTaskVanished(taskInfo);
+            }
+
             final int taskId = taskInfo.taskId;
-            final TaskListener listener = getTaskListener(mTasks.get(taskId).getTaskInfo());
+            final TaskAppearedInfo appearedInfo = mTasks.get(taskId);
+            final TaskListener listener = getTaskListener(appearedInfo.getTaskInfo());
             mTasks.remove(taskId);
             if (listener != null) {
                 listener.onTaskVanished(taskInfo);
@@ -518,6 +548,11 @@
             notifyCompatUI(taskInfo, null /* taskListener */);
             // Notify the recent tasks that a task has been removed
             mRecentTasks.ifPresent(recentTasks -> recentTasks.onTaskRemoved(taskInfo));
+
+            if (!ENABLE_SHELL_TRANSITIONS && (appearedInfo.getLeash() != null)) {
+                // Preemptively clean up the leash only if shell transitions are not enabled
+                appearedInfo.getLeash().release();
+            }
         }
     }
 
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
new file mode 100644
index 0000000..b305897
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingController.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.activityembedding;
+
+import static android.window.TransitionInfo.FLAG_IS_EMBEDDED;
+
+import android.content.Context;
+import android.os.IBinder;
+import android.view.SurfaceControl;
+import android.window.TransitionInfo;
+import android.window.TransitionRequestInfo;
+import android.window.WindowContainerTransaction;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.android.wm.shell.sysui.ShellInit;
+import com.android.wm.shell.transition.Transitions;
+
+/**
+ * Responsible for handling ActivityEmbedding related transitions.
+ */
+public class ActivityEmbeddingController implements Transitions.TransitionHandler {
+
+    private final Context mContext;
+    private final Transitions mTransitions;
+
+    public ActivityEmbeddingController(Context context, ShellInit shellInit,
+            Transitions transitions) {
+        mContext = context;
+        mTransitions = transitions;
+        if (Transitions.ENABLE_SHELL_TRANSITIONS) {
+            shellInit.addInitCallback(this::onInit, this);
+        }
+    }
+
+    /** Registers to handle transitions. */
+    public void onInit() {
+        mTransitions.addHandler(this);
+    }
+
+    @Override
+    public boolean startAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
+            @NonNull SurfaceControl.Transaction startTransaction,
+            @NonNull SurfaceControl.Transaction finishTransaction,
+            @NonNull Transitions.TransitionFinishCallback finishCallback) {
+        // TODO(b/207070762) Handle AE animation as a part of other transitions.
+        // Only handle the transition if all containers are embedded.
+        for (TransitionInfo.Change change : info.getChanges()) {
+            if (!isEmbedded(change)) {
+                return false;
+            }
+        }
+
+        // TODO(b/207070762) Implement AE animation.
+        startTransaction.apply();
+        finishCallback.onTransitionFinished(null /* wct */, null /* wctCB */);
+        return true;
+    }
+
+    @Nullable
+    @Override
+    public WindowContainerTransaction handleRequest(@NonNull IBinder transition,
+            @NonNull TransitionRequestInfo request) {
+        return null;
+    }
+
+    private static boolean isEmbedded(@NonNull TransitionInfo.Change change) {
+        return (change.getFlags() & FLAG_IS_EMBEDDED) != 0;
+    }
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/animation/Interpolators.java b/libs/WindowManager/Shell/src/com/android/wm/shell/animation/Interpolators.java
index 2aead93..a0dde6a 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/animation/Interpolators.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/animation/Interpolators.java
@@ -53,6 +53,19 @@
     public static final Interpolator LINEAR_OUT_SLOW_IN = new PathInterpolator(0f, 0f, 0.2f, 1f);
 
     /**
+     * The accelerated emphasized interpolator. Used for hero / emphasized movement of content that
+     * is disappearing e.g. when moving off screen.
+     */
+    public static final Interpolator EMPHASIZED_ACCELERATE = new PathInterpolator(
+            0.3f, 0f, 0.8f, 0.15f);
+
+    /**
+     * The decelerating emphasized interpolator. Used for hero / emphasized movement of content that
+     * is appearing e.g. when coming from off screen
+     */
+    public static final Interpolator EMPHASIZED_DECELERATE = new PathInterpolator(
+            0.05f, 0.7f, 0.1f, 1f);
+    /**
      * Interpolator to be used when animating a move based on a click. Pair with enough duration.
      */
     public static final Interpolator TOUCH_RESPONSE = new PathInterpolator(0.3f, 0f, 0.1f, 1f);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/animation/PhysicsAnimator.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/animation/PhysicsAnimator.kt
index b483fe0..312af4f 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/animation/PhysicsAnimator.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/animation/PhysicsAnimator.kt
@@ -829,8 +829,12 @@
 
     /** Cancels all in progress animations on all properties. */
     fun cancel() {
-        cancelAction(flingAnimations.keys)
-        cancelAction(springAnimations.keys)
+        if (flingAnimations.size > 0) {
+            cancelAction(flingAnimations.keys)
+        }
+        if (springAnimations.size > 0) {
+            cancelAction(springAnimations.keys)
+        }
     }
 
     /** Cancels in progress animations on the provided properties only. */
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java b/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java
deleted file mode 100644
index 3f0b01b..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java
+++ /dev/null
@@ -1,357 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.apppairs;
-
-import static android.app.ActivityTaskManager.INVALID_TASK_ID;
-import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
-import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
-
-import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_BOTTOM_OR_RIGHT;
-import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_TOP_OR_LEFT;
-import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_UNDEFINED;
-import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_TASK_ORG;
-
-import android.app.ActivityManager;
-import android.view.SurfaceControl;
-import android.view.SurfaceSession;
-import android.window.WindowContainerToken;
-import android.window.WindowContainerTransaction;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-import com.android.internal.protolog.common.ProtoLog;
-import com.android.wm.shell.ShellTaskOrganizer;
-import com.android.wm.shell.common.DisplayController;
-import com.android.wm.shell.common.DisplayImeController;
-import com.android.wm.shell.common.DisplayInsetsController;
-import com.android.wm.shell.common.SurfaceUtils;
-import com.android.wm.shell.common.SyncTransactionQueue;
-import com.android.wm.shell.common.split.SplitLayout;
-import com.android.wm.shell.common.split.SplitWindowManager;
-
-import java.io.PrintWriter;
-
-/**
- * An app-pairs consisting of {@link #mRootTaskInfo} that acts as the hierarchy parent of
- * {@link #mTaskInfo1} and {@link #mTaskInfo2} in the pair.
- * Also includes all UI for managing the pair like the divider.
- */
-class AppPair implements ShellTaskOrganizer.TaskListener, SplitLayout.SplitLayoutHandler {
-    private static final String TAG = AppPair.class.getSimpleName();
-
-    private ActivityManager.RunningTaskInfo mRootTaskInfo;
-    private SurfaceControl mRootTaskLeash;
-    private ActivityManager.RunningTaskInfo mTaskInfo1;
-    private SurfaceControl mTaskLeash1;
-    private ActivityManager.RunningTaskInfo mTaskInfo2;
-    private SurfaceControl mTaskLeash2;
-    private SurfaceControl mDimLayer1;
-    private SurfaceControl mDimLayer2;
-    private final SurfaceSession mSurfaceSession = new SurfaceSession();
-
-    private final AppPairsController mController;
-    private final SyncTransactionQueue mSyncQueue;
-    private final DisplayController mDisplayController;
-    private final DisplayImeController mDisplayImeController;
-    private final DisplayInsetsController mDisplayInsetsController;
-    private SplitLayout mSplitLayout;
-
-    private final SplitWindowManager.ParentContainerCallbacks mParentContainerCallbacks =
-            new SplitWindowManager.ParentContainerCallbacks() {
-        @Override
-        public void attachToParentSurface(SurfaceControl.Builder b) {
-            b.setParent(mRootTaskLeash);
-        }
-
-        @Override
-        public void onLeashReady(SurfaceControl leash) {
-            mSyncQueue.runInSync(t -> t
-                    .show(leash)
-                    .setLayer(leash, Integer.MAX_VALUE)
-                    .setPosition(leash,
-                            mSplitLayout.getDividerBounds().left,
-                            mSplitLayout.getDividerBounds().top));
-        }
-    };
-
-    AppPair(AppPairsController controller) {
-        mController = controller;
-        mSyncQueue = controller.getSyncTransactionQueue();
-        mDisplayController = controller.getDisplayController();
-        mDisplayImeController = controller.getDisplayImeController();
-        mDisplayInsetsController = controller.getDisplayInsetsController();
-    }
-
-    int getRootTaskId() {
-        return mRootTaskInfo != null ? mRootTaskInfo.taskId : INVALID_TASK_ID;
-    }
-
-    private int getTaskId1() {
-        return mTaskInfo1 != null ? mTaskInfo1.taskId : INVALID_TASK_ID;
-    }
-
-    private int getTaskId2() {
-        return mTaskInfo2 != null ? mTaskInfo2.taskId : INVALID_TASK_ID;
-    }
-
-    boolean contains(int taskId) {
-        return taskId == getRootTaskId() || taskId == getTaskId1() || taskId == getTaskId2();
-    }
-
-    boolean pair(ActivityManager.RunningTaskInfo task1, ActivityManager.RunningTaskInfo task2) {
-        ProtoLog.v(WM_SHELL_TASK_ORG, "pair task1=%d task2=%d in AppPair=%s",
-                task1.taskId, task2.taskId, this);
-
-        if (!task1.supportsMultiWindow || !task2.supportsMultiWindow) {
-            ProtoLog.e(WM_SHELL_TASK_ORG,
-                    "Can't pair tasks that doesn't support multi window, "
-                            + "task1.supportsMultiWindow=%b, task2.supportsMultiWindow=%b",
-                    task1.supportsMultiWindow, task2.supportsMultiWindow);
-            return false;
-        }
-
-        mTaskInfo1 = task1;
-        mTaskInfo2 = task2;
-        mSplitLayout = new SplitLayout(TAG + "SplitDivider",
-                mDisplayController.getDisplayContext(mRootTaskInfo.displayId),
-                mRootTaskInfo.configuration, this /* layoutChangeListener */,
-                mParentContainerCallbacks, mDisplayImeController, mController.getTaskOrganizer(),
-                SplitLayout.PARALLAX_DISMISSING);
-        mDisplayInsetsController.addInsetsChangedListener(mRootTaskInfo.displayId, mSplitLayout);
-
-        final WindowContainerToken token1 = task1.token;
-        final WindowContainerToken token2 = task2.token;
-        final WindowContainerTransaction wct = new WindowContainerTransaction();
-
-        wct.setHidden(mRootTaskInfo.token, false)
-                .reparent(token1, mRootTaskInfo.token, true /* onTop */)
-                .reparent(token2, mRootTaskInfo.token, true /* onTop */)
-                .setWindowingMode(token1, WINDOWING_MODE_MULTI_WINDOW)
-                .setWindowingMode(token2, WINDOWING_MODE_MULTI_WINDOW)
-                .setBounds(token1, mSplitLayout.getBounds1())
-                .setBounds(token2, mSplitLayout.getBounds2())
-                // Moving the root task to top after the child tasks were repareted , or the root
-                // task cannot be visible and focused.
-                .reorder(mRootTaskInfo.token, true);
-        mController.getTaskOrganizer().applyTransaction(wct);
-        return true;
-    }
-
-    void unpair() {
-        unpair(null /* toTopToken */);
-    }
-
-    private void unpair(@Nullable WindowContainerToken toTopToken) {
-        final WindowContainerToken token1 = mTaskInfo1.token;
-        final WindowContainerToken token2 = mTaskInfo2.token;
-        final WindowContainerTransaction wct = new WindowContainerTransaction();
-
-        // Reparent out of this container and reset windowing mode.
-        wct.setHidden(mRootTaskInfo.token, true)
-                .reorder(mRootTaskInfo.token, false)
-                .reparent(token1, null, token1 == toTopToken /* onTop */)
-                .reparent(token2, null, token2 == toTopToken /* onTop */)
-                .setWindowingMode(token1, WINDOWING_MODE_UNDEFINED)
-                .setWindowingMode(token2, WINDOWING_MODE_UNDEFINED);
-        mController.getTaskOrganizer().applyTransaction(wct);
-
-        mTaskInfo1 = null;
-        mTaskInfo2 = null;
-        mSplitLayout.release();
-        mSplitLayout = null;
-    }
-
-    @Override
-    public void onTaskAppeared(ActivityManager.RunningTaskInfo taskInfo, SurfaceControl leash) {
-        if (mRootTaskInfo == null || taskInfo.taskId == mRootTaskInfo.taskId) {
-            mRootTaskInfo = taskInfo;
-            mRootTaskLeash = leash;
-        } else if (taskInfo.taskId == getTaskId1()) {
-            mTaskInfo1 = taskInfo;
-            mTaskLeash1 = leash;
-            mSyncQueue.runInSync(t -> mDimLayer1 =
-                    SurfaceUtils.makeDimLayer(t, mTaskLeash1, "Dim layer", mSurfaceSession));
-        } else if (taskInfo.taskId == getTaskId2()) {
-            mTaskInfo2 = taskInfo;
-            mTaskLeash2 = leash;
-            mSyncQueue.runInSync(t -> mDimLayer2 =
-                    SurfaceUtils.makeDimLayer(t, mTaskLeash2, "Dim layer", mSurfaceSession));
-        } else {
-            throw new IllegalStateException("Unknown task=" + taskInfo.taskId);
-        }
-
-        if (mTaskLeash1 == null || mTaskLeash2 == null) return;
-
-        mSplitLayout.init();
-
-        mSyncQueue.runInSync(t -> t
-                .show(mRootTaskLeash)
-                .show(mTaskLeash1)
-                .show(mTaskLeash2)
-                .setPosition(mTaskLeash1,
-                        mTaskInfo1.positionInParent.x,
-                        mTaskInfo1.positionInParent.y)
-                .setPosition(mTaskLeash2,
-                        mTaskInfo2.positionInParent.x,
-                        mTaskInfo2.positionInParent.y));
-    }
-
-    @Override
-    public void onTaskInfoChanged(ActivityManager.RunningTaskInfo taskInfo) {
-        if (!taskInfo.supportsMultiWindow) {
-            // Dismiss AppPair if the task no longer supports multi window.
-            mController.unpair(mRootTaskInfo.taskId);
-            return;
-        }
-        if (taskInfo.taskId == getRootTaskId()) {
-            if (mRootTaskInfo.isVisible != taskInfo.isVisible) {
-                mSyncQueue.runInSync(t -> {
-                    if (taskInfo.isVisible) {
-                        t.show(mRootTaskLeash);
-                    } else {
-                        t.hide(mRootTaskLeash);
-                    }
-                });
-            }
-            mRootTaskInfo = taskInfo;
-
-            if (mSplitLayout != null
-                    && mSplitLayout.updateConfiguration(mRootTaskInfo.configuration)) {
-                onLayoutSizeChanged(mSplitLayout);
-            }
-        } else if (taskInfo.taskId == getTaskId1()) {
-            mTaskInfo1 = taskInfo;
-        } else if (taskInfo.taskId == getTaskId2()) {
-            mTaskInfo2 = taskInfo;
-        } else {
-            throw new IllegalStateException("Unknown task=" + taskInfo.taskId);
-        }
-    }
-
-    @Override
-    public int getSplitItemPosition(WindowContainerToken token) {
-        if (token == null) {
-            return SPLIT_POSITION_UNDEFINED;
-        }
-
-        if (token.equals(mTaskInfo1.getToken())) {
-            return SPLIT_POSITION_TOP_OR_LEFT;
-        } else if (token.equals(mTaskInfo2.getToken())) {
-            return SPLIT_POSITION_BOTTOM_OR_RIGHT;
-        }
-
-        return SPLIT_POSITION_UNDEFINED;
-    }
-
-    @Override
-    public void onTaskVanished(ActivityManager.RunningTaskInfo taskInfo) {
-        if (taskInfo.taskId == getRootTaskId()) {
-            // We don't want to release this object back to the pool since the root task went away.
-            mController.unpair(mRootTaskInfo.taskId, false /* releaseToPool */);
-        } else if (taskInfo.taskId == getTaskId1()) {
-            mController.unpair(mRootTaskInfo.taskId);
-            mSyncQueue.runInSync(t -> t.remove(mDimLayer1));
-        } else if (taskInfo.taskId == getTaskId2()) {
-            mController.unpair(mRootTaskInfo.taskId);
-            mSyncQueue.runInSync(t -> t.remove(mDimLayer2));
-        }
-    }
-
-    @Override
-    public void attachChildSurfaceToTask(int taskId, SurfaceControl.Builder b) {
-        b.setParent(findTaskSurface(taskId));
-    }
-
-    @Override
-    public void reparentChildSurfaceToTask(int taskId, SurfaceControl sc,
-            SurfaceControl.Transaction t) {
-        t.reparent(sc, findTaskSurface(taskId));
-    }
-
-    private SurfaceControl findTaskSurface(int taskId) {
-        if (getRootTaskId() == taskId) {
-            return mRootTaskLeash;
-        } else if (getTaskId1() == taskId) {
-            return mTaskLeash1;
-        } else if (getTaskId2() == taskId) {
-            return mTaskLeash2;
-        } else {
-            throw new IllegalArgumentException("There is no surface for taskId=" + taskId);
-        }
-    }
-
-    @Override
-    public void dump(@NonNull PrintWriter pw, String prefix) {
-        final String innerPrefix = prefix + "  ";
-        final String childPrefix = innerPrefix + "  ";
-        pw.println(prefix + this);
-        if (mRootTaskInfo != null) {
-            pw.println(innerPrefix + "Root taskId=" + mRootTaskInfo.taskId
-                    + " winMode=" + mRootTaskInfo.getWindowingMode());
-        }
-        if (mTaskInfo1 != null) {
-            pw.println(innerPrefix + "1 taskId=" + mTaskInfo1.taskId
-                    + " winMode=" + mTaskInfo1.getWindowingMode());
-        }
-        if (mTaskInfo2 != null) {
-            pw.println(innerPrefix + "2 taskId=" + mTaskInfo2.taskId
-                    + " winMode=" + mTaskInfo2.getWindowingMode());
-        }
-    }
-
-    @Override
-    public String toString() {
-        return TAG + "#" + getRootTaskId();
-    }
-
-    @Override
-    public void onSnappedToDismiss(boolean snappedToEnd) {
-        unpair(snappedToEnd ? mTaskInfo1.token : mTaskInfo2.token /* toTopToken */);
-    }
-
-    @Override
-    public void onLayoutPositionChanging(SplitLayout layout) {
-        mSyncQueue.runInSync(t ->
-                layout.applySurfaceChanges(t, mTaskLeash1, mTaskLeash2, mDimLayer1, mDimLayer2,
-                        true /* applyResizingOffset */));
-    }
-
-    @Override
-    public void onLayoutSizeChanging(SplitLayout layout) {
-        mSyncQueue.runInSync(t ->
-                layout.applySurfaceChanges(t, mTaskLeash1, mTaskLeash2, mDimLayer1, mDimLayer2,
-                        true /* applyResizingOffset */));
-    }
-
-    @Override
-    public void onLayoutSizeChanged(SplitLayout layout) {
-        final WindowContainerTransaction wct = new WindowContainerTransaction();
-        layout.applyTaskChanges(wct, mTaskInfo1, mTaskInfo2);
-        mSyncQueue.queue(wct);
-        mSyncQueue.runInSync(t ->
-                layout.applySurfaceChanges(t, mTaskLeash1, mTaskLeash2, mDimLayer1, mDimLayer2,
-                        false /* applyResizingOffset */));
-    }
-
-    @Override
-    public void setLayoutOffsetTarget(int offsetX, int offsetY, SplitLayout layout) {
-        final WindowContainerTransaction wct = new WindowContainerTransaction();
-        layout.applyLayoutOffsetTarget(wct, offsetX, offsetY, mTaskInfo1, mTaskInfo2);
-        mController.getTaskOrganizer().applyTransaction(wct);
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPairs.java b/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPairs.java
deleted file mode 100644
index a9b1dbc..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPairs.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.apppairs;
-
-import android.app.ActivityManager;
-
-import androidx.annotation.NonNull;
-
-import com.android.wm.shell.common.annotations.ExternalThread;
-
-import java.io.PrintWriter;
-
-/**
- * Interface to engage app pairs feature.
- */
-@ExternalThread
-public interface AppPairs {
-    /** Pairs indicated tasks. */
-    boolean pair(int task1, int task2);
-    /** Pairs indicated tasks. */
-    boolean pair(ActivityManager.RunningTaskInfo task1, ActivityManager.RunningTaskInfo task2);
-    /** Unpairs any app-pair containing this task id. */
-    void unpair(int taskId);
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPairsController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPairsController.java
deleted file mode 100644
index 53234ab..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPairsController.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.apppairs;
-
-import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_TASK_ORG;
-
-import android.app.ActivityManager;
-import android.util.Slog;
-import android.util.SparseArray;
-
-import androidx.annotation.NonNull;
-
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.protolog.common.ProtoLog;
-import com.android.wm.shell.ShellTaskOrganizer;
-import com.android.wm.shell.common.DisplayController;
-import com.android.wm.shell.common.DisplayImeController;
-import com.android.wm.shell.common.DisplayInsetsController;
-import com.android.wm.shell.common.ShellExecutor;
-import com.android.wm.shell.common.SyncTransactionQueue;
-
-import java.io.PrintWriter;
-
-/**
- * Class manages app-pairs multitasking mode and implements the main interface {@link AppPairs}.
- */
-public class AppPairsController {
-    private static final String TAG = AppPairsController.class.getSimpleName();
-
-    private final ShellTaskOrganizer mTaskOrganizer;
-    private final SyncTransactionQueue mSyncQueue;
-    private final ShellExecutor mMainExecutor;
-    private final AppPairsImpl mImpl = new AppPairsImpl();
-
-    private AppPairsPool mPairsPool;
-    // Active app-pairs mapped by root task id key.
-    private final SparseArray<AppPair> mActiveAppPairs = new SparseArray<>();
-    private final DisplayController mDisplayController;
-    private final DisplayImeController mDisplayImeController;
-    private final DisplayInsetsController mDisplayInsetsController;
-
-    public AppPairsController(ShellTaskOrganizer organizer, SyncTransactionQueue syncQueue,
-            DisplayController displayController, ShellExecutor mainExecutor,
-            DisplayImeController displayImeController,
-            DisplayInsetsController displayInsetsController) {
-        mTaskOrganizer = organizer;
-        mSyncQueue = syncQueue;
-        mDisplayController = displayController;
-        mDisplayImeController = displayImeController;
-        mDisplayInsetsController = displayInsetsController;
-        mMainExecutor = mainExecutor;
-    }
-
-    public AppPairs asAppPairs() {
-        return mImpl;
-    }
-
-    public void onOrganizerRegistered() {
-        if (mPairsPool == null) {
-            setPairsPool(new AppPairsPool(this));
-        }
-    }
-
-    @VisibleForTesting
-    public void setPairsPool(AppPairsPool pool) {
-        mPairsPool = pool;
-    }
-
-    public boolean pair(int taskId1, int taskId2) {
-        final ActivityManager.RunningTaskInfo task1 = mTaskOrganizer.getRunningTaskInfo(taskId1);
-        final ActivityManager.RunningTaskInfo task2 = mTaskOrganizer.getRunningTaskInfo(taskId2);
-        if (task1 == null || task2 == null) {
-            return false;
-        }
-        return pair(task1, task2);
-    }
-
-    public boolean pair(ActivityManager.RunningTaskInfo task1,
-            ActivityManager.RunningTaskInfo task2) {
-        return pairInner(task1, task2) != null;
-    }
-
-    @VisibleForTesting
-    public AppPair pairInner(
-            @NonNull ActivityManager.RunningTaskInfo task1,
-            @NonNull ActivityManager.RunningTaskInfo task2) {
-        final AppPair pair = mPairsPool.acquire();
-        if (!pair.pair(task1, task2)) {
-            mPairsPool.release(pair);
-            return null;
-        }
-
-        mActiveAppPairs.put(pair.getRootTaskId(), pair);
-        return pair;
-    }
-
-    public void unpair(int taskId) {
-        unpair(taskId, true /* releaseToPool */);
-    }
-
-    public void unpair(int taskId, boolean releaseToPool) {
-        AppPair pair = mActiveAppPairs.get(taskId);
-        if (pair == null) {
-            for (int i = mActiveAppPairs.size() - 1; i >= 0; --i) {
-                final AppPair candidate = mActiveAppPairs.valueAt(i);
-                if (candidate.contains(taskId)) {
-                    pair = candidate;
-                    break;
-                }
-            }
-        }
-        if (pair == null) {
-            ProtoLog.v(WM_SHELL_TASK_ORG, "taskId %d isn't isn't in an app-pair.", taskId);
-            return;
-        }
-
-        ProtoLog.v(WM_SHELL_TASK_ORG, "unpair taskId=%d pair=%s", taskId, pair);
-        mActiveAppPairs.remove(pair.getRootTaskId());
-        pair.unpair();
-        if (releaseToPool) {
-            mPairsPool.release(pair);
-        }
-    }
-
-    ShellTaskOrganizer getTaskOrganizer() {
-        return mTaskOrganizer;
-    }
-
-    SyncTransactionQueue getSyncTransactionQueue() {
-        return mSyncQueue;
-    }
-
-    DisplayController getDisplayController() {
-        return mDisplayController;
-    }
-
-    DisplayImeController getDisplayImeController() {
-        return mDisplayImeController;
-    }
-
-    DisplayInsetsController getDisplayInsetsController() {
-        return mDisplayInsetsController;
-    }
-
-    public void dump(@NonNull PrintWriter pw, String prefix) {
-        final String innerPrefix = prefix + "  ";
-        final String childPrefix = innerPrefix + "  ";
-        pw.println(prefix + this);
-
-        for (int i = mActiveAppPairs.size() - 1; i >= 0; --i) {
-            mActiveAppPairs.valueAt(i).dump(pw, childPrefix);
-        }
-
-        if (mPairsPool != null) {
-            mPairsPool.dump(pw, prefix);
-        }
-    }
-
-    @Override
-    public String toString() {
-        return TAG + "#" + mActiveAppPairs.size();
-    }
-
-    private class AppPairsImpl implements AppPairs {
-        @Override
-        public boolean pair(int task1, int task2) {
-            boolean[] result = new boolean[1];
-            try {
-                mMainExecutor.executeBlocking(() -> {
-                    result[0] = AppPairsController.this.pair(task1, task2);
-                });
-            } catch (InterruptedException e) {
-                Slog.e(TAG, "Failed to pair tasks: " + task1 + ", " + task2);
-            }
-            return result[0];
-        }
-
-        @Override
-        public boolean pair(ActivityManager.RunningTaskInfo task1,
-                ActivityManager.RunningTaskInfo task2) {
-            boolean[] result = new boolean[1];
-            try {
-                mMainExecutor.executeBlocking(() -> {
-                    result[0] = AppPairsController.this.pair(task1, task2);
-                });
-            } catch (InterruptedException e) {
-                Slog.e(TAG, "Failed to pair tasks: " + task1 + ", " + task2);
-            }
-            return result[0];
-        }
-
-        @Override
-        public void unpair(int taskId) {
-            mMainExecutor.execute(() -> {
-                AppPairsController.this.unpair(taskId);
-            });
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPairsPool.java b/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPairsPool.java
deleted file mode 100644
index 5c6037e..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPairsPool.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.apppairs;
-
-import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
-import static android.view.Display.DEFAULT_DISPLAY;
-
-import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_TASK_ORG;
-
-import androidx.annotation.NonNull;
-
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.protolog.common.ProtoLog;
-
-import java.io.PrintWriter;
-import java.util.ArrayList;
-
-/**
- * Class that manager pool of {@link AppPair} objects. Helps reduce the need to call system_server
- *  to create a root task for the app-pair when needed since we always have one ready to go.
- */
-class AppPairsPool {
-    private static final String TAG = AppPairsPool.class.getSimpleName();
-
-    @VisibleForTesting
-    final AppPairsController mController;
-    // The pool
-    private final ArrayList<AppPair> mPool = new ArrayList();
-
-    AppPairsPool(AppPairsController controller) {
-        mController = controller;
-        incrementPool();
-    }
-
-    AppPair acquire() {
-        final AppPair entry = mPool.remove(mPool.size() - 1);
-        ProtoLog.v(WM_SHELL_TASK_ORG, "acquire entry.taskId=%s listener=%s size=%d",
-                entry.getRootTaskId(), entry, mPool.size());
-        if (mPool.size() == 0) {
-            incrementPool();
-        }
-        return entry;
-    }
-
-    void release(AppPair entry) {
-        mPool.add(entry);
-        ProtoLog.v(WM_SHELL_TASK_ORG, "release entry.taskId=%s listener=%s size=%d",
-                entry.getRootTaskId(), entry, mPool.size());
-    }
-
-    @VisibleForTesting
-    void incrementPool() {
-        ProtoLog.v(WM_SHELL_TASK_ORG, "incrementPool size=%d", mPool.size());
-        final AppPair entry = new AppPair(mController);
-        // TODO: multi-display...
-        mController.getTaskOrganizer().createRootTask(
-                DEFAULT_DISPLAY, WINDOWING_MODE_FULLSCREEN, entry);
-        mPool.add(entry);
-    }
-
-    @VisibleForTesting
-    int poolSize() {
-        return mPool.size();
-    }
-
-    public void dump(@NonNull PrintWriter pw, String prefix) {
-        final String innerPrefix = prefix + "  ";
-        final String childPrefix = innerPrefix + "  ";
-        pw.println(prefix + this);
-        for (int i = mPool.size() - 1; i >= 0; --i) {
-            mPool.get(i).dump(pw, childPrefix);
-        }
-    }
-
-    @Override
-    public String toString() {
-        return TAG + "#" + mPool.size();
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/OWNERS b/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/OWNERS
deleted file mode 100644
index 4d9b520..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-# WM shell sub-modules apppair owner
-chenghsiuchang@google.com
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 8c0affb..86f9d5b 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
@@ -29,6 +29,13 @@
 public interface BackAnimation {
 
     /**
+     * Returns a binder that can be passed to an external process to update back animations.
+     */
+    default IBackAnimation createExternalInterface() {
+        return null;
+    }
+
+    /**
      * Called when a {@link MotionEvent} is generated by a back gesture.
      *
      * @param touchX the X touch position of the {@link MotionEvent}.
@@ -47,13 +54,6 @@
     void setTriggerBack(boolean triggerBack);
 
     /**
-     * Returns a binder that can be passed to an external process to update back animations.
-     */
-    default IBackAnimation createExternalInterface() {
-        return null;
-    }
-
-    /**
      * Sets the threshold values that defining edge swipe behavior.
      * @param triggerThreshold the min threshold to trigger back.
      * @param progressThreshold the max threshold to keep progressing back animation.
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 0cf2b28..05fafc5 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
@@ -30,13 +30,20 @@
 import android.graphics.Point;
 import android.graphics.PointF;
 import android.hardware.HardwareBuffer;
+import android.hardware.input.InputManager;
 import android.net.Uri;
 import android.os.Handler;
+import android.os.IBinder;
 import android.os.RemoteException;
+import android.os.SystemClock;
 import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.provider.Settings.Global;
 import android.util.Log;
+import android.view.IWindowFocusObserver;
+import android.view.InputDevice;
+import android.view.KeyCharacterMap;
+import android.view.KeyEvent;
 import android.view.MotionEvent;
 import android.view.RemoteAnimationTarget;
 import android.view.SurfaceControl;
@@ -107,6 +114,24 @@
         mTransitionInProgress = false;
     };
 
+    @VisibleForTesting
+    final IWindowFocusObserver mFocusObserver = new IWindowFocusObserver.Stub() {
+        @Override
+        public void focusGained(IBinder inputToken) { }
+        @Override
+        public void focusLost(IBinder inputToken) {
+            mShellExecutor.execute(() -> {
+                if (!mBackGestureStarted || mTransitionInProgress) {
+                    // If an uninterruptible transition is already in progress, we should ignore
+                    // this due to the transition may cause focus lost. (alpha = 0)
+                    return;
+                }
+                setTriggerBack(false);
+                onGestureFinished(false);
+            });
+        }
+    };
+
     public BackAnimationController(
             @NonNull @ShellMainThread ShellExecutor shellExecutor,
             @NonNull @ShellBackgroundThread Handler backgroundHandler,
@@ -266,17 +291,20 @@
                 // Let the animation initialized here to make sure the onPointerDownOutsideFocus
                 // could be happened when ACTION_DOWN, it may change the current focus that we
                 // would access it when startBackNavigation.
-                initAnimation(touchX, touchY);
+                onGestureStarted(touchX, touchY);
             }
             onMove(touchX, touchY, swipeEdge);
         } else if (keyAction == MotionEvent.ACTION_UP || keyAction == MotionEvent.ACTION_CANCEL) {
             ProtoLog.d(WM_SHELL_BACK_PREVIEW,
                     "Finishing gesture with event action: %d", keyAction);
-            onGestureFinished();
+            if (keyAction == MotionEvent.ACTION_CANCEL) {
+                mTriggerBack = false;
+            }
+            onGestureFinished(true);
         }
     }
 
-    private void initAnimation(float touchX, float touchY) {
+    private void onGestureStarted(float touchX, float touchY) {
         ProtoLog.d(WM_SHELL_BACK_PREVIEW, "initAnimation mMotionStarted=%b", mBackGestureStarted);
         if (mBackGestureStarted || mBackNavigationInfo != null) {
             Log.e(TAG, "Animation is being initialized but is already started.");
@@ -288,7 +316,8 @@
 
         try {
             boolean requestAnimation = mEnableAnimations.get();
-            mBackNavigationInfo = mActivityTaskManager.startBackNavigation(requestAnimation);
+            mBackNavigationInfo =
+                    mActivityTaskManager.startBackNavigation(requestAnimation, mFocusObserver);
             onBackNavigationInfoReceived(mBackNavigationInfo);
         } catch (RemoteException remoteException) {
             Log.e(TAG, "Failed to initAnimation", remoteException);
@@ -300,7 +329,6 @@
         ProtoLog.d(WM_SHELL_BACK_PREVIEW, "Received backNavigationInfo:%s", backNavigationInfo);
         if (backNavigationInfo == null) {
             Log.e(TAG, "Received BackNavigationInfo is null.");
-            finishAnimation();
             return;
         }
         int backType = backNavigationInfo.getType();
@@ -376,11 +404,47 @@
         dispatchOnBackProgressed(targetCallback, backEvent);
     }
 
-    private void onGestureFinished() {
+    private void injectBackKey() {
+        sendBackEvent(KeyEvent.ACTION_DOWN);
+        sendBackEvent(KeyEvent.ACTION_UP);
+    }
+
+    private void sendBackEvent(int action) {
+        final long when = SystemClock.uptimeMillis();
+        final KeyEvent ev = new KeyEvent(when, when, action, KeyEvent.KEYCODE_BACK, 0 /* repeat */,
+                0 /* metaState */, KeyCharacterMap.VIRTUAL_KEYBOARD, 0 /* scancode */,
+                KeyEvent.FLAG_FROM_SYSTEM | KeyEvent.FLAG_VIRTUAL_HARD_KEY,
+                InputDevice.SOURCE_KEYBOARD);
+
+        ev.setDisplayId(mContext.getDisplay().getDisplayId());
+        if (!InputManager.getInstance()
+                .injectInputEvent(ev, InputManager.INJECT_INPUT_EVENT_MODE_ASYNC)) {
+            Log.e(TAG, "Inject input event fail");
+        }
+    }
+
+    private void onGestureFinished(boolean fromTouch) {
         ProtoLog.d(WM_SHELL_BACK_PREVIEW, "onGestureFinished() mTriggerBack == %s", mTriggerBack);
-        if (!mBackGestureStarted || mBackNavigationInfo == null) {
+        if (fromTouch) {
+            // Let touch reset the flag otherwise it will start a new back navigation and refresh
+            // the info when received a new move event.
+            mBackGestureStarted = false;
+        }
+
+        if (mTransitionInProgress) {
             return;
         }
+
+        if (mBackNavigationInfo == null) {
+            // No focus window found or core are running recents animation, inject back key as
+            // legacy behavior.
+            if (mTriggerBack) {
+                injectBackKey();
+            }
+            finishAnimation();
+            return;
+        }
+
         int backType = mBackNavigationInfo.getType();
         boolean shouldDispatchToLauncher = shouldDispatchToLauncher(backType);
         IOnBackInvokedCallback targetCallback = shouldDispatchToLauncher
@@ -403,7 +467,9 @@
     private boolean shouldDispatchToLauncher(int backType) {
         return backType == BackNavigationInfo.TYPE_RETURN_TO_HOME
                 && mBackToLauncherCallback != null
-                && mEnableAnimations.get();
+                && mEnableAnimations.get()
+                && mBackNavigationInfo != null
+                && mBackNavigationInfo.getDepartingAnimationTarget() != null;
     }
 
     private static void dispatchOnBackStarted(IOnBackInvokedCallback callback) {
@@ -468,7 +534,6 @@
 
     private void finishAnimation() {
         ProtoLog.d(WM_SHELL_BACK_PREVIEW, "BackAnimationController: finishAnimation()");
-        mBackGestureStarted = false;
         mTouchEventDelta.set(0, 0);
         mInitTouchLocation.set(0, 0);
         BackNavigationInfo backNavigationInfo = mBackNavigationInfo;
@@ -478,6 +543,7 @@
         if (backNavigationInfo == null) {
             return;
         }
+
         RemoteAnimationTarget animationTarget = backNavigationInfo.getDepartingAnimationTarget();
         if (animationTarget != null) {
             if (animationTarget.leash != null && animationTarget.leash.isValid()) {
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 31fc6a5..2c02006 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
@@ -452,6 +452,7 @@
      */
     void setEntry(@NonNull final BubbleEntry entry) {
         Objects.requireNonNull(entry);
+        boolean showingDotPreviously = showDot();
         mLastUpdated = entry.getStatusBarNotification().getPostTime();
         mIsBubble = entry.getStatusBarNotification().getNotification().isBubbleNotification();
         mPackageName = entry.getStatusBarNotification().getPackageName();
@@ -498,6 +499,10 @@
         mShouldSuppressNotificationDot = entry.shouldSuppressNotificationDot();
         mShouldSuppressNotificationList = entry.shouldSuppressNotificationList();
         mShouldSuppressPeek = entry.shouldSuppressPeek();
+        if (showingDotPreviously != showDot()) {
+            // This will update the UI if needed
+            setShowDot(showDot());
+        }
     }
 
     @Nullable
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleBadgeIconFactory.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleBadgeIconFactory.java
index 4eeb207..d6803e8 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleBadgeIconFactory.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleBadgeIconFactory.java
@@ -19,14 +19,14 @@
 import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
-import android.graphics.Paint;
+import android.graphics.Color;
 import android.graphics.Path;
+import android.graphics.Rect;
 import android.graphics.drawable.AdaptiveIconDrawable;
 import android.graphics.drawable.Drawable;
 
 import com.android.launcher3.icons.BaseIconFactory;
 import com.android.launcher3.icons.BitmapInfo;
-import com.android.launcher3.icons.ShadowGenerator;
 import com.android.wm.shell.R;
 
 /**
@@ -44,78 +44,77 @@
      * will include the workprofile indicator on the badge if appropriate.
      */
     BitmapInfo getBadgeBitmap(Drawable userBadgedAppIcon, boolean isImportantConversation) {
-        ShadowGenerator shadowGenerator = new ShadowGenerator(mIconBitmapSize);
-        Bitmap userBadgedBitmap = createIconBitmap(userBadgedAppIcon, 1f, mIconBitmapSize);
-
         if (userBadgedAppIcon instanceof AdaptiveIconDrawable) {
-            userBadgedBitmap = Bitmap.createScaledBitmap(
-                    getCircleBitmap((AdaptiveIconDrawable) userBadgedAppIcon, /* size */
-                            userBadgedAppIcon.getIntrinsicWidth()),
-                    mIconBitmapSize, mIconBitmapSize, /* filter */ true);
+            AdaptiveIconDrawable ad = (AdaptiveIconDrawable) userBadgedAppIcon;
+            userBadgedAppIcon = new CircularAdaptiveIcon(ad.getBackground(), ad.getForeground());
+        }
+        if (isImportantConversation) {
+            userBadgedAppIcon = new CircularRingDrawable(userBadgedAppIcon);
+        }
+        Bitmap userBadgedBitmap = createIconBitmap(
+                userBadgedAppIcon, 1, BITMAP_GENERATION_MODE_WITH_SHADOW);
+        return createIconBitmap(userBadgedBitmap);
+    }
+
+    private class CircularRingDrawable extends CircularAdaptiveIcon {
+
+        final int mImportantConversationColor;
+        final Rect mTempBounds = new Rect();
+
+        final Drawable mDr;
+
+        CircularRingDrawable(Drawable dr) {
+            super(null, null);
+            mDr = dr;
+            mImportantConversationColor = mContext.getResources().getColor(
+                    R.color.important_conversation, null);
         }
 
-        if (isImportantConversation) {
-            final float ringStrokeWidth = mContext.getResources().getDimensionPixelSize(
+        @Override
+        public void draw(Canvas canvas) {
+            int save = canvas.save();
+            canvas.clipPath(getIconMask());
+            canvas.drawColor(mImportantConversationColor);
+            int ringStrokeWidth = mContext.getResources().getDimensionPixelSize(
                     com.android.internal.R.dimen.importance_ring_stroke_width);
-            final int importantConversationColor = mContext.getResources().getColor(
-                    R.color.important_conversation, null);
-            Bitmap badgeAndRing = Bitmap.createBitmap(userBadgedBitmap.getWidth(),
-                    userBadgedBitmap.getHeight(), userBadgedBitmap.getConfig());
-            Canvas c = new Canvas(badgeAndRing);
-
-            Paint ringPaint = new Paint();
-            ringPaint.setStyle(Paint.Style.FILL);
-            ringPaint.setColor(importantConversationColor);
-            ringPaint.setAntiAlias(true);
-            c.drawCircle(c.getWidth() / 2, c.getHeight() / 2, c.getWidth() / 2, ringPaint);
-
-            final int bitmapTop = (int) ringStrokeWidth;
-            final int bitmapLeft = (int) ringStrokeWidth;
-            final int bitmapWidth = c.getWidth() - 2 * (int) ringStrokeWidth;
-            final int bitmapHeight = c.getHeight() - 2 * (int) ringStrokeWidth;
-
-            Bitmap scaledBitmap = Bitmap.createScaledBitmap(userBadgedBitmap, bitmapWidth,
-                    bitmapHeight, /* filter */ true);
-            c.drawBitmap(scaledBitmap, bitmapTop, bitmapLeft, /* paint */null);
-
-            shadowGenerator.recreateIcon(Bitmap.createBitmap(badgeAndRing), c);
-            return createIconBitmap(badgeAndRing);
-        } else {
-            Canvas c = new Canvas();
-            c.setBitmap(userBadgedBitmap);
-            shadowGenerator.recreateIcon(Bitmap.createBitmap(userBadgedBitmap), c);
-            return createIconBitmap(userBadgedBitmap);
+            mTempBounds.set(getBounds());
+            mTempBounds.inset(ringStrokeWidth, ringStrokeWidth);
+            mDr.setBounds(mTempBounds);
+            mDr.draw(canvas);
+            canvas.restoreToCount(save);
         }
     }
 
-    private Bitmap getCircleBitmap(AdaptiveIconDrawable icon, int size) {
-        Drawable foreground = icon.getForeground();
-        Drawable background = icon.getBackground();
-        Bitmap bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
-        Canvas canvas = new Canvas();
-        canvas.setBitmap(bitmap);
+    private static class CircularAdaptiveIcon extends AdaptiveIconDrawable {
 
-        // Clip canvas to circle.
-        Path circlePath = new Path();
-        circlePath.addCircle(/* x */ size / 2f,
-                /* y */ size / 2f,
-                /* radius */ size / 2f,
-                Path.Direction.CW);
-        canvas.clipPath(circlePath);
+        final Path mPath = new Path();
 
-        // Draw background.
-        background.setBounds(0, 0, size, size);
-        background.draw(canvas);
+        CircularAdaptiveIcon(Drawable bg, Drawable fg) {
+            super(bg, fg);
+        }
 
-        // Draw foreground. The foreground and background drawables are derived from adaptive icons
-        // Some icon shapes fill more space than others, so adaptive icons are normalized to about
-        // the same size. This size is smaller than the original bounds, so we estimate
-        // the difference in this offset.
-        int offset = size / 5;
-        foreground.setBounds(-offset, -offset, size + offset, size + offset);
-        foreground.draw(canvas);
+        @Override
+        public Path getIconMask() {
+            mPath.reset();
+            Rect bounds = getBounds();
+            mPath.addOval(bounds.left, bounds.top, bounds.right, bounds.bottom, Path.Direction.CW);
+            return mPath;
+        }
 
-        canvas.setBitmap(null);
-        return bitmap;
+        @Override
+        public void draw(Canvas canvas) {
+            int save = canvas.save();
+            canvas.clipPath(getIconMask());
+
+            canvas.drawColor(Color.BLACK);
+            Drawable d;
+            if ((d = getBackground()) != null) {
+                d.draw(canvas);
+            }
+            if ((d = getForeground()) != null) {
+                d.draw(canvas);
+            }
+            canvas.restoreToCount(save);
+        }
     }
 }
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 f427a2c..8771ceb 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
@@ -25,6 +25,7 @@
 import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
 
 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;
 import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_WITH_CLASS_NAME;
 import static com.android.wm.shell.bubbles.BubblePositioner.TASKBAR_POSITION_BOTTOM;
@@ -69,28 +70,23 @@
 import android.os.UserManager;
 import android.service.notification.NotificationListenerService;
 import android.service.notification.NotificationListenerService.RankingMap;
-import android.util.ArraySet;
 import android.util.Log;
 import android.util.Pair;
 import android.util.Slog;
 import android.util.SparseArray;
-import android.util.SparseSetArray;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.WindowInsets;
 import android.view.WindowManager;
-import android.window.WindowContainerTransaction;
 
 import androidx.annotation.MainThread;
 import androidx.annotation.Nullable;
 
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.logging.UiEventLogger;
 import com.android.internal.statusbar.IStatusBarService;
 import com.android.wm.shell.ShellTaskOrganizer;
 import com.android.wm.shell.TaskViewTransitions;
 import com.android.wm.shell.WindowManagerShellWrapper;
-import com.android.wm.shell.common.DisplayChangeController;
 import com.android.wm.shell.common.DisplayController;
 import com.android.wm.shell.common.FloatingContentCoordinator;
 import com.android.wm.shell.common.ShellExecutor;
@@ -103,14 +99,19 @@
 import com.android.wm.shell.onehanded.OneHandedController;
 import com.android.wm.shell.onehanded.OneHandedTransitionCallback;
 import com.android.wm.shell.pip.PinnedStackListenerForwarder;
+import com.android.wm.shell.sysui.ConfigurationChangeListener;
+import com.android.wm.shell.sysui.ShellController;
+import com.android.wm.shell.sysui.ShellInit;
 
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
+import java.util.Set;
 import java.util.concurrent.Executor;
 import java.util.function.Consumer;
 import java.util.function.IntConsumer;
@@ -121,7 +122,7 @@
  *
  * The controller manages addition, removal, and visible state of bubbles on screen.
  */
-public class BubbleController {
+public class BubbleController implements ConfigurationChangeListener {
 
     private static final String TAG = TAG_WITH_CLASS_NAME ? "BubbleController" : TAG_BUBBLES;
 
@@ -157,6 +158,7 @@
     private final DisplayController mDisplayController;
     private final TaskViewTransitions mTaskViewTransitions;
     private final SyncTransactionQueue mSyncQueue;
+    private final ShellController mShellController;
 
     // Used to post to main UI thread
     private final ShellExecutor mMainExecutor;
@@ -176,8 +178,8 @@
     private int mCurrentUserId;
     // Current profiles of the user (e.g. user with a workprofile)
     private SparseArray<UserInfo> mCurrentProfiles;
-    // Saves notification keys of active bubbles when users are switched.
-    private final SparseSetArray<String> mSavedBubbleKeysPerUser;
+    // Saves data about active bubbles when users are switched.
+    private final SparseArray<UserBubbleData> mSavedUserBubbleData;
 
     // Used when ranking updates occur and we check if things should bubble / unbubble
     private NotificationListenerService.Ranking mTmpRanking;
@@ -224,44 +226,10 @@
     /** Drag and drop controller to register listener for onDragStarted. */
     private DragAndDropController mDragAndDropController;
 
-    /**
-     * Creates an instance of the BubbleController.
-     */
-    public static BubbleController create(Context context,
-            @Nullable BubbleStackView.SurfaceSynchronizer synchronizer,
-            FloatingContentCoordinator floatingContentCoordinator,
-            @Nullable IStatusBarService statusBarService,
-            WindowManager windowManager,
-            WindowManagerShellWrapper windowManagerShellWrapper,
-            UserManager userManager,
-            LauncherApps launcherApps,
-            TaskStackListenerImpl taskStackListener,
-            UiEventLogger uiEventLogger,
-            ShellTaskOrganizer organizer,
-            DisplayController displayController,
-            Optional<OneHandedController> oneHandedOptional,
-            DragAndDropController dragAndDropController,
-            @ShellMainThread ShellExecutor mainExecutor,
-            @ShellMainThread Handler mainHandler,
-            @ShellBackgroundThread ShellExecutor bgExecutor,
-            TaskViewTransitions taskViewTransitions,
-            SyncTransactionQueue syncQueue) {
-        BubbleLogger logger = new BubbleLogger(uiEventLogger);
-        BubblePositioner positioner = new BubblePositioner(context, windowManager);
-        BubbleData data = new BubbleData(context, logger, positioner, mainExecutor);
-        return new BubbleController(context, data, synchronizer, floatingContentCoordinator,
-                new BubbleDataRepository(context, launcherApps, mainExecutor),
-                statusBarService, windowManager, windowManagerShellWrapper, userManager,
-                launcherApps, logger, taskStackListener, organizer, positioner, displayController,
-                oneHandedOptional, dragAndDropController, mainExecutor, mainHandler, bgExecutor,
-                taskViewTransitions, syncQueue);
-    }
-
-    /**
-     * Testing constructor.
-     */
-    @VisibleForTesting
-    protected BubbleController(Context context,
+  
+    public BubbleController(Context context,
+            ShellInit shellInit,
+            ShellController shellController,
             BubbleData data,
             @Nullable BubbleStackView.SurfaceSynchronizer synchronizer,
             FloatingContentCoordinator floatingContentCoordinator,
@@ -284,6 +252,7 @@
             TaskViewTransitions taskViewTransitions,
             SyncTransactionQueue syncQueue) {
         mContext = context;
+        mShellController = shellController;
         mLauncherApps = launcherApps;
         mBarService = statusBarService == null
                 ? IStatusBarService.Stub.asInterface(
@@ -304,7 +273,7 @@
         mCurrentUserId = ActivityManager.getCurrentUser();
         mBubblePositioner = positioner;
         mBubbleData = data;
-        mSavedBubbleKeysPerUser = new SparseSetArray<>();
+        mSavedUserBubbleData = new SparseArray<>();
         mBubbleIconFactory = new BubbleIconFactory(context);
         mBubbleBadgeIconFactory = new BubbleBadgeIconFactory(context);
         mDisplayController = displayController;
@@ -312,6 +281,7 @@
         mOneHandedOptional = oneHandedOptional;
         mDragAndDropController = dragAndDropController;
         mSyncQueue = syncQueue;
+        shellInit.addInitCallback(this::onInit, this);
     }
 
     private void registerOneHandedState(OneHandedController oneHanded) {
@@ -333,7 +303,7 @@
                 });
     }
 
-    public void initialize() {
+    protected void onInit() {
         mBubbleData.setListener(mBubbleDataListener);
         mBubbleData.setSuppressionChangedListener(this::onBubbleMetadataFlagChanged);
 
@@ -435,17 +405,13 @@
         });
 
         mDisplayController.addDisplayChangingController(
-                new DisplayChangeController.OnDisplayChangingListener() {
-                    @Override
-                    public void onRotateDisplay(int displayId, int fromRotation, int toRotation,
-                            WindowContainerTransaction t) {
-                        // This is triggered right before the rotation is applied
-                        if (fromRotation != toRotation) {
-                            if (mStackView != null) {
-                                // Layout listener set on stackView will update the positioner
-                                // once the rotation is applied
-                                mStackView.onOrientationChanged();
-                            }
+                (displayId, fromRotation, toRotation, newDisplayAreaInfo, t) -> {
+                    // This is triggered right before the rotation is applied
+                    if (fromRotation != toRotation) {
+                        if (mStackView != null) {
+                            // Layout listener set on stackView will update the positioner
+                            // once the rotation is applied
+                            mStackView.onOrientationChanged();
                         }
                     }
                 });
@@ -456,6 +422,15 @@
         // Clear out any persisted bubbles on disk that no longer have a valid user.
         List<UserInfo> users = mUserManager.getAliveUsers();
         mDataRepository.sanitizeBubbles(users);
+
+        // Init profiles
+        SparseArray<UserInfo> userProfiles = new SparseArray<>();
+        for (UserInfo user : mUserManager.getProfiles(mCurrentUserId)) {
+            userProfiles.put(user.id, user);
+        }
+        mCurrentProfiles = userProfiles;
+
+        mShellController.addConfigurationChangeListener(this);
     }
 
     @VisibleForTesting
@@ -809,11 +784,13 @@
      */
     private void saveBubbles(@UserIdInt int userId) {
         // First clear any existing keys that might be stored.
-        mSavedBubbleKeysPerUser.remove(userId);
+        mSavedUserBubbleData.remove(userId);
+        UserBubbleData userBubbleData = new UserBubbleData();
         // Add in all active bubbles for the current user.
         for (Bubble bubble : mBubbleData.getBubbles()) {
-            mSavedBubbleKeysPerUser.add(userId, bubble.getKey());
+            userBubbleData.add(bubble.getKey(), bubble.showInShade());
         }
+        mSavedUserBubbleData.put(userId, userBubbleData);
     }
 
     /**
@@ -822,25 +799,27 @@
      * @param userId the id of the user
      */
     private void restoreBubbles(@UserIdInt int userId) {
-        ArraySet<String> savedBubbleKeys = mSavedBubbleKeysPerUser.get(userId);
-        if (savedBubbleKeys == null) {
+        UserBubbleData savedBubbleData = mSavedUserBubbleData.get(userId);
+        if (savedBubbleData == null) {
             // There were no bubbles saved for this used.
             return;
         }
-        mSysuiProxy.getShouldRestoredEntries(savedBubbleKeys, (entries) -> {
+        mSysuiProxy.getShouldRestoredEntries(savedBubbleData.getKeys(), (entries) -> {
             mMainExecutor.execute(() -> {
                 for (BubbleEntry e : entries) {
                     if (canLaunchInTaskView(mContext, e)) {
-                        updateBubble(e, true /* suppressFlyout */, false /* showInShade */);
+                        boolean showInShade = savedBubbleData.isShownInShade(e.getKey());
+                        updateBubble(e, true /* suppressFlyout */, showInShade);
                     }
                 }
             });
         });
         // Finally, remove the entries for this user now that bubbles are restored.
-        mSavedBubbleKeysPerUser.remove(userId);
+        mSavedUserBubbleData.remove(userId);
     }
 
-    private void updateForThemeChanges() {
+    @Override
+    public void onThemeChanged() {
         if (mStackView != null) {
             mStackView.onThemeChanged();
         }
@@ -860,7 +839,8 @@
         }
     }
 
-    private void onConfigChanged(Configuration newConfig) {
+    @Override
+    public void onConfigurationChanged(Configuration newConfig) {
         if (mBubblePositioner != null) {
             mBubblePositioner.update();
         }
@@ -885,6 +865,19 @@
         }
     }
 
+    private void onNotificationPanelExpandedChanged(boolean expanded) {
+        if (DEBUG_BUBBLE_GESTURE) {
+            Log.d(TAG, "onNotificationPanelExpandedChanged: expanded=" + expanded);
+        }
+        if (mStackView != null && mStackView.isExpanded()) {
+            if (expanded) {
+                mStackView.stopMonitoringSwipeUpGesture();
+            } else {
+                mStackView.startMonitoringSwipeUpGesture();
+            }
+        }
+    }
+
     private void setSysuiProxy(Bubbles.SysuiProxy proxy) {
         mSysuiProxy = proxy;
     }
@@ -1013,7 +1006,19 @@
      */
     @VisibleForTesting
     public void updateBubble(BubbleEntry notif) {
-        updateBubble(notif, false /* suppressFlyout */, true /* showInShade */);
+        int bubbleUserId = notif.getStatusBarNotification().getUserId();
+        if (isCurrentProfile(bubbleUserId)) {
+            updateBubble(notif, false /* suppressFlyout */, true /* showInShade */);
+        } else {
+            // Skip update, but store it in user bubbles so it gets restored after user switch
+            mSavedUserBubbleData.get(bubbleUserId, new UserBubbleData()).add(notif.getKey(),
+                    true /* shownInShade */);
+            if (DEBUG_BUBBLE_CONTROLLER) {
+                Log.d(TAG,
+                        "Ignore update to bubble for not active user. Bubble userId=" + bubbleUserId
+                                + " current userId=" + mCurrentUserId);
+            }
+        }
     }
 
     /**
@@ -1050,18 +1055,28 @@
     public void updateBubble(BubbleEntry notif, boolean suppressFlyout, boolean showInShade) {
         // If this is an interruptive notif, mark that it's interrupted
         mSysuiProxy.setNotificationInterruption(notif.getKey());
-        if (!notif.getRanking().isTextChanged()
+        boolean isNonInterruptiveNotExpanding = !notif.getRanking().isTextChanged()
                 && (notif.getBubbleMetadata() != null
-                && !notif.getBubbleMetadata().getAutoExpandBubble())
+                && !notif.getBubbleMetadata().getAutoExpandBubble());
+        if (isNonInterruptiveNotExpanding
                 && mBubbleData.hasOverflowBubbleWithKey(notif.getKey())) {
             // Update the bubble but don't promote it out of overflow
             Bubble b = mBubbleData.getOverflowBubbleWithKey(notif.getKey());
-            b.setEntry(notif);
+            if (notif.isBubble()) {
+                notif.setFlagBubble(false);
+            }
+            updateNotNotifyingEntry(b, notif, showInShade);
+        } else if (mBubbleData.hasAnyBubbleWithKey(notif.getKey())
+                && isNonInterruptiveNotExpanding) {
+            Bubble b = mBubbleData.getAnyBubbleWithkey(notif.getKey());
+            if (b != null) {
+                updateNotNotifyingEntry(b, notif, showInShade);
+            }
         } else if (mBubbleData.isSuppressedWithLocusId(notif.getLocusId())) {
             // Update the bubble but don't promote it out of overflow
             Bubble b = mBubbleData.getSuppressedBubbleWithKey(notif.getKey());
             if (b != null) {
-                b.setEntry(notif);
+                updateNotNotifyingEntry(b, notif, showInShade);
             }
         } else {
             Bubble bubble = mBubbleData.getOrCreateBubble(notif, null /* persistedBubble */);
@@ -1071,13 +1086,25 @@
                 if (bubble.shouldAutoExpand()) {
                     bubble.setShouldAutoExpand(false);
                 }
+                mImpl.mCachedState.updateBubbleSuppressedState(bubble);
             } else {
                 inflateAndAdd(bubble, suppressFlyout, showInShade);
             }
         }
     }
 
-    void inflateAndAdd(Bubble bubble, boolean suppressFlyout, boolean showInShade) {
+    void updateNotNotifyingEntry(Bubble b, BubbleEntry entry, boolean showInShade) {
+        boolean isBubbleSelected = Objects.equals(b, mBubbleData.getSelectedBubble());
+        boolean isBubbleExpandedAndSelected = isStackExpanded() && isBubbleSelected;
+        b.setEntry(entry);
+        boolean suppress = isBubbleExpandedAndSelected || !showInShade || !b.showInShade();
+        b.setSuppressNotification(suppress);
+        b.setShowDot(!isBubbleExpandedAndSelected);
+        mImpl.mCachedState.updateBubbleSuppressedState(b);
+    }
+
+    @VisibleForTesting
+    public void inflateAndAdd(Bubble bubble, boolean suppressFlyout, boolean showInShade) {
         // Lazy init stack view when a bubble is created
         ensureStackViewCreated();
         bubble.setInflateSynchronously(mInflateSynchronously);
@@ -1106,7 +1133,10 @@
     }
 
     @VisibleForTesting
-    public void onEntryUpdated(BubbleEntry entry, boolean shouldBubbleUp) {
+    public void onEntryUpdated(BubbleEntry entry, boolean shouldBubbleUp, boolean fromSystem) {
+        if (!fromSystem) {
+            return;
+        }
         // shouldBubbleUp checks canBubble & for bubble metadata
         boolean shouldBubble = shouldBubbleUp && canLaunchInTaskView(mContext, entry);
         if (!shouldBubble && mBubbleData.hasAnyBubbleWithKey(entry.getKey())) {
@@ -1167,9 +1197,9 @@
                 // notification, so that the bubble will be re-created if shouldBubbleUp returns
                 // true.
                 mBubbleData.dismissBubbleWithKey(key, DISMISS_NO_BUBBLE_UP);
-            } else if (entry != null && mTmpRanking.isBubble() && !isActive) {
+            } else if (entry != null && mTmpRanking.isBubble() && !isActiveOrInOverflow) {
                 entry.setFlagBubble(true);
-                onEntryUpdated(entry, shouldBubbleUp);
+                onEntryUpdated(entry, shouldBubbleUp, /* fromSystem= */ true);
             }
         }
     }
@@ -1342,14 +1372,18 @@
                 mStackView.setBubbleSuppressed(update.unsuppressedBubble, false);
             }
 
+            boolean collapseStack = update.expandedChanged && !update.expanded;
+
             // At this point, the correct bubbles are inflated in the stack.
             // Make sure the order in bubble data is reflected in bubble row.
             if (update.orderChanged && mStackView != null) {
                 mDataRepository.addBubbles(mCurrentUserId, update.bubbles);
-                mStackView.updateBubbleOrder(update.bubbles);
+                // if the stack is going to be collapsed, do not update pointer position
+                // after reordering
+                mStackView.updateBubbleOrder(update.bubbles, !collapseStack);
             }
 
-            if (update.expandedChanged && !update.expanded) {
+            if (collapseStack) {
                 mStackView.setExpanded(false);
                 mSysuiProxy.requestNotificationShadeTopUi(false, TAG);
             }
@@ -1468,6 +1502,18 @@
     }
 
     /**
+     * Check if notification panel is in an expanded state.
+     * Makes a call to System UI process and delivers the result via {@code callback} on the
+     * WM Shell main thread.
+     *
+     * @param callback callback that has the result of notification panel expanded state
+     */
+    public void isNotificationPanelExpanded(Consumer<Boolean> callback) {
+        mSysuiProxy.isNotificationPanelExpand(expanded ->
+                mMainExecutor.execute(() -> callback.accept(expanded)));
+    }
+
+    /**
      * Description of current bubble state.
      */
     private void dump(PrintWriter pw, String[] args) {
@@ -1546,7 +1592,7 @@
         public void onImeVisibilityChanged(boolean imeVisible, int imeHeight) {
             mBubblePositioner.setImeVisible(imeVisible, imeHeight);
             if (mStackView != null) {
-                mStackView.animateForIme(imeVisible);
+                mStackView.setImeVisible(imeVisible);
             }
         }
     }
@@ -1691,13 +1737,6 @@
         }
 
         @Override
-        public void updateForThemeChanges() {
-            mMainExecutor.execute(() -> {
-                BubbleController.this.updateForThemeChanges();
-            });
-        }
-
-        @Override
         public void expandStackAndSelectBubble(BubbleEntry entry) {
             mMainExecutor.execute(() -> {
                 BubbleController.this.expandStackAndSelectBubble(entry);
@@ -1759,9 +1798,9 @@
         }
 
         @Override
-        public void onEntryUpdated(BubbleEntry entry, boolean shouldBubbleUp) {
+        public void onEntryUpdated(BubbleEntry entry, boolean shouldBubbleUp, boolean fromSystem) {
             mMainExecutor.execute(() -> {
-                BubbleController.this.onEntryUpdated(entry, shouldBubbleUp);
+                BubbleController.this.onEntryUpdated(entry, shouldBubbleUp, fromSystem);
             });
         }
 
@@ -1836,10 +1875,9 @@
         }
 
         @Override
-        public void onConfigChanged(Configuration newConfig) {
-            mMainExecutor.execute(() -> {
-                BubbleController.this.onConfigChanged(newConfig);
-            });
+        public void onNotificationPanelExpandedChanged(boolean expanded) {
+            mMainExecutor.execute(
+                    () -> BubbleController.this.onNotificationPanelExpandedChanged(expanded));
         }
 
         @Override
@@ -1854,4 +1892,33 @@
             }
         }
     }
+
+    /**
+     * Bubble data that is stored per user.
+     * Used to store and restore active bubbles during user switching.
+     */
+    private static class UserBubbleData {
+        private final Map<String, Boolean> mKeyToShownInShadeMap = new HashMap<>();
+
+        /**
+         * Add bubble key and whether it should be shown in notification shade
+         */
+        void add(String key, boolean shownInShade) {
+            mKeyToShownInShadeMap.put(key, shownInShade);
+        }
+
+        /**
+         * Get all bubble keys stored for this user
+         */
+        Set<String> getKeys() {
+            return mKeyToShownInShadeMap.keySet();
+        }
+
+        /**
+         * Check if this bubble with the given key should be shown in the notification shade
+         */
+        boolean isShownInShade(String key) {
+            return mKeyToShownInShadeMap.get(key);
+        }
+    }
 }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleDebugConfig.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleDebugConfig.java
index dc2ace9..dce6b56 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleDebugConfig.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleDebugConfig.java
@@ -46,6 +46,9 @@
     static final boolean DEBUG_OVERFLOW = false;
     static final boolean DEBUG_USER_EDUCATION = false;
     static final boolean DEBUG_POSITIONER = false;
+    public static final boolean DEBUG_COLLAPSE_ANIMATOR = false;
+    static final boolean DEBUG_BUBBLE_GESTURE = false;
+    public static boolean DEBUG_EXPANDED_VIEW_DRAGGING = false;
 
     private static final boolean FORCE_SHOW_USER_EDUCATION = false;
     private static final String FORCE_SHOW_USER_EDUCATION_SETTING =
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 b8bf1a8..4f225ff 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
@@ -43,10 +43,13 @@
 import android.graphics.Outline;
 import android.graphics.Paint;
 import android.graphics.Picture;
+import android.graphics.PointF;
 import android.graphics.Rect;
 import android.graphics.drawable.ShapeDrawable;
 import android.os.RemoteException;
 import android.util.AttributeSet;
+import android.util.FloatProperty;
+import android.util.IntProperty;
 import android.util.Log;
 import android.util.TypedValue;
 import android.view.LayoutInflater;
@@ -75,6 +78,62 @@
 public class BubbleExpandedView extends LinearLayout {
     private static final String TAG = TAG_WITH_CLASS_NAME ? "BubbleExpandedView" : TAG_BUBBLES;
 
+    /** {@link IntProperty} for updating bottom clip */
+    public static final IntProperty<BubbleExpandedView> BOTTOM_CLIP_PROPERTY =
+            new IntProperty<BubbleExpandedView>("bottomClip") {
+                @Override
+                public void setValue(BubbleExpandedView expandedView, int value) {
+                    expandedView.setBottomClip(value);
+                }
+
+                @Override
+                public Integer get(BubbleExpandedView expandedView) {
+                    return expandedView.mBottomClip;
+                }
+            };
+
+    /** {@link FloatProperty} for updating taskView or overflow alpha */
+    public static final FloatProperty<BubbleExpandedView> CONTENT_ALPHA =
+            new FloatProperty<BubbleExpandedView>("contentAlpha") {
+                @Override
+                public void setValue(BubbleExpandedView expandedView, float value) {
+                    expandedView.setContentAlpha(value);
+                }
+
+                @Override
+                public Float get(BubbleExpandedView expandedView) {
+                    return expandedView.getContentAlpha();
+                }
+            };
+
+    /** {@link FloatProperty} for updating background and pointer alpha */
+    public static final FloatProperty<BubbleExpandedView> BACKGROUND_ALPHA =
+            new FloatProperty<BubbleExpandedView>("backgroundAlpha") {
+                @Override
+                public void setValue(BubbleExpandedView expandedView, float value) {
+                    expandedView.setBackgroundAlpha(value);
+                }
+
+                @Override
+                public Float get(BubbleExpandedView expandedView) {
+                    return expandedView.getAlpha();
+                }
+            };
+
+    /** {@link FloatProperty} for updating manage button alpha */
+    public static final FloatProperty<BubbleExpandedView> MANAGE_BUTTON_ALPHA =
+            new FloatProperty<BubbleExpandedView>("manageButtonAlpha") {
+                @Override
+                public void setValue(BubbleExpandedView expandedView, float value) {
+                    expandedView.mManageButton.setAlpha(value);
+                }
+
+                @Override
+                public Float get(BubbleExpandedView expandedView) {
+                    return expandedView.mManageButton.getAlpha();
+                }
+            };
+
     // The triangle pointing to the expanded view
     private View mPointerView;
     @Nullable private int[] mExpandedViewContainerLocation;
@@ -90,7 +149,7 @@
 
     /**
      * Whether we want the {@code TaskView}'s content to be visible (alpha = 1f). If
-     * {@link #mIsAlphaAnimating} is true, this may not reflect the {@code TaskView}'s actual alpha
+     * {@link #mIsAnimating} is true, this may not reflect the {@code TaskView}'s actual alpha
      * value until the animation ends.
      */
     private boolean mIsContentVisible = false;
@@ -99,12 +158,13 @@
      * Whether we're animating the {@code TaskView}'s alpha value. If so, we will hold off on
      * applying alpha changes from {@link #setContentVisibility} until the animation ends.
      */
-    private boolean mIsAlphaAnimating = false;
+    private boolean mIsAnimating = false;
 
     private int mPointerWidth;
     private int mPointerHeight;
     private float mPointerRadius;
     private float mPointerOverlap;
+    private final PointF mPointerPos = new PointF();
     private CornerPathEffect mPointerEffect;
     private ShapeDrawable mCurrentPointer;
     private ShapeDrawable mTopPointer;
@@ -113,11 +173,13 @@
     private float mCornerRadius = 0f;
     private int mBackgroundColorFloating;
     private boolean mUsingMaxHeight;
-
+    private int mTopClip = 0;
+    private int mBottomClip = 0;
     @Nullable private Bubble mBubble;
     private PendingIntent mPendingIntent;
     // TODO(b/170891664): Don't use a flag, set the BubbleOverflow object instead
     private boolean mIsOverflow;
+    private boolean mIsClipping;
 
     private BubbleController mController;
     private BubbleStackView mStackView;
@@ -268,7 +330,8 @@
         mExpandedViewContainer.setOutlineProvider(new ViewOutlineProvider() {
             @Override
             public void getOutline(View view, Outline outline) {
-                outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), mCornerRadius);
+                Rect clip = new Rect(0, mTopClip, view.getWidth(), view.getHeight() - mBottomClip);
+                outline.setRoundRect(clip, mCornerRadius);
             }
         });
         mExpandedViewContainer.setClipToOutline(true);
@@ -300,9 +363,9 @@
             // they should not collapse the stack (which all other touches on areas around the AV
             // would do).
             if (motionEvent.getRawY() >= avBounds.top
-                            && motionEvent.getRawY() <= avBounds.bottom
-                            && (motionEvent.getRawX() < avBounds.left
-                                || motionEvent.getRawX() > avBounds.right)) {
+                    && motionEvent.getRawY() <= avBounds.bottom
+                    && (motionEvent.getRawX() < avBounds.left
+                    || motionEvent.getRawX() > avBounds.right)) {
                 return true;
             }
 
@@ -384,7 +447,7 @@
     }
 
     void applyThemeAttrs() {
-        final TypedArray ta = mContext.obtainStyledAttributes(new int[] {
+        final TypedArray ta = mContext.obtainStyledAttributes(new int[]{
                 android.R.attr.dialogCornerRadius,
                 android.R.attr.colorBackgroundFloating});
         boolean supportsRoundedCorners = ScreenDecorationsUtils.supportsRoundedCornersOnWindows(
@@ -429,7 +492,7 @@
      * ordering surfaces during animations. When content is drawn on top of the app (e.g. bubble
      * being dragged out, the manage menu) this is set to false, otherwise it should be true.
      */
-    void setSurfaceZOrderedOnTop(boolean onTop) {
+    public void setSurfaceZOrderedOnTop(boolean onTop) {
         if (mTaskView == null) {
             return;
         }
@@ -510,12 +573,12 @@
     }
 
     /**
-     * Whether we are currently animating the {@code TaskView}'s alpha value. If this is set to
+     * Whether we are currently animating the {@code TaskView}. If this is set to
      * true, calls to {@link #setContentVisibility} will not be applied until this is set to false
      * again.
      */
-    void setAlphaAnimating(boolean animating) {
-        mIsAlphaAnimating = animating;
+    public void setAnimating(boolean animating) {
+        mIsAnimating = animating;
 
         // If we're done animating, apply the correct
         if (!animating) {
@@ -524,18 +587,139 @@
     }
 
     /**
-     * Sets the alpha of the underlying {@code TaskView}, since changing the expanded view's alpha
-     * does not affect the {@code TaskView} since it uses a Surface.
+     * Get alpha from underlying {@code TaskView} if this view is for a bubble.
+     * Or get alpha for the overflow view if this view is for overflow.
+     *
+     * @return alpha for the content being shown
      */
-    void setTaskViewAlpha(float alpha) {
+    public float getContentAlpha() {
+        if (mIsOverflow) {
+            return mOverflowView.getAlpha();
+        }
         if (mTaskView != null) {
+            return mTaskView.getAlpha();
+        }
+        return 1f;
+    }
+
+    /**
+     * Set alpha of the underlying {@code TaskView} if this view is for a bubble.
+     * Or set alpha for the overflow view if this view is for overflow.
+     *
+     * Changing expanded view's alpha does not affect the {@code TaskView} since it uses a Surface.
+     */
+    public void setContentAlpha(float alpha) {
+        if (mIsOverflow) {
+            mOverflowView.setAlpha(alpha);
+        } else if (mTaskView != null) {
             mTaskView.setAlpha(alpha);
         }
+    }
+
+    /**
+     * Sets the alpha of the background and the pointer view.
+     */
+    public void setBackgroundAlpha(float alpha) {
         mPointerView.setAlpha(alpha);
         setAlpha(alpha);
     }
 
     /**
+     * Set translation Y for the expanded view content.
+     * Excludes manage button and pointer.
+     */
+    public void setContentTranslationY(float translationY) {
+        mExpandedViewContainer.setTranslationY(translationY);
+
+        // Left or right pointer can become detached when moving the view up
+        if (translationY <= 0 && (isShowingLeftPointer() || isShowingRightPointer())) {
+            // Y coordinate where the pointer would start to get detached from the expanded view.
+            // Takes into account bottom clipping and rounded corners
+            float detachPoint =
+                    mExpandedViewContainer.getBottom() - mBottomClip - mCornerRadius + translationY;
+            float pointerBottom = mPointerPos.y + mPointerHeight;
+            // If pointer bottom is past detach point, move it in by that many pixels
+            float horizontalShift = 0;
+            if (pointerBottom > detachPoint) {
+                horizontalShift = pointerBottom - detachPoint;
+            }
+            if (isShowingLeftPointer()) {
+                // Move left pointer right
+                movePointerBy(horizontalShift, 0);
+            } else {
+                // Move right pointer left
+                movePointerBy(-horizontalShift, 0);
+            }
+            // Hide pointer if it is moved by entire width
+            mPointerView.setVisibility(
+                    horizontalShift > mPointerWidth ? View.INVISIBLE : View.VISIBLE);
+        }
+    }
+
+    /**
+     * Update alpha value for the manage button
+     */
+    public void setManageButtonAlpha(float alpha) {
+        mManageButton.setAlpha(alpha);
+    }
+
+    /**
+     * Set {@link #setTranslationY(float) translationY} for the manage button
+     */
+    public void setManageButtonTranslationY(float translationY) {
+        mManageButton.setTranslationY(translationY);
+    }
+
+    /**
+     * Set top clipping for the view
+     */
+    public void setTopClip(int clip) {
+        mTopClip = clip;
+        onContainerClipUpdate();
+    }
+
+    /**
+     * Set bottom clipping for the view
+     */
+    public void setBottomClip(int clip) {
+        mBottomClip = clip;
+        onContainerClipUpdate();
+    }
+
+    private void onContainerClipUpdate() {
+        if (mTopClip == 0 && mBottomClip == 0) {
+            if (mIsClipping) {
+                mIsClipping = false;
+                if (mTaskView != null) {
+                    mTaskView.setClipBounds(null);
+                    mTaskView.setEnableSurfaceClipping(false);
+                }
+                mExpandedViewContainer.invalidateOutline();
+            }
+        } else {
+            if (!mIsClipping) {
+                mIsClipping = true;
+                if (mTaskView != null) {
+                    mTaskView.setEnableSurfaceClipping(true);
+                }
+            }
+            mExpandedViewContainer.invalidateOutline();
+            if (mTaskView != null) {
+                mTaskView.setClipBounds(new Rect(0, mTopClip, mTaskView.getWidth(),
+                        mTaskView.getHeight() - mBottomClip));
+            }
+        }
+    }
+
+    /**
+     * Move pointer from base position
+     */
+    public void movePointerBy(float x, float y) {
+        mPointerView.setTranslationX(mPointerPos.x + x);
+        mPointerView.setTranslationY(mPointerPos.y + y);
+    }
+
+    /**
      * Set visibility of contents in the expanded state.
      *
      * @param visibility {@code true} if the contents should be visible on the screen.
@@ -543,13 +727,13 @@
      * Note that this contents visibility doesn't affect visibility at {@link android.view.View},
      * and setting {@code false} actually means rendering the contents in transparent.
      */
-    void setContentVisibility(boolean visibility) {
+    public void setContentVisibility(boolean visibility) {
         if (DEBUG_BUBBLE_EXPANDED_VIEW) {
             Log.d(TAG, "setContentVisibility: visibility=" + visibility
                     + " bubble=" + getBubbleKey());
         }
         mIsContentVisible = visibility;
-        if (mTaskView != null && !mIsAlphaAnimating) {
+        if (mTaskView != null && !mIsAnimating) {
             mTaskView.setAlpha(visibility ? 1f : 0f);
             mPointerView.setAlpha(visibility ? 1f : 0f);
         }
@@ -560,6 +744,44 @@
         return mTaskView;
     }
 
+    @VisibleForTesting
+    public BubbleOverflowContainerView getOverflow() {
+        return mOverflowView;
+    }
+
+
+    /**
+     * Return content height: taskView or overflow.
+     * Takes into account clippings set by {@link #setTopClip(int)} and {@link #setBottomClip(int)}
+     *
+     * @return if bubble is for overflow, return overflow height, otherwise return taskView height
+     */
+    public int getContentHeight() {
+        if (mIsOverflow) {
+            return mOverflowView.getHeight() - mTopClip - mBottomClip;
+        }
+        if (mTaskView != null) {
+            return mTaskView.getHeight() - mTopClip - mBottomClip;
+        }
+        return 0;
+    }
+
+    /**
+     * Return bottom position of the content on screen
+     *
+     * @return if bubble is for overflow, return value for overflow, otherwise taskView
+     */
+    public int getContentBottomOnScreen() {
+        Rect out = new Rect();
+        if (mIsOverflow) {
+            mOverflowView.getBoundsOnScreen(out);
+        }
+        if (mTaskView != null) {
+            mTaskView.getBoundsOnScreen(out);
+        }
+        return out.bottom;
+    }
+
     int getTaskId() {
         return mTaskId;
     }
@@ -687,7 +909,9 @@
             mTaskView.onLocationChanged();
         }
         if (mIsOverflow) {
-            mOverflowView.show();
+            post(() -> {
+                mOverflowView.show();
+            });
         }
     }
 
@@ -730,38 +954,59 @@
         post(() -> {
             mCurrentPointer = showVertically ? onLeft ? mLeftPointer : mRightPointer : mTopPointer;
             updatePointerView();
-            float pointerY;
-            float pointerX;
             if (showVertically) {
-                pointerY = bubbleCenter - (mPointerWidth / 2f);
+                mPointerPos.y = bubbleCenter - (mPointerWidth / 2f);
                 if (!isRtl) {
-                    pointerX = onLeft
+                    mPointerPos.x = onLeft
                             ? -mPointerHeight + mPointerOverlap
                             : getWidth() - mPaddingRight - mPointerOverlap;
                 } else {
-                    pointerX = onLeft
+                    mPointerPos.x = onLeft
                             ? -(getWidth() - mPaddingLeft - mPointerOverlap)
                             : mPointerHeight - mPointerOverlap;
                 }
             } else {
-                pointerY = mPointerOverlap;
+                mPointerPos.y = mPointerOverlap;
                 if (!isRtl) {
-                    pointerX = bubbleCenter - (mPointerWidth / 2f);
+                    mPointerPos.x = bubbleCenter - (mPointerWidth / 2f);
                 } else {
-                    pointerX = -(getWidth() - mPaddingLeft - bubbleCenter) + (mPointerWidth / 2f);
+                    mPointerPos.x = -(getWidth() - mPaddingLeft - bubbleCenter)
+                      + (mPointerWidth / 2f);
                 }
             }
             if (animate) {
-                mPointerView.animate().translationX(pointerX).translationY(pointerY).start();
+                mPointerView.animate().translationX(mPointerPos.x).translationY(
+                        mPointerPos.y).start();
             } else {
-                mPointerView.setTranslationY(pointerY);
-                mPointerView.setTranslationX(pointerX);
+                mPointerView.setTranslationY(mPointerPos.y);
+                mPointerView.setTranslationX(mPointerPos.x);
                 mPointerView.setVisibility(VISIBLE);
             }
         });
     }
 
     /**
+     * Return true if pointer is shown on the left
+     */
+    public boolean isShowingLeftPointer() {
+        return mCurrentPointer == mLeftPointer;
+    }
+
+    /**
+     * Return true if pointer is shown on the right
+     */
+    public boolean isShowingRightPointer() {
+        return mCurrentPointer == mRightPointer;
+    }
+
+    /**
+     * Return width of the current pointer
+     */
+    public int getPointerWidth() {
+        return mPointerWidth;
+    }
+
+    /**
      * Position of the manage button displayed in the expanded view. Used for placing user
      * education about the manage button.
      */
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleIconFactory.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleIconFactory.java
index 9d3bf34..5dab8a0 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleIconFactory.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleIconFactory.java
@@ -21,6 +21,7 @@
 import android.content.Intent;
 import android.content.pm.LauncherApps;
 import android.content.pm.ShortcutInfo;
+import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.Icon;
 
@@ -65,4 +66,19 @@
             return null;
         }
     }
+
+    /**
+     * Creates the bitmap for the provided drawable and returns the scale used for
+     * drawing the actual drawable.
+     */
+    public Bitmap createIconBitmap(@NonNull Drawable icon, float[] outScale) {
+        if (outScale == null) {
+            outScale = new float[1];
+        }
+        icon = normalizeAndWrapToAdaptiveIcon(icon,
+                true /* shrinkNonAdaptiveIcons */,
+                null /* outscale */,
+                outScale);
+        return createIconBitmap(icon, outScale[0], BITMAP_GENERATION_MODE_WITH_SHADOW);
+    }
 }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleOverflowContainerView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleOverflowContainerView.java
index fcd0ed7..9aa285f 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleOverflowContainerView.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleOverflowContainerView.java
@@ -167,7 +167,10 @@
 
     void updateOverflow() {
         Resources res = getResources();
-        final int columns = res.getInteger(R.integer.bubbles_overflow_columns);
+        int columns = (int) Math.round(getWidth()
+                / (res.getDimension(R.dimen.bubble_name_width)));
+        columns = columns > 0 ? columns : res.getInteger(R.integer.bubbles_overflow_columns);
+
         mRecyclerView.setLayoutManager(
                 new OverflowGridLayoutManager(getContext(), columns));
         if (mRecyclerView.getItemDecorationCount() == 0) {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java
index e9729e4..dbad5df 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblePositioner.java
@@ -16,6 +16,8 @@
 
 package com.android.wm.shell.bubbles;
 
+import static android.view.View.LAYOUT_DIRECTION_RTL;
+
 import static java.lang.annotation.RetentionPolicy.SOURCE;
 
 import android.annotation.IntDef;
@@ -28,7 +30,6 @@
 import android.graphics.RectF;
 import android.util.Log;
 import android.view.Surface;
-import android.view.View;
 import android.view.WindowInsets;
 import android.view.WindowManager;
 import android.view.WindowMetrics;
@@ -366,6 +367,14 @@
         return mImeVisible ? mImeHeight : 0;
     }
 
+    /** Return top position of the IME if it's visible */
+    public int getImeTop() {
+        if (mImeVisible) {
+            return getScreenRect().bottom - getImeHeight() - getInsets().bottom;
+        }
+        return 0;
+    }
+
     /** Sets whether the IME is visible. **/
     public void setImeVisible(boolean visible, int height) {
         mImeVisible = visible;
@@ -557,16 +566,30 @@
      * @return the position of the bubble on-screen when the stack is expanded.
      */
     public PointF getExpandedBubbleXY(int index, BubbleStackView.StackViewState state) {
-        final float positionInRow = index * (mBubbleSize + mSpacingBetweenBubbles);
+        boolean showBubblesVertically = showBubblesVertically();
+        boolean isRtl = mContext.getResources().getConfiguration().getLayoutDirection()
+                == LAYOUT_DIRECTION_RTL;
+
+        int onScreenIndex;
+        if (showBubblesVertically || !isRtl) {
+            onScreenIndex = index;
+        } else {
+            // If bubbles are shown horizontally, check if RTL language is used.
+            // If RTL is active, position first bubble on the right and last on the left.
+            // Last bubble has screen index 0 and first bubble has max screen index value.
+            onScreenIndex = state.numberOfBubbles - 1 - index;
+        }
+
+        final float positionInRow = onScreenIndex * (mBubbleSize + mSpacingBetweenBubbles);
         final float expandedStackSize = getExpandedStackSize(state.numberOfBubbles);
-        final float centerPosition = showBubblesVertically()
+        final float centerPosition = showBubblesVertically
                 ? mPositionRect.centerY()
                 : mPositionRect.centerX();
         // alignment - centered on the edge
         final float rowStart = centerPosition - (expandedStackSize / 2f);
         float x;
         float y;
-        if (showBubblesVertically()) {
+        if (showBubblesVertically) {
             int inset = mExpandedViewLargeScreenInsetClosestEdge;
             y = rowStart + positionInRow;
             int left = mIsLargeScreen
@@ -583,8 +606,8 @@
             x = rowStart + positionInRow;
         }
 
-        if (showBubblesVertically() && mImeVisible) {
-            return new PointF(x, getExpandedBubbleYForIme(index, state));
+        if (showBubblesVertically && mImeVisible) {
+            return new PointF(x, getExpandedBubbleYForIme(onScreenIndex, state));
         }
         return new PointF(x, y);
     }
@@ -693,7 +716,7 @@
         // Start on the left if we're in LTR, right otherwise.
         final boolean startOnLeft =
                 mContext.getResources().getConfiguration().getLayoutDirection()
-                        != View.LAYOUT_DIRECTION_RTL;
+                        != LAYOUT_DIRECTION_RTL;
         final float startingVerticalOffset = mContext.getResources().getDimensionPixelOffset(
                 R.dimen.bubble_stack_starting_offset_y);
         // TODO: placement bug here because mPositionRect doesn't handle the overhanging edge
@@ -749,4 +772,21 @@
     public void setPinnedLocation(PointF point) {
         mPinLocation = point;
     }
+
+    /**
+     * Navigation bar has an area where system gestures can be started from.
+     *
+     * @return {@link Rect} for system navigation bar gesture zone
+     */
+    public Rect getNavBarGestureZone() {
+        // Gesture zone height from the bottom
+        int gestureZoneHeight = mContext.getResources().getDimensionPixelSize(
+                com.android.internal.R.dimen.navigation_bar_gesture_height);
+        Rect screen = getScreenRect();
+        return new Rect(
+                screen.left,
+                screen.bottom - gestureZoneHeight,
+                screen.right,
+                screen.bottom);
+    }
 }
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 0a33414..2d0be06 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
@@ -21,6 +21,7 @@
 
 import static com.android.wm.shell.animation.Interpolators.ALPHA_IN;
 import static com.android.wm.shell.animation.Interpolators.ALPHA_OUT;
+import static com.android.wm.shell.bubbles.BubbleDebugConfig.DEBUG_BUBBLE_GESTURE;
 import static com.android.wm.shell.bubbles.BubbleDebugConfig.DEBUG_BUBBLE_STACK_VIEW;
 import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_BUBBLES;
 import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_WITH_CLASS_NAME;
@@ -44,6 +45,7 @@
 import android.graphics.RectF;
 import android.graphics.drawable.ColorDrawable;
 import android.os.Bundle;
+import android.os.SystemProperties;
 import android.provider.Settings;
 import android.util.Log;
 import android.view.Choreographer;
@@ -56,6 +58,7 @@
 import android.view.ViewGroup;
 import android.view.ViewOutlineProvider;
 import android.view.ViewTreeObserver;
+import android.view.WindowManagerPolicyConstants;
 import android.view.accessibility.AccessibilityNodeInfo;
 import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
 import android.widget.FrameLayout;
@@ -75,8 +78,12 @@
 import com.android.wm.shell.R;
 import com.android.wm.shell.animation.Interpolators;
 import com.android.wm.shell.animation.PhysicsAnimator;
+import com.android.wm.shell.bubbles.BubblesNavBarMotionEventHandler.MotionEventListener;
 import com.android.wm.shell.bubbles.animation.AnimatableScaleMatrix;
 import com.android.wm.shell.bubbles.animation.ExpandedAnimationController;
+import com.android.wm.shell.bubbles.animation.ExpandedViewAnimationController;
+import com.android.wm.shell.bubbles.animation.ExpandedViewAnimationControllerImpl;
+import com.android.wm.shell.bubbles.animation.ExpandedViewAnimationControllerStub;
 import com.android.wm.shell.bubbles.animation.PhysicsAnimationLayout;
 import com.android.wm.shell.bubbles.animation.StackAnimationController;
 import com.android.wm.shell.common.FloatingContentCoordinator;
@@ -89,6 +96,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Objects;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
 
@@ -97,6 +105,12 @@
  */
 public class BubbleStackView extends FrameLayout
         implements ViewTreeObserver.OnComputeInternalInsetsListener {
+    /**
+     * Set to {@code true} to enable home gesture handling in bubbles
+     */
+    public static final boolean HOME_GESTURE_ENABLED =
+            SystemProperties.getBoolean("persist.wm.debug.bubbles_home_gesture", true);
+
     private static final String TAG = TAG_WITH_CLASS_NAME ? "BubbleStackView" : TAG_BUBBLES;
 
     /** How far the flyout needs to be dragged before it's dismissed regardless of velocity. */
@@ -123,6 +137,9 @@
 
     private static final float SCRIM_ALPHA = 0.6f;
 
+    /** Minimum alpha value for scrim when alpha is being changed via drag */
+    private static final float MIN_SCRIM_ALPHA_FOR_DRAG = 0.2f;
+
     /**
      * How long to wait to animate the stack temporarily invisible after a drag/flyout hide
      * animation ends, if we are in fact temporarily invisible.
@@ -148,7 +165,7 @@
      * Handler to use for all delayed animations - this way, we can easily cancel them before
      * starting a new animation.
      */
-    private final ShellExecutor mDelayedAnimationExecutor;
+    private final ShellExecutor mMainExecutor;
     private Runnable mDelayedAnimation;
 
     /**
@@ -197,8 +214,10 @@
     private PhysicsAnimationLayout mBubbleContainer;
     private StackAnimationController mStackAnimationController;
     private ExpandedAnimationController mExpandedAnimationController;
+    private ExpandedViewAnimationController mExpandedViewAnimationController;
 
     private View mScrim;
+    private boolean mScrimAnimating;
     private View mManageMenuScrim;
     private FrameLayout mExpandedViewContainer;
 
@@ -276,6 +295,9 @@
      */
     private int mPointerIndexDown = -1;
 
+    @Nullable
+    private BubblesNavBarGestureTracker mBubblesNavBarGestureTracker;
+
     /** Description of current animation controller state. */
     public void dump(PrintWriter pw, String[] args) {
         pw.println("Stack view state:");
@@ -693,6 +715,90 @@
         }
     };
 
+    /** Touch listener set on the whole view that forwards event to the swipe up listener. */
+    private final RelativeTouchListener mContainerSwipeListener = new RelativeTouchListener() {
+        @Override
+        public boolean onDown(@NonNull View v, @NonNull MotionEvent ev) {
+            // Pass move event on to swipe listener
+            mSwipeUpListener.onDown(ev.getX(), ev.getY());
+            return true;
+        }
+
+        @Override
+        public void onMove(@NonNull View v, @NonNull MotionEvent ev, float viewInitialX,
+                float viewInitialY, float dx, float dy) {
+            // Pass move event on to swipe listener
+            mSwipeUpListener.onMove(dx, dy);
+        }
+
+        @Override
+        public void onUp(@NonNull View v, @NonNull MotionEvent ev, float viewInitialX,
+                float viewInitialY, float dx, float dy, float velX, float velY) {
+            // Pass up even on to swipe listener
+            mSwipeUpListener.onUp(velX, velY);
+        }
+    };
+
+    /** MotionEventListener that listens from home gesture swipe event. */
+    private final MotionEventListener mSwipeUpListener = new MotionEventListener() {
+        @Override
+        public void onDown(float x, float y) {}
+
+        @Override
+        public void onMove(float dx, float dy) {
+            if ((mManageEduView != null && mManageEduView.getVisibility() == VISIBLE)
+                    || isStackEduShowing()) {
+                return;
+            }
+
+            if (mShowingManage) {
+                showManageMenu(false /* show */);
+            }
+            // Only allow up, normalize for up direction
+            float collapsed = -Math.min(dy, 0);
+            mExpandedViewAnimationController.updateDrag((int) collapsed);
+
+            // Update scrim
+            if (!mScrimAnimating) {
+                mScrim.setAlpha(getScrimAlphaForDrag(collapsed));
+            }
+        }
+
+        @Override
+        public void onCancel() {
+            mExpandedViewAnimationController.animateBackToExpanded();
+        }
+
+        @Override
+        public void onUp(float velX, float velY) {
+            mExpandedViewAnimationController.setSwipeVelocity(velY);
+            if (mExpandedViewAnimationController.shouldCollapse()) {
+                // Update data first and start the animation when we are processing change
+                mBubbleData.setExpanded(false);
+            } else {
+                mExpandedViewAnimationController.animateBackToExpanded();
+
+                // Update scrim
+                if (!mScrimAnimating) {
+                    showScrim(true);
+                }
+            }
+        }
+
+        private float getScrimAlphaForDrag(float dragAmount) {
+            // dragAmount should be negative as we allow scroll up only
+            if (mExpandedBubble != null && mExpandedBubble.getExpandedView() != null) {
+                float alphaRange = SCRIM_ALPHA - MIN_SCRIM_ALPHA_FOR_DRAG;
+
+                int dragMax = mExpandedBubble.getExpandedView().getContentHeight();
+                float dragFraction = dragAmount / dragMax;
+
+                return Math.max(SCRIM_ALPHA - alphaRange * dragFraction, MIN_SCRIM_ALPHA_FOR_DRAG);
+            }
+            return SCRIM_ALPHA;
+        }
+    };
+
     /** Click listener set on the flyout, which expands the stack when the flyout is tapped. */
     private OnClickListener mFlyoutClickListener = new OnClickListener() {
         @Override
@@ -766,7 +872,7 @@
             ShellExecutor mainExecutor) {
         super(context);
 
-        mDelayedAnimationExecutor = mainExecutor;
+        mMainExecutor = mainExecutor;
         mBubbleController = bubbleController;
         mBubbleData = data;
 
@@ -796,6 +902,14 @@
 
         mExpandedAnimationController = new ExpandedAnimationController(mPositioner,
                 onBubbleAnimatedOut, this);
+
+        if (HOME_GESTURE_ENABLED) {
+            mExpandedViewAnimationController =
+                    new ExpandedViewAnimationControllerImpl(context, mPositioner);
+        } else {
+            mExpandedViewAnimationController = new ExpandedViewAnimationControllerStub();
+        }
+
         mSurfaceSynchronizer = synchronizer != null ? synchronizer : DEFAULT_SURFACE_SYNCHRONIZER;
 
         // Force LTR by default since most of the Bubbles UI is positioned manually by the user, or
@@ -971,7 +1085,7 @@
                 if (mExpandedBubble != null && mExpandedBubble.getExpandedView() != null) {
                     // We need to be Z ordered on top in order for alpha animations to work.
                     mExpandedBubble.getExpandedView().setSurfaceZOrderedOnTop(true);
-                    mExpandedBubble.getExpandedView().setAlphaAnimating(true);
+                    mExpandedBubble.getExpandedView().setAnimating(true);
                 }
             }
 
@@ -985,14 +1099,15 @@
                         // = 0f remains in effect.
                         && !mExpandedViewTemporarilyHidden) {
                     mExpandedBubble.getExpandedView().setSurfaceZOrderedOnTop(false);
-                    mExpandedBubble.getExpandedView().setAlphaAnimating(false);
+                    mExpandedBubble.getExpandedView().setAnimating(false);
                 }
             }
         });
         mExpandedViewAlphaAnimator.addUpdateListener(valueAnimator -> {
             if (mExpandedBubble != null && mExpandedBubble.getExpandedView() != null) {
-                mExpandedBubble.getExpandedView().setTaskViewAlpha(
-                        (float) valueAnimator.getAnimatedValue());
+                float alpha = (float) valueAnimator.getAnimatedValue();
+                mExpandedBubble.getExpandedView().setContentAlpha(alpha);
+                mExpandedBubble.getExpandedView().setBackgroundAlpha(alpha);
             }
         });
 
@@ -1708,7 +1823,7 @@
     /**
      * Update bubble order and pointer position.
      */
-    public void updateBubbleOrder(List<Bubble> bubbles) {
+    public void updateBubbleOrder(List<Bubble> bubbles, boolean updatePointerPositoion) {
         final Runnable reorder = () -> {
             for (int i = 0; i < bubbles.size(); i++) {
                 Bubble bubble = bubbles.get(i);
@@ -1724,7 +1839,10 @@
                     .map(b -> b.getIconView()).collect(Collectors.toList());
             mStackAnimationController.animateReorder(bubbleViews, reorder);
         }
-        updatePointerPosition(false /* forIme */);
+
+        if (updatePointerPositoion) {
+            updatePointerPosition(false /* forIme */);
+        }
     }
 
     /**
@@ -1795,6 +1913,7 @@
     private void showNewlySelectedBubble(BubbleViewProvider bubbleToSelect) {
         final BubbleViewProvider previouslySelected = mExpandedBubble;
         mExpandedBubble = bubbleToSelect;
+        mExpandedViewAnimationController.setExpandedView(mExpandedBubble.getExpandedView());
 
         if (mIsExpanded) {
             hideCurrentInputMethod();
@@ -1843,12 +1962,19 @@
             return;
         }
 
+        boolean wasExpanded = mIsExpanded;
+
         hideCurrentInputMethod();
 
         mBubbleController.getSysuiProxy().onStackExpandChanged(shouldExpand);
 
-        if (mIsExpanded) {
-            animateCollapse();
+        if (wasExpanded) {
+            stopMonitoringSwipeUpGesture();
+            if (HOME_GESTURE_ENABLED) {
+                animateCollapse();
+            } else {
+                animateCollapseWithScale();
+            }
             logBubbleEvent(mExpandedBubble, FrameworkStatsLog.BUBBLE_UICHANGED__ACTION__COLLAPSED);
         } else {
             animateExpansion();
@@ -1856,11 +1982,58 @@
             logBubbleEvent(mExpandedBubble, FrameworkStatsLog.BUBBLE_UICHANGED__ACTION__EXPANDED);
             logBubbleEvent(mExpandedBubble,
                     FrameworkStatsLog.BUBBLE_UICHANGED__ACTION__STACK_EXPANDED);
+            if (HOME_GESTURE_ENABLED) {
+                mBubbleController.isNotificationPanelExpanded(notifPanelExpanded -> {
+                    if (!notifPanelExpanded && mIsExpanded) {
+                        startMonitoringSwipeUpGesture();
+                    }
+                });
+            }
         }
         notifyExpansionChanged(mExpandedBubble, mIsExpanded);
     }
 
     /**
+     * Monitor for swipe up gesture that is used to collapse expanded view
+     */
+    void startMonitoringSwipeUpGesture() {
+        if (DEBUG_BUBBLE_GESTURE) {
+            Log.d(TAG, "startMonitoringSwipeUpGesture");
+        }
+        stopMonitoringSwipeUpGestureInternal();
+
+        if (isGestureNavEnabled()) {
+            mBubblesNavBarGestureTracker = new BubblesNavBarGestureTracker(mContext, mPositioner);
+            mBubblesNavBarGestureTracker.start(mSwipeUpListener);
+            setOnTouchListener(mContainerSwipeListener);
+        }
+    }
+
+    private boolean isGestureNavEnabled() {
+        return mContext.getResources().getInteger(
+                com.android.internal.R.integer.config_navBarInteractionMode)
+                == WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL;
+    }
+
+    /**
+     * Stop monitoring for swipe up gesture
+     */
+    void stopMonitoringSwipeUpGesture() {
+        if (DEBUG_BUBBLE_GESTURE) {
+            Log.d(TAG, "stopMonitoringSwipeUpGesture");
+        }
+        stopMonitoringSwipeUpGestureInternal();
+    }
+
+    private void stopMonitoringSwipeUpGestureInternal() {
+        if (mBubblesNavBarGestureTracker != null) {
+            mBubblesNavBarGestureTracker.stop();
+            mBubblesNavBarGestureTracker = null;
+            setOnTouchListener(null);
+        }
+    }
+
+    /**
      * Called when back press occurs while bubbles are expanded.
      */
     public void onBackPressed() {
@@ -1982,15 +2155,28 @@
     }
 
     private void showScrim(boolean show) {
+        AnimatorListenerAdapter listener = new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationStart(Animator animation) {
+                mScrimAnimating = true;
+            }
+
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                mScrimAnimating = false;
+            }
+        };
         if (show) {
             mScrim.animate()
                     .setInterpolator(ALPHA_IN)
                     .alpha(SCRIM_ALPHA)
+                    .setListener(listener)
                     .start();
         } else {
             mScrim.animate()
                     .alpha(0f)
                     .setInterpolator(ALPHA_OUT)
+                    .setListener(listener)
                     .start();
         }
     }
@@ -2072,11 +2258,12 @@
         mExpandedViewContainer.setAnimationMatrix(mExpandedViewContainerMatrix);
 
         if (mExpandedBubble.getExpandedView() != null) {
-            mExpandedBubble.getExpandedView().setTaskViewAlpha(0f);
+            mExpandedBubble.getExpandedView().setContentAlpha(0f);
+            mExpandedBubble.getExpandedView().setBackgroundAlpha(0f);
 
             // We'll be starting the alpha animation after a slight delay, so set this flag early
             // here.
-            mExpandedBubble.getExpandedView().setAlphaAnimating(true);
+            mExpandedBubble.getExpandedView().setAnimating(true);
         }
 
         mDelayedAnimation = () -> {
@@ -2114,10 +2301,10 @@
                     })
                     .start();
         };
-        mDelayedAnimationExecutor.executeDelayed(mDelayedAnimation, startDelay);
+        mMainExecutor.executeDelayed(mDelayedAnimation, startDelay);
     }
 
-    private void animateCollapse() {
+    private void animateCollapseWithScale() {
         cancelDelayedExpandCollapseSwitchAnimations();
 
         if (mManageEduView != null && mManageEduView.getVisibility() == VISIBLE) {
@@ -2217,6 +2404,68 @@
                 .start();
     }
 
+    private void animateCollapse() {
+        cancelDelayedExpandCollapseSwitchAnimations();
+
+        if (mManageEduView != null && mManageEduView.getVisibility() == VISIBLE) {
+            mManageEduView.hide();
+        }
+
+        mIsExpanded = false;
+        mIsExpansionAnimating = true;
+
+        showScrim(false);
+
+        mBubbleContainer.cancelAllAnimations();
+
+        // If we were in the middle of swapping, the animating-out surface would have been scaling
+        // to zero - finish it off.
+        PhysicsAnimator.getInstance(mAnimatingOutSurfaceContainer).cancel();
+        mAnimatingOutSurfaceContainer.setScaleX(0f);
+        mAnimatingOutSurfaceContainer.setScaleY(0f);
+
+        // Let the expanded animation controller know that it shouldn't animate child adds/reorders
+        // since we're about to animate collapsed.
+        mExpandedAnimationController.notifyPreparingToCollapse();
+
+        final Runnable collapseBackToStack = () -> mExpandedAnimationController.collapseBackToStack(
+                mStackAnimationController
+                        .getStackPositionAlongNearestHorizontalEdge()
+                /* collapseTo */,
+                () -> mBubbleContainer.setActiveController(mStackAnimationController));
+
+        final Runnable after = () -> {
+            final BubbleViewProvider previouslySelected = mExpandedBubble;
+            // TODO(b/231350255): investigate why this call is needed here
+            beforeExpandedViewAnimation();
+            if (mManageEduView != null) {
+                mManageEduView.hide();
+            }
+
+            if (DEBUG_BUBBLE_STACK_VIEW) {
+                Log.d(TAG, "animateCollapse");
+                Log.d(TAG, BubbleDebugConfig.formatBubblesString(getBubblesOnScreen(),
+                        mExpandedBubble));
+            }
+            updateOverflowVisibility();
+            updateZOrder();
+            updateBadges(true /* setBadgeForCollapsedStack */);
+            afterExpandedViewAnimation();
+            if (previouslySelected != null) {
+                previouslySelected.setTaskViewVisibility(false);
+            }
+            mExpandedViewAnimationController.reset();
+        };
+        mExpandedViewAnimationController.animateCollapse(collapseBackToStack, after);
+        if (mExpandedBubble != null && mExpandedBubble.getExpandedView() != null) {
+            // When the animation completes, we should no longer be showing the content.
+            // This won't actually update content visibility immediately, if we are currently
+            // animating. But updates the internal state for the content to be hidden after
+            // animation completes.
+            mExpandedBubble.getExpandedView().setContentVisibility(false);
+        }
+    }
+
     private void animateSwitchBubbles() {
         // If we're no longer expanded, this is meaningless.
         if (!mIsExpanded) {
@@ -2277,7 +2526,7 @@
 
         mExpandedViewContainer.setAnimationMatrix(mExpandedViewContainerMatrix);
 
-        mDelayedAnimationExecutor.executeDelayed(() -> {
+        mMainExecutor.executeDelayed(() -> {
             if (!mIsExpanded) {
                 mIsBubbleSwitchAnimating = false;
                 return;
@@ -2308,7 +2557,7 @@
      * animating flags for those animations.
      */
     private void cancelDelayedExpandCollapseSwitchAnimations() {
-        mDelayedAnimationExecutor.removeCallbacks(mDelayedAnimation);
+        mMainExecutor.removeCallbacks(mDelayedAnimation);
 
         mIsExpansionAnimating = false;
         mIsBubbleSwitchAnimating = false;
@@ -2332,9 +2581,18 @@
     /**
      * Updates the stack based for IME changes. When collapsed it'll move the stack if it
      * overlaps where they IME would be. When expanded it'll shift the expanded bubbles
-     * if they might overlap with the IME (this only happens for large screens).
+     * if they might overlap with the IME (this only happens for large screens)
+     * and clip the expanded view.
      */
-    public void animateForIme(boolean visible) {
+    public void setImeVisible(boolean visible) {
+        if (HOME_GESTURE_ENABLED) {
+            setImeVisibleInternal(visible);
+        } else {
+            setImeVisibleWithoutClipping(visible);
+        }
+    }
+
+    private void setImeVisibleWithoutClipping(boolean visible) {
         if ((mIsExpansionAnimating || mIsBubbleSwitchAnimating) && mIsExpanded) {
             // This will update the animation so the bubbles move to position for the IME
             mExpandedAnimationController.expandFromStack(() -> {
@@ -2385,6 +2643,62 @@
         }
     }
 
+    private void setImeVisibleInternal(boolean visible) {
+        if ((mIsExpansionAnimating || mIsBubbleSwitchAnimating) && mIsExpanded) {
+            // This will update the animation so the bubbles move to position for the IME
+            mExpandedAnimationController.expandFromStack(() -> {
+                updatePointerPosition(false /* forIme */);
+                afterExpandedViewAnimation();
+                mExpandedViewAnimationController.animateForImeVisibilityChange(visible);
+            } /* after */);
+            return;
+        }
+
+        if (!mIsExpanded && getBubbleCount() > 0) {
+            final float stackDestinationY =
+                    mStackAnimationController.animateForImeVisibility(visible);
+
+            // How far the stack is animating due to IME, we'll just animate the flyout by that
+            // much too.
+            final float stackDy =
+                    stackDestinationY - mStackAnimationController.getStackPosition().y;
+
+            // If the flyout is visible, translate it along with the bubble stack.
+            if (mFlyout.getVisibility() == VISIBLE) {
+                PhysicsAnimator.getInstance(mFlyout)
+                        .spring(DynamicAnimation.TRANSLATION_Y,
+                                mFlyout.getTranslationY() + stackDy,
+                                FLYOUT_IME_ANIMATION_SPRING_CONFIG)
+                        .start();
+            }
+        }
+
+        if (mIsExpanded) {
+            mExpandedViewAnimationController.animateForImeVisibilityChange(visible);
+            if (mPositioner.showBubblesVertically()
+                    && mExpandedBubble != null && mExpandedBubble.getExpandedView() != null) {
+                float selectedY = mPositioner.getExpandedBubbleXY(getState().selectedIndex,
+                        getState()).y;
+                float newExpandedViewTop = mPositioner.getExpandedViewY(mExpandedBubble, selectedY);
+                mExpandedBubble.getExpandedView().setImeVisible(visible);
+                if (!mExpandedBubble.getExpandedView().isUsingMaxHeight()) {
+                    mExpandedViewContainer.animate().translationY(newExpandedViewTop);
+                }
+                List<Animator> animList = new ArrayList();
+                for (int i = 0; i < mBubbleContainer.getChildCount(); i++) {
+                    View child = mBubbleContainer.getChildAt(i);
+                    float transY = mPositioner.getExpandedBubbleXY(i, getState()).y;
+                    ObjectAnimator anim = ObjectAnimator.ofFloat(child, TRANSLATION_Y, transY);
+                    animList.add(anim);
+                }
+                updatePointerPosition(true /* forIme */);
+                AnimatorSet set = new AnimatorSet();
+                set.playTogether(animList);
+                set.start();
+            }
+        }
+    }
+
     @Override
     public boolean dispatchTouchEvent(MotionEvent ev) {
         if (ev.getAction() != MotionEvent.ACTION_DOWN && ev.getActionIndex() != mPointerIndexDown) {
@@ -2473,8 +2787,10 @@
 
     private void dismissBubbleIfExists(@Nullable BubbleViewProvider bubble) {
         if (bubble != null && mBubbleData.hasBubbleInStackWithKey(bubble.getKey())) {
-            if (mIsExpanded && mBubbleData.getBubbles().size() > 1) {
-                // If we have more than 1 bubble we will perform the switch animation
+            if (mIsExpanded && mBubbleData.getBubbles().size() > 1
+                    && Objects.equals(bubble, mExpandedBubble)) {
+                // If we have more than 1 bubble and it's the current bubble being dismissed,
+                // we will perform the switch animation
                 mIsBubbleSwitchAnimating = true;
             }
             mBubbleData.dismissBubbleWithKey(bubble.getKey(), Bubbles.DISMISS_USER_GESTURE);
@@ -2820,7 +3136,7 @@
                 && mExpandedBubble.getExpandedView() != null) {
             BubbleExpandedView bev = mExpandedBubble.getExpandedView();
             bev.setContentVisibility(false);
-            bev.setAlphaAnimating(!mIsExpansionAnimating);
+            bev.setAnimating(!mIsExpansionAnimating);
             mExpandedViewContainerMatrix.setScaleX(0f);
             mExpandedViewContainerMatrix.setScaleY(0f);
             mExpandedViewContainerMatrix.setTranslate(0f, 0f);
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 69762c9..f437553 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
@@ -195,15 +195,18 @@
                     b.isImportantConversation());
             info.badgeBitmap = badgeBitmapInfo.icon;
             // Raw badge bitmap never includes the important conversation ring
-            info.mRawBadgeBitmap = badgeIconFactory.getBadgeBitmap(badgedIcon, false).icon;
-            info.bubbleBitmap = iconFactory.createBadgedIconBitmap(bubbleDrawable).icon;
+            info.mRawBadgeBitmap = b.isImportantConversation()
+                    ? badgeIconFactory.getBadgeBitmap(badgedIcon, false).icon
+                    : badgeBitmapInfo.icon;
+
+            float[] bubbleBitmapScale = new float[1];
+            info.bubbleBitmap = iconFactory.createIconBitmap(bubbleDrawable, bubbleBitmapScale);
 
             // Dot color & placement
             Path iconPath = PathParser.createPathFromPathData(
                     c.getResources().getString(com.android.internal.R.string.config_icon_mask));
             Matrix matrix = new Matrix();
-            float scale = iconFactory.getNormalizer().getScale(bubbleDrawable,
-                    null /* outBounds */, null /* path */, null /* outMaskShape */);
+            float scale = bubbleBitmapScale[0];
             float radius = DEFAULT_PATH_SIZE / 2f;
             matrix.setScale(scale /* x scale */, scale /* y scale */, radius /* pivot x */,
                     radius /* pivot y */);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubbles.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubbles.java
index 8a0db0a..37b96ff 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubbles.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubbles.java
@@ -23,12 +23,10 @@
 
 import android.app.NotificationChannel;
 import android.content.pm.UserInfo;
-import android.content.res.Configuration;
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.service.notification.NotificationListenerService;
 import android.service.notification.NotificationListenerService.RankingMap;
-import android.util.ArraySet;
 import android.util.Pair;
 import android.util.SparseArray;
 
@@ -42,6 +40,7 @@
 import java.lang.annotation.Target;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Set;
 import java.util.concurrent.Executor;
 import java.util.function.Consumer;
 import java.util.function.IntConsumer;
@@ -107,9 +106,6 @@
     /** Tell the stack of bubbles to collapse. */
     void collapseStack();
 
-    /** Tell the controller need update its UI to fit theme. */
-    void updateForThemeChanges();
-
     /**
      * Request the stack expand if needed, then select the specified Bubble as current.
      * If no bubble exists for this entry, one is created.
@@ -175,8 +171,9 @@
      *
      * @param entry the {@link BubbleEntry} by the notification.
      * @param shouldBubbleUp {@code true} if this notification should bubble up.
+     * @param fromSystem {@code true} if this update is from NotificationManagerService.
      */
-    void onEntryUpdated(BubbleEntry entry, boolean shouldBubbleUp);
+    void onEntryUpdated(BubbleEntry entry, boolean shouldBubbleUp, boolean fromSystem);
 
     /**
      * Called when new notification entry removed.
@@ -214,6 +211,11 @@
             int modificationType);
 
     /**
+     * Called when notification panel is expanded or collapsed
+     */
+    void onNotificationPanelExpandedChanged(boolean expanded);
+
+    /**
      * Called when the status bar has become visible or invisible (either permanently or
      * temporarily).
      */
@@ -250,13 +252,6 @@
      */
     void onUserRemoved(int removedUserId);
 
-    /**
-     * Called when config changed.
-     *
-     * @param newConfig the new config.
-     */
-    void onConfigChanged(Configuration newConfig);
-
     /** Description of current bubble state. */
     void dump(PrintWriter pw, String[] args);
 
@@ -285,11 +280,11 @@
 
     /** Callback to tell SysUi components execute some methods. */
     interface SysuiProxy {
-        void isNotificationShadeExpand(Consumer<Boolean> callback);
+        void isNotificationPanelExpand(Consumer<Boolean> callback);
 
         void getPendingOrActiveEntry(String key, Consumer<BubbleEntry> callback);
 
-        void getShouldRestoredEntries(ArraySet<String> savedBubbleKeys,
+        void getShouldRestoredEntries(Set<String> savedBubbleKeys,
                 Consumer<List<BubbleEntry>> callback);
 
         void setNotificationInterruption(String key);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblesNavBarGestureTracker.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblesNavBarGestureTracker.java
new file mode 100644
index 0000000..e7beeeb
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblesNavBarGestureTracker.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.bubbles;
+
+import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_BUBBLES;
+import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_WITH_CLASS_NAME;
+
+import android.content.Context;
+import android.hardware.input.InputManager;
+import android.util.Log;
+import android.view.Choreographer;
+import android.view.InputChannel;
+import android.view.InputEventReceiver;
+import android.view.InputMonitor;
+
+import androidx.annotation.Nullable;
+
+import com.android.wm.shell.bubbles.BubblesNavBarMotionEventHandler.MotionEventListener;
+
+/**
+ * Set up tracking bubbles gestures that begin in navigation bar
+ */
+class BubblesNavBarGestureTracker {
+
+    private static final String TAG = TAG_WITH_CLASS_NAME ? "BubblesGestureTracker" : TAG_BUBBLES;
+
+    private static final String GESTURE_MONITOR = "bubbles-gesture";
+    private final Context mContext;
+    private final BubblePositioner mPositioner;
+
+    @Nullable
+    private InputMonitor mInputMonitor;
+    @Nullable
+    private InputEventReceiver mInputEventReceiver;
+
+    BubblesNavBarGestureTracker(Context context, BubblePositioner positioner) {
+        mContext = context;
+        mPositioner = positioner;
+    }
+
+    /**
+     * Start tracking gestures
+     *
+     * @param listener listener that is notified of touch events
+     */
+    void start(MotionEventListener listener) {
+        if (BubbleDebugConfig.DEBUG_BUBBLE_GESTURE) {
+            Log.d(TAG, "start monitoring bubbles swipe up gesture");
+        }
+
+        stopInternal();
+
+        mInputMonitor = InputManager.getInstance().monitorGestureInput(GESTURE_MONITOR,
+                mContext.getDisplayId());
+        InputChannel inputChannel = mInputMonitor.getInputChannel();
+
+        BubblesNavBarMotionEventHandler motionEventHandler =
+                new BubblesNavBarMotionEventHandler(mContext, mPositioner,
+                        this::onInterceptTouch, listener);
+        mInputEventReceiver = new BubblesNavBarInputEventReceiver(inputChannel,
+                Choreographer.getInstance(), motionEventHandler);
+    }
+
+    void stop() {
+        if (BubbleDebugConfig.DEBUG_BUBBLE_GESTURE) {
+            Log.d(TAG, "stop monitoring bubbles swipe up gesture");
+        }
+        stopInternal();
+    }
+
+    private void stopInternal() {
+        if (mInputEventReceiver != null) {
+            mInputEventReceiver.dispose();
+            mInputEventReceiver = null;
+        }
+        if (mInputMonitor != null) {
+            mInputMonitor.dispose();
+            mInputMonitor = null;
+        }
+    }
+
+    private void onInterceptTouch() {
+        if (BubbleDebugConfig.DEBUG_BUBBLE_GESTURE) {
+            Log.d(TAG, "intercept touch event");
+        }
+        if (mInputMonitor != null) {
+            mInputMonitor.pilferPointers();
+        }
+    }
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblesNavBarInputEventReceiver.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblesNavBarInputEventReceiver.java
new file mode 100644
index 0000000..45037b8
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblesNavBarInputEventReceiver.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.bubbles;
+
+import android.os.Looper;
+import android.view.BatchedInputEventReceiver;
+import android.view.Choreographer;
+import android.view.InputChannel;
+import android.view.InputEvent;
+import android.view.MotionEvent;
+
+/**
+ * Bubbles {@link BatchedInputEventReceiver} for monitoring touches from navbar gesture area
+ */
+class BubblesNavBarInputEventReceiver extends BatchedInputEventReceiver {
+
+    private final BubblesNavBarMotionEventHandler mMotionEventHandler;
+
+    BubblesNavBarInputEventReceiver(InputChannel inputChannel,
+            Choreographer choreographer, BubblesNavBarMotionEventHandler motionEventHandler) {
+        super(inputChannel, Looper.myLooper(), choreographer);
+        mMotionEventHandler = motionEventHandler;
+    }
+
+    @Override
+    public void onInputEvent(InputEvent event) {
+        boolean handled = false;
+        try {
+            if (!(event instanceof MotionEvent)) {
+                return;
+            }
+            handled = mMotionEventHandler.onMotionEvent((MotionEvent) event);
+        } finally {
+            finishInputEvent(event, handled);
+        }
+    }
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblesNavBarMotionEventHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblesNavBarMotionEventHandler.java
new file mode 100644
index 0000000..844526ca
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubblesNavBarMotionEventHandler.java
@@ -0,0 +1,175 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.bubbles;
+
+import static com.android.wm.shell.bubbles.BubbleDebugConfig.DEBUG_BUBBLE_GESTURE;
+import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_BUBBLES;
+import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_WITH_CLASS_NAME;
+
+import android.content.Context;
+import android.graphics.PointF;
+import android.util.Log;
+import android.view.MotionEvent;
+import android.view.VelocityTracker;
+import android.view.ViewConfiguration;
+
+import androidx.annotation.Nullable;
+
+/**
+ * Handles {@link MotionEvent}s for bubbles that begin in the nav bar area
+ */
+class BubblesNavBarMotionEventHandler {
+    private static final String TAG =
+            TAG_WITH_CLASS_NAME ? "BubblesNavBarMotionEventHandler" : TAG_BUBBLES;
+    private static final int VELOCITY_UNITS = 1000;
+
+    private final Runnable mOnInterceptTouch;
+    private final MotionEventListener mMotionEventListener;
+    private final int mTouchSlop;
+    private final BubblePositioner mPositioner;
+    private final PointF mTouchDown = new PointF();
+    private boolean mTrackingTouches;
+    private boolean mInterceptingTouches;
+    @Nullable
+    private VelocityTracker mVelocityTracker;
+
+    BubblesNavBarMotionEventHandler(Context context, BubblePositioner positioner,
+            Runnable onInterceptTouch, MotionEventListener motionEventListener) {
+        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
+        mPositioner = positioner;
+        mOnInterceptTouch = onInterceptTouch;
+        mMotionEventListener = motionEventListener;
+    }
+
+    /**
+     * Handle {@link MotionEvent} and forward it to {@code motionEventListener} defined in
+     * constructor
+     *
+     * @return {@code true} if this {@link MotionEvent} is handled (it started in the gesture area)
+     */
+    public boolean onMotionEvent(MotionEvent motionEvent) {
+        float dx = motionEvent.getX() - mTouchDown.x;
+        float dy = motionEvent.getY() - mTouchDown.y;
+
+        switch (motionEvent.getAction()) {
+            case MotionEvent.ACTION_DOWN:
+                if (isInGestureRegion(motionEvent)) {
+                    mTouchDown.set(motionEvent.getX(), motionEvent.getY());
+                    mMotionEventListener.onDown(motionEvent.getX(), motionEvent.getY());
+                    mTrackingTouches = true;
+                    return true;
+                }
+                break;
+            case MotionEvent.ACTION_MOVE:
+                if (mTrackingTouches) {
+                    if (!mInterceptingTouches && Math.hypot(dx, dy) > mTouchSlop) {
+                        mInterceptingTouches = true;
+                        mOnInterceptTouch.run();
+                    }
+                    if (mInterceptingTouches) {
+                        getVelocityTracker().addMovement(motionEvent);
+                        mMotionEventListener.onMove(dx, dy);
+                    }
+                    return true;
+                }
+                break;
+            case MotionEvent.ACTION_CANCEL:
+                if (mTrackingTouches) {
+                    mMotionEventListener.onCancel();
+                    finishTracking();
+                    return true;
+                }
+                break;
+            case MotionEvent.ACTION_UP:
+                if (mTrackingTouches) {
+                    if (mInterceptingTouches) {
+                        getVelocityTracker().computeCurrentVelocity(VELOCITY_UNITS);
+                        mMotionEventListener.onUp(getVelocityTracker().getXVelocity(),
+                                getVelocityTracker().getYVelocity());
+                    }
+                    finishTracking();
+                    return true;
+                }
+                break;
+        }
+        return false;
+    }
+
+    private boolean isInGestureRegion(MotionEvent ev) {
+        // Only handles touch events beginning in navigation bar system gesture zone
+        if (mPositioner.getNavBarGestureZone().contains((int) ev.getX(), (int) ev.getY())) {
+            if (DEBUG_BUBBLE_GESTURE) {
+                Log.d(TAG, "handling touch y=" + ev.getY()
+                        + " navBarGestureZone=" + mPositioner.getNavBarGestureZone());
+            }
+            return true;
+        }
+        return false;
+    }
+
+    private VelocityTracker getVelocityTracker() {
+        if (mVelocityTracker == null) {
+            mVelocityTracker = VelocityTracker.obtain();
+        }
+        return mVelocityTracker;
+    }
+
+    private void finishTracking() {
+        mTouchDown.set(0, 0);
+        mTrackingTouches = false;
+        mInterceptingTouches = false;
+        if (mVelocityTracker != null) {
+            mVelocityTracker.recycle();
+            mVelocityTracker = null;
+        }
+    }
+
+    /**
+     * Callback for receiving {@link MotionEvent} updates
+     */
+    interface MotionEventListener {
+        /**
+         * Touch down action.
+         *
+         * @param x x coordinate
+         * @param y y coordinate
+         */
+        void onDown(float x, float y);
+
+        /**
+         * Move action.
+         * Reports distance from point reported in {@link #onDown(float, float)}
+         *
+         * @param dx distance moved on x-axis from starting point, in pixels
+         * @param dy distance moved on y-axis from starting point, in pixels
+         */
+        void onMove(float dx, float dy);
+
+        /**
+         * Touch up action.
+         *
+         * @param velX velocity of the move action on x axis
+         * @param velY velocity of the move actin on y axis
+         */
+        void onUp(float velX, float velY);
+
+        /**
+         * Motion action was cancelled.
+         */
+        void onCancel();
+    }
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/RelativeTouchListener.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/RelativeTouchListener.kt
index cf0cefe..ea9d065 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/RelativeTouchListener.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/RelativeTouchListener.kt
@@ -17,8 +17,6 @@
 package com.android.wm.shell.bubbles
 
 import android.graphics.PointF
-import android.os.Handler
-import android.os.Looper
 import android.view.MotionEvent
 import android.view.VelocityTracker
 import android.view.View
@@ -146,6 +144,12 @@
                 velocityTracker.clear()
                 movedEnough = false
             }
+
+            MotionEvent.ACTION_CANCEL -> {
+                v.handler.removeCallbacksAndMessages(null)
+                velocityTracker.clear()
+                movedEnough = false
+            }
         }
 
         return true
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/animation/ExpandedAnimationController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/animation/ExpandedAnimationController.java
index 573f424..b521cb6a 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/animation/ExpandedAnimationController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/animation/ExpandedAnimationController.java
@@ -16,12 +16,16 @@
 
 package com.android.wm.shell.bubbles.animation;
 
+import static android.view.View.LAYOUT_DIRECTION_RTL;
+
 import static com.android.wm.shell.bubbles.BubblePositioner.NUM_VISIBLE_WHEN_RESTING;
+import static com.android.wm.shell.bubbles.BubbleStackView.HOME_GESTURE_ENABLED;
 
 import android.content.res.Resources;
 import android.graphics.Path;
 import android.graphics.PointF;
 import android.view.View;
+import android.view.animation.Interpolator;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -61,7 +65,10 @@
     private static final float DAMPING_RATIO_MEDIUM_LOW_BOUNCY = 0.65f;
 
     /** Stiffness for the expand/collapse path-following animation. */
-    private static final int EXPAND_COLLAPSE_ANIM_STIFFNESS = 1000;
+    private static final int EXPAND_COLLAPSE_ANIM_STIFFNESS = 400;
+
+    /** Stiffness for the expand/collapse animation when home gesture handling is off */
+    private static final int EXPAND_COLLAPSE_ANIM_STIFFNESS_WITHOUT_HOME_GESTURE = 1000;
 
     /**
      * Velocity required to dismiss an individual bubble without dragging it into the dismiss
@@ -73,6 +80,11 @@
             new PhysicsAnimator.SpringConfig(
                     EXPAND_COLLAPSE_ANIM_STIFFNESS, SpringForce.DAMPING_RATIO_NO_BOUNCY);
 
+    private final PhysicsAnimator.SpringConfig mAnimateOutSpringConfigWithoutHomeGesture =
+            new PhysicsAnimator.SpringConfig(
+                    EXPAND_COLLAPSE_ANIM_STIFFNESS_WITHOUT_HOME_GESTURE,
+                    SpringForce.DAMPING_RATIO_NO_BOUNCY);
+
     /** Horizontal offset between bubbles, which we need to know to re-stack them. */
     private float mStackOffsetPx;
     /** Size of each bubble. */
@@ -233,6 +245,11 @@
             };
         }
 
+        boolean showBubblesVertically = mPositioner.showBubblesVertically();
+        final boolean isRtl =
+                mLayout.getContext().getResources().getConfiguration().getLayoutDirection()
+                        == LAYOUT_DIRECTION_RTL;
+
         // Animate each bubble individually, since each path will end in a different spot.
         animationsForChildrenFromIndex(0, (index, animation) -> {
             final View bubble = mLayout.getChildAt(index);
@@ -267,9 +284,20 @@
             // right side, the first bubble is traveling to the top left, so it leads. During
             // collapse to the left, the first bubble has the shortest travel time back to the stack
             // position, so it leads (and vice versa).
-            final boolean firstBubbleLeads =
-                    (expanding && !mLayout.isFirstChildXLeftOfCenter(bubble.getTranslationX()))
+            final boolean firstBubbleLeads;
+            if (showBubblesVertically || !isRtl) {
+                firstBubbleLeads =
+                        (expanding && !mLayout.isFirstChildXLeftOfCenter(bubble.getTranslationX()))
                             || (!expanding && mLayout.isFirstChildXLeftOfCenter(mCollapsePoint.x));
+            } else {
+                // For RTL languages, when showing bubbles horizontally, it is reversed. The bubbles
+                // are positioned right to left. This means that when expanding from left, the top
+                // bubble will lead as it will be positioned on the right. And when expanding from
+                // right, the top bubble will have the least travel distance.
+                firstBubbleLeads =
+                        (expanding && mLayout.isFirstChildXLeftOfCenter(bubble.getTranslationX()))
+                            || (!expanding && !mLayout.isFirstChildXLeftOfCenter(mCollapsePoint.x));
+            }
             final int startDelay = firstBubbleLeads
                     ? (index * 10)
                     : ((mLayout.getChildCount() - index) * 10);
@@ -278,11 +306,20 @@
                     (firstBubbleLeads && index == 0)
                             || (!firstBubbleLeads && index == mLayout.getChildCount() - 1);
 
+            Interpolator interpolator;
+            if (HOME_GESTURE_ENABLED) {
+                // When home gesture is enabled, we use a different animation timing for collapse
+                interpolator = expanding
+                        ? Interpolators.EMPHASIZED_ACCELERATE : Interpolators.EMPHASIZED_DECELERATE;
+            } else {
+                interpolator = Interpolators.LINEAR;
+            }
+
             animation
                     .followAnimatedTargetAlongPath(
                             path,
                             EXPAND_COLLAPSE_TARGET_ANIM_DURATION /* targetAnimDuration */,
-                            Interpolators.LINEAR /* targetAnimInterpolator */,
+                            interpolator /* targetAnimInterpolator */,
                             isLeadBubble ? mLeadBubbleEndAction : null /* endAction */,
                             () -> mLeadBubbleEndAction = null /* endAction */)
                     .withStartDelay(startDelay)
@@ -525,10 +562,16 @@
             finishRemoval.run();
             mOnBubbleAnimatedOutAction.run();
         } else {
+            PhysicsAnimator.SpringConfig springConfig;
+            if (HOME_GESTURE_ENABLED) {
+                springConfig = mAnimateOutSpringConfig;
+            } else {
+                springConfig = mAnimateOutSpringConfigWithoutHomeGesture;
+            }
             PhysicsAnimator.getInstance(child)
                     .spring(DynamicAnimation.ALPHA, 0f)
-                    .spring(DynamicAnimation.SCALE_X, 0f, mAnimateOutSpringConfig)
-                    .spring(DynamicAnimation.SCALE_Y, 0f, mAnimateOutSpringConfig)
+                    .spring(DynamicAnimation.SCALE_X, 0f, springConfig)
+                    .spring(DynamicAnimation.SCALE_Y, 0f, springConfig)
                     .withEndActions(finishRemoval, mOnBubbleAnimatedOutAction)
                     .start();
         }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/animation/ExpandedViewAnimationController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/animation/ExpandedViewAnimationController.java
new file mode 100644
index 0000000..8a33780
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/animation/ExpandedViewAnimationController.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.bubbles.animation;
+
+import com.android.wm.shell.bubbles.BubbleExpandedView;
+
+/**
+ * Animation controller for bubble expanded view collapsing
+ */
+public interface ExpandedViewAnimationController {
+    /**
+     * Set expanded view that this controller is working with.
+     */
+    void setExpandedView(BubbleExpandedView expandedView);
+
+    /**
+     * Set current collapse value, in pixels.
+     *
+     * @param distance pixels that user dragged the view by
+     */
+    void updateDrag(float distance);
+
+    /**
+     * Set current swipe velocity.
+     * Velocity is directional:
+     * <ul>
+     *     <li>velocity < 0 means swipe direction is up</li>
+     *     <li>velocity > 0 means swipe direction is down</li>
+     * </ul>
+     */
+    void setSwipeVelocity(float velocity);
+
+    /**
+     * Check if view is dragged past collapse threshold or swipe up velocity exceeds min velocity
+     * required to collapse the view
+     */
+    boolean shouldCollapse();
+
+    /**
+     * Animate view to collapsed state
+     *
+     * @param startStackCollapse runnable that is triggered when bubbles can start moving back to
+     *                           their collapsed location
+     * @param after              runnable to run after animation is complete
+     */
+    void animateCollapse(Runnable startStackCollapse, Runnable after);
+
+    /**
+     * Animate the view back to fully expanded state.
+     */
+    void animateBackToExpanded();
+
+    /**
+     * Animate view for IME visibility change
+     */
+    void animateForImeVisibilityChange(boolean visible);
+
+    /**
+     * Reset the view to fully expanded state
+     */
+    void reset();
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/animation/ExpandedViewAnimationControllerImpl.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/animation/ExpandedViewAnimationControllerImpl.java
new file mode 100644
index 0000000..845dca3
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/animation/ExpandedViewAnimationControllerImpl.java
@@ -0,0 +1,431 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.bubbles.animation;
+
+import static com.android.wm.shell.bubbles.BubbleDebugConfig.DEBUG_COLLAPSE_ANIMATOR;
+import static com.android.wm.shell.bubbles.BubbleDebugConfig.DEBUG_EXPANDED_VIEW_DRAGGING;
+import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_BUBBLES;
+import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_WITH_CLASS_NAME;
+import static com.android.wm.shell.bubbles.BubbleExpandedView.BACKGROUND_ALPHA;
+import static com.android.wm.shell.bubbles.BubbleExpandedView.BOTTOM_CLIP_PROPERTY;
+import static com.android.wm.shell.bubbles.BubbleExpandedView.CONTENT_ALPHA;
+import static com.android.wm.shell.bubbles.BubbleExpandedView.MANAGE_BUTTON_ALPHA;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.AnimatorSet;
+import android.animation.ObjectAnimator;
+import android.animation.ValueAnimator;
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.util.Log;
+import android.view.HapticFeedbackConstants;
+import android.view.ViewConfiguration;
+
+import androidx.annotation.Nullable;
+import androidx.dynamicanimation.animation.DynamicAnimation;
+import androidx.dynamicanimation.animation.FloatPropertyCompat;
+import androidx.dynamicanimation.animation.SpringAnimation;
+import androidx.dynamicanimation.animation.SpringForce;
+
+import com.android.wm.shell.animation.FlingAnimationUtils;
+import com.android.wm.shell.animation.Interpolators;
+import com.android.wm.shell.bubbles.BubbleExpandedView;
+import com.android.wm.shell.bubbles.BubblePositioner;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Implementation of {@link ExpandedViewAnimationController} that uses a collapse animation to
+ * hide the {@link BubbleExpandedView}
+ */
+public class ExpandedViewAnimationControllerImpl implements ExpandedViewAnimationController {
+
+    private static final String TAG = TAG_WITH_CLASS_NAME ? "ExpandedViewAnimCtrl" : TAG_BUBBLES;
+
+    private static final float COLLAPSE_THRESHOLD = 0.02f;
+
+    private static final int COLLAPSE_DURATION_MS = 250;
+
+    private static final int MANAGE_BUTTON_ANIM_DURATION_MS = 78;
+
+    private static final int CONTENT_OPACITY_ANIM_DELAY_MS = 93;
+    private static final int CONTENT_OPACITY_ANIM_DURATION_MS = 78;
+
+    private static final int BACKGROUND_OPACITY_ANIM_DELAY_MS = 172;
+    private static final int BACKGROUND_OPACITY_ANIM_DURATION_MS = 78;
+
+    /** Animation fraction threshold for content alpha animation when stack collapse should begin */
+    private static final float STACK_COLLAPSE_THRESHOLD = 0.5f;
+
+    private static final FloatPropertyCompat<ExpandedViewAnimationControllerImpl>
+            COLLAPSE_HEIGHT_PROPERTY =
+            new FloatPropertyCompat<ExpandedViewAnimationControllerImpl>("CollapseSpring") {
+                @Override
+                public float getValue(ExpandedViewAnimationControllerImpl controller) {
+                    return controller.getCollapsedAmount();
+                }
+
+                @Override
+                public void setValue(ExpandedViewAnimationControllerImpl controller,
+                        float value) {
+                    controller.setCollapsedAmount(value);
+                }
+            };
+
+    private final int mMinFlingVelocity;
+    private float mSwipeUpVelocity;
+    private float mSwipeDownVelocity;
+    private final BubblePositioner mPositioner;
+    private final FlingAnimationUtils mFlingAnimationUtils;
+    private int mDraggedAmount;
+    private float mCollapsedAmount;
+    @Nullable
+    private BubbleExpandedView mExpandedView;
+    @Nullable
+    private AnimatorSet mCollapseAnimation;
+    private boolean mNotifiedAboutThreshold;
+    private SpringAnimation mBackToExpandedAnimation;
+    @Nullable
+    private ObjectAnimator mBottomClipAnim;
+
+    public ExpandedViewAnimationControllerImpl(Context context, BubblePositioner positioner) {
+        mFlingAnimationUtils = new FlingAnimationUtils(context.getResources().getDisplayMetrics(),
+                COLLAPSE_DURATION_MS / 1000f);
+        mMinFlingVelocity = ViewConfiguration.get(context).getScaledMinimumFlingVelocity();
+        mPositioner = positioner;
+    }
+
+    private static void adjustAnimatorSetDuration(AnimatorSet animatorSet,
+            float durationAdjustment) {
+        for (Animator animator : animatorSet.getChildAnimations()) {
+            animator.setStartDelay((long) (animator.getStartDelay() * durationAdjustment));
+            animator.setDuration((long) (animator.getDuration() * durationAdjustment));
+        }
+    }
+
+    @Override
+    public void setExpandedView(BubbleExpandedView expandedView) {
+        if (mExpandedView != null) {
+            if (DEBUG_COLLAPSE_ANIMATOR) {
+                Log.d(TAG, "updating expandedView, resetting previous");
+            }
+            if (mCollapseAnimation != null) {
+                mCollapseAnimation.cancel();
+            }
+            if (mBackToExpandedAnimation != null) {
+                mBackToExpandedAnimation.cancel();
+            }
+            reset();
+        }
+        mExpandedView = expandedView;
+    }
+
+    @Override
+    public void updateDrag(float distance) {
+        if (mExpandedView != null) {
+            mDraggedAmount = OverScroll.dampedScroll(distance, mExpandedView.getContentHeight());
+
+            if (DEBUG_COLLAPSE_ANIMATOR && DEBUG_EXPANDED_VIEW_DRAGGING) {
+                Log.d(TAG, "updateDrag: distance=" + distance + " dragged=" + mDraggedAmount);
+            }
+
+            setCollapsedAmount(mDraggedAmount);
+
+            if (!mNotifiedAboutThreshold && isPastCollapseThreshold()) {
+                mNotifiedAboutThreshold = true;
+                if (DEBUG_COLLAPSE_ANIMATOR) {
+                    Log.d(TAG, "notifying over collapse threshold");
+                }
+                vibrateIfEnabled();
+            }
+        }
+    }
+
+    @Override
+    public void setSwipeVelocity(float velocity) {
+        if (velocity < 0) {
+            mSwipeUpVelocity = Math.abs(velocity);
+            mSwipeDownVelocity = 0;
+        } else {
+            mSwipeUpVelocity = 0;
+            mSwipeDownVelocity = velocity;
+        }
+    }
+
+    @Override
+    public boolean shouldCollapse() {
+        if (mSwipeDownVelocity > mMinFlingVelocity) {
+            // Swipe velocity is positive and over fling velocity.
+            // This is a swipe down, always reset to expanded state, regardless of dragged amount.
+            if (DEBUG_COLLAPSE_ANIMATOR) {
+                Log.d(TAG,
+                        "not collapsing expanded view, swipe down velocity: " + mSwipeDownVelocity
+                                + " minV: " + mMinFlingVelocity);
+            }
+            return false;
+        }
+
+        if (mSwipeUpVelocity > mMinFlingVelocity) {
+            // Swiping up and over fling velocity, collapse the view.
+            if (DEBUG_COLLAPSE_ANIMATOR) {
+                Log.d(TAG,
+                        "collapse expanded view, swipe up velocity: " + mSwipeUpVelocity + " minV: "
+                                + mMinFlingVelocity);
+            }
+            return true;
+        }
+
+        if (isPastCollapseThreshold()) {
+            if (DEBUG_COLLAPSE_ANIMATOR) {
+                Log.d(TAG, "collapse expanded view, past threshold, dragged: " + mDraggedAmount);
+            }
+            return true;
+        }
+
+        if (DEBUG_COLLAPSE_ANIMATOR) {
+            Log.d(TAG, "not collapsing expanded view");
+        }
+
+        return false;
+    }
+
+    @Override
+    public void animateCollapse(Runnable startStackCollapse, Runnable after) {
+        if (DEBUG_COLLAPSE_ANIMATOR) {
+            Log.d(TAG,
+                    "expandedView animate collapse swipeVel=" + mSwipeUpVelocity + " minFlingVel="
+                            + mMinFlingVelocity);
+        }
+        if (mExpandedView != null) {
+            // Mark it as animating immediately to avoid updates to the view before animation starts
+            mExpandedView.setAnimating(true);
+
+            if (mCollapseAnimation != null) {
+                mCollapseAnimation.cancel();
+            }
+            mCollapseAnimation = createCollapseAnimation(mExpandedView, startStackCollapse, after);
+
+            if (mSwipeUpVelocity >= mMinFlingVelocity) {
+                int contentHeight = mExpandedView.getContentHeight();
+
+                // Use a temp animator to get adjusted duration value for swipe.
+                // This new value will be used to adjust animation times proportionally in the
+                // animator set. If we adjust animator set duration directly, all child animations
+                // will get the same animation time.
+                ValueAnimator tempAnimator = new ValueAnimator();
+                mFlingAnimationUtils.applyDismissing(tempAnimator, mCollapsedAmount, contentHeight,
+                        mSwipeUpVelocity, (contentHeight - mCollapsedAmount));
+
+                float durationAdjustment =
+                        (float) tempAnimator.getDuration() / COLLAPSE_DURATION_MS;
+
+                adjustAnimatorSetDuration(mCollapseAnimation, durationAdjustment);
+                mCollapseAnimation.setInterpolator(tempAnimator.getInterpolator());
+            }
+            mCollapseAnimation.start();
+        }
+    }
+
+    @Override
+    public void animateBackToExpanded() {
+        if (DEBUG_COLLAPSE_ANIMATOR) {
+            Log.d(TAG, "expandedView animate back to expanded");
+        }
+        BubbleExpandedView expandedView = mExpandedView;
+        if (expandedView == null) {
+            return;
+        }
+
+        expandedView.setAnimating(true);
+
+        mBackToExpandedAnimation = new SpringAnimation(this, COLLAPSE_HEIGHT_PROPERTY);
+        mBackToExpandedAnimation.setSpring(new SpringForce()
+                .setStiffness(SpringForce.STIFFNESS_LOW)
+                .setDampingRatio(SpringForce.DAMPING_RATIO_LOW_BOUNCY)
+        );
+        mBackToExpandedAnimation.addEndListener(new OneTimeEndListener() {
+            @Override
+            public void onAnimationEnd(DynamicAnimation animation, boolean canceled, float value,
+                    float velocity) {
+                super.onAnimationEnd(animation, canceled, value, velocity);
+                mNotifiedAboutThreshold = false;
+                mBackToExpandedAnimation = null;
+                expandedView.setAnimating(false);
+            }
+        });
+        mBackToExpandedAnimation.setStartValue(mCollapsedAmount);
+        mBackToExpandedAnimation.animateToFinalPosition(0);
+    }
+
+    @Override
+    public void animateForImeVisibilityChange(boolean visible) {
+        if (mExpandedView != null) {
+            if (mBottomClipAnim != null) {
+                mBottomClipAnim.cancel();
+            }
+            int clip = 0;
+            if (visible) {
+                // Clip the expanded view at the top of the IME view
+                clip = mExpandedView.getContentBottomOnScreen() - mPositioner.getImeTop();
+                // Don't allow negative clip value
+                clip = Math.max(clip, 0);
+            }
+            mBottomClipAnim = ObjectAnimator.ofInt(mExpandedView, BOTTOM_CLIP_PROPERTY, clip);
+            mBottomClipAnim.addListener(new AnimatorListenerAdapter() {
+                @Override
+                public void onAnimationEnd(Animator animation) {
+                    mBottomClipAnim = null;
+                }
+            });
+            mBottomClipAnim.start();
+        }
+    }
+
+    @Override
+    public void reset() {
+        if (DEBUG_COLLAPSE_ANIMATOR) {
+            Log.d(TAG, "reset expandedView collapsed state");
+        }
+        if (mExpandedView == null) {
+            return;
+        }
+        mExpandedView.setAnimating(false);
+
+        if (mCollapseAnimation != null) {
+            mCollapseAnimation.cancel();
+        }
+        if (mBackToExpandedAnimation != null) {
+            mBackToExpandedAnimation.cancel();
+        }
+        mExpandedView.setContentAlpha(1);
+        mExpandedView.setBackgroundAlpha(1);
+        mExpandedView.setManageButtonAlpha(1);
+        setCollapsedAmount(0);
+        mExpandedView.setBottomClip(0);
+        mExpandedView.movePointerBy(0, 0);
+        mCollapsedAmount = 0;
+        mDraggedAmount = 0;
+        mSwipeUpVelocity = 0;
+        mSwipeDownVelocity = 0;
+        mNotifiedAboutThreshold = false;
+    }
+
+    private float getCollapsedAmount() {
+        return mCollapsedAmount;
+    }
+
+    private void setCollapsedAmount(float collapsed) {
+        if (mCollapsedAmount != collapsed) {
+            float previous = mCollapsedAmount;
+            mCollapsedAmount = collapsed;
+
+            if (mExpandedView != null) {
+                if (previous == 0) {
+                    // View was not collapsed before. Apply z order change
+                    mExpandedView.setSurfaceZOrderedOnTop(true);
+                    mExpandedView.setAnimating(true);
+                }
+
+                mExpandedView.setTopClip((int) mCollapsedAmount);
+                // Move up with translationY. Use negative collapsed value
+                mExpandedView.setContentTranslationY(-mCollapsedAmount);
+                mExpandedView.setManageButtonTranslationY(-mCollapsedAmount);
+
+                if (mCollapsedAmount == 0) {
+                    // View is no longer collapsed. Revert z order change
+                    mExpandedView.setSurfaceZOrderedOnTop(false);
+                    mExpandedView.setAnimating(false);
+                }
+            }
+        }
+    }
+
+    private boolean isPastCollapseThreshold() {
+        if (mExpandedView != null) {
+            return mDraggedAmount > mExpandedView.getContentHeight() * COLLAPSE_THRESHOLD;
+        }
+        return false;
+    }
+
+    private AnimatorSet createCollapseAnimation(BubbleExpandedView expandedView,
+            Runnable startStackCollapse, Runnable after) {
+        List<Animator> animatorList = new ArrayList<>();
+        animatorList.add(createHeightAnimation(expandedView));
+        animatorList.add(createManageButtonAnimation());
+        ObjectAnimator contentAlphaAnimation = createContentAlphaAnimation();
+        final boolean[] notified = {false};
+        contentAlphaAnimation.addUpdateListener(animation -> {
+            if (!notified[0] && animation.getAnimatedFraction() > STACK_COLLAPSE_THRESHOLD) {
+                notified[0] = true;
+                // Notify bubbles that they can start moving back to the collapsed position
+                startStackCollapse.run();
+            }
+        });
+        animatorList.add(contentAlphaAnimation);
+        animatorList.add(createBackgroundAlphaAnimation());
+
+        AnimatorSet animatorSet = new AnimatorSet();
+        animatorSet.addListener(new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                after.run();
+            }
+        });
+        animatorSet.playTogether(animatorList);
+        return animatorSet;
+    }
+
+    private ValueAnimator createHeightAnimation(BubbleExpandedView expandedView) {
+        ValueAnimator animator = ValueAnimator.ofInt((int) mCollapsedAmount,
+                expandedView.getContentHeight());
+        animator.setInterpolator(Interpolators.EMPHASIZED_ACCELERATE);
+        animator.setDuration(COLLAPSE_DURATION_MS);
+        animator.addUpdateListener(anim -> setCollapsedAmount((int) anim.getAnimatedValue()));
+        return animator;
+    }
+
+    private ObjectAnimator createManageButtonAnimation() {
+        ObjectAnimator animator = ObjectAnimator.ofFloat(mExpandedView, MANAGE_BUTTON_ALPHA, 0f);
+        animator.setDuration(MANAGE_BUTTON_ANIM_DURATION_MS);
+        animator.setInterpolator(Interpolators.LINEAR);
+        return animator;
+    }
+
+    private ObjectAnimator createContentAlphaAnimation() {
+        ObjectAnimator animator = ObjectAnimator.ofFloat(mExpandedView, CONTENT_ALPHA, 0f);
+        animator.setDuration(CONTENT_OPACITY_ANIM_DURATION_MS);
+        animator.setInterpolator(Interpolators.LINEAR);
+        animator.setStartDelay(CONTENT_OPACITY_ANIM_DELAY_MS);
+        return animator;
+    }
+
+    private ObjectAnimator createBackgroundAlphaAnimation() {
+        ObjectAnimator animator = ObjectAnimator.ofFloat(mExpandedView, BACKGROUND_ALPHA, 0f);
+        animator.setDuration(BACKGROUND_OPACITY_ANIM_DURATION_MS);
+        animator.setInterpolator(Interpolators.LINEAR);
+        animator.setStartDelay(BACKGROUND_OPACITY_ANIM_DELAY_MS);
+        return animator;
+    }
+
+    @SuppressLint("MissingPermission")
+    private void vibrateIfEnabled() {
+        if (mExpandedView != null) {
+            mExpandedView.performHapticFeedback(HapticFeedbackConstants.DRAG_CROSSING);
+        }
+    }
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/animation/ExpandedViewAnimationControllerStub.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/animation/ExpandedViewAnimationControllerStub.java
new file mode 100644
index 0000000..bb8a3aa
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/animation/ExpandedViewAnimationControllerStub.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.bubbles.animation;
+
+import com.android.wm.shell.bubbles.BubbleExpandedView;
+
+/**
+ * Stub implementation {@link ExpandedViewAnimationController} that does not animate the
+ * {@link BubbleExpandedView}
+ */
+public class ExpandedViewAnimationControllerStub implements ExpandedViewAnimationController {
+    @Override
+    public void setExpandedView(BubbleExpandedView expandedView) {
+    }
+
+    @Override
+    public void updateDrag(float distance) {
+    }
+
+    @Override
+    public void setSwipeVelocity(float velocity) {
+    }
+
+    @Override
+    public boolean shouldCollapse() {
+        return false;
+    }
+
+    @Override
+    public void animateCollapse(Runnable startStackCollapse, Runnable after) {
+    }
+
+    @Override
+    public void animateBackToExpanded() {
+    }
+
+    @Override
+    public void animateForImeVisibilityChange(boolean visible) {
+    }
+
+    @Override
+    public void reset() {
+    }
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/animation/OverScroll.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/animation/OverScroll.java
new file mode 100644
index 0000000..d4e76ed
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/animation/OverScroll.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.bubbles.animation;
+
+/**
+ * Utility methods for overscroll damping and related effect.
+ *
+ * Copied from packages/apps/Launcher3/src/com/android/launcher3/touch/OverScroll.java
+ */
+public class OverScroll {
+
+    private static final float OVERSCROLL_DAMP_FACTOR = 0.07f;
+
+    /**
+     * This curve determines how the effect of scrolling over the limits of the page diminishes
+     * as the user pulls further and further from the bounds
+     *
+     * @param f The percentage of how much the user has overscrolled.
+     * @return A transformed percentage based on the influence curve.
+     */
+    private static float overScrollInfluenceCurve(float f) {
+        f -= 1.0f;
+        return f * f * f + 1.0f;
+    }
+
+    /**
+     * @param amount The original amount overscrolled.
+     * @param max The maximum amount that the View can overscroll.
+     * @return The dampened overscroll amount.
+     */
+    public static int dampedScroll(float amount, int max) {
+        if (Float.compare(amount, 0) == 0) return 0;
+
+        float f = amount / max;
+        f = f / (Math.abs(f)) * (overScrollInfluenceCurve(Math.abs(f)));
+
+        // Clamp this factor, f, to -1 < f < 1
+        if (Math.abs(f) >= 1) {
+            f /= Math.abs(f);
+        }
+
+        return Math.round(OVERSCROLL_DAMP_FACTOR * f * max);
+    }
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayChangeController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayChangeController.java
index c32733d..ae1f433 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayChangeController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayChangeController.java
@@ -16,16 +16,19 @@
 
 package com.android.wm.shell.common;
 
+import android.annotation.Nullable;
 import android.os.RemoteException;
 import android.util.Slog;
-import android.view.IDisplayWindowRotationCallback;
-import android.view.IDisplayWindowRotationController;
+import android.view.IDisplayChangeWindowCallback;
+import android.view.IDisplayChangeWindowController;
 import android.view.IWindowManager;
+import android.window.DisplayAreaInfo;
 import android.window.WindowContainerTransaction;
 
 import androidx.annotation.BinderThread;
 
 import com.android.wm.shell.common.annotations.ShellMainThread;
+import com.android.wm.shell.sysui.ShellInit;
 
 import java.util.concurrent.CopyOnWriteArrayList;
 
@@ -40,17 +43,22 @@
 
     private final ShellExecutor mMainExecutor;
     private final IWindowManager mWmService;
-    private final IDisplayWindowRotationController mControllerImpl;
+    private final IDisplayChangeWindowController mControllerImpl;
 
-    private final CopyOnWriteArrayList<OnDisplayChangingListener> mRotationListener =
+    private final CopyOnWriteArrayList<OnDisplayChangingListener> mDisplayChangeListener =
             new CopyOnWriteArrayList<>();
 
-    public DisplayChangeController(IWindowManager wmService, ShellExecutor mainExecutor) {
+    public DisplayChangeController(IWindowManager wmService, ShellInit shellInit,
+            ShellExecutor mainExecutor) {
         mMainExecutor = mainExecutor;
         mWmService = wmService;
-        mControllerImpl = new DisplayWindowRotationControllerImpl();
+        mControllerImpl = new DisplayChangeWindowControllerImpl();
+        shellInit.addInitCallback(this::onInit, this);
+    }
+
+    private void onInit() {
         try {
-            mWmService.setDisplayWindowRotationController(mControllerImpl);
+            mWmService.setDisplayChangeWindowController(mControllerImpl);
         } catch (RemoteException e) {
             throw new RuntimeException("Unable to register rotation controller");
         }
@@ -59,63 +67,64 @@
     /**
      * Adds a display rotation controller.
      */
-    public void addRotationListener(OnDisplayChangingListener listener) {
-        mRotationListener.add(listener);
+    public void addDisplayChangeListener(OnDisplayChangingListener listener) {
+        mDisplayChangeListener.add(listener);
     }
 
     /**
      * Removes a display rotation controller.
      */
-    public void removeRotationListener(OnDisplayChangingListener listener) {
-        mRotationListener.remove(listener);
+    public void removeDisplayChangeListener(OnDisplayChangingListener listener) {
+        mDisplayChangeListener.remove(listener);
     }
 
-    /** Query all listeners for changes that should happen on rotation. */
-    public void dispatchOnRotateDisplay(WindowContainerTransaction outWct, int displayId,
-            final int fromRotation, final int toRotation) {
-        for (OnDisplayChangingListener c : mRotationListener) {
-            c.onRotateDisplay(displayId, fromRotation, toRotation, outWct);
+    /** Query all listeners for changes that should happen on display change. */
+    public void dispatchOnDisplayChange(WindowContainerTransaction outWct, int displayId,
+            int fromRotation, int toRotation, DisplayAreaInfo newDisplayAreaInfo) {
+        for (OnDisplayChangingListener c : mDisplayChangeListener) {
+            c.onDisplayChange(displayId, fromRotation, toRotation, newDisplayAreaInfo, outWct);
         }
     }
 
-    private void onRotateDisplay(int displayId, final int fromRotation, final int toRotation,
-            IDisplayWindowRotationCallback callback) {
+    private void onDisplayChange(int displayId, int fromRotation, int toRotation,
+            DisplayAreaInfo newDisplayAreaInfo, IDisplayChangeWindowCallback callback) {
         WindowContainerTransaction t = new WindowContainerTransaction();
-        dispatchOnRotateDisplay(t, displayId, fromRotation, toRotation);
+        dispatchOnDisplayChange(t, displayId, fromRotation, toRotation, newDisplayAreaInfo);
         try {
-            callback.continueRotateDisplay(toRotation, t);
+            callback.continueDisplayChange(t);
         } catch (RemoteException e) {
-            Slog.e(TAG, "Failed to continue rotation", e);
+            Slog.e(TAG, "Failed to continue handling display change", e);
         }
     }
 
     @BinderThread
-    private class DisplayWindowRotationControllerImpl
-            extends IDisplayWindowRotationController.Stub {
+    private class DisplayChangeWindowControllerImpl
+            extends IDisplayChangeWindowController.Stub {
         @Override
-        public void onRotateDisplay(int displayId, final int fromRotation,
-                final int toRotation, IDisplayWindowRotationCallback callback) {
-            mMainExecutor.execute(() -> {
-                DisplayChangeController.this.onRotateDisplay(displayId, fromRotation, toRotation,
-                        callback);
-            });
+        public void onDisplayChange(int displayId, int fromRotation, int toRotation,
+                DisplayAreaInfo newDisplayAreaInfo, IDisplayChangeWindowCallback callback) {
+            mMainExecutor.execute(() -> DisplayChangeController.this
+                    .onDisplayChange(displayId, fromRotation, toRotation,
+                            newDisplayAreaInfo, callback));
         }
     }
 
     /**
      * Give a listener a chance to queue up configuration changes to execute as part of a
-     * display rotation. The contents of {@link #onRotateDisplay} must run synchronously.
+     * display rotation. The contents of {@link #onDisplayChange} must run synchronously.
      */
     @ShellMainThread
     public interface OnDisplayChangingListener {
         /**
-         * Called before the display is rotated. Contents of this method must run synchronously.
-         * @param displayId Id of display that is rotating.
-         * @param fromRotation starting rotation of the display.
-         * @param toRotation target rotation of the display (after rotating).
+         * Called before the display size has changed.
+         * Contents of this method must run synchronously.
+         * @param displayId display id of the display that is under the change
+         * @param fromRotation rotation before the change
+         * @param toRotation rotation after the change
+         * @param newDisplayAreaInfo display area info after applying the update
          * @param t A task transaction to populate.
          */
-        void onRotateDisplay(int displayId, int fromRotation, int toRotation,
-                WindowContainerTransaction t);
+        void onDisplayChange(int displayId, int fromRotation, int toRotation,
+                @Nullable DisplayAreaInfo newDisplayAreaInfo, WindowContainerTransaction t);
     }
 }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayController.java
index 4ba32e9..f07ea75 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayController.java
@@ -34,6 +34,7 @@
 
 import com.android.wm.shell.common.DisplayChangeController.OnDisplayChangingListener;
 import com.android.wm.shell.common.annotations.ShellMainThread;
+import com.android.wm.shell.sysui.ShellInit;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -57,19 +58,23 @@
     private final SparseArray<DisplayRecord> mDisplays = new SparseArray<>();
     private final ArrayList<OnDisplaysChangedListener> mDisplayChangedListeners = new ArrayList<>();
 
-    public DisplayController(Context context, IWindowManager wmService,
+    public DisplayController(Context context, IWindowManager wmService, ShellInit shellInit,
             ShellExecutor mainExecutor) {
         mMainExecutor = mainExecutor;
         mContext = context;
         mWmService = wmService;
-        mChangeController = new DisplayChangeController(mWmService, mainExecutor);
+        // TODO: Inject this instead
+        mChangeController = new DisplayChangeController(mWmService, shellInit, mainExecutor);
         mDisplayContainerListener = new DisplayWindowListenerImpl();
+        // Note, add this after DisplaceChangeController is constructed to ensure that is
+        // initialized first
+        shellInit.addInitCallback(this::onInit, this);
     }
 
     /**
      * Initializes the window listener.
      */
-    public void initialize() {
+    public void onInit() {
         try {
             int[] displayIds = mWmService.registerDisplayWindowListener(mDisplayContainerListener);
             for (int i = 0; i < displayIds.length; i++) {
@@ -156,14 +161,14 @@
      * Adds a display rotation controller.
      */
     public void addDisplayChangingController(OnDisplayChangingListener controller) {
-        mChangeController.addRotationListener(controller);
+        mChangeController.addDisplayChangeListener(controller);
     }
 
     /**
      * Removes a display rotation controller.
      */
     public void removeDisplayChangingController(OnDisplayChangingListener controller) {
-        mChangeController.removeRotationListener(controller);
+        mChangeController.removeDisplayChangeListener(controller);
     }
 
     private void onDisplayAdded(int displayId) {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java
index 6a2acf4..266cf29 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java
@@ -20,6 +20,7 @@
 import android.animation.AnimatorListenerAdapter;
 import android.animation.ValueAnimator;
 import android.annotation.IntDef;
+import android.content.ComponentName;
 import android.content.Context;
 import android.content.res.Configuration;
 import android.graphics.Point;
@@ -43,6 +44,7 @@
 import androidx.annotation.VisibleForTesting;
 
 import com.android.internal.view.IInputMethodManager;
+import com.android.wm.shell.sysui.ShellInit;
 
 import java.util.ArrayList;
 import java.util.concurrent.Executor;
@@ -73,18 +75,24 @@
     private final ArrayList<ImePositionProcessor> mPositionProcessors = new ArrayList<>();
 
 
-    public DisplayImeController(IWindowManager wmService, DisplayController displayController,
+    public DisplayImeController(IWindowManager wmService,
+            ShellInit shellInit,
+            DisplayController displayController,
             DisplayInsetsController displayInsetsController,
-            Executor mainExecutor, TransactionPool transactionPool) {
+            TransactionPool transactionPool,
+            Executor mainExecutor) {
         mWmService = wmService;
         mDisplayController = displayController;
         mDisplayInsetsController = displayInsetsController;
         mMainExecutor = mainExecutor;
         mTransactionPool = transactionPool;
+        shellInit.addInitCallback(this::onInit, this);
     }
 
-    /** Starts monitor displays changes and set insets controller for each displays. */
-    public void startMonitorDisplays() {
+    /**
+     * Starts monitor displays changes and set insets controller for each displays.
+     */
+    public void onInit() {
         mDisplayController.addDisplayWindowListener(this);
     }
 
@@ -324,7 +332,7 @@
         }
 
         @Override
-        public void topFocusedWindowChanged(String packageName,
+        public void topFocusedWindowChanged(ComponentName component,
                 InsetsVisibilities requestedVisibilities) {
             // Do nothing
         }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayInsetsController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayInsetsController.java
index b670544..90a01f8 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayInsetsController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayInsetsController.java
@@ -16,6 +16,7 @@
 
 package com.android.wm.shell.common;
 
+import android.content.ComponentName;
 import android.os.RemoteException;
 import android.util.Slog;
 import android.util.SparseArray;
@@ -28,6 +29,7 @@
 import androidx.annotation.BinderThread;
 
 import com.android.wm.shell.common.annotations.ShellMainThread;
+import com.android.wm.shell.sysui.ShellInit;
 
 import java.util.concurrent.CopyOnWriteArrayList;
 
@@ -44,17 +46,20 @@
     private final SparseArray<CopyOnWriteArrayList<OnInsetsChangedListener>> mListeners =
             new SparseArray<>();
 
-    public DisplayInsetsController(IWindowManager wmService, DisplayController displayController,
+    public DisplayInsetsController(IWindowManager wmService,
+            ShellInit shellInit,
+            DisplayController displayController,
             ShellExecutor mainExecutor) {
         mWmService = wmService;
         mDisplayController = displayController;
         mMainExecutor = mainExecutor;
+        shellInit.addInitCallback(this::onInit, this);
     }
 
     /**
      * Starts listening for insets for each display.
      **/
-    public void initialize() {
+    public void onInit() {
         mDisplayController.addDisplayWindowListener(this);
     }
 
@@ -171,14 +176,14 @@
             }
         }
 
-        private void topFocusedWindowChanged(String packageName,
+        private void topFocusedWindowChanged(ComponentName component,
                 InsetsVisibilities requestedVisibilities) {
             CopyOnWriteArrayList<OnInsetsChangedListener> listeners = mListeners.get(mDisplayId);
             if (listeners == null) {
                 return;
             }
             for (OnInsetsChangedListener listener : listeners) {
-                listener.topFocusedWindowChanged(packageName, requestedVisibilities);
+                listener.topFocusedWindowChanged(component, requestedVisibilities);
             }
         }
 
@@ -186,10 +191,10 @@
         private class DisplayWindowInsetsControllerImpl
                 extends IDisplayWindowInsetsController.Stub {
             @Override
-            public void topFocusedWindowChanged(String packageName,
+            public void topFocusedWindowChanged(ComponentName component,
                     InsetsVisibilities requestedVisibilities) throws RemoteException {
                 mMainExecutor.execute(() -> {
-                    PerDisplay.this.topFocusedWindowChanged(packageName, requestedVisibilities);
+                    PerDisplay.this.topFocusedWindowChanged(component, requestedVisibilities);
                 });
             }
 
@@ -234,10 +239,10 @@
         /**
          * Called when top focused window changes to determine whether or not to take over insets
          * control. Won't be called if config_remoteInsetsControllerControlsSystemBars is false.
-         * @param packageName The name of the package that is open in the top focussed window.
+         * @param component The application component that is open in the top focussed window.
          * @param requestedVisibilities The insets visibilities requested by the focussed window.
          */
-        default void topFocusedWindowChanged(String packageName,
+        default void topFocusedWindowChanged(ComponentName component,
                 InsetsVisibilities requestedVisibilities) {}
 
         /**
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/InteractionJankMonitorUtils.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/InteractionJankMonitorUtils.java
index fd3aa05..ec344d3 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/InteractionJankMonitorUtils.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/InteractionJankMonitorUtils.java
@@ -18,7 +18,9 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.content.Context;
 import android.text.TextUtils;
+import android.view.SurfaceControl;
 import android.view.View;
 
 import com.android.internal.jank.InteractionJankMonitor;
@@ -44,6 +46,24 @@
     }
 
     /**
+     * Begin a trace session.
+     *
+     * @param cujType the specific {@link InteractionJankMonitor.CujType}.
+     * @param context the context
+     * @param surface the surface to trace
+     * @param tag the tag to distinguish different flow of same type CUJ.
+     */
+    public static void beginTracing(@InteractionJankMonitor.CujType int cujType,
+            @NonNull Context context, @NonNull SurfaceControl surface, @Nullable String tag) {
+        final InteractionJankMonitor.Configuration.Builder builder =
+                InteractionJankMonitor.Configuration.Builder.withSurface(cujType, context, surface);
+        if (!TextUtils.isEmpty(tag)) {
+            builder.setTag(tag);
+        }
+        InteractionJankMonitor.getInstance().begin(builder);
+    }
+
+    /**
      * End a trace session.
      *
      * @param cujType the specific {@link InteractionJankMonitor.CujType}.
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerView.java
index 6305959..8bc16bc 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerView.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/DividerView.java
@@ -206,12 +206,12 @@
         mSplitLayout = layout;
         mSplitWindowManager = splitWindowManager;
         mViewHost = viewHost;
-        mDividerBounds.set(layout.getDividerBounds());
+        layout.getDividerBounds(mDividerBounds);
         onInsetsChanged(insetsState, false /* animate */);
     }
 
     void onInsetsChanged(InsetsState insetsState, boolean animate) {
-        mTempRect.set(mSplitLayout.getDividerBounds());
+        mSplitLayout.getDividerBounds(mTempRect);
         final InsetsSource taskBarInsetsSource =
                 insetsState.getSource(InsetsState.ITYPE_EXTRA_NAVIGATION_BAR);
         // Only insets the divider bar with task bar when it's expanded so that the rounded corners
@@ -286,6 +286,7 @@
                 setTouching();
                 mStartPos = touchPos;
                 mMoving = false;
+                mSplitLayout.onStartDragging();
                 break;
             case MotionEvent.ACTION_MOVE:
                 mVelocityTracker.addMovement(event);
@@ -301,7 +302,10 @@
             case MotionEvent.ACTION_UP:
             case MotionEvent.ACTION_CANCEL:
                 releaseTouching();
-                if (!mMoving) break;
+                if (!mMoving) {
+                    mSplitLayout.onDraggingCancelled();
+                    break;
+                }
 
                 mVelocityTracker.addMovement(event);
                 mVelocityTracker.computeCurrentVelocity(1000 /* units */);
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 484294a..74f8bf9 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
@@ -50,12 +50,15 @@
 import com.android.wm.shell.R;
 import com.android.wm.shell.common.SurfaceUtils;
 
+import java.util.function.Consumer;
+
 /**
  * Handles split decor like showing resizing hint for a specific split.
  */
 public class SplitDecorManager extends WindowlessWindowManager {
     private static final String TAG = SplitDecorManager.class.getSimpleName();
     private static final String RESIZING_BACKGROUND_SURFACE_NAME = "ResizingBackground";
+    private static final String GAP_BACKGROUND_SURFACE_NAME = "GapBackground";
     private static final long FADE_DURATION = 133;
 
     private final IconProvider mIconProvider;
@@ -67,6 +70,7 @@
     private SurfaceControl mHostLeash;
     private SurfaceControl mIconLeash;
     private SurfaceControl mBackgroundLeash;
+    private SurfaceControl mGapBackgroundLeash;
 
     private boolean mShown;
     private boolean mIsResizing;
@@ -141,6 +145,10 @@
             t.remove(mBackgroundLeash);
             mBackgroundLeash = null;
         }
+        if (mGapBackgroundLeash != null) {
+            t.remove(mGapBackgroundLeash);
+            mGapBackgroundLeash = null;
+        }
         mHostLeash = null;
         mIcon = null;
         mResizingIconView = null;
@@ -150,7 +158,7 @@
 
     /** Showing resizing hint. */
     public void onResizing(ActivityManager.RunningTaskInfo resizingTask, Rect newBounds,
-            SurfaceControl.Transaction t) {
+            Rect sideBounds, SurfaceControl.Transaction t) {
         if (mResizingIconView == null) {
             return;
         }
@@ -176,6 +184,19 @@
                     .setLayer(mBackgroundLeash, Integer.MAX_VALUE - 1);
         }
 
+        if (mGapBackgroundLeash == null) {
+            final boolean isLandscape = newBounds.height() == sideBounds.height();
+            final int left = isLandscape ? mBounds.width() : 0;
+            final int top = isLandscape ? 0 : mBounds.height();
+            mGapBackgroundLeash = SurfaceUtils.makeColorLayer(mHostLeash,
+                    GAP_BACKGROUND_SURFACE_NAME, mSurfaceSession);
+            // Fill up another side bounds area.
+            t.setColor(mGapBackgroundLeash, getResizingBackgroundColor(resizingTask))
+                    .setLayer(mGapBackgroundLeash, Integer.MAX_VALUE - 2)
+                    .setPosition(mGapBackgroundLeash, left, top)
+                    .setWindowCrop(mGapBackgroundLeash, sideBounds.width(), sideBounds.height());
+        }
+
         if (mIcon == null && resizingTask.topActivityInfo != null) {
             mIcon = mIconProvider.getIcon(resizingTask.topActivityInfo);
             mResizingIconView.setImageDrawable(mIcon);
@@ -193,7 +214,7 @@
                 newBounds.height() / 2 - mIconSize / 2);
 
         if (animate) {
-            startFadeAnimation(show, false /* isResized */);
+            startFadeAnimation(show, null /* finishedConsumer */);
             mShown = show;
         }
     }
@@ -224,14 +245,29 @@
             mFadeAnimator.cancel();
         }
         if (mShown) {
-            startFadeAnimation(false /* show */, true /* isResized */);
+            fadeOutDecor(null /* finishedCallback */);
         } else {
             // Decor surface is hidden so release it directly.
             releaseDecor(t);
         }
     }
 
-    private void startFadeAnimation(boolean show, boolean isResized) {
+    /** Fade-out decor surface with animation end callback, if decor is hidden, run the callback
+     * directly. */
+    public void fadeOutDecor(Runnable finishedCallback) {
+        if (mShown) {
+            startFadeAnimation(false /* show */, transaction -> {
+                releaseDecor(transaction);
+                if (finishedCallback != null) finishedCallback.run();
+            });
+            mShown = false;
+        } else {
+            if (finishedCallback != null) finishedCallback.run();
+        }
+    }
+
+    private void startFadeAnimation(boolean show,
+            Consumer<SurfaceControl.Transaction> finishedConsumer) {
         final SurfaceControl.Transaction animT = new SurfaceControl.Transaction();
         mFadeAnimator = ValueAnimator.ofFloat(0f, 1f);
         mFadeAnimator.setDuration(FADE_DURATION);
@@ -249,7 +285,9 @@
             @Override
             public void onAnimationStart(@NonNull Animator animation) {
                 if (show) {
-                    animT.show(mBackgroundLeash).show(mIconLeash).apply();
+                    animT.show(mBackgroundLeash).show(mIconLeash).show(mGapBackgroundLeash).apply();
+                } else {
+                    animT.hide(mGapBackgroundLeash).apply();
                 }
             }
 
@@ -263,8 +301,8 @@
                         animT.hide(mIconLeash);
                     }
                 }
-                if (isResized) {
-                    releaseDecor(animT);
+                if (finishedConsumer != null) {
+                    finishedConsumer.accept(animT);
                 }
                 animT.apply();
                 animT.close();
@@ -280,6 +318,11 @@
             mBackgroundLeash = null;
         }
 
+        if (mGapBackgroundLeash != null) {
+            t.remove(mGapBackgroundLeash);
+            mGapBackgroundLeash = null;
+        }
+
         if (mIcon != null) {
             mResizingIconView.setVisibility(View.GONE);
             mResizingIconView.setImageDrawable(null);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java
index bae2357..85c8ebf 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java
@@ -24,6 +24,7 @@
 import static android.view.WindowManager.DOCKED_RIGHT;
 import static android.view.WindowManager.DOCKED_TOP;
 
+import static com.android.internal.jank.InteractionJankMonitor.CUJ_SPLIT_SCREEN_RESIZE;
 import static com.android.internal.policy.DividerSnapAlgorithm.SnapTarget.FLAG_DISMISS_END;
 import static com.android.internal.policy.DividerSnapAlgorithm.SnapTarget.FLAG_DISMISS_START;
 import static com.android.wm.shell.animation.Interpolators.DIM_INTERPOLATOR;
@@ -31,9 +32,11 @@
 import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_BOTTOM_OR_RIGHT;
 import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_TOP_OR_LEFT;
 import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_UNDEFINED;
+import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_DRAG_DIVIDER;
 
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
+import android.animation.AnimatorSet;
 import android.animation.ValueAnimator;
 import android.annotation.NonNull;
 import android.app.ActivityManager;
@@ -55,7 +58,6 @@
 import androidx.annotation.Nullable;
 
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.jank.InteractionJankMonitor;
 import com.android.internal.policy.DividerSnapAlgorithm;
 import com.android.internal.policy.DockedDividerUtils;
 import com.android.wm.shell.R;
@@ -78,6 +80,8 @@
     public static final int PARALLAX_DISMISSING = 1;
     public static final int PARALLAX_ALIGN_CENTER = 2;
 
+    private static final int FLING_ANIMATION_DURATION = 250;
+
     private final int mDividerWindowWidth;
     private final int mDividerInsets;
     private final int mDividerSize;
@@ -85,7 +89,9 @@
     private final Rect mTempRect = new Rect();
     private final Rect mRootBounds = new Rect();
     private final Rect mDividerBounds = new Rect();
+    // Bounds1 final position should be always at top or left
     private final Rect mBounds1 = new Rect();
+    // Bounds2 final position should be always at bottom or right
     private final Rect mBounds2 = new Rect();
     private final Rect mWinBounds1 = new Rect();
     private final Rect mWinBounds2 = new Rect();
@@ -178,6 +184,11 @@
         return outBounds;
     }
 
+    /** Gets root bounds of the whole split layout */
+    public Rect getRootBounds() {
+        return new Rect(mRootBounds);
+    }
+
     /** Gets bounds of divider window with screen based coordinate. */
     public Rect getDividerBounds() {
         return new Rect(mDividerBounds);
@@ -190,6 +201,44 @@
         return outBounds;
     }
 
+    /** Gets bounds of the primary split with screen based coordinate on the param Rect. */
+    public void getBounds1(Rect rect) {
+        rect.set(mBounds1);
+    }
+
+    /** Gets bounds of the primary split with parent based coordinate on the param Rect. */
+    public void getRefBounds1(Rect rect) {
+        getBounds1(rect);
+        rect.offset(-mRootBounds.left, -mRootBounds.top);
+    }
+
+    /** Gets bounds of the secondary split with screen based coordinate on the param Rect. */
+    public void getBounds2(Rect rect) {
+        rect.set(mBounds2);
+    }
+
+    /** Gets bounds of the secondary split with parent based coordinate on the param Rect. */
+    public void getRefBounds2(Rect rect) {
+        getBounds2(rect);
+        rect.offset(-mRootBounds.left, -mRootBounds.top);
+    }
+
+    /** Gets root bounds of the whole split layout on the param Rect. */
+    public void getRootBounds(Rect rect) {
+        rect.set(mRootBounds);
+    }
+
+    /** Gets bounds of divider window with screen based coordinate on the param Rect. */
+    public void getDividerBounds(Rect rect) {
+        rect.set(mDividerBounds);
+    }
+
+    /** Gets bounds of divider window with parent based coordinate on the param Rect. */
+    public void getRefDividerBounds(Rect rect) {
+        getDividerBounds(rect);
+        rect.offset(-mRootBounds.left, -mRootBounds.top);
+    }
+
     /** Returns leash of the current divider bar. */
     @Nullable
     public SurfaceControl getDividerLeash() {
@@ -270,28 +319,35 @@
         updateBounds(mDividePosition);
     }
 
-    /** Updates recording bounds of divider window and both of the splits. */
     private void updateBounds(int position) {
-        mDividerBounds.set(mRootBounds);
-        mBounds1.set(mRootBounds);
-        mBounds2.set(mRootBounds);
+        updateBounds(position, mBounds1, mBounds2, mDividerBounds, true /* setEffectBounds */);
+    }
+
+    /** Updates recording bounds of divider window and both of the splits. */
+    private void updateBounds(int position, Rect bounds1, Rect bounds2, Rect dividerBounds,
+            boolean setEffectBounds) {
+        dividerBounds.set(mRootBounds);
+        bounds1.set(mRootBounds);
+        bounds2.set(mRootBounds);
         final boolean isLandscape = isLandscape(mRootBounds);
         if (isLandscape) {
             position += mRootBounds.left;
-            mDividerBounds.left = position - mDividerInsets;
-            mDividerBounds.right = mDividerBounds.left + mDividerWindowWidth;
-            mBounds1.right = position;
-            mBounds2.left = mBounds1.right + mDividerSize;
+            dividerBounds.left = position - mDividerInsets;
+            dividerBounds.right = dividerBounds.left + mDividerWindowWidth;
+            bounds1.right = position;
+            bounds2.left = bounds1.right + mDividerSize;
         } else {
             position += mRootBounds.top;
-            mDividerBounds.top = position - mDividerInsets;
-            mDividerBounds.bottom = mDividerBounds.top + mDividerWindowWidth;
-            mBounds1.bottom = position;
-            mBounds2.top = mBounds1.bottom + mDividerSize;
+            dividerBounds.top = position - mDividerInsets;
+            dividerBounds.bottom = dividerBounds.top + mDividerWindowWidth;
+            bounds1.bottom = position;
+            bounds2.top = bounds1.bottom + mDividerSize;
         }
-        DockedDividerUtils.sanitizeStackBounds(mBounds1, true /** topLeft */);
-        DockedDividerUtils.sanitizeStackBounds(mBounds2, false /** topLeft */);
-        mSurfaceEffectPolicy.applyDividerPosition(position, isLandscape);
+        DockedDividerUtils.sanitizeStackBounds(bounds1, true /** topLeft */);
+        DockedDividerUtils.sanitizeStackBounds(bounds2, false /** topLeft */);
+        if (setEffectBounds) {
+            mSurfaceEffectPolicy.applyDividerPosition(position, isLandscape);
+        }
     }
 
     /** Inflates {@link DividerView} on the root surface. */
@@ -394,11 +450,13 @@
         switch (snapTarget.flag) {
             case FLAG_DISMISS_START:
                 flingDividePosition(currentPosition, snapTarget.position,
-                        () -> mSplitLayoutHandler.onSnappedToDismiss(false /* bottomOrRight */));
+                        () -> mSplitLayoutHandler.onSnappedToDismiss(false /* bottomOrRight */,
+                                EXIT_REASON_DRAG_DIVIDER));
                 break;
             case FLAG_DISMISS_END:
                 flingDividePosition(currentPosition, snapTarget.position,
-                        () -> mSplitLayoutHandler.onSnappedToDismiss(true /* bottomOrRight */));
+                        () -> mSplitLayoutHandler.onSnappedToDismiss(true /* bottomOrRight */,
+                                EXIT_REASON_DRAG_DIVIDER));
                 break;
             default:
                 flingDividePosition(currentPosition, snapTarget.position,
@@ -407,6 +465,15 @@
         }
     }
 
+    void onStartDragging() {
+        InteractionJankMonitorUtils.beginTracing(CUJ_SPLIT_SCREEN_RESIZE, mContext,
+                getDividerLeash(), null /* tag */);
+    }
+
+    void onDraggingCancelled() {
+        InteractionJankMonitorUtils.cancelTracing(CUJ_SPLIT_SCREEN_RESIZE);
+    }
+
     void onDoubleTappedDivider() {
         mSplitLayoutHandler.onDoubleTappedDivider();
     }
@@ -423,28 +490,48 @@
     private DividerSnapAlgorithm getSnapAlgorithm(Context context, Rect rootBounds,
             @Nullable Rect stableInsets) {
         final boolean isLandscape = isLandscape(rootBounds);
+        final Rect insets = stableInsets != null ? stableInsets : getDisplayInsets(context);
+
+        // Make split axis insets value same as the larger one to avoid bounds1 and bounds2
+        // have difference after split switching for solving issues on non-resizable app case.
+        if (isLandscape) {
+            final int largerInsets = Math.max(insets.left, insets.right);
+            insets.set(largerInsets, insets.top, largerInsets, insets.bottom);
+        } else {
+            final int largerInsets = Math.max(insets.top, insets.bottom);
+            insets.set(insets.left, largerInsets, insets.right, largerInsets);
+        }
+
         return new DividerSnapAlgorithm(
                 context.getResources(),
                 rootBounds.width(),
                 rootBounds.height(),
                 mDividerSize,
                 !isLandscape,
-                stableInsets != null ? stableInsets : getDisplayInsets(context),
+                insets,
                 isLandscape ? DOCKED_LEFT : DOCKED_TOP /* dockSide */);
     }
 
+    /** Fling divider from current position to end or start position then exit */
+    public void flingDividerToDismiss(boolean toEnd, int reason) {
+        final int target = toEnd ? mDividerSnapAlgorithm.getDismissEndTarget().position
+                : mDividerSnapAlgorithm.getDismissStartTarget().position;
+        flingDividePosition(getDividePosition(), target,
+                () -> mSplitLayoutHandler.onSnappedToDismiss(toEnd, reason));
+    }
+
     @VisibleForTesting
     void flingDividePosition(int from, int to, @Nullable Runnable flingFinishedCallback) {
         if (from == to) {
             // No animation run, still callback to stop resizing.
             mSplitLayoutHandler.onLayoutSizeChanged(this);
+            InteractionJankMonitorUtils.endTracing(
+                    CUJ_SPLIT_SCREEN_RESIZE);
             return;
         }
-        InteractionJankMonitorUtils.beginTracing(InteractionJankMonitor.CUJ_SPLIT_SCREEN_RESIZE,
-                mSplitWindowManager.getDividerView(), "Divider fling");
         ValueAnimator animator = ValueAnimator
                 .ofInt(from, to)
-                .setDuration(250);
+                .setDuration(FLING_ANIMATION_DURATION);
         animator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
         animator.addUpdateListener(
                 animation -> updateDivideBounds((int) animation.getAnimatedValue()));
@@ -455,7 +542,7 @@
                     flingFinishedCallback.run();
                 }
                 InteractionJankMonitorUtils.endTracing(
-                        InteractionJankMonitor.CUJ_SPLIT_SCREEN_RESIZE);
+                        CUJ_SPLIT_SCREEN_RESIZE);
             }
 
             @Override
@@ -466,6 +553,86 @@
         animator.start();
     }
 
+    /** Swich both surface position with animation. */
+    public void splitSwitching(SurfaceControl.Transaction t, SurfaceControl leash1,
+            SurfaceControl leash2, Runnable finishCallback) {
+        final boolean isLandscape = isLandscape();
+        final Rect insets = getDisplayInsets(mContext);
+        insets.set(isLandscape ? insets.left : 0, isLandscape ? 0 : insets.top,
+                isLandscape ? insets.right : 0, isLandscape ? 0 : insets.bottom);
+
+        final int dividerPos = mDividerSnapAlgorithm.calculateNonDismissingSnapTarget(
+                isLandscape ? mBounds2.width() : mBounds2.height()).position;
+        final Rect distBounds1 = new Rect();
+        final Rect distBounds2 = new Rect();
+        final Rect distDividerBounds = new Rect();
+        // Compute dist bounds.
+        updateBounds(dividerPos, distBounds2, distBounds1, distDividerBounds,
+                false /* setEffectBounds */);
+        // Offset to real position under root container.
+        distBounds1.offset(-mRootBounds.left, -mRootBounds.top);
+        distBounds2.offset(-mRootBounds.left, -mRootBounds.top);
+        distDividerBounds.offset(-mRootBounds.left, -mRootBounds.top);
+        // DO NOT move to insets area for smooth animation.
+        distBounds1.set(distBounds1.left, distBounds1.top,
+                distBounds1.right - insets.right, distBounds1.bottom - insets.bottom);
+        distBounds2.set(distBounds2.left + insets.left, distBounds2.top + insets.top,
+                distBounds2.right, distBounds2.bottom);
+
+        ValueAnimator animator1 = moveSurface(t, leash1, getRefBounds1(), distBounds1,
+                false /* alignStart */);
+        ValueAnimator animator2 = moveSurface(t, leash2, getRefBounds2(), distBounds2,
+                true /* alignStart */);
+        ValueAnimator animator3 = moveSurface(t, getDividerLeash(), getRefDividerBounds(),
+                distDividerBounds, true /* alignStart */);
+
+        AnimatorSet set = new AnimatorSet();
+        set.playTogether(animator1, animator2, animator3);
+        set.setDuration(FLING_ANIMATION_DURATION);
+        set.addListener(new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                mDividePosition = dividerPos;
+                updateBounds(mDividePosition);
+                finishCallback.run();
+            }
+        });
+        set.start();
+    }
+
+    private ValueAnimator moveSurface(SurfaceControl.Transaction t, SurfaceControl leash,
+            Rect start, Rect end, boolean alignStart) {
+        Rect tempStart = new Rect(start);
+        Rect tempEnd = new Rect(end);
+        final float diffX = tempEnd.left - tempStart.left;
+        final float diffY = tempEnd.top - tempStart.top;
+        final float diffWidth = tempEnd.width() - tempStart.width();
+        final float diffHeight = tempEnd.height() - tempStart.height();
+        ValueAnimator animator = ValueAnimator.ofFloat(0, 1);
+        animator.addUpdateListener(animation -> {
+            if (leash == null) return;
+
+            final float scale = (float) animation.getAnimatedValue();
+            final float distX = tempStart.left + scale * diffX;
+            final float distY = tempStart.top + scale * diffY;
+            final int width = (int) (tempStart.width() + scale * diffWidth);
+            final int height = (int) (tempStart.height() + scale * diffHeight);
+            if (alignStart) {
+                t.setPosition(leash, distX, distY);
+                t.setWindowCrop(leash, width, height);
+            } else {
+                final int offsetX = width - tempStart.width();
+                final int offsetY = height - tempStart.height();
+                t.setPosition(leash, distX + offsetX, distY + offsetY);
+                mTempRect.set(0, 0, width, height);
+                mTempRect.offsetTo(-offsetX, -offsetY);
+                t.setCrop(leash, mTempRect);
+            }
+            t.apply();
+        });
+        return animator;
+    }
+
     private static Rect getDisplayInsets(Context context) {
         return context.getSystemService(WindowManager.class)
                 .getMaximumWindowMetrics()
@@ -504,15 +671,15 @@
             boolean applyResizingOffset) {
         final SurfaceControl dividerLeash = getDividerLeash();
         if (dividerLeash != null) {
-            mTempRect.set(getRefDividerBounds());
+            getRefDividerBounds(mTempRect);
             t.setPosition(dividerLeash, mTempRect.left, mTempRect.top);
             // Resets layer of divider bar to make sure it is always on top.
             t.setLayer(dividerLeash, Integer.MAX_VALUE);
         }
-        mTempRect.set(getRefBounds1());
+        getRefBounds1(mTempRect);
         t.setPosition(leash1, mTempRect.left, mTempRect.top)
                 .setWindowCrop(leash1, mTempRect.width(), mTempRect.height());
-        mTempRect.set(getRefBounds2());
+        getRefBounds2(mTempRect);
         t.setPosition(leash2, mTempRect.left, mTempRect.top)
                 .setWindowCrop(leash2, mTempRect.width(), mTempRect.height());
 
@@ -560,31 +727,23 @@
             ActivityManager.RunningTaskInfo taskInfo1, ActivityManager.RunningTaskInfo taskInfo2) {
         if (offsetX == 0 && offsetY == 0) {
             wct.setBounds(taskInfo1.token, mBounds1);
-            wct.setAppBounds(taskInfo1.token, null);
             wct.setScreenSizeDp(taskInfo1.token,
                     SCREEN_WIDTH_DP_UNDEFINED, SCREEN_HEIGHT_DP_UNDEFINED);
 
             wct.setBounds(taskInfo2.token, mBounds2);
-            wct.setAppBounds(taskInfo2.token, null);
             wct.setScreenSizeDp(taskInfo2.token,
                     SCREEN_WIDTH_DP_UNDEFINED, SCREEN_HEIGHT_DP_UNDEFINED);
         } else {
-            mTempRect.set(taskInfo1.configuration.windowConfiguration.getBounds());
+            getBounds1(mTempRect);
             mTempRect.offset(offsetX, offsetY);
             wct.setBounds(taskInfo1.token, mTempRect);
-            mTempRect.set(taskInfo1.configuration.windowConfiguration.getAppBounds());
-            mTempRect.offset(offsetX, offsetY);
-            wct.setAppBounds(taskInfo1.token, mTempRect);
             wct.setScreenSizeDp(taskInfo1.token,
                     taskInfo1.configuration.screenWidthDp,
                     taskInfo1.configuration.screenHeightDp);
 
-            mTempRect.set(taskInfo2.configuration.windowConfiguration.getBounds());
+            getBounds2(mTempRect);
             mTempRect.offset(offsetX, offsetY);
             wct.setBounds(taskInfo2.token, mTempRect);
-            mTempRect.set(taskInfo2.configuration.windowConfiguration.getAppBounds());
-            mTempRect.offset(offsetX, offsetY);
-            wct.setAppBounds(taskInfo2.token, mTempRect);
             wct.setScreenSizeDp(taskInfo2.token,
                     taskInfo2.configuration.screenWidthDp,
                     taskInfo2.configuration.screenHeightDp);
@@ -602,7 +761,7 @@
     public interface SplitLayoutHandler {
 
         /** Calls when dismissing split. */
-        void onSnappedToDismiss(boolean snappedToEnd);
+        void onSnappedToDismiss(boolean snappedToEnd, int reason);
 
         /**
          * Calls when resizing the split bounds.
@@ -971,16 +1130,16 @@
             boolean adjusted = false;
             if (mYOffsetForIme != 0) {
                 if (dividerLeash != null) {
-                    mTempRect.set(mDividerBounds);
+                    getRefDividerBounds(mTempRect);
                     mTempRect.offset(0, mYOffsetForIme);
                     t.setPosition(dividerLeash, mTempRect.left, mTempRect.top);
                 }
 
-                mTempRect.set(mBounds1);
+                getRefBounds1(mTempRect);
                 mTempRect.offset(0, mYOffsetForIme);
                 t.setPosition(leash1, mTempRect.left, mTempRect.top);
 
-                mTempRect.set(mBounds2);
+                getRefBounds2(mTempRect);
                 mTempRect.offset(0, mYOffsetForIme);
                 t.setPosition(leash2, mTempRect.left, mTempRect.top);
                 adjusted = true;
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitScreenConstants.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitScreenConstants.java
index 9b61487..afc706e 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitScreenConstants.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitScreenConstants.java
@@ -15,6 +15,11 @@
  */
 package com.android.wm.shell.common.split;
 
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
+import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
+import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
+import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
+
 import android.annotation.IntDef;
 
 /** Helper utility class of methods and constants that are available to be imported in Launcher. */
@@ -44,4 +49,10 @@
     })
     public @interface SplitPosition {
     }
+
+    public static final int[] CONTROLLED_ACTIVITY_TYPES = {ACTIVITY_TYPE_STANDARD};
+    public static final int[] CONTROLLED_WINDOWING_MODES =
+            {WINDOWING_MODE_FULLSCREEN, WINDOWING_MODE_UNDEFINED};
+    public static final int[] CONTROLLED_WINDOWING_MODES_WHEN_ACTIVE =
+            {WINDOWING_MODE_FULLSCREEN, WINDOWING_MODE_UNDEFINED, WINDOWING_MODE_MULTI_WINDOW};
 }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUI.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUI.java
deleted file mode 100644
index b87cf47..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUI.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.compatui;
-
-import com.android.wm.shell.common.annotations.ExternalThread;
-
-/**
- * Interface to engage compat UI.
- */
-@ExternalThread
-public interface CompatUI {
-    /**
-     * Called when the keyguard showing state changes. Removes all compat UIs if the
-     * keyguard is now showing.
-     *
-     * <p>Note that if the keyguard is occluded it will also be considered showing.
-     *
-     * @param showing indicates if the keyguard is now showing.
-     */
-    void onKeyguardShowingChanged(boolean showing);
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java
index 99b32a6..db8d9d4 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java
@@ -39,9 +39,10 @@
 import com.android.wm.shell.common.DisplayLayout;
 import com.android.wm.shell.common.ShellExecutor;
 import com.android.wm.shell.common.SyncTransactionQueue;
-import com.android.wm.shell.common.annotations.ExternalThread;
 import com.android.wm.shell.compatui.CompatUIWindowManager.CompatUIHintsState;
 import com.android.wm.shell.compatui.letterboxedu.LetterboxEduWindowManager;
+import com.android.wm.shell.sysui.KeyguardChangeListener;
+import com.android.wm.shell.sysui.ShellController;
 import com.android.wm.shell.transition.Transitions;
 
 import java.lang.ref.WeakReference;
@@ -58,7 +59,7 @@
  * activities are in compatibility mode.
  */
 public class CompatUIController implements OnDisplaysChangedListener,
-        DisplayImeController.ImePositionProcessor {
+        DisplayImeController.ImePositionProcessor, KeyguardChangeListener {
 
     /** Callback for compat UI interaction. */
     public interface CompatUICallback {
@@ -100,13 +101,13 @@
     private final SparseArray<WeakReference<Context>> mDisplayContextCache = new SparseArray<>(0);
 
     private final Context mContext;
+    private final ShellController mShellController;
     private final DisplayController mDisplayController;
     private final DisplayInsetsController mDisplayInsetsController;
     private final DisplayImeController mImeController;
     private final SyncTransactionQueue mSyncQueue;
     private final ShellExecutor mMainExecutor;
     private final Lazy<Transitions> mTransitionsLazy;
-    private final CompatUIImpl mImpl = new CompatUIImpl();
 
     private CompatUICallback mCallback;
 
@@ -118,6 +119,7 @@
     private boolean mKeyguardShowing;
 
     public CompatUIController(Context context,
+            ShellController shellController,
             DisplayController displayController,
             DisplayInsetsController displayInsetsController,
             DisplayImeController imeController,
@@ -125,6 +127,7 @@
             ShellExecutor mainExecutor,
             Lazy<Transitions> transitionsLazy) {
         mContext = context;
+        mShellController = shellController;
         mDisplayController = displayController;
         mDisplayInsetsController = displayInsetsController;
         mImeController = imeController;
@@ -134,11 +137,7 @@
         mDisplayController.addDisplayWindowListener(this);
         mImeController.addPositionProcessor(this);
         mCompatUIHintsState = new CompatUIHintsState();
-    }
-
-    /** Returns implementation of {@link CompatUI}. */
-    public CompatUI asCompatUI() {
-        return mImpl;
+        shellController.addKeyguardChangeListener(this);
     }
 
     /** Sets the callback for UI interactions. */
@@ -223,9 +222,10 @@
                 layout -> layout.updateVisibility(showOnDisplay(displayId)));
     }
 
-    @VisibleForTesting
-    void onKeyguardShowingChanged(boolean showing) {
-        mKeyguardShowing = showing;
+    @Override
+    public void onKeyguardVisibilityChanged(boolean visible, boolean occluded,
+            boolean animatingDismiss) {
+        mKeyguardShowing = visible;
         // Hide the compat UIs when keyguard is showing.
         forAllLayouts(layout -> layout.updateVisibility(showOnDisplay(layout.getDisplayId())));
     }
@@ -373,19 +373,6 @@
         }
     }
 
-    /**
-     * The interface for calls from outside the Shell, within the host process.
-     */
-    @ExternalThread
-    private class CompatUIImpl implements CompatUI {
-        @Override
-        public void onKeyguardShowingChanged(boolean showing) {
-            mMainExecutor.execute(() -> {
-                CompatUIController.this.onKeyguardShowingChanged(showing);
-            });
-        }
-    }
-
     /** An implementation of {@link OnInsetsChangedListener} for a given display id. */
     private class PerDisplayOnInsetsChangedListener implements OnInsetsChangedListener {
         final int mDisplayId;
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/DynamicOverride.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/DynamicOverride.java
index 806f795..10b121b 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/DynamicOverride.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/DynamicOverride.java
@@ -92,6 +92,8 @@
  *
  * For example, this uses the same setup as above, but the interface provided (if bound) is used
  * otherwise the default is created:
+ *
+ * BaseModule:
  *   @BindsOptionalOf
  *   @DynamicOverride
  *   abstract Interface dynamicInterface();
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/README.txt b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/README.txt
deleted file mode 100644
index 1cd69ed..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/README.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-The dagger modules in this directory can be included by the host SysUI using the Shell library for
-explicity injection of Shell components. Apps using this library are not required to use these
-dagger modules for setup, but it is recommended for them to include them as needed.
-
-The modules are currently inherited as such:
-
-+- WMShellBaseModule (common shell features across SysUI)
-   |
-   +- WMShellModule (handheld)
-   |
-   +- TvPipModule (tv pip)
-      |
-      +- TvWMShellModule (tv)
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/ShellCreateTrigger.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/ShellCreateTrigger.java
new file mode 100644
index 0000000..482b199
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/ShellCreateTrigger.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.dagger;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+import javax.inject.Qualifier;
+
+/**
+ * An annotation to specifically mark the provider that is triggering the creation of independent
+ * shell components that are not created as a part of the dependencies for interfaces passed to
+ * SysUI.
+ *
+ * TODO: This will be removed once we have a more explicit method for specifying components to start
+ *       with SysUI
+ */
+@Documented
+@Inherited
+@Qualifier
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ShellCreateTrigger {}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/ShellCreateTriggerOverride.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/ShellCreateTriggerOverride.java
new file mode 100644
index 0000000..31c6789
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/ShellCreateTriggerOverride.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.dagger;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+import javax.inject.Qualifier;
+
+/**
+ * An annotation for non-base modules to specifically mark the provider that is triggering the
+ * creation of independent shell components that are not created as a part of the dependencies for
+ * interfaces passed to SysUI.
+ *
+ * TODO: This will be removed once we have a more explicit method for specifying components to start
+ *       with SysUI
+ */
+@Documented
+@Inherited
+@Qualifier
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ShellCreateTriggerOverride {}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/TvPipModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/TvPipModule.java
index 1ea5e21..e22c951 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/TvPipModule.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/TvPipModule.java
@@ -48,6 +48,8 @@
 import com.android.wm.shell.pip.tv.TvPipTaskOrganizer;
 import com.android.wm.shell.pip.tv.TvPipTransition;
 import com.android.wm.shell.splitscreen.SplitScreenController;
+import com.android.wm.shell.sysui.ShellController;
+import com.android.wm.shell.sysui.ShellInit;
 import com.android.wm.shell.transition.Transitions;
 
 import java.util.Optional;
@@ -64,6 +66,7 @@
     @Provides
     static Optional<Pip> providePip(
             Context context,
+            ShellController shellController,
             TvPipBoundsState tvPipBoundsState,
             TvPipBoundsAlgorithm tvPipBoundsAlgorithm,
             TvPipBoundsController tvPipBoundsController,
@@ -81,6 +84,7 @@
         return Optional.of(
                 TvPipController.create(
                         context,
+                        shellController,
                         tvPipBoundsState,
                         tvPipBoundsAlgorithm,
                         tvPipBoundsController,
@@ -135,12 +139,14 @@
     @WMSingleton
     @Provides
     static PipTransitionController provideTvPipTransition(
-            Transitions transitions, ShellTaskOrganizer shellTaskOrganizer,
+            ShellInit shellInit,
+            ShellTaskOrganizer shellTaskOrganizer,
+            Transitions transitions,
             PipAnimationController pipAnimationController,
             TvPipBoundsAlgorithm tvPipBoundsAlgorithm,
             TvPipBoundsState tvPipBoundsState, TvPipMenuController pipMenuController) {
-        return new TvPipTransition(tvPipBoundsState, pipMenuController,
-                tvPipBoundsAlgorithm, pipAnimationController, transitions, shellTaskOrganizer);
+        return new TvPipTransition(shellInit, shellTaskOrganizer, transitions, tvPipBoundsState,
+                pipMenuController, tvPipBoundsAlgorithm, pipAnimationController);
     }
 
     @WMSingleton
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java
index db6131a..3add417 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java
@@ -29,17 +29,12 @@
 import com.android.launcher3.icons.IconProvider;
 import com.android.wm.shell.RootDisplayAreaOrganizer;
 import com.android.wm.shell.RootTaskDisplayAreaOrganizer;
-import com.android.wm.shell.ShellCommandHandler;
-import com.android.wm.shell.ShellCommandHandlerImpl;
-import com.android.wm.shell.ShellInit;
-import com.android.wm.shell.ShellInitImpl;
 import com.android.wm.shell.ShellTaskOrganizer;
 import com.android.wm.shell.TaskViewFactory;
 import com.android.wm.shell.TaskViewFactoryController;
 import com.android.wm.shell.TaskViewTransitions;
 import com.android.wm.shell.WindowManagerShellWrapper;
-import com.android.wm.shell.apppairs.AppPairs;
-import com.android.wm.shell.apppairs.AppPairsController;
+import com.android.wm.shell.activityembedding.ActivityEmbeddingController;
 import com.android.wm.shell.back.BackAnimation;
 import com.android.wm.shell.back.BackAnimationController;
 import com.android.wm.shell.bubbles.BubbleController;
@@ -58,20 +53,14 @@
 import com.android.wm.shell.common.annotations.ShellBackgroundThread;
 import com.android.wm.shell.common.annotations.ShellMainThread;
 import com.android.wm.shell.common.annotations.ShellSplashscreenThread;
-import com.android.wm.shell.compatui.CompatUI;
 import com.android.wm.shell.compatui.CompatUIController;
 import com.android.wm.shell.displayareahelper.DisplayAreaHelper;
 import com.android.wm.shell.displayareahelper.DisplayAreaHelperController;
-import com.android.wm.shell.draganddrop.DragAndDrop;
 import com.android.wm.shell.draganddrop.DragAndDropController;
-import com.android.wm.shell.freeform.FreeformTaskListener;
+import com.android.wm.shell.freeform.FreeformComponents;
 import com.android.wm.shell.fullscreen.FullscreenTaskListener;
-import com.android.wm.shell.fullscreen.FullscreenUnfoldController;
-import com.android.wm.shell.hidedisplaycutout.HideDisplayCutout;
 import com.android.wm.shell.hidedisplaycutout.HideDisplayCutoutController;
 import com.android.wm.shell.kidsmode.KidsModeTaskOrganizer;
-import com.android.wm.shell.legacysplitscreen.LegacySplitScreen;
-import com.android.wm.shell.legacysplitscreen.LegacySplitScreenController;
 import com.android.wm.shell.onehanded.OneHanded;
 import com.android.wm.shell.onehanded.OneHandedController;
 import com.android.wm.shell.pip.Pip;
@@ -87,11 +76,14 @@
 import com.android.wm.shell.startingsurface.StartingWindowController;
 import com.android.wm.shell.startingsurface.StartingWindowTypeAlgorithm;
 import com.android.wm.shell.startingsurface.phone.PhoneStartingWindowTypeAlgorithm;
-import com.android.wm.shell.tasksurfacehelper.TaskSurfaceHelper;
-import com.android.wm.shell.tasksurfacehelper.TaskSurfaceHelperController;
+import com.android.wm.shell.sysui.ShellCommandHandler;
+import com.android.wm.shell.sysui.ShellController;
+import com.android.wm.shell.sysui.ShellInit;
+import com.android.wm.shell.sysui.ShellInterface;
 import com.android.wm.shell.transition.ShellTransitions;
 import com.android.wm.shell.transition.Transitions;
 import com.android.wm.shell.unfold.ShellUnfoldProgressProvider;
+import com.android.wm.shell.unfold.UnfoldAnimationController;
 import com.android.wm.shell.unfold.UnfoldTransitionHandler;
 
 import java.util.Optional;
@@ -120,16 +112,20 @@
     @WMSingleton
     @Provides
     static DisplayController provideDisplayController(Context context,
-            IWindowManager wmService, @ShellMainThread ShellExecutor mainExecutor) {
-        return new DisplayController(context, wmService, mainExecutor);
+            IWindowManager wmService,
+            ShellInit shellInit,
+            @ShellMainThread ShellExecutor mainExecutor) {
+        return new DisplayController(context, wmService, shellInit, mainExecutor);
     }
 
     @WMSingleton
     @Provides
-    static DisplayInsetsController provideDisplayInsetsController( IWindowManager wmService,
+    static DisplayInsetsController provideDisplayInsetsController(IWindowManager wmService,
+            ShellInit shellInit,
             DisplayController displayController,
             @ShellMainThread ShellExecutor mainExecutor) {
-        return new DisplayInsetsController(wmService, displayController, mainExecutor);
+        return new DisplayInsetsController(wmService, shellInit, displayController,
+                mainExecutor);
     }
 
     // Workaround for dynamic overriding with a default implementation, see {@link DynamicOverride}
@@ -142,16 +138,17 @@
     static DisplayImeController provideDisplayImeController(
             @DynamicOverride Optional<DisplayImeController> overrideDisplayImeController,
             IWindowManager wmService,
+            ShellInit shellInit,
             DisplayController displayController,
             DisplayInsetsController displayInsetsController,
-            @ShellMainThread ShellExecutor mainExecutor,
-            TransactionPool transactionPool
+            TransactionPool transactionPool,
+            @ShellMainThread ShellExecutor mainExecutor
     ) {
         if (overrideDisplayImeController.isPresent()) {
             return overrideDisplayImeController.get();
         }
-        return new DisplayImeController(wmService, displayController, displayInsetsController,
-                mainExecutor, transactionPool);
+        return new DisplayImeController(wmService, shellInit, displayController,
+                displayInsetsController, transactionPool, mainExecutor);
     }
 
     @WMSingleton
@@ -163,56 +160,56 @@
     @WMSingleton
     @Provides
     static DragAndDropController provideDragAndDropController(Context context,
-            DisplayController displayController, UiEventLogger uiEventLogger,
-            IconProvider iconProvider, @ShellMainThread ShellExecutor mainExecutor) {
-        return new DragAndDropController(context, displayController, uiEventLogger, iconProvider,
-                mainExecutor);
+            ShellInit shellInit,
+            ShellController shellController,
+            DisplayController displayController,
+            UiEventLogger uiEventLogger,
+            IconProvider iconProvider,
+            @ShellMainThread ShellExecutor mainExecutor) {
+        return new DragAndDropController(context, shellInit, shellController, displayController,
+                uiEventLogger, iconProvider, mainExecutor);
     }
 
     @WMSingleton
     @Provides
-    static Optional<DragAndDrop> provideDragAndDrop(DragAndDropController dragAndDropController) {
-        return Optional.of(dragAndDropController.asDragAndDrop());
-    }
-
-    @WMSingleton
-    @Provides
-    static ShellTaskOrganizer provideShellTaskOrganizer(@ShellMainThread ShellExecutor mainExecutor,
-            Context context,
+    static ShellTaskOrganizer provideShellTaskOrganizer(
+            ShellInit shellInit,
             CompatUIController compatUI,
-            Optional<RecentTasksController> recentTasksOptional
+            Optional<UnfoldAnimationController> unfoldAnimationController,
+            Optional<RecentTasksController> recentTasksOptional,
+            @ShellMainThread ShellExecutor mainExecutor
     ) {
-        return new ShellTaskOrganizer(mainExecutor, context, compatUI, recentTasksOptional);
+        return new ShellTaskOrganizer(shellInit, compatUI, unfoldAnimationController,
+                recentTasksOptional, mainExecutor);
     }
 
     @WMSingleton
     @Provides
     static KidsModeTaskOrganizer provideKidsModeTaskOrganizer(
-            @ShellMainThread ShellExecutor mainExecutor,
-            @ShellMainThread Handler mainHandler,
             Context context,
+            ShellInit shellInit,
             SyncTransactionQueue syncTransactionQueue,
             DisplayController displayController,
             DisplayInsetsController displayInsetsController,
-            Optional<RecentTasksController> recentTasksOptional
+            Optional<UnfoldAnimationController> unfoldAnimationController,
+            Optional<RecentTasksController> recentTasksOptional,
+            @ShellMainThread ShellExecutor mainExecutor,
+            @ShellMainThread Handler mainHandler
     ) {
-        return new KidsModeTaskOrganizer(mainExecutor, mainHandler, context, syncTransactionQueue,
-                displayController, displayInsetsController, recentTasksOptional);
-    }
-
-    @WMSingleton
-    @Provides static Optional<CompatUI> provideCompatUI(CompatUIController compatUIController) {
-        return Optional.of(compatUIController.asCompatUI());
+        return new KidsModeTaskOrganizer(context, shellInit, syncTransactionQueue,
+                displayController, displayInsetsController, unfoldAnimationController,
+                recentTasksOptional, mainExecutor, mainHandler);
     }
 
     @WMSingleton
     @Provides
     static CompatUIController provideCompatUIController(Context context,
+            ShellController shellController,
             DisplayController displayController, DisplayInsetsController displayInsetsController,
             DisplayImeController imeController, SyncTransactionQueue syncQueue,
             @ShellMainThread ShellExecutor mainExecutor, Lazy<Transitions> transitionsLazy) {
-        return new CompatUIController(context, displayController, displayInsetsController,
-                imeController, syncQueue, mainExecutor, transitionsLazy);
+        return new CompatUIController(context, shellController, displayController,
+                displayInsetsController, imeController, syncQueue, mainExecutor, transitionsLazy);
     }
 
     @WMSingleton
@@ -267,6 +264,20 @@
         return backAnimationController.map(BackAnimationController::getBackAnimationImpl);
     }
 
+    @WMSingleton
+    @Provides
+    static Optional<BackAnimationController> provideBackAnimationController(
+            Context context,
+            @ShellMainThread ShellExecutor shellExecutor,
+            @ShellBackgroundThread Handler backgroundHandler
+    ) {
+        if (BackAnimationController.IS_ENABLED) {
+            return Optional.of(
+                    new BackAnimationController(shellExecutor, backgroundHandler, context));
+        }
+        return Optional.empty();
+    }
+
     //
     // Bubbles (optional feature)
     //
@@ -293,13 +304,14 @@
     @Provides
     static FullscreenTaskListener provideFullscreenTaskListener(
             @DynamicOverride Optional<FullscreenTaskListener> fullscreenTaskListener,
+            ShellInit shellInit,
+            ShellTaskOrganizer shellTaskOrganizer,
             SyncTransactionQueue syncQueue,
-            Optional<FullscreenUnfoldController> optionalFullscreenUnfoldController,
             Optional<RecentTasksController> recentTasksOptional) {
         if (fullscreenTaskListener.isPresent()) {
             return fullscreenTaskListener.get();
         } else {
-            return new FullscreenTaskListener(syncQueue, optionalFullscreenUnfoldController,
+            return new FullscreenTaskListener(shellInit, shellTaskOrganizer, syncQueue,
                     recentTasksOptional);
         }
     }
@@ -314,31 +326,33 @@
     // Workaround for dynamic overriding with a default implementation, see {@link DynamicOverride}
     @BindsOptionalOf
     @DynamicOverride
-    abstract FullscreenUnfoldController optionalFullscreenUnfoldController();
+    abstract UnfoldAnimationController optionalUnfoldController();
 
     @WMSingleton
     @Provides
-    static Optional<FullscreenUnfoldController> provideFullscreenUnfoldController(
-            @DynamicOverride Optional<FullscreenUnfoldController> fullscreenUnfoldController,
+    static Optional<UnfoldAnimationController> provideUnfoldController(
+            @DynamicOverride Lazy<Optional<UnfoldAnimationController>>
+                    fullscreenUnfoldController,
             Optional<ShellUnfoldProgressProvider> progressProvider) {
         if (progressProvider.isPresent()
                 && progressProvider.get() != ShellUnfoldProgressProvider.NO_PROVIDER) {
-            return fullscreenUnfoldController;
+            return fullscreenUnfoldController.get();
         }
         return Optional.empty();
     }
 
+    @BindsOptionalOf
+    @DynamicOverride
+    abstract UnfoldTransitionHandler optionalUnfoldTransitionHandler();
+
     @WMSingleton
     @Provides
     static Optional<UnfoldTransitionHandler> provideUnfoldTransitionHandler(
             Optional<ShellUnfoldProgressProvider> progressProvider,
-            TransactionPool transactionPool,
-            Transitions transitions,
-            @ShellMainThread ShellExecutor executor) {
-        if (progressProvider.isPresent()) {
-            return Optional.of(
-                    new UnfoldTransitionHandler(progressProvider.get(), transactionPool, executor,
-                            transitions));
+            @DynamicOverride Lazy<Optional<UnfoldTransitionHandler>> handler) {
+        if (progressProvider.isPresent()
+                && progressProvider.get() != ShellUnfoldProgressProvider.NO_PROVIDER) {
+            return handler.get();
         }
         return Optional.empty();
     }
@@ -350,15 +364,15 @@
     // Workaround for dynamic overriding with a default implementation, see {@link DynamicOverride}
     @BindsOptionalOf
     @DynamicOverride
-    abstract FreeformTaskListener optionalFreeformTaskListener();
+    abstract FreeformComponents optionalFreeformComponents();
 
     @WMSingleton
     @Provides
-    static Optional<FreeformTaskListener> provideFreeformTaskListener(
-            @DynamicOverride Optional<FreeformTaskListener> freeformTaskListener,
+    static Optional<FreeformComponents> provideFreeformComponents(
+            @DynamicOverride Optional<FreeformComponents> freeformComponents,
             Context context) {
-        if (FreeformTaskListener.isFreeformEnabled(context)) {
-            return freeformTaskListener;
+        if (FreeformComponents.isFreeformEnabled(context)) {
+            return freeformComponents;
         }
         return Optional.empty();
     }
@@ -369,17 +383,12 @@
 
     @WMSingleton
     @Provides
-    static Optional<HideDisplayCutout> provideHideDisplayCutout(
-            Optional<HideDisplayCutoutController> hideDisplayCutoutController) {
-        return hideDisplayCutoutController.map((controller) -> controller.asHideDisplayCutout());
-    }
-
-    @WMSingleton
-    @Provides
     static Optional<HideDisplayCutoutController> provideHideDisplayCutoutController(Context context,
-            DisplayController displayController, @ShellMainThread ShellExecutor mainExecutor) {
+            ShellController shellController, DisplayController displayController,
+            @ShellMainThread ShellExecutor mainExecutor) {
         return Optional.ofNullable(
-                HideDisplayCutoutController.create(context, displayController, mainExecutor));
+                HideDisplayCutoutController.create(context, shellController, displayController,
+                        mainExecutor));
     }
 
     //
@@ -408,23 +417,6 @@
     }
 
     //
-    // Task to Surface communication
-    //
-
-    @WMSingleton
-    @Provides
-    static Optional<TaskSurfaceHelper> provideTaskSurfaceHelper(
-            Optional<TaskSurfaceHelperController> taskSurfaceController) {
-        return taskSurfaceController.map((controller) -> controller.asTaskSurfaceHelper());
-    }
-
-    @Provides
-    static Optional<TaskSurfaceHelperController> provideTaskSurfaceHelperController(
-            ShellTaskOrganizer taskOrganizer, @ShellMainThread ShellExecutor mainExecutor) {
-        return Optional.ofNullable(new TaskSurfaceHelperController(taskOrganizer, mainExecutor));
-    }
-
-    //
     // Pip (optional feature)
     //
 
@@ -444,8 +436,8 @@
 
     @WMSingleton
     @Provides
-    static PipSurfaceTransactionHelper providePipSurfaceTransactionHelper() {
-        return new PipSurfaceTransactionHelper();
+    static PipSurfaceTransactionHelper providePipSurfaceTransactionHelper(Context context) {
+        return new PipSurfaceTransactionHelper(context);
     }
 
     @WMSingleton
@@ -473,11 +465,13 @@
     @Provides
     static Optional<RecentTasksController> provideRecentTasksController(
             Context context,
+            ShellInit shellInit,
             TaskStackListenerImpl taskStackListener,
             @ShellMainThread ShellExecutor mainExecutor
     ) {
         return Optional.ofNullable(
-                RecentTasksController.create(context, taskStackListener, mainExecutor));
+                RecentTasksController.create(context, shellInit, taskStackListener,
+                        mainExecutor));
     }
 
     //
@@ -492,12 +486,15 @@
 
     @WMSingleton
     @Provides
-    static Transitions provideTransitions(ShellTaskOrganizer organizer, TransactionPool pool,
-            DisplayController displayController, Context context,
+    static Transitions provideTransitions(Context context,
+            ShellInit shellInit,
+            ShellTaskOrganizer organizer,
+            TransactionPool pool,
+            DisplayController displayController,
             @ShellMainThread ShellExecutor mainExecutor,
             @ShellMainThread Handler mainHandler,
             @ShellAnimationThread ShellExecutor animExecutor) {
-        return new Transitions(organizer, pool, displayController, context, mainExecutor,
+        return new Transitions(context, shellInit, organizer, pool, displayController, mainExecutor,
                 mainHandler, animExecutor);
     }
 
@@ -561,29 +558,6 @@
         return Optional.empty();
     }
 
-    // Legacy split (optional feature)
-
-    @WMSingleton
-    @Provides
-    static Optional<LegacySplitScreen> provideLegacySplitScreen(
-            Optional<LegacySplitScreenController> splitScreenController) {
-        return splitScreenController.map((controller) -> controller.asLegacySplitScreen());
-    }
-
-    @BindsOptionalOf
-    abstract LegacySplitScreenController optionalLegacySplitScreenController();
-
-    // App Pairs (optional feature)
-
-    @WMSingleton
-    @Provides
-    static Optional<AppPairs> provideAppPairs(Optional<AppPairsController> appPairsController) {
-        return appPairsController.map((controller) -> controller.asAppPairs());
-    }
-
-    @BindsOptionalOf
-    abstract AppPairsController optionalAppPairs();
-
     //
     // Starting window
     //
@@ -598,11 +572,13 @@
     @WMSingleton
     @Provides
     static StartingWindowController provideStartingWindowController(Context context,
+            ShellInit shellInit,
+            ShellTaskOrganizer shellTaskOrganizer,
             @ShellSplashscreenThread ShellExecutor splashScreenExecutor,
             StartingWindowTypeAlgorithm startingWindowTypeAlgorithm, IconProvider iconProvider,
             TransactionPool pool) {
-        return new StartingWindowController(context, splashScreenExecutor,
-                startingWindowTypeAlgorithm, iconProvider, pool);
+        return new StartingWindowController(context, shellInit, shellTaskOrganizer,
+                splashScreenExecutor, startingWindowTypeAlgorithm, iconProvider, pool);
     }
 
     // Workaround for dynamic overriding with a default implementation, see {@link DynamicOverride}
@@ -644,19 +620,55 @@
                 taskViewTransitions);
     }
 
+
     //
-    // Misc
+    // ActivityEmbedding
     //
 
     @WMSingleton
     @Provides
-    static ShellInit provideShellInit(ShellInitImpl impl) {
-        return impl.asShellInit();
+    static ActivityEmbeddingController provideActivityEmbeddingController(
+            Context context,
+            ShellInit shellInit,
+            Transitions transitions) {
+        return new ActivityEmbeddingController(context, shellInit, transitions);
+    }
+
+    //
+    // SysUI -> Shell interface
+    //
+
+    @WMSingleton
+    @Provides
+    static ShellInterface provideShellSysuiCallbacks(
+            @ShellCreateTrigger Object createTrigger,
+            ShellController shellController) {
+        return shellController.asShell();
     }
 
     @WMSingleton
     @Provides
-    static ShellInitImpl provideShellInitImpl(DisplayController displayController,
+    static ShellController provideShellController(ShellInit shellInit,
+            @ShellMainThread ShellExecutor mainExecutor) {
+        return new ShellController(shellInit, mainExecutor);
+    }
+
+    //
+    // Misc
+    //
+
+    // Workaround for dynamic overriding with a default implementation, see {@link DynamicOverride}
+    @BindsOptionalOf
+    @ShellCreateTriggerOverride
+    abstract Object provideIndependentShellComponentsToCreateOverride();
+
+    // TODO: Temporarily move dependencies to this instead of ShellInit since that is needed to add
+    // the callback. We will be moving to a different explicit startup mechanism in a follow- up CL.
+    @WMSingleton
+    @ShellCreateTrigger
+    @Provides
+    static Object provideIndependentShellComponentsToCreate(
+            DisplayController displayController,
             DisplayImeController displayImeController,
             DisplayInsetsController displayInsetsController,
             DragAndDropController dragAndDropController,
@@ -664,75 +676,39 @@
             KidsModeTaskOrganizer kidsModeTaskOrganizer,
             Optional<BubbleController> bubblesOptional,
             Optional<SplitScreenController> splitScreenOptional,
-            Optional<AppPairsController> appPairsOptional,
             Optional<PipTouchHandler> pipTouchHandlerOptional,
             FullscreenTaskListener fullscreenTaskListener,
-            Optional<FullscreenUnfoldController> appUnfoldTransitionController,
+            Optional<UnfoldAnimationController> unfoldAnimationController,
             Optional<UnfoldTransitionHandler> unfoldTransitionHandler,
-            Optional<FreeformTaskListener> freeformTaskListener,
+            Optional<FreeformComponents> freeformComponents,
             Optional<RecentTasksController> recentTasksOptional,
+            ActivityEmbeddingController activityEmbeddingOptional,
             Transitions transitions,
             StartingWindowController startingWindow,
-            @ShellMainThread ShellExecutor mainExecutor) {
-        return new ShellInitImpl(displayController,
-                displayImeController,
-                displayInsetsController,
-                dragAndDropController,
-                shellTaskOrganizer,
-                kidsModeTaskOrganizer,
-                bubblesOptional,
-                splitScreenOptional,
-                appPairsOptional,
-                pipTouchHandlerOptional,
-                fullscreenTaskListener,
-                appUnfoldTransitionController,
-                unfoldTransitionHandler,
-                freeformTaskListener,
-                recentTasksOptional,
-                transitions,
-                startingWindow,
-                mainExecutor);
-    }
-
-    /**
-     * Note, this is only optional because we currently pass this to the SysUI component scope and
-     * for non-primary users, we may inject a null-optional for that dependency.
-     */
-    @WMSingleton
-    @Provides
-    static Optional<ShellCommandHandler> provideShellCommandHandler(ShellCommandHandlerImpl impl) {
-        return Optional.of(impl.asShellCommandHandler());
+            @ShellCreateTriggerOverride Optional<Object> overriddenCreateTrigger) {
+        return new Object();
     }
 
     @WMSingleton
     @Provides
-    static ShellCommandHandlerImpl provideShellCommandHandlerImpl(
+    static ShellInit provideShellInit(@ShellMainThread ShellExecutor mainExecutor) {
+        return new ShellInit(mainExecutor);
+    }
+
+    @WMSingleton
+    @Provides
+    static ShellCommandHandler provideShellCommandHandlerImpl(
+            ShellController shellController,
             ShellTaskOrganizer shellTaskOrganizer,
             KidsModeTaskOrganizer kidsModeTaskOrganizer,
-            Optional<LegacySplitScreenController> legacySplitScreenOptional,
             Optional<SplitScreenController> splitScreenOptional,
             Optional<Pip> pipOptional,
             Optional<OneHandedController> oneHandedOptional,
             Optional<HideDisplayCutoutController> hideDisplayCutout,
-            Optional<AppPairsController> appPairsOptional,
             Optional<RecentTasksController> recentTasksOptional,
             @ShellMainThread ShellExecutor mainExecutor) {
-        return new ShellCommandHandlerImpl(shellTaskOrganizer, kidsModeTaskOrganizer,
-                legacySplitScreenOptional, splitScreenOptional, pipOptional, oneHandedOptional,
-                hideDisplayCutout, appPairsOptional, recentTasksOptional, mainExecutor);
-    }
-
-    @WMSingleton
-    @Provides
-    static Optional<BackAnimationController> provideBackAnimationController(
-            Context context,
-            @ShellMainThread ShellExecutor shellExecutor,
-            @ShellBackgroundThread Handler backgroundHandler
-    ) {
-        if (BackAnimationController.IS_ENABLED) {
-            return Optional.of(
-                    new BackAnimationController(shellExecutor, backgroundHandler, context));
-        }
-        return Optional.empty();
+        return new ShellCommandHandler(shellController, shellTaskOrganizer,
+                kidsModeTaskOrganizer, splitScreenOptional, pipOptional, oneHandedOptional,
+                hideDisplayCutout, recentTasksOptional, mainExecutor);
     }
 }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellConcurrencyModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellConcurrencyModule.java
index cc741d3..35a309a 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellConcurrencyModule.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellConcurrencyModule.java
@@ -27,6 +27,7 @@
 import android.os.HandlerThread;
 import android.os.Looper;
 import android.os.Trace;
+import android.view.Choreographer;
 
 import androidx.annotation.Nullable;
 
@@ -144,6 +145,25 @@
     }
 
     /**
+     * Provide a Shell main-thread {@link Choreographer} with the app vsync.
+     *
+     * @param executor the executor of the shell main thread
+     */
+    @WMSingleton
+    @Provides
+    @ShellMainThread
+    public static Choreographer provideShellMainChoreographer(
+            @ShellMainThread ShellExecutor executor) {
+        try {
+            final Choreographer[] choreographer = new Choreographer[1];
+            executor.executeBlocking(() -> choreographer[0] = Choreographer.getInstance());
+            return choreographer[0];
+        } catch (InterruptedException e) {
+            throw new RuntimeException("Failed to obtain main Choreographer.", e);
+        }
+    }
+
+    /**
      * Provide a Shell animation-thread Executor.
      */
     @WMSingleton
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
index b3799e2..d53451a 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
@@ -16,11 +16,11 @@
 
 package com.android.wm.shell.dagger;
 
-import android.animation.AnimationHandler;
 import android.content.Context;
 import android.content.pm.LauncherApps;
 import android.os.Handler;
 import android.os.UserManager;
+import android.view.Choreographer;
 import android.view.WindowManager;
 
 import com.android.internal.jank.InteractionJankMonitor;
@@ -31,8 +31,11 @@
 import com.android.wm.shell.ShellTaskOrganizer;
 import com.android.wm.shell.TaskViewTransitions;
 import com.android.wm.shell.WindowManagerShellWrapper;
-import com.android.wm.shell.apppairs.AppPairsController;
 import com.android.wm.shell.bubbles.BubbleController;
+import com.android.wm.shell.bubbles.BubbleData;
+import com.android.wm.shell.bubbles.BubbleDataRepository;
+import com.android.wm.shell.bubbles.BubbleLogger;
+import com.android.wm.shell.bubbles.BubblePositioner;
 import com.android.wm.shell.common.DisplayController;
 import com.android.wm.shell.common.DisplayImeController;
 import com.android.wm.shell.common.DisplayInsetsController;
@@ -43,13 +46,12 @@
 import com.android.wm.shell.common.SystemWindows;
 import com.android.wm.shell.common.TaskStackListenerImpl;
 import com.android.wm.shell.common.TransactionPool;
-import com.android.wm.shell.common.annotations.ChoreographerSfVsync;
 import com.android.wm.shell.common.annotations.ShellBackgroundThread;
 import com.android.wm.shell.common.annotations.ShellMainThread;
 import com.android.wm.shell.draganddrop.DragAndDropController;
+import com.android.wm.shell.freeform.FreeformComponents;
 import com.android.wm.shell.freeform.FreeformTaskListener;
-import com.android.wm.shell.fullscreen.FullscreenUnfoldController;
-import com.android.wm.shell.legacysplitscreen.LegacySplitScreenController;
+import com.android.wm.shell.freeform.FreeformTaskTransitionHandler;
 import com.android.wm.shell.onehanded.OneHandedController;
 import com.android.wm.shell.pip.Pip;
 import com.android.wm.shell.pip.PipAnimationController;
@@ -67,19 +69,32 @@
 import com.android.wm.shell.pip.PipUiEventLogger;
 import com.android.wm.shell.pip.phone.PhonePipMenuController;
 import com.android.wm.shell.pip.phone.PipController;
+import com.android.wm.shell.pip.phone.PipKeepClearAlgorithm;
 import com.android.wm.shell.pip.phone.PipMotionHelper;
 import com.android.wm.shell.pip.phone.PipTouchHandler;
 import com.android.wm.shell.recents.RecentTasksController;
 import com.android.wm.shell.splitscreen.SplitScreenController;
-import com.android.wm.shell.splitscreen.StageTaskUnfoldController;
+import com.android.wm.shell.sysui.ShellController;
+import com.android.wm.shell.sysui.ShellInit;
+import com.android.wm.shell.transition.SplitscreenPipMixedHandler;
 import com.android.wm.shell.transition.Transitions;
 import com.android.wm.shell.unfold.ShellUnfoldProgressProvider;
+import com.android.wm.shell.unfold.UnfoldAnimationController;
 import com.android.wm.shell.unfold.UnfoldBackgroundController;
+import com.android.wm.shell.unfold.UnfoldTransitionHandler;
+import com.android.wm.shell.unfold.animation.FullscreenUnfoldTaskAnimator;
+import com.android.wm.shell.unfold.animation.SplitTaskUnfoldAnimator;
+import com.android.wm.shell.unfold.animation.UnfoldTaskAnimator;
+import com.android.wm.shell.unfold.qualifier.UnfoldShellTransition;
+import com.android.wm.shell.unfold.qualifier.UnfoldTransition;
+import com.android.wm.shell.windowdecor.CaptionWindowDecorViewModel;
+import com.android.wm.shell.windowdecor.WindowDecorViewModel;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Optional;
 
-import javax.inject.Provider;
-
+import dagger.Binds;
 import dagger.Lazy;
 import dagger.Module;
 import dagger.Provides;
@@ -93,16 +108,41 @@
  * dependencies should go into {@link WMShellBaseModule}.
  */
 @Module(includes = WMShellBaseModule.class)
-public class WMShellModule {
+public abstract class WMShellModule {
 
     //
     // Bubbles
     //
 
+    @WMSingleton
+    @Provides
+    static BubbleLogger provideBubbleLogger(UiEventLogger uiEventLogger) {
+        return new BubbleLogger(uiEventLogger);
+    }
+
+    @WMSingleton
+    @Provides
+    static BubblePositioner provideBubblePositioner(Context context,
+            WindowManager windowManager) {
+        return new BubblePositioner(context, windowManager);
+    }
+
+    @WMSingleton
+    @Provides
+    static BubbleData provideBubbleData(Context context,
+            BubbleLogger logger,
+            BubblePositioner positioner,
+            @ShellMainThread ShellExecutor mainExecutor) {
+        return new BubbleData(context, logger, positioner, mainExecutor);
+    }
+
     // Note: Handler needed for LauncherApps.register
     @WMSingleton
     @Provides
     static BubbleController provideBubbleController(Context context,
+            ShellInit shellInit,
+            ShellController shellController,
+            BubbleData data,
             FloatingContentCoordinator floatingContentCoordinator,
             IStatusBarService statusBarService,
             WindowManager windowManager,
@@ -110,8 +150,9 @@
             UserManager userManager,
             LauncherApps launcherApps,
             TaskStackListenerImpl taskStackListener,
-            UiEventLogger uiEventLogger,
+            BubbleLogger logger,
             ShellTaskOrganizer organizer,
+            BubblePositioner positioner,
             DisplayController displayController,
             @DynamicOverride Optional<OneHandedController> oneHandedOptional,
             DragAndDropController dragAndDropController,
@@ -120,24 +161,81 @@
             @ShellBackgroundThread ShellExecutor bgExecutor,
             TaskViewTransitions taskViewTransitions,
             SyncTransactionQueue syncQueue) {
-        return BubbleController.create(context, null /* synchronizer */,
-                floatingContentCoordinator, statusBarService, windowManager,
-                windowManagerShellWrapper, userManager, launcherApps, taskStackListener,
-                uiEventLogger, organizer, displayController, oneHandedOptional,
-                dragAndDropController, mainExecutor, mainHandler, bgExecutor,
+        return new BubbleController(context, shellInit, shellController, data,
+                null /* synchronizer */, floatingContentCoordinator,
+                new BubbleDataRepository(context, launcherApps, mainExecutor),
+                statusBarService, windowManager, windowManagerShellWrapper, userManager,
+                launcherApps, logger, taskStackListener, organizer, positioner, displayController,
+                oneHandedOptional, dragAndDropController, mainExecutor, mainHandler, bgExecutor,
                 taskViewTransitions, syncQueue);
     }
 
     //
+    // Window decoration
+    //
+
+    @WMSingleton
+    @Provides
+    static WindowDecorViewModel<?> provideWindowDecorViewModel(
+            Context context,
+            @ShellMainThread Handler mainHandler,
+            @ShellMainThread Choreographer mainChoreographer,
+            ShellTaskOrganizer taskOrganizer,
+            DisplayController displayController,
+            SyncTransactionQueue syncQueue) {
+        return new CaptionWindowDecorViewModel(
+                        context,
+                        mainHandler,
+                        mainChoreographer,
+                        taskOrganizer,
+                        displayController,
+                        syncQueue);
+    }
+
+    //
     // Freeform
     //
 
     @WMSingleton
     @Provides
     @DynamicOverride
-    static FreeformTaskListener provideFreeformTaskListener(
-            SyncTransactionQueue syncQueue) {
-        return new FreeformTaskListener(syncQueue);
+    static FreeformComponents provideFreeformComponents(
+            FreeformTaskListener<?> taskListener,
+            FreeformTaskTransitionHandler transitionHandler) {
+        return new FreeformComponents(taskListener, Optional.of(transitionHandler));
+    }
+
+    @WMSingleton
+    @Provides
+    static FreeformTaskListener<?> provideFreeformTaskListener(
+            Context context,
+            ShellInit shellInit,
+            ShellTaskOrganizer shellTaskOrganizer,
+            WindowDecorViewModel<?> windowDecorViewModel) {
+        // TODO(b/238217847): Temporarily add this check here until we can remove the dynamic
+        //                    override for this controller from the base module
+        ShellInit init = FreeformComponents.isFreeformEnabled(context)
+                ? shellInit
+                : null;
+        return new FreeformTaskListener<>(init, shellTaskOrganizer,
+                windowDecorViewModel);
+    }
+
+    @WMSingleton
+    @Provides
+    static FreeformTaskTransitionHandler provideFreeformTaskTransitionHandler(
+            Context context,
+            ShellInit shellInit,
+            Transitions transitions,
+            WindowDecorViewModel<?> windowDecorViewModel,
+            FreeformTaskListener<?> freeformTaskListener) {
+        // TODO(b/238217847): Temporarily add this check here until we can remove the dynamic
+        //                    override for this controller from the base module
+        ShellInit init = FreeformComponents.isFreeformEnabled(context)
+                ? shellInit
+                : null;
+        return new FreeformTaskTransitionHandler(init, transitions,
+                windowDecorViewModel, freeformTaskListener);
     }
 
     //
@@ -150,12 +248,14 @@
     @Provides
     @DynamicOverride
     static OneHandedController provideOneHandedController(Context context,
+            ShellController shellController,
             WindowManager windowManager, DisplayController displayController,
             DisplayLayout displayLayout, TaskStackListenerImpl taskStackListener,
             UiEventLogger uiEventLogger, InteractionJankMonitor jankMonitor,
             @ShellMainThread ShellExecutor mainExecutor, @ShellMainThread Handler mainHandler) {
-        return OneHandedController.create(context, windowManager, displayController, displayLayout,
-                taskStackListener, jankMonitor, uiEventLogger, mainExecutor, mainHandler);
+        return OneHandedController.create(context, shellController, windowManager,
+                displayController, displayLayout, taskStackListener, jankMonitor, uiEventLogger,
+                mainExecutor, mainHandler);
     }
 
     //
@@ -166,45 +266,25 @@
     @Provides
     @DynamicOverride
     static SplitScreenController provideSplitScreenController(
+            Context context,
+            ShellInit shellInit,
+            ShellController shellController,
             ShellTaskOrganizer shellTaskOrganizer,
-            SyncTransactionQueue syncQueue, Context context,
+            SyncTransactionQueue syncQueue,
             RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer,
-            @ShellMainThread ShellExecutor mainExecutor,
             DisplayController displayController,
             DisplayImeController displayImeController,
-            DisplayInsetsController displayInsetsController, Transitions transitions,
-            TransactionPool transactionPool, IconProvider iconProvider,
+            DisplayInsetsController displayInsetsController,
+            DragAndDropController dragAndDropController,
+            Transitions transitions,
+            TransactionPool transactionPool,
+            IconProvider iconProvider,
             Optional<RecentTasksController> recentTasks,
-            Provider<Optional<StageTaskUnfoldController>> stageTaskUnfoldControllerProvider) {
-        return new SplitScreenController(shellTaskOrganizer, syncQueue, context,
-                rootTaskDisplayAreaOrganizer, mainExecutor, displayController, displayImeController,
-                displayInsetsController, transitions, transactionPool, iconProvider,
-                recentTasks, stageTaskUnfoldControllerProvider);
-    }
-
-    @WMSingleton
-    @Provides
-    static LegacySplitScreenController provideLegacySplitScreen(Context context,
-            DisplayController displayController, SystemWindows systemWindows,
-            DisplayImeController displayImeController, TransactionPool transactionPool,
-            ShellTaskOrganizer shellTaskOrganizer, SyncTransactionQueue syncQueue,
-            TaskStackListenerImpl taskStackListener, Transitions transitions,
-            @ShellMainThread ShellExecutor mainExecutor,
-            @ChoreographerSfVsync AnimationHandler sfVsyncAnimationHandler) {
-        return new LegacySplitScreenController(context, displayController, systemWindows,
-                displayImeController, transactionPool, shellTaskOrganizer, syncQueue,
-                taskStackListener, transitions, mainExecutor, sfVsyncAnimationHandler);
-    }
-
-    @WMSingleton
-    @Provides
-    static AppPairsController provideAppPairs(ShellTaskOrganizer shellTaskOrganizer,
-            SyncTransactionQueue syncQueue, DisplayController displayController,
-            @ShellMainThread ShellExecutor mainExecutor,
-            DisplayImeController displayImeController,
-            DisplayInsetsController displayInsetsController) {
-        return new AppPairsController(shellTaskOrganizer, syncQueue, displayController,
-                mainExecutor, displayImeController, displayInsetsController);
+            @ShellMainThread ShellExecutor mainExecutor) {
+        return new SplitScreenController(context, shellInit, shellController, shellTaskOrganizer,
+                syncQueue, rootTaskDisplayAreaOrganizer, displayController, displayImeController,
+                displayInsetsController, dragAndDropController, transitions, transactionPool,
+                iconProvider, recentTasks, mainExecutor);
     }
 
     //
@@ -213,19 +293,23 @@
 
     @WMSingleton
     @Provides
-    static Optional<Pip> providePip(Context context, DisplayController displayController,
+    static Optional<Pip> providePip(Context context,
+            ShellController shellController, DisplayController displayController,
             PipAppOpsListener pipAppOpsListener, PipBoundsAlgorithm pipBoundsAlgorithm,
-            PipBoundsState pipBoundsState, PipMediaController pipMediaController,
+            PipKeepClearAlgorithm pipKeepClearAlgorithm, PipBoundsState pipBoundsState,
+            PipMotionHelper pipMotionHelper, PipMediaController pipMediaController,
             PhonePipMenuController phonePipMenuController, PipTaskOrganizer pipTaskOrganizer,
+            PipTransitionState pipTransitionState,
             PipTouchHandler pipTouchHandler, PipTransitionController pipTransitionController,
             WindowManagerShellWrapper windowManagerShellWrapper,
             TaskStackListenerImpl taskStackListener,
             PipParamsChangedForwarder pipParamsChangedForwarder,
             Optional<OneHandedController> oneHandedController,
             @ShellMainThread ShellExecutor mainExecutor) {
-        return Optional.ofNullable(PipController.create(context, displayController,
-                pipAppOpsListener, pipBoundsAlgorithm, pipBoundsState,
-                pipMediaController, phonePipMenuController, pipTaskOrganizer,
+        return Optional.ofNullable(PipController.create(context, shellController, displayController,
+                pipAppOpsListener, pipBoundsAlgorithm, pipKeepClearAlgorithm, pipBoundsState,
+                pipMotionHelper,
+                pipMediaController, phonePipMenuController, pipTaskOrganizer, pipTransitionState,
                 pipTouchHandler, pipTransitionController, windowManagerShellWrapper,
                 taskStackListener, pipParamsChangedForwarder, oneHandedController, mainExecutor));
     }
@@ -244,6 +328,12 @@
 
     @WMSingleton
     @Provides
+    static PipKeepClearAlgorithm providePipKeepClearAlgorithm() {
+        return new PipKeepClearAlgorithm();
+    }
+
+    @WMSingleton
+    @Provides
     static PipBoundsAlgorithm providesPipBoundsAlgorithm(Context context,
             PipBoundsState pipBoundsState, PipSnapAlgorithm pipSnapAlgorithm) {
         return new PipBoundsAlgorithm(context, pipBoundsState, pipSnapAlgorithm);
@@ -266,14 +356,16 @@
     @WMSingleton
     @Provides
     static PipTouchHandler providePipTouchHandler(Context context,
-            PhonePipMenuController menuPhoneController, PipBoundsAlgorithm pipBoundsAlgorithm,
+            ShellInit shellInit,
+            PhonePipMenuController menuPhoneController,
+            PipBoundsAlgorithm pipBoundsAlgorithm,
             PipBoundsState pipBoundsState,
             PipTaskOrganizer pipTaskOrganizer,
             PipMotionHelper pipMotionHelper,
             FloatingContentCoordinator floatingContentCoordinator,
             PipUiEventLogger pipUiEventLogger,
             @ShellMainThread ShellExecutor mainExecutor) {
-        return new PipTouchHandler(context, menuPhoneController, pipBoundsAlgorithm,
+        return new PipTouchHandler(context, shellInit, menuPhoneController, pipBoundsAlgorithm,
                 pipBoundsState, pipTaskOrganizer, pipMotionHelper,
                 floatingContentCoordinator, pipUiEventLogger, mainExecutor);
     }
@@ -317,15 +409,15 @@
     @WMSingleton
     @Provides
     static PipTransitionController providePipTransitionController(Context context,
-            Transitions transitions, ShellTaskOrganizer shellTaskOrganizer,
+            ShellInit shellInit, ShellTaskOrganizer shellTaskOrganizer, Transitions transitions,
             PipAnimationController pipAnimationController, PipBoundsAlgorithm pipBoundsAlgorithm,
             PipBoundsState pipBoundsState, PipTransitionState pipTransitionState,
             PhonePipMenuController pipMenuController,
             PipSurfaceTransactionHelper pipSurfaceTransactionHelper,
             Optional<SplitScreenController> splitScreenOptional) {
-        return new PipTransition(context, pipBoundsState, pipTransitionState, pipMenuController,
-                pipBoundsAlgorithm, pipAnimationController, transitions, shellTaskOrganizer,
-                pipSurfaceTransactionHelper, splitScreenOptional);
+        return new PipTransition(context, shellInit, shellTaskOrganizer, transitions,
+                pipBoundsState, pipTransitionState, pipMenuController, pipBoundsAlgorithm,
+                pipAnimationController, pipSurfaceTransactionHelper, splitScreenOptional);
     }
 
     @WMSingleton
@@ -348,6 +440,27 @@
                 floatingContentCoordinator);
     }
 
+    @WMSingleton
+    @Provides
+    static PipParamsChangedForwarder providePipParamsChangedForwarder() {
+        return new PipParamsChangedForwarder();
+    }
+
+    //
+    // Transitions
+    //
+
+    @WMSingleton
+    @Provides
+    static SplitscreenPipMixedHandler provideSplitscreenPipMixedHandler(
+            ShellInit shellInit,
+            Optional<SplitScreenController> splitScreenOptional,
+            Optional<PipTouchHandler> pipTouchHandlerOptional,
+            Transitions transitions) {
+        return new SplitscreenPipMixedHandler(shellInit, splitScreenOptional,
+                pipTouchHandlerOptional, transitions);
+    }
+
     //
     // Unfold transition
     //
@@ -355,36 +468,80 @@
     @WMSingleton
     @Provides
     @DynamicOverride
-    static FullscreenUnfoldController provideFullscreenUnfoldController(
-            Context context,
+    static UnfoldAnimationController provideUnfoldAnimationController(
             Optional<ShellUnfoldProgressProvider> progressProvider,
-            Lazy<UnfoldBackgroundController> unfoldBackgroundController,
-            DisplayInsetsController displayInsetsController,
+            TransactionPool transactionPool,
+            @UnfoldTransition SplitTaskUnfoldAnimator splitAnimator,
+            FullscreenUnfoldTaskAnimator fullscreenAnimator,
+            Lazy<Optional<UnfoldTransitionHandler>> unfoldTransitionHandler,
+            ShellInit shellInit,
             @ShellMainThread ShellExecutor mainExecutor
     ) {
-        return new FullscreenUnfoldController(context, mainExecutor,
-                unfoldBackgroundController.get(), progressProvider.get(),
+        final List<UnfoldTaskAnimator> animators = new ArrayList<>();
+        animators.add(splitAnimator);
+        animators.add(fullscreenAnimator);
+
+        return new UnfoldAnimationController(
+                        shellInit,
+                        transactionPool,
+                        progressProvider.get(),
+                        animators,
+                        unfoldTransitionHandler,
+                        mainExecutor
+                );
+    }
+
+    @Provides
+    static FullscreenUnfoldTaskAnimator provideFullscreenUnfoldTaskAnimator(
+            Context context,
+            UnfoldBackgroundController unfoldBackgroundController,
+            DisplayInsetsController displayInsetsController
+    ) {
+        return new FullscreenUnfoldTaskAnimator(context, unfoldBackgroundController,
                 displayInsetsController);
     }
 
     @Provides
-    static Optional<StageTaskUnfoldController> provideStageTaskUnfoldController(
-            Optional<ShellUnfoldProgressProvider> progressProvider,
+    static SplitTaskUnfoldAnimator provideSplitTaskUnfoldAnimatorBase(
             Context context,
-            TransactionPool transactionPool,
-            Lazy<UnfoldBackgroundController> unfoldBackgroundController,
-            DisplayInsetsController displayInsetsController,
-            @ShellMainThread ShellExecutor mainExecutor
+            UnfoldBackgroundController backgroundController,
+            @ShellMainThread ShellExecutor executor,
+            Lazy<Optional<SplitScreenController>> splitScreenOptional,
+            DisplayInsetsController displayInsetsController
     ) {
-        return progressProvider.map(shellUnfoldTransitionProgressProvider ->
-                new StageTaskUnfoldController(
-                        context,
-                        transactionPool,
-                        shellUnfoldTransitionProgressProvider,
-                        displayInsetsController,
-                        unfoldBackgroundController.get(),
-                        mainExecutor
-                ));
+        // TODO(b/238217847): The lazy reference here causes some dependency issues since it
+        // immediately registers a listener on that controller on init.  We should reference the
+        // controller directly once we refactor ShellTaskOrganizer to not depend on the unfold
+        // animation controller directly.
+        return new SplitTaskUnfoldAnimator(context, executor, splitScreenOptional,
+                backgroundController, displayInsetsController);
+    }
+
+    @WMSingleton
+    @UnfoldShellTransition
+    @Binds
+    abstract SplitTaskUnfoldAnimator provideShellSplitTaskUnfoldAnimator(
+            SplitTaskUnfoldAnimator splitTaskUnfoldAnimator);
+
+    @WMSingleton
+    @UnfoldTransition
+    @Binds
+    abstract SplitTaskUnfoldAnimator provideSplitTaskUnfoldAnimator(
+            SplitTaskUnfoldAnimator splitTaskUnfoldAnimator);
+
+    @WMSingleton
+    @Provides
+    @DynamicOverride
+    static UnfoldTransitionHandler provideUnfoldTransitionHandler(
+            Optional<ShellUnfoldProgressProvider> progressProvider,
+            FullscreenUnfoldTaskAnimator animator,
+            @UnfoldShellTransition SplitTaskUnfoldAnimator unfoldAnimator,
+            TransactionPool transactionPool,
+            Transitions transitions,
+            @ShellMainThread ShellExecutor executor,
+            ShellInit shellInit) {
+        return new UnfoldTransitionHandler(shellInit, progressProvider.get(), animator,
+                unfoldAnimator, transactionPool, executor, transitions);
     }
 
     @WMSingleton
@@ -399,9 +556,17 @@
         );
     }
 
+    //
+    // Misc
+    //
+
+    // TODO: Temporarily move dependencies to this instead of ShellInit since that is needed to add
+    // the callback. We will be moving to a different explicit startup mechanism in a follow- up CL.
     @WMSingleton
+    @ShellCreateTriggerOverride
     @Provides
-    static PipParamsChangedForwarder providePipParamsChangedForwarder() {
-        return new PipParamsChangedForwarder();
+    static Object provideIndependentShellComponentsToCreate(
+            SplitscreenPipMixedHandler splitscreenPipMixedHandler) {
+        return new Object();
     }
 }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/docs/README.md b/libs/WindowManager/Shell/src/com/android/wm/shell/docs/README.md
new file mode 100644
index 0000000..73a7348
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/docs/README.md
@@ -0,0 +1,18 @@
+# Window Manager Shell Readme
+
+The following docs present more detail about the implementation of the WMShell library (in no
+particular order):
+
+1) [What is the Shell](overview.md)
+2) [Integration with SystemUI & Launcher](sysui.md)
+3) [Usage of Dagger](dagger.md)
+4) [Threading model in the Shell](threading.md)
+5) [Making changes in the Shell](changes.md)
+6) [Extending the Shell for Products/OEMs](extending.md)
+7) [Debugging in the Shell](debugging.md)
+8) [Testing in the Shell](testing.md)
+
+Todo
+- Per-feature docs
+- Feature flagging
+- Best practices
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/docs/changes.md b/libs/WindowManager/Shell/src/com/android/wm/shell/docs/changes.md
new file mode 100644
index 0000000..2aa933d
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/docs/changes.md
@@ -0,0 +1,87 @@
+# Making changes in the Shell
+
+---
+
+## Code reviews
+
+In addition to the individual reviewers who are most familiar with the changes you are making,
+please also add [wm-code-reviewers@google.com](http://g/wm-code-reviewers) to keep other WM folks
+in the loop.
+
+## Adding new code
+
+### Internal Shell utility classes
+If the new component is used only within the WMShell library, then there are no special
+considerations, go ahead and add it (in the `com.android.wm.shell.common` package for example)
+and make sure the appropriate [unit tests](testing.md) are added.
+
+### Internal Shell components
+If the new component is to be used by other components/features within the Shell library, then
+you can create an appropriate package for this component to add your new code. The current
+pattern is to have a single `<Component name>Controller` that handles the initialization of the
+component.
+
+As mentioned in the [Dagger usage](dagger.md) docs, you need to determine whether it should go into:
+- `WMShellBaseModule` for components that other base & product components will depend on
+- or `WMShellModule`, `TvWmShellModule`, etc. for product specific components that no base
+  components depend on
+
+### SysUI accessible components
+In addition to doing the above, you will also need to provide an interface for calling to SysUI
+from the Shell and vice versa.  The current pattern is to have a parallel `Optional<Component name>`
+interface that the `<Component name>Controller` implements and handles on the main Shell thread.
+
+In addition, because components accessible to SysUI injection are explicitly listed, you'll have to
+add an appropriate method in `WMComponent` to get the interface and update the `Builder` in
+`SysUIComponent` to take the interface so it can be injected in SysUI code.  The binding between
+the two is done in `SystemUIFactory#init()` which will need to be updated as well.
+
+### Launcher accessible components
+Because Launcher is not a part of SystemUI and is a separate process, exposing controllers to
+Launcher requires a new AIDL interface to be created and implemented by the controller.  The
+implementation of the stub interface in the controller otherwise behaves similar to the interface
+to SysUI where it posts the work to the main Shell thread.
+
+### Component initialization
+To initialize the component:
+- On the Shell side, you potentially need to do two things to initialize the component:
+  - Inject `ShellInit` into your component and add an init callback
+  - Ensure that your component is a part of the dagger dependency graph, either by:
+    - Making this component a dependency of an existing component already exposed to SystemUI
+    - Explicitly add this component to the WMShellBaseModule @ShellCreateTrigger provider or
+      the @ShellCreateTriggerOverride provider for your product module to expose it explicitly 
+      if it is a completely independent component
+- On the SysUI side, update `WMShell` to setup any bindings for the component that depend on
+  SysUI code
+
+To verify that your component is being initialized at startup, you can enable the `WM_SHELL_INIT` 
+protolog group and restart the SysUI process:
+```shell
+adb shell wm logging enable-text WM_SHELL_INIT
+adb shell kill `pid com.android.systemui`
+adb logcat *:S WindowManagerShell
+```
+
+### General Do's & Dont's
+Do:
+- Do add unit tests for all new components
+- Do keep controllers simple and break them down as needed
+
+Don't:
+- **Don't** do initialization in the constructor, only do initialization in the init callbacks.
+  Otherwise it complicates the building of the dependency graph.
+- **Don't** create dependencies from base-module components on specific features (the base module
+  is intended for use with all products)
+  - Try adding a mechanism to register and listen for changes from the base module component instead
+- **Don't** add blocking synchronous calls in the SysUI interface between Shell & SysUI
+  - Try adding a push-mechanism to share data, or an async callback to request data
+
+### Exposing shared code for use in Launcher
+Launcher doesn't currently build against the Shell library, but needs to have access to some shared
+AIDL interfaces and constants.  Currently, all AIDL files, and classes under the
+`com.android.wm.shell.util` package are automatically built into the `SystemUISharedLib` that
+Launcher uses.
+
+If the new code doesn't fall into those categories, they can be added explicitly in the Shell's
+[Android.bp](frameworks/base/libs/WindowManager/Shell/Android.bp) file under the
+`wm_shell_util-sources` filegroup.
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/docs/dagger.md b/libs/WindowManager/Shell/src/com/android/wm/shell/docs/dagger.md
new file mode 100644
index 0000000..6c01d96
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/docs/dagger.md
@@ -0,0 +1,50 @@
+# Usage of Dagger in the Shell library
+
+---
+
+## Dependencies
+
+Dagger is not required to use the Shell library, but it has a lot of obvious benefits:
+
+- Not having to worry about how to instantiate all the dependencies of a class, especially as
+  dependencies evolve (ie. product controller depends on base controller)
+- Can create boundaries within the same app to encourage better code modularity
+
+As such, the Shell also tries to provide some reasonable out-of-the-box modules for use with Dagger.
+
+## Modules
+
+All the Dagger related code in the Shell can be found in the `com.android.wm.shell.dagger` package,
+this is intentional as it keeps the "magic" in a single location.  The explicit nature of how
+components in the shell are provided is as a result a bit more verbose, but it makes it easy for
+developers to jump into a few select files and understand how different components are provided
+(especially as products override components).
+
+The module dependency tree looks a bit like:
+- [WMShellConcurrencyModule](frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellConcurrencyModule.java)
+  (provides threading-related components)
+  - [WMShellBaseModule](frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java)
+    (provides components that are likely common to all products, ie. DisplayController,
+    Transactions, etc.)
+    - [WMShellModule](frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java)
+      (phone/tablet specific components only)
+    - [TvPipModule](frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/TvPipModule.java)
+      (PIP specific components for TV)
+      - [TvWMShellModule](frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/TvWMShellModule.java)
+        (TV specific components only)
+  - etc.
+
+Ideally features could be abstracted out into their own modules and included as needed by each
+product.
+
+## Overriding base components
+
+In some rare cases, there are base components that can change behavior depending on which
+product it runs on.  If there are hooks that can be added to the component, that is the
+preferable approach.
+
+The alternative is to use the [@DynamicOverride](frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/DynamicOverride.java)
+annotation to allow the product module to provide an implementation that the base module can
+reference.  This is most useful if the existence of the entire component is controlled by the
+product and the override implementation is optional (there is a default implementation).  More
+details can be found in the class's javadoc.
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/docs/debugging.md b/libs/WindowManager/Shell/src/com/android/wm/shell/docs/debugging.md
new file mode 100644
index 0000000..52f0c42
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/docs/debugging.md
@@ -0,0 +1,69 @@
+# Debugging in the Shell
+
+---
+
+## Logging & ProtoLogs
+
+The interactions in the Shell can be pretty complicated, so having good logging is crucial to
+debugging problems that arise (especially in dogfood).  The Shell uses the same efficient Protolog
+mechanism as WM Core, which can be enabled at runtime on debug devices.
+
+**TLDR**&nbsp; Don’t use Logs or Slogs except for error cases, Protologs are much more flexible,
+easy to add and easy to use
+
+### Adding a new ProtoLog
+Update `ShellProtoLogGroup` to include a new log group (ie. NEW_FEATURE) for the content you want to
+log.  ProtoLog log calls mirror Log.v/d/e(), and take a format message and arguments:
+```java
+ProtoLog.v(NEW_FEATURE, "Test log w/ params: %d %s", 1, “a”)
+```
+This code itself will not compile by itself, but the `protologtool` will preprocess the file when
+building to check the log state (is enabled) before printing the print format style log.
+
+**Notes**
+- ProtoLogs currently only work from soong builds (ie. via make/mp). We need to reimplement the
+  tool for use with SysUI-studio
+- Non-text ProtoLogs are not currently supported with the Shell library (you can't view them with
+  traces in Winscope)
+
+### Enabling ProtoLog command line logging
+Run these commands to enable protologs for both WM Core and WM Shell to print to logcat.
+```shell
+adb shell wm logging enable-text NEW_FEATURE
+adb shell wm logging disable-text NEW_FEATURE
+```
+
+## Winscope Tracing
+
+The Winscope tool is extremely useful in determining what is happening on-screen in both
+WindowManager and SurfaceFlinger.  Follow [go/winscope](http://go/winscope-help) to learn how to
+use the tool.
+
+In addition, there is limited preliminary support for Winscope tracing componetns in the Shell,
+which involves adding trace fields to [wm_shell_trace.proto](frameworks/base/libs/WindowManager/Shell/proto/wm_shell_trace.proto)
+file and ensure it is updated as a part of `WMShell#writeToProto`.
+
+Tracing can be started via the shell command (to be added to the Winscope tool as needed):
+```shell
+adb shell cmd statusbar tracing start
+adb shell cmd statusbar tracing stop
+```
+
+## Dumps
+
+Because the Shell library is built as a part of SystemUI, dumping the state is currently done as a
+part of dumping the SystemUI service.  Dumping the Shell specific data can be done by specifying the
+WMShell SysUI service:
+
+```shell
+adb shell dumpsys activity service SystemUIService WMShell
+```
+
+If information should be added to the dump, make updates to:
+- `WMShell` if you are dumping SysUI state
+- `ShellCommandHandler` if you are dumping Shell state
+
+## Debugging in Android Studio
+
+If you are using the [go/sysui-studio](http://go/sysui-studio) project, then you can debug Shell
+code directly from Android Studio like any other app.
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/docs/extending.md b/libs/WindowManager/Shell/src/com/android/wm/shell/docs/extending.md
new file mode 100644
index 0000000..061ae00e
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/docs/extending.md
@@ -0,0 +1,13 @@
+# Extending the Shell for Products/OEMs
+
+---
+
+## General Do's & Dont's
+
+Do:
+- &nbsp;
+
+Don't
+- **Don't** override classes provided by WMShellBaseModule, it makes it difficult to make
+  simple changes to the Shell library base modules which are shared by all products
+  - If possible add mechanisms to modify the base class behavior
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/docs/overview.md b/libs/WindowManager/Shell/src/com/android/wm/shell/docs/overview.md
new file mode 100644
index 0000000..a88ef6a
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/docs/overview.md
@@ -0,0 +1,58 @@
+# What is the WindowManager Shell
+
+---
+
+## Motivation
+
+The primary motivation for the WindowManager Shell (WMShell) library is to effectively scale
+WindowManager by making it easy&trade; and safe to create windowing features to fit the needs of
+various Android products and form factors.
+
+To achieve this, WindowManager separates the policy of managing windows (WMCore) from the
+presentation of surfaces (WMShell) and provides a minimal interface boundary for the two to
+communicate.
+
+## Who is using the library?
+
+Currently, the WMShell library is used to drive the windowing experience on handheld
+(phones & tablets), TV, Auto, Arc++, and Wear to varying degrees.
+
+## Where does the code live
+
+The core WMShell library code is currently located in the [frameworks/base/libs/WindowManager/Shell](frameworks/base/libs/WindowManager/Shell)
+directory and is included as a part dependency of the host SystemUI apk.
+
+## How do I build the Shell library
+
+The library can be built directly by running (using [go/makepush](http://go/makepush)):
+```shell
+mp :WindowManager-Shell
+```
+But this is mainly useful for inspecting the contents of the library or verifying it builds. The
+various targets can be found in the Shell library's [Android.bp](frameworks/base/libs/WindowManager/Shell/Android.bp)
+file.
+
+Normally, you would build it as a part of the host SystemUI, for example via commandline:
+```shell
+# Phone SystemUI variant
+mp sysuig
+# Building Shell & SysUI changes along w/ framework changes
+mp core services sysuig
+```
+
+Or preferably, if you are making WMShell/SysUI only changes (no other framework changes), then
+building via [go/sysui-studio](http://go/sysui-studio) allows for very quick iteration (one click
+build and push of SysUI in < 30s).
+
+If you are making framework changes and are using `aidegen` to set up your platform IDE, make sure
+to include the appropriate directories to build, for example:
+```shell
+# frameworks/base will include base/libs/WindowManager/Shell and base/packages/SystemUI
+aidegen frameworks/base \
+    vendor/<oem>/packages/SystemUI \
+    ...
+```
+
+## Other useful links
+- [go/o-o-summit-20](go/o-o-summit-20) (Video presentations from the WM team)
+- [go/o-o-summit-21](go/o-o-summit-21)
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/docs/sysui.md b/libs/WindowManager/Shell/src/com/android/wm/shell/docs/sysui.md
new file mode 100644
index 0000000..0dd50b1
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/docs/sysui.md
@@ -0,0 +1,65 @@
+# Shell & SystemUI
+
+---
+
+## Setup
+
+The SystemUI of various products depend on and build against the WM Shell library. To ensure
+that we don't inadvertently build dependencies between the Shell library and one particular
+product (ie. handheld SysUI), we deliberately separate the initialization of the WM Shell
+component from the SysUI component when set up through Dagger.
+
+**TLDR**&nbsp; Initialize everything as needed in the WM component scope and export only well
+defined interfaces to SysUI.
+
+## Initialization
+
+There are more details in the Dagger docs, but the general overview of the SysUI/Shell
+initialization flow is such:
+
+1) SysUI Global scope is initialize (see `GlobalModule` and its included modules)
+2) WM Shell scope is initialized, for example
+   1) On phones: `WMComponent` includes `WMShellModule` which includes `WMShellBaseModule`
+      (common to all SysUI)
+   2) On TVs: `TvWMComponent` includes `TvWMShellModule` which includes `WMShellBaseModule`
+   3) etc.
+3) SysUI explicitly passes interfaces provided from the `WMComponent` to `SysUIComponent` via
+   the `SysUIComponent#Builder`, then builds the SysUI scoped components
+4) `WMShell` is the SystemUI “service” (in the SysUI scope) that initializes with the app after the
+SystemUI part of the dependency graph has been created. It contains the binding code between the
+interfaces provided by the Shell and the rest of SystemUI.
+5) SysUI can inject the interfaces into its own components
+
+More detail can be found in [go/wm-sysui-dagger](http://go/wm-sysui-dagger).
+
+## Interfaces to Shell components
+
+Within the same process, the WM Shell components can be running on a different thread than the main
+SysUI thread (disabled on certain products).  This introduces challenges where we have to be
+careful about how SysUI calls into the Shell and vice versa.
+
+As a result, we enforce explicit interfaces between SysUI and Shell components, and the
+implementations of the interfaces on each side need to post to the right thread before it calls
+into other code.
+
+For example, you might have:
+1) (Shell) ShellFeature interface to be used from SysUI
+2) (Shell) ShellFeatureController handles logic, implements ShellFeature interface and posts to
+   main Shell thread
+3) SysUI application init injects Optional<ShellFeature> as an interface to SysUI to call
+4) (SysUI) SysUIFeature depends on ShellFeature interface
+5) (SysUI) SysUIFeature injects Optional<ShellFeature>, and sets up a callback for the Shell to
+   call, and the callback posts to the main SysUI thread
+
+Adding an interface to a Shell component may seem like a lot of boiler plate, but is currently
+necessary to maintain proper threading and logic isolation.
+
+## Configuration changes & other SysUI events
+
+Aside from direct calls into Shell controllers for exposed features, the Shell also receives 
+common event callbacks from SysUI via the `ShellController`.  This includes things like:
+
+- Configuration changes
+- TODO: Shell init
+- TODO: Shell command
+- TODO: Keyguard events
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/docs/testing.md b/libs/WindowManager/Shell/src/com/android/wm/shell/docs/testing.md
new file mode 100644
index 0000000..8a80333
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/docs/testing.md
@@ -0,0 +1,49 @@
+# Testing
+
+---
+
+## Unit tests
+
+New WM Shell unit tests can be added to the
+[Shell/tests/unittest](frameworks/base/libs/WindowManager/Shell/tests/unittest) directory, and can
+be run via command line using `atest`:
+```shell
+atest WMShellUnitTests
+```
+
+If you use the SysUI Studio project, you can run and debug tests directly in the source files
+(click on the little arrows next to the test class or test method).
+
+These unit tests are run as a part of WindowManager presubmit, and the dashboards for these unit
+tests tests can be found at [go/wm-tests](http://go/wm-tests).
+
+This [GCL file](http://go/wm-unit-tests-gcl) configures the tests being run on the server.
+
+## Flicker tests
+
+Flicker tests are tests that perform actions and make assertions on the state in Window Manager
+and SurfaceFlinger traces captured during the run.
+
+New WM Shell Flicker tests can be added to the
+[Shell/tests/flicker](frameworks/base/libs/WindowManager/Shell/tests/flicker) directory, and can
+be run via command line using `atest`:
+```shell
+atest WMShellFlickerTests
+```
+
+**Note**: Currently Flicker tests can only be run from the commandline and not via SysUI Studio
+
+A subset of the flicker tests tests are run as a part of WindowManager presubmit, and the
+dashboards for these tests tests can be found at [go/wm-tests-flicker](http://go/wm-tests-flicker).
+
+## CTS tests
+
+Some windowing features also have CTS tests to ensure consistent behavior across OEMs.  For example:
+- Picture-in-Picture:
+  [PinnedStackTests](cts/tests/framework/base/windowmanager/src/android/server/wm/PinnedStackTests.java)
+- etc.
+
+These can also be run via commandline only using `atest`, for example:
+```shell
+atest PinnedStackTests
+```
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/docs/threading.md b/libs/WindowManager/Shell/src/com/android/wm/shell/docs/threading.md
new file mode 100644
index 0000000..eac74889
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/docs/threading.md
@@ -0,0 +1,83 @@
+# Threading
+
+---
+
+## Boundaries
+
+```text
+                                    Thread boundary
+                                          |
+                                WM Shell  | SystemUI
+                                          |
+                                          |
+FeatureController <-> FeatureInterface <--|--> WMShell <-> SysUI
+       |          (^post to shell thread) |            (^post to main thread)
+      ...                                 |
+       |                                  |
+ OtherControllers                         |
+```
+
+## Threads
+
+We currently have multiple threads in use in the Shell library depending on the configuration by
+the product.
+- SysUI main thread (standard main thread)
+- `ShellMainThread` (only used if the resource `config_enableShellMainThread` is set true
+  (ie. phones))
+  - This falls back to the SysUI main thread otherwise
+  - **Note**:
+    - This thread runs with `THREAD_PRIORITY_DISPLAY` priority since so many windowing-critical
+      components depend on it
+    - This is also the UI thread for almost all UI created by the Shell
+    - The Shell main thread Handler (and the Executor that wraps it) is async, so
+      messages/runnables used via this Handler are handled immediately if there is no sync
+      messages prior to it in the queue.
+- `ShellBackgroundThread` (for longer running tasks where we don't want to block the shell main
+  thread)
+  - This is always another thread even if config_enableShellMainThread is not set true
+  - **Note**:
+    - This thread runs with `THREAD_PRIORITY_BACKGROUND` priority
+- `ShellAnimationThread` (currently only used for Transitions and Splitscreen, but potentially all
+  animations could be offloaded here)
+- `ShellSplashScreenThread` (only for use with splashscreens)
+
+## Dagger setup
+
+The threading-related components are provided by the [WMShellConcurrencyModule](frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellConcurrencyModule.java),
+for example, the Executors and Handlers for the various threads that are used.  You can request
+an executor of the necessary type by using the appropriate annotation for each of the threads (ie.
+`@ShellMainThread Executor`) when injecting into your Shell component.
+
+To get the SysUI main thread, you can use the `@Main` annotation.
+
+## Best practices
+
+### Components
+- Don't do initialization in the Shell component constructors
+  - If the host SysUI is not careful, it may construct the WMComponent dependencies on the main
+    thread, and this reduces the likelihood that components will intiailize on the wrong thread
+    in such cases
+- Be careful of using CountDownLatch and other blocking synchronization mechanisms in Shell code
+  - If the Shell main thread is not a separate thread, this will cause a deadlock
+- Callbacks, Observers, Listeners to any non-shell component should post onto main Shell thread
+  - This includes Binder calls, SysUI calls, BroadcastReceivers, etc. Basically any API that
+    takes a runnable should either be registered with the right Executor/Handler or posted to
+    the main Shell thread manually
+- Since everything in the Shell runs on the main Shell thread, you do **not** need to explicitly
+  `synchronize` your code (unless you are trying to prevent reentrantcy, but that can also be
+  done in other ways)
+
+### Handlers/Executors
+- You generally **never** need to create Handlers explicitly, instead inject `@ShellMainThread
+  ShellExecutor` instead
+  - This is a common pattern to defer logic in UI code, but the Handler created wraps the Looper
+    that is currently running, which can be wrong (see above for initialization vs construction)
+- That said, sometimes Handlers are necessary because Framework API only takes Handlers or you
+  want to dedupe multiple messages
+  - In such cases inject `@ShellMainThread Handler` or use view.getHandler() which should be OK
+    assuming that the view root was initialized on the main Shell thread
+- **Never use Looper.getMainLooper()**
+  - It's likely going to be wrong, you can inject `@Main ShellExecutor` to get the SysUI main thread
+
+### Testing
+- You can use a `TestShellExecutor` to control the processing of messages
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDrop.java b/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDrop.java
deleted file mode 100644
index edeff6e3..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDrop.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.draganddrop;
-
-import android.content.res.Configuration;
-
-import com.android.wm.shell.common.annotations.ExternalThread;
-
-/**
- * Interface for telling DragAndDrop stuff.
- */
-@ExternalThread
-public interface DragAndDrop {
-
-    /** Called when the theme changes. */
-    void onThemeChanged();
-
-    /** Called when the configuration changes. */
-    void onConfigChanged(Configuration newConfig);
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDropController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDropController.java
index 95de2dc6..4697a01 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDropController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDropController.java
@@ -60,29 +60,30 @@
 import com.android.wm.shell.common.ShellExecutor;
 import com.android.wm.shell.protolog.ShellProtoLogGroup;
 import com.android.wm.shell.splitscreen.SplitScreenController;
+import com.android.wm.shell.sysui.ConfigurationChangeListener;
+import com.android.wm.shell.sysui.ShellController;
+import com.android.wm.shell.sysui.ShellInit;
 
 import java.util.ArrayList;
-import java.util.Optional;
 
 /**
  * Handles the global drag and drop handling for the Shell.
  */
 public class DragAndDropController implements DisplayController.OnDisplaysChangedListener,
-        View.OnDragListener {
+        View.OnDragListener, ConfigurationChangeListener {
 
     private static final String TAG = DragAndDropController.class.getSimpleName();
 
     private final Context mContext;
+    private final ShellController mShellController;
     private final DisplayController mDisplayController;
     private final DragAndDropEventLogger mLogger;
     private final IconProvider mIconProvider;
     private SplitScreenController mSplitScreen;
     private ShellExecutor mMainExecutor;
-    private DragAndDropImpl mImpl;
     private ArrayList<DragAndDropListener> mListeners = new ArrayList<>();
 
     private final SparseArray<PerDisplay> mDisplayDropTargets = new SparseArray<>();
-    private final SurfaceControl.Transaction mTransaction = new SurfaceControl.Transaction();
 
     /**
      * Listener called during drag events, currently just onDragStarted.
@@ -92,23 +93,40 @@
         void onDragStarted();
     }
 
-    public DragAndDropController(Context context, DisplayController displayController,
-            UiEventLogger uiEventLogger, IconProvider iconProvider, ShellExecutor mainExecutor) {
+    public DragAndDropController(Context context,
+            ShellInit shellInit,
+            ShellController shellController,
+            DisplayController displayController,
+            UiEventLogger uiEventLogger,
+            IconProvider iconProvider,
+            ShellExecutor mainExecutor) {
         mContext = context;
+        mShellController = shellController;
         mDisplayController = displayController;
         mLogger = new DragAndDropEventLogger(uiEventLogger);
         mIconProvider = iconProvider;
         mMainExecutor = mainExecutor;
-        mImpl = new DragAndDropImpl();
+        shellInit.addInitCallback(this::onInit, this);
     }
 
-    public DragAndDrop asDragAndDrop() {
-        return mImpl;
+    /**
+     * Called when the controller is initialized.
+     */
+    public void onInit() {
+        // TODO(b/238217847): The dependency from SplitscreenController on DragAndDropController is
+        // inverted, which leads to SplitscreenController not setting its instance until after
+        // onDisplayAdded.  We can remove this post once we fix that dependency.
+        mMainExecutor.executeDelayed(() -> {
+            mDisplayController.addDisplayWindowListener(this);
+        }, 0);
+        mShellController.addConfigurationChangeListener(this);
     }
 
-    public void initialize(Optional<SplitScreenController> splitscreen) {
-        mSplitScreen = splitscreen.orElse(null);
-        mDisplayController.addDisplayWindowListener(this);
+    /**
+     * Sets the splitscreen controller to use if the feature is available.
+     */
+    public void setSplitScreenController(SplitScreenController splitscreen) {
+        mSplitScreen = splitscreen;
     }
 
     /** Adds a listener to be notified of drag and drop events. */
@@ -310,13 +328,15 @@
         return mimeTypes;
     }
 
-    private void onThemeChange() {
+    @Override
+    public void onThemeChanged() {
         for (int i = 0; i < mDisplayDropTargets.size(); i++) {
             mDisplayDropTargets.get(i).dragLayout.onThemeChange();
         }
     }
 
-    private void onConfigChanged(Configuration newConfig) {
+    @Override
+    public void onConfigurationChanged(Configuration newConfig) {
         for (int i = 0; i < mDisplayDropTargets.size(); i++) {
             mDisplayDropTargets.get(i).dragLayout.onConfigChanged(newConfig);
         }
@@ -342,21 +362,4 @@
             dragLayout = dl;
         }
     }
-
-    private class DragAndDropImpl implements DragAndDrop {
-
-        @Override
-        public void onThemeChanged() {
-            mMainExecutor.execute(() -> {
-                DragAndDropController.this.onThemeChange();
-            });
-        }
-
-        @Override
-        public void onConfigChanged(Configuration newConfig) {
-            mMainExecutor.execute(() -> {
-                DragAndDropController.this.onConfigChanged(newConfig);
-            });
-        }
-    }
 }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDropPolicy.java b/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDropPolicy.java
index 7568310..435d8ea 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDropPolicy.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/draganddrop/DragAndDropPolicy.java
@@ -45,12 +45,10 @@
 import android.content.ActivityNotFoundException;
 import android.content.ClipData;
 import android.content.ClipDescription;
-import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
 import android.content.pm.LauncherApps;
-import android.content.pm.ResolveInfo;
 import android.graphics.Insets;
 import android.graphics.Rect;
 import android.os.Bundle;
@@ -64,11 +62,9 @@
 import androidx.annotation.VisibleForTesting;
 
 import com.android.internal.logging.InstanceId;
-import com.android.internal.protolog.common.ProtoLog;
 import com.android.wm.shell.R;
 import com.android.wm.shell.common.DisplayLayout;
 import com.android.wm.shell.common.split.SplitScreenConstants.SplitPosition;
-import com.android.wm.shell.protolog.ShellProtoLogGroup;
 import com.android.wm.shell.splitscreen.SplitScreenController;
 
 import java.lang.annotation.Retention;
@@ -267,50 +263,11 @@
             mStarter.startShortcut(packageName, id, position, opts, user);
         } else {
             final PendingIntent launchIntent = intent.getParcelableExtra(EXTRA_PENDING_INTENT);
-            mStarter.startIntent(launchIntent, getStartIntentFillInIntent(launchIntent, position),
-                    position, opts);
+            mStarter.startIntent(launchIntent, null /* fillIntent */, position, opts);
         }
     }
 
     /**
-     * Returns the fill-in intent to use when starting an app from a drop.
-     */
-    @VisibleForTesting
-    Intent getStartIntentFillInIntent(PendingIntent launchIntent, @SplitPosition int position) {
-        // Get the drag app
-        final List<ResolveInfo> infos = launchIntent.queryIntentComponents(0 /* flags */);
-        final ComponentName dragIntentActivity = !infos.isEmpty()
-                ? infos.get(0).activityInfo.getComponentName()
-                : null;
-
-        // Get the current app (either fullscreen or the remaining app post-drop if in splitscreen)
-        final boolean inSplitScreen = mSplitScreen != null
-                && mSplitScreen.isSplitScreenVisible();
-        final ComponentName currentActivity;
-        if (!inSplitScreen) {
-            currentActivity = mSession.runningTaskInfo != null
-                    ? mSession.runningTaskInfo.baseActivity
-                    : null;
-        } else {
-            final int nonReplacedSplitPosition = position == SPLIT_POSITION_TOP_OR_LEFT
-                    ? SPLIT_POSITION_BOTTOM_OR_RIGHT
-                    : SPLIT_POSITION_TOP_OR_LEFT;
-            ActivityManager.RunningTaskInfo nonReplacedTaskInfo =
-                    mSplitScreen.getTaskInfo(nonReplacedSplitPosition);
-            currentActivity = nonReplacedTaskInfo.baseActivity;
-        }
-
-        if (currentActivity.equals(dragIntentActivity)) {
-            // Only apply MULTIPLE_TASK if we are dragging the same activity
-            final Intent fillInIntent = new Intent();
-            fillInIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
-            ProtoLog.v(ShellProtoLogGroup.WM_SHELL_DRAG_AND_DROP, "Adding MULTIPLE_TASK");
-            return fillInIntent;
-        }
-        return null;
-    }
-
-    /**
      * Per-drag session data.
      */
     private static class DragSession {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformComponents.java b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformComponents.java
new file mode 100644
index 0000000..41e1b1d
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformComponents.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.freeform;
+
+import static android.content.pm.PackageManager.FEATURE_FREEFORM_WINDOW_MANAGEMENT;
+import static android.provider.Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT;
+
+import android.content.Context;
+import android.provider.Settings;
+
+import com.android.wm.shell.ShellTaskOrganizer;
+import com.android.wm.shell.transition.Transitions;
+
+import java.util.Optional;
+
+/**
+ * Class that holds freeform related classes. It serves as the single injection point of
+ * all freeform classes to avoid leaking implementation details to the base Dagger module.
+ */
+public class FreeformComponents {
+    public final ShellTaskOrganizer.TaskListener mTaskListener;
+    public final Optional<Transitions.TransitionHandler> mTaskTransitionHandler;
+
+    /**
+     * Creates an instance with the given components.
+     */
+    public FreeformComponents(
+            ShellTaskOrganizer.TaskListener taskListener,
+            Optional<Transitions.TransitionHandler> taskTransitionHandler) {
+        mTaskListener = taskListener;
+        mTaskTransitionHandler = taskTransitionHandler;
+    }
+
+    /**
+     * Returns if this device supports freeform.
+     */
+    public static boolean isFreeformEnabled(Context context) {
+        return context.getPackageManager().hasSystemFeature(FEATURE_FREEFORM_WINDOW_MANAGEMENT)
+                || Settings.Global.getInt(context.getContentResolver(),
+                DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT, 0) != 0;
+    }
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskListener.java b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskListener.java
index fef9be3..ab66107 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskListener.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskListener.java
@@ -16,97 +16,130 @@
 
 package com.android.wm.shell.freeform;
 
-import static android.content.pm.PackageManager.FEATURE_FREEFORM_WINDOW_MANAGEMENT;
-import static android.provider.Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT;
+import static com.android.wm.shell.ShellTaskOrganizer.TASK_LISTENER_TYPE_FREEFORM;
 
 import android.app.ActivityManager.RunningTaskInfo;
-import android.content.Context;
-import android.graphics.Point;
-import android.graphics.Rect;
-import android.provider.Settings;
-import android.util.Slog;
+import android.util.Log;
 import android.util.SparseArray;
 import android.view.SurfaceControl;
+import android.window.TransitionInfo;
+
+import androidx.annotation.Nullable;
 
 import com.android.internal.protolog.common.ProtoLog;
 import com.android.wm.shell.ShellTaskOrganizer;
-import com.android.wm.shell.common.SyncTransactionQueue;
 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.windowdecor.WindowDecorViewModel;
 
 import java.io.PrintWriter;
 
 /**
  * {@link ShellTaskOrganizer.TaskListener} for {@link
  * ShellTaskOrganizer#TASK_LISTENER_TYPE_FREEFORM}.
+ *
+ * @param <T> the type of window decoration instance
  */
-public class FreeformTaskListener implements ShellTaskOrganizer.TaskListener {
+public class FreeformTaskListener<T extends AutoCloseable>
+        implements ShellTaskOrganizer.TaskListener {
     private static final String TAG = "FreeformTaskListener";
 
-    private final SyncTransactionQueue mSyncQueue;
+    private final ShellTaskOrganizer mShellTaskOrganizer;
+    private final WindowDecorViewModel<T> mWindowDecorationViewModel;
 
-    private final SparseArray<State> mTasks = new SparseArray<>();
+    private final SparseArray<State<T>> mTasks = new SparseArray<>();
+    private final SparseArray<T> mWindowDecorOfVanishedTasks = new SparseArray<>();
 
-    private static class State {
+    private static class State<T extends AutoCloseable> {
         RunningTaskInfo mTaskInfo;
         SurfaceControl mLeash;
+        T mWindowDecoration;
     }
 
-    public FreeformTaskListener(SyncTransactionQueue syncQueue) {
-        mSyncQueue = syncQueue;
+    public FreeformTaskListener(
+            ShellInit shellInit,
+            ShellTaskOrganizer shellTaskOrganizer,
+            WindowDecorViewModel<T> windowDecorationViewModel) {
+        mShellTaskOrganizer = shellTaskOrganizer;
+        mWindowDecorationViewModel = windowDecorationViewModel;
+        if (shellInit != null) {
+            shellInit.addInitCallback(this::onInit, this);
+        }
+    }
+
+    private void onInit() {
+        mShellTaskOrganizer.addListenerForType(this, TASK_LISTENER_TYPE_FREEFORM);
     }
 
     @Override
     public void onTaskAppeared(RunningTaskInfo taskInfo, SurfaceControl leash) {
-        if (mTasks.get(taskInfo.taskId) != null) {
-            throw new RuntimeException("Task appeared more than once: #" + taskInfo.taskId);
-        }
         ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TASK_ORG, "Freeform Task Appeared: #%d",
                 taskInfo.taskId);
-        final State state = new State();
+        final State<T> state = createOrUpdateTaskState(taskInfo, leash);
+        if (!Transitions.ENABLE_SHELL_TRANSITIONS) {
+            SurfaceControl.Transaction t = new SurfaceControl.Transaction();
+            state.mWindowDecoration =
+                    mWindowDecorationViewModel.createWindowDecoration(taskInfo, leash, t, t);
+            t.apply();
+        }
+    }
+
+    private State<T> createOrUpdateTaskState(RunningTaskInfo taskInfo, SurfaceControl leash) {
+        State<T> state = mTasks.get(taskInfo.taskId);
+        if (state != null) {
+            updateTaskInfo(taskInfo);
+            return state;
+        }
+
+        state = new State<>();
         state.mTaskInfo = taskInfo;
         state.mLeash = leash;
         mTasks.put(taskInfo.taskId, state);
 
-        final Rect taskBounds = taskInfo.configuration.windowConfiguration.getBounds();
-        mSyncQueue.runInSync(t -> {
-            Point taskPosition = taskInfo.positionInParent;
-            t.setPosition(leash, taskPosition.x, taskPosition.y)
-                    .setWindowCrop(leash, taskBounds.width(), taskBounds.height())
-                    .show(leash);
-        });
+        return state;
     }
 
     @Override
     public void onTaskVanished(RunningTaskInfo taskInfo) {
-        State state = mTasks.get(taskInfo.taskId);
+        final State<T> state = mTasks.get(taskInfo.taskId);
         if (state == null) {
-            Slog.e(TAG, "Task already vanished: #" + taskInfo.taskId);
+            // This is possible if the transition happens before this method.
             return;
         }
         ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TASK_ORG, "Freeform Task Vanished: #%d",
                 taskInfo.taskId);
         mTasks.remove(taskInfo.taskId);
+
+        if (Transitions.ENABLE_SHELL_TRANSITIONS) {
+            // Save window decorations of closing tasks so that we can hand them over to the
+            // transition system if this method happens before the transition. In case where the
+            // transition didn't happen, it'd be cleared when the next transition finished.
+            if (state.mWindowDecoration != null) {
+                mWindowDecorOfVanishedTasks.put(taskInfo.taskId, state.mWindowDecoration);
+            }
+            return;
+        }
+        releaseWindowDecor(state.mWindowDecoration);
     }
 
     @Override
     public void onTaskInfoChanged(RunningTaskInfo taskInfo) {
-        State state = mTasks.get(taskInfo.taskId);
-        if (state == null) {
-            throw new RuntimeException(
-                    "Task info changed before appearing: #" + taskInfo.taskId);
-        }
+        final State<T> state = updateTaskInfo(taskInfo);
         ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TASK_ORG, "Freeform Task Info Changed: #%d",
                 taskInfo.taskId);
-        state.mTaskInfo = taskInfo;
+        if (state.mWindowDecoration != null) {
+            mWindowDecorationViewModel.onTaskInfoChanged(state.mTaskInfo, state.mWindowDecoration);
+        }
+    }
 
-        final Rect taskBounds = taskInfo.configuration.windowConfiguration.getBounds();
-        final SurfaceControl leash = state.mLeash;
-        mSyncQueue.runInSync(t -> {
-            Point taskPosition = taskInfo.positionInParent;
-            t.setPosition(leash, taskPosition.x, taskPosition.y)
-                    .setWindowCrop(leash, taskBounds.width(), taskBounds.height())
-                    .show(leash);
-        });
+    private State<T> updateTaskInfo(RunningTaskInfo taskInfo) {
+        final State<T> state = mTasks.get(taskInfo.taskId);
+        if (state == null) {
+            throw new RuntimeException("Task info changed before appearing: #" + taskInfo.taskId);
+        }
+        state.mTaskInfo = taskInfo;
+        return state;
     }
 
     @Override
@@ -127,6 +160,93 @@
         return mTasks.get(taskId).mLeash;
     }
 
+    /**
+     * Creates a window decoration for a transition.
+     *
+     * @param change the change of this task transition that needs to have the task layer as the
+     *               leash
+     * @return {@code true} if it adopts the window decoration; {@code false} otherwise
+     */
+    void createWindowDecoration(
+            TransitionInfo.Change change,
+            SurfaceControl.Transaction startT,
+            SurfaceControl.Transaction finishT) {
+        final State<T> state = createOrUpdateTaskState(change.getTaskInfo(), change.getLeash());
+        state.mWindowDecoration = mWindowDecorationViewModel.createWindowDecoration(
+                state.mTaskInfo, state.mLeash, startT, finishT);
+    }
+
+    /**
+     * Gives out the ownership of the task's window decoration. The given task is leaving (of has
+     * left) this task listener. This is the transition system asking for the ownership.
+     *
+     * @param taskInfo the maximizing task
+     * @return the window decor of the maximizing task if any
+     */
+    T giveWindowDecoration(
+            RunningTaskInfo taskInfo,
+            SurfaceControl.Transaction startT,
+            SurfaceControl.Transaction finishT) {
+        T windowDecor = mWindowDecorOfVanishedTasks.get(taskInfo.taskId);
+        mWindowDecorOfVanishedTasks.remove(taskInfo.taskId);
+        final State<T> state = mTasks.get(taskInfo.taskId);
+        if (state != null) {
+            windowDecor = windowDecor == null ? state.mWindowDecoration : windowDecor;
+            state.mWindowDecoration = null;
+        }
+        mWindowDecorationViewModel.setupWindowDecorationForTransition(
+                taskInfo, startT, finishT, windowDecor);
+        return windowDecor;
+    }
+
+    /**
+     * Adopt the incoming window decoration and lets the window decoration prepare for a transition.
+     *
+     * @param change the change of this task transition that needs to have the task layer as the
+     *               leash
+     * @param startT the start transaction of this transition
+     * @param finishT the finish transaction of this transition
+     * @param windowDecor the window decoration to adopt
+     * @return {@code true} if it adopts the window decoration; {@code false} otherwise
+     */
+    boolean adoptWindowDecoration(
+            TransitionInfo.Change change,
+            SurfaceControl.Transaction startT,
+            SurfaceControl.Transaction finishT,
+            @Nullable AutoCloseable windowDecor) {
+        final State<T> state = createOrUpdateTaskState(change.getTaskInfo(), change.getLeash());
+        state.mWindowDecoration = mWindowDecorationViewModel.adoptWindowDecoration(windowDecor);
+        if (state.mWindowDecoration != null) {
+            mWindowDecorationViewModel.setupWindowDecorationForTransition(
+                    state.mTaskInfo, startT, finishT, state.mWindowDecoration);
+            return true;
+        } else {
+            state.mWindowDecoration = mWindowDecorationViewModel.createWindowDecoration(
+                    state.mTaskInfo, state.mLeash, startT, finishT);
+            return false;
+        }
+    }
+
+    void onTaskTransitionFinished() {
+        if (mWindowDecorOfVanishedTasks.size() == 0) {
+            return;
+        }
+        Log.w(TAG, "Clearing window decors of vanished tasks. There could be visual defects "
+                + "if any of them is used later in transitions.");
+        for (int i = 0; i < mWindowDecorOfVanishedTasks.size(); ++i) {
+            releaseWindowDecor(mWindowDecorOfVanishedTasks.valueAt(i));
+        }
+        mWindowDecorOfVanishedTasks.clear();
+    }
+
+    private void releaseWindowDecor(T windowDecor) {
+        try {
+            windowDecor.close();
+        } catch (Exception e) {
+            Log.e(TAG, "Failed to release window decoration.", e);
+        }
+    }
+
     @Override
     public void dump(PrintWriter pw, String prefix) {
         final String innerPrefix = prefix + "  ";
@@ -138,16 +258,4 @@
     public String toString() {
         return TAG;
     }
-
-    /**
-     * Checks if freeform support is enabled in system.
-     *
-     * @param context context used to check settings and package manager.
-     * @return {@code true} if freeform is enabled, {@code false} if not.
-     */
-    public static boolean isFreeformEnabled(Context context) {
-        return context.getPackageManager().hasSystemFeature(FEATURE_FREEFORM_WINDOW_MANAGEMENT)
-                || Settings.Global.getInt(context.getContentResolver(),
-                DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT, 0) != 0;
-    }
 }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionHandler.java
new file mode 100644
index 0000000..af205ed
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionHandler.java
@@ -0,0 +1,246 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.freeform;
+
+import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
+import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
+
+import android.app.ActivityManager;
+import android.app.WindowConfiguration;
+import android.os.IBinder;
+import android.util.Log;
+import android.view.SurfaceControl;
+import android.view.WindowManager;
+import android.window.TransitionInfo;
+import android.window.TransitionRequestInfo;
+import android.window.WindowContainerTransaction;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.android.wm.shell.sysui.ShellInit;
+import com.android.wm.shell.transition.Transitions;
+import com.android.wm.shell.windowdecor.WindowDecorViewModel;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * The {@link Transitions.TransitionHandler} that handles freeform task launches, closes,
+ * maximizing and restoring transitions. It also reports transitions so that window decorations can
+ * be a part of transitions.
+ */
+public class FreeformTaskTransitionHandler
+        implements Transitions.TransitionHandler, FreeformTaskTransitionStarter {
+    private static final String TAG = "FreeformTH";
+
+    private final Transitions mTransitions;
+    private final FreeformTaskListener<?> mFreeformTaskListener;
+    private final WindowDecorViewModel<?> mWindowDecorViewModel;
+
+    private final List<IBinder> mPendingTransitionTokens = new ArrayList<>();
+
+    public FreeformTaskTransitionHandler(
+            ShellInit shellInit,
+            Transitions transitions,
+            WindowDecorViewModel<?> windowDecorViewModel,
+            FreeformTaskListener<?> freeformTaskListener) {
+        mTransitions = transitions;
+        mFreeformTaskListener = freeformTaskListener;
+        mWindowDecorViewModel = windowDecorViewModel;
+        if (shellInit != null && Transitions.ENABLE_SHELL_TRANSITIONS) {
+            shellInit.addInitCallback(this::onInit, this);
+        }
+    }
+
+    private void onInit() {
+        mWindowDecorViewModel.setFreeformTaskTransitionStarter(this);
+        mTransitions.addHandler(this);
+    }
+
+    @Override
+    public void startWindowingModeTransition(
+            int targetWindowingMode, WindowContainerTransaction wct) {
+        final int type;
+        switch (targetWindowingMode) {
+            case WINDOWING_MODE_FULLSCREEN:
+                type = Transitions.TRANSIT_MAXIMIZE;
+                break;
+            case WINDOWING_MODE_FREEFORM:
+                type = Transitions.TRANSIT_RESTORE_FROM_MAXIMIZE;
+                break;
+            default:
+                throw new IllegalArgumentException("Unexpected target windowing mode "
+                        + WindowConfiguration.windowingModeToString(targetWindowingMode));
+        }
+        final IBinder token = mTransitions.startTransition(type, wct, this);
+        mPendingTransitionTokens.add(token);
+    }
+
+    @Override
+    public boolean startAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
+            @NonNull SurfaceControl.Transaction startT,
+            @NonNull SurfaceControl.Transaction finishT,
+            @NonNull Transitions.TransitionFinishCallback finishCallback) {
+        boolean transitionHandled = false;
+        final ArrayList<AutoCloseable> windowDecorsInCloseTransitions = new ArrayList<>();
+        for (TransitionInfo.Change change : info.getChanges()) {
+            if ((change.getFlags() & TransitionInfo.FLAG_IS_WALLPAPER) != 0) {
+                continue;
+            }
+
+            final ActivityManager.RunningTaskInfo taskInfo = change.getTaskInfo();
+            if (taskInfo == null || taskInfo.taskId == -1) {
+                continue;
+            }
+
+            switch (change.getMode()) {
+                case WindowManager.TRANSIT_OPEN:
+                    transitionHandled |= startOpenTransition(change, startT, finishT);
+                    break;
+                case WindowManager.TRANSIT_CLOSE:
+                    transitionHandled |= startCloseTransition(
+                            change, windowDecorsInCloseTransitions, startT, finishT);
+                    break;
+                case WindowManager.TRANSIT_CHANGE:
+                    transitionHandled |= startChangeTransition(
+                            transition, info.getType(), change, startT, finishT);
+                    break;
+                case WindowManager.TRANSIT_TO_BACK:
+                case WindowManager.TRANSIT_TO_FRONT:
+                    break;
+            }
+        }
+
+        mPendingTransitionTokens.remove(transition);
+
+        if (!transitionHandled) {
+            return false;
+        }
+
+        startT.apply();
+        mTransitions.getMainExecutor().execute(
+                () -> finishTransition(windowDecorsInCloseTransitions, finishCallback));
+        return true;
+    }
+
+    private boolean startOpenTransition(
+            TransitionInfo.Change change,
+            SurfaceControl.Transaction startT,
+            SurfaceControl.Transaction finishT) {
+        if (change.getTaskInfo().getWindowingMode() != WINDOWING_MODE_FREEFORM) {
+            return false;
+        }
+        mFreeformTaskListener.createWindowDecoration(change, startT, finishT);
+
+        // Intercepted transition to manage the window decorations. Let other handlers animate.
+        return false;
+    }
+
+    private boolean startCloseTransition(
+            TransitionInfo.Change change,
+            ArrayList<AutoCloseable> windowDecors,
+            SurfaceControl.Transaction startT,
+            SurfaceControl.Transaction finishT) {
+        if (change.getTaskInfo().getWindowingMode() != WINDOWING_MODE_FREEFORM) {
+            return false;
+        }
+        final AutoCloseable windowDecor =
+                mFreeformTaskListener.giveWindowDecoration(change.getTaskInfo(), startT, finishT);
+        if (windowDecor != null) {
+            windowDecors.add(windowDecor);
+        }
+
+        // Intercepted transition to manage the window decorations. Let other handlers animate.
+        return false;
+    }
+
+    private boolean startChangeTransition(
+            IBinder transition,
+            int type,
+            TransitionInfo.Change change,
+            SurfaceControl.Transaction startT,
+            SurfaceControl.Transaction finishT) {
+        AutoCloseable windowDecor = null;
+
+        if (!mPendingTransitionTokens.contains(transition)) {
+            return false;
+        }
+
+        boolean handled = false;
+        final ActivityManager.RunningTaskInfo taskInfo = change.getTaskInfo();
+        if (type == Transitions.TRANSIT_MAXIMIZE
+                && taskInfo.getWindowingMode() == WINDOWING_MODE_FULLSCREEN) {
+            handled = true;
+            windowDecor = mFreeformTaskListener.giveWindowDecoration(
+                    change.getTaskInfo(), startT, finishT);
+            // TODO(b/235638450): Let fullscreen task listener adopt the window decor.
+        }
+
+        if (type == Transitions.TRANSIT_RESTORE_FROM_MAXIMIZE
+                && taskInfo.getWindowingMode() == WINDOWING_MODE_FREEFORM) {
+            handled = true;
+            // TODO(b/235638450): Let fullscreen task listener transfer the window decor.
+            mFreeformTaskListener.adoptWindowDecoration(change, startT, finishT, windowDecor);
+        }
+
+        releaseWindowDecor(windowDecor);
+
+        return handled;
+    }
+
+    private void finishTransition(
+            ArrayList<AutoCloseable> windowDecorsInCloseTransitions,
+            Transitions.TransitionFinishCallback finishCallback) {
+        for (AutoCloseable windowDecor : windowDecorsInCloseTransitions) {
+            releaseWindowDecor(windowDecor);
+        }
+        mFreeformTaskListener.onTaskTransitionFinished();
+        // TODO(b/235638450): Dispatch it to fullscreen task listener.
+        finishCallback.onTransitionFinished(null, null);
+    }
+
+    private void releaseWindowDecor(AutoCloseable windowDecor) {
+        if (windowDecor == null) {
+            return;
+        }
+        try {
+            windowDecor.close();
+        } catch (Exception e) {
+            Log.e(TAG, "Failed to release window decoration.", e);
+        }
+    }
+
+    @Nullable
+    @Override
+    public WindowContainerTransaction handleRequest(@NonNull IBinder transition,
+            @NonNull TransitionRequestInfo request) {
+        final ActivityManager.RunningTaskInfo taskInfo = request.getTriggerTask();
+        if (taskInfo == null || taskInfo.getWindowingMode() != WINDOWING_MODE_FREEFORM) {
+            return null;
+        }
+        switch (request.getType()) {
+            case WindowManager.TRANSIT_OPEN:
+            case WindowManager.TRANSIT_CLOSE:
+            case WindowManager.TRANSIT_TO_FRONT:
+            case WindowManager.TRANSIT_TO_BACK:
+                return new WindowContainerTransaction();
+            default:
+                return null;
+        }
+    }
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionStarter.java b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionStarter.java
new file mode 100644
index 0000000..25eaa0e
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionStarter.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.freeform;
+
+import android.window.WindowContainerTransaction;
+
+/**
+ * The interface around {@link FreeformTaskTransitionHandler} for task listeners to start freeform
+ * task transitions.
+ */
+public interface FreeformTaskTransitionStarter {
+
+    /**
+     * Starts a windowing mode transition.
+     *
+     * @param targetWindowingMode the target windowing mode
+     * @param wct the {@link WindowContainerTransaction} that changes the windowing mode
+     */
+    void startWindowingModeTransition(int targetWindowingMode, WindowContainerTransaction wct);
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/fullscreen/FullscreenTaskListener.java b/libs/WindowManager/Shell/src/com/android/wm/shell/fullscreen/FullscreenTaskListener.java
index 73e6cba..0ba4afc 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/fullscreen/FullscreenTaskListener.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/fullscreen/FullscreenTaskListener.java
@@ -16,17 +16,13 @@
 
 package com.android.wm.shell.fullscreen;
 
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
-
 import static com.android.wm.shell.ShellTaskOrganizer.TASK_LISTENER_TYPE_FULLSCREEN;
 import static com.android.wm.shell.ShellTaskOrganizer.taskListenerTypeToString;
 
 import android.app.ActivityManager.RunningTaskInfo;
-import android.app.TaskInfo;
 import android.graphics.Point;
 import android.util.Slog;
 import android.util.SparseArray;
-import android.util.SparseBooleanArray;
 import android.view.SurfaceControl;
 
 import androidx.annotation.NonNull;
@@ -36,6 +32,7 @@
 import com.android.wm.shell.common.SyncTransactionQueue;
 import com.android.wm.shell.protolog.ShellProtoLogGroup;
 import com.android.wm.shell.recents.RecentTasksController;
+import com.android.wm.shell.sysui.ShellInit;
 import com.android.wm.shell.transition.Transitions;
 
 import java.io.PrintWriter;
@@ -47,24 +44,34 @@
 public class FullscreenTaskListener implements ShellTaskOrganizer.TaskListener {
     private static final String TAG = "FullscreenTaskListener";
 
+    private final ShellTaskOrganizer mShellTaskOrganizer;
     private final SyncTransactionQueue mSyncQueue;
-    private final FullscreenUnfoldController mFullscreenUnfoldController;
     private final Optional<RecentTasksController> mRecentTasksOptional;
 
     private final SparseArray<TaskData> mDataByTaskId = new SparseArray<>();
-    private final AnimatableTasksListener mAnimatableTasksListener = new AnimatableTasksListener();
 
-    public FullscreenTaskListener(SyncTransactionQueue syncQueue,
-            Optional<FullscreenUnfoldController> unfoldController) {
-        this(syncQueue, unfoldController, Optional.empty());
+    /**
+     * This constructor is used by downstream products.
+     */
+    public FullscreenTaskListener(SyncTransactionQueue syncQueue) {
+        this(null /* shellInit */, null /* shellTaskOrganizer */, syncQueue, Optional.empty());
     }
 
-    public FullscreenTaskListener(SyncTransactionQueue syncQueue,
-            Optional<FullscreenUnfoldController> unfoldController,
-            Optional<RecentTasksController> recentTasks) {
+    public FullscreenTaskListener(ShellInit shellInit,
+            ShellTaskOrganizer shellTaskOrganizer,
+            SyncTransactionQueue syncQueue,
+            Optional<RecentTasksController> recentTasksOptional) {
+        mShellTaskOrganizer = shellTaskOrganizer;
         mSyncQueue = syncQueue;
-        mFullscreenUnfoldController = unfoldController.orElse(null);
-        mRecentTasksOptional = recentTasks;
+        mRecentTasksOptional = recentTasksOptional;
+        // Note: Some derivative FullscreenTaskListener implementations do not use ShellInit
+        if (shellInit != null) {
+            shellInit.addInitCallback(this::onInit, this);
+        }
+    }
+
+    private void onInit() {
+        mShellTaskOrganizer.addListenerForType(this, TASK_LISTENER_TYPE_FULLSCREEN);
     }
 
     @Override
@@ -76,6 +83,7 @@
                 taskInfo.taskId);
         final Point positionInParent = taskInfo.positionInParent;
         mDataByTaskId.put(taskInfo.taskId, new TaskData(leash, positionInParent));
+
         if (Transitions.ENABLE_SHELL_TRANSITIONS) return;
         mSyncQueue.runInSync(t -> {
             // Reset several properties back to fullscreen (PiP, for example, leaves all these
@@ -87,7 +95,6 @@
             t.show(leash);
         });
 
-        mAnimatableTasksListener.onTaskAppeared(taskInfo);
         updateRecentsForVisibleFullscreenTask(taskInfo);
     }
 
@@ -95,7 +102,6 @@
     public void onTaskInfoChanged(RunningTaskInfo taskInfo) {
         if (Transitions.ENABLE_SHELL_TRANSITIONS) return;
 
-        mAnimatableTasksListener.onTaskInfoChanged(taskInfo);
         updateRecentsForVisibleFullscreenTask(taskInfo);
 
         final TaskData data = mDataByTaskId.get(taskInfo.taskId);
@@ -115,7 +121,6 @@
             return;
         }
 
-        mAnimatableTasksListener.onTaskVanished(taskInfo);
         mDataByTaskId.remove(taskInfo.taskId);
 
         ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TASK_ORG, "Fullscreen Task Vanished: #%d",
@@ -173,65 +178,4 @@
             this.positionInParent = positionInParent;
         }
     }
-
-    class AnimatableTasksListener {
-        private final SparseBooleanArray mTaskIds = new SparseBooleanArray();
-
-        public void onTaskAppeared(RunningTaskInfo taskInfo) {
-            final boolean isApplicable = isAnimatable(taskInfo);
-            if (isApplicable) {
-                mTaskIds.put(taskInfo.taskId, true);
-
-                if (mFullscreenUnfoldController != null) {
-                    SurfaceControl leash = mDataByTaskId.get(taskInfo.taskId).surface;
-                    mFullscreenUnfoldController.onTaskAppeared(taskInfo, leash);
-                }
-            }
-        }
-
-        public void onTaskInfoChanged(RunningTaskInfo taskInfo) {
-            final boolean isCurrentlyApplicable = mTaskIds.get(taskInfo.taskId);
-            final boolean isApplicable = isAnimatable(taskInfo);
-
-            if (isCurrentlyApplicable) {
-                if (isApplicable) {
-                    // Still applicable, send update
-                    if (mFullscreenUnfoldController != null) {
-                        mFullscreenUnfoldController.onTaskInfoChanged(taskInfo);
-                    }
-                } else {
-                    // Became inapplicable
-                    if (mFullscreenUnfoldController != null) {
-                        mFullscreenUnfoldController.onTaskVanished(taskInfo);
-                    }
-                    mTaskIds.put(taskInfo.taskId, false);
-                }
-            } else {
-                if (isApplicable) {
-                    // Became applicable
-                    mTaskIds.put(taskInfo.taskId, true);
-
-                    if (mFullscreenUnfoldController != null) {
-                        SurfaceControl leash = mDataByTaskId.get(taskInfo.taskId).surface;
-                        mFullscreenUnfoldController.onTaskAppeared(taskInfo, leash);
-                    }
-                }
-            }
-        }
-
-        public void onTaskVanished(RunningTaskInfo taskInfo) {
-            final boolean isCurrentlyApplicable = mTaskIds.get(taskInfo.taskId);
-            if (isCurrentlyApplicable && mFullscreenUnfoldController != null) {
-                mFullscreenUnfoldController.onTaskVanished(taskInfo);
-            }
-            mTaskIds.put(taskInfo.taskId, false);
-        }
-
-        private boolean isAnimatable(TaskInfo taskInfo) {
-            // Filter all visible tasks that are not launcher tasks
-            // We do not animate launcher as it handles the animation by itself
-            return taskInfo != null && taskInfo.isVisible && taskInfo.getConfiguration()
-                    .windowConfiguration.getActivityType() != ACTIVITY_TYPE_HOME;
-        }
-    }
 }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/fullscreen/FullscreenUnfoldController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/fullscreen/FullscreenUnfoldController.java
deleted file mode 100644
index aa3868c..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/fullscreen/FullscreenUnfoldController.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.fullscreen;
-
-import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
-import static android.util.MathUtils.lerp;
-import static android.view.Display.DEFAULT_DISPLAY;
-
-import android.animation.RectEvaluator;
-import android.animation.TypeEvaluator;
-import android.annotation.NonNull;
-import android.app.ActivityManager;
-import android.app.TaskInfo;
-import android.content.Context;
-import android.graphics.Matrix;
-import android.graphics.Rect;
-import android.util.SparseArray;
-import android.view.InsetsSource;
-import android.view.InsetsState;
-import android.view.SurfaceControl;
-
-import com.android.internal.policy.ScreenDecorationsUtils;
-import com.android.wm.shell.common.DisplayInsetsController;
-import com.android.wm.shell.common.DisplayInsetsController.OnInsetsChangedListener;
-import com.android.wm.shell.unfold.ShellUnfoldProgressProvider;
-import com.android.wm.shell.unfold.ShellUnfoldProgressProvider.UnfoldListener;
-import com.android.wm.shell.unfold.UnfoldBackgroundController;
-
-import java.util.concurrent.Executor;
-
-/**
- * Controls full screen app unfold transition: animating cropping window and scaling when
- * folding or unfolding a foldable device.
- */
-public final class FullscreenUnfoldController implements UnfoldListener,
-        OnInsetsChangedListener {
-
-    private static final float[] FLOAT_9 = new float[9];
-    private static final TypeEvaluator<Rect> RECT_EVALUATOR = new RectEvaluator(new Rect());
-
-    private static final float HORIZONTAL_START_MARGIN = 0.08f;
-    private static final float VERTICAL_START_MARGIN = 0.03f;
-    private static final float END_SCALE = 1f;
-    private static final float START_SCALE = END_SCALE - VERTICAL_START_MARGIN * 2;
-
-    private final Executor mExecutor;
-    private final ShellUnfoldProgressProvider mProgressProvider;
-    private final DisplayInsetsController mDisplayInsetsController;
-
-    private final SparseArray<AnimationContext> mAnimationContextByTaskId = new SparseArray<>();
-    private final UnfoldBackgroundController mBackgroundController;
-
-    private InsetsSource mTaskbarInsetsSource;
-
-    private final float mWindowCornerRadiusPx;
-    private final float mExpandedTaskBarHeight;
-
-    private final SurfaceControl.Transaction mTransaction = new SurfaceControl.Transaction();
-
-    public FullscreenUnfoldController(
-            @NonNull Context context,
-            @NonNull Executor executor,
-            @NonNull UnfoldBackgroundController backgroundController,
-            @NonNull ShellUnfoldProgressProvider progressProvider,
-            @NonNull DisplayInsetsController displayInsetsController
-    ) {
-        mExecutor = executor;
-        mProgressProvider = progressProvider;
-        mDisplayInsetsController = displayInsetsController;
-        mWindowCornerRadiusPx = ScreenDecorationsUtils.getWindowCornerRadius(context);
-        mExpandedTaskBarHeight = context.getResources().getDimensionPixelSize(
-                com.android.internal.R.dimen.taskbar_frame_height);
-        mBackgroundController = backgroundController;
-    }
-
-    /**
-     * Initializes the controller
-     */
-    public void init() {
-        mProgressProvider.addListener(mExecutor, this);
-        mDisplayInsetsController.addInsetsChangedListener(DEFAULT_DISPLAY, this);
-    }
-
-    @Override
-    public void onStateChangeProgress(float progress) {
-        if (mAnimationContextByTaskId.size() == 0) return;
-
-        mBackgroundController.ensureBackground(mTransaction);
-
-        for (int i = mAnimationContextByTaskId.size() - 1; i >= 0; i--) {
-            final AnimationContext context = mAnimationContextByTaskId.valueAt(i);
-
-            context.mCurrentCropRect.set(RECT_EVALUATOR
-                    .evaluate(progress, context.mStartCropRect, context.mEndCropRect));
-
-            float scale = lerp(START_SCALE, END_SCALE, progress);
-            context.mMatrix.setScale(scale, scale, context.mCurrentCropRect.exactCenterX(),
-                    context.mCurrentCropRect.exactCenterY());
-
-            mTransaction.setWindowCrop(context.mLeash, context.mCurrentCropRect)
-                    .setMatrix(context.mLeash, context.mMatrix, FLOAT_9)
-                    .setCornerRadius(context.mLeash, mWindowCornerRadiusPx);
-        }
-
-        mTransaction.apply();
-    }
-
-    @Override
-    public void onStateChangeFinished() {
-        for (int i = mAnimationContextByTaskId.size() - 1; i >= 0; i--) {
-            final AnimationContext context = mAnimationContextByTaskId.valueAt(i);
-            resetSurface(context);
-        }
-
-        mBackgroundController.removeBackground(mTransaction);
-        mTransaction.apply();
-    }
-
-    @Override
-    public void insetsChanged(InsetsState insetsState) {
-        mTaskbarInsetsSource = insetsState.getSource(InsetsState.ITYPE_EXTRA_NAVIGATION_BAR);
-        for (int i = mAnimationContextByTaskId.size() - 1; i >= 0; i--) {
-            AnimationContext context = mAnimationContextByTaskId.valueAt(i);
-            context.update(mTaskbarInsetsSource, context.mTaskInfo);
-        }
-    }
-
-    /**
-     * Called when a new matching task appeared
-     */
-    public void onTaskAppeared(ActivityManager.RunningTaskInfo taskInfo, SurfaceControl leash) {
-        AnimationContext animationContext = new AnimationContext(leash, mTaskbarInsetsSource,
-                taskInfo);
-        mAnimationContextByTaskId.put(taskInfo.taskId, animationContext);
-    }
-
-    /**
-     * Called when matching task changed
-     */
-    public void onTaskInfoChanged(ActivityManager.RunningTaskInfo taskInfo) {
-        AnimationContext animationContext = mAnimationContextByTaskId.get(taskInfo.taskId);
-        if (animationContext != null) {
-            animationContext.update(mTaskbarInsetsSource, taskInfo);
-        }
-    }
-
-    /**
-     * Called when matching task vanished
-     */
-    public void onTaskVanished(ActivityManager.RunningTaskInfo taskInfo) {
-        AnimationContext animationContext = mAnimationContextByTaskId.get(taskInfo.taskId);
-        if (animationContext != null) {
-            // PiP task has its own cleanup path, ignore surface reset to avoid conflict.
-            if (taskInfo.getWindowingMode() != WINDOWING_MODE_PINNED) {
-                resetSurface(animationContext);
-            }
-            mAnimationContextByTaskId.remove(taskInfo.taskId);
-        }
-
-        if (mAnimationContextByTaskId.size() == 0) {
-            mBackgroundController.removeBackground(mTransaction);
-        }
-
-        mTransaction.apply();
-    }
-
-    private void resetSurface(AnimationContext context) {
-        mTransaction
-                .setWindowCrop(context.mLeash, null)
-                .setCornerRadius(context.mLeash, 0.0F)
-                .setMatrix(context.mLeash, 1.0F, 0.0F, 0.0F, 1.0F)
-                .setPosition(context.mLeash,
-                        (float) context.mTaskInfo.positionInParent.x,
-                        (float) context.mTaskInfo.positionInParent.y);
-    }
-
-    private class AnimationContext {
-        final SurfaceControl mLeash;
-        final Rect mStartCropRect = new Rect();
-        final Rect mEndCropRect = new Rect();
-        final Rect mCurrentCropRect = new Rect();
-        final Matrix mMatrix = new Matrix();
-
-        TaskInfo mTaskInfo;
-
-        private AnimationContext(SurfaceControl leash,
-                                InsetsSource taskBarInsetsSource,
-                                TaskInfo taskInfo) {
-            this.mLeash = leash;
-            update(taskBarInsetsSource, taskInfo);
-        }
-
-        private void update(InsetsSource taskBarInsetsSource, TaskInfo taskInfo) {
-            mTaskInfo = taskInfo;
-            mStartCropRect.set(mTaskInfo.getConfiguration().windowConfiguration.getBounds());
-
-            if (taskBarInsetsSource != null) {
-                // Only insets the cropping window with task bar when it's expanded
-                if (taskBarInsetsSource.getFrame().height() >= mExpandedTaskBarHeight) {
-                    mStartCropRect.inset(taskBarInsetsSource
-                            .calculateVisibleInsets(mStartCropRect));
-                }
-            }
-
-            mEndCropRect.set(mStartCropRect);
-
-            int horizontalMargin = (int) (mEndCropRect.width() * HORIZONTAL_START_MARGIN);
-            mStartCropRect.left = mEndCropRect.left + horizontalMargin;
-            mStartCropRect.right = mEndCropRect.right - horizontalMargin;
-            int verticalMargin = (int) (mEndCropRect.height() * VERTICAL_START_MARGIN);
-            mStartCropRect.top = mEndCropRect.top + verticalMargin;
-            mStartCropRect.bottom = mEndCropRect.bottom - verticalMargin;
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutout.java b/libs/WindowManager/Shell/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutout.java
deleted file mode 100644
index 60123ab..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutout.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.hidedisplaycutout;
-
-import android.content.res.Configuration;
-
-import androidx.annotation.NonNull;
-
-import com.android.wm.shell.common.annotations.ExternalThread;
-
-import java.io.PrintWriter;
-
-/**
- * Interface to engage hide display cutout feature.
- */
-@ExternalThread
-public interface HideDisplayCutout {
-    /**
-     * Notifies {@link Configuration} changed.
-     */
-    void onConfigurationChanged(Configuration newConfig);
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutController.java
index 23f76ca5..665b035 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutController.java
@@ -19,7 +19,6 @@
 import android.content.Context;
 import android.content.res.Configuration;
 import android.os.SystemProperties;
-import android.util.Slog;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -27,20 +26,20 @@
 
 import com.android.wm.shell.common.DisplayController;
 import com.android.wm.shell.common.ShellExecutor;
+import com.android.wm.shell.sysui.ConfigurationChangeListener;
+import com.android.wm.shell.sysui.ShellController;
 
 import java.io.PrintWriter;
-import java.util.concurrent.TimeUnit;
 
 /**
  * Manages the hide display cutout status.
  */
-public class HideDisplayCutoutController {
+public class HideDisplayCutoutController implements ConfigurationChangeListener {
     private static final String TAG = "HideDisplayCutoutController";
 
     private final Context mContext;
+    private final ShellController mShellController;
     private final HideDisplayCutoutOrganizer mOrganizer;
-    private final ShellExecutor mMainExecutor;
-    private final HideDisplayCutoutImpl mImpl = new HideDisplayCutoutImpl();
     @VisibleForTesting
     boolean mEnabled;
 
@@ -49,8 +48,9 @@
      * supported.
      */
     @Nullable
-    public static HideDisplayCutoutController create(
-            Context context, DisplayController displayController, ShellExecutor mainExecutor) {
+    public static HideDisplayCutoutController create(Context context,
+            ShellController shellController, DisplayController displayController,
+            ShellExecutor mainExecutor) {
         // The SystemProperty is set for devices that support this feature and is used to control
         // whether to create the HideDisplayCutout instance.
         // It's defined in the device.mk (e.g. device/google/crosshatch/device.mk).
@@ -60,19 +60,16 @@
 
         HideDisplayCutoutOrganizer organizer =
                 new HideDisplayCutoutOrganizer(context, displayController, mainExecutor);
-        return new HideDisplayCutoutController(context, organizer, mainExecutor);
+        return new HideDisplayCutoutController(context, shellController, organizer);
     }
 
-    HideDisplayCutoutController(Context context, HideDisplayCutoutOrganizer organizer,
-            ShellExecutor mainExecutor) {
+    HideDisplayCutoutController(Context context, ShellController shellController,
+            HideDisplayCutoutOrganizer organizer) {
         mContext = context;
+        mShellController = shellController;
         mOrganizer = organizer;
-        mMainExecutor = mainExecutor;
         updateStatus();
-    }
-
-    public HideDisplayCutout asHideDisplayCutout() {
-        return mImpl;
+        mShellController.addConfigurationChangeListener(this);
     }
 
     @VisibleForTesting
@@ -94,7 +91,8 @@
         }
     }
 
-    private void onConfigurationChanged(Configuration newConfig) {
+    @Override
+    public void onConfigurationChanged(Configuration newConfig) {
         updateStatus();
     }
 
@@ -107,13 +105,4 @@
         pw.println(mEnabled);
         mOrganizer.dump(pw);
     }
-
-    private class HideDisplayCutoutImpl implements HideDisplayCutout {
-        @Override
-        public void onConfigurationChanged(Configuration newConfig) {
-            mMainExecutor.execute(() -> {
-                HideDisplayCutoutController.this.onConfigurationChanged(newConfig);
-            });
-        }
-    }
 }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutOrganizer.java
index 3f7d78d..f376e1f 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutOrganizer.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutOrganizer.java
@@ -64,8 +64,8 @@
     @VisibleForTesting
     final Rect mCurrentDisplayBounds = new Rect();
     // The default display cutout in natural orientation.
-    private Insets mDefaultCutoutInsets;
-    private Insets mCurrentCutoutInsets;
+    private Insets mDefaultCutoutInsets = Insets.NONE;
+    private Insets mCurrentCutoutInsets = Insets.NONE;
     private boolean mIsDefaultPortrait;
     private int mStatusBarHeight;
     @VisibleForTesting
@@ -78,27 +78,35 @@
     private final DisplayController.OnDisplaysChangedListener mListener =
             new DisplayController.OnDisplaysChangedListener() {
                 @Override
+                public void onDisplayAdded(int displayId) {
+                    onDisplayChanged(displayId);
+                }
+
+                @Override
                 public void onDisplayConfigurationChanged(int displayId, Configuration newConfig) {
-                    if (displayId != DEFAULT_DISPLAY) {
-                        return;
-                    }
-                    DisplayLayout displayLayout =
-                            mDisplayController.getDisplayLayout(DEFAULT_DISPLAY);
-                    if (displayLayout == null) {
-                        return;
-                    }
-                    final boolean rotationChanged = mRotation != displayLayout.rotation();
-                    mRotation = displayLayout.rotation();
-                    if (rotationChanged || isDisplayBoundsChanged()) {
-                        updateBoundsAndOffsets(true /* enabled */);
-                        final WindowContainerTransaction wct = new WindowContainerTransaction();
-                        final SurfaceControl.Transaction t = new SurfaceControl.Transaction();
-                        applyAllBoundsAndOffsets(wct, t);
-                        applyTransaction(wct, t);
-                    }
+                    onDisplayChanged(displayId);
                 }
     };
 
+    private void onDisplayChanged(int displayId) {
+        if (displayId != DEFAULT_DISPLAY) {
+            return;
+        }
+        final DisplayLayout displayLayout = mDisplayController.getDisplayLayout(DEFAULT_DISPLAY);
+        if (displayLayout == null) {
+            return;
+        }
+        final boolean rotationChanged = mRotation != displayLayout.rotation();
+        mRotation = displayLayout.rotation();
+        if (rotationChanged || isDisplayBoundsChanged()) {
+            updateBoundsAndOffsets(true /* enabled */);
+            final WindowContainerTransaction wct = new WindowContainerTransaction();
+            final SurfaceControl.Transaction t = new SurfaceControl.Transaction();
+            applyAllBoundsAndOffsets(wct, t);
+            applyTransaction(wct, t);
+        }
+    }
+
     HideDisplayCutoutOrganizer(Context context, DisplayController displayController,
             ShellExecutor mainExecutor) {
         super(mainExecutor);
@@ -128,9 +136,10 @@
 
             final WindowContainerTransaction wct = new WindowContainerTransaction();
             final SurfaceControl.Transaction t = new SurfaceControl.Transaction();
-            applyBoundsAndOffsets(
-                    displayAreaInfo.token, mDisplayAreaMap.get(displayAreaInfo.token), wct, t);
+            final SurfaceControl leash = mDisplayAreaMap.get(displayAreaInfo.token);
+            applyBoundsAndOffsets(displayAreaInfo.token, leash, wct, t);
             applyTransaction(wct, t);
+            leash.release();
             mDisplayAreaMap.remove(displayAreaInfo.token);
         }
     }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/kidsmode/KidsModeTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/kidsmode/KidsModeTaskOrganizer.java
index b4c87b6..73b9b89 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/kidsmode/KidsModeTaskOrganizer.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/kidsmode/KidsModeTaskOrganizer.java
@@ -50,7 +50,8 @@
 import com.android.wm.shell.common.ShellExecutor;
 import com.android.wm.shell.common.SyncTransactionQueue;
 import com.android.wm.shell.recents.RecentTasksController;
-import com.android.wm.shell.startingsurface.StartingWindowController;
+import com.android.wm.shell.sysui.ShellInit;
+import com.android.wm.shell.unfold.UnfoldAnimationController;
 
 import java.io.PrintWriter;
 import java.util.List;
@@ -139,16 +140,18 @@
 
     @VisibleForTesting
     KidsModeTaskOrganizer(
-            ITaskOrganizerController taskOrganizerController,
-            ShellExecutor mainExecutor,
-            Handler mainHandler,
             Context context,
+            ITaskOrganizerController taskOrganizerController,
             SyncTransactionQueue syncTransactionQueue,
             DisplayController displayController,
             DisplayInsetsController displayInsetsController,
+            Optional<UnfoldAnimationController> unfoldAnimationController,
             Optional<RecentTasksController> recentTasks,
-            KidsModeSettingsObserver kidsModeSettingsObserver) {
-        super(taskOrganizerController, mainExecutor, context, /* compatUI= */ null, recentTasks);
+            KidsModeSettingsObserver kidsModeSettingsObserver,
+            ShellExecutor mainExecutor,
+            Handler mainHandler) {
+        super(/* shellInit= */ null, taskOrganizerController, /* compatUI= */ null,
+                unfoldAnimationController, recentTasks, mainExecutor);
         mContext = context;
         mMainHandler = mainHandler;
         mSyncQueue = syncTransactionQueue;
@@ -158,26 +161,30 @@
     }
 
     public KidsModeTaskOrganizer(
-            ShellExecutor mainExecutor,
-            Handler mainHandler,
             Context context,
+            ShellInit shellInit,
             SyncTransactionQueue syncTransactionQueue,
             DisplayController displayController,
             DisplayInsetsController displayInsetsController,
-            Optional<RecentTasksController> recentTasks) {
-        super(mainExecutor, context, /* compatUI= */ null, recentTasks);
+            Optional<UnfoldAnimationController> unfoldAnimationController,
+            Optional<RecentTasksController> recentTasks,
+            ShellExecutor mainExecutor,
+            Handler mainHandler) {
+        // Note: we don't call super with the shell init because we will be initializing manually
+        super(/* shellInit= */ null, /* compatUI= */ null, unfoldAnimationController, recentTasks,
+                mainExecutor);
         mContext = context;
         mMainHandler = mainHandler;
         mSyncQueue = syncTransactionQueue;
         mDisplayController = displayController;
         mDisplayInsetsController = displayInsetsController;
+        shellInit.addInitCallback(this::onInit, this);
     }
 
     /**
      * Initializes kids mode status.
      */
-    public void initialize(StartingWindowController startingWindowController) {
-        initStartingWindow(startingWindowController);
+    public void onInit() {
         if (mKidsModeSettingsObserver == null) {
             mKidsModeSettingsObserver = new KidsModeSettingsObserver(mMainHandler, mContext);
         }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/DividerImeController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/DividerImeController.java
deleted file mode 100644
index aced072..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/DividerImeController.java
+++ /dev/null
@@ -1,418 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.legacysplitscreen;
-
-import static android.content.res.Configuration.SCREEN_HEIGHT_DP_UNDEFINED;
-import static android.content.res.Configuration.SCREEN_WIDTH_DP_UNDEFINED;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
-import android.annotation.Nullable;
-import android.graphics.Rect;
-import android.util.Slog;
-import android.view.Choreographer;
-import android.view.SurfaceControl;
-import android.window.TaskOrganizer;
-import android.window.WindowContainerToken;
-import android.window.WindowContainerTransaction;
-
-import com.android.wm.shell.common.DisplayImeController;
-import com.android.wm.shell.common.ShellExecutor;
-import com.android.wm.shell.common.TransactionPool;
-
-class DividerImeController implements DisplayImeController.ImePositionProcessor {
-    private static final String TAG = "DividerImeController";
-    private static final boolean DEBUG = LegacySplitScreenController.DEBUG;
-
-    private static final float ADJUSTED_NONFOCUS_DIM = 0.3f;
-
-    private final LegacySplitScreenTaskListener mSplits;
-    private final TransactionPool mTransactionPool;
-    private final ShellExecutor mMainExecutor;
-    private final TaskOrganizer mTaskOrganizer;
-
-    /**
-     * These are the y positions of the top of the IME surface when it is hidden and when it is
-     * shown respectively. These are NOT necessarily the top of the visible IME itself.
-     */
-    private int mHiddenTop = 0;
-    private int mShownTop = 0;
-
-    // The following are target states (what we are curretly animating towards).
-    /**
-     * {@code true} if, at the end of the animation, the split task positions should be
-     * adjusted by height of the IME. This happens when the secondary split is the IME target.
-     */
-    private boolean mTargetAdjusted = false;
-    /**
-     * {@code true} if, at the end of the animation, the IME should be shown/visible
-     * regardless of what has focus.
-     */
-    private boolean mTargetShown = false;
-    private float mTargetPrimaryDim = 0.f;
-    private float mTargetSecondaryDim = 0.f;
-
-    // The following are the current (most recent) states set during animation
-    /** {@code true} if the secondary split has IME focus. */
-    private boolean mSecondaryHasFocus = false;
-    /** The dimming currently applied to the primary/secondary splits. */
-    private float mLastPrimaryDim = 0.f;
-    private float mLastSecondaryDim = 0.f;
-    /** The most recent y position of the top of the IME surface */
-    private int mLastAdjustTop = -1;
-
-    // The following are states reached last time an animation fully completed.
-    /** {@code true} if the IME was shown/visible by the last-completed animation. */
-    private boolean mImeWasShown = false;
-    /** {@code true} if the split positions were adjusted by the last-completed animation. */
-    private boolean mAdjusted = false;
-
-    /**
-     * When some aspect of split-screen needs to animate independent from the IME,
-     * this will be non-null and control split animation.
-     */
-    @Nullable
-    private ValueAnimator mAnimation = null;
-
-    private boolean mPaused = true;
-    private boolean mPausedTargetAdjusted = false;
-
-    DividerImeController(LegacySplitScreenTaskListener splits, TransactionPool pool,
-            ShellExecutor mainExecutor, TaskOrganizer taskOrganizer) {
-        mSplits = splits;
-        mTransactionPool = pool;
-        mMainExecutor = mainExecutor;
-        mTaskOrganizer = taskOrganizer;
-    }
-
-    private DividerView getView() {
-        return mSplits.mSplitScreenController.getDividerView();
-    }
-
-    private LegacySplitDisplayLayout getLayout() {
-        return mSplits.mSplitScreenController.getSplitLayout();
-    }
-
-    private boolean isDividerHidden() {
-        final DividerView view = mSplits.mSplitScreenController.getDividerView();
-        return view == null || view.isHidden();
-    }
-
-    private boolean getSecondaryHasFocus(int displayId) {
-        WindowContainerToken imeSplit = mTaskOrganizer.getImeTarget(displayId);
-        return imeSplit != null
-                && (imeSplit.asBinder() == mSplits.mSecondary.token.asBinder());
-    }
-
-    void reset() {
-        mPaused = true;
-        mPausedTargetAdjusted = false;
-        mAnimation = null;
-        mAdjusted = mTargetAdjusted = false;
-        mImeWasShown = mTargetShown = false;
-        mTargetPrimaryDim = mTargetSecondaryDim = mLastPrimaryDim = mLastSecondaryDim = 0.f;
-        mSecondaryHasFocus = false;
-        mLastAdjustTop = -1;
-    }
-
-    private void updateDimTargets() {
-        final boolean splitIsVisible = !getView().isHidden();
-        mTargetPrimaryDim = (mSecondaryHasFocus && mTargetShown && splitIsVisible)
-                ? ADJUSTED_NONFOCUS_DIM : 0.f;
-        mTargetSecondaryDim = (!mSecondaryHasFocus && mTargetShown && splitIsVisible)
-                ? ADJUSTED_NONFOCUS_DIM : 0.f;
-    }
-
-
-    @Override
-    public void onImeControlTargetChanged(int displayId, boolean controlling) {
-        // Restore the split layout when wm-shell is not controlling IME insets anymore.
-        if (!controlling && mTargetShown) {
-            mPaused = false;
-            mTargetAdjusted = mTargetShown = false;
-            mTargetPrimaryDim = mTargetSecondaryDim = 0.f;
-            updateImeAdjustState(true /* force */);
-            startAsyncAnimation();
-        }
-    }
-
-    @Override
-    @ImeAnimationFlags
-    public int onImeStartPositioning(int displayId, int hiddenTop, int shownTop,
-            boolean imeShouldShow, boolean imeIsFloating, SurfaceControl.Transaction t) {
-        if (isDividerHidden()) {
-            return 0;
-        }
-        mHiddenTop = hiddenTop;
-        mShownTop = shownTop;
-        mTargetShown = imeShouldShow;
-        mSecondaryHasFocus = getSecondaryHasFocus(displayId);
-        final boolean targetAdjusted = imeShouldShow && mSecondaryHasFocus
-                && !imeIsFloating && !getLayout().mDisplayLayout.isLandscape()
-                && !mSplits.mSplitScreenController.isMinimized();
-        if (mLastAdjustTop < 0) {
-            mLastAdjustTop = imeShouldShow ? hiddenTop : shownTop;
-        } else if (mLastAdjustTop != (imeShouldShow ? mShownTop : mHiddenTop)) {
-            if (mTargetAdjusted != targetAdjusted && targetAdjusted == mAdjusted) {
-                // Check for an "interruption" of an existing animation. In this case, we
-                // need to fake-flip the last-known state direction so that the animation
-                // completes in the other direction.
-                mAdjusted = mTargetAdjusted;
-            } else if (targetAdjusted && mTargetAdjusted && mAdjusted) {
-                // Already fully adjusted for IME, but IME height has changed; so, force-start
-                // an async animation to the new IME height.
-                mAdjusted = false;
-            }
-        }
-        if (mPaused) {
-            mPausedTargetAdjusted = targetAdjusted;
-            if (DEBUG) Slog.d(TAG, " ime starting but paused " + dumpState());
-            return (targetAdjusted || mAdjusted) ? IME_ANIMATION_NO_ALPHA : 0;
-        }
-        mTargetAdjusted = targetAdjusted;
-        updateDimTargets();
-        if (DEBUG) Slog.d(TAG, " ime starting.  " + dumpState());
-        if (mAnimation != null || (mImeWasShown && imeShouldShow
-                && mTargetAdjusted != mAdjusted)) {
-            // We need to animate adjustment independently of the IME position, so
-            // start our own animation to drive adjustment. This happens when a
-            // different split's editor has gained focus while the IME is still visible.
-            startAsyncAnimation();
-        }
-        updateImeAdjustState();
-
-        return (mTargetAdjusted || mAdjusted) ? IME_ANIMATION_NO_ALPHA : 0;
-    }
-
-    private void updateImeAdjustState() {
-        updateImeAdjustState(false /* force */);
-    }
-
-    private void updateImeAdjustState(boolean force) {
-        if (mAdjusted != mTargetAdjusted || force) {
-            // Reposition the server's secondary split position so that it evaluates
-            // insets properly.
-            WindowContainerTransaction wct = new WindowContainerTransaction();
-            final LegacySplitDisplayLayout splitLayout = getLayout();
-            if (mTargetAdjusted) {
-                splitLayout.updateAdjustedBounds(mShownTop, mHiddenTop, mShownTop);
-                wct.setBounds(mSplits.mSecondary.token, splitLayout.mAdjustedSecondary);
-                // "Freeze" the configuration size so that the app doesn't get a config
-                // or relaunch. This is required because normally nav-bar contributes
-                // to configuration bounds (via nondecorframe).
-                Rect adjustAppBounds = new Rect(mSplits.mSecondary.configuration
-                        .windowConfiguration.getAppBounds());
-                adjustAppBounds.offset(0, splitLayout.mAdjustedSecondary.top
-                        - splitLayout.mSecondary.top);
-                wct.setAppBounds(mSplits.mSecondary.token, adjustAppBounds);
-                wct.setScreenSizeDp(mSplits.mSecondary.token,
-                        mSplits.mSecondary.configuration.screenWidthDp,
-                        mSplits.mSecondary.configuration.screenHeightDp);
-
-                wct.setBounds(mSplits.mPrimary.token, splitLayout.mAdjustedPrimary);
-                adjustAppBounds = new Rect(mSplits.mPrimary.configuration
-                        .windowConfiguration.getAppBounds());
-                adjustAppBounds.offset(0, splitLayout.mAdjustedPrimary.top
-                        - splitLayout.mPrimary.top);
-                wct.setAppBounds(mSplits.mPrimary.token, adjustAppBounds);
-                wct.setScreenSizeDp(mSplits.mPrimary.token,
-                        mSplits.mPrimary.configuration.screenWidthDp,
-                        mSplits.mPrimary.configuration.screenHeightDp);
-            } else {
-                wct.setBounds(mSplits.mSecondary.token, splitLayout.mSecondary);
-                wct.setAppBounds(mSplits.mSecondary.token, null);
-                wct.setScreenSizeDp(mSplits.mSecondary.token,
-                        SCREEN_WIDTH_DP_UNDEFINED, SCREEN_HEIGHT_DP_UNDEFINED);
-                wct.setBounds(mSplits.mPrimary.token, splitLayout.mPrimary);
-                wct.setAppBounds(mSplits.mPrimary.token, null);
-                wct.setScreenSizeDp(mSplits.mPrimary.token,
-                        SCREEN_WIDTH_DP_UNDEFINED, SCREEN_HEIGHT_DP_UNDEFINED);
-            }
-
-            if (!mSplits.mSplitScreenController.getWmProxy().queueSyncTransactionIfWaiting(wct)) {
-                mTaskOrganizer.applyTransaction(wct);
-            }
-        }
-
-        // Update all the adjusted-for-ime states
-        if (!mPaused) {
-            final DividerView view = getView();
-            if (view != null) {
-                view.setAdjustedForIme(mTargetShown, mTargetShown
-                        ? DisplayImeController.ANIMATION_DURATION_SHOW_MS
-                        : DisplayImeController.ANIMATION_DURATION_HIDE_MS);
-            }
-        }
-        mSplits.mSplitScreenController.setAdjustedForIme(mTargetShown && !mPaused);
-    }
-
-    @Override
-    public void onImePositionChanged(int displayId, int imeTop,
-            SurfaceControl.Transaction t) {
-        if (mAnimation != null || isDividerHidden() || mPaused) {
-            // Not synchronized with IME anymore, so return.
-            return;
-        }
-        final float fraction = ((float) imeTop - mHiddenTop) / (mShownTop - mHiddenTop);
-        final float progress = mTargetShown ? fraction : 1.f - fraction;
-        onProgress(progress, t);
-    }
-
-    @Override
-    public void onImeEndPositioning(int displayId, boolean cancelled,
-            SurfaceControl.Transaction t) {
-        if (mAnimation != null || isDividerHidden() || mPaused) {
-            // Not synchronized with IME anymore, so return.
-            return;
-        }
-        onEnd(cancelled, t);
-    }
-
-    private void onProgress(float progress, SurfaceControl.Transaction t) {
-        final DividerView view = getView();
-        if (mTargetAdjusted != mAdjusted && !mPaused) {
-            final LegacySplitDisplayLayout splitLayout = getLayout();
-            final float fraction = mTargetAdjusted ? progress : 1.f - progress;
-            mLastAdjustTop = (int) (fraction * mShownTop + (1.f - fraction) * mHiddenTop);
-            splitLayout.updateAdjustedBounds(mLastAdjustTop, mHiddenTop, mShownTop);
-            view.resizeSplitSurfaces(t, splitLayout.mAdjustedPrimary,
-                    splitLayout.mAdjustedSecondary);
-        }
-        final float invProg = 1.f - progress;
-        view.setResizeDimLayer(t, true /* primary */,
-                mLastPrimaryDim * invProg + progress * mTargetPrimaryDim);
-        view.setResizeDimLayer(t, false /* primary */,
-                mLastSecondaryDim * invProg + progress * mTargetSecondaryDim);
-    }
-
-    void setDimsHidden(SurfaceControl.Transaction t, boolean hidden) {
-        final DividerView view = getView();
-        if (hidden) {
-            view.setResizeDimLayer(t, true /* primary */, 0.f /* alpha */);
-            view.setResizeDimLayer(t, false /* primary */, 0.f /* alpha */);
-        } else {
-            updateDimTargets();
-            view.setResizeDimLayer(t, true /* primary */, mTargetPrimaryDim);
-            view.setResizeDimLayer(t, false /* primary */, mTargetSecondaryDim);
-        }
-    }
-
-    private void onEnd(boolean cancelled, SurfaceControl.Transaction t) {
-        if (!cancelled) {
-            onProgress(1.f, t);
-            mAdjusted = mTargetAdjusted;
-            mImeWasShown = mTargetShown;
-            mLastAdjustTop = mAdjusted ? mShownTop : mHiddenTop;
-            mLastPrimaryDim = mTargetPrimaryDim;
-            mLastSecondaryDim = mTargetSecondaryDim;
-        }
-    }
-
-    private void startAsyncAnimation() {
-        if (mAnimation != null) {
-            mAnimation.cancel();
-        }
-        mAnimation = ValueAnimator.ofFloat(0.f, 1.f);
-        mAnimation.setDuration(DisplayImeController.ANIMATION_DURATION_SHOW_MS);
-        if (mTargetAdjusted != mAdjusted) {
-            final float fraction =
-                    ((float) mLastAdjustTop - mHiddenTop) / (mShownTop - mHiddenTop);
-            final float progress = mTargetAdjusted ? fraction : 1.f - fraction;
-            mAnimation.setCurrentFraction(progress);
-        }
-
-        mAnimation.addUpdateListener(animation -> {
-            SurfaceControl.Transaction t = mTransactionPool.acquire();
-            float value = (float) animation.getAnimatedValue();
-            onProgress(value, t);
-            t.setFrameTimelineVsync(Choreographer.getSfInstance().getVsyncId());
-            t.apply();
-            mTransactionPool.release(t);
-        });
-        mAnimation.setInterpolator(DisplayImeController.INTERPOLATOR);
-        mAnimation.addListener(new AnimatorListenerAdapter() {
-            private boolean mCancel = false;
-
-            @Override
-            public void onAnimationCancel(Animator animation) {
-                mCancel = true;
-            }
-
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                SurfaceControl.Transaction t = mTransactionPool.acquire();
-                onEnd(mCancel, t);
-                t.apply();
-                mTransactionPool.release(t);
-                mAnimation = null;
-            }
-        });
-        mAnimation.start();
-    }
-
-    private String dumpState() {
-        return "top:" + mHiddenTop + "->" + mShownTop
-                + " adj:" + mAdjusted + "->" + mTargetAdjusted + "(" + mLastAdjustTop + ")"
-                + " shw:" + mImeWasShown + "->" + mTargetShown
-                + " dims:" + mLastPrimaryDim + "," + mLastSecondaryDim
-                + "->" + mTargetPrimaryDim + "," + mTargetSecondaryDim
-                + " shf:" + mSecondaryHasFocus + " desync:" + (mAnimation != null)
-                + " paus:" + mPaused + "[" + mPausedTargetAdjusted + "]";
-    }
-
-    /** Completely aborts/resets adjustment state */
-    public void pause(int displayId) {
-        if (DEBUG) Slog.d(TAG, "ime pause posting " + dumpState());
-        mMainExecutor.execute(() -> {
-            if (DEBUG) Slog.d(TAG, "ime pause run posted " + dumpState());
-            if (mPaused) {
-                return;
-            }
-            mPaused = true;
-            mPausedTargetAdjusted = mTargetAdjusted;
-            mTargetAdjusted = false;
-            mTargetPrimaryDim = mTargetSecondaryDim = 0.f;
-            updateImeAdjustState();
-            startAsyncAnimation();
-            if (mAnimation != null) {
-                mAnimation.end();
-            }
-        });
-    }
-
-    public void resume(int displayId) {
-        if (DEBUG) Slog.d(TAG, "ime resume posting " + dumpState());
-        mMainExecutor.execute(() -> {
-            if (DEBUG) Slog.d(TAG, "ime resume run posted " + dumpState());
-            if (!mPaused) {
-                return;
-            }
-            mPaused = false;
-            mTargetAdjusted = mPausedTargetAdjusted;
-            updateDimTargets();
-            final DividerView view = getView();
-            if ((mTargetAdjusted != mAdjusted) && !mSplits.mSplitScreenController.isMinimized()
-                    && view != null) {
-                // End unminimize animations since they conflict with adjustment animations.
-                view.finishAnimations();
-            }
-            updateImeAdjustState();
-            startAsyncAnimation();
-        });
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/DividerState.java b/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/DividerState.java
deleted file mode 100644
index af2ab15..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/DividerState.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.legacysplitscreen;
-
-/**
- * Class to hold state of divider that needs to persist across configuration changes.
- */
-final class DividerState {
-    public boolean animateAfterRecentsDrawn;
-    public float mRatioPositionBeforeMinimized;
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/DividerView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/DividerView.java
deleted file mode 100644
index 73be283..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/DividerView.java
+++ /dev/null
@@ -1,1314 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.legacysplitscreen;
-
-import static android.view.PointerIcon.TYPE_HORIZONTAL_DOUBLE_ARROW;
-import static android.view.PointerIcon.TYPE_VERTICAL_DOUBLE_ARROW;
-import static android.view.WindowManager.DOCKED_RIGHT;
-
-import static com.android.wm.shell.animation.Interpolators.DIM_INTERPOLATOR;
-import static com.android.wm.shell.animation.Interpolators.SLOWDOWN_INTERPOLATOR;
-import static com.android.wm.shell.common.split.DividerView.TOUCH_ANIMATION_DURATION;
-import static com.android.wm.shell.common.split.DividerView.TOUCH_RELEASE_ANIMATION_DURATION;
-
-import android.animation.AnimationHandler;
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
-import android.annotation.Nullable;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.graphics.Matrix;
-import android.graphics.Rect;
-import android.graphics.Region;
-import android.graphics.Region.Op;
-import android.hardware.display.DisplayManager;
-import android.os.Bundle;
-import android.util.AttributeSet;
-import android.util.Slog;
-import android.view.Choreographer;
-import android.view.Display;
-import android.view.MotionEvent;
-import android.view.PointerIcon;
-import android.view.SurfaceControl;
-import android.view.SurfaceControl.Transaction;
-import android.view.VelocityTracker;
-import android.view.View;
-import android.view.View.OnTouchListener;
-import android.view.ViewConfiguration;
-import android.view.ViewTreeObserver.InternalInsetsInfo;
-import android.view.ViewTreeObserver.OnComputeInternalInsetsListener;
-import android.view.WindowManager;
-import android.view.accessibility.AccessibilityNodeInfo;
-import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
-import android.view.animation.Interpolator;
-import android.view.animation.PathInterpolator;
-import android.widget.FrameLayout;
-
-import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.internal.policy.DividerSnapAlgorithm;
-import com.android.internal.policy.DividerSnapAlgorithm.SnapTarget;
-import com.android.internal.policy.DockedDividerUtils;
-import com.android.wm.shell.R;
-import com.android.wm.shell.animation.FlingAnimationUtils;
-import com.android.wm.shell.animation.Interpolators;
-import com.android.wm.shell.common.split.DividerHandleView;
-
-import java.util.function.Consumer;
-
-/**
- * Docked stack divider.
- */
-public class DividerView extends FrameLayout implements OnTouchListener,
-        OnComputeInternalInsetsListener {
-    private static final String TAG = "DividerView";
-    private static final boolean DEBUG = LegacySplitScreenController.DEBUG;
-
-    interface DividerCallbacks {
-        void onDraggingStart();
-        void onDraggingEnd();
-    }
-
-    public static final int INVALID_RECENTS_GROW_TARGET = -1;
-
-    private static final int LOG_VALUE_RESIZE_50_50 = 0;
-    private static final int LOG_VALUE_RESIZE_DOCKED_SMALLER = 1;
-    private static final int LOG_VALUE_RESIZE_DOCKED_LARGER = 2;
-
-    private static final int LOG_VALUE_UNDOCK_MAX_DOCKED = 0;
-    private static final int LOG_VALUE_UNDOCK_MAX_OTHER = 1;
-
-    private static final int TASK_POSITION_SAME = Integer.MAX_VALUE;
-
-    /**
-     * How much the background gets scaled when we are in the minimized dock state.
-     */
-    private static final float MINIMIZE_DOCK_SCALE = 0f;
-    private static final float ADJUSTED_FOR_IME_SCALE = 0.5f;
-
-    private static final Interpolator IME_ADJUST_INTERPOLATOR =
-            new PathInterpolator(0.2f, 0f, 0.1f, 1f);
-
-    private DividerHandleView mHandle;
-    private View mBackground;
-    private MinimizedDockShadow mMinimizedShadow;
-    private int mStartX;
-    private int mStartY;
-    private int mStartPosition;
-    private int mDockSide;
-    private boolean mMoving;
-    private int mTouchSlop;
-    private boolean mBackgroundLifted;
-    private boolean mIsInMinimizeInteraction;
-    SnapTarget mSnapTargetBeforeMinimized;
-
-    private int mDividerInsets;
-    private final Display mDefaultDisplay;
-
-    private int mDividerSize;
-    private int mTouchElevation;
-    private int mLongPressEntraceAnimDuration;
-
-    private final Rect mDockedRect = new Rect();
-    private final Rect mDockedTaskRect = new Rect();
-    private final Rect mOtherTaskRect = new Rect();
-    private final Rect mOtherRect = new Rect();
-    private final Rect mDockedInsetRect = new Rect();
-    private final Rect mOtherInsetRect = new Rect();
-    private final Rect mLastResizeRect = new Rect();
-    private final Rect mTmpRect = new Rect();
-    private LegacySplitScreenController mSplitScreenController;
-    private WindowManagerProxy mWindowManagerProxy;
-    private DividerWindowManager mWindowManager;
-    private VelocityTracker mVelocityTracker;
-    private FlingAnimationUtils mFlingAnimationUtils;
-    private LegacySplitDisplayLayout mSplitLayout;
-    private DividerImeController mImeController;
-    private DividerCallbacks mCallback;
-
-    private AnimationHandler mSfVsyncAnimationHandler;
-    private ValueAnimator mCurrentAnimator;
-    private boolean mEntranceAnimationRunning;
-    private boolean mExitAnimationRunning;
-    private int mExitStartPosition;
-    private boolean mDockedStackMinimized;
-    private boolean mHomeStackResizable;
-    private boolean mAdjustedForIme;
-    private DividerState mState;
-
-    private LegacySplitScreenTaskListener mTiles;
-    boolean mFirstLayout = true;
-    int mDividerPositionX;
-    int mDividerPositionY;
-
-    private final Matrix mTmpMatrix = new Matrix();
-    private final float[] mTmpValues = new float[9];
-
-    // The view is removed or in the process of been removed from the system.
-    private boolean mRemoved;
-
-    // Whether the surface for this view has been hidden regardless of actual visibility. This is
-    // used interact with keyguard.
-    private boolean mSurfaceHidden = false;
-
-    private final AccessibilityDelegate mHandleDelegate = new AccessibilityDelegate() {
-        @Override
-        public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
-            super.onInitializeAccessibilityNodeInfo(host, info);
-            final DividerSnapAlgorithm snapAlgorithm = getSnapAlgorithm();
-            if (isHorizontalDivision()) {
-                info.addAction(new AccessibilityAction(R.id.action_move_tl_full,
-                        mContext.getString(R.string.accessibility_action_divider_top_full)));
-                if (snapAlgorithm.isFirstSplitTargetAvailable()) {
-                    info.addAction(new AccessibilityAction(R.id.action_move_tl_70,
-                            mContext.getString(R.string.accessibility_action_divider_top_70)));
-                }
-                if (snapAlgorithm.showMiddleSplitTargetForAccessibility()) {
-                    // Only show the middle target if there are more than 1 split target
-                    info.addAction(new AccessibilityAction(R.id.action_move_tl_50,
-                            mContext.getString(R.string.accessibility_action_divider_top_50)));
-                }
-                if (snapAlgorithm.isLastSplitTargetAvailable()) {
-                    info.addAction(new AccessibilityAction(R.id.action_move_tl_30,
-                            mContext.getString(R.string.accessibility_action_divider_top_30)));
-                }
-                info.addAction(new AccessibilityAction(R.id.action_move_rb_full,
-                        mContext.getString(R.string.accessibility_action_divider_bottom_full)));
-            } else {
-                info.addAction(new AccessibilityAction(R.id.action_move_tl_full,
-                        mContext.getString(R.string.accessibility_action_divider_left_full)));
-                if (snapAlgorithm.isFirstSplitTargetAvailable()) {
-                    info.addAction(new AccessibilityAction(R.id.action_move_tl_70,
-                            mContext.getString(R.string.accessibility_action_divider_left_70)));
-                }
-                if (snapAlgorithm.showMiddleSplitTargetForAccessibility()) {
-                    // Only show the middle target if there are more than 1 split target
-                    info.addAction(new AccessibilityAction(R.id.action_move_tl_50,
-                            mContext.getString(R.string.accessibility_action_divider_left_50)));
-                }
-                if (snapAlgorithm.isLastSplitTargetAvailable()) {
-                    info.addAction(new AccessibilityAction(R.id.action_move_tl_30,
-                            mContext.getString(R.string.accessibility_action_divider_left_30)));
-                }
-                info.addAction(new AccessibilityAction(R.id.action_move_rb_full,
-                        mContext.getString(R.string.accessibility_action_divider_right_full)));
-            }
-        }
-
-        @Override
-        public boolean performAccessibilityAction(View host, int action, Bundle args) {
-            int currentPosition = getCurrentPosition();
-            SnapTarget nextTarget = null;
-            DividerSnapAlgorithm snapAlgorithm = mSplitLayout.getSnapAlgorithm();
-            if (action == R.id.action_move_tl_full) {
-                nextTarget = snapAlgorithm.getDismissEndTarget();
-            } else if (action == R.id.action_move_tl_70) {
-                nextTarget = snapAlgorithm.getLastSplitTarget();
-            } else if (action == R.id.action_move_tl_50) {
-                nextTarget = snapAlgorithm.getMiddleTarget();
-            } else if (action == R.id.action_move_tl_30) {
-                nextTarget = snapAlgorithm.getFirstSplitTarget();
-            } else if (action == R.id.action_move_rb_full) {
-                nextTarget = snapAlgorithm.getDismissStartTarget();
-            }
-            if (nextTarget != null) {
-                startDragging(true /* animate */, false /* touching */);
-                stopDragging(currentPosition, nextTarget, 250, Interpolators.FAST_OUT_SLOW_IN);
-                return true;
-            }
-            return super.performAccessibilityAction(host, action, args);
-        }
-    };
-
-    private final Runnable mResetBackgroundRunnable = new Runnable() {
-        @Override
-        public void run() {
-            resetBackground();
-        }
-    };
-
-    public DividerView(Context context) {
-        this(context, null);
-    }
-
-    public DividerView(Context context, @Nullable AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public DividerView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
-        this(context, attrs, defStyleAttr, 0);
-    }
-
-    public DividerView(Context context, @Nullable AttributeSet attrs, int defStyleAttr,
-            int defStyleRes) {
-        super(context, attrs, defStyleAttr, defStyleRes);
-        final DisplayManager displayManager =
-                (DisplayManager) mContext.getSystemService(Context.DISPLAY_SERVICE);
-        mDefaultDisplay = displayManager.getDisplay(Display.DEFAULT_DISPLAY);
-    }
-
-    public void setAnimationHandler(AnimationHandler sfVsyncAnimationHandler) {
-        mSfVsyncAnimationHandler = sfVsyncAnimationHandler;
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-        mHandle = findViewById(R.id.docked_divider_handle);
-        mBackground = findViewById(R.id.docked_divider_background);
-        mMinimizedShadow = findViewById(R.id.minimized_dock_shadow);
-        mHandle.setOnTouchListener(this);
-        final int dividerWindowWidth = getResources().getDimensionPixelSize(
-                com.android.internal.R.dimen.docked_stack_divider_thickness);
-        mDividerInsets = getResources().getDimensionPixelSize(
-                com.android.internal.R.dimen.docked_stack_divider_insets);
-        mDividerSize = dividerWindowWidth - 2 * mDividerInsets;
-        mTouchElevation = getResources().getDimensionPixelSize(
-                R.dimen.docked_stack_divider_lift_elevation);
-        mLongPressEntraceAnimDuration = getResources().getInteger(
-                R.integer.long_press_dock_anim_duration);
-        mTouchSlop = ViewConfiguration.get(mContext).getScaledTouchSlop();
-        mFlingAnimationUtils = new FlingAnimationUtils(getResources().getDisplayMetrics(), 0.3f);
-        boolean landscape = getResources().getConfiguration().orientation
-                == Configuration.ORIENTATION_LANDSCAPE;
-        mHandle.setPointerIcon(PointerIcon.getSystemIcon(getContext(),
-                landscape ? TYPE_HORIZONTAL_DOUBLE_ARROW : TYPE_VERTICAL_DOUBLE_ARROW));
-        getViewTreeObserver().addOnComputeInternalInsetsListener(this);
-        mHandle.setAccessibilityDelegate(mHandleDelegate);
-    }
-
-    @Override
-    protected void onAttachedToWindow() {
-        super.onAttachedToWindow();
-
-        // Save the current target if not minimized once attached to window
-        if (mDockSide != WindowManager.DOCKED_INVALID && !mIsInMinimizeInteraction) {
-            saveSnapTargetBeforeMinimized(mSnapTargetBeforeMinimized);
-        }
-        mFirstLayout = true;
-    }
-
-    void onDividerRemoved() {
-        mRemoved = true;
-        mCallback = null;
-    }
-
-    @Override
-    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
-        super.onLayout(changed, left, top, right, bottom);
-        if (mFirstLayout) {
-            // Wait for first layout so that the ViewRootImpl surface has been created.
-            initializeSurfaceState();
-            mFirstLayout = false;
-        }
-        int minimizeLeft = 0;
-        int minimizeTop = 0;
-        if (mDockSide == WindowManager.DOCKED_TOP) {
-            minimizeTop = mBackground.getTop();
-        } else if (mDockSide == WindowManager.DOCKED_LEFT) {
-            minimizeLeft = mBackground.getLeft();
-        } else if (mDockSide == WindowManager.DOCKED_RIGHT) {
-            minimizeLeft = mBackground.getRight() - mMinimizedShadow.getWidth();
-        }
-        mMinimizedShadow.layout(minimizeLeft, minimizeTop,
-                minimizeLeft + mMinimizedShadow.getMeasuredWidth(),
-                minimizeTop + mMinimizedShadow.getMeasuredHeight());
-        if (changed) {
-            notifySplitScreenBoundsChanged();
-        }
-    }
-
-    void injectDependencies(LegacySplitScreenController splitScreenController,
-            DividerWindowManager windowManager, DividerState dividerState,
-            DividerCallbacks callback, LegacySplitScreenTaskListener tiles,
-            LegacySplitDisplayLayout sdl, DividerImeController imeController,
-            WindowManagerProxy wmProxy) {
-        mSplitScreenController = splitScreenController;
-        mWindowManager = windowManager;
-        mState = dividerState;
-        mCallback = callback;
-        mTiles = tiles;
-        mSplitLayout = sdl;
-        mImeController = imeController;
-        mWindowManagerProxy = wmProxy;
-
-        if (mState.mRatioPositionBeforeMinimized == 0) {
-            // Set the middle target as the initial state
-            mSnapTargetBeforeMinimized = mSplitLayout.getSnapAlgorithm().getMiddleTarget();
-        } else {
-            repositionSnapTargetBeforeMinimized();
-        }
-    }
-
-    /** Gets non-minimized secondary bounds of split screen. */
-    public Rect getNonMinimizedSplitScreenSecondaryBounds() {
-        mOtherTaskRect.set(mSplitLayout.mSecondary);
-        return mOtherTaskRect;
-    }
-
-    private boolean inSplitMode() {
-        return getVisibility() == VISIBLE;
-    }
-
-    /** Unlike setVisible, this directly hides the surface without changing view visibility. */
-    void setHidden(boolean hidden) {
-        if (mSurfaceHidden == hidden) {
-            return;
-        }
-        mSurfaceHidden = hidden;
-        post(() -> {
-            final SurfaceControl sc = getWindowSurfaceControl();
-            if (sc == null) {
-                return;
-            }
-            Transaction t = mTiles.getTransaction();
-            if (hidden) {
-                t.hide(sc);
-            } else {
-                t.show(sc);
-            }
-            mImeController.setDimsHidden(t, hidden);
-            t.apply();
-            mTiles.releaseTransaction(t);
-        });
-    }
-
-    boolean isHidden() {
-        return getVisibility() != View.VISIBLE || mSurfaceHidden;
-    }
-
-    /** Starts dragging the divider bar. */
-    public boolean startDragging(boolean animate, boolean touching) {
-        cancelFlingAnimation();
-        if (touching) {
-            mHandle.setTouching(true, animate);
-        }
-        mDockSide = mSplitLayout.getPrimarySplitSide();
-
-        mWindowManagerProxy.setResizing(true);
-        if (touching) {
-            mWindowManager.setSlippery(false);
-            liftBackground();
-        }
-        if (mCallback != null) {
-            mCallback.onDraggingStart();
-        }
-        return inSplitMode();
-    }
-
-    /** Stops dragging the divider bar. */
-    public void stopDragging(int position, float velocity, boolean avoidDismissStart,
-            boolean logMetrics) {
-        mHandle.setTouching(false, true /* animate */);
-        fling(position, velocity, avoidDismissStart, logMetrics);
-        mWindowManager.setSlippery(true);
-        releaseBackground();
-    }
-
-    private void stopDragging(int position, SnapTarget target, long duration,
-            Interpolator interpolator) {
-        stopDragging(position, target, duration, 0 /* startDelay*/, 0 /* endDelay */, interpolator);
-    }
-
-    private void stopDragging(int position, SnapTarget target, long duration,
-            Interpolator interpolator, long endDelay) {
-        stopDragging(position, target, duration, 0 /* startDelay*/, endDelay, interpolator);
-    }
-
-    private void stopDragging(int position, SnapTarget target, long duration, long startDelay,
-            long endDelay, Interpolator interpolator) {
-        mHandle.setTouching(false, true /* animate */);
-        flingTo(position, target, duration, startDelay, endDelay, interpolator);
-        mWindowManager.setSlippery(true);
-        releaseBackground();
-    }
-
-    private void stopDragging() {
-        mHandle.setTouching(false, true /* animate */);
-        mWindowManager.setSlippery(true);
-        mWindowManagerProxy.setResizing(false);
-        releaseBackground();
-    }
-
-    private void updateDockSide() {
-        mDockSide = mSplitLayout.getPrimarySplitSide();
-        mMinimizedShadow.setDockSide(mDockSide);
-    }
-
-    public DividerSnapAlgorithm getSnapAlgorithm() {
-        return mDockedStackMinimized ? mSplitLayout.getMinimizedSnapAlgorithm(mHomeStackResizable)
-                        : mSplitLayout.getSnapAlgorithm();
-    }
-
-    public int getCurrentPosition() {
-        return isHorizontalDivision() ? mDividerPositionY : mDividerPositionX;
-    }
-
-    public boolean isMinimized() {
-        return mDockedStackMinimized;
-    }
-
-    @Override
-    public boolean onTouch(View v, MotionEvent event) {
-        convertToScreenCoordinates(event);
-        final int action = event.getAction() & MotionEvent.ACTION_MASK;
-        switch (action) {
-            case MotionEvent.ACTION_DOWN:
-                mVelocityTracker = VelocityTracker.obtain();
-                mVelocityTracker.addMovement(event);
-                mStartX = (int) event.getX();
-                mStartY = (int) event.getY();
-                boolean result = startDragging(true /* animate */, true /* touching */);
-                if (!result) {
-
-                    // Weren't able to start dragging successfully, so cancel it again.
-                    stopDragging();
-                }
-                mStartPosition = getCurrentPosition();
-                mMoving = false;
-                return result;
-            case MotionEvent.ACTION_MOVE:
-                mVelocityTracker.addMovement(event);
-                int x = (int) event.getX();
-                int y = (int) event.getY();
-                boolean exceededTouchSlop =
-                        isHorizontalDivision() && Math.abs(y - mStartY) > mTouchSlop
-                                || (!isHorizontalDivision() && Math.abs(x - mStartX) > mTouchSlop);
-                if (!mMoving && exceededTouchSlop) {
-                    mStartX = x;
-                    mStartY = y;
-                    mMoving = true;
-                }
-                if (mMoving && mDockSide != WindowManager.DOCKED_INVALID) {
-                    SnapTarget snapTarget = getSnapAlgorithm().calculateSnapTarget(
-                            mStartPosition, 0 /* velocity */, false /* hardDismiss */);
-                    resizeStackSurfaces(calculatePosition(x, y), mStartPosition, snapTarget,
-                            null /* transaction */);
-                }
-                break;
-            case MotionEvent.ACTION_UP:
-            case MotionEvent.ACTION_CANCEL:
-                if (!mMoving) {
-                    stopDragging();
-                    break;
-                }
-
-                x = (int) event.getRawX();
-                y = (int) event.getRawY();
-                mVelocityTracker.addMovement(event);
-                mVelocityTracker.computeCurrentVelocity(1000);
-                int position = calculatePosition(x, y);
-                stopDragging(position, isHorizontalDivision() ? mVelocityTracker.getYVelocity()
-                        : mVelocityTracker.getXVelocity(), false /* avoidDismissStart */,
-                        true /* log */);
-                mMoving = false;
-                break;
-        }
-        return true;
-    }
-
-    private void logResizeEvent(SnapTarget snapTarget) {
-        if (snapTarget == mSplitLayout.getSnapAlgorithm().getDismissStartTarget()) {
-            MetricsLogger.action(
-                    mContext, MetricsEvent.ACTION_WINDOW_UNDOCK_MAX, dockSideTopLeft(mDockSide)
-                            ? LOG_VALUE_UNDOCK_MAX_OTHER
-                            : LOG_VALUE_UNDOCK_MAX_DOCKED);
-        } else if (snapTarget == mSplitLayout.getSnapAlgorithm().getDismissEndTarget()) {
-            MetricsLogger.action(
-                    mContext, MetricsEvent.ACTION_WINDOW_UNDOCK_MAX, dockSideBottomRight(mDockSide)
-                            ? LOG_VALUE_UNDOCK_MAX_OTHER
-                            : LOG_VALUE_UNDOCK_MAX_DOCKED);
-        } else if (snapTarget == mSplitLayout.getSnapAlgorithm().getMiddleTarget()) {
-            MetricsLogger.action(mContext, MetricsEvent.ACTION_WINDOW_DOCK_RESIZE,
-                    LOG_VALUE_RESIZE_50_50);
-        } else if (snapTarget == mSplitLayout.getSnapAlgorithm().getFirstSplitTarget()) {
-            MetricsLogger.action(mContext, MetricsEvent.ACTION_WINDOW_DOCK_RESIZE,
-                    dockSideTopLeft(mDockSide)
-                            ? LOG_VALUE_RESIZE_DOCKED_SMALLER
-                            : LOG_VALUE_RESIZE_DOCKED_LARGER);
-        } else if (snapTarget == mSplitLayout.getSnapAlgorithm().getLastSplitTarget()) {
-            MetricsLogger.action(mContext, MetricsEvent.ACTION_WINDOW_DOCK_RESIZE,
-                    dockSideTopLeft(mDockSide)
-                            ? LOG_VALUE_RESIZE_DOCKED_LARGER
-                            : LOG_VALUE_RESIZE_DOCKED_SMALLER);
-        }
-    }
-
-    private void convertToScreenCoordinates(MotionEvent event) {
-        event.setLocation(event.getRawX(), event.getRawY());
-    }
-
-    private void fling(int position, float velocity, boolean avoidDismissStart,
-            boolean logMetrics) {
-        DividerSnapAlgorithm currentSnapAlgorithm = getSnapAlgorithm();
-        SnapTarget snapTarget = currentSnapAlgorithm.calculateSnapTarget(position, velocity);
-        if (avoidDismissStart && snapTarget == currentSnapAlgorithm.getDismissStartTarget()) {
-            snapTarget = currentSnapAlgorithm.getFirstSplitTarget();
-        }
-        if (logMetrics) {
-            logResizeEvent(snapTarget);
-        }
-        ValueAnimator anim = getFlingAnimator(position, snapTarget, 0 /* endDelay */);
-        mFlingAnimationUtils.apply(anim, position, snapTarget.position, velocity);
-        anim.start();
-    }
-
-    private void flingTo(int position, SnapTarget target, long duration, long startDelay,
-            long endDelay, Interpolator interpolator) {
-        ValueAnimator anim = getFlingAnimator(position, target, endDelay);
-        anim.setDuration(duration);
-        anim.setStartDelay(startDelay);
-        anim.setInterpolator(interpolator);
-        anim.start();
-    }
-
-    private ValueAnimator getFlingAnimator(int position, final SnapTarget snapTarget,
-            final long endDelay) {
-        if (mCurrentAnimator != null) {
-            cancelFlingAnimation();
-            updateDockSide();
-        }
-        if (DEBUG) Slog.d(TAG, "Getting fling " + position + "->" + snapTarget.position);
-        final boolean taskPositionSameAtEnd = snapTarget.flag == SnapTarget.FLAG_NONE;
-        ValueAnimator anim = ValueAnimator.ofInt(position, snapTarget.position);
-        anim.addUpdateListener(animation -> resizeStackSurfaces((int) animation.getAnimatedValue(),
-                taskPositionSameAtEnd && animation.getAnimatedFraction() == 1f
-                        ? TASK_POSITION_SAME
-                        : snapTarget.taskPosition,
-                snapTarget, null /* transaction */));
-        Consumer<Boolean> endAction = cancelled -> {
-            if (DEBUG) Slog.d(TAG, "End Fling " + cancelled + " min:" + mIsInMinimizeInteraction);
-            final boolean wasMinimizeInteraction = mIsInMinimizeInteraction;
-            // Reset minimized divider position after unminimized state animation finishes.
-            if (!cancelled && !mDockedStackMinimized && mIsInMinimizeInteraction) {
-                mIsInMinimizeInteraction = false;
-            }
-            boolean dismissed = commitSnapFlags(snapTarget);
-            mWindowManagerProxy.setResizing(false);
-            updateDockSide();
-            mCurrentAnimator = null;
-            mEntranceAnimationRunning = false;
-            mExitAnimationRunning = false;
-            if (!dismissed && !wasMinimizeInteraction) {
-                mWindowManagerProxy.applyResizeSplits(snapTarget.position, mSplitLayout);
-            }
-            if (mCallback != null) {
-                mCallback.onDraggingEnd();
-            }
-
-            // Record last snap target the divider moved to
-            if (!mIsInMinimizeInteraction) {
-                // The last snapTarget position can be negative when the last divider position was
-                // offscreen. In that case, save the middle (default) SnapTarget so calculating next
-                // position isn't negative.
-                final SnapTarget saveTarget;
-                if (snapTarget.position < 0) {
-                    saveTarget = mSplitLayout.getSnapAlgorithm().getMiddleTarget();
-                } else {
-                    saveTarget = snapTarget;
-                }
-                final DividerSnapAlgorithm snapAlgo = mSplitLayout.getSnapAlgorithm();
-                if (saveTarget.position != snapAlgo.getDismissEndTarget().position
-                        && saveTarget.position != snapAlgo.getDismissStartTarget().position) {
-                    saveSnapTargetBeforeMinimized(saveTarget);
-                }
-            }
-            notifySplitScreenBoundsChanged();
-        };
-        anim.addListener(new AnimatorListenerAdapter() {
-
-            private boolean mCancelled;
-
-            @Override
-            public void onAnimationCancel(Animator animation) {
-                mCancelled = true;
-            }
-
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                long delay = 0;
-                if (endDelay != 0) {
-                    delay = endDelay;
-                } else if (mCancelled) {
-                    delay = 0;
-                }
-                if (delay == 0) {
-                    endAction.accept(mCancelled);
-                } else {
-                    final Boolean cancelled = mCancelled;
-                    if (DEBUG) Slog.d(TAG, "Posting endFling " + cancelled + " d:" + delay + "ms");
-                    getHandler().postDelayed(() -> endAction.accept(cancelled), delay);
-                }
-            }
-        });
-        mCurrentAnimator = anim;
-        mCurrentAnimator.setAnimationHandler(mSfVsyncAnimationHandler);
-        return anim;
-    }
-
-    private void notifySplitScreenBoundsChanged() {
-        if (mSplitLayout.mPrimary == null || mSplitLayout.mSecondary == null) {
-            return;
-        }
-        mOtherTaskRect.set(mSplitLayout.mSecondary);
-
-        mTmpRect.set(mHandle.getLeft(), mHandle.getTop(), mHandle.getRight(), mHandle.getBottom());
-        if (isHorizontalDivision()) {
-            mTmpRect.offsetTo(mHandle.getLeft(), mDividerPositionY);
-        } else {
-            mTmpRect.offsetTo(mDividerPositionX, mHandle.getTop());
-        }
-        mWindowManagerProxy.setTouchRegion(mTmpRect);
-
-        mTmpRect.set(mSplitLayout.mDisplayLayout.stableInsets());
-        switch (mSplitLayout.getPrimarySplitSide()) {
-            case WindowManager.DOCKED_LEFT:
-                mTmpRect.left = 0;
-                break;
-            case WindowManager.DOCKED_RIGHT:
-                mTmpRect.right = 0;
-                break;
-            case WindowManager.DOCKED_TOP:
-                mTmpRect.top = 0;
-                break;
-        }
-        mSplitScreenController.notifyBoundsChanged(mOtherTaskRect, mTmpRect);
-    }
-
-    private void cancelFlingAnimation() {
-        if (mCurrentAnimator != null) {
-            mCurrentAnimator.cancel();
-        }
-    }
-
-    private boolean commitSnapFlags(SnapTarget target) {
-        if (target.flag == SnapTarget.FLAG_NONE) {
-            return false;
-        }
-        final boolean dismissOrMaximize;
-        if (target.flag == SnapTarget.FLAG_DISMISS_START) {
-            dismissOrMaximize = mDockSide == WindowManager.DOCKED_LEFT
-                    || mDockSide == WindowManager.DOCKED_TOP;
-        } else {
-            dismissOrMaximize = mDockSide == WindowManager.DOCKED_RIGHT
-                    || mDockSide == WindowManager.DOCKED_BOTTOM;
-        }
-        mWindowManagerProxy.dismissOrMaximizeDocked(mTiles, mSplitLayout, dismissOrMaximize);
-        Transaction t = mTiles.getTransaction();
-        setResizeDimLayer(t, true /* primary */, 0f);
-        setResizeDimLayer(t, false /* primary */, 0f);
-        t.apply();
-        mTiles.releaseTransaction(t);
-        return true;
-    }
-
-    private void liftBackground() {
-        if (mBackgroundLifted) {
-            return;
-        }
-        if (isHorizontalDivision()) {
-            mBackground.animate().scaleY(1.4f);
-        } else {
-            mBackground.animate().scaleX(1.4f);
-        }
-        mBackground.animate()
-                .setInterpolator(Interpolators.TOUCH_RESPONSE)
-                .setDuration(TOUCH_ANIMATION_DURATION)
-                .translationZ(mTouchElevation)
-                .start();
-
-        // Lift handle as well so it doesn't get behind the background, even though it doesn't
-        // cast shadow.
-        mHandle.animate()
-                .setInterpolator(Interpolators.TOUCH_RESPONSE)
-                .setDuration(TOUCH_ANIMATION_DURATION)
-                .translationZ(mTouchElevation)
-                .start();
-        mBackgroundLifted = true;
-    }
-
-    private void releaseBackground() {
-        if (!mBackgroundLifted) {
-            return;
-        }
-        mBackground.animate()
-                .setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
-                .setDuration(TOUCH_RELEASE_ANIMATION_DURATION)
-                .translationZ(0)
-                .scaleX(1f)
-                .scaleY(1f)
-                .start();
-        mHandle.animate()
-                .setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
-                .setDuration(TOUCH_RELEASE_ANIMATION_DURATION)
-                .translationZ(0)
-                .start();
-        mBackgroundLifted = false;
-    }
-
-    private void initializeSurfaceState() {
-        int midPos = mSplitLayout.getSnapAlgorithm().getMiddleTarget().position;
-        // Recalculate the split-layout's internal tile bounds
-        mSplitLayout.resizeSplits(midPos);
-        Transaction t = mTiles.getTransaction();
-        if (mDockedStackMinimized) {
-            int position = mSplitLayout.getMinimizedSnapAlgorithm(mHomeStackResizable)
-                    .getMiddleTarget().position;
-            calculateBoundsForPosition(position, mDockSide, mDockedRect);
-            calculateBoundsForPosition(position, DockedDividerUtils.invertDockSide(mDockSide),
-                    mOtherRect);
-            mDividerPositionX = mDividerPositionY = position;
-            resizeSplitSurfaces(t, mDockedRect, mSplitLayout.mPrimary,
-                    mOtherRect, mSplitLayout.mSecondary);
-        } else {
-            resizeSplitSurfaces(t, mSplitLayout.mPrimary, null,
-                    mSplitLayout.mSecondary, null);
-        }
-        setResizeDimLayer(t, true /* primary */, 0.f /* alpha */);
-        setResizeDimLayer(t, false /* secondary */, 0.f /* alpha */);
-        t.apply();
-        mTiles.releaseTransaction(t);
-
-        // Get the actually-visible bar dimensions (relative to full window). This is a thin
-        // bar going through the center.
-        final Rect dividerBar = isHorizontalDivision()
-                ? new Rect(0, mDividerInsets, mSplitLayout.mDisplayLayout.width(),
-                mDividerInsets + mDividerSize)
-                : new Rect(mDividerInsets, 0, mDividerInsets + mDividerSize,
-                mSplitLayout.mDisplayLayout.height());
-        final Region touchRegion = new Region(dividerBar);
-        // Add in the "draggable" portion. While not visible, this is an expanded area that the
-        // user can interact with.
-        touchRegion.union(new Rect(mHandle.getLeft(), mHandle.getTop(),
-                mHandle.getRight(), mHandle.getBottom()));
-        mWindowManager.setTouchRegion(touchRegion);
-    }
-
-    void setMinimizedDockStack(boolean minimized, boolean isHomeStackResizable,
-            Transaction t) {
-        mHomeStackResizable = isHomeStackResizable;
-        updateDockSide();
-        if (!minimized) {
-            resetBackground();
-        }
-        mMinimizedShadow.setAlpha(minimized ? 1f : 0f);
-        if (mDockedStackMinimized != minimized) {
-            mDockedStackMinimized = minimized;
-            if (mSplitLayout.mDisplayLayout.rotation() != mDefaultDisplay.getRotation()) {
-                // Splitscreen to minimize is about to starts after rotating landscape to seascape,
-                // update display info and snap algorithm targets
-                repositionSnapTargetBeforeMinimized();
-            }
-            if (mIsInMinimizeInteraction != minimized || mCurrentAnimator != null) {
-                cancelFlingAnimation();
-                if (minimized) {
-                    // Relayout to recalculate the divider shadow when minimizing
-                    requestLayout();
-                    mIsInMinimizeInteraction = true;
-                    resizeStackSurfaces(mSplitLayout.getMinimizedSnapAlgorithm(mHomeStackResizable)
-                            .getMiddleTarget(), t);
-                } else {
-                    resizeStackSurfaces(mSnapTargetBeforeMinimized, t);
-                    mIsInMinimizeInteraction = false;
-                }
-            }
-        }
-    }
-
-    void enterSplitMode(boolean isHomeStackResizable) {
-        setHidden(false);
-
-        SnapTarget miniMid =
-                mSplitLayout.getMinimizedSnapAlgorithm(isHomeStackResizable).getMiddleTarget();
-        if (mDockedStackMinimized) {
-            mDividerPositionY = mDividerPositionX = miniMid.position;
-        }
-    }
-
-    /**
-     * Tries to grab a surface control from ViewRootImpl. If this isn't available for some reason
-     * (ie. the window isn't ready yet), it will get the surfacecontrol that the WindowlessWM has
-     * assigned to it.
-     */
-    private SurfaceControl getWindowSurfaceControl() {
-        return mWindowManager.mSystemWindows.getViewSurface(this);
-    }
-
-    void exitSplitMode() {
-        // The view is going to be removed right after this function involved, updates the surface
-        // in the current thread instead of posting it to the view's UI thread.
-        final SurfaceControl sc = getWindowSurfaceControl();
-        if (sc == null) {
-            return;
-        }
-        Transaction t = mTiles.getTransaction();
-        t.hide(sc);
-        mImeController.setDimsHidden(t, true);
-        t.apply();
-        mTiles.releaseTransaction(t);
-
-        // Reset tile bounds
-        int midPos = mSplitLayout.getSnapAlgorithm().getMiddleTarget().position;
-        mWindowManagerProxy.applyResizeSplits(midPos, mSplitLayout);
-    }
-
-    void setMinimizedDockStack(boolean minimized, long animDuration,
-            boolean isHomeStackResizable) {
-        if (DEBUG) Slog.d(TAG, "setMinDock: " + mDockedStackMinimized + "->" + minimized);
-        mHomeStackResizable = isHomeStackResizable;
-        updateDockSide();
-        if (mDockedStackMinimized != minimized) {
-            mIsInMinimizeInteraction = true;
-            mDockedStackMinimized = minimized;
-            stopDragging(minimized
-                            ? mSnapTargetBeforeMinimized.position
-                            : getCurrentPosition(),
-                    minimized
-                            ? mSplitLayout.getMinimizedSnapAlgorithm(mHomeStackResizable)
-                                    .getMiddleTarget()
-                            : mSnapTargetBeforeMinimized,
-                    animDuration, Interpolators.FAST_OUT_SLOW_IN, 0);
-            setAdjustedForIme(false, animDuration);
-        }
-        if (!minimized) {
-            mBackground.animate().withEndAction(mResetBackgroundRunnable);
-        }
-        mBackground.animate()
-                .setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
-                .setDuration(animDuration)
-                .start();
-    }
-
-    // Needed to end any currently playing animations when they might compete with other anims
-    // (specifically, IME adjust animation immediately after leaving minimized). Someday maybe
-    // these can be unified, but not today.
-    void finishAnimations() {
-        if (mCurrentAnimator != null) {
-            mCurrentAnimator.end();
-        }
-    }
-
-    void setAdjustedForIme(boolean adjustedForIme, long animDuration) {
-        if (mAdjustedForIme == adjustedForIme) {
-            return;
-        }
-        updateDockSide();
-        mHandle.animate()
-                .setInterpolator(IME_ADJUST_INTERPOLATOR)
-                .setDuration(animDuration)
-                .alpha(adjustedForIme ? 0f : 1f)
-                .start();
-        if (mDockSide == WindowManager.DOCKED_TOP) {
-            mBackground.setPivotY(0);
-            mBackground.animate()
-                    .scaleY(adjustedForIme ? ADJUSTED_FOR_IME_SCALE : 1f);
-        }
-        if (!adjustedForIme) {
-            mBackground.animate().withEndAction(mResetBackgroundRunnable);
-        }
-        mBackground.animate()
-                .setInterpolator(IME_ADJUST_INTERPOLATOR)
-                .setDuration(animDuration)
-                .start();
-        mAdjustedForIme = adjustedForIme;
-    }
-
-    private void saveSnapTargetBeforeMinimized(SnapTarget target) {
-        mSnapTargetBeforeMinimized = target;
-        mState.mRatioPositionBeforeMinimized = (float) target.position
-                / (isHorizontalDivision() ? mSplitLayout.mDisplayLayout.height()
-                        : mSplitLayout.mDisplayLayout.width());
-    }
-
-    private void resetBackground() {
-        mBackground.setPivotX(mBackground.getWidth() / 2);
-        mBackground.setPivotY(mBackground.getHeight() / 2);
-        mBackground.setScaleX(1f);
-        mBackground.setScaleY(1f);
-        mMinimizedShadow.setAlpha(0f);
-    }
-
-    @Override
-    protected void onConfigurationChanged(Configuration newConfig) {
-        super.onConfigurationChanged(newConfig);
-    }
-
-    private void repositionSnapTargetBeforeMinimized() {
-        int position = (int) (mState.mRatioPositionBeforeMinimized
-                * (isHorizontalDivision() ? mSplitLayout.mDisplayLayout.height()
-                        : mSplitLayout.mDisplayLayout.width()));
-
-        // Set the snap target before minimized but do not save until divider is attached and not
-        // minimized because it does not know its minimized state yet.
-        mSnapTargetBeforeMinimized =
-                mSplitLayout.getSnapAlgorithm().calculateNonDismissingSnapTarget(position);
-    }
-
-    private int calculatePosition(int touchX, int touchY) {
-        return isHorizontalDivision() ? calculateYPosition(touchY) : calculateXPosition(touchX);
-    }
-
-    public boolean isHorizontalDivision() {
-        return getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT;
-    }
-
-    private int calculateXPosition(int touchX) {
-        return mStartPosition + touchX - mStartX;
-    }
-
-    private int calculateYPosition(int touchY) {
-        return mStartPosition + touchY - mStartY;
-    }
-
-    private void alignTopLeft(Rect containingRect, Rect rect) {
-        int width = rect.width();
-        int height = rect.height();
-        rect.set(containingRect.left, containingRect.top,
-                containingRect.left + width, containingRect.top + height);
-    }
-
-    private void alignBottomRight(Rect containingRect, Rect rect) {
-        int width = rect.width();
-        int height = rect.height();
-        rect.set(containingRect.right - width, containingRect.bottom - height,
-                containingRect.right, containingRect.bottom);
-    }
-
-    private void calculateBoundsForPosition(int position, int dockSide, Rect outRect) {
-        DockedDividerUtils.calculateBoundsForPosition(position, dockSide, outRect,
-                mSplitLayout.mDisplayLayout.width(), mSplitLayout.mDisplayLayout.height(),
-                mDividerSize);
-    }
-
-    private void resizeStackSurfaces(SnapTarget taskSnapTarget, Transaction t) {
-        resizeStackSurfaces(taskSnapTarget.position, taskSnapTarget.position, taskSnapTarget, t);
-    }
-
-    void resizeSplitSurfaces(Transaction t, Rect dockedRect, Rect otherRect) {
-        resizeSplitSurfaces(t, dockedRect, null, otherRect, null);
-    }
-
-    private void resizeSplitSurfaces(Transaction t, Rect dockedRect, Rect dockedTaskRect,
-            Rect otherRect, Rect otherTaskRect) {
-        dockedTaskRect = dockedTaskRect == null ? dockedRect : dockedTaskRect;
-        otherTaskRect = otherTaskRect == null ? otherRect : otherTaskRect;
-
-        mDividerPositionX = mSplitLayout.getPrimarySplitSide() == DOCKED_RIGHT
-                ? otherRect.right : dockedRect.right;
-        mDividerPositionY = dockedRect.bottom;
-
-        if (DEBUG) {
-            Slog.d(TAG, "Resizing split surfaces: " + dockedRect + " " + dockedTaskRect
-                    + " " + otherRect + " " + otherTaskRect);
-        }
-
-        t.setPosition(mTiles.mPrimarySurface, dockedTaskRect.left, dockedTaskRect.top);
-        Rect crop = new Rect(dockedRect);
-        crop.offsetTo(-Math.min(dockedTaskRect.left - dockedRect.left, 0),
-                -Math.min(dockedTaskRect.top - dockedRect.top, 0));
-        t.setWindowCrop(mTiles.mPrimarySurface, crop);
-        t.setPosition(mTiles.mSecondarySurface, otherTaskRect.left, otherTaskRect.top);
-        crop.set(otherRect);
-        crop.offsetTo(-(otherTaskRect.left - otherRect.left),
-                -(otherTaskRect.top - otherRect.top));
-        t.setWindowCrop(mTiles.mSecondarySurface, crop);
-        final SurfaceControl dividerCtrl = getWindowSurfaceControl();
-        if (dividerCtrl != null) {
-            if (isHorizontalDivision()) {
-                t.setPosition(dividerCtrl, 0, mDividerPositionY - mDividerInsets);
-            } else {
-                t.setPosition(dividerCtrl, mDividerPositionX - mDividerInsets, 0);
-            }
-        }
-    }
-
-    void setResizeDimLayer(Transaction t, boolean primary, float alpha) {
-        SurfaceControl dim = primary ? mTiles.mPrimaryDim : mTiles.mSecondaryDim;
-        if (alpha <= 0.001f) {
-            t.hide(dim);
-        } else {
-            t.setAlpha(dim, alpha);
-            t.show(dim);
-        }
-    }
-
-    void resizeStackSurfaces(int position, int taskPosition, SnapTarget taskSnapTarget,
-            Transaction transaction) {
-        if (mRemoved) {
-            // This divider view has been removed so shouldn't have any additional influence.
-            return;
-        }
-        calculateBoundsForPosition(position, mDockSide, mDockedRect);
-        calculateBoundsForPosition(position, DockedDividerUtils.invertDockSide(mDockSide),
-                mOtherRect);
-
-        if (mDockedRect.equals(mLastResizeRect) && !mEntranceAnimationRunning) {
-            return;
-        }
-
-        // Make sure shadows are updated
-        if (mBackground.getZ() > 0f) {
-            mBackground.invalidate();
-        }
-
-        final boolean ownTransaction = transaction == null;
-        final Transaction t = ownTransaction ? mTiles.getTransaction() : transaction;
-        mLastResizeRect.set(mDockedRect);
-        if (mIsInMinimizeInteraction) {
-            calculateBoundsForPosition(mSnapTargetBeforeMinimized.position, mDockSide,
-                    mDockedTaskRect);
-            calculateBoundsForPosition(mSnapTargetBeforeMinimized.position,
-                    DockedDividerUtils.invertDockSide(mDockSide), mOtherTaskRect);
-
-            // Move a right-docked-app to line up with the divider while dragging it
-            if (mDockSide == DOCKED_RIGHT) {
-                mDockedTaskRect.offset(Math.max(position, -mDividerSize)
-                        - mDockedTaskRect.left + mDividerSize, 0);
-            }
-            resizeSplitSurfaces(t, mDockedRect, mDockedTaskRect, mOtherRect, mOtherTaskRect);
-            if (ownTransaction) {
-                t.setFrameTimelineVsync(Choreographer.getSfInstance().getVsyncId());
-                t.apply();
-                mTiles.releaseTransaction(t);
-            }
-            return;
-        }
-
-        if (mEntranceAnimationRunning && taskPosition != TASK_POSITION_SAME) {
-            calculateBoundsForPosition(taskPosition, mDockSide, mDockedTaskRect);
-
-            // Move a docked app if from the right in position with the divider up to insets
-            if (mDockSide == DOCKED_RIGHT) {
-                mDockedTaskRect.offset(Math.max(position, -mDividerSize)
-                        - mDockedTaskRect.left + mDividerSize, 0);
-            }
-            calculateBoundsForPosition(taskPosition, DockedDividerUtils.invertDockSide(mDockSide),
-                    mOtherTaskRect);
-            resizeSplitSurfaces(t, mDockedRect, mDockedTaskRect, mOtherRect, mOtherTaskRect);
-        } else if (mExitAnimationRunning && taskPosition != TASK_POSITION_SAME) {
-            calculateBoundsForPosition(taskPosition, mDockSide, mDockedTaskRect);
-            mDockedInsetRect.set(mDockedTaskRect);
-            calculateBoundsForPosition(mExitStartPosition,
-                    DockedDividerUtils.invertDockSide(mDockSide), mOtherTaskRect);
-            mOtherInsetRect.set(mOtherTaskRect);
-            applyExitAnimationParallax(mOtherTaskRect, position);
-
-            // Move a right-docked-app to line up with the divider while dragging it
-            if (mDockSide == DOCKED_RIGHT) {
-                mDockedTaskRect.offset(position + mDividerSize, 0);
-            }
-            resizeSplitSurfaces(t, mDockedRect, mDockedTaskRect, mOtherRect, mOtherTaskRect);
-        } else if (taskPosition != TASK_POSITION_SAME) {
-            calculateBoundsForPosition(position, DockedDividerUtils.invertDockSide(mDockSide),
-                    mOtherRect);
-            int dockSideInverted = DockedDividerUtils.invertDockSide(mDockSide);
-            int taskPositionDocked =
-                    restrictDismissingTaskPosition(taskPosition, mDockSide, taskSnapTarget);
-            int taskPositionOther =
-                    restrictDismissingTaskPosition(taskPosition, dockSideInverted, taskSnapTarget);
-            calculateBoundsForPosition(taskPositionDocked, mDockSide, mDockedTaskRect);
-            calculateBoundsForPosition(taskPositionOther, dockSideInverted, mOtherTaskRect);
-            mTmpRect.set(0, 0, mSplitLayout.mDisplayLayout.width(),
-                    mSplitLayout.mDisplayLayout.height());
-            alignTopLeft(mDockedRect, mDockedTaskRect);
-            alignTopLeft(mOtherRect, mOtherTaskRect);
-            mDockedInsetRect.set(mDockedTaskRect);
-            mOtherInsetRect.set(mOtherTaskRect);
-            if (dockSideTopLeft(mDockSide)) {
-                alignTopLeft(mTmpRect, mDockedInsetRect);
-                alignBottomRight(mTmpRect, mOtherInsetRect);
-            } else {
-                alignBottomRight(mTmpRect, mDockedInsetRect);
-                alignTopLeft(mTmpRect, mOtherInsetRect);
-            }
-            applyDismissingParallax(mDockedTaskRect, mDockSide, taskSnapTarget, position,
-                    taskPositionDocked);
-            applyDismissingParallax(mOtherTaskRect, dockSideInverted, taskSnapTarget, position,
-                    taskPositionOther);
-            resizeSplitSurfaces(t, mDockedRect, mDockedTaskRect, mOtherRect, mOtherTaskRect);
-        } else {
-            resizeSplitSurfaces(t, mDockedRect, null, mOtherRect, null);
-        }
-        SnapTarget closestDismissTarget = getSnapAlgorithm().getClosestDismissTarget(position);
-        float dimFraction = getDimFraction(position, closestDismissTarget);
-        setResizeDimLayer(t, isDismissTargetPrimary(closestDismissTarget), dimFraction);
-        if (ownTransaction) {
-            t.apply();
-            mTiles.releaseTransaction(t);
-        }
-    }
-
-    private void applyExitAnimationParallax(Rect taskRect, int position) {
-        if (mDockSide == WindowManager.DOCKED_TOP) {
-            taskRect.offset(0, (int) ((position - mExitStartPosition) * 0.25f));
-        } else if (mDockSide == WindowManager.DOCKED_LEFT) {
-            taskRect.offset((int) ((position - mExitStartPosition) * 0.25f), 0);
-        } else if (mDockSide == WindowManager.DOCKED_RIGHT) {
-            taskRect.offset((int) ((mExitStartPosition - position) * 0.25f), 0);
-        }
-    }
-
-    private float getDimFraction(int position, SnapTarget dismissTarget) {
-        if (mEntranceAnimationRunning) {
-            return 0f;
-        }
-        float fraction = getSnapAlgorithm().calculateDismissingFraction(position);
-        fraction = Math.max(0, Math.min(fraction, 1f));
-        fraction = DIM_INTERPOLATOR.getInterpolation(fraction);
-        return fraction;
-    }
-
-    /**
-     * When the snap target is dismissing one side, make sure that the dismissing side doesn't get
-     * 0 size.
-     */
-    private int restrictDismissingTaskPosition(int taskPosition, int dockSide,
-            SnapTarget snapTarget) {
-        if (snapTarget.flag == SnapTarget.FLAG_DISMISS_START && dockSideTopLeft(dockSide)) {
-            return Math.max(mSplitLayout.getSnapAlgorithm().getFirstSplitTarget().position,
-                    mStartPosition);
-        } else if (snapTarget.flag == SnapTarget.FLAG_DISMISS_END
-                && dockSideBottomRight(dockSide)) {
-            return Math.min(mSplitLayout.getSnapAlgorithm().getLastSplitTarget().position,
-                    mStartPosition);
-        } else {
-            return taskPosition;
-        }
-    }
-
-    /**
-     * Applies a parallax to the task when dismissing.
-     */
-    private void applyDismissingParallax(Rect taskRect, int dockSide, SnapTarget snapTarget,
-            int position, int taskPosition) {
-        float fraction = Math.min(1, Math.max(0,
-                mSplitLayout.getSnapAlgorithm().calculateDismissingFraction(position)));
-        SnapTarget dismissTarget = null;
-        SnapTarget splitTarget = null;
-        int start = 0;
-        if (position <= mSplitLayout.getSnapAlgorithm().getLastSplitTarget().position
-                && dockSideTopLeft(dockSide)) {
-            dismissTarget = mSplitLayout.getSnapAlgorithm().getDismissStartTarget();
-            splitTarget = mSplitLayout.getSnapAlgorithm().getFirstSplitTarget();
-            start = taskPosition;
-        } else if (position >= mSplitLayout.getSnapAlgorithm().getLastSplitTarget().position
-                && dockSideBottomRight(dockSide)) {
-            dismissTarget = mSplitLayout.getSnapAlgorithm().getDismissEndTarget();
-            splitTarget = mSplitLayout.getSnapAlgorithm().getLastSplitTarget();
-            start = splitTarget.position;
-        }
-        if (dismissTarget != null && fraction > 0f
-                && isDismissing(splitTarget, position, dockSide)) {
-            fraction = calculateParallaxDismissingFraction(fraction, dockSide);
-            int offsetPosition = (int) (start + fraction
-                    * (dismissTarget.position - splitTarget.position));
-            int width = taskRect.width();
-            int height = taskRect.height();
-            switch (dockSide) {
-                case WindowManager.DOCKED_LEFT:
-                    taskRect.left = offsetPosition - width;
-                    taskRect.right = offsetPosition;
-                    break;
-                case WindowManager.DOCKED_RIGHT:
-                    taskRect.left = offsetPosition + mDividerSize;
-                    taskRect.right = offsetPosition + width + mDividerSize;
-                    break;
-                case WindowManager.DOCKED_TOP:
-                    taskRect.top = offsetPosition - height;
-                    taskRect.bottom = offsetPosition;
-                    break;
-                case WindowManager.DOCKED_BOTTOM:
-                    taskRect.top = offsetPosition + mDividerSize;
-                    taskRect.bottom = offsetPosition + height + mDividerSize;
-                    break;
-            }
-        }
-    }
-
-    /**
-     * @return for a specified {@code fraction}, this returns an adjusted value that simulates a
-     *         slowing down parallax effect
-     */
-    private static float calculateParallaxDismissingFraction(float fraction, int dockSide) {
-        float result = SLOWDOWN_INTERPOLATOR.getInterpolation(fraction) / 3.5f;
-
-        // Less parallax at the top, just because.
-        if (dockSide == WindowManager.DOCKED_TOP) {
-            result /= 2f;
-        }
-        return result;
-    }
-
-    private static boolean isDismissing(SnapTarget snapTarget, int position, int dockSide) {
-        if (dockSide == WindowManager.DOCKED_TOP || dockSide == WindowManager.DOCKED_LEFT) {
-            return position < snapTarget.position;
-        } else {
-            return position > snapTarget.position;
-        }
-    }
-
-    private boolean isDismissTargetPrimary(SnapTarget dismissTarget) {
-        return (dismissTarget.flag == SnapTarget.FLAG_DISMISS_START && dockSideTopLeft(mDockSide))
-                || (dismissTarget.flag == SnapTarget.FLAG_DISMISS_END
-                        && dockSideBottomRight(mDockSide));
-    }
-
-    /**
-     * @return true if and only if {@code dockSide} is top or left
-     */
-    private static boolean dockSideTopLeft(int dockSide) {
-        return dockSide == WindowManager.DOCKED_TOP || dockSide == WindowManager.DOCKED_LEFT;
-    }
-
-    /**
-     * @return true if and only if {@code dockSide} is bottom or right
-     */
-    private static boolean dockSideBottomRight(int dockSide) {
-        return dockSide == WindowManager.DOCKED_BOTTOM || dockSide == WindowManager.DOCKED_RIGHT;
-    }
-
-    @Override
-    public void onComputeInternalInsets(InternalInsetsInfo inoutInfo) {
-        inoutInfo.setTouchableInsets(InternalInsetsInfo.TOUCHABLE_INSETS_REGION);
-        inoutInfo.touchableRegion.set(mHandle.getLeft(), mHandle.getTop(), mHandle.getRight(),
-                mHandle.getBottom());
-        inoutInfo.touchableRegion.op(mBackground.getLeft(), mBackground.getTop(),
-                mBackground.getRight(), mBackground.getBottom(), Op.UNION);
-    }
-
-    void onUndockingTask() {
-        int dockSide = mSplitLayout.getPrimarySplitSide();
-        if (inSplitMode()) {
-            startDragging(false /* animate */, false /* touching */);
-            SnapTarget target = dockSideTopLeft(dockSide)
-                    ? mSplitLayout.getSnapAlgorithm().getDismissEndTarget()
-                    : mSplitLayout.getSnapAlgorithm().getDismissStartTarget();
-
-            // Don't start immediately - give a little bit time to settle the drag resize change.
-            mExitAnimationRunning = true;
-            mExitStartPosition = getCurrentPosition();
-            stopDragging(mExitStartPosition, target, 336 /* duration */, 100 /* startDelay */,
-                    0 /* endDelay */, Interpolators.FAST_OUT_SLOW_IN);
-        }
-    }
-
-    private int calculatePositionForInsetBounds() {
-        mSplitLayout.mDisplayLayout.getStableBounds(mTmpRect);
-        return DockedDividerUtils.calculatePositionForBounds(mTmpRect, mDockSide, mDividerSize);
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/DividerWindowManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/DividerWindowManager.java
deleted file mode 100644
index 2c3ae68..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/DividerWindowManager.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.legacysplitscreen;
-
-import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
-import static android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
-import static android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
-import static android.view.WindowManager.LayoutParams.FLAG_SLIPPERY;
-import static android.view.WindowManager.LayoutParams.FLAG_SPLIT_TOUCH;
-import static android.view.WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
-import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
-import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION;
-import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY;
-import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
-import static android.view.WindowManager.SHELL_ROOT_LAYER_DIVIDER;
-
-import android.graphics.PixelFormat;
-import android.graphics.Region;
-import android.os.Binder;
-import android.view.View;
-import android.view.WindowManager;
-
-import com.android.wm.shell.common.SystemWindows;
-
-/**
- * Manages the window parameters of the docked stack divider.
- */
-final class DividerWindowManager {
-
-    private static final String WINDOW_TITLE = "DockedStackDivider";
-
-    final SystemWindows mSystemWindows;
-    private WindowManager.LayoutParams mLp;
-    private View mView;
-
-    DividerWindowManager(SystemWindows systemWindows) {
-        mSystemWindows = systemWindows;
-    }
-
-    /** Add a divider view */
-    void add(View view, int width, int height, int displayId) {
-        mLp = new WindowManager.LayoutParams(
-                width, height, TYPE_DOCK_DIVIDER,
-                FLAG_NOT_FOCUSABLE | FLAG_NOT_TOUCH_MODAL
-                        | FLAG_WATCH_OUTSIDE_TOUCH | FLAG_SPLIT_TOUCH | FLAG_SLIPPERY,
-                PixelFormat.TRANSLUCENT);
-        mLp.token = new Binder();
-        mLp.setTitle(WINDOW_TITLE);
-        mLp.privateFlags |= PRIVATE_FLAG_NO_MOVE_ANIMATION | PRIVATE_FLAG_TRUSTED_OVERLAY;
-        mLp.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
-        view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
-                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
-                | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
-        mSystemWindows.addView(view, mLp, displayId, SHELL_ROOT_LAYER_DIVIDER);
-        mView = view;
-    }
-
-    void remove() {
-        if (mView != null) {
-            mSystemWindows.removeView(mView);
-        }
-        mView = null;
-    }
-
-    void setSlippery(boolean slippery) {
-        boolean changed = false;
-        if (slippery && (mLp.flags & FLAG_SLIPPERY) == 0) {
-            mLp.flags |= FLAG_SLIPPERY;
-            changed = true;
-        } else if (!slippery && (mLp.flags & FLAG_SLIPPERY) != 0) {
-            mLp.flags &= ~FLAG_SLIPPERY;
-            changed = true;
-        }
-        if (changed) {
-            mSystemWindows.updateViewLayout(mView, mLp);
-        }
-    }
-
-    void setTouchable(boolean touchable) {
-        if (mView == null) {
-            return;
-        }
-        boolean changed = false;
-        if (!touchable && (mLp.flags & FLAG_NOT_TOUCHABLE) == 0) {
-            mLp.flags |= FLAG_NOT_TOUCHABLE;
-            changed = true;
-        } else if (touchable && (mLp.flags & FLAG_NOT_TOUCHABLE) != 0) {
-            mLp.flags &= ~FLAG_NOT_TOUCHABLE;
-            changed = true;
-        }
-        if (changed) {
-            mSystemWindows.updateViewLayout(mView, mLp);
-        }
-    }
-
-    /** Sets the touch region to `touchRegion`. Use null to unset.*/
-    void setTouchRegion(Region touchRegion) {
-        if (mView == null) {
-            return;
-        }
-        mSystemWindows.setTouchableRegion(mView, touchRegion);
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/ForcedResizableInfoActivity.java b/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/ForcedResizableInfoActivity.java
deleted file mode 100644
index 4fe28e6..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/ForcedResizableInfoActivity.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.legacysplitscreen;
-
-import static android.app.ITaskStackListener.FORCED_RESIZEABLE_REASON_SECONDARY_DISPLAY;
-import static android.app.ITaskStackListener.FORCED_RESIZEABLE_REASON_SPLIT_SCREEN;
-
-import android.annotation.Nullable;
-import android.app.Activity;
-import android.app.ActivityManager;
-import android.os.Bundle;
-import android.view.KeyEvent;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.View.OnTouchListener;
-import android.widget.TextView;
-
-import com.android.wm.shell.R;
-
-/**
- * Translucent activity that gets started on top of a task in multi-window to inform the user that
- * we forced the activity below to be resizable.
- *
- * Note: This activity runs on the main thread of the process hosting the Shell lib.
- */
-public class ForcedResizableInfoActivity extends Activity implements OnTouchListener {
-
-    public static final String EXTRA_FORCED_RESIZEABLE_REASON = "extra_forced_resizeable_reason";
-
-    private static final long DISMISS_DELAY = 2500;
-
-    private final Runnable mFinishRunnable = new Runnable() {
-        @Override
-        public void run() {
-            finish();
-        }
-    };
-
-    @Override
-    protected void onCreate(@Nullable Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.forced_resizable_activity);
-        TextView tv = findViewById(com.android.internal.R.id.message);
-        int reason = getIntent().getIntExtra(EXTRA_FORCED_RESIZEABLE_REASON, -1);
-        String text;
-        switch (reason) {
-            case FORCED_RESIZEABLE_REASON_SPLIT_SCREEN:
-                text = getString(R.string.dock_forced_resizable);
-                break;
-            case FORCED_RESIZEABLE_REASON_SECONDARY_DISPLAY:
-                text = getString(R.string.forced_resizable_secondary_display);
-                break;
-            default:
-                throw new IllegalArgumentException("Unexpected forced resizeable reason: "
-                        + reason);
-        }
-        tv.setText(text);
-        getWindow().setTitle(text);
-        getWindow().getDecorView().setOnTouchListener(this);
-    }
-
-    @Override
-    protected void onStart() {
-        super.onStart();
-        getWindow().getDecorView().postDelayed(mFinishRunnable, DISMISS_DELAY);
-    }
-
-    @Override
-    protected void onStop() {
-        super.onStop();
-        finish();
-    }
-
-    @Override
-    public boolean onTouch(View v, MotionEvent event) {
-        finish();
-        return true;
-    }
-
-    @Override
-    public boolean onKeyDown(int keyCode, KeyEvent event) {
-        finish();
-        return true;
-    }
-
-    @Override
-    public void finish() {
-        super.finish();
-        overridePendingTransition(0, R.anim.forced_resizable_exit);
-    }
-
-    @Override
-    public void setTaskDescription(ActivityManager.TaskDescription taskDescription) {
-        // Do nothing
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/ForcedResizableInfoActivityController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/ForcedResizableInfoActivityController.java
deleted file mode 100644
index 139544f9..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/ForcedResizableInfoActivityController.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.legacysplitscreen;
-
-
-import static com.android.wm.shell.legacysplitscreen.ForcedResizableInfoActivity.EXTRA_FORCED_RESIZEABLE_REASON;
-
-import android.app.ActivityOptions;
-import android.content.Context;
-import android.content.Intent;
-import android.os.UserHandle;
-import android.util.ArraySet;
-import android.widget.Toast;
-
-import com.android.wm.shell.R;
-import com.android.wm.shell.common.ShellExecutor;
-
-import java.util.function.Consumer;
-
-/**
- * Controller that decides when to show the {@link ForcedResizableInfoActivity}.
- */
-final class ForcedResizableInfoActivityController implements DividerView.DividerCallbacks {
-
-    private static final String SELF_PACKAGE_NAME = "com.android.systemui";
-
-    private static final int TIMEOUT = 1000;
-    private final Context mContext;
-    private final ShellExecutor mMainExecutor;
-    private final ArraySet<PendingTaskRecord> mPendingTasks = new ArraySet<>();
-    private final ArraySet<String> mPackagesShownInSession = new ArraySet<>();
-    private boolean mDividerDragging;
-
-    private final Runnable mTimeoutRunnable = this::showPending;
-
-    private final Consumer<Boolean> mDockedStackExistsListener = exists -> {
-        if (!exists) {
-            mPackagesShownInSession.clear();
-        }
-    };
-
-    /** Record of force resized task that's pending to be handled. */
-    private class PendingTaskRecord {
-        int mTaskId;
-        /**
-         * {@link android.app.ITaskStackListener#FORCED_RESIZEABLE_REASON_SPLIT_SCREEN} or
-         * {@link android.app.ITaskStackListener#FORCED_RESIZEABLE_REASON_SECONDARY_DISPLAY}
-         */
-        int mReason;
-
-        PendingTaskRecord(int taskId, int reason) {
-            this.mTaskId = taskId;
-            this.mReason = reason;
-        }
-    }
-
-    ForcedResizableInfoActivityController(Context context,
-            LegacySplitScreenController splitScreenController,
-            ShellExecutor mainExecutor) {
-        mContext = context;
-        mMainExecutor = mainExecutor;
-        splitScreenController.registerInSplitScreenListener(mDockedStackExistsListener);
-    }
-
-    @Override
-    public void onDraggingStart() {
-        mDividerDragging = true;
-        mMainExecutor.removeCallbacks(mTimeoutRunnable);
-    }
-
-    @Override
-    public void onDraggingEnd() {
-        mDividerDragging = false;
-        showPending();
-    }
-
-    void onAppTransitionFinished() {
-        if (!mDividerDragging) {
-            showPending();
-        }
-    }
-
-    void activityForcedResizable(String packageName, int taskId, int reason) {
-        if (debounce(packageName)) {
-            return;
-        }
-        mPendingTasks.add(new PendingTaskRecord(taskId, reason));
-        postTimeout();
-    }
-
-    void activityDismissingSplitScreen() {
-        Toast.makeText(mContext, R.string.dock_non_resizeble_failed_to_dock_text,
-                Toast.LENGTH_SHORT).show();
-    }
-
-    void activityLaunchOnSecondaryDisplayFailed() {
-        Toast.makeText(mContext, R.string.activity_launch_on_secondary_display_failed_text,
-                Toast.LENGTH_SHORT).show();
-    }
-
-    private void showPending() {
-        mMainExecutor.removeCallbacks(mTimeoutRunnable);
-        for (int i = mPendingTasks.size() - 1; i >= 0; i--) {
-            PendingTaskRecord pendingRecord = mPendingTasks.valueAt(i);
-            Intent intent = new Intent(mContext, ForcedResizableInfoActivity.class);
-            ActivityOptions options = ActivityOptions.makeBasic();
-            options.setLaunchTaskId(pendingRecord.mTaskId);
-            // Set as task overlay and allow to resume, so that when an app enters split-screen and
-            // becomes paused, the overlay will still be shown.
-            options.setTaskOverlay(true, true /* canResume */);
-            intent.putExtra(EXTRA_FORCED_RESIZEABLE_REASON, pendingRecord.mReason);
-            mContext.startActivityAsUser(intent, options.toBundle(), UserHandle.CURRENT);
-        }
-        mPendingTasks.clear();
-    }
-
-    private void postTimeout() {
-        mMainExecutor.removeCallbacks(mTimeoutRunnable);
-        mMainExecutor.executeDelayed(mTimeoutRunnable, TIMEOUT);
-    }
-
-    private boolean debounce(String packageName) {
-        if (packageName == null) {
-            return false;
-        }
-
-        // We launch ForcedResizableInfoActivity into a task that was forced resizable, so that
-        // triggers another notification. So ignore our own activity.
-        if (SELF_PACKAGE_NAME.equals(packageName)) {
-            return true;
-        }
-        boolean debounce = mPackagesShownInSession.contains(packageName);
-        mPackagesShownInSession.add(packageName);
-        return debounce;
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitDisplayLayout.java b/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitDisplayLayout.java
deleted file mode 100644
index f201634..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitDisplayLayout.java
+++ /dev/null
@@ -1,326 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.legacysplitscreen;
-
-import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
-import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
-import static android.util.RotationUtils.rotateBounds;
-import static android.view.WindowManager.DOCKED_BOTTOM;
-import static android.view.WindowManager.DOCKED_INVALID;
-import static android.view.WindowManager.DOCKED_LEFT;
-import static android.view.WindowManager.DOCKED_RIGHT;
-import static android.view.WindowManager.DOCKED_TOP;
-
-import android.annotation.NonNull;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.graphics.Rect;
-import android.util.TypedValue;
-import android.window.WindowContainerTransaction;
-
-import com.android.internal.policy.DividerSnapAlgorithm;
-import com.android.internal.policy.DockedDividerUtils;
-import com.android.wm.shell.common.DisplayLayout;
-
-/**
- * Handles split-screen related internal display layout. In general, this represents the
- * WM-facing understanding of the splits.
- */
-public class LegacySplitDisplayLayout {
-    /** Minimum size of an adjusted stack bounds relative to original stack bounds. Used to
-     * restrict IME adjustment so that a min portion of top stack remains visible.*/
-    private static final float ADJUSTED_STACK_FRACTION_MIN = 0.3f;
-
-    private static final int DIVIDER_WIDTH_INACTIVE_DP = 4;
-
-    LegacySplitScreenTaskListener mTiles;
-    DisplayLayout mDisplayLayout;
-    Context mContext;
-
-    // Lazy stuff
-    boolean mResourcesValid = false;
-    int mDividerSize;
-    int mDividerSizeInactive;
-    private DividerSnapAlgorithm mSnapAlgorithm = null;
-    private DividerSnapAlgorithm mMinimizedSnapAlgorithm = null;
-    Rect mPrimary = null;
-    Rect mSecondary = null;
-    Rect mAdjustedPrimary = null;
-    Rect mAdjustedSecondary = null;
-    final Rect mTmpBounds = new Rect();
-
-    public LegacySplitDisplayLayout(Context ctx, DisplayLayout dl,
-            LegacySplitScreenTaskListener taskTiles) {
-        mTiles = taskTiles;
-        mDisplayLayout = dl;
-        mContext = ctx;
-    }
-
-    void rotateTo(int newRotation) {
-        mDisplayLayout.rotateTo(mContext.getResources(), newRotation);
-        final Configuration config = new Configuration();
-        config.unset();
-        config.orientation = mDisplayLayout.getOrientation();
-        Rect tmpRect = new Rect(0, 0, mDisplayLayout.width(), mDisplayLayout.height());
-        tmpRect.inset(mDisplayLayout.nonDecorInsets());
-        config.windowConfiguration.setAppBounds(tmpRect);
-        tmpRect.set(0, 0, mDisplayLayout.width(), mDisplayLayout.height());
-        tmpRect.inset(mDisplayLayout.stableInsets());
-        config.screenWidthDp = (int) (tmpRect.width() / mDisplayLayout.density());
-        config.screenHeightDp = (int) (tmpRect.height() / mDisplayLayout.density());
-        mContext = mContext.createConfigurationContext(config);
-        mSnapAlgorithm = null;
-        mMinimizedSnapAlgorithm = null;
-        mResourcesValid = false;
-    }
-
-    private void updateResources() {
-        if (mResourcesValid) {
-            return;
-        }
-        mResourcesValid = true;
-        Resources res = mContext.getResources();
-        mDividerSize = DockedDividerUtils.getDividerSize(res,
-                DockedDividerUtils.getDividerInsets(res));
-        mDividerSizeInactive = (int) TypedValue.applyDimension(
-                TypedValue.COMPLEX_UNIT_DIP, DIVIDER_WIDTH_INACTIVE_DP, res.getDisplayMetrics());
-    }
-
-    int getPrimarySplitSide() {
-        switch (mDisplayLayout.getNavigationBarPosition(mContext.getResources())) {
-            case DisplayLayout.NAV_BAR_BOTTOM:
-                return mDisplayLayout.isLandscape() ? DOCKED_LEFT : DOCKED_TOP;
-            case DisplayLayout.NAV_BAR_LEFT:
-                return DOCKED_RIGHT;
-            case DisplayLayout.NAV_BAR_RIGHT:
-                return DOCKED_LEFT;
-            default:
-                return DOCKED_INVALID;
-        }
-    }
-
-    DividerSnapAlgorithm getSnapAlgorithm() {
-        if (mSnapAlgorithm == null) {
-            updateResources();
-            boolean isHorizontalDivision = !mDisplayLayout.isLandscape();
-            mSnapAlgorithm = new DividerSnapAlgorithm(mContext.getResources(),
-                    mDisplayLayout.width(), mDisplayLayout.height(), mDividerSize,
-                    isHorizontalDivision, mDisplayLayout.stableInsets(), getPrimarySplitSide());
-        }
-        return mSnapAlgorithm;
-    }
-
-    DividerSnapAlgorithm getMinimizedSnapAlgorithm(boolean homeStackResizable) {
-        if (mMinimizedSnapAlgorithm == null) {
-            updateResources();
-            boolean isHorizontalDivision = !mDisplayLayout.isLandscape();
-            mMinimizedSnapAlgorithm = new DividerSnapAlgorithm(mContext.getResources(),
-                    mDisplayLayout.width(), mDisplayLayout.height(), mDividerSize,
-                    isHorizontalDivision, mDisplayLayout.stableInsets(), getPrimarySplitSide(),
-                    true /* isMinimized */, homeStackResizable);
-        }
-        return mMinimizedSnapAlgorithm;
-    }
-
-    /**
-     * Resize primary bounds and secondary bounds by divider position.
-     *
-     * @param position divider position.
-     * @return true if calculated bounds changed.
-     */
-    boolean resizeSplits(int position) {
-        mPrimary = mPrimary == null ? new Rect() : mPrimary;
-        mSecondary = mSecondary == null ? new Rect() : mSecondary;
-        int dockSide = getPrimarySplitSide();
-        boolean boundsChanged;
-
-        mTmpBounds.set(mPrimary);
-        DockedDividerUtils.calculateBoundsForPosition(position, dockSide, mPrimary,
-                mDisplayLayout.width(), mDisplayLayout.height(), mDividerSize);
-        boundsChanged = !mPrimary.equals(mTmpBounds);
-
-        mTmpBounds.set(mSecondary);
-        DockedDividerUtils.calculateBoundsForPosition(position,
-                DockedDividerUtils.invertDockSide(dockSide), mSecondary, mDisplayLayout.width(),
-                mDisplayLayout.height(), mDividerSize);
-        boundsChanged |= !mSecondary.equals(mTmpBounds);
-        return boundsChanged;
-    }
-
-    void resizeSplits(int position, WindowContainerTransaction t) {
-        if (resizeSplits(position)) {
-            t.setBounds(mTiles.mPrimary.token, mPrimary);
-            t.setBounds(mTiles.mSecondary.token, mSecondary);
-
-            t.setSmallestScreenWidthDp(mTiles.mPrimary.token,
-                    getSmallestWidthDpForBounds(mContext, mDisplayLayout, mPrimary));
-            t.setSmallestScreenWidthDp(mTiles.mSecondary.token,
-                    getSmallestWidthDpForBounds(mContext, mDisplayLayout, mSecondary));
-        }
-    }
-
-    Rect calcResizableMinimizedHomeStackBounds() {
-        DividerSnapAlgorithm.SnapTarget miniMid =
-                getMinimizedSnapAlgorithm(true /* resizable */).getMiddleTarget();
-        Rect homeBounds = new Rect();
-        DockedDividerUtils.calculateBoundsForPosition(miniMid.position,
-                DockedDividerUtils.invertDockSide(getPrimarySplitSide()), homeBounds,
-                mDisplayLayout.width(), mDisplayLayout.height(), mDividerSize);
-        return homeBounds;
-    }
-
-    /**
-     * Updates the adjustment depending on it's current state.
-     */
-    void updateAdjustedBounds(int currImeTop, int hiddenTop, int shownTop) {
-        adjustForIME(mDisplayLayout, currImeTop, hiddenTop, shownTop, mDividerSize,
-                mDividerSizeInactive, mPrimary, mSecondary);
-    }
-
-    /** Assumes top/bottom split. Splits are not adjusted for left/right splits. */
-    private void adjustForIME(DisplayLayout dl, int currImeTop, int hiddenTop, int shownTop,
-            int dividerWidth, int dividerWidthInactive, Rect primaryBounds, Rect secondaryBounds) {
-        if (mAdjustedPrimary == null) {
-            mAdjustedPrimary = new Rect();
-            mAdjustedSecondary = new Rect();
-        }
-
-        final Rect displayStableRect = new Rect();
-        dl.getStableBounds(displayStableRect);
-
-        final float shownFraction = ((float) (currImeTop - hiddenTop)) / (shownTop - hiddenTop);
-        final int currDividerWidth =
-                (int) (dividerWidthInactive * shownFraction + dividerWidth * (1.f - shownFraction));
-
-        // Calculate the highest we can move the bottom of the top stack to keep 30% visible.
-        final int minTopStackBottom = displayStableRect.top
-                + (int) ((mPrimary.bottom - displayStableRect.top) * ADJUSTED_STACK_FRACTION_MIN);
-        // Based on that, calculate the maximum amount we'll allow the ime to shift things.
-        final int maxOffset = mPrimary.bottom - minTopStackBottom;
-        // Calculate how much we would shift things without limits (basically the height of ime).
-        final int desiredOffset = hiddenTop - shownTop;
-        // Calculate an "adjustedTop" which is the currImeTop but restricted by our constraints.
-        // We want an effect where the adjustment only occurs during the "highest" portion of the
-        // ime animation. This is done by shifting the adjustment values by the difference in
-        // offsets (effectively playing the whole adjustment animation some fixed amount of pixels
-        // below the ime top).
-        final int topCorrection = Math.max(0, desiredOffset - maxOffset);
-        final int adjustedTop = currImeTop + topCorrection;
-        // The actual yOffset is the distance between adjustedTop and the bottom of the display.
-        // Since our adjustedTop values are playing "below" the ime, we clamp at 0 so we only
-        // see adjustment upward.
-        final int yOffset = Math.max(0, dl.height() - adjustedTop);
-
-        // TOP
-        // Reduce the offset by an additional small amount to squish the divider bar.
-        mAdjustedPrimary.set(primaryBounds);
-        mAdjustedPrimary.offset(0, -yOffset + (dividerWidth - currDividerWidth));
-
-        // BOTTOM
-        mAdjustedSecondary.set(secondaryBounds);
-        mAdjustedSecondary.offset(0, -yOffset);
-    }
-
-    static int getSmallestWidthDpForBounds(@NonNull Context context, DisplayLayout dl,
-            Rect bounds) {
-        int dividerSize = DockedDividerUtils.getDividerSize(context.getResources(),
-                DockedDividerUtils.getDividerInsets(context.getResources()));
-
-        int minWidth = Integer.MAX_VALUE;
-
-        // Go through all screen orientations and find the orientation in which the task has the
-        // smallest width.
-        Rect tmpRect = new Rect();
-        Rect rotatedDisplayRect = new Rect();
-        Rect displayRect = new Rect(0, 0, dl.width(), dl.height());
-
-        DisplayLayout tmpDL = new DisplayLayout();
-        for (int rotation = 0; rotation < 4; rotation++) {
-            tmpDL.set(dl);
-            tmpDL.rotateTo(context.getResources(), rotation);
-            DividerSnapAlgorithm snap = initSnapAlgorithmForRotation(context, tmpDL, dividerSize);
-
-            tmpRect.set(bounds);
-            rotateBounds(tmpRect, displayRect, dl.rotation(), rotation);
-            rotatedDisplayRect.set(0, 0, tmpDL.width(), tmpDL.height());
-            final int dockSide = getPrimarySplitSide(tmpRect, rotatedDisplayRect,
-                    tmpDL.getOrientation());
-            final int position = DockedDividerUtils.calculatePositionForBounds(tmpRect, dockSide,
-                    dividerSize);
-
-            final int snappedPosition =
-                    snap.calculateNonDismissingSnapTarget(position).position;
-            DockedDividerUtils.calculateBoundsForPosition(snappedPosition, dockSide, tmpRect,
-                    tmpDL.width(), tmpDL.height(), dividerSize);
-            Rect insettedDisplay = new Rect(rotatedDisplayRect);
-            insettedDisplay.inset(tmpDL.stableInsets());
-            tmpRect.intersect(insettedDisplay);
-            minWidth = Math.min(tmpRect.width(), minWidth);
-        }
-        return (int) (minWidth / dl.density());
-    }
-
-    static DividerSnapAlgorithm initSnapAlgorithmForRotation(Context context, DisplayLayout dl,
-            int dividerSize) {
-        final Configuration config = new Configuration();
-        config.unset();
-        config.orientation = dl.getOrientation();
-        Rect tmpRect = new Rect(0, 0, dl.width(), dl.height());
-        tmpRect.inset(dl.nonDecorInsets());
-        config.windowConfiguration.setAppBounds(tmpRect);
-        tmpRect.set(0, 0, dl.width(), dl.height());
-        tmpRect.inset(dl.stableInsets());
-        config.screenWidthDp = (int) (tmpRect.width() / dl.density());
-        config.screenHeightDp = (int) (tmpRect.height() / dl.density());
-        final Context rotationContext = context.createConfigurationContext(config);
-        return new DividerSnapAlgorithm(
-                rotationContext.getResources(), dl.width(), dl.height(), dividerSize,
-                config.orientation == ORIENTATION_PORTRAIT, dl.stableInsets());
-    }
-
-    /**
-     * Get the current primary-split side. Determined by its location of {@param bounds} within
-     * {@param displayRect} but if both are the same, it will try to dock to each side and determine
-     * if allowed in its respected {@param orientation}.
-     *
-     * @param bounds bounds of the primary split task to get which side is docked
-     * @param displayRect bounds of the display that contains the primary split task
-     * @param orientation the origination of device
-     * @return current primary-split side
-     */
-    static int getPrimarySplitSide(Rect bounds, Rect displayRect, int orientation) {
-        if (orientation == ORIENTATION_PORTRAIT) {
-            // Portrait mode, docked either at the top or the bottom.
-            final int diff = (displayRect.bottom - bounds.bottom) - (bounds.top - displayRect.top);
-            if (diff < 0) {
-                return DOCKED_BOTTOM;
-            } else {
-                // Top is default
-                return DOCKED_TOP;
-            }
-        } else if (orientation == ORIENTATION_LANDSCAPE) {
-            // Landscape mode, docked either on the left or on the right.
-            final int diff = (displayRect.right - bounds.right) - (bounds.left - displayRect.left);
-            if (diff < 0) {
-                return DOCKED_RIGHT;
-            }
-            return DOCKED_LEFT;
-        }
-        return DOCKED_INVALID;
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreen.java b/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreen.java
deleted file mode 100644
index 499a9c5..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreen.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.legacysplitscreen;
-
-import android.graphics.Rect;
-import android.window.WindowContainerToken;
-
-import com.android.wm.shell.common.annotations.ExternalThread;
-
-import java.io.PrintWriter;
-import java.util.function.BiConsumer;
-import java.util.function.Consumer;
-
-/**
- * Interface to engage split screen feature.
- */
-@ExternalThread
-public interface LegacySplitScreen {
-    /** Called when keyguard showing state changed. */
-    void onKeyguardVisibilityChanged(boolean isShowing);
-
-    /** Returns {@link DividerView}. */
-    DividerView getDividerView();
-
-    /** Returns {@code true} if one of the split screen is in minimized mode. */
-    boolean isMinimized();
-
-    /** Returns {@code true} if the home stack is resizable. */
-    boolean isHomeStackResizable();
-
-    /** Returns {@code true} if the divider is visible. */
-    boolean isDividerVisible();
-
-    /** Switch to minimized state if appropriate. */
-    void setMinimized(boolean minimized);
-
-    /** Called when there's a task undocking. */
-    void onUndockingTask();
-
-    /** Called when app transition finished. */
-    void onAppTransitionFinished();
-
-    /** Dumps current status of Split Screen. */
-    void dump(PrintWriter pw);
-
-    /** Registers listener that gets called whenever the existence of the divider changes. */
-    void registerInSplitScreenListener(Consumer<Boolean> listener);
-
-    /** Unregisters listener that gets called whenever the existence of the divider changes. */
-    void unregisterInSplitScreenListener(Consumer<Boolean> listener);
-
-    /** Registers listener that gets called whenever the split screen bounds changes. */
-    void registerBoundsChangeListener(BiConsumer<Rect, Rect> listener);
-
-    /** @return the container token for the secondary split root task. */
-    WindowContainerToken getSecondaryRoot();
-
-    /**
-     * Splits the primary task if feasible, this is to preserve legacy way to toggle split screen.
-     * Like triggering split screen through long pressing recents app button or through
-     * {@link android.accessibilityservice.AccessibilityService#GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN}.
-     *
-     * @return {@code true} if it successes to split the primary task.
-     */
-    boolean splitPrimaryTask();
-
-    /**
-     * Exits the split to make the primary task fullscreen.
-     */
-    void dismissSplitToPrimaryTask();
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenController.java
deleted file mode 100644
index 67e487d..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenController.java
+++ /dev/null
@@ -1,762 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.legacysplitscreen;
-
-import static android.app.ActivityManager.LOCK_TASK_MODE_PINNED;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
-import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
-import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
-import static android.view.Display.DEFAULT_DISPLAY;
-
-import android.animation.AnimationHandler;
-import android.app.ActivityManager;
-import android.app.ActivityManager.RunningTaskInfo;
-import android.app.ActivityTaskManager;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.graphics.Rect;
-import android.os.RemoteException;
-import android.provider.Settings;
-import android.util.Slog;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.widget.Toast;
-import android.window.TaskOrganizer;
-import android.window.WindowContainerToken;
-import android.window.WindowContainerTransaction;
-
-import com.android.internal.policy.DividerSnapAlgorithm;
-import com.android.wm.shell.R;
-import com.android.wm.shell.ShellTaskOrganizer;
-import com.android.wm.shell.common.DisplayChangeController;
-import com.android.wm.shell.common.DisplayController;
-import com.android.wm.shell.common.DisplayImeController;
-import com.android.wm.shell.common.DisplayLayout;
-import com.android.wm.shell.common.ShellExecutor;
-import com.android.wm.shell.common.SyncTransactionQueue;
-import com.android.wm.shell.common.SystemWindows;
-import com.android.wm.shell.common.TaskStackListenerCallback;
-import com.android.wm.shell.common.TaskStackListenerImpl;
-import com.android.wm.shell.common.TransactionPool;
-import com.android.wm.shell.transition.Transitions;
-
-import java.io.PrintWriter;
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.function.BiConsumer;
-import java.util.function.Consumer;
-
-/**
- * Controls split screen feature.
- */
-public class LegacySplitScreenController implements DisplayController.OnDisplaysChangedListener {
-    static final boolean DEBUG = false;
-
-    private static final String TAG = "SplitScreenCtrl";
-    private static final int DEFAULT_APP_TRANSITION_DURATION = 336;
-
-    private final Context mContext;
-    private final DisplayChangeController.OnDisplayChangingListener mRotationController;
-    private final DisplayController mDisplayController;
-    private final DisplayImeController mImeController;
-    private final DividerImeController mImePositionProcessor;
-    private final DividerState mDividerState = new DividerState();
-    private final ForcedResizableInfoActivityController mForcedResizableController;
-    private final ShellExecutor mMainExecutor;
-    private final AnimationHandler mSfVsyncAnimationHandler;
-    private final LegacySplitScreenTaskListener mSplits;
-    private final SystemWindows mSystemWindows;
-    final TransactionPool mTransactionPool;
-    private final WindowManagerProxy mWindowManagerProxy;
-    private final TaskOrganizer mTaskOrganizer;
-    private final SplitScreenImpl mImpl = new SplitScreenImpl();
-
-    private final CopyOnWriteArrayList<WeakReference<Consumer<Boolean>>> mDockedStackExistsListeners
-            = new CopyOnWriteArrayList<>();
-    private final ArrayList<WeakReference<BiConsumer<Rect, Rect>>> mBoundsChangedListeners =
-            new ArrayList<>();
-
-
-    private DividerWindowManager mWindowManager;
-    private DividerView mView;
-
-    // Keeps track of real-time split geometry including snap positions and ime adjustments
-    private LegacySplitDisplayLayout mSplitLayout;
-
-    // Transient: this contains the layout calculated for a new rotation requested by WM. This is
-    // kept around so that we can wait for a matching configuration change and then use the exact
-    // layout that we sent back to WM.
-    private LegacySplitDisplayLayout mRotateSplitLayout;
-
-    private boolean mIsKeyguardShowing;
-    private boolean mVisible = false;
-    private volatile boolean mMinimized = false;
-    private volatile boolean mAdjustedForIme = false;
-    private boolean mHomeStackResizable = false;
-
-    public LegacySplitScreenController(Context context,
-            DisplayController displayController, SystemWindows systemWindows,
-            DisplayImeController imeController, TransactionPool transactionPool,
-            ShellTaskOrganizer shellTaskOrganizer, SyncTransactionQueue syncQueue,
-            TaskStackListenerImpl taskStackListener, Transitions transitions,
-            ShellExecutor mainExecutor, AnimationHandler sfVsyncAnimationHandler) {
-        mContext = context;
-        mDisplayController = displayController;
-        mSystemWindows = systemWindows;
-        mImeController = imeController;
-        mMainExecutor = mainExecutor;
-        mSfVsyncAnimationHandler = sfVsyncAnimationHandler;
-        mForcedResizableController = new ForcedResizableInfoActivityController(context, this,
-                mainExecutor);
-        mTransactionPool = transactionPool;
-        mWindowManagerProxy = new WindowManagerProxy(syncQueue, shellTaskOrganizer);
-        mTaskOrganizer = shellTaskOrganizer;
-        mSplits = new LegacySplitScreenTaskListener(this, shellTaskOrganizer, transitions,
-                syncQueue);
-        mImePositionProcessor = new DividerImeController(mSplits, mTransactionPool, mMainExecutor,
-                shellTaskOrganizer);
-        mRotationController =
-                (display, fromRotation, toRotation, wct) -> {
-                    if (!mSplits.isSplitScreenSupported() || mWindowManagerProxy == null) {
-                        return;
-                    }
-                    WindowContainerTransaction t = new WindowContainerTransaction();
-                    DisplayLayout displayLayout =
-                            new DisplayLayout(mDisplayController.getDisplayLayout(display));
-                    LegacySplitDisplayLayout sdl =
-                            new LegacySplitDisplayLayout(mContext, displayLayout, mSplits);
-                    sdl.rotateTo(toRotation);
-                    mRotateSplitLayout = sdl;
-                    // snap resets to middle target when not minimized and rotation changed.
-                    final int position = mMinimized ? mView.mSnapTargetBeforeMinimized.position
-                            : sdl.getSnapAlgorithm().getMiddleTarget().position;
-                    DividerSnapAlgorithm snap = sdl.getSnapAlgorithm();
-                    final DividerSnapAlgorithm.SnapTarget target =
-                            snap.calculateNonDismissingSnapTarget(position);
-                    sdl.resizeSplits(target.position, t);
-
-                    if (isSplitActive() && mHomeStackResizable) {
-                        mWindowManagerProxy
-                                .applyHomeTasksMinimized(sdl, mSplits.mSecondary.token, t);
-                    }
-                    if (mWindowManagerProxy.queueSyncTransactionIfWaiting(t)) {
-                        // Because sync transactions are serialized, its possible for an "older"
-                        // bounds-change to get applied after a screen rotation. In that case, we
-                        // want to actually defer on that rather than apply immediately. Of course,
-                        // this means that the bounds may not change until after the rotation so
-                        // the user might see some artifacts. This should be rare.
-                        Slog.w(TAG, "Screen rotated while other operations were pending, this may"
-                                + " result in some graphical artifacts.");
-                    } else {
-                        wct.merge(t, true /* transfer */);
-                    }
-                };
-
-        mWindowManager = new DividerWindowManager(mSystemWindows);
-
-        // No need to listen to display window container or create root tasks if the device is not
-        // using legacy split screen.
-        if (!context.getResources().getBoolean(com.android.internal.R.bool.config_useLegacySplit)) {
-            return;
-        }
-
-
-        mDisplayController.addDisplayWindowListener(this);
-        // Don't initialize the divider or anything until we get the default display.
-
-        taskStackListener.addListener(
-                new TaskStackListenerCallback() {
-                    @Override
-                    public void onActivityRestartAttempt(ActivityManager.RunningTaskInfo task,
-                            boolean homeTaskVisible, boolean clearedTask, boolean wasVisible) {
-                        if (!wasVisible || task.getWindowingMode()
-                                != WINDOWING_MODE_SPLIT_SCREEN_PRIMARY
-                                || !mSplits.isSplitScreenSupported()) {
-                            return;
-                        }
-
-                        if (isMinimized()) {
-                            onUndockingTask();
-                        }
-                    }
-
-                    @Override
-                    public void onActivityForcedResizable(String packageName, int taskId,
-                            int reason) {
-                        mForcedResizableController.activityForcedResizable(packageName, taskId,
-                                reason);
-                    }
-
-                    @Override
-                    public void onActivityDismissingDockedStack() {
-                        mForcedResizableController.activityDismissingSplitScreen();
-                    }
-
-                    @Override
-                    public void onActivityLaunchOnSecondaryDisplayFailed() {
-                        mForcedResizableController.activityLaunchOnSecondaryDisplayFailed();
-                    }
-                });
-    }
-    
-    public LegacySplitScreen asLegacySplitScreen() {
-        return mImpl;
-    }
-
-    public void onSplitScreenSupported() {
-        // Set starting tile bounds based on middle target
-        final WindowContainerTransaction tct = new WindowContainerTransaction();
-        int midPos = mSplitLayout.getSnapAlgorithm().getMiddleTarget().position;
-        mSplitLayout.resizeSplits(midPos, tct);
-        mTaskOrganizer.applyTransaction(tct);
-    }
-
-    public void onKeyguardVisibilityChanged(boolean showing) {
-        if (!isSplitActive() || mView == null) {
-            return;
-        }
-        mView.setHidden(showing);
-        mIsKeyguardShowing = showing;
-    }
-
-    @Override
-    public void onDisplayAdded(int displayId) {
-        if (displayId != DEFAULT_DISPLAY) {
-            return;
-        }
-        mSplitLayout = new LegacySplitDisplayLayout(mDisplayController.getDisplayContext(displayId),
-                mDisplayController.getDisplayLayout(displayId), mSplits);
-        mImeController.addPositionProcessor(mImePositionProcessor);
-        mDisplayController.addDisplayChangingController(mRotationController);
-        if (!ActivityTaskManager.supportsSplitScreenMultiWindow(mContext)) {
-            removeDivider();
-            return;
-        }
-        try {
-            mSplits.init();
-        } catch (Exception e) {
-            Slog.e(TAG, "Failed to register docked stack listener", e);
-            removeDivider();
-            return;
-        }
-    }
-
-    @Override
-    public void onDisplayConfigurationChanged(int displayId, Configuration newConfig) {
-        if (displayId != DEFAULT_DISPLAY || !mSplits.isSplitScreenSupported()) {
-            return;
-        }
-        mSplitLayout = new LegacySplitDisplayLayout(mDisplayController.getDisplayContext(displayId),
-                mDisplayController.getDisplayLayout(displayId), mSplits);
-        if (mRotateSplitLayout == null) {
-            int midPos = mSplitLayout.getSnapAlgorithm().getMiddleTarget().position;
-            final WindowContainerTransaction tct = new WindowContainerTransaction();
-            mSplitLayout.resizeSplits(midPos, tct);
-            mTaskOrganizer.applyTransaction(tct);
-        } else if (mSplitLayout.mDisplayLayout.rotation()
-                == mRotateSplitLayout.mDisplayLayout.rotation()) {
-            mSplitLayout.mPrimary = new Rect(mRotateSplitLayout.mPrimary);
-            mSplitLayout.mSecondary = new Rect(mRotateSplitLayout.mSecondary);
-            mRotateSplitLayout = null;
-        }
-        if (isSplitActive()) {
-            update(newConfig);
-        }
-    }
-
-    public boolean isMinimized() {
-        return mMinimized;
-    }
-
-    public boolean isHomeStackResizable() {
-        return mHomeStackResizable;
-    }
-
-    public DividerView getDividerView() {
-        return mView;
-    }
-
-    public boolean isDividerVisible() {
-        return mView != null && mView.getVisibility() == View.VISIBLE;
-    }
-
-    /**
-     * This indicates that at-least one of the splits has content. This differs from
-     * isDividerVisible because the divider is only visible once *everything* is in split mode
-     * while this only cares if some things are (eg. while entering/exiting as well).
-     */
-    public boolean isSplitActive() {
-        return mSplits.mPrimary != null && mSplits.mSecondary != null
-                && (mSplits.mPrimary.topActivityType != ACTIVITY_TYPE_UNDEFINED
-                || mSplits.mSecondary.topActivityType != ACTIVITY_TYPE_UNDEFINED);
-    }
-
-    public void addDivider(Configuration configuration) {
-        Context dctx = mDisplayController.getDisplayContext(mContext.getDisplayId());
-        mView = (DividerView)
-                LayoutInflater.from(dctx).inflate(R.layout.docked_stack_divider, null);
-        mView.setAnimationHandler(mSfVsyncAnimationHandler);
-        DisplayLayout displayLayout = mDisplayController.getDisplayLayout(mContext.getDisplayId());
-        mView.injectDependencies(this, mWindowManager, mDividerState, mForcedResizableController,
-                mSplits, mSplitLayout, mImePositionProcessor, mWindowManagerProxy);
-        mView.setVisibility(mVisible ? View.VISIBLE : View.INVISIBLE);
-        mView.setMinimizedDockStack(mMinimized, mHomeStackResizable, null /* transaction */);
-        final int size = dctx.getResources().getDimensionPixelSize(
-                com.android.internal.R.dimen.docked_stack_divider_thickness);
-        final boolean landscape = configuration.orientation == ORIENTATION_LANDSCAPE;
-        final int width = landscape ? size : displayLayout.width();
-        final int height = landscape ? displayLayout.height() : size;
-        mWindowManager.add(mView, width, height, mContext.getDisplayId());
-    }
-
-    public void removeDivider() {
-        if (mView != null) {
-            mView.onDividerRemoved();
-        }
-        mWindowManager.remove();
-    }
-
-    public void update(Configuration configuration) {
-        final boolean isDividerHidden = mView != null && mIsKeyguardShowing;
-
-        removeDivider();
-        addDivider(configuration);
-
-        if (mMinimized) {
-            mView.setMinimizedDockStack(true, mHomeStackResizable, null /* transaction */);
-            updateTouchable();
-        }
-        mView.setHidden(isDividerHidden);
-    }
-
-    public void onTaskVanished() {
-        removeDivider();
-    }
-
-    public void updateVisibility(final boolean visible) {
-        if (DEBUG) Slog.d(TAG, "Updating visibility " + mVisible + "->" + visible);
-        if (mVisible != visible) {
-            mVisible = visible;
-            mView.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
-
-            if (visible) {
-                mView.enterSplitMode(mHomeStackResizable);
-                // Update state because animations won't finish.
-                mWindowManagerProxy.runInSync(
-                        t -> mView.setMinimizedDockStack(mMinimized, mHomeStackResizable, t));
-
-            } else {
-                mView.exitSplitMode();
-                mWindowManagerProxy.runInSync(
-                        t -> mView.setMinimizedDockStack(false, mHomeStackResizable, t));
-            }
-            // Notify existence listeners
-            synchronized (mDockedStackExistsListeners) {
-                mDockedStackExistsListeners.removeIf(wf -> {
-                    Consumer<Boolean> l = wf.get();
-                    if (l != null) l.accept(visible);
-                    return l == null;
-                });
-            }
-        }
-    }
-
-    public void setMinimized(final boolean minimized) {
-        if (DEBUG) Slog.d(TAG, "posting ext setMinimized " + minimized + " vis:" + mVisible);
-        mMainExecutor.execute(() -> {
-            if (DEBUG) Slog.d(TAG, "run posted ext setMinimized " + minimized + " vis:" + mVisible);
-            if (!mVisible) {
-                return;
-            }
-            setHomeMinimized(minimized);
-        });
-    }
-
-    public void setHomeMinimized(final boolean minimized) {
-        if (DEBUG) {
-            Slog.d(TAG, "setHomeMinimized  min:" + mMinimized + "->" + minimized + " hrsz:"
-                    + mHomeStackResizable + " split:" + isDividerVisible());
-        }
-        WindowContainerTransaction wct = new WindowContainerTransaction();
-        final boolean minimizedChanged = mMinimized != minimized;
-        // Update minimized state
-        if (minimizedChanged) {
-            mMinimized = minimized;
-        }
-        // Always set this because we could be entering split when mMinimized is already true
-        wct.setFocusable(mSplits.mPrimary.token, !mMinimized);
-
-        // Sync state to DividerView if it exists.
-        if (mView != null) {
-            final int displayId = mView.getDisplay() != null
-                    ? mView.getDisplay().getDisplayId() : DEFAULT_DISPLAY;
-            // pause ime here (before updateMinimizedDockedStack)
-            if (mMinimized) {
-                mImePositionProcessor.pause(displayId);
-            }
-            if (minimizedChanged) {
-                // This conflicts with IME adjustment, so only call it when things change.
-                mView.setMinimizedDockStack(minimized, getAnimDuration(), mHomeStackResizable);
-            }
-            if (!mMinimized) {
-                // afterwards so it can end any animations started in view
-                mImePositionProcessor.resume(displayId);
-            }
-        }
-        updateTouchable();
-
-        // If we are only setting focusability, a sync transaction isn't necessary (in fact it
-        // can interrupt other animations), so see if it can be submitted on pending instead.
-        if (!mWindowManagerProxy.queueSyncTransactionIfWaiting(wct)) {
-            mTaskOrganizer.applyTransaction(wct);
-        }
-    }
-
-    public void setAdjustedForIme(boolean adjustedForIme) {
-        if (mAdjustedForIme == adjustedForIme) {
-            return;
-        }
-        mAdjustedForIme = adjustedForIme;
-        updateTouchable();
-    }
-
-    public void updateTouchable() {
-        mWindowManager.setTouchable(!mAdjustedForIme);
-    }
-
-    public void onUndockingTask() {
-        if (mView != null) {
-            mView.onUndockingTask();
-        }
-    }
-
-    public void onAppTransitionFinished() {
-        if (mView == null) {
-            return;
-        }
-        mForcedResizableController.onAppTransitionFinished();
-    }
-
-    public void dump(PrintWriter pw) {
-        pw.print("  mVisible="); pw.println(mVisible);
-        pw.print("  mMinimized="); pw.println(mMinimized);
-        pw.print("  mAdjustedForIme="); pw.println(mAdjustedForIme);
-    }
-
-    public long getAnimDuration() {
-        float transitionScale = Settings.Global.getFloat(mContext.getContentResolver(),
-                Settings.Global.TRANSITION_ANIMATION_SCALE,
-                mContext.getResources().getFloat(
-                        com.android.internal.R.dimen
-                                .config_appTransitionAnimationDurationScaleDefault));
-        final long transitionDuration = DEFAULT_APP_TRANSITION_DURATION;
-        return (long) (transitionDuration * transitionScale);
-    }
-
-    public void registerInSplitScreenListener(Consumer<Boolean> listener) {
-        listener.accept(isDividerVisible());
-        synchronized (mDockedStackExistsListeners) {
-            mDockedStackExistsListeners.add(new WeakReference<>(listener));
-        }
-    }
-
-    public void unregisterInSplitScreenListener(Consumer<Boolean> listener) {
-        synchronized (mDockedStackExistsListeners) {
-            for (int i = mDockedStackExistsListeners.size() - 1; i >= 0; i--) {
-                if (mDockedStackExistsListeners.get(i) == listener) {
-                    mDockedStackExistsListeners.remove(i);
-                }
-            }
-        }
-    }
-
-    public void registerBoundsChangeListener(BiConsumer<Rect, Rect> listener) {
-        synchronized (mBoundsChangedListeners) {
-            mBoundsChangedListeners.add(new WeakReference<>(listener));
-        }
-    }
-
-    public boolean splitPrimaryTask() {
-        try {
-            if (ActivityTaskManager.getService().getLockTaskModeState() == LOCK_TASK_MODE_PINNED) {
-                return false;
-            }
-        } catch (RemoteException e) {
-            return false;
-        }
-        if (isSplitActive() || mSplits.mPrimary == null) {
-            return false;
-        }
-
-        // Try fetching the top running task.
-        final List<RunningTaskInfo> runningTasks =
-                ActivityTaskManager.getInstance().getTasks(1 /* maxNum */);
-        if (runningTasks == null || runningTasks.isEmpty()) {
-            return false;
-        }
-        // Note: The set of running tasks from the system is ordered by recency.
-        final RunningTaskInfo topRunningTask = runningTasks.get(0);
-        final int activityType = topRunningTask.getActivityType();
-        if (activityType == ACTIVITY_TYPE_HOME || activityType == ACTIVITY_TYPE_RECENTS) {
-            return false;
-        }
-
-        if (!topRunningTask.supportsSplitScreenMultiWindow) {
-            Toast.makeText(mContext, R.string.dock_non_resizeble_failed_to_dock_text,
-                    Toast.LENGTH_SHORT).show();
-            return false;
-        }
-
-        final WindowContainerTransaction wct = new WindowContainerTransaction();
-        // Clear out current windowing mode before reparenting to split task.
-        wct.setWindowingMode(topRunningTask.token, WINDOWING_MODE_UNDEFINED);
-        wct.reparent(topRunningTask.token, mSplits.mPrimary.token, true /* onTop */);
-        mWindowManagerProxy.applySyncTransaction(wct);
-        return true;
-    }
-
-    public void dismissSplitToPrimaryTask() {
-        startDismissSplit(true /* toPrimaryTask */);
-    }
-
-    /** Notifies the bounds of split screen changed. */
-    public void notifyBoundsChanged(Rect secondaryWindowBounds, Rect secondaryWindowInsets) {
-        synchronized (mBoundsChangedListeners) {
-            mBoundsChangedListeners.removeIf(wf -> {
-                BiConsumer<Rect, Rect> l = wf.get();
-                if (l != null) l.accept(secondaryWindowBounds, secondaryWindowInsets);
-                return l == null;
-            });
-        }
-    }
-
-    public void startEnterSplit() {
-        update(mDisplayController.getDisplayContext(
-                mContext.getDisplayId()).getResources().getConfiguration());
-        // Set resizable directly here because applyEnterSplit already resizes home stack.
-        mHomeStackResizable = mWindowManagerProxy.applyEnterSplit(mSplits,
-                mRotateSplitLayout != null ? mRotateSplitLayout : mSplitLayout);
-    }
-
-    public void prepareEnterSplitTransition(WindowContainerTransaction outWct) {
-        // Set resizable directly here because buildEnterSplit already resizes home stack.
-        mHomeStackResizable = mWindowManagerProxy.buildEnterSplit(outWct, mSplits,
-                mRotateSplitLayout != null ? mRotateSplitLayout : mSplitLayout);
-    }
-
-    public void finishEnterSplitTransition(boolean minimized) {
-        update(mDisplayController.getDisplayContext(
-                mContext.getDisplayId()).getResources().getConfiguration());
-        if (minimized) {
-            ensureMinimizedSplit();
-        } else {
-            ensureNormalSplit();
-        }
-    }
-
-    public void startDismissSplit(boolean toPrimaryTask) {
-        startDismissSplit(toPrimaryTask, false /* snapped */);
-    }
-
-    public void startDismissSplit(boolean toPrimaryTask, boolean snapped) {
-        if (Transitions.ENABLE_SHELL_TRANSITIONS) {
-            mSplits.getSplitTransitions().dismissSplit(
-                    mSplits, mSplitLayout, !toPrimaryTask, snapped);
-        } else {
-            mWindowManagerProxy.applyDismissSplit(mSplits, mSplitLayout, !toPrimaryTask);
-            onDismissSplit();
-        }
-    }
-
-    public void onDismissSplit() {
-        updateVisibility(false /* visible */);
-        mMinimized = false;
-        // Resets divider bar position to undefined, so new divider bar will apply default position
-        // next time entering split mode.
-        mDividerState.mRatioPositionBeforeMinimized = 0;
-        removeDivider();
-        mImePositionProcessor.reset();
-    }
-
-    public void ensureMinimizedSplit() {
-        setHomeMinimized(true /* minimized */);
-        if (mView != null && !isDividerVisible()) {
-            // Wasn't in split-mode yet, so enter now.
-            if (DEBUG) {
-                Slog.d(TAG, " entering split mode with minimized=true");
-            }
-            updateVisibility(true /* visible */);
-        }
-    }
-
-    public void ensureNormalSplit() {
-        setHomeMinimized(false /* minimized */);
-        if (mView != null && !isDividerVisible()) {
-            // Wasn't in split-mode, so enter now.
-            if (DEBUG) {
-                Slog.d(TAG, " enter split mode unminimized ");
-            }
-            updateVisibility(true /* visible */);
-        }
-    }
-
-    public LegacySplitDisplayLayout getSplitLayout() {
-        return mSplitLayout;
-    }
-
-    public WindowManagerProxy getWmProxy() {
-        return mWindowManagerProxy;
-    }
-
-    public WindowContainerToken getSecondaryRoot() {
-        if (mSplits == null || mSplits.mSecondary == null) {
-            return null;
-        }
-        return mSplits.mSecondary.token;
-    }
-
-    private class SplitScreenImpl implements LegacySplitScreen {
-        @Override
-        public boolean isMinimized() {
-            return mMinimized;
-        }
-
-        @Override
-        public boolean isHomeStackResizable() {
-            return mHomeStackResizable;
-        }
-
-        /**
-         * TODO: Remove usage from outside the shell.
-         */
-        @Override
-        public DividerView getDividerView() {
-            return LegacySplitScreenController.this.getDividerView();
-        }
-
-        @Override
-        public boolean isDividerVisible() {
-            boolean[] result = new boolean[1];
-            try {
-                mMainExecutor.executeBlocking(() -> {
-                    result[0] = LegacySplitScreenController.this.isDividerVisible();
-                });
-            } catch (InterruptedException e) {
-                Slog.e(TAG, "Failed to get divider visible");
-            }
-            return result[0];
-        }
-
-        @Override
-        public void onKeyguardVisibilityChanged(boolean isShowing) {
-            mMainExecutor.execute(() -> {
-                LegacySplitScreenController.this.onKeyguardVisibilityChanged(isShowing);
-            });
-        }
-
-        @Override
-        public void setMinimized(boolean minimized) {
-            mMainExecutor.execute(() -> {
-                LegacySplitScreenController.this.setMinimized(minimized);
-            });
-        }
-
-        @Override
-        public void onUndockingTask() {
-            mMainExecutor.execute(() -> {
-                LegacySplitScreenController.this.onUndockingTask();
-            });
-        }
-
-        @Override
-        public void onAppTransitionFinished() {
-            mMainExecutor.execute(() -> {
-                LegacySplitScreenController.this.onAppTransitionFinished();
-            });
-        }
-
-        @Override
-        public void registerInSplitScreenListener(Consumer<Boolean> listener) {
-            mMainExecutor.execute(() -> {
-                LegacySplitScreenController.this.registerInSplitScreenListener(listener);
-            });
-        }
-
-        @Override
-        public void unregisterInSplitScreenListener(Consumer<Boolean> listener) {
-            mMainExecutor.execute(() -> {
-                LegacySplitScreenController.this.unregisterInSplitScreenListener(listener);
-            });
-        }
-
-        @Override
-        public void registerBoundsChangeListener(BiConsumer<Rect, Rect> listener) {
-            mMainExecutor.execute(() -> {
-                LegacySplitScreenController.this.registerBoundsChangeListener(listener);
-            });
-        }
-
-        @Override
-        public WindowContainerToken getSecondaryRoot() {
-            WindowContainerToken[] result = new WindowContainerToken[1];
-            try {
-                mMainExecutor.executeBlocking(() -> {
-                    result[0] = LegacySplitScreenController.this.getSecondaryRoot();
-                });
-            } catch (InterruptedException e) {
-                Slog.e(TAG, "Failed to get secondary root");
-            }
-            return result[0];
-        }
-
-        @Override
-        public boolean splitPrimaryTask() {
-            boolean[] result = new boolean[1];
-            try {
-                mMainExecutor.executeBlocking(() -> {
-                    result[0] = LegacySplitScreenController.this.splitPrimaryTask();
-                });
-            } catch (InterruptedException e) {
-                Slog.e(TAG, "Failed to split primary task");
-            }
-            return result[0];
-        }
-
-        @Override
-        public void dismissSplitToPrimaryTask() {
-            mMainExecutor.execute(() -> {
-                LegacySplitScreenController.this.dismissSplitToPrimaryTask();
-            });
-        }
-
-        @Override
-        public void dump(PrintWriter pw) {
-            try {
-                mMainExecutor.executeBlocking(() -> {
-                    LegacySplitScreenController.this.dump(pw);
-                });
-            } catch (InterruptedException e) {
-                Slog.e(TAG, "Failed to dump LegacySplitScreenController in 2s");
-            }
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java b/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java
deleted file mode 100644
index d2f42c3..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTaskListener.java
+++ /dev/null
@@ -1,376 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.legacysplitscreen;
-
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
-import static android.view.Display.DEFAULT_DISPLAY;
-
-import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_TASK_ORG;
-
-import android.app.ActivityManager.RunningTaskInfo;
-import android.graphics.Point;
-import android.graphics.Rect;
-import android.util.Log;
-import android.util.SparseArray;
-import android.view.SurfaceControl;
-import android.view.SurfaceSession;
-import android.window.TaskOrganizer;
-
-import androidx.annotation.NonNull;
-
-import com.android.internal.protolog.common.ProtoLog;
-import com.android.wm.shell.ShellTaskOrganizer;
-import com.android.wm.shell.common.SurfaceUtils;
-import com.android.wm.shell.common.SyncTransactionQueue;
-import com.android.wm.shell.transition.Transitions;
-
-import java.io.PrintWriter;
-import java.util.ArrayList;
-
-class LegacySplitScreenTaskListener implements ShellTaskOrganizer.TaskListener {
-    private static final String TAG = LegacySplitScreenTaskListener.class.getSimpleName();
-    private static final boolean DEBUG = LegacySplitScreenController.DEBUG;
-
-    private final ShellTaskOrganizer mTaskOrganizer;
-    private final SyncTransactionQueue mSyncQueue;
-    private final SparseArray<SurfaceControl> mLeashByTaskId = new SparseArray<>();
-
-    // TODO(shell-transitions): Remove when switched to shell-transitions.
-    private final SparseArray<Point> mPositionByTaskId = new SparseArray<>();
-
-    RunningTaskInfo mPrimary;
-    RunningTaskInfo mSecondary;
-    SurfaceControl mPrimarySurface;
-    SurfaceControl mSecondarySurface;
-    SurfaceControl mPrimaryDim;
-    SurfaceControl mSecondaryDim;
-    Rect mHomeBounds = new Rect();
-    final LegacySplitScreenController mSplitScreenController;
-    private boolean mSplitScreenSupported = false;
-
-    final SurfaceSession mSurfaceSession = new SurfaceSession();
-
-    private final LegacySplitScreenTransitions mSplitTransitions;
-
-    LegacySplitScreenTaskListener(LegacySplitScreenController splitScreenController,
-            ShellTaskOrganizer shellTaskOrganizer,
-            Transitions transitions,
-            SyncTransactionQueue syncQueue) {
-        mSplitScreenController = splitScreenController;
-        mTaskOrganizer = shellTaskOrganizer;
-        mSplitTransitions = new LegacySplitScreenTransitions(splitScreenController.mTransactionPool,
-                transitions, mSplitScreenController, this);
-        transitions.addHandler(mSplitTransitions);
-        mSyncQueue = syncQueue;
-    }
-
-    void init() {
-        synchronized (this) {
-            try {
-                mTaskOrganizer.createRootTask(
-                        DEFAULT_DISPLAY, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, this);
-                mTaskOrganizer.createRootTask(
-                        DEFAULT_DISPLAY, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY, this);
-            } catch (Exception e) {
-                // teardown to prevent callbacks
-                mTaskOrganizer.removeListener(this);
-                throw e;
-            }
-        }
-    }
-
-    boolean isSplitScreenSupported() {
-        return mSplitScreenSupported;
-    }
-
-    SurfaceControl.Transaction getTransaction() {
-        return mSplitScreenController.mTransactionPool.acquire();
-    }
-
-    void releaseTransaction(SurfaceControl.Transaction t) {
-        mSplitScreenController.mTransactionPool.release(t);
-    }
-
-    TaskOrganizer getTaskOrganizer() {
-        return mTaskOrganizer;
-    }
-
-    LegacySplitScreenTransitions getSplitTransitions() {
-        return mSplitTransitions;
-    }
-
-    @Override
-    public void onTaskAppeared(RunningTaskInfo taskInfo, SurfaceControl leash) {
-        synchronized (this) {
-            if (taskInfo.hasParentTask()) {
-                handleChildTaskAppeared(taskInfo, leash);
-                return;
-            }
-
-            final int winMode = taskInfo.getWindowingMode();
-            if (winMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) {
-                ProtoLog.v(WM_SHELL_TASK_ORG,
-                        "%s onTaskAppeared Primary taskId=%d", TAG, taskInfo.taskId);
-                mPrimary = taskInfo;
-                mPrimarySurface = leash;
-            } else if (winMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY) {
-                ProtoLog.v(WM_SHELL_TASK_ORG,
-                        "%s onTaskAppeared Secondary taskId=%d", TAG, taskInfo.taskId);
-                mSecondary = taskInfo;
-                mSecondarySurface = leash;
-            } else {
-                ProtoLog.v(WM_SHELL_TASK_ORG, "%s onTaskAppeared unknown taskId=%d winMode=%d",
-                        TAG, taskInfo.taskId, winMode);
-            }
-
-            if (!mSplitScreenSupported && mPrimarySurface != null && mSecondarySurface != null) {
-                mSplitScreenSupported = true;
-                mSplitScreenController.onSplitScreenSupported();
-                ProtoLog.v(WM_SHELL_TASK_ORG, "%s onTaskAppeared Supported", TAG);
-
-                // Initialize dim surfaces:
-                SurfaceControl.Transaction t = getTransaction();
-                mPrimaryDim = SurfaceUtils.makeDimLayer(
-                        t, mPrimarySurface, "Primary Divider Dim", mSurfaceSession);
-                mSecondaryDim = SurfaceUtils.makeDimLayer(
-                        t, mSecondarySurface, "Secondary Divider Dim", mSurfaceSession);
-                t.apply();
-                releaseTransaction(t);
-            }
-        }
-    }
-
-    @Override
-    public void onTaskVanished(RunningTaskInfo taskInfo) {
-        synchronized (this) {
-            mPositionByTaskId.remove(taskInfo.taskId);
-            if (taskInfo.hasParentTask()) {
-                mLeashByTaskId.remove(taskInfo.taskId);
-                return;
-            }
-
-            final boolean isPrimaryTask = mPrimary != null
-                    && taskInfo.token.equals(mPrimary.token);
-            final boolean isSecondaryTask = mSecondary != null
-                    && taskInfo.token.equals(mSecondary.token);
-
-            if (mSplitScreenSupported && (isPrimaryTask || isSecondaryTask)) {
-                mSplitScreenSupported = false;
-
-                SurfaceControl.Transaction t = getTransaction();
-                t.remove(mPrimaryDim);
-                t.remove(mSecondaryDim);
-                t.remove(mPrimarySurface);
-                t.remove(mSecondarySurface);
-                t.apply();
-                releaseTransaction(t);
-
-                mSplitScreenController.onTaskVanished();
-            }
-        }
-    }
-
-    @Override
-    public void onTaskInfoChanged(RunningTaskInfo taskInfo) {
-        if (taskInfo.displayId != DEFAULT_DISPLAY) {
-            return;
-        }
-        synchronized (this) {
-            if (!taskInfo.supportsMultiWindow) {
-                if (mSplitScreenController.isDividerVisible()) {
-                    // Dismiss the split screen if the task no longer supports multi window.
-                    if (taskInfo.taskId == mPrimary.taskId
-                            || taskInfo.parentTaskId == mPrimary.taskId) {
-                        // If the primary is focused, dismiss to primary.
-                        mSplitScreenController
-                                .startDismissSplit(taskInfo.isFocused /* toPrimaryTask */);
-                    } else {
-                        // If the secondary is not focused, dismiss to primary.
-                        mSplitScreenController
-                                .startDismissSplit(!taskInfo.isFocused /* toPrimaryTask */);
-                    }
-                }
-                return;
-            }
-            if (taskInfo.hasParentTask()) {
-                // changed messages are noisy since it reports on every ensureVisibility. This
-                // conflicts with legacy app-transitions which "swaps" the position to a
-                // leash. For now, only update when position actually changes to avoid
-                // poorly-timed duplicate calls.
-                if (taskInfo.positionInParent.equals(mPositionByTaskId.get(taskInfo.taskId))) {
-                    return;
-                }
-                handleChildTaskChanged(taskInfo);
-            } else {
-                handleTaskInfoChanged(taskInfo);
-            }
-            mPositionByTaskId.put(taskInfo.taskId, new Point(taskInfo.positionInParent));
-        }
-    }
-
-    private void handleChildTaskAppeared(RunningTaskInfo taskInfo, SurfaceControl leash) {
-        mLeashByTaskId.put(taskInfo.taskId, leash);
-        mPositionByTaskId.put(taskInfo.taskId, new Point(taskInfo.positionInParent));
-        if (Transitions.ENABLE_SHELL_TRANSITIONS) return;
-        updateChildTaskSurface(taskInfo, leash, true /* firstAppeared */);
-    }
-
-    private void handleChildTaskChanged(RunningTaskInfo taskInfo) {
-        if (Transitions.ENABLE_SHELL_TRANSITIONS) return;
-        final SurfaceControl leash = mLeashByTaskId.get(taskInfo.taskId);
-        updateChildTaskSurface(taskInfo, leash, false /* firstAppeared */);
-    }
-
-    private void updateChildTaskSurface(
-            RunningTaskInfo taskInfo, SurfaceControl leash, boolean firstAppeared) {
-        final Point taskPositionInParent = taskInfo.positionInParent;
-        mSyncQueue.runInSync(t -> {
-            t.setWindowCrop(leash, null);
-            t.setPosition(leash, taskPositionInParent.x, taskPositionInParent.y);
-            if (firstAppeared && !Transitions.ENABLE_SHELL_TRANSITIONS) {
-                t.setAlpha(leash, 1f);
-                t.setMatrix(leash, 1, 0, 0, 1);
-                t.show(leash);
-            }
-        });
-    }
-
-    /**
-     * This is effectively a finite state machine which moves between the various split-screen
-     * presentations based on the contents of the split regions.
-     */
-    private void handleTaskInfoChanged(RunningTaskInfo info) {
-        if (!mSplitScreenSupported) {
-            // This shouldn't happen; but apparently there is a chance that SysUI crashes without
-            // system server receiving binder-death (or maybe it receives binder-death too late?).
-            // In this situation, when sys-ui restarts, the split root-tasks will still exist so
-            // there is a small window of time during init() where WM might send messages here
-            // before init() fails. So, avoid a cycle of crashes by returning early.
-            Log.e(TAG, "Got handleTaskInfoChanged when not initialized: " + info);
-            return;
-        }
-        final boolean secondaryImpliedMinimize = mSecondary.topActivityType == ACTIVITY_TYPE_HOME
-                || (mSecondary.topActivityType == ACTIVITY_TYPE_RECENTS
-                        && mSplitScreenController.isHomeStackResizable());
-        final boolean primaryWasEmpty = mPrimary.topActivityType == ACTIVITY_TYPE_UNDEFINED;
-        final boolean secondaryWasEmpty = mSecondary.topActivityType == ACTIVITY_TYPE_UNDEFINED;
-        if (info.token.asBinder() == mPrimary.token.asBinder()) {
-            mPrimary = info;
-        } else if (info.token.asBinder() == mSecondary.token.asBinder()) {
-            mSecondary = info;
-        }
-        if (DEBUG) {
-            Log.d(TAG, "onTaskInfoChanged " + mPrimary + "  " + mSecondary);
-        }
-        if (Transitions.ENABLE_SHELL_TRANSITIONS) return;
-        final boolean primaryIsEmpty = mPrimary.topActivityType == ACTIVITY_TYPE_UNDEFINED;
-        final boolean secondaryIsEmpty = mSecondary.topActivityType == ACTIVITY_TYPE_UNDEFINED;
-        final boolean secondaryImpliesMinimize = mSecondary.topActivityType == ACTIVITY_TYPE_HOME
-                || (mSecondary.topActivityType == ACTIVITY_TYPE_RECENTS
-                        && mSplitScreenController.isHomeStackResizable());
-        if (primaryIsEmpty == primaryWasEmpty && secondaryWasEmpty == secondaryIsEmpty
-                && secondaryImpliedMinimize == secondaryImpliesMinimize) {
-            // No relevant changes
-            return;
-        }
-        if (primaryIsEmpty || secondaryIsEmpty) {
-            // At-least one of the splits is empty which means we are currently transitioning
-            // into or out-of split-screen mode.
-            if (DEBUG) {
-                Log.d(TAG, " at-least one split empty " + mPrimary.topActivityType
-                        + "  " + mSecondary.topActivityType);
-            }
-            if (mSplitScreenController.isDividerVisible()) {
-                // Was in split-mode, which means we are leaving split, so continue that.
-                // This happens when the stack in the primary-split is dismissed.
-                if (DEBUG) {
-                    Log.d(TAG, "    was in split, so this means leave it "
-                            + mPrimary.topActivityType + "  " + mSecondary.topActivityType);
-                }
-                mSplitScreenController.startDismissSplit(false /* toPrimaryTask */);
-            } else if (!primaryIsEmpty && primaryWasEmpty && secondaryWasEmpty) {
-                // Wasn't in split-mode (both were empty), but now that the primary split is
-                // populated, we should fully enter split by moving everything else into secondary.
-                // This just tells window-manager to reparent things, the UI will respond
-                // when it gets new task info for the secondary split.
-                if (DEBUG) {
-                    Log.d(TAG, "   was not in split, but primary is populated, so enter it");
-                }
-                mSplitScreenController.startEnterSplit();
-            }
-        } else if (secondaryImpliesMinimize) {
-            // Workaround for b/172686383, we can't rely on the sync bounds change transaction for
-            // the home task to finish before the last updateChildTaskSurface() call even if it's
-            // queued on the sync transaction queue, so ensure that the home task surface is updated
-            // again before we minimize
-            final ArrayList<RunningTaskInfo> tasks = new ArrayList<>();
-            mSplitScreenController.getWmProxy().getHomeAndRecentsTasks(tasks,
-                    mSplitScreenController.getSecondaryRoot());
-            for (int i = 0; i < tasks.size(); i++) {
-                final RunningTaskInfo taskInfo = tasks.get(i);
-                final SurfaceControl leash = mLeashByTaskId.get(taskInfo.taskId);
-                if (leash != null) {
-                    updateChildTaskSurface(taskInfo, leash, false /* firstAppeared */);
-                }
-            }
-
-            // Both splits are populated but the secondary split has a home/recents stack on top,
-            // so enter minimized mode.
-            mSplitScreenController.ensureMinimizedSplit();
-        } else {
-            // Both splits are populated by normal activities, so make sure we aren't minimized.
-            mSplitScreenController.ensureNormalSplit();
-        }
-    }
-
-    @Override
-    public void attachChildSurfaceToTask(int taskId, SurfaceControl.Builder b) {
-        b.setParent(findTaskSurface(taskId));
-    }
-
-    @Override
-    public void reparentChildSurfaceToTask(int taskId, SurfaceControl sc,
-            SurfaceControl.Transaction t) {
-        t.reparent(sc, findTaskSurface(taskId));
-    }
-
-    private SurfaceControl findTaskSurface(int taskId) {
-        if (!mLeashByTaskId.contains(taskId)) {
-            throw new IllegalArgumentException("There is no surface for taskId=" + taskId);
-        }
-        return mLeashByTaskId.get(taskId);
-    }
-
-    @Override
-    public void dump(@NonNull PrintWriter pw, String prefix) {
-        final String innerPrefix = prefix + "  ";
-        final String childPrefix = innerPrefix + "  ";
-        pw.println(prefix + this);
-        pw.println(innerPrefix + "mSplitScreenSupported=" + mSplitScreenSupported);
-        if (mPrimary != null) pw.println(innerPrefix + "mPrimary.taskId=" + mPrimary.taskId);
-        if (mSecondary != null) pw.println(innerPrefix + "mSecondary.taskId=" + mSecondary.taskId);
-    }
-
-    @Override
-    public String toString() {
-        return TAG;
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTransitions.java b/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTransitions.java
deleted file mode 100644
index b1fa2ac..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/LegacySplitScreenTransitions.java
+++ /dev/null
@@ -1,348 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.legacysplitscreen;
-
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
-import static android.view.WindowManager.TRANSIT_CHANGE;
-import static android.view.WindowManager.TRANSIT_CLOSE;
-import static android.view.WindowManager.TRANSIT_FIRST_CUSTOM;
-import static android.view.WindowManager.TRANSIT_OPEN;
-import static android.view.WindowManager.TRANSIT_TO_BACK;
-import static android.view.WindowManager.TRANSIT_TO_FRONT;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.app.ActivityManager;
-import android.app.WindowConfiguration;
-import android.graphics.Rect;
-import android.os.IBinder;
-import android.view.SurfaceControl;
-import android.view.WindowManager;
-import android.window.TransitionInfo;
-import android.window.TransitionRequestInfo;
-import android.window.WindowContainerTransaction;
-
-import com.android.wm.shell.common.TransactionPool;
-import com.android.wm.shell.common.annotations.ExternalThread;
-import com.android.wm.shell.transition.Transitions;
-
-import java.util.ArrayList;
-
-/** Plays transition animations for split-screen */
-public class LegacySplitScreenTransitions implements Transitions.TransitionHandler {
-    private static final String TAG = "SplitScreenTransitions";
-
-    public static final int TRANSIT_SPLIT_DISMISS_SNAP = TRANSIT_FIRST_CUSTOM + 10;
-
-    private final TransactionPool mTransactionPool;
-    private final Transitions mTransitions;
-    private final LegacySplitScreenController mSplitScreen;
-    private final LegacySplitScreenTaskListener mListener;
-
-    private IBinder mPendingDismiss = null;
-    private boolean mDismissFromSnap = false;
-    private IBinder mPendingEnter = null;
-    private IBinder mAnimatingTransition = null;
-
-    /** Keeps track of currently running animations */
-    private final ArrayList<Animator> mAnimations = new ArrayList<>();
-
-    private Transitions.TransitionFinishCallback mFinishCallback = null;
-    private SurfaceControl.Transaction mFinishTransaction;
-
-    LegacySplitScreenTransitions(@NonNull TransactionPool pool, @NonNull Transitions transitions,
-            @NonNull LegacySplitScreenController splitScreen,
-            @NonNull LegacySplitScreenTaskListener listener) {
-        mTransactionPool = pool;
-        mTransitions = transitions;
-        mSplitScreen = splitScreen;
-        mListener = listener;
-    }
-
-    @Override
-    public WindowContainerTransaction handleRequest(@NonNull IBinder transition,
-            @Nullable TransitionRequestInfo request) {
-        WindowContainerTransaction out = null;
-        final ActivityManager.RunningTaskInfo triggerTask = request.getTriggerTask();
-        final @WindowManager.TransitionType int type = request.getType();
-        if (mSplitScreen.isDividerVisible()) {
-            // try to handle everything while in split-screen
-            out = new WindowContainerTransaction();
-            if (triggerTask != null) {
-                final boolean shouldDismiss =
-                        // if we close the primary-docked task, then leave split-screen since there
-                        // is nothing behind it.
-                        ((type == TRANSIT_CLOSE || type == TRANSIT_TO_BACK)
-                                && triggerTask.parentTaskId == mListener.mPrimary.taskId)
-                        // if an activity that is not supported in multi window mode is launched,
-                        // we also need to leave split-screen.
-                        || ((type == TRANSIT_OPEN || type == TRANSIT_TO_FRONT)
-                                && !triggerTask.supportsMultiWindow);
-                // In both cases, dismiss the primary
-                if (shouldDismiss) {
-                    WindowManagerProxy.buildDismissSplit(out, mListener,
-                            mSplitScreen.getSplitLayout(), true /* dismiss */);
-                    if (type == TRANSIT_OPEN || type == TRANSIT_TO_FRONT) {
-                        out.reorder(triggerTask.token, true /* onTop */);
-                    }
-                    mPendingDismiss = transition;
-                }
-            }
-        } else if (triggerTask != null) {
-            // Not in split mode, so look for an open with a trigger task.
-            if ((type == TRANSIT_OPEN || type == TRANSIT_TO_FRONT)
-                    && triggerTask.configuration.windowConfiguration.getWindowingMode()
-                        == WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) {
-                out = new WindowContainerTransaction();
-                mSplitScreen.prepareEnterSplitTransition(out);
-                mPendingEnter = transition;
-            }
-        }
-        return out;
-    }
-
-    // TODO(shell-transitions): real animations
-    private void startExampleAnimation(@NonNull SurfaceControl leash, boolean show) {
-        final float end = show ? 1.f : 0.f;
-        final float start = 1.f - end;
-        final SurfaceControl.Transaction transaction = mTransactionPool.acquire();
-        final ValueAnimator va = ValueAnimator.ofFloat(start, end);
-        va.setDuration(500);
-        va.addUpdateListener(animation -> {
-            float fraction = animation.getAnimatedFraction();
-            transaction.setAlpha(leash, start * (1.f - fraction) + end * fraction);
-            transaction.apply();
-        });
-        final Runnable finisher = () -> {
-            transaction.setAlpha(leash, end);
-            transaction.apply();
-            mTransactionPool.release(transaction);
-            mTransitions.getMainExecutor().execute(() -> {
-                mAnimations.remove(va);
-                onFinish();
-            });
-        };
-        va.addListener(new Animator.AnimatorListener() {
-            @Override
-            public void onAnimationStart(Animator animation) { }
-
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                finisher.run();
-            }
-
-            @Override
-            public void onAnimationCancel(Animator animation) {
-                finisher.run();
-            }
-
-            @Override
-            public void onAnimationRepeat(Animator animation) { }
-        });
-        mAnimations.add(va);
-        mTransitions.getAnimExecutor().execute(va::start);
-    }
-
-    // TODO(shell-transitions): real animations
-    private void startExampleResizeAnimation(@NonNull SurfaceControl leash,
-            @NonNull Rect startBounds, @NonNull Rect endBounds) {
-        final SurfaceControl.Transaction transaction = mTransactionPool.acquire();
-        final ValueAnimator va = ValueAnimator.ofFloat(0.f, 1.f);
-        va.setDuration(500);
-        va.addUpdateListener(animation -> {
-            float fraction = animation.getAnimatedFraction();
-            transaction.setWindowCrop(leash,
-                    (int) (startBounds.width() * (1.f - fraction) + endBounds.width() * fraction),
-                    (int) (startBounds.height() * (1.f - fraction)
-                            + endBounds.height() * fraction));
-            transaction.setPosition(leash,
-                    startBounds.left * (1.f - fraction) + endBounds.left * fraction,
-                    startBounds.top * (1.f - fraction) + endBounds.top * fraction);
-            transaction.apply();
-        });
-        final Runnable finisher = () -> {
-            transaction.setWindowCrop(leash, 0, 0);
-            transaction.setPosition(leash, endBounds.left, endBounds.top);
-            transaction.apply();
-            mTransactionPool.release(transaction);
-            mTransitions.getMainExecutor().execute(() -> {
-                mAnimations.remove(va);
-                onFinish();
-            });
-        };
-        va.addListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                finisher.run();
-            }
-
-            @Override
-            public void onAnimationCancel(Animator animation) {
-                finisher.run();
-            }
-        });
-        mAnimations.add(va);
-        mTransitions.getAnimExecutor().execute(va::start);
-    }
-
-    @Override
-    public boolean startAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
-            @NonNull SurfaceControl.Transaction startTransaction,
-            @NonNull SurfaceControl.Transaction finishTransaction,
-            @NonNull Transitions.TransitionFinishCallback finishCallback) {
-        if (transition != mPendingDismiss && transition != mPendingEnter) {
-            // If we're not in split-mode, just abort
-            if (!mSplitScreen.isDividerVisible()) return false;
-            // Check to see if HOME is involved
-            for (int i = info.getChanges().size() - 1; i >= 0; --i) {
-                final TransitionInfo.Change change = info.getChanges().get(i);
-                if (change.getTaskInfo() == null
-                        || change.getTaskInfo().getActivityType() != ACTIVITY_TYPE_HOME) continue;
-                if (change.getMode() == TRANSIT_OPEN || change.getMode() == TRANSIT_TO_FRONT) {
-                    mSplitScreen.ensureMinimizedSplit();
-                } else if (change.getMode() == TRANSIT_CLOSE
-                        || change.getMode() == TRANSIT_TO_BACK) {
-                    mSplitScreen.ensureNormalSplit();
-                }
-            }
-            // Use normal animations.
-            return false;
-        }
-
-        mFinishCallback = finishCallback;
-        mFinishTransaction = mTransactionPool.acquire();
-        mAnimatingTransition = transition;
-
-        // Play fade animations
-        for (int i = info.getChanges().size() - 1; i >= 0; --i) {
-            final TransitionInfo.Change change = info.getChanges().get(i);
-            final SurfaceControl leash = change.getLeash();
-            final int mode = info.getChanges().get(i).getMode();
-
-            if (mode == TRANSIT_CHANGE) {
-                if (change.getParent() != null) {
-                    // This is probably reparented, so we want the parent to be immediately visible
-                    final TransitionInfo.Change parentChange = info.getChange(change.getParent());
-                    startTransaction.show(parentChange.getLeash());
-                    startTransaction.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).
-                    startTransaction.reparent(leash, info.getRootLeash());
-                    startTransaction.setLayer(leash, 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 boolean isHome = change.getTaskInfo() != null
-                        && change.getTaskInfo().getActivityType() == ACTIVITY_TYPE_HOME;
-                if (mPendingDismiss == transition && mDismissFromSnap && !isHome) {
-                    // Home is special since it doesn't move during fling. Everything else, though,
-                    // when dismissing from snap, the top/left is at 0,0.
-                    startBounds.offsetTo(0, 0);
-                }
-                final Rect endBounds = new Rect(change.getEndAbsBounds());
-                startBounds.offset(-info.getRootOffset().x, -info.getRootOffset().y);
-                endBounds.offset(-info.getRootOffset().x, -info.getRootOffset().y);
-                startExampleResizeAnimation(leash, startBounds, endBounds);
-            }
-            if (change.getParent() != null) {
-                continue;
-            }
-
-            if (transition == mPendingEnter
-                    && mListener.mPrimary.token.equals(change.getContainer())
-                    || mListener.mSecondary.token.equals(change.getContainer())) {
-                startTransaction.setWindowCrop(leash, change.getStartAbsBounds().width(),
-                        change.getStartAbsBounds().height());
-                if (mListener.mPrimary.token.equals(change.getContainer())) {
-                    // Move layer to top since we want it above the oversized home task during
-                    // animation even though home task is on top in hierarchy.
-                    startTransaction.setLayer(leash, info.getChanges().size() + 1);
-                }
-            }
-            boolean isOpening = Transitions.isOpeningType(info.getType());
-            if (isOpening && (mode == TRANSIT_OPEN || mode == TRANSIT_TO_FRONT)) {
-                // fade in
-                startExampleAnimation(leash, true /* show */);
-            } else if (!isOpening && (mode == TRANSIT_CLOSE || mode == TRANSIT_TO_BACK)) {
-                // fade out
-                if (transition == mPendingDismiss && mDismissFromSnap) {
-                    // Dismissing via snap-to-top/bottom means that the dismissed task is already
-                    // not-visible (usually cropped to oblivion) so immediately set its alpha to 0
-                    // and don't animate it so it doesn't pop-in when reparented.
-                    startTransaction.setAlpha(leash, 0.f);
-                } else {
-                    startExampleAnimation(leash, false /* show */);
-                }
-            }
-        }
-        if (transition == mPendingEnter) {
-            // If entering, check if we should enter into minimized or normal split
-            boolean homeIsVisible = false;
-            for (int i = info.getChanges().size() - 1; i >= 0; --i) {
-                final TransitionInfo.Change change = info.getChanges().get(i);
-                if (change.getTaskInfo() == null
-                        || change.getTaskInfo().getActivityType() != ACTIVITY_TYPE_HOME) {
-                    continue;
-                }
-                homeIsVisible = change.getMode() == TRANSIT_OPEN
-                        || change.getMode() == TRANSIT_TO_FRONT
-                        || change.getMode() == TRANSIT_CHANGE;
-                break;
-            }
-            mSplitScreen.finishEnterSplitTransition(homeIsVisible);
-        }
-        startTransaction.apply();
-        onFinish();
-        return true;
-    }
-
-    @ExternalThread
-    void dismissSplit(LegacySplitScreenTaskListener tiles, LegacySplitDisplayLayout layout,
-            boolean dismissOrMaximize, boolean snapped) {
-        final WindowContainerTransaction wct = new WindowContainerTransaction();
-        WindowManagerProxy.buildDismissSplit(wct, tiles, layout, dismissOrMaximize);
-        mTransitions.getMainExecutor().execute(() -> {
-            mDismissFromSnap = snapped;
-            mPendingDismiss = mTransitions.startTransition(TRANSIT_SPLIT_DISMISS_SNAP, wct, this);
-        });
-    }
-
-    private void onFinish() {
-        if (!mAnimations.isEmpty()) return;
-        mFinishTransaction.apply();
-        mTransactionPool.release(mFinishTransaction);
-        mFinishTransaction = null;
-        mFinishCallback.onTransitionFinished(null /* wct */, null /* wctCB */);
-        mFinishCallback = null;
-        if (mAnimatingTransition == mPendingEnter) {
-            mPendingEnter = null;
-        }
-        if (mAnimatingTransition == mPendingDismiss) {
-            mSplitScreen.onDismissSplit();
-            mPendingDismiss = null;
-        }
-        mDismissFromSnap = false;
-        mAnimatingTransition = null;
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/MinimizedDockShadow.java b/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/MinimizedDockShadow.java
deleted file mode 100644
index 1e9223c..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/MinimizedDockShadow.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.legacysplitscreen;
-
-import android.annotation.Nullable;
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.LinearGradient;
-import android.graphics.Paint;
-import android.graphics.Shader;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.WindowManager;
-
-import com.android.wm.shell.R;
-
-/**
- * Shadow for the minimized dock state on homescreen.
- */
-public class MinimizedDockShadow extends View {
-
-    private final Paint mShadowPaint = new Paint();
-
-    private int mDockSide = WindowManager.DOCKED_INVALID;
-
-    public MinimizedDockShadow(Context context, @Nullable AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    void setDockSide(int dockSide) {
-        if (dockSide != mDockSide) {
-            mDockSide = dockSide;
-            updatePaint(getLeft(), getTop(), getRight(), getBottom());
-            invalidate();
-        }
-    }
-
-    private void updatePaint(int left, int top, int right, int bottom) {
-        int startColor = mContext.getResources().getColor(
-                R.color.minimize_dock_shadow_start, null);
-        int endColor = mContext.getResources().getColor(
-                R.color.minimize_dock_shadow_end, null);
-        final int middleColor = Color.argb(
-                (Color.alpha(startColor) + Color.alpha(endColor)) / 2, 0, 0, 0);
-        final int quarter = Color.argb(
-                (int) (Color.alpha(startColor) * 0.25f + Color.alpha(endColor) * 0.75f),
-                0, 0, 0);
-        if (mDockSide == WindowManager.DOCKED_TOP) {
-            mShadowPaint.setShader(new LinearGradient(
-                    0, 0, 0, bottom - top,
-                    new int[] { startColor, middleColor, quarter, endColor },
-                    new float[] { 0f, 0.35f, 0.6f, 1f }, Shader.TileMode.CLAMP));
-        } else if (mDockSide == WindowManager.DOCKED_LEFT) {
-            mShadowPaint.setShader(new LinearGradient(
-                    0, 0, right - left, 0,
-                    new int[] { startColor, middleColor, quarter, endColor },
-                    new float[] { 0f, 0.35f, 0.6f, 1f }, Shader.TileMode.CLAMP));
-        } else if (mDockSide == WindowManager.DOCKED_RIGHT) {
-            mShadowPaint.setShader(new LinearGradient(
-                    right - left, 0, 0, 0,
-                    new int[] { startColor, middleColor, quarter, endColor },
-                    new float[] { 0f, 0.35f, 0.6f, 1f }, Shader.TileMode.CLAMP));
-        }
-    }
-
-    @Override
-    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
-        super.onLayout(changed, left, top, right, bottom);
-        if (changed) {
-            updatePaint(left, top, right, bottom);
-            invalidate();
-        }
-    }
-
-    @Override
-    protected void onDraw(Canvas canvas) {
-        canvas.drawRect(0, 0, getWidth(), getHeight(), mShadowPaint);
-    }
-
-    @Override
-    public boolean hasOverlappingRendering() {
-        return false;
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/WindowManagerProxy.java b/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/WindowManagerProxy.java
deleted file mode 100644
index e42e43b..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/legacysplitscreen/WindowManagerProxy.java
+++ /dev/null
@@ -1,386 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.legacysplitscreen;
-
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
-import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
-import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
-import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
-import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
-import static android.content.res.Configuration.ORIENTATION_UNDEFINED;
-import static android.view.Display.DEFAULT_DISPLAY;
-
-import android.annotation.NonNull;
-import android.app.ActivityManager;
-import android.app.ActivityTaskManager;
-import android.graphics.Rect;
-import android.os.RemoteException;
-import android.util.Log;
-import android.view.Display;
-import android.view.SurfaceControl;
-import android.view.WindowManagerGlobal;
-import android.window.TaskOrganizer;
-import android.window.WindowContainerToken;
-import android.window.WindowContainerTransaction;
-
-import com.android.internal.annotations.GuardedBy;
-import com.android.internal.util.ArrayUtils;
-import com.android.wm.shell.common.SyncTransactionQueue;
-import com.android.wm.shell.transition.Transitions;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Proxy to simplify calls into window manager/activity manager
- */
-class WindowManagerProxy {
-
-    private static final String TAG = "WindowManagerProxy";
-    private static final int[] HOME_AND_RECENTS = {ACTIVITY_TYPE_HOME, ACTIVITY_TYPE_RECENTS};
-    private static final int[] CONTROLLED_ACTIVITY_TYPES = {
-            ACTIVITY_TYPE_STANDARD,
-            ACTIVITY_TYPE_HOME,
-            ACTIVITY_TYPE_RECENTS,
-            ACTIVITY_TYPE_UNDEFINED
-    };
-    private static final int[] CONTROLLED_WINDOWING_MODES = {
-            WINDOWING_MODE_FULLSCREEN,
-            WINDOWING_MODE_SPLIT_SCREEN_SECONDARY,
-            WINDOWING_MODE_UNDEFINED
-    };
-
-    @GuardedBy("mDockedRect")
-    private final Rect mDockedRect = new Rect();
-
-    private final Rect mTmpRect1 = new Rect();
-
-    @GuardedBy("mDockedRect")
-    private final Rect mTouchableRegion = new Rect();
-
-    private final SyncTransactionQueue mSyncTransactionQueue;
-    private final TaskOrganizer mTaskOrganizer;
-
-    WindowManagerProxy(SyncTransactionQueue syncQueue, TaskOrganizer taskOrganizer) {
-        mSyncTransactionQueue = syncQueue;
-        mTaskOrganizer = taskOrganizer;
-    }
-
-    void dismissOrMaximizeDocked(final LegacySplitScreenTaskListener tiles,
-            LegacySplitDisplayLayout layout, final boolean dismissOrMaximize) {
-        if (Transitions.ENABLE_SHELL_TRANSITIONS) {
-            tiles.mSplitScreenController.startDismissSplit(!dismissOrMaximize, true /* snapped */);
-        } else {
-            applyDismissSplit(tiles, layout, dismissOrMaximize);
-        }
-    }
-
-    public void setResizing(final boolean resizing) {
-        try {
-            ActivityTaskManager.getService().setSplitScreenResizing(resizing);
-        } catch (RemoteException e) {
-            Log.w(TAG, "Error calling setDockedStackResizing: " + e);
-        }
-    }
-
-    /** Sets a touch region */
-    public void setTouchRegion(Rect region) {
-        try {
-            synchronized (mDockedRect) {
-                mTouchableRegion.set(region);
-            }
-            WindowManagerGlobal.getWindowManagerService().setDockedTaskDividerTouchRegion(
-                    mTouchableRegion);
-        } catch (RemoteException e) {
-            Log.w(TAG, "Failed to set touchable region: " + e);
-        }
-    }
-
-    void applyResizeSplits(int position, LegacySplitDisplayLayout splitLayout) {
-        WindowContainerTransaction t = new WindowContainerTransaction();
-        splitLayout.resizeSplits(position, t);
-        applySyncTransaction(t);
-    }
-
-    boolean getHomeAndRecentsTasks(List<ActivityManager.RunningTaskInfo> out,
-            WindowContainerToken parent) {
-        boolean resizable = false;
-        List<ActivityManager.RunningTaskInfo> rootTasks = parent == null
-                ? mTaskOrganizer.getRootTasks(Display.DEFAULT_DISPLAY, HOME_AND_RECENTS)
-                : mTaskOrganizer.getChildTasks(parent, HOME_AND_RECENTS);
-        for (int i = 0, n = rootTasks.size(); i < n; ++i) {
-            final ActivityManager.RunningTaskInfo ti = rootTasks.get(i);
-            out.add(ti);
-            if (ti.topActivityType == ACTIVITY_TYPE_HOME) {
-                resizable = ti.isResizeable;
-            }
-        }
-        return resizable;
-    }
-
-    /**
-     * Assign a fixed override-bounds to home tasks that reflect their geometry while the primary
-     * split is minimized. This actually "sticks out" of the secondary split area, but when in
-     * minimized mode, the secondary split gets a 'negative' crop to expose it.
-     */
-    boolean applyHomeTasksMinimized(LegacySplitDisplayLayout layout, WindowContainerToken parent,
-            @NonNull WindowContainerTransaction wct) {
-        // Resize the home/recents stacks to the larger minimized-state size
-        final Rect homeBounds;
-        final ArrayList<ActivityManager.RunningTaskInfo> homeStacks = new ArrayList<>();
-        boolean isHomeResizable = getHomeAndRecentsTasks(homeStacks, parent);
-        if (isHomeResizable) {
-            homeBounds = layout.calcResizableMinimizedHomeStackBounds();
-        } else {
-            // home is not resizable, so lock it to its inherent orientation size.
-            homeBounds = new Rect(0, 0, 0, 0);
-            for (int i = homeStacks.size() - 1; i >= 0; --i) {
-                if (homeStacks.get(i).topActivityType == ACTIVITY_TYPE_HOME) {
-                    final int orient = homeStacks.get(i).configuration.orientation;
-                    final boolean displayLandscape = layout.mDisplayLayout.isLandscape();
-                    final boolean isLandscape = orient == ORIENTATION_LANDSCAPE
-                            || (orient == ORIENTATION_UNDEFINED && displayLandscape);
-                    homeBounds.right = isLandscape == displayLandscape
-                            ? layout.mDisplayLayout.width() : layout.mDisplayLayout.height();
-                    homeBounds.bottom = isLandscape == displayLandscape
-                            ? layout.mDisplayLayout.height() : layout.mDisplayLayout.width();
-                    break;
-                }
-            }
-        }
-        for (int i = homeStacks.size() - 1; i >= 0; --i) {
-            // For non-resizable homes, the minimized size is actually the fullscreen-size. As a
-            // result, we don't minimize for recents since it only shows half-size screenshots.
-            if (!isHomeResizable) {
-                if (homeStacks.get(i).topActivityType == ACTIVITY_TYPE_RECENTS) {
-                    continue;
-                }
-                wct.setWindowingMode(homeStacks.get(i).token, WINDOWING_MODE_FULLSCREEN);
-            }
-            wct.setBounds(homeStacks.get(i).token, homeBounds);
-        }
-        layout.mTiles.mHomeBounds.set(homeBounds);
-        return isHomeResizable;
-    }
-
-    /** @see #buildEnterSplit */
-    boolean applyEnterSplit(LegacySplitScreenTaskListener tiles, LegacySplitDisplayLayout layout) {
-        // Set launchtile first so that any stack created after
-        // getAllRootTaskInfos and before reparent (even if unlikely) are placed
-        // correctly.
-        WindowContainerTransaction wct = new WindowContainerTransaction();
-        wct.setLaunchRoot(tiles.mSecondary.token, CONTROLLED_WINDOWING_MODES,
-                CONTROLLED_ACTIVITY_TYPES);
-        final boolean isHomeResizable = buildEnterSplit(wct, tiles, layout);
-        applySyncTransaction(wct);
-        return isHomeResizable;
-    }
-
-    /**
-     * Finishes entering split-screen by reparenting all FULLSCREEN tasks into the secondary split.
-     * This assumes there is already something in the primary split since that is usually what
-     * triggers a call to this. In the same transaction, this overrides the home task bounds via
-     * {@link #applyHomeTasksMinimized}.
-     *
-     * @return whether the home stack is resizable
-     */
-    boolean buildEnterSplit(WindowContainerTransaction outWct, LegacySplitScreenTaskListener tiles,
-            LegacySplitDisplayLayout layout) {
-        List<ActivityManager.RunningTaskInfo> rootTasks =
-                mTaskOrganizer.getRootTasks(DEFAULT_DISPLAY, null /* activityTypes */);
-        if (rootTasks.isEmpty()) {
-            return false;
-        }
-        ActivityManager.RunningTaskInfo topHomeTask = null;
-        for (int i = rootTasks.size() - 1; i >= 0; --i) {
-            final ActivityManager.RunningTaskInfo rootTask = rootTasks.get(i);
-            // Check whether the task can be moved to split secondary.
-            if (!rootTask.supportsMultiWindow && rootTask.topActivityType != ACTIVITY_TYPE_HOME) {
-                continue;
-            }
-            // Only move split controlling tasks to split secondary.
-            final int windowingMode = rootTask.getWindowingMode();
-            if (!ArrayUtils.contains(CONTROLLED_WINDOWING_MODES, windowingMode)
-                    || !ArrayUtils.contains(CONTROLLED_ACTIVITY_TYPES, rootTask.getActivityType())
-                    // Excludes split screen secondary due to it's the root we're reparenting to.
-                    || windowingMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY) {
-                continue;
-            }
-            // Since this iterates from bottom to top, update topHomeTask for every fullscreen task
-            // so it will be left with the status of the top one.
-            topHomeTask = isHomeOrRecentTask(rootTask) ? rootTask : null;
-            outWct.reparent(rootTask.token, tiles.mSecondary.token, true /* onTop */);
-        }
-        // Move the secondary split-forward.
-        outWct.reorder(tiles.mSecondary.token, true /* onTop */);
-        boolean isHomeResizable = applyHomeTasksMinimized(layout, null /* parent */,
-                outWct);
-        if (topHomeTask != null && !Transitions.ENABLE_SHELL_TRANSITIONS) {
-            // Translate/update-crop of secondary out-of-band with sync transaction -- Until BALST
-            // is enabled, this temporarily syncs the home surface position with offset until
-            // sync transaction finishes.
-            outWct.setBoundsChangeTransaction(topHomeTask.token, tiles.mHomeBounds);
-        }
-        return isHomeResizable;
-    }
-
-    static boolean isHomeOrRecentTask(ActivityManager.RunningTaskInfo ti) {
-        final int atype = ti.getActivityType();
-        return atype == ACTIVITY_TYPE_HOME || atype == ACTIVITY_TYPE_RECENTS;
-    }
-
-    /** @see #buildDismissSplit */
-    void applyDismissSplit(LegacySplitScreenTaskListener tiles, LegacySplitDisplayLayout layout,
-            boolean dismissOrMaximize) {
-        // TODO(task-org): Once task-org is more complete, consider using Appeared/Vanished
-        //                 plus specific APIs to clean this up.
-        final WindowContainerTransaction wct = new WindowContainerTransaction();
-        // Set launch root first so that any task created after getChildContainers and
-        // before reparent (pretty unlikely) are put into fullscreen.
-        wct.setLaunchRoot(tiles.mSecondary.token, null, null);
-        buildDismissSplit(wct, tiles, layout, dismissOrMaximize);
-        applySyncTransaction(wct);
-    }
-
-    /**
-     * Reparents all tile members back to their display and resets home task override bounds.
-     * @param dismissOrMaximize When {@code true} this resolves the split by closing the primary
-     *                          split (thus resulting in the top of the secondary split becoming
-     *                          fullscreen. {@code false} resolves the other way.
-     */
-    static void buildDismissSplit(WindowContainerTransaction outWct,
-            LegacySplitScreenTaskListener tiles, LegacySplitDisplayLayout layout,
-            boolean dismissOrMaximize) {
-        // TODO(task-org): Once task-org is more complete, consider using Appeared/Vanished
-        //                 plus specific APIs to clean this up.
-        final TaskOrganizer taskOrg = tiles.getTaskOrganizer();
-        List<ActivityManager.RunningTaskInfo> primaryChildren =
-                taskOrg.getChildTasks(tiles.mPrimary.token, null /* activityTypes */);
-        List<ActivityManager.RunningTaskInfo> secondaryChildren =
-                taskOrg.getChildTasks(tiles.mSecondary.token, null /* activityTypes */);
-        // In some cases (eg. non-resizable is launched), system-server will leave split-screen.
-        // as a result, the above will not capture any tasks; yet, we need to clean-up the
-        // home task bounds.
-        List<ActivityManager.RunningTaskInfo> freeHomeAndRecents =
-                taskOrg.getRootTasks(DEFAULT_DISPLAY, HOME_AND_RECENTS);
-        // Filter out the root split tasks
-        freeHomeAndRecents.removeIf(p -> p.token.equals(tiles.mSecondary.token)
-                || p.token.equals(tiles.mPrimary.token));
-
-        if (primaryChildren.isEmpty() && secondaryChildren.isEmpty()
-                && freeHomeAndRecents.isEmpty()) {
-            return;
-        }
-        if (dismissOrMaximize) {
-            // Dismissing, so move all primary split tasks first
-            for (int i = primaryChildren.size() - 1; i >= 0; --i) {
-                outWct.reparent(primaryChildren.get(i).token, null /* parent */,
-                        true /* onTop */);
-            }
-            boolean homeOnTop = false;
-            // Don't need to worry about home tasks because they are already in the "proper"
-            // order within the secondary split.
-            for (int i = secondaryChildren.size() - 1; i >= 0; --i) {
-                final ActivityManager.RunningTaskInfo ti = secondaryChildren.get(i);
-                outWct.reparent(ti.token, null /* parent */, true /* onTop */);
-                if (isHomeOrRecentTask(ti)) {
-                    outWct.setBounds(ti.token, null);
-                    outWct.setWindowingMode(ti.token, WINDOWING_MODE_UNDEFINED);
-                    if (i == 0) {
-                        homeOnTop = true;
-                    }
-                }
-            }
-            if (homeOnTop && !Transitions.ENABLE_SHELL_TRANSITIONS) {
-                // Translate/update-crop of secondary out-of-band with sync transaction -- instead
-                // play this in sync with new home-app frame because until BALST is enabled this
-                // shows up on screen before the syncTransaction returns.
-                // We only have access to the secondary root surface, though, so in order to
-                // position things properly, we have to take into account the existing negative
-                // offset/crop of the minimized-home task.
-                final boolean landscape = layout.mDisplayLayout.isLandscape();
-                final int posX = landscape ? layout.mSecondary.left - tiles.mHomeBounds.left
-                        : layout.mSecondary.left;
-                final int posY = landscape ? layout.mSecondary.top
-                        : layout.mSecondary.top - tiles.mHomeBounds.top;
-                final SurfaceControl.Transaction sft = new SurfaceControl.Transaction();
-                sft.setPosition(tiles.mSecondarySurface, posX, posY);
-                final Rect crop = new Rect(0, 0, layout.mDisplayLayout.width(),
-                        layout.mDisplayLayout.height());
-                crop.offset(-posX, -posY);
-                sft.setWindowCrop(tiles.mSecondarySurface, crop);
-                outWct.setBoundsChangeTransaction(tiles.mSecondary.token, sft);
-            }
-        } else {
-            // Maximize, so move non-home secondary split first
-            for (int i = secondaryChildren.size() - 1; i >= 0; --i) {
-                if (isHomeOrRecentTask(secondaryChildren.get(i))) {
-                    continue;
-                }
-                outWct.reparent(secondaryChildren.get(i).token, null /* parent */,
-                        true /* onTop */);
-            }
-            // Find and place home tasks in-between. This simulates the fact that there was
-            // nothing behind the primary split's tasks.
-            for (int i = secondaryChildren.size() - 1; i >= 0; --i) {
-                final ActivityManager.RunningTaskInfo ti = secondaryChildren.get(i);
-                if (isHomeOrRecentTask(ti)) {
-                    outWct.reparent(ti.token, null /* parent */, true /* onTop */);
-                    // reset bounds and mode too
-                    outWct.setBounds(ti.token, null);
-                    outWct.setWindowingMode(ti.token, WINDOWING_MODE_UNDEFINED);
-                }
-            }
-            for (int i = primaryChildren.size() - 1; i >= 0; --i) {
-                outWct.reparent(primaryChildren.get(i).token, null /* parent */,
-                        true /* onTop */);
-            }
-        }
-        for (int i = freeHomeAndRecents.size() - 1; i >= 0; --i) {
-            outWct.setBounds(freeHomeAndRecents.get(i).token, null);
-            outWct.setWindowingMode(freeHomeAndRecents.get(i).token, WINDOWING_MODE_UNDEFINED);
-        }
-        // Reset focusable to true
-        outWct.setFocusable(tiles.mPrimary.token, true /* focusable */);
-    }
-
-    /**
-     * Utility to apply a sync transaction serially with other sync transactions.
-     *
-     * @see SyncTransactionQueue#queue
-     */
-    void applySyncTransaction(WindowContainerTransaction wct) {
-        mSyncTransactionQueue.queue(wct);
-    }
-
-    /**
-     * @see SyncTransactionQueue#queueIfWaiting
-     */
-    boolean queueSyncTransactionIfWaiting(WindowContainerTransaction wct) {
-        return mSyncTransactionQueue.queueIfWaiting(wct);
-    }
-
-    /**
-     * @see SyncTransactionQueue#runInSync
-     */
-    void runInSync(SyncTransactionQueue.TransactionRunnable runnable) {
-        mSyncTransactionQueue.runInSync(runnable);
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHanded.java b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHanded.java
index b00182f..76c0f41 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHanded.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHanded.java
@@ -16,7 +16,6 @@
 
 package com.android.wm.shell.onehanded;
 
-import android.content.res.Configuration;
 import android.os.SystemProperties;
 
 import com.android.wm.shell.common.annotations.ExternalThread;
@@ -83,17 +82,7 @@
     void registerTransitionCallback(OneHandedTransitionCallback callback);
 
     /**
-     * Receive onConfigurationChanged() events
-     */
-    void onConfigChanged(Configuration newConfig);
-
-    /**
      * Notifies when user switch complete
      */
     void onUserSwitch(int userId);
-
-    /**
-     * Notifies when keyguard visibility changed
-     */
-    void onKeyguardVisibilityChanged(boolean showing);
 }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java
index 179b725..24f02ac 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java
@@ -28,17 +28,16 @@
 import android.annotation.BinderThread;
 import android.content.ComponentName;
 import android.content.Context;
-import android.content.om.IOverlayManager;
 import android.content.res.Configuration;
 import android.database.ContentObserver;
 import android.graphics.Rect;
 import android.os.Handler;
-import android.os.ServiceManager;
 import android.os.SystemProperties;
 import android.provider.Settings;
 import android.util.Slog;
 import android.view.WindowManager;
 import android.view.accessibility.AccessibilityManager;
+import android.window.DisplayAreaInfo;
 import android.window.WindowContainerTransaction;
 
 import androidx.annotation.NonNull;
@@ -55,6 +54,9 @@
 import com.android.wm.shell.common.TaskStackListenerCallback;
 import com.android.wm.shell.common.TaskStackListenerImpl;
 import com.android.wm.shell.common.annotations.ExternalThread;
+import com.android.wm.shell.sysui.ConfigurationChangeListener;
+import com.android.wm.shell.sysui.KeyguardChangeListener;
+import com.android.wm.shell.sysui.ShellController;
 
 import java.io.PrintWriter;
 
@@ -62,7 +64,8 @@
  * Manages and manipulates the one handed states, transitions, and gesture for phones.
  */
 public class OneHandedController implements RemoteCallable<OneHandedController>,
-        DisplayChangeController.OnDisplayChangingListener {
+        DisplayChangeController.OnDisplayChangingListener, ConfigurationChangeListener,
+        KeyguardChangeListener {
     private static final String TAG = "OneHandedController";
 
     private static final String ONE_HANDED_MODE_OFFSET_PERCENTAGE =
@@ -82,6 +85,7 @@
 
     private Context mContext;
 
+    private final ShellController mShellController;
     private final AccessibilityManager mAccessibilityManager;
     private final DisplayController mDisplayController;
     private final OneHandedSettingsUtil mOneHandedSettingsUtil;
@@ -91,7 +95,6 @@
     private final OneHandedState mState;
     private final OneHandedTutorialHandler mTutorialHandler;
     private final TaskStackListenerImpl mTaskStackListener;
-    private final IOverlayManager mOverlayManager;
     private final ShellExecutor mMainExecutor;
     private final Handler mMainHandler;
     private final OneHandedImpl mImpl = new OneHandedImpl();
@@ -190,8 +193,9 @@
      * Creates {@link OneHandedController}, returns {@code null} if the feature is not supported.
      */
     public static OneHandedController create(
-            Context context, WindowManager windowManager, DisplayController displayController,
-            DisplayLayout displayLayout, TaskStackListenerImpl taskStackListener,
+            Context context, ShellController shellController, WindowManager windowManager,
+            DisplayController displayController, DisplayLayout displayLayout,
+            TaskStackListenerImpl taskStackListener,
             InteractionJankMonitor jankMonitor, UiEventLogger uiEventLogger,
             ShellExecutor mainExecutor, Handler mainHandler) {
         OneHandedSettingsUtil settingsUtil = new OneHandedSettingsUtil();
@@ -209,16 +213,15 @@
                 context, displayLayout, settingsUtil, animationController, tutorialHandler,
                 jankMonitor, mainExecutor);
         OneHandedUiEventLogger oneHandedUiEventsLogger = new OneHandedUiEventLogger(uiEventLogger);
-        IOverlayManager overlayManager = IOverlayManager.Stub.asInterface(
-                ServiceManager.getService(Context.OVERLAY_SERVICE));
-        return new OneHandedController(context, displayController, organizer, touchHandler,
-                tutorialHandler, settingsUtil, accessibilityUtil, timeoutHandler, oneHandedState,
-                jankMonitor, oneHandedUiEventsLogger, overlayManager, taskStackListener,
+        return new OneHandedController(context, shellController, displayController, organizer,
+                touchHandler, tutorialHandler, settingsUtil, accessibilityUtil, timeoutHandler,
+                oneHandedState, oneHandedUiEventsLogger, taskStackListener,
                 mainExecutor, mainHandler);
     }
 
     @VisibleForTesting
     OneHandedController(Context context,
+            ShellController shellController,
             DisplayController displayController,
             OneHandedDisplayAreaOrganizer displayAreaOrganizer,
             OneHandedTouchHandler touchHandler,
@@ -227,13 +230,12 @@
             OneHandedAccessibilityUtil oneHandedAccessibilityUtil,
             OneHandedTimeoutHandler timeoutHandler,
             OneHandedState state,
-            InteractionJankMonitor jankMonitor,
             OneHandedUiEventLogger uiEventsLogger,
-            IOverlayManager overlayManager,
             TaskStackListenerImpl taskStackListener,
             ShellExecutor mainExecutor,
             Handler mainHandler) {
         mContext = context;
+        mShellController = shellController;
         mOneHandedSettingsUtil = settingsUtil;
         mOneHandedAccessibilityUtil = oneHandedAccessibilityUtil;
         mDisplayAreaOrganizer = displayAreaOrganizer;
@@ -241,7 +243,6 @@
         mTouchHandler = touchHandler;
         mState = state;
         mTutorialHandler = tutorialHandler;
-        mOverlayManager = overlayManager;
         mMainExecutor = mainExecutor;
         mMainHandler = mainHandler;
         mOneHandedUiEventLogger = uiEventsLogger;
@@ -279,6 +280,8 @@
                 mAccessibilityStateChangeListener);
 
         mState.addSListeners(mTutorialHandler);
+        mShellController.addConfigurationChangeListener(this);
+        mShellController.addKeyguardChangeListener(this);
     }
 
     public OneHanded asOneHanded() {
@@ -594,7 +597,8 @@
         mLockedDisabled = locked && !enabled;
     }
 
-    private void onConfigChanged(Configuration newConfig) {
+    @Override
+    public void onConfigurationChanged(Configuration newConfig) {
         if (mTutorialHandler == null) {
             return;
         }
@@ -604,8 +608,11 @@
         mTutorialHandler.onConfigurationChanged();
     }
 
-    private void onKeyguardVisibilityChanged(boolean showing) {
-        mKeyguardShowing = showing;
+    @Override
+    public void onKeyguardVisibilityChanged(boolean visible, boolean occluded,
+            boolean animatingDismiss) {
+        mKeyguardShowing = visible;
+        stopOneHanded();
     }
 
     private void onUserSwitch(int newUserId) {
@@ -659,11 +666,11 @@
     }
 
     /**
-     * Handles rotation based on OnDisplayChangingListener callback
+     * Handles display change based on OnDisplayChangingListener callback
      */
     @Override
-    public void onRotateDisplay(int displayId, int fromRotation, int toRotation,
-            WindowContainerTransaction wct) {
+    public void onDisplayChange(int displayId, int fromRotation, int toRotation,
+            DisplayAreaInfo newDisplayAreaInfo, WindowContainerTransaction wct) {
         if (!isInitialized()) {
             return;
         }
@@ -674,9 +681,12 @@
             return;
         }
 
+        if (mState.getState() == STATE_ACTIVE) {
+            mOneHandedUiEventLogger.writeEvent(
+                    OneHandedUiEventLogger.EVENT_ONE_HANDED_TRIGGER_ROTATION_OUT);
+        }
+
         mDisplayAreaOrganizer.onRotateDisplay(mContext, toRotation, wct);
-        mOneHandedUiEventLogger.writeEvent(
-                OneHandedUiEventLogger.EVENT_ONE_HANDED_TRIGGER_ROTATION_OUT);
     }
 
     /**
@@ -750,25 +760,11 @@
         }
 
         @Override
-        public void onConfigChanged(Configuration newConfig) {
-            mMainExecutor.execute(() -> {
-                OneHandedController.this.onConfigChanged(newConfig);
-            });
-        }
-
-        @Override
         public void onUserSwitch(int userId) {
             mMainExecutor.execute(() -> {
                 OneHandedController.this.onUserSwitch(userId);
             });
         }
-
-        @Override
-        public void onKeyguardVisibilityChanged(boolean showing) {
-            mMainExecutor.execute(() -> {
-                OneHandedController.this.onKeyguardVisibilityChanged(showing);
-            });
-        }
     }
 
     /**
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java
index f61d1b9..451afa0 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java
@@ -159,6 +159,10 @@
 
     @Override
     public void onDisplayAreaVanished(@NonNull DisplayAreaInfo displayAreaInfo) {
+        final SurfaceControl leash = mDisplayAreaTokenMap.get(displayAreaInfo.token);
+        if (leash != null) {
+            leash.release();
+        }
         mDisplayAreaTokenMap.remove(displayAreaInfo.token);
     }
 
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/Pip.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/Pip.java
index 3b3091a..38631ce 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/Pip.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/Pip.java
@@ -16,7 +16,6 @@
 
 package com.android.wm.shell.pip;
 
-import android.content.res.Configuration;
 import android.graphics.Rect;
 
 import com.android.wm.shell.common.annotations.ExternalThread;
@@ -44,24 +43,6 @@
     }
 
     /**
-     * Called when configuration is changed.
-     */
-    default void onConfigurationChanged(Configuration newConfig) {
-    }
-
-    /**
-     * Called when display size or font size of settings changed
-     */
-    default void onDensityOrFontScaleChanged() {
-    }
-
-    /**
-     * Called when overlay package change invoked.
-     */
-    default void onOverlayChanged() {
-    }
-
-    /**
      * Called when SysUI state changed.
      *
      * @param isSysUiStateValid Is SysUI state valid or not.
@@ -86,12 +67,12 @@
     }
 
     /**
-     * Registers the pinned stack animation listener.
+     * Set the callback when {@link PipTaskOrganizer#isInPip()} state is changed.
      *
-     * @param callback The callback of pinned stack animation.
+     * @param callback The callback accepts the result of {@link PipTaskOrganizer#isInPip()}
+     *                 when it's changed.
      */
-    default void setPinnedStackAnimationListener(Consumer<Boolean> callback) {
-    }
+    default void setOnIsInPipStateChangedListener(Consumer<Boolean> callback) {}
 
     /**
      * Set the pinned stack with {@link PipAnimationController.AnimationType}
@@ -120,23 +101,6 @@
     default void removePipExclusionBoundsChangeListener(Consumer<Rect> listener) { }
 
     /**
-     * Called when the visibility of keyguard is changed.
-     * @param showing {@code true} if keyguard is now showing, {@code false} otherwise.
-     * @param animating {@code true} if system is animating between keyguard and surface behind,
-     *                              this only makes sense when showing is {@code false}.
-     */
-    default void onKeyguardVisibilityChanged(boolean showing, boolean animating) { }
-
-    /**
-     * Called when the dismissing animation keyguard and surfaces behind is finished.
-     * See also {@link #onKeyguardVisibilityChanged(boolean, boolean)}.
-     *
-     * TODO(b/206741900) deprecate this path once we're able to animate the PiP window as part of
-     * keyguard dismiss animation.
-     */
-    default void onKeyguardDismissAnimationFinished() { }
-
-    /**
      * Dump the current state and information if need.
      *
      * @param pw The stream to dump information to.
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 4eba169..81e49f8 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
@@ -183,7 +183,7 @@
         return mCurrentAnimator;
     }
 
-    PipTransitionAnimator getCurrentAnimator() {
+    public PipTransitionAnimator getCurrentAnimator() {
         return mCurrentAnimator;
     }
 
@@ -591,7 +591,7 @@
                         final Rect insets = computeInsets(fraction);
                         getSurfaceTransactionHelper().scaleAndCrop(tx, leash,
                                 sourceHintRect, initialSourceValue, bounds, insets,
-                                isInPipDirection);
+                                isInPipDirection, fraction);
                         if (shouldApplyCornerRadius()) {
                             final Rect sourceBounds = new Rect(initialContainerRect);
                             sourceBounds.inset(insets);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipSurfaceTransactionHelper.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipSurfaceTransactionHelper.java
index a017a26..3ac08a6 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipSurfaceTransactionHelper.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipSurfaceTransactionHelper.java
@@ -39,6 +39,10 @@
     private int mCornerRadius;
     private int mShadowRadius;
 
+    public PipSurfaceTransactionHelper(Context context) {
+        onDensityOrFontScaleChanged(context);
+    }
+
     /**
      * Called when display size or font size of settings changed
      *
@@ -104,7 +108,7 @@
     public PipSurfaceTransactionHelper scaleAndCrop(SurfaceControl.Transaction tx,
             SurfaceControl leash, Rect sourceRectHint,
             Rect sourceBounds, Rect destinationBounds, Rect insets,
-            boolean isInPipDirection) {
+            boolean isInPipDirection, float fraction) {
         mTmpDestinationRect.set(sourceBounds);
         // Similar to {@link #scale}, we want to position the surface relative to the screen
         // coordinates so offset the bounds to 0,0
@@ -116,9 +120,13 @@
         if (isInPipDirection
                 && sourceRectHint != null && sourceRectHint.width() < sourceBounds.width()) {
             // scale by sourceRectHint if it's not edge-to-edge, for entering PiP transition only.
-            scale = sourceBounds.width() <= sourceBounds.height()
+            final float endScale = sourceBounds.width() <= sourceBounds.height()
                     ? (float) destinationBounds.width() / sourceRectHint.width()
                     : (float) destinationBounds.height() / sourceRectHint.height();
+            final float startScale = sourceBounds.width() <= sourceBounds.height()
+                    ? (float) destinationBounds.width() / sourceBounds.width()
+                    : (float) destinationBounds.height() / sourceBounds.height();
+            scale = (1 - fraction) * startScale + fraction * endScale;
         } else {
             scale = sourceBounds.width() <= sourceBounds.height()
                     ? (float) destinationBounds.width() / sourceBounds.width()
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 e624de6..f747b5e 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
@@ -62,6 +62,7 @@
 import android.graphics.Rect;
 import android.os.RemoteException;
 import android.os.SystemClock;
+import android.util.Log;
 import android.view.Display;
 import android.view.Surface;
 import android.view.SurfaceControl;
@@ -126,7 +127,7 @@
     private final PipBoundsAlgorithm mPipBoundsAlgorithm;
     private final @NonNull PipMenuController mPipMenuController;
     private final PipAnimationController mPipAnimationController;
-    private final PipTransitionController mPipTransitionController;
+    protected final PipTransitionController mPipTransitionController;
     protected final PipParamsChangedForwarder mPipParamsChangedForwarder;
     private final PipUiEventLogger mPipUiEventLoggerLogger;
     private final int mEnterAnimationDuration;
@@ -195,6 +196,26 @@
         }
     };
 
+    @VisibleForTesting
+    final PipTransitionController.PipTransitionCallback mPipTransitionCallback =
+            new PipTransitionController.PipTransitionCallback() {
+                @Override
+                public void onPipTransitionStarted(int direction, Rect pipBounds) {}
+
+                @Override
+                public void onPipTransitionFinished(int direction) {
+                    // Apply the deferred RunningTaskInfo if applicable after all proper callbacks
+                    // are sent.
+                    if (direction == TRANSITION_DIRECTION_TO_PIP && mDeferredTaskInfo != null) {
+                        onTaskInfoChanged(mDeferredTaskInfo);
+                        mDeferredTaskInfo = null;
+                    }
+                }
+
+                @Override
+                public void onPipTransitionCanceled(int direction) {}
+            };
+
     private final PipAnimationController.PipTransactionHandler mPipTransactionHandler =
             new PipAnimationController.PipTransactionHandler() {
                 @Override
@@ -215,7 +236,7 @@
     private ActivityManager.RunningTaskInfo mDeferredTaskInfo;
     private WindowContainerToken mToken;
     private SurfaceControl mLeash;
-    private PipTransitionState mPipTransitionState;
+    protected PipTransitionState mPipTransitionState;
     private @PipAnimationController.AnimationType int mOneShotAnimationType = ANIM_TYPE_BOUNDS;
     private long mLastOneShotAlphaAnimationTime;
     private PipSurfaceTransactionHelper.SurfaceControlTransactionFactory
@@ -295,6 +316,11 @@
         mTaskOrganizer.addFocusListener(this);
         mPipTransitionController.setPipOrganizer(this);
         displayController.addDisplayWindowListener(this);
+        pipTransitionController.registerPipTransitionCallback(mPipTransitionCallback);
+    }
+
+    public PipTransitionController getTransitionController() {
+        return mPipTransitionController;
     }
 
     public Rect getCurrentOrAnimatingBounds() {
@@ -440,7 +466,7 @@
             // When exit to fullscreen with Shell transition enabled, we update the Task windowing
             // mode directly so that it can also trigger display rotation and visibility update in
             // the same transition if there will be any.
-            wct.setWindowingMode(mToken, WINDOWING_MODE_UNDEFINED);
+            wct.setWindowingMode(mToken, getOutPipWindowingMode());
             // We can inherit the parent bounds as it is going to be fullscreen. The
             // destinationBounds calculated above will be incorrect if this is with rotation.
             wct.setBounds(mToken, null);
@@ -458,7 +484,8 @@
         }
 
         // Cancel the existing animator if there is any.
-        cancelCurrentAnimator();
+        // TODO(b/232439933): this is disabled temporarily to unblock b/234502692.
+        // cancelCurrentAnimator();
 
         // Set the exiting state first so if there is fixed rotation later, the running animation
         // won't be interrupted by alpha animation for existing PiP.
@@ -538,7 +565,7 @@
         if (Transitions.ENABLE_SHELL_TRANSITIONS) {
             final WindowContainerTransaction wct = new WindowContainerTransaction();
             wct.setBounds(mToken, null);
-            wct.setWindowingMode(mToken, WINDOWING_MODE_UNDEFINED);
+            wct.setWindowingMode(mToken, getOutPipWindowingMode());
             wct.reorder(mToken, false);
             mPipTransitionController.startExitTransition(TRANSIT_REMOVE_PIP, wct,
                     null /* destinationBounds */);
@@ -767,11 +794,6 @@
             mPipTransitionState.setTransitionState(PipTransitionState.ENTERED_PIP);
         }
         mPipTransitionController.sendOnPipTransitionFinished(direction);
-        // Apply the deferred RunningTaskInfo if applicable after all proper callbacks are sent.
-        if (direction == TRANSITION_DIRECTION_TO_PIP && mDeferredTaskInfo != null) {
-            onTaskInfoChanged(mDeferredTaskInfo);
-            mDeferredTaskInfo = null;
-        }
     }
 
     private void sendOnPipTransitionCancelled(
@@ -925,6 +947,12 @@
 
     /** Called when exiting PIP transition is finished to do the state cleanup. */
     void onExitPipFinished(TaskInfo info) {
+        if (mLeash == null) {
+            // TODO(239461594): Remove once the double call to onExitPipFinished() is fixed
+            Log.w(TAG, "Warning, onExitPipFinished() called multiple times in the same sessino");
+            return;
+        }
+
         clearWaitForFixedRotation();
         if (mSwipePipToHomeOverlay != null) {
             removeContentOverlay(mSwipePipToHomeOverlay, null /* callback */);
@@ -937,7 +965,8 @@
         // Re-set the PIP bounds to none.
         mPipBoundsState.setBounds(new Rect());
         mPipUiEventLoggerLogger.setTaskInfo(null);
-        mPipMenuController.detach();
+        mMainExecutor.executeDelayed(() -> mPipMenuController.detach(), 0);
+        mLeash = null;
 
         if (info.displayId != Display.DEFAULT_DISPLAY && mOnDisplayIdChangeCallback != null) {
             mOnDisplayIdChangeCallback.accept(Display.DEFAULT_DISPLAY);
@@ -1467,6 +1496,11 @@
                     "%s: Abort animation, invalid leash", TAG);
             return null;
         }
+        if (isInPipDirection(direction)
+                && !isSourceRectHintValidForEnterPip(sourceHintRect, destinationBounds)) {
+            // The given source rect hint is too small for enter PiP animation, reset it to null.
+            sourceHintRect = null;
+        }
         final int rotationDelta = mWaitForFixedRotation
                 ? deltaRotation(mCurrentRotation, mNextRotation)
                 : Surface.ROTATION_0;
@@ -1541,6 +1575,20 @@
     }
 
     /**
+     * This is a situation in which the source rect hint on at least one axis is smaller
+     * than the destination bounds, which represents a problem because we would have to scale
+     * up that axis to fit the bounds. So instead, just fallback to the non-source hint
+     * animation in this case.
+     *
+     * @return {@code false} if the given source is too small to use for the entering animation.
+     */
+    private boolean isSourceRectHintValidForEnterPip(Rect sourceRectHint, Rect destinationBounds) {
+        return sourceRectHint != null
+                && sourceRectHint.width() > destinationBounds.width()
+                && sourceRectHint.height() > destinationBounds.height();
+    }
+
+    /**
      * Sync with {@link SplitScreenController} on destination bounds if PiP is going to
      * split screen.
      *
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 36e7124..33761d2 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
@@ -28,7 +28,6 @@
 import static android.view.WindowManager.TRANSIT_PIP;
 import static android.view.WindowManager.transitTypeToString;
 import static android.window.TransitionInfo.FLAG_IS_DISPLAY;
-import static android.window.TransitionInfo.FLAG_IS_WALLPAPER;
 
 import static com.android.wm.shell.pip.PipAnimationController.ANIM_TYPE_ALPHA;
 import static com.android.wm.shell.pip.PipAnimationController.ANIM_TYPE_BOUNDS;
@@ -43,6 +42,7 @@
 import static com.android.wm.shell.transition.Transitions.TRANSIT_REMOVE_PIP;
 import static com.android.wm.shell.transition.Transitions.isOpeningType;
 
+import android.animation.Animator;
 import android.app.ActivityManager;
 import android.app.TaskInfo;
 import android.content.Context;
@@ -52,6 +52,7 @@
 import android.os.IBinder;
 import android.view.Surface;
 import android.view.SurfaceControl;
+import android.view.WindowManager;
 import android.window.TransitionInfo;
 import android.window.TransitionRequestInfo;
 import android.window.WindowContainerToken;
@@ -65,6 +66,7 @@
 import com.android.wm.shell.ShellTaskOrganizer;
 import com.android.wm.shell.protolog.ShellProtoLogGroup;
 import com.android.wm.shell.splitscreen.SplitScreenController;
+import com.android.wm.shell.sysui.ShellInit;
 import com.android.wm.shell.transition.CounterRotatorHelper;
 import com.android.wm.shell.transition.Transitions;
 
@@ -106,17 +108,18 @@
     private boolean mHasFadeOut;
 
     public PipTransition(Context context,
+            @NonNull ShellInit shellInit,
+            @NonNull ShellTaskOrganizer shellTaskOrganizer,
+            @NonNull Transitions transitions,
             PipBoundsState pipBoundsState,
             PipTransitionState pipTransitionState,
             PipMenuController pipMenuController,
             PipBoundsAlgorithm pipBoundsAlgorithm,
             PipAnimationController pipAnimationController,
-            Transitions transitions,
-            @NonNull ShellTaskOrganizer shellTaskOrganizer,
             PipSurfaceTransactionHelper pipSurfaceTransactionHelper,
             Optional<SplitScreenController> splitScreenOptional) {
-        super(pipBoundsState, pipMenuController, pipBoundsAlgorithm,
-                pipAnimationController, transitions, shellTaskOrganizer);
+        super(shellInit, shellTaskOrganizer, transitions, pipBoundsState, pipMenuController,
+                pipBoundsAlgorithm, pipAnimationController);
         mContext = context;
         mPipTransitionState = pipTransitionState;
         mEnterExitAnimationDuration = context.getResources()
@@ -145,6 +148,11 @@
         if (destinationBounds != null) {
             mExitDestinationBounds.set(destinationBounds);
         }
+        final PipAnimationController.PipTransitionAnimator animator =
+                mPipAnimationController.getCurrentAnimator();
+        if (animator != null && animator.isRunning()) {
+            animator.cancel();
+        }
         mExitTransition = mTransitions.startTransition(type, out, this);
     }
 
@@ -217,13 +225,20 @@
         }
 
         // Entering PIP.
-        if (isEnteringPip(info, mCurrentPipTaskToken)) {
-            return startEnterAnimation(info, startTransaction, finishTransaction, finishCallback);
+        if (isEnteringPip(info)) {
+            startEnterAnimation(info, startTransaction, finishTransaction, finishCallback);
+            return true;
         }
 
         // For transition that we don't animate, but contains the PIP leash, we need to update the
         // PIP surface, otherwise it will be reset after the transition.
         if (currentPipTaskChange != null) {
+            // Set the "end" bounds of pip. The default setup uses the start bounds. Since this is
+            // changing the *finish*Transaction, we need to use the end bounds. This will also
+            // make sure that the fade-in animation (below) uses the end bounds as well.
+            if (!currentPipTaskChange.getEndAbsBounds().isEmpty()) {
+                mPipBoundsState.setBounds(currentPipTaskChange.getEndAbsBounds());
+            }
             updatePipForUnhandledTransition(currentPipTaskChange, startTransaction,
                     finishTransaction);
         }
@@ -236,6 +251,13 @@
         return false;
     }
 
+    @Override
+    public void mergeAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
+            @NonNull SurfaceControl.Transaction t, @NonNull IBinder mergeTarget,
+            @NonNull Transitions.TransitionFinishCallback finishCallback) {
+        end();
+    }
+
     /** Helper to identify whether this handler is currently the one playing an animation */
     private boolean isAnimatingLocally() {
         return mFinishTransaction != null;
@@ -245,16 +267,9 @@
     @Override
     public WindowContainerTransaction handleRequest(@NonNull IBinder transition,
             @NonNull TransitionRequestInfo request) {
-        if (request.getType() == TRANSIT_PIP) {
+        if (requestHasPipEnter(request)) {
             WindowContainerTransaction wct = new WindowContainerTransaction();
-            if (mOneShotAnimationType == ANIM_TYPE_ALPHA) {
-                mRequestedEnterTransition = transition;
-                mRequestedEnterTask = request.getTriggerTask().token;
-                wct.setActivityWindowingMode(request.getTriggerTask().token,
-                        WINDOWING_MODE_UNDEFINED);
-                final Rect destinationBounds = mPipBoundsAlgorithm.getEntryDestinationBounds();
-                wct.setBounds(request.getTriggerTask().token, destinationBounds);
-            }
+            augmentRequest(transition, request, wct);
             return wct;
         } else {
             return null;
@@ -262,6 +277,29 @@
     }
 
     @Override
+    public void augmentRequest(@NonNull IBinder transition,
+            @NonNull TransitionRequestInfo request, @NonNull WindowContainerTransaction outWCT) {
+        if (!requestHasPipEnter(request)) {
+            throw new IllegalStateException("Called PiP augmentRequest when request has no PiP");
+        }
+        if (mOneShotAnimationType == ANIM_TYPE_ALPHA) {
+            mRequestedEnterTransition = transition;
+            mRequestedEnterTask = request.getTriggerTask().token;
+            outWCT.setActivityWindowingMode(request.getTriggerTask().token,
+                    WINDOWING_MODE_UNDEFINED);
+            final Rect destinationBounds = mPipBoundsAlgorithm.getEntryDestinationBounds();
+            outWCT.setBounds(request.getTriggerTask().token, destinationBounds);
+        }
+    }
+
+    @Override
+    public void end() {
+        Animator animator = mPipAnimationController.getCurrentAnimator();
+        if (animator == null) return;
+        animator.end();
+    }
+
+    @Override
     public boolean handleRotateDisplay(int startRotation, int endRotation,
             WindowContainerTransaction wct) {
         if (mRequestedEnterTransition != null && mOneShotAnimationType == ANIM_TYPE_ALPHA) {
@@ -279,7 +317,8 @@
     }
 
     @Override
-    public void onTransitionMerged(@NonNull IBinder transition) {
+    public void onTransitionConsumed(@NonNull IBinder transition, boolean aborted,
+            @Nullable SurfaceControl.Transaction finishT) {
         if (transition != mExitTransition) {
             return;
         }
@@ -292,7 +331,7 @@
         }
         // Unset exitTransition AFTER cancel so that finishResize knows we are merging.
         mExitTransition = null;
-        if (!cancelled) return;
+        if (!cancelled || aborted) return;
         final ActivityManager.RunningTaskInfo taskInfo = mPipOrganizer.getTaskInfo();
         if (taskInfo != null) {
             startExpandAnimation(taskInfo, mPipOrganizer.getSurfaceControl(),
@@ -315,11 +354,27 @@
         // (likely a remote like launcher), so don't fire the finish-callback here -- wait until
         // the exit transition is merged.
         if ((mExitTransition == null || isAnimatingLocally()) && mFinishCallback != null) {
-            WindowContainerTransaction wct = new WindowContainerTransaction();
-            prepareFinishResizeTransaction(taskInfo, destinationBounds,
-                    direction, wct);
-            if (tx != null) {
-                wct.setBoundsChangeTransaction(taskInfo.token, tx);
+            WindowContainerTransaction wct = null;
+            if (isOutPipDirection(direction)) {
+                // Only need to reset surface properties. The server-side operations were already
+                // done at the start.
+                if (tx != null) {
+                    mFinishTransaction.merge(tx);
+                }
+            } else {
+                wct = new WindowContainerTransaction();
+                if (isInPipDirection(direction)) {
+                    // If we are animating from fullscreen using a bounds animation, then reset the
+                    // activity windowing mode, and set the task bounds to the final bounds
+                    wct.setActivityWindowingMode(taskInfo.token, WINDOWING_MODE_UNDEFINED);
+                    wct.scheduleFinishEnterPip(taskInfo.token, destinationBounds);
+                    wct.setBounds(taskInfo.token, destinationBounds);
+                } else {
+                    wct.setBounds(taskInfo.token, null /* bounds */);
+                }
+                if (tx != null) {
+                    wct.setBoundsChangeTransaction(taskInfo.token, tx);
+                }
             }
             final SurfaceControl leash = mPipOrganizer.getSurfaceControl();
             final int displayRotation = taskInfo.getConfiguration().windowConfiguration
@@ -559,92 +614,94 @@
     }
 
     /** Whether we should handle the given {@link TransitionInfo} animation as entering PIP. */
-    private static boolean isEnteringPip(@NonNull TransitionInfo info,
-            @Nullable WindowContainerToken currentPipTaskToken) {
+    private boolean isEnteringPip(@NonNull TransitionInfo info) {
         for (int i = info.getChanges().size() - 1; i >= 0; --i) {
             final TransitionInfo.Change change = info.getChanges().get(i);
-            if (change.getTaskInfo() != null
-                    && change.getTaskInfo().getWindowingMode() == WINDOWING_MODE_PINNED
-                    && !change.getContainer().equals(currentPipTaskToken)) {
-                // We support TRANSIT_PIP type (from RootWindowContainer) or TRANSIT_OPEN (from apps
-                // that enter PiP instantly on opening, mostly from CTS/Flicker tests)
-                if (info.getType() == TRANSIT_PIP || info.getType() == TRANSIT_OPEN) {
-                    return true;
-                }
-                // This can happen if the request to enter PIP happens when we are collecting for
-                // another transition, such as TRANSIT_CHANGE (display rotation).
-                if (info.getType() == TRANSIT_CHANGE) {
-                    return true;
-                }
-
-                // Please file a bug to handle the unexpected transition type.
-                throw new IllegalStateException("Entering PIP with unexpected transition type="
-                        + transitTypeToString(info.getType()));
-            }
+            if (isEnteringPip(change, info.getType())) return true;
         }
         return false;
     }
 
-    private boolean startEnterAnimation(@NonNull TransitionInfo info,
+    /** Whether a particular change is a window that is entering pip. */
+    @Override
+    public boolean isEnteringPip(@NonNull TransitionInfo.Change change,
+            @WindowManager.TransitionType int transitType) {
+        if (change.getTaskInfo() != null
+                && change.getTaskInfo().getWindowingMode() == WINDOWING_MODE_PINNED
+                && !change.getContainer().equals(mCurrentPipTaskToken)) {
+            // We support TRANSIT_PIP type (from RootWindowContainer) or TRANSIT_OPEN (from apps
+            // that enter PiP instantly on opening, mostly from CTS/Flicker tests)
+            if (transitType == TRANSIT_PIP || transitType == TRANSIT_OPEN) {
+                return true;
+            }
+            // This can happen if the request to enter PIP happens when we are collecting for
+            // another transition, such as TRANSIT_CHANGE (display rotation).
+            if (transitType == TRANSIT_CHANGE) {
+                return true;
+            }
+
+            // Please file a bug to handle the unexpected transition type.
+            throw new IllegalStateException("Entering PIP with unexpected transition type="
+                    + transitTypeToString(transitType));
+        }
+        return false;
+    }
+
+    private void startEnterAnimation(@NonNull TransitionInfo info,
             @NonNull SurfaceControl.Transaction startTransaction,
             @NonNull SurfaceControl.Transaction finishTransaction,
             @NonNull Transitions.TransitionFinishCallback finishCallback) {
-        // Search for an Enter PiP transition (along with a show wallpaper one)
+        // Search for an Enter PiP transition
         TransitionInfo.Change enterPip = null;
-        TransitionInfo.Change wallpaper = null;
         for (int i = info.getChanges().size() - 1; i >= 0; --i) {
             final TransitionInfo.Change change = info.getChanges().get(i);
             if (change.getTaskInfo() != null
                     && change.getTaskInfo().getWindowingMode() == WINDOWING_MODE_PINNED) {
                 enterPip = change;
-            } else if ((change.getFlags() & FLAG_IS_WALLPAPER) != 0) {
-                wallpaper = change;
             }
         }
         if (enterPip == null) {
-            return false;
-        }
-        // Keep track of the PIP task.
-        mCurrentPipTaskToken = enterPip.getContainer();
-        mHasFadeOut = false;
-
-        if (mFinishCallback != null) {
-            callFinishCallback(null /* wct */);
-            mFinishTransaction = null;
-            throw new RuntimeException("Previous callback not called, aborting entering PIP.");
+            throw new IllegalStateException("Trying to start PiP animation without a pip"
+                    + "participant");
         }
 
-        // Show the wallpaper if there is a wallpaper change.
-        if (wallpaper != null) {
-            startTransaction.show(wallpaper.getLeash());
-            startTransaction.setAlpha(wallpaper.getLeash(), 1.f);
-        }
         // Make sure other open changes are visible as entering PIP. Some may be hidden in
         // Transitions#setupStartState because the transition type is OPEN (such as auto-enter).
         for (int i = info.getChanges().size() - 1; i >= 0; --i) {
             final TransitionInfo.Change change = info.getChanges().get(i);
-            if (change == enterPip || change == wallpaper) {
-                continue;
-            }
+            if (change == enterPip) continue;
             if (isOpeningType(change.getMode())) {
                 final SurfaceControl leash = change.getLeash();
                 startTransaction.show(leash).setAlpha(leash, 1.f);
             }
         }
 
+        startEnterAnimation(enterPip, startTransaction, finishTransaction, finishCallback);
+    }
+
+    @Override
+    public void startEnterAnimation(@NonNull final TransitionInfo.Change pipChange,
+            @NonNull final SurfaceControl.Transaction startTransaction,
+            @NonNull final SurfaceControl.Transaction finishTransaction,
+            @NonNull final Transitions.TransitionFinishCallback finishCallback) {
+        if (mFinishCallback != null) {
+            callFinishCallback(null /* wct */);
+            mFinishTransaction = null;
+            throw new RuntimeException("Previous callback not called, aborting entering PIP.");
+        }
+
+        // Keep track of the PIP task and animation.
+        mCurrentPipTaskToken = pipChange.getContainer();
+        mHasFadeOut = false;
         mPipTransitionState.setTransitionState(PipTransitionState.ENTERING_PIP);
         mFinishCallback = finishCallback;
         mFinishTransaction = finishTransaction;
-        final int endRotation = mInFixedRotation ? mEndFixedRotation : enterPip.getEndRotation();
-        return startEnterAnimation(enterPip.getTaskInfo(), enterPip.getLeash(),
-                startTransaction, finishTransaction, enterPip.getStartRotation(),
-                endRotation);
-    }
 
-    private boolean startEnterAnimation(final TaskInfo taskInfo, final SurfaceControl leash,
-            final SurfaceControl.Transaction startTransaction,
-            final SurfaceControl.Transaction finishTransaction,
-            final int startRotation, final int endRotation) {
+        final ActivityManager.RunningTaskInfo taskInfo = pipChange.getTaskInfo();
+        final SurfaceControl leash = pipChange.getLeash();
+        final int startRotation = pipChange.getStartRotation();
+        final int endRotation = mInFixedRotation ? mEndFixedRotation : pipChange.getEndRotation();
+
         setBoundsStateForEntry(taskInfo.topActivity, taskInfo.pictureInPictureParams,
                 taskInfo.topActivityInfo);
         final Rect destinationBounds = mPipBoundsAlgorithm.getEntryDestinationBounds();
@@ -657,12 +714,11 @@
             computeEnterPipRotatedBounds(rotationDelta, startRotation, endRotation, taskInfo,
                     destinationBounds, sourceHintRect);
         }
-        PipAnimationController.PipTransitionAnimator animator;
         // Set corner radius for entering pip.
         mSurfaceTransactionHelper
                 .crop(finishTransaction, leash, destinationBounds)
                 .round(finishTransaction, leash, true /* applyCornerRadius */);
-        mPipMenuController.attach(leash);
+        mTransitions.getMainExecutor().executeDelayed(() -> mPipMenuController.attach(leash), 0);
 
         if (taskInfo.pictureInPictureParams != null
                 && taskInfo.pictureInPictureParams.isAutoEnterEnabled()
@@ -694,7 +750,7 @@
                         null /* callback */, false /* withStartDelay */);
             }
             mPipTransitionState.setInSwipePipToHomeTransition(false);
-            return true;
+            return;
         }
 
         if (rotationDelta != Surface.ROTATION_0) {
@@ -702,6 +758,12 @@
             tmpTransform.postRotate(rotationDelta);
             startTransaction.setMatrix(leash, tmpTransform, new float[9]);
         }
+        if (mOneShotAnimationType == ANIM_TYPE_ALPHA) {
+            startTransaction.setAlpha(leash, 0f);
+        }
+        startTransaction.apply();
+
+        PipAnimationController.PipTransitionAnimator animator;
         if (mOneShotAnimationType == ANIM_TYPE_BOUNDS) {
             animator = mPipAnimationController.getAnimator(taskInfo, leash, currentBounds,
                     currentBounds, destinationBounds, sourceHintRect, TRANSITION_DIRECTION_TO_PIP,
@@ -712,7 +774,6 @@
                 animator.setColorContentOverlay(mContext);
             }
         } else if (mOneShotAnimationType == ANIM_TYPE_ALPHA) {
-            startTransaction.setAlpha(leash, 0f);
             animator = mPipAnimationController.getAnimator(taskInfo, leash, destinationBounds,
                     0f, 1f);
             mOneShotAnimationType = ANIM_TYPE_BOUNDS;
@@ -720,7 +781,6 @@
             throw new RuntimeException("Unrecognized animation type: "
                     + mOneShotAnimationType);
         }
-        startTransaction.apply();
         animator.setTransitionDirection(TRANSITION_DIRECTION_TO_PIP)
                 .setPipAnimationCallback(mPipAnimationCallback)
                 .setDuration(mEnterExitAnimationDuration);
@@ -731,8 +791,6 @@
             animator.setDestinationBounds(mPipBoundsAlgorithm.getEntryDestinationBounds());
         }
         animator.start();
-
-        return true;
     }
 
     /** Computes destination bounds in old rotation and updates source hint rect if available. */
@@ -852,27 +910,4 @@
         mPipMenuController.movePipMenu(null, null, destinationBounds);
         mPipMenuController.updateMenuBounds(destinationBounds);
     }
-
-    private void prepareFinishResizeTransaction(TaskInfo taskInfo, Rect destinationBounds,
-            @PipAnimationController.TransitionDirection int direction,
-            WindowContainerTransaction wct) {
-        Rect taskBounds = null;
-        if (isInPipDirection(direction)) {
-            // If we are animating from fullscreen using a bounds animation, then reset the
-            // activity windowing mode set by WM, and set the task bounds to the final bounds
-            taskBounds = destinationBounds;
-            wct.setActivityWindowingMode(taskInfo.token, WINDOWING_MODE_UNDEFINED);
-            wct.scheduleFinishEnterPip(taskInfo.token, destinationBounds);
-        } else if (isOutPipDirection(direction)) {
-            // If we are animating to fullscreen, then we need to reset the override bounds
-            // on the task to ensure that the task "matches" the parent's bounds.
-            taskBounds = (direction == TRANSITION_DIRECTION_LEAVE_PIP)
-                    ? null : destinationBounds;
-            wct.setWindowingMode(taskInfo.token, getOutPipWindowingMode());
-            // Simply reset the activity mode set prior to the animation running.
-            wct.setActivityWindowingMode(taskInfo.token, WINDOWING_MODE_UNDEFINED);
-        }
-
-        wct.setBounds(taskInfo.token, taskBounds);
-    }
 }
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 54f46e0..f51e247 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
@@ -17,6 +17,7 @@
 package com.android.wm.shell.pip;
 
 import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
+import static android.view.WindowManager.TRANSIT_PIP;
 
 import static com.android.wm.shell.pip.PipAnimationController.TRANSITION_DIRECTION_REMOVE_STACK;
 import static com.android.wm.shell.pip.PipAnimationController.isInPipDirection;
@@ -27,12 +28,17 @@
 import android.content.ComponentName;
 import android.content.pm.ActivityInfo;
 import android.graphics.Rect;
-import android.os.Handler;
-import android.os.Looper;
+import android.os.IBinder;
 import android.view.SurfaceControl;
+import android.view.WindowManager;
+import android.window.TransitionInfo;
+import android.window.TransitionRequestInfo;
 import android.window.WindowContainerTransaction;
 
+import androidx.annotation.NonNull;
+
 import com.android.wm.shell.ShellTaskOrganizer;
+import com.android.wm.shell.sysui.ShellInit;
 import com.android.wm.shell.transition.Transitions;
 
 import java.util.ArrayList;
@@ -49,7 +55,6 @@
     protected final ShellTaskOrganizer mShellTaskOrganizer;
     protected final PipMenuController mPipMenuController;
     protected final Transitions mTransitions;
-    private final Handler mMainHandler;
     private final List<PipTransitionCallback> mPipTransitionCallbacks = new ArrayList<>();
     protected PipTaskOrganizer mPipOrganizer;
 
@@ -127,22 +132,28 @@
     public void onFixedRotationStarted() {
     }
 
-    public PipTransitionController(PipBoundsState pipBoundsState,
+    public PipTransitionController(
+            @NonNull ShellInit shellInit,
+            @NonNull ShellTaskOrganizer shellTaskOrganizer,
+            @NonNull Transitions transitions,
+            PipBoundsState pipBoundsState,
             PipMenuController pipMenuController, PipBoundsAlgorithm pipBoundsAlgorithm,
-            PipAnimationController pipAnimationController, Transitions transitions,
-            @android.annotation.NonNull ShellTaskOrganizer shellTaskOrganizer) {
+            PipAnimationController pipAnimationController) {
         mPipBoundsState = pipBoundsState;
         mPipMenuController = pipMenuController;
         mShellTaskOrganizer = shellTaskOrganizer;
         mPipBoundsAlgorithm = pipBoundsAlgorithm;
         mPipAnimationController = pipAnimationController;
         mTransitions = transitions;
-        mMainHandler = new Handler(Looper.getMainLooper());
         if (Transitions.ENABLE_SHELL_TRANSITIONS) {
-            transitions.addHandler(this);
+            shellInit.addInitCallback(this::onInit, this);
         }
     }
 
+    private void onInit() {
+        mTransitions.addHandler(this);
+    }
+
     void setPipOrganizer(PipTaskOrganizer pto) {
         mPipOrganizer = pto;
     }
@@ -206,6 +217,34 @@
         return false;
     }
 
+    /** @return whether the transition-request represents a pip-entry. */
+    public boolean requestHasPipEnter(@NonNull TransitionRequestInfo request) {
+        return request.getType() == TRANSIT_PIP;
+    }
+
+    /** Whether a particular change is a window that is entering pip. */
+    public boolean isEnteringPip(@NonNull TransitionInfo.Change change,
+            @WindowManager.TransitionType int transitType) {
+        return false;
+    }
+
+    /** Add PiP-related changes to `outWCT` for the given request. */
+    public void augmentRequest(@NonNull IBinder transition,
+            @NonNull TransitionRequestInfo request, @NonNull WindowContainerTransaction outWCT) {
+        throw new IllegalStateException("Request isn't entering PiP");
+    }
+
+    /** 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,
+            @NonNull final SurfaceControl.Transaction finishTransaction,
+            @NonNull final Transitions.TransitionFinishCallback finishCallback) {
+    }
+
+    /** End the currently-playing PiP animation. */
+    public void end() {
+    }
+
     /**
      * Callback interface for PiP transitions (both from and to PiP mode)
      */
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransitionState.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransitionState.java
index 85e56b7..1a4be3b 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransitionState.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransitionState.java
@@ -17,12 +17,15 @@
 package com.android.wm.shell.pip;
 
 import android.annotation.IntDef;
+import android.annotation.NonNull;
 import android.app.PictureInPictureParams;
 import android.content.ComponentName;
 import android.content.pm.ActivityInfo;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Used to keep track of PiP leash state as it appears and animates by {@link PipTaskOrganizer} and
@@ -37,6 +40,9 @@
     public static final int ENTERED_PIP = 4;
     public static final int EXITING_PIP = 5;
 
+    private final List<OnPipTransitionStateChangedListener> mOnPipTransitionStateChangedListeners =
+            new ArrayList<>();
+
     /**
      * If set to {@code true}, no entering PiP transition would be kicked off and most likely
      * it's due to the fact that Launcher is handling the transition directly when swiping
@@ -65,7 +71,13 @@
     }
 
     public void setTransitionState(@TransitionState int state) {
-        mState = state;
+        if (mState != state) {
+            for (int i = 0; i < mOnPipTransitionStateChangedListeners.size(); i++) {
+                mOnPipTransitionStateChangedListeners.get(i).onPipTransitionStateChanged(
+                        mState, state);
+            }
+            mState = state;
+        }
     }
 
     public @TransitionState int getTransitionState() {
@@ -73,8 +85,7 @@
     }
 
     public boolean isInPip() {
-        return mState >= TASK_APPEARED
-                && mState != EXITING_PIP;
+        return isInPip(mState);
     }
 
     public void setInSwipePipToHomeTransition(boolean inSwipePipToHomeTransition) {
@@ -94,4 +105,23 @@
         return mState < ENTERING_PIP
                 || mState == EXITING_PIP;
     }
+
+    public void addOnPipTransitionStateChangedListener(
+            @NonNull OnPipTransitionStateChangedListener listener) {
+        mOnPipTransitionStateChangedListeners.add(listener);
+    }
+
+    public void removeOnPipTransitionStateChangedListener(
+            @NonNull OnPipTransitionStateChangedListener listener) {
+        mOnPipTransitionStateChangedListeners.remove(listener);
+    }
+
+    public static boolean isInPip(@TransitionState int state) {
+        return state >= TASK_APPEARED && state != EXITING_PIP;
+    }
+
+    public interface OnPipTransitionStateChangedListener {
+        void onPipTransitionStateChanged(@TransitionState int oldState,
+                @TransitionState int newState);
+    }
 }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipUtils.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipUtils.java
index dc60bcf..29434f7 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipUtils.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipUtils.java
@@ -116,7 +116,7 @@
         if (taskId <= 0) return null;
         try {
             return ActivityTaskManager.getService().getTaskSnapshot(
-                    taskId, isLowResolution);
+                    taskId, isLowResolution, false /* takeSnapshotIfNeeded */);
         } catch (RemoteException e) {
             Log.e(TAG, "Failed to get task snapshot, taskId=" + taskId, e);
             return null;
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java
index 4b1e5f8..586e3a0 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java
@@ -84,8 +84,12 @@
 import com.android.wm.shell.pip.PipSnapAlgorithm;
 import com.android.wm.shell.pip.PipTaskOrganizer;
 import com.android.wm.shell.pip.PipTransitionController;
+import com.android.wm.shell.pip.PipTransitionState;
 import com.android.wm.shell.pip.PipUtils;
 import com.android.wm.shell.protolog.ShellProtoLogGroup;
+import com.android.wm.shell.sysui.ConfigurationChangeListener;
+import com.android.wm.shell.sysui.KeyguardChangeListener;
+import com.android.wm.shell.sysui.ShellController;
 import com.android.wm.shell.transition.Transitions;
 
 import java.io.PrintWriter;
@@ -99,7 +103,7 @@
  * Manages the picture-in-picture (PIP) UI and states for Phones.
  */
 public class PipController implements PipTransitionController.PipTransitionCallback,
-        RemoteCallable<PipController> {
+        RemoteCallable<PipController>, ConfigurationChangeListener, KeyguardChangeListener {
     private static final String TAG = "PipController";
 
     private Context mContext;
@@ -110,12 +114,15 @@
     private PipAppOpsListener mAppOpsListener;
     private PipMediaController mMediaController;
     private PipBoundsAlgorithm mPipBoundsAlgorithm;
+    private PipKeepClearAlgorithm mPipKeepClearAlgorithm;
     private PipBoundsState mPipBoundsState;
+    private PipMotionHelper mPipMotionHelper;
     private PipTouchHandler mTouchHandler;
     private PipTransitionController mPipTransitionController;
     private TaskStackListenerImpl mTaskStackListener;
     private PipParamsChangedForwarder mPipParamsChangedForwarder;
     private Optional<OneHandedController> mOneHandedController;
+    private final ShellController mShellController;
     protected final PipImpl mImpl;
 
     private final Rect mTmpInsetBounds = new Rect();
@@ -126,11 +133,14 @@
 
     protected PhonePipMenuController mMenuController;
     protected PipTaskOrganizer mPipTaskOrganizer;
+    private PipTransitionState mPipTransitionState;
     protected PinnedStackListenerForwarder.PinnedTaskListener mPinnedTaskListener =
             new PipControllerPinnedTaskListener();
 
     private boolean mIsKeyguardShowingOrAnimating;
 
+    private Consumer<Boolean> mOnIsInPipStateChangedListener;
+
     private interface PipAnimationListener {
         /**
          * Notifies the listener that the Pip animation is started.
@@ -156,7 +166,7 @@
      * Handler for display rotation changes.
      */
     private final DisplayChangeController.OnDisplayChangingListener mRotationController = (
-            int displayId, int fromRotation, int toRotation, WindowContainerTransaction t) -> {
+            displayId, fromRotation, toRotation, newDisplayAreaInfo, t) -> {
         if (mPipTransitionController.handleRotateDisplay(fromRotation, toRotation, t)) {
             return;
         }
@@ -284,11 +294,20 @@
      * Instantiates {@link PipController}, returns {@code null} if the feature not supported.
      */
     @Nullable
-    public static Pip create(Context context, DisplayController displayController,
-            PipAppOpsListener pipAppOpsListener, PipBoundsAlgorithm pipBoundsAlgorithm,
-            PipBoundsState pipBoundsState, PipMediaController pipMediaController,
-            PhonePipMenuController phonePipMenuController, PipTaskOrganizer pipTaskOrganizer,
-            PipTouchHandler pipTouchHandler, PipTransitionController pipTransitionController,
+    public static Pip create(Context context,
+            ShellController shellController,
+            DisplayController displayController,
+            PipAppOpsListener pipAppOpsListener,
+            PipBoundsAlgorithm pipBoundsAlgorithm,
+            PipKeepClearAlgorithm pipKeepClearAlgorithm,
+            PipBoundsState pipBoundsState,
+            PipMotionHelper pipMotionHelper,
+            PipMediaController pipMediaController,
+            PhonePipMenuController phonePipMenuController,
+            PipTaskOrganizer pipTaskOrganizer,
+            PipTransitionState pipTransitionState,
+            PipTouchHandler pipTouchHandler,
+            PipTransitionController pipTransitionController,
             WindowManagerShellWrapper windowManagerShellWrapper,
             TaskStackListenerImpl taskStackListener,
             PipParamsChangedForwarder pipParamsChangedForwarder,
@@ -300,22 +319,27 @@
             return null;
         }
 
-        return new PipController(context, displayController, pipAppOpsListener, pipBoundsAlgorithm,
-                pipBoundsState, pipMediaController,
-                phonePipMenuController, pipTaskOrganizer, pipTouchHandler, pipTransitionController,
+        return new PipController(context, shellController, displayController, pipAppOpsListener,
+                pipBoundsAlgorithm, pipKeepClearAlgorithm, pipBoundsState, pipMotionHelper,
+                pipMediaController, phonePipMenuController, pipTaskOrganizer, pipTransitionState,
+                pipTouchHandler, pipTransitionController,
                 windowManagerShellWrapper, taskStackListener, pipParamsChangedForwarder,
                 oneHandedController, mainExecutor)
                 .mImpl;
     }
 
     protected PipController(Context context,
+            ShellController shellController,
             DisplayController displayController,
             PipAppOpsListener pipAppOpsListener,
             PipBoundsAlgorithm pipBoundsAlgorithm,
+            PipKeepClearAlgorithm pipKeepClearAlgorithm,
             @NonNull PipBoundsState pipBoundsState,
+            PipMotionHelper pipMotionHelper,
             PipMediaController pipMediaController,
             PhonePipMenuController phonePipMenuController,
             PipTaskOrganizer pipTaskOrganizer,
+            PipTransitionState pipTransitionState,
             PipTouchHandler pipTouchHandler,
             PipTransitionController pipTransitionController,
             WindowManagerShellWrapper windowManagerShellWrapper,
@@ -331,12 +355,16 @@
         }
 
         mContext = context;
+        mShellController = shellController;
         mImpl = new PipImpl();
         mWindowManagerShellWrapper = windowManagerShellWrapper;
         mDisplayController = displayController;
         mPipBoundsAlgorithm = pipBoundsAlgorithm;
+        mPipKeepClearAlgorithm = pipKeepClearAlgorithm;
         mPipBoundsState = pipBoundsState;
+        mPipMotionHelper = pipMotionHelper;
         mPipTaskOrganizer = pipTaskOrganizer;
+        mPipTransitionState = pipTransitionState;
         mMainExecutor = mainExecutor;
         mMediaController = pipMediaController;
         mMenuController = phonePipMenuController;
@@ -363,6 +391,15 @@
             onDisplayChanged(mDisplayController.getDisplayLayout(displayId),
                     false /* saveRestoreSnapFraction */);
         });
+        mPipTransitionState.addOnPipTransitionStateChangedListener((oldState, newState) -> {
+            if (mOnIsInPipStateChangedListener != null) {
+                final boolean wasInPip = PipTransitionState.isInPip(oldState);
+                final boolean nowInPip = PipTransitionState.isInPip(newState);
+                if (nowInPip != wasInPip) {
+                    mOnIsInPipStateChangedListener.accept(nowInPip);
+                }
+            }
+        });
         mPipBoundsState.setOnMinimalSizeChangeCallback(
                 () -> {
                     // The minimal size drives the normal bounds, so they need to be recalculated.
@@ -458,14 +495,15 @@
                                         mPipBoundsState.getBounds(),
                                         mPipBoundsState.getAspectRatio());
                         Objects.requireNonNull(destinationBounds, "Missing destination bounds");
-                        mPipTaskOrganizer.scheduleAnimateResizePip(destinationBounds,
-                                mEnterAnimationDuration,
-                                null /* updateBoundsCallback */);
-
-                        mTouchHandler.onAspectRatioChanged();
-                        updateMovementBounds(null /* toBounds */, false /* fromRotation */,
-                                false /* fromImeAdjustment */, false /* fromShelfAdjustment */,
-                                null /* windowContainerTransaction */);
+                        if (!destinationBounds.equals(mPipBoundsState.getBounds())) {
+                            mPipTaskOrganizer.scheduleAnimateResizePip(destinationBounds,
+                                    mEnterAnimationDuration,
+                                    null /* updateBoundsCallback */);
+                            mTouchHandler.onAspectRatioChanged();
+                            updateMovementBounds(null /* toBounds */, false /* fromRotation */,
+                                    false /* fromImeAdjustment */, false /* fromShelfAdjustment */,
+                                    null /* windowContainerTransaction */);
+                        }
                     }
 
                     @Override
@@ -489,6 +527,9 @@
                         }
                     });
         });
+
+        mShellController.addConfigurationChangeListener(this);
+        mShellController.addKeyguardChangeListener(this);
     }
 
     @Override
@@ -501,18 +542,21 @@
         return mMainExecutor;
     }
 
-    private void onConfigurationChanged(Configuration newConfig) {
+    @Override
+    public void onConfigurationChanged(Configuration newConfig) {
         mPipBoundsAlgorithm.onConfigurationChanged(mContext);
         mTouchHandler.onConfigurationChanged();
         mPipBoundsState.onConfigurationChanged();
     }
 
-    private void onDensityOrFontScaleChanged() {
+    @Override
+    public void onDensityOrFontScaleChanged() {
         mPipTaskOrganizer.onDensityOrFontScaleChanged(mContext);
         onPipResourceDimensionsChanged();
     }
 
-    private void onOverlayChanged() {
+    @Override
+    public void onThemeChanged() {
         mTouchHandler.onOverlayChanged();
         onDisplayChanged(new DisplayLayout(mContext, mContext.getDisplay()),
                 false /* saveRestoreSnapFraction */);
@@ -620,21 +664,24 @@
      * finished first to reset the visibility of PiP window.
      * See also {@link #onKeyguardDismissAnimationFinished()}
      */
-    private void onKeyguardVisibilityChanged(boolean keyguardShowing, boolean animating) {
+    @Override
+    public void onKeyguardVisibilityChanged(boolean visible, boolean occluded,
+            boolean animatingDismiss) {
         if (!mPipTaskOrganizer.isInPip()) {
             return;
         }
-        if (keyguardShowing) {
+        if (visible) {
             mIsKeyguardShowingOrAnimating = true;
             hidePipMenu(null /* onStartCallback */, null /* onEndCallback */);
             mPipTaskOrganizer.setPipVisibility(false);
-        } else if (!animating) {
+        } else if (!animatingDismiss) {
             mIsKeyguardShowingOrAnimating = false;
             mPipTaskOrganizer.setPipVisibility(true);
         }
     }
 
-    private void onKeyguardDismissAnimationFinished() {
+    @Override
+    public void onKeyguardDismissAnimationFinished() {
         if (mPipTaskOrganizer.isInPip()) {
             mIsKeyguardShowingOrAnimating = false;
             mPipTaskOrganizer.setPipVisibility(true);
@@ -657,6 +704,13 @@
         }
     }
 
+    private void setOnIsInPipStateChangedListener(Consumer<Boolean> callback) {
+        mOnIsInPipStateChangedListener = callback;
+        if (mOnIsInPipStateChangedListener != null) {
+            callback.accept(mPipTransitionState.isInPip());
+        }
+    }
+
     private void setShelfHeightLocked(boolean visible, int height) {
         final int shelfHeight = visible ? height : 0;
         mPipBoundsState.setShelfVisibility(visible, shelfHeight);
@@ -892,27 +946,6 @@
         }
 
         @Override
-        public void onConfigurationChanged(Configuration newConfig) {
-            mMainExecutor.execute(() -> {
-                PipController.this.onConfigurationChanged(newConfig);
-            });
-        }
-
-        @Override
-        public void onDensityOrFontScaleChanged() {
-            mMainExecutor.execute(() -> {
-                PipController.this.onDensityOrFontScaleChanged();
-            });
-        }
-
-        @Override
-        public void onOverlayChanged() {
-            mMainExecutor.execute(() -> {
-                PipController.this.onOverlayChanged();
-            });
-        }
-
-        @Override
         public void onSystemUiStateChanged(boolean isSysUiStateValid, int flag) {
             mMainExecutor.execute(() -> {
                 PipController.this.onSystemUiStateChanged(isSysUiStateValid, flag);
@@ -934,6 +967,13 @@
         }
 
         @Override
+        public void setOnIsInPipStateChangedListener(Consumer<Boolean> callback) {
+            mMainExecutor.execute(() -> {
+                PipController.this.setOnIsInPipStateChangedListener(callback);
+            });
+        }
+
+        @Override
         public void setPinnedStackAnimationType(int animationType) {
             mMainExecutor.execute(() -> {
                 PipController.this.setPinnedStackAnimationType(animationType);
@@ -962,18 +1002,6 @@
         }
 
         @Override
-        public void onKeyguardVisibilityChanged(boolean showing, boolean animating) {
-            mMainExecutor.execute(() -> {
-                PipController.this.onKeyguardVisibilityChanged(showing, animating);
-            });
-        }
-
-        @Override
-        public void onKeyguardDismissAnimationFinished() {
-            mMainExecutor.execute(PipController.this::onKeyguardDismissAnimationFinished);
-        }
-
-        @Override
         public void dump(PrintWriter pw) {
             try {
                 mMainExecutor.executeBlocking(() -> {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipKeepClearAlgorithm.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipKeepClearAlgorithm.java
new file mode 100644
index 0000000..78084fa
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipKeepClearAlgorithm.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.pip.phone;
+
+import android.graphics.Rect;
+import android.util.ArraySet;
+
+import com.android.wm.shell.pip.PipBoundsAlgorithm;
+import com.android.wm.shell.pip.PipBoundsState;
+
+import java.util.Set;
+
+/**
+ * Calculates the adjusted position that does not occlude keep clear areas.
+ */
+public class PipKeepClearAlgorithm {
+
+    /**
+     * Adjusts the current position of PiP to avoid occluding keep clear areas. If the user has
+     * moved PiP manually, the unmodified current position will be returned instead.
+     */
+    public Rect adjust(PipBoundsState boundsState, PipBoundsAlgorithm boundsAlgorithm) {
+        if (boundsState.hasUserResizedPip()) {
+            return boundsState.getBounds();
+        }
+        return adjust(boundsAlgorithm.getEntryDestinationBounds(),
+                boundsState.getRestrictedKeepClearAreas(),
+                boundsState.getUnrestrictedKeepClearAreas(), boundsState.getDisplayBounds());
+    }
+
+    /** Returns a new {@code Rect} that does not occlude the provided keep clear areas. */
+    public Rect adjust(Rect defaultBounds, Set<Rect> restrictedKeepClearAreas,
+            Set<Rect> unrestrictedKeepClearAreas, Rect displayBounds) {
+        if (restrictedKeepClearAreas.isEmpty()) {
+            return defaultBounds;
+        }
+        Set<Rect> keepClearAreas = new ArraySet<>();
+        if (!restrictedKeepClearAreas.isEmpty()) {
+            keepClearAreas.addAll(restrictedKeepClearAreas);
+        }
+        Rect outBounds = new Rect(defaultBounds);
+        for (Rect r : keepClearAreas) {
+            if (Rect.intersects(r, outBounds)) {
+                if (tryOffsetUp(outBounds, r, displayBounds)) continue;
+                if (tryOffsetLeft(outBounds, r, displayBounds)) continue;
+                if (tryOffsetDown(outBounds, r, displayBounds)) continue;
+                if (tryOffsetRight(outBounds, r, displayBounds)) continue;
+            }
+        }
+        return outBounds;
+    }
+
+    private boolean tryOffsetLeft(Rect rectToMove, Rect rectToAvoid, Rect displayBounds) {
+        return tryOffset(rectToMove, rectToAvoid, displayBounds,
+                rectToAvoid.left - rectToMove.right, 0);
+    }
+
+    private boolean tryOffsetRight(Rect rectToMove, Rect rectToAvoid, Rect displayBounds) {
+        return tryOffset(rectToMove, rectToAvoid, displayBounds,
+                rectToAvoid.right - rectToMove.left, 0);
+    }
+
+    private boolean tryOffsetUp(Rect rectToMove, Rect rectToAvoid, Rect displayBounds) {
+        return tryOffset(rectToMove, rectToAvoid, displayBounds,
+                0, rectToAvoid.top - rectToMove.bottom);
+    }
+
+    private boolean tryOffsetDown(Rect rectToMove, Rect rectToAvoid, Rect displayBounds) {
+        return tryOffset(rectToMove, rectToAvoid, displayBounds,
+                0, rectToAvoid.bottom - rectToMove.top);
+    }
+
+    private boolean tryOffset(Rect rectToMove, Rect rectToAvoid, Rect displayBounds,
+            int dx, int dy) {
+        Rect tmp = new Rect(rectToMove);
+        tmp.offset(dx, dy);
+        if (!Rect.intersects(rectToAvoid, tmp) && displayBounds.contains(tmp)) {
+            rectToMove.offsetTo(tmp.left, tmp.top);
+            return true;
+        }
+        return false;
+    }
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipMenuView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipMenuView.java
index 6390c89..1958157 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipMenuView.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipMenuView.java
@@ -282,7 +282,7 @@
                 && mSplitScreenControllerOptional.get().isTaskInSplitScreen(taskInfo.taskId);
         mFocusedTaskAllowSplitScreen = isSplitScreen
                 || (taskInfo.getWindowingMode() == WINDOWING_MODE_FULLSCREEN
-                && taskInfo.supportsSplitScreenMultiWindow
+                && taskInfo.supportsMultiWindow
                 && taskInfo.topActivityType != WindowConfiguration.ACTIVITY_TYPE_HOME);
     }
 
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java
index ac7b9033b..c86c136 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java
@@ -54,8 +54,10 @@
 import com.android.wm.shell.pip.PipBoundsAlgorithm;
 import com.android.wm.shell.pip.PipBoundsState;
 import com.android.wm.shell.pip.PipTaskOrganizer;
+import com.android.wm.shell.pip.PipTransitionController;
 import com.android.wm.shell.pip.PipUiEventLogger;
 import com.android.wm.shell.protolog.ShellProtoLogGroup;
+import com.android.wm.shell.sysui.ShellInit;
 
 import java.io.PrintWriter;
 
@@ -164,6 +166,7 @@
 
     @SuppressLint("InflateParams")
     public PipTouchHandler(Context context,
+            ShellInit shellInit,
             PhonePipMenuController menuController,
             PipBoundsAlgorithm pipBoundsAlgorithm,
             @NonNull PipBoundsState pipBoundsState,
@@ -172,7 +175,6 @@
             FloatingContentCoordinator floatingContentCoordinator,
             PipUiEventLogger pipUiEventLogger,
             ShellExecutor mainExecutor) {
-        // Initialize the Pip input consumer
         mContext = context;
         mMainExecutor = mainExecutor;
         mAccessibilityManager = context.getSystemService(AccessibilityManager.class);
@@ -212,9 +214,17 @@
                 mMotionHelper, pipTaskOrganizer, mPipBoundsAlgorithm.getSnapAlgorithm(),
                 this::onAccessibilityShowMenu, this::updateMovementBounds,
                 this::animateToUnStashedState, mainExecutor);
+
+        // TODO(b/181599115): This should really be initializes as part of the pip controller, but
+        // until all PIP implementations derive from the controller, just initialize the touch handler
+        // if it is needed
+        shellInit.addInitCallback(this::onInit, this);
     }
 
-    public void init() {
+    /**
+     * Called when the touch handler is initialized.
+     */
+    public void onInit() {
         Resources res = mContext.getResources();
         mEnableResize = res.getBoolean(R.bool.config_pipEnableResizeForMenu);
         reloadResources();
@@ -250,6 +260,10 @@
                 });
     }
 
+    public PipTransitionController getTransitionHandler() {
+        return mPipTaskOrganizer.getTransitionController();
+    }
+
     private void reloadResources() {
         final Resources res = mContext.getResources();
         mBottomOffsetBufferPx = res.getDimensionPixelSize(R.dimen.pip_bottom_offset_buffer);
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 fa48def..a24d961 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
@@ -49,6 +49,8 @@
 import com.android.wm.shell.pip.PipTaskOrganizer;
 import com.android.wm.shell.pip.PipTransitionController;
 import com.android.wm.shell.protolog.ShellProtoLogGroup;
+import com.android.wm.shell.sysui.ConfigurationChangeListener;
+import com.android.wm.shell.sysui.ShellController;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -61,7 +63,8 @@
  */
 public class TvPipController implements PipTransitionController.PipTransitionCallback,
         TvPipBoundsController.PipBoundsListener, TvPipMenuController.Delegate,
-        TvPipNotificationController.Delegate, DisplayController.OnDisplaysChangedListener {
+        TvPipNotificationController.Delegate, DisplayController.OnDisplaysChangedListener,
+        ConfigurationChangeListener {
     private static final String TAG = "TvPipController";
     static final boolean DEBUG = false;
 
@@ -93,6 +96,7 @@
 
     private final Context mContext;
 
+    private final ShellController mShellController;
     private final TvPipBoundsState mTvPipBoundsState;
     private final TvPipBoundsAlgorithm mTvPipBoundsAlgorithm;
     private final TvPipBoundsController mTvPipBoundsController;
@@ -117,6 +121,7 @@
 
     public static Pip create(
             Context context,
+            ShellController shellController,
             TvPipBoundsState tvPipBoundsState,
             TvPipBoundsAlgorithm tvPipBoundsAlgorithm,
             TvPipBoundsController tvPipBoundsController,
@@ -133,6 +138,7 @@
             ShellExecutor mainExecutor) {
         return new TvPipController(
                 context,
+                shellController,
                 tvPipBoundsState,
                 tvPipBoundsAlgorithm,
                 tvPipBoundsController,
@@ -151,6 +157,7 @@
 
     private TvPipController(
             Context context,
+            ShellController shellController,
             TvPipBoundsState tvPipBoundsState,
             TvPipBoundsAlgorithm tvPipBoundsAlgorithm,
             TvPipBoundsController tvPipBoundsController,
@@ -167,6 +174,7 @@
             ShellExecutor mainExecutor) {
         mContext = context;
         mMainExecutor = mainExecutor;
+        mShellController = shellController;
 
         mTvPipBoundsState = tvPipBoundsState;
         mTvPipBoundsState.setDisplayId(context.getDisplayId());
@@ -193,9 +201,12 @@
         registerTaskStackListenerCallback(taskStackListener);
         registerWmShellPinnedStackListener(wmShell);
         displayController.addDisplayWindowListener(this);
+
+        mShellController.addConfigurationChangeListener(this);
     }
 
-    private void onConfigurationChanged(Configuration newConfig) {
+    @Override
+    public void onConfigurationChanged(Configuration newConfig) {
         if (DEBUG) {
             ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
                     "%s: onConfigurationChanged(), state=%s", TAG, stateToName(mState));
@@ -669,13 +680,6 @@
 
     private class TvPipImpl implements Pip {
         @Override
-        public void onConfigurationChanged(Configuration newConfig) {
-            mMainExecutor.execute(() -> {
-                TvPipController.this.onConfigurationChanged(newConfig);
-            });
-        }
-
-        @Override
         public void registerSessionListenerForCurrentUser() {
             mMainExecutor.execute(() -> {
                 TvPipController.this.registerSessionListenerForCurrentUser();
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipTransition.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipTransition.java
index 5062cc4..8ebcf63 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipTransition.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipTransition.java
@@ -32,6 +32,7 @@
 import com.android.wm.shell.pip.PipBoundsState;
 import com.android.wm.shell.pip.PipMenuController;
 import com.android.wm.shell.pip.PipTransitionController;
+import com.android.wm.shell.sysui.ShellInit;
 import com.android.wm.shell.transition.Transitions;
 
 /**
@@ -39,14 +40,16 @@
  * TODO: Implement animation once TV is using Transitions.
  */
 public class TvPipTransition extends PipTransitionController {
-    public TvPipTransition(PipBoundsState pipBoundsState,
+    public TvPipTransition(
+            @NonNull ShellInit shellInit,
+            @NonNull ShellTaskOrganizer shellTaskOrganizer,
+            @NonNull Transitions transitions,
+            PipBoundsState pipBoundsState,
             PipMenuController pipMenuController,
             TvPipBoundsAlgorithm tvPipBoundsAlgorithm,
-            PipAnimationController pipAnimationController,
-            Transitions transitions,
-            @NonNull ShellTaskOrganizer shellTaskOrganizer) {
-        super(pipBoundsState, pipMenuController, tvPipBoundsAlgorithm, pipAnimationController,
-                transitions, shellTaskOrganizer);
+            PipAnimationController pipAnimationController) {
+        super(shellInit, shellTaskOrganizer, transitions, pipBoundsState, pipMenuController,
+                tvPipBoundsAlgorithm, pipAnimationController);
     }
 
     @Override
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 d04c349..b296151 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
@@ -26,6 +26,8 @@
 public enum ShellProtoLogGroup implements IProtoLogGroup {
     // NOTE: Since we enable these from the same WM ShellCommand, these names should not conflict
     // with those in the framework ProtoLogGroup
+    WM_SHELL_INIT(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, true,
+            Consts.TAG_WM_SHELL),
     WM_SHELL_TASK_ORG(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, false,
             Consts.TAG_WM_SHELL),
     WM_SHELL_TRANSITIONS(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, true,
@@ -38,10 +40,12 @@
             "ShellBackPreview"),
     WM_SHELL_RECENT_TASKS(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, false,
             Consts.TAG_WM_SHELL),
-    WM_SHELL_PICTURE_IN_PICTURE(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG,
-            false, Consts.TAG_WM_SHELL),
+    WM_SHELL_PICTURE_IN_PICTURE(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, false,
+            Consts.TAG_WM_SHELL),
     WM_SHELL_SPLIT_SCREEN(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, false,
             Consts.TAG_WM_SHELL),
+    WM_SHELL_SYSUI_EVENTS(Consts.ENABLE_DEBUG, Consts.ENABLE_LOG_TO_PROTO_DEBUG, false,
+            Consts.TAG_WM_SHELL),
     TEST_GROUP(true, true, false, "WindowManagerShellProtoLogTest");
 
     private final boolean mEnabled;
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/IRecentTasks.aidl b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/IRecentTasks.aidl
index 6e78fcb..b71cc32 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/IRecentTasks.aidl
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/IRecentTasks.aidl
@@ -16,6 +16,8 @@
 
 package com.android.wm.shell.recents;
 
+import android.app.ActivityManager;
+
 import com.android.wm.shell.recents.IRecentTasksListener;
 import com.android.wm.shell.util.GroupedRecentTaskInfo;
 
@@ -38,4 +40,9 @@
      * Gets the set of recent tasks.
      */
     GroupedRecentTaskInfo[] getRecentTasks(int maxNum, int flags, int userId) = 3;
+
+    /**
+     * Gets the set of running tasks.
+     */
+    ActivityManager.RunningTaskInfo[] getRunningTasks(int maxNum) = 4;
 }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/IRecentTasksListener.aidl b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/IRecentTasksListener.aidl
index 8efa428..59f7233 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/IRecentTasksListener.aidl
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/IRecentTasksListener.aidl
@@ -16,6 +16,8 @@
 
 package com.android.wm.shell.recents;
 
+import android.app.ActivityManager;
+
 /**
  * Listener interface that Launcher attaches to SystemUI to get split-screen callbacks.
  */
@@ -25,4 +27,14 @@
      * Called when the set of recent tasks change.
      */
     void onRecentTasksChanged();
+
+    /**
+     * Called when a running task appears.
+     */
+    void onRunningTaskAppeared(in ActivityManager.RunningTaskInfo taskInfo);
+
+    /**
+     * Called when a running task vanishes.
+     */
+    void onRunningTaskVanished(in ActivityManager.RunningTaskInfo taskInfo);
 }
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java
index c166178..3d1a7e9 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java
@@ -17,6 +17,7 @@
 package com.android.wm.shell.recents;
 
 import static android.app.ActivityTaskManager.INVALID_TASK_ID;
+import static android.content.pm.PackageManager.FEATURE_PC;
 
 import static com.android.wm.shell.common.ExecutorUtils.executeRemoteCallWithTaskPermission;
 
@@ -43,8 +44,9 @@
 import com.android.wm.shell.common.annotations.ExternalThread;
 import com.android.wm.shell.common.annotations.ShellMainThread;
 import com.android.wm.shell.protolog.ShellProtoLogGroup;
+import com.android.wm.shell.sysui.ShellInit;
 import com.android.wm.shell.util.GroupedRecentTaskInfo;
-import com.android.wm.shell.util.StagedSplitBounds;
+import com.android.wm.shell.util.SplitBounds;
 
 import java.io.PrintWriter;
 import java.util.ArrayList;
@@ -63,18 +65,19 @@
     private final ShellExecutor mMainExecutor;
     private final TaskStackListenerImpl mTaskStackListener;
     private final RecentTasks mImpl = new RecentTasksImpl();
+    private IRecentTasksListener mListener;
+    private final boolean mIsDesktopMode;
 
-    private final ArrayList<Runnable> mCallbacks = new ArrayList<>();
     // Mapping of split task ids, mappings are symmetrical (ie. if t1 is the taskid of a task in a
     // pair, then mSplitTasks[t1] = t2, and mSplitTasks[t2] = t1)
     private final SparseIntArray mSplitTasks = new SparseIntArray();
     /**
-     * Maps taskId to {@link StagedSplitBounds} for both taskIDs.
+     * Maps taskId to {@link SplitBounds} for both taskIDs.
      * Meaning there will be two taskId integers mapping to the same object.
      * If there's any ordering to the pairing than we can probably just get away with only one
      * taskID mapping to it, leaving both for consistency with {@link #mSplitTasks} for now.
      */
-    private final Map<Integer, StagedSplitBounds> mTaskSplitBoundsMap = new HashMap<>();
+    private final Map<Integer, SplitBounds> mTaskSplitBoundsMap = new HashMap<>();
 
     /**
      * Creates {@link RecentTasksController}, returns {@code null} if the feature is not
@@ -83,34 +86,39 @@
     @Nullable
     public static RecentTasksController create(
             Context context,
+            ShellInit shellInit,
             TaskStackListenerImpl taskStackListener,
             @ShellMainThread ShellExecutor mainExecutor
     ) {
         if (!context.getResources().getBoolean(com.android.internal.R.bool.config_hasRecents)) {
             return null;
         }
-        return new RecentTasksController(context, taskStackListener, mainExecutor);
+        return new RecentTasksController(context, shellInit, taskStackListener, mainExecutor);
     }
 
-    RecentTasksController(Context context, TaskStackListenerImpl taskStackListener,
+    RecentTasksController(Context context,
+            ShellInit shellInit,
+            TaskStackListenerImpl taskStackListener,
             ShellExecutor mainExecutor) {
         mContext = context;
+        mIsDesktopMode = mContext.getPackageManager().hasSystemFeature(FEATURE_PC);
         mTaskStackListener = taskStackListener;
         mMainExecutor = mainExecutor;
+        shellInit.addInitCallback(this::onInit, this);
     }
 
     public RecentTasks asRecentTasks() {
         return mImpl;
     }
 
-    public void init() {
+    private void onInit() {
         mTaskStackListener.addListener(this);
     }
 
     /**
      * Adds a split pair. This call does not validate the taskIds, only that they are not the same.
      */
-    public void addSplitPair(int taskId1, int taskId2, StagedSplitBounds splitBounds) {
+    public void addSplitPair(int taskId1, int taskId2, SplitBounds splitBounds) {
         if (taskId1 == taskId2) {
             return;
         }
@@ -176,10 +184,15 @@
         notifyRecentTasksChanged();
     }
 
-    public void onTaskRemoved(TaskInfo taskInfo) {
+    public void onTaskAdded(ActivityManager.RunningTaskInfo taskInfo) {
+        notifyRunningTaskAppeared(taskInfo);
+    }
+
+    public void onTaskRemoved(ActivityManager.RunningTaskInfo taskInfo) {
         // Remove any split pairs associated with this task
         removeSplitPair(taskInfo.taskId);
         notifyRecentTasksChanged();
+        notifyRunningTaskVanished(taskInfo);
     }
 
     public void onTaskWindowingModeChanged(TaskInfo taskInfo) {
@@ -189,19 +202,50 @@
     @VisibleForTesting
     void notifyRecentTasksChanged() {
         ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENT_TASKS, "Notify recent tasks changed");
-        for (int i = 0; i < mCallbacks.size(); i++) {
-            mCallbacks.get(i).run();
+        if (mListener == null) {
+            return;
+        }
+        try {
+            mListener.onRecentTasksChanged();
+        } catch (RemoteException e) {
+            Slog.w(TAG, "Failed call notifyRecentTasksChanged", e);
         }
     }
 
-    private void registerRecentTasksListener(Runnable listener) {
-        if (!mCallbacks.contains(listener)) {
-            mCallbacks.add(listener);
+    /**
+     * Notify the running task listener that a task appeared on desktop environment.
+     */
+    private void notifyRunningTaskAppeared(ActivityManager.RunningTaskInfo taskInfo) {
+        if (mListener == null || !mIsDesktopMode || taskInfo.realActivity == null) {
+            return;
+        }
+        try {
+            mListener.onRunningTaskAppeared(taskInfo);
+        } catch (RemoteException e) {
+            Slog.w(TAG, "Failed call onRunningTaskAppeared", e);
         }
     }
 
-    private void unregisterRecentTasksListener(Runnable listener) {
-        mCallbacks.remove(listener);
+    /**
+     * Notify the running task listener that a task was removed on desktop environment.
+     */
+    private void notifyRunningTaskVanished(ActivityManager.RunningTaskInfo taskInfo) {
+        if (mListener == null || !mIsDesktopMode || taskInfo.realActivity == null) {
+            return;
+        }
+        try {
+            mListener.onRunningTaskVanished(taskInfo);
+        } catch (RemoteException e) {
+            Slog.w(TAG, "Failed call onRunningTaskVanished", e);
+        }
+    }
+
+    private void registerRecentTasksListener(IRecentTasksListener listener) {
+        mListener = listener;
+    }
+
+    private void unregisterRecentTasksListener() {
+        mListener = null;
     }
 
     @VisibleForTesting
@@ -280,19 +324,28 @@
         private RecentTasksController mController;
         private final SingleInstanceRemoteListener<RecentTasksController,
                 IRecentTasksListener> mListener;
-        private final Runnable mRecentTasksListener =
-                new Runnable() {
-                    @Override
-                    public void run() {
-                        mListener.call(l -> l.onRecentTasksChanged());
-                    }
-                };
+        private final IRecentTasksListener mRecentTasksListener = new IRecentTasksListener.Stub() {
+            @Override
+            public void onRecentTasksChanged() throws RemoteException {
+                mListener.call(l -> l.onRecentTasksChanged());
+            }
+
+            @Override
+            public void onRunningTaskAppeared(ActivityManager.RunningTaskInfo taskInfo) {
+                mListener.call(l -> l.onRunningTaskAppeared(taskInfo));
+            }
+
+            @Override
+            public void onRunningTaskVanished(ActivityManager.RunningTaskInfo taskInfo) {
+                mListener.call(l -> l.onRunningTaskVanished(taskInfo));
+            }
+        };
 
         public IRecentTasksImpl(RecentTasksController controller) {
             mController = controller;
             mListener = new SingleInstanceRemoteListener<>(controller,
                     c -> c.registerRecentTasksListener(mRecentTasksListener),
-                    c -> c.unregisterRecentTasksListener(mRecentTasksListener));
+                    c -> c.unregisterRecentTasksListener());
         }
 
         /**
@@ -331,5 +384,16 @@
                     true /* blocking */);
             return out[0];
         }
+
+        @Override
+        public ActivityManager.RunningTaskInfo[] getRunningTasks(int maxNum) {
+            final ActivityManager.RunningTaskInfo[][] tasks =
+                    new ActivityManager.RunningTaskInfo[][] {null};
+            executeRemoteCallWithTaskPermission(mController, "getRunningTasks",
+                    (controller) -> tasks[0] = ActivityTaskManager.getInstance().getTasks(maxNum)
+                            .toArray(new ActivityManager.RunningTaskInfo[0]),
+                    true /* blocking */);
+            return tasks[0];
+        }
     }
 }
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/MainStage.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/MainStage.java
index ae5e075c..b0080b2 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/MainStage.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/MainStage.java
@@ -16,7 +16,9 @@
 
 package com.android.wm.shell.splitscreen;
 
-import android.annotation.Nullable;
+import static com.android.wm.shell.common.split.SplitScreenConstants.CONTROLLED_ACTIVITY_TYPES;
+import static com.android.wm.shell.common.split.SplitScreenConstants.CONTROLLED_WINDOWING_MODES;
+
 import android.content.Context;
 import android.view.SurfaceSession;
 import android.window.WindowContainerToken;
@@ -38,10 +40,14 @@
 
     MainStage(Context context, ShellTaskOrganizer taskOrganizer, int displayId,
             StageListenerCallbacks callbacks, SyncTransactionQueue syncQueue,
-            SurfaceSession surfaceSession, IconProvider iconProvider,
-            @Nullable StageTaskUnfoldController stageTaskUnfoldController) {
-        super(context, taskOrganizer, displayId, callbacks, syncQueue, surfaceSession, iconProvider,
-                stageTaskUnfoldController);
+            SurfaceSession surfaceSession, IconProvider iconProvider) {
+        super(context, taskOrganizer, displayId, callbacks, syncQueue, surfaceSession,
+                iconProvider);
+    }
+
+    @Override
+    void dismiss(WindowContainerTransaction wct, boolean toTop) {
+        deactivate(wct, toTop);
     }
 
     boolean isActive() {
@@ -76,10 +82,10 @@
         if (mRootTaskInfo == null) return;
         final WindowContainerToken rootToken = mRootTaskInfo.token;
         wct.reparentTasks(
-                        rootToken,
-                        null /* newParent */,
-                        CONTROLLED_WINDOWING_MODES_WHEN_ACTIVE,
-                        CONTROLLED_ACTIVITY_TYPES,
-                        toTop);
+                rootToken,
+                null /* newParent */,
+                null /* windowingModes */,
+                null /* activityTypes */,
+                toTop);
     }
 }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SideStage.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SideStage.java
index d55619f..86efbe0 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SideStage.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SideStage.java
@@ -16,7 +16,6 @@
 
 package com.android.wm.shell.splitscreen;
 
-import android.annotation.Nullable;
 import android.app.ActivityManager;
 import android.content.Context;
 import android.view.SurfaceSession;
@@ -38,10 +37,14 @@
 
     SideStage(Context context, ShellTaskOrganizer taskOrganizer, int displayId,
             StageListenerCallbacks callbacks, SyncTransactionQueue syncQueue,
-            SurfaceSession surfaceSession, IconProvider iconProvider,
-            @Nullable StageTaskUnfoldController stageTaskUnfoldController) {
-        super(context, taskOrganizer, displayId, callbacks, syncQueue, surfaceSession, iconProvider,
-                stageTaskUnfoldController);
+            SurfaceSession surfaceSession, IconProvider iconProvider) {
+        super(context, taskOrganizer, displayId, callbacks, syncQueue, surfaceSession,
+                iconProvider);
+    }
+
+    @Override
+    void dismiss(WindowContainerTransaction wct, boolean toTop) {
+        removeAllTasks(wct, toTop);
     }
 
     boolean removeAllTasks(WindowContainerTransaction wct, boolean toTop) {
@@ -49,8 +52,8 @@
         wct.reparentTasks(
                 mRootTaskInfo.token,
                 null /* newParent */,
-                CONTROLLED_WINDOWING_MODES_WHEN_ACTIVE,
-                CONTROLLED_ACTIVITY_TYPES,
+                null /* windowingModes */,
+                null /* activityTypes */,
                 toTop);
         return true;
     }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreen.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreen.java
index 448773a..e73b799 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreen.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreen.java
@@ -18,6 +18,7 @@
 
 import android.annotation.IntDef;
 import android.annotation.NonNull;
+import android.graphics.Rect;
 
 import com.android.wm.shell.common.annotations.ExternalThread;
 import com.android.wm.shell.common.split.SplitScreenConstants.SplitPosition;
@@ -58,6 +59,7 @@
     interface SplitScreenListener {
         default void onStagePositionChanged(@StageType int stage, @SplitPosition int position) {}
         default void onTaskStageChanged(int taskId, @StageType int stage, boolean visible) {}
+        default void onSplitBoundsChanged(Rect rootBounds, Rect mainBounds, Rect sideBounds) {}
         default void onSplitVisibilityChanged(boolean visible) {}
     }
 
@@ -75,12 +77,6 @@
         return null;
     }
 
-    /**
-     * Called when the visibility of the keyguard changes.
-     * @param showing Indicates if the keyguard is now visible.
-     */
-    void onKeyguardVisibilityChanged(boolean showing);
-
     /** Called when device waking up finished. */
     void onFinishedWakingUp();
 
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 31b510c..8de649e 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
@@ -18,6 +18,7 @@
 
 import static android.app.ActivityManager.START_SUCCESS;
 import static android.app.ActivityManager.START_TASK_TO_FRONT;
+import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
 import static android.content.Intent.FLAG_ACTIVITY_NO_USER_ACTION;
 import static android.view.Display.DEFAULT_DISPLAY;
 import static android.view.RemoteAnimationTarget.MODE_OPENING;
@@ -31,6 +32,7 @@
 import static com.android.wm.shell.transition.Transitions.ENABLE_SHELL_TRANSITIONS;
 
 import android.app.ActivityManager;
+import android.app.ActivityOptions;
 import android.app.ActivityTaskManager;
 import android.app.PendingIntent;
 import android.content.ActivityNotFoundException;
@@ -45,6 +47,7 @@
 import android.util.ArrayMap;
 import android.util.Slog;
 import android.view.IRemoteAnimationFinishedCallback;
+import android.view.IRemoteAnimationRunner;
 import android.view.RemoteAnimationAdapter;
 import android.view.RemoteAnimationTarget;
 import android.view.SurfaceControl;
@@ -58,7 +61,9 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.logging.InstanceId;
+import com.android.internal.protolog.common.ProtoLog;
 import com.android.launcher3.icons.IconProvider;
 import com.android.wm.shell.RootTaskDisplayAreaOrganizer;
 import com.android.wm.shell.ShellTaskOrganizer;
@@ -73,21 +78,23 @@
 import com.android.wm.shell.common.annotations.ExternalThread;
 import com.android.wm.shell.common.split.SplitLayout;
 import com.android.wm.shell.common.split.SplitScreenConstants.SplitPosition;
+import com.android.wm.shell.draganddrop.DragAndDropController;
 import com.android.wm.shell.draganddrop.DragAndDropPolicy;
+import com.android.wm.shell.protolog.ShellProtoLogGroup;
 import com.android.wm.shell.recents.RecentTasksController;
 import com.android.wm.shell.splitscreen.SplitScreen.StageType;
-import com.android.wm.shell.transition.LegacyTransitions;
+import com.android.wm.shell.sysui.KeyguardChangeListener;
+import com.android.wm.shell.sysui.ShellController;
+import com.android.wm.shell.sysui.ShellInit;
 import com.android.wm.shell.transition.Transitions;
 
 import java.io.PrintWriter;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
-import java.util.Arrays;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.concurrent.Executor;
 
-import javax.inject.Provider;
-
 /**
  * Class manages split-screen multitasking mode and implements the main interface
  * {@link SplitScreen}.
@@ -96,19 +103,19 @@
  */
 // TODO(b/198577848): Implement split screen flicker test to consolidate CUJ of split screen.
 public class SplitScreenController implements DragAndDropPolicy.Starter,
-        RemoteCallable<SplitScreenController> {
+        RemoteCallable<SplitScreenController>, KeyguardChangeListener {
     private static final String TAG = SplitScreenController.class.getSimpleName();
 
-    static final int EXIT_REASON_UNKNOWN = 0;
-    static final int EXIT_REASON_APP_DOES_NOT_SUPPORT_MULTIWINDOW = 1;
-    static final int EXIT_REASON_APP_FINISHED = 2;
-    static final int EXIT_REASON_DEVICE_FOLDED = 3;
-    static final int EXIT_REASON_DRAG_DIVIDER = 4;
-    static final int EXIT_REASON_RETURN_HOME = 5;
-    static final int EXIT_REASON_ROOT_TASK_VANISHED = 6;
-    static final int EXIT_REASON_SCREEN_LOCKED = 7;
-    static final int EXIT_REASON_SCREEN_LOCKED_SHOW_ON_TOP = 8;
-    static final int EXIT_REASON_CHILD_TASK_ENTER_PIP = 9;
+    public static final int EXIT_REASON_UNKNOWN = 0;
+    public static final int EXIT_REASON_APP_DOES_NOT_SUPPORT_MULTIWINDOW = 1;
+    public static final int EXIT_REASON_APP_FINISHED = 2;
+    public static final int EXIT_REASON_DEVICE_FOLDED = 3;
+    public static final int EXIT_REASON_DRAG_DIVIDER = 4;
+    public static final int EXIT_REASON_RETURN_HOME = 5;
+    public static final int EXIT_REASON_ROOT_TASK_VANISHED = 6;
+    public static final int EXIT_REASON_SCREEN_LOCKED = 7;
+    public static final int EXIT_REASON_SCREEN_LOCKED_SHOW_ON_TOP = 8;
+    public static final int EXIT_REASON_CHILD_TASK_ENTER_PIP = 9;
     @IntDef(value = {
             EXIT_REASON_UNKNOWN,
             EXIT_REASON_APP_DOES_NOT_SUPPORT_MULTIWINDOW,
@@ -124,6 +131,7 @@
     @Retention(RetentionPolicy.SOURCE)
     @interface ExitReason{}
 
+    private final ShellController mShellController;
     private final ShellTaskOrganizer mTaskOrganizer;
     private final SyncTransactionQueue mSyncQueue;
     private final Context mContext;
@@ -133,27 +141,34 @@
     private final DisplayController mDisplayController;
     private final DisplayImeController mDisplayImeController;
     private final DisplayInsetsController mDisplayInsetsController;
+    private final DragAndDropController mDragAndDropController;
     private final Transitions mTransitions;
     private final TransactionPool mTransactionPool;
     private final SplitscreenEventLogger mLogger;
     private final IconProvider mIconProvider;
     private final Optional<RecentTasksController> mRecentTasksOptional;
-    private final Provider<Optional<StageTaskUnfoldController>> mUnfoldControllerProvider;
 
     private StageCoordinator mStageCoordinator;
     // Only used for the legacy recents animation from splitscreen to allow the tasks to be animated
     // outside the bounds of the roots by being reparented into a higher level fullscreen container
     private SurfaceControl mSplitTasksContainerLayer;
 
-    public SplitScreenController(ShellTaskOrganizer shellTaskOrganizer,
-            SyncTransactionQueue syncQueue, Context context,
+    public SplitScreenController(Context context,
+            ShellInit shellInit,
+            ShellController shellController,
+            ShellTaskOrganizer shellTaskOrganizer,
+            SyncTransactionQueue syncQueue,
             RootTaskDisplayAreaOrganizer rootTDAOrganizer,
-            ShellExecutor mainExecutor, DisplayController displayController,
+            DisplayController displayController,
             DisplayImeController displayImeController,
             DisplayInsetsController displayInsetsController,
-            Transitions transitions, TransactionPool transactionPool, IconProvider iconProvider,
+            DragAndDropController dragAndDropController,
+            Transitions transitions,
+            TransactionPool transactionPool,
+            IconProvider iconProvider,
             Optional<RecentTasksController> recentTasks,
-            Provider<Optional<StageTaskUnfoldController>> unfoldControllerProvider) {
+            ShellExecutor mainExecutor) {
+        mShellController = shellController;
         mTaskOrganizer = shellTaskOrganizer;
         mSyncQueue = syncQueue;
         mContext = context;
@@ -162,18 +177,40 @@
         mDisplayController = displayController;
         mDisplayImeController = displayImeController;
         mDisplayInsetsController = displayInsetsController;
+        mDragAndDropController = dragAndDropController;
         mTransitions = transitions;
         mTransactionPool = transactionPool;
-        mUnfoldControllerProvider = unfoldControllerProvider;
         mLogger = new SplitscreenEventLogger();
         mIconProvider = iconProvider;
         mRecentTasksOptional = recentTasks;
+        // TODO(b/238217847): Temporarily add this check here until we can remove the dynamic
+        //                    override for this controller from the base module
+        if (ActivityTaskManager.supportsSplitScreenMultiWindow(context)) {
+            shellInit.addInitCallback(this::onInit, this);
+        }
     }
 
     public SplitScreen asSplitScreen() {
         return mImpl;
     }
 
+    /**
+     * This will be called after ShellTaskOrganizer has initialized/registered because of the
+     * dependency order.
+     */
+    @VisibleForTesting
+    void onInit() {
+        mShellController.addKeyguardChangeListener(this);
+        if (mStageCoordinator == null) {
+            // TODO: Multi-display
+            mStageCoordinator = new StageCoordinator(mContext, DEFAULT_DISPLAY, mSyncQueue,
+                    mTaskOrganizer, mDisplayController, mDisplayImeController,
+                    mDisplayInsetsController, mTransitions, mTransactionPool, mLogger,
+                    mIconProvider, mMainExecutor, mRecentTasksOptional);
+        }
+        mDragAndDropController.setSplitScreenController(this);
+    }
+
     @Override
     public Context getContext() {
         return mContext;
@@ -184,20 +221,22 @@
         return mMainExecutor;
     }
 
-    public void onOrganizerRegistered() {
-        if (mStageCoordinator == null) {
-            // TODO: Multi-display
-            mStageCoordinator = new StageCoordinator(mContext, DEFAULT_DISPLAY, mSyncQueue,
-                    mTaskOrganizer, mDisplayController, mDisplayImeController,
-                    mDisplayInsetsController, mTransitions, mTransactionPool, mLogger,
-                    mIconProvider, mMainExecutor, mRecentTasksOptional, mUnfoldControllerProvider);
-        }
-    }
-
     public boolean isSplitScreenVisible() {
         return mStageCoordinator.isSplitScreenVisible();
     }
 
+    public StageCoordinator getTransitionHandler() {
+        return mStageCoordinator;
+    }
+
+    public ActivityManager.RunningTaskInfo getFocusingTaskInfo() {
+        return mStageCoordinator.getFocusingTaskInfo();
+    }
+
+    public boolean isValidToEnterSplitScreen(@NonNull ActivityManager.RunningTaskInfo taskInfo) {
+        return mStageCoordinator.isValidToEnterSplitScreen(taskInfo);
+    }
+
     @Nullable
     public ActivityManager.RunningTaskInfo getTaskInfo(@SplitPosition int splitPosition) {
         if (!isSplitScreenVisible() || splitPosition == SPLIT_POSITION_UNDEFINED) {
@@ -222,6 +261,14 @@
                 new WindowContainerTransaction());
     }
 
+    /**
+     * Update surfaces of the split screen layout based on the current state
+     * @param transaction to write the updates to
+     */
+    public void updateSplitScreenSurfaces(SurfaceControl.Transaction transaction) {
+        mStageCoordinator.updateSurfaces(transaction);
+    }
+
     private boolean moveToStage(int taskId, @StageType int stageType,
             @SplitPosition int stagePosition, WindowContainerTransaction wct) {
         final ActivityManager.RunningTaskInfo task = mTaskOrganizer.getRunningTaskInfo(taskId);
@@ -263,8 +310,10 @@
         mStageCoordinator.exitSplitScreen(toTopTaskId, exitReason);
     }
 
-    public void onKeyguardVisibilityChanged(boolean showing) {
-        mStageCoordinator.onKeyguardVisibilityChanged(showing);
+    @Override
+    public void onKeyguardVisibilityChanged(boolean visible, boolean occluded,
+            boolean animatingDismiss) {
+        mStageCoordinator.onKeyguardVisibilityChanged(visible);
     }
 
     public void onFinishedWakingUp() {
@@ -288,17 +337,39 @@
     }
 
     public void startTask(int taskId, @SplitPosition int position, @Nullable Bundle options) {
+        final int[] result = new int[1];
+        IRemoteAnimationRunner wrapper = new IRemoteAnimationRunner.Stub() {
+            @Override
+            public void onAnimationStart(@WindowManager.TransitionOldType int transit,
+                    RemoteAnimationTarget[] apps,
+                    RemoteAnimationTarget[] wallpapers,
+                    RemoteAnimationTarget[] nonApps,
+                    final IRemoteAnimationFinishedCallback finishedCallback) {
+                try {
+                    finishedCallback.onAnimationFinished();
+                } catch (RemoteException e) {
+                    Slog.e(TAG, "Failed to invoke onAnimationFinished", e);
+                }
+                if (result[0] == START_SUCCESS || result[0] == START_TASK_TO_FRONT) {
+                    final WindowContainerTransaction evictWct = new WindowContainerTransaction();
+                    mStageCoordinator.prepareEvictNonOpeningChildTasks(position, apps, evictWct);
+                    mSyncQueue.queue(evictWct);
+                }
+            }
+            @Override
+            public void onAnimationCancelled(boolean isKeyguardOccluded) {
+            }
+        };
         options = mStageCoordinator.resolveStartStage(STAGE_TYPE_UNDEFINED, position, options,
                 null /* wct */);
+        RemoteAnimationAdapter wrappedAdapter = new RemoteAnimationAdapter(wrapper,
+                0 /* duration */, 0 /* statusBarTransitionDelay */);
+        ActivityOptions activityOptions = ActivityOptions.fromBundle(options);
+        activityOptions.update(ActivityOptions.makeRemoteAnimation(wrappedAdapter));
 
         try {
-            final WindowContainerTransaction evictWct = new WindowContainerTransaction();
-            mStageCoordinator.prepareEvictChildTasks(position, evictWct);
-            final int result =
-                    ActivityTaskManager.getService().startActivityFromRecents(taskId, options);
-            if (result == START_SUCCESS || result == START_TASK_TO_FRONT) {
-                mSyncQueue.queue(evictWct);
-            }
+            result[0] = ActivityTaskManager.getService().startActivityFromRecents(taskId,
+                    activityOptions.toBundle());
         } catch (RemoteException e) {
             Slog.e(TAG, "Failed to launch task", e);
         }
@@ -306,17 +377,37 @@
 
     public void startShortcut(String packageName, String shortcutId, @SplitPosition int position,
             @Nullable Bundle options, UserHandle user) {
+        IRemoteAnimationRunner wrapper = new IRemoteAnimationRunner.Stub() {
+            @Override
+            public void onAnimationStart(@WindowManager.TransitionOldType int transit,
+                    RemoteAnimationTarget[] apps,
+                    RemoteAnimationTarget[] wallpapers,
+                    RemoteAnimationTarget[] nonApps,
+                    final IRemoteAnimationFinishedCallback finishedCallback) {
+                try {
+                    finishedCallback.onAnimationFinished();
+                } catch (RemoteException e) {
+                    Slog.e(TAG, "Failed to invoke onAnimationFinished", e);
+                }
+                final WindowContainerTransaction evictWct = new WindowContainerTransaction();
+                mStageCoordinator.prepareEvictNonOpeningChildTasks(position, apps, evictWct);
+                mSyncQueue.queue(evictWct);
+            }
+            @Override
+            public void onAnimationCancelled(boolean isKeyguardOccluded) {
+            }
+        };
         options = mStageCoordinator.resolveStartStage(STAGE_TYPE_UNDEFINED, position, options,
                 null /* wct */);
-        final WindowContainerTransaction evictWct = new WindowContainerTransaction();
-        mStageCoordinator.prepareEvictChildTasks(position, evictWct);
+        RemoteAnimationAdapter wrappedAdapter = new RemoteAnimationAdapter(wrapper,
+                0 /* duration */, 0 /* statusBarTransitionDelay */);
+        ActivityOptions activityOptions = ActivityOptions.fromBundle(options);
+        activityOptions.update(ActivityOptions.makeRemoteAnimation(wrappedAdapter));
 
         try {
-            LauncherApps launcherApps =
-                    mContext.getSystemService(LauncherApps.class);
+            LauncherApps launcherApps = mContext.getSystemService(LauncherApps.class);
             launcherApps.startShortcut(packageName, shortcutId, null /* sourceBounds */,
-                    options, user);
-            mSyncQueue.queue(evictWct);
+                    activityOptions.toBundle(), user);
         } catch (ActivityNotFoundException e) {
             Slog.e(TAG, "Failed to launch shortcut", e);
         }
@@ -324,93 +415,56 @@
 
     public void startIntent(PendingIntent intent, @Nullable Intent fillInIntent,
             @SplitPosition int position, @Nullable Bundle options) {
-        if (!ENABLE_SHELL_TRANSITIONS) {
-            startIntentLegacy(intent, fillInIntent, position, options);
-            return;
-        }
-
-        try {
-            options = mStageCoordinator.resolveStartStage(STAGE_TYPE_UNDEFINED, position, options,
-                    null /* wct */);
-
-            // Flag this as a no-user-action launch to prevent sending user leaving event to the
-            // current top activity since it's going to be put into another side of the split. This
-            // prevents the current top activity from going into pip mode due to user leaving event.
-            if (fillInIntent == null) {
-                fillInIntent = new Intent();
-            }
-            fillInIntent.addFlags(FLAG_ACTIVITY_NO_USER_ACTION);
-
-            intent.send(mContext, 0, fillInIntent, null /* onFinished */, null /* handler */,
-                    null /* requiredPermission */, options);
-        } catch (PendingIntent.CanceledException e) {
-            Slog.e(TAG, "Failed to launch task", e);
-        }
-    }
-
-    private void startIntentLegacy(PendingIntent intent, @Nullable Intent fillInIntent,
-            @SplitPosition int position, @Nullable Bundle options) {
-        final WindowContainerTransaction evictWct = new WindowContainerTransaction();
-        mStageCoordinator.prepareEvictChildTasks(position, evictWct);
-
-        LegacyTransitions.ILegacyTransition transition = new LegacyTransitions.ILegacyTransition() {
-            @Override
-            public void onAnimationStart(int transit, RemoteAnimationTarget[] apps,
-                    RemoteAnimationTarget[] wallpapers, RemoteAnimationTarget[] nonApps,
-                    IRemoteAnimationFinishedCallback finishedCallback,
-                    SurfaceControl.Transaction t) {
-                if (apps == null || apps.length == 0) {
-                    final ActivityManager.RunningTaskInfo pairedTaskInfo =
-                            getTaskInfo(SplitLayout.reversePosition(position));
-                    final ComponentName pairedActivity =
-                            pairedTaskInfo != null ? pairedTaskInfo.baseActivity : null;
-                    final ComponentName intentActivity =
-                            intent.getIntent() != null ? intent.getIntent().getComponent() : null;
-                    if (pairedActivity != null && pairedActivity.equals(intentActivity)) {
-                        // Switch split position if dragging the same activity to another side.
-                        setSideStagePosition(SplitLayout.reversePosition(
-                                mStageCoordinator.getSideStagePosition()));
-                    }
-
-                    // Do nothing when the animation was cancelled.
-                    t.apply();
-                    return;
-                }
-
-                mStageCoordinator.updateSurfaceBounds(null /* layout */, t,
-                        false /* applyResizingOffset */);
-                for (int i = 0; i < apps.length; ++i) {
-                    if (apps[i].mode == MODE_OPENING) {
-                        t.show(apps[i].leash);
-                    }
-                }
-                t.apply();
-
-                if (finishedCallback != null) {
-                    try {
-                        finishedCallback.onAnimationFinished();
-                    } catch (RemoteException e) {
-                        Slog.e(TAG, "Error finishing legacy transition: ", e);
-                    }
-                }
-
-                mSyncQueue.queue(evictWct);
-            }
-        };
-
-        final WindowContainerTransaction wct = new WindowContainerTransaction();
-        options = mStageCoordinator.resolveStartStage(STAGE_TYPE_UNDEFINED, position, options, wct);
-
-        // Flag this as a no-user-action launch to prevent sending user leaving event to the current
-        // top activity since it's going to be put into another side of the split. This prevents the
-        // current top activity from going into pip mode due to user leaving event.
         if (fillInIntent == null) {
             fillInIntent = new Intent();
         }
+        // Flag this as a no-user-action launch to prevent sending user leaving event to the
+        // current top activity since it's going to be put into another side of the split. This
+        // prevents the current top activity from going into pip mode due to user leaving event.
         fillInIntent.addFlags(FLAG_ACTIVITY_NO_USER_ACTION);
 
-        wct.sendPendingIntent(intent, fillInIntent, options);
-        mSyncQueue.queue(transition, WindowManager.TRANSIT_OPEN, wct);
+        // Flag with MULTIPLE_TASK if this is launching the same activity into both sides of the
+        // split.
+        if (isLaunchingAdjacently(intent.getIntent(), position)) {
+            fillInIntent.addFlags(FLAG_ACTIVITY_MULTIPLE_TASK);
+            ProtoLog.v(ShellProtoLogGroup.WM_SHELL_SPLIT_SCREEN, "Adding MULTIPLE_TASK");
+        }
+
+        if (!ENABLE_SHELL_TRANSITIONS) {
+            mStageCoordinator.startIntentLegacy(intent, fillInIntent, position, options);
+            return;
+        }
+
+        mStageCoordinator.startIntent(intent, fillInIntent, position, options);
+    }
+
+    /** Returns {@code true} if it's launching the same component on both sides of the split. */
+    @VisibleForTesting
+    boolean isLaunchingAdjacently(@Nullable Intent startIntent,
+            @SplitPosition int position) {
+        if (startIntent == null) {
+            return false;
+        }
+
+        final ComponentName launchingActivity = startIntent.getComponent();
+        if (launchingActivity == null) {
+            return false;
+        }
+
+        if (isSplitScreenVisible()) {
+            final ActivityManager.RunningTaskInfo pairedTaskInfo =
+                    getTaskInfo(SplitLayout.reversePosition(position));
+            final ComponentName pairedActivity = pairedTaskInfo != null
+                    ? pairedTaskInfo.baseIntent.getComponent() : null;
+            return Objects.equals(launchingActivity, pairedActivity);
+        }
+
+        final ActivityManager.RunningTaskInfo taskInfo = getFocusingTaskInfo();
+        if (taskInfo != null && isValidToEnterSplitScreen(taskInfo)) {
+            return Objects.equals(taskInfo.baseIntent.getComponent(), launchingActivity);
+        }
+
+        return false;
     }
 
     RemoteAnimationTarget[] onGoingToRecentsLegacy(RemoteAnimationTarget[] apps) {
@@ -421,22 +475,39 @@
             mStageCoordinator.prepareEvictInvisibleChildTasks(wct);
             mSyncQueue.queue(wct);
         }
-        return reparentSplitTasksForAnimation(apps, true /*splitExpectedToBeVisible*/);
+        return reparentSplitTasksForAnimation(apps, false /* enterSplitScreen */);
     }
 
     RemoteAnimationTarget[] onStartingSplitLegacy(RemoteAnimationTarget[] apps) {
-        return reparentSplitTasksForAnimation(apps, false /*splitExpectedToBeVisible*/);
+        try {
+            return reparentSplitTasksForAnimation(apps, true /* enterSplitScreen */);
+        } finally {
+            for (RemoteAnimationTarget appTarget : apps) {
+                if (appTarget.leash != null) {
+                    appTarget.leash.release();
+                }
+            }
+        }
     }
 
     private RemoteAnimationTarget[] reparentSplitTasksForAnimation(RemoteAnimationTarget[] apps,
-            boolean splitExpectedToBeVisible) {
+            boolean enterSplitScreen) {
         if (ENABLE_SHELL_TRANSITIONS) return null;
-        // TODO(b/206487881): Integrate this with shell transition.
-        if (splitExpectedToBeVisible && !isSplitScreenVisible()) return null;
-        // Split not visible, but not enough apps to have split, also return null
-        if (!splitExpectedToBeVisible && apps.length < 2) return null;
 
-        SurfaceControl.Transaction transaction = new SurfaceControl.Transaction();
+        if (enterSplitScreen) {
+            int openingApps = 0;
+            for (int i = 0; i < apps.length; ++i) {
+                if (apps[i].mode == MODE_OPENING) openingApps++;
+            }
+            if (openingApps < 2) {
+                // Not having enough apps to enter split screen
+                return null;
+            }
+        } else if (!isSplitScreenVisible()) {
+            return null;
+        }
+
+        final SurfaceControl.Transaction transaction = mTransactionPool.acquire();
         if (mSplitTasksContainerLayer != null) {
             // Remove the previous layer before recreating
             transaction.remove(mSplitTasksContainerLayer);
@@ -449,17 +520,14 @@
         mRootTDAOrganizer.attachToDisplayArea(DEFAULT_DISPLAY, builder);
         mSplitTasksContainerLayer = builder.build();
 
-        // Ensure that we order these in the parent in the right z-order as their previous order
-        Arrays.sort(apps, (a1, a2) -> a1.prefixOrderIndex - a2.prefixOrderIndex);
-        int layer = 1;
-        for (RemoteAnimationTarget appTarget : apps) {
+        for (int i = 0; i < apps.length; ++i) {
+            final RemoteAnimationTarget appTarget = apps[i];
             transaction.reparent(appTarget.leash, mSplitTasksContainerLayer);
             transaction.setPosition(appTarget.leash, appTarget.screenSpaceBounds.left,
                     appTarget.screenSpaceBounds.top);
-            transaction.setLayer(appTarget.leash, layer++);
         }
         transaction.apply();
-        transaction.close();
+        mTransactionPool.release(transaction);
         return new RemoteAnimationTarget[]{mStageCoordinator.getDividerBarLegacyTarget()};
     }
     /**
@@ -535,6 +603,17 @@
             }
 
             @Override
+            public void onSplitBoundsChanged(Rect rootBounds, Rect mainBounds, Rect sideBounds) {
+                for (int i = 0; i < mExecutors.size(); i++) {
+                    final int index = i;
+                    mExecutors.valueAt(index).execute(() -> {
+                        mExecutors.keyAt(index).onSplitBoundsChanged(rootBounds, mainBounds,
+                                sideBounds);
+                    });
+                }
+            }
+
+            @Override
             public void onSplitVisibilityChanged(boolean visible) {
                 for (int i = 0; i < mExecutors.size(); i++) {
                     final int index = i;
@@ -583,13 +662,6 @@
         }
 
         @Override
-        public void onKeyguardVisibilityChanged(boolean showing) {
-            mMainExecutor.execute(() -> {
-                SplitScreenController.this.onKeyguardVisibilityChanged(showing);
-            });
-        }
-
-        @Override
         public void onFinishedWakingUp() {
             mMainExecutor.execute(() -> {
                 SplitScreenController.this.onFinishedWakingUp();
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 cd121ed..d7ca791 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
@@ -21,7 +21,6 @@
 import static android.view.WindowManager.TRANSIT_OPEN;
 import static android.view.WindowManager.TRANSIT_TO_BACK;
 import static android.view.WindowManager.TRANSIT_TO_FRONT;
-import static android.window.TransitionInfo.FLAG_FIRST_CUSTOM;
 
 import static com.android.wm.shell.splitscreen.SplitScreen.stageTypeToString;
 import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_DRAG_DIVIDER;
@@ -58,19 +57,16 @@
 class SplitScreenTransitions {
     private static final String TAG = "SplitScreenTransitions";
 
-    /** Flag applied to a transition change to identify it as a divider bar for animation. */
-    public static final int FLAG_IS_DIVIDER_BAR = FLAG_FIRST_CUSTOM;
-
     private final TransactionPool mTransactionPool;
     private final Transitions mTransitions;
     private final Runnable mOnFinish;
 
     DismissTransition mPendingDismiss = null;
-    IBinder mPendingEnter = null;
-    IBinder mPendingRecent = null;
+    TransitSession mPendingEnter = null;
+    TransitSession mPendingRecent = null;
 
     private IBinder mAnimatingTransition = null;
-    private OneShotRemoteHandler mPendingRemoteHandler = null;
+    OneShotRemoteHandler mPendingRemoteHandler = null;
     private OneShotRemoteHandler mActiveRemoteHandler = null;
 
     private final Transitions.TransitionFinishCallback mRemoteFinishCB = this::onFinish;
@@ -94,9 +90,11 @@
             @NonNull SurfaceControl.Transaction startTransaction,
             @NonNull SurfaceControl.Transaction finishTransaction,
             @NonNull Transitions.TransitionFinishCallback finishCallback,
-            @NonNull WindowContainerToken mainRoot, @NonNull WindowContainerToken sideRoot) {
+            @NonNull WindowContainerToken mainRoot, @NonNull WindowContainerToken sideRoot,
+            @NonNull WindowContainerToken topRoot) {
         mFinishCallback = finishCallback;
         mAnimatingTransition = transition;
+        mFinishTransaction = finishTransaction;
         if (mPendingRemoteHandler != null) {
             mPendingRemoteHandler.startAnimation(transition, info, startTransaction,
                     finishTransaction, mRemoteFinishCB);
@@ -104,14 +102,12 @@
             mPendingRemoteHandler = null;
             return;
         }
-        playInternalAnimation(transition, info, startTransaction, mainRoot, sideRoot);
+        playInternalAnimation(transition, info, startTransaction, mainRoot, sideRoot, topRoot);
     }
 
     private void playInternalAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
             @NonNull SurfaceControl.Transaction t, @NonNull WindowContainerToken mainRoot,
-            @NonNull WindowContainerToken sideRoot) {
-        mFinishTransaction = mTransactionPool.acquire();
-
+            @NonNull WindowContainerToken sideRoot, @NonNull WindowContainerToken topRoot) {
         // Play some place-holder fade animations
         for (int i = info.getChanges().size() - 1; i >= 0; --i) {
             final TransitionInfo.Change change = info.getChanges().get(i);
@@ -140,11 +136,14 @@
                 endBounds.offset(-info.getRootOffset().x, -info.getRootOffset().y);
                 startExampleResizeAnimation(leash, startBounds, endBounds);
             }
-            if (change.getParent() != null) {
+            boolean isRootOrSplitSideRoot = change.getParent() == null
+                    || topRoot.equals(change.getParent());
+            // For enter or exit, we only want to animate the side roots but not the top-root.
+            if (!isRootOrSplitSideRoot || topRoot.equals(change.getContainer())) {
                 continue;
             }
 
-            if (transition == mPendingEnter && (mainRoot.equals(change.getContainer())
+            if (isPendingEnter(transition) && (mainRoot.equals(change.getContainer())
                     || sideRoot.equals(change.getContainer()))) {
                 t.setPosition(leash, change.getEndAbsBounds().left, change.getEndAbsBounds().top);
                 t.setWindowCrop(leash, change.getEndAbsBounds().width(),
@@ -170,12 +169,40 @@
         onFinish(null /* wct */, null /* wctCB */);
     }
 
+    boolean isPendingTransition(IBinder transition) {
+        return isPendingEnter(transition)
+                || isPendingDismiss(transition)
+                || isPendingRecent(transition);
+    }
+
+    boolean isPendingEnter(IBinder transition) {
+        return mPendingEnter != null && mPendingEnter.mTransition == transition;
+    }
+
+    boolean isPendingRecent(IBinder transition) {
+        return mPendingRecent != null && mPendingRecent.mTransition == transition;
+    }
+
+    boolean isPendingDismiss(IBinder transition) {
+        return mPendingDismiss != null && mPendingDismiss.mTransition == transition;
+    }
+
     /** Starts a transition to enter split with a remote transition animator. */
-    IBinder startEnterTransition(@WindowManager.TransitionType int transitType,
-            @NonNull WindowContainerTransaction wct, @Nullable RemoteTransition remoteTransition,
-            @NonNull Transitions.TransitionHandler handler) {
+    IBinder startEnterTransition(
+            @WindowManager.TransitionType int transitType,
+            WindowContainerTransaction wct,
+            @Nullable RemoteTransition remoteTransition,
+            Transitions.TransitionHandler handler,
+            @Nullable TransitionCallback callback) {
         final IBinder transition = mTransitions.startTransition(transitType, wct, handler);
-        mPendingEnter = transition;
+        setEnterTransition(transition, remoteTransition, callback);
+        return transition;
+    }
+
+    /** Sets a transition to enter split. */
+    void setEnterTransition(@NonNull IBinder transition,
+            @Nullable RemoteTransition remoteTransition, @Nullable TransitionCallback callback) {
+        mPendingEnter = new TransitSession(transition, callback);
 
         if (remoteTransition != null) {
             // Wrapping it for ease-of-use (OneShot handles all the binder linking/death stuff)
@@ -183,32 +210,35 @@
                     mTransitions.getMainExecutor(), remoteTransition);
             mPendingRemoteHandler.setTransition(transition);
         }
-        return transition;
+
+        ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "  splitTransition "
+                + " deduced Enter split screen");
     }
 
     /** Starts a transition to dismiss split. */
-    IBinder startDismissTransition(@Nullable IBinder transition, WindowContainerTransaction wct,
+    IBinder startDismissTransition(WindowContainerTransaction wct,
             Transitions.TransitionHandler handler, @SplitScreen.StageType int dismissTop,
             @SplitScreenController.ExitReason int reason) {
         final int type = reason == EXIT_REASON_DRAG_DIVIDER
                 ? TRANSIT_SPLIT_DISMISS_SNAP : TRANSIT_SPLIT_DISMISS;
-        if (transition == null) {
-            transition = mTransitions.startTransition(type, wct, handler);
-        }
+        IBinder transition = mTransitions.startTransition(type, wct, handler);
+        setDismissTransition(transition, dismissTop, reason);
+        return transition;
+    }
+
+    /** Sets a transition to dismiss split. */
+    void setDismissTransition(@NonNull IBinder transition, @SplitScreen.StageType int dismissTop,
+            @SplitScreenController.ExitReason int reason) {
         mPendingDismiss = new DismissTransition(transition, reason, dismissTop);
 
         ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "  splitTransition "
                         + " deduced Dismiss due to %s. toTop=%s",
                 exitReasonToString(reason), stageTypeToString(dismissTop));
-        return transition;
     }
 
-    IBinder startRecentTransition(@Nullable IBinder transition, WindowContainerTransaction wct,
-            Transitions.TransitionHandler handler, @Nullable RemoteTransition remoteTransition) {
-        if (transition == null) {
-            transition = mTransitions.startTransition(TRANSIT_OPEN, wct, handler);
-        }
-        mPendingRecent = transition;
+    void setRecentTransition(@NonNull IBinder transition,
+            @Nullable RemoteTransition remoteTransition, @Nullable TransitionCallback callback) {
+        mPendingRecent = new TransitSession(transition, callback);
 
         if (remoteTransition != null) {
             // Wrapping it for ease-of-use (OneShot handles all the binder linking/death stuff)
@@ -219,44 +249,93 @@
 
         ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "  splitTransition "
                         + " deduced Enter recent panel");
-        return transition;
     }
 
     void mergeAnimation(IBinder transition, TransitionInfo info, SurfaceControl.Transaction t,
             IBinder mergeTarget, Transitions.TransitionFinishCallback finishCallback) {
-        if (mergeTarget == mAnimatingTransition && mActiveRemoteHandler != null) {
+        if (mergeTarget != mAnimatingTransition) return;
+
+        if (isPendingEnter(transition) && isPendingRecent(mergeTarget)) {
+            mPendingRecent.mCallback = new TransitionCallback() {
+                @Override
+                public void onTransitionFinished(WindowContainerTransaction finishWct,
+                        SurfaceControl.Transaction finishT) {
+                    // Since there's an entering transition merged, recent transition no longer
+                    // need to handle entering split screen after the transition finished.
+                }
+            };
+        }
+
+        if (mActiveRemoteHandler != null) {
             mActiveRemoteHandler.mergeAnimation(transition, info, t, mergeTarget, finishCallback);
+        } else {
+            for (int i = mAnimations.size() - 1; i >= 0; --i) {
+                final Animator anim = mAnimations.get(i);
+                mTransitions.getAnimExecutor().execute(anim::end);
+            }
+        }
+    }
+
+    boolean end() {
+        // If its remote, there's nothing we can do right now.
+        if (mActiveRemoteHandler != null) return false;
+        for (int i = mAnimations.size() - 1; i >= 0; --i) {
+            final Animator anim = mAnimations.get(i);
+            mTransitions.getAnimExecutor().execute(anim::end);
+        }
+        return true;
+    }
+
+    void onTransitionConsumed(@NonNull IBinder transition, boolean aborted,
+            @Nullable SurfaceControl.Transaction finishT) {
+        if (isPendingEnter(transition)) {
+            if (!aborted) {
+                // An enter transition got merged, appends the rest operations to finish entering
+                // split screen.
+                mStageCoordinator.finishEnterSplitScreen(finishT);
+                mPendingRemoteHandler = null;
+            }
+
+            mPendingEnter.mCallback.onTransitionConsumed(aborted);
+            mPendingEnter = null;
+            mPendingRemoteHandler = null;
+        } else if (isPendingDismiss(transition)) {
+            mPendingDismiss.mCallback.onTransitionConsumed(aborted);
+            mPendingDismiss = null;
+        } else if (isPendingRecent(transition)) {
+            mPendingRecent.mCallback.onTransitionConsumed(aborted);
+            mPendingRecent = null;
+            mPendingRemoteHandler = null;
         }
     }
 
     void onFinish(WindowContainerTransaction wct, WindowContainerTransactionCallback wctCB) {
         if (!mAnimations.isEmpty()) return;
-        if (mAnimatingTransition == mPendingEnter) {
+
+        TransitionCallback callback = null;
+        if (isPendingEnter(mAnimatingTransition)) {
+            callback = mPendingEnter.mCallback;
             mPendingEnter = null;
         }
-        if (mPendingDismiss != null && mPendingDismiss.mTransition == mAnimatingTransition) {
+        if (isPendingDismiss(mAnimatingTransition)) {
+            callback = mPendingDismiss.mCallback;
             mPendingDismiss = null;
         }
-        if (mAnimatingTransition == mPendingRecent) {
-            // If the clean-up wct is null when finishing recent transition, it indicates it's
-            // returning to home and thus no need to reorder tasks.
-            final boolean returnToHome = wct == null;
-            if (returnToHome) {
-                wct = new WindowContainerTransaction();
-            }
-            mStageCoordinator.onRecentTransitionFinished(returnToHome, wct, mFinishTransaction);
+        if (isPendingRecent(mAnimatingTransition)) {
+            callback = mPendingRecent.mCallback;
             mPendingRecent = null;
         }
+
+        if (callback != null) {
+            if (wct == null) wct = new WindowContainerTransaction();
+            callback.onTransitionFinished(wct, mFinishTransaction);
+        }
+
         mPendingRemoteHandler = null;
         mActiveRemoteHandler = null;
         mAnimatingTransition = null;
 
         mOnFinish.run();
-        if (mFinishTransaction != null) {
-            mFinishTransaction.apply();
-            mTransactionPool.release(mFinishTransaction);
-            mFinishTransaction = null;
-        }
         if (mFinishCallback != null) {
             mFinishCallback.onTransitionFinished(wct /* wct */, wctCB /* wctCB */);
             mFinishCallback = null;
@@ -353,17 +432,34 @@
                 || info.getType() == TRANSIT_SPLIT_SCREEN_PAIR_OPEN;
     }
 
+    /** Clean-up callbacks for transition. */
+    interface TransitionCallback {
+        /** Calls when the transition got consumed. */
+        default void onTransitionConsumed(boolean aborted) {}
+
+        /** Calls when the transition finished. */
+        default void onTransitionFinished(WindowContainerTransaction finishWct,
+                SurfaceControl.Transaction finishT) {}
+    }
+
+    /** Session for a transition and its clean-up callback. */
+    static class TransitSession {
+        final IBinder mTransition;
+        TransitionCallback mCallback;
+
+        TransitSession(IBinder transition, @Nullable TransitionCallback callback) {
+            mTransition = transition;
+            mCallback = callback != null ? callback : new TransitionCallback() {};
+        }
+    }
+
     /** Bundled information of dismiss transition. */
-    static class DismissTransition {
-        IBinder mTransition;
-
-        int mReason;
-
-        @SplitScreen.StageType
-        int mDismissTop;
+    static class DismissTransition extends TransitSession {
+        final int mReason;
+        final @SplitScreen.StageType int mDismissTop;
 
         DismissTransition(IBinder transition, int reason, int dismissTop) {
-            this.mTransition = transition;
+            super(transition, null /* callback */);
             this.mReason = reason;
             this.mDismissTop = dismissTop;
         }
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 30f316e..8e1ae39 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
@@ -18,19 +18,27 @@
 
 import static android.app.ActivityOptions.KEY_LAUNCH_ROOT_TASK_TOKEN;
 import static android.app.ActivityTaskManager.INVALID_TASK_ID;
+import static android.app.ComponentOptions.KEY_PENDING_INTENT_BACKGROUND_ACTIVITY_ALLOWED;
+import static android.app.ComponentOptions.KEY_PENDING_INTENT_BACKGROUND_ACTIVITY_ALLOWED_BY_PERMISSION;
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT;
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
 import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
+import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
 import static android.view.Display.DEFAULT_DISPLAY;
+import static android.view.RemoteAnimationTarget.MODE_OPENING;
 import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
 import static android.view.WindowManager.TRANSIT_CHANGE;
 import static android.view.WindowManager.TRANSIT_TO_BACK;
 import static android.view.WindowManager.TRANSIT_TO_FRONT;
 import static android.view.WindowManager.transitTypeToString;
+import static android.window.TransitionInfo.FLAG_FIRST_CUSTOM;
 import static android.window.TransitionInfo.FLAG_IS_DISPLAY;
+import static android.window.WindowContainerTransaction.HierarchyOp.HIERARCHY_OP_TYPE_REORDER;
 
 import static com.android.wm.shell.common.split.SplitLayout.PARALLAX_ALIGN_CENTER;
+import static com.android.wm.shell.common.split.SplitScreenConstants.CONTROLLED_ACTIVITY_TYPES;
+import static com.android.wm.shell.common.split.SplitScreenConstants.CONTROLLED_WINDOWING_MODES;
 import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_BOTTOM_OR_RIGHT;
 import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_TOP_OR_LEFT;
 import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_UNDEFINED;
@@ -47,7 +55,6 @@
 import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_SCREEN_LOCKED_SHOW_ON_TOP;
 import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_UNKNOWN;
 import static com.android.wm.shell.splitscreen.SplitScreenController.exitReasonToString;
-import static com.android.wm.shell.splitscreen.SplitScreenTransitions.FLAG_IS_DIVIDER_BAR;
 import static com.android.wm.shell.transition.Transitions.ENABLE_SHELL_TRANSITIONS;
 import static com.android.wm.shell.transition.Transitions.TRANSIT_SPLIT_SCREEN_OPEN_TO_SIDE;
 import static com.android.wm.shell.transition.Transitions.TRANSIT_SPLIT_SCREEN_PAIR_OPEN;
@@ -62,7 +69,6 @@
 import android.annotation.Nullable;
 import android.app.ActivityManager;
 import android.app.ActivityOptions;
-import android.app.ActivityTaskManager;
 import android.app.PendingIntent;
 import android.app.WindowConfiguration;
 import android.content.Context;
@@ -84,6 +90,8 @@
 import android.view.SurfaceControl;
 import android.view.SurfaceSession;
 import android.view.WindowManager;
+import android.widget.Toast;
+import android.window.DisplayAreaInfo;
 import android.window.RemoteTransition;
 import android.window.TransitionInfo;
 import android.window.TransitionRequestInfo;
@@ -93,7 +101,9 @@
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.logging.InstanceId;
 import com.android.internal.protolog.common.ProtoLog;
+import com.android.internal.util.ArrayUtils;
 import com.android.launcher3.icons.IconProvider;
+import com.android.wm.shell.R;
 import com.android.wm.shell.ShellTaskOrganizer;
 import com.android.wm.shell.common.DisplayController;
 import com.android.wm.shell.common.DisplayImeController;
@@ -109,16 +119,15 @@
 import com.android.wm.shell.recents.RecentTasksController;
 import com.android.wm.shell.splitscreen.SplitScreen.StageType;
 import com.android.wm.shell.splitscreen.SplitScreenController.ExitReason;
+import com.android.wm.shell.transition.LegacyTransitions;
 import com.android.wm.shell.transition.Transitions;
-import com.android.wm.shell.util.StagedSplitBounds;
+import com.android.wm.shell.util.SplitBounds;
 
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
 
-import javax.inject.Provider;
-
 /**
  * Coordinates the staging (visibility, sizing, ...) of the split-screen {@link MainStage} and
  * {@link SideStage} stages.
@@ -132,20 +141,21 @@
  * This rules are mostly implemented in {@link #onStageVisibilityChanged(StageListenerImpl)} and
  * {@link #onStageHasChildrenChanged(StageListenerImpl).}
  */
-class StageCoordinator implements SplitLayout.SplitLayoutHandler,
+public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
         DisplayController.OnDisplaysChangedListener, Transitions.TransitionHandler,
-        ShellTaskOrganizer.TaskListener {
+        ShellTaskOrganizer.TaskListener, ShellTaskOrganizer.FocusListener {
 
     private static final String TAG = StageCoordinator.class.getSimpleName();
 
+    /** Flag applied to a transition change to identify it as a divider bar for animation. */
+    public static final int FLAG_IS_DIVIDER_BAR = FLAG_FIRST_CUSTOM;
+
     private final SurfaceSession mSurfaceSession = new SurfaceSession();
 
     private final MainStage mMainStage;
     private final StageListenerImpl mMainStageListener = new StageListenerImpl();
-    private final StageTaskUnfoldController mMainUnfoldController;
     private final SideStage mSideStage;
     private final StageListenerImpl mSideStageListener = new StageListenerImpl();
-    private final StageTaskUnfoldController mSideUnfoldController;
     private final DisplayLayout mDisplayLayout;
     @SplitPosition
     private int mSideStagePosition = SPLIT_POSITION_BOTTOM_OR_RIGHT;
@@ -168,6 +178,11 @@
     private final ShellExecutor mMainExecutor;
     private final Optional<RecentTasksController> mRecentTasks;
 
+    private final Rect mTempRect1 = new Rect();
+    private final Rect mTempRect2 = new Rect();
+
+    private ActivityManager.RunningTaskInfo mFocusingTaskInfo;
+
     /**
      * A single-top root task which the split divider attached to.
      */
@@ -181,7 +196,7 @@
     private boolean mShouldUpdateRecents;
     private boolean mExitSplitScreenOnHide;
     private boolean mIsDividerRemoteAnimating;
-    private boolean mResizingSplits;
+    private boolean mIsExiting;
 
     /** The target stage to dismiss to when unlock after folded. */
     @StageType
@@ -196,18 +211,49 @@
 
                 @Override
                 public void onLeashReady(SurfaceControl leash) {
-                    mSyncQueue.runInSync(t -> applyDividerVisibility(t));
+                    // This is for avoiding divider invisible due to delay of creating so only need
+                    // to do when divider should visible case.
+                    if (mDividerVisible) {
+                        mSyncQueue.runInSync(t -> applyDividerVisibility(t));
+                    }
                 }
             };
 
+    private final SplitScreenTransitions.TransitionCallback mRecentTransitionCallback =
+            new SplitScreenTransitions.TransitionCallback() {
+        @Override
+        public void onTransitionFinished(WindowContainerTransaction finishWct,
+                SurfaceControl.Transaction finishT) {
+            // Check if the recent transition is finished by returning to the current split, so we
+            // can restore the divider bar.
+            for (int i = 0; i < finishWct.getHierarchyOps().size(); ++i) {
+                final WindowContainerTransaction.HierarchyOp op =
+                        finishWct.getHierarchyOps().get(i);
+                final IBinder container = op.getContainer();
+                if (op.getType() == HIERARCHY_OP_TYPE_REORDER && op.getToTop()
+                        && (mMainStage.containsContainer(container)
+                        || mSideStage.containsContainer(container))) {
+                    updateSurfaceBounds(mSplitLayout, finishT, false /* applyResizingOffset */);
+                    setDividerVisibility(true, finishT);
+                    return;
+                }
+            }
+
+            // Dismiss the split screen if it's not returning to split.
+            prepareExitSplitScreen(STAGE_TYPE_UNDEFINED, finishWct);
+            setSplitsVisible(false);
+            setDividerVisibility(false, finishT);
+            logExit(EXIT_REASON_UNKNOWN);
+        }
+    };
+
     StageCoordinator(Context context, int displayId, SyncTransactionQueue syncQueue,
             ShellTaskOrganizer taskOrganizer, DisplayController displayController,
             DisplayImeController displayImeController,
             DisplayInsetsController displayInsetsController, Transitions transitions,
             TransactionPool transactionPool, SplitscreenEventLogger logger,
             IconProvider iconProvider, ShellExecutor mainExecutor,
-            Optional<RecentTasksController> recentTasks,
-            Provider<Optional<StageTaskUnfoldController>> unfoldControllerProvider) {
+            Optional<RecentTasksController> recentTasks) {
         mContext = context;
         mDisplayId = displayId;
         mSyncQueue = syncQueue;
@@ -215,8 +261,7 @@
         mLogger = logger;
         mMainExecutor = mainExecutor;
         mRecentTasks = recentTasks;
-        mMainUnfoldController = unfoldControllerProvider.get().orElse(null);
-        mSideUnfoldController = unfoldControllerProvider.get().orElse(null);
+
         taskOrganizer.createRootTask(displayId, WINDOWING_MODE_FULLSCREEN, this /* listener */);
 
         mMainStage = new MainStage(
@@ -226,8 +271,7 @@
                 mMainStageListener,
                 mSyncQueue,
                 mSurfaceSession,
-                iconProvider,
-                mMainUnfoldController);
+                iconProvider);
         mSideStage = new SideStage(
                 mContext,
                 mTaskOrganizer,
@@ -235,8 +279,7 @@
                 mSideStageListener,
                 mSyncQueue,
                 mSurfaceSession,
-                iconProvider,
-                mSideUnfoldController);
+                iconProvider);
         mDisplayController = displayController;
         mDisplayImeController = displayImeController;
         mDisplayInsetsController = displayInsetsController;
@@ -250,6 +293,7 @@
         mDisplayController.addDisplayWindowListener(this);
         mDisplayLayout = new DisplayLayout(displayController.getDisplayLayout(displayId));
         transitions.addHandler(this);
+        mTaskOrganizer.addFocusListener(this);
     }
 
     @VisibleForTesting
@@ -259,8 +303,7 @@
             DisplayInsetsController displayInsetsController, SplitLayout splitLayout,
             Transitions transitions, TransactionPool transactionPool,
             SplitscreenEventLogger logger, ShellExecutor mainExecutor,
-            Optional<RecentTasksController> recentTasks,
-            Provider<Optional<StageTaskUnfoldController>> unfoldControllerProvider) {
+            Optional<RecentTasksController> recentTasks) {
         mContext = context;
         mDisplayId = displayId;
         mSyncQueue = syncQueue;
@@ -274,8 +317,6 @@
         mSplitLayout = splitLayout;
         mSplitTransitions = new SplitScreenTransitions(transactionPool, transitions,
                 this::onTransitionAnimationComplete, this);
-        mMainUnfoldController = unfoldControllerProvider.get().orElse(null);
-        mSideUnfoldController = unfoldControllerProvider.get().orElse(null);
         mLogger = logger;
         mMainExecutor = mainExecutor;
         mRecentTasks = recentTasks;
@@ -329,15 +370,23 @@
         final WindowContainerTransaction evictWct = new WindowContainerTransaction();
         targetStage.evictAllChildren(evictWct);
         targetStage.addTask(task, wct);
-        if (!evictWct.isEmpty()) {
-            wct.merge(evictWct, true /* transfer */);
-        }
 
         if (ENABLE_SHELL_TRANSITIONS) {
             prepareEnterSplitScreen(wct);
-            mSplitTransitions.startEnterTransition(TRANSIT_SPLIT_SCREEN_OPEN_TO_SIDE,
-                    wct, null, this);
+            mSplitTransitions.startEnterTransition(TRANSIT_SPLIT_SCREEN_OPEN_TO_SIDE, wct,
+                    null, this, new SplitScreenTransitions.TransitionCallback() {
+                        @Override
+                        public void onTransitionFinished(WindowContainerTransaction finishWct,
+                                SurfaceControl.Transaction finishT) {
+                            if (!evictWct.isEmpty()) {
+                                finishWct.merge(evictWct, true);
+                            }
+                        }
+                    });
         } else {
+            if (!evictWct.isEmpty()) {
+                wct.merge(evictWct, true /* transfer */);
+            }
             mTaskOrganizer.applyTransaction(wct);
         }
         return true;
@@ -357,6 +406,102 @@
         return result;
     }
 
+    /** Launches an activity into split. */
+    void startIntent(PendingIntent intent, Intent fillInIntent, @SplitPosition int position,
+            @Nullable Bundle options) {
+        final WindowContainerTransaction wct = new WindowContainerTransaction();
+        final WindowContainerTransaction evictWct = new WindowContainerTransaction();
+        prepareEvictChildTasks(position, evictWct);
+
+        options = resolveStartStage(STAGE_TYPE_UNDEFINED, position, options, null /* wct */);
+        wct.sendPendingIntent(intent, fillInIntent, options);
+        prepareEnterSplitScreen(wct, null /* taskInfo */, position);
+
+        mSplitTransitions.startEnterTransition(TRANSIT_SPLIT_SCREEN_OPEN_TO_SIDE, wct, null, this,
+                new SplitScreenTransitions.TransitionCallback() {
+                    @Override
+                    public void onTransitionConsumed(boolean aborted) {
+                        // Switch the split position if launching as MULTIPLE_TASK failed.
+                        if (aborted
+                                && (fillInIntent.getFlags() & FLAG_ACTIVITY_MULTIPLE_TASK) != 0) {
+                            setSideStagePositionAnimated(
+                                    SplitLayout.reversePosition(mSideStagePosition));
+                        }
+                    }
+
+                    @Override
+                    public void onTransitionFinished(WindowContainerTransaction finishWct,
+                            SurfaceControl.Transaction finishT) {
+                        if (!evictWct.isEmpty()) {
+                            finishWct.merge(evictWct, true);
+                        }
+                    }
+                });
+    }
+
+    /** Launches an activity into split by legacy transition. */
+    void startIntentLegacy(PendingIntent intent, Intent fillInIntent,
+            @SplitPosition int position, @androidx.annotation.Nullable Bundle options) {
+        final WindowContainerTransaction evictWct = new WindowContainerTransaction();
+        prepareEvictChildTasks(position, evictWct);
+
+        LegacyTransitions.ILegacyTransition transition = new LegacyTransitions.ILegacyTransition() {
+            @Override
+            public void onAnimationStart(int transit, RemoteAnimationTarget[] apps,
+                    RemoteAnimationTarget[] wallpapers, RemoteAnimationTarget[] nonApps,
+                    IRemoteAnimationFinishedCallback finishedCallback,
+                    SurfaceControl.Transaction t) {
+                if (apps == null || apps.length == 0) {
+                    if (mMainStage.getChildCount() == 0 || mSideStage.getChildCount() == 0) {
+                        mMainExecutor.execute(() ->
+                                exitSplitScreen(mMainStage.getChildCount() == 0
+                                        ? mSideStage : mMainStage, EXIT_REASON_UNKNOWN));
+                    } else {
+                        // Switch the split position if launching as MULTIPLE_TASK failed.
+                        if ((fillInIntent.getFlags() & FLAG_ACTIVITY_MULTIPLE_TASK) != 0) {
+                            setSideStagePosition(SplitLayout.reversePosition(
+                                    getSideStagePosition()), null);
+                        }
+                    }
+
+                    // Do nothing when the animation was cancelled.
+                    t.apply();
+                    return;
+                }
+
+                for (int i = 0; i < apps.length; ++i) {
+                    if (apps[i].mode == MODE_OPENING) {
+                        t.show(apps[i].leash);
+                    }
+                }
+                t.apply();
+
+                if (finishedCallback != null) {
+                    try {
+                        finishedCallback.onAnimationFinished();
+                    } catch (RemoteException e) {
+                        Slog.e(TAG, "Error finishing legacy transition: ", e);
+                    }
+                }
+
+                mSyncQueue.queue(evictWct);
+            }
+        };
+
+        final WindowContainerTransaction wct = new WindowContainerTransaction();
+        options = resolveStartStage(STAGE_TYPE_UNDEFINED, position, options, wct);
+
+        // If split still not active, apply windows bounds first to avoid surface reset to
+        // wrong pos by SurfaceAnimator from wms.
+        // TODO(b/223325631): check  is it still necessary after improve enter transition done.
+        if (!mMainStage.isActive()) {
+            updateWindowBounds(mSplitLayout, wct);
+        }
+
+        wct.sendPendingIntent(intent, fillInIntent, options);
+        mSyncQueue.queue(transition, WindowManager.TRANSIT_OPEN, wct);
+    }
+
     /** Starts 2 tasks in one transition. */
     void startTasks(int mainTaskId, @Nullable Bundle mainOptions, int sideTaskId,
             @Nullable Bundle sideOptions, @SplitPosition int sidePosition, float splitRatio,
@@ -366,10 +511,15 @@
         sideOptions = sideOptions != null ? sideOptions : new Bundle();
         setSideStagePosition(sidePosition, wct);
 
+        if (mMainStage.isActive()) {
+            mMainStage.evictAllChildren(wct);
+            mSideStage.evictAllChildren(wct);
+        } else {
+            // 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.
+            mMainStage.activate(wct, false /* reparent */);
+        }
         mSplitLayout.setDivideRatio(splitRatio);
-        // 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.
-        mMainStage.activate(wct, false /* reparent */);
         updateWindowBounds(mSplitLayout, wct);
         wct.reorder(mRootTaskInfo.token, true);
 
@@ -382,7 +532,7 @@
         wct.startTask(sideTaskId, sideOptions);
 
         mSplitTransitions.startEnterTransition(
-                TRANSIT_SPLIT_SCREEN_PAIR_OPEN, wct, remoteTransition, this);
+                TRANSIT_SPLIT_SCREEN_PAIR_OPEN, wct, remoteTransition, this, null);
     }
 
     /** Starts 2 tasks in one legacy transition. */
@@ -436,18 +586,12 @@
                         new IRemoteAnimationFinishedCallback.Stub() {
                             @Override
                             public void onAnimationFinished() throws RemoteException {
-                                onRemoteAnimationFinishedOrCancelled(evictWct);
+                                onRemoteAnimationFinishedOrCancelled(false /* cancel */, evictWct);
                                 finishedCallback.onAnimationFinished();
                             }
                         };
+                Transitions.setRunningRemoteTransitionDelegate(adapter.getCallingApplication());
                 try {
-                    try {
-                        ActivityTaskManager.getService().setRunningRemoteTransitionDelegate(
-                                adapter.getCallingApplication());
-                    } catch (SecurityException e) {
-                        Slog.e(TAG, "Unable to boost animation thread. This should only happen"
-                                + " during unit tests");
-                    }
                     adapter.getRunner().onAnimationStart(transit, apps, wallpapers,
                             augmentedNonApps, wrapCallback);
                 } catch (RemoteException e) {
@@ -457,7 +601,7 @@
 
             @Override
             public void onAnimationCancelled(boolean isKeyguardOccluded) {
-                onRemoteAnimationFinishedOrCancelled(evictWct);
+                onRemoteAnimationFinishedOrCancelled(true /* cancel */, evictWct);
                 try {
                     adapter.getRunner().onAnimationCancelled(isKeyguardOccluded);
                 } catch (RemoteException e) {
@@ -507,13 +651,14 @@
         });
     }
 
-    private void onRemoteAnimationFinishedOrCancelled(WindowContainerTransaction evictWct) {
+    private void onRemoteAnimationFinishedOrCancelled(boolean cancel,
+            WindowContainerTransaction evictWct) {
         mIsDividerRemoteAnimating = false;
         mShouldUpdateRecents = true;
         // If any stage has no child after animation finished, it means that split will display
         // nothing, such status will happen if task and intent is same app but not support
-        // multi-instagce, we should exit split and expand that app as full screen.
-        if (mMainStage.getChildCount() == 0 || mSideStage.getChildCount() == 0) {
+        // multi-instance, we should exit split and expand that app as full screen.
+        if (!cancel && (mMainStage.getChildCount() == 0 || mSideStage.getChildCount() == 0)) {
             mMainExecutor.execute(() ->
                     exitSplitScreen(mMainStage.getChildCount() == 0
                         ? mSideStage : mMainStage, EXIT_REASON_UNKNOWN));
@@ -534,6 +679,15 @@
         }
     }
 
+    void prepareEvictNonOpeningChildTasks(@SplitPosition int position, RemoteAnimationTarget[] apps,
+            WindowContainerTransaction wct) {
+        if (position == mSideStagePosition) {
+            mSideStage.evictNonOpeningChildren(apps, wct);
+        } else {
+            mMainStage.evictNonOpeningChildren(apps, wct);
+        }
+    }
+
     void prepareEvictInvisibleChildTasks(WindowContainerTransaction wct) {
         mMainStage.evictInvisibleChildren(wct);
         mSideStage.evictInvisibleChildren(wct);
@@ -603,11 +757,28 @@
     }
 
     int getTaskId(@SplitPosition int splitPosition) {
-        if (mSideStagePosition == splitPosition) {
-            return mSideStage.getTopVisibleChildTaskId();
-        } else {
-            return mMainStage.getTopVisibleChildTaskId();
+        if (splitPosition == SPLIT_POSITION_UNDEFINED) {
+            return INVALID_TASK_ID;
         }
+
+        return mSideStagePosition == splitPosition
+                ? mSideStage.getTopVisibleChildTaskId()
+                : mMainStage.getTopVisibleChildTaskId();
+    }
+
+    void setSideStagePositionAnimated(@SplitPosition int sideStagePosition) {
+        if (mSideStagePosition == sideStagePosition) return;
+        SurfaceControl.Transaction t = mTransactionPool.acquire();
+        final StageTaskListener topLeftStage =
+                mSideStagePosition == SPLIT_POSITION_TOP_OR_LEFT ? mSideStage : mMainStage;
+        final StageTaskListener bottomRightStage =
+                mSideStagePosition == SPLIT_POSITION_TOP_OR_LEFT ? mMainStage : mSideStage;
+        mSplitLayout.splitSwitching(t, topLeftStage.mRootLeash, bottomRightStage.mRootLeash,
+                () -> {
+                    setSideStagePosition(SplitLayout.reversePosition(mSideStagePosition),
+                            null /* wct */);
+                    mTransactionPool.release(t);
+                });
     }
 
     void setSideStagePosition(@SplitPosition int sideStagePosition,
@@ -627,7 +798,7 @@
                 onLayoutSizeChanged(mSplitLayout);
             } else {
                 updateWindowBounds(mSplitLayout, wct);
-                updateUnfoldBounds();
+                sendOnBoundsChanged();
             }
         }
     }
@@ -642,7 +813,7 @@
             if (ENABLE_SHELL_TRANSITIONS) {
                 final WindowContainerTransaction wct = new WindowContainerTransaction();
                 prepareExitSplitScreen(mTopStageAfterFoldDismiss, wct);
-                mSplitTransitions.startDismissTransition(null /* transition */, wct, this,
+                mSplitTransitions.startDismissTransition(wct, this,
                         mTopStageAfterFoldDismiss, EXIT_REASON_DEVICE_FOLDED);
             } else {
                 exitSplitScreen(
@@ -675,8 +846,8 @@
                 final int dismissTop = mainStageVisible ? STAGE_TYPE_MAIN : STAGE_TYPE_SIDE;
                 final WindowContainerTransaction wct = new WindowContainerTransaction();
                 prepareExitSplitScreen(dismissTop, wct);
-                mSplitTransitions.startDismissTransition(null /* transition */, wct, this,
-                        dismissTop, EXIT_REASON_SCREEN_LOCKED_SHOW_ON_TOP);
+                mSplitTransitions.startDismissTransition(wct, this, dismissTop,
+                        EXIT_REASON_SCREEN_LOCKED_SHOW_ON_TOP);
             }
         }
     }
@@ -712,7 +883,7 @@
 
     private void applyExitSplitScreen(@Nullable StageTaskListener childrenToTop,
             WindowContainerTransaction wct, @ExitReason int exitReason) {
-        if (!mMainStage.isActive()) return;
+        if (!mMainStage.isActive() || mIsExiting) return;
 
         mRecentTasks.ifPresent(recentTasks -> {
             // Notify recents if we are exiting in a way that breaks the pair, and disable further
@@ -724,25 +895,46 @@
         });
         mShouldUpdateRecents = false;
 
-        // When the exit split-screen is caused by one of the task enters auto pip,
-        // we want the tasks to be put to bottom instead of top, otherwise it will end up
-        // a fullscreen plus a pinned task instead of pinned only at the end of the transition.
-        final boolean fromEnteringPip = exitReason == EXIT_REASON_CHILD_TASK_ENTER_PIP;
-        mSideStage.removeAllTasks(wct, !fromEnteringPip && mSideStage == childrenToTop);
-        mMainStage.deactivate(wct, !fromEnteringPip && mMainStage == childrenToTop);
-        wct.reorder(mRootTaskInfo.token, false /* onTop */);
-        mTaskOrganizer.applyTransaction(wct);
+        if (childrenToTop == null) {
+            mSideStage.removeAllTasks(wct, false /* toTop */);
+            mMainStage.deactivate(wct, false /* toTop */);
+            wct.reorder(mRootTaskInfo.token, false /* onTop */);
+            onTransitionAnimationComplete();
+        } else {
+            // Expand to top side split as full screen for fading out decor animation and dismiss
+            // another side split(Moving its children to bottom).
+            mIsExiting = true;
+            final StageTaskListener tempFullStage = childrenToTop;
+            final StageTaskListener dismissStage = mMainStage == childrenToTop
+                    ? mSideStage : mMainStage;
+            tempFullStage.resetBounds(wct);
+            wct.setSmallestScreenWidthDp(tempFullStage.mRootTaskInfo.token,
+                    mRootTaskInfo.configuration.smallestScreenWidthDp);
+            dismissStage.dismiss(wct, false /* toTop */);
+        }
+        mSyncQueue.queue(wct);
         mSyncQueue.runInSync(t -> {
-            setResizingSplits(false /* resizing */);
             t.setWindowCrop(mMainStage.mRootLeash, null)
                     .setWindowCrop(mSideStage.mRootLeash, null);
+            t.setPosition(mMainStage.mRootLeash, 0, 0)
+                    .setPosition(mSideStage.mRootLeash, 0, 0);
+            t.hide(mMainStage.mDimLayer).hide(mSideStage.mDimLayer);
             setDividerVisibility(false, t);
+
+            // In this case, exit still under progress, fade out the split decor after first WCT
+            // done and do remaining WCT after animation finished.
+            if (childrenToTop != null) {
+                childrenToTop.fadeOutDecor(() -> {
+                    WindowContainerTransaction finishedWCT = new WindowContainerTransaction();
+                    mIsExiting = false;
+                    childrenToTop.dismiss(finishedWCT, true /* toTop */);
+                    finishedWCT.reorder(mRootTaskInfo.token, false /* toTop */);
+                    mTaskOrganizer.applyTransaction(finishedWCT);
+                    onTransitionAnimationComplete();
+                });
+            }
         });
 
-        // Hide divider and reset its position.
-        mSplitLayout.resetDividerPosition();
-        mSplitLayout.release();
-        mTopStageAfterFoldDismiss = STAGE_TYPE_UNDEFINED;
         Slog.i(TAG, "applyExitSplitScreen, reason = " + exitReasonToString(exitReason));
         // Log the exit
         if (childrenToTop != null) {
@@ -812,6 +1004,7 @@
         mSplitLayout.init();
         setDividerVisibility(true, t);
         updateSurfaceBounds(mSplitLayout, t, false /* applyResizingOffset */);
+        t.show(mRootTaskLeash);
         setSplitsVisible(true);
         mShouldUpdateRecents = true;
         updateRecentTasksSplitPair();
@@ -840,6 +1033,9 @@
 
     private void addActivityOptions(Bundle opts, StageTaskListener stage) {
         opts.putParcelable(KEY_LAUNCH_ROOT_TASK_TOKEN, stage.mRootTaskInfo.token);
+        // Put BAL flags to avoid activity start aborted.
+        opts.putBoolean(KEY_PENDING_INTENT_BACKGROUND_ACTIVITY_ALLOWED, true);
+        opts.putBoolean(KEY_PENDING_INTENT_BACKGROUND_ACTIVITY_ALLOWED_BY_PERMISSION, true);
     }
 
     void updateActivityOptions(Bundle opts, @SplitPosition int position) {
@@ -860,6 +1056,10 @@
         listener.onStagePositionChanged(STAGE_TYPE_MAIN, getMainStagePosition());
         listener.onStagePositionChanged(STAGE_TYPE_SIDE, getSideStagePosition());
         listener.onSplitVisibilityChanged(isSplitScreenVisible());
+        if (mSplitLayout != null) {
+            listener.onSplitBoundsChanged(mSplitLayout.getRootBounds(), getMainStageBounds(),
+                    getSideStageBounds());
+        }
         mSideStage.onSplitScreenListenerRegistered(listener, STAGE_TYPE_SIDE);
         mMainStage.onSplitScreenListenerRegistered(listener, STAGE_TYPE_MAIN);
     }
@@ -872,6 +1072,14 @@
         }
     }
 
+    private void sendOnBoundsChanged() {
+        if (mSplitLayout == null) return;
+        for (int i = mListeners.size() - 1; i >= 0; --i) {
+            mListeners.get(i).onSplitBoundsChanged(mSplitLayout.getRootBounds(),
+                    getMainStageBounds(), getSideStageBounds());
+        }
+    }
+
     private void onStageChildTaskStatusChanged(StageListenerImpl stageListener, int taskId,
             boolean present, boolean visible) {
         int stage;
@@ -897,9 +1105,11 @@
         }
     }
 
-    private void onStageChildTaskEnterPip(StageListenerImpl stageListener, int taskId) {
-        exitSplitScreen(stageListener == mMainStageListener ? mMainStage : mSideStage,
-                EXIT_REASON_CHILD_TASK_ENTER_PIP);
+    private void onStageChildTaskEnterPip() {
+        // When the exit split-screen is caused by one of the task enters auto pip,
+        // we want both tasks to be put to bottom instead of top, otherwise it will end up
+        // a fullscreen plus a pinned task instead of pinned only at the end of the transition.
+        exitSplitScreen(null, EXIT_REASON_CHILD_TASK_ENTER_PIP);
     }
 
     private void updateRecentTasksSplitPair() {
@@ -921,7 +1131,7 @@
                 leftTopTaskId = mainStageTopTaskId;
                 rightBottomTaskId = sideStageTopTaskId;
             }
-            StagedSplitBounds splitBounds = new StagedSplitBounds(topLeftBounds, bottomRightBounds,
+            SplitBounds splitBounds = new SplitBounds(topLeftBounds, bottomRightBounds,
                     leftTopTaskId, rightBottomTaskId);
             if (mainStageTopTaskId != INVALID_TASK_ID && sideStageTopTaskId != INVALID_TASK_ID) {
                 // Update the pair for the top tasks
@@ -935,12 +1145,7 @@
             final SplitScreen.SplitScreenListener l = mListeners.get(i);
             l.onSplitVisibilityChanged(mDividerVisible);
         }
-
-        if (mMainUnfoldController != null && mSideUnfoldController != null) {
-            mMainUnfoldController.onSplitVisibilityChanged(mDividerVisible);
-            mSideUnfoldController.onSplitVisibilityChanged(mDividerVisible);
-            updateUnfoldBounds();
-        }
+        sendOnBoundsChanged();
     }
 
     @Override
@@ -961,11 +1166,6 @@
             mDisplayInsetsController.addInsetsChangedListener(mDisplayId, mSplitLayout);
         }
 
-        if (mMainUnfoldController != null && mSideUnfoldController != null) {
-            mMainUnfoldController.init();
-            mSideUnfoldController.init();
-        }
-
         onRootTaskAppeared();
     }
 
@@ -979,13 +1179,8 @@
         mRootTaskInfo = taskInfo;
         if (mSplitLayout != null
                 && mSplitLayout.updateConfiguration(mRootTaskInfo.configuration)
-                && mMainStage.isActive()) {
-            // TODO(b/204925795): With Shell transition, We are handling split bounds rotation at
-            //  onRotateDisplay. But still need to handle unfold case.
-            if (ENABLE_SHELL_TRANSITIONS) {
-                updateUnfoldBounds();
-                return;
-            }
+                && mMainStage.isActive()
+                && !ENABLE_SHELL_TRANSITIONS) {
             // Clear the divider remote animating flag as the divider will be re-rendered to apply
             // the new rotation config.
             mIsDividerRemoteAnimating = false;
@@ -1009,6 +1204,7 @@
         }
 
         mRootTaskInfo = null;
+        mRootTaskLeash = null;
     }
 
 
@@ -1025,8 +1221,7 @@
         wct.reparent(mMainStage.mRootTaskInfo.token, mRootTaskInfo.token, true);
         wct.reparent(mSideStage.mRootTaskInfo.token, mRootTaskInfo.token, true);
         // Make the stages adjacent to each other so they occlude what's behind them.
-        wct.setAdjacentRoots(mMainStage.mRootTaskInfo.token, mSideStage.mRootTaskInfo.token,
-                true /* moveTogether */);
+        wct.setAdjacentRoots(mMainStage.mRootTaskInfo.token, mSideStage.mRootTaskInfo.token);
         wct.setLaunchAdjacentFlagRoot(mSideStage.mRootTaskInfo.token);
         mTaskOrganizer.applyTransaction(wct);
     }
@@ -1136,12 +1331,11 @@
                         mDividerFadeInAnimator.cancel();
                         return;
                     }
+                    mSplitLayout.getRefDividerBounds(mTempRect1);
                     transaction.show(dividerLeash);
                     transaction.setAlpha(dividerLeash, 0);
                     transaction.setLayer(dividerLeash, Integer.MAX_VALUE);
-                    transaction.setPosition(dividerLeash,
-                                    mSplitLayout.getRefDividerBounds().left,
-                                    mSplitLayout.getRefDividerBounds().top);
+                    transaction.setPosition(dividerLeash, mTempRect1.left, mTempRect1.top);
                     transaction.apply();
                 }
 
@@ -1161,21 +1355,42 @@
     private void onStageHasChildrenChanged(StageListenerImpl stageListener) {
         final boolean hasChildren = stageListener.mHasChildren;
         final boolean isSideStage = stageListener == mSideStageListener;
-        if (!hasChildren) {
+        if (!hasChildren && !mIsExiting && mMainStage.isActive()) {
             if (isSideStage && mMainStageListener.mVisible) {
                 // Exit to main stage if side stage no longer has children.
-                exitSplitScreen(mMainStage, EXIT_REASON_APP_FINISHED);
+                if (ENABLE_SHELL_TRANSITIONS) {
+                    exitSplitScreen(mMainStage, EXIT_REASON_APP_FINISHED);
+                } else {
+                    mSplitLayout.flingDividerToDismiss(
+                            mSideStagePosition == SPLIT_POSITION_BOTTOM_OR_RIGHT,
+                            EXIT_REASON_APP_FINISHED);
+                }
             } else if (!isSideStage && mSideStageListener.mVisible) {
                 // Exit to side stage if main stage no longer has children.
-                exitSplitScreen(mSideStage, EXIT_REASON_APP_FINISHED);
+                if (ENABLE_SHELL_TRANSITIONS) {
+                    exitSplitScreen(mSideStage, EXIT_REASON_APP_FINISHED);
+                } else {
+                    mSplitLayout.flingDividerToDismiss(
+                            mSideStagePosition != SPLIT_POSITION_BOTTOM_OR_RIGHT,
+                            EXIT_REASON_APP_FINISHED);
+                }
             }
-        } else if (isSideStage && !mMainStage.isActive()) {
-            final WindowContainerTransaction wct = new WindowContainerTransaction();
-            mSplitLayout.init();
-            prepareEnterSplitScreen(wct);
-            mSyncQueue.queue(wct);
-            mSyncQueue.runInSync(t ->
-                    updateSurfaceBounds(mSplitLayout, t, false /* applyResizingOffset */));
+        } else if (isSideStage && hasChildren && !mMainStage.isActive()) {
+            if (mFocusingTaskInfo != null && !isValidToEnterSplitScreen(mFocusingTaskInfo)) {
+                final WindowContainerTransaction wct = new WindowContainerTransaction();
+                mSideStage.removeAllTasks(wct, true);
+                wct.reorder(mRootTaskInfo.token, false /* onTop */);
+                mTaskOrganizer.applyTransaction(wct);
+                Slog.i(TAG, "cancel entering split screen, reason = "
+                        + exitReasonToString(EXIT_REASON_APP_DOES_NOT_SUPPORT_MULTIWINDOW));
+            } else {
+                final WindowContainerTransaction wct = new WindowContainerTransaction();
+                mSplitLayout.init();
+                prepareEnterSplitScreen(wct);
+                mSyncQueue.queue(wct);
+                mSyncQueue.runInSync(t ->
+                        updateSurfaceBounds(mSplitLayout, t, false /* applyResizingOffset */));
+            }
         }
         if (mMainStageListener.mHasChildren && mSideStageListener.mHasChildren) {
             mShouldUpdateRecents = true;
@@ -1190,27 +1405,43 @@
         }
     }
 
+    boolean isValidToEnterSplitScreen(@NonNull ActivityManager.RunningTaskInfo taskInfo) {
+        return taskInfo.supportsMultiWindow
+                && ArrayUtils.contains(CONTROLLED_ACTIVITY_TYPES, taskInfo.getActivityType())
+                && ArrayUtils.contains(CONTROLLED_WINDOWING_MODES, taskInfo.getWindowingMode());
+    }
+
+    ActivityManager.RunningTaskInfo getFocusingTaskInfo() {
+        return mFocusingTaskInfo;
+    }
+
     @Override
-    public void onSnappedToDismiss(boolean bottomOrRight) {
+    public void onFocusTaskChanged(ActivityManager.RunningTaskInfo taskInfo) {
+        mFocusingTaskInfo = taskInfo;
+    }
+
+    @Override
+    public void onSnappedToDismiss(boolean bottomOrRight, int reason) {
         final boolean mainStageToTop =
                 bottomOrRight ? mSideStagePosition == SPLIT_POSITION_BOTTOM_OR_RIGHT
                         : mSideStagePosition == SPLIT_POSITION_TOP_OR_LEFT;
         if (!ENABLE_SHELL_TRANSITIONS) {
-            exitSplitScreen(mainStageToTop ? mMainStage : mSideStage, EXIT_REASON_DRAG_DIVIDER);
+            exitSplitScreen(mainStageToTop ? mMainStage : mSideStage, reason);
             return;
         }
 
-        setResizingSplits(false /* resizing */);
         final int dismissTop = mainStageToTop ? STAGE_TYPE_MAIN : STAGE_TYPE_SIDE;
         final WindowContainerTransaction wct = new WindowContainerTransaction();
         prepareExitSplitScreen(dismissTop, wct);
-        mSplitTransitions.startDismissTransition(
-                null /* transition */, wct, this, dismissTop, EXIT_REASON_DRAG_DIVIDER);
+        if (mRootTaskInfo != null) {
+            wct.setDoNotPip(mRootTaskInfo.token);
+        }
+        mSplitTransitions.startDismissTransition(wct, this, dismissTop, EXIT_REASON_DRAG_DIVIDER);
     }
 
     @Override
     public void onDoubleTappedDivider() {
-        setSideStagePosition(SplitLayout.reversePosition(mSideStagePosition), null /* wct */);
+        setSideStagePositionAnimated(SplitLayout.reversePosition(mSideStagePosition));
         mLogger.logSwap(getMainStagePosition(), mMainStage.getTopChildTaskUid(),
                 getSideStagePosition(), mSideStage.getTopChildTaskUid(),
                 mSplitLayout.isLandscape());
@@ -1229,10 +1460,11 @@
     public void onLayoutSizeChanging(SplitLayout layout) {
         final SurfaceControl.Transaction t = mTransactionPool.acquire();
         t.setFrameTimelineVsync(Choreographer.getInstance().getVsyncId());
-        setResizingSplits(true /* resizing */);
         updateSurfaceBounds(layout, t, true /* applyResizingOffset */);
-        mMainStage.onResizing(getMainStageBounds(), t);
-        mSideStage.onResizing(getSideStageBounds(), t);
+        getMainStageBounds(mTempRect1);
+        getSideStageBounds(mTempRect2);
+        mMainStage.onResizing(mTempRect1, mTempRect2, t);
+        mSideStage.onResizing(mTempRect2, mTempRect1, t);
         t.apply();
         mTransactionPool.release(t);
     }
@@ -1241,10 +1473,9 @@
     public void onLayoutSizeChanged(SplitLayout layout) {
         final WindowContainerTransaction wct = new WindowContainerTransaction();
         updateWindowBounds(layout, wct);
-        updateUnfoldBounds();
+        sendOnBoundsChanged();
         mSyncQueue.queue(wct);
         mSyncQueue.runInSync(t -> {
-            setResizingSplits(false /* resizing */);
             updateSurfaceBounds(layout, t, false /* applyResizingOffset */);
             mMainStage.onResized(t);
             mSideStage.onResized(t);
@@ -1252,15 +1483,6 @@
         mLogger.logResize(mSplitLayout.getDividerPositionAsFraction());
     }
 
-    private void updateUnfoldBounds() {
-        if (mMainUnfoldController != null && mSideUnfoldController != null) {
-            mMainUnfoldController.onLayoutChanged(getMainStageBounds(), getMainStagePosition(),
-                    isLandscape());
-            mSideUnfoldController.onLayoutChanged(getSideStageBounds(), getSideStagePosition(),
-                    isLandscape());
-        }
-    }
-
     private boolean isLandscape() {
         return mSplitLayout.isLandscape();
     }
@@ -1288,16 +1510,6 @@
                 applyResizingOffset);
     }
 
-    void setResizingSplits(boolean resizing) {
-        if (resizing == mResizingSplits) return;
-        try {
-            ActivityTaskManager.getService().setSplitScreenResizing(resizing);
-            mResizingSplits = resizing;
-        } catch (RemoteException e) {
-            Slog.w(TAG, "Error calling setSplitScreenResizing", e);
-        }
-    }
-
     @Override
     public int getSplitItemPosition(WindowContainerToken token) {
         if (token == null) {
@@ -1329,7 +1541,7 @@
         if (displayId != DEFAULT_DISPLAY) {
             return;
         }
-        mDisplayController.addDisplayChangingController(this::onRotateDisplay);
+        mDisplayController.addDisplayChangingController(this::onDisplayChange);
     }
 
     @Override
@@ -1340,16 +1552,22 @@
         mDisplayLayout.set(mDisplayController.getDisplayLayout(displayId));
     }
 
-    private void onRotateDisplay(int displayId, int fromRotation, int toRotation,
-            WindowContainerTransaction wct) {
+    void updateSurfaces(SurfaceControl.Transaction transaction) {
+        updateSurfaceBounds(mSplitLayout, transaction, /* applyResizingOffset */ false);
+        mSplitLayout.update(transaction);
+    }
+
+    private void onDisplayChange(int displayId, int fromRotation, int toRotation,
+            @Nullable DisplayAreaInfo newDisplayAreaInfo, WindowContainerTransaction wct) {
         if (!mMainStage.isActive()) return;
-        // Only do this when shell transition
-        if (!ENABLE_SHELL_TRANSITIONS) return;
 
         mDisplayLayout.rotateTo(mContext.getResources(), toRotation);
         mSplitLayout.rotateTo(toRotation, mDisplayLayout.stableInsets());
+        if (newDisplayAreaInfo != null) {
+            mSplitLayout.updateConfiguration(newDisplayAreaInfo.configuration);
+        }
         updateWindowBounds(mSplitLayout, wct);
-        updateUnfoldBounds();
+        sendOnBoundsChanged();
     }
 
     private void onFoldedStateChanged(boolean folded) {
@@ -1373,6 +1591,22 @@
                 ? mSplitLayout.getBounds2() : mSplitLayout.getBounds1();
     }
 
+    private void getSideStageBounds(Rect rect) {
+        if (mSideStagePosition == SPLIT_POSITION_TOP_OR_LEFT) {
+            mSplitLayout.getBounds1(rect);
+        } else {
+            mSplitLayout.getBounds2(rect);
+        }
+    }
+
+    private void getMainStageBounds(Rect rect) {
+        if (mSideStagePosition == SPLIT_POSITION_TOP_OR_LEFT) {
+            mSplitLayout.getBounds2(rect);
+        } else {
+            mSplitLayout.getBounds1(rect);
+        }
+    }
+
     /**
      * Get the stage that should contain this `taskInfo`. The stage doesn't necessarily contain
      * this task (yet) so this can also be used to identify which stage to put a task into.
@@ -1400,7 +1634,8 @@
             @Nullable TransitionRequestInfo request) {
         final ActivityManager.RunningTaskInfo triggerTask = request.getTriggerTask();
         if (triggerTask == null) {
-            if (mMainStage.isActive()) {
+            if (isSplitActive()) {
+                // Check if the display is rotating.
                 final TransitionRequestInfo.DisplayChange displayChange =
                         request.getDisplayChange();
                 if (request.getType() == TRANSIT_CHANGE && displayChange != null
@@ -1427,7 +1662,7 @@
             mRecentTasks.ifPresent(recentTasks -> recentTasks.removeSplitPair(triggerTask.taskId));
         }
 
-        if (mMainStage.isActive()) {
+        if (isSplitActive()) {
             // Try to handle everything while in split-screen, so return a WCT even if it's empty.
             ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "  split is active so using split"
                             + "Transition to handle request. triggerTask=%d type=%s mainChildren=%d"
@@ -1442,7 +1677,7 @@
                     int dismissTop = getStageType(stage) == STAGE_TYPE_MAIN ? STAGE_TYPE_SIDE
                             : STAGE_TYPE_MAIN;
                     prepareExitSplitScreen(dismissTop, out);
-                    mSplitTransitions.startDismissTransition(transition, out, this, dismissTop,
+                    mSplitTransitions.setDismissTransition(transition, dismissTop,
                             EXIT_REASON_APP_FINISHED);
                 }
             } else if (isOpening && inFullscreen) {
@@ -1452,13 +1687,14 @@
                 } else if (activityType == ACTIVITY_TYPE_HOME
                         || activityType == ACTIVITY_TYPE_RECENTS) {
                     // Enter overview panel, so start recent transition.
-                    mSplitTransitions.startRecentTransition(transition, out, this,
-                            request.getRemoteTransition());
-                } else {
-                    // Occluded by the other fullscreen task, so dismiss both.
+                    mSplitTransitions.setRecentTransition(transition, request.getRemoteTransition(),
+                            mRecentTransitionCallback);
+                } else if (mSplitTransitions.mPendingRecent == null) {
+                    // If split-task is not controlled by recents animation
+                    // and occluded by the other fullscreen task, dismiss both.
                     prepareExitSplitScreen(STAGE_TYPE_UNDEFINED, out);
-                    mSplitTransitions.startDismissTransition(transition, out, this,
-                            STAGE_TYPE_UNDEFINED, EXIT_REASON_UNKNOWN);
+                    mSplitTransitions.setDismissTransition(
+                            transition, STAGE_TYPE_UNDEFINED, EXIT_REASON_UNKNOWN);
                 }
             }
         } else {
@@ -1466,12 +1702,40 @@
                 // One task is appearing into split, prepare to enter split screen.
                 out = new WindowContainerTransaction();
                 prepareEnterSplitScreen(out);
-                mSplitTransitions.mPendingEnter = transition;
+                mSplitTransitions.setEnterTransition(
+                        transition, request.getRemoteTransition(), null /* callback */);
             }
         }
         return out;
     }
 
+    /**
+     * This is used for mixed scenarios. For such scenarios, just make sure to include exiting
+     * split or entering split when appropriate.
+     */
+    public void addEnterOrExitIfNeeded(@Nullable TransitionRequestInfo request,
+            @NonNull WindowContainerTransaction outWCT) {
+        final ActivityManager.RunningTaskInfo triggerTask = request.getTriggerTask();
+        if (triggerTask != null && triggerTask.displayId != mDisplayId) {
+            // Skip handling task on the other display.
+            return;
+        }
+        final @WindowManager.TransitionType int type = request.getType();
+        if (isSplitActive() && !isOpeningType(type)
+                    && (mMainStage.getChildCount() == 0 || mSideStage.getChildCount() == 0)) {
+            ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "  One of the splits became "
+                            + "empty during a mixed transition (one not handled by split),"
+                            + " so make sure split-screen state is cleaned-up. "
+                            + "mainStageCount=%d sideStageCount=%d", mMainStage.getChildCount(),
+                    mSideStage.getChildCount());
+            prepareExitSplitScreen(STAGE_TYPE_UNDEFINED, outWCT);
+        }
+    }
+
+    public boolean isSplitActive() {
+        return mMainStage.isActive();
+    }
+
     @Override
     public void mergeAnimation(IBinder transition, TransitionInfo info,
             SurfaceControl.Transaction t, IBinder mergeTarget,
@@ -1479,17 +1743,15 @@
         mSplitTransitions.mergeAnimation(transition, info, t, mergeTarget, finishCallback);
     }
 
+    /** Jump the current transition animation to the end. */
+    public boolean end() {
+        return mSplitTransitions.end();
+    }
+
     @Override
-    public void onTransitionMerged(@NonNull IBinder transition) {
-        // Once the pending enter transition got merged, make sure to bring divider bar visible and
-        // clear the pending transition from cache to prevent mess-up the following state.
-        if (transition == mSplitTransitions.mPendingEnter) {
-            final SurfaceControl.Transaction t = mTransactionPool.acquire();
-            finishEnterSplitScreen(t);
-            mSplitTransitions.mPendingEnter = null;
-            t.apply();
-            mTransactionPool.release(t);
-        }
+    public void onTransitionConsumed(@NonNull IBinder transition, boolean aborted,
+            @Nullable SurfaceControl.Transaction finishT) {
+        mSplitTransitions.onTransitionConsumed(transition, aborted, finishT);
     }
 
     @Override
@@ -1498,10 +1760,7 @@
             @NonNull SurfaceControl.Transaction startTransaction,
             @NonNull SurfaceControl.Transaction finishTransaction,
             @NonNull Transitions.TransitionFinishCallback finishCallback) {
-        if (transition != mSplitTransitions.mPendingEnter
-                && transition != mSplitTransitions.mPendingRecent
-                && (mSplitTransitions.mPendingDismiss == null
-                        || mSplitTransitions.mPendingDismiss.mTransition != transition)) {
+        if (!mSplitTransitions.isPendingTransition(transition)) {
             // Not entering or exiting, so just do some house-keeping and validation.
 
             // If we're not in split-mode, just abort so something else can handle it.
@@ -1548,25 +1807,26 @@
         }
 
         boolean shouldAnimate = true;
-        if (mSplitTransitions.mPendingEnter == transition) {
+        if (mSplitTransitions.isPendingEnter(transition)) {
             shouldAnimate = startPendingEnterAnimation(transition, info, startTransaction);
-        } else if (mSplitTransitions.mPendingRecent == transition) {
+        } else if (mSplitTransitions.isPendingRecent(transition)) {
             shouldAnimate = startPendingRecentAnimation(transition, info, startTransaction);
-        } else if (mSplitTransitions.mPendingDismiss != null
-                && mSplitTransitions.mPendingDismiss.mTransition == transition) {
+        } else if (mSplitTransitions.isPendingDismiss(transition)) {
             shouldAnimate = startPendingDismissAnimation(
                     mSplitTransitions.mPendingDismiss, info, startTransaction, finishTransaction);
         }
         if (!shouldAnimate) return false;
 
         mSplitTransitions.playAnimation(transition, info, startTransaction, finishTransaction,
-                finishCallback, mMainStage.mRootTaskInfo.token, mSideStage.mRootTaskInfo.token);
+                finishCallback, mMainStage.mRootTaskInfo.token, mSideStage.mRootTaskInfo.token,
+                mRootTaskInfo.token);
         return true;
     }
 
-    void onTransitionAnimationComplete() {
+    /** Called to clean-up state and do house-keeping after the animation is done. */
+    public void onTransitionAnimationComplete() {
         // If still playing, let it finish.
-        if (!mMainStage.isActive()) {
+        if (!mMainStage.isActive() && !mIsExiting) {
             // Update divider state after animation so that it is still around and positioned
             // properly for the animation itself.
             mSplitLayout.release();
@@ -1628,8 +1888,8 @@
         return true;
     }
 
-    private boolean startPendingDismissAnimation(
-            @NonNull SplitScreenTransitions.DismissTransition dismissTransition,
+    /** Synchronize split-screen state with transition and make appropriate preparations. */
+    public void prepareDismissAnimation(@StageType int toStage, @ExitReason int dismissReason,
             @NonNull TransitionInfo info, @NonNull SurfaceControl.Transaction t,
             @NonNull SurfaceControl.Transaction finishT) {
         // Make some noise if things aren't totally expected. These states shouldn't effect
@@ -1662,7 +1922,7 @@
         mRecentTasks.ifPresent(recentTasks -> {
             // Notify recents if we are exiting in a way that breaks the pair, and disable further
             // updates to splits in the recents until we enter split again
-            if (shouldBreakPairedTaskInRecents(dismissTransition.mReason) && mShouldUpdateRecents) {
+            if (shouldBreakPairedTaskInRecents(dismissReason) && mShouldUpdateRecents) {
                 for (TransitionInfo.Change change : info.getChanges()) {
                     final ActivityManager.RunningTaskInfo taskInfo = change.getTaskInfo();
                     if (taskInfo != null
@@ -1679,30 +1939,37 @@
         // Wait until after animation to update divider
 
         // Reset crops so they don't interfere with subsequent launches
-        t.setWindowCrop(mMainStage.mRootLeash, null);
-        t.setWindowCrop(mSideStage.mRootLeash, null);
+        t.setCrop(mMainStage.mRootLeash, null);
+        t.setCrop(mSideStage.mRootLeash, null);
 
-        if (dismissTransition.mDismissTop == STAGE_TYPE_UNDEFINED) {
-            logExit(dismissTransition.mReason);
-            // TODO: Have a proper remote for this. Until then, though, reset state and use the
-            //       normal animation stuff (which falls back to the normal launcher remote).
-            mSplitLayout.release(t);
-            mSplitTransitions.mPendingDismiss = null;
-            return false;
+        if (toStage == STAGE_TYPE_UNDEFINED) {
+            logExit(dismissReason);
         } else {
-            logExitToStage(dismissTransition.mReason,
-                    dismissTransition.mDismissTop == STAGE_TYPE_MAIN);
+            logExitToStage(dismissReason, toStage == STAGE_TYPE_MAIN);
         }
 
-        addDividerBarToTransition(info, t, false /* show */);
-        // We're dismissing split by moving the other one to fullscreen.
-        // Since we don't have any animations for this yet, just use the internal example
-        // animations.
-
         // Hide divider and dim layer on transition finished.
         setDividerVisibility(false, finishT);
         finishT.hide(mMainStage.mDimLayer);
         finishT.hide(mSideStage.mDimLayer);
+    }
+
+    private boolean startPendingDismissAnimation(
+            @NonNull SplitScreenTransitions.DismissTransition dismissTransition,
+            @NonNull TransitionInfo info, @NonNull SurfaceControl.Transaction t,
+            @NonNull SurfaceControl.Transaction finishT) {
+        prepareDismissAnimation(dismissTransition.mDismissTop, dismissTransition.mReason, info,
+                t, finishT);
+        if (dismissTransition.mDismissTop == STAGE_TYPE_UNDEFINED) {
+            // TODO: Have a proper remote for this. Until then, though, reset state and use the
+            //       normal animation stuff (which falls back to the normal launcher remote).
+            t.hide(mSplitLayout.getDividerLeash());
+            mSplitLayout.release(t);
+            mSplitTransitions.mPendingDismiss = null;
+            return false;
+        }
+
+        addDividerBarToTransition(info, t, false /* show */);
         return true;
     }
 
@@ -1712,28 +1979,6 @@
         return true;
     }
 
-    void onRecentTransitionFinished(boolean returnToHome, WindowContainerTransaction wct,
-            SurfaceControl.Transaction finishT) {
-        // Exclude the case that the split screen has been dismissed already.
-        if (!mMainStage.isActive()) {
-            // The latest split dismissing transition might be a no-op transition and thus won't
-            // callback startAnimation, update split visibility here to cover this kind of no-op
-            // transition case.
-            setSplitsVisible(false);
-            return;
-        }
-
-        if (returnToHome) {
-            // When returning to home from recent apps, the splitting tasks are already hidden, so
-            // append the reset of dismissing operations into the clean-up wct.
-            prepareExitSplitScreen(STAGE_TYPE_UNDEFINED, wct);
-            setSplitsVisible(false);
-            logExit(EXIT_REASON_RETURN_HOME);
-        } else {
-            setDividerVisibility(true, finishT);
-        }
-    }
-
     private void addDividerBarToTransition(@NonNull TransitionInfo info,
             @NonNull SurfaceControl.Transaction t, boolean show) {
         final SurfaceControl leash = mSplitLayout.getDividerLeash();
@@ -1855,8 +2100,8 @@
         }
 
         @Override
-        public void onChildTaskEnterPip(int taskId) {
-            StageCoordinator.this.onStageChildTaskEnterPip(this, taskId);
+        public void onChildTaskEnterPip() {
+            StageCoordinator.this.onStageChildTaskEnterPip();
         }
 
         @Override
@@ -1868,19 +2113,22 @@
         @Override
         public void onNoLongerSupportMultiWindow() {
             if (mMainStage.isActive()) {
+                final Toast splitUnsupportedToast = Toast.makeText(mContext,
+                        R.string.dock_non_resizeble_failed_to_dock_text, Toast.LENGTH_SHORT);
                 final boolean isMainStage = mMainStageListener == this;
                 if (!ENABLE_SHELL_TRANSITIONS) {
                     StageCoordinator.this.exitSplitScreen(isMainStage ? mMainStage : mSideStage,
                             EXIT_REASON_APP_DOES_NOT_SUPPORT_MULTIWINDOW);
+                    splitUnsupportedToast.show();
                     return;
                 }
 
                 final int stageType = isMainStage ? STAGE_TYPE_MAIN : STAGE_TYPE_SIDE;
                 final WindowContainerTransaction wct = new WindowContainerTransaction();
                 prepareExitSplitScreen(stageType, wct);
-                mSplitTransitions.startDismissTransition(null /* transition */, wct,
-                        StageCoordinator.this, stageType,
+                mSplitTransitions.startDismissTransition(wct,StageCoordinator.this, stageType,
                         EXIT_REASON_APP_DOES_NOT_SUPPORT_MULTIWINDOW);
+                splitUnsupportedToast.show();
             }
         }
 
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java
index 949bf5f..1af9415 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java
@@ -17,12 +17,13 @@
 package com.android.wm.shell.splitscreen;
 
 import static android.app.ActivityTaskManager.INVALID_TASK_ID;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
-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.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
+import static android.view.RemoteAnimationTarget.MODE_OPENING;
 
+import static com.android.wm.shell.common.split.SplitScreenConstants.CONTROLLED_ACTIVITY_TYPES;
+import static com.android.wm.shell.common.split.SplitScreenConstants.CONTROLLED_WINDOWING_MODES_WHEN_ACTIVE;
 import static com.android.wm.shell.transition.Transitions.ENABLE_SHELL_TRANSITIONS;
 
 import android.annotation.CallSuper;
@@ -31,7 +32,10 @@
 import android.content.Context;
 import android.graphics.Point;
 import android.graphics.Rect;
+import android.os.IBinder;
+import android.util.Slog;
 import android.util.SparseArray;
+import android.view.RemoteAnimationTarget;
 import android.view.SurfaceControl;
 import android.view.SurfaceSession;
 import android.window.WindowContainerToken;
@@ -39,6 +43,7 @@
 
 import androidx.annotation.NonNull;
 
+import com.android.internal.util.ArrayUtils;
 import com.android.launcher3.icons.IconProvider;
 import com.android.wm.shell.ShellTaskOrganizer;
 import com.android.wm.shell.common.SurfaceUtils;
@@ -47,6 +52,7 @@
 import com.android.wm.shell.splitscreen.SplitScreen.StageType;
 
 import java.io.PrintWriter;
+import java.util.function.Predicate;
 
 /**
  * Base class that handle common task org. related for split-screen stages.
@@ -60,12 +66,6 @@
 class StageTaskListener implements ShellTaskOrganizer.TaskListener {
     private static final String TAG = StageTaskListener.class.getSimpleName();
 
-    protected static final int[] CONTROLLED_ACTIVITY_TYPES = {ACTIVITY_TYPE_STANDARD};
-    protected static final int[] CONTROLLED_WINDOWING_MODES =
-            {WINDOWING_MODE_FULLSCREEN, WINDOWING_MODE_UNDEFINED};
-    protected static final int[] CONTROLLED_WINDOWING_MODES_WHEN_ACTIVE =
-            {WINDOWING_MODE_FULLSCREEN, WINDOWING_MODE_UNDEFINED, WINDOWING_MODE_MULTI_WINDOW};
-
     /** Callback interface for listening to changes in a split-screen stage. */
     public interface StageListenerCallbacks {
         void onRootTaskAppeared();
@@ -74,7 +74,7 @@
 
         void onChildTaskStatusChanged(int taskId, boolean present, boolean visible);
 
-        void onChildTaskEnterPip(int taskId);
+        void onChildTaskEnterPip();
 
         void onRootTaskVanished();
 
@@ -95,21 +95,22 @@
     // TODO(b/204308910): Extracts SplitDecorManager related code to common package.
     private SplitDecorManager mSplitDecorManager;
 
-    private final StageTaskUnfoldController mStageTaskUnfoldController;
-
     StageTaskListener(Context context, ShellTaskOrganizer taskOrganizer, int displayId,
             StageListenerCallbacks callbacks, SyncTransactionQueue syncQueue,
-            SurfaceSession surfaceSession, IconProvider iconProvider,
-            @Nullable StageTaskUnfoldController stageTaskUnfoldController) {
+            SurfaceSession surfaceSession, IconProvider iconProvider) {
         mContext = context;
         mCallbacks = callbacks;
         mSyncQueue = syncQueue;
         mSurfaceSession = surfaceSession;
         mIconProvider = iconProvider;
-        mStageTaskUnfoldController = stageTaskUnfoldController;
         taskOrganizer.createRootTask(displayId, WINDOWING_MODE_MULTI_WINDOW, this);
     }
 
+    /**
+     * General function for dismiss this stage.
+     */
+    void dismiss(WindowContainerTransaction wct, boolean toTop) {}
+
     int getChildCount() {
         return mChildrenTaskInfo.size();
     }
@@ -119,63 +120,53 @@
     }
 
     boolean containsToken(WindowContainerToken token) {
-        if (token.equals(mRootTaskInfo.token)) {
-            return true;
-        }
+        return contains(t -> t.token.equals(token));
+    }
 
-        for (int i = mChildrenTaskInfo.size() - 1; i >= 0; --i) {
-            if (token.equals(mChildrenTaskInfo.valueAt(i).token)) {
-                return true;
-            }
-        }
-
-        return false;
+    boolean containsContainer(IBinder binder) {
+        return contains(t -> t.token.asBinder() == binder);
     }
 
     /**
      * Returns the top visible child task's id.
      */
     int getTopVisibleChildTaskId() {
-        for (int i = mChildrenTaskInfo.size() - 1; i >= 0; --i) {
-            final ActivityManager.RunningTaskInfo info = mChildrenTaskInfo.valueAt(i);
-            if (info.isVisible) {
-                return info.taskId;
-            }
-        }
-        return INVALID_TASK_ID;
+        final ActivityManager.RunningTaskInfo taskInfo = getChildTaskInfo(t -> t.isVisible);
+        return taskInfo != null ? taskInfo.taskId : INVALID_TASK_ID;
     }
 
     /**
      * Returns the top activity uid for the top child task.
      */
     int getTopChildTaskUid() {
-        for (int i = mChildrenTaskInfo.size() - 1; i >= 0; --i) {
-            final ActivityManager.RunningTaskInfo info = mChildrenTaskInfo.valueAt(i);
-            if (info.topActivityInfo == null) {
-                continue;
-            }
-            return info.topActivityInfo.applicationInfo.uid;
-        }
-        return 0;
+        final ActivityManager.RunningTaskInfo taskInfo =
+                getChildTaskInfo(t -> t.topActivityInfo != null);
+        return taskInfo != null ? taskInfo.topActivityInfo.applicationInfo.uid : 0;
     }
 
     /** @return {@code true} if this listener contains the currently focused task. */
     boolean isFocused() {
-        if (mRootTaskInfo == null) {
-            return false;
-        }
+        return contains(t -> t.isFocused);
+    }
 
-        if (mRootTaskInfo.isFocused) {
+    private boolean contains(Predicate<ActivityManager.RunningTaskInfo> predicate) {
+        if (mRootTaskInfo != null && predicate.test(mRootTaskInfo)) {
             return true;
         }
 
+        return getChildTaskInfo(predicate) != null;
+    }
+
+    @Nullable
+    private ActivityManager.RunningTaskInfo getChildTaskInfo(
+            Predicate<ActivityManager.RunningTaskInfo> predicate) {
         for (int i = mChildrenTaskInfo.size() - 1; i >= 0; --i) {
-            if (mChildrenTaskInfo.valueAt(i).isFocused) {
-                return true;
+            final ActivityManager.RunningTaskInfo taskInfo = mChildrenTaskInfo.valueAt(i);
+            if (predicate.test(taskInfo)) {
+                return taskInfo;
             }
         }
-
-        return false;
+        return null;
     }
 
     @Override
@@ -207,20 +198,11 @@
             throw new IllegalArgumentException(this + "\n Unknown task: " + taskInfo
                     + "\n mRootTaskInfo: " + mRootTaskInfo);
         }
-
-        if (mStageTaskUnfoldController != null) {
-            mStageTaskUnfoldController.onTaskAppeared(taskInfo, leash);
-        }
     }
 
     @Override
     @CallSuper
     public void onTaskInfoChanged(ActivityManager.RunningTaskInfo taskInfo) {
-        if (!taskInfo.supportsMultiWindow) {
-            // Leave split screen if the task no longer supports multi window.
-            mCallbacks.onNoLongerSupportMultiWindow();
-            return;
-        }
         if (mRootTaskInfo.taskId == taskInfo.taskId) {
             // Inflates split decor view only when the root task is visible.
             if (mRootTaskInfo.isVisible != taskInfo.isVisible) {
@@ -233,6 +215,15 @@
             }
             mRootTaskInfo = taskInfo;
         } else if (taskInfo.parentTaskId == mRootTaskInfo.taskId) {
+            if (!taskInfo.supportsMultiWindow
+                    || !ArrayUtils.contains(CONTROLLED_ACTIVITY_TYPES, taskInfo.getActivityType())
+                    || !ArrayUtils.contains(CONTROLLED_WINDOWING_MODES_WHEN_ACTIVE,
+                    taskInfo.getWindowingMode())) {
+                // Leave split screen if the task no longer supports multi window or have
+                // uncontrolled task.
+                mCallbacks.onNoLongerSupportMultiWindow();
+                return;
+            }
             mChildrenTaskInfo.put(taskInfo.taskId, taskInfo);
             mCallbacks.onChildTaskStatusChanged(taskInfo.taskId, true /* present */,
                     taskInfo.isVisible);
@@ -258,6 +249,7 @@
         if (mRootTaskInfo.taskId == taskId) {
             mCallbacks.onRootTaskVanished();
             mRootTaskInfo = null;
+            mRootLeash = null;
             mSyncQueue.runInSync(t -> {
                 t.remove(mDimLayer);
                 mSplitDecorManager.release(t);
@@ -266,22 +258,18 @@
             mChildrenTaskInfo.remove(taskId);
             mChildrenLeashes.remove(taskId);
             mCallbacks.onChildTaskStatusChanged(taskId, false /* present */, taskInfo.isVisible);
-            if (taskInfo.getWindowingMode() == WINDOWING_MODE_PINNED) {
-                mCallbacks.onChildTaskEnterPip(taskId);
-            }
             if (ENABLE_SHELL_TRANSITIONS) {
                 // Status is managed/synchronized by the transition lifecycle.
                 return;
             }
+            if (taskInfo.getWindowingMode() == WINDOWING_MODE_PINNED) {
+                mCallbacks.onChildTaskEnterPip();
+            }
             sendStatusChanged();
         } else {
             throw new IllegalArgumentException(this + "\n Unknown task: " + taskInfo
                     + "\n mRootTaskInfo: " + mRootTaskInfo);
         }
-
-        if (mStageTaskUnfoldController != null) {
-            mStageTaskUnfoldController.onTaskVanished(taskInfo);
-        }
     }
 
     @Override
@@ -305,9 +293,9 @@
         }
     }
 
-    void onResizing(Rect newBounds, SurfaceControl.Transaction t) {
+    void onResizing(Rect newBounds, Rect sideBounds, SurfaceControl.Transaction t) {
         if (mSplitDecorManager != null && mRootTaskInfo != null) {
-            mSplitDecorManager.onResizing(mRootTaskInfo, newBounds, t);
+            mSplitDecorManager.onResizing(mRootTaskInfo, newBounds, sideBounds, t);
         }
     }
 
@@ -317,6 +305,14 @@
         }
     }
 
+    void fadeOutDecor(Runnable finishedCallback) {
+        if (mSplitDecorManager != null) {
+            mSplitDecorManager.fadeOutDecor(finishedCallback);
+        } else {
+            finishedCallback.run();
+        }
+    }
+
     void addTask(ActivityManager.RunningTaskInfo task, WindowContainerTransaction wct) {
         // Clear overridden bounds and windowing mode to make sure the child task can inherit
         // windowing mode and bounds from split root.
@@ -341,6 +337,19 @@
         }
     }
 
+    void evictNonOpeningChildren(RemoteAnimationTarget[] apps, WindowContainerTransaction wct) {
+        final SparseArray<ActivityManager.RunningTaskInfo> toBeEvict = mChildrenTaskInfo.clone();
+        for (int i = 0; i < apps.length; i++) {
+            if (apps[i].mode == MODE_OPENING) {
+                toBeEvict.remove(apps[i].taskId);
+            }
+        }
+        for (int i = toBeEvict.size() - 1; i >= 0; i--) {
+            final ActivityManager.RunningTaskInfo taskInfo = toBeEvict.valueAt(i);
+            wct.reparent(taskInfo.token, null /* parent */, false /* onTop */);
+        }
+    }
+
     void evictInvisibleChildren(WindowContainerTransaction wct) {
         for (int i = mChildrenTaskInfo.size() - 1; i >= 0; i--) {
             final ActivityManager.RunningTaskInfo taskInfo = mChildrenTaskInfo.valueAt(i);
@@ -350,6 +359,11 @@
         }
     }
 
+    void resetBounds(WindowContainerTransaction wct) {
+        wct.setBounds(mRootTaskInfo.token, null);
+        wct.setAppBounds(mRootTaskInfo.token, null);
+    }
+
     void onSplitScreenListenerRegistered(SplitScreen.SplitScreenListener listener,
             @StageType int stage) {
         for (int i = mChildrenTaskInfo.size() - 1; i >= 0; --i) {
@@ -363,7 +377,13 @@
             SurfaceControl leash, boolean firstAppeared) {
         final Point taskPositionInParent = taskInfo.positionInParent;
         mSyncQueue.runInSync(t -> {
-            t.setWindowCrop(leash, null);
+            // The task surface might be released before running in the sync queue for the case like
+            // trampoline launch, so check if the surface is valid before processing it.
+            if (!leash.isValid()) {
+                Slog.w(TAG, "Skip updating invalid child task surface of task#" + taskInfo.taskId);
+                return;
+            }
+            t.setCrop(leash, null);
             t.setPosition(leash, taskPositionInParent.x, taskPositionInParent.y);
             if (firstAppeared && !ENABLE_SHELL_TRANSITIONS) {
                 t.setAlpha(leash, 1f);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskUnfoldController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskUnfoldController.java
deleted file mode 100644
index 59eecb5d..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskUnfoldController.java
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.splitscreen;
-
-import static android.view.Display.DEFAULT_DISPLAY;
-
-import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_TOP_OR_LEFT;
-import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_UNDEFINED;
-
-import android.animation.RectEvaluator;
-import android.animation.TypeEvaluator;
-import android.annotation.NonNull;
-import android.app.ActivityManager;
-import android.content.Context;
-import android.graphics.Insets;
-import android.graphics.Rect;
-import android.util.SparseArray;
-import android.view.InsetsSource;
-import android.view.InsetsState;
-import android.view.SurfaceControl;
-
-import com.android.internal.policy.ScreenDecorationsUtils;
-import com.android.wm.shell.common.DisplayInsetsController;
-import com.android.wm.shell.common.DisplayInsetsController.OnInsetsChangedListener;
-import com.android.wm.shell.common.TransactionPool;
-import com.android.wm.shell.common.split.SplitScreenConstants.SplitPosition;
-import com.android.wm.shell.unfold.ShellUnfoldProgressProvider;
-import com.android.wm.shell.unfold.ShellUnfoldProgressProvider.UnfoldListener;
-import com.android.wm.shell.unfold.UnfoldBackgroundController;
-
-import java.util.concurrent.Executor;
-
-/**
- * Controls transformations of the split screen task surfaces in response
- * to the unfolding/folding action on foldable devices
- */
-public class StageTaskUnfoldController implements UnfoldListener, OnInsetsChangedListener {
-
-    private static final TypeEvaluator<Rect> RECT_EVALUATOR = new RectEvaluator(new Rect());
-    private static final float CROPPING_START_MARGIN_FRACTION = 0.05f;
-
-    private final SparseArray<AnimationContext> mAnimationContextByTaskId = new SparseArray<>();
-    private final ShellUnfoldProgressProvider mUnfoldProgressProvider;
-    private final DisplayInsetsController mDisplayInsetsController;
-    private final UnfoldBackgroundController mBackgroundController;
-    private final Executor mExecutor;
-    private final int mExpandedTaskBarHeight;
-    private final float mWindowCornerRadiusPx;
-    private final Rect mStageBounds = new Rect();
-    private final TransactionPool mTransactionPool;
-
-    private InsetsSource mTaskbarInsetsSource;
-    private boolean mBothStagesVisible;
-
-    public StageTaskUnfoldController(@NonNull Context context,
-            @NonNull TransactionPool transactionPool,
-            @NonNull ShellUnfoldProgressProvider unfoldProgressProvider,
-            @NonNull DisplayInsetsController displayInsetsController,
-            @NonNull UnfoldBackgroundController backgroundController,
-            @NonNull Executor executor) {
-        mUnfoldProgressProvider = unfoldProgressProvider;
-        mTransactionPool = transactionPool;
-        mExecutor = executor;
-        mBackgroundController = backgroundController;
-        mDisplayInsetsController = displayInsetsController;
-        mWindowCornerRadiusPx = ScreenDecorationsUtils.getWindowCornerRadius(context);
-        mExpandedTaskBarHeight = context.getResources().getDimensionPixelSize(
-                com.android.internal.R.dimen.taskbar_frame_height);
-    }
-
-    /**
-     * Initializes the controller, starts listening for the external events
-     */
-    public void init() {
-        mUnfoldProgressProvider.addListener(mExecutor, this);
-        mDisplayInsetsController.addInsetsChangedListener(DEFAULT_DISPLAY, this);
-    }
-
-    @Override
-    public void insetsChanged(InsetsState insetsState) {
-        mTaskbarInsetsSource = insetsState.getSource(InsetsState.ITYPE_EXTRA_NAVIGATION_BAR);
-        for (int i = mAnimationContextByTaskId.size() - 1; i >= 0; i--) {
-            AnimationContext context = mAnimationContextByTaskId.valueAt(i);
-            context.update();
-        }
-    }
-
-    /**
-     * Called when split screen task appeared
-     * @param taskInfo info for the appeared task
-     * @param leash surface leash for the appeared task
-     */
-    public void onTaskAppeared(ActivityManager.RunningTaskInfo taskInfo, SurfaceControl leash) {
-        // Only handle child task surface here.
-        if (!taskInfo.hasParentTask()) return;
-
-        AnimationContext context = new AnimationContext(leash);
-        mAnimationContextByTaskId.put(taskInfo.taskId, context);
-    }
-
-    /**
-     * Called when a split screen task vanished
-     * @param taskInfo info for the vanished task
-     */
-    public void onTaskVanished(ActivityManager.RunningTaskInfo taskInfo) {
-        if (!taskInfo.hasParentTask()) return;
-
-        AnimationContext context = mAnimationContextByTaskId.get(taskInfo.taskId);
-        if (context != null) {
-            final SurfaceControl.Transaction transaction = mTransactionPool.acquire();
-            resetSurface(transaction, context);
-            transaction.apply();
-            mTransactionPool.release(transaction);
-        }
-        mAnimationContextByTaskId.remove(taskInfo.taskId);
-    }
-
-    @Override
-    public void onStateChangeProgress(float progress) {
-        if (mAnimationContextByTaskId.size() == 0 || !mBothStagesVisible) return;
-
-        final SurfaceControl.Transaction transaction = mTransactionPool.acquire();
-        mBackgroundController.ensureBackground(transaction);
-
-        for (int i = mAnimationContextByTaskId.size() - 1; i >= 0; i--) {
-            AnimationContext context = mAnimationContextByTaskId.valueAt(i);
-
-            context.mCurrentCropRect.set(RECT_EVALUATOR
-                    .evaluate(progress, context.mStartCropRect, context.mEndCropRect));
-
-            transaction.setWindowCrop(context.mLeash, context.mCurrentCropRect)
-                    .setCornerRadius(context.mLeash, mWindowCornerRadiusPx);
-        }
-
-        transaction.apply();
-
-        mTransactionPool.release(transaction);
-    }
-
-    @Override
-    public void onStateChangeFinished() {
-        resetTransformations();
-    }
-
-    /**
-     * Called when split screen visibility changes
-     * @param bothStagesVisible true if both stages of the split screen are visible
-     */
-    public void onSplitVisibilityChanged(boolean bothStagesVisible) {
-        mBothStagesVisible = bothStagesVisible;
-        if (!bothStagesVisible) {
-            resetTransformations();
-        }
-    }
-
-    /**
-     * Called when split screen stage bounds changed
-     * @param bounds new bounds for this stage
-     */
-    public void onLayoutChanged(Rect bounds, @SplitPosition int splitPosition,
-            boolean isLandscape) {
-        mStageBounds.set(bounds);
-
-        for (int i = mAnimationContextByTaskId.size() - 1; i >= 0; i--) {
-            final AnimationContext context = mAnimationContextByTaskId.valueAt(i);
-            context.update(splitPosition, isLandscape);
-        }
-    }
-
-    private void resetTransformations() {
-        final SurfaceControl.Transaction transaction = mTransactionPool.acquire();
-
-        for (int i = mAnimationContextByTaskId.size() - 1; i >= 0; i--) {
-            final AnimationContext context = mAnimationContextByTaskId.valueAt(i);
-            resetSurface(transaction, context);
-        }
-        mBackgroundController.removeBackground(transaction);
-        transaction.apply();
-
-        mTransactionPool.release(transaction);
-    }
-
-    private void resetSurface(SurfaceControl.Transaction transaction, AnimationContext context) {
-        transaction
-                .setWindowCrop(context.mLeash, null)
-                .setCornerRadius(context.mLeash, 0.0F);
-    }
-
-    private class AnimationContext {
-        final SurfaceControl mLeash;
-        final Rect mStartCropRect = new Rect();
-        final Rect mEndCropRect = new Rect();
-        final Rect mCurrentCropRect = new Rect();
-
-        private @SplitPosition int mSplitPosition = SPLIT_POSITION_UNDEFINED;
-        private boolean mIsLandscape = false;
-
-        private AnimationContext(SurfaceControl leash) {
-            this.mLeash = leash;
-            update();
-        }
-
-        private void update(@SplitPosition int splitPosition, boolean isLandscape) {
-            this.mSplitPosition = splitPosition;
-            this.mIsLandscape = isLandscape;
-            update();
-        }
-
-        private void update() {
-            mStartCropRect.set(mStageBounds);
-
-            boolean taskbarExpanded = isTaskbarExpanded();
-            if (taskbarExpanded) {
-                // Only insets the cropping window with taskbar when taskbar is expanded
-                mStartCropRect.inset(mTaskbarInsetsSource.calculateVisibleInsets(mStartCropRect));
-            }
-
-            // Offset to surface coordinates as layout bounds are in screen coordinates
-            mStartCropRect.offsetTo(0, 0);
-
-            mEndCropRect.set(mStartCropRect);
-
-            int maxSize = Math.max(mEndCropRect.width(), mEndCropRect.height());
-            int margin = (int) (maxSize * CROPPING_START_MARGIN_FRACTION);
-
-            // Sides adjacent to split bar or task bar are not be animated.
-            Insets margins;
-            if (mIsLandscape) { // Left and right splits.
-                margins = getLandscapeMargins(margin, taskbarExpanded);
-            } else { // Top and bottom splits.
-                margins = getPortraitMargins(margin, taskbarExpanded);
-            }
-            mStartCropRect.inset(margins);
-        }
-
-        private Insets getLandscapeMargins(int margin, boolean taskbarExpanded) {
-            int left = margin;
-            int right = margin;
-            int bottom = taskbarExpanded ? 0 : margin; // Taskbar margin.
-            if (mSplitPosition == SPLIT_POSITION_TOP_OR_LEFT) {
-                right = 0; // Divider margin.
-            } else {
-                left = 0; // Divider margin.
-            }
-            return Insets.of(left, /* top= */ margin, right, bottom);
-        }
-
-        private Insets getPortraitMargins(int margin, boolean taskbarExpanded) {
-            int bottom = margin;
-            int top = margin;
-            if (mSplitPosition == SPLIT_POSITION_TOP_OR_LEFT) {
-                bottom = 0; // Divider margin.
-            } else { // Bottom split.
-                top = 0; // Divider margin.
-                if (taskbarExpanded) {
-                    bottom = 0; // Taskbar margin.
-                }
-            }
-            return Insets.of(/* left= */ margin, top, /* right= */ margin, bottom);
-        }
-
-        private boolean isTaskbarExpanded() {
-            return mTaskbarInsetsSource != null
-                    && mTaskbarInsetsSource.getFrame().height() >= mExpandedTaskBarHeight;
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/ISplitScreen.aidl b/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/ISplitScreen.aidl
deleted file mode 100644
index 45f6d3c..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/ISplitScreen.aidl
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.stagesplit;
-
-import android.app.PendingIntent;
-import android.content.Intent;
-import android.os.Bundle;
-import android.os.UserHandle;
-import android.view.RemoteAnimationAdapter;
-import android.view.RemoteAnimationTarget;
-import android.window.RemoteTransition;
-
-import com.android.wm.shell.stagesplit.ISplitScreenListener;
-
-/**
- * Interface that is exposed to remote callers to manipulate the splitscreen feature.
- */
-interface ISplitScreen {
-
-    /**
-     * Registers a split screen listener.
-     */
-    oneway void registerSplitScreenListener(in ISplitScreenListener listener) = 1;
-
-    /**
-     * Unregisters a split screen listener.
-     */
-    oneway void unregisterSplitScreenListener(in ISplitScreenListener listener) = 2;
-
-    /**
-     * Hides the side-stage if it is currently visible.
-     */
-    oneway void setSideStageVisibility(boolean visible) = 3;
-
-    /**
-     * Removes a task from the side stage.
-     */
-    oneway void removeFromSideStage(int taskId) = 4;
-
-    /**
-     * Removes the split-screen stages and leaving indicated task to top. Passing INVALID_TASK_ID
-     * to indicate leaving no top task after leaving split-screen.
-     */
-    oneway void exitSplitScreen(int toTopTaskId) = 5;
-
-    /**
-     * @param exitSplitScreenOnHide if to exit split-screen if both stages are not visible.
-     */
-    oneway void exitSplitScreenOnHide(boolean exitSplitScreenOnHide) = 6;
-
-    /**
-     * Starts a task in a stage.
-     */
-    oneway void startTask(int taskId, int stage, int position, in Bundle options) = 7;
-
-    /**
-     * Starts a shortcut in a stage.
-     */
-    oneway void startShortcut(String packageName, String shortcutId, int stage, int position,
-            in Bundle options, in UserHandle user) = 8;
-
-    /**
-     * Starts an activity in a stage.
-     */
-    oneway void startIntent(in PendingIntent intent, in Intent fillInIntent, int stage,
-            int position, in Bundle options) = 9;
-
-    /**
-     * Starts tasks simultaneously in one transition.
-     */
-    oneway void startTasks(int mainTaskId, in Bundle mainOptions, int sideTaskId,
-            in Bundle sideOptions, int sidePosition, in RemoteTransition remoteTransition) = 10;
-
-    /**
-     * Version of startTasks using legacy transition system.
-     */
-     oneway void startTasksWithLegacyTransition(int mainTaskId, in Bundle mainOptions,
-                            int sideTaskId, in Bundle sideOptions, int sidePosition,
-                            in RemoteAnimationAdapter adapter) = 11;
-
-    /**
-     * Blocking call that notifies and gets additional split-screen targets when entering
-     * recents (for example: the dividerBar).
-     * @param cancel is true if leaving recents back to split (eg. the gesture was cancelled).
-     * @param appTargets apps that will be re-parented to display area
-     */
-    RemoteAnimationTarget[] onGoingToRecentsLegacy(boolean cancel,
-                                                   in RemoteAnimationTarget[] appTargets) = 12;
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/ISplitScreenListener.aidl b/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/ISplitScreenListener.aidl
deleted file mode 100644
index 46e4299..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/ISplitScreenListener.aidl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.stagesplit;
-
-/**
- * Listener interface that Launcher attaches to SystemUI to get split-screen callbacks.
- */
-oneway interface ISplitScreenListener {
-
-    /**
-     * Called when the stage position changes.
-     */
-    void onStagePositionChanged(int stage, int position);
-
-    /**
-     * Called when a task changes stages.
-     */
-    void onTaskStageChanged(int taskId, int stage, boolean visible);
-}
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/MainStage.java b/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/MainStage.java
deleted file mode 100644
index 83855be..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/MainStage.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.stagesplit;
-
-import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
-
-import android.annotation.Nullable;
-import android.graphics.Rect;
-import android.view.SurfaceSession;
-import android.window.WindowContainerToken;
-import android.window.WindowContainerTransaction;
-
-import com.android.wm.shell.ShellTaskOrganizer;
-import com.android.wm.shell.common.SyncTransactionQueue;
-
-/**
- * Main stage for split-screen mode. When split-screen is active all standard activity types launch
- * on the main stage, except for task that are explicitly pinned to the {@link SideStage}.
- * @see StageCoordinator
- */
-class MainStage extends StageTaskListener {
-    private static final String TAG = MainStage.class.getSimpleName();
-
-    private boolean mIsActive = false;
-
-    MainStage(ShellTaskOrganizer taskOrganizer, int displayId,
-            StageListenerCallbacks callbacks, SyncTransactionQueue syncQueue,
-            SurfaceSession surfaceSession,
-            @Nullable StageTaskUnfoldController stageTaskUnfoldController) {
-        super(taskOrganizer, displayId, callbacks, syncQueue, surfaceSession,
-                stageTaskUnfoldController);
-    }
-
-    boolean isActive() {
-        return mIsActive;
-    }
-
-    void activate(Rect rootBounds, WindowContainerTransaction wct) {
-        if (mIsActive) return;
-
-        final WindowContainerToken rootToken = mRootTaskInfo.token;
-        wct.setBounds(rootToken, rootBounds)
-                .setWindowingMode(rootToken, WINDOWING_MODE_MULTI_WINDOW)
-                .setLaunchRoot(
-                        rootToken,
-                        CONTROLLED_WINDOWING_MODES,
-                        CONTROLLED_ACTIVITY_TYPES)
-                .reparentTasks(
-                        null /* currentParent */,
-                        rootToken,
-                        CONTROLLED_WINDOWING_MODES,
-                        CONTROLLED_ACTIVITY_TYPES,
-                        true /* onTop */)
-                // Moving the root task to top after the child tasks were re-parented , or the root
-                // task cannot be visible and focused.
-                .reorder(rootToken, true /* onTop */);
-
-        mIsActive = true;
-    }
-
-    void deactivate(WindowContainerTransaction wct) {
-        deactivate(wct, false /* toTop */);
-    }
-
-    void deactivate(WindowContainerTransaction wct, boolean toTop) {
-        if (!mIsActive) return;
-        mIsActive = false;
-
-        if (mRootTaskInfo == null) return;
-        final WindowContainerToken rootToken = mRootTaskInfo.token;
-        wct.setLaunchRoot(
-                        rootToken,
-                        null,
-                        null)
-                .reparentTasks(
-                        rootToken,
-                        null /* newParent */,
-                        CONTROLLED_WINDOWING_MODES_WHEN_ACTIVE,
-                        CONTROLLED_ACTIVITY_TYPES,
-                        toTop)
-                // We want this re-order to the bottom regardless since we are re-parenting
-                // all its tasks.
-                .reorder(rootToken, false /* onTop */);
-    }
-
-    void updateConfiguration(int windowingMode, Rect bounds, WindowContainerTransaction wct) {
-        wct.setBounds(mRootTaskInfo.token, bounds)
-                .setWindowingMode(mRootTaskInfo.token, windowingMode);
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/OWNERS b/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/OWNERS
deleted file mode 100644
index 264e88f..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-# WM shell sub-modules stagesplit owner
-chenghsiuchang@google.com
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/OutlineManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/OutlineManager.java
deleted file mode 100644
index 8fbad52..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/OutlineManager.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.stagesplit;
-
-import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
-import static android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
-import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION;
-import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY;
-import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
-
-import android.annotation.Nullable;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.graphics.PixelFormat;
-import android.graphics.Rect;
-import android.os.Binder;
-import android.view.IWindow;
-import android.view.InsetsSource;
-import android.view.InsetsState;
-import android.view.LayoutInflater;
-import android.view.SurfaceControl;
-import android.view.SurfaceControlViewHost;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.WindowManager;
-import android.view.WindowlessWindowManager;
-import android.widget.FrameLayout;
-
-import com.android.wm.shell.R;
-
-/**
- * Handles drawing outline of the bounds of provided root surface. The outline will be drown with
- * the consideration of display insets like status bar, navigation bar and display cutout.
- */
-class OutlineManager extends WindowlessWindowManager {
-    private static final String WINDOW_NAME = "SplitOutlineLayer";
-    private final Context mContext;
-    private final Rect mRootBounds = new Rect();
-    private final Rect mTempRect = new Rect();
-    private final Rect mLastOutlineBounds = new Rect();
-    private final InsetsState mInsetsState = new InsetsState();
-    private final int mExpandedTaskBarHeight;
-    private OutlineView mOutlineView;
-    private SurfaceControlViewHost mViewHost;
-    private SurfaceControl mHostLeash;
-    private SurfaceControl mLeash;
-
-    OutlineManager(Context context, Configuration configuration) {
-        super(configuration, null /* rootSurface */, null /* hostInputToken */);
-        mContext = context.createWindowContext(context.getDisplay(), TYPE_APPLICATION_OVERLAY,
-                null /* options */);
-        mExpandedTaskBarHeight = mContext.getResources().getDimensionPixelSize(
-                com.android.internal.R.dimen.taskbar_frame_height);
-    }
-
-    @Override
-    protected void attachToParentSurface(IWindow window, SurfaceControl.Builder b) {
-        b.setParent(mHostLeash);
-    }
-
-    void inflate(SurfaceControl rootLeash, Rect rootBounds) {
-        if (mLeash != null || mViewHost != null) return;
-
-        mHostLeash = rootLeash;
-        mRootBounds.set(rootBounds);
-        mViewHost = new SurfaceControlViewHost(mContext, mContext.getDisplay(), this);
-
-        final FrameLayout rootLayout = (FrameLayout) LayoutInflater.from(mContext)
-                .inflate(R.layout.split_outline, null);
-        mOutlineView = rootLayout.findViewById(R.id.split_outline);
-
-        final WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
-                0 /* width */, 0 /* height */, TYPE_APPLICATION_OVERLAY,
-                FLAG_NOT_FOCUSABLE | FLAG_NOT_TOUCHABLE, PixelFormat.TRANSLUCENT);
-        lp.width = mRootBounds.width();
-        lp.height = mRootBounds.height();
-        lp.token = new Binder();
-        lp.setTitle(WINDOW_NAME);
-        lp.privateFlags |= PRIVATE_FLAG_NO_MOVE_ANIMATION | PRIVATE_FLAG_TRUSTED_OVERLAY;
-        // TODO(b/189839391): Set INPUT_FEATURE_NO_INPUT_CHANNEL after WM supports
-        //  TRUSTED_OVERLAY for windowless window without input channel.
-        mViewHost.setView(rootLayout, lp);
-        mLeash = getSurfaceControl(mViewHost.getWindowToken());
-
-        drawOutline();
-    }
-
-    void release() {
-        if (mViewHost != null) {
-            mViewHost.release();
-            mViewHost = null;
-        }
-        mRootBounds.setEmpty();
-        mLastOutlineBounds.setEmpty();
-        mOutlineView = null;
-        mHostLeash = null;
-        mLeash = null;
-    }
-
-    @Nullable
-    SurfaceControl getOutlineLeash() {
-        return mLeash;
-    }
-
-    void setVisibility(boolean visible) {
-        if (mOutlineView != null) {
-            mOutlineView.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
-        }
-    }
-
-    void setRootBounds(Rect rootBounds) {
-        if (mViewHost == null || mViewHost.getView() == null) {
-            return;
-        }
-
-        if (!mRootBounds.equals(rootBounds)) {
-            WindowManager.LayoutParams lp =
-                    (WindowManager.LayoutParams) mViewHost.getView().getLayoutParams();
-            lp.width = rootBounds.width();
-            lp.height = rootBounds.height();
-            mViewHost.relayout(lp);
-            mRootBounds.set(rootBounds);
-            drawOutline();
-        }
-    }
-
-    void onInsetsChanged(InsetsState insetsState) {
-        if (!mInsetsState.equals(insetsState)) {
-            mInsetsState.set(insetsState);
-            drawOutline();
-        }
-    }
-
-    private void computeOutlineBounds(Rect rootBounds, InsetsState insetsState, Rect outBounds) {
-        outBounds.set(rootBounds);
-        final InsetsSource taskBarInsetsSource =
-                insetsState.getSource(InsetsState.ITYPE_EXTRA_NAVIGATION_BAR);
-        // Only insets the divider bar with task bar when it's expanded so that the rounded corners
-        // will be drawn against task bar.
-        if (taskBarInsetsSource.getFrame().height() >= mExpandedTaskBarHeight) {
-            outBounds.inset(taskBarInsetsSource.calculateVisibleInsets(outBounds));
-        }
-
-        // Offset the coordinate from screen based to surface based.
-        outBounds.offset(-rootBounds.left, -rootBounds.top);
-    }
-
-    void drawOutline() {
-        if (mOutlineView == null) {
-            return;
-        }
-
-        computeOutlineBounds(mRootBounds, mInsetsState, mTempRect);
-        if (mTempRect.equals(mLastOutlineBounds)) {
-            return;
-        }
-
-        ViewGroup.MarginLayoutParams lp =
-                (ViewGroup.MarginLayoutParams) mOutlineView.getLayoutParams();
-        lp.leftMargin = mTempRect.left;
-        lp.topMargin = mTempRect.top;
-        lp.width = mTempRect.width();
-        lp.height = mTempRect.height();
-        mOutlineView.setLayoutParams(lp);
-        mLastOutlineBounds.set(mTempRect);
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/OutlineView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/OutlineView.java
deleted file mode 100644
index 92b1381..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/OutlineView.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.stagesplit;
-
-import static android.view.RoundedCorner.POSITION_BOTTOM_LEFT;
-import static android.view.RoundedCorner.POSITION_BOTTOM_RIGHT;
-import static android.view.RoundedCorner.POSITION_TOP_LEFT;
-import static android.view.RoundedCorner.POSITION_TOP_RIGHT;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.graphics.Path;
-import android.util.AttributeSet;
-import android.view.RoundedCorner;
-import android.view.View;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-import com.android.internal.R;
-
-/** View for drawing split outline. */
-public class OutlineView extends View {
-    private final Paint mPaint = new Paint();
-    private final Path mPath = new Path();
-    private final float[] mRadii = new float[8];
-
-    public OutlineView(@NonNull Context context, @Nullable AttributeSet attrs) {
-        super(context, attrs);
-        mPaint.setStyle(Paint.Style.STROKE);
-        mPaint.setStrokeWidth(
-                getResources().getDimension(R.dimen.accessibility_focus_highlight_stroke_width));
-        mPaint.setColor(getResources().getColor(R.color.system_accent1_100, null));
-    }
-
-    @Override
-    protected void onAttachedToWindow() {
-        // TODO(b/200850654): match the screen corners with the actual display decor.
-        mRadii[0] = mRadii[1] = getCornerRadius(POSITION_TOP_LEFT);
-        mRadii[2] = mRadii[3] = getCornerRadius(POSITION_TOP_RIGHT);
-        mRadii[4] = mRadii[5] = getCornerRadius(POSITION_BOTTOM_RIGHT);
-        mRadii[6] = mRadii[7] = getCornerRadius(POSITION_BOTTOM_LEFT);
-    }
-
-    private int getCornerRadius(@RoundedCorner.Position int position) {
-        final RoundedCorner roundedCorner = getDisplay().getRoundedCorner(position);
-        return roundedCorner == null ? 0 : roundedCorner.getRadius();
-    }
-
-    @Override
-    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
-        if (changed) {
-            mPath.reset();
-            mPath.addRoundRect(0, 0, getWidth(), getHeight(), mRadii, Path.Direction.CW);
-        }
-    }
-
-    @Override
-    protected void onDraw(Canvas canvas) {
-        canvas.drawPath(mPath, mPaint);
-    }
-
-    @Override
-    public boolean hasOverlappingRendering() {
-        return false;
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/SideStage.java b/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/SideStage.java
deleted file mode 100644
index 55c4f3a..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/SideStage.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.stagesplit;
-
-import android.annotation.CallSuper;
-import android.annotation.Nullable;
-import android.app.ActivityManager;
-import android.content.Context;
-import android.graphics.Rect;
-import android.view.InsetsSourceControl;
-import android.view.InsetsState;
-import android.view.SurfaceControl;
-import android.view.SurfaceSession;
-import android.window.WindowContainerToken;
-import android.window.WindowContainerTransaction;
-
-import com.android.wm.shell.ShellTaskOrganizer;
-import com.android.wm.shell.common.DisplayInsetsController;
-import com.android.wm.shell.common.SyncTransactionQueue;
-
-/**
- * Side stage for split-screen mode. Only tasks that are explicitly pinned to this stage show up
- * here. All other task are launch in the {@link MainStage}.
- *
- * @see StageCoordinator
- */
-class SideStage extends StageTaskListener implements
-        DisplayInsetsController.OnInsetsChangedListener {
-    private static final String TAG = SideStage.class.getSimpleName();
-    private final Context mContext;
-    private OutlineManager mOutlineManager;
-
-    SideStage(Context context, ShellTaskOrganizer taskOrganizer, int displayId,
-            StageListenerCallbacks callbacks, SyncTransactionQueue syncQueue,
-            SurfaceSession surfaceSession,
-            @Nullable StageTaskUnfoldController stageTaskUnfoldController) {
-        super(taskOrganizer, displayId, callbacks, syncQueue, surfaceSession,
-                stageTaskUnfoldController);
-        mContext = context;
-    }
-
-    void addTask(ActivityManager.RunningTaskInfo task, Rect rootBounds,
-            WindowContainerTransaction wct) {
-        final WindowContainerToken rootToken = mRootTaskInfo.token;
-        wct.setBounds(rootToken, rootBounds)
-                .reparent(task.token, rootToken, true /* onTop*/)
-                // Moving the root task to top after the child tasks were reparented , or the root
-                // task cannot be visible and focused.
-                .reorder(rootToken, true /* onTop */);
-    }
-
-    boolean removeAllTasks(WindowContainerTransaction wct, boolean toTop) {
-        // No matter if the root task is empty or not, moving the root to bottom because it no
-        // longer preserves visible child task.
-        wct.reorder(mRootTaskInfo.token, false /* onTop */);
-        if (mChildrenTaskInfo.size() == 0) return false;
-        wct.reparentTasks(
-                mRootTaskInfo.token,
-                null /* newParent */,
-                CONTROLLED_WINDOWING_MODES_WHEN_ACTIVE,
-                CONTROLLED_ACTIVITY_TYPES,
-                toTop);
-        return true;
-    }
-
-    boolean removeTask(int taskId, WindowContainerToken newParent, WindowContainerTransaction wct) {
-        final ActivityManager.RunningTaskInfo task = mChildrenTaskInfo.get(taskId);
-        if (task == null) return false;
-        wct.reparent(task.token, newParent, false /* onTop */);
-        return true;
-    }
-
-    @Nullable
-    public SurfaceControl getOutlineLeash() {
-        return mOutlineManager.getOutlineLeash();
-    }
-
-    @Override
-    @CallSuper
-    public void onTaskAppeared(ActivityManager.RunningTaskInfo taskInfo, SurfaceControl leash) {
-        super.onTaskAppeared(taskInfo, leash);
-        if (isRootTask(taskInfo)) {
-            mOutlineManager = new OutlineManager(mContext, taskInfo.configuration);
-            enableOutline(true);
-        }
-    }
-
-    @Override
-    @CallSuper
-    public void onTaskInfoChanged(ActivityManager.RunningTaskInfo taskInfo) {
-        super.onTaskInfoChanged(taskInfo);
-        if (isRootTask(taskInfo)) {
-            mOutlineManager.setRootBounds(taskInfo.configuration.windowConfiguration.getBounds());
-        }
-    }
-
-    private boolean isRootTask(ActivityManager.RunningTaskInfo taskInfo) {
-        return mRootTaskInfo != null && mRootTaskInfo.taskId == taskInfo.taskId;
-    }
-
-    void enableOutline(boolean enable) {
-        if (mOutlineManager == null) {
-            return;
-        }
-
-        if (enable) {
-            if (mRootTaskInfo != null) {
-                mOutlineManager.inflate(mRootLeash,
-                        mRootTaskInfo.configuration.windowConfiguration.getBounds());
-            }
-        } else {
-            mOutlineManager.release();
-        }
-    }
-
-    void setOutlineVisibility(boolean visible) {
-        mOutlineManager.setVisibility(visible);
-    }
-
-    @Override
-    public void insetsChanged(InsetsState insetsState) {
-        mOutlineManager.onInsetsChanged(insetsState);
-    }
-
-    @Override
-    public void insetsControlChanged(InsetsState insetsState,
-            InsetsSourceControl[] activeControls) {
-        insetsChanged(insetsState);
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/SplitScreen.java b/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/SplitScreen.java
deleted file mode 100644
index c5d2312..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/SplitScreen.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.stagesplit;
-
-import android.annotation.IntDef;
-import android.annotation.NonNull;
-
-import com.android.wm.shell.common.annotations.ExternalThread;
-import com.android.wm.shell.common.split.SplitScreenConstants.SplitPosition;
-
-import java.util.concurrent.Executor;
-
-/**
- * Interface to engage split-screen feature.
- * TODO: Figure out which of these are actually needed outside of the Shell
- */
-@ExternalThread
-public interface SplitScreen {
-    /**
-     * Stage type isn't specified normally meaning to use what ever the default is.
-     * E.g. exit split-screen and launch the app in fullscreen.
-     */
-    int STAGE_TYPE_UNDEFINED = -1;
-    /**
-     * The main stage type.
-     * @see MainStage
-     */
-    int STAGE_TYPE_MAIN = 0;
-
-    /**
-     * The side stage type.
-     * @see SideStage
-     */
-    int STAGE_TYPE_SIDE = 1;
-
-    @IntDef(prefix = { "STAGE_TYPE_" }, value = {
-            STAGE_TYPE_UNDEFINED,
-            STAGE_TYPE_MAIN,
-            STAGE_TYPE_SIDE
-    })
-    @interface StageType {}
-
-    /** Callback interface for listening to changes in a split-screen stage. */
-    interface SplitScreenListener {
-        default void onStagePositionChanged(@StageType int stage, @SplitPosition int position) {}
-        default void onTaskStageChanged(int taskId, @StageType int stage, boolean visible) {}
-        default void onSplitVisibilityChanged(boolean visible) {}
-    }
-
-    /** Registers listener that gets split screen callback. */
-    void registerSplitScreenListener(@NonNull SplitScreenListener listener,
-            @NonNull Executor executor);
-
-    /** Unregisters listener that gets split screen callback. */
-    void unregisterSplitScreenListener(@NonNull SplitScreenListener listener);
-
-    /**
-     * Returns a binder that can be passed to an external process to manipulate SplitScreen.
-     */
-    default ISplitScreen createExternalInterface() {
-        return null;
-    }
-
-    /**
-     * Called when the keyguard occluded state changes.
-     * @param occluded Indicates if the keyguard is now occluded.
-     */
-    void onKeyguardOccludedChanged(boolean occluded);
-
-    /**
-     * Called when the visibility of the keyguard changes.
-     * @param showing Indicates if the keyguard is now visible.
-     */
-    void onKeyguardVisibilityChanged(boolean showing);
-
-    /** Get a string representation of a stage type */
-    static String stageTypeToString(@StageType int stage) {
-        switch (stage) {
-            case STAGE_TYPE_UNDEFINED: return "UNDEFINED";
-            case STAGE_TYPE_MAIN: return "MAIN";
-            case STAGE_TYPE_SIDE: return "SIDE";
-            default: return "UNKNOWN(" + stage + ")";
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/SplitScreenController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/SplitScreenController.java
deleted file mode 100644
index 0717405..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/SplitScreenController.java
+++ /dev/null
@@ -1,595 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.stagesplit;
-
-import static android.view.Display.DEFAULT_DISPLAY;
-import static android.view.RemoteAnimationTarget.MODE_OPENING;
-
-import static com.android.wm.shell.common.ExecutorUtils.executeRemoteCallWithTaskPermission;
-import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_BOTTOM_OR_RIGHT;
-import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_TOP_OR_LEFT;
-import static com.android.wm.shell.splitscreen.SplitScreen.STAGE_TYPE_UNDEFINED;
-
-import android.app.ActivityManager;
-import android.app.ActivityTaskManager;
-import android.app.PendingIntent;
-import android.content.ActivityNotFoundException;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.LauncherApps;
-import android.graphics.Rect;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.os.UserHandle;
-import android.util.ArrayMap;
-import android.util.Slog;
-import android.view.IRemoteAnimationFinishedCallback;
-import android.view.RemoteAnimationAdapter;
-import android.view.RemoteAnimationTarget;
-import android.view.SurfaceControl;
-import android.view.SurfaceSession;
-import android.view.WindowManager;
-import android.window.RemoteTransition;
-import android.window.WindowContainerTransaction;
-
-import androidx.annotation.BinderThread;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-import com.android.internal.logging.InstanceId;
-import com.android.internal.util.FrameworkStatsLog;
-import com.android.wm.shell.RootTaskDisplayAreaOrganizer;
-import com.android.wm.shell.ShellTaskOrganizer;
-import com.android.wm.shell.common.DisplayImeController;
-import com.android.wm.shell.common.DisplayInsetsController;
-import com.android.wm.shell.common.RemoteCallable;
-import com.android.wm.shell.common.ShellExecutor;
-import com.android.wm.shell.common.SyncTransactionQueue;
-import com.android.wm.shell.common.TransactionPool;
-import com.android.wm.shell.common.annotations.ExternalThread;
-import com.android.wm.shell.common.split.SplitScreenConstants.SplitPosition;
-import com.android.wm.shell.draganddrop.DragAndDropPolicy;
-import com.android.wm.shell.transition.LegacyTransitions;
-import com.android.wm.shell.transition.Transitions;
-
-import java.io.PrintWriter;
-import java.util.Arrays;
-import java.util.Optional;
-import java.util.concurrent.Executor;
-
-import javax.inject.Provider;
-
-/**
- * Class manages split-screen multitasking mode and implements the main interface
- * {@link SplitScreen}.
- * @see StageCoordinator
- */
-// TODO(b/198577848): Implement split screen flicker test to consolidate CUJ of split screen.
-public class SplitScreenController implements DragAndDropPolicy.Starter,
-        RemoteCallable<SplitScreenController> {
-    private static final String TAG = SplitScreenController.class.getSimpleName();
-
-    private final ShellTaskOrganizer mTaskOrganizer;
-    private final SyncTransactionQueue mSyncQueue;
-    private final Context mContext;
-    private final RootTaskDisplayAreaOrganizer mRootTDAOrganizer;
-    private final ShellExecutor mMainExecutor;
-    private final SplitScreenImpl mImpl = new SplitScreenImpl();
-    private final DisplayImeController mDisplayImeController;
-    private final DisplayInsetsController mDisplayInsetsController;
-    private final Transitions mTransitions;
-    private final TransactionPool mTransactionPool;
-    private final SplitscreenEventLogger mLogger;
-    private final Provider<Optional<StageTaskUnfoldController>> mUnfoldControllerProvider;
-
-    private StageCoordinator mStageCoordinator;
-
-    public SplitScreenController(ShellTaskOrganizer shellTaskOrganizer,
-            SyncTransactionQueue syncQueue, Context context,
-            RootTaskDisplayAreaOrganizer rootTDAOrganizer,
-            ShellExecutor mainExecutor, DisplayImeController displayImeController,
-            DisplayInsetsController displayInsetsController,
-            Transitions transitions, TransactionPool transactionPool,
-            Provider<Optional<StageTaskUnfoldController>> unfoldControllerProvider) {
-        mTaskOrganizer = shellTaskOrganizer;
-        mSyncQueue = syncQueue;
-        mContext = context;
-        mRootTDAOrganizer = rootTDAOrganizer;
-        mMainExecutor = mainExecutor;
-        mDisplayImeController = displayImeController;
-        mDisplayInsetsController = displayInsetsController;
-        mTransitions = transitions;
-        mTransactionPool = transactionPool;
-        mUnfoldControllerProvider = unfoldControllerProvider;
-        mLogger = new SplitscreenEventLogger();
-    }
-
-    public SplitScreen asSplitScreen() {
-        return mImpl;
-    }
-
-    @Override
-    public Context getContext() {
-        return mContext;
-    }
-
-    @Override
-    public ShellExecutor getRemoteCallExecutor() {
-        return mMainExecutor;
-    }
-
-    public void onOrganizerRegistered() {
-        if (mStageCoordinator == null) {
-            // TODO: Multi-display
-            mStageCoordinator = new StageCoordinator(mContext, DEFAULT_DISPLAY, mSyncQueue,
-                    mRootTDAOrganizer, mTaskOrganizer, mDisplayImeController,
-                    mDisplayInsetsController, mTransitions, mTransactionPool, mLogger,
-                    mUnfoldControllerProvider);
-        }
-    }
-
-    public boolean isSplitScreenVisible() {
-        return mStageCoordinator.isSplitScreenVisible();
-    }
-
-    public boolean moveToSideStage(int taskId, @SplitPosition int sideStagePosition) {
-        final ActivityManager.RunningTaskInfo task = mTaskOrganizer.getRunningTaskInfo(taskId);
-        if (task == null) {
-            throw new IllegalArgumentException("Unknown taskId" + taskId);
-        }
-        return moveToSideStage(task, sideStagePosition);
-    }
-
-    public boolean moveToSideStage(ActivityManager.RunningTaskInfo task,
-            @SplitPosition int sideStagePosition) {
-        return mStageCoordinator.moveToSideStage(task, sideStagePosition);
-    }
-
-    public boolean removeFromSideStage(int taskId) {
-        return mStageCoordinator.removeFromSideStage(taskId);
-    }
-
-    public void setSideStageOutline(boolean enable) {
-        mStageCoordinator.setSideStageOutline(enable);
-    }
-
-    public void setSideStagePosition(@SplitPosition int sideStagePosition) {
-        mStageCoordinator.setSideStagePosition(sideStagePosition, null /* wct */);
-    }
-
-    public void setSideStageVisibility(boolean visible) {
-        mStageCoordinator.setSideStageVisibility(visible);
-    }
-
-    public void enterSplitScreen(int taskId, boolean leftOrTop) {
-        moveToSideStage(taskId,
-                leftOrTop ? SPLIT_POSITION_TOP_OR_LEFT : SPLIT_POSITION_BOTTOM_OR_RIGHT);
-    }
-
-    public void exitSplitScreen(int toTopTaskId, int exitReason) {
-        mStageCoordinator.exitSplitScreen(toTopTaskId, exitReason);
-    }
-
-    public void onKeyguardOccludedChanged(boolean occluded) {
-        mStageCoordinator.onKeyguardOccludedChanged(occluded);
-    }
-
-    public void onKeyguardVisibilityChanged(boolean showing) {
-        mStageCoordinator.onKeyguardVisibilityChanged(showing);
-    }
-
-    public void exitSplitScreenOnHide(boolean exitSplitScreenOnHide) {
-        mStageCoordinator.exitSplitScreenOnHide(exitSplitScreenOnHide);
-    }
-
-    public void getStageBounds(Rect outTopOrLeftBounds, Rect outBottomOrRightBounds) {
-        mStageCoordinator.getStageBounds(outTopOrLeftBounds, outBottomOrRightBounds);
-    }
-
-    public void registerSplitScreenListener(SplitScreen.SplitScreenListener listener) {
-        mStageCoordinator.registerSplitScreenListener(listener);
-    }
-
-    public void unregisterSplitScreenListener(SplitScreen.SplitScreenListener listener) {
-        mStageCoordinator.unregisterSplitScreenListener(listener);
-    }
-
-    public void startTask(int taskId, @SplitPosition int position, @Nullable Bundle options) {
-        options = mStageCoordinator.resolveStartStage(STAGE_TYPE_UNDEFINED, position, options,
-                null /* wct */);
-
-        try {
-            ActivityTaskManager.getService().startActivityFromRecents(taskId, options);
-        } catch (RemoteException e) {
-            Slog.e(TAG, "Failed to launch task", e);
-        }
-    }
-
-    public void startShortcut(String packageName, String shortcutId, @SplitPosition int position,
-            @Nullable Bundle options, UserHandle user) {
-        options = mStageCoordinator.resolveStartStage(STAGE_TYPE_UNDEFINED, position, options,
-                null /* wct */);
-
-        try {
-            LauncherApps launcherApps =
-                    mContext.getSystemService(LauncherApps.class);
-            launcherApps.startShortcut(packageName, shortcutId, null /* sourceBounds */,
-                    options, user);
-        } catch (ActivityNotFoundException e) {
-            Slog.e(TAG, "Failed to launch shortcut", e);
-        }
-    }
-
-    public void startIntent(PendingIntent intent, Intent fillInIntent, @SplitPosition int position,
-            @Nullable Bundle options) {
-        if (!Transitions.ENABLE_SHELL_TRANSITIONS) {
-            startIntentLegacy(intent, fillInIntent, position, options);
-            return;
-        }
-        mStageCoordinator.startIntent(intent, fillInIntent, STAGE_TYPE_UNDEFINED, position, options,
-                null /* remote */);
-    }
-
-    private void startIntentLegacy(PendingIntent intent, Intent fillInIntent,
-            @SplitPosition int position, @Nullable Bundle options) {
-        LegacyTransitions.ILegacyTransition transition = new LegacyTransitions.ILegacyTransition() {
-            @Override
-            public void onAnimationStart(int transit, RemoteAnimationTarget[] apps,
-                    RemoteAnimationTarget[] wallpapers, RemoteAnimationTarget[] nonApps,
-                    IRemoteAnimationFinishedCallback finishedCallback,
-                    SurfaceControl.Transaction t) {
-                mStageCoordinator.updateSurfaceBounds(null /* layout */, t,
-                        false /* applyResizingOffset */);
-
-                if (apps != null) {
-                    for (int i = 0; i < apps.length; ++i) {
-                        if (apps[i].mode == MODE_OPENING) {
-                            t.show(apps[i].leash);
-                        }
-                    }
-                }
-
-                t.apply();
-                if (finishedCallback != null) {
-                    try {
-                        finishedCallback.onAnimationFinished();
-                    } catch (RemoteException e) {
-                        Slog.e(TAG, "Error finishing legacy transition: ", e);
-                    }
-                }
-            }
-        };
-        WindowContainerTransaction wct = new WindowContainerTransaction();
-        options = mStageCoordinator.resolveStartStage(STAGE_TYPE_UNDEFINED, position, options, wct);
-        wct.sendPendingIntent(intent, fillInIntent, options);
-        mSyncQueue.queue(transition, WindowManager.TRANSIT_OPEN, wct);
-    }
-
-    RemoteAnimationTarget[] onGoingToRecentsLegacy(boolean cancel, RemoteAnimationTarget[] apps) {
-        if (!isSplitScreenVisible()) return null;
-        final SurfaceControl.Builder builder = new SurfaceControl.Builder(new SurfaceSession())
-                .setContainerLayer()
-                .setName("RecentsAnimationSplitTasks")
-                .setHidden(false)
-                .setCallsite("SplitScreenController#onGoingtoRecentsLegacy");
-        mRootTDAOrganizer.attachToDisplayArea(DEFAULT_DISPLAY, builder);
-        SurfaceControl sc = builder.build();
-        SurfaceControl.Transaction transaction = new SurfaceControl.Transaction();
-
-        // Ensure that we order these in the parent in the right z-order as their previous order
-        Arrays.sort(apps, (a1, a2) -> a1.prefixOrderIndex - a2.prefixOrderIndex);
-        int layer = 1;
-        for (RemoteAnimationTarget appTarget : apps) {
-            transaction.reparent(appTarget.leash, sc);
-            transaction.setPosition(appTarget.leash, appTarget.screenSpaceBounds.left,
-                    appTarget.screenSpaceBounds.top);
-            transaction.setLayer(appTarget.leash, layer++);
-        }
-        transaction.apply();
-        transaction.close();
-        return new RemoteAnimationTarget[]{
-                mStageCoordinator.getDividerBarLegacyTarget(),
-                mStageCoordinator.getOutlineLegacyTarget()};
-    }
-
-    /**
-     * Sets drag info to be logged when splitscreen is entered.
-     */
-    public void logOnDroppedToSplit(@SplitPosition int position, InstanceId dragSessionId) {
-        mStageCoordinator.logOnDroppedToSplit(position, dragSessionId);
-    }
-
-    public void dump(@NonNull PrintWriter pw, String prefix) {
-        pw.println(prefix + TAG);
-        if (mStageCoordinator != null) {
-            mStageCoordinator.dump(pw, prefix);
-        }
-    }
-
-    /**
-     * The interface for calls from outside the Shell, within the host process.
-     */
-    @ExternalThread
-    private class SplitScreenImpl implements SplitScreen {
-        private ISplitScreenImpl mISplitScreen;
-        private final ArrayMap<SplitScreenListener, Executor> mExecutors = new ArrayMap<>();
-        private final SplitScreenListener mListener = new SplitScreenListener() {
-            @Override
-            public void onStagePositionChanged(int stage, int position) {
-                for (int i = 0; i < mExecutors.size(); i++) {
-                    final int index = i;
-                    mExecutors.valueAt(index).execute(() -> {
-                        mExecutors.keyAt(index).onStagePositionChanged(stage, position);
-                    });
-                }
-            }
-
-            @Override
-            public void onTaskStageChanged(int taskId, int stage, boolean visible) {
-                for (int i = 0; i < mExecutors.size(); i++) {
-                    final int index = i;
-                    mExecutors.valueAt(index).execute(() -> {
-                        mExecutors.keyAt(index).onTaskStageChanged(taskId, stage, visible);
-                    });
-                }
-            }
-
-            @Override
-            public void onSplitVisibilityChanged(boolean visible) {
-                for (int i = 0; i < mExecutors.size(); i++) {
-                    final int index = i;
-                    mExecutors.valueAt(index).execute(() -> {
-                        mExecutors.keyAt(index).onSplitVisibilityChanged(visible);
-                    });
-                }
-            }
-        };
-
-        @Override
-        public ISplitScreen createExternalInterface() {
-            if (mISplitScreen != null) {
-                mISplitScreen.invalidate();
-            }
-            mISplitScreen = new ISplitScreenImpl(SplitScreenController.this);
-            return mISplitScreen;
-        }
-
-        @Override
-        public void onKeyguardOccludedChanged(boolean occluded) {
-            mMainExecutor.execute(() -> {
-                SplitScreenController.this.onKeyguardOccludedChanged(occluded);
-            });
-        }
-
-        @Override
-        public void registerSplitScreenListener(SplitScreenListener listener, Executor executor) {
-            if (mExecutors.containsKey(listener)) return;
-
-            mMainExecutor.execute(() -> {
-                if (mExecutors.size() == 0) {
-                    SplitScreenController.this.registerSplitScreenListener(mListener);
-                }
-
-                mExecutors.put(listener, executor);
-            });
-
-            executor.execute(() -> {
-                mStageCoordinator.sendStatusToListener(listener);
-            });
-        }
-
-        @Override
-        public void unregisterSplitScreenListener(SplitScreenListener listener) {
-            mMainExecutor.execute(() -> {
-                mExecutors.remove(listener);
-
-                if (mExecutors.size() == 0) {
-                    SplitScreenController.this.unregisterSplitScreenListener(mListener);
-                }
-            });
-        }
-
-        @Override
-        public void onKeyguardVisibilityChanged(boolean showing) {
-            mMainExecutor.execute(() -> {
-                SplitScreenController.this.onKeyguardVisibilityChanged(showing);
-            });
-        }
-    }
-
-    /**
-     * The interface for calls from outside the host process.
-     */
-    @BinderThread
-    private static class ISplitScreenImpl extends ISplitScreen.Stub {
-        private SplitScreenController mController;
-        private ISplitScreenListener mListener;
-        private final SplitScreen.SplitScreenListener mSplitScreenListener =
-                new SplitScreen.SplitScreenListener() {
-                    @Override
-                    public void onStagePositionChanged(int stage, int position) {
-                        try {
-                            if (mListener != null) {
-                                mListener.onStagePositionChanged(stage, position);
-                            }
-                        } catch (RemoteException e) {
-                            Slog.e(TAG, "onStagePositionChanged", e);
-                        }
-                    }
-
-                    @Override
-                    public void onTaskStageChanged(int taskId, int stage, boolean visible) {
-                        try {
-                            if (mListener != null) {
-                                mListener.onTaskStageChanged(taskId, stage, visible);
-                            }
-                        } catch (RemoteException e) {
-                            Slog.e(TAG, "onTaskStageChanged", e);
-                        }
-                    }
-                };
-        private final IBinder.DeathRecipient mListenerDeathRecipient =
-                new IBinder.DeathRecipient() {
-                    @Override
-                    @BinderThread
-                    public void binderDied() {
-                        final SplitScreenController controller = mController;
-                        controller.getRemoteCallExecutor().execute(() -> {
-                            mListener = null;
-                            controller.unregisterSplitScreenListener(mSplitScreenListener);
-                        });
-                    }
-                };
-
-        public ISplitScreenImpl(SplitScreenController controller) {
-            mController = controller;
-        }
-
-        /**
-         * Invalidates this instance, preventing future calls from updating the controller.
-         */
-        void invalidate() {
-            mController = null;
-        }
-
-        @Override
-        public void registerSplitScreenListener(ISplitScreenListener listener) {
-            executeRemoteCallWithTaskPermission(mController, "registerSplitScreenListener",
-                    (controller) -> {
-                        if (mListener != null) {
-                            mListener.asBinder().unlinkToDeath(mListenerDeathRecipient,
-                                    0 /* flags */);
-                        }
-                        if (listener != null) {
-                            try {
-                                listener.asBinder().linkToDeath(mListenerDeathRecipient,
-                                        0 /* flags */);
-                            } catch (RemoteException e) {
-                                Slog.e(TAG, "Failed to link to death");
-                                return;
-                            }
-                        }
-                        mListener = listener;
-                        controller.registerSplitScreenListener(mSplitScreenListener);
-                    });
-        }
-
-        @Override
-        public void unregisterSplitScreenListener(ISplitScreenListener listener) {
-            executeRemoteCallWithTaskPermission(mController, "unregisterSplitScreenListener",
-                    (controller) -> {
-                        if (mListener != null) {
-                            mListener.asBinder().unlinkToDeath(mListenerDeathRecipient,
-                                    0 /* flags */);
-                        }
-                        mListener = null;
-                        controller.unregisterSplitScreenListener(mSplitScreenListener);
-                    });
-        }
-
-        @Override
-        public void exitSplitScreen(int toTopTaskId) {
-            executeRemoteCallWithTaskPermission(mController, "exitSplitScreen",
-                    (controller) -> {
-                        controller.exitSplitScreen(toTopTaskId,
-                                FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__UNKNOWN_EXIT);
-                    });
-        }
-
-        @Override
-        public void exitSplitScreenOnHide(boolean exitSplitScreenOnHide) {
-            executeRemoteCallWithTaskPermission(mController, "exitSplitScreenOnHide",
-                    (controller) -> {
-                        controller.exitSplitScreenOnHide(exitSplitScreenOnHide);
-                    });
-        }
-
-        @Override
-        public void setSideStageVisibility(boolean visible) {
-            executeRemoteCallWithTaskPermission(mController, "setSideStageVisibility",
-                    (controller) -> {
-                        controller.setSideStageVisibility(visible);
-                    });
-        }
-
-        @Override
-        public void removeFromSideStage(int taskId) {
-            executeRemoteCallWithTaskPermission(mController, "removeFromSideStage",
-                    (controller) -> {
-                        controller.removeFromSideStage(taskId);
-                    });
-        }
-
-        @Override
-        public void startTask(int taskId, int stage, int position, @Nullable Bundle options) {
-            executeRemoteCallWithTaskPermission(mController, "startTask",
-                    (controller) -> {
-                        controller.startTask(taskId, position, options);
-                    });
-        }
-
-        @Override
-        public void startTasksWithLegacyTransition(int mainTaskId, @Nullable Bundle mainOptions,
-                int sideTaskId, @Nullable Bundle sideOptions, @SplitPosition int sidePosition,
-                RemoteAnimationAdapter adapter) {
-            executeRemoteCallWithTaskPermission(mController, "startTasks",
-                    (controller) -> controller.mStageCoordinator.startTasksWithLegacyTransition(
-                            mainTaskId, mainOptions, sideTaskId, sideOptions, sidePosition,
-                            adapter));
-        }
-
-        @Override
-        public void startTasks(int mainTaskId, @Nullable Bundle mainOptions,
-                int sideTaskId, @Nullable Bundle sideOptions,
-                @SplitPosition int sidePosition,
-                @Nullable RemoteTransition remoteTransition) {
-            executeRemoteCallWithTaskPermission(mController, "startTasks",
-                    (controller) -> controller.mStageCoordinator.startTasks(mainTaskId, mainOptions,
-                            sideTaskId, sideOptions, sidePosition, remoteTransition));
-        }
-
-        @Override
-        public void startShortcut(String packageName, String shortcutId, int stage, int position,
-                @Nullable Bundle options, UserHandle user) {
-            executeRemoteCallWithTaskPermission(mController, "startShortcut",
-                    (controller) -> {
-                        controller.startShortcut(packageName, shortcutId, position,
-                                options, user);
-                    });
-        }
-
-        @Override
-        public void startIntent(PendingIntent intent, Intent fillInIntent, int stage, int position,
-                @Nullable Bundle options) {
-            executeRemoteCallWithTaskPermission(mController, "startIntent",
-                    (controller) -> {
-                        controller.startIntent(intent, fillInIntent, position, options);
-                    });
-        }
-
-        @Override
-        public RemoteAnimationTarget[] onGoingToRecentsLegacy(boolean cancel,
-                RemoteAnimationTarget[] apps) {
-            final RemoteAnimationTarget[][] out = new RemoteAnimationTarget[][]{null};
-            executeRemoteCallWithTaskPermission(mController, "onGoingToRecentsLegacy",
-                    (controller) -> out[0] = controller.onGoingToRecentsLegacy(cancel, apps),
-                    true /* blocking */);
-            return out[0];
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/SplitScreenTransitions.java b/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/SplitScreenTransitions.java
deleted file mode 100644
index 0183654..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/SplitScreenTransitions.java
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.stagesplit;
-
-import static android.view.WindowManager.TRANSIT_CHANGE;
-import static android.view.WindowManager.TRANSIT_CLOSE;
-import static android.view.WindowManager.TRANSIT_OPEN;
-import static android.view.WindowManager.TRANSIT_TO_BACK;
-import static android.view.WindowManager.TRANSIT_TO_FRONT;
-import static android.window.TransitionInfo.FLAG_FIRST_CUSTOM;
-
-import static com.android.wm.shell.transition.Transitions.TRANSIT_SPLIT_DISMISS_SNAP;
-import static com.android.wm.shell.transition.Transitions.isOpeningType;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.graphics.Rect;
-import android.os.IBinder;
-import android.view.SurfaceControl;
-import android.view.WindowManager;
-import android.window.RemoteTransition;
-import android.window.TransitionInfo;
-import android.window.WindowContainerToken;
-import android.window.WindowContainerTransaction;
-
-import com.android.wm.shell.common.TransactionPool;
-import com.android.wm.shell.transition.OneShotRemoteHandler;
-import com.android.wm.shell.transition.Transitions;
-
-import java.util.ArrayList;
-
-/** Manages transition animations for split-screen. */
-class SplitScreenTransitions {
-    private static final String TAG = "SplitScreenTransitions";
-
-    /** Flag applied to a transition change to identify it as a divider bar for animation. */
-    public static final int FLAG_IS_DIVIDER_BAR = FLAG_FIRST_CUSTOM;
-
-    private final TransactionPool mTransactionPool;
-    private final Transitions mTransitions;
-    private final Runnable mOnFinish;
-
-    IBinder mPendingDismiss = null;
-    IBinder mPendingEnter = null;
-
-    private IBinder mAnimatingTransition = null;
-    private OneShotRemoteHandler mRemoteHandler = null;
-
-    private Transitions.TransitionFinishCallback mRemoteFinishCB = (wct, wctCB) -> {
-        if (wct != null || wctCB != null) {
-            throw new UnsupportedOperationException("finish transactions not supported yet.");
-        }
-        onFinish();
-    };
-
-    /** Keeps track of currently running animations */
-    private final ArrayList<Animator> mAnimations = new ArrayList<>();
-
-    private Transitions.TransitionFinishCallback mFinishCallback = null;
-    private SurfaceControl.Transaction mFinishTransaction;
-
-    SplitScreenTransitions(@NonNull TransactionPool pool, @NonNull Transitions transitions,
-            @NonNull Runnable onFinishCallback) {
-        mTransactionPool = pool;
-        mTransitions = transitions;
-        mOnFinish = onFinishCallback;
-    }
-
-    void playAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
-            @NonNull SurfaceControl.Transaction startTransaction,
-            @NonNull SurfaceControl.Transaction finishTransaction,
-            @NonNull Transitions.TransitionFinishCallback finishCallback,
-            @NonNull WindowContainerToken mainRoot, @NonNull WindowContainerToken sideRoot) {
-        mFinishCallback = finishCallback;
-        mAnimatingTransition = transition;
-        if (mRemoteHandler != null) {
-            mRemoteHandler.startAnimation(transition, info, startTransaction, finishTransaction,
-                    mRemoteFinishCB);
-            mRemoteHandler = null;
-            return;
-        }
-        playInternalAnimation(transition, info, startTransaction, mainRoot, sideRoot);
-    }
-
-    private void playInternalAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
-            @NonNull SurfaceControl.Transaction t, @NonNull WindowContainerToken mainRoot,
-            @NonNull WindowContainerToken sideRoot) {
-        mFinishTransaction = mTransactionPool.acquire();
-
-        // Play some place-holder fade animations
-        for (int i = info.getChanges().size() - 1; i >= 0; --i) {
-            final TransitionInfo.Change change = info.getChanges().get(i);
-            final SurfaceControl leash = change.getLeash();
-            final int mode = info.getChanges().get(i).getMode();
-
-            if (mode == TRANSIT_CHANGE) {
-                if (change.getParent() != null) {
-                    // This is probably reparented, so we want the parent to be immediately visible
-                    final TransitionInfo.Change parentChange = info.getChange(change.getParent());
-                    t.show(parentChange.getLeash());
-                    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.getRootLeash());
-                    t.setLayer(leash, 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());
-                startBounds.offset(-info.getRootOffset().x, -info.getRootOffset().y);
-                endBounds.offset(-info.getRootOffset().x, -info.getRootOffset().y);
-                startExampleResizeAnimation(leash, startBounds, endBounds);
-            }
-            if (change.getParent() != null) {
-                continue;
-            }
-
-            if (transition == mPendingEnter && (mainRoot.equals(change.getContainer())
-                    || sideRoot.equals(change.getContainer()))) {
-                t.setWindowCrop(leash, change.getStartAbsBounds().width(),
-                        change.getStartAbsBounds().height());
-            }
-            boolean isOpening = isOpeningType(info.getType());
-            if (isOpening && (mode == TRANSIT_OPEN || mode == TRANSIT_TO_FRONT)) {
-                // fade in
-                startExampleAnimation(leash, true /* show */);
-            } else if (!isOpening && (mode == TRANSIT_CLOSE || mode == TRANSIT_TO_BACK)) {
-                // fade out
-                if (info.getType() == TRANSIT_SPLIT_DISMISS_SNAP) {
-                    // Dismissing via snap-to-top/bottom means that the dismissed task is already
-                    // not-visible (usually cropped to oblivion) so immediately set its alpha to 0
-                    // and don't animate it so it doesn't pop-in when reparented.
-                    t.setAlpha(leash, 0.f);
-                } else {
-                    startExampleAnimation(leash, false /* show */);
-                }
-            }
-        }
-        t.apply();
-        onFinish();
-    }
-
-    /** Starts a transition to enter split with a remote transition animator. */
-    IBinder startEnterTransition(@WindowManager.TransitionType int transitType,
-            @NonNull WindowContainerTransaction wct, @Nullable RemoteTransition remoteTransition,
-            @NonNull Transitions.TransitionHandler handler) {
-        if (remoteTransition != null) {
-            // Wrapping it for ease-of-use (OneShot handles all the binder linking/death stuff)
-            mRemoteHandler = new OneShotRemoteHandler(
-                    mTransitions.getMainExecutor(), remoteTransition);
-        }
-        final IBinder transition = mTransitions.startTransition(transitType, wct, handler);
-        mPendingEnter = transition;
-        if (mRemoteHandler != null) {
-            mRemoteHandler.setTransition(transition);
-        }
-        return transition;
-    }
-
-    /** Starts a transition for dismissing split after dragging the divider to a screen edge */
-    IBinder startSnapToDismiss(@NonNull WindowContainerTransaction wct,
-            @NonNull Transitions.TransitionHandler handler) {
-        final IBinder transition = mTransitions.startTransition(
-                TRANSIT_SPLIT_DISMISS_SNAP, wct, handler);
-        mPendingDismiss = transition;
-        return transition;
-    }
-
-    void onFinish() {
-        if (!mAnimations.isEmpty()) return;
-        mOnFinish.run();
-        if (mFinishTransaction != null) {
-            mFinishTransaction.apply();
-            mTransactionPool.release(mFinishTransaction);
-            mFinishTransaction = null;
-        }
-        mFinishCallback.onTransitionFinished(null /* wct */, null /* wctCB */);
-        mFinishCallback = null;
-        if (mAnimatingTransition == mPendingEnter) {
-            mPendingEnter = null;
-        }
-        if (mAnimatingTransition == mPendingDismiss) {
-            mPendingDismiss = null;
-        }
-        mAnimatingTransition = null;
-    }
-
-    // TODO(shell-transitions): real animations
-    private void startExampleAnimation(@NonNull SurfaceControl leash, boolean show) {
-        final float end = show ? 1.f : 0.f;
-        final float start = 1.f - end;
-        final SurfaceControl.Transaction transaction = mTransactionPool.acquire();
-        final ValueAnimator va = ValueAnimator.ofFloat(start, end);
-        va.setDuration(500);
-        va.addUpdateListener(animation -> {
-            float fraction = animation.getAnimatedFraction();
-            transaction.setAlpha(leash, start * (1.f - fraction) + end * fraction);
-            transaction.apply();
-        });
-        final Runnable finisher = () -> {
-            transaction.setAlpha(leash, end);
-            transaction.apply();
-            mTransactionPool.release(transaction);
-            mTransitions.getMainExecutor().execute(() -> {
-                mAnimations.remove(va);
-                onFinish();
-            });
-        };
-        va.addListener(new Animator.AnimatorListener() {
-            @Override
-            public void onAnimationStart(Animator animation) { }
-
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                finisher.run();
-            }
-
-            @Override
-            public void onAnimationCancel(Animator animation) {
-                finisher.run();
-            }
-
-            @Override
-            public void onAnimationRepeat(Animator animation) { }
-        });
-        mAnimations.add(va);
-        mTransitions.getAnimExecutor().execute(va::start);
-    }
-
-    // TODO(shell-transitions): real animations
-    private void startExampleResizeAnimation(@NonNull SurfaceControl leash,
-            @NonNull Rect startBounds, @NonNull Rect endBounds) {
-        final SurfaceControl.Transaction transaction = mTransactionPool.acquire();
-        final ValueAnimator va = ValueAnimator.ofFloat(0.f, 1.f);
-        va.setDuration(500);
-        va.addUpdateListener(animation -> {
-            float fraction = animation.getAnimatedFraction();
-            transaction.setWindowCrop(leash,
-                    (int) (startBounds.width() * (1.f - fraction) + endBounds.width() * fraction),
-                    (int) (startBounds.height() * (1.f - fraction)
-                            + endBounds.height() * fraction));
-            transaction.setPosition(leash,
-                    startBounds.left * (1.f - fraction) + endBounds.left * fraction,
-                    startBounds.top * (1.f - fraction) + endBounds.top * fraction);
-            transaction.apply();
-        });
-        final Runnable finisher = () -> {
-            transaction.setWindowCrop(leash, 0, 0);
-            transaction.setPosition(leash, endBounds.left, endBounds.top);
-            transaction.apply();
-            mTransactionPool.release(transaction);
-            mTransitions.getMainExecutor().execute(() -> {
-                mAnimations.remove(va);
-                onFinish();
-            });
-        };
-        va.addListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                finisher.run();
-            }
-
-            @Override
-            public void onAnimationCancel(Animator animation) {
-                finisher.run();
-            }
-        });
-        mAnimations.add(va);
-        mTransitions.getAnimExecutor().execute(va::start);
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/SplitscreenEventLogger.java b/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/SplitscreenEventLogger.java
deleted file mode 100644
index e185039..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/SplitscreenEventLogger.java
+++ /dev/null
@@ -1,324 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.stagesplit;
-
-import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__ENTER_REASON__OVERVIEW;
-import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_TOP_OR_LEFT;
-import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_UNDEFINED;
-
-import com.android.internal.logging.InstanceId;
-import com.android.internal.logging.InstanceIdSequence;
-import com.android.internal.util.FrameworkStatsLog;
-import com.android.wm.shell.common.split.SplitScreenConstants.SplitPosition;
-
-/**
- * Helper class that to log Drag & Drop UIEvents for a single session, see also go/uievent
- */
-public class SplitscreenEventLogger {
-
-    // Used to generate instance ids for this drag if one is not provided
-    private final InstanceIdSequence mIdSequence;
-
-    // The instance id for the current splitscreen session (from start to end)
-    private InstanceId mLoggerSessionId;
-
-    // Drag info
-    private @SplitPosition int mDragEnterPosition;
-    private InstanceId mDragEnterSessionId;
-
-    // For deduping async events
-    private int mLastMainStagePosition = -1;
-    private int mLastMainStageUid = -1;
-    private int mLastSideStagePosition = -1;
-    private int mLastSideStageUid = -1;
-    private float mLastSplitRatio = -1f;
-
-    public SplitscreenEventLogger() {
-        mIdSequence = new InstanceIdSequence(Integer.MAX_VALUE);
-    }
-
-    /**
-     * Return whether a splitscreen session has started.
-     */
-    public boolean hasStartedSession() {
-        return mLoggerSessionId != null;
-    }
-
-    /**
-     * May be called before logEnter() to indicate that the session was started from a drag.
-     */
-    public void enterRequestedByDrag(@SplitPosition int position, InstanceId dragSessionId) {
-        mDragEnterPosition = position;
-        mDragEnterSessionId = dragSessionId;
-    }
-
-    /**
-     * Logs when the user enters splitscreen.
-     */
-    public void logEnter(float splitRatio,
-            @SplitPosition int mainStagePosition, int mainStageUid,
-            @SplitPosition int sideStagePosition, int sideStageUid,
-            boolean isLandscape) {
-        mLoggerSessionId = mIdSequence.newInstanceId();
-        int enterReason = mDragEnterPosition != SPLIT_POSITION_UNDEFINED
-                ? getDragEnterReasonFromSplitPosition(mDragEnterPosition, isLandscape)
-                : SPLITSCREEN_UICHANGED__ENTER_REASON__OVERVIEW;
-        updateMainStageState(getMainStagePositionFromSplitPosition(mainStagePosition, isLandscape),
-                mainStageUid);
-        updateSideStageState(getSideStagePositionFromSplitPosition(sideStagePosition, isLandscape),
-                sideStageUid);
-        updateSplitRatioState(splitRatio);
-        FrameworkStatsLog.write(FrameworkStatsLog.SPLITSCREEN_UI_CHANGED,
-                FrameworkStatsLog.SPLITSCREEN_UICHANGED__ACTION__ENTER,
-                enterReason,
-                0 /* exitReason */,
-                splitRatio,
-                mLastMainStagePosition,
-                mLastMainStageUid,
-                mLastSideStagePosition,
-                mLastSideStageUid,
-                mDragEnterSessionId != null ? mDragEnterSessionId.getId() : 0,
-                mLoggerSessionId.getId());
-    }
-
-    /**
-     * Logs when the user exits splitscreen.  Only one of the main or side stages should be
-     * specified to indicate which position was focused as a part of exiting (both can be unset).
-     */
-    public void logExit(int exitReason, @SplitPosition int mainStagePosition, int mainStageUid,
-            @SplitPosition int sideStagePosition, int sideStageUid, boolean isLandscape) {
-        if (mLoggerSessionId == null) {
-            // Ignore changes until we've started logging the session
-            return;
-        }
-        if ((mainStagePosition != SPLIT_POSITION_UNDEFINED
-                && sideStagePosition != SPLIT_POSITION_UNDEFINED)
-                        || (mainStageUid != 0 && sideStageUid != 0)) {
-            throw new IllegalArgumentException("Only main or side stage should be set");
-        }
-        FrameworkStatsLog.write(FrameworkStatsLog.SPLITSCREEN_UI_CHANGED,
-                FrameworkStatsLog.SPLITSCREEN_UICHANGED__ACTION__EXIT,
-                0 /* enterReason */,
-                exitReason,
-                0f /* splitRatio */,
-                getMainStagePositionFromSplitPosition(mainStagePosition, isLandscape),
-                mainStageUid,
-                getSideStagePositionFromSplitPosition(sideStagePosition, isLandscape),
-                sideStageUid,
-                0 /* dragInstanceId */,
-                mLoggerSessionId.getId());
-
-        // Reset states
-        mLoggerSessionId = null;
-        mDragEnterPosition = SPLIT_POSITION_UNDEFINED;
-        mDragEnterSessionId = null;
-        mLastMainStagePosition = -1;
-        mLastMainStageUid = -1;
-        mLastSideStagePosition = -1;
-        mLastSideStageUid = -1;
-    }
-
-    /**
-     * Logs when an app in the main stage changes.
-     */
-    public void logMainStageAppChange(@SplitPosition int mainStagePosition, int mainStageUid,
-            boolean isLandscape) {
-        if (mLoggerSessionId == null) {
-            // Ignore changes until we've started logging the session
-            return;
-        }
-        if (!updateMainStageState(getMainStagePositionFromSplitPosition(mainStagePosition,
-                isLandscape), mainStageUid)) {
-            // Ignore if there are no user perceived changes
-            return;
-        }
-
-        FrameworkStatsLog.write(FrameworkStatsLog.SPLITSCREEN_UI_CHANGED,
-                FrameworkStatsLog.SPLITSCREEN_UICHANGED__ACTION__APP_CHANGE,
-                0 /* enterReason */,
-                0 /* exitReason */,
-                0f /* splitRatio */,
-                mLastMainStagePosition,
-                mLastMainStageUid,
-                0 /* sideStagePosition */,
-                0 /* sideStageUid */,
-                0 /* dragInstanceId */,
-                mLoggerSessionId.getId());
-    }
-
-    /**
-     * Logs when an app in the side stage changes.
-     */
-    public void logSideStageAppChange(@SplitPosition int sideStagePosition, int sideStageUid,
-            boolean isLandscape) {
-        if (mLoggerSessionId == null) {
-            // Ignore changes until we've started logging the session
-            return;
-        }
-        if (!updateSideStageState(getSideStagePositionFromSplitPosition(sideStagePosition,
-                isLandscape), sideStageUid)) {
-            // Ignore if there are no user perceived changes
-            return;
-        }
-
-        FrameworkStatsLog.write(FrameworkStatsLog.SPLITSCREEN_UI_CHANGED,
-                FrameworkStatsLog.SPLITSCREEN_UICHANGED__ACTION__APP_CHANGE,
-                0 /* enterReason */,
-                0 /* exitReason */,
-                0f /* splitRatio */,
-                0 /* mainStagePosition */,
-                0 /* mainStageUid */,
-                mLastSideStagePosition,
-                mLastSideStageUid,
-                0 /* dragInstanceId */,
-                mLoggerSessionId.getId());
-    }
-
-    /**
-     * Logs when the splitscreen ratio changes.
-     */
-    public void logResize(float splitRatio) {
-        if (mLoggerSessionId == null) {
-            // Ignore changes until we've started logging the session
-            return;
-        }
-        if (splitRatio <= 0f || splitRatio >= 1f) {
-            // Don't bother reporting resizes that end up dismissing the split, that will be logged
-            // via the exit event
-            return;
-        }
-        if (!updateSplitRatioState(splitRatio)) {
-            // Ignore if there are no user perceived changes
-            return;
-        }
-        FrameworkStatsLog.write(FrameworkStatsLog.SPLITSCREEN_UI_CHANGED,
-                FrameworkStatsLog.SPLITSCREEN_UICHANGED__ACTION__RESIZE,
-                0 /* enterReason */,
-                0 /* exitReason */,
-                mLastSplitRatio,
-                0 /* mainStagePosition */, 0 /* mainStageUid */,
-                0 /* sideStagePosition */, 0 /* sideStageUid */,
-                0 /* dragInstanceId */,
-                mLoggerSessionId.getId());
-    }
-
-    /**
-     * Logs when the apps in splitscreen are swapped.
-     */
-    public void logSwap(@SplitPosition int mainStagePosition, int mainStageUid,
-            @SplitPosition int sideStagePosition, int sideStageUid, boolean isLandscape) {
-        if (mLoggerSessionId == null) {
-            // Ignore changes until we've started logging the session
-            return;
-        }
-
-        updateMainStageState(getMainStagePositionFromSplitPosition(mainStagePosition, isLandscape),
-                mainStageUid);
-        updateSideStageState(getSideStagePositionFromSplitPosition(sideStagePosition, isLandscape),
-                sideStageUid);
-        FrameworkStatsLog.write(FrameworkStatsLog.SPLITSCREEN_UI_CHANGED,
-                FrameworkStatsLog.SPLITSCREEN_UICHANGED__ACTION__SWAP,
-                0 /* enterReason */,
-                0 /* exitReason */,
-                0f /* splitRatio */,
-                mLastMainStagePosition,
-                mLastMainStageUid,
-                mLastSideStagePosition,
-                mLastSideStageUid,
-                0 /* dragInstanceId */,
-                mLoggerSessionId.getId());
-    }
-
-    private boolean updateMainStageState(int mainStagePosition, int mainStageUid) {
-        boolean changed = (mLastMainStagePosition != mainStagePosition)
-                || (mLastMainStageUid != mainStageUid);
-        if (!changed) {
-            return false;
-        }
-
-        mLastMainStagePosition = mainStagePosition;
-        mLastMainStageUid = mainStageUid;
-        return true;
-    }
-
-    private boolean updateSideStageState(int sideStagePosition, int sideStageUid) {
-        boolean changed = (mLastSideStagePosition != sideStagePosition)
-                || (mLastSideStageUid != sideStageUid);
-        if (!changed) {
-            return false;
-        }
-
-        mLastSideStagePosition = sideStagePosition;
-        mLastSideStageUid = sideStageUid;
-        return true;
-    }
-
-    private boolean updateSplitRatioState(float splitRatio) {
-        boolean changed = Float.compare(mLastSplitRatio, splitRatio) != 0;
-        if (!changed) {
-            return false;
-        }
-
-        mLastSplitRatio = splitRatio;
-        return true;
-    }
-
-    public int getDragEnterReasonFromSplitPosition(@SplitPosition int position,
-            boolean isLandscape) {
-        if (isLandscape) {
-            return position == SPLIT_POSITION_TOP_OR_LEFT
-                    ? FrameworkStatsLog.SPLITSCREEN_UICHANGED__ENTER_REASON__DRAG_LEFT
-                    : FrameworkStatsLog.SPLITSCREEN_UICHANGED__ENTER_REASON__DRAG_RIGHT;
-        } else {
-            return position == SPLIT_POSITION_TOP_OR_LEFT
-                    ? FrameworkStatsLog.SPLITSCREEN_UICHANGED__ENTER_REASON__DRAG_TOP
-                    : FrameworkStatsLog.SPLITSCREEN_UICHANGED__ENTER_REASON__DRAG_BOTTOM;
-        }
-    }
-
-    private int getMainStagePositionFromSplitPosition(@SplitPosition int position,
-            boolean isLandscape) {
-        if (position == SPLIT_POSITION_UNDEFINED) {
-            return 0;
-        }
-        if (isLandscape) {
-            return position == SPLIT_POSITION_TOP_OR_LEFT
-                    ? FrameworkStatsLog.SPLITSCREEN_UICHANGED__MAIN_STAGE_POSITION__LEFT
-                    : FrameworkStatsLog.SPLITSCREEN_UICHANGED__MAIN_STAGE_POSITION__RIGHT;
-        } else {
-            return position == SPLIT_POSITION_TOP_OR_LEFT
-                    ? FrameworkStatsLog.SPLITSCREEN_UICHANGED__MAIN_STAGE_POSITION__TOP
-                    : FrameworkStatsLog.SPLITSCREEN_UICHANGED__MAIN_STAGE_POSITION__BOTTOM;
-        }
-    }
-
-    private int getSideStagePositionFromSplitPosition(@SplitPosition int position,
-            boolean isLandscape) {
-        if (position == SPLIT_POSITION_UNDEFINED) {
-            return 0;
-        }
-        if (isLandscape) {
-            return position == SPLIT_POSITION_TOP_OR_LEFT
-                    ? FrameworkStatsLog.SPLITSCREEN_UICHANGED__SIDE_STAGE_POSITION__LEFT
-                    : FrameworkStatsLog.SPLITSCREEN_UICHANGED__SIDE_STAGE_POSITION__RIGHT;
-        } else {
-            return position == SPLIT_POSITION_TOP_OR_LEFT
-                    ? FrameworkStatsLog.SPLITSCREEN_UICHANGED__SIDE_STAGE_POSITION__TOP
-                    : FrameworkStatsLog.SPLITSCREEN_UICHANGED__SIDE_STAGE_POSITION__BOTTOM;
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/StageCoordinator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/StageCoordinator.java
deleted file mode 100644
index de0feee..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/StageCoordinator.java
+++ /dev/null
@@ -1,1333 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.stagesplit;
-
-import static android.app.ActivityOptions.KEY_LAUNCH_ROOT_TASK_TOKEN;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
-import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
-import static android.view.WindowManager.TRANSIT_OPEN;
-import static android.view.WindowManager.TRANSIT_TO_BACK;
-import static android.view.WindowManager.TRANSIT_TO_FRONT;
-import static android.view.WindowManager.transitTypeToString;
-
-import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__APP_DOES_NOT_SUPPORT_MULTIWINDOW;
-import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__APP_FINISHED;
-import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__DEVICE_FOLDED;
-import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__DRAG_DIVIDER;
-import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__RETURN_HOME;
-import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__SCREEN_LOCKED_SHOW_ON_TOP;
-import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_BOTTOM_OR_RIGHT;
-import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_TOP_OR_LEFT;
-import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_UNDEFINED;
-import static com.android.wm.shell.stagesplit.SplitScreen.STAGE_TYPE_MAIN;
-import static com.android.wm.shell.stagesplit.SplitScreen.STAGE_TYPE_SIDE;
-import static com.android.wm.shell.stagesplit.SplitScreen.STAGE_TYPE_UNDEFINED;
-import static com.android.wm.shell.stagesplit.SplitScreen.stageTypeToString;
-import static com.android.wm.shell.stagesplit.SplitScreenTransitions.FLAG_IS_DIVIDER_BAR;
-import static com.android.wm.shell.transition.Transitions.ENABLE_SHELL_TRANSITIONS;
-import static com.android.wm.shell.transition.Transitions.TRANSIT_SPLIT_DISMISS_SNAP;
-import static com.android.wm.shell.transition.Transitions.TRANSIT_SPLIT_SCREEN_OPEN_TO_SIDE;
-import static com.android.wm.shell.transition.Transitions.TRANSIT_SPLIT_SCREEN_PAIR_OPEN;
-import static com.android.wm.shell.transition.Transitions.isClosingType;
-import static com.android.wm.shell.transition.Transitions.isOpeningType;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.app.ActivityManager;
-import android.app.ActivityOptions;
-import android.app.ActivityTaskManager;
-import android.app.PendingIntent;
-import android.app.WindowConfiguration;
-import android.content.Context;
-import android.content.Intent;
-import android.graphics.Rect;
-import android.hardware.devicestate.DeviceStateManager;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.util.Log;
-import android.util.Slog;
-import android.view.IRemoteAnimationFinishedCallback;
-import android.view.IRemoteAnimationRunner;
-import android.view.RemoteAnimationAdapter;
-import android.view.RemoteAnimationTarget;
-import android.view.SurfaceControl;
-import android.view.SurfaceSession;
-import android.view.WindowManager;
-import android.window.DisplayAreaInfo;
-import android.window.RemoteTransition;
-import android.window.TransitionInfo;
-import android.window.TransitionRequestInfo;
-import android.window.WindowContainerToken;
-import android.window.WindowContainerTransaction;
-
-import com.android.internal.R;
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.logging.InstanceId;
-import com.android.internal.protolog.common.ProtoLog;
-import com.android.wm.shell.RootTaskDisplayAreaOrganizer;
-import com.android.wm.shell.ShellTaskOrganizer;
-import com.android.wm.shell.common.DisplayImeController;
-import com.android.wm.shell.common.DisplayInsetsController;
-import com.android.wm.shell.common.SyncTransactionQueue;
-import com.android.wm.shell.common.TransactionPool;
-import com.android.wm.shell.common.split.SplitLayout;
-import com.android.wm.shell.common.split.SplitScreenConstants.SplitPosition;
-import com.android.wm.shell.common.split.SplitWindowManager;
-import com.android.wm.shell.protolog.ShellProtoLogGroup;
-import com.android.wm.shell.transition.Transitions;
-
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Optional;
-
-import javax.inject.Provider;
-
-/**
- * Coordinates the staging (visibility, sizing, ...) of the split-screen {@link MainStage} and
- * {@link SideStage} stages.
- * Some high-level rules:
- * - The {@link StageCoordinator} is only considered active if the {@link SideStage} contains at
- * least one child task.
- * - The {@link MainStage} should only have children if the coordinator is active.
- * - The {@link SplitLayout} divider is only visible if both the {@link MainStage}
- * and {@link SideStage} are visible.
- * - The {@link MainStage} configuration is fullscreen when the {@link SideStage} isn't visible.
- * This rules are mostly implemented in {@link #onStageVisibilityChanged(StageListenerImpl)} and
- * {@link #onStageHasChildrenChanged(StageListenerImpl).}
- */
-class StageCoordinator implements SplitLayout.SplitLayoutHandler,
-        RootTaskDisplayAreaOrganizer.RootTaskDisplayAreaListener, Transitions.TransitionHandler {
-
-    private static final String TAG = StageCoordinator.class.getSimpleName();
-
-    /** internal value for mDismissTop that represents no dismiss */
-    private static final int NO_DISMISS = -2;
-
-    private final SurfaceSession mSurfaceSession = new SurfaceSession();
-
-    private final MainStage mMainStage;
-    private final StageListenerImpl mMainStageListener = new StageListenerImpl();
-    private final StageTaskUnfoldController mMainUnfoldController;
-    private final SideStage mSideStage;
-    private final StageListenerImpl mSideStageListener = new StageListenerImpl();
-    private final StageTaskUnfoldController mSideUnfoldController;
-    @SplitPosition
-    private int mSideStagePosition = SPLIT_POSITION_BOTTOM_OR_RIGHT;
-
-    private final int mDisplayId;
-    private SplitLayout mSplitLayout;
-    private boolean mDividerVisible;
-    private final SyncTransactionQueue mSyncQueue;
-    private final RootTaskDisplayAreaOrganizer mRootTDAOrganizer;
-    private final ShellTaskOrganizer mTaskOrganizer;
-    private DisplayAreaInfo mDisplayAreaInfo;
-    private final Context mContext;
-    private final List<SplitScreen.SplitScreenListener> mListeners = new ArrayList<>();
-    private final DisplayImeController mDisplayImeController;
-    private final DisplayInsetsController mDisplayInsetsController;
-    private final SplitScreenTransitions mSplitTransitions;
-    private final SplitscreenEventLogger mLogger;
-    private boolean mExitSplitScreenOnHide;
-    private boolean mKeyguardOccluded;
-
-    // TODO(b/187041611): remove this flag after totally deprecated legacy split
-    /** Whether the device is supporting legacy split or not. */
-    private boolean mUseLegacySplit;
-
-    @SplitScreen.StageType private int mDismissTop = NO_DISMISS;
-
-    /** The target stage to dismiss to when unlock after folded. */
-    @SplitScreen.StageType private int mTopStageAfterFoldDismiss = STAGE_TYPE_UNDEFINED;
-
-    private final Runnable mOnTransitionAnimationComplete = () -> {
-        // If still playing, let it finish.
-        if (!isSplitScreenVisible()) {
-            // Update divider state after animation so that it is still around and positioned
-            // properly for the animation itself.
-            setDividerVisibility(false);
-            mSplitLayout.resetDividerPosition();
-        }
-        mDismissTop = NO_DISMISS;
-    };
-
-    private final SplitWindowManager.ParentContainerCallbacks mParentContainerCallbacks =
-            new SplitWindowManager.ParentContainerCallbacks() {
-        @Override
-        public void attachToParentSurface(SurfaceControl.Builder b) {
-            mRootTDAOrganizer.attachToDisplayArea(mDisplayId, b);
-        }
-
-        @Override
-        public void onLeashReady(SurfaceControl leash) {
-            mSyncQueue.runInSync(t -> applyDividerVisibility(t));
-        }
-    };
-
-    StageCoordinator(Context context, int displayId, SyncTransactionQueue syncQueue,
-            RootTaskDisplayAreaOrganizer rootTDAOrganizer, ShellTaskOrganizer taskOrganizer,
-            DisplayImeController displayImeController,
-            DisplayInsetsController displayInsetsController, Transitions transitions,
-            TransactionPool transactionPool, SplitscreenEventLogger logger,
-            Provider<Optional<StageTaskUnfoldController>> unfoldControllerProvider) {
-        mContext = context;
-        mDisplayId = displayId;
-        mSyncQueue = syncQueue;
-        mRootTDAOrganizer = rootTDAOrganizer;
-        mTaskOrganizer = taskOrganizer;
-        mLogger = logger;
-        mMainUnfoldController = unfoldControllerProvider.get().orElse(null);
-        mSideUnfoldController = unfoldControllerProvider.get().orElse(null);
-
-        mMainStage = new MainStage(
-                mTaskOrganizer,
-                mDisplayId,
-                mMainStageListener,
-                mSyncQueue,
-                mSurfaceSession,
-                mMainUnfoldController);
-        mSideStage = new SideStage(
-                mContext,
-                mTaskOrganizer,
-                mDisplayId,
-                mSideStageListener,
-                mSyncQueue,
-                mSurfaceSession,
-                mSideUnfoldController);
-        mDisplayImeController = displayImeController;
-        mDisplayInsetsController = displayInsetsController;
-        mDisplayInsetsController.addInsetsChangedListener(mDisplayId, mSideStage);
-        mRootTDAOrganizer.registerListener(displayId, this);
-        final DeviceStateManager deviceStateManager =
-                mContext.getSystemService(DeviceStateManager.class);
-        deviceStateManager.registerCallback(taskOrganizer.getExecutor(),
-                new DeviceStateManager.FoldStateListener(mContext, this::onFoldedStateChanged));
-        mSplitTransitions = new SplitScreenTransitions(transactionPool, transitions,
-                mOnTransitionAnimationComplete);
-        transitions.addHandler(this);
-    }
-
-    @VisibleForTesting
-    StageCoordinator(Context context, int displayId, SyncTransactionQueue syncQueue,
-            RootTaskDisplayAreaOrganizer rootTDAOrganizer, ShellTaskOrganizer taskOrganizer,
-            MainStage mainStage, SideStage sideStage, DisplayImeController displayImeController,
-            DisplayInsetsController displayInsetsController, SplitLayout splitLayout,
-            Transitions transitions, TransactionPool transactionPool,
-            SplitscreenEventLogger logger,
-            Provider<Optional<StageTaskUnfoldController>> unfoldControllerProvider) {
-        mContext = context;
-        mDisplayId = displayId;
-        mSyncQueue = syncQueue;
-        mRootTDAOrganizer = rootTDAOrganizer;
-        mTaskOrganizer = taskOrganizer;
-        mMainStage = mainStage;
-        mSideStage = sideStage;
-        mDisplayImeController = displayImeController;
-        mDisplayInsetsController = displayInsetsController;
-        mRootTDAOrganizer.registerListener(displayId, this);
-        mSplitLayout = splitLayout;
-        mSplitTransitions = new SplitScreenTransitions(transactionPool, transitions,
-                mOnTransitionAnimationComplete);
-        mMainUnfoldController = unfoldControllerProvider.get().orElse(null);
-        mSideUnfoldController = unfoldControllerProvider.get().orElse(null);
-        mLogger = logger;
-        transitions.addHandler(this);
-    }
-
-    @VisibleForTesting
-    SplitScreenTransitions getSplitTransitions() {
-        return mSplitTransitions;
-    }
-
-    boolean isSplitScreenVisible() {
-        return mSideStageListener.mVisible && mMainStageListener.mVisible;
-    }
-
-    boolean moveToSideStage(ActivityManager.RunningTaskInfo task,
-            @SplitPosition int sideStagePosition) {
-        final WindowContainerTransaction wct = new WindowContainerTransaction();
-        setSideStagePosition(sideStagePosition, wct);
-        mMainStage.activate(getMainStageBounds(), wct);
-        mSideStage.addTask(task, getSideStageBounds(), wct);
-        mSyncQueue.queue(wct);
-        mSyncQueue.runInSync(
-                t -> updateSurfaceBounds(null /* layout */, t, false /* applyResizingOffset */));
-        return true;
-    }
-
-    boolean removeFromSideStage(int taskId) {
-        final WindowContainerTransaction wct = new WindowContainerTransaction();
-
-        /**
-         * {@link MainStage} will be deactivated in {@link #onStageHasChildrenChanged} if the
-         * {@link SideStage} no longer has children.
-         */
-        final boolean result = mSideStage.removeTask(taskId,
-                mMainStage.isActive() ? mMainStage.mRootTaskInfo.token : null,
-                wct);
-        mTaskOrganizer.applyTransaction(wct);
-        return result;
-    }
-
-    void setSideStageOutline(boolean enable) {
-        mSideStage.enableOutline(enable);
-    }
-
-    /** Starts 2 tasks in one transition. */
-    void startTasks(int mainTaskId, @Nullable Bundle mainOptions, int sideTaskId,
-            @Nullable Bundle sideOptions, @SplitPosition int sidePosition,
-            @Nullable RemoteTransition remoteTransition) {
-        final WindowContainerTransaction wct = new WindowContainerTransaction();
-        mainOptions = mainOptions != null ? mainOptions : new Bundle();
-        sideOptions = sideOptions != null ? sideOptions : new Bundle();
-        setSideStagePosition(sidePosition, wct);
-
-        // 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.
-        mMainStage.activate(getMainStageBounds(), wct);
-        mSideStage.setBounds(getSideStageBounds(), wct);
-
-        // Make sure the launch options will put tasks in the corresponding split roots
-        addActivityOptions(mainOptions, mMainStage);
-        addActivityOptions(sideOptions, mSideStage);
-
-        // Add task launch requests
-        wct.startTask(mainTaskId, mainOptions);
-        wct.startTask(sideTaskId, sideOptions);
-
-        mSplitTransitions.startEnterTransition(
-                TRANSIT_SPLIT_SCREEN_PAIR_OPEN, wct, remoteTransition, this);
-    }
-
-    /** Starts 2 tasks in one legacy transition. */
-    void startTasksWithLegacyTransition(int mainTaskId, @Nullable Bundle mainOptions,
-            int sideTaskId, @Nullable Bundle sideOptions, @SplitPosition int sidePosition,
-            RemoteAnimationAdapter adapter) {
-        final WindowContainerTransaction wct = new WindowContainerTransaction();
-        // Need to add another wrapper here in shell so that we can inject the divider bar
-        // and also manage the process elevation via setRunningRemote
-        IRemoteAnimationRunner wrapper = new IRemoteAnimationRunner.Stub() {
-            @Override
-            public void onAnimationStart(@WindowManager.TransitionOldType int transit,
-                    RemoteAnimationTarget[] apps,
-                    RemoteAnimationTarget[] wallpapers,
-                    RemoteAnimationTarget[] nonApps,
-                    final IRemoteAnimationFinishedCallback finishedCallback) {
-                RemoteAnimationTarget[] augmentedNonApps =
-                        new RemoteAnimationTarget[nonApps.length + 1];
-                for (int i = 0; i < nonApps.length; ++i) {
-                    augmentedNonApps[i] = nonApps[i];
-                }
-                augmentedNonApps[augmentedNonApps.length - 1] = getDividerBarLegacyTarget();
-                try {
-                    ActivityTaskManager.getService().setRunningRemoteTransitionDelegate(
-                            adapter.getCallingApplication());
-                    adapter.getRunner().onAnimationStart(transit, apps, wallpapers, nonApps,
-                            finishedCallback);
-                } catch (RemoteException e) {
-                    Slog.e(TAG, "Error starting remote animation", e);
-                }
-            }
-
-            @Override
-            public void onAnimationCancelled(boolean isKeyguardOccluded) {
-                try {
-                    adapter.getRunner().onAnimationCancelled(isKeyguardOccluded);
-                } catch (RemoteException e) {
-                    Slog.e(TAG, "Error starting remote animation", e);
-                }
-            }
-        };
-        RemoteAnimationAdapter wrappedAdapter = new RemoteAnimationAdapter(
-                wrapper, adapter.getDuration(), adapter.getStatusBarTransitionDelay());
-
-        if (mainOptions == null) {
-            mainOptions = ActivityOptions.makeRemoteAnimation(wrappedAdapter).toBundle();
-        } else {
-            ActivityOptions mainActivityOptions = ActivityOptions.fromBundle(mainOptions);
-            mainActivityOptions.update(ActivityOptions.makeRemoteAnimation(wrappedAdapter));
-        }
-
-        sideOptions = sideOptions != null ? sideOptions : new Bundle();
-        setSideStagePosition(sidePosition, wct);
-
-        // 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.
-        mMainStage.activate(getMainStageBounds(), wct);
-        mSideStage.setBounds(getSideStageBounds(), wct);
-
-        // Make sure the launch options will put tasks in the corresponding split roots
-        addActivityOptions(mainOptions, mMainStage);
-        addActivityOptions(sideOptions, mSideStage);
-
-        // Add task launch requests
-        wct.startTask(mainTaskId, mainOptions);
-        wct.startTask(sideTaskId, sideOptions);
-
-        // Using legacy transitions, so we can't use blast sync since it conflicts.
-        mTaskOrganizer.applyTransaction(wct);
-    }
-
-    public void startIntent(PendingIntent intent, Intent fillInIntent,
-            @SplitScreen.StageType int stage, @SplitPosition int position,
-            @androidx.annotation.Nullable Bundle options,
-            @Nullable RemoteTransition remoteTransition) {
-        final WindowContainerTransaction wct = new WindowContainerTransaction();
-        options = resolveStartStage(stage, position, options, wct);
-        wct.sendPendingIntent(intent, fillInIntent, options);
-        mSplitTransitions.startEnterTransition(
-                TRANSIT_SPLIT_SCREEN_OPEN_TO_SIDE, wct, remoteTransition, this);
-    }
-
-    Bundle resolveStartStage(@SplitScreen.StageType int stage,
-            @SplitPosition int position, @androidx.annotation.Nullable Bundle options,
-            @androidx.annotation.Nullable WindowContainerTransaction wct) {
-        switch (stage) {
-            case STAGE_TYPE_UNDEFINED: {
-                // Use the stage of the specified position is valid.
-                if (position != SPLIT_POSITION_UNDEFINED) {
-                    if (position == getSideStagePosition()) {
-                        options = resolveStartStage(STAGE_TYPE_SIDE, position, options, wct);
-                    } else {
-                        options = resolveStartStage(STAGE_TYPE_MAIN, position, options, wct);
-                    }
-                } else {
-                    // Exit split-screen and launch fullscreen since stage wasn't specified.
-                    prepareExitSplitScreen(STAGE_TYPE_UNDEFINED, wct);
-                }
-                break;
-            }
-            case STAGE_TYPE_SIDE: {
-                if (position != SPLIT_POSITION_UNDEFINED) {
-                    setSideStagePosition(position, wct);
-                } else {
-                    position = getSideStagePosition();
-                }
-                if (options == null) {
-                    options = new Bundle();
-                }
-                updateActivityOptions(options, position);
-                break;
-            }
-            case STAGE_TYPE_MAIN: {
-                if (position != SPLIT_POSITION_UNDEFINED) {
-                    // Set the side stage opposite of what we want to the main stage.
-                    final int sideStagePosition = position == SPLIT_POSITION_TOP_OR_LEFT
-                            ? SPLIT_POSITION_BOTTOM_OR_RIGHT : SPLIT_POSITION_TOP_OR_LEFT;
-                    setSideStagePosition(sideStagePosition, wct);
-                } else {
-                    position = getMainStagePosition();
-                }
-                if (options == null) {
-                    options = new Bundle();
-                }
-                updateActivityOptions(options, position);
-                break;
-            }
-            default:
-                throw new IllegalArgumentException("Unknown stage=" + stage);
-        }
-
-        return options;
-    }
-
-    @SplitPosition
-    int getSideStagePosition() {
-        return mSideStagePosition;
-    }
-
-    @SplitPosition
-    int getMainStagePosition() {
-        return mSideStagePosition == SPLIT_POSITION_TOP_OR_LEFT
-                ? SPLIT_POSITION_BOTTOM_OR_RIGHT : SPLIT_POSITION_TOP_OR_LEFT;
-    }
-
-    void setSideStagePosition(@SplitPosition int sideStagePosition,
-            @Nullable WindowContainerTransaction wct) {
-        setSideStagePosition(sideStagePosition, true /* updateBounds */, wct);
-    }
-
-    private void setSideStagePosition(@SplitPosition int sideStagePosition, boolean updateBounds,
-            @Nullable WindowContainerTransaction wct) {
-        if (mSideStagePosition == sideStagePosition) return;
-        mSideStagePosition = sideStagePosition;
-        sendOnStagePositionChanged();
-
-        if (mSideStageListener.mVisible && updateBounds) {
-            if (wct == null) {
-                // onLayoutSizeChanged builds/applies a wct with the contents of updateWindowBounds.
-                onLayoutSizeChanged(mSplitLayout);
-            } else {
-                updateWindowBounds(mSplitLayout, wct);
-                updateUnfoldBounds();
-            }
-        }
-    }
-
-    void setSideStageVisibility(boolean visible) {
-        if (mSideStageListener.mVisible == visible) return;
-
-        final WindowContainerTransaction wct = new WindowContainerTransaction();
-        mSideStage.setVisibility(visible, wct);
-        mTaskOrganizer.applyTransaction(wct);
-    }
-
-    void onKeyguardOccludedChanged(boolean occluded) {
-        // Do not exit split directly, because it needs to wait for task info update to determine
-        // which task should remain on top after split dismissed.
-        mKeyguardOccluded = occluded;
-    }
-
-    void onKeyguardVisibilityChanged(boolean showing) {
-        if (!showing && mMainStage.isActive()
-                && mTopStageAfterFoldDismiss != STAGE_TYPE_UNDEFINED) {
-            exitSplitScreen(mTopStageAfterFoldDismiss == STAGE_TYPE_MAIN ? mMainStage : mSideStage,
-                    SPLITSCREEN_UICHANGED__EXIT_REASON__DEVICE_FOLDED);
-        }
-    }
-
-    void exitSplitScreenOnHide(boolean exitSplitScreenOnHide) {
-        mExitSplitScreenOnHide = exitSplitScreenOnHide;
-    }
-
-    void exitSplitScreen(int toTopTaskId, int exitReason) {
-        StageTaskListener childrenToTop = null;
-        if (mMainStage.containsTask(toTopTaskId)) {
-            childrenToTop = mMainStage;
-        } else if (mSideStage.containsTask(toTopTaskId)) {
-            childrenToTop = mSideStage;
-        }
-
-        final WindowContainerTransaction wct = new WindowContainerTransaction();
-        if (childrenToTop != null) {
-            childrenToTop.reorderChild(toTopTaskId, true /* onTop */, wct);
-        }
-        applyExitSplitScreen(childrenToTop, wct, exitReason);
-    }
-
-    private void exitSplitScreen(StageTaskListener childrenToTop, int exitReason) {
-        final WindowContainerTransaction wct = new WindowContainerTransaction();
-        applyExitSplitScreen(childrenToTop, wct, exitReason);
-    }
-
-    private void applyExitSplitScreen(
-            StageTaskListener childrenToTop,
-            WindowContainerTransaction wct, int exitReason) {
-        mSideStage.removeAllTasks(wct, childrenToTop == mSideStage);
-        mMainStage.deactivate(wct, childrenToTop == mMainStage);
-        mTaskOrganizer.applyTransaction(wct);
-        mSyncQueue.runInSync(t -> t
-                .setWindowCrop(mMainStage.mRootLeash, null)
-                .setWindowCrop(mSideStage.mRootLeash, null));
-        // Hide divider and reset its position.
-        setDividerVisibility(false);
-        mSplitLayout.resetDividerPosition();
-        mTopStageAfterFoldDismiss = STAGE_TYPE_UNDEFINED;
-        if (childrenToTop != null) {
-            logExitToStage(exitReason, childrenToTop == mMainStage);
-        } else {
-            logExit(exitReason);
-        }
-    }
-
-    /**
-     * Unlike exitSplitScreen, this takes a stagetype vs an actual stage-reference and populates
-     * an existing WindowContainerTransaction (rather than applying immediately). This is intended
-     * to be used when exiting split might be bundled with other window operations.
-     */
-    void prepareExitSplitScreen(@SplitScreen.StageType int stageToTop,
-            @NonNull WindowContainerTransaction wct) {
-        mSideStage.removeAllTasks(wct, stageToTop == STAGE_TYPE_SIDE);
-        mMainStage.deactivate(wct, stageToTop == STAGE_TYPE_MAIN);
-    }
-
-    void getStageBounds(Rect outTopOrLeftBounds, Rect outBottomOrRightBounds) {
-        outTopOrLeftBounds.set(mSplitLayout.getBounds1());
-        outBottomOrRightBounds.set(mSplitLayout.getBounds2());
-    }
-
-    private void addActivityOptions(Bundle opts, StageTaskListener stage) {
-        opts.putParcelable(KEY_LAUNCH_ROOT_TASK_TOKEN, stage.mRootTaskInfo.token);
-    }
-
-    void updateActivityOptions(Bundle opts, @SplitPosition int position) {
-        addActivityOptions(opts, position == mSideStagePosition ? mSideStage : mMainStage);
-    }
-
-    void registerSplitScreenListener(SplitScreen.SplitScreenListener listener) {
-        if (mListeners.contains(listener)) return;
-        mListeners.add(listener);
-        sendStatusToListener(listener);
-    }
-
-    void unregisterSplitScreenListener(SplitScreen.SplitScreenListener listener) {
-        mListeners.remove(listener);
-    }
-
-    void sendStatusToListener(SplitScreen.SplitScreenListener listener) {
-        listener.onStagePositionChanged(STAGE_TYPE_MAIN, getMainStagePosition());
-        listener.onStagePositionChanged(STAGE_TYPE_SIDE, getSideStagePosition());
-        listener.onSplitVisibilityChanged(isSplitScreenVisible());
-        mSideStage.onSplitScreenListenerRegistered(listener, STAGE_TYPE_SIDE);
-        mMainStage.onSplitScreenListenerRegistered(listener, STAGE_TYPE_MAIN);
-    }
-
-    private void sendOnStagePositionChanged() {
-        for (int i = mListeners.size() - 1; i >= 0; --i) {
-            final SplitScreen.SplitScreenListener l = mListeners.get(i);
-            l.onStagePositionChanged(STAGE_TYPE_MAIN, getMainStagePosition());
-            l.onStagePositionChanged(STAGE_TYPE_SIDE, getSideStagePosition());
-        }
-    }
-
-    private void onStageChildTaskStatusChanged(StageListenerImpl stageListener, int taskId,
-            boolean present, boolean visible) {
-        int stage;
-        if (present) {
-            stage = stageListener == mSideStageListener ? STAGE_TYPE_SIDE : STAGE_TYPE_MAIN;
-        } else {
-            // No longer on any stage
-            stage = STAGE_TYPE_UNDEFINED;
-        }
-        if (stage == STAGE_TYPE_MAIN) {
-            mLogger.logMainStageAppChange(getMainStagePosition(), mMainStage.getTopChildTaskUid(),
-                    mSplitLayout.isLandscape());
-        } else {
-            mLogger.logSideStageAppChange(getSideStagePosition(), mSideStage.getTopChildTaskUid(),
-                    mSplitLayout.isLandscape());
-        }
-
-        for (int i = mListeners.size() - 1; i >= 0; --i) {
-            mListeners.get(i).onTaskStageChanged(taskId, stage, visible);
-        }
-    }
-
-    private void sendSplitVisibilityChanged() {
-        for (int i = mListeners.size() - 1; i >= 0; --i) {
-            final SplitScreen.SplitScreenListener l = mListeners.get(i);
-            l.onSplitVisibilityChanged(mDividerVisible);
-        }
-
-        if (mMainUnfoldController != null && mSideUnfoldController != null) {
-            mMainUnfoldController.onSplitVisibilityChanged(mDividerVisible);
-            mSideUnfoldController.onSplitVisibilityChanged(mDividerVisible);
-        }
-    }
-
-    private void onStageRootTaskAppeared(StageListenerImpl stageListener) {
-        if (mMainStageListener.mHasRootTask && mSideStageListener.mHasRootTask) {
-            mUseLegacySplit = mContext.getResources().getBoolean(R.bool.config_useLegacySplit);
-            final WindowContainerTransaction wct = new WindowContainerTransaction();
-            // Make the stages adjacent to each other so they occlude what's behind them.
-            wct.setAdjacentRoots(mMainStage.mRootTaskInfo.token, mSideStage.mRootTaskInfo.token,
-                    true /* moveTogether */);
-
-            // Only sets side stage as launch-adjacent-flag-root when the device is not using legacy
-            // split to prevent new split behavior confusing users.
-            if (!mUseLegacySplit) {
-                wct.setLaunchAdjacentFlagRoot(mSideStage.mRootTaskInfo.token);
-            }
-
-            mTaskOrganizer.applyTransaction(wct);
-        }
-    }
-
-    private void onStageRootTaskVanished(StageListenerImpl stageListener) {
-        if (stageListener == mMainStageListener || stageListener == mSideStageListener) {
-            final WindowContainerTransaction wct = new WindowContainerTransaction();
-            // Deactivate the main stage if it no longer has a root task.
-            mMainStage.deactivate(wct);
-
-            if (!mUseLegacySplit) {
-                wct.clearLaunchAdjacentFlagRoot(mSideStage.mRootTaskInfo.token);
-            }
-
-            mTaskOrganizer.applyTransaction(wct);
-        }
-    }
-
-    private void setDividerVisibility(boolean visible) {
-        if (mDividerVisible == visible) return;
-        mDividerVisible = visible;
-        if (visible) {
-            mSplitLayout.init();
-            updateUnfoldBounds();
-        } else {
-            mSplitLayout.release();
-        }
-        sendSplitVisibilityChanged();
-    }
-
-    private void onStageVisibilityChanged(StageListenerImpl stageListener) {
-        final boolean sideStageVisible = mSideStageListener.mVisible;
-        final boolean mainStageVisible = mMainStageListener.mVisible;
-        final boolean bothStageVisible = sideStageVisible && mainStageVisible;
-        final boolean bothStageInvisible = !sideStageVisible && !mainStageVisible;
-        final boolean sameVisibility = sideStageVisible == mainStageVisible;
-        // Only add or remove divider when both visible or both invisible to avoid sometimes we only
-        // got one stage visibility changed for a moment and it will cause flicker.
-        if (sameVisibility) {
-            setDividerVisibility(bothStageVisible);
-        }
-
-        if (bothStageInvisible) {
-            if (mExitSplitScreenOnHide
-            // Don't dismiss staged split when both stages are not visible due to sleeping display,
-            // like the cases keyguard showing or screen off.
-            || (!mMainStage.mRootTaskInfo.isSleeping && !mSideStage.mRootTaskInfo.isSleeping)) {
-                exitSplitScreen(null /* childrenToTop */,
-                        SPLITSCREEN_UICHANGED__EXIT_REASON__RETURN_HOME);
-            }
-        } else if (mKeyguardOccluded) {
-            // At least one of the stages is visible while keyguard occluded. Dismiss split because
-            // there's show-when-locked activity showing on top of keyguard. Also make sure the
-            // task contains show-when-locked activity remains on top after split dismissed.
-            final StageTaskListener toTop =
-                    mainStageVisible ? mMainStage : (sideStageVisible ? mSideStage : null);
-            exitSplitScreen(toTop, SPLITSCREEN_UICHANGED__EXIT_REASON__SCREEN_LOCKED_SHOW_ON_TOP);
-        }
-
-        mSyncQueue.runInSync(t -> {
-            // Same above, we only set root tasks and divider leash visibility when both stage
-            // change to visible or invisible to avoid flicker.
-            if (sameVisibility) {
-                t.setVisibility(mSideStage.mRootLeash, bothStageVisible)
-                        .setVisibility(mMainStage.mRootLeash, bothStageVisible);
-                applyDividerVisibility(t);
-                applyOutlineVisibility(t);
-            }
-        });
-    }
-
-    private void applyDividerVisibility(SurfaceControl.Transaction t) {
-        final SurfaceControl dividerLeash = mSplitLayout.getDividerLeash();
-        if (dividerLeash == null) {
-            return;
-        }
-
-        if (mDividerVisible) {
-            t.show(dividerLeash)
-                    .setLayer(dividerLeash, Integer.MAX_VALUE)
-                    .setPosition(dividerLeash,
-                            mSplitLayout.getDividerBounds().left,
-                            mSplitLayout.getDividerBounds().top);
-        } else {
-            t.hide(dividerLeash);
-        }
-    }
-
-    private void applyOutlineVisibility(SurfaceControl.Transaction t) {
-        final SurfaceControl outlineLeash = mSideStage.getOutlineLeash();
-        if (outlineLeash == null) {
-            return;
-        }
-
-        if (mDividerVisible) {
-            t.show(outlineLeash).setLayer(outlineLeash, Integer.MAX_VALUE);
-        } else {
-            t.hide(outlineLeash);
-        }
-    }
-
-    private void onStageHasChildrenChanged(StageListenerImpl stageListener) {
-        final boolean hasChildren = stageListener.mHasChildren;
-        final boolean isSideStage = stageListener == mSideStageListener;
-        if (!hasChildren) {
-            if (isSideStage && mMainStageListener.mVisible) {
-                // Exit to main stage if side stage no longer has children.
-                exitSplitScreen(mMainStage, SPLITSCREEN_UICHANGED__EXIT_REASON__APP_FINISHED);
-            } else if (!isSideStage && mSideStageListener.mVisible) {
-                // Exit to side stage if main stage no longer has children.
-                exitSplitScreen(mSideStage, SPLITSCREEN_UICHANGED__EXIT_REASON__APP_FINISHED);
-            }
-        } else if (isSideStage) {
-            final WindowContainerTransaction wct = new WindowContainerTransaction();
-            // Make sure the main stage is active.
-            mMainStage.activate(getMainStageBounds(), wct);
-            mSideStage.setBounds(getSideStageBounds(), wct);
-            mTaskOrganizer.applyTransaction(wct);
-        }
-        if (!mLogger.hasStartedSession() && mMainStageListener.mHasChildren
-                && mSideStageListener.mHasChildren) {
-            mLogger.logEnter(mSplitLayout.getDividerPositionAsFraction(),
-                    getMainStagePosition(), mMainStage.getTopChildTaskUid(),
-                    getSideStagePosition(), mSideStage.getTopChildTaskUid(),
-                    mSplitLayout.isLandscape());
-        }
-    }
-
-    @VisibleForTesting
-    IBinder onSnappedToDismissTransition(boolean mainStageToTop) {
-        final WindowContainerTransaction wct = new WindowContainerTransaction();
-        prepareExitSplitScreen(mainStageToTop ? STAGE_TYPE_MAIN : STAGE_TYPE_SIDE, wct);
-        return mSplitTransitions.startSnapToDismiss(wct, this);
-    }
-
-    @Override
-    public void onSnappedToDismiss(boolean bottomOrRight) {
-        final boolean mainStageToTop =
-                bottomOrRight ? mSideStagePosition == SPLIT_POSITION_BOTTOM_OR_RIGHT
-                        : mSideStagePosition == SPLIT_POSITION_TOP_OR_LEFT;
-        if (ENABLE_SHELL_TRANSITIONS) {
-            onSnappedToDismissTransition(mainStageToTop);
-            return;
-        }
-        exitSplitScreen(mainStageToTop ? mMainStage : mSideStage,
-                SPLITSCREEN_UICHANGED__EXIT_REASON__DRAG_DIVIDER);
-    }
-
-    @Override
-    public void onDoubleTappedDivider() {
-        setSideStagePosition(mSideStagePosition == SPLIT_POSITION_TOP_OR_LEFT
-                ? SPLIT_POSITION_BOTTOM_OR_RIGHT : SPLIT_POSITION_TOP_OR_LEFT, null /* wct */);
-        mLogger.logSwap(getMainStagePosition(), mMainStage.getTopChildTaskUid(),
-                getSideStagePosition(), mSideStage.getTopChildTaskUid(),
-                mSplitLayout.isLandscape());
-    }
-
-    @Override
-    public void onLayoutPositionChanging(SplitLayout layout) {
-        mSyncQueue.runInSync(t -> updateSurfaceBounds(layout, t, true /* applyResizingOffset */));
-    }
-
-    @Override
-    public void onLayoutSizeChanging(SplitLayout layout) {
-        mSyncQueue.runInSync(t -> updateSurfaceBounds(layout, t, true /* applyResizingOffset */));
-        mSideStage.setOutlineVisibility(false);
-    }
-
-    @Override
-    public void onLayoutSizeChanged(SplitLayout layout) {
-        final WindowContainerTransaction wct = new WindowContainerTransaction();
-        updateWindowBounds(layout, wct);
-        updateUnfoldBounds();
-        mSyncQueue.queue(wct);
-        mSyncQueue.runInSync(t -> updateSurfaceBounds(layout, t, false /* applyResizingOffset */));
-        mSideStage.setOutlineVisibility(true);
-        mLogger.logResize(mSplitLayout.getDividerPositionAsFraction());
-    }
-
-    private void updateUnfoldBounds() {
-        if (mMainUnfoldController != null && mSideUnfoldController != null) {
-            mMainUnfoldController.onLayoutChanged(getMainStageBounds());
-            mSideUnfoldController.onLayoutChanged(getSideStageBounds());
-        }
-    }
-
-    /**
-     * Populates `wct` with operations that match the split windows to the current layout.
-     * To match relevant surfaces, make sure to call updateSurfaceBounds after `wct` is applied
-     */
-    private void updateWindowBounds(SplitLayout layout, WindowContainerTransaction wct) {
-        final StageTaskListener topLeftStage =
-                mSideStagePosition == SPLIT_POSITION_TOP_OR_LEFT ? mSideStage : mMainStage;
-        final StageTaskListener bottomRightStage =
-                mSideStagePosition == SPLIT_POSITION_TOP_OR_LEFT ? mMainStage : mSideStage;
-        layout.applyTaskChanges(wct, topLeftStage.mRootTaskInfo, bottomRightStage.mRootTaskInfo);
-    }
-
-    void updateSurfaceBounds(@Nullable SplitLayout layout, @NonNull SurfaceControl.Transaction t,
-            boolean applyResizingOffset) {
-        final StageTaskListener topLeftStage =
-                mSideStagePosition == SPLIT_POSITION_TOP_OR_LEFT ? mSideStage : mMainStage;
-        final StageTaskListener bottomRightStage =
-                mSideStagePosition == SPLIT_POSITION_TOP_OR_LEFT ? mMainStage : mSideStage;
-        (layout != null ? layout : mSplitLayout).applySurfaceChanges(t, topLeftStage.mRootLeash,
-                bottomRightStage.mRootLeash, topLeftStage.mDimLayer, bottomRightStage.mDimLayer,
-                applyResizingOffset);
-    }
-
-    @Override
-    public int getSplitItemPosition(WindowContainerToken token) {
-        if (token == null) {
-            return SPLIT_POSITION_UNDEFINED;
-        }
-
-        if (token.equals(mMainStage.mRootTaskInfo.getToken())) {
-            return getMainStagePosition();
-        } else if (token.equals(mSideStage.mRootTaskInfo.getToken())) {
-            return getSideStagePosition();
-        }
-
-        return SPLIT_POSITION_UNDEFINED;
-    }
-
-    @Override
-    public void setLayoutOffsetTarget(int offsetX, int offsetY, SplitLayout layout) {
-        final StageTaskListener topLeftStage =
-                mSideStagePosition == SPLIT_POSITION_TOP_OR_LEFT ? mSideStage : mMainStage;
-        final StageTaskListener bottomRightStage =
-                mSideStagePosition == SPLIT_POSITION_TOP_OR_LEFT ? mMainStage : mSideStage;
-        final WindowContainerTransaction wct = new WindowContainerTransaction();
-        layout.applyLayoutOffsetTarget(wct, offsetX, offsetY, topLeftStage.mRootTaskInfo,
-                bottomRightStage.mRootTaskInfo);
-        mTaskOrganizer.applyTransaction(wct);
-    }
-
-    @Override
-    public void onDisplayAreaAppeared(DisplayAreaInfo displayAreaInfo) {
-        mDisplayAreaInfo = displayAreaInfo;
-        if (mSplitLayout == null) {
-            mSplitLayout = new SplitLayout(TAG + "SplitDivider", mContext,
-                    mDisplayAreaInfo.configuration, this, mParentContainerCallbacks,
-                    mDisplayImeController, mTaskOrganizer, SplitLayout.PARALLAX_DISMISSING);
-            mDisplayInsetsController.addInsetsChangedListener(mDisplayId, mSplitLayout);
-
-            if (mMainUnfoldController != null && mSideUnfoldController != null) {
-                mMainUnfoldController.init();
-                mSideUnfoldController.init();
-            }
-        }
-    }
-
-    @Override
-    public void onDisplayAreaVanished(DisplayAreaInfo displayAreaInfo) {
-        throw new IllegalStateException("Well that was unexpected...");
-    }
-
-    @Override
-    public void onDisplayAreaInfoChanged(DisplayAreaInfo displayAreaInfo) {
-        mDisplayAreaInfo = displayAreaInfo;
-        if (mSplitLayout != null
-                && mSplitLayout.updateConfiguration(mDisplayAreaInfo.configuration)
-                && mMainStage.isActive()) {
-            onLayoutSizeChanged(mSplitLayout);
-        }
-    }
-
-    private void onFoldedStateChanged(boolean folded) {
-        mTopStageAfterFoldDismiss = STAGE_TYPE_UNDEFINED;
-        if (!folded) return;
-
-        if (mMainStage.isFocused()) {
-            mTopStageAfterFoldDismiss = STAGE_TYPE_MAIN;
-        } else if (mSideStage.isFocused()) {
-            mTopStageAfterFoldDismiss = STAGE_TYPE_SIDE;
-        }
-    }
-
-    private Rect getSideStageBounds() {
-        return mSideStagePosition == SPLIT_POSITION_TOP_OR_LEFT
-                ? mSplitLayout.getBounds1() : mSplitLayout.getBounds2();
-    }
-
-    private Rect getMainStageBounds() {
-        return mSideStagePosition == SPLIT_POSITION_TOP_OR_LEFT
-                ? mSplitLayout.getBounds2() : mSplitLayout.getBounds1();
-    }
-
-    /**
-     * Get the stage that should contain this `taskInfo`. The stage doesn't necessarily contain
-     * this task (yet) so this can also be used to identify which stage to put a task into.
-     */
-    private StageTaskListener getStageOfTask(ActivityManager.RunningTaskInfo taskInfo) {
-        // TODO(b/184679596): Find a way to either include task-org information in the transition,
-        //                    or synchronize task-org callbacks so we can use stage.containsTask
-        if (mMainStage.mRootTaskInfo != null
-                && taskInfo.parentTaskId == mMainStage.mRootTaskInfo.taskId) {
-            return mMainStage;
-        } else if (mSideStage.mRootTaskInfo != null
-                && taskInfo.parentTaskId == mSideStage.mRootTaskInfo.taskId) {
-            return mSideStage;
-        }
-        return null;
-    }
-
-    @SplitScreen.StageType
-    private int getStageType(StageTaskListener stage) {
-        return stage == mMainStage ? STAGE_TYPE_MAIN : STAGE_TYPE_SIDE;
-    }
-
-    @Override
-    public WindowContainerTransaction handleRequest(@NonNull IBinder transition,
-            @Nullable TransitionRequestInfo request) {
-        final ActivityManager.RunningTaskInfo triggerTask = request.getTriggerTask();
-        if (triggerTask == null) {
-            // still want to monitor everything while in split-screen, so return non-null.
-            return isSplitScreenVisible() ? new WindowContainerTransaction() : null;
-        }
-
-        WindowContainerTransaction out = null;
-        final @WindowManager.TransitionType int type = request.getType();
-        if (isSplitScreenVisible()) {
-            // try to handle everything while in split-screen, so return a WCT even if it's empty.
-            ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "  split is active so using split"
-                            + "Transition to handle request. triggerTask=%d type=%s mainChildren=%d"
-                            + " sideChildren=%d", triggerTask.taskId, transitTypeToString(type),
-                    mMainStage.getChildCount(), mSideStage.getChildCount());
-            out = new WindowContainerTransaction();
-            final StageTaskListener stage = getStageOfTask(triggerTask);
-            if (stage != null) {
-                // dismiss split if the last task in one of the stages is going away
-                if (isClosingType(type) && stage.getChildCount() == 1) {
-                    // The top should be the opposite side that is closing:
-                    mDismissTop = getStageType(stage) == STAGE_TYPE_MAIN
-                            ? STAGE_TYPE_SIDE : STAGE_TYPE_MAIN;
-                }
-            } else {
-                if (triggerTask.getActivityType() == ACTIVITY_TYPE_HOME && isOpeningType(type)) {
-                    // Going home so dismiss both.
-                    mDismissTop = STAGE_TYPE_UNDEFINED;
-                }
-            }
-            if (mDismissTop != NO_DISMISS) {
-                ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "  splitTransition "
-                                + " deduced Dismiss from request. toTop=%s",
-                        stageTypeToString(mDismissTop));
-                prepareExitSplitScreen(mDismissTop, out);
-                mSplitTransitions.mPendingDismiss = transition;
-            }
-        } else {
-            // Not in split mode, so look for an open into a split stage just so we can whine and
-            // complain about how this isn't a supported operation.
-            if ((type == TRANSIT_OPEN || type == TRANSIT_TO_FRONT)) {
-                if (getStageOfTask(triggerTask) != null) {
-                    throw new IllegalStateException("Entering split implicitly with only one task"
-                            + " isn't supported.");
-                }
-            }
-        }
-        return out;
-    }
-
-    @Override
-    public boolean startAnimation(@NonNull IBinder transition,
-            @NonNull TransitionInfo info,
-            @NonNull SurfaceControl.Transaction startTransaction,
-            @NonNull SurfaceControl.Transaction finishTransaction,
-            @NonNull Transitions.TransitionFinishCallback finishCallback) {
-        if (transition != mSplitTransitions.mPendingDismiss
-                && transition != mSplitTransitions.mPendingEnter) {
-            // Not entering or exiting, so just do some house-keeping and validation.
-
-            // If we're not in split-mode, just abort so something else can handle it.
-            if (!isSplitScreenVisible()) return false;
-
-            for (int iC = 0; iC < info.getChanges().size(); ++iC) {
-                final TransitionInfo.Change change = info.getChanges().get(iC);
-                final ActivityManager.RunningTaskInfo taskInfo = change.getTaskInfo();
-                if (taskInfo == null || !taskInfo.hasParentTask()) continue;
-                final StageTaskListener stage = getStageOfTask(taskInfo);
-                if (stage == null) continue;
-                if (isOpeningType(change.getMode())) {
-                    if (!stage.containsTask(taskInfo.taskId)) {
-                        Log.w(TAG, "Expected onTaskAppeared on " + stage + " to have been called"
-                                + " with " + taskInfo.taskId + " before startAnimation().");
-                    }
-                } else if (isClosingType(change.getMode())) {
-                    if (stage.containsTask(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");
-                // 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
-                // In this case, the result *should* be that we leave split.
-                // TODO(b/184679596): Find a way to either include task-org information in
-                //                    the transition, or synchronize task-org callbacks.
-            }
-
-            // Use normal animations.
-            return false;
-        }
-
-        boolean shouldAnimate = true;
-        if (mSplitTransitions.mPendingEnter == transition) {
-            shouldAnimate = startPendingEnterAnimation(transition, info, startTransaction);
-        } else if (mSplitTransitions.mPendingDismiss == transition) {
-            shouldAnimate = startPendingDismissAnimation(transition, info, startTransaction);
-        }
-        if (!shouldAnimate) return false;
-
-        mSplitTransitions.playAnimation(transition, info, startTransaction, finishTransaction,
-                finishCallback, mMainStage.mRootTaskInfo.token, mSideStage.mRootTaskInfo.token);
-        return true;
-    }
-
-    private boolean startPendingEnterAnimation(@NonNull IBinder transition,
-            @NonNull TransitionInfo info, @NonNull SurfaceControl.Transaction t) {
-        if (info.getType() == TRANSIT_SPLIT_SCREEN_PAIR_OPEN) {
-            // First, verify that we actually have opened 2 apps in split.
-            TransitionInfo.Change mainChild = null;
-            TransitionInfo.Change sideChild = null;
-            for (int iC = 0; iC < info.getChanges().size(); ++iC) {
-                final TransitionInfo.Change change = info.getChanges().get(iC);
-                final ActivityManager.RunningTaskInfo taskInfo = change.getTaskInfo();
-                if (taskInfo == null || !taskInfo.hasParentTask()) continue;
-                final @SplitScreen.StageType int stageType = getStageType(getStageOfTask(taskInfo));
-                if (stageType == STAGE_TYPE_MAIN) {
-                    mainChild = change;
-                } else if (stageType == STAGE_TYPE_SIDE) {
-                    sideChild = change;
-                }
-            }
-            if (mainChild == null || sideChild == null) {
-                throw new IllegalStateException("Launched 2 tasks in split, but didn't receive"
-                        + " 2 tasks in transition. Possibly one of them failed to launch");
-                // TODO: fallback logic. Probably start a new transition to exit split before
-                //       applying anything here. Ideally consolidate with transition-merging.
-            }
-
-            // Update local states (before animating).
-            setDividerVisibility(true);
-            setSideStagePosition(SPLIT_POSITION_BOTTOM_OR_RIGHT, false /* updateBounds */,
-                    null /* wct */);
-            setSplitsVisible(true);
-
-            addDividerBarToTransition(info, t, true /* show */);
-
-            // Make some noise if things aren't totally expected. These states shouldn't effect
-            // transitions locally, but remotes (like Launcher) may get confused if they were
-            // depending on listener callbacks. This can happen because task-organizer callbacks
-            // aren't serialized with transition callbacks.
-            // TODO(b/184679596): Find a way to either include task-org information in
-            //                    the transition, or synchronize task-org callbacks.
-            if (!mMainStage.containsTask(mainChild.getTaskInfo().taskId)) {
-                Log.w(TAG, "Expected onTaskAppeared on " + mMainStage
-                        + " to have been called with " + mainChild.getTaskInfo().taskId
-                        + " before startAnimation().");
-            }
-            if (!mSideStage.containsTask(sideChild.getTaskInfo().taskId)) {
-                Log.w(TAG, "Expected onTaskAppeared on " + mSideStage
-                        + " to have been called with " + sideChild.getTaskInfo().taskId
-                        + " before startAnimation().");
-            }
-            return true;
-        } else {
-            // TODO: other entry method animations
-            throw new RuntimeException("Unsupported split-entry");
-        }
-    }
-
-    private boolean startPendingDismissAnimation(@NonNull IBinder transition,
-            @NonNull TransitionInfo info, @NonNull SurfaceControl.Transaction t) {
-        // Make some noise if things aren't totally expected. These states shouldn't effect
-        // transitions locally, but remotes (like Launcher) may get confused if they were
-        // depending on listener callbacks. This can happen because task-organizer callbacks
-        // aren't serialized with transition callbacks.
-        // TODO(b/184679596): Find a way to either include task-org information in
-        //                    the transition, or synchronize task-org callbacks.
-        if (mMainStage.getChildCount() != 0) {
-            final StringBuilder tasksLeft = new StringBuilder();
-            for (int i = 0; i < mMainStage.getChildCount(); ++i) {
-                tasksLeft.append(i != 0 ? ", " : "");
-                tasksLeft.append(mMainStage.mChildrenTaskInfo.keyAt(i));
-            }
-            Log.w(TAG, "Expected onTaskVanished on " + mMainStage
-                    + " to have been called with [" + tasksLeft.toString()
-                    + "] before startAnimation().");
-        }
-        if (mSideStage.getChildCount() != 0) {
-            final StringBuilder tasksLeft = new StringBuilder();
-            for (int i = 0; i < mSideStage.getChildCount(); ++i) {
-                tasksLeft.append(i != 0 ? ", " : "");
-                tasksLeft.append(mSideStage.mChildrenTaskInfo.keyAt(i));
-            }
-            Log.w(TAG, "Expected onTaskVanished on " + mSideStage
-                    + " to have been called with [" + tasksLeft.toString()
-                    + "] before startAnimation().");
-        }
-
-        // Update local states.
-        setSplitsVisible(false);
-        // Wait until after animation to update divider
-
-        if (info.getType() == TRANSIT_SPLIT_DISMISS_SNAP) {
-            // Reset crops so they don't interfere with subsequent launches
-            t.setWindowCrop(mMainStage.mRootLeash, null);
-            t.setWindowCrop(mSideStage.mRootLeash, null);
-        }
-
-        if (mDismissTop == STAGE_TYPE_UNDEFINED) {
-            // Going home (dismissing both splits)
-
-            // TODO: Have a proper remote for this. Until then, though, reset state and use the
-            //       normal animation stuff (which falls back to the normal launcher remote).
-            t.hide(mSplitLayout.getDividerLeash());
-            setDividerVisibility(false);
-            mSplitTransitions.mPendingDismiss = null;
-            return false;
-        }
-
-        addDividerBarToTransition(info, t, false /* show */);
-        // We're dismissing split by moving the other one to fullscreen.
-        // Since we don't have any animations for this yet, just use the internal example
-        // animations.
-        return true;
-    }
-
-    private void addDividerBarToTransition(@NonNull TransitionInfo info,
-            @NonNull SurfaceControl.Transaction t, boolean show) {
-        final SurfaceControl leash = mSplitLayout.getDividerLeash();
-        final TransitionInfo.Change barChange = new TransitionInfo.Change(null /* token */, leash);
-        final Rect bounds = mSplitLayout.getDividerBounds();
-        barChange.setStartAbsBounds(bounds);
-        barChange.setEndAbsBounds(bounds);
-        barChange.setMode(show ? TRANSIT_TO_FRONT : TRANSIT_TO_BACK);
-        barChange.setFlags(FLAG_IS_DIVIDER_BAR);
-        // Technically this should be order-0, but this is running after layer assignment
-        // and it's a special case, so just add to end.
-        info.addChange(barChange);
-        // Be default, make it visible. The remote animator can adjust alpha if it plans to animate.
-        if (show) {
-            t.setAlpha(leash, 1.f);
-            t.setLayer(leash, Integer.MAX_VALUE);
-            t.setPosition(leash, bounds.left, bounds.top);
-            t.show(leash);
-        }
-    }
-
-    RemoteAnimationTarget getDividerBarLegacyTarget() {
-        final Rect bounds = mSplitLayout.getDividerBounds();
-        return new RemoteAnimationTarget(-1 /* taskId */, -1 /* mode */,
-                mSplitLayout.getDividerLeash(), false /* isTranslucent */, null /* clipRect */,
-                null /* contentInsets */, Integer.MAX_VALUE /* prefixOrderIndex */,
-                new android.graphics.Point(0, 0) /* position */, bounds, bounds,
-                new WindowConfiguration(), true, null /* startLeash */, null /* startBounds */,
-                null /* taskInfo */, false /* allowEnterPip */, TYPE_DOCK_DIVIDER);
-    }
-
-    RemoteAnimationTarget getOutlineLegacyTarget() {
-        final Rect bounds = mSideStage.mRootTaskInfo.configuration.windowConfiguration.getBounds();
-        // Leverage TYPE_DOCK_DIVIDER type when wrapping outline remote animation target in order to
-        // distinguish as a split auxiliary target in Launcher.
-        return new RemoteAnimationTarget(-1 /* taskId */, -1 /* mode */,
-                mSideStage.getOutlineLeash(), false /* isTranslucent */, null /* clipRect */,
-                null /* contentInsets */, Integer.MAX_VALUE /* prefixOrderIndex */,
-                new android.graphics.Point(0, 0) /* position */, bounds, bounds,
-                new WindowConfiguration(), true, null /* startLeash */, null /* startBounds */,
-                null /* taskInfo */, false /* allowEnterPip */, TYPE_DOCK_DIVIDER);
-    }
-
-    @Override
-    public void dump(@NonNull PrintWriter pw, String prefix) {
-        final String innerPrefix = prefix + "  ";
-        final String childPrefix = innerPrefix + "  ";
-        pw.println(prefix + TAG + " mDisplayId=" + mDisplayId);
-        pw.println(innerPrefix + "mDividerVisible=" + mDividerVisible);
-        pw.println(innerPrefix + "MainStage");
-        pw.println(childPrefix + "isActive=" + mMainStage.isActive());
-        mMainStageListener.dump(pw, childPrefix);
-        pw.println(innerPrefix + "SideStage");
-        mSideStageListener.dump(pw, childPrefix);
-        pw.println(innerPrefix + "mSplitLayout=" + mSplitLayout);
-    }
-
-    /**
-     * Directly set the visibility of both splits. This assumes hasChildren matches visibility.
-     * This is intended for batch use, so it assumes other state management logic is already
-     * handled.
-     */
-    private void setSplitsVisible(boolean visible) {
-        mMainStageListener.mVisible = mSideStageListener.mVisible = visible;
-        mMainStageListener.mHasChildren = mSideStageListener.mHasChildren = visible;
-    }
-
-    /**
-     * Sets drag info to be logged when splitscreen is next entered.
-     */
-    public void logOnDroppedToSplit(@SplitPosition int position, InstanceId dragSessionId) {
-        mLogger.enterRequestedByDrag(position, dragSessionId);
-    }
-
-    /**
-     * Logs the exit of splitscreen.
-     */
-    private void logExit(int exitReason) {
-        mLogger.logExit(exitReason,
-                SPLIT_POSITION_UNDEFINED, 0 /* mainStageUid */,
-                SPLIT_POSITION_UNDEFINED, 0 /* sideStageUid */,
-                mSplitLayout.isLandscape());
-    }
-
-    /**
-     * Logs the exit of splitscreen to a specific stage. This must be called before the exit is
-     * executed.
-     */
-    private void logExitToStage(int exitReason, boolean toMainStage) {
-        mLogger.logExit(exitReason,
-                toMainStage ? getMainStagePosition() : SPLIT_POSITION_UNDEFINED,
-                toMainStage ? mMainStage.getTopChildTaskUid() : 0 /* mainStageUid */,
-                !toMainStage ? getSideStagePosition() : SPLIT_POSITION_UNDEFINED,
-                !toMainStage ? mSideStage.getTopChildTaskUid() : 0 /* sideStageUid */,
-                mSplitLayout.isLandscape());
-    }
-
-    class StageListenerImpl implements StageTaskListener.StageListenerCallbacks {
-        boolean mHasRootTask = false;
-        boolean mVisible = false;
-        boolean mHasChildren = false;
-
-        @Override
-        public void onRootTaskAppeared() {
-            mHasRootTask = true;
-            StageCoordinator.this.onStageRootTaskAppeared(this);
-        }
-
-        @Override
-        public void onStatusChanged(boolean visible, boolean hasChildren) {
-            if (!mHasRootTask) return;
-
-            if (mHasChildren != hasChildren) {
-                mHasChildren = hasChildren;
-                StageCoordinator.this.onStageHasChildrenChanged(this);
-            }
-            if (mVisible != visible) {
-                mVisible = visible;
-                StageCoordinator.this.onStageVisibilityChanged(this);
-            }
-        }
-
-        @Override
-        public void onChildTaskStatusChanged(int taskId, boolean present, boolean visible) {
-            StageCoordinator.this.onStageChildTaskStatusChanged(this, taskId, present, visible);
-        }
-
-        @Override
-        public void onRootTaskVanished() {
-            reset();
-            StageCoordinator.this.onStageRootTaskVanished(this);
-        }
-
-        @Override
-        public void onNoLongerSupportMultiWindow() {
-            if (mMainStage.isActive()) {
-                StageCoordinator.this.exitSplitScreen(null /* childrenToTop */,
-                        SPLITSCREEN_UICHANGED__EXIT_REASON__APP_DOES_NOT_SUPPORT_MULTIWINDOW);
-            }
-        }
-
-        private void reset() {
-            mHasRootTask = false;
-            mVisible = false;
-            mHasChildren = false;
-        }
-
-        public void dump(@NonNull PrintWriter pw, String prefix) {
-            pw.println(prefix + "mHasRootTask=" + mHasRootTask);
-            pw.println(prefix + "mVisible=" + mVisible);
-            pw.println(prefix + "mHasChildren=" + mHasChildren);
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/StageTaskListener.java b/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/StageTaskListener.java
deleted file mode 100644
index 7b679580..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/StageTaskListener.java
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.stagesplit;
-
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
-import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
-import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
-import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
-
-import static com.android.wm.shell.transition.Transitions.ENABLE_SHELL_TRANSITIONS;
-
-import android.annotation.CallSuper;
-import android.annotation.Nullable;
-import android.app.ActivityManager;
-import android.graphics.Point;
-import android.graphics.Rect;
-import android.util.SparseArray;
-import android.view.SurfaceControl;
-import android.view.SurfaceSession;
-import android.window.WindowContainerTransaction;
-
-import androidx.annotation.NonNull;
-
-import com.android.wm.shell.ShellTaskOrganizer;
-import com.android.wm.shell.common.SurfaceUtils;
-import com.android.wm.shell.common.SyncTransactionQueue;
-
-import java.io.PrintWriter;
-
-/**
- * Base class that handle common task org. related for split-screen stages.
- * Note that this class and its sub-class do not directly perform hierarchy operations.
- * They only serve to hold a collection of tasks and provide APIs like
- * {@link #setBounds(Rect, WindowContainerTransaction)} for the centralized {@link StageCoordinator}
- * to perform operations in-sync with other containers.
- *
- * @see StageCoordinator
- */
-class StageTaskListener implements ShellTaskOrganizer.TaskListener {
-    private static final String TAG = StageTaskListener.class.getSimpleName();
-
-    protected static final int[] CONTROLLED_ACTIVITY_TYPES = {ACTIVITY_TYPE_STANDARD};
-    protected static final int[] CONTROLLED_WINDOWING_MODES =
-            {WINDOWING_MODE_FULLSCREEN, WINDOWING_MODE_UNDEFINED};
-    protected static final int[] CONTROLLED_WINDOWING_MODES_WHEN_ACTIVE =
-            {WINDOWING_MODE_FULLSCREEN, WINDOWING_MODE_UNDEFINED, WINDOWING_MODE_MULTI_WINDOW};
-
-    /** Callback interface for listening to changes in a split-screen stage. */
-    public interface StageListenerCallbacks {
-        void onRootTaskAppeared();
-
-        void onStatusChanged(boolean visible, boolean hasChildren);
-
-        void onChildTaskStatusChanged(int taskId, boolean present, boolean visible);
-
-        void onRootTaskVanished();
-        void onNoLongerSupportMultiWindow();
-    }
-
-    private final StageListenerCallbacks mCallbacks;
-    private final SurfaceSession mSurfaceSession;
-    protected final SyncTransactionQueue mSyncQueue;
-
-    protected ActivityManager.RunningTaskInfo mRootTaskInfo;
-    protected SurfaceControl mRootLeash;
-    protected SurfaceControl mDimLayer;
-    protected SparseArray<ActivityManager.RunningTaskInfo> mChildrenTaskInfo = new SparseArray<>();
-    private final SparseArray<SurfaceControl> mChildrenLeashes = new SparseArray<>();
-
-    private final StageTaskUnfoldController mStageTaskUnfoldController;
-
-    StageTaskListener(ShellTaskOrganizer taskOrganizer, int displayId,
-            StageListenerCallbacks callbacks, SyncTransactionQueue syncQueue,
-            SurfaceSession surfaceSession,
-            @Nullable StageTaskUnfoldController stageTaskUnfoldController) {
-        mCallbacks = callbacks;
-        mSyncQueue = syncQueue;
-        mSurfaceSession = surfaceSession;
-        mStageTaskUnfoldController = stageTaskUnfoldController;
-        taskOrganizer.createRootTask(displayId, WINDOWING_MODE_MULTI_WINDOW, this);
-    }
-
-    int getChildCount() {
-        return mChildrenTaskInfo.size();
-    }
-
-    boolean containsTask(int taskId) {
-        return mChildrenTaskInfo.contains(taskId);
-    }
-
-    /**
-     * Returns the top activity uid for the top child task.
-     */
-    int getTopChildTaskUid() {
-        for (int i = mChildrenTaskInfo.size() - 1; i >= 0; --i) {
-            final ActivityManager.RunningTaskInfo info = mChildrenTaskInfo.valueAt(i);
-            if (info.topActivityInfo == null) {
-                continue;
-            }
-            return info.topActivityInfo.applicationInfo.uid;
-        }
-        return 0;
-    }
-
-    /** @return {@code true} if this listener contains the currently focused task. */
-    boolean isFocused() {
-        if (mRootTaskInfo == null) {
-            return false;
-        }
-
-        if (mRootTaskInfo.isFocused) {
-            return true;
-        }
-
-        for (int i = mChildrenTaskInfo.size() - 1; i >= 0; --i) {
-            if (mChildrenTaskInfo.valueAt(i).isFocused) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    @Override
-    @CallSuper
-    public void onTaskAppeared(ActivityManager.RunningTaskInfo taskInfo, SurfaceControl leash) {
-        if (mRootTaskInfo == null && !taskInfo.hasParentTask()) {
-            mRootLeash = leash;
-            mRootTaskInfo = taskInfo;
-            mCallbacks.onRootTaskAppeared();
-            sendStatusChanged();
-            mSyncQueue.runInSync(t -> {
-                t.hide(mRootLeash);
-                mDimLayer =
-                        SurfaceUtils.makeDimLayer(t, mRootLeash, "Dim layer", mSurfaceSession);
-            });
-        } else if (taskInfo.parentTaskId == mRootTaskInfo.taskId) {
-            final int taskId = taskInfo.taskId;
-            mChildrenLeashes.put(taskId, leash);
-            mChildrenTaskInfo.put(taskId, taskInfo);
-            updateChildTaskSurface(taskInfo, leash, true /* firstAppeared */);
-            mCallbacks.onChildTaskStatusChanged(taskId, true /* present */, taskInfo.isVisible);
-            if (ENABLE_SHELL_TRANSITIONS) {
-                // Status is managed/synchronized by the transition lifecycle.
-                return;
-            }
-            sendStatusChanged();
-        } else {
-            throw new IllegalArgumentException(this + "\n Unknown task: " + taskInfo
-                    + "\n mRootTaskInfo: " + mRootTaskInfo);
-        }
-
-        if (mStageTaskUnfoldController != null) {
-            mStageTaskUnfoldController.onTaskAppeared(taskInfo, leash);
-        }
-    }
-
-    @Override
-    @CallSuper
-    public void onTaskInfoChanged(ActivityManager.RunningTaskInfo taskInfo) {
-        if (!taskInfo.supportsMultiWindow) {
-            // Leave split screen if the task no longer supports multi window.
-            mCallbacks.onNoLongerSupportMultiWindow();
-            return;
-        }
-        if (mRootTaskInfo.taskId == taskInfo.taskId) {
-            mRootTaskInfo = taskInfo;
-        } else if (taskInfo.parentTaskId == mRootTaskInfo.taskId) {
-            mChildrenTaskInfo.put(taskInfo.taskId, taskInfo);
-            mCallbacks.onChildTaskStatusChanged(taskInfo.taskId, true /* present */,
-                    taskInfo.isVisible);
-            if (!ENABLE_SHELL_TRANSITIONS) {
-                updateChildTaskSurface(
-                        taskInfo, mChildrenLeashes.get(taskInfo.taskId), false /* firstAppeared */);
-            }
-        } else {
-            throw new IllegalArgumentException(this + "\n Unknown task: " + taskInfo
-                    + "\n mRootTaskInfo: " + mRootTaskInfo);
-        }
-        if (ENABLE_SHELL_TRANSITIONS) {
-            // Status is managed/synchronized by the transition lifecycle.
-            return;
-        }
-        sendStatusChanged();
-    }
-
-    @Override
-    @CallSuper
-    public void onTaskVanished(ActivityManager.RunningTaskInfo taskInfo) {
-        final int taskId = taskInfo.taskId;
-        if (mRootTaskInfo.taskId == taskId) {
-            mCallbacks.onRootTaskVanished();
-            mSyncQueue.runInSync(t -> t.remove(mDimLayer));
-            mRootTaskInfo = null;
-        } else if (mChildrenTaskInfo.contains(taskId)) {
-            mChildrenTaskInfo.remove(taskId);
-            mChildrenLeashes.remove(taskId);
-            mCallbacks.onChildTaskStatusChanged(taskId, false /* present */, taskInfo.isVisible);
-            if (ENABLE_SHELL_TRANSITIONS) {
-                // Status is managed/synchronized by the transition lifecycle.
-                return;
-            }
-            sendStatusChanged();
-        } else {
-            throw new IllegalArgumentException(this + "\n Unknown task: " + taskInfo
-                    + "\n mRootTaskInfo: " + mRootTaskInfo);
-        }
-
-        if (mStageTaskUnfoldController != null) {
-            mStageTaskUnfoldController.onTaskVanished(taskInfo);
-        }
-    }
-
-    @Override
-    public void attachChildSurfaceToTask(int taskId, SurfaceControl.Builder b) {
-        b.setParent(findTaskSurface(taskId));
-    }
-
-    @Override
-    public void reparentChildSurfaceToTask(int taskId, SurfaceControl sc,
-            SurfaceControl.Transaction t) {
-        t.reparent(sc, findTaskSurface(taskId));
-    }
-
-    private SurfaceControl findTaskSurface(int taskId) {
-        if (mRootTaskInfo.taskId == taskId) {
-            return mRootLeash;
-        } else if (mChildrenLeashes.contains(taskId)) {
-            return mChildrenLeashes.get(taskId);
-        } else {
-            throw new IllegalArgumentException("There is no surface for taskId=" + taskId);
-        }
-    }
-
-    void setBounds(Rect bounds, WindowContainerTransaction wct) {
-        wct.setBounds(mRootTaskInfo.token, bounds);
-    }
-
-    void reorderChild(int taskId, boolean onTop, WindowContainerTransaction wct) {
-        if (!containsTask(taskId)) {
-            return;
-        }
-        wct.reorder(mChildrenTaskInfo.get(taskId).token, onTop /* onTop */);
-    }
-
-    void setVisibility(boolean visible, WindowContainerTransaction wct) {
-        wct.reorder(mRootTaskInfo.token, visible /* onTop */);
-    }
-
-    void onSplitScreenListenerRegistered(SplitScreen.SplitScreenListener listener,
-            @SplitScreen.StageType int stage) {
-        for (int i = mChildrenTaskInfo.size() - 1; i >= 0; --i) {
-            int taskId = mChildrenTaskInfo.keyAt(i);
-            listener.onTaskStageChanged(taskId, stage,
-                    mChildrenTaskInfo.get(taskId).isVisible);
-        }
-    }
-
-    private void updateChildTaskSurface(ActivityManager.RunningTaskInfo taskInfo,
-            SurfaceControl leash, boolean firstAppeared) {
-        final Point taskPositionInParent = taskInfo.positionInParent;
-        mSyncQueue.runInSync(t -> {
-            t.setWindowCrop(leash, null);
-            t.setPosition(leash, taskPositionInParent.x, taskPositionInParent.y);
-            if (firstAppeared && !ENABLE_SHELL_TRANSITIONS) {
-                t.setAlpha(leash, 1f);
-                t.setMatrix(leash, 1, 0, 0, 1);
-                t.show(leash);
-            }
-        });
-    }
-
-    private void sendStatusChanged() {
-        mCallbacks.onStatusChanged(mRootTaskInfo.isVisible, mChildrenTaskInfo.size() > 0);
-    }
-
-    @Override
-    @CallSuper
-    public void dump(@NonNull PrintWriter pw, String prefix) {
-        final String innerPrefix = prefix + "  ";
-        final String childPrefix = innerPrefix + "  ";
-        pw.println(prefix + this);
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/StageTaskUnfoldController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/StageTaskUnfoldController.java
deleted file mode 100644
index 62b9da6..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/stagesplit/StageTaskUnfoldController.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.stagesplit;
-
-import static android.view.Display.DEFAULT_DISPLAY;
-
-import android.animation.RectEvaluator;
-import android.animation.TypeEvaluator;
-import android.annotation.NonNull;
-import android.app.ActivityManager;
-import android.content.Context;
-import android.graphics.Rect;
-import android.util.SparseArray;
-import android.view.InsetsSource;
-import android.view.InsetsState;
-import android.view.SurfaceControl;
-
-import com.android.internal.policy.ScreenDecorationsUtils;
-import com.android.wm.shell.common.DisplayInsetsController;
-import com.android.wm.shell.common.DisplayInsetsController.OnInsetsChangedListener;
-import com.android.wm.shell.common.TransactionPool;
-import com.android.wm.shell.unfold.ShellUnfoldProgressProvider;
-import com.android.wm.shell.unfold.ShellUnfoldProgressProvider.UnfoldListener;
-import com.android.wm.shell.unfold.UnfoldBackgroundController;
-
-import java.util.concurrent.Executor;
-
-/**
- * Controls transformations of the split screen task surfaces in response
- * to the unfolding/folding action on foldable devices
- */
-public class StageTaskUnfoldController implements UnfoldListener, OnInsetsChangedListener {
-
-    private static final TypeEvaluator<Rect> RECT_EVALUATOR = new RectEvaluator(new Rect());
-    private static final float CROPPING_START_MARGIN_FRACTION = 0.05f;
-
-    private final SparseArray<AnimationContext> mAnimationContextByTaskId = new SparseArray<>();
-    private final ShellUnfoldProgressProvider mUnfoldProgressProvider;
-    private final DisplayInsetsController mDisplayInsetsController;
-    private final UnfoldBackgroundController mBackgroundController;
-    private final Executor mExecutor;
-    private final int mExpandedTaskBarHeight;
-    private final float mWindowCornerRadiusPx;
-    private final Rect mStageBounds = new Rect();
-    private final TransactionPool mTransactionPool;
-
-    private InsetsSource mTaskbarInsetsSource;
-    private boolean mBothStagesVisible;
-
-    public StageTaskUnfoldController(@NonNull Context context,
-            @NonNull TransactionPool transactionPool,
-            @NonNull ShellUnfoldProgressProvider unfoldProgressProvider,
-            @NonNull DisplayInsetsController displayInsetsController,
-            @NonNull UnfoldBackgroundController backgroundController,
-            @NonNull Executor executor) {
-        mUnfoldProgressProvider = unfoldProgressProvider;
-        mTransactionPool = transactionPool;
-        mExecutor = executor;
-        mBackgroundController = backgroundController;
-        mDisplayInsetsController = displayInsetsController;
-        mWindowCornerRadiusPx = ScreenDecorationsUtils.getWindowCornerRadius(context);
-        mExpandedTaskBarHeight = context.getResources().getDimensionPixelSize(
-                com.android.internal.R.dimen.taskbar_frame_height);
-    }
-
-    /**
-     * Initializes the controller, starts listening for the external events
-     */
-    public void init() {
-        mUnfoldProgressProvider.addListener(mExecutor, this);
-        mDisplayInsetsController.addInsetsChangedListener(DEFAULT_DISPLAY, this);
-    }
-
-    @Override
-    public void insetsChanged(InsetsState insetsState) {
-        mTaskbarInsetsSource = insetsState.getSource(InsetsState.ITYPE_EXTRA_NAVIGATION_BAR);
-        for (int i = mAnimationContextByTaskId.size() - 1; i >= 0; i--) {
-            AnimationContext context = mAnimationContextByTaskId.valueAt(i);
-            context.update();
-        }
-    }
-
-    /**
-     * Called when split screen task appeared
-     * @param taskInfo info for the appeared task
-     * @param leash surface leash for the appeared task
-     */
-    public void onTaskAppeared(ActivityManager.RunningTaskInfo taskInfo, SurfaceControl leash) {
-        AnimationContext context = new AnimationContext(leash);
-        mAnimationContextByTaskId.put(taskInfo.taskId, context);
-    }
-
-    /**
-     * Called when a split screen task vanished
-     * @param taskInfo info for the vanished task
-     */
-    public void onTaskVanished(ActivityManager.RunningTaskInfo taskInfo) {
-        AnimationContext context = mAnimationContextByTaskId.get(taskInfo.taskId);
-        if (context != null) {
-            final SurfaceControl.Transaction transaction = mTransactionPool.acquire();
-            resetSurface(transaction, context);
-            transaction.apply();
-            mTransactionPool.release(transaction);
-        }
-        mAnimationContextByTaskId.remove(taskInfo.taskId);
-    }
-
-    @Override
-    public void onStateChangeProgress(float progress) {
-        if (mAnimationContextByTaskId.size() == 0 || !mBothStagesVisible) return;
-
-        final SurfaceControl.Transaction transaction = mTransactionPool.acquire();
-        mBackgroundController.ensureBackground(transaction);
-
-        for (int i = mAnimationContextByTaskId.size() - 1; i >= 0; i--) {
-            AnimationContext context = mAnimationContextByTaskId.valueAt(i);
-
-            context.mCurrentCropRect.set(RECT_EVALUATOR
-                    .evaluate(progress, context.mStartCropRect, context.mEndCropRect));
-
-            transaction.setWindowCrop(context.mLeash, context.mCurrentCropRect)
-                    .setCornerRadius(context.mLeash, mWindowCornerRadiusPx);
-        }
-
-        transaction.apply();
-
-        mTransactionPool.release(transaction);
-    }
-
-    @Override
-    public void onStateChangeFinished() {
-        resetTransformations();
-    }
-
-    /**
-     * Called when split screen visibility changes
-     * @param bothStagesVisible true if both stages of the split screen are visible
-     */
-    public void onSplitVisibilityChanged(boolean bothStagesVisible) {
-        mBothStagesVisible = bothStagesVisible;
-        if (!bothStagesVisible) {
-            resetTransformations();
-        }
-    }
-
-    /**
-     * Called when split screen stage bounds changed
-     * @param bounds new bounds for this stage
-     */
-    public void onLayoutChanged(Rect bounds) {
-        mStageBounds.set(bounds);
-
-        for (int i = mAnimationContextByTaskId.size() - 1; i >= 0; i--) {
-            final AnimationContext context = mAnimationContextByTaskId.valueAt(i);
-            context.update();
-        }
-    }
-
-    private void resetTransformations() {
-        final SurfaceControl.Transaction transaction = mTransactionPool.acquire();
-
-        for (int i = mAnimationContextByTaskId.size() - 1; i >= 0; i--) {
-            final AnimationContext context = mAnimationContextByTaskId.valueAt(i);
-            resetSurface(transaction, context);
-        }
-        mBackgroundController.removeBackground(transaction);
-        transaction.apply();
-
-        mTransactionPool.release(transaction);
-    }
-
-    private void resetSurface(SurfaceControl.Transaction transaction, AnimationContext context) {
-        transaction
-                .setWindowCrop(context.mLeash, null)
-                .setCornerRadius(context.mLeash, 0.0F);
-    }
-
-    private class AnimationContext {
-        final SurfaceControl mLeash;
-        final Rect mStartCropRect = new Rect();
-        final Rect mEndCropRect = new Rect();
-        final Rect mCurrentCropRect = new Rect();
-
-        private AnimationContext(SurfaceControl leash) {
-            this.mLeash = leash;
-            update();
-        }
-
-        private void update() {
-            mStartCropRect.set(mStageBounds);
-
-            if (mTaskbarInsetsSource != null) {
-                // Only insets the cropping window with taskbar when taskbar is expanded
-                if (mTaskbarInsetsSource.getFrame().height() >= mExpandedTaskBarHeight) {
-                    mStartCropRect.inset(mTaskbarInsetsSource
-                            .calculateVisibleInsets(mStartCropRect));
-                }
-            }
-
-            // Offset to surface coordinates as layout bounds are in screen coordinates
-            mStartCropRect.offsetTo(0, 0);
-
-            mEndCropRect.set(mStartCropRect);
-
-            int maxSize = Math.max(mEndCropRect.width(), mEndCropRect.height());
-            int margin = (int) (maxSize * CROPPING_START_MARGIN_FRACTION);
-            mStartCropRect.inset(margin, margin, margin, margin);
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawer.java
index 54d62ed..a0e176c 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawer.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawer.java
@@ -261,7 +261,8 @@
                 WindowManager.LayoutParams.TYPE_APPLICATION_STARTING);
         params.setFitInsetsSides(0);
         params.setFitInsetsTypes(0);
-        params.format = PixelFormat.TRANSLUCENT;
+        params.format = suggestType == STARTING_WINDOW_TYPE_LEGACY_SPLASH_SCREEN
+                ? PixelFormat.OPAQUE : PixelFormat.TRANSLUCENT;
         int windowFlags = WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED
                 | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
                 | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR;
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingWindowController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingWindowController.java
index fbc9923..379af21 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingWindowController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/StartingWindowController.java
@@ -42,10 +42,12 @@
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.util.function.TriConsumer;
 import com.android.launcher3.icons.IconProvider;
+import com.android.wm.shell.ShellTaskOrganizer;
 import com.android.wm.shell.common.RemoteCallable;
 import com.android.wm.shell.common.ShellExecutor;
 import com.android.wm.shell.common.SingleInstanceRemoteListener;
 import com.android.wm.shell.common.TransactionPool;
+import com.android.wm.shell.sysui.ShellInit;
 
 /**
  * Implementation to draw the starting window to an application, and remove the starting window
@@ -74,6 +76,7 @@
     private TriConsumer<Integer, Integer, Integer> mTaskLaunchingCallback;
     private final StartingSurfaceImpl mImpl = new StartingSurfaceImpl();
     private final Context mContext;
+    private final ShellTaskOrganizer mShellTaskOrganizer;
     private final ShellExecutor mSplashScreenExecutor;
     /**
      * Need guarded because it has exposed to StartingSurface
@@ -81,14 +84,20 @@
     @GuardedBy("mTaskBackgroundColors")
     private final SparseIntArray mTaskBackgroundColors = new SparseIntArray();
 
-    public StartingWindowController(Context context, ShellExecutor splashScreenExecutor,
-            StartingWindowTypeAlgorithm startingWindowTypeAlgorithm, IconProvider iconProvider,
+    public StartingWindowController(Context context,
+            ShellInit shellInit,
+            ShellTaskOrganizer shellTaskOrganizer,
+            ShellExecutor splashScreenExecutor,
+            StartingWindowTypeAlgorithm startingWindowTypeAlgorithm,
+            IconProvider iconProvider,
             TransactionPool pool) {
         mContext = context;
+        mShellTaskOrganizer = shellTaskOrganizer;
         mStartingSurfaceDrawer = new StartingSurfaceDrawer(context, splashScreenExecutor,
                 iconProvider, pool);
         mStartingWindowTypeAlgorithm = startingWindowTypeAlgorithm;
         mSplashScreenExecutor = splashScreenExecutor;
+        shellInit.addInitCallback(this::onInit, this);
     }
 
     /**
@@ -98,6 +107,10 @@
         return mImpl;
     }
 
+    private void onInit() {
+        mShellTaskOrganizer.initStartingWindow(this);
+    }
+
     @Override
     public Context getContext() {
         return mContext;
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java
index 95bc579..b70bde3 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/startingsurface/TaskSnapshotWindow.java
@@ -20,10 +20,8 @@
 import static android.graphics.Color.WHITE;
 import static android.graphics.Color.alpha;
 import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER;
-import static android.view.ViewRootImpl.LOCAL_LAYOUT;
 import static android.view.WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS;
 import static android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS;
-import static android.view.WindowLayout.UNSPECIFIED_LENGTH;
 import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
 import static android.view.WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
 import static android.view.WindowManager.LayoutParams.FLAG_IGNORE_CHEEK_PRESSES;
@@ -53,7 +51,6 @@
 import android.app.ActivityManager;
 import android.app.ActivityManager.TaskDescription;
 import android.app.ActivityThread;
-import android.app.WindowConfiguration;
 import android.content.Context;
 import android.graphics.Canvas;
 import android.graphics.Color;
@@ -80,7 +77,6 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.WindowInsets;
-import android.view.WindowLayout;
 import android.view.WindowManager;
 import android.view.WindowManagerGlobal;
 import android.window.ClientWindowFrames;
@@ -212,8 +208,6 @@
         final IWindowSession session = WindowManagerGlobal.getWindowSession();
         final SurfaceControl surfaceControl = new SurfaceControl();
         final ClientWindowFrames tmpFrames = new ClientWindowFrames();
-        final WindowLayout windowLayout = new WindowLayout();
-        final Rect displayCutoutSafe = new Rect();
 
         final InsetsSourceControl[] tmpControls = new InsetsSourceControl[0];
         final MergedConfiguration tmpMergedConfiguration = new MergedConfiguration();
@@ -234,11 +228,13 @@
 
         final InsetsState tmpInsetsState = new InsetsState();
         final InputChannel tmpInputChannel = new InputChannel();
+        final float[] sizeCompatScale = { 1f };
 
         try {
             Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "TaskSnapshot#addToDisplay");
             final int res = session.addToDisplay(window, layoutParams, View.GONE, displayId,
-                    info.requestedVisibilities, tmpInputChannel, tmpInsetsState, tmpControls);
+                    info.requestedVisibilities, tmpInputChannel, tmpInsetsState, tmpControls,
+                    new Rect(), sizeCompatScale);
             Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
             if (res < 0) {
                 Slog.w(TAG, "Failed to add snapshot starting window res=" + res);
@@ -250,25 +246,9 @@
         window.setOuter(snapshotSurface);
         try {
             Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "TaskSnapshot#relayout");
-            if (LOCAL_LAYOUT) {
-                if (!surfaceControl.isValid()) {
-                    session.updateVisibility(window, layoutParams, View.VISIBLE,
-                            tmpMergedConfiguration, surfaceControl, tmpInsetsState, tmpControls);
-                }
-                tmpInsetsState.getDisplayCutoutSafe(displayCutoutSafe);
-                final WindowConfiguration winConfig =
-                        tmpMergedConfiguration.getMergedConfiguration().windowConfiguration;
-                windowLayout.computeFrames(layoutParams, tmpInsetsState, displayCutoutSafe,
-                        winConfig.getBounds(), winConfig.getWindowingMode(), UNSPECIFIED_LENGTH,
-                        UNSPECIFIED_LENGTH, info.requestedVisibilities,
-                        null /* attachedWindowFrame */, 1f /* compatScale */, tmpFrames);
-                session.updateLayout(window, layoutParams, 0 /* flags */, tmpFrames,
-                        UNSPECIFIED_LENGTH, UNSPECIFIED_LENGTH);
-            } else {
-                session.relayout(window, layoutParams, -1, -1, View.VISIBLE, 0,
-                        tmpFrames, tmpMergedConfiguration, surfaceControl, tmpInsetsState,
-                        tmpControls, new Bundle());
-            }
+            session.relayout(window, layoutParams, -1, -1, View.VISIBLE, 0,
+                    tmpFrames, tmpMergedConfiguration, surfaceControl, tmpInsetsState,
+                    tmpControls, new Bundle());
             Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
         } catch (RemoteException e) {
             snapshotSurface.clearWindowSynced();
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/sysui/ConfigurationChangeListener.java b/libs/WindowManager/Shell/src/com/android/wm/shell/sysui/ConfigurationChangeListener.java
new file mode 100644
index 0000000..2fca8f0
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/sysui/ConfigurationChangeListener.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.sysui;
+
+import android.content.res.Configuration;
+
+/**
+ * Callbacks for when the configuration changes.
+ */
+public interface ConfigurationChangeListener {
+
+    /**
+     * Called when a configuration changes. This precedes all the following callbacks.
+     */
+    default void onConfigurationChanged(Configuration newConfiguration) {}
+
+    /**
+     * Convenience method to the above, called when the density or font scale changes.
+     */
+    default void onDensityOrFontScaleChanged() {}
+
+    /**
+     * Convenience method to the above, called when the smallest screen width changes.
+     */
+    default void onSmallestScreenWidthChanged() {}
+
+    /**
+     * Convenience method to the above, called when the system theme changes, including dark/light
+     * UI_MODE changes.
+     */
+    default void onThemeChanged() {}
+
+    /**
+     * Convenience method to the above, called when the local list or layout direction changes.
+     */
+    default void onLocaleOrLayoutDirectionChanged() {}
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/sysui/KeyguardChangeListener.java b/libs/WindowManager/Shell/src/com/android/wm/shell/sysui/KeyguardChangeListener.java
new file mode 100644
index 0000000..1c0b358
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/sysui/KeyguardChangeListener.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.sysui;
+
+/**
+ * Callbacks for when the keyguard changes.
+ */
+public interface KeyguardChangeListener {
+    /**
+     * Notifies the Shell that the keyguard is showing (and if so, whether it is occluded).
+     */
+    default void onKeyguardVisibilityChanged(boolean visible, boolean occluded,
+            boolean animatingDismiss) {}
+
+    /**
+     * Notifies the Shell when the keyguard dismiss animation has finished.
+     *
+     * TODO(b/206741900) deprecate this path once we're able to animate the PiP window as part of
+     * keyguard dismiss animation.
+     */
+    default void onKeyguardDismissAnimationFinished() {}
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/sysui/ShellCommandHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/sysui/ShellCommandHandler.java
new file mode 100644
index 0000000..f4fc0c4
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/sysui/ShellCommandHandler.java
@@ -0,0 +1,164 @@
+/*
+ * 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.
+ */
+
+package com.android.wm.shell.sysui;
+
+import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_BOTTOM_OR_RIGHT;
+
+import com.android.wm.shell.ShellTaskOrganizer;
+import com.android.wm.shell.common.ShellExecutor;
+import com.android.wm.shell.hidedisplaycutout.HideDisplayCutoutController;
+import com.android.wm.shell.kidsmode.KidsModeTaskOrganizer;
+import com.android.wm.shell.onehanded.OneHandedController;
+import com.android.wm.shell.pip.Pip;
+import com.android.wm.shell.recents.RecentTasksController;
+import com.android.wm.shell.splitscreen.SplitScreenController;
+
+import java.io.PrintWriter;
+import java.util.Optional;
+
+/**
+ * An entry point into the shell for dumping shell internal state and running adb commands.
+ *
+ * Use with {@code adb shell dumpsys activity service SystemUIService WMShell ...}.
+ */
+public final class ShellCommandHandler {
+    private static final String TAG = ShellCommandHandler.class.getSimpleName();
+
+    private final Optional<SplitScreenController> mSplitScreenOptional;
+    private final Optional<Pip> mPipOptional;
+    private final Optional<OneHandedController> mOneHandedOptional;
+    private final Optional<HideDisplayCutoutController> mHideDisplayCutout;
+    private final Optional<RecentTasksController> mRecentTasks;
+    private final ShellTaskOrganizer mShellTaskOrganizer;
+    private final KidsModeTaskOrganizer mKidsModeTaskOrganizer;
+
+    public ShellCommandHandler(
+            ShellController shellController,
+            ShellTaskOrganizer shellTaskOrganizer,
+            KidsModeTaskOrganizer kidsModeTaskOrganizer,
+            Optional<SplitScreenController> splitScreenOptional,
+            Optional<Pip> pipOptional,
+            Optional<OneHandedController> oneHandedOptional,
+            Optional<HideDisplayCutoutController> hideDisplayCutout,
+            Optional<RecentTasksController> recentTasks,
+            ShellExecutor mainExecutor) {
+        mShellTaskOrganizer = shellTaskOrganizer;
+        mKidsModeTaskOrganizer = kidsModeTaskOrganizer;
+        mRecentTasks = recentTasks;
+        mSplitScreenOptional = splitScreenOptional;
+        mPipOptional = pipOptional;
+        mOneHandedOptional = oneHandedOptional;
+        mHideDisplayCutout = hideDisplayCutout;
+        // TODO(238217847): To be removed once the command handler dependencies are inverted
+        shellController.setShellCommandHandler(this);
+    }
+
+    /** Dumps WM Shell internal state. */
+    public void dump(PrintWriter pw) {
+        mShellTaskOrganizer.dump(pw, "");
+        pw.println();
+        pw.println();
+        mPipOptional.ifPresent(pip -> pip.dump(pw));
+        mOneHandedOptional.ifPresent(oneHanded -> oneHanded.dump(pw));
+        mHideDisplayCutout.ifPresent(hideDisplayCutout -> hideDisplayCutout.dump(pw));
+        pw.println();
+        pw.println();
+        mSplitScreenOptional.ifPresent(splitScreen -> splitScreen.dump(pw, ""));
+        pw.println();
+        pw.println();
+        mRecentTasks.ifPresent(recentTasks -> recentTasks.dump(pw, ""));
+        pw.println();
+        pw.println();
+        mKidsModeTaskOrganizer.dump(pw, "");
+    }
+
+
+    /** Returns {@code true} if command was found and executed. */
+    public boolean handleCommand(final String[] args, PrintWriter pw) {
+        if (args.length < 2) {
+            // Argument at position 0 is "WMShell".
+            return false;
+        }
+        switch (args[1]) {
+            case "moveToSideStage":
+                return runMoveToSideStage(args, pw);
+            case "removeFromSideStage":
+                return runRemoveFromSideStage(args, pw);
+            case "setSideStagePosition":
+                return runSetSideStagePosition(args, pw);
+            case "help":
+                return runHelp(pw);
+            default:
+                return false;
+        }
+    }
+
+    private boolean runMoveToSideStage(String[] args, PrintWriter pw) {
+        if (args.length < 3) {
+            // First arguments are "WMShell" and command name.
+            pw.println("Error: task id should be provided as arguments");
+            return false;
+        }
+        final int taskId = new Integer(args[2]);
+        final int sideStagePosition = args.length > 3
+                ? new Integer(args[3]) : SPLIT_POSITION_BOTTOM_OR_RIGHT;
+        mSplitScreenOptional.ifPresent(split -> split.moveToSideStage(taskId, sideStagePosition));
+        return true;
+    }
+
+    private boolean runRemoveFromSideStage(String[] args, PrintWriter pw) {
+        if (args.length < 3) {
+            // First arguments are "WMShell" and command name.
+            pw.println("Error: task id should be provided as arguments");
+            return false;
+        }
+        final int taskId = new Integer(args[2]);
+        mSplitScreenOptional.ifPresent(split -> split.removeFromSideStage(taskId));
+        return true;
+    }
+
+    private boolean runSetSideStagePosition(String[] args, PrintWriter pw) {
+        if (args.length < 3) {
+            // First arguments are "WMShell" and command name.
+            pw.println("Error: side stage position should be provided as arguments");
+            return false;
+        }
+        final int position = new Integer(args[2]);
+        mSplitScreenOptional.ifPresent(split -> split.setSideStagePosition(position));
+        return true;
+    }
+
+    private boolean runHelp(PrintWriter pw) {
+        pw.println("Window Manager Shell commands:");
+        pw.println("  help");
+        pw.println("      Print this help text.");
+        pw.println("  <no arguments provided>");
+        pw.println("    Dump Window Manager Shell internal state");
+        pw.println("  pair <taskId1> <taskId2>");
+        pw.println("  unpair <taskId>");
+        pw.println("    Pairs/unpairs tasks with given ids.");
+        pw.println("  moveToSideStage <taskId> <SideStagePosition>");
+        pw.println("    Move a task with given id in split-screen mode.");
+        pw.println("  removeFromSideStage <taskId>");
+        pw.println("    Remove a task with given id in split-screen mode.");
+        pw.println("  setSideStageOutline <true/false>");
+        pw.println("    Enable/Disable outline on the side-stage.");
+        pw.println("  setSideStagePosition <SideStagePosition>");
+        pw.println("    Sets the position of the side-stage.");
+        return true;
+    }
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/sysui/ShellController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/sysui/ShellController.java
new file mode 100644
index 0000000..f1f317f
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/sysui/ShellController.java
@@ -0,0 +1,232 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.sysui;
+
+import static android.content.pm.ActivityInfo.CONFIG_ASSETS_PATHS;
+import static android.content.pm.ActivityInfo.CONFIG_FONT_SCALE;
+import static android.content.pm.ActivityInfo.CONFIG_LAYOUT_DIRECTION;
+import static android.content.pm.ActivityInfo.CONFIG_LOCALE;
+import static android.content.pm.ActivityInfo.CONFIG_SMALLEST_SCREEN_SIZE;
+import static android.content.pm.ActivityInfo.CONFIG_UI_MODE;
+
+import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_SYSUI_EVENTS;
+
+import android.content.pm.ActivityInfo;
+import android.content.res.Configuration;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.VisibleForTesting;
+
+import com.android.internal.protolog.common.ProtoLog;
+import com.android.wm.shell.common.ShellExecutor;
+import com.android.wm.shell.common.annotations.ExternalThread;
+
+import java.io.PrintWriter;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+/**
+ * Handles event callbacks from SysUI that can be used within the Shell.
+ */
+public class ShellController {
+    private static final String TAG = ShellController.class.getSimpleName();
+
+    private final ShellInit mShellInit;
+    private final ShellExecutor mMainExecutor;
+    private final ShellInterfaceImpl mImpl = new ShellInterfaceImpl();
+
+    private ShellCommandHandler mShellCommandHandler;
+
+    private final CopyOnWriteArrayList<ConfigurationChangeListener> mConfigChangeListeners =
+            new CopyOnWriteArrayList<>();
+    private final CopyOnWriteArrayList<KeyguardChangeListener> mKeyguardChangeListeners =
+            new CopyOnWriteArrayList<>();
+    private Configuration mLastConfiguration;
+
+
+    public ShellController(ShellInit shellInit, ShellExecutor mainExecutor) {
+        mShellInit = shellInit;
+        mMainExecutor = mainExecutor;
+    }
+
+    /**
+     * Returns the external interface to this controller.
+     */
+    public ShellInterface asShell() {
+        return mImpl;
+    }
+
+    /**
+     * Sets the command handler to call back to.
+     * TODO(238217847): This is only exposed this way until we can remove the dependencies from the
+     *                  command handler to other classes.
+     */
+    public void setShellCommandHandler(ShellCommandHandler shellCommandHandler) {
+        mShellCommandHandler = shellCommandHandler;
+    }
+
+    /**
+     * Adds a new configuration listener. The configuration change callbacks are not made in any
+     * particular order.
+     */
+    public void addConfigurationChangeListener(ConfigurationChangeListener listener) {
+        mConfigChangeListeners.remove(listener);
+        mConfigChangeListeners.add(listener);
+    }
+
+    /**
+     * Removes an existing configuration listener.
+     */
+    public void removeConfigurationChangeListener(ConfigurationChangeListener listener) {
+        mConfigChangeListeners.remove(listener);
+    }
+
+    /**
+     * Adds a new Keyguard listener. The Keyguard change callbacks are not made in any
+     * particular order.
+     */
+    public void addKeyguardChangeListener(KeyguardChangeListener listener) {
+        mKeyguardChangeListeners.remove(listener);
+        mKeyguardChangeListeners.add(listener);
+    }
+
+    /**
+     * Removes an existing Keyguard listener.
+     */
+    public void removeKeyguardChangeListener(KeyguardChangeListener listener) {
+        mKeyguardChangeListeners.remove(listener);
+    }
+
+    @VisibleForTesting
+    void onConfigurationChanged(Configuration newConfig) {
+        // The initial config is send on startup and doesn't trigger listener callbacks
+        if (mLastConfiguration == null) {
+            mLastConfiguration = new Configuration(newConfig);
+            ProtoLog.v(WM_SHELL_SYSUI_EVENTS, "Initial Configuration: %s", newConfig);
+            return;
+        }
+
+        final int diff = newConfig.diff(mLastConfiguration);
+        ProtoLog.v(WM_SHELL_SYSUI_EVENTS, "New configuration change: %s", newConfig);
+        ProtoLog.v(WM_SHELL_SYSUI_EVENTS, "\tchanges=%s",
+                Configuration.configurationDiffToString(diff));
+        final boolean densityFontScaleChanged = (diff & CONFIG_FONT_SCALE) != 0
+                || (diff & ActivityInfo.CONFIG_DENSITY) != 0;
+        final boolean smallestScreenWidthChanged = (diff & CONFIG_SMALLEST_SCREEN_SIZE) != 0;
+        final boolean themeChanged = (diff & CONFIG_ASSETS_PATHS) != 0
+                || (diff & CONFIG_UI_MODE) != 0;
+        final boolean localOrLayoutDirectionChanged = (diff & CONFIG_LOCALE) != 0
+                || (diff & CONFIG_LAYOUT_DIRECTION) != 0;
+
+        // Update the last configuration and call listeners
+        mLastConfiguration.updateFrom(newConfig);
+        for (ConfigurationChangeListener listener : mConfigChangeListeners) {
+            listener.onConfigurationChanged(newConfig);
+            if (densityFontScaleChanged) {
+                listener.onDensityOrFontScaleChanged();
+            }
+            if (smallestScreenWidthChanged) {
+                listener.onSmallestScreenWidthChanged();
+            }
+            if (themeChanged) {
+                listener.onThemeChanged();
+            }
+            if (localOrLayoutDirectionChanged) {
+                listener.onLocaleOrLayoutDirectionChanged();
+            }
+        }
+    }
+
+    @VisibleForTesting
+    void onKeyguardVisibilityChanged(boolean visible, boolean occluded, boolean animatingDismiss) {
+        for (KeyguardChangeListener listener : mKeyguardChangeListeners) {
+            listener.onKeyguardVisibilityChanged(visible, occluded, animatingDismiss);
+        }
+    }
+
+    @VisibleForTesting
+    void onKeyguardDismissAnimationFinished() {
+        for (KeyguardChangeListener listener : mKeyguardChangeListeners) {
+            listener.onKeyguardDismissAnimationFinished();
+        }
+    }
+
+    public void dump(@NonNull PrintWriter pw, String prefix) {
+        final String innerPrefix = prefix + "  ";
+        pw.println(prefix + TAG);
+        pw.println(innerPrefix + "mConfigChangeListeners=" + mConfigChangeListeners.size());
+        pw.println(innerPrefix + "mLastConfiguration=" + mLastConfiguration);
+        pw.println(innerPrefix + "mKeyguardChangeListeners=" + mKeyguardChangeListeners.size());
+    }
+
+    /**
+     * The interface for calls from outside the Shell, within the host process.
+     */
+    @ExternalThread
+    private class ShellInterfaceImpl implements ShellInterface {
+
+        @Override
+        public void onInit() {
+            try {
+                mMainExecutor.executeBlocking(() -> mShellInit.init());
+            } catch (InterruptedException e) {
+                throw new RuntimeException("Failed to initialize the Shell in 2s", e);
+            }
+        }
+
+        @Override
+        public void dump(PrintWriter pw) {
+            try {
+                mMainExecutor.executeBlocking(() -> mShellCommandHandler.dump(pw));
+            } catch (InterruptedException e) {
+                throw new RuntimeException("Failed to dump the Shell in 2s", e);
+            }
+        }
+
+        @Override
+        public boolean handleCommand(String[] args, PrintWriter pw) {
+            try {
+                boolean[] result = new boolean[1];
+                mMainExecutor.executeBlocking(() -> {
+                    result[0] = mShellCommandHandler.handleCommand(args, pw);
+                });
+                return result[0];
+            } catch (InterruptedException e) {
+                throw new RuntimeException("Failed to handle Shell command in 2s", e);
+            }
+        }
+
+        @Override
+        public void onConfigurationChanged(Configuration newConfiguration) {
+            mMainExecutor.execute(() ->
+                    ShellController.this.onConfigurationChanged(newConfiguration));
+        }
+
+        @Override
+        public void onKeyguardVisibilityChanged(boolean visible, boolean occluded,
+                boolean animatingDismiss) {
+            mMainExecutor.execute(() ->
+                    ShellController.this.onKeyguardVisibilityChanged(visible, occluded,
+                            animatingDismiss));
+        }
+
+        @Override
+        public void onKeyguardDismissAnimationFinished() {
+            mMainExecutor.execute(() ->
+                    ShellController.this.onKeyguardDismissAnimationFinished());
+        }
+    }
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/sysui/ShellInit.java b/libs/WindowManager/Shell/src/com/android/wm/shell/sysui/ShellInit.java
new file mode 100644
index 0000000..c250e03
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/sysui/ShellInit.java
@@ -0,0 +1,86 @@
+/*
+ * 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.
+ */
+
+package com.android.wm.shell.sysui;
+
+import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_INIT;
+
+import android.os.Build;
+import android.os.SystemClock;
+import android.util.Pair;
+
+import androidx.annotation.VisibleForTesting;
+
+import com.android.internal.protolog.common.ProtoLog;
+import com.android.wm.shell.common.ShellExecutor;
+
+import java.util.ArrayList;
+
+/**
+ * The entry point implementation into the shell for initializing shell internal state.  Classes
+ * which need to initialize on start of the host SysUI should inject an instance of this class and
+ * add an init callback.
+ */
+public class ShellInit {
+    private static final String TAG = ShellInit.class.getSimpleName();
+
+    private final ShellExecutor mMainExecutor;
+
+    // An ordered list of init callbacks to be made once shell is first started
+    private final ArrayList<Pair<String, Runnable>> mInitCallbacks = new ArrayList<>();
+    private boolean mHasInitialized;
+
+
+    public ShellInit(ShellExecutor mainExecutor) {
+        mMainExecutor = mainExecutor;
+    }
+
+    /**
+     * Adds a callback to the ordered list of callbacks be made when Shell is first started.  This
+     * can be used in class constructors when dagger is used to ensure that the initialization order
+     * matches the dependency order.
+     */
+    public <T extends Object> void addInitCallback(Runnable r, T instance) {
+        if (mHasInitialized) {
+            if (Build.isDebuggable()) {
+                // All callbacks must be added prior to the Shell being initialized
+                throw new IllegalArgumentException("Can not add callback after init");
+            }
+            return;
+        }
+        final String className = instance.getClass().getSimpleName();
+        mInitCallbacks.add(new Pair<>(className, r));
+        ProtoLog.v(WM_SHELL_INIT, "Adding init callback for %s", className);
+    }
+
+    /**
+     * Calls all the init callbacks when the Shell is first starting.
+     */
+    @VisibleForTesting
+    public void init() {
+        ProtoLog.v(WM_SHELL_INIT, "Initializing Shell Components: %d", mInitCallbacks.size());
+        // Init in order of registration
+        for (int i = 0; i < mInitCallbacks.size(); i++) {
+            final Pair<String, Runnable> info = mInitCallbacks.get(i);
+            final long t1 = SystemClock.uptimeMillis();
+            info.second.run();
+            final long t2 = SystemClock.uptimeMillis();
+            ProtoLog.v(WM_SHELL_INIT, "\t%s init took %dms", info.first, (t2 - t1));
+        }
+        mInitCallbacks.clear();
+        mHasInitialized = true;
+    }
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/sysui/ShellInterface.java b/libs/WindowManager/Shell/src/com/android/wm/shell/sysui/ShellInterface.java
new file mode 100644
index 0000000..254c253
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/sysui/ShellInterface.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.sysui;
+
+import android.content.res.Configuration;
+
+import java.io.PrintWriter;
+
+/**
+ * General interface for notifying the Shell of common SysUI events like configuration or keyguard
+ * changes.
+ */
+public interface ShellInterface {
+
+    /**
+     * Initializes the shell state.
+     */
+    default void onInit() {}
+
+    /**
+     * Dumps the shell state.
+     */
+    default void dump(PrintWriter pw) {}
+
+    /**
+     * Handles a shell command.
+     */
+    default boolean handleCommand(final String[] args, PrintWriter pw) {
+        return false;
+    }
+
+    /**
+     * Notifies the Shell that the configuration has changed.
+     */
+    default void onConfigurationChanged(Configuration newConfiguration) {}
+
+    /**
+     * Notifies the Shell that the keyguard is showing (and if so, whether it is occluded) or not
+     * showing, and whether it is animating a dismiss.
+     */
+    default void onKeyguardVisibilityChanged(boolean visible, boolean occluded,
+            boolean animatingDismiss) {}
+
+    /**
+     * Notifies the Shell when the keyguard dismiss animation has finished.
+     */
+    default void onKeyguardDismissAnimationFinished() {}
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/tasksurfacehelper/TaskSurfaceHelper.java b/libs/WindowManager/Shell/src/com/android/wm/shell/tasksurfacehelper/TaskSurfaceHelper.java
deleted file mode 100644
index ad9dda6..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/tasksurfacehelper/TaskSurfaceHelper.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.tasksurfacehelper;
-
-import android.app.ActivityManager.RunningTaskInfo;
-import android.graphics.Rect;
-import android.view.SurfaceControl;
-
-import java.util.concurrent.Executor;
-import java.util.function.Consumer;
-
-/**
- * Interface to communicate with a Task's SurfaceControl.
- */
-public interface TaskSurfaceHelper {
-
-    /** Sets the METADATA_GAME_MODE for the layer corresponding to the task **/
-    default void setGameModeForTask(int taskId, int gameMode) {}
-
-    /** Takes a screenshot for a task **/
-    default void screenshotTask(RunningTaskInfo taskInfo, Rect crop, Executor executor,
-            Consumer<SurfaceControl.ScreenshotHardwareBuffer> consumer) {}
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/tasksurfacehelper/TaskSurfaceHelperController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/tasksurfacehelper/TaskSurfaceHelperController.java
deleted file mode 100644
index 064d9d1..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/tasksurfacehelper/TaskSurfaceHelperController.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.tasksurfacehelper;
-
-import android.app.ActivityManager.RunningTaskInfo;
-import android.graphics.Rect;
-import android.view.SurfaceControl;
-
-import com.android.wm.shell.ShellTaskOrganizer;
-import com.android.wm.shell.common.ShellExecutor;
-
-import java.util.concurrent.Executor;
-import java.util.function.Consumer;
-
-/**
- * Intermediary controller that communicates with {@link ShellTaskOrganizer} to send commands
- * to SurfaceControl.
- */
-public class TaskSurfaceHelperController {
-
-    private final ShellTaskOrganizer mTaskOrganizer;
-    private final ShellExecutor mMainExecutor;
-    private final TaskSurfaceHelperImpl mImpl = new TaskSurfaceHelperImpl();
-
-    public TaskSurfaceHelperController(ShellTaskOrganizer taskOrganizer,
-            ShellExecutor mainExecutor) {
-        mTaskOrganizer = taskOrganizer;
-        mMainExecutor = mainExecutor;
-    }
-
-    public TaskSurfaceHelper asTaskSurfaceHelper() {
-        return mImpl;
-    }
-
-    /**
-     * Sends a Transaction to set the game mode metadata on the
-     * corresponding SurfaceControl
-     */
-    public void setGameModeForTask(int taskId, int gameMode) {
-        mTaskOrganizer.setSurfaceMetadata(taskId, SurfaceControl.METADATA_GAME_MODE, gameMode);
-    }
-
-    /**
-     * Take screenshot of the specified task.
-     */
-    public void screenshotTask(RunningTaskInfo taskInfo, Rect crop,
-            Consumer<SurfaceControl.ScreenshotHardwareBuffer> consumer) {
-        mTaskOrganizer.screenshotTask(taskInfo, crop, consumer);
-    }
-
-    private class TaskSurfaceHelperImpl implements TaskSurfaceHelper {
-        @Override
-        public void setGameModeForTask(int taskId, int gameMode) {
-            mMainExecutor.execute(() -> {
-                TaskSurfaceHelperController.this.setGameModeForTask(taskId, gameMode);
-            });
-        }
-
-        @Override
-        public void screenshotTask(RunningTaskInfo taskInfo, Rect crop, Executor executor,
-                Consumer<SurfaceControl.ScreenshotHardwareBuffer> consumer) {
-            mMainExecutor.execute(() -> {
-                TaskSurfaceHelperController.this.screenshotTask(taskInfo, crop,
-                        (t) -> executor.execute(() -> consumer.accept(t)));
-            });
-        }
-    }
-}
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
new file mode 100644
index 0000000..5cce6b9
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java
@@ -0,0 +1,290 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.transition;
+
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
+import static android.view.WindowManager.TRANSIT_TO_BACK;
+import static android.window.TransitionInfo.FLAG_IS_WALLPAPER;
+
+import static com.android.wm.shell.splitscreen.SplitScreen.STAGE_TYPE_UNDEFINED;
+import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_CHILD_TASK_ENTER_PIP;
+import static com.android.wm.shell.splitscreen.StageCoordinator.FLAG_IS_DIVIDER_BAR;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.os.IBinder;
+import android.view.SurfaceControl;
+import android.view.WindowManager;
+import android.window.TransitionInfo;
+import android.window.TransitionRequestInfo;
+import android.window.WindowContainerTransaction;
+
+import com.android.internal.protolog.common.ProtoLog;
+import com.android.wm.shell.pip.PipTransitionController;
+import com.android.wm.shell.protolog.ShellProtoLogGroup;
+import com.android.wm.shell.splitscreen.StageCoordinator;
+
+import java.util.ArrayList;
+
+/**
+ * A handler for dealing with transitions involving multiple other handlers. For example: an
+ * activity in split-screen going into PiP.
+ */
+public class DefaultMixedHandler implements Transitions.TransitionHandler {
+
+    private final Transitions mPlayer;
+    private final PipTransitionController mPipHandler;
+    private final StageCoordinator mSplitHandler;
+
+    private static class MixedTransition {
+        static final int TYPE_ENTER_PIP_FROM_SPLIT = 1;
+
+        /** The default animation for this mixed transition. */
+        static final int ANIM_TYPE_DEFAULT = 0;
+
+        /** For ENTER_PIP_FROM_SPLIT, indicates that this is a to-home animation. */
+        static final int ANIM_TYPE_GOING_HOME = 1;
+
+        final int mType;
+        int mAnimType = 0;
+        final IBinder mTransition;
+
+        Transitions.TransitionFinishCallback mFinishCallback = null;
+        Transitions.TransitionHandler mLeftoversHandler = null;
+
+        /**
+         * Mixed transitions are made up of multiple "parts". This keeps track of how many
+         * parts are currently animating.
+         */
+        int mInFlightSubAnimations = 0;
+
+        MixedTransition(int type, IBinder transition) {
+            mType = type;
+            mTransition = transition;
+        }
+    }
+    private final ArrayList<MixedTransition> mActiveTransitions = new ArrayList<>();
+
+    public DefaultMixedHandler(@NonNull Transitions player,
+            @NonNull PipTransitionController pipHandler, @NonNull StageCoordinator splitHandler) {
+        mPlayer = player;
+        mPipHandler = pipHandler;
+        mSplitHandler = splitHandler;
+    }
+
+    @Nullable
+    @Override
+    public WindowContainerTransaction handleRequest(@NonNull IBinder transition,
+            @NonNull TransitionRequestInfo request) {
+        if (mPipHandler.requestHasPipEnter(request) && mSplitHandler.isSplitActive()) {
+            ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " Got a PiP-enter request while "
+                    + "Split-Screen is active, so treat it as Mixed.");
+            if (request.getRemoteTransition() != null) {
+                throw new IllegalStateException("Unexpected remote transition in"
+                        + "pip-enter-from-split request");
+            }
+            mActiveTransitions.add(new MixedTransition(MixedTransition.TYPE_ENTER_PIP_FROM_SPLIT,
+                    transition));
+
+            WindowContainerTransaction out = new WindowContainerTransaction();
+            mPipHandler.augmentRequest(transition, request, out);
+            mSplitHandler.addEnterOrExitIfNeeded(request, out);
+            return out;
+        }
+        return null;
+    }
+
+    private TransitionInfo subCopy(@NonNull TransitionInfo info,
+            @WindowManager.TransitionType int newType) {
+        final TransitionInfo out = new TransitionInfo(newType, info.getFlags());
+        for (int i = 0; i < info.getChanges().size(); ++i) {
+            out.getChanges().add(info.getChanges().get(i));
+        }
+        out.setRootLeash(info.getRootLeash(), info.getRootOffset().x, info.getRootOffset().y);
+        out.setAnimationOptions(info.getAnimationOptions());
+        return out;
+    }
+
+    private boolean isHomeOpening(@NonNull TransitionInfo.Change change) {
+        return change.getTaskInfo() != null
+                && change.getTaskInfo().getActivityType() != ACTIVITY_TYPE_HOME;
+    }
+
+    private boolean isWallpaper(@NonNull TransitionInfo.Change change) {
+        return (change.getFlags() & FLAG_IS_WALLPAPER) != 0;
+    }
+
+    @Override
+    public boolean startAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
+            @NonNull SurfaceControl.Transaction startTransaction,
+            @NonNull SurfaceControl.Transaction finishTransaction,
+            @NonNull Transitions.TransitionFinishCallback finishCallback) {
+        MixedTransition mixed = null;
+        for (int i = mActiveTransitions.size() - 1; i >= 0; --i) {
+            if (mActiveTransitions.get(i).mTransition != transition) continue;
+            mixed = mActiveTransitions.get(i);
+            break;
+        }
+        if (mixed == null) return false;
+
+        if (mixed.mType == MixedTransition.TYPE_ENTER_PIP_FROM_SPLIT) {
+            return animateEnterPipFromSplit(mixed, info, startTransaction, finishTransaction,
+                    finishCallback);
+        } else {
+            mActiveTransitions.remove(mixed);
+            throw new IllegalStateException("Starting mixed animation without a known mixed type? "
+                    + mixed.mType);
+        }
+    }
+
+    private boolean animateEnterPipFromSplit(@NonNull final MixedTransition mixed,
+            @NonNull TransitionInfo info,
+            @NonNull SurfaceControl.Transaction startTransaction,
+            @NonNull SurfaceControl.Transaction finishTransaction,
+            @NonNull Transitions.TransitionFinishCallback finishCallback) {
+        ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " Animating a mixed transition for "
+                + "entering PIP while Split-Screen is active.");
+        TransitionInfo.Change pipChange = null;
+        TransitionInfo.Change wallpaper = null;
+        final TransitionInfo everythingElse = subCopy(info, TRANSIT_TO_BACK);
+        boolean homeIsOpening = false;
+        for (int i = info.getChanges().size() - 1; i >= 0; --i) {
+            TransitionInfo.Change change = info.getChanges().get(i);
+            if (mPipHandler.isEnteringPip(change, info.getType())) {
+                if (pipChange != null) {
+                    throw new IllegalStateException("More than 1 pip-entering changes in one"
+                            + " transition? " + info);
+                }
+                pipChange = change;
+                // going backwards, so remove-by-index is fine.
+                everythingElse.getChanges().remove(i);
+            } else if (isHomeOpening(change)) {
+                homeIsOpening = true;
+            } else if (isWallpaper(change)) {
+                wallpaper = change;
+            }
+        }
+        if (pipChange == null) {
+            // um, something probably went wrong.
+            return false;
+        }
+        final boolean isGoingHome = homeIsOpening;
+        mixed.mFinishCallback = finishCallback;
+        Transitions.TransitionFinishCallback finishCB = (wct, wctCB) -> {
+            --mixed.mInFlightSubAnimations;
+            if (mixed.mInFlightSubAnimations > 0) return;
+            mActiveTransitions.remove(mixed);
+            if (isGoingHome) {
+                mSplitHandler.onTransitionAnimationComplete();
+            }
+            mixed.mFinishCallback.onTransitionFinished(wct, wctCB);
+        };
+        if (isGoingHome) {
+            ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " Animation is actually mixed "
+                    + "since entering-PiP caused us to leave split and return home.");
+            // We need to split the transition into 2 parts: the pip part (animated by pip)
+            // and the dismiss-part (animated by launcher).
+            mixed.mInFlightSubAnimations = 2;
+            // immediately make the wallpaper visible (so that we don't see it pop-in during
+            // the time it takes to start recents animation (which is remote).
+            if (wallpaper != null) {
+                startTransaction.show(wallpaper.getLeash()).setAlpha(wallpaper.getLeash(), 1.f);
+            }
+            // make a new startTransaction because pip's startEnterAnimation "consumes" it so
+            // we need a separate one to send over to launcher.
+            SurfaceControl.Transaction otherStartT = new SurfaceControl.Transaction();
+            // Let split update internal state for dismiss.
+            mSplitHandler.prepareDismissAnimation(STAGE_TYPE_UNDEFINED,
+                    EXIT_REASON_CHILD_TASK_ENTER_PIP, everythingElse, otherStartT,
+                    finishTransaction);
+
+            // We are trying to accommodate launcher's close animation which can't handle the
+            // divider-bar, so if split-handler is closing the divider-bar, just hide it and remove
+            // from transition info.
+            for (int i = everythingElse.getChanges().size() - 1; i >= 0; --i) {
+                if ((everythingElse.getChanges().get(i).getFlags() & FLAG_IS_DIVIDER_BAR) != 0) {
+                    everythingElse.getChanges().remove(i);
+                    break;
+                }
+            }
+
+            mPipHandler.startEnterAnimation(pipChange, startTransaction, finishTransaction,
+                    finishCB);
+            // Dispatch the rest of the transition normally. This will most-likely be taken by
+            // recents or default handler.
+            mixed.mLeftoversHandler = mPlayer.dispatchTransition(mixed.mTransition, everythingElse,
+                    otherStartT, finishTransaction, finishCB, this);
+        } else {
+            ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "  Not leaving split, so just "
+                    + "forward animation to Pip-Handler.");
+            // This happens if the pip-ing activity is in a multi-activity task (and thus a
+            // new pip task is spawned). In this case, we don't actually exit split so we can
+            // just let pip transition handle the animation verbatim.
+            mixed.mInFlightSubAnimations = 1;
+            mPipHandler.startAnimation(mixed.mTransition, info, startTransaction, finishTransaction,
+                    finishCB);
+        }
+        return true;
+    }
+
+    @Override
+    public void mergeAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
+            @NonNull SurfaceControl.Transaction t, @NonNull IBinder mergeTarget,
+            @NonNull Transitions.TransitionFinishCallback finishCallback) {
+        for (int i = 0; i < mActiveTransitions.size(); ++i) {
+            if (mActiveTransitions.get(i) != mergeTarget) continue;
+            MixedTransition mixed = mActiveTransitions.get(i);
+            if (mixed.mInFlightSubAnimations <= 0) {
+                // Already done, so no need to end it.
+                return;
+            }
+            if (mixed.mType == MixedTransition.TYPE_ENTER_PIP_FROM_SPLIT) {
+                if (mixed.mAnimType == MixedTransition.ANIM_TYPE_GOING_HOME) {
+                    boolean ended = mSplitHandler.end();
+                    // If split couldn't end (because it is remote), then don't end everything else
+                    // since we have to play out the animation anyways.
+                    if (!ended) return;
+                    mPipHandler.end();
+                    if (mixed.mLeftoversHandler != null) {
+                        mixed.mLeftoversHandler.mergeAnimation(transition, info, t, mergeTarget,
+                                finishCallback);
+                    }
+                } else {
+                    mPipHandler.end();
+                }
+            } else {
+                throw new IllegalStateException("Playing a mixed transition with unknown type? "
+                        + mixed.mType);
+            }
+        }
+    }
+
+    @Override
+    public void onTransitionConsumed(@NonNull IBinder transition, boolean aborted,
+            @Nullable SurfaceControl.Transaction finishT) {
+        MixedTransition mixed = null;
+        for (int i = mActiveTransitions.size() - 1; i >= 0; --i) {
+            if (mActiveTransitions.get(i).mTransition != transition) continue;
+            mixed = mActiveTransitions.remove(i);
+            break;
+        }
+        if (mixed == null) return;
+        if (mixed.mType == MixedTransition.TYPE_ENTER_PIP_FROM_SPLIT) {
+            mPipHandler.onTransitionConsumed(transition, aborted, finishT);
+        }
+    }
+}
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 9154226..08eb2c9 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
@@ -24,6 +24,7 @@
 import static android.app.ActivityOptions.ANIM_SCALE_UP;
 import static android.app.ActivityOptions.ANIM_THUMBNAIL_SCALE_DOWN;
 import static android.app.ActivityOptions.ANIM_THUMBNAIL_SCALE_UP;
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_DREAM;
 import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
 import static android.app.admin.DevicePolicyManager.ACTION_DEVICE_POLICY_RESOURCE_UPDATED;
 import static android.app.admin.DevicePolicyManager.EXTRA_RESOURCE_TYPE;
@@ -42,6 +43,7 @@
 import static android.view.WindowManager.TRANSIT_RELAUNCH;
 import static android.view.WindowManager.TRANSIT_TO_BACK;
 import static android.view.WindowManager.TRANSIT_TO_FRONT;
+import static android.view.WindowManager.transitTypeToString;
 import static android.window.TransitionInfo.FLAG_DISPLAY_HAS_ALERT_WINDOWS;
 import static android.window.TransitionInfo.FLAG_IS_DISPLAY;
 import static android.window.TransitionInfo.FLAG_IS_VOICE_INTERACTION;
@@ -107,6 +109,7 @@
 import com.android.wm.shell.common.ShellExecutor;
 import com.android.wm.shell.common.TransactionPool;
 import com.android.wm.shell.protolog.ShellProtoLogGroup;
+import com.android.wm.shell.sysui.ShellInit;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -134,6 +137,7 @@
     private final TransactionPool mTransactionPool;
     private final DisplayController mDisplayController;
     private final Context mContext;
+    private final Handler mMainHandler;
     private final ShellExecutor mMainExecutor;
     private final ShellExecutor mAnimExecutor;
     private final TransitionAnimation mTransitionAnimation;
@@ -150,8 +154,6 @@
 
     private final int mCurrentUserId;
 
-    private ScreenRotationAnimation mRotationAnimation;
-
     private Drawable mEnterpriseThumbnailDrawable;
 
     private BroadcastReceiver mEnterpriseResourceUpdatedReceiver = new BroadcastReceiver() {
@@ -165,27 +167,33 @@
         }
     };
 
-    DefaultTransitionHandler(@NonNull DisplayController displayController,
-            @NonNull TransactionPool transactionPool, Context context,
+    DefaultTransitionHandler(@NonNull Context context,
+            @NonNull ShellInit shellInit,
+            @NonNull DisplayController displayController,
+            @NonNull TransactionPool transactionPool,
             @NonNull ShellExecutor mainExecutor, @NonNull Handler mainHandler,
             @NonNull ShellExecutor animExecutor) {
         mDisplayController = displayController;
         mTransactionPool = transactionPool;
         mContext = context;
+        mMainHandler = mainHandler;
         mMainExecutor = mainExecutor;
         mAnimExecutor = animExecutor;
         mTransitionAnimation = new TransitionAnimation(context, false /* debug */, Transitions.TAG);
         mCurrentUserId = UserHandle.myUserId();
+        mDevicePolicyManager = mContext.getSystemService(DevicePolicyManager.class);
+        shellInit.addInitCallback(this::onInit, this);
+    }
 
-        mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class);
+    private void onInit() {
         updateEnterpriseThumbnailDrawable();
         mContext.registerReceiver(
                 mEnterpriseResourceUpdatedReceiver,
                 new IntentFilter(ACTION_DEVICE_POLICY_RESOURCE_UPDATED),
                 /* broadcastPermission = */ null,
-                mainHandler);
+                mMainHandler);
 
-        AttributeCache.init(context);
+        AttributeCache.init(mContext);
     }
 
     private void updateEnterpriseThumbnailDrawable() {
@@ -330,12 +338,6 @@
 
         final Runnable onAnimFinish = () -> {
             if (!animations.isEmpty()) return;
-
-            if (mRotationAnimation != null) {
-                mRotationAnimation.kill();
-                mRotationAnimation = null;
-            }
-
             mAnimations.remove(transition);
             finishCallback.onTransitionFinished(null /* wct */, null /* wctCB */);
         };
@@ -355,11 +357,8 @@
                     isSeamlessDisplayChange = isRotationSeamless(info, mDisplayController);
                     final int anim = getRotationAnimation(info);
                     if (!(isSeamlessDisplayChange || anim == ROTATION_ANIMATION_JUMPCUT)) {
-                        mRotationAnimation = new ScreenRotationAnimation(mContext, mSurfaceSession,
-                                mTransactionPool, startTransaction, change, info.getRootLeash(),
-                                anim);
-                        mRotationAnimation.startAnimation(animations, onAnimFinish,
-                                mTransitionAnimationScaleSetting, mMainExecutor, mAnimExecutor);
+                        startRotationAnimation(startTransaction, change, info, anim, animations,
+                                onAnimFinish);
                         continue;
                     }
                 } else {
@@ -403,6 +402,13 @@
                     startTransaction.setWindowCrop(change.getLeash(),
                             change.getEndAbsBounds().width(), change.getEndAbsBounds().height());
                 }
+                // Rotation change of independent non display window container.
+                if (change.getParent() == null
+                        && change.getStartRotation() != change.getEndRotation()) {
+                    startRotationAnimation(startTransaction, change, info,
+                            ROTATION_ANIMATION_ROTATE, animations, onAnimFinish);
+                    continue;
+                }
             }
 
             // Don't animate anything that isn't independent.
@@ -470,8 +476,9 @@
                 }
 
                 final Rect clipRect = Transitions.isClosingType(change.getMode())
-                        ? mRotator.getEndBoundsInStartRotation(change)
-                        : change.getEndAbsBounds();
+                        ? new Rect(mRotator.getEndBoundsInStartRotation(change))
+                        : new Rect(change.getEndAbsBounds());
+                clipRect.offsetTo(0, 0);
 
                 if (delayedEdgeExtension) {
                     // If the edge extension needs to happen after the startTransition has been
@@ -480,11 +487,11 @@
                     postStartTransactionCallbacks.add(t ->
                             startSurfaceAnimation(animations, a, change.getLeash(), onAnimFinish,
                                     mTransactionPool, mMainExecutor, mAnimExecutor,
-                                    null /* position */, cornerRadius, clipRect));
+                                    change.getEndRelOffset(), cornerRadius, clipRect));
                 } else {
                     startSurfaceAnimation(animations, a, change.getLeash(), onAnimFinish,
-                            mTransactionPool, mMainExecutor, mAnimExecutor, null /* position */,
-                            cornerRadius, clipRect);
+                            mTransactionPool, mMainExecutor, mAnimExecutor,
+                            change.getEndRelOffset(), cornerRadius, clipRect);
                 }
 
                 if (info.getAnimationOptions() != null) {
@@ -520,6 +527,43 @@
         return true;
     }
 
+    @Override
+    public void mergeAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
+            @NonNull SurfaceControl.Transaction t, @NonNull IBinder mergeTarget,
+            @NonNull Transitions.TransitionFinishCallback finishCallback) {
+        ArrayList<Animator> anims = mAnimations.get(mergeTarget);
+        if (anims == null) return;
+        for (int i = anims.size() - 1; i >= 0; --i) {
+            final Animator anim = anims.get(i);
+            mAnimExecutor.execute(anim::end);
+        }
+    }
+
+    private void startRotationAnimation(SurfaceControl.Transaction startTransaction,
+            TransitionInfo.Change change, TransitionInfo info, int animHint,
+            ArrayList<Animator> animations, Runnable onAnimFinish) {
+        final ScreenRotationAnimation anim = new ScreenRotationAnimation(mContext, mSurfaceSession,
+                mTransactionPool, startTransaction, change, info.getRootLeash(), animHint);
+        // The rotation animation may consist of 3 animations: fade-out screenshot, fade-in real
+        // content, and background color. The item of "animGroup" will be removed if the sub
+        // animation is finished. Then if the list becomes empty, the rotation animation is done.
+        final ArrayList<Animator> animGroup = new ArrayList<>(3);
+        final ArrayList<Animator> animGroupStore = new ArrayList<>(3);
+        final Runnable finishCallback = () -> {
+            if (!animGroup.isEmpty()) return;
+            anim.kill();
+            animations.removeAll(animGroupStore);
+            onAnimFinish.run();
+        };
+        anim.startAnimation(animGroup, finishCallback, mTransitionAnimationScaleSetting,
+                mMainExecutor, mAnimExecutor);
+        for (int i = animGroup.size() - 1; i >= 0; i--) {
+            final Animator animator = animGroup.get(i);
+            animGroupStore.add(animator);
+            animations.add(animator);
+        }
+    }
+
     private void edgeExtendWindow(TransitionInfo.Change change,
             Animation a, SurfaceControl.Transaction startTransaction,
             SurfaceControl.Transaction finishTransaction) {
@@ -684,6 +728,8 @@
         final Rect endBounds = Transitions.isClosingType(changeMode)
                 ? mRotator.getEndBoundsInStartRotation(change)
                 : change.getEndAbsBounds();
+        final boolean isDream =
+                isTask && change.getTaskInfo().topActivityType == ACTIVITY_TYPE_DREAM;
 
         if (info.isKeyguardGoingAway()) {
             a = mTransitionAnimation.loadKeyguardExitAnimation(flags,
@@ -726,7 +772,17 @@
         } else {
             int animAttr = 0;
             boolean translucent = false;
-            if (wallpaperTransit == WALLPAPER_TRANSITION_INTRA_OPEN) {
+            if (isDream) {
+                if (type == TRANSIT_OPEN) {
+                    animAttr = enter
+                            ? R.styleable.WindowAnimation_dreamActivityOpenEnterAnimation
+                            : R.styleable.WindowAnimation_dreamActivityOpenExitAnimation;
+                } else if (type == TRANSIT_CLOSE) {
+                    animAttr = enter
+                            ? 0
+                            : R.styleable.WindowAnimation_dreamActivityCloseExitAnimation;
+                }
+            } else if (wallpaperTransit == WALLPAPER_TRANSITION_INTRA_OPEN) {
                 animAttr = enter
                         ? R.styleable.WindowAnimation_wallpaperIntraOpenEnterAnimation
                         : R.styleable.WindowAnimation_wallpaperIntraOpenExitAnimation;
@@ -790,6 +846,11 @@
                     a = mTransitionAnimation.loadDefaultAnimationAttr(animAttr, translucent);
                 }
             }
+
+            ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS,
+                    "loadAnimation: anim=%s animAttr=0x%x type=%s isEntrance=%b", a, animAttr,
+                    transitTypeToString(type),
+                    enter);
         }
 
         if (a != null) {
@@ -834,13 +895,19 @@
             });
         };
         va.addListener(new AnimatorListenerAdapter() {
+            private boolean mFinished = false;
+
             @Override
             public void onAnimationEnd(Animator animation) {
+                if (mFinished) return;
+                mFinished = true;
                 finisher.run();
             }
 
             @Override
             public void onAnimationCancel(Animator animation) {
+                if (mFinished) return;
+                mFinished = true;
                 finisher.run();
             }
         });
@@ -896,7 +963,7 @@
         a.restrictDuration(MAX_ANIMATION_DURATION);
         a.scaleCurrentDuration(mTransitionAnimationScaleSetting);
         startSurfaceAnimation(animations, a, wt.getSurface(), finisher, mTransactionPool,
-                mMainExecutor, mAnimExecutor, new Point(bounds.left, bounds.top),
+                mMainExecutor, mAnimExecutor, change.getEndRelOffset(),
                 cornerRadius, change.getEndAbsBounds());
     }
 
@@ -921,7 +988,7 @@
         a.restrictDuration(MAX_ANIMATION_DURATION);
         a.scaleCurrentDuration(mTransitionAnimationScaleSetting);
         startSurfaceAnimation(animations, a, wt.getSurface(), finisher, mTransactionPool,
-                mMainExecutor, mAnimExecutor, null /* position */,
+                mMainExecutor, mAnimExecutor, change.getEndRelOffset(),
                 cornerRadius, change.getEndAbsBounds());
     }
 
@@ -954,7 +1021,7 @@
 
     private static void applyTransformation(long time, SurfaceControl.Transaction t,
             SurfaceControl leash, Animation anim, Transformation transformation, float[] matrix,
-            Point position, float cornerRadius, @Nullable Rect clipRect) {
+            Point position, float cornerRadius, @Nullable Rect immutableClipRect) {
         anim.getTransformation(time, transformation);
         if (position != null) {
             transformation.getMatrix().postTranslate(position.x, position.y);
@@ -962,6 +1029,7 @@
         t.setMatrix(leash, transformation.getMatrix(), matrix);
         t.setAlpha(leash, transformation.getAlpha());
 
+        final Rect clipRect = immutableClipRect == null ? null : new Rect(immutableClipRect);
         Insets extensionInsets = Insets.min(transformation.getInsets(), Insets.NONE);
         if (!extensionInsets.equals(Insets.NONE) && clipRect != null && !clipRect.isEmpty()) {
             // Clip out any overflowing edge extension
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/OneShotRemoteHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/OneShotRemoteHandler.java
index 3e2a0e6..4e1fa29 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/OneShotRemoteHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/OneShotRemoteHandler.java
@@ -18,11 +18,9 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
-import android.app.ActivityTaskManager;
 import android.os.IBinder;
 import android.os.RemoteException;
 import android.util.Log;
-import android.util.Slog;
 import android.view.SurfaceControl;
 import android.window.IRemoteTransition;
 import android.window.IRemoteTransitionFinishedCallback;
@@ -87,18 +85,14 @@
                 });
             }
         };
+        Transitions.setRunningRemoteTransitionDelegate(mRemote.getAppThread());
         try {
             if (mRemote.asBinder() != null) {
                 mRemote.asBinder().linkToDeath(remoteDied, 0 /* flags */);
             }
-            try {
-                ActivityTaskManager.getService().setRunningRemoteTransitionDelegate(
-                        mRemote.getAppThread());
-            } catch (SecurityException e) {
-                Slog.e(Transitions.TAG, "Unable to boost animation thread. This should only happen"
-                        + " during unit tests");
-            }
             mRemote.getRemoteTransition().startAnimation(transition, info, startTransaction, cb);
+            // assume that remote will apply the start transaction.
+            startTransaction.clear();
         } catch (RemoteException e) {
             Log.e(Transitions.TAG, "Error running remote transition.", e);
             if (mRemote.asBinder() != null) {
@@ -120,6 +114,11 @@
             @Override
             public void onTransitionFinished(WindowContainerTransaction wct,
                     SurfaceControl.Transaction sct) {
+                // We have merged, since we sent the transaction over binder, the one in this
+                // process won't be cleared if the remote applied it. We don't actually know if the
+                // remote applied the transaction, but applying twice will break surfaceflinger
+                // so just assume the worst-case and clear the local transaction.
+                t.clear();
                 mMainExecutor.execute(
                         () -> finishCallback.onTransitionFinished(wct, null /* wctCB */));
             }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/RemoteTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/RemoteTransitionHandler.java
index ece9f47..9469529 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/RemoteTransitionHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/RemoteTransitionHandler.java
@@ -18,7 +18,6 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
-import android.app.ActivityTaskManager;
 import android.os.IBinder;
 import android.os.RemoteException;
 import android.util.ArrayMap;
@@ -83,7 +82,8 @@
     }
 
     @Override
-    public void onTransitionMerged(@NonNull IBinder transition) {
+    public void onTransitionConsumed(@NonNull IBinder transition, boolean aborted,
+            @Nullable SurfaceControl.Transaction finishT) {
         mRequestedRemotes.remove(transition);
     }
 
@@ -129,16 +129,12 @@
                 });
             }
         };
+        Transitions.setRunningRemoteTransitionDelegate(remote.getAppThread());
         try {
             handleDeath(remote.asBinder(), finishCallback);
-            try {
-                ActivityTaskManager.getService().setRunningRemoteTransitionDelegate(
-                        remote.getAppThread());
-            } catch (SecurityException e) {
-                Log.e(Transitions.TAG, "Unable to boost animation thread. This should only happen"
-                        + " during unit tests");
-            }
             remote.getRemoteTransition().startAnimation(transition, info, startTransaction, cb);
+            // assume that remote will apply the start transaction.
+            startTransaction.clear();
         } catch (RemoteException e) {
             Log.e(Transitions.TAG, "Error running remote transition.", e);
             unhandleDeath(remote.asBinder(), finishCallback);
@@ -162,6 +158,11 @@
             @Override
             public void onTransitionFinished(WindowContainerTransaction wct,
                     SurfaceControl.Transaction sct) {
+                // We have merged, since we sent the transaction over binder, the one in this
+                // process won't be cleared if the remote applied it. We don't actually know if the
+                // remote applied the transaction, but applying twice will break surfaceflinger
+                // so just assume the worst-case and clear the local transaction.
+                t.clear();
                 mMainExecutor.execute(() -> {
                     if (!mRequestedRemotes.containsKey(mergeTarget)) {
                         Log.e(TAG, "Merged transition finished after it's mergeTarget (the "
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/ScreenRotationAnimation.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/ScreenRotationAnimation.java
index 46f73fd..a843b2a 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/ScreenRotationAnimation.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/ScreenRotationAnimation.java
@@ -34,7 +34,6 @@
 import android.content.Context;
 import android.graphics.Color;
 import android.graphics.ColorSpace;
-import android.graphics.GraphicBuffer;
 import android.graphics.Matrix;
 import android.graphics.Rect;
 import android.hardware.HardwareBuffer;
@@ -85,9 +84,7 @@
     private final Context mContext;
     private final TransactionPool mTransactionPool;
     private final float[] mTmpFloats = new float[9];
-    // Complete transformations being applied.
-    private final Matrix mSnapshotInitialMatrix = new Matrix();
-    /** The leash of display. */
+    /** The leash of the changing window container. */
     private final SurfaceControl mSurfaceControl;
     private final Rect mStartBounds = new Rect();
     private final Rect mEndBounds = new Rect();
@@ -169,16 +166,15 @@
                     .setName("RotationLayer")
                     .build();
 
-            GraphicBuffer buffer = GraphicBuffer.createFromHardwareBuffer(
-                    screenshotBuffer.getHardwareBuffer());
-
             t.setLayer(mAnimLeash, SCREEN_FREEZE_LAYER_BASE);
             t.setPosition(mAnimLeash, 0, 0);
             t.setAlpha(mAnimLeash, 1);
             t.show(mAnimLeash);
 
-            t.setBuffer(mScreenshotLayer, buffer);
-            t.setColorSpace(mScreenshotLayer, screenshotBuffer.getColorSpace());
+            final ColorSpace colorSpace = screenshotBuffer.getColorSpace();
+            final HardwareBuffer hardwareBuffer = screenshotBuffer.getHardwareBuffer();
+            t.setDataSpace(mScreenshotLayer, colorSpace.getDataSpace());
+            t.setBuffer(mScreenshotLayer, hardwareBuffer);
             t.show(mScreenshotLayer);
 
             if (!isCustomRotate()) {
@@ -189,8 +185,7 @@
                         .setName("BackColorSurface")
                         .build();
 
-                HardwareBuffer hardwareBuffer = screenshotBuffer.getHardwareBuffer();
-                mStartLuma = getMedianBorderLuma(hardwareBuffer, screenshotBuffer.getColorSpace());
+                mStartLuma = getMedianBorderLuma(hardwareBuffer, colorSpace);
 
                 t.setLayer(mBackColorSurface, -1);
                 t.setColor(mBackColorSurface, new float[]{mStartLuma, mStartLuma, mStartLuma});
@@ -202,7 +197,7 @@
             Slog.w(TAG, "Unable to allocate freeze surface", e);
         }
 
-        setRotation(t);
+        setScreenshotTransform(t);
         t.apply();
     }
 
@@ -210,19 +205,36 @@
         return mAnimHint == ROTATION_ANIMATION_CROSSFADE || mAnimHint == ROTATION_ANIMATION_JUMPCUT;
     }
 
-    private void setRotation(SurfaceControl.Transaction t) {
-        // Compute the transformation matrix that must be applied
-        // to the snapshot to make it stay in the same original position
-        // with the current screen rotation.
-        int delta = deltaRotation(mEndRotation, mStartRotation);
-        createRotationMatrix(delta, mStartWidth, mStartHeight, mSnapshotInitialMatrix);
-        setRotationTransform(t, mSnapshotInitialMatrix);
-    }
-
-    private void setRotationTransform(SurfaceControl.Transaction t, Matrix matrix) {
+    private void setScreenshotTransform(SurfaceControl.Transaction t) {
         if (mScreenshotLayer == null) {
             return;
         }
+        final Matrix matrix = new Matrix();
+        final int delta = deltaRotation(mEndRotation, mStartRotation);
+        if (delta != 0) {
+            // Compute the transformation matrix that must be applied to the snapshot to make it
+            // stay in the same original position with the current screen rotation.
+            switch (delta) {
+                case Surface.ROTATION_90:
+                    matrix.setRotate(90, 0, 0);
+                    matrix.postTranslate(mStartHeight, 0);
+                    break;
+                case Surface.ROTATION_180:
+                    matrix.setRotate(180, 0, 0);
+                    matrix.postTranslate(mStartWidth, mStartHeight);
+                    break;
+                case Surface.ROTATION_270:
+                    matrix.setRotate(270, 0, 0);
+                    matrix.postTranslate(0, mStartWidth);
+                    break;
+            }
+        } else if ((mEndWidth > mStartWidth) == (mEndHeight > mStartHeight)
+                && (mEndWidth != mStartWidth || mEndHeight != mStartHeight)) {
+            // Display resizes without rotation change.
+            final float scale = Math.max((float) mEndWidth / mStartHeight,
+                    (float) mEndHeight / mStartHeight);
+            matrix.setScale(scale, scale);
+        }
         matrix.getValues(mTmpFloats);
         float x = mTmpFloats[Matrix.MTRANS_X];
         float y = mTmpFloats[Matrix.MTRANS_Y];
@@ -230,9 +242,7 @@
         t.setMatrix(mScreenshotLayer,
                 mTmpFloats[Matrix.MSCALE_X], mTmpFloats[Matrix.MSKEW_Y],
                 mTmpFloats[Matrix.MSKEW_X], mTmpFloats[Matrix.MSCALE_Y]);
-
         t.setAlpha(mScreenshotLayer, (float) 1.0);
-        t.show(mScreenshotLayer);
     }
 
     /**
@@ -486,27 +496,6 @@
         return getMedianBorderLuma(buffer.getHardwareBuffer(), buffer.getColorSpace());
     }
 
-    private static void createRotationMatrix(int rotation, int width, int height,
-            Matrix outMatrix) {
-        switch (rotation) {
-            case Surface.ROTATION_0:
-                outMatrix.reset();
-                break;
-            case Surface.ROTATION_90:
-                outMatrix.setRotate(90, 0, 0);
-                outMatrix.postTranslate(height, 0);
-                break;
-            case Surface.ROTATION_180:
-                outMatrix.setRotate(180, 0, 0);
-                outMatrix.postTranslate(width, height);
-                break;
-            case Surface.ROTATION_270:
-                outMatrix.setRotate(270, 0, 0);
-                outMatrix.postTranslate(0, width);
-                break;
-        }
-    }
-
     private static void applyColor(int startColor, int endColor, float[] rgbFloat,
             float fraction, SurfaceControl surface, SurfaceControl.Transaction t) {
         final int color = (Integer) ArgbEvaluator.getInstance().evaluate(fraction, startColor,
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/SplitscreenPipMixedHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/SplitscreenPipMixedHandler.java
new file mode 100644
index 0000000..678e91f
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/SplitscreenPipMixedHandler.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.transition;
+
+import com.android.wm.shell.pip.phone.PipTouchHandler;
+import com.android.wm.shell.splitscreen.SplitScreenController;
+import com.android.wm.shell.sysui.ShellInit;
+
+import java.util.Optional;
+
+/**
+ * Handles transitions between the Splitscreen and PIP components.
+ */
+public class SplitscreenPipMixedHandler {
+
+    private final Optional<SplitScreenController> mSplitScreenOptional;
+    private final Optional<PipTouchHandler> mPipTouchHandlerOptional;
+    private final Transitions mTransitions;
+
+    public SplitscreenPipMixedHandler(ShellInit shellInit,
+            Optional<SplitScreenController> splitScreenControllerOptional,
+            Optional<PipTouchHandler> pipTouchHandlerOptional,
+            Transitions transitions) {
+        mSplitScreenOptional = splitScreenControllerOptional;
+        mPipTouchHandlerOptional = pipTouchHandlerOptional;
+        mTransitions = transitions;
+        if (Transitions.ENABLE_SHELL_TRANSITIONS
+                && mSplitScreenOptional.isPresent() && mPipTouchHandlerOptional.isPresent()) {
+            shellInit.addInitCallback(this::onInit, this);
+        }
+    }
+
+    private void onInit() {
+        // Special handling for initializing based on multiple components
+        final DefaultMixedHandler mixedHandler = new DefaultMixedHandler(mTransitions,
+                mPipTouchHandlerOptional.get().getTransitionHandler(),
+                mSplitScreenOptional.get().getTransitionHandler());
+        // Added at end so that it has highest priority.
+        mTransitions.addHandler(mixedHandler);
+    }
+}
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 435d670..279d57a 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
@@ -23,6 +23,7 @@
 import static android.view.WindowManager.TRANSIT_OPEN;
 import static android.view.WindowManager.TRANSIT_TO_BACK;
 import static android.view.WindowManager.TRANSIT_TO_FRONT;
+import static android.window.TransitionInfo.FLAG_IS_INPUT_METHOD;
 import static android.window.TransitionInfo.FLAG_IS_WALLPAPER;
 import static android.window.TransitionInfo.FLAG_STARTING_WINDOW_TRANSFER_RECIPIENT;
 
@@ -30,6 +31,8 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.app.ActivityTaskManager;
+import android.app.IApplicationThread;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.database.ContentObserver;
@@ -56,13 +59,13 @@
 import com.android.internal.R;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.protolog.common.ProtoLog;
-import com.android.wm.shell.ShellTaskOrganizer;
 import com.android.wm.shell.common.DisplayController;
 import com.android.wm.shell.common.RemoteCallable;
 import com.android.wm.shell.common.ShellExecutor;
 import com.android.wm.shell.common.TransactionPool;
 import com.android.wm.shell.common.annotations.ExternalThread;
 import com.android.wm.shell.protolog.ShellProtoLogGroup;
+import com.android.wm.shell.sysui.ShellInit;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -97,11 +100,18 @@
     /** Transition type for dismissing split-screen. */
     public static final int TRANSIT_SPLIT_DISMISS = TRANSIT_FIRST_CUSTOM + 7;
 
+    /** Transition type for freeform to maximize transition. */
+    public static final int TRANSIT_MAXIMIZE = WindowManager.TRANSIT_FIRST_CUSTOM + 8;
+
+    /** Transition type for maximize to freeform transition. */
+    public static final int TRANSIT_RESTORE_FROM_MAXIMIZE = WindowManager.TRANSIT_FIRST_CUSTOM + 9;
+
     private final WindowOrganizer mOrganizer;
     private final Context mContext;
     private final ShellExecutor mMainExecutor;
     private final ShellExecutor mAnimExecutor;
     private final TransitionPlayerImpl mPlayerImpl;
+    private final DefaultTransitionHandler mDefaultTransitionHandler;
     private final RemoteTransitionHandler mRemoteTransitionHandler;
     private final DisplayController mDisplayController;
     private final ShellTransitionImpl mImpl = new ShellTransitionImpl();
@@ -127,8 +137,11 @@
     /** Keeps track of currently playing transitions in the order of receipt. */
     private final ArrayList<ActiveTransition> mActiveTransitions = new ArrayList<>();
 
-    public Transitions(@NonNull WindowOrganizer organizer, @NonNull TransactionPool pool,
-            @NonNull DisplayController displayController, @NonNull Context context,
+    public Transitions(@NonNull Context context,
+            @NonNull ShellInit shellInit,
+            @NonNull WindowOrganizer organizer,
+            @NonNull TransactionPool pool,
+            @NonNull DisplayController displayController,
             @NonNull ShellExecutor mainExecutor, @NonNull Handler mainHandler,
             @NonNull ShellExecutor animExecutor) {
         mOrganizer = organizer;
@@ -137,33 +150,37 @@
         mAnimExecutor = animExecutor;
         mDisplayController = displayController;
         mPlayerImpl = new TransitionPlayerImpl();
-        // The very last handler (0 in the list) should be the default one.
-        mHandlers.add(new DefaultTransitionHandler(displayController, pool, context, mainExecutor,
-                mainHandler, animExecutor));
-        // Next lowest priority is remote transitions.
-        mRemoteTransitionHandler = new RemoteTransitionHandler(mainExecutor);
-        mHandlers.add(mRemoteTransitionHandler);
+        mDefaultTransitionHandler = new DefaultTransitionHandler(context, shellInit,
+                displayController, pool, mainExecutor, mainHandler, animExecutor);
+        mRemoteTransitionHandler = new RemoteTransitionHandler(mMainExecutor);
+        shellInit.addInitCallback(this::onInit, this);
+    }
 
-        ContentResolver resolver = context.getContentResolver();
+    private void onInit() {
+        // The very last handler (0 in the list) should be the default one.
+        mHandlers.add(mDefaultTransitionHandler);
+        ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "addHandler: Default");
+        // Next lowest priority is remote transitions.
+        mHandlers.add(mRemoteTransitionHandler);
+        ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "addHandler: Remote");
+
+        ContentResolver resolver = mContext.getContentResolver();
         mTransitionAnimationScaleSetting = Settings.Global.getFloat(resolver,
                 Settings.Global.TRANSITION_ANIMATION_SCALE,
-                context.getResources().getFloat(
+                mContext.getResources().getFloat(
                         R.dimen.config_appTransitionAnimationDurationScaleDefault));
         dispatchAnimScaleSetting(mTransitionAnimationScaleSetting);
 
         resolver.registerContentObserver(
                 Settings.Global.getUriFor(Settings.Global.TRANSITION_ANIMATION_SCALE), false,
                 new SettingsObserver());
-    }
 
-    private Transitions() {
-        mOrganizer = null;
-        mContext = null;
-        mMainExecutor = null;
-        mAnimExecutor = null;
-        mDisplayController = null;
-        mPlayerImpl = null;
-        mRemoteTransitionHandler = null;
+        if (Transitions.ENABLE_SHELL_TRANSITIONS) {
+            // Register this transition handler with Core
+            mOrganizer.registerTransitionPlayer(mPlayerImpl);
+            // Pre-load the instance.
+            TransitionMetrics.getInstance();
+        }
     }
 
     public ShellTransitions asRemoteTransitions() {
@@ -186,20 +203,18 @@
         }
     }
 
-    /** Register this transition handler with Core */
-    public void register(ShellTaskOrganizer taskOrganizer) {
-        if (mPlayerImpl == null) return;
-        taskOrganizer.registerTransitionPlayer(mPlayerImpl);
-        // Pre-load the instance.
-        TransitionMetrics.getInstance();
-    }
-
     /**
      * Adds a handler candidate.
      * @see TransitionHandler
      */
     public void addHandler(@NonNull TransitionHandler handler) {
+        if (mHandlers.isEmpty()) {
+            throw new RuntimeException("Unexpected handler added prior to initialization, please "
+                    + "use ShellInit callbacks to ensure proper ordering");
+        }
         mHandlers.add(handler);
+        ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "addHandler: %s",
+                handler.getClass().getSimpleName());
     }
 
     public ShellExecutor getMainExecutor() {
@@ -227,6 +242,19 @@
         mRemoteTransitionHandler.removeFiltered(remoteTransition);
     }
 
+    /** Boosts the process priority of remote animation player. */
+    public static void setRunningRemoteTransitionDelegate(IApplicationThread appThread) {
+        if (appThread == null) return;
+        try {
+            ActivityTaskManager.getService().setRunningRemoteTransitionDelegate(appThread);
+        } catch (SecurityException e) {
+            Log.e(TAG, "Unable to boost animation process. This should only happen"
+                    + " during unit tests");
+        } catch (RemoteException e) {
+            e.rethrowFromSystemServer();
+        }
+    }
+
     /**
      * Runs the given {@code runnable} when the last active transition has finished, or immediately
      * if there are currently no active transitions.
@@ -287,12 +315,14 @@
                     finishT.setAlpha(leash, 1.f);
                 }
             } else if (mode == TRANSIT_CLOSE || mode == TRANSIT_TO_BACK) {
-                // Wallpaper is a bit of an anomaly: it's visibility is tied to other WindowStates.
-                // As a result, we actually can't hide it's WindowToken because there may not be a
-                // transition associated with it becoming visible again. Fortunately, since it is
-                // always z-ordered to the back, we don't have to worry about it flickering to the
-                // front during reparenting, so the hide here isn't necessary for it.
-                if ((change.getFlags() & FLAG_IS_WALLPAPER) == 0) {
+                // Wallpaper/IME are anomalies: their visibility is tied to other WindowStates.
+                // As a result, we actually can't hide their WindowTokens because there may not be a
+                // transition associated with them becoming visible again. Fortunately, since
+                // wallpapers are always z-ordered to the back, we don't have to worry about it
+                // flickering to the front during reparenting. Similarly, the IME is reparented to
+                // the associated app, so its visibility is coupled. So, an explicit hide is not
+                // needed visually anyways.
+                if ((change.getFlags() & (FLAG_IS_WALLPAPER | FLAG_IS_INPUT_METHOD)) == 0) {
                     finishT.hide(leash);
                 }
             }
@@ -309,13 +339,14 @@
         if (info.getRootLeash().isValid()) {
             t.show(info.getRootLeash());
         }
+        final int numChanges = info.getChanges().size();
         // Put animating stuff above this line and put static stuff below it.
-        int zSplitLine = info.getChanges().size();
+        final int zSplitLine = numChanges + 1;
         // changes should be ordered top-to-bottom in z
-        for (int i = info.getChanges().size() - 1; i >= 0; --i) {
+        for (int i = numChanges - 1; i >= 0; --i) {
             final TransitionInfo.Change change = info.getChanges().get(i);
             final SurfaceControl leash = change.getLeash();
-            final int mode = info.getChanges().get(i).getMode();
+            final int mode = change.getMode();
 
             // Don't reparent anything that isn't independent within its parents
             if (!TransitionInfo.isIndependent(change, info)) {
@@ -329,26 +360,31 @@
                 t.setPosition(leash, change.getStartAbsBounds().left - info.getRootOffset().x,
                         change.getStartAbsBounds().top - info.getRootOffset().y);
             }
+            final int layer;
             // Put all the OPEN/SHOW on top
-            if (mode == TRANSIT_OPEN || mode == TRANSIT_TO_FRONT) {
+            if ((change.getFlags() & FLAG_IS_WALLPAPER) != 0) {
+                // Wallpaper is always at the bottom.
+                layer = -zSplitLine;
+            } else if (mode == TRANSIT_OPEN || mode == TRANSIT_TO_FRONT) {
                 if (isOpening) {
                     // put on top
-                    t.setLayer(leash, zSplitLine + info.getChanges().size() - i);
+                    layer = zSplitLine + numChanges - i;
                 } else {
                     // put on bottom
-                    t.setLayer(leash, zSplitLine - i);
+                    layer = zSplitLine - i;
                 }
             } else if (mode == TRANSIT_CLOSE || mode == TRANSIT_TO_BACK) {
                 if (isOpening) {
                     // put on bottom and leave visible
-                    t.setLayer(leash, zSplitLine - i);
+                    layer = zSplitLine - i;
                 } else {
                     // put on top
-                    t.setLayer(leash, zSplitLine + info.getChanges().size() - i);
+                    layer = zSplitLine + numChanges - i;
                 }
             } else { // CHANGE or other
-                t.setLayer(leash, zSplitLine + info.getChanges().size() - i);
+                layer = zSplitLine + numChanges - i;
             }
+            t.setLayer(leash, layer);
         }
     }
 
@@ -377,6 +413,7 @@
             ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, "Invalid root leash (%s): %s",
                     transitionToken, info);
             t.apply();
+            finishT.apply();
             onAbort(transitionToken);
             return;
         }
@@ -400,6 +437,7 @@
             }
             if (nonTaskChange && transferStartingWindow) {
                 t.apply();
+                finishT.apply();
                 // Treat this as an abort since we are bypassing any merge logic and effectively
                 // finishing immediately.
                 onAbort(transitionToken);
@@ -435,33 +473,42 @@
                 playing.mToken, (wct, cb) -> onFinish(merging.mToken, wct, cb));
     }
 
-    boolean startAnimation(@NonNull ActiveTransition active, TransitionHandler handler) {
-        return handler.startAnimation(active.mToken, active.mInfo, active.mStartT, active.mFinishT,
-                (wct, cb) -> onFinish(active.mToken, wct, cb));
-    }
-
-    void playTransition(@NonNull ActiveTransition active) {
+    private void playTransition(@NonNull ActiveTransition active) {
         setupAnimHierarchy(active.mInfo, active.mStartT, active.mFinishT);
 
         // If a handler already chose to run this animation, try delegating to it first.
         if (active.mHandler != null) {
             ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " try firstHandler %s",
                     active.mHandler);
-            if (startAnimation(active, active.mHandler)) {
+            boolean consumed = active.mHandler.startAnimation(active.mToken, active.mInfo,
+                    active.mStartT, active.mFinishT, (wct, cb) -> onFinish(active.mToken, wct, cb));
+            if (consumed) {
                 ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " animated by firstHandler");
                 return;
             }
         }
-        // Otherwise give every other handler a chance (in order)
+        // Otherwise give every other handler a chance
+        active.mHandler = dispatchTransition(active.mToken, active.mInfo, active.mStartT,
+                active.mFinishT, (wct, cb) -> onFinish(active.mToken, wct, cb), active.mHandler);
+    }
+
+    /**
+     * Gives every handler (in order) a chance to animate until one consumes the transition.
+     * @return the handler which consumed the transition.
+     */
+    TransitionHandler dispatchTransition(@NonNull IBinder transition, @NonNull TransitionInfo info,
+            @NonNull SurfaceControl.Transaction startT, @NonNull SurfaceControl.Transaction finishT,
+            @NonNull TransitionFinishCallback finishCB, @Nullable TransitionHandler skip) {
         for (int i = mHandlers.size() - 1; i >= 0; --i) {
-            if (mHandlers.get(i) == active.mHandler) continue;
+            if (mHandlers.get(i) == skip) continue;
             ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " try handler %s",
                     mHandlers.get(i));
-            if (startAnimation(active, mHandlers.get(i))) {
+            boolean consumed = mHandlers.get(i).startAnimation(transition, info, startT, finishT,
+                    finishCB);
+            if (consumed) {
                 ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " animated by %s",
                         mHandlers.get(i));
-                active.mHandler = mHandlers.get(i);
-                return;
+                return mHandlers.get(i);
             }
         }
         throw new IllegalStateException(
@@ -496,15 +543,22 @@
             active.mMerged = true;
             active.mAborted = abort;
             if (active.mHandler != null) {
-                active.mHandler.onTransitionMerged(active.mToken);
+                active.mHandler.onTransitionConsumed(
+                        active.mToken, abort, abort ? null : active.mFinishT);
             }
             return;
         }
-        mActiveTransitions.get(activeIdx).mAborted = abort;
+        final ActiveTransition active = mActiveTransitions.get(activeIdx);
+        active.mAborted = abort;
+        if (active.mAborted && active.mHandler != null) {
+            // Notifies to clean-up the aborted transition.
+            active.mHandler.onTransitionConsumed(
+                    transition, true /* aborted */, null /* finishTransaction */);
+        }
         ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS,
                 "Transition animation finished (abort=%b), notifying core %s", abort, transition);
         // Merge all relevant transactions together
-        SurfaceControl.Transaction fullFinish = mActiveTransitions.get(activeIdx).mFinishT;
+        SurfaceControl.Transaction fullFinish = active.mFinishT;
         for (int iA = activeIdx + 1; iA < mActiveTransitions.size(); ++iA) {
             final ActiveTransition toMerge = mActiveTransitions.get(iA);
             if (!toMerge.mMerged) break;
@@ -533,6 +587,11 @@
         while (mActiveTransitions.size() > activeIdx
                 && mActiveTransitions.get(activeIdx).mAborted) {
             ActiveTransition aborted = mActiveTransitions.remove(activeIdx);
+            // Notifies to clean-up the aborted transition.
+            if (aborted.mHandler != null) {
+                aborted.mHandler.onTransitionConsumed(
+                        transition, true /* aborted */, null /* finishTransaction */);
+            }
             mOrganizer.finishTransition(aborted.mToken, null /* wct */, null /* wctCB */);
         }
         if (mActiveTransitions.size() <= activeIdx) {
@@ -615,8 +674,9 @@
                 if (wct == null) {
                     wct = new WindowContainerTransaction();
                 }
-                mDisplayController.getChangeController().dispatchOnRotateDisplay(wct,
-                        change.getDisplayId(), change.getStartRotation(), change.getEndRotation());
+                mDisplayController.getChangeController().dispatchOnDisplayChange(wct,
+                        change.getDisplayId(), change.getStartRotation(), change.getEndRotation(),
+                        null /* newDisplayAreaInfo */);
             }
         }
         active.mToken = mOrganizer.startTransition(
@@ -714,9 +774,15 @@
 
         /**
          * Called when a transition which was already "claimed" by this handler has been merged
-         * into another animation. Gives this handler a chance to clean-up any expectations.
+         * into another animation or has been aborted. Gives this handler a chance to clean-up any
+         * expectations.
+         *
+         * @param transition The transition been consumed.
+         * @param aborted Whether the transition is aborted or not.
+         * @param finishTransaction The transaction to be applied after the transition animated.
          */
-        default void onTransitionMerged(@NonNull IBinder transition) { }
+        default void onTransitionConsumed(@NonNull IBinder transition, boolean aborted,
+                @Nullable SurfaceControl.Transaction finishTransaction) { }
 
         /**
          * Sets transition animation scale settings value to handler.
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/UnfoldAnimationController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/UnfoldAnimationController.java
new file mode 100644
index 0000000..6b59e31
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/UnfoldAnimationController.java
@@ -0,0 +1,234 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.unfold;
+
+import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
+
+import android.annotation.NonNull;
+import android.app.ActivityManager.RunningTaskInfo;
+import android.app.TaskInfo;
+import android.util.SparseArray;
+import android.view.SurfaceControl;
+
+import com.android.wm.shell.common.ShellExecutor;
+import com.android.wm.shell.common.TransactionPool;
+import com.android.wm.shell.sysui.ShellInit;
+import com.android.wm.shell.unfold.ShellUnfoldProgressProvider.UnfoldListener;
+import com.android.wm.shell.unfold.animation.UnfoldTaskAnimator;
+
+import java.util.List;
+import java.util.Optional;
+
+import dagger.Lazy;
+
+/**
+ * Manages fold/unfold animations of tasks on foldable devices.
+ * When folding or unfolding a foldable device we play animations that
+ * transform task cropping/scaling/rounded corners.
+ *
+ * This controller manages:
+ *  1) Folding/unfolding when Shell transitions disabled
+ *  2) Folding when Shell transitions enabled, unfolding is managed by
+ *    {@link com.android.wm.shell.unfold.UnfoldTransitionHandler}
+ */
+public class UnfoldAnimationController implements UnfoldListener {
+
+    private final ShellUnfoldProgressProvider mUnfoldProgressProvider;
+    private final ShellExecutor mExecutor;
+    private final TransactionPool mTransactionPool;
+    private final List<UnfoldTaskAnimator> mAnimators;
+    private final Lazy<Optional<UnfoldTransitionHandler>> mUnfoldTransitionHandler;
+
+    private final SparseArray<SurfaceControl> mTaskSurfaces = new SparseArray<>();
+    private final SparseArray<UnfoldTaskAnimator> mAnimatorsByTaskId = new SparseArray<>();
+
+    public UnfoldAnimationController(
+            @NonNull ShellInit shellInit,
+            @NonNull TransactionPool transactionPool,
+            @NonNull ShellUnfoldProgressProvider unfoldProgressProvider,
+            @NonNull List<UnfoldTaskAnimator> animators,
+            @NonNull Lazy<Optional<UnfoldTransitionHandler>> unfoldTransitionHandler,
+            @NonNull ShellExecutor executor) {
+        mUnfoldProgressProvider = unfoldProgressProvider;
+        mUnfoldTransitionHandler = unfoldTransitionHandler;
+        mTransactionPool = transactionPool;
+        mExecutor = executor;
+        mAnimators = animators;
+        // TODO(b/238217847): Temporarily add this check here until we can remove the dynamic
+        //                    override for this controller from the base module
+        if (unfoldProgressProvider != ShellUnfoldProgressProvider.NO_PROVIDER) {
+            shellInit.addInitCallback(this::onInit, this);
+        }
+    }
+
+    /**
+     * Initializes the controller, starts listening for the external events
+     */
+    public void onInit() {
+        mUnfoldProgressProvider.addListener(mExecutor, this);
+
+        for (int i = 0; i < mAnimators.size(); i++) {
+            final UnfoldTaskAnimator animator = mAnimators.get(i);
+            animator.init();
+            // TODO(b/238217847): See #provideSplitTaskUnfoldAnimatorBase
+            mExecutor.executeDelayed(animator::start, 0);
+        }
+    }
+
+    /**
+     * Called when a task appeared
+     * @param taskInfo info for the appeared task
+     * @param leash surface leash for the appeared task
+     */
+    public void onTaskAppeared(RunningTaskInfo taskInfo, SurfaceControl leash) {
+        mTaskSurfaces.put(taskInfo.taskId, leash);
+
+        // Find the first matching animator
+        for (int i = 0; i < mAnimators.size(); i++) {
+            final UnfoldTaskAnimator animator = mAnimators.get(i);
+            if (animator.isApplicableTask(taskInfo)) {
+                mAnimatorsByTaskId.put(taskInfo.taskId, animator);
+                animator.onTaskAppeared(taskInfo, leash);
+                break;
+            }
+        }
+    }
+
+    /**
+     * Called when task info changed
+     * @param taskInfo info for the changed task
+     */
+    public void onTaskInfoChanged(RunningTaskInfo taskInfo) {
+        final UnfoldTaskAnimator animator = mAnimatorsByTaskId.get(taskInfo.taskId);
+        final boolean isCurrentlyApplicable = animator != null;
+
+        if (isCurrentlyApplicable) {
+            final boolean isApplicable = animator.isApplicableTask(taskInfo);
+            if (isApplicable) {
+                // Still applicable, send update
+                animator.onTaskChanged(taskInfo);
+            } else {
+                // Became inapplicable
+                resetTask(animator, taskInfo);
+                animator.onTaskVanished(taskInfo);
+                mAnimatorsByTaskId.remove(taskInfo.taskId);
+            }
+        } else {
+            // Find the first matching animator
+            for (int i = 0; i < mAnimators.size(); i++) {
+                final UnfoldTaskAnimator currentAnimator = mAnimators.get(i);
+                if (currentAnimator.isApplicableTask(taskInfo)) {
+                    // Became applicable
+                    mAnimatorsByTaskId.put(taskInfo.taskId, currentAnimator);
+
+                    SurfaceControl leash = mTaskSurfaces.get(taskInfo.taskId);
+                    currentAnimator.onTaskAppeared(taskInfo, leash);
+                    break;
+                }
+            }
+        }
+    }
+
+    /**
+     * Called when a task vanished
+     * @param taskInfo info for the vanished task
+     */
+    public void onTaskVanished(RunningTaskInfo taskInfo) {
+        mTaskSurfaces.remove(taskInfo.taskId);
+
+        final UnfoldTaskAnimator animator = mAnimatorsByTaskId.get(taskInfo.taskId);
+        final boolean isCurrentlyApplicable = animator != null;
+
+        if (isCurrentlyApplicable) {
+            resetTask(animator, taskInfo);
+            animator.onTaskVanished(taskInfo);
+            mAnimatorsByTaskId.remove(taskInfo.taskId);
+        }
+    }
+
+    @Override
+    public void onStateChangeStarted() {
+        if (mUnfoldTransitionHandler.get().get().willHandleTransition()) {
+            return;
+        }
+
+        SurfaceControl.Transaction transaction = null;
+        for (int i = 0; i < mAnimators.size(); i++) {
+            final UnfoldTaskAnimator animator = mAnimators.get(i);
+            if (animator.hasActiveTasks()) {
+                if (transaction == null) transaction = mTransactionPool.acquire();
+                animator.prepareStartTransaction(transaction);
+            }
+        }
+
+        if (transaction != null) {
+            transaction.apply();
+            mTransactionPool.release(transaction);
+        }
+    }
+
+    @Override
+    public void onStateChangeProgress(float progress) {
+        if (mUnfoldTransitionHandler.get().get().willHandleTransition()) {
+            return;
+        }
+
+        SurfaceControl.Transaction transaction = null;
+        for (int i = 0; i < mAnimators.size(); i++) {
+            final UnfoldTaskAnimator animator = mAnimators.get(i);
+            if (animator.hasActiveTasks()) {
+                if (transaction == null) transaction = mTransactionPool.acquire();
+                animator.applyAnimationProgress(progress, transaction);
+            }
+        }
+
+        if (transaction != null) {
+            transaction.apply();
+            mTransactionPool.release(transaction);
+        }
+    }
+
+    @Override
+    public void onStateChangeFinished() {
+        if (mUnfoldTransitionHandler.get().get().willHandleTransition()) {
+            return;
+        }
+
+        final SurfaceControl.Transaction transaction = mTransactionPool.acquire();
+
+        for (int i = 0; i < mAnimators.size(); i++) {
+            final UnfoldTaskAnimator animator = mAnimators.get(i);
+            animator.resetAllSurfaces(transaction);
+            animator.prepareFinishTransaction(transaction);
+        }
+
+        transaction.apply();
+
+        mTransactionPool.release(transaction);
+    }
+
+    private void resetTask(UnfoldTaskAnimator animator, TaskInfo taskInfo) {
+        if (taskInfo.getWindowingMode() == WINDOWING_MODE_PINNED) {
+            // PiP task has its own cleanup path, ignore surface reset to avoid conflict.
+            return;
+        }
+        final SurfaceControl.Transaction transaction = mTransactionPool.acquire();
+        animator.resetSurface(taskInfo, transaction);
+        transaction.apply();
+        mTransactionPool.release(transaction);
+    }
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/UnfoldBackgroundController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/UnfoldBackgroundController.java
index 9faf454..86ca292 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/UnfoldBackgroundController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/UnfoldBackgroundController.java
@@ -79,7 +79,7 @@
     }
 
     private float[] getBackgroundColor(Context context) {
-        int colorInt = context.getResources().getColor(R.color.unfold_transition_background);
+        int colorInt = context.getResources().getColor(R.color.taskbar_background);
         return new float[]{
                 (float) red(colorInt) / 255.0F,
                 (float) green(colorInt) / 255.0F,
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/UnfoldTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/UnfoldTransitionHandler.java
index 6396039..5d7b629 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/UnfoldTransitionHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/UnfoldTransitionHandler.java
@@ -16,8 +16,6 @@
 
 package com.android.wm.shell.unfold;
 
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
-import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
 import static android.view.WindowManager.TRANSIT_CHANGE;
 
 import android.os.IBinder;
@@ -30,15 +28,24 @@
 import androidx.annotation.Nullable;
 
 import com.android.wm.shell.common.TransactionPool;
+import com.android.wm.shell.sysui.ShellInit;
 import com.android.wm.shell.transition.Transitions;
 import com.android.wm.shell.transition.Transitions.TransitionFinishCallback;
 import com.android.wm.shell.transition.Transitions.TransitionHandler;
 import com.android.wm.shell.unfold.ShellUnfoldProgressProvider.UnfoldListener;
+import com.android.wm.shell.unfold.animation.FullscreenUnfoldTaskAnimator;
+import com.android.wm.shell.unfold.animation.SplitTaskUnfoldAnimator;
+import com.android.wm.shell.unfold.animation.UnfoldTaskAnimator;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.Executor;
 
+/**
+ * Transition handler that is responsible for animating app surfaces when unfolding of foldable
+ * devices. It does not handle the folding animation, which is done in
+ * {@link UnfoldAnimationController}.
+ */
 public class UnfoldTransitionHandler implements TransitionHandler, UnfoldListener {
 
     private final ShellUnfoldProgressProvider mUnfoldProgressProvider;
@@ -51,17 +58,37 @@
     @Nullable
     private IBinder mTransition;
 
-    private final List<TransitionInfo.Change> mAnimatedFullscreenTasks = new ArrayList<>();
+    private final List<UnfoldTaskAnimator> mAnimators = new ArrayList<>();
 
-    public UnfoldTransitionHandler(ShellUnfoldProgressProvider unfoldProgressProvider,
-            TransactionPool transactionPool, Executor executor, Transitions transitions) {
+    public UnfoldTransitionHandler(ShellInit shellInit,
+            ShellUnfoldProgressProvider unfoldProgressProvider,
+            FullscreenUnfoldTaskAnimator fullscreenUnfoldAnimator,
+            SplitTaskUnfoldAnimator splitUnfoldTaskAnimator,
+            TransactionPool transactionPool,
+            Executor executor,
+            Transitions transitions) {
         mUnfoldProgressProvider = unfoldProgressProvider;
         mTransactionPool = transactionPool;
         mExecutor = executor;
         mTransitions = transitions;
+
+        mAnimators.add(splitUnfoldTaskAnimator);
+        mAnimators.add(fullscreenUnfoldAnimator);
+        // TODO(b/238217847): Temporarily add this check here until we can remove the dynamic
+        //                    override for this controller from the base module
+        if (unfoldProgressProvider != ShellUnfoldProgressProvider.NO_PROVIDER
+                && Transitions.ENABLE_SHELL_TRANSITIONS) {
+            shellInit.addInitCallback(this::onInit, this);
+        }
     }
 
-    public void init() {
+    /**
+     * Called when the transition handler is initialized.
+     */
+    public void onInit() {
+        for (int i = 0; i < mAnimators.size(); i++) {
+            mAnimators.get(i).init();
+        }
         mTransitions.addHandler(this);
         mUnfoldProgressProvider.addListener(mExecutor, this);
     }
@@ -71,49 +98,69 @@
             @NonNull SurfaceControl.Transaction startTransaction,
             @NonNull SurfaceControl.Transaction finishTransaction,
             @NonNull TransitionFinishCallback finishCallback) {
-
         if (transition != mTransition) return false;
 
-        startTransaction.apply();
+        for (int i = 0; i < mAnimators.size(); i++) {
+            final UnfoldTaskAnimator animator = mAnimators.get(i);
+            animator.clearTasks();
 
-        mAnimatedFullscreenTasks.clear();
-        info.getChanges().forEach(change -> {
-            final boolean allowedToAnimate = change.getTaskInfo() != null
-                    && change.getTaskInfo().getWindowingMode() == WINDOWING_MODE_FULLSCREEN
-                    && change.getTaskInfo().getActivityType() != ACTIVITY_TYPE_HOME
-                    && change.getMode() == TRANSIT_CHANGE;
+            info.getChanges().forEach(change -> {
+                if (change.getTaskInfo() != null
+                        && change.getMode() == TRANSIT_CHANGE
+                        && animator.isApplicableTask(change.getTaskInfo())) {
+                    animator.onTaskAppeared(change.getTaskInfo(), change.getLeash());
+                }
+            });
 
-            if (allowedToAnimate) {
-                mAnimatedFullscreenTasks.add(change);
+            if (animator.hasActiveTasks()) {
+                animator.prepareStartTransaction(startTransaction);
+                animator.prepareFinishTransaction(finishTransaction);
+                animator.start();
             }
-        });
+        }
 
+        startTransaction.apply();
         mFinishCallback = finishCallback;
-        mTransition = null;
         return true;
     }
 
     @Override
     public void onStateChangeProgress(float progress) {
-        mAnimatedFullscreenTasks.forEach(change -> {
-            final SurfaceControl.Transaction transaction = mTransactionPool.acquire();
+        if (mTransition == null) return;
 
-            // TODO: this is a placeholder animation, replace with a spec version in the next CLs
-            final float testScale = 0.8f + 0.2f * progress;
-            transaction.setScale(change.getLeash(), testScale, testScale);
+        SurfaceControl.Transaction transaction = null;
 
+        for (int i = 0; i < mAnimators.size(); i++) {
+            final UnfoldTaskAnimator animator = mAnimators.get(i);
+
+            if (animator.hasActiveTasks()) {
+                if (transaction == null) {
+                    transaction = mTransactionPool.acquire();
+                }
+
+                animator.applyAnimationProgress(progress, transaction);
+            }
+        }
+
+        if (transaction != null) {
             transaction.apply();
             mTransactionPool.release(transaction);
-        });
+        }
     }
 
     @Override
     public void onStateChangeFinished() {
-        if (mFinishCallback != null) {
-            mFinishCallback.onTransitionFinished(null, null);
-            mFinishCallback = null;
-            mAnimatedFullscreenTasks.clear();
+        if (mFinishCallback == null) return;
+
+        for (int i = 0; i < mAnimators.size(); i++) {
+            final UnfoldTaskAnimator animator = mAnimators.get(i);
+            animator.clearTasks();
+            animator.stop();
         }
+
+        mFinishCallback.onTransitionFinished(null, null);
+        mFinishCallback = null;
+        mTransition = null;
     }
 
     @Nullable
@@ -127,4 +174,8 @@
         }
         return null;
     }
+
+    public boolean willHandleTransition() {
+        return mTransition != null;
+    }
 }
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/animation/FullscreenUnfoldTaskAnimator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/animation/FullscreenUnfoldTaskAnimator.java
new file mode 100644
index 0000000..eab82f0
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/animation/FullscreenUnfoldTaskAnimator.java
@@ -0,0 +1,226 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.unfold.animation;
+
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
+import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
+import static android.util.MathUtils.lerp;
+import static android.view.Display.DEFAULT_DISPLAY;
+
+import android.animation.RectEvaluator;
+import android.animation.TypeEvaluator;
+import android.annotation.NonNull;
+import android.app.TaskInfo;
+import android.content.Context;
+import android.graphics.Matrix;
+import android.graphics.Rect;
+import android.util.SparseArray;
+import android.view.InsetsSource;
+import android.view.InsetsState;
+import android.view.SurfaceControl;
+import android.view.SurfaceControl.Transaction;
+
+import com.android.internal.policy.ScreenDecorationsUtils;
+import com.android.wm.shell.common.DisplayInsetsController;
+import com.android.wm.shell.unfold.UnfoldAnimationController;
+import com.android.wm.shell.unfold.UnfoldBackgroundController;
+
+/**
+ * This helper class contains logic that calculates scaling and cropping parameters
+ * for the folding/unfolding animation. As an input it receives TaskInfo objects and
+ * surfaces leashes and as an output it could fill surface transactions with required
+ * transformations.
+ *
+ * This class is used by
+ * {@link com.android.wm.shell.unfold.UnfoldTransitionHandler} and
+ * {@link UnfoldAnimationController}. They use independent
+ * instances of FullscreenUnfoldTaskAnimator.
+ */
+public class FullscreenUnfoldTaskAnimator implements UnfoldTaskAnimator,
+        DisplayInsetsController.OnInsetsChangedListener {
+
+    private static final float[] FLOAT_9 = new float[9];
+    private static final TypeEvaluator<Rect> RECT_EVALUATOR = new RectEvaluator(new Rect());
+
+    private static final float HORIZONTAL_START_MARGIN = 0.08f;
+    private static final float VERTICAL_START_MARGIN = 0.03f;
+    private static final float END_SCALE = 1f;
+    private static final float START_SCALE = END_SCALE - VERTICAL_START_MARGIN * 2;
+
+    private final SparseArray<AnimationContext> mAnimationContextByTaskId = new SparseArray<>();
+    private final int mExpandedTaskBarHeight;
+    private final float mWindowCornerRadiusPx;
+    private final DisplayInsetsController mDisplayInsetsController;
+    private final UnfoldBackgroundController mBackgroundController;
+
+    private InsetsSource mTaskbarInsetsSource;
+
+    public FullscreenUnfoldTaskAnimator(Context context,
+            @NonNull UnfoldBackgroundController backgroundController,
+            DisplayInsetsController displayInsetsController) {
+        mDisplayInsetsController = displayInsetsController;
+        mBackgroundController = backgroundController;
+        mExpandedTaskBarHeight = context.getResources().getDimensionPixelSize(
+                com.android.internal.R.dimen.taskbar_frame_height);
+        mWindowCornerRadiusPx = ScreenDecorationsUtils.getWindowCornerRadius(context);
+    }
+
+    public void init() {
+        mDisplayInsetsController.addInsetsChangedListener(DEFAULT_DISPLAY, this);
+    }
+
+    @Override
+    public void insetsChanged(InsetsState insetsState) {
+        mTaskbarInsetsSource = insetsState.getSource(InsetsState.ITYPE_EXTRA_NAVIGATION_BAR);
+        for (int i = mAnimationContextByTaskId.size() - 1; i >= 0; i--) {
+            AnimationContext context = mAnimationContextByTaskId.valueAt(i);
+            context.update(mTaskbarInsetsSource, context.mTaskInfo);
+        }
+    }
+
+    public boolean hasActiveTasks() {
+        return mAnimationContextByTaskId.size() > 0;
+    }
+
+    @Override
+    public void onTaskAppeared(TaskInfo taskInfo, SurfaceControl leash) {
+        AnimationContext animationContext = new AnimationContext(leash, mTaskbarInsetsSource,
+                taskInfo);
+        mAnimationContextByTaskId.put(taskInfo.taskId, animationContext);
+    }
+
+    @Override
+    public void onTaskChanged(TaskInfo taskInfo) {
+        AnimationContext animationContext = mAnimationContextByTaskId.get(taskInfo.taskId);
+        if (animationContext != null) {
+            animationContext.update(mTaskbarInsetsSource, taskInfo);
+        }
+    }
+
+    @Override
+    public void onTaskVanished(TaskInfo taskInfo) {
+        mAnimationContextByTaskId.remove(taskInfo.taskId);
+    }
+
+    @Override
+    public void clearTasks() {
+        mAnimationContextByTaskId.clear();
+    }
+
+    @Override
+    public void resetSurface(TaskInfo taskInfo, Transaction transaction) {
+        final AnimationContext context = mAnimationContextByTaskId.get(taskInfo.taskId);
+        if (context != null) {
+            resetSurface(context, transaction);
+        }
+    }
+
+    @Override
+    public void applyAnimationProgress(float progress, Transaction transaction) {
+        if (mAnimationContextByTaskId.size() == 0) return;
+
+        for (int i = mAnimationContextByTaskId.size() - 1; i >= 0; i--) {
+            final AnimationContext context = mAnimationContextByTaskId.valueAt(i);
+
+            context.mCurrentCropRect.set(RECT_EVALUATOR
+                    .evaluate(progress, context.mStartCropRect, context.mEndCropRect));
+
+            float scale = lerp(START_SCALE, END_SCALE, progress);
+            context.mMatrix.setScale(scale, scale, context.mCurrentCropRect.exactCenterX(),
+                    context.mCurrentCropRect.exactCenterY());
+
+            transaction.setWindowCrop(context.mLeash, context.mCurrentCropRect)
+                    .setMatrix(context.mLeash, context.mMatrix, FLOAT_9)
+                    .setCornerRadius(context.mLeash, mWindowCornerRadiusPx)
+                    .show(context.mLeash);
+        }
+    }
+
+    @Override
+    public void prepareStartTransaction(Transaction transaction) {
+        mBackgroundController.ensureBackground(transaction);
+    }
+
+    @Override
+    public void prepareFinishTransaction(Transaction transaction) {
+        mBackgroundController.removeBackground(transaction);
+    }
+
+    @Override
+    public boolean isApplicableTask(TaskInfo taskInfo) {
+        return taskInfo != null && taskInfo.isVisible()
+                && taskInfo.realActivity != null // to filter out parents created by organizer
+                && taskInfo.getWindowingMode() == WINDOWING_MODE_FULLSCREEN
+                && taskInfo.getActivityType() != ACTIVITY_TYPE_HOME;
+    }
+
+    @Override
+    public void resetAllSurfaces(Transaction transaction) {
+        for (int i = mAnimationContextByTaskId.size() - 1; i >= 0; i--) {
+            final AnimationContext context = mAnimationContextByTaskId.valueAt(i);
+            resetSurface(context, transaction);
+        }
+    }
+
+    private void resetSurface(AnimationContext context, Transaction transaction) {
+        transaction
+                .setWindowCrop(context.mLeash, null)
+                .setCornerRadius(context.mLeash, 0.0F)
+                .setMatrix(context.mLeash, 1.0F, 0.0F, 0.0F, 1.0F)
+                .setPosition(context.mLeash,
+                        (float) context.mTaskInfo.positionInParent.x,
+                        (float) context.mTaskInfo.positionInParent.y);
+    }
+
+    private class AnimationContext {
+        final SurfaceControl mLeash;
+        final Rect mStartCropRect = new Rect();
+        final Rect mEndCropRect = new Rect();
+        final Rect mCurrentCropRect = new Rect();
+        final Matrix mMatrix = new Matrix();
+
+        TaskInfo mTaskInfo;
+
+        private AnimationContext(SurfaceControl leash, InsetsSource taskBarInsetsSource,
+                TaskInfo taskInfo) {
+            mLeash = leash;
+            update(taskBarInsetsSource, taskInfo);
+        }
+
+        private void update(InsetsSource taskBarInsetsSource, TaskInfo taskInfo) {
+            mTaskInfo = taskInfo;
+            mStartCropRect.set(mTaskInfo.getConfiguration().windowConfiguration.getBounds());
+
+            if (taskBarInsetsSource != null) {
+                // Only insets the cropping window with task bar when it's expanded
+                if (taskBarInsetsSource.getFrame().height() >= mExpandedTaskBarHeight) {
+                    mStartCropRect.inset(taskBarInsetsSource
+                            .calculateVisibleInsets(mStartCropRect));
+                }
+            }
+
+            mEndCropRect.set(mStartCropRect);
+
+            int horizontalMargin = (int) (mEndCropRect.width() * HORIZONTAL_START_MARGIN);
+            mStartCropRect.left = mEndCropRect.left + horizontalMargin;
+            mStartCropRect.right = mEndCropRect.right - horizontalMargin;
+            int verticalMargin = (int) (mEndCropRect.height() * VERTICAL_START_MARGIN);
+            mStartCropRect.top = mEndCropRect.top + verticalMargin;
+            mStartCropRect.bottom = mEndCropRect.bottom - verticalMargin;
+        }
+    }
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/animation/SplitTaskUnfoldAnimator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/animation/SplitTaskUnfoldAnimator.java
new file mode 100644
index 0000000..6e10ebe
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/animation/SplitTaskUnfoldAnimator.java
@@ -0,0 +1,350 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.unfold.animation;
+
+import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
+import static android.view.Display.DEFAULT_DISPLAY;
+
+import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_TOP_OR_LEFT;
+import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_UNDEFINED;
+import static com.android.wm.shell.splitscreen.SplitScreen.STAGE_TYPE_MAIN;
+import static com.android.wm.shell.splitscreen.SplitScreen.STAGE_TYPE_UNDEFINED;
+
+import android.animation.RectEvaluator;
+import android.animation.TypeEvaluator;
+import android.app.TaskInfo;
+import android.content.Context;
+import android.graphics.Insets;
+import android.graphics.Rect;
+import android.util.SparseArray;
+import android.view.InsetsSource;
+import android.view.InsetsState;
+import android.view.SurfaceControl;
+import android.view.SurfaceControl.Transaction;
+
+import com.android.internal.policy.ScreenDecorationsUtils;
+import com.android.wm.shell.common.DisplayInsetsController;
+import com.android.wm.shell.common.split.SplitScreenConstants.SplitPosition;
+import com.android.wm.shell.splitscreen.SplitScreen;
+import com.android.wm.shell.splitscreen.SplitScreen.SplitScreenListener;
+import com.android.wm.shell.splitscreen.SplitScreenController;
+import com.android.wm.shell.unfold.UnfoldAnimationController;
+import com.android.wm.shell.unfold.UnfoldBackgroundController;
+
+import java.util.Optional;
+import java.util.concurrent.Executor;
+
+import dagger.Lazy;
+
+/**
+ * This helper class contains logic that calculates scaling and cropping parameters
+ * for the folding/unfolding animation. As an input it receives TaskInfo objects and
+ * surfaces leashes and as an output it could fill surface transactions with required
+ * transformations.
+ *
+ * This class is used by
+ * {@link com.android.wm.shell.unfold.UnfoldTransitionHandler} and
+ * {@link UnfoldAnimationController}.
+ * They use independent instances of SplitTaskUnfoldAnimator.
+ */
+public class SplitTaskUnfoldAnimator implements UnfoldTaskAnimator,
+        DisplayInsetsController.OnInsetsChangedListener, SplitScreenListener {
+
+    private static final TypeEvaluator<Rect> RECT_EVALUATOR = new RectEvaluator(new Rect());
+    private static final float CROPPING_START_MARGIN_FRACTION = 0.05f;
+
+    private final Executor mExecutor;
+    private final DisplayInsetsController mDisplayInsetsController;
+    private final SparseArray<AnimationContext> mAnimationContextByTaskId = new SparseArray<>();
+    private final int mExpandedTaskBarHeight;
+    private final float mWindowCornerRadiusPx;
+    private final Lazy<Optional<SplitScreenController>> mSplitScreenController;
+    private final UnfoldBackgroundController mUnfoldBackgroundController;
+
+    private final Rect mMainStageBounds = new Rect();
+    private final Rect mSideStageBounds = new Rect();
+    private final Rect mRootStageBounds = new Rect();
+
+    private InsetsSource mTaskbarInsetsSource;
+
+    @SplitPosition
+    private int mMainStagePosition = SPLIT_POSITION_UNDEFINED;
+    @SplitPosition
+    private int mSideStagePosition = SPLIT_POSITION_UNDEFINED;
+
+    public SplitTaskUnfoldAnimator(Context context, Executor executor,
+            Lazy<Optional<SplitScreenController>> splitScreenController,
+            UnfoldBackgroundController unfoldBackgroundController,
+            DisplayInsetsController displayInsetsController) {
+        mDisplayInsetsController = displayInsetsController;
+        mExecutor = executor;
+        mUnfoldBackgroundController = unfoldBackgroundController;
+        mSplitScreenController = splitScreenController;
+        mExpandedTaskBarHeight = context.getResources().getDimensionPixelSize(
+                com.android.internal.R.dimen.taskbar_frame_height);
+        mWindowCornerRadiusPx = ScreenDecorationsUtils.getWindowCornerRadius(context);
+    }
+
+    /** Initializes the animator, this should be called only once */
+    @Override
+    public void init() {
+        mDisplayInsetsController.addInsetsChangedListener(DEFAULT_DISPLAY, this);
+    }
+
+    /**
+     * Starts listening for split-screen changes and gets initial split-screen
+     * layout information through the listener
+     */
+    @Override
+    public void start() {
+        mSplitScreenController.get().get().asSplitScreen()
+                .registerSplitScreenListener(this, mExecutor);
+    }
+
+    /**
+     * Stops listening for the split-screen layout changes
+     */
+    @Override
+    public void stop() {
+        mSplitScreenController.get().get().asSplitScreen()
+                .unregisterSplitScreenListener(this);
+    }
+
+    @Override
+    public void insetsChanged(InsetsState insetsState) {
+        mTaskbarInsetsSource = insetsState.getSource(InsetsState.ITYPE_EXTRA_NAVIGATION_BAR);
+        updateContexts();
+    }
+
+    @Override
+    public void onTaskStageChanged(int taskId, int stage, boolean visible) {
+        final AnimationContext context = mAnimationContextByTaskId.get(taskId);
+        if (context != null) {
+            context.mStageType = stage;
+            context.update();
+        }
+    }
+
+    @Override
+    public void onStagePositionChanged(int stage, int position) {
+        if (stage == STAGE_TYPE_MAIN) {
+            mMainStagePosition = position;
+        } else {
+            mSideStagePosition = position;
+        }
+        updateContexts();
+    }
+
+    @Override
+    public void onSplitBoundsChanged(Rect rootBounds, Rect mainBounds, Rect sideBounds) {
+        mRootStageBounds.set(rootBounds);
+        mMainStageBounds.set(mainBounds);
+        mSideStageBounds.set(sideBounds);
+        updateContexts();
+    }
+
+    private void updateContexts() {
+        for (int i = mAnimationContextByTaskId.size() - 1; i >= 0; i--) {
+            AnimationContext context = mAnimationContextByTaskId.valueAt(i);
+            context.update();
+        }
+    }
+
+    /**
+     * Register a split task in the animator
+     * @param taskInfo info of the task
+     * @param leash the surface of the task
+     */
+    @Override
+    public void onTaskAppeared(TaskInfo taskInfo, SurfaceControl leash) {
+        AnimationContext context = new AnimationContext(leash);
+        mAnimationContextByTaskId.put(taskInfo.taskId, context);
+    }
+
+    /**
+     * Unregister the task from the unfold animation
+     * @param taskInfo info of the task
+     */
+    @Override
+    public void onTaskVanished(TaskInfo taskInfo) {
+        mAnimationContextByTaskId.remove(taskInfo.taskId);
+    }
+
+    @Override
+    public boolean isApplicableTask(TaskInfo taskInfo) {
+        return taskInfo.hasParentTask()
+                && taskInfo.isVisible
+                && taskInfo.realActivity != null // to filter out parents created by organizer
+                && taskInfo.getWindowingMode() == WINDOWING_MODE_MULTI_WINDOW;
+    }
+
+    /**
+     * Clear all registered tasks
+     */
+    @Override
+    public void clearTasks() {
+        mAnimationContextByTaskId.clear();
+    }
+
+    /**
+     * Reset transformations of the task that could have been applied by the animator
+     * @param taskInfo task to reset
+     * @param transaction a transaction to write the changes to
+     */
+    @Override
+    public void resetSurface(TaskInfo taskInfo, Transaction transaction) {
+        AnimationContext context = mAnimationContextByTaskId.get(taskInfo.taskId);
+        if (context != null) {
+            resetSurface(transaction, context);
+        }
+    }
+
+    /**
+     * Reset all surface transformation that could have been introduced by the animator
+     * @param transaction to write changes to
+     */
+    @Override
+    public void resetAllSurfaces(Transaction transaction) {
+        for (int i = mAnimationContextByTaskId.size() - 1; i >= 0; i--) {
+            final AnimationContext context = mAnimationContextByTaskId.valueAt(i);
+            resetSurface(transaction, context);
+        }
+    }
+
+    @Override
+    public void applyAnimationProgress(float progress, Transaction transaction) {
+        for (int i = mAnimationContextByTaskId.size() - 1; i >= 0; i--) {
+            AnimationContext context = mAnimationContextByTaskId.valueAt(i);
+            if (context.mStageType == STAGE_TYPE_UNDEFINED) {
+                continue;
+            }
+
+            context.mCurrentCropRect.set(RECT_EVALUATOR
+                    .evaluate(progress, context.mStartCropRect, context.mEndCropRect));
+
+            transaction.setWindowCrop(context.mLeash, context.mCurrentCropRect)
+                    .setCornerRadius(context.mLeash, mWindowCornerRadiusPx);
+        }
+    }
+
+    @Override
+    public void prepareStartTransaction(Transaction transaction) {
+        mUnfoldBackgroundController.ensureBackground(transaction);
+        mSplitScreenController.get().get().updateSplitScreenSurfaces(transaction);
+    }
+
+    @Override
+    public void prepareFinishTransaction(Transaction transaction) {
+        mUnfoldBackgroundController.removeBackground(transaction);
+    }
+
+    /**
+     * @return true if there are tasks to animate
+     */
+    @Override
+    public boolean hasActiveTasks() {
+        return mAnimationContextByTaskId.size() > 0;
+    }
+
+    private void resetSurface(SurfaceControl.Transaction transaction, AnimationContext context) {
+        transaction
+                .setWindowCrop(context.mLeash, null)
+                .setCornerRadius(context.mLeash, 0.0F);
+    }
+
+    private class AnimationContext {
+        final SurfaceControl mLeash;
+
+        final Rect mStartCropRect = new Rect();
+        final Rect mEndCropRect = new Rect();
+        final Rect mCurrentCropRect = new Rect();
+
+        @SplitScreen.StageType
+        int mStageType = STAGE_TYPE_UNDEFINED;
+
+        private AnimationContext(SurfaceControl leash) {
+            mLeash = leash;
+            update();
+        }
+
+        private void update() {
+            final Rect stageBounds = mStageType == STAGE_TYPE_MAIN
+                    ? mMainStageBounds : mSideStageBounds;
+
+            mStartCropRect.set(stageBounds);
+
+            boolean taskbarExpanded = isTaskbarExpanded();
+            if (taskbarExpanded) {
+                // Only insets the cropping window with taskbar when taskbar is expanded
+                mStartCropRect.inset(mTaskbarInsetsSource.calculateVisibleInsets(mStartCropRect));
+            }
+
+            // Offset to surface coordinates as layout bounds are in screen coordinates
+            mStartCropRect.offsetTo(0, 0);
+
+            mEndCropRect.set(mStartCropRect);
+
+            int maxSize = Math.max(mEndCropRect.width(), mEndCropRect.height());
+            int margin = (int) (maxSize * CROPPING_START_MARGIN_FRACTION);
+
+            // Sides adjacent to split bar or task bar are not be animated.
+            Insets margins;
+            final boolean isLandscape = mRootStageBounds.width() > mRootStageBounds.height();
+            if (isLandscape) { // Left and right splits.
+                margins = getLandscapeMargins(margin, taskbarExpanded);
+            } else { // Top and bottom splits.
+                margins = getPortraitMargins(margin, taskbarExpanded);
+            }
+            mStartCropRect.inset(margins);
+        }
+
+        private Insets getLandscapeMargins(int margin, boolean taskbarExpanded) {
+            int left = margin;
+            int right = margin;
+            int bottom = taskbarExpanded ? 0 : margin; // Taskbar margin.
+            final int splitPosition = mStageType == STAGE_TYPE_MAIN
+                    ? mMainStagePosition : mSideStagePosition;
+            if (splitPosition == SPLIT_POSITION_TOP_OR_LEFT) {
+                right = 0; // Divider margin.
+            } else {
+                left = 0; // Divider margin.
+            }
+            return Insets.of(left, /* top= */ margin, right, bottom);
+        }
+
+        private Insets getPortraitMargins(int margin, boolean taskbarExpanded) {
+            int bottom = margin;
+            int top = margin;
+            final int splitPosition = mStageType == STAGE_TYPE_MAIN
+                    ? mMainStagePosition : mSideStagePosition;
+            if (splitPosition == SPLIT_POSITION_TOP_OR_LEFT) {
+                bottom = 0; // Divider margin.
+            } else { // Bottom split.
+                top = 0; // Divider margin.
+                if (taskbarExpanded) {
+                    bottom = 0; // Taskbar margin.
+                }
+            }
+            return Insets.of(/* left= */ margin, top, /* right= */ margin, bottom);
+        }
+
+        private boolean isTaskbarExpanded() {
+            return mTaskbarInsetsSource != null
+                    && mTaskbarInsetsSource.getFrame().height() >= mExpandedTaskBarHeight;
+        }
+    }
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/animation/UnfoldTaskAnimator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/animation/UnfoldTaskAnimator.java
new file mode 100644
index 0000000..e1e3663
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/animation/UnfoldTaskAnimator.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.unfold.animation;
+
+import android.app.TaskInfo;
+import android.view.SurfaceControl;
+import android.view.SurfaceControl.Transaction;
+
+/**
+ * Interface for classes that handle animations of tasks when folding or unfolding
+ * foldable devices.
+ */
+public interface UnfoldTaskAnimator {
+    /**
+     * Initializes the animator, this should be called once in the lifetime of the animator
+     */
+    default void init() {}
+
+    /**
+     * Starts the animator, it might start listening for some events from the system.
+     * Applying animation should be done only when animator is started.
+     * Animator could be started/stopped several times.
+     */
+    default void start() {}
+
+    /**
+     * Stops the animator, it could unsubscribe from system events.
+     */
+    default void stop() {}
+
+    /**
+     * If this method returns true then task updates will be propagated to
+     * the animator using the onTaskAppeared/Changed/Vanished callbacks.
+     * @return true if this task should be animated by this animator
+     */
+    default boolean isApplicableTask(TaskInfo taskInfo) {
+        return false;
+    }
+
+    /**
+     * Called whenever a task applicable to this animator appeared
+     * (isApplicableTask returns true for this task)
+     *
+     * @param taskInfo info of the appeared task
+     * @param leash surface of the task
+     */
+    default void onTaskAppeared(TaskInfo taskInfo, SurfaceControl leash) {}
+
+    /**
+     * Called whenever a task applicable to this animator changed
+     * @param taskInfo info of the changed task
+     */
+    default void onTaskChanged(TaskInfo taskInfo) {}
+
+    /**
+     * Called whenever a task applicable to this animator vanished
+     * @param taskInfo info of the vanished task
+     */
+    default void onTaskVanished(TaskInfo taskInfo) {}
+
+    /**
+     * @return true if there tasks that could be potentially animated
+     */
+    default boolean hasActiveTasks() {
+        return false;
+    }
+
+    /**
+     * Clears all registered tasks in the animator
+     */
+    default void clearTasks() {}
+
+    /**
+     * Apply task surfaces transformations based on the current unfold progress
+     * @param progress unfold transition progress
+     * @param transaction to write changes to
+     */
+    default void applyAnimationProgress(float progress, Transaction transaction) {}
+
+    /**
+     * Apply task surfaces transformations that should be set before starting the animation
+     * @param transaction to write changes to
+     */
+    default void prepareStartTransaction(Transaction transaction) {}
+
+    /**
+     * Apply task surfaces transformations that should be set after finishing the animation
+     * @param transaction to write changes to
+     */
+    default void prepareFinishTransaction(Transaction transaction) {}
+
+    /**
+     * Resets task surface to its initial transformation
+     * @param transaction to write changes to
+     */
+    default void resetSurface(TaskInfo taskInfo, Transaction transaction) {}
+
+    /**
+     * Resets all task surfaces to their initial transformations
+     * @param transaction to write changes to
+     */
+    default void resetAllSurfaces(Transaction transaction) {}
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/qualifier/UnfoldShellTransition.java b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/qualifier/UnfoldShellTransition.java
new file mode 100644
index 0000000..4c868305
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/qualifier/UnfoldShellTransition.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.unfold.qualifier;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+import javax.inject.Qualifier;
+
+/**
+ * Indicates that this class is used for the shell unfold transition
+ */
+@Qualifier
+@Retention(RetentionPolicy.RUNTIME)
+public @interface UnfoldShellTransition {}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/qualifier/UnfoldTransition.java b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/qualifier/UnfoldTransition.java
new file mode 100644
index 0000000..4d2b3e6
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/unfold/qualifier/UnfoldTransition.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.unfold.qualifier;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+import javax.inject.Qualifier;
+
+/**
+ * Indicates that this class is used for unfold transition implemented
+ * without using Shell transitions
+ */
+@Qualifier
+@Retention(RetentionPolicy.RUNTIME)
+public @interface UnfoldTransition {}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/util/GroupedRecentTaskInfo.java b/libs/WindowManager/Shell/src/com/android/wm/shell/util/GroupedRecentTaskInfo.java
index 603d05d..2cff171 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/util/GroupedRecentTaskInfo.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/util/GroupedRecentTaskInfo.java
@@ -30,7 +30,7 @@
 public class GroupedRecentTaskInfo implements Parcelable {
     public @NonNull ActivityManager.RecentTaskInfo mTaskInfo1;
     public @Nullable ActivityManager.RecentTaskInfo mTaskInfo2;
-    public @Nullable StagedSplitBounds mStagedSplitBounds;
+    public @Nullable SplitBounds mSplitBounds;
 
     public GroupedRecentTaskInfo(@NonNull ActivityManager.RecentTaskInfo task1) {
         this(task1, null, null);
@@ -38,24 +38,24 @@
 
     public GroupedRecentTaskInfo(@NonNull ActivityManager.RecentTaskInfo task1,
             @Nullable ActivityManager.RecentTaskInfo task2,
-            @Nullable StagedSplitBounds stagedSplitBounds) {
+            @Nullable SplitBounds splitBounds) {
         mTaskInfo1 = task1;
         mTaskInfo2 = task2;
-        mStagedSplitBounds = stagedSplitBounds;
+        mSplitBounds = splitBounds;
     }
 
     GroupedRecentTaskInfo(Parcel parcel) {
         mTaskInfo1 = parcel.readTypedObject(ActivityManager.RecentTaskInfo.CREATOR);
         mTaskInfo2 = parcel.readTypedObject(ActivityManager.RecentTaskInfo.CREATOR);
-        mStagedSplitBounds = parcel.readTypedObject(StagedSplitBounds.CREATOR);
+        mSplitBounds = parcel.readTypedObject(SplitBounds.CREATOR);
     }
 
     @Override
     public String toString() {
         String taskString = "Task1: " + getTaskInfo(mTaskInfo1)
                 + ", Task2: " + getTaskInfo(mTaskInfo2);
-        if (mStagedSplitBounds != null) {
-            taskString += ", SplitBounds: " + mStagedSplitBounds.toString();
+        if (mSplitBounds != null) {
+            taskString += ", SplitBounds: " + mSplitBounds.toString();
         }
         return taskString;
     }
@@ -76,7 +76,7 @@
     public void writeToParcel(Parcel parcel, int flags) {
         parcel.writeTypedObject(mTaskInfo1, flags);
         parcel.writeTypedObject(mTaskInfo2, flags);
-        parcel.writeTypedObject(mStagedSplitBounds, flags);
+        parcel.writeTypedObject(mSplitBounds, flags);
     }
 
     @Override
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/util/SplitBounds.java b/libs/WindowManager/Shell/src/com/android/wm/shell/util/SplitBounds.java
new file mode 100644
index 0000000..e903897
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/util/SplitBounds.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.wm.shell.util;
+
+import android.graphics.Rect;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.Objects;
+
+/**
+ * Container of various information needed to display split screen
+ * tasks/leashes/etc in Launcher
+ */
+public class SplitBounds implements Parcelable {
+    public final Rect leftTopBounds;
+    public final Rect rightBottomBounds;
+    /** This rect represents the actual gap between the two apps */
+    public final Rect visualDividerBounds;
+    // This class is orientation-agnostic, so we compute both for later use
+    public final float topTaskPercent;
+    public final float leftTaskPercent;
+    /**
+     * If {@code true}, that means at the time of creation of this object, the
+     * split-screened apps were vertically stacked. This is useful in scenarios like
+     * rotation where the bounds won't change, but this variable can indicate what orientation
+     * the bounds were originally in
+     */
+    public final boolean appsStackedVertically;
+    public final int leftTopTaskId;
+    public final int rightBottomTaskId;
+
+    public SplitBounds(Rect leftTopBounds, Rect rightBottomBounds,
+            int leftTopTaskId, int rightBottomTaskId) {
+        this.leftTopBounds = leftTopBounds;
+        this.rightBottomBounds = rightBottomBounds;
+        this.leftTopTaskId = leftTopTaskId;
+        this.rightBottomTaskId = rightBottomTaskId;
+
+        if (rightBottomBounds.top > leftTopBounds.top) {
+            // vertical apps, horizontal divider
+            this.visualDividerBounds = new Rect(leftTopBounds.left, leftTopBounds.bottom,
+                    leftTopBounds.right, rightBottomBounds.top);
+            appsStackedVertically = true;
+        } else {
+            // horizontal apps, vertical divider
+            this.visualDividerBounds = new Rect(leftTopBounds.right, leftTopBounds.top,
+                    rightBottomBounds.left, leftTopBounds.bottom);
+            appsStackedVertically = false;
+        }
+
+        leftTaskPercent = this.leftTopBounds.width() / (float) rightBottomBounds.right;
+        topTaskPercent = this.leftTopBounds.height() / (float) rightBottomBounds.bottom;
+    }
+
+    public SplitBounds(Parcel parcel) {
+        leftTopBounds = parcel.readTypedObject(Rect.CREATOR);
+        rightBottomBounds = parcel.readTypedObject(Rect.CREATOR);
+        visualDividerBounds = parcel.readTypedObject(Rect.CREATOR);
+        topTaskPercent = parcel.readFloat();
+        leftTaskPercent = parcel.readFloat();
+        appsStackedVertically = parcel.readBoolean();
+        leftTopTaskId = parcel.readInt();
+        rightBottomTaskId = parcel.readInt();
+    }
+
+    @Override
+    public void writeToParcel(Parcel parcel, int flags) {
+        parcel.writeTypedObject(leftTopBounds, flags);
+        parcel.writeTypedObject(rightBottomBounds, flags);
+        parcel.writeTypedObject(visualDividerBounds, flags);
+        parcel.writeFloat(topTaskPercent);
+        parcel.writeFloat(leftTaskPercent);
+        parcel.writeBoolean(appsStackedVertically);
+        parcel.writeInt(leftTopTaskId);
+        parcel.writeInt(rightBottomTaskId);
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof SplitBounds)) {
+            return false;
+        }
+        // Only need to check the base fields (the other fields are derived from these)
+        final SplitBounds other = (SplitBounds) obj;
+        return Objects.equals(leftTopBounds, other.leftTopBounds)
+                && Objects.equals(rightBottomBounds, other.rightBottomBounds)
+                && leftTopTaskId == other.leftTopTaskId
+                && rightBottomTaskId == other.rightBottomTaskId;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(leftTopBounds, rightBottomBounds, leftTopTaskId, rightBottomTaskId);
+    }
+
+    @Override
+    public String toString() {
+        return "LeftTop: " + leftTopBounds + ", taskId: " + leftTopTaskId + "\n"
+                + "RightBottom: " + rightBottomBounds + ", taskId: " + rightBottomTaskId +  "\n"
+                + "Divider: " + visualDividerBounds + "\n"
+                + "AppsVertical? " + appsStackedVertically;
+    }
+
+    public static final Creator<SplitBounds> CREATOR = new Creator<SplitBounds>() {
+        @Override
+        public SplitBounds createFromParcel(Parcel in) {
+            return new SplitBounds(in);
+        }
+
+        @Override
+        public SplitBounds[] newArray(int size) {
+            return new SplitBounds[size];
+        }
+    };
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/util/StagedSplitBounds.java b/libs/WindowManager/Shell/src/com/android/wm/shell/util/StagedSplitBounds.java
deleted file mode 100644
index a0c84cc..0000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/util/StagedSplitBounds.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.wm.shell.util;
-
-import android.graphics.Rect;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import java.util.Objects;
-
-/**
- * Container of various information needed to display split screen
- * tasks/leashes/etc in Launcher
- */
-public class StagedSplitBounds implements Parcelable {
-    public final Rect leftTopBounds;
-    public final Rect rightBottomBounds;
-    /** This rect represents the actual gap between the two apps */
-    public final Rect visualDividerBounds;
-    // This class is orientation-agnostic, so we compute both for later use
-    public final float topTaskPercent;
-    public final float leftTaskPercent;
-    /**
-     * If {@code true}, that means at the time of creation of this object, the
-     * split-screened apps were vertically stacked. This is useful in scenarios like
-     * rotation where the bounds won't change, but this variable can indicate what orientation
-     * the bounds were originally in
-     */
-    public final boolean appsStackedVertically;
-    public final int leftTopTaskId;
-    public final int rightBottomTaskId;
-
-    public StagedSplitBounds(Rect leftTopBounds, Rect rightBottomBounds,
-            int leftTopTaskId, int rightBottomTaskId) {
-        this.leftTopBounds = leftTopBounds;
-        this.rightBottomBounds = rightBottomBounds;
-        this.leftTopTaskId = leftTopTaskId;
-        this.rightBottomTaskId = rightBottomTaskId;
-
-        if (rightBottomBounds.top > leftTopBounds.top) {
-            // vertical apps, horizontal divider
-            this.visualDividerBounds = new Rect(leftTopBounds.left, leftTopBounds.bottom,
-                    leftTopBounds.right, rightBottomBounds.top);
-            appsStackedVertically = true;
-        } else {
-            // horizontal apps, vertical divider
-            this.visualDividerBounds = new Rect(leftTopBounds.right, leftTopBounds.top,
-                    rightBottomBounds.left, leftTopBounds.bottom);
-            appsStackedVertically = false;
-        }
-
-        leftTaskPercent = this.leftTopBounds.width() / (float) rightBottomBounds.right;
-        topTaskPercent = this.leftTopBounds.height() / (float) rightBottomBounds.bottom;
-    }
-
-    public StagedSplitBounds(Parcel parcel) {
-        leftTopBounds = parcel.readTypedObject(Rect.CREATOR);
-        rightBottomBounds = parcel.readTypedObject(Rect.CREATOR);
-        visualDividerBounds = parcel.readTypedObject(Rect.CREATOR);
-        topTaskPercent = parcel.readFloat();
-        leftTaskPercent = parcel.readFloat();
-        appsStackedVertically = parcel.readBoolean();
-        leftTopTaskId = parcel.readInt();
-        rightBottomTaskId = parcel.readInt();
-    }
-
-    @Override
-    public void writeToParcel(Parcel parcel, int flags) {
-        parcel.writeTypedObject(leftTopBounds, flags);
-        parcel.writeTypedObject(rightBottomBounds, flags);
-        parcel.writeTypedObject(visualDividerBounds, flags);
-        parcel.writeFloat(topTaskPercent);
-        parcel.writeFloat(leftTaskPercent);
-        parcel.writeBoolean(appsStackedVertically);
-        parcel.writeInt(leftTopTaskId);
-        parcel.writeInt(rightBottomTaskId);
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (!(obj instanceof StagedSplitBounds)) {
-            return false;
-        }
-        // Only need to check the base fields (the other fields are derived from these)
-        final StagedSplitBounds other = (StagedSplitBounds) obj;
-        return Objects.equals(leftTopBounds, other.leftTopBounds)
-                && Objects.equals(rightBottomBounds, other.rightBottomBounds)
-                && leftTopTaskId == other.leftTopTaskId
-                && rightBottomTaskId == other.rightBottomTaskId;
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(leftTopBounds, rightBottomBounds, leftTopTaskId, rightBottomTaskId);
-    }
-
-    @Override
-    public String toString() {
-        return "LeftTop: " + leftTopBounds + ", taskId: " + leftTopTaskId + "\n"
-                + "RightBottom: " + rightBottomBounds + ", taskId: " + rightBottomTaskId +  "\n"
-                + "Divider: " + visualDividerBounds + "\n"
-                + "AppsVertical? " + appsStackedVertically;
-    }
-
-    public static final Creator<StagedSplitBounds> CREATOR = new Creator<StagedSplitBounds>() {
-        @Override
-        public StagedSplitBounds createFromParcel(Parcel in) {
-            return new StagedSplitBounds(in);
-        }
-
-        @Override
-        public StagedSplitBounds[] newArray(int size) {
-            return new StagedSplitBounds[size];
-        }
-    };
-}
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
new file mode 100644
index 0000000..08d6c50
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecorViewModel.java
@@ -0,0 +1,217 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.windowdecor;
+
+import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
+import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
+import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
+
+import android.app.ActivityManager;
+import android.app.ActivityManager.RunningTaskInfo;
+import android.app.ActivityTaskManager;
+import android.content.Context;
+import android.os.Handler;
+import android.view.Choreographer;
+import android.view.MotionEvent;
+import android.view.SurfaceControl;
+import android.view.View;
+import android.window.WindowContainerToken;
+import android.window.WindowContainerTransaction;
+
+import com.android.wm.shell.R;
+import com.android.wm.shell.ShellTaskOrganizer;
+import com.android.wm.shell.common.DisplayController;
+import com.android.wm.shell.common.SyncTransactionQueue;
+import com.android.wm.shell.freeform.FreeformTaskTransitionStarter;
+import com.android.wm.shell.transition.Transitions;
+
+/**
+ * View model for the window decoration with a caption and shadows. Works with
+ * {@link CaptionWindowDecoration}.
+ */
+public class CaptionWindowDecorViewModel implements WindowDecorViewModel<CaptionWindowDecoration> {
+    private final ActivityTaskManager mActivityTaskManager;
+    private final ShellTaskOrganizer mTaskOrganizer;
+    private final Context mContext;
+    private final Handler mMainHandler;
+    private final Choreographer mMainChoreographer;
+    private final DisplayController mDisplayController;
+    private final SyncTransactionQueue mSyncQueue;
+
+    private FreeformTaskTransitionStarter mTransitionStarter;
+
+    public CaptionWindowDecorViewModel(
+            Context context,
+            Handler mainHandler,
+            Choreographer mainChoreographer,
+            ShellTaskOrganizer taskOrganizer,
+            DisplayController displayController,
+            SyncTransactionQueue syncQueue) {
+        mContext = context;
+        mMainHandler = mainHandler;
+        mMainChoreographer = mainChoreographer;
+        mActivityTaskManager = mContext.getSystemService(ActivityTaskManager.class);
+        mTaskOrganizer = taskOrganizer;
+        mDisplayController = displayController;
+        mSyncQueue = syncQueue;
+    }
+
+    @Override
+    public void setFreeformTaskTransitionStarter(FreeformTaskTransitionStarter transitionStarter) {
+        mTransitionStarter = transitionStarter;
+    }
+
+    @Override
+    public CaptionWindowDecoration createWindowDecoration(
+            ActivityManager.RunningTaskInfo taskInfo,
+            SurfaceControl taskSurface,
+            SurfaceControl.Transaction startT,
+            SurfaceControl.Transaction finishT) {
+        final CaptionWindowDecoration windowDecoration = new CaptionWindowDecoration(
+                mContext,
+                mDisplayController,
+                mTaskOrganizer,
+                taskInfo,
+                taskSurface,
+                mMainHandler,
+                mMainChoreographer,
+                mSyncQueue);
+        TaskPositioner taskPositioner = new TaskPositioner(mTaskOrganizer, windowDecoration);
+        CaptionTouchEventListener touchEventListener =
+                new CaptionTouchEventListener(taskInfo, taskPositioner);
+        windowDecoration.setCaptionListeners(touchEventListener, touchEventListener);
+        windowDecoration.setDragResizeCallback(taskPositioner);
+        setupWindowDecorationForTransition(taskInfo, startT, finishT, windowDecoration);
+        setupCaptionColor(taskInfo, windowDecoration);
+        return windowDecoration;
+    }
+
+    @Override
+    public CaptionWindowDecoration adoptWindowDecoration(AutoCloseable windowDecor) {
+        return (windowDecor instanceof CaptionWindowDecoration)
+                ? (CaptionWindowDecoration) windowDecor
+                : null;
+    }
+
+    @Override
+    public void onTaskInfoChanged(RunningTaskInfo taskInfo, CaptionWindowDecoration decoration) {
+        decoration.relayout(taskInfo);
+
+        setupCaptionColor(taskInfo, decoration);
+    }
+
+    private void setupCaptionColor(RunningTaskInfo taskInfo, CaptionWindowDecoration decoration) {
+        int statusBarColor = taskInfo.taskDescription.getStatusBarColor();
+        decoration.setCaptionColor(statusBarColor);
+    }
+
+    @Override
+    public void setupWindowDecorationForTransition(
+            RunningTaskInfo taskInfo,
+            SurfaceControl.Transaction startT,
+            SurfaceControl.Transaction finishT,
+            CaptionWindowDecoration decoration) {
+        decoration.relayout(taskInfo, startT, finishT);
+    }
+
+    private class CaptionTouchEventListener implements
+            View.OnClickListener, View.OnTouchListener {
+
+        private final int mTaskId;
+        private final WindowContainerToken mTaskToken;
+        private final DragResizeCallback mDragResizeCallback;
+
+        private int mDragPointerId = -1;
+
+        private CaptionTouchEventListener(
+                RunningTaskInfo taskInfo,
+                DragResizeCallback dragResizeCallback) {
+            mTaskId = taskInfo.taskId;
+            mTaskToken = taskInfo.token;
+            mDragResizeCallback = dragResizeCallback;
+        }
+
+        @Override
+        public void onClick(View v) {
+            final int id = v.getId();
+            if (id == R.id.close_window) {
+                mActivityTaskManager.removeTask(mTaskId);
+            } else if (id == R.id.maximize_window) {
+                WindowContainerTransaction wct = new WindowContainerTransaction();
+                RunningTaskInfo taskInfo = mTaskOrganizer.getRunningTaskInfo(mTaskId);
+                int targetWindowingMode = taskInfo.getWindowingMode() != WINDOWING_MODE_FULLSCREEN
+                        ? WINDOWING_MODE_FULLSCREEN : WINDOWING_MODE_FREEFORM;
+                int displayWindowingMode =
+                        taskInfo.configuration.windowConfiguration.getDisplayWindowingMode();
+                wct.setWindowingMode(mTaskToken,
+                        targetWindowingMode == displayWindowingMode
+                            ? WINDOWING_MODE_UNDEFINED : targetWindowingMode);
+                if (targetWindowingMode == WINDOWING_MODE_FULLSCREEN) {
+                    wct.setBounds(mTaskToken, null);
+                }
+                if (Transitions.ENABLE_SHELL_TRANSITIONS) {
+                    mTransitionStarter.startWindowingModeTransition(targetWindowingMode, wct);
+                } else {
+                    mSyncQueue.queue(wct);
+                }
+            }
+        }
+
+        @Override
+        public boolean onTouch(View v, MotionEvent e) {
+            if (v.getId() != R.id.caption) {
+                return false;
+            }
+            handleEventForMove(e);
+
+            if (e.getAction() != MotionEvent.ACTION_DOWN) {
+                return false;
+            }
+            RunningTaskInfo taskInfo = mTaskOrganizer.getRunningTaskInfo(mTaskId);
+            if (taskInfo.isFocused) {
+                return false;
+            }
+            WindowContainerTransaction wct = new WindowContainerTransaction();
+            wct.reorder(mTaskToken, true /* onTop */);
+            mSyncQueue.queue(wct);
+            return true;
+        }
+
+        private void handleEventForMove(MotionEvent e) {
+            switch (e.getActionMasked()) {
+                case MotionEvent.ACTION_DOWN:
+                    mDragPointerId  = e.getPointerId(0);
+                    mDragResizeCallback.onDragResizeStart(
+                            0 /* ctrlType */, e.getRawX(0), e.getRawY(0));
+                    break;
+                case MotionEvent.ACTION_MOVE: {
+                    int dragPointerIdx = e.findPointerIndex(mDragPointerId);
+                    mDragResizeCallback.onDragResizeMove(
+                            e.getRawX(dragPointerIdx), e.getRawY(dragPointerIdx));
+                    break;
+                }
+                case MotionEvent.ACTION_UP:
+                case MotionEvent.ACTION_CANCEL: {
+                    int dragPointerIdx = e.findPointerIndex(mDragPointerId);
+                    mDragResizeCallback.onDragResizeEnd(
+                            e.getRawX(dragPointerIdx), e.getRawY(dragPointerIdx));
+                    break;
+                }
+            }
+        }
+    }
+}
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
new file mode 100644
index 0000000..dc212fc
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java
@@ -0,0 +1,209 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.windowdecor;
+
+import android.app.ActivityManager;
+import android.app.WindowConfiguration;
+import android.content.Context;
+import android.content.res.ColorStateList;
+import android.graphics.Color;
+import android.graphics.Rect;
+import android.graphics.drawable.GradientDrawable;
+import android.graphics.drawable.VectorDrawable;
+import android.os.Handler;
+import android.view.Choreographer;
+import android.view.SurfaceControl;
+import android.view.View;
+import android.window.WindowContainerTransaction;
+
+import com.android.wm.shell.R;
+import com.android.wm.shell.ShellTaskOrganizer;
+import com.android.wm.shell.common.DisplayController;
+import com.android.wm.shell.common.SyncTransactionQueue;
+
+/**
+ * Defines visuals and behaviors of a window decoration of a caption bar and shadows. It works with
+ * {@link CaptionWindowDecorViewModel}. The caption bar contains maximize and close buttons.
+ *
+ * {@link CaptionWindowDecorViewModel} can change the color of the caption bar based on the foremost
+ * app's request through {@link #setCaptionColor(int)}, in which it changes the foreground color of
+ * caption buttons according to the luminance of the background.
+ *
+ * The shadow's thickness is 20dp when the window is in focus and 5dp when the window isn't.
+ */
+public class CaptionWindowDecoration extends WindowDecoration<WindowDecorLinearLayout> {
+    // The thickness of shadows of a window that has focus in DIP.
+    private static final int DECOR_SHADOW_FOCUSED_THICKNESS_IN_DIP = 20;
+    // The thickness of shadows of a window that doesn't have focus in DIP.
+    private static final int DECOR_SHADOW_UNFOCUSED_THICKNESS_IN_DIP = 5;
+
+    // Height of button (32dp)  + 2 * margin (5dp each)
+    private static final int DECOR_CAPTION_HEIGHT_IN_DIP = 42;
+    private static final int RESIZE_HANDLE_IN_DIP = 30;
+
+    private static final Rect EMPTY_OUTSET = new Rect();
+    private static final Rect RESIZE_HANDLE_OUTSET = new Rect(
+            RESIZE_HANDLE_IN_DIP, RESIZE_HANDLE_IN_DIP, RESIZE_HANDLE_IN_DIP, RESIZE_HANDLE_IN_DIP);
+
+    private final Handler mHandler;
+    private final Choreographer mChoreographer;
+    private final SyncTransactionQueue mSyncQueue;
+
+    private View.OnClickListener mOnCaptionButtonClickListener;
+    private View.OnTouchListener mOnCaptionTouchListener;
+    private DragResizeCallback mDragResizeCallback;
+
+    private DragResizeInputListener mDragResizeListener;
+
+    private final WindowDecoration.RelayoutResult<WindowDecorLinearLayout> mResult =
+            new WindowDecoration.RelayoutResult<>();
+
+    CaptionWindowDecoration(
+            Context context,
+            DisplayController displayController,
+            ShellTaskOrganizer taskOrganizer,
+            ActivityManager.RunningTaskInfo taskInfo,
+            SurfaceControl taskSurface,
+            Handler handler,
+            Choreographer choreographer,
+            SyncTransactionQueue syncQueue) {
+        super(context, displayController, taskOrganizer, taskInfo, taskSurface);
+
+        mHandler = handler;
+        mChoreographer = choreographer;
+        mSyncQueue = syncQueue;
+    }
+
+    void setCaptionListeners(
+            View.OnClickListener onCaptionButtonClickListener,
+            View.OnTouchListener onCaptionTouchListener) {
+        mOnCaptionButtonClickListener = onCaptionButtonClickListener;
+        mOnCaptionTouchListener = onCaptionTouchListener;
+    }
+
+    void setDragResizeCallback(DragResizeCallback dragResizeCallback) {
+        mDragResizeCallback = dragResizeCallback;
+    }
+
+    @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();
+        });
+    }
+
+    void relayout(ActivityManager.RunningTaskInfo taskInfo,
+            SurfaceControl.Transaction startT, SurfaceControl.Transaction finishT) {
+        final int shadowRadiusDp = taskInfo.isFocused
+                ? DECOR_SHADOW_FOCUSED_THICKNESS_IN_DIP : DECOR_SHADOW_UNFOCUSED_THICKNESS_IN_DIP;
+        final boolean isFreeform = mTaskInfo.configuration.windowConfiguration.getWindowingMode()
+                == WindowConfiguration.WINDOWING_MODE_FREEFORM;
+        final boolean isDragResizeable = isFreeform && mTaskInfo.isResizeable;
+        final Rect outset = isDragResizeable ? RESIZE_HANDLE_OUTSET : EMPTY_OUTSET;
+
+        WindowDecorLinearLayout oldRootView = mResult.mRootView;
+        final SurfaceControl oldDecorationSurface = mDecorationContainerSurface;
+        final WindowContainerTransaction wct = new WindowContainerTransaction();
+        relayout(taskInfo, R.layout.caption_window_decoration, oldRootView,
+                DECOR_CAPTION_HEIGHT_IN_DIP, outset, shadowRadiusDp, startT, finishT, wct, mResult);
+        taskInfo = null; // Clear it just in case we use it accidentally
+
+        mTaskOrganizer.applyTransaction(wct);
+
+        if (mResult.mRootView == null) {
+            // This means something blocks the window decor from showing, e.g. the task is hidden.
+            // Nothing is set up in this case including the decoration surface.
+            return;
+        }
+        if (oldRootView != mResult.mRootView) {
+            setupRootView();
+        }
+
+        if (!isDragResizeable) {
+            closeDragResizeListener();
+            return;
+        }
+
+        if (oldDecorationSurface != mDecorationContainerSurface) {
+            closeDragResizeListener();
+            mDragResizeListener = new DragResizeInputListener(
+                    mContext,
+                    mHandler,
+                    mChoreographer,
+                    mDisplay.getDisplayId(),
+                    mDecorationContainerSurface,
+                    mDragResizeCallback);
+        }
+
+        mDragResizeListener.setGeometry(
+                mResult.mWidth, mResult.mHeight, (int) (mResult.mDensity * RESIZE_HANDLE_IN_DIP));
+    }
+
+    /**
+     * Sets up listeners when a new root view is created.
+     */
+    private void setupRootView() {
+        View caption = mResult.mRootView.findViewById(R.id.caption);
+
+        caption.setOnTouchListener(mOnCaptionTouchListener);
+        View maximize = caption.findViewById(R.id.maximize_window);
+        maximize.setOnClickListener(mOnCaptionButtonClickListener);
+        View close = caption.findViewById(R.id.close_window);
+        close.setOnClickListener(mOnCaptionButtonClickListener);
+    }
+
+    void setCaptionColor(int captionColor) {
+        if (mResult.mRootView == null) {
+            return;
+        }
+
+        View caption = mResult.mRootView.findViewById(R.id.caption);
+        GradientDrawable captionDrawable = (GradientDrawable) caption.getBackground();
+        captionDrawable.setColor(captionColor);
+
+        int buttonTintColorRes =
+                Color.valueOf(captionColor).luminance() < 0.5
+                        ? R.color.decor_button_light_color
+                        : R.color.decor_button_dark_color;
+        ColorStateList buttonTintColor =
+                caption.getResources().getColorStateList(buttonTintColorRes, null /* theme */);
+        View maximize = caption.findViewById(R.id.maximize_window);
+        VectorDrawable maximizeBackground = (VectorDrawable) maximize.getBackground();
+        maximizeBackground.setTintList(buttonTintColor);
+
+        View close = caption.findViewById(R.id.close_window);
+        VectorDrawable closeBackground = (VectorDrawable) close.getBackground();
+        closeBackground.setTintList(buttonTintColor);
+    }
+
+    private void closeDragResizeListener() {
+        if (mDragResizeListener == null) {
+            return;
+        }
+        mDragResizeListener.close();
+        mDragResizeListener = null;
+    }
+
+    @Override
+    public void close() {
+        closeDragResizeListener();
+        super.close();
+    }
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DragResizeCallback.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DragResizeCallback.java
new file mode 100644
index 0000000..ee160a1
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DragResizeCallback.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.windowdecor;
+
+/**
+ * Callback called when receiving drag-resize or drag-move related input events.
+ */
+public interface DragResizeCallback {
+    /**
+     * Called when a drag resize starts.
+     *
+     * @param ctrlType {@link TaskPositioner.CtrlType} indicating the direction of resizing, use
+     *                 {@code 0} to indicate it's a move
+     * @param x x coordinate in window decoration coordinate system where the drag resize starts
+     * @param y y coordinate in window decoration coordinate system where the drag resize starts
+     */
+    void onDragResizeStart(@TaskPositioner.CtrlType int ctrlType, float x, float y);
+
+    /**
+     * Called when the pointer moves during a drag resize.
+     * @param x x coordinate in window decoration coordinate system of the new pointer location
+     * @param y y coordinate in window decoration coordinate system of the new pointer location
+     */
+    void onDragResizeMove(float x, float y);
+
+    /**
+     * Called when a drag resize stops.
+     * @param x x coordinate in window decoration coordinate system where the drag resize stops
+     * @param y y coordinate in window decoration coordinate system where the drag resize stops
+     */
+    void onDragResizeEnd(float x, float y);
+}
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
new file mode 100644
index 0000000..f512b0d
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DragResizeInputListener.java
@@ -0,0 +1,296 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.windowdecor;
+
+import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
+import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY;
+import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
+
+import android.content.Context;
+import android.graphics.Rect;
+import android.graphics.Region;
+import android.hardware.input.InputManager;
+import android.os.Binder;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.view.Choreographer;
+import android.view.IWindowSession;
+import android.view.InputChannel;
+import android.view.InputEvent;
+import android.view.InputEventReceiver;
+import android.view.MotionEvent;
+import android.view.PointerIcon;
+import android.view.SurfaceControl;
+import android.view.WindowManagerGlobal;
+
+import com.android.internal.view.BaseIWindow;
+
+/**
+ * An input event listener registered to InputDispatcher to receive input events on task edges and
+ * convert them to drag resize requests.
+ */
+class DragResizeInputListener implements AutoCloseable {
+    private static final String TAG = "DragResizeInputListener";
+
+    private final IWindowSession mWindowSession = WindowManagerGlobal.getWindowSession();
+    private final Handler mHandler;
+    private final Choreographer mChoreographer;
+    private final InputManager mInputManager;
+
+    private final int mDisplayId;
+    private final BaseIWindow mFakeWindow;
+    private final IBinder mFocusGrantToken;
+    private final SurfaceControl mDecorationSurface;
+    private final InputChannel mInputChannel;
+    private final TaskResizeInputEventReceiver mInputEventReceiver;
+    private final com.android.wm.shell.windowdecor.DragResizeCallback mCallback;
+
+    private int mWidth;
+    private int mHeight;
+    private int mResizeHandleThickness;
+
+    private int mDragPointerId = -1;
+
+    DragResizeInputListener(
+            Context context,
+            Handler handler,
+            Choreographer choreographer,
+            int displayId,
+            SurfaceControl decorationSurface,
+            DragResizeCallback callback) {
+        mInputManager = context.getSystemService(InputManager.class);
+        mHandler = handler;
+        mChoreographer = choreographer;
+        mDisplayId = displayId;
+        mDecorationSurface = decorationSurface;
+        // Use a fake window as the backing surface is a container layer and we don't want to create
+        // a buffer layer for it so we can't use ViewRootImpl.
+        mFakeWindow = new BaseIWindow();
+        mFakeWindow.setSession(mWindowSession);
+        mFocusGrantToken = new Binder();
+        mInputChannel = new InputChannel();
+        try {
+            mWindowSession.grantInputChannel(
+                    mDisplayId,
+                    new SurfaceControl(mDecorationSurface, TAG),
+                    mFakeWindow,
+                    null /* hostInputToken */,
+                    FLAG_NOT_FOCUSABLE,
+                    PRIVATE_FLAG_TRUSTED_OVERLAY,
+                    TYPE_APPLICATION,
+                    mFocusGrantToken,
+                    TAG + " of " + decorationSurface.toString(),
+                    mInputChannel);
+        } catch (RemoteException e) {
+            e.rethrowFromSystemServer();
+        }
+
+        mInputEventReceiver = new TaskResizeInputEventReceiver(
+                mInputChannel, mHandler, mChoreographer);
+        mCallback = callback;
+    }
+
+    /**
+     * Updates geometry of this drag resize handler. Needs to be called every time there is a size
+     * change to notify the input event receiver it's ready to take the next input event. Otherwise
+     * it'll keep batching move events and the drag resize process is stalled.
+     *
+     * This is also used to update the touch regions of this handler every event dispatched here is
+     * a potential resize request.
+     *
+     * @param width The width of the drag resize handler in pixels, including resize handle
+     *              thickness. That is task width + 2 * resize handle thickness.
+     * @param height The height of the drag resize handler in pixels, including resize handle
+     *               thickness. That is task height + 2 * resize handle thickness.
+     * @param resizeHandleThickness The thickness of the resize handle in pixels.
+     */
+    void setGeometry(int width, int height, int resizeHandleThickness) {
+        if (mWidth == width && mHeight == height
+                && mResizeHandleThickness == resizeHandleThickness) {
+            return;
+        }
+
+        mWidth = width;
+        mHeight = height;
+        mResizeHandleThickness = resizeHandleThickness;
+
+        Region touchRegion = new Region();
+        final Rect topInputBounds = new Rect(0, 0, mWidth, mResizeHandleThickness);
+        touchRegion.union(topInputBounds);
+
+        final Rect leftInputBounds = new Rect(0, mResizeHandleThickness,
+                mResizeHandleThickness, mHeight - mResizeHandleThickness);
+        touchRegion.union(leftInputBounds);
+
+        final Rect rightInputBounds = new Rect(
+                mWidth - mResizeHandleThickness, mResizeHandleThickness,
+                mWidth, mHeight - mResizeHandleThickness);
+        touchRegion.union(rightInputBounds);
+
+        final Rect bottomInputBounds = new Rect(0, mHeight - mResizeHandleThickness,
+                mWidth, mHeight);
+        touchRegion.union(bottomInputBounds);
+
+        try {
+            mWindowSession.updateInputChannel(
+                    mInputChannel.getToken(),
+                    mDisplayId,
+                    new SurfaceControl(
+                            mDecorationSurface, "DragResizeInputListener#setTouchRegion"),
+                    FLAG_NOT_FOCUSABLE,
+                    PRIVATE_FLAG_TRUSTED_OVERLAY,
+                    touchRegion);
+        } catch (RemoteException e) {
+            e.rethrowFromSystemServer();
+        }
+    }
+
+    @Override
+    public void close() {
+        mInputChannel.dispose();
+        try {
+            mWindowSession.remove(mFakeWindow);
+        } catch (RemoteException e) {
+            e.rethrowFromSystemServer();
+        }
+    }
+
+    private class TaskResizeInputEventReceiver extends InputEventReceiver {
+        private final Choreographer mChoreographer;
+        private final Runnable mConsumeBatchEventRunnable;
+        private boolean mConsumeBatchEventScheduled;
+
+        private TaskResizeInputEventReceiver(
+                InputChannel inputChannel, Handler handler, Choreographer choreographer) {
+            super(inputChannel, handler.getLooper());
+            mChoreographer = choreographer;
+
+            mConsumeBatchEventRunnable = () -> {
+                mConsumeBatchEventScheduled = false;
+                if (consumeBatchedInputEvents(mChoreographer.getFrameTimeNanos())) {
+                    // If we consumed a batch here, we want to go ahead and schedule the
+                    // consumption of batched input events on the next frame. Otherwise, we would
+                    // wait until we have more input events pending and might get starved by other
+                    // things occurring in the process.
+                    scheduleConsumeBatchEvent();
+                }
+            };
+        }
+
+        @Override
+        public void onBatchedInputEventPending(int source) {
+            scheduleConsumeBatchEvent();
+        }
+
+        private void scheduleConsumeBatchEvent() {
+            if (mConsumeBatchEventScheduled) {
+                return;
+            }
+            mChoreographer.postCallback(
+                    Choreographer.CALLBACK_INPUT, mConsumeBatchEventRunnable, null);
+            mConsumeBatchEventScheduled = true;
+        }
+
+        @Override
+        public void onInputEvent(InputEvent inputEvent) {
+            finishInputEvent(inputEvent, handleInputEvent(inputEvent));
+        }
+
+        private boolean handleInputEvent(InputEvent inputEvent) {
+            if (!(inputEvent instanceof MotionEvent)) {
+                return false;
+            }
+
+            MotionEvent e = (MotionEvent) inputEvent;
+            switch (e.getActionMasked()) {
+                case MotionEvent.ACTION_DOWN: {
+                    mDragPointerId = e.getPointerId(0);
+                    mCallback.onDragResizeStart(
+                            calculateCtrlType(e.getX(0), e.getY(0)), e.getRawX(0), e.getRawY(0));
+                    break;
+                }
+                case MotionEvent.ACTION_MOVE: {
+                    int dragPointerIndex = e.findPointerIndex(mDragPointerId);
+                    mCallback.onDragResizeMove(
+                            e.getRawX(dragPointerIndex), e.getRawY(dragPointerIndex));
+                    break;
+                }
+                case MotionEvent.ACTION_UP:
+                case MotionEvent.ACTION_CANCEL: {
+                    int dragPointerIndex = e.findPointerIndex(mDragPointerId);
+                    mCallback.onDragResizeEnd(
+                            e.getRawX(dragPointerIndex), e.getRawY(dragPointerIndex));
+                    mDragPointerId = -1;
+                    break;
+                }
+                case MotionEvent.ACTION_HOVER_ENTER:
+                case MotionEvent.ACTION_HOVER_MOVE: {
+                    updateCursorType(e.getXCursorPosition(), e.getYCursorPosition());
+                    break;
+                }
+                case MotionEvent.ACTION_HOVER_EXIT:
+                    mInputManager.setPointerIconType(PointerIcon.TYPE_DEFAULT);
+                    break;
+            }
+            return true;
+        }
+
+        @TaskPositioner.CtrlType
+        private int calculateCtrlType(float x, float y) {
+            int ctrlType = 0;
+            if (x < mResizeHandleThickness) {
+                ctrlType |= TaskPositioner.CTRL_TYPE_LEFT;
+            }
+            if (x > mWidth - mResizeHandleThickness) {
+                ctrlType |= TaskPositioner.CTRL_TYPE_RIGHT;
+            }
+            if (y < mResizeHandleThickness) {
+                ctrlType |= TaskPositioner.CTRL_TYPE_TOP;
+            }
+            if (y > mHeight - mResizeHandleThickness) {
+                ctrlType |= TaskPositioner.CTRL_TYPE_BOTTOM;
+            }
+            return ctrlType;
+        }
+
+        private void updateCursorType(float x, float y) {
+            @TaskPositioner.CtrlType int ctrlType = calculateCtrlType(x, y);
+
+            int cursorType = PointerIcon.TYPE_DEFAULT;
+            switch (ctrlType) {
+                case TaskPositioner.CTRL_TYPE_LEFT:
+                case TaskPositioner.CTRL_TYPE_RIGHT:
+                    cursorType = PointerIcon.TYPE_HORIZONTAL_DOUBLE_ARROW;
+                    break;
+                case TaskPositioner.CTRL_TYPE_TOP:
+                case TaskPositioner.CTRL_TYPE_BOTTOM:
+                    cursorType = PointerIcon.TYPE_VERTICAL_DOUBLE_ARROW;
+                    break;
+                case TaskPositioner.CTRL_TYPE_LEFT | TaskPositioner.CTRL_TYPE_TOP:
+                case TaskPositioner.CTRL_TYPE_RIGHT | TaskPositioner.CTRL_TYPE_BOTTOM:
+                    cursorType = PointerIcon.TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW;
+                    break;
+                case TaskPositioner.CTRL_TYPE_LEFT | TaskPositioner.CTRL_TYPE_BOTTOM:
+                case TaskPositioner.CTRL_TYPE_RIGHT | TaskPositioner.CTRL_TYPE_TOP:
+                    cursorType = PointerIcon.TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW;
+                    break;
+            }
+            mInputManager.setPointerIconType(cursorType);
+        }
+    }
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/TaskFocusStateConsumer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/TaskFocusStateConsumer.java
new file mode 100644
index 0000000..1c61802b
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/TaskFocusStateConsumer.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.windowdecor;
+
+interface TaskFocusStateConsumer {
+    void setTaskFocusState(boolean focused);
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/TaskPositioner.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/TaskPositioner.java
new file mode 100644
index 0000000..280569b
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/TaskPositioner.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.windowdecor;
+
+import android.annotation.IntDef;
+import android.graphics.PointF;
+import android.graphics.Rect;
+import android.window.WindowContainerTransaction;
+
+import com.android.wm.shell.ShellTaskOrganizer;
+
+class TaskPositioner implements DragResizeCallback {
+
+    @IntDef({CTRL_TYPE_LEFT, CTRL_TYPE_RIGHT, CTRL_TYPE_TOP, CTRL_TYPE_BOTTOM})
+    @interface CtrlType {}
+
+    static final int CTRL_TYPE_LEFT = 1;
+    static final int CTRL_TYPE_RIGHT = 2;
+    static final int CTRL_TYPE_TOP = 4;
+    static final int CTRL_TYPE_BOTTOM = 8;
+
+    private final ShellTaskOrganizer mTaskOrganizer;
+    private final WindowDecoration mWindowDecoration;
+
+    private final Rect mTaskBoundsAtDragStart = new Rect();
+    private final PointF mResizeStartPoint = new PointF();
+    private final Rect mResizeTaskBounds = new Rect();
+
+    private int mCtrlType;
+
+    TaskPositioner(ShellTaskOrganizer taskOrganizer, WindowDecoration windowDecoration) {
+        mTaskOrganizer = taskOrganizer;
+        mWindowDecoration = windowDecoration;
+    }
+
+    @Override
+    public void onDragResizeStart(int ctrlType, float x, float y) {
+        mCtrlType = ctrlType;
+
+        mTaskBoundsAtDragStart.set(
+                mWindowDecoration.mTaskInfo.configuration.windowConfiguration.getBounds());
+        mResizeStartPoint.set(x, y);
+    }
+
+    @Override
+    public void onDragResizeMove(float x, float y) {
+        changeBounds(x, y);
+    }
+
+    @Override
+    public void onDragResizeEnd(float x, float y) {
+        changeBounds(x, y);
+
+        mCtrlType = 0;
+        mTaskBoundsAtDragStart.setEmpty();
+        mResizeStartPoint.set(0, 0);
+    }
+
+    private void changeBounds(float x, float y) {
+        float deltaX = x - mResizeStartPoint.x;
+        mResizeTaskBounds.set(mTaskBoundsAtDragStart);
+        if ((mCtrlType & CTRL_TYPE_LEFT) != 0) {
+            mResizeTaskBounds.left += deltaX;
+        }
+        if ((mCtrlType & CTRL_TYPE_RIGHT) != 0) {
+            mResizeTaskBounds.right += deltaX;
+        }
+        float deltaY = y - mResizeStartPoint.y;
+        if ((mCtrlType & CTRL_TYPE_TOP) != 0) {
+            mResizeTaskBounds.top += deltaY;
+        }
+        if ((mCtrlType & CTRL_TYPE_BOTTOM) != 0) {
+            mResizeTaskBounds.bottom += deltaY;
+        }
+        if (mCtrlType == 0) {
+            mResizeTaskBounds.offset((int) deltaX, (int) deltaY);
+        }
+
+        if (!mResizeTaskBounds.isEmpty()) {
+            final WindowContainerTransaction wct = new WindowContainerTransaction();
+            wct.setBounds(mWindowDecoration.mTaskInfo.token, mResizeTaskBounds);
+            mTaskOrganizer.applyTransaction(wct);
+        }
+    }
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecorLinearLayout.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecorLinearLayout.java
new file mode 100644
index 0000000..6d8001a
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecorLinearLayout.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.windowdecor;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.LinearLayout;
+
+import androidx.annotation.Nullable;
+
+import com.android.wm.shell.R;
+
+/**
+ * A {@link LinearLayout} that takes an additional task focused drawable state. The new state is
+ * used to select the correct background color for views in the window decoration.
+ */
+public class WindowDecorLinearLayout extends LinearLayout implements TaskFocusStateConsumer {
+    private static final int[] TASK_FOCUSED_STATE = { R.attr.state_task_focused };
+
+    private boolean mIsTaskFocused;
+
+    public WindowDecorLinearLayout(Context context) {
+        super(context);
+    }
+
+    public WindowDecorLinearLayout(Context context,
+            @Nullable AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public WindowDecorLinearLayout(Context context, @Nullable AttributeSet attrs,
+            int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+    }
+
+    public WindowDecorLinearLayout(Context context, AttributeSet attrs, int defStyleAttr,
+            int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+    }
+
+    @Override
+    public void setTaskFocusState(boolean focused) {
+        mIsTaskFocused = focused;
+
+        refreshDrawableState();
+    }
+
+    @Override
+    protected int[] onCreateDrawableState(int extraSpace) {
+        if (!mIsTaskFocused) {
+            return super.onCreateDrawableState(extraSpace);
+        }
+
+        final int[] states = super.onCreateDrawableState(extraSpace + 1);
+        mergeDrawableStates(states, TASK_FOCUSED_STATE);
+        return states;
+    }
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecorViewModel.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecorViewModel.java
new file mode 100644
index 0000000..c234949
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecorViewModel.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.windowdecor;
+
+import android.app.ActivityManager;
+import android.view.SurfaceControl;
+
+import androidx.annotation.Nullable;
+
+import com.android.wm.shell.freeform.FreeformTaskTransitionStarter;
+
+/**
+ * The interface used by some {@link com.android.wm.shell.ShellTaskOrganizer.TaskListener} to help
+ * customize {@link WindowDecoration}. Its implementations are responsible to interpret user's
+ * interactions with UI widgets in window decorations and send corresponding requests to system
+ * servers.
+ *
+ * @param <T> The actual decoration type
+ */
+public interface WindowDecorViewModel<T extends AutoCloseable> {
+
+    /**
+     * Sets the transition starter that starts freeform task transitions.
+     *
+     * @param transitionStarter the transition starter that starts freeform task transitions
+     */
+    void setFreeformTaskTransitionStarter(FreeformTaskTransitionStarter transitionStarter);
+
+    /**
+     * Creates a window decoration for the given task.
+     *
+     * @param taskInfo the initial task info of the task
+     * @param taskSurface the surface of the task
+     * @param startT the start transaction to be applied before the transition
+     * @param finishT the finish transaction to restore states after the transition
+     * @return the window decoration object
+     */
+    T createWindowDecoration(
+            ActivityManager.RunningTaskInfo taskInfo,
+            SurfaceControl taskSurface,
+            SurfaceControl.Transaction startT,
+            SurfaceControl.Transaction finishT);
+
+    /**
+     * Adopts the window decoration if possible.
+     *
+     * @param windowDecor the potential window decoration to adopt
+     * @return the window decoration if it can be adopted, or {@code null} otherwise.
+     */
+    T adoptWindowDecoration(@Nullable AutoCloseable windowDecor);
+
+    /**
+     * Notifies a task info update on the given task, with the window decoration created previously
+     * for this task by {@link #createWindowDecoration}.
+     *
+     * @param taskInfo the new task info of the task
+     * @param windowDecoration the window decoration created for the task
+     */
+    void onTaskInfoChanged(ActivityManager.RunningTaskInfo taskInfo, T windowDecoration);
+
+    /**
+     * Notifies a transition is about to start about the given task to give the window decoration a
+     * chance to prepare for this transition.
+     *
+     * @param startT the start transaction to be applied before the transition
+     * @param finishT the finish transaction to restore states after the transition
+     * @param windowDecoration the window decoration created for the task
+     */
+    void setupWindowDecorationForTransition(
+            ActivityManager.RunningTaskInfo taskInfo,
+            SurfaceControl.Transaction startT,
+            SurfaceControl.Transaction finishT,
+            T windowDecoration);
+}
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
new file mode 100644
index 0000000..506a4c0
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java
@@ -0,0 +1,353 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.windowdecor;
+
+import android.app.ActivityManager.RunningTaskInfo;
+import android.content.Context;
+import android.content.res.Configuration;
+import android.graphics.Color;
+import android.graphics.PixelFormat;
+import android.graphics.Point;
+import android.graphics.Rect;
+import android.util.DisplayMetrics;
+import android.view.Display;
+import android.view.InsetsState;
+import android.view.LayoutInflater;
+import android.view.SurfaceControl;
+import android.view.SurfaceControlViewHost;
+import android.view.View;
+import android.view.ViewRootImpl;
+import android.view.WindowManager;
+import android.view.WindowlessWindowManager;
+import android.window.WindowContainerTransaction;
+
+import com.android.wm.shell.ShellTaskOrganizer;
+import com.android.wm.shell.common.DisplayController;
+
+import java.util.function.Supplier;
+
+/**
+ * Manages a container surface and a windowless window to show window decoration. Responsible to
+ * update window decoration window state and layout parameters on task info changes and so that
+ * window decoration is in correct state and bounds.
+ *
+ * The container surface is a child of the task display area in the same display, so that window
+ * decorations can be drawn out of the task bounds and receive input events from out of the task
+ * bounds to support drag resizing.
+ *
+ * The windowless window that hosts window decoration is positioned in front of all activities, to
+ * allow the foreground activity to draw its own background behind window decorations, such as
+ * the window captions.
+ *
+ * @param <T> The type of the root view
+ */
+public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
+        implements AutoCloseable {
+    private static final int[] CAPTION_INSETS_TYPES = { InsetsState.ITYPE_CAPTION_BAR };
+
+    /**
+     * System-wide context. Only used to create context with overridden configurations.
+     */
+    final Context mContext;
+    final DisplayController mDisplayController;
+    final ShellTaskOrganizer mTaskOrganizer;
+    final Supplier<SurfaceControl.Builder> mSurfaceControlBuilderSupplier;
+    final Supplier<WindowContainerTransaction> mWindowContainerTransactionSupplier;
+    final SurfaceControlViewHostFactory mSurfaceControlViewHostFactory;
+    private final DisplayController.OnDisplaysChangedListener mOnDisplaysChangedListener =
+            new DisplayController.OnDisplaysChangedListener() {
+                @Override
+                public void onDisplayAdded(int displayId) {
+                    if (mTaskInfo.displayId != displayId) {
+                        return;
+                    }
+
+                    mDisplayController.removeDisplayWindowListener(this);
+                    relayout(mTaskInfo);
+                }
+            };
+
+    RunningTaskInfo mTaskInfo;
+    final SurfaceControl mTaskSurface;
+
+    Display mDisplay;
+    Context mDecorWindowContext;
+    SurfaceControl mDecorationContainerSurface;
+    SurfaceControl mTaskBackgroundSurface;
+
+    private final CaptionWindowManager mCaptionWindowManager;
+    private SurfaceControlViewHost mViewHost;
+
+    private final Rect mCaptionInsetsRect = new Rect();
+    private final Rect mTaskSurfaceCrop = new Rect();
+    private final float[] mTmpColor = new float[3];
+
+    WindowDecoration(
+            Context context,
+            DisplayController displayController,
+            ShellTaskOrganizer taskOrganizer,
+            RunningTaskInfo taskInfo,
+            SurfaceControl taskSurface) {
+        this(context, displayController, taskOrganizer, taskInfo, taskSurface,
+                SurfaceControl.Builder::new, WindowContainerTransaction::new,
+                new SurfaceControlViewHostFactory() {});
+    }
+
+    WindowDecoration(
+            Context context,
+            DisplayController displayController,
+            ShellTaskOrganizer taskOrganizer,
+            RunningTaskInfo taskInfo,
+            SurfaceControl taskSurface,
+            Supplier<SurfaceControl.Builder> surfaceControlBuilderSupplier,
+            Supplier<WindowContainerTransaction> windowContainerTransactionSupplier,
+            SurfaceControlViewHostFactory surfaceControlViewHostFactory) {
+        mContext = context;
+        mDisplayController = displayController;
+        mTaskOrganizer = taskOrganizer;
+        mTaskInfo = taskInfo;
+        mTaskSurface = taskSurface;
+        mSurfaceControlBuilderSupplier = surfaceControlBuilderSupplier;
+        mWindowContainerTransactionSupplier = windowContainerTransactionSupplier;
+        mSurfaceControlViewHostFactory = surfaceControlViewHostFactory;
+
+        mDisplay = mDisplayController.getDisplay(mTaskInfo.displayId);
+        mDecorWindowContext = mContext.createConfigurationContext(mTaskInfo.getConfiguration());
+
+        // Put caption under task surface because ViewRootImpl sets the destination frame of
+        // windowless window layers and BLASTBufferQueue#update() doesn't support offset.
+        mCaptionWindowManager =
+                new CaptionWindowManager(mTaskInfo.getConfiguration(), mTaskSurface);
+    }
+
+    /**
+     * Used by {@link WindowDecoration} to trigger a new relayout because the requirements for a
+     * relayout weren't satisfied are satisfied now.
+     *
+     * @param taskInfo The previous {@link RunningTaskInfo} passed into {@link #relayout} or the
+     *                 constructor.
+     */
+    abstract void relayout(RunningTaskInfo taskInfo);
+
+    void relayout(RunningTaskInfo taskInfo, int layoutResId, T rootView, float captionHeightDp,
+            Rect outsetsDp, float shadowRadiusDp, SurfaceControl.Transaction startT,
+            SurfaceControl.Transaction finishT, WindowContainerTransaction wct,
+            RelayoutResult<T> outResult) {
+        outResult.reset();
+
+        final Configuration oldTaskConfig = mTaskInfo.getConfiguration();
+        if (taskInfo != null) {
+            mTaskInfo = taskInfo;
+        }
+
+        if (!mTaskInfo.isVisible) {
+            releaseViews();
+            finishT.hide(mTaskSurface);
+            return;
+        }
+
+        if (rootView == null && layoutResId == 0) {
+            throw new IllegalArgumentException("layoutResId and rootView can't both be invalid.");
+        }
+
+        outResult.mRootView = rootView;
+        rootView = null; // Clear it just in case we use it accidentally
+        final Configuration taskConfig = mTaskInfo.getConfiguration();
+        if (oldTaskConfig.densityDpi != taskConfig.densityDpi
+                || mDisplay == null
+                || mDisplay.getDisplayId() != mTaskInfo.displayId) {
+            releaseViews();
+
+            if (!obtainDisplayOrRegisterListener()) {
+                outResult.mRootView = null;
+                return;
+            }
+            mDecorWindowContext = mContext.createConfigurationContext(taskConfig);
+            if (layoutResId != 0) {
+                outResult.mRootView =
+                        (T) LayoutInflater.from(mDecorWindowContext).inflate(layoutResId, null);
+            }
+        }
+
+        if (outResult.mRootView == null) {
+            outResult.mRootView =
+                    (T) LayoutInflater.from(mDecorWindowContext).inflate(layoutResId, null);
+        }
+
+        // DecorationContainerSurface
+        if (mDecorationContainerSurface == null) {
+            final SurfaceControl.Builder builder = mSurfaceControlBuilderSupplier.get();
+            mDecorationContainerSurface = builder
+                    .setName("Decor container of Task=" + mTaskInfo.taskId)
+                    .setContainerLayer()
+                    .setParent(mTaskSurface)
+                    .build();
+
+            startT.setTrustedOverlay(mDecorationContainerSurface, true);
+        }
+
+        final Rect taskBounds = taskConfig.windowConfiguration.getBounds();
+        outResult.mDensity = taskConfig.densityDpi * DisplayMetrics.DENSITY_DEFAULT_SCALE;
+        final int decorContainerOffsetX = -(int) (outsetsDp.left * outResult.mDensity);
+        final int decorContainerOffsetY = -(int) (outsetsDp.top * outResult.mDensity);
+        outResult.mWidth = taskBounds.width()
+                + (int) (outsetsDp.right * outResult.mDensity)
+                - decorContainerOffsetX;
+        outResult.mHeight = taskBounds.height()
+                + (int) (outsetsDp.bottom * outResult.mDensity)
+                - decorContainerOffsetY;
+        startT.setPosition(
+                        mDecorationContainerSurface, decorContainerOffsetX, decorContainerOffsetY)
+                .setWindowCrop(mDecorationContainerSurface, outResult.mWidth, outResult.mHeight)
+                .setLayer(mDecorationContainerSurface, mTaskInfo.numActivities + 1)
+                .show(mDecorationContainerSurface);
+
+        // TaskBackgroundSurface
+        if (mTaskBackgroundSurface == null) {
+            final SurfaceControl.Builder builder = mSurfaceControlBuilderSupplier.get();
+            mTaskBackgroundSurface = builder
+                    .setName("Background of Task=" + mTaskInfo.taskId)
+                    .setEffectLayer()
+                    .setParent(mTaskSurface)
+                    .build();
+        }
+
+        float shadowRadius = outResult.mDensity * shadowRadiusDp;
+        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)
+                .setLayer(mTaskBackgroundSurface, -1)
+                .show(mTaskBackgroundSurface);
+
+        // Caption view
+        mCaptionWindowManager.setConfiguration(taskConfig);
+        final int captionHeight = (int) Math.ceil(captionHeightDp * outResult.mDensity);
+        final WindowManager.LayoutParams lp =
+                new WindowManager.LayoutParams(taskBounds.width(), captionHeight,
+                        WindowManager.LayoutParams.TYPE_APPLICATION,
+                        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSPARENT);
+        lp.setTitle("Caption of Task=" + mTaskInfo.taskId);
+        lp.setTrustedOverlay();
+        if (mViewHost == null) {
+            mViewHost = mSurfaceControlViewHostFactory.create(mDecorWindowContext, mDisplay,
+                    mCaptionWindowManager, true);
+            mViewHost.setView(outResult.mRootView, lp);
+        } else {
+            mViewHost.relayout(lp);
+        }
+
+        if (ViewRootImpl.CAPTION_ON_SHELL) {
+            outResult.mRootView.setTaskFocusState(mTaskInfo.isFocused);
+
+            // Caption insets
+            mCaptionInsetsRect.set(taskBounds);
+            mCaptionInsetsRect.bottom = mCaptionInsetsRect.top + captionHeight;
+            wct.addRectInsetsProvider(mTaskInfo.token, mCaptionInsetsRect, CAPTION_INSETS_TYPES);
+        } else {
+            outResult.mRootView.setVisibility(View.GONE);
+        }
+
+        // Task surface itself
+        Point taskPosition = mTaskInfo.positionInParent;
+        mTaskSurfaceCrop.set(
+                decorContainerOffsetX,
+                decorContainerOffsetY,
+                outResult.mWidth + decorContainerOffsetX,
+                outResult.mHeight + decorContainerOffsetY);
+        startT.show(mTaskSurface);
+        finishT.setPosition(mTaskSurface, taskPosition.x, taskPosition.y)
+                .setCrop(mTaskSurface, mTaskSurfaceCrop);
+    }
+
+    /**
+     * Obtains the {@link Display} instance for the display ID in {@link #mTaskInfo} if it exists or
+     * registers {@link #mOnDisplaysChangedListener} if it doesn't.
+     *
+     * @return {@code true} if the {@link Display} instance exists; or {@code false} otherwise
+     */
+    private boolean obtainDisplayOrRegisterListener() {
+        mDisplay = mDisplayController.getDisplay(mTaskInfo.displayId);
+        if (mDisplay == null) {
+            mDisplayController.addDisplayWindowListener(mOnDisplaysChangedListener);
+            return false;
+        }
+        return true;
+    }
+
+    private void releaseViews() {
+        if (mViewHost != null) {
+            mViewHost.release();
+            mViewHost = null;
+        }
+
+        if (mDecorationContainerSurface != null) {
+            mDecorationContainerSurface.release();
+            mDecorationContainerSurface = null;
+        }
+
+        if (mTaskBackgroundSurface != null) {
+            mTaskBackgroundSurface.release();
+            mTaskBackgroundSurface = null;
+        }
+
+        final WindowContainerTransaction wct = mWindowContainerTransactionSupplier.get();
+        wct.removeInsetsProvider(mTaskInfo.token, CAPTION_INSETS_TYPES);
+        mTaskOrganizer.applyTransaction(wct);
+    }
+
+    @Override
+    public void close() {
+        mDisplayController.removeDisplayWindowListener(mOnDisplaysChangedListener);
+        releaseViews();
+    }
+
+    static class RelayoutResult<T extends View & TaskFocusStateConsumer> {
+        int mWidth;
+        int mHeight;
+        float mDensity;
+        T mRootView;
+
+        void reset() {
+            mWidth = 0;
+            mHeight = 0;
+            mDensity = 0;
+            mRootView = null;
+        }
+    }
+
+    private static class CaptionWindowManager extends WindowlessWindowManager {
+        CaptionWindowManager(Configuration config, SurfaceControl rootSurface) {
+            super(config, rootSurface, null /* hostInputToken */);
+        }
+
+        @Override
+        public void setConfiguration(Configuration configuration) {
+            super.setConfiguration(configuration);
+        }
+    }
+
+    interface SurfaceControlViewHostFactory {
+        default SurfaceControlViewHost create(
+                Context c, Display d, WindowlessWindowManager wmm, boolean useSfChoreographer) {
+            return new SurfaceControlViewHost(c, d, wmm, useSfChoreographer);
+        }
+    }
+}
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 cb478c8..cba396a 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
@@ -43,6 +43,84 @@
     }
 }
 
+fun FlickerTestParameter.splitScreenDividerBecomesVisible() {
+    layerBecomesVisible(SPLIT_SCREEN_DIVIDER_COMPONENT)
+}
+
+fun FlickerTestParameter.layerBecomesVisible(
+    component: FlickerComponentName
+) {
+    assertLayers {
+        this.isInvisible(component)
+            .then()
+            .isVisible(component)
+    }
+}
+
+fun FlickerTestParameter.layerIsVisibleAtEnd(
+    component: FlickerComponentName
+) {
+    assertLayersEnd {
+        this.isVisible(component)
+    }
+}
+
+fun FlickerTestParameter.splitAppLayerBoundsBecomesVisible(
+    rotation: Int,
+    component: FlickerComponentName,
+    splitLeftTop: Boolean
+) {
+    assertLayers {
+        val dividerRegion = this.last().layer(SPLIT_SCREEN_DIVIDER_COMPONENT).visibleRegion.region
+        this.isInvisible(component)
+            .then()
+            .invoke("splitAppLayerBoundsBecomesVisible") {
+                it.visibleRegion(component).overlaps(
+                    if (splitLeftTop) {
+                        getSplitLeftTopRegion(dividerRegion, rotation)
+                    } else {
+                        getSplitRightBottomRegion(dividerRegion, rotation)
+                    }
+                )
+            }
+    }
+}
+
+fun FlickerTestParameter.splitAppLayerBoundsIsVisibleAtEnd(
+    rotation: Int,
+    component: FlickerComponentName,
+    splitLeftTop: Boolean
+) {
+    assertLayersEnd {
+        val dividerRegion = layer(SPLIT_SCREEN_DIVIDER_COMPONENT).visibleRegion.region
+        visibleRegion(component).overlaps(
+            if (splitLeftTop) {
+                getSplitLeftTopRegion(dividerRegion, rotation)
+            } else {
+                getSplitRightBottomRegion(dividerRegion, rotation)
+            }
+        )
+    }
+}
+
+fun FlickerTestParameter.appWindowBecomesVisible(
+    component: FlickerComponentName
+) {
+    assertWm {
+        this.isAppWindowInvisible(component)
+            .then()
+            .isAppWindowVisible(component)
+    }
+}
+
+fun FlickerTestParameter.appWindowIsVisibleAtEnd(
+    component: FlickerComponentName
+) {
+    assertWmEnd {
+        this.isAppWindowVisible(component)
+    }
+}
+
 fun FlickerTestParameter.dockedStackDividerIsVisibleAtEnd() {
     assertLayersEnd {
         this.isVisible(DOCKED_STACK_DIVIDER_COMPONENT)
@@ -118,21 +196,53 @@
 fun getPrimaryRegion(dividerRegion: Region, rotation: Int): Region {
     val displayBounds = WindowUtils.getDisplayBounds(rotation)
     return if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) {
-        Region.from(0, 0, displayBounds.bounds.right,
-            dividerRegion.bounds.top + WindowUtils.dockedStackDividerInset)
+        Region.from(
+            0, 0, displayBounds.bounds.right,
+            dividerRegion.bounds.top + WindowUtils.dockedStackDividerInset
+        )
     } else {
-        Region.from(0, 0, dividerRegion.bounds.left + WindowUtils.dockedStackDividerInset,
-            displayBounds.bounds.bottom)
+        Region.from(
+            0, 0, dividerRegion.bounds.left + WindowUtils.dockedStackDividerInset,
+            displayBounds.bounds.bottom
+        )
     }
 }
 
 fun getSecondaryRegion(dividerRegion: Region, rotation: Int): Region {
     val displayBounds = WindowUtils.getDisplayBounds(rotation)
     return if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) {
-        Region.from(0, dividerRegion.bounds.bottom - WindowUtils.dockedStackDividerInset,
-            displayBounds.bounds.right, displayBounds.bounds.bottom)
+        Region.from(
+            0, dividerRegion.bounds.bottom - WindowUtils.dockedStackDividerInset,
+            displayBounds.bounds.right, displayBounds.bounds.bottom
+        )
     } else {
-        Region.from(dividerRegion.bounds.right - WindowUtils.dockedStackDividerInset, 0,
-            displayBounds.bounds.right, displayBounds.bounds.bottom)
+        Region.from(
+            dividerRegion.bounds.right - WindowUtils.dockedStackDividerInset, 0,
+            displayBounds.bounds.right, displayBounds.bounds.bottom
+        )
     }
-}
\ No newline at end of file
+}
+
+fun getSplitLeftTopRegion(dividerRegion: Region, rotation: Int): Region {
+    val displayBounds = WindowUtils.getDisplayBounds(rotation)
+    return if (displayBounds.width > displayBounds.height) {
+        Region.from(0, 0, dividerRegion.bounds.left, displayBounds.bounds.bottom)
+    } else {
+        Region.from(0, 0, displayBounds.bounds.right, dividerRegion.bounds.top)
+    }
+}
+
+fun getSplitRightBottomRegion(dividerRegion: Region, rotation: Int): Region {
+    val displayBounds = WindowUtils.getDisplayBounds(rotation)
+    return if (displayBounds.width > displayBounds.height) {
+        Region.from(
+            dividerRegion.bounds.right, 0, displayBounds.bounds.right,
+            displayBounds.bounds.bottom
+        )
+    } else {
+        Region.from(
+            0, dividerRegion.bounds.bottom, displayBounds.bounds.right,
+            displayBounds.bounds.bottom
+        )
+    }
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/CommonConstants.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/CommonConstants.kt
index 40891f3..f56eb6e 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/CommonConstants.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/CommonConstants.kt
@@ -21,4 +21,5 @@
 
 const val SYSTEM_UI_PACKAGE_NAME = "com.android.systemui"
 val APP_PAIR_SPLIT_DIVIDER_COMPONENT = FlickerComponentName("", "AppPairSplitDivider#")
-val DOCKED_STACK_DIVIDER_COMPONENT = FlickerComponentName("", "DockedStackDivider#")
\ No newline at end of file
+val DOCKED_STACK_DIVIDER_COMPONENT = FlickerComponentName("", "DockedStackDivider#")
+val SPLIT_SCREEN_DIVIDER_COMPONENT = FlickerComponentName("", "StageCoordinatorSplitDivider#")
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTestCannotPairNonResizeableApps.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTestCannotPairNonResizeableApps.kt
deleted file mode 100644
index c9cab39..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTestCannotPairNonResizeableApps.kt
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.flicker.apppairs
-
-import androidx.test.filters.RequiresDevice
-import com.android.server.wm.flicker.FlickerParametersRunnerFactory
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.FlickerTestParameterFactory
-import com.android.server.wm.flicker.annotation.Group1
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.wm.shell.flicker.appPairsDividerIsInvisibleAtEnd
-import com.android.wm.shell.flicker.helpers.AppPairsHelper
-import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.resetMultiWindowConfig
-import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.setSupportsNonResizableMultiWindow
-import org.junit.After
-import org.junit.Before
-import org.junit.FixMethodOrder
-import org.junit.Ignore
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/**
- * Test cold launch app from launcher. When the device doesn't support non-resizable in multi window
- * {@link Settings.Global.DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW}, app pairs should not pair
- * non-resizable apps.
- *
- * To run this test: `atest WMShellFlickerTests:AppPairsTestCannotPairNonResizeableApps`
- */
-@RequiresDevice
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Group1
-class AppPairsTestCannotPairNonResizeableApps(
-    testSpec: FlickerTestParameter
-) : AppPairsTransition(testSpec) {
-
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            super.transition(this)
-            transitions {
-                nonResizeableApp?.launchViaIntent(wmHelper)
-                // TODO pair apps through normal UX flow
-                executeShellCommand(
-                    composePairsCommand(primaryTaskId, nonResizeableTaskId, pair = true))
-                nonResizeableApp?.run { wmHelper.waitForFullScreenApp(nonResizeableApp.component) }
-            }
-        }
-
-    @Before
-    override fun setup() {
-        super.setup()
-        setSupportsNonResizableMultiWindow(instrumentation, -1)
-    }
-
-    @After
-    override fun teardown() {
-        super.teardown()
-        resetMultiWindowConfig(instrumentation)
-    }
-
-    @Ignore
-    @Test
-    override fun navBarLayerRotatesAndScales() = super.navBarLayerRotatesAndScales()
-
-    @Ignore
-    @Test
-    override fun statusBarLayerRotatesScales() = super.statusBarLayerRotatesScales()
-
-    @Ignore
-    @Test
-    override fun navBarLayerIsVisible() = super.navBarLayerIsVisible()
-
-    @Ignore
-    @Test
-    fun appPairsDividerIsInvisibleAtEnd() = testSpec.appPairsDividerIsInvisibleAtEnd()
-
-    @Ignore
-    @Test
-    fun onlyResizeableAppWindowVisible() {
-        val nonResizeableApp = nonResizeableApp
-        require(nonResizeableApp != null) {
-            "Non resizeable app not initialized"
-        }
-        testSpec.assertWmEnd {
-            isAppWindowVisible(nonResizeableApp.component)
-            isAppWindowInvisible(primaryApp.component)
-        }
-    }
-
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): List<FlickerTestParameter> {
-            return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests(
-                repetitions = AppPairsHelper.TEST_REPETITIONS)
-        }
-    }
-}
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTestPairPrimaryAndSecondaryApps.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTestPairPrimaryAndSecondaryApps.kt
deleted file mode 100644
index 60c32c99..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTestPairPrimaryAndSecondaryApps.kt
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.flicker.apppairs
-
-import androidx.test.filters.RequiresDevice
-import com.android.server.wm.flicker.FlickerParametersRunnerFactory
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.FlickerTestParameterFactory
-import com.android.server.wm.flicker.annotation.Group1
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.wm.shell.flicker.APP_PAIR_SPLIT_DIVIDER_COMPONENT
-import com.android.wm.shell.flicker.appPairsDividerIsVisibleAtEnd
-import com.android.wm.shell.flicker.helpers.AppPairsHelper
-import com.android.wm.shell.flicker.helpers.AppPairsHelper.Companion.waitAppsShown
-import org.junit.FixMethodOrder
-import org.junit.Ignore
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/**
- * Test cold launch app from launcher.
- * To run this test: `atest WMShellFlickerTests:AppPairsTestPairPrimaryAndSecondaryApps`
- */
-@RequiresDevice
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Group1
-class AppPairsTestPairPrimaryAndSecondaryApps(
-    testSpec: FlickerTestParameter
-) : AppPairsTransition(testSpec) {
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            super.transition(this)
-            transitions {
-                // TODO pair apps through normal UX flow
-                executeShellCommand(
-                    composePairsCommand(primaryTaskId, secondaryTaskId, pair = true))
-                waitAppsShown(primaryApp, secondaryApp)
-            }
-        }
-
-    @Ignore
-    @Test
-    override fun navBarLayerIsVisible() = super.navBarLayerIsVisible()
-
-    @Ignore
-    @Test
-    override fun navBarLayerRotatesAndScales() = super.navBarLayerRotatesAndScales()
-
-    @Ignore
-    @Test
-    override fun statusBarLayerRotatesScales() = super.statusBarLayerRotatesScales()
-
-    @Ignore
-    @Test
-    fun appPairsDividerIsVisibleAtEnd() = testSpec.appPairsDividerIsVisibleAtEnd()
-
-    @Ignore
-    @Test
-    fun bothAppWindowsVisible() {
-        testSpec.assertWmEnd {
-            isAppWindowVisible(primaryApp.component)
-            isAppWindowVisible(secondaryApp.component)
-        }
-    }
-
-    @Ignore
-    @Test
-    fun appsEndingBounds() {
-        testSpec.assertLayersEnd {
-            val dividerRegion = layer(APP_PAIR_SPLIT_DIVIDER_COMPONENT).visibleRegion.region
-            visibleRegion(primaryApp.component)
-                .coversExactly(appPairsHelper.getPrimaryBounds(dividerRegion))
-            visibleRegion(secondaryApp.component)
-                .coversExactly(appPairsHelper.getSecondaryBounds(dividerRegion))
-        }
-    }
-
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): List<FlickerTestParameter> {
-            return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests(
-                repetitions = AppPairsHelper.TEST_REPETITIONS)
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTestSupportPairNonResizeableApps.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTestSupportPairNonResizeableApps.kt
deleted file mode 100644
index 24869a8..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTestSupportPairNonResizeableApps.kt
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.flicker.apppairs
-
-import android.view.Display
-import androidx.test.filters.RequiresDevice
-import com.android.server.wm.flicker.FlickerParametersRunnerFactory
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.FlickerTestParameterFactory
-import com.android.server.wm.flicker.annotation.Group1
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.traces.common.WindowManagerConditionsFactory
-import com.android.wm.shell.flicker.appPairsDividerIsVisibleAtEnd
-import com.android.wm.shell.flicker.helpers.AppPairsHelper
-import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.resetMultiWindowConfig
-import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.setSupportsNonResizableMultiWindow
-import org.junit.After
-import org.junit.Before
-import org.junit.FixMethodOrder
-import org.junit.Ignore
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/**
- * Test cold launch app from launcher. When the device supports non-resizable in multi window
- * {@link Settings.Global.DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW}, app pairs can pair
- * non-resizable apps.
- *
- * To run this test: `atest WMShellFlickerTests:AppPairsTestSupportPairNonResizeableApps`
- */
-@RequiresDevice
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Group1
-class AppPairsTestSupportPairNonResizeableApps(
-    testSpec: FlickerTestParameter
-) : AppPairsTransition(testSpec) {
-
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            super.transition(this)
-            transitions {
-                nonResizeableApp?.launchViaIntent(wmHelper)
-                // TODO pair apps through normal UX flow
-                executeShellCommand(
-                        composePairsCommand(primaryTaskId, nonResizeableTaskId, pair = true))
-                val waitConditions = mutableListOf(
-                    WindowManagerConditionsFactory.isWindowVisible(primaryApp.component),
-                    WindowManagerConditionsFactory.isLayerVisible(primaryApp.component),
-                    WindowManagerConditionsFactory.isAppTransitionIdle(Display.DEFAULT_DISPLAY))
-
-                nonResizeableApp?.let {
-                    waitConditions.add(
-                        WindowManagerConditionsFactory.isWindowVisible(nonResizeableApp.component))
-                    waitConditions.add(
-                        WindowManagerConditionsFactory.isLayerVisible(nonResizeableApp.component))
-                }
-                wmHelper.waitFor(*waitConditions.toTypedArray())
-            }
-        }
-
-    @Before
-    override fun setup() {
-        super.setup()
-        setSupportsNonResizableMultiWindow(instrumentation, 1)
-    }
-
-    @After
-    override fun teardown() {
-        super.teardown()
-        resetMultiWindowConfig(instrumentation)
-    }
-
-    @Ignore
-    @Test
-    override fun navBarLayerIsVisible() = super.navBarLayerIsVisible()
-
-    @Ignore
-    @Test
-    override fun navBarLayerRotatesAndScales() = super.navBarLayerRotatesAndScales()
-
-    @Ignore
-    @Test
-    override fun statusBarLayerRotatesScales() = super.statusBarLayerRotatesScales()
-
-    @Ignore
-    @Test
-    fun appPairsDividerIsVisibleAtEnd() = testSpec.appPairsDividerIsVisibleAtEnd()
-
-    @Ignore
-    @Test
-    fun bothAppWindowVisible() {
-        val nonResizeableApp = nonResizeableApp
-        require(nonResizeableApp != null) {
-            "Non resizeable app not initialized"
-        }
-        testSpec.assertWmEnd {
-            isAppWindowVisible(nonResizeableApp.component)
-            isAppWindowVisible(primaryApp.component)
-        }
-    }
-
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): List<FlickerTestParameter> {
-            return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests(
-                    repetitions = AppPairsHelper.TEST_REPETITIONS)
-        }
-    }
-}
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTestUnpairPrimaryAndSecondaryApps.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTestUnpairPrimaryAndSecondaryApps.kt
deleted file mode 100644
index 007415d..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTestUnpairPrimaryAndSecondaryApps.kt
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.flicker.apppairs
-
-import android.os.SystemClock
-import androidx.test.filters.RequiresDevice
-import com.android.server.wm.flicker.FlickerParametersRunnerFactory
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.FlickerTestParameterFactory
-import com.android.server.wm.flicker.annotation.Group1
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.wm.shell.flicker.APP_PAIR_SPLIT_DIVIDER_COMPONENT
-import com.android.wm.shell.flicker.appPairsDividerIsInvisibleAtEnd
-import com.android.wm.shell.flicker.helpers.AppPairsHelper
-import com.android.wm.shell.flicker.helpers.AppPairsHelper.Companion.waitAppsShown
-import org.junit.FixMethodOrder
-import org.junit.Ignore
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/**
- * Test cold launch app from launcher.
- * To run this test: `atest WMShellFlickerTests:AppPairsTestUnpairPrimaryAndSecondaryApps`
- */
-@RequiresDevice
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Group1
-class AppPairsTestUnpairPrimaryAndSecondaryApps(
-    testSpec: FlickerTestParameter
-) : AppPairsTransition(testSpec) {
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            super.transition(this)
-            setup {
-                eachRun {
-                    executeShellCommand(
-                            composePairsCommand(primaryTaskId, secondaryTaskId, pair = true))
-                    waitAppsShown(primaryApp, secondaryApp)
-                }
-            }
-            transitions {
-                // TODO pair apps through normal UX flow
-                executeShellCommand(
-                    composePairsCommand(primaryTaskId, secondaryTaskId, pair = false))
-                SystemClock.sleep(AppPairsHelper.TIMEOUT_MS)
-            }
-        }
-
-    @Ignore
-    @Test
-    override fun navBarLayerRotatesAndScales() = super.navBarLayerRotatesAndScales()
-
-    @Ignore
-    @Test
-    override fun statusBarLayerRotatesScales() = super.statusBarLayerRotatesScales()
-
-    @Ignore
-    @Test
-    fun appPairsDividerIsInvisibleAtEnd() = testSpec.appPairsDividerIsInvisibleAtEnd()
-
-    @Ignore
-    @Test
-    fun bothAppWindowsInvisible() {
-        testSpec.assertWmEnd {
-            isAppWindowInvisible(primaryApp.component)
-            isAppWindowInvisible(secondaryApp.component)
-        }
-    }
-
-    @Ignore
-    @Test
-    fun appsStartingBounds() {
-        testSpec.assertLayersStart {
-            val dividerRegion = layer(APP_PAIR_SPLIT_DIVIDER_COMPONENT).visibleRegion.region
-            visibleRegion(primaryApp.component)
-                .coversExactly(appPairsHelper.getPrimaryBounds(dividerRegion))
-            visibleRegion(secondaryApp.component)
-                .coversExactly(appPairsHelper.getSecondaryBounds(dividerRegion))
-        }
-    }
-
-    @Ignore
-    @Test
-    fun appsEndingBounds() {
-        testSpec.assertLayersEnd {
-            notContains(primaryApp.component)
-            notContains(secondaryApp.component)
-        }
-    }
-
-    @Ignore
-    @Test
-    override fun navBarLayerIsVisible() = super.navBarLayerIsVisible()
-
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): List<FlickerTestParameter> {
-            return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests(
-                repetitions = AppPairsHelper.TEST_REPETITIONS)
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTransition.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTransition.kt
deleted file mode 100644
index 3e17948b..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/AppPairsTransition.kt
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.flicker.apppairs
-
-import android.app.Instrumentation
-import android.content.Context
-import android.system.helpers.ActivityHelper
-import androidx.test.platform.app.InstrumentationRegistry
-import com.android.server.wm.flicker.FlickerBuilderProvider
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.helpers.setRotation
-import com.android.server.wm.flicker.helpers.wakeUpAndGoToHomeScreen
-import com.android.server.wm.flicker.navBarLayerIsVisible
-import com.android.server.wm.flicker.navBarLayerRotatesAndScales
-import com.android.server.wm.flicker.navBarWindowIsVisible
-import com.android.server.wm.flicker.statusBarLayerIsVisible
-import com.android.server.wm.flicker.statusBarLayerRotatesScales
-import com.android.server.wm.flicker.statusBarWindowIsVisible
-import com.android.server.wm.traces.parser.toFlickerComponent
-import com.android.wm.shell.flicker.helpers.AppPairsHelper
-import com.android.wm.shell.flicker.helpers.BaseAppHelper
-import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.getDevEnableNonResizableMultiWindow
-import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.setDevEnableNonResizableMultiWindow
-import com.android.wm.shell.flicker.helpers.SplitScreenHelper
-import com.android.wm.shell.flicker.testapp.Components
-import org.junit.After
-import org.junit.Before
-import org.junit.Ignore
-import org.junit.Test
-
-abstract class AppPairsTransition(protected val testSpec: FlickerTestParameter) {
-    protected val instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation()
-    protected val context: Context = instrumentation.context
-    protected val activityHelper = ActivityHelper.getInstance()
-    protected val appPairsHelper = AppPairsHelper(instrumentation,
-        Components.SplitScreenActivity.LABEL,
-        Components.SplitScreenActivity.COMPONENT.toFlickerComponent())
-
-    protected val primaryApp = SplitScreenHelper.getPrimary(instrumentation)
-    protected val secondaryApp = SplitScreenHelper.getSecondary(instrumentation)
-    protected open val nonResizeableApp: SplitScreenHelper? =
-        SplitScreenHelper.getNonResizeable(instrumentation)
-    protected var primaryTaskId = ""
-    protected var secondaryTaskId = ""
-    protected var nonResizeableTaskId = ""
-    private var prevDevEnableNonResizableMultiWindow = 0
-
-    @Before
-    open fun setup() {
-        prevDevEnableNonResizableMultiWindow = getDevEnableNonResizableMultiWindow(context)
-        if (prevDevEnableNonResizableMultiWindow != 0) {
-            // Turn off the development option
-            setDevEnableNonResizableMultiWindow(context, 0)
-        }
-    }
-
-    @After
-    open fun teardown() {
-        setDevEnableNonResizableMultiWindow(context, prevDevEnableNonResizableMultiWindow)
-    }
-
-    @FlickerBuilderProvider
-    fun buildFlicker(): FlickerBuilder {
-        return FlickerBuilder(instrumentation).apply {
-            transition(this)
-        }
-    }
-
-    internal open val transition: FlickerBuilder.() -> Unit
-        get() = {
-            setup {
-                test {
-                    device.wakeUpAndGoToHomeScreen()
-                }
-                eachRun {
-                    this.setRotation(testSpec.startRotation)
-                    primaryApp.launchViaIntent(wmHelper)
-                    secondaryApp.launchViaIntent(wmHelper)
-                    nonResizeableApp?.launchViaIntent(wmHelper)
-                    updateTasksId()
-                }
-            }
-            teardown {
-                eachRun {
-                    executeShellCommand(composePairsCommand(
-                        primaryTaskId, secondaryTaskId, pair = false))
-                    executeShellCommand(composePairsCommand(
-                        primaryTaskId, nonResizeableTaskId, pair = false))
-                    primaryApp.exit(wmHelper)
-                    secondaryApp.exit(wmHelper)
-                    nonResizeableApp?.exit(wmHelper)
-                }
-            }
-        }
-
-    protected fun updateTasksId() {
-        primaryTaskId = getTaskIdForActivity(
-            primaryApp.component.packageName, primaryApp.component.className).toString()
-        secondaryTaskId = getTaskIdForActivity(
-            secondaryApp.component.packageName, secondaryApp.component.className).toString()
-        val nonResizeableApp = nonResizeableApp
-        if (nonResizeableApp != null) {
-            nonResizeableTaskId = getTaskIdForActivity(
-                nonResizeableApp.component.packageName,
-                nonResizeableApp.component.className).toString()
-        }
-    }
-
-    private fun getTaskIdForActivity(pkgName: String, activityName: String): Int {
-        return activityHelper.getTaskIdForActivity(pkgName, activityName)
-    }
-
-    internal fun executeShellCommand(cmd: String) {
-        BaseAppHelper.executeShellCommand(instrumentation, cmd)
-    }
-
-    internal fun composePairsCommand(
-        primaryApp: String,
-        secondaryApp: String,
-        pair: Boolean
-    ): String = buildString {
-        // dumpsys activity service SystemUIService WMShell {pair|unpair} ${TASK_ID_1} ${TASK_ID_2}
-        append("dumpsys activity service SystemUIService WMShell ")
-        if (pair) {
-            append("pair ")
-        } else {
-            append("unpair ")
-        }
-        append("$primaryApp $secondaryApp")
-    }
-
-    @Ignore
-    @Test
-    open fun navBarLayerIsVisible() {
-        testSpec.navBarLayerIsVisible()
-    }
-
-    @Ignore
-    @Test
-    open fun statusBarLayerIsVisible() {
-        testSpec.statusBarLayerIsVisible()
-    }
-
-    @Ignore
-    @Test
-    open fun navBarWindowIsVisible() {
-        testSpec.navBarWindowIsVisible()
-    }
-
-    @Ignore
-    @Test
-    open fun statusBarWindowIsVisible() {
-        testSpec.statusBarWindowIsVisible()
-    }
-
-    @Ignore
-    @Test
-    open fun navBarLayerRotatesAndScales() = testSpec.navBarLayerRotatesAndScales()
-
-    @Ignore
-    @Test
-    open fun statusBarLayerRotatesScales() = testSpec.statusBarLayerRotatesScales()
-}
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/OWNERS b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/OWNERS
deleted file mode 100644
index 8446b37..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-# window manager > wm shell > Split Screen
-# Bug component: 928697
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/RotateTwoLaunchedAppsInAppPairsMode.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/RotateTwoLaunchedAppsInAppPairsMode.kt
deleted file mode 100644
index b0c3ba2..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/RotateTwoLaunchedAppsInAppPairsMode.kt
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.apppairs
-
-import android.view.Surface
-import androidx.test.filters.RequiresDevice
-import com.android.server.wm.flicker.FlickerParametersRunnerFactory
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.FlickerTestParameterFactory
-import com.android.server.wm.flicker.annotation.Group1
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.helpers.setRotation
-import com.android.wm.shell.flicker.appPairsDividerIsVisibleAtEnd
-import com.android.wm.shell.flicker.appPairsPrimaryBoundsIsVisibleAtEnd
-import com.android.wm.shell.flicker.appPairsSecondaryBoundsIsVisibleAtEnd
-import com.android.wm.shell.flicker.helpers.AppPairsHelper.Companion.waitAppsShown
-import com.android.wm.shell.flicker.helpers.SplitScreenHelper
-import org.junit.FixMethodOrder
-import org.junit.Ignore
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/**
- * Test open apps to app pairs and rotate.
- * To run this test: `atest WMShellFlickerTests:RotateTwoLaunchedAppsInAppPairsMode`
- */
-@RequiresDevice
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Group1
-class RotateTwoLaunchedAppsInAppPairsMode(
-    testSpec: FlickerTestParameter
-) : RotateTwoLaunchedAppsTransition(testSpec) {
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            super.transition(this)
-            transitions {
-                executeShellCommand(composePairsCommand(
-                    primaryTaskId, secondaryTaskId, true /* pair */))
-                waitAppsShown(primaryApp, secondaryApp)
-                setRotation(testSpec.endRotation)
-            }
-        }
-
-    @Ignore
-    @Test
-    override fun navBarLayerIsVisible() = super.navBarLayerIsVisible()
-
-    @Ignore
-    @Test
-    override fun statusBarLayerIsVisible() = super.statusBarLayerIsVisible()
-
-    @Ignore
-    @Test
-    fun bothAppWindowsVisible() {
-        testSpec.assertWmEnd {
-            isAppWindowVisible(primaryApp.component)
-            isAppWindowVisible(secondaryApp.component)
-        }
-    }
-
-    @Ignore
-    @Test
-    fun appPairsDividerIsVisibleAtEnd() = testSpec.appPairsDividerIsVisibleAtEnd()
-
-    @Ignore
-    @Test
-    fun appPairsPrimaryBoundsIsVisibleAtEnd() =
-        testSpec.appPairsPrimaryBoundsIsVisibleAtEnd(testSpec.endRotation,
-            primaryApp.component)
-
-    @Ignore
-    @Test
-    fun appPairsSecondaryBoundsIsVisibleAtEnd() =
-        testSpec.appPairsSecondaryBoundsIsVisibleAtEnd(testSpec.endRotation,
-            secondaryApp.component)
-
-    @Ignore
-    @Test
-    override fun statusBarLayerRotatesScales() = super.statusBarLayerRotatesScales()
-
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): Collection<FlickerTestParameter> {
-            return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests(
-                repetitions = SplitScreenHelper.TEST_REPETITIONS,
-                supportedRotations = listOf(Surface.ROTATION_90, Surface.ROTATION_270)
-            )
-        }
-    }
-}
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/RotateTwoLaunchedAppsRotateAndEnterAppPairsMode.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/RotateTwoLaunchedAppsRotateAndEnterAppPairsMode.kt
deleted file mode 100644
index ae56c77..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/RotateTwoLaunchedAppsRotateAndEnterAppPairsMode.kt
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.apppairs
-
-import android.view.Surface
-import androidx.test.filters.RequiresDevice
-import com.android.server.wm.flicker.FlickerParametersRunnerFactory
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.FlickerTestParameterFactory
-import com.android.server.wm.flicker.annotation.Group1
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.helpers.setRotation
-import com.android.wm.shell.flicker.appPairsDividerIsVisibleAtEnd
-import com.android.wm.shell.flicker.appPairsPrimaryBoundsIsVisibleAtEnd
-import com.android.wm.shell.flicker.appPairsSecondaryBoundsIsVisibleAtEnd
-import com.android.wm.shell.flicker.helpers.AppPairsHelper.Companion.waitAppsShown
-import com.android.wm.shell.flicker.helpers.SplitScreenHelper
-import org.junit.FixMethodOrder
-import org.junit.Ignore
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/**
- * Test open apps to app pairs and rotate.
- * To run this test: `atest WMShellFlickerTests:RotateTwoLaunchedAppsRotateAndEnterAppPairsMode`
- */
-@RequiresDevice
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Group1
-class RotateTwoLaunchedAppsRotateAndEnterAppPairsMode(
-    testSpec: FlickerTestParameter
-) : RotateTwoLaunchedAppsTransition(testSpec) {
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            super.transition(this)
-            transitions {
-                this.setRotation(testSpec.endRotation)
-                executeShellCommand(
-                    composePairsCommand(primaryTaskId, secondaryTaskId, pair = true))
-                waitAppsShown(primaryApp, secondaryApp)
-            }
-        }
-
-    @Ignore
-    @Test
-    fun appPairsDividerIsVisibleAtEnd() = testSpec.appPairsDividerIsVisibleAtEnd()
-
-    @Ignore
-    @Test
-    override fun navBarWindowIsVisible() = super.navBarWindowIsVisible()
-
-    @Ignore
-    @Test
-    override fun navBarLayerIsVisible() = super.navBarLayerIsVisible()
-
-    @Ignore
-    @Test
-    override fun statusBarWindowIsVisible() = super.statusBarWindowIsVisible()
-
-    @Ignore
-    @Test
-    override fun statusBarLayerIsVisible() = super.statusBarLayerIsVisible()
-
-    @Ignore
-    @Test
-    override fun statusBarLayerRotatesScales() = super.statusBarLayerRotatesScales()
-
-    @Ignore
-    @Test
-    fun bothAppWindowsVisible() {
-        testSpec.assertWmEnd {
-            isAppWindowVisible(primaryApp.component)
-            isAppWindowVisible(secondaryApp.component)
-        }
-    }
-
-    @Ignore
-    @Test
-    fun appPairsPrimaryBoundsIsVisibleAtEnd() =
-        testSpec.appPairsPrimaryBoundsIsVisibleAtEnd(testSpec.endRotation,
-            primaryApp.component)
-
-    @Ignore
-    @Test
-    fun appPairsSecondaryBoundsIsVisibleAtEnd() =
-        testSpec.appPairsSecondaryBoundsIsVisibleAtEnd(testSpec.endRotation,
-            secondaryApp.component)
-
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): Collection<FlickerTestParameter> {
-            return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests(
-                repetitions = SplitScreenHelper.TEST_REPETITIONS,
-                supportedRotations = listOf(Surface.ROTATION_90, Surface.ROTATION_270)
-            )
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/RotateTwoLaunchedAppsTransition.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/RotateTwoLaunchedAppsTransition.kt
deleted file mode 100644
index b1f1c9e5..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/apppairs/RotateTwoLaunchedAppsTransition.kt
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.apppairs
-
-import android.view.Surface
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.helpers.setRotation
-import com.android.server.wm.flicker.helpers.wakeUpAndGoToHomeScreen
-import com.android.wm.shell.flicker.helpers.BaseAppHelper.Companion.isShellTransitionsEnabled
-import com.android.wm.shell.flicker.helpers.SplitScreenHelper
-import org.junit.Assume.assumeFalse
-import org.junit.Before
-import org.junit.Ignore
-import org.junit.Test
-
-abstract class RotateTwoLaunchedAppsTransition(
-    testSpec: FlickerTestParameter
-) : AppPairsTransition(testSpec) {
-    override val nonResizeableApp: SplitScreenHelper?
-        get() = null
-
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            setup {
-                test {
-                    device.wakeUpAndGoToHomeScreen()
-                    this.setRotation(Surface.ROTATION_0)
-                    primaryApp.launchViaIntent(wmHelper)
-                    secondaryApp.launchViaIntent(wmHelper)
-                    updateTasksId()
-                }
-            }
-            teardown {
-                eachRun {
-                    executeShellCommand(composePairsCommand(
-                        primaryTaskId, secondaryTaskId, pair = false))
-                    primaryApp.exit(wmHelper)
-                    secondaryApp.exit(wmHelper)
-                }
-            }
-        }
-
-    @Before
-    override fun setup() {
-        // AppPairs hasn't been updated to Shell Transition. There will be conflict on rotation.
-        assumeFalse(isShellTransitionsEnabled())
-        super.setup()
-    }
-
-    @Ignore
-    @Test
-    override fun navBarLayerIsVisible() {
-        super.navBarLayerIsVisible()
-    }
-
-    @Ignore
-    @Test
-    override fun navBarLayerRotatesAndScales() {
-        super.navBarLayerRotatesAndScales()
-    }
-}
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/helpers/PipAppHelper.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/helpers/PipAppHelper.kt
index e9d438a..8157a4e 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/helpers/PipAppHelper.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/helpers/PipAppHelper.kt
@@ -39,7 +39,7 @@
 ) {
     private val mediaSessionManager: MediaSessionManager
         get() = context.getSystemService(MediaSessionManager::class.java)
-                ?: error("Could not get MediaSessionManager")
+            ?: error("Could not get MediaSessionManager")
 
     private val mediaController: MediaController?
         get() = mediaSessionManager.getActiveSessions(null).firstOrNull {
@@ -69,8 +69,10 @@
         action: String? = null,
         stringExtras: Map<String, String>
     ) {
-        launchViaIntentAndWaitShown(wmHelper, expectedWindowName, action, stringExtras,
-            waitConditions = arrayOf(WindowManagerStateHelper.pipShownCondition))
+        launchViaIntentAndWaitShown(
+            wmHelper, expectedWindowName, action, stringExtras,
+            waitConditions = arrayOf(WindowManagerStateHelper.pipShownCondition)
+        )
     }
 
     /**
@@ -85,7 +87,7 @@
         // from "the bottom".
         repeat(FOCUS_ATTEMPTS) {
             uiDevice.findObject(selector)?.apply { if (isFocusedOrHasFocusedChild) return true }
-                    ?: error("The object we try to focus on is gone.")
+                ?: error("The object we try to focus on is gone.")
 
             uiDevice.pressDPadDown()
             uiDevice.waitForIdle()
@@ -100,29 +102,39 @@
         // Wait on WMHelper or simply wait for 3 seconds
         wmHelper?.waitPipShown() ?: SystemClock.sleep(3_000)
         // when entering pip, the dismiss button is visible at the start. to ensure the pip
-        // animation is complete, wait until the pip dismiss button is no longer visible. 
+        // animation is complete, wait until the pip dismiss button is no longer visible.
         // b/176822698: dismiss-only state will be removed in the future
         uiDevice.wait(Until.gone(By.res(SYSTEMUI_PACKAGE, "dismiss")), FIND_TIMEOUT)
     }
 
+    fun enableEnterPipOnUserLeaveHint() {
+        clickObject(ENTER_PIP_ON_USER_LEAVE_HINT)
+    }
+
+    fun enableAutoEnterForPipActivity() {
+        clickObject(ENTER_PIP_AUTOENTER)
+    }
+
     fun clickStartMediaSessionButton() {
         clickObject(MEDIA_SESSION_START_RADIO_BUTTON_ID)
     }
 
     fun checkWithCustomActionsCheckbox() = uiDevice
-            .findObject(By.res(component.packageName, WITH_CUSTOM_ACTIONS_BUTTON_ID))
-                ?.takeIf { it.isCheckable }
-                ?.apply { if (!isChecked) clickObject(WITH_CUSTOM_ACTIONS_BUTTON_ID) }
-                ?: error("'With custom actions' checkbox not found")
+        .findObject(By.res(component.packageName, WITH_CUSTOM_ACTIONS_BUTTON_ID))
+        ?.takeIf { it.isCheckable }
+        ?.apply { if (!isChecked) clickObject(WITH_CUSTOM_ACTIONS_BUTTON_ID) }
+        ?: error("'With custom actions' checkbox not found")
 
     fun pauseMedia() = mediaController?.transportControls?.pause()
-            ?: error("No active media session found")
+        ?: error("No active media session found")
 
     fun stopMedia() = mediaController?.transportControls?.stop()
-            ?: error("No active media session found")
+        ?: error("No active media session found")
 
-    @Deprecated("Use PipAppHelper.closePipWindow(wmHelper) instead",
-        ReplaceWith("closePipWindow(wmHelper)"))
+    @Deprecated(
+        "Use PipAppHelper.closePipWindow(wmHelper) instead",
+        ReplaceWith("closePipWindow(wmHelper)")
+    )
     fun closePipWindow() {
         if (isTelevision) {
             uiDevice.closeTvPipWindow()
@@ -152,7 +164,7 @@
             val dismissSelector = By.res(SYSTEMUI_PACKAGE, "dismiss")
             uiDevice.wait(Until.hasObject(dismissSelector), FIND_TIMEOUT)
             val dismissPipObject = uiDevice.findObject(dismissSelector)
-                    ?: error("PIP window dismiss button not found")
+                ?: error("PIP window dismiss button not found")
             val dismissButtonBounds = dismissPipObject.visibleBounds
             uiDevice.click(dismissButtonBounds.centerX(), dismissButtonBounds.centerY())
         }
@@ -172,7 +184,7 @@
         val expandSelector = By.res(SYSTEMUI_PACKAGE, "expand_button")
         uiDevice.wait(Until.hasObject(expandSelector), FIND_TIMEOUT)
         val expandPipObject = uiDevice.findObject(expandSelector)
-                ?: error("PIP window expand button not found")
+            ?: error("PIP window expand button not found")
         val expandButtonBounds = expandPipObject.visibleBounds
         uiDevice.click(expandButtonBounds.centerX(), expandButtonBounds.centerY())
         wmHelper.waitPipGone()
@@ -194,5 +206,7 @@
         private const val ENTER_PIP_BUTTON_ID = "enter_pip"
         private const val WITH_CUSTOM_ACTIONS_BUTTON_ID = "with_custom_actions"
         private const val MEDIA_SESSION_START_RADIO_BUTTON_ID = "media_session_start"
+        private const val ENTER_PIP_ON_USER_LEAVE_HINT = "enter_pip_on_leave_manual"
+        private const val ENTER_PIP_AUTOENTER = "enter_pip_on_leave_autoenter"
     }
 }
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/helpers/SplitScreenHelper.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/helpers/SplitScreenHelper.kt
index 0ec9b2d..49eca63 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/helpers/SplitScreenHelper.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/helpers/SplitScreenHelper.kt
@@ -17,10 +17,21 @@
 package com.android.wm.shell.flicker.helpers
 
 import android.app.Instrumentation
-import android.content.res.Resources
+import android.graphics.Point
+import android.os.SystemClock
+import android.view.InputDevice
+import android.view.MotionEvent
+import androidx.test.uiautomator.By
+import androidx.test.uiautomator.BySelector
+import androidx.test.uiautomator.UiDevice
+import androidx.test.uiautomator.Until
+import com.android.launcher3.tapl.LauncherInstrumentation
 import com.android.server.wm.traces.common.FlickerComponentName
 import com.android.server.wm.traces.parser.toFlickerComponent
+import com.android.server.wm.traces.parser.windowmanager.WindowManagerStateHelper
+import com.android.wm.shell.flicker.SYSTEM_UI_PACKAGE_NAME
 import com.android.wm.shell.flicker.testapp.Components
+import org.junit.Assert
 
 class SplitScreenHelper(
     instrumentation: Instrumentation,
@@ -31,25 +42,170 @@
     companion object {
         const val TEST_REPETITIONS = 1
         const val TIMEOUT_MS = 3_000L
+        const val DRAG_DURATION_MS = 1_000L
+        const val NOTIFICATION_SCROLLER = "notification_stack_scroller"
+        const val GESTURE_STEP_MS = 16L
 
-        // TODO: remove all legacy split screen flicker tests when legacy split screen is fully
-        //  deprecated.
-        fun isUsingLegacySplit(): Boolean =
-                Resources.getSystem().getBoolean(com.android.internal.R.bool.config_useLegacySplit)
+        private val notificationScrollerSelector: BySelector
+            get() = By.res(SYSTEM_UI_PACKAGE_NAME, NOTIFICATION_SCROLLER)
+        private val notificationContentSelector: BySelector
+            get() = By.text("Notification content")
 
         fun getPrimary(instrumentation: Instrumentation): SplitScreenHelper =
-            SplitScreenHelper(instrumentation,
+            SplitScreenHelper(
+                instrumentation,
                 Components.SplitScreenActivity.LABEL,
-                Components.SplitScreenActivity.COMPONENT.toFlickerComponent())
+                Components.SplitScreenActivity.COMPONENT.toFlickerComponent()
+            )
 
         fun getSecondary(instrumentation: Instrumentation): SplitScreenHelper =
-            SplitScreenHelper(instrumentation,
+            SplitScreenHelper(
+                instrumentation,
                 Components.SplitScreenSecondaryActivity.LABEL,
-                Components.SplitScreenSecondaryActivity.COMPONENT.toFlickerComponent())
+                Components.SplitScreenSecondaryActivity.COMPONENT.toFlickerComponent()
+            )
 
         fun getNonResizeable(instrumentation: Instrumentation): SplitScreenHelper =
-            SplitScreenHelper(instrumentation,
+            SplitScreenHelper(
+                instrumentation,
                 Components.NonResizeableActivity.LABEL,
-                Components.NonResizeableActivity.COMPONENT.toFlickerComponent())
+                Components.NonResizeableActivity.COMPONENT.toFlickerComponent()
+            )
+
+        fun getSendNotification(instrumentation: Instrumentation): SplitScreenHelper =
+            SplitScreenHelper(
+                instrumentation,
+                Components.SendNotificationActivity.LABEL,
+                Components.SendNotificationActivity.COMPONENT.toFlickerComponent()
+            )
+
+        fun dragFromNotificationToSplit(
+            instrumentation: Instrumentation,
+            device: UiDevice,
+            wmHelper: WindowManagerStateHelper
+        ) {
+            val displayBounds = wmHelper.currentState.layerState
+                .displays.firstOrNull { !it.isVirtual }
+                ?.layerStackSpace
+                ?: error("Display not found")
+
+            // Pull down the notifications
+            device.swipe(
+                displayBounds.centerX(), 5,
+                displayBounds.centerX(), displayBounds.bottom, 20 /* steps */
+            )
+            SystemClock.sleep(TIMEOUT_MS)
+
+            // Find the target notification
+            val notificationScroller = device.wait(
+                Until.findObject(notificationScrollerSelector), TIMEOUT_MS
+            )
+            var notificationContent = notificationScroller.findObject(notificationContentSelector)
+
+            while (notificationContent == null) {
+                device.swipe(
+                    displayBounds.centerX(), displayBounds.centerY(),
+                    displayBounds.centerX(), displayBounds.centerY() - 150, 20 /* steps */
+                )
+                notificationContent = notificationScroller.findObject(notificationContentSelector)
+            }
+
+            // Drag to split
+            var dragStart = notificationContent.visibleCenter
+            var dragMiddle = Point(dragStart.x + 50, dragStart.y)
+            var dragEnd = Point(displayBounds.width / 4, displayBounds.width / 4)
+            val downTime = SystemClock.uptimeMillis()
+
+            touch(
+                instrumentation, MotionEvent.ACTION_DOWN, downTime, downTime,
+                TIMEOUT_MS, dragStart
+            )
+            // It needs a horizontal movement to trigger the drag
+            touchMove(
+                instrumentation, downTime, SystemClock.uptimeMillis(),
+                DRAG_DURATION_MS, dragStart, dragMiddle
+            )
+            touchMove(
+                instrumentation, downTime, SystemClock.uptimeMillis(),
+                DRAG_DURATION_MS, dragMiddle, dragEnd
+            )
+            // Wait for a while to start splitting
+            SystemClock.sleep(TIMEOUT_MS)
+            touch(
+                instrumentation, MotionEvent.ACTION_UP, downTime, SystemClock.uptimeMillis(),
+                GESTURE_STEP_MS, dragEnd
+            )
+            SystemClock.sleep(TIMEOUT_MS)
+        }
+
+        fun touch(
+            instrumentation: Instrumentation,
+            action: Int,
+            downTime: Long,
+            eventTime: Long,
+            duration: Long,
+            point: Point
+        ) {
+            val motionEvent = MotionEvent.obtain(
+                downTime, eventTime, action, point.x.toFloat(), point.y.toFloat(), 0
+            )
+            motionEvent.source = InputDevice.SOURCE_TOUCHSCREEN
+            instrumentation.uiAutomation.injectInputEvent(motionEvent, true)
+            motionEvent.recycle()
+            SystemClock.sleep(duration)
+        }
+
+        fun touchMove(
+            instrumentation: Instrumentation,
+            downTime: Long,
+            eventTime: Long,
+            duration: Long,
+            from: Point,
+            to: Point
+        ) {
+            val steps: Long = duration / GESTURE_STEP_MS
+            var currentTime = eventTime
+            var currentX = from.x.toFloat()
+            var currentY = from.y.toFloat()
+            val stepX = (to.x.toFloat() - from.x.toFloat()) / steps.toFloat()
+            val stepY = (to.y.toFloat() - from.y.toFloat()) / steps.toFloat()
+
+            for (i in 1..steps) {
+                val motionMove = MotionEvent.obtain(
+                    downTime, currentTime, MotionEvent.ACTION_MOVE, currentX, currentY, 0
+                )
+                motionMove.source = InputDevice.SOURCE_TOUCHSCREEN
+                instrumentation.uiAutomation.injectInputEvent(motionMove, true)
+                motionMove.recycle()
+
+                currentTime += GESTURE_STEP_MS
+                if (i == steps - 1) {
+                    currentX = to.x.toFloat()
+                    currentY = to.y.toFloat()
+                } else {
+                    currentX += stepX
+                    currentY += stepY
+                }
+                SystemClock.sleep(GESTURE_STEP_MS)
+            }
+        }
+
+        fun createShortcutOnHotseatIfNotExist(
+            taplInstrumentation: LauncherInstrumentation,
+            appName: String
+        ) {
+            taplInstrumentation.workspace
+                .deleteAppIcon(taplInstrumentation.workspace.getHotseatAppIcon(0))
+            val allApps = taplInstrumentation.workspace.switchToAllApps()
+            allApps.freeze()
+            try {
+                val appIconSrc = allApps.getAppIcon(appName)
+                Assert.assertNotNull("Unable to find app icon", appIconSrc)
+                val appIconDest = appIconSrc.dragToHotseat(0)
+                Assert.assertNotNull("Unable to drag app icon on hotseat", appIconDest)
+            } finally {
+                allApps.unfreeze()
+            }
+        }
     }
 }
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/EnterSplitScreenDockActivity.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/EnterSplitScreenDockActivity.kt
deleted file mode 100644
index c86a122..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/EnterSplitScreenDockActivity.kt
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.legacysplitscreen
-
-import android.platform.test.annotations.Presubmit
-import android.view.Surface
-import android.view.WindowManagerPolicyConstants
-import androidx.test.filters.FlakyTest
-import androidx.test.filters.RequiresDevice
-import com.android.server.wm.flicker.FlickerParametersRunnerFactory
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.FlickerTestParameterFactory
-import com.android.server.wm.flicker.annotation.Group4
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.helpers.launchSplitScreen
-import com.android.server.wm.flicker.navBarWindowIsVisible
-import com.android.server.wm.flicker.statusBarWindowIsVisible
-import com.android.server.wm.traces.common.FlickerComponentName
-import com.android.wm.shell.flicker.dockedStackDividerBecomesVisible
-import com.android.wm.shell.flicker.dockedStackPrimaryBoundsIsVisibleAtEnd
-import com.android.wm.shell.flicker.helpers.SplitScreenHelper
-import org.junit.FixMethodOrder
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/**
- * Test open activity and dock to primary split screen
- * To run this test: `atest WMShellFlickerTests:EnterSplitScreenDockActivity`
- */
-@Presubmit
-@RequiresDevice
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Group4
-class EnterSplitScreenDockActivity(
-    testSpec: FlickerTestParameter
-) : LegacySplitScreenTransition(testSpec) {
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            super.transition(this)
-            transitions {
-                device.launchSplitScreen(wmHelper)
-            }
-        }
-
-    override val ignoredWindows: List<FlickerComponentName>
-        get() = listOf(LAUNCHER_COMPONENT, LIVE_WALLPAPER_COMPONENT,
-            splitScreenApp.component, FlickerComponentName.SPLASH_SCREEN,
-                FlickerComponentName.SNAPSHOT, LAUNCHER_COMPONENT)
-
-    @Presubmit
-    @Test
-    fun dockedStackPrimaryBoundsIsVisibleAtEnd() =
-        testSpec.dockedStackPrimaryBoundsIsVisibleAtEnd(testSpec.startRotation,
-            splitScreenApp.component)
-
-    @Presubmit
-    @Test
-    fun dockedStackDividerBecomesVisible() = testSpec.dockedStackDividerBecomesVisible()
-
-    @Presubmit
-    @Test
-    fun navBarWindowIsVisible() = testSpec.navBarWindowIsVisible()
-
-    @Presubmit
-    @Test
-    fun statusBarWindowIsVisible() = testSpec.statusBarWindowIsVisible()
-
-    @Presubmit
-    @Test
-    fun appWindowIsVisible() {
-        testSpec.assertWmEnd {
-            isAppWindowVisible(splitScreenApp.component)
-        }
-    }
-
-    @FlakyTest
-    @Test
-    override fun visibleLayersShownMoreThanOneConsecutiveEntry() =
-        super.visibleLayersShownMoreThanOneConsecutiveEntry()
-
-    @Presubmit
-    @Test
-    override fun visibleWindowsShownMoreThanOneConsecutiveEntry() =
-        super.visibleWindowsShownMoreThanOneConsecutiveEntry()
-
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): Collection<FlickerTestParameter> {
-            return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests(
-                repetitions = SplitScreenHelper.TEST_REPETITIONS,
-                supportedRotations = listOf(Surface.ROTATION_0), // bugId = 179116910
-                supportedNavigationModes = listOf(
-                        WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY)
-            )
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/EnterSplitScreenFromDetachedRecentTask.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/EnterSplitScreenFromDetachedRecentTask.kt
deleted file mode 100644
index 2f9244b..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/EnterSplitScreenFromDetachedRecentTask.kt
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.legacysplitscreen
-
-import android.platform.test.annotations.Presubmit
-import android.view.Surface
-import androidx.test.filters.RequiresDevice
-import com.android.server.wm.flicker.FlickerParametersRunnerFactory
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.FlickerTestParameterFactory
-import com.android.server.wm.flicker.annotation.Group4
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.helpers.launchSplitScreen
-import com.android.server.wm.traces.common.FlickerComponentName
-import com.android.wm.shell.flicker.dockedStackDividerIsVisibleAtEnd
-import com.android.wm.shell.flicker.helpers.SplitScreenHelper
-import org.junit.FixMethodOrder
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/**
- * Test enter split screen from a detached recent task
- *
- * To run this test: `atest WMShellFlickerTests:EnterSplitScreenFromDetachedRecentTask`
- */
-@RequiresDevice
-@RunWith(Parameterized::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@Group4
-class EnterSplitScreenFromDetachedRecentTask(
-    testSpec: FlickerTestParameter
-) : LegacySplitScreenTransition(testSpec) {
-
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            cleanSetup(this)
-            setup {
-                eachRun {
-                    splitScreenApp.launchViaIntent(wmHelper)
-                    // Press back to remove the task, but it should still be shown in recent.
-                    device.pressBack()
-                }
-            }
-            transitions {
-                device.launchSplitScreen(wmHelper)
-            }
-        }
-
-    override val ignoredWindows: List<FlickerComponentName>
-        get() = listOf(LAUNCHER_COMPONENT,
-                FlickerComponentName.SPLASH_SCREEN,
-                FlickerComponentName.SNAPSHOT,
-                splitScreenApp.component)
-
-    @Presubmit
-    @Test
-    fun dockedStackDividerIsVisibleAtEnd() = testSpec.dockedStackDividerIsVisibleAtEnd()
-
-    @Presubmit
-    @Test
-    fun appWindowIsVisible() {
-        testSpec.assertWmEnd {
-            isAppWindowVisible(splitScreenApp.component)
-        }
-    }
-
-    @Presubmit
-    @Test
-    override fun visibleLayersShownMoreThanOneConsecutiveEntry() =
-            super.visibleLayersShownMoreThanOneConsecutiveEntry()
-
-    @Presubmit
-    @Test
-    override fun visibleWindowsShownMoreThanOneConsecutiveEntry() =
-            super.visibleWindowsShownMoreThanOneConsecutiveEntry()
-
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): Collection<FlickerTestParameter> {
-            return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests(
-                    repetitions = SplitScreenHelper.TEST_REPETITIONS,
-                    supportedRotations = listOf(Surface.ROTATION_0) // bugId = 179116910
-            )
-        }
-    }
-}
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/EnterSplitScreenLaunchToSide.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/EnterSplitScreenLaunchToSide.kt
deleted file mode 100644
index 1740c3e..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/EnterSplitScreenLaunchToSide.kt
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.legacysplitscreen
-
-import android.platform.test.annotations.Presubmit
-import android.view.Surface
-import androidx.test.filters.RequiresDevice
-import com.android.server.wm.flicker.FlickerParametersRunnerFactory
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.FlickerTestParameterFactory
-import com.android.server.wm.flicker.annotation.Group4
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.helpers.launchSplitScreen
-import com.android.server.wm.flicker.helpers.reopenAppFromOverview
-import com.android.server.wm.flicker.navBarWindowIsVisible
-import com.android.server.wm.flicker.statusBarWindowIsVisible
-import com.android.server.wm.traces.common.FlickerComponentName
-import com.android.wm.shell.flicker.dockedStackDividerBecomesVisible
-import com.android.wm.shell.flicker.dockedStackPrimaryBoundsIsVisibleAtEnd
-import com.android.wm.shell.flicker.dockedStackSecondaryBoundsIsVisibleAtEnd
-import com.android.wm.shell.flicker.helpers.SplitScreenHelper
-import org.junit.FixMethodOrder
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/**
- * Test open activity to primary split screen and dock secondary activity to side
- * To run this test: `atest WMShellFlickerTests:EnterSplitScreenLaunchToSide`
- */
-@RequiresDevice
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Group4
-class EnterSplitScreenLaunchToSide(
-    testSpec: FlickerTestParameter
-) : LegacySplitScreenTransition(testSpec) {
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            super.transition(this)
-            transitions {
-                device.launchSplitScreen(wmHelper)
-                device.reopenAppFromOverview(wmHelper)
-            }
-        }
-
-    override val ignoredWindows: List<FlickerComponentName>
-        get() = listOf(LAUNCHER_COMPONENT, splitScreenApp.component,
-            secondaryApp.component, FlickerComponentName.SPLASH_SCREEN,
-            FlickerComponentName.SNAPSHOT)
-
-    @Presubmit
-    @Test
-    fun dockedStackPrimaryBoundsIsVisibleAtEnd() =
-        testSpec.dockedStackPrimaryBoundsIsVisibleAtEnd(testSpec.startRotation,
-            splitScreenApp.component)
-
-    @Presubmit
-    @Test
-    fun dockedStackSecondaryBoundsIsVisibleAtEnd() =
-        testSpec.dockedStackSecondaryBoundsIsVisibleAtEnd(testSpec.startRotation,
-            secondaryApp.component)
-
-    @Presubmit
-    @Test
-    fun dockedStackDividerBecomesVisible() = testSpec.dockedStackDividerBecomesVisible()
-
-    @Presubmit
-    @Test
-    fun appWindowBecomesVisible() {
-        testSpec.assertWm {
-            // when the app is launched, first the activity becomes visible, then the
-            // SnapshotStartingWindow appears and then the app window becomes visible.
-            // Because we log WM once per frame, sometimes the activity and the window
-            // become visible in the same entry, sometimes not, thus it is not possible to
-            // assert the visibility of the activity here
-            this.isAppWindowInvisible(secondaryApp.component)
-                    .then()
-                    // during re-parenting, the window may disappear and reappear from the
-                    // trace, this occurs because we log only 1x per frame
-                    .notContains(secondaryApp.component, isOptional = true)
-                    .then()
-                    .isAppWindowVisible(secondaryApp.component)
-        }
-    }
-
-    @Presubmit
-    @Test
-    fun navBarWindowIsVisible() = testSpec.navBarWindowIsVisible()
-
-    @Presubmit
-    @Test
-    fun statusBarWindowIsVisible() = testSpec.statusBarWindowIsVisible()
-
-    @Presubmit
-    @Test
-    override fun visibleWindowsShownMoreThanOneConsecutiveEntry() =
-            super.visibleWindowsShownMoreThanOneConsecutiveEntry()
-
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): Collection<FlickerTestParameter> {
-            return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests(
-                repetitions = SplitScreenHelper.TEST_REPETITIONS,
-                supportedRotations = listOf(Surface.ROTATION_0) // bugId = 175687842
-            )
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/EnterSplitScreenNotSupportNonResizable.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/EnterSplitScreenNotSupportNonResizable.kt
deleted file mode 100644
index 4c063b91..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/EnterSplitScreenNotSupportNonResizable.kt
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.legacysplitscreen
-
-import android.platform.test.annotations.Presubmit
-import android.view.Surface
-import androidx.test.filters.RequiresDevice
-import com.android.server.wm.flicker.FlickerParametersRunnerFactory
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.FlickerTestParameterFactory
-import com.android.server.wm.flicker.annotation.Group4
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.helpers.canSplitScreen
-import com.android.server.wm.traces.common.FlickerComponentName
-import com.android.wm.shell.flicker.dockedStackDividerNotExistsAtEnd
-import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.resetMultiWindowConfig
-import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.setSupportsNonResizableMultiWindow
-import com.android.wm.shell.flicker.helpers.SplitScreenHelper
-import org.junit.After
-import org.junit.Assert
-import org.junit.Before
-import org.junit.FixMethodOrder
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/**
- * Test enter split screen from non-resizable activity. When the device doesn't support
- * non-resizable in multi window, there should be no button to enter split screen for non-resizable
- * activity.
- *
- * To run this test: `atest WMShellFlickerTests:EnterSplitScreenNotSupportNonResizable`
- */
-@RequiresDevice
-@RunWith(Parameterized::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@Group4
-class EnterSplitScreenNotSupportNonResizable(
-    testSpec: FlickerTestParameter
-) : LegacySplitScreenTransition(testSpec) {
-
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            cleanSetup(this)
-            setup {
-                eachRun {
-                    nonResizeableApp.launchViaIntent(wmHelper)
-                }
-            }
-            transitions {
-                if (device.canSplitScreen(wmHelper)) {
-                    Assert.fail("Non-resizeable app should not enter split screen")
-                }
-            }
-        }
-
-    override val ignoredWindows: List<FlickerComponentName>
-        get() = listOf(LAUNCHER_COMPONENT,
-            FlickerComponentName.SPLASH_SCREEN,
-            FlickerComponentName.SNAPSHOT,
-            nonResizeableApp.component,
-            splitScreenApp.component)
-
-    @Before
-    override fun setup() {
-        super.setup()
-        setSupportsNonResizableMultiWindow(instrumentation, -1)
-    }
-
-    @After
-    override fun teardown() {
-        super.teardown()
-        resetMultiWindowConfig(instrumentation)
-    }
-
-    @Presubmit
-    @Test
-    fun dockedStackDividerNotExistsAtEnd() = testSpec.dockedStackDividerNotExistsAtEnd()
-
-    @Presubmit
-    @Test
-    override fun visibleWindowsShownMoreThanOneConsecutiveEntry() =
-            super.visibleWindowsShownMoreThanOneConsecutiveEntry()
-
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): Collection<FlickerTestParameter> {
-            return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests(
-                repetitions = SplitScreenHelper.TEST_REPETITIONS,
-                supportedRotations = listOf(Surface.ROTATION_0)) // b/178685668
-        }
-    }
-}
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/EnterSplitScreenSupportNonResizable.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/EnterSplitScreenSupportNonResizable.kt
deleted file mode 100644
index f75dee6..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/EnterSplitScreenSupportNonResizable.kt
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.legacysplitscreen
-
-import android.platform.test.annotations.Presubmit
-import android.view.Surface
-import androidx.test.filters.RequiresDevice
-import com.android.server.wm.flicker.FlickerParametersRunnerFactory
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.FlickerTestParameterFactory
-import com.android.server.wm.flicker.annotation.Group2
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.helpers.launchSplitScreen
-import com.android.server.wm.traces.common.FlickerComponentName
-import com.android.wm.shell.flicker.dockedStackDividerIsVisibleAtEnd
-import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.resetMultiWindowConfig
-import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.setSupportsNonResizableMultiWindow
-import com.android.wm.shell.flicker.helpers.SplitScreenHelper
-import org.junit.After
-import org.junit.Before
-import org.junit.FixMethodOrder
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/**
- * Test enter split screen from non-resizable activity. When the device supports
- * non-resizable in multi window, there should be a button to enter split screen for non-resizable
- * activity.
- *
- * To run this test: `atest WMShellFlickerTests:EnterSplitScreenSupportNonResizable`
- */
-@RequiresDevice
-@RunWith(Parameterized::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@Group2
-class EnterSplitScreenSupportNonResizable(
-    testSpec: FlickerTestParameter
-) : LegacySplitScreenTransition(testSpec) {
-
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            cleanSetup(this)
-            setup {
-                eachRun {
-                    nonResizeableApp.launchViaIntent(wmHelper)
-                }
-            }
-            transitions {
-                device.launchSplitScreen(wmHelper)
-            }
-        }
-
-    override val ignoredWindows: List<FlickerComponentName>
-        get() = listOf(LAUNCHER_COMPONENT,
-            FlickerComponentName.SPLASH_SCREEN,
-            FlickerComponentName.SNAPSHOT,
-            nonResizeableApp.component,
-            splitScreenApp.component)
-
-    @Before
-    override fun setup() {
-        super.setup()
-        setSupportsNonResizableMultiWindow(instrumentation, 1)
-    }
-
-    @After
-    override fun teardown() {
-        super.teardown()
-        resetMultiWindowConfig(instrumentation)
-    }
-
-    @Presubmit
-    @Test
-    fun dockedStackDividerIsVisibleAtEnd() = testSpec.dockedStackDividerIsVisibleAtEnd()
-
-    @Presubmit
-    @Test
-    fun appWindowIsVisible() {
-        testSpec.assertWmEnd {
-            isAppWindowVisible(nonResizeableApp.component)
-        }
-    }
-
-    @Presubmit
-    @Test
-    override fun visibleWindowsShownMoreThanOneConsecutiveEntry() =
-            super.visibleWindowsShownMoreThanOneConsecutiveEntry()
-
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): Collection<FlickerTestParameter> {
-            return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests(
-                    repetitions = SplitScreenHelper.TEST_REPETITIONS,
-                    supportedRotations = listOf(Surface.ROTATION_0)) // b/178685668
-        }
-    }
-}
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/ExitLegacySplitScreenFromBottom.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/ExitLegacySplitScreenFromBottom.kt
deleted file mode 100644
index ef7d65e..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/ExitLegacySplitScreenFromBottom.kt
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.flicker.legacysplitscreen
-
-import android.view.Surface
-import androidx.test.filters.FlakyTest
-import androidx.test.filters.RequiresDevice
-import com.android.server.wm.flicker.FlickerParametersRunnerFactory
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.FlickerTestParameterFactory
-import com.android.server.wm.flicker.annotation.Group2
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.helpers.exitSplitScreenFromBottom
-import com.android.server.wm.flicker.helpers.launchSplitScreen
-import com.android.server.wm.flicker.navBarWindowIsVisible
-import com.android.server.wm.flicker.statusBarWindowIsVisible
-import com.android.server.wm.traces.common.FlickerComponentName
-import com.android.wm.shell.flicker.DOCKED_STACK_DIVIDER_COMPONENT
-import com.android.wm.shell.flicker.helpers.SplitScreenHelper
-import org.junit.FixMethodOrder
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/**
- * Test open resizeable activity split in primary, and drag divider to bottom exit split screen
- * To run this test: `atest WMShellFlickerTests:ExitLegacySplitScreenFromBottom`
- */
-@RequiresDevice
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Group2
-class ExitLegacySplitScreenFromBottom(
-    testSpec: FlickerTestParameter
-) : LegacySplitScreenTransition(testSpec) {
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            super.transition(this)
-            setup {
-                eachRun {
-                    splitScreenApp.launchViaIntent(wmHelper)
-                    device.launchSplitScreen(wmHelper)
-                }
-            }
-            teardown {
-                eachRun {
-                    splitScreenApp.exit(wmHelper)
-                }
-            }
-            transitions {
-                device.exitSplitScreenFromBottom(wmHelper)
-            }
-        }
-
-    override val ignoredWindows: List<FlickerComponentName>
-        get() = listOf(LAUNCHER_COMPONENT, FlickerComponentName.SPLASH_SCREEN,
-            splitScreenApp.component, secondaryApp.component,
-            FlickerComponentName.SNAPSHOT)
-
-    @FlakyTest
-    @Test
-    fun layerBecomesInvisible() {
-        testSpec.assertLayers {
-            this.isVisible(DOCKED_STACK_DIVIDER_COMPONENT)
-                    .then()
-                    .isInvisible(DOCKED_STACK_DIVIDER_COMPONENT)
-        }
-    }
-
-    @FlakyTest
-    @Test
-    fun appWindowBecomesInVisible() {
-        testSpec.assertWm {
-            this.isAppWindowVisible(secondaryApp.component)
-                    .then()
-                    .isAppWindowInvisible(secondaryApp.component)
-        }
-    }
-
-    @FlakyTest
-    @Test
-    fun navBarWindowIsVisible() = testSpec.navBarWindowIsVisible()
-
-    @FlakyTest
-    @Test
-    fun statusBarWindowIsVisible() = testSpec.statusBarWindowIsVisible()
-
-    @FlakyTest
-    @Test
-    override fun visibleLayersShownMoreThanOneConsecutiveEntry() =
-            super.visibleLayersShownMoreThanOneConsecutiveEntry()
-
-    @FlakyTest
-    @Test
-    override fun visibleWindowsShownMoreThanOneConsecutiveEntry() =
-            super.visibleWindowsShownMoreThanOneConsecutiveEntry()
-
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): Collection<FlickerTestParameter> {
-            return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests(
-                repetitions = SplitScreenHelper.TEST_REPETITIONS,
-                supportedRotations = listOf(Surface.ROTATION_0) // b/175687842
-            )
-        }
-    }
-}
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/ExitPrimarySplitScreenShowSecondaryFullscreen.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/ExitPrimarySplitScreenShowSecondaryFullscreen.kt
deleted file mode 100644
index d913a6d..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/ExitPrimarySplitScreenShowSecondaryFullscreen.kt
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.legacysplitscreen
-
-import android.platform.test.annotations.Presubmit
-import android.view.Surface
-import androidx.test.filters.FlakyTest
-import androidx.test.filters.RequiresDevice
-import com.android.server.wm.flicker.FlickerParametersRunnerFactory
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.FlickerTestParameterFactory
-import com.android.server.wm.flicker.annotation.Group2
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.helpers.launchSplitScreen
-import com.android.server.wm.flicker.helpers.reopenAppFromOverview
-import com.android.server.wm.flicker.navBarWindowIsVisible
-import com.android.server.wm.flicker.statusBarWindowIsVisible
-import com.android.server.wm.traces.common.FlickerComponentName
-import com.android.wm.shell.flicker.dockedStackDividerNotExistsAtEnd
-import com.android.wm.shell.flicker.helpers.SplitScreenHelper
-import org.junit.FixMethodOrder
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/**
- * Test dock activity to primary split screen, and open secondary to side, exit primary split
- * and test secondary activity become full screen.
- * To run this test: `atest WMShellFlickerTests:ExitPrimarySplitScreenShowSecondaryFullscreen`
- */
-@RequiresDevice
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Group2
-class ExitPrimarySplitScreenShowSecondaryFullscreen(
-    testSpec: FlickerTestParameter
-) : LegacySplitScreenTransition(testSpec) {
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            super.transition(this)
-            teardown {
-                eachRun {
-                    secondaryApp.exit(wmHelper)
-                }
-            }
-            transitions {
-                splitScreenApp.launchViaIntent(wmHelper)
-                secondaryApp.launchViaIntent(wmHelper)
-                device.launchSplitScreen(wmHelper)
-                device.reopenAppFromOverview(wmHelper)
-                // TODO(b/175687842) Can not find Split screen divider, use exit() instead
-                splitScreenApp.exit(wmHelper)
-            }
-        }
-
-    override val ignoredWindows: List<FlickerComponentName>
-        get() = listOf(LAUNCHER_COMPONENT, FlickerComponentName.SPLASH_SCREEN,
-            splitScreenApp.component, secondaryApp.component,
-            FlickerComponentName.SNAPSHOT)
-
-    @Presubmit
-    @Test
-    fun dockedStackDividerNotExistsAtEnd() = testSpec.dockedStackDividerNotExistsAtEnd()
-
-    @FlakyTest
-    @Test
-    fun layerBecomesInvisible() {
-        testSpec.assertLayers {
-            this.isVisible(splitScreenApp.component)
-                    .then()
-                    .isInvisible(splitScreenApp.component)
-        }
-    }
-
-    @FlakyTest
-    @Test
-    fun appWindowBecomesInVisible() {
-        testSpec.assertWm {
-            this.isAppWindowVisible(splitScreenApp.component)
-                    .then()
-                    .isAppWindowInvisible(splitScreenApp.component)
-        }
-    }
-
-    @Presubmit
-    @Test
-    fun navBarWindowIsVisible() = testSpec.navBarWindowIsVisible()
-
-    @Presubmit
-    @Test
-    fun statusBarWindowIsVisible() = testSpec.statusBarWindowIsVisible()
-
-    @Presubmit
-    @Test
-    override fun visibleLayersShownMoreThanOneConsecutiveEntry() =
-            super.visibleLayersShownMoreThanOneConsecutiveEntry()
-
-    @Presubmit
-    @Test
-    override fun visibleWindowsShownMoreThanOneConsecutiveEntry() =
-            super.visibleWindowsShownMoreThanOneConsecutiveEntry()
-
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): Collection<FlickerTestParameter> {
-            return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests(
-                repetitions = SplitScreenHelper.TEST_REPETITIONS,
-                supportedRotations = listOf(Surface.ROTATION_0) // bugId = 179116910
-            )
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/LegacySplitScreenFromIntentNotSupportNonResizable.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/LegacySplitScreenFromIntentNotSupportNonResizable.kt
deleted file mode 100644
index f3ff7b1..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/LegacySplitScreenFromIntentNotSupportNonResizable.kt
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.legacysplitscreen
-
-import android.platform.test.annotations.Presubmit
-import android.view.Surface
-import androidx.test.filters.RequiresDevice
-import com.android.server.wm.flicker.FlickerParametersRunnerFactory
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.FlickerTestParameterFactory
-import com.android.server.wm.flicker.annotation.Group2
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.helpers.launchSplitScreen
-import com.android.server.wm.traces.common.FlickerComponentName
-import com.android.wm.shell.flicker.DOCKED_STACK_DIVIDER_COMPONENT
-import com.android.wm.shell.flicker.dockedStackDividerNotExistsAtEnd
-import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.resetMultiWindowConfig
-import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.setSupportsNonResizableMultiWindow
-import com.android.wm.shell.flicker.helpers.SplitScreenHelper
-import org.junit.After
-import org.junit.Before
-import org.junit.FixMethodOrder
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/**
- * Test launch non-resizable activity via intent in split screen mode. When the device does not
- * support non-resizable in multi window, it should trigger exit split screen.
- * To run this test: `atest WMShellFlickerTests:LegacySplitScreenFromIntentNotSupportNonResizable`
- */
-@RequiresDevice
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Group2
-class LegacySplitScreenFromIntentNotSupportNonResizable(
-    testSpec: FlickerTestParameter
-) : LegacySplitScreenTransition(testSpec) {
-
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            cleanSetup(this)
-            setup {
-                eachRun {
-                    splitScreenApp.launchViaIntent(wmHelper)
-                    device.launchSplitScreen(wmHelper)
-                }
-            }
-            transitions {
-                nonResizeableApp.launchViaIntent(wmHelper)
-                wmHelper.waitForAppTransitionIdle()
-            }
-        }
-
-    override val ignoredWindows: List<FlickerComponentName>
-        get() = listOf(DOCKED_STACK_DIVIDER_COMPONENT, LAUNCHER_COMPONENT, LETTERBOX_COMPONENT,
-            nonResizeableApp.component, splitScreenApp.component,
-            FlickerComponentName.SPLASH_SCREEN,
-            FlickerComponentName.SNAPSHOT)
-
-    @Before
-    override fun setup() {
-        super.setup()
-        setSupportsNonResizableMultiWindow(instrumentation, -1)
-    }
-
-    @After
-    override fun teardown() {
-        super.teardown()
-        resetMultiWindowConfig(instrumentation)
-    }
-
-    @Presubmit
-    @Test
-    fun resizableAppLayerBecomesInvisible() {
-        testSpec.assertLayers {
-            this.isVisible(splitScreenApp.component)
-                    .then()
-                    .isInvisible(splitScreenApp.component)
-        }
-    }
-
-    @Presubmit
-    @Test
-    fun nonResizableAppLayerBecomesVisible() {
-        testSpec.assertLayers {
-            this.notContains(nonResizeableApp.component)
-                    .then()
-                    .isInvisible(nonResizeableApp.component)
-                    .then()
-                    .isVisible(nonResizeableApp.component)
-        }
-    }
-
-    /**
-     * Assets that [splitScreenApp] exists at the start of the trace and, once it becomes
-     * invisible, it remains invisible until the end of the trace.
-     */
-    @Presubmit
-    @Test
-    fun resizableAppWindowBecomesInvisible() {
-        testSpec.assertWm {
-            // when the activity gets PAUSED the window may still be marked as visible
-            // it will be updated in the next log entry. This occurs because we record 1x
-            // per frame, thus ignore activity check here
-            this.isAppWindowVisible(splitScreenApp.component)
-                    .then()
-                    // immediately after the window (after onResume and before perform relayout)
-                    // the activity is invisible. This may or not be logged, since we record 1x
-                    // per frame, thus ignore activity check here
-                    .isAppWindowInvisible(splitScreenApp.component)
-        }
-    }
-
-    /**
-     * Assets that [nonResizeableApp] doesn't exist at the start of the trace, then
-     * [nonResizeableApp] is created (visible or not) and, once [nonResizeableApp] becomes
-     * visible, it remains visible until the end of the trace.
-     */
-    @Presubmit
-    @Test
-    fun nonResizableAppWindowBecomesVisible() {
-        testSpec.assertWm {
-            this.notContains(nonResizeableApp.component)
-                    .then()
-                    // we log once per frame, upon logging, window may be visible or not depending
-                    // on what was processed until that moment. Both behaviors are correct
-                    .isAppWindowInvisible(nonResizeableApp.component, isOptional = true)
-                    .then()
-                    // immediately after the window (after onResume and before perform relayout)
-                    // the activity is invisible. This may or not be logged, since we record 1x
-                    // per frame, thus ignore activity check here
-                    .isAppWindowVisible(nonResizeableApp.component)
-        }
-    }
-
-    /**
-     * Asserts that both the app window and the activity are visible at the end of the trace
-     */
-    @Presubmit
-    @Test
-    fun nonResizableAppWindowBecomesVisibleAtEnd() {
-        testSpec.assertWmEnd {
-            isAppWindowVisible(nonResizeableApp.component)
-        }
-    }
-
-    @Presubmit
-    @Test
-    fun dockedStackDividerNotExistsAtEnd() = testSpec.dockedStackDividerNotExistsAtEnd()
-
-    @Presubmit
-    @Test
-    fun onlyNonResizableAppWindowIsVisibleAtEnd() {
-        testSpec.assertWmEnd {
-            isAppWindowInvisible(splitScreenApp.component)
-            isAppWindowVisible(nonResizeableApp.component)
-        }
-    }
-
-    @Presubmit
-    @Test
-    override fun visibleLayersShownMoreThanOneConsecutiveEntry() =
-            super.visibleLayersShownMoreThanOneConsecutiveEntry()
-
-    @Presubmit
-    @Test
-    override fun visibleWindowsShownMoreThanOneConsecutiveEntry() =
-            super.visibleWindowsShownMoreThanOneConsecutiveEntry()
-
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): Collection<FlickerTestParameter> {
-            return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests(
-                    repetitions = SplitScreenHelper.TEST_REPETITIONS,
-                    supportedRotations = listOf(Surface.ROTATION_0)) // b/178685668
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/LegacySplitScreenFromIntentSupportNonResizable.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/LegacySplitScreenFromIntentSupportNonResizable.kt
deleted file mode 100644
index 42e707a..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/LegacySplitScreenFromIntentSupportNonResizable.kt
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.legacysplitscreen
-
-import android.platform.test.annotations.Presubmit
-import android.view.Surface
-import androidx.test.filters.RequiresDevice
-import com.android.server.wm.flicker.FlickerParametersRunnerFactory
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.FlickerTestParameterFactory
-import com.android.server.wm.flicker.annotation.Group2
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.helpers.launchSplitScreen
-import com.android.server.wm.traces.common.FlickerComponentName
-import com.android.wm.shell.flicker.DOCKED_STACK_DIVIDER_COMPONENT
-import com.android.wm.shell.flicker.dockedStackDividerIsVisibleAtEnd
-import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.resetMultiWindowConfig
-import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.setSupportsNonResizableMultiWindow
-import com.android.wm.shell.flicker.helpers.SplitScreenHelper
-import org.junit.After
-import org.junit.Before
-import org.junit.FixMethodOrder
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/**
- * Test launch non-resizable activity via intent in split screen mode. When the device supports
- * non-resizable in multi window, it should show the non-resizable app in split screen.
- * To run this test: `atest WMShellFlickerTests:LegacySplitScreenFromIntentSupportNonResizable`
- */
-@RequiresDevice
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Group2
-class LegacySplitScreenFromIntentSupportNonResizable(
-    testSpec: FlickerTestParameter
-) : LegacySplitScreenTransition(testSpec) {
-
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            cleanSetup(this)
-            setup {
-                eachRun {
-                    splitScreenApp.launchViaIntent(wmHelper)
-                    device.launchSplitScreen(wmHelper)
-                }
-            }
-            transitions {
-                nonResizeableApp.launchViaIntent(wmHelper)
-                wmHelper.waitForAppTransitionIdle()
-            }
-        }
-
-    override val ignoredWindows: List<FlickerComponentName>
-        get() = listOf(DOCKED_STACK_DIVIDER_COMPONENT, LAUNCHER_COMPONENT, LETTERBOX_COMPONENT,
-            nonResizeableApp.component, splitScreenApp.component,
-            FlickerComponentName.SPLASH_SCREEN,
-            FlickerComponentName.SNAPSHOT)
-
-    @Before
-    override fun setup() {
-        super.setup()
-        setSupportsNonResizableMultiWindow(instrumentation, 1)
-    }
-
-    @After
-    override fun teardown() {
-        super.teardown()
-        resetMultiWindowConfig(instrumentation)
-    }
-
-    @Presubmit
-    @Test
-    fun nonResizableAppLayerBecomesVisible() {
-        testSpec.assertLayers {
-            this.isInvisible(nonResizeableApp.component)
-                    .then()
-                    .isVisible(nonResizeableApp.component)
-        }
-    }
-
-    /**
-     * Assets that [nonResizeableApp] doesn't exist at the start of the trace, then
-     * [nonResizeableApp] is created (visible or not) and, once [nonResizeableApp] becomes
-     * visible, it remains visible until the end of the trace.
-     */
-    @Presubmit
-    @Test
-    fun nonResizableAppWindowBecomesVisible() {
-        testSpec.assertWm {
-            this.notContains(nonResizeableApp.component)
-                    .then()
-                    // we log once per frame, upon logging, window may be visible or not depending
-                    // on what was processed until that moment. Both behaviors are correct
-                    .isAppWindowInvisible(nonResizeableApp.component, isOptional = true)
-                    .then()
-                    // immediately after the window (after onResume and before perform relayout)
-                    // the activity is invisible. This may or not be logged, since we record 1x
-                    // per frame, thus ignore activity check here
-                    .isAppWindowVisible(nonResizeableApp.component)
-        }
-    }
-
-    @Presubmit
-    @Test
-    fun dockedStackDividerIsVisibleAtEnd() = testSpec.dockedStackDividerIsVisibleAtEnd()
-
-    @Presubmit
-    @Test
-    fun bothAppsWindowsAreVisibleAtEnd() {
-        testSpec.assertWmEnd {
-            isAppWindowVisible(splitScreenApp.component)
-            isAppWindowVisible(nonResizeableApp.component)
-        }
-    }
-
-    @Presubmit
-    @Test
-    override fun visibleLayersShownMoreThanOneConsecutiveEntry() =
-            super.visibleLayersShownMoreThanOneConsecutiveEntry()
-
-    @Presubmit
-    @Test
-    override fun visibleWindowsShownMoreThanOneConsecutiveEntry() =
-            super.visibleWindowsShownMoreThanOneConsecutiveEntry()
-
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): Collection<FlickerTestParameter> {
-            return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests(
-                repetitions = SplitScreenHelper.TEST_REPETITIONS,
-                supportedRotations = listOf(Surface.ROTATION_0)) // b/178685668
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/LegacySplitScreenFromRecentNotSupportNonResizable.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/LegacySplitScreenFromRecentNotSupportNonResizable.kt
deleted file mode 100644
index c1fba7d..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/LegacySplitScreenFromRecentNotSupportNonResizable.kt
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.legacysplitscreen
-
-import android.platform.test.annotations.Presubmit
-import android.view.Surface
-import androidx.test.filters.FlakyTest
-import androidx.test.filters.RequiresDevice
-import com.android.server.wm.flicker.FlickerParametersRunnerFactory
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.FlickerTestParameterFactory
-import com.android.server.wm.flicker.annotation.Group2
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.helpers.launchSplitScreen
-import com.android.server.wm.flicker.helpers.reopenAppFromOverview
-import com.android.server.wm.traces.common.FlickerComponentName
-import com.android.wm.shell.flicker.DOCKED_STACK_DIVIDER_COMPONENT
-import com.android.wm.shell.flicker.dockedStackDividerNotExistsAtEnd
-import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.resetMultiWindowConfig
-import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.setSupportsNonResizableMultiWindow
-import com.android.wm.shell.flicker.helpers.SplitScreenHelper
-import org.junit.After
-import org.junit.Before
-import org.junit.FixMethodOrder
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/**
- * Test launch non-resizable activity via recent overview in split screen mode. When the device does
- * not support non-resizable in multi window, it should trigger exit split screen.
- * To run this test: `atest WMShellFlickerTests:LegacySplitScreenFromRecentNotSupportNonResizable`
- */
-@RequiresDevice
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Group2
-class LegacySplitScreenFromRecentNotSupportNonResizable(
-    testSpec: FlickerTestParameter
-) : LegacySplitScreenTransition(testSpec) {
-
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            cleanSetup(this)
-            setup {
-                eachRun {
-                    nonResizeableApp.launchViaIntent(wmHelper)
-                    splitScreenApp.launchViaIntent(wmHelper)
-                    device.launchSplitScreen(wmHelper)
-                }
-            }
-            transitions {
-                device.reopenAppFromOverview(wmHelper)
-            }
-        }
-
-    override val ignoredWindows: List<FlickerComponentName>
-        get() = listOf(DOCKED_STACK_DIVIDER_COMPONENT, LAUNCHER_COMPONENT, LETTERBOX_COMPONENT,
-            TOAST_COMPONENT, splitScreenApp.component, nonResizeableApp.component,
-            FlickerComponentName.SPLASH_SCREEN,
-            FlickerComponentName.SNAPSHOT)
-
-    @Before
-    override fun setup() {
-        super.setup()
-        setSupportsNonResizableMultiWindow(instrumentation, -1)
-    }
-
-    @After
-    override fun teardown() {
-        super.teardown()
-        resetMultiWindowConfig(instrumentation)
-    }
-
-    @Presubmit
-    @Test
-    fun resizableAppLayerBecomesInvisible() {
-        testSpec.assertLayers {
-            this.isVisible(splitScreenApp.component)
-                    .then()
-                    .isInvisible(splitScreenApp.component)
-        }
-    }
-
-    @Presubmit
-    @Test
-    fun nonResizableAppLayerBecomesVisible() {
-        testSpec.assertLayers {
-            this.isInvisible(nonResizeableApp.component)
-                    .then()
-                    .isVisible(nonResizeableApp.component)
-        }
-    }
-
-    @Presubmit
-    @Test
-    fun resizableAppWindowBecomesInvisible() {
-        testSpec.assertWm {
-            // when the activity gets PAUSED the window may still be marked as visible
-            // it will be updated in the next log entry. This occurs because we record 1x
-            // per frame, thus ignore activity check here
-            this.isAppWindowVisible(splitScreenApp.component)
-                    .then()
-                    // immediately after the window (after onResume and before perform relayout)
-                    // the activity is invisible. This may or not be logged, since we record 1x
-                    // per frame, thus ignore activity check here
-                    .isAppWindowInvisible(splitScreenApp.component)
-        }
-    }
-
-    @FlakyTest
-    @Test
-    fun nonResizableAppWindowBecomesVisible() {
-        testSpec.assertWm {
-            this.isAppWindowInvisible(nonResizeableApp.component)
-                    .then()
-                    .isAppWindowVisible(nonResizeableApp.component)
-        }
-    }
-
-    @Presubmit
-    @Test
-    fun dockedStackDividerNotExistsAtEnd() = testSpec.dockedStackDividerNotExistsAtEnd()
-
-    @Presubmit
-    @Test
-    fun onlyNonResizableAppWindowIsVisibleAtEnd() {
-        testSpec.assertWmEnd {
-            isAppWindowInvisible(splitScreenApp.component)
-            isAppWindowVisible(nonResizeableApp.component)
-        }
-    }
-
-    @Presubmit
-    @Test
-    override fun visibleLayersShownMoreThanOneConsecutiveEntry() =
-            super.visibleLayersShownMoreThanOneConsecutiveEntry()
-
-    @Presubmit
-    @Test
-    override fun visibleWindowsShownMoreThanOneConsecutiveEntry() =
-            super.visibleWindowsShownMoreThanOneConsecutiveEntry()
-
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): Collection<FlickerTestParameter> {
-            return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests(
-                repetitions = SplitScreenHelper.TEST_REPETITIONS,
-                supportedRotations = listOf(Surface.ROTATION_0)) // b/178685668
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/LegacySplitScreenFromRecentSupportNonResizable.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/LegacySplitScreenFromRecentSupportNonResizable.kt
deleted file mode 100644
index 6ac8683..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/LegacySplitScreenFromRecentSupportNonResizable.kt
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.legacysplitscreen
-
-import android.platform.test.annotations.Presubmit
-import android.view.Surface
-import androidx.test.filters.RequiresDevice
-import com.android.server.wm.flicker.FlickerParametersRunnerFactory
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.FlickerTestParameterFactory
-import com.android.server.wm.flicker.annotation.Group2
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.helpers.launchSplitScreen
-import com.android.server.wm.flicker.helpers.reopenAppFromOverview
-import com.android.server.wm.traces.common.FlickerComponentName
-import com.android.wm.shell.flicker.DOCKED_STACK_DIVIDER_COMPONENT
-import com.android.wm.shell.flicker.dockedStackDividerIsVisibleAtEnd
-import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.resetMultiWindowConfig
-import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.setSupportsNonResizableMultiWindow
-import com.android.wm.shell.flicker.helpers.SplitScreenHelper
-import org.junit.After
-import org.junit.Before
-import org.junit.FixMethodOrder
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/**
- * Test launch non-resizable activity via recent overview in split screen mode. When the device
- * supports non-resizable in multi window, it should show the non-resizable app in split screen.
- * To run this test: `atest WMShellFlickerTests:LegacySplitScreenFromRecentSupportNonResizable`
- */
-@RequiresDevice
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Group2
-class LegacySplitScreenFromRecentSupportNonResizable(
-    testSpec: FlickerTestParameter
-) : LegacySplitScreenTransition(testSpec) {
-
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            cleanSetup(this)
-            setup {
-                eachRun {
-                    nonResizeableApp.launchViaIntent(wmHelper)
-                    splitScreenApp.launchViaIntent(wmHelper)
-                    device.launchSplitScreen(wmHelper)
-                }
-            }
-            transitions {
-                device.reopenAppFromOverview(wmHelper)
-            }
-        }
-
-    override val ignoredWindows: List<FlickerComponentName>
-        get() = listOf(DOCKED_STACK_DIVIDER_COMPONENT, LAUNCHER_COMPONENT, LETTERBOX_COMPONENT,
-            TOAST_COMPONENT, splitScreenApp.component, nonResizeableApp.component,
-            FlickerComponentName.SPLASH_SCREEN,
-            FlickerComponentName.SNAPSHOT)
-
-    @Before
-    override fun setup() {
-        super.setup()
-        setSupportsNonResizableMultiWindow(instrumentation, 1)
-    }
-
-    @After
-    override fun teardown() {
-        super.teardown()
-        resetMultiWindowConfig(instrumentation)
-    }
-
-    @Presubmit
-    @Test
-    fun nonResizableAppLayerBecomesVisible() {
-        testSpec.assertLayers {
-            this.isInvisible(nonResizeableApp.component)
-                    .then()
-                    .isVisible(nonResizeableApp.component)
-        }
-    }
-
-    @Presubmit
-    @Test
-    fun nonResizableAppWindowBecomesVisible() {
-        testSpec.assertWm {
-            // when the app is launched, first the activity becomes visible, then the
-            // SnapshotStartingWindow appears and then the app window becomes visible.
-            // Because we log WM once per frame, sometimes the activity and the window
-            // become visible in the same entry, sometimes not, thus it is not possible to
-            // assert the visibility of the activity here
-            this.isAppWindowInvisible(nonResizeableApp.component)
-                    .then()
-                    // during re-parenting, the window may disappear and reappear from the
-                    // trace, this occurs because we log only 1x per frame
-                    .notContains(nonResizeableApp.component, isOptional = true)
-                    .then()
-                    // if the window reappears after re-parenting it will most likely not
-                    // be visible in the first log entry (because we log only 1x per frame)
-                    .isAppWindowInvisible(nonResizeableApp.component, isOptional = true)
-                    .then()
-                    .isAppWindowVisible(nonResizeableApp.component)
-        }
-    }
-
-    @Presubmit
-    @Test
-    fun dockedStackDividerIsVisibleAtEnd() = testSpec.dockedStackDividerIsVisibleAtEnd()
-
-    @Presubmit
-    @Test
-    fun bothAppsWindowsAreVisibleAtEnd() {
-        testSpec.assertWmEnd {
-            isAppWindowVisible(splitScreenApp.component)
-            isAppWindowVisible(nonResizeableApp.component)
-        }
-    }
-
-    @Presubmit
-    @Test
-    override fun visibleLayersShownMoreThanOneConsecutiveEntry() =
-            super.visibleLayersShownMoreThanOneConsecutiveEntry()
-
-    @Presubmit
-    @Test
-    override fun visibleWindowsShownMoreThanOneConsecutiveEntry() =
-            super.visibleWindowsShownMoreThanOneConsecutiveEntry()
-
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): Collection<FlickerTestParameter> {
-            return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests(
-                repetitions = SplitScreenHelper.TEST_REPETITIONS,
-                supportedRotations = listOf(Surface.ROTATION_0)) // b/178685668
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/LegacySplitScreenRotateTransition.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/LegacySplitScreenRotateTransition.kt
deleted file mode 100644
index b01f41c..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/LegacySplitScreenRotateTransition.kt
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.legacysplitscreen
-
-import android.view.Surface
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.helpers.openQuickStepAndClearRecentAppsFromOverview
-import com.android.server.wm.flicker.helpers.setRotation
-import com.android.server.wm.flicker.helpers.wakeUpAndGoToHomeScreen
-
-abstract class LegacySplitScreenRotateTransition(
-    testSpec: FlickerTestParameter
-) : LegacySplitScreenTransition(testSpec) {
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            setup {
-                eachRun {
-                    device.wakeUpAndGoToHomeScreen()
-                    device.openQuickStepAndClearRecentAppsFromOverview(wmHelper)
-                    secondaryApp.launchViaIntent(wmHelper)
-                    splitScreenApp.launchViaIntent(wmHelper)
-                }
-            }
-            teardown {
-                eachRun {
-                    splitScreenApp.exit(wmHelper)
-                    secondaryApp.exit(wmHelper)
-                    this.setRotation(Surface.ROTATION_0)
-                }
-            }
-        }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/LegacySplitScreenToLauncher.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/LegacySplitScreenToLauncher.kt
deleted file mode 100644
index fb1004b..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/LegacySplitScreenToLauncher.kt
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.flicker.legacysplitscreen
-
-import android.platform.test.annotations.Presubmit
-import android.view.Surface
-import androidx.test.filters.FlakyTest
-import androidx.test.filters.RequiresDevice
-import com.android.server.wm.flicker.FlickerParametersRunnerFactory
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.FlickerTestParameterFactory
-import com.android.server.wm.flicker.annotation.Group2
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.entireScreenCovered
-import com.android.server.wm.flicker.helpers.exitSplitScreen
-import com.android.server.wm.flicker.helpers.launchSplitScreen
-import com.android.server.wm.flicker.helpers.openQuickStepAndClearRecentAppsFromOverview
-import com.android.server.wm.flicker.helpers.setRotation
-import com.android.server.wm.flicker.helpers.wakeUpAndGoToHomeScreen
-import com.android.server.wm.flicker.navBarLayerIsVisible
-import com.android.server.wm.flicker.navBarLayerRotatesAndScales
-import com.android.server.wm.flicker.navBarWindowIsVisible
-import com.android.server.wm.flicker.statusBarLayerIsVisible
-import com.android.server.wm.flicker.statusBarLayerRotatesScales
-import com.android.server.wm.flicker.statusBarWindowIsVisible
-import com.android.server.wm.traces.common.FlickerComponentName
-import com.android.wm.shell.flicker.dockedStackDividerBecomesInvisible
-import com.android.wm.shell.flicker.helpers.SimpleAppHelper
-import org.junit.FixMethodOrder
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/**
- * Test open app to split screen.
- * To run this test: `atest WMShellFlickerTests:LegacySplitScreenToLauncher`
- */
-@RequiresDevice
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Group2
-class LegacySplitScreenToLauncher(
-    testSpec: FlickerTestParameter
-) : LegacySplitScreenTransition(testSpec) {
-    private val testApp = SimpleAppHelper(instrumentation)
-
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            setup {
-                test {
-                    device.wakeUpAndGoToHomeScreen()
-                    device.openQuickStepAndClearRecentAppsFromOverview(wmHelper)
-                }
-                eachRun {
-                    testApp.launchViaIntent(wmHelper)
-                    this.setRotation(testSpec.endRotation)
-                    device.launchSplitScreen(wmHelper)
-                    device.waitForIdle()
-                }
-            }
-            teardown {
-                eachRun {
-                    testApp.exit(wmHelper)
-                }
-            }
-            transitions {
-                device.exitSplitScreen()
-            }
-        }
-
-    override val ignoredWindows: List<FlickerComponentName>
-        get() = listOf(LAUNCHER_COMPONENT, FlickerComponentName.SPLASH_SCREEN,
-            FlickerComponentName.SNAPSHOT)
-
-    @Presubmit
-    @Test
-    fun navBarWindowIsVisible() = testSpec.navBarWindowIsVisible()
-
-    @Presubmit
-    @Test
-    fun statusBarWindowIsVisible() = testSpec.statusBarWindowIsVisible()
-
-    @Presubmit
-    @Test
-    fun navBarLayerIsVisible() = testSpec.navBarLayerIsVisible()
-
-    @Presubmit
-    @Test
-    fun entireScreenCovered() = testSpec.entireScreenCovered()
-
-    @Presubmit
-    @Test
-    fun navBarLayerRotatesAndScales() = testSpec.navBarLayerRotatesAndScales()
-
-    @FlakyTest(bugId = 206753786)
-    @Test
-    fun statusBarLayerRotatesScales() = testSpec.statusBarLayerRotatesScales()
-
-    @Presubmit
-    @Test
-    fun statusBarLayerIsVisible() = testSpec.statusBarLayerIsVisible()
-
-    @FlakyTest
-    @Test
-    fun dockedStackDividerBecomesInvisible() = testSpec.dockedStackDividerBecomesInvisible()
-
-    @FlakyTest
-    @Test
-    fun layerBecomesInvisible() {
-        testSpec.assertLayers {
-            this.isVisible(testApp.component)
-                    .then()
-                    .isInvisible(testApp.component)
-        }
-    }
-
-    @FlakyTest
-    @Test
-    fun focusDoesNotChange() {
-        testSpec.assertEventLog {
-            this.focusDoesNotChange()
-        }
-    }
-
-    @Presubmit
-    @Test
-    override fun visibleLayersShownMoreThanOneConsecutiveEntry() =
-            super.visibleLayersShownMoreThanOneConsecutiveEntry()
-
-    @Presubmit
-    @Test
-    override fun visibleWindowsShownMoreThanOneConsecutiveEntry() =
-            super.visibleWindowsShownMoreThanOneConsecutiveEntry()
-
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): Collection<FlickerTestParameter> {
-            // b/161435597 causes the test not to work on 90 degrees
-            return FlickerTestParameterFactory.getInstance()
-                .getConfigNonRotationTests(supportedRotations = listOf(Surface.ROTATION_0))
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/LegacySplitScreenTransition.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/LegacySplitScreenTransition.kt
deleted file mode 100644
index a4a1f61..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/LegacySplitScreenTransition.kt
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.flicker.legacysplitscreen
-
-import android.app.Instrumentation
-import android.content.Context
-import android.support.test.launcherhelper.LauncherStrategyFactory
-import android.view.Surface
-import androidx.test.filters.FlakyTest
-import androidx.test.platform.app.InstrumentationRegistry
-import com.android.server.wm.flicker.FlickerBuilderProvider
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.helpers.openQuickStepAndClearRecentAppsFromOverview
-import com.android.server.wm.flicker.helpers.setRotation
-import com.android.server.wm.flicker.helpers.wakeUpAndGoToHomeScreen
-import com.android.server.wm.traces.common.FlickerComponentName
-import com.android.wm.shell.flicker.helpers.BaseAppHelper.Companion.isShellTransitionsEnabled
-import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.getDevEnableNonResizableMultiWindow
-import com.android.wm.shell.flicker.helpers.MultiWindowHelper.Companion.setDevEnableNonResizableMultiWindow
-import com.android.wm.shell.flicker.helpers.SplitScreenHelper
-import org.junit.After
-import org.junit.Assume.assumeFalse
-import org.junit.Assume.assumeTrue
-import org.junit.Before
-import org.junit.Test
-
-abstract class LegacySplitScreenTransition(protected val testSpec: FlickerTestParameter) {
-    protected val instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation()
-    protected val context: Context = instrumentation.context
-    protected val splitScreenApp = SplitScreenHelper.getPrimary(instrumentation)
-    protected val secondaryApp = SplitScreenHelper.getSecondary(instrumentation)
-    protected val nonResizeableApp = SplitScreenHelper.getNonResizeable(instrumentation)
-    protected val LAUNCHER_COMPONENT = FlickerComponentName("",
-            LauncherStrategyFactory.getInstance(instrumentation)
-                    .launcherStrategy.supportedLauncherPackage)
-    private var prevDevEnableNonResizableMultiWindow = 0
-
-    @Before
-    open fun setup() {
-        // Only run legacy split tests when the system is using legacy split screen.
-        assumeTrue(SplitScreenHelper.isUsingLegacySplit())
-        // Legacy split is having some issue with Shell transition, and will be deprecated soon.
-        assumeFalse(isShellTransitionsEnabled())
-        prevDevEnableNonResizableMultiWindow = getDevEnableNonResizableMultiWindow(context)
-        if (prevDevEnableNonResizableMultiWindow != 0) {
-            // Turn off the development option
-            setDevEnableNonResizableMultiWindow(context, 0)
-        }
-    }
-
-    @After
-    open fun teardown() {
-        setDevEnableNonResizableMultiWindow(context, prevDevEnableNonResizableMultiWindow)
-    }
-
-    /**
-     * List of windows that are ignored when verifying that visible elements appear on 2
-     * consecutive entries in the trace.
-     *
-     * b/182720234
-     */
-    open val ignoredWindows: List<FlickerComponentName> = listOf(
-        FlickerComponentName.SPLASH_SCREEN,
-        FlickerComponentName.SNAPSHOT)
-
-    protected open val transition: FlickerBuilder.() -> Unit
-        get() = {
-            setup {
-                eachRun {
-                    device.wakeUpAndGoToHomeScreen()
-                    device.openQuickStepAndClearRecentAppsFromOverview(wmHelper)
-                    secondaryApp.launchViaIntent(wmHelper)
-                    splitScreenApp.launchViaIntent(wmHelper)
-                    this.setRotation(testSpec.startRotation)
-                }
-            }
-            teardown {
-                eachRun {
-                    secondaryApp.exit(wmHelper)
-                    splitScreenApp.exit(wmHelper)
-                    this.setRotation(Surface.ROTATION_0)
-                }
-            }
-        }
-
-    @FlickerBuilderProvider
-    fun buildFlicker(): FlickerBuilder {
-        return FlickerBuilder(instrumentation).apply {
-            transition(this)
-        }
-    }
-
-    internal open val cleanSetup: FlickerBuilder.() -> Unit
-        get() = {
-            setup {
-                eachRun {
-                    device.wakeUpAndGoToHomeScreen()
-                    device.openQuickStepAndClearRecentAppsFromOverview(wmHelper)
-                    this.setRotation(testSpec.startRotation)
-                }
-            }
-            teardown {
-                eachRun {
-                    nonResizeableApp.exit(wmHelper)
-                    splitScreenApp.exit(wmHelper)
-                    device.pressHome()
-                    this.setRotation(Surface.ROTATION_0)
-                }
-            }
-        }
-
-    @FlakyTest(bugId = 178447631)
-    @Test
-    open fun visibleWindowsShownMoreThanOneConsecutiveEntry() {
-        testSpec.assertWm {
-            this.visibleWindowsShownMoreThanOneConsecutiveEntry(ignoredWindows)
-        }
-    }
-
-    @FlakyTest(bugId = 178447631)
-    @Test
-    open fun visibleLayersShownMoreThanOneConsecutiveEntry() {
-        testSpec.assertLayers {
-            this.visibleLayersShownMoreThanOneConsecutiveEntry(ignoredWindows)
-        }
-    }
-
-    companion object {
-        internal val LIVE_WALLPAPER_COMPONENT = FlickerComponentName("",
-            "com.breel.wallpapers18.soundviz.wallpaper.variations.SoundVizWallpaperV2")
-        internal val LETTERBOX_COMPONENT = FlickerComponentName("", "Letterbox")
-        internal val TOAST_COMPONENT = FlickerComponentName("", "Toast")
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/OWNERS b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/OWNERS
deleted file mode 100644
index 8446b37..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-# window manager > wm shell > Split Screen
-# Bug component: 928697
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/OpenAppToLegacySplitScreen.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/OpenAppToLegacySplitScreen.kt
deleted file mode 100644
index 087b21c..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/OpenAppToLegacySplitScreen.kt
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.flicker.legacysplitscreen
-
-import android.platform.test.annotations.Presubmit
-import android.view.Surface
-import androidx.test.filters.FlakyTest
-import androidx.test.filters.RequiresDevice
-import com.android.server.wm.flicker.FlickerParametersRunnerFactory
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.FlickerTestParameterFactory
-import com.android.server.wm.flicker.annotation.Group2
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.entireScreenCovered
-import com.android.server.wm.flicker.helpers.launchSplitScreen
-import com.android.server.wm.flicker.statusBarLayerIsVisible
-import com.android.server.wm.traces.common.FlickerComponentName
-import com.android.wm.shell.flicker.appPairsDividerBecomesVisible
-import com.android.wm.shell.flicker.helpers.SplitScreenHelper
-import org.junit.FixMethodOrder
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/**
- * Test open app to split screen.
- * To run this test: `atest WMShellFlickerTests:OpenAppToLegacySplitScreen`
- */
-@RequiresDevice
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Group2
-class OpenAppToLegacySplitScreen(
-    testSpec: FlickerTestParameter
-) : LegacySplitScreenTransition(testSpec) {
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            super.transition(this)
-            transitions {
-                device.launchSplitScreen(wmHelper)
-                wmHelper.waitForAppTransitionIdle()
-            }
-        }
-
-    override val ignoredWindows: List<FlickerComponentName>
-        get() = listOf(LAUNCHER_COMPONENT, splitScreenApp.component,
-            FlickerComponentName.SPLASH_SCREEN,
-            FlickerComponentName.SNAPSHOT)
-
-    @FlakyTest
-    @Test
-    fun appWindowBecomesVisible() {
-        testSpec.assertWm {
-            this.isAppWindowInvisible(splitScreenApp.component)
-                    .then()
-                    .isAppWindowVisible(splitScreenApp.component)
-        }
-    }
-
-    @Presubmit
-    @Test
-    fun entireScreenCovered() = testSpec.entireScreenCovered()
-
-    @Presubmit
-    @Test
-    fun statusBarLayerIsVisible() = testSpec.statusBarLayerIsVisible()
-
-    @Presubmit
-    @Test
-    fun appPairsDividerBecomesVisible() = testSpec.appPairsDividerBecomesVisible()
-
-    @FlakyTest
-    @Test
-    fun layerBecomesVisible() {
-        testSpec.assertLayers {
-            this.isInvisible(splitScreenApp.component)
-                    .then()
-                    .isVisible(splitScreenApp.component)
-        }
-    }
-
-    @Presubmit
-    @Test
-    fun focusChanges() {
-        testSpec.assertEventLog {
-            this.focusChanges(splitScreenApp.`package`,
-                    "recents_animation_input_consumer", "NexusLauncherActivity")
-        }
-    }
-
-    @Presubmit
-    @Test
-    override fun visibleWindowsShownMoreThanOneConsecutiveEntry() =
-            super.visibleWindowsShownMoreThanOneConsecutiveEntry()
-
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): Collection<FlickerTestParameter> {
-            return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests(
-                repetitions = SplitScreenHelper.TEST_REPETITIONS,
-                supportedRotations = listOf(Surface.ROTATION_0) // bugId = 179116910
-            )
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/ResizeLegacySplitScreen.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/ResizeLegacySplitScreen.kt
deleted file mode 100644
index e2da1a4..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/ResizeLegacySplitScreen.kt
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.flicker.legacysplitscreen
-
-import android.util.Rational
-import android.view.Surface
-import androidx.test.filters.FlakyTest
-import androidx.test.filters.RequiresDevice
-import androidx.test.uiautomator.By
-import com.android.server.wm.flicker.FlickerParametersRunnerFactory
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.FlickerTestParameterFactory
-import com.android.server.wm.flicker.annotation.Group2
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.entireScreenCovered
-import com.android.server.wm.flicker.helpers.ImeAppHelper
-import com.android.server.wm.flicker.helpers.WindowUtils
-import com.android.server.wm.flicker.helpers.launchSplitScreen
-import com.android.server.wm.flicker.helpers.resizeSplitScreen
-import com.android.server.wm.flicker.helpers.setRotation
-import com.android.server.wm.flicker.helpers.wakeUpAndGoToHomeScreen
-import com.android.server.wm.flicker.navBarLayerIsVisible
-import com.android.server.wm.flicker.navBarLayerRotatesAndScales
-import com.android.server.wm.flicker.navBarWindowIsVisible
-import com.android.server.wm.flicker.statusBarLayerIsVisible
-import com.android.server.wm.flicker.statusBarLayerRotatesScales
-import com.android.server.wm.flicker.statusBarWindowIsVisible
-import com.android.server.wm.traces.common.region.Region
-import com.android.server.wm.traces.parser.toFlickerComponent
-import com.android.wm.shell.flicker.DOCKED_STACK_DIVIDER_COMPONENT
-import com.android.wm.shell.flicker.helpers.SimpleAppHelper
-import com.android.wm.shell.flicker.testapp.Components
-import org.junit.FixMethodOrder
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/**
- * Test split screen resizing window transitions.
- * To run this test: `atest WMShellFlickerTests:ResizeLegacySplitScreen`
- *
- * Currently it runs only in 0 degrees because of b/156100803
- */
-@RequiresDevice
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@FlakyTest(bugId = 159096424)
-@Group2
-class ResizeLegacySplitScreen(
-    testSpec: FlickerTestParameter
-) : LegacySplitScreenTransition(testSpec) {
-    private val testAppTop = SimpleAppHelper(instrumentation)
-    private val testAppBottom = ImeAppHelper(instrumentation)
-
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            setup {
-                eachRun {
-                    device.wakeUpAndGoToHomeScreen()
-                    this.setRotation(testSpec.startRotation)
-                    this.launcherStrategy.clearRecentAppsFromOverview()
-                    testAppBottom.launchViaIntent(wmHelper)
-                    device.pressHome()
-                    testAppTop.launchViaIntent(wmHelper)
-                    device.waitForIdle()
-                    device.launchSplitScreen(wmHelper)
-                    val snapshot =
-                        device.findObject(By.res(device.launcherPackageName, "snapshot"))
-                    snapshot.click()
-                    testAppBottom.openIME(device)
-                    device.pressBack()
-                    device.resizeSplitScreen(startRatio)
-                }
-            }
-            teardown {
-                eachRun {
-                    testAppTop.exit(wmHelper)
-                    testAppBottom.exit(wmHelper)
-                }
-            }
-            transitions {
-                device.resizeSplitScreen(stopRatio)
-            }
-        }
-
-    @Test
-    fun navBarWindowIsVisible() = testSpec.navBarWindowIsVisible()
-
-    @Test
-    fun statusBarWindowIsVisible() = testSpec.statusBarWindowIsVisible()
-
-    @FlakyTest(bugId = 156223549)
-    @Test
-    fun topAppWindowIsAlwaysVisible() {
-        testSpec.assertWm {
-            this.isAppWindowVisible(Components.SimpleActivity.COMPONENT.toFlickerComponent())
-        }
-    }
-
-    @FlakyTest(bugId = 156223549)
-    @Test
-    fun bottomAppWindowIsAlwaysVisible() {
-        testSpec.assertWm {
-            this.isAppWindowVisible(Components.ImeActivity.COMPONENT.toFlickerComponent())
-        }
-    }
-
-    @Test
-    fun navBarLayerIsVisible() = testSpec.navBarLayerIsVisible()
-
-    @Test
-    fun statusBarLayerIsVisible() = testSpec.statusBarLayerIsVisible()
-
-    @Test
-    fun entireScreenCovered() = testSpec.entireScreenCovered()
-
-    @Test
-    fun navBarLayerRotatesAndScales() = testSpec.navBarLayerRotatesAndScales()
-
-    @FlakyTest(bugId = 206753786)
-    @Test
-    fun statusBarLayerRotatesScales() = testSpec.statusBarLayerRotatesScales()
-
-    @Test
-    fun topAppLayerIsAlwaysVisible() {
-        testSpec.assertLayers {
-            this.isVisible(Components.SimpleActivity.COMPONENT.toFlickerComponent())
-        }
-    }
-
-    @Test
-    fun bottomAppLayerIsAlwaysVisible() {
-        testSpec.assertLayers {
-            this.isVisible(Components.ImeActivity.COMPONENT.toFlickerComponent())
-        }
-    }
-
-    @Test
-    fun dividerLayerIsAlwaysVisible() {
-        testSpec.assertLayers {
-            this.isVisible(DOCKED_STACK_DIVIDER_COMPONENT)
-        }
-    }
-
-    @FlakyTest
-    @Test
-    fun appsStartingBounds() {
-        testSpec.assertLayersStart {
-            val displayBounds = WindowUtils.displayBounds
-            val dividerBounds =
-                layer(DOCKED_STACK_DIVIDER_COMPONENT).visibleRegion.region.bounds
-
-            val topAppBounds = Region.from(0, 0, dividerBounds.right,
-                dividerBounds.top + WindowUtils.dockedStackDividerInset)
-            val bottomAppBounds = Region.from(0,
-                dividerBounds.bottom - WindowUtils.dockedStackDividerInset,
-                displayBounds.right,
-                displayBounds.bottom - WindowUtils.navigationBarFrameHeight)
-            visibleRegion(Components.SimpleActivity.COMPONENT.toFlickerComponent())
-                .coversExactly(topAppBounds)
-            visibleRegion(Components.ImeActivity.COMPONENT.toFlickerComponent())
-                .coversExactly(bottomAppBounds)
-        }
-    }
-
-    @FlakyTest
-    @Test
-    fun appsEndingBounds() {
-        testSpec.assertLayersStart {
-            val displayBounds = WindowUtils.displayBounds
-            val dividerBounds =
-                layer(DOCKED_STACK_DIVIDER_COMPONENT).visibleRegion.region.bounds
-
-            val topAppBounds = Region.from(0, 0, dividerBounds.right,
-                dividerBounds.top + WindowUtils.dockedStackDividerInset)
-            val bottomAppBounds = Region.from(0,
-                dividerBounds.bottom - WindowUtils.dockedStackDividerInset,
-                displayBounds.right,
-                displayBounds.bottom - WindowUtils.navigationBarFrameHeight)
-
-            visibleRegion(Components.SimpleActivity.COMPONENT.toFlickerComponent())
-                .coversExactly(topAppBounds)
-            visibleRegion(Components.ImeActivity.COMPONENT.toFlickerComponent())
-                .coversExactly(bottomAppBounds)
-        }
-    }
-
-    @Test
-    fun focusDoesNotChange() {
-        testSpec.assertEventLog {
-            focusDoesNotChange()
-        }
-    }
-
-    companion object {
-        private val startRatio = Rational(1, 3)
-        private val stopRatio = Rational(2, 3)
-
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): Collection<FlickerTestParameter> {
-            return FlickerTestParameterFactory.getInstance()
-                .getConfigNonRotationTests(supportedRotations = listOf(Surface.ROTATION_0))
-                .map {
-                    val description = (startRatio.toString().replace("/", "-") + "_to_" +
-                        stopRatio.toString().replace("/", "-"))
-                    val newName = "${FlickerTestParameter.defaultName(it)}_$description"
-                    FlickerTestParameter(it.config, nameOverride = newName)
-                }
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/RotateOneLaunchedAppAndEnterSplitScreen.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/RotateOneLaunchedAppAndEnterSplitScreen.kt
deleted file mode 100644
index d703ea0..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/RotateOneLaunchedAppAndEnterSplitScreen.kt
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.flicker.legacysplitscreen
-
-import android.platform.test.annotations.Presubmit
-import android.view.Surface
-import androidx.test.filters.FlakyTest
-import androidx.test.filters.RequiresDevice
-import com.android.server.wm.flicker.FlickerParametersRunnerFactory
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.FlickerTestParameterFactory
-import com.android.server.wm.flicker.annotation.Group2
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.helpers.launchSplitScreen
-import com.android.server.wm.flicker.helpers.setRotation
-import com.android.server.wm.flicker.navBarLayerRotatesAndScales
-import com.android.server.wm.flicker.navBarWindowIsVisible
-import com.android.server.wm.flicker.statusBarLayerRotatesScales
-import com.android.server.wm.flicker.statusBarWindowIsVisible
-import com.android.wm.shell.flicker.dockedStackDividerIsVisibleAtEnd
-import com.android.wm.shell.flicker.dockedStackPrimaryBoundsIsVisibleAtEnd
-import com.android.wm.shell.flicker.helpers.SplitScreenHelper
-import org.junit.FixMethodOrder
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/**
- * Test dock activity to primary split screen and rotate
- * To run this test: `atest WMShellFlickerTests:RotateOneLaunchedAppAndEnterSplitScreen`
- */
-@RequiresDevice
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Group2
-class RotateOneLaunchedAppAndEnterSplitScreen(
-    testSpec: FlickerTestParameter
-) : LegacySplitScreenRotateTransition(testSpec) {
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            super.transition(this)
-            transitions {
-                device.launchSplitScreen(wmHelper)
-                this.setRotation(testSpec.startRotation)
-            }
-        }
-
-    @Presubmit
-    @Test
-    fun dockedStackDividerIsVisibleAtEnd() = testSpec.dockedStackDividerIsVisibleAtEnd()
-
-    @Presubmit
-    @Test
-    fun dockedStackPrimaryBoundsIsVisibleAtEnd() =
-        testSpec.dockedStackPrimaryBoundsIsVisibleAtEnd(testSpec.startRotation,
-            splitScreenApp.component)
-
-    @Presubmit
-    @Test
-    fun navBarLayerRotatesAndScales() = testSpec.navBarLayerRotatesAndScales()
-
-    @FlakyTest(bugId = 206753786)
-    @Test
-    fun statusBarLayerRotatesScales() = testSpec.statusBarLayerRotatesScales()
-
-    @Presubmit
-    @Test
-    fun navBarWindowIsVisible() = testSpec.navBarWindowIsVisible()
-
-    @Presubmit
-    @Test
-    fun statusBarWindowIsVisible() = testSpec.statusBarWindowIsVisible()
-
-    @FlakyTest
-    @Test
-    fun appWindowBecomesVisible() {
-        testSpec.assertWm {
-            this.isAppWindowInvisible(splitScreenApp.component)
-                    .then()
-                    .isAppWindowVisible(splitScreenApp.component)
-        }
-    }
-
-    @Presubmit
-    @Test
-    override fun visibleWindowsShownMoreThanOneConsecutiveEntry() =
-            super.visibleWindowsShownMoreThanOneConsecutiveEntry()
-
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): Collection<FlickerTestParameter> {
-            return FlickerTestParameterFactory.getInstance()
-                .getConfigNonRotationTests(repetitions = SplitScreenHelper.TEST_REPETITIONS,
-                    supportedRotations = listOf(Surface.ROTATION_0)) // b/178685668
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/RotateOneLaunchedAppInSplitScreenMode.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/RotateOneLaunchedAppInSplitScreenMode.kt
deleted file mode 100644
index 6b18839..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/RotateOneLaunchedAppInSplitScreenMode.kt
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.flicker.legacysplitscreen
-
-import android.platform.test.annotations.Presubmit
-import android.view.Surface
-import androidx.test.filters.FlakyTest
-import androidx.test.filters.RequiresDevice
-import com.android.server.wm.flicker.FlickerParametersRunnerFactory
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.FlickerTestParameterFactory
-import com.android.server.wm.flicker.annotation.Group2
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.helpers.launchSplitScreen
-import com.android.server.wm.flicker.helpers.setRotation
-import com.android.server.wm.flicker.navBarLayerRotatesAndScales
-import com.android.server.wm.flicker.navBarWindowIsVisible
-import com.android.server.wm.flicker.statusBarLayerRotatesScales
-import com.android.server.wm.flicker.statusBarWindowIsVisible
-import com.android.wm.shell.flicker.dockedStackDividerIsVisibleAtEnd
-import com.android.wm.shell.flicker.dockedStackPrimaryBoundsIsVisibleAtEnd
-import com.android.wm.shell.flicker.helpers.SplitScreenHelper
-import org.junit.FixMethodOrder
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/**
- * Rotate
- * To run this test: `atest WMShellFlickerTests:RotateOneLaunchedAppInSplitScreenMode`
- */
-@RequiresDevice
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Group2
-class RotateOneLaunchedAppInSplitScreenMode(
-    testSpec: FlickerTestParameter
-) : LegacySplitScreenRotateTransition(testSpec) {
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            super.transition(this)
-            transitions {
-                this.setRotation(testSpec.startRotation)
-                device.launchSplitScreen(wmHelper)
-            }
-        }
-
-    @Presubmit
-    @Test
-    fun dockedStackDividerIsVisibleAtEnd() = testSpec.dockedStackDividerIsVisibleAtEnd()
-
-    @Presubmit
-    @Test
-    fun dockedStackPrimaryBoundsIsVisibleAtEnd() = testSpec.dockedStackPrimaryBoundsIsVisibleAtEnd(
-        testSpec.startRotation, splitScreenApp.component)
-
-    @Presubmit
-    @Test
-    fun navBarLayerRotatesAndScales() = testSpec.navBarLayerRotatesAndScales()
-
-    @FlakyTest(bugId = 206753786)
-    @Test
-    fun statusBarLayerRotatesScales() = testSpec.statusBarLayerRotatesScales()
-
-    @Presubmit
-    @Test
-    fun navBarWindowIsVisible() = testSpec.navBarWindowIsVisible()
-
-    @Presubmit
-    @Test
-    fun statusBarWindowIsVisible() = testSpec.statusBarWindowIsVisible()
-
-    @FlakyTest
-    @Test
-    fun appWindowBecomesVisible() {
-        testSpec.assertWm {
-            this.isAppWindowInvisible(splitScreenApp.component)
-                    .then()
-                    .isAppWindowVisible(splitScreenApp.component)
-        }
-    }
-
-    @Presubmit
-    @Test
-    override fun visibleWindowsShownMoreThanOneConsecutiveEntry() =
-            super.visibleWindowsShownMoreThanOneConsecutiveEntry()
-
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): Collection<FlickerTestParameter> {
-            return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests(
-                repetitions = SplitScreenHelper.TEST_REPETITIONS,
-                supportedRotations = listOf(Surface.ROTATION_0)) // b/178685668
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/RotateTwoLaunchedAppAndEnterSplitScreen.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/RotateTwoLaunchedAppAndEnterSplitScreen.kt
deleted file mode 100644
index acd658b..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/RotateTwoLaunchedAppAndEnterSplitScreen.kt
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.flicker.legacysplitscreen
-
-import android.platform.test.annotations.Presubmit
-import android.view.Surface
-import androidx.test.filters.FlakyTest
-import androidx.test.filters.RequiresDevice
-import com.android.server.wm.flicker.FlickerParametersRunnerFactory
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.FlickerTestParameterFactory
-import com.android.server.wm.flicker.annotation.Group2
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.helpers.launchSplitScreen
-import com.android.server.wm.flicker.helpers.reopenAppFromOverview
-import com.android.server.wm.flicker.helpers.setRotation
-import com.android.server.wm.flicker.navBarLayerRotatesAndScales
-import com.android.server.wm.flicker.navBarWindowIsVisible
-import com.android.server.wm.flicker.statusBarLayerRotatesScales
-import com.android.server.wm.flicker.statusBarWindowIsVisible
-import com.android.wm.shell.flicker.dockedStackDividerIsVisibleAtEnd
-import com.android.wm.shell.flicker.dockedStackPrimaryBoundsIsVisibleAtEnd
-import com.android.wm.shell.flicker.dockedStackSecondaryBoundsIsVisibleAtEnd
-import com.android.wm.shell.flicker.helpers.SplitScreenHelper
-import org.junit.FixMethodOrder
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/**
- * Test open app to split screen.
- * To run this test: `atest WMShellFlickerTests:RotateTwoLaunchedAppAndEnterSplitScreen`
- */
-@RequiresDevice
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Group2
-class RotateTwoLaunchedAppAndEnterSplitScreen(
-    testSpec: FlickerTestParameter
-) : LegacySplitScreenRotateTransition(testSpec) {
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            super.transition(this)
-            transitions {
-                this.setRotation(testSpec.startRotation)
-                device.launchSplitScreen(wmHelper)
-                device.reopenAppFromOverview(wmHelper)
-            }
-        }
-
-    @Presubmit
-    @Test
-    fun dockedStackDividerIsVisibleAtEnd() = testSpec.dockedStackDividerIsVisibleAtEnd()
-
-    @Presubmit
-    @Test
-    fun dockedStackPrimaryBoundsIsVisibleAtEnd() =
-        testSpec.dockedStackPrimaryBoundsIsVisibleAtEnd(testSpec.startRotation,
-            splitScreenApp.component)
-
-    @Presubmit
-    @Test
-    fun dockedStackSecondaryBoundsIsVisibleAtEnd() =
-        testSpec.dockedStackSecondaryBoundsIsVisibleAtEnd(testSpec.startRotation,
-            secondaryApp.component)
-
-    @Presubmit
-    @Test
-    fun navBarLayerRotatesAndScales() = testSpec.navBarLayerRotatesAndScales()
-
-    @FlakyTest(bugId = 206753786)
-    @Test
-    fun statusBarLayerRotatesScales() = testSpec.statusBarLayerRotatesScales()
-
-    @Presubmit
-    @Test
-    fun appWindowBecomesVisible() {
-        testSpec.assertWm {
-            // when the app is launched, first the activity becomes visible, then the
-            // SnapshotStartingWindow appears and then the app window becomes visible.
-            // Because we log WM once per frame, sometimes the activity and the window
-            // become visible in the same entry, sometimes not, thus it is not possible to
-            // assert the visibility of the activity here
-            this.isAppWindowInvisible(secondaryApp.component)
-                    .then()
-                    // during re-parenting, the window may disappear and reappear from the
-                    // trace, this occurs because we log only 1x per frame
-                    .notContains(secondaryApp.component, isOptional = true)
-                    .then()
-                    // if the window reappears after re-parenting it will most likely not
-                    // be visible in the first log entry (because we log only 1x per frame)
-                    .isAppWindowInvisible(secondaryApp.component, isOptional = true)
-                    .then()
-                    .isAppWindowVisible(secondaryApp.component)
-        }
-    }
-
-    @Presubmit
-    @Test
-    fun navBarWindowIsVisible() = testSpec.navBarWindowIsVisible()
-
-    @Presubmit
-    @Test
-    fun statusBarWindowIsVisible() = testSpec.statusBarWindowIsVisible()
-
-    @Presubmit
-    @Test
-    override fun visibleWindowsShownMoreThanOneConsecutiveEntry() =
-            super.visibleWindowsShownMoreThanOneConsecutiveEntry()
-
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): Collection<FlickerTestParameter> {
-            return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests(
-                repetitions = SplitScreenHelper.TEST_REPETITIONS,
-                supportedRotations = listOf(Surface.ROTATION_0)) // b/178685668
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/RotateTwoLaunchedAppInSplitScreenMode.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/RotateTwoLaunchedAppInSplitScreenMode.kt
deleted file mode 100644
index b40be8b..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/legacysplitscreen/RotateTwoLaunchedAppInSplitScreenMode.kt
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.flicker.legacysplitscreen
-
-import android.platform.test.annotations.Presubmit
-import android.view.Surface
-import androidx.test.filters.FlakyTest
-import androidx.test.filters.RequiresDevice
-import com.android.server.wm.flicker.FlickerParametersRunnerFactory
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.FlickerTestParameterFactory
-import com.android.server.wm.flicker.annotation.Group2
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.helpers.launchSplitScreen
-import com.android.server.wm.flicker.helpers.reopenAppFromOverview
-import com.android.server.wm.flicker.helpers.setRotation
-import com.android.server.wm.flicker.navBarLayerRotatesAndScales
-import com.android.server.wm.flicker.navBarWindowIsVisible
-import com.android.server.wm.flicker.statusBarLayerRotatesScales
-import com.android.server.wm.flicker.statusBarWindowIsVisible
-import com.android.wm.shell.flicker.dockedStackDividerIsVisibleAtEnd
-import com.android.wm.shell.flicker.dockedStackPrimaryBoundsIsVisibleAtEnd
-import com.android.wm.shell.flicker.dockedStackSecondaryBoundsIsVisibleAtEnd
-import com.android.wm.shell.flicker.helpers.SplitScreenHelper
-import org.junit.FixMethodOrder
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/**
- * Test open app to split screen.
- * To run this test: `atest WMShellFlickerTests:RotateTwoLaunchedAppInSplitScreenMode`
- */
-@RequiresDevice
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Group2
-class RotateTwoLaunchedAppInSplitScreenMode(
-    testSpec: FlickerTestParameter
-) : LegacySplitScreenRotateTransition(testSpec) {
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            super.transition(this)
-            setup {
-                eachRun {
-                    device.launchSplitScreen(wmHelper)
-                    device.reopenAppFromOverview(wmHelper)
-                    this.setRotation(testSpec.startRotation)
-                }
-            }
-            transitions {
-                this.setRotation(testSpec.startRotation)
-            }
-        }
-
-    @Presubmit
-    @Test
-    fun dockedStackDividerIsVisibleAtEnd() = testSpec.dockedStackDividerIsVisibleAtEnd()
-
-    @Presubmit
-    @Test
-    fun dockedStackPrimaryBoundsIsVisibleAtEnd() =
-        testSpec.dockedStackPrimaryBoundsIsVisibleAtEnd(testSpec.startRotation,
-            splitScreenApp.component)
-
-    @Presubmit
-    @Test
-    fun dockedStackSecondaryBoundsIsVisibleAtEnd() =
-        testSpec.dockedStackSecondaryBoundsIsVisibleAtEnd(testSpec.startRotation,
-            secondaryApp.component)
-
-    @Presubmit
-    @Test
-    fun navBarLayerRotatesAndScales() = testSpec.navBarLayerRotatesAndScales()
-
-    @FlakyTest(bugId = 206753786)
-    @Test
-    fun statusBarLayerRotatesScales() = testSpec.statusBarLayerRotatesScales()
-
-    @FlakyTest
-    @Test
-    fun appWindowBecomesVisible() {
-        testSpec.assertWm {
-            this.isAppWindowInvisible(secondaryApp.component)
-                    .then()
-                    .isAppWindowVisible(secondaryApp.component)
-        }
-    }
-
-    @Presubmit
-    @Test
-    fun navBarWindowIsVisible() = testSpec.navBarWindowIsVisible()
-
-    @Presubmit
-    @Test
-    fun statusBarWindowIsVisible() = testSpec.statusBarWindowIsVisible()
-
-    @Presubmit
-    @Test
-    override fun visibleLayersShownMoreThanOneConsecutiveEntry() =
-            super.visibleLayersShownMoreThanOneConsecutiveEntry()
-
-    @Presubmit
-    @Test
-    override fun visibleWindowsShownMoreThanOneConsecutiveEntry() =
-            super.visibleWindowsShownMoreThanOneConsecutiveEntry()
-
-    companion object {
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): Collection<FlickerTestParameter> {
-            return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests(
-                repetitions = SplitScreenHelper.TEST_REPETITIONS,
-                supportedRotations = listOf(Surface.ROTATION_0)) // b/178685668
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/AutoEnterPipOnGoToHomeTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/AutoEnterPipOnGoToHomeTest.kt
new file mode 100644
index 0000000..ce624f2
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/AutoEnterPipOnGoToHomeTest.kt
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.flicker.pip
+
+import android.platform.test.annotations.FlakyTest
+import androidx.test.filters.RequiresDevice
+import com.android.launcher3.tapl.LauncherInstrumentation
+import com.android.server.wm.flicker.FlickerParametersRunnerFactory
+import com.android.server.wm.flicker.FlickerTestParameter
+import com.android.server.wm.flicker.annotation.Group3
+import com.android.server.wm.flicker.dsl.FlickerBuilder
+import org.junit.Assume
+import org.junit.FixMethodOrder
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.MethodSorters
+import org.junit.runners.Parameterized
+
+/**
+ * Test entering pip from an app via auto-enter property when navigating to home.
+ *
+ * To run this test: `atest WMShellFlickerTests:AutoEnterPipOnGoToHomeTest`
+ *
+ * Actions:
+ *     Launch an app in full screen
+ *     Select "Auto-enter PiP" radio button
+ *     Press Home button or swipe up to go Home and put [pipApp] in pip mode
+ *
+ * Notes:
+ *     1. All assertions are inherited from [EnterPipTest]
+ *     2. Part of the test setup occurs automatically via
+ *        [com.android.server.wm.flicker.TransitionRunnerWithRules],
+ *        including configuring navigation mode, initial orientation and ensuring no
+ *        apps are running before setup
+ */
+@RequiresDevice
+@RunWith(Parameterized::class)
+@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+@FlakyTest(bugId = 238367575)
+@Group3
+class AutoEnterPipOnGoToHomeTest(testSpec: FlickerTestParameter) : EnterPipTest(testSpec) {
+    protected val taplInstrumentation = LauncherInstrumentation()
+    /**
+     * Defines the transition used to run the test
+     */
+    override val transition: FlickerBuilder.() -> Unit
+        get() = {
+            setupAndTeardown(this)
+            setup {
+                eachRun {
+                    pipApp.launchViaIntent(wmHelper)
+                    pipApp.enableAutoEnterForPipActivity()
+                }
+            }
+            teardown {
+                eachRun {
+                    // close gracefully so that onActivityUnpinned() can be called before force exit
+                    pipApp.closePipWindow(wmHelper)
+                    pipApp.exit(wmHelper)
+                }
+            }
+            transitions {
+                taplInstrumentation.goHome()
+            }
+        }
+
+    override fun pipLayerReduces() {
+        val layerName = pipApp.component.toLayerName()
+        testSpec.assertLayers {
+            val pipLayerList = this.layers { it.name.contains(layerName) && it.isVisible }
+            pipLayerList.zipWithNext { previous, current ->
+                current.visibleRegion.notBiggerThan(previous.visibleRegion.region)
+            }
+        }
+    }
+
+    /**
+     * Checks that [pipApp] window is animated towards default position in right bottom corner
+     */
+    @Test
+    fun pipLayerMovesTowardsRightBottomCorner() {
+        // in gestural nav the swipe makes PiP first go upwards
+        Assume.assumeFalse(testSpec.isGesturalNavigation)
+        val layerName = pipApp.component.toLayerName()
+        testSpec.assertLayers {
+            val pipLayerList = this.layers { it.name.contains(layerName) && it.isVisible }
+            // Pip animates towards the right bottom corner, but because it is being resized at the
+            // same time, it is possible it shrinks first quickly below the default position and get
+            // moved up after that in just few last frames
+            pipLayerList.zipWithNext { previous, current ->
+                current.visibleRegion.isToTheRightBottom(previous.visibleRegion.region, 3)
+            }
+        }
+    }
+
+    override fun focusChanges() {
+        // in gestural nav the focus goes to different activity on swipe up
+        Assume.assumeFalse(testSpec.isGesturalNavigation)
+        super.focusChanges()
+    }
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipOnUserLeaveHintTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipOnUserLeaveHintTest.kt
new file mode 100644
index 0000000..953f59a
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipOnUserLeaveHintTest.kt
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.flicker.pip
+
+import androidx.test.filters.RequiresDevice
+import com.android.launcher3.tapl.LauncherInstrumentation
+import com.android.server.wm.flicker.FlickerParametersRunnerFactory
+import com.android.server.wm.flicker.FlickerTestParameter
+import com.android.server.wm.flicker.annotation.Group3
+import com.android.server.wm.flicker.dsl.FlickerBuilder
+import org.junit.Assume
+import org.junit.FixMethodOrder
+import org.junit.runner.RunWith
+import org.junit.runners.MethodSorters
+import org.junit.runners.Parameterized
+
+/**
+ * Test entering pip from an app via [onUserLeaveHint] and by navigating to home.
+ *
+ * To run this test: `atest WMShellFlickerTests:EnterPipOnUserLeaveHintTest`
+ *
+ * Actions:
+ *     Launch an app in full screen
+ *     Select "Via code behind" radio button
+ *     Press Home button or swipe up to go Home and put [pipApp] in pip mode
+ *
+ * Notes:
+ *     1. All assertions are inherited from [EnterPipTest]
+ *     2. Part of the test setup occurs automatically via
+ *        [com.android.server.wm.flicker.TransitionRunnerWithRules],
+ *        including configuring navigation mode, initial orientation and ensuring no
+ *        apps are running before setup
+ */
+@RequiresDevice
+@RunWith(Parameterized::class)
+@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+@Group3
+class EnterPipOnUserLeaveHintTest(testSpec: FlickerTestParameter) : EnterPipTest(testSpec) {
+    protected val taplInstrumentation = LauncherInstrumentation()
+    /**
+     * Defines the transition used to run the test
+     */
+    override val transition: FlickerBuilder.() -> Unit
+        get() = {
+            setupAndTeardown(this)
+            setup {
+                eachRun {
+                    pipApp.launchViaIntent(wmHelper)
+                    pipApp.enableEnterPipOnUserLeaveHint()
+                }
+            }
+            teardown {
+                eachRun {
+                    pipApp.exit(wmHelper)
+                }
+            }
+            transitions {
+                taplInstrumentation.goHome()
+            }
+        }
+
+    override fun pipAppLayerAlwaysVisible() {
+        if (!testSpec.isGesturalNavigation) super.pipAppLayerAlwaysVisible() else {
+            // pip layer in gesture nav will disappear during transition
+            testSpec.assertLayers {
+                this.isVisible(pipApp.component)
+                    .then().isInvisible(pipApp.component)
+                    .then().isVisible(pipApp.component)
+            }
+        }
+    }
+
+    override fun pipLayerReduces() {
+        // in gestural nav the pip enters through alpha animation
+        Assume.assumeFalse(testSpec.isGesturalNavigation)
+        super.pipLayerReduces()
+    }
+
+    override fun focusChanges() {
+        // in gestural nav the focus goes to different activity on swipe up
+        Assume.assumeFalse(testSpec.isGesturalNavigation)
+        super.focusChanges()
+    }
+
+    override fun pipLayerRemainInsideVisibleBounds() {
+        if (!testSpec.isGesturalNavigation) super.pipLayerRemainInsideVisibleBounds() else {
+            // pip layer in gesture nav will disappear during transition
+            testSpec.assertLayersStart {
+                this.visibleRegion(pipApp.component).coversAtMost(displayBounds)
+            }
+            testSpec.assertLayersEnd {
+                this.visibleRegion(pipApp.component).coversAtMost(displayBounds)
+            }
+        }
+    }
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipTest.kt
index 0640ac5..9ba5166 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipTest.kt
@@ -18,7 +18,6 @@
 
 import android.platform.test.annotations.Presubmit
 import android.view.Surface
-import androidx.test.filters.FlakyTest
 import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.FlickerParametersRunnerFactory
 import com.android.server.wm.flicker.FlickerTestParameter
@@ -43,7 +42,7 @@
  *
  * Notes:
  *     1. Some default assertions (e.g., nav bar, status bar and screen covered)
- *        are inherited [PipTransition]
+ *        are inherited from [PipTransition]
  *     2. Part of the test setup occurs automatically via
  *        [com.android.server.wm.flicker.TransitionRunnerWithRules],
  *        including configuring navigation mode, initial orientation and ensuring no
@@ -54,7 +53,7 @@
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
 @Group3
-class EnterPipTest(testSpec: FlickerTestParameter) : PipTransition(testSpec) {
+open class EnterPipTest(testSpec: FlickerTestParameter) : PipTransition(testSpec) {
 
     /**
      * Defines the transition used to run the test
@@ -77,11 +76,6 @@
             }
         }
 
-    /** {@inheritDoc}  */
-    @FlakyTest(bugId = 206753786)
-    @Test
-    override fun statusBarLayerRotatesScales() = super.statusBarLayerRotatesScales()
-
     /**
      * Checks [pipApp] window remains visible throughout the animation
      */
@@ -98,7 +92,7 @@
      */
     @Presubmit
     @Test
-    fun pipAppLayerAlwaysVisible() {
+    open fun pipAppLayerAlwaysVisible() {
         testSpec.assertLayers {
             this.isVisible(pipApp.component)
         }
@@ -122,7 +116,7 @@
      */
     @Presubmit
     @Test
-    fun pipLayerRemainInsideVisibleBounds() {
+    open fun pipLayerRemainInsideVisibleBounds() {
         testSpec.assertLayersVisibleRegion(pipApp.component) {
             coversAtMost(displayBounds)
         }
@@ -133,7 +127,7 @@
      */
     @Presubmit
     @Test
-    fun pipLayerReduces() {
+    open fun pipLayerReduces() {
         val layerName = pipApp.component.toLayerName()
         testSpec.assertLayers {
             val pipLayerList = this.layers { it.name.contains(layerName) && it.isVisible }
@@ -175,7 +169,7 @@
      */
     @Presubmit
     @Test
-    fun focusChanges() {
+    open fun focusChanges() {
         testSpec.assertEventLog {
             this.focusChanges(pipApp.`package`, "NexusLauncherActivity")
         }
@@ -192,8 +186,10 @@
         @JvmStatic
         fun getParams(): List<FlickerTestParameter> {
             return FlickerTestParameterFactory.getInstance()
-                .getConfigNonRotationTests(supportedRotations = listOf(Surface.ROTATION_0),
-                    repetitions = 3)
+                .getConfigNonRotationTests(
+                    supportedRotations = listOf(Surface.ROTATION_0),
+                    repetitions = 3
+                )
         }
     }
 }
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipToOtherOrientationTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipToOtherOrientationTest.kt
index accb524..f50097d 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipToOtherOrientationTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipToOtherOrientationTest.kt
@@ -28,13 +28,12 @@
 import com.android.server.wm.flicker.entireScreenCovered
 import com.android.server.wm.flicker.helpers.WindowUtils
 import com.android.server.wm.flicker.navBarLayerRotatesAndScales
-import com.android.server.wm.flicker.statusBarLayerRotatesScales
 import com.android.server.wm.traces.common.FlickerComponentName
 import com.android.wm.shell.flicker.helpers.FixedAppHelper
 import com.android.wm.shell.flicker.pip.PipTransition.BroadcastActionTrigger.Companion.ORIENTATION_LANDSCAPE
 import com.android.wm.shell.flicker.pip.PipTransition.BroadcastActionTrigger.Companion.ORIENTATION_PORTRAIT
-import com.android.wm.shell.flicker.testapp.Components.PipActivity.ACTION_ENTER_PIP
 import com.android.wm.shell.flicker.testapp.Components.FixedActivity.EXTRA_FIXED_ORIENTATION
+import com.android.wm.shell.flicker.testapp.Components.PipActivity.ACTION_ENTER_PIP
 import org.junit.FixMethodOrder
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -114,14 +113,6 @@
     override fun navBarLayerRotatesAndScales() = testSpec.navBarLayerRotatesAndScales()
 
     /**
-     * Checks that the [FlickerComponentName.STATUS_BAR] has the correct position at
-     * the start and end of the transition
-     */
-    @FlakyTest(bugId = 206753786)
-    @Test
-    override fun statusBarLayerRotatesScales() = testSpec.statusBarLayerRotatesScales()
-
-    /**
      * Checks that all parts of the screen are covered at the start and end of the transition
      *
      * TODO b/197726599 Prevents all states from being checked
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipViaExpandButtonClickTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipViaExpandButtonClickTest.kt
index a3ed79b..0768e82 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipViaExpandButtonClickTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipViaExpandButtonClickTest.kt
@@ -79,11 +79,6 @@
         }
 
     /** {@inheritDoc}  */
-    @FlakyTest(bugId = 206753786)
-    @Test
-    override fun statusBarLayerRotatesScales() = super.statusBarLayerRotatesScales()
-
-    /** {@inheritDoc}  */
     @FlakyTest(bugId = 197726610)
     @Test
     override fun pipLayerExpands() = super.pipLayerExpands()
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipViaIntentTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipViaIntentTest.kt
index 37e93443..c6a705d 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipViaIntentTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipViaIntentTest.kt
@@ -80,7 +80,17 @@
     /** {@inheritDoc}  */
     @FlakyTest(bugId = 206753786)
     @Test
-    override fun statusBarLayerRotatesScales() = super.statusBarLayerRotatesScales()
+    override fun statusBarLayerRotatesScales() {
+        Assume.assumeFalse(isShellTransitionsEnabled)
+        super.statusBarLayerRotatesScales()
+    }
+
+    @Presubmit
+    @Test
+    fun statusBarLayerRotatesScales_ShellTransit() {
+        Assume.assumeTrue(isShellTransitionsEnabled)
+        super.statusBarLayerRotatesScales()
+    }
 
     /** {@inheritDoc}  */
     @FlakyTest(bugId = 197726610)
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipWithSwipeDownTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipWithSwipeDownTest.kt
index ab07ede..128703a 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipWithSwipeDownTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipWithSwipeDownTest.kt
@@ -25,7 +25,6 @@
 import com.android.server.wm.flicker.FlickerTestParameterFactory
 import com.android.server.wm.flicker.annotation.Group3
 import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.statusBarLayerRotatesScales
 import org.junit.FixMethodOrder
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -78,10 +77,6 @@
     @Test
     override fun pipLayerBecomesInvisible() = super.pipLayerBecomesInvisible()
 
-    @FlakyTest(bugId = 206753786)
-    @Test
-    override fun statusBarLayerRotatesScales() = testSpec.statusBarLayerRotatesScales()
-
     /**
      * Checks that the focus doesn't change between windows during the transition
      */
@@ -108,4 +103,4 @@
                             repetitions = 3)
         }
     }
-}
\ No newline at end of file
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipKeyboardTestShellTransit.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipKeyboardTestShellTransit.kt
index 1a21d32..fe51228 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipKeyboardTestShellTransit.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipKeyboardTestShellTransit.kt
@@ -16,7 +16,7 @@
 
 package com.android.wm.shell.flicker.pip
 
-import androidx.test.filters.FlakyTest
+import android.platform.test.annotations.Presubmit
 import androidx.test.filters.RequiresDevice
 import com.android.server.wm.flicker.FlickerParametersRunnerFactory
 import com.android.server.wm.flicker.FlickerTestParameter
@@ -35,7 +35,6 @@
 @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
 @Group4
-@FlakyTest(bugId = 217777115)
 class PipKeyboardTestShellTransit(testSpec: FlickerTestParameter) : PipKeyboardTest(testSpec) {
 
     @Before
@@ -43,7 +42,7 @@
         Assume.assumeTrue(isShellTransitionsEnabled)
     }
 
-    @FlakyTest(bugId = 214452854)
+    @Presubmit
     @Test
     override fun statusBarLayerRotatesScales() = super.statusBarLayerRotatesScales()
 }
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipLegacySplitScreenTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipLegacySplitScreenTest.kt
deleted file mode 100644
index 21175a0..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipLegacySplitScreenTest.kt
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.flicker.pip
-
-import android.platform.test.annotations.Presubmit
-import android.view.Surface
-import androidx.test.filters.FlakyTest
-import androidx.test.filters.RequiresDevice
-import com.android.server.wm.flicker.FlickerParametersRunnerFactory
-import com.android.server.wm.flicker.FlickerTestParameter
-import com.android.server.wm.flicker.FlickerTestParameterFactory
-import com.android.server.wm.flicker.annotation.Group4
-import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.helpers.launchSplitScreen
-import com.android.server.wm.flicker.helpers.wakeUpAndGoToHomeScreen
-import com.android.server.wm.flicker.rules.RemoveAllTasksButHomeRule.Companion.removeAllTasksButHome
-import com.android.wm.shell.flicker.helpers.BaseAppHelper.Companion.isShellTransitionsEnabled
-import com.android.wm.shell.flicker.helpers.FixedAppHelper
-import com.android.wm.shell.flicker.helpers.ImeAppHelper
-import com.android.wm.shell.flicker.helpers.SplitScreenHelper
-import com.android.wm.shell.flicker.testapp.Components.PipActivity.EXTRA_ENTER_PIP
-import org.junit.Assume.assumeFalse
-import org.junit.Assume.assumeTrue
-import org.junit.Before
-import org.junit.FixMethodOrder
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.MethodSorters
-import org.junit.runners.Parameterized
-
-/**
- * Test Pip with split-screen.
- * To run this test: `atest WMShellFlickerTests:PipLegacySplitScreenTest`
- */
-@RequiresDevice
-@RunWith(Parameterized::class)
-@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
-@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-@Group4
-class PipLegacySplitScreenTest(testSpec: FlickerTestParameter) : PipTransition(testSpec) {
-    private val imeApp = ImeAppHelper(instrumentation)
-    private val testApp = FixedAppHelper(instrumentation)
-
-    @Before
-    open fun setup() {
-        // Only run legacy split tests when the system is using legacy split screen.
-        assumeTrue(SplitScreenHelper.isUsingLegacySplit())
-        // Legacy split is having some issue with Shell transition, and will be deprecated soon.
-        assumeFalse(isShellTransitionsEnabled())
-    }
-
-    override val transition: FlickerBuilder.() -> Unit
-        get() = {
-            setup {
-                test {
-                    removeAllTasksButHome()
-                    device.wakeUpAndGoToHomeScreen()
-                    pipApp.launchViaIntent(stringExtras = mapOf(EXTRA_ENTER_PIP to "true"),
-                        wmHelper = wmHelper)
-                }
-            }
-            transitions {
-                testApp.launchViaIntent(wmHelper)
-                device.launchSplitScreen(wmHelper)
-                imeApp.launchViaIntent(wmHelper)
-            }
-            teardown {
-                eachRun {
-                    imeApp.exit(wmHelper)
-                    testApp.exit(wmHelper)
-                }
-                test {
-                    removeAllTasksButHome()
-                }
-            }
-        }
-
-    /** {@inheritDoc}  */
-    @FlakyTest(bugId = 206753786)
-    @Test
-    override fun statusBarLayerRotatesScales() = super.statusBarLayerRotatesScales()
-
-    @FlakyTest(bugId = 161435597)
-    @Test
-    fun pipWindowInsideDisplayBounds() {
-        testSpec.assertWmVisibleRegion(pipApp.component) {
-            coversAtMost(displayBounds)
-        }
-    }
-
-    @Presubmit
-    @Test
-    fun bothAppWindowsVisible() {
-        testSpec.assertWmEnd {
-            isAppWindowVisible(testApp.component)
-            isAppWindowVisible(imeApp.component)
-            doNotOverlap(testApp.component, imeApp.component)
-        }
-    }
-
-    @FlakyTest(bugId = 161435597)
-    @Test
-    fun pipLayerInsideDisplayBounds() {
-        testSpec.assertLayersVisibleRegion(pipApp.component) {
-            coversAtMost(displayBounds)
-        }
-    }
-
-    @Presubmit
-    @Test
-    fun bothAppLayersVisible() {
-        testSpec.assertLayersEnd {
-            visibleRegion(testApp.component).coversAtMost(displayBounds)
-            visibleRegion(imeApp.component).coversAtMost(displayBounds)
-        }
-    }
-
-    @FlakyTest(bugId = 161435597)
-    @Test
-    override fun entireScreenCovered() = super.entireScreenCovered()
-
-    companion object {
-        const val TEST_REPETITIONS = 2
-
-        @Parameterized.Parameters(name = "{0}")
-        @JvmStatic
-        fun getParams(): Collection<FlickerTestParameter> {
-            return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests(
-                supportedRotations = listOf(Surface.ROTATION_0),
-                repetitions = TEST_REPETITIONS
-            )
-        }
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipRotationTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipRotationTest.kt
index c1ee1a7..9fad499 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipRotationTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipRotationTest.kt
@@ -27,12 +27,9 @@
 import com.android.server.wm.flicker.dsl.FlickerBuilder
 import com.android.server.wm.flicker.entireScreenCovered
 import com.android.server.wm.flicker.helpers.WindowUtils
-import com.android.server.wm.flicker.helpers.isShellTransitionsEnabled
 import com.android.server.wm.flicker.helpers.setRotation
 import com.android.server.wm.flicker.navBarLayerRotatesAndScales
-import com.android.server.wm.flicker.statusBarLayerRotatesScales
 import com.android.wm.shell.flicker.helpers.FixedAppHelper
-import org.junit.Assume
 import org.junit.FixMethodOrder
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -98,13 +95,6 @@
     override fun navBarLayerRotatesAndScales() = testSpec.navBarLayerRotatesAndScales()
 
     /**
-     * Checks the position of the status bar at the start and end of the transition
-     */
-    @FlakyTest(bugId = 206753786)
-    @Test
-    override fun statusBarLayerRotatesScales() = testSpec.statusBarLayerRotatesScales()
-
-    /**
      * Checks that [fixedApp] layer is within [screenBoundsStart] at the start of the transition
      */
     @Presubmit
@@ -141,14 +131,6 @@
     @Presubmit
     @Test
     fun pipLayerRotates_StartingBounds() {
-        Assume.assumeFalse(isShellTransitionsEnabled)
-        pipLayerRotates_StartingBounds_internal()
-    }
-
-    @FlakyTest(bugId = 228024285)
-    @Test
-    fun pipLayerRotates_StartingBounds_ShellTransit() {
-        Assume.assumeTrue(isShellTransitionsEnabled)
         pipLayerRotates_StartingBounds_internal()
     }
 
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/SetRequestedOrientationWhilePinnedTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/SetRequestedOrientationWhilePinnedTest.kt
index e40f2bc..51339a1 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/SetRequestedOrientationWhilePinnedTest.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/SetRequestedOrientationWhilePinnedTest.kt
@@ -25,9 +25,9 @@
 import com.android.server.wm.flicker.FlickerTestParameterFactory
 import com.android.server.wm.flicker.annotation.Group4
 import com.android.server.wm.flicker.dsl.FlickerBuilder
+import com.android.server.wm.flicker.helpers.WindowUtils
 import com.android.server.wm.flicker.helpers.setRotation
 import com.android.server.wm.flicker.helpers.wakeUpAndGoToHomeScreen
-import com.android.server.wm.flicker.helpers.WindowUtils
 import com.android.server.wm.flicker.rules.RemoveAllTasksButHomeRule.Companion.removeAllTasksButHome
 import com.android.wm.shell.flicker.pip.PipTransition.BroadcastActionTrigger.Companion.ORIENTATION_LANDSCAPE
 import com.android.wm.shell.flicker.testapp.Components
@@ -113,10 +113,6 @@
     @Test
     override fun navBarLayerRotatesAndScales() = super.navBarLayerRotatesAndScales()
 
-    @FlakyTest(bugId = 206753786)
-    @Test
-    override fun statusBarLayerRotatesScales() = super.statusBarLayerRotatesScales()
-
     @Presubmit
     @Test
     fun pipWindowInsideDisplay() {
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenByDragFromAllApps.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenByDragFromAllApps.kt
new file mode 100644
index 0000000..702710c
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenByDragFromAllApps.kt
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.flicker.splitscreen
+
+import android.platform.test.annotations.Presubmit
+import android.view.WindowManagerPolicyConstants
+import androidx.test.filters.RequiresDevice
+import com.android.server.wm.flicker.FlickerParametersRunnerFactory
+import com.android.server.wm.flicker.FlickerTestParameter
+import com.android.server.wm.flicker.FlickerTestParameterFactory
+import com.android.server.wm.flicker.annotation.Group1
+import com.android.server.wm.flicker.dsl.FlickerBuilder
+import com.android.wm.shell.flicker.appWindowBecomesVisible
+import com.android.wm.shell.flicker.appWindowIsVisibleAtEnd
+import com.android.wm.shell.flicker.helpers.SplitScreenHelper
+import com.android.wm.shell.flicker.layerBecomesVisible
+import com.android.wm.shell.flicker.layerIsVisibleAtEnd
+import com.android.wm.shell.flicker.splitAppLayerBoundsBecomesVisible
+import com.android.wm.shell.flicker.splitAppLayerBoundsIsVisibleAtEnd
+import com.android.wm.shell.flicker.splitScreenDividerBecomesVisible
+import org.junit.Assume
+import org.junit.Before
+import org.junit.FixMethodOrder
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.MethodSorters
+import org.junit.runners.Parameterized
+
+/**
+ * Test enter split screen by dragging app icon from all apps.
+ * This test is only for large screen devices.
+ *
+ * To run this test: `atest WMShellFlickerTests:EnterSplitScreenByDragFromAllApps`
+ */
+@RequiresDevice
+@RunWith(Parameterized::class)
+@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+@Group1
+class EnterSplitScreenByDragFromAllApps(
+    testSpec: FlickerTestParameter
+) : SplitScreenBase(testSpec) {
+
+    @Before
+    open fun before() {
+        Assume.assumeTrue(taplInstrumentation.isTablet)
+    }
+
+    override val transition: FlickerBuilder.() -> Unit
+        get() = {
+            super.transition(this)
+            setup {
+                eachRun {
+                    taplInstrumentation.goHome()
+                    primaryApp.launchViaIntent(wmHelper)
+                }
+            }
+            transitions {
+                taplInstrumentation.launchedAppState.taskbar
+                    .openAllApps()
+                    .getAppIcon(secondaryApp.appName)
+                    .dragToSplitscreen(secondaryApp.component.packageName,
+                        primaryApp.component.packageName)
+            }
+        }
+
+    @Presubmit
+    @Test
+    fun dividerBecomesVisible() = testSpec.splitScreenDividerBecomesVisible()
+
+    @Presubmit
+    @Test
+    fun primaryAppLayerIsVisibleAtEnd() = testSpec.layerIsVisibleAtEnd(primaryApp.component)
+
+    @Presubmit
+    @Test
+    fun secondaryAppLayerBecomesVisible() = testSpec.layerBecomesVisible(secondaryApp.component)
+
+    @Presubmit
+    @Test
+    fun primaryAppBoundsIsVisibleAtEnd() = testSpec.splitAppLayerBoundsIsVisibleAtEnd(
+        testSpec.endRotation, primaryApp.component, false /* splitLeftTop */)
+
+    @Presubmit
+    @Test
+    fun secondaryAppBoundsBecomesVisible() = testSpec.splitAppLayerBoundsBecomesVisible(
+        testSpec.endRotation, secondaryApp.component, true /* splitLeftTop */)
+
+    @Presubmit
+    @Test
+    fun primaryAppWindowIsVisibleAtEnd() = testSpec.appWindowIsVisibleAtEnd(primaryApp.component)
+
+    @Presubmit
+    @Test
+    fun secondaryAppWindowBecomesVisible() =
+        testSpec.appWindowBecomesVisible(secondaryApp.component)
+
+    companion object {
+        @Parameterized.Parameters(name = "{0}")
+        @JvmStatic
+        fun getParams(): List<FlickerTestParameter> {
+            return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests(
+                repetitions = SplitScreenHelper.TEST_REPETITIONS,
+                // TODO(b/176061063):The 3 buttons of nav bar do not exist in the hierarchy.
+                supportedNavigationModes =
+                    listOf(WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY))
+        }
+    }
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenByDragFromNotification.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenByDragFromNotification.kt
new file mode 100644
index 0000000..7323d99
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenByDragFromNotification.kt
@@ -0,0 +1,139 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.flicker.splitscreen
+
+import android.platform.test.annotations.Presubmit
+import android.view.WindowManagerPolicyConstants
+import androidx.test.filters.RequiresDevice
+import androidx.test.uiautomator.By
+import androidx.test.uiautomator.Until
+import com.android.server.wm.flicker.FlickerParametersRunnerFactory
+import com.android.server.wm.flicker.FlickerTestParameter
+import com.android.server.wm.flicker.FlickerTestParameterFactory
+import com.android.server.wm.flicker.annotation.Group1
+import com.android.server.wm.flicker.dsl.FlickerBuilder
+import com.android.wm.shell.flicker.appWindowIsVisibleAtEnd
+import com.android.wm.shell.flicker.helpers.SplitScreenHelper
+import com.android.wm.shell.flicker.layerBecomesVisible
+import com.android.wm.shell.flicker.layerIsVisibleAtEnd
+import com.android.wm.shell.flicker.splitAppLayerBoundsBecomesVisible
+import com.android.wm.shell.flicker.splitAppLayerBoundsIsVisibleAtEnd
+import com.android.wm.shell.flicker.splitScreenDividerBecomesVisible
+import org.junit.Assume
+import org.junit.Before
+import org.junit.FixMethodOrder
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.MethodSorters
+import org.junit.runners.Parameterized
+
+/**
+ * Test enter split screen by dragging app icon from notification.
+ * This test is only for large screen devices.
+ *
+ * To run this test: `atest WMShellFlickerTests:EnterSplitScreenByDragFromNotification`
+ */
+@RequiresDevice
+@RunWith(Parameterized::class)
+@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+@Group1
+class EnterSplitScreenByDragFromNotification(
+    testSpec: FlickerTestParameter
+) : SplitScreenBase(testSpec) {
+
+    private val sendNotificationApp = SplitScreenHelper.getSendNotification(instrumentation)
+
+    @Before
+    fun before() {
+        Assume.assumeTrue(taplInstrumentation.isTablet)
+    }
+
+    override val transition: FlickerBuilder.() -> Unit
+        get() = {
+            super.transition(this)
+            setup {
+                eachRun {
+                    // Send a notification
+                    sendNotificationApp.launchViaIntent(wmHelper)
+                    val sendNotification = device.wait(
+                        Until.findObject(By.text("Send Notification")),
+                        SplitScreenHelper.TIMEOUT_MS
+                    )
+                    sendNotification?.click() ?: error("Send notification button not found")
+
+                    taplInstrumentation.goHome()
+                    primaryApp.launchViaIntent(wmHelper)
+                }
+            }
+            transitions {
+                SplitScreenHelper.dragFromNotificationToSplit(instrumentation, device, wmHelper)
+            }
+            teardown {
+                eachRun {
+                    sendNotificationApp.exit(wmHelper)
+                }
+            }
+        }
+
+    @Presubmit
+    @Test
+    fun dividerBecomesVisible() = testSpec.splitScreenDividerBecomesVisible()
+
+    @Presubmit
+    @Test
+    fun primaryAppLayerIsVisibleAtEnd() = testSpec.layerIsVisibleAtEnd(primaryApp.component)
+
+    @Presubmit
+    @Test
+    fun secondaryAppLayerBecomesVisible() =
+        testSpec.layerBecomesVisible(sendNotificationApp.component)
+
+    @Presubmit
+    @Test
+    fun primaryAppBoundsIsVisibleAtEnd() = testSpec.splitAppLayerBoundsIsVisibleAtEnd(
+        testSpec.endRotation, primaryApp.component, false /* splitLeftTop */
+    )
+
+    @Presubmit
+    @Test
+    fun secondaryAppBoundsBecomesVisible() = testSpec.splitAppLayerBoundsBecomesVisible(
+        testSpec.endRotation, sendNotificationApp.component, true /* splitLeftTop */
+    )
+
+    @Presubmit
+    @Test
+    fun primaryAppWindowIsVisibleAtEnd() = testSpec.appWindowIsVisibleAtEnd(primaryApp.component)
+
+    @Presubmit
+    @Test
+    fun secondaryAppWindowIsVisibleAtEnd() =
+        testSpec.appWindowIsVisibleAtEnd(sendNotificationApp.component)
+
+    companion object {
+        @Parameterized.Parameters(name = "{0}")
+        @JvmStatic
+        fun getParams(): List<FlickerTestParameter> {
+            return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests(
+                repetitions = SplitScreenHelper.TEST_REPETITIONS,
+                // TODO(b/176061063):The 3 buttons of nav bar do not exist in the hierarchy.
+                supportedNavigationModes =
+                    listOf(WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY)
+            )
+        }
+    }
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenByDragFromTaskbar.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenByDragFromTaskbar.kt
new file mode 100644
index 0000000..05c6e24
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/EnterSplitScreenByDragFromTaskbar.kt
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.flicker.splitscreen
+
+import android.platform.test.annotations.Presubmit
+import android.view.WindowManagerPolicyConstants
+import androidx.test.filters.RequiresDevice
+import com.android.server.wm.flicker.FlickerParametersRunnerFactory
+import com.android.server.wm.flicker.FlickerTestParameter
+import com.android.server.wm.flicker.FlickerTestParameterFactory
+import com.android.server.wm.flicker.annotation.Group1
+import com.android.server.wm.flicker.dsl.FlickerBuilder
+import com.android.wm.shell.flicker.appWindowBecomesVisible
+import com.android.wm.shell.flicker.appWindowIsVisibleAtEnd
+import com.android.wm.shell.flicker.helpers.SplitScreenHelper
+import com.android.wm.shell.flicker.layerBecomesVisible
+import com.android.wm.shell.flicker.layerIsVisibleAtEnd
+import com.android.wm.shell.flicker.splitAppLayerBoundsBecomesVisible
+import com.android.wm.shell.flicker.splitAppLayerBoundsIsVisibleAtEnd
+import com.android.wm.shell.flicker.splitScreenDividerBecomesVisible
+import org.junit.Assume
+import org.junit.Before
+import org.junit.FixMethodOrder
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.MethodSorters
+import org.junit.runners.Parameterized
+
+/**
+ * Test enter split screen by dragging app icon from taskbar.
+ * This test is only for large screen devices.
+ *
+ * To run this test: `atest WMShellFlickerTests:EnterSplitScreenByDragFromTaskbar`
+ */
+@RequiresDevice
+@RunWith(Parameterized::class)
+@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+@Group1
+class EnterSplitScreenByDragFromTaskbar(
+    testSpec: FlickerTestParameter
+) : SplitScreenBase(testSpec) {
+
+    @Before
+    fun before() {
+        Assume.assumeTrue(taplInstrumentation.isTablet)
+    }
+
+    override val transition: FlickerBuilder.() -> Unit
+        get() = {
+            super.transition(this)
+            setup {
+                eachRun {
+                    taplInstrumentation.goHome()
+                    SplitScreenHelper.createShortcutOnHotseatIfNotExist(
+                        taplInstrumentation, secondaryApp.appName
+                    )
+                    primaryApp.launchViaIntent(wmHelper)
+                }
+            }
+            transitions {
+                taplInstrumentation.launchedAppState.taskbar
+                    .getAppIcon(secondaryApp.appName)
+                    .dragToSplitscreen(
+                        secondaryApp.component.packageName,
+                        primaryApp.component.packageName
+                    )
+            }
+        }
+
+    @Presubmit
+    @Test
+    fun dividerBecomesVisible() = testSpec.splitScreenDividerBecomesVisible()
+
+    @Presubmit
+    @Test
+    fun primaryAppLayerIsVisibleAtEnd() = testSpec.layerIsVisibleAtEnd(primaryApp.component)
+
+    @Presubmit
+    @Test
+    fun secondaryAppLayerBecomesVisible() = testSpec.layerBecomesVisible(secondaryApp.component)
+
+    @Presubmit
+    @Test
+    fun primaryAppBoundsIsVisibleAtEnd() = testSpec.splitAppLayerBoundsIsVisibleAtEnd(
+        testSpec.endRotation, primaryApp.component, false /* splitLeftTop */
+    )
+
+    @Presubmit
+    @Test
+    fun secondaryAppBoundsBecomesVisible() = testSpec.splitAppLayerBoundsBecomesVisible(
+        testSpec.endRotation, secondaryApp.component, true /* splitLeftTop */
+    )
+
+    @Presubmit
+    @Test
+    fun primaryAppWindowIsVisibleAtEnd() = testSpec.appWindowIsVisibleAtEnd(primaryApp.component)
+
+    @Presubmit
+    @Test
+    fun secondaryAppWindowBecomesVisible() =
+        testSpec.appWindowBecomesVisible(secondaryApp.component)
+
+    companion object {
+        @Parameterized.Parameters(name = "{0}")
+        @JvmStatic
+        fun getParams(): List<FlickerTestParameter> {
+            return FlickerTestParameterFactory.getInstance().getConfigNonRotationTests(
+                repetitions = SplitScreenHelper.TEST_REPETITIONS,
+                supportedNavigationModes =
+                    listOf(WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY)
+            )
+        }
+    }
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SplitScreenBase.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SplitScreenBase.kt
new file mode 100644
index 0000000..52c2daf
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/splitscreen/SplitScreenBase.kt
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.flicker.splitscreen
+
+import android.app.Instrumentation
+import android.content.Context
+import androidx.test.platform.app.InstrumentationRegistry
+import com.android.launcher3.tapl.LauncherInstrumentation
+import com.android.server.wm.flicker.FlickerBuilderProvider
+import com.android.server.wm.flicker.FlickerTestParameter
+import com.android.server.wm.flicker.dsl.FlickerBuilder
+import com.android.server.wm.flicker.helpers.setRotation
+import com.android.wm.shell.flicker.helpers.SplitScreenHelper
+
+abstract class SplitScreenBase(protected val testSpec: FlickerTestParameter) {
+    protected val instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation()
+    protected val taplInstrumentation = LauncherInstrumentation()
+    protected val context: Context = instrumentation.context
+    protected val primaryApp = SplitScreenHelper.getPrimary(instrumentation)
+    protected val secondaryApp = SplitScreenHelper.getSecondary(instrumentation)
+
+    @FlickerBuilderProvider
+    fun buildFlicker(): FlickerBuilder {
+        return FlickerBuilder(instrumentation).apply {
+            transition(this)
+        }
+    }
+
+    protected open val transition: FlickerBuilder.() -> Unit
+        get() = {
+            setup {
+                test {
+                    taplInstrumentation.setEnableRotation(true)
+                    setRotation(testSpec.startRotation)
+                    taplInstrumentation.setExpectedRotation(testSpec.startRotation)
+                }
+            }
+            teardown {
+                eachRun {
+                    primaryApp.exit(wmHelper)
+                    secondaryApp.exit(wmHelper)
+                }
+            }
+        }
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/test-apps/flickerapp/AndroidManifest.xml b/libs/WindowManager/Shell/tests/flicker/test-apps/flickerapp/AndroidManifest.xml
index bd98585..bc0b0b6 100644
--- a/libs/WindowManager/Shell/tests/flicker/test-apps/flickerapp/AndroidManifest.xml
+++ b/libs/WindowManager/Shell/tests/flicker/test-apps/flickerapp/AndroidManifest.xml
@@ -92,6 +92,17 @@
             </intent-filter>
         </activity>
 
+        <activity android:name=".SendNotificationActivity"
+                  android:taskAffinity="com.android.wm.shell.flicker.testapp.SendNotificationActivity"
+                  android:theme="@style/CutoutShortEdges"
+                  android:label="SendNotificationApp"
+                  android:exported="true">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="android.intent.category.LAUNCHER"/>
+            </intent-filter>
+        </activity>
+
         <activity android:name=".NonResizeableActivity"
                   android:resizeableActivity="false"
                   android:taskAffinity="com.android.wm.shell.flicker.testapp.NonResizeableActivity"
diff --git a/libs/WindowManager/Shell/tests/flicker/test-apps/flickerapp/res/layout/activity_notification.xml b/libs/WindowManager/Shell/tests/flicker/test-apps/flickerapp/res/layout/activity_notification.xml
new file mode 100644
index 0000000..8d59b56
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/test-apps/flickerapp/res/layout/activity_notification.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 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.
+-->
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    android:background="@android:color/black">
+
+        <Button
+            android:id="@+id/button_send_notification"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerHorizontal="true"
+            android:layout_centerVertical="true"
+            android:text="Send Notification" />
+</RelativeLayout>
diff --git a/libs/WindowManager/Shell/tests/flicker/test-apps/flickerapp/res/layout/activity_pip.xml b/libs/WindowManager/Shell/tests/flicker/test-apps/flickerapp/res/layout/activity_pip.xml
index 909b77c..2290983 100644
--- a/libs/WindowManager/Shell/tests/flicker/test-apps/flickerapp/res/layout/activity_pip.xml
+++ b/libs/WindowManager/Shell/tests/flicker/test-apps/flickerapp/res/layout/activity_pip.xml
@@ -44,6 +44,39 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:orientation="vertical"
+        android:checkedButton="@id/enter_pip_on_leave_disabled">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="Enter PiP on home press"/>
+
+        <RadioButton
+            android:id="@+id/enter_pip_on_leave_disabled"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="Disabled"
+            android:onClick="onAutoPipSelected"/>
+
+        <RadioButton
+            android:id="@+id/enter_pip_on_leave_manual"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="Via code behind"
+            android:onClick="onAutoPipSelected"/>
+
+        <RadioButton
+            android:id="@+id/enter_pip_on_leave_autoenter"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="Auto-enter PiP"
+            android:onClick="onAutoPipSelected"/>
+    </RadioGroup>
+
+    <RadioGroup
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical"
         android:checkedButton="@id/ratio_default">
 
         <TextView
diff --git a/libs/WindowManager/Shell/tests/flicker/test-apps/flickerapp/src/com/android/wm/shell/flicker/testapp/Components.java b/libs/WindowManager/Shell/tests/flicker/test-apps/flickerapp/src/com/android/wm/shell/flicker/testapp/Components.java
index 0ed59bd..a2b580d 100644
--- a/libs/WindowManager/Shell/tests/flicker/test-apps/flickerapp/src/com/android/wm/shell/flicker/testapp/Components.java
+++ b/libs/WindowManager/Shell/tests/flicker/test-apps/flickerapp/src/com/android/wm/shell/flicker/testapp/Components.java
@@ -88,6 +88,12 @@
                 PACKAGE_NAME + ".SplitScreenSecondaryActivity");
     }
 
+    public static class SendNotificationActivity {
+        public static final String LABEL = "SendNotificationApp";
+        public static final ComponentName COMPONENT = new ComponentName(PACKAGE_NAME,
+                PACKAGE_NAME + ".SendNotificationActivity");
+    }
+
     public static class LaunchBubbleActivity {
         public static final String LABEL = "LaunchBubbleApp";
         public static final ComponentName COMPONENT = new ComponentName(PACKAGE_NAME,
diff --git a/libs/WindowManager/Shell/tests/flicker/test-apps/flickerapp/src/com/android/wm/shell/flicker/testapp/PipActivity.java b/libs/WindowManager/Shell/tests/flicker/test-apps/flickerapp/src/com/android/wm/shell/flicker/testapp/PipActivity.java
index a6ba782..615b173 100644
--- a/libs/WindowManager/Shell/tests/flicker/test-apps/flickerapp/src/com/android/wm/shell/flicker/testapp/PipActivity.java
+++ b/libs/WindowManager/Shell/tests/flicker/test-apps/flickerapp/src/com/android/wm/shell/flicker/testapp/PipActivity.java
@@ -48,6 +48,7 @@
 import android.view.Window;
 import android.view.WindowManager;
 import android.widget.CheckBox;
+import android.widget.RadioButton;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -201,6 +202,17 @@
         super.onDestroy();
     }
 
+    @Override
+    protected void onUserLeaveHint() {
+        // Only used when auto PiP is disabled. This is to simulate the behavior that an app
+        // supports regular PiP but not auto PiP.
+        final boolean manuallyEnterPip =
+                ((RadioButton) findViewById(R.id.enter_pip_on_leave_manual)).isChecked();
+        if (manuallyEnterPip) {
+            enterPictureInPictureMode();
+        }
+    }
+
     private RemoteAction buildRemoteAction(Icon icon, String label, String action) {
         final Intent intent = new Intent(action);
         final PendingIntent pendingIntent =
@@ -216,6 +228,21 @@
         enterPictureInPictureMode(mPipParamsBuilder.build());
     }
 
+    public void onAutoPipSelected(View v) {
+        switch (v.getId()) {
+            case R.id.enter_pip_on_leave_manual:
+                // disable auto enter PiP
+            case R.id.enter_pip_on_leave_disabled:
+                mPipParamsBuilder.setAutoEnterEnabled(false);
+                setPictureInPictureParams(mPipParamsBuilder.build());
+                break;
+            case R.id.enter_pip_on_leave_autoenter:
+                mPipParamsBuilder.setAutoEnterEnabled(true);
+                setPictureInPictureParams(mPipParamsBuilder.build());
+                break;
+        }
+    }
+
     public void onRatioSelected(View v) {
         switch (v.getId()) {
             case R.id.ratio_default:
diff --git a/libs/WindowManager/Shell/tests/flicker/test-apps/flickerapp/src/com/android/wm/shell/flicker/testapp/SendNotificationActivity.java b/libs/WindowManager/Shell/tests/flicker/test-apps/flickerapp/src/com/android/wm/shell/flicker/testapp/SendNotificationActivity.java
new file mode 100644
index 0000000..8020ef2
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/test-apps/flickerapp/src/com/android/wm/shell/flicker/testapp/SendNotificationActivity.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.flicker.testapp;
+
+import android.app.Activity;
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+
+public class SendNotificationActivity extends Activity {
+    private NotificationManager mNotificationManager;
+    private String mChannelId = "Channel id";
+    private String mChannelName = "Channel name";
+    private NotificationChannel mChannel;
+    private int mNotifyId = 0;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_notification);
+        findViewById(R.id.button_send_notification).setOnClickListener(this::sendNotification);
+
+        mChannel = new NotificationChannel(mChannelId, mChannelName,
+                NotificationManager.IMPORTANCE_DEFAULT);
+        mNotificationManager = getSystemService(NotificationManager.class);
+        mNotificationManager.createNotificationChannel(mChannel);
+    }
+
+    private void sendNotification(View v) {
+        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
+                new Intent(this, SendNotificationActivity.class),
+                PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE);
+        Notification notification = new Notification.Builder(this, mChannelId)
+                .setContentTitle("Notification App")
+                .setContentText("Notification content")
+                .setWhen(System.currentTimeMillis())
+                .setSmallIcon(R.drawable.ic_message)
+                .setContentIntent(pendingIntent)
+                .build();
+
+        mNotificationManager.notify(mNotifyId, notification);
+    }
+}
diff --git a/libs/WindowManager/Shell/tests/unittest/Android.bp b/libs/WindowManager/Shell/tests/unittest/Android.bp
index ea10be5..1a8b954 100644
--- a/libs/WindowManager/Shell/tests/unittest/Android.bp
+++ b/libs/WindowManager/Shell/tests/unittest/Android.bp
@@ -28,6 +28,9 @@
         "**/*.java",
         "**/*.kt",
     ],
+    resource_dirs: [
+        "res",
+    ],
 
     static_libs: [
         "WindowManager-Shell",
@@ -65,4 +68,9 @@
     optimize: {
         enabled: false,
     },
+
+    aaptflags: [
+        "--extra-packages",
+        "com.android.wm.shell.tests",
+    ],
 }
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/MockSurfaceControlHelper.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/MockSurfaceControlHelper.java
new file mode 100644
index 0000000..f8b3fb3
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/MockSurfaceControlHelper.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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;
+
+import static org.mockito.Mockito.RETURNS_SELF;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+
+import android.view.SurfaceControl;
+
+/**
+ * Helper class to provide mocks for {@link SurfaceControl.Builder} and
+ * {@link SurfaceControl.Transaction} with method chaining support.
+ */
+public class MockSurfaceControlHelper {
+    private MockSurfaceControlHelper() {}
+
+    /**
+     * Creates a mock {@link SurfaceControl.Builder} that supports method chaining and return the
+     * given {@link SurfaceControl} when calling {@link SurfaceControl.Builder#build()}.
+     *
+     * @param mockSurfaceControl the first {@link SurfaceControl} to return
+     * @return the mock of {@link SurfaceControl.Builder}
+     */
+    public static SurfaceControl.Builder createMockSurfaceControlBuilder(
+            SurfaceControl mockSurfaceControl) {
+        final SurfaceControl.Builder mockBuilder = mock(SurfaceControl.Builder.class, RETURNS_SELF);
+        doReturn(mockSurfaceControl)
+                .when(mockBuilder)
+                .build();
+        return mockBuilder;
+    }
+
+    /**
+     * Creates a mock {@link SurfaceControl.Transaction} that supports method chaining.
+     * @return the mock of {@link SurfaceControl.Transaction}
+     */
+    public static SurfaceControl.Transaction createMockSurfaceControlTransaction() {
+        return mock(SurfaceControl.Transaction.class, RETURNS_SELF);
+    }
+}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellInitTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellInitTest.java
new file mode 100644
index 0000000..4bcdcaa
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellInitTest.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.wm.shell.common.ShellExecutor;
+import com.android.wm.shell.sysui.ShellInit;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.ArrayList;
+
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper(setAsMainLooper = true)
+public class ShellInitTest extends ShellTestCase {
+
+    @Mock private ShellExecutor mMainExecutor;
+
+    private ShellInit mImpl;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mImpl = new ShellInit(mMainExecutor);
+    }
+
+    @Test
+    public void testAddInitCallbacks_expectCalledInOrder() {
+        ArrayList<Integer> results = new ArrayList<>();
+        mImpl.addInitCallback(() -> {
+            results.add(1);
+        }, new Object());
+        mImpl.addInitCallback(() -> {
+            results.add(2);
+        }, new Object());
+        mImpl.addInitCallback(() -> {
+            results.add(3);
+        }, new Object());
+        mImpl.init();
+        assertTrue(results.get(0) == 1);
+        assertTrue(results.get(1) == 2);
+        assertTrue(results.get(2) == 3);
+    }
+
+    @Test
+    public void testNoInitCallbacksAfterInit_expectException() {
+        mImpl.init();
+        try {
+            mImpl.addInitCallback(() -> {}, new Object());
+            fail("Expected exception when adding callback after init");
+        } catch (IllegalArgumentException e) {
+            // Expected
+        }
+    }
+
+    @Test
+    public void testDoubleInit_expectNoOp() {
+        ArrayList<Integer> results = new ArrayList<>();
+        mImpl.addInitCallback(() -> {
+            results.add(1);
+        }, new Object());
+        mImpl.init();
+        assertTrue(results.size() == 1);
+        mImpl.init();
+        assertTrue(results.size() == 1);
+    }
+}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java
index a6caefe..7517e8a 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java
@@ -26,19 +26,21 @@
 import static com.android.wm.shell.ShellTaskOrganizer.TASK_LISTENER_TYPE_FULLSCREEN;
 import static com.android.wm.shell.ShellTaskOrganizer.TASK_LISTENER_TYPE_MULTI_WINDOW;
 import static com.android.wm.shell.ShellTaskOrganizer.TASK_LISTENER_TYPE_PIP;
+import static com.android.wm.shell.transition.Transitions.ENABLE_SHELL_TRANSITIONS;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeFalse;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.clearInvocations;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
 import android.app.ActivityManager.RunningTaskInfo;
 import android.app.TaskInfo;
-import android.content.Context;
 import android.content.LocusId;
 import android.content.pm.ParceledListSlice;
 import android.os.Binder;
@@ -46,6 +48,7 @@
 import android.os.RemoteException;
 import android.util.SparseArray;
 import android.view.SurfaceControl;
+import android.view.SurfaceSession;
 import android.window.ITaskOrganizer;
 import android.window.ITaskOrganizerController;
 import android.window.TaskAppearedInfo;
@@ -55,9 +58,8 @@
 import androidx.test.filters.SmallTest;
 
 import com.android.wm.shell.common.ShellExecutor;
-import com.android.wm.shell.common.SyncTransactionQueue;
-import com.android.wm.shell.common.TransactionPool;
 import com.android.wm.shell.compatui.CompatUIController;
+import com.android.wm.shell.sysui.ShellInit;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -76,18 +78,16 @@
  */
 @SmallTest
 @RunWith(AndroidJUnit4.class)
-public class ShellTaskOrganizerTests {
+public class ShellTaskOrganizerTests extends ShellTestCase {
 
     @Mock
     private ITaskOrganizerController mTaskOrganizerController;
     @Mock
-    private Context mContext;
-    @Mock
     private CompatUIController mCompatUI;
+    @Mock
+    private ShellInit mShellInit;
 
     ShellTaskOrganizer mOrganizer;
-    private final SyncTransactionQueue mSyncTransactionQueue = mock(SyncTransactionQueue.class);
-    private final TransactionPool mTransactionPool = mock(TransactionPool.class);
     private final ShellExecutor mTestExecutor = mock(ShellExecutor.class);
 
     private class TrackingTaskListener implements ShellTaskOrganizer.TaskListener {
@@ -132,18 +132,36 @@
             doReturn(ParceledListSlice.<TaskAppearedInfo>emptyList())
                     .when(mTaskOrganizerController).registerTaskOrganizer(any());
         } catch (RemoteException e) {}
-        mOrganizer = spy(new ShellTaskOrganizer(mTaskOrganizerController, mTestExecutor, mContext,
-                mCompatUI, Optional.empty()));
+        mOrganizer = spy(new ShellTaskOrganizer(mShellInit, mTaskOrganizerController,
+                mCompatUI, Optional.empty(), Optional.empty(), mTestExecutor));
     }
 
     @Test
-    public void registerOrganizer_sendRegisterTaskOrganizer() throws RemoteException {
+    public void instantiate_addInitCallback() {
+        verify(mShellInit, times(1)).addInitCallback(any(), any());
+    }
+
+    @Test
+    public void testRegisterOrganizer_sendRegisterTaskOrganizer() throws RemoteException {
         mOrganizer.registerOrganizer();
 
         verify(mTaskOrganizerController).registerTaskOrganizer(any(ITaskOrganizer.class));
     }
 
     @Test
+    public void testTaskLeashReleasedAfterVanished() throws RemoteException {
+        assumeFalse(ENABLE_SHELL_TRANSITIONS);
+        RunningTaskInfo taskInfo = createTaskInfo(1, WINDOWING_MODE_MULTI_WINDOW);
+        SurfaceControl taskLeash = new SurfaceControl.Builder(new SurfaceSession())
+                .setName("task").build();
+        mOrganizer.registerOrganizer();
+        mOrganizer.onTaskAppeared(taskInfo, taskLeash);
+        assertTrue(taskLeash.isValid());
+        mOrganizer.onTaskVanished(taskInfo);
+        assertTrue(!taskLeash.isValid());
+    }
+
+    @Test
     public void testOneListenerPerType() {
         mOrganizer.addListenerForType(new TrackingTaskListener(), TASK_LISTENER_TYPE_MULTI_WINDOW);
         try {
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTestCase.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTestCase.java
index 403dbf9..b5ee037 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTestCase.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTestCase.java
@@ -24,6 +24,8 @@
 
 import androidx.test.platform.app.InstrumentationRegistry;
 
+import com.android.internal.protolog.common.ProtoLog;
+
 import org.junit.After;
 import org.junit.Before;
 import org.mockito.MockitoAnnotations;
@@ -37,6 +39,9 @@
 
     @Before
     public void shellSetup() {
+        // Disable protolog tool when running the tests from studio
+        ProtoLog.REQUIRE_PROTOLOGTOOL = false;
+
         MockitoAnnotations.initMocks(this);
         final Context context =
                 InstrumentationRegistry.getInstrumentation().getTargetContext();
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/TestRunningTaskInfoBuilder.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/TestRunningTaskInfoBuilder.java
index 51eec27..c0720cf 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/TestRunningTaskInfoBuilder.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/TestRunningTaskInfoBuilder.java
@@ -25,8 +25,10 @@
 
 import android.app.ActivityManager;
 import android.app.WindowConfiguration;
+import android.graphics.Point;
 import android.graphics.Rect;
 import android.os.IBinder;
+import android.view.Display;
 import android.window.IWindowContainerToken;
 import android.window.WindowContainerToken;
 
@@ -38,6 +40,10 @@
     private int mParentTaskId = INVALID_TASK_ID;
     private @WindowConfiguration.ActivityType int mActivityType = ACTIVITY_TYPE_STANDARD;
     private @WindowConfiguration.WindowingMode int mWindowingMode = WINDOWING_MODE_UNDEFINED;
+    private int mDisplayId = Display.DEFAULT_DISPLAY;
+    private ActivityManager.TaskDescription.Builder mTaskDescriptionBuilder = null;
+    private final Point mPositionInParent = new Point();
+    private boolean mIsVisible = false;
 
     public static WindowContainerToken createMockWCToken() {
         final IWindowContainerToken itoken = mock(IWindowContainerToken.class);
@@ -68,17 +74,42 @@
         return this;
     }
 
+    public TestRunningTaskInfoBuilder setDisplayId(int displayId) {
+        mDisplayId = displayId;
+        return this;
+    }
+
+    public TestRunningTaskInfoBuilder setTaskDescriptionBuilder(
+            ActivityManager.TaskDescription.Builder builder) {
+        mTaskDescriptionBuilder = builder;
+        return this;
+    }
+
+    public TestRunningTaskInfoBuilder setPositionInParent(int x, int y) {
+        mPositionInParent.set(x, y);
+        return this;
+    }
+
+    public TestRunningTaskInfoBuilder setVisible(boolean isVisible) {
+        mIsVisible = isVisible;
+        return this;
+    }
+
     public ActivityManager.RunningTaskInfo build() {
         final ActivityManager.RunningTaskInfo info = new ActivityManager.RunningTaskInfo();
-        info.parentTaskId = INVALID_TASK_ID;
         info.taskId = sNextTaskId++;
         info.parentTaskId = mParentTaskId;
+        info.displayId = mDisplayId;
         info.configuration.windowConfiguration.setBounds(mBounds);
         info.configuration.windowConfiguration.setActivityType(mActivityType);
         info.configuration.windowConfiguration.setWindowingMode(mWindowingMode);
         info.token = mToken;
         info.isResizeable = true;
         info.supportsMultiWindow = true;
+        info.taskDescription =
+                mTaskDescriptionBuilder != null ? mTaskDescriptionBuilder.build() : null;
+        info.positionInParent = mPositionInParent;
+        info.isVisible = mIsVisible;
         return info;
     }
 }
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
new file mode 100644
index 0000000..bfe3b54
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingControllerTests.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.activityembedding;
+
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.spy;
+
+import static org.junit.Assume.assumeTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import android.content.Context;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+
+import com.android.wm.shell.ShellTestCase;
+import com.android.wm.shell.sysui.ShellInit;
+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;
+
+/**
+ * Tests for the activity embedding controller.
+ *
+ * Build/Install/Run:
+ *  atest WMShellUnitTests:ActivityEmbeddingControllerTests
+ */
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class ActivityEmbeddingControllerTests extends ShellTestCase {
+
+    private @Mock Context mContext;
+    private @Mock ShellInit mShellInit;
+    private @Mock Transitions mTransitions;
+    private ActivityEmbeddingController mController;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mController = spy(new ActivityEmbeddingController(mContext, mShellInit, mTransitions));
+    }
+
+    @Test
+    public void instantiate_addInitCallback() {
+        assumeTrue(Transitions.ENABLE_SHELL_TRANSITIONS);
+        verify(mShellInit, times(1)).addInitCallback(any(), any());
+    }
+}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/apppairs/AppPairTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/apppairs/AppPairTests.java
deleted file mode 100644
index e73d9aa..0000000
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/apppairs/AppPairTests.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.apppairs;
-
-import static android.view.Display.DEFAULT_DISPLAY;
-
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.app.ActivityManager;
-import android.hardware.display.DisplayManager;
-
-import androidx.test.annotation.UiThreadTest;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.filters.SmallTest;
-
-import com.android.wm.shell.ShellTaskOrganizer;
-import com.android.wm.shell.ShellTestCase;
-import com.android.wm.shell.TestRunningTaskInfoBuilder;
-import com.android.wm.shell.common.DisplayController;
-import com.android.wm.shell.common.SyncTransactionQueue;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-/**
- * Tests for {@link AppPair}
- * Build/Install/Run:
- *  atest WMShellUnitTests:AppPairTests
- */
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class AppPairTests extends ShellTestCase {
-
-    private AppPairsController mController;
-    @Mock private SyncTransactionQueue mSyncQueue;
-    @Mock private ShellTaskOrganizer mTaskOrganizer;
-    @Mock private DisplayController mDisplayController;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        when(mDisplayController.getDisplayContext(anyInt())).thenReturn(mContext);
-        when(mDisplayController.getDisplay(anyInt())).thenReturn(
-                mContext.getSystemService(DisplayManager.class).getDisplay(DEFAULT_DISPLAY));
-        mController = new TestAppPairsController(
-                mTaskOrganizer,
-                mSyncQueue,
-                mDisplayController);
-        spyOn(mController);
-    }
-
-    @After
-    public void tearDown() {}
-
-    @Test
-    @UiThreadTest
-    public void testContains() {
-        final ActivityManager.RunningTaskInfo task1 = new TestRunningTaskInfoBuilder().build();
-        final ActivityManager.RunningTaskInfo task2 = new TestRunningTaskInfoBuilder().build();
-
-        final AppPair pair = mController.pairInner(task1, task2);
-        assertThat(pair.contains(task1.taskId)).isTrue();
-        assertThat(pair.contains(task2.taskId)).isTrue();
-
-        pair.unpair();
-        assertThat(pair.contains(task1.taskId)).isFalse();
-        assertThat(pair.contains(task2.taskId)).isFalse();
-    }
-
-    @Test
-    @UiThreadTest
-    public void testVanishUnpairs() {
-        final ActivityManager.RunningTaskInfo task1 = new TestRunningTaskInfoBuilder().build();
-        final ActivityManager.RunningTaskInfo task2 = new TestRunningTaskInfoBuilder().build();
-
-        final AppPair pair = mController.pairInner(task1, task2);
-        assertThat(pair.contains(task1.taskId)).isTrue();
-        assertThat(pair.contains(task2.taskId)).isTrue();
-
-        pair.onTaskVanished(task1);
-        assertThat(pair.contains(task1.taskId)).isFalse();
-        assertThat(pair.contains(task2.taskId)).isFalse();
-    }
-
-    @Test
-    @UiThreadTest
-    public void testOnTaskInfoChanged_notSupportsMultiWindow() {
-        final ActivityManager.RunningTaskInfo task1 = new TestRunningTaskInfoBuilder().build();
-        final ActivityManager.RunningTaskInfo task2 = new TestRunningTaskInfoBuilder().build();
-
-        final AppPair pair = mController.pairInner(task1, task2);
-        assertThat(pair.contains(task1.taskId)).isTrue();
-        assertThat(pair.contains(task2.taskId)).isTrue();
-
-        task1.supportsMultiWindow = false;
-        pair.onTaskInfoChanged(task1);
-        verify(mController).unpair(pair.getRootTaskId());
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/apppairs/AppPairsControllerTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/apppairs/AppPairsControllerTests.java
deleted file mode 100644
index 505c153..0000000
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/apppairs/AppPairsControllerTests.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.apppairs;
-
-import static android.view.Display.DEFAULT_DISPLAY;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.Mockito.when;
-
-import android.app.ActivityManager;
-import android.hardware.display.DisplayManager;
-
-import androidx.test.annotation.UiThreadTest;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.filters.SmallTest;
-
-import com.android.wm.shell.ShellTaskOrganizer;
-import com.android.wm.shell.ShellTestCase;
-import com.android.wm.shell.TestRunningTaskInfoBuilder;
-import com.android.wm.shell.common.DisplayController;
-import com.android.wm.shell.common.SyncTransactionQueue;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-/** Tests for {@link AppPairsController} */
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class AppPairsControllerTests extends ShellTestCase {
-    private TestAppPairsController mController;
-    private TestAppPairsPool mPool;
-    @Mock private SyncTransactionQueue mSyncQueue;
-    @Mock private ShellTaskOrganizer mTaskOrganizer;
-    @Mock private DisplayController mDisplayController;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        when(mDisplayController.getDisplayContext(anyInt())).thenReturn(mContext);
-        when(mDisplayController.getDisplay(anyInt())).thenReturn(
-                mContext.getSystemService(DisplayManager.class).getDisplay(DEFAULT_DISPLAY));
-        mController = new TestAppPairsController(
-                mTaskOrganizer,
-                mSyncQueue,
-                mDisplayController);
-        mPool = mController.getPool();
-    }
-
-    @After
-    public void tearDown() {}
-
-    @Test
-    @UiThreadTest
-    public void testPairUnpair() {
-        final ActivityManager.RunningTaskInfo task1 = new TestRunningTaskInfoBuilder().build();
-        final ActivityManager.RunningTaskInfo task2 = new TestRunningTaskInfoBuilder().build();
-
-        final AppPair pair = mController.pairInner(task1, task2);
-        assertThat(pair.contains(task1.taskId)).isTrue();
-        assertThat(pair.contains(task2.taskId)).isTrue();
-        assertThat(mPool.poolSize()).isGreaterThan(0);
-
-        mController.unpair(task2.taskId);
-        assertThat(pair.contains(task1.taskId)).isFalse();
-        assertThat(pair.contains(task2.taskId)).isFalse();
-        assertThat(mPool.poolSize()).isGreaterThan(1);
-    }
-
-    @Test
-    @UiThreadTest
-    public void testUnpair_DontReleaseToPool() {
-        final ActivityManager.RunningTaskInfo task1 = new TestRunningTaskInfoBuilder().build();
-        final ActivityManager.RunningTaskInfo task2 = new TestRunningTaskInfoBuilder().build();
-
-        final AppPair pair = mController.pairInner(task1, task2);
-        assertThat(pair.contains(task1.taskId)).isTrue();
-        assertThat(pair.contains(task2.taskId)).isTrue();
-
-        mController.unpair(task2.taskId, false /* releaseToPool */);
-        assertThat(pair.contains(task1.taskId)).isFalse();
-        assertThat(pair.contains(task2.taskId)).isFalse();
-        assertThat(mPool.poolSize()).isEqualTo(1);
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/apppairs/AppPairsPoolTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/apppairs/AppPairsPoolTests.java
deleted file mode 100644
index a3f134e..0000000
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/apppairs/AppPairsPoolTests.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.apppairs;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.Mockito.when;
-
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.filters.SmallTest;
-
-import com.android.wm.shell.ShellTaskOrganizer;
-import com.android.wm.shell.ShellTestCase;
-import com.android.wm.shell.common.DisplayController;
-import com.android.wm.shell.common.SyncTransactionQueue;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-/** Tests for {@link AppPairsPool} */
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class AppPairsPoolTests extends ShellTestCase {
-    private TestAppPairsController mController;
-    private TestAppPairsPool mPool;
-    @Mock private SyncTransactionQueue mSyncQueue;
-    @Mock private ShellTaskOrganizer mTaskOrganizer;
-    @Mock private DisplayController mDisplayController;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        when(mDisplayController.getDisplayContext(anyInt())).thenReturn(mContext);
-        mController = new TestAppPairsController(
-                mTaskOrganizer,
-                mSyncQueue,
-                mDisplayController);
-        mPool = mController.getPool();
-    }
-
-    @After
-    public void tearDown() {}
-
-    @Test
-    public void testInitialState() {
-        // Pool should always start off with at least 1 entry.
-        assertThat(mPool.poolSize()).isGreaterThan(0);
-    }
-
-    @Test
-    public void testAcquireRelease() {
-        assertThat(mPool.poolSize()).isGreaterThan(0);
-        final AppPair appPair = mPool.acquire();
-        assertThat(mPool.poolSize()).isGreaterThan(0);
-        mPool.release(appPair);
-        assertThat(mPool.poolSize()).isGreaterThan(1);
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/apppairs/TestAppPairsController.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/apppairs/TestAppPairsController.java
deleted file mode 100644
index 294bc12..0000000
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/apppairs/TestAppPairsController.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.apppairs;
-
-import static org.mockito.Mockito.mock;
-
-import com.android.wm.shell.ShellTaskOrganizer;
-import com.android.wm.shell.common.DisplayController;
-import com.android.wm.shell.common.DisplayImeController;
-import com.android.wm.shell.common.DisplayInsetsController;
-import com.android.wm.shell.common.ShellExecutor;
-import com.android.wm.shell.common.SyncTransactionQueue;
-
-public class TestAppPairsController extends AppPairsController {
-    private TestAppPairsPool mPool;
-
-    public TestAppPairsController(ShellTaskOrganizer organizer, SyncTransactionQueue syncQueue,
-            DisplayController displayController) {
-        super(organizer, syncQueue, displayController, mock(ShellExecutor.class),
-                mock(DisplayImeController.class), mock(DisplayInsetsController.class));
-        mPool = new TestAppPairsPool(this);
-        setPairsPool(mPool);
-    }
-
-    TestAppPairsPool getPool() {
-        return mPool;
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/apppairs/TestAppPairsPool.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/apppairs/TestAppPairsPool.java
deleted file mode 100644
index 1ee7fff..0000000
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/apppairs/TestAppPairsPool.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.apppairs;
-
-import android.app.ActivityManager;
-
-import com.android.wm.shell.TestRunningTaskInfoBuilder;
-
-public class TestAppPairsPool extends AppPairsPool{
-    TestAppPairsPool(AppPairsController controller) {
-        super(controller);
-    }
-
-    @Override
-    void incrementPool() {
-        final AppPair entry = new AppPair(mController);
-        final ActivityManager.RunningTaskInfo info =
-                new TestRunningTaskInfoBuilder().build();
-        entry.onTaskAppeared(info, null /* leash */);
-        release(entry);
-    }
-}
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 e7c5cb2..ba81602 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
@@ -20,6 +20,7 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.eq;
@@ -39,6 +40,7 @@
 import android.graphics.Rect;
 import android.hardware.HardwareBuffer;
 import android.os.Handler;
+import android.os.IBinder;
 import android.os.RemoteCallback;
 import android.os.RemoteException;
 import android.provider.Settings;
@@ -57,6 +59,7 @@
 import androidx.test.platform.app.InstrumentationRegistry;
 
 import com.android.internal.util.test.FakeSettingsProvider;
+import com.android.wm.shell.ShellTestCase;
 import com.android.wm.shell.TestShellExecutor;
 
 import org.junit.Before;
@@ -74,7 +77,7 @@
 @TestableLooper.RunWithLooper
 @SmallTest
 @RunWith(AndroidTestingRunner.class)
-public class BackAnimationControllerTest {
+public class BackAnimationControllerTest extends ShellTestCase {
 
     private static final String ANIMATION_ENABLED = "1";
     private final TestShellExecutor mShellExecutor = new TestShellExecutor();
@@ -120,24 +123,22 @@
             HardwareBuffer hardwareBuffer,
             int backType,
             IOnBackInvokedCallback onBackInvokedCallback) {
-        BackNavigationInfo navigationInfo = new BackNavigationInfo(
-                backType,
-                topAnimationTarget,
-                screenshotSurface,
-                hardwareBuffer,
-                new WindowConfiguration(),
-                new RemoteCallback((bundle) -> {}),
-                onBackInvokedCallback);
-        try {
-            doReturn(navigationInfo).when(mActivityTaskManager).startBackNavigation(anyBoolean());
-        } catch (RemoteException ex) {
-            ex.rethrowFromSystemServer();
-        }
+        BackNavigationInfo.Builder builder = new BackNavigationInfo.Builder()
+                .setType(backType)
+                .setDepartingAnimationTarget(topAnimationTarget)
+                .setScreenshotSurface(screenshotSurface)
+                .setScreenshotBuffer(hardwareBuffer)
+                .setTaskWindowConfiguration(new WindowConfiguration())
+                .setOnBackNavigationDone(new RemoteCallback((bundle) -> {}))
+                .setOnBackInvokedCallback(onBackInvokedCallback);
+
+        createNavigationInfo(builder);
     }
 
     private void createNavigationInfo(BackNavigationInfo.Builder builder) {
         try {
-            doReturn(builder.build()).when(mActivityTaskManager).startBackNavigation(anyBoolean());
+            doReturn(builder.build()).when(mActivityTaskManager)
+                    .startBackNavigation(anyBoolean(), any());
         } catch (RemoteException ex) {
             ex.rethrowFromSystemServer();
         }
@@ -296,6 +297,34 @@
         verify(mIOnBackInvokedCallback).onBackStarted();
     }
 
+
+    @Test
+    public void cancelBackInvokeWhenLostFocus() throws RemoteException {
+        mController.setBackToLauncherCallback(mIOnBackInvokedCallback);
+        RemoteAnimationTarget animationTarget = createAnimationTarget();
+
+        createNavigationInfo(animationTarget, null, null,
+                BackNavigationInfo.TYPE_RETURN_TO_HOME, null);
+
+        doMotionEvent(MotionEvent.ACTION_DOWN, 0);
+        // Check that back start and progress is dispatched when first move.
+        doMotionEvent(MotionEvent.ACTION_MOVE, 100);
+        verify(mIOnBackInvokedCallback).onBackStarted();
+
+        // Check that back invocation is dispatched.
+        mController.setTriggerBack(true);   // Fake trigger back
+
+        // In case the focus has been changed.
+        IBinder token = mock(IBinder.class);
+        mController.mFocusObserver.focusLost(token);
+        mShellExecutor.flushAll();
+        verify(mIOnBackInvokedCallback).onBackCancelled();
+
+        // No more back invoke.
+        doMotionEvent(MotionEvent.ACTION_UP, 0);
+        verify(mIOnBackInvokedCallback, never()).onBackInvoked();
+    }
+
     private void doMotionEvent(int actionDown, int coordinate) {
         mController.onMotionEvent(
                 coordinate, coordinate,
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubblesNavBarMotionEventHandlerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubblesNavBarMotionEventHandlerTest.java
new file mode 100644
index 0000000..44ff354
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubblesNavBarMotionEventHandlerTest.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.bubbles;
+
+import static android.view.MotionEvent.ACTION_CANCEL;
+import static android.view.MotionEvent.ACTION_DOWN;
+import static android.view.MotionEvent.ACTION_MOVE;
+import static android.view.MotionEvent.ACTION_UP;
+
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.floatThat;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.verifyZeroInteractions;
+
+import android.os.SystemClock;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+import android.view.MotionEvent;
+import android.view.WindowManager;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.wm.shell.ShellTestCase;
+import com.android.wm.shell.bubbles.BubblesNavBarMotionEventHandler.MotionEventListener;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+/**
+ * Test {@link MotionEvent} handling in {@link BubblesNavBarMotionEventHandler}.
+ * Verifies that swipe events
+ */
+@SmallTest
+@TestableLooper.RunWithLooper(setAsMainLooper = true)
+@RunWith(AndroidTestingRunner.class)
+public class BubblesNavBarMotionEventHandlerTest extends ShellTestCase {
+
+    private BubblesNavBarMotionEventHandler mMotionEventHandler;
+    @Mock
+    private WindowManager mWindowManager;
+    @Mock
+    private Runnable mInterceptTouchRunnable;
+    @Mock
+    private MotionEventListener mMotionEventListener;
+    private long mMotionEventTime;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        TestableBubblePositioner positioner = new TestableBubblePositioner(getContext(),
+                mWindowManager);
+        mMotionEventHandler = new BubblesNavBarMotionEventHandler(getContext(), positioner,
+                mInterceptTouchRunnable, mMotionEventListener);
+        mMotionEventTime = SystemClock.uptimeMillis();
+    }
+
+    @Test
+    public void testMotionEvent_swipeUpInGestureZone_handled() {
+        mMotionEventHandler.onMotionEvent(newEvent(ACTION_DOWN, 0, 990));
+        mMotionEventHandler.onMotionEvent(newEvent(ACTION_MOVE, 0, 690));
+        mMotionEventHandler.onMotionEvent(newEvent(ACTION_MOVE, 0, 490));
+        mMotionEventHandler.onMotionEvent(newEvent(ACTION_MOVE, 0, 390));
+        mMotionEventHandler.onMotionEvent(newEvent(ACTION_UP, 0, 390));
+
+        verify(mMotionEventListener).onDown(0, 990);
+        verify(mMotionEventListener).onMove(0, -300);
+        verify(mMotionEventListener).onMove(0, -500);
+        verify(mMotionEventListener).onMove(0, -600);
+        // Check that velocity up is about 5000
+        verify(mMotionEventListener).onUp(eq(0f), floatThat(f -> Math.round(f) == -5000));
+        verifyZeroInteractions(mMotionEventListener);
+        verify(mInterceptTouchRunnable).run();
+    }
+
+    @Test
+    public void testMotionEvent_swipeUpOutsideGestureZone_ignored() {
+        mMotionEventHandler.onMotionEvent(newEvent(ACTION_DOWN, 0, 500));
+        mMotionEventHandler.onMotionEvent(newEvent(ACTION_MOVE, 0, 100));
+        mMotionEventHandler.onMotionEvent(newEvent(ACTION_UP, 0, 100));
+
+        verifyZeroInteractions(mMotionEventListener);
+        verifyZeroInteractions(mInterceptTouchRunnable);
+    }
+
+    @Test
+    public void testMotionEvent_horizontalMoveMoreThanTouchSlop_handled() {
+        mMotionEventHandler.onMotionEvent(newEvent(ACTION_DOWN, 0, 990));
+        mMotionEventHandler.onMotionEvent(newEvent(ACTION_MOVE, 100, 990));
+        mMotionEventHandler.onMotionEvent(newEvent(ACTION_UP, 100, 990));
+
+        verify(mMotionEventListener).onDown(0, 990);
+        verify(mMotionEventListener).onMove(100, 0);
+        verify(mMotionEventListener).onUp(0, 0);
+        verifyZeroInteractions(mMotionEventListener);
+        verify(mInterceptTouchRunnable).run();
+    }
+
+    @Test
+    public void testMotionEvent_moveLessThanTouchSlop_ignored() {
+        mMotionEventHandler.onMotionEvent(newEvent(ACTION_DOWN, 0, 990));
+        mMotionEventHandler.onMotionEvent(newEvent(ACTION_MOVE, 0, 989));
+        mMotionEventHandler.onMotionEvent(newEvent(ACTION_UP, 0, 989));
+
+        verify(mMotionEventListener).onDown(0, 990);
+        verifyNoMoreInteractions(mMotionEventListener);
+        verifyZeroInteractions(mInterceptTouchRunnable);
+    }
+
+    @Test
+    public void testMotionEvent_actionCancel_listenerNotified() {
+        mMotionEventHandler.onMotionEvent(newEvent(ACTION_DOWN, 0, 990));
+        mMotionEventHandler.onMotionEvent(newEvent(ACTION_CANCEL, 0, 990));
+        verify(mMotionEventListener).onDown(0, 990);
+        verify(mMotionEventListener).onCancel();
+        verifyNoMoreInteractions(mMotionEventListener);
+        verifyZeroInteractions(mInterceptTouchRunnable);
+    }
+
+    private MotionEvent newEvent(int actionDown, float x, float y) {
+        MotionEvent event = MotionEvent.obtain(0L, mMotionEventTime, actionDown, x, y, 0);
+        mMotionEventTime += 10;
+        return event;
+    }
+}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubblesTestActivity.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubblesTestActivity.java
index d5fbe55..0537d0e 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubblesTestActivity.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubblesTestActivity.java
@@ -20,7 +20,7 @@
 import android.content.Intent;
 import android.os.Bundle;
 
-import com.android.wm.shell.R;
+import com.android.wm.shell.tests.R;
 
 /**
  * Referenced by NotificationTestHelper#makeBubbleMetadata
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/animation/ExpandedViewAnimationControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/animation/ExpandedViewAnimationControllerTest.java
new file mode 100644
index 0000000..991913a
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/animation/ExpandedViewAnimationControllerTest.java
@@ -0,0 +1,181 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.bubbles.animation;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assume.assumeTrue;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+import android.view.ViewConfiguration;
+import android.view.WindowManager;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.wm.shell.ShellTestCase;
+import com.android.wm.shell.bubbles.BubbleExpandedView;
+import com.android.wm.shell.bubbles.TestableBubblePositioner;
+
+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 ExpandedViewAnimationControllerTest extends ShellTestCase {
+
+    private ExpandedViewAnimationController mController;
+
+    @Mock
+    private WindowManager mWindowManager;
+
+    @Mock
+    private BubbleExpandedView mMockExpandedView;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        TestableBubblePositioner positioner = new TestableBubblePositioner(getContext(),
+                mWindowManager);
+        mController = new ExpandedViewAnimationControllerImpl(getContext(), positioner);
+
+        mController.setExpandedView(mMockExpandedView);
+        when(mMockExpandedView.getContentHeight()).thenReturn(1000);
+    }
+
+    @Test
+    public void testUpdateDrag_expandedViewMovesUpAndClipped() {
+        // Drag by 50 pixels which corresponds to 10 pixels with overscroll
+        int dragDistance = 50;
+        int dampenedDistance = 10;
+
+        mController.updateDrag(dragDistance);
+
+        verify(mMockExpandedView).setTopClip(dampenedDistance);
+        verify(mMockExpandedView).setContentTranslationY(-dampenedDistance);
+        verify(mMockExpandedView).setManageButtonTranslationY(-dampenedDistance);
+    }
+
+    @Test
+    public void testUpdateDrag_zOrderUpdates() {
+        mController.updateDrag(10);
+        mController.updateDrag(20);
+
+        verify(mMockExpandedView, times(1)).setSurfaceZOrderedOnTop(true);
+        verify(mMockExpandedView, times(1)).setAnimating(true);
+    }
+
+    @Test
+    public void testUpdateDrag_moveBackToZero_zOrderRestored() {
+        mController.updateDrag(50);
+        reset(mMockExpandedView);
+        mController.updateDrag(0);
+        mController.updateDrag(0);
+
+        verify(mMockExpandedView, times(1)).setSurfaceZOrderedOnTop(false);
+        verify(mMockExpandedView, times(1)).setAnimating(false);
+    }
+
+    @Test
+    public void testUpdateDrag_hapticFeedbackOnlyOnce() {
+        // Drag by 10 which is below the collapse threshold - no feedback
+        mController.updateDrag(10);
+        verify(mMockExpandedView, times(0)).performHapticFeedback(anyInt());
+        // 150 takes it over the threshold - perform feedback
+        mController.updateDrag(150);
+        verify(mMockExpandedView, times(1)).performHapticFeedback(anyInt());
+        // Continue dragging, no more feedback
+        mController.updateDrag(200);
+        verify(mMockExpandedView, times(1)).performHapticFeedback(anyInt());
+        // Drag below threshold and over again - no more feedback
+        mController.updateDrag(10);
+        mController.updateDrag(150);
+        verify(mMockExpandedView, times(1)).performHapticFeedback(anyInt());
+    }
+
+    @Test
+    public void testShouldCollapse_doNotCollapseIfNotDragged() {
+        assertThat(mController.shouldCollapse()).isFalse();
+    }
+
+    @Test
+    public void testShouldCollapse_doNotCollapseIfVelocityDown() {
+        assumeTrue("Min fling velocity should be > 1 for this test", getMinFlingVelocity() > 1);
+        mController.setSwipeVelocity(getVelocityAboveMinFling());
+        assertThat(mController.shouldCollapse()).isFalse();
+    }
+
+    @Test
+    public void tesShouldCollapse_doNotCollapseIfVelocityUpIsSmall() {
+        assumeTrue("Min fling velocity should be > 1 for this test", getMinFlingVelocity() > 1);
+        mController.setSwipeVelocity(-getVelocityBelowMinFling());
+        assertThat(mController.shouldCollapse()).isFalse();
+    }
+
+    @Test
+    public void testShouldCollapse_collapseIfVelocityUpIsLarge() {
+        assumeTrue("Min fling velocity should be > 1 for this test", getMinFlingVelocity() > 1);
+        mController.setSwipeVelocity(-getVelocityAboveMinFling());
+        assertThat(mController.shouldCollapse()).isTrue();
+    }
+
+    @Test
+    public void testShouldCollapse_collapseIfPastThreshold() {
+        mController.updateDrag(500);
+        assertThat(mController.shouldCollapse()).isTrue();
+    }
+
+    @Test
+    public void testReset() {
+        mController.updateDrag(100);
+        reset(mMockExpandedView);
+        mController.reset();
+        verify(mMockExpandedView, atLeastOnce()).setAnimating(false);
+        verify(mMockExpandedView).setContentAlpha(1);
+        verify(mMockExpandedView).setBackgroundAlpha(1);
+        verify(mMockExpandedView).setManageButtonAlpha(1);
+        verify(mMockExpandedView).setManageButtonAlpha(1);
+        verify(mMockExpandedView).setTopClip(0);
+        verify(mMockExpandedView).setContentTranslationY(-0f);
+        verify(mMockExpandedView).setManageButtonTranslationY(-0f);
+        verify(mMockExpandedView).setBottomClip(0);
+        verify(mMockExpandedView).movePointerBy(0, 0);
+        assertThat(mController.shouldCollapse()).isFalse();
+    }
+
+    private int getVelocityBelowMinFling() {
+        return getMinFlingVelocity() - 1;
+    }
+
+    private int getVelocityAboveMinFling() {
+        return getMinFlingVelocity() + 1;
+    }
+
+    private int getMinFlingVelocity() {
+        return ViewConfiguration.get(getContext()).getScaledMinimumFlingVelocity();
+    }
+}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/storage/BubblePersistentRepositoryTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/storage/BubblePersistentRepositoryTest.kt
index 0972cf2..1636c5f 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/storage/BubblePersistentRepositoryTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/storage/BubblePersistentRepositoryTest.kt
@@ -25,6 +25,7 @@
 import junit.framework.Assert.assertEquals
 import junit.framework.Assert.assertNotNull
 import junit.framework.Assert.assertTrue
+import org.junit.After
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -61,6 +62,12 @@
         bubbles.put(1, user1Bubbles)
     }
 
+    @After
+    fun teardown() {
+        // Clean up the any persisted bubbles for the next run
+        repository.persistsToDisk(SparseArray())
+    }
+
     @Test
     fun testReadWriteOperation() {
         // Verify read before write doesn't cause FileNotFoundException
@@ -71,4 +78,4 @@
         repository.persistsToDisk(bubbles)
         assertTrue(sparseArraysEqual(bubbles, repository.readFromDisk()))
     }
-}
\ No newline at end of file
+}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/DisplayChangeControllerTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/DisplayChangeControllerTests.java
new file mode 100644
index 0000000..b8aa8e7
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/DisplayChangeControllerTests.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.common;
+
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.spy;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import android.view.IWindowManager;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+
+import com.android.wm.shell.ShellTestCase;
+import com.android.wm.shell.sysui.ShellInit;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+/**
+ * Tests for the display change controller.
+ *
+ * Build/Install/Run:
+ *  atest WMShellUnitTests:DisplayChangeControllerTests
+ */
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class DisplayChangeControllerTests extends ShellTestCase {
+
+    private @Mock IWindowManager mWM;
+    private @Mock ShellInit mShellInit;
+    private @Mock ShellExecutor mMainExecutor;
+    private DisplayChangeController mController;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mController = spy(new DisplayChangeController(mWM, mShellInit, mMainExecutor));
+    }
+
+    @Test
+    public void instantiate_addInitCallback() {
+        verify(mShellInit, times(1)).addInitCallback(any(), any());
+    }
+}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/DisplayControllerTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/DisplayControllerTests.java
new file mode 100644
index 0000000..1e5e153
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/DisplayControllerTests.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.common;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import android.content.Context;
+import android.view.IWindowManager;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+
+import com.android.wm.shell.ShellTestCase;
+import com.android.wm.shell.sysui.ShellInit;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+/**
+ * Tests for the display controller.
+ *
+ * Build/Install/Run:
+ *  atest WMShellUnitTests:DisplayControllerTests
+ */
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class DisplayControllerTests extends ShellTestCase {
+
+    private @Mock Context mContext;
+    private @Mock IWindowManager mWM;
+    private @Mock ShellInit mShellInit;
+    private @Mock ShellExecutor mMainExecutor;
+    private DisplayController mController;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mController = new DisplayController(mContext, mWM, mShellInit, mMainExecutor);
+    }
+
+    @Test
+    public void instantiateController_addInitCallback() {
+        verify(mShellInit, times(1)).addInitCallback(any(), eq(mController));
+    }
+}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/DisplayImeControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/DisplayImeControllerTest.java
index b888450..9967e5f 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/DisplayImeControllerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/DisplayImeControllerTest.java
@@ -26,6 +26,7 @@
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyZeroInteractions;
 
@@ -39,26 +40,33 @@
 import androidx.test.filters.SmallTest;
 
 import com.android.internal.view.IInputMethodManager;
+import com.android.wm.shell.ShellTestCase;
+import com.android.wm.shell.sysui.ShellInit;
 
 import org.junit.Before;
 import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
 
 import java.util.concurrent.Executor;
 
 @SmallTest
-public class DisplayImeControllerTest {
+public class DisplayImeControllerTest extends ShellTestCase {
 
+    @Mock
     private SurfaceControl.Transaction mT;
-    private DisplayImeController.PerDisplay mPerDisplay;
+    @Mock
     private IInputMethodManager mMock;
+    @Mock
+    private ShellInit mShellInit;
+    private DisplayImeController.PerDisplay mPerDisplay;
     private Executor mExecutor;
 
     @Before
     public void setUp() throws Exception {
-        mT = mock(SurfaceControl.Transaction.class);
-        mMock = mock(IInputMethodManager.class);
+        MockitoAnnotations.initMocks(this);
         mExecutor = spy(Runnable::run);
-        mPerDisplay = new DisplayImeController(null, null, null, mExecutor, new TransactionPool() {
+        mPerDisplay = new DisplayImeController(null, mShellInit, null, null, new TransactionPool() {
             @Override
             public SurfaceControl.Transaction acquire() {
                 return mT;
@@ -67,7 +75,7 @@
             @Override
             public void release(SurfaceControl.Transaction t) {
             }
-        }) {
+        }, mExecutor) {
             @Override
             public IInputMethodManager getImms() {
                 return mMock;
@@ -78,6 +86,11 @@
     }
 
     @Test
+    public void instantiateController_addInitCallback() {
+        verify(mShellInit, times(1)).addInitCallback(any(), any());
+    }
+
+    @Test
     public void insetsControlChanged_schedulesNoWorkOnExecutor() {
         mPerDisplay.insetsControlChanged(insetsStateWithIme(false), insetsSourceControl());
         verifyZeroInteractions(mExecutor);
@@ -121,7 +134,7 @@
     private InsetsSourceControl[] insetsSourceControl() {
         return new InsetsSourceControl[]{
                 new InsetsSourceControl(
-                        ITYPE_IME, mock(SurfaceControl.class), new Point(0, 0), Insets.NONE)
+                        ITYPE_IME, mock(SurfaceControl.class), false, new Point(0, 0), Insets.NONE)
         };
     }
 
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/DisplayInsetsControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/DisplayInsetsControllerTest.java
index 3bf06cc..5f5a3c5 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/DisplayInsetsControllerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/DisplayInsetsControllerTest.java
@@ -19,11 +19,13 @@
 import static android.view.Display.DEFAULT_DISPLAY;
 
 import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.ArgumentMatchers.notNull;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
+import android.content.ComponentName;
 import android.os.RemoteException;
 import android.util.SparseArray;
 import android.view.IDisplayWindowInsetsController;
@@ -34,7 +36,9 @@
 
 import androidx.test.filters.SmallTest;
 
+import com.android.wm.shell.ShellTestCase;
 import com.android.wm.shell.TestShellExecutor;
+import com.android.wm.shell.sysui.ShellInit;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -45,7 +49,7 @@
 import java.util.List;
 
 @SmallTest
-public class DisplayInsetsControllerTest {
+public class DisplayInsetsControllerTest extends ShellTestCase {
 
     private static final int SECOND_DISPLAY = DEFAULT_DISPLAY + 10;
 
@@ -53,6 +57,8 @@
     private IWindowManager mWm;
     @Mock
     private DisplayController mDisplayController;
+    @Mock
+    private ShellInit mShellInit;
     private DisplayInsetsController mController;
     private SparseArray<IDisplayWindowInsetsController> mInsetsControllersByDisplayId;
     private TestShellExecutor mExecutor;
@@ -67,11 +73,16 @@
         mInsetsControllersByDisplayId = new SparseArray<>();
         mDisplayIdCaptor =  ArgumentCaptor.forClass(Integer.class);
         mInsetsControllerCaptor = ArgumentCaptor.forClass(IDisplayWindowInsetsController.class);
-        mController = new DisplayInsetsController(mWm, mDisplayController, mExecutor);
+        mController = new DisplayInsetsController(mWm, mShellInit, mDisplayController, mExecutor);
         addDisplay(DEFAULT_DISPLAY);
     }
 
     @Test
+    public void instantiateController_addInitCallback() {
+        verify(mShellInit, times(1)).addInitCallback(any(), any());
+    }
+
+    @Test
     public void testOnDisplayAdded_setsDisplayWindowInsetsControllerOnWMService()
             throws RemoteException {
         addDisplay(SECOND_DISPLAY);
@@ -164,7 +175,7 @@
         int hideInsetsCount = 0;
 
         @Override
-        public void topFocusedWindowChanged(String packageName,
+        public void topFocusedWindowChanged(ComponentName component,
                 InsetsVisibilities requestedVisibilities) {
             topFocusedWindowChangedCount++;
         }
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/DisplayLayoutTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/DisplayLayoutTest.java
index 0ffa5b3..514390f 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/DisplayLayoutTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/DisplayLayoutTest.java
@@ -41,6 +41,7 @@
 
 import com.android.internal.R;
 import com.android.internal.policy.SystemBarUtils;
+import com.android.wm.shell.ShellTestCase;
 
 import org.junit.After;
 import org.junit.Before;
@@ -54,7 +55,7 @@
  *  atest WMShellUnitTests:DisplayLayoutTest
  */
 @SmallTest
-public class DisplayLayoutTest {
+public class DisplayLayoutTest extends ShellTestCase {
     private MockitoSession mMockitoSession;
 
     @Before
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/TaskStackListenerImplTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/TaskStackListenerImplTest.java
index 96938eb..1347e06 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/TaskStackListenerImplTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/TaskStackListenerImplTest.java
@@ -35,6 +35,8 @@
 
 import androidx.test.filters.SmallTest;
 
+import com.android.wm.shell.ShellTestCase;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -47,7 +49,7 @@
 @RunWith(AndroidTestingRunner.class)
 @TestableLooper.RunWithLooper
 @SmallTest
-public class TaskStackListenerImplTest {
+public class TaskStackListenerImplTest extends ShellTestCase {
 
     @Mock
     private IActivityTaskManager mActivityTaskManager;
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/split/SplitLayoutTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/split/SplitLayoutTests.java
index f1e602f..95725bb 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/split/SplitLayoutTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/common/split/SplitLayoutTests.java
@@ -133,7 +133,7 @@
 
         mSplitLayout.snapToTarget(0 /* currentPosition */, snapTarget);
         waitDividerFlingFinished();
-        verify(mSplitLayoutHandler).onSnappedToDismiss(eq(false));
+        verify(mSplitLayoutHandler).onSnappedToDismiss(eq(false), anyInt());
     }
 
     @Test
@@ -145,7 +145,7 @@
 
         mSplitLayout.snapToTarget(0 /* currentPosition */, snapTarget);
         waitDividerFlingFinished();
-        verify(mSplitLayoutHandler).onSnappedToDismiss(eq(true));
+        verify(mSplitLayoutHandler).onSnappedToDismiss(eq(true), anyInt());
     }
 
     @Test
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIControllerTest.java
index 596100d..828c13e 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIControllerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIControllerTest.java
@@ -53,6 +53,7 @@
 import com.android.wm.shell.common.ShellExecutor;
 import com.android.wm.shell.common.SyncTransactionQueue;
 import com.android.wm.shell.compatui.letterboxedu.LetterboxEduWindowManager;
+import com.android.wm.shell.sysui.ShellController;
 import com.android.wm.shell.transition.Transitions;
 
 import org.junit.Before;
@@ -78,6 +79,7 @@
     private static final int TASK_ID = 12;
 
     private CompatUIController mController;
+    private @Mock ShellController mMockShellController;
     private @Mock DisplayController mMockDisplayController;
     private @Mock DisplayInsetsController mMockDisplayInsetsController;
     private @Mock DisplayLayout mMockDisplayLayout;
@@ -105,7 +107,7 @@
         doReturn(TASK_ID).when(mMockLetterboxEduLayout).getTaskId();
         doReturn(true).when(mMockLetterboxEduLayout).createLayout(anyBoolean());
         doReturn(true).when(mMockLetterboxEduLayout).updateCompatInfo(any(), any(), anyBoolean());
-        mController = new CompatUIController(mContext, mMockDisplayController,
+        mController = new CompatUIController(mContext, mMockShellController, mMockDisplayController,
                 mMockDisplayInsetsController, mMockImeController, mMockSyncQueue, mMockExecutor,
                 mMockTransitionsLazy) {
             @Override
@@ -124,6 +126,11 @@
     }
 
     @Test
+    public void instantiateController_registerKeyguardChangeListener() {
+        verify(mMockShellController, times(1)).addKeyguardChangeListener(any());
+    }
+
+    @Test
     public void testListenerRegistered() {
         verify(mMockDisplayController).addDisplayWindowListener(mController);
         verify(mMockImeController).addPositionProcessor(mController);
@@ -324,7 +331,7 @@
                 /* hasSizeCompat= */ true, CAMERA_COMPAT_CONTROL_HIDDEN), mMockTaskListener);
 
         // Verify that the restart button is hidden after keyguard becomes showing.
-        mController.onKeyguardShowingChanged(true);
+        mController.onKeyguardVisibilityChanged(true, false, false);
 
         verify(mMockCompatLayout).updateVisibility(false);
         verify(mMockLetterboxEduLayout).updateVisibility(false);
@@ -340,7 +347,7 @@
                 false);
 
         // Verify button is shown after keyguard becomes not showing.
-        mController.onKeyguardShowingChanged(false);
+        mController.onKeyguardVisibilityChanged(false, false, false);
 
         verify(mMockCompatLayout).updateVisibility(true);
         verify(mMockLetterboxEduLayout).updateVisibility(true);
@@ -352,7 +359,7 @@
                 /* hasSizeCompat= */ true, CAMERA_COMPAT_CONTROL_HIDDEN), mMockTaskListener);
 
         mController.onImeVisibilityChanged(DISPLAY_ID, /* isShowing= */ true);
-        mController.onKeyguardShowingChanged(true);
+        mController.onKeyguardVisibilityChanged(true, false, false);
 
         verify(mMockCompatLayout, times(2)).updateVisibility(false);
         verify(mMockLetterboxEduLayout, times(2)).updateVisibility(false);
@@ -360,7 +367,7 @@
         clearInvocations(mMockCompatLayout, mMockLetterboxEduLayout);
 
         // Verify button remains hidden after keyguard becomes not showing since IME is showing.
-        mController.onKeyguardShowingChanged(false);
+        mController.onKeyguardVisibilityChanged(false, false, false);
 
         verify(mMockCompatLayout).updateVisibility(false);
         verify(mMockLetterboxEduLayout).updateVisibility(false);
@@ -378,7 +385,7 @@
                 /* hasSizeCompat= */ true, CAMERA_COMPAT_CONTROL_HIDDEN), mMockTaskListener);
 
         mController.onImeVisibilityChanged(DISPLAY_ID, /* isShowing= */ true);
-        mController.onKeyguardShowingChanged(true);
+        mController.onKeyguardVisibilityChanged(true, false, false);
 
         verify(mMockCompatLayout, times(2)).updateVisibility(false);
         verify(mMockLetterboxEduLayout, times(2)).updateVisibility(false);
@@ -392,7 +399,7 @@
         verify(mMockLetterboxEduLayout).updateVisibility(false);
 
         // Verify button is shown after keyguard becomes not showing.
-        mController.onKeyguardShowingChanged(false);
+        mController.onKeyguardVisibilityChanged(false, false, false);
 
         verify(mMockCompatLayout).updateVisibility(true);
         verify(mMockLetterboxEduLayout).updateVisibility(true);
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/draganddrop/DragAndDropControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/draganddrop/DragAndDropControllerTest.java
index aaeebef..b6dbcf2 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/draganddrop/DragAndDropControllerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/draganddrop/DragAndDropControllerTest.java
@@ -21,6 +21,7 @@
 import static android.view.DragEvent.ACTION_DRAG_STARTED;
 
 import static org.junit.Assert.assertFalse;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
@@ -44,9 +45,12 @@
 
 import com.android.internal.logging.UiEventLogger;
 import com.android.launcher3.icons.IconProvider;
+import com.android.wm.shell.ShellTestCase;
 import com.android.wm.shell.common.DisplayController;
 import com.android.wm.shell.common.ShellExecutor;
 import com.android.wm.shell.splitscreen.SplitScreenController;
+import com.android.wm.shell.sysui.ShellController;
+import com.android.wm.shell.sysui.ShellInit;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -54,35 +58,50 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
-import java.util.Optional;
-
 /**
  * Tests for the drag and drop controller.
  */
 @SmallTest
 @RunWith(AndroidJUnit4.class)
-public class DragAndDropControllerTest {
+public class DragAndDropControllerTest extends ShellTestCase {
 
     @Mock
     private Context mContext;
-
+    @Mock
+    private ShellInit mShellInit;
+    @Mock
+    private ShellController mShellController;
     @Mock
     private DisplayController mDisplayController;
-
     @Mock
     private UiEventLogger mUiEventLogger;
-
     @Mock
     private DragAndDropController.DragAndDropListener mDragAndDropListener;
+    @Mock
+    private IconProvider mIconProvider;
+    @Mock
+    private ShellExecutor mMainExecutor;
+    @Mock
+    private SplitScreenController mSplitScreenController;
 
     private DragAndDropController mController;
 
     @Before
     public void setUp() throws RemoteException {
         MockitoAnnotations.initMocks(this);
-        mController = new DragAndDropController(mContext, mDisplayController, mUiEventLogger,
-                mock(IconProvider.class), mock(ShellExecutor.class));
-        mController.initialize(Optional.of(mock(SplitScreenController.class)));
+        mController = new DragAndDropController(mContext, mShellInit, mShellController,
+                mDisplayController, mUiEventLogger, mIconProvider, mMainExecutor);
+        mController.onInit();
+    }
+
+    @Test
+    public void instantiateController_addInitCallback() {
+        verify(mShellInit, times(1)).addInitCallback(any(), any());
+    }
+
+    @Test
+    public void instantiateController_registerConfigChangeListener() {
+        verify(mShellController, times(1)).addConfigurationChangeListener(any());
     }
 
     @Test
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/draganddrop/DragAndDropPolicyTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/draganddrop/DragAndDropPolicyTest.java
index bb6026c..9e988e8 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/draganddrop/DragAndDropPolicyTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/draganddrop/DragAndDropPolicyTest.java
@@ -34,7 +34,6 @@
 import static com.android.wm.shell.draganddrop.DragAndDropPolicy.Target.TYPE_SPLIT_RIGHT;
 import static com.android.wm.shell.draganddrop.DragAndDropPolicy.Target.TYPE_SPLIT_TOP;
 
-import static junit.framework.Assert.assertNull;
 import static junit.framework.Assert.assertTrue;
 import static junit.framework.Assert.fail;
 
@@ -57,7 +56,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
-import android.content.pm.ResolveInfo;
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.graphics.Insets;
@@ -68,6 +66,7 @@
 import androidx.test.filters.SmallTest;
 
 import com.android.internal.logging.InstanceId;
+import com.android.wm.shell.ShellTestCase;
 import com.android.wm.shell.common.DisplayLayout;
 import com.android.wm.shell.draganddrop.DragAndDropPolicy.Target;
 import com.android.wm.shell.splitscreen.SplitScreenController;
@@ -87,7 +86,7 @@
  */
 @SmallTest
 @RunWith(AndroidJUnit4.class)
-public class DragAndDropPolicyTest {
+public class DragAndDropPolicyTest extends ShellTestCase {
 
     @Mock
     private Context mContext;
@@ -182,8 +181,10 @@
         info.configuration.windowConfiguration.setActivityType(actType);
         info.configuration.windowConfiguration.setWindowingMode(winMode);
         info.isResizeable = true;
-        info.baseActivity = new ComponentName(getInstrumentation().getContext().getPackageName(),
+        info.baseActivity = new ComponentName(getInstrumentation().getContext(),
                 ".ActivityWithMode" + winMode);
+        info.baseIntent = new Intent();
+        info.baseIntent.setComponent(info.baseActivity);
         ActivityInfo activityInfo = new ActivityInfo();
         activityInfo.packageName = info.baseActivity.getPackageName();
         activityInfo.name = info.baseActivity.getClassName();
@@ -263,62 +264,6 @@
         }
     }
 
-    @Test
-    public void testLaunchMultipleTask_differentActivity() {
-        setRunningTask(mFullscreenAppTask);
-        mPolicy.start(mLandscapeDisplayLayout, mActivityClipData, mLoggerSessionId);
-        Intent fillInIntent = mPolicy.getStartIntentFillInIntent(mock(PendingIntent.class), 0);
-        assertNull(fillInIntent);
-    }
-
-    @Test
-    public void testLaunchMultipleTask_differentActivity_inSplitscreen() {
-        setRunningTask(mFullscreenAppTask);
-        doReturn(true).when(mSplitScreenStarter).isSplitScreenVisible();
-        doReturn(mFullscreenAppTask).when(mSplitScreenStarter).getTaskInfo(anyInt());
-        mPolicy.start(mLandscapeDisplayLayout, mActivityClipData, mLoggerSessionId);
-        Intent fillInIntent = mPolicy.getStartIntentFillInIntent(mock(PendingIntent.class), 0);
-        assertNull(fillInIntent);
-    }
-
-    @Test
-    public void testLaunchMultipleTask_sameActivity() {
-        setRunningTask(mFullscreenAppTask);
-
-        // Replace the mocked drag pending intent and ensure it resolves to the same activity
-        PendingIntent launchIntent = mock(PendingIntent.class);
-        ResolveInfo launchInfo = new ResolveInfo();
-        launchInfo.activityInfo = mFullscreenAppTask.topActivityInfo;
-        doReturn(Collections.singletonList(launchInfo))
-                .when(launchIntent).queryIntentComponents(anyInt());
-        mActivityClipData.getItemAt(0).getIntent().putExtra(ClipDescription.EXTRA_PENDING_INTENT,
-                launchIntent);
-
-        mPolicy.start(mLandscapeDisplayLayout, mActivityClipData, mLoggerSessionId);
-        Intent fillInIntent = mPolicy.getStartIntentFillInIntent(launchIntent, 0);
-        assertTrue((fillInIntent.getFlags() & Intent.FLAG_ACTIVITY_MULTIPLE_TASK) != 0);
-    }
-
-    @Test
-    public void testLaunchMultipleTask_sameActivity_inSplitScreen() {
-        setRunningTask(mFullscreenAppTask);
-
-        // Replace the mocked drag pending intent and ensure it resolves to the same activity
-        PendingIntent launchIntent = mock(PendingIntent.class);
-        ResolveInfo launchInfo = new ResolveInfo();
-        launchInfo.activityInfo = mFullscreenAppTask.topActivityInfo;
-        doReturn(Collections.singletonList(launchInfo))
-                .when(launchIntent).queryIntentComponents(anyInt());
-        mActivityClipData.getItemAt(0).getIntent().putExtra(ClipDescription.EXTRA_PENDING_INTENT,
-                launchIntent);
-
-        doReturn(true).when(mSplitScreenStarter).isSplitScreenVisible();
-        doReturn(mFullscreenAppTask).when(mSplitScreenStarter).getTaskInfo(anyInt());
-        mPolicy.start(mLandscapeDisplayLayout, mActivityClipData, mLoggerSessionId);
-        Intent fillInIntent = mPolicy.getStartIntentFillInIntent(launchIntent, 0);
-        assertTrue((fillInIntent.getFlags() & Intent.FLAG_ACTIVITY_MULTIPLE_TASK) != 0);
-    }
-
     private Target filterTargetByType(ArrayList<Target> targets, int type) {
         for (Target t : targets) {
             if (type == t.type) {
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/fullscreen/FullscreenTaskListenerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/fullscreen/FullscreenTaskListenerTest.java
deleted file mode 100644
index 4523e2c..0000000
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/fullscreen/FullscreenTaskListenerTest.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.fullscreen;
-
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
-
-import static org.junit.Assume.assumeFalse;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.inOrder;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.Mockito.when;
-
-import android.app.ActivityManager.RunningTaskInfo;
-import android.app.WindowConfiguration;
-import android.content.res.Configuration;
-import android.graphics.Point;
-import android.os.SystemProperties;
-import android.view.SurfaceControl;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.wm.shell.common.SyncTransactionQueue;
-import com.android.wm.shell.recents.RecentTasksController;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.InOrder;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-import java.util.Optional;
-
-@SmallTest
-public class FullscreenTaskListenerTest {
-    private static final boolean ENABLE_SHELL_TRANSITIONS =
-            SystemProperties.getBoolean("persist.wm.debug.shell_transit", false);
-
-    @Mock
-    private SyncTransactionQueue mSyncQueue;
-    @Mock
-    private FullscreenUnfoldController mUnfoldController;
-    @Mock
-    private RecentTasksController mRecentTasksController;
-    @Mock
-    private SurfaceControl mSurfaceControl;
-
-    private Optional<FullscreenUnfoldController> mFullscreenUnfoldController;
-
-    private FullscreenTaskListener mListener;
-
-    @Before
-    public void setup() {
-        MockitoAnnotations.initMocks(this);
-        mFullscreenUnfoldController = Optional.of(mUnfoldController);
-        mListener = new FullscreenTaskListener(mSyncQueue, mFullscreenUnfoldController,
-                Optional.empty());
-    }
-
-    @Test
-    public void testAnimatableTaskAppeared_notifiesUnfoldController() {
-        assumeFalse(ENABLE_SHELL_TRANSITIONS);
-        RunningTaskInfo info = createTaskInfo(/* visible */ true, /* taskId */ 0);
-
-        mListener.onTaskAppeared(info, mSurfaceControl);
-
-        verify(mUnfoldController).onTaskAppeared(eq(info), any());
-    }
-
-    @Test
-    public void testMultipleAnimatableTasksAppeared_notifiesUnfoldController() {
-        assumeFalse(ENABLE_SHELL_TRANSITIONS);
-        RunningTaskInfo animatable1 = createTaskInfo(/* visible */ true, /* taskId */ 0);
-        RunningTaskInfo animatable2 = createTaskInfo(/* visible */ true, /* taskId */ 1);
-
-        mListener.onTaskAppeared(animatable1, mSurfaceControl);
-        mListener.onTaskAppeared(animatable2, mSurfaceControl);
-
-        InOrder order = inOrder(mUnfoldController);
-        order.verify(mUnfoldController).onTaskAppeared(eq(animatable1), any());
-        order.verify(mUnfoldController).onTaskAppeared(eq(animatable2), any());
-    }
-
-    @Test
-    public void testNonAnimatableTaskAppeared_doesNotNotifyUnfoldController() {
-        assumeFalse(ENABLE_SHELL_TRANSITIONS);
-        RunningTaskInfo info = createTaskInfo(/* visible */ false, /* taskId */ 0);
-
-        mListener.onTaskAppeared(info, mSurfaceControl);
-
-        verifyNoMoreInteractions(mUnfoldController);
-    }
-
-    @Test
-    public void testNonAnimatableTaskChanged_doesNotNotifyUnfoldController() {
-        assumeFalse(ENABLE_SHELL_TRANSITIONS);
-        RunningTaskInfo info = createTaskInfo(/* visible */ false, /* taskId */ 0);
-        mListener.onTaskAppeared(info, mSurfaceControl);
-
-        mListener.onTaskInfoChanged(info);
-
-        verifyNoMoreInteractions(mUnfoldController);
-    }
-
-    @Test
-    public void testNonAnimatableTaskVanished_doesNotNotifyUnfoldController() {
-        assumeFalse(ENABLE_SHELL_TRANSITIONS);
-        RunningTaskInfo info = createTaskInfo(/* visible */ false, /* taskId */ 0);
-        mListener.onTaskAppeared(info, mSurfaceControl);
-
-        mListener.onTaskVanished(info);
-
-        verifyNoMoreInteractions(mUnfoldController);
-    }
-
-    @Test
-    public void testAnimatableTaskBecameInactive_notifiesUnfoldController() {
-        assumeFalse(ENABLE_SHELL_TRANSITIONS);
-        RunningTaskInfo animatableTask = createTaskInfo(/* visible */ true, /* taskId */ 0);
-        mListener.onTaskAppeared(animatableTask, mSurfaceControl);
-        RunningTaskInfo notAnimatableTask = createTaskInfo(/* visible */ false, /* taskId */ 0);
-
-        mListener.onTaskInfoChanged(notAnimatableTask);
-
-        verify(mUnfoldController).onTaskVanished(eq(notAnimatableTask));
-    }
-
-    @Test
-    public void testAnimatableTaskVanished_notifiesUnfoldController() {
-        assumeFalse(ENABLE_SHELL_TRANSITIONS);
-        RunningTaskInfo taskInfo = createTaskInfo(/* visible */ true, /* taskId */ 0);
-        mListener.onTaskAppeared(taskInfo, mSurfaceControl);
-
-        mListener.onTaskVanished(taskInfo);
-
-        verify(mUnfoldController).onTaskVanished(eq(taskInfo));
-    }
-
-    private RunningTaskInfo createTaskInfo(boolean visible, int taskId) {
-        final RunningTaskInfo info = spy(new RunningTaskInfo());
-        info.isVisible = visible;
-        info.positionInParent = new Point();
-        when(info.getWindowingMode()).thenReturn(WindowConfiguration.WINDOWING_MODE_FULLSCREEN);
-        final Configuration configuration = new Configuration();
-        configuration.windowConfiguration.setActivityType(ACTIVITY_TYPE_STANDARD);
-        when(info.getConfiguration()).thenReturn(configuration);
-        info.taskId = taskId;
-        return info;
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutControllerTest.java
index b976c12..dcc504a 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutControllerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutControllerTest.java
@@ -16,10 +16,11 @@
 
 package com.android.wm.shell.hidedisplaycutout;
 
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
-import android.platform.test.annotations.Presubmit;
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableContext;
 import android.testing.TestableLooper;
@@ -27,7 +28,8 @@
 import androidx.test.filters.SmallTest;
 import androidx.test.platform.app.InstrumentationRegistry;
 
-import com.android.wm.shell.common.ShellExecutor;
+import com.android.wm.shell.ShellTestCase;
+import com.android.wm.shell.sysui.ShellController;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -35,25 +37,30 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
-@Presubmit
 @SmallTest
 @RunWith(AndroidTestingRunner.class)
 @TestableLooper.RunWithLooper
-public class HideDisplayCutoutControllerTest {
+public class HideDisplayCutoutControllerTest extends ShellTestCase {
     private TestableContext mContext = new TestableContext(
             InstrumentationRegistry.getInstrumentation().getTargetContext(), null);
 
-    private HideDisplayCutoutController mHideDisplayCutoutController;
+    @Mock
+    private ShellController mShellController;
     @Mock
     private HideDisplayCutoutOrganizer mMockDisplayAreaOrganizer;
-    @Mock
-    private ShellExecutor mMockMainExecutor;
+
+    private HideDisplayCutoutController mHideDisplayCutoutController;
 
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
         mHideDisplayCutoutController = new HideDisplayCutoutController(
-                mContext, mMockDisplayAreaOrganizer, mMockMainExecutor);
+                mContext, mShellController, mMockDisplayAreaOrganizer);
+    }
+
+    @Test
+    public void instantiateController_registerConfigChangeListener() {
+        verify(mShellController, times(1)).addConfigurationChangeListener(any());
     }
 
     @Test
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutOrganizerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutOrganizerTest.java
index 16e9239..49521cf 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutOrganizerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/hidedisplaycutout/HideDisplayCutoutOrganizerTest.java
@@ -32,7 +32,6 @@
 import android.graphics.Insets;
 import android.graphics.Rect;
 import android.os.Binder;
-import android.platform.test.annotations.Presubmit;
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableContext;
 import android.testing.TestableLooper;
@@ -48,6 +47,7 @@
 import androidx.test.filters.SmallTest;
 import androidx.test.platform.app.InstrumentationRegistry;
 
+import com.android.wm.shell.ShellTestCase;
 import com.android.wm.shell.common.DisplayController;
 import com.android.wm.shell.common.DisplayLayout;
 import com.android.wm.shell.common.ShellExecutor;
@@ -61,11 +61,10 @@
 
 import java.util.ArrayList;
 
-@Presubmit
 @SmallTest
 @RunWith(AndroidTestingRunner.class)
 @TestableLooper.RunWithLooper
-public class HideDisplayCutoutOrganizerTest {
+public class HideDisplayCutoutOrganizerTest extends ShellTestCase {
     private TestableContext mContext = new TestableContext(
             InstrumentationRegistry.getInstrumentation().getTargetContext(), null);
 
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/kidsmode/KidsModeTaskOrganizerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/kidsmode/KidsModeTaskOrganizerTest.java
index 440a6f8..a919ad0 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/kidsmode/KidsModeTaskOrganizerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/kidsmode/KidsModeTaskOrganizerTest.java
@@ -44,11 +44,12 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
 
+import com.android.wm.shell.ShellTestCase;
 import com.android.wm.shell.common.DisplayController;
 import com.android.wm.shell.common.DisplayInsetsController;
 import com.android.wm.shell.common.ShellExecutor;
 import com.android.wm.shell.common.SyncTransactionQueue;
-import com.android.wm.shell.startingsurface.StartingWindowController;
+import com.android.wm.shell.sysui.ShellInit;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -61,7 +62,7 @@
 
 @SmallTest
 @RunWith(AndroidJUnit4.class)
-public class KidsModeTaskOrganizerTest {
+public class KidsModeTaskOrganizerTest extends ShellTestCase {
     @Mock private ITaskOrganizerController mTaskOrganizerController;
     @Mock private Context mContext;
     @Mock private Handler mHandler;
@@ -72,7 +73,7 @@
     @Mock private WindowContainerToken mToken;
     @Mock private WindowContainerTransaction mTransaction;
     @Mock private KidsModeSettingsObserver mObserver;
-    @Mock private StartingWindowController mStartingWindowController;
+    @Mock private ShellInit mShellInit;
     @Mock private DisplayInsetsController mDisplayInsetsController;
 
     KidsModeTaskOrganizer mOrganizer;
@@ -86,10 +87,9 @@
         } catch (RemoteException e) {
         }
         // NOTE: KidsModeTaskOrganizer should have a null CompatUIController.
-        mOrganizer = spy(new KidsModeTaskOrganizer(mTaskOrganizerController, mTestExecutor,
-                mHandler, mContext, mSyncTransactionQueue, mDisplayController,
-                mDisplayInsetsController, Optional.empty(), mObserver));
-        mOrganizer.initialize(mStartingWindowController);
+        mOrganizer = spy(new KidsModeTaskOrganizer(mContext, mTaskOrganizerController,
+                mSyncTransactionQueue, mDisplayController, mDisplayInsetsController,
+                Optional.empty(), Optional.empty(), mObserver, mTestExecutor, mHandler));
         doReturn(mTransaction).when(mOrganizer).getWindowContainerTransaction();
         doReturn(new InsetsState()).when(mDisplayController).getInsetsState(DEFAULT_DISPLAY);
     }
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedControllerTest.java
index ecf1c5d..dbf93ae 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedControllerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedControllerTest.java
@@ -30,10 +30,10 @@
 import static org.mockito.Mockito.atLeastOnce;
 import static org.mockito.Mockito.never;
 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.content.om.IOverlayManager;
 import android.graphics.Rect;
 import android.os.Handler;
 import android.os.UserHandle;
@@ -41,16 +41,15 @@
 import android.util.ArrayMap;
 import android.view.Display;
 import android.view.Surface;
-import android.view.SurfaceControl;
 import android.window.WindowContainerTransaction;
 
 import androidx.test.filters.SmallTest;
 
-import com.android.internal.jank.InteractionJankMonitor;
 import com.android.wm.shell.common.DisplayController;
 import com.android.wm.shell.common.DisplayLayout;
 import com.android.wm.shell.common.ShellExecutor;
 import com.android.wm.shell.common.TaskStackListenerImpl;
+import com.android.wm.shell.sysui.ShellController;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -71,6 +70,8 @@
     OneHandedState mSpiedTransitionState;
 
     @Mock
+    ShellController mMockShellController;
+    @Mock
     DisplayLayout mDisplayLayout;
     @Mock
     DisplayController mMockDisplayController;
@@ -87,16 +88,10 @@
     @Mock
     OneHandedUiEventLogger mMockUiEventLogger;
     @Mock
-    InteractionJankMonitor mMockJankMonitor;
-    @Mock
-    IOverlayManager mMockOverlayManager;
-    @Mock
     TaskStackListenerImpl mMockTaskStackListener;
     @Mock
     ShellExecutor mMockShellMainExecutor;
     @Mock
-    SurfaceControl mMockLeash;
-    @Mock
     Handler mMockShellMainHandler;
 
     final boolean mDefaultEnabled = true;
@@ -132,6 +127,7 @@
         mOneHandedAccessibilityUtil = new OneHandedAccessibilityUtil(mContext);
         mSpiedOneHandedController = spy(new OneHandedController(
                 mContext,
+                mMockShellController,
                 mMockDisplayController,
                 mMockDisplayAreaOrganizer,
                 mMockTouchHandler,
@@ -140,9 +136,7 @@
                 mOneHandedAccessibilityUtil,
                 mSpiedTimeoutHandler,
                 mSpiedTransitionState,
-                mMockJankMonitor,
                 mMockUiEventLogger,
-                mMockOverlayManager,
                 mMockTaskStackListener,
                 mMockShellMainExecutor,
                 mMockShellMainHandler)
@@ -150,6 +144,16 @@
     }
 
     @Test
+    public void testControllerRegistersConfigChangeListener() {
+        verify(mMockShellController, times(1)).addConfigurationChangeListener(any());
+    }
+
+    @Test
+    public void testControllerRegistersKeyguardChangeListener() {
+        verify(mMockShellController, times(1)).addKeyguardChangeListener(any());
+    }
+
+    @Test
     public void testDefaultShouldNotInOneHanded() {
         // Assert default transition state is STATE_NONE
         assertThat(mSpiedTransitionState.getState()).isEqualTo(STATE_NONE);
@@ -345,8 +349,8 @@
         when(mMockSettingsUitl.getSettingsSwipeToNotificationEnabled(any(), anyInt())).thenReturn(
                 false);
         final WindowContainerTransaction handlerWCT = new WindowContainerTransaction();
-        mSpiedOneHandedController.onRotateDisplay(mDisplay.getDisplayId(), Surface.ROTATION_0,
-                Surface.ROTATION_90, handlerWCT);
+        mSpiedOneHandedController.onDisplayChange(mDisplay.getDisplayId(), Surface.ROTATION_0,
+                Surface.ROTATION_90, null /* newDisplayAreaInfo */, handlerWCT);
 
         verify(mMockDisplayAreaOrganizer, atLeastOnce()).onRotateDisplay(eq(mContext),
                 eq(Surface.ROTATION_90), any(WindowContainerTransaction.class));
@@ -358,8 +362,8 @@
         when(mMockSettingsUitl.getSettingsSwipeToNotificationEnabled(any(), anyInt())).thenReturn(
                 false);
         final WindowContainerTransaction handlerWCT = new WindowContainerTransaction();
-        mSpiedOneHandedController.onRotateDisplay(mDisplay.getDisplayId(), Surface.ROTATION_0,
-                Surface.ROTATION_90, handlerWCT);
+        mSpiedOneHandedController.onDisplayChange(mDisplay.getDisplayId(), Surface.ROTATION_0,
+                Surface.ROTATION_90, null /* newDisplayAreaInfo */, handlerWCT);
 
         verify(mMockDisplayAreaOrganizer, never()).onRotateDisplay(eq(mContext),
                 eq(Surface.ROTATION_90), any(WindowContainerTransaction.class));
@@ -371,8 +375,8 @@
         when(mMockSettingsUitl.getSettingsSwipeToNotificationEnabled(any(), anyInt())).thenReturn(
                 true);
         final WindowContainerTransaction handlerWCT = new WindowContainerTransaction();
-        mSpiedOneHandedController.onRotateDisplay(mDisplay.getDisplayId(), Surface.ROTATION_0,
-                Surface.ROTATION_90, handlerWCT);
+        mSpiedOneHandedController.onDisplayChange(mDisplay.getDisplayId(), Surface.ROTATION_0,
+                Surface.ROTATION_90, null /* newDisplayAreaInfo */, handlerWCT);
 
         verify(mMockDisplayAreaOrganizer, never()).onRotateDisplay(eq(mContext),
                 eq(Surface.ROTATION_90), any(WindowContainerTransaction.class));
@@ -384,8 +388,8 @@
         when(mMockSettingsUitl.getSettingsSwipeToNotificationEnabled(any(), anyInt())).thenReturn(
                 false);
         final WindowContainerTransaction handlerWCT = new WindowContainerTransaction();
-        mSpiedOneHandedController.onRotateDisplay(mDisplay.getDisplayId(), Surface.ROTATION_0,
-                Surface.ROTATION_90, handlerWCT);
+        mSpiedOneHandedController.onDisplayChange(mDisplay.getDisplayId(), Surface.ROTATION_0,
+                Surface.ROTATION_90, null /* newDisplayAreaInfo */, handlerWCT);
 
         verify(mMockDisplayAreaOrganizer, atLeastOnce()).onRotateDisplay(eq(mContext),
                 eq(Surface.ROTATION_90), any(WindowContainerTransaction.class));
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedStateTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedStateTest.java
index dba1b8b..e6a8220 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedStateTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedStateTest.java
@@ -29,22 +29,19 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import android.content.om.IOverlayManager;
 import android.graphics.Rect;
 import android.os.Handler;
-import android.os.UserHandle;
 import android.testing.AndroidTestingRunner;
 import android.util.ArrayMap;
 import android.view.Display;
-import android.view.SurfaceControl;
 
 import androidx.test.filters.SmallTest;
 
-import com.android.internal.jank.InteractionJankMonitor;
 import com.android.wm.shell.common.DisplayController;
 import com.android.wm.shell.common.DisplayLayout;
 import com.android.wm.shell.common.ShellExecutor;
 import com.android.wm.shell.common.TaskStackListenerImpl;
+import com.android.wm.shell.sysui.ShellController;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -55,7 +52,6 @@
 @SmallTest
 @RunWith(AndroidTestingRunner.class)
 public class OneHandedStateTest extends OneHandedTestCase {
-    private int mCurrentUser = UserHandle.myUserId();
 
     Display mDisplay;
     DisplayLayout mDisplayLayout;
@@ -65,6 +61,8 @@
     OneHandedState mSpiedState;
 
     @Mock
+    ShellController mMockShellController;
+    @Mock
     DisplayController mMockDisplayController;
     @Mock
     OneHandedDisplayAreaOrganizer mMockDisplayAreaOrganizer;
@@ -77,16 +75,10 @@
     @Mock
     OneHandedUiEventLogger mMockUiEventLogger;
     @Mock
-    InteractionJankMonitor mMockJankMonitor;
-    @Mock
-    IOverlayManager mMockOverlayManager;
-    @Mock
     TaskStackListenerImpl mMockTaskStackListener;
     @Mock
     ShellExecutor mMockShellMainExecutor;
     @Mock
-    SurfaceControl mMockLeash;
-    @Mock
     Handler mMockShellMainHandler;
 
     final boolean mDefaultEnabled = true;
@@ -119,6 +111,7 @@
         mOneHandedAccessibilityUtil = new OneHandedAccessibilityUtil(mContext);
         mSpiedOneHandedController = spy(new OneHandedController(
                 mContext,
+                mMockShellController,
                 mMockDisplayController,
                 mMockDisplayAreaOrganizer,
                 mMockTouchHandler,
@@ -127,9 +120,7 @@
                 mOneHandedAccessibilityUtil,
                 mSpiedTimeoutHandler,
                 mSpiedState,
-                mMockJankMonitor,
                 mMockUiEventLogger,
-                mMockOverlayManager,
                 mMockTaskStackListener,
                 mMockShellMainExecutor,
                 mMockShellMainHandler)
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedTestCase.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedTestCase.java
index 8b03dc5..808ab21 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedTestCase.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedTestCase.java
@@ -30,6 +30,8 @@
 
 import androidx.test.platform.app.InstrumentationRegistry;
 
+import com.android.wm.shell.ShellTestCase;
+
 import org.junit.Before;
 import org.junit.Rule;
 import org.mockito.Answers;
@@ -38,7 +40,7 @@
 /**
  * Base class that does One Handed specific setup.
  */
-public abstract class OneHandedTestCase {
+public abstract class OneHandedTestCase extends ShellTestCase {
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     protected Context mContext;
 
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipAnimationControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipAnimationControllerTest.java
index c685fdc..5880ffb 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipAnimationControllerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipAnimationControllerTest.java
@@ -21,6 +21,7 @@
 import static android.view.Surface.ROTATION_270;
 import static android.view.Surface.ROTATION_90;
 
+import static com.android.wm.shell.MockSurfaceControlHelper.createMockSurfaceControlTransaction;
 import static com.android.wm.shell.pip.PipAnimationController.TRANSITION_DIRECTION_LEAVE_PIP;
 import static com.android.wm.shell.pip.PipAnimationController.TRANSITION_DIRECTION_TO_PIP;
 
@@ -36,7 +37,9 @@
 import android.view.SurfaceControl;
 
 import androidx.test.filters.SmallTest;
+import androidx.test.platform.app.InstrumentationRegistry;
 
+import com.android.wm.shell.MockSurfaceControlHelper;
 import com.android.wm.shell.ShellTestCase;
 
 import org.junit.Before;
@@ -60,19 +63,18 @@
 
     @Mock
     private TaskInfo mTaskInfo;
-
     @Mock
     private PipAnimationController.PipAnimationCallback mPipAnimationCallback;
 
     @Before
     public void setUp() throws Exception {
-        mPipAnimationController = new PipAnimationController(
-                new PipSurfaceTransactionHelper());
+        MockitoAnnotations.initMocks(this);
+        mPipAnimationController = new PipAnimationController(new PipSurfaceTransactionHelper(
+                InstrumentationRegistry.getInstrumentation().getTargetContext()));
         mLeash = new SurfaceControl.Builder()
                 .setContainerLayer()
                 .setName("FakeLeash")
                 .build();
-        MockitoAnnotations.initMocks(this);
     }
 
     @Test
@@ -103,7 +105,8 @@
         final PipAnimationController.PipTransitionAnimator oldAnimator = mPipAnimationController
                 .getAnimator(mTaskInfo, mLeash, baseValue, startValue, endValue1, null,
                         TRANSITION_DIRECTION_TO_PIP, 0, ROTATION_0);
-        oldAnimator.setSurfaceControlTransactionFactory(PipDummySurfaceControlTx::new);
+        oldAnimator.setSurfaceControlTransactionFactory(
+                MockSurfaceControlHelper::createMockSurfaceControlTransaction);
         oldAnimator.start();
 
         final PipAnimationController.PipTransitionAnimator newAnimator = mPipAnimationController
@@ -133,7 +136,7 @@
 
     @Test
     public void pipTransitionAnimator_rotatedEndValue() {
-        final PipDummySurfaceControlTx tx = new PipDummySurfaceControlTx();
+        final SurfaceControl.Transaction tx = createMockSurfaceControlTransaction();
         final Rect startBounds = new Rect(200, 700, 400, 800);
         final Rect endBounds = new Rect(0, 0, 500, 1000);
         // Fullscreen to PiP.
@@ -183,7 +186,8 @@
         final PipAnimationController.PipTransitionAnimator animator = mPipAnimationController
                 .getAnimator(mTaskInfo, mLeash, baseValue, startValue, endValue, null,
                         TRANSITION_DIRECTION_TO_PIP, 0, ROTATION_0);
-        animator.setSurfaceControlTransactionFactory(PipDummySurfaceControlTx::new);
+        animator.setSurfaceControlTransactionFactory(
+                MockSurfaceControlHelper::createMockSurfaceControlTransaction);
 
         animator.setPipAnimationCallback(mPipAnimationCallback);
 
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipDummySurfaceControlTx.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipDummySurfaceControlTx.java
deleted file mode 100644
index ccf8f6e..0000000
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipDummySurfaceControlTx.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.wm.shell.pip;
-
-import android.graphics.Matrix;
-import android.view.SurfaceControl;
-
-/**
- * A dummy {@link SurfaceControl.Transaction} class for testing purpose and supports
- * method chaining.
- */
-public class PipDummySurfaceControlTx extends SurfaceControl.Transaction {
-    @Override
-    public SurfaceControl.Transaction setAlpha(SurfaceControl leash, float alpha) {
-        return this;
-    }
-
-    @Override
-    public SurfaceControl.Transaction setPosition(SurfaceControl leash, float x, float y) {
-        return this;
-    }
-
-    @Override
-    public SurfaceControl.Transaction setWindowCrop(SurfaceControl leash, int w, int h) {
-        return this;
-    }
-
-    @Override
-    public SurfaceControl.Transaction setCornerRadius(SurfaceControl leash, float radius) {
-        return this;
-    }
-
-    @Override
-    public SurfaceControl.Transaction setShadowRadius(SurfaceControl leash, float radius) {
-        return this;
-    }
-
-    @Override
-    public SurfaceControl.Transaction setMatrix(SurfaceControl leash, Matrix matrix,
-            float[] float9) {
-        return this;
-    }
-
-    @Override
-    public SurfaceControl.Transaction setFrameTimelineVsync(long frameTimelineVsyncId) {
-        return this;
-    }
-
-    @Override
-    public void apply() {}
-}
-
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipTaskOrganizerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipTaskOrganizerTest.java
index e8e6254..579638d 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipTaskOrganizerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipTaskOrganizerTest.java
@@ -21,13 +21,13 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyFloat;
 import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyLong;
 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.spy;
 import static org.mockito.Mockito.verify;
 
 import android.app.ActivityManager;
@@ -42,8 +42,10 @@
 import android.util.Rational;
 import android.util.Size;
 import android.view.DisplayInfo;
+import android.view.SurfaceControl;
 import android.window.WindowContainerToken;
 
+import com.android.wm.shell.MockSurfaceControlHelper;
 import com.android.wm.shell.ShellTaskOrganizer;
 import com.android.wm.shell.ShellTestCase;
 import com.android.wm.shell.TestShellExecutor;
@@ -68,7 +70,7 @@
 @RunWith(AndroidTestingRunner.class)
 @TestableLooper.RunWithLooper
 public class PipTaskOrganizerTest extends ShellTestCase {
-    private PipTaskOrganizer mSpiedPipTaskOrganizer;
+    private PipTaskOrganizer mPipTaskOrganizer;
 
     @Mock private DisplayController mMockDisplayController;
     @Mock private SyncTransactionQueue mMockSyncTransactionQueue;
@@ -98,14 +100,15 @@
         mPipBoundsAlgorithm = new PipBoundsAlgorithm(mContext, mPipBoundsState,
                 new PipSnapAlgorithm());
         mMainExecutor = new TestShellExecutor();
-        mSpiedPipTaskOrganizer = spy(new PipTaskOrganizer(mContext,
+        mPipTaskOrganizer = new PipTaskOrganizer(mContext,
                 mMockSyncTransactionQueue, mPipTransitionState, mPipBoundsState,
                 mPipBoundsAlgorithm, mMockPhonePipMenuController, mMockPipAnimationController,
                 mMockPipSurfaceTransactionHelper, mMockPipTransitionController,
                 mMockPipParamsChangedForwarder, mMockOptionalSplitScreen, mMockDisplayController,
-                mMockPipUiEventLogger, mMockShellTaskOrganizer, mMainExecutor));
+                mMockPipUiEventLogger, mMockShellTaskOrganizer, mMainExecutor);
         mMainExecutor.flushAll();
         preparePipTaskOrg();
+        preparePipSurfaceTransactionHelper();
     }
 
     @Test
@@ -122,14 +125,14 @@
     public void startSwipePipToHome_updatesAspectRatio() {
         final Rational aspectRatio = new Rational(2, 1);
 
-        mSpiedPipTaskOrganizer.startSwipePipToHome(mComponent1, null, createPipParams(aspectRatio));
+        mPipTaskOrganizer.startSwipePipToHome(mComponent1, null, createPipParams(aspectRatio));
 
         assertEquals(aspectRatio.floatValue(), mPipBoundsState.getAspectRatio(), 0.01f);
     }
 
     @Test
     public void startSwipePipToHome_updatesLastPipComponentName() {
-        mSpiedPipTaskOrganizer.startSwipePipToHome(mComponent1, null, createPipParams(null));
+        mPipTaskOrganizer.startSwipePipToHome(mComponent1, null, createPipParams(null));
 
         assertEquals(mComponent1, mPipBoundsState.getLastPipComponentName());
     }
@@ -138,7 +141,7 @@
     public void startSwipePipToHome_updatesOverrideMinSize() {
         final Size minSize = new Size(400, 320);
 
-        mSpiedPipTaskOrganizer.startSwipePipToHome(mComponent1, createActivityInfo(minSize),
+        mPipTaskOrganizer.startSwipePipToHome(mComponent1, createActivityInfo(minSize),
                 createPipParams(null));
 
         assertEquals(minSize, mPipBoundsState.getOverrideMinSize());
@@ -148,16 +151,16 @@
     public void onTaskAppeared_updatesAspectRatio() {
         final Rational aspectRatio = new Rational(2, 1);
 
-        mSpiedPipTaskOrganizer.onTaskAppeared(createTaskInfo(mComponent1,
-                createPipParams(aspectRatio)), null /* leash */);
+        mPipTaskOrganizer.onTaskAppeared(createTaskInfo(mComponent1,
+                createPipParams(aspectRatio)), mock(SurfaceControl.class));
 
         assertEquals(aspectRatio.floatValue(), mPipBoundsState.getAspectRatio(), 0.01f);
     }
 
     @Test
     public void onTaskAppeared_updatesLastPipComponentName() {
-        mSpiedPipTaskOrganizer.onTaskAppeared(createTaskInfo(mComponent1, createPipParams(null)),
-                null /* leash */);
+        mPipTaskOrganizer.onTaskAppeared(createTaskInfo(mComponent1, createPipParams(null)),
+                mock(SurfaceControl.class));
 
         assertEquals(mComponent1, mPipBoundsState.getLastPipComponentName());
     }
@@ -166,9 +169,9 @@
     public void onTaskAppeared_updatesOverrideMinSize() {
         final Size minSize = new Size(400, 320);
 
-        mSpiedPipTaskOrganizer.onTaskAppeared(
+        mPipTaskOrganizer.onTaskAppeared(
                 createTaskInfo(mComponent1, createPipParams(null), minSize),
-                null /* leash */);
+                mock(SurfaceControl.class));
 
         assertEquals(minSize, mPipBoundsState.getOverrideMinSize());
     }
@@ -177,16 +180,16 @@
     public void onTaskInfoChanged_notInPip_deferUpdatesAspectRatio() {
         final Rational startAspectRatio = new Rational(2, 1);
         final Rational newAspectRatio = new Rational(1, 2);
-        mSpiedPipTaskOrganizer.onTaskAppeared(createTaskInfo(mComponent1,
-                createPipParams(startAspectRatio)), null /* leash */);
+        mPipTaskOrganizer.onTaskAppeared(createTaskInfo(mComponent1,
+                createPipParams(startAspectRatio)), mock(SurfaceControl.class));
 
         // It is in entering transition, should defer onTaskInfoChanged callback in this case.
-        mSpiedPipTaskOrganizer.onTaskInfoChanged(createTaskInfo(mComponent1,
+        mPipTaskOrganizer.onTaskInfoChanged(createTaskInfo(mComponent1,
                 createPipParams(newAspectRatio)));
         verify(mMockPipParamsChangedForwarder, never()).notifyAspectRatioChanged(anyFloat());
 
         // Once the entering transition finishes, the new aspect ratio applies in a deferred manner
-        mSpiedPipTaskOrganizer.sendOnPipTransitionFinished(TRANSITION_DIRECTION_TO_PIP);
+        sendOnPipTransitionFinished(TRANSITION_DIRECTION_TO_PIP);
         verify(mMockPipParamsChangedForwarder)
                 .notifyAspectRatioChanged(newAspectRatio.floatValue());
     }
@@ -195,11 +198,11 @@
     public void onTaskInfoChanged_inPip_updatesAspectRatioIfChanged() {
         final Rational startAspectRatio = new Rational(2, 1);
         final Rational newAspectRatio = new Rational(1, 2);
-        mSpiedPipTaskOrganizer.onTaskAppeared(createTaskInfo(mComponent1,
-                createPipParams(startAspectRatio)), null /* leash */);
-        mSpiedPipTaskOrganizer.sendOnPipTransitionFinished(TRANSITION_DIRECTION_TO_PIP);
+        mPipTaskOrganizer.onTaskAppeared(createTaskInfo(mComponent1,
+                createPipParams(startAspectRatio)), mock(SurfaceControl.class));
+        sendOnPipTransitionFinished(TRANSITION_DIRECTION_TO_PIP);
 
-        mSpiedPipTaskOrganizer.onTaskInfoChanged(createTaskInfo(mComponent1,
+        mPipTaskOrganizer.onTaskInfoChanged(createTaskInfo(mComponent1,
                 createPipParams(newAspectRatio)));
 
         verify(mMockPipParamsChangedForwarder)
@@ -208,11 +211,11 @@
 
     @Test
     public void onTaskInfoChanged_inPip_updatesLastPipComponentName() {
-        mSpiedPipTaskOrganizer.onTaskAppeared(createTaskInfo(mComponent1,
-                createPipParams(null)), null /* leash */);
-        mSpiedPipTaskOrganizer.sendOnPipTransitionFinished(TRANSITION_DIRECTION_TO_PIP);
+        mPipTaskOrganizer.onTaskAppeared(createTaskInfo(mComponent1,
+                createPipParams(null)), mock(SurfaceControl.class));
+        sendOnPipTransitionFinished(TRANSITION_DIRECTION_TO_PIP);
 
-        mSpiedPipTaskOrganizer.onTaskInfoChanged(createTaskInfo(mComponent2,
+        mPipTaskOrganizer.onTaskInfoChanged(createTaskInfo(mComponent2,
                 createPipParams(null)));
 
         assertEquals(mComponent2, mPipBoundsState.getLastPipComponentName());
@@ -220,12 +223,12 @@
 
     @Test
     public void onTaskInfoChanged_inPip_updatesOverrideMinSize() {
-        mSpiedPipTaskOrganizer.onTaskAppeared(createTaskInfo(mComponent1,
-                createPipParams(null)), null /* leash */);
-        mSpiedPipTaskOrganizer.sendOnPipTransitionFinished(TRANSITION_DIRECTION_TO_PIP);
+        mPipTaskOrganizer.onTaskAppeared(createTaskInfo(mComponent1,
+                createPipParams(null)), mock(SurfaceControl.class));
+        sendOnPipTransitionFinished(TRANSITION_DIRECTION_TO_PIP);
 
         final Size minSize = new Size(400, 320);
-        mSpiedPipTaskOrganizer.onTaskInfoChanged(createTaskInfo(mComponent2,
+        mPipTaskOrganizer.onTaskInfoChanged(createTaskInfo(mComponent2,
                 createPipParams(null), minSize));
 
         assertEquals(minSize, mPipBoundsState.getOverrideMinSize());
@@ -233,22 +236,42 @@
 
     @Test
     public void onTaskVanished_clearsPipBounds() {
-        mSpiedPipTaskOrganizer.onTaskAppeared(createTaskInfo(mComponent1,
-                createPipParams(null)), null /* leash */);
+        mPipTaskOrganizer.onTaskAppeared(createTaskInfo(mComponent1,
+                createPipParams(null)), mock(SurfaceControl.class));
         mPipBoundsState.setBounds(new Rect(100, 100, 200, 150));
 
-        mSpiedPipTaskOrganizer.onTaskVanished(createTaskInfo(mComponent1, createPipParams(null)));
+        mPipTaskOrganizer.onTaskVanished(createTaskInfo(mComponent1, createPipParams(null)));
         assertTrue(mPipBoundsState.getBounds().isEmpty());
     }
 
+    private void sendOnPipTransitionFinished(
+            @PipAnimationController.TransitionDirection int direction) {
+        mPipTaskOrganizer.sendOnPipTransitionFinished(direction);
+        // PipTransitionController will call back into PipTaskOrganizer.
+        mPipTaskOrganizer.mPipTransitionCallback.onPipTransitionFinished(direction);
+    }
+
     private void preparePipTaskOrg() {
         final DisplayInfo info = new DisplayInfo();
         mPipBoundsState.setDisplayLayout(new DisplayLayout(info,
                 mContext.getResources(), true, true));
-        mSpiedPipTaskOrganizer.setOneShotAnimationType(PipAnimationController.ANIM_TYPE_ALPHA);
-        mSpiedPipTaskOrganizer.setSurfaceControlTransactionFactory(PipDummySurfaceControlTx::new);
-        doNothing().when(mSpiedPipTaskOrganizer).enterPipWithAlphaAnimation(any(), anyLong());
-        doNothing().when(mSpiedPipTaskOrganizer).scheduleAnimateResizePip(any(), anyInt(), any());
+        mPipTaskOrganizer.setOneShotAnimationType(PipAnimationController.ANIM_TYPE_ALPHA);
+        mPipTaskOrganizer.setSurfaceControlTransactionFactory(
+                MockSurfaceControlHelper::createMockSurfaceControlTransaction);
+    }
+
+    private void preparePipSurfaceTransactionHelper() {
+        doReturn(mMockPipSurfaceTransactionHelper).when(mMockPipSurfaceTransactionHelper)
+                .crop(any(), any(), any());
+        doReturn(mMockPipSurfaceTransactionHelper).when(mMockPipSurfaceTransactionHelper)
+                .resetScale(any(), any(), any());
+        doReturn(mMockPipSurfaceTransactionHelper).when(mMockPipSurfaceTransactionHelper)
+                .round(any(), any(), anyBoolean());
+        doReturn(mMockPipSurfaceTransactionHelper).when(mMockPipSurfaceTransactionHelper)
+                .scale(any(), any(), any(), any(), anyFloat());
+        doReturn(mMockPipSurfaceTransactionHelper).when(mMockPipSurfaceTransactionHelper)
+                .alpha(any(), any(), anyFloat());
+        doNothing().when(mMockPipSurfaceTransactionHelper).onDensityOrFontScaleChanged(any());
     }
 
     private static ActivityManager.RunningTaskInfo createTaskInfo(
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipControllerTest.java
index df18133..f192514 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipControllerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipControllerTest.java
@@ -24,6 +24,7 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -53,6 +54,8 @@
 import com.android.wm.shell.pip.PipSnapAlgorithm;
 import com.android.wm.shell.pip.PipTaskOrganizer;
 import com.android.wm.shell.pip.PipTransitionController;
+import com.android.wm.shell.pip.PipTransitionState;
+import com.android.wm.shell.sysui.ShellController;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -72,13 +75,16 @@
 public class PipControllerTest extends ShellTestCase {
     private PipController mPipController;
 
+    @Mock private ShellController mMockShellController;
     @Mock private DisplayController mMockDisplayController;
     @Mock private PhonePipMenuController mMockPhonePipMenuController;
     @Mock private PipAppOpsListener mMockPipAppOpsListener;
     @Mock private PipBoundsAlgorithm mMockPipBoundsAlgorithm;
+    @Mock private PipKeepClearAlgorithm mMockPipKeepClearAlgorithm;
     @Mock private PipSnapAlgorithm mMockPipSnapAlgorithm;
     @Mock private PipMediaController mMockPipMediaController;
     @Mock private PipTaskOrganizer mMockPipTaskOrganizer;
+    @Mock private PipTransitionState mMockPipTransitionState;
     @Mock private PipTransitionController mMockPipTransitionController;
     @Mock private PipTouchHandler mMockPipTouchHandler;
     @Mock private PipMotionHelper mMockPipMotionHelper;
@@ -99,11 +105,12 @@
             ((Runnable) invocation.getArgument(0)).run();
             return null;
         }).when(mMockExecutor).execute(any());
-        mPipController = new PipController(mContext, mMockDisplayController,
+        mPipController = new PipController(mContext, mMockShellController, mMockDisplayController,
                 mMockPipAppOpsListener, mMockPipBoundsAlgorithm,
-                mMockPipBoundsState, mMockPipMediaController,
-                mMockPhonePipMenuController, mMockPipTaskOrganizer, mMockPipTouchHandler,
-                mMockPipTransitionController, mMockWindowManagerShellWrapper,
+                mMockPipKeepClearAlgorithm,
+                mMockPipBoundsState, mMockPipMotionHelper, mMockPipMediaController,
+                mMockPhonePipMenuController, mMockPipTaskOrganizer, mMockPipTransitionState,
+                mMockPipTouchHandler, mMockPipTransitionController, mMockWindowManagerShellWrapper,
                 mMockTaskStackListener, mPipParamsChangedForwarder,
                 mMockOneHandedController, mMockExecutor);
         when(mMockPipBoundsAlgorithm.getSnapAlgorithm()).thenReturn(mMockPipSnapAlgorithm);
@@ -111,6 +118,16 @@
     }
 
     @Test
+    public void instantiatePipController_registerConfigChangeListener() {
+        verify(mMockShellController, times(1)).addConfigurationChangeListener(any());
+    }
+
+    @Test
+    public void instantiatePipController_registerKeyguardChangeListener() {
+        verify(mMockShellController, times(1)).addKeyguardChangeListener(any());
+    }
+
+    @Test
     public void instantiatePipController_registersPipTransitionCallback() {
         verify(mMockPipTransitionController).registerPipTransitionCallback(any());
     }
@@ -132,11 +149,12 @@
         when(mockPackageManager.hasSystemFeature(FEATURE_PICTURE_IN_PICTURE)).thenReturn(false);
         when(spyContext.getPackageManager()).thenReturn(mockPackageManager);
 
-        assertNull(PipController.create(spyContext, mMockDisplayController,
+        assertNull(PipController.create(spyContext, mMockShellController, mMockDisplayController,
                 mMockPipAppOpsListener, mMockPipBoundsAlgorithm,
-                mMockPipBoundsState, mMockPipMediaController,
-                mMockPhonePipMenuController, mMockPipTaskOrganizer, mMockPipTouchHandler,
-                mMockPipTransitionController, mMockWindowManagerShellWrapper,
+                mMockPipKeepClearAlgorithm,
+                mMockPipBoundsState, mMockPipMotionHelper, mMockPipMediaController,
+                mMockPhonePipMenuController, mMockPipTaskOrganizer, mMockPipTransitionState,
+                mMockPipTouchHandler, mMockPipTransitionController, mMockWindowManagerShellWrapper,
                 mMockTaskStackListener, mPipParamsChangedForwarder,
                 mMockOneHandedController, mMockExecutor));
     }
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipKeepClearAlgorithmTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipKeepClearAlgorithmTest.java
new file mode 100644
index 0000000..e0f7e35
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipKeepClearAlgorithmTest.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.pip.phone;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+import android.graphics.Rect;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.wm.shell.ShellTestCase;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.Set;
+
+/**
+ * Unit tests against {@link PipKeepClearAlgorithm}.
+ */
+@RunWith(AndroidTestingRunner.class)
+@SmallTest
+@TestableLooper.RunWithLooper(setAsMainLooper = true)
+public class PipKeepClearAlgorithmTest extends ShellTestCase {
+
+    private PipKeepClearAlgorithm mPipKeepClearAlgorithm;
+    private static final Rect DISPLAY_BOUNDS = new Rect(0, 0, 1000, 1000);
+
+    @Before
+    public void setUp() throws Exception {
+        mPipKeepClearAlgorithm = new PipKeepClearAlgorithm();
+    }
+
+    @Test
+    public void adjust_withCollidingRestrictedKeepClearAreas_movesBounds() {
+        final Rect inBounds = new Rect(0, 0, 100, 100);
+        final Rect keepClearRect = new Rect(50, 50, 150, 150);
+
+        final Rect outBounds = mPipKeepClearAlgorithm.adjust(inBounds, Set.of(keepClearRect),
+                Set.of(), DISPLAY_BOUNDS);
+
+        assertFalse(outBounds.contains(keepClearRect));
+    }
+
+    @Test
+    public void adjust_withNonCollidingRestrictedKeepClearAreas_boundsDoNotChange() {
+        final Rect inBounds = new Rect(0, 0, 100, 100);
+        final Rect keepClearRect = new Rect(100, 100, 150, 150);
+
+        final Rect outBounds = mPipKeepClearAlgorithm.adjust(inBounds, Set.of(keepClearRect),
+                Set.of(), DISPLAY_BOUNDS);
+
+        assertEquals(inBounds, outBounds);
+    }
+
+    @Test
+    public void adjust_withCollidingUnrestrictedKeepClearAreas_boundsDoNotChange() {
+        // TODO(b/183746978): update this test to accommodate for the updated algorithm
+        final Rect inBounds = new Rect(0, 0, 100, 100);
+        final Rect keepClearRect = new Rect(50, 50, 150, 150);
+
+        final Rect outBounds = mPipKeepClearAlgorithm.adjust(inBounds, Set.of(),
+                Set.of(keepClearRect), DISPLAY_BOUNDS);
+
+        assertEquals(inBounds, outBounds);
+    }
+
+    @Test
+    public void adjust_withNonCollidingUnrestrictedKeepClearAreas_boundsDoNotChange() {
+        final Rect inBounds = new Rect(0, 0, 100, 100);
+        final Rect keepClearRect = new Rect(100, 100, 150, 150);
+
+        final Rect outBounds = mPipKeepClearAlgorithm.adjust(inBounds, Set.of(),
+                Set.of(keepClearRect), DISPLAY_BOUNDS);
+
+        assertEquals(inBounds, outBounds);
+    }
+}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipTouchHandlerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipTouchHandlerTest.java
index 74519ea..ecefd89 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipTouchHandlerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipTouchHandlerTest.java
@@ -38,6 +38,7 @@
 import com.android.wm.shell.pip.PipTaskOrganizer;
 import com.android.wm.shell.pip.PipTransitionController;
 import com.android.wm.shell.pip.PipUiEventLogger;
+import com.android.wm.shell.sysui.ShellInit;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -78,6 +79,9 @@
     private PipUiEventLogger mPipUiEventLogger;
 
     @Mock
+    private ShellInit mShellInit;
+
+    @Mock
     private ShellExecutor mMainExecutor;
 
     private PipBoundsState mPipBoundsState;
@@ -104,11 +108,11 @@
         PipMotionHelper pipMotionHelper = new PipMotionHelper(mContext, mPipBoundsState,
                 mPipTaskOrganizer, mPhonePipMenuController, mPipSnapAlgorithm,
                 mMockPipTransitionController, mFloatingContentCoordinator);
-        mPipTouchHandler = new PipTouchHandler(mContext, mPhonePipMenuController,
-                mPipBoundsAlgorithm, mPipBoundsState, mPipTaskOrganizer,
-                pipMotionHelper, mFloatingContentCoordinator, mPipUiEventLogger,
-                mMainExecutor);
-        mPipTouchHandler.init();
+        mPipTouchHandler = new PipTouchHandler(mContext, mShellInit, mPhonePipMenuController,
+                mPipBoundsAlgorithm, mPipBoundsState, mPipTaskOrganizer, pipMotionHelper,
+                mFloatingContentCoordinator, mPipUiEventLogger, mMainExecutor);
+        // We aren't actually using ShellInit, so just call init directly
+        mPipTouchHandler.onInit();
         mMotionHelper = Mockito.spy(mPipTouchHandler.getMotionHelper());
         mPipResizeGestureHandler = Mockito.spy(mPipTouchHandler.getPipResizeGestureHandler());
         mPipTouchHandler.setPipMotionHelper(mMotionHelper);
@@ -133,6 +137,11 @@
     }
 
     @Test
+    public void instantiate_addInitCallback() {
+        verify(mShellInit, times(1)).addInitCallback(any(), any());
+    }
+
+    @Test
     public void updateMovementBounds_minMaxBounds() {
         final int shorterLength = Math.min(mPipBoundsState.getDisplayBounds().width(),
                 mPipBoundsState.getDisplayBounds().height());
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java
index 50f6bd7..d406a4e 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java
@@ -30,11 +30,13 @@
 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 static java.lang.Integer.MAX_VALUE;
 
 import android.app.ActivityManager;
 import android.content.Context;
+import android.content.pm.PackageManager;
 import android.graphics.Rect;
 import android.view.SurfaceControl;
 
@@ -46,8 +48,9 @@
 import com.android.wm.shell.TestShellExecutor;
 import com.android.wm.shell.common.ShellExecutor;
 import com.android.wm.shell.common.TaskStackListenerImpl;
+import com.android.wm.shell.sysui.ShellInit;
 import com.android.wm.shell.util.GroupedRecentTaskInfo;
-import com.android.wm.shell.util.StagedSplitBounds;
+import com.android.wm.shell.util.SplitBounds;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -69,6 +72,8 @@
     private Context mContext;
     @Mock
     private TaskStackListenerImpl mTaskStackListener;
+    @Mock
+    private ShellInit mShellInit;
 
     private ShellTaskOrganizer mShellTaskOrganizer;
     private RecentTasksController mRecentTasksController;
@@ -77,10 +82,12 @@
     @Before
     public void setUp() {
         mMainExecutor = new TestShellExecutor();
-        mRecentTasksController = spy(new RecentTasksController(mContext, mTaskStackListener,
-                mMainExecutor));
-        mShellTaskOrganizer = new ShellTaskOrganizer(mMainExecutor, mContext,
-                null /* sizeCompatUI */, Optional.of(mRecentTasksController));
+        when(mContext.getPackageManager()).thenReturn(mock(PackageManager.class));
+        mRecentTasksController = spy(new RecentTasksController(mContext, mShellInit,
+                mTaskStackListener, mMainExecutor));
+        mShellTaskOrganizer = new ShellTaskOrganizer(mShellInit,
+                null /* sizeCompatUI */, Optional.empty(), Optional.of(mRecentTasksController),
+                mMainExecutor);
     }
 
     @Test
@@ -89,7 +96,7 @@
         ActivityManager.RecentTaskInfo t2 = makeTaskInfo(2);
         setRawList(t1, t2);
 
-        mRecentTasksController.addSplitPair(t1.taskId, t2.taskId, mock(StagedSplitBounds.class));
+        mRecentTasksController.addSplitPair(t1.taskId, t2.taskId, mock(SplitBounds.class));
         verify(mRecentTasksController).notifyRecentTasksChanged();
 
         reset(mRecentTasksController);
@@ -104,10 +111,10 @@
         setRawList(t1, t2);
 
         // Verify only one update if the split info is the same
-        StagedSplitBounds bounds1 = new StagedSplitBounds(new Rect(0, 0, 50, 50),
+        SplitBounds bounds1 = new SplitBounds(new Rect(0, 0, 50, 50),
                 new Rect(50, 50, 100, 100), t1.taskId, t2.taskId);
         mRecentTasksController.addSplitPair(t1.taskId, t2.taskId, bounds1);
-        StagedSplitBounds bounds2 = new StagedSplitBounds(new Rect(0, 0, 50, 50),
+        SplitBounds bounds2 = new SplitBounds(new Rect(0, 0, 50, 50),
                 new Rect(50, 50, 100, 100), t1.taskId, t2.taskId);
         mRecentTasksController.addSplitPair(t1.taskId, t2.taskId, bounds2);
         verify(mRecentTasksController, times(1)).notifyRecentTasksChanged();
@@ -139,8 +146,8 @@
         setRawList(t1, t2, t3, t4, t5, t6);
 
         // Mark a couple pairs [t2, t4], [t3, t5]
-        StagedSplitBounds pair1Bounds = new StagedSplitBounds(new Rect(), new Rect(), 2, 4);
-        StagedSplitBounds pair2Bounds = new StagedSplitBounds(new Rect(), new Rect(), 3, 5);
+        SplitBounds pair1Bounds = new SplitBounds(new Rect(), new Rect(), 2, 4);
+        SplitBounds pair2Bounds = new SplitBounds(new Rect(), new Rect(), 3, 5);
 
         mRecentTasksController.addSplitPair(t2.taskId, t4.taskId, pair1Bounds);
         mRecentTasksController.addSplitPair(t3.taskId, t5.taskId, pair2Bounds);
@@ -162,7 +169,7 @@
         setRawList(t1, t2, t3);
 
         // Add a pair
-        StagedSplitBounds pair1Bounds = new StagedSplitBounds(new Rect(), new Rect(), 2, 3);
+        SplitBounds pair1Bounds = new SplitBounds(new Rect(), new Rect(), 2, 3);
         mRecentTasksController.addSplitPair(t2.taskId, t3.taskId, pair1Bounds);
         reset(mRecentTasksController);
 
@@ -245,15 +252,15 @@
                     : -1;
 
             if (pair.mTaskInfo2 != null) {
-                assertNotNull(pair.mStagedSplitBounds);
-                int leftTopTaskId = pair.mStagedSplitBounds.leftTopTaskId;
-                int bottomRightTaskId = pair.mStagedSplitBounds.rightBottomTaskId;
+                assertNotNull(pair.mSplitBounds);
+                int leftTopTaskId = pair.mSplitBounds.leftTopTaskId;
+                int bottomRightTaskId = pair.mSplitBounds.rightBottomTaskId;
                 // Unclear if pairs are ordered by split position, most likely not.
                 assertTrue(leftTopTaskId == taskId1 || leftTopTaskId == pair.mTaskInfo2.taskId);
                 assertTrue(bottomRightTaskId == taskId1
                         || bottomRightTaskId == pair.mTaskInfo2.taskId);
             } else {
-                assertNull(pair.mStagedSplitBounds);
+                assertNull(pair.mSplitBounds);
             }
         }
         assertTrue("Expected: " + Arrays.toString(expectedTaskIds)
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/SplitBoundsTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/SplitBoundsTest.java
new file mode 100644
index 0000000..50d02ae
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/SplitBoundsTest.java
@@ -0,0 +1,95 @@
+package com.android.wm.shell.recents;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import android.graphics.Rect;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.wm.shell.ShellTestCase;
+import com.android.wm.shell.util.SplitBounds;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class SplitBoundsTest extends ShellTestCase {
+    private static final int DEVICE_WIDTH = 100;
+    private static final int DEVICE_LENGTH = 200;
+    private static final int DIVIDER_SIZE = 20;
+    private static final int TASK_ID_1 = 4;
+    private static final int TASK_ID_2 = 9;
+
+    // Bounds in screen space
+    private final Rect mTopRect = new Rect();
+    private final Rect mBottomRect = new Rect();
+    private final Rect mLeftRect = new Rect();
+    private final Rect mRightRect = new Rect();
+
+    @Before
+    public void setup() {
+        mTopRect.set(0, 0, DEVICE_WIDTH, DEVICE_LENGTH / 2 - DIVIDER_SIZE / 2);
+        mBottomRect.set(0, DEVICE_LENGTH / 2 + DIVIDER_SIZE / 2,
+                DEVICE_WIDTH, DEVICE_LENGTH);
+        mLeftRect.set(0, 0, DEVICE_WIDTH / 2 - DIVIDER_SIZE / 2, DEVICE_LENGTH);
+        mRightRect.set(DEVICE_WIDTH / 2 + DIVIDER_SIZE / 2, 0,
+                DEVICE_WIDTH, DEVICE_LENGTH);
+    }
+
+    @Test
+    public void testVerticalStacked() {
+        SplitBounds ssb = new SplitBounds(mTopRect, mBottomRect,
+                TASK_ID_1, TASK_ID_2);
+        assertTrue(ssb.appsStackedVertically);
+    }
+
+    @Test
+    public void testHorizontalStacked() {
+        SplitBounds ssb = new SplitBounds(mLeftRect, mRightRect,
+                TASK_ID_1, TASK_ID_2);
+        assertFalse(ssb.appsStackedVertically);
+    }
+
+    @Test
+    public void testHorizontalDividerBounds() {
+        SplitBounds ssb = new SplitBounds(mTopRect, mBottomRect,
+                TASK_ID_1, TASK_ID_2);
+        Rect dividerBounds = ssb.visualDividerBounds;
+        assertEquals(0, dividerBounds.left);
+        assertEquals(DEVICE_LENGTH / 2 - DIVIDER_SIZE / 2, dividerBounds.top);
+        assertEquals(DEVICE_WIDTH, dividerBounds.right);
+        assertEquals(DEVICE_LENGTH / 2 + DIVIDER_SIZE / 2, dividerBounds.bottom);
+    }
+
+    @Test
+    public void testVerticalDividerBounds() {
+        SplitBounds ssb = new SplitBounds(mLeftRect, mRightRect,
+                TASK_ID_1, TASK_ID_2);
+        Rect dividerBounds = ssb.visualDividerBounds;
+        assertEquals(DEVICE_WIDTH / 2 - DIVIDER_SIZE / 2, dividerBounds.left);
+        assertEquals(0, dividerBounds.top);
+        assertEquals(DEVICE_WIDTH / 2 + DIVIDER_SIZE / 2, dividerBounds.right);
+        assertEquals(DEVICE_LENGTH, dividerBounds.bottom);
+    }
+
+    @Test
+    public void testEqualVerticalTaskPercent() {
+        SplitBounds ssb = new SplitBounds(mTopRect, mBottomRect,
+                TASK_ID_1, TASK_ID_2);
+        float topPercentSpaceTaken = (float) (DEVICE_LENGTH / 2 - DIVIDER_SIZE / 2) / DEVICE_LENGTH;
+        assertEquals(topPercentSpaceTaken, ssb.topTaskPercent, 0.01);
+    }
+
+    @Test
+    public void testEqualHorizontalTaskPercent() {
+        SplitBounds ssb = new SplitBounds(mLeftRect, mRightRect,
+                TASK_ID_1, TASK_ID_2);
+        float leftPercentSpaceTaken = (float) (DEVICE_WIDTH / 2 - DIVIDER_SIZE / 2) / DEVICE_WIDTH;
+        assertEquals(leftPercentSpaceTaken, ssb.leftTaskPercent, 0.01);
+    }
+}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/StagedSplitBoundsTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/StagedSplitBoundsTest.java
deleted file mode 100644
index ad73c56..0000000
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/StagedSplitBoundsTest.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package com.android.wm.shell.recents;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import android.graphics.Rect;
-
-import androidx.test.filters.SmallTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import com.android.wm.shell.util.StagedSplitBounds;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public class StagedSplitBoundsTest {
-    private static final int DEVICE_WIDTH = 100;
-    private static final int DEVICE_LENGTH = 200;
-    private static final int DIVIDER_SIZE = 20;
-    private static final int TASK_ID_1 = 4;
-    private static final int TASK_ID_2 = 9;
-
-    // Bounds in screen space
-    private final Rect mTopRect = new Rect();
-    private final Rect mBottomRect = new Rect();
-    private final Rect mLeftRect = new Rect();
-    private final Rect mRightRect = new Rect();
-
-    @Before
-    public void setup() {
-        mTopRect.set(0, 0, DEVICE_WIDTH, DEVICE_LENGTH / 2 - DIVIDER_SIZE / 2);
-        mBottomRect.set(0, DEVICE_LENGTH / 2 + DIVIDER_SIZE / 2,
-                DEVICE_WIDTH, DEVICE_LENGTH);
-        mLeftRect.set(0, 0, DEVICE_WIDTH / 2 - DIVIDER_SIZE / 2, DEVICE_LENGTH);
-        mRightRect.set(DEVICE_WIDTH / 2 + DIVIDER_SIZE / 2, 0,
-                DEVICE_WIDTH, DEVICE_LENGTH);
-    }
-
-    @Test
-    public void testVerticalStacked() {
-        StagedSplitBounds ssb = new StagedSplitBounds(mTopRect, mBottomRect,
-                TASK_ID_1, TASK_ID_2);
-        assertTrue(ssb.appsStackedVertically);
-    }
-
-    @Test
-    public void testHorizontalStacked() {
-        StagedSplitBounds ssb = new StagedSplitBounds(mLeftRect, mRightRect,
-                TASK_ID_1, TASK_ID_2);
-        assertFalse(ssb.appsStackedVertically);
-    }
-
-    @Test
-    public void testHorizontalDividerBounds() {
-        StagedSplitBounds ssb = new StagedSplitBounds(mTopRect, mBottomRect,
-                TASK_ID_1, TASK_ID_2);
-        Rect dividerBounds = ssb.visualDividerBounds;
-        assertEquals(0, dividerBounds.left);
-        assertEquals(DEVICE_LENGTH / 2 - DIVIDER_SIZE / 2, dividerBounds.top);
-        assertEquals(DEVICE_WIDTH, dividerBounds.right);
-        assertEquals(DEVICE_LENGTH / 2 + DIVIDER_SIZE / 2, dividerBounds.bottom);
-    }
-
-    @Test
-    public void testVerticalDividerBounds() {
-        StagedSplitBounds ssb = new StagedSplitBounds(mLeftRect, mRightRect,
-                TASK_ID_1, TASK_ID_2);
-        Rect dividerBounds = ssb.visualDividerBounds;
-        assertEquals(DEVICE_WIDTH / 2 - DIVIDER_SIZE / 2, dividerBounds.left);
-        assertEquals(0, dividerBounds.top);
-        assertEquals(DEVICE_WIDTH / 2 + DIVIDER_SIZE / 2, dividerBounds.right);
-        assertEquals(DEVICE_LENGTH, dividerBounds.bottom);
-    }
-
-    @Test
-    public void testEqualVerticalTaskPercent() {
-        StagedSplitBounds ssb = new StagedSplitBounds(mTopRect, mBottomRect,
-                TASK_ID_1, TASK_ID_2);
-        float topPercentSpaceTaken = (float) (DEVICE_LENGTH / 2 - DIVIDER_SIZE / 2) / DEVICE_LENGTH;
-        assertEquals(topPercentSpaceTaken, ssb.topTaskPercent, 0.01);
-    }
-
-    @Test
-    public void testEqualHorizontalTaskPercent() {
-        StagedSplitBounds ssb = new StagedSplitBounds(mLeftRect, mRightRect,
-                TASK_ID_1, TASK_ID_2);
-        float leftPercentSpaceTaken = (float) (DEVICE_WIDTH / 2 - DIVIDER_SIZE / 2) / DEVICE_WIDTH;
-        assertEquals(leftPercentSpaceTaken, ssb.leftTaskPercent, 0.01);
-    }
-}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/MainStageTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/MainStageTests.java
index 0639ad5..68cb57c 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/MainStageTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/MainStageTests.java
@@ -61,7 +61,7 @@
         MockitoAnnotations.initMocks(this);
         mRootTaskInfo = new TestRunningTaskInfoBuilder().build();
         mMainStage = new MainStage(mContext, mTaskOrganizer, DEFAULT_DISPLAY, mCallbacks,
-                mSyncQueue, mSurfaceSession, mIconProvider, null);
+                mSyncQueue, mSurfaceSession, mIconProvider);
         mMainStage.onTaskAppeared(mRootTaskInfo, mRootLeash);
     }
 
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SideStageTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SideStageTests.java
index a31aa58..3b42a48 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SideStageTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SideStageTests.java
@@ -66,7 +66,7 @@
         MockitoAnnotations.initMocks(this);
         mRootTask = new TestRunningTaskInfoBuilder().build();
         mSideStage = new SideStage(mContext, mTaskOrganizer, DEFAULT_DISPLAY, mCallbacks,
-                mSyncQueue, mSurfaceSession, mIconProvider, null);
+                mSyncQueue, mSurfaceSession, mIconProvider);
         mSideStage.onTaskAppeared(mRootTask, mRootLeash);
     }
 
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitScreenControllerTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitScreenControllerTests.java
new file mode 100644
index 0000000..10788f9
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitScreenControllerTests.java
@@ -0,0 +1,176 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.splitscreen;
+
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
+import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
+import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
+
+import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_TOP_OR_LEFT;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.doReturn;
+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.ActivityManager;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+
+import com.android.launcher3.icons.IconProvider;
+import com.android.wm.shell.RootTaskDisplayAreaOrganizer;
+import com.android.wm.shell.ShellTaskOrganizer;
+import com.android.wm.shell.ShellTestCase;
+import com.android.wm.shell.common.DisplayController;
+import com.android.wm.shell.common.DisplayImeController;
+import com.android.wm.shell.common.DisplayInsetsController;
+import com.android.wm.shell.common.DisplayLayout;
+import com.android.wm.shell.common.ShellExecutor;
+import com.android.wm.shell.common.SyncTransactionQueue;
+import com.android.wm.shell.common.TransactionPool;
+import com.android.wm.shell.draganddrop.DragAndDropController;
+import com.android.wm.shell.recents.RecentTasksController;
+import com.android.wm.shell.sysui.ShellController;
+import com.android.wm.shell.sysui.ShellInit;
+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;
+
+import java.util.Optional;
+
+/**
+ * Tests for {@link SplitScreenController}
+ */
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class SplitScreenControllerTests extends ShellTestCase {
+
+    @Mock ShellController mShellController;
+    @Mock ShellInit mShellInit;
+    @Mock ShellTaskOrganizer mTaskOrganizer;
+    @Mock SyncTransactionQueue mSyncQueue;
+    @Mock RootTaskDisplayAreaOrganizer mRootTDAOrganizer;
+    @Mock ShellExecutor mMainExecutor;
+    @Mock DisplayController mDisplayController;
+    @Mock DisplayImeController mDisplayImeController;
+    @Mock DisplayInsetsController mDisplayInsetsController;
+    @Mock DragAndDropController mDragAndDropController;
+    @Mock Transitions mTransitions;
+    @Mock TransactionPool mTransactionPool;
+    @Mock IconProvider mIconProvider;
+    @Mock Optional<RecentTasksController> mRecentTasks;
+
+    private SplitScreenController mSplitScreenController;
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+        mSplitScreenController = spy(new SplitScreenController(mContext, mShellInit,
+                mShellController, mTaskOrganizer, mSyncQueue, mRootTDAOrganizer, mDisplayController,
+                mDisplayImeController, mDisplayInsetsController, mDragAndDropController,
+                mTransitions, mTransactionPool, mIconProvider, mRecentTasks, mMainExecutor));
+    }
+
+    @Test
+    public void instantiateController_addInitCallback() {
+        verify(mShellInit, times(1)).addInitCallback(any(), any());
+    }
+
+    @Test
+    public void testControllerRegistersKeyguardChangeListener() {
+        when(mDisplayController.getDisplayLayout(anyInt())).thenReturn(new DisplayLayout());
+        mSplitScreenController.onInit();
+        verify(mShellController, times(1)).addKeyguardChangeListener(any());
+    }
+
+    @Test
+    public void testIsLaunchingAdjacently_notInSplitScreen() {
+        doReturn(false).when(mSplitScreenController).isSplitScreenVisible();
+        doReturn(true).when(mSplitScreenController).isValidToEnterSplitScreen(any());
+
+        // Verify launching the same activity returns true.
+        Intent startIntent = createStartIntent("startActivity");
+        ActivityManager.RunningTaskInfo focusTaskInfo =
+                createTaskInfo(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, startIntent);
+        doReturn(focusTaskInfo).when(mSplitScreenController).getFocusingTaskInfo();
+        assertTrue(mSplitScreenController.isLaunchingAdjacently(
+                startIntent, SPLIT_POSITION_TOP_OR_LEFT));
+
+        // Verify launching different activity returns false.
+        Intent diffIntent = createStartIntent("diffActivity");
+        focusTaskInfo =
+                createTaskInfo(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, diffIntent);
+        doReturn(focusTaskInfo).when(mSplitScreenController).getFocusingTaskInfo();
+        assertFalse(mSplitScreenController.isLaunchingAdjacently(
+                startIntent, SPLIT_POSITION_TOP_OR_LEFT));
+    }
+
+    @Test
+    public void testIsLaunchingAdjacently_inSplitScreen() {
+        doReturn(true).when(mSplitScreenController).isSplitScreenVisible();
+
+        // Verify launching the same activity returns true.
+        Intent startIntent = createStartIntent("startActivity");
+        ActivityManager.RunningTaskInfo pairingTaskInfo =
+                createTaskInfo(WINDOWING_MODE_MULTI_WINDOW, ACTIVITY_TYPE_STANDARD, startIntent);
+        doReturn(pairingTaskInfo).when(mSplitScreenController).getTaskInfo(anyInt());
+        assertTrue(mSplitScreenController.isLaunchingAdjacently(
+                startIntent, SPLIT_POSITION_TOP_OR_LEFT));
+
+        // Verify launching different activity returns false.
+        Intent diffIntent = createStartIntent("diffActivity");
+        pairingTaskInfo =
+                createTaskInfo(WINDOWING_MODE_MULTI_WINDOW, ACTIVITY_TYPE_STANDARD, diffIntent);
+        doReturn(pairingTaskInfo).when(mSplitScreenController).getTaskInfo(anyInt());
+        assertFalse(mSplitScreenController.isLaunchingAdjacently(
+                startIntent, SPLIT_POSITION_TOP_OR_LEFT));
+    }
+
+    private Intent createStartIntent(String activityName) {
+        Intent intent = new Intent();
+        intent.setComponent(new ComponentName(mContext, activityName));
+        return intent;
+    }
+
+    private ActivityManager.RunningTaskInfo createTaskInfo(int winMode, int actType,
+            Intent strIntent) {
+        ActivityManager.RunningTaskInfo info = new ActivityManager.RunningTaskInfo();
+        info.configuration.windowConfiguration.setActivityType(actType);
+        info.configuration.windowConfiguration.setWindowingMode(winMode);
+        info.supportsMultiWindow = true;
+        info.baseIntent = strIntent;
+        info.baseActivity = strIntent.getComponent();
+        ActivityInfo activityInfo = new ActivityInfo();
+        activityInfo.packageName = info.baseActivity.getPackageName();
+        activityInfo.name = info.baseActivity.getClassName();
+        info.topActivityInfo = activityInfo;
+        return info;
+    }
+}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTestUtils.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTestUtils.java
index eb9d3a1..a67853c 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTestUtils.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTestUtils.java
@@ -40,8 +40,6 @@
 
 import java.util.Optional;
 
-import javax.inject.Provider;
-
 public class SplitTestUtils {
 
     static SplitLayout createMockSplitLayout() {
@@ -74,12 +72,10 @@
                 DisplayInsetsController insetsController, SplitLayout splitLayout,
                 Transitions transitions, TransactionPool transactionPool,
                 SplitscreenEventLogger logger, ShellExecutor mainExecutor,
-                Optional<RecentTasksController> recentTasks,
-                Provider<Optional<StageTaskUnfoldController>> unfoldController) {
+                Optional<RecentTasksController> recentTasks) {
             super(context, displayId, syncQueue, taskOrganizer, mainStage,
                     sideStage, displayController, imeController, insetsController, splitLayout,
-                    transitions, transactionPool, logger, mainExecutor, recentTasks,
-                    unfoldController);
+                    transitions, transactionPool, logger, mainExecutor, recentTasks);
 
             // Prepare root task for testing.
             mRootTask = new TestRunningTaskInfoBuilder().build();
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTransitionTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTransitionTests.java
index ffaab65..1d038f4 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTransitionTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTransitionTests.java
@@ -118,16 +118,16 @@
         mSplitLayout = SplitTestUtils.createMockSplitLayout();
         mMainStage = new MainStage(mContext, mTaskOrganizer, DEFAULT_DISPLAY, mock(
                 StageTaskListener.StageListenerCallbacks.class), mSyncQueue, mSurfaceSession,
-                mIconProvider, null);
+                mIconProvider);
         mMainStage.onTaskAppeared(new TestRunningTaskInfoBuilder().build(), createMockSurface());
         mSideStage = new SideStage(mContext, mTaskOrganizer, DEFAULT_DISPLAY, mock(
                 StageTaskListener.StageListenerCallbacks.class), mSyncQueue, mSurfaceSession,
-                mIconProvider, null);
+                mIconProvider);
         mSideStage.onTaskAppeared(new TestRunningTaskInfoBuilder().build(), createMockSurface());
         mStageCoordinator = new SplitTestUtils.TestStageCoordinator(mContext, DEFAULT_DISPLAY,
                 mSyncQueue, mTaskOrganizer, mMainStage, mSideStage, mDisplayController,
                 mDisplayImeController, mDisplayInsetsController, mSplitLayout, mTransitions,
-                mTransactionPool, mLogger, mMainExecutor, Optional.empty(), Optional::empty);
+                mTransactionPool, mLogger, mMainExecutor, Optional.empty());
         mSplitScreenTransitions = mStageCoordinator.getSplitTransitions();
         doAnswer((Answer<IBinder>) invocation -> mock(IBinder.class))
                 .when(mTransitions).startTransition(anyInt(), any(), any());
@@ -182,7 +182,7 @@
 
         IBinder transition = mSplitScreenTransitions.startEnterTransition(
                 TRANSIT_SPLIT_SCREEN_PAIR_OPEN, new WindowContainerTransaction(),
-                new RemoteTransition(testRemote), mStageCoordinator);
+                new RemoteTransition(testRemote), mStageCoordinator, null);
         mMainStage.onTaskAppeared(mMainChild, createMockSurface());
         mSideStage.onTaskAppeared(mSideChild, createMockSurface());
         boolean accepted = mStageCoordinator.startAnimation(transition, info,
@@ -340,7 +340,7 @@
         TransitionInfo info = new TransitionInfo(TRANSIT_TO_BACK, 0);
         info.addChange(mainChange);
         info.addChange(sideChange);
-        IBinder transition = mSplitScreenTransitions.startDismissTransition(null,
+        IBinder transition = mSplitScreenTransitions.startDismissTransition(
                 new WindowContainerTransaction(), mStageCoordinator,
                 EXIT_REASON_APP_DOES_NOT_SUPPORT_MULTIWINDOW, STAGE_TYPE_SIDE);
         boolean accepted = mStageCoordinator.startAnimation(transition, info,
@@ -363,7 +363,7 @@
         TransitionInfo info = new TransitionInfo(TRANSIT_TO_BACK, 0);
         info.addChange(mainChange);
         info.addChange(sideChange);
-        IBinder transition = mSplitScreenTransitions.startDismissTransition(null,
+        IBinder transition = mSplitScreenTransitions.startDismissTransition(
                 new WindowContainerTransaction(), mStageCoordinator, EXIT_REASON_DRAG_DIVIDER,
                 STAGE_TYPE_SIDE);
         mMainStage.onTaskVanished(mMainChild);
@@ -422,7 +422,7 @@
         TransitionInfo enterInfo = createEnterPairInfo();
         IBinder enterTransit = mSplitScreenTransitions.startEnterTransition(
                 TRANSIT_SPLIT_SCREEN_PAIR_OPEN, new WindowContainerTransaction(),
-                new RemoteTransition(new TestRemoteTransition()), mStageCoordinator);
+                new RemoteTransition(new TestRemoteTransition()), mStageCoordinator, null);
         mMainStage.onTaskAppeared(mMainChild, createMockSurface());
         mSideStage.onTaskAppeared(mSideChild, createMockSurface());
         mStageCoordinator.startAnimation(enterTransit, enterInfo,
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageCoordinatorTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageCoordinatorTests.java
index 42d998f..4b68870 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageCoordinatorTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageCoordinatorTests.java
@@ -34,6 +34,7 @@
 import static org.mockito.Mockito.clearInvocations;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -58,6 +59,7 @@
 import com.android.wm.shell.common.SyncTransactionQueue;
 import com.android.wm.shell.common.TransactionPool;
 import com.android.wm.shell.common.split.SplitLayout;
+import com.android.wm.shell.splitscreen.SplitScreen.SplitScreenListener;
 import com.android.wm.shell.transition.Transitions;
 
 import org.junit.Before;
@@ -68,8 +70,6 @@
 
 import java.util.Optional;
 
-import javax.inject.Provider;
-
 /**
  * Tests for {@link StageCoordinator}
  */
@@ -85,10 +85,6 @@
     @Mock
     private SideStage mSideStage;
     @Mock
-    private StageTaskUnfoldController mMainUnfoldController;
-    @Mock
-    private StageTaskUnfoldController mSideUnfoldController;
-    @Mock
     private SplitLayout mSplitLayout;
     @Mock
     private DisplayController mDisplayController;
@@ -107,6 +103,7 @@
 
     private final Rect mBounds1 = new Rect(10, 20, 30, 40);
     private final Rect mBounds2 = new Rect(5, 10, 15, 20);
+    private final Rect mRootBounds = new Rect(0, 0, 45, 60);
 
     private SurfaceSession mSurfaceSession = new SurfaceSession();
     private SurfaceControl mRootLeash;
@@ -119,16 +116,20 @@
         mStageCoordinator = spy(new StageCoordinator(mContext, DEFAULT_DISPLAY, mSyncQueue,
                 mTaskOrganizer, mMainStage, mSideStage, mDisplayController, mDisplayImeController,
                 mDisplayInsetsController, mSplitLayout, mTransitions, mTransactionPool, mLogger,
-                mMainExecutor, Optional.empty(), new UnfoldControllerProvider()));
+                mMainExecutor, Optional.empty()));
         doNothing().when(mStageCoordinator).updateActivityOptions(any(), anyInt());
 
         when(mSplitLayout.getBounds1()).thenReturn(mBounds1);
         when(mSplitLayout.getBounds2()).thenReturn(mBounds2);
+        when(mSplitLayout.getRootBounds()).thenReturn(mRootBounds);
         when(mSplitLayout.isLandscape()).thenReturn(false);
 
         mRootTask = new TestRunningTaskInfoBuilder().build();
         mRootLeash = new SurfaceControl.Builder(mSurfaceSession).setName("test").build();
         mStageCoordinator.onTaskAppeared(mRootTask, mRootLeash);
+
+        mSideStage.mRootTaskInfo = new TestRunningTaskInfoBuilder().build();
+        mMainStage.mRootTaskInfo = new TestRunningTaskInfoBuilder().build();
     }
 
     @Test
@@ -168,13 +169,6 @@
     }
 
     @Test
-    public void testRootTaskAppeared_initializesUnfoldControllers() {
-        verify(mMainUnfoldController).init();
-        verify(mSideUnfoldController).init();
-        verify(mStageCoordinator).onRootTaskAppeared();
-    }
-
-    @Test
     public void testRootTaskInfoChanged_updatesSplitLayout() {
         mStageCoordinator.onTaskInfoChanged(mRootTask);
 
@@ -184,26 +178,25 @@
     @Test
     public void testLayoutChanged_topLeftSplitPosition_updatesUnfoldStageBounds() {
         mStageCoordinator.setSideStagePosition(SPLIT_POSITION_TOP_OR_LEFT, null);
-        clearInvocations(mMainUnfoldController, mSideUnfoldController);
+        final SplitScreenListener listener = mock(SplitScreenListener.class);
+        mStageCoordinator.registerSplitScreenListener(listener);
+        clearInvocations(listener);
 
         mStageCoordinator.onLayoutSizeChanged(mSplitLayout);
 
-        verify(mMainUnfoldController).onLayoutChanged(mBounds2, SPLIT_POSITION_BOTTOM_OR_RIGHT,
-                false);
-        verify(mSideUnfoldController).onLayoutChanged(mBounds1, SPLIT_POSITION_TOP_OR_LEFT, false);
+        verify(listener).onSplitBoundsChanged(mRootBounds, mBounds2, mBounds1);
     }
 
     @Test
     public void testLayoutChanged_bottomRightSplitPosition_updatesUnfoldStageBounds() {
         mStageCoordinator.setSideStagePosition(SPLIT_POSITION_BOTTOM_OR_RIGHT, null);
-        clearInvocations(mMainUnfoldController, mSideUnfoldController);
+        final SplitScreenListener listener = mock(SplitScreenListener.class);
+        mStageCoordinator.registerSplitScreenListener(listener);
+        clearInvocations(listener);
 
         mStageCoordinator.onLayoutSizeChanged(mSplitLayout);
 
-        verify(mMainUnfoldController).onLayoutChanged(mBounds1, SPLIT_POSITION_TOP_OR_LEFT,
-                false);
-        verify(mSideUnfoldController).onLayoutChanged(mBounds2, SPLIT_POSITION_BOTTOM_OR_RIGHT,
-                false);
+        verify(listener).onSplitBoundsChanged(mRootBounds, mBounds1, mBounds2);
     }
 
     @Test
@@ -234,8 +227,8 @@
         mStageCoordinator.exitSplitScreen(testTaskId, EXIT_REASON_RETURN_HOME);
         verify(mMainStage).reorderChild(eq(testTaskId), eq(true),
                 any(WindowContainerTransaction.class));
-        verify(mSideStage).removeAllTasks(any(WindowContainerTransaction.class), eq(false));
-        verify(mMainStage).deactivate(any(WindowContainerTransaction.class), eq(true));
+        verify(mSideStage).dismiss(any(WindowContainerTransaction.class), eq(false));
+        verify(mMainStage).resetBounds(any(WindowContainerTransaction.class));
     }
 
     @Test
@@ -247,8 +240,8 @@
         mStageCoordinator.exitSplitScreen(testTaskId, EXIT_REASON_RETURN_HOME);
         verify(mSideStage).reorderChild(eq(testTaskId), eq(true),
                 any(WindowContainerTransaction.class));
-        verify(mSideStage).removeAllTasks(any(WindowContainerTransaction.class), eq(true));
-        verify(mMainStage).deactivate(any(WindowContainerTransaction.class), eq(false));
+        verify(mSideStage).resetBounds(any(WindowContainerTransaction.class));
+        verify(mMainStage).dismiss(any(WindowContainerTransaction.class), eq(false));
     }
 
     @Test
@@ -314,20 +307,4 @@
 
         verify(mSplitLayout).applySurfaceChanges(any(), any(), any(), any(), any(), eq(false));
     }
-
-    private class UnfoldControllerProvider implements
-            Provider<Optional<StageTaskUnfoldController>> {
-
-        private boolean isMain = true;
-
-        @Override
-        public Optional<StageTaskUnfoldController> get() {
-            if (isMain) {
-                isMain = false;
-                return Optional.of(mMainUnfoldController);
-            } else {
-                return Optional.of(mSideUnfoldController);
-            }
-        }
-    }
 }
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageTaskListenerTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageTaskListenerTests.java
index 157c30b..5ee8bf3 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageTaskListenerTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageTaskListenerTests.java
@@ -25,7 +25,6 @@
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assume.assumeFalse;
 import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.clearInvocations;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
@@ -72,8 +71,6 @@
     private SyncTransactionQueue mSyncQueue;
     @Mock
     private IconProvider mIconProvider;
-    @Mock
-    private StageTaskUnfoldController mStageTaskUnfoldController;
     @Captor
     private ArgumentCaptor<SyncTransactionQueue.TransactionRunnable> mRunnableCaptor;
     private SurfaceSession mSurfaceSession = new SurfaceSession();
@@ -92,8 +89,7 @@
                 mCallbacks,
                 mSyncQueue,
                 mSurfaceSession,
-                mIconProvider,
-                mStageTaskUnfoldController);
+                mIconProvider);
         mRootTask = new TestRunningTaskInfoBuilder().build();
         mRootTask.parentTaskId = INVALID_TASK_ID;
         mSurfaceControl = new SurfaceControl.Builder(mSurfaceSession).setName("test").build();
@@ -130,30 +126,6 @@
         verify(mCallbacks).onStatusChanged(eq(mRootTask.isVisible), eq(true));
     }
 
-    @Test
-    public void testTaskAppeared_notifiesUnfoldListener() {
-        assumeFalse(ENABLE_SHELL_TRANSITIONS);
-        final ActivityManager.RunningTaskInfo task =
-                new TestRunningTaskInfoBuilder().setParentTaskId(mRootTask.taskId).build();
-
-        mStageTaskListener.onTaskAppeared(task, mSurfaceControl);
-
-        verify(mStageTaskUnfoldController).onTaskAppeared(eq(task), eq(mSurfaceControl));
-    }
-
-    @Test
-    public void testTaskVanished_notifiesUnfoldListener() {
-        assumeFalse(ENABLE_SHELL_TRANSITIONS);
-        final ActivityManager.RunningTaskInfo task =
-                new TestRunningTaskInfoBuilder().setParentTaskId(mRootTask.taskId).build();
-        mStageTaskListener.onTaskAppeared(task, mSurfaceControl);
-        clearInvocations(mStageTaskUnfoldController);
-
-        mStageTaskListener.onTaskVanished(task);
-
-        verify(mStageTaskUnfoldController).onTaskVanished(eq(task));
-    }
-
     @Test(expected = IllegalArgumentException.class)
     public void testUnknownTaskVanished() {
         final ActivityManager.RunningTaskInfo task = new TestRunningTaskInfoBuilder().build();
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawerTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawerTests.java
index 630d0d2..e5ae296 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawerTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/startingsurface/StartingSurfaceDrawerTests.java
@@ -73,6 +73,7 @@
 import androidx.test.platform.app.InstrumentationRegistry;
 
 import com.android.launcher3.icons.IconProvider;
+import com.android.wm.shell.ShellTestCase;
 import com.android.wm.shell.common.HandlerExecutor;
 import com.android.wm.shell.common.ShellExecutor;
 import com.android.wm.shell.common.TransactionPool;
@@ -91,7 +92,7 @@
  */
 @SmallTest
 @RunWith(AndroidJUnit4.class)
-public class StartingSurfaceDrawerTests {
+public class StartingSurfaceDrawerTests extends ShellTestCase {
     @Mock
     private IBinder mBinder;
     @Mock
@@ -249,7 +250,8 @@
                 any() /* window */, any() /* attrs */,
                 anyInt() /* viewVisibility */, anyInt() /* displayId */,
                 any() /* requestedVisibility */, any() /* outInputChannel */,
-                any() /* outInsetsState */, any() /* outActiveControls */);
+                any() /* outInsetsState */, any() /* outActiveControls */,
+                any() /* outAttachedFrame */, any() /* outSizeCompatScale */);
         TaskSnapshotWindow mockSnapshotWindow = TaskSnapshotWindow.create(windowInfo,
                 mBinder,
                 snapshot, mTestExecutor, () -> {
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/startingsurface/StartingWindowControllerTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/startingsurface/StartingWindowControllerTests.java
new file mode 100644
index 0000000..35515e3
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/startingsurface/StartingWindowControllerTests.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.startingsurface;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import android.content.Context;
+import android.hardware.display.DisplayManager;
+import android.view.Display;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+
+import com.android.launcher3.icons.IconProvider;
+import com.android.wm.shell.ShellTaskOrganizer;
+import com.android.wm.shell.ShellTestCase;
+import com.android.wm.shell.common.ShellExecutor;
+import com.android.wm.shell.common.TransactionPool;
+import com.android.wm.shell.sysui.ShellInit;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+/**
+ * Tests for the starting window controller.
+ *
+ * Build/Install/Run:
+ *  atest WMShellUnitTests:StartingWindowControllerTests
+ */
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class StartingWindowControllerTests extends ShellTestCase {
+
+    private @Mock Context mContext;
+    private @Mock DisplayManager mDisplayManager;
+    private @Mock ShellInit mShellInit;
+    private @Mock ShellTaskOrganizer mTaskOrganizer;
+    private @Mock ShellExecutor mMainExecutor;
+    private @Mock StartingWindowTypeAlgorithm mTypeAlgorithm;
+    private @Mock IconProvider mIconProvider;
+    private @Mock TransactionPool mTransactionPool;
+    private StartingWindowController mController;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        doReturn(mock(Display.class)).when(mDisplayManager).getDisplay(anyInt());
+        doReturn(mDisplayManager).when(mContext).getSystemService(eq(DisplayManager.class));
+        mController = new StartingWindowController(mContext, mShellInit, mTaskOrganizer,
+                mMainExecutor, mTypeAlgorithm, mIconProvider, mTransactionPool);
+    }
+
+    @Test
+    public void instantiate_addInitCallback() {
+        verify(mShellInit, times(1)).addInitCallback(any(), any());
+    }
+}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/startingsurface/TaskSnapshotWindowTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/startingsurface/TaskSnapshotWindowTest.java
index 78e27c9..3de50bb 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/startingsurface/TaskSnapshotWindowTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/startingsurface/TaskSnapshotWindowTest.java
@@ -47,6 +47,7 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
 
+import com.android.wm.shell.ShellTestCase;
 import com.android.wm.shell.TestShellExecutor;
 
 import org.junit.Test;
@@ -58,7 +59,7 @@
  */
 @SmallTest
 @RunWith(AndroidJUnit4.class)
-public class TaskSnapshotWindowTest {
+public class TaskSnapshotWindowTest extends ShellTestCase {
 
     private TaskSnapshotWindow mWindow;
 
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/sysui/ShellControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/sysui/ShellControllerTest.java
new file mode 100644
index 0000000..02311ba
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/sysui/ShellControllerTest.java
@@ -0,0 +1,333 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.sysui;
+
+import static org.junit.Assert.assertTrue;
+
+import android.content.res.Configuration;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.platform.app.InstrumentationRegistry;
+
+import com.android.wm.shell.ShellTestCase;
+import com.android.wm.shell.common.ShellExecutor;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.Locale;
+
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper(setAsMainLooper = true)
+public class ShellControllerTest extends ShellTestCase {
+
+    @Mock
+    private ShellInit mShellInit;
+    @Mock
+    private ShellExecutor mExecutor;
+
+    private ShellController mController;
+    private TestConfigurationChangeListener mConfigChangeListener;
+    private TestKeyguardChangeListener mKeyguardChangeListener;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mKeyguardChangeListener = new TestKeyguardChangeListener();
+        mConfigChangeListener = new TestConfigurationChangeListener();
+        mController = new ShellController(mShellInit, mExecutor);
+        mController.onConfigurationChanged(getConfigurationCopy());
+    }
+
+    @After
+    public void tearDown() {
+        // Do nothing
+    }
+
+    @Test
+    public void testAddKeyguardChangeListener_ensureCallback() {
+        mController.addKeyguardChangeListener(mKeyguardChangeListener);
+
+        mController.onKeyguardVisibilityChanged(true, false, false);
+        assertTrue(mKeyguardChangeListener.visibilityChanged == 1);
+        assertTrue(mKeyguardChangeListener.dismissAnimationFinished == 0);
+    }
+
+    @Test
+    public void testDoubleAddKeyguardChangeListener_ensureSingleCallback() {
+        mController.addKeyguardChangeListener(mKeyguardChangeListener);
+        mController.addKeyguardChangeListener(mKeyguardChangeListener);
+
+        mController.onKeyguardVisibilityChanged(true, false, false);
+        assertTrue(mKeyguardChangeListener.visibilityChanged == 1);
+        assertTrue(mKeyguardChangeListener.dismissAnimationFinished == 0);
+    }
+
+    @Test
+    public void testAddRemoveKeyguardChangeListener_ensureNoCallback() {
+        mController.addKeyguardChangeListener(mKeyguardChangeListener);
+        mController.removeKeyguardChangeListener(mKeyguardChangeListener);
+
+        mController.onKeyguardVisibilityChanged(true, false, false);
+        assertTrue(mKeyguardChangeListener.visibilityChanged == 0);
+        assertTrue(mKeyguardChangeListener.dismissAnimationFinished == 0);
+    }
+
+    @Test
+    public void testKeyguardVisibilityChanged() {
+        mController.addKeyguardChangeListener(mKeyguardChangeListener);
+
+        mController.onKeyguardVisibilityChanged(true, true, true);
+        assertTrue(mKeyguardChangeListener.visibilityChanged == 1);
+        assertTrue(mKeyguardChangeListener.lastAnimatingDismiss);
+        assertTrue(mKeyguardChangeListener.lastOccluded);
+        assertTrue(mKeyguardChangeListener.lastAnimatingDismiss);
+        assertTrue(mKeyguardChangeListener.dismissAnimationFinished == 0);
+    }
+
+    @Test
+    public void testKeyguardDismissAnimationFinished() {
+        mController.addKeyguardChangeListener(mKeyguardChangeListener);
+
+        mController.onKeyguardDismissAnimationFinished();
+        assertTrue(mKeyguardChangeListener.visibilityChanged == 0);
+        assertTrue(mKeyguardChangeListener.dismissAnimationFinished == 1);
+    }
+
+    @Test
+    public void testAddConfigurationChangeListener_ensureCallback() {
+        mController.addConfigurationChangeListener(mConfigChangeListener);
+
+        Configuration newConfig = getConfigurationCopy();
+        newConfig.densityDpi = 200;
+        mController.onConfigurationChanged(newConfig);
+        assertTrue(mConfigChangeListener.configChanges == 1);
+    }
+
+    @Test
+    public void testDoubleAddConfigurationChangeListener_ensureSingleCallback() {
+        mController.addConfigurationChangeListener(mConfigChangeListener);
+        mController.addConfigurationChangeListener(mConfigChangeListener);
+
+        Configuration newConfig = getConfigurationCopy();
+        newConfig.densityDpi = 200;
+        mController.onConfigurationChanged(newConfig);
+        assertTrue(mConfigChangeListener.configChanges == 1);
+    }
+
+    @Test
+    public void testAddRemoveConfigurationChangeListener_ensureNoCallback() {
+        mController.addConfigurationChangeListener(mConfigChangeListener);
+        mController.removeConfigurationChangeListener(mConfigChangeListener);
+
+        Configuration newConfig = getConfigurationCopy();
+        newConfig.densityDpi = 200;
+        mController.onConfigurationChanged(newConfig);
+        assertTrue(mConfigChangeListener.configChanges == 0);
+    }
+
+    @Test
+    public void testMultipleConfigurationChangeListeners() {
+        TestConfigurationChangeListener listener2 = new TestConfigurationChangeListener();
+        mController.addConfigurationChangeListener(mConfigChangeListener);
+        mController.addConfigurationChangeListener(listener2);
+
+        Configuration newConfig = getConfigurationCopy();
+        newConfig.densityDpi = 200;
+        mController.onConfigurationChanged(newConfig);
+        assertTrue(mConfigChangeListener.configChanges == 1);
+        assertTrue(listener2.configChanges == 1);
+    }
+
+    @Test
+    public void testRemoveListenerDuringCallback() {
+        TestConfigurationChangeListener badListener = new TestConfigurationChangeListener() {
+            @Override
+            public void onConfigurationChanged(Configuration newConfiguration) {
+                mController.removeConfigurationChangeListener(this);
+            }
+        };
+        mController.addConfigurationChangeListener(badListener);
+        mController.addConfigurationChangeListener(mConfigChangeListener);
+
+        // Ensure we don't fail just because a listener was removed mid-callback
+        Configuration newConfig = getConfigurationCopy();
+        newConfig.densityDpi = 200;
+        mController.onConfigurationChanged(newConfig);
+    }
+
+    @Test
+    public void testDensityChangeCallback() {
+        mController.addConfigurationChangeListener(mConfigChangeListener);
+
+        Configuration newConfig = getConfigurationCopy();
+        newConfig.densityDpi = 200;
+        mController.onConfigurationChanged(newConfig);
+        assertTrue(mConfigChangeListener.configChanges == 1);
+        assertTrue(mConfigChangeListener.densityChanges == 1);
+        assertTrue(mConfigChangeListener.smallestWidthChanges == 0);
+        assertTrue(mConfigChangeListener.themeChanges == 0);
+        assertTrue(mConfigChangeListener.localeChanges == 0);
+    }
+
+    @Test
+    public void testFontScaleChangeCallback() {
+        mController.addConfigurationChangeListener(mConfigChangeListener);
+
+        Configuration newConfig = getConfigurationCopy();
+        newConfig.fontScale = 2;
+        mController.onConfigurationChanged(newConfig);
+        assertTrue(mConfigChangeListener.configChanges == 1);
+        assertTrue(mConfigChangeListener.densityChanges == 1);
+        assertTrue(mConfigChangeListener.smallestWidthChanges == 0);
+        assertTrue(mConfigChangeListener.themeChanges == 0);
+        assertTrue(mConfigChangeListener.localeChanges == 0);
+    }
+
+    @Test
+    public void testSmallestWidthChangeCallback() {
+        mController.addConfigurationChangeListener(mConfigChangeListener);
+
+        Configuration newConfig = getConfigurationCopy();
+        newConfig.smallestScreenWidthDp = 100;
+        mController.onConfigurationChanged(newConfig);
+        assertTrue(mConfigChangeListener.configChanges == 1);
+        assertTrue(mConfigChangeListener.densityChanges == 0);
+        assertTrue(mConfigChangeListener.smallestWidthChanges == 1);
+        assertTrue(mConfigChangeListener.themeChanges == 0);
+        assertTrue(mConfigChangeListener.localeChanges == 0);
+    }
+
+    @Test
+    public void testThemeChangeCallback() {
+        mController.addConfigurationChangeListener(mConfigChangeListener);
+
+        Configuration newConfig = getConfigurationCopy();
+        newConfig.assetsSeq++;
+        mController.onConfigurationChanged(newConfig);
+        assertTrue(mConfigChangeListener.configChanges == 1);
+        assertTrue(mConfigChangeListener.densityChanges == 0);
+        assertTrue(mConfigChangeListener.smallestWidthChanges == 0);
+        assertTrue(mConfigChangeListener.themeChanges == 1);
+        assertTrue(mConfigChangeListener.localeChanges == 0);
+    }
+
+    @Test
+    public void testNightModeChangeCallback() {
+        mController.addConfigurationChangeListener(mConfigChangeListener);
+
+        Configuration newConfig = getConfigurationCopy();
+        newConfig.uiMode = Configuration.UI_MODE_NIGHT_YES;
+        mController.onConfigurationChanged(newConfig);
+        assertTrue(mConfigChangeListener.configChanges == 1);
+        assertTrue(mConfigChangeListener.densityChanges == 0);
+        assertTrue(mConfigChangeListener.smallestWidthChanges == 0);
+        assertTrue(mConfigChangeListener.themeChanges == 1);
+        assertTrue(mConfigChangeListener.localeChanges == 0);
+    }
+
+    @Test
+    public void testLocaleChangeCallback() {
+        mController.addConfigurationChangeListener(mConfigChangeListener);
+
+        Configuration newConfig = getConfigurationCopy();
+        // Just change the locales to be different
+        if (newConfig.locale == Locale.CANADA) {
+            newConfig.locale = Locale.US;
+        } else {
+            newConfig.locale = Locale.CANADA;
+        }
+        mController.onConfigurationChanged(newConfig);
+        assertTrue(mConfigChangeListener.configChanges == 1);
+        assertTrue(mConfigChangeListener.densityChanges == 0);
+        assertTrue(mConfigChangeListener.smallestWidthChanges == 0);
+        assertTrue(mConfigChangeListener.themeChanges == 0);
+        assertTrue(mConfigChangeListener.localeChanges == 1);
+    }
+
+    private Configuration getConfigurationCopy() {
+        final Configuration c = new Configuration(InstrumentationRegistry.getInstrumentation()
+                .getTargetContext().getResources().getConfiguration());
+        // In tests this might be undefined so make sure it's valid
+        c.assetsSeq = 1;
+        return c;
+    }
+
+    private class TestConfigurationChangeListener implements ConfigurationChangeListener {
+        // Counts of number of times each of the callbacks are called
+        public int configChanges;
+        public int densityChanges;
+        public int smallestWidthChanges;
+        public int themeChanges;
+        public int localeChanges;
+
+        @Override
+        public void onConfigurationChanged(Configuration newConfiguration) {
+            configChanges++;
+        }
+
+        @Override
+        public void onDensityOrFontScaleChanged() {
+            densityChanges++;
+        }
+
+        @Override
+        public void onSmallestScreenWidthChanged() {
+            smallestWidthChanges++;
+        }
+
+        @Override
+        public void onThemeChanged() {
+            themeChanges++;
+        }
+
+        @Override
+        public void onLocaleOrLayoutDirectionChanged() {
+            localeChanges++;
+        }
+    }
+
+    private class TestKeyguardChangeListener implements KeyguardChangeListener {
+        // Counts of number of times each of the callbacks are called
+        public int visibilityChanged;
+        public boolean lastVisibility;
+        public boolean lastOccluded;
+        public boolean lastAnimatingDismiss;
+        public int dismissAnimationFinished;
+
+        @Override
+        public void onKeyguardVisibilityChanged(boolean visible, boolean occluded,
+                boolean animatingDismiss) {
+            lastVisibility = visible;
+            lastOccluded = occluded;
+            lastAnimatingDismiss = animatingDismiss;
+            visibilityChanged++;
+        }
+
+        @Override
+        public void onKeyguardDismissAnimationFinished() {
+            dismissAnimationFinished++;
+        }
+    }
+}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/tasksurfacehelper/TaskSurfaceHelperControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/tasksurfacehelper/TaskSurfaceHelperControllerTest.java
deleted file mode 100644
index d614275..0000000
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/tasksurfacehelper/TaskSurfaceHelperControllerTest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.tasksurfacehelper;
-
-import static org.mockito.Mockito.verify;
-
-import android.platform.test.annotations.Presubmit;
-import android.testing.AndroidTestingRunner;
-import android.view.SurfaceControl;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.wm.shell.ShellTaskOrganizer;
-import com.android.wm.shell.common.ShellExecutor;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-@Presubmit
-@RunWith(AndroidTestingRunner.class)
-@SmallTest
-public class TaskSurfaceHelperControllerTest {
-    private TaskSurfaceHelperController mTaskSurfaceHelperController;
-    @Mock
-    private ShellTaskOrganizer mMockTaskOrganizer;
-    @Mock
-    private ShellExecutor mMockShellExecutor;
-
-    @Before
-    public void setUp() throws Exception {
-        MockitoAnnotations.initMocks(this);
-        mTaskSurfaceHelperController = new TaskSurfaceHelperController(
-                mMockTaskOrganizer, mMockShellExecutor);
-    }
-
-    @Test
-    public void testSetGameModeForTask() {
-        mTaskSurfaceHelperController.setGameModeForTask(/*taskId*/1, /*gameMode*/3);
-        verify(mMockTaskOrganizer).setSurfaceMetadata(1, SurfaceControl.METADATA_GAME_MODE, 3);
-    }
-}
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 a0b1297..388792b 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
@@ -79,10 +79,12 @@
 import androidx.test.filters.SmallTest;
 import androidx.test.platform.app.InstrumentationRegistry;
 
+import com.android.wm.shell.ShellTestCase;
 import com.android.wm.shell.TestShellExecutor;
 import com.android.wm.shell.common.DisplayController;
 import com.android.wm.shell.common.ShellExecutor;
 import com.android.wm.shell.common.TransactionPool;
+import com.android.wm.shell.sysui.ShellInit;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -98,7 +100,7 @@
  */
 @SmallTest
 @RunWith(AndroidJUnit4.class)
-public class ShellTransitionTests {
+public class ShellTransitionTests extends ShellTestCase {
 
     private final WindowOrganizer mOrganizer = mock(WindowOrganizer.class);
     private final TransactionPool mTransactionPool = mock(TransactionPool.class);
@@ -116,6 +118,14 @@
     }
 
     @Test
+    public void instantiate_addInitCallback() {
+        ShellInit shellInit = mock(ShellInit.class);
+        final Transitions t = new Transitions(mContext, shellInit, mOrganizer, mTransactionPool,
+                createTestDisplayController(), mMainExecutor, mMainHandler, mAnimExecutor);
+        verify(shellInit, times(1)).addInitCallback(any(), eq(t));
+    }
+
+    @Test
     public void testBasicTransitionFlow() {
         Transitions transitions = createTestTransitions();
         transitions.replaceDefaultHandlerForTest(mDefaultHandler);
@@ -831,14 +841,18 @@
         } catch (RemoteException e) {
             // No remote stuff happening, so this can't be hit
         }
-        DisplayController out = new DisplayController(mContext, mockWM, mMainExecutor);
-        out.initialize();
+        ShellInit shellInit = new ShellInit(mMainExecutor);
+        DisplayController out = new DisplayController(mContext, mockWM, shellInit, mMainExecutor);
+        shellInit.init();
         return out;
     }
 
     private Transitions createTestTransitions() {
-        return new Transitions(mOrganizer, mTransactionPool, createTestDisplayController(),
-                mContext, mMainExecutor, mMainHandler, mAnimExecutor);
+        ShellInit shellInit = new ShellInit(mMainExecutor);
+        final Transitions t = new Transitions(mContext, shellInit, mOrganizer, mTransactionPool,
+                createTestDisplayController(), mMainExecutor, mMainHandler, mAnimExecutor);
+        shellInit.init();
+        return t;
     }
 //
 //    private class TestDisplayController extends DisplayController {
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/unfold/UnfoldAnimationControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/unfold/UnfoldAnimationControllerTest.java
new file mode 100644
index 0000000..81eefe2
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/unfold/UnfoldAnimationControllerTest.java
@@ -0,0 +1,367 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.unfold;
+
+import static com.android.wm.shell.unfold.UnfoldAnimationControllerTest.TestUnfoldTaskAnimator.UNSET;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.ActivityManager.RunningTaskInfo;
+import android.app.TaskInfo;
+import android.testing.AndroidTestingRunner;
+import android.view.SurfaceControl;
+import android.view.SurfaceControl.Transaction;
+
+import com.android.wm.shell.ShellTestCase;
+import com.android.wm.shell.TestRunningTaskInfoBuilder;
+import com.android.wm.shell.TestShellExecutor;
+import com.android.wm.shell.common.TransactionPool;
+import com.android.wm.shell.sysui.ShellInit;
+import com.android.wm.shell.unfold.animation.UnfoldTaskAnimator;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.concurrent.Executor;
+import java.util.function.Predicate;
+
+/**
+ * Tests for {@link UnfoldAnimationController}.
+ *
+ * Build/Install/Run:
+ * atest WMShellUnitTests:UnfoldAnimationControllerTest
+ */
+@RunWith(AndroidTestingRunner.class)
+public class UnfoldAnimationControllerTest extends ShellTestCase {
+
+    @Mock
+    private TransactionPool mTransactionPool;
+    @Mock
+    private UnfoldTransitionHandler mUnfoldTransitionHandler;
+    @Mock
+    private ShellInit mShellInit;
+    @Mock
+    private SurfaceControl mLeash;
+
+    private UnfoldAnimationController mUnfoldAnimationController;
+
+    private final TestShellUnfoldProgressProvider mProgressProvider =
+            new TestShellUnfoldProgressProvider();
+    private final TestShellExecutor mShellExecutor = new TestShellExecutor();
+
+    private final TestUnfoldTaskAnimator mTaskAnimator1 = new TestUnfoldTaskAnimator();
+    private final TestUnfoldTaskAnimator mTaskAnimator2 = new TestUnfoldTaskAnimator();
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        when(mTransactionPool.acquire()).thenReturn(mock(SurfaceControl.Transaction.class));
+
+        final List<UnfoldTaskAnimator> animators = new ArrayList<>();
+        animators.add(mTaskAnimator1);
+        animators.add(mTaskAnimator2);
+        mUnfoldAnimationController = new UnfoldAnimationController(
+                mShellInit,
+                mTransactionPool,
+                mProgressProvider,
+                animators,
+                () -> Optional.of(mUnfoldTransitionHandler),
+                mShellExecutor
+        );
+    }
+
+    @Test
+    public void instantiateController_addInitCallback() {
+        verify(mShellInit, times(1)).addInitCallback(any(), any());
+    }
+
+    @Test
+    public void testAppearedMatchingTask_appliesUnfoldProgress() {
+        mTaskAnimator1.setTaskMatcher((info) -> info.getWindowingMode() == 2);
+        RunningTaskInfo taskInfo = new TestRunningTaskInfoBuilder()
+                .setWindowingMode(2).build();
+
+        mUnfoldAnimationController.onTaskAppeared(taskInfo, mLeash);
+
+        mUnfoldAnimationController.onStateChangeProgress(0.5f);
+        assertThat(mTaskAnimator1.mLastAppliedProgress).isEqualTo(0.5f);
+    }
+
+    @Test
+    public void testAppearedMatchingTaskTwoDifferentAnimators_appliesUnfoldProgressToBoth() {
+        mTaskAnimator1.setTaskMatcher((info) -> info.getWindowingMode() == 1);
+        mTaskAnimator2.setTaskMatcher((info) -> info.getWindowingMode() == 2);
+        RunningTaskInfo taskInfo1 = new TestRunningTaskInfoBuilder()
+                .setWindowingMode(1).build();
+        RunningTaskInfo taskInfo2 = new TestRunningTaskInfoBuilder()
+                .setWindowingMode(2).build();
+
+        mUnfoldAnimationController.onTaskAppeared(taskInfo1, mLeash);
+        mUnfoldAnimationController.onTaskAppeared(taskInfo2, mLeash);
+
+        mUnfoldAnimationController.onStateChangeProgress(0.5f);
+        assertThat(mTaskAnimator1.mLastAppliedProgress).isEqualTo(0.5f);
+        assertThat(mTaskAnimator2.mLastAppliedProgress).isEqualTo(0.5f);
+    }
+
+    @Test
+    public void testAppearedNonMatchingTask_doesNotApplyUnfoldProgress() {
+        mTaskAnimator1.setTaskMatcher((info) -> info.getWindowingMode() == 2);
+        RunningTaskInfo taskInfo = new TestRunningTaskInfoBuilder()
+                .setWindowingMode(0).build();
+
+        mUnfoldAnimationController.onTaskAppeared(taskInfo, mLeash);
+
+        mUnfoldAnimationController.onStateChangeProgress(0.5f);
+        assertThat(mTaskAnimator1.mLastAppliedProgress).isEqualTo(UNSET);
+    }
+
+    @Test
+    public void testAppearedAndChangedToNonMatchingTask_doesNotApplyUnfoldProgress() {
+        mTaskAnimator1.setTaskMatcher((info) -> info.getWindowingMode() == 2);
+        RunningTaskInfo taskInfo = new TestRunningTaskInfoBuilder()
+                .setWindowingMode(2).build();
+
+        mUnfoldAnimationController.onTaskAppeared(taskInfo, mLeash);
+        taskInfo.configuration.windowConfiguration.setWindowingMode(0);
+        mUnfoldAnimationController.onTaskInfoChanged(taskInfo);
+
+        mUnfoldAnimationController.onStateChangeProgress(0.5f);
+        assertThat(mTaskAnimator1.mLastAppliedProgress).isEqualTo(UNSET);
+    }
+
+    @Test
+    public void testAppearedAndChangedToNonMatchingTaskAndBack_appliesUnfoldProgress() {
+        mTaskAnimator1.setTaskMatcher((info) -> info.getWindowingMode() == 2);
+        RunningTaskInfo taskInfo = new TestRunningTaskInfoBuilder()
+                .setWindowingMode(2).build();
+
+        mUnfoldAnimationController.onTaskAppeared(taskInfo, mLeash);
+        taskInfo.configuration.windowConfiguration.setWindowingMode(0);
+        mUnfoldAnimationController.onTaskInfoChanged(taskInfo);
+        taskInfo.configuration.windowConfiguration.setWindowingMode(2);
+        mUnfoldAnimationController.onTaskInfoChanged(taskInfo);
+
+        mUnfoldAnimationController.onStateChangeProgress(0.5f);
+        assertThat(mTaskAnimator1.mLastAppliedProgress).isEqualTo(0.5f);
+    }
+
+    @Test
+    public void testAppearedNonMatchingTaskAndChangedToMatching_appliesUnfoldProgress() {
+        mTaskAnimator1.setTaskMatcher((info) -> info.getWindowingMode() == 2);
+        RunningTaskInfo taskInfo = new TestRunningTaskInfoBuilder()
+                .setWindowingMode(0).build();
+
+        mUnfoldAnimationController.onTaskAppeared(taskInfo, mLeash);
+        taskInfo.configuration.windowConfiguration.setWindowingMode(2);
+        mUnfoldAnimationController.onTaskInfoChanged(taskInfo);
+
+        mUnfoldAnimationController.onStateChangeProgress(0.5f);
+        assertThat(mTaskAnimator1.mLastAppliedProgress).isEqualTo(0.5f);
+    }
+
+    @Test
+    public void testAppearedMatchingTaskAndChanged_appliesUnfoldProgress() {
+        mTaskAnimator1.setTaskMatcher((info) -> info.getWindowingMode() == 2);
+        RunningTaskInfo taskInfo = new TestRunningTaskInfoBuilder()
+                .setWindowingMode(2).build();
+
+        mUnfoldAnimationController.onTaskAppeared(taskInfo, mLeash);
+        mUnfoldAnimationController.onTaskInfoChanged(taskInfo);
+
+        mUnfoldAnimationController.onStateChangeProgress(0.5f);
+        assertThat(mTaskAnimator1.mLastAppliedProgress).isEqualTo(0.5f);
+    }
+
+    @Test
+    public void testShellTransitionRunning_doesNotApplyUnfoldProgress() {
+        when(mUnfoldTransitionHandler.willHandleTransition()).thenReturn(true);
+        mTaskAnimator1.setTaskMatcher((info) -> info.getWindowingMode() == 2);
+        RunningTaskInfo taskInfo = new TestRunningTaskInfoBuilder()
+                .setWindowingMode(2).build();
+
+        mUnfoldAnimationController.onTaskAppeared(taskInfo, mLeash);
+
+        mUnfoldAnimationController.onStateChangeProgress(0.5f);
+        assertThat(mTaskAnimator1.mLastAppliedProgress).isEqualTo(UNSET);
+    }
+
+    @Test
+    public void testApplicableTaskDisappeared_resetsSurface() {
+        mTaskAnimator1.setTaskMatcher((info) -> info.getWindowingMode() == 0);
+        RunningTaskInfo taskInfo = new TestRunningTaskInfoBuilder()
+                .setWindowingMode(0).build();
+        mUnfoldAnimationController.onTaskAppeared(taskInfo, mLeash);
+        assertThat(mTaskAnimator1.mResetTasks).doesNotContain(taskInfo.taskId);
+
+        mUnfoldAnimationController.onTaskVanished(taskInfo);
+
+        assertThat(mTaskAnimator1.mResetTasks).contains(taskInfo.taskId);
+    }
+
+    @Test
+    public void testApplicablePinnedTaskDisappeared_doesNotResetSurface() {
+        mTaskAnimator1.setTaskMatcher((info) -> info.getWindowingMode() == 2);
+        RunningTaskInfo taskInfo = new TestRunningTaskInfoBuilder()
+                .setWindowingMode(2).build();
+        mUnfoldAnimationController.onTaskAppeared(taskInfo, mLeash);
+        assertThat(mTaskAnimator1.mResetTasks).doesNotContain(taskInfo.taskId);
+
+        mUnfoldAnimationController.onTaskVanished(taskInfo);
+
+        assertThat(mTaskAnimator1.mResetTasks).doesNotContain(taskInfo.taskId);
+    }
+
+    @Test
+    public void testNonApplicableTaskAppearedDisappeared_doesNotResetSurface() {
+        mTaskAnimator1.setTaskMatcher((info) -> info.getWindowingMode() == 2);
+        RunningTaskInfo taskInfo = new TestRunningTaskInfoBuilder()
+                .setWindowingMode(0).build();
+
+        mUnfoldAnimationController.onTaskAppeared(taskInfo, mLeash);
+        mUnfoldAnimationController.onTaskVanished(taskInfo);
+
+        assertThat(mTaskAnimator1.mResetTasks).doesNotContain(taskInfo.taskId);
+    }
+
+    @Test
+    public void testInit_initsAndStartsAnimators() {
+        mUnfoldAnimationController.onInit();
+        mShellExecutor.flushAll();
+
+        assertThat(mTaskAnimator1.mInitialized).isTrue();
+        assertThat(mTaskAnimator1.mStarted).isTrue();
+    }
+
+    private static class TestShellUnfoldProgressProvider implements ShellUnfoldProgressProvider,
+            ShellUnfoldProgressProvider.UnfoldListener {
+
+        private final List<UnfoldListener> mListeners = new ArrayList<>();
+
+        @Override
+        public void addListener(Executor executor, UnfoldListener listener) {
+            mListeners.add(listener);
+        }
+
+        @Override
+        public void onStateChangeStarted() {
+            mListeners.forEach(UnfoldListener::onStateChangeStarted);
+        }
+
+        @Override
+        public void onStateChangeProgress(float progress) {
+            mListeners.forEach(unfoldListener -> unfoldListener.onStateChangeProgress(progress));
+        }
+
+        @Override
+        public void onStateChangeFinished() {
+            mListeners.forEach(UnfoldListener::onStateChangeFinished);
+        }
+    }
+
+    public static class TestUnfoldTaskAnimator implements UnfoldTaskAnimator {
+
+        public static final float UNSET = -1f;
+        private Predicate<TaskInfo> mTaskMatcher = (info) -> false;
+
+        Map<Integer, TaskInfo> mTasksMap = new HashMap<>();
+        Set<Integer> mResetTasks = new HashSet<>();
+
+        boolean mInitialized = false;
+        boolean mStarted = false;
+        float mLastAppliedProgress = UNSET;
+
+        @Override
+        public void init() {
+            mInitialized = true;
+        }
+
+        @Override
+        public void start() {
+            mStarted = true;
+        }
+
+        @Override
+        public void stop() {
+            mStarted = false;
+        }
+
+        @Override
+        public boolean isApplicableTask(TaskInfo taskInfo) {
+            return mTaskMatcher.test(taskInfo);
+        }
+
+        @Override
+        public void applyAnimationProgress(float progress, Transaction transaction) {
+            mLastAppliedProgress = progress;
+        }
+
+        public void setTaskMatcher(Predicate<TaskInfo> taskMatcher) {
+            mTaskMatcher = taskMatcher;
+        }
+
+        @Override
+        public void onTaskAppeared(TaskInfo taskInfo, SurfaceControl leash) {
+            mTasksMap.put(taskInfo.taskId, taskInfo);
+        }
+
+        @Override
+        public void onTaskVanished(TaskInfo taskInfo) {
+            mTasksMap.remove(taskInfo.taskId);
+        }
+
+        @Override
+        public void onTaskChanged(TaskInfo taskInfo) {
+            mTasksMap.put(taskInfo.taskId, taskInfo);
+        }
+
+        @Override
+        public void resetSurface(TaskInfo taskInfo, Transaction transaction) {
+            mResetTasks.add(taskInfo.taskId);
+        }
+
+        @Override
+        public void resetAllSurfaces(Transaction transaction) {
+            mTasksMap.values().forEach((t) -> mResetTasks.add(t.taskId));
+        }
+
+        @Override
+        public boolean hasActiveTasks() {
+            return mTasksMap.size() > 0;
+        }
+
+        public List<TaskInfo> getCurrentTasks() {
+            return new ArrayList<>(mTasksMap.values());
+        }
+    }
+}
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
new file mode 100644
index 0000000..226843ec
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java
@@ -0,0 +1,383 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.windowdecor;
+
+import static com.android.wm.shell.MockSurfaceControlHelper.createMockSurfaceControlBuilder;
+import static com.android.wm.shell.MockSurfaceControlHelper.createMockSurfaceControlTransaction;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyBoolean;
+import static org.mockito.Mockito.argThat;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.same;
+import static org.mockito.Mockito.verify;
+
+import android.app.ActivityManager;
+import android.content.Context;
+import android.graphics.Color;
+import android.graphics.Point;
+import android.graphics.Rect;
+import android.testing.AndroidTestingRunner;
+import android.util.DisplayMetrics;
+import android.view.Display;
+import android.view.InsetsState;
+import android.view.SurfaceControl;
+import android.view.SurfaceControlViewHost;
+import android.view.View;
+import android.view.ViewRootImpl;
+import android.view.WindowManager.LayoutParams;
+import android.window.WindowContainerTransaction;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.wm.shell.ShellTaskOrganizer;
+import com.android.wm.shell.ShellTestCase;
+import com.android.wm.shell.TestRunningTaskInfoBuilder;
+import com.android.wm.shell.common.DisplayController;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Supplier;
+
+/**
+ * Tests for {@link WindowDecoration}.
+ *
+ * Build/Install/Run:
+ * atest WMShellUnitTests:WindowDecorationTests
+ */
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+public class WindowDecorationTests extends ShellTestCase {
+    private static final int CAPTION_HEIGHT_DP = 32;
+    private static final int SHADOW_RADIUS_DP = 5;
+    private static final Rect TASK_BOUNDS = new Rect(100, 300, 400, 400);
+    private static final Point TASK_POSITION_IN_PARENT = new Point(40, 60);
+
+    private final Rect mOutsetsDp = new Rect();
+    private final WindowDecoration.RelayoutResult<TestView> mRelayoutResult =
+            new WindowDecoration.RelayoutResult<>();
+
+    @Mock
+    private DisplayController mMockDisplayController;
+    @Mock
+    private ShellTaskOrganizer mMockShellTaskOrganizer;
+    @Mock
+    private WindowDecoration.SurfaceControlViewHostFactory mMockSurfaceControlViewHostFactory;
+    @Mock
+    private SurfaceControlViewHost mMockSurfaceControlViewHost;
+    @Mock
+    private TestView mMockView;
+    @Mock
+    private WindowContainerTransaction mMockWindowContainerTransaction;
+
+    private final List<SurfaceControl.Builder> mMockSurfaceControlBuilders = new ArrayList<>();
+    private SurfaceControl.Transaction mMockSurfaceControlStartT;
+    private SurfaceControl.Transaction mMockSurfaceControlFinishT;
+
+    @Before
+    public void setUp() {
+        mMockSurfaceControlStartT = createMockSurfaceControlTransaction();
+        mMockSurfaceControlFinishT = createMockSurfaceControlTransaction();
+
+        doReturn(mMockSurfaceControlViewHost).when(mMockSurfaceControlViewHostFactory)
+                .create(any(), any(), any(), anyBoolean());
+    }
+
+    @Test
+    public void testLayoutResultCalculation_invisibleTask() {
+        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 taskBackgroundSurface = mock(SurfaceControl.class);
+        final SurfaceControl.Builder taskBackgroundSurfaceBuilder =
+                createMockSurfaceControlBuilder(taskBackgroundSurface);
+        mMockSurfaceControlBuilders.add(taskBackgroundSurfaceBuilder);
+
+        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(false)
+                .build();
+        taskInfo.isFocused = false;
+        // Density is 2. Outsets are (20, 40, 60, 80) px. Shadow radius is 10px. Caption height is
+        // 64px.
+        taskInfo.configuration.densityDpi = DisplayMetrics.DENSITY_DEFAULT * 2;
+        mOutsetsDp.set(10, 20, 30, 40);
+
+        final SurfaceControl taskSurface = mock(SurfaceControl.class);
+        final TestWindowDecoration windowDecor = createWindowDecoration(taskInfo, taskSurface);
+
+        windowDecor.relayout(taskInfo);
+
+        verify(decorContainerSurfaceBuilder, never()).build();
+        verify(taskBackgroundSurfaceBuilder, never()).build();
+        verify(mMockSurfaceControlViewHostFactory, never())
+                .create(any(), any(), any(), anyBoolean());
+
+        verify(mMockSurfaceControlFinishT).hide(taskSurface);
+
+        assertNull(mRelayoutResult.mRootView);
+    }
+
+    @Test
+    public void testLayoutResultCalculation_visibleFocusedTask() {
+        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 taskBackgroundSurface = mock(SurfaceControl.class);
+        final SurfaceControl.Builder taskBackgroundSurfaceBuilder =
+                createMockSurfaceControlBuilder(taskBackgroundSurface);
+        mMockSurfaceControlBuilders.add(taskBackgroundSurfaceBuilder);
+
+        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;
+        // Density is 2. Outsets are (20, 40, 60, 80) px. Shadow radius is 10px. Caption height is
+        // 64px.
+        taskInfo.configuration.densityDpi = DisplayMetrics.DENSITY_DEFAULT * 2;
+        mOutsetsDp.set(10, 20, 30, 40);
+
+        final SurfaceControl taskSurface = mock(SurfaceControl.class);
+        final TestWindowDecoration windowDecor = createWindowDecoration(taskInfo, taskSurface);
+
+        windowDecor.relayout(taskInfo);
+
+        verify(decorContainerSurfaceBuilder).setParent(taskSurface);
+        verify(decorContainerSurfaceBuilder).setContainerLayer();
+        verify(mMockSurfaceControlStartT).setTrustedOverlay(decorContainerSurface, true);
+        verify(mMockSurfaceControlStartT).setPosition(decorContainerSurface, -20, -40);
+        verify(mMockSurfaceControlStartT).setWindowCrop(decorContainerSurface, 380, 220);
+
+        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, -1);
+        verify(mMockSurfaceControlStartT).show(taskBackgroundSurface);
+
+        verify(mMockSurfaceControlViewHostFactory)
+                .create(any(), eq(defaultDisplay), any(), anyBoolean());
+        verify(mMockSurfaceControlViewHost)
+                .setView(same(mMockView),
+                        argThat(lp -> lp.height == 64
+                                && lp.width == 300
+                                && (lp.flags & LayoutParams.FLAG_NOT_FOCUSABLE) != 0));
+        if (ViewRootImpl.CAPTION_ON_SHELL) {
+            verify(mMockView).setTaskFocusState(true);
+            verify(mMockWindowContainerTransaction)
+                    .addRectInsetsProvider(taskInfo.token,
+                            new Rect(100, 300, 400, 364),
+                            new int[] { InsetsState.ITYPE_CAPTION_BAR });
+        }
+
+        verify(mMockSurfaceControlFinishT)
+                .setPosition(taskSurface, TASK_POSITION_IN_PARENT.x, TASK_POSITION_IN_PARENT.y);
+        verify(mMockSurfaceControlFinishT)
+                .setCrop(taskSurface, new Rect(-20, -40, 360, 180));
+        verify(mMockSurfaceControlStartT)
+                .show(taskSurface);
+
+        assertEquals(380, mRelayoutResult.mWidth);
+        assertEquals(220, mRelayoutResult.mHeight);
+        assertEquals(2, mRelayoutResult.mDensity, 0.f);
+    }
+
+    @Test
+    public void testLayoutResultCalculation_visibleFocusedTaskToInvisible() {
+        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 taskBackgroundSurface = mock(SurfaceControl.class);
+        final SurfaceControl.Builder taskBackgroundSurfaceBuilder =
+                createMockSurfaceControlBuilder(taskBackgroundSurface);
+        mMockSurfaceControlBuilders.add(taskBackgroundSurfaceBuilder);
+
+        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;
+        // Density is 2. Outsets are (20, 40, 60, 80) px. Shadow radius is 10px. Caption height is
+        // 64px.
+        taskInfo.configuration.densityDpi = DisplayMetrics.DENSITY_DEFAULT * 2;
+        mOutsetsDp.set(10, 20, 30, 40);
+
+        final SurfaceControl taskSurface = mock(SurfaceControl.class);
+        final TestWindowDecoration windowDecor = createWindowDecoration(taskInfo, taskSurface);
+
+        windowDecor.relayout(taskInfo);
+
+        verify(mMockSurfaceControlViewHost, never()).release();
+        verify(decorContainerSurface, never()).release();
+        verify(taskBackgroundSurface, never()).release();
+        verify(mMockWindowContainerTransaction, never())
+                .removeInsetsProvider(eq(taskInfo.token), any());
+
+        taskInfo.isVisible = false;
+        windowDecor.relayout(taskInfo);
+
+        verify(mMockSurfaceControlViewHost).release();
+        verify(decorContainerSurface).release();
+        verify(taskBackgroundSurface).release();
+        verify(mMockWindowContainerTransaction).removeInsetsProvider(eq(taskInfo.token), any());
+    }
+
+    @Test
+    public void testNotCrashWhenDisplayAppearsAfterTask() {
+        doReturn(mock(Display.class)).when(mMockDisplayController)
+                .getDisplay(Display.DEFAULT_DISPLAY);
+
+        final int displayId = Display.DEFAULT_DISPLAY + 1;
+        final ActivityManager.TaskDescription.Builder taskDescriptionBuilder =
+                new ActivityManager.TaskDescription.Builder()
+                        .setBackgroundColor(Color.BLACK);
+        final ActivityManager.RunningTaskInfo taskInfo = new TestRunningTaskInfoBuilder()
+                .setDisplayId(displayId)
+                .setTaskDescriptionBuilder(taskDescriptionBuilder)
+                .setVisible(true)
+                .build();
+
+        final TestWindowDecoration windowDecor =
+                createWindowDecoration(taskInfo, new SurfaceControl());
+        windowDecor.relayout(taskInfo);
+
+        // It shouldn't show the window decoration when it can't obtain the display instance.
+        assertThat(mRelayoutResult.mRootView).isNull();
+
+        final ArgumentCaptor<DisplayController.OnDisplaysChangedListener> listenerArgumentCaptor =
+                ArgumentCaptor.forClass(DisplayController.OnDisplaysChangedListener.class);
+        verify(mMockDisplayController).addDisplayWindowListener(listenerArgumentCaptor.capture());
+        final DisplayController.OnDisplaysChangedListener listener =
+                listenerArgumentCaptor.getValue();
+
+        // Adding an irrelevant display shouldn't change the result.
+        listener.onDisplayAdded(Display.DEFAULT_DISPLAY);
+        assertThat(mRelayoutResult.mRootView).isNull();
+
+        final Display mockDisplay = mock(Display.class);
+        doReturn(mockDisplay).when(mMockDisplayController).getDisplay(displayId);
+
+        listener.onDisplayAdded(displayId);
+
+        // The listener should be removed when the display shows up.
+        verify(mMockDisplayController).removeDisplayWindowListener(same(listener));
+
+        assertThat(mRelayoutResult.mRootView).isSameInstanceAs(mMockView);
+        verify(mMockSurfaceControlViewHostFactory)
+                .create(any(), eq(mockDisplay), any(), anyBoolean());
+        verify(mMockSurfaceControlViewHost).setView(same(mMockView), any());
+    }
+
+    private TestWindowDecoration createWindowDecoration(
+            ActivityManager.RunningTaskInfo taskInfo, SurfaceControl testSurface) {
+        return new TestWindowDecoration(mContext, mMockDisplayController, mMockShellTaskOrganizer,
+                taskInfo, testSurface, new MockSurfaceControlBuilderSupplier(),
+                () -> mMockWindowContainerTransaction, mMockSurfaceControlViewHostFactory);
+    }
+
+    private class MockSurfaceControlBuilderSupplier implements Supplier<SurfaceControl.Builder> {
+        private int mNumOfCalls = 0;
+
+        @Override
+        public SurfaceControl.Builder get() {
+            final SurfaceControl.Builder builder =
+                    mNumOfCalls < mMockSurfaceControlBuilders.size()
+                            ? mMockSurfaceControlBuilders.get(mNumOfCalls)
+                            : createMockSurfaceControlBuilder(mock(SurfaceControl.class));
+            ++mNumOfCalls;
+            return builder;
+        }
+    }
+
+    private static class TestView extends View implements TaskFocusStateConsumer {
+        private TestView(Context context) {
+            super(context);
+        }
+
+        @Override
+        public void setTaskFocusState(boolean focused) {}
+    }
+
+    private class TestWindowDecoration extends WindowDecoration<TestView> {
+        TestWindowDecoration(Context context, DisplayController displayController,
+                ShellTaskOrganizer taskOrganizer, ActivityManager.RunningTaskInfo taskInfo,
+                SurfaceControl taskSurface,
+                Supplier<SurfaceControl.Builder> surfaceControlBuilderSupplier,
+                Supplier<WindowContainerTransaction> windowContainerTransactionSupplier,
+                SurfaceControlViewHostFactory surfaceControlViewHostFactory) {
+            super(context, displayController, taskOrganizer, taskInfo, taskSurface,
+                    surfaceControlBuilderSupplier, windowContainerTransactionSupplier,
+                    surfaceControlViewHostFactory);
+        }
+
+        @Override
+        void relayout(ActivityManager.RunningTaskInfo taskInfo) {
+            relayout(null /* taskInfo */, 0 /* layoutResId */, mMockView, CAPTION_HEIGHT_DP,
+                    mOutsetsDp, SHADOW_RADIUS_DP, mMockSurfaceControlStartT,
+                    mMockSurfaceControlFinishT, mMockWindowContainerTransaction, mRelayoutResult);
+        }
+    }
+}
diff --git a/libs/hwui/JankTracker.cpp b/libs/hwui/JankTracker.cpp
index 1e5be6c..4b0ddd2 100644
--- a/libs/hwui/JankTracker.cpp
+++ b/libs/hwui/JankTracker.cpp
@@ -201,8 +201,9 @@
     // If we are in triple buffering, we have enough buffers in queue to sustain a single frame
     // drop without jank, so adjust the frame interval to the deadline.
     if (isTripleBuffered) {
-        deadline += frameInterval;
-        frame.set(FrameInfoIndex::FrameDeadline) += frameInterval;
+        int64_t originalDeadlineDuration = deadline - frame[FrameInfoIndex::IntendedVsync];
+        deadline = mNextFrameStartUnstuffed + originalDeadlineDuration;
+        frame.set(FrameInfoIndex::FrameDeadline) = deadline;
     }
 
     // If we hit the deadline, cool!
diff --git a/libs/hwui/Readback.cpp b/libs/hwui/Readback.cpp
index 4cce87a..a3ba88e 100644
--- a/libs/hwui/Readback.cpp
+++ b/libs/hwui/Readback.cpp
@@ -90,11 +90,36 @@
 
     SkRect srcRect = inSrcRect.toSkRect();
 
-    SkRect imageSrcRect =
-            SkRect::MakeLTRB(cropRect.left, cropRect.top, cropRect.right, cropRect.bottom);
-    if (imageSrcRect.isEmpty()) {
-        imageSrcRect = SkRect::MakeIWH(description.width, description.height);
+    SkRect imageSrcRect = SkRect::MakeIWH(description.width, description.height);
+    SkISize imageWH = SkISize::Make(description.width, description.height);
+    if (cropRect.left < cropRect.right && cropRect.top < cropRect.bottom) {
+        imageSrcRect =
+                SkRect::MakeLTRB(cropRect.left, cropRect.top, cropRect.right, cropRect.bottom);
+        imageWH = SkISize::Make(cropRect.right - cropRect.left, cropRect.bottom - cropRect.top);
+
+        // Chroma channels of YUV420 images are subsampled we may need to shrink the crop region by
+        // a whole texel on each side. Since skia still adds its own 0.5 inset, we apply an
+        // additional 0.5 inset. See GLConsumer::computeTransformMatrix for details.
+        float shrinkAmount = 0.0f;
+        switch (description.format) {
+            // Use HAL formats since some AHB formats are only available in vndk
+            case HAL_PIXEL_FORMAT_YCBCR_420_888:
+            case HAL_PIXEL_FORMAT_YV12:
+            case HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED:
+                shrinkAmount = 0.5f;
+                break;
+            default:
+                break;
+        }
+
+        // Shrink the crop if it has more than 1-px and differs from the buffer size.
+        if (imageWH.width() > 1 && imageWH.width() < (int32_t)description.width)
+            imageSrcRect = imageSrcRect.makeInset(shrinkAmount, 0);
+
+        if (imageWH.height() > 1 && imageWH.height() < (int32_t)description.height)
+            imageSrcRect = imageSrcRect.makeInset(0, shrinkAmount);
     }
+
     ALOGV("imageSrcRect = " RECT_STRING, SK_RECT_ARGS(imageSrcRect));
 
     // Represents the "logical" width/height of the texture. That is, the dimensions of the buffer
@@ -153,7 +178,7 @@
      */
 
     SkMatrix m;
-    const SkRect imageDstRect = SkRect::MakeIWH(imageSrcRect.width(), imageSrcRect.height());
+    const SkRect imageDstRect = SkRect::Make(imageWH);
     const float px = imageDstRect.centerX();
     const float py = imageDstRect.centerY();
     if (windowTransform & NATIVE_WINDOW_TRANSFORM_FLIP_H) {
diff --git a/libs/hwui/tests/unit/JankTrackerTests.cpp b/libs/hwui/tests/unit/JankTrackerTests.cpp
index 5b397de..b67e419 100644
--- a/libs/hwui/tests/unit/JankTrackerTests.cpp
+++ b/libs/hwui/tests/unit/JankTrackerTests.cpp
@@ -195,3 +195,68 @@
     ASSERT_EQ(3, container.get()->totalFrameCount());
     ASSERT_EQ(2, container.get()->jankFrameCount());
 }
+
+TEST(JankTracker, doubleStuffedTwoIntervalBehind) {
+    std::mutex mutex;
+    ProfileDataContainer container(mutex);
+    JankTracker jankTracker(&container);
+    std::unique_ptr<FrameMetricsReporter> reporter = std::make_unique<FrameMetricsReporter>();
+
+    uint64_t frameNumber = 0;
+    uint32_t surfaceId = 0;
+
+    // First frame janks
+    FrameInfo* info = jankTracker.startFrame();
+    info->set(FrameInfoIndex::IntendedVsync) = 100_ms;
+    info->set(FrameInfoIndex::Vsync) = 101_ms;
+    info->set(FrameInfoIndex::SwapBuffersCompleted) = 107_ms;
+    info->set(FrameInfoIndex::GpuCompleted) = 117_ms;
+    info->set(FrameInfoIndex::FrameCompleted) = 117_ms;
+    info->set(FrameInfoIndex::FrameInterval) = 16_ms;
+    info->set(FrameInfoIndex::FrameDeadline) = 116_ms;
+    jankTracker.finishFrame(*info, reporter, frameNumber, surfaceId);
+
+    ASSERT_EQ(1, container.get()->jankFrameCount());
+
+    // Second frame is long, but doesn't jank because double-stuffed.
+    // Second frame duration is between 1*interval ~ 2*interval
+    info = jankTracker.startFrame();
+    info->set(FrameInfoIndex::IntendedVsync) = 116_ms;
+    info->set(FrameInfoIndex::Vsync) = 116_ms;
+    info->set(FrameInfoIndex::SwapBuffersCompleted) = 129_ms;
+    info->set(FrameInfoIndex::GpuCompleted) = 133_ms;
+    info->set(FrameInfoIndex::FrameCompleted) = 133_ms;
+    info->set(FrameInfoIndex::FrameInterval) = 16_ms;
+    info->set(FrameInfoIndex::FrameDeadline) = 132_ms;
+    jankTracker.finishFrame(*info, reporter, frameNumber, surfaceId);
+
+    ASSERT_EQ(1, container.get()->jankFrameCount());
+
+    // Third frame is even longer, cause a jank
+    // Third frame duration is between 2*interval ~ 3*interval
+    info = jankTracker.startFrame();
+    info->set(FrameInfoIndex::IntendedVsync) = 132_ms;
+    info->set(FrameInfoIndex::Vsync) = 132_ms;
+    info->set(FrameInfoIndex::SwapBuffersCompleted) = 160_ms;
+    info->set(FrameInfoIndex::GpuCompleted) = 165_ms;
+    info->set(FrameInfoIndex::FrameCompleted) = 165_ms;
+    info->set(FrameInfoIndex::FrameInterval) = 16_ms;
+    info->set(FrameInfoIndex::FrameDeadline) = 148_ms;
+    jankTracker.finishFrame(*info, reporter, frameNumber, surfaceId);
+
+    ASSERT_EQ(2, container.get()->jankFrameCount());
+
+    // 4th frame is double-stuffed with a 2 * interval latency
+    // 4th frame duration is between 2*interval ~ 3*interval
+    info = jankTracker.startFrame();
+    info->set(FrameInfoIndex::IntendedVsync) = 148_ms;
+    info->set(FrameInfoIndex::Vsync) = 148_ms;
+    info->set(FrameInfoIndex::SwapBuffersCompleted) = 170_ms;
+    info->set(FrameInfoIndex::GpuCompleted) = 181_ms;
+    info->set(FrameInfoIndex::FrameCompleted) = 181_ms;
+    info->set(FrameInfoIndex::FrameInterval) = 16_ms;
+    info->set(FrameInfoIndex::FrameDeadline) = 164_ms;
+    jankTracker.finishFrame(*info, reporter, frameNumber, surfaceId);
+
+    ASSERT_EQ(2, container.get()->jankFrameCount());
+}
diff --git a/media/TEST_MAPPING b/media/TEST_MAPPING
index 4ec4767..05fbc7a 100644
--- a/media/TEST_MAPPING
+++ b/media/TEST_MAPPING
@@ -22,11 +22,15 @@
         }
       ],
       "file_patterns": ["(?i)drm|crypto"]
-    }
-  ],
-  "imports": [
+    },
     {
-      "path": "frameworks/av/drm/mediadrm/plugins"
+      "name": "CtsMediaDrmFrameworkTestCases",
+      "options" : [
+        {
+          "include-annotation": "android.platform.test.annotations.Presubmit"
+        }
+      ],
+      "file_patterns": ["(?i)drm|crypto"]
     }
   ]
 }
diff --git a/media/java/android/media/AudioDeviceVolumeManager.java b/media/java/android/media/AudioDeviceVolumeManager.java
index fe58cca..c708876 100644
--- a/media/java/android/media/AudioDeviceVolumeManager.java
+++ b/media/java/android/media/AudioDeviceVolumeManager.java
@@ -61,10 +61,12 @@
 
     private static IAudioService sService;
 
-    private final String mPackageName;
+    private final @NonNull String mPackageName;
+    private final @Nullable String mAttributionTag;
 
     public AudioDeviceVolumeManager(Context context) {
         mPackageName = context.getApplicationContext().getOpPackageName();
+        mAttributionTag = context.getApplicationContext().getAttributionTag();
     }
 
     /**
@@ -287,7 +289,6 @@
      * @hide
      * Removes a previously added listener of changes to device volume behavior.
      */
-
     @RequiresPermission(anyOf = {
             android.Manifest.permission.MODIFY_AUDIO_ROUTING,
             android.Manifest.permission.QUERY_AUDIO_STATE
@@ -299,6 +300,21 @@
     }
 
     /**
+     * @hide
+     * Sets the volume on the given audio device
+     * @param vi the volume information, only stream-based volumes are supported
+     * @param ada the device for which volume is to be modified
+     */
+    @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
+    public void setDeviceVolume(@NonNull VolumeInfo vi, @NonNull AudioDeviceAttributes ada) {
+        try {
+            getService().setDeviceVolume(vi, ada, mPackageName, mAttributionTag);
+        } catch (RemoteException e) {
+            e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
      * Return human-readable name for volume behavior
      * @param behavior one of the volume behaviors defined in AudioManager
      * @return a string for the given behavior
diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java
index 955bfcc..444366a 100644
--- a/media/java/android/media/AudioSystem.java
+++ b/media/java/android/media/AudioSystem.java
@@ -65,6 +65,8 @@
 
     private static final String TAG = "AudioSystem";
 
+    private static final int SOURCE_CODEC_TYPE_OPUS = 6; // TODO remove in U
+
     // private constructor to prevent instantiating AudioSystem
     private AudioSystem() {
         throw new UnsupportedOperationException("Trying to instantiate AudioSystem");
@@ -243,6 +245,8 @@
     public static final int AUDIO_FORMAT_LDAC           = 0x23000000;
     /** @hide */
     public static final int AUDIO_FORMAT_LC3            = 0x2B000000;
+    /** @hide */
+    public static final int AUDIO_FORMAT_OPUS           = 0x08000000;
 
 
     /** @hide */
@@ -254,7 +258,9 @@
             AUDIO_FORMAT_APTX,
             AUDIO_FORMAT_APTX_HD,
             AUDIO_FORMAT_LDAC,
-            AUDIO_FORMAT_LC3}
+            AUDIO_FORMAT_LC3,
+            AUDIO_FORMAT_OPUS
+           }
     )
     @Retention(RetentionPolicy.SOURCE)
     public @interface AudioFormatNativeEnumForBtCodec {}
@@ -287,6 +293,7 @@
             case AUDIO_FORMAT_APTX_HD: return BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD;
             case AUDIO_FORMAT_LDAC: return BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC;
             case AUDIO_FORMAT_LC3: return BluetoothCodecConfig.SOURCE_CODEC_TYPE_LC3;
+            case AUDIO_FORMAT_OPUS: return SOURCE_CODEC_TYPE_OPUS; // TODO update in U
             default:
                 Log.e(TAG, "Unknown audio format 0x" + Integer.toHexString(audioFormat)
                         + " for conversion to BT codec");
@@ -329,6 +336,8 @@
                 return AudioSystem.AUDIO_FORMAT_LDAC;
             case BluetoothCodecConfig.SOURCE_CODEC_TYPE_LC3:
                 return AudioSystem.AUDIO_FORMAT_LC3;
+            case SOURCE_CODEC_TYPE_OPUS: // TODO update in U
+                return AudioSystem.AUDIO_FORMAT_OPUS;
             default:
                 Log.e(TAG, "Unknown BT codec 0x" + Integer.toHexString(btCodec)
                         + " for conversion to audio format");
diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl
index e28178a..90eb9e6 100755
--- a/media/java/android/media/IAudioService.aidl
+++ b/media/java/android/media/IAudioService.aidl
@@ -98,6 +98,9 @@
     void setStreamVolumeWithAttribution(int streamType, int index, int flags,
             in String callingPackage, in String attributionTag);
 
+    void setDeviceVolume(in VolumeInfo vi, in AudioDeviceAttributes ada,
+            in String callingPackage, in String attributionTag);
+
     oneway void handleVolumeKey(in KeyEvent event, boolean isOnTv,
             String callingPackage, String caller);
 
diff --git a/media/java/android/media/projection/IMediaProjection.aidl b/media/java/android/media/projection/IMediaProjection.aidl
index b136d5b..2bdd5c8 100644
--- a/media/java/android/media/projection/IMediaProjection.aidl
+++ b/media/java/android/media/projection/IMediaProjection.aidl
@@ -17,7 +17,7 @@
 package android.media.projection;
 
 import android.media.projection.IMediaProjectionCallback;
-import android.window.WindowContainerToken;
+import android.os.IBinder;
 
 /** {@hide} */
 interface IMediaProjection {
@@ -31,14 +31,14 @@
     void unregisterCallback(IMediaProjectionCallback callback);
 
     /**
-     * Returns the {@link android.window.WindowContainerToken} identifying the task to record, or
-     * {@code null} if there is none.
+     * Returns the {@link android.os.IBinder} identifying the task to record, or {@code null} if
+     * there is none.
      */
-    WindowContainerToken getTaskRecordingWindowContainerToken();
+    IBinder getLaunchCookie();
 
     /**
-     * Updates the {@link android.window.WindowContainerToken} identifying the task to record, or
-     * {@code null} if there is none.
+     * Updates the {@link android.os.IBinder} identifying the task to record, or {@code null} if
+     * there is none.
      */
-    void setTaskRecordingWindowContainerToken(in WindowContainerToken token);
+    void setLaunchCookie(in IBinder launchCookie);
 }
diff --git a/media/java/android/media/projection/MediaProjection.java b/media/java/android/media/projection/MediaProjection.java
index ba7bf3f..ae44fc5 100644
--- a/media/java/android/media/projection/MediaProjection.java
+++ b/media/java/android/media/projection/MediaProjection.java
@@ -25,13 +25,13 @@
 import android.hardware.display.VirtualDisplay;
 import android.hardware.display.VirtualDisplayConfig;
 import android.os.Handler;
+import android.os.IBinder;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.util.ArrayMap;
 import android.util.Log;
 import android.view.ContentRecordingSession;
 import android.view.Surface;
-import android.window.WindowContainerToken;
 
 import java.util.Map;
 
@@ -172,18 +172,16 @@
             @NonNull VirtualDisplayConfig.Builder virtualDisplayConfig,
             @Nullable VirtualDisplay.Callback callback, @Nullable Handler handler) {
         try {
-            final WindowContainerToken taskWindowContainerToken =
-                    mImpl.getTaskRecordingWindowContainerToken();
+            final IBinder launchCookie = mImpl.getLaunchCookie();
             Context windowContext = null;
             ContentRecordingSession session;
-            if (taskWindowContainerToken == null) {
+            if (launchCookie == null) {
                 windowContext = mContext.createWindowContext(mContext.getDisplayNoVerify(),
                         TYPE_APPLICATION, null /* options */);
                 session = ContentRecordingSession.createDisplaySession(
                         windowContext.getWindowContextToken());
             } else {
-                session = ContentRecordingSession.createTaskSession(
-                        taskWindowContainerToken.asBinder());
+                session = ContentRecordingSession.createTaskSession(launchCookie);
             }
             virtualDisplayConfig.setWindowManagerMirroring(true);
             final DisplayManager dm = mContext.getSystemService(DisplayManager.class);
diff --git a/packages/CompanionDeviceManager/res/values-af/strings.xml b/packages/CompanionDeviceManager/res/values-af/strings.xml
index 480bc48..004b563 100644
--- a/packages/CompanionDeviceManager/res/values-af/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-af/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Stroom jou foon se programme"</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="7380294597268573523">"<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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Foto\'s en media"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play Dienste"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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_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="profile_name_generic" msgid="6851028682723034988">"toestel"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Laat toe"</string>
diff --git a/packages/CompanionDeviceManager/res/values-am/strings.xml b/packages/CompanionDeviceManager/res/values-am/strings.xml
index 5f2bd7f..36333f2 100644
--- a/packages/CompanionDeviceManager/res/values-am/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-am/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"የስልክዎን መተግበሪያዎች በዥረት ይልቀቁ"</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="7380294597268573523">"<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="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> በእርስዎ መሣሪያዎች መካከል መተግበሪያዎችን በዥረት ለመልቀቅ የእርስዎን <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"ፎቶዎች እና ሚዲያ"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"የGoogle Play አገልግሎቶች"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> የስልክዎን ፎቶዎች፣ ሚዲያ እና ማሳወቂያዎች ለመድረስ የእርስዎን <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> ወክሎ ፈቃድ እየጠየቀ ነው"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"መሣሪያ"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"ፍቀድ"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ar/strings.xml b/packages/CompanionDeviceManager/res/values-ar/strings.xml
index 138386b..c9acb7f 100644
--- a/packages/CompanionDeviceManager/res/values-ar/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ar/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"بث تطبيقات هاتفك"</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="7380294597268573523">"تطلب \"<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="5977509499890099">"يطلب تطبيق <xliff:g id="APP_NAME">%1$s</xliff:g> الحصول على إذن نيابةً عن <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"الصور والوسائط"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"‏خدمات Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"يطلب التطبيق <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="9050724687678157852">"يطلب تطبيق <xliff:g id="APP_NAME">%1$s</xliff:g> الحصول على إذن نيابةً عن <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> للوصول إلى الصور والوسائط والإشعارات في هاتفك."</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"جهاز"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"السماح"</string>
diff --git a/packages/CompanionDeviceManager/res/values-as/strings.xml b/packages/CompanionDeviceManager/res/values-as/strings.xml
index 95c4e68..986b175 100644
--- a/packages/CompanionDeviceManager/res/values-as/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-as/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"আপোনাৰ ফ’নৰ এপ্‌ ষ্ট্ৰীম কৰক"</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="7380294597268573523">"<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="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g>এ আপোনাৰ <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"ফট’ আৰু মিডিয়া"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play সেৱা"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g>এ আপোনাৰ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g>ৰ হৈ আপোনাৰ ফ’নৰ ফট’, মিডিয়া আৰু জাননী এক্সেছ কৰাৰ বাবে অনুৰোধ জনাইছে"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"ডিভাইচ"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"অনুমতি দিয়ক"</string>
diff --git a/packages/CompanionDeviceManager/res/values-az/strings.xml b/packages/CompanionDeviceManager/res/values-az/strings.xml
index 9578fb5..3549317b 100644
--- a/packages/CompanionDeviceManager/res/values-az/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-az/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Telefonunuzun tətbiqlərini yayımlayın"</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="7380294597268573523">"<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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Foto və media"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play xidmətləri"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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_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="profile_name_generic" msgid="6851028682723034988">"cihaz"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"İcazə verin"</string>
diff --git a/packages/CompanionDeviceManager/res/values-b+sr+Latn/strings.xml b/packages/CompanionDeviceManager/res/values-b+sr+Latn/strings.xml
index d821247..75a4f1d 100644
--- a/packages/CompanionDeviceManager/res/values-b+sr+Latn/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-b+sr+Latn/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Strimujte aplikacije na telefonu"</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="7380294597268573523">"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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Slike i mediji"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play usluge"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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_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="profile_name_generic" msgid="6851028682723034988">"uređaj"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Dozvoli"</string>
diff --git a/packages/CompanionDeviceManager/res/values-be/strings.xml b/packages/CompanionDeviceManager/res/values-be/strings.xml
index 2086f2e..f448fbf 100644
--- a/packages/CompanionDeviceManager/res/values-be/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-be/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Трансліруйце змесціва праграм з вашага тэлефона"</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="7380294597268573523">"Праграма \"<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="5977509499890099">"Праграма \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" запытвае дазвол ад імя вашай прылады \"<xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Фота і медыяфайлы"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Сэрвісы Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"Праграма \"<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="9050724687678157852">"Праграма \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" запытвае дазвол ад імя вашай прылады \"<xliff:g id="DEVICE_TYPE">%2$s</xliff:g>\" на доступ да фота, медыяфайлаў і апавяшчэнняў на вашым тэлефоне"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"прылада"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Дазволіць"</string>
diff --git a/packages/CompanionDeviceManager/res/values-bg/strings.xml b/packages/CompanionDeviceManager/res/values-bg/strings.xml
index 134ae1c..7f33114 100644
--- a/packages/CompanionDeviceManager/res/values-bg/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-bg/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Поточно предаване на приложенията на телефона ви"</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="7380294597268573523">"„<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="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> иска разрешение от името на <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Снимки и мултимедия"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Услуги за Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> иска разрешение от името на <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> за достъп до снимките, мултимедията и известията на телефона ви"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"устройство"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Разрешаване"</string>
diff --git a/packages/CompanionDeviceManager/res/values-bn/strings.xml b/packages/CompanionDeviceManager/res/values-bn/strings.xml
index 08c4a16b..4a4f674 100644
--- a/packages/CompanionDeviceManager/res/values-bn/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-bn/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"আপনার ফোনের অ্যাপ স্ট্রিমিংয়ের মাধ্যমে কাস্ট করুন"</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="7380294597268573523">"আপনার ফোনের ফটো, মিডিয়া এবং তথ্য অ্যাক্সেস করার জন্য <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="5977509499890099">"আপনার ডিভাইসগুলির মধ্যে অ্যাপ স্ট্রিম করার জন্য <xliff:g id="APP_NAME">%1$s</xliff:g>, <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"ফটো ও মিডিয়া"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play পরিষেবা"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"আপনার ডিভাইসগুলির মধ্যে অ্যাপ স্ট্রিম করার জন্য <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="9050724687678157852">"আপনার ফোনের ফটো, মিডিয়া এবং তথ্য অ্যাক্সেস করার জন্য <xliff:g id="APP_NAME">%1$s</xliff:g>, <xliff:g id="DEVICE_TYPE">%2$s</xliff:g>-এর হয়ে অনুমতি চাইছে"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"ডিভাইস"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"অনুমতি দিন"</string>
diff --git a/packages/CompanionDeviceManager/res/values-bs/strings.xml b/packages/CompanionDeviceManager/res/values-bs/strings.xml
index 340fd6a..d7423ac 100644
--- a/packages/CompanionDeviceManager/res/values-bs/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-bs/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Prenosite aplikacije s telefona"</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="7380294597268573523">"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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Fotografije i mediji"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play usluge"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"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_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="profile_name_generic" msgid="6851028682723034988">"uređaj"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Dozvoli"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ca/strings.xml b/packages/CompanionDeviceManager/res/values-ca/strings.xml
index 967b390..eb59614 100644
--- a/packages/CompanionDeviceManager/res/values-ca/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ca/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Reprodueix en continu aplicacions del telèfon"</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="7380294597268573523">"<xliff:g id="APP_NAME">%1$s</xliff:g> demana permís en nom del teu dispositiu (<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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Fotos i contingut multimèdia"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Serveis de Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<xliff:g id="APP_NAME">%1$s</xliff:g> demana permís en nom del teu dispositiu (<xliff:g id="DEVICE_TYPE">%2$s</xliff:g>) per reproduir en continu aplicacions entre els dispositius"</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="profile_name_generic" msgid="6851028682723034988">"dispositiu"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Permet"</string>
diff --git a/packages/CompanionDeviceManager/res/values-cs/strings.xml b/packages/CompanionDeviceManager/res/values-cs/strings.xml
index 7ab5f624..51d4b74 100644
--- a/packages/CompanionDeviceManager/res/values-cs/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-cs/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Streamujte aplikace v telefonu"</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="7380294597268573523">"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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Fotky a média"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Služby Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"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_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="profile_name_generic" msgid="6851028682723034988">"zařízení"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Povolit"</string>
diff --git a/packages/CompanionDeviceManager/res/values-da/strings.xml b/packages/CompanionDeviceManager/res/values-da/strings.xml
index 2fb2e6e..5ba30ec 100644
--- a/packages/CompanionDeviceManager/res/values-da/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-da/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Stream din telefons apps"</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="7380294597268573523">"<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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Billeder og medier"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play-tjenester"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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_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="profile_name_generic" msgid="6851028682723034988">"enhed"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Tillad"</string>
diff --git a/packages/CompanionDeviceManager/res/values-de/strings.xml b/packages/CompanionDeviceManager/res/values-de/strings.xml
index 0b6a195..d62708e 100644
--- a/packages/CompanionDeviceManager/res/values-de/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-de/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Smartphone-Apps streamen"</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="7380294597268573523">"<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_app_streaming" msgid="5977509499890099">"<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 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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Fotos und Medien"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play-Dienste"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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 Streamen von Apps zwischen deinen Geräten"</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="profile_name_generic" msgid="6851028682723034988">"Gerät"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Zulassen"</string>
diff --git a/packages/CompanionDeviceManager/res/values-el/strings.xml b/packages/CompanionDeviceManager/res/values-el/strings.xml
index 726009f..2c27f92 100644
--- a/packages/CompanionDeviceManager/res/values-el/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-el/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Μεταδώστε σε ροή τις εφαρμογές του τηλεφώνου σας"</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="7380294597268573523">"Η εφαρμογή <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="5977509499890099">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> ζητά εκ μέρους της συσκευής σας <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Φωτογραφίες και μέσα"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Υπηρεσίες Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"Η εφαρμογή <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="9050724687678157852">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> ζητά εκ μέρους της συσκευής σας <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> άδεια για πρόσβαση στις φωτογραφίες, τα αρχεία μέσων και τις ειδοποιήσεις του τηλεφώνου σας"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"συσκευή"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Να επιτρέπεται"</string>
diff --git a/packages/CompanionDeviceManager/res/values-en-rAU/strings.xml b/packages/CompanionDeviceManager/res/values-en-rAU/strings.xml
index dacfaae..9821014 100644
--- a/packages/CompanionDeviceManager/res/values-en-rAU/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-en-rAU/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Stream your phone’s apps"</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="7380294597268573523">"<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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Photos and media"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play services"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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_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="profile_name_generic" msgid="6851028682723034988">"device"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Allow"</string>
diff --git a/packages/CompanionDeviceManager/res/values-en-rCA/strings.xml b/packages/CompanionDeviceManager/res/values-en-rCA/strings.xml
index dacfaae..9821014 100644
--- a/packages/CompanionDeviceManager/res/values-en-rCA/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-en-rCA/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Stream your phone’s apps"</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="7380294597268573523">"<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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Photos and media"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play services"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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_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="profile_name_generic" msgid="6851028682723034988">"device"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Allow"</string>
diff --git a/packages/CompanionDeviceManager/res/values-en-rGB/strings.xml b/packages/CompanionDeviceManager/res/values-en-rGB/strings.xml
index dacfaae..9821014 100644
--- a/packages/CompanionDeviceManager/res/values-en-rGB/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-en-rGB/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Stream your phone’s apps"</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="7380294597268573523">"<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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Photos and media"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play services"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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_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="profile_name_generic" msgid="6851028682723034988">"device"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Allow"</string>
diff --git a/packages/CompanionDeviceManager/res/values-en-rIN/strings.xml b/packages/CompanionDeviceManager/res/values-en-rIN/strings.xml
index dacfaae..9821014 100644
--- a/packages/CompanionDeviceManager/res/values-en-rIN/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-en-rIN/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Stream your phone’s apps"</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="7380294597268573523">"<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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Photos and media"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play services"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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_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="profile_name_generic" msgid="6851028682723034988">"device"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Allow"</string>
diff --git a/packages/CompanionDeviceManager/res/values-en-rXC/strings.xml b/packages/CompanionDeviceManager/res/values-en-rXC/strings.xml
index 56d979a..ea1ff66 100644
--- a/packages/CompanionDeviceManager/res/values-en-rXC/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-en-rXC/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‎‏‎‏‏‎‎‏‏‏‏‎‏‎‎‎‏‎‎‎‎‎‏‏‎‎‎‏‏‎‎‎‎‎‏‎‏‎‎‏‏‏‎‏‎‎‏‎‎‏‏‏‎Stream your phone’s apps‎‏‎‎‏‎"</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="7380294597268573523">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‏‎‎‎‎‎‏‎‎‏‎‏‏‎‏‎‏‎‏‎‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‏‎‏‎‏‎‏‎‎‏‏‎‎‏‎‎‏‏‎<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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‏‏‎‎‏‏‏‏‎‎‎‎‏‎‏‎‏‎‏‎‏‎‏‏‏‎‎‎‎‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‎‏‎‏‎‏‏‏‎Photos and media‎‏‎‎‏‎"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‎‏‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‏‏‎‎‏‎‏‏‏‎‏‎‏‎‎‏‎‏‎Google Play services‎‏‎‎‏‎"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‎‎‏‏‏‏‎‎‏‎‏‏‏‏‎‏‎‏‎‎‏‎‎‎‎‎‏‏‎‏‎‏‏‏‏‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‎‎‎‎‏‎‎‏‏‎<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_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="profile_name_generic" msgid="6851028682723034988">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‎‏‏‏‎‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‏‏‎‎‎‏‏‏‎‏‏‏‎‎‎‎‎‎‎‎‏‏‏‎‏‏‎‏‏‎‎‎device‎‏‎‎‏‎"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎‏‏‎‏‏‎‎‏‎‎‏‎‏‏‏‏‎‎‏‏‏‎‎‏‏‏‏‎‎‏‎‏‏‎‎‏‎‏‏‎‎‎‎‎‎‏‏‏‏‎‎‎‎Allow‎‏‎‎‏‎"</string>
diff --git a/packages/CompanionDeviceManager/res/values-es-rUS/strings.xml b/packages/CompanionDeviceManager/res/values-es-rUS/strings.xml
index 54d13c4a..407682c 100644
--- a/packages/CompanionDeviceManager/res/values-es-rUS/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-es-rUS/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Transmitir las apps de tu teléfono"</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="7380294597268573523">"<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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Fotos y contenido multimedia"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Servicios de Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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_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="profile_name_generic" msgid="6851028682723034988">"dispositivo"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Permitir"</string>
diff --git a/packages/CompanionDeviceManager/res/values-es/strings.xml b/packages/CompanionDeviceManager/res/values-es/strings.xml
index 66bb1b9..c781ea1 100644
--- a/packages/CompanionDeviceManager/res/values-es/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-es/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Proyecta aplicaciones de tu teléfono"</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 desde tu teléfono"</string>
     <string name="helper_title_app_streaming" msgid="4151687003439969765">"Servicios multidispositivo"</string>
-    <string name="helper_summary_app_streaming" msgid="7380294597268573523">"<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_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="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 desde tu teléfono"</string>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Fotos y elementos multimedia"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Servicios de Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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_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="profile_name_generic" msgid="6851028682723034988">"dispositivo"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Permitir"</string>
diff --git a/packages/CompanionDeviceManager/res/values-et/strings.xml b/packages/CompanionDeviceManager/res/values-et/strings.xml
index b160390..1f5fdb8 100644
--- a/packages/CompanionDeviceManager/res/values-et/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-et/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Telefoni rakenduste voogesitamine"</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="7380294597268573523">"<xliff:g id="APP_NAME">%1$s</xliff:g> taotlevad 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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Fotod ja meedia"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play teenused"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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_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="profile_name_generic" msgid="6851028682723034988">"seade"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Luba"</string>
diff --git a/packages/CompanionDeviceManager/res/values-eu/strings.xml b/packages/CompanionDeviceManager/res/values-eu/strings.xml
index 395c385..ae9fdfb 100644
--- a/packages/CompanionDeviceManager/res/values-eu/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-eu/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Igorri zuzenean telefonoko 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="7380294597268573523">"Telefonoko argazkiak, multimedia-edukia eta jakinarazpenak atzitzeko 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="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="title_automotive_projection" msgid="3296005598978412847"></string>
     <string name="summary_automotive_projection" msgid="8683801274662496164"></string>
     <string name="title_computer" msgid="4693714143506569253">"Eman informazio hori telefonotik hartzeko baimena &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; aplikazioari"</string>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Argazkiak eta multimedia-edukia"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play Services"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"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_computer" msgid="9050724687678157852">"Telefonoko argazkiak, multimedia-edukia eta jakinarazpenak atzitzeko 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="profile_name_generic" msgid="6851028682723034988">"gailua"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Eman baimena"</string>
diff --git a/packages/CompanionDeviceManager/res/values-fa/strings.xml b/packages/CompanionDeviceManager/res/values-fa/strings.xml
index beabaf1..9a45788 100644
--- a/packages/CompanionDeviceManager/res/values-fa/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-fa/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"جاری‌سازی برنامه‌های تلفن"</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="7380294597268573523">"<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="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> اجازه می‌خواهد ازطرف <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"عکس‌ها و رسانه‌ها"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"‏خدمات Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> اجازه می‌خواهد ازطرف <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> به عکس‌ها، رسانه‌ها، و اعلان‌های تلفن شما دسترسی پیدا کند"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"دستگاه"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"اجازه دادن"</string>
diff --git a/packages/CompanionDeviceManager/res/values-fi/strings.xml b/packages/CompanionDeviceManager/res/values-fi/strings.xml
index 35e0e47..01063e7 100644
--- a/packages/CompanionDeviceManager/res/values-fi/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-fi/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Striimaa puhelimen sovelluksia"</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="7380294597268573523">"<xliff:g id="APP_NAME">%1$s</xliff:g> pyytää laitteeltasi (<xliff:g id="DEVICE_TYPE">%2$s</xliff:g>) lupaa päästä puhelimesi kuviin, mediaan ja ilmoituksiin"</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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Kuvat ja media"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play Palvelut"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<xliff:g id="APP_NAME">%1$s</xliff:g> pyytää laitteeltasi (<xliff:g id="DEVICE_TYPE">%2$s</xliff:g>) lupaa striimata sovelluksia laitteidesi välillä"</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="profile_name_generic" msgid="6851028682723034988">"laite"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Salli"</string>
diff --git a/packages/CompanionDeviceManager/res/values-fr-rCA/strings.xml b/packages/CompanionDeviceManager/res/values-fr-rCA/strings.xml
index 1b1727e..c5d1d4d 100644
--- a/packages/CompanionDeviceManager/res/values-fr-rCA/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-fr-rCA/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Diffusez les applications de votre téléphone"</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="7380294597268573523">"<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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Photos et fichiers multimédias"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Services Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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_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="profile_name_generic" msgid="6851028682723034988">"appareil"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Autoriser"</string>
diff --git a/packages/CompanionDeviceManager/res/values-fr/strings.xml b/packages/CompanionDeviceManager/res/values-fr/strings.xml
index 30db318..ca2e661 100644
--- a/packages/CompanionDeviceManager/res/values-fr/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-fr/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Diffuser en streaming les applis de votre téléphone"</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="7380294597268573523">"<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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Photos et contenus multimédias"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Services Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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_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="profile_name_generic" msgid="6851028682723034988">"appareil"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Autoriser"</string>
diff --git a/packages/CompanionDeviceManager/res/values-gl/strings.xml b/packages/CompanionDeviceManager/res/values-gl/strings.xml
index c692c03..eaf0d54 100644
--- a/packages/CompanionDeviceManager/res/values-gl/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-gl/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Emite as aplicacións do teu teléfono"</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="7380294597268573523">"<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_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="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 desde o teu teléfono"</string>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Fotos e contido multimedia"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Servizos de Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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 aplicacións entre os teus aparellos"</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="profile_name_generic" msgid="6851028682723034988">"dispositivo"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Permitir"</string>
diff --git a/packages/CompanionDeviceManager/res/values-gu/strings.xml b/packages/CompanionDeviceManager/res/values-gu/strings.xml
index 8c92de8..fc1fc5a 100644
--- a/packages/CompanionDeviceManager/res/values-gu/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-gu/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"તમારા ફોનની ઍપ સ્ટ્રીમ કરો"</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="7380294597268573523">"<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="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> તમારા <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"ફોટા અને મીડિયા"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play સેવાઓ"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> તમારા <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> વતી તમારા ફોનના ફોટા, મીડિયા અને નોટિફિકેશન ઍક્સેસ કરવાની પરવાનગીની વિનંતી કરી રહી છે"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"ડિવાઇસ"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"મંજૂરી આપો"</string>
diff --git a/packages/CompanionDeviceManager/res/values-hi/strings.xml b/packages/CompanionDeviceManager/res/values-hi/strings.xml
index 1ac3999..ef21b6d 100644
--- a/packages/CompanionDeviceManager/res/values-hi/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-hi/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"अपने फ़ोन के ऐप्लिकेशन को स्ट्रीम करें"</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="7380294597268573523">"<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="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> आपके <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"फ़ोटो और मीडिया"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play सेवाएं"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> आपके <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> की ओर से, फ़ोन में मौजूद फ़ोटो, मीडिया, और सूचनाओं को ऐक्सेस करने की अनुमति मांग रहा है"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"डिवाइस"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"अनुमति दें"</string>
diff --git a/packages/CompanionDeviceManager/res/values-hr/strings.xml b/packages/CompanionDeviceManager/res/values-hr/strings.xml
index 6e18628..7f8a589 100644
--- a/packages/CompanionDeviceManager/res/values-hr/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-hr/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Streaming aplikacija vašeg telefona"</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="7380294597268573523">"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> da pristupi fotografijama, medijskim sadržajima i obavijestima na telefonu"</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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Fotografije i mediji"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Usluge za Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"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 streamanje aplikacija između vaših uređaja"</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="profile_name_generic" msgid="6851028682723034988">"uređaj"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Dopusti"</string>
diff --git a/packages/CompanionDeviceManager/res/values-hu/strings.xml b/packages/CompanionDeviceManager/res/values-hu/strings.xml
index 2f8dd85..86ff98c 100644
--- a/packages/CompanionDeviceManager/res/values-hu/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-hu/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"A telefon alkalmazásainak streamelése"</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="7380294597268573523">"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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Fotók és médiatartalmak"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play-szolgáltatások"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"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_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="profile_name_generic" msgid="6851028682723034988">"eszköz"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Engedélyezés"</string>
diff --git a/packages/CompanionDeviceManager/res/values-hy/strings.xml b/packages/CompanionDeviceManager/res/values-hy/strings.xml
index aed650b..bda1088 100644
--- a/packages/CompanionDeviceManager/res/values-hy/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-hy/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Հեռարձակել հեռախոսի հավելվածները"</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="7380294597268573523">"<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="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածը ձեր <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Լուսանկարներ և մուլտիմեդիա"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play ծառայություններ"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածը ձեր <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> սարքի անունից թույլտվություն է խնդրում՝ ձեր հեռախոսի լուսանկարները, մեդիաֆայլերն ու ծանուցումները տեսնելու համար"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"սարք"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Թույլատրել"</string>
diff --git a/packages/CompanionDeviceManager/res/values-in/strings.xml b/packages/CompanionDeviceManager/res/values-in/strings.xml
index 048325c..68ac94b 100644
--- a/packages/CompanionDeviceManager/res/values-in/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-in/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Streaming aplikasi ponsel"</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="7380294597268573523">"<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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Foto dan media"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Layanan Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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_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="profile_name_generic" msgid="6851028682723034988">"perangkat"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Izinkan"</string>
diff --git a/packages/CompanionDeviceManager/res/values-is/strings.xml b/packages/CompanionDeviceManager/res/values-is/strings.xml
index 3f5a3de..3997deb 100644
--- a/packages/CompanionDeviceManager/res/values-is/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-is/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Streymdu forritum símans"</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="7380294597268573523">"<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_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> sendir beiðni um heimild fyrir straumspilun forrita á milli tækjanna þinna fyrir hönd <xliff:g id="DEVICE_TYPE">%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">"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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Myndir og efni"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Þjónusta Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<xliff:g id="APP_NAME">%1$s</xliff:g> sendir beiðni um heimild fyrir straumspilun forrita á milli tækjanna þinna fyrir hönd <xliff:g id="DEVICE_TYPE">%2$s</xliff:g>"</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="profile_name_generic" msgid="6851028682723034988">"tæki"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Leyfa"</string>
diff --git a/packages/CompanionDeviceManager/res/values-it/strings.xml b/packages/CompanionDeviceManager/res/values-it/strings.xml
index 0f7fb08..a8b23288 100644
--- a/packages/CompanionDeviceManager/res/values-it/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-it/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Trasmetti in streaming le app del tuo telefono"</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="7380294597268573523">"<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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Foto e contenuti multimediali"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play Services"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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_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="profile_name_generic" msgid="6851028682723034988">"dispositivo"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Consenti"</string>
diff --git a/packages/CompanionDeviceManager/res/values-iw/strings.xml b/packages/CompanionDeviceManager/res/values-iw/strings.xml
index 9622ce5..d488e28 100644
--- a/packages/CompanionDeviceManager/res/values-iw/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-iw/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"שידור אפליקציות מהטלפון"</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="7380294597268573523">"האפליקציה <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="5977509499890099">"האפליקציה <xliff:g id="APP_NAME">%1$s</xliff:g> מבקשת הרשאה עבור מכשיר <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"תמונות ומדיה"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play Services"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"האפליקציה <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="9050724687678157852">"האפליקציה <xliff:g id="APP_NAME">%1$s</xliff:g> מבקשת הרשאה עבור מכשיר <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> כדי לגשת לתמונות, למדיה ולהתראות בטלפון שלך"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"מכשיר"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"יש אישור"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ja/strings.xml b/packages/CompanionDeviceManager/res/values-ja/strings.xml
index 26b8a90..ab1cbf0 100644
--- a/packages/CompanionDeviceManager/res/values-ja/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ja/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"スマートフォンのアプリをストリーミングします"</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="7380294597268573523">"<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="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> が <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"写真とメディア"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play 開発者サービス"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> が <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> に代わってスマートフォンの写真、メディア、通知にアクセスする権限をリクエストしています"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"デバイス"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"許可"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ka/strings.xml b/packages/CompanionDeviceManager/res/values-ka/strings.xml
index 94c33e5..bd8cb3c 100644
--- a/packages/CompanionDeviceManager/res/values-ka/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ka/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"თქვენი ტელეფონის აპების სტრიმინგი"</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="7380294597268573523">"<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="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> ითხოვს უფლებას თქვენი <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"ფოტოები და მედია"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play services"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> ითხოვს უფლებას თქვენი <xliff:g id="DEVICE_TYPE">%2$s</xliff:g>-ის სახელით, რომ წვდომა ჰქონდეს თქვენი ტელეფონის ფოტოებზე, მედიასა და შეტყობინებებზე"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"მოწყობილობა"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"დაშვება"</string>
diff --git a/packages/CompanionDeviceManager/res/values-kk/strings.xml b/packages/CompanionDeviceManager/res/values-kk/strings.xml
index 5a4314b..afd44e0 100644
--- a/packages/CompanionDeviceManager/res/values-kk/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-kk/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Телефон қолданбаларын трансляциялайды."</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="7380294597268573523">"<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="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасы <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Фотосуреттер мен медиафайлдар"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play қызметтері"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасы <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> атынан телефондағы фотосуреттерді, медиафайлдар мен хабарландыруларды пайдалану үшін рұқсат сұрайды."</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"құрылғы"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Рұқсат беру"</string>
diff --git a/packages/CompanionDeviceManager/res/values-km/strings.xml b/packages/CompanionDeviceManager/res/values-km/strings.xml
index 2456f63..abe3b3e 100644
--- a/packages/CompanionDeviceManager/res/values-km/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-km/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"ផ្សាយកម្មវិធីរបស់ទូរសព្ទអ្នក"</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="7380294597268573523">"<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="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> កំពុងស្នើសុំការអនុញ្ញាតជំនួសឱ្យ <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"រូបថត និងមេឌៀ"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"សេវាកម្ម Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> កំពុងស្នើសុំការអនុញ្ញាតជំនួសឱ្យ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> របស់អ្នក ដើម្បីចូលប្រើរូបថត មេឌៀ និងការជូនដំណឹងរបស់ទូរសព្ទអ្នក"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"ឧបករណ៍"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"អនុញ្ញាត"</string>
diff --git a/packages/CompanionDeviceManager/res/values-kn/strings.xml b/packages/CompanionDeviceManager/res/values-kn/strings.xml
index 5284ebf..911a684 100644
--- a/packages/CompanionDeviceManager/res/values-kn/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-kn/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"ನಿಮ್ಮ ಫೋನ್‍ನ ಆ್ಯಪ್‌ಗಳನ್ನು ಸ್ಟ್ರೀಮ್ ಮಾಡಿ"</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="7380294597268573523">"ನಿಮ್ಮ ಫೋನ್‌ನ ಫೋಟೋಗಳು, ಮೀಡಿಯಾ ಮತ್ತು ಅಧಿಸೂಚನೆಗಳನ್ನು ಪ್ರವೇಶಿಸಲು ನಿಮ್ಮ <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="5977509499890099">"ನಿಮ್ಮ ಸಾಧನಗಳ ನಡುವೆ ಆ್ಯಪ್‌ಗಳನ್ನು ಸ್ಟ್ರೀಮ್ ಮಾಡಲು ನಿಮ್ಮ <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"ಫೋಟೋಗಳು ಮತ್ತು ಮಾಧ್ಯಮ"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play ಸೇವೆಗಳು"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"ನಿಮ್ಮ ಸಾಧನಗಳ ನಡುವೆ ಆ್ಯಪ್‌ಗಳನ್ನು ಸ್ಟ್ರೀಮ್ ಮಾಡಲು ನಿಮ್ಮ <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="9050724687678157852">"ನಿಮ್ಮ ಫೋನ್‌ನ ಫೋಟೋಗಳು, ಮೀಡಿಯಾ ಮತ್ತು ಅಧಿಸೂಚನೆಗಳನ್ನು ಪ್ರವೇಶಿಸಲು ನಿಮ್ಮ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> ನ ಪರವಾಗಿ <xliff:g id="APP_NAME">%1$s</xliff:g> ಅನುಮತಿಯನ್ನು ವಿನಂತಿಸಿಕೊಳ್ಳುತ್ತಿದೆ"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"ಸಾಧನ"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"ಅನುಮತಿಸಿ"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ko/strings.xml b/packages/CompanionDeviceManager/res/values-ko/strings.xml
index 4451cb9..4af740e 100644
--- a/packages/CompanionDeviceManager/res/values-ko/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ko/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"휴대전화의 앱을 스트리밍합니다."</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="7380294597268573523">"<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="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서 <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"사진 및 미디어"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play 서비스"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서 <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> 대신 휴대전화의 사진, 미디어, 알림에 액세스할 수 있는 권한을 요청하고 있습니다."</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"기기"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"허용"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ky/strings.xml b/packages/CompanionDeviceManager/res/values-ky/strings.xml
index d641f29..24a3094 100644
--- a/packages/CompanionDeviceManager/res/values-ky/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ky/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Телефондогу колдонмолорду алып ойнотуу"</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="7380294597268573523">"<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="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосу <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Сүрөттөр жана медиа"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play кызматтары"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосу <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> түзмөгүңүздүн атынан телефондогу сүрөттөрдү, медиа файлдарды жана билдирмелерди колдонууга уруксат сурап жатат"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"түзмөк"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Ооба"</string>
diff --git a/packages/CompanionDeviceManager/res/values-lo/strings.xml b/packages/CompanionDeviceManager/res/values-lo/strings.xml
index f9d65fa..41e9376 100644
--- a/packages/CompanionDeviceManager/res/values-lo/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-lo/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"ສະຕຣີມແອັບຂອງໂທລະສັບທ່ານ"</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="7380294597268573523">"<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="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> ກຳລັງຮ້ອງຂໍການອະນຸຍາດໃນນາມຂອງ <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"ຮູບພາບ ແລະ ມີເດຍ"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"ບໍລິການ Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> ກຳລັງຮ້ອງຂໍການອະນຸຍາດໃນນາມຂອງ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> ເພື່ອເຂົ້າເຖິງຮູບພາບ, ມີເດຍ ແລະ ການແຈ້ງເຕືອນຂອງໂທລະສັບທ່ານ"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"ອຸປະກອນ"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"ອະນຸຍາດ"</string>
diff --git a/packages/CompanionDeviceManager/res/values-lt/strings.xml b/packages/CompanionDeviceManager/res/values-lt/strings.xml
index 6e7b007..57020a1 100644
--- a/packages/CompanionDeviceManager/res/values-lt/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-lt/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Telefono programų perdavimas srautu"</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="7380294597268573523">"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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Nuotraukos ir medija"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"„Google Play“ paslaugos"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"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_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="profile_name_generic" msgid="6851028682723034988">"įrenginys"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Leisti"</string>
diff --git a/packages/CompanionDeviceManager/res/values-lv/strings.xml b/packages/CompanionDeviceManager/res/values-lv/strings.xml
index 1fdc99d..92badb1 100644
--- a/packages/CompanionDeviceManager/res/values-lv/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-lv/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Var straumēt jūsu tālruņa lietotnes"</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="7380294597268573523">"<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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Fotoattēli un multivides faili"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play pakalpojumi"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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_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="profile_name_generic" msgid="6851028682723034988">"ierīce"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Atļaut"</string>
diff --git a/packages/CompanionDeviceManager/res/values-mk/strings.xml b/packages/CompanionDeviceManager/res/values-mk/strings.xml
index e09a5b3..6e59d5e 100644
--- a/packages/CompanionDeviceManager/res/values-mk/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-mk/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Стримувајте ги апликациите на телефонот"</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="7380294597268573523">"<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="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> бара дозвола во име на вашиот <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Аудиовизуелни содржини"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Услуги на Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> бара дозвола во име на вашиот <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> за да пристапува до фотографиите, аудиовизуелните содржини и известувањата на телефонот"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"уред"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Дозволи"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ml/strings.xml b/packages/CompanionDeviceManager/res/values-ml/strings.xml
index 636a750..19764d0 100644
--- a/packages/CompanionDeviceManager/res/values-ml/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ml/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"നിങ്ങളുടെ ഫോണിലെ ആപ്പുകൾ സ്‌ട്രീം ചെയ്യാൻ"</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="7380294597268573523">"നിങ്ങളുടെ ഫോണിലെ ഫോട്ടോകൾ, മീഡിയ, അറിയിപ്പുകൾ എന്നിവ ആക്സസ് ചെയ്യാൻ <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="5977509499890099">"നിങ്ങളുടെ ഉപകരണങ്ങളിൽ ഒന്നിൽ നിന്ന് അടുത്തതിലേക്ക് ആപ്പുകൾ സ്ട്രീം ചെയ്യാൻ <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"ഫോട്ടോകളും മീഡിയയും"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play സേവനങ്ങൾ"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"നിങ്ങളുടെ ഉപകരണങ്ങളിൽ ഒന്നിൽ നിന്ന് അടുത്തതിലേക്ക് ആപ്പുകൾ സ്ട്രീം ചെയ്യാൻ <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="9050724687678157852">"നിങ്ങളുടെ ഫോണിലെ ഫോട്ടോകൾ, മീഡിയ, അറിയിപ്പുകൾ എന്നിവ ആക്സസ് ചെയ്യാൻ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> ഉപകരണത്തിന് വേണ്ടി <xliff:g id="APP_NAME">%1$s</xliff:g> അനുമതി അഭ്യർത്ഥിക്കുന്നു"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"ഉപകരണം"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"അനുവദിക്കുക"</string>
diff --git a/packages/CompanionDeviceManager/res/values-mn/strings.xml b/packages/CompanionDeviceManager/res/values-mn/strings.xml
index 64b284dc..84a986f 100644
--- a/packages/CompanionDeviceManager/res/values-mn/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-mn/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Таны утасны аппуудыг дамжуулах"</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="7380294597268573523">"<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="5977509499890099">"Таны төхөөрөмжүүд хооронд апп дамжуулахын тулд <xliff:g id="APP_NAME">%1$s</xliff:g> таны <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Зураг болон медиа"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play үйлчилгээ"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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="9050724687678157852">"Таны утасны зураг, медиа болон мэдэгдэлд хандахын тулд <xliff:g id="APP_NAME">%1$s</xliff:g> таны <xliff:g id="DEVICE_TYPE">%2$s</xliff:g>-н өмнөөс зөвшөөрөл хүсэж байна"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"төхөөрөмж"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Зөвшөөрөх"</string>
diff --git a/packages/CompanionDeviceManager/res/values-mr/strings.xml b/packages/CompanionDeviceManager/res/values-mr/strings.xml
index a070e61..656dbff 100644
--- a/packages/CompanionDeviceManager/res/values-mr/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-mr/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"फोनवरील ॲप्स स्ट्रीम करा"</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="7380294597268573523">"तुमच्या फोनमधील फोटो, मीडिया आणि सूचना ॲक्सेस करण्यासाठी <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="5977509499890099">"तुमच्या डिव्हाइसदरम्यान ॲप्स स्ट्रीम करण्यासाठी <xliff:g id="APP_NAME">%1$s</xliff:g> हे तुमच्या <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"फोटो आणि मीडिया"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play सेवा"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"तुमच्या डिव्हाइसदरम्यान ॲप्स स्ट्रीम करण्यासाठी <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="9050724687678157852">"तुमच्या फोनमधील फोटो, मीडिया आणि सूचना ॲक्सेस करण्यासाठी <xliff:g id="APP_NAME">%1$s</xliff:g> हे तुमच्या <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> च्या वतीने परवानगीची विनंती करत आहे"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"डिव्हाइस"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"अनुमती द्या"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ms/strings.xml b/packages/CompanionDeviceManager/res/values-ms/strings.xml
index e6932e1..83b0ac8 100644
--- a/packages/CompanionDeviceManager/res/values-ms/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ms/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Strim apl telefon 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="7380294597268573523">"<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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Foto dan media"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Perkhidmatan Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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_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="profile_name_generic" msgid="6851028682723034988">"peranti"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Benarkan"</string>
diff --git a/packages/CompanionDeviceManager/res/values-my/strings.xml b/packages/CompanionDeviceManager/res/values-my/strings.xml
index 778f7be..1362ddf 100644
--- a/packages/CompanionDeviceManager/res/values-my/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-my/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"သင့်ဖုန်းရှိအက်ပ်များကို တိုက်ရိုက်လွှင့်နိုင်သည်"</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="7380294597268573523">"<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="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> သည် သင်၏စက်များအကြား အက်ပ်များတိုက်ရိုက်လွှင့်ရန် <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"ဓာတ်ပုံနှင့် မီဒီယာများ"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play ဝန်ဆောင်မှုများ"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> သည် သင့်ဖုန်း၏ ဓာတ်ပုံ၊ မီဒီယာနှင့် အကြောင်းကြားချက်များသုံးရန် <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> ကိုယ်စား ခွင့်ပြုချက်တောင်းနေသည်"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"စက်"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"ခွင့်ပြုရန်"</string>
diff --git a/packages/CompanionDeviceManager/res/values-nb/strings.xml b/packages/CompanionDeviceManager/res/values-nb/strings.xml
index 274b1a9..0852031 100644
--- a/packages/CompanionDeviceManager/res/values-nb/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-nb/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Strøm appene på telefonen"</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="7380294597268573523">"<xliff:g id="APP_NAME">%1$s</xliff:g> ber om tillatelse på vegne av <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> for å få tilgang til bilder, medier og varsler på telefonen din"</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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Bilder og medier"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play-tjenester"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<xliff:g id="APP_NAME">%1$s</xliff:g> ber om tillatelse på vegne av <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> for å strømme apper mellom enhetene dine"</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="profile_name_generic" msgid="6851028682723034988">"enhet"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Tillat"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ne/strings.xml b/packages/CompanionDeviceManager/res/values-ne/strings.xml
index ac3338e..5d858b8 100644
--- a/packages/CompanionDeviceManager/res/values-ne/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ne/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"आफ्नो फोनका एपहरू प्रयोग गर्नुहोस्"</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="7380294597268573523">"<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="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> तपाईंको डिभाइस <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"फोटो र मिडिया"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play services"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> तपाईंको डिभाइस <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> को तर्फबाट तपाईंको फोनमा भएका फोटो, मिडिया र सूचनाहरू हेर्ने तथा प्रयोग गर्ने अनुमति माग्दै छ"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"यन्त्र"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"अनुमति दिनुहोस्"</string>
diff --git a/packages/CompanionDeviceManager/res/values-nl/strings.xml b/packages/CompanionDeviceManager/res/values-nl/strings.xml
index 3eb49c5..31b5903 100644
--- a/packages/CompanionDeviceManager/res/values-nl/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-nl/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"De apps van je telefoon streamen"</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="7380294597268573523">"<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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Foto\'s en media"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play-services"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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_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="profile_name_generic" msgid="6851028682723034988">"apparaat"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Toestaan"</string>
diff --git a/packages/CompanionDeviceManager/res/values-or/strings.xml b/packages/CompanionDeviceManager/res/values-or/strings.xml
index b9c5434..f87067d 100644
--- a/packages/CompanionDeviceManager/res/values-or/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-or/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"ଆପଣଙ୍କ ଫୋନର ଆପ୍ସକୁ ଷ୍ଟ୍ରିମ କରନ୍ତୁ"</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="7380294597268573523">"ଆପଣଙ୍କ ଫୋନର ଫଟୋ, ମିଡିଆ ଏବଂ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଆକ୍ସେସ କରିବା ପାଇଁ <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="5977509499890099">"ଆପଣଙ୍କ ଡିଭାଇସଗୁଡ଼ିକ ମଧ୍ୟରେ ଆପ୍ସକୁ ଷ୍ଟ୍ରିମ କରିବା ପାଇଁ <xliff:g id="APP_NAME">%1$s</xliff:g> ଆପଣଙ୍କର <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"ଫଟୋ ଏବଂ ମିଡିଆ"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play ସେବାଗୁଡ଼ିକ"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"ଆପଣଙ୍କ ଡିଭାଇସଗୁଡ଼ିକ ମଧ୍ୟରେ ଆପ୍ସକୁ ଷ୍ଟ୍ରିମ କରିବା ପାଇଁ <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="9050724687678157852">"ଆପଣଙ୍କ ଫୋନର ଫଟୋ, ମିଡିଆ ଏବଂ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଆକ୍ସେସ କରିବା ପାଇଁ <xliff:g id="APP_NAME">%1$s</xliff:g> ଆପଣଙ୍କର <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> ତରଫରୁ ଅନୁମତି ପାଇଁ ଅନୁରୋଧ କରୁଛି"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"ଡିଭାଇସ୍"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"ଅନୁମତି ଦିଅନ୍ତୁ"</string>
diff --git a/packages/CompanionDeviceManager/res/values-pa/strings.xml b/packages/CompanionDeviceManager/res/values-pa/strings.xml
index 3d35e55..0d25194 100644
--- a/packages/CompanionDeviceManager/res/values-pa/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-pa/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"ਆਪਣੇ ਫ਼ੋਨ ਦੀਆਂ ਐਪਾਂ ਨੂੰ ਸਟ੍ਰੀਮ ਕਰੋ"</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="7380294597268573523">"<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="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਤੁਹਾਡੇ <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"ਫ਼ੋਟੋਆਂ ਅਤੇ ਮੀਡੀਆ"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play ਸੇਵਾਵਾਂ"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਤੁਹਾਡੇ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> ਦੀ ਤਰਫ਼ੋਂ ਤੁਹਾਡੇ ਫ਼ੋਨ ਦੀਆਂ ਫ਼ੋਟੋਆਂ, ਮੀਡੀਆ ਅਤੇ ਸੂਚਨਾਵਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਮੰਗ ਰਹੀ ਹੈ"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"ਡੀਵਾਈਸ"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"ਆਗਿਆ ਦਿਓ"</string>
diff --git a/packages/CompanionDeviceManager/res/values-pl/strings.xml b/packages/CompanionDeviceManager/res/values-pl/strings.xml
index 08f6880..10135667 100644
--- a/packages/CompanionDeviceManager/res/values-pl/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-pl/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Odtwarzaj strumieniowo aplikacje z telefonu"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"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="helper_title_app_streaming" msgid="4151687003439969765">"Usługi na innym urządzeniu"</string>
-    <string name="helper_summary_app_streaming" msgid="7380294597268573523">"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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Zdjęcia i multimedia"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Usługi Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"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 aplikacji między urządzeniami"</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="profile_name_generic" msgid="6851028682723034988">"urządzenie"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Zezwól"</string>
diff --git a/packages/CompanionDeviceManager/res/values-pt-rBR/strings.xml b/packages/CompanionDeviceManager/res/values-pt-rBR/strings.xml
index 09050cb..55d2b4d 100644
--- a/packages/CompanionDeviceManager/res/values-pt-rBR/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-pt-rBR/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Fazer transmissão dos apps no seu smartphone"</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="7380294597268573523">"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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Fotos e mídia"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play Services"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"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_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="profile_name_generic" msgid="6851028682723034988">"dispositivo"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Permitir"</string>
diff --git a/packages/CompanionDeviceManager/res/values-pt-rPT/strings.xml b/packages/CompanionDeviceManager/res/values-pt-rPT/strings.xml
index 8d84eb7..1ed65bd 100644
--- a/packages/CompanionDeviceManager/res/values-pt-rPT/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-pt-rPT/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Faça stream das apps do telemóvel"</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="7380294597268573523">"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, conteúdo multimédia e notificações do seu telemóvel"</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="title_automotive_projection" msgid="3296005598978412847"></string>
     <string name="summary_automotive_projection" msgid="8683801274662496164"></string>
     <string name="title_computer" msgid="4693714143506569253">"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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Fotos e multimédia"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Serviços do Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"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_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="profile_name_generic" msgid="6851028682723034988">"dispositivo"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Permitir"</string>
diff --git a/packages/CompanionDeviceManager/res/values-pt/strings.xml b/packages/CompanionDeviceManager/res/values-pt/strings.xml
index 09050cb..55d2b4d 100644
--- a/packages/CompanionDeviceManager/res/values-pt/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-pt/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Fazer transmissão dos apps no seu smartphone"</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="7380294597268573523">"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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Fotos e mídia"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play Services"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"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_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="profile_name_generic" msgid="6851028682723034988">"dispositivo"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Permitir"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ro/strings.xml b/packages/CompanionDeviceManager/res/values-ro/strings.xml
index b6f8ff7..276ebfd 100644
--- a/packages/CompanionDeviceManager/res/values-ro/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ro/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Să redea în stream aplicațiile telefonului"</string>
     <string name="title_app_streaming" msgid="2270331024626446950">"Permiteți ca &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="7380294597268573523">"<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_app_streaming" msgid="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> solicită permisiunea pentru <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> de a reda în stream aplicații între dispozitivele dvs."</string>
     <string name="title_automotive_projection" msgid="3296005598978412847"></string>
     <string name="summary_automotive_projection" msgid="8683801274662496164"></string>
     <string name="title_computer" msgid="4693714143506569253">"Permiteți ca &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; să acceseze aceste informații de pe telefon"</string>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Fotografii și media"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Servicii Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<xliff:g id="APP_NAME">%1$s</xliff:g> solicită permisiunea pentru <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> de a reda în stream aplicații între dispozitivele dvs."</string>
+    <string name="helper_summary_computer" msgid="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> solicită permisiunea pentru <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> de a accesa fotografiile, conținutul media și notificările de pe telefon"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"dispozitiv"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Permiteți"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ru/strings.xml b/packages/CompanionDeviceManager/res/values-ru/strings.xml
index 492e345..a0e09c9 100644
--- a/packages/CompanionDeviceManager/res/values-ru/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ru/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Трансляция приложений с телефона."</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="7380294597268573523">"Приложение \"<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="5977509499890099">"Приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" запрашивает разрешение от имени вашего устройства <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Фотографии и медиафайлы"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Сервисы Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"Приложение \"<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="9050724687678157852">"Приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" запрашивает разрешение от имени вашего устройства <xliff:g id="DEVICE_TYPE">%2$s</xliff:g>, чтобы получить доступ к фотографиям, медиаконтенту и уведомлениям на телефоне."</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"устройство"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Разрешить"</string>
diff --git a/packages/CompanionDeviceManager/res/values-si/strings.xml b/packages/CompanionDeviceManager/res/values-si/strings.xml
index 79c3651..b2451e9 100644
--- a/packages/CompanionDeviceManager/res/values-si/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-si/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"ඔබගේ දුරකථනයේ යෙදුම් ප්‍රවාහ කරන්න"</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="7380294597268573523">"<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="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> ඔබගේ <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"ඡායාරූප සහ මාධ්‍ය"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play සේවා"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> ඔබගේ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> වෙනුවෙන් ඔබගේ දුරකථනයෙහි ඡායාරූප, මාධ්‍ය සහ දැනුම්දීම් වෙත ප්‍රවේශ වීමට අවසරය ඉල්ලමින් සිටියි"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"උපාංගය"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"ඉඩ දෙන්න"</string>
diff --git a/packages/CompanionDeviceManager/res/values-sk/strings.xml b/packages/CompanionDeviceManager/res/values-sk/strings.xml
index 83df578..fa7155e 100644
--- a/packages/CompanionDeviceManager/res/values-sk/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sk/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Streamovať aplikácie telefónu"</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="7380294597268573523">"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_app_streaming" msgid="5977509499890099">"<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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Fotky a médiá"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Služby Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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_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="profile_name_generic" msgid="6851028682723034988">"zariadenie"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Povoliť"</string>
diff --git a/packages/CompanionDeviceManager/res/values-sl/strings.xml b/packages/CompanionDeviceManager/res/values-sl/strings.xml
index 883bd0b..9ba67c4 100644
--- a/packages/CompanionDeviceManager/res/values-sl/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sl/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Pretočno predvajanje aplikacij telefona"</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="7380294597268573523">"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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Fotografije in predstavnost"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Storitve Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"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_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="profile_name_generic" msgid="6851028682723034988">"naprava"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Dovoli"</string>
diff --git a/packages/CompanionDeviceManager/res/values-sq/strings.xml b/packages/CompanionDeviceManager/res/values-sq/strings.xml
index 3e6933c..a3258e08 100644
--- a/packages/CompanionDeviceManager/res/values-sq/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sq/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Transmeto aplikacionet e telefonit tënd"</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="7380294597268573523">"\"<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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Fotografitë dhe media"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Shërbimet e Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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_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="profile_name_generic" msgid="6851028682723034988">"pajisja"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Lejo"</string>
diff --git a/packages/CompanionDeviceManager/res/values-sr/strings.xml b/packages/CompanionDeviceManager/res/values-sr/strings.xml
index f9a1e02..354ff2c 100644
--- a/packages/CompanionDeviceManager/res/values-sr/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sr/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Стримујте апликације на телефону"</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="7380294597268573523">"Апликација <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="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> захтева дозволу у име уређаја <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Слике и медији"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play услуге"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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="9050724687678157852">"Апликација <xliff:g id="APP_NAME">%1$s</xliff:g> захтева дозволу у име уређаја <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> за приступ сликама, медијском садржају и обавештењима са телефона"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"уређај"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Дозволи"</string>
diff --git a/packages/CompanionDeviceManager/res/values-sv/strings.xml b/packages/CompanionDeviceManager/res/values-sv/strings.xml
index b4df616..cddd434 100644
--- a/packages/CompanionDeviceManager/res/values-sv/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sv/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Streama telefonens appar"</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="7380294597268573523">"<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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Foton och media"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play-tjänster"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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_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="profile_name_generic" msgid="6851028682723034988">"enhet"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Tillåt"</string>
diff --git a/packages/CompanionDeviceManager/res/values-sw/strings.xml b/packages/CompanionDeviceManager/res/values-sw/strings.xml
index 6b5ca21..24465fc 100644
--- a/packages/CompanionDeviceManager/res/values-sw/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sw/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Tiririsha programu za simu 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="7380294597268573523">"<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 kufikia picha, maudhui na arifa za simu yako"</string>
+    <string name="helper_summary_app_streaming" msgid="5977509499890099">"<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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Picha na maudhui"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Huduma za Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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 kutiririsha programu kati ya vifaa vyako"</string>
+    <string name="helper_summary_computer" msgid="9050724687678157852">"<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="profile_name_generic" msgid="6851028682723034988">"kifaa"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Ruhusu"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ta/strings.xml b/packages/CompanionDeviceManager/res/values-ta/strings.xml
index 4408e65..da2ea44 100644
--- a/packages/CompanionDeviceManager/res/values-ta/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ta/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"உங்கள் மொபைலின் ஆப்ஸை ஸ்ட்ரீம் செய்யலாம்"</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="7380294597268573523">"உங்கள் மொபைலில் உள்ள படங்கள், மீடியா, அறிவிப்புகள் ஆகியவற்றை அணுக உங்கள் <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="5977509499890099">"உங்கள் சாதனங்களுக்கு இடையே ஆப்ஸை ஸ்ட்ரீம் செய்ய உங்கள் <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"படங்கள் மற்றும் மீடியா"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play சேவைகள்"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"உங்கள் சாதனங்களுக்கு இடையே ஆப்ஸை ஸ்ட்ரீம் செய்ய உங்கள் <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="9050724687678157852">"உங்கள் மொபைலில் உள்ள படங்கள், மீடியா, அறிவிப்புகள் ஆகியவற்றை அணுக உங்கள் <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> சார்பாக <xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸ் அனுமதியைக் கோருகிறது"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"சாதனம்"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"அனுமதி"</string>
diff --git a/packages/CompanionDeviceManager/res/values-te/strings.xml b/packages/CompanionDeviceManager/res/values-te/strings.xml
index d0fa24d..7440079 100644
--- a/packages/CompanionDeviceManager/res/values-te/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-te/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"మీ ఫోన్ యాప్‌లను స్ట్రీమ్ చేయండి"</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="7380294597268573523">"<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="5977509499890099">"మీ పరికరాల మధ్య యాప్‌లను స్ట్రీమ్ చేయడానికి <xliff:g id="APP_NAME">%1$s</xliff:g> మీ <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"ఫోటోలు, మీడియా"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play సర్వీసులు"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"మీ పరికరాల మధ్య యాప్‌లను స్ట్రీమ్ చేయడానికి <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="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> మీ ఫోన్‌లోని ఫోటోలను, మీడియాను, ఇంకా నోటిఫికేషన్‌లను యాక్సెస్ చేయడానికి మీ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> తరఫున అనుమతిని రిక్వెస్ట్ చేస్తోంది"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"పరికరం"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"అనుమతించండి"</string>
diff --git a/packages/CompanionDeviceManager/res/values-th/strings.xml b/packages/CompanionDeviceManager/res/values-th/strings.xml
index e3174f8..fb54fe9 100644
--- a/packages/CompanionDeviceManager/res/values-th/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-th/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"สตรีมแอปของโทรศัพท์คุณ"</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="7380294597268573523">"<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="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> กำลังขอสิทธิ์ในนามของ <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"รูปภาพและสื่อ"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"บริการ Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> กำลังขอสิทธิ์ในนามของ <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> เพื่อเข้าถึงรูปภาพ สื่อ และการแจ้งเตือนในโทรศัพท์ของคุณ"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"อุปกรณ์"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"อนุญาต"</string>
diff --git a/packages/CompanionDeviceManager/res/values-tl/strings.xml b/packages/CompanionDeviceManager/res/values-tl/strings.xml
index 9c49c5c..d7e9ab6 100644
--- a/packages/CompanionDeviceManager/res/values-tl/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-tl/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"I-stream ang mga app ng iyong telepono"</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="7380294597268573523">"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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Mga larawan at media"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Mga serbisyo ng Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"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_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="profile_name_generic" msgid="6851028682723034988">"device"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Payagan"</string>
diff --git a/packages/CompanionDeviceManager/res/values-tr/strings.xml b/packages/CompanionDeviceManager/res/values-tr/strings.xml
index bdad641..0688ff1 100644
--- a/packages/CompanionDeviceManager/res/values-tr/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-tr/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Telefonunuzun uygulamalarını yayınlama"</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="7380294597268573523">"<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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Fotoğraflar ve medya"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play hizmetleri"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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_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="profile_name_generic" msgid="6851028682723034988">"cihaz"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"İzin ver"</string>
diff --git a/packages/CompanionDeviceManager/res/values-uk/strings.xml b/packages/CompanionDeviceManager/res/values-uk/strings.xml
index 760255b..f5d9086 100644
--- a/packages/CompanionDeviceManager/res/values-uk/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-uk/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Транслювати додатки телефона"</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="7380294597268573523">"Додаток <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="5977509499890099">"Додаток <xliff:g id="APP_NAME">%1$s</xliff:g> від імені вашого пристрою <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Фотографії та медіафайли"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Сервіси Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"Додаток <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="9050724687678157852">"Додаток <xliff:g id="APP_NAME">%1$s</xliff:g> від імені вашого пристрою <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> запитує дозвіл на доступ до фотографій, медіафайлів і сповіщень вашого телефона"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"пристрій"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Дозволити"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ur/strings.xml b/packages/CompanionDeviceManager/res/values-ur/strings.xml
index a311bd4..5428210 100644
--- a/packages/CompanionDeviceManager/res/values-ur/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ur/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"اپنے فون کی ایپس کی سلسلہ بندی کریں"</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="7380294597268573523">"<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="5977509499890099">"<xliff:g id="APP_NAME">%1$s</xliff:g> ایپ آپ کے <xliff:g id="DEVICE_TYPE">%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">"‏اپنے فون سے اس معلومات تک رسائی حاصل Allow &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; کرنے کی اجازت دیں"</string>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"تصاویر اور میڈیا"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"‏Google Play سروسز"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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="9050724687678157852">"<xliff:g id="APP_NAME">%1$s</xliff:g> ایپ آپ کے <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> کی جانب سے آپ کے فون کی تصاویر، میڈیا اور اطلاعات تک رسائی کی اجازت طلب کر رہی ہے"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"آلہ"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"اجازت دیں"</string>
diff --git a/packages/CompanionDeviceManager/res/values-uz/strings.xml b/packages/CompanionDeviceManager/res/values-uz/strings.xml
index f1c162a..9e3a981 100644
--- a/packages/CompanionDeviceManager/res/values-uz/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-uz/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Telefondagi ilovalarni translatsiya qilish"</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="7380294597268573523">"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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Suratlar va media"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play xizmatlari"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"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_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="profile_name_generic" msgid="6851028682723034988">"qurilma"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Ruxsat"</string>
diff --git a/packages/CompanionDeviceManager/res/values-vi/strings.xml b/packages/CompanionDeviceManager/res/values-vi/strings.xml
index 5c7d600..4306614 100644
--- a/packages/CompanionDeviceManager/res/values-vi/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-vi/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Truyền các ứng dụng trên điện thoại 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="7380294597268573523">"<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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Ảnh và nội dung nghe nhìn"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Dịch vụ Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"<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_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="profile_name_generic" msgid="6851028682723034988">"thiết bị"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Cho phép"</string>
diff --git a/packages/CompanionDeviceManager/res/values-zh-rCN/strings.xml b/packages/CompanionDeviceManager/res/values-zh-rCN/strings.xml
index 5a1017f..7fc4f88 100644
--- a/packages/CompanionDeviceManager/res/values-zh-rCN/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-zh-rCN/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"流式传输手机上的应用"</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="7380294597268573523">"“<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="5977509499890099">"“<xliff:g id="APP_NAME">%1$s</xliff:g>”正代表您的<xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"照片和媒体内容"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play 服务"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"“<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="9050724687678157852">"“<xliff:g id="APP_NAME">%1$s</xliff:g>”正代表您的<xliff:g id="DEVICE_TYPE">%2$s</xliff:g>请求访问您手机上的照片、媒体内容和通知"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"设备"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"允许"</string>
diff --git a/packages/CompanionDeviceManager/res/values-zh-rHK/strings.xml b/packages/CompanionDeviceManager/res/values-zh-rHK/strings.xml
index 4748ece..d574cec 100644
--- a/packages/CompanionDeviceManager/res/values-zh-rHK/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-zh-rHK/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"串流播放手機應用程式內容"</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="7380294597268573523">"「<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="5977509499890099">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」正在代表 <xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"相片和媒體"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play 服務"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"「<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="9050724687678157852">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」正在代表 <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> 要求權限,以便存取手機上的相片、媒體和通知"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"裝置"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"允許"</string>
diff --git a/packages/CompanionDeviceManager/res/values-zh-rTW/strings.xml b/packages/CompanionDeviceManager/res/values-zh-rTW/strings.xml
index f41896f..18b8ca9 100644
--- a/packages/CompanionDeviceManager/res/values-zh-rTW/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-zh-rTW/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"串流傳輸手機應用程式內容"</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="7380294597268573523">"「<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="5977509499890099">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」正在代表你的「<xliff:g id="DEVICE_TYPE">%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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"相片和媒體"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Google Play 服務"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"「<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="9050724687678157852">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」正在代表你的「<xliff:g id="DEVICE_TYPE">%2$s</xliff:g>」要求必要權限,以便存取手機上的相片、媒體和通知"</string>
     <string name="profile_name_generic" msgid="6851028682723034988">"裝置"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"允許"</string>
diff --git a/packages/CompanionDeviceManager/res/values-zu/strings.xml b/packages/CompanionDeviceManager/res/values-zu/strings.xml
index 87ed7e6..2bebca1 100644
--- a/packages/CompanionDeviceManager/res/values-zu/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-zu/strings.xml
@@ -25,7 +25,7 @@
     <string name="permission_apps_summary" msgid="798718816711515431">"Sakaza ama-app wefoni 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="7380294597268573523">"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_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="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>
@@ -35,7 +35,7 @@
     <string name="permission_storage" msgid="6831099350839392343">"Izithombe nemidiya"</string>
     <string name="permission_storage_summary" msgid="3918240895519506417"></string>
     <string name="helper_title_computer" msgid="4671071173916176037">"Amasevisi we-Google Play"</string>
-    <string name="helper_summary_computer" msgid="1676407599909474428">"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_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="profile_name_generic" msgid="6851028682723034988">"idivayisi"</string>
     <string name="summary_generic" msgid="2346762210105903720"></string>
     <string name="consent_yes" msgid="8344487259618762872">"Vumela"</string>
diff --git a/packages/CompanionDeviceManager/res/values/strings.xml b/packages/CompanionDeviceManager/res/values/strings.xml
index a389bfc..cb85ae4 100644
--- a/packages/CompanionDeviceManager/res/values/strings.xml
+++ b/packages/CompanionDeviceManager/res/values/strings.xml
@@ -48,7 +48,7 @@
     <string name="helper_title_app_streaming">Cross-device services</string>
 
     <!-- Description of the helper dialog for APP_STREAMING profile. [CHAR LIMIT=NONE] -->
-    <string name="helper_summary_app_streaming"><xliff:g id="app_name" example="GMS">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="device_type" example="Chromebook">%2$s</xliff:g> to access your phone\u2019s photos, media, and notifications</string>
+    <string name="helper_summary_app_streaming"><xliff:g id="app_name" example="GMS">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="device_type" example="Chromebook">%2$s</xliff:g> to stream apps between your devices</string>
 
     <!-- ================= DEVICE_PROFILE_AUTOMOTIVE_PROJECTION ================= -->
 
@@ -82,7 +82,7 @@
     <string name="helper_title_computer">Google Play services</string>
 
     <!-- Description of the helper dialog for COMPUTER profile. [CHAR LIMIT=NONE] -->
-    <string name="helper_summary_computer"> <xliff:g id="app_name" example="GMS">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="device_type" example="Chromebook">%2$s</xliff:g> to stream apps between your devices</string>
+    <string name="helper_summary_computer"><xliff:g id="app_name" example="GMS">%1$s</xliff:g> is requesting permission on behalf of your <xliff:g id="device_type" example="Chromebook">%2$s</xliff:g> to access your phone\u2019s photos, media, and notifications</string>
 
     <!-- ================= null profile ================= -->
 
diff --git a/packages/SettingsLib/ActionButtonsPreference/res/layout-v31/settingslib_action_buttons.xml b/packages/SettingsLib/ActionButtonsPreference/res/layout-v31/settingslib_action_buttons.xml
index a596a9a..7c3f5a5 100644
--- a/packages/SettingsLib/ActionButtonsPreference/res/layout-v31/settingslib_action_buttons.xml
+++ b/packages/SettingsLib/ActionButtonsPreference/res/layout-v31/settingslib_action_buttons.xml
@@ -28,8 +28,7 @@
         style="@style/SettingsLibActionButton"
         android:layout_width="0dp"
         android:layout_height="match_parent"
-        android:layout_weight="1"
-        android:hyphenationFrequency="normalFast"/>
+        android:layout_weight="1"/>
 
     <View
         android:id="@+id/divider1"
@@ -44,8 +43,7 @@
         style="@style/SettingsLibActionButton"
         android:layout_width="0dp"
         android:layout_height="match_parent"
-        android:layout_weight="1"
-        android:hyphenationFrequency="normalFast"/>
+        android:layout_weight="1"/>
 
     <View
         android:id="@+id/divider2"
@@ -60,8 +58,7 @@
         style="@style/SettingsLibActionButton"
         android:layout_width="0dp"
         android:layout_height="match_parent"
-        android:layout_weight="1"
-        android:hyphenationFrequency="normalFast"/>
+        android:layout_weight="1"/>
 
     <View
         android:id="@+id/divider3"
@@ -76,6 +73,5 @@
         style="@style/SettingsLibActionButton"
         android:layout_width="0dp"
         android:layout_height="match_parent"
-        android:layout_weight="1"
-        android:hyphenationFrequency="normalFast"/>
+        android:layout_weight="1"/>
 </LinearLayout>
diff --git a/packages/SettingsLib/ActionButtonsPreference/res/layout-v33/settingslib_action_buttons.xml b/packages/SettingsLib/ActionButtonsPreference/res/layout-v33/settingslib_action_buttons.xml
new file mode 100644
index 0000000..b4640ee
--- /dev/null
+++ b/packages/SettingsLib/ActionButtonsPreference/res/layout-v33/settingslib_action_buttons.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT 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:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_margin="8dp"
+    android:paddingHorizontal="8dp"
+    android:orientation="horizontal">
+
+    <Button
+        android:id="@+id/button1"
+        style="@style/SettingsLibActionButton"
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_weight="1"
+        android:lineBreakWordStyle="phrase"
+        android:hyphenationFrequency="normalFast"/>
+
+    <View
+        android:id="@+id/divider1"
+        android:layout_width="1dp"
+        android:layout_height="match_parent"
+        android:paddingHorizontal="4dp"
+        android:visibility="gone"
+        android:background="?android:colorBackground" />
+
+    <Button
+        android:id="@+id/button2"
+        style="@style/SettingsLibActionButton"
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_weight="1"
+        android:lineBreakWordStyle="phrase"
+        android:hyphenationFrequency="normalFast"/>
+
+    <View
+        android:id="@+id/divider2"
+        android:layout_width="1dp"
+        android:layout_height="match_parent"
+        android:paddingHorizontal="4dp"
+        android:visibility="gone"
+        android:background="?android:colorBackground" />
+
+    <Button
+        android:id="@+id/button3"
+        style="@style/SettingsLibActionButton"
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_weight="1"
+        android:lineBreakWordStyle="phrase"
+        android:hyphenationFrequency="normalFast"/>
+
+    <View
+        android:id="@+id/divider3"
+        android:layout_width="1dp"
+        android:layout_height="match_parent"
+        android:paddingHorizontal="4dp"
+        android:visibility="gone"
+        android:background="?android:colorBackground" />
+
+    <Button
+        android:id="@+id/button4"
+        style="@style/SettingsLibActionButton"
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_weight="1"
+        android:lineBreakWordStyle="phrase"
+        android:hyphenationFrequency="normalFast"/>
+</LinearLayout>
diff --git a/packages/SettingsLib/ActivityEmbedding/AndroidManifest.xml b/packages/SettingsLib/ActivityEmbedding/AndroidManifest.xml
index 5ce08b7..2742558 100644
--- a/packages/SettingsLib/ActivityEmbedding/AndroidManifest.xml
+++ b/packages/SettingsLib/ActivityEmbedding/AndroidManifest.xml
@@ -16,7 +16,7 @@
 -->
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="com.android.settingslib.activityembedding">
+          package="com.android.settingslib.widget">
 
     <uses-sdk android:minSdkVersion="21" />
 
diff --git a/packages/SettingsLib/Android.bp b/packages/SettingsLib/Android.bp
index 9a80b02..87e61b5 100644
--- a/packages/SettingsLib/Android.bp
+++ b/packages/SettingsLib/Android.bp
@@ -50,6 +50,7 @@
         "SettingsLibTwoTargetPreference",
         "SettingsLibSettingsTransition",
         "SettingsLibButtonPreference",
+        "SettingsLibDeviceStateRotationLock",
         "setupdesign",
         "zxing-core-1.7",
     ],
diff --git a/packages/SettingsLib/AppPreference/res/layout-v33/preference_app.xml b/packages/SettingsLib/AppPreference/res/layout-v33/preference_app.xml
new file mode 100644
index 0000000..8975857
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/layout-v33/preference_app.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT 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:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="?android:attr/selectableItemBackground"
+    android:gravity="center_vertical"
+    android:minHeight="?android:attr/listPreferredItemHeightSmall"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
+
+    <LinearLayout
+        android:id="@+id/icon_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:gravity="start|center_vertical"
+        android:minWidth="@dimen/secondary_app_icon_size"
+        android:orientation="horizontal"
+        android:paddingEnd="16dp"
+        android:paddingTop="4dp"
+        android:paddingBottom="4dp">
+        <ImageView
+            android:id="@android:id/icon"
+            android:layout_width="@dimen/secondary_app_icon_size"
+            android:layout_height="@dimen/secondary_app_icon_size"/>
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:orientation="vertical"
+        android:paddingTop="16dp"
+        android:paddingBottom="16dp">
+
+        <TextView
+            android:id="@android:id/title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:ellipsize="marquee"
+            android:fadingEdge="horizontal"
+            android:maxLines="2"
+            android:hyphenationFrequency="normalFast"
+            android:lineBreakWordStyle="phrase"
+            android:textAppearance="?android:attr/textAppearanceListItem"/>
+
+        <TextView
+            android:id="@android:id/summary"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:textDirection="locale"
+            android:hyphenationFrequency="normalFast"
+            android:lineBreakWordStyle="phrase"
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:textColor="?android:attr/textColorSecondary"/>
+
+        <TextView
+            android:id="@+id/appendix"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:ellipsize="end"
+            android:maxLines="1"
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:textColor="?android:attr/textColorSecondary"
+            android:visibility="gone"/>
+
+        <ProgressBar
+            android:id="@android:id/progress"
+            style="?android:attr/progressBarStyleHorizontal"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="4dp"
+            android:max="100"
+            android:visibility="gone"/>
+    </LinearLayout>
+
+    <LinearLayout
+        android:id="@android:id/widget_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:gravity="center_vertical|end"
+        android:minWidth="@dimen/two_target_min_width"
+        android:orientation="vertical"/>
+
+</LinearLayout>
diff --git a/packages/SettingsLib/AppPreference/res/layout-v33/preference_app_header.xml b/packages/SettingsLib/AppPreference/res/layout-v33/preference_app_header.xml
new file mode 100644
index 0000000..3a219b90
--- /dev/null
+++ b/packages/SettingsLib/AppPreference/res/layout-v33/preference_app_header.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT 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="wrap_content"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:paddingBottom="16dp"
+    android:paddingTop="8dp"
+    android:clickable="false">
+
+    <TextView
+        android:id="@+id/apps_top_intro_text"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:textDirection="locale"
+        android:clickable="false"
+        android:longClickable="false"
+        android:hyphenationFrequency="normalFast"
+        android:lineBreakWordStyle="phrase"
+        android:textAppearance="@style/TextAppearance.TopIntroText" />
+
+</LinearLayout>
diff --git a/packages/SettingsLib/AppPreference/res/layout/preference_app.xml b/packages/SettingsLib/AppPreference/res/layout/preference_app.xml
index 12db901..e65f7de 100644
--- a/packages/SettingsLib/AppPreference/res/layout/preference_app.xml
+++ b/packages/SettingsLib/AppPreference/res/layout/preference_app.xml
@@ -55,7 +55,6 @@
             android:ellipsize="marquee"
             android:fadingEdge="horizontal"
             android:maxLines="2"
-            android:hyphenationFrequency="normalFast"
             android:textAppearance="?android:attr/textAppearanceListItem"/>
 
         <TextView
@@ -63,7 +62,6 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:textDirection="locale"
-            android:hyphenationFrequency="normalFast"
             android:textAppearance="?android:attr/textAppearanceSmall"
             android:textColor="?android:attr/textColorSecondary"/>
 
diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/AndroidManifest.xml b/packages/SettingsLib/CollapsingToolbarBaseActivity/AndroidManifest.xml
index 1c47f5f..244b367 100644
--- a/packages/SettingsLib/CollapsingToolbarBaseActivity/AndroidManifest.xml
+++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/AndroidManifest.xml
@@ -16,7 +16,7 @@
 -->
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="com.android.settingslib.collapsingtoolbar">
+          package="com.android.settingslib.widget">
 
     <uses-sdk android:minSdkVersion="29" />
 
diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/BasePreferencesFragment.java b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/BasePreferencesFragment.java
index 8ebbac3..3582897 100644
--- a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/BasePreferencesFragment.java
+++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/BasePreferencesFragment.java
@@ -20,6 +20,7 @@
 import androidx.preference.PreferenceFragmentCompat;
 
 import com.android.settingslib.utils.BuildCompatUtils;
+import com.android.settingslib.widget.R;
 
 import com.google.android.material.appbar.AppBarLayout;
 
diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarBaseActivity.java b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarBaseActivity.java
index 77d6583..8c8b478 100644
--- a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarBaseActivity.java
+++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarBaseActivity.java
@@ -27,6 +27,7 @@
 import androidx.fragment.app.FragmentActivity;
 
 import com.android.settingslib.utils.BuildCompatUtils;
+import com.android.settingslib.widget.R;
 
 import com.google.android.material.appbar.AppBarLayout;
 import com.google.android.material.appbar.CollapsingToolbarLayout;
diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarDelegate.java b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarDelegate.java
index 31e8cc7..f4af9c7 100644
--- a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarDelegate.java
+++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarDelegate.java
@@ -19,6 +19,7 @@
 import static android.text.Layout.HYPHENATION_FREQUENCY_NORMAL_FAST;
 
 import android.app.ActionBar;
+import android.graphics.text.LineBreakConfig;
 import android.os.Build;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -30,6 +31,8 @@
 import androidx.annotation.Nullable;
 import androidx.coordinatorlayout.widget.CoordinatorLayout;
 
+import com.android.settingslib.widget.R;
+
 import com.google.android.material.appbar.AppBarLayout;
 import com.google.android.material.appbar.CollapsingToolbarLayout;
 
@@ -86,6 +89,12 @@
             mCollapsingToolbarLayout.setLineSpacingMultiplier(TOOLBAR_LINE_SPACING_MULTIPLIER);
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                 mCollapsingToolbarLayout.setHyphenationFrequency(HYPHENATION_FREQUENCY_NORMAL_FAST);
+                mCollapsingToolbarLayout.setStaticLayoutBuilderConfigurer(builder ->
+                        builder.setLineBreakConfig(
+                                new LineBreakConfig.Builder()
+                                        .setLineBreakWordStyle(
+                                                LineBreakConfig.LINE_BREAK_WORD_STYLE_PHRASE)
+                                        .build()));
             }
         }
         disableCollapsingToolbarLayoutScrollingBehavior();
diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/widget/CollapsingCoordinatorLayout.java b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/widget/CollapsingCoordinatorLayout.java
index 1ead2f3..522de93 100644
--- a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/widget/CollapsingCoordinatorLayout.java
+++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/widget/CollapsingCoordinatorLayout.java
@@ -22,6 +22,7 @@
 import android.app.Activity;
 import android.content.Context;
 import android.content.res.TypedArray;
+import android.graphics.text.LineBreakConfig;
 import android.os.Build;
 import android.text.TextUtils;
 import android.util.AttributeSet;
@@ -36,7 +37,7 @@
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.coordinatorlayout.widget.CoordinatorLayout;
 
-import com.android.settingslib.collapsingtoolbar.R;
+import com.android.settingslib.widget.R;
 
 import com.google.android.material.appbar.AppBarLayout;
 import com.google.android.material.appbar.CollapsingToolbarLayout;
@@ -110,6 +111,12 @@
             mCollapsingToolbarLayout.setLineSpacingMultiplier(TOOLBAR_LINE_SPACING_MULTIPLIER);
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                 mCollapsingToolbarLayout.setHyphenationFrequency(HYPHENATION_FREQUENCY_NORMAL_FAST);
+                mCollapsingToolbarLayout.setStaticLayoutBuilderConfigurer(builder ->
+                        builder.setLineBreakConfig(
+                                new LineBreakConfig.Builder()
+                                        .setLineBreakWordStyle(
+                                                LineBreakConfig.LINE_BREAK_WORD_STYLE_PHRASE)
+                                        .build()));
             }
             if (!TextUtils.isEmpty(mToolbarTitle)) {
                 mCollapsingToolbarLayout.setTitle(mToolbarTitle);
diff --git a/packages/SettingsLib/DeviceStateRotationLock/Android.bp b/packages/SettingsLib/DeviceStateRotationLock/Android.bp
new file mode 100644
index 0000000..c642bd1
--- /dev/null
+++ b/packages/SettingsLib/DeviceStateRotationLock/Android.bp
@@ -0,0 +1,16 @@
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "frameworks_base_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["frameworks_base_license"],
+}
+
+android_library {
+    name: "SettingsLibDeviceStateRotationLock",
+
+    srcs: ["src/**/*.java"],
+
+    min_sdk_version: "21",
+}
diff --git a/packages/SettingsLib/DeviceStateRotationLock/AndroidManifest.xml b/packages/SettingsLib/DeviceStateRotationLock/AndroidManifest.xml
new file mode 100644
index 0000000..bce6599
--- /dev/null
+++ b/packages/SettingsLib/DeviceStateRotationLock/AndroidManifest.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.
+  -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.settingslib.devicestate">
+
+</manifest>
diff --git a/packages/SettingsLib/src/com/android/settingslib/devicestate/AndroidSecureSettings.java b/packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/AndroidSecureSettings.java
similarity index 100%
rename from packages/SettingsLib/src/com/android/settingslib/devicestate/AndroidSecureSettings.java
rename to packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/AndroidSecureSettings.java
diff --git a/packages/SettingsLib/src/com/android/settingslib/devicestate/DeviceStateRotationLockSettingsManager.java b/packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/DeviceStateRotationLockSettingsManager.java
similarity index 100%
rename from packages/SettingsLib/src/com/android/settingslib/devicestate/DeviceStateRotationLockSettingsManager.java
rename to packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/DeviceStateRotationLockSettingsManager.java
diff --git a/packages/SettingsLib/src/com/android/settingslib/devicestate/SecureSettings.java b/packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/SecureSettings.java
similarity index 100%
rename from packages/SettingsLib/src/com/android/settingslib/devicestate/SecureSettings.java
rename to packages/SettingsLib/DeviceStateRotationLock/src/com.android.settingslib.devicestate/SecureSettings.java
diff --git a/packages/SettingsLib/FooterPreference/res/layout-v31/preference_footer.xml b/packages/SettingsLib/FooterPreference/res/layout-v31/preference_footer.xml
index 2c1fdd4..42700b3 100644
--- a/packages/SettingsLib/FooterPreference/res/layout-v31/preference_footer.xml
+++ b/packages/SettingsLib/FooterPreference/res/layout-v31/preference_footer.xml
@@ -53,7 +53,6 @@
             android:paddingTop="16dp"
             android:paddingBottom="8dp"
             android:textColor="?android:attr/textColorSecondary"
-            android:hyphenationFrequency="normalFast"
             android:ellipsize="marquee" />
 
         <com.android.settingslib.widget.LinkTextView
diff --git a/packages/SettingsLib/FooterPreference/res/layout-v33/preference_footer.xml b/packages/SettingsLib/FooterPreference/res/layout-v33/preference_footer.xml
new file mode 100644
index 0000000..a2f2510
--- /dev/null
+++ b/packages/SettingsLib/FooterPreference/res/layout-v33/preference_footer.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT 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:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeight"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:background="?android:attr/selectableItemBackground"
+    android:orientation="vertical"
+    android:clipToPadding="false">
+
+    <LinearLayout
+        android:id="@+id/icon_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:minWidth="56dp"
+        android:gravity="start|top"
+        android:orientation="horizontal"
+        android:paddingEnd="12dp"
+        android:paddingTop="16dp"
+        android:paddingBottom="4dp">
+        <ImageView
+            android:id="@android:id/icon"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"/>
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:orientation="vertical">
+        <TextView
+            android:id="@android:id/title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:paddingTop="16dp"
+            android:paddingBottom="8dp"
+            android:textColor="?android:attr/textColorSecondary"
+            android:hyphenationFrequency="normalFast"
+            android:lineBreakWordStyle="phrase"
+            android:ellipsize="marquee" />
+
+        <com.android.settingslib.widget.LinkTextView
+            android:id="@+id/settingslib_learn_more"
+            android:text="@string/settingslib_learn_more_text"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:paddingBottom="8dp"
+            android:clickable="true"
+            android:visibility="gone"
+            style="@style/TextAppearance.Footer.Title.SettingsLib"/>
+    </LinearLayout>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/packages/SettingsLib/LayoutPreference/res/layout/settings_entity_header.xml b/packages/SettingsLib/LayoutPreference/res/layout/settings_entity_header.xml
index 50f69d1..c629d96 100644
--- a/packages/SettingsLib/LayoutPreference/res/layout/settings_entity_header.xml
+++ b/packages/SettingsLib/LayoutPreference/res/layout/settings_entity_header.xml
@@ -71,6 +71,8 @@
         <TextView
             android:id="@+id/entity_header_second_summary"
             style="@style/TextAppearance.EntityHeaderSummary"
+            android:singleLine="false"
+            android:maxLines="4"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"/>
 
diff --git a/packages/SettingsLib/MainSwitchPreference/res/layout-v31/settingslib_main_switch_bar.xml b/packages/SettingsLib/MainSwitchPreference/res/layout-v31/settingslib_main_switch_bar.xml
index d2a4de4..b9a6ecc 100644
--- a/packages/SettingsLib/MainSwitchPreference/res/layout-v31/settingslib_main_switch_bar.xml
+++ b/packages/SettingsLib/MainSwitchPreference/res/layout-v31/settingslib_main_switch_bar.xml
@@ -20,6 +20,11 @@
     android:layout_height="wrap_content"
     android:layout_width="match_parent"
     android:background="?android:attr/colorBackground"
+    android:minHeight="?android:attr/listPreferredItemHeight"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+    android:paddingTop="@dimen/settingslib_switchbar_margin"
+    android:paddingBottom="@dimen/settingslib_switchbar_margin"
     android:orientation="vertical">
 
     <LinearLayout
@@ -27,7 +32,6 @@
         android:minHeight="@dimen/settingslib_min_switch_bar_height"
         android:layout_height="wrap_content"
         android:layout_width="match_parent"
-        android:layout_margin="@dimen/settingslib_switchbar_margin"
         android:paddingStart="@dimen/settingslib_switchbar_padding_left"
         android:paddingEnd="@dimen/settingslib_switchbar_padding_right">
 
diff --git a/packages/SettingsLib/MainSwitchPreference/res/layout-v33/settingslib_main_switch_bar.xml b/packages/SettingsLib/MainSwitchPreference/res/layout-v33/settingslib_main_switch_bar.xml
new file mode 100644
index 0000000..35d1323
--- /dev/null
+++ b/packages/SettingsLib/MainSwitchPreference/res/layout-v33/settingslib_main_switch_bar.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT 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:layout_height="wrap_content"
+    android:layout_width="match_parent"
+    android:background="?android:attr/colorBackground"
+    android:orientation="vertical">
+
+    <LinearLayout
+        android:id="@+id/frame"
+        android:minHeight="@dimen/settingslib_min_switch_bar_height"
+        android:layout_height="wrap_content"
+        android:layout_width="match_parent"
+        android:layout_margin="@dimen/settingslib_switchbar_margin"
+        android:paddingStart="@dimen/settingslib_switchbar_padding_left"
+        android:paddingEnd="@dimen/settingslib_switchbar_padding_right">
+
+        <TextView
+            android:id="@+id/switch_text"
+            android:layout_height="wrap_content"
+            android:layout_width="0dp"
+            android:layout_weight="1"
+            android:layout_marginEnd="@dimen/settingslib_switch_title_margin"
+            android:layout_marginVertical="@dimen/settingslib_switch_title_margin"
+            android:layout_gravity="center_vertical"
+            android:ellipsize="end"
+            android:textAppearance="?android:attr/textAppearanceListItem"
+            android:hyphenationFrequency="normalFast"
+            android:lineBreakWordStyle="phrase"
+            style="@style/MainSwitchText.Settingslib" />
+
+        <ImageView
+            android:id="@+id/restricted_icon"
+            android:layout_width="@dimen/settingslib_restricted_icon_size"
+            android:layout_height="@dimen/settingslib_restricted_icon_size"
+            android:tint="?android:attr/colorAccent"
+            android:layout_gravity="center_vertical"
+            android:layout_marginEnd="@dimen/settingslib_restricted_icon_margin_end"
+            android:src="@drawable/settingslib_ic_info"
+            android:visibility="gone" />
+
+        <Switch
+            android:id="@android:id/switch_widget"
+            android:layout_width="wrap_content"
+            android:layout_height="48dp"
+            android:layout_gravity="center_vertical"
+            android:focusable="false"
+            android:clickable="false"
+            android:theme="@style/Switch.SettingsLib"/>
+    </LinearLayout>
+
+</LinearLayout>
+
+
diff --git a/packages/SettingsLib/RadioButtonPreference/res/layout-v33/preference_radio.xml b/packages/SettingsLib/RadioButtonPreference/res/layout-v33/preference_radio.xml
new file mode 100644
index 0000000..bb8ac28
--- /dev/null
+++ b/packages/SettingsLib/RadioButtonPreference/res/layout-v33/preference_radio.xml
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT 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"
+    xmlns:settings="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="?android:attr/selectableItemBackground"
+    android:gravity="center_vertical"
+    android:minHeight="?android:attr/listPreferredItemHeightSmall"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
+
+    <LinearLayout
+        android:id="@android:id/widget_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:paddingHorizontal="20dp"
+        android:gravity="center"
+        android:minWidth="56dp"
+        android:orientation="vertical"/>
+
+    <LinearLayout
+        android:id="@+id/icon_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:gravity="center_vertical"
+        android:minWidth="32dp"
+        android:orientation="horizontal"
+        android:layout_marginEnd="16dp"
+        android:paddingTop="4dp"
+        android:paddingBottom="4dp">
+        <androidx.preference.internal.PreferenceImageView
+            android:id="@android:id/icon"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            settings:maxWidth="@dimen/secondary_app_icon_size"
+            settings:maxHeight="@dimen/secondary_app_icon_size"/>
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:orientation="vertical"
+        android:paddingTop="16dp"
+        android:paddingBottom="16dp"
+        android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
+
+        <TextView
+            android:id="@android:id/title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:maxLines="2"
+            android:hyphenationFrequency="normalFast"
+            android:lineBreakWordStyle="phrase"
+            android:textAppearance="?android:attr/textAppearanceListItem"/>
+
+        <LinearLayout
+            android:id="@+id/summary_container"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:visibility="gone">
+            <TextView
+                android:id="@android:id/summary"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:textAppearance="?android:attr/textAppearanceSmall"
+                android:textAlignment="viewStart"
+                android:hyphenationFrequency="normalFast"
+                android:lineBreakWordStyle="phrase"
+                android:textColor="?android:attr/textColorSecondary"/>
+
+            <TextView
+                android:id="@+id/appendix"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:textAppearance="?android:attr/textAppearanceSmall"
+                android:textAlignment="viewEnd"
+                android:textColor="?android:attr/textColorSecondary"
+                android:maxLines="1"
+                android:visibility="gone"
+                android:ellipsize="end"/>
+        </LinearLayout>
+    </LinearLayout>
+
+    <LinearLayout
+        android:id="@+id/radio_extra_widget_container"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:orientation="horizontal"
+        android:gravity="center_vertical">
+        <View
+            android:layout_width=".75dp"
+            android:layout_height="32dp"
+            android:layout_marginTop="16dp"
+            android:layout_marginBottom="16dp"
+            android:background="?android:attr/dividerVertical" />
+        <ImageView
+            android:id="@+id/radio_extra_widget"
+            android:layout_width="match_parent"
+            android:minWidth="@dimen/two_target_min_width"
+            android:layout_height="fill_parent"
+            android:src="@drawable/ic_settings_accent"
+            android:contentDescription="@string/settings_label"
+            android:paddingStart="24dp"
+            android:paddingEnd="24dp"
+            android:layout_gravity="center"
+            android:background="?android:attr/selectableItemBackground" />
+    </LinearLayout>
+</LinearLayout>
diff --git a/packages/SettingsLib/RadioButtonPreference/res/layout/preference_radio.xml b/packages/SettingsLib/RadioButtonPreference/res/layout/preference_radio.xml
index 64d100a..906ff2c 100644
--- a/packages/SettingsLib/RadioButtonPreference/res/layout/preference_radio.xml
+++ b/packages/SettingsLib/RadioButtonPreference/res/layout/preference_radio.xml
@@ -66,7 +66,6 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:maxLines="2"
-            android:hyphenationFrequency="normalFast"
             android:textAppearance="?android:attr/textAppearanceListItem"/>
 
         <LinearLayout
@@ -81,7 +80,6 @@
                 android:layout_weight="1"
                 android:textAppearance="?android:attr/textAppearanceSmall"
                 android:textAlignment="viewStart"
-                android:hyphenationFrequency="normalFast"
                 android:textColor="?android:attr/textColorSecondary"/>
 
             <TextView
diff --git a/packages/SettingsLib/SelectorWithWidgetPreference/res/layout-v33/preference_selector_with_widget.xml b/packages/SettingsLib/SelectorWithWidgetPreference/res/layout-v33/preference_selector_with_widget.xml
new file mode 100644
index 0000000..0b27464
--- /dev/null
+++ b/packages/SettingsLib/SelectorWithWidgetPreference/res/layout-v33/preference_selector_with_widget.xml
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT 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"
+    xmlns:settings="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="?android:attr/selectableItemBackground"
+    android:gravity="center_vertical"
+    android:minHeight="?android:attr/listPreferredItemHeightSmall"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
+
+    <LinearLayout
+        android:id="@android:id/widget_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:paddingHorizontal="20dp"
+        android:gravity="center"
+        android:minWidth="56dp"
+        android:orientation="vertical"/>
+
+    <LinearLayout
+        android:id="@+id/icon_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:gravity="center_vertical"
+        android:minWidth="32dp"
+        android:orientation="horizontal"
+        android:layout_marginEnd="16dp"
+        android:paddingTop="4dp"
+        android:paddingBottom="4dp">
+        <androidx.preference.internal.PreferenceImageView
+            android:id="@android:id/icon"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            settings:maxWidth="@dimen/secondary_app_icon_size"
+            settings:maxHeight="@dimen/secondary_app_icon_size"/>
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:orientation="vertical"
+        android:paddingTop="16dp"
+        android:paddingBottom="16dp"
+        android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
+
+        <TextView
+            android:id="@android:id/title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:maxLines="2"
+            android:hyphenationFrequency="normalFast"
+            android:lineBreakWordStyle="phrase"
+            android:textAppearance="?android:attr/textAppearanceListItem"/>
+
+        <LinearLayout
+            android:id="@+id/summary_container"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:visibility="gone">
+            <TextView
+                android:id="@android:id/summary"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:textAppearance="?android:attr/textAppearanceSmall"
+                android:textAlignment="viewStart"
+                android:hyphenationFrequency="normalFast"
+                android:lineBreakWordStyle="phrase"
+                android:textColor="?android:attr/textColorSecondary"/>
+
+            <TextView
+                android:id="@+id/appendix"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:textAppearance="?android:attr/textAppearanceSmall"
+                android:textAlignment="viewEnd"
+                android:textColor="?android:attr/textColorSecondary"
+                android:maxLines="1"
+                android:visibility="gone"
+                android:ellipsize="end"/>
+        </LinearLayout>
+    </LinearLayout>
+
+    <LinearLayout
+        android:id="@+id/selector_extra_widget_container"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:orientation="horizontal"
+        android:gravity="center_vertical">
+        <View
+            android:layout_width=".75dp"
+            android:layout_height="32dp"
+            android:layout_marginTop="16dp"
+            android:layout_marginBottom="16dp"
+            android:background="?android:attr/dividerVertical" />
+        <ImageView
+            android:id="@+id/selector_extra_widget"
+            android:layout_width="match_parent"
+            android:minWidth="@dimen/two_target_min_width"
+            android:layout_height="fill_parent"
+            android:src="@drawable/ic_settings_accent"
+            android:contentDescription="@string/settings_label"
+            android:paddingStart="24dp"
+            android:paddingEnd="24dp"
+            android:layout_gravity="center"
+            android:background="?android:attr/selectableItemBackground" />
+    </LinearLayout>
+</LinearLayout>
diff --git a/packages/SettingsLib/SelectorWithWidgetPreference/res/layout/preference_selector_with_widget.xml b/packages/SettingsLib/SelectorWithWidgetPreference/res/layout/preference_selector_with_widget.xml
index 2a550ef..8bb56ff 100644
--- a/packages/SettingsLib/SelectorWithWidgetPreference/res/layout/preference_selector_with_widget.xml
+++ b/packages/SettingsLib/SelectorWithWidgetPreference/res/layout/preference_selector_with_widget.xml
@@ -66,7 +66,6 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:maxLines="2"
-            android:hyphenationFrequency="normalFast"
             android:textAppearance="?android:attr/textAppearanceListItem"/>
 
         <LinearLayout
@@ -81,7 +80,6 @@
                 android:layout_weight="1"
                 android:textAppearance="?android:attr/textAppearanceSmall"
                 android:textAlignment="viewStart"
-                android:hyphenationFrequency="normalFast"
                 android:textColor="?android:attr/textColorSecondary"/>
 
             <TextView
diff --git a/packages/SettingsLib/SettingsTheme/res/layout-v31/settingslib_preference.xml b/packages/SettingsLib/SettingsTheme/res/layout-v31/settingslib_preference.xml
index d4d466a..23aa993 100644
--- a/packages/SettingsLib/SettingsTheme/res/layout-v31/settingslib_preference.xml
+++ b/packages/SettingsLib/SettingsTheme/res/layout-v31/settingslib_preference.xml
@@ -43,7 +43,6 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:maxLines="2"
-            android:hyphenationFrequency="normalFast"
             android:textAppearance="?android:attr/textAppearanceListItem"
             android:ellipsize="marquee"/>
 
@@ -58,7 +57,6 @@
             android:textAlignment="viewStart"
             android:textColor="?android:attr/textColorSecondary"
             android:maxLines="10"
-            android:hyphenationFrequency="normalFast"
             style="@style/PreferenceSummaryTextStyle"/>
 
     </RelativeLayout>
diff --git a/packages/SettingsLib/SettingsTheme/res/layout-v33/settingslib_preference.xml b/packages/SettingsLib/SettingsTheme/res/layout-v33/settingslib_preference.xml
new file mode 100644
index 0000000..70ce374
--- /dev/null
+++ b/packages/SettingsLib/SettingsTheme/res/layout-v33/settingslib_preference.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2022 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT 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:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeightSmall"
+    android:gravity="center_vertical"
+    android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+    android:paddingRight="?android:attr/listPreferredItemPaddingRight"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:background="?android:attr/selectableItemBackground"
+    android:clipToPadding="false"
+    android:baselineAligned="false">
+
+    <include layout="@layout/settingslib_icon_frame"/>
+
+    <RelativeLayout
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:paddingTop="16dp"
+        android:paddingBottom="16dp">
+
+        <TextView
+            android:id="@android:id/title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:maxLines="2"
+            android:hyphenationFrequency="normalFast"
+            android:lineBreakWordStyle="phrase"
+            android:textAppearance="?android:attr/textAppearanceListItem"
+            android:ellipsize="marquee"/>
+
+        <TextView
+            android:id="@android:id/summary"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@android:id/title"
+            android:layout_alignLeft="@android:id/title"
+            android:layout_alignStart="@android:id/title"
+            android:layout_gravity="start"
+            android:textAlignment="viewStart"
+            android:textColor="?android:attr/textColorSecondary"
+            android:maxLines="10"
+            android:hyphenationFrequency="normalFast"
+            android:lineBreakWordStyle="phrase"
+            style="@style/PreferenceSummaryTextStyle"/>
+
+    </RelativeLayout>
+
+    <!-- Preference should place its actual preference widget here. -->
+    <LinearLayout
+        android:id="@android:id/widget_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:gravity="end|center_vertical"
+        android:paddingLeft="16dp"
+        android:paddingStart="16dp"
+        android:paddingRight="0dp"
+        android:paddingEnd="0dp"
+        android:orientation="vertical"/>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/packages/SettingsLib/SettingsTransition/AndroidManifest.xml b/packages/SettingsLib/SettingsTransition/AndroidManifest.xml
index b6aff53..244b367 100644
--- a/packages/SettingsLib/SettingsTransition/AndroidManifest.xml
+++ b/packages/SettingsLib/SettingsTransition/AndroidManifest.xml
@@ -16,7 +16,7 @@
 -->
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="com.android.settingslib.transition">
+          package="com.android.settingslib.widget">
 
     <uses-sdk android:minSdkVersion="29" />
 
diff --git a/packages/SettingsLib/TopIntroPreference/res/layout-v33/top_intro_preference.xml b/packages/SettingsLib/TopIntroPreference/res/layout-v33/top_intro_preference.xml
new file mode 100644
index 0000000..6046d91
--- /dev/null
+++ b/packages/SettingsLib/TopIntroPreference/res/layout-v33/top_intro_preference.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT 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:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:paddingBottom="16dp"
+    android:paddingTop="8dp"
+    android:background="?android:attr/selectableItemBackground"
+    android:clipToPadding="false">
+
+    <TextView
+        android:id="@android:id/title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:clickable="false"
+        android:longClickable="false"
+        android:maxLines="10"
+        android:hyphenationFrequency="normalFast"
+        android:lineBreakWordStyle="phrase"
+        android:textAppearance="@style/TextAppearance.TopIntroText"/>
+</LinearLayout>
\ No newline at end of file
diff --git a/packages/SettingsLib/TopIntroPreference/res/layout/top_intro_preference.xml b/packages/SettingsLib/TopIntroPreference/res/layout/top_intro_preference.xml
index b2a9037..4d6e1b7 100644
--- a/packages/SettingsLib/TopIntroPreference/res/layout/top_intro_preference.xml
+++ b/packages/SettingsLib/TopIntroPreference/res/layout/top_intro_preference.xml
@@ -33,6 +33,5 @@
         android:clickable="false"
         android:longClickable="false"
         android:maxLines="10"
-        android:hyphenationFrequency="normalFast"
         android:textAppearance="@style/TextAppearance.TopIntroText"/>
 </LinearLayout>
\ No newline at end of file
diff --git a/packages/SettingsLib/TwoTargetPreference/res/layout-v31/preference_two_target.xml b/packages/SettingsLib/TwoTargetPreference/res/layout-v31/preference_two_target.xml
index ac5807d..2c35772 100644
--- a/packages/SettingsLib/TwoTargetPreference/res/layout-v31/preference_two_target.xml
+++ b/packages/SettingsLib/TwoTargetPreference/res/layout-v31/preference_two_target.xml
@@ -41,7 +41,6 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:maxLines="2"
-            android:hyphenationFrequency="normalFast"
             android:textAppearance="?android:attr/textAppearanceListItem"
             android:ellipsize="marquee"/>
 
@@ -53,7 +52,6 @@
             android:layout_alignStart="@android:id/title"
             android:textAppearance="?android:attr/textAppearanceListItemSecondary"
             android:textColor="?android:attr/textColorSecondary"
-            android:hyphenationFrequency="normalFast"
             android:maxLines="10"/>
 
     </RelativeLayout>
diff --git a/packages/SettingsLib/TwoTargetPreference/res/layout-v33/preference_two_target.xml b/packages/SettingsLib/TwoTargetPreference/res/layout-v33/preference_two_target.xml
new file mode 100644
index 0000000..0bca9ab
--- /dev/null
+++ b/packages/SettingsLib/TwoTargetPreference/res/layout-v33/preference_two_target.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<!-- Based off preference_material_settings.xml except that ripple on only on the left side. -->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeightSmall"
+    android:gravity="center_vertical"
+    android:background="?android:attr/selectableItemBackground"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:clipToPadding="false">
+
+    <include layout="@layout/settingslib_icon_frame"/>
+
+    <RelativeLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:paddingTop="16dp"
+        android:paddingBottom="16dp">
+
+        <TextView
+            android:id="@android:id/title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:maxLines="2"
+            android:hyphenationFrequency="normalFast"
+            android:lineBreakWordStyle="phrase"
+            android:textAppearance="?android:attr/textAppearanceListItem"
+            android:ellipsize="marquee"/>
+
+        <TextView
+            android:id="@android:id/summary"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@android:id/title"
+            android:layout_alignStart="@android:id/title"
+            android:textAppearance="?android:attr/textAppearanceListItemSecondary"
+            android:textColor="?android:attr/textColorSecondary"
+            android:hyphenationFrequency="normalFast"
+            android:lineBreakWordStyle="phrase"
+            android:maxLines="10"/>
+
+    </RelativeLayout>
+
+    <include layout="@layout/preference_two_target_divider" />
+
+    <!-- Preference should place its actual preference widget here. -->
+    <LinearLayout
+        android:id="@android:id/widget_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:minWidth="@dimen/two_target_min_width"
+        android:gravity="center"
+        android:orientation="vertical" />
+
+</LinearLayout>
diff --git a/packages/SettingsLib/res/layout-v33/preference_access_point.xml b/packages/SettingsLib/res/layout-v33/preference_access_point.xml
new file mode 100644
index 0000000..81bfeffd
--- /dev/null
+++ b/packages/SettingsLib/res/layout-v33/preference_access_point.xml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<!-- Based off preference_two_target.xml with Material ripple moved to parent for full ripple. -->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:settings="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeightSmall"
+    android:gravity="center_vertical"
+    android:background="?android:attr/selectableItemBackground"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:clipToPadding="false">
+
+    <LinearLayout
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_weight="1"
+        android:gravity="start|center_vertical"
+        android:clipToPadding="false">
+
+        <LinearLayout
+            android:id="@+id/icon_frame"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:gravity="start|center_vertical"
+            android:minWidth="48dp"
+            android:orientation="horizontal"
+            android:clipToPadding="false"
+            android:paddingTop="4dp"
+            android:paddingBottom="4dp">
+            <androidx.preference.internal.PreferenceImageView
+                android:id="@android:id/icon"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                settings:maxWidth="48dp"
+                settings:maxHeight="48dp" />
+        </LinearLayout>
+
+        <RelativeLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:paddingTop="16dp"
+            android:paddingBottom="16dp">
+
+            <TextView
+                android:id="@android:id/title"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:maxLines="2"
+                android:hyphenationFrequency="normalFast"
+                android:lineBreakWordStyle="phrase"
+                android:textAppearance="?android:attr/textAppearanceListItem"
+                android:ellipsize="marquee" />
+
+            <TextView
+                android:id="@android:id/summary"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_below="@android:id/title"
+                android:layout_alignStart="@android:id/title"
+                android:textAppearance="?android:attr/textAppearanceListItemSecondary"
+                android:textColor="?android:attr/textColorSecondary"
+                android:hyphenationFrequency="normalFast"
+                android:lineBreakWordStyle="phrase"
+                android:maxLines="10" />
+
+        </RelativeLayout>
+
+    </LinearLayout>
+
+    <include layout="@layout/preference_two_target_divider" />
+
+    <!-- Preference should place its actual preference widget here. -->
+    <LinearLayout
+        android:id="@android:id/widget_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:minWidth="@dimen/two_target_min_width"
+        android:gravity="center"
+        android:orientation="vertical" />
+
+    <ImageButton
+        android:id="@+id/icon_button"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:minWidth="@dimen/two_target_min_width"
+        android:minHeight="@dimen/min_tap_target_size"
+        android:layout_gravity="center"
+        android:background="?android:attr/selectableItemBackground"
+        android:visibility="gone">
+    </ImageButton>
+</LinearLayout>
diff --git a/packages/SettingsLib/res/layout-v33/preference_checkable_two_target.xml b/packages/SettingsLib/res/layout-v33/preference_checkable_two_target.xml
new file mode 100644
index 0000000..7ad018c
--- /dev/null
+++ b/packages/SettingsLib/res/layout-v33/preference_checkable_two_target.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<!-- Based off preference_material_settings.xml except that ripple on only on the left side. -->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:settings="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeightSmall"
+    android:gravity="center_vertical"
+    android:background="@android:color/transparent"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:clipToPadding="false">
+
+    <LinearLayout
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_weight="1"
+        android:background="?android:attr/selectableItemBackground"
+        android:gravity="start|center_vertical"
+        android:clipToPadding="false">
+
+        <LinearLayout
+            android:id="@+id/checkbox_container"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:gravity="start|center_vertical"
+            android:minWidth="48dp"
+            android:minHeight="48dp"
+            android:orientation="horizontal"
+            android:clipToPadding="false"
+            android:paddingTop="4dp"
+            android:paddingBottom="4dp">
+            <include layout="@layout/preference_widget_checkbox" />
+        </LinearLayout>
+
+        <RelativeLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:paddingTop="16dp"
+            android:paddingBottom="16dp">
+
+            <TextView
+                android:id="@android:id/title"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:maxLines="2"
+                android:hyphenationFrequency="normalFast"
+                android:lineBreakWordStyle="phrase"
+                android:textAppearance="?android:attr/textAppearanceListItem"
+                android:ellipsize="marquee" />
+
+            <TextView
+                android:id="@android:id/summary"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_below="@android:id/title"
+                android:layout_alignStart="@android:id/title"
+                android:textAppearance="?android:attr/textAppearanceListItemSecondary"
+                android:textColor="?android:attr/textColorSecondary"
+                android:hyphenationFrequency="normalFast"
+                android:lineBreakWordStyle="phrase"
+                android:maxLines="10" />
+
+        </RelativeLayout>
+
+    </LinearLayout>
+
+    <include layout="@layout/preference_two_target_divider" />
+
+    <!-- Preference should place its actual preference widget here. -->
+    <LinearLayout
+        android:id="@android:id/widget_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:minWidth="@dimen/two_target_min_width"
+        android:gravity="center"
+        android:orientation="vertical" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/packages/SettingsLib/res/layout-v33/restricted_switch_preference.xml b/packages/SettingsLib/res/layout-v33/restricted_switch_preference.xml
new file mode 100644
index 0000000..31e9696
--- /dev/null
+++ b/packages/SettingsLib/res/layout-v33/restricted_switch_preference.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2022 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT 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:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeightSmall"
+    android:gravity="center_vertical"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:background="?android:attr/selectableItemBackground"
+    android:clipToPadding="false">
+
+    <LinearLayout
+        android:id="@+id/icon_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:minWidth="56dp"
+        android:gravity="start|center_vertical"
+        android:orientation="horizontal"
+        android:paddingEnd="12dp"
+        android:paddingTop="4dp"
+        android:paddingBottom="4dp">
+        <com.android.internal.widget.PreferenceImageView
+            android:id="@android:id/icon"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:maxWidth="48dp"
+            android:maxHeight="48dp" />
+    </LinearLayout>
+
+    <RelativeLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:paddingTop="16dp"
+        android:paddingBottom="16dp">
+
+        <TextView
+            android:id="@android:id/title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:maxLines="2"
+            android:hyphenationFrequency="normalFast"
+            android:lineBreakWordStyle="phrase"
+            android:textAppearance="?android:attr/textAppearanceListItem"
+            android:ellipsize="marquee" />
+
+        <TextView
+            android:id="@android:id/summary"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@android:id/title"
+            android:layout_alignStart="@android:id/title"
+            android:textAppearance="?android:attr/textAppearanceListItemSecondary"
+            android:textColor="?android:attr/textColorSecondary"
+            android:hyphenationFrequency="normalFast"
+            android:lineBreakWordStyle="phrase"
+            android:maxLines="10" />
+
+        <TextView
+            android:id="@+id/additional_summary"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@android:id/summary"
+            android:layout_alignStart="@android:id/summary"
+            android:textAppearance="?android:attr/textAppearanceListItemSecondary"
+            android:textColor="?android:attr/textColorSecondary"
+            android:maxLines="10"
+            android:hyphenationFrequency="normalFast"
+            android:lineBreakWordStyle="phrase"
+            android:visibility="gone" />
+    </RelativeLayout>
+
+    <!-- Preference should place its actual preference widget here. -->
+    <LinearLayout
+        android:id="@android:id/widget_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:gravity="end|center_vertical"
+        android:paddingStart="16dp"
+        android:orientation="vertical" />
+
+</LinearLayout>
diff --git a/packages/SettingsLib/res/layout/preference_access_point.xml b/packages/SettingsLib/res/layout/preference_access_point.xml
index 4ad9d80..802d604 100644
--- a/packages/SettingsLib/res/layout/preference_access_point.xml
+++ b/packages/SettingsLib/res/layout/preference_access_point.xml
@@ -65,7 +65,6 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:maxLines="2"
-                android:hyphenationFrequency="normalFast"
                 android:textAppearance="?android:attr/textAppearanceListItem"
                 android:ellipsize="marquee" />
 
@@ -77,7 +76,6 @@
                 android:layout_alignStart="@android:id/title"
                 android:textAppearance="?android:attr/textAppearanceListItemSecondary"
                 android:textColor="?android:attr/textColorSecondary"
-                android:hyphenationFrequency="normalFast"
                 android:maxLines="10" />
 
         </RelativeLayout>
diff --git a/packages/SettingsLib/res/layout/preference_checkable_two_target.xml b/packages/SettingsLib/res/layout/preference_checkable_two_target.xml
index cbe49cd..f512f9b 100644
--- a/packages/SettingsLib/res/layout/preference_checkable_two_target.xml
+++ b/packages/SettingsLib/res/layout/preference_checkable_two_target.xml
@@ -62,7 +62,6 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:maxLines="2"
-                android:hyphenationFrequency="normalFast"
                 android:textAppearance="?android:attr/textAppearanceListItem"
                 android:ellipsize="marquee" />
 
@@ -74,7 +73,6 @@
                 android:layout_alignStart="@android:id/title"
                 android:textAppearance="?android:attr/textAppearanceListItemSecondary"
                 android:textColor="?android:attr/textColorSecondary"
-                android:hyphenationFrequency="normalFast"
                 android:maxLines="10" />
 
         </RelativeLayout>
diff --git a/packages/SettingsLib/res/layout/restricted_switch_preference.xml b/packages/SettingsLib/res/layout/restricted_switch_preference.xml
index edea144..169ae97 100644
--- a/packages/SettingsLib/res/layout/restricted_switch_preference.xml
+++ b/packages/SettingsLib/res/layout/restricted_switch_preference.xml
@@ -52,7 +52,6 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:maxLines="2"
-            android:hyphenationFrequency="normalFast"
             android:textAppearance="?android:attr/textAppearanceListItem"
             android:ellipsize="marquee" />
 
@@ -63,7 +62,6 @@
             android:layout_alignStart="@android:id/title"
             android:textAppearance="?android:attr/textAppearanceListItemSecondary"
             android:textColor="?android:attr/textColorSecondary"
-                  android:hyphenationFrequency="normalFast"
             android:maxLines="10" />
 
         <TextView android:id="@+id/additional_summary"
@@ -74,7 +72,6 @@
             android:textAppearance="?android:attr/textAppearanceListItemSecondary"
             android:textColor="?android:attr/textColorSecondary"
             android:maxLines="10"
-                  android:hyphenationFrequency="normalFast"
             android:visibility="gone" />
     </RelativeLayout>
 
diff --git a/packages/SettingsLib/res/values-af/arrays.xml b/packages/SettingsLib/res/values-af/arrays.xml
index 7165c14..1de7668 100644
--- a/packages/SettingsLib/res/values-af/arrays.xml
+++ b/packages/SettingsLib/res/values-af/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Gebruik stelselkeuse (verstek)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>-oudio"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>-oudio"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Gebruik stelselkeuse (verstek)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>-oudio"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>-oudio"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Gebruik stelselkeuse (verstek)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml
index 1992c9b..ed4104c 100644
--- a/packages/SettingsLib/res/values-af/strings.xml
+++ b/packages/SettingsLib/res/values-af/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Lêeroordrag"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Invoertoestel"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Internettoegang"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Kontakdeling"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Gebruik vir kontakdeling"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Deling van kontakte en oproepgeskiedenis"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Gebruik vir deling van kontakte en oproepgeskiedenis"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Deling van internetverbinding"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Teksboodskappe"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM-toegang"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Laai tans vinnig"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Laai tans stadig"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Laai tans draadloos"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Laaidok"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Laai nie"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Gekoppel, laai nie"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Gelaai"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Stel terug"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Verwyder"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Stel tans gassessie terug …"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Stel gastesessie terug?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Vee uit"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Stoor"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Verlaat gasmodus"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Stel jou gastesessie terug"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Verlaat gasmodus"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Alle aktiwiteit sal uitgevee word wanneer jy uitgaan"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Jy kan jou aktiwiteit stoor of uitvee wanneer jy uitgaan"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Stel terug om aktiwiteit nou uit te vee, of stoor of vee aktiwiteit uit wanneer jy uitgaan"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Neem \'n foto"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Kies \'n prent"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Kies foto"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Weer"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Luggehalte"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Uitsaai-inligting"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Kies \'n profielprent"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Verstekgebruikerikoon"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Fisieke sleutelbord"</string>
diff --git a/packages/SettingsLib/res/values-am/arrays.xml b/packages/SettingsLib/res/values-am/arrays.xml
index 1108c82..a900d13 100644
--- a/packages/SettingsLib/res/values-am/arrays.xml
+++ b/packages/SettingsLib/res/values-am/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"የስርዓቱን ምርጫ (ነባሪ) ተጠቀም"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ኦዲዮ"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ኦዲዮ"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"የስርዓቱን ምርጫ (ነባሪ) ተጠቀም"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ኦዲዮ"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ኦዲዮ"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"የስርዓቱን ምርጫ (ነባሪ) ተጠቀም"</item>
     <item msgid="8003118270854840095">"44.1 ኪኸ"</item>
diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml
index 74844fc..82dd336 100644
--- a/packages/SettingsLib/res/values-am/strings.xml
+++ b/packages/SettingsLib/res/values-am/strings.xml
@@ -117,8 +117,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="7064307749579335765">"እውቂያ ማጋራት"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"እውቂያን ለማጋራት ተጠቀም"</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">"የሲም መዳረሻ"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"ኃይል በፍጥነት በመሙላት ላይ"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"ኃይል በዝግታ በመሙላት ላይ"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"በገመድ-አልባ ኃይል በመሙላት ላይ"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"የኃይል መሙያ መትከያ"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"ባትሪ እየሞላ አይደለም"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"ተገናኝቷል፣ ኃይል በመሙላት ላይ አይደለም"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"ባትሪ ሞልቷል"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"ዳግም አስጀምር"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"አስወግድ"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"እንግዳን ዳግም በማስጀመር ላይ…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"የእንግዳ ክፍለ-ጊዜ ዳግም ይጀመር?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"ሰርዝ"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"አስቀምጥ"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"ከእንግዳ ሁኔታ ውጣ"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"የእንግዳ ክፍለ-ጊዜን ዳግም አስጀምር"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"እንግዳ ያስወጡ"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"በሚወጡበት ጊዜ ሁሉም እንቅስቃሴዎች ይሰረዛሉ"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"በሚወጡበት ጊዜ እንቅስቃሴዎን ማስቀመጥ ወይም መሰረዝ ይችላሉ"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"የክፍለ-ጊዜ እንቅስቃሴን አሁን ለመሰረዝ ዳግም ያስጀምሩ፣ ወይም በሚወጡበት ጊዜ እንቅስቃሴን ማስቀመጥ ወይም መሰረዝ ይችላሉ"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"ፎቶ አንሳ"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"ምስል ይምረጡ"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"ፎቶ ይምረጡ"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"የአየር ሁኔታ"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"የአየር ጥራት"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"የCast መረጃ"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"የመገለጫ ሥዕል ይምረጡ"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"ነባሪ የተጠቃሚ አዶ"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"አካላዊ ቁልፍ ሰሌዳ"</string>
diff --git a/packages/SettingsLib/res/values-ar/arrays.xml b/packages/SettingsLib/res/values-ar/arrays.xml
index eb4be38..8f7d7d2 100644
--- a/packages/SettingsLib/res/values-ar/arrays.xml
+++ b/packages/SettingsLib/res/values-ar/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"استخدام اختيار النظام (تلقائي)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"صوت <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"صوت <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"استخدام اختيار النظام (تلقائي)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"صوت <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"صوت <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"استخدام اختيار النظام (تلقائي)"</item>
     <item msgid="8003118270854840095">"44.1 كيلو هرتز"</item>
diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml
index cef5d43..49ebbbc 100644
--- a/packages/SettingsLib/res/values-ar/strings.xml
+++ b/packages/SettingsLib/res/values-ar/strings.xml
@@ -117,8 +117,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="7064307749579335765">"مشاركة جهات الاتصال"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"استخدام مع مشاركة جهة الاتصال"</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>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"جارٍ الشحن سريعًا"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"جارٍ الشحن ببطء"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"جارٍ الشحن لاسلكيًا"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"وحدة الإرساء للشحن"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"لا يتم الشحن"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"الجهاز متصل بالشاحن، ولا يتم الشحن."</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"مشحونة"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"إعادة الضبط"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"إزالة"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"جارٍ إعادة ضبط جلسة الضيف…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"هل تريد إعادة ضبط جلسة الضيف؟"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"حذف"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"حِفظ"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"الخروج من وضع الضيف"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"إعادة ضبط جلسة الضيف"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"الخروج من وضع الضيف"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"سيتم حذف جميع الأنشطة عند الخروج من وضع الضيف."</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"يمكنك حفظ نشاطك أو حذفه عند الخروج من وضع الضيف."</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"يمكنك إجراء إعادة ضبط لحذف نشاط الجلسة الآن، أو حِفظ النشاط أو حذفه عند الخروج من وضع الضيف."</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"التقاط صورة"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"اختيار صورة"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"اختيار صورة"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"الطقس"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"جودة الهواء"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"معلومات البث"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"اختيار صورة الملف الشخصي"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"رمز المستخدم التلقائي"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"لوحة مفاتيح خارجية"</string>
diff --git a/packages/SettingsLib/res/values-as/arrays.xml b/packages/SettingsLib/res/values-as/arrays.xml
index df23f67..4c879d0 100644
--- a/packages/SettingsLib/res/values-as/arrays.xml
+++ b/packages/SettingsLib/res/values-as/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"ছিষ্টেমৰ বাছনি ব্যৱহাৰ কৰক (ডিফ\'ল্ট)"</item>
-    <item msgid="4055460186095649420">"এছবিচি"</item>
-    <item msgid="720249083677397051">"এএচি"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> অডিঅ\'"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> অডিঅ’"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"ছিষ্টেমৰ বাছনি ব্যৱহাৰ কৰক (ডিফ\'ল্ট)"</item>
-    <item msgid="9024885861221697796">"এছবিচি"</item>
-    <item msgid="4688890470703790013">"এএচি"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> অডিঅ’"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> অডিঅ’"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"ছিষ্টেমৰ বাছনি ব্যৱহাৰ কৰক (ডিফ\'ল্ট)"</item>
     <item msgid="8003118270854840095">"৪৪.১ কিল\'হাৰ্টজ"</item>
diff --git a/packages/SettingsLib/res/values-as/strings.xml b/packages/SettingsLib/res/values-as/strings.xml
index 89cf67e..2296eca 100644
--- a/packages/SettingsLib/res/values-as/strings.xml
+++ b/packages/SettingsLib/res/values-as/strings.xml
@@ -117,8 +117,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="7064307749579335765">"সম্পৰ্ক শ্বেয়াৰ কৰা"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"সম্পৰ্ক শ্বেয়াৰ কৰিবলৈ ব্যৱহাৰ কৰক"</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">"ছিম প্ৰৱেশ"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"দ্ৰুততাৰে চাৰ্জ হৈছে"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"লাহে লাহে চাৰ্জ হৈছে"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"বেতাঁৰৰ মাধ্যমেৰে চাৰ্জ হৈ আছে"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"চাৰ্জিং ড’ক"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"চ্চাৰ্জ কৰা নাই"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"সংযোগ হৈ আছে, চাৰ্জ হৈ থকা নাই"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"চাৰ্জ হ’ল"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"ৰিছেট কৰক"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"আঁতৰাওক"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"অতিথিৰ ছেশ্বন ৰিছেট কৰি থকা হৈছে…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"অতিথিৰ ছেশ্বন ৰিছেট কৰিবনে?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"মচক"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"ছেভ কৰক"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"অতিথি ম’ডৰ পৰা বাহিৰ হওক"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"অতিথিৰ ছেশ্বন ৰিছেট কৰক"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"অতিথিৰ ছেশ্বনৰ পৰা বাহিৰ হওক"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"বাহিৰ হওঁতে আটাইবোৰ কাৰ্যকলাপ মচা হ’ব"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"আপুনি বাহিৰ হওঁতে নিজৰ কাৰ্যকলাপ ছেভ কৰিব অথবা মচিব পাৰে"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"এতিয়াই ছেশ্বনৰ কাৰ্যকলাপ ৰিছেট কৰক অথবা মচক অথবা আপুনি বাহিৰ হওঁতে কাৰ্যকলাপ ছেভ কৰিব অথবা মচিব পাৰে"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"এখন ফট’ তোলক"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"এখন প্ৰতিচ্ছবি বাছনি কৰক"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"ফট’ বাছনি কৰক"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"বতৰ"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"বায়ুৰ গুণগত মান"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"কাষ্টৰ তথ্য"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"এখন প্ৰ’ফাইল চিত্ৰ বাছনি কৰক"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"ডিফ’ল্ট ব্যৱহাৰকাৰীৰ চিহ্ন"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"কায়িক কীব’ৰ্ড"</string>
diff --git a/packages/SettingsLib/res/values-az/arrays.xml b/packages/SettingsLib/res/values-az/arrays.xml
index 5163791..48974a7 100644
--- a/packages/SettingsLib/res/values-az/arrays.xml
+++ b/packages/SettingsLib/res/values-az/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Sistem Seçimini istifadə edin (Defolt)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Sistem Seçimini istifadə edin (Defolt)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Sistem Seçimini istifadə edin (Defolt)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml
index ca894e6..75a4ef3 100644
--- a/packages/SettingsLib/res/values-az/strings.xml
+++ b/packages/SettingsLib/res/values-az/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Fayl transferi"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Daxiletmə cihazı"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"İnternetə giriş"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Kontakt paylaşımı"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Kontakt paylaşımı üçün istifadə edin"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Kontaktlar və zəng tarixçəsi paylaşımı"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Kontaktlar və zəng tarixçəsi paylaşımı üçün istifadə edin"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"internet bağlantı paylaşımı"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Mətn Mesajları"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM-karta giriş"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Sürətlə doldurulur"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Asta doldurulur"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Simsiz şarj edilir"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Şarj Doku"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Doldurulmur"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Qoşulub, şarj edilmir"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Şarj edilib"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Sıfırlayın"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Silin"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Qonaq məlumatı sıfırlanır…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Qonaq sessiyası sıfırlansın?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Silin"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Yadda saxlayın"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Qonaq rejimindən çıxın"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Qonaq sessiyasını sıfırlayın"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Qonaq rejimindən çıxın"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Çıxış zamanı bütün fəaliyyətlər silinəcək"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Çıxışda fəaliyyətinizi saxlaya və ya silə bilərsiniz"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Sessiya fəaliyyətini indi silmək üçün sıfırlayın və ya çıxışda fəaliyyəti saxlaya və ya silə bilərsiniz"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Foto çəkin"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Şəkil seçin"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Foto seçin"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Hava"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Havanın keyfiyyəti"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Yayım məlumatı"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Profil şəkli seçin"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Defolt istifadəçi ikonası"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Fiziki klaviatura"</string>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml b/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml
index 5cc43f6..337da26 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Koristi izbor sistema (podrazumevano)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Koristi izbor sistema (podrazumevano)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Koristi izbor sistema (podrazumevano)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
index 175842e..3231198 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Prenos datoteke"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Ulazni uređaj"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Pristup Internetu"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Deljenje kontakata"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Koristite za deljenje kontakata"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Deljenje kontakata i istorije poziva"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Koristite za deljenje kontakata i istorije poziva"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Deljenje internet veze"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"SMS-ovi"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Pristup SIM kartici"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Brzo se puni"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Sporo se puni"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Bežično punjenje"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Stanica za punjenje"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Ne puni se"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Povezano, ne puni se"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Napunjeno"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Resetuj"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Ukloni"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Sesija gosta se resetuje…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Želite da resetujete sesiju gosta?"</string>
+    <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">"Izaći ćete 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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Izbriši"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Sačuvaj"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Izađi iz režima gosta"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Resetuj sesiju gosta"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Izađi iz režima gosta"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Sve aktivnosti će biti izbrisane pri izlazu"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Možete da sačuvate ili izbrišete aktivnosti pri izlazu"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Resetujete za brisanje aktivnosti sesije, ili sačuvajte ili izbrišite aktivnosti pri izlazu"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Slikaj"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Odaberi sliku"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Izaberite sliku"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Vreme"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Kvalitet vazduha"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Podaci o prebacivanju"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Odaberite sliku profila"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Podrazumevana ikona korisnika"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Fizička tastatura"</string>
diff --git a/packages/SettingsLib/res/values-be/arrays.xml b/packages/SettingsLib/res/values-be/arrays.xml
index 6259c2d..d843629 100644
--- a/packages/SettingsLib/res/values-be/arrays.xml
+++ b/packages/SettingsLib/res/values-be/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Выбар сістэмы (стандартны)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"Аўдыя <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Аўдыя <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Выбар сістэмы (стандартны)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"Аўдыя <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Аўдыя <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Выбар сістэмы (стандартны)"</item>
     <item msgid="8003118270854840095">"44,1 кГц"</item>
diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml
index 9bb441a..54384c0 100644
--- a/packages/SettingsLib/res/values-be/strings.xml
+++ b/packages/SettingsLib/res/values-be/strings.xml
@@ -117,8 +117,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="7064307749579335765">"Абагульванне кантактаў"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Выкарыстоўваць для абагульвання кантактаў"</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>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Хуткая зарадка"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Павольная зарадка"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Бесправадная зарадка"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Зарадная док-станцыя"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Не зараджаецца"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Падключана, не зараджаецца"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Зараджаны"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Скінуць"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Выдаліць"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Ідзе скід гасцявога сеанса…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Скінуць гасцявы сеанс?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Выдаліць"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Захаваць"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Выйсці з гасцявога рэжыму"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Скінуць гасцявы сеанс"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Выйсці з гасцявога рэжыму"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Падчас выхаду будуць выдалены ўсе звесткі пра дзеянні"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Падчас выхаду можна захаваць ці выдаліць звесткі пра дзеянні"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Скіньце звесткі пра дзеянні падчас сеанса зараз. Вы таксама можаце захаваць ці выдаліць іх у час выхаду."</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Зрабіць фота"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Выбраць відарыс"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Выбраць фота"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Надвор\'е"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Якасць паветра"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Даныя пра трансляцыю"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Выберыце відарыс профілю"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Стандартны карыстальніцкі значок"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Фізічная клавіятура"</string>
diff --git a/packages/SettingsLib/res/values-bg/arrays.xml b/packages/SettingsLib/res/values-bg/arrays.xml
index 49e66c0..1aad6ca7 100644
--- a/packages/SettingsLib/res/values-bg/arrays.xml
+++ b/packages/SettingsLib/res/values-bg/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Използване на сист. избор (стандартно)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"Разширено аудиокодиране (AAC)"</item>
-    <item msgid="1049450003868150455">"Аудио: <xliff:g id="APTX">aptX™</xliff:g> от <xliff:g id="QUALCOMM">Qualcomm®</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Аудио: <xliff:g id="APTX_HD">aptX™ HD</xliff:g> от <xliff:g id="QUALCOMM">Qualcomm®</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Използване на сист. избор (стандартно)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"Разширено аудиокодиране (AAC)"</item>
-    <item msgid="8627333814413492563">"Аудио: <xliff:g id="APTX">aptX™</xliff:g> от <xliff:g id="QUALCOMM">Qualcomm®</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Аудио: <xliff:g id="APTX_HD">aptX™ HD</xliff:g> от <xliff:g id="QUALCOMM">Qualcomm®</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Използване на сист. избор (стандартно)"</item>
     <item msgid="8003118270854840095">"44,1 кХц"</item>
diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml
index 96ff08b..18b54f3 100644
--- a/packages/SettingsLib/res/values-bg/strings.xml
+++ b/packages/SettingsLib/res/values-bg/strings.xml
@@ -117,8 +117,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="7064307749579335765">"Споделяне на контакти"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Използване за споделяне на контакти"</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>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Зарежда се бързо"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Зарежда се бавно"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Зарежда се безжично"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Докинг станция за зарежд."</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Не се зарежда"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Свързано, не се зарежда"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Заредена"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Нулиране"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Премахване"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Сесията като гост се нулира…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Да се нулира ли сесията като гост?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Изтриване"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Запазване"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Изход от режима на гост"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Нулиране на сесията като гост"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Изход от сесията като гост"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Цялата активност ще бъде изтрита при изход"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"При изход можете да запазите активността или да я изтриете"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Нулирайте, за да изтриете активността в сесията сега. Можете също да я запазите или изтриете при изход"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Правене на снимка"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Избиране на изображение"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Избиране на снимката"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Времето"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Качество на въздуха"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Предаване: Инф."</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Изберете снимка на потребителския профил"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Икона за основния потребител"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Физическа клавиатура"</string>
diff --git a/packages/SettingsLib/res/values-bn/arrays.xml b/packages/SettingsLib/res/values-bn/arrays.xml
index fdb611b..5e6bb95 100644
--- a/packages/SettingsLib/res/values-bn/arrays.xml
+++ b/packages/SettingsLib/res/values-bn/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"সিস্টেমের নির্বাচন ব্যবহার করুন (ডিফল্ট)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> অডিও"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> অডিও"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"সিস্টেমের নির্বাচন ব্যবহার করুন (ডিফল্ট)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> অডিও"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> অডিও"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"সিস্টেমের নির্বাচন ব্যবহার করুন (ডিফল্ট)"</item>
     <item msgid="8003118270854840095">"৪৪.১ kHz"</item>
diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml
index 9cc930f..217cfe9 100644
--- a/packages/SettingsLib/res/values-bn/strings.xml
+++ b/packages/SettingsLib/res/values-bn/strings.xml
@@ -117,8 +117,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="7064307749579335765">"পরিচিতি শেয়ার করা"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"পরিচিতি শেয়ার করার কাজে ব্যবহার করুন"</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">"সিম অ্যাক্সেস"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"দ্রুত চার্জ হচ্ছে"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"ধীরে চার্জ হচ্ছে"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"কেবল ছাড়া চার্জ হচ্ছে"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"চার্জিং ডক"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"চার্জ হচ্ছে না"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"কানেক্ট করা থাকলেও চার্জ করা হচ্ছে না"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"চার্জ হয়েছে"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"রিসেট করুন"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"সরান"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"গেস্ট সেশন রিসেট করা হচ্ছে..."</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"অতিথি সেশন রিসেট করতে চান?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"মুছুন"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"সেভ করুন"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"\'অতিথি মোড\' ছেড়ে বেরিয়ে আসুন"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"অতিথি সেশন রিসেট করুন"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"\'অতিথি মোড\' ছেড়ে বেরিয়ে আসুন"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"ছেড়ে বেরিয়ে যাওয়ার সময় সব অ্যাক্টিভিটি মুছে দেওয়া হবে"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"ছেড়ে বেরিয়ে যাওয়ার সময় আপনি অ্যাক্টিভিটি সেভ করতে পারবেন বা মুছতে পারবেন"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"সেশন অ্যাক্টিভিটি মুছে দিতে এখন রিসেট করুন বা ছেড়ে বেরিয়ে আসার সময় আপনি অ্যাক্টিভিটি সেভ করতে বা মুছতে পারবেন"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"ফটো তুলুন"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"একটি ইমেজ বেছে নিন"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"ফটো বেছে নিন"</string>
@@ -644,6 +660,7 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"আবহাওয়া"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"এয়ার কোয়ালিটি"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"কাস্ট সম্পর্কিত তথ্য"</string>
+    <string name="dream_complication_title_home_controls" msgid="9153381632476738811">"হোম কন্ট্রোল"</string>
     <string name="avatar_picker_title" msgid="8492884172713170652">"একটি প্রোফাইল ছবি বেছে নিন"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"ডিফল্ট ব্যবহারকারীর আইকন"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"ফিজিক্যাল কীবোর্ড"</string>
diff --git a/packages/SettingsLib/res/values-bs/arrays.xml b/packages/SettingsLib/res/values-bs/arrays.xml
index 32edef1..262a35f 100644
--- a/packages/SettingsLib/res/values-bs/arrays.xml
+++ b/packages/SettingsLib/res/values-bs/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Korištenje odabira sistema (zadano)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Korištenje odabira sistema (zadano)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Korištenje odabira sistema (zadano)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml
index f8b1452..da81766 100644
--- a/packages/SettingsLib/res/values-bs/strings.xml
+++ b/packages/SettingsLib/res/values-bs/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Prenošenje fajla"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Ulazni uređaj"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Pristup internetu"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Dijeljenje kontakata"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Koristi za dijeljenje kontakta"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Dijeljenje kontakata i historije poziva"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Upotrijebite za dijeljenje kontakata i historije poziva"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Dijeljenje internet veze"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"SMS-ovi"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Pristup SIM-u"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Brzo punjenje"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Sporo punjenje"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Bežično punjenje"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Priključna stanica"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Ne puni se"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Povezano, ne puni se"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Napunjeno"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Poništi"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Ukloni"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Poništavanje sesije gosta…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Poništiti sesiju gosta?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Izbriši"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Sačuvaj"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Napusti način rada za gosta"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Poništi sesiju gosta"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Izlazak iz sesije gosta"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Sva aktivnost će se izbrisati pri napuštanju"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Možete sačuvati ili izbrisati svoju aktivnost pri izlasku"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Poništite da odmah izbrišete aktivnost iz sesije ili je možete sačuvati ili izbrisati pri izlasku"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Snimite fotografiju"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Odaberite sliku"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Odabir fotografije"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Vremenska prognoza"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Kvalitet zraka"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Podaci o emitiranju"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Odaberite sliku profila"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Zadana ikona korisnika"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Fizička tastatura"</string>
diff --git a/packages/SettingsLib/res/values-ca/arrays.xml b/packages/SettingsLib/res/values-ca/arrays.xml
index a267af8..8c34a1f 100644
--- a/packages/SettingsLib/res/values-ca/arrays.xml
+++ b/packages/SettingsLib/res/values-ca/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Utilitza la selecció del sistema (predeterminada)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"Àudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Àudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Utilitza la selecció del sistema (predeterminada)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"Àudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Àudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Utilitza la selecció del sistema (predeterminada)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml
index 9387d0b..38f1948 100644
--- a/packages/SettingsLib/res/values-ca/strings.xml
+++ b/packages/SettingsLib/res/values-ca/strings.xml
@@ -117,8 +117,8 @@
     <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="7064307749579335765">"Compartició de contactes"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"S\'utilitza per compartir contactes."</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Compartició de contactes i 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>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Accés a la SIM"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Carregant ràpidament"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Carregant lentament"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Carregant sense fil"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Base de càrrega"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"No s\'està carregant"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Connectat; no s\'està carregant"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Carregada"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Restableix"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Suprimeix"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"S\'està restablint el convidat…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Vols restablir la sessió de convidat?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Suprimeix"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Desa"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Surt del mode de convidat"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Restableix la sessió de convidat"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Surt del mode de convidat"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Se suprimirà tota l\'activitat en sortir"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Pots desar o suprimir l\'activitat en sortir"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Restableix la sessió per suprimir l\'activitat ara, o desa o suprimeix l\'activitat en sortir."</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Fes una foto"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Tria una imatge"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Selecciona una foto"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Temps"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Qualitat de l\'aire"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Informació d\'emissió"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Tria una foto de perfil"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Icona d\'usuari predeterminat"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Teclat físic"</string>
diff --git a/packages/SettingsLib/res/values-cs/arrays.xml b/packages/SettingsLib/res/values-cs/arrays.xml
index 3eeae64..90bcaa4 100644
--- a/packages/SettingsLib/res/values-cs/arrays.xml
+++ b/packages/SettingsLib/res/values-cs/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Použít systémový výběr (výchozí)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"Zvuk <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Zvuk <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Použít systémový výběr (výchozí)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"Zvuk <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Zvuk <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Použít systémový výběr (výchozí)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml
index 52b4924..33f6489 100644
--- a/packages/SettingsLib/res/values-cs/strings.xml
+++ b/packages/SettingsLib/res/values-cs/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Přenos souborů"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Vstupní zařízení"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Přístup k internetu"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Sdílení kontaktů"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Použít ke sdílení kontaktů"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Sdílení kontaktů a historie volání"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Používat ke sdílení kontaktů a historie hovorů"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Sdílení internetového připojení"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Textové zprávy"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Přístup k SIM kartě"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Rychlé nabíjení"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Pomalé nabíjení"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Bezdrátové nabíjení"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Nabíjecí dok"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Nenabíjí se"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Připojeno, nenabíjí se"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Nabito"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Resetovat"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Odstranit"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Resetování hosta…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Resetovat relaci hosta?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Smazat"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Uložit"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Ukončit režim hosta"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Resetovat relaci hosta"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Ukončit režim hosta"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Veškerá aktivita bude při ukončení smazána"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Aktivitu můžete při ukončení uložit nebo smazat"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Aktivitu relace můžete ihned smazat resetováním, případně ji můžete uložit nebo smazat při ukončení"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Pořídit fotku"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Vybrat obrázek"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Vybrat fotku"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Počasí"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Kvalita vzduchu"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Info o odesílání"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Vyberte profilový obrázek"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Výchozí uživatelská ikona"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Fyzická klávesnice"</string>
diff --git a/packages/SettingsLib/res/values-da/arrays.xml b/packages/SettingsLib/res/values-da/arrays.xml
index 58ca722..155104ae 100644
--- a/packages/SettingsLib/res/values-da/arrays.xml
+++ b/packages/SettingsLib/res/values-da/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Brug systemvalg (standard)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>-lyd"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>-lyd"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Brug systemvalg (standard)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>-lyd"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>-lyd"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Brug systemvalg (standard)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml
index 34295fd..44fa025 100644
--- a/packages/SettingsLib/res/values-da/strings.xml
+++ b/packages/SettingsLib/res/values-da/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Filoverførsel"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Inputenhed"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Internetadgang"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Deling af kontakter"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Brug til deling af kontakter"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Deling af kontakter og opkaldshistorik"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Brug til deling af kontakter og opkaldshistorik"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Deling af internetforbindelse"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Sms-beskeder"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Adgang til SIM-kort"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Oplader hurtigt"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Oplader langsomt"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Trådløs opladning"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Dockingstation"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Oplader ikke"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Tilsluttet, oplader ikke"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Opladet"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Nulstil"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Fjern"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Nulstiller gæst…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Vil du nulstille gæstesessionen?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Slet"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Gem"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Afslut gæstetilstand"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Nulstil gæstesession"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Afslut gæstesession"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Al aktivitet slettes ved afslutning"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Du kan gemme eller slette din aktivitet ved afslutning"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Nulstil for at slette sessionsaktiviteten nu, eller gem eller slet aktivitet ved afslutning"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Tag et billede"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Vælg et billede"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Vælg billede"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Vejr"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Luftkvalitet"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Cast-oplysninger"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Vælg et profilbillede"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Ikon for standardbruger"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Fysisk tastatur"</string>
diff --git a/packages/SettingsLib/res/values-de/arrays.xml b/packages/SettingsLib/res/values-de/arrays.xml
index a8eb3f6..31126a8 100644
--- a/packages/SettingsLib/res/values-de/arrays.xml
+++ b/packages/SettingsLib/res/values-de/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Systemauswahl verwenden (Standard)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>-Audio"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>-Audio"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Systemauswahl verwenden (Standard)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>-Audio"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>-Audio"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Systemauswahl verwenden (Standard)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml
index 63d3c1e..dc332e2 100644
--- a/packages/SettingsLib/res/values-de/strings.xml
+++ b/packages/SettingsLib/res/values-de/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Dateiübertragung"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Eingabegerät"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Internetzugriff"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Kontaktfreigabe"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Für Kontaktfreigabe nutzen"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Teilen von Kontakten und der Anrufliste"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Zum Teilen von Kontakten und der Anrufliste verwenden"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Freigabe der Internetverbindung"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"SMS"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Zugriff auf SIM"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Schnelles Aufladen"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Langsames Aufladen"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Kabelloses Laden"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Wird am Dock geladen"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Wird nicht geladen"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Verbunden, wird nicht geladen"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Aufgeladen"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Zurücksetzen"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Entfernen"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Gast wird zurückgesetzt…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Gastsitzung zurücksetzen?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Löschen"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Speichern"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Gastmodus beenden"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Gastsitzung zurücksetzen"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Gastmodus beenden"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Beim Beenden werden alle Aktivitäten gelöscht"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Speichere oder lösche deine Aktivitäten beim Beenden"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Zurücksetzen, um jetzt die Sitzungsaktivitäten zu löschen, oder Aktivitäten beim Beenden speichern oder löschen"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Foto machen"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Bild auswählen"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Foto auswählen"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Wetter"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Luftqualität"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Streaming-Info"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Profilbild auswählen"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Standardmäßiges Nutzersymbol"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Physische Tastatur"</string>
diff --git a/packages/SettingsLib/res/values-el/arrays.xml b/packages/SettingsLib/res/values-el/arrays.xml
index ccd06fa..70000e1 100644
--- a/packages/SettingsLib/res/values-el/arrays.xml
+++ b/packages/SettingsLib/res/values-el/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Χρήση επιλογής συστήματος (Προεπιλογή)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"Ήχος <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Ήχος <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Χρήση επιλογής συστήματος (Προεπιλογή)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"Ήχος <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Ήχος <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Χρήση επιλογής συστήματος (Προεπιλογή)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml
index 1a7bb61..378b0cd 100644
--- a/packages/SettingsLib/res/values-el/strings.xml
+++ b/packages/SettingsLib/res/values-el/strings.xml
@@ -117,8 +117,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="7064307749579335765">"Κοινή χρήση επαφών"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Για κοινή χρήση επαφών"</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>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Ταχεία φόρτιση"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Αργή φόρτιση"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Ασύρματη φόρτιση"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Βάση φόρτισης"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Δεν φορτίζει"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Συνδεδεμένη, δεν φορτίζει"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Φορτισμένη"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Επαναφορά"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Κατάργηση"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Επαναφορά επισκέπτη…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Επαναφορά περιόδου σύνδεσης επισκέπτη;"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Διαγραφή"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Αποθήκευση"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Έξοδος από λειτ. επισκέπτη"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Επαναφορά περ. σύνδεσης επισκέπτη"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Έξοδος επισκέπτη"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Όλη η δραστηριότητα θα διαγραφεί κατά την έξοδο"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Αποθηκεύστε ή διαγράψτε τη δραστηριότητά σας κατά την έξοδο"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Επαναφορά για διαγραφή της δραστηριότητας της περιόδου σύνδεσης ή αποθήκευση ή διαγραφή κατά την έξοδο."</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Λήψη φωτογραφίας"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Επιλογή εικόνας"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Επιλογή φωτογραφίας"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Καιρός"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Ποιότητα αέρα"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Πληροφορίες ηθοποιών"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Επιλογή φωτογραφίας προφίλ"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Προεπιλεγμένο εικονίδιο χρήστη"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Φυσικό πληκτρολόγιο"</string>
diff --git a/packages/SettingsLib/res/values-en-rAU/arrays.xml b/packages/SettingsLib/res/values-en-rAU/arrays.xml
index 697e49a..fc6f791 100644
--- a/packages/SettingsLib/res/values-en-rAU/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rAU/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Use system selection (default)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Use system selection (default)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Use system selection (default)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml
index 506617b..f95c997 100644
--- a/packages/SettingsLib/res/values-en-rAU/strings.xml
+++ b/packages/SettingsLib/res/values-en-rAU/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"File transfer"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Input device"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Internet access"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Contact sharing"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Use for contact sharing"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Contacts and call history sharing"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Use for contacts and call history sharing"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Internet connection sharing"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Text messages"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM access"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Charging rapidly"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Charging slowly"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Charging wirelessly"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Charging dock"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Not charging"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Connected, not charging"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Charged"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Reset"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Remove"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Resetting guest…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Reset guest session?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Delete"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Save"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Exit guest mode"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Reset guest session"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Exit guest"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"All activity will be deleted on exit"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"You can save or delete your activity on exit"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Reset to delete session activity now, or you can save or delete activity on exit"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Take a photo"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Choose an image"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Select photo"</string>
@@ -644,6 +660,7 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Weather"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Air quality"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Cast info"</string>
+    <string name="dream_complication_title_home_controls" msgid="9153381632476738811">"Home Controls"</string>
     <string name="avatar_picker_title" msgid="8492884172713170652">"Choose a profile picture"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Default user icon"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Physical keyboard"</string>
diff --git a/packages/SettingsLib/res/values-en-rCA/arrays.xml b/packages/SettingsLib/res/values-en-rCA/arrays.xml
index 697e49a..fc6f791 100644
--- a/packages/SettingsLib/res/values-en-rCA/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rCA/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Use system selection (default)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Use system selection (default)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Use system selection (default)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-en-rCA/strings.xml b/packages/SettingsLib/res/values-en-rCA/strings.xml
index 637295a..330b764 100644
--- a/packages/SettingsLib/res/values-en-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-en-rCA/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"File transfer"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Input device"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Internet access"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Contact sharing"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Use for contact sharing"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Contacts and call history sharing"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Use for contacts and call history sharing"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Internet connection sharing"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Text messages"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM access"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Charging rapidly"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Charging slowly"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Charging wirelessly"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Charging dock"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Not charging"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Connected, not charging"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Charged"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Reset"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Remove"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Resetting guest…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Reset guest session?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Delete"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Save"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Exit guest mode"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Reset guest session"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Exit guest"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"All activity will be deleted on exit"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"You can save or delete your activity on exit"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Reset to delete session activity now, or you can save or delete activity on exit"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Take a photo"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Choose an image"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Select photo"</string>
@@ -644,6 +660,7 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Weather"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Air quality"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Cast info"</string>
+    <string name="dream_complication_title_home_controls" msgid="9153381632476738811">"Home Controls"</string>
     <string name="avatar_picker_title" msgid="8492884172713170652">"Choose a profile picture"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Default user icon"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Physical keyboard"</string>
diff --git a/packages/SettingsLib/res/values-en-rGB/arrays.xml b/packages/SettingsLib/res/values-en-rGB/arrays.xml
index 697e49a..fc6f791 100644
--- a/packages/SettingsLib/res/values-en-rGB/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rGB/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Use system selection (default)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Use system selection (default)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Use system selection (default)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml
index 506617b..f95c997 100644
--- a/packages/SettingsLib/res/values-en-rGB/strings.xml
+++ b/packages/SettingsLib/res/values-en-rGB/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"File transfer"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Input device"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Internet access"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Contact sharing"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Use for contact sharing"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Contacts and call history sharing"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Use for contacts and call history sharing"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Internet connection sharing"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Text messages"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM access"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Charging rapidly"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Charging slowly"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Charging wirelessly"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Charging dock"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Not charging"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Connected, not charging"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Charged"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Reset"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Remove"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Resetting guest…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Reset guest session?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Delete"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Save"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Exit guest mode"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Reset guest session"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Exit guest"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"All activity will be deleted on exit"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"You can save or delete your activity on exit"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Reset to delete session activity now, or you can save or delete activity on exit"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Take a photo"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Choose an image"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Select photo"</string>
@@ -644,6 +660,7 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Weather"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Air quality"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Cast info"</string>
+    <string name="dream_complication_title_home_controls" msgid="9153381632476738811">"Home Controls"</string>
     <string name="avatar_picker_title" msgid="8492884172713170652">"Choose a profile picture"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Default user icon"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Physical keyboard"</string>
diff --git a/packages/SettingsLib/res/values-en-rIN/arrays.xml b/packages/SettingsLib/res/values-en-rIN/arrays.xml
index 697e49a..fc6f791 100644
--- a/packages/SettingsLib/res/values-en-rIN/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rIN/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Use system selection (default)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Use system selection (default)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Use system selection (default)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml
index 506617b..f95c997 100644
--- a/packages/SettingsLib/res/values-en-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-en-rIN/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"File transfer"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Input device"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Internet access"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Contact sharing"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Use for contact sharing"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Contacts and call history sharing"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Use for contacts and call history sharing"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Internet connection sharing"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Text messages"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM access"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Charging rapidly"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Charging slowly"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Charging wirelessly"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Charging dock"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Not charging"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Connected, not charging"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Charged"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Reset"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Remove"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Resetting guest…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Reset guest session?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Delete"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Save"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Exit guest mode"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Reset guest session"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Exit guest"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"All activity will be deleted on exit"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"You can save or delete your activity on exit"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Reset to delete session activity now, or you can save or delete activity on exit"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Take a photo"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Choose an image"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Select photo"</string>
@@ -644,6 +660,7 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Weather"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Air quality"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Cast info"</string>
+    <string name="dream_complication_title_home_controls" msgid="9153381632476738811">"Home Controls"</string>
     <string name="avatar_picker_title" msgid="8492884172713170652">"Choose a profile picture"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Default user icon"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Physical keyboard"</string>
diff --git a/packages/SettingsLib/res/values-en-rXC/arrays.xml b/packages/SettingsLib/res/values-en-rXC/arrays.xml
index aca3eb4..34db380 100644
--- a/packages/SettingsLib/res/values-en-rXC/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rXC/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‎‏‎‎‎‎‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‏‎‎‎map13‎‏‎‎‏‎"</item>
     <item msgid="8147982633566548515">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‎‎‏‏‎‏‏‏‎‎‏‏‎‎‎‎‏‎‎‏‎‎‎‎‏‏‎‏‏‏‎‎‏‎‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎‎‏‏‎map14‎‏‎‎‏‎"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‏‎‏‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‏‏‎‏‎‎‏‎‎‏‏‏‎‎‎‏‎‏‏‏‎‎‎‎‏‏‎‏‎‏‏‏‎‏‏‎Use System Selection (Default)‎‏‎‎‏‎"</item>
-    <item msgid="4055460186095649420">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‎‎‏‏‏‏‏‏‎‎‎‏‏‏‎‎‎‏‏‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‎‎‎‏‎‎‎‎‎‏‎‏‎‎‎‏‏‎‎‎SBC‎‏‎‎‏‎"</item>
-    <item msgid="720249083677397051">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‎‏‏‏‎‎‏‏‎‏‏‏‏‏‎‎‏‏‎‎‏‎‎‎‏‎‏‎‎‎‎‎‎‏‏‏‎‏‏‎AAC‎‏‎‎‏‎"</item>
-    <item msgid="1049450003868150455">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‏‎‎‏‎‎‎‎‎‏‏‎‎‏‎‏‎‎‏‏‎‏‏‏‏‏‏‎‎‎‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="QUALCOMM">Qualcomm®</xliff:g>‎‏‎‎‏‏‏‎ ‎‏‎‎‏‏‎<xliff:g id="APTX">aptX™</xliff:g>‎‏‎‎‏‏‏‎ audio‎‏‎‎‏‎"</item>
-    <item msgid="2908219194098827570">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‎‏‏‏‏‎‎‎‎‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎‏‏‎<xliff:g id="QUALCOMM">Qualcomm®</xliff:g>‎‏‎‎‏‏‏‎ ‎‏‎‎‏‏‎<xliff:g id="APTX_HD">aptX™ HD</xliff:g>‎‏‎‎‏‏‏‎ audio‎‏‎‎‏‎"</item>
-    <item msgid="3825367753087348007">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‎‎‎‏‎‏‏‎‎‏‏‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‎‎‎‎‎‎‏‎‏‏‎‏‏‎‏‎‎‏‎‎‏‏‏‎LDAC‎‏‎‎‏‎"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‏‏‏‎‏‏‎‏‎‏‎‏‎‎‏‏‏‏‎‎‏‎‏‎‎‏‎‏‎‎‎‏‏‎‎‏‎‎‏‏‏‎‏‏‏‎‎‎‎‎Use System Selection (Default)‎‏‎‎‏‎"</item>
-    <item msgid="9024885861221697796">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‎‎‎‏‎‎‎‏‎‎‏‎‎‎‎‎‏‎‎‎SBC‎‏‎‎‏‎"</item>
-    <item msgid="4688890470703790013">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‎‏‎‎‏‎‎‏‎‎‏‎‎‏‎‎‎‎‏‎‏‎‎‏‎‏‎‎‎‏‎‎‎‎‎‎‏‏‎‏‏‏‎‏‏‏‏‎‏‏‏‏‎‏‎AAC‎‏‎‎‏‎"</item>
-    <item msgid="8627333814413492563">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎‎‏‎‏‎‎‎‎‎‏‏‎‏‏‎‏‎‏‎‏‎‎‎‎‎‎‎‏‎‏‎‏‎‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="QUALCOMM">Qualcomm®</xliff:g>‎‏‎‎‏‏‏‎ ‎‏‎‎‏‏‎<xliff:g id="APTX">aptX™</xliff:g>‎‏‎‎‏‏‏‎ audio‎‏‎‎‏‎"</item>
-    <item msgid="3517061573669307965">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‎‏‏‏‏‎‎‎‏‏‏‎‎‏‏‎‏‏‏‎‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‎‎‎‏‎‎‎‏‏‎‎‎‏‏‏‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="QUALCOMM">Qualcomm®</xliff:g>‎‏‎‎‏‏‏‎ ‎‏‎‎‏‏‎<xliff:g id="APTX_HD">aptX™ HD</xliff:g>‎‏‎‎‏‏‏‎ audio‎‏‎‎‏‎"</item>
-    <item msgid="2553206901068987657">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‏‏‎‏‏‎‏‏‏‎‏‏‎‏‎‎‎‎‎‎‏‎‎‏‏‎‎‎‏‎‏‎‎‎‎‏‎‎‏‎‏‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‏‎LDAC‎‏‎‎‏‎"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‎‏‏‎‏‏‏‎‎‏‎‏‏‎‎‎‎‎‎‎‏‏‏‎‎‏‏‎‏‏‎‎‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‎‏‏‏‏‎Use System Selection (Default)‎‏‎‎‏‎"</item>
     <item msgid="8003118270854840095">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‎‎‎‎‏‏‎‎‏‎‎‏‏‎‏‎‏‎‏‎‎‎‏‏‏‏‎‏‏‎‏‏‏‏‎‏‏‎‏‏‏‏‏‏‎‎‎‏‏‏‏‏‎44.1 kHz‎‏‎‎‏‎"</item>
diff --git a/packages/SettingsLib/res/values-en-rXC/strings.xml b/packages/SettingsLib/res/values-en-rXC/strings.xml
index bb4de3d..a0a9351 100644
--- a/packages/SettingsLib/res/values-en-rXC/strings.xml
+++ b/packages/SettingsLib/res/values-en-rXC/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‎‎‎‎‏‏‏‏‎‏‎‏‎‎‏‎‎‎‎‎‏‏‏‏‎‎‏‏‏‎‏‏‏‎‏‏‏‏‏‎‎‏‏‎‏‎‏‏‎‏‏‎‎File transfer‎‏‎‎‏‎"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‏‏‏‎‏‎‎‏‎‎‏‎‎‏‎‏‎‎‏‏‎‏‎‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‏‎‏‏‏‏‎‏‏‎‏‎‎Input device‎‏‎‎‏‎"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‏‏‏‏‎‏‏‎‏‏‎‏‏‏‎‏‏‎‎‎‎‏‏‏‎‎‏‎‎‏‏‎‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‏‏‏‏‎‏‏‎‎‎Internet access‎‏‎‎‏‎"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‎‎‏‎‎‏‎‏‏‏‎‏‏‎‎‏‏‏‏‎‎‎‎‏‎‎‏‏‎‏‏‎‏‏‎‏‏‏‎‎‏‎‏‎‎‎‎‏‎‏‎‏‎‏‎Contact sharing‎‏‎‎‏‎"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‎‎‎‎‎‏‎‏‎‎‏‎‏‏‏‎‎‏‎‏‏‎‏‎‎‎‎‏‎‎‎‎‏‏‎‎‎‏‏‎‎‎‎‏‏‏‎‏‎‎‏‏‏‎‎‎‎Use for contact sharing‎‏‎‎‏‎"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‎‏‏‎‏‎‏‏‏‏‏‎‎‏‎‏‏‎‎‏‎‏‎‎‎‏‏‎‎‎‎‎‏‏‎‏‎‏‏‏‎‎‎‏‏‏‎‏‏‎‏‏‎Contacts and call history sharing‎‏‎‎‏‎"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‏‏‏‎‏‎‏‏‏‏‎‎‎‎‎‏‏‎‎‎‎‏‏‏‎‎‏‎‎‎‎‎‏‏‏‎‎‏‏‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎Use for contacts and call history sharing‎‏‎‎‏‎"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‏‏‎‏‏‎‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‎‎‎‏‎‎‏‏‎‏‏‏‎‎‏‏‎‏‏‏‏‏‎‏‎‎‎‏‎‎Internet connection sharing‎‏‎‎‏‎"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‏‏‎‎‎‏‏‎‎‎‎‏‏‏‎Text Messages‎‏‎‎‏‎"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‏‏‏‎‎‏‎‏‎‏‏‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‏‏‏‎‎‏‎‎‎‏‎‎‏‎‏‎‏‏‏‎‏‏‎‎‏‎‎SIM Access‎‏‎‎‏‎"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‏‏‏‏‎‎‏‏‏‏‏‎‎‎‏‎‎‎‎‏‏‏‎‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‏‏‎‎‎‎‏‎‏‎Charging rapidly‎‏‎‎‏‎"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‏‎‎‎‎‎‎‎‎‎‏‏‎‎‏‎‏‏‏‏‎‎‏‎‏‏‏‎‎‏‏‎‏‎‎‎‏‏‎‎‏‎‏‏‎‎‎‎‏‏‏‏‎Charging slowly‎‏‎‎‏‎"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‎‎‎‏‎‎‎‎‎‎‏‏‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‎‏‎‏‎Charging wirelessly‎‏‎‎‏‎"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‏‎‎‏‎‏‏‎‏‏‏‏‎‏‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‎‎‏‎‏‏‎‎‏‎‎‎‏‏‎‏‎‎‏‎Charging Dock‎‏‎‎‏‎"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‎‎‎‎‎‏‏‏‎‎‎‏‎‎‎‎‏‎‎‎‏‎‎‎‏‎‏‎‏‎‎‏‎‏‏‎‎‎‎‏‏‎‎‏‎‎‎‎‎‏‎‏‎Not charging‎‏‎‎‏‎"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‏‎‏‎‏‎‎‎‎‎‎‏‏‎‏‎‏‏‎‎‎‎‎‎‎‎‏‎‏‎‏‎Connected, not charging‎‏‎‎‏‎"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‏‎‎‏‎‏‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‏‎‏‎‏‏‏‎‎‎‏‏‎‎‎‏‏‎‏‎‏‎‎‏‏‏‎‎‎‎‎Charged‎‏‎‎‏‎"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‎‏‏‏‏‏‏‎‎‏‎‏‎‎‎‎‎‏‏‏‏‎‏‏‎‏‎‏‎‎‏‎‎‏‏‏‏‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‎‏‎‏‎Reset‎‏‎‎‏‎"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‏‎‏‏‎‏‎‏‎‎‏‏‎‏‎‎‎‎‏‎‏‎‎‎‏‎‏‏‎‎‏‏‏‎‏‎‎‏‏‏‎‎‎‏‎‎‎‎‏‏‏‎Remove‎‏‎‎‏‎"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‎‏‏‏‎‎‎‎‎‎‏‏‎‏‏‎‎‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‏‎‏‏‎‏‏‎‎‎‎‎‏‏‏‏‏‎‎Resetting guest…‎‏‎‎‏‎"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‎‏‎‎‎‏‏‎‏‎‏‏‎‎‏‏‎‎‎‏‏‎‏‏‎‎‎‏‏‎‎‏‎‎‏‏‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎Reset guest session?‎‏‎‎‏‎"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‎‏‎‏‏‏‎‏‏‏‎‎‏‏‏‎‏‎‎‏‏‎‏‏‎‎‎‎‏‎‎‎‏‎‎‏‎‏‎‏‎‎‏‎‏‏‎‎‏‏‎‎Delete‎‏‎‎‏‎"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‏‏‎‎‎‏‏‏‏‏‎‎‏‏‏‎‎‎‎‏‏‎‎‎‎‎‏‏‎‎‎‎‎‎‎‏‏‏‎‏‎‏‎‎‎‏‏‎‏‏‎‏‏‎Save‎‏‎‎‏‎"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‎‎‏‎‎‏‏‎‏‏‏‏‏‎‎‎‎‎‎‎‏‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‎‎‎‎‎‏‏‏‎‎‎‎Exit guest mode‎‏‎‎‏‎"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‎‏‎‏‎‎‏‎‎‎‏‏‏‏‏‎‏‎‏‏‎‏‏‏‎‎‏‎‎‎‎‎‎‎‏‏‏‎‎‎‎‏‏‏‎‏‏‏‎Reset guest session‎‏‎‎‏‎"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‎‎‎‏‎‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‎‎‏‏‎‏‏‎‎‎‎‏‏‎‏‏‏‎‎‏‎‎‎‏‎‏‎‎‏‎‏‏‏‏‏‎Exit guest‎‏‎‎‏‎"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‎‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‎‎‏‎‏‏‎‏‏‏‎‎‏‏‎‎‏‎‏‏‏‏‏‎All activity will be deleted on exit‎‏‎‎‏‎"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‏‏‏‎‎‏‏‏‎‎‏‏‎‏‏‎‏‎‎‏‎‏‏‎‏‎‏‎‏‏‏‏‎‎‎‎‎‎‎‏‎‎You can save or delete your activity on exit‎‏‎‎‏‎"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎‏‏‎‎‎‏‏‏‎‎‏‎‏‏‎‏‎‎‎‏‎‏‎‏‎‎‏‎‎‎‎‎‏‏‎‏‎‏‎‏‎‏‎‏‏‏‎‎‎Reset to delete session activity now, or you can save or delete activity on exit‎‏‎‎‏‎"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‎‏‏‏‏‏‎‎‏‏‏‏‎‎‎‎‏‎‎‎‏‏‏‎‎‎‏‎‎‎‎‎‏‎‎‎‏‎‏‎‎‎‏‏‎‎‎‎‏‎‎‎‎‎‏‎‎Take a photo‎‏‎‎‏‎"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‏‏‏‎‏‏‎‏‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‏‏‎‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‏‎‏‏‏‏‎‎‎Choose an image‎‏‎‎‏‎"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‎‎‎‎‎‏‎‎‏‎‏‎‏‎‎‏‏‏‏‏‎‎‏‎‏‎‎‎‏‎‏‎‏‎‎‏‎‏‎‏‎‏‎‎‎‎‎‎‎‎‎‏‎‏‎‏‎Select photo‎‏‎‎‏‎"</string>
@@ -644,6 +660,7 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‎‎‏‎‎‏‏‏‎‏‎‏‎‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‎‎‎‏‎‎‎‎‎‎‏‏‎‎‎‎‏‎‏‏‏‏‎Weather‎‏‎‎‏‎"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‎‎‎‏‎‏‏‎‎‏‎‏‎‏‎‏‏‏‏‎‏‎‏‎‏‏‎‎‏‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎Air Quality‎‏‎‎‏‎"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‏‏‎‎‏‎‎‏‏‏‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‏‏‏‏‎‎‏‎‎‎‎‎‎‏‏‏‎‏‏‎‎‏‏‏‎‎‎Cast Info‎‏‎‎‏‎"</string>
+    <string name="dream_complication_title_home_controls" msgid="9153381632476738811">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‎‏‎‏‏‎‎‎‎‎‎‏‏‎‎‏‎‎‎‏‏‎‎‏‎‏‎‏‏‏‎‎‎‏‏‏‎‏‎‎‏‏‏‏‏‎‏‏‎Home Controls‎‏‎‎‏‎"</string>
     <string name="avatar_picker_title" msgid="8492884172713170652">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‎‎‏‏‎‎‏‎‎‏‎‎‏‎‏‎‎‎‎‏‏‎‏‎‎‏‎‎‎‏‏‎‏‏‎‎‎‏‎‏‏‎‏‏‎‏‏‏‎‎‎Choose a profile picture‎‏‎‎‏‎"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‎‏‎‎‏‎‏‎‎‏‏‏‎‎‏‎‏‏‏‎‏‏‎‏‎‏‎‎‎‎‎‎‏‏‏‎‏‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎Default user icon‎‏‎‎‏‎"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎‎‎‏‏‏‎‏‏‎‏‏‎‏‏‏‎‎‏‎‎‎‏‎‏‎‎‎‎‎‎‎‎‏‏‏‎‏‎‏‏‏‎‎‎‏‎‏‎‏‎‏‎‎‎Physical keyboard‎‏‎‎‏‎"</string>
diff --git a/packages/SettingsLib/res/values-es-rUS/arrays.xml b/packages/SettingsLib/res/values-es-rUS/arrays.xml
index 6a926d2..9b1aa3a 100644
--- a/packages/SettingsLib/res/values-es-rUS/arrays.xml
+++ b/packages/SettingsLib/res/values-es-rUS/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Usar selección del sistema (predeterminado)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Usar selección del sistema (predeterminado)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Usar selección del sistema (predeterminado)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml
index db0a617..88be9a8 100644
--- a/packages/SettingsLib/res/values-es-rUS/strings.xml
+++ b/packages/SettingsLib/res/values-es-rUS/strings.xml
@@ -117,8 +117,8 @@
     <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="7064307749579335765">"Compartir contactos"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Utilizar para compartir contactos"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Compartir contactos e historial de llam."</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>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Acceso a SIM"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Cargando rápidamente"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Carga lenta"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Carga inalámbrica"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Base de carga"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"No se está cargando."</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Conectado; no se está cargando"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Cargada"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Restablecer"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Quitar"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Restableciendo invitado…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"¿Quieres restablecer la sesión de invitado?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Borrar"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Guardar"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Salir del modo de invitado"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Restablecer la sesión de invitado"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Salir del modo de invitado"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Cuando salgas, se borrará toda la actividad"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Puedes guardar o borrar la actividad cuando salgas"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Restablece la sesión para eliminar la actividad ahora; o guarda o borra la actividad cuando salgas"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Tomar una foto"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Elegir una imagen"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Seleccionar foto"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Clima"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Calidad del aire"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Info de reparto"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Elige una foto de perfil"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Ícono de usuario predeterminado"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Teclado físico"</string>
diff --git a/packages/SettingsLib/res/values-es/arrays.xml b/packages/SettingsLib/res/values-es/arrays.xml
index 7c37fa5..0677864 100644
--- a/packages/SettingsLib/res/values-es/arrays.xml
+++ b/packages/SettingsLib/res/values-es/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Usar preferencia del sistema (predeterminado)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Usar preferencia del sistema (predeterminado)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Usar preferencia del sistema (predeterminado)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml
index d69b446..ddfd4c9 100644
--- a/packages/SettingsLib/res/values-es/strings.xml
+++ b/packages/SettingsLib/res/values-es/strings.xml
@@ -117,8 +117,8 @@
     <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="7064307749579335765">"Compartir contactos"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Usar para compartir contactos"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Compartir contactos e historial de llamadas"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Usar para compartir los contactos y el 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>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Acceso a tarjeta SIM"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Carga rápida"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Carga lenta"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Carga inalámbrica"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Base de carga"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"No se está cargando"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Conectado pero sin cargar"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Cargada"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Restablecer"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Quitar"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Restableciendo invitado…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"¿Restablecer sesión de invitado?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Eliminar"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Guardar"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Salir del modo Invitado"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Restablecer sesión de invitado"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Salir del modo Invitado"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Toda la actividad se eliminará cuando salgas"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Puedes guardar o eliminar tu actividad al salir"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Restablece la sesión para eliminar la actividad ahora, o guarda o borra la actividad al salir"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Hacer foto"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Seleccionar una imagen"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Seleccionar foto"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Tiempo"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Calidad del aire"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Info. de emisión"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Elige una imagen de perfil"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Icono de usuario predeterminado"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Teclado físico"</string>
diff --git a/packages/SettingsLib/res/values-et/arrays.xml b/packages/SettingsLib/res/values-et/arrays.xml
index 14d0fd1..d986ecf 100644
--- a/packages/SettingsLib/res/values-et/arrays.xml
+++ b/packages/SettingsLib/res/values-et/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Süsteemi valiku kasutamine (vaikeseade)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"Heli: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Heli: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Süsteemi valiku kasutamine (vaikeseade)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"Heli: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Heli: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Süsteemi valiku kasutamine (vaikeseade)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml
index 30f0350..6b6edda 100644
--- a/packages/SettingsLib/res/values-et/strings.xml
+++ b/packages/SettingsLib/res/values-et/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Failiedastus"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Sisendseade"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Juurdepääs internetile"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Kontaktide jagamine"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Kasutamine kontaktide jagamiseks"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Kontaktide ja kõneajaloo jagamine"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Kasutage kontaktide ja kõneajaloo jagamiseks"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Interneti-ühenduse jagamine"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Tekstsõnumid"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Juurdepääs SIM-ile"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Kiirlaadimine"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Aeglaselt laadimine"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Juhtmevaba laadimine"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Laadimisdokk"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Ei lae"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Ühendatud, ei laeta"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Laetud"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Lähtesta"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Eemalda"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Külastajaseansi lähtestamine …"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Kas lähtestada külastajaseanss?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Kustuta"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Salvesta"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Välju külalisrežiimist"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Lähtesta külastajaseanss"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Välju külastajaseansist"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Kõik tegevused kustutatakse väljumisel"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Võite tegevused salvestada või kustutada väljumisel."</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Seansi tegevuste kohe kustutamiseks lähtestage; või salvestage või kustutage need väljumisel."</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Pildistage"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Valige pilt"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Valige foto"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Ilm"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Õhukvaliteet"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Osatäitjate teave"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Valige profiilipilt"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Vaikekasutajaikoon"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Füüsiline klaviatuur"</string>
diff --git a/packages/SettingsLib/res/values-eu/arrays.xml b/packages/SettingsLib/res/values-eu/arrays.xml
index cc47e27..d166e1b 100644
--- a/packages/SettingsLib/res/values-eu/arrays.xml
+++ b/packages/SettingsLib/res/values-eu/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Erabili sistema-hautapena (lehenetsia)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audioa"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audioa"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Erabili sistema-hautapena (lehenetsia)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audioa"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audioa"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Erabili sistema-hautapena (lehenetsia)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml
index 2aabf7f..9597c46 100644
--- a/packages/SettingsLib/res/values-eu/strings.xml
+++ b/packages/SettingsLib/res/values-eu/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Fitxategi-transferentzia"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Sarrerako gailua"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Interneteko konexioa"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Kontaktuak partekatzea"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Erabili kontaktuak partekatzeko"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Kontaktuak eta deien historia partekatzeko aukera"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Erabili kontaktuetarako eta deien historia partekatzeko"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Interneteko konexioa partekatzea"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Testu-mezuak"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIMerako sarbidea"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Bizkor kargatzen"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Mantso kargatzen"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Hari gabe kargatzen"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Oinarrian kargatzen"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Ez da kargatzen ari"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Konektatuta dago, baina ez da kargatzen ari"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Kargatuta"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Berrezarri"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Kendu"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Gonbidatuentzako saioa berrezartzen…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Gonbidatuentzako saioa berrezarri nahi duzu?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Ezabatu"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Gorde"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Irten gonbidatu modutik"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Berrezarri gonbidatuentzako saioa"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Irten gonbidatu modutik"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Irtetean, jarduera guztiak ezabatuko dira"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Irtetean, jarduerak gorde edo ezabatu egin ditzakezu"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Berrezarri saioa jarduerak ezabatzeko; bestela, aukeratu jarduerak irtetean gordetzea edo ezabatzea"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Atera argazki bat"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Aukeratu irudi bat"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Hautatu argazki bat"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Eguraldia"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Airearen kalitatea"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Igorpenari buruzko informazioa"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Aukeratu profileko argazki bat"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Erabiltzaile lehenetsiaren ikonoa"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Teklatu fisikoa"</string>
diff --git a/packages/SettingsLib/res/values-fa/arrays.xml b/packages/SettingsLib/res/values-fa/arrays.xml
index d76389b..b7761dd 100644
--- a/packages/SettingsLib/res/values-fa/arrays.xml
+++ b/packages/SettingsLib/res/values-fa/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"استفاده از انتخاب سیستم (پیش‌فرض)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"صوت <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"صوت <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"استفاده از انتخاب سیستم (پیش‌فرض)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"صوت <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"صوت <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"استفاده از انتخاب سیستم (پیش‌فرض)"</item>
     <item msgid="8003118270854840095">"۴۴٫۱ کیلوهرتز"</item>
diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml
index 76fe501..26f2260 100644
--- a/packages/SettingsLib/res/values-fa/strings.xml
+++ b/packages/SettingsLib/res/values-fa/strings.xml
@@ -117,8 +117,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="7064307749579335765">"هم‌رسانی مخاطب"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"استفاده برای هم‌رسانی مخاطب"</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">"دسترسی سیم‌کارت"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"درحال شارژ شدن سریع"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"درحال شارژ شدن آهسته"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"درحال شارژ بی‌سیم"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"پایه شارژ"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"شارژ نمی‌شود"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"متصل، شارژ نمی‌شود"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"شارژ کامل شد"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"بازنشانی"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"برداشتن"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"درحال بازنشانی مهمان…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"جلسه مهمان بازنشانی شود؟"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"حذف"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"ذخیره"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"خروج از حالت مهمان"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"بازنشاندن جلسه مهمان"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"خروج مهمان"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"همه فعالیت‌ها هنگام خروج حذف خواهد شد"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"می‌توانید فعالیتتان را هنگام خروج ذخیره یا حذف کنید"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"برای حذف فعالیت جلسه در این لحظه، بازنشانی کنید یا می‌توانید فعالیت را هنگام خروج ذخیره یا حذف کنید"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"عکس گرفتن"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"انتخاب تصویر"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"انتخاب عکس"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"آب‌وهوا"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"کیفیت هوا"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"اطلاعات پخش محتوا"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"انتخاب عکس نمایه"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"نماد کاربر پیش‌فرض"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"صفحه‌کلید فیزیکی"</string>
diff --git a/packages/SettingsLib/res/values-fi/arrays.xml b/packages/SettingsLib/res/values-fi/arrays.xml
index f828186..2969892 100644
--- a/packages/SettingsLib/res/values-fi/arrays.xml
+++ b/packages/SettingsLib/res/values-fi/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Käytä järjestelmän valintaa (oletus)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ‑ääni"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ‑ääni"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Käytä järjestelmän valintaa (oletus)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ‑ääni"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ‑ääni"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Käytä järjestelmän valintaa (oletus)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml
index 2ff1cfb..4ad9631 100644
--- a/packages/SettingsLib/res/values-fi/strings.xml
+++ b/packages/SettingsLib/res/values-fi/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Tiedostonsiirto"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Syöttölaite"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Internetyhteys"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Yhteystietojen jakaminen"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Käytä yhteystietojen jakamiseen"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Yhteystietojen ja soittohistorian jako"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Käytä yhteystiedoissa ja soittohistorian jakamiseen"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Internetyhteyden jakaminen"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Tekstiviestit"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM-kortin käyttö"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Nopea lataus"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Hidas lataus"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Langaton lataus"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Latausteline"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Ei laturissa"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Yhdistetty, ei ladata"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Ladattu"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Nollaa"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Poista"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Nollataan vierasta…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Nollataanko vierailija-käyttökerta?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Poista"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Tallenna"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Poistu vierastilasta"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Nollaa vierailija-käyttökerta"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Kirjaa vieras ulos"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Kaikki toiminta poistetaan uloskirjaamisen aikana"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Voit tallentaa tai poistaa toiminnan poistuessasi"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Nollaa poistaaksesi istunnon toiminnan nyt, tai voit tallentaa tai poistaa toimintaa poistuessasi"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Ota kuva"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Valitse kuva"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Valitse kuva"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Sää"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Ilmanlaatu"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Striimaustiedot"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Valitse profiilikuva"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Oletuskäyttäjäkuvake"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Fyysinen näppäimistö"</string>
diff --git a/packages/SettingsLib/res/values-fr-rCA/arrays.xml b/packages/SettingsLib/res/values-fr-rCA/arrays.xml
index 50c1bcb..12acbb6 100644
--- a/packages/SettingsLib/res/values-fr-rCA/arrays.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Utiliser sélect. du système (par défaut)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Utiliser sélect. du système (par défaut)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Utiliser sélect. du système (par défaut)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml
index 5325fbc..f6927d6 100644
--- a/packages/SettingsLib/res/values-fr-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Transfert de fichier"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Périphérique d\'entrée"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Accès Internet"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Partage de contacts"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Utiliser pour le partage de contacts"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Partage des contacts et des appels"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Sert à partager des contacts et l\'historique des appels"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Partage de connexion Internet"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Messages texte"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Accès à la carte SIM"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Recharge rapide"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Recharge lente"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"En recharge sans fil"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Station de recharge"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"N\'est pas en charge"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Connecté, pas en charge"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Chargée"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Réinitialiser"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Retirer"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Réinitialisation de la session Invité en cours…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Réinitialiser la session d\'invité?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Supprimer"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Enregistrer"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Quitter le mode Invité"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Réinitialiser la session d\'invité"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Quitter la session d\'invité"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Toute l\'activité sera supprimée à la fin de la session"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Vous pouvez enregistrer ou supprimer votre activité à la fin"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Réinitialisez pour supprimer l\'activité de la session maintenant, ou vous pouvez enregistrer ou supprimer l\'activité à la fin de la session"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Prendre une photo"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Sélectionner une image"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Sélectionnez une photo"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Météo"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Qualité de l\'air"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Info diffusion"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Choisir une photo de profil"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Icône d\'utilisateur par défaut"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Clavier physique"</string>
diff --git a/packages/SettingsLib/res/values-fr/arrays.xml b/packages/SettingsLib/res/values-fr/arrays.xml
index 6343f0d..80ac7e4 100644
--- a/packages/SettingsLib/res/values-fr/arrays.xml
+++ b/packages/SettingsLib/res/values-fr/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Utiliser la sélection du système (par défaut)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Utiliser la sélection du système (par défaut)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Utiliser la sélection du système (par défaut)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml
index b667fc0..3c620d1 100644
--- a/packages/SettingsLib/res/values-fr/strings.xml
+++ b/packages/SettingsLib/res/values-fr/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Transfert de fichiers"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Périphérique d\'entrée"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Accès Internet"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Partage de contacts"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Utiliser pour le partage de contacts"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Partage contacts/historique des appels"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"À utiliser pour partage des contacts/historique des appels"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Partage de connexion Internet"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"SMS"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Accès à la carte SIM"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Charge rapide"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Charge lente"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"En charge sans fil"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Station de charge"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Pas en charge"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Connectée, pas en charge"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Chargée"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Réinitialiser"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Supprimer"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Réinitialisation de la session Invité…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Réinitialiser la session Invité ?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Supprimer"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Enregistrer"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Quitter le mode Invité"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Réinitialiser la session Invité"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Quitter le mode Invité"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Toute l\'activité sera supprimée à la fin de la session"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Vous pouvez enregistrer ou supprimer l\'activité en quittant"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Réinitialisez la session pour supprimer immédiatement l\'activité. Vous pourrez aussi l\'enregistrer ou la supprimer en quittant la session."</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Prendre une photo"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Choisir une image"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Sélectionner une photo"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Météo"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Qualité de l\'air"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Infos distribution"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Choisissez une photo de profil"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Icône de l\'utilisateur par défaut"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Clavier physique"</string>
diff --git a/packages/SettingsLib/res/values-gl/arrays.xml b/packages/SettingsLib/res/values-gl/arrays.xml
index 22fb223..b6cf48e 100644
--- a/packages/SettingsLib/res/values-gl/arrays.xml
+++ b/packages/SettingsLib/res/values-gl/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Usar selección do sistema (predeterminado)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Usa a selección do sistema (predeterminado)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Usar selección do sistema (predeterminado)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml
index da66e92..f23608e 100644
--- a/packages/SettingsLib/res/values-gl/strings.xml
+++ b/packages/SettingsLib/res/values-gl/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Transferencia de ficheiros"</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="7064307749579335765">"Compartir contactos"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Utilizar para compartir contactos"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Compartir contactos e hist. de chamadas"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Uso da opción de compartir contactos e historial de chamadas"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Uso compartido da conexión a Internet"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Mensaxes de texto"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Acceso á SIM"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Cargando rapidamente"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Cargando lentamente"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Cargando sen fíos"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Base de carga"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Non se está cargando"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Conectado, sen cargar"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Cargada"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Restablecer"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Quitar"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Restablecendo sesión de convidado…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Queres restablecer a sesión de convidado?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Eliminar"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Gardar"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Saír do modo de convidado"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Restablecer sesión de convidado"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Saír do modo de convidado"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Eliminarase toda a actividade ao saír"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Podes gardar ou eliminar a túa actividade ao saír"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Restablece a sesión para eliminar a actividade agora, ou ben gárdaa ou elimínaa ao saír"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Tirar foto"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Escoller imaxe"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Seleccionar foto"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"O tempo"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Calidade do aire"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Datos da emisión"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Escolle unha imaxe do perfil"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Icona do usuario predeterminado"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Teclado físico"</string>
diff --git a/packages/SettingsLib/res/values-gu/arrays.xml b/packages/SettingsLib/res/values-gu/arrays.xml
index 318b5f5..7e668e7 100644
--- a/packages/SettingsLib/res/values-gu/arrays.xml
+++ b/packages/SettingsLib/res/values-gu/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"સિસ્ટમ પસંદગીનો ઉપયોગ કરો (ડિફૉલ્ટ)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ઑડિયો"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ઑડિયો"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"સિસ્ટમ પસંદગીનો ઉપયોગ કરો (ડિફૉલ્ટ)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ઑડિયો"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ઑડિયો"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"સિસ્ટમ પસંદગીનો ઉપયોગ કરો (ડિફૉલ્ટ)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml
index de2fc03..3882b63 100644
--- a/packages/SettingsLib/res/values-gu/strings.xml
+++ b/packages/SettingsLib/res/values-gu/strings.xml
@@ -117,8 +117,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="7064307749579335765">"સંપર્ક શેરિંગ"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"સંપર્ક શેરિંગ માટે ઉપયોગ કરો"</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">"સિમ ઍક્સેસ"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"ઝડપથી ચાર્જ થાય છે"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"ધીમેથી ચાર્જ થાય છે"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"વાયરલેસથી ચાર્જિંગ"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"ડૉકથી ચાર્જ થઈ રહ્યું છે"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"ચાર્જ થઈ રહ્યું નથી"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"કનેક્ટ કરેલું છે, પણ ચાર્જ થઈ રહ્યું નથી"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"ચાર્જ થયું"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"રીસેટ કરો"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"કાઢી નાખો"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"અતિથિને રીસેટ કરી રહ્યાં છીએ…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"શું અતિથિ સત્ર રીસેટ કરીએ?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"ડિલીટ કરો"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"સાચવો"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"અતિથિ મોડમાંથી બહાર નીકળો"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"અતિથિ સત્ર રીસેટ કરો"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"અતિથિ મોડમાંથી બહાર નીકળો"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"બહાર નીકળતી વખતે તમામ પ્રવૃત્તિ ડિલીટ કરવામાં આવશે"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"બહાર નીકળતી વખતે તમે પ્રવૃત્તિ સાચવી કે ડિલીટ કરી શકશો"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"સત્રની પ્રવૃત્તિ હમણાં ડિલીટ કરવા માટે રીસેટ કરો અથવા બહાર નીકળતી વખતે તમે પ્રવૃત્તિ સાચવી કે ડિલીટ કરી શકશો"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"ફોટો લો"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"છબી પસંદ કરો"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"ફોટો પસંદ કરો"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"હવામાન"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"હવાની ક્વૉલિટી"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"કાસ્ટ વિશેની માહિતી"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"પ્રોફાઇલ ફોટો પસંદ કરો"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"ડિફૉલ્ટ વપરાશકર્તાનું આઇકન"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"ભૌતિક કીબોર્ડ"</string>
diff --git a/packages/SettingsLib/res/values-hi/arrays.xml b/packages/SettingsLib/res/values-hi/arrays.xml
index 61a8f92..13da75b 100644
--- a/packages/SettingsLib/res/values-hi/arrays.xml
+++ b/packages/SettingsLib/res/values-hi/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"सिस्टम से चुने जाने का उपयोग करें (डिफ़ॉल्ट)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ऑडियो"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ऑडियो"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"सिस्टम से चुने जाने का इस्तेमाल करें (डिफ़ॉल्ट)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ऑडियो"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ऑडियो"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"सिस्टम से चुने जाने का उपयोग करें (डिफ़ॉल्ट)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml
index 9eccbf9..6d0c0de 100644
--- a/packages/SettingsLib/res/values-hi/strings.xml
+++ b/packages/SettingsLib/res/values-hi/strings.xml
@@ -117,8 +117,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="7064307749579335765">"संपर्क शेयर करना"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"संपर्क साझाकरण के लिए उपयोग करें"</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">"सिम ऐक्सेस"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"तेज़ चार्ज हो रही है"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"धीरे चार्ज हो रही है"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"वायरलेस चार्जिंग"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"चार्जिंग डॉक"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"चार्ज नहीं हो रही है"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"कनेक्ट किया गया, चार्ज नहीं हो रहा है"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"बैटरी चार्ज हो गई"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"रीसेट करें"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"हटाएं"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"मेहमान के तौर पर ब्राउज़ करने का सेशन रीसेट किया जा रहा है…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"क्या मेहमान मोड के मौजूदा सेशन को रीसेट करना है?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"मिटाएं"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"सेव करें"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"मेहमान मोड से बाहर निकलें"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"मेहमान मोड के सेशन को रीसेट करें?"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"मेहमान मोड से बाहर निकलें"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"बाहर निकलने पर, सारी गतिविधि मिट जाएगी"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"बाहर निकलने पर, गतिविधि को मिटाया या सेव किया जा सकता है"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"सेशन की गतिविधि को अभी मिटाने के लिए, रीसेट करें. इसके अलावा, बाहर निकलने पर, गतिविधि को मिटाया या सेव किया जा सकता है"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"फ़ोटो खींचें"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"कोई इमेज चुनें"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"फ़ोटो चुनें"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"मौसम"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"हवा की क्वालिटी"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"कास्टिंग की जानकारी"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"प्रोफ़ाइल फ़ोटो चुनें"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"उपयोगकर्ता के लिए डिफ़ॉल्ट आइकॉन"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"फ़िज़िकल कीबोर्ड"</string>
diff --git a/packages/SettingsLib/res/values-hr/arrays.xml b/packages/SettingsLib/res/values-hr/arrays.xml
index c979bc4..0e66858 100644
--- a/packages/SettingsLib/res/values-hr/arrays.xml
+++ b/packages/SettingsLib/res/values-hr/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Upotreba odabira sustava (zadano)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Upotreba odabira sustava (zadano)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Upotreba odabira sustava (zadano)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml
index 2714d6e..7ee089c 100644
--- a/packages/SettingsLib/res/values-hr/strings.xml
+++ b/packages/SettingsLib/res/values-hr/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Prijenos datoteke"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Ulazni uređaj"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Pristup internetu"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Dijeljenje kontakata"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Upotrijebi za dijeljenje kontakata"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Dijeljenje kontakata i povijesti poziva"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Upotreba za dijeljenje kontakata i povijesti poziva"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Dijeljenje internetske veze"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"SMS-ovi"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Pristup SIM-u"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Brzo punjenje"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Sporo punjenje"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Bežično punjenje"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Stanica za punjenje"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Ne puni se"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Povezano, ne puni se"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Napunjeno"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Poništi"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Ukloni"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Poništavanje gostujuće sesije…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Želite li poništiti gostujuću sesiju?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Izbriši"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Spremi"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Izlaz iz načina rada za goste"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Poništi gostujuću sesiju"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Izlaz iz gostujuće sesije"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Sve će se aktivnosti izbrisati na izlasku"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Svoje aktivnosti možete spremiti ili izbrisati na izlasku."</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Poništite da odmah izbrišete aktivnost sesije. Inače je možete spremiti ili izbrisati na izlasku."</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Fotografiraj"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Odaberi sliku"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Odabir slike"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Vremenska prognoza"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Kvaliteta zraka"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Inform. o emitiranju"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Odabir profilne slike"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Ikona zadanog korisnika"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Fizička tipkovnica"</string>
diff --git a/packages/SettingsLib/res/values-hu/arrays.xml b/packages/SettingsLib/res/values-hu/arrays.xml
index 230e554..a5f37ea 100644
--- a/packages/SettingsLib/res/values-hu/arrays.xml
+++ b/packages/SettingsLib/res/values-hu/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Rendszerérték (alapértelmezett)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"Hang: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Hang: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Rendszerérték (alapértelmezett)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"Hang: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Hang: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Rendszerérték (alapértelmezett)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml
index c613d0a..f5f60fa 100644
--- a/packages/SettingsLib/res/values-hu/strings.xml
+++ b/packages/SettingsLib/res/values-hu/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Fájlátvitel"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Beviteli eszköz"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Internetelérés"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Névjegyek megosztása"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Használja a névjegyek megosztására"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Névjegyek és hívásnapló megosztása"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Névjegyek és hívásnapló megosztásához használható"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Internetkapcsolat megosztása"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Szöveges üzenetek"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM-elérés"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Gyorstöltés"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Lassú töltés"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Vezeték nélküli töltés"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Töltődokk"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Nem tölt"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Csatlakoztatva, nem töltődik"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Feltöltve"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Visszaállítás"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Eltávolítás"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Vendég munkamenet visszaállítása…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Visszaállítja a vendégmunkamenetet?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Törlés"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Mentés"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Kilépés a vendég módból"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Vendégmunkamenet visszaállítása"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Vendég kiléptetése"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"A kilépéssel minden tevékenység törlődik"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"A kilépéskor mentheti vagy törölheti a tevékenységeket"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Visszaállítással azonnal törölheti, illetve kilépéskor mentheti vagy törölheti a tevékenységeket"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Fotó készítése"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Kép kiválasztása"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Fotó kiválasztása"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Időjárás"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Levegőminőség"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Átküldési információ"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Profilkép választása"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Alapértelmezett felhasználó ikonja"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Fizikai billentyűzet"</string>
diff --git a/packages/SettingsLib/res/values-hy/arrays.xml b/packages/SettingsLib/res/values-hy/arrays.xml
index 2a9c544..50d7c7f 100644
--- a/packages/SettingsLib/res/values-hy/arrays.xml
+++ b/packages/SettingsLib/res/values-hy/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Օգտագործել համակարգի կարգավորումը (կանխադրված)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> աուդիո"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> աուդիո"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Օգտագործել համակարգի կարգավորումը (կանխադրված)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> աուդիո"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> աուդիո"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Օգտագործել համակարգի կարգավորումը (կանխադրված)"</item>
     <item msgid="8003118270854840095">"44,1 կՀց"</item>
diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml
index c7a8e4d..b9e7d16 100644
--- a/packages/SettingsLib/res/values-hy/strings.xml
+++ b/packages/SettingsLib/res/values-hy/strings.xml
@@ -117,8 +117,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="7064307749579335765">"Կոնտակտների փոխանակում"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Օգտագործել կոնտակտի համօգտագործման համար"</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">"SMS հաղորդագրություններ"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM քարտի հասանելիություն"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Արագ լիցքավորում"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Դանդաղ լիցքավորում"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Անլար լիցքավորում"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Լիցքավորում դոկ-կայանի միջոցով"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Չի լիցքավորվում"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Միացված է, չի լիցքավորվում"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Լիցքավորված է"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Զրոյացնել"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Հեռացնել"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Հյուրի աշխատաշրջանը վերակայվում է…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Զրոյացնե՞լ հյուրի աշխատաշրջանը"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Ջնջել"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Պահել"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Դուրս գալ հյուրի ռեժիմից"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Զրոյացնել հյուրի աշխատաշրջանը"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Դուրս գալ հյուրի ռեժիմից"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Եթե դուրս գաք, ամբողջ պատմությունը կջնջվի"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Դուրս գալիս կարող եք պահել կամ ջնջել ձեր պատմությունը"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Վերակայեք աշխատաշրջանի պատմությունը հիմա կամ պահեք/ջնջեք այն դուրս գալիս"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Լուսանկարել"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Ընտրել պատկեր"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Ընտրեք լուսանկար"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Եղանակ"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Օդի որակը"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Հեռարձակման տվյալներ"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Պրոֆիլի նկար ընտրեք"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Օգտատիրոջ կանխադրված պատկերակ"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Ֆիզիկական ստեղնաշար"</string>
diff --git a/packages/SettingsLib/res/values-in/arrays.xml b/packages/SettingsLib/res/values-in/arrays.xml
index 6349e53..5b0ad98 100644
--- a/packages/SettingsLib/res/values-in/arrays.xml
+++ b/packages/SettingsLib/res/values-in/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Gunakan Pilihan Sistem (Default)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Gunakan Pilihan Sistem (Default)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Gunakan Pilihan Sistem (Default)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml
index 3104fe1..e5f1728 100644
--- a/packages/SettingsLib/res/values-in/strings.xml
+++ b/packages/SettingsLib/res/values-in/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Transfer file"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Perangkat masukan"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Akses Internet"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Berbagi kontak"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Gunakan untuk berbagi kontak"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Berbagi kontak dan histori panggilan"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Gunakan untuk berbagi kontak dan histori panggilan"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Berbagi koneksi internet"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"SMS"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Akses SIM"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Mengisi daya cepat"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Mengisi daya lambat"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Mengisi daya nirkabel"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Mengisi Daya di Dok"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Tidak mengisi daya"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Terhubung, tidak mengisi daya"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Terisi"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Reset"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Hapus"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Mereset tamu …"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Reset sesi tamu?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Hapus"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Simpan"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Keluar dari mode tamu"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Reset sesi tamu"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Keluar dari mode tamu"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Semua aktivitas akan dihapus saat Anda keluar"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Anda dapat menyimpan atau menghapus aktivitas saat keluar"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Reset untuk hapus aktivitas sesi sekarang, atau simpan atau hapus aktivitas saat keluar"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Ambil foto"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Pilih gambar"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Pilih foto"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Cuaca"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Kualitas Udara"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Info Transmisi"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Pilih foto profil"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Ikon pengguna default"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Keyboard fisik"</string>
diff --git a/packages/SettingsLib/res/values-is/arrays.xml b/packages/SettingsLib/res/values-is/arrays.xml
index 730fcaf..9d481f8 100644
--- a/packages/SettingsLib/res/values-is/arrays.xml
+++ b/packages/SettingsLib/res/values-is/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Nota val kerfisins (sjálfgefið)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> hljóð"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> hljóð"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Nota val kerfisins (sjálfgefið)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> hljóð"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> hljóð"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Nota val kerfisins (sjálfgefið)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml
index c4814249..32fe1c8 100644
--- a/packages/SettingsLib/res/values-is/strings.xml
+++ b/packages/SettingsLib/res/values-is/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Skráaflutningur"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Inntakstæki"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Internetaðgangur"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Deiling tengiliða"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Nota til að deila tengiliðum"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Tengiliðir, SMS-skilaboð og símtalaferill"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Nota til að deila tengiliðum og símtalaferli"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Deiling nettengingar"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Textaskilaboð"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Aðgangur að SIM-korti"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Hröð hleðsla"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Hæg hleðsla"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Hleður þráðlaust"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Hleður í dokku"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Ekki í hleðslu"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Tengt, ekki í hleðslu"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Fullhlaðin"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Endurstilla"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Fjarlægja"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Endurstillir gest…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Endurstilla gestalotu?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Eyða"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Vista"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Loka gestastillingu"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Endurstilla gestalotu"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Loka gestastillingu"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Öllum aðgerðum verður eytt þegar lotu er lokað"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Þú getur vistað eða eytt aðgerðum þegar þú lokar"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Endurstilltu til að eyða aðgerðum lotu núna, eða vistaðu eða eyddu aðgerðum þegar þú lokar"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Taka mynd"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Velja mynd"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Velja mynd"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Veður"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Loftgæði"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Útsendingaruppl."</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Veldu prófílmynd"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Tákn sjálfgefins notanda"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Vélbúnaðarlyklaborð"</string>
diff --git a/packages/SettingsLib/res/values-it/arrays.xml b/packages/SettingsLib/res/values-it/arrays.xml
index b7e114f..62450da3 100644
--- a/packages/SettingsLib/res/values-it/arrays.xml
+++ b/packages/SettingsLib/res/values-it/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Usa selezione di sistema (predefinita)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Usa selezione di sistema (predefinita)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Usa selezione di sistema (predefinita)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml
index 87fc4b7..891c545 100644
--- a/packages/SettingsLib/res/values-it/strings.xml
+++ b/packages/SettingsLib/res/values-it/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Trasferimento file"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Dispositivo di input"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Accesso a Internet"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Condivisione contatti"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Usa per condivisione contatti"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Condivis. contatti e cronologia chiamate"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Usa per condivisione di contatti e cronologia chiamate"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Condivisione connessione Internet"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"SMS"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Accesso alla SIM"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Ricarica veloce"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Ricarica lenta"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"In carica, wireless"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"In carica nel dock"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Non in carica"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Dispositivo connesso, non in carica"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Carica"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Reimposta"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Rimuovi"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Reimpostazione sessione Ospite in corso…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Vuoi reimpostare la sessione Ospite?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Elimina"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Salva"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Esci dalla modalità Ospite"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Reimposta sessione Ospite"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Esci dalla modalità Ospite"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Quando esci verrà eliminata tutta l\'attività"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Quando esci puoi salvare o eliminare la tua attività"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Reimposta la sessione per eliminare subito l\'attività, oppure salvala o eliminala quando esci"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Scatta una foto"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Scegli un\'immagine"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Seleziona la foto"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Meteo"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Qualità dell\'aria"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Info sul cast"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Scegli un\'immagine del profilo"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Icona dell\'utente predefinito"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Tastiera fisica"</string>
diff --git a/packages/SettingsLib/res/values-iw/arrays.xml b/packages/SettingsLib/res/values-iw/arrays.xml
index 587016f..49f3fcf 100644
--- a/packages/SettingsLib/res/values-iw/arrays.xml
+++ b/packages/SettingsLib/res/values-iw/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"שימוש בבחירת המערכת (ברירת המחדל)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"אודיו <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"אודיו <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"שימוש בבחירת המערכת (ברירת המחדל)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"אודיו <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"אודיו <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"שימוש בבחירת המערכת (ברירת המחדל)"</item>
     <item msgid="8003118270854840095">"44.1 קילו-הרץ"</item>
diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml
index 5c3c304..a665c54 100644
--- a/packages/SettingsLib/res/values-iw/strings.xml
+++ b/packages/SettingsLib/res/values-iw/strings.xml
@@ -117,8 +117,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="7064307749579335765">"שיתוף אנשי קשר"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"שימוש עבור שיתוף אנשי קשר"</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>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"הסוללה נטענת מהר"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"הסוללה נטענת לאט"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"בטעינה אלחוטית"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"אביזר עגינה לטעינה"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"לא בטעינה"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"מחובר, לא בטעינה"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"הסוללה טעונה"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"איפוס"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"הסרה"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"מתבצע איפוס של הגלישה כאורח…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"לאפס את הגלישה כאורח?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"מחיקה"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"שמירה"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"יציאה ממצב אורח"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"איפוס הגלישה כאורח"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"יציאה ממצב אורח"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"כל הפעילות תימחק ביציאה"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"אפשר לשמור או למחוק את הפעילות שלך ביציאה"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"ניתן לאפס כדי למחוק את הפעילות מהסשן כעת, או לשמור או למחוק את הפעילות ביציאה"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"צילום תמונה"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"לבחירת תמונה"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"בחירת תמונה"</string>
@@ -644,6 +660,7 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"מזג אוויר"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"איכות האוויר"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"פרטי ההעברה"</string>
+    <string name="dream_complication_title_home_controls" msgid="9153381632476738811">"בית חכם"</string>
     <string name="avatar_picker_title" msgid="8492884172713170652">"בחירה של תמונת פרופיל"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"סמל המשתמש שמוגדר כברירת מחדל"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"מקלדת פיזית"</string>
diff --git a/packages/SettingsLib/res/values-ja/arrays.xml b/packages/SettingsLib/res/values-ja/arrays.xml
index ad84d9e..d73cc43 100644
--- a/packages/SettingsLib/res/values-ja/arrays.xml
+++ b/packages/SettingsLib/res/values-ja/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"システムの選択(デフォルト)を使用"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> オーディオ"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> オーディオ"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"システムの選択(デフォルト)を使用"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> オーディオ"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> オーディオ"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"システムの選択(デフォルト)を使用"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml
index cf11237..7c6fc5d 100644
--- a/packages/SettingsLib/res/values-ja/strings.xml
+++ b/packages/SettingsLib/res/values-ja/strings.xml
@@ -117,8 +117,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="7064307749579335765">"連絡先の共有"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"連絡先の共有に使用"</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>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"急速充電中"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"低速充電中"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"ワイヤレス充電中"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"充電ホルダー"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"充電していません"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"接続済み、充電していません"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"充電が完了しました"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"リセット"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"削除"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"ゲストをリセットしています…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"ゲスト セッションをリセットしますか?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"削除"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"保存"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"ゲストモードを終了"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"ゲスト セッションをリセット"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"ゲストを終了"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"終了時にすべてのアクティビティが削除されます"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"終了時にアクティビティを保存、削除できます"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"アクティビティは、リセットして今すぐ削除するか、終了時に保存または削除できます"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"写真を撮る"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"画像を選択"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"写真を選択"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"天気"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"大気質"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"キャスト情報"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"プロフィール写真の選択"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"デフォルト ユーザー アイコン"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"物理キーボード"</string>
diff --git a/packages/SettingsLib/res/values-ka/arrays.xml b/packages/SettingsLib/res/values-ka/arrays.xml
index 01f1dcc7..c0d6f97 100644
--- a/packages/SettingsLib/res/values-ka/arrays.xml
+++ b/packages/SettingsLib/res/values-ka/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"სისტემის არჩეულის გამოყენება (ნაგულისხმევი)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> აუდიო"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> აუდიო"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"სისტემის არჩეულის გამოყენება (ნაგულისხმევი)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> აუდიო"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> აუდიო"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"სისტემის არჩეულის გამოყენება (ნაგულისხმევი)"</item>
     <item msgid="8003118270854840095">"44,1 კჰც"</item>
diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml
index 540f1fc8..1b6e69b 100644
--- a/packages/SettingsLib/res/values-ka/strings.xml
+++ b/packages/SettingsLib/res/values-ka/strings.xml
@@ -117,8 +117,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="7064307749579335765">"კონტაქტის გაზიარება"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"კონტაქტის გაზიარებისთვის გამოყენება"</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>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"სწრაფად იტენება"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"ნელა იტენება"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"უსადენოდ დატენა"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"დამტენი სამაგრი"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"არ იტენება"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"დაკავშირებულია, არ იტენება"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"დატენილია"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"გადაყენება"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"ამოშლა"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"მიმდინარეობს სტუმრის გადაყენება…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"გსურთ სტუმრის სესიის გადაყენება?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"წაშლა"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"შენახვა"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"სტუმრის რეჟიმიდან გასვლა"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"სტუმრის სესიის გადაყენება"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"სტუმრის გასვლა"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"გასვლისას ყველა აქტივობა წაიშლება"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"გასვლისას შეგიძლიათ შეინახოთ ან წაშალოთ თქვენი აქტივობა"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"გადააყენეთ სესიის აქტივობის ახლა წასაშლელად. შენახვა/წაშლა გასვლისასაც შეიძლება."</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"ფოტოს გადაღება"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"აირჩიეთ სურათი"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"ფოტოს არჩევა"</string>
@@ -644,6 +660,7 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"ამინდი"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"ჰაერის ხარისხი"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"ტრანსლირების ინფო"</string>
+    <string name="dream_complication_title_home_controls" msgid="9153381632476738811">"სახლის მართვა"</string>
     <string name="avatar_picker_title" msgid="8492884172713170652">"აირჩიეთ პროფილის სურათი"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"მომხმარებლის ნაგულისხმევი ხატულა"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"ფიზიკური კლავიატურა"</string>
diff --git a/packages/SettingsLib/res/values-kk/arrays.xml b/packages/SettingsLib/res/values-kk/arrays.xml
index 33fd25b..fc998e7 100644
--- a/packages/SettingsLib/res/values-kk/arrays.xml
+++ b/packages/SettingsLib/res/values-kk/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Жүйенің таңдағанын алу (әдепкі)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> аудиокодегі"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> аудиокодегі"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Жүйенің таңдағанын алу (әдепкі)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> аудиокодегі"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> аудиокодегі"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Жүйенің таңдағанын алу (әдепкі)"</item>
     <item msgid="8003118270854840095">"44,1 кГц"</item>
diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml
index 2277479..b32c1c1 100644
--- a/packages/SettingsLib/res/values-kk/strings.xml
+++ b/packages/SettingsLib/res/values-kk/strings.xml
@@ -117,8 +117,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="7064307749579335765">"Контакт бөлісу"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Контактіні бөлісу үшін пайдалану"</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>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Жылдам зарядталуда"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Баяу зарядталуда"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Сымсыз зарядталуда"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Қондыру станциясы зарядталуда"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Зарядталу орындалып жатқан жоқ"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Жалғанған, зарядталып жатқан жоқ"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Зарядталды"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Бастапқы күйге қайтару"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Өшіру"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Қонақ сеансы бастапқы күйге қайтарылуда…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Қонақ сеансын бастапқы күйге қайтару керек пе?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Жою"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Сақтау"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Қонақ режимінен шығу"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Қонақ режимін қалпына келтіру"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Қонақ режимінен шығу"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Шыққанда барлық әрекет жойылады."</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Шыққанда барлық әрекетті сақтай немесе жоя аласыз."</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Сеанс дерегін жою үшін оны бастапқы күйге қайтарыңыз. Деректі шығар кезде де сақтауға не жоюға болады."</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Фотосуретке түсіру"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Сурет таңдау"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Фотосурет таңдау"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Ауа райы"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Ауа сапасы"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Трансляция ақпараты"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Профиль суретін таңдау"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Әдепкі пайдаланушы белгішесі"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Пернетақта"</string>
diff --git a/packages/SettingsLib/res/values-km/arrays.xml b/packages/SettingsLib/res/values-km/arrays.xml
index ef3aa52..a005f4d 100644
--- a/packages/SettingsLib/res/values-km/arrays.xml
+++ b/packages/SettingsLib/res/values-km/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"ប្រើ​ការ​ជ្រើសរើស​ប្រព័ន្ធ (លំនាំ​ដើម)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g>សំឡេង <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g>សំឡេង <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"ប្រើ​ការ​ជ្រើសរើស​ប្រព័ន្ធ (លំនាំ​ដើម)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g>សំឡេង <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g>សំឡេង <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"ប្រើ​ការ​ជ្រើសរើស​ប្រព័ន្ធ (លំនាំ​ដើម)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml
index eb8ae47..dd48c54 100644
--- a/packages/SettingsLib/res/values-km/strings.xml
+++ b/packages/SettingsLib/res/values-km/strings.xml
@@ -117,8 +117,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="7064307749579335765">"ការ​ចែករំលែក​​ទំនាក់ទំនង"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"ប្រើ​សម្រាប់​ការ​ចែករំលែក​ទំនាក់ទំនង"</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">"ការចូលដំណើរការស៊ីម"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"កំពុងសាកថ្មយ៉ាងឆាប់រហ័ស"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"កំពុង​សាកថ្មយឺត"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"កំពុង​សាកថ្ម​ឥតខ្សែ"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"ឧបករណ៍ភ្ជាប់សាកថ្ម"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"មិនកំពុង​សាក​ថ្ម"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"បានភ្ជាប់ មិនកំពុង​សាកថ្ម"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"បាន​សាក​ថ្មពេញ"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"កំណត់​ឡើងវិញ"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"ដកចេញ"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"កំពុងកំណត់​ភ្ញៀវឡើងវិញ…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"កំណត់វគ្គភ្ញៀវឡើងវិញឬ?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"លុប"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"រក្សាទុក"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"ចាកចេញពីមុខងារភ្ញៀវ"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"កំណត់វគ្គភ្ញៀវឡើងវិញ"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"ចាកចេញពីមុខងារភ្ញៀវ"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"សកម្មភាពទាំងអស់នឹងត្រូវលុបនៅពេលចាកចេញ"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"អ្នកអាចរក្សាទុក ឬលុបសកម្មភាពរបស់អ្នកនៅពេលចាកចេញ"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"កំណត់ឡើងវិញ ដើម្បីលុបសកម្មភាពក្នុងវគ្គឥឡូវនេះ ឬអ្នកអាចរក្សាទុកឬលុបសកម្មភាពនៅពេលចាកចេញ"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"ថតរូប"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"ជ្រើសរើស​រូបភាព"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"ជ្រើសរើស​​រូបថត"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"អាកាសធាតុ"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"គុណភាព​ខ្យល់"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"ព័ត៌មានអំពីការបញ្ជូន"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"ជ្រើសរើស​រូបភាព​កម្រង​ព័ត៌មាន"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"រូបអ្នកប្រើប្រាស់លំនាំដើម"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"ក្ដារចុច​រូបវន្ត"</string>
diff --git a/packages/SettingsLib/res/values-kn/arrays.xml b/packages/SettingsLib/res/values-kn/arrays.xml
index e82994e..b6014ce 100644
--- a/packages/SettingsLib/res/values-kn/arrays.xml
+++ b/packages/SettingsLib/res/values-kn/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"ಸಿಸ್ಟಂ ಆಯ್ಕೆಯನ್ನು ಬಳಸಿ (ಡಿಫಾಲ್ಟ್)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ಆಡಿಯೋ"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ಆಡಿಯೋ"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"ಸಿಸ್ಟಂ ಆಯ್ಕೆಯನ್ನು ಬಳಸಿ (ಡಿಫಾಲ್ಟ್)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ಆಡಿಯೋ"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ಆಡಿಯೋ"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"ಸಿಸ್ಟಂ ಆಯ್ಕೆಯನ್ನು ಬಳಸಿ (ಡಿಫಾಲ್ಟ್)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml
index 05c88e3..619fa72 100644
--- a/packages/SettingsLib/res/values-kn/strings.xml
+++ b/packages/SettingsLib/res/values-kn/strings.xml
@@ -117,8 +117,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="7064307749579335765">"ಸಂಪರ್ಕ ಹಂಚಿಕೆ"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"ಸಂಪರ್ಕ ಹಂಚಿಕೆಗಾಗಿ ಬಳಸಿ"</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">"ಸಿಮ್ ಪ್ರವೇಶ"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"ವೇಗದ ಚಾರ್ಜಿಂಗ್"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"ನಿಧಾನ ಗತಿಯ ಚಾರ್ಜಿಂಗ್"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"ವೈರ್‌ಲೆಸ್ ಚಾರ್ಜಿಂಗ್"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"ಚಾರ್ಜಿಂಗ್ ಡಾಕ್"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"ಚಾರ್ಜ್‌ ಆಗುತ್ತಿಲ್ಲ"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"ಕನೆಕ್ಟ್ ಆಗಿದೆ, ಚಾರ್ಜ್ ಆಗುತ್ತಿಲ್ಲ"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"ಚಾರ್ಜ್ ಆಗಿದೆ"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"ರೀಸೆಟ್ ಮಾಡಿ"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"ತೆಗೆದುಹಾಕಿ"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"ಅತಿಥಿ ಬಳಕೆದಾರರ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ರೀಸೆಟ್ ಮಾಡಲಾಗುತ್ತಿದೆ…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"ಅತಿಥಿ ಸೆಷನ್ ಅನ್ನು ರೀಸೆಟ್ ಮಾಡಬೇಕೇ?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"ಅಳಿಸಿ"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"ಉಳಿಸಿ"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"ಅತಿಥಿ ಮೋಡ್‌ನಿಂದ ನಿರ್ಗಮಿಸಿ"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"ಅತಿಥಿ ಸೆಷನ್ ಅನ್ನು ರೀಸೆಟ್ ಮಾಡಿ"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"ಅತಿಥಿ ಮೋಡ್‌ನಿಂದ ನಿರ್ಗಮಿಸಿ"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"ನಿರ್ಗಮಿಸುವಾಗ ಎಲ್ಲಾ ಚಟುವಟಿಕೆಯನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"ನಿರ್ಗಮಿಸುವಾಗ ನಿಮ್ಮ ಚಟುವಟಿಕೆಯನ್ನು ನೀವು ಉಳಿಸಬಹುದು ಅಥವಾ ಅಳಿಸಬಹುದು"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"ಸೆಶನ್ ಚಟುವಟಿಕೆಯನ್ನು ಈಗ ಅಳಿಸಲು ರೀಸೆಟ್ ಮಾಡಿ ಅಥವಾ ನಿರ್ಗಮಿಸುವಾಗ ನೀವು ಚಟುವಟಿಕೆಯನ್ನು ಉಳಿಸಬಹುದು ಅಥವಾ ಅಳಿಸಬಹುದು"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"ಫೋಟೋ ತೆಗೆದುಕೊಳ್ಳಿ"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"ಚಿತ್ರವನ್ನು ಆರಿಸಿ"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"ಫೋಟೋ ಆಯ್ಕೆಮಾಡಿ"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"ಹವಾಮಾನ"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"ವಾಯು ಗುಣಮಟ್ಟ"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"ಬಿತ್ತರಿಸಿದ ಮಾಹಿತಿ"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"ಪ್ರೊಫೈಲ್ ಚಿತ್ರವನ್ನು ಆಯ್ಕೆ ಮಾಡಿ"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"ಡೀಫಾಲ್ಟ್ ಬಳಕೆದಾರರ ಐಕಾನ್"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"ಭೌತಿಕ ಕೀಬೋರ್ಡ್"</string>
diff --git a/packages/SettingsLib/res/values-ko/arrays.xml b/packages/SettingsLib/res/values-ko/arrays.xml
index a207706..7138113 100644
--- a/packages/SettingsLib/res/values-ko/arrays.xml
+++ b/packages/SettingsLib/res/values-ko/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"시스템 설정 사용(기본)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> 오디오"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> 오디오"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"시스템 설정 사용(기본)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> 오디오"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> 오디오"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"시스템 설정 사용(기본)"</item>
     <item msgid="8003118270854840095">"44.1kHz"</item>
diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml
index 4fb2385..510781e 100644
--- a/packages/SettingsLib/res/values-ko/strings.xml
+++ b/packages/SettingsLib/res/values-ko/strings.xml
@@ -117,8 +117,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="7064307749579335765">"연락처 공유"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"연락처 공유용"</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>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"고속 충전 중"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"저속 충전 중"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"무선 충전 중"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"충전 도크"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"충전 안함"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"연결됨, 충전 중 아님"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"충전됨"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"재설정"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"삭제"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"게스트 재설정 중…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"게스트 세션을 재설정하시겠습니까?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"삭제"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"저장"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"게스트 모드 종료"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"게스트 세션 재설정"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"게스트 종료"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"종료하면 모든 활동이 삭제됩니다."</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"종료 시 활동을 저장하거나 삭제할 수 있습니다."</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"지금 재설정하여 활동 세션을 삭제하거나 종료 시 활동을 저장 또는 삭제할 수 있습니다."</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"사진 찍기"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"이미지 선택"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"사진 선택"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"날씨"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"대기 상태"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"전송 정보"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"프로필 사진 선택하기"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"기본 사용자 아이콘"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"물리적 키보드"</string>
diff --git a/packages/SettingsLib/res/values-ky/arrays.xml b/packages/SettingsLib/res/values-ky/arrays.xml
index 67cdc7c..40271f7 100644
--- a/packages/SettingsLib/res/values-ky/arrays.xml
+++ b/packages/SettingsLib/res/values-ky/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"карта13"</item>
     <item msgid="8147982633566548515">"карта14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Система тандаганды колдонуу (демейки)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> аудио"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> аудио"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Система тандаганды колдонуу (демейки)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> аудио"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> аудио"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Система тандаганды колдонуу (демейки)"</item>
     <item msgid="8003118270854840095">"44,1 кГц"</item>
diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml
index b4f7817..8a41afe 100644
--- a/packages/SettingsLib/res/values-ky/strings.xml
+++ b/packages/SettingsLib/res/values-ky/strings.xml
@@ -117,8 +117,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="7064307749579335765">"Байланышты бөлүшүү"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Байланышты бөлүшүү үчүн колдонуу"</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">"SMS билдирүүлөрү"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM картаны пайдалануу мүмкүнчүлүгү"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Ыкчам кубатталууда"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Жай кубатталууда"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Зымсыз кубатталууда"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Кубаттоо док бекети"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Кубат алган жок"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Туташты, кубатталган жок"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Кубатталды"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Баштапкы абалга келтирүү"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Өчүрүү"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Конок сеансы баштапкы абалга келтирилүүдө…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Конок сеансын баштапкы абалга келтиресизби?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Өчүрүү"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Сактоо"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Конок режиминен чыгуу"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Конок сеансын кайра коюу"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Конок режиминен чыгуу"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Чыксаңыз, бардык аракеттер өчүрүлөт"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Чыгуудан мурун аракеттериңизди сактап же жок кылсаңыз болот"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Сеанстагы аракеттерди азыр өчүрсөңүз болот же чыгып баратып өчүрүп же сактап коюңуз"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Сүрөткө тартуу"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Сүрөт тандаңыз"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Сүрөт тандаңыз"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Аба ырайы"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Абанын сапаты"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Тышкы экранга чыгаруу маалыматы"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Профилдин сүрөтүн тандоо"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Демейки колдонуучунун сүрөтчөсү"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Аппараттык баскычтоп"</string>
diff --git a/packages/SettingsLib/res/values-lo/arrays.xml b/packages/SettingsLib/res/values-lo/arrays.xml
index 56a9741..792ca39 100644
--- a/packages/SettingsLib/res/values-lo/arrays.xml
+++ b/packages/SettingsLib/res/values-lo/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"ໃຊ້ການເລືອກຂອງລະບົບ (ຄ່າເລີ່ມຕົ້ນ)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"ສຽງ <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"ສຽງ <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"ໃຊ້ການເລືອກຂອງລະບົບ (ຄ່າເລີ່ມຕົ້ນ)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"ສຽງ <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"ສຽງ <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"ໃຊ້ການເລືອກຂອງລະບົບ (ຄ່າເລີ່ມຕົ້ນ)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml
index 4462137..86d7aae 100644
--- a/packages/SettingsLib/res/values-lo/strings.xml
+++ b/packages/SettingsLib/res/values-lo/strings.xml
@@ -117,8 +117,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="7064307749579335765">"ການ​ແບ່ງ​ປັນ​ລາຍ​ຊື່​ຜູ້​ຕິດ​ຕໍ່"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"​ໃຊ້​ສຳ​ລັບການ​ແບ່ງ​ປັນ​ລາຍ​ຊື່​ຜູ່​ຕິດ​ຕໍ່"</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>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"ກຳລັງສາກໄຟດ່ວນ"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"ກຳລັງສາກໄຟຊ້າໆ"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"ກຳລັງສາກໄຟໄຮ້ສາຍ"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"ກຳລັງສາກໄຟຜ່ານດັອກ"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"ບໍ່ໄດ້ສາກໄຟ"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"ເຊື່ອມຕໍ່ແລ້ວ, ບໍ່ໄດ້ສາກໄຟ"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"ສາກເຕັມແລ້ວ"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"ຣີເຊັດ"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"ລຶບອອກ"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"ກຳລັງຣີເຊັດແຂກ…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"ຣີເຊັດເຊດຊັນຂອງແຂກບໍ?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"ລຶບ"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"ບັນທຶກ"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"ອອກຈາກໂໝດແຂກ"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"ຣີເຊັດເຊດຊັນຂອງແຂກ"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"ອອກຈາກແຂກ"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"ການເຄື່ອນໄຫວທັງໝົດຈະຖືກລຶບໃນຕອນອອກ"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"ທ່ານສາມາດບັນທຶກ ຫຼື ລຶບການເຄື່ອນໄຫວຂອງທ່ານໃນຕອນອອກໄດ້"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"ຣີເຊັດເພື່ອລຶບການເຄື່ອນໄຫວເຊດຊັນຕອນນີ້ ຫຼື ທ່ານສາມາດບັນທຶກ ຫຼື ລຶບການເຄື່ອນໄຫວໃນຕອນອອກໄດ້"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"ຖ່າຍຮູບ"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"ເລືອກຮູບ"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"ເລືອກຮູບ"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"ສະພາບອາກາດ"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"ຄຸນນະພາບ​ອາກາດ"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"ຂໍ້ມູນການສົ່ງສັນຍານ"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"ເລືອກຮູບໂປຣໄຟລ໌"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"ໄອຄອນຜູ້ໃຊ້ເລີ່ມຕົ້ນ"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"ແປ້ນພິມພາຍນອກ"</string>
diff --git a/packages/SettingsLib/res/values-lt/arrays.xml b/packages/SettingsLib/res/values-lt/arrays.xml
index a7aba78..946f69c 100644
--- a/packages/SettingsLib/res/values-lt/arrays.xml
+++ b/packages/SettingsLib/res/values-lt/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Naudoti sistemos pasirink. (numatytasis)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> garsas"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> garsas"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Naudoti sistemos pasirink. (numatytasis)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> garsas"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> garsas"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Naudoti sistemos pasirink. (numatytasis)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml
index b3866dc..f28523c 100644
--- a/packages/SettingsLib/res/values-lt/strings.xml
+++ b/packages/SettingsLib/res/values-lt/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Failo perkėlimas"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Įvesties įrenginys"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Prieiga prie interneto"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Kontaktų bendrinimas"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Naudoti kontaktams bendrinti"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Kontaktų ir skambučių istorijos bendrinimas"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Naudoti kontaktams ir skambučių istorijai bendrinti"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Interneto ryšio bendrinimas"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Teksto pranešimai"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM prieiga"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Greitai įkraunama"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Lėtai įkraunama"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Kraunama be laidų"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Įkrovimo dokas"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Nekraunama"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Prijungta, neįkraunama"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Įkrauta"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Nustatyti iš naujo"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Pašalinti"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Svečias nustatomas iš naujo…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Nustatyti svečio sesiją iš naujo?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Ištrinti"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Išsaugoti"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Išeiti iš svečio režimo"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Nustatyti svečio sesiją iš naujo"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Išeiti iš svečio režimo"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Išėjus iš režimo visa veikla bus ištrinta"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Išeidami galite išsaugoti arba ištrinti savo veiklą"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Nustatykite iš naujo, jei norite ištrinti sesijos veiklą dabar, arba galite išeidami išsaugoti ar ištrinti veiklą"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Fotografuoti"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Pasirinkti vaizdą"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Pasirinkti nuotrauką"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Orai"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Oro kokybė"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Perdav. informacija"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Pasirinkite profilio nuotrauką"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Numatytojo naudotojo piktograma"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Fizinė klaviatūra"</string>
diff --git a/packages/SettingsLib/res/values-lv/arrays.xml b/packages/SettingsLib/res/values-lv/arrays.xml
index 840d794..f4ae452 100644
--- a/packages/SettingsLib/res/values-lv/arrays.xml
+++ b/packages/SettingsLib/res/values-lv/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Sistēmas atlases izmantošana (nokl.)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Sistēmas atlases izmantošana (nokl.)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Sistēmas atlases izmantošana (nokl.)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml
index 1fa6bc8..0dcc20b 100644
--- a/packages/SettingsLib/res/values-lv/strings.xml
+++ b/packages/SettingsLib/res/values-lv/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Failu pārsūtīšana"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Ievades ierīce"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Interneta piekļuve"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Kontaktpersonas informācijas kopīgošana"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Izmantot kontaktpersonas informācijas kopīgošanai"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Kontaktpersonu un zvanu vēst. kopīgošana"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Paredzēts kontaktpersonu un zvanu vēstures kopīgošanai"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Interneta savienojuma koplietošana"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Īsziņas"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Piekļuve SIM kartei"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Notiek ātrā uzlāde"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Notiek lēnā uzlāde"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Bezvadu uzlāde"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Uzlādes doks"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Nenotiek uzlāde"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Ierīce pievienota, uzlāde nenotiek"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Uzlādēts"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Atiestatīt"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Noņemt"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Notiek viesa sesijas atiestatīšana…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Vai atiestatīt viesa sesiju?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Dzēst"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Saglabāt"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Iziet no viesa režīma"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Atiestatīt viesa sesiju"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Iziet no viesa režīma"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Izejot tiks dzēstas visas darbības"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Izejot varat saglabāt vai dzēst savas darbības"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Atiestatiet, lai tagad dzēstu sesijas darbības. Izejot varēsiet saglabāt vai dzēst darbības."</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Uzņemt fotoattēlu"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Izvēlēties attēlu"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Atlasīt fotoattēlu"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Laikapstākļi"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Gaisa kvalitāte"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Apraides informācija"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Profila attēla izvēle"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Noklusējuma lietotāja ikona"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Fiziskā tastatūra"</string>
diff --git a/packages/SettingsLib/res/values-mk/arrays.xml b/packages/SettingsLib/res/values-mk/arrays.xml
index 2f22165..9c46f21 100644
--- a/packages/SettingsLib/res/values-mk/arrays.xml
+++ b/packages/SettingsLib/res/values-mk/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Користи избор на системот (стандардно)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> аудио"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> аудио"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Користи избор на системот (стандардно)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> аудио"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> аудио"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Користи избор на системот (стандардно)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml
index 43fe5e4..4aff21b 100644
--- a/packages/SettingsLib/res/values-mk/strings.xml
+++ b/packages/SettingsLib/res/values-mk/strings.xml
@@ -117,8 +117,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="7064307749579335765">"Споделување контакти"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Користи за споделување контакти"</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>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Брзо полнење"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Бавно полнење"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Се полни безжично"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Се полни на док"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Не се полни"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Поврзано, не се полни"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Полна"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Ресетирај"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Отстрани"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Се ресетира гостинот…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Да се ресетира гостинската сесија?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Избриши"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Зачувај"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Излези од режим на гостин"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Ресетирај ја гостинската сесија"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Излези од режим на гостин"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Целата активност ќе се избрише при излегувањето"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Можете да ја зачувате или избришете вашата активност при излегувањето"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Ресетирајте за да ја избришете активноста на сесијата сега или може да ја зачувате или избришете активноста при излегувањето"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Фотографирајте"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Одберете слика"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Изберете фотографија"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Временска прогноза"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Квалитет на воздух"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Инфо за улогите"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Изберете профилна слика"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Икона за стандарден корисник"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Физичка тастатура"</string>
diff --git a/packages/SettingsLib/res/values-ml/arrays.xml b/packages/SettingsLib/res/values-ml/arrays.xml
index 3aa9472..4715e2a 100644
--- a/packages/SettingsLib/res/values-ml/arrays.xml
+++ b/packages/SettingsLib/res/values-ml/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"സിസ്റ്റം സെലക്ഷൻ ഉപയോഗിക്കൂ ‌(ഡിഫോൾട്ട്)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ഓഡിയോ"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ഓഡിയോ"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"സിസ്റ്റം സെലക്ഷൻ ഉപയോഗിക്കൂ ‌(ഡിഫോൾട്ട്)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ഓഡിയോ"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ഓഡിയോ"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"സിസ്റ്റം സെലക്ഷൻ ഉപയോഗിക്കൂ ‌(ഡിഫോൾട്ട്)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml
index 64bf8f7..85a3218 100644
--- a/packages/SettingsLib/res/values-ml/strings.xml
+++ b/packages/SettingsLib/res/values-ml/strings.xml
@@ -117,8 +117,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="7064307749579335765">"കോൺടാക്‌റ്റ് പങ്കിടൽ"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"കോൺടാക്‌റ്റ് പങ്കിടലിനായി ഉപയോഗിക്കുക"</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">"സിം ആക്സസ്"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"അതിവേഗ ചാർജിംഗ്"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"പതുക്കെയുള്ള ചാർജിംഗ്"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"വയർലെസായി ചാർജുചെയ്യുന്നു"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"ചാർജിംഗ് ഡോക്ക്"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"ചാർജ്ജുചെയ്യുന്നില്ല"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"കണക്റ്റ് ചെയ്‌തിരിക്കുന്നു, ചാർജ് ചെയ്യുന്നില്ല"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"ചാർജായി"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"റീസെറ്റ് ചെയ്യുക"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"നീക്കം ചെയ്യുക"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"അതിഥിയെ റീസെറ്റ് ചെയ്യുന്നു…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"അതിഥി സെഷൻ റീസെറ്റ് ചെയ്യണോ?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"ഇല്ലാതാക്കുക"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"സംരക്ഷിക്കുക"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"പുറത്തുകടക്കുക"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"അതിഥി സെഷൻ റീസെറ്റ് ചെയ്യുക"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"അതിഥി മോഡിൽ നിന്ന് പുറത്തുകടക്കുക"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"പുറത്തുകടക്കുമ്പോൾ എല്ലാ ആക്‌റ്റിവിറ്റിയും ഇല്ലാതാക്കും"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"പുറത്തുകടക്കുമ്പോൾ ആക്‌റ്റിവിറ്റി സംരക്ഷിക്കുകയോ ഇല്ലാതാക്കുകയോ ചെയ്യാം"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"സെഷൻ ആക്‌റ്റിവിറ്റി ഇപ്പോൾ ഇല്ലാതാക്കാൻ റീസെറ്റ് ചെയ്യുക അല്ലെങ്കിൽ പുറത്തുകടക്കുമ്പോൾ ആക്‌റ്റിവിറ്റി സംരക്ഷിക്കുകയോ ഇല്ലാതാക്കുകയോ ചെയ്യാം"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"ഒരു ഫോട്ടോ എടുക്കുക"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"ഒരു ചിത്രം തിരഞ്ഞെടുക്കുക"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"ഫോട്ടോ തിരഞ്ഞെടുക്കുക"</string>
@@ -644,6 +660,7 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"കാലാവസ്ഥ"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"വായു നിലവാരം"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"കാസ്റ്റ് വിവരങ്ങൾ"</string>
+    <string name="dream_complication_title_home_controls" msgid="9153381632476738811">"ഹോം കൺട്രോളുകൾ"</string>
     <string name="avatar_picker_title" msgid="8492884172713170652">"പ്രൊഫൈൽ ചിത്രം തിരഞ്ഞെടുക്കുക"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"ഡിഫോൾട്ട് ഉപയോക്തൃ ഐക്കൺ"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"ഫിസിക്കൽ കീബോർഡ്"</string>
diff --git a/packages/SettingsLib/res/values-mn/arrays.xml b/packages/SettingsLib/res/values-mn/arrays.xml
index 9bd10a78..63fa53b 100644
--- a/packages/SettingsLib/res/values-mn/arrays.xml
+++ b/packages/SettingsLib/res/values-mn/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Системийн сонголтыг ашиглах (Өгөгдмөл)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> аудио"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> аудио"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Системийн сонголтыг ашиглах (Өгөгдмөл)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> аудио"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> аудио"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Системийн сонголтыг ашиглах (Өгөгдмөл)"</item>
     <item msgid="8003118270854840095">"44.1 кГц"</item>
diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml
index 76a6b66..d45434e 100644
--- a/packages/SettingsLib/res/values-mn/strings.xml
+++ b/packages/SettingsLib/res/values-mn/strings.xml
@@ -117,8 +117,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="7064307749579335765">"Харилцагч хуваалцах"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Харилцагч хуваалцахад ашиглах"</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>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Хурдан цэнэглэж байна"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Удаан цэнэглэж байна"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Утасгүй цэнэглэж байна"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Цэнэглэх холбогч"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Цэнэглэхгүй байна"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Холбогдсон, цэнэглээгүй байна"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Цэнэглэсэн"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Шинэчлэх"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Хасах"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Зочныг шинэчилж байна…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Зочны харилцан үйлдлийг шинэчлэх үү?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Устгах"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Хадгалах"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Зочны горимоос гарах"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Зочны харилцан үйлдлийг шинэчлэх"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Зочны горимоос гарах"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Бүх үйл ажиллагааг гарах үед устгана"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Та гарахдаа үйл ажиллагаагаа хадгалах эсвэл устгах боломжтой"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Харилцан үйлдлийн үйл ажиллагааг одоо устгахын тулд шинэчлэх эсвэл та гарахдаа үйл ажиллагааг хадгалах, устгах боломжтой"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Зураг авах"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Зураг сонгох"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Зураг сонгох"</string>
@@ -644,6 +660,7 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Цаг агаар"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Агаарын чанар"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Дамжуулах мэдээлэл"</string>
+    <string name="dream_complication_title_home_controls" msgid="9153381632476738811">"Гэрийн удирдлага"</string>
     <string name="avatar_picker_title" msgid="8492884172713170652">"Профайл зураг сонгох"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Өгөгдмөл хэрэглэгчийн дүрс тэмдэг"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Биет гар"</string>
diff --git a/packages/SettingsLib/res/values-mr/arrays.xml b/packages/SettingsLib/res/values-mr/arrays.xml
index 45bc5b8..a54f990 100644
--- a/packages/SettingsLib/res/values-mr/arrays.xml
+++ b/packages/SettingsLib/res/values-mr/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"सिस्टीम निवड वापरा (डीफॉल्ट)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ऑडिओ"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ऑडिओ"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"सिस्टम निवड वापरा (डीफॉल्ट)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ऑडिओ"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ऑडिओ"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"सिस्टम निवड वापरा (डीफॉल्ट)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml
index 1f89b8f..8de5904 100644
--- a/packages/SettingsLib/res/values-mr/strings.xml
+++ b/packages/SettingsLib/res/values-mr/strings.xml
@@ -117,8 +117,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="7064307749579335765">"संपर्क शेअरिंग"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"संपर्क सामायिकरणासाठी वापरा"</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">"सिम अ‍ॅक्सेस"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"वेगाने चार्ज होत आहे"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"हळू चार्ज होत आहे"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"वायरलेसने चार्ज होत आहे"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"चार्जिंग डॉक"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"चार्ज होत नाही"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"कनेक्ट केले, चार्ज होत नाही"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"चार्ज झाली"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"रीसेट करा"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"काढून टाका"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"अतिथीला रीसेट करत आहे…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"अतिथी सत्र रीसेट करायचे का?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"हटवा"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"सेव्ह करा"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"अतिथी मोडमधून बाहेर पडा"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"अतिथी सत्र रीसेट करा"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"अतिथी मोडमधून बाहेर पडा"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"बाहेर पडल्यावर सर्व अ‍ॅक्टिव्हिटी हटवली जाईल"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"बाहेर पडल्यावर तुमची अ‍ॅक्टिव्हिटी सेव्ह करू किंवा हटवू शकता"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"सत्र अ‍ॅक्टिव्हिटी आता हटवण्यासाठी रीसेट करा किंवा तुम्ही बाहेर पडल्यावर अ‍ॅक्टिव्हिटी सेव्ह करू अथवा हटवू शकता"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"फोटो काढा"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"इमेज निवडा"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"फोटो निवडा"</string>
@@ -644,6 +660,7 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"हवामान"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"हवेची गुणवत्ता"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"कास्टसंबंधित माहिती"</string>
+    <string name="dream_complication_title_home_controls" msgid="9153381632476738811">"होम कंट्रोल"</string>
     <string name="avatar_picker_title" msgid="8492884172713170652">"प्रोफाइल फोटो निवडा"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"डीफॉल्ट वापरकर्ता आयकन"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"वास्तविक कीबोर्ड"</string>
diff --git a/packages/SettingsLib/res/values-ms/arrays.xml b/packages/SettingsLib/res/values-ms/arrays.xml
index d88ea76..b26ed23 100644
--- a/packages/SettingsLib/res/values-ms/arrays.xml
+++ b/packages/SettingsLib/res/values-ms/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Gunakan Pilihan Sistem (Lalai)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Gunakan Pilihan Sistem (Lalai)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Gunakan Pilihan Sistem (Lalai)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml
index 2034af2..2cfafdf 100644
--- a/packages/SettingsLib/res/values-ms/strings.xml
+++ b/packages/SettingsLib/res/values-ms/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Pemindahan fail"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Peranti input"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Akses Internet"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Perkongsian kenalan"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Gunakan untuk perkongsian kenalan"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Perkongsian kenalan &amp; sejarah panggilan"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Digunakan untuk perkongsian kenalan dan sejarah panggilan"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Perkongsian sambungan Internet"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Mesej Teks"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Akses SIM"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Mengecas dgn cepat"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Mengecas perlahan"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Mengecas tanpa wayar"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Dok Pengecasan"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Tidak mengecas"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Bersambung, tidak mengecas"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Sudah dicas"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Tetapkan semula"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Alih keluar"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Menetapkan semula tetamu…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Tetapkan semula sesi tetamu?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Padam"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Simpan"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Keluar daripada mod tetamu"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Tetapkan semula sesi tetamu"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Keluar mod tetamu"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Semua aktiviti akan dipadamkan semasa keluar"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Aktiviti anda boleh disimpan atau dipadam semasa keluar"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Tetapkan semula sesi untuk memadamkan aktiviti sesi sekarang atau anda boleh menyimpan atau memadamkan aktiviti semasa keluar"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Ambil foto"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Pilih imej"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Pilih foto"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Cuaca"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Kualiti Udara"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Maklumat Pelakon"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Pilih gambar profil"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Ikon pengguna lalai"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Papan kekunci fizikal"</string>
diff --git a/packages/SettingsLib/res/values-my/arrays.xml b/packages/SettingsLib/res/values-my/arrays.xml
index 857a6ae..ed95dfe 100644
--- a/packages/SettingsLib/res/values-my/arrays.xml
+++ b/packages/SettingsLib/res/values-my/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"စနစ်ရွေးချယ်မှုကို အသုံးပြုပါ (မူရင်း)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> အသံ"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> အသံ"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"စနစ်ရွေးချယ်မှုကို အသုံးပြုပါ (မူရင်း)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> အသံ"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> အသံ"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"စနစ်ရွေးချယ်မှုကို အသုံးပြုပါ (မူရင်း)"</item>
     <item msgid="8003118270854840095">"၄၄.၁ kHz"</item>
diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml
index e7824d1..74351c5 100644
--- a/packages/SettingsLib/res/values-my/strings.xml
+++ b/packages/SettingsLib/res/values-my/strings.xml
@@ -117,8 +117,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="7064307749579335765">"အဆက်အသွယ်ကို မျှဝေခြင်း"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"အဆက်အသွယ်ကို မျှဝေရန် အတွက် သုံးရန်"</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>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"အမြန် အားသွင်းနေသည်"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"နှေးကွေးစွာ အားသွင်း"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"ကြိုးမဲ့ အားသွင်းနေသည်"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"အားသွင်းအထိုင်"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"အားသွင်းမနေပါ"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"ချိတ်ဆက်ထားသည်၊ အားသွင်းမနေပါ"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"အားသွင်းပြီးပါပြီ"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"ပြင်ဆင်သတ်မှတ်ရန်"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"ဖယ်ရှားရန်"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"ဧည့်သည်ကို ပြင်ဆင်သတ်မှတ်နေသည်…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"ဧည့်သည် စက်ရှင် ပြင်ဆင်သတ်မှတ်မလား။"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"ဖျက်ရန်"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"သိမ်းရန်"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"ဧည့်သည်မုဒ်မှ ထွက်ရန်"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"ဧည့်သည် စက်ရှင် ပြင်ဆင်သတ်မှတ်ရန်"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"ဧည့်သည့်မှ ထွက်ရန်"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"ထွက်သည့်အခါ လုပ်ဆောင်ချက်အားလုံးကို ဖျက်လိုက်မည်"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"ထွက်သည့်အခါ လုပ်ဆောင်ချက်ကို သိမ်းနိုင် (သို့) ဖျက်နိုင်သည်"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"စက်ရှင်လုပ်ဆောင်ချက်ကို ယခုဖျက်ရန် ပြင်ဆင်သတ်မှတ်နိုင်သည် (သို့) ထွက်သည့်အခါ သိမ်းနိုင်၊ ဖျက်နိုင်သည်"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"ဓာတ်ပုံရိုက်ရန်"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"ပုံရွေးရန်"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"ဓာတ်ပုံရွေးရန်"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"မိုးလေဝသ"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"လေထုအရည်အသွေး"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"ကာစ် အချက်အလက်"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"ပရိုဖိုင်ပုံ ရွေးပါ"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"မူရင်းအသုံးပြုသူ သင်္ကေတ"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"ပကတိ ကီးဘုတ်"</string>
diff --git a/packages/SettingsLib/res/values-nb/arrays.xml b/packages/SettingsLib/res/values-nb/arrays.xml
index 0f6e1fc..317c2db 100644
--- a/packages/SettingsLib/res/values-nb/arrays.xml
+++ b/packages/SettingsLib/res/values-nb/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Bruk systemvalg (standard)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>-lyd"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>-lyd"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Bruk systemvalg (standard)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>-lyd"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>-lyd"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Bruk systemvalg (standard)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml
index 2f0b46f..396ed94 100644
--- a/packages/SettingsLib/res/values-nb/strings.xml
+++ b/packages/SettingsLib/res/values-nb/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Filoverføring"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Inndataenhet"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Internett-tilgang"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Kontaktdeling"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Bruk til kontaktdeling"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Deling av kontakter og anropslogg"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Bruk for deling av kontakter og anropslogg"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Deling av internettilkobling"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Tekstmeldinger"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Tilgang til SIM-kortet"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Lader raskt"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Lader sakte"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Lader trådløst"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Ladedokk"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Lader ikke"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Tilkoblet, lader ikke"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Ladet"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Tilbakestill"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Fjern"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Tilbakestiller gjesten …"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Vil du tilbakestille gjesteøkten?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Slett"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Lagre"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Avslutt gjestemodus"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Tilbakestill gjesteøkten"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Avslutt gjesteøkten"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"All aktivitet slettes når du avslutter"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Du kan lagre eller slette aktiviteten når du avslutter"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Tilbakestill for å slette øktaktivitet nå, eller du kan lagre eller slette aktivitet når du avslutter"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Ta et bilde"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Velg et bilde"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Velg et bilde"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Vær"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Luftkvalitet"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Castinformasjon"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Velg et profilbilde"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Standard brukerikon"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Fysisk tastatur"</string>
diff --git a/packages/SettingsLib/res/values-ne/arrays.xml b/packages/SettingsLib/res/values-ne/arrays.xml
index 611066e..b3c3ee2 100644
--- a/packages/SettingsLib/res/values-ne/arrays.xml
+++ b/packages/SettingsLib/res/values-ne/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"सिस्टमको छनौट प्रयोग गरियोस् (डिफल्ट)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> अडियो"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> अडियो"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"सिस्टमको छनौट प्रयोग गरियोस् (डिफल्ट)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> अडियो"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> अडियो"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"सिस्टमको छनौट प्रयोग गरियोस् (डिफल्ट)"</item>
     <item msgid="8003118270854840095">"४४.१ kHz"</item>
diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml
index 34da9a7..3944a26 100644
--- a/packages/SettingsLib/res/values-ne/strings.xml
+++ b/packages/SettingsLib/res/values-ne/strings.xml
@@ -117,8 +117,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="7064307749579335765">"कन्ट्याक्ट सेयरिङ"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"सम्पर्क साझेदारीका लागि प्रयोग"</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>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"द्रुत गतिमा चार्ज गरिँदै छ"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"ढिलो चार्ज हुँदै छ"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"वायरलेस तरिकाले चार्ज गरिँदै छ"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"डक चार्ज हुँदै छ"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"चार्ज भइरहेको छैन"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"कनेक्ट गरिएको छ, चार्ज भइरहेको छैन"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"चार्ज भयो"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"रिसेट गर्नुहोस्"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"हटाउनुहोस्"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"अतिथिका रूपमा ब्राउज गर्ने सेसन रिसेट गरिँदै छ…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"अतिथि सत्र रिसेट गर्ने हो?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"मेटाउनुहोस्"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"सेभ गर्नुहोस्"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"अतिथि मोडबाट बाहिरिनुहोस्"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"अतिथि सत्र रिसेट गर्नुहोस्"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"अतिथि मोडबाट बाहिरिनुहोस्"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"अतिथि मोडबाट बाहिरिँदा सबै क्रियाकलाप मेटाइने छ"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"तपाईं अतिथि मोडबाट बाहिरिँदा आफ्ना क्रियाकलाप सेभ गर्ने वा मेटाउने विकल्प रोज्न सक्नुहुन्छ"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"यो सत्रमा गरिएका क्रियाकलाप अहिले नै मेटाउन रिसेट गर्नुहोस्, अथवा तपाईं अतिथि मोडबाट बाहिरिँदा आफ्ना क्रियाकलाप सेभ गर्ने वा मेटाउने विकल्प रोज्न सक्नुहुन्छ"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"फोटो खिच्नुहोस्"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"कुनै फोटो छनौट गर्नुहोस्"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"फोटो चयन गर्नुहोस्"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"मौसम"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"वायुको गुणस्तर"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"कास्टसम्बन्धी जानकारी"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"प्रोफाइल फोटो छान्नुहोस्"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"प्रयोगकर्ताको डिफल्ट आइकन"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"भौतिक किबोर्ड"</string>
diff --git a/packages/SettingsLib/res/values-nl/arrays.xml b/packages/SettingsLib/res/values-nl/arrays.xml
index e0690df..e809452 100644
--- a/packages/SettingsLib/res/values-nl/arrays.xml
+++ b/packages/SettingsLib/res/values-nl/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Systeemselectie gebruiken (standaard)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Gebruik systeemselectie (standaard)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Systeemselectie gebruiken (standaard)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml
index f250b60..b42f29a 100644
--- a/packages/SettingsLib/res/values-nl/strings.xml
+++ b/packages/SettingsLib/res/values-nl/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Bestandsoverdracht"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Invoerapparaat"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Internettoegang"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Contacten delen"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Gebruiken voor contacten delen"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Contacten en gespreksgeschiedenis delen"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Gebruiken om contacten en gespreksgeschiedenis te delen"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Internetverbinding delen"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Sms-berichten"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Sim-toegang"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Snel opladen"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Langzaam opladen"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Draadloos opladen"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Oplaaddock"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Wordt niet opgeladen"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Verbonden, wordt niet opgeladen"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Opgeladen"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Resetten"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Verwijderen"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Gast resetten…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Gastsessie resetten?"</string>
+    <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"Hierdoor wordt een nieuwe gastsessie gestart 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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Verwijderen"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Opslaan"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Gastmodus sluiten"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Gastsessie resetten"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Gastmodus verlaten"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Alle activiteit wordt na het afsluiten verwijderd"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Je kunt je activiteit bij afsluiten opslaan of verwijderen"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Voer een reset uit om de sessie-activiteit nu te verwijderen of verwijder of sla je activiteit op bij afsluiten"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Foto maken"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Afbeelding kiezen"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Foto selecteren"</string>
@@ -644,6 +660,7 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Weer"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Luchtkwaliteit"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Castinformatie"</string>
+    <string name="dream_complication_title_home_controls" msgid="9153381632476738811">"Bediening voor in huis"</string>
     <string name="avatar_picker_title" msgid="8492884172713170652">"Kies een profielfoto"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Standaard gebruikersicoon"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Fysiek toetsenbord"</string>
diff --git a/packages/SettingsLib/res/values-or/arrays.xml b/packages/SettingsLib/res/values-or/arrays.xml
index dd25b3e..d42aeaf 100644
--- a/packages/SettingsLib/res/values-or/arrays.xml
+++ b/packages/SettingsLib/res/values-or/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"ସିଷ୍ଟମ୍ ଚୟନ ବ୍ୟବହାର କରନ୍ତୁ (ଡିଫଲ୍ଟ)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ଅଡିଓ"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ଅଡିଓ"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"ସିଷ୍ଟମ୍‌ର ଚୟନ (ଡିଫଲ୍ଟ୍) ବ୍ୟବହାର କରନ୍ତୁ"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ଅଡିଓ"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ଅଡିଓ"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"ସିଷ୍ଟମ୍‌ର ଚୟନ (ଡିଫଲ୍ଟ୍) ବ୍ୟବହାର କରନ୍ତୁ"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-or/strings.xml b/packages/SettingsLib/res/values-or/strings.xml
index e7a80f3..502f4531 100644
--- a/packages/SettingsLib/res/values-or/strings.xml
+++ b/packages/SettingsLib/res/values-or/strings.xml
@@ -117,8 +117,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="7064307749579335765">"ଯୋଗାଯୋଗ ସେୟାରିଂ"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"ଯୋଗାଯୋଗ ସେୟାର୍‌ କରିବା ପାଇଁ ବ୍ୟବହାର କରନ୍ତୁ"</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>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"ଶୀଘ୍ର ଚାର୍ଜ ହେଉଛି"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"ଧୀରେ ଚାର୍ଜ ହେଉଛି"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"ୱେୟରଲେସ ଭାବେ ଚାର୍ଜିଂ"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"ଡକ ଚାର୍ଜ ହେଉଛି"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"ଚାର୍ଜ ହେଉନାହିଁ"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"ସଂଯୋଗ କରାଯାଇଛି, ଚାର୍ଜ ହେଉନାହିଁ"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"ଚାର୍ଜ ହୋଇଯାଇଛି"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"ରିସେଟ୍ କରନ୍ତୁ"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"କାଢ଼ି ଦିଅନ୍ତୁ"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"ଅତିଥି ସେସନକୁ ରିସେଟ୍ କରାଯାଉଛି…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"ଅତିଥି ସେସନକୁ ରିସେଟ କରିବେ?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"ଡିଲିଟ କରନ୍ତୁ"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"ସେଭ କରନ୍ତୁ"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"ଅତିଥି ମୋଡରୁ ବାହାରି ଯାଆନ୍ତୁ"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"ଅତିଥି ସେସନକୁ ରିସେଟ କରନ୍ତୁ"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"ଅତିଥି ମୋଡରୁ ବାହାରି ଯାଆନ୍ତୁ"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"ବାହାରିବା ସମୟରେ ସମସ୍ତ କାର୍ଯ୍ୟକଳାପକୁ ଡିଲିଟ କରାଯିବ"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"ବାହାରିବା ସମୟରେ ଆପଣଙ୍କର କାର୍ଯ୍ୟକଳାପକୁ ସେଭ ବା ଡିଲିଟ କରିପାରିବେ"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"ବର୍ତ୍ତମାନ ସେସନ କାର୍ଯ୍ୟକଳାପକୁ ଡିଲିଟ କରିବାକୁ ରିସେଟ କରନ୍ତୁ କିମ୍ବା ବାହାରିବା ସମୟରେ ଆପଣ କାର୍ଯ୍ୟକଳାପକୁ ସେଭ କିମ୍ବା ଡିଲିଟ କରିପାରିବେ"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"ଗୋଟିଏ ଫଟୋ ଉଠାନ୍ତୁ"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"ଏକ ଛବି ବାଛନ୍ତୁ"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"ଫଟୋ ବାଛନ୍ତୁ"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"ପାଣିପାଗ"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"ବାୟୁର ଗୁଣବତ୍ତା"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"କାଷ୍ଟ ସୂଚନା"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"ଏକ ପ୍ରୋଫାଇଲ ଛବି ବାଛନ୍ତୁ"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"ଡିଫଲ୍ଟ ଉପଯୋଗକର୍ତ୍ତା ଆଇକନ"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"ଫିଜିକାଲ କୀବୋର୍ଡ"</string>
diff --git a/packages/SettingsLib/res/values-pa/arrays.xml b/packages/SettingsLib/res/values-pa/arrays.xml
index 6ba2145..a3fae22 100644
--- a/packages/SettingsLib/res/values-pa/arrays.xml
+++ b/packages/SettingsLib/res/values-pa/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"ਸਿਸਟਮ ਚੋਣ ਦੀ ਵਰਤੋਂ ਕਰੋ (ਪੂਰਵ-ਨਿਰਧਾਰਿਤ)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ਆਡੀਓ"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ਆਡੀਓ"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"ਸਿਸਟਮ ਚੋਣ ਦੀ ਵਰਤੋਂ ਕਰੋ (ਪੂਰਵ-ਨਿਰਧਾਰਿਤ)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ਆਡੀਓ"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ਆਡੀਓ"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"ਸਿਸਟਮ ਚੋਣ ਦੀ ਵਰਤੋਂ ਕਰੋ (ਪੂਰਵ-ਨਿਰਧਾਰਿਤ)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml
index 90f2b0f..632dd3f 100644
--- a/packages/SettingsLib/res/values-pa/strings.xml
+++ b/packages/SettingsLib/res/values-pa/strings.xml
@@ -117,8 +117,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="7064307749579335765">"ਸੰਪਰਕ ਸਾਂਝਾਕਰਨ"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"ਸੰਪਰਕ ਸ਼ੇਅਰਿੰਗ ਲਈ ਵਰਤੋ"</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">"ਸਿਮ ਪਹੁੰਚ"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"ਤੇਜ਼ ਚਾਰਜ ਹੋ ਰਹੀ ਹੈ"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"ਹੌਲੀ ਚਾਰਜ ਹੋ ਰਹੀ ਹੈ"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"ਬਿਨਾਂ ਤਾਰ ਤੋਂ ਚਾਰਜ ਹੋ ਰਹੀ ਹੈ"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"ਡੌਕ ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੈ"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"ਚਾਰਜ ਨਹੀਂ ਹੋ ਰਿਹਾ"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"ਕਨੈਕਟ ਹੈ, ਚਾਰਜ ਨਹੀਂ ਹੋ ਰਹੀ"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"ਚਾਰਜ ਹੋ ਗਈ"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"ਰੀਸੈੱਟ ਕਰੋ"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"ਹਟਾਓ"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"ਮਹਿਮਾਨ ਨੂੰ ਰੀਸੈੱਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"ਕੀ ਮਹਿਮਾਨ ਸੈਸ਼ਨ ਨੂੰ ਰੀਸੈੱਟ ਕਰਨਾ ਹੈ?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"ਮਿਟਾਓ"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"ਰੱਖਿਅਤ ਕਰੋ"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"ਮਹਿਮਾਨ ਮੋਡ ਤੋਂ ਬਾਹਰ ਜਾਓ"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"ਮਹਿਮਾਨ ਸੈਸ਼ਨ ਨੂੰ ਰੀਸੈੱਟ ਕਰੋ"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"ਮਹਿਮਾਨ ਮੋਡ ਤੋਂ ਬਾਹਰ ਜਾਓ"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"ਬਾਹਰ ਜਾਣ \'ਤੇ ਸਾਰੀ ਸਰਗਰਮੀ ਮਿਟਾਈ ਜਾਵੇਗੀ"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"ਤੁਸੀਂ ਬਾਹਰ ਜਾਣ \'ਤੇ ਆਪਣੀ ਸਰਗਰਮੀ ਰੱਖਿਅਤ ਕਰ ਜਾਂ ਮਿਟਾ ਸਕਦੇ ਹੋ"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"ਸੈਸ਼ਨ ਦੀ ਸਰਗਰਮੀ ਹੁਣੇ ਮਿਟਾਉਣ ਲਈ ਰੀਸੈੱਟ ਕਰੋ ਜਾਂ ਤੁਸੀਂ ਬਾਹਰ ਜਾਣ \'ਤੇ ਸਰਗਰਮੀ ਨੂੰ ਰੱਖਿਅਤ ਕਰ ਜਾਂ ਮਿਟਾ ਸਕਦੇ ਹੋ"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"ਇੱਕ ਫ਼ੋਟੋ ਖਿੱਚੋ"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"ਕੋਈ ਚਿੱਤਰ ਚੁਣੋ"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"ਫ਼ੋਟੋ ਚੁਣੋ"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"ਮੌਸਮ"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"ਹਵਾ ਦੀ ਕੁਆਲਿਟੀ"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"ਕਾਸਟ ਸੰਬੰਧੀ ਜਾਣਕਾਰੀ"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"ਕੋਈ ਪ੍ਰੋਫਾਈਲ ਤਸਵੀਰ ਚੁਣੋ"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਵਰਤੋਂਕਾਰ ਪ੍ਰਤੀਕ"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"ਭੌਤਿਕ ਕੀ-ਬੋਰਡ"</string>
diff --git a/packages/SettingsLib/res/values-pl/arrays.xml b/packages/SettingsLib/res/values-pl/arrays.xml
index 5f91d35..f0453d1 100644
--- a/packages/SettingsLib/res/values-pl/arrays.xml
+++ b/packages/SettingsLib/res/values-pl/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Używaj wyboru systemu (domyślnie)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Używaj wyboru systemu (domyślnie)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Używaj wyboru systemu (domyślnie)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml
index a244e53..80d864d 100644
--- a/packages/SettingsLib/res/values-pl/strings.xml
+++ b/packages/SettingsLib/res/values-pl/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Przesyłanie pliku"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Urządzenie wejściowe"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Dostęp do internetu"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Udostępnianie kontaktów"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Używaj do udostępniania kontaktów"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Udostępnianie kontaktów i historii połączeń"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Używaj w przypadku udostępniania kontaktów i historii połączeń"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Udostępnianie połączenia internetowego"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"SMS-y"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Dostęp do karty SIM"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Szybkie ładowanie"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Wolne ładowanie"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Ładowanie bezprzewodowe"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Ładowanie na stacji dokującej"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Nie podłączony"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Podłączono, brak ładowania"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Naładowana"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Resetuj"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Usuń"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Resetuję sesję gościa…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Zresetować sesję gościa?"</string>
+    <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="guest_exit_dialog_button" msgid="1736401897067442044">"Wyjdź"</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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Usuń"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Zapisz"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Zamknij tryb gościa"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Zresetuj sesję gościa"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Zakończ tryb gościa"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Cała aktywność zostanie usunięta po zamknięciu"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Możesz zapisać lub usunąć swoją aktywność podczas zamykania."</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Zresetuj, aby teraz usunąć aktywność z tej sesji. Możesz też ją zapisać lub usunąć podczas zamykania sesji."</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Zrób zdjęcie"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Wybierz obraz"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Wybierz zdjęcie"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Pogoda"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Jakość powietrza"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Obsada"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Wybierz zdjęcie profilowe"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Ikona domyślnego użytkownika"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Klawiatura fizyczna"</string>
diff --git a/packages/SettingsLib/res/values-pt-rBR/arrays.xml b/packages/SettingsLib/res/values-pt-rBR/arrays.xml
index c5a847f..1883ef3 100644
--- a/packages/SettingsLib/res/values-pt-rBR/arrays.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Usar seleção do sistema (padrão)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"Áudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Áudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Usar seleção do sistema (padrão)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"Áudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Áudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Usar seleção do sistema (padrão)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml
index 861c183..9569005 100644
--- a/packages/SettingsLib/res/values-pt-rBR/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Transferência de arquivo"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Dispositivo de entrada"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Acesso à Internet"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Compartilhar contatos"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Usar para compartilhar contatos"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Compartilhar contatos e histórico de chamadas"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Use para compartilhar contatos e o histórico de chamadas"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Compartilhamento de conexão à Internet"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Mensagens de texto"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Acesso ao chip"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Carregando rápido"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Carregando devagar"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Carregando sem fio"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Base de carregamento"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Não está carregando"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Conectado sem carregar"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Carregada"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Redefinir"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Remover"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Redefinindo visitante…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Redefinir Sessão de visitante?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Excluir"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Salvar"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Sair do modo visitante"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Redefinir Sessão de visitante"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Sair do modo visitante"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Todas as atividades serão excluídas ao sair"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Você pode salvar ou excluir sua atividade ao sair"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Redefina para excluir a atividade da sessão agora. Salve ou exclua a atividade ao sair"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Tirar uma foto"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Escolher uma imagem"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Selecionar foto"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Clima"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Qualidade ­do ar"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Info. de transmissão"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Escolher a foto do perfil"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Ícone de usuário padrão"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Teclado físico"</string>
diff --git a/packages/SettingsLib/res/values-pt-rPT/arrays.xml b/packages/SettingsLib/res/values-pt-rPT/arrays.xml
index 3e7ee05..985bd51 100644
--- a/packages/SettingsLib/res/values-pt-rPT/arrays.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Utilizar seleção do sistema (predefinido)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"Áudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Áudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Utilizar seleção do sistema (predefinido)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"Áudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Áudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Utilizar seleção do sistema (predefinido)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml
index af12d85..aa24330 100644
--- a/packages/SettingsLib/res/values-pt-rPT/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Transferência do ficheiro"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Dispositivo de entrada"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Acesso à internet"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Partilha de contactos"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Utilizar para a partilha de contactos"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Part. histórico de chamadas e contactos"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Usar para partilha do histórico de chamadas e dos contactos"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Partilha da ligação à internet"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Mensagens de texto"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Acesso ao SIM"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Carregamento rápido"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Carregamento lento"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"A carregar sem fios"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Est. ancor. carreg."</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Não está a carregar"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Ligado, não está a carregar"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Carregada"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Repor"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Remover"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"A repor o convidado…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Repor sessão de convidado?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Eliminar"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Guardar"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Sair do modo convidado"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Repor sessão de convidado"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Sair do modo de convidado"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Toda a atividade é eliminada ao sair"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Pode guardar ou eliminar a sua atividade ao sair"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Reponha para eliminar agora a atividade da sessão. Pode ainda guardar ou eliminar a atividade ao sair"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Tirar uma foto"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Escolher uma imagem"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Selecionar foto"</string>
@@ -644,6 +660,7 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Meteorologia"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Qualidade do ar"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Info. de transmissão"</string>
+    <string name="dream_complication_title_home_controls" msgid="9153381632476738811">"Ctr. domésticos"</string>
     <string name="avatar_picker_title" msgid="8492884172713170652">"Escolha uma imagem do perfil"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Ícone do utilizador predefinido"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Teclado físico"</string>
diff --git a/packages/SettingsLib/res/values-pt/arrays.xml b/packages/SettingsLib/res/values-pt/arrays.xml
index c5a847f..1883ef3 100644
--- a/packages/SettingsLib/res/values-pt/arrays.xml
+++ b/packages/SettingsLib/res/values-pt/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Usar seleção do sistema (padrão)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"Áudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Áudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Usar seleção do sistema (padrão)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"Áudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Áudio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Usar seleção do sistema (padrão)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml
index 861c183..9569005 100644
--- a/packages/SettingsLib/res/values-pt/strings.xml
+++ b/packages/SettingsLib/res/values-pt/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Transferência de arquivo"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Dispositivo de entrada"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Acesso à Internet"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Compartilhar contatos"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Usar para compartilhar contatos"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Compartilhar contatos e histórico de chamadas"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Use para compartilhar contatos e o histórico de chamadas"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Compartilhamento de conexão à Internet"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Mensagens de texto"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Acesso ao chip"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Carregando rápido"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Carregando devagar"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Carregando sem fio"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Base de carregamento"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Não está carregando"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Conectado sem carregar"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Carregada"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Redefinir"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Remover"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Redefinindo visitante…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Redefinir Sessão de visitante?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Excluir"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Salvar"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Sair do modo visitante"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Redefinir Sessão de visitante"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Sair do modo visitante"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Todas as atividades serão excluídas ao sair"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Você pode salvar ou excluir sua atividade ao sair"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Redefina para excluir a atividade da sessão agora. Salve ou exclua a atividade ao sair"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Tirar uma foto"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Escolher uma imagem"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Selecionar foto"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Clima"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Qualidade ­do ar"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Info. de transmissão"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Escolher a foto do perfil"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Ícone de usuário padrão"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Teclado físico"</string>
diff --git a/packages/SettingsLib/res/values-ro/arrays.xml b/packages/SettingsLib/res/values-ro/arrays.xml
index 454867e..f1e9986 100644
--- a/packages/SettingsLib/res/values-ro/arrays.xml
+++ b/packages/SettingsLib/res/values-ro/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Folosiți selectarea sistemului (prestabilit)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Folosiți selectarea sistemului (prestabilit)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Audio <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Folosiți selectarea sistemului (prestabilit)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml
index f84dec6..75b37d5 100644
--- a/packages/SettingsLib/res/values-ro/strings.xml
+++ b/packages/SettingsLib/res/values-ro/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Transfer de fișiere"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Dispozitiv de intrare"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Acces la internet"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Acces la Agendă"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Utilizați pentru a permite accesul la Agendă"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Acces la agendă și istoricul apelurilor"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Folosiți pentru accesul la agendă și istoricul apelurilor"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Distribuirea conexiunii la internet"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Mesaje text"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Acces la SIM"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Se încarcă rapid"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Se încarcă lent"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Se încarcă wireless"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Suport de încărcare"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Nu se încarcă"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Conectat, nu se încarcă"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Încărcată"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Resetați"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Eliminați"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Se resetează invitatul…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Resetați sesiunea pentru invitați?"</string>
+    <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ț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="guest_exit_dialog_button" msgid="1736401897067442044">"Ieșiți"</string>
+    <string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"Salvați activitatea invitatului?"</string>
+    <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"Salvați activitatea din sesiunea actuală sau ștergeți aplicațiile și datele"</string>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Ștergeți"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Salvați"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Ieșiți din modul pentru invitați"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Resetați sesiunea pentru invitați"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Ieșiți din modul pentru invitați"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Toate activitățile vor fi șterse la ieșire"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Puteți să salvați sau să ștergeți activitatea la ieșire"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Resetați pentru a șterge acum activitatea din sesiune sau salvați ori ștergeți activitatea la ieșire"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Faceți o fotografie"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Alegeți o imagine"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Selectați fotografia"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Meteo"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Calitatea aerului"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Informații artiști"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Alegeți o fotografie de profil"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Pictograma prestabilită a utilizatorului"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Tastatură fizică"</string>
diff --git a/packages/SettingsLib/res/values-ru/arrays.xml b/packages/SettingsLib/res/values-ru/arrays.xml
index 28b4695..b1211a5 100644
--- a/packages/SettingsLib/res/values-ru/arrays.xml
+++ b/packages/SettingsLib/res/values-ru/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Выбор системы (по умолчанию)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"Аудиокодек: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Аудиокодек: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Выбор системы (по умолчанию)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"Аудиокодек: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Аудиокодек: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Выбор системы (по умолчанию)"</item>
     <item msgid="8003118270854840095">"44,1 кГц"</item>
diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml
index d70e31a..568a41d 100644
--- a/packages/SettingsLib/res/values-ru/strings.xml
+++ b/packages/SettingsLib/res/values-ru/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Профиль OPP"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Профиль HID"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Доступ к интернету"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Обмен контактами"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Использовать для обмена контактами"</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">"Профиль PAN"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Текстовые сообщения"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Доступ к SIM-карте"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Быстрая зарядка"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Медленная зарядка"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Беспроводная зарядка"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Док-станция: зарядка"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Не заряжается"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Подключено, не заряжается"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Батарея заряжена"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Сбросить"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Удалить"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Сброс гостевого сеанса…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Сбросить гостевой сеанс?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Удалить"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Сохранить"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Выйти из гостевого режима"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Сбросить гостевой сеанс"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Выйти из гостевого режима"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"История будет удалена сразу после выхода."</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"При выходе вы можете сохранить или удалить историю."</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Можно сбросить историю сеанса прямо сейчас, либо удалить или сохранить ее при выходе."</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Сделать снимок"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Выбрать фото"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Выбрать фотографию"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Погода"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Качество воздуха"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Данные о трансляции"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Выберите фото профиля"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Значок пользователя по умолчанию"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Физическая клавиатура"</string>
diff --git a/packages/SettingsLib/res/values-si/arrays.xml b/packages/SettingsLib/res/values-si/arrays.xml
index c2dbf60..8386c1a 100644
--- a/packages/SettingsLib/res/values-si/arrays.xml
+++ b/packages/SettingsLib/res/values-si/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"පද්ධති තේරීම භාවිත කරන්න (පෙරනිමි)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ශ්‍රව්‍යය"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ශ්‍රව්‍යය"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"පද්ධති තේරීම භාවිත කරන්න (පෙරනිමි)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ශ්‍රව්‍යය"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ශ්‍රව්‍යය"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"පද්ධති තේරීම භාවිත කරන්න (පෙරනිමි)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml
index 217ba1d..4f66739 100644
--- a/packages/SettingsLib/res/values-si/strings.xml
+++ b/packages/SettingsLib/res/values-si/strings.xml
@@ -117,8 +117,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="7064307749579335765">"සම්බන්ධතා බෙදාගැනීම"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"සම්බන්ධතා බෙදාගැනීම සඳහා භාවිතා කිරීම"</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>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"ශීඝ්‍ර ආරෝපණය"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"සෙමින් ආරෝපණය"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"නොරැහැන්ව ආරෝපණය වේ"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"ආරෝපණ ඩොකය"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"ආරෝපණය නොවේ"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"සම්බන්ධයි, ආරෝපණය නොවේ"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"අරෝපිතයි"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"යළි සකසන්න"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"ඉවත් කරන්න"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"අමුත්තා යළි සකසමින්…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"ආගන්තුක සැසිය යළි සකසන්නද?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"මකන්න"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"සුරකින්න"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"ආගන්තුක ප්‍රකාරයෙන් පිටවන්න"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"ආගන්තුක සැසිය යළි සකසන්න"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"අමුත්තා පිටවීම"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"පිටවීමේදී සියලු ක්‍රියාකාරකම් මකනු ඇත"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"ඔබට පිටවීමේදී ඔබගේ ක්‍රියාකාරකම් සුරැකීමට හෝ මැකීමට හැකිය"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"දැන් සැසි ක්‍රියාකාරකම් මැකීමට යළි සකසන්න, නැතහොත් ඔබට පිටවීමේදී ක්‍රියාකාරකම් සුරැකීමට හෝ මැකීමට හැකිය"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"ඡායාරූපයක් ගන්න"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"රූපයක් තෝරන්න"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"ඡායාරූපය තෝරන්න"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"කාලගුණය"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"වායු ගුණත්වය"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"විකාශ තතු"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"පැතිකඩ පින්තූරයක් තේරීම"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"පෙරනිමි පරිශීලක නිරූපකය"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"භෞතික යතුරු පුවරුව"</string>
diff --git a/packages/SettingsLib/res/values-sk/arrays.xml b/packages/SettingsLib/res/values-sk/arrays.xml
index b285888..370b23f 100644
--- a/packages/SettingsLib/res/values-sk/arrays.xml
+++ b/packages/SettingsLib/res/values-sk/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Použiť voľbu systému (predvolené)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"Zvuk: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Zvuk: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Použiť voľbu systému (predvolené)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"Zvuk: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Zvuk: <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Použiť voľbu systému (predvolené)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml
index 51588e3..226381c 100644
--- a/packages/SettingsLib/res/values-sk/strings.xml
+++ b/packages/SettingsLib/res/values-sk/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Prenos súborov"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Vstupné zariadenie"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Prístup na internet"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Zdieľanie kontaktov"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Použiť na zdieľanie kontaktov"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Zdieľanie kontaktov a histórie hovorov"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Používané pri zdieľaní kontaktov a histórie hovorov"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Zdieľanie pripojenia na Internet"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Textové správy"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Prístup k SIM karte"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Rýchle nabíjanie"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Pomalé nabíjanie"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Nabíja sa bezdrôtovo"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Nabíjací dok"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Nenabíja sa"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Pripojené, nenabíja sa"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Nabité"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Resetovať"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Odstrániť"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Relácia hosťa sa resetuje…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Chcete resetovať reláciu hosťa?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Odstrániť"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Uložiť"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Ukončiť režim pre hostí"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Resetovať reláciu hosťa"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Ukončiť režim pre hostí"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Pri ukončení sa všetka aktivita odstráni"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Aktivitu môžete pri ukončení uložiť alebo odstrániť"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Resetovaním ihneď odstránite aktivitu relácie alebo ju uložte či odstráňte pri ukončení relácie"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Odfotiť"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Vybrať obrázok"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Vybrať fotku"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Počasie"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Kvalita vzduchu"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Informácie o prenose"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Výber profilovej fotky"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Predvolená ikona používateľa"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Fyzická klávesnica"</string>
diff --git a/packages/SettingsLib/res/values-sl/arrays.xml b/packages/SettingsLib/res/values-sl/arrays.xml
index 8db3e99..6e33e38 100644
--- a/packages/SettingsLib/res/values-sl/arrays.xml
+++ b/packages/SettingsLib/res/values-sl/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Uporabi sistemsko izbiro (privzeto)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"Zvok <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Zvok <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Uporabi sistemsko izbiro (privzeto)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"Zvok <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Zvok <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Uporabi sistemsko izbiro (privzeto)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml
index d1c3558..b16ff95 100644
--- a/packages/SettingsLib/res/values-sl/strings.xml
+++ b/packages/SettingsLib/res/values-sl/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Prenos datoteke"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Vnosna naprava"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Internetni dostop"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Deljenje stikov"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Uporabi za deljenje stikov"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Deljenje stikov in zgodovine klicev"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Uporabite za deljenje stikov in zgodovine klicev."</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Deljenje internetne povezave"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Sporočila SMS"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Dostop do kartice SIM"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Hitro polnjenje"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Počasno polnjenje"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Brezžično polnjenje"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Polnjenje na nosilcu"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Se ne polni"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Povezano, se ne polni"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Napolnjeno"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Ponastavi"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Odstrani"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Ponastavljanje gosta …"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Želite ponastaviti sejo gosta?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Izbriši"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Shrani"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Zapri način za goste"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Ponastavi sejo gosta"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Zapri sejo gosta"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Ko zaprete način za goste, bo vsa dejavnost izbrisana."</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Ob zaprtju načina lahko shranite ali izbrišete dejavnost."</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Ponastavite za izbris dejavnosti v seji zdaj, lahko pa jo shranite ali izbrišete, ko zaprete način za goste."</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Fotografiranje"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Izberi sliko"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Izbira fotografije"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Vreme"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Kakovost zraka"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"O zasedbi"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Izbira profilne slike"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Privzeta ikona uporabnika"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Fizična tipkovnica"</string>
diff --git a/packages/SettingsLib/res/values-sq/arrays.xml b/packages/SettingsLib/res/values-sq/arrays.xml
index a82f716..8a6d853 100644
--- a/packages/SettingsLib/res/values-sq/arrays.xml
+++ b/packages/SettingsLib/res/values-sq/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Përdor përzgjedhjen e sistemit (e parazgjedhur)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"Audioja e <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Audioja e <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Përdor përzgjedhjen e sistemit (e parazgjedhur)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"Audioja e <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Audioja e <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Përdor përzgjedhjen e sistemit (e parazgjedhur)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-sq/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml
index 57f059a..028d82d 100644
--- a/packages/SettingsLib/res/values-sq/strings.xml
+++ b/packages/SettingsLib/res/values-sq/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Transferimi i skedarëve"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Pajisja e hyrjes"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Qasje në internet"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Ndarja e kontakteve"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Përdore për ndarjen e kontakteve"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Ndarje: kontakte e historik telefonatash"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Përdor për ndarje kontaktesh e të historikut të telefonatave"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Ndarja e lidhjes së internetit"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Mesazhet me tekst"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Qasje në kartën SIM"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Karikim i shpejtë"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Po karikohet ngadalë"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Po karikohet pa tel"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Në stacion karikimi"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Nuk po karikohet"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Lidhur, jo në karikim"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Karikuar"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Rivendos"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Hiq"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Vizitori po rivendoset…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Të rivendoset sesioni për vizitorë?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Fshi"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Ruaj"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Dil nga modaliteti \"vizitor\""</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Rivendos sesionin për vizitorë"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Dil nga modaliteti \"vizitor\""</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Të gjitha aktivitetet do të fshihen kur të dalësh"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Mund ta ruash ose ta fshish aktivitetin tënd kur të dalësh"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Rivendose për të fshirë aktivitetin e sesionit tani ose mund ta ruash ose ta fshish aktivitetin kur të dalësh"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Bëj një fotografi"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Zgjidh një imazh"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Zgjidh një fotografi"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Moti"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Cilësia e ajrit"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Të dhënat e aktorëve"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Zgjidh një fotografi profili"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Ikona e parazgjedhur e përdoruesit"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Tastiera fizike"</string>
diff --git a/packages/SettingsLib/res/values-sr/arrays.xml b/packages/SettingsLib/res/values-sr/arrays.xml
index 4cd83606..7e198bf 100644
--- a/packages/SettingsLib/res/values-sr/arrays.xml
+++ b/packages/SettingsLib/res/values-sr/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Користи избор система (подразумевано)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> аудио"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> аудио"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Користи избор система (подразумевано)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> аудио"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> аудио"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Користи избор система (подразумевано)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml
index 4d8a11f..55252f2 100644
--- a/packages/SettingsLib/res/values-sr/strings.xml
+++ b/packages/SettingsLib/res/values-sr/strings.xml
@@ -117,8 +117,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="7064307749579335765">"Дељење контаката"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Користите за дељење контаката"</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">"SMS-ови"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Приступ SIM картици"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Брзо се пуни"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Споро се пуни"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Бежично пуњење"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Станица за пуњење"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Не пуни се"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Повезано, не пуни се"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Напуњено"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Ресетуј"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Уклони"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Сесија госта се ресетује…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Желите да ресетујете сесију госта?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Избриши"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Сачувај"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Изађи из режима госта"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Ресетуј сесију госта"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Изађи из режима госта"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Све активности ће бити избрисане при излазу"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Можете да сачувате или избришете активности при излазу"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Ресетујете за брисање активности сесије, или сачувајте или избришите активности при излазу"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Сликај"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Одабери слику"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Изаберите слику"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Време"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Квалитет ваздуха"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Подаци о пребацивању"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Одаберите слику профила"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Подразумевана икона корисника"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Физичка тастатура"</string>
diff --git a/packages/SettingsLib/res/values-sv/arrays.xml b/packages/SettingsLib/res/values-sv/arrays.xml
index 1432ec2..f99a85b 100644
--- a/packages/SettingsLib/res/values-sv/arrays.xml
+++ b/packages/SettingsLib/res/values-sv/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Använd systemval (standardinställning)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>-ljud"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>-ljud"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Använd systemval (standardinställning)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>-ljud"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>-ljud"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Använd systemval (standardinställning)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml
index ea859e49..7339868 100644
--- a/packages/SettingsLib/res/values-sv/strings.xml
+++ b/packages/SettingsLib/res/values-sv/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Filöverföring"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Indataenhet"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Internetåtkomst"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Kontaktdelning"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Använd för kontaktdelning"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Delning av kontakter och samtalshistorik"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Använd för delning av kontakter och samtalshistorik"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Delning av Internetanslutning"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Sms"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM-åtkomst"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Laddas snabbt"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Laddas långsamt"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Laddas trådlöst"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Dockningsstation"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Laddar inte"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Ansluten, laddas inte"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Laddat"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Återställ"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Ta bort"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Gästsessionen återställs …"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Vill du återställa gästsessionen?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Radera"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Spara"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Avsluta gästläget"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Återställ gästsession"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Avsluta gästsession"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"All aktivitet raderas när du avslutar"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Du kan spara eller radera aktivitet när du avslutar"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Återställ om du vill radera sessionsaktiviteten nu, eller spara eller radera aktivitet när du avslutar"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Ta ett foto"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Välj en bild"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Välj foto"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Väder"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Luftkvalitet"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Info om rollistan"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Välj en profilbild"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Ikon för standardanvändare"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Fysiskt tangentbord"</string>
diff --git a/packages/SettingsLib/res/values-sw/arrays.xml b/packages/SettingsLib/res/values-sw/arrays.xml
index cb74761..dab4279 100644
--- a/packages/SettingsLib/res/values-sw/arrays.xml
+++ b/packages/SettingsLib/res/values-sw/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"ramani ya 13"</item>
     <item msgid="8147982633566548515">"ramani ya 14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Tumia Uteuzi wa Mfumo (Chaguomsingi)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"Sauti ya <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Sauti ya <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Tumia Uteuzi wa Mfumo (Chaguomsingi)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"Sauti ya <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Sauti ya <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Tumia Uteuzi wa Mfumo (Chaguomsingi)"</item>
     <item msgid="8003118270854840095">"kHz 44.1"</item>
diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml
index 2a3a6fb..f8d3f9d 100644
--- a/packages/SettingsLib/res/values-sw/strings.xml
+++ b/packages/SettingsLib/res/values-sw/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Uhamishaji wa faili"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Kifaa cha kuingiza"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Ufikiaji wa intaneti"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Kushiriki anwani"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Tumia kwa kushiriki anwani"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Kushiriki anwani na rekodi ya simu zilizopigwa"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Tumia kushiriki anwani na rekodi ya simu zilizopigwa"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Kushiriki muunganisho wa tovuti"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"SMS"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Ufikiaji wa SIM"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Inachaji kwa kasi"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Inachaji pole pole"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Inachaji bila kutumia waya"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Kituo cha Kuchaji"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Haichaji"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Imeunganishwa, haichaji"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Imechajiwa"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Badilisha"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Ondoa"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Inabadilisha kipindi cha mgeni…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Ungependa kuweka upya kipindi cha mgeni?"</string>
+    <string name="guest_reset_and_restart_dialog_message" msgid="2764425635305200790">"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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Futa"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Hifadhi"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Funga matumizi ya wageni"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Weka upya kipindi cha mgeni"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Funga utumiaji wa mgeni"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Shughuli zote zitafutwa wakati wa kufunga"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Unaweza kuhifadhi au kufuta shughuli zako wakati wa kufunga"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Weka upya ili ufute shughuli za kipindi sasa au unaweza kuhifadhi au kufuta shughuli wakati wa kufunga"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Piga picha"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Chagua picha"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Chagua picha"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Hali ya Hewa"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Ubora wa Hewa"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Maelezo ya Wahusika"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Chagua picha ya wasifu"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Aikoni chaguomsingi ya mtumiaji"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Kibodi halisi"</string>
diff --git a/packages/SettingsLib/res/values-ta/arrays.xml b/packages/SettingsLib/res/values-ta/arrays.xml
index 1f5380f..a0f1fa6 100644
--- a/packages/SettingsLib/res/values-ta/arrays.xml
+++ b/packages/SettingsLib/res/values-ta/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"சாதனத் தேர்வைப் பயன்படுத்து (இயல்பு)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ஆடியோ"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ஆடியோ"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"சாதனத் தேர்வைப் பயன்படுத்து (இயல்பு)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ஆடியோ"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ஆடியோ"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"சாதனத் தேர்வைப் பயன்படுத்து (இயல்பு)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml
index 6d4c579..f03ef24 100644
--- a/packages/SettingsLib/res/values-ta/strings.xml
+++ b/packages/SettingsLib/res/values-ta/strings.xml
@@ -117,8 +117,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="7064307749579335765">"தொடர்பைப் பகிர்தல்"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"தொடர்புப் பகிர்தலுக்குப் பயன்படுத்து"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"தொடர்புகள் &amp; அழைப்புப் பதிவைப் பகிர்தல்"</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">"சிம் அணுகல்"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"வேகமாக சார்ஜாகிறது"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"மெதுவாக சார்ஜாகிறது"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"வயரின்றி சார்ஜாகிறது"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"சார்ஜிங் டாக்"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"சார்ஜ் செய்யப்படவில்லை"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"இணைக்கப்பட்டுள்ளது, சார்ஜாகவில்லை"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"சார்ஜாகிவிட்டது"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"மீட்டமை"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"அகற்று"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"கெஸ்ட்டை மீட்டமைக்கிறது…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"கெஸ்ட் அமர்வை ரீசெட் செய்யவா?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"நீக்கு"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"சேமி"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"கெஸ்ட் பயன்முறையிலிருந்து வெளியேறு"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"கெஸ்ட் அமர்வை ரீசெட் செய்"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"கெஸ்ட் பயன்முறையிலிருந்து வெளியேறு"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"வெளியேறியவுடன் அனைத்துச் செயல்பாடுகளும் நீக்கப்படும்"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"வெளியேறும்போது செயல்பாடுகளைச் சேமிக்கலாம் அல்லது நீக்கலாம்"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"அமர்வின் செயல்பாடுகளை இப்போதே நீக்க ரீசெட் செய்யவும் அல்லது வெளியேறும்போது செயல்பாடுகளைச் சேமிக்கலாம் அல்லது நீக்கலாம்"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"படமெடுங்கள்"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"படத்தைத் தேர்வுசெய்யுங்கள்"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"படத்தைத் தேர்ந்தெடுங்கள்"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"வானிலை"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"காற்றின் தரம்"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"அலைபரப்புத் தகவல்"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"சுயவிவரப் படத்தைத் தேர்வுசெய்யுங்கள்"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"இயல்புநிலைப் பயனர் ஐகான்"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"கீபோர்டு"</string>
diff --git a/packages/SettingsLib/res/values-te/arrays.xml b/packages/SettingsLib/res/values-te/arrays.xml
index 513fb6e..18a2758 100644
--- a/packages/SettingsLib/res/values-te/arrays.xml
+++ b/packages/SettingsLib/res/values-te/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"సిస్టమ్ ఎంపికను ఉపయోగించండి (ఆటోమేటిక్)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ఆడియో"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ఆడియో"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"సిస్టమ్ ఎంపికను ఉపయోగించండి (ఆటోమేటిక్)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ఆడియో"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ఆడియో"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"సిస్టమ్ ఎంపికను ఉపయోగించండి (ఆటోమేటిక్)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml
index dc8a7fe..9e61db1 100644
--- a/packages/SettingsLib/res/values-te/strings.xml
+++ b/packages/SettingsLib/res/values-te/strings.xml
@@ -117,8 +117,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="7064307749579335765">"కాంటాక్ట్ షేరింగ్"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"కాంటాక్ట్ షేరింగ్ కోసం ఉపయోగించండి"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Contacts and call history sharing"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Use for contacts and call history sharing"</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>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"వేగవంతమైన ఛార్జింగ్"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"నెమ్మదిగా ఛార్జింగ్"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"వైర్‌లెస్ ఛార్జింగ్"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"ఛార్జింగ్ డాక్"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"ఛార్జ్ కావడం లేదు"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"కనెక్ట్ చేయబడింది, ఛార్జ్ చేయబడలేదు"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"ఛార్జ్ చేయబడింది"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"రీసెట్ చేయండి"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"తీసివేయండి"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"గెస్ట్ సెషన్‌ను రీసెట్ చేస్తోంది…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"గెస్ట్ సెషన్‌ను రీసెట్ చేయాలా?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"తొలగించండి"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"సేవ్ చేయండి"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"గెస్ట్ మోడ్ నుండి వైదొలగండి"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"గెస్ట్ సెషన్‌ను రీసెట్ చేయండి"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"గెస్ట్ మోడ్ నుండి నిష్క్రమించండి"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"నిష్క్రమణ సమయంలో మొత్తం యాక్టివిటీ తొలగించబడుతుంది"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"మీ నిష్క్రమణలో, యాక్టివిటీని సేవ్ చేయవచ్చు లేదా తొలగించవచ్చు"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"సెషన్ యాక్టివిటీని తొలగించడానికి ఇప్పుడే రీసెట్ చేయండి లేదా మీరు నిష్క్రమించేటప్పుడు యాక్టివిటీని సేవ్ చేయవచ్చు లేదా తొలగించవచ్చు"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"ఒక ఫోటో తీయండి"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"ఇమేజ్‌ను ఎంచుకోండి"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"ఫోటోను ఎంచుకోండి"</string>
@@ -644,6 +660,7 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"వాతావరణం"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"గాలి క్వాలిటీ"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"కాస్ట్ సమాచారం"</string>
+    <string name="dream_complication_title_home_controls" msgid="9153381632476738811">"హోమ్ కంట్రోల్స్"</string>
     <string name="avatar_picker_title" msgid="8492884172713170652">"ప్రొఫైల్ ఫోటోను ఎంచుకోండి"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"ఆటోమేటిక్ సెట్టింగ్ యూజర్ చిహ్నం"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"భౌతిక కీబోర్డ్"</string>
diff --git a/packages/SettingsLib/res/values-th/arrays.xml b/packages/SettingsLib/res/values-th/arrays.xml
index 732124a..04a5f4d 100644
--- a/packages/SettingsLib/res/values-th/arrays.xml
+++ b/packages/SettingsLib/res/values-th/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"ใช้การเลือกของระบบ (ค่าเริ่มต้น)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"เสียง <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"เสียง <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"ใช้การเลือกของระบบ (ค่าเริ่มต้น)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"เสียง <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"เสียง <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"ใช้การเลือกของระบบ (ค่าเริ่มต้น)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml
index 772a979..b68682b 100644
--- a/packages/SettingsLib/res/values-th/strings.xml
+++ b/packages/SettingsLib/res/values-th/strings.xml
@@ -117,8 +117,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="7064307749579335765">"การแชร์รายชื่อผู้ติดต่อ"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"ใช้สำหรับการแชร์รายชื่อผู้ติดต่อ"</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">"การเข้าถึงซิม"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"กำลังชาร์จอย่างเร็ว"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"กำลังชาร์จอย่างช้าๆ"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"กำลังชาร์จแบบไร้สาย"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"กำลังชาร์จบนแท่น"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"ไม่ได้ชาร์จ"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"เชื่อมต่ออยู่ ไม่ได้ชาร์จ"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"ชาร์จแล้ว"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"รีเซ็ต"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"นำออก"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"กำลังรีเซ็ตผู้เข้าร่วม…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"รีเซ็ตเซสชันผู้ใช้ชั่วคราวไหม"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"ลบ"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"บันทึก"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"ออกจากโหมดผู้ใช้ชั่วคราว"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"รีเซ็ตเซสชันผู้ใช้ชั่วคราว"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"ออกจากโหมดผู้ใช้ชั่วคราว"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"ระบบจะลบกิจกรรมทั้งหมดเมื่อออก"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"คุณสามารถบันทึกหรือลบกิจกรรมเมื่อออก"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"รีเซ็ตเพื่อลบกิจกรรมของเซสชันตอนนี้เลย หรือจะ​บันทึกหรือลบกิจกรรมเมื่อออกก็ได้"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"ถ่ายรูป"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"เลือกรูปภาพ"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"เลือกรูปภาพ"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"สภาพอากาศ"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"คุณภาพอากาศ"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"ข้อมูลแคสต์"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"เลือกรูปโปรไฟล์"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"ไอคอนผู้ใช้เริ่มต้น"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"แป้นพิมพ์จริง"</string>
diff --git a/packages/SettingsLib/res/values-tl/arrays.xml b/packages/SettingsLib/res/values-tl/arrays.xml
index bdd8706..59cb1f3 100644
--- a/packages/SettingsLib/res/values-tl/arrays.xml
+++ b/packages/SettingsLib/res/values-tl/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Gamitin ang Pagpili ng System (Default)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> na audio"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> na audio"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Gamitin ang Pagpili ng System (Default)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> na audio"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> na audio"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Gamitin ang Pagpili ng System (Default)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml
index d9d4e3a..9663c75 100644
--- a/packages/SettingsLib/res/values-tl/strings.xml
+++ b/packages/SettingsLib/res/values-tl/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Paglilipat ng file"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Device sa pag-input"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Access sa internet"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Pagbabahagi ng contact"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Gamitin para sa pagbabahagi ng contact"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Contacts at pagbabahagi ng call history"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Gamitin para sa contacts at pagbabahagi ng call history"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Pagbabahagi ng koneksyon sa internet"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Mga Text Message"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Access sa SIM"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Mabilis na charge"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Mabagal na charge"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Wireless na nagcha-charge"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Charging Dock"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Hindi nagcha-charge"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Nakakonekta, hindi nagcha-charge"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Nasingil"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"I-reset"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Alisin"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Nire-reset ang bisita…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"I-reset ang session ng bisita?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"I-delete"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"I-save"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Umalis sa guest mode"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"I-reset ang session ng bisita"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Umalis sa pagiging bisita"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Made-delete ang lahat ng aktibidad kapag umalis"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Puwede mong i-save o i-delete ang aktibidad pagkaalis"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Mag-reset para mag-delete ng aktibidad ng session ngayon, o puwede kang mag-save o mag-delete ng aktibidad pagkaalis"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Kumuha ng larawan"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Pumili ng larawan"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Pumili ng larawan"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Lagay ng Panahon"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Kalidad ng Hangin"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Impormasyon ng Cast"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Pumili ng larawan sa profile"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Icon ng default na user"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Pisikal na keyboard"</string>
diff --git a/packages/SettingsLib/res/values-tr/arrays.xml b/packages/SettingsLib/res/values-tr/arrays.xml
index 0d0c69a..5ed35fa 100644
--- a/packages/SettingsLib/res/values-tr/arrays.xml
+++ b/packages/SettingsLib/res/values-tr/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Sistem Seçimini Kullan (Varsayılan)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ses"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ses"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Sistem Seçimini Kullan (Varsayılan)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> ses"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> ses"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Sistem Seçimini Kullan (Varsayılan)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml
index c47e8ee..982c663 100644
--- a/packages/SettingsLib/res/values-tr/strings.xml
+++ b/packages/SettingsLib/res/values-tr/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Dosya aktarımı"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Giriş cihazı"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"İnternet erişimi"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Kişi paylaşma"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Kişi paylaşmak için kullan"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Kişi ve çağrı geçmişi paylaşımı"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Kişi ve çağrı geçmişi paylaşımı için kullanın"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"İnternet bağlantısı paylaşımı"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Kısa Mesajlar"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM Erişimi"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Hızlı şarj oluyor"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Yavaş şarj oluyor"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Kablosuz şarj oluyor"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Şarj Yuvası"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Şarj olmuyor"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Bağlandı, şarj olmuyor"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Şarj oldu"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Sıfırla"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Kaldır"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Misafir oturumu sıfırlanıyor…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Misafir oturumu sıfırlansın mı?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Sil"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Kaydet"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Misafir modundan çık"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Misafir oturumunu sıfırla"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Misafir modundan çık"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Çıkış yapıldığında tüm etkinlikler silinir"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Etkinliklerinizi çıkarken kaydedebilir veya silebilirsiniz"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Oturum etkinliklerini silmek için sıfırlayabilir ya da çıkarken kaydedebilir veya silebilirsiniz"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Fotoğraf çek"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Resim seç"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Fotoğraf seç"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Hava durumu"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Hava Kalitesi"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Yayın Bilgisi"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Profil fotoğrafı seçin"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Varsayılan kullanıcı simgesi"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Fiziksel klavye"</string>
diff --git a/packages/SettingsLib/res/values-uk/arrays.xml b/packages/SettingsLib/res/values-uk/arrays.xml
index 49a4635..0410bd6 100644
--- a/packages/SettingsLib/res/values-uk/arrays.xml
+++ b/packages/SettingsLib/res/values-uk/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Використовувати вибір системи (за умовчанням)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"Аудіо <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Аудіо <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Використовувати вибір системи (за умовчанням)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"Аудіо <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Аудіо <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Використовувати вибір системи (за умовчанням)"</item>
     <item msgid="8003118270854840095">"44,1 кГц"</item>
diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml
index 00c2153..4e1a8e0 100644
--- a/packages/SettingsLib/res/values-uk/strings.xml
+++ b/packages/SettingsLib/res/values-uk/strings.xml
@@ -117,8 +117,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="7064307749579335765">"Надсилання контактів"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Використовувати для надсилання контактів"</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>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Швидке заряджання"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Повільне заряджання"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Бездротове заряджання"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Зарядка: док-станція"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Не заряджається"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Підключено, не заряджається"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Заряджено"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Скинути"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Вилучити"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Скидання сеансу в режимі \"Гість\"…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Скинути сеанс у режимі гостя?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Видалити"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Зберегти"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Вийти з режиму гостя"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Скинути сеанс у режимі гостя"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Вийти з режиму гостя"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Під час виходу буде видалено історію всіх дій"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Під час виходу можна зберегти або видалити ваші дії"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Можна скинути історію сеансу просто зараз або видалити чи зберегти її під час виходу."</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Зробити фотографію"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Вибрати зображення"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Вибрати фотографію"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Погода"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Якість повітря"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Акторський склад"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Виберіть зображення профілю"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Значок користувача за умовчанням"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Фізична клавіатура"</string>
diff --git a/packages/SettingsLib/res/values-ur/arrays.xml b/packages/SettingsLib/res/values-ur/arrays.xml
index 5dc2123..d097458 100644
--- a/packages/SettingsLib/res/values-ur/arrays.xml
+++ b/packages/SettingsLib/res/values-ur/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"سسٹم انتخاب کا استعمال کریں (ڈیفالٹ)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> آڈیو"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> آڈیو"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"سسٹم انتخاب کا استعمال کریں (ڈیفالٹ)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> آڈیو"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> آڈیو"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"سسٹم انتخاب کا استعمال کریں (ڈیفالٹ)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml
index 43dee94..41c53aa 100644
--- a/packages/SettingsLib/res/values-ur/strings.xml
+++ b/packages/SettingsLib/res/values-ur/strings.xml
@@ -117,8 +117,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="7064307749579335765">"رابطہ کا اشتراک"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"رابطہ کے اشتراک کیلئے استعمال کریں"</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>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"تیزی سے چارج ہو رہا ہے"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"آہستہ چارج ہو رہی ہے"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"وائرلیس طریقے سے چارج ہو رہی ہے"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"چارجنگ ڈاک"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"چارج نہیں ہو رہا ہے"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"منسلک ہے، چارج نہیں ہو رہی ہے"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"چارج ہو گئی"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"ری سیٹ کریں"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"ہٹائیں"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"مہمان کو ری سیٹ کرنا…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"مہمان سیشن کو ری سیٹ کریں؟"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"حذف کریں"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"محفوظ کریں"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"مہمان وضع سے باہر نکلیں"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"مہمان سیشن کو ری سیٹ کریں"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"مہمان وضع سے باہر نکلیں"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"باہر نکلنے پر تمام سرگرمیاں حذف کر دی جائیں گی"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"باہر نکلنے پر آپ اپنی سرگرمی کو محفوظ یا حذف کر سکتے ہیں"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"سیشن کی سرگرمی کو ابھی حذف کرنے کے لیے ری سیٹ کریں، یا باہر نکلنے پر آپ اپنی سرگرمی کو محفوظ یا حذف کر سکتے ہیں"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"ایک تصویر لیں"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"ایک تصویر منتخب کریں"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"تصویر منتخب کریں"</string>
@@ -644,6 +660,7 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"موسم"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"ہوا کا معیار"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"کاسٹ کرنے کی معلومات"</string>
+    <string name="dream_complication_title_home_controls" msgid="9153381632476738811">"ہوم کنٹرولز"</string>
     <string name="avatar_picker_title" msgid="8492884172713170652">"پروفائل کی تصویر منتخب کریں"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"ڈیفالٹ صارف کا آئیکن"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"فزیکل کی بورڈ"</string>
diff --git a/packages/SettingsLib/res/values-uz/arrays.xml b/packages/SettingsLib/res/values-uz/arrays.xml
index 589c592..7d09027 100644
--- a/packages/SettingsLib/res/values-uz/arrays.xml
+++ b/packages/SettingsLib/res/values-uz/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Tizim tanlovi (birlamchi)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audiokodeki"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audiokodeki"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Tizim tanlovi (birlamchi)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audiokodeki"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audiokodeki"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Tizim tanlovi (birlamchi)"</item>
     <item msgid="8003118270854840095">"44.1 kGs"</item>
diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml
index 22251c3..5be68d5 100644
--- a/packages/SettingsLib/res/values-uz/strings.xml
+++ b/packages/SettingsLib/res/values-uz/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Fayl uzatish"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Kiritish qurilmasi"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Internetga ulanish"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Kontaktlarni ulashish"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Kontaktlarni ulashish uchun ishlatilsin"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Kontakt va chaqiruvlar tarixiga kirish"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Kontaktlar va chaqiruvlar tarixiga kirish uchun foydalaning"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Internet aloqasi ulashmasi"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"SMS xabarlari"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM kartaga kirish"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Tezkor quvvat olmoqda"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Sekin quvvat olmoqda"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Simsiz quvvat olmoqda"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Quvvatlash doki"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Quvvat olmayapti"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Ulangan, quvvat olmayapti"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Quvvat oldi"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Tiklash"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Olib tashlash"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Mehmon seansi tiklanmoqda…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Mehmon seansi tiklansinmi?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Oʻchirish"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Saqlash"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Mehmon rejimidan chiqish"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Mehmon seansini tiklash"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Mehmon rejimidan chiqish"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Chiqishda faolliklar tarixi tozalab tashlanadi"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Chiqish vaqtida faoliyatni saqlash yoki tozalash mumkin"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Faoliyat hozir tozalanib tiklanishi yoki chiqish vaqtida saqlanishi yoki tozalanishi mumkin"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Suratga olish"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Rasm tanlash"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Surat tanlash"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Ob-havo"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Havo sifati"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Translatsiya axboroti"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Profil rasmini tanlash"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Foydalanuvchining standart belgisi"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Tashqi klaviatura"</string>
diff --git a/packages/SettingsLib/res/values-vi/arrays.xml b/packages/SettingsLib/res/values-vi/arrays.xml
index 4cf8ff4..31867e2 100644
--- a/packages/SettingsLib/res/values-vi/arrays.xml
+++ b/packages/SettingsLib/res/values-vi/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Sử dụng lựa chọn của hệ thống (Mặc định)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"Âm thanh <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="2908219194098827570">"Âm thanh <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Sử dụng lựa chọn của hệ thống (Mặc định)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"Âm thanh <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
-    <item msgid="3517061573669307965">"Âm thanh <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g>"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Sử dụng lựa chọn của hệ thống (Mặc định)"</item>
     <item msgid="8003118270854840095">"44,1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml
index cb9a18f..fa8be1e 100644
--- a/packages/SettingsLib/res/values-vi/strings.xml
+++ b/packages/SettingsLib/res/values-vi/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Chuyển tệp"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Thiết bị đầu vào"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Truy cập Internet"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Chia sẻ người liên hệ"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Sử dụng để chia sẻ người liên hệ"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Chia sẻ danh bạ và nhật ký cuộc gọi"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Dùng để chia sẻ danh bạ và nhật ký cuộc gọi"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Chia sẻ kết nối internet"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Tin nhắn văn bản"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Truy cập SIM"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Đang sạc nhanh"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Đang sạc chậm"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Đang sạc không dây"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Đế sạc"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Hiện không sạc"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Đã kết nối nhưng chưa sạc"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Đã sạc"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Đặt lại"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Xoá"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Đang đặt lại phiên khách…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Đặt lại phiên khách?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Xoá"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Lưu"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Thoát khỏi chế độ khách"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Đặt lại phiên khách"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Thoát khỏi chế độ khách"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Mọi hoạt động sẽ bị xoá khi thoát"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Bạn có thể lưu hoặc xoá hoạt động của mình khi thoát"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Đặt lại để xoá hoạt động trong phiên ngay bây giờ, hoặc bạn có thể lưu hoặc xoá hoạt động khi thoát"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Chụp ảnh"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Chọn một hình ảnh"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Chọn ảnh"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Thời tiết"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Chất lượng không khí"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Thông tin về dàn nghệ sĩ"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Chọn một ảnh hồ sơ"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Biểu tượng người dùng mặc định"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Bàn phím thực"</string>
diff --git a/packages/SettingsLib/res/values-zh-rCN/arrays.xml b/packages/SettingsLib/res/values-zh-rCN/arrays.xml
index af87f6f..973d7d0 100644
--- a/packages/SettingsLib/res/values-zh-rCN/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"使用系统选择(默认)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> 音频"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> 音频"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"使用系统选择(默认)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> 音频"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> 音频"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"使用系统选择(默认)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml
index a7aecec..3291dad 100644
--- a/packages/SettingsLib/res/values-zh-rCN/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml
@@ -117,8 +117,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="7064307749579335765">"共享联系人"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"用于共享联系人"</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>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"正在快速充电"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"正在慢速充电"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"正在无线充电"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"充电基座"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"未在充电"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"已连接,未充电"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"已充满电"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"重置"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"移除"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"正在重置访客会话…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"要重置访客会话吗?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"删除"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"保存"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"退出访客模式"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"重置访客会话"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"退出访客模式"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"退出时所有活动记录都将被删除"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"您可以在退出时保存或删除您的活动记录"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"请立即重置以删除会话活动记录;或者,您也可以在退出时保存或删除活动记录"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"拍摄照片"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"选择图片"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"选择照片"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"天气"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"空气质量"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"投放信息"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"选择个人资料照片"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"默认用户图标"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"实体键盘"</string>
diff --git a/packages/SettingsLib/res/values-zh-rHK/arrays.xml b/packages/SettingsLib/res/values-zh-rHK/arrays.xml
index 2099410..87f38252 100644
--- a/packages/SettingsLib/res/values-zh-rHK/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"使用系統選擇 (預設)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> 音訊"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> 音訊"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"使用系統選擇 (預設)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> 音訊"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> 音訊"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"使用系統選擇 (預設)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml
index cfa3c06..5b1d845f 100644
--- a/packages/SettingsLib/res/values-zh-rHK/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml
@@ -117,8 +117,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="7064307749579335765">"共用聯絡人"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"用於共用聯絡人"</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>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"快速充電中"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"慢速充電中"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"無線充電中"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"充電插座"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"非充電中"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"已連接,非充電中"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"已充滿電"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"重設"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"移除"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"正在重設訪客…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"要重設訪客工作階段嗎?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"刪除"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"儲存"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"結束訪客模式"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"重設訪客工作階段"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"結束訪客模式"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"結束時將會刪除所有活動"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"您可以在結束時儲存或刪除活動"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"重設可立即刪除工作階段活動,或者您可以在結束時儲存或刪除活動"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"拍照"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"選擇圖片"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"揀相"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"天氣"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"空氣質素"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"投放資料"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"選擇個人檔案相片"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"預設使用者圖示"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"實體鍵盤"</string>
diff --git a/packages/SettingsLib/res/values-zh-rTW/arrays.xml b/packages/SettingsLib/res/values-zh-rTW/arrays.xml
index 24991e3..529287f 100644
--- a/packages/SettingsLib/res/values-zh-rTW/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"map13"</item>
     <item msgid="8147982633566548515">"map14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"系統自動選擇 (預設)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> 音訊"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> 音訊"</item>
-    <item msgid="3825367753087348007">"LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"系統自動選擇 (預設)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> 音訊"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> 音訊"</item>
-    <item msgid="2553206901068987657">"LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"系統自動選擇 (預設)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml
index e439ef5..6b3b45e 100644
--- a/packages/SettingsLib/res/values-zh-rTW/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml
@@ -117,8 +117,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="7064307749579335765">"聯絡人共用"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"用於聯絡人共用"</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>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"快速充電中"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"慢速充電中"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"正在進行無線充電"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"充電座架"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"非充電中"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"已連接,尚未充電"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"充電完成"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"重設"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"移除"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"正在重設訪客…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"要重設訪客工作階段嗎?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"刪除"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"儲存"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"結束訪客模式"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"重設訪客工作階段"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"結束訪客模式"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"結束時將刪除所有活動"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"你可以在結束時儲存或刪除活動"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"重設即可立即刪除工作階段活動,你也可以在結束時儲存或刪除活動"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"拍照"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"選擇圖片"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"選取相片"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"天氣"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"空氣品質"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"演出者資訊"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"選擇個人資料相片"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"預設使用者圖示"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"實體鍵盤"</string>
diff --git a/packages/SettingsLib/res/values-zu/arrays.xml b/packages/SettingsLib/res/values-zu/arrays.xml
index 8732b26..59ead86 100644
--- a/packages/SettingsLib/res/values-zu/arrays.xml
+++ b/packages/SettingsLib/res/values-zu/arrays.xml
@@ -85,22 +85,10 @@
     <item msgid="7073042887003102964">"Imephu13"</item>
     <item msgid="8147982633566548515">"Imephu14"</item>
   </string-array>
-  <string-array name="bluetooth_a2dp_codec_titles">
-    <item msgid="2494959071796102843">"Sebenzisa ukukhetha kwesistimu (Okuzenzakalelayo)"</item>
-    <item msgid="4055460186095649420">"SBC"</item>
-    <item msgid="720249083677397051">"I-AAC"</item>
-    <item msgid="1049450003868150455">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> umsindo"</item>
-    <item msgid="2908219194098827570">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> umsindo"</item>
-    <item msgid="3825367753087348007">"I-LDAC"</item>
-  </string-array>
-  <string-array name="bluetooth_a2dp_codec_summaries">
-    <item msgid="8868109554557331312">"Sebenzisa ukukhetha kwesistimu (Okuzenzakalelayo)"</item>
-    <item msgid="9024885861221697796">"SBC"</item>
-    <item msgid="4688890470703790013">"I-AAC"</item>
-    <item msgid="8627333814413492563">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> umsindo"</item>
-    <item msgid="3517061573669307965">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> umsindo"</item>
-    <item msgid="2553206901068987657">"I-LDAC"</item>
-  </string-array>
+    <!-- no translation found for bluetooth_a2dp_codec_titles:6 (328951785723550863) -->
+    <!-- no translation found for bluetooth_a2dp_codec_titles:7 (506175145534048710) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:6 (3940992993241040716) -->
+    <!-- no translation found for bluetooth_a2dp_codec_summaries:7 (7940970833006181407) -->
   <string-array name="bluetooth_a2dp_codec_sample_rate_titles">
     <item msgid="926809261293414607">"Sebenzisa ukukhetha kwesistimu (Okuzenzakalelayo)"</item>
     <item msgid="8003118270854840095">"44.1 kHz"</item>
diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml
index ebc9cb7..d5a52c3 100644
--- a/packages/SettingsLib/res/values-zu/strings.xml
+++ b/packages/SettingsLib/res/values-zu/strings.xml
@@ -117,8 +117,8 @@
     <string name="bluetooth_profile_opp" msgid="6692618568149493430">"Dlulisa ifayela"</string>
     <string name="bluetooth_profile_hid" msgid="2969922922664315866">"Idivaysi yokufakwayo"</string>
     <string name="bluetooth_profile_pan" msgid="1006235139308318188">"Ukufinyelela i-Inthanethi"</string>
-    <string name="bluetooth_profile_pbap" msgid="7064307749579335765">"Ukwabelana kokuxhumana"</string>
-    <string name="bluetooth_profile_pbap_summary" msgid="2955819694801952056">"Sebenzisela ukwabelana kokuxhumana"</string>
+    <string name="bluetooth_profile_pbap" msgid="4262303387989406171">"Ukwabelana ngoxhumana nabo nomlando wekholi"</string>
+    <string name="bluetooth_profile_pbap_summary" msgid="6466456791354759132">"Ukusetshenziswa kokwabelana ngoxhumana nabo nomlando wekholi"</string>
     <string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Ukwabelana ngoxhumano lwe-Inthanethi"</string>
     <string name="bluetooth_profile_map" msgid="8907204701162107271">"Imilayezo yombhalo"</string>
     <string name="bluetooth_profile_sap" msgid="8304170950447934386">"Ukufinyelela kwe-SIM"</string>
@@ -482,6 +482,7 @@
     <string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Ishaja ngokushesha"</string>
     <string name="battery_info_status_charging_slow" msgid="3190803837168962319">"Ishaja kancane"</string>
     <string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Iyashaja ngaphandle kwentambo"</string>
+    <string name="battery_info_status_charging_dock" msgid="3554147903321236585">"Idokhu yokushaja"</string>
     <string name="battery_info_status_discharging" msgid="6962689305413556485">"Ayishaji"</string>
     <string name="battery_info_status_not_charging" msgid="3371084153747234837">"Ixhunyiwe, ayishaji"</string>
     <string name="battery_info_status_full" msgid="1339002294876531312">"Kushajiwe"</string>
@@ -598,6 +599,21 @@
     <string name="guest_reset_guest_confirm_button" msgid="2989915693215617237">"Setha kabusha"</string>
     <string name="guest_remove_guest_confirm_button" msgid="7858123434954143879">"Susa"</string>
     <string name="guest_resetting" msgid="7822120170191509566">"Ukusetha kabusha isimenywa…"</string>
+    <string name="guest_reset_and_restart_dialog_title" msgid="3396657008451616041">"Sesha kabusha isikhathi sesihambeli?"</string>
+    <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="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>
+    <string name="guest_exit_clear_data_button" msgid="3425812652180679014">"Sula"</string>
+    <string name="guest_exit_save_data_button" msgid="3690974510644963547">"Londoloza"</string>
+    <string name="guest_exit_button" msgid="5774985819191803960">"Phuma kumodi yesivakashi"</string>
+    <string name="guest_reset_button" msgid="2515069346223503479">"Setha kabusha isikhathi sesihambeli"</string>
+    <string name="guest_exit_quick_settings_button" msgid="1912362095913765471">"Phuma kusivakashi"</string>
+    <string name="guest_notification_ephemeral" msgid="7263252466950923871">"Wonke umsebenzi uzosulwa lapho uphuma"</string>
+    <string name="guest_notification_non_ephemeral" msgid="6843799963012259330">"Ungalondoloza noma usule umsebenzi wakho lapho uphuma"</string>
+    <string name="guest_notification_non_ephemeral_non_first_login" msgid="8009307983766934876">"Setha kabusha ukuze usule umsebenzi wesikhathi manje, noma ungalondoloza noma usule umsebenzi lapho uphuma"</string>
     <string name="user_image_take_photo" msgid="467512954561638530">"Thatha isithombe"</string>
     <string name="user_image_choose_photo" msgid="1363820919146782908">"Khetha isithombe"</string>
     <string name="user_image_photo_selector" msgid="433658323306627093">"Khetha isithombe"</string>
@@ -644,6 +660,8 @@
     <string name="dream_complication_title_weather" msgid="598609151677172783">"Isimo sezulu"</string>
     <string name="dream_complication_title_aqi" msgid="4587552608957834110">"Ikhwalithi Yomoya"</string>
     <string name="dream_complication_title_cast_info" msgid="4038776652841885084">"Ulwazi Lokusakaza"</string>
+    <!-- no translation found for dream_complication_title_home_controls (9153381632476738811) -->
+    <skip />
     <string name="avatar_picker_title" msgid="8492884172713170652">"Khetha isithombe sephrofayela"</string>
     <string name="default_user_icon_description" msgid="6554047177298972638">"Isithonjana somsebenzisi sokuzenzakalelayo"</string>
     <string name="physical_keyboard_title" msgid="4811935435315835220">"Ikhibhodi ephathekayo"</string>
diff --git a/packages/SettingsLib/res/values/arrays.xml b/packages/SettingsLib/res/values/arrays.xml
index 29a1831..663e8e4 100644
--- a/packages/SettingsLib/res/values/arrays.xml
+++ b/packages/SettingsLib/res/values/arrays.xml
@@ -154,6 +154,8 @@
         <item><xliff:g id="qualcomm">Qualcomm®</xliff:g> <xliff:g id="aptx">aptX™</xliff:g> audio</item>
         <item><xliff:g id="qualcomm">Qualcomm®</xliff:g> <xliff:g id="aptx_hd">aptX™ HD</xliff:g> audio</item>
         <item>LDAC</item>
+        <item>LC3</item>
+        <item>Opus</item>
     </string-array>
 
     <!-- Values for Bluetooth Audio Codec selection preference. -->
@@ -164,6 +166,8 @@
         <item>2</item>
         <item>3</item>
         <item>4</item>
+        <item>5</item>
+        <item>6</item>
     </string-array>
 
     <!-- Summaries for Bluetooth Audio Codec selection preference. [CHAR LIMIT=50]-->
@@ -174,6 +178,8 @@
         <item><xliff:g id="qualcomm">Qualcomm®</xliff:g> <xliff:g id="aptx">aptX™</xliff:g> audio</item>
         <item><xliff:g id="qualcomm">Qualcomm®</xliff:g> <xliff:g id="aptx_hd">aptX™ HD</xliff:g> audio</item>
         <item>LDAC</item>
+        <item>LC3</item>
+        <item>Opus</item>
     </string-array>
 
     <!-- Titles for Bluetooth Audio Codec Sample Rate selection preference. [CHAR LIMIT=50] -->
diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml
index 847f1dc..5795fd4 100644
--- a/packages/SettingsLib/res/values/strings.xml
+++ b/packages/SettingsLib/res/values/strings.xml
@@ -246,9 +246,9 @@
     <!-- Bluetooth settings. The user-visible string that is used whenever referring to the PAN profile (accessing Internet through remote device). [CHAR LIMIT=40] -->
     <string name="bluetooth_profile_pan">Internet access</string>
     <!-- Bluetooth settings. The user-visible string that is used whenever referring to the PBAP profile. [CHAR LIMIT=40] -->
-    <string name="bluetooth_profile_pbap">Contact sharing</string>
+    <string name="bluetooth_profile_pbap">Contacts and call history sharing</string>
     <!-- Bluetooth settings. The user-visible summary string that is used whenever referring to the PBAP profile (sharing contacts). [CHAR LIMIT=60] -->
-    <string name="bluetooth_profile_pbap_summary">Use for contact sharing</string>
+    <string name="bluetooth_profile_pbap_summary">Use for contacts and call history sharing</string>
     <!-- Bluetooth settings. The user-visible string that is used whenever referring to the PAN profile (sharing this device's Internet connection). [CHAR LIMIT=40] -->
     <string name="bluetooth_profile_pan_nap">Internet connection sharing</string>
     <!-- Bluetooth settings. The user-visible string that is used whenever referring to the map profile. -->
@@ -1134,6 +1134,8 @@
     <string name="battery_info_status_charging_slow">Charging slowly</string>
     <!-- [CHAR_LIMIT=20] Battery use screen.  Battery status shown in chart label when charging wirelessly.  -->
     <string name="battery_info_status_charging_wireless">Charging wirelessly</string>
+    <!-- [CHAR_LIMIT=20] Battery use screen.  Battery status shown in chart label when the device is dock charging.  -->
+    <string name="battery_info_status_charging_dock">Charging Dock</string>
     <!-- Battery Info screen. Value for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
     <string name="battery_info_status_discharging">Not charging</string>
     <!-- Battery Info screen. Value for a status item. A state which device is connected with any charger(e.g. USB, Adapter or Wireless) but not charging yet. Used for diagnostic info screens, precise translation isn't needed -->
@@ -1438,6 +1440,44 @@
     <string name="guest_remove_guest_confirm_button">Remove</string>
     <!-- Status message indicating the device is in the process of resetting the guest user. [CHAR_LIMIT=NONE] -->
     <string name="guest_resetting">Resetting guest\u2026</string>
+    <!-- Dialog title on action reset and restart guest [CHAR LIMIT=60] -->
+    <string name="guest_reset_and_restart_dialog_title">Reset guest session?</string>
+    <!-- Dialog message on action reset and restart guest [CHAR LIMIT=160] -->
+    <string name="guest_reset_and_restart_dialog_message">This will start a new guest
+        session and delete all apps and data from the current session</string>
+    <!-- Dialog title on action exit guest (ephemeral guest) [CHAR LIMIT=32] -->
+    <string name="guest_exit_dialog_title">Exit guest mode?</string>
+    <!-- Dialog message on action exit guest (ephemeral guest) [CHAR LIMIT=80] -->
+    <string name="guest_exit_dialog_message">This will delete
+        apps and data from the current guest session</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] -->
+    <string name="guest_exit_dialog_title_non_ephemeral">Save guest activity?</string>
+    <!-- Dialog message on action exit guest (non-ephemeral guest) [CHAR LIMIT=80] -->
+    <string name="guest_exit_dialog_message_non_ephemeral">You can save activity from
+        the current session or delete all apps and data</string>
+    <!-- Button on guest exit, clear data (non-ephemeral guest) [CHAR LIMIT=80] -->
+    <string name="guest_exit_clear_data_button">Delete</string>
+    <!-- Button on guest exit, save data (non-ephemeral guest) [CHAR LIMIT=80] -->
+    <string name="guest_exit_save_data_button">Save</string>
+    <!-- Label for button in confirmation dialog when exiting guest user [CHAR LIMIT=35] -->
+    <string name="guest_exit_button">Exit guest mode</string>
+    <!-- Label for button in confirmation dialog when resetting guest user [CHAR LIMIT=35] -->
+    <string name="guest_reset_button">Reset guest session</string>
+    <!-- Label for guest icon in quick settings user switcher [CHAR LIMIT=35] -->
+    <string name="guest_exit_quick_settings_button">Exit guest</string>
+    <!-- Message of the notification when guest mode is entered
+         and it's a ephemeral guest [CHAR LIMIT=60] -->
+    <string name="guest_notification_ephemeral">All activity will be deleted on exit</string>
+    <!-- Message of the notification when guest mode is entered
+         and it's not a ephemeral guest and it's a first time guest login [CHAR LIMIT=60] -->
+    <string name="guest_notification_non_ephemeral">You can save or delete your activity on exit</string>
+    <!-- Message of the notification when guest mode is entered
+         and it's not a ephemeral guest and it's not a first time guest login [CHAR LIMIT=NONE] -->
+    <string name="guest_notification_non_ephemeral_non_first_login">Reset to delete session
+        activity now, or you can save or delete activity on exit</string>
+
     <!-- An option in a photo selection dialog to take a new photo [CHAR LIMIT=50] -->
     <string name="user_image_take_photo">Take a photo</string>
     <!-- An option in a photo selection dialog to choose a pre-existing image [CHAR LIMIT=50] -->
@@ -1568,6 +1608,11 @@
     <string name="dream_complication_title_aqi">Air Quality</string>
     <!-- Screensaver overlay which displays cast info. [CHAR LIMIT=20] -->
     <string name="dream_complication_title_cast_info">Cast Info</string>
+    <!-- Screensaver overlay which displays home controls. [CHAR LIMIT=20] -->
+    <string name="dream_complication_title_home_controls">Home Controls</string>
+    <!-- Screensaver overlay which displays smartspace. [CHAR LIMIT=20] -->
+    <string name="dream_complication_title_smartspace">Smartspace</string>
+
 
     <!-- Title for a screen allowing the user to choose a profile picture. [CHAR LIMIT=NONE] -->
     <string name="avatar_picker_title">Choose a profile picture</string>
diff --git a/packages/SettingsLib/src/com/android/settingslib/Utils.java b/packages/SettingsLib/src/com/android/settingslib/Utils.java
index feb4212..b9c4030 100644
--- a/packages/SettingsLib/src/com/android/settingslib/Utils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/Utils.java
@@ -239,6 +239,8 @@
                             statusString = res.getString(R.string.battery_info_status_charging);
                             break;
                     }
+                } else if (batteryStatus.isPluggedInDock()) {
+                    statusString = res.getString(R.string.battery_info_status_charging_dock);
                 } else {
                     statusString = res.getString(R.string.battery_info_status_charging_wireless);
                 }
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java
index df19c67..1940986 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java
@@ -43,6 +43,8 @@
 public class A2dpProfile implements LocalBluetoothProfile {
     private static final String TAG = "A2dpProfile";
 
+    private static final int SOURCE_CODEC_TYPE_OPUS = 6; // TODO remove in U
+
     private Context mContext;
 
     private BluetoothA2dp mService;
@@ -328,6 +330,12 @@
            case BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC:
                index = 5;
                break;
+            case BluetoothCodecConfig.SOURCE_CODEC_TYPE_LC3:
+                index = 6;
+                break;
+            case SOURCE_CODEC_TYPE_OPUS: // TODO update in U
+                index = 7;
+                break;
            }
 
         if (index < 0) {
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java
index bf9debf..01d581e 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java
@@ -87,9 +87,11 @@
             if (DEBUG) {
                 Log.d(TAG, "Bluetooth service connected");
             }
-            mService = (BluetoothLeBroadcast) proxy;
-            mIsProfileReady = true;
-            registerServiceCallBack(mExecutor, mBroadcastCallback);
+            if(!mIsProfileReady) {
+                mService = (BluetoothLeBroadcast) proxy;
+                mIsProfileReady = true;
+                registerServiceCallBack(mExecutor, mBroadcastCallback);
+            }
         }
 
         @Override
@@ -97,8 +99,10 @@
             if (DEBUG) {
                 Log.d(TAG, "Bluetooth service disconnected");
             }
-            mIsProfileReady = false;
-            unregisterServiceCallBack(mBroadcastCallback);
+            if(mIsProfileReady) {
+                mIsProfileReady = false;
+                unregisterServiceCallBack(mBroadcastCallback);
+            }
         }
     };
 
@@ -299,6 +303,18 @@
     }
 
     public BluetoothLeBroadcastMetadata getLatestBluetoothLeBroadcastMetadata() {
+        if (mService == null) {
+            Log.d(TAG, "The BluetoothLeBroadcast is null");
+            return null;
+        }
+        if (mBluetoothLeBroadcastMetadata == null) {
+            final List<BluetoothLeBroadcastMetadata> metadataList =
+                    mService.getAllBroadcastMetadata();
+            mBluetoothLeBroadcastMetadata = metadataList.stream()
+                    .filter(i -> i.getBroadcastId() == mBroadcastId)
+                    .findFirst()
+                    .orElse(null);
+        }
         return mBluetoothLeBroadcastMetadata;
     }
 
@@ -368,7 +384,12 @@
     }
 
     public LocalBluetoothLeBroadcastMetadata getLocalBluetoothLeBroadcastMetaData() {
-        return new LocalBluetoothLeBroadcastMetadata(mBluetoothLeBroadcastMetadata);
+        final BluetoothLeBroadcastMetadata metadata = getLatestBluetoothLeBroadcastMetadata();
+        if (metadata == null) {
+            Log.d(TAG, "The BluetoothLeBroadcastMetadata is null.");
+            return null;
+        }
+        return new LocalBluetoothLeBroadcastMetadata(metadata);
     }
 
     public boolean isProfileReady() {
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java
index 58944f6..4714ff9 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java
@@ -576,6 +576,15 @@
             return;
         }
 
+        // The profiles list's sequence will affect the bluetooth icon at
+        // BluetoothUtils.getBtClassDrawableWithDescription(Context,CachedBluetoothDevice).
+
+        // Moving the LE audio profile to be the first priority if the device supports LE audio.
+        if (ArrayUtils.contains(uuids, BluetoothUuid.LE_AUDIO) && mLeAudioProfile != null) {
+            profiles.add(mLeAudioProfile);
+            removedProfiles.remove(mLeAudioProfile);
+        }
+
         if (mHeadsetProfile != null) {
             if ((ArrayUtils.contains(localUuids, BluetoothUuid.HSP_AG)
                     && ArrayUtils.contains(uuids, BluetoothUuid.HSP))
@@ -660,11 +669,6 @@
             removedProfiles.remove(mHearingAidProfile);
         }
 
-        if (ArrayUtils.contains(uuids, BluetoothUuid.LE_AUDIO) && mLeAudioProfile != null) {
-            profiles.add(mLeAudioProfile);
-            removedProfiles.remove(mLeAudioProfile);
-        }
-
         if (mSapProfile != null && ArrayUtils.contains(uuids, BluetoothUuid.SAP)) {
             profiles.add(mSapProfile);
             removedProfiles.remove(mSapProfile);
diff --git a/packages/SettingsLib/src/com/android/settingslib/dream/DreamBackend.java b/packages/SettingsLib/src/com/android/settingslib/dream/DreamBackend.java
index 01d0cc4..2258617 100644
--- a/packages/SettingsLib/src/com/android/settingslib/dream/DreamBackend.java
+++ b/packages/SettingsLib/src/com/android/settingslib/dream/DreamBackend.java
@@ -91,7 +91,9 @@
             COMPLICATION_TYPE_DATE,
             COMPLICATION_TYPE_WEATHER,
             COMPLICATION_TYPE_AIR_QUALITY,
-            COMPLICATION_TYPE_CAST_INFO
+            COMPLICATION_TYPE_CAST_INFO,
+            COMPLICATION_TYPE_HOME_CONTROLS,
+            COMPLICATION_TYPE_SMARTSPACE
     })
     @Retention(RetentionPolicy.SOURCE)
     public @interface ComplicationType {}
@@ -101,6 +103,8 @@
     public static final int COMPLICATION_TYPE_WEATHER = 3;
     public static final int COMPLICATION_TYPE_AIR_QUALITY = 4;
     public static final int COMPLICATION_TYPE_CAST_INFO = 5;
+    public static final int COMPLICATION_TYPE_HOME_CONTROLS = 6;
+    public static final int COMPLICATION_TYPE_SMARTSPACE = 7;
 
     private final Context mContext;
     private final IDreamManager mDreamManager;
@@ -346,6 +350,12 @@
             case COMPLICATION_TYPE_CAST_INFO:
                 res = R.string.dream_complication_title_cast_info;
                 break;
+            case COMPLICATION_TYPE_HOME_CONTROLS:
+                res = R.string.dream_complication_title_home_controls;
+                break;
+            case COMPLICATION_TYPE_SMARTSPACE:
+                res = R.string.dream_complication_title_smartspace;
+                break;
             default:
                 return null;
         }
diff --git a/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatteryStatus.java b/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatteryStatus.java
index 4939e04..132a631 100644
--- a/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatteryStatus.java
+++ b/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatteryStatus.java
@@ -135,7 +135,7 @@
      * @return true if the device is charged
      */
     public boolean isCharged() {
-        return status == BATTERY_STATUS_FULL || level >= 100;
+        return isCharged(status, level);
     }
 
     /**
@@ -177,4 +177,31 @@
         return "BatteryStatus{status=" + status + ",level=" + level + ",plugged=" + plugged
                 + ",health=" + health + ",maxChargingWattage=" + maxChargingWattage + "}";
     }
+
+    /**
+     * Whether or not the device is charged. Note that some devices never return 100% for
+     * battery level, so this allows either battery level or status to determine if the
+     * battery is charged.
+     *
+     * @param batteryChangedIntent ACTION_BATTERY_CHANGED intent
+     * @return true if the device is charged
+     */
+    public static boolean isCharged(Intent batteryChangedIntent) {
+        int status = batteryChangedIntent.getIntExtra(EXTRA_STATUS, BATTERY_STATUS_UNKNOWN);
+        int level = batteryChangedIntent.getIntExtra(EXTRA_LEVEL, 0);
+        return isCharged(status, level);
+    }
+
+    /**
+     * Whether or not the device is charged. Note that some devices never return 100% for
+     * battery level, so this allows either battery level or status to determine if the
+     * battery is charged.
+     *
+     * @param status values for "status" field in the ACTION_BATTERY_CHANGED Intent
+     * @param level values from 0 to 100
+     * @return true if the device is charged
+     */
+    public static boolean isCharged(int status, int level) {
+        return status == BATTERY_STATUS_FULL || level >= 100;
+    }
 }
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java
index d6d73046..f4355c3 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java
@@ -22,6 +22,7 @@
 import android.bluetooth.BluetoothDevice;
 import android.content.Context;
 import android.graphics.drawable.Drawable;
+import android.media.AudioManager;
 import android.media.RoutingSessionInfo;
 import android.os.Build;
 import android.text.TextUtils;
@@ -83,6 +84,8 @@
     private InfoMediaManager mInfoMediaManager;
     private String mPackageName;
     private MediaDevice mOnTransferBluetoothDevice;
+    @VisibleForTesting
+    AudioManager mAudioManager;
 
     @VisibleForTesting
     List<MediaDevice> mMediaDevices = new CopyOnWriteArrayList<>();
@@ -126,6 +129,7 @@
         mPackageName = packageName;
         mLocalBluetoothManager =
                 LocalBluetoothManager.getInstance(context, /* onInitCallback= */ null);
+        mAudioManager = context.getSystemService(AudioManager.class);
         mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
         if (mLocalBluetoothManager == null) {
             Log.e(TAG, "Bluetooth is not supported on this device");
@@ -148,6 +152,7 @@
         mInfoMediaManager = infoMediaManager;
         mPackageName = packageName;
         mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+        mAudioManager = context.getSystemService(AudioManager.class);
     }
 
     /**
@@ -527,13 +532,16 @@
             synchronized (mMediaDevicesLock) {
                 mMediaDevices.clear();
                 mMediaDevices.addAll(devices);
-                // Add disconnected bluetooth devices only when phone output device is available.
+                // Add muting expected bluetooth devices only when phone output device is available.
                 for (MediaDevice device : devices) {
                     final int type = device.getDeviceType();
                     if (type == MediaDevice.MediaDeviceType.TYPE_USB_C_AUDIO_DEVICE
                             || type == MediaDevice.MediaDeviceType.TYPE_3POINT5_MM_AUDIO_DEVICE
                             || type == MediaDevice.MediaDeviceType.TYPE_PHONE_DEVICE) {
-                        mMediaDevices.addAll(buildDisconnectedBluetoothDevice());
+                        MediaDevice mutingExpectedDevice = getMutingExpectedDevice();
+                        if (mutingExpectedDevice != null) {
+                            mMediaDevices.add(mutingExpectedDevice);
+                        }
                         break;
                     }
                 }
@@ -552,6 +560,34 @@
             }
         }
 
+        private MediaDevice getMutingExpectedDevice() {
+            if (mBluetoothAdapter == null
+                    || mAudioManager.getMutingExpectedDevice() == null) {
+                Log.w(TAG, "BluetoothAdapter is null or muting expected device not exist");
+                return null;
+            }
+            final List<BluetoothDevice> bluetoothDevices =
+                    mBluetoothAdapter.getMostRecentlyConnectedDevices();
+            final CachedBluetoothDeviceManager cachedDeviceManager =
+                    mLocalBluetoothManager.getCachedDeviceManager();
+            for (BluetoothDevice device : bluetoothDevices) {
+                final CachedBluetoothDevice cachedDevice =
+                        cachedDeviceManager.findDevice(device);
+                if (isBondedMediaDevice(cachedDevice) && isMutingExpectedDevice(cachedDevice)) {
+                    return new BluetoothMediaDevice(mContext,
+                            cachedDevice,
+                            null, null, mPackageName);
+                }
+            }
+            return null;
+        }
+
+        private boolean isMutingExpectedDevice(CachedBluetoothDevice cachedDevice) {
+            return mAudioManager.getMutingExpectedDevice() != null
+                    && cachedDevice.getAddress().equals(
+                    mAudioManager.getMutingExpectedDevice().getAddress());
+        }
+
         private List<MediaDevice> buildDisconnectedBluetoothDevice() {
             if (mBluetoothAdapter == null) {
                 Log.w(TAG, "buildDisconnectedBluetoothDevice() BluetoothAdapter is null");
@@ -595,6 +631,13 @@
             return new ArrayList<>(mDisconnectedMediaDevices);
         }
 
+        private boolean isBondedMediaDevice(CachedBluetoothDevice cachedDevice) {
+            return cachedDevice != null
+                    && cachedDevice.getBondState() == BluetoothDevice.BOND_BONDED
+                    && !cachedDevice.isConnected()
+                    && isMediaDevice(cachedDevice);
+        }
+
         private boolean isMediaDevice(CachedBluetoothDevice device) {
             for (LocalBluetoothProfile profile : device.getConnectableProfiles()) {
                 if (profile instanceof A2dpProfile || profile instanceof HearingAidProfile ||
diff --git a/packages/SettingsLib/src/com/android/settingslib/mobile/MobileStatusTracker.java b/packages/SettingsLib/src/com/android/settingslib/mobile/MobileStatusTracker.java
index 1a08366..b416738 100644
--- a/packages/SettingsLib/src/com/android/settingslib/mobile/MobileStatusTracker.java
+++ b/packages/SettingsLib/src/com/android/settingslib/mobile/MobileStatusTracker.java
@@ -44,6 +44,8 @@
     private final Handler mReceiverHandler;
     private final MobileTelephonyCallback mTelephonyCallback;
 
+    private boolean mListening = false;
+
     /**
      * MobileStatusTracker constructors
      *
@@ -76,6 +78,7 @@
      * Config the MobileStatusTracker to start or stop monitoring platform signals.
      */
     public void setListening(boolean listening) {
+        mListening = listening;
         if (listening) {
             mPhone.registerTelephonyCallback(mReceiverHandler::post, mTelephonyCallback);
         } else {
@@ -83,6 +86,10 @@
         }
     }
 
+    public boolean isListening() {
+        return mListening;
+    }
+
     private void updateDataSim() {
         int activeDataSubId = mDefaults.getActiveDataSubId();
         if (SubscriptionManager.isValidSubscriptionId(activeDataSubId)) {
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java
index 4332bd2..45c0d78 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java
@@ -57,6 +57,7 @@
     private final Handler mHandler;
     private final Handler mMainThreadHandler;
     private final Set<Integer> mNetworks = new HashSet<>();
+    private int mPrimaryNetworkId;
     // Save the previous HISTORY_SIZE states for logging.
     private final String[] mHistory = new String[HISTORY_SIZE];
     // Where to copy the next state into.
@@ -106,6 +107,7 @@
             if (!mNetworks.contains(network.getNetId())) {
                 mNetworks.add(network.getNetId());
             }
+            mPrimaryNetworkId = network.getNetId();
             updateWifiInfo(wifiInfo);
             updateStatusLabel();
             mMainThreadHandler.post(() -> postResults());
@@ -121,10 +123,13 @@
             recordLastWifiNetwork(log);
             if (mNetworks.contains(network.getNetId())) {
                 mNetworks.remove(network.getNetId());
-                updateWifiInfo(null);
-                updateStatusLabel();
-                mMainThreadHandler.post(() -> postResults());
             }
+            if (network.getNetId() != mPrimaryNetworkId) {
+                return;
+            }
+            updateWifiInfo(null);
+            updateStatusLabel();
+            mMainThreadHandler.post(() -> postResults());
         }
     };
     private final NetworkCallback mDefaultNetworkCallback =
diff --git a/packages/SettingsLib/tests/integ/Android.bp b/packages/SettingsLib/tests/integ/Android.bp
index 64563be..d463170 100644
--- a/packages/SettingsLib/tests/integ/Android.bp
+++ b/packages/SettingsLib/tests/integ/Android.bp
@@ -25,7 +25,7 @@
     name: "SettingsLibTests",
     defaults: [
         "SettingsLibDefaults",
-        "framework-wifi-test-defaults"
+        "framework-wifi-test-defaults",
     ],
 
     certificate: "platform",
@@ -47,6 +47,7 @@
         "androidx.test.espresso.core",
         "mockito-target-minus-junit4",
         "truth-prebuilt",
+        "SettingsLibDeviceStateRotationLock",
         "SettingsLibSettingsSpinner",
         "SettingsLibUsageProgressBarPreference",
     ],
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/UtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/UtilsTest.java
index 09b2a2e..336cdd3 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/UtilsTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/UtilsTest.java
@@ -365,6 +365,17 @@
     }
 
     @Test
+    public void getBatteryStatus_chargingDock_returnDockChargingString() {
+        final Intent intent = new Intent();
+        intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_CHARGING);
+        intent.putExtra(BatteryManager.EXTRA_PLUGGED, BatteryManager.BATTERY_PLUGGED_DOCK);
+        final Resources resources = mContext.getResources();
+
+        assertThat(Utils.getBatteryStatus(mContext, intent, /* compactStatus= */ false)).isEqualTo(
+                resources.getString(R.string.battery_info_status_charging_dock));
+    }
+
+    @Test
     public void getBatteryStatus_chargingWireless_returnWirelessChargingString() {
         final Intent intent = new Intent();
         intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_CHARGING);
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java
index 8e850b2..24bb1bc 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java
@@ -16,7 +16,6 @@
 
 package com.android.settingslib.media;
 
-import static android.bluetooth.BluetoothClass.Device.AUDIO_VIDEO_HEADPHONES;
 import static android.media.MediaRoute2ProviderService.REASON_UNKNOWN_ERROR;
 
 import static com.google.common.truth.Truth.assertThat;
@@ -29,10 +28,12 @@
 import static org.mockito.Mockito.when;
 
 import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothClass;
 import android.bluetooth.BluetoothDevice;
 import android.bluetooth.BluetoothProfile;
 import android.content.Context;
+import android.media.AudioDeviceAttributes;
+import android.media.AudioManager;
+import android.media.AudioSystem;
 import android.media.MediaRoute2Info;
 import android.media.MediaRouter2Manager;
 import android.media.RoutingSessionInfo;
@@ -71,6 +72,7 @@
     private static final String TEST_CURRENT_DEVICE_ID = "currentDevice_id";
     private static final String TEST_PACKAGE_NAME = "com.test.playmusic";
     private static final String TEST_SESSION_ID = "session_id";
+    private static final String TEST_ADDRESS = "00:01:02:03:04:05";
 
     @Mock
     private InfoMediaManager mInfoMediaManager;
@@ -90,6 +92,8 @@
     private MediaRoute2Info mRouteInfo1;
     @Mock
     private MediaRoute2Info mRouteInfo2;
+    @Mock
+    private AudioManager mAudioManager;
 
     private Context mContext;
     private LocalMediaManager mLocalMediaManager;
@@ -118,6 +122,7 @@
                 TEST_PACKAGE_NAME);
         mLocalMediaManager = new LocalMediaManager(mContext, mLocalBluetoothManager,
                 mInfoMediaManager, "com.test.packagename");
+        mLocalMediaManager.mAudioManager = mAudioManager;
     }
 
     @Test
@@ -551,16 +556,12 @@
     }
 
     @Test
-    public void onDeviceListAdded_haveDisconnectedDevice_addDisconnectedDevice() {
+    public void onDeviceListAdded_haveMutingExpectedDevice_addMutingExpectedDevice() {
         final List<MediaDevice> devices = new ArrayList<>();
         final MediaDevice device1 = mock(MediaDevice.class);
-        final MediaDevice device2 = mock(MediaDevice.class);
-        final MediaDevice device3 = mock(MediaDevice.class);
         mLocalMediaManager.mPhoneDevice = mock(PhoneMediaDevice.class);
         devices.add(device1);
-        devices.add(device2);
-        mLocalMediaManager.mMediaDevices.add(device3);
-        mLocalMediaManager.mMediaDevices.add(mLocalMediaManager.mPhoneDevice);
+        devices.add(mLocalMediaManager.mPhoneDevice);
 
         final List<LocalBluetoothProfile> profiles = new ArrayList<>();
         final A2dpProfile a2dpProfile = mock(A2dpProfile.class);
@@ -573,22 +574,25 @@
         bluetoothDevices.add(bluetoothDevice);
         mShadowBluetoothAdapter.setMostRecentlyConnectedDevices(bluetoothDevices);
 
+        AudioDeviceAttributes audioDeviceAttributes = new AudioDeviceAttributes(
+                AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, TEST_ADDRESS);
+
+        when(mAudioManager.getMutingExpectedDevice()).thenReturn(audioDeviceAttributes);
         when(mLocalBluetoothManager.getCachedDeviceManager()).thenReturn(cachedManager);
         when(cachedManager.findDevice(bluetoothDevice)).thenReturn(cachedDevice);
         when(cachedDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
         when(cachedDevice.isConnected()).thenReturn(false);
         when(cachedDevice.getConnectableProfiles()).thenReturn(profiles);
         when(cachedDevice.getDevice()).thenReturn(bluetoothDevice);
+        when(cachedDevice.getAddress()).thenReturn(TEST_ADDRESS);
         when(mA2dpProfile.getActiveDevice()).thenReturn(bluetoothDevice);
         when(mHapProfile.getActiveDevices()).thenReturn(new ArrayList<>());
 
         when(device1.getId()).thenReturn(TEST_DEVICE_ID_1);
-        when(device2.getId()).thenReturn(TEST_DEVICE_ID_2);
-        when(device3.getId()).thenReturn(TEST_DEVICE_ID_3);
         when(device1.getDeviceType()).thenReturn(MediaDevice.MediaDeviceType.TYPE_PHONE_DEVICE);
         when(mLocalMediaManager.mPhoneDevice.getId()).thenReturn("test_phone_id");
 
-        assertThat(mLocalMediaManager.mMediaDevices).hasSize(2);
+        assertThat(mLocalMediaManager.mMediaDevices).hasSize(0);
         mLocalMediaManager.registerCallback(mCallback);
         mLocalMediaManager.mMediaDeviceCallback.onDeviceListAdded(devices);
 
@@ -634,68 +638,6 @@
     }
 
     @Test
-    public void onDeviceListAdded_haveDisconnectedDevice_list5DisconnectedDevice() {
-        final List<MediaDevice> devices = new ArrayList<>();
-        final MediaDevice device1 = mock(MediaDevice.class);
-        final MediaDevice device2 = mock(MediaDevice.class);
-        final MediaDevice device3 = mock(MediaDevice.class);
-        mLocalMediaManager.mPhoneDevice = mock(PhoneMediaDevice.class);
-        devices.add(device1);
-        devices.add(device2);
-        mLocalMediaManager.mMediaDevices.add(device3);
-        mLocalMediaManager.mMediaDevices.add(mLocalMediaManager.mPhoneDevice);
-
-        final List<LocalBluetoothProfile> profiles = new ArrayList<>();
-        final A2dpProfile a2dpProfile = mock(A2dpProfile.class);
-        profiles.add(a2dpProfile);
-
-        final List<BluetoothDevice> bluetoothDevices = new ArrayList<>();
-        final BluetoothDevice bluetoothDevice = mock(BluetoothDevice.class);
-        final BluetoothDevice bluetoothDevice2 = mock(BluetoothDevice.class);
-        final BluetoothDevice bluetoothDevice3 = mock(BluetoothDevice.class);
-        final BluetoothDevice bluetoothDevice4 = mock(BluetoothDevice.class);
-        final BluetoothDevice bluetoothDevice5 = mock(BluetoothDevice.class);
-        final BluetoothDevice bluetoothDevice6 = mock(BluetoothDevice.class);
-        final BluetoothClass bluetoothClass = mock(BluetoothClass.class);
-        final CachedBluetoothDevice cachedDevice = mock(CachedBluetoothDevice.class);
-        final CachedBluetoothDeviceManager cachedManager = mock(CachedBluetoothDeviceManager.class);
-        bluetoothDevices.add(bluetoothDevice);
-        bluetoothDevices.add(bluetoothDevice2);
-        bluetoothDevices.add(bluetoothDevice3);
-        bluetoothDevices.add(bluetoothDevice4);
-        bluetoothDevices.add(bluetoothDevice5);
-        bluetoothDevices.add(bluetoothDevice6);
-        mShadowBluetoothAdapter.setMostRecentlyConnectedDevices(bluetoothDevices);
-
-        when(mLocalBluetoothManager.getCachedDeviceManager()).thenReturn(cachedManager);
-        when(cachedManager.findDevice(bluetoothDevice)).thenReturn(cachedDevice);
-        when(cachedManager.findDevice(bluetoothDevice2)).thenReturn(cachedDevice);
-        when(cachedManager.findDevice(bluetoothDevice3)).thenReturn(cachedDevice);
-        when(cachedManager.findDevice(bluetoothDevice4)).thenReturn(cachedDevice);
-        when(cachedManager.findDevice(bluetoothDevice5)).thenReturn(cachedDevice);
-        when(cachedManager.findDevice(bluetoothDevice6)).thenReturn(cachedDevice);
-        when(cachedDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
-        when(cachedDevice.isConnected()).thenReturn(false);
-        when(cachedDevice.getDevice()).thenReturn(bluetoothDevice);
-        when(cachedDevice.getConnectableProfiles()).thenReturn(profiles);
-        when(bluetoothDevice.getBluetoothClass()).thenReturn(bluetoothClass);
-        when(bluetoothClass.getDeviceClass()).thenReturn(AUDIO_VIDEO_HEADPHONES);
-
-        when(device1.getId()).thenReturn(TEST_DEVICE_ID_1);
-        when(device2.getId()).thenReturn(TEST_DEVICE_ID_2);
-        when(device3.getId()).thenReturn(TEST_DEVICE_ID_3);
-        when(device1.getDeviceType()).thenReturn(MediaDevice.MediaDeviceType.TYPE_PHONE_DEVICE);
-        when(mLocalMediaManager.mPhoneDevice.getId()).thenReturn("test_phone_id");
-
-        assertThat(mLocalMediaManager.mMediaDevices).hasSize(2);
-        mLocalMediaManager.registerCallback(mCallback);
-        mLocalMediaManager.mMediaDeviceCallback.onDeviceListAdded(devices);
-
-        assertThat(mLocalMediaManager.mMediaDevices).hasSize(7);
-        verify(mCallback).onDeviceListUpdate(any());
-    }
-
-    @Test
     public void onDeviceListAdded_bluetoothAdapterIsNull_noDisconnectedDeviceAdded() {
         final List<MediaDevice> devices = new ArrayList<>();
         final MediaDevice device1 = mock(MediaDevice.class);
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiStatusTrackerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiStatusTrackerTest.java
new file mode 100644
index 0000000..dc7e313d
--- /dev/null
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiStatusTrackerTest.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.wifi;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.Network;
+import android.net.NetworkCapabilities;
+import android.net.NetworkScoreManager;
+import android.net.wifi.WifiInfo;
+import android.net.wifi.WifiManager;
+
+import org.junit.Before;
+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.robolectric.RobolectricTestRunner;
+
+@RunWith(RobolectricTestRunner.class)
+public class WifiStatusTrackerTest {
+    @Mock Context mContext;
+    @Mock WifiManager mWifiManager;
+    @Mock NetworkScoreManager mNetworkScoreManager;
+    @Mock ConnectivityManager mConnectivityManager;
+    @Mock Runnable mCallback;
+
+    private final ArgumentCaptor<ConnectivityManager.NetworkCallback>
+            mNetworkCallbackCaptor =
+            ArgumentCaptor.forClass(ConnectivityManager.NetworkCallback.class);
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+    }
+
+    /**
+     * Verify that we only clear the WifiInfo if the primary network was lost.
+     */
+    @Test
+    public void testWifiInfoClearedOnPrimaryNetworkLost() {
+        WifiStatusTracker wifiStatusTracker = new WifiStatusTracker(mContext, mWifiManager,
+                mNetworkScoreManager, mConnectivityManager, mCallback);
+        wifiStatusTracker.setListening(true);
+
+        verify(mConnectivityManager)
+                .registerNetworkCallback(any(), mNetworkCallbackCaptor.capture(), any());
+
+        // Trigger a validation callback for the primary Wifi network.
+        WifiInfo primaryWifiInfo = Mockito.mock(WifiInfo.class);
+        when(primaryWifiInfo.makeCopy(anyLong())).thenReturn(primaryWifiInfo);
+        when(primaryWifiInfo.isPrimary()).thenReturn(true);
+        int primaryRssi = -55;
+        when(primaryWifiInfo.getRssi()).thenReturn(primaryRssi);
+        NetworkCapabilities primaryCap = new NetworkCapabilities.Builder()
+                .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
+                .setTransportInfo(primaryWifiInfo)
+                .addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
+                .build();
+        Network primaryNetwork = Mockito.mock(Network.class);
+        int primaryNetworkId = 1;
+        when(primaryNetwork.getNetId()).thenReturn(primaryNetworkId);
+        mNetworkCallbackCaptor.getValue().onCapabilitiesChanged(primaryNetwork, primaryCap);
+
+        // Verify primary wifi info is the one being used.
+        assertThat(wifiStatusTracker.connected).isTrue();
+        assertThat(wifiStatusTracker.rssi).isEqualTo(primaryRssi);
+
+        // Trigger a validation callback for the non-primary Wifi network.
+        WifiInfo nonPrimaryWifiInfo = Mockito.mock(WifiInfo.class);
+        when(nonPrimaryWifiInfo.makeCopy(anyLong())).thenReturn(nonPrimaryWifiInfo);
+        when(nonPrimaryWifiInfo.isPrimary()).thenReturn(false);
+        int nonPrimaryRssi = -75;
+        when(primaryWifiInfo.getRssi()).thenReturn(nonPrimaryRssi);
+        NetworkCapabilities nonPrimaryCap = new NetworkCapabilities.Builder()
+                .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
+                .setTransportInfo(nonPrimaryWifiInfo)
+                .addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
+                .build();
+        Network nonPrimaryNetwork = Mockito.mock(Network.class);
+        int nonPrimaryNetworkId = 2;
+        when(nonPrimaryNetwork.getNetId()).thenReturn(nonPrimaryNetworkId);
+        mNetworkCallbackCaptor.getValue().onCapabilitiesChanged(nonPrimaryNetwork, nonPrimaryCap);
+
+        // Verify primary wifi info is still the one being used.
+        assertThat(wifiStatusTracker.connected).isTrue();
+        assertThat(wifiStatusTracker.rssi).isEqualTo(primaryRssi);
+
+        // Lose the non-primary network.
+        mNetworkCallbackCaptor.getValue().onLost(nonPrimaryNetwork);
+
+        // Verify primary wifi info is still the one being used.
+        assertThat(wifiStatusTracker.connected).isTrue();
+        assertThat(wifiStatusTracker.rssi).isEqualTo(primaryRssi);
+
+        // Lose the primary network.
+        mNetworkCallbackCaptor.getValue().onLost(primaryNetwork);
+
+        // Verify we aren't connected anymore.
+        assertThat(wifiStatusTracker.connected).isFalse();
+    }
+}
diff --git a/packages/SettingsProvider/Android.bp b/packages/SettingsProvider/Android.bp
index f490c87..4a10427 100644
--- a/packages/SettingsProvider/Android.bp
+++ b/packages/SettingsProvider/Android.bp
@@ -32,6 +32,7 @@
     ],
     static_libs: [
         "junit",
+        "SettingsLibDeviceStateRotationLock",
         "SettingsLibDisplayDensityUtils",
     ],
     platform_apis: true,
@@ -55,6 +56,7 @@
     static_libs: [
         "androidx.test.rules",
         "mockito-target-minus-junit4",
+        "SettingsLibDeviceStateRotationLock",
         "SettingsLibDisplayDensityUtils",
         "platform-test-annotations",
         "truth-prebuilt",
diff --git a/packages/SettingsProvider/src/android/provider/settings/backup/DeviceSpecificSettings.java b/packages/SettingsProvider/src/android/provider/settings/backup/DeviceSpecificSettings.java
index e425790..3cb1439 100644
--- a/packages/SettingsProvider/src/android/provider/settings/backup/DeviceSpecificSettings.java
+++ b/packages/SettingsProvider/src/android/provider/settings/backup/DeviceSpecificSettings.java
@@ -32,5 +32,6 @@
      */
     public static final String[] DEVICE_SPECIFIC_SETTINGS_TO_BACKUP = {
             Settings.Secure.DISPLAY_DENSITY_FORCED,
+            Settings.Secure.DEVICE_STATE_ROTATION_LOCK
     };
 }
diff --git a/packages/SettingsProvider/src/android/provider/settings/backup/GlobalSettings.java b/packages/SettingsProvider/src/android/provider/settings/backup/GlobalSettings.java
index dc166b4..162bb2c 100644
--- a/packages/SettingsProvider/src/android/provider/settings/backup/GlobalSettings.java
+++ b/packages/SettingsProvider/src/android/provider/settings/backup/GlobalSettings.java
@@ -78,6 +78,7 @@
         Settings.Global.POWER_BUTTON_LONG_PRESS,
         Settings.Global.AUTOMATIC_POWER_SAVE_MODE,
         Settings.Global.ADVANCED_BATTERY_USAGE_AMOUNT,
+        Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED,
         Settings.Global.POWER_BUTTON_LONG_PRESS_DURATION_MS,
         Settings.Global.USER_PREFERRED_REFRESH_RATE,
         Settings.Global.USER_PREFERRED_RESOLUTION_HEIGHT,
diff --git a/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java b/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java
index 5eaf553..d1f10a6 100644
--- a/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java
+++ b/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java
@@ -37,6 +37,7 @@
         Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED,
         Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED,
         Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED,
+        Settings.Secure.ADAPTIVE_CHARGING_ENABLED,
         Settings.Secure.ADAPTIVE_SLEEP,
         Settings.Secure.CAMERA_AUTOROTATE,
         Settings.Secure.AUTOFILL_SERVICE,
@@ -117,6 +118,10 @@
         Settings.Secure.FACE_UNLOCK_DISMISSES_KEYGUARD,
         Settings.Secure.FACE_UNLOCK_APP_ENABLED,
         Settings.Secure.FACE_UNLOCK_ALWAYS_REQUIRE_CONFIRMATION,
+        Settings.Secure.FINGERPRINT_SIDE_FPS_KG_POWER_WINDOW,
+        Settings.Secure.FINGERPRINT_SIDE_FPS_BP_POWER_WINDOW,
+        Settings.Secure.FINGERPRINT_SIDE_FPS_ENROLL_TAP_WINDOW,
+        Settings.Secure.FINGERPRINT_SIDE_FPS_AUTH_DOWNTIME,
         Settings.Secure.ACTIVE_UNLOCK_ON_WAKE,
         Settings.Secure.ACTIVE_UNLOCK_ON_UNLOCK_INTENT,
         Settings.Secure.ACTIVE_UNLOCK_ON_BIOMETRIC_FAIL,
diff --git a/packages/SettingsProvider/src/android/provider/settings/validators/GlobalSettingsValidators.java b/packages/SettingsProvider/src/android/provider/settings/validators/GlobalSettingsValidators.java
index acb33c3..fbbdd32 100644
--- a/packages/SettingsProvider/src/android/provider/settings/validators/GlobalSettingsValidators.java
+++ b/packages/SettingsProvider/src/android/provider/settings/validators/GlobalSettingsValidators.java
@@ -51,6 +51,7 @@
                                 || (val == BatteryManager.BATTERY_PLUGGED_AC)
                                 || (val == BatteryManager.BATTERY_PLUGGED_USB)
                                 || (val == BatteryManager.BATTERY_PLUGGED_WIRELESS)
+                                || (val == BatteryManager.BATTERY_PLUGGED_DOCK)
                                 || (val
                                         == (BatteryManager.BATTERY_PLUGGED_AC
                                                 | BatteryManager.BATTERY_PLUGGED_USB))
@@ -58,12 +59,29 @@
                                         == (BatteryManager.BATTERY_PLUGGED_AC
                                                 | BatteryManager.BATTERY_PLUGGED_WIRELESS))
                                 || (val
+                                        == (BatteryManager.BATTERY_PLUGGED_AC
+                                                | BatteryManager.BATTERY_PLUGGED_DOCK))
+                                || (val
                                         == (BatteryManager.BATTERY_PLUGGED_USB
                                                 | BatteryManager.BATTERY_PLUGGED_WIRELESS))
                                 || (val
+                                        == (BatteryManager.BATTERY_PLUGGED_USB
+                                                | BatteryManager.BATTERY_PLUGGED_DOCK))
+                                || (val
+                                        == (BatteryManager.BATTERY_PLUGGED_WIRELESS
+                                                | BatteryManager.BATTERY_PLUGGED_DOCK))
+                                || (val
+                                        == (BatteryManager.BATTERY_PLUGGED_AC
+                                                | BatteryManager.BATTERY_PLUGGED_USB
+                                                | BatteryManager.BATTERY_PLUGGED_WIRELESS))
+                                || (val
                                         == (BatteryManager.BATTERY_PLUGGED_AC
                                                 | BatteryManager.BATTERY_PLUGGED_USB
-                                                | BatteryManager.BATTERY_PLUGGED_WIRELESS));
+                                                | BatteryManager.BATTERY_PLUGGED_DOCK))
+                                || (val
+                                        == (BatteryManager.BATTERY_PLUGGED_USB
+                                                | BatteryManager.BATTERY_PLUGGED_WIRELESS
+                                                | BatteryManager.BATTERY_PLUGGED_DOCK));
                     } catch (NumberFormatException e) {
                         return false;
                     }
@@ -155,6 +173,7 @@
         VALIDATORS.put(Global.DEVICE_CONFIG_SYNC_DISABLED, BOOLEAN_VALIDATOR);
         VALIDATORS.put(Global.AUTOMATIC_POWER_SAVE_MODE, ANY_INTEGER_VALIDATOR);
         VALIDATORS.put(Global.ADVANCED_BATTERY_USAGE_AMOUNT, PERCENTAGE_INTEGER_VALIDATOR);
+        VALIDATORS.put(Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, BOOLEAN_VALIDATOR);
         VALIDATORS.put(Global.POWER_BUTTON_LONG_PRESS_DURATION_MS, NONE_NEGATIVE_LONG_VALIDATOR);
 
         VALIDATORS.put(Global.Wearable.HAS_PAY_TOKENS, BOOLEAN_VALIDATOR);
diff --git a/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java b/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java
index 9ee7b65..4aadf72 100644
--- a/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java
+++ b/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java
@@ -59,6 +59,7 @@
         VALIDATORS.put(Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, BOOLEAN_VALIDATOR);
         VALIDATORS.put(
                 Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, BOOLEAN_VALIDATOR);
+        VALIDATORS.put(Secure.ADAPTIVE_CHARGING_ENABLED, BOOLEAN_VALIDATOR);
         VALIDATORS.put(Secure.ADAPTIVE_SLEEP, BOOLEAN_VALIDATOR);
         VALIDATORS.put(Secure.CAMERA_AUTOROTATE, BOOLEAN_VALIDATOR);
         VALIDATORS.put(Secure.AUTOFILL_SERVICE, NULLABLE_COMPONENT_NAME_VALIDATOR);
@@ -171,6 +172,11 @@
                 Secure.AUTOMATIC_STORAGE_MANAGER_DAYS_TO_RETAIN, NON_NEGATIVE_INTEGER_VALIDATOR);
         VALIDATORS.put(Secure.FACE_UNLOCK_KEYGUARD_ENABLED, BOOLEAN_VALIDATOR);
         VALIDATORS.put(Secure.FACE_UNLOCK_DISMISSES_KEYGUARD, BOOLEAN_VALIDATOR);
+        VALIDATORS.put(Secure.FINGERPRINT_SIDE_FPS_KG_POWER_WINDOW, NON_NEGATIVE_INTEGER_VALIDATOR);
+        VALIDATORS.put(Secure.FINGERPRINT_SIDE_FPS_BP_POWER_WINDOW, NON_NEGATIVE_INTEGER_VALIDATOR);
+        VALIDATORS.put(Secure.FINGERPRINT_SIDE_FPS_ENROLL_TAP_WINDOW,
+                NON_NEGATIVE_INTEGER_VALIDATOR);
+        VALIDATORS.put(Secure.FINGERPRINT_SIDE_FPS_AUTH_DOWNTIME, NON_NEGATIVE_INTEGER_VALIDATOR);
         VALIDATORS.put(Secure.SHOW_MEDIA_WHEN_BYPASSING, BOOLEAN_VALIDATOR);
         VALIDATORS.put(Secure.FACE_UNLOCK_APP_ENABLED, BOOLEAN_VALIDATOR);
         VALIDATORS.put(Secure.FACE_UNLOCK_ALWAYS_REQUIRE_CONFIRMATION, BOOLEAN_VALIDATOR);
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
index 5088533..d3afccc 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
@@ -1076,7 +1076,9 @@
             SoftApConfiguration storedConfig = mWifiManager.getSoftApConfiguration();
 
             if (isNeedToNotifyUserConfigurationHasChanged(configInCloud, storedConfig)) {
-                Log.d(TAG, "restored ap configuration requires a conversion, notify the user");
+                Log.d(TAG, "restored ap configuration requires a conversion, notify the user"
+                        + ", configInCloud is " + configInCloud + " but storedConfig is "
+                        + storedConfig);
                 WifiSoftApConfigChangedNotifier.notifyUserOfConfigConversion(this);
             }
         }
@@ -1115,9 +1117,6 @@
                         == storedConfig.getBridgedModeOpportunisticShutdownTimeoutMillis()
                 && Objects.equals(configInCloud.getVendorElements(),
                         storedConfig.getVendorElements())
-                && (configInCloud.getPersistentRandomizedMacAddress() != null
-                        ? Objects.equals(configInCloud.getPersistentRandomizedMacAddress(),
-                        storedConfig.getPersistentRandomizedMacAddress()) : true)
                 && Arrays.equals(configInCloud.getAllowedAcsChannels(
                         SoftApConfiguration.BAND_2GHZ),
                         storedConfig.getAllowedAcsChannels(SoftApConfiguration.BAND_2GHZ))
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
index 440bb67..808ea9e 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
@@ -41,6 +41,7 @@
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.app.LocalePicker;
+import com.android.settingslib.devicestate.DeviceStateRotationLockSettingsManager;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -200,6 +201,9 @@
             } else if (Settings.Global.POWER_BUTTON_LONG_PRESS.equals(name)) {
                 setLongPressPowerBehavior(cr, value);
                 return;
+            } else if (Settings.System.ACCELEROMETER_ROTATION.equals(name)
+                    && shouldSkipAutoRotateRestore()) {
+                return;
             }
 
             // Default case: write the restored value to settings
@@ -236,6 +240,12 @@
         }
     }
 
+    private boolean shouldSkipAutoRotateRestore() {
+        // When device state based auto rotation settings are available, let's skip the restoring
+        // of the standard auto rotation settings to avoid conflicting setting values.
+        return DeviceStateRotationLockSettingsManager.isDeviceStateRotationLockEnabled(mContext);
+    }
+
     public String onBackupValue(String name, String value) {
         // Special processing for backing up ringtones & notification sounds
         if (Settings.System.RINGTONE.equals(name)
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
index ccfeae4..aa3a983 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
@@ -2358,6 +2358,12 @@
                 SecureSettingsProto.PowerMenuPrivacy.SHOW);
         p.end(powerMenuPrivacyToken);
 
+        final long extraLowPowerModeToken = p.start(SecureSettingsProto.EXTRA_LOW_POWER_MODE);
+        dumpSetting(s, p,
+                Settings.Secure.EXTRA_AUTOMATIC_POWER_SAVE_MODE,
+                SecureSettingsProto.ExtraLowPowerMode.EXTRA_AUTOMATIC_POWER_SAVE_MODE);
+        p.end(extraLowPowerModeToken);
+
         final long printServiceToken = p.start(SecureSettingsProto.PRINT_SERVICE);
         dumpSetting(s, p,
                 Settings.Secure.PRINT_SERVICE_SEARCH_URI,
diff --git a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
index cce5154..b1ce3bf 100644
--- a/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
+++ b/packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java
@@ -110,7 +110,6 @@
             newHashSet(
                     Settings.Global.ACTIVITY_MANAGER_CONSTANTS,
                     Settings.Global.ACTIVITY_STARTS_LOGGING_ENABLED,
-                    Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED,
                     Settings.Global.ADB_ALLOWED_CONNECTION_TIME,
                     Settings.Global.ADB_ENABLED,
                     Settings.Global.ADB_WIFI_ENABLED,
@@ -422,6 +421,7 @@
                     Settings.Global.RADIO_NFC,
                     Settings.Global.RADIO_WIFI,
                     Settings.Global.RADIO_WIMAX,
+                    Settings.Global.REMOVE_GUEST_ON_EXIT,
                     Settings.Global.RECOMMENDED_NETWORK_EVALUATOR_CACHE_EXPIRY_MS,
                     Settings.Global.READ_EXTERNAL_STORAGE_ENFORCED_DEFAULT,
                     Settings.Global.RESTRICTED_NETWORKING_MODE,
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 4f7b494..ee76dbf 100644
--- a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperTest.java
+++ b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperTest.java
@@ -73,6 +73,8 @@
         when(mContext.getSystemService(eq(Context.TELEPHONY_SERVICE))).thenReturn(
                 mTelephonyManager);
         when(mContext.getResources()).thenReturn(mResources);
+        when(mContext.getApplicationContext()).thenReturn(mContext);
+        when(mContext.getContentResolver()).thenReturn(getContentResolver());
 
         mSettingsHelper = spy(new SettingsHelper(mContext));
     }
@@ -305,6 +307,63 @@
                         new String[] { "he-IL", "id-ID", "yi" }));  // supported
     }
 
+    @Test
+    public void restoreValue_autoRotation_deviceStateAutoRotationDisabled_restoresValue() {
+        when(mResources.getStringArray(R.array.config_perDeviceStateRotationLockDefaults))
+                .thenReturn(new String[]{});
+        int previousValue = 0;
+        int newValue = 1;
+        setAutoRotationSettingValue(previousValue);
+
+        restoreAutoRotationSetting(newValue);
+
+        assertThat(getAutoRotationSettingValue()).isEqualTo(newValue);
+    }
+
+    @Test
+    public void restoreValue_autoRotation_deviceStateAutoRotationEnabled_doesNotRestoreValue() {
+        when(mResources.getStringArray(R.array.config_perDeviceStateRotationLockDefaults))
+                .thenReturn(new String[]{"0:1", "1:1"});
+        int previousValue = 0;
+        int newValue = 1;
+        setAutoRotationSettingValue(previousValue);
+
+        restoreAutoRotationSetting(newValue);
+
+        assertThat(getAutoRotationSettingValue()).isEqualTo(previousValue);
+    }
+
+    private int getAutoRotationSettingValue() {
+        return Settings.System.getInt(
+                getContentResolver(),
+                Settings.System.ACCELEROMETER_ROTATION,
+                /* default= */ -1);
+    }
+
+    private void setAutoRotationSettingValue(int value) {
+        Settings.System.putInt(
+                getContentResolver(),
+                Settings.System.ACCELEROMETER_ROTATION,
+                value
+        );
+    }
+
+    private void restoreAutoRotationSetting(int newValue) {
+        mSettingsHelper.restoreValue(
+                mContext,
+                getContentResolver(),
+                new ContentValues(),
+                /* destination= */ Settings.System.CONTENT_URI,
+                /* name= */ Settings.System.ACCELEROMETER_ROTATION,
+                /* value= */ String.valueOf(newValue),
+                /* restoredFromSdkInt= */ 0);
+    }
+
+    private ContentResolver getContentResolver() {
+        return InstrumentationRegistry.getInstrumentation().getTargetContext()
+                .getContentResolver();
+    }
+
     private void clearLongPressPowerValues() {
         ContentResolver cr = InstrumentationRegistry.getInstrumentation().getTargetContext()
                 .getContentResolver();
diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp
index f05c1e2..cd3a722 100644
--- a/packages/SystemUI/Android.bp
+++ b/packages/SystemUI/Android.bp
@@ -93,6 +93,7 @@
         "SystemUISharedLib",
         "SystemUI-statsd",
         "SettingsLib",
+        "androidx.core_core-ktx",
         "androidx.viewpager2_viewpager2",
         "androidx.legacy_legacy-support-v4",
         "androidx.recyclerview_recyclerview",
@@ -109,6 +110,7 @@
         "androidx.arch.core_core-runtime",
         "androidx.lifecycle_lifecycle-common-java8",
         "androidx.lifecycle_lifecycle-extensions",
+        "androidx.lifecycle_lifecycle-runtime-ktx",
         "androidx.dynamicanimation_dynamicanimation",
         "androidx-constraintlayout_constraintlayout",
         "androidx.exifinterface_exifinterface",
@@ -143,25 +145,10 @@
 filegroup {
     name: "SystemUI-tests-utils",
     srcs: [
-        "tests/src/com/android/systemui/SysuiBaseFragmentTest.java",
-        "tests/src/com/android/systemui/SysuiTestCase.java",
-        "tests/src/com/android/systemui/TestableDependency.java",
-        "tests/src/com/android/systemui/classifier/FalsingManagerFake.java",
-        "tests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryBuilder.java",
-        "tests/src/com/android/systemui/statusbar/RankingBuilder.java",
-        "tests/src/com/android/systemui/statusbar/SbnBuilder.java",
-        "tests/src/com/android/systemui/SysuiTestableContext.java",
-        "tests/src/com/android/systemui/util/**/*Fake.java",
-        "tests/src/com/android/systemui/utils/leaks/BaseLeakChecker.java",
-        "tests/src/com/android/systemui/utils/leaks/LeakCheckedTest.java",
-        "tests/src/com/android/systemui/**/Fake*.java",
-        "tests/src/com/android/systemui/**/Fake*.kt",
+        "tests/utils/src/**/*.java",
+        "tests/utils/src/**/*.kt",
     ],
-    exclude_srcs: [
-        "tests/src/com/android/systemui/**/*Test.java",
-        "tests/src/com/android/systemui/**/*Test.kt",
-    ],
-    path: "tests/src",
+    path: "tests/utils/src",
 }
 
 java_library {
@@ -169,8 +156,8 @@
     srcs: [
         "src/com/android/systemui/util/concurrency/DelayableExecutor.java",
         "src/com/android/systemui/util/time/SystemClock.java",
-        "tests/src/com/android/systemui/util/concurrency/FakeExecutor.java",
-        "tests/src/com/android/systemui/util/time/FakeSystemClock.java",
+        "tests/utils/src/com/android/systemui/util/concurrency/FakeExecutor.java",
+        "tests/utils/src/com/android/systemui/util/time/FakeSystemClock.java",
     ],
     jarjar_rules: ":jarjar-rules-shared",
 }
@@ -193,6 +180,7 @@
         "src/**/*.java",
         "src/**/I*.aidl",
         ":ReleaseJavaFiles",
+        ":SystemUI-tests-utils",
     ],
     static_libs: [
         "WifiTrackerLib",
@@ -217,11 +205,13 @@
         "androidx.arch.core_core-runtime",
         "androidx.lifecycle_lifecycle-common-java8",
         "androidx.lifecycle_lifecycle-extensions",
+        "androidx.lifecycle_lifecycle-runtime-ktx",
         "androidx.dynamicanimation_dynamicanimation",
         "androidx-constraintlayout_constraintlayout",
         "androidx.exifinterface_exifinterface",
         "kotlinx-coroutines-android",
         "kotlinx-coroutines-core",
+        "kotlinx_coroutines_test",
         "iconloader_base",
         "SystemUI-tags",
         "SystemUI-proto",
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index 6f22b49..6edf13a 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -618,6 +618,17 @@
             android:excludeFromRecents="true"
             android:visibleToInstantApps="true"/>
 
+        <activity
+            android:name=".media.MediaProjectionAppSelectorActivity"
+            android:theme="@style/Theme.SystemUI.MediaProjectionAppSelector"
+            android:finishOnCloseSystemDialogs="true"
+            android:excludeFromRecents="true"
+            android:documentLaunchMode="never"
+            android:relinquishTaskIdentity="true"
+            android:configChanges=
+                "screenSize|smallestScreenSize|screenLayout|orientation|keyboard|keyboardHidden"
+            android:visibleToInstantApps="true"/>
+
         <!-- started from TvNotificationPanel -->
         <activity
             android:name=".statusbar.tv.notifications.TvNotificationPanelActivity"
@@ -713,7 +724,7 @@
 
         <service
             android:name=".dreams.DreamOverlayService"
-            android:enabled="@bool/config_dreamOverlayServiceEnabled"
+            android:enabled="false"
             android:exported="true" />
 
         <activity android:name=".keyguard.WorkLockActivity"
diff --git a/packages/SystemUI/TEST_MAPPING b/packages/SystemUI/TEST_MAPPING
index edb5ee3..154a6fc 100644
--- a/packages/SystemUI/TEST_MAPPING
+++ b/packages/SystemUI/TEST_MAPPING
@@ -52,6 +52,17 @@
       ]
     },
     {
+      "name": "SystemUIGoogleScreenshotTests",
+      "options": [
+        {
+          "exclude-annotation": "org.junit.Ignore"
+        },
+        {
+          "exclude-annotation": "androidx.test.filters.FlakyTest"
+        }
+      ]
+    },
+    {
       // Permission indicators
       "name": "CtsPermission4TestCases",
       "options": [
diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityLaunchAnimator.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityLaunchAnimator.kt
index 323db85..8ddd430 100644
--- a/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityLaunchAnimator.kt
+++ b/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityLaunchAnimator.kt
@@ -59,31 +59,31 @@
     companion object {
         /** The timings when animating a View into an app. */
         @JvmField
-        val TIMINGS = LaunchAnimator.Timings(
-            totalDuration = 500L,
-            contentBeforeFadeOutDelay = 0L,
-            contentBeforeFadeOutDuration = 150L,
-            contentAfterFadeInDelay = 150L,
-            contentAfterFadeInDuration = 183L
-        )
+        val TIMINGS =
+            LaunchAnimator.Timings(
+                totalDuration = 500L,
+                contentBeforeFadeOutDelay = 0L,
+                contentBeforeFadeOutDuration = 150L,
+                contentAfterFadeInDelay = 150L,
+                contentAfterFadeInDuration = 183L
+            )
 
         /**
          * The timings when animating a Dialog into an app. We need to wait at least 200ms before
          * showing the app (which is under the dialog window) so that the dialog window dim is fully
          * faded out, to avoid flicker.
          */
-        val DIALOG_TIMINGS = TIMINGS.copy(
-            contentBeforeFadeOutDuration = 200L,
-            contentAfterFadeInDelay = 200L
-        )
+        val DIALOG_TIMINGS =
+            TIMINGS.copy(contentBeforeFadeOutDuration = 200L, contentAfterFadeInDelay = 200L)
 
         /** The interpolators when animating a View or a dialog into an app. */
-        val INTERPOLATORS = LaunchAnimator.Interpolators(
-            positionInterpolator = Interpolators.EMPHASIZED,
-            positionXInterpolator = createPositionXInterpolator(),
-            contentBeforeFadeOutInterpolator = Interpolators.LINEAR_OUT_SLOW_IN,
-            contentAfterFadeInInterpolator = PathInterpolator(0f, 0f, 0.6f, 1f)
-        )
+        val INTERPOLATORS =
+            LaunchAnimator.Interpolators(
+                positionInterpolator = Interpolators.EMPHASIZED,
+                positionXInterpolator = createPositionXInterpolator(),
+                contentBeforeFadeOutInterpolator = Interpolators.LINEAR_OUT_SLOW_IN,
+                contentAfterFadeInInterpolator = PathInterpolator(0f, 0f, 0.6f, 1f)
+            )
 
         /** Durations & interpolators for the navigation bar fading in & out. */
         private const val ANIMATION_DURATION_NAV_FADE_IN = 266L
@@ -98,11 +98,12 @@
         private const val LAUNCH_TIMEOUT = 1000L
 
         private fun createPositionXInterpolator(): Interpolator {
-            val path = Path().apply {
-                moveTo(0f, 0f)
-                cubicTo(0.1217f, 0.0462f, 0.15f, 0.4686f, 0.1667f, 0.66f)
-                cubicTo(0.1834f, 0.8878f, 0.1667f, 1f, 1f, 1f)
-            }
+            val path =
+                Path().apply {
+                    moveTo(0f, 0f)
+                    cubicTo(0.1217f, 0.0462f, 0.15f, 0.4686f, 0.1667f, 0.66f)
+                    cubicTo(0.1834f, 0.8878f, 0.1667f, 1f, 1f, 1f)
+                }
             return PathInterpolator(path)
         }
     }
@@ -150,29 +151,37 @@
             return
         }
 
-        val callback = this.callback ?: throw IllegalStateException(
-            "ActivityLaunchAnimator.callback must be set before using this animator")
+        val callback =
+            this.callback
+                ?: throw IllegalStateException(
+                    "ActivityLaunchAnimator.callback must be set before using this animator"
+                )
         val runner = Runner(controller)
         val hideKeyguardWithAnimation = callback.isOnKeyguard() && !showOverLockscreen
 
         // Pass the RemoteAnimationAdapter to the intent starter only if we are not hiding the
         // keyguard with the animation
-        val animationAdapter = if (!hideKeyguardWithAnimation) {
-            RemoteAnimationAdapter(
-                runner,
-                TIMINGS.totalDuration,
-                TIMINGS.totalDuration - 150 /* statusBarTransitionDelay */
-            )
-        } else {
-            null
-        }
+        val animationAdapter =
+            if (!hideKeyguardWithAnimation) {
+                RemoteAnimationAdapter(
+                    runner,
+                    TIMINGS.totalDuration,
+                    TIMINGS.totalDuration - 150 /* statusBarTransitionDelay */
+                )
+            } else {
+                null
+            }
 
         // Register the remote animation for the given package to also animate trampoline
         // activity launches.
         if (packageName != null && animationAdapter != null) {
             try {
-                ActivityTaskManager.getService().registerRemoteAnimationForNextActivityStart(
-                    packageName, animationAdapter, null /* launchCookie */)
+                ActivityTaskManager.getService()
+                    .registerRemoteAnimationForNextActivityStart(
+                        packageName,
+                        animationAdapter,
+                        null /* launchCookie */
+                    )
             } catch (e: RemoteException) {
                 Log.w(TAG, "Unable to register the remote animation", e)
             }
@@ -184,12 +193,15 @@
         // keyguard.
         val willAnimate =
             launchResult == ActivityManager.START_TASK_TO_FRONT ||
-                    launchResult == ActivityManager.START_SUCCESS ||
-                    (launchResult == ActivityManager.START_DELIVERED_TO_TOP &&
-                            hideKeyguardWithAnimation)
+                launchResult == ActivityManager.START_SUCCESS ||
+                (launchResult == ActivityManager.START_DELIVERED_TO_TOP &&
+                    hideKeyguardWithAnimation)
 
-        Log.i(TAG, "launchResult=$launchResult willAnimate=$willAnimate " +
-                "hideKeyguardWithAnimation=$hideKeyguardWithAnimation")
+        Log.i(
+            TAG,
+            "launchResult=$launchResult willAnimate=$willAnimate " +
+                "hideKeyguardWithAnimation=$hideKeyguardWithAnimation"
+        )
         controller.callOnIntentStartedOnMainThread(willAnimate)
 
         // If we expect an animation, post a timeout to cancel it in case the remote animation is
@@ -206,9 +218,7 @@
 
     private fun Controller.callOnIntentStartedOnMainThread(willAnimate: Boolean) {
         if (Looper.myLooper() != Looper.getMainLooper()) {
-            this.launchContainer.context.mainExecutor.execute {
-                this.onIntentStarted(willAnimate)
-            }
+            this.launchContainer.context.mainExecutor.execute { this.onIntentStarted(willAnimate) }
         } else {
             this.onIntentStarted(willAnimate)
         }
@@ -246,8 +256,7 @@
     }
 
     /** Create a new animation [Runner] controlled by [controller]. */
-    @VisibleForTesting
-    fun createRunner(controller: Controller): Runner = Runner(controller)
+    @VisibleForTesting fun createRunner(controller: Controller): Runner = Runner(controller)
 
     interface PendingIntentStarter {
         /**
@@ -271,19 +280,16 @@
 
     interface Listener {
         /** Called when an activity launch animation started. */
-        @JvmDefault
-        fun onLaunchAnimationStart() {}
+        @JvmDefault fun onLaunchAnimationStart() {}
 
         /**
          * Called when an activity launch animation is finished. This will be called if and only if
          * [onLaunchAnimationStart] was called earlier.
          */
-        @JvmDefault
-        fun onLaunchAnimationEnd() {}
+        @JvmDefault fun onLaunchAnimationEnd() {}
 
         /** Called when an activity launch animation made progress. */
-        @JvmDefault
-        fun onLaunchAnimationProgress(linearProgress: Float) {}
+        @JvmDefault fun onLaunchAnimationProgress(linearProgress: Float) {}
     }
 
     /**
@@ -327,6 +333,17 @@
             get() = false
 
         /**
+         * Whether the expandable controller by this [Controller] is below the launching window that
+         * is going to be animated.
+         *
+         * This should be `false` when launching an app from the shade or status bar, given that
+         * they are drawn above all apps. This is usually `true` when using this launcher in a
+         * normal app or a launcher, that are drawn below the animating activity/window.
+         */
+        val isBelowAnimatingWindow: Boolean
+            get() = false
+
+        /**
          * The intent was started. If [willAnimate] is false, nothing else will happen and the
          * animation will not be started.
          */
@@ -394,9 +411,7 @@
                 return
             }
 
-            context.mainExecutor.execute {
-                startAnimation(apps, nonApps, iCallback)
-            }
+            context.mainExecutor.execute { startAnimation(apps, nonApps, iCallback) }
         }
 
         private fun startAnimation(
@@ -408,9 +423,7 @@
                 Log.d(TAG, "Remote animation started")
             }
 
-            val window = apps?.firstOrNull {
-                it.mode == RemoteAnimationTarget.MODE_OPENING
-            }
+            val window = apps?.firstOrNull { it.mode == RemoteAnimationTarget.MODE_OPENING }
 
             if (window == null) {
                 Log.i(TAG, "Aborting the animation as no window is opening")
@@ -420,80 +433,96 @@
                 return
             }
 
-            val navigationBar = nonApps?.firstOrNull {
-                it.windowType == WindowManager.LayoutParams.TYPE_NAVIGATION_BAR
-            }
+            val navigationBar =
+                nonApps?.firstOrNull {
+                    it.windowType == WindowManager.LayoutParams.TYPE_NAVIGATION_BAR
+                }
 
             val windowBounds = window.screenSpaceBounds
-            val endState = LaunchAnimator.State(
-                top = windowBounds.top,
-                bottom = windowBounds.bottom,
-                left = windowBounds.left,
-                right = windowBounds.right
-            )
+            val endState =
+                LaunchAnimator.State(
+                    top = windowBounds.top,
+                    bottom = windowBounds.bottom,
+                    left = windowBounds.left,
+                    right = windowBounds.right
+                )
             val callback = this@ActivityLaunchAnimator.callback!!
-            val windowBackgroundColor = window.taskInfo?.let { callback.getBackgroundColor(it) }
-                    ?: window.backgroundColor
+            val windowBackgroundColor =
+                window.taskInfo?.let { callback.getBackgroundColor(it) } ?: window.backgroundColor
 
             // Make sure we use the modified timings when animating a dialog into an app.
-            val launchAnimator = if (controller.isDialogLaunch) {
-                dialogToAppAnimator
-            } else {
-                launchAnimator
-            }
+            val launchAnimator =
+                if (controller.isDialogLaunch) {
+                    dialogToAppAnimator
+                } else {
+                    launchAnimator
+                }
 
             // TODO(b/184121838): We should somehow get the top and bottom radius of the window
             // instead of recomputing isExpandingFullyAbove here.
             val isExpandingFullyAbove =
                 launchAnimator.isExpandingFullyAbove(controller.launchContainer, endState)
-            val endRadius = if (isExpandingFullyAbove) {
-                // Most of the time, expanding fully above the root view means expanding in full
-                // screen.
-                ScreenDecorationsUtils.getWindowCornerRadius(context)
-            } else {
-                // This usually means we are in split screen mode, so 2 out of 4 corners will have
-                // a radius of 0.
-                0f
-            }
+            val endRadius =
+                if (isExpandingFullyAbove) {
+                    // Most of the time, expanding fully above the root view means expanding in full
+                    // screen.
+                    ScreenDecorationsUtils.getWindowCornerRadius(context)
+                } else {
+                    // This usually means we are in split screen mode, so 2 out of 4 corners will
+                    // have
+                    // a radius of 0.
+                    0f
+                }
             endState.topCornerRadius = endRadius
             endState.bottomCornerRadius = endRadius
 
             // We animate the opening window and delegate the view expansion to [this.controller].
             val delegate = this.controller
-            val controller = object : LaunchAnimator.Controller by delegate {
-                override fun onLaunchAnimationStart(isExpandingFullyAbove: Boolean) {
-                    listeners.forEach { it.onLaunchAnimationStart() }
-                    delegate.onLaunchAnimationStart(isExpandingFullyAbove)
-                }
-
-                override fun onLaunchAnimationEnd(isExpandingFullyAbove: Boolean) {
-                    listeners.forEach { it.onLaunchAnimationEnd() }
-                    iCallback?.invoke()
-                    delegate.onLaunchAnimationEnd(isExpandingFullyAbove)
-                }
-
-                override fun onLaunchAnimationProgress(
-                    state: LaunchAnimator.State,
-                    progress: Float,
-                    linearProgress: Float
-                ) {
-                    // Apply the state to the window only if it is visible, i.e. when the expanding
-                    // view is *not* visible.
-                    if (!state.visible) {
-                        applyStateToWindow(window, state)
+            val controller =
+                object : Controller by delegate {
+                    override fun onLaunchAnimationStart(isExpandingFullyAbove: Boolean) {
+                        listeners.forEach { it.onLaunchAnimationStart() }
+                        delegate.onLaunchAnimationStart(isExpandingFullyAbove)
                     }
-                    navigationBar?.let { applyStateToNavigationBar(it, state, linearProgress) }
 
-                    listeners.forEach { it.onLaunchAnimationProgress(linearProgress) }
-                    delegate.onLaunchAnimationProgress(state, progress, linearProgress)
+                    override fun onLaunchAnimationEnd(isExpandingFullyAbove: Boolean) {
+                        listeners.forEach { it.onLaunchAnimationEnd() }
+                        iCallback?.invoke()
+                        delegate.onLaunchAnimationEnd(isExpandingFullyAbove)
+                    }
+
+                    override fun onLaunchAnimationProgress(
+                        state: LaunchAnimator.State,
+                        progress: Float,
+                        linearProgress: Float
+                    ) {
+                        // Apply the state to the window only if it is visible, i.e. when the
+                        // expanding view is *not* visible.
+                        if (!state.visible) {
+                            applyStateToWindow(window, state, linearProgress)
+                        }
+                        navigationBar?.let { applyStateToNavigationBar(it, state, linearProgress) }
+
+                        listeners.forEach { it.onLaunchAnimationProgress(linearProgress) }
+                        delegate.onLaunchAnimationProgress(state, progress, linearProgress)
+                    }
                 }
-            }
 
-            animation = launchAnimator.startAnimation(
-                controller, endState, windowBackgroundColor, drawHole = true)
+            animation =
+                launchAnimator.startAnimation(
+                    controller,
+                    endState,
+                    windowBackgroundColor,
+                    fadeOutWindowBackgroundLayer = !controller.isBelowAnimatingWindow,
+                    drawHole = !controller.isBelowAnimatingWindow,
+                )
         }
 
-        private fun applyStateToWindow(window: RemoteAnimationTarget, state: LaunchAnimator.State) {
+        private fun applyStateToWindow(
+            window: RemoteAnimationTarget,
+            state: LaunchAnimator.State,
+            linearProgress: Float,
+        ) {
             if (transactionApplierView.viewRootImpl == null || !window.leash.isValid) {
                 // Don't apply any transaction if the view root we synchronize with was detached or
                 // if the SurfaceControl associated with [window] is not valid, as
@@ -536,19 +565,38 @@
                 windowCropF.bottom.roundToInt()
             )
 
+            // The alpha of the opening window. If it opens above the expandable, then it should
+            // fade in progressively. Otherwise, it should be fully opaque and will be progressively
+            // revealed as the window background color layer above the window fades out.
+            val alpha =
+                if (controller.isBelowAnimatingWindow) {
+                    val windowProgress =
+                        LaunchAnimator.getProgress(
+                            TIMINGS,
+                            linearProgress,
+                            TIMINGS.contentAfterFadeInDelay,
+                            TIMINGS.contentAfterFadeInDuration
+                        )
+
+                    INTERPOLATORS.contentAfterFadeInInterpolator.getInterpolation(windowProgress)
+                } else {
+                    1f
+                }
+
             // The scale will also be applied to the corner radius, so we divide by the scale to
             // keep the original radius. We use the max of (topCornerRadius, bottomCornerRadius) to
             // make sure that the window does not draw itself behind the expanding view. This is
             // especially important for lock screen animations, where the window is not clipped by
             // the shade.
             val cornerRadius = maxOf(state.topCornerRadius, state.bottomCornerRadius) / scale
-            val params = SyncRtSurfaceTransactionApplier.SurfaceParams.Builder(window.leash)
-                .withAlpha(1f)
-                .withMatrix(matrix)
-                .withWindowCrop(windowCrop)
-                .withCornerRadius(cornerRadius)
-                .withVisibility(true)
-                .build()
+            val params =
+                SyncRtSurfaceTransactionApplier.SurfaceParams.Builder(window.leash)
+                    .withAlpha(alpha)
+                    .withMatrix(matrix)
+                    .withWindowCrop(windowCrop)
+                    .withCornerRadius(cornerRadius)
+                    .withVisibility(true)
+                    .build()
 
             transactionApplier.scheduleApply(params)
         }
@@ -565,14 +613,21 @@
                 return
             }
 
-            val fadeInProgress = LaunchAnimator.getProgress(TIMINGS, linearProgress,
-                ANIMATION_DELAY_NAV_FADE_IN, ANIMATION_DURATION_NAV_FADE_OUT)
+            val fadeInProgress =
+                LaunchAnimator.getProgress(
+                    TIMINGS,
+                    linearProgress,
+                    ANIMATION_DELAY_NAV_FADE_IN,
+                    ANIMATION_DURATION_NAV_FADE_OUT
+                )
 
             val params = SyncRtSurfaceTransactionApplier.SurfaceParams.Builder(navigationBar.leash)
             if (fadeInProgress > 0) {
                 matrix.reset()
                 matrix.setTranslate(
-                    0f, (state.top - navigationBar.sourceContainerBounds.top).toFloat())
+                    0f,
+                    (state.top - navigationBar.sourceContainerBounds.top).toFloat()
+                )
                 windowCrop.set(state.left, 0, state.right, state.height)
                 params
                     .withAlpha(NAV_FADE_IN_INTERPOLATOR.getInterpolation(fadeInProgress))
@@ -580,8 +635,13 @@
                     .withWindowCrop(windowCrop)
                     .withVisibility(true)
             } else {
-                val fadeOutProgress = LaunchAnimator.getProgress(TIMINGS, linearProgress, 0,
-                    ANIMATION_DURATION_NAV_FADE_OUT)
+                val fadeOutProgress =
+                    LaunchAnimator.getProgress(
+                        TIMINGS,
+                        linearProgress,
+                        0,
+                        ANIMATION_DURATION_NAV_FADE_OUT
+                    )
                 params.withAlpha(1f - NAV_FADE_OUT_INTERPOLATOR.getInterpolation(fadeOutProgress))
             }
 
diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/DelegateLaunchAnimatorController.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/DelegateLaunchAnimatorController.kt
index 258ca6b..b879ba0 100644
--- a/packages/SystemUI/animation/src/com/android/systemui/animation/DelegateLaunchAnimatorController.kt
+++ b/packages/SystemUI/animation/src/com/android/systemui/animation/DelegateLaunchAnimatorController.kt
@@ -23,4 +23,4 @@
  */
 open class DelegateLaunchAnimatorController(
     protected val delegate: ActivityLaunchAnimator.Controller
-) : ActivityLaunchAnimator.Controller by delegate
\ No newline at end of file
+) : ActivityLaunchAnimator.Controller by delegate
diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/DialogLaunchAnimator.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/DialogLaunchAnimator.kt
index 63276c9..8f9ced6 100644
--- a/packages/SystemUI/animation/src/com/android/systemui/animation/DialogLaunchAnimator.kt
+++ b/packages/SystemUI/animation/src/com/android/systemui/animation/DialogLaunchAnimator.kt
@@ -23,7 +23,6 @@
 import android.graphics.Color
 import android.graphics.Rect
 import android.os.Looper
-import android.service.dreams.IDreamManager
 import android.util.Log
 import android.util.MathUtils
 import android.view.GhostView
@@ -34,6 +33,9 @@
 import android.view.WindowManager
 import android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
 import android.widget.FrameLayout
+import com.android.internal.jank.InteractionJankMonitor
+import com.android.internal.jank.InteractionJankMonitor.Configuration
+import com.android.internal.jank.InteractionJankMonitor.CujType
 import kotlin.math.roundToInt
 
 private const val TAG = "DialogLaunchAnimator"
@@ -48,8 +50,11 @@
  * @see showFromDialog
  * @see createActivityLaunchController
  */
-class DialogLaunchAnimator @JvmOverloads constructor(
-    private val dreamManager: IDreamManager,
+class DialogLaunchAnimator
+@JvmOverloads
+constructor(
+    private val callback: Callback,
+    private val interactionJankMonitor: InteractionJankMonitor,
     private val launchAnimator: LaunchAnimator = LaunchAnimator(TIMINGS, INTERPOLATORS),
     private val isForTesting: Boolean = false
 ) {
@@ -58,9 +63,10 @@
 
         // We use the same interpolator for X and Y axis to make sure the dialog does not move out
         // of the screen bounds during the animation.
-        private val INTERPOLATORS = ActivityLaunchAnimator.INTERPOLATORS.copy(
-            positionXInterpolator = ActivityLaunchAnimator.INTERPOLATORS.positionInterpolator
-        )
+        private val INTERPOLATORS =
+            ActivityLaunchAnimator.INTERPOLATORS.copy(
+                positionXInterpolator = ActivityLaunchAnimator.INTERPOLATORS.positionInterpolator
+            )
 
         private val TAG_LAUNCH_ANIMATION_RUNNING = R.id.tag_launch_animation_running
     }
@@ -89,18 +95,22 @@
     fun showFromView(
         dialog: Dialog,
         view: View,
-        animateBackgroundBoundsChange: Boolean = false
+        cuj: DialogCuj? = null,
+        animateBackgroundBoundsChange: Boolean = false,
     ) {
         if (Looper.myLooper() != Looper.getMainLooper()) {
             throw IllegalStateException(
                 "showFromView must be called from the main thread and dialog must be created in " +
-                    "the main thread")
+                    "the main thread"
+            )
         }
 
         // If the view we are launching from belongs to another dialog, then this means the caller
         // intent is to launch a dialog from another dialog.
-        val animatedParent = openedDialogs
-            .firstOrNull { it.dialog.window.decorView.viewRootImpl == view.viewRootImpl }
+        val animatedParent =
+            openedDialogs.firstOrNull {
+                it.dialog.window.decorView.viewRootImpl == view.viewRootImpl
+            }
         val animateFrom = animatedParent?.dialogContentWithBackground ?: view
 
         // Make sure we don't run the launch animation from the same view twice at the same time.
@@ -112,16 +122,19 @@
 
         animateFrom.setTag(TAG_LAUNCH_ANIMATION_RUNNING, true)
 
-        val animatedDialog = AnimatedDialog(
+        val animatedDialog =
+            AnimatedDialog(
                 launchAnimator,
-                dreamManager,
+                callback,
+                interactionJankMonitor,
                 animateFrom,
                 onDialogDismissed = { openedDialogs.remove(it) },
                 dialog = dialog,
                 animateBackgroundBoundsChange,
                 animatedParent,
-                isForTesting
-        )
+                isForTesting,
+                cuj
+            )
 
         openedDialogs.add(animatedDialog)
         animatedDialog.start()
@@ -136,15 +149,16 @@
     fun showFromDialog(
         dialog: Dialog,
         animateFrom: Dialog,
+        cuj: DialogCuj? = null,
         animateBackgroundBoundsChange: Boolean = false
     ) {
-        val view = openedDialogs
-            .firstOrNull { it.dialog == animateFrom }
-            ?.dialogContentWithBackground
-            ?: throw IllegalStateException(
-                "The animateFrom dialog was not animated using " +
-                    "DialogLaunchAnimator.showFrom(View|Dialog)")
-        showFromView(dialog, view, animateBackgroundBoundsChange)
+        val view =
+            openedDialogs.firstOrNull { it.dialog == animateFrom }?.dialogContentWithBackground
+                ?: throw IllegalStateException(
+                    "The animateFrom dialog was not animated using " +
+                        "DialogLaunchAnimator.showFrom(View|Dialog)")
+        showFromView(
+            dialog, view, animateBackgroundBoundsChange = animateBackgroundBoundsChange, cuj = cuj)
     }
 
     /**
@@ -166,9 +180,11 @@
         view: View,
         cujType: Int? = null
     ): ActivityLaunchAnimator.Controller? {
-        val animatedDialog = openedDialogs
-            .firstOrNull { it.dialog.window.decorView.viewRootImpl == view.viewRootImpl }
-            ?: return null
+        val animatedDialog =
+            openedDialogs.firstOrNull {
+                it.dialog.window.decorView.viewRootImpl == view.viewRootImpl
+            }
+                ?: return null
 
         // At this point, we know that the intent of the caller is to dismiss the dialog to show
         // an app, so we disable the exit animation into the touch surface because we will never
@@ -177,8 +193,12 @@
 
         val dialog = animatedDialog.dialog
 
-        // Don't animate if the dialog is not showing.
-        if (!dialog.isShowing) {
+        // Don't animate if the dialog is not showing or if we are locked and going to show the
+        // bouncer.
+        if (
+            !dialog.isShowing ||
+            (!callback.isUnlocked() && !callback.isShowingAlternateAuthOnUnlock())
+        ) {
             return null
         }
 
@@ -231,7 +251,7 @@
             }
 
             private fun disableDialogDismiss() {
-                dialog.setDismissOverride { /* Do nothing */ }
+                dialog.setDismissOverride { /* Do nothing */}
             }
 
             private fun enableDialogDismiss() {
@@ -248,9 +268,9 @@
      * Ensure that all dialogs currently shown won't animate into their touch surface when
      * dismissed.
      *
-     * This is a temporary API meant to be called right before we both dismiss a dialog and start
-     * an activity, which currently does not look good if we animate the dialog into the touch
-     * surface at the same time as the activity starts.
+     * This is a temporary API meant to be called right before we both dismiss a dialog and start an
+     * activity, which currently does not look good if we animate the dialog into the touch surface
+     * at the same time as the activity starts.
      *
      * TODO(b/193634619): Remove this function and animate dialog into opening activity instead.
      */
@@ -268,18 +288,43 @@
             ?.let { it.touchSurface = it.prepareForStackDismiss() }
         dialog.dismiss()
     }
+
+    interface Callback {
+        /** Whether the device is currently in dreaming (screensaver) mode. */
+        fun isDreaming(): Boolean
+
+        /**
+         * Whether the device is currently unlocked, i.e. if it is *not* on the keyguard or if the
+         * keyguard can be dismissed.
+         */
+        fun isUnlocked(): Boolean
+
+        /**
+         * Whether we are going to show alternate authentication (like UDFPS) instead of the
+         * traditional bouncer when unlocking the device.
+         */
+        fun isShowingAlternateAuthOnUnlock(): Boolean
+    }
 }
 
+/**
+ * The CUJ interaction associated with opening the dialog.
+ *
+ * The optional tag indicates the specific dialog being opened.
+ */
+data class DialogCuj(@CujType val cujType: Int, val tag: String? = null)
+
 private class AnimatedDialog(
     private val launchAnimator: LaunchAnimator,
-    private val dreamManager: IDreamManager,
+    private val callback: DialogLaunchAnimator.Callback,
+    private val interactionJankMonitor: InteractionJankMonitor,
 
     /** The view that triggered the dialog after being tapped. */
     var touchSurface: View,
 
     /**
-     * A callback that will be called with this [AnimatedDialog] after the dialog was
-     * dismissed and the exit animation is done.
+     * A callback that will be called with this [AnimatedDialog] after the dialog was dismissed and
+     * the exit animation is done.
      */
     private val onDialogDismissed: (AnimatedDialog) -> Unit,
 
@@ -295,14 +340,17 @@
     /**
      * Whether synchronization should be disabled, which can be useful if we are running in a test.
      */
-    private val forceDisableSynchronization: Boolean
+    private val forceDisableSynchronization: Boolean,
+
+    /** Interaction to which the dialog animation is associated. */
+    private val cuj: DialogCuj? = null
 ) {
     /**
      * The DecorView of this dialog window.
      *
      * Note that we access this DecorView lazily to avoid accessing it before the dialog is created,
      * which can sometimes cause crashes (e.g. with the Cast dialog).
-      */
+     */
     private val decorView by lazy { dialog.window!!.decorView as ViewGroup }
 
     /**
@@ -313,9 +361,7 @@
      */
     var dialogContentWithBackground: ViewGroup? = null
 
-    /**
-     * The background color of [dialog], taking into consideration its window background color.
-     */
+    /** The background color of [dialog], taking into consideration its window background color. */
     private var originalDialogBackgroundColor = Color.BLACK
 
     /**
@@ -333,11 +379,12 @@
     private var isOriginalDialogViewLaidOut = false
 
     /** A layout listener to animate the dialog height change. */
-    private val backgroundLayoutListener = if (animateBackgroundBoundsChange) {
-        AnimatedBoundsLayoutListener()
-    } else {
-        null
-    }
+    private val backgroundLayoutListener =
+        if (animateBackgroundBoundsChange) {
+            AnimatedBoundsLayoutListener()
+        } else {
+            null
+        }
 
     /*
      * A layout listener in case the dialog (window) size changes (for instance because of a
@@ -346,6 +393,14 @@
     private var decorViewLayoutListener: View.OnLayoutChangeListener? = null
 
     fun start() {
+        if (cuj != null) {
+            val config = Configuration.Builder.withView(cuj.cujType, touchSurface)
+            if (cuj.tag != null) {
+                config.setTag(cuj.tag)
+            }
+            interactionJankMonitor.begin(config)
+        }
+
         // Create the dialog so that its onCreate() method is called, which usually sets the dialog
         // content.
         dialog.create()
@@ -353,99 +408,117 @@
         val window = dialog.window!!
         val isWindowFullScreen =
             window.attributes.width == MATCH_PARENT && window.attributes.height == MATCH_PARENT
-        val dialogContentWithBackground = if (isWindowFullScreen) {
-            // If the dialog window is already fullscreen, then we look for the first ViewGroup that
-            // has a background (and is not the DecorView, which always has a background) and
-            // animate towards that ViewGroup given that this is probably what represents the actual
-            // dialog view.
-            var viewGroupWithBackground: ViewGroup? = null
-            for (i in 0 until decorView.childCount) {
-                viewGroupWithBackground = findFirstViewGroupWithBackground(decorView.getChildAt(i))
-                if (viewGroupWithBackground != null) {
-                    break
+        val dialogContentWithBackground =
+            if (isWindowFullScreen) {
+                // If the dialog window is already fullscreen, then we look for the first ViewGroup
+                // that has a background (and is not the DecorView, which always has a background)
+                // and animate towards that ViewGroup given that this is probably what represents
+                // the actual dialog view.
+                var viewGroupWithBackground: ViewGroup? = null
+                for (i in 0 until decorView.childCount) {
+                    viewGroupWithBackground =
+                        findFirstViewGroupWithBackground(decorView.getChildAt(i))
+                    if (viewGroupWithBackground != null) {
+                        break
+                    }
                 }
-            }
 
-            // Animate that view with the background. Throw if we didn't find one, because otherwise
-            // it's not clear what we should animate.
-            viewGroupWithBackground
-                ?: throw IllegalStateException("Unable to find ViewGroup with background")
-        } else {
-            // We will make the dialog window (and therefore its DecorView) fullscreen to make it
-            // possible to animate outside its bounds.
-            //
-            // Before that, we add a new View as a child of the DecorView with the same size and
-            // gravity as that DecorView, then we add all original children of the DecorView to that
-            // new View. Finally we remove the background of the DecorView and add it to the new
-            // View, then we make the DecorView fullscreen. This new View now acts as a fake (non
-            // fullscreen) window.
-            //
-            // On top of that, we also add a fullscreen transparent background between the DecorView
-            // and the view that we added so that we can dismiss the dialog when this view is
-            // clicked. This is necessary because DecorView overrides onTouchEvent and therefore we
-            // can't set the click listener directly on the (now fullscreen) DecorView.
-            val fullscreenTransparentBackground = FrameLayout(dialog.context)
-            decorView.addView(
-                fullscreenTransparentBackground,
-                0 /* index */,
-                FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT)
-            )
-
-            val dialogContentWithBackground = FrameLayout(dialog.context)
-            dialogContentWithBackground.background = decorView.background
-
-            // Make the window background transparent. Note that setting the window (or DecorView)
-            // background drawable to null leads to issues with background color (not being
-            // transparent) or with insets that are not refreshed. Therefore we need to set it to
-            // something not null, hence we are using android.R.color.transparent here.
-            window.setBackgroundDrawableResource(android.R.color.transparent)
-
-            // Close the dialog when clicking outside of it.
-            fullscreenTransparentBackground.setOnClickListener { dialog.dismiss() }
-            dialogContentWithBackground.isClickable = true
-
-            // Make sure the transparent and dialog backgrounds are not focusable by accessibility
-            // features.
-            fullscreenTransparentBackground.importantForAccessibility =
-                View.IMPORTANT_FOR_ACCESSIBILITY_NO
-            dialogContentWithBackground.importantForAccessibility =
-                View.IMPORTANT_FOR_ACCESSIBILITY_NO
-
-            fullscreenTransparentBackground.addView(
-                dialogContentWithBackground,
-                FrameLayout.LayoutParams(
-                    window.attributes.width,
-                    window.attributes.height,
-                    window.attributes.gravity
+                // Animate that view with the background. Throw if we didn't find one, because
+                // otherwise
+                // it's not clear what we should animate.
+                viewGroupWithBackground
+                    ?: throw IllegalStateException("Unable to find ViewGroup with background")
+            } else {
+                // We will make the dialog window (and therefore its DecorView) fullscreen to make
+                // it possible to animate outside its bounds.
+                //
+                // Before that, we add a new View as a child of the DecorView with the same size and
+                // gravity as that DecorView, then we add all original children of the DecorView to
+                // that new View. Finally we remove the background of the DecorView and add it to
+                // the new View, then we make the DecorView fullscreen. This new View now acts as a
+                // fake (non fullscreen) window.
+                //
+                // On top of that, we also add a fullscreen transparent background between the
+                // DecorView and the view that we added so that we can dismiss the dialog when this
+                // view is clicked. This is necessary because DecorView overrides onTouchEvent and
+                // therefore we can't set the click listener directly on the (now fullscreen)
+                // DecorView.
+                val fullscreenTransparentBackground = FrameLayout(dialog.context)
+                decorView.addView(
+                    fullscreenTransparentBackground,
+                    0 /* index */,
+                    FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT)
                 )
-            )
 
-            // Move all original children of the DecorView to the new View we just added.
-            for (i in 1 until decorView.childCount) {
-                val view = decorView.getChildAt(1)
-                decorView.removeViewAt(1)
-                dialogContentWithBackground.addView(view)
-            }
+                val dialogContentWithBackground = FrameLayout(dialog.context)
+                dialogContentWithBackground.background = decorView.background
 
-            // Make the window fullscreen and add a layout listener to ensure it stays fullscreen.
-            window.setLayout(MATCH_PARENT, MATCH_PARENT)
-            decorViewLayoutListener = View.OnLayoutChangeListener {
-                v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom ->
-                if (window.attributes.width != MATCH_PARENT ||
-                    window.attributes.height != MATCH_PARENT) {
-                    // The dialog size changed, copy its size to dialogContentWithBackground and
-                    // make the dialog window full screen again.
-                    val layoutParams = dialogContentWithBackground.layoutParams
-                    layoutParams.width = window.attributes.width
-                    layoutParams.height = window.attributes.height
-                    dialogContentWithBackground.layoutParams = layoutParams
-                    window.setLayout(MATCH_PARENT, MATCH_PARENT)
+                // Make the window background transparent. Note that setting the window (or
+                // DecorView) background drawable to null leads to issues with background color (not
+                // being transparent) or with insets that are not refreshed. Therefore we need to
+                // set it to something not null, hence we are using android.R.color.transparent
+                // here.
+                window.setBackgroundDrawableResource(android.R.color.transparent)
+
+                // Close the dialog when clicking outside of it.
+                fullscreenTransparentBackground.setOnClickListener { dialog.dismiss() }
+                dialogContentWithBackground.isClickable = true
+
+                // Make sure the transparent and dialog backgrounds are not focusable by
+                // accessibility
+                // features.
+                fullscreenTransparentBackground.importantForAccessibility =
+                    View.IMPORTANT_FOR_ACCESSIBILITY_NO
+                dialogContentWithBackground.importantForAccessibility =
+                    View.IMPORTANT_FOR_ACCESSIBILITY_NO
+
+                fullscreenTransparentBackground.addView(
+                    dialogContentWithBackground,
+                    FrameLayout.LayoutParams(
+                        window.attributes.width,
+                        window.attributes.height,
+                        window.attributes.gravity
+                    )
+                )
+
+                // Move all original children of the DecorView to the new View we just added.
+                for (i in 1 until decorView.childCount) {
+                    val view = decorView.getChildAt(1)
+                    decorView.removeViewAt(1)
+                    dialogContentWithBackground.addView(view)
                 }
-            }
-            decorView.addOnLayoutChangeListener(decorViewLayoutListener)
 
-            dialogContentWithBackground
-        }
+                // Make the window fullscreen and add a layout listener to ensure it stays
+                // fullscreen.
+                window.setLayout(MATCH_PARENT, MATCH_PARENT)
+                decorViewLayoutListener =
+                    View.OnLayoutChangeListener {
+                        v,
+                        left,
+                        top,
+                        right,
+                        bottom,
+                        oldLeft,
+                        oldTop,
+                        oldRight,
+                        oldBottom ->
+                        if (
+                            window.attributes.width != MATCH_PARENT ||
+                                window.attributes.height != MATCH_PARENT
+                        ) {
+                            // The dialog size changed, copy its size to dialogContentWithBackground
+                            // and make the dialog window full screen again.
+                            val layoutParams = dialogContentWithBackground.layoutParams
+                            layoutParams.width = window.attributes.width
+                            layoutParams.height = window.attributes.height
+                            dialogContentWithBackground.layoutParams = layoutParams
+                            window.setLayout(MATCH_PARENT, MATCH_PARENT)
+                        }
+                    }
+                decorView.addOnLayoutChangeListener(decorViewLayoutListener)
+
+                dialogContentWithBackground
+            }
         this.dialogContentWithBackground = dialogContentWithBackground
         dialogContentWithBackground.setTag(R.id.tag_dialog_background, true)
 
@@ -453,7 +526,8 @@
         originalDialogBackgroundColor =
             GhostedViewLaunchAnimatorController.findGradientDrawable(background)
                 ?.color
-                ?.defaultColor ?: Color.BLACK
+                ?.defaultColor
+                ?: Color.BLACK
 
         // Make the background view invisible until we start the animation. We use the transition
         // visibility like GhostView does so that we don't mess up with the accessibility tree (see
@@ -461,11 +535,20 @@
         dialogContentWithBackground.setTransitionVisibility(View.INVISIBLE)
 
         // Make sure the dialog is visible instantly and does not do any window animation.
-        window.attributes.windowAnimations = R.style.Animation_LaunchAnimation
+        val attributes = window.attributes
+        attributes.windowAnimations = R.style.Animation_LaunchAnimation
 
         // Ensure that the animation is not clipped by the display cut-out when animating this
         // dialog into an app.
-        window.attributes.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
+        attributes.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
+
+        // Ensure that the animation is not clipped by the navigation/task bars when animating this
+        // dialog into an app.
+        val wasFittingNavigationBars =
+            attributes.fitInsetsTypes and WindowInsets.Type.navigationBars() != 0
+        attributes.fitInsetsTypes =
+            attributes.fitInsetsTypes and WindowInsets.Type.navigationBars().inv()
+
         window.attributes = window.attributes
 
         // We apply the insets ourselves to make sure that the paddings are set on the correct
@@ -473,30 +556,38 @@
         window.setDecorFitsSystemWindows(false)
         val viewWithInsets = (dialogContentWithBackground.parent as ViewGroup)
         viewWithInsets.setOnApplyWindowInsetsListener { view, windowInsets ->
-            val insets = windowInsets.getInsets(WindowInsets.Type.displayCutout())
+            val type = if (wasFittingNavigationBars) {
+                WindowInsets.Type.displayCutout() or WindowInsets.Type.navigationBars()
+            } else {
+                WindowInsets.Type.displayCutout()
+            }
+
+            val insets = windowInsets.getInsets(type)
             view.setPadding(insets.left, insets.top, insets.right, insets.bottom)
             WindowInsets.CONSUMED
         }
 
         // Start the animation once the background view is properly laid out.
-        dialogContentWithBackground.addOnLayoutChangeListener(object : View.OnLayoutChangeListener {
-            override fun onLayoutChange(
-                v: View,
-                left: Int,
-                top: Int,
-                right: Int,
-                bottom: Int,
-                oldLeft: Int,
-                oldTop: Int,
-                oldRight: Int,
-                oldBottom: Int
-            ) {
-                dialogContentWithBackground.removeOnLayoutChangeListener(this)
+        dialogContentWithBackground.addOnLayoutChangeListener(
+            object : View.OnLayoutChangeListener {
+                override fun onLayoutChange(
+                    v: View,
+                    left: Int,
+                    top: Int,
+                    right: Int,
+                    bottom: Int,
+                    oldLeft: Int,
+                    oldTop: Int,
+                    oldRight: Int,
+                    oldBottom: Int
+                ) {
+                    dialogContentWithBackground.removeOnLayoutChangeListener(this)
 
-                isOriginalDialogViewLaidOut = true
-                maybeStartLaunchAnimation()
+                    isOriginalDialogViewLaidOut = true
+                    maybeStartLaunchAnimation()
+                }
             }
-        })
+        )
 
         // Disable the dim. We will enable it once we start the animation.
         window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
@@ -522,10 +613,12 @@
         // Create a ghost of the touch surface (which will make the touch surface invisible) and add
         // it to the host dialog. We trigger a one off synchronization to make sure that this is
         // done in sync between the two different windows.
-        synchronizeNextDraw(then = {
-            isTouchSurfaceGhostDrawn = true
-            maybeStartLaunchAnimation()
-        })
+        synchronizeNextDraw(
+            then = {
+                isTouchSurfaceGhostDrawn = true
+                maybeStartLaunchAnimation()
+            }
+        )
         GhostView.addGhost(touchSurface, decorView)
 
         // The ghost of the touch surface was just created, so the touch surface is currently
@@ -587,14 +680,13 @@
             onLaunchAnimationEnd = {
                 touchSurface.setTag(R.id.tag_launch_animation_running, null)
 
-                // We hide the touch surface when the dialog is showing. We will make this
-                // view visible again when dismissing the dialog.
+                // We hide the touch surface when the dialog is showing. We will make this view
+                // visible again when dismissing the dialog.
                 touchSurface.visibility = View.INVISIBLE
 
                 isLaunching = false
 
-                // dismiss was called during the animation, dismiss again now to actually
-                // dismiss.
+                // dismiss was called during the animation, dismiss again now to actually dismiss.
                 if (dismissRequested) {
                     dialog.dismiss()
                 }
@@ -603,9 +695,11 @@
                 // at the end of the launch animation, because the lauch animation already correctly
                 // handles bounds changes.
                 if (backgroundLayoutListener != null) {
-                    dialogContentWithBackground!!
-                        .addOnLayoutChangeListener(backgroundLayoutListener)
+                    dialogContentWithBackground!!.addOnLayoutChangeListener(
+                        backgroundLayoutListener
+                    )
                 }
+                cuj?.run { interactionJankMonitor.end(cujType) }
             }
         )
     }
@@ -681,16 +775,19 @@
                 dialogContentWithBackground.visibility = View.INVISIBLE
 
                 if (backgroundLayoutListener != null) {
-                    dialogContentWithBackground
-                        .removeOnLayoutChangeListener(backgroundLayoutListener)
+                    dialogContentWithBackground.removeOnLayoutChangeListener(
+                        backgroundLayoutListener
+                    )
                 }
 
                 // Make sure that the removal of the ghost and making the touch surface visible is
                 // done at the same time.
-                synchronizeNextDraw(then = {
-                    onAnimationFinished(true /* instantDismiss */)
-                    onDialogDismissed(this@AnimatedDialog)
-                })
+                synchronizeNextDraw(
+                    then = {
+                        onAnimationFinished(true /* instantDismiss */)
+                        onDialogDismissed(this@AnimatedDialog)
+                    }
+                )
             }
         )
     }
@@ -710,56 +807,57 @@
         endViewController.launchContainer = decorView
 
         val endState = endViewController.createAnimatorState()
-        val controller = object : LaunchAnimator.Controller {
-            override var launchContainer: ViewGroup
-                get() = startViewController.launchContainer
-                set(value) {
-                    startViewController.launchContainer = value
-                    endViewController.launchContainer = value
+        val controller =
+            object : LaunchAnimator.Controller {
+                override var launchContainer: ViewGroup
+                    get() = startViewController.launchContainer
+                    set(value) {
+                        startViewController.launchContainer = value
+                        endViewController.launchContainer = value
+                    }
+
+                override fun createAnimatorState(): LaunchAnimator.State {
+                    return startViewController.createAnimatorState()
                 }
 
-            override fun createAnimatorState(): LaunchAnimator.State {
-                return startViewController.createAnimatorState()
+                override fun onLaunchAnimationStart(isExpandingFullyAbove: Boolean) {
+                    // During launch, onLaunchAnimationStart will be used to remove the temporary
+                    // touch surface ghost so it is important to call this before calling
+                    // onLaunchAnimationStart on the controller (which will create its own ghost).
+                    onLaunchAnimationStart()
+
+                    startViewController.onLaunchAnimationStart(isExpandingFullyAbove)
+                    endViewController.onLaunchAnimationStart(isExpandingFullyAbove)
+                }
+
+                override fun onLaunchAnimationEnd(isExpandingFullyAbove: Boolean) {
+                    startViewController.onLaunchAnimationEnd(isExpandingFullyAbove)
+                    endViewController.onLaunchAnimationEnd(isExpandingFullyAbove)
+
+                    onLaunchAnimationEnd()
+                }
+
+                override fun onLaunchAnimationProgress(
+                    state: LaunchAnimator.State,
+                    progress: Float,
+                    linearProgress: Float
+                ) {
+                    startViewController.onLaunchAnimationProgress(state, progress, linearProgress)
+
+                    // The end view is visible only iff the starting view is not visible.
+                    state.visible = !state.visible
+                    endViewController.onLaunchAnimationProgress(state, progress, linearProgress)
+
+                    // If the dialog content is complex, its dimension might change during the
+                    // launch animation. The animation end position might also change during the
+                    // exit animation, for instance when locking the phone when the dialog is open.
+                    // Therefore we update the end state to the new position/size. Usually the
+                    // dialog dimension or position will change in the early frames, so changing the
+                    // end state shouldn't really be noticeable.
+                    endViewController.fillGhostedViewState(endState)
+                }
             }
 
-            override fun onLaunchAnimationStart(isExpandingFullyAbove: Boolean) {
-                // During launch, onLaunchAnimationStart will be used to remove the temporary touch
-                // surface ghost so it is important to call this before calling
-                // onLaunchAnimationStart on the controller (which will create its own ghost).
-                onLaunchAnimationStart()
-
-                startViewController.onLaunchAnimationStart(isExpandingFullyAbove)
-                endViewController.onLaunchAnimationStart(isExpandingFullyAbove)
-            }
-
-            override fun onLaunchAnimationEnd(isExpandingFullyAbove: Boolean) {
-                startViewController.onLaunchAnimationEnd(isExpandingFullyAbove)
-                endViewController.onLaunchAnimationEnd(isExpandingFullyAbove)
-
-                onLaunchAnimationEnd()
-            }
-
-            override fun onLaunchAnimationProgress(
-                state: LaunchAnimator.State,
-                progress: Float,
-                linearProgress: Float
-            ) {
-                startViewController.onLaunchAnimationProgress(state, progress, linearProgress)
-
-                // The end view is visible only iff the starting view is not visible.
-                state.visible = !state.visible
-                endViewController.onLaunchAnimationProgress(state, progress, linearProgress)
-
-                // If the dialog content is complex, its dimension might change during the launch
-                // animation. The animation end position might also change during the exit
-                // animation, for instance when locking the phone when the dialog is open. Therefore
-                // we update the end state to the new position/size. Usually the dialog dimension or
-                // position will change in the early frames, so changing the end state shouldn't
-                // really be noticeable.
-                endViewController.fillGhostedViewState(endState)
-            }
-        }
-
         launchAnimator.startAnimation(controller, endState, originalDialogBackgroundColor)
     }
 
@@ -772,7 +870,7 @@
 
         // If we are dreaming, the dialog was probably closed because of that so we don't animate
         // into the touchSurface.
-        if (dreamManager.isDreaming) {
+        if (callback.isDreaming()) {
             return false
         }
 
@@ -791,7 +889,7 @@
         return (touchSurface.parent as? View)?.isShown ?: true
     }
 
-    /** A layout listener to animate the change of bounds of the dialog background.  */
+    /** A layout listener to animate the change of bounds of the dialog background. */
     class AnimatedBoundsLayoutListener : View.OnLayoutChangeListener {
         companion object {
             private const val ANIMATION_DURATION = 500L
@@ -836,32 +934,35 @@
             currentAnimator?.cancel()
             currentAnimator = null
 
-            val animator = ValueAnimator.ofFloat(0f, 1f).apply {
-                duration = ANIMATION_DURATION
-                interpolator = Interpolators.STANDARD
+            val animator =
+                ValueAnimator.ofFloat(0f, 1f).apply {
+                    duration = ANIMATION_DURATION
+                    interpolator = Interpolators.STANDARD
 
-                addListener(object : AnimatorListenerAdapter() {
-                    override fun onAnimationEnd(animation: Animator) {
-                        currentAnimator = null
+                    addListener(
+                        object : AnimatorListenerAdapter() {
+                            override fun onAnimationEnd(animation: Animator) {
+                                currentAnimator = null
+                            }
+                        }
+                    )
+
+                    addUpdateListener { animatedValue ->
+                        val progress = animatedValue.animatedFraction
+
+                        // Compute new bounds.
+                        bounds.left = MathUtils.lerp(startLeft, left, progress).roundToInt()
+                        bounds.top = MathUtils.lerp(startTop, top, progress).roundToInt()
+                        bounds.right = MathUtils.lerp(startRight, right, progress).roundToInt()
+                        bounds.bottom = MathUtils.lerp(startBottom, bottom, progress).roundToInt()
+
+                        // Set the new bounds.
+                        view.left = bounds.left
+                        view.top = bounds.top
+                        view.right = bounds.right
+                        view.bottom = bounds.bottom
                     }
-                })
-
-                addUpdateListener { animatedValue ->
-                    val progress = animatedValue.animatedFraction
-
-                    // Compute new bounds.
-                    bounds.left = MathUtils.lerp(startLeft, left, progress).roundToInt()
-                    bounds.top = MathUtils.lerp(startTop, top, progress).roundToInt()
-                    bounds.right = MathUtils.lerp(startRight, right, progress).roundToInt()
-                    bounds.bottom = MathUtils.lerp(startBottom, bottom, progress).roundToInt()
-
-                    // Set the new bounds.
-                    view.left = bounds.left
-                    view.top = bounds.top
-                    view.right = bounds.right
-                    view.bottom = bounds.bottom
                 }
-            }
 
             currentAnimator = animator
             animator.start()
diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/FontInterpolator.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/FontInterpolator.kt
new file mode 100644
index 0000000..3d341af
--- /dev/null
+++ b/packages/SystemUI/animation/src/com/android/systemui/animation/FontInterpolator.kt
@@ -0,0 +1,222 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.animation
+
+import android.graphics.fonts.Font
+import android.graphics.fonts.FontVariationAxis
+import android.util.MathUtils
+
+private const val TAG_WGHT = "wght"
+private const val TAG_ITAL = "ital"
+
+private const val FONT_WEIGHT_MAX = 1000f
+private const val FONT_WEIGHT_MIN = 0f
+private const val FONT_WEIGHT_ANIMATION_STEP = 10f
+private const val FONT_WEIGHT_DEFAULT_VALUE = 400f
+
+private const val FONT_ITALIC_MAX = 1f
+private const val FONT_ITALIC_MIN = 0f
+private const val FONT_ITALIC_ANIMATION_STEP = 0.1f
+private const val FONT_ITALIC_DEFAULT_VALUE = 0f
+
+/**
+ * Provide interpolation of two fonts by adjusting font variation settings.
+ */
+class FontInterpolator {
+
+    /**
+     * Cache key for the interpolated font.
+     *
+     * This class is mutable for recycling.
+     */
+    private data class InterpKey(var l: Font?, var r: Font?, var progress: Float) {
+        fun set(l: Font, r: Font, progress: Float) {
+            this.l = l
+            this.r = r
+            this.progress = progress
+        }
+    }
+
+    /**
+     * Cache key for the font that has variable font.
+     *
+     * This class is mutable for recycling.
+     */
+    private data class VarFontKey(
+        var sourceId: Int,
+        var index: Int,
+        val sortedAxes: MutableList<FontVariationAxis>
+    ) {
+        constructor(font: Font, axes: List<FontVariationAxis>) :
+                this(font.sourceIdentifier,
+                        font.ttcIndex,
+                        axes.toMutableList().apply { sortBy { it.tag } }
+                )
+
+        fun set(font: Font, axes: List<FontVariationAxis>) {
+            sourceId = font.sourceIdentifier
+            index = font.ttcIndex
+            sortedAxes.clear()
+            sortedAxes.addAll(axes)
+            sortedAxes.sortBy { it.tag }
+        }
+    }
+
+    // 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>()
+
+    // Mutable keys for recycling.
+    private val tmpInterpKey = InterpKey(null, null, 0f)
+    private val tmpVarFontKey = VarFontKey(0, 0, mutableListOf())
+
+    /**
+     * Linear interpolate the font variation settings.
+     */
+    fun lerp(start: Font, end: Font, progress: Float): Font {
+        if (progress == 0f) {
+            return start
+        } else if (progress == 1f) {
+            return end
+        }
+
+        val startAxes = start.axes ?: EMPTY_AXES
+        val endAxes = end.axes ?: EMPTY_AXES
+
+        if (startAxes.isEmpty() && endAxes.isEmpty()) {
+            return start
+        }
+
+        // Check we already know the result. This is commonly happens since we draws the different
+        // text chunks with the same font.
+        tmpInterpKey.set(start, end, progress)
+        val cachedFont = interpCache[tmpInterpKey]
+        if (cachedFont != null) {
+            return cachedFont
+        }
+
+        // General axes interpolation takes O(N log N), this is came from sorting the axes. Usually
+        // this doesn't take much time since the variation axes is usually up to 5. If we need to
+        // support more number of axes, we may want to preprocess the font and store the sorted axes
+        // and also pre-fill the missing axes value with default value from 'fvar' table.
+        val newAxes = lerp(startAxes, endAxes) { tag, startValue, endValue ->
+            when (tag) {
+                // TODO: Good to parse 'fvar' table for retrieving default value.
+                TAG_WGHT -> adjustWeight(
+                        MathUtils.lerp(
+                                startValue ?: FONT_WEIGHT_DEFAULT_VALUE,
+                                endValue ?: FONT_WEIGHT_DEFAULT_VALUE,
+                                progress))
+                TAG_ITAL -> adjustItalic(
+                        MathUtils.lerp(
+                                startValue ?: FONT_ITALIC_DEFAULT_VALUE,
+                                endValue ?: FONT_ITALIC_DEFAULT_VALUE,
+                                progress))
+                else -> {
+                    require(startValue != null && endValue != null) {
+                        "Unable to interpolate due to unknown default axes value : $tag"
+                    }
+                    MathUtils.lerp(startValue, endValue, progress)
+                }
+            }
+        }
+
+        // Check if we already make font for this axes. This is typically happens if the animation
+        // happens backward.
+        tmpVarFontKey.set(start, newAxes)
+        val axesCachedFont = verFontCache[tmpVarFontKey]
+        if (axesCachedFont != null) {
+            interpCache[InterpKey(start, end, progress)] = axesCachedFont
+            return axesCachedFont
+        }
+
+        // This is the first time to make the font for the axes. Build and store it to the cache.
+        // 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
+        return newFont
+    }
+
+    private fun lerp(
+        start: Array<FontVariationAxis>,
+        end: Array<FontVariationAxis>,
+        filter: (tag: String, left: Float?, right: Float?) -> Float
+    ): List<FontVariationAxis> {
+        // Safe to modify result of Font#getAxes since it returns cloned object.
+        start.sortBy { axis -> axis.tag }
+        end.sortBy { axis -> axis.tag }
+
+        val result = mutableListOf<FontVariationAxis>()
+        var i = 0
+        var j = 0
+        while (i < start.size || j < end.size) {
+            val tagA = if (i < start.size) start[i].tag else null
+            val tagB = if (j < end.size) end[j].tag else null
+
+            val comp = when {
+                tagA == null -> 1
+                tagB == null -> -1
+                else -> tagA.compareTo(tagB)
+            }
+
+            val axis = when {
+                comp == 0 -> {
+                    val v = filter(tagA!!, start[i++].styleValue, end[j++].styleValue)
+                    FontVariationAxis(tagA, v)
+                }
+                comp < 0 -> {
+                    val v = filter(tagA!!, start[i++].styleValue, null)
+                    FontVariationAxis(tagA, v)
+                }
+                else -> { // comp > 0
+                    val v = filter(tagB!!, null, end[j++].styleValue)
+                    FontVariationAxis(tagB, v)
+                }
+            }
+
+            result.add(axis)
+        }
+        return result
+    }
+
+    // For the performance reasons, we animate weight with FONT_WEIGHT_ANIMATION_STEP. This helps
+    // Cache hit ratio in the Skia glyph cache.
+    private fun adjustWeight(value: Float) =
+            coerceInWithStep(value, FONT_WEIGHT_MIN, FONT_WEIGHT_MAX, FONT_WEIGHT_ANIMATION_STEP)
+
+    // For the performance reasons, we animate italic with FONT_ITALIC_ANIMATION_STEP. This helps
+    // Cache hit ratio in the Skia glyph cache.
+    private fun adjustItalic(value: Float) =
+            coerceInWithStep(value, FONT_ITALIC_MIN, FONT_ITALIC_MAX, FONT_ITALIC_ANIMATION_STEP)
+
+    private fun coerceInWithStep(v: Float, min: Float, max: Float, step: Float) =
+            (v.coerceIn(min, max) / step).toInt() * step
+
+    companion object {
+        private val EMPTY_AXES = arrayOf<FontVariationAxis>()
+
+        // Returns true if given two font instance can be interpolated.
+        fun canInterpolate(start: Font, end: Font) =
+                start.ttcIndex == end.ttcIndex && start.sourceIdentifier == end.sourceIdentifier
+    }
+}
diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/GhostedViewLaunchAnimatorController.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/GhostedViewLaunchAnimatorController.kt
index 3f7e0f0..eb000ad 100644
--- a/packages/SystemUI/animation/src/com/android/systemui/animation/GhostedViewLaunchAnimatorController.kt
+++ b/packages/SystemUI/animation/src/com/android/systemui/animation/GhostedViewLaunchAnimatorController.kt
@@ -49,17 +49,16 @@
  * Note: Avoid instantiating this directly and call [ActivityLaunchAnimator.Controller.fromView]
  * whenever possible instead.
  */
-open class GhostedViewLaunchAnimatorController(
+open class GhostedViewLaunchAnimatorController @JvmOverloads constructor(
     /** The view that will be ghosted and from which the background will be extracted. */
     private val ghostedView: View,
 
     /** The [InteractionJankMonitor.CujType] associated to this animation. */
     private val cujType: Int? = null,
-    private var interactionJankMonitor: InteractionJankMonitor? = null
+    private var interactionJankMonitor: InteractionJankMonitor =
+        InteractionJankMonitor.getInstance(),
 ) : ActivityLaunchAnimator.Controller {
 
-    constructor(view: View, type: Int) : this(view, type, null)
-
     /** The container to which we will add the ghost view and expanding background. */
     override var launchContainer = ghostedView.rootView as ViewGroup
     private val launchContainerOverlay: ViewGroupOverlay
@@ -105,9 +104,7 @@
             }
 
             // Perform a BFS to find the largest View with background.
-            val views = LinkedList<View>().apply {
-                add(view)
-            }
+            val views = LinkedList<View>().apply { add(view) }
 
             while (views.isNotEmpty()) {
                 val v = views.removeFirst()
@@ -161,10 +158,11 @@
     }
 
     override fun createAnimatorState(): LaunchAnimator.State {
-        val state = LaunchAnimator.State(
-            topCornerRadius = getCurrentTopCornerRadius(),
-            bottomCornerRadius = getCurrentBottomCornerRadius()
-        )
+        val state =
+            LaunchAnimator.State(
+                topCornerRadius = getCurrentTopCornerRadius(),
+                bottomCornerRadius = getCurrentBottomCornerRadius()
+            )
         fillGhostedViewState(state)
         return state
     }
@@ -204,7 +202,7 @@
         val matrix = ghostView?.animationMatrix ?: Matrix.IDENTITY_MATRIX
         matrix.getValues(initialGhostViewMatrixValues)
 
-        cujType?.let { interactionJankMonitor?.begin(ghostedView, it) }
+        cujType?.let { interactionJankMonitor.begin(ghostedView, it) }
     }
 
     override fun onLaunchAnimationProgress(
@@ -255,13 +253,14 @@
 
         launchContainer.getLocationOnScreen(launchContainerLocation)
         ghostViewMatrix.postScale(
-            scale, scale,
+            scale,
+            scale,
             ghostedViewState.centerX - launchContainerLocation[0],
             ghostedViewState.centerY - launchContainerLocation[1]
         )
         ghostViewMatrix.postTranslate(
-                (leftChange + rightChange) / 2f,
-                (topChange + bottomChange) / 2f
+            (leftChange + rightChange) / 2f,
+            (topChange + bottomChange) / 2f
         )
         ghostView.animationMatrix = ghostViewMatrix
 
@@ -289,7 +288,7 @@
             return
         }
 
-        cujType?.let { interactionJankMonitor?.end(it) }
+        cujType?.let { interactionJankMonitor.end(it) }
 
         backgroundDrawable?.wrapped?.alpha = startBackgroundAlpha
 
diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/LaunchAnimator.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/LaunchAnimator.kt
index a4c5c30..9668066 100644
--- a/packages/SystemUI/animation/src/com/android/systemui/animation/LaunchAnimator.kt
+++ b/packages/SystemUI/animation/src/com/android/systemui/animation/LaunchAnimator.kt
@@ -34,10 +34,7 @@
 private const val TAG = "LaunchAnimator"
 
 /** A base class to animate a window launch (activity or dialog) from a view . */
-class LaunchAnimator(
-    private val timings: Timings,
-    private val interpolators: Interpolators
-) {
+class LaunchAnimator(private val timings: Timings, private val interpolators: Interpolators) {
     companion object {
         internal const val DEBUG = false
         private val SRC_MODE = PorterDuffXfermode(PorterDuff.Mode.SRC)
@@ -75,10 +72,10 @@
          * with the opening window.
          *
          * This will be used to:
-         *  - Get the associated [Context].
-         *  - Compute whether we are expanding fully above the launch container.
-         *  - Get to overlay to which we initially put the window background layer, until the
-         *    opening window is made visible (see [openingWindowSyncView]).
+         * - Get the associated [Context].
+         * - Compute whether we are expanding fully above the launch container.
+         * - Get to overlay to which we initially put the window background layer, until the opening
+         * window is made visible (see [openingWindowSyncView]).
          *
          * This container can be changed to force this [Controller] to animate the expanding view
          * inside a different location, for instance to ensure correct layering during the
@@ -132,7 +129,6 @@
         var bottom: Int = 0,
         var left: Int = 0,
         var right: Int = 0,
-
         var topCornerRadius: Float = 0f,
         var bottomCornerRadius: Float = 0f
     ) {
@@ -202,18 +198,20 @@
     )
 
     /**
-     * Start a launch animation controlled by [controller] towards [endState]. An intermediary
-     * layer with [windowBackgroundColor] will fade in then fade out above the expanding view, and
-     * should be the same background color as the opening (or closing) window. If [drawHole] is
-     * true, then this intermediary layer will be drawn with SRC blending mode while it fades out.
+     * Start a launch animation controlled by [controller] towards [endState]. An intermediary layer
+     * with [windowBackgroundColor] will fade in then (optionally) fade out above the expanding
+     * view, and should be the same background color as the opening (or closing) window.
      *
-     * TODO(b/184121838): Remove [drawHole] and instead make the StatusBar draw this hole instead.
+     * If [fadeOutWindowBackgroundLayer] is true, then this intermediary layer will fade out during
+     * the second half of the animation, and will have SRC blending mode (ultimately punching a hole
+     * in the [launch container][Controller.launchContainer]) iff [drawHole] is true.
      */
     fun startAnimation(
         controller: Controller,
         endState: State,
         windowBackgroundColor: Int,
-        drawHole: Boolean = false
+        fadeOutWindowBackgroundLayer: Boolean = true,
+        drawHole: Boolean = false,
     ): Animation {
         val state = controller.createAnimatorState()
 
@@ -238,8 +236,12 @@
         val endBottomCornerRadius = endState.bottomCornerRadius
 
         fun maybeUpdateEndState() {
-            if (endTop != endState.top || endBottom != endState.bottom ||
-                endLeft != endState.left || endRight != endState.right) {
+            if (
+                endTop != endState.top ||
+                    endBottom != endState.bottom ||
+                    endLeft != endState.left ||
+                    endRight != endState.right
+            ) {
                 endTop = endState.top
                 endBottom = endState.bottom
                 endLeft = endState.left
@@ -256,10 +258,11 @@
         // color, which is usually the same color of the app background. We first fade in this layer
         // to hide the expanding view, then we fade it out with SRC mode to draw a hole in the
         // launch container and reveal the opening window.
-        val windowBackgroundLayer = GradientDrawable().apply {
-            setColor(windowBackgroundColor)
-            alpha = 0
-        }
+        val windowBackgroundLayer =
+            GradientDrawable().apply {
+                setColor(windowBackgroundColor)
+                alpha = 0
+            }
 
         // Update state.
         val animator = ValueAnimator.ofFloat(0f, 1f)
@@ -270,38 +273,41 @@
         // [Controller.openingWindowSyncView] once the opening app window starts to be visible.
         val openingWindowSyncView = controller.openingWindowSyncView
         val openingWindowSyncViewOverlay = openingWindowSyncView?.overlay
-        val moveBackgroundLayerWhenAppIsVisible = openingWindowSyncView != null &&
-            openingWindowSyncView.viewRootImpl != controller.launchContainer.viewRootImpl
+        val moveBackgroundLayerWhenAppIsVisible =
+            openingWindowSyncView != null &&
+                openingWindowSyncView.viewRootImpl != controller.launchContainer.viewRootImpl
 
         val launchContainerOverlay = launchContainer.overlay
         var cancelled = false
         var movedBackgroundLayer = false
 
-        animator.addListener(object : AnimatorListenerAdapter() {
-            override fun onAnimationStart(animation: Animator?, isReverse: Boolean) {
-                if (DEBUG) {
-                    Log.d(TAG, "Animation started")
+        animator.addListener(
+            object : AnimatorListenerAdapter() {
+                override fun onAnimationStart(animation: Animator?, isReverse: Boolean) {
+                    if (DEBUG) {
+                        Log.d(TAG, "Animation started")
+                    }
+                    controller.onLaunchAnimationStart(isExpandingFullyAbove)
+
+                    // Add the drawable to the launch container overlay. Overlays always draw
+                    // drawables after views, so we know that it will be drawn above any view added
+                    // by the controller.
+                    launchContainerOverlay.add(windowBackgroundLayer)
                 }
-                controller.onLaunchAnimationStart(isExpandingFullyAbove)
 
-                // Add the drawable to the launch container overlay. Overlays always draw
-                // drawables after views, so we know that it will be drawn above any view added
-                // by the controller.
-                launchContainerOverlay.add(windowBackgroundLayer)
-            }
+                override fun onAnimationEnd(animation: Animator?) {
+                    if (DEBUG) {
+                        Log.d(TAG, "Animation ended")
+                    }
+                    controller.onLaunchAnimationEnd(isExpandingFullyAbove)
+                    launchContainerOverlay.remove(windowBackgroundLayer)
 
-            override fun onAnimationEnd(animation: Animator?) {
-                if (DEBUG) {
-                    Log.d(TAG, "Animation ended")
-                }
-                controller.onLaunchAnimationEnd(isExpandingFullyAbove)
-                launchContainerOverlay.remove(windowBackgroundLayer)
-
-                if (moveBackgroundLayerWhenAppIsVisible) {
-                    openingWindowSyncViewOverlay?.remove(windowBackgroundLayer)
+                    if (moveBackgroundLayerWhenAppIsVisible) {
+                        openingWindowSyncViewOverlay?.remove(windowBackgroundLayer)
+                    }
                 }
             }
-        })
+        )
 
         animator.addUpdateListener { animation ->
             if (cancelled) {
@@ -333,12 +339,13 @@
 
             // The expanding view can/should be hidden once it is completely covered by the opening
             // window.
-            state.visible = getProgress(
-                timings,
-                linearProgress,
-                timings.contentBeforeFadeOutDelay,
-                timings.contentBeforeFadeOutDuration
-            ) < 1
+            state.visible =
+                getProgress(
+                    timings,
+                    linearProgress,
+                    timings.contentBeforeFadeOutDelay,
+                    timings.contentBeforeFadeOutDuration
+                ) < 1
 
             if (moveBackgroundLayerWhenAppIsVisible && !state.visible && !movedBackgroundLayer) {
                 // The expanding view is not visible, so the opening app is visible. If this is the
@@ -352,17 +359,19 @@
                 ViewRootSync.synchronizeNextDraw(launchContainer, openingWindowSyncView, then = {})
             }
 
-            val container = if (movedBackgroundLayer) {
-                openingWindowSyncView!!
-            } else {
-                controller.launchContainer
-            }
+            val container =
+                if (movedBackgroundLayer) {
+                    openingWindowSyncView!!
+                } else {
+                    controller.launchContainer
+                }
 
             applyStateToWindowBackgroundLayer(
                 windowBackgroundLayer,
                 state,
                 linearProgress,
                 container,
+                fadeOutWindowBackgroundLayer,
                 drawHole
             )
             controller.onLaunchAnimationProgress(state, progress, linearProgress)
@@ -391,6 +400,7 @@
         state: State,
         linearProgress: Float,
         launchContainer: View,
+        fadeOutWindowBackgroundLayer: Boolean,
         drawHole: Boolean
     ) {
         // Update position.
@@ -415,23 +425,25 @@
 
         // We first fade in the background layer to hide the expanding view, then fade it out
         // with SRC mode to draw a hole punch in the status bar and reveal the opening window.
-        val fadeInProgress = getProgress(
-            timings,
-            linearProgress,
-            timings.contentBeforeFadeOutDelay,
-            timings.contentBeforeFadeOutDuration
-        )
+        val fadeInProgress =
+            getProgress(
+                timings,
+                linearProgress,
+                timings.contentBeforeFadeOutDelay,
+                timings.contentBeforeFadeOutDuration
+            )
         if (fadeInProgress < 1) {
             val alpha =
                 interpolators.contentBeforeFadeOutInterpolator.getInterpolation(fadeInProgress)
             drawable.alpha = (alpha * 0xFF).roundToInt()
-        } else {
-            val fadeOutProgress = getProgress(
-                timings,
-                linearProgress,
-                timings.contentAfterFadeInDelay,
-                timings.contentAfterFadeInDuration
-            )
+        } else if (fadeOutWindowBackgroundLayer) {
+            val fadeOutProgress =
+                getProgress(
+                    timings,
+                    linearProgress,
+                    timings.contentAfterFadeInDelay,
+                    timings.contentAfterFadeInDuration
+                )
             val alpha =
                 1 - interpolators.contentAfterFadeInInterpolator.getInterpolation(fadeOutProgress)
             drawable.alpha = (alpha * 0xFF).roundToInt()
@@ -439,6 +451,8 @@
             if (drawHole) {
                 drawable.setXfermode(SRC_MODE)
             }
+        } else {
+            drawable.alpha = 0xFF
         }
     }
 }
diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/LaunchableView.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/LaunchableView.kt
index 80a3eb8..7499302 100644
--- a/packages/SystemUI/animation/src/com/android/systemui/animation/LaunchableView.kt
+++ b/packages/SystemUI/animation/src/com/android/systemui/animation/LaunchableView.kt
@@ -27,4 +27,4 @@
      * [transition][android.view.View.setTransitionVisibility] visibility changes must be blocked.
      */
     fun setShouldBlockVisibilityChanges(block: Boolean)
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/RemoteTransitionAdapter.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/RemoteTransitionAdapter.kt
index 47c1101..f9c6841 100644
--- a/packages/SystemUI/animation/src/com/android/systemui/animation/RemoteTransitionAdapter.kt
+++ b/packages/SystemUI/animation/src/com/android/systemui/animation/RemoteTransitionAdapter.kt
@@ -40,6 +40,7 @@
     companion object {
         /**
          * Almost a copy of Transitions#setupStartState.
+         *
          * TODO: remove when there is proper cross-process transaction sync.
          */
         @SuppressLint("NewApi")
@@ -50,7 +51,8 @@
             info: TransitionInfo,
             t: SurfaceControl.Transaction
         ) {
-            val isOpening = info.type == WindowManager.TRANSIT_OPEN ||
+            val isOpening =
+                info.type == WindowManager.TRANSIT_OPEN ||
                     info.type == WindowManager.TRANSIT_TO_FRONT
             // Put animating stuff above this line and put static stuff below it.
             val zSplitLine = info.changes.size
@@ -59,15 +61,19 @@
 
             // Launcher animates leaf tasks directly, so always reparent all task leashes to root.
             t.reparent(leash, info.rootLeash)
-            t.setPosition(leash, (change.startAbsBounds.left - info.rootOffset.x).toFloat(), (
-                    change.startAbsBounds.top - info.rootOffset.y).toFloat())
+            t.setPosition(
+                leash,
+                (change.startAbsBounds.left - info.rootOffset.x).toFloat(),
+                (change.startAbsBounds.top - info.rootOffset.y).toFloat()
+            )
             t.show(leash)
             // Put all the OPEN/SHOW on top
             if (mode == WindowManager.TRANSIT_OPEN || mode == WindowManager.TRANSIT_TO_FRONT) {
                 if (isOpening) {
                     t.setLayer(leash, zSplitLine + info.changes.size - layer)
-                    if (change.flags
-                            and TransitionInfo.FLAG_STARTING_WINDOW_TRANSFER_RECIPIENT == 0) {
+                    if (
+                        change.flags and TransitionInfo.FLAG_STARTING_WINDOW_TRANSFER_RECIPIENT == 0
+                    ) {
                         // if transferred, it should be left visible.
                         t.setAlpha(leash, 0f)
                     }
@@ -75,8 +81,9 @@
                     // put on bottom and leave it visible
                     t.setLayer(leash, zSplitLine - layer)
                 }
-            } else if (mode == WindowManager.TRANSIT_CLOSE ||
-                    mode == WindowManager.TRANSIT_TO_BACK) {
+            } else if (
+                mode == WindowManager.TRANSIT_CLOSE || mode == WindowManager.TRANSIT_TO_BACK
+            ) {
                 if (isOpening) {
                     // put on bottom and leave visible
                     t.setLayer(leash, zSplitLine - layer)
@@ -102,10 +109,15 @@
                 // making leashes means we have to handle them specially.
                 return change.leash
             }
-            val leashSurface = SurfaceControl.Builder()
+            val leashSurface =
+                SurfaceControl.Builder()
                     .setName(change.leash.toString() + "_transition-leash")
-                    .setContainerLayer().setParent(if (change.parent == null)
-                            info.rootLeash else info.getChange(change.parent!!)!!.leash).build()
+                    .setContainerLayer()
+                    .setParent(
+                        if (change.parent == null) info.rootLeash
+                        else info.getChange(change.parent!!)!!.leash
+                    )
+                    .build()
             // Copied Transitions setup code (which expects bottom-to-top order, so we swap here)
             setupLeash(leashSurface, change, info.changes.size - order, info, t)
             t.reparent(change.leash, leashSurface)
@@ -118,10 +130,10 @@
 
         private fun newModeToLegacyMode(newMode: Int): Int {
             return when (newMode) {
-                WindowManager.TRANSIT_OPEN, WindowManager.TRANSIT_TO_FRONT
-                        -> RemoteAnimationTarget.MODE_OPENING
-                WindowManager.TRANSIT_CLOSE, WindowManager.TRANSIT_TO_BACK
-                        -> RemoteAnimationTarget.MODE_CLOSING
+                WindowManager.TRANSIT_OPEN,
+                WindowManager.TRANSIT_TO_FRONT -> RemoteAnimationTarget.MODE_OPENING
+                WindowManager.TRANSIT_CLOSE,
+                WindowManager.TRANSIT_TO_BACK -> RemoteAnimationTarget.MODE_CLOSING
                 else -> RemoteAnimationTarget.MODE_CHANGING
             }
         }
@@ -138,12 +150,13 @@
             info: TransitionInfo,
             t: SurfaceControl.Transaction
         ): RemoteAnimationTarget {
-            val target = RemoteAnimationTarget(
+            val target =
+                RemoteAnimationTarget(
                     /* taskId */ if (change.taskInfo != null) change.taskInfo!!.taskId else -1,
                     /* mode */ newModeToLegacyMode(change.mode),
                     /* leash */ createLeash(info, change, order, t),
                     /* isTranslucent */ (change.flags and TransitionInfo.FLAG_TRANSLUCENT != 0 ||
-                    change.flags and TransitionInfo.FLAG_SHOW_WALLPAPER != 0),
+                        change.flags and TransitionInfo.FLAG_SHOW_WALLPAPER != 0),
                     /* clipRect */ null,
                     /* contentInsets */ Rect(0, 0, 0, 0),
                     /* prefixOrderIndex */ order,
@@ -151,15 +164,16 @@
                     /* localBounds */ rectOffsetTo(change.endAbsBounds, change.endRelOffset),
                     /* screenSpaceBounds */ Rect(change.endAbsBounds),
                     /* windowConfig */ if (change.taskInfo != null)
-                            change.taskInfo!!.configuration.windowConfiguration else
-                                    WindowConfiguration(),
-                    /* isNotInRecents */ if (change.taskInfo != null)
-                            !change.taskInfo!!.isRunning else true,
+                        change.taskInfo!!.configuration.windowConfiguration
+                    else WindowConfiguration(),
+                    /* isNotInRecents */ if (change.taskInfo != null) !change.taskInfo!!.isRunning
+                    else true,
                     /* startLeash */ null,
                     /* startBounds */ Rect(change.startAbsBounds),
                     /* taskInfo */ change.taskInfo,
                     /* allowEnterPip */ change.allowEnterPip,
-                    /* windowType */ WindowManager.LayoutParams.INVALID_WINDOW_TYPE)
+                    /* windowType */ WindowManager.LayoutParams.INVALID_WINDOW_TYPE
+                )
             target.backgroundColor = change.backgroundColor
             return target
         }
@@ -192,9 +206,7 @@
         }
 
         @JvmStatic
-        fun adaptRemoteRunner(
-            runner: IRemoteAnimationRunner
-        ): IRemoteTransition.Stub {
+        fun adaptRemoteRunner(runner: IRemoteAnimationRunner): IRemoteTransition.Stub {
             return object : IRemoteTransition.Stub() {
                 override fun startAnimation(
                     token: IBinder,
@@ -218,18 +230,24 @@
                     var displayH = 0f
                     for (i in info.changes.indices.reversed()) {
                         val change = info.changes[i]
-                        if (change.taskInfo != null &&
-                                change.taskInfo!!.activityType
-                                        == WindowConfiguration.ACTIVITY_TYPE_HOME) {
-                            isReturnToHome = (change.mode == WindowManager.TRANSIT_OPEN ||
+                        if (
+                            change.taskInfo != null &&
+                                change.taskInfo!!.activityType ==
+                                    WindowConfiguration.ACTIVITY_TYPE_HOME
+                        ) {
+                            isReturnToHome =
+                                (change.mode == WindowManager.TRANSIT_OPEN ||
                                     change.mode == WindowManager.TRANSIT_TO_FRONT)
                             launcherTask = change
                             launcherLayer = info.changes.size - i
                         } else if (change.flags and TransitionInfo.FLAG_IS_WALLPAPER != 0) {
                             wallpaper = change
                         }
-                        if (change.parent == null && change.endRotation >= 0 &&
-                                change.endRotation != change.startRotation) {
+                        if (
+                            change.parent == null &&
+                                change.endRotation >= 0 &&
+                                change.endRotation != change.startRotation
+                        ) {
                             rotateDelta = change.endRotation - change.startRotation
                             displayW = change.endAbsBounds.width().toFloat()
                             displayH = change.endAbsBounds.height().toFloat()
@@ -240,8 +258,13 @@
                     val counterLauncher = CounterRotator()
                     val counterWallpaper = CounterRotator()
                     if (launcherTask != null && rotateDelta != 0 && launcherTask.parent != null) {
-                        counterLauncher.setup(t, info.getChange(launcherTask.parent!!)!!.leash,
-                                rotateDelta, displayW, displayH)
+                        counterLauncher.setup(
+                            t,
+                            info.getChange(launcherTask.parent!!)!!.leash,
+                            rotateDelta,
+                            displayW,
+                            displayH
+                        )
                         if (counterLauncher.surface != null) {
                             t.setLayer(counterLauncher.surface!!, launcherLayer)
                         }
@@ -257,8 +280,10 @@
                             val mode = info.changes[i].mode
                             // Only deal with independent layers
                             if (!TransitionInfo.isIndependent(change, info)) continue
-                            if (mode == WindowManager.TRANSIT_CLOSE ||
-                                    mode == WindowManager.TRANSIT_TO_BACK) {
+                            if (
+                                mode == WindowManager.TRANSIT_CLOSE ||
+                                    mode == WindowManager.TRANSIT_TO_BACK
+                            ) {
                                 t.setLayer(leash!!, info.changes.size * 3 - i)
                                 counterLauncher.addChild(t, leash)
                             }
@@ -273,8 +298,13 @@
                             counterLauncher.addChild(t, leashMap[launcherTask.leash])
                         }
                         if (wallpaper != null && rotateDelta != 0 && wallpaper.parent != null) {
-                            counterWallpaper.setup(t, info.getChange(wallpaper.parent!!)!!.leash,
-                                    rotateDelta, displayW, displayH)
+                            counterWallpaper.setup(
+                                t,
+                                info.getChange(wallpaper.parent!!)!!.leash,
+                                rotateDelta,
+                                displayW,
+                                displayH
+                            )
                             if (counterWallpaper.surface != null) {
                                 t.setLayer(counterWallpaper.surface!!, -1)
                                 counterWallpaper.addChild(t, leashMap[wallpaper.leash])
@@ -282,37 +312,47 @@
                         }
                     }
                     t.apply()
-                    val animationFinishedCallback = object : IRemoteAnimationFinishedCallback {
-                        override fun onAnimationFinished() {
-                            val finishTransaction = SurfaceControl.Transaction()
-                            counterLauncher.cleanUp(finishTransaction)
-                            counterWallpaper.cleanUp(finishTransaction)
-                            // Release surface references now. This is apparently to free GPU memory
-                            // while doing quick operations (eg. during CTS).
-                            for (i in info.changes.indices.reversed()) {
-                                info.changes[i].leash.release()
+                    val animationFinishedCallback =
+                        object : IRemoteAnimationFinishedCallback {
+                            override fun onAnimationFinished() {
+                                val finishTransaction = SurfaceControl.Transaction()
+                                counterLauncher.cleanUp(finishTransaction)
+                                counterWallpaper.cleanUp(finishTransaction)
+                                // Release surface references now. This is apparently to free GPU
+                                // memory while doing quick operations (eg. during CTS).
+                                for (i in info.changes.indices.reversed()) {
+                                    info.changes[i].leash.release()
+                                }
+                                for (i in leashMap.size - 1 downTo 0) {
+                                    leashMap.valueAt(i).release()
+                                }
+                                try {
+                                    finishCallback.onTransitionFinished(
+                                        null /* wct */,
+                                        finishTransaction
+                                    )
+                                } catch (e: RemoteException) {
+                                    Log.e(
+                                        "ActivityOptionsCompat",
+                                        "Failed to call app controlled" +
+                                            " animation finished callback",
+                                        e
+                                    )
+                                }
                             }
-                            for (i in leashMap.size - 1 downTo 0) {
-                                leashMap.valueAt(i).release()
-                            }
-                            try {
-                                finishCallback.onTransitionFinished(null /* wct */,
-                                        finishTransaction)
-                            } catch (e: RemoteException) {
-                                Log.e("ActivityOptionsCompat", "Failed to call app controlled" +
-                                        " animation finished callback", e)
-                            }
-                        }
 
-                        override fun asBinder(): IBinder? {
-                            return null
+                            override fun asBinder(): IBinder? {
+                                return null
+                            }
                         }
-                    }
                     // TODO(bc-unlcok): Pass correct transit type.
                     runner.onAnimationStart(
-                            WindowManager.TRANSIT_OLD_NONE,
-                            appsCompat, wallpapersCompat, nonAppsCompat,
-                            animationFinishedCallback)
+                        WindowManager.TRANSIT_OLD_NONE,
+                        appsCompat,
+                        wallpapersCompat,
+                        nonAppsCompat,
+                        animationFinishedCallback
+                    )
                 }
 
                 override fun mergeAnimation(
@@ -329,18 +369,14 @@
         }
 
         @JvmStatic
-        fun adaptRemoteAnimation(
-            adapter: RemoteAnimationAdapter
-        ): RemoteTransition {
+        fun adaptRemoteAnimation(adapter: RemoteAnimationAdapter): RemoteTransition {
             return RemoteTransition(adaptRemoteRunner(adapter.runner), adapter.callingApplication)
         }
     }
 
-    /**
-     * Utility class that takes care of counter-rotating surfaces during a transition animation.
-     */
+    /** Utility class that takes care of counter-rotating surfaces during a transition animation. */
     class CounterRotator {
-        /** Gets the surface with the counter-rotation.  */
+        /** Gets the surface with the counter-rotation. */
         var surface: SurfaceControl? = null
             private set
 
@@ -358,7 +394,8 @@
             parentH: Float
         ) {
             if (rotateDelta == 0) return
-            val surface = SurfaceControl.Builder()
+            val surface =
+                SurfaceControl.Builder()
                     .setName("Transition Unrotate")
                     .setContainerLayer()
                     .setParent(parent)
@@ -378,21 +415,19 @@
             t.show(surface)
         }
 
-        /**
-         * Adds a surface that needs to be counter-rotate.
-         */
+        /** Adds a surface that needs to be counter-rotate. */
         fun addChild(t: SurfaceControl.Transaction, child: SurfaceControl?) {
             if (surface == null) return
             t.reparent(child!!, surface)
         }
 
         /**
-         * Clean-up. Since finishTransaction should reset all change leashes, we only need to remove the
-         * counter rotation surface.
+         * Clean-up. Since finishTransaction should reset all change leashes, we only need to remove
+         * the counter rotation surface.
          */
         fun cleanUp(finishTransaction: SurfaceControl.Transaction) {
             if (surface == null) return
             finishTransaction.remove(surface!!)
         }
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/ShadeInterpolation.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/ShadeInterpolation.kt
index 0ee2bfe..a96f893 100644
--- a/packages/SystemUI/animation/src/com/android/systemui/animation/ShadeInterpolation.kt
+++ b/packages/SystemUI/animation/src/com/android/systemui/animation/ShadeInterpolation.kt
@@ -31,7 +31,7 @@
         } else {
             val oneMinusFrac = 1f - mappedFraction
             (1f - 0.5f * (1f - Math.cos((3.14159f * oneMinusFrac * oneMinusFrac).toDouble())))
-                    .toFloat()
+                .toFloat()
         }
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/TextAnimator.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/TextAnimator.kt
new file mode 100644
index 0000000..f79b328
--- /dev/null
+++ b/packages/SystemUI/animation/src/com/android/systemui/animation/TextAnimator.kt
@@ -0,0 +1,282 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.animation
+
+import android.animation.Animator
+import android.animation.AnimatorListenerAdapter
+import android.animation.TimeInterpolator
+import android.animation.ValueAnimator
+import android.graphics.Canvas
+import android.graphics.Typeface
+import android.graphics.fonts.Font
+import android.text.Layout
+import android.util.SparseArray
+
+private const val TAG_WGHT = "wght"
+private const val DEFAULT_ANIMATION_DURATION: Long = 300
+
+typealias GlyphCallback = (TextAnimator.PositionedGlyph, Float) -> Unit
+/**
+ * This class provides text animation between two styles.
+ *
+ * Currently this class can provide text style animation for text weight and text size. For example
+ * the simple view that draws text with animating text size is like as follows:
+ *
+ * <pre>
+ * <code>
+ *     class SimpleTextAnimation : View {
+ *         @JvmOverloads constructor(...)
+ *
+ *         private val layout: Layout = ... // Text layout, e.g. StaticLayout.
+ *
+ *         // TextAnimator tells us when needs to be invalidate.
+ *         private val animator = TextAnimator(layout) { invalidate() }
+ *
+ *         override fun onDraw(canvas: Canvas) = animator.draw(canvas)
+ *
+ *         // Change the text size with animation.
+ *         fun setTextSize(sizePx: Float, animate: Boolean) {
+ *             animator.setTextStyle(-1 /* unchanged weight */, sizePx, animate)
+ *         }
+ *     }
+ * </code>
+ * </pre>
+ */
+class TextAnimator(
+    layout: Layout,
+    private val invalidateCallback: () -> Unit
+) {
+    // Following two members are for mutable for testing purposes.
+    public var textInterpolator: TextInterpolator = TextInterpolator(layout)
+    public var animator: ValueAnimator = ValueAnimator.ofFloat(1f).apply {
+        duration = DEFAULT_ANIMATION_DURATION
+        addUpdateListener {
+            textInterpolator.progress = it.animatedValue as Float
+            invalidateCallback()
+        }
+        addListener(object : AnimatorListenerAdapter() {
+            override fun onAnimationEnd(animation: Animator?) {
+                textInterpolator.rebase()
+            }
+            override fun onAnimationCancel(animation: Animator?) = textInterpolator.rebase()
+        })
+    }
+
+    sealed class PositionedGlyph {
+
+        /**
+         * Mutable X coordinate of the glyph position relative from drawing offset.
+         */
+        var x: Float = 0f
+
+        /**
+         * Mutable Y coordinate of the glyph position relative from the baseline.
+         */
+        var y: Float = 0f
+
+        /**
+         * Mutable text size of the glyph in pixels.
+         */
+        var textSize: Float = 0f
+
+        /**
+         * Mutable color of the glyph.
+         */
+        var color: Int = 0
+
+        /**
+         * Immutable character offset in the text that the current font run start.
+         */
+        abstract var runStart: Int
+            protected set
+
+        /**
+         * Immutable run length of the font run.
+         */
+        abstract var runLength: Int
+            protected set
+
+        /**
+         * Immutable glyph index of the font run.
+         */
+        abstract var glyphIndex: Int
+            protected set
+
+        /**
+         * Immutable font instance for this font run.
+         */
+        abstract var font: Font
+            protected set
+
+        /**
+         * Immutable glyph ID for this glyph.
+         */
+        abstract var glyphId: Int
+            protected set
+    }
+
+    private val typefaceCache = SparseArray<Typeface?>()
+
+    fun updateLayout(layout: Layout) {
+        textInterpolator.layout = layout
+    }
+
+    fun isRunning(): Boolean {
+        return animator.isRunning
+    }
+
+    /**
+     * GlyphFilter applied just before drawing to canvas for tweaking positions and text size.
+     *
+     * This callback is called for each glyphs just before drawing the glyphs. This function will
+     * be called with the intrinsic position, size, color, glyph ID and font instance. You can
+     * mutate the position, size and color for tweaking animations.
+     * Do not keep the reference of passed glyph object. The interpolator reuses that object for
+     * avoiding object allocations.
+     *
+     * Details:
+     * The text is drawn with font run units. The font run is a text segment that draws with the
+     * same font. The {@code runStart} and {@code runLimit} is a range of the font run in the text
+     * that current glyph is in. Once the font run is determined, the system will convert characters
+     * into glyph IDs. The {@code glyphId} is the glyph identifier in the font and
+     * {@code glyphIndex} is the offset of the converted glyph array. Please note that the
+     * {@code glyphIndex} is not a character index, because the character will not be converted to
+     * glyph one-by-one. If there are ligatures including emoji sequence, etc, the glyph ID may be
+     * composed from multiple characters.
+     *
+     * Here is an example of font runs: "fin. 終わり"
+     *
+     * Characters :    f      i      n      .      _      終     わ     り
+     * Code Points: \u0066 \u0069 \u006E \u002E \u0020 \u7D42 \u308F \u308A
+     * Font Runs  : <-- Roboto-Regular.ttf          --><-- NotoSans-CJK.otf -->
+     *                  runStart = 0, runLength = 5        runStart = 5, runLength = 3
+     * Glyph IDs  :      194        48     7      8     4367   1039   1002
+     * Glyph Index:       0          1     2      3       0      1      2
+     *
+     * In this example, the "fi" is converted into ligature form, thus the single glyph ID is
+     * assigned for two characters, f and i.
+     *
+     * Example:
+     * ```
+     * private val glyphFilter: GlyphCallback = { glyph, progress ->
+     *     val index = glyph.runStart
+     *     val i = glyph.glyphIndex
+     *     val moveAmount = 1.3f
+     *     val sign = (-1 + 2 * ((i + index) % 2))
+     *     val turnProgress = if (progress < .5f) progress / 0.5f else (1.0f - progress) / 0.5f
+     *
+     *     // You can modify (x, y) coordinates, textSize and color during animation.
+     *     glyph.textSize += glyph.textSize * sign * moveAmount * turnProgress
+     *     glyph.y += glyph.y * sign * moveAmount * turnProgress
+     *     glyph.x += glyph.x * sign * moveAmount * turnProgress
+     * }
+     * ```
+     */
+    var glyphFilter: GlyphCallback?
+        get() = textInterpolator.glyphFilter
+        set(value) { textInterpolator.glyphFilter = value }
+
+    fun draw(c: Canvas) = textInterpolator.draw(c)
+
+    /**
+     * Set text style with animation.
+     *
+     * By passing -1 to weight, the view preserve the current weight.
+     * By passing -1 to textSize, the view preserve the current text size.
+     * Bu passing -1 to duration, the default text animation, 1000ms, is used.
+     * By passing false to animate, the text will be updated without animation.
+     *
+     * @param weight an optional text weight.
+     * @param textSize an optional font size.
+     * @param colors an optional colors array that must be the same size as numLines passed to
+     *  the TextInterpolator
+     * @param animate an optional boolean indicating true for showing style transition as animation,
+     *                false for immediate style transition. True by default.
+     * @param duration an optional animation duration in milliseconds. This is ignored if animate is
+     *                 false.
+     * @param interpolator an optional time interpolator. If null is passed, last set interpolator
+     *                     will be used. This is ignored if animate is false.
+     */
+    fun setTextStyle(
+        weight: Int = -1,
+        textSize: Float = -1f,
+        color: Int? = null,
+        animate: Boolean = true,
+        duration: Long = -1L,
+        interpolator: TimeInterpolator? = null,
+        delay: Long = 0,
+        onAnimationEnd: Runnable? = null
+    ) {
+        if (animate) {
+            animator.cancel()
+            textInterpolator.rebase()
+        }
+
+        if (textSize >= 0) {
+            textInterpolator.targetPaint.textSize = textSize
+        }
+        if (weight >= 0) {
+            // Paint#setFontVariationSettings creates Typeface instance from scratch. To reduce the
+            // memory impact, cache the typeface result.
+            textInterpolator.targetPaint.typeface = typefaceCache.getOrElse(weight) {
+                textInterpolator.targetPaint.fontVariationSettings = "'$TAG_WGHT' $weight"
+                textInterpolator.targetPaint.typeface
+            }
+        }
+        if (color != null) {
+            textInterpolator.targetPaint.color = color
+        }
+        textInterpolator.onTargetPaintModified()
+
+        if (animate) {
+            animator.startDelay = delay
+            animator.duration = if (duration == -1L) {
+                DEFAULT_ANIMATION_DURATION
+            } else {
+                duration
+            }
+            interpolator?.let { animator.interpolator = it }
+            if (onAnimationEnd != null) {
+                val listener = object : AnimatorListenerAdapter() {
+                    override fun onAnimationEnd(animation: Animator?) {
+                        onAnimationEnd.run()
+                        animator.removeListener(this)
+                    }
+                    override fun onAnimationCancel(animation: Animator?) {
+                        animator.removeListener(this)
+                    }
+                }
+                animator.addListener(listener)
+            }
+            animator.start()
+        } else {
+            // No animation is requested, thus set base and target state to the same state.
+            textInterpolator.progress = 1f
+            textInterpolator.rebase()
+            invalidateCallback()
+        }
+    }
+}
+
+private fun <V> SparseArray<V>.getOrElse(key: Int, defaultValue: () -> V): V {
+    var v = get(key)
+    if (v == null) {
+        v = defaultValue()
+        put(key, v)
+    }
+    return v
+}
diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/TextInterpolator.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/TextInterpolator.kt
new file mode 100644
index 0000000..ff64c78
--- /dev/null
+++ b/packages/SystemUI/animation/src/com/android/systemui/animation/TextInterpolator.kt
@@ -0,0 +1,505 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.animation
+
+import android.graphics.Canvas
+import android.graphics.Paint
+import android.graphics.fonts.Font
+import android.graphics.text.PositionedGlyphs
+import android.text.Layout
+import android.text.TextPaint
+import android.text.TextShaper
+import android.util.MathUtils
+import com.android.internal.graphics.ColorUtils
+import java.lang.Math.max
+
+/**
+ * Provide text style linear interpolation for plain text.
+ */
+class TextInterpolator(
+    layout: Layout
+) {
+
+    /**
+     * Returns base paint used for interpolation.
+     *
+     * Once you modified the style parameters, you have to call reshapeText to recalculate base text
+     * layout.
+     *
+     * @return a paint object
+     */
+    val basePaint = TextPaint(layout.paint)
+
+    /**
+     * Returns target paint used for interpolation.
+     *
+     * Once you modified the style parameters, you have to call reshapeText to recalculate target
+     * text layout.
+     *
+     * @return a paint object
+     */
+    val targetPaint = TextPaint(layout.paint)
+
+    /**
+     * A class represents a single font run.
+     *
+     * A font run is a range that will be drawn with the same font.
+     */
+    private data class FontRun(
+        val start: Int, // inclusive
+        val end: Int, // exclusive
+        var baseFont: Font,
+        var targetFont: Font
+    ) {
+        val length: Int get() = end - start
+    }
+
+    /**
+     * A class represents text layout of a single run.
+     */
+    private class Run(
+        val glyphIds: IntArray,
+        val baseX: FloatArray, // same length as glyphIds
+        val baseY: FloatArray, // same length as glyphIds
+        val targetX: FloatArray, // same length as glyphIds
+        val targetY: FloatArray, // same length as glyphIds
+        val fontRuns: List<FontRun>
+    )
+
+    /**
+     * A class represents text layout of a single line.
+     */
+    private class Line(
+        val runs: List<Run>
+    )
+
+    private var lines = listOf<Line>()
+    private val fontInterpolator = FontInterpolator()
+
+    // Recycling object for glyph drawing and tweaking.
+    private val tmpPaint = TextPaint()
+    private val tmpPaintForGlyph by lazy { TextPaint() }
+    private val tmpGlyph by lazy { MutablePositionedGlyph() }
+    // Will be extended for the longest font run if needed.
+    private var tmpPositionArray = FloatArray(20)
+
+    /**
+     * The progress position of the interpolation.
+     *
+     * The 0f means the start state, 1f means the end state.
+     */
+    var progress: Float = 0f
+
+    /**
+     * The layout used for drawing text.
+     *
+     * Only non-styled text is supported. Even if the given layout is created from Spanned, the
+     * span information is not used.
+     *
+     * The paint objects used for interpolation are not changed by this method call.
+     *
+     * Note: disabling ligature is strongly recommended if you give extra letter spacing since they
+     * may be disjointed based on letter spacing value and cannot be interpolated. Animator will
+     * throw runtime exception if they cannot be interpolated.
+     */
+    var layout: Layout = layout
+        get() = field
+        set(value) {
+            field = value
+            shapeText(value)
+        }
+
+    init {
+        // shapeText needs to be called after all members are initialized.
+        shapeText(layout)
+    }
+
+    /**
+     * Recalculate internal text layout for interpolation.
+     *
+     * Whenever the target paint is modified, call this method to recalculate internal
+     * text layout used for interpolation.
+     */
+    fun onTargetPaintModified() {
+        updatePositionsAndFonts(shapeText(layout, targetPaint), updateBase = false)
+    }
+
+    /**
+     * Recalculate internal text layout for interpolation.
+     *
+     * Whenever the base paint is modified, call this method to recalculate internal
+     * text layout used for interpolation.
+     */
+    fun onBasePaintModified() {
+        updatePositionsAndFonts(shapeText(layout, basePaint), updateBase = true)
+    }
+
+    /**
+     * Rebase the base state to the middle of the interpolation.
+     *
+     * The text interpolator does not calculate all the text position by text shaper due to
+     * performance reasons. Instead, the text interpolator shape the start and end state and
+     * calculate text position of the middle state by linear interpolation. Due to this trick,
+     * the text positions of the middle state is likely different from the text shaper result.
+     * So, if you want to start animation from the middle state, you will see the glyph jumps due to
+     * this trick, i.e. the progress 0.5 of interpolation between weight 400 and 700 is different
+     * from text shape result of weight 550.
+     *
+     * After calling this method, do not call onBasePaintModified() since it reshape the text and
+     * update the base state. As in above notice, the text shaping result at current progress is
+     * different shaped result. By calling onBasePaintModified(), you may see the glyph jump.
+     *
+     * By calling this method, the progress will be reset to 0.
+     *
+     * This API is useful to continue animation from the middle of the state. For example, if you
+     * animate weight from 200 to 400, then if you want to move back to 200 at the half of the
+     * animation, it will look like
+     *
+     * <pre>
+     * <code>
+     *     val interp = TextInterpolator(layout)
+     *
+     *     // Interpolate between weight 200 to 400.
+     *     interp.basePaint.fontVariationSettings = "'wght' 200"
+     *     interp.onBasePaintModified()
+     *     interp.targetPaint.fontVariationSettings = "'wght' 400"
+     *     interp.onTargetPaintModified()
+     *
+     *     // animate
+     *     val animator = ValueAnimator.ofFloat(1f).apply {
+     *         addUpdaterListener {
+     *             interp.progress = it.animateValue as Float
+     *         }
+     *     }.start()
+     *
+     *     // Here, assuming you receive some event and want to start new animation from current
+     *     // state.
+     *     OnSomeEvent {
+     *         animator.cancel()
+     *
+     *         // start another animation from the current state.
+     *         interp.rebase() // Use current state as base state.
+     *         interp.targetPaint.fontVariationSettings = "'wght' 200" // set new target
+     *         interp.onTargetPaintModified() // reshape target
+     *
+     *         // Here the textInterpolator interpolate from 'wght' from 300 to 200 if the current
+     *         // progress is 0.5
+     *         animator.start()
+     *     }
+     * </code>
+     * </pre>
+     *
+     */
+    fun rebase() {
+        if (progress == 0f) {
+            return
+        } else if (progress == 1f) {
+            basePaint.set(targetPaint)
+        } else {
+            lerp(basePaint, targetPaint, progress, tmpPaint)
+            basePaint.set(tmpPaint)
+        }
+
+        lines.forEach { line ->
+            line.runs.forEach { run ->
+                for (i in run.baseX.indices) {
+                    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)
+                }
+            }
+        }
+
+        progress = 0f
+    }
+
+    /**
+     * Draws interpolated text at the given progress.
+     *
+     * @param canvas a canvas.
+     */
+    fun draw(canvas: Canvas) {
+        lerp(basePaint, targetPaint, progress, tmpPaint)
+        lines.forEachIndexed { lineNo, line ->
+            line.runs.forEach { run ->
+                canvas.save()
+                try {
+                    // Move to drawing origin.
+                    val origin = layout.getDrawOrigin(lineNo)
+                    canvas.translate(origin, layout.getLineBaseline(lineNo).toFloat())
+
+                    run.fontRuns.forEach { fontRun ->
+                        drawFontRun(canvas, run, fontRun, tmpPaint)
+                    }
+                } finally {
+                    canvas.restore()
+                }
+            }
+        }
+    }
+
+    // Shape text with current paint parameters.
+    private fun shapeText(layout: Layout) {
+        val baseLayout = shapeText(layout, basePaint)
+        val targetLayout = shapeText(layout, targetPaint)
+
+        require(baseLayout.size == targetLayout.size) {
+            "The new layout result has different line count."
+        }
+
+        var maxRunLength = 0
+        lines = baseLayout.zip(targetLayout) { baseLine, targetLine ->
+            val runs = baseLine.zip(targetLine) { base, target ->
+
+                require(base.glyphCount() == target.glyphCount()) {
+                    "Inconsistent glyph count at line ${lines.size}"
+                }
+
+                val glyphCount = base.glyphCount()
+
+                // Good to recycle the array if the existing array can hold the new layout result.
+                val glyphIds = IntArray(glyphCount) {
+                    base.getGlyphId(it).also { baseGlyphId ->
+                        require(baseGlyphId == target.getGlyphId(it)) {
+                            "Inconsistent glyph ID at $it in line ${lines.size}"
+                        }
+                    }
+                }
+
+                val baseX = FloatArray(glyphCount) { base.getGlyphX(it) }
+                val baseY = FloatArray(glyphCount) { base.getGlyphY(it) }
+                val targetX = FloatArray(glyphCount) { target.getGlyphX(it) }
+                val targetY = FloatArray(glyphCount) { target.getGlyphY(it) }
+
+                // Calculate font runs
+                val fontRun = mutableListOf<FontRun>()
+                if (glyphCount != 0) {
+                    var start = 0
+                    var baseFont = base.getFont(start)
+                    var targetFont = target.getFont(start)
+                    require(FontInterpolator.canInterpolate(baseFont, targetFont)) {
+                        "Cannot interpolate font at $start ($baseFont vs $targetFont)"
+                    }
+
+                    for (i in 1 until glyphCount) {
+                        val nextBaseFont = base.getFont(i)
+                        val nextTargetFont = target.getFont(i)
+
+                        if (baseFont !== nextBaseFont) {
+                            require(targetFont !== nextTargetFont) {
+                                "Base font has changed at $i but target font has not changed."
+                            }
+                            // Font transition point. push run and reset context.
+                            fontRun.add(FontRun(start, i, baseFont, targetFont))
+                            maxRunLength = max(maxRunLength, i - start)
+                            baseFont = nextBaseFont
+                            targetFont = nextTargetFont
+                            start = i
+                            require(FontInterpolator.canInterpolate(baseFont, targetFont)) {
+                                "Cannot interpolate font at $start ($baseFont vs $targetFont)"
+                            }
+                        } else { // baseFont === nextBaseFont
+                            require(targetFont === nextTargetFont) {
+                                "Base font has not changed at $i but target font has changed."
+                            }
+                        }
+                    }
+                    fontRun.add(FontRun(start, glyphCount, baseFont, targetFont))
+                    maxRunLength = max(maxRunLength, glyphCount - start)
+                }
+                Run(glyphIds, baseX, baseY, targetX, targetY, fontRun)
+            }
+            Line(runs)
+        }
+
+        // Update float array used for drawing.
+        if (tmpPositionArray.size < maxRunLength * 2) {
+            tmpPositionArray = FloatArray(maxRunLength * 2)
+        }
+    }
+
+    private class MutablePositionedGlyph : TextAnimator.PositionedGlyph() {
+        override var runStart: Int = 0
+            public set
+        override var runLength: Int = 0
+            public set
+        override var glyphIndex: Int = 0
+            public set
+        override lateinit var font: Font
+            public set
+        override var glyphId: Int = 0
+            public set
+    }
+
+    var glyphFilter: GlyphCallback? = null
+
+    // Draws single font run.
+    private fun drawFontRun(c: Canvas, line: Run, run: FontRun, paint: Paint) {
+        var arrayIndex = 0
+        val font = fontInterpolator.lerp(run.baseFont, run.targetFont, progress)
+
+        val glyphFilter = glyphFilter
+        if (glyphFilter == null) {
+            for (i in run.start until run.end) {
+                tmpPositionArray[arrayIndex++] =
+                        MathUtils.lerp(line.baseX[i], line.targetX[i], progress)
+                tmpPositionArray[arrayIndex++] =
+                        MathUtils.lerp(line.baseY[i], line.targetY[i], progress)
+            }
+            c.drawGlyphs(line.glyphIds, run.start, tmpPositionArray, 0, run.length, font, paint)
+            return
+        }
+
+        tmpGlyph.font = font
+        tmpGlyph.runStart = run.start
+        tmpGlyph.runLength = run.end - run.start
+
+        tmpPaintForGlyph.set(paint)
+        var prevStart = run.start
+
+        for (i in run.start until run.end) {
+            tmpGlyph.glyphId = line.glyphIds[i]
+            tmpGlyph.x = MathUtils.lerp(line.baseX[i], line.targetX[i], progress)
+            tmpGlyph.y = MathUtils.lerp(line.baseY[i], line.targetY[i], progress)
+            tmpGlyph.textSize = paint.textSize
+            tmpGlyph.color = paint.color
+
+            glyphFilter(tmpGlyph, progress)
+
+            if (tmpGlyph.textSize != paint.textSize || tmpGlyph.color != paint.color) {
+                tmpPaintForGlyph.textSize = tmpGlyph.textSize
+                tmpPaintForGlyph.color = tmpGlyph.color
+
+                c.drawGlyphs(
+                        line.glyphIds,
+                        prevStart,
+                        tmpPositionArray,
+                        0,
+                        i - prevStart,
+                        font,
+                        tmpPaintForGlyph)
+                prevStart = i
+                arrayIndex = 0
+            }
+
+            tmpPositionArray[arrayIndex++] = tmpGlyph.x
+            tmpPositionArray[arrayIndex++] = tmpGlyph.y
+        }
+
+        c.drawGlyphs(
+                line.glyphIds,
+                prevStart,
+                tmpPositionArray,
+                0,
+                run.end - prevStart,
+                font,
+                tmpPaintForGlyph)
+    }
+
+    private fun updatePositionsAndFonts(
+        layoutResult: List<List<PositionedGlyphs>>,
+        updateBase: Boolean
+    ) {
+        // Update target positions with newly calculated text layout.
+        check(layoutResult.size == lines.size) {
+            "The new layout result has different line count."
+        }
+
+        lines.zip(layoutResult) { line, runs ->
+            line.runs.zip(runs) { lineRun, newGlyphs ->
+                require(newGlyphs.glyphCount() == lineRun.glyphIds.size) {
+                    "The new layout has different glyph count."
+                }
+
+                lineRun.fontRuns.forEach { run ->
+                    val newFont = newGlyphs.getFont(run.start)
+                    for (i in run.start until run.end) {
+                        require(newGlyphs.getGlyphId(run.start) == lineRun.glyphIds[run.start]) {
+                            "The new layout has different glyph ID at ${run.start}"
+                        }
+                        require(newFont === newGlyphs.getFont(i)) {
+                            "The new layout has different font run." +
+                                    " $newFont vs ${newGlyphs.getFont(i)} at $i"
+                        }
+                    }
+
+                    // The passing base font and target font is already interpolatable, so just
+                    // check new font can be interpolatable with base font.
+                    require(FontInterpolator.canInterpolate(newFont, run.baseFont)) {
+                        "New font cannot be interpolated with existing font. $newFont," +
+                                " ${run.baseFont}"
+                    }
+
+                    if (updateBase) {
+                        run.baseFont = newFont
+                    } else {
+                        run.targetFont = newFont
+                    }
+                }
+
+                if (updateBase) {
+                    for (i in lineRun.baseX.indices) {
+                        lineRun.baseX[i] = newGlyphs.getGlyphX(i)
+                        lineRun.baseY[i] = newGlyphs.getGlyphY(i)
+                    }
+                } else {
+                    for (i in lineRun.baseX.indices) {
+                        lineRun.targetX[i] = newGlyphs.getGlyphX(i)
+                        lineRun.targetY[i] = newGlyphs.getGlyphY(i)
+                    }
+                }
+            }
+        }
+    }
+
+    // Linear interpolate the paint.
+    private fun lerp(from: Paint, to: Paint, progress: Float, out: Paint) {
+        out.set(from)
+
+        // Currently only font size & colors are interpolated.
+        // TODO(172943390): Add other interpolation or support custom interpolator.
+        out.textSize = MathUtils.lerp(from.textSize, to.textSize, progress)
+        out.color = ColorUtils.blendARGB(from.color, to.color, progress)
+    }
+
+    // Shape the text and stores the result to out argument.
+    private fun shapeText(
+        layout: Layout,
+        paint: TextPaint
+    ): List<List<PositionedGlyphs>> {
+        val out = mutableListOf<List<PositionedGlyphs>>()
+        for (lineNo in 0 until layout.lineCount) { // Shape all lines.
+            val lineStart = layout.getLineStart(lineNo)
+            val count = layout.getLineEnd(lineNo) - lineStart
+            val runs = mutableListOf<PositionedGlyphs>()
+            TextShaper.shapeText(layout.text, lineStart, count, layout.textDirectionHeuristic,
+                    paint) { _, _, glyphs, _ ->
+                runs.add(glyphs)
+            }
+            out.add(runs)
+        }
+        return out
+    }
+}
+
+private fun Layout.getDrawOrigin(lineNo: Int) =
+        if (getParagraphDirection(lineNo) == Layout.DIR_LEFT_TO_RIGHT) {
+            getLineLeft(lineNo)
+        } else {
+            getLineRight(lineNo)
+        }
diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/ViewHierarchyAnimator.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/ViewHierarchyAnimator.kt
index 4c3cd3c..cc7d23e 100644
--- a/packages/SystemUI/animation/src/com/android/systemui/animation/ViewHierarchyAnimator.kt
+++ b/packages/SystemUI/animation/src/com/android/systemui/animation/ViewHierarchyAnimator.kt
@@ -42,12 +42,13 @@
         private val DEFAULT_FADE_IN_INTERPOLATOR = Interpolators.ALPHA_IN
 
         /** The properties used to animate the view bounds. */
-        private val PROPERTIES = mapOf(
-            Bound.LEFT to createViewProperty(Bound.LEFT),
-            Bound.TOP to createViewProperty(Bound.TOP),
-            Bound.RIGHT to createViewProperty(Bound.RIGHT),
-            Bound.BOTTOM to createViewProperty(Bound.BOTTOM)
-        )
+        private val PROPERTIES =
+            mapOf(
+                Bound.LEFT to createViewProperty(Bound.LEFT),
+                Bound.TOP to createViewProperty(Bound.TOP),
+                Bound.RIGHT to createViewProperty(Bound.RIGHT),
+                Bound.BOTTOM to createViewProperty(Bound.BOTTOM)
+            )
 
         private fun createViewProperty(bound: Bound): IntProperty<View> {
             return object : IntProperty<View>(bound.label) {
@@ -104,7 +105,8 @@
             duration: Long,
             ephemeral: Boolean
         ): Boolean {
-            if (!isVisible(
+            if (
+                !occupiesSpace(
                     rootView.visibility,
                     rootView.left,
                     rootView.top,
@@ -132,11 +134,7 @@
             duration: Long,
             ephemeral: Boolean
         ): View.OnLayoutChangeListener {
-            return createListener(
-                interpolator,
-                duration,
-                ephemeral
-            )
+            return createListener(interpolator, duration, ephemeral)
         }
 
         /**
@@ -178,7 +176,8 @@
             includeFadeIn: Boolean = false,
             fadeInInterpolator: Interpolator = DEFAULT_FADE_IN_INTERPOLATOR
         ): Boolean {
-            if (isVisible(
+            if (
+                occupiesSpace(
                     rootView.visibility,
                     rootView.left,
                     rootView.top,
@@ -189,9 +188,13 @@
                 return false
             }
 
-            val listener = createAdditionListener(
-                origin, interpolator, duration, ignorePreviousValues = !includeMargins
-            )
+            val listener =
+                createAdditionListener(
+                    origin,
+                    interpolator,
+                    duration,
+                    ignorePreviousValues = !includeMargins
+                )
             addListener(rootView, listener, recursive = true)
 
             if (!includeFadeIn) {
@@ -292,7 +295,7 @@
 
                     (view.getTag(R.id.tag_animator) as? ObjectAnimator)?.cancel()
 
-                    if (!isVisible(view.visibility, left, top, right, bottom)) {
+                    if (!occupiesSpace(view.visibility, left, top, right, bottom)) {
                         setBound(view, Bound.LEFT, left)
                         setBound(view, Bound.TOP, top)
                         setBound(view, Bound.RIGHT, right)
@@ -300,24 +303,26 @@
                         return
                     }
 
-                    val startValues = processStartValues(
-                        origin,
-                        left,
-                        top,
-                        right,
-                        bottom,
-                        startLeft,
-                        startTop,
-                        startRight,
-                        startBottom,
-                        ignorePreviousValues
-                    )
-                    val endValues = mapOf(
-                        Bound.LEFT to left,
-                        Bound.TOP to top,
-                        Bound.RIGHT to right,
-                        Bound.BOTTOM to bottom
-                    )
+                    val startValues =
+                        processStartValues(
+                            origin,
+                            left,
+                            top,
+                            right,
+                            bottom,
+                            startLeft,
+                            startTop,
+                            startRight,
+                            startBottom,
+                            ignorePreviousValues
+                        )
+                    val endValues =
+                        mapOf(
+                            Bound.LEFT to left,
+                            Bound.TOP to top,
+                            Bound.RIGHT to right,
+                            Bound.BOTTOM to bottom
+                        )
 
                     val boundsToAnimate = mutableSetOf<Bound>()
                     if (startValues.getValue(Bound.LEFT) != left) boundsToAnimate.add(Bound.LEFT)
@@ -356,7 +361,8 @@
             interpolator: Interpolator = DEFAULT_REMOVAL_INTERPOLATOR,
             duration: Long = DEFAULT_DURATION
         ): Boolean {
-            if (!isVisible(
+            if (
+                !occupiesSpace(
                     rootView.visibility,
                     rootView.left,
                     rootView.top,
@@ -370,11 +376,7 @@
             val parent = rootView.parent as ViewGroup
 
             // Ensure that rootView's siblings animate nicely around the removal.
-            val listener = createUpdateListener(
-                interpolator,
-                duration,
-                ephemeral = true
-            )
+            val listener = createUpdateListener(interpolator, duration, ephemeral = true)
             for (i in 0 until parent.childCount) {
                 val child = parent.getChildAt(i)
                 if (child == rootView) continue
@@ -389,19 +391,21 @@
             // them manually during the animation.
             parent.overlay.add(rootView)
 
-            val startValues = mapOf(
-                Bound.LEFT to rootView.left,
-                Bound.TOP to rootView.top,
-                Bound.RIGHT to rootView.right,
-                Bound.BOTTOM to rootView.bottom
-            )
-            val endValues = processEndValuesForRemoval(
-                destination,
-                rootView.left,
-                rootView.top,
-                rootView.right,
-                rootView.bottom
-            )
+            val startValues =
+                mapOf(
+                    Bound.LEFT to rootView.left,
+                    Bound.TOP to rootView.top,
+                    Bound.RIGHT to rootView.right,
+                    Bound.BOTTOM to rootView.bottom
+                )
+            val endValues =
+                processEndValuesForRemoval(
+                    destination,
+                    rootView.left,
+                    rootView.top,
+                    rootView.right,
+                    rootView.bottom
+                )
 
             val boundsToAnimate = mutableSetOf<Bound>()
             if (rootView.left != endValues.getValue(Bound.LEFT)) boundsToAnimate.add(Bound.LEFT)
@@ -443,20 +447,24 @@
                             (animation.animatedValue as Float) * startAlphas[i]
                     }
                 }
-                animator.addListener(object : AnimatorListenerAdapter() {
-                    override fun onAnimationEnd(animation: Animator) {
-                        rootView.animate()
-                            .alpha(0f)
-                            .setInterpolator(Interpolators.ALPHA_OUT)
-                            .setDuration(duration / 2)
-                            .withEndAction { parent.overlay.remove(rootView) }
-                            .start()
+                animator.addListener(
+                    object : AnimatorListenerAdapter() {
+                        override fun onAnimationEnd(animation: Animator) {
+                            rootView
+                                .animate()
+                                .alpha(0f)
+                                .setInterpolator(Interpolators.ALPHA_OUT)
+                                .setDuration(duration / 2)
+                                .withEndAction { parent.overlay.remove(rootView) }
+                                .start()
+                        }
                     }
-                })
+                )
                 animator.start()
             } else {
                 // Fade out the view during the second half of the removal.
-                rootView.animate()
+                rootView
+                    .animate()
                     .alpha(0f)
                     .setInterpolator(Interpolators.ALPHA_OUT)
                     .setDuration(duration / 2)
@@ -483,21 +491,23 @@
         ) {
             for (i in 0 until rootView.childCount) {
                 val child = rootView.getChildAt(i)
-                val childStartValues = mapOf(
-                    Bound.LEFT to child.left,
-                    Bound.TOP to child.top,
-                    Bound.RIGHT to child.right,
-                    Bound.BOTTOM to child.bottom
-                )
-                val childEndValues = processChildEndValuesForRemoval(
-                    destination,
-                    child.left,
-                    child.top,
-                    child.right,
-                    child.bottom,
-                    endValues.getValue(Bound.RIGHT) - endValues.getValue(Bound.LEFT),
-                    endValues.getValue(Bound.BOTTOM) - endValues.getValue(Bound.TOP)
-                )
+                val childStartValues =
+                    mapOf(
+                        Bound.LEFT to child.left,
+                        Bound.TOP to child.top,
+                        Bound.RIGHT to child.right,
+                        Bound.BOTTOM to child.bottom
+                    )
+                val childEndValues =
+                    processChildEndValuesForRemoval(
+                        destination,
+                        child.left,
+                        child.top,
+                        child.right,
+                        child.bottom,
+                        endValues.getValue(Bound.RIGHT) - endValues.getValue(Bound.LEFT),
+                        endValues.getValue(Bound.BOTTOM) - endValues.getValue(Bound.TOP)
+                    )
 
                 val boundsToAnimate = mutableSetOf<Bound>()
                 if (child.left != endValues.getValue(Bound.LEFT)) boundsToAnimate.add(Bound.LEFT)
@@ -520,17 +530,17 @@
         }
 
         /**
-         * Returns whether the given [visibility] and bounds are consistent with a view being
-         * currently visible on screen.
+         * Returns whether the given [visibility] and bounds are consistent with a view being a
+         * contributing part of the hierarchy.
          */
-        private fun isVisible(
+        private fun occupiesSpace(
             visibility: Int,
             left: Int,
             top: Int,
             right: Int,
             bottom: Int
         ): Boolean {
-            return visibility == View.VISIBLE && left != right && top != bottom
+            return visibility != View.GONE && left != right && top != bottom
         }
 
         /**
@@ -543,6 +553,7 @@
          * not newly introduced margins are included.
          *
          * Base case
+         * ```
          *     1) origin=TOP
          *         x---------x    x---------x    x---------x    x---------x    x---------x
          *                        x---------x    |         |    |         |    |         |
@@ -561,11 +572,11 @@
          *              x      ->    x---x    ->   |     |   ->  |       |  -> |         |
          *                                         x-----x       x-------x     |         |
          *                                                                     x---------x
-         *
+         * ```
          * In case the start and end values differ in the direction of the origin, and
          * [ignorePreviousValues] is false, the previous values are used and a translation is
          * included in addition to the view expansion.
-         *
+         * ```
          *     origin=TOP_LEFT - (0,0,0,0) -> (30,30,70,70)
          *         x
          *                         x--x
@@ -574,6 +585,7 @@
          *                                         x----x          |      |
          *                                                         |      |
          *                                                         x------x
+         * ```
          */
         private fun processStartValues(
             origin: Hotspot?,
@@ -598,42 +610,54 @@
             var bottom = startBottom
 
             if (origin != null) {
-                left = when (origin) {
-                    Hotspot.CENTER -> (newLeft + newRight) / 2
-                    Hotspot.BOTTOM_LEFT, Hotspot.LEFT, Hotspot.TOP_LEFT -> min(startLeft, newLeft)
-                    Hotspot.TOP, Hotspot.BOTTOM -> newLeft
-                    Hotspot.TOP_RIGHT, Hotspot.RIGHT, Hotspot.BOTTOM_RIGHT -> max(
-                        startRight,
-                        newRight
-                    )
-                }
-                top = when (origin) {
-                    Hotspot.CENTER -> (newTop + newBottom) / 2
-                    Hotspot.TOP_LEFT, Hotspot.TOP, Hotspot.TOP_RIGHT -> min(startTop, newTop)
-                    Hotspot.LEFT, Hotspot.RIGHT -> newTop
-                    Hotspot.BOTTOM_RIGHT, Hotspot.BOTTOM, Hotspot.BOTTOM_LEFT -> max(
-                        startBottom,
-                        newBottom
-                    )
-                }
-                right = when (origin) {
-                    Hotspot.CENTER -> (newLeft + newRight) / 2
-                    Hotspot.TOP_RIGHT, Hotspot.RIGHT, Hotspot.BOTTOM_RIGHT -> max(
-                        startRight,
-                        newRight
-                    )
-                    Hotspot.TOP, Hotspot.BOTTOM -> newRight
-                    Hotspot.BOTTOM_LEFT, Hotspot.LEFT, Hotspot.TOP_LEFT -> min(startLeft, newLeft)
-                }
-                bottom = when (origin) {
-                    Hotspot.CENTER -> (newTop + newBottom) / 2
-                    Hotspot.BOTTOM_RIGHT, Hotspot.BOTTOM, Hotspot.BOTTOM_LEFT -> max(
-                        startBottom,
-                        newBottom
-                    )
-                    Hotspot.LEFT, Hotspot.RIGHT -> newBottom
-                    Hotspot.TOP_LEFT, Hotspot.TOP, Hotspot.TOP_RIGHT -> min(startTop, newTop)
-                }
+                left =
+                    when (origin) {
+                        Hotspot.CENTER -> (newLeft + newRight) / 2
+                        Hotspot.BOTTOM_LEFT,
+                        Hotspot.LEFT,
+                        Hotspot.TOP_LEFT -> min(startLeft, newLeft)
+                        Hotspot.TOP,
+                        Hotspot.BOTTOM -> newLeft
+                        Hotspot.TOP_RIGHT,
+                        Hotspot.RIGHT,
+                        Hotspot.BOTTOM_RIGHT -> max(startRight, newRight)
+                    }
+                top =
+                    when (origin) {
+                        Hotspot.CENTER -> (newTop + newBottom) / 2
+                        Hotspot.TOP_LEFT,
+                        Hotspot.TOP,
+                        Hotspot.TOP_RIGHT -> min(startTop, newTop)
+                        Hotspot.LEFT,
+                        Hotspot.RIGHT -> newTop
+                        Hotspot.BOTTOM_RIGHT,
+                        Hotspot.BOTTOM,
+                        Hotspot.BOTTOM_LEFT -> max(startBottom, newBottom)
+                    }
+                right =
+                    when (origin) {
+                        Hotspot.CENTER -> (newLeft + newRight) / 2
+                        Hotspot.TOP_RIGHT,
+                        Hotspot.RIGHT,
+                        Hotspot.BOTTOM_RIGHT -> max(startRight, newRight)
+                        Hotspot.TOP,
+                        Hotspot.BOTTOM -> newRight
+                        Hotspot.BOTTOM_LEFT,
+                        Hotspot.LEFT,
+                        Hotspot.TOP_LEFT -> min(startLeft, newLeft)
+                    }
+                bottom =
+                    when (origin) {
+                        Hotspot.CENTER -> (newTop + newBottom) / 2
+                        Hotspot.BOTTOM_RIGHT,
+                        Hotspot.BOTTOM,
+                        Hotspot.BOTTOM_LEFT -> max(startBottom, newBottom)
+                        Hotspot.LEFT,
+                        Hotspot.RIGHT -> newBottom
+                        Hotspot.TOP_LEFT,
+                        Hotspot.TOP,
+                        Hotspot.TOP_RIGHT -> min(startTop, newTop)
+                    }
             }
 
             return mapOf(
@@ -649,6 +673,7 @@
          * view's starting bounds.
          *
          * Examples:
+         * ```
          *     1) destination=TOP
          *         x---------x    x---------x    x---------x    x---------x    x---------x
          *         |         |    |         |    |         |    x---------x
@@ -667,6 +692,7 @@
          *         |         | ->  |       |  ->   |     |   ->    x---x    ->      x
          *         |         |     x-------x       x-----x
          *         x---------x
+         * ```
          */
         private fun processEndValuesForRemoval(
             destination: Hotspot,
@@ -675,32 +701,54 @@
             right: Int,
             bottom: Int
         ): Map<Bound, Int> {
-            val endLeft = when (destination) {
-                Hotspot.CENTER -> (left + right) / 2
-                Hotspot.BOTTOM, Hotspot.BOTTOM_LEFT, Hotspot.LEFT, Hotspot.TOP_LEFT, Hotspot.TOP ->
-                    left
-                Hotspot.TOP_RIGHT, Hotspot.RIGHT, Hotspot.BOTTOM_RIGHT -> right
-            }
-            val endTop = when (destination) {
-                Hotspot.CENTER -> (top + bottom) / 2
-                Hotspot.LEFT, Hotspot.TOP_LEFT, Hotspot.TOP, Hotspot.TOP_RIGHT, Hotspot.RIGHT ->
-                    top
-                Hotspot.BOTTOM_RIGHT, Hotspot.BOTTOM, Hotspot.BOTTOM_LEFT -> bottom
-            }
-            val endRight = when (destination) {
-                Hotspot.CENTER -> (left + right) / 2
-                Hotspot.TOP, Hotspot.TOP_RIGHT, Hotspot.RIGHT,
-                Hotspot.BOTTOM_RIGHT, Hotspot.BOTTOM ->
-                    right
-                Hotspot.BOTTOM_LEFT, Hotspot.LEFT, Hotspot.TOP_LEFT -> left
-            }
-            val endBottom = when (destination) {
-                Hotspot.CENTER -> (top + bottom) / 2
-                Hotspot.RIGHT, Hotspot.BOTTOM_RIGHT, Hotspot.BOTTOM,
-                Hotspot.BOTTOM_LEFT, Hotspot.LEFT ->
-                    bottom
-                Hotspot.TOP_LEFT, Hotspot.TOP, Hotspot.TOP_RIGHT -> top
-            }
+            val endLeft =
+                when (destination) {
+                    Hotspot.CENTER -> (left + right) / 2
+                    Hotspot.BOTTOM,
+                    Hotspot.BOTTOM_LEFT,
+                    Hotspot.LEFT,
+                    Hotspot.TOP_LEFT,
+                    Hotspot.TOP -> left
+                    Hotspot.TOP_RIGHT,
+                    Hotspot.RIGHT,
+                    Hotspot.BOTTOM_RIGHT -> right
+                }
+            val endTop =
+                when (destination) {
+                    Hotspot.CENTER -> (top + bottom) / 2
+                    Hotspot.LEFT,
+                    Hotspot.TOP_LEFT,
+                    Hotspot.TOP,
+                    Hotspot.TOP_RIGHT,
+                    Hotspot.RIGHT -> top
+                    Hotspot.BOTTOM_RIGHT,
+                    Hotspot.BOTTOM,
+                    Hotspot.BOTTOM_LEFT -> bottom
+                }
+            val endRight =
+                when (destination) {
+                    Hotspot.CENTER -> (left + right) / 2
+                    Hotspot.TOP,
+                    Hotspot.TOP_RIGHT,
+                    Hotspot.RIGHT,
+                    Hotspot.BOTTOM_RIGHT,
+                    Hotspot.BOTTOM -> right
+                    Hotspot.BOTTOM_LEFT,
+                    Hotspot.LEFT,
+                    Hotspot.TOP_LEFT -> left
+                }
+            val endBottom =
+                when (destination) {
+                    Hotspot.CENTER -> (top + bottom) / 2
+                    Hotspot.RIGHT,
+                    Hotspot.BOTTOM_RIGHT,
+                    Hotspot.BOTTOM,
+                    Hotspot.BOTTOM_LEFT,
+                    Hotspot.LEFT -> bottom
+                    Hotspot.TOP_LEFT,
+                    Hotspot.TOP,
+                    Hotspot.TOP_RIGHT -> top
+                }
 
             return mapOf(
                 Bound.LEFT to endLeft,
@@ -718,6 +766,7 @@
          * its center is at the [destination].
          *
          * Examples:
+         * ```
          *     1) destination=TOP
          *         The child maintains its left and right positions, but is shifted up so that its
          *         center is on the parent's end top edge.
@@ -725,6 +774,7 @@
          *         The child shifts so that its center is on the parent's end bottom left corner.
          *     3) destination=CENTER
          *         The child shifts so that its own center is on the parent's end center.
+         * ```
          */
         private fun processChildEndValuesForRemoval(
             destination: Hotspot,
@@ -738,32 +788,54 @@
             val halfWidth = (right - left) / 2
             val halfHeight = (bottom - top) / 2
 
-            val endLeft = when (destination) {
-                Hotspot.CENTER -> (parentWidth / 2) - halfWidth
-                Hotspot.BOTTOM_LEFT, Hotspot.LEFT, Hotspot.TOP_LEFT -> -halfWidth
-                Hotspot.TOP_RIGHT, Hotspot.RIGHT, Hotspot.BOTTOM_RIGHT -> parentWidth - halfWidth
-                Hotspot.TOP, Hotspot.BOTTOM -> left
-            }
-            val endTop = when (destination) {
-                Hotspot.CENTER -> (parentHeight / 2) - halfHeight
-                Hotspot.TOP_LEFT, Hotspot.TOP, Hotspot.TOP_RIGHT -> -halfHeight
-                Hotspot.BOTTOM_RIGHT, Hotspot.BOTTOM, Hotspot.BOTTOM_LEFT ->
-                    parentHeight - halfHeight
-                Hotspot.LEFT, Hotspot.RIGHT -> top
-            }
-            val endRight = when (destination) {
-                Hotspot.CENTER -> (parentWidth / 2) + halfWidth
-                Hotspot.TOP_RIGHT, Hotspot.RIGHT, Hotspot.BOTTOM_RIGHT -> parentWidth + halfWidth
-                Hotspot.BOTTOM_LEFT, Hotspot.LEFT, Hotspot.TOP_LEFT -> halfWidth
-                Hotspot.TOP, Hotspot.BOTTOM -> right
-            }
-            val endBottom = when (destination) {
-                Hotspot.CENTER -> (parentHeight / 2) + halfHeight
-                Hotspot.BOTTOM_RIGHT, Hotspot.BOTTOM, Hotspot.BOTTOM_LEFT ->
-                    parentHeight + halfHeight
-                Hotspot.TOP_LEFT, Hotspot.TOP, Hotspot.TOP_RIGHT -> halfHeight
-                Hotspot.LEFT, Hotspot.RIGHT -> bottom
-            }
+            val endLeft =
+                when (destination) {
+                    Hotspot.CENTER -> (parentWidth / 2) - halfWidth
+                    Hotspot.BOTTOM_LEFT,
+                    Hotspot.LEFT,
+                    Hotspot.TOP_LEFT -> -halfWidth
+                    Hotspot.TOP_RIGHT,
+                    Hotspot.RIGHT,
+                    Hotspot.BOTTOM_RIGHT -> parentWidth - halfWidth
+                    Hotspot.TOP,
+                    Hotspot.BOTTOM -> left
+                }
+            val endTop =
+                when (destination) {
+                    Hotspot.CENTER -> (parentHeight / 2) - halfHeight
+                    Hotspot.TOP_LEFT,
+                    Hotspot.TOP,
+                    Hotspot.TOP_RIGHT -> -halfHeight
+                    Hotspot.BOTTOM_RIGHT,
+                    Hotspot.BOTTOM,
+                    Hotspot.BOTTOM_LEFT -> parentHeight - halfHeight
+                    Hotspot.LEFT,
+                    Hotspot.RIGHT -> top
+                }
+            val endRight =
+                when (destination) {
+                    Hotspot.CENTER -> (parentWidth / 2) + halfWidth
+                    Hotspot.TOP_RIGHT,
+                    Hotspot.RIGHT,
+                    Hotspot.BOTTOM_RIGHT -> parentWidth + halfWidth
+                    Hotspot.BOTTOM_LEFT,
+                    Hotspot.LEFT,
+                    Hotspot.TOP_LEFT -> halfWidth
+                    Hotspot.TOP,
+                    Hotspot.BOTTOM -> right
+                }
+            val endBottom =
+                when (destination) {
+                    Hotspot.CENTER -> (parentHeight / 2) + halfHeight
+                    Hotspot.BOTTOM_RIGHT,
+                    Hotspot.BOTTOM,
+                    Hotspot.BOTTOM_LEFT -> parentHeight + halfHeight
+                    Hotspot.TOP_LEFT,
+                    Hotspot.TOP,
+                    Hotspot.TOP_RIGHT -> halfHeight
+                    Hotspot.LEFT,
+                    Hotspot.RIGHT -> bottom
+                }
 
             return mapOf(
                 Bound.LEFT to endLeft,
@@ -833,44 +905,49 @@
             duration: Long,
             ephemeral: Boolean
         ) {
-            val propertyValuesHolders = buildList {
-                bounds.forEach { bound ->
-                    add(
-                        PropertyValuesHolder.ofInt(
-                            PROPERTIES[bound],
-                            startValues.getValue(bound),
-                            endValues.getValue(bound)
-                        )
-                    )
-                }
-            }.toTypedArray()
+            val propertyValuesHolders =
+                buildList {
+                        bounds.forEach { bound ->
+                            add(
+                                PropertyValuesHolder.ofInt(
+                                    PROPERTIES[bound],
+                                    startValues.getValue(bound),
+                                    endValues.getValue(bound)
+                                )
+                            )
+                        }
+                    }
+                    .toTypedArray()
 
             (view.getTag(R.id.tag_animator) as? ObjectAnimator)?.cancel()
 
             val animator = ObjectAnimator.ofPropertyValuesHolder(view, *propertyValuesHolders)
             animator.interpolator = interpolator
             animator.duration = duration
-            animator.addListener(object : AnimatorListenerAdapter() {
-                var cancelled = false
+            animator.addListener(
+                object : AnimatorListenerAdapter() {
+                    var cancelled = false
 
-                override fun onAnimationEnd(animation: Animator) {
-                    view.setTag(R.id.tag_animator, null /* tag */)
-                    bounds.forEach { view.setTag(it.overrideTag, null /* tag */) }
+                    override fun onAnimationEnd(animation: Animator) {
+                        view.setTag(R.id.tag_animator, null /* tag */)
+                        bounds.forEach { view.setTag(it.overrideTag, null /* tag */) }
 
-                    // When an animation is cancelled, a new one might be taking over. We shouldn't
-                    // unregister the listener yet.
-                    if (ephemeral && !cancelled) {
-                        // The duration is the same for the whole hierarchy, so it's safe to remove
-                        // the listener recursively. We do this because some descendant views might
-                        // not change bounds, and therefore not animate and leak the listener.
-                        recursivelyRemoveListener(view)
+                        // When an animation is cancelled, a new one might be taking over. We
+                        // shouldn't unregister the listener yet.
+                        if (ephemeral && !cancelled) {
+                            // The duration is the same for the whole hierarchy, so it's safe to
+                            // remove the listener recursively. We do this because some descendant
+                            // views might not change bounds, and therefore not animate and leak the
+                            // listener.
+                            recursivelyRemoveListener(view)
+                        }
+                    }
+
+                    override fun onAnimationCancel(animation: Animator?) {
+                        cancelled = true
                     }
                 }
-
-                override fun onAnimationCancel(animation: Animator?) {
-                    cancelled = true
-                }
-            })
+            )
 
             bounds.forEach { bound -> setBound(view, bound, startValues.getValue(bound)) }
 
@@ -902,7 +979,15 @@
 
     /** An enum used to determine the origin of addition animations. */
     enum class Hotspot {
-        CENTER, LEFT, TOP_LEFT, TOP, TOP_RIGHT, RIGHT, BOTTOM_RIGHT, BOTTOM, BOTTOM_LEFT
+        CENTER,
+        LEFT,
+        TOP_LEFT,
+        TOP,
+        TOP_RIGHT,
+        RIGHT,
+        BOTTOM_RIGHT,
+        BOTTOM,
+        BOTTOM_LEFT
     }
 
     private enum class Bound(val label: String, val overrideTag: Int) {
diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/ViewRootSync.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/ViewRootSync.kt
index 76de7b5..77640f1 100644
--- a/packages/SystemUI/animation/src/com/android/systemui/animation/ViewRootSync.kt
+++ b/packages/SystemUI/animation/src/com/android/systemui/animation/ViewRootSync.kt
@@ -11,37 +11,36 @@
     /**
      * Synchronize the next draw between the view roots of [view] and [otherView], then run [then].
      *
-     * Note that in some cases, the synchronization might not be possible (e.g. WM consumed the
-     * next transactions) or disabled (temporarily, on low ram devices). In this case, [then] will
-     * be called without synchronizing.
+     * Note that in some cases, the synchronization might not be possible (e.g. WM consumed the next
+     * transactions) or disabled (temporarily, on low ram devices). In this case, [then] will be
+     * called without synchronizing.
      */
-    fun synchronizeNextDraw(
-        view: View,
-        otherView: View,
-        then: () -> Unit
-    ) {
-        if (!view.isAttachedToWindow || view.viewRootImpl == null ||
-            !otherView.isAttachedToWindow || otherView.viewRootImpl == null ||
-            view.viewRootImpl == otherView.viewRootImpl) {
+    fun synchronizeNextDraw(view: View, otherView: View, then: () -> Unit) {
+        if (
+            !view.isAttachedToWindow ||
+                view.viewRootImpl == null ||
+                !otherView.isAttachedToWindow ||
+                otherView.viewRootImpl == null ||
+                view.viewRootImpl == otherView.viewRootImpl
+        ) {
             // No need to synchronize if either the touch surface or dialog view is not attached
             // to a window.
             then()
             return
         }
 
-        surfaceSyncer = SurfaceSyncer().apply {
-            val syncId = setupSync(Runnable { then() })
-            addToSync(syncId, view)
-            addToSync(syncId, otherView)
-            markSyncReady(syncId)
-        }
+        surfaceSyncer =
+            SurfaceSyncer().apply {
+                val syncId = setupSync(Runnable { then() })
+                addToSync(syncId, view)
+                addToSync(syncId, otherView)
+                markSyncReady(syncId)
+            }
     }
 
-    /**
-     * A Java-friendly API for [synchronizeNextDraw].
-     */
+    /** A Java-friendly API for [synchronizeNextDraw]. */
     @JvmStatic
     fun synchronizeNextDraw(view: View, otherView: View, then: Runnable) {
         synchronizeNextDraw(view, otherView, then::run)
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/docs/camera.md b/packages/SystemUI/docs/camera.md
index cabc65c..a1c8458 100644
--- a/packages/SystemUI/docs/camera.md
+++ b/packages/SystemUI/docs/camera.md
@@ -1,34 +1,23 @@
 # How double-click power launches the camera
-
-_as of august 2020_
-
+_Last update: July 2022_
 
 ## Sequence of events
-
-
-
-1. [PhoneWindowManager.java](/services/core/java/com/android/server/policy/PhoneWindowManager.java) is responsible for all power button presses (see `interceptPowerKeyDown`). 
-2. Even though PWMgr has a lot of logic to detect all manner of power button multipresses and gestures, it also checks with GestureLauncherService, which is also [offered the chance](/services/core/java/com/android/server/policy/PhoneWindowManager.java#943) to [intercept](/services/core/java/com/android/server/GestureLauncherService.java#358) the power key.
-3. GLS is responsible for the camera timeout, and if it detects one, it [forwards it to the StatusBarManagerService](/services/core/java/com/android/server/GestureLauncherService.java#475) (which hands it off to SystemUI).
-4. Inside SystemUI, [onCameraLaunchDetected](/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java#3927) looks at the keyguard state and determines 
+1. [PhoneWindowManager.java](/services/core/java/com/android/server/policy/PhoneWindowManager.java) is responsible for all power button presses (see `interceptPowerKeyDown`) 
+2. Even though `PhoneWindowManager` has a lot of logic to detect all manner of power button multi-presses and gestures, it also checks with `GestureLauncherService`, which is also [offered the chance](/services/core/java/com/android/server/policy/PhoneWindowManager.java#943) to [intercept](/services/core/java/com/android/server/GestureLauncherService.java) the power key
+3. `GestureLauncherService` is responsible for the camera timeout, and if it detects one, it [forwards it to the StatusBarManagerService](/services/core/java/com/android/server/GestureLauncherService.java) (which hands it off to SystemUI)
+4. Inside SystemUI, `onCameraLaunchDetected` in [CentralSurfacesCommandQueueCallbacks.java](/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java) looks at the keyguard state and determines
     1. whether the camera is even allowed 
     2. whether the screen is on; if not, we need to delay until that happens
     3. whether the device is locked (defined as "keyguard is showing").
-5. If the device is unlocked (no keyguard), the camera is launched immediately. [Callsite in onCameraLaunchGestureDetected](/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java#4047).
-6. If the keyguard is up, however, [KeyguardBottomAreaView.launchCamera](/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java#477) takes over to handle the "secure camera" (a different intent, usually directing to the same app, but giving that app the cue to not allow access to the photo roll, etc).
-7. If the intent [would have to launch a resolver](/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java#480) (the user has multiple cameras installed and hasn’t chosen one to always launch for the `SECURE_CAMERA_INTENT`),
-    1. In order to show the resolver, the lockscreen "bouncer" (authentication method) [is first presented](/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java#523).
-8. Otherwise (just one secure camera), [it is launched](/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java#501) (with some window animation gymnastics).
+5. If the device is unlocked (no keyguard), the camera is launched immediately
+6. If the keyguard is up, however, [NotificationPanelViewController.launchCamera](/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java) takes over to handle the "secure camera" (a different intent, usually directing to the same app, but giving that app the cue to not allow access to the photo roll, etc).
+7. If the intent would have to launch a resolver (because the user has multiple camera apps installed and has not chosen one to always launch for the `SECURE_CAMERA_INTENT`, then - in order to show the resolver, the lockscreen "bouncer" (authentication method) is first presented
+8. Otherwise (just one secure camera), it is launched
 
-
-## Which intent launches?
-
-
-
-*   If the keyguard is not showing (device is unlocked)
-    *   `CameraIntents.getInsecureCameraIntent()`, defined to be `MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA`. 
-    *   [Callsite](/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java#3950) in StatusBar.java.
-*   If the keyguard is showing (device locked)
-    *   [KeyguardBottomAreaView.getCameraIntent()](/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java#366) is consulted, which allows the "keyguard right button" (which we don’t actually show) to control the camera intent. The [default implementation](/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java#831) returns one of `CameraIntents.getInsecureCameraIntent()` or `CameraIntents.getSecureCameraIntent()`, which are `MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA` and `MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE`, respectively. 
-    *   [Callsite](/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java#523) in KeyguardBottomAreaView.java.
-*   Note that starting in Android 12, as required by some OEMs, if the special string resource `config_cameraGesturePackage` is nonempty, this will be treated as a package name to be added to the insecure camera intent, constraining the invocation to that single app and typically preventing implicit intent resolution. This package must be on the device or the camera gesture will no longer work properly.
\ No newline at end of file
+## Which intent launches the camera app?
+[CameraGestureHelper](/packages/SystemUI/src/com/android/systemui/camera/CameraGestureHelper.kt) encapsulate this logic. Roughly:
+* If the keyguard is not showing (device is unlocked)
+    *   `CameraIntents.getInsecureCameraIntent()`, defined to be `MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA`.
+* If the keyguard is showing (device is locked)
+    *   one of `CameraIntents.getInsecureCameraIntent()` or `CameraIntents.getSecureCameraIntent()`, which are `MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA` and `MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE`, respectively
+* Note that starting in Android 12, as required by some OEMs, if the special string resource `config_cameraGesturePackage` is nonempty, this will be treated as a package name to be added to the insecure camera intent, constraining the invocation to that single app and typically preventing implicit intent resolution. This package must be on the device or the camera gesture will no longer work properly
diff --git a/packages/SystemUI/docs/device-entry/doze.md b/packages/SystemUI/docs/device-entry/doze.md
index 5ff8851..6b6dce5 100644
--- a/packages/SystemUI/docs/device-entry/doze.md
+++ b/packages/SystemUI/docs/device-entry/doze.md
@@ -17,6 +17,9 @@
 ### DOZE
 Device is asleep and listening for enabled pulsing and wake-up gesture triggers. In this state, no UI shows.
 
+### DOZE_SUSPEND_TRIGGERS
+Device is asleep and not listening for any triggers to wake up. This state is used only when CAR_MODE is active. In this state, no UI shows.
+
 ### DOZE_AOD
 Device is asleep, showing UI, and listening for enabled pulsing and wake-up triggers. In this state, screen brightness is handled by [DozeScreenBrightness][5] which uses the brightness sensor specified by `doze_brightness_sensor_type` in the [SystemUI config][6]. To save power, this should be a low-powered sensor that shouldn't trigger as often as the light sensor used for on-screen adaptive brightness.
 
diff --git a/packages/SystemUI/docs/device-entry/keyguard.md b/packages/SystemUI/docs/device-entry/keyguard.md
index 337f73b7..8634c95 100644
--- a/packages/SystemUI/docs/device-entry/keyguard.md
+++ b/packages/SystemUI/docs/device-entry/keyguard.md
@@ -30,6 +30,10 @@
 
 ### How the device locks
 
+### Quick Affordances
+
+These are interactive UI elements that appear on the lockscreen when the device is locked. They allow the user to perform quick actions without unlocking their device. To learn more about them, please see [this dedicated document](quickaffordance.md)
+
 ## Debugging Tips
 Enable verbose keyguard logs that will print to logcat. Should only be used temporarily for debugging. See [KeyguardConstants][5].
 ```
diff --git a/packages/SystemUI/docs/device-entry/quickaffordance.md b/packages/SystemUI/docs/device-entry/quickaffordance.md
new file mode 100644
index 0000000..a96e5339
--- /dev/null
+++ b/packages/SystemUI/docs/device-entry/quickaffordance.md
@@ -0,0 +1,25 @@
+# Keyguard Quick Affordances
+These are interactive UI elements that appear at the bottom of the lockscreen when the device is
+locked. They allow the user to perform quick actions without unlocking their device. For example:
+opening an screen that lets them control the smart devices in their home, access their touch-to-pay
+credit card, etc.
+
+## Adding a new Quick Affordance
+### Step 1: create a new quick affordance config
+* Create a new class under the [systemui/keyguard/data/quickaffordance](../../src/com/android/systemui/keyguard/data/quickaffordance) directory
+* Please make sure that the class is injected through the Dagger dependency injection system by using the `@Inject` annotation on its main constructor and the `@SysUISingleton` annotation at class level, to make sure only one instance of the class is ever instantiated
+* Have the class implement the [KeyguardQuickAffordanceConfig](../../src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceConfig.kt) interface, notes:
+  * The `state` Flow property must emit `State.Hidden` when the feature is not enabled!
+  * It is safe to assume that `onQuickAffordanceClicked` will not be invoked if-and-only-if the previous rule is followed
+  * When implementing `onQuickAffordanceClicked`, the implementation can do something or it can ask the framework to start an activity using an `Intent` provided by the implementation
+* Please include a unit test for your new implementation under [the correct directory](../../tests/src/com/android/systemui/keyguard/data/quickaffordance)
+
+### Step 2: choose a position and priority
+* Add the new class as a dependency in the constructor of [KeyguardQuickAffordanceConfigs](../../src/com/android/systemui/keyguard/data/repository/KeyguardQuickAffordanceConfigs.kt)
+* Place the new class in one of the available positions in the `configsByPosition` property, note:
+  * In each position, there is a list. The order matters. The order of that list is the priority order in which the framework considers each config. The first config whose state property returns `State.Visible` determines the button that is shown for that position
+  * Please only add to one position. The framework treats each position individually and there is no good way to prevent the same config from making its button appear in more than one position at the same time
+
+### Step 3: manually verify the new quick affordance
+* Build and launch SysUI on a device
+* Verify that the quick affordance button for the new implementation is correctly visible and clicking it does the right thing
diff --git a/packages/SystemUI/docs/user-file-manager.md b/packages/SystemUI/docs/user-file-manager.md
new file mode 100644
index 0000000..52fa206
--- /dev/null
+++ b/packages/SystemUI/docs/user-file-manager.md
@@ -0,0 +1,33 @@
+# UserFileManager
+
+This class is used to generate file paths and SharedPreferences that is compatible for specific OS
+users in SystemUI. Due to constraints in SystemUI, we can only read/write files as the system user.
+Therefore, for secondary users, we want to store secondary user specific files into the system user
+directory.
+
+
+## Usages
+
+Inject UserFileManager into your class.
+
+### fun getFile(fileName: String, userId: Int): File
+Add a file name and user id. You can retrieve the current user id from UserTracker. This will
+return a java.io File object that contains the file path to write/read to.
+
+i.e. `fileManager.getFile("example.xml", userTracker.userId)`
+
+### fun getSharedPreferences(fileName: String, mode: Int, userId: Int): SharedPreferences
+Add a file name, user id, and PreferencesMode. You can retrieve the current user id from
+UserTracker. This returns SharedPreferences object that is tied to the specific user. Note that if
+the SharedPreferences file does not exist, one will be created automatically. See
+[SharedPreferences documentation](https://developer.android.com/reference/android/content/Context#getSharedPreferences(java.lang.String,%20int))
+for more details.
+
+i.e. `fileManager.getSharedPreferences("prefs.xml", userTracker.userId, 0)`
+
+## Handling User Removal
+
+This class will listen for Intent.ACTION_USER_REMOVED and remove directories that no longer
+corresponding to active users. Additionally, upon start up, the class will run the same query for
+deletion to ensure that there is no stale data.
+
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 3cf7645..eac765a 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
@@ -105,6 +105,11 @@
         void setDozeAmount(float amount);
 
         /**
+         * Set the current keyguard bypass enabled status.
+         */
+        default void setKeyguardBypassEnabled(boolean enabled) {}
+
+        /**
          * Overrides how Intents/PendingIntents gets launched. Mostly to support auth from
          * the lockscreen.
          */
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockPlugin.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockPlugin.java
index 3058d94..bef61b8 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockPlugin.java
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockPlugin.java
@@ -23,7 +23,9 @@
 
 /**
  * Plugin used to replace main clock in keyguard.
+ * @deprecated Migrating to ClockProviderPlugin
  */
+@Deprecated
 @ProvidesInterface(action = ClockPlugin.ACTION, version = ClockPlugin.VERSION)
 public interface ClockPlugin extends Plugin {
 
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockProviderPlugin.kt b/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockProviderPlugin.kt
new file mode 100644
index 0000000..0c191607
--- /dev/null
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockProviderPlugin.kt
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT 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.plugins
+
+import android.graphics.drawable.Drawable
+import android.view.View
+import com.android.internal.colorextraction.ColorExtractor
+import com.android.systemui.plugins.annotations.ProvidesInterface
+import java.io.PrintWriter
+import java.util.Locale
+import java.util.TimeZone
+
+/** Identifies a clock design */
+typealias ClockId = String
+
+/** A Plugin which exposes the ClockProvider interface */
+@ProvidesInterface(action = ClockProviderPlugin.ACTION, version = ClockProviderPlugin.VERSION)
+interface ClockProviderPlugin : Plugin, ClockProvider {
+    companion object {
+        const val ACTION = "com.android.systemui.action.PLUGIN_CLOCK_PROVIDER"
+        const val VERSION = 1
+    }
+}
+
+/** Interface for building clocks and providing information about those clocks */
+interface ClockProvider {
+    /** Returns metadata for all clocks this provider knows about */
+    fun getClocks(): List<ClockMetadata>
+
+    /** Initializes and returns the target clock design */
+    fun createClock(id: ClockId): Clock
+
+    /** A static thumbnail for rendering in some examples */
+    fun getClockThumbnail(id: ClockId): Drawable?
+}
+
+/** Interface for controlling an active clock */
+interface Clock {
+    /** A small version of the clock, appropriate for smaller viewports */
+    val smallClock: View
+
+    /** A large version of the clock, appropriate when a bigger viewport is available */
+    val largeClock: View
+
+    /** Events that clocks may need to respond to */
+    val events: ClockEvents
+
+    /** Triggers for various animations */
+    val animation: ClockAnimation
+
+    /** Optional method for dumping debug information */
+    fun dump(pw: PrintWriter) { }
+}
+
+/** Events that should call when various rendering parameters change */
+interface ClockEvents {
+    /** Call every time tick */
+    fun onTimeTick()
+
+    /** Call whenever timezone changes */
+    fun onTimeZoneChanged(timeZone: TimeZone) { }
+
+    /** Call whenever the text time format changes (12hr vs 24hr) */
+    fun onTimeFormatChanged(is24Hr: Boolean) { }
+
+    /** Call whenever the locale changes */
+    fun onLocaleChanged(locale: Locale) { }
+
+    /** Call whenever font settings change */
+    fun onFontSettingChanged() { }
+
+    /** Call whenever the color pallete should update */
+    fun onColorPaletteChanged(palette: ColorExtractor.GradientColors) { }
+}
+
+/** Methods which trigger various clock animations */
+interface ClockAnimation {
+    /** Initializes the doze & fold animation positions. Defaults to neither folded nor dozing. */
+    fun initialize(dozeFraction: Float, foldFraction: Float) { }
+
+    /** Runs an enter animation (if any) */
+    fun enter() { }
+
+    /** Sets how far into AOD the device currently is. */
+    fun doze(fraction: Float) { }
+
+    /** Sets how far into the folding animation the device is. */
+    fun fold(fraction: Float) { }
+
+    /** Runs the battery animation (if any). */
+    fun charge() { }
+}
+
+/** Some data about a clock design */
+data class ClockMetadata(
+    val clockId: ClockId,
+    val name: String
+)
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/FalsingManager.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/FalsingManager.java
index 0f10589..bd628cc 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/FalsingManager.java
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/FalsingManager.java
@@ -29,7 +29,7 @@
 /**
  * Interface that decides whether a touch on the phone was accidental. i.e. Pocket Dialing.
  *
- * {@see com.android.systemui.classifier.FalsingManagerImpl}
+ * {@see com.android.systemui.classifier.BrightLineFalsingManager}
  */
 @ProvidesInterface(version = FalsingManager.VERSION)
 public interface FalsingManager {
diff --git a/packages/SystemUI/proguard.flags b/packages/SystemUI/proguard.flags
index e74b6c7..7538555 100644
--- a/packages/SystemUI/proguard.flags
+++ b/packages/SystemUI/proguard.flags
@@ -5,12 +5,17 @@
 -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 com.android.systemui.car.CarSystemUIFactory
--keep class com.android.systemui.SystemUIFactory
--keep class com.android.systemui.tv.TvSystemUIFactory
+-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>();
+}
+
 -keepclasseswithmembers class * {
     public <init>(android.content.Context, android.util.AttributeSet);
 }
diff --git a/packages/SystemUI/res-keyguard/drawable/qs_auto_rotate_icon_off.xml b/packages/SystemUI/res-keyguard/drawable/qs_auto_rotate_icon_off.xml
new file mode 100644
index 0000000..538f328
--- /dev/null
+++ b/packages/SystemUI/res-keyguard/drawable/qs_auto_rotate_icon_off.xml
@@ -0,0 +1,725 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ Copyright (C) 2020 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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">
+    <target android:name="_R_G_L_2_G_T_1">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="28"
+                    android:propertyName="translateX"
+                    android:startOffset="0"
+                    android:valueFrom="7.062"
+                    android:valueTo="8.578"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="221"
+                    android:propertyName="translateX"
+                    android:startOffset="28"
+                    android:valueFrom="8.578"
+                    android:valueTo="-1.789"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="418"
+                    android:propertyName="translateX"
+                    android:startOffset="248"
+                    android:valueFrom="-1.789"
+                    android:valueTo="-7"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.1,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_2_G_T_1">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="28"
+                    android:propertyName="translateY"
+                    android:startOffset="0"
+                    android:valueFrom="3.312"
+                    android:valueTo="2.016"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="221"
+                    android:propertyName="translateY"
+                    android:startOffset="28"
+                    android:valueFrom="2.016"
+                    android:valueTo="-8.789"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="418"
+                    android:propertyName="translateY"
+                    android:startOffset="248"
+                    android:valueFrom="-8.789"
+                    android:valueTo="-3.5"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.1,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_2_G_T_1">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="28"
+                    android:propertyName="rotation"
+                    android:startOffset="0"
+                    android:valueFrom="180"
+                    android:valueTo="90"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="166"
+                    android:propertyName="rotation"
+                    android:startOffset="28"
+                    android:valueFrom="90"
+                    android:valueTo="90"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="55"
+                    android:propertyName="rotation"
+                    android:startOffset="193"
+                    android:valueFrom="90"
+                    android:valueTo="0"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_2_G_N_1_T_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="250"
+                    android:propertyName="rotation"
+                    android:startOffset="0"
+                    android:valueFrom="-135"
+                    android:valueTo="-180"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_1_G_T_1">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="28"
+                    android:propertyName="translateX"
+                    android:startOffset="0"
+                    android:valueFrom="-7"
+                    android:valueTo="-8.859"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="221"
+                    android:propertyName="translateX"
+                    android:startOffset="28"
+                    android:valueFrom="-8.859"
+                    android:valueTo="1.69"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="418"
+                    android:propertyName="translateX"
+                    android:startOffset="248"
+                    android:valueFrom="1.69"
+                    android:valueTo="7"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.1,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_1_G_T_1">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="28"
+                    android:propertyName="translateY"
+                    android:startOffset="0"
+                    android:valueFrom="-3.594"
+                    android:valueTo="-1.922"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="221"
+                    android:propertyName="translateY"
+                    android:startOffset="28"
+                    android:valueFrom="-1.922"
+                    android:valueTo="8.627"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="418"
+                    android:propertyName="translateY"
+                    android:startOffset="248"
+                    android:valueFrom="8.627"
+                    android:valueTo="3.5"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.1,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_1_G_T_1">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="28"
+                    android:propertyName="rotation"
+                    android:startOffset="0"
+                    android:valueFrom="360"
+                    android:valueTo="270"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="166"
+                    android:propertyName="rotation"
+                    android:startOffset="28"
+                    android:valueFrom="270"
+                    android:valueTo="270"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="55"
+                    android:propertyName="rotation"
+                    android:startOffset="193"
+                    android:valueFrom="270"
+                    android:valueTo="180"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="418"
+                    android:propertyName="rotation"
+                    android:startOffset="248"
+                    android:valueFrom="180"
+                    android:valueTo="180"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0 0.1,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_1_G_N_1_T_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="250"
+                    android:propertyName="rotation"
+                    android:startOffset="0"
+                    android:valueFrom="-135"
+                    android:valueTo="-180"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_D_0_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="28"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M8.52 3.53 C8.52,3.53 2.94,9.08 2.94,9.08 C2.3,9.72 1.27,9.74 0.65,9.12 C0.65,9.12 -7.53,0.95 -7.53,0.95 C-7.53,0.95 -4.7,0.94 -4.7,0.94 C-4.7,0.94 1.78,7.42 1.78,7.42 C1.78,7.42 7.11,2.11 7.11,2.11 C7.11,2.11 7.14,2.14 7.14,2.14 C7.14,2.14 8.48,3.49 8.48,3.49 C8.48,3.49 8.5,3.51 8.5,3.51 C8.5,3.51 8.52,3.53 8.52,3.53c "
+                    android:valueTo="M8.82 3.18 C8.26,3.74 2.94,9.08 2.94,9.08 C2.3,9.72 1.27,9.74 0.65,9.12 C0.65,9.12 -6.08,2.36 -6.08,2.36 C-6.08,2.36 -4.7,0.94 -4.7,0.94 C-4.7,0.94 1.78,7.42 1.78,7.42 C1.78,7.42 7.5,1.77 7.5,1.77 C7.5,1.77 7.49,1.78 7.49,1.78 C7.49,1.78 8.87,0.41 8.87,0.41 C8.87,0.41 8.95,0.5 9.05,0.58 C9.86,1.4 9.7,2.29 8.82,3.18c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="66"
+                    android:propertyName="pathData"
+                    android:startOffset="28"
+                    android:valueFrom="M8.82 3.18 C8.26,3.74 2.94,9.08 2.94,9.08 C2.3,9.72 1.27,9.74 0.65,9.12 C0.65,9.12 -6.08,2.36 -6.08,2.36 C-6.08,2.36 -4.7,0.94 -4.7,0.94 C-4.7,0.94 1.78,7.42 1.78,7.42 C1.78,7.42 7.5,1.77 7.5,1.77 C7.5,1.77 7.49,1.78 7.49,1.78 C7.49,1.78 8.87,0.41 8.87,0.41 C8.87,0.41 8.95,0.5 9.05,0.58 C9.86,1.4 9.7,2.29 8.82,3.18c "
+                    android:valueTo="M8.82 3.18 C8.26,3.74 2.94,9.08 2.94,9.08 C2.3,9.72 1.27,9.74 0.65,9.12 C0.65,9.12 -2.78,5.89 -2.78,5.89 C-2.78,5.89 -1.29,4.47 -1.29,4.47 C-1.29,4.47 1.78,7.42 1.78,7.42 C1.78,7.42 7.5,1.77 7.5,1.77 C7.5,1.77 4.54,-1.11 4.54,-1.11 C4.54,-1.11 5.95,-2.51 5.95,-2.51 C5.95,-2.51 8.36,-0.12 9.05,0.58 C9.86,1.4 9.7,2.29 8.82,3.18c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="72"
+                    android:propertyName="pathData"
+                    android:startOffset="94"
+                    android:valueFrom="M8.82 3.18 C8.26,3.74 2.94,9.08 2.94,9.08 C2.3,9.72 1.27,9.74 0.65,9.12 C0.65,9.12 -2.78,5.89 -2.78,5.89 C-2.78,5.89 -1.29,4.47 -1.29,4.47 C-1.29,4.47 1.78,7.42 1.78,7.42 C1.78,7.42 7.5,1.77 7.5,1.77 C7.5,1.77 4.54,-1.11 4.54,-1.11 C4.54,-1.11 5.95,-2.51 5.95,-2.51 C5.95,-2.51 8.36,-0.12 9.05,0.58 C9.86,1.4 9.7,2.29 8.82,3.18c "
+                    android:valueTo="M8.82 3.18 C8.26,3.74 2.94,9.08 2.94,9.08 C2.3,9.72 1.27,9.74 0.65,9.12 C0.65,9.12 0.36,8.83 0.36,8.83 C0.36,8.83 1.8,7.44 1.8,7.44 C1.8,7.44 1.78,7.42 1.78,7.42 C1.78,7.42 7.5,1.77 7.5,1.77 C7.5,1.77 4.54,-1.11 4.54,-1.11 C4.54,-1.11 5.95,-2.51 5.95,-2.51 C5.95,-2.51 8.36,-0.12 9.05,0.58 C9.86,1.4 9.7,2.29 8.82,3.18c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="28"
+                    android:propertyName="pathData"
+                    android:startOffset="166"
+                    android:valueFrom="M8.82 3.18 C8.26,3.74 2.94,9.08 2.94,9.08 C2.3,9.72 1.27,9.74 0.65,9.12 C0.65,9.12 0.36,8.83 0.36,8.83 C0.36,8.83 1.8,7.44 1.8,7.44 C1.8,7.44 1.78,7.42 1.78,7.42 C1.78,7.42 7.5,1.77 7.5,1.77 C7.5,1.77 4.54,-1.11 4.54,-1.11 C4.54,-1.11 5.95,-2.51 5.95,-2.51 C5.95,-2.51 8.36,-0.12 9.05,0.58 C9.86,1.4 9.7,2.29 8.82,3.18c "
+                    android:valueTo="M8.82 3.18 C8.26,3.74 3.22,8.8 3.22,8.8 C3.22,8.8 3.21,8.79 3.21,8.79 C3.21,8.79 3.24,8.8 3.24,8.8 C3.24,8.8 1.8,7.44 1.8,7.44 C1.8,7.44 1.78,7.42 1.78,7.42 C1.78,7.42 7.5,1.77 7.5,1.77 C7.5,1.77 4.54,-1.11 4.54,-1.11 C4.54,-1.11 5.95,-2.51 5.95,-2.51 C5.95,-2.51 8.36,-0.12 9.05,0.58 C9.86,1.4 9.7,2.29 8.82,3.18c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="55"
+                    android:propertyName="pathData"
+                    android:startOffset="193"
+                    android:valueFrom="M8.82 3.18 C8.26,3.74 3.22,8.8 3.22,8.8 C3.22,8.8 3.21,8.79 3.21,8.79 C3.21,8.79 3.24,8.8 3.24,8.8 C3.24,8.8 1.8,7.44 1.8,7.44 C1.8,7.44 1.78,7.42 1.78,7.42 C1.78,7.42 7.5,1.77 7.5,1.77 C7.5,1.77 4.54,-1.11 4.54,-1.11 C4.54,-1.11 5.95,-2.51 5.95,-2.51 C5.95,-2.51 8.36,-0.12 9.05,0.58 C9.86,1.4 9.7,2.29 8.82,3.18c "
+                    android:valueTo="M8.82 3.18 C8.26,3.74 5.82,6.14 5.82,6.14 C5.82,6.14 5.81,6.14 5.81,6.14 C5.81,6.14 5.83,6.14 5.83,6.14 C5.83,6.14 4.39,4.78 4.39,4.78 C4.39,4.78 4.37,4.76 4.37,4.76 C4.37,4.76 7.5,1.77 7.5,1.77 C7.5,1.77 4.54,-1.11 4.54,-1.11 C4.54,-1.11 5.95,-2.51 5.95,-2.51 C5.95,-2.51 8.36,-0.12 9.05,0.58 C9.86,1.4 9.7,2.29 8.82,3.18c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="41"
+                    android:propertyName="pathData"
+                    android:startOffset="248"
+                    android:valueFrom="M8.82 3.18 C8.26,3.74 5.82,6.14 5.82,6.14 C5.82,6.14 5.81,6.14 5.81,6.14 C5.81,6.14 5.83,6.14 5.83,6.14 C5.83,6.14 4.39,4.78 4.39,4.78 C4.39,4.78 4.37,4.76 4.37,4.76 C4.37,4.76 7.5,1.77 7.5,1.77 C7.5,1.77 4.54,-1.11 4.54,-1.11 C4.54,-1.11 5.95,-2.51 5.95,-2.51 C5.95,-2.51 8.36,-0.12 9.05,0.58 C9.86,1.4 9.7,2.29 8.82,3.18c "
+                    android:valueTo="M8.91 3.09 C8.91,3.09 8.91,3.1 8.91,3.1 C8.91,3.1 8.9,3.09 8.9,3.09 C8.9,3.09 7.49,1.74 7.49,1.74 C7.49,1.74 7.5,1.75 7.5,1.75 C7.5,1.75 7.48,1.73 7.48,1.73 C7.48,1.73 7.5,1.77 7.5,1.77 C7.5,1.77 4.54,-1.11 4.54,-1.11 C4.54,-1.11 5.95,-2.51 5.95,-2.51 C5.95,-2.51 8.36,-0.12 9.05,0.58 C9.86,1.4 9.79,2.2 8.91,3.09c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="28"
+                    android:propertyName="pathData"
+                    android:startOffset="290"
+                    android:valueFrom="M8.91 3.09 C8.91,3.09 8.91,3.1 8.91,3.1 C8.91,3.1 8.9,3.09 8.9,3.09 C8.9,3.09 7.49,1.74 7.49,1.74 C7.49,1.74 7.5,1.75 7.5,1.75 C7.5,1.75 7.48,1.73 7.48,1.73 C7.48,1.73 7.5,1.77 7.5,1.77 C7.5,1.77 4.54,-1.11 4.54,-1.11 C4.54,-1.11 5.95,-2.51 5.95,-2.51 C5.95,-2.51 8.36,-0.12 9.05,0.58 C9.86,1.4 9.79,2.2 8.91,3.09c "
+                    android:valueTo="M9.05 0.57 C9.05,0.57 9.05,0.58 9.05,0.58 C9.05,0.58 9.04,0.57 9.04,0.57 C9.04,0.57 7.6,1.83 7.6,1.83 C7.6,1.83 7.61,1.85 7.61,1.85 C7.61,1.85 7.59,1.83 7.59,1.83 C7.59,1.83 7.61,1.86 7.61,1.86 C7.61,1.86 4.54,-1.11 4.54,-1.11 C4.54,-1.11 5.95,-2.51 5.95,-2.51 C5.95,-2.51 9.05,0.58 9.05,0.58 C9.05,0.58 9.05,0.57 9.05,0.57c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="83"
+                    android:propertyName="pathData"
+                    android:startOffset="317"
+                    android:valueFrom="M9.05 0.57 C9.05,0.57 9.05,0.58 9.05,0.58 C9.05,0.58 9.04,0.57 9.04,0.57 C9.04,0.57 7.6,1.83 7.6,1.83 C7.6,1.83 7.61,1.85 7.61,1.85 C7.61,1.85 7.59,1.83 7.59,1.83 C7.59,1.83 7.61,1.86 7.61,1.86 C7.61,1.86 4.54,-1.11 4.54,-1.11 C4.54,-1.11 5.95,-2.51 5.95,-2.51 C5.95,-2.51 9.05,0.58 9.05,0.58 C9.05,0.58 9.05,0.57 9.05,0.57c "
+                    android:valueTo="M5.94 -2.52 C5.94,-2.52 5.94,-2.51 5.94,-2.51 C5.94,-2.51 5.93,-2.52 5.93,-2.52 C5.93,-2.52 4.53,-1.12 4.53,-1.12 C4.53,-1.12 4.55,-1.11 4.55,-1.11 C4.55,-1.11 4.53,-1.13 4.53,-1.13 C4.53,-1.13 4.55,-1.09 4.55,-1.09 C4.55,-1.09 4.54,-1.11 4.54,-1.11 C4.54,-1.11 5.95,-2.51 5.95,-2.51 C5.95,-2.51 5.94,-2.52 5.94,-2.52 C5.94,-2.52 5.94,-2.52 5.94,-2.52c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.1,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_D_1_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="28"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M-8.52 -3.53 C-8.52,-3.53 -2.94,-9.08 -2.94,-9.08 C-2.3,-9.72 -1.27,-9.74 -0.65,-9.12 C-0.65,-9.12 7.53,-0.95 7.53,-0.95 C7.53,-0.95 4.7,-0.94 4.7,-0.94 C4.7,-0.94 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -7.11,-2.11 -7.11,-2.11 C-7.11,-2.11 -7.14,-2.14 -7.14,-2.14 C-7.14,-2.14 -8.48,-3.49 -8.48,-3.49 C-8.48,-3.49 -8.5,-3.51 -8.5,-3.51 C-8.5,-3.51 -8.52,-3.53 -8.52,-3.53c "
+                    android:valueTo="M-8.82 -3.18 C-8.26,-3.74 -2.94,-9.08 -2.94,-9.08 C-2.3,-9.72 -1.27,-9.74 -0.65,-9.12 C-0.65,-9.12 6.08,-2.36 6.08,-2.36 C6.08,-2.36 4.7,-0.94 4.7,-0.94 C4.7,-0.94 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -7.5,-1.77 -7.5,-1.77 C-7.5,-1.77 -7.49,-1.78 -7.49,-1.78 C-7.49,-1.78 -8.87,-0.41 -8.87,-0.41 C-8.87,-0.41 -8.95,-0.5 -9.05,-0.58 C-9.86,-1.4 -9.7,-2.29 -8.82,-3.18c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="66"
+                    android:propertyName="pathData"
+                    android:startOffset="28"
+                    android:valueFrom="M-8.82 -3.18 C-8.26,-3.74 -2.94,-9.08 -2.94,-9.08 C-2.3,-9.72 -1.27,-9.74 -0.65,-9.12 C-0.65,-9.12 6.08,-2.36 6.08,-2.36 C6.08,-2.36 4.7,-0.94 4.7,-0.94 C4.7,-0.94 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -7.5,-1.77 -7.5,-1.77 C-7.5,-1.77 -7.49,-1.78 -7.49,-1.78 C-7.49,-1.78 -8.87,-0.41 -8.87,-0.41 C-8.87,-0.41 -8.95,-0.5 -9.05,-0.58 C-9.86,-1.4 -9.7,-2.29 -8.82,-3.18c "
+                    android:valueTo="M-8.82 -3.18 C-8.26,-3.74 -2.94,-9.08 -2.94,-9.08 C-2.3,-9.72 -1.27,-9.74 -0.65,-9.12 C-0.65,-9.12 2.78,-5.89 2.78,-5.89 C2.78,-5.89 1.29,-4.47 1.29,-4.47 C1.29,-4.47 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -7.5,-1.77 -7.5,-1.77 C-7.5,-1.77 -4.54,1.11 -4.54,1.11 C-4.54,1.11 -5.95,2.51 -5.95,2.51 C-5.95,2.51 -8.36,0.12 -9.05,-0.58 C-9.86,-1.4 -9.7,-2.29 -8.82,-3.18c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="72"
+                    android:propertyName="pathData"
+                    android:startOffset="94"
+                    android:valueFrom="M-8.82 -3.18 C-8.26,-3.74 -2.94,-9.08 -2.94,-9.08 C-2.3,-9.72 -1.27,-9.74 -0.65,-9.12 C-0.65,-9.12 2.78,-5.89 2.78,-5.89 C2.78,-5.89 1.29,-4.47 1.29,-4.47 C1.29,-4.47 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -7.5,-1.77 -7.5,-1.77 C-7.5,-1.77 -4.54,1.11 -4.54,1.11 C-4.54,1.11 -5.95,2.51 -5.95,2.51 C-5.95,2.51 -8.36,0.12 -9.05,-0.58 C-9.86,-1.4 -9.7,-2.29 -8.82,-3.18c "
+                    android:valueTo="M-8.82 -3.18 C-8.26,-3.74 -2.94,-9.08 -2.94,-9.08 C-2.3,-9.72 -1.27,-9.74 -0.65,-9.12 C-0.65,-9.12 -0.36,-8.83 -0.36,-8.83 C-0.36,-8.83 -1.8,-7.44 -1.8,-7.44 C-1.8,-7.44 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -7.5,-1.77 -7.5,-1.77 C-7.5,-1.77 -4.54,1.11 -4.54,1.11 C-4.54,1.11 -5.95,2.51 -5.95,2.51 C-5.95,2.51 -8.36,0.12 -9.05,-0.58 C-9.86,-1.4 -9.7,-2.29 -8.82,-3.18c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="28"
+                    android:propertyName="pathData"
+                    android:startOffset="166"
+                    android:valueFrom="M-8.82 -3.18 C-8.26,-3.74 -2.94,-9.08 -2.94,-9.08 C-2.3,-9.72 -1.27,-9.74 -0.65,-9.12 C-0.65,-9.12 -0.36,-8.83 -0.36,-8.83 C-0.36,-8.83 -1.8,-7.44 -1.8,-7.44 C-1.8,-7.44 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -7.5,-1.77 -7.5,-1.77 C-7.5,-1.77 -4.54,1.11 -4.54,1.11 C-4.54,1.11 -5.95,2.51 -5.95,2.51 C-5.95,2.51 -8.36,0.12 -9.05,-0.58 C-9.86,-1.4 -9.7,-2.29 -8.82,-3.18c "
+                    android:valueTo="M-8.82 -3.18 C-8.26,-3.74 -3.22,-8.8 -3.22,-8.8 C-3.22,-8.8 -3.21,-8.79 -3.21,-8.79 C-3.21,-8.79 -3.24,-8.8 -3.24,-8.8 C-3.24,-8.8 -1.8,-7.44 -1.8,-7.44 C-1.8,-7.44 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -7.5,-1.77 -7.5,-1.77 C-7.5,-1.77 -4.54,1.11 -4.54,1.11 C-4.54,1.11 -5.95,2.51 -5.95,2.51 C-5.95,2.51 -8.36,0.12 -9.05,-0.58 C-9.86,-1.4 -9.7,-2.29 -8.82,-3.18c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="55"
+                    android:propertyName="pathData"
+                    android:startOffset="193"
+                    android:valueFrom="M-8.82 -3.18 C-8.26,-3.74 -3.22,-8.8 -3.22,-8.8 C-3.22,-8.8 -3.21,-8.79 -3.21,-8.79 C-3.21,-8.79 -3.24,-8.8 -3.24,-8.8 C-3.24,-8.8 -1.8,-7.44 -1.8,-7.44 C-1.8,-7.44 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -7.5,-1.77 -7.5,-1.77 C-7.5,-1.77 -4.54,1.11 -4.54,1.11 C-4.54,1.11 -5.95,2.51 -5.95,2.51 C-5.95,2.51 -8.36,0.12 -9.05,-0.58 C-9.86,-1.4 -9.7,-2.29 -8.82,-3.18c "
+                    android:valueTo="M-8.82 -3.18 C-8.26,-3.74 -5.81,-6.14 -5.81,-6.14 C-5.81,-6.14 -5.81,-6.13 -5.81,-6.13 C-5.81,-6.13 -5.83,-6.14 -5.83,-6.14 C-5.83,-6.14 -4.39,-4.78 -4.39,-4.78 C-4.39,-4.78 -4.37,-4.76 -4.37,-4.76 C-4.37,-4.76 -7.5,-1.77 -7.5,-1.77 C-7.5,-1.77 -4.54,1.11 -4.54,1.11 C-4.54,1.11 -5.95,2.51 -5.95,2.51 C-5.95,2.51 -8.36,0.12 -9.05,-0.58 C-9.86,-1.4 -9.7,-2.29 -8.82,-3.18c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="41"
+                    android:propertyName="pathData"
+                    android:startOffset="248"
+                    android:valueFrom="M-8.82 -3.18 C-8.26,-3.74 -5.81,-6.14 -5.81,-6.14 C-5.81,-6.14 -5.81,-6.13 -5.81,-6.13 C-5.81,-6.13 -5.83,-6.14 -5.83,-6.14 C-5.83,-6.14 -4.39,-4.78 -4.39,-4.78 C-4.39,-4.78 -4.37,-4.76 -4.37,-4.76 C-4.37,-4.76 -7.5,-1.77 -7.5,-1.77 C-7.5,-1.77 -4.54,1.11 -4.54,1.11 C-4.54,1.11 -5.95,2.51 -5.95,2.51 C-5.95,2.51 -8.36,0.12 -9.05,-0.58 C-9.86,-1.4 -9.7,-2.29 -8.82,-3.18c "
+                    android:valueTo="M-8.91 -3.09 C-8.91,-3.09 -8.91,-3.09 -8.91,-3.09 C-8.91,-3.09 -8.9,-3.09 -8.9,-3.09 C-8.9,-3.09 -7.49,-1.74 -7.49,-1.74 C-7.49,-1.74 -7.5,-1.75 -7.5,-1.75 C-7.5,-1.75 -7.48,-1.73 -7.48,-1.73 C-7.48,-1.73 -7.5,-1.77 -7.5,-1.77 C-7.5,-1.77 -4.54,1.11 -4.54,1.11 C-4.54,1.11 -5.95,2.51 -5.95,2.51 C-5.95,2.51 -8.36,0.12 -9.05,-0.58 C-9.86,-1.4 -9.79,-2.2 -8.91,-3.09c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="28"
+                    android:propertyName="pathData"
+                    android:startOffset="290"
+                    android:valueFrom="M-8.91 -3.09 C-8.91,-3.09 -8.91,-3.09 -8.91,-3.09 C-8.91,-3.09 -8.9,-3.09 -8.9,-3.09 C-8.9,-3.09 -7.49,-1.74 -7.49,-1.74 C-7.49,-1.74 -7.5,-1.75 -7.5,-1.75 C-7.5,-1.75 -7.48,-1.73 -7.48,-1.73 C-7.48,-1.73 -7.5,-1.77 -7.5,-1.77 C-7.5,-1.77 -4.54,1.11 -4.54,1.11 C-4.54,1.11 -5.95,2.51 -5.95,2.51 C-5.95,2.51 -8.36,0.12 -9.05,-0.58 C-9.86,-1.4 -9.79,-2.2 -8.91,-3.09c "
+                    android:valueTo="M-9.05 -0.57 C-9.05,-0.57 -9.05,-0.58 -9.05,-0.58 C-9.05,-0.58 -9.04,-0.57 -9.04,-0.57 C-9.04,-0.57 -7.59,-1.83 -7.59,-1.83 C-7.59,-1.83 -7.61,-1.85 -7.61,-1.85 C-7.61,-1.85 -7.59,-1.83 -7.59,-1.83 C-7.59,-1.83 -7.61,-1.86 -7.61,-1.86 C-7.61,-1.86 -4.54,1.11 -4.54,1.11 C-4.54,1.11 -5.95,2.51 -5.95,2.51 C-5.95,2.51 -9.05,-0.58 -9.05,-0.58 C-9.05,-0.58 -9.05,-0.57 -9.05,-0.57c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="83"
+                    android:propertyName="pathData"
+                    android:startOffset="317"
+                    android:valueFrom="M-9.05 -0.57 C-9.05,-0.57 -9.05,-0.58 -9.05,-0.58 C-9.05,-0.58 -9.04,-0.57 -9.04,-0.57 C-9.04,-0.57 -7.59,-1.83 -7.59,-1.83 C-7.59,-1.83 -7.61,-1.85 -7.61,-1.85 C-7.61,-1.85 -7.59,-1.83 -7.59,-1.83 C-7.59,-1.83 -7.61,-1.86 -7.61,-1.86 C-7.61,-1.86 -4.54,1.11 -4.54,1.11 C-4.54,1.11 -5.95,2.51 -5.95,2.51 C-5.95,2.51 -9.05,-0.58 -9.05,-0.58 C-9.05,-0.58 -9.05,-0.57 -9.05,-0.57c "
+                    android:valueTo="M-5.94 2.52 C-5.94,2.52 -5.94,2.51 -5.94,2.51 C-5.94,2.51 -5.93,2.52 -5.93,2.52 C-5.93,2.52 -4.53,1.12 -4.53,1.12 C-4.53,1.12 -4.55,1.11 -4.55,1.11 C-4.55,1.11 -4.53,1.13 -4.53,1.13 C-4.53,1.13 -4.55,1.09 -4.55,1.09 C-4.55,1.09 -4.54,1.11 -4.54,1.11 C-4.54,1.11 -5.95,2.51 -5.95,2.51 C-5.95,2.51 -5.94,2.52 -5.94,2.52 C-5.94,2.52 -5.94,2.52 -5.94,2.52c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.1,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_D_2_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="61"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M7.54 -0.94 C7.54,-0.94 7.54,-0.95 7.54,-0.95 C7.55,-0.94 7.54,-0.94 7.55,-0.94 C7.55,-0.94 7.53,-0.94 7.53,-0.94 C7.53,-0.94 7.52,-0.94 7.52,-0.94 C7.52,-0.94 7.54,-0.94 7.54,-0.94 C7.54,-0.94 7.52,-0.94 7.52,-0.94 C7.52,-0.94 7.54,-0.94 7.54,-0.94c "
+                    android:valueTo="M7.54 -0.94 C7.54,-0.94 7.54,-0.95 7.54,-0.95 C7.55,-0.94 7.54,-0.94 7.55,-0.94 C7.55,-0.94 7.53,-0.94 7.53,-0.94 C7.53,-0.94 7.52,-0.94 7.52,-0.94 C7.52,-0.94 7.54,-0.94 7.54,-0.94 C7.54,-0.94 7.52,-0.94 7.52,-0.94 C7.52,-0.94 7.54,-0.94 7.54,-0.94c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="28"
+                    android:propertyName="pathData"
+                    android:startOffset="61"
+                    android:valueFrom="M7.54 -0.94 C7.54,-0.94 7.54,-0.95 7.54,-0.95 C7.55,-0.94 7.54,-0.94 7.55,-0.94 C7.55,-0.94 7.53,-0.94 7.53,-0.94 C7.53,-0.94 7.52,-0.94 7.52,-0.94 C7.52,-0.94 7.54,-0.94 7.54,-0.94 C7.54,-0.94 7.52,-0.94 7.52,-0.94 C7.52,-0.94 7.54,-0.94 7.54,-0.94c "
+                    android:valueTo="M6.15 -2.35 C6.15,-2.35 6.15,-2.35 6.15,-2.35 C6.16,-2.34 6.15,-2.35 6.16,-2.35 C6.16,-2.35 7.53,-0.94 7.53,-0.94 C7.53,-0.94 4.7,-0.94 4.7,-0.94 C4.7,-0.94 4.72,-0.93 4.72,-0.93 C4.72,-0.93 4.7,-0.94 4.7,-0.94 C4.7,-0.94 6.15,-2.35 6.15,-2.35c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="143"
+                    android:propertyName="pathData"
+                    android:startOffset="88"
+                    android:valueFrom="M6.15 -2.35 C6.15,-2.35 6.15,-2.35 6.15,-2.35 C6.16,-2.34 6.15,-2.35 6.16,-2.35 C6.16,-2.35 7.53,-0.94 7.53,-0.94 C7.53,-0.94 4.7,-0.94 4.7,-0.94 C4.7,-0.94 4.72,-0.93 4.72,-0.93 C4.72,-0.93 4.7,-0.94 4.7,-0.94 C4.7,-0.94 6.15,-2.35 6.15,-2.35c "
+                    android:valueTo="M-0.65 -9.12 C-0.65,-9.12 -0.66,-9.13 -0.66,-9.13 C-0.65,-9.12 -0.66,-9.12 -0.65,-9.12 C-0.65,-9.12 7.53,-0.94 7.53,-0.94 C7.53,-0.94 4.7,-0.94 4.7,-0.94 C4.7,-0.94 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -1.8,-7.43 -1.8,-7.43 C-1.8,-7.43 -0.65,-9.12 -0.65,-9.12c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="17"
+                    android:propertyName="pathData"
+                    android:startOffset="232"
+                    android:valueFrom="M-0.65 -9.12 C-0.65,-9.12 -0.66,-9.13 -0.66,-9.13 C-0.65,-9.12 -0.66,-9.12 -0.65,-9.12 C-0.65,-9.12 7.53,-0.94 7.53,-0.94 C7.53,-0.94 4.7,-0.94 4.7,-0.94 C4.7,-0.94 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -1.8,-7.43 -1.8,-7.43 C-1.8,-7.43 -0.65,-9.12 -0.65,-9.12c "
+                    android:valueTo="M-3.21 -8.85 C-3.21,-8.85 -2.94,-9.08 -2.94,-9.08 C-2.3,-9.72 -1.27,-9.74 -0.65,-9.12 C-0.65,-9.12 7.53,-0.94 7.53,-0.94 C7.53,-0.94 4.7,-0.94 4.7,-0.94 C4.7,-0.94 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -1.8,-7.43 -1.8,-7.43 C-1.8,-7.43 -3.21,-8.85 -3.21,-8.85c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="418"
+                    android:propertyName="pathData"
+                    android:startOffset="248"
+                    android:valueFrom="M-3.21 -8.85 C-3.21,-8.85 -2.94,-9.08 -2.94,-9.08 C-2.3,-9.72 -1.27,-9.74 -0.65,-9.12 C-0.65,-9.12 7.53,-0.94 7.53,-0.94 C7.53,-0.94 4.7,-0.94 4.7,-0.94 C4.7,-0.94 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -1.8,-7.43 -1.8,-7.43 C-1.8,-7.43 -3.21,-8.85 -3.21,-8.85c "
+                    android:valueTo="M-8.52 -3.53 C-8.52,-3.53 -2.94,-9.08 -2.94,-9.08 C-2.3,-9.72 -1.27,-9.74 -0.65,-9.12 C-0.65,-9.12 7.53,-0.94 7.53,-0.94 C7.53,-0.94 4.7,-0.94 4.7,-0.94 C4.7,-0.94 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -7.11,-2.11 -7.11,-2.11 C-7.11,-2.11 -8.52,-3.53 -8.52,-3.53c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.1,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_D_3_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="61"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M-7.54 0.94 C-7.54,0.94 -7.54,0.95 -7.54,0.95 C-7.55,0.94 -7.54,0.94 -7.54,0.94 C-7.54,0.94 -7.53,0.94 -7.53,0.94 C-7.53,0.94 -7.52,0.94 -7.52,0.94 C-7.52,0.94 -7.54,0.94 -7.54,0.94 C-7.54,0.94 -7.52,0.94 -7.52,0.94 C-7.52,0.94 -7.54,0.94 -7.54,0.94c "
+                    android:valueTo="M-7.54 0.94 C-7.54,0.94 -7.54,0.95 -7.54,0.95 C-7.55,0.94 -7.54,0.94 -7.54,0.94 C-7.54,0.94 -7.53,0.94 -7.53,0.94 C-7.53,0.94 -7.52,0.94 -7.52,0.94 C-7.52,0.94 -7.54,0.94 -7.54,0.94 C-7.54,0.94 -7.52,0.94 -7.52,0.94 C-7.52,0.94 -7.54,0.94 -7.54,0.94c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="28"
+                    android:propertyName="pathData"
+                    android:startOffset="61"
+                    android:valueFrom="M-7.54 0.94 C-7.54,0.94 -7.54,0.95 -7.54,0.95 C-7.55,0.94 -7.54,0.94 -7.54,0.94 C-7.54,0.94 -7.53,0.94 -7.53,0.94 C-7.53,0.94 -7.52,0.94 -7.52,0.94 C-7.52,0.94 -7.54,0.94 -7.54,0.94 C-7.54,0.94 -7.52,0.94 -7.52,0.94 C-7.52,0.94 -7.54,0.94 -7.54,0.94c "
+                    android:valueTo="M-6.15 2.35 C-6.15,2.35 -6.15,2.35 -6.15,2.35 C-6.16,2.34 -6.15,2.35 -6.15,2.35 C-6.15,2.35 -6.14,2.36 -6.14,2.36 C-6.14,2.36 -4.7,0.94 -4.7,0.94 C-4.7,0.94 -4.72,0.93 -4.72,0.93 C-4.72,0.93 -4.7,0.94 -4.7,0.94 C-4.7,0.94 -6.15,2.35 -6.15,2.35c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="143"
+                    android:propertyName="pathData"
+                    android:startOffset="88"
+                    android:valueFrom="M-6.15 2.35 C-6.15,2.35 -6.15,2.35 -6.15,2.35 C-6.16,2.34 -6.15,2.35 -6.15,2.35 C-6.15,2.35 -6.14,2.36 -6.14,2.36 C-6.14,2.36 -4.7,0.94 -4.7,0.94 C-4.7,0.94 -4.72,0.93 -4.72,0.93 C-4.72,0.93 -4.7,0.94 -4.7,0.94 C-4.7,0.94 -6.15,2.35 -6.15,2.35c "
+                    android:valueTo="M0.65 9.12 C0.65,9.12 0.66,9.13 0.66,9.13 C0.65,9.12 0.66,9.13 0.65,9.12 C0.65,9.12 -7.53,0.94 -7.53,0.94 C-7.53,0.94 -4.7,0.94 -4.7,0.94 C-4.7,0.94 1.78,7.42 1.78,7.42 C1.78,7.42 1.8,7.43 1.8,7.43 C1.8,7.43 0.65,9.12 0.65,9.12c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="17"
+                    android:propertyName="pathData"
+                    android:startOffset="232"
+                    android:valueFrom="M0.65 9.12 C0.65,9.12 0.66,9.13 0.66,9.13 C0.65,9.12 0.66,9.13 0.65,9.12 C0.65,9.12 -7.53,0.94 -7.53,0.94 C-7.53,0.94 -4.7,0.94 -4.7,0.94 C-4.7,0.94 1.78,7.42 1.78,7.42 C1.78,7.42 1.8,7.43 1.8,7.43 C1.8,7.43 0.65,9.12 0.65,9.12c "
+                    android:valueTo="M3.21 8.85 C3.21,8.85 2.94,9.08 2.94,9.08 C2.3,9.72 1.27,9.74 0.65,9.12 C0.65,9.12 -7.53,0.94 -7.53,0.94 C-7.53,0.94 -4.7,0.94 -4.7,0.94 C-4.7,0.94 1.78,7.42 1.78,7.42 C1.78,7.42 1.8,7.43 1.8,7.43 C1.8,7.43 3.21,8.85 3.21,8.85c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="418"
+                    android:propertyName="pathData"
+                    android:startOffset="248"
+                    android:valueFrom="M3.21 8.85 C3.21,8.85 2.94,9.08 2.94,9.08 C2.3,9.72 1.27,9.74 0.65,9.12 C0.65,9.12 -7.53,0.94 -7.53,0.94 C-7.53,0.94 -4.7,0.94 -4.7,0.94 C-4.7,0.94 1.78,7.42 1.78,7.42 C1.78,7.42 1.8,7.43 1.8,7.43 C1.8,7.43 3.21,8.85 3.21,8.85c "
+                    android:valueTo="M8.52 3.53 C8.52,3.53 2.94,9.08 2.94,9.08 C2.3,9.72 1.27,9.74 0.65,9.12 C0.65,9.12 -7.53,0.94 -7.53,0.94 C-7.53,0.94 -4.7,0.94 -4.7,0.94 C-4.7,0.94 1.78,7.42 1.78,7.42 C1.78,7.42 7.11,2.11 7.11,2.11 C7.11,2.11 8.52,3.53 8.52,3.53c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.1,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="250"
+                    android:propertyName="rotation"
+                    android:startOffset="0"
+                    android:valueFrom="-135"
+                    android:valueTo="-180"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0,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:duration="683"
+                    android:propertyName="translateX"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="1"
+                    android:valueType="floatType" />
+            </set>
+        </aapt:attr>
+    </target>
+    <aapt:attr name="android:drawable">
+        <vector
+            android:width="24dp"
+            android:height="24dp"
+            android:viewportHeight="24"
+            android:viewportWidth="24">
+            <group android:name="_R_G">
+                <group
+                    android:name="_R_G_L_2_G_N_1_T_0"
+                    android:rotation="-135"
+                    android:translateX="12.008"
+                    android:translateY="11.992">
+                    <group
+                        android:name="_R_G_L_2_G_T_1"
+                        android:rotation="180"
+                        android:translateX="7.062"
+                        android:translateY="3.312">
+                        <group
+                            android:name="_R_G_L_2_G"
+                            android:translateX="6.984"
+                            android:translateY="3.547">
+                            <path
+                                android:name="_R_G_L_2_G_D_0_P_0"
+                                android:fillAlpha="1"
+                                android:fillColor="#ffffff"
+                                android:fillType="nonZero"
+                                android:pathData=" M-4.6 -1.06 C-4.6,-1.06 -9.55,-1.06 -9.55,-1.06 C-9.55,-1.06 -9.55,-6.01 -9.55,-6.01 C-9.55,-6.01 -7.55,-6 -7.55,-6 C-7.55,-6 -7.51,-3.04 -7.51,-3.04 C-7.51,-3.04 -4.6,-3.05 -4.6,-3.05 C-4.6,-3.05 -4.6,-1.06 -4.6,-1.06c " />
+                        </group>
+                    </group>
+                </group>
+                <group
+                    android:name="_R_G_L_1_G_N_1_T_0"
+                    android:rotation="-135"
+                    android:translateX="12.008"
+                    android:translateY="11.992">
+                    <group
+                        android:name="_R_G_L_1_G_T_1"
+                        android:rotation="360"
+                        android:translateX="-7"
+                        android:translateY="-3.594">
+                        <group
+                            android:name="_R_G_L_1_G"
+                            android:translateX="6.984"
+                            android:translateY="3.547">
+                            <path
+                                android:name="_R_G_L_1_G_D_0_P_0"
+                                android:fillAlpha="1"
+                                android:fillColor="#ffffff"
+                                android:fillType="nonZero"
+                                android:pathData=" M-4.6 -1.06 C-4.6,-1.06 -9.55,-1.06 -9.55,-1.06 C-9.55,-1.06 -9.55,-6.01 -9.55,-6.01 C-9.55,-6.01 -7.55,-6 -7.55,-6 C-7.55,-6 -7.51,-3.04 -7.51,-3.04 C-7.51,-3.04 -4.6,-3.05 -4.6,-3.05 C-4.6,-3.05 -4.6,-1.06 -4.6,-1.06c " />
+                        </group>
+                    </group>
+                </group>
+                <group
+                    android:name="_R_G_L_0_G"
+                    android:rotation="-135"
+                    android:translateX="12.008"
+                    android:translateY="11.992">
+                    <path
+                        android:name="_R_G_L_0_G_D_0_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M8.52 3.53 C8.52,3.53 2.94,9.08 2.94,9.08 C2.3,9.72 1.27,9.74 0.65,9.12 C0.65,9.12 -7.53,0.95 -7.53,0.95 C-7.53,0.95 -4.7,0.94 -4.7,0.94 C-4.7,0.94 1.78,7.42 1.78,7.42 C1.78,7.42 7.11,2.11 7.11,2.11 C7.11,2.11 7.14,2.14 7.14,2.14 C7.14,2.14 8.48,3.49 8.48,3.49 C8.48,3.49 8.5,3.51 8.5,3.51 C8.5,3.51 8.52,3.53 8.52,3.53c " />
+                    <path
+                        android:name="_R_G_L_0_G_D_1_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M-8.52 -3.53 C-8.52,-3.53 -2.94,-9.08 -2.94,-9.08 C-2.3,-9.72 -1.27,-9.74 -0.65,-9.12 C-0.65,-9.12 7.53,-0.95 7.53,-0.95 C7.53,-0.95 4.7,-0.94 4.7,-0.94 C4.7,-0.94 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -7.11,-2.11 -7.11,-2.11 C-7.11,-2.11 -7.14,-2.14 -7.14,-2.14 C-7.14,-2.14 -8.48,-3.49 -8.48,-3.49 C-8.48,-3.49 -8.5,-3.51 -8.5,-3.51 C-8.5,-3.51 -8.52,-3.53 -8.52,-3.53c " />
+                    <path
+                        android:name="_R_G_L_0_G_D_2_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M7.54 -0.94 C7.54,-0.94 7.54,-0.95 7.54,-0.95 C7.55,-0.94 7.54,-0.94 7.55,-0.94 C7.55,-0.94 7.53,-0.94 7.53,-0.94 C7.53,-0.94 7.52,-0.94 7.52,-0.94 C7.52,-0.94 7.54,-0.94 7.54,-0.94 C7.54,-0.94 7.52,-0.94 7.52,-0.94 C7.52,-0.94 7.54,-0.94 7.54,-0.94c " />
+                    <path
+                        android:name="_R_G_L_0_G_D_3_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M-7.54 0.94 C-7.54,0.94 -7.54,0.95 -7.54,0.95 C-7.55,0.94 -7.54,0.94 -7.54,0.94 C-7.54,0.94 -7.53,0.94 -7.53,0.94 C-7.53,0.94 -7.52,0.94 -7.52,0.94 C-7.52,0.94 -7.54,0.94 -7.54,0.94 C-7.54,0.94 -7.52,0.94 -7.52,0.94 C-7.52,0.94 -7.54,0.94 -7.54,0.94c " />
+                </group>
+            </group>
+            <group android:name="time_group" />
+        </vector>
+    </aapt:attr>
+</animated-vector>
diff --git a/packages/SystemUI/res-keyguard/drawable/qs_auto_rotate_icon_on.xml b/packages/SystemUI/res-keyguard/drawable/qs_auto_rotate_icon_on.xml
new file mode 100644
index 0000000..bd67d9f
--- /dev/null
+++ b/packages/SystemUI/res-keyguard/drawable/qs_auto_rotate_icon_on.xml
@@ -0,0 +1,781 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ Copyright (C) 2020 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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">
+    <target android:name="_R_G_L_2_G_D_0_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="367"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="0"
+                    android:valueFrom="1"
+                    android:valueTo="1"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="17"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="367"
+                    android:valueFrom="1"
+                    android:valueTo="0"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_2_G_D_0_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="17"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M8.52 3.53 C8.52,3.53 2.94,9.08 2.94,9.08 C2.3,9.72 1.27,9.74 0.65,9.12 C0.65,9.12 -7.53,0.95 -7.53,0.95 C-7.53,0.95 -4.7,0.94 -4.7,0.94 C-4.7,0.94 1.78,7.42 1.78,7.42 C1.78,7.42 7.11,2.11 7.11,2.11 C7.11,2.11 7.14,2.14 7.14,2.14 C7.14,2.14 8.48,3.49 8.48,3.49 C8.48,3.49 8.5,3.51 8.5,3.51 C8.5,3.51 8.52,3.53 8.52,3.53c "
+                    android:valueTo="M8.82 3.18 C8.26,3.74 2.94,9.08 2.94,9.08 C2.3,9.72 1.27,9.74 0.65,9.12 C0.65,9.12 -6.08,2.36 -6.08,2.36 C-6.08,2.36 -4.7,0.94 -4.7,0.94 C-4.7,0.94 1.78,7.42 1.78,7.42 C1.78,7.42 7.5,1.77 7.5,1.77 C7.5,1.77 7.49,1.78 7.49,1.78 C7.49,1.78 8.87,0.41 8.87,0.41 C8.87,0.41 8.95,0.5 9.05,0.58 C9.86,1.4 9.7,2.29 8.82,3.18c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="41"
+                    android:propertyName="pathData"
+                    android:startOffset="17"
+                    android:valueFrom="M8.82 3.18 C8.26,3.74 2.94,9.08 2.94,9.08 C2.3,9.72 1.27,9.74 0.65,9.12 C0.65,9.12 -6.08,2.36 -6.08,2.36 C-6.08,2.36 -4.7,0.94 -4.7,0.94 C-4.7,0.94 1.78,7.42 1.78,7.42 C1.78,7.42 7.5,1.77 7.5,1.77 C7.5,1.77 7.49,1.78 7.49,1.78 C7.49,1.78 8.87,0.41 8.87,0.41 C8.87,0.41 8.95,0.5 9.05,0.58 C9.86,1.4 9.7,2.29 8.82,3.18c "
+                    android:valueTo="M8.82 3.18 C8.26,3.74 2.94,9.08 2.94,9.08 C2.3,9.72 1.27,9.74 0.65,9.12 C0.65,9.12 -2.78,5.89 -2.78,5.89 C-2.78,5.89 -1.29,4.47 -1.29,4.47 C-1.29,4.47 1.78,7.42 1.78,7.42 C1.78,7.42 7.5,1.77 7.5,1.77 C7.5,1.77 4.54,-1.11 4.54,-1.11 C4.54,-1.11 5.95,-2.51 5.95,-2.51 C5.95,-2.51 8.36,-0.12 9.05,0.58 C9.86,1.4 9.7,2.29 8.82,3.18c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="45"
+                    android:propertyName="pathData"
+                    android:startOffset="59"
+                    android:valueFrom="M8.82 3.18 C8.26,3.74 2.94,9.08 2.94,9.08 C2.3,9.72 1.27,9.74 0.65,9.12 C0.65,9.12 -2.78,5.89 -2.78,5.89 C-2.78,5.89 -1.29,4.47 -1.29,4.47 C-1.29,4.47 1.78,7.42 1.78,7.42 C1.78,7.42 7.5,1.77 7.5,1.77 C7.5,1.77 4.54,-1.11 4.54,-1.11 C4.54,-1.11 5.95,-2.51 5.95,-2.51 C5.95,-2.51 8.36,-0.12 9.05,0.58 C9.86,1.4 9.7,2.29 8.82,3.18c "
+                    android:valueTo="M8.82 3.18 C8.26,3.74 2.94,9.08 2.94,9.08 C2.3,9.72 1.27,9.74 0.65,9.12 C0.65,9.12 0.36,8.83 0.36,8.83 C0.36,8.83 1.8,7.44 1.8,7.44 C1.8,7.44 1.78,7.42 1.78,7.42 C1.78,7.42 7.5,1.77 7.5,1.77 C7.5,1.77 4.54,-1.11 4.54,-1.11 C4.54,-1.11 5.95,-2.51 5.95,-2.51 C5.95,-2.51 8.36,-0.12 9.05,0.58 C9.86,1.4 9.7,2.29 8.82,3.18c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="17"
+                    android:propertyName="pathData"
+                    android:startOffset="103"
+                    android:valueFrom="M8.82 3.18 C8.26,3.74 2.94,9.08 2.94,9.08 C2.3,9.72 1.27,9.74 0.65,9.12 C0.65,9.12 0.36,8.83 0.36,8.83 C0.36,8.83 1.8,7.44 1.8,7.44 C1.8,7.44 1.78,7.42 1.78,7.42 C1.78,7.42 7.5,1.77 7.5,1.77 C7.5,1.77 4.54,-1.11 4.54,-1.11 C4.54,-1.11 5.95,-2.51 5.95,-2.51 C5.95,-2.51 8.36,-0.12 9.05,0.58 C9.86,1.4 9.7,2.29 8.82,3.18c "
+                    android:valueTo="M8.82 3.18 C8.26,3.74 3.22,8.8 3.22,8.8 C3.22,8.8 3.21,8.79 3.21,8.79 C3.21,8.79 3.24,8.8 3.24,8.8 C3.24,8.8 1.8,7.44 1.8,7.44 C1.8,7.44 1.78,7.42 1.78,7.42 C1.78,7.42 7.5,1.77 7.5,1.77 C7.5,1.77 4.54,-1.11 4.54,-1.11 C4.54,-1.11 5.95,-2.51 5.95,-2.51 C5.95,-2.51 8.36,-0.12 9.05,0.58 C9.86,1.4 9.7,2.29 8.82,3.18c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="34"
+                    android:propertyName="pathData"
+                    android:startOffset="121"
+                    android:valueFrom="M8.82 3.18 C8.26,3.74 3.22,8.8 3.22,8.8 C3.22,8.8 3.21,8.79 3.21,8.79 C3.21,8.79 3.24,8.8 3.24,8.8 C3.24,8.8 1.8,7.44 1.8,7.44 C1.8,7.44 1.78,7.42 1.78,7.42 C1.78,7.42 7.5,1.77 7.5,1.77 C7.5,1.77 4.54,-1.11 4.54,-1.11 C4.54,-1.11 5.95,-2.51 5.95,-2.51 C5.95,-2.51 8.36,-0.12 9.05,0.58 C9.86,1.4 9.7,2.29 8.82,3.18c "
+                    android:valueTo="M8.82 3.18 C8.26,3.74 5.82,6.14 5.82,6.14 C5.82,6.14 5.81,6.14 5.81,6.14 C5.81,6.14 5.83,6.14 5.83,6.14 C5.83,6.14 4.39,4.78 4.39,4.78 C4.39,4.78 4.37,4.76 4.37,4.76 C4.37,4.76 7.5,1.77 7.5,1.77 C7.5,1.77 4.54,-1.11 4.54,-1.11 C4.54,-1.11 5.95,-2.51 5.95,-2.51 C5.95,-2.51 8.36,-0.12 9.05,0.58 C9.86,1.4 9.7,2.29 8.82,3.18c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="26"
+                    android:propertyName="pathData"
+                    android:startOffset="155"
+                    android:valueFrom="M8.82 3.18 C8.26,3.74 5.82,6.14 5.82,6.14 C5.82,6.14 5.81,6.14 5.81,6.14 C5.81,6.14 5.83,6.14 5.83,6.14 C5.83,6.14 4.39,4.78 4.39,4.78 C4.39,4.78 4.37,4.76 4.37,4.76 C4.37,4.76 7.5,1.77 7.5,1.77 C7.5,1.77 4.54,-1.11 4.54,-1.11 C4.54,-1.11 5.95,-2.51 5.95,-2.51 C5.95,-2.51 8.36,-0.12 9.05,0.58 C9.86,1.4 9.7,2.29 8.82,3.18c "
+                    android:valueTo="M8.91 3.09 C8.91,3.09 8.91,3.1 8.91,3.1 C8.91,3.1 8.9,3.09 8.9,3.09 C8.9,3.09 7.49,1.74 7.49,1.74 C7.49,1.74 7.5,1.75 7.5,1.75 C7.5,1.75 7.48,1.73 7.48,1.73 C7.48,1.73 7.5,1.77 7.5,1.77 C7.5,1.77 4.54,-1.11 4.54,-1.11 C4.54,-1.11 5.95,-2.51 5.95,-2.51 C5.95,-2.51 8.36,-0.12 9.05,0.58 C9.86,1.4 9.79,2.2 8.91,3.09c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="17"
+                    android:propertyName="pathData"
+                    android:startOffset="181"
+                    android:valueFrom="M8.91 3.09 C8.91,3.09 8.91,3.1 8.91,3.1 C8.91,3.1 8.9,3.09 8.9,3.09 C8.9,3.09 7.49,1.74 7.49,1.74 C7.49,1.74 7.5,1.75 7.5,1.75 C7.5,1.75 7.48,1.73 7.48,1.73 C7.48,1.73 7.5,1.77 7.5,1.77 C7.5,1.77 4.54,-1.11 4.54,-1.11 C4.54,-1.11 5.95,-2.51 5.95,-2.51 C5.95,-2.51 8.36,-0.12 9.05,0.58 C9.86,1.4 9.79,2.2 8.91,3.09c "
+                    android:valueTo="M9.05 0.57 C9.05,0.57 9.05,0.58 9.05,0.58 C9.05,0.58 9.04,0.57 9.04,0.57 C9.04,0.57 7.6,1.83 7.6,1.83 C7.6,1.83 7.61,1.85 7.61,1.85 C7.61,1.85 7.59,1.83 7.59,1.83 C7.59,1.83 7.61,1.86 7.61,1.86 C7.61,1.86 4.54,-1.11 4.54,-1.11 C4.54,-1.11 5.95,-2.51 5.95,-2.51 C5.95,-2.51 9.05,0.58 9.05,0.58 C9.05,0.58 9.05,0.57 9.05,0.57c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="52"
+                    android:propertyName="pathData"
+                    android:startOffset="198"
+                    android:valueFrom="M9.05 0.57 C9.05,0.57 9.05,0.58 9.05,0.58 C9.05,0.58 9.04,0.57 9.04,0.57 C9.04,0.57 7.6,1.83 7.6,1.83 C7.6,1.83 7.61,1.85 7.61,1.85 C7.61,1.85 7.59,1.83 7.59,1.83 C7.59,1.83 7.61,1.86 7.61,1.86 C7.61,1.86 4.54,-1.11 4.54,-1.11 C4.54,-1.11 5.95,-2.51 5.95,-2.51 C5.95,-2.51 9.05,0.58 9.05,0.58 C9.05,0.58 9.05,0.57 9.05,0.57c "
+                    android:valueTo="M5.94 -2.52 C5.94,-2.52 5.94,-2.51 5.94,-2.51 C5.94,-2.51 5.93,-2.52 5.93,-2.52 C5.93,-2.52 4.53,-1.12 4.53,-1.12 C4.53,-1.12 4.55,-1.11 4.55,-1.11 C4.55,-1.11 4.53,-1.13 4.53,-1.13 C4.53,-1.13 4.55,-1.09 4.55,-1.09 C4.55,-1.09 4.54,-1.11 4.54,-1.11 C4.54,-1.11 5.95,-2.51 5.95,-2.51 C5.95,-2.51 5.94,-2.52 5.94,-2.52 C5.94,-2.52 5.94,-2.52 5.94,-2.52c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.1,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_2_G_D_1_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="367"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="0"
+                    android:valueFrom="1"
+                    android:valueTo="1"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="17"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="367"
+                    android:valueFrom="1"
+                    android:valueTo="0"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_2_G_D_1_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="17"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M-8.52 -3.53 C-8.52,-3.53 -2.94,-9.08 -2.94,-9.08 C-2.3,-9.72 -1.27,-9.74 -0.65,-9.12 C-0.65,-9.12 7.53,-0.95 7.53,-0.95 C7.53,-0.95 4.7,-0.94 4.7,-0.94 C4.7,-0.94 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -7.11,-2.11 -7.11,-2.11 C-7.11,-2.11 -7.14,-2.14 -7.14,-2.14 C-7.14,-2.14 -8.48,-3.49 -8.48,-3.49 C-8.48,-3.49 -8.5,-3.51 -8.5,-3.51 C-8.5,-3.51 -8.52,-3.53 -8.52,-3.53c "
+                    android:valueTo="M-8.82 -3.18 C-8.26,-3.74 -2.94,-9.08 -2.94,-9.08 C-2.3,-9.72 -1.27,-9.74 -0.65,-9.12 C-0.65,-9.12 6.08,-2.36 6.08,-2.36 C6.08,-2.36 4.7,-0.94 4.7,-0.94 C4.7,-0.94 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -7.5,-1.77 -7.5,-1.77 C-7.5,-1.77 -7.49,-1.78 -7.49,-1.78 C-7.49,-1.78 -8.87,-0.41 -8.87,-0.41 C-8.87,-0.41 -8.95,-0.5 -9.05,-0.58 C-9.86,-1.4 -9.7,-2.29 -8.82,-3.18c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="41"
+                    android:propertyName="pathData"
+                    android:startOffset="17"
+                    android:valueFrom="M-8.82 -3.18 C-8.26,-3.74 -2.94,-9.08 -2.94,-9.08 C-2.3,-9.72 -1.27,-9.74 -0.65,-9.12 C-0.65,-9.12 6.08,-2.36 6.08,-2.36 C6.08,-2.36 4.7,-0.94 4.7,-0.94 C4.7,-0.94 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -7.5,-1.77 -7.5,-1.77 C-7.5,-1.77 -7.49,-1.78 -7.49,-1.78 C-7.49,-1.78 -8.87,-0.41 -8.87,-0.41 C-8.87,-0.41 -8.95,-0.5 -9.05,-0.58 C-9.86,-1.4 -9.7,-2.29 -8.82,-3.18c "
+                    android:valueTo="M-8.82 -3.18 C-8.26,-3.74 -2.94,-9.08 -2.94,-9.08 C-2.3,-9.72 -1.27,-9.74 -0.65,-9.12 C-0.65,-9.12 2.78,-5.89 2.78,-5.89 C2.78,-5.89 1.29,-4.47 1.29,-4.47 C1.29,-4.47 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -7.5,-1.77 -7.5,-1.77 C-7.5,-1.77 -4.54,1.11 -4.54,1.11 C-4.54,1.11 -5.95,2.51 -5.95,2.51 C-5.95,2.51 -8.36,0.12 -9.05,-0.58 C-9.86,-1.4 -9.7,-2.29 -8.82,-3.18c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="45"
+                    android:propertyName="pathData"
+                    android:startOffset="59"
+                    android:valueFrom="M-8.82 -3.18 C-8.26,-3.74 -2.94,-9.08 -2.94,-9.08 C-2.3,-9.72 -1.27,-9.74 -0.65,-9.12 C-0.65,-9.12 2.78,-5.89 2.78,-5.89 C2.78,-5.89 1.29,-4.47 1.29,-4.47 C1.29,-4.47 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -7.5,-1.77 -7.5,-1.77 C-7.5,-1.77 -4.54,1.11 -4.54,1.11 C-4.54,1.11 -5.95,2.51 -5.95,2.51 C-5.95,2.51 -8.36,0.12 -9.05,-0.58 C-9.86,-1.4 -9.7,-2.29 -8.82,-3.18c "
+                    android:valueTo="M-8.82 -3.18 C-8.26,-3.74 -2.94,-9.08 -2.94,-9.08 C-2.3,-9.72 -1.27,-9.74 -0.65,-9.12 C-0.65,-9.12 -0.36,-8.83 -0.36,-8.83 C-0.36,-8.83 -1.8,-7.44 -1.8,-7.44 C-1.8,-7.44 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -7.5,-1.77 -7.5,-1.77 C-7.5,-1.77 -4.54,1.11 -4.54,1.11 C-4.54,1.11 -5.95,2.51 -5.95,2.51 C-5.95,2.51 -8.36,0.12 -9.05,-0.58 C-9.86,-1.4 -9.7,-2.29 -8.82,-3.18c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="17"
+                    android:propertyName="pathData"
+                    android:startOffset="103"
+                    android:valueFrom="M-8.82 -3.18 C-8.26,-3.74 -2.94,-9.08 -2.94,-9.08 C-2.3,-9.72 -1.27,-9.74 -0.65,-9.12 C-0.65,-9.12 -0.36,-8.83 -0.36,-8.83 C-0.36,-8.83 -1.8,-7.44 -1.8,-7.44 C-1.8,-7.44 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -7.5,-1.77 -7.5,-1.77 C-7.5,-1.77 -4.54,1.11 -4.54,1.11 C-4.54,1.11 -5.95,2.51 -5.95,2.51 C-5.95,2.51 -8.36,0.12 -9.05,-0.58 C-9.86,-1.4 -9.7,-2.29 -8.82,-3.18c "
+                    android:valueTo="M-8.82 -3.18 C-8.26,-3.74 -3.22,-8.8 -3.22,-8.8 C-3.22,-8.8 -3.21,-8.79 -3.21,-8.79 C-3.21,-8.79 -3.24,-8.8 -3.24,-8.8 C-3.24,-8.8 -1.8,-7.44 -1.8,-7.44 C-1.8,-7.44 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -7.5,-1.77 -7.5,-1.77 C-7.5,-1.77 -4.54,1.11 -4.54,1.11 C-4.54,1.11 -5.95,2.51 -5.95,2.51 C-5.95,2.51 -8.36,0.12 -9.05,-0.58 C-9.86,-1.4 -9.7,-2.29 -8.82,-3.18c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="34"
+                    android:propertyName="pathData"
+                    android:startOffset="121"
+                    android:valueFrom="M-8.82 -3.18 C-8.26,-3.74 -3.22,-8.8 -3.22,-8.8 C-3.22,-8.8 -3.21,-8.79 -3.21,-8.79 C-3.21,-8.79 -3.24,-8.8 -3.24,-8.8 C-3.24,-8.8 -1.8,-7.44 -1.8,-7.44 C-1.8,-7.44 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -7.5,-1.77 -7.5,-1.77 C-7.5,-1.77 -4.54,1.11 -4.54,1.11 C-4.54,1.11 -5.95,2.51 -5.95,2.51 C-5.95,2.51 -8.36,0.12 -9.05,-0.58 C-9.86,-1.4 -9.7,-2.29 -8.82,-3.18c "
+                    android:valueTo="M-8.82 -3.18 C-8.26,-3.74 -5.81,-6.14 -5.81,-6.14 C-5.81,-6.14 -5.81,-6.13 -5.81,-6.13 C-5.81,-6.13 -5.83,-6.14 -5.83,-6.14 C-5.83,-6.14 -4.39,-4.78 -4.39,-4.78 C-4.39,-4.78 -4.37,-4.76 -4.37,-4.76 C-4.37,-4.76 -7.5,-1.77 -7.5,-1.77 C-7.5,-1.77 -4.54,1.11 -4.54,1.11 C-4.54,1.11 -5.95,2.51 -5.95,2.51 C-5.95,2.51 -8.36,0.12 -9.05,-0.58 C-9.86,-1.4 -9.7,-2.29 -8.82,-3.18c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="26"
+                    android:propertyName="pathData"
+                    android:startOffset="155"
+                    android:valueFrom="M-8.82 -3.18 C-8.26,-3.74 -5.81,-6.14 -5.81,-6.14 C-5.81,-6.14 -5.81,-6.13 -5.81,-6.13 C-5.81,-6.13 -5.83,-6.14 -5.83,-6.14 C-5.83,-6.14 -4.39,-4.78 -4.39,-4.78 C-4.39,-4.78 -4.37,-4.76 -4.37,-4.76 C-4.37,-4.76 -7.5,-1.77 -7.5,-1.77 C-7.5,-1.77 -4.54,1.11 -4.54,1.11 C-4.54,1.11 -5.95,2.51 -5.95,2.51 C-5.95,2.51 -8.36,0.12 -9.05,-0.58 C-9.86,-1.4 -9.7,-2.29 -8.82,-3.18c "
+                    android:valueTo="M-8.91 -3.09 C-8.91,-3.09 -8.91,-3.09 -8.91,-3.09 C-8.91,-3.09 -8.9,-3.09 -8.9,-3.09 C-8.9,-3.09 -7.49,-1.74 -7.49,-1.74 C-7.49,-1.74 -7.5,-1.75 -7.5,-1.75 C-7.5,-1.75 -7.48,-1.73 -7.48,-1.73 C-7.48,-1.73 -7.5,-1.77 -7.5,-1.77 C-7.5,-1.77 -4.54,1.11 -4.54,1.11 C-4.54,1.11 -5.95,2.51 -5.95,2.51 C-5.95,2.51 -8.36,0.12 -9.05,-0.58 C-9.86,-1.4 -9.79,-2.2 -8.91,-3.09c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="17"
+                    android:propertyName="pathData"
+                    android:startOffset="181"
+                    android:valueFrom="M-8.91 -3.09 C-8.91,-3.09 -8.91,-3.09 -8.91,-3.09 C-8.91,-3.09 -8.9,-3.09 -8.9,-3.09 C-8.9,-3.09 -7.49,-1.74 -7.49,-1.74 C-7.49,-1.74 -7.5,-1.75 -7.5,-1.75 C-7.5,-1.75 -7.48,-1.73 -7.48,-1.73 C-7.48,-1.73 -7.5,-1.77 -7.5,-1.77 C-7.5,-1.77 -4.54,1.11 -4.54,1.11 C-4.54,1.11 -5.95,2.51 -5.95,2.51 C-5.95,2.51 -8.36,0.12 -9.05,-0.58 C-9.86,-1.4 -9.79,-2.2 -8.91,-3.09c "
+                    android:valueTo="M-9.05 -0.57 C-9.05,-0.57 -9.05,-0.58 -9.05,-0.58 C-9.05,-0.58 -9.04,-0.57 -9.04,-0.57 C-9.04,-0.57 -7.59,-1.83 -7.59,-1.83 C-7.59,-1.83 -7.61,-1.85 -7.61,-1.85 C-7.61,-1.85 -7.59,-1.83 -7.59,-1.83 C-7.59,-1.83 -7.61,-1.86 -7.61,-1.86 C-7.61,-1.86 -4.54,1.11 -4.54,1.11 C-4.54,1.11 -5.95,2.51 -5.95,2.51 C-5.95,2.51 -9.05,-0.58 -9.05,-0.58 C-9.05,-0.58 -9.05,-0.57 -9.05,-0.57c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="52"
+                    android:propertyName="pathData"
+                    android:startOffset="198"
+                    android:valueFrom="M-9.05 -0.57 C-9.05,-0.57 -9.05,-0.58 -9.05,-0.58 C-9.05,-0.58 -9.04,-0.57 -9.04,-0.57 C-9.04,-0.57 -7.59,-1.83 -7.59,-1.83 C-7.59,-1.83 -7.61,-1.85 -7.61,-1.85 C-7.61,-1.85 -7.59,-1.83 -7.59,-1.83 C-7.59,-1.83 -7.61,-1.86 -7.61,-1.86 C-7.61,-1.86 -4.54,1.11 -4.54,1.11 C-4.54,1.11 -5.95,2.51 -5.95,2.51 C-5.95,2.51 -9.05,-0.58 -9.05,-0.58 C-9.05,-0.58 -9.05,-0.57 -9.05,-0.57c "
+                    android:valueTo="M-5.94 2.52 C-5.94,2.52 -5.94,2.51 -5.94,2.51 C-5.94,2.51 -5.93,2.52 -5.93,2.52 C-5.93,2.52 -4.53,1.12 -4.53,1.12 C-4.53,1.12 -4.55,1.11 -4.55,1.11 C-4.55,1.11 -4.53,1.13 -4.53,1.13 C-4.53,1.13 -4.55,1.09 -4.55,1.09 C-4.55,1.09 -4.54,1.11 -4.54,1.11 C-4.54,1.11 -5.95,2.51 -5.95,2.51 C-5.95,2.51 -5.94,2.52 -5.94,2.52 C-5.94,2.52 -5.94,2.52 -5.94,2.52c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.1,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_2_G_D_2_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="38"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M7.54 -0.94 C7.54,-0.94 7.54,-0.95 7.54,-0.95 C7.55,-0.94 7.54,-0.94 7.55,-0.94 C7.55,-0.94 7.53,-0.94 7.53,-0.94 C7.53,-0.94 7.52,-0.94 7.52,-0.94 C7.52,-0.94 7.54,-0.94 7.54,-0.94 C7.54,-0.94 7.52,-0.94 7.52,-0.94 C7.52,-0.94 7.54,-0.94 7.54,-0.94c "
+                    android:valueTo="M7.54 -0.94 C7.54,-0.94 7.54,-0.95 7.54,-0.95 C7.55,-0.94 7.54,-0.94 7.55,-0.94 C7.55,-0.94 7.53,-0.94 7.53,-0.94 C7.53,-0.94 7.52,-0.94 7.52,-0.94 C7.52,-0.94 7.54,-0.94 7.54,-0.94 C7.54,-0.94 7.52,-0.94 7.52,-0.94 C7.52,-0.94 7.54,-0.94 7.54,-0.94c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="17"
+                    android:propertyName="pathData"
+                    android:startOffset="38"
+                    android:valueFrom="M7.54 -0.94 C7.54,-0.94 7.54,-0.95 7.54,-0.95 C7.55,-0.94 7.54,-0.94 7.55,-0.94 C7.55,-0.94 7.53,-0.94 7.53,-0.94 C7.53,-0.94 7.52,-0.94 7.52,-0.94 C7.52,-0.94 7.54,-0.94 7.54,-0.94 C7.54,-0.94 7.52,-0.94 7.52,-0.94 C7.52,-0.94 7.54,-0.94 7.54,-0.94c "
+                    android:valueTo="M6.15 -2.35 C6.15,-2.35 6.15,-2.35 6.15,-2.35 C6.16,-2.34 6.15,-2.35 6.16,-2.35 C6.16,-2.35 7.53,-0.94 7.53,-0.94 C7.53,-0.94 4.7,-0.94 4.7,-0.94 C4.7,-0.94 4.72,-0.93 4.72,-0.93 C4.72,-0.93 4.7,-0.94 4.7,-0.94 C4.7,-0.94 6.15,-2.35 6.15,-2.35c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="90"
+                    android:propertyName="pathData"
+                    android:startOffset="55"
+                    android:valueFrom="M6.15 -2.35 C6.15,-2.35 6.15,-2.35 6.15,-2.35 C6.16,-2.34 6.15,-2.35 6.16,-2.35 C6.16,-2.35 7.53,-0.94 7.53,-0.94 C7.53,-0.94 4.7,-0.94 4.7,-0.94 C4.7,-0.94 4.72,-0.93 4.72,-0.93 C4.72,-0.93 4.7,-0.94 4.7,-0.94 C4.7,-0.94 6.15,-2.35 6.15,-2.35c "
+                    android:valueTo="M-0.65 -9.12 C-0.65,-9.12 -0.66,-9.13 -0.66,-9.13 C-0.65,-9.12 -0.66,-9.12 -0.65,-9.12 C-0.65,-9.12 7.53,-0.94 7.53,-0.94 C7.53,-0.94 4.7,-0.94 4.7,-0.94 C4.7,-0.94 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -1.8,-7.43 -1.8,-7.43 C-1.8,-7.43 -0.65,-9.12 -0.65,-9.12c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="10"
+                    android:propertyName="pathData"
+                    android:startOffset="145"
+                    android:valueFrom="M-0.65 -9.12 C-0.65,-9.12 -0.66,-9.13 -0.66,-9.13 C-0.65,-9.12 -0.66,-9.12 -0.65,-9.12 C-0.65,-9.12 7.53,-0.94 7.53,-0.94 C7.53,-0.94 4.7,-0.94 4.7,-0.94 C4.7,-0.94 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -1.8,-7.43 -1.8,-7.43 C-1.8,-7.43 -0.65,-9.12 -0.65,-9.12c "
+                    android:valueTo="M-3.21 -8.85 C-3.21,-8.85 -2.94,-9.08 -2.94,-9.08 C-2.3,-9.72 -1.27,-9.74 -0.65,-9.12 C-0.65,-9.12 7.53,-0.94 7.53,-0.94 C7.53,-0.94 4.7,-0.94 4.7,-0.94 C4.7,-0.94 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -1.8,-7.43 -1.8,-7.43 C-1.8,-7.43 -3.21,-8.85 -3.21,-8.85c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="261"
+                    android:propertyName="pathData"
+                    android:startOffset="155"
+                    android:valueFrom="M-3.21 -8.85 C-3.21,-8.85 -2.94,-9.08 -2.94,-9.08 C-2.3,-9.72 -1.27,-9.74 -0.65,-9.12 C-0.65,-9.12 7.53,-0.94 7.53,-0.94 C7.53,-0.94 4.7,-0.94 4.7,-0.94 C4.7,-0.94 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -1.8,-7.43 -1.8,-7.43 C-1.8,-7.43 -3.21,-8.85 -3.21,-8.85c "
+                    android:valueTo="M-8.52 -3.53 C-8.52,-3.53 -2.94,-9.08 -2.94,-9.08 C-2.3,-9.72 -1.27,-9.74 -0.65,-9.12 C-0.65,-9.12 7.53,-0.94 7.53,-0.94 C7.53,-0.94 4.7,-0.94 4.7,-0.94 C4.7,-0.94 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -7.11,-2.11 -7.11,-2.11 C-7.11,-2.11 -8.52,-3.53 -8.52,-3.53c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.1,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_2_G_D_3_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="38"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M-7.54 0.94 C-7.54,0.94 -7.54,0.95 -7.54,0.95 C-7.55,0.94 -7.54,0.94 -7.54,0.94 C-7.54,0.94 -7.53,0.94 -7.53,0.94 C-7.53,0.94 -7.52,0.94 -7.52,0.94 C-7.52,0.94 -7.54,0.94 -7.54,0.94 C-7.54,0.94 -7.52,0.94 -7.52,0.94 C-7.52,0.94 -7.54,0.94 -7.54,0.94c "
+                    android:valueTo="M-7.54 0.94 C-7.54,0.94 -7.54,0.95 -7.54,0.95 C-7.55,0.94 -7.54,0.94 -7.54,0.94 C-7.54,0.94 -7.53,0.94 -7.53,0.94 C-7.53,0.94 -7.52,0.94 -7.52,0.94 C-7.52,0.94 -7.54,0.94 -7.54,0.94 C-7.54,0.94 -7.52,0.94 -7.52,0.94 C-7.52,0.94 -7.54,0.94 -7.54,0.94c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="17"
+                    android:propertyName="pathData"
+                    android:startOffset="38"
+                    android:valueFrom="M-7.54 0.94 C-7.54,0.94 -7.54,0.95 -7.54,0.95 C-7.55,0.94 -7.54,0.94 -7.54,0.94 C-7.54,0.94 -7.53,0.94 -7.53,0.94 C-7.53,0.94 -7.52,0.94 -7.52,0.94 C-7.52,0.94 -7.54,0.94 -7.54,0.94 C-7.54,0.94 -7.52,0.94 -7.52,0.94 C-7.52,0.94 -7.54,0.94 -7.54,0.94c "
+                    android:valueTo="M-6.15 2.35 C-6.15,2.35 -6.15,2.35 -6.15,2.35 C-6.16,2.34 -6.15,2.35 -6.15,2.35 C-6.15,2.35 -6.14,2.36 -6.14,2.36 C-6.14,2.36 -4.7,0.94 -4.7,0.94 C-4.7,0.94 -4.72,0.93 -4.72,0.93 C-4.72,0.93 -4.7,0.94 -4.7,0.94 C-4.7,0.94 -6.15,2.35 -6.15,2.35c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="90"
+                    android:propertyName="pathData"
+                    android:startOffset="55"
+                    android:valueFrom="M-6.15 2.35 C-6.15,2.35 -6.15,2.35 -6.15,2.35 C-6.16,2.34 -6.15,2.35 -6.15,2.35 C-6.15,2.35 -6.14,2.36 -6.14,2.36 C-6.14,2.36 -4.7,0.94 -4.7,0.94 C-4.7,0.94 -4.72,0.93 -4.72,0.93 C-4.72,0.93 -4.7,0.94 -4.7,0.94 C-4.7,0.94 -6.15,2.35 -6.15,2.35c "
+                    android:valueTo="M0.65 9.12 C0.65,9.12 0.66,9.13 0.66,9.13 C0.65,9.12 0.66,9.13 0.65,9.12 C0.65,9.12 -7.53,0.94 -7.53,0.94 C-7.53,0.94 -4.7,0.94 -4.7,0.94 C-4.7,0.94 1.78,7.42 1.78,7.42 C1.78,7.42 1.8,7.43 1.8,7.43 C1.8,7.43 0.65,9.12 0.65,9.12c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="10"
+                    android:propertyName="pathData"
+                    android:startOffset="145"
+                    android:valueFrom="M0.65 9.12 C0.65,9.12 0.66,9.13 0.66,9.13 C0.65,9.12 0.66,9.13 0.65,9.12 C0.65,9.12 -7.53,0.94 -7.53,0.94 C-7.53,0.94 -4.7,0.94 -4.7,0.94 C-4.7,0.94 1.78,7.42 1.78,7.42 C1.78,7.42 1.8,7.43 1.8,7.43 C1.8,7.43 0.65,9.12 0.65,9.12c "
+                    android:valueTo="M3.21 8.85 C3.21,8.85 2.94,9.08 2.94,9.08 C2.3,9.72 1.27,9.74 0.65,9.12 C0.65,9.12 -7.53,0.94 -7.53,0.94 C-7.53,0.94 -4.7,0.94 -4.7,0.94 C-4.7,0.94 1.78,7.42 1.78,7.42 C1.78,7.42 1.8,7.43 1.8,7.43 C1.8,7.43 3.21,8.85 3.21,8.85c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="261"
+                    android:propertyName="pathData"
+                    android:startOffset="155"
+                    android:valueFrom="M3.21 8.85 C3.21,8.85 2.94,9.08 2.94,9.08 C2.3,9.72 1.27,9.74 0.65,9.12 C0.65,9.12 -7.53,0.94 -7.53,0.94 C-7.53,0.94 -4.7,0.94 -4.7,0.94 C-4.7,0.94 1.78,7.42 1.78,7.42 C1.78,7.42 1.8,7.43 1.8,7.43 C1.8,7.43 3.21,8.85 3.21,8.85c "
+                    android:valueTo="M8.52 3.53 C8.52,3.53 2.94,9.08 2.94,9.08 C2.3,9.72 1.27,9.74 0.65,9.12 C0.65,9.12 -7.53,0.94 -7.53,0.94 C-7.53,0.94 -4.7,0.94 -4.7,0.94 C-4.7,0.94 1.78,7.42 1.78,7.42 C1.78,7.42 7.11,2.11 7.11,2.11 C7.11,2.11 8.52,3.53 8.52,3.53c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.1,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_2_G">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="367"
+                    android:propertyName="rotation"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="-135"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_1_G_T_1">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="17"
+                    android:propertyName="translateX"
+                    android:startOffset="0"
+                    android:valueFrom="-7"
+                    android:valueTo="-8.859"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="138"
+                    android:propertyName="translateX"
+                    android:startOffset="17"
+                    android:valueFrom="-8.859"
+                    android:valueTo="1.734"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="261"
+                    android:propertyName="translateX"
+                    android:startOffset="155"
+                    android:valueFrom="1.734"
+                    android:valueTo="7"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.1,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_1_G_T_1">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="17"
+                    android:propertyName="translateY"
+                    android:startOffset="0"
+                    android:valueFrom="-3.594"
+                    android:valueTo="-1.922"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="138"
+                    android:propertyName="translateY"
+                    android:startOffset="17"
+                    android:valueFrom="-1.922"
+                    android:valueTo="8.671"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="261"
+                    android:propertyName="translateY"
+                    android:startOffset="155"
+                    android:valueFrom="8.671"
+                    android:valueTo="3.5"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.1,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_1_G_T_1">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="17"
+                    android:propertyName="rotation"
+                    android:startOffset="0"
+                    android:valueFrom="360"
+                    android:valueTo="270"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="103"
+                    android:propertyName="rotation"
+                    android:startOffset="17"
+                    android:valueFrom="270"
+                    android:valueTo="270"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="34"
+                    android:propertyName="rotation"
+                    android:startOffset="121"
+                    android:valueFrom="270"
+                    android:valueTo="180"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="261"
+                    android:propertyName="rotation"
+                    android:startOffset="155"
+                    android:valueFrom="180"
+                    android:valueTo="180"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0 0.1,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_1_G_N_3_T_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="367"
+                    android:propertyName="rotation"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="-135"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_T_1">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="17"
+                    android:propertyName="translateX"
+                    android:startOffset="0"
+                    android:valueFrom="7.062"
+                    android:valueTo="8.578"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="138"
+                    android:propertyName="translateX"
+                    android:startOffset="17"
+                    android:valueFrom="8.578"
+                    android:valueTo="-1.656"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="261"
+                    android:propertyName="translateX"
+                    android:startOffset="155"
+                    android:valueFrom="-1.656"
+                    android:valueTo="-7"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.1,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_T_1">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="17"
+                    android:propertyName="translateY"
+                    android:startOffset="0"
+                    android:valueFrom="3.312"
+                    android:valueTo="2.016"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="138"
+                    android:propertyName="translateY"
+                    android:startOffset="17"
+                    android:valueFrom="2.016"
+                    android:valueTo="-8.656"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="261"
+                    android:propertyName="translateY"
+                    android:startOffset="155"
+                    android:valueFrom="-8.656"
+                    android:valueTo="-3.5"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.1,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_T_1">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="17"
+                    android:propertyName="rotation"
+                    android:startOffset="0"
+                    android:valueFrom="180"
+                    android:valueTo="90"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="103"
+                    android:propertyName="rotation"
+                    android:startOffset="17"
+                    android:valueFrom="90"
+                    android:valueTo="90"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="34"
+                    android:propertyName="rotation"
+                    android:startOffset="121"
+                    android:valueFrom="90"
+                    android:valueTo="0"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_N_3_T_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="367"
+                    android:propertyName="rotation"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="-135"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0,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:duration="433"
+                    android:propertyName="translateX"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="1"
+                    android:valueType="floatType" />
+            </set>
+        </aapt:attr>
+    </target>
+    <aapt:attr name="android:drawable">
+        <vector
+            android:width="24dp"
+            android:height="24dp"
+            android:viewportHeight="24"
+            android:viewportWidth="24">
+            <group android:name="_R_G">
+                <group
+                    android:name="_R_G_L_2_G"
+                    android:rotation="0"
+                    android:translateX="12"
+                    android:translateY="12">
+                    <path
+                        android:name="_R_G_L_2_G_D_0_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M8.52 3.53 C8.52,3.53 2.94,9.08 2.94,9.08 C2.3,9.72 1.27,9.74 0.65,9.12 C0.65,9.12 -7.53,0.95 -7.53,0.95 C-7.53,0.95 -4.7,0.94 -4.7,0.94 C-4.7,0.94 1.78,7.42 1.78,7.42 C1.78,7.42 7.11,2.11 7.11,2.11 C7.11,2.11 7.14,2.14 7.14,2.14 C7.14,2.14 8.48,3.49 8.48,3.49 C8.48,3.49 8.5,3.51 8.5,3.51 C8.5,3.51 8.52,3.53 8.52,3.53c " />
+                    <path
+                        android:name="_R_G_L_2_G_D_1_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M-8.52 -3.53 C-8.52,-3.53 -2.94,-9.08 -2.94,-9.08 C-2.3,-9.72 -1.27,-9.74 -0.65,-9.12 C-0.65,-9.12 7.53,-0.95 7.53,-0.95 C7.53,-0.95 4.7,-0.94 4.7,-0.94 C4.7,-0.94 -1.78,-7.42 -1.78,-7.42 C-1.78,-7.42 -7.11,-2.11 -7.11,-2.11 C-7.11,-2.11 -7.14,-2.14 -7.14,-2.14 C-7.14,-2.14 -8.48,-3.49 -8.48,-3.49 C-8.48,-3.49 -8.5,-3.51 -8.5,-3.51 C-8.5,-3.51 -8.52,-3.53 -8.52,-3.53c " />
+                    <path
+                        android:name="_R_G_L_2_G_D_2_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M7.54 -0.94 C7.54,-0.94 7.54,-0.95 7.54,-0.95 C7.55,-0.94 7.54,-0.94 7.55,-0.94 C7.55,-0.94 7.53,-0.94 7.53,-0.94 C7.53,-0.94 7.52,-0.94 7.52,-0.94 C7.52,-0.94 7.54,-0.94 7.54,-0.94 C7.54,-0.94 7.52,-0.94 7.52,-0.94 C7.52,-0.94 7.54,-0.94 7.54,-0.94c " />
+                    <path
+                        android:name="_R_G_L_2_G_D_3_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M-7.54 0.94 C-7.54,0.94 -7.54,0.95 -7.54,0.95 C-7.55,0.94 -7.54,0.94 -7.54,0.94 C-7.54,0.94 -7.53,0.94 -7.53,0.94 C-7.53,0.94 -7.52,0.94 -7.52,0.94 C-7.52,0.94 -7.54,0.94 -7.54,0.94 C-7.54,0.94 -7.52,0.94 -7.52,0.94 C-7.52,0.94 -7.54,0.94 -7.54,0.94c " />
+                </group>
+                <group
+                    android:name="_R_G_L_1_G_N_3_T_0"
+                    android:rotation="0"
+                    android:translateX="12"
+                    android:translateY="12">
+                    <group
+                        android:name="_R_G_L_1_G_T_1"
+                        android:rotation="360"
+                        android:translateX="-7"
+                        android:translateY="-3.594">
+                        <group
+                            android:name="_R_G_L_1_G"
+                            android:translateX="6.984"
+                            android:translateY="3.547">
+                            <path
+                                android:name="_R_G_L_1_G_D_0_P_0"
+                                android:fillAlpha="1"
+                                android:fillColor="#ffffff"
+                                android:fillType="nonZero"
+                                android:pathData=" M-4.6 -1.06 C-4.6,-1.06 -9.55,-1.06 -9.55,-1.06 C-9.55,-1.06 -9.55,-6.01 -9.55,-6.01 C-9.55,-6.01 -7.55,-6 -7.55,-6 C-7.55,-6 -7.51,-3.04 -7.51,-3.04 C-7.51,-3.04 -4.6,-3.05 -4.6,-3.05 C-4.6,-3.05 -4.6,-1.06 -4.6,-1.06c " />
+                        </group>
+                    </group>
+                </group>
+                <group
+                    android:name="_R_G_L_0_G_N_3_T_0"
+                    android:rotation="0"
+                    android:translateX="12"
+                    android:translateY="12">
+                    <group
+                        android:name="_R_G_L_0_G_T_1"
+                        android:rotation="180"
+                        android:translateX="7.062"
+                        android:translateY="3.312">
+                        <group
+                            android:name="_R_G_L_0_G"
+                            android:translateX="6.984"
+                            android:translateY="3.547">
+                            <path
+                                android:name="_R_G_L_0_G_D_0_P_0"
+                                android:fillAlpha="1"
+                                android:fillColor="#ffffff"
+                                android:fillType="nonZero"
+                                android:pathData=" M-4.6 -1.06 C-4.6,-1.06 -9.55,-1.06 -9.55,-1.06 C-9.55,-1.06 -9.55,-6.01 -9.55,-6.01 C-9.55,-6.01 -7.55,-6 -7.55,-6 C-7.55,-6 -7.51,-3.04 -7.51,-3.04 C-7.51,-3.04 -4.6,-3.05 -4.6,-3.05 C-4.6,-3.05 -4.6,-1.06 -4.6,-1.06c " />
+                        </group>
+                    </group>
+                </group>
+            </group>
+            <group android:name="time_group" />
+        </vector>
+    </aapt:attr>
+</animated-vector>
diff --git a/packages/SystemUI/res-keyguard/drawable/qs_bluetooth_icon_off.xml b/packages/SystemUI/res-keyguard/drawable/qs_bluetooth_icon_off.xml
new file mode 100644
index 0000000..17a7611
--- /dev/null
+++ b/packages/SystemUI/res-keyguard/drawable/qs_bluetooth_icon_off.xml
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2020 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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="24dp"
+            android:width="24dp"
+            android:viewportHeight="24"
+            android:viewportWidth="24">
+            <group android:name="_R_G">
+                <group android:name="_R_G_L_2_G"
+                    android:translateX="14.125"
+                    android:translateY="12">
+                    <path
+                        android:name="_R_G_L_2_G_D_0_P_0"
+                        android:fillColor="#ffffff"
+                        android:fillAlpha="1"
+                        android:fillType="nonZero"
+                        android:pathData=" M-1 6.17 C-1,6.17 0.88,4.29 0.88,4.29 C0.88,4.29 -1,2.41 -1,2.41 C-1,2.41 -1,6.17 -1,6.17c  M0.88 -4.29 C0.88,-4.29 -1,-6.17 -1,-6.17 C-1,-6.17 -1,-2.41 -1,-2.41 C-1,-2.41 0.88,-4.29 0.88,-4.29c  M-2 -10 C-2,-10 3.71,-4.29 3.71,-4.29 C3.71,-4.29 -0.59,0 -0.59,0 C-0.59,0 3.71,4.29 3.71,4.29 C3.71,4.29 -2,10 -2,10 C-2,10 -3,10 -3,10 C-3,10 -3,2.41 -3,2.41 C-3,2.41 -7.59,7 -7.59,7 C-7.59,7 -9.01,5.59 -9.01,5.59 C-9.01,5.59 -3.41,0 -3.41,0 C-3.41,0 -9.01,-5.59 -9.01,-5.59 C-9.01,-5.59 -7.59,-7 -7.59,-7 C-7.59,-7 -3,-2.41 -3,-2.41 C-3,-2.41 -3,-10 -3,-10 C-3,-10 -2,-10 -2,-10c "/>
+                </group>
+                <group
+                    android:name="_R_G_L_1_G"
+                    android:translateX="14.125"
+                    android:translateY="12"
+                    android:pivotX="-9.109"
+                    android:scaleX="1"
+                    android:scaleY="1">
+                    <path
+                        android:name="_R_G_L_1_G_D_0_P_0"
+                        android:fillColor="#ffffff"
+                        android:fillAlpha="1"
+                        android:fillType="nonZero"
+                        android:pathData=" M-9.09 -1.5 C-8.26,-1.5 -7.59,-0.83 -7.59,0 C-7.59,0.83 -8.26,1.5 -9.09,1.5 C-9.91,1.5 -10.59,0.83 -10.59,0 C-10.59,-0.83 -9.91,-1.5 -9.09,-1.5c "/>
+                </group>
+                <group
+                    android:name="_R_G_L_0_G"
+                    android:translateX="14.125"
+                    android:translateY="12"
+                    android:pivotX="4.875"
+                    android:scaleX="1"
+                    android:scaleY="1">
+                    <path
+                        android:name="_R_G_L_0_G_D_0_P_0"
+                        android:fillColor="#ffffff"
+                        android:fillAlpha="1"
+                        android:fillType="nonZero"
+                        android:pathData=" M4.92 -1.5 C5.75,-1.5 6.42,-0.83 6.42,0 C6.42,0.83 5.75,1.5 4.92,1.5 C4.09,1.5 3.42,0.83 3.42,0 C3.42,-0.83 4.09,-1.5 4.92,-1.5c "/>
+                </group>
+            </group>
+            <group android:name="time_group"/>
+        </vector>
+    </aapt:attr>
+    <target android:name="_R_G_L_1_G">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:propertyName="scaleX"
+                    android:duration="150"
+                    android:startOffset="0"
+                    android:valueFrom="1"
+                    android:valueTo="0"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator
+                            android:pathData="M 0.0,0.0 c0.5,0 0.833,0.833 1.0,1.0"/>
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:propertyName="scaleY"
+                    android:duration="150"
+                    android:startOffset="0"
+                    android:valueFrom="1"
+                    android:valueTo="0"
+                    android:valueType="floatType">
+                    <aapt:attr
+                        name="android:interpolator">
+                        <pathInterpolator
+                            android:pathData="M 0.0,0.0 c0.5,0 0.833,0.833 1.0,1.0"/>
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:propertyName="scaleX"
+                    android:duration="150"
+                    android:startOffset="0"
+                    android:valueFrom="1"
+                    android:valueTo="0"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator
+                            android:pathData="M 0.0,0.0 c0.5,0 0.833,0.833 1.0,1.0"/>
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:propertyName="scaleY"
+                    android:duration="150"
+                    android:startOffset="0"
+                    android:valueFrom="1"
+                    android:valueTo="0"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator
+                            android:pathData="M 0.0,0.0 c0.5,0 0.833,0.833 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="150"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="1"
+                    android:valueType="floatType"/>
+            </set>
+        </aapt:attr>
+    </target>
+</animated-vector>
diff --git a/packages/SystemUI/res-keyguard/drawable/qs_bluetooth_icon_on.xml b/packages/SystemUI/res-keyguard/drawable/qs_bluetooth_icon_on.xml
new file mode 100644
index 0000000..2dba48c
--- /dev/null
+++ b/packages/SystemUI/res-keyguard/drawable/qs_bluetooth_icon_on.xml
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ Copyright (C) 2020 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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">
+    <target android:name="_R_G_L_1_G">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="250"
+                    android:propertyName="scaleX"
+                    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.167,0.167 0.35,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="250"
+                    android:propertyName="scaleY"
+                    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.167,0.167 0.35,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="250"
+                    android:propertyName="scaleX"
+                    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.167,0.167 0.35,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="250"
+                    android:propertyName="scaleY"
+                    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.167,0.167 0.35,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:duration="267"
+                    android:propertyName="translateX"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="1"
+                    android:valueType="floatType" />
+            </set>
+        </aapt:attr>
+    </target>
+    <aapt:attr name="android:drawable">
+        <vector
+            android:width="24dp"
+            android:height="24dp"
+            android:viewportHeight="24"
+            android:viewportWidth="24">
+            <group android:name="_R_G">
+                <group
+                    android:name="_R_G_L_2_G"
+                    android:translateX="14.125"
+                    android:translateY="12">
+                    <path
+                        android:name="_R_G_L_2_G_D_0_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M-1 6.17 C-1,6.17 0.88,4.29 0.88,4.29 C0.88,4.29 -1,2.41 -1,2.41 C-1,2.41 -1,6.17 -1,6.17c  M0.88 -4.29 C0.88,-4.29 -1,-6.17 -1,-6.17 C-1,-6.17 -1,-2.41 -1,-2.41 C-1,-2.41 0.88,-4.29 0.88,-4.29c  M-2 -10 C-2,-10 3.71,-4.29 3.71,-4.29 C3.71,-4.29 -0.59,0 -0.59,0 C-0.59,0 3.71,4.29 3.71,4.29 C3.71,4.29 -2,10 -2,10 C-2,10 -3,10 -3,10 C-3,10 -3,2.41 -3,2.41 C-3,2.41 -7.59,7 -7.59,7 C-7.59,7 -9.01,5.59 -9.01,5.59 C-9.01,5.59 -3.41,0 -3.41,0 C-3.41,0 -9.01,-5.59 -9.01,-5.59 C-9.01,-5.59 -7.59,-7 -7.59,-7 C-7.59,-7 -3,-2.41 -3,-2.41 C-3,-2.41 -3,-10 -3,-10 C-3,-10 -2,-10 -2,-10c " />
+                </group>
+                <group
+                    android:name="_R_G_L_1_G"
+                    android:pivotX="-9.109"
+                    android:scaleX="0"
+                    android:scaleY="0"
+                    android:translateX="14.125"
+                    android:translateY="12">
+                    <path
+                        android:name="_R_G_L_1_G_D_0_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M-9.09 -1.5 C-8.26,-1.5 -7.59,-0.83 -7.59,0 C-7.59,0.83 -8.26,1.5 -9.09,1.5 C-9.91,1.5 -10.59,0.83 -10.59,0 C-10.59,-0.83 -9.91,-1.5 -9.09,-1.5c " />
+                </group>
+                <group
+                    android:name="_R_G_L_0_G"
+                    android:pivotX="4.875"
+                    android:scaleX="0"
+                    android:scaleY="0"
+                    android:translateX="14.125"
+                    android:translateY="12">
+                    <path
+                        android:name="_R_G_L_0_G_D_0_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M4.92 -1.5 C5.75,-1.5 6.42,-0.83 6.42,0 C6.42,0.83 5.75,1.5 4.92,1.5 C4.09,1.5 3.42,0.83 3.42,0 C3.42,-0.83 4.09,-1.5 4.92,-1.5c " />
+                </group>
+            </group>
+            <group android:name="time_group" />
+        </vector>
+    </aapt:attr>
+</animated-vector>
diff --git a/packages/SystemUI/res-keyguard/drawable/qs_bluetooth_icon_search.xml b/packages/SystemUI/res-keyguard/drawable/qs_bluetooth_icon_search.xml
new file mode 100644
index 0000000..3697769
--- /dev/null
+++ b/packages/SystemUI/res-keyguard/drawable/qs_bluetooth_icon_search.xml
@@ -0,0 +1,268 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ Copyright (C) 2020 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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">
+    <target android:name="_R_G_L_0_G_D_1_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="167"
+                    android:propertyName="fillAlpha"
+                    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.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="167"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="167"
+                    android:valueFrom="1"
+                    android:valueTo="1"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="167"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="333"
+                    android:valueFrom="1"
+                    android:valueTo="0"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_D_2_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="167"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="0"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="167"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="167"
+                    android:valueFrom="0"
+                    android:valueTo="1"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="167"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="333"
+                    android:valueFrom="1"
+                    android:valueTo="1"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="167"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="500"
+                    android:valueFrom="1"
+                    android:valueTo="0"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_D_3_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="167"
+                    android:propertyName="fillAlpha"
+                    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.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="167"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="167"
+                    android:valueFrom="1"
+                    android:valueTo="1"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="167"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="333"
+                    android:valueFrom="1"
+                    android:valueTo="0"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_D_4_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="167"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="0"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="167"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="167"
+                    android:valueFrom="0"
+                    android:valueTo="1"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="167"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="333"
+                    android:valueFrom="1"
+                    android:valueTo="1"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="167"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="500"
+                    android:valueFrom="1"
+                    android:valueTo="0"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 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:duration="1017"
+                    android:propertyName="translateX"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="1"
+                    android:valueType="floatType" />
+            </set>
+        </aapt:attr>
+    </target>
+    <aapt:attr name="android:drawable">
+        <vector
+            android:width="24dp"
+            android:height="24dp"
+            android:viewportHeight="24"
+            android:viewportWidth="24">
+            <group android:name="_R_G">
+                <group
+                    android:name="_R_G_L_0_G"
+                    android:translateX="14.125"
+                    android:translateY="12">
+                    <path
+                        android:name="_R_G_L_0_G_D_0_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M-1 6.17 C-1,6.17 0.88,4.29 0.88,4.29 C0.88,4.29 -1,2.41 -1,2.41 C-1,2.41 -1,6.17 -1,6.17c  M0.88 -4.29 C0.88,-4.29 -1,-6.17 -1,-6.17 C-1,-6.17 -1,-2.41 -1,-2.41 C-1,-2.41 0.88,-4.29 0.88,-4.29c  M-2 -10 C-2,-10 3.71,-4.29 3.71,-4.29 C3.71,-4.29 -0.59,0 -0.59,0 C-0.59,0 3.71,4.29 3.71,4.29 C3.71,4.29 -2,10 -2,10 C-2,10 -3,10 -3,10 C-3,10 -3,2.41 -3,2.41 C-3,2.41 -7.59,7 -7.59,7 C-7.59,7 -9.01,5.59 -9.01,5.59 C-9.01,5.59 -3.41,0 -3.41,0 C-3.41,0 -9.01,-5.59 -9.01,-5.59 C-9.01,-5.59 -7.59,-7 -7.59,-7 C-7.59,-7 -3,-2.41 -3,-2.41 C-3,-2.41 -3,-10 -3,-10 C-3,-10 -2,-10 -2,-10c " />
+                    <path
+                        android:name="_R_G_L_0_G_D_1_P_0"
+                        android:fillAlpha="0"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M4.56 2.33 C4.56,2.33 2.24,0.01 2.24,0.01 C2.24,0.01 4.57,-2.31 4.57,-2.31 C4.84,-1.59 5,-0.82 5,0 C5,0.82 4.84,1.61 4.56,2.33c " />
+                    <path
+                        android:name="_R_G_L_0_G_D_2_P_0"
+                        android:fillAlpha="0"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M6.27 -4.03 C6.27,-4.03 7.53,-5.29 7.53,-5.29 C8.46,-3.77 9,-1.99 9.01,-0.1 C9.01,1.85 8.44,3.67 7.47,5.21 C7.47,5.21 6.27,4.01 6.27,4.01 C6.89,2.81 7.25,1.44 7.25,-0.01 C7.25,-1.46 6.9,-2.82 6.27,-4.03c " />
+                    <path
+                        android:name="_R_G_L_0_G_D_3_P_0"
+                        android:fillAlpha="0"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M-8.6 -2.33 C-8.6,-2.33 -6.28,-0.01 -6.28,-0.01 C-6.28,-0.01 -8.61,2.31 -8.61,2.31 C-8.88,1.59 -9.04,0.82 -9.04,0 C-9.04,-0.82 -8.88,-1.61 -8.6,-2.33c " />
+                    <path
+                        android:name="_R_G_L_0_G_D_4_P_0"
+                        android:fillAlpha="0"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M-10.31 4.03 C-10.31,4.03 -11.57,5.29 -11.57,5.29 C-12.5,3.77 -13.04,1.99 -13.05,0.1 C-13.05,-1.85 -12.48,-3.67 -11.51,-5.21 C-11.51,-5.21 -10.31,-4.01 -10.31,-4.01 C-10.93,-2.81 -11.29,-1.44 -11.29,0.01 C-11.29,1.46 -10.94,2.82 -10.31,4.03c " />
+                    <path
+                        android:name="_R_G_L_0_G_D_5_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#000000"
+                        android:fillType="nonZero"
+                        android:pathData=" M-9.09 0 C-9.09,0 -9.09,0 -9.09,0 C-9.09,0 -9.09,0 -9.09,0 C-9.09,0 -9.09,0 -9.09,0 C-9.09,0 -9.09,0 -9.09,0c " />
+                    <path
+                        android:name="_R_G_L_0_G_D_6_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#000000"
+                        android:fillType="nonZero"
+                        android:pathData=" M4.92 0 C4.92,0 4.92,0 4.92,0 C4.92,0 4.92,0 4.92,0 C4.92,0 4.92,0 4.92,0 C4.92,0 4.92,0 4.92,0c " />
+                </group>
+            </group>
+            <group android:name="time_group" />
+        </vector>
+    </aapt:attr>
+</animated-vector>
diff --git a/packages/SystemUI/res-keyguard/font/clock.xml b/packages/SystemUI/res-keyguard/font/clock.xml
index d0867e9..0137dc3 100644
--- a/packages/SystemUI/res-keyguard/font/clock.xml
+++ b/packages/SystemUI/res-keyguard/font/clock.xml
@@ -22,6 +22,7 @@
 ** Should include all numeric glyphs in all supported locales.
 ** Recommended: font with variable width to support AOD => LS animations
 -->
+<!-- TODO: Remove when clock migration complete -->
 <font-family xmlns:android="http://schemas.android.com/apk/res/android">
     <font android:typeface="monospace"/>
 </font-family>
\ No newline at end of file
diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_bouncer_user_switcher.xml b/packages/SystemUI/res-keyguard/layout/keyguard_bouncer_user_switcher.xml
index 36035fc..01e3de2 100644
--- a/packages/SystemUI/res-keyguard/layout/keyguard_bouncer_user_switcher.xml
+++ b/packages/SystemUI/res-keyguard/layout/keyguard_bouncer_user_switcher.xml
@@ -45,6 +45,7 @@
           style="@style/Bouncer.UserSwitcher.Spinner.Header"
           android:clickable="false"
           android:id="@+id/user_switcher_header"
+          android:textDirection="locale"
           android:layout_width="@dimen/bouncer_user_switcher_width"
           android:layout_height="wrap_content" />
     </LinearLayout>>
diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml b/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml
index 87a9825..6a38507 100644
--- a/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml
+++ b/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml
@@ -31,7 +31,7 @@
         android:layout_alignParentStart="true"
         android:layout_alignParentTop="true"
         android:paddingStart="@dimen/clock_padding_start">
-        <com.android.keyguard.AnimatableClockView
+        <com.android.systemui.shared.clocks.AnimatableClockView
             android:id="@+id/animatable_clock_view"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
@@ -53,7 +53,7 @@
         android:layout_height="wrap_content"
         android:layout_below="@id/keyguard_slice_view"
         android:visibility="gone">
-        <com.android.keyguard.AnimatableClockView
+        <com.android.systemui.shared.clocks.AnimatableClockView
             android:id="@+id/animatable_clock_view_large"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_pin_view.xml b/packages/SystemUI/res-keyguard/layout/keyguard_pin_view.xml
index 7ce6f0e..712f657 100644
--- a/packages/SystemUI/res-keyguard/layout/keyguard_pin_view.xml
+++ b/packages/SystemUI/res-keyguard/layout/keyguard_pin_view.xml
@@ -48,10 +48,11 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:paddingBottom="@dimen/num_pad_entry_row_margin_bottom"
+            androidprv:layout_constraintTop_toTopOf="parent"
             androidprv:layout_constraintEnd_toEndOf="parent"
             androidprv:layout_constraintStart_toStartOf="parent"
             androidprv:layout_constraintBottom_toTopOf="@id/key1"
-            androidprv:layout_constraintVertical_bias="0.0">
+            androidprv:layout_constraintVertical_bias="1.0">
 
             <com.android.keyguard.PasswordTextView
                 android:id="@+id/pinEntry"
diff --git a/packages/SystemUI/res-keyguard/values-af/strings.xml b/packages/SystemUI/res-keyguard/values-af/strings.xml
index 5184c1c..169ccaa 100644
--- a/packages/SystemUI/res-keyguard/values-af/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-af/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Jy het jou wagwoord <xliff:g id="NUMBER_0">%1$d</xliff:g> keer verkeerd ingetik. \n\nProbeer weer oor <xliff:g id="NUMBER_1">%2$d</xliff:g> sekondes."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Jy het jou ontsluitpatroon <xliff:g id="NUMBER_0">%1$d</xliff:g> keer verkeerd geteken. \n\nProbeer weer oor <xliff:g id="NUMBER_1">%2$d</xliff:g> sekondes."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Verkeerde SIM-PIN-kode. Jy sal nou jou diensverskaffer moet kontak om jou toestel te ontsluit."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">Verkeerde SIM-PIN-kode. Jy het <xliff:g id="NUMBER_1">%d</xliff:g> pogings oor.</item>
-      <item quantity="one">Verkeerde SIM-PIN-kode. Jy het <xliff:g id="NUMBER_0">%d</xliff:g> oorblywende poging voordat jy jou diensverskaffer sal moet kontak om jou toestel te ontsluit.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Verkeerde PIN-kode vir SIM. Jy het # poging oor voordat jy jou diensverskaffer moet kontak om jou toestel te ontsluit.}other{Verkeerde PIN-kode vir SIM. Jy het # pogings oor. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM is onbruikbaar. Kontak jou diensverskaffer."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">Verkeerde SIM-PUK-kode. Jy het <xliff:g id="NUMBER_1">%d</xliff:g> pogings oor voordat SIM permanent onbruikbaar word.</item>
-      <item quantity="one">Verkeerde SIM-PUK-kode. Jy het <xliff:g id="NUMBER_0">%d</xliff:g> poging oor voordat SIM permanent onbruikbaar word.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Verkeerde PUK-kode vir SIM. Jy het # poging oor voordat SIM permanent onbruikbaar word.}other{Verkeerde PUK-kode vir SIM. Jy het # pogings oor voordat SIM permanent onbruikbaar word.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"SIM-PIN-bewerking het misluk!"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Toestel is handmatig gesluit"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nie herken nie"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Skakel kameratoegang aan om Gesigslot te gebruik"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">Voer SIM-PIN in. Jy het <xliff:g id="NUMBER_1">%d</xliff:g> pogings oor.</item>
-      <item quantity="one">Voer SIM-PIN in. Jy het <xliff:g id="NUMBER_0">%d</xliff:g> poging oor voordat jy jou diensverskaffer moet kontak om jou toestel te ontsluit.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM is nou gedeaktiveer. Voer PUK-kode in om voort te gaan. Jy het <xliff:g id="_NUMBER_1">%d</xliff:g> pogings oor voordat die SIM permanent onbruikbaar word. Kontak die diensverskaffer vir besonderhede.</item>
-      <item quantity="one">SIM is nou gedeaktiveer. Voer PUK-kode in om voort te gaan. Jy het <xliff:g id="_NUMBER_0">%d</xliff:g> poging oor voordat die SIM permanent onbruikbaar word. Kontak die diensverskaffer vir besonderhede.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Voer SIM se PIN in. Jy het # poging oor voordat jy jou diensverskaffer moet kontak om jou toestel te ontsluit.}other{Voer SIM se PIN in. Jy het # pogings oor.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM is nou gedeaktiveer. Voer PUK-kode in om voort te gaan. Jy het # poging oor voordat die SIM permanent onbruikbaar word. Kontak die diensverskaffer vir besonderhede.}other{SIM is nou gedeaktiveer. Voer PUK-kode in om voort te gaan. Jy het # pogings oor voordat die SIM permanent onbruikbaar word. Kontak die diensverskaffer vir besonderhede.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Verstek"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Borrel"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analoog"</string>
diff --git a/packages/SystemUI/res-keyguard/values-am/strings.xml b/packages/SystemUI/res-keyguard/values-am/strings.xml
index 11a2be5..b528269 100644
--- a/packages/SystemUI/res-keyguard/values-am/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-am/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"የይለፍ ቃልዎን <xliff:g id="NUMBER_0">%1$d</xliff:g> ጊዜ ትክክል ባልሆነ መንገድ ተይበዋል።\n\nበ<xliff:g id="NUMBER_1">%2$d</xliff:g> ሰኮንዶች ውስጥ እንደገና ይሞክሩ።"</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"የመክፈቻ ስርዓተ ጥለቱን <xliff:g id="NUMBER_0">%1$d</xliff:g> ጊዜ ትክክል ባልሆነ መንገድ ስለውታል።\n\nበ<xliff:g id="NUMBER_1">%2$d</xliff:g> ሰኮንዶች ውስጥ እንደገና ይሞክሩ።"</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"ልክ ያልሆነ የሲም ፒን ኮድ። አሁን መሣሪያዎን ለማስከፈት አገልግሎት አቅራቢዎን ማነጋገር አለብዎት።"</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">ልክ ያልሆነ የሲም ፒን ኮድ፣ <xliff:g id="NUMBER_1">%d</xliff:g> ሙከራዎች ይቀረዎታል።</item>
-      <item quantity="other">ልክ ያልሆነ የሲም ፒን ኮድ፣ <xliff:g id="NUMBER_1">%d</xliff:g> ሙከራዎች ይቀረዎታል።</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{የተሳሳተ የሲም ፒን ኮድ፣ መሣሪያዎን ለማስከፈት የአገልግሎት አቅራቢዎን ማነጋገር ግዴታ ከመሆኑ በፊት # ሙከራ ይቀርዎታል።}one{የተሳሳተ የሲም ፒን ኮድ፣ # ሙከራዎች ይቀሩዎታል። }other{የተሳሳተ የሲም ፒን ኮድ፣ # ሙከራዎች ይቀሩዎታል። }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"ሲሙ ጥቅም ላይ መዋል እይችልም። የአገልግሎት አቅራቢዎን ያነጋግሩ።"</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">ልክ ያልሆነ የሲም ፒዩኬ ኮድ፣ ሲሙ እስከመጨረሻው የማይሰራ ከመሆኑ በፊት <xliff:g id="NUMBER_1">%d</xliff:g> ሙከራዎች ይቀረዎታል።</item>
-      <item quantity="other">ልክ ያልሆነ የሲም ፒዩኬ ኮድ፣ ሲሙ እስከመጨረሻው የማይሰራ ከመሆኑ በፊት <xliff:g id="NUMBER_1">%d</xliff:g> ሙከራዎች ይቀረዎታል።</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{የተሳሳተ የሲም PUK ኮድ፣ ሲም በቋሚነት መጠቀም የማይቻል ከመሆኑ በፊት # ሙከራ ይቀርዎታል።}one{የተሳሳተ የሲም PUK ኮድ፣ ሲም በቋሚነት መጠቀም የማይቻል ከመሆኑ በፊት # ሙከራ ይቀርዎታል።}other{የተሳሳተ የሲም PUK ኮድ፣ ሲም በቋሚነት መጠቀም የማይቻል ከመሆኑ በፊት # ሙከራዎች ይቀሩዎታል።}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"የሲም ፒን ክወና አልተሳካም!"</string>
     <string name="kg_password_puk_failed" msgid="6778867411556937118">"የሲም PUK ክወና አልተሳካም!"</string>
     <string name="accessibility_ime_switch_button" msgid="9082358310194861329">"የግቤት ስልት ቀይር"</string>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"መሣሪያ በተጠቃሚው ራሱ ተቆልፏል"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"አልታወቀም"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"በመልክ መክፈትን ለመጠቀም በቅንብሮች ውስጥ የካሜራ መዳረሻን ያብሩ"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">የሲም ፒን ያስገቡ። <xliff:g id="NUMBER_1">%d</xliff:g> ሙከራዎች ይቀረዎታል።</item>
-      <item quantity="other">የሲም ፒን ያስገቡ። <xliff:g id="NUMBER_1">%d</xliff:g> ሙከራዎች ይቀረዎታል።</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">ሲም አሁን ተሰናክሏል። ለመቀጠል የPUK ኮድ ያስገቡ። ሲም እስከመጨረሻው መጠቀም የማይቻል ከመሆኑ በፊት <xliff:g id="_NUMBER_1">%d</xliff:g> ሙከራዎች ይቀረዎታል። ዝርዝሮችን ለማግኘት የአገልግሎት አቅራቢን ያነጋግሩ።</item>
-      <item quantity="other">ሲም አሁን ተሰናክሏል። ለመቀጠል የPUK ኮድ ያስገቡ። ሲም እስከመጨረሻው መጠቀም የማይቻል ከመሆኑ በፊት <xliff:g id="_NUMBER_1">%d</xliff:g> ሙከራዎች ይቀረዎታል። ዝርዝሮችን ለማግኘት የአገልግሎት አቅራቢን ያነጋግሩ።</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{የሲም ፒን ያስገቡ። መሣሪያዎን ለማስከፈት የአገልግሎት አቅራቢዎን ማነጋገር ግዴታ ከመሆኑ በፊት # ሙከራ ይቀርዎታል።}one{የሲም ፒን ያስገቡ። # ቀሪ ሙከራዎች አሉዎት።}other{የሲም ፒን ያስገቡ። # ቀሪ ሙከራዎች አሉዎት።}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{ሲም አሁን ተሰናክሏል። ለመቀጠል የPUK ኮድ ያስገቡ። ሲም በቋሚነት መጠቀም የማይቻል ከመሆኑ በፊት # ሙከራ ይቀርዎታል። ዝርዝሮችን ለማግኘት የአገልግሎት አቅራቢን ያነጋግሩ።}one{ሲም አሁን ተሰናክሏል። ለመቀጠል የPUK ኮድ ያስገቡ። ሲም በቋሚነት መጠቀም የማይቻል ከመሆኑ በፊት # ሙከራዎች ይቀሩዎታል። ዝርዝሮችን ለማግኘት የአገልግሎት አቅራቢን ያነጋግሩ።}other{ሲም አሁን ተሰናክሏል። ለመቀጠል የPUK ኮድ ያስገቡ። ሲም በቋሚነት መጠቀም የማይቻል ከመሆኑ በፊት # ሙከራዎች ይቀሩዎታል። ዝርዝሮችን ለማግኘት የአገልግሎት አቅራቢን ያነጋግሩ።}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"ነባሪ"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"አረፋ"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"አናሎግ"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ar/strings.xml b/packages/SystemUI/res-keyguard/values-ar/strings.xml
index 5e3bc32..534dbaa 100644
--- a/packages/SystemUI/res-keyguard/values-ar/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ar/strings.xml
@@ -68,23 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"لقد كتبت كلمة المرور بشكل غير صحيح <xliff:g id="NUMBER_0">%1$d</xliff:g> مرة. \n\nأعد المحاولة خلال <xliff:g id="NUMBER_1">%2$d</xliff:g> ثانية."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"لقد رسمت نقش فتح القفل بطريقة غير صحيحة <xliff:g id="NUMBER_0">%1$d</xliff:g> مرة. \n\nأعد المحاولة خلال <xliff:g id="NUMBER_1">%2$d</xliff:g> ثانية."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"‏رمز \"رقم التعريف الشخصي\" لشريحة SIM غير صحيح، ويلزمك الاتصال الآن بمشغّل شبكة الجوّال لإلغاء قفل الجهاز."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="zero">‏رمز رقم التعريف الشخصي لشريحة SIM غير صحيح، ولم تتبق لديك أي محاولات (<xliff:g id="NUMBER_1">%d</xliff:g>).</item>
-      <item quantity="two">‏رمز رقم التعريف الشخصي لشريحة SIM غير صحيح، ويتبقى لديك محاولتان (<xliff:g id="NUMBER_1">%d</xliff:g>).</item>
-      <item quantity="few">‏رمز رقم التعريف الشخصي لشريحة SIM غير صحيح، ويتبقى لديك <xliff:g id="NUMBER_1">%d</xliff:g> محاولات.</item>
-      <item quantity="many">‏رمز رقم التعريف الشخصي لشريحة SIM غير صحيح، ويتبقى لديك <xliff:g id="NUMBER_1">%d</xliff:g> محاولة.</item>
-      <item quantity="other">‏رمز رقم التعريف الشخصي لشريحة SIM غير صحيح، ويتبقى لديك <xliff:g id="NUMBER_1">%d</xliff:g> محاولة.</item>
-      <item quantity="one">‏رمز \"رقم التعريف الشخصي\" لشريحة SIM غير صحيح، ويتبقى لديك محاولة واحدة (<xliff:g id="NUMBER_0">%d</xliff:g>) يتعين عليك بعدها الاتصال بمشغّل شبكة الجوّال لإلغاء قفل الجهاز.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{‏رقم التعريف الشخصي لشريحة SIM غير صحيح. تتبقّى لديك محاولة واحدة يجب بعدها الاتصال بمشغّل شبكة الجوّال لفتح قفل الجهاز.}zero{‏رمز رقم التعريف الشخصي لشريحة SIM غير صحيح. تتبقّى لديك # محاولة. }two{‏رمز رقم التعريف الشخصي لشريحة SIM غير صحيح. تتبقّى لديك محاولتان. }few{‏رمز رقم التعريف الشخصي لشريحة SIM غير صحيح. تتبقّى لديك # محاولات. }many{‏رمز رقم التعريف الشخصي لشريحة SIM غير صحيح. تتبقّى لديك # محاولة. }other{‏رمز رقم التعريف الشخصي لشريحة SIM غير صحيح. تتبقّى لديك # محاولة. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"‏شريحة SIM غير صالحة للاستخدام. يُرجى الاتصال بمشغّل شبكة الجوّال."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="zero">‏رمز PUK لشريحة SIM غير صحيح، ولم تتبق لديك أي محاولات (<xliff:g id="NUMBER_1">%d</xliff:g>) تصبح بعدها شريحة SIM غير صالحة للاستخدام بشكل دائم.</item>
-      <item quantity="two">‏رمز PUK لشريحة SIM غير صحيح، ويتبقى لديك محاولتان (<xliff:g id="NUMBER_1">%d</xliff:g>) تصبح بعدها شريحة SIM غير صالحة للاستخدام بشكل دائم.</item>
-      <item quantity="few">‏رمز PUK لشريحة SIM غير صحيح، ويتبقى لديك <xliff:g id="NUMBER_1">%d</xliff:g> محاولات تصبح بعدها شريحة SIM غير صالحة للاستخدام بشكل دائم.</item>
-      <item quantity="many">‏رمز PUK لشريحة SIM غير صحيح، ويتبقى لديك <xliff:g id="NUMBER_1">%d</xliff:g> محاولة تصبح بعدها شريحة SIM غير صالحة للاستخدام بشكل دائم.</item>
-      <item quantity="other">‏رمز PUK لشريحة SIM غير صحيح، ويتبقى لديك <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات تصبح بعدها شريحة SIM غير صالحة للاستخدام بشكل دائم.</item>
-      <item quantity="one">‏رمز PUK لشريحة SIM غير صالح، ويتبقى لديك محاولة واحدة (<xliff:g id="NUMBER_0">%d</xliff:g>)، تصبح بعدها شريحة SIM غير صالحة للاستخدام بشكل دائم.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{‏رمز PUK لشريحة SIM غير صحيح. تتبقّى لديك محاولة واحدة قبل أن تصبح شريحة SIM غير صالحة للاستخدام نهائيًا.}zero{‏رمز PUK لشريحة SIM غير صحيح. تتبقّى لديك # محاولة قبل أن تصبح شريحة SIM غير صالحة للاستخدام نهائيًا.}two{‏رمز PUK لشريحة SIM غير صحيح. تتبقّى لديك محاولتان قبل أن تصبح شريحة SIM غير صالحة للاستخدام نهائيًا.}few{‏رمز PUK لشريحة SIM غير صحيح. تتبقّى لديك # محاولات قبل أن تصبح شريحة SIM غير صالحة للاستخدام نهائيًا.}many{‏رمز PUK لشريحة SIM غير صحيح. تتبقّى لديك # محاولة قبل أن تصبح شريحة SIM غير صالحة للاستخدام نهائيًا.}other{‏رمز PUK لشريحة SIM غير صحيح. تتبقّى لديك # محاولة قبل أن تصبح شريحة SIM غير صالحة للاستخدام نهائيًا.}}"</string>
     <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>
@@ -99,22 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"تم حظر الجهاز يدويًا"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"لم يتم التعرّف عليه."</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"يجب منح الكاميرا إذن الوصول في \"الإعدادات\"."</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="zero">‏أدخل رقم التعريف الشخصي لشريحة SIM. تتبقى لديك <xliff:g id="NUMBER_1">%d</xliff:g> محاولة.</item>
-      <item quantity="two">‏أدخل رقم التعريف الشخصي لشريحة SIM. تتبقى لديك محاولتان (<xliff:g id="NUMBER_1">%d</xliff:g>).</item>
-      <item quantity="few">‏أدخل رقم التعريف الشخصي لشريحة SIM. تتبقى لديك <xliff:g id="NUMBER_1">%d</xliff:g> محاولات.</item>
-      <item quantity="many">‏أدخل رقم التعريف الشخصي لشريحة SIM. تتبقى لديك <xliff:g id="NUMBER_1">%d</xliff:g> محاولة.</item>
-      <item quantity="other">‏أدخل رقم التعريف الشخصي لشريحة SIM. تتبقى لديك <xliff:g id="NUMBER_1">%d</xliff:g> محاولة.</item>
-      <item quantity="one">‏أدخل رقم التعريف الشخصي لشريحة SIM. تتبقى لديك محاولة واحدة (<xliff:g id="NUMBER_0">%d</xliff:g>) يجب أن تتصل بعدها بمشغّل شبكة الجوّال لفتح الجهاز.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="zero">‏تم إيقاف شريحة SIM الآن. أدخل رمز PUK للمتابعة، وتتبقى لديك <xliff:g id="_NUMBER_1">%d</xliff:g> محاولة قبل أن تصبح شريحة SIM غير صالحة للاستخدام نهائيًا. ويمكنك الاتصال بمشغل شبكة الجوّال لمعرفة التفاصيل.</item>
-      <item quantity="two">‏تم إيقاف شريحة SIM الآن. أدخل رمز PUK للمتابعة، وتتبقى لديك محاولتان (<xliff:g id="_NUMBER_1">%d</xliff:g>) قبل أن تصبح شريحة SIM غير صالحة للاستخدام نهائيًا. ويمكنك الاتصال بمشغل شبكة الجوّال لمعرفة التفاصيل.</item>
-      <item quantity="few">‏تم إيقاف شريحة SIM الآن. أدخل رمز PUK للمتابعة، وتتبقى لديك <xliff:g id="_NUMBER_1">%d</xliff:g> محاولات قبل أن تصبح شريحة SIM غير صالحة للاستخدام نهائيًا. ويمكنك الاتصال بمشغل شبكة الجوّال لمعرفة التفاصيل.</item>
-      <item quantity="many">‏تم إيقاف شريحة SIM الآن. أدخل رمز PUK للمتابعة، وتتبقى لديك <xliff:g id="_NUMBER_1">%d</xliff:g> محاولة قبل أن تصبح شريحة SIM غير صالحة للاستخدام نهائيًا. ويمكنك الاتصال بمشغل شبكة الجوّال لمعرفة التفاصيل.</item>
-      <item quantity="other">‏تم إيقاف شريحة SIM الآن. أدخل رمز PUK للمتابعة، وتتبقى لديك <xliff:g id="_NUMBER_1">%d</xliff:g> محاولة قبل أن تصبح شريحة SIM غير صالحة للاستخدام نهائيًا. ويمكنك الاتصال بمشغل شبكة الجوّال لمعرفة التفاصيل.</item>
-      <item quantity="one">‏تم إيقاف شريحة SIM الآن. أدخل رمز PUK للمتابعة، وتتبقى لديك محاولة واحدة (<xliff:g id="_NUMBER_0">%d</xliff:g>) قبل أن تصبح شريحة SIM غير صالحة للاستخدام نهائيًا. ويمكنك الاتصال بمشغل شبكة الجوّال لمعرفة التفاصيل.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{‏أدخِل رقم التعريف الشخصي لشريحة SIM. تتبقّى لديك محاولة واحدة ويجب بعدها التواصل مع مشغّل شبكة الجوّال لفتح قفل الجهاز.}zero{‏أدخِل رقم التعريف الشخصي لشريحة SIM. تتبقّى لديك # محاولة.}two{‏أدخِل رقم التعريف الشخصي لشريحة SIM. تتبقّى لديك محاولتان.}few{‏أدخِل رقم التعريف الشخصي لشريحة SIM. تتبقّى لديك # محاولات.}many{‏أدخِل رقم التعريف الشخصي لشريحة SIM. تتبقّى لديك # محاولةً.}other{‏أدخِل رقم التعريف الشخصي لشريحة SIM. تتبقّى لديك # محاولة.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{‏تم إيقاف شريحة SIM الآن. يجب إدخال رمز PUK للمتابعة. وتتبقّى لديك محاولة واحدة قبل أن تصبح شريحة SIM غير صالحة للاستخدام نهائيًا. يمكنك التواصل مع مشغِّل شبكة الجوّال لمعرفة التفاصيل.}zero{‏تم إيقاف شريحة SIM الآن. يجب إدخال رمز PUK للمتابعة. وتتبقّى لديك # محاولة قبل أن تصبح شريحة SIM غير صالحة للاستخدام نهائيًا. يمكنك التواصل مع مشغِّل شبكة الجوّال لمعرفة التفاصيل.}two{‏تم إيقاف شريحة SIM الآن. يجب إدخال رمز PUK للمتابعة. وتتبقّى لديك محاولتان قبل أن تصبح شريحة SIM غير صالحة للاستخدام نهائيًا. يمكنك التواصل مع مشغِّل شبكة الجوّال لمعرفة التفاصيل.}few{‏تم إيقاف شريحة SIM الآن. يجب إدخال رمز PUK للمتابعة. وتتبقّى لديك # محاولات قبل أن تصبح شريحة SIM غير صالحة للاستخدام نهائيًا. يمكنك التواصل مع مشغِّل شبكة الجوّال لمعرفة التفاصيل.}many{‏تم إيقاف شريحة SIM الآن. يجب إدخال رمز PUK للمتابعة. وتتبقّى لديك # محاولةً قبل أن تصبح شريحة SIM غير صالحة للاستخدام نهائيًا. يمكنك التواصل مع مشغِّل شبكة الجوّال لمعرفة التفاصيل.}other{‏تم إيقاف شريحة SIM الآن. يجب إدخال رمز PUK للمتابعة. وتتبقّى لديك # محاولة قبل أن تصبح شريحة SIM غير صالحة للاستخدام نهائيًا. يمكنك التواصل مع مشغِّل شبكة الجوّال لمعرفة التفاصيل.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"تلقائي"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"فقاعة"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"ساعة تقليدية"</string>
diff --git a/packages/SystemUI/res-keyguard/values-as/strings.xml b/packages/SystemUI/res-keyguard/values-as/strings.xml
index d60c564..537b5b8 100644
--- a/packages/SystemUI/res-keyguard/values-as/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-as/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"আপুনি আপোনাৰ পাছৱৰ্ড <xliff:g id="NUMBER_0">%1$d</xliff:g>বাৰ ভুলকৈ লিখিছে। \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> ছেকেণ্ডৰ পাছত আকৌ চেষ্টা কৰক।"</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"আপুনি আপোনাৰ আনলক আৰ্হি <xliff:g id="NUMBER_0">%1$d</xliff:g> বাৰ ভুলকৈ আঁকিছে। \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g>ছেকেণ্ডৰ পিছত আকৌ চেষ্টা কৰক।"</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"ছিমৰ ভুল পিন ক\'ড, আপোনাৰ ডিভাইচটো আনলক কৰিবলৈ আপুনি এতিয়া আপোনাৰ বাহকৰ সৈতে যোগাযোগ কৰিবই লাগিব।"</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">ছিমৰ ভুল পিন ক’ড, আপুনি আৰু <xliff:g id="NUMBER_1">%d</xliff:g> বাৰ প্ৰয়াস কৰিব পাৰিব।</item>
-      <item quantity="other">ছিমৰ ভুল পিন ক’ড, আপুনি আৰু <xliff:g id="NUMBER_1">%d</xliff:g> বাৰ প্ৰয়াস কৰিব পাৰিব।</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{ছিমৰ পিন ক’ড ভুল হৈছে, আপোনাৰ ডিভাইচ আনলক কৰিবলৈ আপোনাৰ বাহকৰ লগত যোগাযোগ কৰিবই লগা হোৱাৰ পূৰ্বে আপোনাৰ ওচৰত # টা প্ৰয়াস বাকী আছে।}one{ছিমৰ পিন ক’ড ভুল হৈছে, আপোনাৰ ওচৰত # টা প্ৰয়াস বাকী আছে। }other{ছিমৰ পিন ক’ড ভুল হৈছে, আপোনাৰ ওচৰত # টা প্ৰয়াস বাকী আছে। }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"ছিম ব্যৱহাৰযোগ্য নহয়। আপোনাৰ বাহকৰ সৈতে যোগাযোগ কৰক।"</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">ছিমৰ ভুল PUK ক\'ড, আপুনি আৰু <xliff:g id="NUMBER_1">%d</xliff:g> বাৰ ভুল ক’ড দিলে আপোনাৰ ছিম চিৰকালৰ বাবে ব্যৱহাৰৰ অনুপযোগী হ’ব।</item>
-      <item quantity="other">ছিমৰ ভুল PUK ক\'ড, আপুনি আৰু <xliff:g id="NUMBER_1">%d</xliff:g> বাৰ ভুল ক’ড দিলে আপোনাৰ ছিম চিৰকালৰ বাবে ব্যৱহাৰৰ অনুপযোগী হ’ব।</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{ছিমৰ PUK ক’ড ভুল হৈছে, ছিমখন স্থায়ীভাৱে ব্যৱহাৰৰ অনুপযোগী হোৱাৰ পূৰ্বে আপোনাৰ ওচৰত # টা প্ৰয়াস বাকী আছে।}one{ছিমৰ PUK ক’ড ভুল হৈছে, ছিমখন স্থায়ীভাৱে ব্যৱহাৰৰ অনুপযোগী হোৱাৰ পূৰ্বে আপোনাৰ ওচৰত # টা প্ৰয়াস বাকী আছে।}other{ছিমৰ PUK ক’ড ভুল হৈছে, ছিমখন স্থায়ীভাৱে ব্যৱহাৰৰ অনুপযোগী হোৱাৰ পূৰ্বে আপোনাৰ ওচৰত # টা প্ৰয়াস বাকী আছে।}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"ছিম পিনৰ জৰিয়তে আনলক কৰিব পৰা নগ\'ল!"</string>
     <string name="kg_password_puk_failed" msgid="6778867411556937118">"ছিম PUKৰ জৰিয়তে আনলক কৰিব পৰা নগ\'ল!"</string>
     <string name="accessibility_ime_switch_button" msgid="9082358310194861329">"ইনপুট পদ্ধতি সলনি কৰক"</string>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"ডিভাইচটো মেনুৱেলভাৱে লক কৰা হৈছিল"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"চিনাক্ত কৰিব পৰা নাই"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"ফেচ আনলক ব্যৱহাৰ কৰিবলৈ ছেটিঙত কেমেৰাৰ এক্সেছ অন কৰক"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">ছিমৰ পিন দিয়ক। আপুনি আৰু <xliff:g id="NUMBER_1">%d</xliff:g>বাৰ প্ৰয়াস কৰিব পাৰে।</item>
-      <item quantity="other">ছিমৰ পিন দিয়ক। আপুনি আৰু <xliff:g id="NUMBER_1">%d</xliff:g>বাৰ প্ৰয়াস কৰিব পাৰে।</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">ছিমখন অক্ষম হ’ল। অব্যাহত ৰাখিবলৈ PUK দিয়ক। ছিমখন স্থায়ীভাৱে ব্যৱহাৰৰ অনুপযোগী হোৱাৰ পূৰ্বে আপোনাৰ হাতত <xliff:g id="_NUMBER_1">%d</xliff:g>টা প্ৰয়াস বাকী আছে। সবিশেষ জানিবলৈ বাহকৰ সৈতে যোগাযোগ কৰক।</item>
-      <item quantity="other">ছিমখন অক্ষম হ’ল। অব্যাহত ৰাখিবলৈ PUK দিয়ক। ছিমখন স্থায়ীভাৱে ব্যৱহাৰৰ অনুপযোগী হোৱাৰ পূৰ্বে আপোনাৰ হাতত <xliff:g id="_NUMBER_1">%d</xliff:g>টা প্ৰয়াস বাকী আছে। সবিশেষ জানিবলৈ বাহকৰ সৈতে যোগাযোগ কৰক।</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{ছিমৰ পিন দিয়ক। আপোনাৰ ডিভাইচ আনলক কৰিবলৈ আপোনাৰ বাহকৰ লগত যোগাযোগ কৰিবই লগা হোৱাৰ পূৰ্বে আপোনাৰ ওচৰত # টা প্ৰয়াস বাকী আছে।}one{ছিমৰ পিন দিয়ক। আপোনাৰ ওচৰত # টা প্ৰয়াস বাকী আছে।}other{ছিমৰ পিন দিয়ক। আপোনাৰ ওচৰত # টা প্ৰয়াস বাকী আছে।}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{ছিমখন এতিয়া অক্ষম কৰা হৈছে। অব্যাহত ৰাখিবলৈ PUK ক’ড দিয়ক। ছিমখন স্থায়ীভাৱে ব্যৱহাৰৰ অনুপযোগী হোৱাৰ পূৰ্বে আপোনাৰ ওচৰত # টা প্ৰয়াস বাকী আছে। সবিশেষৰ বাবে বাহকৰ সৈতে যোগাযোগ কৰক।}one{ছিমখন এতিয়া অক্ষম কৰা হৈছে। অব্যাহত ৰাখিবলৈ PUK ক’ড দিয়ক। ছিমখন স্থায়ীভাৱে ব্যৱহাৰৰ অনুপযোগী হোৱাৰ পূৰ্বে আপোনাৰ ওচৰত # টা প্ৰয়াস বাকী আছে। সবিশেষৰ বাবে বাহকৰ সৈতে যোগাযোগ কৰক।}other{ছিমখন এতিয়া অক্ষম কৰা হৈছে। অব্যাহত ৰাখিবলৈ PUK ক’ড দিয়ক। ছিমখন স্থায়ীভাৱে ব্যৱহাৰৰ অনুপযোগী হোৱাৰ পূৰ্বে আপোনাৰ ওচৰত # টা প্ৰয়াস বাকী আছে। সবিশেষৰ বাবে বাহকৰ সৈতে যোগাযোগ কৰক।}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"ডিফ’ল্ট"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"বাবল"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"এনাল’গ"</string>
diff --git a/packages/SystemUI/res-keyguard/values-az/strings.xml b/packages/SystemUI/res-keyguard/values-az/strings.xml
index fe35bbc..3fd2f04 100644
--- a/packages/SystemUI/res-keyguard/values-az/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-az/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Parolu <xliff:g id="NUMBER_0">%1$d</xliff:g> dəfə yanlış daxil etdiniz. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> saniyə sonra yenidən cəhd edin."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Kilid modelini <xliff:g id="NUMBER_0">%1$d</xliff:g> dəfə yanlış çəkdiniz. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> saniyə sonra yenidən cəhd edin."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Yanlış SIM PIN kodu  cihazın açılması üçün operatorla indi əlaqə saxlamalısınız."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">Yanlış SIM PIN kodu, <xliff:g id="NUMBER_1">%d</xliff:g> cəhdiniz qalır.</item>
-      <item quantity="one">Yanlış SIM PIN kodu, <xliff:g id="NUMBER_0">%d</xliff:g> cəhddən sonra cihazı kiliddən çıxarmaq üçün operatorla əlaqə saxlamalısınız.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Yanlış SIM PIN kodu, # cəhdiniz qalıb, sonra cihazı kiliddən çıxarmaq üçün operatorla əlaqə saxlamalı olacaqsınız.}other{Yanlış SIM PIN kodu, # cəhdiniz qalıb. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM yararsızdır. Operatorla əlaqə saxlayın."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">Yanlış SIM PUK kodu,<xliff:g id="NUMBER_1">%d</xliff:g> cəhddən sonra SIM kart həmişəlik yararsız olacaq.</item>
-      <item quantity="one">Yanlış SIM PUK kodu, <xliff:g id="NUMBER_0">%d</xliff:g> cəhddən sonra SIM kart həmişəlik yararsız olacaq.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Yanlış SIM PUK kodu, # cəhdiniz qalıb, sonra SIM kart həmişəlik yararsız olacaq.}other{Yanlış SIM PUK kodu, # cəhdiniz qalıb, sonra SIM kart həmişəlik yararsız olacaq.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"SIM PIN əməliyyatı alınmadı!"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Cihaz əl ilə kilidləndi"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Tanınmır"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Üz ilə Kiliddən Açmanı istifadə etmək üçün Ayarlarda kameraya girişi aktiv edin"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">SIM PIN-ni daxil edin. <xliff:g id="NUMBER_1">%d</xliff:g> cəhdiniz qalır.</item>
-      <item quantity="one">SIM PIN-ni daxil edin. Cihazınızı kiliddən çıxarmaq üçün operatorunuzla əlaqə saxlamadan öncə <xliff:g id="NUMBER_0">%d</xliff:g> cəhdiniz qalır.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM indi deaktivdir. Davam etmək üçün PUK kodunu daxil edin. SIM birdəfəlik yararsız olmadan öncə <xliff:g id="_NUMBER_1">%d</xliff:g> cəhdiniz qalır. Ətraflı məlumat üçün operatorla əlaqə saxlayın.</item>
-      <item quantity="one">SIM indi deaktivdir. Davam etmək üçün PUK kodunu daxil edin. SIM birdəfəlik yararsız olmadan öncə <xliff:g id="_NUMBER_0">%d</xliff:g> cəhdiniz qalır. Ətraflı məlumat üçün operatorla əlaqə saxlayın.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{SIM PIN kodunu daxil edin. # cəhdiniz qalıb, sonra cihazınızı kiliddən çıxarmaq üçün operatorunuzla əlaqə saxlamalı olacaqsınız.}other{SIM PIN kodunu daxil edin. # cəhdiniz qalıb.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM indi deaktivdir. Davam etmək üçün PUK kodunu daxil edin. # cəhdiniz qalıb, sonra SIM birdəfəlik yararsız olacaq. Ətraflı məlumat üçün operatorla əlaqə saxlayın.}other{SIM indi deaktivdir. Davam etmək üçün PUK kodunu daxil edin. # cəhdiniz qalıb, sonra SIM birdəfəlik yararsız olacaq. Ətraflı məlumat üçün operatorla əlaqə saxlayın.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Defolt"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Qabarcıq"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analoq"</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 5e83a15..b0059d8 100644
--- a/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml
@@ -68,17 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Uneli ste pogrešnu lozinku <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. \n\nProbajte ponovo za <xliff:g id="NUMBER_1">%2$d</xliff:g> sek."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Nacrtali ste netačan šablon za otključavanje <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. \n\nProbajte ponovo za <xliff:g id="NUMBER_1">%2$d</xliff:g> sek."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Netačan PIN kôd za SIM. Sada morate da kontaktirate mobilnog operatera da biste otključali uređaj."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">Netačan PIN kôd za SIM. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaj.</item>
-      <item quantity="few">Netačan PIN kôd za SIM. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja.</item>
-      <item quantity="other">Netačan PIN kôd za SIM. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Netačan PIN za SIM kôd. Imate još # pokušaj, a onda morate da se obratite mobilnom operateru da biste otključali uređaj.}one{Netačan PIN za SIM kôd. Imate još # pokušaj. }few{Netačan PIN za SIM kôd. Imate još # pokušaja. }other{Netačan PIN za SIM kôd. Imate još # pokušaja. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM kartica je neupotrebljiva. Kontaktirajte mobilnog operatera."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">Netačan PUK kôd za SIM. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaj pre nego što SIM kartica postane trajno neupotrebljiva.</item>
-      <item quantity="few">Netačan PUK kôd za SIM. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja pre nego što SIM kartica postane trajno neupotrebljiva.</item>
-      <item quantity="other">Netačan PUK kôd za SIM. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja pre nego što SIM kartica postane trajno neupotrebljiva.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Netačan SIM PUK kôd. Imate još # pokušaj pre nego što SIM kartica postane trajno neupotrebljiva.}one{Netačan PUK kôd za SIM. Imate još # pokušaj pre nego što SIM kartica postane trajno neupotrebljiva.}few{Netačan PUK kôd za SIM. Imate još # pokušaja pre nego što SIM kartica postane trajno neupotrebljiva.}other{Netačan PUK kôd za SIM. Imate još # pokušaja pre nego što SIM kartica postane trajno neupotrebljiva.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Radnja sa PIN kodom za SIM nije uspela!"</string>
     <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>
@@ -93,16 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Uređaj je ručno zaključan"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nije prepoznat"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Otključavanje licem traži pristup kameri u Podešavanjima"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">Unesite PIN za SIM. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaj.</item>
-      <item quantity="few">Unesite PIN za SIM. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja.</item>
-      <item quantity="other">Unesite PIN za SIM. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">SIM je sada onemogućen. Unesite PUK kôd da biste nastavili. Imate još <xliff:g id="_NUMBER_1">%d</xliff:g> pokušaj pre nego što SIM postane trajno neupotrebljiv. Detaljne informacije potražite od mobilnog operatera.</item>
-      <item quantity="few">SIM je sada onemogućen. Unesite PUK kôd da biste nastavili. Imate još <xliff:g id="_NUMBER_1">%d</xliff:g> pokušaja pre nego što SIM postane trajno neupotrebljiv. Detaljne informacije potražite od mobilnog operatera.</item>
-      <item quantity="other">SIM je sada onemogućen. Unesite PUK kôd da biste nastavili. Imate još <xliff:g id="_NUMBER_1">%d</xliff:g> pokušaja pre nego što SIM postane trajno neupotrebljiv. Detaljne informacije potražite od mobilnog operatera.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Unesite PIN za SIM. Još # pokušaj i moraćete da se obratite mobilnom operateru da biste otključali uređaj.}one{Unesite PIN za SIM. Imate još # pokušaj.}few{Unesite PIN za SIM. Imate još # pokušaja.}other{Unesite PIN za SIM. Imate još # pokušaja.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM je sada onemogućen. Unesite PUK kôd da biste nastavili. Imate još # pokušaj pre nego što SIM postane trajno neupotrebljiv. Detaljne informacije potražite od mobilnog operatera.}one{SIM je sada onemogućen. Unesite PUK kôd da biste nastavili. Imate još # pokušaj pre nego što SIM postane trajno neupotrebljiv. Detaljne informacije potražite od mobilnog operatera.}few{SIM je sada onemogućen. Unesite PUK kôd da biste nastavili. Imate još # pokušaja pre nego što SIM postane trajno neupotrebljiv. Detaljne informacije potražite od mobilnog operatera.}other{SIM je sada onemogućen. Unesite PUK kôd da biste nastavili. Imate još # pokušaja pre nego što SIM postane trajno neupotrebljiv. Detaljne informacije potražite od mobilnog operatera.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Podrazumevani"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Mehurići"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogni"</string>
diff --git a/packages/SystemUI/res-keyguard/values-be/strings.xml b/packages/SystemUI/res-keyguard/values-be/strings.xml
index 0e6681c..ebcca07 100644
--- a/packages/SystemUI/res-keyguard/values-be/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-be/strings.xml
@@ -68,19 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Вы няправільна ўвялі пароль столькі разоў: <xliff:g id="NUMBER_0">%1$d</xliff:g>. \n\nПаўтарыце спробу праз <xliff:g id="NUMBER_1">%2$d</xliff:g> с."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Вы няправільна ўвялі ўзор разблакіроўкі столькі разоў: <xliff:g id="NUMBER_0">%1$d</xliff:g>. \n\nПаўтарыце спробу праз <xliff:g id="NUMBER_1">%2$d</xliff:g> с."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Няправільны PIN-код SIM-карты, цяпер вы павінны звязацца з аператарам для разблакіроўкі прылады."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">Няправільны PIN-код SIM-карты, у вас засталася <xliff:g id="NUMBER_1">%d</xliff:g> спроба.</item>
-      <item quantity="few">Няправільны PIN-код SIM-карты, у вас засталіся <xliff:g id="NUMBER_1">%d</xliff:g> спробы.</item>
-      <item quantity="many">Няправільны PIN-код SIM-карты, у вас засталіся <xliff:g id="NUMBER_1">%d</xliff:g> спроб.</item>
-      <item quantity="other">Няправільны PIN-код SIM-карты, у вас засталіся <xliff:g id="NUMBER_1">%d</xliff:g> спробы.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Няправільны PIN-код SIM-карты. У вас засталася # спроба, інакш вам прыйдзецца звязацца з аператарам для разблакіроўкі прылады.}one{Няправільны PIN-код SIM-карты, у вас засталіся # спроба. }few{Няправільны PIN-код SIM-карты, у вас засталіся # спробы. }many{Няправільны PIN-код SIM-карты, у вас засталіся # спроб. }other{Няправільны PIN-код SIM-карты, у вас засталіся # спробы. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM-карта не прыдатная для выкарыстання. Звяжыцеся з аператарам."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">Няправільны PUK-код SIM-карты, у вас засталася <xliff:g id="NUMBER_1">%d</xliff:g> спроба перад тым, як SIM-карта перастане працаваць назаўжды.</item>
-      <item quantity="few">Няправільны PUK-код SIM-карты, у вас засталіся <xliff:g id="NUMBER_1">%d</xliff:g> спробы перад тым, як SIM-карта перастане працаваць назаўжды.</item>
-      <item quantity="many">Няправільны PUK-код SIM-карты, у вас засталіся <xliff:g id="NUMBER_1">%d</xliff:g> спроб перад тым, як SIM-карта перастане працаваць назаўжды.</item>
-      <item quantity="other">Няправільны PUK-код SIM-карты, у вас засталіся <xliff:g id="NUMBER_1">%d</xliff:g> спробы перад тым, як SIM-карта перастане працаваць назаўжды.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Няправільны PUK-код SIM-карты, у вас засталася # спроба перад тым, як SIM-карта перастане працаваць назаўжды.}one{Няправільны PUK-код SIM-карты, у вас засталося # спроба перад тым, як SIM-карта перастане працаваць назаўжды.}few{Няправільны PUK-код SIM-карты, у вас засталося # спробы перад тым, як SIM-карта перастане працаваць назаўжды.}many{Няправільны PUK-код SIM-карты, у вас засталося # спроб перад тым, як SIM-карта перастане працаваць назаўжды.}other{Няправільны PUK-код SIM-карты, у вас засталося # спробы перад тым, як SIM-карта перастане працаваць назаўжды.}}"</string>
     <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>
@@ -95,18 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Прылада была заблакіравана ўручную"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Не распазнана"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Для распазнавання твару ўключыце доступ да камеры"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">Увядзіце PIN-код SIM-карты. У вас засталася <xliff:g id="NUMBER_1">%d</xliff:g> спроба.</item>
-      <item quantity="few">Увядзіце PIN-код SIM-карты. У вас засталося <xliff:g id="NUMBER_1">%d</xliff:g> спробы.</item>
-      <item quantity="many">Увядзіце PIN-код SIM-карты. У вас засталося <xliff:g id="NUMBER_1">%d</xliff:g> спроб.</item>
-      <item quantity="other">Увядзіце PIN-код SIM-карты. У вас засталося <xliff:g id="NUMBER_1">%d</xliff:g> спробы.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">SIM-карта заблакіравана. Каб працягнуць, увядзіце PUK-код. У вас ёсць яшчэ <xliff:g id="_NUMBER_1">%d</xliff:g> спроба, пасля чаго SIM-карта будзе заблакіравана назаўсёды. Звярніцеся да аператара, каб даведацца больш.</item>
-      <item quantity="few">SIM-карта заблакіравана. Каб працягнуць, увядзіце PUK-код. У вас ёсць яшчэ <xliff:g id="_NUMBER_1">%d</xliff:g> спробы, пасля чаго SIM-карта будзе заблакіравана назаўсёды. Звярніцеся да аператара, каб даведацца больш.</item>
-      <item quantity="many">SIM-карта заблакіравана. Каб працягнуць, увядзіце PUK-код. У вас ёсць яшчэ <xliff:g id="_NUMBER_1">%d</xliff:g> спроб, пасля чаго SIM-карта будзе заблакіравана назаўсёды. Звярніцеся да аператара, каб даведацца больш.</item>
-      <item quantity="other">SIM-карта заблакіравана. Каб працягнуць, увядзіце PUK-код. У вас ёсць яшчэ <xliff:g id="_NUMBER_1">%d</xliff:g> спробы, пасля чаго SIM-карта будзе заблакіравана назаўсёды. Звярніцеся да аператара, каб даведацца больш.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Увядзіце PIN-код SIM-карты. У вас засталася # спроба. Пасля гэтага вам давядзецца звярнуцца да свайго аператара, каб разблакіраваць прыладу.}one{Увядзіце PIN-код SIM-карты. У вас засталося # спроба.}few{Увядзіце PIN-код SIM-карты. У вас засталося # спробы.}many{Увядзіце PIN-код SIM-карты. У вас засталося # спроб.}other{Увядзіце PIN-код SIM-карты. У вас засталося # спробы.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM-карта заблакіравана. Каб працягнуць, увядзіце PUK-код. У вас ёсць яшчэ # спроба, пасля чаго SIM-карта будзе заблакіравана назаўсёды. Звярніцеся да аператара, каб даведацца больш.}one{SIM-карта заблакіравана. Каб працягнуць, увядзіце PUK-код. У вас ёсць яшчэ # спроба, пасля чаго SIM-карта будзе заблакіравана назаўсёды. Звярніцеся да аператара, каб даведацца больш.}few{SIM-карта заблакіравана. Каб працягнуць, увядзіце PUK-код. У вас ёсць яшчэ # спробы, пасля чаго SIM-карта будзе заблакіравана назаўсёды. Звярніцеся да аператара, каб даведацца больш.}many{SIM-карта заблакіравана. Каб працягнуць, увядзіце PUK-код. У вас ёсць яшчэ # спроб, пасля чаго SIM-карта будзе заблакіравана назаўсёды. Звярніцеся да аператара, каб даведацца больш.}other{SIM-карта заблакіравана. Каб працягнуць, увядзіце PUK-код. У вас ёсць яшчэ # спробы, пасля чаго SIM-карта будзе заблакіравана назаўсёды. Звярніцеся да аператара, каб даведацца больш.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Стандартны"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Бурбалкі"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Са стрэлкамі"</string>
diff --git a/packages/SystemUI/res-keyguard/values-bg/strings.xml b/packages/SystemUI/res-keyguard/values-bg/strings.xml
index a4e08f3..a08409e 100644
--- a/packages/SystemUI/res-keyguard/values-bg/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-bg/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Въведохте неправилно паролата си <xliff:g id="NUMBER_0">%1$d</xliff:g> пъти. \n\nОпитайте отново след <xliff:g id="NUMBER_1">%2$d</xliff:g> секунди."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Начертахте неправилно фигурата си за отключване <xliff:g id="NUMBER_0">%1$d</xliff:g> пъти. \n\nОпитайте отново след <xliff:g id="NUMBER_1">%2$d</xliff:g> секунди."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Неправилен ПИН код за SIM картата – сега трябва да се свържете с оператора си, за да отключите устройството."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">Неправилен ПИН код за SIM картата – остават ви <xliff:g id="NUMBER_1">%d</xliff:g> опита.</item>
-      <item quantity="one">Неправилен ПИН код за SIM картата – остава ви <xliff:g id="NUMBER_0">%d</xliff:g> опит, преди да трябва да се свържете с оператора си, за да отключите устройството.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Неправилен ПИН код за SIM картата. Остава ви # опит, преди да трябва да се свържете с оператора си, за да отключите устройството.}other{Неправилен ПИН код за SIM картата. Остават ви # опита. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM картата е неизползваема. Свържете се с оператора си."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">Неправилен PUK код за SIM картата – остават ви <xliff:g id="NUMBER_1">%d</xliff:g> опита, преди тя да стане неизползваема завинаги.</item>
-      <item quantity="one">Неправилен PUK код за SIM картата – остава ви <xliff:g id="NUMBER_0">%d</xliff:g> опит, преди тя да стане неизползваема завинаги.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Неправилен PUK код за SIM картата. Остава ви # опит, преди тя да стане неизползваема завинаги.}other{Неправилен PUK код за SIM картата. Остават ви # опита, преди тя да стане неизползваема завинаги.}}"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Устройството бе заключено ръчно"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Не е разпознато"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"За да ползвате „Отключване с лице“, вкл. достъпа до камерата от настройките"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">Въведете ПИН кода за SIM картата – остават ви <xliff:g id="NUMBER_1">%d</xliff:g> опита.</item>
-      <item quantity="one">Въведете ПИН кода за SIM картата – остава ви <xliff:g id="NUMBER_0">%d</xliff:g> опит, преди да се наложи да се свържете с оператора си, за да отключите устройството.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM картата вече е деактивирана. Въведете PUK кода, за да продължите. Остават ви <xliff:g id="_NUMBER_1">%d</xliff:g> опита, преди SIM картата да стане неизползваема завинаги. Свържете се с оператора за подробности.</item>
-      <item quantity="one">SIM картата вече е деактивирана. Въведете PUK кода, за да продължите. Остава ви <xliff:g id="_NUMBER_0">%d</xliff:g> опит, преди SIM картата да стане неизползваема завинаги. Свържете се с оператора за подробности.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Въведете ПИН кода за SIM картата. Остава ви # опит, преди да трябва да се свържете с оператора си, за да отключите устройството.}other{Въведете ПИН кода за SIM картата. Остават ви # опита.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM картата вече е деактивирана. Въведете PUK кода, за да продължите. Остава ви # опит, преди SIM картата да стане неизползваема завинаги. Свържете се с оператора за подробности.}other{SIM картата вече е деактивирана. Въведете PUK кода, за да продължите. Остават ви # опита, преди SIM картата да стане неизползваема завинаги. Свържете се с оператора за подробности.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Стандартен"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Балонен"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Аналогов"</string>
diff --git a/packages/SystemUI/res-keyguard/values-bn/strings.xml b/packages/SystemUI/res-keyguard/values-bn/strings.xml
index bbc025fe..cb9e900 100644
--- a/packages/SystemUI/res-keyguard/values-bn/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-bn/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"আপনি <xliff:g id="NUMBER_0">%1$d</xliff:g> বার ভুলভাবে আপনার পাসওয়ার্ড লিখেছেন।\n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> সেকেন্ডের মধ্যে আবার চেষ্টা করুন।"</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"আপনি <xliff:g id="NUMBER_0">%1$d</xliff:g> বার ভুলভাবে আপনার আনলকের প্যাটার্ন এঁকেছেন।\n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> সেকেন্ডের মধ্যে আবার চেষ্টা করুন।"</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"ভুল সিম পিন কোড দিয়েছেন, আপনার ডিভাইসটি আনলক করতে এখন আপনাকে অবশ্যই আপনার পরিষেবা প্রদানকারীর সাথে যোগাযোগ করতে হবে।"</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">সিমের পিন কোডটি ভুল, আপনি আর <xliff:g id="NUMBER_1">%d</xliff:g> বার চেষ্টা করতে পারেন।</item>
-      <item quantity="other">সিমের পিন কোডটি ভুল, আপনি আর <xliff:g id="NUMBER_1">%d</xliff:g> বার চেষ্টা করতে পারেন।</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{সিম কার্ডের ভুল পিন কোড দিয়েছেন, আপনি আরও # বার চেষ্টা করতে পারবেন, তারপরে ডিভাইস আনলক করতে পরিষেবা প্রদানকারীর সাথে যোগাযোগ করতে হবে।}one{সিম কার্ডের ভুল পিন কোড দিয়েছেন, আপনি আরও # বার চেষ্টা করতে পারবেন। }other{সিম কার্ডের ভুল পিন কোড দিয়েছেন, আপনি আরও # বার চেষ্টা করতে পারবেন। }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"সিমটি ব্যবহার করা যাবে না। আপনার পরিষেবা প্রদানকারীর সাথে যোগাযোগ করুন।"</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">সিমের PUK কোডটি ভুল, আপনি আর <xliff:g id="NUMBER_1">%d</xliff:g> বার চেষ্টা করতে পারেন, তারপর আপনার সিমটি স্থায়ীভাবে অব্যবহারযোগ্য হবে।</item>
-      <item quantity="other">সিমের PUK কোডটি ভুল, আপনি আর <xliff:g id="NUMBER_1">%d</xliff:g> বার চেষ্টা করতে পারেন, তারপর আপনার সিমটি স্থায়ীভাবে অব্যবহারযোগ্য হবে।</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{সিম কার্ডের ভুল PUK কোড দিয়েছেন, আপনি আরও # বার চেষ্টা করতে পারবেন, তারপরে এই সিম কার্ডটি স্থায়ীভাবে কাজ করা বন্ধ করে দেবে।}one{সিম কার্ডের ভুল PUK কোড দিয়েছেন, আপনি আরও # বার চেষ্টা করতে পারবেন, তারপরে এই সিম কার্ডটি স্থায়ীভাবে কাজ করা বন্ধ করে দেবে।}other{সিম কার্ডের ভুল PUK কোড দিয়েছেন, আপনি আরও # বার চেষ্টা করতে পারবেন, তারপরে এই সিম কার্ডটি স্থায়ীভাবে কাজ করা বন্ধ করে দেবে।}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"সিম পিন দিয়ে আনলক করা যায়নি!"</string>
     <string name="kg_password_puk_failed" msgid="6778867411556937118">"সিম PUK দিয়ে আনলক করা যায়নি!"</string>
     <string name="accessibility_ime_switch_button" msgid="9082358310194861329">"ইনপুট পদ্ধতি পরিবর্তন করুন"</string>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"ডিভাইসটিকে ম্যানুয়ালি লক করা হয়েছে"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"শনাক্ত করা যায়নি"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"\'ফেস আনলক\' ফিচার ব্যবহার করতে, \'সেটিংস\' থেকে ক্যামেরার অ্যাক্সেস চালু করুন"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">সিমের পিন লিখুন। আপনি আর <xliff:g id="NUMBER_1">%d</xliff:g> বার চেষ্টা করতে পারবেন।</item>
-      <item quantity="other">সিমের পিন লিখুন। আপনি আর <xliff:g id="NUMBER_1">%d</xliff:g> বার চেষ্টা করতে পারবেন।</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">সিম অক্ষম করা হয়েছে। চালিয়ে যেতে PUK কোড লিখুন। আপনি আর <xliff:g id="_NUMBER_1">%d</xliff:g> বার চেষ্টা করতে পারবেন, তারপরে এই সিমটি আর একেবারেই ব্যবহার করা যাবে না। বিশদে জানতে পরিষেবা প্রদানকারীর সাথে যোগাযোগ করুন।</item>
-      <item quantity="other">সিম অক্ষম করা হয়েছে। চালিয়ে যেতে PUK কোড লিখুন। আপনি আর <xliff:g id="_NUMBER_1">%d</xliff:g> বার চেষ্টা করতে পারবেন, তারপরে এই সিমটি আর একেবারেই ব্যবহার করা যাবে না। বিশদে জানতে পরিষেবা প্রদানকারীর সাথে যোগাযোগ করুন।</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{সিম কার্ডের পিন লিখুন। আপনি আরও # বার চেষ্টা করতে পারবেন, তারপরে ডিভাইস আনলক করতে পরিষেবা প্রদানকারীর সাথে যোগাযোগ করতে হবে।}one{সিম কার্ডের পিন লিখুন। আপনি আরও # বার চেষ্টা করতে পারবেন।}other{সিম কার্ডের পিন লিখুন। আপনি আরও # বার চেষ্টা করতে পারবেন।}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{সিম কার্ডটি এখন বন্ধ করা হয়েছে। চালিয়ে যেতে PUK কোড লিখুন। আপনি আরও # বার চেষ্টা করতে পারবেন, তারপরে এই সিম কার্ডটি স্থায়ীভাবে কাজ করা বন্ধ করে দেবে। বিশদ বিবরণের জন্য পরিষেবা প্রদানকারীর সাথে যোগাযোগ করুন।}one{সিম কার্ডটি এখন বন্ধ করা হয়েছে। চালিয়ে যেতে PUK কোড লিখুন। আপনি আরও # বার চেষ্টা করতে পারবেন, তারপরে এই সিম কার্ডটি স্থায়ীভাবে কাজ করা বন্ধ করে দেবে। বিশদ বিবরণের জন্য পরিষেবা প্রদানকারীর সাথে যোগাযোগ করুন।}other{সিম কার্ডটি এখন বন্ধ করা হয়েছে। চালিয়ে যেতে PUK কোড লিখুন। আপনি আরও # বার চেষ্টা করতে পারবেন, তারপরে এই সিম কার্ডটি স্থায়ীভাবে কাজ করা বন্ধ করে দেবে। বিশদ বিবরণের জন্য পরিষেবা প্রদানকারীর সাথে যোগাযোগ করুন।}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"ডিফল্ট"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"বাবল"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"অ্যানালগ"</string>
diff --git a/packages/SystemUI/res-keyguard/values-bs/strings.xml b/packages/SystemUI/res-keyguard/values-bs/strings.xml
index e0bec84..280d354 100644
--- a/packages/SystemUI/res-keyguard/values-bs/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-bs/strings.xml
@@ -68,17 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Pogrešno ste unijeli lozinku <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. \n\nPokušajte ponovo za <xliff:g id="NUMBER_1">%2$d</xliff:g> s."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Pogrešno ste nacrtali svoj uzorak za otključavanje <xliff:g id="NUMBER_0">%1$d</xliff:g> puta. \n\nPokušajte ponovo za <xliff:g id="NUMBER_1">%2$d</xliff:g> s."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"PIN za SIM karticu je netačan. Za otključavanje uređaja sada se morate obratiti svom operateru."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">PIN za SIM karticu je netačan. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaj.</item>
-      <item quantity="few">PIN za SIM karticu je netačan. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja.</item>
-      <item quantity="other">PIN za SIM karticu je netačan. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{PIN kôd za SIM je netačan. Imate još # pokušaj prije nego što budete morali kontaktirati mobilnog operatera da vam otključa uređaj.}one{PIN kôd za SIM je netačan. Imate još # pokušaj. }few{PIN kôd za SIM je netačan. Imate još # pokušaja. }other{PIN kôd za SIM je netačan. Imate još # pokušaja. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM kartica je neupotrebljiva. Obratite se svom operateru."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">PUK kôd za SIM karticu je netačan. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaj prije nego što SIM kartica postane trajno neupotrebljiva.</item>
-      <item quantity="few">PUK kôd za SIM karticu je netačan. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja prije nego što SIM kartica postane trajno neupotrebljiva.</item>
-      <item quantity="other">PUK kôd za SIM karticu je netačan. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja prije nego što SIM kartica postane trajno neupotrebljiva.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{PUK kôd za SIM karticu je netačan. Imate još # pokušaj prije nego što SIM postane trajno neupotrebljiv.}one{PUK kôd za SIM karticu je netačan. Imate još # pokušaj prije nego što SIM postane trajno neupotrebljiv.}few{PUK kôd za SIM karticu je netačan. Imate još # pokušaja prije nego što SIM postane trajno neupotrebljiv.}other{PUK kôd za SIM karticu je netačan. Imate još # pokušaja prije nego što SIM postane trajno neupotrebljiv.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Korištenje PIN-a za SIM karticu nije uspjelo!"</string>
     <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>
@@ -93,16 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Uređaj je ručno zaključan"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nije prepoznato"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Za otključavanje licem uključite pristup kameri"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">Unesite PIN za SIM. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaj.</item>
-      <item quantity="few">Unesite PIN za SIM. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja.</item>
-      <item quantity="other">Unesite PIN za SIM. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">SIM kartica je onemogućena. Unesite PUK kôd da nastavite. Imate još <xliff:g id="_NUMBER_1">%d</xliff:g> pokušaj prije nego što SIM kartica postane trajno neupotrebljiva. Za više informacija kontaktirajte mobilnog operatera.</item>
-      <item quantity="few">SIM kartica je onemogućena. Unesite PUK kôd da nastavite. Imate još <xliff:g id="_NUMBER_1">%d</xliff:g> pokušaja prije nego što SIM kartica postane trajno neupotrebljiva. Za više informacija kontaktirajte mobilnog operatera.</item>
-      <item quantity="other">SIM kartica je onemogućena. Unesite PUK kôd da nastavite. Imate još <xliff:g id="_NUMBER_1">%d</xliff:g> pokušaja prije nego što SIM kartica postane trajno neupotrebljiva. Za više informacija kontaktirajte mobilnog operatera.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Unesite PIN za SIM. Imate još # pokušaj prije nego što budete morali kontaktirati mobilnog operatera da vam otključa uređaj.}one{Unesite PIN za SIM. Imate još # pokušaj.}few{Unesite PIN za SIM. Imate još # pokušaja.}other{Unesite PIN za SIM. Imate još # pokušaja.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM je sada onemogućen. Unesite PUK kôd da nastavite. Imate još # pokušaj prije nego što SIM postane trajno neupotrebljiv. Za više informacija kontaktirajte mobilnog operatera.}one{SIM je sada onemogućen. Unesite PUK kôd da nastavite. Imate još # pokušaja prije nego što SIM postane trajno neupotrebljiv. Za više informacija kontaktirajte mobilnog operatera.}few{SIM je sada onemogućen. Unesite PUK kôd da nastavite. Imate još # pokušaja prije nego što SIM postane trajno neupotrebljiv. Za više informacija kontaktirajte mobilnog operatera.}other{SIM je sada onemogućen. Unesite PUK kôd da nastavite. Imate još # pokušaja prije nego što SIM postane trajno neupotrebljiv. Za više informacija kontaktirajte mobilnog operatera.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Zadano"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Mjehurići"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogni"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ca/strings.xml b/packages/SystemUI/res-keyguard/values-ca/strings.xml
index 1e30e78..b1f5a3f 100644
--- a/packages/SystemUI/res-keyguard/values-ca/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ca/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Has escrit la contrasenya <xliff:g id="NUMBER_0">%1$d</xliff:g> vegades de manera incorrecta. \n\nTorna-ho a provar d\'aquí a <xliff:g id="NUMBER_1">%2$d</xliff:g> segons."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Has dibuixat el patró de desbloqueig <xliff:g id="NUMBER_0">%1$d</xliff:g> vegades de manera incorrecta. \n\nTorna-ho a provar d\'aquí a <xliff:g id="NUMBER_1">%2$d</xliff:g> segons."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"El codi PIN de la SIM no és correcte. Contacta amb l\'operador de telefonia mòbil per desbloquejar el dispositiu."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">El codi PIN de la SIM no és correcte. Et queden <xliff:g id="NUMBER_1">%d</xliff:g> intents.</item>
-      <item quantity="one">El codi PIN de la SIM no és correcte. Et queda <xliff:g id="NUMBER_0">%d</xliff:g> intent; si no l\'encertes, contacta amb l\'operador de telefonia mòbil per desbloquejar el dispositiu.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{El codi PIN de la SIM no és correcte. Et queda # intent; si no l\'encertes, contacta amb l\'operador per desbloquejar el dispositiu.}other{El codi PIN de la SIM no és correcte. Et queden # intents. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"La SIM no es pot fer servir. Contacta amb l\'operador de telefonia mòbil."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">El codi PUK de la SIM no és correcte. Et queden <xliff:g id="NUMBER_1">%d</xliff:g> intents; si els esgotes tots, la SIM no es podrà tornar a fer servir.</item>
-      <item quantity="one">El codi PUK de la SIM no és correcte. Et queda <xliff:g id="NUMBER_0">%d</xliff:g> intent; si no l\'encertes, la SIM no es podrà tornar a fer servir.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{El codi PUK de la SIM no és correcte. Et queda # intent; si no l\'encertes, la SIM no es podrà tornar a fer servir.}other{El codi PUK de la SIM no és correcte. Et queden # intents; si no l\'encertes, la SIM no es podrà tornar a fer servir.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Ha fallat l\'operació del PIN de la SIM"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"El dispositiu s\'ha bloquejat manualment"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"No s\'ha reconegut"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Desbloqueig facial necessita accés a la càmera"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">Introdueix el PIN de la SIM. Et queden <xliff:g id="NUMBER_1">%d</xliff:g> intents.</item>
-      <item quantity="one">Introdueix el PIN de la SIM. Et queda <xliff:g id="NUMBER_0">%d</xliff:g> intent; si no l\'encertes, contacta amb l\'operador de telefonia mòbil per desbloquejar el dispositiu.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">La targeta SIM s\'ha desactivat. Introdueix el codi PUK per continuar. Et queden <xliff:g id="_NUMBER_1">%d</xliff:g> intents; si no l\'encertes, la SIM no es podrà tornar a fer servir. Contacta amb l\'operador de telefonia mòbil per obtenir-ne més informació.</item>
-      <item quantity="one">La targeta SIM s\'ha desactivat. Introdueix el codi PUK per continuar. Et queda <xliff:g id="_NUMBER_0">%d</xliff:g> intent; si no l\'encertes, la SIM no es podrà tornar a fer servir. Contacta amb l\'operador de telefonia mòbil per obtenir-ne més informació.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Introdueix el PIN de la SIM. Et queda # intent; si no l\'encertes, contacta amb l\'operador per desbloquejar el dispositiu.}other{Introdueix el PIN de la SIM. Et queden # intents.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{La targeta SIM s\'ha desactivat. Introdueix el codi PUK per continuar. Et queda # intent; si no l\'encertes, la SIM no es podrà tornar a fer servir. Contacta amb l\'operador per obtenir informació.}other{La targeta SIM s\'ha desactivat. Introdueix el codi PUK per continuar. Et queden # intents; si no l\'encertes, la SIM no es podrà tornar a fer servir. Contacta amb l\'operador per obtenir informació.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Predeterminada"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bombolla"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analògica"</string>
diff --git a/packages/SystemUI/res-keyguard/values-cs/strings.xml b/packages/SystemUI/res-keyguard/values-cs/strings.xml
index 3c37bba..1b52635 100644
--- a/packages/SystemUI/res-keyguard/values-cs/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-cs/strings.xml
@@ -68,19 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Již <xliff:g id="NUMBER_0">%1$d</xliff:g>krát jste nesprávně zadali heslo. \n\nZkuste to znovu za <xliff:g id="NUMBER_1">%2$d</xliff:g> s."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Již <xliff:g id="NUMBER_0">%1$d</xliff:g>krát jste zadali nesprávné bezpečnostní gesto. \n\nZkuste to znovu za <xliff:g id="NUMBER_1">%2$d</xliff:g> s."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Zadali jste nesprávný kód PIN SIM karty. Nyní musíte za účelem odemknutí zařízení kontaktovat svého operátora."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="few">Zadali jste nesprávný kód PIN SIM karty. Máte ještě <xliff:g id="NUMBER_1">%d</xliff:g> pokusy.</item>
-      <item quantity="many">Zadali jste nesprávný kód PIN SIM karty. Máte ještě <xliff:g id="NUMBER_1">%d</xliff:g> pokusu.</item>
-      <item quantity="other">Zadali jste nesprávný kód PIN SIM karty. Máte ještě <xliff:g id="NUMBER_1">%d</xliff:g> pokusů.</item>
-      <item quantity="one">Zadali jste nesprávný PIN SIM karty. Zbývá <xliff:g id="NUMBER_0">%d</xliff:g> pokus, poté bude muset zařízení odemknout operátor.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Zadali jste nesprávný PIN SIM karty. Zbývá vám # pokus, poté zařízení bude muset odemknout operátor.}few{Zadali jste nesprávný PIN SIM karty. Máte ještě # pokusy. }many{Zadali jste nesprávný PIN SIM karty. Máte ještě # pokusu. }other{Zadali jste nesprávný PIN SIM karty. Máte ještě # pokusů. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM kartu nelze použít. Kontaktujte operátora."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="few">Nesprávný kód PUK SIM karty. Máte ještě <xliff:g id="NUMBER_1">%d</xliff:g> pokusy, poté bude SIM karta natrvalo zablokována.</item>
-      <item quantity="many">Nesprávný kód PUK SIM karty. Máte ještě <xliff:g id="NUMBER_1">%d</xliff:g> pokusu, poté bude SIM karta natrvalo zablokována.</item>
-      <item quantity="other">Nesprávný kód PUK SIM karty. Máte ještě <xliff:g id="NUMBER_1">%d</xliff:g> pokusů, poté bude SIM karta natrvalo zablokována.</item>
-      <item quantity="one">Nesprávný kód PUK SIM karty. Máte ještě <xliff:g id="NUMBER_0">%d</xliff:g> pokus, poté bude SIM karta natrvalo zablokována.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Nesprávný PUK SIM karty. Máte ještě # pokus, poté bude SIM karta natrvalo zablokována.}few{Nesprávný PUK SIM karty. Máte ještě # pokusy, poté bude SIM karta natrvalo zablokována.}many{Nesprávný PUK SIM karty. Máte ještě # pokusu, poté bude SIM karta natrvalo zablokována.}other{Nesprávný PUK SIM karty. Máte ještě # pokusů, poté bude SIM karta natrvalo zablokována.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Operace pomocí kódu PIN SIM karty se nezdařila."</string>
     <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>
@@ -95,18 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Zařízení bylo ručně uzamčeno"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nerozpoznáno"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"V Nastavení zapněte přístup k fotoaparátu"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="few">Zadejte PIN SIM karty. Zbývají <xliff:g id="NUMBER_1">%d</xliff:g> pokusy.</item>
-      <item quantity="many">Zadejte PIN SIM karty. Zbývá <xliff:g id="NUMBER_1">%d</xliff:g> pokusu.</item>
-      <item quantity="other">Zadejte PIN SIM karty. Zbývá <xliff:g id="NUMBER_1">%d</xliff:g> pokusů.</item>
-      <item quantity="one">Zadejte PIN SIM karty. Zbývá <xliff:g id="NUMBER_0">%d</xliff:g> pokus, poté bude muset zařízení odemknout operátor.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="few">SIM karta je teď zablokována. Chcete-li pokračovat, zadejte kód PUK. Máte ještě <xliff:g id="_NUMBER_1">%d</xliff:g> pokusy, poté bude SIM karta natrvalo zablokována. Podrobnosti vám poskytne operátor.</item>
-      <item quantity="many">SIM karta je teď zablokována. Chcete-li pokračovat, zadejte kód PUK. Máte ještě <xliff:g id="_NUMBER_1">%d</xliff:g> pokusu, poté bude SIM karta natrvalo zablokována. Podrobnosti vám poskytne operátor.</item>
-      <item quantity="other">SIM karta je teď zablokována. Chcete-li pokračovat, zadejte kód PUK. Máte ještě <xliff:g id="_NUMBER_1">%d</xliff:g> pokusů, poté bude SIM karta natrvalo zablokována. Podrobnosti vám poskytne operátor.</item>
-      <item quantity="one">SIM karta je teď zablokována. Chcete-li pokračovat, zadejte kód PUK. Máte ještě <xliff:g id="_NUMBER_0">%d</xliff:g> pokus, poté bude SIM karta natrvalo zablokována. Podrobnosti vám poskytne operátor.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Zadejte PIN SIM karty. Zbývá # pokus, poté bude muset zařízení odemknout operátor.}few{Zadejte PIN SIM karty. Zbývají # pokusy.}many{Zadejte PIN SIM karty. Zbývá # pokusu.}other{Zadejte PIN SIM karty. Zbývá # pokusů.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM karta je nyní zablokována. Chcete-li pokračovat, zadejte PUK. Máte ještě # pokus, poté bude SIM karta natrvalo zablokována. Podrobnosti poskytne operátor.}few{SIM karta je nyní zablokována. Chcete-li pokračovat, zadejte PUK. Máte ještě # pokusy, poté bude SIM karta natrvalo zablokována. Podrobnosti poskytne operátor.}many{SIM karta je nyní zablokována. Chcete-li pokračovat, zadejte PUK. Máte ještě # pokusu, poté bude SIM karta natrvalo zablokována. Podrobnosti poskytne operátor.}other{SIM karta je nyní zablokována. Chcete-li pokračovat, zadejte PUK. Máte ještě # pokusů, poté bude SIM karta natrvalo zablokována. Podrobnosti poskytne operátor.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Výchozí"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bublina"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogové"</string>
diff --git a/packages/SystemUI/res-keyguard/values-da/strings.xml b/packages/SystemUI/res-keyguard/values-da/strings.xml
index 0774c52..cb8ad8f 100644
--- a/packages/SystemUI/res-keyguard/values-da/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-da/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Du har indtastet din adgangskode forkert <xliff:g id="NUMBER_0">%1$d</xliff:g> gange. \n\nPrøv igen om <xliff:g id="NUMBER_1">%2$d</xliff:g> sekunder."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Du har tegnet dit oplåsningsmønster forkert <xliff:g id="NUMBER_0">%1$d</xliff:g> gange. \n\nPrøv igen om <xliff:g id="NUMBER_1">%2$d</xliff:g> sekunder."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Forkert pinkode til SIM-kort. Du er nu nødt til at kontakte dit mobilselskab for at låse din enhed op."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">Forkert pinkode til SIM-kort. Du har <xliff:g id="NUMBER_1">%d</xliff:g> forsøg tilbage.</item>
-      <item quantity="other">Forkert pinkode til SIM-kort. Du har <xliff:g id="NUMBER_1">%d</xliff:g> forsøg tilbage.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Du har angivet en forkert pinkode til SIM-kortet. Du har # forsøg tilbage, før du skal kontakte dit mobilselskab for at få låst din enhed op.}one{Du har angivet en forkert pinkode til SIM-kortet. Du har # forsøg tilbage. }other{Du har angivet en forkert pinkode til SIM-kortet. Du har # forsøg tilbage. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM-kortet er ubrugeligt. Kontakt dit mobilselskab."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">Forkert PUK-kode til SIM-kort. Du har <xliff:g id="NUMBER_1">%d</xliff:g> forsøg tilbage, før SIM-kortet bliver permanent ubrugeligt.</item>
-      <item quantity="other">Forkert PUK-kode til SIM-kort. Du har <xliff:g id="NUMBER_1">%d</xliff:g> forsøg tilbage, før SIM-kortet bliver permanent ubrugeligt.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Du har angivet en forkert PUK-kode til SIM-kortet. Du har # forsøg tilbage, før SIM-kortet bliver permanent ubrugeligt.}one{Du har angivet en forkert PUK-kode til SIM-kortet. Du har # forsøg tilbage, før SIM-kortet bliver permanent ubrugeligt.}other{Du har angivet en forkert PUK-kode til SIM-kortet. Du har # forsøg tilbage, før SIM-kortet bliver permanent ubrugeligt.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Pinkoden til SIM-kortet blev afvist"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Enheden blev låst manuelt"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Ikke genkendt"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Aktivér kameraadgang i Indstillinger for at bruge ansigtslås"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">Angiv pinkoden til SIM-kortet. Du har <xliff:g id="NUMBER_1">%d</xliff:g> forsøg tilbage.</item>
-      <item quantity="other">Angiv pinkoden til SIM-kortet. Du har <xliff:g id="NUMBER_1">%d</xliff:g> forsøg tilbage.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">SIM-kortet er nu deaktiveret. Angiv PUK-koden for at fortsætte. Du har <xliff:g id="_NUMBER_1">%d</xliff:g> forsøg tilbage, før SIM-kortet bliver permanent ubrugeligt. Kontakt dit mobilselskab for at få flere oplysninger.</item>
-      <item quantity="other">SIM-kortet er nu deaktiveret. Angiv PUK-koden for at fortsætte. Du har <xliff:g id="_NUMBER_1">%d</xliff:g> forsøg tilbage, før SIM-kortet bliver permanent ubrugeligt. Kontakt dit mobilselskab for at få flere oplysninger.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Angiv pinkoden til SIM-kortet. Du har # forsøg tilbage, før du skal kontakte dit mobilselskab for at låse din enhed op.}one{Angiv pinkoden til SIM-kortet. Du har # forsøg tilbage.}other{Angiv pinkoden til SIM-kortet. Du har # forsøg tilbage.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM-kortet er nu deaktiveret. Angiv PUK-koden for at fortsætte. Du har # forsøg tilbage, før SIM-kortet bliver permanent ubrugeligt. Kontakt dit mobilselskab for at få flere oplysninger.}one{SIM-kortet er nu deaktiveret. Angiv PUK-koden for at fortsætte. Du har # forsøg tilbage, før SIM-kortet bliver permanent ubrugeligt. Kontakt dit mobilselskab for at få flere oplysninger.}other{SIM-kortet er nu deaktiveret. Angiv PUK-koden for at fortsætte. Du har # forsøg tilbage, før SIM-kortet bliver permanent ubrugeligt. Kontakt dit mobilselskab for at få flere oplysninger.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Standard"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Boble"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analog"</string>
diff --git a/packages/SystemUI/res-keyguard/values-de/strings.xml b/packages/SystemUI/res-keyguard/values-de/strings.xml
index c46c08f..579c514 100644
--- a/packages/SystemUI/res-keyguard/values-de/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-de/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Du hast dein Passwort <xliff:g id="NUMBER_0">%1$d</xliff:g>-mal falsch eingegeben.\n\nBitte versuche es in <xliff:g id="NUMBER_1">%2$d</xliff:g> Sekunden noch einmal."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Du hast dein Entsperrungsmuster <xliff:g id="NUMBER_0">%1$d</xliff:g>-mal falsch gezeichnet. \n\nBitte versuche es in <xliff:g id="NUMBER_1">%2$d</xliff:g> Sekunden noch einmal."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Falscher PIN-Code der SIM-Karte. Bitte wende dich an deinen Mobilfunkanbieter, damit er dein Gerät entsperrt."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">Falscher PIN-Code der SIM-Karte. Du hast noch <xliff:g id="NUMBER_1">%d</xliff:g> Versuche.</item>
-      <item quantity="one">Falscher PIN-Code der SIM-Karte. Du hast noch <xliff:g id="NUMBER_0">%d</xliff:g> Versuch, bevor du das Gerät von deinem Mobilfunkanbieter entsperren lassen musst.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Falscher PIN-Code für die SIM-Karte. Du hast noch # Versuch, bevor das Gerät nur noch vom Mobilfunkanbieter entsperrt werden kann.}other{Falscher PIN-Code für die SIM-Karte. Du hast noch # Versuche. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"Die SIM-Karte kann nicht verwendet werden. Bitte wende dich an deinen Mobilfunkanbieter."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">Falscher PUK-Code der SIM-Karte. Du hast noch <xliff:g id="NUMBER_1">%d</xliff:g> Versuche, bevor deine SIM-Karte endgültig gesperrt wird.</item>
-      <item quantity="one">Falscher PUK-Code der SIM-Karte. Du hast noch <xliff:g id="NUMBER_0">%d</xliff:g> Versuch, bevor deine SIM-Karte endgültig gesperrt wird.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Falscher PUK-Code für die SIM-Karte. Du hast noch # Versuch, bevor die SIM-Karte endgültig gesperrt wird.}other{Falscher PUK-Code für die SIM-Karte. Du hast noch # Versuche, bevor die SIM-Karte endgültig gesperrt wird.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Fehler beim Entsperren der SIM-Karte mit der PIN."</string>
     <string name="kg_password_puk_failed" msgid="6778867411556937118">"Fehler beim Entsperren der SIM-Karte mithilfe des PUK-Codes."</string>
     <string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Eingabemethode wechseln"</string>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Gerät manuell gesperrt"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nicht erkannt"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Die Gesichtsentsperrung benötigt Kamerazugriff"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">Gib die PIN für die SIM-Karte ein. Du hast noch <xliff:g id="NUMBER_1">%d</xliff:g> Versuche.</item>
-      <item quantity="one">Gib die PIN für die SIM-Karte ein. Du hast noch <xliff:g id="NUMBER_0">%d</xliff:g> Versuch, bevor das Gerät nur noch vom Mobilfunkanbieter entsperrt werden kann.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">Die SIM-Karte ist jetzt deaktiviert. Gib den PUK-Code ein, um fortzufahren. Du hast noch <xliff:g id="_NUMBER_1">%d</xliff:g> Versuche, bevor die SIM-Karte endgültig gesperrt wird. Weitere Informationen erhältst du von deinem Mobilfunkanbieter.</item>
-      <item quantity="one">Die SIM-Karte ist jetzt deaktiviert. Gib den PUK-Code ein, um fortzufahren. Du hast noch <xliff:g id="_NUMBER_0">%d</xliff:g> Versuch, bevor die SIM-Karte endgültig gesperrt wird. Weitere Informationen erhältst du von deinem Mobilfunkanbieter.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Gib die PIN für die SIM-Karte ein. Du hast noch # Versuch, bevor das Gerät nur noch vom Mobilfunkanbieter entsperrt werden kann.}other{Gib die PIN für die SIM-Karte ein. Du hast noch # Versuche.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{Die SIM-Karte ist jetzt deaktiviert. Gib den PUK-Code ein, um fortzufahren. Du hast noch # Versuch, bevor die SIM-Karte endgültig gesperrt wird. Wende dich für weitere Informationen an deinen Mobilfunkanbieter.}other{Die SIM-Karte ist jetzt deaktiviert. Gib den PUK-Code ein, um fortzufahren. Du hast noch # Versuche, bevor die SIM-Karte endgültig gesperrt wird. Wende dich für weitere Informationen an deinen Mobilfunkanbieter.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Standard"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bubble"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analog"</string>
diff --git a/packages/SystemUI/res-keyguard/values-el/strings.xml b/packages/SystemUI/res-keyguard/values-el/strings.xml
index 73afafa7..8dd5d20 100644
--- a/packages/SystemUI/res-keyguard/values-el/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-el/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Έχετε πληκτρολογήσει τον κωδικό πρόσβασης εσφαλμένα <xliff:g id="NUMBER_0">%1$d</xliff:g> φορές. \n\nΠροσπαθήστε ξανά σε <xliff:g id="NUMBER_1">%2$d</xliff:g> δευτερόλεπτα."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Σχεδιάσατε εσφαλμένα το μοτίβο ξεκλειδώματος<xliff:g id="NUMBER_0">%1$d</xliff:g> φορές. \n\nΠροσπαθήστε ξανά σε <xliff:g id="NUMBER_1">%2$d</xliff:g> δευτερόλεπτα."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Λανθασμένος κωδικός PIN κάρτας SIM. Θα πρέπει να επικοινωνήσετε με την εταιρεία κινητής τηλεφωνίας σας για να ξεκλειδώσετε τη συσκευή σας."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">Λανθασμένος κωδικός PIN κάρτας SIM. Απομένουν άλλες <xliff:g id="NUMBER_1">%d</xliff:g> προσπάθειες.</item>
-      <item quantity="one">Λανθασμένος κωδικός PIN κάρτας SIM. Απομένει άλλη <xliff:g id="NUMBER_0">%d</xliff:g> προσπάθεια. Στη συνέχεια, θα πρέπει να επικοινωνήσετε με την εταιρεία κινητής τηλεφωνίας σας για να ξεκλειδώσετε τη συσκευή σας.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Εσφαλμένος κωδικός PIN κάρτας SIM. Απομένει άλλη # προσπάθεια. Στη συνέχεια, θα πρέπει να επικοινωνήσετε με τον πάροχο κινητής τηλεφωνίας σας για να ξεκλειδώσετε τη συσκευή σας.}other{Εσφαλμένος κωδικός PIN κάρτας SIM. Απομένουν # προσπάθειες. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"Η κάρτα SIM δεν μπορεί να χρησιμοποιηθεί. Επικοινωνήστε με την εταιρεία κινητής τηλεφωνίας σας."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">Λανθασμένος κωδικός PUK κάρτας SIM. Απομένουν άλλες <xliff:g id="NUMBER_1">%d</xliff:g> προσπάθειες προτού να μην είναι πλέον δυνατή η χρήση της κάρτας SIM.</item>
-      <item quantity="one">Λανθασμένος κωδικός PUK κάρτας SIM. Απομένει άλλη <xliff:g id="NUMBER_0">%d</xliff:g> προσπάθεια προτού να μην είναι πλέον δυνατή η χρήση της κάρτας SIM.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Λανθασμένος κωδικός PUK κάρτας SIM. Απομένει άλλη # προσπάθεια προτού να μην είναι πλέον δυνατή η χρήση της κάρτας SIM.}other{Εσφαλμένος κωδικός PUK κάρτας SIM. Απομένουν # προσπάθειες προτού να μην είναι πλέον δυνατή η χρήση της κάρτας SIM.}}"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Η συσκευή κλειδώθηκε με μη αυτόματο τρόπο"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Δεν αναγνωρίστηκε"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Ενεργοπ. πρόσβ. κάμ. στις Ρυθμ. για Ξεκλείδ. με το πρόσωπο."</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">Εισαγάγετε τον αριθμό PIN της κάρτας SIM. Απομένουν άλλες <xliff:g id="NUMBER_1">%d</xliff:g> προσπάθειες.</item>
-      <item quantity="one">Εισαγάγετε τον αριθμό PIN της κάρτας SIM. Απομένει άλλη <xliff:g id="NUMBER_0">%d</xliff:g> προσπάθεια. Στη συνέχεια, θα πρέπει να επικοινωνήσετε με τον πάροχο κινητής τηλεφωνίας, για να ξεκλειδώσετε τη συσκευή.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">Η κάρτα SIM απενεργοποιήθηκε. Καταχωρίστε τον κωδικό PUK, για να συνεχίσετε. Απομένουν <xliff:g id="_NUMBER_1">%d</xliff:g> ακόμη προσπάθειες προτού να μην είναι πλέον δυνατή η χρήση της κάρτας SIM. Επικοινωνήστε με την εταιρεία κινητής τηλεφωνίας για λεπτομέρειες.</item>
-      <item quantity="one">Η κάρτα SIM απενεργοποιήθηκε. Καταχωρίστε τον κωδικό PUK, για να συνεχίσετε. Απομένει <xliff:g id="_NUMBER_0">%d</xliff:g> ακόμη προσπάθεια προτού να μην είναι πλέον δυνατή η χρήση της κάρτας SIM. Επικοινωνήστε με την εταιρεία κινητής τηλεφωνίας για λεπτομέρειες.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Εισαγάγετε τον κωδικό PIN της κάρτας SIM. Απομένει άλλη # προσπάθεια. Στη συνέχεια, θα πρέπει να επικοινωνήσετε με τον πάροχο κινητής τηλεφωνίας, για να ξεκλειδώσετε τη συσκευή.}other{Εισαγάγετε τον κωδικό PIN της κάρτας SIM. Απομένουν # προσπάθειες.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{Η κάρτα SIM απενεργοποιήθηκε. Εισαγάγετε τον κωδικό PUK, για να συνεχίσετε. Απομένει # ακόμη προσπάθεια προτού να μην είναι πλέον δυνατή η χρήση της κάρτας SIM. Επικοινωνήστε με την εταιρεία κινητής τηλεφωνίας για λεπτομέρειες.}other{Η κάρτα SIM απενεργοποιήθηκε. Εισαγάγετε τον κωδικό PUK, για να συνεχίσετε. Απομένουν # ακόμη προσπάθειες προτού να μην είναι πλέον δυνατή η χρήση της κάρτας SIM. Επικοινωνήστε με την εταιρεία κινητής τηλεφωνίας για λεπτομέρειες.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Προεπιλογή"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Συννεφάκι"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Αναλογικό"</string>
diff --git a/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml b/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml
index 0d08c42..865ebab 100644
--- a/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-en-rAU/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"You have incorrectly typed your password <xliff:g id="NUMBER_0">%1$d</xliff:g> times. \n\nTry again in <xliff:g id="NUMBER_1">%2$d</xliff:g> seconds."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%1$d</xliff:g> times. \n\nTry again in <xliff:g id="NUMBER_1">%2$d</xliff:g> seconds."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Incorrect SIM PIN code; you must now contact your operator to unlock your device."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">Incorrect SIM PIN code. You have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts.</item>
-      <item quantity="one">Incorrect SIM PIN code. You have <xliff:g id="NUMBER_0">%d</xliff:g> remaining attempt before you must contact your provider to unlock your device.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Incorrect SIM PIN code; you have # remaining attempt before you must contact your operator to unlock your device.}other{Incorrect SIM PIN code; you have # remaining attempts. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM is unusable. Contact your operator."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">Incorrect SIM PUK code. You have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts before SIM becomes permanently unusable.</item>
-      <item quantity="one">Incorrect SIM PUK code. You have <xliff:g id="NUMBER_0">%d</xliff:g> remaining attempt before SIM becomes permanently unusable.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Incorrect SIM PUK code; you have # remaining attempt before SIM becomes permanently unusable.}other{Incorrect SIM PUK code, you have # remaining attempts before SIM becomes permanently unusable.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"SIM PIN operation failed!"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Device was locked manually"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Not recognised"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"To use Face Unlock, turn on camera access in Settings"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">Enter SIM PIN. You have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts.</item>
-      <item quantity="one">Enter SIM PIN. You have <xliff:g id="NUMBER_0">%d</xliff:g> remaining attempt before you must contact your operator to unlock your device.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM is now disabled. Enter PUK code to continue. You have <xliff:g id="_NUMBER_1">%d</xliff:g> remaining attempts before SIM becomes permanently unusable. Contact operator for details.</item>
-      <item quantity="one">SIM is now disabled. Enter PUK code to continue. You have <xliff:g id="_NUMBER_0">%d</xliff:g> remaining attempt before SIM becomes permanently unusable. Contact operator for details.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Enter SIM PIN. You have # remaining attempt before you must contact your operator to unlock your device.}other{Enter SIM PIN. You have # remaining attempts.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM is now disabled. Enter PUK code to continue. You have # remaining attempt before SIM becomes permanently unusable. Contact operator for details.}other{SIM is now disabled. Enter PUK code to continue. You have # remaining attempts before SIM becomes permanently unusable. Contact operator for details.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Default"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bubble"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogue"</string>
diff --git a/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml b/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml
index 3356ec9..9b4df35 100644
--- a/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-en-rCA/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"You have incorrectly typed your password <xliff:g id="NUMBER_0">%1$d</xliff:g> times. \n\nTry again in <xliff:g id="NUMBER_1">%2$d</xliff:g> seconds."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%1$d</xliff:g> times. \n\nTry again in <xliff:g id="NUMBER_1">%2$d</xliff:g> seconds."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Incorrect SIM PIN code you must now contact your carrier to unlock your device."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">Incorrect SIM PIN code, you have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts.</item>
-      <item quantity="one">Incorrect SIM PIN code, you have <xliff:g id="NUMBER_0">%d</xliff:g> remaining attempt before you must contact your carrier to unlock your device.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Incorrect SIM PIN code, you have # remaining attempt before you must contact your carrier to unlock your device.}other{Incorrect SIM PIN code, you have # remaining attempts. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM is unusable. Contact your carrier."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">Incorrect SIM PUK code. You have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts before SIM becomes permanently unusable.</item>
-      <item quantity="one">Incorrect SIM PUK code. You have <xliff:g id="NUMBER_0">%d</xliff:g> remaining attempt before SIM becomes permanently unusable.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Incorrect SIM PUK code; you have # remaining attempt before SIM becomes permanently unusable.}other{Incorrect SIM PUK code, you have # remaining attempts before SIM becomes permanently unusable.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"SIM PIN operation failed!"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Device was locked manually"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Not recognised"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"To use Face Unlock, turn on camera access in Settings"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">Enter SIM PIN. You have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts.</item>
-      <item quantity="one">Enter SIM PIN. You have <xliff:g id="NUMBER_0">%d</xliff:g> remaining attempt before you must contact your carrier to unlock your device.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM is now disabled. Enter PUK code to continue. You have <xliff:g id="_NUMBER_1">%d</xliff:g> remaining attempts before SIM becomes permanently unusable. Contact carrier for details.</item>
-      <item quantity="one">SIM is now disabled. Enter PUK code to continue. You have <xliff:g id="_NUMBER_0">%d</xliff:g> remaining attempt before SIM becomes permanently unusable. Contact carrier for details.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Enter SIM PIN. You have # remaining attempt before you must contact your carrier to unlock your device.}other{Enter SIM PIN. You have # remaining attempts.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM is now disabled. Enter PUK code to continue. You have # remaining attempt before SIM becomes permanently unusable. Contact carrier for details.}other{SIM is now disabled. Enter PUK code to continue. You have # remaining attempts before SIM becomes permanently unusable. Contact carrier for details.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Default"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bubble"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogue"</string>
diff --git a/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml b/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml
index 0d08c42..865ebab 100644
--- a/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-en-rGB/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"You have incorrectly typed your password <xliff:g id="NUMBER_0">%1$d</xliff:g> times. \n\nTry again in <xliff:g id="NUMBER_1">%2$d</xliff:g> seconds."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%1$d</xliff:g> times. \n\nTry again in <xliff:g id="NUMBER_1">%2$d</xliff:g> seconds."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Incorrect SIM PIN code; you must now contact your operator to unlock your device."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">Incorrect SIM PIN code. You have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts.</item>
-      <item quantity="one">Incorrect SIM PIN code. You have <xliff:g id="NUMBER_0">%d</xliff:g> remaining attempt before you must contact your provider to unlock your device.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Incorrect SIM PIN code; you have # remaining attempt before you must contact your operator to unlock your device.}other{Incorrect SIM PIN code; you have # remaining attempts. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM is unusable. Contact your operator."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">Incorrect SIM PUK code. You have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts before SIM becomes permanently unusable.</item>
-      <item quantity="one">Incorrect SIM PUK code. You have <xliff:g id="NUMBER_0">%d</xliff:g> remaining attempt before SIM becomes permanently unusable.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Incorrect SIM PUK code; you have # remaining attempt before SIM becomes permanently unusable.}other{Incorrect SIM PUK code, you have # remaining attempts before SIM becomes permanently unusable.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"SIM PIN operation failed!"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Device was locked manually"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Not recognised"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"To use Face Unlock, turn on camera access in Settings"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">Enter SIM PIN. You have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts.</item>
-      <item quantity="one">Enter SIM PIN. You have <xliff:g id="NUMBER_0">%d</xliff:g> remaining attempt before you must contact your operator to unlock your device.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM is now disabled. Enter PUK code to continue. You have <xliff:g id="_NUMBER_1">%d</xliff:g> remaining attempts before SIM becomes permanently unusable. Contact operator for details.</item>
-      <item quantity="one">SIM is now disabled. Enter PUK code to continue. You have <xliff:g id="_NUMBER_0">%d</xliff:g> remaining attempt before SIM becomes permanently unusable. Contact operator for details.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Enter SIM PIN. You have # remaining attempt before you must contact your operator to unlock your device.}other{Enter SIM PIN. You have # remaining attempts.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM is now disabled. Enter PUK code to continue. You have # remaining attempt before SIM becomes permanently unusable. Contact operator for details.}other{SIM is now disabled. Enter PUK code to continue. You have # remaining attempts before SIM becomes permanently unusable. Contact operator for details.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Default"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bubble"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogue"</string>
diff --git a/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml b/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml
index 0d08c42..865ebab 100644
--- a/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-en-rIN/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"You have incorrectly typed your password <xliff:g id="NUMBER_0">%1$d</xliff:g> times. \n\nTry again in <xliff:g id="NUMBER_1">%2$d</xliff:g> seconds."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%1$d</xliff:g> times. \n\nTry again in <xliff:g id="NUMBER_1">%2$d</xliff:g> seconds."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Incorrect SIM PIN code; you must now contact your operator to unlock your device."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">Incorrect SIM PIN code. You have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts.</item>
-      <item quantity="one">Incorrect SIM PIN code. You have <xliff:g id="NUMBER_0">%d</xliff:g> remaining attempt before you must contact your provider to unlock your device.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Incorrect SIM PIN code; you have # remaining attempt before you must contact your operator to unlock your device.}other{Incorrect SIM PIN code; you have # remaining attempts. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM is unusable. Contact your operator."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">Incorrect SIM PUK code. You have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts before SIM becomes permanently unusable.</item>
-      <item quantity="one">Incorrect SIM PUK code. You have <xliff:g id="NUMBER_0">%d</xliff:g> remaining attempt before SIM becomes permanently unusable.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Incorrect SIM PUK code; you have # remaining attempt before SIM becomes permanently unusable.}other{Incorrect SIM PUK code, you have # remaining attempts before SIM becomes permanently unusable.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"SIM PIN operation failed!"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Device was locked manually"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Not recognised"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"To use Face Unlock, turn on camera access in Settings"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">Enter SIM PIN. You have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts.</item>
-      <item quantity="one">Enter SIM PIN. You have <xliff:g id="NUMBER_0">%d</xliff:g> remaining attempt before you must contact your operator to unlock your device.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM is now disabled. Enter PUK code to continue. You have <xliff:g id="_NUMBER_1">%d</xliff:g> remaining attempts before SIM becomes permanently unusable. Contact operator for details.</item>
-      <item quantity="one">SIM is now disabled. Enter PUK code to continue. You have <xliff:g id="_NUMBER_0">%d</xliff:g> remaining attempt before SIM becomes permanently unusable. Contact operator for details.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Enter SIM PIN. You have # remaining attempt before you must contact your operator to unlock your device.}other{Enter SIM PIN. You have # remaining attempts.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM is now disabled. Enter PUK code to continue. You have # remaining attempt before SIM becomes permanently unusable. Contact operator for details.}other{SIM is now disabled. Enter PUK code to continue. You have # remaining attempts before SIM becomes permanently unusable. Contact operator for details.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Default"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bubble"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogue"</string>
diff --git a/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml b/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml
index 3c31942..afb3d65 100644
--- a/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-en-rXC/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‎‏‎‎‏‏‎‏‎‎‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‏‏‎‏‎‎‏‏‎‎‎‏‎‏‎‏‎‏‎‏‎‏‏‎‎You have incorrectly typed your password ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Try again in ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ seconds.‎‏‎‎‏‎"</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‎‎‏‎‏‎‎‏‎‏‎‎‎‏‏‏‏‎‏‎‏‏‎‏‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‎‏‎‏‎‎‎‎‎You have incorrectly drawn your unlock pattern ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%1$d</xliff:g>‎‏‎‎‏‏‏‎ times. ‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Try again in ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%2$d</xliff:g>‎‏‎‎‏‏‏‎ seconds.‎‏‎‎‏‎"</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‏‎‎‎‏‏‎‏‏‏‎‏‎‎‎‏‎‏‎‏‎‏‏‎‎‏‎‏‎‎‎‏‎‏‎Incorrect SIM PIN code you must now contact your carrier to unlock your device.‎‏‎‎‏‎"</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‏‎‎‎‏‏‎‏‎‎‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‎‏‎‎‏‎‎‎‎‎‎‏‏‎‎‏‎‎‎‏‎‏‏‎‎‎‏‎‎Incorrect SIM PIN code, you have ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%d</xliff:g>‎‏‎‎‏‏‏‎ remaining attempts.‎‏‎‎‏‎</item>
-      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‏‎‎‎‏‏‎‏‎‎‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‎‏‎‎‏‎‎‎‎‎‎‏‏‎‎‏‎‎‎‏‎‏‏‎‎‎‏‎‎Incorrect SIM PIN code, you have ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%d</xliff:g>‎‏‎‎‏‏‏‎ remaining attempt before you must contact your carrier to unlock your device.‎‏‎‎‏‎</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‎‏‎‎‎‎‎‎‏‏‎‎‎‎‎‎‎‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎‎‎‎‏‎‏‎Incorrect SIM PIN code, you have # remaining attempt before you must contact your carrier to unlock your device.‎‏‎‎‏‎}other{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‎‏‎‎‎‎‎‎‏‏‎‎‎‎‎‎‎‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎‎‎‎‏‎‏‎Incorrect SIM PIN code, you have # remaining attempts. ‎‏‎‎‏‎}}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‏‎‎‏‎‏‏‏‏‎‎‏‎‏‏‏‏‎‎‎‎‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‏‎‎‏‏‏‏‎‎‎‏‎‎‏‎SIM is unusable. Contact your carrier.‎‏‎‎‏‎"</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‎‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‎‏‎‎‏‏‎‎Incorrect SIM PUK code, you have ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%d</xliff:g>‎‏‎‎‏‏‏‎ remaining attempts before SIM becomes permanently unusable.‎‏‎‎‏‎</item>
-      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‎‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‎‏‎‎‏‏‎‎Incorrect SIM PUK code, you have ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%d</xliff:g>‎‏‎‎‏‏‏‎ remaining attempt before SIM becomes permanently unusable.‎‏‎‎‏‎</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‏‏‏‎‏‎‏‎‏‏‎‏‎‏‎‏‏‏‎‎‏‏‎‎‎‏‎‎‎‎‎‏‎‏‎‏‏‏‏‎‎‎‎‎‏‎‏‎‎‏‏‎Incorrect SIM PUK code, you have # remaining attempt before SIM becomes permanently unusable.‎‏‎‎‏‎}other{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‏‏‏‎‏‎‏‎‏‏‎‏‎‏‎‏‏‏‎‎‏‏‎‎‎‏‎‎‎‎‎‏‎‏‎‏‏‏‏‎‎‎‎‎‏‎‏‎‎‏‏‎Incorrect SIM PUK code, you have # remaining attempts before SIM becomes permanently unusable.‎‏‎‎‏‎}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‎‎‎‏‏‏‏‎‏‎‏‎‎‎‎‏‏‏‎‏‏‎‎‏‎‏‏‎‏‏‎‏‎‎‏‎‏‏‎‎‏‏‏‎‎‏‏‏‏‎‏‎‎‏‎SIM PIN operation failed!‎‏‎‎‏‎"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‏‏‏‎‎‎‏‎‏‎‎‏‏‎‏‏‎‎‎‎‎‏‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‏‎‎‎‎‏‏‏‏‎‎‏‎‎‎‎‎Device was locked manually‎‏‎‎‏‎"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‎‎‎‎‏‏‏‏‎‎‏‎‎‏‏‎‏‏‏‏‏‎‏‎‏‎‏‎‏‎‏‎‎‏‏‏‏‎‎‎‎‏‏‎‏‎‏‏‎‎‎‎Not recognized‎‏‎‎‏‎"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎‎‎‎‏‎‎‏‏‏‎‏‎‎‎‎‎‏‏‎‏‏‎‎‏‎‎‎‎‎‏‏‎‏‏‎‏‏‏‎‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‎‎To use Face Unlock, turn on camera access in Settings‎‏‎‎‏‎"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‏‏‏‎‎‎‎‎‏‎‎‏‏‎‎‎‏‎‎‎‏‎‎‎‎‎‏‏‏‎‏‏‏‎‏‎‎‏‎‎‎‎‏‎‎‎‏‏‎‏‎‎Enter SIM PIN. You have ‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%d</xliff:g>‎‏‎‎‏‏‏‎ remaining attempts.‎‏‎‎‏‎</item>
-      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‏‏‏‎‎‎‎‎‏‎‎‏‏‎‎‎‏‎‎‎‏‎‎‎‎‎‏‏‏‎‏‏‏‎‏‎‎‏‎‎‎‎‏‎‎‎‏‏‎‏‎‎Enter SIM PIN. You have ‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%d</xliff:g>‎‏‎‎‏‏‏‎ remaining attempt before you must contact your carrier to unlock your device.‎‏‎‎‏‎</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‎‏‎‎‎‎‏‎‏‏‏‏‎‏‎‏‎‏‎‏‎‏‎‎‏‏‎‎‏‏‎‏‏‏‎‎‏‏‏‎‏‏‏‎SIM is now disabled. Enter PUK code to continue. You have ‎‏‎‎‏‏‎<xliff:g id="_NUMBER_1">%d</xliff:g>‎‏‎‎‏‏‏‎ remaining attempts before SIM becomes permanently unusable. Contact carrier for details.‎‏‎‎‏‎</item>
-      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‎‏‎‎‎‎‏‎‏‏‏‏‎‏‎‏‎‏‎‏‎‏‎‎‏‏‎‎‏‏‎‏‏‏‎‎‏‏‏‎‏‏‏‎SIM is now disabled. Enter PUK code to continue. You have ‎‏‎‎‏‏‎<xliff:g id="_NUMBER_0">%d</xliff:g>‎‏‎‎‏‏‏‎ remaining attempt before SIM becomes permanently unusable. Contact carrier for details.‎‏‎‎‏‎</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‏‏‎‎‎‎‏‏‏‎‎‏‎‎‎‏‎‎‎‎‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‎‏‎Enter SIM PIN. You have # remaining attempt before you must contact your carrier to unlock your device.‎‏‎‎‏‎}other{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‏‏‎‎‎‎‏‏‏‎‎‏‎‎‎‏‎‎‎‎‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‎‏‎Enter SIM PIN. You have # remaining attempts.‎‏‎‎‏‎}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‎‎‏‏‏‎‏‎‎‎‎‎‎‏‏‏‎‎‏‏‎‏‎‎‎‏‎‏‎‎‎‎‎‏‏‏‎‏‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‎SIM is now disabled. Enter PUK code to continue. You have # remaining attempt before SIM becomes permanently unusable. Contact carrier for details.‎‏‎‎‏‎}other{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‎‎‏‏‏‎‏‎‎‎‎‎‎‏‏‏‎‎‏‏‎‏‎‎‎‏‎‏‎‎‎‎‎‏‏‏‎‏‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‎SIM is now disabled. Enter PUK code to continue. You have # remaining attempts before SIM becomes permanently unusable. Contact carrier for details.‎‏‎‎‏‎}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‏‏‎‎‎‏‎‎‏‏‎‎‏‎‏‎‏‏‎‏‏‎‎‎‎‎‎‎‎‏‎‎‏‏‎‎‎‎Default‎‏‎‎‏‎"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‏‏‎‎‎‎‎‏‎‏‎‏‏‎‎‎‏‎‏‏‏‎‏‎‏‎‎‏‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‏‏‏‎‏‎Bubble‎‏‎‎‏‎"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‏‏‏‎‏‏‎‎‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‎‎‎‏‎‎‎‏‏‏‏‏‎‎‏‎‏‎‎‎‎‎‎‎‎‎‏‎Analog‎‏‎‎‏‎"</string>
diff --git a/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml b/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml
index 708e633..ea3b8a7 100644
--- a/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Escribiste tu contraseña <xliff:g id="NUMBER_0">%1$d</xliff:g> veces de manera incorrecta. \n\nVuelve a intentarlo en <xliff:g id="NUMBER_1">%2$d</xliff:g> segundos."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Dibujaste tu patrón de desbloqueo <xliff:g id="NUMBER_0">%1$d</xliff:g> veces de manera incorrecta. \n\nVuelve a intentarlo en <xliff:g id="NUMBER_1">%2$d</xliff:g> segundos."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"El código PIN de la tarjeta SIM es incorrecto. Debes comunicarte con tu proveedor para desbloquear el dispositivo."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">El código PIN de la tarjeta SIM es incorrecto. Te quedan <xliff:g id="NUMBER_1">%d</xliff:g> intentos más.</item>
-      <item quantity="one">El código PIN de la tarjeta SIM es incorrecto. Te queda <xliff:g id="NUMBER_0">%d</xliff:g> intento antes de que debas comunicarte con tu proveedor para desbloquear el dispositivo.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{El código PIN de la tarjeta SIM es incorrecto. Tienes # intento restante antes de que debas comunicarte con tu operador para desbloquear el dispositivo.}other{El código PIN de la tarjeta SIM es incorrecto. Tienes # intentos restantes. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"La tarjeta SIM no se puede usar. Comunícate con tu proveedor."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">El código PUK de la tarjeta SIM es incorrecto. Tienes <xliff:g id="NUMBER_1">%d</xliff:g> intentos más antes de que la tarjeta SIM quede inutilizable de manera permanente.</item>
-      <item quantity="one">El código PUK de la tarjeta SIM es incorrecto. Tienes <xliff:g id="NUMBER_0">%d</xliff:g> intento antes de que la tarjeta SIM quede inutilizable de manera permanente.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{El código PUK de la tarjeta SIM es incorrecto. Tienes # intento restante antes de que la tarjeta SIM quede inutilizable permanentemente.}other{El código PUK de la tarjeta SIM es incorrecto. Tienes # intentos restantes antes de que la tarjeta SIM quede inutilizable permanentemente.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Se produjo un error al desbloquear la tarjeta SIM con el PIN."</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"El dispositivo se bloqueó de forma manual"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"No se reconoció"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Activa acceso a cámara en Config. y usa Desb. facial"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">Ingresa el PIN de la SIM. Quedan <xliff:g id="NUMBER_1">%d</xliff:g> intentos más.</item>
-      <item quantity="one">Ingresa el PIN de la SIM. Queda <xliff:g id="NUMBER_0">%d</xliff:g> intento antes de que debas comunicarte con tu proveedor para desbloquear el dispositivo.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">Se inhabilitó la SIM. Para continuar, ingresa el código PUK. Te quedan <xliff:g id="_NUMBER_1">%d</xliff:g> intentos más antes de que la SIM quede inutilizable permanentemente. Comunícate con tu proveedor para obtener más detalles.</item>
-      <item quantity="one">Se inhabilitó la SIM. Para continuar, ingresa el código PUK. Te queda <xliff:g id="_NUMBER_0">%d</xliff:g> intento más antes de que la SIM quede inutilizable permanentemente. Comunícate con tu proveedor para obtener más detalles.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Ingresa el PIN de la tarjeta SIM. Tienes # intento restante antes de que debas comunicarte con tu operador para desbloquear el dispositivo.}other{Ingresa el PIN de la tarjeta SIM. Tienes # intentos restantes.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{Se inhabilitó la tarjeta SIM. Para continuar, ingresa el código PUK. Tienes # intento restante antes de que la SIM quede inutilizable permanentemente. Comunícate con tu operador para conocer más detalles.}other{Se inhabilitó la tarjeta SIM. Para continuar, ingresa el código PUK. Tienes # intentos restantes antes de que la SIM quede inutilizable permanentemente. Comunícate con tu operador para conocer más detalles.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Predeterminado"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Burbuja"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analógico"</string>
diff --git a/packages/SystemUI/res-keyguard/values-es/strings.xml b/packages/SystemUI/res-keyguard/values-es/strings.xml
index b498c0e..0c267aa 100644
--- a/packages/SystemUI/res-keyguard/values-es/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-es/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Has fallado <xliff:g id="NUMBER_0">%1$d</xliff:g> veces al introducir la contraseña. \n\nVuelve a intentarlo dentro de <xliff:g id="NUMBER_1">%2$d</xliff:g> segundos."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Has fallado <xliff:g id="NUMBER_0">%1$d</xliff:g> veces al dibujar el patrón de desbloqueo. \n\nVuelve a intentarlo dentro de <xliff:g id="NUMBER_1">%2$d</xliff:g> segundos."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"El código PIN de la tarjeta SIM es incorrecto. Debes ponerte en contacto con tu operador para desbloquear el dispositivo."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">El código PIN de la tarjeta SIM es incorrecto. Quedan <xliff:g id="NUMBER_1">%d</xliff:g> intentos.</item>
-      <item quantity="one">El código PIN de la tarjeta SIM es incorrecto. Queda <xliff:g id="NUMBER_0">%d</xliff:g> intento para tener que ponerte en contacto con tu operador para desbloquear el dispositivo.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Código PIN de la SIM incorrecto. Te queda # intento antes de tener que ponerte en contacto con tu operador para desbloquear el dispositivo.}other{Código PIN de la SIM incorrecto. Te quedan # intentos. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"La tarjeta SIM no se puede utilizar. Ponte en contacto con tu operador."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">El código PUK de la tarjeta SIM es incorrecto. Quedan <xliff:g id="NUMBER_1">%d</xliff:g> intentos paraa que la tarjeta SIM no se pueda utilizar de forma permanente.</item>
-      <item quantity="one">El código PUK de la tarjeta SIM es incorrecto. Queda <xliff:g id="NUMBER_0">%d</xliff:g> intento para que la tarjeta SIM no se pueda utilizar de forma permanente.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Código PUK de la SIM incorrecto. Te queda # intento antes de que la SIM quede inservible permanentemente.}other{Código PUK de la SIM incorrecto. Te quedan # intentos antes de que la SIM quede inservible permanentemente.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"No se ha podido desbloquear la tarjeta SIM con el código PIN."</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"El dispositivo se ha bloqueado manualmente"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"No se reconoce"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Desbloqueo facial: activa el acceso a la cámara"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">Introduce el PIN de la tarjeta SIM. Te quedan <xliff:g id="NUMBER_1">%d</xliff:g> intentos.</item>
-      <item quantity="one">Introduce el PIN de la tarjeta SIM. Te queda <xliff:g id="NUMBER_0">%d</xliff:g> intento para tener que ponerte en contacto con tu operador para desbloquear el dispositivo.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">La tarjeta SIM está inhabilitada. Introduce el código PUK para continuar. Te quedan <xliff:g id="_NUMBER_1">%d</xliff:g> intentos para que la tarjeta SIM quede inservible de forma permanente. Ponte en contacto con tu operador para obtener más información.</item>
-      <item quantity="one">La tarjeta SIM está inhabilitada. Introduce el código PUK para continuar. Te queda <xliff:g id="_NUMBER_0">%d</xliff:g> intento para que la tarjeta SIM quede inservible de forma permanente. Ponte en contacto con tu operador para obtener más información.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Introduce el PIN de la SIM. Te queda # intento antes de tener que ponerte en contacto con tu operador para desbloquear el dispositivo.}other{Introduce el PIN de la SIM. Te quedan # intentos.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{La SIM se ha inhabilitado. Introduce el código PUK para continuar. Te queda # intento antes de que la SIM quede inservible permanentemente. Ponte en contacto con tu operador para obtener más información.}other{La SIM se ha inhabilitado. Introduce el código PUK para continuar. Te quedan # intentos antes de que la SIM quede inservible permanentemente. Ponte en contacto con tu operador para obtener más información.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Predeterminado"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Burbuja"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analógico"</string>
diff --git a/packages/SystemUI/res-keyguard/values-et/strings.xml b/packages/SystemUI/res-keyguard/values-et/strings.xml
index 74ce06c..f4c99c4 100644
--- a/packages/SystemUI/res-keyguard/values-et/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-et/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Olete parooli <xliff:g id="NUMBER_0">%1$d</xliff:g> korda valesti sisestanud. \n\nProovige <xliff:g id="NUMBER_1">%2$d</xliff:g> sekundi pärast uuesti."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Olete oma avamismustrit <xliff:g id="NUMBER_0">%1$d</xliff:g> korda valesti joonistanud. \n\nProovige <xliff:g id="NUMBER_1">%2$d</xliff:g> sekundi pärast uuesti."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"SIM-kaardi vale PIN-kood. Seadme avamiseks peate nüüd ühendust võtma oma operaatoriga."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">SIM-kaardi vale PIN-kood. Teil on jäänud veel <xliff:g id="NUMBER_1">%d</xliff:g> katset.</item>
-      <item quantity="one">SIM-kaardi vale PIN-kood. Teil on jäänud veel <xliff:g id="NUMBER_0">%d</xliff:g> katse enne, kui peate seadme avamiseks operaatoriga ühendust võtma.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{SIM-i vale PIN-kood. Teil on veel # katse, enne kui peate seadme avamiseks operaatoriga ühendust võtma.}other{SIM-i vale PIN-kood. Teil on veel # katset. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM-kaart on kasutamiskõlbmatu. Võtke ühendust operaatoriga."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">SIM-kaardi vale PUK-kood. Teil on jäänud veel <xliff:g id="NUMBER_1">%d</xliff:g> katset enne, kui SIM-kaart jäädavalt lukustatakse.</item>
-      <item quantity="one">SIM-kaardi vale PUK-kood. Teil on jäänud veel <xliff:g id="NUMBER_0">%d</xliff:g> katse enne, kui SIM-kaart jäädavalt lukustatakse.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{SIM-i vale PUK-kood. Teil on veel # katse, enne kui SIM püsivalt lukustatakse.}other{SIM-i vale PUK-kood. Teil on veel # katset, enne kui SIM püsivalt lukustatakse.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"SIM-kaardi PIN-koodi toiming ebaõnnestus."</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Seade lukustati käsitsi"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Ei tuvastatud"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Näoga avamise kasutamiseks andke seadetes juurdepääs kaamerale"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">Sisestage SIM-kaardi PIN-kood. Jäänud on <xliff:g id="NUMBER_1">%d</xliff:g> katset.</item>
-      <item quantity="one">Sisestage SIM-kaardi PIN-kood. Jäänud on <xliff:g id="NUMBER_0">%d</xliff:g> katse enne, kui peate seadme avamiseks ühendust võtma operaatoriga.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM-kaart on nüüd keelatud. Jätkamiseks sisestage PUK-kood. Teil on jäänud veel <xliff:g id="_NUMBER_1">%d</xliff:g> katset enne, kui SIM-kaart püsivalt lukustatakse. Lisateavet küsige operaatorilt.</item>
-      <item quantity="one">SIM-kaart on nüüd keelatud. Jätkamiseks sisestage PUK-kood. Teil on jäänud veel <xliff:g id="_NUMBER_0">%d</xliff:g> katse enne, kui SIM-kaart püsivalt lukustatakse. Lisateavet küsige operaatorilt.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Sisestage SIM-i PIN-kood. Teil on veel # katse, enne kui peate seadme avamiseks operaatoriga ühendust võtma.}other{Sisestage SIM-i PIN-kood. Teil on veel # katset.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM on nüüd keelatud. Jätkamiseks sisestage PUK-kood. Teil on veel # katse enne, kui SIM püsivalt lukustatakse. Lisateavet küsige operaatorilt.}other{SIM on nüüd keelatud. Jätkamiseks sisestage PUK-kood. Teil on veel # katset enne, kui SIM püsivalt lukustatakse. Lisateavet küsige operaatorilt.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Vaikenumbrilaud"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Mull"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analoog"</string>
diff --git a/packages/SystemUI/res-keyguard/values-eu/strings.xml b/packages/SystemUI/res-keyguard/values-eu/strings.xml
index 19fc68a..bf94915 100644
--- a/packages/SystemUI/res-keyguard/values-eu/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-eu/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"<xliff:g id="NUMBER_0">%1$d</xliff:g> aldiz idatzi duzu pasahitza, baina huts egin duzu denetan. \n\nSaiatu berriro <xliff:g id="NUMBER_1">%2$d</xliff:g> segundo barru."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"<xliff:g id="NUMBER_0">%1$d</xliff:g> aldiz marraztu duzu desblokeatzeko eredua, baina huts egin duzu denetan. \n\nSaiatu berriro <xliff:g id="NUMBER_1">%2$d</xliff:g> segundo barru."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"SIMaren PIN kodea ez da zuzena. Gailua desblokeatzeko, operadorearekin jarri beharko duzu harremanetan."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">Ez da zuzena SIM txartelaren PIN kodea. <xliff:g id="NUMBER_1">%d</xliff:g> saiakera geratzen zaizkizu gailua desblokeatzeko.</item>
-      <item quantity="one">Ez da zuzena SIM txartelaren PIN kodea. <xliff:g id="NUMBER_0">%d</xliff:g> saiakera geratzen zaizu gailua desblokeatzeko.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Oker idatzi duzu SIMaren PIN kodea. # saiakera geratzen zaizu gailua desblokeatzeko operadorearekin harremanetan jarri behar izan aurretik.}other{Oker idatzi duzu SIMaren PIN kodea. # saiakera geratzen zaizkizu gailua desblokeatzeko operadorearekin harremanetan jarri behar izan aurretik. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM txartela erabilgaitza da. Jarri operadorearekin harremanetan."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">Ez da zuzena SIM txartelaren PUK kodea. <xliff:g id="NUMBER_1">%d</xliff:g> saiakera geratzen zaizkizu SIM txartela betiko erabilgaitz geratu aurretik.</item>
-      <item quantity="one">Ez da zuzena SIM txartelaren PUK kodea. <xliff:g id="NUMBER_0">%d</xliff:g> saiakera geratzen zaizu SIM txartela betiko erabilgaitz geratu aurretik.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Oker idatzi duzu SIMaren PUK kodea. # saiakera geratzen zaizu SIMa betiko ez-erabilgarri geratu aurretik.}other{Oker idatzi duzu SIMaren PUK kodea. # saiakera geratzen zaizkizu SIMa betiko ez-erabilgarri geratu aurretik.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Huts egin du SIM txartelaren PIN kodearen eragiketak!"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Eskuz blokeatu da gailua"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Ez da ezagutu"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Aurpegi bidezko desblokeoak kamera atzitzeko baimena behar du"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">Idatzi SIMaren PINa. <xliff:g id="NUMBER_1">%d</xliff:g> saiakera geratzen zaizkizu.</item>
-      <item quantity="one">Idatzi SIMaren PINa. <xliff:g id="NUMBER_0">%d</xliff:g> saiakera geratzen zaizu; oker idatziz gero, operadoreari eskatu beharko diozu gailua desblokeatzeko.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">Desgaitu egin da SIM txartela. Aurrera egiteko, idatzi PUK kodea. <xliff:g id="_NUMBER_1">%d</xliff:g> saiakera geratzen zaizkizu SIM txartela betiko erabilgaitz geratu aurretik. Xehetasunak lortzeko, jarri operadorearekin harremanetan.</item>
-      <item quantity="one">Desgaitu egin da SIM txartela. Aurrera egiteko, idatzi PUK kodea. <xliff:g id="_NUMBER_0">%d</xliff:g> saiakera geratzen zaizu SIM txartela betiko erabilgaitz geratu aurretik. Xehetasunak lortzeko, jarri operadorearekin harremanetan.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Idatzi SIMaren PINa. # saiakera geratzen zaizu gailua desblokeatzeko operadorearekin harremanetan jarri behar izan aurretik.}other{Idatzi SIMaren PINa. # saiakera gelditzen zaizkizu.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{Orain, SIMa desgaituta dago. Aurrera egiteko, idatzi PUK kodea. # saiakera geratzen zaizu SIMa betiko ez-erabilgarri geratu aurretik. Xehetasunak lortzeko, jarri operadorearekin harremanetan.}other{Orain, SIMa desgaituta dago. Aurrera egiteko, idatzi PUK kodea. # saiakera geratzen zaizkizu SIMa betiko ez-erabilgarri geratu aurretik. Xehetasunak lortzeko, jarri operadorearekin harremanetan.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Lehenetsia"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Puxikak"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogikoa"</string>
diff --git a/packages/SystemUI/res-keyguard/values-fa/strings.xml b/packages/SystemUI/res-keyguard/values-fa/strings.xml
index 6b90e89..ca22227 100644
--- a/packages/SystemUI/res-keyguard/values-fa/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-fa/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"گذرواژه خود را <xliff:g id="NUMBER_0">%1$d</xliff:g> بار اشتباه تایپ کردید. \n\nپس از <xliff:g id="NUMBER_1">%2$d</xliff:g> ثانیه دوباره امتحان کنید."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"الگوی بازگشایی قفل را <xliff:g id="NUMBER_0">%1$d</xliff:g> بار اشتباه کشیده‌اید. \n\nلطفاً پس‌از <xliff:g id="NUMBER_1">%2$d</xliff:g> ثانیه دوباره امتحان کنید."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"کد پین سیم‌کارت اشتباه است، اکنون برای باز کردن قفل دستگاهتان باید با شرکت مخابراتی تماس بگیرید."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">کد پین سیم‌کارت اشتباه است، <xliff:g id="NUMBER_1">%d</xliff:g> بار دیگر می‌توانید تلاش کنید.</item>
-      <item quantity="other">کد پین سیم‌کارت اشتباه است، <xliff:g id="NUMBER_1">%d</xliff:g> بار دیگر می‌توانید تلاش کنید.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{کد پین سیم‌کارت اشتباه است. # فرصت دیگر باقی مانده است و پس‌از آن برای باز کردن قفل دستگاه باید با شرکت مخابراتی‌تان تماس بگیرید.}one{کد پین سیم‌کارت اشتباه است، # فرصت دیگر دارید. }other{کد پین سیم‌کارت اشتباه است، # فرصت دیگر دارید. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"سیم‌کارت غیرقابل استفاده است. با شرکت مخابراتی‌تان تماس بگیرید."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">‏کد PUK سیم‌کارت اشتباه است، <xliff:g id="NUMBER_1">%d</xliff:g> بار دیگر می‌توانید تلاش کنید و پس از آن سیم‌کارت برای همیشه غیرقابل استفاده می‌شود.</item>
-      <item quantity="other">‏کد PUK سیم‌کارت اشتباه است، <xliff:g id="NUMBER_1">%d</xliff:g> بار دیگر می‌توانید تلاش کنید و پس از آن سیم‌کارت برای همیشه غیرقابل استفاده می‌شود.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{‏کد PUK سیم‌کارت اشتباه است، # فرصت دیگر باقی مانده است و پس‌از آن سیم‌کارت برای همیشه غیرقابل‌استفاده می‌شود.}one{‏کد PUK سیم‌کارت اشتباه است، # فرصت دیگر باقی مانده است و پس‌از آن سیم‌کارت برای همیشه غیرقابل‌استفاده می‌شود.}other{‏کد PUK سیم‌کارت اشتباه است، # فرصت دیگر باقی مانده است و پس‌از آن سیم‌کارت برای همیشه غیرقابل‌استفاده می‌شود.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"عملیات پین سیم‌کارت ناموفق بود!"</string>
     <string name="kg_password_puk_failed" msgid="6778867411556937118">"‏عملیات PUK سیم‌کارت ناموفق بود!"</string>
     <string name="accessibility_ime_switch_button" msgid="9082358310194861329">"تغییر روش ورودی"</string>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"دستگاه به‌صورت دستی قفل شده است"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"شناسایی نشد"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"برای استفاده از قفل‌گشایی با چهره، دسترسی دوربین را در تنظیمات روشن کنید"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">پین سیم‌کارت را وارد کنید. <xliff:g id="NUMBER_1">%d</xliff:g> تلاش دیگری باقی مانده است.</item>
-      <item quantity="other">پین سیم‌کارت را وارد کنید. <xliff:g id="NUMBER_1">%d</xliff:g> تلاش دیگری باقی مانده است.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">‏سیم‌کارت اکنون غیرفعال است. برای ادامه دادن کد PUK را وارد کنید. <xliff:g id="_NUMBER_1">%d</xliff:g> تلاش دیگر باقی مانده است و پس از آن سیم‌کارت برای همیشه غیرقابل‌استفاده می‌شود. برای اطلاع از جزئیات با شرکت مخابراتی تماس بگیرید.</item>
-      <item quantity="other">‏سیم‌کارت اکنون غیرفعال است. برای ادامه دادن کد PUK را وارد کنید. <xliff:g id="_NUMBER_1">%d</xliff:g> تلاش دیگر باقی مانده است و پس از آن سیم‌کارت برای همیشه غیرقابل‌استفاده می‌شود. برای اطلاع از جزئیات با شرکت مخابراتی تماس بگیرید.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{پین سیم‌کارت را وارد کنید. # فرصت دیگر باقی مانده است و پس‌از آن برای باز کردن قفل دستگاه باید با شرکت مخابراتی‌تان تماس بگیرید.}one{پین سیم‌کارت را وارد کنید. # فرصت دیگر باقی مانده است.}other{پین سیم‌کارت را وارد کنید. # فرصت دیگر باقی مانده است.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{‏سیم‌کارت اکنون غیرفعال است. برای ادامه دادن، کد PUK را وارد کنید. # فرصت دیگر باقی مانده است و پس‌از آن سیم‌کارت برای همیشه غیرقابل‌استفاده می‌شود. برای اطلاع از جزئیات، با شرکت مخابراتی تماس بگیرید.}one{‏سیم‌کارت اکنون غیرفعال است. برای ادامه دادن، کد PUK را وارد کنید. # فرصت دیگر باقی مانده است و پس‌از آن سیم‌کارت برای همیشه غیرقابل‌استفاده می‌شود. برای اطلاع از جزئیات، با شرکت مخابراتی تماس بگیرید.}other{‏سیم‌کارت اکنون غیرفعال است. برای ادامه دادن، کد PUK را وارد کنید. # فرصت دیگر باقی مانده است و پس‌از آن سیم‌کارت برای همیشه غیرقابل‌استفاده می‌شود. برای اطلاع از جزئیات، با شرکت مخابراتی تماس بگیرید.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"پیش‌فرض"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"حباب"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"آنالوگ"</string>
diff --git a/packages/SystemUI/res-keyguard/values-fi/strings.xml b/packages/SystemUI/res-keyguard/values-fi/strings.xml
index f8aa5de..da74b9a1 100644
--- a/packages/SystemUI/res-keyguard/values-fi/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-fi/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Olet kirjoittanut salasanan väärin <xliff:g id="NUMBER_0">%1$d</xliff:g> kertaa. \n\nYritä uudelleen <xliff:g id="NUMBER_1">%2$d</xliff:g> sekunnin kuluttua."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Olet piirtänyt lukituksenpoistokuvion väärin <xliff:g id="NUMBER_0">%1$d</xliff:g> kertaa. \n\nYritä uudelleen <xliff:g id="NUMBER_1">%2$d</xliff:g> sekunnin kuluttua."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Virheellinen SIM-kortin PIN-koodi. Sinun on nyt otettava yhteys operaattoriin laitteen lukituksen avaamiseksi."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">Virheellinen SIM-kortin PIN-koodi. Sinulla on <xliff:g id="NUMBER_1">%d</xliff:g> yritystä jäljellä.</item>
-      <item quantity="one">Virheellinen SIM-kortin PIN-koodi. Sinulla on <xliff:g id="NUMBER_0">%d</xliff:g> yritys jäljellä, ennen kuin sinun on otettava yhteys operaattoriin laitteen lukituksen avaamiseksi.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Virheellinen SIM-kortin PIN-koodi. Sinulla on # yritys jäljellä, ennen kuin sinun on otettava yhteys operaattoriin laitteen lukituksen avaamiseksi.}other{Virheellinen SIM-kortin PIN-koodi. Sinulla on # yritystä jäljellä. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM-korttia ei voi käyttää. Ota yhteys operaattoriin."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">Virheellinen SIM-kortin PUK-koodi. Sinulla on <xliff:g id="NUMBER_1">%d</xliff:g> yritystä jäljellä, ennen kuin SIM-kortista tulee pysyvästi käyttökelvoton.</item>
-      <item quantity="one">Virheellinen SIM-kortin PUK-koodi. Sinulla on <xliff:g id="NUMBER_0">%d</xliff:g> yritys jäljellä, ennen kuin SIM-kortista tulee pysyvästi käyttökelvoton.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Virheellinen SIM-kortin PUK-koodi. Sinulla on # yritys jäljellä, ennen kuin SIM-kortti poistuu käytöstä pysyvästi.}other{Virheellinen SIM-kortin PUK-koodi. Sinulla on # yritystä jäljellä, ennen kuin SIM-kortti poistuu käytöstä pysyvästi.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"SIM-kortin PIN-toiminto epäonnistui."</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Laite lukittiin manuaalisesti"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Ei tunnistettu"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Kasvojentunnistusavaus: Asetukset &gt; pääsy kameraan"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">Anna SIM-kortin PIN-koodi. Sinulla on <xliff:g id="NUMBER_1">%d</xliff:g> yritystä jäljellä.</item>
-      <item quantity="one">Anna SIM-kortin PIN-koodi. <xliff:g id="NUMBER_0">%d</xliff:g> yrityksen jälkeen laite lukittuu, ja vain operaattori voi avata sen.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM-kortti on nyt lukittu. Anna PUK-koodi, niin voit jatkaa. Sinulla on <xliff:g id="_NUMBER_1">%d</xliff:g> yritystä jäljellä, ennen kuin SIM-kortti poistuu pysyvästi käytöstä. Pyydä lisätietoja operaattoriltasi.</item>
-      <item quantity="one">SIM-kortti on nyt lukittu. Anna PUK-koodi, niin voit jatkaa. Sinulla on <xliff:g id="_NUMBER_0">%d</xliff:g> yritys jäljellä, ennen kuin SIM-kortti poistuu pysyvästi käytöstä. Pyydä lisätietoja operaattoriltasi.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Lisää SIM-kortin PIN-koodi. Sinulla on # yritys jäljellä, ennen kuin sinun on otettava yhteys operaattoriin laitteen lukituksen avaamiseksi.}other{Lisää SIM-kortin PIN-koodi. # yritystä jäljellä.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM-kortti on nyt lukittu. Lisää PUK-koodi, niin voit jatkaa. Sinulla on # yritys jäljellä, ennen kuin SIM-kortti poistuu käytöstä pysyvästi. Pyydä lisätietoa operaattoriltasi.}other{SIM-kortti on nyt lukittu. Lisää PUK-koodi, niin voit jatkaa. Sinulla on # yritystä jäljellä, ennen kuin SIM-kortti poistuu käytöstä pysyvästi. Pyydä lisätietoa operaattoriltasi.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Oletus"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Kupla"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analoginen"</string>
diff --git a/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml b/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml
index 0e98007..b8125032 100644
--- a/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Vous avez entré un mot de passe incorrect à <xliff:g id="NUMBER_0">%1$d</xliff:g> reprises.\n\nVeuillez réessayer dans <xliff:g id="NUMBER_1">%2$d</xliff:g> secondes."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Vous avez dessiné un schéma de déverrouillage incorrect à <xliff:g id="NUMBER_0">%1$d</xliff:g> reprises.\n\nVeuillez réessayer dans <xliff:g id="NUMBER_1">%2$d</xliff:g> secondes."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"NIP de carte SIM incorrect. Vous devez maintenant communiquer avec votre fournisseur de services pour déverrouiller votre appareil."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">Le NIP de la carte SIM incorrect. Il vous reste <xliff:g id="NUMBER_1">%d</xliff:g> tentative.</item>
-      <item quantity="other">Le NIP de la carte SIM incorrect. Il vous reste <xliff:g id="NUMBER_1">%d</xliff:g> tentatives.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{NIP de la carte SIM incorrect. Il vous reste # tentative. Après cela, vous devrez communiquer avec votre fournisseur de services pour déverrouiller votre appareil.}one{NIP de la carte SIM incorrect. Il vous reste # tentative. }other{NIP de la carte SIM incorrect. Il vous reste # tentatives. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"La carte SIM est inutilisable. Communiquez avec votre fournisseur de services."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">Le code PUK de la carte SIM est incorrect. Il vous reste <xliff:g id="NUMBER_1">%d</xliff:g> tentative avant que votre carte SIM devienne définitivement inutilisable.</item>
-      <item quantity="other">Le code PUK de la carte SIM est incorrect. Il vous reste <xliff:g id="NUMBER_1">%d</xliff:g> tentatives avant que votre carte SIM devienne définitivement inutilisable.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Code PUK de la carte SIM incorrect. Il vous reste # tentative avant que votre carte SIM devienne définitivement inutilisable.}one{Code PUK de la carte SIM incorrect. Il vous reste # tentative avant que votre carte SIM devienne définitivement inutilisable.}other{Code PUK de la carte SIM incorrect. Il vous reste # tentatives avant que votre carte SIM devienne définitivement inutilisable.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Le déverrouillage par NIP de la carte SIM a échoué."</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"L\'appareil a été verrouillé manuellement"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Doigt non reconnu"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Déverr. rec. faciale : activez accès app. photo dans Param."</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">Entrez le NIP de votre carte SIM. Il vous reste <xliff:g id="NUMBER_1">%d</xliff:g> tentative.</item>
-      <item quantity="other">Entrez le NIP de votre carte SIM. Il vous reste <xliff:g id="NUMBER_1">%d</xliff:g> tentatives.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">La carte SIM est maintenant désactivée. Entrez le code PUK pour continuer. Il vous reste <xliff:g id="_NUMBER_1">%d</xliff:g> tentative avant que votre carte SIM devienne définitivement inutilisable. Pour obtenir plus de détails, communiquez avec votre fournisseur de services.</item>
-      <item quantity="other">La carte SIM est maintenant désactivée. Entrez le code PUK pour continuer. Il vous reste <xliff:g id="_NUMBER_1">%d</xliff:g> tentatives avant que votre carte SIM devienne définitivement inutilisable. Pour obtenir plus de détails, communiquez avec votre fournisseur de services.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Entrez le NIP de la carte SIM. Il vous reste # tentative. Après cela, vous devrez communiquer avec votre fournisseur de services pour déverrouiller votre appareil.}one{Entrez le NIP de la carte SIM. Il vous reste # tentative.}other{Entrez le NIP de la carte SIM. Il vous reste # tentatives.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{La carte SIM est maintenant désactivée. Entrez le code PUK pour continuer. Il vous reste # tentative avant que votre carte SIM devienne définitivement inutilisable. Communiquez avec votre fournisseur de services pour en savoir plus.}one{La carte SIM est maintenant désactivée. Entrez le code PUK pour continuer. Il vous reste # tentative avant que votre carte SIM devienne définitivement inutilisable. Communiquez avec votre fournisseur de services pour en savoir plus.}other{La carte SIM est maintenant désactivée. Entrez le code PUK pour continuer. Il vous reste # tentatives avant que votre carte SIM devienne définitivement inutilisable. Communiquez avec votre fournisseur de services pour en savoir plus.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Par défaut"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bulle"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogique"</string>
diff --git a/packages/SystemUI/res-keyguard/values-fr/strings.xml b/packages/SystemUI/res-keyguard/values-fr/strings.xml
index cf79eab..0b21a40 100644
--- a/packages/SystemUI/res-keyguard/values-fr/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-fr/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Vous avez saisi un mot de passe incorrect à <xliff:g id="NUMBER_0">%1$d</xliff:g> reprises.\n\nRéessayez dans <xliff:g id="NUMBER_1">%2$d</xliff:g> secondes."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Vous avez dessiné un schéma de déverrouillage incorrect à <xliff:g id="NUMBER_0">%1$d</xliff:g> reprises.\n\nRéessayez dans <xliff:g id="NUMBER_1">%2$d</xliff:g> secondes."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Code PIN de la carte SIM incorrect. Vous devez désormais contacter votre opérateur pour déverrouiller votre appareil."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">Code PIN de la carte SIM incorrect. Il vous reste <xliff:g id="NUMBER_1">%d</xliff:g> tentative.</item>
-      <item quantity="other">Code PIN de la carte SIM incorrect. Il vous reste <xliff:g id="NUMBER_1">%d</xliff:g> tentatives.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Code PIN SIM incorrect. Il vous reste # tentative avant de devoir contacter votre opérateur pour déverrouiller l\'appareil.}one{Code PIN SIM incorrect. Il vous reste # tentative. }other{Code PIN SIM incorrect. Il vous reste # tentatives. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"La carte SIM est inutilisable. Contactez votre opérateur."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">Clé PUK de la carte SIM incorrecte. Il vous reste <xliff:g id="NUMBER_1">%d</xliff:g> tentative avant que votre carte SIM ne devienne définitivement inutilisable.</item>
-      <item quantity="other">Clé PUK de la carte SIM incorrecte. Il vous reste <xliff:g id="NUMBER_1">%d</xliff:g> tentatives avant que votre carte SIM ne devienne définitivement inutilisable.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Clé PUK de la SIM incorrecte. Il vous reste # tentative avant que la SIM ne devienne définitivement inutilisable.}one{Clé PUK de la SIM incorrecte. Il vous reste # tentative avant que la carte SIM ne devienne définitivement inutilisable.}other{Clé PUK de la SIM incorrecte. Il vous reste # tentatives avant que la carte SIM ne devienne définitivement inutilisable.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Échec du déverrouillage à l\'aide du code PIN de la carte SIM."</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Appareil verrouillé manuellement"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Non reconnu"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Pour le déverrouillage par reconnaissance faciale, activez l\'accès à l\'app. photo dans Paramètres"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">Saisissez le code de la carte SIM. <xliff:g id="NUMBER_1">%d</xliff:g> tentative restante.</item>
-      <item quantity="other">Saisissez le code de la carte SIM. <xliff:g id="NUMBER_1">%d</xliff:g> tentatives restantes.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">La carte SIM est maintenant désactivée. Saisissez le code PUK pour continuer. Il vous reste <xliff:g id="_NUMBER_1">%d</xliff:g> tentative avant que votre carte SIM ne devienne définitivement inutilisable. Pour de plus amples informations, veuillez contacter votre opérateur.</item>
-      <item quantity="other">La carte SIM est maintenant désactivée. Saisissez le code PUK pour continuer. Il vous reste <xliff:g id="_NUMBER_1">%d</xliff:g> tentatives avant que votre carte SIM ne devienne définitivement inutilisable. Pour de plus amples informations, veuillez contacter votre opérateur.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Saisissez le code PIN SIM. Il vous reste # tentative avant de devoir contacter votre opérateur pour déverrouiller l\'appareil.}one{Saisissez le code PIN SIM. Il vous reste # tentative.}other{Saisissez le code PIN SIM. Il vous reste # tentatives.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{La SIM est maintenant désactivée. Saisissez la clé PUK pour continuer. Il vous reste # tentative avant que la SIM ne devienne définitivement inutilisable. Pour plus d\'infos, contactez votre opérateur.}one{La SIM est maintenant désactivée. Saisissez la clé PUK pour continuer. Il vous reste # tentative avant que la SIM ne devienne définitivement inutilisable. Pour plus d\'infos, contactez votre opérateur.}other{La SIM est maintenant désactivée. Saisissez la clé PUK pour continuer. Il vous reste # tentatives avant que la SIM ne devienne définitivement inutilisable. Pour plus d\'infos, contactez votre opérateur.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Par défaut"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bulle"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogique"</string>
diff --git a/packages/SystemUI/res-keyguard/values-gl/strings.xml b/packages/SystemUI/res-keyguard/values-gl/strings.xml
index 0d06dd8..628a885 100644
--- a/packages/SystemUI/res-keyguard/values-gl/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-gl/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Introduciches o contrasinal incorrectamente <xliff:g id="NUMBER_0">%1$d</xliff:g> veces. \n\nTéntao de novo en <xliff:g id="NUMBER_1">%2$d</xliff:g> segundos."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Debuxaches incorrectamente o padrón de desbloqueo <xliff:g id="NUMBER_0">%1$d</xliff:g> veces. \n\nTéntao de novo en <xliff:g id="NUMBER_1">%2$d</xliff:g> segundos."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"O código PIN da SIM non é correcto. Agora debes contactar co operador para desbloquear o dispositivo."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">O código PIN da SIM é incorrecto. Quédanche <xliff:g id="NUMBER_1">%d</xliff:g> intentos.</item>
-      <item quantity="one">O código PIN da SIM é incorrecto. Quédache <xliff:g id="NUMBER_0">%d</xliff:g> intento antes de que teñas que contactar co operador para desbloquear o dispositivo.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{O código PIN da SIM é incorrecto. Quédache # intento antes de que teñas que contactar co operador para desbloquear o dispositivo.}other{O código PIN da SIM é incorrecto. Quédanche # intentos. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"A SIM está inutilizable. Contacta co operador."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">O código PUK da SIM é incorrecto. Quédanche <xliff:g id="NUMBER_1">%d</xliff:g> intentos antes de que a SIM quede inutilizable para sempre.</item>
-      <item quantity="one">O código PUK da SIM non é correcto. Quédache <xliff:g id="NUMBER_0">%d</xliff:g> intento antes de que a SIM quede inutilizable para sempre.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{O código PUK da SIM é incorrecto. Quédache # intento antes de que a SIM quede inutilizable para sempre.}other{O código PUK da SIM é incorrecto. Quédanche # intentos antes de que a SIM quede inutilizable para sempre.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Produciuse un erro no funcionamento do PIN da SIM"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"O dispositivo bloqueouse manualmente"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Non se recoñeceu"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"O Desbloqueo facial necesita acceso á cámara"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">Introduce o código PIN da SIM. Quédanche <xliff:g id="NUMBER_1">%d</xliff:g> intentos.</item>
-      <item quantity="one">Introduce o código PIN da SIM. Quédache <xliff:g id="NUMBER_0">%d</xliff:g> intento antes de que teñas que contactar co operador para desbloquear o dispositivo.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">A SIM está desactivada. Introduce o código PUK para continuar. Quédanche <xliff:g id="_NUMBER_1">%d</xliff:g> intentos antes de que a SIM quede inutilizable para sempre. Contacta co operador para obter información.</item>
-      <item quantity="one">A SIM está desactivada. Introduce o código PUK para continuar. Quédache <xliff:g id="_NUMBER_0">%d</xliff:g> intento antes de que a SIM quede inutilizable para sempre. Contacta co operador para obter información.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Mete o PIN da SIM. Quédache # intento antes de que teñas que contactar co operador para desbloquear o dispositivo.}other{Mete o PIN da SIM. Quédanche # intentos.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{A SIM está desactivada. Mete o código PUK para continuar. Quédache # intento antes de que a SIM quede inutilizable para sempre. Contacta co operador para obter información.}other{A SIM está desactivada. Mete o código PUK para continuar. Quédanche # intentos antes de que a SIM quede inutilizable para sempre. Contacta co operador para obter información.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Predeterminado"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Burbulla"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analóxico"</string>
diff --git a/packages/SystemUI/res-keyguard/values-gu/strings.xml b/packages/SystemUI/res-keyguard/values-gu/strings.xml
index 6142aa1..4dd994c 100644
--- a/packages/SystemUI/res-keyguard/values-gu/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-gu/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"તમારો પાસવર્ડ તમે <xliff:g id="NUMBER_0">%1$d</xliff:g> વખત ખોટી રીતે લખ્યો છે. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> સેકંડમાં ફરીથી પ્રયાસ કરો."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"તમારી અનલૉક પૅટર્ન તમે <xliff:g id="NUMBER_0">%1$d</xliff:g> વખત ખોટી રીતે દોરી છે. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> સેકન્ડમાં ફરીથી પ્રયાસ કરો."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"ખોટો સિમ પિન કોડ, તમારે હવે તમારું ઉપકરણ અનલૉક કરવા માટે તમારા કૅરીઅરનો સંપર્ક કરવો આવશ્યક છે."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">ખોટો સિમ પિન કોડ, તમારી પાસે <xliff:g id="NUMBER_1">%d</xliff:g> પ્રયાસ બાકી છે.</item>
-      <item quantity="other">ખોટો સિમ પિન કોડ, તમારી પાસે <xliff:g id="NUMBER_1">%d</xliff:g> પ્રયાસ બાકી છે.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{સિમ કાર્ડનો ખોટો પિન કોડ, તમને તમારું ડિવાઇસ અનલૉક કરવા માટે તમારા મોબાઇલ ઑપરેટરનો સંપર્ક કરવાની જરૂર પડે, તે પહેલાં તમારી પાસે # પ્રયાસ બાકી છે.}one{સિમ કાર્ડનો ખોટો પિન કોડ, તમારી પાસે # પ્રયાસ બાકી છે. }other{સિમ કાર્ડનો ખોટો પિન કોડ, તમારી પાસે # પ્રયાસ બાકી છે. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"સિમ અનુપયોગી છે. તમારા કૅરિઅરનો સંપર્ક કરો."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">ખોટો સિમ PUK કોડ, સિમ કાયમી રૂપે અનુપયોગી બની જાય તે પહેલા તમારી પાસે <xliff:g id="NUMBER_1">%d</xliff:g> પ્રયાસ બાકી છે.</item>
-      <item quantity="other">ખોટો સિમ PUK કોડ, સિમ કાયમી રૂપે અનુપયોગી બની જાય તે પહેલા તમારી પાસે <xliff:g id="NUMBER_1">%d</xliff:g> પ્રયાસ બાકી છે.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{સિમ કાર્ડનો ખોટો PUK કોડ, સિમ કાર્ડ કાયમ માટે બિનઉપયોગી બની જાય, એ પહેલાં તમારી પાસે # પ્રયાસ બાકી છે.}one{સિમ કાર્ડનો ખોટો PUK કોડ, સિમ કાર્ડ કાયમ માટે બિનઉપયોગી બની જાય, એ પહેલાં તમારી પાસે # પ્રયાસ બાકી છે.}other{સિમ કાર્ડનો ખોટો PUK કોડ, સિમ કાર્ડ કાયમ માટે બિનઉપયોગી બની જાય, એ પહેલાં તમારી પાસે # પ્રયાસ બાકી છે.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"સિમ પિન ઑપરેશન નિષ્ફળ થયું!"</string>
     <string name="kg_password_puk_failed" msgid="6778867411556937118">"સિમ PUK ઓપરેશન નિષ્ફળ થયું!"</string>
     <string name="accessibility_ime_switch_button" msgid="9082358310194861329">"ઇનપુટ પદ્ધતિ સ્વિચ કરો"</string>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"ઉપકરણ મેન્યુઅલી લૉક કર્યું હતું"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"ઓળખાયેલ નથી"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"ફેસ અનલૉક વાપરવા સેટિંગમાં કૅમેરા ઍક્સેસ ચાલુ કરો"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">સિમનો પિન દાખલ કરો, તમારી પાસે <xliff:g id="NUMBER_1">%d</xliff:g> પ્રયાસ બાકી છે.</item>
-      <item quantity="other">સિમનો પિન દાખલ કરો, તમારી પાસે <xliff:g id="NUMBER_1">%d</xliff:g> પ્રયાસો બાકી છે.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">સિમ હવે બંધ કરેલ છે. ચાલુ રાખવા માટે PUK કોડ દાખલ કરો. સિમ કાયમીરૂપે બિનઉપયોગી બની જાય એ પહેલાં તમારી પાસે <xliff:g id="_NUMBER_1">%d</xliff:g> પ્રયાસ બાકી છે. વિગતો માટે કૅરિઅરનો સંપર્ક કરો.</item>
-      <item quantity="other">સિમ હવે બંધ કરેલ છે. ચાલુ રાખવા માટે PUK કોડ દાખલ કરો. સિમ કાયમીરૂપે બિનઉપયોગી બની જાય એ પહેલાં તમારી પાસે <xliff:g id="_NUMBER_1">%d</xliff:g> પ્રયાસો બાકી છે. વિગતો માટે કૅરિઅરનો સંપર્ક કરો.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{સિમ કાર્ડનો પિન દાખલ કરો. તમને તમારું ડિવાઇસ અનલૉક કરવા માટે તમારા મોબાઇલ ઑપરેટરનો સંપર્ક કરવાની જરૂર પડે, તે પહેલાં તમારી પાસે # પ્રયાસ બાકી છે.}one{સિમ કાર્ડનો પિન દાખલ કરો. તમારી પાસે # પ્રયાસ બાકી છે.}other{સિમ કાર્ડનો પિન દાખલ કરો. તમારી પાસે # પ્રયાસ બાકી છે.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{સિમ કાર્ડ બંધ કરેલું છે. ચાલુ રાખવા માટે PUK કોડ દાખલ કરો. સિમ કાર્ડ કાયમ માટે બિનઉપયોગી બની જાય, એ પહેલાં તમારી પાસે # પ્રયાસ બાકી છે. વિગતો માટે મોબાઇલ ઑપરેટરનો સંપર્ક કરો.}one{સિમ કાર્ડ બંધ કરેલું છે. ચાલુ રાખવા માટે PUK કોડ દાખલ કરો. સિમ કાર્ડ કાયમ માટે બિનઉપયોગી બની જાય, એ પહેલાં તમારી પાસે # પ્રયાસ બાકી છે. વિગતો માટે મોબાઇલ ઑપરેટરનો સંપર્ક કરો.}other{સિમ કાર્ડ બંધ કરેલું છે. ચાલુ રાખવા માટે PUK કોડ દાખલ કરો. સિમ કાર્ડ કાયમ માટે બિનઉપયોગી બની જાય, એ પહેલાં તમારી પાસે # પ્રયાસ બાકી છે. વિગતો માટે મોબાઇલ ઑપરેટરનો સંપર્ક કરો.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"ડિફૉલ્ટ"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"બબલ"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"એનાલોગ"</string>
diff --git a/packages/SystemUI/res-keyguard/values-hi/strings.xml b/packages/SystemUI/res-keyguard/values-hi/strings.xml
index 742493a..44a9c0e 100644
--- a/packages/SystemUI/res-keyguard/values-hi/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-hi/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"आप अपना पासवर्ड <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से लिख चुके हैं. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंड में फिर से कोशिश करें."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"आपने अपने लॉक खोलने के पैटर्न को <xliff:g id="NUMBER_0">%1$d</xliff:g> बार गलत तरीके से ड्रॉ किया है. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंड में फिर से कोशिश करें."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"गलत SIM पिन कोड, अपने डिवाइस को अनलॉक करने के लिए अब आपको अपनी मोबाइल और इंटरनेट सेवा देने वाली कंपनी से संपर्क करना होगा."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">गलत सिम पिन कोड, आप <xliff:g id="NUMBER_1">%d</xliff:g> बार और कोशिश कर सकते हैं.</item>
-      <item quantity="other">गलत सिम पिन कोड, आप <xliff:g id="NUMBER_1">%d</xliff:g> बार और कोशिश कर सकते हैं.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{आपने सिम का गलत पिन कोड डाला है. आपके पास # मौका बचा है. अगर फिर भी डिवाइस अनलॉक नहीं होता है, तो आपको मोबाइल और इंटरनेट सेवा देने वाली कंपनी से संपर्क करना होगा.}one{आपने सिम का गलत पिन कोड डाला है. आपके पास # मौका बचा है. }other{आपने सिम का गलत पिन कोड डाला है. आपके पास # मौके बचे हैं. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM बेकार हो गया है. अपनी मोबाइल और इंटरनेट सेवा देने वाली कंपनी से संपर्क करें."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">SIM PUK कोड गलत है, SIM के हमेशा के लिए बेकार हो जाने से पहले आप <xliff:g id="NUMBER_1">%d</xliff:g> बार और कोशिश कर सकते हैं.</item>
-      <item quantity="other">SIM PUK कोड गलत है, SIM के हमेशा के लिए बेकार हो जाने से पहले आप <xliff:g id="NUMBER_1">%d</xliff:g> बार और कोशिश कर सकते हैं.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{आपने सिम का गलत PUK कोड डाला है. आपके पास # मौका बचा है. इसके बाद, सिम हमेशा के लिए बंद हो जाएगा.}one{आपने सिम का गलत PUK कोड डाला है. आपके पास # मौका बचा है. इसके बाद, सिम हमेशा के लिए बंद हो जाएगा.}other{आपने सिम का गलत PUK कोड डाला है. आपके पास # मौके बचे हैं. इसके बाद, सिम हमेशा के लिए बंद हो जाएगा.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"SIM पिन की कार्यवाही विफल रही!"</string>
     <string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM PUK की कार्यवाही विफल रही!"</string>
     <string name="accessibility_ime_switch_button" msgid="9082358310194861329">"इनपुट का तरीका बदलें"</string>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"डिवाइस को मैन्युअल रूप से लॉक किया गया था"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"पहचान नहीं हो पाई"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"\'फ़ेस अनलॉक\' इस्तेमाल करने के लिए, सेटिंग में जाकर कैमरे का ऐक्सेस चालू करें"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">सिम का पिन डालें. आपके पास <xliff:g id="NUMBER_1">%d</xliff:g> मौके बचे हैं.</item>
-      <item quantity="other">सिम का पिन डालें. आपके पास <xliff:g id="NUMBER_1">%d</xliff:g> मौके बचे हैं.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">सिम बंद कर दिया गया है. जारी रखने के लिए PUK कोड डालें. आपके पास <xliff:g id="_NUMBER_1">%d</xliff:g> मौके बचे हैं, उसके बाद, सिम हमेशा के लिए काम करना बंद कर देगा. जानकारी के लिए, मोबाइल और इंटरनेट सेवा देने वाली कंपनी से संपर्क करें.</item>
-      <item quantity="other">सिम बंद कर दिया गया है. जारी रखने के लिए PUK कोड डालें. आपके पास <xliff:g id="_NUMBER_1">%d</xliff:g> मौके बचे हैं, उसके बाद, सिम हमेशा के लिए काम करना बंद कर देगा. जानकारी के लिए, मोबाइल और इंटरनेट सेवा देने वाली कंपनी से संपर्क करें.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{सिम का पिन डालें. आपके पास # मौका बचा है. अगर फिर भी डिवाइस अनलॉक नहीं होता है, तो आपको मोबाइल और इंटरनेट सेवा देने वाली कंपनी से संपर्क करना होगा.}one{सिम का पिन डालें. आपके पास # मौका बचा है.}other{सिम का पिन डालें. आपके पास # मौके बचे हैं.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{सिम बंद कर दिया गया है. जारी रखने के लिए PUK कोड डालें. आपके पास # मौका बचा है. इसके बाद, सिम हमेशा के लिए बंद हो जाएगा. ज़्यादा जानकारी के लिए, मोबाइल और इंटरनेट सेवा देने वाली कंपनी से संपर्क करें.}one{सिम बंद कर दिया गया है. जारी रखने के लिए PUK कोड डालें. आपके पास # मौका बचा है. इसके बाद, सिम हमेशा के लिए बंद हो जाएगा. ज़्यादा जानकारी के लिए, मोबाइल और इंटरनेट सेवा देने वाली कंपनी से संपर्क करें.}other{सिम बंद कर दिया गया है. जारी रखने के लिए PUK कोड डालें. आपके पास # मौके बचे हैं. इसके बाद, सिम हमेशा के लिए बंद हो जाएगा. ज़्यादा जानकारी के लिए, मोबाइल और इंटरनेट सेवा देने वाली कंपनी से संपर्क करें.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"डिफ़ॉल्ट"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"बबल"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"एनालॉग"</string>
diff --git a/packages/SystemUI/res-keyguard/values-hr/strings.xml b/packages/SystemUI/res-keyguard/values-hr/strings.xml
index 292bfd1..299d811 100644
--- a/packages/SystemUI/res-keyguard/values-hr/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-hr/strings.xml
@@ -68,17 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Netočno ste unijeli zaporku <xliff:g id="NUMBER_0">%1$d</xliff:g> put/a. \n\nPokušajte ponovo za <xliff:g id="NUMBER_1">%2$d</xliff:g> s."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Netočno ste iscrtali uzorak za otključavanje <xliff:g id="NUMBER_0">%1$d</xliff:g> put/a. \n\nPokušajte ponovo za <xliff:g id="NUMBER_1">%2$d</xliff:g> s."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Netočan PIN kôd SIM kartice; sada morate kontaktirati svog mobilnog operatera da bi otključao vaš uređaj."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">PIN kôd SIM-a nije točan. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaj.</item>
-      <item quantity="few">PIN kôd SIM-a nije točan. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja.</item>
-      <item quantity="other">PIN kôd SIM-a nije točan. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{PIN kôd SIM-a nije točan. Imate još # pokušaj, a zatim ćete morati kontaktirati mobilnog operatera da bi otključao uređaj.}one{PIN kôd SIM-a nije točan. Imate još # pokušaj. }few{PIN kôd SIM-a nije točan. Imate još # pokušaja. }other{PIN kôd SIM-a nije točan. Imate još # pokušaja. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM kartica nije upotrebljiva. Kontaktirajte svog mobilnog operatera."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">PUK kôd SIM-a nije točan. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaj, a ako ne uspijete, SIM će postati trajno neupotrebljiv.</item>
-      <item quantity="few">PUK kôd SIM-a nije točan. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja, a ako ne uspijete, SIM će postati trajno neupotrebljiv.</item>
-      <item quantity="other">PUK kôd SIM-a nije točan. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja, a ako ne uspijete, SIM će postati trajno neupotrebljiv.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{PUK kôd SIM-a nije točan. Imate još # pokušaj prije nego što SIM kartica postane trajno neupotrebljiva.}one{PUK kôd SIM-a nije točan. Imate još # pokušaj prije nego što SIM kartica postane trajno neupotrebljiva.}few{PUK kôd SIM-a nije točan. Imate još # pokušaja prije nego što SIM kartica postane trajno neupotrebljiva.}other{PUK kôd SIM-a nije točan. Imate još # pokušaja prije nego što SIM kartica postane trajno neupotrebljiva.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Operacija PIN-a SIM kartice nije uspjela!"</string>
     <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>
@@ -93,16 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Uređaj je ručno zaključan"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nije prepoznato"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Za otključavanje licem uključite pristup kameri"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">Unesite PIN za SIM. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaj.</item>
-      <item quantity="few">Unesite PIN za SIM. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja.</item>
-      <item quantity="other">Unesite PIN za SIM. Imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">SIM je sada onemogućen. Unesite PUK kôd da biste nastavili. Imate još <xliff:g id="_NUMBER_1">%d</xliff:g> pokušaj prije nego što SIM kartica postane trajno neupotrebljiva. Više informacija zatražite od mobilnog operatera.</item>
-      <item quantity="few">SIM je sada onemogućen. Unesite PUK kôd da biste nastavili. Imate još <xliff:g id="_NUMBER_1">%d</xliff:g> pokušaja prije nego što SIM kartica postane trajno neupotrebljiva. Više informacija zatražite od mobilnog operatera.</item>
-      <item quantity="other">SIM je sada onemogućen. Unesite PUK kôd da biste nastavili. Imate još <xliff:g id="_NUMBER_1">%d</xliff:g> pokušaja prije nego što SIM kartica postane trajno neupotrebljiva. Više informacija zatražite od mobilnog operatera.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Unesite PIN za SIM. Imate još # pokušaj, a zatim ćete morati kontaktirati mobilnog operatera da bi otključao uređaj.}one{Unesite PIN za SIM. Imate još # pokušaj.}few{Unesite PIN za SIM. Imate još # pokušaja.}other{Unesite PIN za SIM. Imate još # pokušaja.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM je sada onemogućen. Unesite PUK kôd da biste nastavili. Imate još # pokušaj prije nego što SIM kartica postane trajno neupotrebljiva. Više informacija zatražite od mobilnog operatera.}one{SIM je sada onemogućen. Unesite PUK kôd da biste nastavili. Imate još # pokušaj prije nego što SIM kartica postane trajno neupotrebljiva. Više informacija zatražite od mobilnog operatera.}few{SIM je sada onemogućen. Unesite PUK kôd da biste nastavili. Imate još # pokušaja prije nego što SIM kartica postane trajno neupotrebljiva. Više informacija zatražite od mobilnog operatera.}other{SIM je sada onemogućen. Unesite PUK kôd da biste nastavili. Imate još # pokušaja prije nego što SIM kartica postane trajno neupotrebljiva. Više informacija zatražite od mobilnog operatera.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Zadano"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Mjehurić"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogni"</string>
diff --git a/packages/SystemUI/res-keyguard/values-hu/strings.xml b/packages/SystemUI/res-keyguard/values-hu/strings.xml
index b647f16..6201e95 100644
--- a/packages/SystemUI/res-keyguard/values-hu/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-hu/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"<xliff:g id="NUMBER_0">%1$d</xliff:g> alkalommal helytelenül adta meg a jelszót.\n\nPróbálja újra <xliff:g id="NUMBER_1">%2$d</xliff:g> másodperc múlva."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"<xliff:g id="NUMBER_0">%1$d</xliff:g> alkalommal rosszul rajzolta le a feloldási mintát.\n\nPróbálja újra <xliff:g id="NUMBER_1">%2$d</xliff:g> másodperc múlva."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Helytelen PIN-kód a SIM-kártyához. Az eszköz feloldása érdekében, kérjük, vegye fel a kapcsolatot szolgáltatójával."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">Helytelen PIN-kód a SIM-kártyához. Még <xliff:g id="NUMBER_1">%d</xliff:g> próbálkozása maradt.</item>
-      <item quantity="one">Helytelen PIN-kód a SIM-kártyához. Még <xliff:g id="NUMBER_0">%d</xliff:g> próbálkozása maradt, az eszköz feloldásához azt követően fel kell vennie a kapcsolatot szolgáltatójával.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Helytelen PIN-kód a SIM-kártyához; még # próbálkozása van, mielőtt fel kell vennie a kapcsolatot szolgáltatójával az eszköz feloldásához.}other{Helytelen PIN-kód a SIM-kártyához; még # próbálkozása van. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"A SIM-kártya használhatatlan. Vegye fel a kapcsolatot szolgáltatójával."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">Helytelen PUK-kód a SIM-kártyához. Még <xliff:g id="NUMBER_1">%d</xliff:g> próbálkozása maradt, mielőtt a SIM-kártya végleg használhatatlanná válik.</item>
-      <item quantity="one">Helytelen PUK-kód a SIM-kártyához. Még <xliff:g id="NUMBER_0">%d</xliff:g> próbálkozása maradt, mielőtt a SIM-kártya végleg használhatatlanná válik.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Helytelen PUK-kód a SIM-kártyához. Még # próbálkozása maradt, mielőtt a SIM-kártya végleg használhatatlanná válik.}other{Helytelen PUK-kód a SIM-kártyához; még # próbálkozása van, mielőtt a SIM-kártya végleg használhatatlan lesz.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"A SIM-kártya PIN-művelete sikertelen!"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Az eszközt manuálisan lezárták"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nem ismerhető fel"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Arcalapú feloldáshoz Hozzáférés a kamerához szükséges"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">Adja meg a SIM-kártya PIN-kódját. <xliff:g id="NUMBER_1">%d</xliff:g> próbálkozása maradt.</item>
-      <item quantity="one">Adja meg a SIM-kártya PIN-kódját. <xliff:g id="NUMBER_0">%d</xliff:g> próbálkozása maradt. Ha elfogynak a próbálkozási lehetőségek, az eszköz feloldásához fel kell vennie a kapcsolatot szolgáltatójával.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">A SIM-kártya le van tiltva. A folytatáshoz adja meg a PUK-kódot. Még <xliff:g id="_NUMBER_1">%d</xliff:g> próbálkozása van, mielőtt végleg használhatatlanná válik a SIM-kártya. További információért forduljon a szolgáltatóhoz.</item>
-      <item quantity="one">A SIM-kártya le van tiltva. A folytatáshoz adja meg a PUK-kódot. Még <xliff:g id="_NUMBER_0">%d</xliff:g> próbálkozása van, mielőtt végleg használhatatlanná válik a SIM-kártya. További információért forduljon a szolgáltatóhoz.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Adja meg a SIM-kártya PIN-kódját. # próbálkozása maradt. Ha elfogynak a próbálkozási lehetőségek, az eszköz feloldásához fel kell vennie a kapcsolatot szolgáltatójával.}other{Adja meg a SIM-kártya PIN-kódját. # próbálkozási lehetősége maradt.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{A SIM-kártya le van tiltva. A folytatáshoz adja meg a PUK-kódot. Még # próbálkozása van, mielőtt végleg használhatatlanná válik a SIM-kártya. További információért forduljon a szolgáltatóhoz.}other{A SIM-kártya le van tiltva. A folytatáshoz adja meg a PUK-kódot. Még # próbálkozása van, mielőtt végleg használhatatlanná válik a SIM-kártya. További információért forduljon a szolgáltatóhoz.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Alapértelmezett"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Buborék"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analóg"</string>
diff --git a/packages/SystemUI/res-keyguard/values-hy/strings.xml b/packages/SystemUI/res-keyguard/values-hy/strings.xml
index 2af6e7b..5d65da0 100644
--- a/packages/SystemUI/res-keyguard/values-hy/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-hy/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Դուք սխալ եք մուտքագրել ձեր գաղտնաբառը <xliff:g id="NUMBER_0">%1$d</xliff:g> անգամ: \n\nՓորձեք կրկին <xliff:g id="NUMBER_1">%2$d</xliff:g> վայրկյանից:"</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Դուք սխալ եք մուտքագրել ձեր ապակողպման նախշը <xliff:g id="NUMBER_0">%1$d</xliff:g> անգամ: \n\nՓորձեք կրկին <xliff:g id="NUMBER_1">%2$d</xliff:g> վայրկյանից։"</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"SIM PIN կոդը սխալ է։ Այժմ պետք է դիմեք ձեր օպերատորին՝ սարքն արգելահանելու համար:"</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">SIM PIN կոդը սխալ է: Մնաց <xliff:g id="NUMBER_1">%d</xliff:g> փորձ, որից հետո պետք է դիմեք ձեր օպերատորին՝ սարքն արգելահանելու համար:</item>
-      <item quantity="other">SIM PIN կոդը սխալ է: Մնաց <xliff:g id="NUMBER_1">%d</xliff:g> փորձ:</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{SIM քարտի PIN կոդը սխալ է։ Մնաց # փորձ, որից հետո պետք է դիմեք ձեր օպերատորին՝ սարքն ապակողպելու համար։}one{SIM քարտի PIN կոդը սխալ է։ Մնաց # փորձ։ }other{SIM քարտի PIN կոդը սխալ է։ Մնաց # փորձ։ }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM-ը հնարավոր չէ օգտագործել: Դիմեք ձեր օպերատորին:"</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">SIM PUK կոդը սխալ է: Մնաց <xliff:g id="NUMBER_1">%d</xliff:g> փորձ, որից հետո SIM քարտն այլևս հնարավոր չի լինի օգտագործել:</item>
-      <item quantity="other">SIM PUK կոդը սխալ է: Մնաց <xliff:g id="NUMBER_1">%d</xliff:g> փորձ, որից հետո SIM քարտն այլևս հնարավոր չի լինի օգտագործել:</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{SIM քարտի PUK կոդը սխալ է։ Մնաց # փորձ, որից հետո SIM քարտն այլևս հնարավոր չի լինի օգտագործել։}one{SIM քարտի PUK կոդը սխալ է։ Մնաց # փորձ, որից հետո SIM քարտն այլևս հնարավոր չի լինի օգտագործել։}other{SIM քարտի PUK կոդը սխալ է։ Մնաց # փորձ, որից հետո SIM քարտն այլևս հնարավոր չի լինի օգտագործել։}}"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Սարքը կողպվել է ձեռքով"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Չհաջողվեց ճանաչել"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Դեմքով ապակողպման համար թույլատրեք տեսախցիկի օգտագործումը"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">Մուտքագրեք SIM քարտի PIN կոդը: Մնացել է <xliff:g id="NUMBER_1">%d</xliff:g> փորձ:</item>
-      <item quantity="other">Մուտքագրեք SIM քարտի PIN կոդը: Մնացել է <xliff:g id="NUMBER_1">%d</xliff:g> փորձ:</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">SIM քարտն անջատված է: Շարունակելու համար մուտքագրեք PUK կոդը: Մնացել է <xliff:g id="_NUMBER_1">%d</xliff:g> փորձ, որից հետո SIM քարտն այլևս հնարավոր չի լինի օգտագործել: Մանրամասների համար դիմեք օպերատորին:</item>
-      <item quantity="other">SIM քարտն անջատված է: Շարունակելու համար մուտքագրեք PUK կոդը: Մնացել է <xliff:g id="_NUMBER_1">%d</xliff:g> փորձ, որից հետո SIM քարտն այլևս հնարավոր չի լինի օգտագործել: Մանրամասների համար դիմեք օպերատորին:</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Մուտքագրեք SIM քարտի PIN կոդը։ Մնացել է # փորձ, որից հետո պետք է դիմեք ձեր օպերատորին՝ սարքն ապակողպելու համար։}one{Մուտքագրեք SIM քարտի PIN կոդը։ Մնացել է # փորձ։}other{Մուտքագրեք SIM քարտի PIN կոդը։ Մնացել է # փորձ։}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM քարտն այժմ անջատված է։ Շարունակելու համար մուտքագրեք PUK կոդը։ Մնացել է # փորձ, որից հետո SIM քարտն այլևս հնարավոր չի լինի օգտագործել։ Մանրամասների համար դիմեք օպերատորին։}one{SIM քարտն այժմ անջատված է։ Շարունակելու համար մուտքագրեք PUK կոդը։ Մնացել է # փորձ, որից հետո SIM քարտն այլևս հնարավոր չի լինի օգտագործել։ Մանրամասների համար դիմեք օպերատորին։}other{SIM քարտն այժմ անջատված է։ Շարունակելու համար մուտքագրեք PUK կոդը։ Մնացել է # փորձ, որից հետո SIM քարտն այլևս հնարավոր չի լինի օգտագործել։ Մանրամասների համար դիմեք օպերատորին։}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Կանխադրված"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Պղպջակ"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Անալոգային"</string>
diff --git a/packages/SystemUI/res-keyguard/values-in/strings.xml b/packages/SystemUI/res-keyguard/values-in/strings.xml
index 1bd0db2..c42f5eb 100644
--- a/packages/SystemUI/res-keyguard/values-in/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-in/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Anda telah <xliff:g id="NUMBER_0">%1$d</xliff:g> kali salah mengetik sandi. \n\nCoba lagi dalam <xliff:g id="NUMBER_1">%2$d</xliff:g> detik."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Anda telah <xliff:g id="NUMBER_0">%1$d</xliff:g> kali salah menggambar pola pembuka kunci. \n\nCoba lagi dalam <xliff:g id="NUMBER_1">%2$d</xliff:g> detik."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Kode PIN SIM salah. Hubungi operator untuk membuka kunci perangkat."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">Kode PIN SIM salah, sisa, sisa <xliff:g id="NUMBER_1">%d</xliff:g> percobaan.</item>
-      <item quantity="one">Kode PIN SIM salah, sisa <xliff:g id="NUMBER_0">%d</xliff:g> percobaan sebelum Anda harus menghubungi operator untuk membuka kunci perangkat.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Kode PIN SIM salah. Tersisa # percobaan lagi sebelum Anda harus menghubungi operator untuk membuka kunci perangkat.}other{Kode PIN SIM salah, tersisa # percobaan lagi. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM tidak dapat digunakan. Hubungi operator Anda."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">Kode PUK SIM salah, sisa <xliff:g id="NUMBER_1">%d</xliff:g> percobaan sebelum SIM tidak dapat digunakan selamanya.</item>
-      <item quantity="one">Kode PUK SIM salah, sisa <xliff:g id="NUMBER_0">%d</xliff:g> percobaan sebelum SIM tidak dapat digunakan selamanya.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Kode PUK SIM salah, tersisa # percobaan lagi sebelum SIM tidak dapat digunakan secara permanen.}other{Kode PUK SIM salah, tersisa # percobaan lagi sebelum SIM tidak dapat digunakan secara permanen.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Operasi PIN SIM gagal!"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Perangkat dikunci secara manual"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Tidak dikenali"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Untuk pakai Face Unlock, beri akses kamera di Setelan"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">Masukkan PIN SIM. Tersisa <xliff:g id="NUMBER_1">%d</xliff:g> percobaan.</item>
-      <item quantity="one">Masukkan PIN SIM. Tersisa <xliff:g id="NUMBER_0">%d</xliff:g> percobaan sebelum Anda harus menghubungi operator untuk membuka kunci perangkat.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM kini dinonaktifkan. Masukkan kode PUK untuk melanjutkan. Tersisa <xliff:g id="_NUMBER_1">%d</xliff:g> percobaan sebelum SIM tidak dapat digunakan secara permanen. Hubungi operator untuk mengetahui detailnya.</item>
-      <item quantity="one">SIM kini dinonaktifkan. Masukkan kode PUK untuk melanjutkan. Tersisa <xliff:g id="_NUMBER_0">%d</xliff:g> percobaan sebelum SIM tidak dapat digunakan secara permanen. Hubungi operator untuk mengetahui detailnya.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Masukkan PIN SIM. Tersisa # percobaan lagi sebelum Anda harus menghubungi operator untuk membuka kunci perangkat.}other{Masukkan PIN SIM. Tersisa # percobaan lagi.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM kini dinonaktifkan. Masukkan kode PUK untuk melanjutkan. Tersisa # percobaan lagi sebelum SIM tidak dapat digunakan secara permanen. Hubungi operator untuk mengetahui detailnya.}other{SIM kini dinonaktifkan. Masukkan kode PUK untuk melanjutkan. Tersisa # percobaan lagi sebelum SIM tidak dapat digunakan secara permanen. Hubungi operator untuk mengetahui detailnya.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Default"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Balon"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analog"</string>
diff --git a/packages/SystemUI/res-keyguard/values-is/strings.xml b/packages/SystemUI/res-keyguard/values-is/strings.xml
index fc3af84..ea1a8ee 100644
--- a/packages/SystemUI/res-keyguard/values-is/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-is/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Þú hefur slegið inn rangt aðgangsorð <xliff:g id="NUMBER_0">%1$d</xliff:g> sinnum. \n\nReyndu aftur eftir <xliff:g id="NUMBER_1">%2$d</xliff:g> sekúndur."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Þú hefur teiknað rangt opnunarmynstur <xliff:g id="NUMBER_0">%1$d</xliff:g> sinnum. \n\nReyndu aftur eftir <xliff:g id="NUMBER_1">%2$d</xliff:g> sekúndur."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Rangt PIN-númer SIM-korts. Nú þarftu að hafa samband við símafyrirtækið til að opna fyrir tækið."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">Rangt PIN-númer SIM-korts. Þú átt <xliff:g id="NUMBER_1">%d</xliff:g> tilraun eftir.</item>
-      <item quantity="other">Rangt PIN-númer SIM-korts. Þú átt <xliff:g id="NUMBER_1">%d</xliff:g> tilraunir eftir.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Rangt PIN-númer SIM-korts. Þú átt # tilraun eftir áður en þú þarft að hafa samband við símafyrirtækið þitt til að taka tækið úr lás.}one{Rangt PIN-númer SIM-korts. Þú átt # tilraun eftir. }other{Rangt PIN-númer SIM-korts. Þú átt # tilraunir eftir. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM-kortið er ónothæft. Hafðu samband við símafyrirtækið þitt."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">Rangt PUK-númer SIM-korts. Þú átt <xliff:g id="NUMBER_1">%d</xliff:g> tilraun eftir áður en SIM-kortið verður ónothæft til frambúðar.</item>
-      <item quantity="other">Rangt PUK-númer SIM-korts. Þú átt <xliff:g id="NUMBER_1">%d</xliff:g> tilraunir eftir áður en SIM-kortið verður ónothæft til frambúðar.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Rangt PUK-númer SIM-korts. Þú átt # tilraun eftir áður en SIM-kortið verður ónothæft til frambúðar.}one{Rangt PUK-númer SIM-korts. Þú átt # tilraun eftir áður en SIM-kortið verður ónothæft til frambúðar.}other{Rangt PUK-númer SIM-korts. Þú átt # tilraunir eftir áður en SIM-kortið verður ónothæft til frambúðar.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"PIN-aðgerð SIM-korts mistókst!"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Tækinu var læst handvirkt"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Þekktist ekki"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Kveiktu á myndavélaaðgangi í stillingum til að nota andlitskenni"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">Sláðu inn PIN-númer SIM-korts. Þú átt <xliff:g id="NUMBER_1">%d</xliff:g> tilraun eftir.</item>
-      <item quantity="other">Sláðu inn PIN-númer SIM-korts. Þú átt <xliff:g id="NUMBER_1">%d</xliff:g> tilraunir eftir.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">SIM-kortið er nú óvirkt. Sláðu inn PUK-númer til að halda áfram. Það er <xliff:g id="_NUMBER_1">%d</xliff:g> tilraun eftir þar til SIM-kortið verður ónothæft til frambúðar. Hafðu samband við símafyrirtækið til að fá upplýsingar.</item>
-      <item quantity="other">SIM-kortið er nú óvirkt. Sláðu inn PUK-númer til að halda áfram. Það eru <xliff:g id="_NUMBER_1">%d</xliff:g> tilraunir eftir þar til SIM-kortið verður ónothæft til frambúðar. Hafðu samband við símafyrirtækið til að fá upplýsingar.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Sláðu inn PIN-númer SIM-korts. Þú átt # tilraun eftir áður en þú þarft að hafa samband við símafyrirtækið þitt til að taka tækið úr lás.}one{Sláðu inn PIN-númer SIM-kortsins. Þú átt # tilraun eftir.}other{Sláðu inn PIN-númer SIM-kortsins. Þú átt # tilraunir eftir.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM-kortið er nú óvirkt. Sláðu inn PUK-númer til að halda áfram. Þú átt # tilraun eftir þar til SIM-kortið verður ónothæft til frambúðar. Hafðu samband við símafyrirtækið til að fá upplýsingar.}one{SIM-kortið er nú óvirkt. Sláðu inn PUK-númer til að halda áfram. Þú átt # tilraun eftir þar til SIM-kortið verður ónothæft til frambúðar. Hafðu samband við símafyrirtækið til að fá upplýsingar.}other{SIM-kortið er nú óvirkt. Sláðu inn PUK-númer til að halda áfram. Þú átt # tilraunir eftir þar til SIM-kortið verður ónothæft til frambúðar. Hafðu samband við símafyrirtækið til að fá upplýsingar.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Sjálfgefið"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Blaðra"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Með vísum"</string>
diff --git a/packages/SystemUI/res-keyguard/values-it/strings.xml b/packages/SystemUI/res-keyguard/values-it/strings.xml
index 81138f1..f1583b1 100644
--- a/packages/SystemUI/res-keyguard/values-it/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-it/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Hai digitato la tua password <xliff:g id="NUMBER_0">%1$d</xliff:g> volte in modo errato. \n\nRiprova tra <xliff:g id="NUMBER_1">%2$d</xliff:g> secondi."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"<xliff:g id="NUMBER_0">%1$d</xliff:g> tentativi errati di inserimento della sequenza di sblocco. \n\nRiprova tra <xliff:g id="NUMBER_1">%2$d</xliff:g> secondi."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Codice PIN della SIM errato. Devi contattare l\'operatore per sbloccare il dispositivo."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">Codice PIN della SIM errato. Hai ancora <xliff:g id="NUMBER_1">%d</xliff:g> tentativi a disposizione.</item>
-      <item quantity="one">Codice PIN della SIM errato. Hai ancora <xliff:g id="NUMBER_0">%d</xliff:g> tentativo a disposizione, dopodiché dovrai contattare l\'operatore per sbloccare il dispositivo.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Codice PIN della SIM errato. Hai ancora # tentativo a disposizione, dopodiché dovrai contattare l\'operatore per sbloccare il dispositivo.}other{Codice PIN della SIM errato. Hai ancora # tentativi a disposizione. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM inutilizzabile. Contatta il tuo operatore."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">Codice PUK della SIM errato. Hai ancora <xliff:g id="NUMBER_1">%d</xliff:g> tentativi a disposizione prima che la SIM diventi definitivamente inutilizzabile.</item>
-      <item quantity="one">Codice PUK della SIM errato. Hai ancora <xliff:g id="NUMBER_0">%d</xliff:g> tentativo a disposizione prima che la SIM diventi definitivamente inutilizzabile.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Codice PUK della SIM errato. Hai ancora # tentativo a disposizione prima che la SIM diventi definitivamente inutilizzabile.}other{Codice PUK della SIM errato. Hai ancora # tentativi a disposizione prima che la SIM diventi definitivamente inutilizzabile.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Operazione con PIN della SIM non riuscita."</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Il dispositivo è stato bloccato manualmente"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Non riconosciuto"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Sblocco con volto richiede l\'accesso alla fotocamera"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">Inserisci il codice PIN della SIM. Hai ancora <xliff:g id="NUMBER_1">%d</xliff:g> tentativi a disposizione.</item>
-      <item quantity="one">Inserisci il codice PIN della SIM. Hai ancora <xliff:g id="NUMBER_0">%d</xliff:g> tentativo a disposizione, dopodiché dovrai contattare l\'operatore per sbloccare il dispositivo.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">La scheda SIM è ora disattivata. Inserisci il codice PUK per continuare. Hai ancora <xliff:g id="_NUMBER_1">%d</xliff:g> tentativi a disposizione prima che la SIM diventi definitivamente inutilizzabile. Per informazioni dettagliate, contatta l\'operatore.</item>
-      <item quantity="one">La scheda SIM è ora disattivata. Inserisci il codice PUK per continuare. Hai ancora <xliff:g id="_NUMBER_0">%d</xliff:g> tentativo a disposizione prima che la SIM diventi definitivamente inutilizzabile. Per informazioni dettagliate, contatta l\'operatore.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Inserisci il codice PIN della SIM. Hai ancora # tentativo a disposizione, dopodiché dovrai contattare l\'operatore per sbloccare il dispositivo.}other{Inserisci il PIN della SIM. Hai a disposizione ancora # tentativi.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{La scheda SIM è ora disattivata. Inserisci il codice PUK per continuare. Hai ancora # tentativo a disposizione prima che la SIM diventi definitivamente inutilizzabile. Per informazioni dettagliate, contatta l\'operatore.}other{La scheda SIM è ora disattivata. Inserisci il codice PUK per continuare. Hai ancora # tentativi a disposizione prima che la SIM diventi definitivamente inutilizzabile. Per informazioni dettagliate, contatta l\'operatore.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Predefinito"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bolla"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogico"</string>
diff --git a/packages/SystemUI/res-keyguard/values-iw/strings.xml b/packages/SystemUI/res-keyguard/values-iw/strings.xml
index 90b4828..470dd72 100644
--- a/packages/SystemUI/res-keyguard/values-iw/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-iw/strings.xml
@@ -68,19 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"הקלדת סיסמה שגויה <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים. \n\nאפשר לנסות שוב בעוד <xliff:g id="NUMBER_1">%2$d</xliff:g> שניות."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"שרטטת קו ביטול נעילה שגוי <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים. \n\nאפשר לנסות שוב בעוד <xliff:g id="NUMBER_1">%2$d</xliff:g> שניות."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"‏קוד האימות של כרטיס ה-SIM שגוי. יש ליצור קשר עם הספק כדי לבטל את נעילת המכשיר."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="two">‏קוד האימות של כרטיס ה-SIM שגוי. נותרו לך עוד <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות.</item>
-      <item quantity="many">‏קוד האימות של כרטיס ה-SIM שגוי. נותרו לך עוד <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות.</item>
-      <item quantity="other">‏קוד האימות של כרטיס ה-SIM שגוי. נותרו לך עוד <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות.</item>
-      <item quantity="one">‏קוד האימות של כרטיס ה-SIM שגוי. נותר לך עוד ניסיון <xliff:g id="NUMBER_0">%d</xliff:g> לפני שיהיה עליך ליצור קשר עם הספק כדי לבטל את נעילת המכשיר.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{‏קוד האימות של כרטיס ה-SIM שגוי. נשאר לך עוד ניסיון אחד (#) לפני שיהיה צורך ליצור קשר עם הספק כדי לבטל את נעילת המכשיר.}two{‏קוד האימות של כרטיס ה-SIM שגוי. נשארו לך עוד # ניסיונות. }many{‏קוד האימות של כרטיס ה-SIM שגוי. נשארו לך עוד # ניסיונות. }other{‏קוד האימות של כרטיס ה-SIM שגוי. נשארו לך עוד # ניסיונות. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"‏לא ניתן להשתמש בכרטיס ה-SIM. יש ליצור קשר עם הספק."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="two">‏קוד ה-PUK של כרטיס ה-SIM שגוי. נותרו לך עוד <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות לפני שכרטיס ה-SIM יינעל לצמיתות.</item>
-      <item quantity="many">‏קוד ה-PUK של כרטיס ה-SIM שגוי. נותרו לך עוד <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות לפני שכרטיס ה-SIM יינעל לצמיתות.</item>
-      <item quantity="other">‏קוד ה-PUK של כרטיס ה-SIM שגוי. נותרו לך עוד <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות לפני שכרטיס ה-SIM יינעל לצמיתות.</item>
-      <item quantity="one">‏קוד ה-PUK של כרטיס ה-SIM שגוי. נותר לך ניסיון <xliff:g id="NUMBER_0">%d</xliff:g> נוסף לפני שכרטיס ה-SIM יינעל לצמיתות.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{‏קוד ה-PUK של כרטיס ה-SIM שגוי. נשאר לך עוד ניסיון אחד (#) לפני שכרטיס ה-SIM יינעל לתמיד.}two{‏קוד ה-PUK של כרטיס ה-SIM שגוי. נשארו לך עוד # ניסיונות לפני שכרטיס ה-SIM יינעל לתמיד.}many{‏קוד ה-PUK של כרטיס ה-SIM שגוי. נשארו לך עוד # ניסיונות לפני שכרטיס ה-SIM יינעל לתמיד.}other{‏קוד ה-PUK של כרטיס ה-SIM שגוי. נשארו לך עוד # ניסיונות לפני שכרטיס ה-SIM יינעל לתמיד.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"‏נכשלה פעולת קוד הגישה של כרטיס ה-SIM"</string>
     <string name="kg_password_puk_failed" msgid="6778867411556937118">"‏הניסיון לביטול הנעילה של כרטיס ה-SIM באמצעות קוד PUK נכשל!"</string>
     <string name="accessibility_ime_switch_button" msgid="9082358310194861329">"החלפת שיטת קלט"</string>
@@ -95,18 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"המכשיר ננעל באופן ידני"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"לא זוהתה"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"לזיהוי הפנים יש להפעיל את הגישה למצלמה בהגדרות"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="two">‏יש להזין קוד אימות של כרטיס SIM. נותרו לך <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות נוספים.</item>
-      <item quantity="many">‏יש להזין קוד אימות של כרטיס SIM. נותרו לך <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות נוספים.</item>
-      <item quantity="other">‏יש להזין קוד אימות של כרטיס SIM. נותרו לך <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות נוספים.</item>
-      <item quantity="one">‏יש להזין קוד אימות של כרטיס SIM. נותר לך ניסיון נוסף (<xliff:g id="NUMBER_0">%d</xliff:g>) לפני שיהיה צורך ליצור קשר עם הספק כדי לבטל את נעילת המכשיר.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="two">‏כרטיס ה-SIM מושבת כעת. יש להזין קוד PUK כדי להמשיך. נותרו לך <xliff:g id="_NUMBER_1">%d</xliff:g> ניסיונות נוספים לפני שכרטיס ה-SIM יינעל באופן סופי. למידע נוסף, ניתן לפנות לספק שלך.</item>
-      <item quantity="many">‏כרטיס ה-SIM מושבת כעת. יש להזין קוד PUK כדי להמשיך. נותרו לך <xliff:g id="_NUMBER_1">%d</xliff:g> ניסיונות נוספים לפני שכרטיס ה-SIM יינעל באופן סופי. למידע נוסף, ניתן לפנות לספק שלך.</item>
-      <item quantity="other">‏כרטיס ה-SIM מושבת כעת. יש להזין קוד PUK כדי להמשיך. נותרו לך <xliff:g id="_NUMBER_1">%d</xliff:g> ניסיונות נוספים לפני שכרטיס ה-SIM יינעל באופן סופי. למידע נוסף, ניתן לפנות לספק שלך.</item>
-      <item quantity="one">‏כרטיס ה-SIM מושבת כעת. יש להזין קוד PUK כדי להמשיך. נותר לך ניסיון אחד (<xliff:g id="_NUMBER_0">%d</xliff:g>) נוסף לפני שכרטיס ה-SIM יינעל באופן סופי. למידע נוסף, ניתן לפנות לספק שלך.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{‏יש להזין את קוד האימות של כרטיס ה-SIM. נשאר לך עוד ניסיון אחד (#) לפני שיהיה צורך ליצור קשר עם הספק כדי לבטל את נעילת המכשיר.}two{‏יש להזין את קוד האימות של כרטיס ה-SIM. נשארו לך עוד # ניסיונות.}many{‏יש להזין את קוד האימות של כרטיס ה-SIM. נשארו לך עוד # ניסיונות.}other{‏יש להזין את קוד האימות של כרטיס ה-SIM. נשארו לך עוד # ניסיונות.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{‏כרטיס ה-SIM מושבת כעת. יש להזין קוד PUK כדי להמשיך. נשאר לך עוד ניסיון אחד (#) לפני שכרטיס ה-SIM יינעל לתמיד. למידע נוסף, ניתן לפנות לספק.}two{‏כרטיס ה-SIM מושבת כעת. יש להזין קוד PUK כדי להמשיך. נשארו לך עוד # ניסיונות לפני שכרטיס ה-SIM יינעל לתמיד. למידע נוסף, ניתן לפנות לספק.}many{‏כרטיס ה-SIM מושבת כעת. יש להזין קוד PUK כדי להמשיך. נשארו לך עוד # ניסיונות לפני שכרטיס ה-SIM יינעל לתמיד. למידע נוסף, ניתן לפנות לספק.}other{‏כרטיס ה-SIM מושבת כעת. יש להזין קוד PUK כדי להמשיך. נשארו לך עוד # ניסיונות לפני שכרטיס ה-SIM יינעל לתמיד. למידע נוסף, ניתן לפנות לספק.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"ברירת מחדל"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"בועה"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"אנלוגי"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ja/strings.xml b/packages/SystemUI/res-keyguard/values-ja/strings.xml
index 471bc12..efe13ec 100644
--- a/packages/SystemUI/res-keyguard/values-ja/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ja/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"パスワードの入力を <xliff:g id="NUMBER_0">%1$d</xliff:g> 回間違えました。\n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> 秒後にもう一度お試しください。"</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"ロック解除パターンの入力を <xliff:g id="NUMBER_0">%1$d</xliff:g> 回間違えました。\n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> 秒後にもう一度お試しください。"</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"SIM PIN コードが無効です。お使いのデバイスをロック解除するには携帯通信会社にお問い合わせいただく必要があります。"</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">SIM PIN コードが無効です。入力できるのはあと <xliff:g id="NUMBER_1">%d</xliff:g> 回です。</item>
-      <item quantity="one">SIM PIN コードが無効です。入力できるのはあと <xliff:g id="NUMBER_0">%d</xliff:g> 回です。この回数を超えると、お使いのデバイスをロック解除するのに携帯通信会社にお問い合わせいただく必要があります。</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{SIM PIN コードが無効です。入力できるのはあと # 回です。この回数を超えると、お使いのデバイスをロック解除するのに携帯通信会社にお問い合わせいただく必要があります。}other{SIM PIN コードが無効です。入力できるのはあと # 回です。}}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM は使用できません。携帯通信会社にお問い合わせください。"</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">SIM PUK コードが無効です。入力できるのはあと <xliff:g id="NUMBER_1">%d</xliff:g> 回です。この回数を超えると SIM は完全に使用できなくなります。</item>
-      <item quantity="one">SIM PUK コードが無効です。入力できるのはあと <xliff:g id="NUMBER_0">%d</xliff:g> 回です。この回数を超えると SIM は完全に使用できなくなります。</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{SIM PUK コードが無効です。入力できるのはあと # 回です。この回数を超えると SIM は完全に使用できなくなります。}other{SIM PUK コードが無効です。入力できるのはあと # 回です。この回数を超えると SIM は完全に使用できなくなります。}}"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"デバイスは手動でロックされました"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"認識されませんでした"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"顔認証の使用: 設定でカメラアクセスを有効にしてください"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">SIM PIN を入力してください。入力できるのはあと <xliff:g id="NUMBER_1">%d</xliff:g> 回です。</item>
-      <item quantity="one">SIM PIN を入力してください。入力できるのはあと <xliff:g id="NUMBER_0">%d</xliff:g> 回です。この回数を超えた場合は、携帯通信会社にお問い合わせください。</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM が無効になりました。続行するには PUK コードを入力してください。入力できるのはあと <xliff:g id="_NUMBER_1">%d</xliff:g> 回です。この回数を超えると SIM は完全に使用できなくなります。詳しくは携帯通信会社にお問い合わせください。</item>
-      <item quantity="one">SIM が無効になりました。続行するには PUK コードを入力してください。入力できるのはあと <xliff:g id="_NUMBER_0">%d</xliff:g> 回です。この回数を超えると SIM は完全に使用できなくなります。詳しくは携帯通信会社にお問い合わせください。</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{SIM PIN を入力してください。入力できるのはあと # 回です。この回数を超えると、お使いのデバイスをロック解除するのに携帯通信会社にお問い合わせいただく必要があります。}other{SIM PIN を入力してください。入力できるのはあと # 回です。}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM が無効になりました。続行するには PUK コードを入力してください。入力できるのはあと # 回です。この回数を超えると SIM は完全に使用できなくなります。詳しくは携帯通信会社にお問い合わせください。}other{SIM が無効になりました。続行するには PUK コードを入力してください。入力できるのはあと # 回です。この回数を超えると SIM は完全に使用できなくなります。詳しくは携帯通信会社にお問い合わせください。}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"デフォルト"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"バブル"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"アナログ"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ka/strings.xml b/packages/SystemUI/res-keyguard/values-ka/strings.xml
index 6f9fed9..67f85f0 100644
--- a/packages/SystemUI/res-keyguard/values-ka/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ka/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"თქვენ არასწორად აკრიფეთ პაროლი <xliff:g id="NUMBER_0">%1$d</xliff:g>-ჯერ. \n\nცადეთ ხელახლა <xliff:g id="NUMBER_1">%2$d</xliff:g> წამში."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"თქვენ არასწორად დახატეთ განბლოკვის ნიმუში <xliff:g id="NUMBER_0">%1$d</xliff:g>-ჯერ. \n\nცადეთ ხელახლა <xliff:g id="NUMBER_1">%2$d</xliff:g> წამში."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"SIM ბარათის PIN-კოდი არასწორია. ახლა თქვენი მოწყობილობის განსაბლოკად თქვენს ოპერატორთან დაკავშირება მოგიწევთ."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">SIM ბარათის PIN-კოდი არასწორია. თქვენ დაგრჩათ <xliff:g id="NUMBER_1">%d</xliff:g> მცდელობა.</item>
-      <item quantity="one">SIM ბარათის PIN-კოდი არასწორია. თქვენ დაგრჩათ <xliff:g id="NUMBER_0">%d</xliff:g> მცდელობა, რომლის შემდეგაც თქვენი მოწყობილობის განსაბლოკად თქვენს ოპერატორთან დაკავშირება მოგიწევთ.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{SIM-ის PIN კოდი არასწორია. თქვენ დაგრჩათ # მცდელობა, რის შემდეგაც მოწყობილობის განსაბლოკად ოპერატორთან დაკავშირება მოგიწევთ.}other{SIM ბარათის PIN-კოდი არასწორია. თქვენ დაგრჩათ # მცდელობა. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM ბარათი გამოუსადეგარია. დაუკავშირდით თქვენს ოპერატორს."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">SIM ბარათის PUK-კოდი არასწორია. თქვენ დაგრჩათ <xliff:g id="NUMBER_1">%d</xliff:g> მცდელობა, რომელთა შემდეგაც თქვენი SIM სამუდამოდ გამოუსადეგარი გახდება.</item>
-      <item quantity="one">SIM ბარათის PUK-კოდი არასწორია. თქვენ დაგრჩათ <xliff:g id="NUMBER_0">%d</xliff:g> მცდელობა, რომლის შემდეგაც თქვენი SIM სამუდამოდ გამოუსადეგარი გახდება.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{SIM ბარათის PUK-კოდი არასწორია. თქვენ დაგრჩათ # მცდელობა, რის შემდეგაც თქვენი SIM სამუდამოდ გამოუსადეგარი გახდება.}other{არასწორი SIM ბარათის PUK-კოდი. თქვენ დაგრჩათ # მცდელობა, სანამ SIM ბარათი სამუდამოდ გამოუსადეგარი გახდება.}}"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"მოწყობილობა ხელით ჩაიკეტა"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"არ არის ამოცნობილი"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"სახით განბლოკვით სარგებლობისთვის, ჩართეთ კამერაზე წვდომა პარამეტრებში"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">შეიყვანეთ SIM ბარათის PIN-კოდი. თქვენ დაგრჩათ <xliff:g id="NUMBER_1">%d</xliff:g> მცდელობა.</item>
-      <item quantity="one">შეიყვანეთ SIM ბარათის PIN-კოდი. თქვენ დაგრჩათ <xliff:g id="NUMBER_0">%d</xliff:g> მცდელობა, რომლის შემდეგაც მოწყობილობის განსაბლოკად დაგჭირდებათ თქვენს ოპერატორთან დაკავშირება.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM ბარათი ახლა დეაქტივირებულია. გასაგრძელებლად შეიყვანეთ PUK-კოდი. თქვენ დაგრჩათ <xliff:g id="_NUMBER_1">%d</xliff:g> მცდელობა, სანამ SIM სამუდამოდ გამოუსადეგარი გახდება. დეტალური ინფორმაციისთვის დაუკავშირდით თქვენს ოპერატორს.</item>
-      <item quantity="one">SIM ბარათი ახლა დეაქტივირებულია. გასაგრძელებლად შეიყვანეთ PUK-კოდი. თქვენ დაგრჩათ <xliff:g id="_NUMBER_0">%d</xliff:g> მცდელობა, სანამ SIM სამუდამოდ გამოუსადეგარი გახდება. დეტალური ინფორმაციისთვის დაუკავშირდით თქვენს ოპერატორს.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{შეიყვანეთ SIM ბარათის PIN-კოდი. თქვენ დაგრჩათ # მცდელობა, რის შემდეგაც მოწყობილობის განსაბლოკად დაგჭირდებათ თქვენს ოპერატორთან დაკავშირება.}other{შეიყვანეთ SIM ბარათის PIN-კოდი. თქვენ დაგრჩათ # მცდელობა.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM ბარათი ახლა გათიშულია. გასაგრძელებლად შეიყვანეთ PUK-კოდი. თქვენ დაგრჩათ # მცდელობა, სანამ SIM სამუდამოდ გამოუსადეგარი გახდება. დეტალური ინფორმაციისთვის დაუკავშირდით თქვენს ოპერატორს.}other{SIM ბარათი ახლა გათიშულია. გასაგრძელებლად შეიყვანეთ PUK-კოდი. თქვენ დაგრჩათ # მცდელობა, სანამ SIM სამუდამოდ გამოუსადეგარი გახდება. დეტალური ინფორმაციისთვის დაუკავშირდით თქვენს ოპერატორს.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"ნაგულისხმევი"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"ბუშტი"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"ანალოგური"</string>
diff --git a/packages/SystemUI/res-keyguard/values-kk/strings.xml b/packages/SystemUI/res-keyguard/values-kk/strings.xml
index f4a51bd..71e9a9d 100644
--- a/packages/SystemUI/res-keyguard/values-kk/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-kk/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Құпия сөз <xliff:g id="NUMBER_0">%1$d</xliff:g> рет қате енгізілді. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> секундтан кейін әрекетті қайталаңыз."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Құлыпты ашу өрнегі <xliff:g id="NUMBER_0">%1$d</xliff:g> рет қате енгізілді. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> секундтан кейін әрекетті қайталаңыз."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"SIM PIN коды дұрыс емес, операторға хабарласып, құрылғының құлпын ашуды сұраңыз."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">SIM PIN коды дұрыс емес. <xliff:g id="NUMBER_1">%d</xliff:g> әрекет қалды.</item>
-      <item quantity="one">SIM PIN коды дұрыс емес. <xliff:g id="NUMBER_0">%d</xliff:g> әрекет қалды. Одан кейін құрылғы құлпын ашу үшін операторға хабарласуға тура келеді.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{SIM картасының PIN коды дұрыс емес. # мүмкіндігіңіз қалды. Одан кейін құрылғы құлпын ашу үшін операторға хабарласуға тура келеді.}other{SIM картасының PIN коды дұрыс емес. # әрекет қалды. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM қолданыстан шыққан. Оператормен хабарласыңыз."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">SIM PUK коды дұрыс емес. <xliff:g id="NUMBER_1">%d</xliff:g> әрекет қалды. Одан кейін SIM біржола қолданыстан шығады.</item>
-      <item quantity="one">SIM PUK коды дұрыс емес. <xliff:g id="NUMBER_0">%d</xliff:g> әрекет қалды. Одан кейін SIM біржола қолданыстан шығады.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{SIM картасының PUK коды дұрыс емес, # әрекеттен кейін SIM картасы біржола құлыпталады.}other{SIM картасының PUK коды дұрыс емес, # әрекеттен кейін SIM картасы біржола құлыпталады.}}"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Құрылғы қолмен құлыпталды"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Танылмады"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Face Unlock функциясын пайдалану үшін параметрлерден камераны пайдалану рұқсатын қосыңыз."</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">SIM PIN кодын енгізіңіз. <xliff:g id="NUMBER_1">%d</xliff:g> мүмкіндік қалды, одан кейін оператордан SIM картасының құлпын ашуды сұрауға тура келеді.</item>
-      <item quantity="one">SIM PIN кодын енгізіңіз. <xliff:g id="NUMBER_0">%d</xliff:g> мүмкіндік қалды, одан кейін оператордан SIM картасының құлпын ашуды сұрауға тура келеді.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM картасы өшірілді. Жалғастыру үшін PUK кодын енгізіңіз. <xliff:g id="_NUMBER_1">%d</xliff:g> мүмкіндік қалды, одан кейін SIM картасы біржола құлыпталады. Толығырақ мәліметті оператордан алыңыз.</item>
-      <item quantity="one">SIM картасы өшірілді. Жалғастыру үшін PUK кодын енгізіңіз. <xliff:g id="_NUMBER_0">%d</xliff:g> мүмкіндік қалды, одан кейін SIM картасы біржола құлыпталады. Толығырақ мәліметті оператордан алыңыз.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{SIM картасының PIN кодын енгізіңіз. # мүмкіндік қалды, одан кейін оператордан SIM картасының құлпын ашуды сұрауға тура келеді.}other{SIM картасының PIN кодын енгізіңіз. # әрекет қалды.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM картасы өшірілді. Жалғастыру үшін PUK кодын енгізіңіз. # мүмкіндік қалды, одан кейін SIM картасы біржола құлыпталады. Толығырақ мәліметті оператордан алыңыз.}other{SIM картасы өшірілді. Жалғастыру үшін PUK кодын енгізіңіз. # мүмкіндік қалды, одан кейін SIM картасы біржола құлыпталады. Толығырақ мәліметті оператордан алыңыз.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Әдепкі"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Көпіршік"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Аналогтық"</string>
diff --git a/packages/SystemUI/res-keyguard/values-km/strings.xml b/packages/SystemUI/res-keyguard/values-km/strings.xml
index 8c90dec..645f6387 100644
--- a/packages/SystemUI/res-keyguard/values-km/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-km/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"អ្នក​បាន​វាយ​បញ្ចូល​ពាក្យ​សម្ងាត់​របស់​អ្នក​មិន​ត្រឹមត្រូវ​ចំនួន <xliff:g id="NUMBER_0">%1$d</xliff:g> ដង​ហើយ។ \n\nសូម​ព្យាយាម​ម្ដង​ទៀត​ក្នុង​រយៈ​ពេល <xliff:g id="NUMBER_1">%2$d</xliff:g> វិនាទី​ទៀត។"</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"អ្នក​បាន​គូរ​លំនាំ​ដោះ​សោ​របស់​អ្នក​មិន​ត្រឹមត្រូវ​ចំនួន <xliff:g id="NUMBER_0">%1$d</xliff:g> ដង​ហើយ។ \n\nសូមព្យាយាម​ម្ដង​ទៀត​ក្នុង​រយៈ​ពេល <xliff:g id="NUMBER_1">%2$d</xliff:g> វិនាទី​ទៀត។"</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"កូដ PIN របស់​ស៊ីម​មិន​ត្រឹមត្រូវ​ទេ អ្នក​ត្រូវ​ទាក់ទង​ទៅក្រុមហ៊ុន​បម្រើ​សេវា​ទូរសព្ទ​របស់​អ្នក​ឥឡូវ​នេះ ដើម្បី​ដោះ​សោ​ឧបករណ៍​របស់​អ្នក។"</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">កូដ PIN របស់​ស៊ីម​មិន​ត្រឹមត្រូវ​ទេ អ្នក​អាច​ព្យាយាម​បាន <xliff:g id="NUMBER_1">%d</xliff:g> ដងទៀត។</item>
-      <item quantity="one">កូដ PIN របស់​ស៊ីម​មិន​ត្រឹមត្រូវ​ទេ ប្រសិន​បើ​អ្នក​បញ្ចូល​កូដខុស <xliff:g id="NUMBER_0">%d</xliff:g> ដងទៀត អ្នក​ត្រូវ​ទាក់ទង​ទៅ​ក្រុមហ៊ុន​បម្រើ​សេវាទូរសព្ទ​របស់អ្នក ដើម្បី​ដោះសោ​ឧបករណ៍របស់អ្នក។</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{កូដ PIN របស់ស៊ីម​មិនត្រឹមត្រូវទេ អ្នកអាច​ព្យាយាម​បញ្ចូលបាន # ដងទៀត មុនពេលដែល​ត្រូវទាក់ទង​ទៅក្រុមហ៊ុន​សេវាទូរសព្ទ​របស់អ្នក ដើម្បី​ដោះសោ​ឧបករណ៍​របស់អ្នក។}other{លេខ​កូដ​ PIN របស់​ស៊ីម​មិន​ត្រឹមត្រូវ​ អ្នកនៅ​សល់​ការ​ព្យាយាម # ដង​ទៀត។ }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"ស៊ីម​មិន​អាច​ប្រើ​បាន​ទេ។ សូម​ទាក់ទង​ទៅក្រុមហ៊ុន​បម្រើ​សេវា​ទូរសព្ទ​របស់​អ្នក។"</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">កូដ PUK របស់​ស៊ីម​មិន​ត្រឹមត្រូវ​ទេ ប្រសិន​បើ​អ្នក​បញ្ចូល​កូដខុស <xliff:g id="NUMBER_1">%d</xliff:g> ដងទៀត ស៊ីមនឹង​មិន​អាច​ប្រើ​បាន​ជា​អចិន្ត្រៃយ៍។</item>
-      <item quantity="one">កូដ PUK របស់​ស៊ីម​មិន​ត្រឹមត្រូវ​ទេ ប្រសិន​បើ​អ្នក​បញ្ចូល​កូដខុស <xliff:g id="NUMBER_0">%d</xliff:g> ដងទៀត ស៊ីមនឹង​មិន​អាច​ប្រើ​បាន​ជា​អចិន្ត្រៃយ៍។</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{កូដ PUK របស់​ស៊ីម​មិន​ត្រឹមត្រូវ​ទេ អ្នក​នៅ​សល់​ការ​ព្យាយាម # ដង​ទៀត​ មុន​ពេល​​ស៊ីម​មិន​អាច​ប្រើ​បាន​ជាអចិន្ត្រៃយ៍។}other{លេខ​កូដ PUK ស៊ីម​មិន​ត្រឹមត្រូវ អ្នកនៅ​សល់​កា​រព្យាយាម # ដង​ទៀត មុន​ពេល​ស៊ីម​មិន​អាច​ប្រើបាន​ជាអចិន្ត្រៃយ៍។}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"មិន​អាច​ដោះ​សោ​ដោយ​ប្រើកូដ​ PIN របស់​ស៊ីម​បានទេ!"</string>
     <string name="kg_password_puk_failed" msgid="6778867411556937118">"មិន​អាច​ដោះ​សោ​ដោយ​ប្រើកូដ​ PUK របស់​ស៊ីម​បានទេ!"</string>
     <string name="accessibility_ime_switch_button" msgid="9082358310194861329">"ប្ដូរ​វិធី​បញ្ចូល"</string>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"ឧបករណ៍ត្រូវបានចាក់សោដោយអ្នកប្រើផ្ទាល់"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"មិនអាចសម្គាល់បានទេ"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"ដើម្បីដោះសោតាមទម្រង់មុខ សូមបើកសិទ្ធិចូលប្រើកាមេរ៉ានៅក្នុងការកំណត់"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">បញ្ចូល​កូដ PIN របស់ស៊ីម។ អ្នកនៅ​សល់ការ​ព្យាយាម <xliff:g id="NUMBER_1">%d</xliff:g> ដងទៀត។</item>
-      <item quantity="one">បញ្ចូលកូដ PIN របស់ស៊ីម។ អ្នក​នៅសល់​ការព្យាយាម <xliff:g id="NUMBER_0">%d</xliff:g> ដង​ទៀត មុន​ពេល​ដែលអ្នក​ត្រូវទាក់ទង​ទៅ​ក្រុមហ៊ុន​សេវា​ទូរសព្ទ​របស់អ្នក​ដើម្បី​ដោះសោ​ឧបករណ៍​របស់អ្នក។</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">ឥឡូវនេះស៊ីមត្រូវបានបិទ។ សូមបញ្ចូលកូដ PUK ដើម្បីបន្ត។ អ្នកនៅសល់ការព្យាយាម <xliff:g id="_NUMBER_1">%d</xliff:g> ដងទៀត​មុនពេល​ស៊ីម​មិនអាច​ប្រើបាន​ជា​អចិន្ត្រៃយ៍។ ទាក់ទង​ទៅ​ក្រុមហ៊ុន​សេវា​ទូរសព្ទ​សម្រាប់ព័ត៌មានលម្អិត។</item>
-      <item quantity="one">ឥឡូវនេះស៊ីមត្រូវបានបិទ។ សូមបញ្ចូលកូដ PUK ដើម្បីបន្ត។ អ្នកនៅសល់ការព្យាយាម <xliff:g id="_NUMBER_0">%d</xliff:g> ដងទៀតមុនពេលស៊ីមមិនអាចប្រើបានជាអចិន្ត្រៃយ៍។ ទាក់ទង​ទៅ​ក្រុមហ៊ុន​សេវា​ទូរសព្ទ​សម្រាប់​ព័ត៌មាន​លម្អិត។</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{បញ្ចូលកូដ PIN របស់ស៊ីម។ អ្នក​នៅសល់​ការព្យាយាម # ដង​ទៀត មុន​ពេល​ដែលអ្នក​ត្រូវទាក់ទង​ទៅ​ក្រុមហ៊ុន​សេវា​ទូរសព្ទ​របស់អ្នក​ដើម្បី​ដោះសោ​ឧបករណ៍​របស់អ្នក។}other{បញ្ចូល​កូដ PIN របស់​ស៊ីម។ អ្នកនៅ​សល់​ការ​ព្យាយាម ​# ដង​ទៀត។}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{ឥឡូវនេះស៊ីមត្រូវបានបិទ។ សូមបញ្ចូលកូដ PUK ដើម្បីបន្ត។ អ្នកនៅសល់ការព្យាយាម # ដងទៀតមុនពេលស៊ីមមិនអាចប្រើបានជាអចិន្ត្រៃយ៍។ ទាក់ទង​ទៅ​ក្រុមហ៊ុន​សេវា​ទូរសព្ទ​សម្រាប់ព័ត៌មានលម្អិត។}other{ឥឡូវនេះស៊ីមត្រូវបានបិទ។ សូមបញ្ចូលកូដ PUK ដើម្បីបន្ត។ អ្នកនៅសល់ការព្យាយាម # ដងទៀត​មុនពេល​ស៊ីម​មិនអាច​ប្រើបាន​ជា​អចិន្ត្រៃយ៍។ ទាក់ទង​ទៅ​ក្រុមហ៊ុន​សេវា​ទូរសព្ទ​សម្រាប់ព័ត៌មានលម្អិត។}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"លំនាំដើម"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"ពពុះ"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"អាណាឡូក"</string>
diff --git a/packages/SystemUI/res-keyguard/values-kn/strings.xml b/packages/SystemUI/res-keyguard/values-kn/strings.xml
index 3299872..e5e4a5f 100644
--- a/packages/SystemUI/res-keyguard/values-kn/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-kn/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"ನಿಮ್ಮ ಪಾಸ್‍‍ವರ್ಡ್ ಅನ್ನು ನೀವು <xliff:g id="NUMBER_0">%1$d</xliff:g> ಬಾರಿ ತಪ್ಪಾಗಿ ನಮೂದಿಸಿದ್ದೀರಿ. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> ಸೆಕೆಂಡುಗಳಲ್ಲಿ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"ನಿಮ್ಮ ಅನ್‍‍ಲಾಕ್ ಪ್ಯಾಟರ್ನ್‌ ಅನ್ನು <xliff:g id="NUMBER_0">%1$d</xliff:g> ಬಾರಿ ತಪ್ಪಾಗಿ ಎಳೆದಿದ್ದೀರಿ. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> ಸೆಕೆಂಡುಗಳಲ್ಲಿ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"ಸಿಮ್‌ ಪಿನ್‌ ಕೋಡ್‌ ತಪ್ಪಾಗಿದೆ, ನಿಮ್ಮ ಸಾಧನವನ್ನು ಅನ್‌ಲಾಕ್‌ ಮಾಡಲು ನೀವು ಈ ಕೂಡಲೇ ನಿಮ್ಮ ವಾಹಕವನ್ನು ಸಂಪರ್ಕಿಸಬೇಕು."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">ಸಿಮ್‌ ಪಿನ್ ಕೋಡ್‌ ತಪ್ಪಾಗಿದೆ, ನಿಮಗೆ <xliff:g id="NUMBER_1">%d</xliff:g> ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ.</item>
-      <item quantity="other">ಸಿಮ್‌ ಪಿನ್ ಕೋಡ್‌ ತಪ್ಪಾಗಿದೆ, ನಿಮಗೆ <xliff:g id="NUMBER_1">%d</xliff:g> ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{SIM ಪಿನ್ ಕೋಡ್ ತಪ್ಪಾಗಿದೆ, ನಿಮ್ಮ ಸಾಧನವನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡುವುದಕ್ಕಾಗಿ ನಿಮ್ಮ ವಾಹಕವನ್ನು ಸಂಪರ್ಕಿಸುವ ಮುನ್ನ ನಿಮ್ಮಲ್ಲಿ # ಪ್ರಯತ್ನ ಬಾಕಿ ಉಳಿದಿದೆ.}one{SIM ಪಿನ್ ಕೋಡ್ ತಪ್ಪಾಗಿದೆ, ನಿಮ್ಮಲ್ಲಿ # ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ. }other{SIM ಪಿನ್ ಕೋಡ್ ತಪ್ಪಾಗಿದೆ, ನಿಮ್ಮಲ್ಲಿ # ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"ಸಿಮ್‌ ನಿಷ್ಪ್ರಯೋಜಕವಾಗಿದೆ. ನಿಮ್ಮ ವಾಹಕವನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">ಸಿಮ್‌ PUK ಕೋಡ್‌ ತಪ್ಪಾಗಿದೆ, <xliff:g id="NUMBER_1">%d</xliff:g> ಪ್ರಯತ್ನಗಳ ನಂತರ ಸಿಮ್‌ ಶಾಶ್ವತವಾಗಿ ನಿಷ್ಪ್ರಯೋಜಕವಾಗುತ್ತದೆ.</item>
-      <item quantity="other">ಸಿಮ್‌ PUK ಕೋಡ್‌ ತಪ್ಪಾಗಿದೆ, <xliff:g id="NUMBER_1">%d</xliff:g> ಪ್ರಯತ್ನಗಳ ನಂತರ ಸಿಮ್‌ ಶಾಶ್ವತವಾಗಿ ನಿಷ್ಪ್ರಯೋಜಕವಾಗುತ್ತದೆ.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{SIM PUK ಕೋಡ್ ತಪ್ಪಾಗಿದೆ, SIM ಶಾಶ್ವತವಾಗಿ ನಿಷ್ಪ್ರಯೋಜಕವಾಗುವ ಮುನ್ನ ನಿಮ್ಮಲ್ಲಿ # ಪ್ರಯತ್ನ ಬಾಕಿ ಉಳಿದಿದೆ.}one{SIM PUK ಕೋಡ್ ತಪ್ಪಾಗಿದೆ, SIM ಶಾಶ್ವತವಾಗಿ ನಿಷ್ಪ್ರಯೋಜಕವಾಗುವ ಮುನ್ನ ನಿಮ್ಮಲ್ಲಿ # ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ.}other{SIM PUK ಕೋಡ್ ತಪ್ಪಾಗಿದೆ, SIM ಶಾಶ್ವತವಾಗಿ ನಿಷ್ಪ್ರಯೋಜಕವಾಗುವ ಮುನ್ನ ನಿಮ್ಮಲ್ಲಿ # ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"ಸಿಮ್‌ ಪಿನ್‌ ಕಾರ್ಯಾಚರಣೆ ವಿಫಲಗೊಂಡಿದೆ!"</string>
     <string name="kg_password_puk_failed" msgid="6778867411556937118">"ಸಿಮ್‌ PUK ಕಾರ್ಯಾಚರಣೆ ವಿಫಲಗೊಂಡಿದೆ!"</string>
     <string name="accessibility_ime_switch_button" msgid="9082358310194861329">"ಇನ್‌ಪುಟ್‌‌ ವಿಧಾನ ಬದಲಿಸಿ"</string>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"ಸಾಧನವನ್ನು ಹಸ್ತಚಾಲಿತವಾಗಿ ಲಾಕ್‌ ಮಾಡಲಾಗಿದೆ"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"ಗುರುತಿಸಲಾಗಿಲ್ಲ"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"ಫೇಸ್ ಅನ್‌ಲಾಕ್ ಬಳಸಲು, ಸೆಟ್ಟಿಂಗ್ಸ್‌ನಲ್ಲಿ ಕ್ಯಾಮರಾ ಪ್ರವೇಶ ಆನ್ ಮಾಡಿ"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">ಸಿಮ್ ಪಿನ್ ನಮೂದಿಸಿ. ನಿಮ್ಮಲ್ಲಿ <xliff:g id="NUMBER_1">%d</xliff:g> ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ.</item>
-      <item quantity="other">ಸಿಮ್ ಪಿನ್ ನಮೂದಿಸಿ. ನಿಮ್ಮಲ್ಲಿ <xliff:g id="NUMBER_1">%d</xliff:g> ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">ಸಿಮ್ ಅನ್ನು ಈಗ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ. ಮುಂದುವರಿಸಲು PUK ಕೋಡ್ ನಮೂದಿಸಿ. ಸಿಮ್ ಶಾಶ್ವತವಾಗಿ ನಿಷ್ಪ್ರಯೋಜಕವಾಗುವ ಮುನ್ನ ನಿಮ್ಮಲ್ಲಿ <xliff:g id="_NUMBER_1">%d</xliff:g> ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ. ವಿವರಗಳಿಗಾಗಿ ವಾಹಕವನ್ನು ಸಂಪರ್ಕಿಸಿ.</item>
-      <item quantity="other">ಸಿಮ್ ಅನ್ನು ಈಗ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ. ಮುಂದುವರಿಸಲು PUK ಕೋಡ್ ನಮೂದಿಸಿ. ಸಿಮ್ ಶಾಶ್ವತವಾಗಿ ನಿಷ್ಪ್ರಯೋಜಕವಾಗುವ ಮುನ್ನ ನಿಮ್ಮಲ್ಲಿ <xliff:g id="_NUMBER_1">%d</xliff:g> ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ. ವಿವರಗಳಿಗಾಗಿ ವಾಹಕವನ್ನು ಸಂಪರ್ಕಿಸಿ.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{SIM ಪಿನ್ ಅನ್ನು ನಮೂದಿಸಿ, ನಿಮ್ಮ ಸಾಧನವನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡುವುದಕ್ಕಾಗಿ ನಿಮ್ಮ ವಾಹಕವನ್ನು ಸಂಪರ್ಕಿಸುವ ಮುನ್ನ ನಿಮ್ಮಲ್ಲಿ # ಪ್ರಯತ್ನ ಬಾಕಿ ಉಳಿದಿದೆ.}one{SIM ಪಿನ್ ಅನ್ನು ನಮೂದಿಸಿ. ನಿಮ್ಮಲ್ಲಿ # ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ.}other{SIM ಪಿನ್ ಅನ್ನು ನಮೂದಿಸಿ. ನಿಮ್ಮಲ್ಲಿ # ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM ಅನ್ನು ಈಗ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ. ಮುಂದುವರಿಸಲು PUK ಕೋಡ್ ಅನ್ನು ನಮೂದಿಸಿ. SIM ಶಾಶ್ವತವಾಗಿ ನಿಷ್ಪ್ರಯೋಜಕವಾಗುವ ಮುನ್ನ ನಿಮ್ಮಲ್ಲಿ # ಪ್ರಯತ್ನ ಬಾಕಿ ಉಳಿದಿದೆ. ವಿವರಗಳಿಗಾಗಿ ವಾಹಕವನ್ನು ಸಂಪರ್ಕಿಸಿ.}one{SIM ಅನ್ನು ಈಗ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ. ಮುಂದುವರಿಸಲು PUK ಕೋಡ್ ಅನ್ನು ನಮೂದಿಸಿ. SIM ಶಾಶ್ವತವಾಗಿ ನಿಷ್ಪ್ರಯೋಜಕವಾಗುವ ಮುನ್ನ ನಿಮ್ಮಲ್ಲಿ # ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ. ವಿವರಗಳಿಗಾಗಿ ವಾಹಕವನ್ನು ಸಂಪರ್ಕಿಸಿ.}other{SIM ಅನ್ನು ಈಗ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ. ಮುಂದುವರಿಸಲು PUK ಕೋಡ್ ಅನ್ನು ನಮೂದಿಸಿ. SIM ಶಾಶ್ವತವಾಗಿ ನಿಷ್ಪ್ರಯೋಜಕವಾಗುವ ಮುನ್ನ ನಿಮ್ಮಲ್ಲಿ # ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ. ವಿವರಗಳಿಗಾಗಿ ವಾಹಕವನ್ನು ಸಂಪರ್ಕಿಸಿ.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"ಡೀಫಾಲ್ಟ್"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"ಬಬಲ್"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"ಅನಲಾಗ್"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ko/strings.xml b/packages/SystemUI/res-keyguard/values-ko/strings.xml
index ebddae2..4c1cfb7 100644
--- a/packages/SystemUI/res-keyguard/values-ko/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ko/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"비밀번호를 <xliff:g id="NUMBER_0">%1$d</xliff:g>번 잘못 입력했습니다. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g>초 후에 다시 시도하세요."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"잠금해제 패턴을 <xliff:g id="NUMBER_0">%1$d</xliff:g>번 잘못 그렸습니다. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g>초 후에 다시 시도하세요."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"잘못된 SIM PIN코드입니다. 이동통신사에 문의하여 기기를 잠금 해제해야 합니다."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">잘못된 SIM PIN 코드입니다. 입력을 <xliff:g id="NUMBER_1">%d</xliff:g>번 더 시도할 수 있습니다.</item>
-      <item quantity="one">잘못된 SIM PIN 코드입니다. 입력에 <xliff:g id="NUMBER_0">%d</xliff:g>번 더 실패할 경우 이동통신사에 문의하여 기기를 잠금 해제해야 합니다.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{SIM의 PIN 코드가 잘못되었습니다. #회 이상 입력에 실패할 경우 이동통신사에 문의하여 기기를 잠금 해제해야 합니다.}other{SIM의 PIN 코드가 잘못되었습니다. 남은 시도 횟수는 #회입니다. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM을 사용할 수 없습니다. 이동통신사에 문의하세요."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">잘못된 SIM PUK 코드입니다. 입력에 <xliff:g id="NUMBER_1">%d</xliff:g>번 더 실패할 경우 SIM이 영구적으로 사용 중지됩니다.</item>
-      <item quantity="one">잘못된 SIM PUK 코드입니다. 입력에 <xliff:g id="NUMBER_0">%d</xliff:g>번 더 실패할 경우 SIM이 영구적으로 사용 중지됩니다.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{SIM의 PUK 코드가 잘못되었습니다. #회 이상 입력에 실패할 경우 SIM을 완전히 사용할 수 없게 됩니다.}other{SIM의 PUK 코드가 잘못되었습니다. #회 이상 입력에 실패할 경우 SIM을 완전히 사용할 수 없게 됩니다.}}"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"기기가 수동으로 잠금 설정되었습니다."</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"인식할 수 없음"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"얼굴 인식 잠금 해제를 사용하려면 설정에서 카메라 액세스를 사용 설정하세요."</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">SIM PIN을 입력하세요. 입력은 <xliff:g id="NUMBER_1">%d</xliff:g>번 더 시도할 수 있습니다.</item>
-      <item quantity="one">SIM PIN을 입력하세요. 입력에 <xliff:g id="NUMBER_0">%d</xliff:g>번 더 실패하면 이동통신사에 문의하여 기기를 잠금 해제해야 합니다.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM이 사용 중지되었습니다. 계속하려면 PUK 코드를 입력하세요. <xliff:g id="_NUMBER_1">%d</xliff:g>번 더 실패하면 SIM을 완전히 사용할 수 없게 됩니다. 자세한 내용은 이동통신사에 문의하세요.</item>
-      <item quantity="one">SIM이 사용 중지되었습니다. 계속하려면 PUK 코드를 입력하세요. <xliff:g id="_NUMBER_0">%d</xliff:g>번 더 실패하면 SIM을 완전히 사용할 수 없게 됩니다. 자세한 내용은 이동통신사에 문의하세요.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{SIM의 PIN을 입력하세요. #회 이상 입력에 실패할 경우 이동통신사에 문의하여 기기를 잠금 해제해야 합니다.}other{SIM의 PIN을 입력하세요. 남은 시도 횟수는 #회입니다.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM이 사용 중지되었습니다. 계속하려면 PUK 코드를 입력하세요. #회 이상 입력에 실패할 경우 SIM을 완전히 사용할 수 없게 됩니다. 자세한 내용은 이동통신사에 문의하세요.}other{SIM이 사용 중지되었습니다. 계속하려면 PUK 코드를 입력하세요. #회 이상 입력에 실패할 경우 SIM을 완전히 사용할 수 없게 됩니다. 자세한 내용은 이동통신사에 문의하세요.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"기본"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"버블"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"아날로그"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ky/strings.xml b/packages/SystemUI/res-keyguard/values-ky/strings.xml
index f6ed69d..ec276fe 100644
--- a/packages/SystemUI/res-keyguard/values-ky/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ky/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Сырсөзүңүздү <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес тердиңиз. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> секунддан кийин дагы аракет кылып көрүңүз."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Түзмөктү ачуучу графикалык  ачкычты <xliff:g id="NUMBER_0">%1$d</xliff:g> жолу туура эмес тарттыңыз. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> секунддан кийин дагы аракет кылып көрүңүз."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"SIM-картанын PIN-коду туура эмес. Эми түзмөктү бөгөттөн чыгаруу үчүн байланыш операторуңузга кайрылышыңыз керек."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">SIM-картанын PIN-коду туура эмес, сизде <xliff:g id="NUMBER_1">%d</xliff:g> аракет калды.</item>
-      <item quantity="one">SIM-картанын PIN-коду туура эмес, сизде <xliff:g id="NUMBER_0">%d</xliff:g> аракет калды. Болбосо, түзмөктү бөгөттөн чыгаруу үчүн байланыш операторуңузга кайрылышыңыз керек.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{SIM-картанын PIN коду туура эмес киргизилди. # аракет калды. Болбосо, түзмөктү бөгөттөн чыгаруу үчүн операторуңузга кайрылышыңыз керек болот.}other{SIM-картанын PIN коду туура эмес киргизилди. # аракет калды. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM-карта жараксыз. Байланыш операторуңузга кайрылыңыз."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">SIM-картанын PUK-коду туура эмес, SIM-картанын биротоло жарактан чыгаарына <xliff:g id="NUMBER_1">%d</xliff:g> аракет калды.</item>
-      <item quantity="one">SIM-картанын PUK-коду туура эмес, SIM-картанын биротоло жарактан чыгаарына <xliff:g id="NUMBER_0">%d</xliff:g> аракет калды.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{SIM-картанын PUK коду туура эмес киргизилди. SIM-картанын биротоло жарактан чыгаарына # аракет калды.}other{SIM-картанын PUK коду туура эмес киргизилди. SIM-картанын биротоло жарактан чыгаарына # аракет калды.}}"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Түзмөк кол менен кулпуланды"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Таанылган жок"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Жөндөөлөрдөн камерага уруксат беришиңиз керек"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">SIM-картанын PIN кодун киргизиңиз. Сизде <xliff:g id="NUMBER_1">%d</xliff:g> аракет калды.</item>
-      <item quantity="one">SIM-картанын PIN кодун киргизиңиз. Сизде <xliff:g id="NUMBER_0">%d</xliff:g> аракет калды, андан кийин түзмөктү бөгөттөн чыгаруу үчүн байланыш операторуна кайрылышыңыз керек болот.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM-карта азыр жарактан чыкты. Улантуу үчүн PUK-кодду киргизиңиз. SIM-картанын биротоло жарактан чыгарына <xliff:g id="_NUMBER_1">%d</xliff:g> аракет калды. Чоо-жайын билүү үчүн байланыш операторуна кайрылыңыз.</item>
-      <item quantity="one">SIM-карта азыр жарактан чыкты. Улантуу үчүн PUK-кодду киргизиңиз. SIM-картанын биротоло жарактан чыгаарына <xliff:g id="_NUMBER_0">%d</xliff:g> аракет калды. Чоо-жайын билүү үчүн байланыш операторуна кайрылыңыз.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{SIM-картанын PIN кодун киргизиңиз. Сизде # аракет калды, андан кийин түзмөктү бөгөттөн чыгаруу үчүн байланыш операторуна кайрылышыңыз керек болот.}other{SIM-картанын PIN кодун киргизиңиз. # аракет калды.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM-карта азыр жарактан чыкты. Улантуу үчүн PUK кодду киргизиңиз. SIM-картанын биротоло жарактан чыгаарына # аракет калды. Чоо-жайын билүү үчүн байланыш операторуна кайрылыңыз.}other{SIM-карта азыр жарактан чыкты. Улантуу үчүн PUK кодду киргизиңиз. SIM-картанын биротоло жарактан чыгарына # аракет калды. Чоо-жайын билүү үчүн байланыш операторуна кайрылыңыз.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Демейки"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Көбүк"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Аналог"</string>
diff --git a/packages/SystemUI/res-keyguard/values-lo/strings.xml b/packages/SystemUI/res-keyguard/values-lo/strings.xml
index 1948f23..44051d8 100644
--- a/packages/SystemUI/res-keyguard/values-lo/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-lo/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"ທ່ານພິມລະຫັດຜ່ານຜິດ <xliff:g id="NUMBER_0">%1$d</xliff:g> ເທື່ອແລ້ວ. \n\nໃຫ້ລອງໃໝ່ອີກຄັ້ງໃນອີກ <xliff:g id="NUMBER_1">%2$d</xliff:g> ວິນາທີ."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"ທ່ານແຕ້ມຮູບແບບປົດລັອກບໍ່ຖືກ <xliff:g id="NUMBER_0">%1$d</xliff:g> ເທື່ອແລ້ວ. \n\nລອງໃໝ່ໃນອີກ <xliff:g id="NUMBER_1">%2$d</xliff:g> ວິນາທີ."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"ລະຫັດ PIN ຂອງ SIM ບໍ່ຖືກຕ້ອງທ່ານຕ້ອງຕິດຕໍ່ຫາຜູ່ໃຫ້ບໍລິການ ເພື່ອປົດລັອກອຸປະກອນຂອງທ່ານ."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">ລະຫັດ SIM PIN ບໍ່ຖືກຕ້ອງ, ທ່ານຍັງພະຍາຍາມໄດ້ອີກ <xliff:g id="NUMBER_1">%d</xliff:g> ຄັ້ງ.</item>
-      <item quantity="one">ລະຫັດ PIN ຂອງ SIM ບໍ່ຖືກຕ້ອງ, ທ່ານສາມາດລອງໄດ້ອີກ <xliff:g id="NUMBER_0">%d</xliff:g> ເທື່ອກ່ອນທີ່ທ່ານຈະຕ້ອງຕິດຕໍ່ຫາຜູ່ໃຫ້ບໍລິການຂອງທ່ານ ເພື່ອປົດລັອກອຸປະກອນຂອງທ່ານ.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{ລະຫັດ PIN ຂອງຊິມບໍ່ຖືກຕ້ອງ, ທ່ານສາມາດລອງໄດ້ອີກ # ເທື່ອກ່ອນທີ່ທ່ານຈະຕ້ອງຕິດຕໍ່ຫາຜູ້ໃຫ້ບໍລິການຂອງທ່ານເພື່ອປົດລັອກອຸປະກອນທ່ານ.}other{ລະຫັດ PIN ຂອງຊິມບໍ່ຖືກຕ້ອງ, ທ່ານສາມາດລອງໄດ້ອີກ # ເທື່ອ. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM ໃຊ້ບໍ່ໄດ້ແລ້ວ. ກະລຸນາຕິດຕໍ່ຫາຜູ່ໃຫ້ບໍລິການຂອງທ່ານ."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">ລະຫັດ PUK ຂອງ SIM ບໍ່ຖືກຕ້ອງ, ທ່ານສາມາດລອງໄດ້ອີກ <xliff:g id="NUMBER_1">%d</xliff:g> ເທື່ອກ່ອນທີ່ SIM ຂອງທ່ານຈະໃຊ້ບໍ່ໄດ້ຢ່າງຖາວອນ.</item>
-      <item quantity="one">ລະຫັດ PUK ຂອງ SIM ບໍ່ຖືກຕ້ອງ, ທ່ານສາມາດລອງໄດ້ອີກ <xliff:g id="NUMBER_0">%d</xliff:g> ເທື່ອກ່ອນທີ່ SIM ຂອງທ່ານຈະໃຊ້ບໍ່ໄດ້ຢ່າງຖາວອນ.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{ລະຫັດ PUK ຂອງຊິມບໍ່ຖືກຕ້ອງ, ທ່ານສາມາດລອງໄດ້ອີກ # ເທື່ອກ່ອນທີ່ຊິມຂອງທ່ານຈະບໍ່ສາມາດໃຊ້ໄດ້ຖາວອນ.}other{ລະຫັດ PUK ຂອງຊິມບໍ່ຖືກຕ້ອງ, ທ່ານສາມາດລອງໄດ້ອີກ # ເທື່ອກ່ອນທີ່ຊິມຂອງທ່ານຈະບໍ່ສາມາດໃຊ້ໄດ້ຖາວອນ.}}"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"ອຸປະກອນຖືກສັ່ງໃຫ້ລັອກ"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"ບໍ່ຮູ້ຈັກ"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"ເພື່ອໃຊ້ການປົດລັອກດ້ວຍໜ້າ, ໃຫ້ເປີດໃຊ້ສິດເຂົ້າເຖິງກ້ອງຖ່າຍຮູບໃນການຕັ້ງຄ່າ"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">ລະຫັດ SIM PIN ບໍ່ຖືກຕ້ອງ. ທ່ານສາມາດລອງໄດ້ອີກ <xliff:g id="NUMBER_1">%d</xliff:g> ເທື່ອ.</item>
-      <item quantity="one">ໃສ່ລະຫັດ SIM PIN. ທ່ານສາມາດລອງໄດ້ອີກ <xliff:g id="NUMBER_0">%d</xliff:g> ເທື່ອກ່ອນທີ່ຈະຕ້ອງຕິດຕໍ່ຜູ້ໃຫ້ບໍລິການເພື່ອປົດລັອກ.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">ຕອນນີ້ປິດການນຳໃຊ້ SIM ແລ້ວ. ໃສ່ລະຫັດ PUK ເພື່ອດຳເນີນການຕໍ່. ທ່ານສາມາດລອງໄດ້ອີກ <xliff:g id="_NUMBER_1">%d</xliff:g> ເທື່ອກ່ອນທີ່ SIM ຈະບໍ່ສາມາດໃຊ້ໄດ້ຖາວອນ. ກະລຸນາຕິດຕໍ່ຜູ້ໃຫ້ບໍລິການສຳລັບລາຍລະອຽດ.</item>
-      <item quantity="one">ຕອນນີ້ປິດການນຳໃຊ້ SIM ແລ້ວ. ໃສ່ລະຫັດ PUK ເພື່ອດຳເນີນການຕໍ່. ທ່ານສາມາດລອງໄດ້ອີກ <xliff:g id="_NUMBER_0">%d</xliff:g> ເທື່ອກ່ອນທີ່ SIM ຈະບໍ່ສາມາດໃຊ້ໄດ້ຖາວອນ. ກະລຸນາຕິດຕໍ່ຜູ້ໃຫ້ບໍລິການສຳລັບລາຍລະອຽດ.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{ໃສ່ລະຫັດ PIN ຂອງຊິມ. ທ່ານສາມາດລອງໄດ້ອີກ # ເທື່ອກ່ອນທີ່ຈະຕ້ອງຕິດຕໍ່ຜູ້ໃຫ້ບໍລິການຂອງທ່ານເພື່ອປົດລັອກອຸປະກອນທ່ານ.}other{ໃສ່ລະຫັດ PIN ຂອງຊິມ. ທ່ານສາມາດລອງໄດ້ອີກ # ເທື່ອ.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{ຕອນນີ້ປິດການນຳໃຊ້ຊິມແລ້ວ. ໃສ່ລະຫັດ PUK ເພື່ອສືບຕໍ່. ທ່ານສາມາດລອງໄດ້ອີກ # ເທື່ອກ່ອນທີ່ຊິມຈະບໍ່ສາມາດໃຊ້ໄດ້ຖາວອນ. ກະລຸນາຕິດຕໍ່ຜູ້ໃຫ້ບໍລິການສຳລັບລາຍລະອຽດ.}other{ຕອນນີ້ປິດການນຳໃຊ້ຊິມແລ້ວ. ໃສ່ລະຫັດ PUK ເພື່ອສືບຕໍ່. ທ່ານສາມາດລອງໄດ້ອີກ # ເທື່ອກ່ອນທີ່ຊິມຈະບໍ່ສາມາດໃຊ້ໄດ້ຖາວອນ. ກະລຸນາຕິດຕໍ່ຜູ້ໃຫ້ບໍລິການສຳລັບລາຍລະອຽດ.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"ຄ່າເລີ່ມຕົ້ນ"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"ຟອງ"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"ໂມງເຂັມ"</string>
diff --git a/packages/SystemUI/res-keyguard/values-lt/strings.xml b/packages/SystemUI/res-keyguard/values-lt/strings.xml
index 59135a9..26c54c0 100644
--- a/packages/SystemUI/res-keyguard/values-lt/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-lt/strings.xml
@@ -68,19 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"<xliff:g id="NUMBER_0">%1$d</xliff:g> kart. netinkamai įvedėte slaptažodį. \n\nBandykite dar kartą po <xliff:g id="NUMBER_1">%2$d</xliff:g> sek."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"<xliff:g id="NUMBER_0">%1$d</xliff:g> kart. netinkamai nupiešėte atrakinimo piešinį. \n\nBandykite dar kartą po <xliff:g id="NUMBER_1">%2$d</xliff:g> sek."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Netinkamas SIM kortelės PIN kodas. Reikės susisiekti su operatoriumi, kad atrakintų įrenginį."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">Netinkamas SIM kortelės PIN kodas. Liko <xliff:g id="NUMBER_1">%d</xliff:g> bandymas.</item>
-      <item quantity="few">Netinkamas SIM kortelės PIN kodas. Liko <xliff:g id="NUMBER_1">%d</xliff:g> bandymai.</item>
-      <item quantity="many">Netinkamas SIM kortelės PIN kodas. Liko <xliff:g id="NUMBER_1">%d</xliff:g> bandymo.</item>
-      <item quantity="other">Netinkamas SIM kortelės PIN kodas. Liko <xliff:g id="NUMBER_1">%d</xliff:g> bandymų.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Netinkamas SIM kortelės PIN kodas. Jums liko # bandymas. Paskui reikės susisiekti su operatoriumi, kad atrakintumėte įrenginį.}one{Netinkamas SIM kortelės PIN kodas. Jums liko # bandymas. }few{Netinkamas SIM kortelės PIN kodas. Jums liko # bandymai. }many{Netinkamas SIM kortelės PIN kodas. Jums liko # bandymo. }other{Netinkamas SIM kortelės PIN kodas. Jums liko # bandymų. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM kortelės naudoti nebegalima. Susisiekite su operatoriumi."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">Netinkamas SIM kortelės PUK kodas. Liko <xliff:g id="NUMBER_1">%d</xliff:g> bandymas. Paskui visiškai nebegalėsite naudoti SIM kortelės.</item>
-      <item quantity="few">Netinkamas SIM kortelės PUK kodas. Liko <xliff:g id="NUMBER_1">%d</xliff:g> bandymai. Paskui visiškai nebegalėsite naudoti SIM kortelės.</item>
-      <item quantity="many">Netinkamas SIM kortelės PUK kodas. Liko <xliff:g id="NUMBER_1">%d</xliff:g> bandymo. Paskui visiškai nebegalėsite naudoti SIM kortelės.</item>
-      <item quantity="other">Netinkamas SIM kortelės PUK kodas. Liko <xliff:g id="NUMBER_1">%d</xliff:g> bandymų. Paskui visiškai nebegalėsite naudoti SIM kortelės.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Netinkamas SIM kortelės PUK kodas. Jums liko # bandymas. Paskui visiškai nebegalėsite naudoti SIM kortelės.}one{Netinkamas SIM kortelės PUK kodas. Jums liko # bandymas. Paskui visiškai nebegalėsite naudoti SIM kortelės.}few{Netinkamas SIM kortelės PUK kodas. Jums liko # bandymai. Paskui visiškai nebegalėsite naudoti SIM kortelės.}many{Netinkamas SIM kortelės PUK kodas. Jums liko # bandymo. Paskui visiškai nebegalėsite naudoti SIM kortelės.}other{Netinkamas SIM kortelės PUK kodas. Jums liko # bandymų. Paskui visiškai nebegalėsite naudoti SIM kortelės.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Nepavyko atlikti SIM kortelės PIN kodo operacijos."</string>
     <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>
@@ -95,18 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Įrenginys užrakintas neautomatiškai"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Neatpažinta"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Jei nor. naud. atr. pagal veidą, įj. pr. prie fotoap. sk. „Nustatymai“"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">Įveskite SIM kortelės PIN kodą. Jums liko <xliff:g id="NUMBER_1">%d</xliff:g> bandymas.</item>
-      <item quantity="few">Įveskite SIM kortelės PIN kodą. Jums liko <xliff:g id="NUMBER_1">%d</xliff:g> bandymai.</item>
-      <item quantity="many">Įveskite SIM kortelės PIN kodą. Jums liko <xliff:g id="NUMBER_1">%d</xliff:g> bandymo.</item>
-      <item quantity="other">Įveskite SIM kortelės PIN kodą. Jums liko <xliff:g id="NUMBER_1">%d</xliff:g> bandymų.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">SIM kortelė dabar yra išjungta. Jei norite tęsti, įveskite PUK kodą. Jums liko <xliff:g id="_NUMBER_1">%d</xliff:g> bandymas. Paskui visiškai nebegalėsite naudoti SIM kortelės. Jei reikia išsamios informacijos, susisiekite su operatoriumi.</item>
-      <item quantity="few">SIM kortelė dabar yra išjungta. Jei norite tęsti, įveskite PUK kodą. Jums liko <xliff:g id="_NUMBER_1">%d</xliff:g> bandymai. Paskui visiškai nebegalėsite naudoti SIM kortelės. Jei reikia išsamios informacijos, susisiekite su operatoriumi.</item>
-      <item quantity="many">SIM kortelė dabar yra išjungta. Jei norite tęsti, įveskite PUK kodą. Jums liko <xliff:g id="_NUMBER_1">%d</xliff:g> bandymo. Paskui visiškai nebegalėsite naudoti SIM kortelės. Jei reikia išsamios informacijos, susisiekite su operatoriumi.</item>
-      <item quantity="other">SIM kortelė dabar yra išjungta. Jei norite tęsti, įveskite PUK kodą. Jums liko <xliff:g id="_NUMBER_1">%d</xliff:g> bandymų. Paskui visiškai nebegalėsite naudoti SIM kortelės. Jei reikia išsamios informacijos, susisiekite su operatoriumi.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Įveskite SIM kortelės PIN kodą. Jums liko # bandymas. Paskui reikės susisiekti su operatoriumi, kad atrakintumėte įrenginį.}one{Įveskite SIM kortelės PIN kodą. Jums liko # bandymas.}few{Įveskite SIM kortelės PIN kodą. Jums liko # bandymai.}many{Įveskite SIM kortelės PIN kodą. Jums liko # bandymo.}other{Įveskite SIM kortelės PIN kodą. Jums liko # bandymų.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM kortelė dabar yra išjungta. Jei norite tęsti, įveskite PUK kodą. Jums liko # bandymas. Paskui visiškai nebegalėsite naudoti SIM kortelės. Jei reikia išsamios informacijos, susisiekite su operatoriumi.}one{SIM kortelė dabar yra išjungta. Jei norite tęsti, įveskite PUK kodą. Jums liko # bandymas. Paskui visiškai nebegalėsite naudoti SIM kortelės. Jei reikia išsamios informacijos, susisiekite su operatoriumi.}few{SIM kortelė dabar yra išjungta. Jei norite tęsti, įveskite PUK kodą. Jums liko # bandymai. Paskui visiškai nebegalėsite naudoti SIM kortelės. Jei reikia išsamios informacijos, susisiekite su operatoriumi.}many{SIM kortelė dabar yra išjungta. Jei norite tęsti, įveskite PUK kodą. Jums liko # bandymo. Paskui visiškai nebegalėsite naudoti SIM kortelės. Jei reikia išsamios informacijos, susisiekite su operatoriumi.}other{SIM kortelė dabar yra išjungta. Jei norite tęsti, įveskite PUK kodą. Jums liko # bandymų. Paskui visiškai nebegalėsite naudoti SIM kortelės. Jei reikia išsamios informacijos, susisiekite su operatoriumi.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Numatytasis"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Debesėlis"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analoginis"</string>
diff --git a/packages/SystemUI/res-keyguard/values-lv/strings.xml b/packages/SystemUI/res-keyguard/values-lv/strings.xml
index 88bb114..fb913ea 100644
--- a/packages/SystemUI/res-keyguard/values-lv/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-lv/strings.xml
@@ -68,17 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Jūs <xliff:g id="NUMBER_0">%1$d</xliff:g> reizi(-es) esat ievadījis nepareizu paroli.\n\nMēģiniet vēlreiz pēc <xliff:g id="NUMBER_1">%2$d</xliff:g> sekundes(-ēm)."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Jūs <xliff:g id="NUMBER_0">%1$d</xliff:g> reizi(-es) esat nepareizi uzzīmējis atbloķēšanas kombināciju.\n\nMēģiniet vēlreiz pēc <xliff:g id="NUMBER_1">%2$d</xliff:g> sekundes(-ēm)."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Nepareizs SIM kartes PIN kods. Lai atbloķētu ierīci, sazinieties ar mobilo sakaru operatoru."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="zero">Nepareizs SIM kartes PIN kods. Varat mēģināt vēl <xliff:g id="NUMBER_1">%d</xliff:g> reizes.</item>
-      <item quantity="one">Nepareizs SIM kartes PIN kods. Varat mēģināt vēl <xliff:g id="NUMBER_1">%d</xliff:g> reizi.</item>
-      <item quantity="other">Nepareizs SIM kartes PIN kods. Varat mēģināt vēl <xliff:g id="NUMBER_1">%d</xliff:g> reizes.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Nepareizs SIM kartes PIN. Varat mēģināt vēl # reizi. Kļūdas gadījumā būs jāsazinās ar mobilo sakaru operatoru, lai tas atbloķētu jūsu ierīci.}zero{Nepareizs SIM kartes PIN. Varat mēģināt vēl # reizes. }one{Nepareizs SIM kartes PIN. Varat mēģināt vēl # reizi. }other{Nepareizs SIM kartes PIN. Varat mēģināt vēl # reizes. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM karte nav lietojama. Sazinieties ar mobilo sakaru operatoru."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="zero">Nepareizs SIM kartes PUK kods. Varat mēģināt vēl <xliff:g id="NUMBER_1">%d</xliff:g> reizes. Ja pēdējais mēģinājums būs kļūdains, SIM karti vairs nevarēs izmantot.</item>
-      <item quantity="one">Nepareizs SIM kartes PUK kods. Varat mēģināt vēl <xliff:g id="NUMBER_1">%d</xliff:g> reizi. Ja pēdējais mēģinājums būs kļūdains, SIM karti vairs nevarēs izmantot.</item>
-      <item quantity="other">Nepareizs SIM kartes PUK kods. Varat mēģināt vēl <xliff:g id="NUMBER_1">%d</xliff:g> reizes. Ja pēdējais mēģinājums būs kļūdains, SIM karti vairs nevarēs izmantot.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Nepareizs SIM kartes PUK kods. Varat mēģināt vēl # reizi. Kļūdas gadījumā SIM karti vairs nevarēs izmantot.}zero{Nepareizs SIM kartes PUK kods. Varat mēģināt vēl # reizes. Ja pēdējais mēģinājums būs kļūdains, SIM karti vairs nevarēs izmantot.}one{Nepareizs SIM kartes PUK kods. Varat mēģināt vēl # reizi. Ja pēdējais mēģinājums būs kļūdains, SIM karti vairs nevarēs izmantot.}other{Nepareizs SIM kartes PUK kods. Varat mēģināt vēl # reizes. Ja pēdējais mēģinājums būs kļūdains, SIM karti vairs nevarēs izmantot.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"SIM kartes PIN koda ievadīšana neizdevās!"</string>
     <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>
@@ -93,16 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Ierīce tika bloķēta manuāli."</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nav atpazīts"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Lai izmantotu autorizāciju pēc sejas, iestatījumos ieslēdziet piekļuvi kamerai."</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="zero">Ievadiet SIM kartes PIN. Varat mēģināt vēl <xliff:g id="NUMBER_1">%d</xliff:g> reizes.</item>
-      <item quantity="one">Ievadiet SIM kartes PIN. Varat mēģināt vēl <xliff:g id="NUMBER_1">%d</xliff:g> reizi.</item>
-      <item quantity="other">Ievadiet SIM kartes PIN. Varat mēģināt vēl <xliff:g id="NUMBER_1">%d</xliff:g> reizes.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="zero">SIM karte tagad ir atspējota. Ievadiet PUK kodu, lai turpinātu. Varat mēģināt vēl <xliff:g id="_NUMBER_1">%d</xliff:g> reizes. Kļūdas gadījumā SIM karti vairs nevarēs izmantot. Lai iegūtu detalizētu informāciju, sazinieties ar mobilo sakaru operatoru.</item>
-      <item quantity="one">SIM karte tagad ir atspējota. Ievadiet PUK kodu, lai turpinātu. Varat mēģināt vēl <xliff:g id="_NUMBER_1">%d</xliff:g> reizi. Kļūdas gadījumā SIM karti vairs nevarēs izmantot. Lai iegūtu detalizētu informāciju, sazinieties ar mobilo sakaru operatoru.</item>
-      <item quantity="other">SIM karte tagad ir atspējota. Ievadiet PUK kodu, lai turpinātu. Varat mēģināt vēl <xliff:g id="_NUMBER_1">%d</xliff:g> reizes. Kļūdas gadījumā SIM karti vairs nevarēs izmantot. Lai iegūtu detalizētu informāciju, sazinieties ar mobilo sakaru operatoru.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Ievadiet SIM kartes PIN. Varat mēģināt vēl # reizi. Kļūdas gadījumā jums būs jāsazinās ar mobilo sakaru operatoru, lai atbloķētu savu ierīci.}zero{Ievadiet SIM kartes PIN. Jums ir atlikuši # mēģinājumi.}one{Ievadiet SIM kartes PIN. Jums ir atlicis # mēģinājums.}other{Ievadiet SIM kartes PIN. Jums ir atlikuši # mēģinājumi.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM karte tagad ir atspējota. Ievadiet PUK kodu, lai turpinātu. Varat mēģināt vēl # reizi. Kļūdas gadījumā SIM karti vairs nevarēs izmantot. Lai iegūtu detalizētu informāciju, sazinieties ar mobilo sakaru operatoru.}zero{SIM karte tagad ir atspējota. Ievadiet PUK kodu, lai turpinātu. Varat mēģināt vēl # reizes. Kļūdas gadījumā SIM karti vairs nevarēs izmantot. Lai iegūtu detalizētu informāciju, sazinieties ar mobilo sakaru operatoru.}one{SIM karte tagad ir atspējota. Ievadiet PUK kodu, lai turpinātu. Varat mēģināt vēl # reizi. Kļūdas gadījumā SIM karti vairs nevarēs izmantot. Lai iegūtu detalizētu informāciju, sazinieties ar mobilo sakaru operatoru.}other{SIM karte tagad ir atspējota. Ievadiet PUK kodu, lai turpinātu. Varat mēģināt vēl # reizes. Kļūdas gadījumā SIM karti vairs nevarēs izmantot. Lai iegūtu detalizētu informāciju, sazinieties ar mobilo sakaru operatoru.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Noklusējums"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Burbuļi"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogais"</string>
diff --git a/packages/SystemUI/res-keyguard/values-mk/strings.xml b/packages/SystemUI/res-keyguard/values-mk/strings.xml
index 7eb7a00..9769c7e 100644
--- a/packages/SystemUI/res-keyguard/values-mk/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-mk/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Погрешно сте ја напишале вашата лозинка <xliff:g id="NUMBER_0">%1$d</xliff:g> пати. \n\nОбидете се повторно за <xliff:g id="NUMBER_1">%2$d</xliff:g> секунди."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Погрешно сте ја нацртале вашата шема за отклучување <xliff:g id="NUMBER_0">%1$d</xliff:g> пати. \n\nОбидете се повторно за <xliff:g id="NUMBER_1">%2$d</xliff:g> секунди."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Погрешен PIN-код за SIM, сега мора да контактирате со вашиот оператор за да го отклучите уредот."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">Погрешен PIN-код за SIM, ви преостанува уште <xliff:g id="NUMBER_1">%d</xliff:g> обид.</item>
-      <item quantity="other">Погрешен PIN-код за SIM, ви преостануваат уште <xliff:g id="NUMBER_1">%d</xliff:g> обиди.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Погрешен PIN-код за SIM-картичката. Ви преостанува уште # обид пред да мора да контактирате со вашиот оператор за да го отклучи уредот.}one{Погрешен PIN-код за SIM, ви преостанува уште # обид. }other{Погрешен PIN-код за SIM, ви преостануваат уште # обиди. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM-картичката е неупотреблива. Контактирајте со вашиот оператор."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">Погрешен PUK-код за SIM, ви преостанува уште <xliff:g id="NUMBER_1">%d</xliff:g> обид пред SIM-картичката да стане трајно неупотреблива.</item>
-      <item quantity="other">Погрешен PUK-код за SIM, ви преостануваат уште <xliff:g id="NUMBER_1">%d</xliff:g> обиди пред SIM-картичката да стане трајно неупотреблива.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{ПУК кодот за SIM-картичката е неточен. Ви преостанува уште # обид, а потоа SIM-картичката ќе стане трајно неупотреблива.}one{Погрешен PUK-код за SIM, ви преостанува уште # обид пред SIM-картичката да стане трајно неупотреблива.}other{Погрешен PUK-код за SIM, ви преостануваат уште # обиди пред SIM-картичката да стане трајно неупотреблива.}}"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Уредот е заклучен рачно"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Непознат"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"За „Отклучување со лик“, вклучете пристап до камерата"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">Внесете PIN-код за SIM-картичката. Ви преостанува уште <xliff:g id="NUMBER_1">%d</xliff:g> обид.</item>
-      <item quantity="other">Внесете PIN-код за SIM-картичката. Ви преостануваат уште <xliff:g id="NUMBER_1">%d</xliff:g> обиди.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">SIM-картичката сега е оневозможена. Внесете PUK-код за да продолжите. Ви преостанува уште <xliff:g id="_NUMBER_1">%d</xliff:g> обид пред SIM-картичката да стане трајно неупотреблива. Контактирајте го операторот за детали.</item>
-      <item quantity="other">SIM-картичката сега е оневозможена. Внесете PUK-код за да продолжите. Ви преостануваат уште <xliff:g id="_NUMBER_1">%d</xliff:g> обиди пред SIM-картичката да стане трајно неупотреблива. Контактирајте го операторот за детали.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Внесете PIN-код за SIM-картичката. Ви преостанува уште # обид пред да мора да контактирате со вашиот оператор да го отклучи уредот.}one{Внесете PIN на SIM. Имате уште # обид.}other{Внесете PIN на SIM. Имате уште # обиди.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM-картичката сега е оневозможена. Внесете PUK-код за да продолжите. Ви преостанува уште # обид пред SIM-картичката да стане трајно неупотреблива. Контактирајте го операторот за детали.}one{SIM-картичката сега е оневозможена. Внесете PUK-код за да продолжите. Ви преостанува уште # обид пред SIM-картичката да стане трајно неупотреблива. Контактирајте го операторот за детали.}other{SIM-картичката сега е оневозможена. Внесете PUK-код за да продолжите. Ви преостануваат уште # обиди пред SIM-картичката да стане трајно неупотреблива. Контактирајте го операторот за детали.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Стандарден"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Балонче"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Аналоген"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ml/strings.xml b/packages/SystemUI/res-keyguard/values-ml/strings.xml
index 32bf03c..e1d3f82 100644
--- a/packages/SystemUI/res-keyguard/values-ml/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ml/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"നിങ്ങൾ <xliff:g id="NUMBER_0">%1$d</xliff:g> തവണ നിങ്ങളുടെ പാസ്‌വേഡ് ‌തെറ്റായി ‌ടൈപ്പുചെയ്തു. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> സെക്കന്റിനു‌ശേഷം വീണ്ടും ശ്രമിക്കുക."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"നിങ്ങൾ <xliff:g id="NUMBER_0">%1$d</xliff:g> തവണ അൺലോക്ക് പാറ്റേൺ ‌തെറ്റായി ‌വരച്ചു. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> സെക്കന്റിനു‌ശേഷം വീണ്ടും ശ്രമിക്കുക."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"സിം പിൻ കോഡ് തെറ്റാണ്, നിങ്ങളുടെ ഉപകരണം അൺലോക്കുചെയ്യാൻ ഇനി നിങ്ങളുടെ കാരിയറുമായി ബന്ധപ്പെടണം."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">സിം പിൻ കോഡ് തെറ്റാണ്, നിങ്ങൾക്ക് <xliff:g id="NUMBER_1">%d</xliff:g> ശ്രമങ്ങൾ കൂടി ശേഷിക്കുന്നു.</item>
-      <item quantity="one">സിം പിൻ കോഡ് തെറ്റാണ്, ഉപകരണം അൺലോക്കുചെയ്യാൻ സേവനദാതാവുമായി ബന്ധപ്പെടേണ്ടിവരുന്നതിനു മുമ്പായി നിങ്ങൾക്ക് <xliff:g id="NUMBER_0">%d</xliff:g> ശ്രമം കൂടി ശേഷിക്കുന്നു.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{സിം പിൻ കോഡ് തെറ്റാണ്, # ശ്രമം ശേഷിക്കുന്നു, അതുകഴിഞ്ഞാൽ ഉപകരണം അൺലോക്ക് ചെയ്യാൻ സേവനദാതാവിനെ ബന്ധപ്പെണം.}other{സിം പിൻ കോഡ് തെറ്റാണ്, # ശ്രമങ്ങൾ ശേഷിക്കുന്നു. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"സിം ഉപയോഗയോഗ്യമല്ല. നിങ്ങളുടെ കാരിയറെ ബന്ധപ്പെടുക."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">സിം PUK കോഡ് തെറ്റാണ്, സിം ശാശ്വതമായി ഉപയോഗശൂന്യമാകുന്നതിന് മുമ്പായി നിങ്ങൾക്ക് <xliff:g id="NUMBER_1">%d</xliff:g> ശ്രമങ്ങൾ കൂടി ശേഷിക്കുന്നു.</item>
-      <item quantity="one">സിം PUK കോഡ് തെറ്റാണ്, സിം ശാശ്വതമായി ഉപയോഗശൂന്യമാകുന്നതിന് മുമ്പായി നിങ്ങൾക്ക് <xliff:g id="NUMBER_0">%d</xliff:g> ശ്രമം കൂടി ശേഷിക്കുന്നു.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{സിം PUK കോഡ് തെറ്റാണ്, # ശ്രമം ശേഷിക്കുന്നു, അതുകഴിഞ്ഞാൽ സിം ശാശ്വതമായി ഉപയോഗശൂന്യമാകും.}other{സിം PUK കോഡ് തെറ്റാണ്, # ശ്രമങ്ങൾ ശേഷിക്കുന്നു, അതുകഴിഞ്ഞാൽ സിം ശാശ്വതമായി ഉപയോഗശൂന്യമാകും.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"പിൻ ഉപയോഗിച്ച് സിം അൺലോക്കു‌ചെയ്യാനുള്ള ‌ശ്രമം പരാജയപ്പെട്ടു!"</string>
     <string name="kg_password_puk_failed" msgid="6778867411556937118">"PUK ഉപയോഗിച്ച് സിം അൺലോക്കു‌ചെയ്യാനുള്ള ‌ശ്രമം പരാജയപ്പെട്ടു!"</string>
     <string name="accessibility_ime_switch_button" msgid="9082358310194861329">"ഇൻപുട്ട് രീതി മാറുക"</string>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"ഉപകരണം നേരിട്ട് ലോക്കുചെയ്തു"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"തിരിച്ചറിയുന്നില്ല"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"ഫെയ്സ് അൺലോക്കിന് ക്രമീകരണത്തിൽ ക്യാമറാ ആക്സസ് ഓണാക്കൂ"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">സിം പിൻ നൽകുക. നിങ്ങൾക്ക് <xliff:g id="NUMBER_1">%d</xliff:g> ശ്രമങ്ങൾ കൂടി ശേഷിക്കുന്നു.</item>
-      <item quantity="one">സിം പിൻ നൽകുക. ഉപകരണം അൺലോക്ക് ചെയ്യാൻ കാരിയറുമായി ബന്ധപ്പെടേണ്ടിവരുന്നതിന് മുമ്പ് <xliff:g id="NUMBER_0">%d</xliff:g> ശ്രമം കൂടി ശേഷിക്കുന്നു.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">സിം ഇപ്പോൾ പ്രവർത്തനരഹിതമാക്കി. തുടരുന്നതിന് PUK കോഡ് നൽകുക. സിം ശാശ്വതമായി ഉപയോഗശൂന്യമാകുന്നതിന് മുമ്പായി <xliff:g id="_NUMBER_1">%d</xliff:g> ശ്രമങ്ങൾ കൂടി ശേഷിക്കുന്നു. വിശദാംശങ്ങൾക്ക് കാരിയറുമായി ബന്ധപ്പെടുക.</item>
-      <item quantity="one">സിം ഇപ്പോൾ പ്രവർത്തനരഹിതമാക്കി. തുടരുന്നതിന് PUK കോഡ് നൽകുക. സിം ശാശ്വതമായി ഉപയോഗശൂന്യമാകുന്നതിന് മുമ്പായി <xliff:g id="_NUMBER_0">%d</xliff:g> ശ്രമം കൂടി ശേഷിക്കുന്നു. വിശദാംശങ്ങൾക്ക് കാരിയറുമായി ബന്ധപ്പെടുക.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{സിം പിൻ നൽകുക. # ശ്രമം ശേഷിക്കുന്നു, അതുകഴിഞ്ഞാൽ ഉപകരണം അൺലോക്ക് ചെയ്യാൻ സേവനദാതാവിനെ ബന്ധപ്പെടണം.}other{സിം പിൻ നൽകുക. # ശ്രമങ്ങൾ ശേഷിക്കുന്നു.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{സിം ഇപ്പോൾ പ്രവർത്തനരഹിതമായിരിക്കുന്നു. തുടരുന്നതിന് PUK കോഡ് നൽകുക. # ശ്രമം ശേഷിക്കുന്നു, അതുകഴിഞ്ഞാൽ സിം ശാശ്വതമായി ഉപയോഗശൂന്യമാകും. വിശദാംശങ്ങൾക്ക് സേവനദാതാവിനെ ബന്ധപ്പെടുക.}other{സിം ഇപ്പോൾ പ്രവർത്തനരഹിതമായിരിക്കുന്നു. തുടരുന്നതിന് PUK കോഡ് നൽകുക. # ശ്രമങ്ങൾ ശേഷിക്കുന്നു, അതുകഴിഞ്ഞാൽ സിം ശാശ്വതമായി ഉപയോഗശൂന്യമാകും. വിശദാംശങ്ങൾക്ക് സേവനദാതാവിനെ ബന്ധപ്പെടുക.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"ഡിഫോൾട്ട്"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"ബബിൾ"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"അനലോഗ്"</string>
diff --git a/packages/SystemUI/res-keyguard/values-mn/strings.xml b/packages/SystemUI/res-keyguard/values-mn/strings.xml
index ba167cf..8c42abc 100644
--- a/packages/SystemUI/res-keyguard/values-mn/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-mn/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Та нууц үгээ <xliff:g id="NUMBER_0">%1$d</xliff:g> удаа буруу орууллаа. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> секундын дараа дахин оролдоно уу."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Та тайлах хээг <xliff:g id="NUMBER_0">%1$d</xliff:g> удаа буруу орууллаа. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> секундын дараа дахин оролдоно уу."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"SIM-н ПИН кодыг буруу оруулсан тул та төхөөрөмжийнхөө түгжээг тайлахын тулд оператор компанитайгаа холбогдоно уу."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">SIM-н ПИН код буруу байна. Танд <xliff:g id="NUMBER_1">%d</xliff:g> оролдлого үлдлээ.</item>
-      <item quantity="one">SIM-н ПИН код буруу байна, танд мобайл оператортойгоо холбогдохгүйгээр төхөөрөмжийн түгжээг тайлахад <xliff:g id="NUMBER_0">%d</xliff:g> оролдлого хийх боломж үлдсэн байна.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{SIM-н ПИН код буруу байна, танд оператор компанитайгаа холбогдохгүйгээр төхөөрөмжийн түгжээг тайлах # оролдлого үлдлээ.}other{SIM-н ПИН код буруу байна, танд # оролдлого үлдлээ. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM-г ашиглах боломжгүй байна. Оператор компанитайгаа холбогдоно уу."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">SIM-н PUK код буруу байна. Таны SIM бүрмөсөн хаагдах хүртэл танд <xliff:g id="NUMBER_1">%d</xliff:g> оролдлого үлдлээ.</item>
-      <item quantity="one">SIM-н PUK код буруу байна. Таны SIM бүрмөсөн хаагдах хүртэл танд <xliff:g id="NUMBER_0">%d</xliff:g> оролдлого үлдлээ.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{SIM-н PUK код буруу байна, таны SIM бүрмөсөн хүчингүй болох хүртэл # оролдлого үлдлээ.}other{SIM-н PUK код буруу байна, таны SIM бүрмөсөн хүчингүй болох хүртэл # оролдлого үлдлээ.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"SIM-н ПИН-г буруу орууллаа!"</string>
     <string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM-н PUK-г буруу орууллаа!"</string>
     <string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Оруулах аргыг сэлгэх"</string>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Төхөөрөмжийг гараар түгжсэн"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Таньж чадсангүй"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Царайгаар түгжээ тайлахыг ашиглахын тулд Тохиргоо хэсэгт камерын хандалтыг асаана уу"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">SIM-н ПИН кодыг оруулна уу. Танд <xliff:g id="NUMBER_1">%d</xliff:g> оролдлого үлдлээ.</item>
-      <item quantity="one">SIM-н ПИН кодыг оруулна уу. Танд оператор компанитайгаа холбогдохгүйгээр төхөөрөмжийн түгжээг тайлах <xliff:g id="NUMBER_0">%d</xliff:g> оролдлого үлдлээ.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM-г идэвхгүй болголоо. Үргэлжлүүлэхийн тулд PUK кодыг оруулна уу. Таны SIM бүрмөсөн хүчингүй болох хүртэл <xliff:g id="_NUMBER_1">%d</xliff:g> оролдлого үлдлээ. Дэлгэрэнгүй мэдээлэл авахын тулд оператор компанитайгаа холбогдоно уу.</item>
-      <item quantity="one">SIM-г идэвхгүй болголоо. Үргэлжлүүлэхийн тулд PUK кодыг оруулна уу. Таны SIM бүрмөсөн хүчингүй болох хүртэл <xliff:g id="_NUMBER_0">%d</xliff:g> оролдлого үлдлээ. Дэлгэрэнгүй мэдээлэл авахын тулд оператор компанитайгаа холбогдоно уу.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{SIM-н ПИН-г оруулна уу. Танд оператор компанитайгаа холбогдохгүйгээр төхөөрөмжийн түгжээг тайлах # оролдлого үлдлээ.}other{SIM-н ПИН-г оруулна уу. Танд # оролдлого үлдлээ.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM-г идэвхгүй болголоо. Үргэлжлүүлэхийн тулд PUK кодыг оруулна уу. Таны SIM бүрмөсөн хүчингүй болох хүртэл # оролдлого үлдлээ. Дэлгэрэнгүй мэдээлэл авахын тулд оператор компанитайгаа холбогдоно уу.}other{SIM-г идэвхгүй болголоо. Үргэлжлүүлэхийн тулд PUK кодыг оруулна уу. Таны SIM бүрмөсөн хүчингүй болох хүртэл # оролдлого үлдлээ. Дэлгэрэнгүй мэдээлэл авахын тулд оператор компанитайгаа холбогдоно уу.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Өгөгдмөл"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Бөмбөлөг"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Aналог"</string>
diff --git a/packages/SystemUI/res-keyguard/values-mr/strings.xml b/packages/SystemUI/res-keyguard/values-mr/strings.xml
index 28368f9..2c0bf0f 100644
--- a/packages/SystemUI/res-keyguard/values-mr/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-mr/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"तुम्ही तुमचा पासवर्ड <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा चुकीच्या पद्धतीने टाइप केला आहे. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"तुम्ही तुमचा अनलॉक पॅटर्न <xliff:g id="NUMBER_0">%1$d</xliff:g> वेळा अयोग्यरितीने काढला. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"सिम पिन कोड चुकीचा आहे तुम्ही आता तुमचे डिव्हाइस अनलॉक करण्‍यासाठी तुमच्या वाहकाशी संपर्क साधावा."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">चुकीचा सिम पिन कोड, तुमच्याकडे <xliff:g id="NUMBER_1">%d</xliff:g> प्रयत्न शिल्लक आहेत.</item>
-      <item quantity="one"> चुकीचा सिम पिन कोड, तुमचे डिव्हाइस अनलॉक करण्‍यासाठी तुमच्या वाहकाशी संपर्क साधण्‍यापूर्वी तुमच्याकडे <xliff:g id="NUMBER_0">%d</xliff:g> प्रयत्न शिल्लक आहेत.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{सिमचा पिन कोड चुकीचा आहे, तुम्ही तुमचे डिव्‍हाइस अनलॉक करण्‍यासाठी तुमच्या वाहकाशी संपर्क साधण्‍यापूर्वी तुमच्याकडे # प्रयत्न शिल्लक आहे.}other{सिमचा पिन कोड चुकीचा आहे, तुमच्याकडे # प्रयत्न शिल्लक आहेत. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"सिम निरुपयोगी आहे. आपल्या वाहकाशी संपर्क साधा."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">चुकीचा सिम PUK कोड, सिम कायमचे निरुपयोगी होण्यापूर्वी आपल्याकडे <xliff:g id="NUMBER_1">%d</xliff:g> प्रयत्न शिल्लक आहेत.</item>
-      <item quantity="one">चुकीचा सिम PUK कोड, सिम कायमचे निरुपयोगी होण्यापूर्वी आपल्याकडे <xliff:g id="NUMBER_0">%d</xliff:g> प्रयत्न शिल्लक आहे.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{सिमचा PUK कोड चुकीचा आहे, सिम कायमचे निरुपयोगी होण्‍यापूर्वी तुमच्याकडे # प्रयत्न शिल्लक आहे.}other{सिमचा PUK कोड चुकीचा आहे, सिम कायमचे निरुपयोगी होण्‍यापूर्वी तुमच्याकडे # प्रयत्न शिल्लक आहेत.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"सिम पिन ऑपरेशन अयशस्वी झाले!"</string>
     <string name="kg_password_puk_failed" msgid="6778867411556937118">"सिम PUK कार्य अयशस्‍वी झाले!"</string>
     <string name="accessibility_ime_switch_button" msgid="9082358310194861329">"इनपुट पद्धत स्विच करा"</string>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"डिव्हाइस मॅन्युअली लॉक केले होते"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"ओळखले नाही"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"फेस अनलॉक साठी, सेटिंग्ज मध्ये कॅमेराचा अ‍ॅक्सेस द्या"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">सिम पिन एंटर करा, तुमच्याकडे <xliff:g id="NUMBER_1">%d</xliff:g> प्रयत्न शिल्लक आहेत.</item>
-      <item quantity="one">सिम पिन एंटर करा. तुम्ही तुमचे डिव्‍हाइस अनलॉक करण्‍यासाठी तुमच्या वाहकाशी संपर्क साधण्‍यापूर्वी, तुमच्याकडे <xliff:g id="NUMBER_0">%d</xliff:g> प्रयत्न शिल्लक आहे.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">सिम आता बंद केलेले आहे. सुरू ठेवण्यासाठी PUK कोड टाका. सिम कायमचे बंद होण्याआधी तुमच्याकडे <xliff:g id="_NUMBER_1">%d</xliff:g> प्रयत्न शिल्लक आहेत. तपशीलांसाठी वाहकाशी संपर्क साधा.</item>
-      <item quantity="one">सिम आता बंद केलेले आहे. सुरू ठेवण्यासाठी PUK कोड टाका. सिम कायमचे बंद होण्याआधी तुमच्याकडे <xliff:g id="_NUMBER_0">%d</xliff:g> प्रयत्न शिल्लक आहे. तपशीलांसाठी वाहकाशी संपर्क साधा.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{सिमचा पिन एंटर करा. तुम्ही तुमचे डिव्‍हाइस अनलॉक करण्‍यासाठी तुमच्या वाहकाशी संपर्क साधण्‍यापूर्वी, तुमच्याकडे # प्रयत्न शिल्लक आहे.}other{सिमचा पिन एंटर करा. तुमच्याकडे # शिल्लक प्रयत्न आहेत.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{सिम आता बंद केलेले आहे. पुढे सुरू ठेवण्यासाठी PUK कोड एंटर करा. सिम कायमचे निरुपयोगी होण्यापूर्वी तुमच्याकडे # प्रयत्न शिल्लक आहे. तपशिलांसाठी वाहकाशी संपर्क साधा.}other{सिम आता बंद केलेले आहे. पुढे सुरू ठेवण्यासाठी PUK कोड एंटर करा. सिम कायमचे निरुपयोगी होण्यापूर्वी तुमच्याकडे # प्रयत्न शिल्लक आहेत. तपशिलांसाठी वाहकाशी संपर्क साधा.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"डीफॉल्ट"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"बबल"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"अ‍ॅनालॉग"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ms/strings.xml b/packages/SystemUI/res-keyguard/values-ms/strings.xml
index e2efa90..fc18b42 100644
--- a/packages/SystemUI/res-keyguard/values-ms/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ms/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Anda telah tersilap taip kata laluan sebanyak <xliff:g id="NUMBER_0">%1$d</xliff:g> kali. \n\nCuba lagi dalam <xliff:g id="NUMBER_1">%2$d</xliff:g> saat."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Anda telah tersilap lukis corak buka kunci sebanyak <xliff:g id="NUMBER_0">%1$d</xliff:g> kali. \n\nCuba lagi dalam <xliff:g id="NUMBER_1">%2$d</xliff:g> saat."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Kod PIN SIM salah. Anda mesti menghubungi pembawa anda untuk membuka kunci peranti."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">Kod PIN SIM salah, tinggal <xliff:g id="NUMBER_1">%d</xliff:g> percubaan.</item>
-      <item quantity="one">Kod PIN SIM salah. Tinggal <xliff:g id="NUMBER_0">%d</xliff:g> percubaan sebelum anda perlu menghubungi pembawa anda untuk membuka kunci peranti.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Kod PIN SIM tidak betul, anda mempunyai # percubaan lagi sebelum perlu menghubungi pembawa anda untuk membuka kunci peranti.}other{Kod PIN SIM tidak betul, anda mempunyai # percubaan lagi. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM tidak boleh digunakan. Hubungi pembawa anda."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">Kod PUK SIM salah. Tinggal <xliff:g id="NUMBER_1">%d</xliff:g> percubaan sebelum SIM tidak boleh digunakan secara kekal.</item>
-      <item quantity="one">Kod PUK SIM salah. Tinggal <xliff:g id="NUMBER_0">%d</xliff:g> percubaan sebelum SIM tidak boleh digunakan secara kekal.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Kod PUK SIM tidak betul, anda mempunyai # percubaan lagi sebelum SIM tidak boleh digunakan secara kekal.}other{Kod PUK SIM tidak betul, anda mempunyai # percubaan lagi sebelum SIM tidak boleh digunakan secara kekal.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Pengendalian PIN SIM gagal!"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Peranti telah dikunci secara manual"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Tidak dikenali"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Hidupkan kamera dalam Tetapan untuk Buka Kunci Wajah"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">Masukkan PIN SIM. Tinggal <xliff:g id="NUMBER_1">%d</xliff:g> percubaan lagi.</item>
-      <item quantity="one">Masukkan PIN SIM. Tinggal <xliff:g id="NUMBER_0">%d</xliff:g> percubaan lagi sebelum anda perlu menghubungi pembawa anda untuk membuka kunci peranti.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">Kini SIM dilumpuhkan. Masukkan kod PUK untuk meneruskan. Tinggal <xliff:g id="_NUMBER_1">%d</xliff:g> percubaan sebelum SIM tidak boleh digunakan secara kekal. Hubungi pembawa untuk mendapatkan butiran.</item>
-      <item quantity="one">Kini SIM dilumpuhkan. Masukkan kod PUK untuk meneruskan. Tinggal <xliff:g id="_NUMBER_0">%d</xliff:g> percubaan sebelum SIM tidak boleh digunakan secara kekal. Hubungi pembawa untuk mendapatkan butiran.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Masukkan PIN SIM. Anda mempunyai # percubaan lagi sebelum perlu menghubungi pembawa anda untuk membuka kunci peranti.}other{Masukkan PIN SIM. Anda mempunyai # percubaan lagi.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{Kini SIM dilumpuhkan. Masukkan kod PUK untuk meneruskan. Anda mempunyai # percubaan lagi sebelum SIM tidak boleh digunakan secara kekal. Hubungi pembawa untuk mendapatkan butiran.}other{Kini SIM dilumpuhkan. Masukkan kod PUK untuk meneruskan. Anda mempunyai # percubaan lagi sebelum SIM tidak boleh digunakan secara kekal. Hubungi pembawa untuk mendapatkan butiran.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Lalai"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Gelembung"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analog"</string>
diff --git a/packages/SystemUI/res-keyguard/values-my/strings.xml b/packages/SystemUI/res-keyguard/values-my/strings.xml
index fd62450..38d94e4 100644
--- a/packages/SystemUI/res-keyguard/values-my/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-my/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"သင်သည် စကားဝှက်ကို <xliff:g id="NUMBER_0">%1$d</xliff:g> ကြိမ်မှားယွင်းစွာ ထည့်ခဲ့ပါသည်။ \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> စက္ကန့်အကြာတွင် ထပ်စမ်းကြည့်ပါ။"</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"သင်သည် ပုံစံကို <xliff:g id="NUMBER_0">%1$d</xliff:g> ကြိမ်မှားယွင်းစွာ ဆွဲခဲ့ပါသည်။ \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> စက္ကန့်အကြာတွင် ထပ်စမ်းကြည့်ပါ။"</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"ဆင်းမ်ကဒ်ပင်နံပါတ် မှားယွင်းနေသောကြောင့် ယခုအခါ သင့်စက်ပစ္စည်းအား လော့ခ်ဖွင့်ရန် ဝန်ဆောင်မှုပေးသူကို ဆက်သွယ်ရပါမည်။"</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">ဆင်းမ်ပင်နံပါတ် မှန်ကန်မှုမရှိပါ။ <xliff:g id="NUMBER_1">%d</xliff:g> ကြိမ် စမ်းသပ်ခွင့်ရှိပါသေးသည်။</item>
-      <item quantity="one">ဆင်းမ်ပင်နံပါတ် မှန်ကန်မှုမရှိပါ။ သင့်စက်ပစ္စည်းအား လော့ခ်ဖွင့်ပေးရန်အတွက် မိုဘိုင်းဝန်ဆောင်မှုပေးသူကို မဆက်သွယ်မီ <xliff:g id="NUMBER_0">%d</xliff:g> ကြိမ် စမ်းသပ်ခွင့်ရှိပါသေးသည်။</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{ဆင်းမ်ပင်နံပါတ်ကုဒ် မှားနေသည်။ စက်ကို လော့ခ်ဖွင့်ရန် မိုဘိုင်းဖုန်းကုမ္ပဏီသို့ မဆက်သွယ်မီ သင့်တွင် # ကြိမ် ကြိုးစားခွင့်ရှိသေးသည်။}other{ဆင်းမ်ပင်နံပါတ်ကုဒ် မှားနေသည်။ သင့်တွင် # ကြိမ် ကြိုးစားခွင့်ရှိသေးသည်။ }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"ဆင်းမ်ကဒ်ကို အသုံးပြု၍ မရတော့ပါ။ ဝန်ဆောင်မှုပေးသူကို ဆက်သွယ်ပါ။"</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">ဆင်းမ် ပင်နံပါတ် ပြန်ဖွင့်သည့်ကုဒ် မှန်ကန်မှုမရှိပါ။ ဆင်းမ်ကဒ်ကို အပြီးအပိုင်မပိတ်ခင် <xliff:g id="NUMBER_1">%d</xliff:g> ကြိမ်စမ်းသပ်ခွင့် ရှိပါသေးသည်။</item>
-      <item quantity="one">ဆင်းမ် ပင်နံပါတ် ပြန်ဖွင့်သည့်ကုဒ် မှန်ကန်မှုမရှိပါ။ ဆင်းမ်ကဒ်ကို အပြီးအပိုင်မပိတ်ခင် <xliff:g id="NUMBER_0">%d</xliff:g> ကြိမ်စမ်းသပ်ခွင့် ရှိပါသေးသည်။</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{ဆင်းမ် PUK ကုဒ် မှားနေသည်။ ဆင်းမ် အပြီးပိတ်မသွားမီ သင့်တွင် # ကြိမ် ကြိုးစားခွင့်ရှိသေးသည်။}other{ဆင်းမ် PUK ကုဒ် မှားနေသည်။ ဆင်းမ် အပြီးပိတ်မသွားမီ သင့်တွင် # ကြိမ် ကြိုးစားခွင့်ရှိသေးသည်။}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"ဆင်းမ်ကဒ်ပင်နံပါတ် လုပ်ဆောင်ချက် မအောင်မြင်ပါ။"</string>
     <string name="kg_password_puk_failed" msgid="6778867411556937118">"ဆင်းမ်ကတ် ပင်နံပါတ် ပြန်ဖွင့်သည့်ကုဒ် လုပ်ဆောင်ချက် မအောင်မြင်ပါ။"</string>
     <string name="accessibility_ime_switch_button" msgid="9082358310194861329">"စာရိုက်စနစ်ပြောင်းရန်"</string>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"စက်ပစ္စည်းကို ကိုယ်တိုင်ကိုယ်ကျ လော့ခ်ချထားခဲ့သည်"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"မသိ"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"‘မျက်နှာပြ လော့ခ်ဖွင့်ခြင်း’ သုံးရန် ‘ဆက်တင်များ’ တွင်ကင်မရာသုံးခွင့်ကိုဖွင့်ပါ"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">ဆင်းမ်ကတ် ပင်နံပါတ် ထည့်ပါ။ <xliff:g id="NUMBER_1">%d</xliff:g> ကြိမ် စမ်းသပ်ခွင့်ရှိပါသေးသည်။</item>
-      <item quantity="one">ဆင်းမ်ကတ် ပင်နံပါတ် ထည့်ပါ။ သင့်စက်ကို လော့ခ်ဖွင့်ပေးရန်အတွက် ဝန်ဆောင်မှုပေးသူသို့ မဆက်သွယ်မီ <xliff:g id="NUMBER_0">%d</xliff:g> ကြိမ် စမ်းသပ်ခွင့်ရှိပါသေးသည်။</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">ဆင်းမ်ကတ်သည် ယခု ပိတ်သွားပါပြီ။ ရှေ့ဆက်ရန် PUK ကုဒ်ကို ထည့်ပါ။ ဆင်းမ်ကတ် အပြီးပိတ်မသွားမီ သင့်တွင် <xliff:g id="_NUMBER_1">%d</xliff:g> ကြိမ် စမ်းသပ်ခွင့် ကျန်ပါသေးသည်။ အသေးစိတ်အချက်များအတွက် ဝန်ဆောင်မှုပေးသူကို ဆက်သွယ်ပါ။</item>
-      <item quantity="one">ဆင်းမ်ကတ်သည် ယခု ပိတ်သွားပါပြီ။ ရှေ့ဆက်ရန် PUK ကုဒ်ကို ထည့်ပါ။ ဆင်းမ်ကတ် အပြီးပိတ်မသွားမီ သင့်တွင် <xliff:g id="_NUMBER_0">%d</xliff:g> ကြိမ် စမ်းသပ်ခွင့် ကျန်ပါသေးသည်။ အသေးစိတ်အချက်များအတွက် ဝန်ဆောင်မှုပေးသူကို ဆက်သွယ်ပါ။</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{ဆင်းမ်ပင်နံပါတ် ထည့်သွင်းပါ။ သင့်စက်ကို လော့ခ်ဖွင့်ရန် မိုဘိုင်းဖုန်းကုမ္ပဏီသို့ မဆက်သွယ်မီ # ကြိမ် ကြိုးစားခွင့်ရှိသေးသည်။}other{ဆင်းမ်ပင်နံပါတ် ထည့်သွင်းပါ။ သင့်တွင် # ကြိမ် ကြိုးစားခွင့်ရှိသေးသည်။}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{ဆင်းမ်သည် ယခု ပိတ်သွားပါပြီ။ ရှေ့ဆက်ရန် PUK ကုဒ်ကို ထည့်ပါ။ ဆင်းမ် အပြီးပိတ်မသွားမီ သင့်တွင် # ကြိမ် ကြိုးစားခွင့်ရှိသေးသည်။ အသေးစိတ်အတွက် မိုဘိုင်းဖုန်းကုမ္ပဏီကို ဆက်သွယ်ပါ။}other{ဆင်းမ်သည် ယခု ပိတ်သွားပါပြီ။ ရှေ့ဆက်ရန် PUK ကုဒ်ကို ထည့်ပါ။ ဆင်းမ် အပြီးပိတ်မသွားမီ သင့်တွင် # ကြိမ် ကြိုးစားခွင့်ရှိသေးသည်။ အသေးစိတ်အတွက် မိုဘိုင်းဖုန်းကုမ္ပဏီကို ဆက်သွယ်ပါ။}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"မူလ"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"ပူဖောင်းကွက်"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"ရိုးရိုး"</string>
diff --git a/packages/SystemUI/res-keyguard/values-nb/strings.xml b/packages/SystemUI/res-keyguard/values-nb/strings.xml
index 474700c..8730723 100644
--- a/packages/SystemUI/res-keyguard/values-nb/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-nb/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Du har tastet inn passordet ditt feil <xliff:g id="NUMBER_0">%1$d</xliff:g> ganger. \n\nPrøv på nytt om <xliff:g id="NUMBER_1">%2$d</xliff:g> sekunder."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Du har tegnet opplåsningsmønsteret ditt feil <xliff:g id="NUMBER_0">%1$d</xliff:g> ganger. \n\nPrøv på nytt om <xliff:g id="NUMBER_1">%2$d</xliff:g> sekunder."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Feil PIN-kode for SIM-kortet. Du må nå kontakte operatøren din for å låse opp enheten."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">Feil PIN-kode for SIM-kortet. Du har <xliff:g id="NUMBER_1">%d</xliff:g> forsøk igjen.</item>
-      <item quantity="one">Feil PIN-kode for SIM-kortet. Du har <xliff:g id="NUMBER_0">%d</xliff:g> forsøk igjen før du må kontakte operatøren din for å låse opp enheten.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Feil PIN-kode for SIM-kortet. Du har # forsøk igjen før du må kontakte operatøren din for å låse opp enheten.}other{Feil PIN-kode for SIM-kortet. Du har # forsøk igjen. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM-kortet er ubrukelig. Ta kontakt med operatøren din."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">Feil PUK-kode for SIM-kortet. Du har <xliff:g id="NUMBER_1">%d</xliff:g> forsøk igjen før SIM-kortet blir permanent ubrukelig.</item>
-      <item quantity="one">Feil PUK-kode for SIM-kortet. Du har <xliff:g id="NUMBER_0">%d</xliff:g> forsøk igjen før SIM-kortet blir permanent ubrukelig.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Feil PUK-kode for SIM-kortet. Du har # forsøk igjen før SIM-kortet blir permanent ubrukelig.}other{Feil PUK-kode for SIM-kortet. Du har # forsøk igjen før SIM-kortet blir permanent ubrukelig.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"PIN-koden for SIM-kortet ble avvist."</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Enheten ble låst manuelt"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Ikke gjenkjent"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Slå på kameratilgang i Innstillinger for å bruke ansiktslås"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">Skriv inn PIN-koden for SIM-kortet. Du har <xliff:g id="NUMBER_1">%d</xliff:g> forsøk igjen.</item>
-      <item quantity="one">Skriv inn PIN-koden for SIM-kortet. Du har <xliff:g id="NUMBER_0">%d</xliff:g> forsøk igjen før du må kontakte operatøren din for å låse opp enheten.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM-kortet er deaktivert nå. Skriv inn PUK-koden for å fortsette. Du har <xliff:g id="_NUMBER_1">%d</xliff:g> forsøk igjen før SIM-kortet blir permanent ubrukelig. Kontakt operatøren for å få vite mer.</item>
-      <item quantity="one">SIM-kortet er deaktivert nå. Skriv inn PUK-koden for å fortsette. Du har <xliff:g id="_NUMBER_0">%d</xliff:g> forsøk igjen før SIM-kortet blir permanent ubrukelig. Kontakt operatøren for å få vite mer.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Skriv inn PIN-koden for SIM-kortet. Du har # forsøk igjen før du må kontakte operatøren din for å låse opp enheten.}other{Skriv inn PIN-koden for SIM-kortet. Du har # forsøk igjen.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM-kortet er deaktivert nå. Skriv inn PUK-koden for å fortsette. Du har # forsøk igjen før SIM-kortet blir permanent ubrukelig. Kontakt operatøren for å få vite mer.}other{SIM-kortet er deaktivert nå. Skriv inn PUK-koden for å fortsette. Du har # forsøk igjen før SIM-kortet blir permanent ubrukelig. Kontakt operatøren for å få vite mer.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Standard"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Boble"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analog"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ne/strings.xml b/packages/SystemUI/res-keyguard/values-ne/strings.xml
index c55aa8f..98e9813 100644
--- a/packages/SystemUI/res-keyguard/values-ne/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ne/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"तपाईंले <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक आफ्नो गलत पासवर्ड  प्रविष्ट गर्नुभएको छ। \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"तपाईंले <xliff:g id="NUMBER_0">%1$d</xliff:g> पटक गलत तरिकाले आफ्नो अनलक प्याटर्न कोर्नुभएको छ। \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> सेकेन्डमा फेरि कोसिस गर्नुहोस्।"</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"SIM को PIN कोड गलत छ। तपाईंले अब आफ्नो यन्त्र खोल्न आफ्नो सेवा प्रदायकलाई सम्पर्क गर्नै पर्ने हुन्छ।"</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">SIM को PIN कोड गलत छ, तपाईं अझै <xliff:g id="NUMBER_1">%d</xliff:g> पटक प्रयास गर्न सक्नुहुन्छ।</item>
-      <item quantity="one">SIM को PIN कोड गलत छ,तपाईंले आफ्नो डिभाइस अनलक गर्न आफ्नो सेवा प्रदायकलाई सम्पर्क गर्नैपर्ने अवस्था आउनु अघि तपाईं अझै <xliff:g id="NUMBER_0">%d</xliff:g> पटक प्रयास गर्न सक्नुहुन्छ।</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{तपाईंले SIM को गलत PIN कोड हाल्नुभयो, तपाईं अब # पटक PIN हाल्ने प्रयास गर्न सक्नुहुन्छ। त्यसपछि आफ्नो डिभाइस अनलक गर्न तपाईंले आफ्नो सेवा प्रदायकमा सम्पर्क गर्नु पर्ने हुन्छ।}other{तपाईंले SIM को गलत PIN कोड हाल्नुभयो, तपाईं अब # पटक PIN हाल्ने प्रयास गर्न सक्नुहुन्छ। }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM काम नलाग्ने भएको छ। आफ्नो सेवा प्रदायकलाई सम्पर्क गर्नुहोस्।"</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">SIM को PUK कोड गलत छ, SIM सदाका लागि काम नलाग्ने हुनु अघि तपाईं अझै <xliff:g id="NUMBER_1">%d</xliff:g> पटक प्रयास गर्न सक्नुहुन्छ।</item>
-      <item quantity="one">SIM को PUK कोड गलत छ, SIM सदाका लागि काम नलाग्ने हुनु अघि तपाईं अझै <xliff:g id="NUMBER_0">%d</xliff:g> पटक प्रयास गर्न सक्नुहुन्छ।</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{तपाईंले SIM को गलत PUK कोड हाल्नुभयो, तपाईं अब # पटक PUK हाल्ने प्रयास गर्न सक्नुहुन्छ। त्यसपछि SIM सदाका लागि प्रयोग गर्न नमिल्ने हुने छ।}other{तपाईंले SIM को गलत PUK कोड हाल्नुभयो, तपाईं अब # पटक PUK हाल्ने प्रयास गर्न सक्नुहुन्छ। त्यसपछि SIM सदाका लागि प्रयोग गर्न नमिल्ने हुने छ।}}"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"यन्त्रलाई म्यानुअल तरिकाले लक गरिएको थियो"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"पहिचान भएन"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"तपाईं \"फेस अनलक\" प्रयोग गर्न चाहनुहुन्छ भने सेटिङमा गई क्यामेरा प्रयोग गर्ने अनुमति दिनुहोस्"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">SIM को PIN प्रविष्टि गर्नुहोस्। तपाईंसँग <xliff:g id="NUMBER_1">%d</xliff:g>  प्रयासहरू बाँकी छन्।</item>
-      <item quantity="one">SIM को PIN प्रविष्टि गर्नुहोस्। तपाईंसँग <xliff:g id="NUMBER_0">%d</xliff:g> प्रयास बाँकी छ, त्यसपछि भने आफ्नो डिभाइस अनलक गर्नका लागि तपाईंले अनिवार्य रूपमा आफ्नो सेवा प्रदायकलाई सम्पर्क गर्नु पर्ने हुन्छ।</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM लाई असक्षम पारिएको छ। जारी राख्न PUK कोड प्रविष्टि गर्नुहोस्। तपाईंसँग <xliff:g id="_NUMBER_1">%d</xliff:g> प्रयासहरू बाँकी छन्, त्यसपछि SIM सदाका लागि प्रयोग गर्न नमिल्ने हुन्छ। विवरणहरूका लागि सेवा प्रदायकलाई सम्पर्क गर्नुहोस्।</item>
-      <item quantity="one">SIM लाई असक्षम पारिएको छ। जारी राख्न PUK कोड प्रविष्टि गर्नुहोस्। तपाईंसँग <xliff:g id="_NUMBER_0">%d</xliff:g> प्रयास बाँकी छ, त्यसपछि SIM सदाका लागि प्रयोग गर्न नमिल्ने हुन्छ। विवरणहरूका लागि सेवा प्रदायकलाई सम्पर्क गर्नुहोस्।</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{SIM को PIN हाल्नुहोस्। तपाईं अब # पटक PIN हाल्ने प्रयास गर्न सक्नुहुन्छ। त्यसपछि आफ्नो डिभाइस अनलक गर्न तपाईंले आफ्नो सेवा प्रदायकलाई सम्पर्क गर्नु पर्ने हुन्छ।}other{SIM को PIN हाल्नुहोस्। तपाईं अब # पटक PIN हाल्ने प्रयास गर्न सक्नुहुन्छ।}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM अहिले अफ गरिएको छ। जारी राख्न PUK कोड हाल्नुहोस्। तपाईं अब # पटक PUK हाल्ने प्रयास गर्न सक्नुहुन्छ। त्यसपछि SIM सदाका लागि प्रयोग गर्न नमिल्ने हुने छ। थप जानकारी प्राप्त गर्न आफ्नो सेवा प्रदायकलाई सम्पर्क गर्नुहोस्।}other{SIM अहिले अफ गरिएको छ। जारी राख्न PUK कोड हाल्नुहोस्। तपाईं अब # पटक PUK हाल्ने प्रयास गर्न सक्नुहुन्छ। त्यसपछि SIM सदाका लागि प्रयोग गर्न नमिल्ने हुने छ। थप जानकारी प्राप्त गर्न आफ्नो सेवा प्रदायकलाई सम्पर्क गर्नुहोस्।}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"डिफल्ट"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"बबल"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"एनालग"</string>
diff --git a/packages/SystemUI/res-keyguard/values-nl/strings.xml b/packages/SystemUI/res-keyguard/values-nl/strings.xml
index 18558eb..77bf29c 100644
--- a/packages/SystemUI/res-keyguard/values-nl/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-nl/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Je hebt je wachtwoord <xliff:g id="NUMBER_0">%1$d</xliff:g> keer onjuist getypt. \n\nProbeer het over <xliff:g id="NUMBER_1">%2$d</xliff:g> seconden opnieuw."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Je hebt je ontgrendelingspatroon <xliff:g id="NUMBER_0">%1$d</xliff:g> keer onjuist getekend. \n\nProbeer het over <xliff:g id="NUMBER_1">%2$d</xliff:g> seconden opnieuw."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Onjuiste pincode voor simkaart. Je moet nu contact opnemen met je provider om je apparaat te ontgrendelen."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">Onjuiste pincode voor simkaart. Je hebt nog <xliff:g id="NUMBER_1">%d</xliff:g> pogingen over.</item>
-      <item quantity="one">Onjuiste pincode voor simkaart. Je hebt nog <xliff:g id="NUMBER_0">%d</xliff:g> poging over voordat je contact met je provider moet opnemen om je apparaat te ontgrendelen.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Onjuiste pincode voor simkaart. Je hebt nog # poging over voordat je contact met je provider moet opnemen om je apparaat te laten ontgrendelen.}other{Onjuiste pincode voor simkaart. Je hebt nog # pogingen over. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"Simkaart is onbruikbaar. Neem contact op met je provider."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">Onjuiste pukcode voor simkaart. Je hebt nog <xliff:g id="NUMBER_1">%d</xliff:g> pogingen over voordat de simkaart definitief onbruikbaar wordt.</item>
-      <item quantity="one">Onjuiste pukcode voor simkaart. Je hebt nog <xliff:g id="NUMBER_0">%d</xliff:g> poging over voordat de simkaart definitief onbruikbaar wordt.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Onjuiste pukcode voor simkaart. Je hebt nog # poging over voordat de simkaart definitief onbruikbaar wordt.}other{Onjuiste pukcode voor simkaart. Je hebt nog # pogingen over voordat de simkaart definitief onbruikbaar wordt.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Bewerking met pincode voor simkaart is mislukt."</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Apparaat is handmatig vergrendeld"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Niet herkend"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Zet cameratoegang aan in Instellingen om Ontgrendelen via gezichtsherkenning te gebruiken"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">Geef de pincode van de simkaart op. Je hebt nog <xliff:g id="NUMBER_1">%d</xliff:g> pogingen over.</item>
-      <item quantity="one">Geef de pincode van de simkaart op. Je hebt nog <xliff:g id="NUMBER_0">%d</xliff:g> poging over voordat je contact met je provider moet opnemen om het apparaat te ontgrendelen.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">De simkaart is nu uitgezet. Geef de pukcode op om door te gaan. Je hebt nog <xliff:g id="_NUMBER_1">%d</xliff:g> pogingen over voordat de simkaart definitief onbruikbaar wordt. Neem contact op met je provider voor meer informatie.</item>
-      <item quantity="one">De simkaart is nu uitgezet. Geef de pukcode op om door te gaan. Je hebt nog <xliff:g id="_NUMBER_0">%d</xliff:g> poging over voordat de simkaart definitief onbruikbaar wordt. Neem contact op met je provider voor meer informatie.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Geef de pincode van de simkaart op. Je hebt nog # poging over voordat je contact met je provider moet opnemen om het apparaat te laten ontgrendelen.}other{Geef de pincode van de simkaart op. Je hebt nog # pogingen.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{De simkaart is nu gedeactiveerd. Geef de pukcode op om door te gaan. Je hebt nog # poging over voordat de simkaart definitief onbruikbaar wordt. Neem contact op met je provider voor meer informatie.}other{De simkaart is nu gedeactiveerd. Geef de pukcode op om door te gaan. Je hebt nog # pogingen over voordat de simkaart definitief onbruikbaar wordt. Neem contact op met je provider voor meer informatie.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Standaard"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bel"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analoog"</string>
diff --git a/packages/SystemUI/res-keyguard/values-or/strings.xml b/packages/SystemUI/res-keyguard/values-or/strings.xml
index a90e256..8765781 100644
--- a/packages/SystemUI/res-keyguard/values-or/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-or/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"ଆପଣଙ୍କ ପାସ୍‌ୱର୍ଡକୁ ଆପଣ <xliff:g id="NUMBER_0">%1$d</xliff:g> ଥର ଭୁଲ ଭାବେ ଟାଇପ୍ କରିଛନ୍ତି। \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> ସେକେଣ୍ଡ ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"ଆପଣଙ୍କ ଲକ୍‍ ଖୋଲିବା ପାଟର୍ନକୁ ଆପଣ <xliff:g id="NUMBER_0">%1$d</xliff:g>ଥର ଭୁଲ ଭାବେ ଅଙ୍କନ କରିଛନ୍ତି। \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> ସେକେଣ୍ଡ ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"ଭୁଲ SIM PIN କୋଡ୍‌, ଆପଣଙ୍କ ଡିଭାଇସକୁ ଅନଲକ୍‌ କରିବା ପାଇଁ ଏବେ ହିଁ ନିଜ କେରିଅର୍‌ଙ୍କ ସହ ସମ୍ପର୍କ କରନ୍ତୁ।"</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">ଭୁଲ SIM PIN କୋଡ୍, ଆପଣଙ୍କର ଆଉ <xliff:g id="NUMBER_1">%d</xliff:g>ଟି ପ୍ରୟାସ ବାକି ରହିଛି।</item>
-      <item quantity="one">ଭୁଲ SIM PIN କୋଡ୍, ଡିଭାଇସ୍‍ ଅନଲକ୍‍ କରିବା ପାଇଁ କେରିଅରଙ୍କ ସହିତ ଯୋଗାଯୋଗ କରିବା ପୂର୍ବରୁ ଆପଣଙ୍କ ପାଖରେ ଆଉ <xliff:g id="NUMBER_0">%d</xliff:g>ଟି ପ୍ରୟାସ ବାକି ରହିଛି।</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{ଭୁଲ SIM PIN କୋଡ, ଆପଣଙ୍କ ଡିଭାଇସକୁ ଅନଲକ କରିବା ପାଇଁ ଆପଣ ଆପଣଙ୍କର କ୍ୟାରିଅର ସହ ନିଶ୍ଚିତରୂପେ ଯୋଗାଯୋଗ କରିବା ପୂର୍ବରୁ ଆପଣଙ୍କ ପାଖରେ #ଟି ପ୍ରଚେଷ୍ଟା ବାକି ଅଛି।}other{ଭୁଲ SIM PIN କୋଡ, ଆପଣଙ୍କ ପାଖରେ #ଟି ପ୍ରଚେଷ୍ଟା ବାକି ଅଛି। }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM ବ୍ୟବହାର କରାଯାଇପାରିବ ନାହିଁ। ନିଜ କେରିଅର୍‌ଙ୍କ ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।"</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">ଭୁଲ SIM PUK କୋଡ୍‍, SIMଟି ଆଉ <xliff:g id="NUMBER_1">%d</xliff:g>ଟି ପ୍ରୟାସ ପରେ ସ୍ଥାୟୀ ଭାବେ ବ୍ୟବହାର କରାଯାଇରିବ ନାହିଁ।</item>
-      <item quantity="one">ଭୁଲ SIM PUK କୋଡ୍‍, SIMଟି ଆଉ <xliff:g id="NUMBER_0">%d</xliff:g>ଟି ପ୍ରୟାସ ପରେ ସ୍ଥାୟୀ ଭାବେ ବ୍ୟବହାର କରାଯାଇରିବ ନାହିଁ।</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{ଭୁଲ SIM PUK କୋଡ, SIM ସ୍ଥାୟୀ ଭାବେ ବ୍ୟବହାର ଅଯୋଗ୍ୟ ହେବା ପୂର୍ବରୁ ଆପଣଙ୍କ ପାଖରେ #ଟି ପ୍ରଚେଷ୍ଟା ବାକି ଅଛି।}other{ଭୁଲ SIM PUK କୋଡ, SIM ସ୍ଥାୟୀ ଭାବେ ବ୍ୟବହାର ଅଯୋଗ୍ୟ ହେବା ପୂର୍ବରୁ ଆପଣଙ୍କ ପାଖରେ #ଟି ପ୍ରଚେଷ୍ଟା ବାକି ଅଛି।}}"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"ଡିଭାଇସ୍‍ ମାନୁଆଲ ଭାବେ ଲକ୍‍ କରାଗଲା"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"ଚିହ୍ନଟ ହେଲାନାହିଁ"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"ଫେସ ଅନଲକର ବ୍ୟବହାର ପାଇଁ ସେଟିଂସରେ କ୍ୟାମେରାକୁ ଆକ୍ସେସ ଦିଅ"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">SIM PIN ପ୍ରବେଶ କରନ୍ତୁ। ଆପଣଙ୍କ ପାଇଁ <xliff:g id="NUMBER_1">%d</xliff:g>ଟି ପ୍ରୟାସ ବଳକା ଅଛି।</item>
-      <item quantity="one">SIM PIN ପ୍ରବେଶ କରନ୍ତୁ। ଆପଣଙ୍କ ଡିଭାଇସ୍‍କୁ ଅନଲକ୍ କରିବା ପାଇଁ ପାଖରେ ବଳକା ଥିବା <xliff:g id="NUMBER_0">%d</xliff:g>ଟି ପ୍ରୟାସର ବ୍ୟବହାର କରିବା ପୂର୍ବରୁ ନିଜର କେରିଅର୍‍ଙ୍କୁ ସମ୍ପର୍କ କରନ୍ତୁ।</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM କାର୍ଡକୁ ବର୍ତ୍ତମାନ ଅକ୍ଷମ କରିଦିଆଯାଇଛି। ଜାରି ରଖିବାକୁ PUK କୋଡ୍‍ ଲେଖନ୍ତୁ। ଆଉ <xliff:g id="_NUMBER_1">%d</xliff:g> ଥର ଭୁଲ କୋଡ୍‍ ଲେଖିବା ପରେ SIM କାର୍ଡ ସ୍ଥାୟୀ ଭାବେ ଅନୁପଯୋଗୀ ହୋଇଯିବ। ବିବରଣୀ ପାଇଁ କେରିଅର୍‌ର ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।</item>
-      <item quantity="one">SIM କାର୍ଡକୁ ବର୍ତ୍ତମାନ ଅକ୍ଷମ କରିଦିଆଯାଇଛି। ଜାରି ରଖିବାକୁ PUK କୋଡ୍‍ ଲେଖନ୍ତୁ। ଆଉ <xliff:g id="_NUMBER_0">%d</xliff:g> ଥର ଭୁଲ କୋଡ୍‍ ଲେଖିବା ପରେ SIM କାର୍ଡ ସ୍ଥାୟୀ ଭାବେ ଅନୁପଯୋଗୀ ହୋଇଯିବ। ବିବରଣୀ ପାଇଁ କେରିଅର୍‌ର ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{SIM PIN ଲେଖନ୍ତୁ। ଆପଣଙ୍କ ଡିଭାଇସକୁ ଅନଲକ କରିବା ପାଇଁ ଆପଣ ଆପଣଙ୍କର କ୍ୟାରିଅର ସହ ନିଶ୍ଚିତରୂପେ ଯୋଗାଯୋଗ କରିବା ପୂର୍ବରୁ ଆପଣଙ୍କ ପାଖରେ #ଟି ପ୍ରଚେଷ୍ଟା ବାକି ଅଛି।}other{SIM PIN ଲେଖନ୍ତୁ। ଆପଣଙ୍କର #ଟି ପ୍ରଚେଷ୍ଟା ବାକି ଅଛି।}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIMକୁ ବର୍ତ୍ତମାନ ଅକ୍ଷମ କରାଯାଇଛି। ଜାରି ରଖିବାକୁ PUK କୋଡ ଲେଖନ୍ତୁ। SIM ସ୍ଥାୟୀ ଭାବେ ବ୍ୟବହାର ଅଯୋଗ୍ୟ ହେବା ପୂର୍ବରୁ ଆପଣଙ୍କ ପାଖରେ #ଟି ପ୍ରଚେଷ୍ଟା ବାକି ଅଛି। ବିବରଣୀ ପାଇଁ କ୍ୟାରିଅର ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।}other{SIMକୁ ବର୍ତ୍ତମାନ ଅକ୍ଷମ କରାଯାଇଛି। ଜାରି ରଖିବାକୁ PUK କୋଡ ଲେଖନ୍ତୁ। SIM ସ୍ଥାୟୀ ଭାବେ ବ୍ୟବହାର ଅଯୋଗ୍ୟ ହେବା ପୂର୍ବରୁ ଆପଣଙ୍କ ପାଖରେ #ଟି ପ୍ରଚେଷ୍ଟା ବାକି ଅଛି। ବିବରଣୀ ପାଇଁ କ୍ୟାରିଅର ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"ଡିଫଲ୍ଟ"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"ବବଲ୍"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"ଆନାଲଗ୍"</string>
diff --git a/packages/SystemUI/res-keyguard/values-pa/strings.xml b/packages/SystemUI/res-keyguard/values-pa/strings.xml
index 243bbc3..e1c7d26 100644
--- a/packages/SystemUI/res-keyguard/values-pa/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-pa/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"ਤੁਸੀਂ <xliff:g id="NUMBER_0">%1$d</xliff:g> ਵਾਰ ਆਪਣਾ ਪਾਸਵਰਡ ਗਲਤ ਢੰਗ ਨਾਲ ਟਾਈਪ ਕੀਤਾ ਹੈ।\n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> ਸਕਿੰਟਾਂ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"ਤੁਸੀਂ <xliff:g id="NUMBER_0">%1$d</xliff:g> ਵਾਰ ਆਪਣਾ ਅਣਲਾਕ ਪੈਟਰਨ ਗਲਤ ਢੰਗ ਨਾਲ ਉਲੀਕਿਆ ਹੈ। \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> ਸਕਿੰਟਾਂ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"ਗਲਤ ਸਿਮ ਪਿੰਨ ਕੋਡ, ਆਪਣੇ ਡੀਵਾਈਸ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਲਈ ਹੁਣ ਤੁਹਾਨੂੰ ਲਾਜ਼ਮੀ ਤੌਰ \'ਤੇ ਆਪਣੇ ਕੈਰੀਅਰ ਨਾਲ ਸੰਪਰਕ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ।"</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">ਗਲਤ ਸਿਮ ਪਿੰਨ ਕੋਡ, ਤੁਹਾਡੇ ਕੋਲ <xliff:g id="NUMBER_1">%d</xliff:g> ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ।</item>
-      <item quantity="other">ਗਲਤ ਸਿਮ ਪਿੰਨ ਕੋਡ, ਤੁਹਾਡੇ ਕੋਲ <xliff:g id="NUMBER_1">%d</xliff:g> ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ।</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{ਗਲਤ ਸਿਮ ਪਿੰਨ ਕੋਡ, ਤੁਹਾਡੇ ਕੋਲ # ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ ਉਸ ਤੋਂ ਬਾਅਦ ਆਪਣੇ ਡੀਵਾਈਸ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਲਈ ਤੁਹਾਨੂੰ ਆਪਣੇ ਕੈਰੀਅਰ ਨਾਲ ਸੰਪਰਕ ਕਰਨਾ ਪਵੇਗਾ।}one{ਗਲਤ ਸਿਮ ਪਿੰਨ ਕੋਡ, ਤੁਹਾਡੇ ਕੋਲ # ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ। }other{ਗਲਤ ਸਿਮ ਪਿੰਨ ਕੋਡ, ਤੁਹਾਡੇ ਕੋਲ # ਕੋਸ਼ਿਸ਼ਾਂ ਬਾਕੀ ਹਨ। }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM ਨਾ-ਵਰਤਣਯੋਗ ਹੈ। ਆਪਣੇ ਕੈਰੀਅਰ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">ਗਲਤ ਸਿਮ PUK ਕੋਡ, ਇਸਤੋਂ ਪਹਿਲਾਂ ਕਿ ਸਿਮ ਸਥਾਈ ਤੌਰ \'ਤੇ ਵਰਤਣਯੋਗ ਨਾ ਰਹੇ, ਤੁਹਾਡੇ ਕੋਲ <xliff:g id="NUMBER_1">%d</xliff:g> ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ।</item>
-      <item quantity="other">ਗਲਤ ਸਿਮ PUK ਕੋਡ, ਇਸਤੋਂ ਪਹਿਲਾਂ ਕਿ ਸਿਮ ਸਥਾਈ ਤੌਰ \'ਤੇ ਵਰਤਣਯੋਗ ਨਾ ਰਹੇ, ਤੁਹਾਡੇ ਕੋਲ <xliff:g id="NUMBER_1">%d</xliff:g> ਕੋਸ਼ਿਸ਼ਾਂ ਬਾਕੀ ਹਨ।</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{ਗਲਤ ਸਿਮ PUK ਕੋਡ, ਇਸ ਤੋਂ ਪਹਿਲਾਂ ਕਿ ਸਿਮ ਬਿਲਕੁਲ ਬੇਕਾਰ ਹੋ ਜਾਵੇ, ਤੁਹਾਡੇ ਕੋਲ # ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ।}one{ਗਲਤ ਸਿਮ PUK ਕੋਡ, ਇਸ ਤੋਂ ਪਹਿਲਾਂ ਕਿ ਸਿਮ ਬਿਲਕੁਲ ਬੇਕਾਰ ਹੋ ਜਾਵੇ, ਤੁਹਾਡੇ ਕੋਲ # ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ।}other{ਗਲਤ ਸਿਮ PUK ਕੋਡ, ਇਸ ਤੋਂ ਪਹਿਲਾਂ ਕਿ ਸਿਮ ਬਿਲਕੁਲ ਬੇਕਾਰ ਹੋ ਜਾਵੇ, ਤੁਹਾਡੇ ਕੋਲ # ਕੋਸ਼ਿਸ਼ਾਂ ਬਾਕੀ ਹਨ।}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"ਸਿਮ ਪਿੰਨ ਕਾਰਵਾਈ ਅਸਫਲ ਰਹੀ!"</string>
     <string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM PUK ਕਾਰਵਾਈ ਅਸਫਲ ਰਹੀ!"</string>
     <string name="accessibility_ime_switch_button" msgid="9082358310194861329">"ਇਨਪੁੱਟ ਵਿਧੀ ਸਵਿੱਚ ਕਰੋ"</string>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"ਡੀਵਾਈਸ ਨੂੰ ਹੱਥੀਂ ਲਾਕ ਕੀਤਾ ਗਿਆ"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"ਪਛਾਣ ਨਹੀਂ ਹੋਈ"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"ਫ਼ੇਸ ਅਣਲਾਕ ਵਰਤਣ ਲਈ, ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਕੈਮਰਾ ਪਹੁੰਚ ਚਾਲੂ ਕਰੋ"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">ਸਿਮ ਪਿੰਨ ਦਾਖਲ ਕਰੋ। ਤੁਹਾਡੇ ਕੋਲ <xliff:g id="NUMBER_1">%d</xliff:g> ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ।</item>
-      <item quantity="other">ਸਿਮ ਪਿੰਨ ਦਾਖਲ ਕਰੋ। ਤੁਹਾਡੇ ਕੋਲ <xliff:g id="NUMBER_1">%d</xliff:g> ਕੋਸ਼ਿਸ਼ਾਂ ਬਾਕੀ ਹਨ।</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">ਸਿਮ ਹੁਣ ਬੰਦ ਹੋ ਗਿਆ ਹੈ। ਜਾਰੀ ਰੱਖਣ ਲਈ PUK ਕੋਡ ਦਾਖਲ ਕਰੋ। ਸਿਮ ਦੇ ਪੱਕੇ ਤੌਰ \'ਤੇ ਬੇਕਾਰ ਹੋ ਜਾਣ ਤੋਂ ਪਹਿਲਾਂ ਤੁਹਾਡੇ ਕੋਲ <xliff:g id="_NUMBER_1">%d</xliff:g> ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ। ਵੇਰਵਿਆਂ ਲਈ ਕੈਰੀਅਰ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।</item>
-      <item quantity="other">ਸਿਮ ਹੁਣ ਬੰਦ ਹੋ ਗਿਆ ਹੈ। ਜਾਰੀ ਰੱਖਣ ਲਈ PUK ਕੋਡ ਦਾਖਲ ਕਰੋ। ਸਿਮ ਦੇ ਪੱਕੇ ਤੌਰ \'ਤੇ ਬੇਕਾਰ ਹੋ ਜਾਣ ਤੋਂ ਪਹਿਲਾਂ ਤੁਹਾਡੇ ਕੋਲ <xliff:g id="_NUMBER_1">%d</xliff:g> ਕੋਸ਼ਿਸ਼ਾਂ ਬਾਕੀ ਹਨ। ਵੇਰਵਿਆਂ ਲਈ ਕੈਰੀਅਰ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{ਸਿਮ ਪਿੰਨ ਦਾਖਲ ਕਰੋ। ਤੁਹਾਡੇ ਕੋਲ # ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ, ਉਸ ਤੋਂ ਬਾਅਦ ਆਪਣੇ ਡੀਵਾਈਸ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਲਈ ਤੁਹਾਨੂੰ ਆਪਣੇ ਕੈਰੀਅਰ ਨਾਲ ਸੰਪਰਕ ਕਰਨਾ ਪਵੇਗਾ।}one{ਸਿਮ ਪਿੰਨ ਦਾਖਲ ਕਰੋ। ਤੁਹਾਡੇ ਕੋਲ # ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ।}other{ਸਿਮ ਪਿੰਨ ਦਾਖਲ ਕਰੋ। ਤੁਹਾਡੇ ਕੋਲ # ਕੋਸ਼ਿਸ਼ਾਂ ਬਾਕੀ ਹਨ।}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{ਸਿਮ ਹੁਣ ਬੰਦ ਹੋ ਗਿਆ ਹੈ। ਜਾਰੀ ਰੱਖਣ ਲਈ PUK ਕੋਡ ਦਾਖਲ ਕਰੋ। ਇਸ ਤੋਂ ਪਹਿਲਾਂ ਕਿ ਸਿਮ ਬਿਲਕੁਲ ਬੇਕਾਰ ਹੋ ਜਾਵੇ, ਤੁਹਾਡੇ ਕੋਲ # ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ। ਵੇਰਵਿਆਂ ਲਈ ਕੈਰੀਅਰ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।}one{ਸਿਮ ਹੁਣ ਬੰਦ ਹੋ ਗਿਆ ਹੈ। ਜਾਰੀ ਰੱਖਣ ਲਈ PUK ਕੋਡ ਦਾਖਲ ਕਰੋ। ਇਸ ਤੋਂ ਪਹਿਲਾਂ ਕਿ ਸਿਮ ਬਿਲਕੁਲ ਬੇਕਾਰ ਹੋ ਜਾਵੇ, ਤੁਹਾਡੇ ਕੋਲ # ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ। ਵੇਰਵਿਆਂ ਲਈ ਕੈਰੀਅਰ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।}other{ਸਿਮ ਹੁਣ ਬੰਦ ਹੋ ਗਿਆ ਹੈ। ਜਾਰੀ ਰੱਖਣ ਲਈ PUK ਕੋਡ ਦਾਖਲ ਕਰੋ। ਇਸ ਤੋਂ ਪਹਿਲਾਂ ਕਿ ਸਿਮ ਬਿਲਕੁਲ ਬੇਕਾਰ ਹੋ ਜਾਵੇ, ਤੁਹਾਡੇ ਕੋਲ # ਕੋਸ਼ਿਸ਼ਾਂ ਬਾਕੀ ਹਨ। ਵੇਰਵਿਆਂ ਲਈ ਕੈਰੀਅਰ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"ਪੂਰਵ-ਨਿਰਧਾਰਿਤ"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"ਬੁਲਬੁਲਾ"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"ਐਨਾਲੌਗ"</string>
diff --git a/packages/SystemUI/res-keyguard/values-pl/strings.xml b/packages/SystemUI/res-keyguard/values-pl/strings.xml
index 5165b10..7cf1784 100644
--- a/packages/SystemUI/res-keyguard/values-pl/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-pl/strings.xml
@@ -68,19 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Po raz <xliff:g id="NUMBER_0">%1$d</xliff:g> wpisałeś nieprawidłowe hasło. \n\nSpróbuj ponownie za <xliff:g id="NUMBER_1">%2$d</xliff:g> s."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Po raz <xliff:g id="NUMBER_0">%1$d</xliff:g> nieprawidłowo narysowałeś wzór odblokowania. \n\nSpróbuj ponownie za <xliff:g id="NUMBER_1">%2$d</xliff:g> s."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Nieprawidłowy kod PIN karty SIM. Musisz teraz skontaktować się z operatorem, by odblokował Twoje urządzenie."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="few">Nieprawidłowy kod PIN karty SIM. Masz jeszcze <xliff:g id="NUMBER_1">%d</xliff:g> próby.</item>
-      <item quantity="many">Nieprawidłowy kod PIN karty SIM. Masz jeszcze <xliff:g id="NUMBER_1">%d</xliff:g> prób.</item>
-      <item quantity="other">Nieprawidłowy kod PIN karty SIM. Masz jeszcze <xliff:g id="NUMBER_1">%d</xliff:g> próby.</item>
-      <item quantity="one">Nieprawidłowy kod PIN karty SIM. Masz jeszcze <xliff:g id="NUMBER_0">%d</xliff:g> próbę, zanim będziesz musiał skontaktować się z operatorem, by odblokował Twoje urządzenie.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Nieprawidłowy kod PIN karty SIM. Masz jeszcze # próbę, zanim trzeba będzie skontaktować się z operatorem, aby odblokował Twoje urządzenie.}few{Nieprawidłowy kod PIN karty SIM. Masz jeszcze # próby. }many{Nieprawidłowy kod PIN karty SIM. Masz jeszcze # prób. }other{Nieprawidłowy kod PIN karty SIM. Masz jeszcze # próby. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"Karta SIM została trwale zablokowana. Skontaktuj się z operatorem."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="few">Nieprawidłowy kod PUK karty SIM. Masz jeszcze <xliff:g id="NUMBER_1">%d</xliff:g> próby, zanim karta SIM zostanie trwale zablokowana.</item>
-      <item quantity="many">Nieprawidłowy kod PUK karty SIM. Masz jeszcze <xliff:g id="NUMBER_1">%d</xliff:g> prób, zanim karta SIM zostanie trwale zablokowana.</item>
-      <item quantity="other">Nieprawidłowy kod PUK karty SIM. Masz jeszcze <xliff:g id="NUMBER_1">%d</xliff:g> próby, zanim karta SIM zostanie trwale zablokowana.</item>
-      <item quantity="one">Nieprawidłowy kod PUK karty SIM. Masz jeszcze <xliff:g id="NUMBER_0">%d</xliff:g> próbę, zanim karta SIM zostanie trwale zablokowana.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Nieprawidłowy kod PUK karty SIM. Masz jeszcze # próbę, zanim karta SIM zostanie trwale zablokowana.}few{Nieprawidłowy kod PUK karty SIM. Masz jeszcze # próby, zanim karta SIM zostanie trwale zablokowana.}many{Nieprawidłowy kod PUK karty SIM. Masz jeszcze # prób, zanim karta SIM zostanie trwale zablokowana.}other{Nieprawidłowy kod PUK karty SIM. Masz jeszcze # próby, zanim karta SIM zostanie trwale zablokowana.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Operacja z kodem PIN karty SIM nie udała się."</string>
     <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>
@@ -95,18 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Urządzenie zostało zablokowane ręcznie"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nie rozpoznano"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Aby używać rozpoznawania twarzy, włącz w Ustawieniach dostęp do aparatu"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="few">Wpisz kod PIN karty SIM. Masz jeszcze <xliff:g id="NUMBER_1">%d</xliff:g> próby.</item>
-      <item quantity="many">Wpisz kod PIN karty SIM. Masz jeszcze <xliff:g id="NUMBER_1">%d</xliff:g> prób.</item>
-      <item quantity="other">Wpisz kod PIN karty SIM. Masz jeszcze <xliff:g id="NUMBER_1">%d</xliff:g> próby.</item>
-      <item quantity="one">Wpisz kod PIN karty SIM. Masz jeszcze <xliff:g id="NUMBER_0">%d</xliff:g> próbę, zanim będzie trzeba skontaktować się z operatorem, by odblokować to urządzenie.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="few">Karta SIM została wyłączona. Wpisz kod PUK, by przejść dalej. Masz jeszcze <xliff:g id="_NUMBER_1">%d</xliff:g> próby, zanim karta SIM zostanie trwale zablokowana. Aby uzyskać szczegółowe informacje, skontaktuj się z operatorem.</item>
-      <item quantity="many">Karta SIM została wyłączona. Wpisz kod PUK, by przejść dalej. Masz jeszcze <xliff:g id="_NUMBER_1">%d</xliff:g> prób, zanim karta SIM zostanie trwale zablokowana. Aby uzyskać szczegółowe informacje, skontaktuj się z operatorem.</item>
-      <item quantity="other">Karta SIM została wyłączona. Wpisz kod PUK, by przejść dalej. Masz jeszcze <xliff:g id="_NUMBER_1">%d</xliff:g> próby, zanim karta SIM zostanie trwale zablokowana. Aby uzyskać szczegółowe informacje, skontaktuj się z operatorem.</item>
-      <item quantity="one">Karta SIM została wyłączona. Wpisz kod PUK, by przejść dalej. Masz jeszcze <xliff:g id="_NUMBER_0">%d</xliff:g> próbę, zanim karta SIM zostanie trwale zablokowana. Aby uzyskać szczegółowe informacje, skontaktuj się z operatorem.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Wpisz kod PIN karty SIM. Masz jeszcze # próbę, zanim będzie trzeba skontaktować się z operatorem, aby odblokować to urządzenie.}few{Wpisz kod PIN karty SIM. Masz jeszcze # próby.}many{Wpisz kod PIN karty SIM. Masz jeszcze # prób.}other{Wpisz kod PIN karty SIM. Masz jeszcze # próby.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{Karta SIM została wyłączona. Wpisz kod PUK, aby przejść dalej. Masz jeszcze # próbę, zanim karta SIM zostanie trwale zablokowana. Aby uzyskać szczegółowe informacje, skontaktuj się z operatorem.}few{Karta SIM została wyłączona. Wpisz kod PUK, aby przejść dalej. Masz jeszcze # próby, zanim karta SIM zostanie trwale zablokowana. Aby uzyskać szczegółowe informacje, skontaktuj się z operatorem.}many{Karta SIM została wyłączona. Wpisz kod PUK, aby przejść dalej. Masz jeszcze # prób, zanim karta SIM zostanie trwale zablokowana. Aby uzyskać szczegółowe informacje, skontaktuj się z operatorem.}other{Karta SIM została wyłączona. Wpisz kod PUK, aby przejść dalej. Masz jeszcze # próby, zanim karta SIM zostanie trwale zablokowana. Aby uzyskać szczegółowe informacje, skontaktuj się z operatorem.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Domyślna"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bąbelkowy"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogowy"</string>
diff --git a/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml b/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml
index 04206fd..863a419 100644
--- a/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Você digitou sua senha incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. \n\nTente novamente em <xliff:g id="NUMBER_1">%2$d</xliff:g> segundos."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Você desenhou sua sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. \n\nTente novamente em <xliff:g id="NUMBER_1">%2$d</xliff:g> segundos."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Código PIN do chip incorreto. Entre em contato com a operadora para desbloquear o dispositivo."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">Código PIN do chip incorreto. Tentativas restantes: <xliff:g id="NUMBER_1">%d</xliff:g>.</item>
-      <item quantity="other">Código PIN do chip incorreto. Tentativas restantes: <xliff:g id="NUMBER_1">%d</xliff:g>.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Código PIN do chip incorreto. Você tem # tentativa restante. Se o código correto não for digitado, será necessário entrar em contato com a operadora para desbloquear o dispositivo.}one{Código PIN do chip incorreto. Você tem # tentativa restante. }other{Código PIN do chip incorreto. Você tem # tentativas restantes. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"O chip não pode ser utilizado. Entre em contato com a operadora."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">Código PUK do chip incorreto. Tentativas restantes: <xliff:g id="NUMBER_1">%d</xliff:g>. Caso o código correto não seja digitado, o chip se tornará permanentemente inutilizável.</item>
-      <item quantity="other">Código PUK do chip incorreto. Tentativas restantes: <xliff:g id="NUMBER_1">%d</xliff:g>. Caso o código correto não seja digitado, o chip se tornará permanentemente inutilizável.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Código PUK do chip incorreto. Você tem # tentativa restante. Se o código correto não for digitado, o chip vai ficar permanentemente inutilizável.}one{Código PUK do chip incorreto. Você tem # tentativa restante. Se o código correto não for digitado, o chip vai ficar permanentemente inutilizável.}other{Código PUK do chip incorreto. Você tem # tentativas restantes. Se o código correto não for digitado, o chip vai ficar permanentemente inutilizável.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Falha na operação de PIN do chip."</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"O dispositivo foi bloqueado manualmente"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Não reconhecido"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Para usar o Desbloqueio facial, ative o acesso à câmera nas Configurações"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">Informe o PIN do chip. Você tem <xliff:g id="NUMBER_1">%d</xliff:g> tentativa restante.</item>
-      <item quantity="other">Informe o PIN do chip. Você tem <xliff:g id="NUMBER_1">%d</xliff:g> tentativas restantes.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">O chip agora está desativado. Informe o código PUK para continuar. Você tem <xliff:g id="_NUMBER_1">%d</xliff:g> tentativa restante antes de o chip se tornar permanentemente inutilizável. Entre em contato com a operadora para saber mais detalhes.</item>
-      <item quantity="other">O chip agora está desativado. Informe o código PUK para continuar. Você tem <xliff:g id="_NUMBER_1">%d</xliff:g> tentativas restantes antes de o chip se tornar permanentemente inutilizável. Entre em contato com a operadora para saber mais detalhes.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Informe o PIN do chip. Você tem # tentativa restante antes de precisar entrar em contato com a operadora para desbloquear seu dispositivo.}one{Informe o PIN do chip. Você tem # tentativa restante.}other{Informe o PIN do chip. Você tem # tentativas restantes.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{O chip está desativado. Informe o código PUK para continuar. Você tem # tentativa restante antes que o chip fique permanentemente inutilizável. Consulte sua operadora para saber mais.}one{O chip está desativado. Informe o código PUK para continuar. Você tem # tentativa restante antes que o chip fique permanentemente inutilizável. Consulte sua operadora para saber mais.}other{O chip está desativado. Informe o código PUK para continuar. Você tem # tentativas restantes antes que o chip fique permanentemente inutilizável. Consulte sua operadora para saber mais.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Padrão"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bolha"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analógico"</string>
diff --git a/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml b/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml
index abfed2e..6073951c 100644
--- a/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-pt-rPT/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Introduziu a palavra-passe incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. \n\nTente novamente dentro de <xliff:g id="NUMBER_1">%2$d</xliff:g> segundos."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Desenhou a sua padrão de desbloqueio incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. \n\nTente novamente dentro de <xliff:g id="NUMBER_1">%2$d</xliff:g> segundos."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Código PIN do cartão SIM incorreto. Tem de contactar o seu operador para desbloquear o dispositivo."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">Código PIN do cartão SIM incorreto. Tem mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas.</item>
-      <item quantity="one">Código PIN do cartão SIM incorreto. Tem mais <xliff:g id="NUMBER_0">%d</xliff:g> tentativa antes de precisar de contactar o seu operador para desbloquear o dispositivo.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Código PIN do SIM incorreto. Tem mais # tentativa antes de ser necessário contactar o operador para desbloquear o dispositivo.}other{Código PIN do SIM incorreto. Tem mais # tentativas. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"Cartão SIM inutilizável. Contacte o seu operador."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">Código PUK do cartão SIM incorreto. Tem mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas antes de o cartão SIM ficar permanentemente inutilizável.</item>
-      <item quantity="one">Código PUK do cartão SIM incorreto. Tem mais <xliff:g id="NUMBER_0">%d</xliff:g> tentativa antes de o cartão SIM ficar permanentemente inutilizável.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Código PUK do SIM incorreto. Tem mais # tentativa antes de o SIM ficar permanentemente inutilizável.}other{Código PUK do SIM incorreto. Tem mais # tentativas antes de o SIM ficar permanentemente inutilizável.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Falha ao introduzir o PIN do cartão SIM!"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"O dispositivo foi bloqueado manualmente"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Não reconhecido."</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Ative acesso à câmara nas Def. p/ usar Desbl. facial"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">Introduza o PIN do cartão SIM. Tem mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas.</item>
-      <item quantity="one">Introduza o PIN do cartão SIM. Tem mais <xliff:g id="NUMBER_0">%d</xliff:g> tentativa antes de ser necessário contactar o operador para desbloquear o dispositivo.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">O SIM encontra-se desativado. Introduza o código PUK para continuar. Tem mais <xliff:g id="_NUMBER_1">%d</xliff:g> tentativas antes de o cartão SIM ficar permanentemente inutilizável. Contacte o operador para obter mais detalhes.</item>
-      <item quantity="one">O SIM encontra-se desativado. Introduza o código PUK para continuar. Tem mais <xliff:g id="_NUMBER_0">%d</xliff:g> tentativa antes de o cartão SIM ficar permanentemente inutilizável. Contacte o operador para obter mais detalhes.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Introduza o PIN do SIM. Tem mais # tentativa antes de ser necessário contactar o operador para desbloquear o dispositivo.}other{Introduza o PIN do SIM. Tem mais # tentativas.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{O SIM está desativado. Introduza o código PUK para continuar. Tem mais # tentativa antes de o SIM ficar permanentemente inutilizável. Contacte o operador para obter mais detalhes.}other{O SIM está desativado. Introduza o código PUK para continuar. Tem mais # tentativas antes de o SIM ficar permanentemente inutilizável. Contacte o operador para obter mais detalhes.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Predefinido"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Balão"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analógico"</string>
diff --git a/packages/SystemUI/res-keyguard/values-pt/strings.xml b/packages/SystemUI/res-keyguard/values-pt/strings.xml
index 04206fd..863a419 100644
--- a/packages/SystemUI/res-keyguard/values-pt/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-pt/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Você digitou sua senha incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. \n\nTente novamente em <xliff:g id="NUMBER_1">%2$d</xliff:g> segundos."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Você desenhou sua sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%1$d</xliff:g> vezes. \n\nTente novamente em <xliff:g id="NUMBER_1">%2$d</xliff:g> segundos."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Código PIN do chip incorreto. Entre em contato com a operadora para desbloquear o dispositivo."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">Código PIN do chip incorreto. Tentativas restantes: <xliff:g id="NUMBER_1">%d</xliff:g>.</item>
-      <item quantity="other">Código PIN do chip incorreto. Tentativas restantes: <xliff:g id="NUMBER_1">%d</xliff:g>.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Código PIN do chip incorreto. Você tem # tentativa restante. Se o código correto não for digitado, será necessário entrar em contato com a operadora para desbloquear o dispositivo.}one{Código PIN do chip incorreto. Você tem # tentativa restante. }other{Código PIN do chip incorreto. Você tem # tentativas restantes. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"O chip não pode ser utilizado. Entre em contato com a operadora."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">Código PUK do chip incorreto. Tentativas restantes: <xliff:g id="NUMBER_1">%d</xliff:g>. Caso o código correto não seja digitado, o chip se tornará permanentemente inutilizável.</item>
-      <item quantity="other">Código PUK do chip incorreto. Tentativas restantes: <xliff:g id="NUMBER_1">%d</xliff:g>. Caso o código correto não seja digitado, o chip se tornará permanentemente inutilizável.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Código PUK do chip incorreto. Você tem # tentativa restante. Se o código correto não for digitado, o chip vai ficar permanentemente inutilizável.}one{Código PUK do chip incorreto. Você tem # tentativa restante. Se o código correto não for digitado, o chip vai ficar permanentemente inutilizável.}other{Código PUK do chip incorreto. Você tem # tentativas restantes. Se o código correto não for digitado, o chip vai ficar permanentemente inutilizável.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Falha na operação de PIN do chip."</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"O dispositivo foi bloqueado manualmente"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Não reconhecido"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Para usar o Desbloqueio facial, ative o acesso à câmera nas Configurações"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">Informe o PIN do chip. Você tem <xliff:g id="NUMBER_1">%d</xliff:g> tentativa restante.</item>
-      <item quantity="other">Informe o PIN do chip. Você tem <xliff:g id="NUMBER_1">%d</xliff:g> tentativas restantes.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">O chip agora está desativado. Informe o código PUK para continuar. Você tem <xliff:g id="_NUMBER_1">%d</xliff:g> tentativa restante antes de o chip se tornar permanentemente inutilizável. Entre em contato com a operadora para saber mais detalhes.</item>
-      <item quantity="other">O chip agora está desativado. Informe o código PUK para continuar. Você tem <xliff:g id="_NUMBER_1">%d</xliff:g> tentativas restantes antes de o chip se tornar permanentemente inutilizável. Entre em contato com a operadora para saber mais detalhes.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Informe o PIN do chip. Você tem # tentativa restante antes de precisar entrar em contato com a operadora para desbloquear seu dispositivo.}one{Informe o PIN do chip. Você tem # tentativa restante.}other{Informe o PIN do chip. Você tem # tentativas restantes.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{O chip está desativado. Informe o código PUK para continuar. Você tem # tentativa restante antes que o chip fique permanentemente inutilizável. Consulte sua operadora para saber mais.}one{O chip está desativado. Informe o código PUK para continuar. Você tem # tentativa restante antes que o chip fique permanentemente inutilizável. Consulte sua operadora para saber mais.}other{O chip está desativado. Informe o código PUK para continuar. Você tem # tentativas restantes antes que o chip fique permanentemente inutilizável. Consulte sua operadora para saber mais.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Padrão"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bolha"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analógico"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ro/strings.xml b/packages/SystemUI/res-keyguard/values-ro/strings.xml
index 884d8d2..5a0dfed 100644
--- a/packages/SystemUI/res-keyguard/values-ro/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ro/strings.xml
@@ -68,17 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Ați introdus incorect parola de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. \n\nÎncercați din nou peste <xliff:g id="NUMBER_1">%2$d</xliff:g> secunde."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Ați desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. \n\nÎncercați din nou peste <xliff:g id="NUMBER_1">%2$d</xliff:g> secunde."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Codul PIN pentru cardul SIM este incorect. Contactați operatorul pentru a vă debloca dispozitivul."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="few">Codul PIN pentru cardul SIM este incorect. V-au mai rămas <xliff:g id="NUMBER_1">%d</xliff:g> încercări.</item>
-      <item quantity="other">Codul PIN pentru cardul SIM este incorect. V-au mai rămas <xliff:g id="NUMBER_1">%d</xliff:g> de încercări.</item>
-      <item quantity="one">Codul PIN pentru cardul SIM este incorect. V-a mai rămas <xliff:g id="NUMBER_0">%d</xliff:g> încercare, după care va trebui să contactați operatorul pentru a vă debloca dispozitivul.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Codul PIN pentru cardul SIM este incorect. V-a mai rămas # încercare, după care va trebui să contactați operatorul pentru a vă debloca dispozitivul.}few{Codul PIN pentru cardul SIM este incorect. V-au mai rămas # încercări. }other{Codul PIN pentru cardul SIM este incorect. V-au mai rămas # de încercări. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"Cardul SIM nu poate fi utilizat. Contactați operatorul."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="few">Codul PUK pentru cardul SIM este incorect. V-au mai rămas <xliff:g id="NUMBER_1">%d</xliff:g> încercări până când cardul SIM va deveni inutilizabil definitiv.</item>
-      <item quantity="other">Codul PUK pentru cardul SIM este incorect. V-au mai rămas <xliff:g id="NUMBER_1">%d</xliff:g> de încercări până când cardul SIM va deveni inutilizabil definitiv.</item>
-      <item quantity="one">Codul PUK pentru cardul SIM este incorect. V-a mai rămas <xliff:g id="NUMBER_0">%d</xliff:g> încercare până când cardul SIM va deveni inutilizabil definitiv.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Codul PUK pentru cardul SIM este incorect. V-a mai rămas # încercare până când cardul SIM va deveni inutilizabil definitiv.}few{Codul PUK pentru cardul SIM este incorect. V-au mai rămas # încercări până când cardul SIM va deveni inutilizabil definitiv.}other{Codul PUK pentru cardul SIM este incorect. V-au mai rămas # de încercări până când cardul SIM va deveni inutilizabil definitiv.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Deblocarea cu ajutorul codului PIN pentru cardul SIM nu a reușit!"</string>
     <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">"Comutați metoda de introducere"</string>
@@ -93,16 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Dispozitivul a fost blocat manual"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nu este recunoscut"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Pentru Deblocare facială, activați accesul la cameră"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="few">Introduceți codul PIN pentru cardul SIM. V-au mai rămas <xliff:g id="NUMBER_1">%d</xliff:g> încercări.</item>
-      <item quantity="other">Introduceți codul PIN pentru cardul SIM. V-au mai rămas <xliff:g id="NUMBER_1">%d</xliff:g> de încercări.</item>
-      <item quantity="one">Introduceți codul PIN pentru cardul SIM. V-a mai rămas <xliff:g id="NUMBER_0">%d</xliff:g> încercare, după care va trebui să contactați operatorul pentru a vă debloca dispozitivul.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="few">Cardul SIM este dezactivat acum. Introduceți codul PUK pentru a continua. V-au mai rămas <xliff:g id="_NUMBER_1">%d</xliff:g> încercări până când cardul SIM va deveni inutilizabil definitiv. Contactați operatorul pentru detalii.</item>
-      <item quantity="other">Cardul SIM este dezactivat acum. Introduceți codul PUK pentru a continua. V-au mai rămas <xliff:g id="_NUMBER_1">%d</xliff:g> de încercări până când cardul SIM va deveni inutilizabil definitiv. Contactați operatorul pentru detalii.</item>
-      <item quantity="one">Cardul SIM este dezactivat acum. Introduceți codul PUK pentru a continua. V-a mai rămas <xliff:g id="_NUMBER_0">%d</xliff:g> încercare până când cardul SIM va deveni inutilizabil definitiv. Contactați operatorul pentru detalii.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Introduceți codul PIN pentru cardul SIM. V-a mai rămas # încercare, după care va trebui să contactați operatorul pentru a vă debloca dispozitivul.}few{Introduceți codul PIN al cardului SIM. V-au rămas # încercări.}other{Introduceți codul PIN al cardului SIM. V-au rămas # de încercări.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{Cardul SIM este dezactivat acum. Introduceți codul PUK pentru a continua. V-a mai rămas # încercare până când cardul SIM va deveni inutilizabil definitiv. Contactați operatorul pentru detalii.}few{Cardul SIM este dezactivat acum. Introduceți codul PUK pentru a continua. V-au mai rămas # încercări până când cardul SIM va deveni inutilizabil definitiv. Contactați operatorul pentru detalii.}other{Cardul SIM este dezactivat acum. Introduceți codul PUK pentru a continua. V-au mai rămas # de încercări până când cardul SIM va deveni inutilizabil definitiv. Contactați operatorul pentru detalii.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Prestabilit"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Balon"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogic"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ru/strings.xml b/packages/SystemUI/res-keyguard/values-ru/strings.xml
index 435a40cf..a21dd6d 100644
--- a/packages/SystemUI/res-keyguard/values-ru/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ru/strings.xml
@@ -68,19 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Вы ввели неверный пароль несколько раз (<xliff:g id="NUMBER_0">%1$d</xliff:g>).\n\nПовторите попытку через <xliff:g id="NUMBER_1">%2$d</xliff:g> сек."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Вы начертили неверный графический ключ несколько раз (<xliff:g id="NUMBER_0">%1$d</xliff:g>).\n\nПовторите попытку через <xliff:g id="NUMBER_1">%2$d</xliff:g> сек."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Неверный PIN-код. Обратитесь к оператору связи, чтобы разблокировать SIM-карту."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">Неверный PIN-код. Осталась <xliff:g id="NUMBER_1">%d</xliff:g> попытка.</item>
-      <item quantity="few">Неверный PIN-код. Осталось <xliff:g id="NUMBER_1">%d</xliff:g> попытки.</item>
-      <item quantity="many">Неверный PIN-код. Осталось <xliff:g id="NUMBER_1">%d</xliff:g> попыток.</item>
-      <item quantity="other">Неверный PIN-код. Осталось <xliff:g id="NUMBER_1">%d</xliff:g> попытки.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Неверный PIN-код. Осталась # попытка. Если ввести неправильный PIN-код ещё раз, SIM-карта будет заблокирована и вам придется обратиться к оператору связи.}one{Неверный PIN-код. Осталась # попытка. }few{Неверный PIN-код. Осталось # попытки. }many{Неверный PIN-код. Осталось # попыток. }other{Неверный PIN-код. Осталось # попытки. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM-карта заблокирована навсегда. Обратитесь к оператору связи."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">Неверный PUK-код. Осталась <xliff:g id="NUMBER_1">%d</xliff:g> попытка. После этого SIM-карта будет заблокирована навсегда.</item>
-      <item quantity="few">Неверный PUK-код. Осталось <xliff:g id="NUMBER_1">%d</xliff:g> попытки. После этого SIM-карта будет заблокирована навсегда.</item>
-      <item quantity="many">Неверный PUK-код. Осталось <xliff:g id="NUMBER_1">%d</xliff:g> попыток. После этого SIM-карта будет заблокирована навсегда.</item>
-      <item quantity="other">Неверный PUK-код. Осталось <xliff:g id="NUMBER_1">%d</xliff:g> попытки. После этого SIM-карта будет заблокирована навсегда.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Неверный PUK-код. Осталась # попытка. Если ввести неправильный PUK-код ещё раз, SIM-карта будет заблокирована навсегда.}one{Неверный PUK-код. Осталась # попытка. После того как попытки закончатся, SIM-карта будет заблокирована навсегда.}few{Неверный PUK-код. Осталось # попытки. После того как они закончатся, SIM-карта будет заблокирована навсегда.}many{Неверный PUK-код. Осталось # попыток. После того как они закончатся, SIM-карта будет заблокирована навсегда.}other{Неверный PUK-код. Осталось # попытки. После того как попытки закончатся, SIM-карта будет заблокирована навсегда.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Не удалось разблокировать SIM-карту"</string>
     <string name="kg_password_puk_failed" msgid="6778867411556937118">"Не удалось разблокировать SIM-карту"</string>
     <string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Сменить способ ввода"</string>
@@ -95,18 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Устройство было заблокировано вручную"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Не распознано"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"В настройках разрешите фейсконтролю доступ к камере."</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">Введите PIN-код. Осталась <xliff:g id="NUMBER_1">%d</xliff:g> попытка.</item>
-      <item quantity="few">Введите PIN-код. Осталось <xliff:g id="NUMBER_1">%d</xliff:g> попытки.</item>
-      <item quantity="many">Введите PIN-код. Осталось <xliff:g id="NUMBER_1">%d</xliff:g> попыток.</item>
-      <item quantity="other">Введите PIN-код. Осталось <xliff:g id="NUMBER_1">%d</xliff:g> попытки.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">SIM-карта отключена. Чтобы продолжить, введите PUK-код. Осталась <xliff:g id="_NUMBER_1">%d</xliff:g> попытка. После этого SIM-карта будет заблокирована навсегда. За подробной информацией обратитесь к оператору связи.</item>
-      <item quantity="few">SIM-карта отключена. Чтобы продолжить, введите PUK-код. Осталось <xliff:g id="_NUMBER_1">%d</xliff:g> попытки. После этого SIM-карта будет заблокирована навсегда. За подробной информацией обратитесь к оператору связи.</item>
-      <item quantity="many">SIM-карта отключена. Чтобы продолжить, введите PUK-код. Осталось <xliff:g id="_NUMBER_1">%d</xliff:g> попыток. После этого SIM-карта будет заблокирована навсегда. За подробной информацией обратитесь к оператору связи.</item>
-      <item quantity="other">SIM-карта отключена. Чтобы продолжить, введите PUK-код. Осталось <xliff:g id="_NUMBER_1">%d</xliff:g> попытки. После этого SIM-карта будет заблокирована навсегда. За подробной информацией обратитесь к оператору связи.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Введите PIN-код. Осталась # попытка. Если указать неверный PIN-код ещё раз, SIM-карта будет заблокирована и вам придется обратиться к оператору связи.}one{Введите PIN-код SIM-карты. Осталась # попытка.}few{Введите PIN-код SIM-карты. Осталось # попытки.}many{Введите PIN-код SIM-карты. Осталось # попыток.}other{Введите PIN-код SIM-карты. Осталось # попытки.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM-карта заблокирована. Чтобы продолжить, введите PUK-код. Осталась # попытка. Если ввести неверный PUK-код, SIM-карта будет заблокирована навсегда. За подробной информацией обратитесь к оператору связи.}one{SIM-карта заблокирована. Чтобы продолжить, введите PUK-код. Осталась # попытка. После того как попытки закончатся, SIM-карта будет заблокирована навсегда. За подробной информацией обратитесь к оператору связи.}few{SIM-карта заблокирована. Чтобы продолжить, введите PUK-код. Осталось # попытки. После того как они закончатся, SIM-карта будет заблокирована навсегда. За подробной информацией обратитесь к оператору связи.}many{SIM-карта заблокирована. Чтобы продолжить, введите PUK-код. Осталось # попыток. После того как они закончатся, SIM-карта будет заблокирована навсегда. За подробной информацией обратитесь к оператору связи.}other{SIM-карта заблокирована. Чтобы продолжить, введите PUK-код. Осталось # попытки. После того как попытки закончатся, SIM-карта будет заблокирована навсегда. За подробной информацией обратитесь к оператору связи.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"По умолчанию"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Пузырь"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Стрелки"</string>
diff --git a/packages/SystemUI/res-keyguard/values-si/strings.xml b/packages/SystemUI/res-keyguard/values-si/strings.xml
index ada19dd4..0f828c1 100644
--- a/packages/SystemUI/res-keyguard/values-si/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-si/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"ඔබ මුරපදය වාර <xliff:g id="NUMBER_0">%1$d</xliff:g> ක් වැරදියට ටයිප්කොට ඇත. \n\nතත්පර <xliff:g id="NUMBER_1">%2$d</xliff:g> කින් නැවත උත්සහ කරන්න."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"ඔබ <xliff:g id="NUMBER_0">%1$d</xliff:g> වාරයක් අගුළු ඇරීමේ රටාව වැරදියට ඇඳ ඇත. \n\nතත්පර <xliff:g id="NUMBER_1">%2$d</xliff:g> ක් ඇතුළත නැවත උත්සාහ කරන්න."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"වැරදී SIM PIN කේතයකි, ඔබගේ දුරකතනයේ අඟුල හැරීමට ඔබගේ වාහකයා ඔබ දැන් සම්බන්ධ කරගත යුතුය."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">වැරදී SIM PIN කේතයකි, ඔබගේ දුරකථනයේ අඟුල හැරීමට ඔබගේ වාහකයා සම්බන්ධ කරගැනීමට පෙර ඔබ සතුව තවත් උත්සාහයන් <xliff:g id="NUMBER_1">%d</xliff:g>ක් ඉතිරිව ඇත.</item>
-      <item quantity="other">වැරදී SIM PIN කේතයකි, ඔබගේ දුරකථනයේ අගුල හැරීමට ඔබගේ වාහකයා සම්බන්ධ කරගැනීමට පෙර ඔබ සතුව තවත් උත්සාහයන් <xliff:g id="NUMBER_1">%d</xliff:g>ක් ඉතිරිව ඇත.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{වැරදි SIM PIN කේතයකි, ඔබේ උපාංගයේ අගුළු හැරීමට ඔබ ඔබේ වාහකයා සම්බන්ධ කර ගත යුතු වීමට පෙර ඔබ සතුව # උත්සාහයක් ඉතිරිව ඇත.}one{වැරදි SIM PIN කේතයකි, ඔබ සතුව උත්සාහයන් #ක් ඉතිරිව ඇත. }other{වැරදි SIM PIN කේතයකි, ඔබ සතුව උත්සාහයන් #ක් ඉතිරිව ඇත. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM කාඩ් පත භාවිතා කළ නොහැක. ඔබගේ වාහකය සම්බන්ධ කරගන්න."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">වැරදි SIM PUK කේතයකි, SIM කාඩ්පත ස්ථිරවම භාවිත කළ නොහැකි බවට පත්වීමට පෙර ඔබට තවත් උත්සාහයන් <xliff:g id="NUMBER_1">%d</xliff:g>ක් ඉතිරිව ඇත.</item>
-      <item quantity="other">වැරදි SIM PUK කේතයකි, SIM කාඩ්පත ස්ථිරවම භාවිත කළ නොහැකි බවට පත්වීමට පෙර ඔබට තවත් උත්සාහයන් <xliff:g id="NUMBER_1">%d</xliff:g>ක් ඉතිරිව ඇත.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{වැරදි SIM PUK කේතයකි, SIM කාඩ්පත ස්ථිරවම භාවිත කළ නොහැකි බවට පත් වීමට පෙර ඔබට # උත්සාහයක් ඉතිරිව ඇත.}one{වැරදි SIM PUK කේතයකි, SIM කාඩ්පත ස්ථිරවම භාවිත කළ නොහැකි බවට පත් වීමට පෙර ඔබට උත්සාහයන් #ක් ඉතිරිව ඇත.}other{වැරදි SIM PUK කේතයකි, SIM කාඩ්පත ස්ථිරවම භාවිත කළ නොහැකි බවට පත් වීමට පෙර ඔබට උත්සාහයන් #ක් ඉතිරිව ඇත.}}"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"උපාංගය හස්තීයව අගුලු දමන ලදී"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"හඳුනා නොගන්නා ලදී"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"මුහුණෙන් අගුලු හැරීමට, සැකසීම් තුළ කැමරා ප්‍රවේශය සක්‍රීය කරන්න"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">SIM PIN ඇතුළු කරන්න, ඔබ සතුව උත්සාහයන් <xliff:g id="NUMBER_1">%d</xliff:g>ක් ඉතිරිව ඇත.</item>
-      <item quantity="other">SIM PIN ඇතුළු කරන්න, ඔබ සතුව උත්සාහයන් <xliff:g id="NUMBER_1">%d</xliff:g>ක් ඉතිරිව ඇත.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">SIM දැන් අබල කර ඇත. දිගටම කරගෙන යාමට PUK කේතය ඇතුළු කරන්න. SIM ස්ථිරවම භාවිත කළ නොහැකි බවට පත් වීමට පෙර ඔබ සතුව උත්සාහයන් <xliff:g id="_NUMBER_1">%d</xliff:g>ක් ඉතිරිව ඇත. විස්තර සඳහා වාහක සම්බන්ධ කර ගන්න.</item>
-      <item quantity="other">SIM දැන් අබල කර ඇත. දිගටම කරගෙන යාමට PUK කේතය ඇතුළු කරන්න. SIM ස්ථිරවම භාවිත කළ නොහැකි බවට පත් වීමට පෙර ඔබ සතුව උත්සාහයන් <xliff:g id="_NUMBER_1">%d</xliff:g>ක් ඉතිරිව ඇත. විස්තර සඳහා වාහක සම්බන්ධ කර ගන්න.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{SIM PIN ඇතුළු කරන්න, ඔබේ උපාංගය අගුළු හැරීමට ඔබේ වාහකය සම්බන්ධ කර ගැනීමට පෙර ඔබ සතුව # උත්සාහයක් ඉතිරිව ඇත.}one{SIM PIN ඇතුළු කරන්න. ඔබ සතුව උත්සාහයන් #ක් ඉතිරිව ඇත.}other{SIM PIN ඇතුළු කරන්න. ඔබ සතුව උත්සාහයන් #ක් ඉතිරිව ඇත.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM දැන් අබල කර ඇත. ඉදිරියට යාමට PUK කේතය ඇතුළු කරන්න. SIM ස්ථිරවම භාවිත කළ නොහැකි බවට පත් වීමට පෙර ඔබ සතුව # උත්සාහයක් ඉතිරිව ඇත. විස්තර සඳහා වාහකය සම්බන්ධ කර ගන්න.}one{SIM දැන් අබල කර ඇත. ඉදිරියට යාමට PUK කේතය ඇතුළු කරන්න. SIM ස්ථිරවම භාවිත කළ නොහැකි බවට පත් වීමට පෙර ඔබ සතුව උත්සාහයන් #ක් ඉතිරිව ඇත. විස්තර සඳහා වාහකය සම්බන්ධ කර ගන්න.}other{SIM දැන් අබල කර ඇත. ඉදිරියට යාමට PUK කේතය ඇතුළු කරන්න. SIM ස්ථිරවම භාවිත කළ නොහැකි බවට පත් වීමට පෙර ඔබ සතුව උත්සාහයන් #ක් ඉතිරිව ඇත. විස්තර සඳහා වාහකය සම්බන්ධ කර ගන්න.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"පෙරනිමි"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"බුබුළ"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"ප්‍රතිසමය"</string>
diff --git a/packages/SystemUI/res-keyguard/values-sk/strings.xml b/packages/SystemUI/res-keyguard/values-sk/strings.xml
index b1bff53..e98157c 100644
--- a/packages/SystemUI/res-keyguard/values-sk/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-sk/strings.xml
@@ -68,19 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Už <xliff:g id="NUMBER_0">%1$d</xliff:g>-krát ste zadali nesprávne heslo. \n\nSkúste to znova o <xliff:g id="NUMBER_1">%2$d</xliff:g> s."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Už <xliff:g id="NUMBER_0">%1$d</xliff:g>-krát ste použili nesprávny bezpečnostný vzor. \n\nSkúste to znova o <xliff:g id="NUMBER_1">%2$d</xliff:g> s."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Nesprávny kód PIN SIM karty. Teraz musíte kontaktovať svojho operátora, aby vám odomkol zariadenie."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="few">Nesprávny kód PIN SIM karty. Zostávajú vám <xliff:g id="NUMBER_1">%d</xliff:g> pokusy.</item>
-      <item quantity="many">Nesprávny kód PIN SIM karty. Zostáva vám <xliff:g id="NUMBER_1">%d</xliff:g> pokusu.</item>
-      <item quantity="other">Nesprávny kód PIN SIM karty. Zostáva vám <xliff:g id="NUMBER_1">%d</xliff:g> pokusov.</item>
-      <item quantity="one">Nesprávny kód PIN SIM karty. Zostáva vám <xliff:g id="NUMBER_0">%d</xliff:g> pokus. Potom budete musieť kontaktovať operátora, aby vám odomkol zariadenie.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Nesprávny kód PIN SIM karty. Zostáva vám # pokus, potom budete musieť kontaktovať svojho operátora, aby zariadenie odomkol.}few{Nesprávny kód PIN SIM karty. Zostávajú vám # pokusy. }many{Incorrect SIM PIN code, you have # remaining attempts. }other{Nesprávny kód PIN SIM karty. Zostáva vám # pokusov. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM karta je nepoužiteľná. Kontaktujte svojho operátora."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="few">Nesprávny kód PUK SIM karty. Zostávajú vám <xliff:g id="NUMBER_1">%d</xliff:g> pokusy. Potom sa SIM karta natrvalo zablokuje.</item>
-      <item quantity="many">Nesprávny kód PUK SIM karty. Zostáva vám <xliff:g id="NUMBER_1">%d</xliff:g> pokusu. Potom sa SIM karta natrvalo zablokuje.</item>
-      <item quantity="other">Nesprávny kód PUK SIM karty. Zostáva vám <xliff:g id="NUMBER_1">%d</xliff:g> pokusov. Potom sa SIM karta natrvalo zablokuje.</item>
-      <item quantity="one">Nesprávny kód PUK SIM karty. Zostáva vám <xliff:g id="NUMBER_0">%d</xliff:g> pokus. Potom sa vaša SIM karta natrvalo zablokuje.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Nesprávny kód PUK SIM karty. Zostáva vám # pokus, potom sa SIM karta natrvalo zablokuje.}few{Nesprávny kód PUK SIM karty. Zostávajú vám # pokusy, potom sa SIM karta natrvalo zablokuje.}many{Incorrect SIM PUK code, you have # remaining attempts before SIM becomes permanently unusable.}other{Nesprávny kód PUK SIM karty. Zostáva vám # pokusov, potom sa SIM karta natrvalo zablokuje.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Operácia kódu PIN SIM karty zlyhala!"</string>
     <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>
@@ -95,18 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Zariadenie bolo uzamknuté ručne"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nerozpoznané"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"V nastaveniach zapnite prístup ku kamere"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="few">Zadajte kód PIN SIM karty. Zostávajú vám <xliff:g id="NUMBER_1">%d</xliff:g> pokusy.</item>
-      <item quantity="many">Enter SIM PIN. You have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts.</item>
-      <item quantity="other">Zadajte kód PIN SIM karty. Zostáva vám <xliff:g id="NUMBER_1">%d</xliff:g> pokusov.</item>
-      <item quantity="one">Zadajte kód PIN SIM karty. Zostáva vám <xliff:g id="NUMBER_0">%d</xliff:g> pokus, potom budete musieť kontaktovať svojho operátora, aby zariadenie odomkol.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="few">SIM karta je deaktivovaná. Pokračujte zadaním kódu PUK. Zostávajú vám <xliff:g id="_NUMBER_1">%d</xliff:g> pokusy, potom sa SIM karta natrvalo zablokuje. Podrobnosti vám poskytne operátor.</item>
-      <item quantity="many">SIM karta je deaktivovaná. Pokračujte zadaním kódu PUK. Zostáva vám <xliff:g id="_NUMBER_1">%d</xliff:g> pokusu, potom sa SIM karta natrvalo zablokuje. Podrobnosti vám poskytne operátor.</item>
-      <item quantity="other">SIM karta je deaktivovaná. Pokračujte zadaním kódu PUK. Zostáva vám <xliff:g id="_NUMBER_1">%d</xliff:g> pokusov, potom sa SIM karta natrvalo zablokuje. Podrobnosti vám poskytne operátor.</item>
-      <item quantity="one">SIM karta je deaktivovaná. Pokračujte zadaním kódu PUK. Zostáva vám <xliff:g id="_NUMBER_0">%d</xliff:g> pokus, potom sa SIM karta natrvalo zablokuje. Podrobnosti vám poskytne operátor.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Zadajte kód PIN SIM karty. Zostáva vám # pokus, potom budete musieť kontaktovať svojho operátora, aby zariadenie odomkol.}few{Zadajte PIN SIM karty. Zostávajú vám # pokusy.}many{Enter SIM PIN. You have # remaining attempts.}other{Zadajte PIN SIM karty. Zostáva vám # pokusov.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM karta je deaktivovaná. Pokračujte zadaním kódu PUK. Zostáva vám # pokus, potom sa SIM karta natrvalo zablokuje. Podrobnosti vám poskytne operátor.}few{SIM karta je deaktivovaná. Pokračujte zadaním kódu PUK. Zostávajú vám # pokusy, potom sa SIM karta natrvalo zablokuje. Podrobnosti vám poskytne operátor.}many{SIM is now disabled. Enter PUK code to continue. You have # remaining attempts before SIM becomes permanently unusable. Contact carrier for details.}other{SIM karta je deaktivovaná. Pokračujte zadaním kódu PUK. Zostáva vám # pokusov, potom sa SIM karta natrvalo zablokuje. Podrobnosti vám poskytne operátor.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Predvolený"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bublina"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analógový"</string>
diff --git a/packages/SystemUI/res-keyguard/values-sl/strings.xml b/packages/SystemUI/res-keyguard/values-sl/strings.xml
index 274a24e..1ad1926 100644
--- a/packages/SystemUI/res-keyguard/values-sl/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-sl/strings.xml
@@ -68,19 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Geslo ste <xliff:g id="NUMBER_0">%1$d</xliff:g>-krat vnesli napačno. \n\nPoskusite znova čez <xliff:g id="NUMBER_1">%2$d</xliff:g> s."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Vzorec za odklepanje ste <xliff:g id="NUMBER_0">%1$d</xliff:g>-krat nepravilno narisali. \n\nPoskusite znova čez <xliff:g id="NUMBER_1">%2$d</xliff:g> s."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Napačna koda PIN kartice SIM. Zdaj se boste morali za odklenitev naprave obrniti na operaterja."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">Napačna koda PIN kartice SIM. Na voljo imate še <xliff:g id="NUMBER_1">%d</xliff:g> poskus.</item>
-      <item quantity="two">Napačna koda PIN kartice SIM. Na voljo imate še <xliff:g id="NUMBER_1">%d</xliff:g> poskusa.</item>
-      <item quantity="few">Napačna koda PIN kartice SIM. Na voljo imate še <xliff:g id="NUMBER_1">%d</xliff:g> poskuse.</item>
-      <item quantity="other">Napačna koda PIN kartice SIM. Na voljo imate še <xliff:g id="NUMBER_1">%d</xliff:g> poskusov.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Napačna koda PIN kartice SIM. Na voljo imate še # poskus. Nato se boste morali za odklepanje naprave obrniti na operaterja.}one{Napačna koda PIN kartice SIM. Na voljo imate še # poskus. }two{Napačna koda PIN kartice SIM. Na voljo imate še # poskusa. }few{Napačna koda PIN kartice SIM. Na voljo imate še # poskuse. }other{Napačna koda PIN kartice SIM. Na voljo imate še # poskusov. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"Kartica SIM ni več uporabna. Obrnite se na operaterja."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">Napačna koda PUK kartice SIM. Na voljo imate še <xliff:g id="NUMBER_1">%d</xliff:g> poskus. Potem bo kartica SIM postala trajno neuporabna.</item>
-      <item quantity="two">Napačna koda PUK kartice SIM. Na voljo imate še <xliff:g id="NUMBER_1">%d</xliff:g> poskusa. Potem bo kartica SIM postala trajno neuporabna.</item>
-      <item quantity="few">Napačna koda PUK kartice SIM. Na voljo imate še <xliff:g id="NUMBER_1">%d</xliff:g> poskuse. Potem bo kartica SIM postala trajno neuporabna.</item>
-      <item quantity="other">Napačna koda PUK kartice SIM. Na voljo imate še <xliff:g id="NUMBER_1">%d</xliff:g> poskusov. Potem bo kartica SIM postala trajno neuporabna.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Napačna koda PUK kartice SIM. Na voljo imate še # poskus. Nato bo kartica SIM postala trajno neuporabna.}one{Napačna koda PUK kartice SIM. Na voljo imate še # poskus. Nato bo kartica SIM postala trajno neuporabna.}two{Napačna koda PUK kartice SIM. Na voljo imate še # poskusa. Nato bo kartica SIM postala trajno neuporabna.}few{Napačna koda PUK kartice SIM. Na voljo imate še # poskuse. Nato bo kartica SIM postala trajno neuporabna.}other{Napačna koda PUK kartice SIM. Na voljo imate še # poskusov. Nato bo kartica SIM postala trajno neuporabna.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Postopek za odklepanje s kodo PIN kartice SIM ni uspel."</string>
     <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>
@@ -95,18 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Naprava je bila ročno zaklenjena"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Ni prepoznano"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Odklepanje z obrazom potrebuje dostop do fotoaparata."</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">Vnesite kodo PIN kartice SIM. Na voljo imate še <xliff:g id="NUMBER_1">%d</xliff:g> poskus.</item>
-      <item quantity="two">Vnesite kodo PIN kartice SIM. Na voljo imate še <xliff:g id="NUMBER_1">%d</xliff:g> poskusa.</item>
-      <item quantity="few">Vnesite kodo PIN kartice SIM. Na voljo imate še <xliff:g id="NUMBER_1">%d</xliff:g> poskuse.</item>
-      <item quantity="other">Vnesite kodo PIN kartice SIM. Na voljo imate še <xliff:g id="NUMBER_1">%d</xliff:g> poskusov.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">Kartica SIM je zdaj onemogočena. Če želite nadaljevati, vnesite kodo PUK. Na voljo imate še <xliff:g id="_NUMBER_1">%d</xliff:g> poskus. Potem bo kartica SIM postala trajno neuporabna. Za podrobnosti se obrnite na operaterja.</item>
-      <item quantity="two">Kartica SIM je zdaj onemogočena. Če želite nadaljevati, vnesite kodo PUK. Na voljo imate še <xliff:g id="_NUMBER_1">%d</xliff:g> poskusa. Potem bo kartica SIM postala trajno neuporabna. Za podrobnosti se obrnite na operaterja.</item>
-      <item quantity="few">Kartica SIM je zdaj onemogočena. Če želite nadaljevati, vnesite kodo PUK. Na voljo imate še <xliff:g id="_NUMBER_1">%d</xliff:g> poskuse. Potem bo kartica SIM postala trajno neuporabna. Za podrobnosti se obrnite na operaterja.</item>
-      <item quantity="other">Kartica SIM je zdaj onemogočena. Če želite nadaljevati, vnesite kodo PUK. Na voljo imate še <xliff:g id="_NUMBER_1">%d</xliff:g> poskusov. Potem bo kartica SIM postala trajno neuporabna. Za podrobnosti se obrnite na operaterja.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Vnesite kodo PIN kartice SIM. Na voljo imate še # poskus. Nato se boste morali za odklepanje naprave obrniti na operaterja.}one{Vnesite kodo PIN kartice SIM. Na voljo imate še # poskus.}two{Vnesite kodo PIN kartice SIM. Na voljo imate še # poskusa.}few{Vnesite kodo PIN kartice SIM. Na voljo imate še # poskuse.}other{Vnesite kodo PIN kartice SIM. Na voljo imate še # poskusov.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{Kartica SIM je zdaj onemogočena. Če želite nadaljevati, vnesite kodo PUK. Na voljo imate še # poskus. Nato bo kartica SIM postala trajno neuporabna. Za podrobnosti se obrnite na operaterja.}one{Kartica SIM je zdaj onemogočena. Če želite nadaljevati, vnesite kodo PUK. Na voljo imate še # poskus. Nato bo kartica SIM postala trajno neuporabna. Za podrobnosti se obrnite na operaterja.}two{Kartica SIM je zdaj onemogočena. Če želite nadaljevati, vnesite kodo PUK. Na voljo imate še # poskusa. Nato bo kartica SIM postala trajno neuporabna. Za podrobnosti se obrnite na operaterja.}few{Kartica SIM je zdaj onemogočena. Če želite nadaljevati, vnesite kodo PUK. Na voljo imate še # poskuse. Nato bo kartica SIM postala trajno neuporabna. Za podrobnosti se obrnite na operaterja.}other{Kartica SIM je zdaj onemogočena. Če želite nadaljevati, vnesite kodo PUK. Na voljo imate še # poskusov. Nato bo kartica SIM postala trajno neuporabna. Za podrobnosti se obrnite na operaterja.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Privzeto"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Mehurček"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogno"</string>
diff --git a/packages/SystemUI/res-keyguard/values-sq/strings.xml b/packages/SystemUI/res-keyguard/values-sq/strings.xml
index 58773ae..7eb442c 100644
--- a/packages/SystemUI/res-keyguard/values-sq/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-sq/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"E ke shkruar <xliff:g id="NUMBER_0">%1$d</xliff:g> herë gabimisht fjalëkalimin.\n\nProvo sërish për <xliff:g id="NUMBER_1">%2$d</xliff:g> sekonda."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Ke tentuar <xliff:g id="NUMBER_0">%1$d</xliff:g> herë pa sukses për të vizatuar motivin tënd. \n\nProvo sërish për <xliff:g id="NUMBER_1">%2$d</xliff:g> sekonda."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Kodi PIN i kartës SIM është i pasaktë. Tani duhet të kontaktosh me operatorin për ta shkyçur pajisjen tënde."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">Kodi PIN i kartës SIM është i pasaktë. Të kanë mbetur edhe <xliff:g id="NUMBER_1">%d</xliff:g> tentativa.</item>
-      <item quantity="one">Kodi PIN i kartës SIM është i pasaktë. Të ka mbetur edhe <xliff:g id="NUMBER_0">%d</xliff:g> tentativë para se të duhet të kontaktosh me operatorin tënd celular për të shkyçur pajisjen.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Kodi PIN i kartës SIM është i pasaktë. Të ka mbetur edhe # përpjekje përpara se të të duhet të kontaktosh me operatorin celular për ta shkyçur pajisjen.}other{Kodi PIN i kartës SIM është i pasaktë. Të kanë mbetur edhe # përpjekje. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"Karta SIM është e papërdorshme. Kontakto me operatorin."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">PUK-u i kartës SIM është i pasaktë. Të kanë mbetur edhe <xliff:g id="NUMBER_1">%d</xliff:g> tentativa para se karta SIM të bëhet e papërdorshme përgjithmonë.</item>
-      <item quantity="one">PUK-u i kartës SIM është i pasaktë. Të ka mbetur edhe <xliff:g id="NUMBER_0">%d</xliff:g> tentativë para se karta SIM të bëhet e papërdorshme përgjithmonë.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Kodi PUK i kartës SIM është i pasaktë. Të ka mbetur edhe # përpjekje përpara se karta SIM të bëhet përgjithmonë e papërdorshme.}other{Kodi PUK i kartës SIM është i pasaktë. Të kanë mbetur edhe # përpjekje përpara se karta SIM të bëhet përgjithmonë e papërdorshme.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Operacioni i kodit PIN të kartës SIM dështoi!"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Pajisja është kyçur manualisht"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Nuk njihet"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Për \"Shkyçjen me fytyrë\", aktivizo qasjen te kamera te \"Cilësimet\""</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">Fut kodin PIN të kartës SIM. Të kanë mbetur edhe <xliff:g id="NUMBER_1">%d</xliff:g> tentativa.</item>
-      <item quantity="one">Fut kodin PIN të kartës SIM. Të ka mbetur edhe <xliff:g id="NUMBER_0">%d</xliff:g> tentativë para se të duhet të kontaktosh me operatorin tënd celular për ta shkyçur pajisjen.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">Karta SIM tani është çaktivizuar. Fut kodin PUK për të vazhduar. Të kanë mbetur edhe <xliff:g id="_NUMBER_1">%d</xliff:g> përpjekje përpara se karta SIM të bëhet përgjithmonë e papërdorshme. Kontakto me operatorin për detaje.</item>
-      <item quantity="one">Karta SIM tani është çaktivizuar. Fut kodin PUK për të vazhduar. Të ka mbetur edhe <xliff:g id="_NUMBER_0">%d</xliff:g> përpjekje përpara se karta SIM të bëhet përgjithmonë e papërdorshme. Kontakto me operatorin për detaje.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Fut kodin PIN të kartës SIM. Të ka mbetur edhe # përpjekje përpara se të të duhet të kontaktosh me operatorin celular për ta shkyçur pajisjen.}other{Fut kodin PIN të kartës SIM. Të kanë mbetur edhe # përpjekje.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{Karta SIM është çaktivizuar tani. Fut kodin PUK për të vazhduar. Të ka mbetur edhe # përpjekje përpara se karta SIM të bëhet përgjithmonë e papërdorshme. Kontakto me operatorin celular për detajet.}other{Karta SIM tani është çaktivizuar. Fut kodin PUK për të vazhduar. Të kanë mbetur edhe # përpjekje përpara se karta SIM të bëhet përgjithmonë e papërdorshme. Kontakto me operatorin celular për detajet.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"E parazgjedhur"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Flluskë"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analoge"</string>
diff --git a/packages/SystemUI/res-keyguard/values-sr/strings.xml b/packages/SystemUI/res-keyguard/values-sr/strings.xml
index 15c31a0..568be9f 100644
--- a/packages/SystemUI/res-keyguard/values-sr/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-sr/strings.xml
@@ -68,17 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Унели сте погрешну лозинку <xliff:g id="NUMBER_0">%1$d</xliff:g> пута. \n\nПробајте поново за <xliff:g id="NUMBER_1">%2$d</xliff:g> сек."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Нацртали сте нетачан шаблон за откључавање <xliff:g id="NUMBER_0">%1$d</xliff:g> пута. \n\nПробајте поново за <xliff:g id="NUMBER_1">%2$d</xliff:g> сек."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Нетачан PIN кôд за SIM. Сада морате да контактирате мобилног оператера да бисте откључали уређај."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">Нетачан PIN кôд за SIM. Имате још <xliff:g id="NUMBER_1">%d</xliff:g> покушај.</item>
-      <item quantity="few">Нетачан PIN кôд за SIM. Имате још <xliff:g id="NUMBER_1">%d</xliff:g> покушаја.</item>
-      <item quantity="other">Нетачан PIN кôд за SIM. Имате још <xliff:g id="NUMBER_1">%d</xliff:g> покушаја.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Нетачан PIN за SIM кôд. Имате још # покушај, а онда морате да се обратите мобилном оператеру да бисте откључали уређај.}one{Нетачан PIN за SIM кôд. Имате још # покушај. }few{Нетачан PIN за SIM кôд. Имате још # покушаја. }other{Нетачан PIN за SIM кôд. Имате још # покушаја. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM картица је неупотребљива. Контактирајте мобилног оператера."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">Нетачан PUK кôд за SIM. Имате још <xliff:g id="NUMBER_1">%d</xliff:g> покушај пре него што SIM картица постане трајно неупотребљива.</item>
-      <item quantity="few">Нетачан PUK кôд за SIM. Имате још <xliff:g id="NUMBER_1">%d</xliff:g> покушаја пре него што SIM картица постане трајно неупотребљива.</item>
-      <item quantity="other">Нетачан PUK кôд за SIM. Имате још <xliff:g id="NUMBER_1">%d</xliff:g> покушаја пре него што SIM картица постане трајно неупотребљива.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Нетачан SIM PUK кôд. Имате још # покушај пре него што SIM картица постане трајно неупотребљива.}one{Нетачан PUK кôд за SIM. Имате још # покушај пре него што SIM картица постане трајно неупотребљива.}few{Нетачан PUK кôд за SIM. Имате још # покушаја пре него што SIM картица постане трајно неупотребљива.}other{Нетачан PUK кôд за SIM. Имате још # покушаја пре него што SIM картица постане трајно неупотребљива.}}"</string>
     <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>
@@ -93,16 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Уређај је ручно закључан"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Није препознат"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Откључавање лицем тражи приступ камери у Подешавањима"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">Унесите PIN за SIM. Имате још <xliff:g id="NUMBER_1">%d</xliff:g> покушај.</item>
-      <item quantity="few">Унесите PIN за SIM. Имате још <xliff:g id="NUMBER_1">%d</xliff:g> покушаја.</item>
-      <item quantity="other">Унесите PIN за SIM. Имате још <xliff:g id="NUMBER_1">%d</xliff:g> покушаја.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">SIM је сада онемогућен. Унесите PUK кôд да бисте наставили. Имате још <xliff:g id="_NUMBER_1">%d</xliff:g> покушај пре него што SIM постане трајно неупотребљив. Детаљне информације потражите од мобилног оператера.</item>
-      <item quantity="few">SIM је сада онемогућен. Унесите PUK кôд да бисте наставили. Имате још <xliff:g id="_NUMBER_1">%d</xliff:g> покушаја пре него што SIM постане трајно неупотребљив. Детаљне информације потражите од мобилног оператера.</item>
-      <item quantity="other">SIM је сада онемогућен. Унесите PUK кôд да бисте наставили. Имате још <xliff:g id="_NUMBER_1">%d</xliff:g> покушаја пре него што SIM постане трајно неупотребљив. Детаљне информације потражите од мобилног оператера.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Унесите PIN за SIM. Још # покушај и мораћете да се обратите мобилном оператеру да бисте откључали уређај.}one{Унесите PIN за SIM. Имате још # покушај.}few{Унесите PIN за SIM. Имате још # покушаја.}other{Унесите PIN за SIM. Имате још # покушаја.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM је сада онемогућен. Унесите PUK кôд да бисте наставили. Имате још # покушај пре него што SIM постане трајно неупотребљив. Детаљне информације потражите од мобилног оператера.}one{SIM је сада онемогућен. Унесите PUK кôд да бисте наставили. Имате још # покушај пре него што SIM постане трајно неупотребљив. Детаљне информације потражите од мобилног оператера.}few{SIM је сада онемогућен. Унесите PUK кôд да бисте наставили. Имате још # покушаја пре него што SIM постане трајно неупотребљив. Детаљне информације потражите од мобилног оператера.}other{SIM је сада онемогућен. Унесите PUK кôд да бисте наставили. Имате још # покушаја пре него што SIM постане трајно неупотребљив. Детаљне информације потражите од мобилног оператера.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Подразумевани"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Мехурићи"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Аналогни"</string>
diff --git a/packages/SystemUI/res-keyguard/values-sv/strings.xml b/packages/SystemUI/res-keyguard/values-sv/strings.xml
index 8f8bdde..e0414c8 100644
--- a/packages/SystemUI/res-keyguard/values-sv/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-sv/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Du har angett fel lösenord <xliff:g id="NUMBER_0">%1$d</xliff:g> gånger. \n\nFörsök igen om <xliff:g id="NUMBER_1">%2$d</xliff:g> sekunder."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Du har ritat ditt grafiska lösenord fel <xliff:g id="NUMBER_0">%1$d</xliff:g> gånger. \n\nFörsök igen om <xliff:g id="NUMBER_1">%2$d</xliff:g> sekunder."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Du angav fel pinkod för SIM-kortet och måste nu kontakta operatören för att låsa upp enheten."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">Du angav fel pinkod för SIM-kortet. <xliff:g id="NUMBER_1">%d</xliff:g> försök återstår.</item>
-      <item quantity="one">Du angav fel pinkod för SIM-kortet. <xliff:g id="NUMBER_0">%d</xliff:g> försök återstår innan du måste kontakta operatören för att låsa upp enheten.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Du angav fel pinkod för SIM-kortet. # försök återstår innan du måste kontakta operatören för att låsa upp enheten.}other{Du angav fel pinkod för SIM-kortet. # försök återstår. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM-kortet är obrukbart. Kontakta operatören."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">Du angav fel PUK-kod för SIM-kortet. <xliff:g id="NUMBER_1">%d</xliff:g> försök återstår innan SIM-kortet blir obrukbart.</item>
-      <item quantity="one">Du angav fel PUK-kod för SIM-kortet. <xliff:g id="NUMBER_0">%d</xliff:g> försök återstår innan SIM-kortet blir obrukbart.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Du angav fel PUK-kod för SIM-kortet. # försök återstår innan SIM-kortet blir obrukbart.}other{Du angav fel PUK-kod för SIM-kortet. # försök återstår innan SIM-kortet blir obrukbart.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Det gick inte att låsa upp med pinkoden för SIM-kortet."</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Enheten har låsts manuellt"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Identifierades inte"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"För ansiktslås aktiverar du kameraåtkomst i Inställn."</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">Ange pinkod för SIM-kortet. <xliff:g id="NUMBER_1">%d</xliff:g> försök återstår.</item>
-      <item quantity="one">Ange pinkod för SIM-kortet. <xliff:g id="NUMBER_0">%d</xliff:g> försök återstår innan du måste kontakta operatören för att låsa upp enheten.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM-kortet är inaktiverat. Ange PUK-koden om du vill fortsätta. <xliff:g id="_NUMBER_1">%d</xliff:g> försök återstår innan SIM-kortet blir obrukbart. Kontakta operatören för mer information.</item>
-      <item quantity="one">SIM-kortet är inaktiverat. Ange PUK-koden om du vill fortsätta. <xliff:g id="_NUMBER_0">%d</xliff:g> försök återstår innan SIM-kortet blir obrukbart. Kontakta operatören för mer information.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Ange pinkod för SIM-kortet. # försök återstår innan du måste kontakta operatören för att låsa upp enheten.}other{Ange pinkod för SIM-kortet. # försök återstår.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM-kortet är inaktiverat. Ange PUK-koden om du vill fortsätta. # försök återstår innan SIM-kortet blir obrukbart. Kontakta operatören för mer information.}other{SIM-kortet är inaktiverat. Ange PUK-koden om du vill fortsätta. # försök återstår innan SIM-kortet blir obrukbart. Kontakta operatören för mer information.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Standard"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bubbla"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analog"</string>
diff --git a/packages/SystemUI/res-keyguard/values-sw/strings.xml b/packages/SystemUI/res-keyguard/values-sw/strings.xml
index 06d168b..7048364 100644
--- a/packages/SystemUI/res-keyguard/values-sw/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-sw/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Umeandika vibaya nenosiri lako mara <xliff:g id="NUMBER_0">%1$d</xliff:g>. \n\n Jaribu tena baada ya sekunde <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Umechora vibaya mchoro wako wa kufungua mara <xliff:g id="NUMBER_0">%1$d</xliff:g>. \n\n Jaribu tena baada ya sekunde <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Nambari ya PIN ya SIM si sahihi, sasa lazima uwasiliane na mtoa huduma za mtandao ndipo ufungue kifaa chako."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">Nambari ya PIN ya SIM si sahihi. Una nafasi zingine <xliff:g id="NUMBER_1">%d</xliff:g> za kujaribu.</item>
-      <item quantity="one">Nambari ya PIN ya SIM si sahihi. Una nafasi zingine <xliff:g id="NUMBER_0">%d</xliff:g> za kujaribu kabla ulazimike kuwasiliana na mtoa huduma wako ili akufungulie kifaa chako.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Nambari ya PIN ya SIM si sahihi, unaweza kujaribu mara # kabla ya kulazimika kuwasiliana na mtoa huduma wako ili afungue kifaa chako.}other{Nambari ya PIN ya SIM si sahihi, unaweza kujaribu mara #. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM haiwezi kutumika. Wasiliana na mtoa huduma wako."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">Nambari ya PUK ya SIM si sahihi, bado unaweza kujaribu mara <xliff:g id="NUMBER_1">%d</xliff:g> kabla ya SIM kuacha kutumika kabisa.</item>
-      <item quantity="one">Nambari ya PUK ya SIM si sahihi, bado unaweza kujaribu mara <xliff:g id="NUMBER_0">%d</xliff:g> kabla ya SIM kuacha kutumika kabisa.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Nambari ya PUK ya SIM si sahihi, unaweza kujaribu mara # kabla ya SIM kuacha kutumika kabisa.}other{Nambari ya PUK ya SIM si sahihi, unaweza kujaribu mara # kabla ya SIM kuacha kutumika kabisa.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Utendakazi wa PIN ya SIM haujafanikiwa!"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Umefunga kifaa mwenyewe"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Haitambuliwi"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Ili ufungue kwa Uso, ruhusu kamera ifikiwe"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">Weka PIN ya SIM. Zimesalia mara <xliff:g id="NUMBER_1">%d</xliff:g> za kujaribu.</item>
-      <item quantity="one">Weka PIN ya SIM. Ukijaribu tena mara <xliff:g id="NUMBER_0">%d</xliff:g> bila kufaulu, kifaa chako kitafungwa na utalazimika uwasiliane na mtoa huduma wako ili akifungue.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">Sasa SIM imefungwa. Weka msimbo wa PUK ili uendelee. Umesalia na majaribio <xliff:g id="_NUMBER_1">%d</xliff:g> kabla ya SIM kuacha kufanya kazi kabisa. Wasiliana na mtoa huduma kwa maelezo.</item>
-      <item quantity="one">Sasa SIM imefungwa. Weka msimbo wa PUK ili uendelee. Umesalia na jaribio <xliff:g id="_NUMBER_0">%d</xliff:g> kabla ya SIM kuacha kufanya kazi kabisa. Wasiliana na mtoa huduma kwa maelezo.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Weka PIN ya SIM. Unaweza kujaribu mara # kuweka PIN ya SIM kabla ya kulazimika kuwasiliana na mtoa huduma wako ili afungue kifaa chako endapo kitafungwa.}other{Weka PIN ya SIM. Unaweza kujaribu mara #.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{Sasa SIM imefungwa. Weka msimbo wa PUK ili uendelee. Unaweza kujaribu mara # kabla ya SIM kuacha kutumika kabisa. Wasiliana na mtoa huduma kwa maelezo.}other{Sasa SIM imefungwa. Weka msimbo wa PUK ili uendelee. Unaweza kujaribu mara # kabla ya SIM kuacha kutumika kabisa. Wasiliana na mtoa huduma kwa maelezo.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Chaguomsingi"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Kiputo"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analogi"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ta/strings.xml b/packages/SystemUI/res-keyguard/values-ta/strings.xml
index 3531aa3..ca51935 100644
--- a/packages/SystemUI/res-keyguard/values-ta/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ta/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"உங்கள் கடவுச்சொல்லை <xliff:g id="NUMBER_0">%1$d</xliff:g> முறை தவறாக உள்ளிட்டுவிட்டீர்கள். \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> வினாடிகளில் மீண்டும் முயலவும்."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"அன்லாக் பேட்டர்னை, <xliff:g id="NUMBER_0">%1$d</xliff:g> முறை தவறாக வரைந்துவிட்டீர்கள். \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> வினாடிகளில் மீண்டும் முயலவும்."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"சிம்மின் பின் குறியீடு தவறானது. இனி சாதனத்தை அன்லாக் செய்ய, உங்கள் தொலைத்தொடர்பு நிறுவனத்தைத் தொடர்புகொள்ள வேண்டும்."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">சிம்மின் பின் குறியீடு தவறானது, இன்னும் நீங்கள் <xliff:g id="NUMBER_1">%d</xliff:g> முறை முயலலாம்.</item>
-      <item quantity="one">சிம்மின் பின் குறியீடு தவறானது, மேலும் <xliff:g id="NUMBER_0">%d</xliff:g> முயற்சிகளுக்குப் பின்னர், உங்கள் தொலைத்தொடர்பு நிறுவனத்தைத் தொடர்பு கொண்டு மட்டுமே சாதனத்தை அன்லாக் செய்ய முடியும்.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{சிம் பின் குறியீடு தவறானது. உங்கள் சாதனத்தை அன்லாக் செய்ய, உங்கள் மொபைல் நிறுவனத்தைத் தொடர்புகொள்வதற்கு முன்பு மேலும் # முறை முயலலாம்.}other{சிம் பின் குறியீடு தவறானது. இன்னும் # முறை மட்டுமே முயலலாம். }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"பயன்படுத்த முடியாத சிம். உங்கள் தொலைத்தொடர்பு நிறுவனத்தைத் தொடர்புகொள்ளவும்."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">சிம்மின் PUK குறியீடு தவறானது, மேலும் <xliff:g id="NUMBER_1">%d</xliff:g> முறை முயலலாம். தொடர்ந்து தவறான குறியீடு உள்ளிடப்பட்டால், அதன் பிறகு சிம்மை நிரந்தரமாகப் பயன்படுத்த முடியாமல் போகும்.</item>
-      <item quantity="one">சிம்மின் PUK குறியீடு தவறானது, மேலும் <xliff:g id="NUMBER_0">%d</xliff:g> முறை முயலலாம். தொடர்ந்து தவறான குறியீடு உள்ளிடப்பட்டால், அதன் பிறகு சிம்மை நிரந்தரமாகப் பயன்படுத்த முடியாமல் போகும்.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{சிம் PUK குறியீடு தவறானது. சிம் நிரந்தரமாகப் பயன்படுத்த முடியாமல் போவதற்கு முன்பு நீங்கள் # முறை முயலலாம்.}other{சிம் PUK குறியீடு தவறானது. சிம் நிரந்தரமாகப் பயன்படுத்த முடியாமல் போவதற்கு முன்பு நீங்கள் # முறை முயலலாம்.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"சிம் பின் செயல்பாடு தோல்வியடைந்தது!"</string>
     <string name="kg_password_puk_failed" msgid="6778867411556937118">"சிம் PUK செயல்பாடு தோல்வியடைந்தது!"</string>
     <string name="accessibility_ime_switch_button" msgid="9082358310194861329">"உள்ளீட்டு முறையை மாற்றும்"</string>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"பயனர் சாதனத்தைப் பூட்டியுள்ளார்"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"அடையாளங்காணபடவில்லை"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"முகம் காட்டித் திறத்தல் அம்சத்தைப் பயன்படுத்த, அமைப்புகளில் கேமரா அணுகலை இயக்கவும்"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">சிம் பின்னை உள்ளிடவும். மேலும், <xliff:g id="NUMBER_1">%d</xliff:g> வாய்ப்புகள் மீதமுள்ளன.</item>
-      <item quantity="one">சிம் பின்னை உள்ளிடவும். மீதமுள்ள <xliff:g id="NUMBER_0">%d</xliff:g> வாய்ப்பில் தவறுதலான பின் உள்ளிடப்பட்டால், உங்கள் தொலைத்தொடர்பு நிறுவனத்தைத் தொடர்பு கொண்டு மட்டுமே சாதனத்தை அன்லாக் செய்ய முடியும்.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">சிம் தற்போது முடக்கப்பட்டுள்ளது. தொடர்வதற்கு, PUK குறியீட்டை உள்ளிடவும். நீங்கள் <xliff:g id="_NUMBER_1">%d</xliff:g> முறை மட்டுமே முயற்சிக்க முடியும். அதன்பிறகு சிம் நிரந்தரமாக முடக்கப்படும். விவரங்களுக்கு, மொபைல் நிறுவனத்தைத் தொடர்புகொள்ளவும்.</item>
-      <item quantity="one">சிம் தற்போது முடக்கப்பட்டுள்ளது. தொடர்வதற்கு, PUK குறியீட்டை உள்ளிடவும். நீங்கள் <xliff:g id="_NUMBER_0">%d</xliff:g> முறை மட்டுமே முயற்சிக்க முடியும். அதன்பிறகு சிம் நிரந்தரமாக முடக்கப்படும். விவரங்களுக்கு, மொபைல் நிறுவனத்தைத் தொடர்புகொள்ளவும்.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{சிம் பின்னை உள்ளிடவும். உங்கள் சாதனத்தை அன்லாக் செய்ய, உங்கள் மொபைல் நிறுவனத்தைத் தொடர்புகொள்வதற்கு முன்பு மேலும் # முறை முயலலாம்.}other{சிம் பின்னை உள்ளிடவும். இன்னும் # முறை மட்டுமே முயல முடியும்.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{சிம் இப்போது முடக்கப்பட்டுள்ளது. தொடர்வதற்கு PUK குறியீட்டை உள்ளிடவும். நீங்கள் # முறை மட்டுமே முயற்சிக்க முடியும். அதன்பிறகு சிம் நிரந்தரமாக முடக்கப்படும். விவரங்களுக்கு மொபைல் நிறுவனத்தைத் தொடர்புகொள்ளவும்.}other{சிம் இப்போது முடக்கப்பட்டுள்ளது. தொடர்வதற்கு PUK குறியீட்டை உள்ளிடவும். நீங்கள் # முறை மட்டுமே முயற்சிக்க முடியும். அதன்பிறகு சிம் நிரந்தரமாக முடக்கப்படும். விவரங்களுக்கு மொபைல் நிறுவனத்தைத் தொடர்புகொள்ளவும்.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"இயல்பு"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"பபிள்"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"அனலாக்"</string>
diff --git a/packages/SystemUI/res-keyguard/values-te/strings.xml b/packages/SystemUI/res-keyguard/values-te/strings.xml
index 9a9e803..b6ae96d 100644
--- a/packages/SystemUI/res-keyguard/values-te/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-te/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"మీరు మీ పాస్‌వర్డ్‌ను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా టైప్ చేశారు. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"మీరు మీ అన్‌లాక్ నమూనాను <xliff:g id="NUMBER_0">%1$d</xliff:g> సార్లు తప్పుగా గీసారు. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"SIM పిన్ కోడ్ తప్పు, ఇప్పుడు మీ డివైజ్‌ను అన్‌లాక్ చేయాలంటే, మీరు తప్పనిసరిగా మీ క్యారియర్‌ను సంప్రదించాలి."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">SIM పిన్ కోడ్ తప్పు, మీకు మరో <xliff:g id="NUMBER_1">%d</xliff:g> ప్రయత్నాలు మిగిలి ఉన్నాయి.</item>
-      <item quantity="one">SIM పిన్ కోడ్ తప్పు, మీకు మరో <xliff:g id="NUMBER_0">%d</xliff:g> ప్రయత్నం మిగిలి ఉంది, ఆ తర్వాత మీ డివైజ్‌ను అన్‌లాక్ చేయాలంటే, మీరు తప్పనిసరిగా మీ క్యారియర్‌ని సంప్రదించాలి.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{తప్పు SIM PIN కోడ్, మీరు మీ డివైజ్‌ను అన్‌లాక్ చేయడానికి మీరు తప్పనిసరిగా మీ క్యారియర్‌ను కాంటాక్ట్ చేయడానికి ముందు మీకు # ప్రయత్నం మిగిలి ఉంది.}other{తప్పు SIM PIN కోడ్, మీకు # ప్రయత్నాలు మిగిలి ఉన్నాయి. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM నిరుపయోగకరంగా మారింది. మీ క్యారియర్‌ను సంప్రదించండి."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">SIM PUK కోడ్ తప్పు, మీకు మరో <xliff:g id="NUMBER_1">%d</xliff:g> ప్రయత్నాలు మిగిలి ఉన్నాయి, ఆ తర్వాత SIM శాశ్వతంగా నిరుపయోగకరంగా మారుతుంది.</item>
-      <item quantity="one">SIM PUK కోడ్ తప్పు, మీకు మరో <xliff:g id="NUMBER_0">%d</xliff:g> ప్రయత్నం మిగిలి ఉంది, ఆ తర్వాత SIM శాశ్వతంగా నిరుపయోగకరంగా మారుతుంది.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{తప్పు SIM PUK కోడ్, SIM శాశ్వతంగా నిరుపయోగం కాకుండా ఉండటానికి మీకు # ప్రయత్నం మిగిలి ఉంది.}other{తప్పు SIM PUK కోడ్, SIM శాశ్వతంగా నిరుపయోగం కాకుండా ఉండటానికి మీకు # ప్రయత్నాలు మిగిలి ఉన్నాయి.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"SIM పిన్ చర్య విఫలమైంది!"</string>
     <string name="kg_password_puk_failed" msgid="6778867411556937118">"SIM PUK చర్య విఫలమైంది!"</string>
     <string name="accessibility_ime_switch_button" msgid="9082358310194861329">"ఇన్‌పుట్ పద్ధతిని మార్చు"</string>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"పరికరం మాన్యువల్‌గా లాక్ చేయబడింది"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"గుర్తించలేదు"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"ఫేస్ అన్‌లాక్ వాడేందుకు కెమెరా యాక్సెస్ ఆన్‌లో ఉండాలి"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">SIM పిన్‌ని నమోదు చేయండి. మీకు <xliff:g id="NUMBER_1">%d</xliff:g> ప్రయత్నలు మిగిలి ఉన్నాయి.</item>
-      <item quantity="one">SIM పిన్‌ని నమోదు చేయండి, మీరు మీ పరికరాన్ని అన్‌లాక్ చేయడానికి తప్పనిసరిగా మీ క్యారియర్‌ను సంప్రదించడానికి ముందు మీకు <xliff:g id="NUMBER_0">%d</xliff:g> ప్రయత్నం మిగిలి ఉంది.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM ఇప్పుడు నిలిపివేయబడింది. PUK కోడ్‌ను నమోదు చేయండి. SIM శాశ్వతంగా నిరుపయోగం కాకుండా ఉండటానికి మీకు <xliff:g id="_NUMBER_1">%d</xliff:g> ప్రయత్నాలు మిగిలి ఉన్నాయి. వివరాల కోసం కారియర్‌ను సంప్రదించండి.</item>
-      <item quantity="one">SIM ఇప్పుడు నిలిపివేయబడింది. PUK కోడ్‌ను నమోదు చేయండి. SIM శాశ్వతంగా నిరుపయోగం కాకుండా ఉండటానికి మీకు <xliff:g id="_NUMBER_0">%d</xliff:g> ప్రయత్నం మిగిలి ఉంది వివరాల కోసం కారియర్‌ను సంప్రదించండి.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{SIM PINను ఎంటర్ చేయండి. మీరు మీ పరికరాన్ని అన్‌లాక్ చేయడానికి మీరు తప్పనిసరిగా మీ క్యారియర్‌ను కాంటాక్ట్ చేయడానికి ముందు మీకు # ప్రయత్నం మిగిలి ఉంది.}other{SIM PINను ఎంటర్ చేయండి. మీకు # ప్రయత్నాలు మిగిలి ఉన్నాయి.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM ఇప్పుడు డిజేబుల్ చేయబడింది. కొనసాగించడానికి PUK కోడ్‌ను ఎంటర్ చేయండి. SIM శాశ్వతంగా నిరుపయోగం కాకుండా ఉండటానికి మీకు # ప్రయత్నం మిగిలి ఉంది. వివరాల కోసం క్యారియర్‌ను కాంటాక్ట్ చేయండి.}other{SIM ఇప్పుడు డిజేబుల్ చేయబడింది. కొనసాగించడానికి PUK కోడ్‌ను ఎంటర్ చేయండి. SIM శాశ్వతంగా నిరుపయోగం కాకుండా ఉండటానికి మీకు # ప్రయత్నాలు మిగిలి ఉన్నాయి. వివరాల కోసం క్యారియర్‌ను కాంటాక్ట్ చేయండి.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"ఆటోమేటిక్"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"బబుల్"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"ఎనలాగ్"</string>
diff --git a/packages/SystemUI/res-keyguard/values-th/strings.xml b/packages/SystemUI/res-keyguard/values-th/strings.xml
index 6992054..00092bb 100644
--- a/packages/SystemUI/res-keyguard/values-th/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-th/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"คุณพิมพ์รหัสผ่านไม่ถูกต้อง <xliff:g id="NUMBER_0">%1$d</xliff:g> ครั้งแล้ว \n\nโปรดลองอีกครั้งใน <xliff:g id="NUMBER_1">%2$d</xliff:g> วินาที"</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"คุณวาดรูปแบบการปลดล็อกไม่ถูกต้อง <xliff:g id="NUMBER_0">%1$d</xliff:g> ครั้งแล้ว \n\nโปรดลองอีกครั้งในอีก <xliff:g id="NUMBER_1">%2$d</xliff:g> วินาที"</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"รหัส PIN ของซิมไม่ถูกต้อง ตอนนี้คุณต้องติดต่อผู้ให้บริการเพื่อปลดล็อกอุปกรณ์ของคุณ"</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">รหัส PIN ของซิมไม่ถูกต้อง คุณพยายามได้อีก <xliff:g id="NUMBER_1">%d</xliff:g> ครั้ง</item>
-      <item quantity="one">รหัส PIN ของซิมไม่ถูกต้อง คุณพยายามได้อีก <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งก่อนที่จะต้องติดต่อผู้ให้บริการเพื่อปลดล็อกอุปกรณ์ของคุณ</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{รหัส PIN ของซิมไม่ถูกต้อง คุณพยายามได้อีก # ครั้งก่อนที่จะต้องติดต่อผู้ให้บริการเพื่อปลดล็อกอุปกรณ์}other{รหัส PIN ของซิมไม่ถูกต้อง คุณพยายามได้อีก # ครั้ง }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"ซิมไม่สามารถใช้งานได้ โปรดติดต่อผู้ให้บริการ"</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">รหัส PUK ของซิมไม่ถูกต้อง คุณพยายามได้อีก <xliff:g id="NUMBER_1">%d</xliff:g> ครั้งก่อนที่ซิมจะไม่สามารถใช้งานได้อย่างถาวร</item>
-      <item quantity="one">รหัส PUK ของซิมไม่ถูกต้อง คุณพยายามได้อีก <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งก่อนที่ซิมจะไม่สามารถใช้งานได้อย่างถาวร</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{รหัส PUK ของซิมไม่ถูกต้อง คุณพยายามได้อีก # ครั้งก่อนที่ซิมจะใช้งานไม่ได้อย่างถาวร}other{รหัส PUK ของซิมไม่ถูกต้อง คุณพยายามได้อีก # ครั้งก่อนที่ซิมจะใช้งานไม่ได้อย่างถาวร}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"การปลดล็อกด้วย PIN ของซิมล้มเหลว!"</string>
     <string name="kg_password_puk_failed" msgid="6778867411556937118">"การปลดล็อกด้วย PUK ของซิมล้มเหลว!"</string>
     <string name="accessibility_ime_switch_button" msgid="9082358310194861329">"สลับวิธีการป้อนข้อมูล"</string>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"มีการล็อกอุปกรณ์ด้วยตัวเอง"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"ไม่รู้จัก"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"เปิดการเข้าถึงกล้องในการตั้งค่าเพื่อใช้การปลดล็อกด้วยใบหน้า"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">โปรดป้อน PIN ของซิม คุณพยายามได้อีก <xliff:g id="NUMBER_1">%d</xliff:g> ครั้ง</item>
-      <item quantity="one">โปรดป้อน PIN ของซิม คุณพยายามได้อีก <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งก่อนที่จะต้องติดต่อผู้ให้บริการเพื่อปลดล็อกอุปกรณ์</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">ซิมถูกปิดใช้งานในขณะนี้ โปรดป้อนรหัส PUK เพื่อทำต่อ คุณพยายามได้อีก <xliff:g id="_NUMBER_1">%d</xliff:g> ครั้งก่อนที่ซิมจะไม่สามารถใช้งานได้อย่างถาวร โปรดติดต่อสอบถามรายละเอียดจากผู้ให้บริการ</item>
-      <item quantity="one">ซิมถูกปิดใช้งานในขณะนี้ โปรดป้อนรหัส PUK เพื่อทำต่อ คุณพยายามได้อีก <xliff:g id="_NUMBER_0">%d</xliff:g> ครั้งก่อนที่ซิมจะไม่สามารถใช้งานได้อย่างถาวร โปรดติดต่อสอบถามรายละเอียดจากผู้ให้บริการ</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{ป้อน PIN ของซิม คุณพยายามได้อีก # ครั้งก่อนที่จะต้องติดต่อผู้ให้บริการเพื่อปลดล็อกอุปกรณ์}other{ป้อน PIN ของซิม คุณลองได้อีก # ครั้ง}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{ตอนนี้ซิมถูกปิดใช้แล้ว ป้อนรหัส PUK เพื่อดำเนินการต่อ คุณพยายามได้อีก # ครั้งก่อนที่ซิมจะใช้งานไม่ได้อย่างถาวร โปรดติดต่อสอบถามรายละเอียดจากผู้ให้บริการ}other{ตอนนี้ซิมถูกปิดใช้แล้ว ป้อนรหัส PUK เพื่อดำเนินการต่อ คุณพยายามได้อีก # ครั้งก่อนที่ซิมจะใช้งานไม่ได้อย่างถาวร โปรดติดต่อสอบถามรายละเอียดจากผู้ให้บริการ}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"ค่าเริ่มต้น"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"บับเบิล"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"แอนะล็อก"</string>
diff --git a/packages/SystemUI/res-keyguard/values-tl/strings.xml b/packages/SystemUI/res-keyguard/values-tl/strings.xml
index 12b7635..7b07251 100644
--- a/packages/SystemUI/res-keyguard/values-tl/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-tl/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Na-type mo nang hindi tama ang iyong password nang <xliff:g id="NUMBER_0">%1$d</xliff:g> (na) beses. \n\nSubukang muli sa loob ng <xliff:g id="NUMBER_1">%2$d</xliff:g> (na) segundo."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Naguhit mo nang hindi tama ang iyong pattern sa pag-unlock nang <xliff:g id="NUMBER_0">%1$d</xliff:g> (na) beses. \n\nSubukang muli sa loob ng <xliff:g id="NUMBER_1">%2$d</xliff:g> (na) segundo."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Mali ang PIN code ng SIM, dapat ka nang makipag-ugnayan sa iyong carrier upang i-unlock ang iyong device."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">Mali ang PIN code ng SIM, mayroon kang <xliff:g id="NUMBER_1">%d</xliff:g> natitirang pagsubok.</item>
-      <item quantity="other">Mali ang PIN code ng SIM, mayroon kang <xliff:g id="NUMBER_1">%d</xliff:g> na natitirang pagsubok.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Mali ang PIN code ng SIM, mayroon kang # natitirang pagsubok bago mo kailanganing makipag-ugnayan sa iyong carrier para ma-unlock ang device mo.}one{Mali ang PIN code ng SIM, mayroon kang # natitirang pagsubok. }other{Mali ang PIN code ng SIM, mayroon kang # na natitirang pagsubok. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"Hindi magagamit ang SIM. Makipag-ugnayan sa iyong carrier."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">Mali ang PUK code ng SIM, mayroon kang <xliff:g id="NUMBER_1">%d</xliff:g> natitirang pagsubok bago tuluyang hindi magamit ang SIM.</item>
-      <item quantity="other">Mali ang PUK code ng SIM, mayroon kang <xliff:g id="NUMBER_1">%d</xliff:g> na natitirang pagsubok bago tuluyang hindi magamit ang SIM.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Mali ang PUK code ng SIM, mayroon kang # natitirang pagsubok bago tuluyang hindi magamit ang SIM.}one{Mali ang PUK code ng SIM, mayroon kang # natitirang pagsubok bago tuluyang hindi magamit ang SIM.}other{Mali ang PUK code ng SIM, mayroon kang # na natitirang pagsubok bago tuluyang hindi magamit ang SIM.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Nabigo ang operasyon ng PIN ng SIM!"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Manual na na-lock ang device"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Hindi nakilala"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Para sa Pag-unlock Gamit ang Mukha, i-on ang access ng camera sa Mga Setting"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">Ilagay ang PIN ng SIM. Mayroon kang <xliff:g id="NUMBER_1">%d</xliff:g> natitirang pagsubok.</item>
-      <item quantity="other">Ilagay ang PIN ng SIM. Mayroon kang <xliff:g id="NUMBER_1">%d</xliff:g> na natitirang pagsubok.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">Naka-disable na ang SIM. Ilagay ang PUK code upang magpatuloy. Mayroon kang <xliff:g id="_NUMBER_1">%d</xliff:g> natitirang pagsubok bago tuluyang hindi magamit ang SIM. Makipag-ugnayan sa carrier para sa mga detalye.</item>
-      <item quantity="other">Naka-disable na ang SIM. Ilagay ang PUK code upang magpatuloy. Mayroon kang <xliff:g id="_NUMBER_1">%d</xliff:g> na natitirang pagsubok bago tuluyang hindi magamit ang SIM. Makipag-ugnayan sa carrier para sa mga detalye.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Ilagay ang PIN ng SIM. Mayroon kang # natitirang pagsubok bago mo kailanganing makipag-ugnayan sa iyong carrier para ma-unlock ang device mo.}one{Ilagay ang PIN ng SIM. Mayroon kang # natitirang pagsubok.}other{Ilagay ang PIN ng SIM. Mayroon kang # na natitirang pagsubok.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{Na-disable na ang SIM. Ilagay ang PUK code para magpatuloy. Mayroon kang # natitirang pagsubok bago tuluyang hindi magamit ang SIM. Makipag-ugnayan sa carrier para sa mga detalye.}one{Na-disable na ang SIM. Ilagay ang PUK code para magpatuloy. Mayroon kang # natitirang pagsubok bago tuluyang hindi magamit ang SIM. Makipag-ugnayan sa carrier para sa mga detalye.}other{Na-disable na ang SIM. Ilagay ang PUK code para magpatuloy. Mayroon kang # na natitirang pagsubok bago tuluyang hindi magamit ang SIM. Makipag-ugnayan sa carrier para sa mga detalye.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Default"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bubble"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analog"</string>
diff --git a/packages/SystemUI/res-keyguard/values-tr/strings.xml b/packages/SystemUI/res-keyguard/values-tr/strings.xml
index fb08042..7ec5642 100644
--- a/packages/SystemUI/res-keyguard/values-tr/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-tr/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Şifrenizi <xliff:g id="NUMBER_0">%1$d</xliff:g> kez yanlış yazdınız. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> saniye içinde tekrar deneyin."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Kilit açma deseninizi <xliff:g id="NUMBER_0">%1$d</xliff:g> kez yanlış çizdiniz. \n\n<xliff:g id="NUMBER_1">%2$d</xliff:g> saniye içinde tekrar deneyin."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Yanlış SIM PIN kodu. Cihazınızın kilidini açmak için artık operatörünüzle bağlantı kurmanız gerekiyor."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">Yanlış SIM PIN kodu, <xliff:g id="NUMBER_1">%d</xliff:g> deneme hakkınız kaldı.</item>
-      <item quantity="one">Yanlış SIM PIN kodu. Cihazının kilidini açmak için operatörünüzle bağlantı kurmak zorunda kalmadan önce <xliff:g id="NUMBER_0">%d</xliff:g> deneme hakkınız kaldı.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Yanlış SIM PIN kodu. Cihazınızın kilidini açması için operatörünüzle bağlantı kurmak zorunda kalmadan önce # deneme hakkınız kaldı.}other{Yanlış SIM PIN kodu. # deneme hakkınız kaldı. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM kullanılamaz. Operatörünüzle bağlantı kurun."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">Yanlış SIM PUK kodu, SIM kalıcı olarak kullanılmaz hale gelmeden önce <xliff:g id="NUMBER_1">%d</xliff:g> deneme hakkınız kaldı.</item>
-      <item quantity="one">Yanlış SIM PUK kodu. SIM kalıcı olarak kullanılmaz hale gelmeden önce <xliff:g id="NUMBER_0">%d</xliff:g> deneme hakkınız kaldı.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Yanlış SIM PUK kodu. SIM kalıcı olarak kullanılmaz hale gelmeden önce # deneme hakkınız kaldı.}other{Yanlış SIM PUK kodu. SIM kalıcı olarak kullanılmaz hale gelmeden önce # deneme hakkınız kaldı.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"SIM PIN işlemi başarısız oldu!"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Cihazın manuel olarak kilitlendi"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Tanınmadı"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Yüz Tanıma Kilidi için Ayarlar\'da kamera erişimini açın"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">SIM PIN\'inizi girin. <xliff:g id="NUMBER_1">%d</xliff:g> deneme hakkınız kaldı.</item>
-      <item quantity="one">SIM PIN\'inizi girin. Cihazınızın kilidini açmak için operatörünüzle bağlantı kurmak zorunda kalmadan önce <xliff:g id="NUMBER_0">%d</xliff:g> deneme hakkınız kaldı.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM artık devre dışı. Devam etmek için PUK kodunu girin. SIM kalıcı olarak kullanım dışı kalmadan önce <xliff:g id="_NUMBER_1">%d</xliff:g> deneme hakkınız kaldı. Ayrıntılı bilgi için operatörünüzle iletişim kurun.</item>
-      <item quantity="one">SIM artık devre dışı. Devam etmek için PUK kodunu girin. SIM kalıcı olarak kullanım dışı kalmadan önce <xliff:g id="_NUMBER_0">%d</xliff:g> deneme hakkınız kaldı. Ayrıntılı bilgi için operatörünüzle iletişim kurun.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{SIM PIN\'inizi girin. Cihazınızın kilidini açmak için operatörünüzle bağlantı kurmak zorunda kalmadan önce # deneme hakkınız kaldı.}other{SIM PIN kodunu girin. # deneme hakkınız kaldı.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM artık devre dışı. Devam etmek için PUK kodunu girin. SIM kalıcı olarak kullanım dışı kalmadan önce # deneme hakkınız kaldı. Ayrıntılı bilgi için operatörünüzle iletişim kurun.}other{SIM artık devre dışı. Devam etmek için PUK kodunu girin. SIM kalıcı olarak kullanım dışı kalmadan önce # deneme hakkınız kaldı. Ayrıntılı bilgi için operatörünüzle iletişim kurun.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Varsayılan"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Baloncuk"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analog"</string>
diff --git a/packages/SystemUI/res-keyguard/values-uk/strings.xml b/packages/SystemUI/res-keyguard/values-uk/strings.xml
index 2aa4efc..096adb7f 100644
--- a/packages/SystemUI/res-keyguard/values-uk/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-uk/strings.xml
@@ -68,19 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Пароль неправильно введено стільки разів: <xliff:g id="NUMBER_0">%1$d</xliff:g>. \n\nПовторіть спробу через <xliff:g id="NUMBER_1">%2$d</xliff:g> с."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Ключ розблокування неправильно намальовано стільки разів: <xliff:g id="NUMBER_0">%1$d</xliff:g>. \n\nПовторіть спробу через <xliff:g id="NUMBER_1">%2$d</xliff:g> с."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Неправильний PIN-код SIM-карти. Зв’яжіться зі своїм оператором, щоб розблокувати пристрій."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">Неправильний PIN-код SIM-карти. У вас залишилася <xliff:g id="NUMBER_1">%d</xliff:g> спроба.</item>
-      <item quantity="few">Неправильний PIN-код SIM-карти. У вас залишилося <xliff:g id="NUMBER_1">%d</xliff:g> спроби.</item>
-      <item quantity="many">Неправильний PIN-код SIM-карти. У вас залишилося <xliff:g id="NUMBER_1">%d</xliff:g> спроб.</item>
-      <item quantity="other">Неправильний PIN-код SIM-карти. У вас залишилося <xliff:g id="NUMBER_1">%d</xliff:g> спроби.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Неправильний PIN-код SIM-карти. У вас залишилась # спроба. Після цього, щоб розблокувати пристрій, потрібно буде зв’язатися з оператором.}one{Неправильний PIN-код SIM-карти. У вас залишилася # спроба. }few{Неправильний PIN-код SIM-карти. У вас залишилося # спроби. }many{Неправильний PIN-код SIM-карти. У вас залишилося # спроб. }other{Неправильний PIN-код SIM-карти. У вас залишилося # спроби. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM-карту заблоковано. Зв’яжіться з оператором."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">Неправильний PUK-код SIM-карти. У вас залишилася <xliff:g id="NUMBER_1">%d</xliff:g> спроба. Після цього SIM-карту буде назавжди заблоковано.</item>
-      <item quantity="few">Неправильний PUK-код SIM-карти. У вас залишилося <xliff:g id="NUMBER_1">%d</xliff:g> спроби. Після цього SIM-карту буде назавжди заблоковано.</item>
-      <item quantity="many">Неправильний PUK-код SIM-карти. У вас залишилося <xliff:g id="NUMBER_1">%d</xliff:g> спроб. Після цього SIM-карту буде назавжди заблоковано.</item>
-      <item quantity="other">Неправильний PUK-код SIM-карти. У вас залишилося <xliff:g id="NUMBER_1">%d</xliff:g> спроби. Після цього SIM-карту буде назавжди заблоковано.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Неправильний PUK-код SIM-карти. У вас залишилась # спроба. Після цього SIM-карту буде назавжди заблоковано.}one{Неправильний PUK-код SIM-карти. У вас залишилася # спроба. Після цього SIM-карту буде назавжди заблоковано.}few{Неправильний PUK-код SIM-карти. У вас залишилося # спроби. Після цього SIM-карту буде назавжди заблоковано.}many{Неправильний PUK-код SIM-карти. У вас залишилося # спроб. Після цього SIM-карту буде назавжди заблоковано.}other{Неправильний PUK-код SIM-карти. У вас залишилося # спроби. Після цього SIM-карту буде назавжди заблоковано.}}"</string>
     <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>
@@ -95,18 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Пристрій заблоковано вручну"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Не розпізнано"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Для фейсконтролю надайте доступ до камери"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">Введіть PIN-код SIM-карти. Залишилася <xliff:g id="NUMBER_1">%d</xliff:g> спроба.</item>
-      <item quantity="few">Введіть PIN-код SIM-карти. Залишилося <xliff:g id="NUMBER_1">%d</xliff:g> спроби.</item>
-      <item quantity="many">Введіть PIN-код SIM-карти. Залишилося <xliff:g id="NUMBER_1">%d</xliff:g> спроб.</item>
-      <item quantity="other">Введіть PIN-код SIM-карти. Залишилося <xliff:g id="NUMBER_1">%d</xliff:g> спроби.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">SIM-карту заблоковано. Щоб продовжити, введіть PUK-код. Залишилася <xliff:g id="_NUMBER_1">%d</xliff:g> спроба. Після цього SIM-карту буде назавжди заблоковано. Щоб дізнатися більше, зверніться до свого оператора.</item>
-      <item quantity="few">SIM-карту заблоковано. Щоб продовжити, введіть PUK-код. Залишилося <xliff:g id="_NUMBER_1">%d</xliff:g> спроби. Після цього SIM-карту буде назавжди заблоковано. Щоб дізнатися більше, зверніться до свого оператора.</item>
-      <item quantity="many">SIM-карту заблоковано. Щоб продовжити, введіть PUK-код. Залишилося <xliff:g id="_NUMBER_1">%d</xliff:g> спроб. Після цього SIM-карту буде назавжди заблоковано. Щоб дізнатися більше, зверніться до свого оператора.</item>
-      <item quantity="other">SIM-карту заблоковано. Щоб продовжити, введіть PUK-код. Залишилося <xliff:g id="_NUMBER_1">%d</xliff:g> спроби. Після цього SIM-карту буде назавжди заблоковано. Щоб дізнатися більше, зверніться до свого оператора.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Введіть PIN-код SIM-карти. У вас залишилась # спроба. Після цього, щоб розблокувати пристрій, потрібно буде зв’язатися з оператором.}one{Введіть PIN-код SIM-карти. У вас залишилася # спроба.}few{Введіть PIN-код SIM-карти. У вас залишилося # спроби.}many{Введіть PIN-код SIM-карти. У вас залишилося # спроб.}other{Введіть PIN-код SIM-карти. У вас залишилося # спроби.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM-карту заблоковано. Щоб продовжити, введіть PUK-код. У вас залишилась # спроба. Після цього SIM-карту буде назавжди заблоковано. Щоб дізнатися більше, зверніться до свого оператора.}one{SIM-карту заблоковано. Щоб продовжити, введіть PUK-код. У вас залишилася # спроба. Після цього SIM-карту буде назавжди заблоковано. Щоб дізнатися більше, зверніться до свого оператора.}few{SIM-карту заблоковано. Щоб продовжити, введіть PUK-код. У вас залишилося # спроби. Після цього SIM-карту буде назавжди заблоковано. Щоб дізнатися більше, зверніться до свого оператора.}many{SIM-карту заблоковано. Щоб продовжити, введіть PUK-код. У вас залишилося # спроб. Після цього SIM-карту буде назавжди заблоковано. Щоб дізнатися більше, зверніться до свого оператора.}other{SIM-карту заблоковано. Щоб продовжити, введіть PUK-код. У вас залишилося # спроби. Після цього SIM-карту буде назавжди заблоковано. Щоб дізнатися більше, зверніться до свого оператора.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"За умовчанням"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Бульбашковий"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Аналоговий"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ur/strings.xml b/packages/SystemUI/res-keyguard/values-ur/strings.xml
index dafa2f6..c30dbfc 100644
--- a/packages/SystemUI/res-keyguard/values-ur/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ur/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"آپ نے اپنا پاس ورڈ <xliff:g id="NUMBER_0">%1$d</xliff:g> بار غلط طریقے سے ٹائپ کیا ہے۔ \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> سیکنڈ میں دوبارہ کوشش کریں۔"</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"آپ نے اپنا غیر مقفل کرنے کا پیٹرن <xliff:g id="NUMBER_0">%1$d</xliff:g> بار غلط طریقے سے ڈرا کیا ہے۔ \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> سیکنڈ میں دوبارہ کوشش کریں۔"</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"‏غلط SIM PIN کوڈ، اب آپ کو اپنا آلہ غیر مقفل کرنے کیلئے اپنے کیریئر سے رابطہ کرنا ہوگا۔"</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">‏غلط SIM PIN کوڈ، آپ کے پاس <xliff:g id="NUMBER_1">%d</xliff:g> کوششیں بچی ہیں۔</item>
-      <item quantity="one">‏غلط SIM PIN کوڈ، آپ کے پاس <xliff:g id="NUMBER_0">%d</xliff:g> کوشش بچی ہے، اس کے بعد آپ کو اپنا آلہ غیر مقفل کرنے کیلئے اپنے کیریئر سے رابطہ کرنا ہوگا۔</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{‏SIM کا غلط PIN کوڈ، اس سے پہلے کہ آپ اپنا آلہ غیر مقفل کرنے کیلئے لازمی طور پر اپنے کیریئر سے رابطہ کریں آپ کے پاس # کوشش بچی ہے۔}other{‏SIM کا غلط PIN کوڈ، آپ کے پاس # کوششیں بچی ہیں۔ }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"‏SIM ناقابل استعمال ہے۔ اپنے کیریئر سے رابطہ کریں۔"</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">‏غلط SIM PUK کوڈ، آپ کے پاس <xliff:g id="NUMBER_1">%d</xliff:g> کوششیں بچی ہیں، اس کے بعد SIM مستقل طور پر ناقابل استعمال ہو جائے گا۔</item>
-      <item quantity="one">‏غلط SIM PUK کوڈ، آپ کے پاس <xliff:g id="NUMBER_0">%d</xliff:g> کوشش بچی ہے، اس کے بعد SIM مستقل طور پر ناقابل استعمال ہو جائے گا۔</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{‏SIM کا غلط PUK کوڈ، SIM کے مستقل طور پر ناقابل استعمال ہونے سے پہلے آپ کے پاس # کوشش بچی ہے۔}other{‏SIM کا غلط PUK کوڈ، SIM کے مستقل طور پر ناقابل استعمال ہونے سے پہلے آپ کے پاس # کوششیں بچی ہیں۔}}"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"آلہ کو دستی طور پر مقفل کیا گیا تھا"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"تسلیم شدہ نہیں ہے"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"فیس اَنلاک استعمال کرنے کیلئے، ترتیبات میں کیمرا تک رسائی کو آن کریں"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">‏SIM کا PIN درج کریں، آپ کے پاس <xliff:g id="NUMBER_1">%d</xliff:g> کوششیں بچی ہیں۔</item>
-      <item quantity="one">‏SIM کا PIN درج کریں، آپ کے پاس <xliff:g id="NUMBER_0">%d</xliff:g> کوشش بچی ہے، اس کے بعد آپ کو اپنا آلہ غیر مقفل کرنے کے لیے اپنے کیریئر سے رابطہ کرنا ہوگا۔</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">‏SIM اب غیر فعال ہے۔ جاری رکھنے کیلئے PUK کوڈ درج کریں۔ SIM کے مستقل طور پر ناقابل استعمال ہونے سے پہلے آپ کے پاس <xliff:g id="_NUMBER_1">%d</xliff:g> کوششیں بچی ہیں۔ تفصیلات کیلئے کیریئر سے رابطہ کریں۔</item>
-      <item quantity="one">‏SIM اب غیر فعال ہے۔ جاری رکھنے کیلئے PUK کوڈ درج کریں۔ SIM کے مستقل طور پر ناقابل استعمال ہونے سے پہلے آپ کے پاس <xliff:g id="_NUMBER_0">%d</xliff:g> کوشش بچی ہے۔ تفصیلات کیلئے کیریئر سے رابطہ کریں۔</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{‏SIM کا PIN درج کریں۔ اس سے پہلے کہ آپ اپنا آلہ غیر مقفل کرنے کیلئے لازمی طور پر اپنے کیریئر سے رابطہ کریں آپ کے پاس # کوشش بچی ہے۔}other{‏SIM کا PIN درج کریں۔ آپ کے پاس # کوششیں بچی ہیں۔}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{‏SIM اب غیر فعال ہے۔ جاری رکھنے کیلئے PUK کوڈ درج کریں۔ SIM کے مستقل طور پر ناقابل استعمال ہونے سے پہلے آپ کے پاس # کوشش بچی ہے۔ تفصیلات کیلئے کیریئر سے رابطہ کریں۔}other{‏SIM اب غیر فعال ہے۔ جاری رکھنے کیلئے PUK کوڈ درج کریں۔ SIM کے مستقل طور پر ناقابل استعمال ہونے سے پہلے آپ کے پاس # کوششیں بچی ہیں۔ تفصیلات کیلئے کیریئر سے رابطہ کریں۔}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"ڈیفالٹ"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"بلبلہ"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"اینالاگ"</string>
diff --git a/packages/SystemUI/res-keyguard/values-uz/strings.xml b/packages/SystemUI/res-keyguard/values-uz/strings.xml
index df537ab6..dedf432 100644
--- a/packages/SystemUI/res-keyguard/values-uz/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-uz/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Parol <xliff:g id="NUMBER_0">%1$d</xliff:g> marta xato kiritildi. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> soniyadan keyin qaytadan urining."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Grafik kalit <xliff:g id="NUMBER_0">%1$d</xliff:g> marta xato kiritildi. \n\n <xliff:g id="NUMBER_1">%2$d</xliff:g> soniyadan keyin qayta urining."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"SIM kartaning PIN kodi xato. Qurilma qulfini ochish uchun operatoringizga murojaat qiling."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">SIM kartaning PIN kodi noto‘g‘ri. Sizda yana <xliff:g id="NUMBER_1">%d</xliff:g> ta urinish qoldi.</item>
-      <item quantity="one">SIM karta PIN kodi noto‘g‘ri terildi, yana <xliff:g id="NUMBER_0">%d</xliff:g> marta uirinib ko‘rishingiz mumkin, urinishlar tugagandan keyin qurilmangizni qulfdan chiqarish uchun aloqa operatoringiz bilan bog‘lanishingiz kerak.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{SIM karta PIN kodi xato kiritildi, yana # marta urinishingiz mumkin, urinishlar tugagandan keyin qurilmangizni qulfdan chiqarish uchun aloqa operatoringizga murojaat qilishingiz kerak.}other{SIM karta PIN kodi xato kiritildi, yana # marta urinishingiz mumkin. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM kartadan foydalanib bo‘lmaydi. Operatoringizga murojaat qiling."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">SIM kartaning PUK kodi noto‘g‘ri kiritildi. Yana <xliff:g id="NUMBER_1">%d</xliff:g> ta muvaffaqiyatsiz urinishdan keyin SIM karta butunlay ishdan chiqadi.</item>
-      <item quantity="one">SIM karta PUK kodi noto‘g‘ri terildi, yana <xliff:g id="NUMBER_0">%d</xliff:g> marta urinib ko‘rganingizdan keyin SIM kartadan umuman foydalanib bo‘lmaydi.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{SIM karta PUK kodi xato kiritildi, yana # marta urinishdan keyin SIM kartadan umuman foydalanib boʻlmay qoladi.}other{SIM karta PUK kodi xato kiritildi, yana # marta urinishdan keyin SIM kartadan umuman foydalanib boʻlmay qoladi.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"SIM kartani qulfdan chiqarib bo‘lmadi!"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Qurilma qo‘lda qulflangan"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Aniqlanmadi"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Yuz bilan ochish uchun kamera ruxsatini bering"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">SIM PIN kodini kiriting, sizda <xliff:g id="NUMBER_1">%d</xliff:g> ta urinish bor.</item>
-      <item quantity="one">SIM PIN kodini kiriting, qurilmani qulfdan chiqarish uchun sizda <xliff:g id="NUMBER_0">%d</xliff:g> ta urinish bor.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM karta faolsizlantirildi. Davom etish uchun PUK kodni kiriting. Yana <xliff:g id="_NUMBER_1">%d</xliff:g> marta xato qilsangiz, SIM kartangiz butunlay qulflanadi. Batafsil axborot olish uchun tarmoq operatoriga murojaat qiling.</item>
-      <item quantity="one">SIM karta faolsizlantirildi. Davom etish uchun PUK kodni kiriting. Yana <xliff:g id="_NUMBER_0">%d</xliff:g> marta xato qilsangiz, SIM kartangiz butunlay qulflanadi. Batafsil axborot olish uchun tarmoq operatoriga murojaat qiling.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{SIM PIN kodini kiriting, qurilmani qulfdan chiqarish uchun sizda # ta urinish bor.}other{SIM karta PIN kodini kiriting. Sizda # ta urinish qoldi.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM karta faolsizlantirildi. Davom etish uchun PUK kodni kiriting. Yana # marta xato qilsangiz, SIM kartangiz butunlay qulflanadi. Batafsil axborot olish uchun aloqa operatoriga murojaat qiling.}other{SIM karta faolsizlantirildi. Davom etish uchun PUK kodni kiriting. Yana # marta xato qilsangiz, SIM kartangiz butunlay qulflanadi. Batafsil axborot olish uchun aloqa operatoriga murojaat qiling.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Odatiy"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Pufaklar"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Analog"</string>
diff --git a/packages/SystemUI/res-keyguard/values-vi/strings.xml b/packages/SystemUI/res-keyguard/values-vi/strings.xml
index 5d6fc50..9a0eb44 100644
--- a/packages/SystemUI/res-keyguard/values-vi/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-vi/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Bạn đã nhập sai mật khẩu <xliff:g id="NUMBER_0">%1$d</xliff:g> lần. \n\nHãy thử lại sau <xliff:g id="NUMBER_1">%2$d</xliff:g> giây."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Bạn đã vẽ không chính xác hình mở khóa <xliff:g id="NUMBER_0">%1$d</xliff:g> lần. \n\nHãy thử lại sau <xliff:g id="NUMBER_1">%2$d</xliff:g> giây."</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Mã PIN của SIM không chính xác, bây giờ bạn phải liên hệ với nhà cung cấp dịch vụ để mở khóa thiết bị của mình."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">Mã PIN của SIM không chính xác, bạn còn <xliff:g id="NUMBER_1">%d</xliff:g> lần thử.</item>
-      <item quantity="one">Mã PIN của SIM không chính xác, bạn còn <xliff:g id="NUMBER_0">%d</xliff:g> lần thử trước khi bạn phải liên hệ với nhà cung cấp dịch vụ để mở khóa thiết bị của mình.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Mã PIN của SIM không chính xác. Bạn còn # lần thử trước khi phải liên hệ với nhà cung cấp dịch vụ để mở khóa thiết bị của mình.}other{Mã PIN của SIM không chính xác, bạn còn # lần thử. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM không thể sử dụng được. Hãy liên hệ với nhà cung cấp dịch vụ của bạn."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">Mã PUK của SIM không chính xác, bạn còn <xliff:g id="NUMBER_1">%d</xliff:g> lần thử trước khi SIM vĩnh viễn không thể sử dụng được.</item>
-      <item quantity="one">Mã PUK của SIM không chính xác, bạn còn <xliff:g id="NUMBER_0">%d</xliff:g> lần thử trước khi SIM vĩnh viễn không thể sử dụng được.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Mã PUK của SIM không chính xác, bạn còn # lần thử trước khi SIM vĩnh viễn không thể sử dụng được.}other{Mã PUK của SIM không chính xác, bạn còn # lần thử trước khi SIM vĩnh viễn không thể sử dụng được.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Thao tác mã PIN của SIM không thành công!"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Thiết bị đã bị khóa theo cách thủ công"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Không nhận dạng được"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Cho phép truy cập máy ảnh để dùng Mở khóa bằng khuôn mặt"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">Hãy nhập mã PIN của SIM. Bạn còn <xliff:g id="NUMBER_1">%d</xliff:g> lần thử.</item>
-      <item quantity="one">Hãy nhập mã PIN của SIM. Bạn còn <xliff:g id="NUMBER_0">%d</xliff:g> lần thử trước khi phải liên hệ với nhà mạng để mở khóa thiết bị của mình.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM hiện đã bị tắt. Hãy nhập mã PUK để tiếp tục. Bạn còn <xliff:g id="_NUMBER_1">%d</xliff:g> lần thử trước khi SIM vĩnh viễn không sử dụng được. Hãy liên hệ với nhà cung cấp dịch vụ để biết chi tiết.</item>
-      <item quantity="one">SIM hiện đã bị tắt. Hãy nhập mã PUK để tiếp tục. Bạn còn <xliff:g id="_NUMBER_0">%d</xliff:g> lần thử trước khi SIM vĩnh viễn không thể sử dụng được. Hãy liên hệ với nhà cung cấp dịch vụ để biết chi tiết.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Hãy nhập mã PIN của SIM. Bạn còn # lần thử trước khi phải liên hệ với nhà cung cấp dịch vụ để mở khóa thiết bị của mình.}other{Nhập mã PIN của SIM. Bạn còn # lần thử.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM hiện đã bị tắt. Hãy nhập mã PUK để tiếp tục. Bạn còn # lần thử trước khi SIM vĩnh viễn không thể sử dụng được. Hãy liên hệ với nhà cung cấp dịch vụ để biết thông tin chi tiết.}other{SIM hiện đã bị tắt. Hãy nhập mã PUK để tiếp tục. Bạn còn # lần thử trước khi SIM vĩnh viễn không thể sử dụng được. Hãy liên hệ với nhà cung cấp dịch vụ để biết thông tin chi tiết.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Mặc định"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Bong bóng"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"Đồng hồ kim"</string>
diff --git a/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml
index e74fa75..26e3db7 100644
--- a/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"您已经 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次输错密码。\n\n请在 <xliff:g id="NUMBER_1">%2$d</xliff:g> 秒后重试。"</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"您已经 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次画错解锁图案。\n\n请在 <xliff:g id="NUMBER_1">%2$d</xliff:g> 秒后重试。"</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"SIM 卡 PIN 码不正确,您现在必须联系运营商为您解锁设备。"</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">SIM 卡 PIN 码不正确,您还有 <xliff:g id="NUMBER_1">%d</xliff:g> 次尝试机会。</item>
-      <item quantity="one">SIM 卡 PIN 码不正确,您还有 <xliff:g id="NUMBER_0">%d</xliff:g> 次尝试机会。如果仍不正确,则需要联系运营商帮您解锁设备。</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{SIM 卡 PIN 码不正确,您还可以尝试 # 次,如果仍不正确,则必须联系运营商帮您解锁设备。}other{SIM 卡 PIN 码不正确,您还可以尝试 # 次。}}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM 卡无法使用,请与您的运营商联系。"</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">SIM 卡 PUK 码不正确,您还有 <xliff:g id="NUMBER_1">%d</xliff:g> 次尝试机会。如果仍不正确,SIM 卡将永远无法使用。</item>
-      <item quantity="one">SIM 卡 PUK 码不正确,您还有 <xliff:g id="NUMBER_0">%d</xliff:g> 次尝试机会。如果仍不正确,SIM 卡将永远无法使用。</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{SIM 卡 PUK 码不正确,您还可以尝试 # 次,如果仍不正确,SIM 卡将永远无法使用。}other{SIM 卡 PUK 码不正确,您还可以尝试 # 次,如果仍不正确,SIM 卡将永远无法使用。}}"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"此设备已手动锁定"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"无法识别"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"如需使用人脸解锁功能,请在“设置”中开启摄像头使用权限"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">请输入 SIM 卡 PIN 码,您还可以尝试 <xliff:g id="NUMBER_1">%d</xliff:g> 次。</item>
-      <item quantity="one">请输入 SIM 卡 PIN 码,您还可以尝试 <xliff:g id="NUMBER_0">%d</xliff:g> 次。如果仍不正确,则需要联系运营商帮您解锁设备。</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM 卡现已停用,请输入 PUK 码继续使用。您还可以尝试 <xliff:g id="_NUMBER_1">%d</xliff:g> 次。如果仍不正确,该 SIM 卡将永远无法使用。有关详情,请联系您的运营商。</item>
-      <item quantity="one">SIM 卡现已停用,请输入 PUK 码继续使用。您还可以尝试 <xliff:g id="_NUMBER_0">%d</xliff:g> 次。如果仍不正确,该 SIM 卡将永远无法使用。有关详情,请联系您的运营商。</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{请输入 SIM 卡 PIN 码。您还可以尝试 # 次,如果仍不正确,则必须联系运营商帮您解锁设备。}other{请输入 SIM 卡 PIN 码。您还可以尝试 # 次。}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM 卡现已停用,请输入 PUK 码继续使用。您还可以尝试 # 次,如果仍不正确,SIM 卡将永远无法使用。有关详情,请联系运营商。}other{SIM 卡现已停用,请输入 PUK 码继续使用。您还可以尝试 # 次,如果仍不正确,SIM 卡将永远无法使用。有关详情,请联系运营商。}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"默认"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"泡泡"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"指针"</string>
diff --git a/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml
index c22ecdc..2bd2105 100644
--- a/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-zh-rHK/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"您已輸入錯誤的密碼 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。\n\n請在 <xliff:g id="NUMBER_1">%2$d</xliff:g> 秒後再試一次。"</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"您已畫錯解鎖圖案 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。\n\n請在 <xliff:g id="NUMBER_1">%2$d</xliff:g> 秒後再試一次。"</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"SIM 卡 PIN 碼不正確,您現在必須聯絡流動網絡供應商為您的裝置解鎖。"</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">SIM 卡的 PIN 碼不正確,您還有 <xliff:g id="NUMBER_1">%d</xliff:g> 次輸入機會。</item>
-      <item quantity="one">SIM 卡的 PIN 碼不正確,您還有 <xliff:g id="NUMBER_0">%d</xliff:g> 次輸入機會。如果仍然輸入錯誤,您必須聯絡流動網絡供應商為您的裝置解鎖。</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{SIM 卡的 PIN 碼不正確,您還可以再試 # 次。如果仍然輸入錯誤,您必須聯絡流動網絡供應商解鎖您的裝置。}other{SIM 卡的 PIN 碼不正確,您還可以再試 # 次。}}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM 卡無法使用,請聯絡您的流動網絡供應商。"</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">SIM 卡的 PUK 碼不正確,您還有 <xliff:g id="NUMBER_1">%d</xliff:g> 次輸入機會。如果仍然輸入錯誤,SIM 卡將永久無法使用。</item>
-      <item quantity="one">SIM 卡的 PUK 碼不正確,您還有 <xliff:g id="NUMBER_0">%d</xliff:g> 次輸入機會。如果仍然輸入錯誤,SIM 卡將永久無法使用。</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{SIM 卡的 PUK 碼不正確,您還可以再試 # 次。如果仍然輪入錯誤,SIM 卡將永久無法使用。}other{SIM 卡的 PUK 碼不正確,您還可以再試 # 次。如果仍然輪入錯誤,SIM 卡將永久無法使用。}}"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"使用者已手動將裝置上鎖"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"未能識別"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"如要使用「面孔解鎖」,請在「設定」開啟相機存取權"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">輸入 SIM 卡的 PIN,您還可以再試 <xliff:g id="NUMBER_1">%d</xliff:g> 次。</item>
-      <item quantity="one">輸入 SIM 卡的 PIN,您還可以再試 <xliff:g id="NUMBER_0">%d</xliff:g> 次。如果仍然輸入錯誤,您必須聯絡流動網絡供應商解鎖您的裝置。</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM 卡已停用。請輸入 PUK 碼以繼續進行。您還可以再試 <xliff:g id="_NUMBER_1">%d</xliff:g> 次。如果仍然輸入錯誤,SIM 卡將永久無法使用。詳情請與流動網絡供應商聯絡。</item>
-      <item quantity="one">SIM 卡已停用。請輸入 PUK 碼以繼續進行。您還可以再試 <xliff:g id="_NUMBER_0">%d</xliff:g> 次。如果仍然輸入錯誤,SIM 卡將永久無法使用。詳情請與流動網絡供應商聯絡。</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{輸入 SIM 卡的 PIN,您還可以再試 # 次。如果仍然輸入錯誤,您必須聯絡流動網絡供應商解鎖您的裝置。}other{輸入 SIM 卡的 PIN。您還可以再試 # 次。}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM 卡已停用。請輸入 PUK 碼以繼續進行。您還可以再試 # 次。如果仍然輸入錯誤,SIM 卡將永久無法使用。詳情請向流動網絡供應商查詢。}other{SIM 卡已停用。請輸入 PUK 碼以繼續進行。您還可以再試 # 次。如果仍然輸入錯誤,SIM 卡將永久無法使用。詳情請向流動網絡供應商查詢。}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"預設"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"泡泡"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"指針"</string>
diff --git a/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml
index 498f748..a662553 100644
--- a/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-zh-rTW/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"你已輸入錯誤的密碼 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。\n\n請在 <xliff:g id="NUMBER_1">%2$d</xliff:g> 秒後再試一次。"</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"你已畫出錯誤的解鎖圖案 <xliff:g id="NUMBER_0">%1$d</xliff:g> 次。\n\n請在 <xliff:g id="NUMBER_1">%2$d</xliff:g> 秒後再試一次。"</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"SIM 卡的 PIN 碼輸入錯誤,你現在必須請電信業者為裝置解鎖。"</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="other">SIM 卡的 PIN 碼輸入錯誤,你還可以再試 <xliff:g id="NUMBER_1">%d</xliff:g> 次。</item>
-      <item quantity="one">SIM 卡的 PIN 碼輸入錯誤,你還可以再試 <xliff:g id="NUMBER_0">%d</xliff:g> 次。如果仍然失敗,就必須請電信業者為裝置解鎖。</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{SIM 卡 PIN 碼輸入錯誤,您還可以再試 # 次。如果仍然失敗,就必須聯絡電信業者為裝置解鎖。}other{SIM 卡 PIN 碼輸入錯誤,您還可以再試 # 次。}}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"SIM 卡無法使用,請與你的電信業者聯絡。"</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="other">SIM 卡的 PUK 碼輸入錯誤,你還可以再試 <xliff:g id="NUMBER_1">%d</xliff:g> 次。如果仍然失敗,SIM 卡將永久無法使用。</item>
-      <item quantity="one">SIM 卡的 PUK 碼輸入錯誤,你還可以再試 <xliff:g id="NUMBER_0">%d</xliff:g> 次。如果仍然失敗,SIM 卡將永久無法使用。</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{SIM 卡 PUK 碼輸入錯誤,您還可以再試 # 次,如果仍然失敗,SIM 卡將永久無法使用。}other{SIM 卡 PUK 碼輸入錯誤,您還可以再試 # 次,如果仍然失敗,SIM 卡將永久無法使用。}}"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"裝置已手動鎖定"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"無法識別"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"如要使用人臉解鎖功能,請在「設定」中開啟相機存取權。"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="other">請輸入 SIM 卡的 PIN 碼,你還可以再試 <xliff:g id="NUMBER_1">%d</xliff:g> 次。</item>
-      <item quantity="one">請輸入 SIM 卡的 PIN 碼,你還可以再試 <xliff:g id="NUMBER_0">%d</xliff:g> 次。如果仍然失敗,就必須請電信業者為裝置解鎖。</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="other">SIM 卡現在已遭停用。請輸入 PUK 碼以繼續進行。你還可以再試 <xliff:g id="_NUMBER_1">%d</xliff:g> 次,如果仍然失敗,SIM 卡將永久無法使用。詳情請與電信業者聯絡。</item>
-      <item quantity="one">SIM 卡現在已遭停用。請輸入 PUK 碼以繼續進行。你還可以再試 <xliff:g id="_NUMBER_0">%d</xliff:g> 次,如果仍然失敗,SIM 卡將永久無法使用。詳情請與電信業者聯絡。</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{請輸入 SIM 卡 PIN 碼,您還可以再試 # 次,如果仍然失敗,就必須聯絡電信業者為裝置解鎖。}other{輸入 SIM 卡 PIN 碼您還可以再試 # 次}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{SIM 卡現在已遭停用。請輸入 PUK 碼以繼續。您還可以再試 # 次,如果仍然失敗,SIM 卡將永久無法使用。詳情請洽詢電信業者。}other{SIM 卡現在已遭停用。請輸入 PUK 碼以繼續。您還可以再試 # 次,如果仍然失敗,SIM 卡將永久無法使用。詳情請洽詢電信業者。}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"預設"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"泡泡"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"類比"</string>
diff --git a/packages/SystemUI/res-keyguard/values-zu/strings.xml b/packages/SystemUI/res-keyguard/values-zu/strings.xml
index 70bed32..8c7f8309 100644
--- a/packages/SystemUI/res-keyguard/values-zu/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-zu/strings.xml
@@ -68,15 +68,9 @@
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="190984061975729494">"Ubhale iphasiwedi yakho ngendlela engafanele <xliff:g id="NUMBER_0">%1$d</xliff:g> izikhathi. \n\nZama futhi emasekhondini angu-<xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="4252405904570284368">"Udwebe iphathini yakho yokuvula ngendlela engafanele-<xliff:g id="NUMBER_0">%1$d</xliff:g>. \n\n Zama futhi emasekhondini angu-<xliff:g id="NUMBER_1">%2$d</xliff:g>"</string>
     <string name="kg_password_wrong_pin_code_pukked" msgid="8047350661459040581">"Ikhodi yephinikhodi ye-SIM engalungile manje kumele uxhumane nenkampini yenethiwekhi yakho ukuvula idivayisi yakho."</string>
-    <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="7030584350995485026">
-      <item quantity="one">Ikhodi engalungile yephinikhodi ye-SIM, unemizamo engu-<xliff:g id="NUMBER_1">%d</xliff:g> esele.</item>
-      <item quantity="other">Ikhodi engalungile yephinikhodi ye-SIM, unemizamo engu-<xliff:g id="NUMBER_1">%d</xliff:g> esele.</item>
-    </plurals>
+    <string name="kg_password_wrong_pin_code" msgid="5629415765976820357">"{count,plural, =1{Ikhodi engalungile Yephinikhodi ye-SIM, unomzamo ongu-# osele ngaphambi kokuba uxhumane nenkampani yakho yenethiwekhi ukuvula idivayisi yakho.}one{Ikhodi engalungile Yephinikhodi ye-SIM, unemizamo engu-# esele. }other{Ikhodi engalungile Yephinikhodi ye-SIM, unemizamo engu-# esele. }}"</string>
     <string name="kg_password_wrong_puk_code_dead" msgid="3698285357028468617">"I-SIM ayisebenziseki. Xhumana nemkampini yenethiwekhi yakho."</string>
-    <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="3937306685604862886">
-      <item quantity="one">Ikhodi ye-PUK ye-SIM engalungile, unemizamo engu-<xliff:g id="NUMBER_1">%d</xliff:g> esele ngaphambi kokuthi i-SIM ingasasebenziseki unaphakade.</item>
-      <item quantity="other">Ikhodi ye-PUK ye-SIM engalungile, unemizamo engu-<xliff:g id="NUMBER_1">%d</xliff:g> esele ngaphambi kokuthi i-SIM ingasasebenziseki unaphakade.</item>
-    </plurals>
+    <string name="kg_password_wrong_puk_code" msgid="6820515467645087827">"{count,plural, =1{Ikhodi ye-PUK ye-SIM engalungile, unemizamo engu-# esele ngaphambi kokuba i-SIM ibe engasasebenziseki unomphela.}one{Ikhodi ye-PUK ye-SIM engalungile, unemizamo engu-# esele ngaphambi kokuthi i-SIM ibe engasasebenziseki unomphela.}other{Ikhodi ye-PUK ye-SIM engalungile, unemizamo engu-# esele ngaphambi kokuthi i-SIM ibe engasasebenziseki unomphela.}}"</string>
     <string name="kg_password_pin_failed" msgid="5136259126330604009">"Umsebenzi wephinikhodi ye-SIM wehlulekile!"</string>
     <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>
@@ -91,14 +85,8 @@
     <string name="kg_prompt_reason_user_request" msgid="6015774877733717904">"Idivayisi ikhiywe ngokwenza"</string>
     <string name="kg_face_not_recognized" msgid="7903950626744419160">"Akwaziwa"</string>
     <string name="kg_face_sensor_privacy_enabled" msgid="939511161763558512">"Ukuze usebenzise Ukuvula Ngobuso, vula ukufinyelela kwekhamera Kumasethingi"</string>
-    <plurals name="kg_password_default_pin_message" formatted="false" msgid="7730152526369857818">
-      <item quantity="one">Faka i-PIN ye-SIM, unemizamo engu-<xliff:g id="NUMBER_1">%d</xliff:g> esele.</item>
-      <item quantity="other">Faka i-PIN ye-SIM, unemizamo engu-<xliff:g id="NUMBER_1">%d</xliff:g> esele.</item>
-    </plurals>
-    <plurals name="kg_password_default_puk_message" formatted="false" msgid="571308542462946935">
-      <item quantity="one">I-SIM manje ikhutshaziwe. Faka ikhodi ye-PUK ukuze uqhubeke. Unemizamo engu-<xliff:g id="_NUMBER_1">%d</xliff:g> esele ngaphambi kokuthi i-SIM ingasebenziseki unaphakade. Xhumana nenkampani yenethiwekhi ngemininingwane.</item>
-      <item quantity="other">I-SIM manje ikhutshaziwe. Faka ikhodi ye-PUK ukuze uqhubeke. Unemizamo engu-<xliff:g id="_NUMBER_1">%d</xliff:g> esele ngaphambi kokuthi i-SIM ingasebenziseki unaphakade. Xhumana nenkampani yenethiwekhi ngemininingwane.</item>
-    </plurals>
+    <string name="kg_password_default_pin_message" msgid="1434544655827987873">"{count,plural, =1{Faka Iphinikhodi ye-SIM. Unemizamo engu-# esele ngaphambi kokuthi uxhumane nenkampani yakho yenethiwekhi ukuze uvule idivayisi yakho.}one{Faka Iphinikhodi ye-SIM Unemizamo engu-# esele.}other{Faka Iphinikhodi ye-SIM Unemizamo engu-# esele.}}"</string>
+    <string name="kg_password_default_puk_message" msgid="1025139786449741950">"{count,plural, =1{I-SIM manje ikhutshaziwe. Faka ikhodi ye-PUK ukuze uqhubeke. Unomzamo ongu-# osele ngaphambi kokuthi i-SIM ingasasebenziseki unomphela. Xhumana nenkampani yenethiwekhi ngemininingwane.}one{I-SIM manje ikhutshaziwe. Faka ikhodi ye-PUK ukuze uqhubeke. Unemizamo engu-# esele ngaphambi kokuthi i-SIM ingasasebenziseki unomphela. Xhumana nenkampani yenethiwekhi ngemininingwane.}other{I-SIM manje ikhutshaziwe. Faka ikhodi ye-PUK ukuze uqhubeke. Unemizamo engu-# esele ngaphambi kokuthi i-SIM ingasasebenziseki unomphela. Xhumana nenkampani yenethiwekhi ngemininingwane.}}"</string>
     <string name="clock_title_default" msgid="6342735240617459864">"Okuzenzekelayo"</string>
     <string name="clock_title_bubble" msgid="2204559396790593213">"Ibhamuza"</string>
     <string name="clock_title_analog" msgid="8409262532900918273">"I-Analog"</string>
diff --git a/packages/SystemUI/res-keyguard/values/attrs.xml b/packages/SystemUI/res-keyguard/values/attrs.xml
index 25be37a..f2a1e26 100644
--- a/packages/SystemUI/res-keyguard/values/attrs.xml
+++ b/packages/SystemUI/res-keyguard/values/attrs.xml
@@ -41,10 +41,4 @@
     <attr name="passwordStyle" format="reference" />
 
     <attr name="numPadKeyStyle" format="reference" />
-
-    <declare-styleable name="AnimatableClockView">
-        <attr name="dozeWeight" format="integer" />
-        <attr name="lockScreenWeight" format="integer" />
-        <attr name="chargeAnimationDelay" format="integer" />
-    </declare-styleable>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values/dimens.xml b/packages/SystemUI/res-keyguard/values/dimens.xml
index 77f1803..acf3e4d 100644
--- a/packages/SystemUI/res-keyguard/values/dimens.xml
+++ b/packages/SystemUI/res-keyguard/values/dimens.xml
@@ -102,12 +102,13 @@
          screen. -->
     <item name="half_opened_bouncer_height_ratio" type="dimen" format="float">0.0</item>
 
-    <!-- The actual amount of translation that is applied to the bouncer when it animates from one
-         side of the screen to the other in one-handed mode. Note that it will always translate from
-         the side of the screen to the other (it will "jump" closer to the destination while the
-         opacity is zero), but this controls how much motion will actually be applied to it while
-         animating. Larger values will cause it to move "faster" while fading out/in. -->
-    <dimen name="one_handed_bouncer_move_animation_translation">120dp</dimen>
+    <!-- The actual amount of translation that is applied to the security when it animates from one
+         side of the screen to the other in one-handed or user switcher mode. Note that it will
+         always translate from the side of the screen to the other (it will "jump" closer to the
+         destination while the opacity is zero), but this controls how much motion will actually be
+         applied to it while animating. Larger values will cause it to move "faster" while
+         fading out/in. -->
+    <dimen name="security_shift_animation_translation">120dp</dimen>
 
 
     <dimen name="bouncer_user_switcher_header_text_size">20sp</dimen>
diff --git a/packages/SystemUI/res-keyguard/values/donottranslate.xml b/packages/SystemUI/res-keyguard/values/donottranslate.xml
index e677797..f9872f8 100644
--- a/packages/SystemUI/res-keyguard/values/donottranslate.xml
+++ b/packages/SystemUI/res-keyguard/values/donottranslate.xml
@@ -23,11 +23,5 @@
     <!-- Skeleton string format for displaying the date shorter. -->
     <string name="abbrev_month_day_no_year">MMMd</string>
 
-    <!-- Skeleton string format for displaying the time in 12-hour format. -->
-    <string name="clock_12hr_format">hm</string>
-
-    <!-- Skeleton string format for displaying the time in 24-hour format. -->
-    <string name="clock_24hr_format">Hm</string>
-
     <string name="num_pad_key_ratio">1</string>
 </resources>
diff --git a/packages/SystemUI/res-keyguard/values/strings.xml b/packages/SystemUI/res-keyguard/values/strings.xml
index 1be2d99..babe924 100644
--- a/packages/SystemUI/res-keyguard/values/strings.xml
+++ b/packages/SystemUI/res-keyguard/values/strings.xml
@@ -164,21 +164,21 @@
          Displayed in a dialog box.  -->
     <string name="kg_password_wrong_pin_code_pukked">Incorrect SIM PIN code you must now contact your carrier to unlock your device.</string>
     <!-- Instructions telling the user that they entered the wrong SIM PIN while trying
-         to unlock the keyguard.  Displayed in a dialog box.  -->
-    <plurals name="kg_password_wrong_pin_code">
-        <item quantity="one">Incorrect SIM PIN code, you have <xliff:g id="number">%d</xliff:g> remaining attempt before you must contact your carrier to unlock your device.</item>
-        <item quantity="other">Incorrect SIM PIN code, you have <xliff:g id="number">%d</xliff:g> remaining attempts.</item>
-    </plurals>
+         to unlock the keyguard.  Displayed in a dialog box.  [CHAR LIMIT=NONE] -->
+    <string name="kg_password_wrong_pin_code"> {count, plural,
+        =1 {Incorrect SIM PIN code, you have # remaining attempt before you must contact your carrier to unlock your device.}
+        other {Incorrect SIM PIN code, you have # remaining attempts. }
+    }</string>
 
     <!-- Instructions telling the user that they have exhausted SIM PUK retries and the SIM is now unusable.
          Displayed in a dialog box.  -->
     <string name="kg_password_wrong_puk_code_dead">SIM is unusable. Contact your carrier.</string>
     <!-- Instructions telling the user that they entered the wrong puk while trying
-         to unlock the keyguard.  Displayed in a dialog box.  -->
-    <plurals name="kg_password_wrong_puk_code">
-        <item quantity="one">Incorrect SIM PUK code, you have <xliff:g id="number">%d</xliff:g> remaining attempt before SIM becomes permanently unusable.</item>
-        <item quantity="other">Incorrect SIM PUK code, you have <xliff:g id="number">%d</xliff:g> remaining attempts before SIM becomes permanently unusable.</item>
-    </plurals>
+         to unlock the keyguard.  Displayed in a dialog box.  [CHAR LIMIT=NONE] -->
+    <string name="kg_password_wrong_puk_code">{count, plural,
+        =1 {Incorrect SIM PUK code, you have # remaining attempt before SIM becomes permanently unusable.}
+        other {Incorrect SIM PUK code, you have # remaining attempts before SIM becomes permanently unusable.}
+    }</string>
     <!-- Instructions telling the user that the operation to unlock the keyguard
          with SIM PIN failed. Displayed in one line in a large font.  -->
     <string name="kg_password_pin_failed">SIM PIN operation failed!</string>
@@ -223,21 +223,17 @@
      <!-- Error message indicating that the camera privacy sensor has been turned on [CHAR LIMIT=53] -->
     <string name="kg_face_sensor_privacy_enabled">To use Face Unlock, turn on camera access in Settings</string>
 
-    <!-- Instructions telling the user remaining times when enter SIM PIN view.  -->
-    <plurals name="kg_password_default_pin_message">
-        <item quantity="one">Enter SIM PIN. You have <xliff:g id="number">%d</xliff:g> remaining
-attempt before you must contact your carrier to unlock your device.</item>
-        <item quantity="other">Enter SIM PIN. You have <xliff:g id="number">%d</xliff:g> remaining
-attempts.</item>
-    </plurals>
+    <!-- Instructions telling the user remaining times when enter SIM PIN view.  [CHAR LIMIT=NONE] -->
+    <string name="kg_password_default_pin_message">{count, plural,
+        =1 {Enter SIM PIN. You have # remaining attempt before you must contact your carrier to unlock your device.}
+        other {Enter SIM PIN. You have # remaining attempts.}
+    }</string>
 
-    <!-- Instructions telling the user remaining times when enter SIM PUK view.  -->
-    <plurals name="kg_password_default_puk_message">
-        <item quantity="one">SIM is now disabled. Enter PUK code to continue. You have <xliff:g id="
-number">%d</xliff:g> remaining attempt before SIM becomes permanently unusable. Contact carrier for details.</item>
-        <item quantity="other">SIM is now disabled. Enter PUK code to continue. You have <xliff:g id="
-number">%d</xliff:g> remaining attempts before SIM becomes permanently unusable. Contact carrier for details.</item>
-    </plurals>
+    <!-- Instructions telling the user remaining times when enter SIM PUK view. [CHAR LIMIT=NONE] -->
+    <string name="kg_password_default_puk_message">{count, plural,
+        =1 {SIM is now disabled. Enter PUK code to continue. You have # remaining attempt before SIM becomes permanently unusable. Contact carrier for details.}
+        other {SIM is now disabled. Enter PUK code to continue. You have # remaining attempts before SIM becomes permanently unusable. Contact carrier for details.}
+    }</string>
 
     <!-- Name of the "Default" clock face, which is the clock face that will be shown by default. [CHAR LIMIT=15]-->
     <string name="clock_title_default">Default</string>
diff --git a/packages/SystemUI/res/drawable/broadcast_dialog_btn_bg.xml b/packages/SystemUI/res/drawable/broadcast_dialog_btn_bg.xml
new file mode 100644
index 0000000..5fd7ee29
--- /dev/null
+++ b/packages/SystemUI/res/drawable/broadcast_dialog_btn_bg.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2022 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+       xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
+       android:shape="rectangle">
+    <solid android:color="?androidprv:attr/colorAccentPrimary" />
+    <corners android:radius="@dimen/broadcast_dialog_btn_radius" />
+</shape>
diff --git a/packages/SystemUI/res/drawable/dream_aqi_badge_bg.xml b/packages/SystemUI/res/drawable/dream_aqi_badge_bg.xml
new file mode 100644
index 0000000..1992c77
--- /dev/null
+++ b/packages/SystemUI/res/drawable/dream_aqi_badge_bg.xml
@@ -0,0 +1,20 @@
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@color/dream_overlay_aqi_unknown" />
+    <corners android:radius="@dimen/dream_aqi_badge_corner_radius" />
+</shape>
\ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/dream_overlay_camera_off.xml b/packages/SystemUI/res/drawable/dream_overlay_camera_off.xml
new file mode 100644
index 0000000..159655e
--- /dev/null
+++ b/packages/SystemUI/res/drawable/dream_overlay_camera_off.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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="56dp"
+    android:height="24dp"
+    android:viewportWidth="56"
+    android:viewportHeight="24">
+  <path
+      android:pathData="M12,0L44,0A12,12 0,0 1,56 12L56,12A12,12 0,0 1,44 24L12,24A12,12 0,0 1,0 12L0,12A12,12 0,0 1,12 0z"
+      android:fillColor="#5F6368"/>
+  <path
+      android:pathData="M21.872,5.873L20.926,6.813L21.492,7.38C21.392,7.566 21.332,7.773 21.332,8V16C21.332,16.733 21.932,17.333 22.666,17.333H30.666C30.892,17.333 31.099,17.273 31.286,17.173L33.186,19.073L34.126,18.133L31.999,16L21.872,5.873ZM31.999,10.986V8C31.999,7.266 31.399,6.666 30.666,6.666H24.552L25.886,8H30.666V12.78L31.999,14.113V13.013L34.666,15.666V8.333L31.999,10.986ZM22.666,8.553V16H30.112L22.666,8.553Z"
+      android:fillColor="#ffffff"
+      android:fillType="evenOdd"/>
+</vector>
diff --git a/packages/SystemUI/res/drawable/dream_overlay_mic_and_camera_off.xml b/packages/SystemUI/res/drawable/dream_overlay_mic_and_camera_off.xml
new file mode 100644
index 0000000..087dde7
--- /dev/null
+++ b/packages/SystemUI/res/drawable/dream_overlay_mic_and_camera_off.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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="56dp"
+    android:height="24dp"
+    android:viewportWidth="56"
+    android:viewportHeight="24">
+  <path
+      android:pathData="M12,0L44,0A12,12 0,0 1,56 12L56,12A12,12 0,0 1,44 24L12,24A12,12 0,0 1,0 12L0,12A12,12 0,0 1,12 0z"
+      android:fillColor="#5F6368"/>
+  <path
+      android:pathData="M15.332,7.333C15.332,6.966 15.632,6.666 15.999,6.666C16.366,6.666 16.666,6.966 16.666,7.333V10.78L17.879,11.993C17.952,11.786 17.999,11.566 17.999,11.333V7.333C17.999,6.226 17.106,5.333 15.999,5.333C14.892,5.333 13.999,6.226 13.999,7.333V8.113L15.332,9.446V7.333ZM9.872,5.873L8.926,6.813L16.692,14.58C16.472,14.633 16.239,14.666 15.999,14.666C14.159,14.666 12.666,13.173 12.666,11.333H11.332C11.332,13.686 13.072,15.62 15.332,15.946V18H16.666V15.946C17.046,15.893 17.412,15.786 17.759,15.64L21.186,19.066L22.126,18.126L9.872,5.873ZM19.332,11.333H20.666C20.666,12.313 20.359,13.213 19.846,13.96L18.872,12.986C19.159,12.5 19.332,11.94 19.332,11.333Z"
+      android:fillColor="#ffffff"
+      android:fillType="evenOdd"/>
+  <path
+      android:pathData="M33.872,5.873L32.926,6.813L33.492,7.38C33.392,7.566 33.332,7.773 33.332,8V16C33.332,16.733 33.932,17.333 34.666,17.333H42.666C42.892,17.333 43.099,17.273 43.286,17.173L45.186,19.073L46.126,18.133L43.999,16L33.872,5.873ZM43.999,10.986V8C43.999,7.266 43.399,6.666 42.666,6.666H36.552L37.886,8H42.666V12.78L43.999,14.113V13.013L46.666,15.666V8.333L43.999,10.986ZM34.666,8.553V16H42.112L34.666,8.553Z"
+      android:fillColor="#ffffff"
+      android:fillType="evenOdd"/>
+</vector>
diff --git a/packages/SystemUI/res/drawable/dream_overlay_mic_off.xml b/packages/SystemUI/res/drawable/dream_overlay_mic_off.xml
new file mode 100644
index 0000000..693250d
--- /dev/null
+++ b/packages/SystemUI/res/drawable/dream_overlay_mic_off.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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="56dp"
+    android:height="24dp"
+    android:viewportWidth="56"
+    android:viewportHeight="24">
+  <path
+      android:pathData="M12,0L44,0A12,12 0,0 1,56 12L56,12A12,12 0,0 1,44 24L12,24A12,12 0,0 1,0 12L0,12A12,12 0,0 1,12 0z"
+      android:fillColor="#5F6368"/>
+  <path
+      android:pathData="M27.807,7.133C27.807,6.767 28.107,6.467 28.473,6.467C28.84,6.467 29.14,6.767 29.14,7.133V10.58L30.353,11.793C30.427,11.587 30.473,11.367 30.473,11.133V7.133C30.473,6.027 29.58,5.133 28.473,5.133C27.367,5.133 26.473,6.027 26.473,7.133V7.913L27.807,9.247V7.133ZM22.347,5.673L21.4,6.613L29.167,14.38C28.947,14.433 28.713,14.467 28.473,14.467C26.633,14.467 25.14,12.973 25.14,11.133H23.807C23.807,13.487 25.547,15.42 27.807,15.747V17.8H29.14V15.747C29.52,15.693 29.887,15.587 30.233,15.44L33.66,18.867L34.6,17.927L22.347,5.673ZM31.807,11.133H33.14C33.14,12.113 32.833,13.013 32.32,13.76L31.347,12.787C31.633,12.3 31.807,11.74 31.807,11.133Z"
+      android:fillColor="#ffffff"
+      android:fillType="evenOdd"/>
+</vector>
diff --git a/packages/SystemUI/res/drawable/ic_media_pause_container.xml b/packages/SystemUI/res/drawable/ic_media_pause_container.xml
index b92e635..ea9eb8c 100644
--- a/packages/SystemUI/res/drawable/ic_media_pause_container.xml
+++ b/packages/SystemUI/res/drawable/ic_media_pause_container.xml
@@ -22,11 +22,6 @@
                 android:viewportHeight="48"

                 android:viewportWidth="48">

             <group android:name="_R_G">

-                <group android:name="_R_G_L_1_G"

-                       android:translateX="24"

-                       android:translateY="24"

-                       android:scaleX="0.5"

-                       android:scaleY="0.5"/>

                 <group android:name="_R_G_L_0_G"

                        android:translateX="24"

                        android:translateY="24"

@@ -46,7 +41,7 @@
         <aapt:attr name="android:animation">

             <set android:ordering="together">

                 <objectAnimator android:propertyName="pathData"

-                                android:duration="500"

+                                android:duration="250"

                                 android:startOffset="0"

                                 android:valueFrom="M48 -16 C48,-16 48,16 48,16 C48,33.67 33.67,48 16,48 C16,48 -16,48 -16,48 C-33.67,48 -48,33.67 -48,16 C-48,16 -48,-16 -48,-16 C-48,-33.67 -33.67,-48 -16,-48 C-16,-48 16,-48 16,-48 C33.67,-48 48,-33.67 48,-16c "

                                 android:valueTo="M48 0.25 C48,0.25 48,0 48,0 C47.75,26 31.25,48 0,48 C0,48 0,48 0,48 C-30,48 -48,25.75 -48,-0.25 C-48,-0.25 -48,-0.25 -48,-0.25 C-47.75,-23.5 -32.25,-47.75 0.5,-48 C0.5,-48 0.5,-48 0.5,-48 C28,-47.75 47.75,-29.75 48,0.25c "

@@ -62,7 +57,7 @@
         <aapt:attr name="android:animation">

             <set android:ordering="together">

                 <objectAnimator android:propertyName="translateX"

-                                android:duration="517"

+                                android:duration="267"

                                 android:startOffset="0"

                                 android:valueFrom="0"

                                 android:valueTo="1"

@@ -70,4 +65,4 @@
             </set>

         </aapt:attr>

     </target>

-</animated-vector>
\ No newline at end of file
+</animated-vector>

diff --git a/packages/SystemUI/res/drawable/ic_media_play_container.xml b/packages/SystemUI/res/drawable/ic_media_play_container.xml
index 2fc9fc8..4cb011a 100644
--- a/packages/SystemUI/res/drawable/ic_media_play_container.xml
+++ b/packages/SystemUI/res/drawable/ic_media_play_container.xml
@@ -41,7 +41,7 @@
         <aapt:attr name="android:animation">

             <set android:ordering="together">

                 <objectAnimator android:propertyName="pathData"

-                                android:duration="500"

+                                android:duration="250"

                                 android:startOffset="0"

                                 android:valueFrom="M48 0.25 C48,0.25 48,0 48,0 C47.75,26 31.25,48 0,48 C0,48 0,48 0,48 C-30,48 -48,25.75 -48,-0.25 C-48,-0.25 -48,-0.25 -48,-0.25 C-47.75,-23.5 -32.25,-47.75 0.5,-48 C0.5,-48 0.5,-48 0.5,-48 C28,-47.75 47.75,-29.75 48,0.25c "

                                 android:valueTo="M48 -16 C48,-16 48,16 48,16 C48,33.67 33.67,48 16,48 C16,48 -16,48 -16,48 C-33.67,48 -48,33.67 -48,16 C-48,16 -48,-16 -48,-16 C-48,-33.67 -33.67,-48 -16,-48 C-16,-48 16,-48 16,-48 C33.67,-48 48,-33.67 48,-16c "

@@ -57,7 +57,7 @@
         <aapt:attr name="android:animation">

             <set android:ordering="together">

                 <objectAnimator android:propertyName="translateX"

-                                android:duration="517"

+                                android:duration="267"

                                 android:startOffset="0"

                                 android:valueFrom="0"

                                 android:valueTo="1"

@@ -65,4 +65,4 @@
             </set>

         </aapt:attr>

     </target>

-</animated-vector>
\ No newline at end of file
+</animated-vector>

diff --git a/packages/SystemUI/res/drawable/ic_qs_screen_saver.xml b/packages/SystemUI/res/drawable/ic_qs_screen_saver.xml
new file mode 100644
index 0000000..263a3d1
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_qs_screen_saver.xml
@@ -0,0 +1,24 @@
+<!--
+    Copyright (C) 2022 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT 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="24dp"
+        android:height="24dp"
+        android:viewportWidth="24"
+        android:viewportHeight="24"
+        android:tint="?android:attr/colorControlNormal">
+    <path android:fillColor="@android:color/white"
+          android:pathData="M5,15H19L14.5,9L11,13.5L8.5,10.5ZM6,21Q5.575,21 5.287,20.712Q5,20.425 5,20V19H3Q2.175,19 1.588,18.413Q1,17.825 1,17V6Q1,5.175 1.588,4.588Q2.175,4 3,4H21Q21.825,4 22.413,4.588Q23,5.175 23,6V17Q23,17.825 22.413,18.413Q21.825,19 21,19H19V20Q19,20.425 18.712,20.712Q18.425,21 18,21ZM3,17H21Q21,17 21,17Q21,17 21,17V6Q21,6 21,6Q21,6 21,6H3Q3,6 3,6Q3,6 3,6V17Q3,17 3,17Q3,17 3,17ZM3,17Q3,17 3,17Q3,17 3,17V6Q3,6 3,6Q3,6 3,6Q3,6 3,6Q3,6 3,6V17Q3,17 3,17Q3,17 3,17Z"/>
+</vector>
\ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/ic_qs_screen_saver_undocked.xml b/packages/SystemUI/res/drawable/ic_qs_screen_saver_undocked.xml
new file mode 100644
index 0000000..1d1b4f5
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_qs_screen_saver_undocked.xml
@@ -0,0 +1,30 @@
+<!--
+    Copyright (C) 2022 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24"
+    android:tint="?android:attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M14.5,9l-3.5,4.51l-2.5,-3.01l-3.5,4.5l14,0z"
+        />
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M21,4H3C1.9,4 1,4.9 1,6V17C1,18.1 1.9,19 3,19H5H19H21C22.1,19 23,18.1 23,17V6C23,4.9 22.1,4 21,4ZM21,17H3V6H21V17Z"
+        />
+</vector>
diff --git a/packages/SystemUI/res/drawable/qs_airplane_icon_off.xml b/packages/SystemUI/res/drawable/qs_airplane_icon_off.xml
new file mode 100644
index 0000000..f239a8d
--- /dev/null
+++ b/packages/SystemUI/res/drawable/qs_airplane_icon_off.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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">
+    <target android:name="time_group">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="183"
+                    android:propertyName="translateX"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="1"
+                    android:valueType="floatType" />
+            </set>
+        </aapt:attr>
+    </target>
+    <aapt:attr name="android:drawable">
+        <vector
+            android:width="24dp"
+            android:height="24dp"
+            android:viewportHeight="24"
+            android:viewportWidth="24">
+            <group android:name="_R_G">
+                <group
+                    android:name="_R_G_L_0_G"
+                    android:translateX="12"
+                    android:translateY="12">
+                    <path
+                        android:name="_R_G_L_0_G_D_0_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M-1.5 -3.02 C-1.5,-3.02 -1.5,-8.5 -1.5,-8.5 C-1.5,-9.33 -0.83,-10 0,-10 C0.83,-10 1.5,-9.33 1.5,-8.5 C1.5,-8.5 1.5,-3 1.5,-3 C1.5,-3 10,2 10,2 C10,2 10,4 10,4 C10,4 1.51,1.49 1.51,1.49 C1.51,1.49 -1.5,-3.02 -1.5,-3.02c  M1.5 1.5 C1.5,1.5 -1.5,-3 -1.5,-3 C-1.5,-3 -10,2 -10,2 C-10,2 -10,4 -10,4 C-10,4 -1.5,1.5 -1.5,1.5 C-1.5,1.5 -1.5,7 -1.5,7 C-1.5,7 -4,8.5 -4,8.5 C-4,8.5 -4,10 -4,10 C-4,10 0,9 0,9 C0,9 4,10 4,10 C4,10 4,8.5 4,8.5 C4,8.5 1.5,7 1.5,7 C1.5,7 1.5,1.5 1.5,1.5c " />
+                </group>
+            </group>
+            <group android:name="time_group" />
+        </vector>
+    </aapt:attr>
+</animated-vector>
diff --git a/packages/SystemUI/res/drawable/qs_airplane_icon_on.xml b/packages/SystemUI/res/drawable/qs_airplane_icon_on.xml
new file mode 100644
index 0000000..d46fafa
--- /dev/null
+++ b/packages/SystemUI/res/drawable/qs_airplane_icon_on.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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">
+    <target android:name="_R_G_L_1_G">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="667"
+                    android:pathData="M 12.125,34.75C 12.104,30.958 12.021,15.792 12,12"
+                    android:propertyName="translateXY"
+                    android:propertyXName="translateX"
+                    android:propertyYName="translateY"
+                    android:startOffset="0">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.3,0 0.1,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="517"
+                    android:pathData="M 12,12C 12.021,8.312 12.104,-6.436999999999999 12.125,-10.125"
+                    android:propertyName="translateXY"
+                    android:propertyXName="translateX"
+                    android:propertyYName="translateY"
+                    android:startOffset="0">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.3,0 0.1,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:duration="683"
+                    android:propertyName="translateX"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="1"
+                    android:valueType="floatType" />
+            </set>
+        </aapt:attr>
+    </target>
+    <aapt:attr name="android:drawable">
+        <vector
+            android:width="24dp"
+            android:height="24dp"
+            android:viewportHeight="24"
+            android:viewportWidth="24">
+            <group android:name="_R_G">
+                <group
+                    android:name="_R_G_L_1_G"
+                    android:translateX="12.125"
+                    android:translateY="34.75">
+                    <path
+                        android:name="_R_G_L_1_G_D_0_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M10 4 C10,4 10,2 10,2 C10,2 1.5,-3 1.5,-3 C1.5,-3 1.5,-8.5 1.5,-8.5 C1.5,-9.33 0.83,-10 0,-10 C-0.83,-10 -1.5,-9.33 -1.5,-8.5 C-1.5,-8.5 -1.5,-3 -1.5,-3 C-1.5,-3 -10,2 -10,2 C-10,2 -10,4 -10,4 C-10,4 -1.5,1.5 -1.5,1.5 C-1.5,1.5 -1.5,7 -1.5,7 C-1.5,7 -4,8.5 -4,8.5 C-4,8.5 -4,10 -4,10 C-4,10 0,9 0,9 C0,9 4,10 4,10 C4,10 4,8.5 4,8.5 C4,8.5 1.5,7 1.5,7 C1.5,7 1.5,1.5 1.5,1.5 C1.5,1.5 10,4 10,4c " />
+                </group>
+                <group
+                    android:name="_R_G_L_0_G"
+                    android:translateX="12"
+                    android:translateY="12">
+                    <path
+                        android:name="_R_G_L_0_G_D_0_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M-1.5 -3.02 C-1.5,-3.02 -1.5,-8.5 -1.5,-8.5 C-1.5,-9.33 -0.83,-10 0,-10 C0.83,-10 1.5,-9.33 1.5,-8.5 C1.5,-8.5 1.5,-3 1.5,-3 C1.5,-3 10,2 10,2 C10,2 10,4 10,4 C10,4 1.51,1.49 1.51,1.49 C1.51,1.49 -1.5,-3.02 -1.5,-3.02c  M1.5 1.5 C1.5,1.5 -1.5,-3 -1.5,-3 C-1.5,-3 -10,2 -10,2 C-10,2 -10,4 -10,4 C-10,4 -1.5,1.5 -1.5,1.5 C-1.5,1.5 -1.5,7 -1.5,7 C-1.5,7 -4,8.5 -4,8.5 C-4,8.5 -4,10 -4,10 C-4,10 0,9 0,9 C0,9 4,10 4,10 C4,10 4,8.5 4,8.5 C4,8.5 1.5,7 1.5,7 C1.5,7 1.5,1.5 1.5,1.5c " />
+                </group>
+            </group>
+            <group android:name="time_group" />
+        </vector>
+    </aapt:attr>
+</animated-vector>
diff --git a/packages/SystemUI/res/drawable/qs_battery_saver_icon_off.xml b/packages/SystemUI/res/drawable/qs_battery_saver_icon_off.xml
new file mode 100644
index 0000000..7b9f23d
--- /dev/null
+++ b/packages/SystemUI/res/drawable/qs_battery_saver_icon_off.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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">
+    <target android:name="time_group">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="183"
+                    android:propertyName="translateX"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="1"
+                    android:valueType="floatType" />
+            </set>
+        </aapt:attr>
+    </target>
+    <aapt:attr name="android:drawable">
+        <vector
+            android:width="24dp"
+            android:height="24dp"
+            android:viewportHeight="24"
+            android:viewportWidth="24">
+            <group android:name="_R_G">
+                <group
+                    android:name="_R_G_L_0_G"
+                    android:translateX="12"
+                    android:translateY="12">
+                    <path
+                        android:name="_R_G_L_0_G_D_0_P_0"
+                        android:pathData=" M3.67 -8 C3.67,-8 2,-8 2,-8 C2,-8 2,-10 2,-10 C2,-10 -2,-10 -2,-10 C-2,-10 -2,-8 -2,-8 C-2,-8 -3.67,-8 -3.67,-8 C-4.4,-8 -5,-7.4 -5,-6.67 C-5,-6.67 -5,8.66 -5,8.66 C-5,9.4 -4.4,10 -3.67,10 C-3.67,10 3.66,10 3.66,10 C4.4,10 5,9.4 5,8.67 C5,8.67 5,-6.67 5,-6.67 C5,-7.4 4.4,-8 3.67,-8c "
+                        android:strokeAlpha="1"
+                        android:strokeColor="#ffffff"
+                        android:strokeLineCap="round"
+                        android:strokeLineJoin="round"
+                        android:strokeWidth="2" />
+                    <path
+                        android:name="_R_G_L_0_G_D_1_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M2 -10 C2,-10 2,-7 2,-7 C2,-7 -2,-7 -2,-7 C-2,-7 -2,-10 -2,-10 C-2,-10 2,-10 2,-10c " />
+                    <path
+                        android:name="_R_G_L_0_G_D_2_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M3 2 C3,2 1,2 1,2 C1,2 1,4 1,4 C1,4 -1,4 -1,4 C-1,4 -1,2 -1,2 C-1,2 -3,2 -3,2 C-3,2 -3,0 -3,0 C-3,0 -1,0 -1,0 C-1,0 -1,-2 -1,-2 C-1,-2 1,-2 1,-2 C1,-2 1,0 1,0 C1,0 3,0 3,0 C3,0 3,2 3,2c " />
+                </group>
+            </group>
+            <group android:name="time_group" />
+        </vector>
+    </aapt:attr>
+</animated-vector>
diff --git a/packages/SystemUI/res/drawable/qs_battery_saver_icon_on.xml b/packages/SystemUI/res/drawable/qs_battery_saver_icon_on.xml
new file mode 100644
index 0000000..5e4af39
--- /dev/null
+++ b/packages/SystemUI/res/drawable/qs_battery_saver_icon_on.xml
@@ -0,0 +1,636 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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">
+    <target android:name="_R_G_L_4_G_D_0_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="317"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="0"
+                    android:valueFrom="1"
+                    android:valueTo="1"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="83"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="317"
+                    android:valueFrom="1"
+                    android:valueTo="0"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_4_G_T_1">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="417"
+                    android:pathData="M 0,0.875C 0,-0.9690000000000001 0,-8.344000000000001 0,-10.188"
+                    android:propertyName="translateXY"
+                    android:propertyXName="translateX"
+                    android:propertyYName="translateY"
+                    android:startOffset="0">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c1,0 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_4_G_T_1">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="417"
+                    android:propertyName="rotation"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="112"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c1,0 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_3_G_D_0_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="250"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="0"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="83"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="250"
+                    android:valueFrom="0"
+                    android:valueTo="1"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="217"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="333"
+                    android:valueFrom="1"
+                    android:valueTo="1"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="83"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="550"
+                    android:valueFrom="1"
+                    android:valueTo="0"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_3_G_T_1">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="83"
+                    android:pathData="M -0.875,9C -0.854,6.156000000000001 -0.896,11.844 -0.875,9"
+                    android:propertyName="translateXY"
+                    android:propertyXName="translateX"
+                    android:propertyYName="translateY"
+                    android:startOffset="0">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.6,0 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="550"
+                    android:pathData="M -0.875,9C -0.854,6.156000000000001 -0.771,-5.218 -0.75,-8.062"
+                    android:propertyName="translateXY"
+                    android:propertyXName="translateX"
+                    android:propertyYName="translateY"
+                    android:startOffset="83">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.6,0 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_3_G_T_1">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="83"
+                    android:propertyName="rotation"
+                    android:startOffset="0"
+                    android:valueFrom="67"
+                    android:valueTo="67"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.6,0 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="550"
+                    android:propertyName="rotation"
+                    android:startOffset="83"
+                    android:valueFrom="67"
+                    android:valueTo="192"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.6,0 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_2_G_D_0_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="417"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="0"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="83"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="417"
+                    android:valueFrom="0"
+                    android:valueTo="1"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="267"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="500"
+                    android:valueFrom="1"
+                    android:valueTo="1"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="83"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="767"
+                    android:valueFrom="1"
+                    android:valueTo="0"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_2_G_T_1">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="250"
+                    android:pathData="M 2.125,9.375C 2.146,6.468999999999999 2.104,12.281 2.125,9.375"
+                    android:propertyName="translateXY"
+                    android:propertyXName="translateX"
+                    android:propertyYName="translateY"
+                    android:startOffset="0">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.6,0 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="600"
+                    android:pathData="M 2.125,9.375C 2.146,6.468999999999999 2.229,-5.155999999999999 2.25,-8.062"
+                    android:propertyName="translateXY"
+                    android:propertyXName="translateX"
+                    android:propertyYName="translateY"
+                    android:startOffset="250">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.6,0 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_2_G_T_1">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="250"
+                    android:propertyName="rotation"
+                    android:startOffset="0"
+                    android:valueFrom="28"
+                    android:valueTo="28"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.6,0 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="600"
+                    android:propertyName="rotation"
+                    android:startOffset="250"
+                    android:valueFrom="28"
+                    android:valueTo="153"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.6,0 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_1_G_D_0_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="533"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="0"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="83"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="533"
+                    android:valueFrom="0"
+                    android:valueTo="1"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="250"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="617"
+                    android:valueFrom="1"
+                    android:valueTo="1"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="83"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="867"
+                    android:valueFrom="1"
+                    android:valueTo="0"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_1_G_T_1">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="350"
+                    android:pathData="M -2,10C -2,6.99 -2,13.01 -2,10"
+                    android:propertyName="translateXY"
+                    android:propertyXName="translateX"
+                    android:propertyYName="translateY"
+                    android:startOffset="0">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.6,0 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="600"
+                    android:pathData="M -2,10C -2,6.99 -2,-5.052 -2,-8.062"
+                    android:propertyName="translateXY"
+                    android:propertyXName="translateX"
+                    android:propertyYName="translateY"
+                    android:startOffset="350">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.6,0 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_1_G_T_1">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="350"
+                    android:propertyName="rotation"
+                    android:startOffset="0"
+                    android:valueFrom="28"
+                    android:valueTo="28"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.6,0 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="600"
+                    android:propertyName="rotation"
+                    android:startOffset="350"
+                    android:valueFrom="28"
+                    android:valueTo="153"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.6,0 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_D_0_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="883"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="0"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="83"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="883"
+                    android:valueFrom="0"
+                    android:valueTo="1"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_T_1">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="667"
+                    android:pathData="M 0,11.5C 0,9.729 0,13.271 0,11.5"
+                    android:propertyName="translateXY"
+                    android:propertyXName="translateX"
+                    android:propertyYName="translateY"
+                    android:startOffset="0">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.6,0 0,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="667"
+                    android:pathData="M 0,11.5C 0,9.729 0,2.646 0,0.875"
+                    android:propertyName="translateXY"
+                    android:propertyXName="translateX"
+                    android:propertyYName="translateY"
+                    android:startOffset="667">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.6,0 0,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_T_1">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="667"
+                    android:propertyName="rotation"
+                    android:startOffset="0"
+                    android:valueFrom="-48"
+                    android:valueTo="-48"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.6,0 0,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="667"
+                    android:propertyName="rotation"
+                    android:startOffset="667"
+                    android:valueFrom="-48"
+                    android:valueTo="0"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.6,0 0,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:duration="1350"
+                    android:propertyName="translateX"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="1"
+                    android:valueType="floatType" />
+            </set>
+        </aapt:attr>
+    </target>
+    <aapt:attr name="android:drawable">
+        <vector
+            android:width="24dp"
+            android:height="24dp"
+            android:viewportHeight="24"
+            android:viewportWidth="24">
+            <group android:name="_R_G">
+                <group
+                    android:name="_R_G_L_5_G"
+                    android:translateX="12"
+                    android:translateY="12">
+                    <path
+                        android:name="_R_G_L_5_G_D_0_P_0"
+                        android:pathData=" M3.67 -8 C3.67,-8 2,-8 2,-8 C2,-8 2,-10 2,-10 C2,-10 -2,-10 -2,-10 C-2,-10 -2,-8 -2,-8 C-2,-8 -3.67,-8 -3.67,-8 C-4.4,-8 -5,-7.4 -5,-6.67 C-5,-6.67 -5,8.66 -5,8.66 C-5,9.4 -4.4,10 -3.67,10 C-3.67,10 3.66,10 3.66,10 C4.4,10 5,9.4 5,8.67 C5,8.67 5,-6.67 5,-6.67 C5,-7.4 4.4,-8 3.67,-8c "
+                        android:strokeAlpha="1"
+                        android:strokeColor="#ffffff"
+                        android:strokeLineCap="round"
+                        android:strokeLineJoin="round"
+                        android:strokeWidth="2" />
+                    <path
+                        android:name="_R_G_L_5_G_D_1_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M2 -10 C2,-10 2,-7 2,-7 C2,-7 -2,-7 -2,-7 C-2,-7 -2,-10 -2,-10 C-2,-10 2,-10 2,-10c " />
+                </group>
+                <group
+                    android:name="_R_G_L_4_G_N_6_T_0"
+                    android:translateX="12"
+                    android:translateY="12">
+                    <group
+                        android:name="_R_G_L_4_G_T_1"
+                        android:rotation="0"
+                        android:translateX="0"
+                        android:translateY="0.875">
+                        <group
+                            android:name="_R_G_L_4_G"
+                            android:translateY="-0.875">
+                            <path
+                                android:name="_R_G_L_4_G_D_0_P_0"
+                                android:fillAlpha="1"
+                                android:fillColor="#ffffff"
+                                android:fillType="nonZero"
+                                android:pathData=" M3 2 C3,2 1,2 1,2 C1,2 1,4 1,4 C1,4 -1,4 -1,4 C-1,4 -1,2 -1,2 C-1,2 -3,2 -3,2 C-3,2 -3,0 -3,0 C-3,0 -1,0 -1,0 C-1,0 -1,-2 -1,-2 C-1,-2 1,-2 1,-2 C1,-2 1,0 1,0 C1,0 3,0 3,0 C3,0 3,2 3,2c " />
+                        </group>
+                    </group>
+                </group>
+                <group
+                    android:name="_R_G_L_3_G_N_6_T_0"
+                    android:translateX="12"
+                    android:translateY="12">
+                    <group
+                        android:name="_R_G_L_3_G_T_1"
+                        android:rotation="67"
+                        android:scaleX="0.7"
+                        android:scaleY="0.7"
+                        android:translateX="-0.875"
+                        android:translateY="9">
+                        <group
+                            android:name="_R_G_L_3_G"
+                            android:translateY="-0.875">
+                            <path
+                                android:name="_R_G_L_3_G_D_0_P_0"
+                                android:fillAlpha="0"
+                                android:fillColor="#ffffff"
+                                android:fillType="nonZero"
+                                android:pathData=" M3 2 C3,2 1,2 1,2 C1,2 1,4 1,4 C1,4 -1,4 -1,4 C-1,4 -1,2 -1,2 C-1,2 -3,2 -3,2 C-3,2 -3,0 -3,0 C-3,0 -1,0 -1,0 C-1,0 -1,-2 -1,-2 C-1,-2 1,-2 1,-2 C1,-2 1,0 1,0 C1,0 3,0 3,0 C3,0 3,2 3,2c " />
+                        </group>
+                    </group>
+                </group>
+                <group
+                    android:name="_R_G_L_2_G_N_6_T_0"
+                    android:translateX="12"
+                    android:translateY="12">
+                    <group
+                        android:name="_R_G_L_2_G_T_1"
+                        android:rotation="28"
+                        android:scaleX="0.85"
+                        android:scaleY="0.85"
+                        android:translateX="2.125"
+                        android:translateY="9.375">
+                        <group
+                            android:name="_R_G_L_2_G"
+                            android:translateY="-0.875">
+                            <path
+                                android:name="_R_G_L_2_G_D_0_P_0"
+                                android:fillAlpha="0"
+                                android:fillColor="#ffffff"
+                                android:fillType="nonZero"
+                                android:pathData=" M3 2 C3,2 1,2 1,2 C1,2 1,4 1,4 C1,4 -1,4 -1,4 C-1,4 -1,2 -1,2 C-1,2 -3,2 -3,2 C-3,2 -3,0 -3,0 C-3,0 -1,0 -1,0 C-1,0 -1,-2 -1,-2 C-1,-2 1,-2 1,-2 C1,-2 1,0 1,0 C1,0 3,0 3,0 C3,0 3,2 3,2c " />
+                        </group>
+                    </group>
+                </group>
+                <group
+                    android:name="_R_G_L_1_G_N_6_T_0"
+                    android:translateX="12"
+                    android:translateY="12">
+                    <group
+                        android:name="_R_G_L_1_G_T_1"
+                        android:rotation="28"
+                        android:scaleX="0.55"
+                        android:scaleY="0.55"
+                        android:translateX="-2"
+                        android:translateY="10">
+                        <group
+                            android:name="_R_G_L_1_G"
+                            android:translateY="-0.875">
+                            <path
+                                android:name="_R_G_L_1_G_D_0_P_0"
+                                android:fillAlpha="0"
+                                android:fillColor="#ffffff"
+                                android:fillType="nonZero"
+                                android:pathData=" M3 2 C3,2 1,2 1,2 C1,2 1,4 1,4 C1,4 -1,4 -1,4 C-1,4 -1,2 -1,2 C-1,2 -3,2 -3,2 C-3,2 -3,0 -3,0 C-3,0 -1,0 -1,0 C-1,0 -1,-2 -1,-2 C-1,-2 1,-2 1,-2 C1,-2 1,0 1,0 C1,0 3,0 3,0 C3,0 3,2 3,2c " />
+                        </group>
+                    </group>
+                </group>
+                <group
+                    android:name="_R_G_L_0_G_N_6_T_0"
+                    android:translateX="12"
+                    android:translateY="12">
+                    <group
+                        android:name="_R_G_L_0_G_T_1"
+                        android:rotation="-48"
+                        android:translateX="0"
+                        android:translateY="11.5">
+                        <group
+                            android:name="_R_G_L_0_G"
+                            android:translateY="-0.875">
+                            <path
+                                android:name="_R_G_L_0_G_D_0_P_0"
+                                android:fillAlpha="0"
+                                android:fillColor="#ffffff"
+                                android:fillType="nonZero"
+                                android:pathData=" M3 2 C3,2 1,2 1,2 C1,2 1,4 1,4 C1,4 -1,4 -1,4 C-1,4 -1,2 -1,2 C-1,2 -3,2 -3,2 C-3,2 -3,0 -3,0 C-3,0 -1,0 -1,0 C-1,0 -1,-2 -1,-2 C-1,-2 1,-2 1,-2 C1,-2 1,0 1,0 C1,0 3,0 3,0 C3,0 3,2 3,2c " />
+                        </group>
+                    </group>
+                </group>
+            </group>
+            <group android:name="time_group" />
+        </vector>
+    </aapt:attr>
+</animated-vector>
diff --git a/packages/SystemUI/res/drawable/qs_camera_access_icon_off.xml b/packages/SystemUI/res/drawable/qs_camera_access_icon_off.xml
new file mode 100644
index 0000000..8f9ecbe
--- /dev/null
+++ b/packages/SystemUI/res/drawable/qs_camera_access_icon_off.xml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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">
+    <target android:name="_R_G_L_0_G_D_0_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="167"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M5 1.3 C5,1.3 8.35,4.63 8.35,4.63 C8.35,4.63 8.35,-4.58 8.35,-4.58 C8.35,-4.58 5,-1.25 5,-1.25 C5,-1.25 5,-5 5,-5 C5,-5.92 4.25,-6.67 3.33,-6.67 C3.33,-6.67 -6.84,-6.68 -6.84,-6.68 C-6.54,-6.37 -6.07,-5.56 -5.49,-5 C-5.49,-5 3.33,-5 3.33,-5 C3.33,-5 3.33,-1.91 3.33,-1.91 C3.33,-1.91 3.32,3.73 3.32,3.73 C3.32,3.73 5,5.23 5,5.23 C5,5.23 5,2.14 5,2.14 C5,2.14 5,1.3 5,1.3c M3.34 5 C3.34,5 -6.67,5 -6.67,5 C-6.67,5 -6.67,-5.01 -6.67,-5.01 C-6.67,-5.01 -5.5,-5 -5.5,-5 C-5.98,-5.57 -6.46,-6.23 -6.83,-6.68 C-7.84,-6.64 -8.34,-5.77 -8.34,-5.01 C-8.34,-5.01 -8.34,5 -8.34,5 C-8.34,5.91 -7.58,6.66 -6.67,6.66 C-6.67,6.66 3.34,6.66 3.34,6.66 C4.13,6.66 4.88,6.1 5,5.23 C4.73,4.96 3.73,4.13 3.34,3.73 C3.34,3.73 3.34,5 3.34,5c "
+                    android:valueTo="M5 1.3 C5,1.3 8.35,4.63 8.35,4.63 C8.35,4.63 8.35,-4.58 8.35,-4.58 C8.35,-4.58 5,-1.25 5,-1.25 C5,-1.25 5,-5 5,-5 C5,-5.92 4.25,-6.67 3.33,-6.67 C3.33,-6.67 -4.28,-6.67 -4.28,-6.67 C-3.98,-6.36 -3.13,-5.56 -2.55,-4.99 C-2.55,-4.99 3.33,-5 3.33,-5 C3.33,-5 3.33,-1.91 3.33,-1.91 C3.33,-1.91 3.33,0.9 3.33,0.9 C3.33,0.9 5.01,2.59 5.01,2.59 C5.01,2.59 5,2.14 5,2.14 C5,2.14 5,1.3 5,1.3c M3.34 5 C3.34,5 -6.67,5 -6.67,5 C-6.67,5 -6.67,-5.01 -6.67,-5.01 C-6.67,-5.01 -5.5,-5 -5.5,-5 C-6.02,-5.5 -6.69,-6.17 -7.12,-6.61 C-7.82,-6.41 -8.34,-5.77 -8.34,-5.01 C-8.34,-5.01 -8.34,5 -8.34,5 C-8.34,5.91 -7.58,6.66 -6.67,6.66 C-6.67,6.66 3.34,6.66 3.34,6.66 C4.13,6.66 4.79,6.11 4.97,5.37 C4.7,5.1 3.73,4.13 3.34,3.73 C3.34,3.73 3.34,5 3.34,5c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.2,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_D_1_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="17"
+                    android:propertyName="fillAlpha"
+                    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.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_D_1_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="167"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M-10.96 -7.79 C-10.96,-7.79 -10.96,-7.79 -10.96,-7.79 C-10.96,-7.79 -9.56,-9.19 -9.56,-9.19 C-9.56,-9.19 -9.56,-9.19 -9.56,-9.19 C-9.56,-9.19 -10.96,-7.79 -10.96,-7.79c "
+                    android:valueTo="M7.44 10.61 C7.44,10.61 -10.96,-7.79 -10.96,-7.79 C-10.96,-7.79 -9.56,-9.19 -9.56,-9.19 C-9.56,-9.19 8.84,9.21 8.84,9.21 C8.84,9.21 7.44,10.61 7.44,10.61c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.2,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:duration="183"
+                    android:propertyName="translateX"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="1"
+                    android:valueType="floatType" />
+            </set>
+        </aapt:attr>
+    </target>
+    <aapt:attr name="android:drawable">
+        <vector
+            android:width="24dp"
+            android:height="24dp"
+            android:viewportHeight="24"
+            android:viewportWidth="24">
+            <group android:name="_R_G">
+                <group
+                    android:name="_R_G_L_0_G"
+                    android:translateX="12"
+                    android:translateY="12">
+                    <path
+                        android:name="_R_G_L_0_G_D_0_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M5 1.3 C5,1.3 8.35,4.63 8.35,4.63 C8.35,4.63 8.35,-4.58 8.35,-4.58 C8.35,-4.58 5,-1.25 5,-1.25 C5,-1.25 5,-5 5,-5 C5,-5.92 4.25,-6.67 3.33,-6.67 C3.33,-6.67 -6.84,-6.68 -6.84,-6.68 C-6.54,-6.37 -6.07,-5.56 -5.49,-5 C-5.49,-5 3.33,-5 3.33,-5 C3.33,-5 3.33,-1.91 3.33,-1.91 C3.33,-1.91 3.32,3.73 3.32,3.73 C3.32,3.73 5,5.23 5,5.23 C5,5.23 5,2.14 5,2.14 C5,2.14 5,1.3 5,1.3c " />
+                    <path
+                        android:name="_R_G_L_0_G_D_1_P_0"
+                        android:fillAlpha="0"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M-10.96 -7.79 C-10.96,-7.79 -10.96,-7.79 -10.96,-7.79 C-10.96,-7.79 -9.56,-9.19 -9.56,-9.19 C-9.56,-9.19 -9.56,-9.19 -9.56,-9.19 C-9.56,-9.19 -10.96,-7.79 -10.96,-7.79c " />
+                </group>
+            </group>
+            <group android:name="time_group" />
+        </vector>
+    </aapt:attr>
+</animated-vector>
diff --git a/packages/SystemUI/res/drawable/qs_camera_access_icon_on.xml b/packages/SystemUI/res/drawable/qs_camera_access_icon_on.xml
new file mode 100644
index 0000000..beb8b72
--- /dev/null
+++ b/packages/SystemUI/res/drawable/qs_camera_access_icon_on.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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">
+    <target android:name="_R_G_L_0_G_D_0_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="167"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M7.44 10.61 C7.44,10.61 -10.96,-7.79 -10.96,-7.79 C-10.96,-7.79 -9.56,-9.19 -9.56,-9.19 C-9.56,-9.19 8.84,9.21 8.84,9.21 C8.84,9.21 7.44,10.61 7.44,10.61c "
+                    android:valueTo="M7.44 10.62 C7.44,10.62 7.45,10.62 7.45,10.62 C7.45,10.62 8.85,9.22 8.85,9.22 C8.85,9.22 8.84,9.22 8.84,9.22 C8.84,9.22 7.44,10.62 7.44,10.62c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.55,0 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_D_1_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="333"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M5 1.3 C5,1.3 8.35,4.63 8.35,4.63 C8.35,4.63 8.35,-4.58 8.35,-4.58 C8.35,-4.58 5,-1.25 5,-1.25 C5,-1.25 5,-5 5,-5 C5,-5.92 4.25,-6.67 3.33,-6.67 C3.33,-6.67 -4.28,-6.67 -4.28,-6.67 C-3.98,-6.36 -3.13,-5.56 -2.55,-4.99 C-2.55,-4.99 3.33,-5 3.33,-5 C3.33,-5 3.33,-1.91 3.33,-1.91 C3.33,-1.91 3.33,0.9 3.33,0.9 C3.33,0.9 5.01,2.59 5.01,2.59 C5.01,2.59 5,2.14 5,2.14 C5,2.14 5,1.3 5,1.3c M3.34 5 C3.34,5 -6.67,5 -6.67,5 C-6.67,5 -6.67,-5.01 -6.67,-5.01 C-6.67,-5.01 -5.5,-5 -5.5,-5 C-6.02,-5.5 -6.69,-6.17 -7.12,-6.61 C-7.82,-6.41 -8.34,-5.77 -8.34,-5.01 C-8.34,-5.01 -8.34,5 -8.34,5 C-8.34,5.91 -7.58,6.66 -6.67,6.66 C-6.67,6.66 3.34,6.66 3.34,6.66 C4.13,6.66 4.79,6.11 4.97,5.37 C4.7,5.1 3.73,4.13 3.34,3.73 C3.34,3.73 3.34,5 3.34,5c "
+                    android:valueTo="M5 1.3 C5,1.3 8.35,4.63 8.35,4.63 C8.35,4.63 8.35,-4.58 8.35,-4.58 C8.35,-4.58 5,-1.25 5,-1.25 C5,-1.25 5,-5 5,-5 C5,-5.92 4.25,-6.67 3.33,-6.67 C3.33,-6.67 -6.84,-6.68 -6.84,-6.68 C-6.54,-6.37 -6.07,-5.56 -5.49,-5 C-5.49,-5 3.33,-5 3.33,-5 C3.33,-5 3.33,-1.91 3.33,-1.91 C3.33,-1.91 3.32,3.73 3.32,3.73 C3.32,3.73 5,5.23 5,5.23 C5,5.23 5,2.14 5,2.14 C5,2.14 5,1.3 5,1.3c M3.34 5 C3.34,5 -6.67,5 -6.67,5 C-6.67,5 -6.67,-5.01 -6.67,-5.01 C-6.67,-5.01 -5.5,-5 -5.5,-5 C-5.98,-5.57 -6.46,-6.23 -6.83,-6.68 C-7.84,-6.64 -8.34,-5.77 -8.34,-5.01 C-8.34,-5.01 -8.34,5 -8.34,5 C-8.34,5.91 -7.58,6.66 -6.67,6.66 C-6.67,6.66 3.34,6.66 3.34,6.66 C4.13,6.66 4.88,6.1 5,5.23 C4.73,4.96 3.73,4.13 3.34,3.73 C3.34,3.73 3.34,5 3.34,5c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.1,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:duration="350"
+                    android:propertyName="translateX"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="1"
+                    android:valueType="floatType" />
+            </set>
+        </aapt:attr>
+    </target>
+    <aapt:attr name="android:drawable">
+        <vector
+            android:width="24dp"
+            android:height="24dp"
+            android:viewportHeight="24"
+            android:viewportWidth="24">
+            <group android:name="_R_G">
+                <group
+                    android:name="_R_G_L_0_G"
+                    android:translateX="12"
+                    android:translateY="12">
+                    <path
+                        android:name="_R_G_L_0_G_D_0_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M7.44 10.61 C7.44,10.61 -10.96,-7.79 -10.96,-7.79 C-10.96,-7.79 -9.56,-9.19 -9.56,-9.19 C-9.56,-9.19 8.84,9.21 8.84,9.21 C8.84,9.21 7.44,10.61 7.44,10.61c " />
+                    <path
+                        android:name="_R_G_L_0_G_D_1_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M5 1.3 C5,1.3 8.35,4.63 8.35,4.63 C8.35,4.63 8.35,-4.58 8.35,-4.58 C8.35,-4.58 5,-1.25 5,-1.25 C5,-1.25 5,-5 5,-5 C5,-5.92 4.25,-6.67 3.33,-6.67 C3.33,-6.67 -4.28,-6.67 -4.28,-6.67 C-3.98,-6.36 -3.13,-5.56 -2.55,-4.99 C-2.55,-4.99 3.33,-5 3.33,-5 C3.33,-5 3.33,-1.91 3.33,-1.91 C3.33,-1.91 3.33,0.9 3.33,0.9 C3.33,0.9 5.01,2.59 5.01,2.59 C5.01,2.59 5,2.14 5,2.14 C5,2.14 5,1.3 5,1.3c " />
+                </group>
+            </group>
+            <group android:name="time_group" />
+        </vector>
+    </aapt:attr>
+</animated-vector>
diff --git a/packages/SystemUI/res/drawable/qs_dnd_icon_off.xml b/packages/SystemUI/res/drawable/qs_dnd_icon_off.xml
new file mode 100644
index 0000000..e42381a
--- /dev/null
+++ b/packages/SystemUI/res/drawable/qs_dnd_icon_off.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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">
+    <target android:name="time_group">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="183"
+                    android:propertyName="translateX"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="1"
+                    android:valueType="floatType" />
+            </set>
+        </aapt:attr>
+    </target>
+    <aapt:attr name="android:drawable">
+        <vector
+            android:width="24dp"
+            android:height="24dp"
+            android:viewportHeight="24"
+            android:viewportWidth="24">
+            <group android:name="_R_G">
+                <group
+                    android:name="_R_G_L_0_G"
+                    android:rotation="-225"
+                    android:scaleX="0.85"
+                    android:scaleY="0.85"
+                    android:translateX="12"
+                    android:translateY="12">
+                    <path
+                        android:name="_R_G_L_0_G_D_0_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M-2.83 -4.24 C-2.83,-4.24 4.24,2.83 4.24,2.83 C4.24,2.83 2.83,4.24 2.83,4.24 C2.83,4.24 -4.24,-2.83 -4.24,-2.83 C-4.24,-2.83 -2.83,-4.24 -2.83,-4.24c  M7.07 7.09 C4.65,9.51 1.78,10.02 0,10.02 C-5.52,10.02 -10,5.54 -10,0.02 C-10,-1.76 -9.49,-4.52 -7.07,-7.07 C-7.07,-7.07 -5.66,-5.67 -5.66,-5.67 C-7.73,-3.44 -8,-1.2 -8,0.02 C-8,4.43 -4.41,8.02 0,8.02 C1.22,8.02 3.42,7.71 5.67,5.64 C5.67,5.64 7.07,7.09 7.07,7.09c  M-7.06 -7.1 C-4.62,-9.54 -1.81,-9.94 -0.03,-9.94 C5.49,-9.94 9.97,-5.46 9.97,0.06 C9.97,1.84 9.49,4.63 7.07,7.05 C7.07,7.05 5.66,5.64 5.66,5.64 C7.67,3.51 7.97,1.28 7.97,0.06 C7.97,-4.35 4.38,-7.94 -0.03,-7.94 C-1.25,-7.94 -3.43,-7.88 -5.65,-5.66 C-5.65,-5.66 -7.06,-7.1 -7.06,-7.1c " />
+                </group>
+            </group>
+            <group android:name="time_group" />
+        </vector>
+    </aapt:attr>
+</animated-vector>
diff --git a/packages/SystemUI/res/drawable/qs_dnd_icon_on.xml b/packages/SystemUI/res/drawable/qs_dnd_icon_on.xml
new file mode 100644
index 0000000..a63cb23
--- /dev/null
+++ b/packages/SystemUI/res/drawable/qs_dnd_icon_on.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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">
+    <target android:name="_R_G_L_0_G">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="500"
+                    android:propertyName="rotation"
+                    android:startOffset="0"
+                    android:valueFrom="-225"
+                    android:valueTo="-45"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,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:duration="517"
+                    android:propertyName="translateX"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="1"
+                    android:valueType="floatType" />
+            </set>
+        </aapt:attr>
+    </target>
+    <aapt:attr name="android:drawable">
+        <vector
+            android:width="24dp"
+            android:height="24dp"
+            android:viewportHeight="24"
+            android:viewportWidth="24">
+            <group android:name="_R_G">
+                <group
+                    android:name="_R_G_L_0_G"
+                    android:rotation="-225"
+                    android:scaleX="0.85"
+                    android:scaleY="0.85"
+                    android:translateX="12"
+                    android:translateY="12">
+                    <path
+                        android:name="_R_G_L_0_G_D_0_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M-2.83 -4.24 C-2.83,-4.24 4.24,2.83 4.24,2.83 C4.24,2.83 2.83,4.24 2.83,4.24 C2.83,4.24 -4.24,-2.83 -4.24,-2.83 C-4.24,-2.83 -2.83,-4.24 -2.83,-4.24c  M7.07 7.09 C4.65,9.51 1.78,10.02 0,10.02 C-5.52,10.02 -10,5.54 -10,0.02 C-10,-1.76 -9.49,-4.52 -7.07,-7.07 C-7.07,-7.07 -5.66,-5.67 -5.66,-5.67 C-7.73,-3.44 -8,-1.2 -8,0.02 C-8,4.43 -4.41,8.02 0,8.02 C1.22,8.02 3.42,7.71 5.67,5.64 C5.67,5.64 7.07,7.09 7.07,7.09c  M-7.06 -7.1 C-4.62,-9.54 -1.81,-9.94 -0.03,-9.94 C5.49,-9.94 9.97,-5.46 9.97,0.06 C9.97,1.84 9.49,4.63 7.07,7.05 C7.07,7.05 5.66,5.64 5.66,5.64 C7.67,3.51 7.97,1.28 7.97,0.06 C7.97,-4.35 4.38,-7.94 -0.03,-7.94 C-1.25,-7.94 -3.43,-7.88 -5.65,-5.66 C-5.65,-5.66 -7.06,-7.1 -7.06,-7.1c " />
+                </group>
+            </group>
+            <group android:name="time_group" />
+        </vector>
+    </aapt:attr>
+</animated-vector>
diff --git a/packages/SystemUI/res/drawable/qs_location_icon_off.xml b/packages/SystemUI/res/drawable/qs_location_icon_off.xml
new file mode 100644
index 0000000..97eb91c
--- /dev/null
+++ b/packages/SystemUI/res/drawable/qs_location_icon_off.xml
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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">
+    <target android:name="_R_G_L_0_G_D_1_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="175"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M3.98 4.01 C3.98,4.01 2.56,2.54 2.56,2.54 C3.34,1.49 4.41,0.01 4.68,-0.84 C4.9,-1.45 5,-2.2 5,-3 C5,-4.38 4.51,-5.56 3.54,-6.54 C2.56,-7.51 1.38,-8 0,-8 C-0.7,-8 -1.36,-7.89 -1.99,-7.61 C-2.61,-7.34 -4.01,-6.61 -4.61,-4.61 C-4.61,-4.61 -6.24,-6.22 -6.24,-6.22 C-5.27,-8.11 -3.65,-9.09 -2.79,-9.46 C-1.94,-9.84 -1,-10 0,-10 C1.93,-10 3.6,-9.32 4.97,-7.96 C6.33,-6.59 7,-4.93 7,-3 C7,-1.85 6.86,-0.99 6.49,0.02 C6.12,1.04 4.57,3.23 3.98,4.01c "
+                    android:valueTo="M4.62 3.11 C4.62,3.11 3.2,1.65 3.2,1.65 C3.77,0.85 4.43,-0.12 4.68,-0.84 C4.9,-1.45 5,-2.2 5,-3 C5,-4.38 4.51,-5.56 3.54,-6.54 C2.56,-7.51 1.38,-8 0,-8 C-0.7,-8 -1.36,-7.89 -1.99,-7.61 C-2.61,-7.34 -3.55,-6.78 -4.16,-5.65 C-4.16,-5.65 -5.67,-7.13 -5.67,-7.13 C-4.81,-8.35 -3.65,-9.09 -2.79,-9.46 C-1.94,-9.84 -1,-10 0,-10 C1.93,-10 3.6,-9.32 4.97,-7.96 C6.33,-6.59 7,-4.93 7,-3 C7,-1.85 6.85,-0.89 6.49,0.02 C6.13,0.94 5.16,2.35 4.62,3.11c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="75"
+                    android:propertyName="pathData"
+                    android:startOffset="175"
+                    android:valueFrom="M4.62 3.11 C4.62,3.11 3.2,1.65 3.2,1.65 C3.77,0.85 4.43,-0.12 4.68,-0.84 C4.9,-1.45 5,-2.2 5,-3 C5,-4.38 4.51,-5.56 3.54,-6.54 C2.56,-7.51 1.38,-8 0,-8 C-0.7,-8 -1.36,-7.89 -1.99,-7.61 C-2.61,-7.34 -3.55,-6.78 -4.16,-5.65 C-4.16,-5.65 -5.67,-7.13 -5.67,-7.13 C-4.81,-8.35 -3.65,-9.09 -2.79,-9.46 C-1.94,-9.84 -1,-10 0,-10 C1.93,-10 3.6,-9.32 4.97,-7.96 C6.33,-6.59 7,-4.93 7,-3 C7,-1.85 6.85,-0.89 6.49,0.02 C6.13,0.94 5.16,2.35 4.62,3.11c "
+                    android:valueTo="M5.18 2.33 C5.18,2.33 3.75,0.88 3.75,0.88 C4.13,0.29 4.45,-0.23 4.68,-0.84 C4.9,-1.45 5,-2.2 5,-3 C5,-4.38 4.51,-5.56 3.54,-6.54 C2.56,-7.51 1.38,-8 0,-8 C-0.7,-8 -1.36,-7.89 -1.99,-7.61 C-2.61,-7.34 -3.16,-6.94 -3.61,-6.46 C-3.61,-6.46 -5.07,-7.86 -5.07,-7.86 C-4.42,-8.54 -3.65,-9.09 -2.79,-9.46 C-1.94,-9.84 -1,-10 0,-10 C1.93,-10 3.6,-9.32 4.97,-7.96 C6.33,-6.59 7,-4.93 7,-3 C7,-1.85 6.84,-0.81 6.49,0.02 C6.14,0.86 5.68,1.58 5.18,2.33c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.1,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_D_1_P_1">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="125"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M-0.96 -0.67 C0.37,-0.16 1.79,-0.77 2.33,-2.05 C2.45,-2.34 2.5,-2.67 2.5,-3.02 C2.5,-3.72 2.24,-4.3 1.76,-4.78 C1.27,-5.27 0.7,-5.5 0,-5.5 C-0.33,-5.5 -0.65,-5.44 -0.95,-5.32 C-2.08,-4.88 -2.84,-3.58 -2.35,-2.11 C-2.16,-1.55 -1.58,-0.91 -0.96,-0.67c "
+                    android:valueTo="M-0.29 -0.52 C0.81,-0.39 1.86,-0.95 2.33,-2.05 C2.45,-2.34 2.5,-2.67 2.5,-3.02 C2.5,-3.72 2.24,-4.3 1.76,-4.78 C1.27,-5.27 0.7,-5.5 0,-5.5 C-0.33,-5.5 -0.65,-5.44 -0.95,-5.32 C-1.93,-4.94 -2.6,-3.89 -2.49,-2.82 C-2.18,-2.46 -0.67,-0.84 -0.29,-0.52c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="50"
+                    android:propertyName="pathData"
+                    android:startOffset="125"
+                    android:valueFrom="M-0.29 -0.52 C0.81,-0.39 1.86,-0.95 2.33,-2.05 C2.45,-2.34 2.5,-2.67 2.5,-3.02 C2.5,-3.72 2.24,-4.3 1.76,-4.78 C1.27,-5.27 0.7,-5.5 0,-5.5 C-0.33,-5.5 -0.65,-5.44 -0.95,-5.32 C-1.93,-4.94 -2.6,-3.89 -2.49,-2.82 C-2.18,-2.46 -0.67,-0.84 -0.29,-0.52c "
+                    android:valueTo="M0.87 -0.65 C1.56,-0.93 2.02,-1.3 2.33,-2.05 C2.45,-2.34 2.5,-2.67 2.5,-3.02 C2.5,-3.72 2.24,-4.3 1.76,-4.78 C1.27,-5.27 0.7,-5.5 0,-5.5 C-0.33,-5.5 -0.65,-5.44 -0.95,-5.32 C-1.63,-5.06 -2.14,-4.44 -2.33,-3.91 C-2.11,-3.68 0.66,-0.85 0.87,-0.65c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.667,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="75"
+                    android:propertyName="pathData"
+                    android:startOffset="175"
+                    android:valueFrom="M0.87 -0.65 C1.56,-0.93 2.02,-1.3 2.33,-2.05 C2.45,-2.34 2.5,-2.67 2.5,-3.02 C2.5,-3.72 2.24,-4.3 1.76,-4.78 C1.27,-5.27 0.7,-5.5 0,-5.5 C-0.33,-5.5 -0.65,-5.44 -0.95,-5.32 C-1.63,-5.06 -2.14,-4.44 -2.33,-3.91 C-2.11,-3.68 0.66,-0.85 0.87,-0.65c "
+                    android:valueTo="M1.8 -1.24 C2.03,-1.47 2.21,-1.76 2.33,-2.05 C2.44,-2.34 2.5,-2.67 2.5,-3.02 C2.5,-3.72 2.24,-4.3 1.76,-4.78 C1.27,-5.27 0.7,-5.5 0,-5.5 C-0.33,-5.5 -0.65,-5.44 -0.95,-5.32 C-1.25,-5.21 -1.57,-5.02 -1.77,-4.78 C-1.77,-4.78 1.8,-1.24 1.8,-1.24c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.333,0 0.1,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_D_2_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="125"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M-9.89 -7.81 C-9.89,-7.81 -9.9,-7.8 -9.9,-7.8 C-9.9,-7.8 -8.5,-9.2 -8.5,-9.2 C-8.5,-9.2 -8.49,-9.21 -8.49,-9.21 C-8.49,-9.21 -9.89,-7.81 -9.89,-7.81c "
+                    android:valueTo="M-9.89 -7.81 C-9.89,-7.81 -9.9,-7.8 -9.9,-7.8 C-9.9,-7.8 -8.5,-9.2 -8.5,-9.2 C-8.5,-9.2 -8.49,-9.21 -8.49,-9.21 C-8.49,-9.21 -9.89,-7.81 -9.89,-7.81c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.2,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="125"
+                    android:propertyName="pathData"
+                    android:startOffset="125"
+                    android:valueFrom="M-9.89 -7.81 C-9.89,-7.81 -9.9,-7.8 -9.9,-7.8 C-9.9,-7.8 -8.5,-9.2 -8.5,-9.2 C-8.5,-9.2 -8.49,-9.21 -8.49,-9.21 C-8.49,-9.21 -9.89,-7.81 -9.89,-7.81c "
+                    android:valueTo="M8.5 10.6 C8.5,10.6 -9.9,-7.8 -9.9,-7.8 C-9.9,-7.8 -8.5,-9.2 -8.5,-9.2 C-8.5,-9.2 9.9,9.2 9.9,9.2 C9.9,9.2 8.5,10.6 8.5,10.6c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.2,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:duration="267"
+                    android:propertyName="translateX"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="1"
+                    android:valueType="floatType" />
+            </set>
+        </aapt:attr>
+    </target>
+    <aapt:attr name="android:drawable">
+        <vector
+            android:width="24dp"
+            android:height="24dp"
+            android:viewportHeight="24"
+            android:viewportWidth="24">
+            <group android:name="_R_G">
+                <group
+                    android:name="_R_G_L_0_G"
+                    android:translateX="12"
+                    android:translateY="12">
+                    <path
+                        android:name="_R_G_L_0_G_D_0_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M-5.05 -2.1 C-5.05,-1.06 -4.64,-0.4 -4.23,0.3 C-3.81,1 -3.28,1.75 -2.65,2.55 C-2.22,3.1 -1.78,3.71 -1.35,4.39 C-0.92,5.06 -0.39,5.6 0.01,6.43 C0.21,5.95 0.61,5.27 0.98,4.72 C1.44,4.01 2.13,3.09 2.55,2.54 C2.94,2.95 3.54,3.56 3.98,4 C3.47,4.64 2.65,5.82 2.1,6.77 C1.66,7.55 1.28,8.44 0.98,9.26 C0.88,9.55 0.77,9.67 0.59,9.81 C0.44,9.93 0.28,9.99 0,9.99 C-0.28,9.99 -0.48,9.89 -0.68,9.66 C-0.88,9.44 -1.03,9.18 -1.15,8.9 C-1.45,8.07 -1.68,7.43 -2.17,6.65 C-2.67,5.88 -3.27,4.87 -4.15,3.79 C-4.88,2.75 -5.67,1.6 -6.21,0.62 C-6.74,-0.36 -7,-1.76 -7,-3.01 C-7,-4.08 -6.77,-5.28 -6.23,-6.23 C-5.75,-5.73 -4.92,-4.92 -4.61,-4.61 C-4.87,-3.95 -5.06,-2.93 -5.05,-2.1c " />
+                    <path
+                        android:name="_R_G_L_0_G_D_1_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M3.98 4.01 C3.98,4.01 2.56,2.54 2.56,2.54 C3.34,1.49 4.41,0.01 4.68,-0.84 C4.9,-1.45 5,-2.2 5,-3 C5,-4.38 4.51,-5.56 3.54,-6.54 C2.56,-7.51 1.38,-8 0,-8 C-0.7,-8 -1.36,-7.89 -1.99,-7.61 C-2.61,-7.34 -4.01,-6.61 -4.61,-4.61 C-4.61,-4.61 -6.24,-6.22 -6.24,-6.22 C-5.27,-8.11 -3.65,-9.09 -2.79,-9.46 C-1.94,-9.84 -1,-10 0,-10 C1.93,-10 3.6,-9.32 4.97,-7.96 C6.33,-6.59 7,-4.93 7,-3 C7,-1.85 6.86,-0.99 6.49,0.02 C6.12,1.04 4.57,3.23 3.98,4.01c " />
+                    <path
+                        android:name="_R_G_L_0_G_D_1_P_1"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M-0.96 -0.67 C0.37,-0.16 1.79,-0.77 2.33,-2.05 C2.45,-2.34 2.5,-2.67 2.5,-3.02 C2.5,-3.72 2.24,-4.3 1.76,-4.78 C1.27,-5.27 0.7,-5.5 0,-5.5 C-0.33,-5.5 -0.65,-5.44 -0.95,-5.32 C-2.08,-4.88 -2.84,-3.58 -2.35,-2.11 C-2.16,-1.55 -1.58,-0.91 -0.96,-0.67c " />
+                    <path
+                        android:name="_R_G_L_0_G_D_2_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#edf2eb"
+                        android:fillType="nonZero"
+                        android:pathData=" M-9.89 -7.81 C-9.89,-7.81 -9.9,-7.8 -9.9,-7.8 C-9.9,-7.8 -8.5,-9.2 -8.5,-9.2 C-8.5,-9.2 -8.49,-9.21 -8.49,-9.21 C-8.49,-9.21 -9.89,-7.81 -9.89,-7.81c " />
+                </group>
+            </group>
+            <group android:name="time_group" />
+        </vector>
+    </aapt:attr>
+</animated-vector>
diff --git a/packages/SystemUI/res/drawable/qs_location_icon_on.xml b/packages/SystemUI/res/drawable/qs_location_icon_on.xml
new file mode 100644
index 0000000..c56b650
--- /dev/null
+++ b/packages/SystemUI/res/drawable/qs_location_icon_on.xml
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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">
+    <target android:name="_R_G_L_0_G_D_1_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="100"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M5.18 2.33 C5.18,2.33 3.75,0.88 3.75,0.88 C4.13,0.29 4.45,-0.23 4.68,-0.84 C4.9,-1.45 5,-2.2 5,-3 C5,-4.38 4.51,-5.56 3.54,-6.54 C2.56,-7.51 1.38,-8 0,-8 C-0.7,-8 -1.36,-7.89 -1.99,-7.61 C-2.61,-7.34 -3.16,-6.94 -3.61,-6.46 C-3.61,-6.46 -5.07,-7.86 -5.07,-7.86 C-4.42,-8.54 -3.65,-9.09 -2.79,-9.46 C-1.94,-9.84 -1,-10 0,-10 C1.93,-10 3.6,-9.32 4.97,-7.96 C6.33,-6.59 7,-4.93 7,-3 C7,-1.85 6.84,-0.81 6.49,0.02 C6.14,0.86 5.68,1.58 5.18,2.33c "
+                    android:valueTo="M4.62 3.11 C4.62,3.11 3.2,1.65 3.2,1.65 C3.77,0.85 4.43,-0.12 4.68,-0.84 C4.9,-1.45 5,-2.2 5,-3 C5,-4.38 4.51,-5.56 3.54,-6.54 C2.56,-7.51 1.38,-8 0,-8 C-0.7,-8 -1.36,-7.89 -1.99,-7.61 C-2.61,-7.34 -3.55,-6.78 -4.16,-5.65 C-4.16,-5.65 -5.67,-7.13 -5.67,-7.13 C-4.81,-8.35 -3.65,-9.09 -2.79,-9.46 C-1.94,-9.84 -1,-10 0,-10 C1.93,-10 3.6,-9.32 4.97,-7.96 C6.33,-6.59 7,-4.93 7,-3 C7,-1.85 6.85,-0.89 6.49,0.02 C6.13,0.94 5.16,2.35 4.62,3.11c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="233"
+                    android:propertyName="pathData"
+                    android:startOffset="100"
+                    android:valueFrom="M4.62 3.11 C4.62,3.11 3.2,1.65 3.2,1.65 C3.77,0.85 4.43,-0.12 4.68,-0.84 C4.9,-1.45 5,-2.2 5,-3 C5,-4.38 4.51,-5.56 3.54,-6.54 C2.56,-7.51 1.38,-8 0,-8 C-0.7,-8 -1.36,-7.89 -1.99,-7.61 C-2.61,-7.34 -3.55,-6.78 -4.16,-5.65 C-4.16,-5.65 -5.67,-7.13 -5.67,-7.13 C-4.81,-8.35 -3.65,-9.09 -2.79,-9.46 C-1.94,-9.84 -1,-10 0,-10 C1.93,-10 3.6,-9.32 4.97,-7.96 C6.33,-6.59 7,-4.93 7,-3 C7,-1.85 6.85,-0.89 6.49,0.02 C6.13,0.94 5.16,2.35 4.62,3.11c "
+                    android:valueTo="M3.98 4.01 C3.98,4.01 2.56,2.54 2.56,2.54 C3.34,1.49 4.41,0.01 4.68,-0.84 C4.9,-1.45 5,-2.2 5,-3 C5,-4.38 4.51,-5.56 3.54,-6.54 C2.56,-7.51 1.38,-8 0,-8 C-0.7,-8 -1.36,-7.89 -1.99,-7.61 C-2.61,-7.34 -4.01,-6.61 -4.61,-4.61 C-4.61,-4.61 -6.24,-6.22 -6.24,-6.22 C-5.27,-8.11 -3.65,-9.09 -2.79,-9.46 C-1.94,-9.84 -1,-10 0,-10 C1.93,-10 3.6,-9.32 4.97,-7.96 C6.33,-6.59 7,-4.93 7,-3 C7,-1.85 6.86,-0.99 6.49,0.02 C6.12,1.04 4.57,3.23 3.98,4.01c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.1,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_D_1_P_1">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="100"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M1.8 -1.24 C2.03,-1.47 2.21,-1.76 2.33,-2.05 C2.44,-2.34 2.5,-2.67 2.5,-3.02 C2.5,-3.72 2.24,-4.3 1.76,-4.78 C1.27,-5.27 0.7,-5.5 0,-5.5 C-0.33,-5.5 -0.65,-5.44 -0.95,-5.32 C-1.25,-5.21 -1.57,-5.02 -1.77,-4.78 C-1.77,-4.78 1.8,-1.24 1.8,-1.24c "
+                    android:valueTo="M0.87 -0.65 C1.56,-0.93 2.02,-1.3 2.33,-2.05 C2.45,-2.34 2.5,-2.67 2.5,-3.02 C2.5,-3.72 2.24,-4.3 1.76,-4.78 C1.27,-5.27 0.7,-5.5 0,-5.5 C-0.33,-5.5 -0.65,-5.44 -0.95,-5.32 C-1.63,-5.06 -2.14,-4.44 -2.33,-3.91 C-2.11,-3.68 0.66,-0.85 0.87,-0.65c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="67"
+                    android:propertyName="pathData"
+                    android:startOffset="100"
+                    android:valueFrom="M0.87 -0.65 C1.56,-0.93 2.02,-1.3 2.33,-2.05 C2.45,-2.34 2.5,-2.67 2.5,-3.02 C2.5,-3.72 2.24,-4.3 1.76,-4.78 C1.27,-5.27 0.7,-5.5 0,-5.5 C-0.33,-5.5 -0.65,-5.44 -0.95,-5.32 C-1.63,-5.06 -2.14,-4.44 -2.33,-3.91 C-2.11,-3.68 0.66,-0.85 0.87,-0.65c "
+                    android:valueTo="M-0.29 -0.52 C0.81,-0.39 1.86,-0.95 2.33,-2.05 C2.45,-2.34 2.5,-2.67 2.5,-3.02 C2.5,-3.72 2.24,-4.3 1.76,-4.78 C1.27,-5.27 0.7,-5.5 0,-5.5 C-0.33,-5.5 -0.65,-5.44 -0.95,-5.32 C-1.93,-4.94 -2.6,-3.89 -2.49,-2.82 C-2.18,-2.46 -0.67,-0.84 -0.29,-0.52c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="167"
+                    android:propertyName="pathData"
+                    android:startOffset="167"
+                    android:valueFrom="M-0.29 -0.52 C0.81,-0.39 1.86,-0.95 2.33,-2.05 C2.45,-2.34 2.5,-2.67 2.5,-3.02 C2.5,-3.72 2.24,-4.3 1.76,-4.78 C1.27,-5.27 0.7,-5.5 0,-5.5 C-0.33,-5.5 -0.65,-5.44 -0.95,-5.32 C-1.93,-4.94 -2.6,-3.89 -2.49,-2.82 C-2.18,-2.46 -0.67,-0.84 -0.29,-0.52c "
+                    android:valueTo="M-0.96 -0.67 C0.37,-0.16 1.79,-0.77 2.33,-2.05 C2.45,-2.34 2.5,-2.67 2.5,-3.02 C2.5,-3.72 2.24,-4.3 1.76,-4.78 C1.27,-5.27 0.7,-5.5 0,-5.5 C-0.33,-5.5 -0.65,-5.44 -0.95,-5.32 C-2.08,-4.88 -2.84,-3.58 -2.35,-2.11 C-2.16,-1.55 -1.58,-0.91 -0.96,-0.67c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.1,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_D_2_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="167"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M8.5 10.6 C8.5,10.6 -9.9,-7.8 -9.9,-7.8 C-9.9,-7.8 -8.5,-9.2 -8.5,-9.2 C-8.5,-9.2 9.9,9.2 9.9,9.2 C9.9,9.2 8.5,10.6 8.5,10.6c "
+                    android:valueTo="M8.5 10.6 C8.5,10.6 8.51,10.6 8.51,10.6 C8.51,10.6 9.91,9.2 9.91,9.2 C9.91,9.2 9.9,9.2 9.9,9.2 C9.9,9.2 8.5,10.6 8.5,10.6c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.5,0 0.833,0.833 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:duration="350"
+                    android:propertyName="translateX"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="1"
+                    android:valueType="floatType" />
+            </set>
+        </aapt:attr>
+    </target>
+    <aapt:attr name="android:drawable">
+        <vector
+            android:width="24dp"
+            android:height="24dp"
+            android:viewportHeight="24"
+            android:viewportWidth="24">
+            <group android:name="_R_G">
+                <group
+                    android:name="_R_G_L_0_G"
+                    android:translateX="12"
+                    android:translateY="12">
+                    <path
+                        android:name="_R_G_L_0_G_D_0_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M-5.05 -2.1 C-5.05,-1.06 -4.64,-0.4 -4.23,0.3 C-3.81,1 -3.28,1.75 -2.65,2.55 C-2.22,3.1 -1.78,3.71 -1.35,4.39 C-0.92,5.06 -0.39,5.6 0.01,6.43 C0.21,5.95 0.61,5.27 0.98,4.72 C1.44,4.01 2.13,3.09 2.55,2.54 C2.94,2.95 3.54,3.56 3.98,4 C3.47,4.64 2.65,5.82 2.1,6.77 C1.66,7.55 1.28,8.44 0.98,9.26 C0.88,9.55 0.77,9.67 0.59,9.81 C0.44,9.93 0.28,9.99 0,9.99 C-0.28,9.99 -0.48,9.89 -0.68,9.66 C-0.88,9.44 -1.03,9.18 -1.15,8.9 C-1.45,8.07 -1.68,7.43 -2.17,6.65 C-2.67,5.88 -3.27,4.87 -4.15,3.79 C-4.88,2.75 -5.67,1.6 -6.21,0.62 C-6.74,-0.36 -7,-1.76 -7,-3.01 C-7,-4.08 -6.77,-5.28 -6.23,-6.23 C-5.75,-5.73 -4.92,-4.92 -4.61,-4.61 C-4.87,-3.95 -5.06,-2.93 -5.05,-2.1c " />
+                    <path
+                        android:name="_R_G_L_0_G_D_1_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M5.18 2.33 C5.18,2.33 3.75,0.88 3.75,0.88 C4.13,0.29 4.45,-0.23 4.68,-0.84 C4.9,-1.45 5,-2.2 5,-3 C5,-4.38 4.51,-5.56 3.54,-6.54 C2.56,-7.51 1.38,-8 0,-8 C-0.7,-8 -1.36,-7.89 -1.99,-7.61 C-2.61,-7.34 -3.16,-6.94 -3.61,-6.46 C-3.61,-6.46 -5.07,-7.86 -5.07,-7.86 C-4.42,-8.54 -3.65,-9.09 -2.79,-9.46 C-1.94,-9.84 -1,-10 0,-10 C1.93,-10 3.6,-9.32 4.97,-7.96 C6.33,-6.59 7,-4.93 7,-3 C7,-1.85 6.84,-0.81 6.49,0.02 C6.14,0.86 5.68,1.58 5.18,2.33c " />
+                    <path
+                        android:name="_R_G_L_0_G_D_1_P_1"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M1.8 -1.24 C2.03,-1.47 2.21,-1.76 2.33,-2.05 C2.44,-2.34 2.5,-2.67 2.5,-3.02 C2.5,-3.72 2.24,-4.3 1.76,-4.78 C1.27,-5.27 0.7,-5.5 0,-5.5 C-0.33,-5.5 -0.65,-5.44 -0.95,-5.32 C-1.25,-5.21 -1.57,-5.02 -1.77,-4.78 C-1.77,-4.78 1.8,-1.24 1.8,-1.24c " />
+                    <path
+                        android:name="_R_G_L_0_G_D_2_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#edf2eb"
+                        android:fillType="nonZero"
+                        android:pathData=" M8.5 10.6 C8.5,10.6 -9.9,-7.8 -9.9,-7.8 C-9.9,-7.8 -8.5,-9.2 -8.5,-9.2 C-8.5,-9.2 9.9,9.2 9.9,9.2 C9.9,9.2 8.5,10.6 8.5,10.6c " />
+                </group>
+            </group>
+            <group android:name="time_group" />
+        </vector>
+    </aapt:attr>
+</animated-vector>
diff --git a/packages/SystemUI/res/drawable/qs_mic_access_off.xml b/packages/SystemUI/res/drawable/qs_mic_access_off.xml
new file mode 100644
index 0000000..63a9444
--- /dev/null
+++ b/packages/SystemUI/res/drawable/qs_mic_access_off.xml
@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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">
+    <target android:name="_R_G_L_0_G_D_0_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="167"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M5.05 4.43 C3.98,5.25 3.08,5.53 2.53,5.73 C2.26,5.81 1.98,5.87 1.7,5.9 C1.7,5.9 1.7,9 1.7,9 C1.7,9 -0.3,9 -0.3,9 C-0.3,9 -0.3,5.9 -0.3,5.9 C-2.02,5.65 -3.44,4.88 -4.59,3.59 C-5.73,2.3 -6.3,0.77 -6.3,-1 C-6.3,-1 -4.3,-1 -4.3,-1 C-4.3,0.38 -3.81,1.56 -2.84,2.54 C-1.86,3.51 -0.68,4 0.7,4 C0.88,4 1.06,3.99 1.23,3.96 C1.39,3.94 2.58,3.77 3.61,2.99 C3.61,2.99 5.05,4.43 5.05,4.43c "
+                    android:valueTo="M5.02 4.5 C3.59,5.47 2.79,5.64 2.53,5.73 C2.26,5.81 1.98,5.87 1.7,5.9 C1.7,5.9 1.7,9 1.7,9 C1.7,9 -0.3,9 -0.3,9 C-0.3,9 -0.3,5.9 -0.3,5.9 C-2.02,5.65 -3.44,4.88 -4.59,3.59 C-5.73,2.3 -6.3,0.77 -6.3,-1 C-6.3,-1 -4.3,-1 -4.3,-1 C-4.3,0.38 -3.81,1.56 -2.84,2.54 C-1.86,3.51 -0.68,4 0.7,4 C0.88,4 1.06,3.99 1.23,3.96 C1.39,3.94 2.53,3.83 3.58,3.07 C3.58,3.07 5.02,4.5 5.02,4.5c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.2,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_D_1_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="44"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M2.31 1.86 C2.31,1.86 1.01,0.55 0.75,0.31 C1.7,0.27 1.7,-0.7 1.7,-0.7 C1.7,-0.7 1.7,-7 1.7,-7 C1.7,-7.28 1.61,-7.52 1.41,-7.71 C1.22,-7.9 0.98,-8 0.7,-8 C0.42,-8 0.18,-7.9 -0.01,-7.71 C-0.2,-7.52 -0.3,-7.28 -0.3,-7 C-0.3,-7 -0.29,-0.66 -0.29,-0.66 C-0.29,-0.66 -2.31,-2.67 -2.31,-2.67 C-2.31,-2.67 -2.3,-7 -2.3,-7 C-2.3,-7.83 -2.01,-8.54 -1.42,-9.12 C-0.84,-9.71 -0.13,-10 0.7,-10 C1.53,-10 2.24,-9.71 2.83,-9.12 C3.41,-8.54 3.7,-7.83 3.7,-7 C3.7,-7 3.7,-1 3.7,-1 C3.7,-0.82 3.7,-0.33 3.64,-0.03 C3.51,0.52 3.23,1.19 2.31,1.86c "
+                    android:valueTo="M2.86 1.48 C2.86,1.48 1.58,0.21 1.39,0.03 C1.77,-0.26 1.7,-1.03 1.7,-1.03 C1.7,-1.03 1.7,-7 1.7,-7 C1.7,-7.28 1.61,-7.52 1.41,-7.71 C1.22,-7.9 0.98,-8 0.7,-8 C0.42,-8 0.18,-7.9 -0.01,-7.71 C-0.2,-7.52 -0.3,-7.28 -0.3,-7 C-0.3,-7 -0.29,-1.51 -0.29,-1.51 C-0.29,-1.51 -2.31,-3.5 -2.31,-3.5 C-2.31,-3.5 -2.3,-7 -2.3,-7 C-2.3,-7.83 -2.01,-8.54 -1.42,-9.12 C-0.84,-9.71 -0.13,-10 0.7,-10 C1.53,-10 2.24,-9.71 2.83,-9.12 C3.41,-8.54 3.7,-7.83 3.7,-7 C3.7,-7 3.7,-1 3.7,-1 C3.7,-0.82 3.68,-0.44 3.65,-0.17 C3.61,0.19 3.36,1.05 2.86,1.48c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="39"
+                    android:propertyName="pathData"
+                    android:startOffset="44"
+                    android:valueFrom="M2.86 1.48 C2.86,1.48 1.58,0.21 1.39,0.03 C1.77,-0.26 1.7,-1.03 1.7,-1.03 C1.7,-1.03 1.7,-7 1.7,-7 C1.7,-7.28 1.61,-7.52 1.41,-7.71 C1.22,-7.9 0.98,-8 0.7,-8 C0.42,-8 0.18,-7.9 -0.01,-7.71 C-0.2,-7.52 -0.3,-7.28 -0.3,-7 C-0.3,-7 -0.29,-1.51 -0.29,-1.51 C-0.29,-1.51 -2.31,-3.5 -2.31,-3.5 C-2.31,-3.5 -2.3,-7 -2.3,-7 C-2.3,-7.83 -2.01,-8.54 -1.42,-9.12 C-0.84,-9.71 -0.13,-10 0.7,-10 C1.53,-10 2.24,-9.71 2.83,-9.12 C3.41,-8.54 3.7,-7.83 3.7,-7 C3.7,-7 3.7,-1 3.7,-1 C3.7,-0.82 3.68,-0.44 3.65,-0.17 C3.61,0.19 3.36,1.05 2.86,1.48c "
+                    android:valueTo="M3.12 0.99 C3.12,0.99 1.83,-0.26 1.71,-0.38 C1.72,-0.81 1.7,-1.31 1.7,-1.31 C1.7,-1.31 1.7,-7 1.7,-7 C1.7,-7.28 1.61,-7.52 1.41,-7.71 C1.22,-7.9 0.98,-8 0.7,-8 C0.42,-8 0.18,-7.9 -0.01,-7.71 C-0.2,-7.52 -0.3,-7.28 -0.3,-7 C-0.3,-7 -0.29,-2.26 -0.29,-2.26 C-0.29,-2.26 -2.31,-4.23 -2.31,-4.23 C-2.31,-4.23 -2.3,-7 -2.3,-7 C-2.3,-7.83 -2.01,-8.54 -1.42,-9.12 C-0.84,-9.71 -0.13,-10 0.7,-10 C1.53,-10 2.24,-9.71 2.83,-9.12 C3.41,-8.54 3.7,-7.83 3.7,-7 C3.7,-7 3.7,-1 3.7,-1 C3.7,-0.82 3.67,-0.54 3.66,-0.3 C3.63,0.12 3.38,0.7 3.12,0.99c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="83"
+                    android:propertyName="pathData"
+                    android:startOffset="83"
+                    android:valueFrom="M3.12 0.99 C3.12,0.99 1.83,-0.26 1.71,-0.38 C1.72,-0.81 1.7,-1.31 1.7,-1.31 C1.7,-1.31 1.7,-7 1.7,-7 C1.7,-7.28 1.61,-7.52 1.41,-7.71 C1.22,-7.9 0.98,-8 0.7,-8 C0.42,-8 0.18,-7.9 -0.01,-7.71 C-0.2,-7.52 -0.3,-7.28 -0.3,-7 C-0.3,-7 -0.29,-2.26 -0.29,-2.26 C-0.29,-2.26 -2.31,-4.23 -2.31,-4.23 C-2.31,-4.23 -2.3,-7 -2.3,-7 C-2.3,-7.83 -2.01,-8.54 -1.42,-9.12 C-0.84,-9.71 -0.13,-10 0.7,-10 C1.53,-10 2.24,-9.71 2.83,-9.12 C3.41,-8.54 3.7,-7.83 3.7,-7 C3.7,-7 3.7,-1 3.7,-1 C3.7,-0.82 3.67,-0.54 3.66,-0.3 C3.63,0.12 3.38,0.7 3.12,0.99c "
+                    android:valueTo="M3.5 -0.05 C3.5,-0.05 1.7,-1.85 1.7,-1.85 C1.7,-1.85 1.7,-1.92 1.7,-1.92 C1.7,-1.92 1.7,-7 1.7,-7 C1.7,-7.28 1.61,-7.52 1.41,-7.71 C1.22,-7.9 0.98,-8 0.7,-8 C0.42,-8 0.18,-7.9 -0.01,-7.71 C-0.2,-7.52 -0.3,-7.28 -0.3,-7 C-0.3,-7 -0.3,-3.85 -0.3,-3.85 C-0.3,-3.85 -2.3,-5.85 -2.3,-5.85 C-2.3,-5.85 -2.3,-7 -2.3,-7 C-2.3,-7.83 -2.01,-8.54 -1.42,-9.12 C-0.84,-9.71 -0.13,-10 0.7,-10 C1.53,-10 2.24,-9.71 2.83,-9.12 C3.41,-8.54 3.7,-7.83 3.7,-7 C3.7,-7 3.7,-1 3.7,-1 C3.7,-0.82 3.68,-0.65 3.64,-0.5 C3.6,-0.35 3.55,-0.2 3.5,-0.05c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.2,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_D_2_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="167"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M5.04 4.45 C5.04,4.45 3.59,3.02 3.59,3.02 C4.82,1.94 5.31,0.96 5.53,0.3 C5.64,-0.12 5.7,-0.55 5.7,-1 C5.7,-1 7.7,-1 7.7,-1 C7.7,-0.27 7.59,0.43 7.38,1.09 C7.16,1.75 6.51,3.17 5.04,4.45c "
+                    android:valueTo="M6.45 2.95 C6.45,2.95 5,1.5 5,1.5 C5.23,1.12 5.41,0.72 5.53,0.3 C5.64,-0.12 5.7,-0.55 5.7,-1 C5.7,-1 7.7,-1 7.7,-1 C7.7,-0.27 7.59,0.43 7.38,1.09 C7.16,1.75 6.85,2.37 6.45,2.95c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.2,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_D_3_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="67"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M-0.29 -0.71 C-0.29,-0.42 -0.19,-0.19 0,0.01 C0.19,0.2 0.43,0.29 0.71,0.29 C0.76,0.31 0.75,0.31 0.78,0.3 C1.14,0.67 1.92,1.43 2.34,1.85 C2.03,2.04 1.55,2.29 0.71,2.29 C0.55,2.29 0.39,2.28 0.23,2.26 C-0.4,2.17 -0.94,1.89 -1.41,1.42 C-1.89,0.94 -2.18,0.37 -2.26,-0.28 C-2.28,-0.42 -2.29,-0.56 -2.29,-0.71 C-2.29,-0.71 -2.31,-2.72 -2.31,-2.72 C-2.31,-2.72 -0.29,-0.71 -0.29,-0.71c "
+                    android:valueTo="M-0.29 -0.71 C-0.29,-0.42 -0.19,-0.19 0,0.01 C0.19,0.2 0.43,0.29 0.71,0.29 C0.76,0.31 0.75,0.31 0.78,0.3 C1.14,0.67 1.92,1.43 2.34,1.85 C2.03,2.04 1.55,2.29 0.71,2.29 C0.55,2.29 0.39,2.28 0.23,2.26 C-0.4,2.17 -0.94,1.89 -1.41,1.42 C-1.89,0.94 -2.18,0.37 -2.26,-0.28 C-2.28,-0.42 -2.29,-0.56 -2.29,-0.71 C-2.29,-0.71 -2.31,-2.72 -2.31,-2.72 C-2.31,-2.72 -0.29,-0.71 -0.29,-0.71c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.2,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="100"
+                    android:propertyName="pathData"
+                    android:startOffset="67"
+                    android:valueFrom="M-0.29 -0.71 C-0.29,-0.42 -0.19,-0.19 0,0.01 C0.19,0.2 0.43,0.29 0.71,0.29 C0.76,0.31 0.75,0.31 0.78,0.3 C1.14,0.67 1.92,1.43 2.34,1.85 C2.03,2.04 1.55,2.29 0.71,2.29 C0.55,2.29 0.39,2.28 0.23,2.26 C-0.4,2.17 -0.94,1.89 -1.41,1.42 C-1.89,0.94 -2.18,0.37 -2.26,-0.28 C-2.28,-0.42 -2.29,-0.56 -2.29,-0.71 C-2.29,-0.71 -2.31,-2.72 -2.31,-2.72 C-2.31,-2.72 -0.29,-0.71 -0.29,-0.71c "
+                    android:valueTo="M-0.29 -0.71 C-0.29,-0.42 -0.19,-0.19 0,0.01 C0.19,0.2 0.43,0.29 0.71,0.29 C0.76,0.31 0.75,0.31 0.78,0.3 C1.14,0.67 1.92,1.43 2.34,1.85 C2.03,2.04 1.55,2.29 0.71,2.29 C0.55,2.29 0.39,2.28 0.23,2.26 C0.09,2.2 -0.55,1.45 -1.02,0.98 C-1.5,0.5 -2.23,-0.14 -2.26,-0.28 C-2.28,-0.42 -2.29,-0.56 -2.29,-0.71 C-2.29,-0.71 -2.31,-2.72 -2.31,-2.72 C-2.31,-2.72 -0.29,-0.71 -0.29,-0.71c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.2,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_D_4_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="17"
+                    android:propertyName="fillAlpha"
+                    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.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_D_4_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="250"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M-9.89 -7.81 C-9.89,-7.81 -9.9,-7.8 -9.9,-7.8 C-9.9,-7.8 -8.5,-9.2 -8.5,-9.2 C-8.5,-9.2 -8.49,-9.21 -8.49,-9.21 C-8.49,-9.21 -9.89,-7.81 -9.89,-7.81c "
+                    android:valueTo="M8.5 10.6 C8.5,10.6 -9.9,-7.8 -9.9,-7.8 C-9.9,-7.8 -8.5,-9.2 -8.5,-9.2 C-8.5,-9.2 9.9,9.2 9.9,9.2 C9.9,9.2 8.5,10.6 8.5,10.6c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.2,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:duration="267"
+                    android:propertyName="translateX"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="1"
+                    android:valueType="floatType" />
+            </set>
+        </aapt:attr>
+    </target>
+    <aapt:attr name="android:drawable">
+        <vector
+            android:width="24dp"
+            android:height="24dp"
+            android:viewportHeight="24"
+            android:viewportWidth="24">
+            <group android:name="_R_G">
+                <group
+                    android:name="_R_G_L_0_G"
+                    android:translateX="12"
+                    android:translateY="12">
+                    <path
+                        android:name="_R_G_L_0_G_D_0_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#edf2eb"
+                        android:fillType="nonZero"
+                        android:pathData=" M5.05 4.43 C3.98,5.25 3.08,5.53 2.53,5.73 C2.26,5.81 1.98,5.87 1.7,5.9 C1.7,5.9 1.7,9 1.7,9 C1.7,9 -0.3,9 -0.3,9 C-0.3,9 -0.3,5.9 -0.3,5.9 C-2.02,5.65 -3.44,4.88 -4.59,3.59 C-5.73,2.3 -6.3,0.77 -6.3,-1 C-6.3,-1 -4.3,-1 -4.3,-1 C-4.3,0.38 -3.81,1.56 -2.84,2.54 C-1.86,3.51 -0.68,4 0.7,4 C0.88,4 1.06,3.99 1.23,3.96 C1.39,3.94 2.58,3.77 3.61,2.99 C3.61,2.99 5.05,4.43 5.05,4.43c " />
+                    <path
+                        android:name="_R_G_L_0_G_D_1_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#edf2eb"
+                        android:fillType="nonZero"
+                        android:pathData=" M2.31 1.86 C2.31,1.86 1.01,0.55 0.75,0.31 C1.7,0.27 1.7,-0.7 1.7,-0.7 C1.7,-0.7 1.7,-7 1.7,-7 C1.7,-7.28 1.61,-7.52 1.41,-7.71 C1.22,-7.9 0.98,-8 0.7,-8 C0.42,-8 0.18,-7.9 -0.01,-7.71 C-0.2,-7.52 -0.3,-7.28 -0.3,-7 C-0.3,-7 -0.29,-0.66 -0.29,-0.66 C-0.29,-0.66 -2.31,-2.67 -2.31,-2.67 C-2.31,-2.67 -2.3,-7 -2.3,-7 C-2.3,-7.83 -2.01,-8.54 -1.42,-9.12 C-0.84,-9.71 -0.13,-10 0.7,-10 C1.53,-10 2.24,-9.71 2.83,-9.12 C3.41,-8.54 3.7,-7.83 3.7,-7 C3.7,-7 3.7,-1 3.7,-1 C3.7,-0.82 3.7,-0.33 3.64,-0.03 C3.51,0.52 3.23,1.19 2.31,1.86c " />
+                    <path
+                        android:name="_R_G_L_0_G_D_2_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#edf2eb"
+                        android:fillType="nonZero"
+                        android:pathData=" M5.04 4.45 C5.04,4.45 3.59,3.02 3.59,3.02 C4.82,1.94 5.31,0.96 5.53,0.3 C5.64,-0.12 5.7,-0.55 5.7,-1 C5.7,-1 7.7,-1 7.7,-1 C7.7,-0.27 7.59,0.43 7.38,1.09 C7.16,1.75 6.51,3.17 5.04,4.45c " />
+                    <path
+                        android:name="_R_G_L_0_G_D_3_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#edf2eb"
+                        android:fillType="nonZero"
+                        android:pathData=" M-0.29 -0.71 C-0.29,-0.42 -0.19,-0.19 0,0.01 C0.19,0.2 0.43,0.29 0.71,0.29 C0.76,0.31 0.75,0.31 0.78,0.3 C1.14,0.67 1.92,1.43 2.34,1.85 C2.03,2.04 1.55,2.29 0.71,2.29 C0.55,2.29 0.39,2.28 0.23,2.26 C-0.4,2.17 -0.94,1.89 -1.41,1.42 C-1.89,0.94 -2.18,0.37 -2.26,-0.28 C-2.28,-0.42 -2.29,-0.56 -2.29,-0.71 C-2.29,-0.71 -2.31,-2.72 -2.31,-2.72 C-2.31,-2.72 -0.29,-0.71 -0.29,-0.71c " />
+                    <path
+                        android:name="_R_G_L_0_G_D_4_P_0"
+                        android:fillAlpha="0"
+                        android:fillColor="#edf2eb"
+                        android:fillType="nonZero"
+                        android:pathData=" M-9.89 -7.81 C-9.89,-7.81 -9.9,-7.8 -9.9,-7.8 C-9.9,-7.8 -8.5,-9.2 -8.5,-9.2 C-8.5,-9.2 -8.49,-9.21 -8.49,-9.21 C-8.49,-9.21 -9.89,-7.81 -9.89,-7.81c " />
+                </group>
+            </group>
+            <group android:name="time_group" />
+        </vector>
+    </aapt:attr>
+</animated-vector>
diff --git a/packages/SystemUI/res/drawable/qs_mic_access_on.xml b/packages/SystemUI/res/drawable/qs_mic_access_on.xml
new file mode 100644
index 0000000..b485f06
--- /dev/null
+++ b/packages/SystemUI/res/drawable/qs_mic_access_on.xml
@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT 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">
+    <target android:name="_R_G_L_0_G_D_0_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="250"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M5.02 4.5 C3.59,5.47 2.79,5.64 2.53,5.73 C2.26,5.81 1.98,5.87 1.7,5.9 C1.7,5.9 1.7,9 1.7,9 C1.7,9 -0.3,9 -0.3,9 C-0.3,9 -0.3,5.9 -0.3,5.9 C-2.02,5.65 -3.44,4.88 -4.59,3.59 C-5.73,2.3 -6.3,0.77 -6.3,-1 C-6.3,-1 -4.3,-1 -4.3,-1 C-4.3,0.38 -3.81,1.56 -2.84,2.54 C-1.86,3.51 -0.68,4 0.7,4 C0.88,4 1.06,3.99 1.23,3.96 C1.39,3.94 2.53,3.83 3.58,3.07 C3.58,3.07 5.02,4.5 5.02,4.5c "
+                    android:valueTo="M5.05 4.43 C3.98,5.25 3.08,5.53 2.53,5.73 C2.26,5.81 1.98,5.87 1.7,5.9 C1.7,5.9 1.7,9 1.7,9 C1.7,9 -0.3,9 -0.3,9 C-0.3,9 -0.3,5.9 -0.3,5.9 C-2.02,5.65 -3.44,4.88 -4.59,3.59 C-5.73,2.3 -6.3,0.77 -6.3,-1 C-6.3,-1 -4.3,-1 -4.3,-1 C-4.3,0.38 -3.81,1.56 -2.84,2.54 C-1.86,3.51 -0.68,4 0.7,4 C0.88,4 1.06,3.99 1.23,3.96 C1.39,3.94 2.58,3.77 3.61,2.99 C3.61,2.99 5.05,4.43 5.05,4.43c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.1,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_D_1_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="125"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M3.5 -0.05 C3.5,-0.05 1.7,-1.85 1.7,-1.85 C1.7,-1.85 1.7,-1.92 1.7,-1.92 C1.7,-1.92 1.7,-7 1.7,-7 C1.7,-7.28 1.61,-7.52 1.41,-7.71 C1.22,-7.9 0.98,-8 0.7,-8 C0.42,-8 0.18,-7.9 -0.01,-7.71 C-0.2,-7.52 -0.3,-7.28 -0.3,-7 C-0.3,-7 -0.3,-3.85 -0.3,-3.85 C-0.3,-3.85 -2.3,-5.85 -2.3,-5.85 C-2.3,-5.85 -2.3,-7 -2.3,-7 C-2.3,-7.83 -2.01,-8.54 -1.42,-9.12 C-0.84,-9.71 -0.13,-10 0.7,-10 C1.53,-10 2.24,-9.71 2.83,-9.12 C3.41,-8.54 3.7,-7.83 3.7,-7 C3.7,-7 3.7,-1 3.7,-1 C3.7,-0.82 3.68,-0.65 3.64,-0.5 C3.6,-0.35 3.55,-0.2 3.5,-0.05c "
+                    android:valueTo="M3.12 0.99 C3.12,0.99 1.83,-0.26 1.71,-0.38 C1.72,-0.81 1.7,-1.31 1.7,-1.31 C1.7,-1.31 1.7,-7 1.7,-7 C1.7,-7.28 1.61,-7.52 1.41,-7.71 C1.22,-7.9 0.98,-8 0.7,-8 C0.42,-8 0.18,-7.9 -0.01,-7.71 C-0.2,-7.52 -0.3,-7.28 -0.3,-7 C-0.3,-7 -0.29,-2.26 -0.29,-2.26 C-0.29,-2.26 -2.31,-4.23 -2.31,-4.23 C-2.31,-4.23 -2.3,-7 -2.3,-7 C-2.3,-7.83 -2.01,-8.54 -1.42,-9.12 C-0.84,-9.71 -0.13,-10 0.7,-10 C1.53,-10 2.24,-9.71 2.83,-9.12 C3.41,-8.54 3.7,-7.83 3.7,-7 C3.7,-7 3.7,-1 3.7,-1 C3.7,-0.82 3.67,-0.54 3.66,-0.3 C3.63,0.12 3.38,0.7 3.12,0.99c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="58"
+                    android:propertyName="pathData"
+                    android:startOffset="125"
+                    android:valueFrom="M3.12 0.99 C3.12,0.99 1.83,-0.26 1.71,-0.38 C1.72,-0.81 1.7,-1.31 1.7,-1.31 C1.7,-1.31 1.7,-7 1.7,-7 C1.7,-7.28 1.61,-7.52 1.41,-7.71 C1.22,-7.9 0.98,-8 0.7,-8 C0.42,-8 0.18,-7.9 -0.01,-7.71 C-0.2,-7.52 -0.3,-7.28 -0.3,-7 C-0.3,-7 -0.29,-2.26 -0.29,-2.26 C-0.29,-2.26 -2.31,-4.23 -2.31,-4.23 C-2.31,-4.23 -2.3,-7 -2.3,-7 C-2.3,-7.83 -2.01,-8.54 -1.42,-9.12 C-0.84,-9.71 -0.13,-10 0.7,-10 C1.53,-10 2.24,-9.71 2.83,-9.12 C3.41,-8.54 3.7,-7.83 3.7,-7 C3.7,-7 3.7,-1 3.7,-1 C3.7,-0.82 3.67,-0.54 3.66,-0.3 C3.63,0.12 3.38,0.7 3.12,0.99c "
+                    android:valueTo="M2.86 1.48 C2.86,1.48 1.58,0.21 1.39,0.03 C1.77,-0.26 1.7,-1.03 1.7,-1.03 C1.7,-1.03 1.7,-7 1.7,-7 C1.7,-7.28 1.61,-7.52 1.41,-7.71 C1.22,-7.9 0.98,-8 0.7,-8 C0.42,-8 0.18,-7.9 -0.01,-7.71 C-0.2,-7.52 -0.3,-7.28 -0.3,-7 C-0.3,-7 -0.29,-1.51 -0.29,-1.51 C-0.29,-1.51 -2.31,-3.5 -2.31,-3.5 C-2.31,-3.5 -2.3,-7 -2.3,-7 C-2.3,-7.83 -2.01,-8.54 -1.42,-9.12 C-0.84,-9.71 -0.13,-10 0.7,-10 C1.53,-10 2.24,-9.71 2.83,-9.12 C3.41,-8.54 3.7,-7.83 3.7,-7 C3.7,-7 3.7,-1 3.7,-1 C3.7,-0.82 3.68,-0.44 3.65,-0.17 C3.61,0.19 3.36,1.05 2.86,1.48c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="67"
+                    android:propertyName="pathData"
+                    android:startOffset="183"
+                    android:valueFrom="M2.86 1.48 C2.86,1.48 1.58,0.21 1.39,0.03 C1.77,-0.26 1.7,-1.03 1.7,-1.03 C1.7,-1.03 1.7,-7 1.7,-7 C1.7,-7.28 1.61,-7.52 1.41,-7.71 C1.22,-7.9 0.98,-8 0.7,-8 C0.42,-8 0.18,-7.9 -0.01,-7.71 C-0.2,-7.52 -0.3,-7.28 -0.3,-7 C-0.3,-7 -0.29,-1.51 -0.29,-1.51 C-0.29,-1.51 -2.31,-3.5 -2.31,-3.5 C-2.31,-3.5 -2.3,-7 -2.3,-7 C-2.3,-7.83 -2.01,-8.54 -1.42,-9.12 C-0.84,-9.71 -0.13,-10 0.7,-10 C1.53,-10 2.24,-9.71 2.83,-9.12 C3.41,-8.54 3.7,-7.83 3.7,-7 C3.7,-7 3.7,-1 3.7,-1 C3.7,-0.82 3.68,-0.44 3.65,-0.17 C3.61,0.19 3.36,1.05 2.86,1.48c "
+                    android:valueTo="M2.42 1.81 C2.42,1.81 1.16,0.52 0.9,0.28 C1.7,0.14 1.7,-0.7 1.7,-0.7 C1.7,-0.7 1.7,-7 1.7,-7 C1.7,-7.28 1.61,-7.52 1.41,-7.71 C1.22,-7.9 0.98,-8 0.7,-8 C0.42,-8 0.18,-7.9 -0.01,-7.71 C-0.2,-7.52 -0.3,-7.28 -0.3,-7 C-0.3,-7 -0.29,-0.66 -0.29,-0.66 C-0.29,-0.66 -2.31,-2.67 -2.31,-2.67 C-2.31,-2.67 -2.3,-7 -2.3,-7 C-2.3,-7.83 -2.01,-8.54 -1.42,-9.12 C-0.84,-9.71 -0.13,-10 0.7,-10 C1.53,-10 2.24,-9.71 2.83,-9.12 C3.41,-8.54 3.7,-7.83 3.7,-7 C3.7,-7 3.7,-1 3.7,-1 C3.7,-0.82 3.7,-0.33 3.64,-0.03 C3.58,0.27 3.22,1.2 2.42,1.81c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_D_2_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="250"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M6.45 2.95 C6.45,2.95 5,1.5 5,1.5 C5.23,1.12 5.41,0.72 5.53,0.3 C5.64,-0.12 5.7,-0.55 5.7,-1 C5.7,-1 7.7,-1 7.7,-1 C7.7,-0.27 7.59,0.43 7.38,1.09 C7.16,1.75 6.85,2.37 6.45,2.95c "
+                    android:valueTo="M5.04 4.43 C5.04,4.43 3.59,2.98 3.59,2.98 C4.61,2.09 5.41,0.72 5.53,0.3 C5.64,-0.12 5.7,-0.55 5.7,-1 C5.7,-1 7.7,-1 7.7,-1 C7.7,-0.27 7.59,0.43 7.38,1.09 C7.16,1.75 6.19,3.44 5.04,4.43c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.1,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_D_3_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="250"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M-0.29 -0.71 C-0.29,-0.42 -0.19,-0.19 0,0.01 C0.19,0.2 0.43,0.29 0.71,0.29 C0.76,0.31 0.75,0.31 0.78,0.3 C1.14,0.67 1.92,1.43 2.34,1.85 C2.03,2.04 1.55,2.29 0.71,2.29 C0.55,2.29 0.39,2.28 0.23,2.26 C0.09,2.2 -0.55,1.45 -1.02,0.98 C-1.5,0.5 -2.23,-0.14 -2.26,-0.28 C-2.28,-0.42 -2.29,-0.56 -2.29,-0.71 C-2.29,-0.71 -2.31,-2.72 -2.31,-2.72 C-2.31,-2.72 -0.29,-0.71 -0.29,-0.71c "
+                    android:valueTo="M-0.29 -0.71 C-0.29,-0.42 -0.19,-0.19 0,0.01 C0.19,0.2 0.43,0.29 0.71,0.29 C0.76,0.31 0.75,0.31 0.78,0.3 C1.14,0.67 1.92,1.43 2.34,1.85 C2.03,2.04 1.55,2.29 0.71,2.29 C0.55,2.29 0.39,2.28 0.23,2.26 C-0.4,2.17 -0.94,1.89 -1.41,1.42 C-1.89,0.94 -2.18,0.37 -2.26,-0.28 C-2.28,-0.42 -2.29,-0.56 -2.29,-0.71 C-2.29,-0.71 -2.31,-2.72 -2.31,-2.72 C-2.31,-2.72 -0.29,-0.71 -0.29,-0.71c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.4,0 0.1,1 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_D_4_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="400"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="0"
+                    android:valueFrom="1"
+                    android:valueTo="1"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+                <objectAnimator
+                    android:duration="17"
+                    android:propertyName="fillAlpha"
+                    android:startOffset="400"
+                    android:valueFrom="1"
+                    android:valueTo="0"
+                    android:valueType="floatType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" />
+                    </aapt:attr>
+                </objectAnimator>
+            </set>
+        </aapt:attr>
+    </target>
+    <target android:name="_R_G_L_0_G_D_4_P_0">
+        <aapt:attr name="android:animation">
+            <set android:ordering="together">
+                <objectAnimator
+                    android:duration="167"
+                    android:propertyName="pathData"
+                    android:startOffset="0"
+                    android:valueFrom="M8.5 10.6 C8.5,10.6 -9.9,-7.8 -9.9,-7.8 C-9.9,-7.8 -8.5,-9.2 -8.5,-9.2 C-8.5,-9.2 9.9,9.2 9.9,9.2 C9.9,9.2 8.5,10.6 8.5,10.6c "
+                    android:valueTo="M8.5 10.6 C8.5,10.6 8.51,10.6 8.51,10.6 C8.51,10.6 9.91,9.2 9.91,9.2 C9.91,9.2 9.9,9.2 9.9,9.2 C9.9,9.2 8.5,10.6 8.5,10.6c "
+                    android:valueType="pathType">
+                    <aapt:attr name="android:interpolator">
+                        <pathInterpolator android:pathData="M 0.0,0.0 c0.5,0 0.833,0.833 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:duration="433"
+                    android:propertyName="translateX"
+                    android:startOffset="0"
+                    android:valueFrom="0"
+                    android:valueTo="1"
+                    android:valueType="floatType" />
+            </set>
+        </aapt:attr>
+    </target>
+    <aapt:attr name="android:drawable">
+        <vector
+            android:width="24dp"
+            android:height="24dp"
+            android:viewportHeight="24"
+            android:viewportWidth="24">
+            <group android:name="_R_G">
+                <group
+                    android:name="_R_G_L_0_G"
+                    android:translateX="12"
+                    android:translateY="12">
+                    <path
+                        android:name="_R_G_L_0_G_D_0_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M5.02 4.5 C3.59,5.47 2.79,5.64 2.53,5.73 C2.26,5.81 1.98,5.87 1.7,5.9 C1.7,5.9 1.7,9 1.7,9 C1.7,9 -0.3,9 -0.3,9 C-0.3,9 -0.3,5.9 -0.3,5.9 C-2.02,5.65 -3.44,4.88 -4.59,3.59 C-5.73,2.3 -6.3,0.77 -6.3,-1 C-6.3,-1 -4.3,-1 -4.3,-1 C-4.3,0.38 -3.81,1.56 -2.84,2.54 C-1.86,3.51 -0.68,4 0.7,4 C0.88,4 1.06,3.99 1.23,3.96 C1.39,3.94 2.53,3.83 3.58,3.07 C3.58,3.07 5.02,4.5 5.02,4.5c " />
+                    <path
+                        android:name="_R_G_L_0_G_D_1_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M3.5 -0.05 C3.5,-0.05 1.7,-1.85 1.7,-1.85 C1.7,-1.85 1.7,-1.92 1.7,-1.92 C1.7,-1.92 1.7,-7 1.7,-7 C1.7,-7.28 1.61,-7.52 1.41,-7.71 C1.22,-7.9 0.98,-8 0.7,-8 C0.42,-8 0.18,-7.9 -0.01,-7.71 C-0.2,-7.52 -0.3,-7.28 -0.3,-7 C-0.3,-7 -0.3,-3.85 -0.3,-3.85 C-0.3,-3.85 -2.3,-5.85 -2.3,-5.85 C-2.3,-5.85 -2.3,-7 -2.3,-7 C-2.3,-7.83 -2.01,-8.54 -1.42,-9.12 C-0.84,-9.71 -0.13,-10 0.7,-10 C1.53,-10 2.24,-9.71 2.83,-9.12 C3.41,-8.54 3.7,-7.83 3.7,-7 C3.7,-7 3.7,-1 3.7,-1 C3.7,-0.82 3.68,-0.65 3.64,-0.5 C3.6,-0.35 3.55,-0.2 3.5,-0.05c " />
+                    <path
+                        android:name="_R_G_L_0_G_D_2_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M6.45 2.95 C6.45,2.95 5,1.5 5,1.5 C5.23,1.12 5.41,0.72 5.53,0.3 C5.64,-0.12 5.7,-0.55 5.7,-1 C5.7,-1 7.7,-1 7.7,-1 C7.7,-0.27 7.59,0.43 7.38,1.09 C7.16,1.75 6.85,2.37 6.45,2.95c " />
+                    <path
+                        android:name="_R_G_L_0_G_D_3_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M-0.29 -0.71 C-0.29,-0.42 -0.19,-0.19 0,0.01 C0.19,0.2 0.43,0.29 0.71,0.29 C0.76,0.31 0.75,0.31 0.78,0.3 C1.14,0.67 1.92,1.43 2.34,1.85 C2.03,2.04 1.55,2.29 0.71,2.29 C0.55,2.29 0.39,2.28 0.23,2.26 C0.09,2.2 -0.55,1.45 -1.02,0.98 C-1.5,0.5 -2.23,-0.14 -2.26,-0.28 C-2.28,-0.42 -2.29,-0.56 -2.29,-0.71 C-2.29,-0.71 -2.31,-2.72 -2.31,-2.72 C-2.31,-2.72 -0.29,-0.71 -0.29,-0.71c " />
+                    <path
+                        android:name="_R_G_L_0_G_D_4_P_0"
+                        android:fillAlpha="1"
+                        android:fillColor="#ffffff"
+                        android:fillType="nonZero"
+                        android:pathData=" M8.5 10.6 C8.5,10.6 -9.9,-7.8 -9.9,-7.8 C-9.9,-7.8 -8.5,-9.2 -8.5,-9.2 C-8.5,-9.2 9.9,9.2 9.9,9.2 C9.9,9.2 8.5,10.6 8.5,10.6c " />
+                </group>
+            </group>
+            <group android:name="time_group" />
+        </vector>
+    </aapt:attr>
+</animated-vector>
diff --git a/packages/SystemUI/res/drawable/screenshot_edit_background.xml b/packages/SystemUI/res/drawable/screenshot_edit_background.xml
index ff5c62e..a1185a2 100644
--- a/packages/SystemUI/res/drawable/screenshot_edit_background.xml
+++ b/packages/SystemUI/res/drawable/screenshot_edit_background.xml
@@ -17,7 +17,7 @@
 <!-- Long screenshot edit FAB background -->
 <ripple xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
-        android:color="?android:textColorPrimary">
+        android:color="@color/overlay_button_ripple">
     <item android:id="@android:id/background">
         <shape android:shape="rectangle">
             <solid android:color="?androidprv:attr/colorAccentPrimary"/>
diff --git a/packages/SystemUI/res/drawable/settings_input_antenna.xml b/packages/SystemUI/res/drawable/settings_input_antenna.xml
new file mode 100644
index 0000000..f2adcaf
--- /dev/null
+++ b/packages/SystemUI/res/drawable/settings_input_antenna.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2022 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT 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="24dp"
+        android:height="24dp" android:viewportWidth="24" android:viewportHeight="24"
+        android:tint="?android:attr/textColorSecondary">
+    <path android:fillColor="#FF000000"
+          android:pathData="M9,22.4 L7.6,21 11,17.6V14.3Q10.325,14 9.913,13.375Q9.5,12.75 9.5,12Q9.5,10.95 10.225,10.225Q10.95,9.5 12,9.5Q13.05,9.5 13.775,10.225Q14.5,10.95 14.5,12Q14.5,12.75 14.088,13.375Q13.675,14 13,14.3V17.6L16.4,21L15,22.4L12,19.4ZM5,12Q5,9.05 7.05,7.025Q9.1,5 12,5Q14.9,5 16.95,7.025Q19,9.05 19,12H17Q17,9.925 15.538,8.462Q14.075,7 12,7Q9.925,7 8.463,8.462Q7,9.925 7,12ZM1,12Q1,9.7 1.863,7.7Q2.725,5.7 4.225,4.212Q5.725,2.725 7.725,1.862Q9.725,1 12,1Q14.275,1 16.275,1.862Q18.275,2.725 19.775,4.212Q21.275,5.7 22.138,7.7Q23,9.7 23,12H21Q21,10.125 20.288,8.487Q19.575,6.85 18.35,5.625Q17.125,4.4 15.488,3.7Q13.85,3 12,3Q10.15,3 8.512,3.7Q6.875,4.4 5.65,5.625Q4.425,6.85 3.712,8.487Q3,10.125 3,12Z"/>
+</vector>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/auth_container_view.xml b/packages/SystemUI/res/layout/auth_container_view.xml
index 3db01a4..2bd2e64 100644
--- a/packages/SystemUI/res/layout/auth_container_view.xml
+++ b/packages/SystemUI/res/layout/auth_container_view.xml
@@ -23,7 +23,6 @@
         android:id="@+id/background"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:background="@color/biometric_dialog_dim_color"
         android:contentDescription="@string/biometric_dialog_empty_space_description"/>
 
     <View
diff --git a/packages/SystemUI/res/layout/brightness_mirror_container.xml b/packages/SystemUI/res/layout/brightness_mirror_container.xml
index ac90db3..1bf45aa 100644
--- a/packages/SystemUI/res/layout/brightness_mirror_container.xml
+++ b/packages/SystemUI/res/layout/brightness_mirror_container.xml
@@ -23,7 +23,6 @@
     android:background="@drawable/brightness_mirror_background"
     android:layout_gravity="center_vertical"
     android:layout_margin="8dp"
-    android:padding="@dimen/rounded_slider_background_padding"
     android:gravity="center"
     android:visibility="invisible">
 
diff --git a/packages/SystemUI/res/layout/broadcast_dialog.xml b/packages/SystemUI/res/layout/broadcast_dialog.xml
new file mode 100644
index 0000000..5ba2afe
--- /dev/null
+++ b/packages/SystemUI/res/layout/broadcast_dialog.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2022 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT 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:id="@+id/dialog_bg"
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:orientation="vertical">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="@dimen/broadcast_dialog_margin"
+        android:orientation="vertical">
+
+        <ImageView
+            android:id="@+id/dialog_icon"
+            android:layout_width="@dimen/broadcast_dialog_icon_size"
+            android:layout_height="@dimen/broadcast_dialog_icon_size"
+            android:layout_marginTop="@dimen/broadcast_dialog_icon_margin_top"
+            android:layout_marginBottom="@dimen/broadcast_dialog_title_img_margin_top"
+            android:layout_gravity="center"
+            android:src="@drawable/settings_input_antenna"/>
+
+        <TextView
+            style="@style/BroadcastDialogTitleStyle"
+            android:id="@+id/dialog_title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:gravity="center"
+            android:layout_gravity="center"/>
+
+        <TextView
+            style="@style/BroadcastDialogBodyStyle"
+            android:id="@+id/dialog_subtitle"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:gravity="center"
+            android:layout_gravity="center"/>
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginHorizontal="@dimen/broadcast_dialog_margin"
+        android:layout_marginBottom="@dimen/broadcast_dialog_margin"
+        android:orientation="vertical">
+
+        <Button
+            android:layout_marginBottom="@dimen/broadcast_dialog_btn_margin_bottom"
+            android:id="@+id/switch_broadcast"
+            style="@style/BroadcastDialogButtonStyle"/>
+
+        <Button
+            android:layout_marginBottom="@dimen/broadcast_dialog_btn_margin_bottom"
+            android:id="@+id/change_output"
+            android:text="@string/bt_le_audio_broadcast_dialog_different_output"
+            style="@style/BroadcastDialogButtonStyle"/>
+
+        <Button
+            android:id="@+id/cancel"
+            android:text="@android:string/cancel"
+            style="@style/BroadcastDialogButtonStyle"/>
+    </LinearLayout>
+
+</LinearLayout>
diff --git a/packages/SystemUI/res/layout/clipboard_overlay.xml b/packages/SystemUI/res/layout/clipboard_overlay.xml
index 99a5a2e..1a1fc75 100644
--- a/packages/SystemUI/res/layout/clipboard_overlay.xml
+++ b/packages/SystemUI/res/layout/clipboard_overlay.xml
@@ -115,6 +115,7 @@
                   android:autoSizeMinTextSize="@dimen/clipboard_overlay_min_font"
                   android:autoSizeMaxTextSize="@dimen/clipboard_overlay_max_font"
                   android:textColor="?attr/overlayButtonTextColor"
+                  android:textColorLink="?attr/overlayButtonTextColor"
                   android:background="?androidprv:attr/colorAccentSecondary"
                   android:layout_width="@dimen/clipboard_preview_size"
                   android:layout_height="@dimen/clipboard_preview_size"/>
diff --git a/packages/SystemUI/res/layout/combined_qs_header.xml b/packages/SystemUI/res/layout/combined_qs_header.xml
index ec82ccf..5dc34b9 100644
--- a/packages/SystemUI/res/layout/combined_qs_header.xml
+++ b/packages/SystemUI/res/layout/combined_qs_header.xml
@@ -14,7 +14,7 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<androidx.constraintlayout.motion.widget.MotionLayout
+<com.android.systemui.util.NoRemeasureMotionLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/split_shade_status_bar"
@@ -32,10 +32,37 @@
     <androidx.constraintlayout.widget.Guideline
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:id="@+id/center"
-        app:layout_constraintGuide_percent="0.5"
+        android:id="@+id/begin_guide"
+        android:orientation="vertical"
+        app:layout_constraintGuide_begin="0dp"/>
+
+    <androidx.constraintlayout.widget.Guideline
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/end_guide"
+        android:orientation="vertical"
+        app:layout_constraintGuide_end="0dp"
+        />
+
+    <androidx.constraintlayout.widget.Guideline
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/center_left"
         android:orientation="vertical" />
 
+    <androidx.constraintlayout.widget.Guideline
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/center_right"
+        android:orientation="vertical" />
+
+    <androidx.constraintlayout.widget.Barrier
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/barrier"
+        app:barrierDirection="start"
+        app:constraint_referenced_ids="statusIcons,privacy_container" />
+
     <com.android.systemui.statusbar.policy.Clock
         android:id="@+id/clock"
         android:layout_width="wrap_content"
@@ -44,18 +71,25 @@
         android:paddingStart="@dimen/status_bar_left_clock_starting_padding"
         android:paddingEnd="@dimen/status_bar_left_clock_end_padding"
         android:singleLine="true"
+        android:textDirection="locale"
         android:textAppearance="@style/TextAppearance.QS.Status"
+        android:transformPivotX="0sp"
+        android:transformPivotY="20sp"
+        android:scaleX="1"
+        android:scaleY="1"
     />
 
-    <com.android.systemui.statusbar.policy.DateView
+    <com.android.systemui.statusbar.policy.VariableDateView
         android:id="@+id/date"
         android:layout_width="wrap_content"
         android:layout_height="0dp"
         android:layout_gravity="start|center_vertical"
         android:gravity="center_vertical"
         android:singleLine="true"
+        android:textDirection="locale"
         android:textAppearance="@style/TextAppearance.QS.Status"
-        app:datePattern="@string/abbrev_wday_month_day_no_year_alarm"
+        app:longDatePattern="@string/abbrev_wday_month_day_no_year_alarm"
+        app:shortDatePattern="@string/abbrev_month_day_no_year"
     />
 
     <include
@@ -81,7 +115,7 @@
         app:layout_constraintHeight_min="@dimen/large_screen_shade_header_min_height"
         android:paddingEnd="@dimen/signal_cluster_battery_padding"
         android:layout_width="wrap_content"
-        android:layout_height="48dp"
+        android:layout_height="@dimen/large_screen_shade_header_min_height"
         app:layout_constraintStart_toEndOf="@id/carrier_group"
         app:layout_constraintEnd_toStartOf="@id/batteryRemainingIcon"
         app:layout_constraintTop_toTopOf="@id/clock"
@@ -92,8 +126,9 @@
     <com.android.systemui.battery.BatteryMeterView
         android:id="@+id/batteryRemainingIcon"
         android:layout_width="wrap_content"
-        android:layout_height="48dp"
+        android:layout_height="@dimen/large_screen_shade_header_min_height"
         app:layout_constraintHeight_min="@dimen/large_screen_shade_header_min_height"
+        app:layout_constrainedWidth="true"
         app:textAppearance="@style/TextAppearance.QS.Status"
         app:layout_constraintStart_toEndOf="@id/statusIcons"
         app:layout_constraintEnd_toEndOf="parent"
@@ -104,13 +139,18 @@
     <FrameLayout
         android:id="@+id/privacy_container"
         android:layout_width="wrap_content"
-        android:layout_height="48dp"
+        android:layout_height="@dimen/large_screen_shade_header_min_height"
         android:gravity="center"
-        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintEnd_toEndOf="@id/end_guide"
         app:layout_constraintTop_toTopOf="@id/date"
         app:layout_constraintBottom_toBottomOf="@id/date"
         >
         <include layout="@layout/ongoing_privacy_chip"/>
     </FrameLayout>
 
-</androidx.constraintlayout.motion.widget.MotionLayout>
\ No newline at end of file
+    <Space
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:id="@+id/space"
+    />
+</com.android.systemui.util.NoRemeasureMotionLayout>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/dream_overlay_complication_aqi.xml b/packages/SystemUI/res/layout/dream_overlay_complication_aqi.xml
new file mode 100644
index 0000000..fcebb8d
--- /dev/null
+++ b/packages/SystemUI/res/layout/dream_overlay_complication_aqi.xml
@@ -0,0 +1,26 @@
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<TextView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/aqi_view"
+    style="@style/clock_subtitle"
+    android:visibility="gone"
+    android:background="@drawable/dream_aqi_badge_bg"
+    android:paddingHorizontal="@dimen/dream_aqi_badge_padding_horizontal"
+    android:paddingVertical="@dimen/dream_aqi_badge_padding_vertical"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"/>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/dream_overlay_complication_clock_date.xml b/packages/SystemUI/res/layout/dream_overlay_complication_clock_date.xml
index 3f56baf..efbdd1a 100644
--- a/packages/SystemUI/res/layout/dream_overlay_complication_clock_date.xml
+++ b/packages/SystemUI/res/layout/dream_overlay_complication_clock_date.xml
@@ -20,5 +20,5 @@
     style="@style/clock_subtitle"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
-    android:format12Hour="EEE, MMM d"
-    android:format24Hour="EEE, MMM d"/>
+    android:format12Hour="@string/dream_date_complication_date_format"
+    android:format24Hour="@string/dream_date_complication_date_format"/>
diff --git a/packages/SystemUI/res/layout/dream_overlay_complication_clock_time.xml b/packages/SystemUI/res/layout/dream_overlay_complication_clock_time.xml
index e066d38..7a57293 100644
--- a/packages/SystemUI/res/layout/dream_overlay_complication_clock_time.xml
+++ b/packages/SystemUI/res/layout/dream_overlay_complication_clock_time.xml
@@ -22,8 +22,8 @@
     android:fontFamily="@font/clock"
     android:includeFontPadding="false"
     android:textColor="@android:color/white"
-    android:format12Hour="h:mm"
-    android:format24Hour="kk:mm"
+    android:format12Hour="@string/dream_time_complication_12_hr_time_format"
+    android:format24Hour="@string/dream_time_complication_24_hr_time_format"
     android:shadowColor="@color/keyguard_shadow_color"
     android:shadowRadius="?attr/shadowRadius"
     android:textSize="@dimen/dream_overlay_complication_clock_time_text_size"/>
diff --git a/packages/SystemUI/res/layout/dream_overlay_home_controls_chip.xml b/packages/SystemUI/res/layout/dream_overlay_home_controls_chip.xml
new file mode 100644
index 0000000..4f0a78e
--- /dev/null
+++ b/packages/SystemUI/res/layout/dream_overlay_home_controls_chip.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+-->
+<ImageView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/home_controls_chip"
+    android:layout_height="@dimen/keyguard_affordance_fixed_height"
+    android:layout_width="@dimen/keyguard_affordance_fixed_width"
+    android:layout_gravity="bottom|start"
+    android:scaleType="center"
+    android:tint="?android:attr/textColorPrimary"
+    android:src="@drawable/controls_icon"
+    android:background="@drawable/keyguard_bottom_affordance_bg"
+    android:layout_marginStart="@dimen/keyguard_affordance_horizontal_offset"
+    android:layout_marginBottom="@dimen/keyguard_affordance_vertical_offset"
+    android:contentDescription="@string/quick_controls_title" />
diff --git a/packages/SystemUI/res/layout/dream_overlay_status_bar_view.xml b/packages/SystemUI/res/layout/dream_overlay_status_bar_view.xml
index d0f4903..70a7709 100644
--- a/packages/SystemUI/res/layout/dream_overlay_status_bar_view.xml
+++ b/packages/SystemUI/res/layout/dream_overlay_status_bar_view.xml
@@ -70,15 +70,32 @@
             android:visibility="gone"
             android:contentDescription="@string/dream_overlay_status_bar_wifi_off" />
 
-        <com.android.systemui.dreams.DreamOverlayDotImageView
-            android:id="@+id/dream_overlay_camera_mic_off"
-            android:layout_width="@dimen/dream_overlay_camera_mic_off_indicator_size"
-            android:layout_height="@dimen/dream_overlay_camera_mic_off_indicator_size"
-            android:layout_gravity="center_vertical"
+        <ImageView
+            android:id="@+id/dream_overlay_mic_off"
+            android:layout_width="@dimen/dream_overlay_grey_chip_width"
+            android:layout_height="match_parent"
             android:layout_marginEnd="@dimen/dream_overlay_status_icon_margin"
+            android:src="@drawable/dream_overlay_mic_off"
             android:visibility="gone"
-            android:contentDescription="@string/dream_overlay_status_bar_camera_mic_off"
-            app:dotColor="@color/dream_overlay_camera_mic_off_dot_color" />
+            android:contentDescription="@string/dream_overlay_status_bar_mic_off" />
+
+        <ImageView
+            android:id="@+id/dream_overlay_camera_off"
+            android:layout_width="@dimen/dream_overlay_grey_chip_width"
+            android:layout_height="match_parent"
+            android:layout_marginEnd="@dimen/dream_overlay_status_icon_margin"
+            android:src="@drawable/dream_overlay_camera_off"
+            android:visibility="gone"
+            android:contentDescription="@string/dream_overlay_status_bar_camera_off" />
+
+        <ImageView
+            android:id="@+id/dream_overlay_camera_mic_off"
+            android:layout_width="@dimen/dream_overlay_grey_chip_width"
+            android:layout_height="match_parent"
+            android:layout_marginEnd="@dimen/dream_overlay_status_icon_margin"
+            android:src="@drawable/dream_overlay_mic_and_camera_off"
+            android:visibility="gone"
+            android:contentDescription="@string/dream_overlay_status_bar_camera_mic_off" />
 
     </LinearLayout>
 </com.android.systemui.dreams.DreamOverlayStatusBarView>
diff --git a/packages/SystemUI/res/layout/hybrid_conversation_notification.xml b/packages/SystemUI/res/layout/hybrid_conversation_notification.xml
index 43b1661..a313833 100644
--- a/packages/SystemUI/res/layout/hybrid_conversation_notification.xml
+++ b/packages/SystemUI/res/layout/hybrid_conversation_notification.xml
@@ -57,7 +57,8 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:singleLine="true"
-        style="?attr/hybridNotificationTextStyle"
+        android:paddingEnd="4dp"
+        style="@*android:style/Widget.DeviceDefault.Notification.Text"
     />
 
     <TextView
@@ -65,6 +66,7 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:singleLine="true"
-        style="?attr/hybridNotificationTextStyle"
+        android:paddingEnd="4dp"
+        style="@*android:style/Widget.DeviceDefault.Notification.Text"
     />
 </com.android.systemui.statusbar.notification.row.HybridConversationNotificationView>
diff --git a/packages/SystemUI/res/layout/hybrid_notification.xml b/packages/SystemUI/res/layout/hybrid_notification.xml
index e8d7751..9ea7be5 100644
--- a/packages/SystemUI/res/layout/hybrid_notification.xml
+++ b/packages/SystemUI/res/layout/hybrid_notification.xml
@@ -20,19 +20,22 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:gravity="bottom|start"
-    style="?attr/hybridNotificationStyle">
+    android:paddingStart="@*android:dimen/notification_content_margin_start"
+    android:paddingEnd="12dp">
     <TextView
         android:id="@+id/notification_title"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:singleLine="true"
-        style="?attr/hybridNotificationTitleStyle"
+        android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Notification.Title"
+        android:paddingEnd="4dp"
     />
     <TextView
         android:id="@+id/notification_text"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:singleLine="true"
-        style="?attr/hybridNotificationTextStyle"
+        android:paddingEnd="4dp"
+        style="@*android:style/Widget.DeviceDefault.Notification.Text"
     />
 </com.android.systemui.statusbar.notification.row.HybridNotificationView>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/keyguard_bottom_area.xml b/packages/SystemUI/res/layout/keyguard_bottom_area.xml
index 8f8993f..0ca19d9 100644
--- a/packages/SystemUI/res/layout/keyguard_bottom_area.xml
+++ b/packages/SystemUI/res/layout/keyguard_bottom_area.xml
@@ -59,25 +59,29 @@
 
     </LinearLayout>
 
-    <com.android.systemui.statusbar.KeyguardAffordanceView
-        android:id="@+id/camera_button"
-        android:layout_height="@dimen/keyguard_affordance_height"
-        android:layout_width="@dimen/keyguard_affordance_width"
-        android:layout_gravity="bottom|end"
-        android:src="@drawable/ic_camera_alt_24dp"
-        android:scaleType="center"
-        android:contentDescription="@string/accessibility_camera_button"
-        android:tint="?attr/wallpaperTextColor" />
-
-    <com.android.systemui.statusbar.KeyguardAffordanceView
-        android:id="@+id/left_button"
-        android:layout_height="@dimen/keyguard_affordance_height"
-        android:layout_width="@dimen/keyguard_affordance_width"
+    <ImageView
+        android:id="@+id/start_button"
+        android:layout_height="@dimen/keyguard_affordance_fixed_height"
+        android:layout_width="@dimen/keyguard_affordance_fixed_width"
         android:layout_gravity="bottom|start"
-        android:src="@*android:drawable/ic_phone"
         android:scaleType="center"
-        android:contentDescription="@string/accessibility_phone_button"
-        android:tint="?attr/wallpaperTextColor" />
+        android:tint="?android:attr/textColorPrimary"
+        android:background="@drawable/keyguard_bottom_affordance_bg"
+        android:layout_marginStart="@dimen/keyguard_affordance_horizontal_offset"
+        android:layout_marginBottom="@dimen/keyguard_affordance_vertical_offset"
+        android:visibility="gone" />
+
+    <ImageView
+        android:id="@+id/end_button"
+        android:layout_height="@dimen/keyguard_affordance_fixed_height"
+        android:layout_width="@dimen/keyguard_affordance_fixed_width"
+        android:layout_gravity="bottom|end"
+        android:scaleType="center"
+        android:tint="?android:attr/textColorPrimary"
+        android:background="@drawable/keyguard_bottom_affordance_bg"
+        android:layout_marginEnd="@dimen/keyguard_affordance_horizontal_offset"
+        android:layout_marginBottom="@dimen/keyguard_affordance_vertical_offset"
+        android:visibility="gone" />
 
     <ImageView
         android:id="@+id/wallet_button"
diff --git a/packages/SystemUI/res/layout/keyguard_status_bar.xml b/packages/SystemUI/res/layout/keyguard_status_bar.xml
index e47eed9..d27fa19 100644
--- a/packages/SystemUI/res/layout/keyguard_status_bar.xml
+++ b/packages/SystemUI/res/layout/keyguard_status_bar.xml
@@ -60,9 +60,8 @@
         </com.android.systemui.statusbar.phone.userswitcher.StatusBarUserSwitcherContainer>
 
         <FrameLayout android:id="@+id/system_icons_container"
-            android:layout_width="0dp"
+            android:layout_width="wrap_content"
             android:layout_height="match_parent"
-            android:layout_weight="1"
             android:layout_marginEnd="@dimen/status_bar_padding_end"
             android:gravity="center_vertical|end">
             <include layout="@layout/system_icons" />
diff --git a/packages/SystemUI/res/layout/large_screen_shade_header.xml b/packages/SystemUI/res/layout/large_screen_shade_header.xml
index 250eabd..3029a27 100644
--- a/packages/SystemUI/res/layout/large_screen_shade_header.xml
+++ b/packages/SystemUI/res/layout/large_screen_shade_header.xml
@@ -22,7 +22,7 @@
     android:minHeight="@dimen/large_screen_shade_header_min_height"
     android:clickable="false"
     android:focusable="true"
-    android:paddingLeft="@dimen/qs_panel_padding"
+    android:paddingLeft="@dimen/large_screen_shade_header_left_padding"
     android:paddingRight="@dimen/qs_panel_padding"
     android:visibility="gone"
     android:theme="@style/Theme.SystemUI.QuickSettings.Header">
diff --git a/packages/SystemUI/res/layout/media_output_dialog.xml b/packages/SystemUI/res/layout/media_output_dialog.xml
index 1efb479..93c16e4 100644
--- a/packages/SystemUI/res/layout/media_output_dialog.xml
+++ b/packages/SystemUI/res/layout/media_output_dialog.xml
@@ -42,12 +42,35 @@
             android:layout_height="wrap_content"
             android:paddingStart="12dp"
             android:orientation="vertical">
-            <ImageView
-                android:id="@+id/app_source_icon"
-                android:layout_width="20dp"
-                android:layout_height="20dp"
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
                 android:gravity="center_vertical"
-                android:importantForAccessibility="no"/>
+                android:orientation="horizontal">
+                <ImageView
+                    android:id="@+id/app_source_icon"
+                    android:layout_width="20dp"
+                    android:layout_height="20dp"
+                    android:gravity="center_vertical"
+                    android:importantForAccessibility="no"/>
+
+                <Space
+                    android:layout_weight="1"
+                    android:layout_width="0dp"
+                    android:layout_height="match_parent"/>
+
+                <ImageView
+                    android:id="@+id/broadcast_icon"
+                    android:src="@drawable/settings_input_antenna"
+                    android:contentDescription="@string/broadcasting_description_is_broadcasting"
+                    android:layout_width="48dp"
+                    android:layout_height="48dp"
+                    android:padding="12dp"
+                    android:gravity="center_vertical"
+                    android:clickable="true"
+                    android:focusable="true"
+                    android:visibility="gone"/>
+            </LinearLayout>
             <TextView
                 android:id="@+id/header_title"
                 android:layout_width="wrap_content"
@@ -89,8 +112,7 @@
             android:id="@+id/list_result"
             android:scrollbars="vertical"
             android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:overScrollMode="never"/>
+            android:layout_height="wrap_content"/>
     </LinearLayout>
 
     <LinearLayout
diff --git a/packages/SystemUI/res/layout/media_session_view.xml b/packages/SystemUI/res/layout/media_session_view.xml
index 0e20fa3..c526d9c 100644
--- a/packages/SystemUI/res/layout/media_session_view.xml
+++ b/packages/SystemUI/res/layout/media_session_view.xml
@@ -42,7 +42,6 @@
         android:adjustViewBounds="true"
         android:clipToOutline="true"
         android:background="@drawable/qs_media_outline_album_bg"
-        android:foreground="@drawable/qs_media_scrim"
         />
 
     <!-- Guideline for output switcher -->
@@ -151,7 +150,7 @@
 
     <!-- See comment in media_session_collapsed.xml for how these barriers are used -->
     <androidx.constraintlayout.widget.Barrier
-        android:id="@+id/media_action_barrier"
+        android:id="@+id/media_action_barrier_start"
         android:layout_width="0dp"
         android:layout_height="0dp"
         android:orientation="vertical"
@@ -173,6 +172,7 @@
         app:layout_constraintStart_toStartOf="parent"
         />
 
+    <!-- This barrier is used in expanded view to constrain the bottom row of actions -->
     <androidx.constraintlayout.widget.Barrier
         android:id="@+id/media_action_barrier_top"
         android:layout_width="match_parent"
diff --git a/packages/SystemUI/res/layout/media_ttt_chip.xml b/packages/SystemUI/res/layout/media_ttt_chip.xml
index 4d24140..d886806 100644
--- a/packages/SystemUI/res/layout/media_ttt_chip.xml
+++ b/packages/SystemUI/res/layout/media_ttt_chip.xml
@@ -31,6 +31,8 @@
         android:padding="@dimen/media_ttt_chip_outer_padding"
         android:background="@drawable/media_ttt_chip_background"
         android:layout_marginTop="20dp"
+        android:layout_marginStart="@dimen/notification_side_paddings"
+        android:layout_marginEnd="@dimen/notification_side_paddings"
         android:clipToPadding="false"
         android:gravity="center_vertical"
         android:alpha="0.0"
@@ -46,8 +48,9 @@
 
         <TextView
             android:id="@+id/text"
-            android:layout_width="wrap_content"
+            android:layout_width="0dp"
             android:layout_height="wrap_content"
+            android:layout_weight="1"
             android:textSize="@dimen/media_ttt_text_size"
             android:textColor="?android:attr/textColorPrimary"
             android:alpha="0.0"
diff --git a/packages/SystemUI/res/layout/media_ttt_chip_receiver.xml b/packages/SystemUI/res/layout/media_ttt_chip_receiver.xml
index 5e8b892..e079fd3 100644
--- a/packages/SystemUI/res/layout/media_ttt_chip_receiver.xml
+++ b/packages/SystemUI/res/layout/media_ttt_chip_receiver.xml
@@ -14,20 +14,25 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<!-- TODO(b/203800646): layout_marginTop doesn't seem to work on some large screens. -->
 <FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/media_ttt_receiver_chip"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
-    android:background="@drawable/media_ttt_chip_background_receiver"
     >
 
+    <com.android.systemui.media.taptotransfer.receiver.ReceiverChipRippleView
+        android:id="@+id/ripple"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        />
+
     <com.android.internal.widget.CachingIconView
         android:id="@+id/app_icon"
         android:layout_width="@dimen/media_ttt_icon_size_receiver"
         android:layout_height="@dimen/media_ttt_icon_size_receiver"
-        android:layout_gravity="center"
+        android:layout_gravity="center|bottom"
+        android:alpha="0.0"
         />
 
 </FrameLayout>
diff --git a/packages/SystemUI/res/layout/notification_icon_area.xml b/packages/SystemUI/res/layout/notification_icon_area.xml
index fa696cc..aadfae8 100644
--- a/packages/SystemUI/res/layout/notification_icon_area.xml
+++ b/packages/SystemUI/res/layout/notification_icon_area.xml
@@ -14,18 +14,9 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License
   -->
-<com.android.keyguard.AlphaOptimizedLinearLayout
+<com.android.systemui.statusbar.phone.NotificationIconContainer
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/notification_icon_area_inner"
-    android:layout_width="match_parent"
+    android:id="@+id/notificationIcons"
+    android:layout_width="wrap_content"
     android:layout_height="match_parent"
-    android:clipChildren="false">
-    <com.android.systemui.statusbar.phone.NotificationIconContainer
-        android:id="@+id/notificationIcons"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:layout_alignParentStart="true"
-        android:gravity="center_vertical"
-        android:orientation="horizontal"
-        android:clipChildren="false"/>
-</com.android.keyguard.AlphaOptimizedLinearLayout>
\ No newline at end of file
+    android:clipChildren="false"/>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/people_space_activity.xml b/packages/SystemUI/res/layout/people_space_activity.xml
index 7102375..f45cc7c 100644
--- a/packages/SystemUI/res/layout/people_space_activity.xml
+++ b/packages/SystemUI/res/layout/people_space_activity.xml
@@ -13,103 +13,11 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<LinearLayout
+<FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
-    android:id="@+id/top_level"
+    android:id="@+id/container"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical"
-    android:padding="8dp">
-    <TextView
-        android:id="@+id/select_conversation_title"
-        android:text="@string/select_conversation_title"
-        android:gravity="center"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center_horizontal"
-        android:textAppearance="@*android:style/TextAppearance.DeviceDefault.ListItem"
-        android:textColor="?android:attr/textColorPrimary"
-        android:textSize="24sp"/>
-
-    <TextView
-        android:id="@+id/select_conversation"
-        android:text="@string/select_conversation_text"
-        android:gravity="center"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center_horizontal"
-        android:textAppearance="@*android:style/TextAppearance.DeviceDefault.ListItem"
-        android:textColor="?android:attr/textColorPrimary"
-        android:textSize="16sp"
-        android:paddingVertical="24dp"
-        android:paddingHorizontal="48dp"/>
-
-    <androidx.core.widget.NestedScrollView
-        android:id="@+id/scroll_view"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-
-        <LinearLayout
-            android:id="@+id/scroll_layout"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_marginTop="16dp"
-            android:orientation="vertical">
-
-            <LinearLayout
-                android:id="@+id/priority"
-                android:orientation="vertical"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginBottom="35dp">
-                <TextView
-                    android:id="@+id/priority_header"
-                    android:text="@string/priority_conversations"
-                    android:layout_width="wrap_content"
-                    android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Notification.Title"
-                    android:textColor="?androidprv:attr/colorAccentPrimaryVariant"
-                    android:textSize="14sp"
-                    android:paddingStart="16dp"
-                    android:layout_height="wrap_content"/>
-
-                <LinearLayout
-                    android:id="@+id/priority_tiles"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:layout_marginTop="10dp"
-                    android:orientation="vertical"
-                    android:background="@drawable/rounded_bg_full_large_radius"
-                    android:clipToOutline="true">
-                </LinearLayout>
-            </LinearLayout>
-
-            <LinearLayout
-                android:id="@+id/recent"
-                android:orientation="vertical"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content">
-                <TextView
-                    android:id="@+id/recent_header"
-                    android:gravity="start"
-                    android:text="@string/recent_conversations"
-                    android:layout_width="wrap_content"
-                    android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Notification.Title"
-                    android:textColor="?androidprv:attr/colorAccentPrimaryVariant"
-                    android:textSize="14sp"
-                    android:paddingStart="16dp"
-                    android:layout_height="wrap_content"/>
-
-                <LinearLayout
-                    android:id="@+id/recent_tiles"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:layout_marginTop="10dp"
-                    android:orientation="vertical"
-                    android:background="@drawable/rounded_bg_full_large_radius"
-                    android:clipToOutline="true">
-                </LinearLayout>
-            </LinearLayout>
-        </LinearLayout>
-    </androidx.core.widget.NestedScrollView>
-</LinearLayout>
\ No newline at end of file
+    android:layout_height="match_parent">
+    <!-- The content of people_space_activity_(no|with)_conversations.xml will be added here at
+         runtime depending on the number of conversations to show. -->
+</FrameLayout>
diff --git a/packages/SystemUI/res/layout/people_space_activity_no_conversations.xml b/packages/SystemUI/res/layout/people_space_activity_no_conversations.xml
index 2e9ff07..a97c90c 100644
--- a/packages/SystemUI/res/layout/people_space_activity_no_conversations.xml
+++ b/packages/SystemUI/res/layout/people_space_activity_no_conversations.xml
@@ -16,7 +16,7 @@
 <RelativeLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
-    android:id="@+id/top_level"
+    android:id="@+id/top_level_no_conversations"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:padding="24dp"
@@ -54,7 +54,6 @@
         android:layout_height="wrap_content"
         android:layout_gravity="center"
         android:background="@drawable/rounded_bg_full_large_radius"
-        android:onClick="dismissActivity"
         android:text="@string/got_it"
         android:textColor="?androidprv:attr/textColorOnAccent"
         android:layout_marginBottom="60dp"
diff --git a/packages/SystemUI/res/layout/people_space_activity_with_conversations.xml b/packages/SystemUI/res/layout/people_space_activity_with_conversations.xml
new file mode 100644
index 0000000..2384963
--- /dev/null
+++ b/packages/SystemUI/res/layout/people_space_activity_with_conversations.xml
@@ -0,0 +1,115 @@
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
+    android:id="@+id/top_level_with_conversations"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    android:padding="8dp">
+    <TextView
+        android:id="@+id/select_conversation_title"
+        android:text="@string/select_conversation_title"
+        android:gravity="center"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_horizontal"
+        android:textAppearance="@*android:style/TextAppearance.DeviceDefault.ListItem"
+        android:textColor="?android:attr/textColorPrimary"
+        android:textSize="24sp"/>
+
+    <TextView
+        android:id="@+id/select_conversation"
+        android:text="@string/select_conversation_text"
+        android:gravity="center"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_horizontal"
+        android:textAppearance="@*android:style/TextAppearance.DeviceDefault.ListItem"
+        android:textColor="?android:attr/textColorPrimary"
+        android:textSize="16sp"
+        android:paddingVertical="24dp"
+        android:paddingHorizontal="48dp"/>
+
+    <androidx.core.widget.NestedScrollView
+        android:id="@+id/scroll_view"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <LinearLayout
+            android:id="@+id/scroll_layout"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="16dp"
+            android:orientation="vertical">
+
+            <LinearLayout
+                android:id="@+id/priority"
+                android:orientation="vertical"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginBottom="35dp">
+                <TextView
+                    android:id="@+id/priority_header"
+                    android:text="@string/priority_conversations"
+                    android:layout_width="wrap_content"
+                    android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Notification.Title"
+                    android:textColor="?androidprv:attr/colorAccentPrimaryVariant"
+                    android:textSize="14sp"
+                    android:paddingStart="16dp"
+                    android:layout_height="wrap_content"/>
+
+                <LinearLayout
+                    android:id="@+id/priority_tiles"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="10dp"
+                    android:orientation="vertical"
+                    android:background="@drawable/rounded_bg_full_large_radius"
+                    android:clipToOutline="true">
+                </LinearLayout>
+            </LinearLayout>
+
+            <LinearLayout
+                android:id="@+id/recent"
+                android:orientation="vertical"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+                <TextView
+                    android:id="@+id/recent_header"
+                    android:gravity="start"
+                    android:text="@string/recent_conversations"
+                    android:layout_width="wrap_content"
+                    android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Notification.Title"
+                    android:textColor="?androidprv:attr/colorAccentPrimaryVariant"
+                    android:textSize="14sp"
+                    android:paddingStart="16dp"
+                    android:layout_height="wrap_content"/>
+
+                <LinearLayout
+                    android:id="@+id/recent_tiles"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="10dp"
+                    android:orientation="vertical"
+                    android:background="@drawable/rounded_bg_full_large_radius"
+                    android:clipToOutline="true">
+                </LinearLayout>
+            </LinearLayout>
+        </LinearLayout>
+    </androidx.core.widget.NestedScrollView>
+</LinearLayout>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/people_space_tile_view.xml b/packages/SystemUI/res/layout/people_space_tile_view.xml
index 2a2c35d..b0599ca 100644
--- a/packages/SystemUI/res/layout/people_space_tile_view.xml
+++ b/packages/SystemUI/res/layout/people_space_tile_view.xml
@@ -37,8 +37,8 @@
 
             <ImageView
                 android:id="@+id/tile_view_person_icon"
-                android:layout_width="52dp"
-                android:layout_height="52dp" />
+                android:layout_width="@dimen/avatar_size_for_medium"
+                android:layout_height="@dimen/avatar_size_for_medium" />
 
             <LinearLayout
                 android:orientation="horizontal"
diff --git a/packages/SystemUI/res/layout/qs_tile_label.xml b/packages/SystemUI/res/layout/qs_tile_label.xml
index 77523ec9..c124aea 100644
--- a/packages/SystemUI/res/layout/qs_tile_label.xml
+++ b/packages/SystemUI/res/layout/qs_tile_label.xml
@@ -28,7 +28,7 @@
     android:importantForAccessibility="no"
     android:layout_gravity="center_vertical | start">
 
-    <com.android.systemui.util.SafeMarqueeTextView
+    <com.android.systemui.util.DelayableMarqueeTextView
         android:id="@+id/tile_label"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
@@ -41,7 +41,7 @@
         android:importantForAccessibility="no"
         android:textAppearance="@style/TextAppearance.QS.TileLabel"/>
 
-    <com.android.systemui.util.SafeMarqueeTextView
+    <com.android.systemui.util.DelayableMarqueeTextView
         android:id="@+id/app_label"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
diff --git a/packages/SystemUI/res/layout/screen_record_dialog.xml b/packages/SystemUI/res/layout/screen_record_dialog.xml
index f57d65a..ab38dd2 100644
--- a/packages/SystemUI/res/layout/screen_record_dialog.xml
+++ b/packages/SystemUI/res/layout/screen_record_dialog.xml
@@ -148,6 +148,20 @@
                     android:layout_width="0dp"
                     android:layout_height="match_parent"
                     android:layout_weight="1"/>
+
+                <!-- Temporary entrypoint for the partial screensharing used for teamfooding -->
+                <!-- TODO(b/236838395) remove this and use redesigned dialog -->
+                <TextView
+                    android:id="@+id/button_app"
+                    android:visibility="gone"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="0"
+                    android:layout_gravity="end"
+                    android:layout_marginEnd="8dp"
+                    android:text="App"
+                    style="@style/Widget.Dialog.Button.BorderButton" />
+
                 <TextView
                     android:id="@+id/button_start"
                     android:layout_width="wrap_content"
diff --git a/packages/SystemUI/res/layout/status_bar.xml b/packages/SystemUI/res/layout/status_bar.xml
index deab1eb..e281511 100644
--- a/packages/SystemUI/res/layout/status_bar.xml
+++ b/packages/SystemUI/res/layout/status_bar.xml
@@ -47,52 +47,63 @@
         android:paddingStart="@dimen/status_bar_padding_start"
         android:paddingEnd="@dimen/status_bar_padding_end"
         android:paddingTop="@dimen/status_bar_padding_top"
-        android:orientation="horizontal"
-        >
+        android:orientation="horizontal">
+
+        <!-- Container for the entire start half of the status bar. It will always use the same
+             width, independent of the number of visible children and sub-children. -->
         <FrameLayout
+            android:id="@+id/status_bar_start_side_container"
             android:layout_height="match_parent"
             android:layout_width="0dp"
             android:layout_weight="1">
 
-            <include layout="@layout/heads_up_status_bar_layout" />
+            <!-- Container that is wrapped around the views on the start half of the status bar.
+                 Its width will change with the number of visible children and sub-children.
+                 It is useful when we want to know the visible bounds of the content. -->
+            <FrameLayout
+                android:id="@+id/status_bar_start_side_content"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:clipChildren="false">
 
-            <!-- The alpha of the left side is controlled by PhoneStatusBarTransitions, and the
-             individual views are controlled by StatusBarManager disable flags DISABLE_CLOCK and
-             DISABLE_NOTIFICATION_ICONS, respectively -->
-            <LinearLayout
-                android:id="@+id/status_bar_left_side"
-                android:layout_height="match_parent"
-                android:layout_width="match_parent"
-                android:clipChildren="false"
-            >
-                <ViewStub
-                    android:id="@+id/operator_name"
-                    android:layout_width="wrap_content"
-                    android:layout_height="match_parent"
-                    android:layout="@layout/operator_name" />
+                <include layout="@layout/heads_up_status_bar_layout" />
 
-                <com.android.systemui.statusbar.policy.Clock
-                    android:id="@+id/clock"
-                    android:layout_width="wrap_content"
-                    android:layout_height="match_parent"
-                    android:textAppearance="@style/TextAppearance.StatusBar.Clock"
-                    android:singleLine="true"
-                    android:paddingStart="@dimen/status_bar_left_clock_starting_padding"
-                    android:paddingEnd="@dimen/status_bar_left_clock_end_padding"
-                    android:gravity="center_vertical|start"
-                />
+                <!-- The alpha of the start side is controlled by PhoneStatusBarTransitions, and the
+                     individual views are controlled by StatusBarManager disable flags DISABLE_CLOCK
+                     and DISABLE_NOTIFICATION_ICONS, respectively -->
+                <LinearLayout
+                    android:id="@+id/status_bar_start_side_except_heads_up"
+                    android:layout_height="wrap_content"
+                    android:layout_width="match_parent"
+                    android:clipChildren="false">
+                    <ViewStub
+                        android:id="@+id/operator_name"
+                        android:layout_width="wrap_content"
+                        android:layout_height="match_parent"
+                        android:layout="@layout/operator_name" />
 
-                <include layout="@layout/ongoing_call_chip" />
+                    <com.android.systemui.statusbar.policy.Clock
+                        android:id="@+id/clock"
+                        android:layout_width="wrap_content"
+                        android:layout_height="match_parent"
+                        android:textAppearance="@style/TextAppearance.StatusBar.Clock"
+                        android:singleLine="true"
+                        android:paddingStart="@dimen/status_bar_left_clock_starting_padding"
+                        android:paddingEnd="@dimen/status_bar_left_clock_end_padding"
+                        android:gravity="center_vertical|start"
+                    />
 
-                <com.android.systemui.statusbar.AlphaOptimizedFrameLayout
-                    android:id="@+id/notification_icon_area"
-                    android:layout_width="0dp"
-                    android:layout_height="match_parent"
-                    android:layout_weight="1"
-                    android:orientation="horizontal"
-                    android:clipChildren="false"/>
+                    <include layout="@layout/ongoing_call_chip" />
 
-            </LinearLayout>
+                    <com.android.systemui.statusbar.AlphaOptimizedFrameLayout
+                        android:id="@+id/notification_icon_area"
+                        android:layout_width="wrap_content"
+                        android:layout_height="match_parent"
+                        android:orientation="horizontal"
+                        android:clipChildren="false"/>
+
+                </LinearLayout>
+            </FrameLayout>
         </FrameLayout>
 
         <!-- Space should cover the notch (if it exists) and let other views lay out around it -->
@@ -103,42 +114,57 @@
             android:gravity="center_horizontal|center_vertical"
         />
 
-        <com.android.keyguard.AlphaOptimizedLinearLayout android:id="@+id/system_icon_area"
+        <!-- Container for the entire end half of the status bar. It will always use the same
+             width, independent of the number of visible children and sub-children. -->
+        <FrameLayout
+            android:id="@+id/status_bar_end_side_container"
             android:layout_width="0dp"
             android:layout_height="match_parent"
             android:layout_weight="1"
-            android:orientation="horizontal"
-            android:gravity="center_vertical|end"
-            >
+            android:clipChildren="false">
 
-            <com.android.systemui.statusbar.phone.userswitcher.StatusBarUserSwitcherContainer
-                android:id="@+id/user_switcher_container"
+            <!-- Container that is wrapped around the views on the end half of the
+                 status bar. Its width will change with the number of visible children and
+                 sub-children.
+                 It is useful when we want know the visible bounds of the content.-->
+            <com.android.keyguard.AlphaOptimizedLinearLayout
+                android:id="@+id/status_bar_end_side_content"
                 android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:gravity="center"
+                android:layout_height="match_parent"
+                android:layout_gravity="end"
                 android:orientation="horizontal"
-                android:paddingTop="4dp"
-                android:paddingBottom="4dp"
-                android:paddingStart="8dp"
-                android:paddingEnd="8dp"
-                android:layout_marginEnd="16dp"
-                android:background="@drawable/status_bar_user_chip_bg"
-                android:visibility="visible" >
-                <ImageView android:id="@+id/current_user_avatar"
-                    android:layout_width="@dimen/multi_user_avatar_keyguard_size"
-                    android:layout_height="@dimen/multi_user_avatar_keyguard_size"
-                    android:scaleType="centerInside"
-                    android:paddingEnd="4dp" />
+                android:gravity="center_vertical|end"
+                android:clipChildren="false">
 
-                <TextView android:id="@+id/current_user_name"
+                <com.android.systemui.statusbar.phone.userswitcher.StatusBarUserSwitcherContainer
+                    android:id="@+id/user_switcher_container"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:textAppearance="@style/TextAppearance.StatusBar.Clock"
-                    />
-            </com.android.systemui.statusbar.phone.userswitcher.StatusBarUserSwitcherContainer>
+                    android:gravity="center"
+                    android:orientation="horizontal"
+                    android:paddingTop="4dp"
+                    android:paddingBottom="4dp"
+                    android:paddingStart="8dp"
+                    android:paddingEnd="8dp"
+                    android:layout_marginEnd="16dp"
+                    android:background="@drawable/status_bar_user_chip_bg"
+                    android:visibility="visible" >
+                    <ImageView android:id="@+id/current_user_avatar"
+                        android:layout_width="@dimen/multi_user_avatar_keyguard_size"
+                        android:layout_height="@dimen/multi_user_avatar_keyguard_size"
+                        android:scaleType="centerInside"
+                        android:paddingEnd="4dp" />
 
-            <include layout="@layout/system_icons" />
-        </com.android.keyguard.AlphaOptimizedLinearLayout>
+                    <TextView android:id="@+id/current_user_name"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:textAppearance="@style/TextAppearance.StatusBar.Clock"
+                        />
+                </com.android.systemui.statusbar.phone.userswitcher.StatusBarUserSwitcherContainer>
+
+                <include layout="@layout/system_icons" />
+            </com.android.keyguard.AlphaOptimizedLinearLayout>
+        </FrameLayout>
     </LinearLayout>
 
     <ViewStub
diff --git a/packages/SystemUI/res/layout/status_bar_expanded.xml b/packages/SystemUI/res/layout/status_bar_expanded.xml
index 4d5bf53..6423a50 100644
--- a/packages/SystemUI/res/layout/status_bar_expanded.xml
+++ b/packages/SystemUI/res/layout/status_bar_expanded.xml
@@ -18,7 +18,7 @@
 -->
 
 
-<com.android.systemui.statusbar.phone.NotificationPanelView
+<com.android.systemui.shade.NotificationPanelView
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:systemui="http://schemas.android.com/apk/res-auto"
     android:id="@+id/notification_panel"
@@ -67,7 +67,7 @@
 
     </com.android.keyguard.LockIconView>
 
-    <com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer
+    <com.android.systemui.shade.NotificationsQuickSettingsContainer
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_gravity="@integer/notification_panel_layout_gravity"
@@ -150,11 +150,11 @@
             android:text="@string/tap_again"
             android:visibility="gone"
         />
-    </com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer>
+    </com.android.systemui.shade.NotificationsQuickSettingsContainer>
 
     <FrameLayout
         android:id="@+id/preview_container"
         android:layout_width="match_parent"
         android:layout_height="match_parent">
     </FrameLayout>
-</com.android.systemui.statusbar.phone.NotificationPanelView>
+</com.android.systemui.shade.NotificationPanelView>
diff --git a/packages/SystemUI/res/layout/super_notification_shade.xml b/packages/SystemUI/res/layout/super_notification_shade.xml
index 60860ba..86f8ce2 100644
--- a/packages/SystemUI/res/layout/super_notification_shade.xml
+++ b/packages/SystemUI/res/layout/super_notification_shade.xml
@@ -18,7 +18,7 @@
 -->
 
 <!-- This is the notification shade window. -->
-<com.android.systemui.statusbar.phone.NotificationShadeWindowView
+<com.android.systemui.shade.NotificationShadeWindowView
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:sysui="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
@@ -114,4 +114,4 @@
         android:importantForAccessibility="no"
         sysui:ignoreRightInset="true"
     />
-</com.android.systemui.statusbar.phone.NotificationShadeWindowView>
+</com.android.systemui.shade.NotificationShadeWindowView>
diff --git a/packages/SystemUI/res/layout/user_switcher_fullscreen.xml b/packages/SystemUI/res/layout/user_switcher_fullscreen.xml
index 0f2d372..c2c79cb 100644
--- a/packages/SystemUI/res/layout/user_switcher_fullscreen.xml
+++ b/packages/SystemUI/res/layout/user_switcher_fullscreen.xml
@@ -14,7 +14,7 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<androidx.constraintlayout.widget.ConstraintLayout
+<com.android.systemui.user.UserSwitcherRootView
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
@@ -68,4 +68,4 @@
       app:layout_constraintBottom_toBottomOf="parent"
       app:layout_constraintEnd_toEndOf="parent"
       app:layout_constraintHeight_min="48dp" />
-</androidx.constraintlayout.widget.ConstraintLayout>
+</com.android.systemui.user.UserSwitcherRootView>
diff --git a/packages/SystemUI/res/layout/wireless_charging_layout.xml b/packages/SystemUI/res/layout/wireless_charging_layout.xml
index 1312b41..887e3e7 100644
--- a/packages/SystemUI/res/layout/wireless_charging_layout.xml
+++ b/packages/SystemUI/res/layout/wireless_charging_layout.xml
@@ -22,7 +22,7 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
-    <com.android.systemui.statusbar.charging.ChargingRippleView
+    <com.android.systemui.ripple.RippleView
         android:id="@+id/wireless_charging_ripple"
         android:layout_width="match_parent"
         android:layout_height="match_parent"/>
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index 3eb73e0..a58c901 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Toestel is gesluit"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Skandeer tans gesig"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Stuur"</string>
-    <string name="phone_label" msgid="5715229948920451352">"maak foon oop"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"maak stembystand oop"</string>
-    <string name="camera_label" msgid="8253821920931143699">"maak kamera oop"</string>
     <string name="cancel" msgid="1089011503403416730">"Kanselleer"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Bevestig"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Probeer weer"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Sensors Af is aktief"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Verwyder alle kennisgewings."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">nog <xliff:g id="NUMBER_1">%s</xliff:g> kennisgewings binne.</item>
-      <item quantity="one">nog <xliff:g id="NUMBER_0">%s</xliff:g> kennisgewing binne.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{nog # kennisgewing binne.}other{nog # kennisgewings binne.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Skerm is in landskapsoriëntasie gesluit."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Skerm is in portretoriëntasie gesluit."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Nageregkas"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Outo-draai"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Outodraai skerm"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Ligging"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Sluimerskerm"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Kameratoegang"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Mikrofoontoegang"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Beskikbaar"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Warmkol"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Skakel tans aan …"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Databespaarder is aan"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d toestelle</item>
-      <item quantity="one">%d toestel</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# toestel}other{# toestelle}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Flitslig"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Kamera in gebruik"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Mobiele data"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Tik weer"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Swiep op om oop te maak"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Druk die onsluitikoon om oop te maak"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Ontsluit met gesig. Swiep op om oop te maak."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Ontsluit met gesig. Druk die ontsluitikoon om oop te maak."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Ontsluit met gesig. Druk om oop te maak."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Gesig is herken. Druk om oop te maak."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Wiil jy jou sessie voortsit?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Begin van voor af"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Ja, gaan voort"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Gasmodus"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Jy is in gasmodus"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"As ’n nuwe gebruiker bygevoeg word, sal gasmodus verlaat word en sal alle programme en data in die huidige gastesessie uitgevee word."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Gebruikerlimiet is bereik"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">Jy kan tot <xliff:g id="COUNT">%d</xliff:g> gebruikers byvoeg.</item>
-      <item quantity="one">Net een gebruiker kan geskep word.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Jy kan net een gebruiker skep.}other{Jy kan tot # gebruikers byvoeg.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Verwyder gebruiker?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Alle programme en data van hierdie gebruiker sal uitgevee word."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Verwyder"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Herinner my"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Ontdoen"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Sluimer vir <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d uur</item>
-      <item quantity="one">%d uur</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d minute</item>
-      <item quantity="one">%d minuut</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# uur}=2{# uur}other{# uur}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minuut}other{# minute}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Batterybespaarder"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Knoppie <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Opletberigte"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Battery"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Skermkiekies"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Algemene boodskappe"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Kitsprogramme"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Opstelling"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Berging"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Wenke"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Kitsprogramme"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"wissel"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Toestelkontroles"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Kies program om kontroles by te voeg"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> kontroles bygevoeg.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> kontrole bygevoeg.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# kontrole bygevoeg.}other{# kontroles bygevoeg.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Verwyder"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"As gunsteling gemerk"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"As gunsteling gemerk; posisie <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> toestelle gekies"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(ontkoppel)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Kan nie wissel nie. Tik om weer te probeer."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Bind nuwe toestel saam"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Koppel ’n toestel"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Maak die program oop om hierdie sessie uit te saai."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Onbekende program"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Hou op uitsaai"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Voeg teël by"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Moenie teël byvoeg nie"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Kies gebruiker"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> programme is aktief</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> program is aktief</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# app is aktief}other{# apps is aktief}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nuwe inligting"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktiewe programme"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Hierdie programme is aktief en werk, selfs wanneer jy hulle nie gebruik nie. Dit verbeter hul funksies, maar beïnvloed dalk ook batterylewe."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑fi onbeskikbaar"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Prioriteitmodus"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Wekker gestel"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Kamera is af"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mikrofoon is af"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Kamera en mikrofoon is af"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# kennisgewing}other{# kennisgewings}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Uitsaai"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Hou op om <xliff:g id="APP_NAME">%1$s</xliff:g> uit te saai?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"As jy <xliff:g id="SWITCHAPP">%1$s</xliff:g> uitsaai of die uitvoer verander, sal jou huidige uitsending stop"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Saai <xliff:g id="SWITCHAPP">%1$s</xliff:g> uit"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Verander uitvoer"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Onbekend"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EE. d MMM."</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-af/tiles_states_strings.xml b/packages/SystemUI/res/values-af/tiles_states_strings.xml
index 93d26e8..e60f233 100644
--- a/packages/SystemUI/res/values-af/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-af/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Af"</item>
     <item msgid="460891964396502657">"Aan"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Onbeskikbaar"</item>
+    <item msgid="8014986104355098744">"Af"</item>
+    <item msgid="5966994759929723339">"Aan"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index 7fa8604..6324c1b 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"መሣሪያ ተቆልፏል"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"የቅኝት ፊት"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"ላክ"</string>
-    <string name="phone_label" msgid="5715229948920451352">"ስልክ ክፈት"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"የድምጽ ረዳትን ክፈት"</string>
-    <string name="camera_label" msgid="8253821920931143699">"ካሜራ ክፈት"</string>
     <string name="cancel" msgid="1089011503403416730">"ይቅር"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"አረጋግጥ"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"እንደገና ይሞክሩ"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"ዳሳሾች ጠፍተዋል ገቢር"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"ሁሉንም ማሳወቂያዎች አጽዳ"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one">ከውስጥ ተጨማሪ <xliff:g id="NUMBER_1">%s</xliff:g> ማሳወቂያዎች።</item>
-      <item quantity="other">ከውስጥ ተጨማሪ <xliff:g id="NUMBER_1">%s</xliff:g> ማሳወቂያዎች።</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{# ተጨማሪ ማሳወቂያ ከውስጥ አለ።}one{# ተጨማሪ ማሳወቂያ ከውስጥ አለ።}other{# ተጨማሪ ማሳወቂያዎች ከውስጥ አሉ።}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"ማያ ገጽ በወርድ ገፅ አቀማመጥ ተቆልፏል።"</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"ማያ ገጽ በቁም ገፅ አቀማመጥ ተቆልፏል።"</string>
     <string name="dessert_case" msgid="9104973640704357717">"የማወራረጃ ምግቦች መያዣ"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"የካሜራ መዳረሻ"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"የማይክሮፎን መዳረሻ"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"ይገኛል"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"መገናኛ ነጥብ"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"በማብራት ላይ..."</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"ውሂብ ቆጣቢ በርቷል"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">%d መሣሪያዎች</item>
-      <item quantity="other">%d መሣሪያዎች</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# መሣሪያ}one{# መሣሪያዎች}other{# መሣሪያዎች}}"</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>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"እንደገና መታ ያድርጉ"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"ለመክፈት በጣት ወደ ላይ ጠረግ ያድርጉ"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"ለመክፈት የመክፈቻ አዶውን ይጫኑ"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"በመልክ ተከፍቷል። ለመክፈት ወደ ላይ ያንሸራትቱ።"</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"በመልክ ተከፍቷል። ለመክፈት የመክፈቻ አዶውን ይጫኑ።"</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"በመልክ ተከፍቷል። ለመክፈት ይጫኑ።"</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"መልክ ተለይቶ ታውቋል። ለመክፈት ይጫኑ።"</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"ክፍለ-ጊዜዎን መቀጠል ይፈልጋሉ?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"እንደገና ጀምር"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"አዎ፣ ቀጥል"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"የእንግዳ ሁነታ"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"በእንግዳ ሁኔታ ውስጥ ነዎት"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"አዲስ ተጠቃሚ ማከል ከእንግዳ ሁነታ ወጥቶ ሁሉንም መተግበሪያዎች እና ውሂብ አሁን ካለው የእንግዳ ክፍለ ጊዜ ይሰርዛል።"</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"የተጠቃሚ ገደብ ላይ ተደርሷል"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ተጠቃሚዎች ብቻ ናቸው ሊፈጠሩ የሚችሉት።</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ተጠቃሚዎች ብቻ ናቸው ሊፈጠሩ የሚችሉት።</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{ሊፈጠር የሚችለው አንድ ተጠቃሚ ብቻ ነው።}one{እስከ # ተጠቃሚ ድረስ ማከል ይችላሉ።}other{እስከ # ተጠቃሚዎች ድረስ ማከል ይችላሉ።}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"አስታውሰኝ"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"ቀልብስ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"ለ<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> አሸልቧል"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one"> %d ሰዓቶች</item>
-      <item quantity="other"> %d ሰዓቶች</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one"> %d ደቂቃዎች</item>
-      <item quantity="other"> %d ደቂቃዎች</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# ሰዓት}=2{# ሰዓታት}one{# ሰዓት}other{# ሰዓታት}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# ደቂቃ}one{# ደቂቃ}other{# ደቂቃዎች}}"</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">"መነሻ"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"ማንቂያዎች"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"ባትሪ"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"ቅጽበታዊ ገጽ እይታዎች"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"አጠቃላይ መልዕክቶች"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"ቅጽበታዊ መተግበሪያዎች"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"ውቅረት"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"ማከማቻ"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"ፍንጮች"</string>
     <string name="instant_apps" msgid="8337185853050247304">"የቅጽበት መተግበሪያዎች"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"ቀያይር"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"የመሣሪያ መቆጣጠሪያዎች"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"መቆጣጠሪያዎችን ለማከል መተግበሪያ ይምረጡ"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> ቁጥጥሮች ታክለዋል።</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> ቁጥጥሮች ታክለዋል።</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# ቁጥጥር ታክሏል።}one{# ቁጥጥር ታክሏል።}other{# ቁጥጥሮች ታክለዋል።}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"ተወግዷል"</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>
@@ -846,7 +831,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="9099497976087485862">"አዲስ መሣሪያ ያጣምሩ"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"አንድ መሣሪያ ያገናኙ"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"ይህን ክፍለ ጊዜ cast ለማድረግ፣ እባክዎ መተግበሪያውን ይክፈቱ።"</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"የማይታወቅ መተግበሪያ"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Cast ማድረግ አቁም"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"ሰቅ አክል"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"ሰቅ አታክል"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"ተጠቃሚን ይምረጡ"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> መተግበሪያዎች ንቁ ናቸው</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> መተግበሪያዎች ንቁ ናቸው</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi አይገኝም"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"የቅድሚያ ሁነታ"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"ማንቂያ ተቀናብሯል"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"ካሜራ ጠፍቷል"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"ማይክሮፎን ጠፍቷል"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"ካሜራ እና ማይክሮፎን ጠፍተዋል"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# ማሳወቂያ}one{# ማሳወቂያዎች}other{# ማሳወቂያዎች}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>፣ <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"በማሰራጨት ላይ"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"<xliff:g id="APP_NAME">%1$s</xliff:g>ን ማሰራጨት ይቁም?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"<xliff:g id="SWITCHAPP">%1$s</xliff:g>ን ካሰራጩ ወይም ውፅዓትን ከቀየሩ የአሁኑ ስርጭትዎ ይቆማል"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> ያሰራጩ"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"ውፅዓትን ይቀይሩ"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"ያልታወቀ"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE፣ MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-am/tiles_states_strings.xml b/packages/SystemUI/res/values-am/tiles_states_strings.xml
index 12be1ae..bbf2d23 100644
--- a/packages/SystemUI/res/values-am/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-am/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"አጥፋ"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index fdb89271..92feccb 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"الجهاز مُقفل."</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"مسح الوجه"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"إرسال"</string>
-    <string name="phone_label" msgid="5715229948920451352">"فتح الهاتف"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"فتح المساعد الصوتي"</string>
-    <string name="camera_label" msgid="8253821920931143699">"فتح الكاميرا"</string>
     <string name="cancel" msgid="1089011503403416730">"إلغاء"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"تأكيد"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"إعادة المحاولة"</string>
@@ -205,14 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"أجهزة الاستشعار غير مفعّلة"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"محو جميع الإشعارات."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="zero"><xliff:g id="NUMBER_1">%s</xliff:g> إشعار آخر بداخل المجموعة.</item>
-      <item quantity="two">إشعاران (<xliff:g id="NUMBER_1">%s</xliff:g>) آخران بداخل المجموعة.</item>
-      <item quantity="few"><xliff:g id="NUMBER_1">%s</xliff:g> إشعارات أخرى بداخل المجموعة.</item>
-      <item quantity="many"><xliff:g id="NUMBER_1">%s</xliff:g> إشعارًا آخر بداخل المجموعة.</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> إشعار آخر بداخل المجموعة.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> إشعار آخر بداخل المجموعة.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{إشعار واحد آخر بداخل المجموعة.}zero{# إشعار آخر بداخل المجموعة.}two{إشعاران آخران بداخل المجموعة.}few{# إشعارات أخرى بداخل المجموعة.}many{# إشعارًا آخر بداخل المجموعة.}other{# إشعار آخر بداخل المجموعة.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"تم قفل الشاشة في الاتجاه الأفقي."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"تم قفل الشاشة في الاتجاه العمودي."</string>
     <string name="dessert_case" msgid="9104973640704357717">"حالة الحلويات"</string>
@@ -230,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"الوصول إلى الكاميرا"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"الوصول إلى الميكروفون"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"متاح"</string>
@@ -259,14 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"نقطة اتصال"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"جارٍ التفعيل…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"توفير البيانات مفعّل"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="zero">‏%d جهاز</item>
-      <item quantity="two">‏جهازان (%d)</item>
-      <item quantity="few">‏%d أجهزة</item>
-      <item quantity="many">‏%d جهازًا</item>
-      <item quantity="other">‏%d جهاز</item>
-      <item quantity="one">‏جهاز واحد (%d)</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{جهاز واحد}zero{# جهاز}two{جهازان}few{# أجهزة}many{# جهازًا}other{# جهاز}}"</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>
@@ -323,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"انقر مرة أخرى"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"يمكنك الفتح بالتمرير سريعًا لأعلى."</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"اضغط على رمز فتح القفل لفتح قفل الشاشة."</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"تم فتح قفل جهازك عند تقريبه من وجهك. مرِّر سريعًا للأعلى لفتح الجهاز."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"تم فتح القفل بالتعرّف على وجهك. لفتح الجهاز، اضغط على رمز فتح القفل."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"تم فتح قفل جهازك عند تقريبه من وجهك. اضغط لفتح الجهاز."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"تم التعرّف على الوجه. اضغط لفتح الجهاز."</string>
@@ -359,15 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"هل تريد متابعة جلستك؟"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"البدء من جديد"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"نعم، متابعة"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"وضع الضيف"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"أنت تستخدِم وضع الضيف."</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"ستؤدي إضافة مُستخدِم جديد إلى الخروج من وضع الضيف وحذف كل التطبيقات والبيانات من جلسة الضيف الحالية."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"تم الوصول إلى أقصى عدد للمستخدمين"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="zero">يمكنك إضافة ما يصل إلى <xliff:g id="COUNT">%d</xliff:g> مستخدم.</item>
-      <item quantity="two">يمكنك إضافة ما يصل إلى مستخدمينِ (<xliff:g id="COUNT">%d</xliff:g>).</item>
-      <item quantity="few">يمكنك إضافة ما يصل إلى <xliff:g id="COUNT">%d</xliff:g> مستخدمين.</item>
-      <item quantity="many">يمكنك إضافة ما يصل إلى <xliff:g id="COUNT">%d</xliff:g> مستخدمًا.</item>
-      <item quantity="other">يمكنك إضافة ما يصل إلى <xliff:g id="COUNT">%d</xliff:g> مستخدم.</item>
-      <item quantity="one">يمكن إنشاء مستخدم واحد فقط.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{يمكن إنشاء مستخدم واحد فقط.}zero{يمكنك إضافة ما يصل إلى # مستخدم}two{يمكنك إضافة ما يصل إلى مستخدمَين}few{يمكنك إضافة ما يصل إلى # مستخدمِين}many{يمكنك إضافة ما يصل إلى # مستخدمًا}other{يمكنك إضافة ما يصل إلى # مستخدم}}"</string>
     <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>
@@ -553,22 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"تذكيري"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"تراجع"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"تم تأجيل الإشعار لمدة <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="zero">‏%d ساعة</item>
-      <item quantity="two">‏ساعتان (%d)</item>
-      <item quantity="few">‏%d ساعات</item>
-      <item quantity="many">‏%d ساعة</item>
-      <item quantity="other">‏%d ساعة</item>
-      <item quantity="one">ساعة واحدة</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="zero">‏%d دقيقة</item>
-      <item quantity="two">‏دقيقتان (%d)</item>
-      <item quantity="few">‏%d دقائق</item>
-      <item quantity="many">‏%d دقيقة</item>
-      <item quantity="other">‏%d دقيقة</item>
-      <item quantity="one">دقيقة واحدة</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{ساعة واحدة}=2{ساعتان}zero{# ساعة}few{# ساعات}many{# ساعةً}other{# ساعة}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{دقيقة واحدة}zero{# دقيقة}two{دقيقتان}few{# دقائق}many{# دقيقةً}other{# دقيقة}}"</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>
@@ -717,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"التنبيهات"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"البطارية"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"لقطات الشاشة"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"رسائل عامة"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"التطبيقات الفورية"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"عملية الإعداد"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"مساحة التخزين"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"تلميحات"</string>
     <string name="instant_apps" msgid="8337185853050247304">"التطبيقات الفورية"</string>
@@ -791,14 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"إيقاف/تفعيل"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"التحكم بالجهاز"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"اختيار تطبيق لإضافة عناصر التحكّم"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="zero">تمت إضافة <xliff:g id="NUMBER_1">%s</xliff:g> عنصر تحكّم.</item>
-      <item quantity="two">تمت إضافة عنصرَي تحكّم (<xliff:g id="NUMBER_1">%s</xliff:g>).</item>
-      <item quantity="few">تمت إضافة <xliff:g id="NUMBER_1">%s</xliff:g> عناصر تحكّم.</item>
-      <item quantity="many">تمت إضافة <xliff:g id="NUMBER_1">%s</xliff:g> عنصر تحكّم.</item>
-      <item quantity="other">تمت إضافة <xliff:g id="NUMBER_1">%s</xliff:g> عنصر تحكّم.</item>
-      <item quantity="one">تمت إضافة عنصر تحكّم واحد (<xliff:g id="NUMBER_0">%s</xliff:g>).</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{تمت إضافة عنصر تحكّم واحد.}zero{تمت إضافة # عنصر تحكّم.}two{تمت إضافة عنصرَي تحكّم.}few{تمت إضافة # عناصر تحكّم.}many{تمت إضافة # عنصر تحكّم.}other{تمت إضافة # عنصر تحكّم.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"تمت الإزالة"</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>
@@ -870,7 +831,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="9099497976087485862">"إقران جهاز جديد"</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>
@@ -955,14 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"إضافة المربّع"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"عدم إضافة المربّع"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"اختيار المستخدم"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="zero"><xliff:g id="COUNT_1">%s</xliff:g> تطبيق نشط</item>
-      <item quantity="two">تطبيقَان نشطَان (<xliff:g id="COUNT_1">%s</xliff:g>)</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%s</xliff:g> تطبيقات نشطة</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%s</xliff:g> تطبيقًا نشطًا</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> تطبيق نشط</item>
-      <item quantity="one">تطبيق واحد نشط (<xliff:g id="COUNT_0">%s</xliff:g>)</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{تطبيق واحد نشط}zero{# تطبيق نشط}two{تطبيقَان نشطَان}few{# تطبيقات نشطة}many{# تطبيقًا نشطًا}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>
@@ -989,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"‏شبكة Wi‑Fi غير متاحة"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"وضع الأولوية"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"تم ضبط المنبه."</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"الكاميرا غير مفعّلة"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"الميكروفون غير مفعّل"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"الكاميرا والميكروفون غير مفعّلين."</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{إشعار واحد}zero{# إشعار}two{إشعاران}few{# إشعارات}many{# إشعارًا}other{# إشعار}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>، <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"البث"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"هل تريد إيقاف بث تطبيق <xliff:g id="APP_NAME">%1$s</xliff:g>؟"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"إذا أجريت بث تطبيق <xliff:g id="SWITCHAPP">%1$s</xliff:g> أو غيَّرت جهاز الإخراج، سيتوقَف البث الحالي."</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"بث تطبيق <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"تغيير جهاز الإخراج"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"غير معروف"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"‏EEE،‏ d‏ MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ar/tiles_states_strings.xml b/packages/SystemUI/res/values-ar/tiles_states_strings.xml
index b4fb760..44b58f9 100644
--- a/packages/SystemUI/res/values-ar/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ar/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"غير مفعّل"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml
index 73166e9..784a7d9 100644
--- a/packages/SystemUI/res/values-as/strings.xml
+++ b/packages/SystemUI/res/values-as/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"ডিভাইচটো লক হৈ আছে"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"চেহেৰা স্কেন কৰি থকা হৈছে"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"পঠিয়াওক"</string>
-    <string name="phone_label" msgid="5715229948920451352">"ফ\'ন খোলক"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"কণ্ঠধ্বনিৰে সহায় খোলক"</string>
-    <string name="camera_label" msgid="8253821920931143699">"কেমেৰা খোলক"</string>
     <string name="cancel" msgid="1089011503403416730">"বাতিল কৰক"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"নিশ্চিত কৰক"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"আকৌ চেষ্টা কৰক"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"ছেন্সৰ অফ সক্ৰিয় কৰা আছে"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"আটাইবোৰ জাননী মচক৷"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one"> ভিতৰত আৰু <xliff:g id="NUMBER_1">%s</xliff:g>টা জাননী আছে।</item>
-      <item quantity="other"> ভিতৰত আৰু <xliff:g id="NUMBER_1">%s</xliff:g>টা জাননী আছে।</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{ভিতৰত আৰু # টা জাননী আছে।}one{ভিতৰত আৰু # টা জাননী আছে।}other{ভিতৰত আৰু # টা জাননী আছে।}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"স্ক্ৰীন লেণ্ডস্কে\'প দিশত লক কৰা হ’ল।"</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"স্ক্ৰীন প\'ৰ্ট্ৰেইট দিশত লক কৰা হ’ল।"</string>
     <string name="dessert_case" msgid="9104973640704357717">"মিষ্টান্ন ভাণ্ডাৰ"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"কেমেৰাৰ এক্সেছ"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"মাইকৰ এক্সেছ"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"উপলব্ধ"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"হটস্পট"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"অন কৰি থকা হৈছে…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"ডেটা সঞ্চয়কাৰী অন হৈ আছে"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">%d ডিভাইচ</item>
-      <item quantity="other">%d ডিভাইচ</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# টা ডিভাইচ}one{# টা ডিভাইচ}other{# টা ডিভাইচ}}"</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>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"পুনৰ টিপক"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"খুলিবলৈ ওপৰলৈ ছোৱাইপ কৰক"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"খুলিবলৈ আনলক কৰক চিহ্নটোত টিপক"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"মুখাৱয়বৰ জৰিয়তে আনলক কৰা। খুলিবলৈ ওপৰলৈ ছোৱাইপ কৰক।"</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"মুখাৱয়বৰ জৰিয়তে আনলক কৰা হৈছে। খুলিবলৈ আনলক কৰক চিহ্নটোত টিপক।"</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"মুখাৱয়বৰ জৰিয়তে আনলক কৰা হৈছে। খুলিবলৈ টিপক।"</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"মুখাৱয়ব চিনাক্ত কৰা হৈছে। খুলিবলৈ টিপক।"</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"আপুনি আপোনাৰ ছেশ্বন অব্যাহত ৰাখিব বিচাৰেনে?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"আকৌ আৰম্ভ কৰক"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"হয়, অব্যাহত ৰাখক"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"অতিথি ম’ড"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"আপুনি অতিথি ম’ডত আছে"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"এগৰাকী নতুন ব্যৱহাৰকাৰীক যোগ দিয়াটোৱে অতিথি ম’ডৰ পৰা বাহিৰ কৰিব আৰু বৰ্তমানৰ অতিথিৰ ছেশ্বনটোৰ পৰা আটাইবোৰ এপ্ আৰু ডেটা মচিব।"</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"অধিকতম ব্যৱহাৰকাৰী সৃষ্টি কৰা হ’ল"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">আপুনি <xliff:g id="COUNT">%d</xliff:g> জনলৈকে ব্যৱহাৰকাৰী যোগ কৰিব পাৰে।</item>
-      <item quantity="other">আপুনি <xliff:g id="COUNT">%d</xliff:g> জনলৈকে ব্যৱহাৰকাৰী যোগ কৰিব পাৰে।</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{মাত্ৰ এগৰাকী ব্যৱহাৰকাৰী সৃষ্টি কৰিব পাৰি।}one{আপুনি # গৰাকী পৰ্যন্ত ব্যৱহাৰকাৰী যোগ দিব পাৰে।}other{আপুনি # গৰাকী পৰ্যন্ত ব্যৱহাৰকাৰী যোগ দিব পাৰে।}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"মোক মনত পেলাই দিব"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"আনডু কৰক"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g>ৰ বাবে স্নুজ কৰক"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one"> %d ঘণ্টা</item>
-      <item quantity="other"> %d ঘণ্টা</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one"> %d মিনিট</item>
-      <item quantity="other"> %d মিনিট</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# ঘণ্টা}=2{# ঘণ্টা}one{# ঘণ্টা}other{# ঘণ্টা}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# মিনিট}one{# মিনিট}other{# মিনিট}}"</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">"হ\'ম"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"সতৰ্কবার্তাসমূহ"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"বেটাৰী"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"স্ক্ৰীণশ্বটসমূহ"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"সাধাৰণ বার্তাসমূহ"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"তাৎক্ষণিক এপ্"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"ছেটআপ"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"ষ্ট\'ৰেজ"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"ইংগিতবোৰ"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant Apps"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"ট’গল কৰক"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"ডিভাইচৰ নিয়ন্ত্ৰণসমূহ"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"নিয়ন্ত্ৰণসমূহ যোগ কৰিবলৈ এপ্‌ বাছনি কৰক"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> টা নিয়ন্ত্ৰণ যোগ কৰা হ’ল।</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> টা নিয়ন্ত্ৰণ যোগ কৰা হ’ল।</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# টা নিয়ন্ত্ৰণ যোগ দিয়া হৈছে।}one{# টা নিয়ন্ত্ৰণ যোগ দিয়া হৈছে।}other{# টা নিয়ন্ত্ৰণ যোগ দিয়া হৈছে।}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"আঁতৰোৱা হ’ল"</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>
@@ -846,7 +831,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="9099497976087485862">"নতুন ডিভাইচ পেয়াৰ কৰক"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"টাইল যোগ দিয়ক"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"টাইল যোগ নিদিব"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"ব্যৱহাৰকাৰী বাছনি কৰক"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> টা এপ্‌ সক্ৰিয় হৈ আছে</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> টা এপ্‌ সক্ৰিয় হৈ আছে</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"ৱাই-ফাই উপলব্ধ নহয়"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"অগ্ৰাধিকাৰ ম’ড"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"এলাৰ্ম ছেট কৰা হ’ল"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"কেমেৰা অফ আছে"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"মাইক অফ আছে"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"কেমেৰা আৰু মাইক অফ হৈ আছে"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# টা জাননী}one{# টা জাননী}other{# টা জাননী}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"সম্প্ৰচাৰণ"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ সম্প্ৰচাৰ কৰা বন্ধ কৰিবনে?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"যদি আপুনি <xliff:g id="SWITCHAPP">%1$s</xliff:g>ৰ সম্প্ৰচাৰ কৰে অথবা আউটপুট সলনি কৰে, তেন্তে, আপোনাৰ বৰ্তমানৰ সম্প্ৰচাৰ বন্ধ হৈ যাব"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> সম্প্ৰচাৰ কৰক"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"আউটপুট সলনি কৰক"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"অজ্ঞাত"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-as/tiles_states_strings.xml b/packages/SystemUI/res/values-as/tiles_states_strings.xml
index 7767cfc..3145341 100644
--- a/packages/SystemUI/res/values-as/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-as/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"অফ"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml
index 5bc2895..bbf3c89 100644
--- a/packages/SystemUI/res/values-az/strings.xml
+++ b/packages/SystemUI/res/values-az/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Cihaz kilidlənib"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Üzün skan edilməsi"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Göndərin"</string>
-    <string name="phone_label" msgid="5715229948920451352">"telefonu açın"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"səs yardımçısını açın"</string>
-    <string name="camera_label" msgid="8253821920931143699">"kemaranı açın"</string>
     <string name="cancel" msgid="1089011503403416730">"Ləğv edin"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Təsdiq"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Yenidən cəhd edin"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"\"Deaktiv sensorlar\" aktivdir"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Bütün bildirişləri sil."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">Daxilində daha <xliff:g id="NUMBER_1">%s</xliff:g> bildiriş.</item>
-      <item quantity="one">Daxilində daha <xliff:g id="NUMBER_0">%s</xliff:g> bildiriş.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Daha # bildiriş daxildir.}other{Daha # bildiriş daxildir.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Ekran landşaft orientasiyasında kilidlənib."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Ekran portret orientasiyasında kilidlənib."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Desert Qabı"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Avtodönüş"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Ekranın avtomatik dönməsi"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Məkan"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Ekran qoruyucu"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Kameraya giriş"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Mikrofona giriş"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Əlçatan"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Hotspot"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Aktiv edilir..."</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Trafikə qənaət edilir"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d cihaz</item>
-      <item quantity="one">%d cihaz</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# cihaz}other{# cihaz}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Fənər"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Kamera istifadə olunur"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Mobil data"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Yenidən toxunun"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Açmaq üçün yuxarı sürüşdürün"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"\"Kilidi aç\" ikonasına basıb açın"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Üz ilə kiliddən çıxarılıb. Açmaq üçün yuxarı sürüşdürün."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Üzlə kilidi açılıb. \"Kilidi aç\" ikonasına basıb açın."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Üz ilə kiliddən çıxarılıb. Açmaq üçün basın."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Üz tanınıb. Açmaq üçün basın."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Sessiya davam etsin?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Yenidən başlayın"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Bəli, davam edin"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Qonaq rejimi"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Qonaq rejimindəsiniz"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Yeni istifadəçi əlavə edildikdə qonaq rejimindən çıxılacaq və cari qonaq sessiyasındakı bütün tətbiqlər və data silinəcək."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"İstifadəçi limitinə çatmısınız"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">Maksimum <xliff:g id="COUNT">%d</xliff:g> istifadəçi əlavə edə bilərsiniz.</item>
-      <item quantity="one">Yalnız bir istifadəçi yaradıla bilər.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Yalnız bir istifadəçi yaradıla bilər.}other{Maksimum # istifadəçi əlavə edə bilərsiniz.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"İstifadəçi silinsin?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Bu istifadəçinin bütün tətbiqləri və datası silinəcək."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Silin"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Mənə xatırladın"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Geri qaytarın"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> üçün təxirə salınıb"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other"> %d saat</item>
-      <item quantity="one">%d saat</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d dəqiqə</item>
-      <item quantity="one">%d dəqiqə</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# saat}=2{# saat}other{# saat}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# dəqiqə}other{# dəqiqə}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Enerjiyə qənaət"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Düymə <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Əsas səhifə"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Xəbərdarlıqlar"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Batareya"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Skrinşotlar"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Ümumi Mesajlar"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Ani Tətbiqlər"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Ayarlama"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Yaddaş"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Məsləhətlər"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Ani Tətbiqlər"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"keçirin"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Cihaz kontrolları"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Kontrol əlavə etmək üçün tətbiq seçin"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> nizamlayıcı əlavə edilib.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> nizamlayıcı əlavə edilib.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# nizamlayıcı əlavə edilib.}other{# nizamlayıcı əlavə edilib.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Silinib"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Sevimlilərə əlavə edilib"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Sevimlilərə əlavə edilib, sıra: <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> cihaz seçilib"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(bağlantı kəsildi)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Dəyişmək olmur. Yenidən cəhd etmək üçün toxunun."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Cihaz əlavə edin"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Cihaz qoşun"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Bu sessiyanı yayımlamaq üçün tətbiqi açın."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Naməlum tətbiq"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Yayımı dayandırın"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Mozaik əlavə edin"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Mozaik əlavə etməyin"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"İstifadəçi seçin"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> tətbiq aktivdir</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> tətbiq aktivdir</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# tətbiq aktivdir}other{# tətbiq aktivdir}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Yeni məlumat"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktiv tətbiqlər"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"İstifadə etmədiyiniz zaman belə bu tətbiqlər aktiv olur və işləyir. Bu, onların funksionallığını yaxşılaşdırır, lakin bu, batareyanın ömrünə də təsir edə bilər."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi əlçatan deyil"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Prioritet rejimi"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Siqnal ayarlanıb"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Kamera deaktivdir"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mikrofon deaktivdir"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Kamera və mikrofon deaktivdir"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# bildiriş}other{# bildiriş}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Yayım"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"<xliff:g id="APP_NAME">%1$s</xliff:g> tətbiqinin yayımlanması dayandırılsın?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> tətbiqini yayımlasanız və ya nəticəni dəyişsəniz, cari yayımınız dayandırılacaq"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> tətbiqini yayımlayın"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Nəticəni dəyişdirin"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Naməlum"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"HHH, AAA g"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"s:dd"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"ss:dd"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-az/tiles_states_strings.xml b/packages/SystemUI/res/values-az/tiles_states_strings.xml
index 0311794..fb745b25 100644
--- a/packages/SystemUI/res/values-az/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-az/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Deaktiv"</item>
     <item msgid="460891964396502657">"Aktiv"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Əlçatmazdır"</item>
+    <item msgid="8014986104355098744">"Deaktiv"</item>
+    <item msgid="5966994759929723339">"Aktiv"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
index 9437fb1..100c7e4 100644
--- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml
+++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Uređaj je zaključan"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Skeniranje lica"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Pošalji"</string>
-    <string name="phone_label" msgid="5715229948920451352">"otvori telefon"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"otvori glasovnu pomoć"</string>
-    <string name="camera_label" msgid="8253821920931143699">"otvori kameru"</string>
     <string name="cancel" msgid="1089011503403416730">"Otkaži"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Potvrdi"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Probaj ponovo"</string>
@@ -205,11 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Senzori su isključeni"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Obriši sva obaveštenja."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"i još <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one">Još <xliff:g id="NUMBER_1">%s</xliff:g> obaveštenje u grupi.</item>
-      <item quantity="few">Još <xliff:g id="NUMBER_1">%s</xliff:g> obaveštenja u grupi.</item>
-      <item quantity="other">Još <xliff:g id="NUMBER_1">%s</xliff:g> obaveštenja u grupi.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Unutra je još # obaveštenje.}one{Unutra je još # obaveštenje.}few{Unutra su još # obaveštenja.}other{Unutra je još # obaveštenja.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Ekran je zaključan u horizontalnom položaju."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Ekran je zaključan u vertikalnom položaju."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Vitrina sa poslasticama"</string>
@@ -227,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automatska rotacija"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automatsko rotiranje ekrana"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Lokacija"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Čuvar ekrana"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Pristup kameri"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Pristup mikrofonu"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Dostupno"</string>
@@ -256,11 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Hotspot"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Uključuje se..."</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Ušteda podataka je uključena"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">%d uređaj</item>
-      <item quantity="few">%d uređaja</item>
-      <item quantity="other">%d uređaja</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# uređaj}one{# uređaj}few{# uređaja}other{# uređaja}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Lampa"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Koristi se kamera"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Mobilni podaci"</string>
@@ -317,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Dodirnite ponovo"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Prevucite nagore da biste otvorili"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Pritisnite ikonu otključavanja da biste otvorili."</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Otključano je licem. Prevucite nagore da biste otvorili."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Otključano je licem. Pritisnite ikonu otključavanja da biste otvorili."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Otključano je licem. Pritisnite da biste otvorili."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Lice je prepoznato. Pritisnite da biste otvorili."</string>
@@ -353,12 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Želite li da nastavite sesiju?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Počni iz početka"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Da, nastavi"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Režim gosta"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Koristite režim gosta"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Dodavanjem novog korisnika izaći ćete iz režima gosta i izbrisaćete sve aplikacije i podatke iz aktuelne sesije gosta."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Dostignut maksimalni broj korisnika"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">Možete da dodate najviše <xliff:g id="COUNT">%d</xliff:g> korisnika.</item>
-      <item quantity="few">Možete da dodate najviše <xliff:g id="COUNT">%d</xliff:g> korisnika.</item>
-      <item quantity="other">Možete da dodate najviše <xliff:g id="COUNT">%d</xliff:g> korisnika.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Možete da napravite samo jednog korisnika.}one{Možete da dodate najviše # korisnika.}few{Možete da dodate najviše # korisnika.}other{Možete da dodate najviše # korisnika.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Želite li da uklonite korisnika?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Sve aplikacije i podaci ovog korisnika će biti izbrisani."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Ukloni"</string>
@@ -544,16 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Podseti me"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Opozovi"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Odloženo je za <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one">%d sat</item>
-      <item quantity="few">%d sata</item>
-      <item quantity="other">%d sati</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one">%d minut</item>
-      <item quantity="few">%d minuta</item>
-      <item quantity="other">%d minuta</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# sat}=2{# sata}one{# sat}few{# sata}other{# sati}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minut}one{# minut}few{# minuta}other{# minuta}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Ušteda baterije"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Dugme <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Taster Početna"</string>
@@ -702,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Obaveštenja"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Baterija"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Snimci ekrana"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Opšte poruke"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant aplikacije"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Podešavanje"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Memorijski prostor"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Saveti"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant aplikacije"</string>
@@ -776,11 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"uključite/isključite"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Kontrole uređaja"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Odaberite aplikaciju za dodavanje kontrola"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> kontrola je dodata.</item>
-      <item quantity="few"><xliff:g id="NUMBER_1">%s</xliff:g> kontrole su dodate.</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> kontrola je dodato.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# kontrola je dodata.}one{# kontrola je dodata.}few{# kontrole su dodate.}other{# kontrola je dodato.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Uklonjeno"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Označeno je kao omiljeno"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Označeno je kao omiljeno, <xliff:g id="NUMBER">%d</xliff:g>. pozicija"</string>
@@ -852,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"Izabranih uređaja: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(veza je prekinuta)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Prebacivanje nije uspelo. Probajte ponovo."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Upari novi uređaj"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Povežite uređaj"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Da biste prebacivali ovu sesiju, otvorite aplikaciju."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Nepoznata aplikacija"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Zaustavi prebacivanje"</string>
@@ -937,11 +916,7 @@
     <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>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Izaberite korisnika"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> aplikacija je aktivna</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%s</xliff:g> aplikacije su aktivne</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aplikacija je aktivno</item>
-    </plurals>
+    <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">"Ove aplikacije su aktivne i rade čak i kada ih ne koristite. To im poboljšava funkcionalnost, ali može da utiče i na trajanje baterije."</string>
@@ -968,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"WiFi nije dostupan"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Prioritetni režim"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarm je podešen"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Kamera je isključena"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mikrofon je isključen"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Kamera i mikrofon su isključeni"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# obaveštenje}one{# obaveštenje}few{# obaveštenja}other{# obaveštenja}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Emitovanje"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Želite da zaustavite emitovanje aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Ako emitujete aplikaciju <xliff:g id="SWITCHAPP">%1$s</xliff:g> ili promenite izlaz, aktuelno emitovanje će se zaustaviti"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Emitujte aplikaciju <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Promenite izlaz"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Nepoznato"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"DDD, d. MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"s:min"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"č:min"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-b+sr+Latn/tiles_states_strings.xml b/packages/SystemUI/res/values-b+sr+Latn/tiles_states_strings.xml
index a057c48..b69b064 100644
--- a/packages/SystemUI/res/values-b+sr+Latn/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-b+sr+Latn/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Isključeno"</item>
     <item msgid="460891964396502657">"Uključeno"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Nedostupno"</item>
+    <item msgid="8014986104355098744">"Isključeno"</item>
+    <item msgid="5966994759929723339">"Uključeno"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml
index d159693..a7905ff 100644
--- a/packages/SystemUI/res/values-be/strings.xml
+++ b/packages/SystemUI/res/values-be/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Прылада заблакіравана"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Сканіраванне твару"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Адправіць"</string>
-    <string name="phone_label" msgid="5715229948920451352">"адкрыць тэлефон"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"адкрыць галасавую дапамогу"</string>
-    <string name="camera_label" msgid="8253821920931143699">"адкрыць камеру"</string>
     <string name="cancel" msgid="1089011503403416730">"Скасаваць"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Пацвердзіць"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Паўтарыць спробу"</string>
@@ -205,12 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Датчыкі выключаны"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Выдалiць усе апавяшчэннi."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one">Яшчэ <xliff:g id="NUMBER_1">%s</xliff:g> апавяшчэнне ўнутры.</item>
-      <item quantity="few">Яшчэ <xliff:g id="NUMBER_1">%s</xliff:g> апавяшчэнні ўнутры.</item>
-      <item quantity="many">Яшчэ <xliff:g id="NUMBER_1">%s</xliff:g> апавяшчэнняў унутры.</item>
-      <item quantity="other">Яшчэ <xliff:g id="NUMBER_1">%s</xliff:g> апавяшчэння ўнутры.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Яшчэ # апавяшчэнне ўнутры.}one{Яшчэ # апавяшчэнне ўнутры.}few{Яшчэ # апавяшчэнні ўнутры.}many{Яшчэ # апавяшчэнняў унутры.}other{Яшчэ # апавяшчэння ўнутры.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Экран заблакiраваны ў альбомнай арыентацыі."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Экран заблакiраваны ў партрэтнай арыентацыі."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Вітрына з дэсертамі"</string>
@@ -228,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"Доступ да камеры"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Доступ да мікрафона"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Доступ дазволены"</string>
@@ -257,12 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Хот-спот"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Уключэнне…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Эканомія трафіка ўкл"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">%d прылада</item>
-      <item quantity="few">%d прылады</item>
-      <item quantity="many">%d прылад</item>
-      <item quantity="other">%d прылады</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# прылада}one{# прылада}few{# прылады}many{# прылад}other{# прылады}}"</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>
@@ -319,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Націсніце яшчэ раз"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Каб адкрыць, прагарніце ўверх"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Каб адкрыць, націсніце значок разблакіроўкі"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Твар распазнаны. Каб адкрыць, прагарніце ўверх."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Твар распазнаны. Для адкрыцця націсніце значок разблакіроўкі"</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Разблакіравана распазнаваннем твару. Націсніце, каб адкрыць."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Твар распазнаны. Націсніце, каб адкрыць."</string>
@@ -355,13 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Хочаце працягнуць сеанс?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Пачаць зноў"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Так, працягнуць"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Гасцявы рэжым"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Вы знаходзіцеся ў гасцявым рэжыме"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Дадаванне новага карыстальніка закрые гасцявы рэжым. Будуць выдалены ўсе праграмы і даныя бягучага гасцявога сеанса."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Дасягнуты ліміт карыстальнікаў"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">Можна дадаць <xliff:g id="COUNT">%d</xliff:g> карыстальніка.</item>
-      <item quantity="few">Можна дадаць <xliff:g id="COUNT">%d</xliff:g> карыстальнікаў.</item>
-      <item quantity="many">Можна дадаць <xliff:g id="COUNT">%d</xliff:g> карыстальнікаў.</item>
-      <item quantity="other">Можна дадаць <xliff:g id="COUNT">%d</xliff:g> карыстальніка.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Можна стварыць толькі аднаго карыстальніка.}one{Вы можаце дадаць толькі # карыстальніка.}few{Вы можаце дадаць толькі # карыстальнікаў.}many{Вы можаце дадаць толькі # карыстальнікаў.}other{Вы можаце дадаць толькі # карыстальніка.}}"</string>
     <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>
@@ -547,18 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Нагадаць"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Адрабіць"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Адкладзена на <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one">%d гадзіна</item>
-      <item quantity="few">%d гадзіны</item>
-      <item quantity="many">%d гадзін</item>
-      <item quantity="other">%d гадзіны</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one">%d хвіліна</item>
-      <item quantity="few">%d хвіліны</item>
-      <item quantity="many">%d хвілін</item>
-      <item quantity="other">%d хвіліны</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# гадз}=2{# гадзіны}one{# гадзіна}few{# гадзіны}many{# гадзін}other{# гадзіны}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# хвіліна}one{# хвіліна}few{# хвіліны}many{# хвілін}other{# хвіліны}}"</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>
@@ -707,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Абвесткі"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Акумулятар"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Здымкі экрана"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Агульныя паведамленні"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Імгненныя праграмы"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Наладжванне"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Захоўванне"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Падказкі"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Імгненныя праграмы"</string>
@@ -781,12 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"уключыць/выключыць"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Элементы кіравання прыладай"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Выберыце праграму для дадавання элементаў кіравання"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one">Дададзены <xliff:g id="NUMBER_1">%s</xliff:g> элемент кіравання.</item>
-      <item quantity="few">Дададзена <xliff:g id="NUMBER_1">%s</xliff:g> элементы кіравання.</item>
-      <item quantity="many">Дададзена <xliff:g id="NUMBER_1">%s</xliff:g> элементаў кіравання.</item>
-      <item quantity="other">Дададзена <xliff:g id="NUMBER_1">%s</xliff:g> элемента кіравання.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{Дададзены # элемент кіравання.}one{Дададзена # элемента кіравання.}few{Дададзена # элементы кіравання.}many{Дададзена # элементаў кіравання.}other{Дададзена # элемента кіравання.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Выдалена"</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>
@@ -858,7 +831,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="9099497976087485862">"Спалучыць з новай прыладай"</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>
@@ -943,12 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Дадаць плітку"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Не дадаваць плітку"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Выбар карыстальніка"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> праграма актыўная</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%s</xliff:g> праграмы актыўныя</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%s</xliff:g> праграм актыўныя</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> праграмы актыўныя</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# праграма актыўная}one{# праграма актыўныя}few{# праграмы актыўныя}many{# праграм актыўныя}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>
@@ -975,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Сетка Wi‑Fi недаступная"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Прыярытэтны рэжым"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Будзільнік зададзены"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Камера выключана"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Мікрафон выключаны"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Камера і мікрафон выключаны"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# апавяшчэнне}one{# апавяшчэнне}few{# апавяшчэнні}many{# апавяшчэнняў}other{# апавяшчэння}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Перадача даных"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Спыніць трансляцыю праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Пры пераключэнні на праграму \"<xliff:g id="SWITCHAPP">%1$s</xliff:g>\" ці змяненні вываду бягучая трансляцыя спыняецца"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Трансляцыя праграмы \"<xliff:g id="SWITCHAPP">%1$s</xliff:g>\""</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Змяненне вываду"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Невядома"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, d MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-be/tiles_states_strings.xml b/packages/SystemUI/res/values-be/tiles_states_strings.xml
index d258811..8fb2da2 100644
--- a/packages/SystemUI/res/values-be/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-be/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Выключана"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 29f361f..b13b17db 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Устройството е заключено"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Извършва се сканиране на лице"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Изпращане"</string>
-    <string name="phone_label" msgid="5715229948920451352">"отваряне на телефона"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"отваряне на гласовата помощ"</string>
-    <string name="camera_label" msgid="8253821920931143699">"отваряне на камерата"</string>
     <string name="cancel" msgid="1089011503403416730">"Отказ"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Потвърждаване"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Нов опит"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Сензорите са изключени"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Изчистване на всички известия."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">Съдържа още <xliff:g id="NUMBER_1">%s</xliff:g> известия.</item>
-      <item quantity="one">Съдържа още <xliff:g id="NUMBER_0">%s</xliff:g> известие.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Съдържа още # известие.}other{Съдържа още # известия.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Екранът е заключен в хоризонтална ориентация."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Екранът е заключен във вертикална ориентация."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Витрина с десерти"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"Достъп до камерата"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Достъп до микрофона"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Налице"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Точка за достъп"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Включва се..."</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Икономия на данни е вкл."</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d устройства</item>
-      <item quantity="one">%d устройство</item>
-    </plurals>
+    <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_camera_in_use" msgid="4820591564526512571">"Камерата се използва"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Мобилни данни"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Докоснете отново"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Прекарайте пръст нагоре, за да отключите"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Натиснете иконата за отключване, за да отворите"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Отключено с лице. Прекарайте пръст нагоре за отваряне."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Отключено с лице. Натиснете иконата за отключване, за да отворите."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Отключено с лице. Натиснете за отваряне."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Лицето бе разпознато. Натиснете за отваряне."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Искате ли да продължите сесията си?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Започване отначало"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Да, продължавам"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Режим на гост"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Вие сте в режим на гост"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"С добавянето на нов потребител ще излезете от режима на гост и ще изтриете всички приложения и данни от текущата сесия като гост."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Достигнахте огранич. за потребители"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">Можете да добавите до <xliff:g id="COUNT">%d</xliff:g> потребители.</item>
-      <item quantity="one">Може да бъде създаден само един потребител.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Може да бъде създаден само един потребител.}other{Можете да добавите до # потребители.}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Напомняне"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Отмяна"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Отложено за <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d часа</item>
-      <item quantity="one">%d час</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d минути</item>
-      <item quantity="one">%d минута</item>
-    </plurals>
+    <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="keyboard_key_button_template" msgid="8005673627272051429">"Бутон „<xliff:g id="NAME">%1$s</xliff:g>“"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Начало"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Сигнали"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Батерия"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Екранни снимки"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Общи съобщения"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Мигновени приложения"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Настройване"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Хранилище"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Съвети"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Мигновени приложения"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"превключване"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Контроли за устройството"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Изберете приложение, за да добавите контроли"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other">Добавени са <xliff:g id="NUMBER_1">%s</xliff:g> контроли.</item>
-      <item quantity="one">Добавена е <xliff:g id="NUMBER_0">%s</xliff:g> контрола.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{Добавена е # контрола.}other{Добавени са # контроли.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Премахнато"</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>
@@ -846,7 +831,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="9099497976087485862">"Сдвояване на ново устройство"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Добавяне на панел"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Отмяна на добавянето"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Избор на потребител"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> приложения са активни</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> приложение е активно</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi не е налице"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Приоритетен режим"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Будилникът е зададен"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Камерата е изключена"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Микрофонът е изключен"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Камерата и микрофонът са изключени"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# известие}other{# известия}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Излъчване"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Да се спре ли предаването на <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Ако предавате <xliff:g id="SWITCHAPP">%1$s</xliff:g> или промените изхода, текущото ви предаване ще бъде прекратено"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Предаване на <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Промяна на изхода"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Неизвестно"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, d MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-bg/tiles_states_strings.xml b/packages/SystemUI/res/values-bg/tiles_states_strings.xml
index da5c325..b85133b 100644
--- a/packages/SystemUI/res/values-bg/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-bg/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Изкл."</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml
index cc54762..bad5c2a 100644
--- a/packages/SystemUI/res/values-bn/strings.xml
+++ b/packages/SystemUI/res/values-bn/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"ডিভাইস লক করা আছে"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"ফেস স্ক্যান করা হচ্ছে"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"পাঠান"</string>
-    <string name="phone_label" msgid="5715229948920451352">"ফোন খুলুন"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"ভয়েস সহায়তা খুলুন"</string>
-    <string name="camera_label" msgid="8253821920931143699">"ক্যামেরা খুলুন"</string>
     <string name="cancel" msgid="1089011503403416730">"বাতিল করুন"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"কনফার্ম করুন"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"আবার চেষ্টা করুন"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"সেন্সর অফ অ্যাক্টিভ"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"সমস্ত বিজ্ঞপ্তি সাফ করুন৷"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>টি"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one">ভিতরে আরও <xliff:g id="NUMBER_1">%s</xliff:g>টি বিজ্ঞপ্তি আছে।</item>
-      <item quantity="other">ভিতরে আরও <xliff:g id="NUMBER_1">%s</xliff:g>টি বিজ্ঞপ্তি আছে।</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{ভিতরে আরও #টি বিজ্ঞপ্তি আছে।}one{ভিতরে আরও #টি বিজ্ঞপ্তি আছে।}other{ভিতরে আরও #টি বিজ্ঞপ্তি আছে।}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"ল্যান্ডস্কেপ সজ্জাতে স্ক্রিন লক করা আছে৷"</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"পোর্ট্রেট অবস্থায় স্ক্রিন লক করা আছে৷"</string>
     <string name="dessert_case" msgid="9104973640704357717">"ডেজার্ট কেস"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"ক্যামেরা অ্যাক্সেস"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"মাইক্রোফোন অ্যাক্সেস"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"উপলভ্য"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"হটস্পট"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"চালু করা হচ্ছে…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"ডেটা সেভার চালু আছে"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">%dটি ডিভাইস</item>
-      <item quantity="other">%dটি ডিভাইস</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{#টি ডিভাইস}one{#টি ডিভাইস}other{#টি ডিভাইস}}"</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>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"আবার ট্যাপ করুন"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"খোলার জন্য উপরে সোয়াইপ করুন"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"খোলার জন্য আনলক আইকন প্রেস করুন"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"মুখের মাধ্যমে আনলক করা হয়েছে। খুলতে উপরের দিকে সোয়াইপ করুন।"</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"ফেসের সাহায্যে আনলক করা হয়েছে। খোলার জন্য আনলক আইকন প্রেস করুন।"</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"ফেসের সাহায্যে আনলক করা হয়েছে। খোলার জন্য প্রেস করুন।"</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"ফেস শনাক্ত করা হয়েছে। খোলার জন্য প্রেস করুন।"</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"আপনি কি আপনার সেশনটি চালিয়ে যেতে চান?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"আবার শুরু করুন"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"হ্যাঁ, চালিয়ে যান"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"অতিথি মোড"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"আপনি \'অতিথি মোড\' ব্যবহার করছেন"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"নতুন ব্যবহারকারী যোগ করার মাধ্যমে \'অতিথি মোড\' ছেড়ে বেরিয়ে আসতে পারবেন এবং বর্তমান অতিথি সেশন থেকে সব অ্যাপ ও ডেটা মুছে যাবে।"</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"আর কোনও প্রোফাইল যোগ করা যাবে না"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">আপনি <xliff:g id="COUNT">%d</xliff:g> জন পর্যন্ত ব্যবহারকারীর প্রোফাইল যোগ করতে পারেন।</item>
-      <item quantity="other">আপনি <xliff:g id="COUNT">%d</xliff:g> জন পর্যন্ত ব্যবহারকারীর প্রোফাইল যোগ করতে পারেন।</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{শুধুমাত্র একজন ব্যবহারকারী ডিভাইস ব্যবহার করতে পারবেন।}one{আপনি # জন পর্যন্ত ব্যবহারকারীকে যোগ করতে পারবেন।}other{আপনি # জন পর্যন্ত ব্যবহারকারীকে যোগ করতে পারবেন।}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"আমাকে মনে করিয়ে দিও"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"আগের অবস্থায় ফিরুন"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> পরে আবার মনে করানো হবে"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one">%d ঘণ্টা</item>
-      <item quantity="other">%d ঘণ্টা</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one">%d মিনিট</item>
-      <item quantity="other">%d মিনিট</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# ঘণ্টা}=2{# ঘণ্টা}one{# ঘণ্টা}other{# ঘণ্টা}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# মিনিট}one{# মিনিট}other{# মিনিট}}"</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">"হোম"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"সতর্কতা"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"ব্যাটারি"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"স্ক্রীনশটস"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"সাধারণ বার্তাগুলি"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant Apps"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"সেট-আপ"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"স্টোরেজ"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"হিন্ট"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant Apps"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"টগল করুন"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"ডিভাইস কন্ট্রোল"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"কন্ট্রোল যোগ করতে অ্যাপ বেছে নিন"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g>টি কন্ট্রোল যোগ করা হয়েছে।</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g>টি কন্ট্রোল যোগ করা হয়েছে।</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{#টি কন্ট্রোল যোগ করা হয়েছে।}one{#টি কন্ট্রোল যোগ করা হয়েছে।}other{#টি কন্ট্রোল যোগ করা হয়েছে।}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"সরানো হয়েছে"</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>
@@ -846,7 +831,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="9099497976087485862">"নতুন ডিভাইস পেয়ার করুন"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"টাইল যোগ করুন"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"টাইল যোগ করবেন না"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"ব্যবহারকারী বেছে নিন"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g>টি অ্যাপ চালু আছে</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g>টি অ্যাপ চালু আছে</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"ওয়াই-ফাই উপলভ্য নেই"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"প্রায়োরিটি মোড"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"অ্যালার্ম সেট করা হয়েছে"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"ক্যামেরা বন্ধ করা আছে"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"মাইক্রোফোন বন্ধ করা আছে"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"ক্যামেরা ও মাইক্রোফোন বন্ধ আছে"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{#টি বিজ্ঞপ্তি}one{#টি বিজ্ঞপ্তি}other{#টি বিজ্ঞপ্তি}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"ব্রডকাস্ট করা হচ্ছে"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"<xliff:g id="APP_NAME">%1$s</xliff:g> সম্প্রচার বন্ধ করবেন?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"আপনি <xliff:g id="SWITCHAPP">%1$s</xliff:g> সম্প্রচার করলে বা আউটপুট পরিবর্তন করলে, আপনার বর্তমান সম্প্রচার বন্ধ হয়ে যাবে"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> সম্প্রচার করুন"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"আউটপুট পরিবর্তন করুন"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"অজানা"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-bn/tiles_states_strings.xml b/packages/SystemUI/res/values-bn/tiles_states_strings.xml
index 784d974..d70afc0 100644
--- a/packages/SystemUI/res/values-bn/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-bn/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"বন্ধ আছে"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml
index b6f6f39..d00ebc5 100644
--- a/packages/SystemUI/res/values-bs/strings.xml
+++ b/packages/SystemUI/res/values-bs/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Uređaj je zaključan"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Skeniranje lica"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Pošalji"</string>
-    <string name="phone_label" msgid="5715229948920451352">"otvori telefon"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"otvori glasovnu pomoć"</string>
-    <string name="camera_label" msgid="8253821920931143699">"otvori kameru"</string>
     <string name="cancel" msgid="1089011503403416730">"Otkaži"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Potvrdite"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Pokušaj ponovo"</string>
@@ -205,11 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Senzori su isključeni"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Uklanjanje svih obavještenja."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one">Još <xliff:g id="NUMBER_1">%s</xliff:g> obavještenje unutra.</item>
-      <item quantity="few">Još <xliff:g id="NUMBER_1">%s</xliff:g> obavještenja unutra.</item>
-      <item quantity="other">Još <xliff:g id="NUMBER_1">%s</xliff:g> obavještenja unutra.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Još # obavještenje unutra.}one{Još # obavještenje unutra.}few{Još # obavještenja unutra.}other{Još # obavještenja unutra.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Ekran je zaključan u vodoravnom prikazu."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Ekran je zaključan u uspravnom prikazu."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Slika sa desertima"</string>
@@ -227,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automatsko rotiranje"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automatsko rotiranje ekrana"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Lokacija"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Čuvar ekrana"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Pristup kameri"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Pristup mikrofonu"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Dostupno"</string>
@@ -256,11 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Pristupna tačka"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Uključivanje…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Ušteda podataka uklj."</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">%d uređaj</item>
-      <item quantity="few">%d uređaja</item>
-      <item quantity="other">%d uređaja</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# uređaj}one{# uređaj}few{# uređaja}other{# uređaja}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Svjetiljka"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Kamera u upotrebi"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Prijenos podataka na mobilnoj mreži"</string>
@@ -317,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Ponovo dodirnite"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Prevucite da otvorite"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Pritisnite ikonu za otključavanje da otvorite."</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Otključano licem. Prevucite nagore da otvorite."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Otključano licem. Pritisnite ikonu za otklj. da otvorite."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Otključano licem. Pritisnite da otvorite."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Lice prepoznato. Pritisnite da otvorite."</string>
@@ -353,12 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Želite li nastaviti sesiju?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Počni ispočetka"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Da, nastavi"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Način rada za gosta"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Nalazite se u načinu rada za gosta"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Dodavanjem novog korisnika napustit ćete način rada za gosta i izbrisati sve aplikacije i podatke iz trenutne sesije gosta."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Dostignut limit za broj korisnika"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">Možete dodati najviše <xliff:g id="COUNT">%d</xliff:g> korisnika.</item>
-      <item quantity="few">Možete dodati najviše <xliff:g id="COUNT">%d</xliff:g> korisnika.</item>
-      <item quantity="other">Možete dodati najviše <xliff:g id="COUNT">%d</xliff:g> korisnika.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Moguće je kreirati samo jednog korisnika.}one{Možete dodati najviše # korisnika}few{Možete dodati najviše # korisnika}other{Možete dodati najviše # korisnika}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Zaista želite ukloniti korisnika?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Sve aplikacije i podaci ovog korisnika bit će izbrisani."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Ukloni"</string>
@@ -544,16 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Podsjeti me"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Poništi"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Odgođeno za <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one">%d sat</item>
-      <item quantity="few">%d sata</item>
-      <item quantity="other">%d sati</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one">%d minuta</item>
-      <item quantity="few">%d minute</item>
-      <item quantity="other">%d minuta</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# h}=2{# h}one{# h}few{# h}other{# h}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# min}one{# min}few{# min}other{# min}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Ušteda baterije"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Dugme <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Tipka za početak"</string>
@@ -702,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Obavještenja"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Baterija"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Snimci ekrana"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Opće poruke"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant aplikacije"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Postavljanje"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Pohrana"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Savjeti"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant aplikacije"</string>
@@ -776,11 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"aktiviranje/deaktiviranje"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Kontrole uređaja"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Odaberite aplikaciju da dodate kontrole"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one">Dodana je <xliff:g id="NUMBER_1">%s</xliff:g> kontrola.</item>
-      <item quantity="few">Dodane su <xliff:g id="NUMBER_1">%s</xliff:g> kontrole.</item>
-      <item quantity="other">Dodano je <xliff:g id="NUMBER_1">%s</xliff:g> kontrola.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{Dodana je # kontrola.}one{Dodana je # kontrola.}few{Dodane su # kontrole.}other{Dodano je # kontrola.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Uklonjeno"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Dodano u omiljeno"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Dodano u omiljeno, pozicija <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -852,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"Broj odabranih uređaja: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(veza je prekinuta)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Nije moguće prebaciti. Dodirnite da pokušate ponovo."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Uparite novi uređaj"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Povežite uređaj"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Da emitirate ovu sesiju, otvorite aplikaciju."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Nepoznata aplikacija"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Zaustavi emitiranje"</string>
@@ -937,11 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Dodaj karticu"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Nemoj dodati karticu"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Odaberite korisnika"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> aplikacija je aktivna</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%s</xliff:g> aplikacije su aktivne</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aplikacija je aktivno</item>
-    </plurals>
+    <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">"Ove aplikacije su aktivne i pokrenute, čak i kada ih ne koristite. Ovim se poboljšava njihova funkcionalnost, ali može uticati i na vijek trajanja baterije."</string>
@@ -968,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"WiFi je nedostupan"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Način rada Prioriteti"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarm je postavljen"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Kamera je isključena"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mikrofon je isključen"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Kamera i mikrofon su isključeni"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# obavještenje}one{# obavještenje}few{# obavještenja}other{# obavještenja}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Emitiranje"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Zaustaviti emitiranje aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Ako emitirate aplikaciju <xliff:g id="SWITCHAPP">%1$s</xliff:g> ili promijenite izlaz, trenutno emitiranje će se zaustaviti"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Emitiraj aplikaciju <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Promijeni izlaz"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Nepoznato"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"DDD, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-bs/tiles_states_strings.xml b/packages/SystemUI/res/values-bs/tiles_states_strings.xml
index a057c48..b69b064 100644
--- a/packages/SystemUI/res/values-bs/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-bs/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Isključeno"</item>
     <item msgid="460891964396502657">"Uključeno"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Nedostupno"</item>
+    <item msgid="8014986104355098744">"Isključeno"</item>
+    <item msgid="5966994759929723339">"Uključeno"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 497c201..553c6c7 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Dispositiu bloquejat"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"S\'està escanejant la cara"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Envia"</string>
-    <string name="phone_label" msgid="5715229948920451352">"obre el telèfon"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"obre l\'assistència per veu"</string>
-    <string name="camera_label" msgid="8253821920931143699">"obre la càmera"</string>
     <string name="cancel" msgid="1089011503403416730">"Cancel·la"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Confirma"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Torna-ho a provar"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Sensors desactivats"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Esborra totes les notificacions."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> notificacions més a l\'interior.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> notificació més a l\'interior.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{# notificació més a l\'interior.}other{# notificacions més a l\'interior.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"La pantalla està bloquejada en orientació horitzontal."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"La pantalla està bloquejada en orientació vertical."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Capsa de postres"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Gira automàticament"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Gira la pantalla automàticament"</string>
     <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 micròfon"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Disponible"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Punt d\'accés Wi-Fi"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"S\'està activant…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Economitzador activat"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d dispositius</item>
-      <item quantity="one">%d dispositiu</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# dispositiu}other{# dispositius}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Llanterna"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Càmera en ús"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Dades mòbils"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Torna a tocar"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Llisca cap amunt per obrir"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Prem la icona de desbloqueig per obrir"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"S\'ha desbloquejat amb la cara. Llisca cap amunt per obrir."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"S\'ha desbloquejat amb la cara. Prem la icona per obrir."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"S\'ha desbloquejat amb la cara. Prem per obrir."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"S\'ha reconegut la cara. Prem per obrir."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Vols continuar amb la sessió?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Torna a començar"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Sí, continua"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Mode de convidat"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Estàs en mode de convidat"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"En afegir un usuari nou, se sortirà del mode de convidat i se suprimiran totes les aplicacions i dades de la sessió de convidat actual."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"S\'ha assolit el límit d\'usuaris"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">Pots afegir fins a <xliff:g id="COUNT">%d</xliff:g> usuaris.</item>
-      <item quantity="one">Només es pot crear un usuari.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Només es pot crear 1 usuari.}other{Pots afegir fins a # usuaris.}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Recorda-m\'ho"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Desfés"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"S\'ha posposat <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d hores</item>
-      <item quantity="one">%d hora</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d minuts</item>
-      <item quantity="one">%d minut</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# hora}=2{# hores}other{# hores}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minut}other{# minuts}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Estalvi de bateria"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Botó <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Inici"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Alertes"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Bateria"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Captures de pantalla"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Missatges generals"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Aplicacions instantànies"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Configuració"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Emmagatzematge"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Suggeriments"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Aplicacions instantànies"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"commuta"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Controls de dispositius"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Selecciona l\'aplicació per afegir controls"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other">S\'han afegit <xliff:g id="NUMBER_1">%s</xliff:g> controls.</item>
-      <item quantity="one">S\'ha afegit <xliff:g id="NUMBER_0">%s</xliff:g> control.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{S\'ha afegit # control.}other{S\'han afegit # controls.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Suprimit"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Afegit als preferits"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Afegit als preferits, posició <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"S\'han seleccionat <xliff:g id="COUNT">%1$d</xliff:g> dispositius"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(desconnectat)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"No es pot canviar. Torna-ho a provar."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Vincula un dispositiu nou"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Connecta un dispositiu"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Per emetre aquesta sessió, obre l\'aplicació."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Aplicació desconeguda"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Atura l\'emissió"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Afegeix la icona"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"No afegeixis la icona"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Selecciona un usuari"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aplicacions estan actives</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aplicació està activa</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# aplicació està activa}other{# aplicacions estan actives}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Informació nova"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aplicacions actives"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Aquestes aplicacions estan actives i executant-se, fins i tot quan no les utilitzes. Això en millora la funcionalitat, però també pot afectar la durada de la bateria."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi no disponible"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Mode Prioritat"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarma definida"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"La càmera està desactivada"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"El micròfon està desactivat"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Càmera i micròfon desactivats"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notificació}other{# notificacions}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"S\'està emetent"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Vols deixar d\'emetre <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Si emets <xliff:g id="SWITCHAPP">%1$s</xliff:g> o canvies la sortida, l\'emissió actual s\'aturarà"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Emet <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Canvia la sortida"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Desconeguda"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, d MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"hh:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ca/tiles_states_strings.xml b/packages/SystemUI/res/values-ca/tiles_states_strings.xml
index 2d13e568..aaf19c7 100644
--- a/packages/SystemUI/res/values-ca/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ca/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Desactivat"</item>
     <item msgid="460891964396502657">"Activat"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"No disponible"</item>
+    <item msgid="8014986104355098744">"Desactivat"</item>
+    <item msgid="5966994759929723339">"Activat"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index e9f3a64..c02c843 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Zařízení uzamčeno"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Skenování obličeje"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Odeslat"</string>
-    <string name="phone_label" msgid="5715229948920451352">"otevřít telefon"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"otevřít hlasovou asistenci"</string>
-    <string name="camera_label" msgid="8253821920931143699">"spustit fotoaparát"</string>
     <string name="cancel" msgid="1089011503403416730">"Zrušit"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Potvrdit"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Zkusit znovu"</string>
@@ -205,12 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Vypnutí senzorů je aktivní"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Vymazat všechna oznámení."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"a ještě <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="few">Skupina obsahuje ještě <xliff:g id="NUMBER_1">%s</xliff:g> oznámení.</item>
-      <item quantity="many">Skupina obsahuje ještě <xliff:g id="NUMBER_1">%s</xliff:g> oznámení.</item>
-      <item quantity="other">Skupina obsahuje ještě <xliff:g id="NUMBER_1">%s</xliff:g> oznámení.</item>
-      <item quantity="one">Skupina obsahuje ještě <xliff:g id="NUMBER_0">%s</xliff:g> oznámení.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Skupina obsahuje ještě # oznámení.}few{Skupina obsahuje ještě # oznámení.}many{Skupina obsahuje ještě # oznámení.}other{Skupina obsahuje ještě # oznámení.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Obrazovka je uzamčena v orientaci na šířku."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Obrazovka je uzamčena v orientaci na výšku."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Pult se sladkostmi"</string>
@@ -228,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automatické otáčení"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automatické otočení obrazovky"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Poloha"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Spořič obrazovky"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Přístup k fotoaparátu"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Přístup k mikrofonu"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Dostupné"</string>
@@ -257,12 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Hotspot"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Zapínání…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Spořič dat zapnut"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="few">%d zařízení</item>
-      <item quantity="many">%d zařízení</item>
-      <item quantity="other">%d zařízení</item>
-      <item quantity="one">%d zařízení</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# zařízení}few{# zařízení}many{# zařízení}other{# zařízení}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Svítilna"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Fotoaparát se používá"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Mobilní data"</string>
@@ -319,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Znovu klepněte"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Otevřete přejetím prstem nahoru"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Otevřete klepnutím na ikonu odemknutí"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Odemknuto obličejem. Otevřete přejetím prstem nahoru."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Odemknuto obličejem. Klepněte na ikonu odemknutí."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Odemknuto obličejem. Stisknutím otevřete."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Obličej rozpoznán. Stisknutím otevřete."</string>
@@ -355,13 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Chcete v relaci pokračovat?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Začít znovu"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Ano, pokračovat"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Režim hosta"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Jste v režimu hosta"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Přidáním nového uživatele ukončíte režim hosta a smažete všechny aplikace a data z aktuální relace hosta."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Bylo dosaženo limitu uživatelů"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="few">Lze přidat až <xliff:g id="COUNT">%d</xliff:g> uživatele.</item>
-      <item quantity="many">Lze přidat až <xliff:g id="COUNT">%d</xliff:g> uživatele.</item>
-      <item quantity="other">Lze přidat až <xliff:g id="COUNT">%d</xliff:g> uživatelů.</item>
-      <item quantity="one">Lze vytvořit jen jednoho uživatele.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Lze vytvořit jen jednoho uživatele.}few{Přidat můžete maximálně # uživatele.}many{Přidat můžete maximálně # uživatele.}other{Přidat můžete maximálně # uživatelů.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Odstranit uživatele?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Veškeré aplikace a data tohoto uživatele budou smazána."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Odstranit"</string>
@@ -547,18 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Připomenutí"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Zpět"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Odloženo o <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="few">%d hodiny</item>
-      <item quantity="many">%d hodiny</item>
-      <item quantity="other">%d hodin</item>
-      <item quantity="one">%d hodina</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="few">%d minuty</item>
-      <item quantity="many">%d minuty</item>
-      <item quantity="other">%d minut</item>
-      <item quantity="one">%d minuta</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# hodina}=2{# hodiny}few{# hodiny}many{# hodiny}other{# hodin}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minuta}few{# minuty}many{# minuty}other{# minut}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Spořič baterie"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Tlačítko <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -707,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Upozornění"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Baterie"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Snímky obrazovek"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Všeobecné zprávy"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Okamžité aplikace"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Nastavit"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Úložiště"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Tipy"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Okamžité aplikace"</string>
@@ -781,12 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"přepnout"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Ovládání zařízení"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Vyberte aplikaci, pro kterou chcete přidat ovládací prvky"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="few">Byly přidány <xliff:g id="NUMBER_1">%s</xliff:g> ovládací prvky.</item>
-      <item quantity="many">Bylo přidáno <xliff:g id="NUMBER_1">%s</xliff:g> ovládacího prvku.</item>
-      <item quantity="other">Bylo přidáno <xliff:g id="NUMBER_1">%s</xliff:g> ovládacích prvků.</item>
-      <item quantity="one">Byl přidán <xliff:g id="NUMBER_0">%s</xliff:g> ovládací prvek.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{Byl přidán # ovládací prvek.}few{Byly přidány # ovládací prvky.}many{Bylo přidáno # ovládacího prvku.}other{Bylo přidáno # ovládacích prvků.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Odstraněno"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Přidáno do oblíbených"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Přidáno do oblíbených na pozici <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -858,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"Vybraná zařízení: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(odpojeno)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Nelze přepnout. Klepnutím opakujte akci."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Spárovat nové zařízení"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Připojit zařízení"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Pokud chcete odesílat relaci, otevřete aplikaci."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Neznámá aplikace"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Zastavit odesílání"</string>
@@ -943,12 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Přidat dlaždici"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Nepřidávat dlaždici"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Zvolte uživatele"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="few"><xliff:g id="COUNT_1">%s</xliff:g> aplikace jsou aktivní</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%s</xliff:g> aplikace je aktivních</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aplikací je aktivních</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aplikace je aktivní</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# aplikace je aktivní}few{# aplikace jsou aktivní}many{# aplikace je aktivních}other{# aplikací je aktivních}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nové informace"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktivní aplikace"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Tyto aplikace jsou spuštěné a aktivní, i když je nepoužíváte. Zlepšuje to jejich funkčnost, ale může to mít dopad na výdrž baterie."</string>
@@ -975,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Síť Wi‑Fi není k dispozici"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Prioritní režim"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Je nastaven budík"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Kamera je vypnutá"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mikrofon je vypnutý"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Fotoaparát a mikrofon jsou vypnuté"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# oznámení}few{# oznámení}many{# oznámení}other{# oznámení}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g> <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Vysílání"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Zastavit vysílání v aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Pokud budete vysílat v aplikaci <xliff:g id="SWITCHAPP">%1$s</xliff:g> nebo změníte výstup, aktuální vysílání se zastaví"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Vysílat v aplikaci <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Změna výstupu"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Neznámé"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE d. MMMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"H:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-cs/tiles_states_strings.xml b/packages/SystemUI/res/values-cs/tiles_states_strings.xml
index 2af84d9..64e83e0 100644
--- a/packages/SystemUI/res/values-cs/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-cs/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Vypnuto"</item>
     <item msgid="460891964396502657">"Zapnuto"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Nedostupné"</item>
+    <item msgid="8014986104355098744">"Vypnuto"</item>
+    <item msgid="5966994759929723339">"Zapnuto"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index d56cb9b..86e7d22 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Enheden er låst"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Scanner ansigt"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Send"</string>
-    <string name="phone_label" msgid="5715229948920451352">"åbn telefon"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"åbn taleassistent"</string>
-    <string name="camera_label" msgid="8253821920931143699">"åbn kamera"</string>
     <string name="cancel" msgid="1089011503403416730">"Annuller"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Bekræft"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Prøv igen"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Sensorer er slået fra"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Ryd alle notifikationer."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"<xliff:g id="NUMBER">%s</xliff:g> mere"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> notifikation mere i gruppen.</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> notifikationer mere i gruppen.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{# notifikation mere i gruppen.}one{# notifikation mere i gruppen.}other{# notifikationer mere i gruppen.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Skærmen er nu låst i liggende retning."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Skærmen er nu låst i stående format."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Dessertcase"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Roter automatisk"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Roter skærmen automatisk"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Lokation"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Pauseskærm"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Kameraadgang"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Mikrofonadgang"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Tilgængelig"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Hotspot"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Aktiverer…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Datasparefunktion er slået til"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">%d enhed</item>
-      <item quantity="other">%d enheder</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# enhed}one{# enhed}other{# enheder}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Lommelygte"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Kameraet er i brug"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Mobildata"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Tryk igen"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Stryg opad for at åbne"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Tryk på oplåsningsikonet for at åbne"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Låst op ved hjælp af ansigt. Stryg opad for at åbne."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Låst op vha. ansigt. Tryk på oplåsningsikonet for at åbne."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Låst op ved hjælp af ansigt. Tryk for at åbne."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Ansigt genkendt. Tryk for at åbne."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Vil du fortsætte din session?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Start forfra"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Ja, fortsæt"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Gæstetilstand"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Gæstetilstand er aktiveret"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Hvis du tilføjer en ny bruger, deaktiveres gæstetilstanden, og alle apps og data slettes fra den aktuelle gæstesession."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Grænsen for antal brugere er nået"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">Du kan tilføje op til <xliff:g id="COUNT">%d</xliff:g> bruger.</item>
-      <item quantity="other">Du kan tilføje op til <xliff:g id="COUNT">%d</xliff:g> brugere.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Der kan kun oprettes én bruger.}one{Du kan tilføje op til # bruger}other{Du kan tilføje op til # brugere}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Vil du fjerne brugeren?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Alle apps og data for denne bruger slettes."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Fjern"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Påmind mig"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Fortryd"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Udsat i <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one">%d time</item>
-      <item quantity="other">%d timer</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one">%d minut</item>
-      <item quantity="other">%d minutter</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# time}=2{# timer}one{# time}other{# timer}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minut}one{# minut}other{# minutter}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Batterisparefunktion"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"<xliff:g id="NAME">%1$s</xliff:g>-knap"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Underretninger"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Batteri"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Screenshots"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Generelle meddelelser"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant Apps"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Konfiguration"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Lagerplads"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Tips"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant Apps"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"slå til/fra"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Enhedsstyring"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Vælg en app for at tilføje styring"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> styring er tilføjet.</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> styring er tilføjet.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# styringselement er tilføjet.}one{# styringselement er tilføjet.}other{# styringselementer er tilføjet.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Fjernet"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Angivet som favorit"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Angivet som favorit. Position <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"Der er valgt <xliff:g id="COUNT">%1$d</xliff:g> enhed"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(afbrudt)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Det var ikke muligt at skifte. Tryk for at prøve igen."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Par en ny enhed"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Tilknyt en enhed"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Åbn appen for at caste denne session."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Ukendt app"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Stop med at caste"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Tilføj handlingsfelt"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Tilføj ikke felt"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Vælg bruger"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> app er aktiv</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> apps er aktive</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# app er aktiv}one{# app er aktiv}other{# apps er aktive}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nye oplysninger"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktive apps"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Disse apps er aktive og kører, også når du ikke bruger dem. Det forbedrer deres funktionalitet, men det kan også påvirke batteritiden."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Ingen tilgængelig Wi-Fi-forbindelse"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Tilstanden Prioritet"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarmen er indstillet"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Kameraet er slukket"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mikrofonen er slået fra"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Kamera og mikrofon er slået fra"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notifikation}one{# notifikation}other{# notifikationer}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Udsender"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Stop udsendelsen <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Hvis du udsender <xliff:g id="SWITCHAPP">%1$s</xliff:g> eller skifter output, stopper din aktuelle udsendelse"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Udsend <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Skift output"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Ukendt"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE d. MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"tt.mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk.mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-da/tiles_states_strings.xml b/packages/SystemUI/res/values-da/tiles_states_strings.xml
index 0fe06b3..f0132dc 100644
--- a/packages/SystemUI/res/values-da/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-da/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Fra"</item>
     <item msgid="460891964396502657">"Til"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Ikke tilgængelig"</item>
+    <item msgid="8014986104355098744">"Fra"</item>
+    <item msgid="5966994759929723339">"Til"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 97e4038..c828536 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Gerät gesperrt"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Gesicht wird gescannt"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Senden"</string>
-    <string name="phone_label" msgid="5715229948920451352">"Telefon öffnen"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"Sprachassistent öffnen"</string>
-    <string name="camera_label" msgid="8253821920931143699">"Kamera öffnen"</string>
     <string name="cancel" msgid="1089011503403416730">"Abbrechen"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Bestätigen"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Noch einmal versuchen"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"\"Sensoren aus\" ist aktiv"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Alle Benachrichtigungen löschen"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> weitere Benachrichtigungen vorhanden.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> weitere Benachrichtigung vorhanden.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{# weitere Benachrichtigung vorhanden.}other{# weitere Benachrichtigungen vorhanden.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Bildschirm bleibt im Querformat."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Bildschirm bleibt im Hochformat."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Dessertbehälter"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Autom. drehen"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Bildschirm automatisch drehen"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Standort"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Bildschirmschoner"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Kamerazugriff"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Mikrofonzugriff"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Verfügbar"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Hotspot"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Wird aktiviert…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Datensparmodus an"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d Geräte</item>
-      <item quantity="one">%d Gerät</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# Gerät}other{# Geräte}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Taschenlampe"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Kamera wird verwendet"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Mobile Daten"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Noch einmal tippen"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Zum Öffnen nach oben wischen"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Tippe zum Öffnen auf das Symbol „Entsperren“"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Gerät mit Gesicht entsperrt. Zum Öffnen nach oben wischen."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Gerät mit dem Gesicht entsperrt. Tippe zum Öffnen auf das Symbol „Entsperren“."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Gerät mit dem Gesicht entsperrt. Tippe zum Öffnen."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Gesicht erkannt. Tippe zum Öffnen."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Möchtest du deine Sitzung fortsetzen?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Neu starten"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Ja, weiter"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Gastmodus"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Du befindest dich im Gastmodus"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Durch Hinzufügen eines neuen Nutzers wird der Gastmodus beendet und alle Apps und Daten der aktuellen Gastsitzung werden gelöscht."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Nutzerlimit erreicht"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">Du kannst bis zu <xliff:g id="COUNT">%d</xliff:g> Nutzer hinzufügen.</item>
-      <item quantity="one">Es kann nur ein Nutzer erstellt werden.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Es kann nur ein Nutzer erstellt werden.}other{Du kannst bis zu # Nutzer hinzufügen.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Nutzer entfernen?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Alle Apps und Daten dieses Nutzers werden gelöscht."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Entfernen"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Erinnern"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Rückgängig machen"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Erinnerung in <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d Stunden</item>
-      <item quantity="one">%d Stunde</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d Minuten</item>
-      <item quantity="one">%d Minute</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# Stunde}=2{# Stunden}other{# Stunden}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# Minute}other{# Minuten}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Energiesparmodus"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Taste <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Pos1"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Benachrichtigungen"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Akku"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Screenshots"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Nachrichten"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Android Instant Apps"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Einrichtung"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Speicher"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Hinweise"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant Apps"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"Wechseln"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Gerätesteuerung"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"App zum Hinzufügen von Steuerelementen auswählen"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> Steuerelemente hinzugefügt.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> Steuerelement hinzugefügt.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# Steuerelement hinzugefügt.}other{# Steuerelemente hinzugefügt.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Entfernt"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Zu Favoriten hinzugefügt"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Zu Favoriten hinzugefügt, Position <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> Geräte ausgewählt"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(nicht verbunden)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Wechseln nicht möglich. Tippe, um es noch einmal zu versuchen."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Neues Gerät koppeln"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Gerät verbinden"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Öffne zum Streamen dieser Sitzung die App."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Unbekannte App"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Streaming beenden"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Hinzufügen"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Nicht hinzufügen"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Nutzer auswählen"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> Apps sind aktiv</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> App ist aktiv</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# App ist aktiv}other{# Apps sind aktiv}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Neue Informationen"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktive Apps"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Diese Apps sind aktiv und werden auch dann ausgeführt, wenn du sie gerade nicht verwendest. Dies wird für einige ihrer Funktionen benötigt, kann aber auch die Akkulaufzeit beeinträchtigen."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"WLAN nicht verfügbar"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Prioritätsmodus"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Wecker gestellt"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Kamera ist deaktiviert"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mikrofon ist deaktiviert"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Kamera und Mikrofon ausgeschaltet"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# Benachrichtigung}other{# Benachrichtigungen}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Übertragung läuft"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"<xliff:g id="APP_NAME">%1$s</xliff:g> nicht mehr streamen?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Wenn du <xliff:g id="SWITCHAPP">%1$s</xliff:g> streamst oder die Ausgabe änderst, wird dein aktueller Stream beendet"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> streamen"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Ausgabe ändern"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Unbekannt"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, d. MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-de/tiles_states_strings.xml b/packages/SystemUI/res/values-de/tiles_states_strings.xml
index ba610b3..bc50e16 100644
--- a/packages/SystemUI/res/values-de/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-de/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Aus"</item>
     <item msgid="460891964396502657">"An"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Nicht verfügbar"</item>
+    <item msgid="8014986104355098744">"Aus"</item>
+    <item msgid="5966994759929723339">"An"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index fe349b4..4670fc7 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Η συσκευή κλειδώθηκε"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Σάρωση προσώπου"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Αποστολή"</string>
-    <string name="phone_label" msgid="5715229948920451352">"άνοιγμα τηλεφώνου"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"άνοιγμα φωνητικής υποβοήθησης"</string>
-    <string name="camera_label" msgid="8253821920931143699">"άνοιγμα φωτογραφικής μηχανής"</string>
     <string name="cancel" msgid="1089011503403416730">"Ακύρωση"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Επιβεβαίωση"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Δοκιμάστε ξανά"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Απενεργοποίηση αισθητήρων ενεργή"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Διαγραφή όλων των ειδοποιήσεων."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> επιπλέον ειδοποιήσεις εντός της ομάδας.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> επιπλέον ειδοποίηση εντός της ομάδας.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{# ακόμη ειδοποίηση μέσα στην ομάδα.}other{# ακόμη ειδοποιήσεις μέσα στην ομάδα.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Η οθόνη έχει κλειδωθεί σε οριζόντιο προσανατολισμό."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Η οθόνη έχει κλειδωθεί σε κατακόρυφο προσανατολισμό."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Επιδόρπιο"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"Πρόσβαση κάμερας"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Πρόσβαση μικροφώνου"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Διαθέσιμη"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Σημείο πρόσβασης Wi-Fi"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Ενεργοποίηση…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Εξοικ. δεδομ. ενεργή"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d συσκευές</item>
-      <item quantity="one">%d συσκευή</item>
-    </plurals>
+    <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_camera_in_use" msgid="4820591564526512571">"Η κάμερα χρησιμοποιείται"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Δεδομένα κινητής τηλεφωνίας"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Πατήστε ξανά"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Σύρετε προς τα επάνω για άνοιγμα"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Πατήστε το εικονίδιο ξεκλειδώματος για άνοιγμα"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Ξεκλ. με αναγν. προσώπου. Σύρετε προς τα επάνω για άνοιγμα."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Ξεκλείδωμα με πρόσωπο. Πατήστε το εικονίδιο ξεκλειδώματος."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Ξεκλείδωμα με αναγνώριση προσώπου. Πατήστε για άνοιγμα."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Το πρόσωπο αναγνωρίστηκε. Πατήστε για άνοιγμα."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Θέλετε να συνεχίσετε την περίοδο σύνδεσής σας;"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Έναρξη από την αρχή"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Ναι, συνέχεια"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Λειτουργία επισκέπτη"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Βρίσκεστε σε λειτουργία επισκέπτη"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Με την προσθήκη νέου χρήστη θα γίνει έξοδος από τη λειτουργία επισκέπτη και θα διαγραφούν όλες οι εφαρμογές και τα δεδομένα από την τρέχουσα περίοδο σύνδεσης επισκέπτη."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Συμπληρώθηκε το όριο χρηστών"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">Μπορείτε να προσθέσετε έως <xliff:g id="COUNT">%d</xliff:g> χρήστες.</item>
-      <item quantity="one">Είναι δυνατή η δημιουργία μόνο ενός χρήστη.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Είναι δυνατή η δημιουργία μόνο ενός χρήστη.}other{Μπορείτε να προσθέσετε έως και # χρήστες}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Να γίνει υπενθύμιση"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Αναίρεση"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Σε αναβολή για <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d ώρες</item>
-      <item quantity="one">%d ώρα</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d λεπτά</item>
-      <item quantity="one">%d λεπτό</item>
-    </plurals>
+    <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="keyboard_key_button_template" msgid="8005673627272051429">"Κουμπί <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Ειδοποιήσεις"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Μπαταρία"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Στιγμιότυπα οθόνης"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Γενικά μηνύματα"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant Εφαρμογές"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Ρύθμιση"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Αποθηκευτικός χώρος"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Συμβουλές"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant Εφαρμογές"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"εναλλαγή"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Στοιχεία ελέγχου συσκευής"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Επιλογή εφαρμογής για προσθήκη στοιχείων ελέγχου"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other">Προστέθηκαν <xliff:g id="NUMBER_1">%s</xliff:g> στοιχεία ελέγχου.</item>
-      <item quantity="one">Προστέθηκε <xliff:g id="NUMBER_0">%s</xliff:g> στοιχείο ελέγχου.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{Προστέθηκε # στοιχείο ελέγχου.}other{Προστέθηκαν # στοιχεία ελέγχου.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Καταργήθηκε"</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>
@@ -846,7 +831,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="9099497976087485862">"Σύζευξη νέας συσκευής"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Προσθήκη πλακιδίου"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Χωρίς προσθ. πλακιδ."</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Επιλογή χρήστη"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> εφαρμογές είναι ενεργές</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> εφαρμογή είναι ενεργή</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Το Wi‑Fi δεν είναι διαθέσιμο"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Λειτουργία προτεραιότητας"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Το ξυπνητήρι ρυθμίστηκε"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Η κάμερα είναι απενεργοποιημένη"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Το μικρόφωνο είναι απενεργοποιημένο"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Η κάμερα και το μικρόφωνο έχουν απενεργοποιηθεί"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# ειδοποίηση}other{# ειδοποιήσεις}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Μετάδοση"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Διακοπή μετάδοσης με την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Εάν κάνετε μετάδοση με την εφαρμογή <xliff:g id="SWITCHAPP">%1$s</xliff:g> ή αλλάξετε την έξοδο, η τρέχουσα μετάδοση θα σταματήσει"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Μετάδοση με την εφαρμογή <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Αλλαγή εξόδου"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Άγνωστο"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"ΗΗΗ, ΜΜΜ η"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"ώ:λλ"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:λλ"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-el/tiles_states_strings.xml b/packages/SystemUI/res/values-el/tiles_states_strings.xml
index 74c091e..352af39 100644
--- a/packages/SystemUI/res/values-el/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-el/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Ανενεργή"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml
index 2c9d495..2139344 100644
--- a/packages/SystemUI/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Device locked"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Scanning face"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Send"</string>
-    <string name="phone_label" msgid="5715229948920451352">"open phone"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"open voice assist"</string>
-    <string name="camera_label" msgid="8253821920931143699">"open camera"</string>
     <string name="cancel" msgid="1089011503403416730">"Cancel"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Confirm"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Try again"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Sensors off active"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Clear all notifications."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+<xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> more notifications inside.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> more notification inside.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{# more notification inside.}other{# more notifications inside.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Screen is locked in landscape orientation."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Screen is locked in portrait orientation."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Dessert Case"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Auto-rotate"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Auto-rotate screen"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Location"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Screensaver"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Camera access"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Mic access"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Available"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Hotspot"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Turning on…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Data Saver is on"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d devices</item>
-      <item quantity="one">%d device</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# device}other{# devices}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Torch"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Camera in use"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Mobile data"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Tap again"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Swipe up to open"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Press the unlock icon to open"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Unlocked by face. Swipe up to open."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Unlocked by face. Press the unlock icon to open."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Unlocked by face. Press to open."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Face recognised. Press to open."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Do you want to continue your session?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Start again"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Yes, continue"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Guest mode"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"You are in guest mode"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Adding a new user will exit guest mode and delete all apps and data from the current guest session."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"User limit reached"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">You can add up to <xliff:g id="COUNT">%d</xliff:g> users.</item>
-      <item quantity="one">Only one user can be created.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Only one user can be created.}other{You can add up to # users.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Remove user?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"All apps and data of this user will be deleted."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Remove"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Remind me"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Undo"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Snoozed for <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d hours</item>
-      <item quantity="one">%d hour</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d minutes</item>
-      <item quantity="one">%d minute</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# hour}=2{# hours}other{# hours}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minute}other{# minutes}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Battery Saver"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Button <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Alerts"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Battery"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Screenshots"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"General Messages"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant Apps"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Setup"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Storage"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Hints"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant Apps"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"toggle"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Device controls"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Choose app to add controls"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> controls added.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> control added.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# control added.}other{# controls added.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Removed"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Favourited"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Favourited, position <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> devices selected"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(disconnected)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Can\'t switch. Tap to try again."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Pair new device"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Connect a device"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"To cast this session, please open the app."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Unknown app"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Stop casting"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Add tile"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Do not add tile"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Select user"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> apps are active</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> app is active</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# app is active}other{# apps are active}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"New information"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Active apps"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"These apps are active and running, even when you’re not using them. This improves their functionality, but it may also affect battery life."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi unavailable"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Priority mode"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarm set"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Camera is off"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mic is off"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Camera and mic are off"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notification}other{# notifications}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Broadcasting"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Stop broadcasting <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"If you broadcast <xliff:g id="SWITCHAPP">%1$s</xliff:g> or change the output, your current broadcast will stop"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Broadcast <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Change output"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Unknown"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-en-rAU/tiles_states_strings.xml b/packages/SystemUI/res/values-en-rAU/tiles_states_strings.xml
index 6f8cfb6..56cdbef 100644
--- a/packages/SystemUI/res/values-en-rAU/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Off"</item>
     <item msgid="460891964396502657">"On"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Unavailable"</item>
+    <item msgid="8014986104355098744">"Off"</item>
+    <item msgid="5966994759929723339">"On"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml
index 5abb16c..84f337b 100644
--- a/packages/SystemUI/res/values-en-rCA/strings.xml
+++ b/packages/SystemUI/res/values-en-rCA/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Device locked"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Scanning face"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Send"</string>
-    <string name="phone_label" msgid="5715229948920451352">"open phone"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"open voice assist"</string>
-    <string name="camera_label" msgid="8253821920931143699">"open camera"</string>
     <string name="cancel" msgid="1089011503403416730">"Cancel"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Confirm"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Try again"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Sensors off active"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Clear all notifications."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+<xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> more notifications inside.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> more notification inside.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{# more notification inside.}other{# more notifications inside.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Screen is locked in landscape orientation."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Screen is locked in portrait orientation."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Dessert Case"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Auto-rotate"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Auto-rotate screen"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Location"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Screensaver"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Camera access"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Mic access"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Available"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Hotspot"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Turning on…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Data Saver is on"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d devices</item>
-      <item quantity="one">%d device</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# device}other{# devices}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Flashlight"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Camera in use"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Mobile data"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Tap again"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Swipe up to open"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Press the unlock icon to open"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Unlocked by face. Swipe up to open."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Unlocked by face. Press the unlock icon to open."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Unlocked by face. Press to open."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Face recognised. Press to open."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Do you want to continue your session?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Start again"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Yes, continue"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Guest mode"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"You are in guest mode"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Adding a new user will exit guest mode and delete all apps and data from the current guest session."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"User limit reached"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">You can add up to <xliff:g id="COUNT">%d</xliff:g> users.</item>
-      <item quantity="one">Only one user can be created.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Only one user can be created.}other{You can add up to # users.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Remove user?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"All apps and data of this user will be deleted."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Remove"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Remind me"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Undo"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Snoozed for <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d hours</item>
-      <item quantity="one">%d hour</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d minutes</item>
-      <item quantity="one">%d minute</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# hour}=2{# hours}other{# hours}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minute}other{# minutes}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Battery Saver"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Button <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Alerts"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Battery"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Screenshots"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"General Messages"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant Apps"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Setup"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Storage"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Hints"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant Apps"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"toggle"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Device controls"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Choose app to add controls"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> controls added.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> control added.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# control added.}other{# controls added.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Removed"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Favourited"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Favourited, position <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> devices selected"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(disconnected)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Can\'t switch. Tap to try again."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Pair new device"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Connect a device"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"To cast this session, please open the app."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Unknown app"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Stop casting"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Add tile"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Do not add tile"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Select user"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> apps are active</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> app is active</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# app is active}other{# apps are active}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"New information"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Active apps"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"These apps are active and running, even when you’re not using them. This improves their functionality, but it may also affect battery life."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi unavailable"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Priority mode"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarm set"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Camera is off"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mic is off"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Camera and mic are off"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notification}other{# notifications}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Broadcasting"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Stop broadcasting <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"If you broadcast <xliff:g id="SWITCHAPP">%1$s</xliff:g> or change the output, your current broadcast will stop"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Broadcast <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Change output"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Unknown"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-en-rCA/tiles_states_strings.xml b/packages/SystemUI/res/values-en-rCA/tiles_states_strings.xml
index 6f8cfb6..56cdbef 100644
--- a/packages/SystemUI/res/values-en-rCA/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-en-rCA/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Off"</item>
     <item msgid="460891964396502657">"On"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Unavailable"</item>
+    <item msgid="8014986104355098744">"Off"</item>
+    <item msgid="5966994759929723339">"On"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 2c9d495..2139344 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Device locked"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Scanning face"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Send"</string>
-    <string name="phone_label" msgid="5715229948920451352">"open phone"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"open voice assist"</string>
-    <string name="camera_label" msgid="8253821920931143699">"open camera"</string>
     <string name="cancel" msgid="1089011503403416730">"Cancel"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Confirm"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Try again"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Sensors off active"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Clear all notifications."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+<xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> more notifications inside.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> more notification inside.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{# more notification inside.}other{# more notifications inside.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Screen is locked in landscape orientation."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Screen is locked in portrait orientation."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Dessert Case"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Auto-rotate"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Auto-rotate screen"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Location"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Screensaver"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Camera access"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Mic access"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Available"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Hotspot"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Turning on…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Data Saver is on"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d devices</item>
-      <item quantity="one">%d device</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# device}other{# devices}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Torch"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Camera in use"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Mobile data"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Tap again"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Swipe up to open"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Press the unlock icon to open"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Unlocked by face. Swipe up to open."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Unlocked by face. Press the unlock icon to open."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Unlocked by face. Press to open."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Face recognised. Press to open."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Do you want to continue your session?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Start again"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Yes, continue"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Guest mode"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"You are in guest mode"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Adding a new user will exit guest mode and delete all apps and data from the current guest session."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"User limit reached"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">You can add up to <xliff:g id="COUNT">%d</xliff:g> users.</item>
-      <item quantity="one">Only one user can be created.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Only one user can be created.}other{You can add up to # users.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Remove user?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"All apps and data of this user will be deleted."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Remove"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Remind me"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Undo"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Snoozed for <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d hours</item>
-      <item quantity="one">%d hour</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d minutes</item>
-      <item quantity="one">%d minute</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# hour}=2{# hours}other{# hours}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minute}other{# minutes}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Battery Saver"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Button <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Alerts"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Battery"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Screenshots"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"General Messages"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant Apps"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Setup"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Storage"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Hints"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant Apps"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"toggle"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Device controls"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Choose app to add controls"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> controls added.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> control added.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# control added.}other{# controls added.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Removed"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Favourited"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Favourited, position <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> devices selected"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(disconnected)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Can\'t switch. Tap to try again."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Pair new device"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Connect a device"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"To cast this session, please open the app."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Unknown app"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Stop casting"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Add tile"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Do not add tile"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Select user"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> apps are active</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> app is active</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# app is active}other{# apps are active}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"New information"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Active apps"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"These apps are active and running, even when you’re not using them. This improves their functionality, but it may also affect battery life."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi unavailable"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Priority mode"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarm set"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Camera is off"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mic is off"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Camera and mic are off"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notification}other{# notifications}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Broadcasting"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Stop broadcasting <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"If you broadcast <xliff:g id="SWITCHAPP">%1$s</xliff:g> or change the output, your current broadcast will stop"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Broadcast <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Change output"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Unknown"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-en-rGB/tiles_states_strings.xml b/packages/SystemUI/res/values-en-rGB/tiles_states_strings.xml
index 6f8cfb6..56cdbef 100644
--- a/packages/SystemUI/res/values-en-rGB/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Off"</item>
     <item msgid="460891964396502657">"On"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Unavailable"</item>
+    <item msgid="8014986104355098744">"Off"</item>
+    <item msgid="5966994759929723339">"On"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index 2c9d495..2139344 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Device locked"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Scanning face"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Send"</string>
-    <string name="phone_label" msgid="5715229948920451352">"open phone"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"open voice assist"</string>
-    <string name="camera_label" msgid="8253821920931143699">"open camera"</string>
     <string name="cancel" msgid="1089011503403416730">"Cancel"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Confirm"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Try again"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Sensors off active"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Clear all notifications."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+<xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> more notifications inside.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> more notification inside.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{# more notification inside.}other{# more notifications inside.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Screen is locked in landscape orientation."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Screen is locked in portrait orientation."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Dessert Case"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Auto-rotate"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Auto-rotate screen"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Location"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Screensaver"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Camera access"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Mic access"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Available"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Hotspot"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Turning on…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Data Saver is on"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d devices</item>
-      <item quantity="one">%d device</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# device}other{# devices}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Torch"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Camera in use"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Mobile data"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Tap again"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Swipe up to open"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Press the unlock icon to open"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Unlocked by face. Swipe up to open."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Unlocked by face. Press the unlock icon to open."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Unlocked by face. Press to open."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Face recognised. Press to open."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Do you want to continue your session?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Start again"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Yes, continue"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Guest mode"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"You are in guest mode"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Adding a new user will exit guest mode and delete all apps and data from the current guest session."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"User limit reached"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">You can add up to <xliff:g id="COUNT">%d</xliff:g> users.</item>
-      <item quantity="one">Only one user can be created.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Only one user can be created.}other{You can add up to # users.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Remove user?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"All apps and data of this user will be deleted."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Remove"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Remind me"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Undo"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Snoozed for <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d hours</item>
-      <item quantity="one">%d hour</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d minutes</item>
-      <item quantity="one">%d minute</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# hour}=2{# hours}other{# hours}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minute}other{# minutes}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Battery Saver"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Button <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Alerts"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Battery"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Screenshots"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"General Messages"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant Apps"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Setup"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Storage"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Hints"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant Apps"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"toggle"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Device controls"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Choose app to add controls"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> controls added.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> control added.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# control added.}other{# controls added.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Removed"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Favourited"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Favourited, position <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> devices selected"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(disconnected)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Can\'t switch. Tap to try again."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Pair new device"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Connect a device"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"To cast this session, please open the app."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Unknown app"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Stop casting"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Add tile"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Do not add tile"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Select user"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> apps are active</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> app is active</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# app is active}other{# apps are active}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"New information"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Active apps"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"These apps are active and running, even when you’re not using them. This improves their functionality, but it may also affect battery life."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi unavailable"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Priority mode"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarm set"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Camera is off"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mic is off"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Camera and mic are off"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notification}other{# notifications}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Broadcasting"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Stop broadcasting <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"If you broadcast <xliff:g id="SWITCHAPP">%1$s</xliff:g> or change the output, your current broadcast will stop"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Broadcast <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Change output"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Unknown"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-en-rIN/tiles_states_strings.xml b/packages/SystemUI/res/values-en-rIN/tiles_states_strings.xml
index 6f8cfb6..56cdbef 100644
--- a/packages/SystemUI/res/values-en-rIN/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Off"</item>
     <item msgid="460891964396502657">"On"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Unavailable"</item>
+    <item msgid="8014986104355098744">"Off"</item>
+    <item msgid="5966994759929723339">"On"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml
index 7fde88c..c8d0442 100644
--- a/packages/SystemUI/res/values-en-rXC/strings.xml
+++ b/packages/SystemUI/res/values-en-rXC/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‎‏‎‏‏‏‎‎‎‎‏‏‎‎‎‎‎‏‏‏‏‎‎‎‏‎‎‎‏‎‏‏‏‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‏‏‏‏‎Device locked‎‏‎‎‏‎"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‎‏‏‏‏‎‏‏‏‏‏‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‎‎‎‏‏‎‎‎‏‏‎‏‎‎‎‎‏‎‏‏‎Scanning face‎‏‎‎‏‎"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‎‏‏‏‏‏‏‎‎‏‏‎‏‏‎‎‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‏‎‏‎‎‎‎‏‎‎‏‏‎‏‎‎‏‎‏‎Send‎‏‎‎‏‎"</string>
-    <string name="phone_label" msgid="5715229948920451352">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‎‏‎‎‎‎‏‎‎‏‎‎‏‏‎‏‎‏‏‎‏‏‏‎‏‎‎‎‏‏‎‎‎‏‎‎‏‏‏‏‎‏‎‎‎‏‎‎‎‏‏‎‎‎‎open phone‎‏‎‎‏‎"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‎‏‎‏‎‏‎‎‏‎‏‏‎‏‎‏‎‏‎‎‏‎‏‎‏‎‏‎‏‏‏‎‏‏‎‎‏‎‏‏‎‏‎‎‏‎‏‏‏‏‎‎‎open voice assist‎‏‎‎‏‎"</string>
-    <string name="camera_label" msgid="8253821920931143699">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‎‏‏‎‏‏‏‎‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‎‏‎‎‎‏‏‎‏‏‏‎‏‏‏‎‎‎‎‎‎‎‎‏‎‎‏‏‎open camera‎‏‎‎‏‎"</string>
     <string name="cancel" msgid="1089011503403416730">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‏‎‎‏‎‎‎‏‏‎‎‎‏‎‏‎‎‏‎‎‎‏‎‏‎‏‏‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‏‎‎Cancel‎‏‎‎‏‎"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‏‎‏‏‎‏‎‏‎‏‎‏‎‏‏‎‎‎‏‎‎‎‎‎‎‏‎‏‎‏‎‎‎‏‎‏‏‎‏‎‎‎‎‎‎‏‏‏‏‏‏‏‏‎Confirm‎‏‎‎‏‎"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‎‏‎‎‏‏‎‎‎‏‎‏‎‎‎‏‎‎‏‏‎‏‎‏‎‎‎‏‏‎‎‎Try again‎‏‎‎‏‎"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‎‏‏‎‏‏‎‎‏‎‎‎‏‎‎‏‏‎‎‏‏‏‎‎‏‎‎‎‏‏‏‎‎‎‎‏‎‎‎‎‎‏‏‎‏‏‎‎‏‏‏‏‏‏‎Sensors off active‎‏‎‎‏‎"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‏‏‎‏‏‎‏‎‏‎‏‎‏‏‎‏‎‏‏‎‏‎‎‏‏‎‎‎‎‎Clear all notifications.‎‏‎‎‏‎"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‎‏‎‏‏‎‏‎‎‎‎‏‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‏‎‏‎‎‎‎+ ‎‏‎‎‏‏‎<xliff:g id="NUMBER">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‎‏‎‎‎‏‎‏‎‎‎‎‎‎‏‏‏‎‏‏‎‏‎‎‏‏‏‎‎‎‎‏‏‏‏‏‎‎‎‏‎‏‎‏‎‏‎‎‎‏‏‎‏‎‎‎‎‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%s</xliff:g>‎‏‎‎‏‏‏‎ more notifications inside.‎‏‎‎‏‎</item>
-      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‏‏‎‏‎‎‎‏‎‏‎‎‎‎‎‎‏‏‏‎‏‏‎‏‎‎‏‏‏‎‎‎‎‏‏‏‏‏‎‎‎‏‎‏‎‏‎‏‎‎‎‏‏‎‏‎‎‎‎‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%s</xliff:g>‎‏‎‎‏‏‏‎ more notification inside.‎‏‎‎‏‎</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‏‎‏‏‏‎‏‏‎‏‎‏‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‏‏‎‎‎‎‎‎‏‎‎‎‎‎‏‎‏‎‏‎‏‏‏‏‏‎‎# more notification inside.‎‏‎‎‏‎}other{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‏‎‏‏‏‎‏‏‎‏‎‏‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‏‏‎‎‎‎‎‎‏‎‎‎‎‎‏‎‏‎‏‎‏‏‏‏‏‎‎# more notifications inside.‎‏‎‎‏‎}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎‎‎‎‎‎‎‎‏‏‎‎‏‎‏‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‎‏‎‎‏‏‎‏‎‎‏‏‏‎‏‎‏‏‏‎‎‎‏‎‎‎‎Screen is locked in landscape orientation.‎‏‎‎‏‎"</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‏‎‏‎‎‎‏‏‏‎‎‎‏‏‎‎‏‎‏‏‏‎‎‎‏‎‎‏‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎Screen is locked in portrait orientation.‎‏‎‎‏‎"</string>
     <string name="dessert_case" msgid="9104973640704357717">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‎‏‎‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎‏‏‎‏‏‏‎‏‏‏‏‎‏‎‎‏‏‏‎‏‎‏‎‏‎‏‎‏‎‏‎Dessert Case‎‏‎‎‏‎"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎‎‎‎‎‎‎‎‏‎‎‎‎‏‎‏‎‎‎‎‎‏‎‎‎‎‏‎‎‏‎‎‎‎‏‎‎‏‎‏‏‏‎‏‏‏‏‎‎‎‎‎‎‎‎Auto-rotate‎‏‎‎‏‎"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‏‎‎‎‎‏‏‏‎‎‏‎‏‎‎‎‎‏‏‎‎‏‏‎‏‏‎‏‏‎‎‏‎‎‎‏‎‎‎‎‎‏‎‎Auto-rotate screen‎‏‎‎‏‎"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‏‎‎‎‏‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‏‏‎‎‎‏‏‎‏‎‎‏‏‏‎‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎Location‎‏‎‎‏‎"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‏‏‏‎‎‎‎‎‎‏‎‎‏‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‎‏‏‎‏‏‎‎‎‎Screen saver‎‏‎‎‏‎"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‎‎‎‏‎‎‎‎‏‏‎‏‎‎‎‎‎‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‎‏‎‎‎‏‎‎‎‏‎‏‏‎‏‏‎Camera access‎‏‎‎‏‎"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‏‎‎‏‎‎‎‎‏‎‎‏‏‏‎‏‎‏‏‏‎‎‎‏‎‎‎‏‏‏‎Mic access‎‏‎‎‏‎"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‎‏‏‎‎‏‎‏‎‎‏‏‎‎‏‏‎‏‏‎‏‎‏‎‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎‏‎‏‎‏‎‎‏‎‏‎‎Available‎‏‎‎‏‎"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‎‎‏‎‎‎‏‏‎‎‏‏‎‏‎‏‎‏‏‏‎‎‏‏‎‎‏‏‏‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎‎‎‎Hotspot‎‏‎‎‏‎"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‎‏‎‏‎‏‏‏‏‎‏‎‏‎‏‏‏‎‏‎‎‏‎‏‎‏‎‎‏‎‏‏‎‏‎‏‏‎‎‏‎‏‎‎‏‏‏‏‎‏‎‎‎Turning on…‎‏‎‎‏‎"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎‎‎‏‎‏‎‎‎‎‎‎‏‏‎‎‏‎‎‏‏‏‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‎‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎Data Saver is on‎‏‎‎‏‎"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‏‏‎‏‏‏‎‏‏‏‎‎‏‎‏‎‎‎‎‏‏‏‎‏‎‎‎‏‎‏‏‎‎‎‏‎‏‏‏‎‎‏‎‏‏‎‏‏‎‏‎‎‎‎%d devices‎‏‎‎‏‎</item>
-      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‏‏‎‏‏‏‎‏‏‏‎‎‏‎‏‎‎‎‎‏‏‏‎‏‎‎‎‏‎‏‏‎‎‎‏‎‏‏‏‎‎‏‎‏‏‎‏‏‎‏‎‎‎‎%d device‎‏‎‎‏‎</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‏‎‎‎‎‎‏‎‏‏‎‎‏‎‏‎‏‎‏‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‎‎‏‎‎‏‎‏‎‎‎‎‏‎# device‎‏‎‎‏‎}other{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‏‎‎‎‎‎‏‎‏‏‎‎‏‎‏‎‏‎‏‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‎‎‏‎‎‏‎‏‎‎‎‎‏‎# devices‎‏‎‎‏‎}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‎‎‏‎‎‎‎‏‏‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‎‎‎‏‏‏‎‎‏‏‎‎‏‎Flashlight‎‏‎‎‏‎"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‏‎‎‏‏‎‎‎‏‎‏‏‏‎‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‎‏‏‎‏‏‎‎‎‏‏‏‎‏‎‎‏‏‎‏‏‏‎‏‏‎Camera in use‎‏‎‎‏‎"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‎‎‎‎‎‎‏‎‎‏‏‏‎‎‎‏‎‎‏‎‎‎‎‏‎‏‎‎‏‎‏‏‎‏‎‎‏‎‎‎‎‎‏‏‎‎‎‏‎‏‎‏‏‎‏‎Mobile data‎‏‎‎‏‎"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎‎‎‏‎‏‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‎‎‏‎‏‏‏‏‎Tap again‎‏‎‎‏‎"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‏‏‎‏‎‎‏‏‏‏‎‏‏‎‏‏‏‎‎‏‏‏‏‎‏‎‎‎‎‎‏‏‏‎‏‏‏‎‎‎‏‎‎‏‎‎‎‎‎‏‎Swipe up to open‎‏‎‎‏‎"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‎‎‎‏‏‎‎‎‏‎‎‎‏‏‏‏‏‎‎‏‎‏‏‏‎‎‎‎‏‎‎‎‎‏‏‎‎‎‎‏‎‏‏‎‎‏‎‎‏‎Press the unlock icon to open‎‏‎‎‏‎"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‏‏‏‎‏‎‏‎‎‎‎‏‎‎‎‏‏‏‏‏‎‏‎‎‎‎‎‎‎‎‏‏‎‎‏‎‎‏‏‎‎‎‏‎‎‏‏‏‎‎‏‎Unlocked by face. Swipe up to open.‎‏‎‎‏‎"</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‏‏‏‎‏‏‎‏‎‏‎‏‎‏‎‏‏‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‎‎‏‏‎‏‎‎‏‎‎‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎Unlocked by face. Press the unlock icon to open.‎‏‎‎‏‎"</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‎‏‎‎‎‏‎‏‏‎‎‏‎‏‏‎‎‏‎‏‏‏‏‎‎‏‏‎‏‎‎‏‎‎‏‏‎‎‏‏‏‏‎‎‏‏‎‏‏‏‎‎‏‎‎Unlocked by face. Press to open.‎‏‎‎‏‎"</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‏‎‏‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‎‏‏‎‏‎‎‏‎‎‎‏‏‎‏‏‎‏‏‎‏‏‏‎‏‏‎‎‏‎‏‏‎‎Face recognized. Press to open.‎‏‎‎‏‎"</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‏‎‎‏‎‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‎‎‎‏‎‏‏‏‏‏‎‎‎‏‎Do you want to continue your session?‎‏‎‎‏‎"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‎‎‏‎‎‎‏‎‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‏‏‏‏‎‎‏‏‏‎‎‏‎‎‎‎‏‏‏‎‏‎Start over‎‏‎‎‏‎"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‏‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‏‎‎‏‏‎‏‎‎‎‏‏‎‎‎‎‏‏‏‏‎‎‎‎‏‏‎‎‎‏‏‎‏‎Yes, continue‎‏‎‎‏‎"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‏‏‏‏‎‎‏‏‎‏‎‎‎‏‎‎‎‏‏‏‏‏‎‎‎‎‎‎‏‎‎‎‎‏‎‏‏‏‎‏‎‎‎‏‎‏‎Guest mode‎‏‎‎‏‎"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‎‏‎‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‏‎‏‏‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‎You are in guest mode‎‏‎‎‏‎"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‎‏‎‎‎‏‎‎‏‎‎‎‏‎‏‎‎‎‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Adding a new user will exit guest mode and delete all apps and data from the current guest session.‎‏‎‎‏‎"</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‏‎‏‏‎‏‏‎‎‏‎‏‏‎‏‏‎‏‎‏‎‎‎‎‎‎‏‎‎‏‏‏‎‏‏‏‎‎‏‏‎‏‏‎‎‎‏‏‎‏‎‎‏‎‎‏‎User limit reached‎‏‎‎‏‎"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‏‏‎‏‏‏‎‎‎‎‏‎‎‏‎‎‏‎‏‎‎‏‏‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‏‎‏‏‏‎‎You can add up to ‎‏‎‎‏‏‎<xliff:g id="COUNT">%d</xliff:g>‎‏‎‎‏‏‏‎ users.‎‏‎‎‏‎</item>
-      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‏‏‎‏‏‏‎‎‎‎‏‎‎‏‎‎‏‎‏‎‎‏‏‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‏‎‏‏‏‎‎Only one user can be created.‎‏‎‎‏‎</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‏‎‏‏‎‏‏‏‏‏‎‎‏‏‏‎‏‏‏‏‏‎‎‏‎‏‎‎‎‏‎‎‏‎‏‎‎‏‏‎‎‎‎‎‏‏‎‎‎‏‏‎‏‎‎‎Only one user can be created.‎‏‎‎‏‎}other{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‏‎‏‏‎‏‏‏‏‏‎‎‏‏‏‎‏‏‏‏‏‎‎‏‎‏‎‎‎‏‎‎‏‎‏‎‎‏‏‎‎‎‎‎‏‏‎‎‎‏‏‎‏‎‎‎You can add up to # users.‎‏‎‎‏‎}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‎‏‎‎‎‏‎‏‏‏‏‎‏‎‎‎‎‎‏‏‏‎‏‏‎‏‎‏‏‎‎‎‏‎‎‎‏‎‎Remove user?‎‏‎‎‏‎"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‎‎‏‎‏‎‏‎‎‎‎‎‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‎‏‏‏‎‎‏‏‏‏‎‎‎‎‎‎‎‎‎‏‎‏‏‎‎‏‎All apps and data of this user will be deleted.‎‏‎‎‏‎"</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‎‏‎‎‎‏‎‏‎‏‎‎‎‏‏‏‏‎‎‏‏‏‎‏‎‏‎‎‎‏‎‎‎‎Remove‎‏‎‎‏‎"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‎‏‎‎‎‏‎‎‎‏‎‎‏‎‏‏‎‎‎‏‏‎‎‎‎‏‎‏‏‎‎‎‏‎‎‎‏‎‏‎‏‎‏‏‏‏‏‎‎‏‎‏‏‎Remind me‎‏‎‎‏‎"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‎‎‎‎‏‎‎‏‎‏‎‏‎‎‎‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‏‎‎‏‏‏‎Undo‎‏‎‎‏‎"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‎‏‎‏‎‏‎‏‎‏‏‏‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‏‎‎‏‎‎‏‏‏‏‎‎‏‎‎‏‏‎‏‏‏‎‏‎Snoozed for ‎‏‎‎‏‏‎<xliff:g id="TIME_AMOUNT">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎‏‎‏‏‏‎‏‏‏‎‎‎‏‎‏‏‎‏‎‏‏‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎%d hours‎‏‎‎‏‎</item>
-      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎‏‎‏‏‏‎‏‏‏‎‎‎‏‎‏‏‎‏‎‏‏‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎%d hour‎‏‎‎‏‎</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‎‏‎‎‎‎‏‎‎‎‏‏‎‎‎‎‎‏‏‏‎‏‏‏‎‏‏‏‏‎‏‏‏‎‎‏‎‏‎‏‎‎‏‎‏‎‏‏‎‎‎%d minutes‎‏‎‎‏‎</item>
-      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‎‏‎‎‎‎‏‎‎‎‏‏‎‎‎‎‎‏‏‏‎‏‏‏‎‏‏‏‏‎‏‏‏‎‎‏‎‏‎‏‎‎‏‎‏‎‏‏‎‎‎%d minute‎‏‎‎‏‎</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‎‏‎‏‎‏‎‏‏‏‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‎‎‏‏‏‎‏‎‏‏‎‎# hour‎‏‎‎‏‎}=2{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‎‏‎‏‎‏‎‏‏‏‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‎‎‏‏‏‎‏‎‏‏‎‎# hours‎‏‎‎‏‎}other{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‎‏‎‏‎‏‎‏‏‏‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‎‎‏‏‏‎‏‎‏‏‎‎# hours‎‏‎‎‏‎}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‏‎‏‏‎‎‎‎‏‎‏‏‎‎‏‏‎‎‏‏‎‎‏‎‏‎‏‎‏‎‏‏‏‎‎‏‎‎‏‎‎‎‎‎‏‏‎# minute‎‏‎‎‏‎}other{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‏‎‏‏‎‎‎‎‏‎‏‏‎‎‏‏‎‎‏‏‎‎‏‎‏‎‏‎‏‎‏‏‏‎‎‏‎‎‏‎‎‎‎‎‏‏‎# minutes‎‏‎‎‏‎}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‎‎‏‏‎‏‎‎‏‏‎‏‎‏‎‏‏‎‏‎‏‏‎‎‎‏‎‏‎‎‎‏‏‎‏‏‏‎‎‏‎‎‏‏‎‎‏‏‎‏‎‏‎Battery Saver‎‏‎‎‏‎"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‎‏‏‏‎‏‏‏‎‏‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‏‎‎‎‎‏‏‎‏‏‏‏‎‏‎‏‏‏‎‎‏‎‏‎Button ‎‏‎‎‏‏‎<xliff:g id="NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‎‏‎‎‏‏‎‏‎‎‎‎‎‏‏‎‎‏‎‏‎‏‎‎‏‏‏‎‎‎‎‏‎‎‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‎Home‎‏‎‎‏‎"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‏‎‏‏‎‎‎‏‎‏‏‏‎‏‎‎‏‏‎‎‎‏‎‏‎‏‏‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎Alerts‎‏‎‎‏‎"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‎‎‏‎‎‏‎‏‏‏‎‏‏‏‎‎‏‎‎‎‏‏‎‏‏‎‎‏‎‎‏‏‏‏‎‏‏‎‎‎‎‏‎‎Battery‎‏‎‎‏‎"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‎‎‏‎‎‏‏‏‎‎‏‎‎‎‏‎‎‎‎‎‎‏‎‏‎‏‎‏‎‎‏‏‎‏‏‏‎‏‎‎‏‎‎‏‎‎‎‏‏‏‎‏‎Screenshots‎‏‎‎‏‎"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‏‏‎‎‏‏‏‎‏‏‎‎‏‏‎‎‎‎‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎‏‎‎‏‎General Messages‎‏‎‎‏‎"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‏‏‏‎‎‏‏‎‎‏‎‎‏‎‎‏‎‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‏‎‏‏‏‏‎‏‎‏‎‎‎‎Instant Apps‎‏‎‎‏‎"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‎‎‏‎‎‎‎‏‏‎‏‎‎‏‎‏‎‎‎‏‎‎‏‏‏‏‎‎Setup‎‏‎‎‏‎"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‎‎‎‎‏‏‏‏‏‎‏‎‏‏‎‎‏‏‏‎‏‏‎‏‏‎‏‏‎‎‏‏‏‎‎‏‎‎‎‏‎‎‏‏‎‎‎‎‎‎‎‎‏‎Storage‎‏‎‎‏‎"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‎‎‏‎‏‎‏‎‏‏‎‎‎‎‎‎‎‏‎‎‏‏‎‏‏‎‎‎‏‎‎‎‏‎‏‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‎Hints‎‏‎‎‏‎"</string>
     <string name="instant_apps" msgid="8337185853050247304">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‏‎‎‎‏‏‎‏‏‎‏‎‏‏‏‏‎‎‎‏‏‎‏‏‎‎‎‏‎‎‎‏‎‎‎‎Instant Apps‎‏‎‎‏‎"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‎‏‎‎‎‏‏‎‎‎‏‏‏‎‎‏‎‏‏‎‏‏‎‎‏‎‏‎‎‎‏‎‏‏‎‏‏‏‎‏‎‎‎‏‏‎‎‎‏‎‏‎toggle‎‏‎‎‏‎"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‎‎‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‏‎‎‎‎‎‎‏‎Device controls‎‏‎‎‏‎"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‏‎‎‎‎‏‎‎‏‏‏‎‏‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‎Choose app to add controls‎‏‎‎‏‎"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‎‏‎‏‏‎‎‎‏‏‏‎‏‎‎‎‏‎‎‎‎‎‎‎‏‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‏‏‎‎‏‏‎‎‎‎‏‎‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="NUMBER_1">%s</xliff:g>‎‏‎‎‏‏‏‎ controls added.‎‏‎‎‏‎</item>
-      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‎‏‎‏‏‎‎‎‏‏‏‎‏‎‎‎‏‎‎‎‎‎‎‎‏‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‏‏‎‎‏‏‎‎‎‎‏‎‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="NUMBER_0">%s</xliff:g>‎‏‎‎‏‏‏‎ control added.‎‏‎‎‏‎</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‏‎‎‏‎‏‎‎‏‎‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‏‎‎‏‎‎‏‏‎‎‏‎‎‏‎‎‏‎‏‎‎‏‎‎‎‎‏‏‎# control added.‎‏‎‎‏‎}other{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‏‎‎‏‎‏‎‎‏‎‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‏‎‎‏‎‎‏‏‎‎‏‎‎‏‎‎‏‎‏‎‎‏‎‎‎‎‏‏‎# controls added.‎‏‎‎‏‎}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‎‎‏‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‏‎‎‏‎‎‏‏‎‏‎‏‏‏‎‏‎‎‏‎‏‏‏‎‏‏‏‏‏‏‏‏‎Removed‎‏‎‎‏‎"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‎‎‎‏‎‎‏‎‏‎‎‏‏‎‎‏‏‎‏‏‎‏‏‏‏‎‎‎‎‏‏‎‏‎‏‎‎‎‏‏‎‏‏‎‎‎‎‎‎‎‏‎Favorited‎‏‎‎‏‎"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‎‏‏‎‎‎‎‎‎‏‎‏‎‎‎‎‏‎‎‎‎‏‎‎‏‏‎‎‏‎‏‎‎‏‎‏‎‎‎‏‎‏‏‏‎‏‏‎‏‏‏‎‎‎‏‎‏‎Favorited, position ‎‏‎‎‏‏‎<xliff:g id="NUMBER">%d</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‎‏‎‏‏‎‏‏‏‎‏‏‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‏‏‎‎‏‏‏‎‎‎‎‏‏‎‏‏‎‏‎‎‎‏‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="COUNT">%1$d</xliff:g>‎‏‎‎‏‏‏‎ devices selected‎‏‎‎‏‎"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‎‎‏‏‎‏‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎‏‎‏‏‎‏‎‎‎‏‎‎‏‎‎‎‏‎(disconnected)‎‏‎‎‏‎"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‎‎‎‏‏‏‎‏‎‎‎‎‎‏‎‎‎‏‏‎‏‎‏‎‎‏‏‏‏‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‎‏‏‏‏‎‏‏‎Can\'t switch. Tap to try again.‎‏‎‎‏‎"</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‏‏‎‎‏‎‏‎‏‏‎‎‏‏‎‎‎‏‎‏‎‎‏‎‎‏‏‏‎‏‏‎‏‎‎‏‏‎‎Pair new device‎‏‎‎‏‎"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‎‎‎‎‎‎‎‏‏‏‏‏‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‏‏‏‎‏‏‎‏‏‎‎Connect a device‎‏‎‎‏‎"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‎‎‏‏‎‎‏‎‎‏‏‏‎‏‏‎‎‏‎‏‎‎‏‎‎‏‎‏‎‏‎‏‏‏‏‎‎‏‏‎‏‎‎‎‎‏‏‎‎‎‎‏‎‎‏‏‎To cast this session, please open the app.‎‏‎‎‏‎"</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‎‎‎‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‏‎‎‎‏‎‏‎‎‎‎‏‏‏‎‎‎‏‎‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‎‎‎Unknown app‎‏‎‎‏‎"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‎‏‎‏‏‏‎‎‎‎‎‏‏‏‎‏‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‏‏‎‏‎‏‎‏‎‎‎‎‎‏‎‎‏‎‏‎‏‎Stop casting‎‏‎‎‏‎"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‏‎‏‎‏‏‏‎‏‎‎‏‏‎‏‎‏‎‎‏‏‎‎‎‏‎‏‎‎‎‎‎‏‎‏‏‎‏‏‎‏‏‏‎‎‏‎‎‏‎‎‎‎‎‎‎Add tile‎‏‎‎‏‎"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‏‏‎‏‎‎‏‎‎‎‎‎‏‏‎‏‎‎‎‏‎‏‏‏‎‏‏‎‏‏‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‏‎‎‎‎‎‎Do not add tile‎‏‎‎‏‎"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‎‎‎‏‎‏‎‏‎‏‏‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‏‏‎‎‎‎‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‏‏‎‏‏‎‎Select user‎‏‎‎‏‎"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‏‏‏‏‏‎‎‎‎‎‏‏‏‎‎‎‎‏‏‎‎‎‏‏‏‎‏‏‎‎‏‏‎‎‏‎‏‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‎‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="COUNT_1">%s</xliff:g>‎‏‎‎‏‏‏‎ apps are active‎‏‎‎‏‎</item>
-      <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‏‏‏‏‏‎‎‎‎‎‏‏‏‎‎‎‎‏‏‎‎‎‏‏‏‎‏‏‎‎‏‏‎‎‏‎‏‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‎‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="COUNT_0">%s</xliff:g>‎‏‎‎‏‏‏‎ app is active‎‏‎‎‏‎</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‏‎‎‏‏‏‏‏‎‎‎‏‎‎‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‎‏‎‏‎‏‏‏‎‏‎‎‎‏‎‏‏‎‎‏‏‏‎# app is active‎‏‎‎‏‎}other{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‏‎‎‏‏‏‏‏‎‎‎‏‎‎‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‎‏‎‏‎‏‏‏‎‏‎‎‎‏‎‏‏‎‎‏‏‏‎# apps are active‎‏‎‎‏‎}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‎‎‎‎‏‎‏‏‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‎‏‎‎‏‎‏‏‏‏‎‎‎‎‏‎‎‏‎‏‏‏‎‎‎‎‏‏‎‎‎‎New information‎‏‎‎‏‎"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‏‎‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‎‏‎‏‎‎‏‎‎‎‎‏‏‏‎‎‏‎‏‎‏‎Active apps‎‏‎‎‏‎"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‎‎‏‏‎‏‏‏‏‎‎‏‏‏‏‏‎‎‏‎‏‏‏‏‏‏‎‎‎‎‏‎‎‎‏‏‎‏‎‎‎‏‏‏‏‏‏‏‎‏‏‏‎‎‎These apps are active and running, even when you’re not using them. This improves their functionality, but it may also affect battery life.‎‏‎‎‏‎"</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‎‏‎‎‎‏‏‎‎‏‏‎‎‏‎‏‎‎‏‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‏‏‎‎‏‏‎‏‎‏‏‏‎‏‏‏‏‏‎‎Wi‑Fi unavailable‎‏‎‎‏‎"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‏‎‏‎‏‏‏‎‎‎‏‎‏‏‎‎‎‏‎‏‎‎‎‏‏‏‎‎‎‏‏‎‏‎‏‏‎‎‏‎‎‏‏‏‏‎‎‏‎‎‎‏‏‎Priority mode‎‏‎‎‏‎"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‏‏‎‎‏‎‏‎‏‎‎‎‎‎‎‎‎‎‏‏‎‎‏‎‎‏‏‏‎‎‎‏‎‎‏‎‏‎‎‏‎‎‏‏‎‎Alarm set‎‏‎‎‏‎"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‎‏‏‎‏‏‎‏‏‏‎‎‎‏‎‏‎‏‎‎‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‎‏‎‏‎‎‎‎‎‎‎‎‎‏‏‏‎Camera is off‎‏‎‎‏‎"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‎‎‏‏‎‏‎‏‏‏‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‎‎‎‎‎‎‏‎‎‎Mic is off‎‏‎‎‏‎"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‎‎‏‏‎‏‎‏‎‎‏‎‎‎‏‎‏‎‎‏‎‎‎‎‏‏‎‏‎‏‎‎‏‏‎‎‎‎‎‏‏‏‎‏‎‎‎‎‎‎‎‎‏‎Camera and mic are off‎‏‎‎‏‎"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‏‎‏‎‎‏‏‎‎‎‏‏‏‎‏‎‏‎‎‎‎‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‎# notification‎‏‎‎‏‎}other{‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‏‎‏‎‎‏‏‎‎‎‏‏‏‎‏‎‏‎‎‎‎‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‎‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‎# notifications‎‏‎‎‏‎}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‏‏‏‎‎‎‏‎‎‏‏‏‎‎‏‏‎‏‏‎‏‏‎‎‏‎‏‎‏‏‎‏‏‎‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‏‎‎‎‎‎‎‏‎‎‏‏‎<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>‎‏‎‎‏‏‏‎, ‎‏‎‎‏‏‎<xliff:g id="TEMPERATURE">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‏‎‏‎‎‎‎‎‎‎‎‎‏‏‏‎‎‎‏‎‏‎‎‎‎‏‎‎‎‏‎‏‏‏‎‏‏‎‏‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‎Broadcasting‎‏‎‎‏‎"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‎‎‎‏‏‏‎‏‏‏‎‏‎‎‎‏‏‏‎‏‎‏‎‏‏‎‏‏‏‎‎‎‏‏‏‏‎‎‏‏‎Stop broadcasting ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎?‎‏‎‎‏‎"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‎‏‎‎‏‏‎‎‎‏‎‎‎‏‏‏‏‏‎‏‎‎‎‏‏‎‏‎‏‏‎‎‏‎‎‎‎‎‎‏‎If you broadcast ‎‏‎‎‏‏‎<xliff:g id="SWITCHAPP">%1$s</xliff:g>‎‏‎‎‏‏‏‎ or change the output, your current broadcast will stop‎‏‎‎‏‎"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‏‎‎‎‏‏‎‎‏‎‏‏‎‏‎‏‏‎‏‏‎‏‏‎‏‎‏‎‎‎‏‏‎‏‎‏‏‎‏‎‎‏‏‏‎‎‎‏‎‎‎‏‎‏‎Broadcast ‎‏‎‎‏‏‎<xliff:g id="SWITCHAPP">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‏‎‏‏‎‎‎‎‎‏‎‏‎‎‏‎‏‎‎‏‎‎‏‎‏‏‏‎‏‏‎‏‎‎‎‎‎‏‎‎‏‏‏‎‏‏‏‎‎‏‎‎Change output‎‏‎‎‏‎"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‏‏‏‏‎‎‎‎‎‎‎‏‏‏‏‏‎‏‎‎‏‏‎‎‎‎‏‎‏‎‏‏‎‏‏‏‎‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‎‎Unknown‎‏‎‎‏‎"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‏‎‏‎‎‎‏‎‏‎‎‎‎‎‏‎‎‏‎‎‏‏‎‎‏‏‎‎‎‏‏‏‎‏‎‎‎‏‏‏‏‏‎‎‎‎‎‏‎‎‎‎EEE, MMM d‎‏‎‎‏‎"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‎‏‏‎‏‎‎‏‏‏‏‎‏‏‎‏‎‎‎‎‏‎‎‏‎‏‎‏‎‏‎‏‏‎‎‎‎‏‎‏‎‎‏‏‏‏‎‏‎‎‏‎‎‏‎h:mm‎‏‎‎‏‎"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎‏‎‏‏‎‏‎‎‎‏‏‎‏‎‏‏‎‏‏‎‏‎‎‏‎‏‎‎‏‎‏‎‏‎‎‏‏‏‎‎‏‏‎‏‏‎‏‎kk:mm‎‏‎‎‏‎"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-en-rXC/tiles_states_strings.xml b/packages/SystemUI/res/values-en-rXC/tiles_states_strings.xml
index 99ef50c..3a8e34c 100644
--- a/packages/SystemUI/res/values-en-rXC/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-en-rXC/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‎‎‎‎‎‏‏‏‎‎‎‎‎‎‏‏‎‎‏‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‏‎‏‎‏‎‏‎‎‏‏‎‎‏‏‏‎‏‎‎‏‎‎Off‎‏‎‎‏‎"</item>
     <item msgid="460891964396502657">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‏‎‏‎‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‏‎‏‏‏‎‎‏‏‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‎On‎‏‎‎‏‎"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎‏‎‏‎‏‎‏‏‎‏‎‏‏‏‎‎‏‏‎‏‏‏‏‏‎‎‏‎‏‎‏‎‏‏‎‎‏‎Unavailable‎‏‎‎‏‎"</item>
+    <item msgid="8014986104355098744">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‏‎‏‏‏‏‎‎‏‏‎‏‏‎‎‏‎‏‏‎‎‎‏‏‎‏‏‏‎‎‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‏‏‎‎‎‎Off‎‏‎‎‏‎"</item>
+    <item msgid="5966994759929723339">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‏‏‏‏‎‎‎‎‎‏‏‎‎‎‎‏‏‏‏‎‏‎‏‎‎‎‏‎‎‎‏‏‏‎‏‎‎‏‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎On‎‏‎‎‏‎"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index e0fa6fd..35f92f9 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Dispositivo bloqueado"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Escaneando rostro"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Enviar"</string>
-    <string name="phone_label" msgid="5715229948920451352">"abrir teléfono"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"abrir el asistente de voz"</string>
-    <string name="camera_label" msgid="8253821920931143699">"abrir cámara"</string>
     <string name="cancel" msgid="1089011503403416730">"Cancelar"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Confirmar"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Volver a intentarlo"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Sensores desactivados sí"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Eliminar todas las notificaciones"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"<xliff:g id="NUMBER">%s</xliff:g> más"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> notificaciones más en el grupo.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> notificación más en el grupo.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{# notificación más en el grupo.}other{# notificaciones más en el grupo.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"La pantalla está bloqueada en modo horizontal."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"La pantalla está bloqueada en modo vertical."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Caja para postres"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Giro automático"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Girar la pantalla automáticamente"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Ubicación"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Protector de pantalla"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Acceso a la cámara"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Acceso al mic."</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Disponible"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Hotspot"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Activando…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Ahorro de datos act."</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d dispositivos</item>
-      <item quantity="one">%d dispositivo</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# dispositivo}other{# dispositivos}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Linterna"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Cámara en uso"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Datos móviles"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Presiona otra vez"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Desliza el dedo hacia arriba para abrir"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Presiona el ícono de desbloquear para abrir"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Desbloqueo con rostro. Desliza hacia arriba para abrir."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Desbloqueo con rostro. Presiona el ícono para abrir."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Desbloqueo con rostro. Presiona para abrir."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Rostro reconocido. Presiona para abrir."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"¿Quieres retomar la sesión?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Volver a empezar"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Sí, continuar"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Modo de Invitado"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Estás en el modo de invitado"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Si agregas un usuario nuevo, se desactivará el modo de invitado y se borrarán todas las apps y los datos de la sesión de invitado actual."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Alcanzaste el límite de usuarios"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">Puedes agregar hasta <xliff:g id="COUNT">%d</xliff:g> usuarios.</item>
-      <item quantity="one">Solo se puede crear un usuario.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Solo se puede crear un usuario.}other{Puedes agregar hasta # usuarios.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"¿Confirmas que quieres quitar el usuario?"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Recuérdame"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Deshacer"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Posponer <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d horas</item>
-      <item quantity="one">%d hora</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d minutos</item>
-      <item quantity="one">%d minuto</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# hora}=2{# horas}other{# horas}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minuto}other{# minutos}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Ahorro de batería"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Botón <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Inicio"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Alertas"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Batería"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Capturas de pantalla"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Mensajes generales"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Apps instantáneas"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Configuración"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Almacenamiento"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Sugerencias"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Apps instantáneas"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"activar o desactivar"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Controles de dispositivos"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Elige la app para agregar los controles"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other">Se agregaron <xliff:g id="NUMBER_1">%s</xliff:g> controles.</item>
-      <item quantity="one">Se agregó <xliff:g id="NUMBER_0">%s</xliff:g> control.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{Se agregó # control.}other{Se agregaron # controles.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Quitados"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Está en favoritos"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Está en favoritos en la posición <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"Se seleccionaron <xliff:g id="COUNT">%1$d</xliff:g> dispositivos"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(desconectado)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"No se pudo conectar. Presiona para volver a intentarlo."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Vincular dispositivo nuevo"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Conectar un dispositivo"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Para transmitir esta sesión, abre la app"</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"App desconocida"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Detener transmisión"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Agregar tarjeta"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"No agregar tarjeta"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Seleccionar usuario"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> apps están activas</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> app está activa</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# app está activa}other{# apps están activas}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nueva información"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Apps activas"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Estas apps están activas y en ejecución, incluso mientras no las usas. Esto mejora su funcionalidad, pero también afecta la duración de batería."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"La red Wi-Fi no está disponible"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Modo prioridad"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Se estableció la alarma"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"La cámara está desactivada"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"El micrófono está desactivado"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"La cámara y el micrófono están apagados"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notificación}other{# notificaciones}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Transmitiendo"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"¿Quieres dejar de transmitir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Si transmites <xliff:g id="SWITCHAPP">%1$s</xliff:g> o cambias la salida, tu transmisión actual se detendrá"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Transmitir <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Cambia la salida"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Desconocido"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, d de MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-es-rUS/tiles_states_strings.xml b/packages/SystemUI/res/values-es-rUS/tiles_states_strings.xml
index abcec7f..44e9cf2 100644
--- a/packages/SystemUI/res/values-es-rUS/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Desactivado"</item>
     <item msgid="460891964396502657">"Sí"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"No disponible"</item>
+    <item msgid="8014986104355098744">"No"</item>
+    <item msgid="5966994759929723339">"Sí"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 7576da3..b32859a 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Dispositivo bloqueado"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Escaneando cara"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Enviar"</string>
-    <string name="phone_label" msgid="5715229948920451352">"abrir teléfono"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"abrir el asistente de voz"</string>
-    <string name="camera_label" msgid="8253821920931143699">"abrir cámara"</string>
     <string name="cancel" msgid="1089011503403416730">"Cancelar"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Confirmar"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Reintentar"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Sensores desactivados"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Borrar todas las notificaciones"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"<xliff:g id="NUMBER">%s</xliff:g> más"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> notificaciones más dentro.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> notificación más dentro.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{# notificación más en el grupo.}other{# notificaciones más en el grupo.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"La pantalla está bloqueada en modo horizontal."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"La pantalla está bloqueada en modo vertical."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Caja para postres"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Giro automático"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Girar pantalla automáticamente"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Ubicación"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Salvapantallas"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Acceso a cámara"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Acceso al micro"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Disponible"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Compartir Internet"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Activando…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Ahorro de datos activado"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d dispositivos</item>
-      <item quantity="one">%d dispositivo</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# dispositivo}other{# dispositivos}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Linterna"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Cámara en uso"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Datos móviles"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Toca de nuevo"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Desliza el dedo hacia arriba para abrir"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Pulsa el icono desbloquear para abrir"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Desbloqueado con la cara. Desliza hacia arriba para abrir."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Desbloqueado con la cara. Toca el icono de desbloquear para abrir."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Desbloqueado con la cara. Pulsa para abrir."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Cara reconocida. Pulsa para abrir."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"¿Quieres continuar con tu sesión?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Volver a empezar"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Sí, continuar"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Modo Invitado"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Estás en modo Invitado"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Si añades un nuevo usuario, saldrás del modo Invitado y se eliminarán todas las aplicaciones y datos de la sesión de invitado actual."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Has alcanzado el límite de usuarios"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">Puedes añadir hasta <xliff:g id="COUNT">%d</xliff:g> usuarios.</item>
-      <item quantity="one">Solo se puede crear un usuario.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Solo se puede crear un usuario.}other{Puedes añadir # usuarios como máximo.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"¿Quitar usuario?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Se eliminarán todas las aplicaciones y datos de este usuario."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Quitar"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Recordar"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Deshacer"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Volverá a mostrarse en <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d horas</item>
-      <item quantity="one">%d hora</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d minutos</item>
-      <item quantity="one">%d minuto</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# hora}=2{# horas}other{# horas}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minuto}other{# minutos}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Ahorro de batería"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Botón <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Inicio"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Alertas"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Batería"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Capturas de pantalla"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Mensajes generales"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Aplicaciones Instantáneas"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Configuración"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Almacenamiento"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Sugerencias"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Aplicaciones Instantáneas"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"activar/desactivar"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Control de dispositivos"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Elige una aplicación para añadir controles"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other">Se han añadido <xliff:g id="NUMBER_1">%s</xliff:g> controles.</item>
-      <item quantity="one">Se ha añadido <xliff:g id="NUMBER_0">%s</xliff:g> control.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# control añadido.}other{# controles añadidos.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Quitado"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Añadido a favoritos"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Añadido a favoritos (posición <xliff:g id="NUMBER">%d</xliff:g>)"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> dispositivos seleccionados"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(desconectado)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"No se puede cambiar. Toca para volver a intentarlo."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Emparejar nuevo dispositivo"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Conectar un dispositivo"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Para enviar esta sesión, abre la aplicación."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Aplicación desconocida"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Dejar de enviar contenido"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Añadir recuadro"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"No añadir recuadro"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Selecciona un usuario"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aplicaciones activas</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aplicación activa</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# aplicación activa}other{# aplicaciones activas}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Información nueva"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aplicaciones activas"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Estas aplicaciones están activas y en funcionamiento, incluso aunque no las estés usando. Esto mejora su funcionalidad, pero también puede afectar a la duración de la batería."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi no disponible"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Modo prioritario"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarma añadida"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"La cámara está desactivada"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"El micrófono está desactivado"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"La cámara y el micrófono están desactivados"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notificación}other{# notificaciones}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Emitiendo"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"¿Dejar de emitir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Si emites <xliff:g id="SWITCHAPP">%1$s</xliff:g> o cambias la salida, tu emisión actual se detendrá"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Emitir <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Cambiar salida"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Desconocido"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, d MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-es/tiles_states_strings.xml b/packages/SystemUI/res/values-es/tiles_states_strings.xml
index 7d8be48..8d5c3c6 100644
--- a/packages/SystemUI/res/values-es/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-es/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Desactivado"</item>
     <item msgid="460891964396502657">"Activado"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"No disponible"</item>
+    <item msgid="8014986104355098744">"Desactivado"</item>
+    <item msgid="5966994759929723339">"Activado"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml
index efad53fd..e2cc7e3 100644
--- a/packages/SystemUI/res/values-et/strings.xml
+++ b/packages/SystemUI/res/values-et/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Seade on lukustatud"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Näo skannimine"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Saada"</string>
-    <string name="phone_label" msgid="5715229948920451352">"ava telefon"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"ava häälabi"</string>
-    <string name="camera_label" msgid="8253821920931143699">"ava kaamera"</string>
     <string name="cancel" msgid="1089011503403416730">"Tühista"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Kinnita"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Proovi uuesti"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Valik Andurid on väljas on aktiivne"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Kustuta kõik teatised."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">Sees on veel <xliff:g id="NUMBER_1">%s</xliff:g> märguannet.</item>
-      <item quantity="one">Sees on veel <xliff:g id="NUMBER_0">%s</xliff:g> märguanne.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Sees on veel # märguanne.}other{Sees on veel # märguannet.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Ekraan on lukustatud horisontaalsuunas."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Ekraan on lukustatud vertikaalsuunas."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Maiustusekorv"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Autom. pööramine"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Kuva automaatne pööramine"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Asukoht"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Ekraanisäästja"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Juurdepääs kaamerale"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Juurdepääs mikrofonile"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Saadaval"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Kuumkoht"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Sisselülitamine …"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Andmem. säästja sees"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d seadet</item>
-      <item quantity="one">%d seade</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# seade}other{# seadet}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Taskulamp"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Kasutusel olev kaamera"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Mobiilne andmeside"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Puudutage uuesti"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Pühkige avamiseks üles"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Avamiseks vajutage avamise ikooni"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Avati näoga. Pühkige avamiseks üles."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Avati näoga. Avamiseks vajutage avamise ikooni."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Avati näoga. Avamiseks vajutage."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Nägu tuvastati. Avamiseks vajutage."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Kas soovite seansiga jätkata?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Alusta uuesti"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Jah, jätka"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Külalisrežiim"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Olete külalisrežiimis"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Uue kasutaja lisamisel suletakse külalisrežiim ning praeguse külastajaseansi rakendused ja andmed kustutatakse."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Kasutajate limiit on täis"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">Võite lisada kuni <xliff:g id="COUNT">%d</xliff:g> kasutajat.</item>
-      <item quantity="one">Luua saab ainult ühe kasutaja.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Luua saab ainult ühe kasutaja.}other{Saate lisada kuni # kasutajat}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Kas eemaldada kasutaja?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Kasutaja kõik rakendused ja andmed kustutatakse."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Eemalda"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Tuleta mulle meelde"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Võta tagasi"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Edasi lükatud <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d tundi</item>
-      <item quantity="one">%d tund</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d minutit</item>
-      <item quantity="one">%d minut</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# tund}=2{# tundi}other{# tundi}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minut}other{# minutit}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Akusäästja"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Nupp <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Avakuva"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Hoiatused"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Aku"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Ekraanipildid"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Üldised sõnumid"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Installimata avatavad rakendused"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Seadistamine"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Salvestusruum"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Vihjed"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Installimata avatavad rakendused"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"lülita"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Seadmete juhikud"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Valige juhtelementide lisamiseks rakendus"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other">Lisati <xliff:g id="NUMBER_1">%s</xliff:g> juhtnuppu.</item>
-      <item quantity="one">Lisati <xliff:g id="NUMBER_0">%s</xliff:g> juhtnupp.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{Lisati # juhtnupp.}other{Lisati # juhtnuppu.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Eemaldatud"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Lisatud lemmikuks"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Lisatud lemmikuks, positsioon <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> seadet on valitud"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(ühendus on katkestatud)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Ei saa lülitada. Puudutage uuesti proovimiseks."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Uue seadme sidumine"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Seadme ühendamine"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Selle seansi ülekandmiseks avage rakendus."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Tundmatu rakendus"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Lõpeta ülekanne"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Lisa paan"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Ära lisa paani"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Kasutaja valimine"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> rakendust on aktiivsed</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> rakendus on aktiivne</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# rakendus on aktiivne}other{# rakendust on aktiivsed}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Uus teave"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktiivsed rakendused"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Need rakendused on aktiivsed ja neid käitatakse isegi siis, kui te neid ei kasuta. Tänu sellele toimivad need paremini, kuid see võib mõjutada aku tööiga."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"WiFi pole saadaval"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Režiim Prioriteetne"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarm on määratud"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Kaamera on välja lülitatud"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mikrofon on välja lülitatud"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Kaamera ja mikrofon on välja lülitatud"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# märguanne}other{# märguannet}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Edastamine"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Kas peatada rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> ülekandmine?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Kui kannate rakendust <xliff:g id="SWITCHAPP">%1$s</xliff:g> üle või muudate väljundit, peatatakse teie praegune ülekanne"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Rakenduse <xliff:g id="SWITCHAPP">%1$s</xliff:g> ülekandmine"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Väljundi muutmine"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Tundmatu"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, d. MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-et/tiles_states_strings.xml b/packages/SystemUI/res/values-et/tiles_states_strings.xml
index 29895d1..07eddef 100644
--- a/packages/SystemUI/res/values-et/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-et/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Väljas"</item>
     <item msgid="460891964396502657">"Sees"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Pole saadaval"</item>
+    <item msgid="8014986104355098744">"Väljas"</item>
+    <item msgid="5966994759929723339">"Sees"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml
index 5647b6d..46751b3 100644
--- a/packages/SystemUI/res/values-eu/strings.xml
+++ b/packages/SystemUI/res/values-eu/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Gailua blokeatuta dago"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Aurpegia eskaneatzen"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Bidali"</string>
-    <string name="phone_label" msgid="5715229948920451352">"ireki telefonoan"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"ireki ahots-laguntza"</string>
-    <string name="camera_label" msgid="8253821920931143699">"ireki kamera"</string>
     <string name="cancel" msgid="1089011503403416730">"Utzi"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Berretsi"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Saiatu berriro"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Aktibo dago sentsore guztiak desaktibatzen dituen aukera"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Garbitu jakinarazpen guztiak."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">Beste <xliff:g id="NUMBER_1">%s</xliff:g> jakinarazpen daude barnean.</item>
-      <item quantity="one">Beste <xliff:g id="NUMBER_0">%s</xliff:g> jakinarazpen daude barnean.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Beste # jakinarazpen dago barnean.}other{Beste # jakinarazpen daude barnean.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Pantaila horizontalki blokeatuta dago."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Pantaila bertikalki blokeatuta dago."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Postreen kutxa"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Biratze automatikoa"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Biratu pantaila automatikoki"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Kokapena"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Pantaila-babeslea"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Kamera"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Mikrofonoa"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Baimenduta"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Wifi-gunea"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Aktibatzen…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Datu-aurrezlea aktibatuta"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d gailu</item>
-      <item quantity="one">%d gailu</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# gailu}other{# gailu}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Linterna"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Kamera abian da"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Datu-konexioa"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Sakatu berriro"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Pasatu hatza gora irekitzeko"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Irekitzeko, sakatu desblokeatzeko ikonoa"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Aurpegiaren bidez desblokeatu da. Irekitzeko, pasatu hatza gora."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Aurpegiaren bidez desblokeatu da. Irekitzeko, sakatu desblokeatzeko ikonoa."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Aurpegiaren bidez desblokeatu da. Sakatu irekitzeko."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Ezagutu da aurpegia. Sakatu irekitzeko."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Saioarekin jarraitu nahi duzu?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Hasi berriro"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Bai, jarraitu"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Gonbidatu modua"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Gonbidatu moduan zaude"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Beste erabiltzaile bat gehituz gero, gonbidatu modua itxiko da eta oraingo gonbidatuentzako saioko aplikazio eta datu guztiak ezabatuko dira."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Erabiltzaile-mugara iritsi zara"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">Gehienez, <xliff:g id="COUNT">%d</xliff:g> erabiltzaile gehi ditzakezu.</item>
-      <item quantity="one">Erabiltzaile bakarra sor daiteke.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Erabiltzaile bakarra sor daiteke.}other{# erabiltzaile gehi ditzakezu gehienez.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Erabiltzailea kendu nahi duzu?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Erabiltzailearen aplikazio eta datu guztiak ezabatuko dira."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Kendu"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Gogorarazi"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Desegin"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g>z atzeratu da"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d ordu</item>
-      <item quantity="one">%d ordu</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d minutu</item>
-      <item quantity="one">%d minutu</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# ordu}=2{# ordu}other{# ordu}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minutu}other{# minutu}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Bateria-aurrezlea"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"<xliff:g id="NAME">%1$s</xliff:g> botoia"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Hasiera"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Alertak"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Bateria"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Pantaila-argazkiak"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Mezu orokorrak"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Zuzeneko aplikazioak"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Konfigurazioa"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Memoria"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Aholkuak"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Zuzeneko aplikazioak"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"aldatu"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Gailuak kontrolatzeko widgetak"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Aukeratu aplikazio bat kontrolatzeko aukerak gehitzeko"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> kontrol-aukera gehitu dira.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> kontrol-aukera gehitu da.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{Kontrolatzeko # aukera gehitu da.}other{Kontrolatzeko # aukera gehitu dira.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Kenduta"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Gogokoetan dago"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"<xliff:g id="NUMBER">%d</xliff:g>. gogokoa da"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> gailu hautatu dira"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(deskonektatuta)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Ezin da aldatu. Berriro saiatzeko, sakatu hau."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Parekatu beste gailu batekin"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Konektatu gailu bat"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Saioa ireki nahi baduzu, ireki aplikazioa."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Aplikazio ezezaguna"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Gelditu igorpena"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Gehitu lauza"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Ez gehitu lauza"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Hautatu erabiltzaile bat"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aplikazio aktibo daude</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aplikazio aktibo dago</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wifi-konexioa ez dago erabilgarri"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Lehentasun modua"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarma ezarrita dago"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Kamera desaktibatuta dago"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mikrofonoa desaktibatuta dago"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Kamera eta mikrofonoa desaktibatuta daude"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# jakinarazpen}other{# jakinarazpen}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Igortzen"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioaren audioa igortzeari utzi nahi diozu?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> aplikazioaren audioa igortzen baduzu, edo audio-irteera aldatzen baduzu, une hartako igorpena eten egingo da"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Igorri <xliff:g id="SWITCHAPP">%1$s</xliff:g> aplikazioaren audioa"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Aldatu audio-irteera"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Ezezaguna"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-eu/tiles_states_strings.xml b/packages/SystemUI/res/values-eu/tiles_states_strings.xml
index baddea1..3bf49c8 100644
--- a/packages/SystemUI/res/values-eu/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-eu/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Desaktibatuta"</item>
     <item msgid="460891964396502657">"Aktibatuta"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Ez dago erabilgarri"</item>
+    <item msgid="8014986104355098744">"Desaktibatuta"</item>
+    <item msgid="5966994759929723339">"Aktibatuta"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index c8cf969..e2cbb45 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"دستگاه قفل است"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"درحال اسکن کردن چهره"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"ارسال"</string>
-    <string name="phone_label" msgid="5715229948920451352">"باز کردن تلفن"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"«دستیار صوتی» را باز کنید"</string>
-    <string name="camera_label" msgid="8253821920931143699">"باز کردن دوربین"</string>
     <string name="cancel" msgid="1089011503403416730">"لغو"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"تأیید"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"امتحان مجدد"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"«حسگرها خاموش» فعال است"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"پاک کردن تمام اعلان‌ها"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> اعلان دیگر در گروه.</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> اعلان دیگر در گروه.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{# اعلان دیگر در گروه وجود دارد.}one{# اعلان دیگر در گروه وجود دارد.}other{# اعلان دیگر در گروه وجود دارد.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"صفحه اکنون در حالت افقی قفل است."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"صفحه اکنون در جهت عمودی قفل است."</string>
     <string name="dessert_case" msgid="9104973640704357717">"ویترین دسر"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"دسترسی به دوربین"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"دسترسی به میکروفون"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"دردسترس"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"نقطه اتصال"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"روشن کردن…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"صرفه‌جویی داده روشن است"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">‏%d دستگاه</item>
-      <item quantity="other">‏%d دستگاه</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# دستگاه}one{# دستگاه}other{# دستگاه}}"</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>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"دوباره ضربه بزنید"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"برای باز کردن، انگشتتان را تند به‌بالا بکشید"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"برای باز کردن، نماد قفل‌گشایی را فشار دهید"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"قفلْ با چهره باز شد. برای باز کردن، تند به‌بالا بکشید."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"قفلْ با چهره باز شد. برای باز کردن، نماد قفل‌گشایی را فشار دهید."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"قفلْ با چهره باز شد. برای باز کردن، فشار دهید."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"چهره شناسایی شد. برای باز کردن، فشار دهید."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"آیا می‌خواهید جلسه‌تان را ادامه دهید؟"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"شروع مجدد"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"بله، ادامه داده شود"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"حالت مهمان"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"در حالت مهمان هستید"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"با افزودن کاربر جدید، از حالت مهمان خارج خواهید شد و همه برنامه‌ها و داده‌ها از جلسه مهمان کنونی حذف خواهند شد."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"به تعداد مجاز تعداد کاربر رسیده‌اید"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">می‌توانید حداکثر <xliff:g id="COUNT">%d</xliff:g> کاربر اضافه کنید.</item>
-      <item quantity="other">می‌توانید حداکثر <xliff:g id="COUNT">%d</xliff:g> کاربر اضافه کنید.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{فقط یک کاربر می‌توان ایجاد کرد.}one{حداکثر # کاربر می‌توانید اضافه کنید.}other{حداکثر # کاربر می‌توانید اضافه کنید.}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"به من یادآوری شود"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"واگرد"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> به تعویق افتاد"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one">‏%d ساعت</item>
-      <item quantity="other">‏%d ساعت</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one">‏%d دقیقه</item>
-      <item quantity="other">‏%d دقیقه</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# ساعت}=2{# ساعت}one{# ساعت}other{# ساعت}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# دقیقه}one{# دقیقه}other{# دقیقه}}"</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">"ابتدا"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"هشدارها"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"باتری"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"نماگرفت‌ها"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"پیام‌های عمومی"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"برنامه‌های فوری"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"راه‌اندازی"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"فضای ذخیره‌سازی"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"نکات"</string>
     <string name="instant_apps" msgid="8337185853050247304">"برنامه‌های فوری"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"روشن/ خاموش کردن"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"کنترل‌های دستگاه"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"انتخاب برنامه برای افزودن کنترل‌ها"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> کنترل اضافه شده است.</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> کنترل اضافه شده است.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# کنترل اضافه شد.}one{# کنترل اضافه شد.}other{# کنترل اضافه شد.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"حذف شد"</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>
@@ -846,7 +831,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="9099497976087485862">"مرتبط کردن دستگاه جدید"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"کاشی اضافه شود"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"کاشی اضافه نشود"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"انتخاب کاربر"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> برنامه فعال است</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> برنامه فعال است</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"‏Wi‑Fi دردسترس نیست"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"حالت اولویت"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"زنگ ساعت تنظیم شد"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"دوربین خاموش است"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"میکروفون خاموش است"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"دوربین و میکروفون خاموش هستند"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# اعلان}one{# اعلان}other{# اعلان}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>، <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"همه‌فرستی"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"همه‌فرستی <xliff:g id="APP_NAME">%1$s</xliff:g> متوقف شود؟"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"اگر <xliff:g id="SWITCHAPP">%1$s</xliff:g> را همه‌فرستی کنید یا خروجی را تغییر دهید، همه‌فرستی کنونی متوقف خواهد شد"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"همه‌فرستی <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"تغییر خروجی"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"نامشخص"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE d MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-fa/tiles_states_strings.xml b/packages/SystemUI/res/values-fa/tiles_states_strings.xml
index ecc8d1cc..85f0bfd 100644
--- a/packages/SystemUI/res/values-fa/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-fa/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"خاموش"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index b395aac..de8a1eb 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Laite lukittu"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Kasvojen skannaus"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Lähetä"</string>
-    <string name="phone_label" msgid="5715229948920451352">"avaa puhelin"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"Avaa ääniapuri"</string>
-    <string name="camera_label" msgid="8253821920931143699">"avaa kamera"</string>
     <string name="cancel" msgid="1089011503403416730">"Peru"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Vahvista"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Yritä uudelleen"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Anturit pois päältä aktiivinen"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Tyhjennä kaikki ilmoitukset."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">+<xliff:g id="NUMBER_1">%s</xliff:g> ilmoitusta ryhmässä</item>
-      <item quantity="one">+<xliff:g id="NUMBER_0">%s</xliff:g> ilmoitus ryhmässä</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{+# ilmoitus ryhmässä.}other{+# ilmoitusta ryhmässä.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Ruutu on lukittu vaakasuuntaan."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Ruutu on lukittu pystysuuntaan."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Jälkiruokavitriini"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automaattinen kääntö"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Käännä näyttöä automaattisesti."</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Sijainti"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Näytönsäästäjä"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Pääsy kameraan"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Pääsy mikrofoniin"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Käytettävissä"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Hotspot"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Otetaan käyttöön…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Data Saver on käytössä"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d laitetta</item>
-      <item quantity="one">%d laite</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# laite}other{# laitetta}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Taskulamppu"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Kamera käytössä"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Mobiilidata"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Napauta uudelleen"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Avaa pyyhkäisemällä ylös"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Jatka painamalla lukituksen avauskuvaketta."</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Avattu kasvojen avulla. Avaa pyyhkäisemällä ylös."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Avattu kasvojen avulla. Jatka lukituksen avauskuvakkeella."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Avattu kasvojen avulla. Avaa painamalla."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Kasvot tunnistettu. Avaa painamalla."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Haluatko jatkaa istuntoa?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Aloita alusta"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Kyllä, haluan jatkaa"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Vierastila"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Olet vierastilassa"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Uuden käyttäjän lisääminen poistaa sinut vierastilasta. Kaikki sovellukset ja data poistetaan myös samalla nykyisestä vierailija-käyttökerrasta."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Käyttäjäraja saavutettu"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">Voit lisätä korkeintaan <xliff:g id="COUNT">%d</xliff:g> käyttäjää.</item>
-      <item quantity="one">Käyttäjiä voi olla vain yksi.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Voit luoda vain yhden käyttäjän.}other{Voit lisätä korkeintaan # käyttäjää.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Poistetaanko käyttäjä?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Kaikki käyttäjän tiedot ja sovellukset poistetaan."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Poista"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Muistuta minua"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Kumoa"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Torkku: <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d tuntia</item>
-      <item quantity="one">%d tunti</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d minuuttia</item>
-      <item quantity="one">%d minuutti</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# tunti}=2{# tuntia}other{# tuntia}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minuutti}other{# minuuttia}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Virransäästö"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Painike <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Ilmoitukset"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Akku"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Kuvakaappaukset"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Yleiset viestit"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant Apps"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Määritys"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Tallennustila"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Vihjeet"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant Apps"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"vaihda"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Laitehallinta"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Valitse sovellus lisätäksesi säätimiä"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> säädintä lisätty</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> säädin lisätty</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# säädin lisätty.}other{# säädintä lisätty.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Poistettu"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Lisätty suosikkeihin"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Lisätty suosikkeihin sijalle <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> laitetta valittu"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(yhteys katkaistu)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Vaihtaminen ei onnistunut. Yritä uudelleen."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Muodosta uusi laitepari"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Yhdistä laite"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Jos haluat striimata tämän käyttökerran, avaa sovellus."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Tuntematon sovellus"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Lopeta striimaus"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Lisää laatta"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Älä lisää laattaa"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Valitse käyttäjä"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> sovellusta on aktiivisia</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> sovellus on aktiivinen</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# sovellus on aktiivinen}other{# sovellusta aktiivisena}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Uutta tietoa"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktiiviset sovellukset"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Nämä sovellukset ovat aktiivisia ja ne ovat käynnissä, vaikka et käyttäisi niitä. Näin sovellusten toimivuus paranee, mutta se voi vaikutta akunkestoon."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi ei ole saatavilla"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Tärkeät-tila"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Hälytys asetettu"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Kamera on poissa päältä"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mikrofoni on poissa päältä"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Kamera ja mikrofoni ovat pois päältä"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# ilmoitus}other{# ilmoitusta}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Lähettää"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Lopetetaanko <xliff:g id="APP_NAME">%1$s</xliff:g>-sovelluksen lähettäminen?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Jos lähetät <xliff:g id="SWITCHAPP">%1$s</xliff:g>-sovellusta tai muutat ulostuloa, nykyinen lähetyksesi loppuu"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Lähetä <xliff:g id="SWITCHAPP">%1$s</xliff:g>-sovellusta"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Muuta ulostuloa"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Tuntematon"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"VKP, KKK p"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-fi/tiles_states_strings.xml b/packages/SystemUI/res/values-fi/tiles_states_strings.xml
index 5844fb9..1505dc5 100644
--- a/packages/SystemUI/res/values-fi/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-fi/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Poissa päältä"</item>
     <item msgid="460891964396502657">"Päällä"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Ei saatavilla"</item>
+    <item msgid="8014986104355098744">"Poissa päältä"</item>
+    <item msgid="5966994759929723339">"Päällä"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index 4e00125..9e11b10 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Appareil verrouillé"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Numérisation du visage"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Envoyer"</string>
-    <string name="phone_label" msgid="5715229948920451352">"Ouvrir le téléphone"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"ouvrir l\'assistance vocale"</string>
-    <string name="camera_label" msgid="8253821920931143699">"Ouvrir l\'appareil photo"</string>
     <string name="cancel" msgid="1089011503403416730">"Annuler"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Confirmer"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Réessayer"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Option « Capteurs désactivés » active"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Supprimer toutes les notifications"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> autre notification à l\'intérieur.</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> autres notifications à l\'intérieur.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{# autre notification à l\'intérieur.}one{# autre notification à l\'intérieur.}other{# autres notifications à l\'intérieur.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"L\'écran est verrouillé en mode paysage."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"L\'écran est verrouillé en mode portrait."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Vitrine des desserts"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Rotation automatique"</string>
     <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">"Écran de veille"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Accès à l\'appareil photo"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Accès au micro"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Accessible"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Point d\'accès sans fil"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Activation en cours…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Écon. données activé"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">%d appareil</item>
-      <item quantity="other">%d appareils</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# appareil}one{# appareil}other{# appareils}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Lampe de poche"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"L\'appareil photo est en cours d\'utilisation"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Données cellulaires"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Toucher de nouveau"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Balayez l\'écran vers le haut pour ouvrir"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Appuyez sur l\'icône Déverrouiller pour ouvrir"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Déverrouillé par le visage. Balayez vers le haut pour ouvrir."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Déverr. par reconn. faciale. App. sur l\'icône pour ouvrir."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Déverr. par reconnaissance faciale. Appuyez pour ouvrir."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Visage reconnu. Appuyez pour ouvrir."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Voulez-vous poursuivre la session?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Recommencer"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Oui, continuer"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Mode Invité"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Vous êtes en mode Invité"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Si vous ajoutez un nouvel utilisateur, vous quitterez le mode Invité, et toutes les applications et données de la session d\'invité en cours seront supprimées."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Limite d\'utilisateurs atteinte"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">Vous pouvez ajouter jusqu\'à <xliff:g id="COUNT">%d</xliff:g> utilisateur.</item>
-      <item quantity="other">Vous pouvez ajouter jusqu\'à <xliff:g id="COUNT">%d</xliff:g> utilisateurs.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Vous ne pouvez créer qu\'un seul utilisateur.}one{Vous pouvez ajouter jusqu\'à # utilisateur.}other{Vous pouvez ajouter jusqu\'à # utilisateurs.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Supprimer l\'utilisateur?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Toutes les applications et les données de cet utilisateur seront supprimées."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Supprimer"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Me rappeler"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Annuler"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Reporté pour <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one">%d heure</item>
-      <item quantity="other">%d heures</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one">%d minute</item>
-      <item quantity="other">%d minutes</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# heure}=2{# heures}one{# heure}other{# heures}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minute}one{# minute}other{# minutes}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Économiseur de pile"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Bouton <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Accueil"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Alertes"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Pile"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Saisies d\'écran"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Messages généraux"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Applications instantanées"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Configuration"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Stockage"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Conseils"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Applications instantanées"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"basculer"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Commandes des appareils"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Sélectionnez l\'application pour laquelle ajouter des commandes"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> commande ajoutée.</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> commandes ajoutées.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# commande ajoutée.}one{# commande ajoutée.}other{# commandes ajoutées.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Supprimé"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Ajouté aux favoris"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Ajouté aux favoris, en position <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> appareil sélectionné"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(déconnecté)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Changement impossible. Touchez pour réessayer."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Associer un autre appareil"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Connecter un appareil"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Pour diffuser cette session, veuillez ouvrir l\'application."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Application inconnue"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Arrêter la diffusion"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Ajouter la tuile"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Ne pas ajouter de tuile"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Choisir l\'utilisateur"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> application est active</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> applications sont actives</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# application est active}one{# application est active}other{# applications sont actives}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nouvelle information"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Applications actives"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Ces applications sont actives et s\'exécutent même lorsque vous ne les utilisez pas. Cela améliore leur fonctionnalité, mais peut également affecter l\'autonomie de la pile."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi-Fi non disponible"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Mode priorité"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"L\'alarme a été réglée"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"L\'appareil photo est désactivé"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Le micro est désactivé"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"L\'appareil photo et le micro sont désactivés"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notification}one{# notification}other{# notifications}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Diffusion en cours…"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Arrêter la diffusion de <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Si vous diffusez <xliff:g id="SWITCHAPP">%1$s</xliff:g> ou changez la sortie, votre diffusion actuelle s\'arrêtera"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Diffuser <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Changer la sortie"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Inconnue"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, d MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-fr-rCA/tiles_states_strings.xml b/packages/SystemUI/res/values-fr-rCA/tiles_states_strings.xml
index 9d78e91..4ec0084 100644
--- a/packages/SystemUI/res/values-fr-rCA/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Désactivé"</item>
     <item msgid="460891964396502657">"Activé"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Non accessible"</item>
+    <item msgid="8014986104355098744">"Désactivé"</item>
+    <item msgid="5966994759929723339">"Activé"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index 14f7d06..f6bf4c0 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Appareil verrouillé"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Analyse du visage en cours"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Envoyer"</string>
-    <string name="phone_label" msgid="5715229948920451352">"ouvrir le téléphone"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"ouvrir l\'assistance vocale"</string>
-    <string name="camera_label" msgid="8253821920931143699">"ouvrir l\'appareil photo"</string>
     <string name="cancel" msgid="1089011503403416730">"Annuler"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Confirmer"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Réessayer"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Option \"Capteurs désactivés\" active"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Supprimer toutes les notifications"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"<xliff:g id="NUMBER">%s</xliff:g> autres"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> autre notification à l\'intérieur.</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> autres notifications à l\'intérieur.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{# autre notification dans le groupe.}one{# autre notification dans le groupe.}other{# autres notifications dans le groupe.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"L\'écran est verrouillé en mode paysage."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"L\'écran est verrouillé en mode portrait."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Vitrine des desserts"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Rotation automatique"</string>
     <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_mic_label" msgid="8392773746295266375">"Accès au micro"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Disponible"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Point d\'accès"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Activation…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Écon. données activé"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">%d appareil</item>
-      <item quantity="other">%d appareils</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# appareil}one{# appareil}other{# appareils}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Lampe de poche"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Caméra en cours d\'utilisation"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Données mobiles"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Appuyer à nouveau"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Balayer vers le haut pour ouvrir"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Appuyez sur l\'icône de déverrouillage pour ouvrir"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Déverrouillé par visage. Balayez vers le haut pour ouvrir."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Déverrouillé par visage. Appuyez sur icône déverrouillage pour ouvrir."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Déverrouillé par visage. Appuyez pour ouvrir."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Visage reconnu. Appuyez pour ouvrir."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Voulez-vous poursuivre la dernière session ?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Non, nouvelle session"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Oui, continuer"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Mode Invité"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Vous êtes en mode Invité"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Si vous ajoutez un utilisateur, le mode Invité sera désactivé et toutes les applis et les données de la session Invité actuelle seront supprimées."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Limite nombre utilisateurs atteinte"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">Vous pouvez ajouter <xliff:g id="COUNT">%d</xliff:g> profil utilisateur.</item>
-      <item quantity="other">Vous pouvez ajouter jusqu\'à <xliff:g id="COUNT">%d</xliff:g> profils utilisateur.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Vous ne pouvez créer qu\'un seul utilisateur.}one{Vous pouvez ajouter # utilisateur.}other{Vous pouvez ajouter jusqu\'à # utilisateurs.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Supprimer l\'utilisateur ?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Toutes les applications et les données de cet utilisateur seront supprimées."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Supprimer"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"M\'envoyer un rappel"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Annuler"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Répétée après <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one">%d heure</item>
-      <item quantity="other">%d heures</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one">%d minute</item>
-      <item quantity="other">%d minutes</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# heure}=2{# heures}one{# heure}other{# heures}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minute}one{# minute}other{# minutes}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Économiseur de batterie"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Bouton <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Accueil"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Alertes"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Batterie"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Captures d\'écran"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Nouveaux messages"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Applis instantanées"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Configurer"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Espace de stockage"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Astuces"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Applis instantanées"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"activer/désactiver"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Commandes des appareils"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Sélectionnez l\'appli pour laquelle ajouter des commandes"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> commande ajoutée.</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> commandes ajoutées.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# commande ajoutée.}one{# commande ajoutée.}other{# commandes ajoutées.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Supprimé"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Ajouté aux favoris"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Ajouté aux favoris, en position <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> appareils sélectionnés"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(déconnecté)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Impossible de changer. Appuyez pour réessayer."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Associer un nouvel appareil"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Connecter un appareil"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Pour caster cette session, veuillez ouvrir l\'appli."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Appli inconnue"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Arrêter la diffusion"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Ajouter le bloc"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Ne pas ajouter le bloc"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Choisir l\'utilisateur"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> appli est active</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> applis sont actives</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# appli est active}one{# appli est active}other{# applis sont actives}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nouvelles informations"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Applis actives"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Ces applis sont actives et s\'exécutent même lorsque vous ne les utilisez pas. Cela améliore leur fonctionnement, mais peut également affecter l\'autonomie de la batterie."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi non disponible"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Mode Prioritaire"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarme réglée"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Caméra désactivée"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Micro désactivé"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Appareil photo et micro désactivés"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notification}one{# notification}other{# notifications}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Diffusion…"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Arrêter la diffusion de <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Si vous diffusez <xliff:g id="SWITCHAPP">%1$s</xliff:g> ou que vous modifiez le résultat, votre annonce actuelle s\'arrêtera"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Diffuser <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Modifier le résultat"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Inconnue"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM j"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"hh:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-fr/tiles_states_strings.xml b/packages/SystemUI/res/values-fr/tiles_states_strings.xml
index 47fa9c5..8c6c4f5 100644
--- a/packages/SystemUI/res/values-fr/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-fr/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Désactivé"</item>
     <item msgid="460891964396502657">"Activé"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Indisponible"</item>
+    <item msgid="8014986104355098744">"Désactivé"</item>
+    <item msgid="5966994759929723339">"Activé"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml
index 8e03b12..ee94bc8 100644
--- a/packages/SystemUI/res/values-gl/strings.xml
+++ b/packages/SystemUI/res/values-gl/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Dispositivo bloqueado"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Analizando cara"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Enviar"</string>
-    <string name="phone_label" msgid="5715229948920451352">"abrir teléfono"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"abrir asistente de voz"</string>
-    <string name="camera_label" msgid="8253821920931143699">"abrir cámara"</string>
     <string name="cancel" msgid="1089011503403416730">"Cancelar"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Confirmar"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Tentar de novo"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"A opción Desactivar sensores está activada"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Eliminar todas as notificacións."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"<xliff:g id="NUMBER">%s</xliff:g> máis"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> notificacións máis no grupo.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> notificación máis no grupo.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Hai # notificación máis no grupo.}other{Hai # notificacións máis no grupo.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"A pantalla está bloqueada en orientación horizontal."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"A pantalla está bloqueada en orientación vertical."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Caixa de sobremesa"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Xirar automaticamente"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Xirar pantalla automaticamente"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Localización"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Protector de pantalla"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Acceso á cámara"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Acceso ao micrófono"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Dispoñible"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Zona wifi"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Activando…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Aforro datos activo"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d dispositivos</item>
-      <item quantity="one">%d dispositivo</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# dispositivo}other{# dispositivos}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Lanterna"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Cámara en uso"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Datos móbiles"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Toca de novo"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Pasa o dedo cara arriba para abrir"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Preme a icona de desbloquear para abrir a porta"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Desbloqueado coa cara. Pasa o dedo cara arriba para acceder."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Usouse o desbloqueo facial. Preme a icona de desbloquear."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Usouse o desbloqueo facial. Preme para abrir."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Recoñeceuse a cara. Preme para abrir."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Queres continuar coa túa sesión?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Comezar de novo"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Si, continuar"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Modo de convidado"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Estás usando o modo de convidado"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Ao engadir un usuario novo, sairás do modo de convidado e eliminaranse todas as aplicacións e datos da sesión de convidado actual."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Alcanzouse o límite de usuarios"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">Podes engadir ata <xliff:g id="COUNT">%d</xliff:g> usuarios.</item>
-      <item quantity="one">Só se pode crear un usuario.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Só se pode crear 1 usuario.}other{Podes engadir # usuarios como máximo.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Queres quitar o usuario?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Eliminaranse todas as aplicacións e os datos deste usuario."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Quitar"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Lembrarme"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Desfacer"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Adiouse <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d horas</item>
-      <item quantity="one">%d hora</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d minutos</item>
-      <item quantity="one">%d minuto</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# hora}=2{# horas}other{# horas}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minuto}other{# minutos}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Aforro de batería"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Botón <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Inicio"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Alertas"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Batería"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Capturas de pantalla"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Mensaxes xerais"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Aplicacións Instantáneas"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Configurar"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Almacenamento"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Consellos"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Aplicacións Instantáneas"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"activar/desactivar"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Control de dispositivos"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Escolle unha aplicación para engadir controis"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other">Engadíronse <xliff:g id="NUMBER_1">%s</xliff:g> controis.</item>
-      <item quantity="one">Engadiuse <xliff:g id="NUMBER_0">%s</xliff:g> control.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{Engadiuse # control.}other{Engadíronse # controis.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Quitouse"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Está entre os controis favoritos"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Está entre os controis favoritos (posición: <xliff:g id="NUMBER">%d</xliff:g>)"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"Seleccionáronse <xliff:g id="COUNT">%1$d</xliff:g> dispositivos"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(desconectado)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Non se puido realizar o cambio. Toca para tentalo de novo."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Vincular dispositivo novo"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Conectar un dispositivo"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Para emitir esta sesión, abre a aplicación."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Aplicación descoñecida"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Deter emisión"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Engadir atallo"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Non engadir atallo"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Seleccionar usuario"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aplicacións activas</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aplicación activa</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{Hai # aplicación activa}other{Hai # aplicacións activas}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nova información"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aplicacións activas"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Estas aplicacións están activas e en execución mesmo cando non as usas. Deste xeito mellórase o seu funcionamento, pero tamén é posible que se vexa afectada a duración da batería."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"A wifi non está dispoñible"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Modo de prioridade"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarma definida"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"A cámara está apagada"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"O micrófono está desactivado"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"A cámara e o micrófono están desactivados"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notificación}other{# notificacións}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Difusión"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Queres deixar de emitir contido a través de <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Se emites contido a través de <xliff:g id="SWITCHAPP">%1$s</xliff:g> ou cambias de saída, a emisión en curso deterase"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Emitir contido a través de <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Cambiar de saída"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Descoñecida"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, d MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-gl/tiles_states_strings.xml b/packages/SystemUI/res/values-gl/tiles_states_strings.xml
index 229836c..590ec4a 100644
--- a/packages/SystemUI/res/values-gl/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-gl/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Desactivado"</item>
     <item msgid="460891964396502657">"Activado"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Non dispoñible"</item>
+    <item msgid="8014986104355098744">"Desactivado"</item>
+    <item msgid="5966994759929723339">"Activado"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml
index 5673725..b5a629a 100644
--- a/packages/SystemUI/res/values-gu/strings.xml
+++ b/packages/SystemUI/res/values-gu/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"ડિવાઇસ લૉક કરેલું છે"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"ચહેરો સ્કૅન કરવો"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"મોકલો"</string>
-    <string name="phone_label" msgid="5715229948920451352">"ફોન ખોલો"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"વૉઇસ સહાય ખોલો"</string>
-    <string name="camera_label" msgid="8253821920931143699">"કૅમેરા ખોલો"</string>
     <string name="cancel" msgid="1089011503403416730">"રદ કરો"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"કન્ફર્મ કરો"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"ફરી પ્રયાસ કરો"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"\'સેન્સર બંધ છે\'ની સુવિધા સક્રિય છે"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"બધા સૂચનો સાફ કરો."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> વધુ સૂચના અંદર છે.</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> વધુ સૂચના અંદર છે.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{વધુ # નોટિફિકેશન અંદર છે.}one{વધુ # નોટિફિકેશન અંદર છે.}other{વધુ # નોટિફિકેશન અંદર છે.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"સ્ક્રીન લેન્ડસ્કેપ ઓરિએન્ટેશનમાં લૉક કરેલ છે."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"સ્ક્રીન પોટ્રેટ ઓરિએન્ટેશનમાં લૉક કરેલ છે."</string>
     <string name="dessert_case" msgid="9104973640704357717">"ડેઝર્ટ કેસ"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"કૅમેરાનો ઍક્સેસ"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"માઇકનો ઍક્સેસ"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"ઉપલબ્ધ છે"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"હૉટસ્પૉટ"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"ચાલુ કરી રહ્યાં છીએ…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"ડેટા સેવર ચાલુ છે"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">%d ઉપકરણ</item>
-      <item quantity="other">%d ઉપકરણો</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# ડિવાઇસ}one{# ડિવાઇસ}other{# ડિવાઇસ}}"</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>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"ફરીથી ટૅપ કરો"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"ખોલવા માટે ઉપરની તરફ સ્વાઇપ કરો"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"ખોલવા માટે \'અનલૉક કરો\' આઇકન દબાવો"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"ચહેરા દ્વારા અનલૉક કર્યું. ખોલવા માટે ઉપરની તરફ સ્વાઇપ કરો."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"ચહેરા દ્વારા અનલૉક કર્યું. ખોલવા \'અનલૉક કરો\' આઇકન દબાવો."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"ચહેરા દ્વારા અનલૉક કર્યું. ખોલવા માટે દબાવો."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"ચહેરો ઓળખ્યો. ખોલવા માટે દબાવો."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"શું તમે તમારું સત્ર ચાલુ રાખવા માંગો છો?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"શરૂ કરો"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"હા, ચાલુ રાખો"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"અતિથિ મોડ"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"તમે અતિથિ મોડમાં છો"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"કોઈ નવા વપરાશકર્તાને ઉમેરવાથી અતિથિ મોડમાંથી નીકળી જવાશે તેમજ હાલના અતિથિ સત્રમાંથી તમામ ઍપ અને ડેટા ડિલીટ થઈ જશે."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"વપરાશકર્તા સંખ્યાની મર્યાદા"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">તમે <xliff:g id="COUNT">%d</xliff:g> વપરાશકર્તા સુધી ઉમેરી શકો છો.</item>
-      <item quantity="other">તમે <xliff:g id="COUNT">%d</xliff:g> વપરાશકર્તાઓ સુધી ઉમેરી શકો છો.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{માત્ર એક જ વપરાશકર્તા બનાવી શકાય છે.}one{તમે વધુમાં વધુ # વપરાશકર્તા ઉમેરી શકો છો.}other{તમે વધુમાં વધુ # વપરાશકર્તા ઉમેરી શકો છો.}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"મને યાદ કરાવો"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"છેલ્લો ફેરફાર રદ કરો"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> માટે સ્નૂઝ કરો"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one">%d કલાક</item>
-      <item quantity="other">%d કલાક</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one">%d મિનિટ</item>
-      <item quantity="other">%d મિનિટ</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# કલાક}=2{# કલાક}one{# કલાક}other{# કલાક}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# મિનિટ}one{# મિનિટ}other{# મિનિટ}}"</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>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"અલર્ટ"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"બૅટરી"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"સ્ક્રીનશૉટ"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"સામાન્ય સંદેશા"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant Apps"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"સેટઅપ કરો"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"સ્ટોરેજ"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"હિન્ટ"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant Apps"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"ટૉગલ કરો"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"ડિવાઇસનાં નિયંત્રણો"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"નિયંત્રણો ઉમેરવા માટે ઍપ પસંદ કરો"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> નિયંત્રણ ઉમેર્યું.</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> નિયંત્રણો ઉમેર્યા.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# નિયંત્રણ ઉમેર્યું.}one{# નિયંત્રણ ઉમેર્યું.}other{# નિયંત્રણ ઉમેર્યા.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"કાઢી નાખ્યું"</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>
@@ -846,7 +831,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="9099497976087485862">"નવા ડિવાઇસ સાથે જોડાણ કરો"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"ટાઇલ ઉમેરો"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"ટાઇલ ઉમેરશો નહીં"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"વપરાશકર્તા પસંદ કરો"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> ઍપ સક્રિય છે</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> ઍપ સક્રિય છે</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"વાઇ-ફાઇ ઉપલબ્ધ નથી"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"પ્રાધાન્યતા મોડ"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"અલાર્મ સેટ"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"કૅમેરા બંધ છે"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"માઇક્રોફોન બંધ છે"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"કૅમેરા અને માઇક બંધ છે"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# નોટિફિકેશન}one{# નોટિફિકેશન}other{# નોટિફિકેશન}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"બ્રૉડકાસ્ટ કરી રહ્યાં છે"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"<xliff:g id="APP_NAME">%1$s</xliff:g> બ્રોડકાસ્ટ કરવાનું રોકીએ?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"જો તમે <xliff:g id="SWITCHAPP">%1$s</xliff:g> બ્રોડકાસ્ટ કરો અથવા આઉટપુટ બદલો, તો તમારું હાલનું બ્રોડકાસ્ટ બંધ થઈ જશે"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> બ્રોડકાસ્ટ કરો"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"આઉટપુટ બદલો"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"અજાણ"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, d MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-gu/tiles_states_strings.xml b/packages/SystemUI/res/values-gu/tiles_states_strings.xml
index c502ba3..73b3720 100644
--- a/packages/SystemUI/res/values-gu/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-gu/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"બંધ છે"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index c0bea8a..0fc9d3d 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"डिवाइस लॉक है"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"डिवाइस अनलॉक करने के लिए चेहरा स्कैन किया जाता है"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"भेजें"</string>
-    <string name="phone_label" msgid="5715229948920451352">"फ़ोन खोलें"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"आवाज़ से डिवाइस को इस्तेमाल करें"</string>
-    <string name="camera_label" msgid="8253821920931143699">"कैमरा खोलें"</string>
     <string name="cancel" msgid="1089011503403416730">"रद्द करें"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"पुष्टि करें"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"फिर से कोशिश करें"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"सेंसर बंद हैं"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"सभी सूचनाएं साफ़ करें."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one">इसमें <xliff:g id="NUMBER_1">%s</xliff:g> और सूचनाएं हैं.</item>
-      <item quantity="other">इसमें <xliff:g id="NUMBER_1">%s</xliff:g> और सूचनाएं हैं.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{ग्रुप में # सूचना है.}one{ग्रुप में # सूचना है.}other{ग्रुप में # सूचनाएं हैं.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"स्क्रीन लैंडस्केप दिशा में लॉक है."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"स्‍क्रीन पोर्ट्रेट दिशा में लॉक है."</string>
     <string name="dessert_case" msgid="9104973640704357717">"मिठाई का डिब्बा"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"कैमरे का ऐक्सेस"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"माइक्रोफ़ोन का ऐक्सेस"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"उपलब्ध"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"हॉटस्पॉट"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"हॉटस्पॉट चालू हो रहा है…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"डेटा बचाया जा रहा है"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">%d डिवाइस</item>
-      <item quantity="other">%d डिवाइस</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# डिवाइस}one{# डिवाइस}other{# डिवाइस}}"</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>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"फिर से टैप करें"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"खोलने के लिए ऊपर स्वाइप करें"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"डिवाइस अनलॉक करने के लिए, अनलॉक आइकॉन को दबाएं"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"चेहरे से अनलॉक किया गया. खोलने के लिए ऊपर की ओर स्वाइप करें."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"चेहरे से अनलॉक किया. डिवाइस अनलॉक करने के लिए, अनलॉक आइकॉन को दबाएं."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"चेहरे से अनलॉक किया गया. डिवाइस खोलने के लिए टैप करें."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"चेहरे की पहचान हो गई. डिवाइस खोलने के लिए टैप करें."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"क्‍या आपको अपना सेशन जारी रखना है?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"फिर से शुरू करें"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"हां, जारी रखें"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"मेहमान मोड"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"आप मेहमान मोड में हैं"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"किसी नए उपयोगकर्ता को जोड़ने पर, मेहमान मोड को बंद कर दिया जाएगा. साथ ही, मेहमान के तौर पर ब्राउज़ करने के मौजूदा सेशन से, सभी ऐप्लिकेशन और डेटा को मिटा दिया जाएगा."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"अब और उपयोगकर्ता नहीं जोड़े जा सकते"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">आप ज़्यादा से ज़्यादा <xliff:g id="COUNT">%d</xliff:g> उपयोगकर्ता जोड़ सकते हैं.</item>
-      <item quantity="other">आप ज़्यादा से ज़्यादा <xliff:g id="COUNT">%d</xliff:g> उपयोगकर्ता जोड़ सकते हैं.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{सिर्फ़ एक उपयोगकर्ता खाता जोड़ा जा सकता है.}one{ज़्यादा से ज़्यादा # उपयोगकर्ता खाता जोड़ा जा सकता है.}other{ज़्यादा से ज़्यादा # उपयोगकर्ता खाते जोड़े जा सकते हैं.}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"बाद में याद दिलाएं"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"पहले जैसा करें"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> के लिए याद दिलाया गया"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one">%d घंटे</item>
-      <item quantity="other">%d घंटे</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one">%d मिनट</item>
-      <item quantity="other">%d मिनट</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# घंटा}=2{# घंटे}one{# घंटा}other{# घंटे}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# मिनट}one{# मिनट}other{# मिनट}}"</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>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"सूचनाएं"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"बैटरी"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"स्‍क्रीनशॉट"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"सामान्य संदेश"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant Apps"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"सेट अप"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"स्टोरेज"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"संकेत"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant Apps"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"टॉगल करें"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"डिवाइस कंट्रोल"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"कंट्रोल जोड़ने के लिए ऐप्लिकेशन चुनें"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> कंट्रोल जोड़ा गया.</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> कंट्रोल जोड़े गए.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# कंट्रोल जोड़ा गया.}one{# कंट्रोल जोड़ा गया.}other{# कंट्रोल जोड़े गए.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"हटाया गया"</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>
@@ -846,7 +831,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="9099497976087485862">"नया डिवाइस जोड़ें"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"टाइल जोड़ें"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"टाइल न जोड़ें"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"उपयोगकर्ता चुनें"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> ऐप्लिकेशन चालू है</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> ऐप्लिकेशन चालू हैं</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"वाई-फ़ाई उपलब्ध नहीं है"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"प्राथमिकता मोड"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"अलार्म सेट किया गया"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"कैमरा बंद है"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"माइक्रोफ़ोन बंद है"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"कैमरा और माइक बंद हैं"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# सूचना}one{# सूचना}other{# सूचनाएं}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"ब्रॉडकास्ट ऐप्लिकेशन"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"<xliff:g id="APP_NAME">%1$s</xliff:g> पर ब्रॉडकास्ट करना रोकें?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> पर ब्रॉडकास्ट शुरू करने पर या आउटपुट बदलने पर, आपका मौजूदा ब्रॉडकास्ट बंद हो जाएगा"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> पर ब्रॉडकास्ट करें"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"आउटपुट बदलें"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"कोई जानकारी नहीं"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-hi/tiles_states_strings.xml b/packages/SystemUI/res/values-hi/tiles_states_strings.xml
index 9af07bc..a156b0c 100644
--- a/packages/SystemUI/res/values-hi/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-hi/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"बंद है"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index 1ddf767..56d40c7 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Uređaj je zaključan"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Skeniranje lica"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Pošalji"</string>
-    <string name="phone_label" msgid="5715229948920451352">"otvaranje telefona"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"otvaranje glasovne pomoći"</string>
-    <string name="camera_label" msgid="8253821920931143699">"otvaranje fotoaparata"</string>
     <string name="cancel" msgid="1089011503403416730">"Odustani"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Potvrdi"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Pokušaj ponovo"</string>
@@ -205,11 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Senzori isključeni aktivno"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Brisanje svih obavijesti."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"još <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one">U skupini je još <xliff:g id="NUMBER_1">%s</xliff:g> obavijest.</item>
-      <item quantity="few">U skupini su još <xliff:g id="NUMBER_1">%s</xliff:g> obavijesti.</item>
-      <item quantity="other">U skupini je još <xliff:g id="NUMBER_1">%s</xliff:g> obavijesti.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{U grupi je još # obavijest.}one{U grupi je još # obavijest.}few{U grupi su još # obavijesti.}other{U grupi je još # obavijesti.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Zaslon je zaključan u pejzažnoj orijentaciji."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Zaslon je zaključan u portretnoj orijentaciji."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Izlog za slastice"</string>
@@ -227,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Autom. zakretanje"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automatsko zakretanje zaslona"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Lokacija"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Čuvar zaslona"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Pristup fotoaparatu"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Pristup mikrofonu"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Dostupno"</string>
@@ -256,11 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Žarišna točka"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Uključivanje…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Štednja pod. prom. uklj."</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">%d uređaj</item>
-      <item quantity="few">%d uređaja</item>
-      <item quantity="other">%d uređaja</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# uređaj}one{# uređaj}few{# uređaja}other{# uređaja}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Svjetiljka"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Upotrebljava se kamera"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Mobilni podaci"</string>
@@ -317,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Dodirnite ponovo"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Prijeđite prstom prema gore da biste otvorili"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Pritisnite ikonu otključavanja da biste otvorili"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Otključano licem. Prijeđite prstom prema gore za otvaranje."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Otključano pomoću lica. Pritisnite ikonu otključavanja da biste otvorili."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Otključano pomoću lica. Pritisnite da biste otvorili."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Lice je prepoznato. Pritisnite da biste otvorili."</string>
@@ -353,12 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Želite li nastaviti sesiju?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Počni ispočetka"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Da, nastavi"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Način rada za goste"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Upotrebljavate način rada za goste"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Ako dodate novog korisnika, napustit ćete način rada za goste i izbrisat će se svi podaci i aplikacije iz trenutačne gostujuće sesije."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Dosegnuto je ograničenje korisnika"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">Možete dodati najviše <xliff:g id="COUNT">%d</xliff:g> korisnika.</item>
-      <item quantity="few">Možete dodati najviše <xliff:g id="COUNT">%d</xliff:g> korisnika.</item>
-      <item quantity="other">Možete dodati najviše <xliff:g id="COUNT">%d</xliff:g> korisnika.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Može se izraditi samo jedan korisnik.}one{Možete dodati najviše # korisnika.}few{Možete dodati najviše # korisnika.}other{Možete dodati najviše # korisnika.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Ukloniti korisnika?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Izbrisat će se sve aplikacije i podaci ovog korisnika."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Ukloni"</string>
@@ -544,16 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Podsjeti me"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Poništi"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Odgođeno <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one">%d sat</item>
-      <item quantity="few">%d sata</item>
-      <item quantity="other">%d sati</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one">%d minuta</item>
-      <item quantity="few">%d minute</item>
-      <item quantity="other">%d minuta</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# h}=2{# h}one{# h}few{# h}other{# h}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# min}one{# min}few{# min}other{# min}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Štednja baterije"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Tipka <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Početak"</string>
@@ -702,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Upozorenja"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Baterija"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Snimke zaslona"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Općenite poruke"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant aplikacije"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Postavljanje"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Pohrana"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Savjeti"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant aplikacije"</string>
@@ -776,11 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"promijeni"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Kontrole uređaja"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Odabir aplikacije za dodavanje kontrola"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one">Dodana je <xliff:g id="NUMBER_1">%s</xliff:g> kontrola.</item>
-      <item quantity="few">Dodane su <xliff:g id="NUMBER_1">%s</xliff:g> kontrole.</item>
-      <item quantity="other">Dodano je <xliff:g id="NUMBER_1">%s</xliff:g> kontrola.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{Dodana je # kontrola.}one{Dodana je # kontrola.}few{Dodane su # kontrole.}other{Dodano je # kontrola.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Uklonjeno"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Dodano u favorite"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Dodano u favorite, položaj <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -852,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"Odabrano uređaja: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(nije povezano)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Nije prebačeno. Dodirnite da biste pokušali ponovo."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Uparite novi uređaj"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Povezivanje uređaja"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Da biste emitirali ovu sesiju, otvorite aplikaciju."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Nepoznata aplikacija"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Zaustavi emitiranje"</string>
@@ -937,11 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Dodaj pločicu"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Nemoj dodati pločicu"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Odabir korisnika"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> aplikacija je aktivna</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%s</xliff:g> aplikacije su aktivne</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aplikacija je aktivno</item>
-    </plurals>
+    <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>
@@ -968,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi nije dostupan"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Prioritetni način rada"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarm je postavljen"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Kamera je isključena"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mikrofon je isključen"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Fotoaparat i mikrofon su isključeni"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# obavijest}one{# obavijest}few{# obavijesti}other{# obavijesti}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Emitiranje"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Zaustaviti emitiranje aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Ako emitirate aplikaciju <xliff:g id="SWITCHAPP">%1$s</xliff:g> ili promijenite izlaz, vaše će se trenutačno emitiranje zaustaviti"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Emitiranje aplikacije <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Promjena izlaza"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Nepoznato"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE., d. MMM."</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-hr/tiles_states_strings.xml b/packages/SystemUI/res/values-hr/tiles_states_strings.xml
index a057c48..b69b064 100644
--- a/packages/SystemUI/res/values-hr/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-hr/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Isključeno"</item>
     <item msgid="460891964396502657">"Uključeno"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Nedostupno"</item>
+    <item msgid="8014986104355098744">"Isključeno"</item>
+    <item msgid="5966994759929723339">"Uključeno"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 531fcf0..131f789 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Az eszköz zárolva van"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Arc keresése"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Küldés"</string>
-    <string name="phone_label" msgid="5715229948920451352">"telefon megnyitása"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"hangsegéd megnyitása"</string>
-    <string name="camera_label" msgid="8253821920931143699">"kamera megnyitása"</string>
     <string name="cancel" msgid="1089011503403416730">"Mégse"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Megerősítés"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Újrapróbálkozás"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Az Érzékelők kikapcsolva kártya aktív"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Minden értesítés törlése"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> további értesítés.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> további értesítés.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{# további értesítés a csoportban.}other{# további értesítés a csoportban.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"A képernyő zárolva van fekvő tájolásban."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"A képernyő zárolva van álló tájolásban."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Dessert Case"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automatikus elforgatás"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automatikus képernyőforgatás"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Tartózkodási hely"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Képernyővédő"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Hozzáférés a kamerához"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Mikrofonelérés"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Rendelkezésre áll"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Hotspot"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Bekapcsolás…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Aktív adatcsökkentés"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d eszköz</item>
-      <item quantity="one">%d eszköz</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# eszköz}other{# eszköz}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Zseblámpa"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"A kamera használatban van"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Mobiladatok"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Koppintson újra"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Csúsztasson felfelé a megnyitáshoz"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Az eszköz használatához nyomja meg a feloldás ikonját"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Zárolás arccal feloldva. Csúsztasson felfelé a megnyitáshoz."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Arccal feloldva. A megnyitáshoz nyomja meg a feloldás ikont."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Zárolás arccal feloldva. Koppintson az eszköz használatához."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Arc felismerve. Koppintson az eszköz használatához."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Folytatja a munkamenetet?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Újrakezdés"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Igen, folytatom"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Vendég mód"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Vendég módban van"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Új felhasználó felvételével kilép a vendég módból, és az aktuális vendégmunkamenetből származó összes alkalmazás és adat törlődik majd."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Maximális felhasználószám elérve"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">Legfeljebb <xliff:g id="COUNT">%d</xliff:g> felhasználót adhat hozzá.</item>
-      <item quantity="one">Csak egy felhasználót lehet létrehozni.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Csak egy felhasználót lehet létrehozni.}other{Legfeljebb # felhasználót adhat hozzá.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Törli a felhasználót?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"A felhasználóhoz tartozó minden adat és alkalmazás törölve lesz."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Eltávolítás"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Emlékeztessen"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Visszavonás"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Elhalasztva: <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d óra</item>
-      <item quantity="one">%d óra</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d perc</item>
-      <item quantity="one">%d perc</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# óra}=2{# óra}other{# óra}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# perc}other{# perc}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Akkumulátorkímélő mód"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"<xliff:g id="NAME">%1$s</xliff:g> gomb"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Kezdőképernyő"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Értesítések"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Akkumulátor"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Képernyőképek"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Általános üzenetek"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Azonnali alkalmazások"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Beállítás"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Tárhely"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Tippek"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Azonnali alkalmazások"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"váltás"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Eszközvezérlők"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Válasszon alkalmazást a vezérlők hozzáadásához"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> vezérlő hozzáadva.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> vezérlő hozzáadva.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# vezérlő hozzáadva.}other{# vezérlő hozzáadva.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Eltávolítva"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Hozzáadva a kedvencekhez"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Hozzáadva a kedvencekhez <xliff:g id="NUMBER">%d</xliff:g>. helyen"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> eszköz kiválasztva"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(leválasztva)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"A váltás nem sikerült. Próbálja újra."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Új eszköz párosítása"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Eszköz csatlakoztatása"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"A munkamenet átküldéséhez nyissa meg az alkalmazást."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Ismeretlen alkalmazás"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Átküldés leállítása"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Mozaik hozzáadása"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Ne legyen hozzáadva"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Felhasználóválasztás"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> alkalmazás aktív</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> alkalmazás aktív</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# alkalmazás aktív}other{# alkalmazás aktív}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Új információ"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktív alkalmazások"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Ezek az alkalmazások aktívak és futnak, még akkor is, amikor nem használja őket. Ez javítja a működésüket, de hatással lehet az akkumulátor-élettartamra is."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"A Wi‑Fi nem áll rendelkezésre"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Prioritás mód"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Ébresztő beállítva"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"A kamera ki van kapcsolva"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"A mikrofon ki van kapcsolva"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"A kamera és a mikrofon ki vannak kapcsolva"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# értesítés}other{# értesítés}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Sugárzás"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Leállítja a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> közvetítését?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"A(z) <xliff:g id="SWITCHAPP">%1$s</xliff:g> közvetítése vagy a kimenet módosítása esetén a jelenlegi közvetítés leáll"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> közvetítése"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Kimenet módosítása"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Ismeretlen"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, HHH n"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"ó:pp"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"óó:pp"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-hu/tiles_states_strings.xml b/packages/SystemUI/res/values-hu/tiles_states_strings.xml
index 47109a3..050bc14 100644
--- a/packages/SystemUI/res/values-hu/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-hu/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Ki"</item>
     <item msgid="460891964396502657">"Be"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Nem áll rendelkezésre"</item>
+    <item msgid="8014986104355098744">"Ki"</item>
+    <item msgid="5966994759929723339">"Be"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml
index 7f2d577..aa52ee5 100644
--- a/packages/SystemUI/res/values-hy/strings.xml
+++ b/packages/SystemUI/res/values-hy/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Սարքը կողպված է"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Դեմքի սկանավորում"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Ուղարկել"</string>
-    <string name="phone_label" msgid="5715229948920451352">"բացել հեռախոսը"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"բացեք ձայնային հուշումը"</string>
-    <string name="camera_label" msgid="8253821920931143699">"բացել ֆոտոխցիկը"</string>
     <string name="cancel" msgid="1089011503403416730">"Չեղարկել"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Հաստատել"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Նորից փորձել"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Տվիչներն անջատված են"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Մաքրել բոլոր ծանուցումները:"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one">Ներսում ևս <xliff:g id="NUMBER_1">%s</xliff:g> ծանուցում կա:</item>
-      <item quantity="other">Ներսում ևս <xliff:g id="NUMBER_1">%s</xliff:g> ծանուցում կա:</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Խմբում ևս # ծանուցում կա։}one{Խմբում ևս # ծանուցում կա։}other{Խմբում ևս # ծանուցում կա։}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Էկրանը կողպված է հորիզոնական դիրքավորման մեջ:"</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Էկրանը կողպված է ուղղաձիգ դիրքավորմամբ:"</string>
     <string name="dessert_case" msgid="9104973640704357717">"Dessert Case"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"Տեսախցիկի հասանելիություն"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Խոսափողի հասանելիություն"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Հասանելի է"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Թեժ կետ"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Միացում…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Թրաֆիկը տնտեսվում է"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">%d սարք</item>
-      <item quantity="other">%d սարք</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# սարք}one{# սարք}other{# սարք}}"</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>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Նորից հպեք"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Բացելու համար սահեցրեք վերև"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Բացեք՝ սեղմելով ապակողպման պատկերակը"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Ապակողպվել է դեմքով։ Բացելու համար սահեցրեք մատը վերև։"</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Ապակողպվել է դեմքով։ Բացեք՝ սեղմելով ապակողպման պատկերակը։"</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Ապակողպվել է դեմքով։ Սեղմեք բացելու համար։"</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Դեմքը ճանաչվեց։ Սեղմեք բացելու համար։"</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Շարունակե՞լ աշխատաշրջանը։"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Վերսկսել"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Այո, շարունակել"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Հյուրի ռեժիմ"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Դուք հյուրի ռեժիմում եք"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Ավելացնելով նոր օգտատեր՝ դուք դուրս կգաք հյուրի ռեժիմից։ Հյուրի ընթացիկ աշխատաշրջանի բոլոր հավելվածներն ու տվյալները կջնջվեն։"</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Սահմանաչափը սպառված է"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">Հնարավոր է ավելացնել առավելագույնը <xliff:g id="COUNT">%d</xliff:g> օգտատեր։</item>
-      <item quantity="other">Հնարավոր է ավելացնել առավելագույնը <xliff:g id="COUNT">%d</xliff:g> օգտատեր։</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Հնարավոր է ստեղծել միայն մեկ օգտատեր։}one{Կարող եք առավելագույնը # օգտատեր ավելացնել։}other{Կարող եք առավելագույնը # օգտատեր ավելացնել։}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Հիշեցնել ինձ"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Հետարկել"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Հետաձգվել է <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>ով"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one">%d ժամ</item>
-      <item quantity="other">%d ժամ</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one">%d րոպե</item>
-      <item quantity="other">%d րոպե</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# ժամ}=2{# ժամ}one{# ժամ}other{# ժամ}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# րոպե}one{# րոպե}other{# րոպե}}"</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">"Գլխավոր էջ"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Ծանուցումներ"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Մարտկոց"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Սքրինշոթներ"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Ընդհանուր հաղորդագրություններ"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Ակնթարթային հավելվածներ"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Կարգավորում"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Տարածք"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Հուշումներ"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Ակնթարթային հավելվածներ"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"միացնել/անջատել"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Սարքերի կառավարման տարրեր"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Ընտրեք հավելված` կառավարման տարրեր ավելացնելու համար"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one">Ավելացվեց կառավարման <xliff:g id="NUMBER_1">%s</xliff:g> տարր։</item>
-      <item quantity="other">Ավելացվեց կառավարման <xliff:g id="NUMBER_1">%s</xliff:g> տարր։</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{Ավելացվեց կառավարման # տարր։}one{Ավելացվեց կառավարման # տարր։}other{Ավելացվեց կառավարման # տարր։}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Հեռացված է"</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>
@@ -846,7 +831,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="9099497976087485862">"Նոր սարքի զուգակցում"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Ավելացնել սալիկ"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Չավելացնել սալիկ"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Ընտրեք օգտատեր"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> հավելված ակտիվ է</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> հավելված ակտիվ է</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi-ը հասանելի չէ"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Առաջնահերթության ռեժիմ"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Զարթուցիչը դրված է"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Տեսախցիկն անջատված է"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Խոսափողն անջատված է"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Տեսախցիկը և խոսափողն անջատված են"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# ծանուցում}one{# ծանուցում}other{# ծանուցում}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Հեռարձակում"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Կանգնեցնել <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի հեռարձակումը"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Եթե հեռարձակեք <xliff:g id="SWITCHAPP">%1$s</xliff:g> հավելվածը կամ փոխեք աուդիո ելքը, ձեր ընթացիկ հեռարձակումը կկանգնեցվի։"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Հեռարձակել <xliff:g id="SWITCHAPP">%1$s</xliff:g> հավելվածը"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Փոխել աուդիո ելքը"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Անհայտ"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-hy/tiles_states_strings.xml b/packages/SystemUI/res/values-hy/tiles_states_strings.xml
index a78b7a1..6015fbd 100644
--- a/packages/SystemUI/res/values-hy/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-hy/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Անջատված է"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index d492159..085f174 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Perangkat terkunci"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Memindai wajah"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Kirim"</string>
-    <string name="phone_label" msgid="5715229948920451352">"buka ponsel"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"buka bantuan suara"</string>
-    <string name="camera_label" msgid="8253821920931143699">"buka kamera"</string>
     <string name="cancel" msgid="1089011503403416730">"Batal"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Konfirmasi"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Coba lagi"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Sensor nonaktif diaktifkan"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Menghapus semua pemberitahuan."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> notifikasi lainnya di dalam.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> notifikasi lainnya di dalam.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{# notifikasi lainnya di dalam.}other{# notifikasi lainnya di dalam.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Layar dikunci dalam orientasi lanskap."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Layar dikunci dalam orientasi potret."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Etalase Hidangan Penutup"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Putar Otomatis"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Putar layar otomatis"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Lokasi"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Screensaver"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Akses kamera"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Akses mikrofon"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Tersedia"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Hotspot"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Mengaktifkan…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Penghemat Data aktif"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d perangkat</item>
-      <item quantity="one">%d perangkat</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# perangkat}other{# perangkat}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Lampu Senter"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Kamera sedang digunakan"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Data seluler"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Ketuk lagi"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Geser ke atas untuk membuka"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Tekan ikon buka kunci untuk membuka"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Kunci dibuka dengan wajah. Geser ke atas untuk membuka."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Kunci dibuka dengan wajah. Tekan ikon buka kunci untuk membuka."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Kunci dibuka dengan wajah. Tekan untuk membuka."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Wajah dikenali. Tekan untuk membuka."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Lanjutkan sesi Anda?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Mulai ulang"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Ya, lanjutkan"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Mode tamu"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Anda sedang menggunakan mode tamu"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Menambahkan pengguna baru akan membuat Anda keluar dari mode tamu dan menghapus semua aplikasi serta data dari sesi tamu saat ini."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Batas pengguna tercapai"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">Anda dapat menambahkan hingga <xliff:g id="COUNT">%d</xliff:g> pengguna.</item>
-      <item quantity="one">Hanya dapat membuat satu pengguna.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Hanya dapat membuat satu pengguna.}other{Anda dapat menambahkan maksimal # pengguna.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Hapus pengguna?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Semua aplikasi dan data pengguna ini akan dihapus."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Hapus"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Ingatkan saya"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Urungkan"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Ditunda selama <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d jam</item>
-      <item quantity="one">%d jam</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d menit</item>
-      <item quantity="one">%d menit</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# jam}=2{# jam}other{# jam}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# menit}other{# menit}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Penghemat Baterai"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Tombol <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Notifikasi"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Baterai"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Screenshot"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Pesan Umum"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Aplikasi Instan"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Penyiapan"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Penyimpanan"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Petunjuk"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Aplikasi Instan"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"alihkan"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Kontrol perangkat"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Pilih aplikasi untuk menambahkan kontrol"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> kontrol ditambahkan.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> kontrol ditambahkan.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# kontrol ditambahkan.}other{# kontrol ditambahkan.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Dihapus"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Difavoritkan"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Difavoritkan, posisi <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> perangkat dipilih"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(terputus)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Tidak dapat beralih. Ketuk untuk mencoba lagi."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Sambungkan perangkat baru"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Hubungkan perangkat"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Buka aplikasi untuk mentransmisikan sesi ini."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Aplikasi tidak dikenal"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Hentikan transmisi"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Tambahkan kartu"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Jangan tambah kartu"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Pilih pengguna"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aplikasi aktif</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aplikasi aktif</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# aplikasi aktif}other{# aplikasi aktif}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Informasi baru"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aplikasi aktif"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Aplikasi ini aktif dan berjalan, meski Anda tidak sedang menggunakannya. Hal ini akan meningkatkan fungsi aplikasi, tetapi juga dapat memengaruhi masa pakai baterai."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi tidak tersedia"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Mode prioritas"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarm disetel"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Kamera nonaktif"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mikrofon nonaktif"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Kamera dan mikrofon nonaktif"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notifikasi}other{# notifikasi}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Menyiarkan"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Hentikan siaran <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Jika Anda menyiarkan <xliff:g id="SWITCHAPP">%1$s</xliff:g> atau mengubah output, siaran saat ini akan dihentikan"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Siarkan <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Ubah output"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Tidak diketahui"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, d MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-in/tiles_states_strings.xml b/packages/SystemUI/res/values-in/tiles_states_strings.xml
index fff794a..5416c8f 100644
--- a/packages/SystemUI/res/values-in/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-in/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Nonaktif"</item>
     <item msgid="460891964396502657">"Aktif"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Tidak tersedia"</item>
+    <item msgid="8014986104355098744">"Nonaktif"</item>
+    <item msgid="5966994759929723339">"Aktif"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml
index 387bdd7..6a78cf0 100644
--- a/packages/SystemUI/res/values-is/strings.xml
+++ b/packages/SystemUI/res/values-is/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Tækið er læst"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Andlit skannað"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Senda"</string>
-    <string name="phone_label" msgid="5715229948920451352">"opna síma"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"opna raddaðstoð"</string>
-    <string name="camera_label" msgid="8253821920931143699">"opna myndavél"</string>
     <string name="cancel" msgid="1089011503403416730">"Hætta við"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Staðfesta"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Reyna aftur"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Slökkt á skynjurum valið"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Hreinsa allar tilkynningar."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> tilkynning í viðbót.</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> tilkynningar í viðbót.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{# tilkynning í viðbót.}one{# tilkynning í viðbót.}other{# tilkynningar í viðbót.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Skjárinn er læstur í langsniði."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Skjárinn er læstur í skammsniði."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Eftirréttaborð"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Sjálfvirkur snúningur"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Snúa skjá sjálfkrafa"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Staðsetning"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Skjávari"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Aðgangur að myndavél"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Aðgangur að hljóðnema"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Tiltækt"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Heitur reitur"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Kveikir…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Gagnasparnaður á"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">%d tæki</item>
-      <item quantity="other">%d tæki</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# tæki}one{# tæki}other{# tæki}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Vasaljós"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Myndavél í notkun"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Farsímagögn"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Ýttu aftur"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Strjúktu upp til að opna"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Ýttu á táknið til að taka úr lás til að opna"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Opnað með andliti. Strjúktu upp til að opna."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Opnað með andliti. Ýttu á táknið taka úr lás til að opna."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Opnað með andliti. Ýttu til að opna."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Andlitið var greint. Ýttu til að opna."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Viltu halda áfram með lotuna?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Byrja upp á nýtt"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Já, halda áfram"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Gestastilling"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Þú ert í gestastillingu"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Þegar nýjum notanda er bætt við er gestastillingu lokað og öllum forritum og gögnum úr núverandi gestalotu eytt."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Notandahámarki náð"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">Þú getur bætt við allt að <xliff:g id="COUNT">%d</xliff:g> notanda.</item>
-      <item quantity="other">Þú getur bætt við allt að <xliff:g id="COUNT">%d</xliff:g> notendum.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Aðeins er hægt að stofna einn notanda.}one{Þú getur bætt við allt að # notanda.}other{Þú getur bætt við allt að # notendum.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Fjarlægja notandann?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Öllum forritum og gögnum þessa notanda verður eytt."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Fjarlægja"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Minna mig á"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Afturkalla"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Þaggað í <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one">%d klukkustund</item>
-      <item quantity="other">%d klukkustundir</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one">%d mínúta</item>
-      <item quantity="other">%d mínútur</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# klukkustund}=2{# klukkustundir}one{# klukkustund}other{# klukkustundir}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# mínúta}one{# mínúta}other{# mínútur}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Rafhlöðusparnaður"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Hnappur <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Tilkynningar"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Rafhlaða"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Skjámyndir"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Almenn skilaboð"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Skyndiforrit"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Uppsetning"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Geymslurými"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Vísbendingar"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Skyndiforrit"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"kveikja/slökkva"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Tækjastjórnun"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Veldu forrit til að bæta við stýringum"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> stýringu bætt við.</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> stýringum bætt við.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# stýringu bætt við.}one{# stýringu bætt við.}other{# stýringum bætt við.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Fjarlægt"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Eftirlæti"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Eftirlæti, staða <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> tæki valin"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(aftengt)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Ekki er hægt að skipta. Ýttu til að reyna aftur."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Para nýtt tæki"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Tengja tæki"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Opnaðu forritið til að senda þessa lotu út."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Óþekkt forrit"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Stöðva útsendingu"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Bæta reit við"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Ekki bæta reit við"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Velja notanda"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> forrit virkt</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> forrit virk</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# forrit virkt}one{# forrit virkt}other{# forrit virk}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nýjar upplýsingar"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Virk forrit"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Þessi forrit eru virk og í gangi jafnvel þótt þú sért ekki að nota þau. Þetta bætir virkni þeirra en gæti einnig haft áhrif á rafhlöðuendingu."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"WiFi ekki tiltækt"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Forgangsstilling"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Vekjari stilltur"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Slökkt er á myndavél"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Slökkt er á hljóðnema"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Slökkt á myndavél og hljóðnema"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# tilkynning}one{# tilkynning}other{# tilkynningar}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Útsending í gangi"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Hætta að senda út <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Ef þú sendir út <xliff:g id="SWITCHAPP">%1$s</xliff:g> eða skiptir um úttak lýkur yfirstandandi útsendingu"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Senda út <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Skipta um úttak"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Óþekkt"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"k:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-is/tiles_states_strings.xml b/packages/SystemUI/res/values-is/tiles_states_strings.xml
index 29bce82..12dd776 100644
--- a/packages/SystemUI/res/values-is/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-is/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Slökkt"</item>
     <item msgid="460891964396502657">"Kveikt"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Ekki í boði"</item>
+    <item msgid="8014986104355098744">"Slökkt"</item>
+    <item msgid="5966994759929723339">"Kveikt"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index f3ff5ef..b594104 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Dispositivo bloccato"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Scansione del viso"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Invia"</string>
-    <string name="phone_label" msgid="5715229948920451352">"apri telefono"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"apri Voice Assist"</string>
-    <string name="camera_label" msgid="8253821920931143699">"apri fotocamera"</string>
     <string name="cancel" msgid="1089011503403416730">"Annulla"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Conferma"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Riprova"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Opzione Sensori disattivati attiva"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Cancella tutte le notifiche."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">Altre <xliff:g id="NUMBER_1">%s</xliff:g> notifiche nel gruppo.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> altra notifica nel gruppo.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{# altra notifica nel gruppo.}other{Altre # notifiche nel gruppo.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Lo schermo è bloccato in orientamento orizzontale."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Lo schermo è bloccato in orientamento verticale."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Vetrina di dolci"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Rotazione automatica"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Rotazione automatica dello schermo"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Geolocalizzazione"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Salvaschermo"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Accesso alla fotocamera"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Accesso al microfono"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Disponibile"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Hotspot"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Attivazione…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Risp. dati attivo"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d dispositivi</item>
-      <item quantity="one">%d dispositivo</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# dispositivo}other{# dispositivi}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Torcia"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Fotocamera in uso"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Dati mobili"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Tocca di nuovo"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Scorri verso l\'alto per aprire"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Premi l\'icona Sblocca per aprire"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Sbloccato con il volto. Scorri verso l\'alto per aprire."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Sbloccato con il volto. Premi l\'icona Sblocca per aprire."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Sbloccato con il volto. Premi per aprire."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Volto riconosciuto. Premi per aprire."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Vuoi continuare la sessione?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Ricomincia"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Sì, continua"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Modalità Ospite"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Sei in modalità Ospite"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Se aggiungi un nuovo utente, la modalità Ospite viene disattivata e vengono eliminati tutti i dati e le app della sessione Ospite corrente."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Limite di utenti raggiunto"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">Puoi aggiungere fino a <xliff:g id="COUNT">%d</xliff:g> utenti.</item>
-      <item quantity="one">È possibile creare un solo utente.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Può essere creato un solo utente.}other{Puoi aggiungere fino a # utenti.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Rimuovere l\'utente?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Tutte le app e i dati di questo utente verranno eliminati."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Rimuovi"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Ricordamelo"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Annulla"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Posticipato di <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d ore</item>
-      <item quantity="one">%d ora</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d minuti</item>
-      <item quantity="one">%d minuto</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# ora}=2{# ore}other{# ore}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minuto}other{# minuti}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Risparmio energetico"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Pulsante <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home page"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Avvisi"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Batteria"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Screenshot"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Messaggi generali"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"App istantanee"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Configurazione"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Spazio di archiviazione"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Suggerimenti"</string>
     <string name="instant_apps" msgid="8337185853050247304">"App istantanee"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"attiva/disattiva"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Controllo dispositivi"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Scegli un\'app per aggiungere controlli"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> controlli aggiunti.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> controllo aggiunto.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# controllo aggiunto.}other{# controlli aggiunti.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Rimosso"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Aggiunto ai preferiti"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Preferito, posizione <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> dispositivi selezionati"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(disconnesso)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Non puoi cambiare. Tocca per riprovare."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Accoppia nuovo dispositivo"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Connetti un dispositivo"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Per trasmettere questa sessione devi aprire l\'app."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"App sconosciuta"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Interrompi trasmissione"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Aggiungi riquadro"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Non aggiungerlo"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Seleziona utente"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> app attive</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> app attiva</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{C\'è # app attiva}other{Ci sono # app attive}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nuove informazioni"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"App attive"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Queste app sono attive e in esecuzione, anche quando non le utilizzi. Questo migliora la loro funzionalità, ma influisce sulla durata della batteria."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi non disponibile"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Modalità Priorità"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Sveglia impostata"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"La fotocamera è disattivata"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Il microfono è disattivato"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Fotocamera e microfono non attivi"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notifica}other{# notifiche}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Trasmissione in corso…"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Vuoi interrompere la trasmissione dell\'app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Se trasmetti l\'app <xliff:g id="SWITCHAPP">%1$s</xliff:g> o cambi l\'uscita, la trasmissione attuale viene interrotta"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Trasmetti l\'app <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Cambia uscita"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Unknown"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM g"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-it/tiles_states_strings.xml b/packages/SystemUI/res/values-it/tiles_states_strings.xml
index 757a866..5ec557b 100644
--- a/packages/SystemUI/res/values-it/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-it/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Off"</item>
     <item msgid="460891964396502657">"On"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Non disponibile"</item>
+    <item msgid="8014986104355098744">"Off"</item>
+    <item msgid="5966994759929723339">"On"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index 58e4523..cc9902f 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"המכשיר נעול"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"סורק פנים"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"שליחה"</string>
-    <string name="phone_label" msgid="5715229948920451352">"פתיחת הטלפון"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"פתיחת האסיסטנט"</string>
-    <string name="camera_label" msgid="8253821920931143699">"פתיחת המצלמה"</string>
     <string name="cancel" msgid="1089011503403416730">"ביטול"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"אישור"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"ניסיון נוסף"</string>
@@ -205,12 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"ההגדרה \'חיישנים כבויים\' פעילה"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"הסרת כל ההתראות."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="two">עוד <xliff:g id="NUMBER_1">%s</xliff:g> התראות נוספות.</item>
-      <item quantity="many">עוד <xliff:g id="NUMBER_1">%s</xliff:g> התראות.</item>
-      <item quantity="other">עוד <xliff:g id="NUMBER_1">%s</xliff:g> התראות נוספות.</item>
-      <item quantity="one">יש התראה נוספת.<xliff:g id="NUMBER_0">%s</xliff:g>.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{עוד התראה אחת (#) בקבוצה.}two{עוד # התראות בקבוצה.}many{עוד # התראות בקבוצה.}other{עוד # התראות בקבוצה.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"המסך נעול עכשיו לרוחב."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"המסך נעול כעת לאורך."</string>
     <string name="dessert_case" msgid="9104973640704357717">"מזנון קינוחים"</string>
@@ -228,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"גישה למצלמה"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"גישה למיקרופון"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"יש גישה"</string>
@@ -257,12 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"‏נקודת אינטרנט (hotspot)"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"ההפעלה מתבצעת…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"חוסך הנתונים פועל"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="two">‏%d מכשירים</item>
-      <item quantity="many">‏%d מכשירים</item>
-      <item quantity="other">‏%d מכשירים</item>
-      <item quantity="one">מכשיר אחד</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{מכשיר אחד (#)}two{# מכשירים}many{# מכשירים}other{# מכשירים}}"</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>
@@ -319,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"צריך להקיש פעם נוספת"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"צריך להחליק כדי לפתוח"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"לפתיחה, לוחצים על סמל ביטול הנעילה"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"הנעילה בוטלה באמצעות זיהוי הפנים. צריך להחליק כדי לפתוח."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"הנעילה בוטלה בזיהוי פנים. פותחים בלחיצה על סמל ביטול הנעילה."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"הנעילה בוטלה באמצעות זיהוי הפנים. יש ללחוץ כדי לפתוח."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"הפנים זוהו. יש ללחוץ כדי לפתוח."</string>
@@ -355,13 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"האם ברצונך להמשיך בפעילות באתר?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"סשן חדש"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"כן, להמשיך"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"מצב אורח"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"התחברת במצב אורח"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"הוספת משתמש חדש תגרום ליציאה ממצב האורח ותמחק את כל האפליקציות והנתונים מהגלישה הנוכחית כאורח."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"הגעת למגבלת המשתמשים שניתן להוסיף"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="two">ניתן להוסיף עד <xliff:g id="COUNT">%d</xliff:g> משתמשים.</item>
-      <item quantity="many">ניתן להוסיף עד <xliff:g id="COUNT">%d</xliff:g> משתמשים.</item>
-      <item quantity="other">ניתן להוסיף עד <xliff:g id="COUNT">%d</xliff:g> משתמשים.</item>
-      <item quantity="one">ניתן ליצור רק משתמש אחד.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{ניתן ליצור רק משתמש אחד.}two{אפשר להוסיף עד # משתמשים.}many{אפשר להוסיף עד # משתמשים.}other{אפשר להוסיף עד # משתמשים.}}"</string>
     <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>
@@ -547,18 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"אשמח לקבל תזכורת"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"ביטול"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"נדחה לטיפול בעוד <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="two">שעתיים</item>
-      <item quantity="many">‏%d שעות</item>
-      <item quantity="other">‏%d שעות</item>
-      <item quantity="one">שעה</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="two">‏%d דקות</item>
-      <item quantity="many">‏%d דקות</item>
-      <item quantity="other">‏%d דקות</item>
-      <item quantity="one">דקה</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{שעה}=2{שעתיים}many{# שעות}other{# שעות}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{דקה}two{# דקות}many{# דקות}other{# דקות}}"</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">"דף הבית"</string>
@@ -707,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"התראות"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"סוללה"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"צילומי מסך"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"הודעות כלליות"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"אפליקציות ללא התקנה"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"הגדרה"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"אחסון"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"טיפים"</string>
     <string name="instant_apps" msgid="8337185853050247304">"אפליקציות ללא התקנה"</string>
@@ -781,12 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"החלפת מצב"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"פקדי מכשירים"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"יש לבחור אפליקציה כדי להוסיף פקדים"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="two">נוספו <xliff:g id="NUMBER_1">%s</xliff:g> פקדים.</item>
-      <item quantity="many">נוספו <xliff:g id="NUMBER_1">%s</xliff:g> פקדים.</item>
-      <item quantity="other">נוספו <xliff:g id="NUMBER_1">%s</xliff:g> פקדים.</item>
-      <item quantity="one">נוסף פקד אחד (<xliff:g id="NUMBER_0">%s</xliff:g>).</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{נוסף אמצעי בקרה אחד (#).}two{נוספו # אמצעי בקרה.}many{נוספו # אמצעי בקרה.}other{נוספו # אמצעי בקרה.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"הוסר"</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>
@@ -858,7 +831,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="9099497976087485862">"התאמה של מכשיר חדש"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"חיבור מכשיר"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"‏כדי להעביר (cast) את הסשן הזה, צריך לפתוח את האפליקציה."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"אפליקציה לא ידועה"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"‏עצירת ההעברה (casting)"</string>
@@ -943,12 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"הוספת אריח"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"לא להוסיף אריח"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"בחירת משתמש"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="two"><xliff:g id="COUNT_1">%s</xliff:g> אפליקציות פעילות</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%s</xliff:g> אפליקציות פעילות</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> אפליקציות פעילות</item>
-      <item quantity="one">אפליקציה אחת (<xliff:g id="COUNT_0">%s</xliff:g>) פעילה</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{אפליקציה אחת (#) פעילה}two{# אפליקציות פעילות}many{# אפליקציות פעילות}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>
@@ -975,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"‏Wi‑Fi לא זמין"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"מצב עדיפות"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"ההתראה מוגדרת"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"המצלמה כבויה"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"המיקרופון כבוי"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"המצלמה והמיקרופון כבויים"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{התראה אחת}two{# התראות}many{# התראות}other{# התראות}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"שידור"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"האם להפסיק לשדר את התוכן מאפליקציית <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"אם משדרים את התוכן מאפליקציית <xliff:g id="SWITCHAPP">%1$s</xliff:g> או משנים את הפלט, השידור הנוכחי יפסיק לפעול"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"שידור תוכן מאפליקציית <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"שינוי הפלט"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"לא ידוע"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"‏יום EEE,‏ d בMMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-iw/tiles_states_strings.xml b/packages/SystemUI/res/values-iw/tiles_states_strings.xml
index 46be20c..91577b8 100644
--- a/packages/SystemUI/res/values-iw/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-iw/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"כבוי"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index 827acca..0fd8d58 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"デバイスはロックされています"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"顔のスキャン"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"送信"</string>
-    <string name="phone_label" msgid="5715229948920451352">"電話を起動"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"音声アシストを開く"</string>
-    <string name="camera_label" msgid="8253821920931143699">"カメラを起動"</string>
     <string name="cancel" msgid="1089011503403416730">"キャンセル"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"確認"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"再試行"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"センサー OFF: 有効"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"通知をすべて消去。"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"他 <xliff:g id="NUMBER">%s</xliff:g> 件"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">他 <xliff:g id="NUMBER_1">%s</xliff:g> 件の通知</item>
-      <item quantity="one">他 <xliff:g id="NUMBER_0">%s</xliff:g> 件の通知</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{グループ内にあと # 件の通知があります。}other{グループ内にあと # 件の通知があります。}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"画面は横向きにロックされています。"</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"画面は縦向きにロックされています。"</string>
     <string name="dessert_case" msgid="9104973640704357717">"デザートケース"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"カメラへのアクセス"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"マイクへのアクセス"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"使用可能"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"アクセスポイント"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"ON にしています…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"データセーバー ON"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d 台のデバイス</item>
-      <item quantity="one">%d 台のデバイス</item>
-    </plurals>
+    <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_camera_in_use" msgid="4820591564526512571">"カメラを使用中"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"モバイルデータ"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"もう一度タップしてください"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"開くには上にスワイプします"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"ロック解除アイコンを押して開きます"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"顔でロック解除しました。開くには上にスワイプします。"</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"顔でロック解除しました。アイコンを押すと開きます。"</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"顔でロック解除しました。押すと開きます。"</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"顔を認識しました。押すと開きます。"</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"セッションを続行しますか?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"最初から開始"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"続行"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"ゲストモード"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"ゲストモード使用中"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"新しいユーザーを追加するとゲストモードは終了し、現在のゲスト セッションからすべてのアプリとデータが削除されます。"</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"ユーザー数が上限に達しました"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">最大 <xliff:g id="COUNT">%d</xliff:g> 人のユーザーを追加できます。</item>
-      <item quantity="one">作成できるユーザーは 1 人のみです。</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{作成できるユーザーは 1 人のみです。}other{最大 # 人のユーザーを追加できます。}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"リマインダーの設定"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"元に戻す"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"スヌーズ: <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d時間</item>
-      <item quantity="one">%d時間</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d分</item>
-      <item quantity="one">%d分</item>
-    </plurals>
+    <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="keyboard_key_button_template" msgid="8005673627272051429">"<xliff:g id="NAME">%1$s</xliff:g> ボタン"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"アラート"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"バッテリー"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"スクリーンショット"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"一般メッセージ"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant Apps"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"セットアップ"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"ストレージ"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"ヒント"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant Apps"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"切り替え"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"デバイス コントロール"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"コントロールを追加するアプリの選択"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> 件のコントロールを追加しました。</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> 件のコントロールを追加しました。</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# 件のコントロールを追加しました。}other{# 件のコントロールを追加しました。}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"削除済み"</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>
@@ -846,7 +831,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="9099497976087485862">"新しいデバイスとのペア設定"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"タイルを追加"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"タイルを追加しない"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"ユーザーの選択"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> 個のアプリが実行中です</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> 個のアプリが実行中です</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi-Fi を利用できません"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"優先順位モード"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"アラームを設定しました"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"カメラは OFF です"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"マイクは OFF です"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"カメラとマイクが OFF です"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# 件の通知}other{# 件の通知}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>、<xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"ブロードキャスト"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"<xliff:g id="APP_NAME">%1$s</xliff:g> のブロードキャストを停止しますか?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> をブロードキャストしたり、出力を変更したりすると、現在のブロードキャストが停止します。"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> をブロードキャスト"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"出力を変更"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"不明"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ja/tiles_states_strings.xml b/packages/SystemUI/res/values-ja/tiles_states_strings.xml
index fd966da..c2a3321 100644
--- a/packages/SystemUI/res/values-ja/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ja/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"OFF"</item>
     <item msgid="460891964396502657">"ON"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"使用不可"</item>
+    <item msgid="8014986104355098744">"OFF"</item>
+    <item msgid="5966994759929723339">"ON"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml
index 9ad4aa5..7756071 100644
--- a/packages/SystemUI/res/values-ka/strings.xml
+++ b/packages/SystemUI/res/values-ka/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"მოწყობილობა ჩაკეტილია"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"მიმდინარეობს სახის სკანირება"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"გაგზავნა"</string>
-    <string name="phone_label" msgid="5715229948920451352">"ტელეფონის გახსნა"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"ხმოვანი დახმარების გახსნა"</string>
-    <string name="camera_label" msgid="8253821920931143699">"კამერის გახსნა"</string>
     <string name="cancel" msgid="1089011503403416730">"გაუქმება"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"დადასტურება"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"ხელახლა ცდა"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"სენსორების გამორთვა აქტიურია"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"ყველა შეტყობინების წაშლა"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">კიდევ <xliff:g id="NUMBER_1">%s</xliff:g> შეტყობინება ჯგუფში.</item>
-      <item quantity="one">კიდევ <xliff:g id="NUMBER_0">%s</xliff:g> შეტყობინება ჯგუფში.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{კიდევ # შეტყობინება.}other{კიდევ # შეტყობინება.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"ეკრანი დაბლოკილია თარაზულ ორიენტაციაში"</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"ეკრანი დაბლოკილია პორტრეტის ორიენტაციაში."</string>
     <string name="dessert_case" msgid="9104973640704357717">"სადესერტო ყუთი"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"კამერაზე წვდომა"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"მიკროფონზე წვდომა"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"ხელმისაწვდომი"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"წვდომის წერტილი"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"ირთვება…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"მონაცემთა დამზოგველი ჩართულია"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d მოწყობილობა</item>
-      <item quantity="one">%d მოწყობილობა</item>
-    </plurals>
+    <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_camera_in_use" msgid="4820591564526512571">"კამერა გამოიყენება"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"მობილური ინტერნეტი"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"შეეხეთ ხელახლა"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"გასახსნელად გადაფურცლეთ ზემოთ"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"გასახსნელად დააჭირეთ განბლოკვის ხატულას"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"განიბლოკა სახით. გასახსნელად აწიეთ ზემოთ"</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"განიბლოკა სახით. გასახსნელად დააჭირეთ განბლოკვის ხატულას."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"განიბლოკა სახით. დააჭირეთ გასახსნელად."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"ამოცნობილია სახით. დააჭირეთ გასახსნელად."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"გსურთ, თქვენი სესიის გაგრძელება?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"ხელახლა დაწყება"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"დიახ, გავაგრძელოთ"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"სტუმრის რეჟიმი"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"თქვენ სტუმრის რეჟიმში ხართ"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"თუ ახალ მომხმარებელს დაამატებთ, სტუმრის რეჟიმი დაიხურება და სტუმრის რეჟიმის მიმდინარე სესიიდან ყველა აპი და მონაცემი წაიშლება."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"მიღწეულია მომხმარებელთა ლიმიტი"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">შესაძლებელია <xliff:g id="COUNT">%d</xliff:g>-მდე მომხმარებლის დამატება.</item>
-      <item quantity="one">შესაძლებელია მხოლოდ ერთი მომხმარებლის შექმნა.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{შესაძლებელია მხოლოდ ერთი მომხმარებლის შექმნა.}other{შეგიძლიათ #-მდე მომხმარებლის დამატება.}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"შემახსენე"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"მოქმედების გაუქმება"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"ჩაჩუმებული იქნება <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d საათი</item>
-      <item quantity="one">%d საათი</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d წუთი</item>
-      <item quantity="one">%d წუთი</item>
-    </plurals>
+    <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="keyboard_key_button_template" msgid="8005673627272051429">"ღილაკი „<xliff:g id="NAME">%1$s</xliff:g>“"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"გაფრთხილებები"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"ბატარეა"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"ეკრანის ანაბეჭდები"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"ზოგადი შეტყობინებები"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"მყისიერი აპები"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"დაყენება"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"მეხსიერება"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"მინიშნებები"</string>
     <string name="instant_apps" msgid="8337185853050247304">"მყისიერი აპები"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"გადართვა"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"მოწყობილ. მართვის საშუალებები"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"აირჩიეთ აპი მართვის საშუალებების დასამატებლად"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other">დაემატა <xliff:g id="NUMBER_1">%s</xliff:g> მართვის საშუალება.</item>
-      <item quantity="one">დაემატა <xliff:g id="NUMBER_0">%s</xliff:g> მართვის საშუალება.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{დაემატა მართვის # საშუალება.}other{დაემატა მართვის # საშუალება.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"ამოიშალა"</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>
@@ -846,7 +831,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="9099497976087485862">"ახალი მოწყობილობის დაწყვილება"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"დაემატოს"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"არ დაემატოს"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"მომხმარებლის არჩევა"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other">აქტიურია <xliff:g id="COUNT_1">%s</xliff:g> აპი</item>
-      <item quantity="one">აქტიურია <xliff:g id="COUNT_0">%s</xliff:g> აპი</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi მიუწვდომელია"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"პრიორიტეტული რეჟიმი"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"მაღვიძარა დაყენებულია"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"კამერა გამორთულია"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"მიკროფონი გამორთულია"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"კამერა და მიკროფონი გამორთულია"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# შეტყობინება}other{# შეტყობინება}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"იწყებთ მაუწყებლობას"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"გსურთ <xliff:g id="APP_NAME">%1$s</xliff:g>-ის ტრანსლაციის შეჩერება?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"<xliff:g id="SWITCHAPP">%1$s</xliff:g>-ის ტრანსლაციის შემთხვევაში ან აუდიოს გამოსასვლელის შეცვლისას, მიმდინარე ტრანსლაცია შეჩერდება"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g>-ის ტრანსლაცია"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"აუდიოს გამოსასვლელის შეცვლა"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"უცნობი"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"დდდ, თთთ თ"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"სთ:წთ"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"სთ:წთ"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ka/tiles_states_strings.xml b/packages/SystemUI/res/values-ka/tiles_states_strings.xml
index 0c7d5af..c951874 100644
--- a/packages/SystemUI/res/values-ka/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ka/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"გამორთვა"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml
index 695921f..6e55cf2 100644
--- a/packages/SystemUI/res/values-kk/strings.xml
+++ b/packages/SystemUI/res/values-kk/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Құрылғы құлыпталды."</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Бетті сканерлеу"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Жіберу"</string>
-    <string name="phone_label" msgid="5715229948920451352">"телефонды ашу"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"ашық дауыс көмекшісі"</string>
-    <string name="camera_label" msgid="8253821920931143699">"камераны ашу"</string>
     <string name="cancel" msgid="1089011503403416730">"Бас тарту"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Растау"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Қайталап көріңіз"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Датчиктер өшірулі."</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Барлық хабарларды жойыңыз."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">Ішінде тағы <xliff:g id="NUMBER_1">%s</xliff:g> хабарландыру.</item>
-      <item quantity="one">Ішінде тағы <xliff:g id="NUMBER_0">%s</xliff:g> хабарландыру.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Ішінде тағы # хабарландыру бар.}other{Ішінде тағы # хабарландыру бар.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Экран ландшафт бағытында бекітілген."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Экран портрет бағытында бекітілген."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Десерт жағдайы"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"Камераны пайдалану"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Микрофонды пайдалану"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Қолжетімді"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Хотспот"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Қосылуда…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Трафикті үнемдеу режимі қосулы"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d құрылғы</item>
-      <item quantity="one">%d құрылғы</item>
-    </plurals>
+    <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_camera_in_use" msgid="4820591564526512571">"Камера қолданылып жатыр"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Мобильдік деректер"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Қайта түртіңіз."</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Ашу үшін жоғары қарай сырғытыңыз."</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Ашу үшін құлыпты ашу белгішесін басыңыз."</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Бетпен ашылды. Ашу үшін жоғары қарай сырғытыңыз."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Бет үлгісі арқылы ашылды. Ашу үшін құлыпты ашу белгішесін басыңыз."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Бетпен ашылды. Ашу үшін басыңыз."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Бет танылды. Ашу үшін басыңыз."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Сеансты жалғастыру керек пе?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Қайта бастау"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Иә, жалғастыру"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Қонақ режимі"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Сіз қонақ режиміндесіз"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Жаңа пайдаланушы қосылған кезде, қонақ режимі жабылады, ағымдағы қонақ сеансындағы барлық қолданба мен дерек жойылады."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Пайдаланушылар саны шегіне жетті"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> пайдаланушыға дейін енгізуге болады.</item>
-      <item quantity="one">Тек бір пайдаланушыны жасауға болады.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Тек бір пайдаланушыны жасауға болады.}other{Ең көбі # пайдаланушы қосуға болады.}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Есіме салу"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Қайтару"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> кейінге қалдырылды"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d сағат</item>
-      <item quantity="one">%d сағат</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d минут</item>
-      <item quantity="one">%d минут</item>
-    </plurals>
+    <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="keyboard_key_button_template" msgid="8005673627272051429">"<xliff:g id="NAME">%1$s</xliff:g> түймесі"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Ескертулер"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Батарея"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Скриншоттар"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Жалпы хабарлар"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant Apps"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Реттеу"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Жад"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Кеңестер"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant Apps"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"ауыстыру"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Құрылғыны басқару элементтері"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Басқару элементтері қосылатын қолданбаны таңдаңыз"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> басқару элементі енгізілді.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> басқару элементі енгізілді.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# басқару элементі қосылды.}other{# басқару элементі қосылды.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Өшірілді"</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>
@@ -846,7 +831,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="9099497976087485862">"Жаңа құрылғымен жұптау"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Бөлшек қосу"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Бөлшек қоспау"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Пайдаланушыны таңдау"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> қолданба қосылып тұр.</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> қолданба қосылып тұр.</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi қолжетімсіз"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Басымдық режимі"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Оятқыш орнатылды"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Камера өшірулі."</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Микрофон өшірулі."</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Камера мен микрофон өшірулі"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# хабарландыру}other{# хабарландыру}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Таратуда"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасын таратуды тоқтатасыз ба?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> қолданбасын таратсаңыз немесе аудио шығысын өзгертсеңіз, қазіргі тарату сеансы тоқтайды."</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> қолданбасын тарату"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Аудио шығысын өзгерту"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Белгісіз"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"d MMM EEEE"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-kk/tiles_states_strings.xml b/packages/SystemUI/res/values-kk/tiles_states_strings.xml
index 5466663..c312b49 100644
--- a/packages/SystemUI/res/values-kk/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-kk/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Өшірулі"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml
index 9870649..509d552 100644
--- a/packages/SystemUI/res/values-km/strings.xml
+++ b/packages/SystemUI/res/values-km/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"បានចាក់សោ​ឧបករណ៍"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"ការ​ស្កេន​មុខ"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"ផ្ញើ"</string>
-    <string name="phone_label" msgid="5715229948920451352">"បើក​ទូរស័ព្ទ"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"បើកជំនួយសំឡេង"</string>
-    <string name="camera_label" msgid="8253821920931143699">"បើក​ម៉ាស៊ីន​ថត"</string>
     <string name="cancel" msgid="1089011503403416730">"បោះបង់"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"បញ្ជាក់"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"ព្យាយាម​ម្ដង​ទៀត"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"ឧបករណ៍​ចាប់សញ្ញា​បានបិទ"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"សម្អាត​ការ​ជូន​ដំណឹង​ទាំងអស់។"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">មានការជូនដំណឹង <xliff:g id="NUMBER_1">%s</xliff:g> ទៀតនៅខាងក្នុង</item>
-      <item quantity="one">មានការជូនដំណឹង <xliff:g id="NUMBER_0">%s</xliff:g> ទៀតនៅខាងក្នុង</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{មានការជូនដំណឹង # ទៀតនៅខាងក្នុង។}other{មាន​ការ​ជូនដំណឹង # ទៀត​នៅ​ខាង​ក្នុង។}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"អេក្រង់​ជាប់​សោ​ក្នុង​ទិស​ផ្ដេក។"</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"បា​ន​ចាក់​សោ​អេក្រង់​​ក្នុង​ទិស​បញ្ឈរ។"</string>
     <string name="dessert_case" msgid="9104973640704357717">"ករណី Dessert"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"ការចូលប្រើ​កាមេរ៉ា"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"ការចូលប្រើ​មីក្រូហ្វូន"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"អាចចូលប្រើបាន"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"ហតស្ប៉ត"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"កំពុង​បើក..."</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"កម្មវិធីសន្សំសំចៃទិន្នន័យបានបើក"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">ឧបករណ៍ %d</item>
-      <item quantity="one">ឧបករណ៍ %d</item>
-    </plurals>
+    <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_camera_in_use" msgid="4820591564526512571">"កំពុងប្រើ​កាមេរ៉ា"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"ទិន្នន័យ​ទូរសព្ទចល័ត"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"ចុច​ម្ដងទៀត"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"អូសឡើងលើ​ដើម្បីបើក"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"ចុចរូបដោះសោ ដើម្បីបើក"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"បានដោះសោដោយប្រើមុខ។ អូសឡើងលើ​ដើម្បីបើក។"</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"បានដោះសោ​ដោយប្រើមុខ។ សូមចុចរូបដោះសោ ដើម្បីបើក។"</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"បានដោះសោដោយប្រើមុខ។ សូមចុច ដើម្បីបើក។"</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"បានស្គាល់មុខ។ សូមចុច ដើម្បីបើក។"</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"តើ​អ្នក​ចង់​បន្ត​វគ្គ​របស់​អ្នក​ទេ?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"ចាប់ផ្ដើមសាជាថ្មី"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"បាទ​/ចាស ​បន្ត"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"មុខងារ​ភ្ញៀវ"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"អ្នកស្ថិតនៅក្នុងមុខងារភ្ញៀវ"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"ការបញ្ចូលអ្នកប្រើប្រាស់ថ្មីនឹងធ្វើឱ្យចាកចេញពីមុខងារភ្ញៀវ និងលុបកម្មវិធីនិងទិន្នន័យទាំងអស់ចេញពីវគ្គភ្ញៀវបច្ចុប្បន្ន។"</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"​បាន​ឈាន​ដល់ចំនួន​កំណត់អ្នកប្រើប្រាស់"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">អ្នកអាចបញ្ចូល​អ្នក​ប្រើប្រាស់បាន​រហូតដល់ <xliff:g id="COUNT">%d</xliff:g> នាក់។</item>
-      <item quantity="one">អាច​បង្កើត​អ្នក​ប្រើប្រាស់​បាន​​តែម្នាក់ប៉ុណ្ណោះ។</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{អាច​បង្កើត​អ្នក​ប្រើប្រាស់​បាន​​តែម្នាក់ប៉ុណ្ណោះ។}other{អ្នកអាចបញ្ចូល​អ្នកប្រើប្រាស់​បាន​រហូតដល់ # នាក់។}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"រំលឹក​ខ្ញុំ"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"ត្រឡប់វិញ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"បាន​ផ្អាក​រយៈពេល <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d ម៉ោង</item>
-      <item quantity="one">%d ម៉ោង</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d នាទី</item>
-      <item quantity="one">%d នាទី</item>
-    </plurals>
+    <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="keyboard_key_button_template" msgid="8005673627272051429">"ប៊ូតុង <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"ការជូនដំណឹង"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"ថ្ម"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"រូបថត​អេក្រង់"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"សារ​ទូទៅ"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"កម្មវិធី​ប្រើ​ភ្លាមៗ"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"ការរៀបចំ"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"ទំហំផ្ទុក"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"ការ​សម្រួល"</string>
     <string name="instant_apps" msgid="8337185853050247304">"កម្មវិធី​ប្រើ​ភ្លាមៗ"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"បិទ/បើក"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"ផ្ទាំងគ្រប់គ្រងឧបករណ៍"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"ជ្រើសរើស​កម្មវិធីដែលត្រូវបញ្ចូល​ផ្ទាំងគ្រប់គ្រង"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other">បានបញ្ចូល​ការគ្រប់គ្រង <xliff:g id="NUMBER_1">%s</xliff:g>។</item>
-      <item quantity="one">បានបញ្ចូល​ការគ្រប់គ្រង <xliff:g id="NUMBER_0">%s</xliff:g>។</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{បានបញ្ចូល​ការគ្រប់គ្រង #។}other{បានបញ្ចូល​ការគ្រប់គ្រង #។}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"បានដកចេញ"</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>
@@ -846,7 +831,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="9099497976087485862">"ផ្គូផ្គង​ឧបករណ៍ថ្មី"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"បញ្ចូល​ប្រអប់"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"កុំ​បញ្ចូល​ប្រអប់"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"ជ្រើសរើសអ្នកប្រើប្រាស់"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other">កម្មវិធី <xliff:g id="COUNT_1">%s</xliff:g> កំពុងដំណើរការ</item>
-      <item quantity="one">កម្មវិធី <xliff:g id="COUNT_0">%s</xliff:g> កំពុងដំណើរការ</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi ត្រូវបានបិទ"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"មុខងារ​អាទិភាព"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"រូបកំណត់​ម៉ោងរោទ៍"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"កាមេរ៉ា​ត្រូវបានបិទ"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"មីក្រូហ្វូន​ត្រូវ​បាន​បិទ"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"កាមេរ៉ា និង​មីក្រូហ្វូន​ត្រូវបានបិទ"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{ការ​ជូន​ដំណឹង #}other{ការ​ជូនដំណឹង #}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"ការផ្សាយ"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"បញ្ឈប់ការផ្សាយ <xliff:g id="APP_NAME">%1$s</xliff:g> ឬ?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"ប្រសិនបើអ្នក​ផ្សាយ <xliff:g id="SWITCHAPP">%1$s</xliff:g> ឬប្ដូរឧបករណ៍បញ្ចេញសំឡេង ការផ្សាយបច្ចុប្បន្នរបស់អ្នកនឹង​បញ្ឈប់"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"ការផ្សាយ <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"ប្ដូរឧបករណ៍បញ្ចេញសំឡេង"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"មិនស្គាល់"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-km/tiles_states_strings.xml b/packages/SystemUI/res/values-km/tiles_states_strings.xml
index f4830f5..ec748cf 100644
--- a/packages/SystemUI/res/values-km/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-km/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"បិទ"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml
index ca543425..3b660f7 100644
--- a/packages/SystemUI/res/values-kn/strings.xml
+++ b/packages/SystemUI/res/values-kn/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"ಸಾಧನ ಲಾಕ್ ಆಗಿದೆ"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"ಮುಖವನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಲಾಗುತ್ತಿದೆ"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"ಕಳುಹಿಸಿ"</string>
-    <string name="phone_label" msgid="5715229948920451352">"ಫೋನ್ ತೆರೆಯಿರಿ"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"ಧ್ವನಿ ಸಹಾಯಕವನ್ನು ತೆರೆ"</string>
-    <string name="camera_label" msgid="8253821920931143699">"ಕ್ಯಾಮರಾ ತೆರೆಯಿರಿ"</string>
     <string name="cancel" msgid="1089011503403416730">"ರದ್ದುಮಾಡಿ"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"ದೃಢೀಕರಿಸಿ"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"ಸೆನ್ಸರ್‌ಗಳು ಆಫ್ ಆಗಿವೆ"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"ಎಲ್ಲಾ ಅಧಿಸೂಚನೆಗಳನ್ನು ತೆರವುಗೊಳಿಸು."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> ಕ್ಕಿಂತ ಹೆಚ್ಚು ಅಧಿಸೂಚನೆಗಳು ಒಳಗಿವೆ.</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> ಕ್ಕಿಂತ ಹೆಚ್ಚು ಅಧಿಸೂಚನೆಗಳು ಒಳಗಿವೆ.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{ಇನ್ನೂ # ಅಧಿಸೂಚನೆ ಒಳಗಿದೆ.}one{ಇನ್ನೂ # ಅಧಿಸೂಚನೆಗಳು ಒಳಗಿವೆ.}other{ಇನ್ನೂ # ಅಧಿಸೂಚನೆಗಳು ಒಳಗಿವೆ.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"ಪರದೆಯನ್ನು ಲ್ಯಾಂಡ್‌ಸ್ಕೇಪ್ ಓರಿಯಂಟೇಶನ್‍ನಲ್ಲಿ ಲಾಕ್ ಮಾಡಲಾಗಿದೆ."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"ಪರದೆಯನ್ನು ಪೋರ್ಟ್ರೇಟ್ ಓರಿಯಂಟೇಶನ್‍ನಲ್ಲಿ ಲಾಕ್ ಮಾಡಲಾಗಿದೆ."</string>
     <string name="dessert_case" msgid="9104973640704357717">"ಡೆಸರ್ಟ್ ಕೇಸ್"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"ಕ್ಯಾಮರಾ ಆ್ಯಕ್ಸೆಸ್"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"ಮೈಕ್ ಆ್ಯಕ್ಸೆಸ್"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"ಲಭ್ಯವಿದೆ"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"ಹಾಟ್‌ಸ್ಪಾಟ್"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"ಆನ್ ಮಾಡಲಾಗುತ್ತಿದೆ..."</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"ಡೇಟಾ ಸೇವರ್ ಆನ್ ಆಗಿದೆ"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">%d ಸಾಧನಗಳು</item>
-      <item quantity="other">%d ಸಾಧನಗಳು</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# ಸಾಧನ}one{# ಸಾಧನಗಳು}other{# ಸಾಧನಗಳು}}"</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>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"ಪುನಃ ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"ತೆರೆಯಲು ಮೇಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"ತೆರೆಯಲು ಅನ್‌ಲಾಕ್ ಐಕಾನ್ ಅನ್ನು ಒತ್ತಿ"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"ಮುಖವನ್ನು ಬಳಸಿ ಅನ್‌ಲಾಕ್ ಮಾಡಲಾಗಿದೆ. ತೆರೆಯಲು ಮೇಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"ಮುಖವನ್ನು ಬಳಸಿ ಅನ್‌ಲಾಕ್ ಮಾಡಲಾಗಿದೆ. ತೆರೆಯಲು ಅನ್‌ಲಾಕ್ ಐಕಾನ್ ಅನ್ನು ಒತ್ತಿ."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"ಮುಖವನ್ನು ಬಳಸಿ ಅನ್‌ಲಾಕ್ ಮಾಡಲಾಗಿದೆ. ತೆರೆಯಲು ಒತ್ತಿ."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"ಮುಖ ಗುರುತಿಸಲಾಗಿದೆ. ತೆರೆಯಲು ಒತ್ತಿ."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"ನಿಮ್ಮ ಸೆಷನ್‌ ಮುಂದುವರಿಸಲು ಇಚ್ಚಿಸುವಿರಾ?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"ಪ್ರಾರಂಭಿಸಿ"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"ಹೌದು, ಮುಂದುವರಿಸಿ"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"ಅತಿಥಿ ಮೋಡ್"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"ನೀವು ಅತಿಥಿ ಮೋಡ್‌ನಲ್ಲಿದ್ದೀರಿ"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"ಹೊಸ ಬಳಕೆದಾರರನ್ನು ಸೇರಿಸುವುದರಿಂದ ಅತಿಥಿ ಮೋಡ್‌ನಿಂದ ನಿರ್ಗಮಿಸುತ್ತದೆ ಮತ್ತು ಪ್ರಸ್ತುತ ಅತಿಥಿ ಸೆಶನ್‌ನಿಂದ ಎಲ್ಲಾ ಆ್ಯಪ್‌ಗಳು ಮತ್ತು ಡೇಟಾವನ್ನು ಅಳಿಸುತ್ತದೆ."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"ಬಳಕೆದಾರರ ಮಿತಿ ತಲುಪಿದೆ"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">ನೀವು <xliff:g id="COUNT">%d</xliff:g> ಬಳಕೆದಾರರವರೆಗೆ ಸೇರಿಸಬಹುದು.</item>
-      <item quantity="other">ನೀವು <xliff:g id="COUNT">%d</xliff:g> ಬಳಕೆದಾರರವರೆಗೆ ಸೇರಿಸಬಹುದು.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{ಒಬ್ಬ ಬಳಕೆದಾರರನ್ನು ಮಾತ್ರ ರಚಿಸಬಹುದು.}one{ನೀವು # ಬಳಕೆದಾರರವರೆಗೆ ಸೇರಿಸಬಹುದು.}other{ನೀವು # ಬಳಕೆದಾರರವರೆಗೆ ಸೇರಿಸಬಹುದು.}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"ನನಗೆ ಜ್ಞಾಪಿಸಿ"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"ರದ್ದುಗೊಳಿಸಿ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> ಗೆ ಸ್ನೂಜ್ ಮಾಡಲಾಗಿದೆ"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one">%d ಗಂಟೆಗಳು</item>
-      <item quantity="other">%d ಗಂಟೆಗಳು</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one">%d ನಿಮಿಷಗಳು</item>
-      <item quantity="other">%d ನಿಮಿಷಗಳು</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# ಗಂಟೆ}=2{# ಗಂಟೆಗಳು}one{# ಗಂಟೆಗಳು}other{# ಗಂಟೆಗಳು}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# ನಿಮಿಷ}one{# ನಿಮಿಷಗಳು}other{# ನಿಮಿಷಗಳು}}"</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>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"ಅಲರ್ಟ್‌ಗಳು"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"ಬ್ಯಾಟರಿ"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"ಸ್ಕ್ರೀನ್‌ಶಾಟ್‌ಗಳು"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"ಸಾಮಾನ್ಯ ಸಂದೇಶಗಳು"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant Apps"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"ಸೆಟಪ್"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"ಸಂಗ್ರಹಣೆ"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"ಸುಳಿವುಗಳು"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant Apps"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"ಟಾಗಲ್ ಮಾಡಿ"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"ಸಾಧನ ನಿಯಂತ್ರಣಗಳು"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"ನಿಯಂತ್ರಣಗಳನ್ನು ಸೇರಿಸಲು ಆ್ಯಪ್ ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> ನಿಯಂತ್ರಣಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ.</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> ನಿಯಂತ್ರಣಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# ನಿಯಂತ್ರಣವನ್ನು ಸೇರಿಸಲಾಗಿದೆ.}one{# ನಿಯಂತ್ರಣಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ.}other{# ನಿಯಂತ್ರಣಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"ತೆಗೆದುಹಾಕಲಾಗಿದೆ"</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>
@@ -846,7 +831,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="9099497976087485862">"ಹೊಸ ಸಾಧನವನ್ನು ಜೋಡಿಸಿ"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"ಟೈಲ್ ಅನ್ನು ಸೇರಿಸಿ"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"ಟೈಲ್ ಅನ್ನು ಸೇರಿಸಬೇಡಿ"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"ಬಳಕೆದಾರರನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> ಆ್ಯಪ್‌ಗಳು ಸಕ್ರಿಯವಾಗಿವೆ</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> ಆ್ಯಪ್‌ಗಳು ಸಕ್ರಿಯವಾಗಿವೆ</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"ವೈ-ಫೈ ಲಭ್ಯವಿಲ್ಲ"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"ಆದ್ಯತೆ ಮೋಡ್"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"ಅಲಾರಾಂ ಹೊಂದಿಸಲಾಗಿದೆ"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"ಕ್ಯಾಮರಾ ಆಫ್ ಆಗಿದೆ"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"ಮೈಕ್ ಆಫ್ ಆಗಿದೆ"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"ಕ್ಯಾಮರಾ ಮತ್ತು ಮೈಕ್ ಆಫ್ ಆಗಿದೆ"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# ಅಧಿಸೂಚನೆ}one{# ಅಧಿಸೂಚನೆಗಳು}other{# ಅಧಿಸೂಚನೆಗಳು}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"ಪ್ರಸಾರ ಮಾಡಲಾಗುತ್ತಿದೆ"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"<xliff:g id="APP_NAME">%1$s</xliff:g> ನ ಪ್ರಸಾರವನ್ನು ನಿಲ್ಲಿಸಬೇಕೆ?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"ನೀವು <xliff:g id="SWITCHAPP">%1$s</xliff:g> ಅನ್ನು ಪ್ರಸಾರ ಮಾಡಿದರೆ ಅಥವಾ ಔಟ್‌ಪುಟ್ ಅನ್ನು ಬದಲಾಯಿಸಿದರೆ, ನಿಮ್ಮ ಪ್ರಸ್ತುತ ಪ್ರಸಾರವು ಸ್ಥಗಿತಗೊಳ್ಳುತ್ತದೆ"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> ಅನ್ನು ಪ್ರಸಾರ ಮಾಡಿ"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"ಔಟ್‌ಪುಟ್ ಅನ್ನು ಬದಲಾಯಿಸಿ"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"ಅಪರಿಚಿತ"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-kn/tiles_states_strings.xml b/packages/SystemUI/res/values-kn/tiles_states_strings.xml
index 5cf2f5c..864a607 100644
--- a/packages/SystemUI/res/values-kn/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-kn/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"ಆಫ್ ಮಾಡಿ"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 35fc411..301cc06 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"기기 잠김"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"얼굴 스캔 중"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"보내기"</string>
-    <string name="phone_label" msgid="5715229948920451352">"휴대전화 열기"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"음성 지원 열기"</string>
-    <string name="camera_label" msgid="8253821920931143699">"카메라 열기"</string>
     <string name="cancel" msgid="1089011503403416730">"취소"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"확인"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"다시 시도하세요."</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"센서 끄기 활성화"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"모든 알림 지우기"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"<xliff:g id="NUMBER">%s</xliff:g>개 더보기"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g>개 알림 더보기</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g>개 알림 더보기</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{그룹에 알림이 #개 더 있습니다.}other{그룹에 알림이 #개 더 있습니다.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"화면이 가로 방향으로 잠겨 있습니다."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"화면이 세로 방향으로 잠겨 있습니다."</string>
     <string name="dessert_case" msgid="9104973640704357717">"디저트 케이스"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"카메라 액세스"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"마이크 액세스"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"사용 가능"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"핫스팟"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"켜는 중..."</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"데이터 절약 모드"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">기기 %d대</item>
-      <item quantity="one">기기 %d대</item>
-    </plurals>
+    <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_camera_in_use" msgid="4820591564526512571">"카메라 사용 중"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"모바일 데이터"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"다시 탭하세요."</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"위로 스와이프하여 열기"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"기기를 열려면 잠금 해제 아이콘을 누르세요."</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"얼굴 인식으로 잠금 해제되었습니다. 위로 스와이프하여 여세요."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"얼굴 인식으로 잠금 해제되었습니다. 기기를 열려면 잠금 해제 아이콘을 누르세요."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"얼굴 인식으로 잠금 해제되었습니다. 열려면 누르세요."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"얼굴이 인식되었습니다. 열려면 누르세요."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"세션을 계속 진행하시겠습니까?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"다시 시작"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"계속 진행"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"게스트 모드"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"게스트 모드 사용 중"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"새로운 사용자를 추가하면 게스트 모드가 종료되고 기존 게스트 세션의 모든 앱과 데이터가 삭제됩니다."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"사용자 제한 도달"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">사용자를 <xliff:g id="COUNT">%d</xliff:g>명까지 추가할 수 있습니다.</item>
-      <item quantity="one">사용자를 한 명만 만들 수 있습니다.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{사용자는 한 명만 등록할 수 있습니다.}other{사용자는 최대 #명을 등록할 수 있습니다.}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"알림 받기"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"실행취소"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> 동안 일시 중지됨"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d시간</item>
-      <item quantity="one">%d시간</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d분</item>
-      <item quantity="one">%d분</item>
-    </plurals>
+    <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="keyboard_key_button_template" msgid="8005673627272051429">"<xliff:g id="NAME">%1$s</xliff:g> 버튼"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"알림"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"배터리"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"스크린샷"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"일반 메시지"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"인스턴트 앱"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"설정"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"저장용량"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"힌트"</string>
     <string name="instant_apps" msgid="8337185853050247304">"인스턴트 앱"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"전환"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"기기 컨트롤"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"컨트롤을 추가할 앱을 선택하세요"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other">제어 기능 <xliff:g id="NUMBER_1">%s</xliff:g>개가 추가되었습니다.</item>
-      <item quantity="one">제어 기능 <xliff:g id="NUMBER_0">%s</xliff:g>개가 추가되었습니다.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{설정이 #개 추가되었습니다.}other{설정이 #개 추가되었습니다.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"삭제됨"</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>
@@ -846,7 +831,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="9099497976087485862">"새 기기와 페어링"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"타일 추가"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"타일 추가 안함"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"사용자 선택"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other">활성 상태인 앱 <xliff:g id="COUNT_1">%s</xliff:g>개</item>
-      <item quantity="one">활성 상태인 앱 <xliff:g id="COUNT_0">%s</xliff:g>개</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi를 이용할 수 없습니다."</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"우선순위 모드입니다."</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"알람이 설정되었습니다."</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"카메라 꺼짐"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"마이크 꺼짐"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"카메라 및 마이크가 사용 중지되었습니다."</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{알림 #개}other{알림 #개}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"방송 중"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"<xliff:g id="APP_NAME">%1$s</xliff:g> 방송을 중지하시겠습니까?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> 앱을 방송하거나 출력을 변경하면 기존 방송이 중단됩니다"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> 방송"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"출력 변경"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"알 수 없음"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"MMM d일 EEE"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ko/tiles_states_strings.xml b/packages/SystemUI/res/values-ko/tiles_states_strings.xml
index 3244ffa..c52c17c 100644
--- a/packages/SystemUI/res/values-ko/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ko/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"꺼짐"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml
index 5cc895d..b94e396 100644
--- a/packages/SystemUI/res/values-ky/strings.xml
+++ b/packages/SystemUI/res/values-ky/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Түзмөк кулпуланды"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Жүз скандалууда"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Жөнөтүү"</string>
-    <string name="phone_label" msgid="5715229948920451352">"телефонду ачуу"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"үн жардамчысысын ачуу"</string>
-    <string name="camera_label" msgid="8253821920931143699">"камераны ачуу"</string>
     <string name="cancel" msgid="1089011503403416730">"Жок"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Ырастоо"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Кайталоо"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"\"Сенсорлорду өчүрүүнү\" активдештирүү"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Бардык билдирмелерди өчүрүү."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">Дагы <xliff:g id="NUMBER_1">%s</xliff:g> эскертме бар.</item>
-      <item quantity="one">Дагы <xliff:g id="NUMBER_0">%s</xliff:g> эскертме бар.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Дагы # билдирме бар.}other{Дагы # билдирме бар.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Экран туурасынан турган бойдон бекитилген."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Экран тикесинен турган бойдон бекитилген."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Десерт себети"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"Камера"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Микрофон"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Жеткиликтүү"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Байланыш түйүнү"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Күйгүзүлүүдө…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Трафикти үнөмдөө күйүк"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d түзмөк</item>
-      <item quantity="one">%d түзмөк</item>
-    </plurals>
+    <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_camera_in_use" msgid="4820591564526512571">"Камера колдонулууда"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Мобилдик Интернет"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Кайра таптап коюңуз"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Ачуу үчүн өйдө сүрүңүз"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Кулпуну ачуу сүрөтчөсүн басыңыз"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Түзмөгүңүздү жүзүңүз менен ачтыңыз. Эми өйдө сүрүп коюңуз."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Кулпуну жүзүңүз менен ачтыңыз. Эми кулпуну ачуу сүрөтчөсүн басыңыз."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Кулпуну жүзүңүз менен ачтыңыз. Ачуу үчүн басыңыз."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Жүз таанылды. Ачуу үчүн басыңыз."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Сеансыңызды улантасызбы?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Кайра баштоо"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Ооба, уланта берели"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Конок режими"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Конок режиминдесиз"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Жаңы колдонуучуну кошсоңуз, конок режими жабылып, учурдагы конок сеансындагы бардык колдонмолор жана башка нерселер өчүп калат."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Дагы колдонуучу кошууга болбойт"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> колдонуучуга чейин кошууга болот.</item>
-      <item quantity="one">Бир колдонуучуну гана кошууга болот.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Бир колдонуучуну гана кошууга болот.}other{# чейин колдонуучу кошсоңуз болот.}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Эскертилсин"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Кайтаруу"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> тындырылды"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d саат</item>
-      <item quantity="one">%d саат</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d мүнөт</item>
-      <item quantity="one">%d мүнөт</item>
-    </plurals>
+    <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="keyboard_key_button_template" msgid="8005673627272051429">"<xliff:g id="NAME">%1$s</xliff:g> баскычы"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Башкы бет"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Эскертүүлөр"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Батарея"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Скриншоттор"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Жалпы билдирүүлөр"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Ыкчам ачылуучу колдонмолор"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Тууралоо"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Сактагыч"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Кеңештер"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Ыкчам ачылуучу колдонмолор"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"өчүрүү/күйгүзүү"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Түзмөктү башкаруу элементтери"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Башкаруу элементтери кошула турган колдонмону тандоо"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> башкаруу элементи кошулду.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> башкаруу элементи кошулду.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# көзөмөл кошулду.}other{# көзөмөл кошулду.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Өчүрүлдү"</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>
@@ -846,7 +831,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="9099497976087485862">"Жаңы түзмөк кошуу"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Ыкчам баскыч кошуу"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Ыкчам баскыч кошулбасын"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Колдонуучуну тандоо"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> колдонмо иштеп жатат</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> колдонмо иштеп жатат</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi жеткиликсиз"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Маанилүү сүйлөшүүлөр режими"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Ойготкуч коюлду"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Камера өчүк"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Микрофон өчүк"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Камера жана микрофон өчүк"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# билдирме}other{# билдирме}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Кеңири таратуу"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосунда кабарлоо токтотулсунбу?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Эгер <xliff:g id="SWITCHAPP">%1$s</xliff:g> колдонмосунда кабарласаңыз же аудионун чыгуусун өзгөртсөңүз, учурдагы кабарлоо токтотулат"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> колдонмосунда кабарлоо"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Аудионун чыгуусун өзгөртүү"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Белгисиз"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ky/tiles_states_strings.xml b/packages/SystemUI/res/values-ky/tiles_states_strings.xml
index 5518fcc..f872926 100644
--- a/packages/SystemUI/res/values-ky/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ky/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Өчүк"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml
index 87ed408..a8d4ffa 100644
--- a/packages/SystemUI/res/values-lo/strings.xml
+++ b/packages/SystemUI/res/values-lo/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"ອຸປະກອນຖືກລັອກໄວ້"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"ການສະແກນໜ້າ"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"ສົ່ງ"</string>
-    <string name="phone_label" msgid="5715229948920451352">"​ເປີດ​​ແປ້ນ​ໂທ​ລະ​ສັບ"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"ຊ່ວ​ເຫຼືອ​ເປີດ​ສຽງ"</string>
-    <string name="camera_label" msgid="8253821920931143699">"ເປີດ​ກ້ອງ"</string>
     <string name="cancel" msgid="1089011503403416730">"ຍົກເລີກ"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"ຢືນຢັນ"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"ລອງໃໝ່"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"ປິດການເຮັດວຽກຂອງເຊັນເຊີແລ້ວ"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"ລຶບການແຈ້ງເຕືອນທັງໝົດ."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">ມີ <xliff:g id="NUMBER_1">%s</xliff:g> ການແຈ້ງເຕືອນເພີ່ມເຕີມຢູ່ທາງໃນ.</item>
-      <item quantity="one">ມີ <xliff:g id="NUMBER_0">%s</xliff:g> ການແຈ້ງເຕືອນເພີ່ມເຕີມຢູ່ທາງໃນ.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{ມີ # ການແຈ້ງເຕືອນເພີ່ມເຕີມຢູ່ທາງໃນ.}other{ມີ # ການແຈ້ງເຕືອນເພີ່ມເຕີມຢູ່ທາງໃນ.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"ໜ້າຈໍຖືກລັອກໃນລວງນອນ."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"ໜ້າຈໍຖືກລັອກຢູ່ໃນໂໝດແນວຕັ້ງ."</string>
     <string name="dessert_case" msgid="9104973640704357717">"ກ່ອງຂອງຫວານ"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"ການເຂົ້າເຖິງກ້ອງຖ່າຍຮູບ"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"ການເຂົ້າເຖິງໄມ"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"ສາມາດໃຊ້ໄດ້"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"​ຮັອດ​ສະ​ປອດ"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"ກຳລັງເປີດ..."</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"ເປີດຕົວປະຢັດອິນເຕີເນັດຢູ່"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d ອຸປະກອນ</item>
-      <item quantity="one">%d ອຸປະກອນ</item>
-    </plurals>
+    <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_camera_in_use" msgid="4820591564526512571">"ມີການໃຊ້ກ້ອງຖ່າຍຮູບຢູ່"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"ອິນເຕີເນັດມືຖື"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"ແຕະອີກເທື່ອໜຶ່ງ"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"ປັດຂຶ້ນເພື່ອເປີດ"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"ກົດໄອຄອນປົດລັອກເພື່ອເປີດ"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"ປົດລັອກດ້ວຍໃບໜ້າແລ້ວ. ປັດຂຶ້ນເພື່ອເປີດ."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"ປົດລັອກດ້ວຍໜ້າແລ້ວ. ກົດໄອຄອນປົດລັອກເພື່ອເປີດ."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"ປົດລັອກດ້ວຍໜ້າແລ້ວ. ກົດເພື່ອເປີດ."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"ຈຳແນກໜ້າໄດ້ແລ້ວ. ກົດເພື່ອເປີດ."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"ທ່ານ​ຕ້ອງ​ການ​ສືບ​ຕໍ່​ເຊດ​ຊັນ​ຂອງ​ທ່ານບໍ່?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"ເລີ່ມຕົ້ນໃຫມ່"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"​ຕົກ​ລົງ, ດຳ​ເນີນ​ການ​ຕໍ່"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"ໂໝດແຂກ"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"ທ່ານກຳລັງຢູ່ໃນໂໝດແຂກ"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"ການເພີ່ມຜູ້ໃຊ້ໃໝ່ຈະອອກຈາກໂໝດແຂກ ແລະ ລຶບແອັບ ແລະ ຂໍ້ມູນທັງໝົດອອກຈາກເຊດຊັນແຂກປັດຈຸບັນ."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"ຮອດຂີດຈຳກັດຜູ້ໃຊ້ແລ້ວ"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">ທ່ານສາມາດເພີ່ມໄດ້ສູງສຸດ <xliff:g id="COUNT">%d</xliff:g> ຄົນ.</item>
-      <item quantity="one">ສາມາດສ້າງໄດ້ໜຶ່ງຜູ້ໃຊ້ເທົ່ານັ້ນ.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{ສາມາດສ້າງຜູ້ໃຊ້ໄດ້ຄົນດຽວເທົ່ານັ້ນ.}other{ທ່ານສາມາດເພີ່ມຜູ້ໃຊ້ໄດ້ສູງສຸດ # ຄົນ.}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"ແຈ້ງເຕືອນຂ້ອຍ"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"ຍົກເລີກ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"ເລື່ອນໄປ <xliff:g id="TIME_AMOUNT">%1$s</xliff:g> ນາທີແລ້ວ"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d ຊົ່ວໂມງ</item>
-      <item quantity="one">%d ຊົ່ວໂມງ</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d ນາທີ</item>
-      <item quantity="one">%d ນາທີ</item>
-    </plurals>
+    <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="keyboard_key_button_template" msgid="8005673627272051429">"ປຸ່ມ <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"ການແຈ້ງເຕືອນ"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"ແບັດເຕີຣີ"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"ຮູບຖ່າຍໜ້າຈໍ"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"ຂໍ້ຄວາມທົ່ວໄປ"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"ອິນສະແຕນແອັບ"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"ຕັ້ງຄ່າ"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"ບ່ອນເກັບຂໍ້ມູນ"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"ຄຳໃບ້"</string>
     <string name="instant_apps" msgid="8337185853050247304">"ອິນສະແຕນແອັບ"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"ສະຫຼັບ"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"ການຄວບຄຸມອຸປະກອນ"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"ເລືອກແອັບເພື່ອເພີ່ມການຄວບຄຸມ"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other">ເພີ່ມ <xliff:g id="NUMBER_1">%s</xliff:g> ການຄວບຄຸມແລ້ວ.</item>
-      <item quantity="one">ເພີ່ມ <xliff:g id="NUMBER_0">%s</xliff:g> ການຄວບຄຸມແລ້ວ.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{ເພີ່ມ # ການຄວບຄຸມແລ້ວ.}other{ເພີ່ມ # ການຄວບຄຸມແລ້ວ.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"ລຶບອອກແລ້ວ"</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>
@@ -846,7 +831,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="9099497976087485862">"ຈັບຄູ່ອຸປະກອນໃໝ່"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"ເພີ່ມແຜ່ນ"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"ຢ່າເພີ່ມແຜ່ນ"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"ເລືອກຜູ້ໃຊ້"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> ແອັບນຳໃຊ້ຢູ່</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> ແອັບນຳໃຊ້ຢູ່</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"ບໍ່ສາມາດໃຊ້ Wi‑Fi ໄດ້"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"ໂໝດຄວາມສຳຄັນ"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"ຕັ້ງໂມງປຸກແລ້ວ"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"ກ້ອງປິດຢູ່"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"ໄມປິດຢູ່"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"ປິດກ້ອງຖ່າຍຮູບ ແລະ ໄມແລ້ວ"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# ການແຈ້ງເຕືອນ}other{# ການແຈ້ງເຕືອນ}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"ກຳລັງອອກອາກາດ"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"ຢຸດການອອກອາກາດ <xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"ຫາກທ່ານອອກອາກາດ <xliff:g id="SWITCHAPP">%1$s</xliff:g> ຫຼື ປ່ຽນເອົ້າພຸດ, ການອອກອາກາດປັດຈຸບັນຂອງທ່ານຈະຢຸດ"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"ອອກອາກາດ <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"ປ່ຽນເອົ້າພຸດ"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"ບໍ່ຮູ້ຈັກ"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"ຊມ:ນທ"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"ຊມ:ນທ"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-lo/tiles_states_strings.xml b/packages/SystemUI/res/values-lo/tiles_states_strings.xml
index c6b7e6c..6ae37e4 100644
--- a/packages/SystemUI/res/values-lo/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-lo/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"ປິດ"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index c9aa65c..dd2162d 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Įrenginys užrakintas"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Nuskaitomas veidas"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Siųsti"</string>
-    <string name="phone_label" msgid="5715229948920451352">"atidaryti telefoną"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"atidaryti „Voice Assist“"</string>
-    <string name="camera_label" msgid="8253821920931143699">"atidaryti fotoaparatą"</string>
     <string name="cancel" msgid="1089011503403416730">"Atšaukti"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Patvirtinkite"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Bandyti dar kartą"</string>
@@ -205,12 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Parinktis „Jutikliai išjungti“ aktyvi"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Išvalyti visus pranešimus."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"Dar <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one">Grupėje yra dar <xliff:g id="NUMBER_1">%s</xliff:g> pranešimas.</item>
-      <item quantity="few">Grupėje yra dar <xliff:g id="NUMBER_1">%s</xliff:g> pranešimai.</item>
-      <item quantity="many">Grupėje yra dar <xliff:g id="NUMBER_1">%s</xliff:g> pranešimo.</item>
-      <item quantity="other">Grupėje yra dar <xliff:g id="NUMBER_1">%s</xliff:g> pranešimų.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Grupėje yra dar # pranešimas.}one{Grupėje yra dar # pranešimas.}few{Grupėje yra dar # pranešimai.}many{Grupėje yra dar # pranešimo.}other{Grupėje yra dar # pranešimų.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Užrakintas ekranas yra horizontalios orientacijos."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Užrakintas ekranas yra vertikalios orientacijos."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Desertų dėklas"</string>
@@ -228,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automatinis pasukimas"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automatiškai sukti ekraną"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Vietovė"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Ekrano užsklanda"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Prieiga prie fotoaparato"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Prieiga prie mikrofono"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Pasiekiama"</string>
@@ -257,12 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Viešosios interneto prieigos taškas"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Įjungiama…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Duom. taup. pr. įj."</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">%d įrenginys</item>
-      <item quantity="few">%d įrenginiai</item>
-      <item quantity="many">%d įrenginio</item>
-      <item quantity="other">%d įrenginių</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# įrenginys}one{# įrenginys}few{# įrenginiai}many{# įrenginio}other{# įrenginių}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Žibintuvėlis"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Fotoaparatas naudojamas"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Mobiliojo ryšio duomenys"</string>
@@ -319,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Palieskite dar kartą"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Perbraukite aukštyn, kad atidarytumėte"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Paspauskite atrakinimo piktogramą, kad atidarytumėte"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Atrakinta pagal veidą. Atidarykite perbraukę aukštyn."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Atrakinta pagal veidą. Pasp. atr. pikt., kad atidarytumėte."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Atrakinta pagal veidą. Paspauskite, kad atidarytumėte."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Veidas atpažintas. Paspauskite, kad atidarytumėte."</string>
@@ -355,13 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Ar norite tęsti sesiją?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Pradėti iš naujo"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Taip, tęsti"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Svečio režimas"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Naudojatės svečio režimu"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Pridėjus naują naudotoją, bus išeita iš svečio režimo ir iš dabartinės svečio sesijos bus ištrintos visos programos ir duomenys."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Pasiekta naudotojų riba"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">Galite pridėti iki <xliff:g id="COUNT">%d</xliff:g> naudotojo.</item>
-      <item quantity="few">Galite pridėti iki <xliff:g id="COUNT">%d</xliff:g> naudotojų.</item>
-      <item quantity="many">Galite pridėti iki <xliff:g id="COUNT">%d</xliff:g> naudotojo.</item>
-      <item quantity="other">Galite pridėti iki <xliff:g id="COUNT">%d</xliff:g> naudotojų.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Galima sukurti tik vieną naudotoją.}one{Galite pridėti iki # naudotojo.}few{Galite pridėti iki # naudotojų.}many{Galite pridėti iki # naudotojo.}other{Galite pridėti iki # naudotojų.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Pašalinti naudotoją?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Bus ištrinti visi šio naudotojo duomenys ir programos."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Pašalinti"</string>
@@ -547,18 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Priminti"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Anuliuoti"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Nustatyta snausti <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one">%d valanda</item>
-      <item quantity="few">%d valandos</item>
-      <item quantity="many">%d valandos</item>
-      <item quantity="other">%d valandų</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one">%d minutė</item>
-      <item quantity="few">%d minutės</item>
-      <item quantity="many">%d minutės</item>
-      <item quantity="other">%d minučių</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# valanda}=2{# valandos}one{# valanda}few{# valandos}many{# valandos}other{# valandų}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minutė}one{# minutė}few{# minutės}many{# minutės}other{# minučių}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Akum. taus. pr."</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Mygtukas <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Pagrindinis"</string>
@@ -707,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Įspėjimai"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Akumuliatorius"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Ekrano kopijos"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Bendrieji pranešimai"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Akimirksniu įkeliamos programos"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Sąranka"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Saugykla"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Užuominos"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Akimirksniu įkeliamos programos"</string>
@@ -781,12 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"perjungti"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Įrenginio valdikliai"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Pasirinkite programą, kad pridėtumėte valdiklių"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one">Pridėtas <xliff:g id="NUMBER_1">%s</xliff:g> valdiklis.</item>
-      <item quantity="few">Pridėti <xliff:g id="NUMBER_1">%s</xliff:g> valdikliai.</item>
-      <item quantity="many">Pridėta <xliff:g id="NUMBER_1">%s</xliff:g> valdiklio.</item>
-      <item quantity="other">Pridėta <xliff:g id="NUMBER_1">%s</xliff:g> valdiklių.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{Pridėtas # valdiklis.}one{Pridėtas # valdiklis.}few{Pridėti # valdikliai.}many{Pridėta # valdiklio.}other{Pridėta # valdiklių.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Pašalinta"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Įtraukta į mėgstamiausius"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Įtraukta į mėgstamiausius, padėtis: <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -858,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"Pasirinkta įrenginių: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(atjungta)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Nepavyko perjungti. Bandykite vėl palietę."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Naujo įrenginio susiejimas"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Įrenginio prijungimas"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Jei norite perduoti šį seansą, atidarykite programą."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Nežinoma programa"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Sustabdyti perdavimą"</string>
@@ -943,12 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Pridėti išklotinės elementą"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Nepridėti išklotinės elemento"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Naudotojo pasirinkimas"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> programa yra aktyvi</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%s</xliff:g> programos yra aktyvios</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%s</xliff:g> programos yra aktyvi</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> programų yra aktyvios</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# aktyvi programa}one{# aktyvi programa}few{# aktyvios programos}many{# aktyvios programos}other{# aktyvių programų}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nauja informacija"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktyvios programos"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Šios programos yra aktyvios ir vykdomos, net jei jų nenaudojate. Tai atlikus patobulinamos jų funkcijos, bet taip pat gali būti paveiktas ir akumuliatoriaus veikimo laikas."</string>
@@ -975,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"„Wi‑Fi“ ryšys nepasiekiamas"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Prioriteto režimas"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Signalas nustatytas"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Fotoaparatas išjungtas"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mikrofonas išjungtas"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Vaizdo kamera ir mikrofonas išjungti"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# pranešimas}one{# pranešimas}few{# pranešimai}many{# pranešimo}other{# pranešimų}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Transliavimas"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Sustabdyti „<xliff:g id="APP_NAME">%1$s</xliff:g>“ transliaciją?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Jei transliuosite „<xliff:g id="SWITCHAPP">%1$s</xliff:g>“ arba pakeisite išvestį, dabartinė transliacija bus sustabdyta"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Transliuoti „<xliff:g id="SWITCHAPP">%1$s</xliff:g>“"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Keisti išvestį"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Nežinoma"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-lt/tiles_states_strings.xml b/packages/SystemUI/res/values-lt/tiles_states_strings.xml
index 3e289e1..03d98c4 100644
--- a/packages/SystemUI/res/values-lt/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-lt/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Išjungta"</item>
     <item msgid="460891964396502657">"Įjungta"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Nepasiekiama"</item>
+    <item msgid="8014986104355098744">"Išjungta"</item>
+    <item msgid="5966994759929723339">"Įjungta"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 7c1e658..8b2759c 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Ierīce ir bloķēta"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Sejas skenēšana"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Sūtīt"</string>
-    <string name="phone_label" msgid="5715229948920451352">"atvērt tālruni"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"atvērt balss palīgu"</string>
-    <string name="camera_label" msgid="8253821920931143699">"atvērt kameru"</string>
     <string name="cancel" msgid="1089011503403416730">"Atcelt"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Apstiprināt"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Mēģināt vēlreiz"</string>
@@ -205,11 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Aktivizēts iestatījums “Sensori izslēgti”"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Notīrīt visus paziņojumus"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"vēl <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="zero">Vēl <xliff:g id="NUMBER_1">%s</xliff:g> paziņojumi grupā.</item>
-      <item quantity="one">Vēl <xliff:g id="NUMBER_1">%s</xliff:g> paziņojums grupā.</item>
-      <item quantity="other">Vēl <xliff:g id="NUMBER_1">%s</xliff:g> paziņojumi grupā.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Vēl # paziņojums grupā.}zero{Vēl # paziņojumi grupā.}one{Vēl # paziņojums grupā.}other{Vēl # paziņojumi grupā.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Ekrāns tagad ir bloķēts ainavas orientācijā."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Ekrāns tagad ir bloķēts portreta orientācijā."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Saldo ēdienu stends"</string>
@@ -227,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automātiska pagriešana"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automātiska ekrāna pagriešana"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Atrašanās vieta"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Ekrānsaudzētājs"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Kamera"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Mikrofons"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Piekļuve atļauta"</string>
@@ -256,11 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Tīklājs"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Notiek ieslēgšana…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Datu liet. s. iesl."</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="zero">%d ierīču</item>
-      <item quantity="one">%d ierīce</item>
-      <item quantity="other">%d ierīces</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# ierīce}zero{# ierīču}one{# ierīce}other{# ierīces}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Lukturītis"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Kamera tiek lietota"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Mobilie dati"</string>
@@ -317,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Pieskarieties vēlreiz"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Velciet augšup, lai atvērtu"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Lai atvērtu, nospiediet atbloķēšanas ikonu"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Ierīce atbloķēta ar seju. Velciet augšup, lai atvērtu."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Atbloķēta ar seju. Atvērt: nospiediet atbloķēšanas ikonu."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Ierīce atbloķēta ar seju. Nospiediet, lai atvērtu."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Seja atpazīta. Nospiediet, lai atvērtu."</string>
@@ -353,12 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Vai vēlaties turpināt savu sesiju?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Sākt no sākuma"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Jā, turpināt"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Viesa režīms"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Jūs izmantojat viesa režīmu"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Ja pievienosiet jaunu lietotāju, viesa režīms tiks aizvērts un visas pašreizējās viesa sesijas lietotnes un dati tiks dzēsti."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Sasniegts lietotāju ierobežojums"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="zero">Varat pievienot ne vairāk kā <xliff:g id="COUNT">%d</xliff:g> lietotājus.</item>
-      <item quantity="one">Varat pievienot ne vairāk kā <xliff:g id="COUNT">%d</xliff:g> lietotāju.</item>
-      <item quantity="other">Varat pievienot ne vairāk kā <xliff:g id="COUNT">%d</xliff:g> lietotājus.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Var izveidot tikai vienu lietotāju.}zero{Varat pievienot līdz # lietotājiem.}one{Varat pievienot līdz # lietotājam.}other{Varat pievienot līdz # lietotājiem.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Vai noņemt lietotāju?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Tiks dzēstas visas šī lietotāja lietotnes un dati."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Noņemt"</string>
@@ -544,16 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Atgādināt"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Atsaukt"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Atlikts: <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="zero">%d stundas</item>
-      <item quantity="one">%d stunda</item>
-      <item quantity="other">%d stundas</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="zero">%d minūtes</item>
-      <item quantity="one">%d minūte</item>
-      <item quantity="other">%d minūtes</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# stunda}=2{# stundas}zero{# stundu}one{# stunda}other{# stundas}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minūte}zero{# minūšu}one{# minūte}other{# minūtes}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Akumulatora enerģijas taupīšanas režīms"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Poga <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Sākumvietas taustiņš"</string>
@@ -702,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Brīdinājumi"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Akumulators"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Ekrānuzņēmumi"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Vispārīgi ziņojumi"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Tūlītējās lietotnes"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Iestatīšana"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Krātuve"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Padomi"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Tūlītējās lietotnes"</string>
@@ -776,11 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"pārslēgt"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Ierīču vadīklas"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Izvēlieties lietotni, lai pievienotu vadīklas"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="zero">Pievienotas <xliff:g id="NUMBER_1">%s</xliff:g> vadīklas.</item>
-      <item quantity="one">Pievienota <xliff:g id="NUMBER_1">%s</xliff:g> vadīkla.</item>
-      <item quantity="other">Pievienotas <xliff:g id="NUMBER_1">%s</xliff:g> vadīklas.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{Pievienota # vadīkla.}zero{Pievienotas # vadīklas.}one{Pievienota # vadīkla.}other{Pievienotas # vadīklas.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Noņemta"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Pievienota izlasei"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Pievienota izlasei, <xliff:g id="NUMBER">%d</xliff:g>. pozīcija"</string>
@@ -852,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"Atlasītas vairākas ierīces (kopā <xliff:g id="COUNT">%1$d</xliff:g>)"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(savienojums pārtraukts)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Nevar pārslēgt. Pieskarieties, lai mēģinātu vēlreiz."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Savienošana pārī ar jaunu ierīci"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Savienošana ar ierīci"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Lai apraidītu šo sesiju, lūdzu, atveriet lietotni."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Nezināma lietotne"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Apturēt apraidi"</string>
@@ -937,11 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Pievienot elementu"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Nepievienot elementu"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Lietotāja atlase"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="zero"><xliff:g id="COUNT_1">%s</xliff:g> lietotnes ir aktīvas</item>
-      <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> lietotne ir aktīva</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> lietotnes ir aktīvas</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# lietotne ir aktīva}zero{# lietotnes ir aktīvas}one{# lietotne ir aktīva}other{# lietotnes ir aktīvas}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Jauna informācija"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktīvās lietotnes"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Šīs lietotnes ir aktīvas un darbojas, pat ja jūs tās neizmantojat. Tas uzlabo lietotņu funkcionalitāti, taču var arī ietekmēt akumulatora darbības ilgumu."</string>
@@ -968,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi nav pieejams"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Prioritātes režīms"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Signāls ir iestatīts"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Kamera ir izslēgta"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mikrofons ir izslēgts"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Kamera un mikrofons ir izslēgti"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# paziņojums}zero{# paziņojumu}one{# paziņojums}other{# paziņojumi}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Notiek apraidīšana"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Vai apturēt lietotnes <xliff:g id="APP_NAME">%1$s</xliff:g> apraidīšanu?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Ja sāksiet lietotnes <xliff:g id="SWITCHAPP">%1$s</xliff:g> apraidīšanu vai mainīsiet izvadi, pašreizējā apraide tiks apturēta"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Lietotnes <xliff:g id="SWITCHAPP">%1$s</xliff:g> apraide"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Izvades maiņa"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Nezināms"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, d. MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"hh:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-lv/tiles_states_strings.xml b/packages/SystemUI/res/values-lv/tiles_states_strings.xml
index eb210c2..6e9264d 100644
--- a/packages/SystemUI/res/values-lv/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-lv/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Izslēgts"</item>
     <item msgid="460891964396502657">"Ieslēgts"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Nav pieejams"</item>
+    <item msgid="8014986104355098744">"Izslēgts"</item>
+    <item msgid="5966994759929723339">"Ieslēgts"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml
index 8624604..56c98a8 100644
--- a/packages/SystemUI/res/values-mk/strings.xml
+++ b/packages/SystemUI/res/values-mk/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Уредот е заклучен"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Скенирање лице"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Испрати"</string>
-    <string name="phone_label" msgid="5715229948920451352">"отвори телефон"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"отвори гласовна помош"</string>
-    <string name="camera_label" msgid="8253821920931143699">"отвори камера"</string>
     <string name="cancel" msgid="1089011503403416730">"Откажи"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Потврди"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Обиди се повторно"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Исклучувањето на сензорите е активно"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Избриши ги сите известувања."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one">Уште <xliff:g id="NUMBER_1">%s</xliff:g> известување внатре.</item>
-      <item quantity="other">Уште <xliff:g id="NUMBER_1">%s</xliff:g> известувања внатре.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Уште # известување внатре.}one{Уште # известување внатре.}other{Уште # известувања внатре.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Екранот е заклучен во ориентација на пејзаж."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Екранот е заклучен во ориентација на портрет."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Dessert Case"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"Пристап до камерата"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Пристап до микрофонот"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Дозволен"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Точка на пристап"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Се вклучува…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Вклучен штедач"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">%d уред</item>
-      <item quantity="other">%d уреди</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# уред}one{# уред}other{# уреда}}"</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>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Допрете повторно"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Повлечете за да отворите"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Притиснете ја иконата за отклучување за да отворите"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Отклучено со лице. Повлечете за да отворите."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Отклучено со лик. Притиснете ја иконата за отклучување за да отворите."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Отклучено со лик. Притиснете за да отворите."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Лицето е препознаено. Притиснете за да отворите."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Дали сакате да продолжите со сесијата?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Почни одново"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Да, продолжи"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Режим на гостин"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Користите режим на гостин"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Ако додадете нов корисник, ќе излезете од режимот на гостин и ќе ги избришете сите апликации и податоци од тековната гостинска сесија."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Достигнато ограничување на корисник"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">Може да додадете најмногу <xliff:g id="COUNT">%d</xliff:g> корисник.</item>
-      <item quantity="other">Може да додадете најмногу <xliff:g id="COUNT">%d</xliff:g> корисници.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{]Може да се создаде само еден корисник.}one{Може да додадете најмногу # корисник}other{Може да додадете најмногу # корисници}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Потсети ме"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Врати"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Одложено за <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one">%d час</item>
-      <item quantity="other">%d часа</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one">%d минута</item>
-      <item quantity="other">%d минути</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# час}=2{# часа}one{# час}other{# часа}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# минута}one{# минута}other{# минути}}"</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>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Известувања"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Батерија"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Слики од екранот"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Општи пораки"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Инстант апликации"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Поставување"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Капацитет"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Совети"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Инстант апликации"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"вклучување/исклучување"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Контроли за уредите"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Изберете апликација за да додадете контроли"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one">Додадена е <xliff:g id="NUMBER_1">%s</xliff:g> контрола.</item>
-      <item quantity="other">Додадени се <xliff:g id="NUMBER_1">%s</xliff:g> контроли.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{Додадена е # контрола.}one{Додадени се # контрола.}other{Додадени се # контроли.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Отстранета"</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>
@@ -846,7 +831,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="9099497976087485862">"Спарете нов уред"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Додајте плочка"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Не додавајте плочка"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Изберете корисник"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one">Активни се <xliff:g id="COUNT_1">%s</xliff:g> апликација</item>
-      <item quantity="other">Активни се <xliff:g id="COUNT_1">%s</xliff:g> апликации</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi е недостапна"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Приоритетен режим"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Алармот е наместен"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Камерата е исклучена"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Микрофонот е исклучен"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Камерата и микрофонот се исклучени"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# известување}one{# известување}other{# известувања}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Емитување"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Да се прекине емитувањето на <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Ако емитувате на <xliff:g id="SWITCHAPP">%1$s</xliff:g> или го промените излезот, тековното емитување ќе запре"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Емитување на <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Променете излез"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Непознато"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-mk/tiles_states_strings.xml b/packages/SystemUI/res/values-mk/tiles_states_strings.xml
index 78be6dd..96c8a49 100644
--- a/packages/SystemUI/res/values-mk/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-mk/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Исклучен"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml
index 30aab4e..6d5109b 100644
--- a/packages/SystemUI/res/values-ml/strings.xml
+++ b/packages/SystemUI/res/values-ml/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"ഉപകരണം ലോക്ക് ചെയ്തു"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"മുഖം സ്കാൻ ചെയ്യുന്നു"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"അയയ്ക്കുക"</string>
-    <string name="phone_label" msgid="5715229948920451352">"ഫോൺ തുറക്കുക"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"വോയ്‌സ് അസിസ്റ്റ് തുറക്കുക"</string>
-    <string name="camera_label" msgid="8253821920931143699">"ക്യാമറ തുറക്കുക"</string>
     <string name="cancel" msgid="1089011503403416730">"റദ്ദാക്കുക"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"സ്ഥിരീകരിക്കുക"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"വീണ്ടും ശ്രമിക്കുക"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"സെൻസറുകൾ ഓഫ് സജീവമാണ്"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"എല്ലാ വിവരങ്ങളും മായ്‌ക്കുക."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">ഉള്ളിൽ <xliff:g id="NUMBER_1">%s</xliff:g> അറിയിപ്പുകൾ കൂടിയുണ്ട്.</item>
-      <item quantity="one">ഉള്ളിൽ <xliff:g id="NUMBER_0">%s</xliff:g> അറിയിപ്പ് കൂടിയുണ്ട്.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{# അറിയിപ്പ് കൂടിയുണ്ട്.}other{# അറിയിപ്പുകൾ കൂടിയുണ്ട്.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"സ്‌ക്രീൻ ലാൻഡ്‌സ്‌കേപ്പ് ഓറിയന്റേഷനിൽ ലോക്കുചെയ്‌തു."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"സ്‌ക്രീൻ പോർട്രെയ്‌റ്റ് ഓറിയന്റേഷനിൽ ലോക്കുചെയ്‌തു."</string>
     <string name="dessert_case" msgid="9104973640704357717">"ഡെസേർട്ട് കെയ്സ്"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"ക്യാമറ ആക്‌സസ്"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"മൈക്ക് ആക്‌സസ്"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"ലഭ്യമാണ്"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"ഹോട്ട്‌സ്‌പോട്ട്"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"ഓണാക്കുന്നു…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"ഡാറ്റ സേവർ ഓണാണ്"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d ഉപകരണങ്ങൾ</item>
-      <item quantity="one">%d ഉപകരണം</item>
-    </plurals>
+    <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_camera_in_use" msgid="4820591564526512571">"ക്യാമറ ഉപയോഗത്തിലാണ്"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"മൊബൈൽ ഡാറ്റ"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"വീണ്ടും ടാപ്പ് ചെയ്യുക"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"തുറക്കാൻ മുകളിലോട്ട് സ്വൈപ്പ് ചെയ്യുക"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"തുറക്കാൻ അൺലോക്ക് ഐക്കൺ അമർത്തുക"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"മുഖം വഴി അൺലോക്കുചെയ്തു. മുകളിലേക്ക് സ്വൈപ്പുചെയ്ത് തുറക്കൂ."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"മുഖം ഉപയോഗിച്ച് അൺലോക്ക് ചെയ്‌തു. തുറക്കാൻ അൺലോക്ക് ഐക്കൺ അമർത്തുക."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"മുഖം ഉപയോഗിച്ച് അൺലോക്ക് ചെയ്‌തു. തുറക്കാൻ അമർത്തുക."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"മുഖം തിരിച്ചറിഞ്ഞു. തുറക്കാൻ അമർത്തുക."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"നിങ്ങളുടെ സെഷൻ തുടരണോ?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"പുനരാംരംഭിക്കുക"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"അതെ, തുടരുക"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"അതിഥി മോഡ്"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"നിങ്ങൾ അതിഥി മോഡിലാണ്"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"പുതിയൊരു ഉപയോക്താവിനെ ചേർത്താൽ അതിഥി മോഡിൽ നിന്ന് പുറത്ത് കടക്കുകയും നിലവിലെ അതിഥി മോഡിലുള്ള എല്ലാ ആപ്പുകളും ഡാറ്റയും ഇല്ലാതാക്കുകയും ചെയ്യും."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"ഉപയോക്തൃ പരിധി എത്തി"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">നിങ്ങൾക്ക് <xliff:g id="COUNT">%d</xliff:g> ഉപയോക്താക്കളെ വരെ ചേർക്കാനാവും.</item>
-      <item quantity="one">ഒരു ഉപയോക്താവിന് മാത്രമേ സൃഷ്‌ടിക്കാനാവൂ.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{ഒരു ഉപയോക്താവിനെ മാത്രമേ സൃഷ്‌ടിക്കാനാകൂ.}other{നിങ്ങൾക്ക് # ഉപയോക്താക്കളെ വരെ ചേർക്കാം.}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"എന്നെ ഓർമ്മിപ്പിക്കുക"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"പഴയപടിയാക്കുക"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> സമയത്തേക്ക് സ്‌നൂസ് ‌ചെയ്‌തു"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d മണിക്കൂർ</item>
-      <item quantity="one">%d മണിക്കൂർ</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d മിനിറ്റ്</item>
-      <item quantity="one">%d മിനിറ്റ്</item>
-    </plurals>
+    <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="keyboard_key_button_template" msgid="8005673627272051429">"ബട്ടൺ <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"ഹോം"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"മുന്നറിയിപ്പുകൾ"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"ബാറ്ററി"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"സ്‌ക്രീൻഷോട്ടുകൾ"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"പൊതുവായ സന്ദേശങ്ങൾ"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant Apps"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"സജ്ജീകരണം"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"സ്റ്റോറേജ്"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"സൂചനകൾ"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant Apps"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"മാറ്റുക"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"ഉപകരണ നിയന്ത്രണങ്ങൾ"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"നിയന്ത്രണങ്ങൾ ചേർക്കാൻ ആപ്പ് തിരഞ്ഞെടുക്കുക"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> നിയന്ത്രണങ്ങൾ ചേർത്തു.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> നിയന്ത്രണം ചേർത്തു.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# നിയന്ത്രണം ചേർത്തു.}other{# നിയന്ത്രണങ്ങൾ ചേർത്തു.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"നീക്കം ചെയ്‌തു"</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>
@@ -846,7 +831,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="9099497976087485862">"പുതിയ ഉപകരണവുമായി ജോടിയാക്കുക"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"ടൈൽ ചേർക്കുക"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"ടൈൽ ചേർക്കരുത്"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"ഉപയോക്താവിനെ തിരഞ്ഞെടുക്കൂ"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> ആപ്പുകൾ സജീവമാണ്</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> ആപ്പ് സജീവമാണ്</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"വൈഫൈ ലഭ്യമല്ല"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"മുൻഗണനാ മോഡ്"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"അലാറം സജ്ജീകരിച്ചു"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"ക്യാമറ ഓഫാണ്"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"മൈക്ക് ഓഫാണ്"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"ക്യാമറയും മൈക്കും ഓഫാണ്"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# അറിയിപ്പ്}other{# അറിയിപ്പുകൾ}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"പ്രക്ഷേപണം ചെയ്യുന്നു"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"<xliff:g id="APP_NAME">%1$s</xliff:g> ബ്രോഡ്‌കാസ്റ്റ് ചെയ്യുന്നത് അവസാനിപ്പിക്കണോ?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"നിങ്ങൾ <xliff:g id="SWITCHAPP">%1$s</xliff:g> ബ്രോഡ്‌കാസ്റ്റ് ചെയ്യുകയോ ഔട്ട്പുട്ട് മാറ്റുകയോ ചെയ്താൽ നിങ്ങളുടെ നിലവിലുള്ള ബ്രോഡ്‌കാസ്റ്റ് അവസാനിക്കും"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> ബ്രോഡ്‌കാസ്റ്റ് ചെയ്യുക"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"ഔട്ട്പുട്ട് മാറ്റുക"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"അജ്ഞാതം"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ml/tiles_states_strings.xml b/packages/SystemUI/res/values-ml/tiles_states_strings.xml
index 1208928..7a07873 100644
--- a/packages/SystemUI/res/values-ml/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ml/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"ഓഫാണ്"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml
index b1455a7..126326a 100644
--- a/packages/SystemUI/res/values-mn/strings.xml
+++ b/packages/SystemUI/res/values-mn/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Төхөөрөмжийг түгжсэн"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Скан хийх нүүр царай"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Илгээх"</string>
-    <string name="phone_label" msgid="5715229948920451352">"утас нээх"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"дуут туслахыг нээнэ"</string>
-    <string name="camera_label" msgid="8253821920931143699">"камер нээх"</string>
     <string name="cancel" msgid="1089011503403416730">"Цуцлах"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Баталгаажуулах"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Дахин оролдох"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Мэдрэгчийг унтраах идэвхтэй байна"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Бүх мэдэгдлийг цэвэрлэх."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">дотор бусад <xliff:g id="NUMBER_1">%s</xliff:g> мэдэгдэл байна.</item>
-      <item quantity="one">дотор бусад <xliff:g id="NUMBER_0">%s</xliff:g> мэдэгдэл байна.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{дотор # мэдэгдэл байна.}other{дотор # мэдэгдэл байна.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Дэлгэц хэвтээ чиглэлд түгжигдсэн."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Дэлгэц босоо чиглэлээр түгжигдсэн."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Амттаны хайрцаг"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"Камерын хандалт"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Микрофоны хандалт"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Боломжтой"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Сүлжээний цэг"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Асааж байна…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Дата хэмнэгчийг асаасан"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d төхөөрөмж</item>
-      <item quantity="one">%d төхөөрөмж</item>
-    </plurals>
+    <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_camera_in_use" msgid="4820591564526512571">"Камерыг ашиглаж байна"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Мобайл дата"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Дaхин товшино уу"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Нээхийн тулд дээш шударна уу"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Нээхийн тулд түгжээг тайлах дүрс тэмдэг дээр дараарай"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Царайгаар түгжээг тайлсан. Нээхийн тулд дээш шударна уу."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Царайгаар түгжээг тайлсан. Нээхийн тулд түгжээг тайлах дүрс тэмдэг дээр дараарай."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Царайгаар түгжээг тайлсан. Нээхийн тулд дарна уу."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Царайг таньсан. Нээхийн тулд дарна уу."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Та үргэлжлүүлэхийг хүсэж байна уу?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Дахин эхлүүлэх"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Тийм, үргэлжлүүлэх"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Зочны горим"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Та зочны горимд байна"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Шинэ хэрэглэгч нэмснээр зочны горимоос гаргах бөгөөд бүх апп болон өгөгдлийг одоогийн зочны харилцан үйлдлээс устгана."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Хэрэглэгчийн хязгаарт хүрсэн"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">Та <xliff:g id="COUNT">%d</xliff:g> хүртэлх хэрэглэгч нэмэх боломжтой.</item>
-      <item quantity="one">Зөвхөн нэг хэрэглэгч үүсгэх боломжтой.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Зөвхөн нэг хэрэглэгч үүсгэх боломжтой.}other{Та # хүртэлх хэрэглэгч нэмж болно.}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Надад сануулах"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Болих"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g>-д түр хойшлуулсан"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d цаг</item>
-      <item quantity="one">%d цаг</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d минут</item>
-      <item quantity="one">%d минут</item>
-    </plurals>
+    <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="keyboard_key_button_template" msgid="8005673627272051429">"<xliff:g id="NAME">%1$s</xliff:g> товчлуур"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Нүүр хуудас"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Сэрэмжлүүлэг"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Батарей"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Дэлгэцийн зураг дарах"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Энгийн мессеж"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Шуурхай апп"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Тохируулга"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Хадгалах сан"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Заавар"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Шуурхай апп"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"асаах/унтраах"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Төхөөрөмжийн хяналт"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Хяналтууд нэмэхийн тулд аппыг сонгоно уу"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> хяналтыг нэмлээ.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> хяналтыг нэмлээ.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# хяналт нэмсэн.}other{# хяналт нэмсэн.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Хассан"</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>
@@ -846,7 +831,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="9099497976087485862">"Шинэ төхөөрөмж хослуулах"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Хавтан нэмэх"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Хавтанг бүү нэм"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Хэрэглэгч сонгох"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> апп идэвхтэй байна</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> апп идэвхтэй байна</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi боломжгүй"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Чухал горим"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Сэрүүлгийг тохируулсан"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Камер унтраалттай байна"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Микрофон унтраалттай байна"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Камер болон микрофон унтраалттай байна"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# мэдэгдэл}other{# мэдэгдэл}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Нэвтрүүлэлт"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"<xliff:g id="APP_NAME">%1$s</xliff:g>-г нэвтрүүлэхээ зогсоох уу?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Хэрэв та <xliff:g id="SWITCHAPP">%1$s</xliff:g>-г нэвтрүүлсэн эсвэл гаралтыг өөрчилсөн бол таны одоогийн нэвтрүүлэлтийг зогсооно"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g>-г нэвтрүүлэх"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Гаралтыг өөрчлөх"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Тодорхойгүй"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"MMM d EEE"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-mn/tiles_states_strings.xml b/packages/SystemUI/res/values-mn/tiles_states_strings.xml
index 3748440..776c487 100644
--- a/packages/SystemUI/res/values-mn/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-mn/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Унтраалттай"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml
index 64bb6fa..2ff02b3 100644
--- a/packages/SystemUI/res/values-mr/strings.xml
+++ b/packages/SystemUI/res/values-mr/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"डिव्हाइस लॉक केले"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"चेहरा स्कॅन करत आहे"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"पाठवा"</string>
-    <string name="phone_label" msgid="5715229948920451352">"फोन उघडा"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"व्हॉइस सहाय्य उघडा"</string>
-    <string name="camera_label" msgid="8253821920931143699">"कॅमेरा उघडा"</string>
     <string name="cancel" msgid="1089011503403416730">"रद्द करा"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"कंफर्म करा"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"पुन्हा प्रयत्न करा"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"सेन्सर बंद आहेत"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"सर्व सूचना साफ करा."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">आत आणखी <xliff:g id="NUMBER_1">%s</xliff:g> सूचना.</item>
-      <item quantity="one">आत आणखी <xliff:g id="NUMBER_0">%s</xliff:g> सूचना.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{आतमध्ये आणखी # सूचना आहे.}other{आतमध्ये आणखी # सूचना आहेत.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"लॅंडस्केप ओरिएंटेशनमध्ये स्क्रीन लॉक केली आहे."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"पोर्ट्रेट अभिमुखतेमध्ये स्क्रीन लॉक केली आहे."</string>
     <string name="dessert_case" msgid="9104973640704357717">"मिष्ठान्न प्रकरण"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"कॅमेराचा अ‍ॅक्सेस"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"माइकचा ॲक्सेस"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"उपलब्ध आहे"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"हॉटस्पॉट"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"सुरू करत आहे…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"डेटा सेव्हर सुरू आहे"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d डिव्हाइस</item>
-      <item quantity="one">%d डिव्हाइस</item>
-    </plurals>
+    <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_camera_in_use" msgid="4820591564526512571">"कॅमेरा वापरात आहे"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"मोबाइल डेटा"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"पुन्हा टॅप करा"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"उघडण्यासाठी वर स्वाइप करा"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"उघडण्यासाठी अनलॉक करा आयकन दाबा"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"चेहऱ्याने अनलॉक केले आहे. उघडण्यासाठी वर स्वाइप करा."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"चेहऱ्याने अनलॉक केले. उघडण्यासाठी अनलॉक करा आयकन दाबा."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"चेहऱ्याने अनलॉक केले आहे. उघडण्यासाठी दाबा."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"चेहरा ओळखला आहे. उघडण्यासाठी दाबा."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"तुम्ही तुमचे सत्र सुरू ठेवू इच्छिता?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"येथून सुरू करा"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"होय, सुरू ठेवा"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"अतिथी मोड"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"तुम्ही अतिथी मोडमध्ये आहात"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"नवीन वापरकर्ता जोडल्याने अतिथी मोडमधून बाहेर पडाल आणि सध्याच्या अतिथी सत्रातील सर्व अ‍ॅप्स व डेटा हटवला जाईल."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"वापरकर्ता मर्यादा गाठली"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">तुम्ही <xliff:g id="COUNT">%d</xliff:g> वापरकर्त्यांपर्यंत जोडू शकता.</item>
-      <item quantity="one">फक्त एक वापरकर्ता तयार केला जाऊ शकतो.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{फक्त एक वापरकर्ता तयार केला जाऊ शकतो.}other{तुम्ही कमाल # वापरकर्ते जोडू शकता.}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"मला आठवण करून द्या"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"पहिल्यासारखे करा"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> साठी स्नूझ करा"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other"> %d तास</item>
-      <item quantity="one">%d तास</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other"> %d मिनिटे</item>
-      <item quantity="one">%d मिनिट</item>
-    </plurals>
+    <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="keyboard_key_button_template" msgid="8005673627272051429">"बटण <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"सूचना"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"बॅटरी"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"स्क्रीनशॉट"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"सर्वसाधारण मेसेज"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant Apps"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"सेटअप"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"स्टोरेज"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"सूचना"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant Apps"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"टॉगल करा"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"डिव्हाइस नियंत्रणे"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"नियंत्रणे जोडण्यासाठी ॲप निवडा"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> नियंत्रणे जोडली.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> नियंत्रण जोडले.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# नियंत्रण जोडले आहे.}other{# नियंत्रणे जोडली आहेत.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"काढून टाकले"</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>
@@ -846,7 +831,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="9099497976087485862">"नवीन डिव्हाइससोबत पेअर करा"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"टाइल जोडा"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"टाइल जोडू नका"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"वापरकर्ता निवडा"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> अ‍ॅप्स अ‍ॅक्टिव्ह आहेत</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> अ‍ॅप अ‍ॅक्टिव्ह आहे</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"वाय-फाय उपलब्ध नाही"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"प्राधान्य मोड"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"अलार्म सेट केला"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"कॅमेरा बंद आहे"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"माइक बंद आहे"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"कॅमेरा आणि माइक बंद आहेत"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# सूचना}other{# सूचना}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"ब्रॉडकास्ट करत आहे"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"<xliff:g id="APP_NAME">%1$s</xliff:g> चे प्रसारण थांबवायचे आहे का?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"तुम्ही <xliff:g id="SWITCHAPP">%1$s</xliff:g> चे प्रसारण केल्यास किंवा आउटपुट बदलल्यास, तुमचे सध्याचे प्रसारण बंद होईल"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> चे प्रसारण करा"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"आउटपूट बदला"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"अज्ञात"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-mr/tiles_states_strings.xml b/packages/SystemUI/res/values-mr/tiles_states_strings.xml
index a6a3873..f75f0d0 100644
--- a/packages/SystemUI/res/values-mr/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-mr/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"बंद आहे"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index db64dd0..b9ee5c0 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Peranti dikunci"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Mengimbas wajah"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Hantar"</string>
-    <string name="phone_label" msgid="5715229948920451352">"buka telefon"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"buka bantuan suara"</string>
-    <string name="camera_label" msgid="8253821920931143699">"buka kamera"</string>
     <string name="cancel" msgid="1089011503403416730">"Batal"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Sahkan"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Cuba lagi"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Penderia dimatikan aktif"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Padamkan semua pemberitahuan."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> lagi pemberitahuan di dalam.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> lagi pemberitahuan di dalam.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{# lagi pemberitahuan dalam kumpulan.}other{# lagi pemberitahuan dalam kumpulan.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Skrin dikunci dalam orientasi landskap."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Skrin dikunci dalam orientasi potret."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Bekas Pencuci Mulut"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Autoputar"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Autoputar skrin"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Lokasi"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Penyelamat skrin"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Akses kamera"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Akses mikrofon"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Tersedia"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Tempat liputan"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Menghidupkan…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Penjimat Data dihidupkan"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d peranti</item>
-      <item quantity="one">%d peranti</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# peranti}other{# peranti}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Lampu Suluh"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Kamera sedang digunakan"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Data mudah alih"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Ketik sekali lagi"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Leret ke atas untuk buka"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Tekan ikon buka kunci untuk buka"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Dibuka kunci dengan wajah. Leret ke atas untuk buka."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Dibuka kunci dengan wajah. Tekan ikon buka kunci untuk buka."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Dibuka kunci dengan wajah. Tekan untuk membuka."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Wajah dicam. Tekan untuk membuka."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Adakah anda ingin meneruskan sesi anda?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Mulakan semula"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Ya, teruskan"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Mod tetamu"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Anda dalam mod tetamu"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Tindakan menambahkan pengguna baharu akan menyebabkan anda keluar daripada mod tetamu dan memadamkan semua apl dan data daripada sesi tetamu semasa."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Had pengguna dicapai"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">Anda boleh menambah sehingga <xliff:g id="COUNT">%d</xliff:g> pengguna.</item>
-      <item quantity="one">Hanya satu pengguna yang boleh dibuat.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Hanya satu pengguna boleh dibuat.}other{Anda boleh menambahkan sehingga # pengguna}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Alih keluar pengguna?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Semua apl dan data pengguna ini akan dipadamkan."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Alih keluar"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Ingatkan saya"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Buat asal"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Ditunda selama <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d jam</item>
-      <item quantity="one">%d jam</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d minit</item>
-      <item quantity="one">%d minit</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# jam}=2{# jam}other{# jam}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minit}other{# minit}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Penjimat Bateri"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Butang <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Skrin Utama"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Makluman"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Bateri"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Tangkapan skrin"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Mesej Am"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Apl Segera"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Persediaan"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Storan"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Pembayang"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Apl Segera"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"togol"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Kawalan peranti"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Pilih apl untuk menambahkan kawalan"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> kawalan ditambah.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> kawalan ditambah.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# kawalan ditambah.}other{# kawalan ditambah.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Dialih keluar"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Digemari"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Digemari, kedudukan <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> peranti dipilih"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(diputuskan sambungan)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Tidak dapat menukar. Ketik untuk mencuba lagi."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Gandingkan peranti baharu"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Sambungkan peranti"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Untuk menghantar sesi ini, sila buka apl."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Apl yang tidak diketahui"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Berhenti menghantar"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Tambahkan jubin"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Jangan tambah jubin"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Pilih pengguna"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> apl aktif</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> apl aktif</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# apl aktif}other{# apl aktif}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Maklumat baharu"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Apl aktif"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Apl ini aktif dan berfungsi walaupun anda tidak menggunakannya. Ini meningkatkan kefungsian apl tetapi mungkin akan memberikan kesan kepada hayat bateri."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi dimatikan"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Mod keutamaan"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Penggera ditetapkan"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Kamera dimatikan"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mikrofon dimatikan"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Kamera dan mikrofon dimatikan"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# pemberitahuan}other{# pemberitahuan}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Menyiarkan"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Hentikan siaran <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Jika anda siarkan <xliff:g id="SWITCHAPP">%1$s</xliff:g> atau tukarkan output, siaran semasa anda akan berhenti"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Siarkan <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Tukar output"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Tidak diketahui"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, d MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ms/tiles_states_strings.xml b/packages/SystemUI/res/values-ms/tiles_states_strings.xml
index cfd831a..9fa7ab5 100644
--- a/packages/SystemUI/res/values-ms/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ms/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Mati"</item>
     <item msgid="460891964396502657">"Hidup"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Tidak tersedia"</item>
+    <item msgid="8014986104355098744">"Mati"</item>
+    <item msgid="5966994759929723339">"Hidup"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml
index fb60b95..ff436b8 100644
--- a/packages/SystemUI/res/values-my/strings.xml
+++ b/packages/SystemUI/res/values-my/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"စက်ပစ္စည်းကို လော့ခ်ချထားသည်"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"မျက်နှာ စကင်ဖတ်နေသည်"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"ပို့ရန်"</string>
-    <string name="phone_label" msgid="5715229948920451352">"ဖုန်းကို ဖွင့်ရန်"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"အသံ အကူအညီအား ဖွင့်ရန်"</string>
-    <string name="camera_label" msgid="8253821920931143699">"ကင်မရာ ဖွင့်ရန်"</string>
     <string name="cancel" msgid="1089011503403416730">"မလုပ်တော့"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"အတည်ပြုပါ"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"ထပ်စမ်းကြည့်ရန်"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"အာရုံခံစနစ်များ ပိတ်ထားသည်"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"အကြောင်းကြားချက်အားလုံးကို ထုတ်ပစ်သည်။"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">အတွင်းတွင် အကြောင်းကြားချက် နောက်ထပ် <xliff:g id="NUMBER_1">%s</xliff:g> ခုရှိပါသည်။</item>
-      <item quantity="one">အတွင်းတွင် အကြောင်းကြားချက် နောက်ထပ် <xliff:g id="NUMBER_0">%s</xliff:g> ခုရှိပါသည်။</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{အထဲတွင် နောက်ထပ်အကြောင်းကြားချက် # ခု ရှိသည်။}other{အထဲတွင် နောက်ထပ်အကြောင်းကြားချက် # ခု ရှိသည်။}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"ဖန်သားပြင် အနေအထားက အလျားလိုက်အဖြစ် ပုံသေ လုပ်ထားပါသည်"</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"ဖန်သားပြင် အနေအထားက ဒေါင်လိုက်အဖြစ် ပုံသေ လုပ်ထားပါသည်"</string>
     <string name="dessert_case" msgid="9104973640704357717">"မုန့်ထည့်သော ပုံး"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"ကင်မရာသုံးခွင့်"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"မိုက်သုံးခွင့်"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"ရနိုင်သည်"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"ဟော့စပေါ့"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"ဖွင့်နေသည်…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"\'ဒေတာချွေတာမှု\' ဖွင့်ထားသည်"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">စက် %d ခု</item>
-      <item quantity="one">စက် %d ခု</item>
-    </plurals>
+    <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_camera_in_use" msgid="4820591564526512571">"ကင်မရာကို သုံးနေသည်"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"မိုဘိုင်းဒေတာ"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"ထပ်တို့ပါ"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"ဖွင့်ရန် အပေါ်သို့ပွတ်ဆွဲပါ"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"ဖွင့်ရန် လော့ခ်ဖွင့်သင်္ကေတကို နှိပ်ပါ"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"မျက်နှာဖြင့် ဖွင့်ထားသည်။ ဖွင့်ရန် အပေါ်သို့ပွတ်ဆွဲပါ။"</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"မျက်နှာပြ လော့ခ်ဖွင့်ထားသည်။ လော့ခ်ဖွင့်သင်္ကေတ နှိပ်၍ဝင်ပါ။"</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"မျက်နှာဖြင့် ဖွင့်ထားသည်။ ဖွင့်ရန် နှိပ်ပါ။"</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"မျက်နှာ မှတ်မိသည်။ ဖွင့်ရန် နှိပ်ပါ။"</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"သင်၏ စက်ရှင်ကို ဆက်လုပ်လိုပါသလား။"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"ပြန်စပါ"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"ဆက်လုပ်ပါ"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"ဧည့်သည်မုဒ်"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"သင်သည် ဧည့်သည်မုဒ်တွင် ဖြစ်သည်"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"အသုံးပြုသူ အသစ်ထည့်ခြင်းက ဧည့်သည်မုဒ်မှ ထွက်သွားမည်ဖြစ်ပြီး လက်ရှိဧည့်သည် စက်ရှင်မှ အက်ပ်နှင့် ဒေတာအားလုံးကို ဖျက်လိုက်ပါမည်။"</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"အသုံးပြုသူ အကန့်အသတ် ပြည့်သွားပါပြီ"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">အသုံးပြုသူ <xliff:g id="COUNT">%d</xliff:g> ဦးအထိ ထည့်နိုင်သည်။</item>
-      <item quantity="one">အသုံးပြုသူ တစ်ဦးသာ ထည့်နိုင်သည်။</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{အသုံးပြုသူတစ်ဦးသာ ထည့်နိုင်သည်။}other{အသုံးပြုသူ # ယောက်အထိ ထည့်နိုင်သည်။}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"ကျွန်ုပ်ကို သတိပေးပါ"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"နောက်ပြန်ရန်"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> ဆိုင်းငံ့ရန်"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d နာရီ</item>
-      <item quantity="one">%d နာရီ</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d မိနစ်</item>
-      <item quantity="one">%d မိနစ်</item>
-    </plurals>
+    <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="keyboard_key_button_template" msgid="8005673627272051429">"ခလုတ် <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"ပင်မ"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"သတိပေးချက်များ"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"ဘက်ထရီ"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"မျက်နှာပြင်ဓာတ်ပုံများ"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"အထွေထွေ မက်ဆေ့ဂျ်များ"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant Apps"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"စနစ်ထည့်ရန်"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"သိုလှောင်ခန်း"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"အရိပ်အမြွက်များ"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant Apps"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"ပြောင်းရန်"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"စက်ထိန်းစနစ်"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"ထိန်းချုပ်မှုများထည့်ရန် အက်ပ်ရွေးခြင်း"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other">ခလုတ် <xliff:g id="NUMBER_1">%s</xliff:g> ခု ထည့်လိုက်သည်။</item>
-      <item quantity="one">ခလုတ် <xliff:g id="NUMBER_0">%s</xliff:g> ခု ထည့်လိုက်သည်။</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{ထိန်းချုပ်ခလုတ် # ခု ထည့်ထားသည်။}other{ထိန်းချုပ်ခလုတ် # ခု ထည့်ထားသည်။}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"ဖယ်ရှားထားသည်"</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>
@@ -846,7 +831,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="9099497976087485862">"စက်အသစ် တွဲချိတ်ရန်"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"အကွက်ငယ် ထည့်ရန်"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"အကွက်ငယ် မထည့်ပါ"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"အသုံးပြုသူ ရွေးခြင်း"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other">အက်ပ် <xliff:g id="COUNT_1">%s</xliff:g> ခု ပွင့်နေသည်</item>
-      <item quantity="one">အက်ပ် <xliff:g id="COUNT_0">%s</xliff:g> ခု ပွင့်နေသည်</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi မရပါ"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"ဦးစားပေးမုဒ်"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"နိုးစက် သတ်မှတ်ထားသည်"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"ကင်မရာ ပိတ်ထားသည်"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"မိုက်ပိတ်ထားသည်"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"ကင်မရာနှင့် မိုက် ပိတ်ထားသည်"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{အကြောင်းကြားချက် # ခု}other{အကြောင်းကြားချက် # ခု}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>၊ <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"ထုတ်လွှင့်ခြင်း"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"<xliff:g id="APP_NAME">%1$s</xliff:g> ထုတ်လွှင့်ခြင်းကို ရပ်မလား။"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> ကို ထုတ်လွှင့်သောအခါ (သို့) အထွက်ကို ပြောင်းသောအခါ သင့်လက်ရှိထုတ်လွှင့်ခြင်း ရပ်သွားမည်"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> ထုတ်လွှင့်ခြင်း"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"အထွက်ကို ပြောင်းခြင်း"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"မသိ"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE၊ MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-my/tiles_states_strings.xml b/packages/SystemUI/res/values-my/tiles_states_strings.xml
index 665af20..493a7f0 100644
--- a/packages/SystemUI/res/values-my/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-my/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"ပိတ်"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index 4f532ec..2517b8e 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Enheten er låst"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Skanning av ansikt"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Send"</string>
-    <string name="phone_label" msgid="5715229948920451352">"åpne telefonen"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"åpne talehjelp"</string>
-    <string name="camera_label" msgid="8253821920931143699">"åpne kamera"</string>
     <string name="cancel" msgid="1089011503403416730">"Avbryt"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Bekreft"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Prøv på nytt"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"«Sensorene er av» er aktiv"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Fjern alle varslinger."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> andre varsler i gruppen.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> annet varsel i gruppen.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{# annet varsel i gruppen.}other{# andre varsler i gruppen.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Skjermen er låst i liggende retning."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Skjermen er låst i stående retning."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Dessertmonter"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Rotér automatisk"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Rotér skjermen automatisk"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Sted"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Skjermsparer"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Kameratilgang"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Mikrofontilgang"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Tilgjengelig"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Wifi-sone"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Slår på …"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Datasparing er på"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d enheter</item>
-      <item quantity="one">%d enhet</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# enhet}other{# enheter}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Lommelykt"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Kameraet er i bruk"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Mobildata"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Trykk igjen"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Sveip opp for å åpne"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Trykk på lås opp-ikonet for å åpne"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Låst opp med ansiktet. Sveip opp for å åpne."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Låst opp med ansiktet. Trykk på lås opp-ikonet for å fortsette"</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Låst opp med ansiktet. Trykk for å åpne."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Ansiktet er gjenkjent. Trykk for å åpne."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Vil du fortsette økten?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Start på nytt"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Ja, fortsett"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Gjestemodus"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Du er i gjestemodus"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Hvis du legger til en ny bruker, avsluttes gjestemodus, og alle apper og data fra den gjeldende gjesteøkten slettes."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Grensen for antall brukere er nådd"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">Du kan legge til opptil <xliff:g id="COUNT">%d</xliff:g> brukere.</item>
-      <item quantity="one">Du kan bare opprette én bruker.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Du kan bare opprette én bruker.}other{Du kan legge til opptil # brukere.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Vil du fjerne brukeren?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Alle apper og data som tilhører denne brukeren, blir slettet."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Fjern"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Minn meg på det"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Angre"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Slumrer i <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d timer</item>
-      <item quantity="one">%d time</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d minutter</item>
-      <item quantity="one">%d minutt</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# time}=2{# timer}other{# timer}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minutt}other{# minutter}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Batterisparing"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"<xliff:g id="NAME">%1$s</xliff:g>-knappen"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Startskjerm"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Varsler"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Batteri"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Skjermdumper"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Generelle meldinger"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant Apps"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Konfigurering"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Lagring"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Hint"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant Apps"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"slå av/på"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Enhetsstyring"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Velg en app for å legge til kontroller"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> kontroller er lagt til.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> kontroll er lagt til.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# kontroll er lagt til.}other{# kontroller er lagt til.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Fjernet"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Favoritt"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Favoritt, posisjon <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> enheter er valgt"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(frakoblet)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Kan ikke bytte. Trykk for å prøve igjen."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Koble til en ny enhet"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Koble til en enhet"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"For å caste denne økten, åpne appen."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Ukjent app"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Stopp castingen"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Legg til brikke"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Ikke legg til brikke"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Velg bruker"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> apper er aktive</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> app er aktiv</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# app er aktiv}other{# apper er aktive}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Ny informasjon"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktive apper"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Disse appene er aktive og kjører – selv når du ikke bruker dem. Dette forbedrer funksjonaliteten deres, men det kan også påvirke batterilevetiden."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi er utilgjengelig"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Prioriteringsmodus"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarmen er stilt inn"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Kameraet er av"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mikrofonen er av"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Kamera og mikrofon er av"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# varsel}other{# varsler}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Kringkaster"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Vil du stoppe kringkastingen av <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Hvis du kringkaster <xliff:g id="SWITCHAPP">%1$s</xliff:g> eller endrer utgangen, stopper den nåværende kringkastingen din"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Kringkast <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Endre utgang"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Ukjent"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE d. MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"t:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"tt:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-nb/tiles_states_strings.xml b/packages/SystemUI/res/values-nb/tiles_states_strings.xml
index a28b817..6fa902a 100644
--- a/packages/SystemUI/res/values-nb/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-nb/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Av"</item>
     <item msgid="460891964396502657">"På"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Utilgjengelig"</item>
+    <item msgid="8014986104355098744">"Av"</item>
+    <item msgid="5966994759929723339">"På"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml
index 896a4f4..a4946b8 100644
--- a/packages/SystemUI/res/values-ne/strings.xml
+++ b/packages/SystemUI/res/values-ne/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"यन्त्र लक गरिएको छ"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"अनुहार स्क्यान गर्दै"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"पठाउनुहोस्"</string>
-    <string name="phone_label" msgid="5715229948920451352">"फोन खोल्नुहोस्"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"आवाज सहायता खोल्नुहोस्"</string>
-    <string name="camera_label" msgid="8253821920931143699">"क्यामेरा खोल्नुहोस्"</string>
     <string name="cancel" msgid="1089011503403416730">"रद्द गर्नुहोस्"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"पुष्टि गर्नुहोस्"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"फेरि प्रयास गर्नुहोस्"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"सेन्सर निष्क्रिय नामक सुविधा सक्रिय छ"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"सबै सूचनाहरू हटाउनुहोस्।"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">भित्र थप <xliff:g id="NUMBER_1">%s</xliff:g> सूचनाहरू छन्।</item>
-      <item quantity="one">भित्र थप <xliff:g id="NUMBER_0">%s</xliff:g> सूचना छ।</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{समूहभित्र थप # सूचना छ।}other{समूहभित्र थप # वटा सूचना छन्।}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"स्क्रिनलाई ल्यान्डस्केप अवस्थामा बन्द गरिएको छ।"</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"स्क्रिन पोर्टेट अभिमूखमा लक गरिएको छ।"</string>
     <string name="dessert_case" msgid="9104973640704357717">"Dessert Case"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"क्यामेरा प्रयोग गर्ने अनुमति"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"माइक प्रयोग गर्ने अनुमति"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"उपलब्ध छ"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"हटस्पट"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"सक्रिय गर्दै…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"डेटा सेभर सक्रिय छ"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d यन्त्रहरू</item>
-      <item quantity="one">%d यन्त्र</item>
-    </plurals>
+    <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_camera_in_use" msgid="4820591564526512571">"क्यामेरा प्रयोग भइरहेको छ"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"मोबाइल डेटा"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"फेरि ट्याप गर्नुहोस्"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"खोल्न माथितिर स्वाइप गर्नुहोस्"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"खोल्न अनलक आइकनमा थिच्नुहोस्"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"अनुहार प्रयोग गरी अनलक गरियो। खोल्न माथितिर स्वाइप गर्नुहोस्"</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"अनुहार प्रयोग गरी अनलक गरियो। खोल्न अनलक आइकनमा थिच्नुहोस्।"</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"अनुहार प्रयोग गरी अनलक गरियो। डिभाइस खोल्न थिच्नुहोस्।"</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"अनुहार पहिचान गरियो। डिभाइस खोल्न थिच्नुहोस्।"</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"तपाईं आफ्नो सत्र जारी गर्न चाहनुहुन्छ?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"सुरु गर्नुहोस्"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"हो, जारी राख्नुहोस्"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"अतिथि मोड"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"तपाईं अतिथि मोड चलाउँदै हुनुहुन्छ"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"तपाईंले नयाँ प्रयोगकर्ता थप्नुभयो भने तपाईं अतिथि मोडबाट बाहिरिनु हुने छ र हालको अतिथि सत्रका सबै एप तथा डेटा मेटिने छ।"</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"प्रयोगकर्ताको सीमा पुग्यो"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">तपाईं अधिकतम <xliff:g id="COUNT">%d</xliff:g> प्रयोगहरू मात्र थप्न सक्नुहुन्छ।</item>
-      <item quantity="one">एउटा प्रयोगकर्ता मात्र सिर्जना गर्न सकिन्छ।</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{एउटा प्रोफाइल मात्र बनाउन सकिन्छ।}other{तपाईं बढीमा # जना प्रयोगकर्ता सामेल गराउन सक्नुहुन्छ।}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"मलाई सम्झाउनुहोस्"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"अन्डू गर्नुहोस्"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> का लागि स्नुज गरियो"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d घन्टा</item>
-      <item quantity="one">%d घन्टा</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d मिनेट</item>
-      <item quantity="one">%d मिनेट</item>
-    </plurals>
+    <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="keyboard_key_button_template" msgid="8005673627272051429">"<xliff:g id="NAME">%1$s</xliff:g> बटन"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"सतर्कताहरू"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"ब्याट्री"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"स्क्रिनशटहरू"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"सामान्य सन्देशहरू"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant Apps"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"सेटअप गर्नुहोस्"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"भण्डारण"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"सङ्केतहरू"</string>
     <string name="instant_apps" msgid="8337185853050247304">"तात्कालिक एपहरू"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"टगल गर्नुहोस्"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"डिभाइस नियन्त्रण गर्ने विजेटहरू"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"कन्ट्रोल थप्नु पर्ने एप छान्नुहोस्"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> वटा नियन्त्र थपियो।</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> नियन्त्र थपियो</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# कन्ट्रोल हालियो।}other{# वटा कन्ट्रोल हालियो।}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"हटाइएको"</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>
@@ -846,7 +831,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="9099497976087485862">"नयाँ डिभाइस कनेक्ट गर्नुहोस्"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"टाइल हाल्नुहोस्"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"टाइल नहाल्नुहोस्"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"प्रयोगकर्ता चयन गर्नु…"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> वटा एप सक्रिय छन्</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> एप सक्रिय छ</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi उपलब्ध छैन"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"प्राथमिकता मोड"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"अलार्म सेट गरिएको छ"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"क्यामेरा अफ छ"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"माइक अफ छ"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"क्यामेरा र माइक अफ छन्"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# वटा सूचना}other{# वटा सूचनाहरू}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"प्रसारण गरिँदै छ"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"<xliff:g id="APP_NAME">%1$s</xliff:g> ब्रोडकास्ट गर्न छाड्ने हो?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"तपाईंले <xliff:g id="SWITCHAPP">%1$s</xliff:g> ब्रोडकास्ट गर्नुभयो वा आउटपुट परिवर्तन गर्नुभयो भने तपाईंको हालको ब्रोडकास्ट रोकिने छ"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> ब्रोडकास्ट गर्नुहोस्"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"आउटपुट परिवर्तन गर्नुहोस्"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"अज्ञात"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ne/tiles_states_strings.xml b/packages/SystemUI/res/values-ne/tiles_states_strings.xml
index 80edf29..17193ba 100644
--- a/packages/SystemUI/res/values-ne/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ne/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"अफ छ"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-night/styles.xml b/packages/SystemUI/res/values-night/styles.xml
index cf49728..6f87169 100644
--- a/packages/SystemUI/res/values-night/styles.xml
+++ b/packages/SystemUI/res/values-night/styles.xml
@@ -44,7 +44,6 @@
         <item name="android:windowLightStatusBar">false</item>
         <item name="android:windowLightNavigationBar">false</item>
         <item name="android:navigationBarColor">?android:attr/colorBackgroundFloating</item>
-        <item name="android:textColorSecondary">?android:attr/textColorPrimaryInverse</item>
     </style>
 
     <style name="FloatingOverlay" parent="@android:style/Theme.DeviceDefault.DayNight">
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index 58c2ea5..3223012 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Apparaat vergrendeld"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Gezicht scannen"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Verzenden"</string>
-    <string name="phone_label" msgid="5715229948920451352">"telefoon openen"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"spraakassistent openen"</string>
-    <string name="camera_label" msgid="8253821920931143699">"camera openen"</string>
     <string name="cancel" msgid="1089011503403416730">"Annuleren"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Bevestigen"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Opnieuw proberen"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"\'Sensoren uit\' actief"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Alle meldingen wissen."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">Nog <xliff:g id="NUMBER_1">%s</xliff:g> meldingen in deze groep.</item>
-      <item quantity="one">Nog <xliff:g id="NUMBER_0">%s</xliff:g> melding in deze groep.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Nog # melding in deze groep.}other{Nog # meldingen in deze groep.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Het scherm is nu vergrendeld in liggende stand."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Het scherm is nu vergrendeld in staande stand."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Dessertshowcase"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automatisch draaien"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Scherm automatisch draaien"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Locatie"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Screensaver"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Cameratoegang"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Microfoontoegang"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Beschikbaar"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Hotspot"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Aanzetten…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Databesparing staat aan"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d apparaten</item>
-      <item quantity="one">%d apparaat</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# apparaat}other{# apparaten}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Zaklamp"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Camera in gebruik"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Mobiele data"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Tik nog een keer"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Swipe omhoog om te openen"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Druk op het ontgrendelicoon om te openen"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Ontgrendeld via gezicht. Swipe omhoog om te openen."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Ontgrendeld via gezicht. Druk op het ontgrendelicoon."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Ontgrendeld via gezicht. Druk om te openen."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Gezicht herkend. Druk om te openen."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Wil je doorgaan met je sessie?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Opnieuw starten"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Ja, doorgaan"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Gastmodus"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Je gebruikt de gastmodus"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Als je een nieuwe gebruiker toevoegt, wordt de gastmodus afgesloten en worden alle apps en gegevens van de huidige gastsessie verwijderd."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Gebruikerslimiet bereikt"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">Je kunt maximaal <xliff:g id="COUNT">%d</xliff:g> gebruikers toevoegen.</item>
-      <item quantity="one">Er kan maar één gebruiker worden gemaakt.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Er kan maar 1 gebruiker worden gemaakt.}other{Je kunt maximaal # gebruikers toevoegen.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Gebruiker verwijderen?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Alle apps en gegevens van deze gebruiker worden verwijderd."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Verwijderen"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Herinneren"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Ongedaan maken"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Snoozefunctie <xliff:g id="TIME_AMOUNT">%1$s</xliff:g> actief"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d uur</item>
-      <item quantity="one">%d uur</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d minuten</item>
-      <item quantity="one">%d minuut</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# uur}=2{# uur}other{# uur}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minuut}other{# minuten}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Batterijbesparing"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Knop <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Meldingen"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Batterij"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Screenshots"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Algemene berichten"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant-apps"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Instellen"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Opslag"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Hints"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant-apps"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"schakelen"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Apparaatbediening"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Kies de app waaraan je bedieningselementen wilt toevoegen"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> bedieningselementen toegevoegd.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> bedieningselement toegevoegd.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# bedieningselement toegevoegd.}other{# bedieningselementen toegevoegd.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Verwijderd"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Gemarkeerd als favoriet"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Gemarkeerd als favoriet, positie <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> apparaten geselecteerd"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(verbinding verbroken)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Kan niet schakelen. Tik om het opnieuw te proberen."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Nieuw apparaat koppelen"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Een apparaat koppelen"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Als je deze sessie wilt casten, open je de app."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Onbekende app"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Casten stoppen"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Tegel toevoegen"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Tegel niet toevoegen"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Gebruiker selecteren"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> apps zijn actief</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> app is actief</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# app is actief}other{# apps zijn actief}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nieuwe informatie"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Actieve apps"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Deze apps zijn actief, ook als je ze niet gebruikt. Dit verbetert de functionaliteit, maar kan ook van invloed zijn op de batterijduur."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wifi niet beschikbaar"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Prioriteitsmodus"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Wekker gezet"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Camera staat uit"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Microfoon staat uit"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Camera en microfoon staan uit"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# melding}other{# meldingen}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Uitzending"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Uitzending van <xliff:g id="APP_NAME">%1$s</xliff:g> stopzetten?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Als je <xliff:g id="SWITCHAPP">%1$s</xliff:g> uitzendt of de uitvoer wijzigt, wordt je huidige uitzending gestopt"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> uitzenden"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Uitvoer wijzigen"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Onbekend"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE d mmm"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"u:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-nl/tiles_states_strings.xml b/packages/SystemUI/res/values-nl/tiles_states_strings.xml
index c4603b2..fbccd78 100644
--- a/packages/SystemUI/res/values-nl/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-nl/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Uit"</item>
     <item msgid="460891964396502657">"Aan"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Niet beschikbaar"</item>
+    <item msgid="8014986104355098744">"Uit"</item>
+    <item msgid="5966994759929723339">"Aan"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml
index ce47f22..c8f238f 100644
--- a/packages/SystemUI/res/values-or/strings.xml
+++ b/packages/SystemUI/res/values-or/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"ଡିଭାଇସ୍ ଲକ୍ ହୋଇଯାଇଛି"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"ଫେସ୍ ସ୍କାନିଙ୍ଗ କରାଯାଉଛି"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"ପଠାନ୍ତୁ"</string>
-    <string name="phone_label" msgid="5715229948920451352">"ଫୋନ୍‌ ଖୋଲନ୍ତୁ"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"ଭଏସ୍‍ ସହାୟକ ଖୋଲନ୍ତୁ"</string>
-    <string name="camera_label" msgid="8253821920931143699">"କ୍ୟାମେରା ଖୋଲନ୍ତୁ"</string>
     <string name="cancel" msgid="1089011503403416730">"ବାତିଲ କରନ୍ତୁ"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"ନିଶ୍ଚିତ କରନ୍ତୁ"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"\'ସେନ୍‌ସର୍ ବନ୍ଦ\' ସକ୍ରିୟ ଅଛି"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"ସମସ୍ତ ବିଜ୍ଞପ୍ତି ଖାଲି କରନ୍ତୁ।"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">ଭିତରେ ଆଉ <xliff:g id="NUMBER_1">%s</xliff:g>ଟି ଅଧିକ ବିଜ୍ଞପ୍ତି ରହିଛି।</item>
-      <item quantity="one">ଭିତରେ ଆଉ <xliff:g id="NUMBER_0">%s</xliff:g>ଟି ଅଧିକ ବିଜ୍ଞପ୍ତି ରହିଛି।</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{ଭିତରେ #ଟି ଅଧିକ ବିଜ୍ଞପ୍ତି ଅଛି।}other{ଭିତରେ #ଟି ଅଧିକ ବିଜ୍ଞପ୍ତି ଅଛି।}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"ଲ୍ୟାଣ୍ଡସ୍କେପ୍‌ ଅବସ୍ଥାରେ ସ୍କ୍ରୀନ୍‍କୁ ଲକ୍‌ କରାଯାଇଛି।"</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"ପୋର୍ଟ୍ରେଟ୍‍ ଅବସ୍ଥାରେ ସ୍କ୍ରୀନ୍‍କୁ ଲକ୍‌ କରାଯାଇଛି।"</string>
     <string name="dessert_case" msgid="9104973640704357717">"ଡେଜର୍ଟ କେସ୍‌"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"କ୍ୟାମେରା ଆକ୍ସେସ୍"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"ମାଇକ୍ ଆକ୍ସେସ୍"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"ଉପଲବ୍ଧ"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"ହଟସ୍ପଟ୍‌"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"ଚାଲୁ ହେଉଛି…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"ଡାଟା ସେଭର୍‌ ଅନ୍‌ ଅଛି"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d ଡିଭାଇସ୍‌ଗୁଡ଼ିକ</item>
-      <item quantity="one">%d ଡିଭାଇସ୍</item>
-    </plurals>
+    <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_camera_in_use" msgid="4820591564526512571">"କ୍ୟାମେରା ବ୍ୟବହାରରେ ଅଛି"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"ମୋବାଇଲ୍‌ ଡାଟା"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"ପୁଣି ଟାପ୍ କରନ୍ତୁ"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"ଖୋଲିବା ପାଇଁ ଉପରକୁ ସ୍ୱାଇପ୍ କରନ୍ତୁ"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"ଖୋଲିବାକୁ ଅନଲକ ଆଇକନ ଦବାନ୍ତୁ"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"ଫେସ ମାଧ୍ୟମରେ ଅନଲକ କରାଯାଇଛି। ଖୋଲିବା ପାଇଁ ଉପରକୁ ସ୍ୱାଇପ କରନ୍ତୁ।"</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"ଫେସ ମାଧ୍ୟମରେ ଅନଲକ କରାଯାଇଛି। ଖୋଲିବାକୁ ଅନଲକ ଆଇକନ ଦବାନ୍ତୁ।"</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"ଫେସ ମାଧ୍ୟମରେ ଅନଲକ କରାଯାଇଛି। ଖୋଲିବାକୁ ଦବାନ୍ତୁ।"</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"ଫେସ ଚିହ୍ନଟ କରାଯାଇଛି। ଖୋଲିବାକୁ ଦବାନ୍ତୁ।"</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"ଆପଣ ନିଜର ସେସନ୍ ଜାରି ରଖିବାକୁ ଚାହାଁନ୍ତି କି?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"ଆରମ୍ଭ କରନ୍ତୁ"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"ହଁ, ଜାରି ରଖନ୍ତୁ"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"ଅତିଥି ମୋଡ"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"ଆପଣ ଅତିଥି ମୋଡରେ ଅଛନ୍ତି"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"ଜଣେ ନୂଆ ଉପଯୋଗକର୍ତ୍ତାଙ୍କୁ ଯୋଗ କରିବା ଦ୍ୱାରା ଅତିଥି ମୋଡରୁ ବାହାରି ଯିବ ଏବଂ ବର୍ତ୍ତମାନର ଅତିଥି ସେସନରୁ ସମସ୍ତ ଆପ ଓ ଡାଟା ଡିଲିଟ ହୋଇଯିବ।"</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"ଉପଯୋଗକର୍ତ୍ତା ସୀମାରେ ପହଞ୍ଚିଛି"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">କେବଳ <xliff:g id="COUNT">%d</xliff:g> ଉପଯୋଗକର୍ତ୍ତା ହିଁ ତିଆରି କରିହେବ।</item>
-      <item quantity="one">କେବଳ ଜଣେ ଉପଯୋଗକର୍ତ୍ତା ହିଁ ତିଆରି କରିହେବ।</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{କେବଳ ଜଣେ ଉପଯୋଗକର୍ତ୍ତା ତିଆରି କରାଯାଇପାରିବ।}other{କେବଳ # ଜଣ ଉପଯୋଗକର୍ତ୍ତା ତିଆରି କରାଯାଇପାରିବ।}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"ମୋତେ ରିମାଇଣ୍ଡର୍ କରନ୍ତୁ"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"ପୂର୍ବବତ୍ କରନ୍ତୁ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> ପାଇଁ ସ୍ନୁଜ୍‍ କରାଗଲା"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d ଘଣ୍ଟା</item>
-      <item quantity="one">%d ଘଣ୍ଟା</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d ମିନିଟ୍‍</item>
-      <item quantity="one">%d ମିନିଟ୍‍</item>
-    </plurals>
+    <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="keyboard_key_button_template" msgid="8005673627272051429">"ବଟନ୍‍ <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"ହୋମ"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"ଆଲର୍ଟଗୁଡ଼ିକ"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"ବ୍ୟାଟେରୀ"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"ସ୍କ୍ରୀନଶଟ୍‍"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"ସାଧାରଣ ମେସେଜ୍"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant Apps"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"ସେଟଅପ"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"ଷ୍ଟୋରେଜ୍‌"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"ହିଣ୍ଟ"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant Apps"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"ଟୋଗଲ୍ କରନ୍ତୁ"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"ଡିଭାଇସ୍ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକୁ ଯୋଗ କରିବାକୁ ଆପ୍ ବାଛନ୍ତୁ"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g>ଟି ନିୟନ୍ତ୍ରଣ ଯୋଗ କରାଯାଇଛି।</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g>ଟି ନିୟନ୍ତ୍ରଣ ଯୋଗ କରାଯାଇଛି।</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{#ଟି ନିୟନ୍ତ୍ରଣ ଯୋଗ କରାଯାଇଛି।}other{#ଟି ନିୟନ୍ତ୍ରଣ ଯୋଗ କରାଯାଇଛି।}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"କାଢ଼ି ଦିଆଯାଇଛି"</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>
@@ -846,7 +831,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="9099497976087485862">"ନୂଆ ଡିଭାଇସକୁ ପେୟାର୍ କରନ୍ତୁ"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"ଟାଇଲ୍ ଯୋଗ କରନ୍ତୁ"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"ଟାଇଲ୍ ଯୋଗ କର ନାହିଁ"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"ଉପଯୋଗକର୍ତ୍ତା ଚୟନ କର"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g>ଟି ଆପ ସକ୍ରିୟ ଅଛି</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g>ଟି ଆପ ସକ୍ରିୟ ଅଛି</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"ୱାଇ-ଫାଇ ଉପଲବ୍ଧ ନାହିଁ"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"ପ୍ରାଥମିକତା ମୋଡ"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"ଆଲାରାମ ସେଟ"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"କ୍ୟାମେରା ବନ୍ଦ ଅଛି"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"ମାଇକ ବନ୍ଦ ଅଛି"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"କ୍ୟାମେରା ଏବଂ ମାଇକ ବନ୍ଦ ଅଛି"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{#ଟି ବିଜ୍ଞପ୍ତି}other{#ଟି ବିଜ୍ଞପ୍ତି}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"ବ୍ରଡକାଷ୍ଟ କରୁଛି"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"<xliff:g id="APP_NAME">%1$s</xliff:g> ବ୍ରଡକାଷ୍ଟ କରିବା ବନ୍ଦ କରିବେ?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"ଯଦି ଆପଣ <xliff:g id="SWITCHAPP">%1$s</xliff:g> ବ୍ରଡକାଷ୍ଟ କରନ୍ତି କିମ୍ବା ଆଉଟପୁଟ ବଦଳାନ୍ତି, ତେବେ ଆପଣଙ୍କ ବର୍ତ୍ତମାନର ବ୍ରଡକାଷ୍ଟ ବନ୍ଦ ହୋଇଯିବ"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> ବ୍ରଡକାଷ୍ଟ କରନ୍ତୁ"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"ଆଉଟପୁଟ ବଦଳାନ୍ତୁ"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"ଅଜଣା"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-or/tiles_states_strings.xml b/packages/SystemUI/res/values-or/tiles_states_strings.xml
index 2d9fb84..acaa3fb 100644
--- a/packages/SystemUI/res/values-or/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-or/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"ବନ୍ଦ ଅଛି"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml
index 29e8218..9e9e0f1 100644
--- a/packages/SystemUI/res/values-pa/strings.xml
+++ b/packages/SystemUI/res/values-pa/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"ਡੀਵਾਈਸ ਲਾਕ ਹੈ"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"ਚਿਹਰਾ ਸਕੈਨ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"ਭੇਜੋ"</string>
-    <string name="phone_label" msgid="5715229948920451352">"ਫ਼ੋਨ ਖੋਲ੍ਹੋ"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"ਅਵਾਜ਼ੀ ਸਹਾਇਕ ਖੋਲ੍ਹੋ"</string>
-    <string name="camera_label" msgid="8253821920931143699">"ਕੈਮਰਾ ਖੋਲ੍ਹੋ"</string>
     <string name="cancel" msgid="1089011503403416730">"ਰੱਦ ਕਰੋ"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"ਤਸਦੀਕ ਕਰੋ"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"\'ਸੈਂਸਰ ਬੰਦ ਕਰੋ\' ਨੂੰ ਕਿਰਿਆਸ਼ੀਲ ਕਰੋ"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"ਸਾਰੀਆਂ ਸੂਚਨਾਵਾਂ ਹਟਾਓ।"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one">ਅੰਦਰ <xliff:g id="NUMBER_1">%s</xliff:g> ਹੋਰ ਸੂਚਨਾਵਾਂ।</item>
-      <item quantity="other">ਅੰਦਰ <xliff:g id="NUMBER_1">%s</xliff:g> ਹੋਰ ਸੂਚਨਾਵਾਂ।</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{ਗਰੁੱਪ ਵਿੱਚ # ਹੋਰ ਸੂਚਨਾ ਹੈ।}one{ਗਰੁੱਪ ਵਿੱਚ # ਹੋਰ ਸੂਚਨਾ ਹੈ।}other{ਗਰੁੱਪ ਵਿੱਚ # ਹੋਰ ਸੂਚਨਾਵਾਂ ਹਨ।}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"ਸਕ੍ਰੀਨ ਲੈਂਡਸਕੇਪ ਅਨੁਕੂਲਨ ਵਿੱਚ  ਲਾਕ  ਕੀਤੀ ਹੈ।"</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"ਸਕ੍ਰੀਨ ਪੋਰਟਰੇਟ ਅਨੁਕੂਲਨ ਵਿੱਚ  ਲਾਕ  ਕੀਤੀ ਗਈ ਹੈ।"</string>
     <string name="dessert_case" msgid="9104973640704357717">"ਡੈਜ਼ਰਟ ਕੇਸ"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"ਕੈਮਰਾ ਪਹੁੰਚ"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"ਮਾਈਕ ਪਹੁੰਚ"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"ਉਪਲਬਧ"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"ਹੌਟਸਪੌਟ"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"ਚਾਲੂ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"ਡਾਟਾ ਸੇਵਰ ਚਾਲੂ ਹੈ"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">%d ਡੀਵਾਈਸ</item>
-      <item quantity="other">%d ਡੀਵਾਈਸਾਂ</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# ਡੀਵਾਈਸ}one{# ਡੀਵਾਈਸ}other{# ਡੀਵਾਈਸ}}"</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>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"ਦੁਬਾਰਾ ਟੈਪ ਕਰੋ"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"ਖੋਲ੍ਹਣ ਲਈ ਉੱਪਰ ਵੱਲ ਸਵਾਈਪ ਕਰੋ"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"ਖੋਲ੍ਹਣ ਲਈ \'ਅਣਲਾਕ ਕਰੋ\' ਪ੍ਰਤੀਕ ਨੂੰ ਦਬਾਓ"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"ਚਿਹਰੇ ਰਾਹੀਂ ਅਣਲਾਕ ਕੀਤਾ ਗਿਆ। ਖੋਲ੍ਹਣ ਲਈ ਉੱਪਰ ਵੱਲ ਸਵਾਈਪ ਕਰੋ।"</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"ਚਿਹਰੇ ਰਾਹੀਂ ਅਣਲਾਕ ਕੀਤਾ ਗਿਆ। ਖੋਲ੍ਹਣ ਲਈ \'ਅਣਲਾਕ ਕਰੋ\' ਪ੍ਰਤੀਕ ਨੂੰ ਦਬਾਓ।"</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"ਚਿਹਰੇ ਰਾਹੀਂ ਅਣਲਾਕ ਕੀਤਾ ਗਿਆ। ਖੋਲ੍ਹਣ ਲਈ ਦਬਾਓ।"</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"ਚਿਹਰੇ ਦੀ ਪਛਾਣ ਹੋਈ। ਖੋਲ੍ਹਣ ਲਈ ਦਬਾਓ।"</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"ਕੀ ਤੁਸੀਂ ਆਪਣਾ ਸੈਸ਼ਨ ਜਾਰੀ ਰੱਖਣਾ ਚਾਹੁੰਦੇ ਹੋ?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"ਮੁੜ-ਸ਼ੁਰੂ ਕਰੋ"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"ਹਾਂ, ਜਾਰੀ ਰੱਖੋ"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"ਮਹਿਮਾਨ ਮੋਡ"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"ਤੁਸੀਂ ਮਹਿਮਾਨ ਮੋਡ ਵਿੱਚ ਹੋ"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"ਨਵੇਂ ਵਰਤੋਂਕਾਰ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨ ਨਾਲ ਮੌਜੂਦਾ ਮਹਿਮਾਨ ਮੋਡ ਚਲਾ ਜਾਵੇਗਾ ਅਤੇ ਮੌਜੂਦਾ ਮਹਿਮਾਨ ਸੈਸ਼ਨ ਦੀਆਂ ਸਾਰੀਆਂ ਐਪਾਂ ਅਤੇ ਡਾਟਾ ਮਿਟ ਜਾਵੇਗਾ।"</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"ਵਰਤੋਂਕਾਰ ਸ਼ਾਮਲ ਕਰਨ ਦੀ ਸੀਮਾ ਪੂਰੀ ਹੋਈ"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">ਤੁਸੀਂ <xliff:g id="COUNT">%d</xliff:g> ਤੱਕ ਵਰਤੋਂਕਾਰ ਸ਼ਾਮਲ ਕਰ ਸਕਦੇ ਹੋ।</item>
-      <item quantity="other">ਤੁਸੀਂ <xliff:g id="COUNT">%d</xliff:g> ਤੱਕ ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਸ਼ਾਮਲ ਕਰ ਸਕਦੇ ਹੋ।</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{ਸਿਰਫ਼ ਇੱਕ ਵਰਤੋਂਕਾਰ ਹੀ ਬਣਾਇਆ ਜਾ ਸਕਦਾ ਹੈ।}one{ਤੁਸੀਂ # ਵਰਤੋਂਕਾਰ ਸ਼ਾਮਲ ਕਰ ਸਕਦੇ ਹੋ।}other{ਤੁਸੀਂ # ਵਰਤੋਂਕਾਰ ਸ਼ਾਮਲ ਕਰ ਸਕਦੇ ਹੋ।}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"ਮੈਨੂੰ ਯਾਦ ਕਰਵਾਓ"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"ਅਣਕੀਤਾ ਕਰੋ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> ਲਈ ਸਨੂਜ਼ ਕੀਤਾ ਗਿਆ"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one"> %d ਘੰਟਾ</item>
-      <item quantity="other">%d ਘੰਟੇ</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one">%d ਮਿੰਟ</item>
-      <item quantity="other"> %d ਮਿੰਟ</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# ਘੰਟਾ}=2{# ਘੰਟੇ}one{# ਘੰਟਾ}other{# ਘੰਟੇ}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# ਮਿੰਟ}one{# ਮਿੰਟ}other{# ਮਿੰਟ}}"</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>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"ਸੁਚੇਤਨਾਵਾਂ"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"ਬੈਟਰੀ"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"ਸਕ੍ਰੀਨਸ਼ਾਟ"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"ਆਮ ਸੁਨੇਹੇ"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant Apps"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"ਸੈੱਟਅੱਪ ਕਰੋ"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"ਸਟੋਰੇਜ"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"ਸੰਕੇਤ"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant Apps"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"ਟੌਗਲ ਕਰੋ"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"ਡੀਵਾਈਸ ਕੰਟਰੋਲ"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"ਕੰਟਰੋਲ ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਐਪ ਚੁਣੋ"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> ਕੰਟਰੋਲ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ।</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> ਕੰਟਰੋਲ ਸ਼ਾਮਲ ਕੀਤੇ ਗਏ।</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# ਕੰਟਰੋਲ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ।}one{# ਕੰਟਰੋਲ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ।}other{# ਕੰਟਰੋਲ ਸ਼ਾਮਲ ਕੀਤੇ ਗਏ।}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"ਹਟਾਇਆ ਗਿਆ"</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>
@@ -846,7 +831,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="9099497976087485862">"ਨਵਾਂ ਡੀਵਾਈਸ ਜੋੜਾਬੱਧ ਕਰੋ"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"ਟਾਇਲ ਸ਼ਾਮਲ ਕਰੋ"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"ਟਾਇਲ ਸ਼ਾਮਲ ਨਾ ਕਰੋ"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"ਵਰਤੋਂਕਾਰ ਚੁਣੋ"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> ਐਪ ਕਿਰਿਆਸ਼ੀਲ ਹੈ</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> ਐਪਾਂ ਕਿਰਿਆਸ਼ੀਲ ਹਨ</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"ਵਾਈ-ਫਾਈ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"ਤਰਜੀਹੀ ਮੋਡ"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"ਅਲਾਰਮ ਸੈੱਟ ਹੈ"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"ਕੈਮਰਾ ਬੰਦ ਹੈ"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"ਮਾਈਕ ਬੰਦ ਹੈ"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"ਕੈਮਰਾ ਅਤੇ ਮਾਈਕ ਬੰਦ ਹਨ"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# ਸੂਚਨਾ}one{# ਸੂਚਨਾ}other{# ਸੂਚਨਾਵਾਂ}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"ਪ੍ਰਸਾਰਨ"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> ਦੇ ਪ੍ਰਸਾਰਨ ਨੂੰ ਰੋਕਣਾ ਹੈ?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"ਜੇ ਤੁਸੀਂ <xliff:g id="SWITCHAPP">%1$s</xliff:g> ਦਾ ਪ੍ਰਸਾਰਨ ਕਰਦੇ ਹੋ ਜਾਂ ਆਊਟਪੁੱਟ ਬਦਲਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਡਾ ਮੌਜੂਦਾ ਪ੍ਰਸਾਰਨ ਰੁਕ ਜਾਵੇਗਾ"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> ਦਾ ਪ੍ਰਸਾਰਨ ਕਰੋ"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"ਆਊਟਪੁੱਟ ਬਦਲੋ"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"ਅਗਿਆਤ"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-pa/tiles_states_strings.xml b/packages/SystemUI/res/values-pa/tiles_states_strings.xml
index 737b2b6..9653b92 100644
--- a/packages/SystemUI/res/values-pa/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-pa/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"ਬੰਦ"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 2087845..d538c3e 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Urządzenie zablokowane"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Skanowanie twarzy"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Wyślij"</string>
-    <string name="phone_label" msgid="5715229948920451352">"otwórz telefon"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"otwórz pomoc głosową"</string>
-    <string name="camera_label" msgid="8253821920931143699">"otwórz aparat"</string>
     <string name="cancel" msgid="1089011503403416730">"Anuluj"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Potwierdź"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Spróbuj jeszcze raz"</string>
@@ -205,12 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Wyłączenie czujników aktywne"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Usuń wszystkie powiadomienia."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="few">Jeszcze <xliff:g id="NUMBER_1">%s</xliff:g> powiadomienia w grupie.</item>
-      <item quantity="many">Jeszcze <xliff:g id="NUMBER_1">%s</xliff:g> powiadomień w grupie.</item>
-      <item quantity="other">Jeszcze <xliff:g id="NUMBER_1">%s</xliff:g> powiadomienia w grupie.</item>
-      <item quantity="one">Jeszcze <xliff:g id="NUMBER_0">%s</xliff:g> powiadomienie w grupie.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Jeszcze # powiadomienie w grupie.}few{Jeszcze # powiadomienia w grupie.}many{Jeszcze # powiadomień w grupie.}other{Jeszcze # powiadomienia w grupie.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Ekran jest zablokowany w orientacji poziomej."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Ekran jest zablokowany w orientacji pionowej."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Półka ze słodkościami"</string>
@@ -228,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Autoobracanie"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Autoobracanie ekranu"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Lokalizacja"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Wygaszacz ekranu"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Dostęp do aparatu"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Dostęp do mikrofonu"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Odblokowany"</string>
@@ -257,12 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Hotspot"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Włączam…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Włączono Oszczędzanie danych"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="few">%d urządzenia</item>
-      <item quantity="many">%d urządzeń</item>
-      <item quantity="other">%d urządzenia</item>
-      <item quantity="one">%d urządzenie</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# urządzenie}few{# urządzenia}many{# urządzeń}other{# urządzenia}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Latarka"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Aparat w użyciu"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Mobilna transmisja danych"</string>
@@ -319,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Kliknij jeszcze raz"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Przesuń w górę, by otworzyć"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Aby otworzyć, kliknij ikonę odblokowywania"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Odblokowano skanem twarzy. Przesuń w górę, aby otworzyć."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Odblokowano skanem twarzy. Aby otworzyć, kliknij ikonę odblokowywania."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Odblokowano rozpoznawaniem twarzy. Naciśnij, by otworzyć."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Twarz rozpoznana. Naciśnij, by otworzyć."</string>
@@ -355,13 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Chcesz kontynuować sesję?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Rozpocznij nową"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Tak, kontynuuj"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Tryb gościa"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Jesteś w trybie gościa"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Dodanie nowego użytkownika spowoduje zamknięcie trybu gościa. Wszystkie aplikacje i dane z obecnej sesji gościa zostaną usunięte."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Osiągnięto limit użytkowników"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="few">Możesz dodać maksymalnie <xliff:g id="COUNT">%d</xliff:g> użytkowników.</item>
-      <item quantity="many">Możesz dodać maksymalnie <xliff:g id="COUNT">%d</xliff:g> użytkowników.</item>
-      <item quantity="other">Możesz dodać maksymalnie <xliff:g id="COUNT">%d</xliff:g> użytkownika.</item>
-      <item quantity="one">Można utworzyć tylko jednego użytkownika.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Można utworzyć tylko 1 użytkownika.}few{Możesz dodać maksymalnie # użytkowników}many{Możesz dodać maksymalnie # użytkowników}other{Możesz dodać maksymalnie # użytkownika}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Usunąć użytkownika?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Wszystkie aplikacje i dane tego użytkownika zostaną usunięte."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Usuń"</string>
@@ -547,18 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Przypomnij"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Cofnij"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Odłożono na <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="few">%d godziny</item>
-      <item quantity="many">%d godzin</item>
-      <item quantity="other">%d godziny</item>
-      <item quantity="one">%d godzina</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="few">%d minuty</item>
-      <item quantity="many">%d minut</item>
-      <item quantity="other">%d minuty</item>
-      <item quantity="one">]%d minuta</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# godzina}=2{# godziny}few{# godziny}many{# godzin}other{# godziny}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minuta}few{# minuty}many{# minut}other{# minuty}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Oszczędzanie baterii"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Przycisk <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -707,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Alerty"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Bateria"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Zrzuty ekranu"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Wiadomości"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Aplikacje błyskawiczne"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Konfiguracja"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Pamięć wewnętrzna"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Wskazówki"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Aplikacje błyskawiczne"</string>
@@ -781,12 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"przełącz"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Sterowanie urządzeniami"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Wybierz aplikację, do której chcesz dodać elementy sterujące"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="few">Dodano <xliff:g id="NUMBER_1">%s</xliff:g> elementy sterujące</item>
-      <item quantity="many">Dodano <xliff:g id="NUMBER_1">%s</xliff:g> elementów sterujących</item>
-      <item quantity="other">Dodano <xliff:g id="NUMBER_1">%s</xliff:g> elementu sterującego</item>
-      <item quantity="one">Dodano <xliff:g id="NUMBER_0">%s</xliff:g> element sterujący</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{Dodano # element sterujący.}few{Dodano # elementy sterujące.}many{Dodano # elementów sterujących.}other{Dodano # elementu sterującego.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Usunięto"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Dodano do ulubionych"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Dodano do ulubionych, pozycja <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -858,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"Wybrane urządzenia: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(odłączono)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Nie można przełączyć. Spróbuj ponownie."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Sparuj nowe urządzenie"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Połącz urządzenie"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Aby przesłać tę sesję, otwórz aplikację."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Nieznana aplikacja"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Zatrzymaj przesyłanie"</string>
@@ -943,12 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Dodaj kafelek"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Nie dodawaj kafelka"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Wybierz użytkownika"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="few"><xliff:g id="COUNT_1">%s</xliff:g> aplikacje są aktywne</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%s</xliff:g> aplikacji jest aktywnych</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aplikacji jest aktywne</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aplikacja jest aktywna</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# aplikacja jest aktywna}few{# aplikacje są aktywne}many{# aplikacji jest aktywnych}other{# aplikacji jest aktywne}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nowa informacja"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktywne aplikacje"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Te aplikacje są aktywne i działają, nawet gdy ich nie używasz. Zwiększa to ich funkcjonalność, ale może również pogarszać żywotność baterii."</string>
@@ -975,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Sieć Wi‑Fi niedostępna"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Tryb priorytetowy"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarm ustawiony"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Kamera jest wyłączona"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mikrofon jest wyłączony"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Aparat i mikrofon są wyłączone"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# powiadomienie}few{# powiadomienia}many{# powiadomień}other{# powiadomienia}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Transmisja"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Zatrzymaj transmisję aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Jeśli transmitujesz aplikację <xliff:g id="SWITCHAPP">%1$s</xliff:g> lub zmieniasz dane wyjściowe, Twoja obecna transmisja zostanie zakończona"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Transmisja aplikacji <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Zmień dane wyjściowe"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Brak informacji"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, d MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-pl/tiles_states_strings.xml b/packages/SystemUI/res/values-pl/tiles_states_strings.xml
index c1a4059..50650986 100644
--- a/packages/SystemUI/res/values-pl/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-pl/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Wyłączony"</item>
     <item msgid="460891964396502657">"Włączony"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Brak dostępu"</item>
+    <item msgid="8014986104355098744">"Wyłączono"</item>
+    <item msgid="5966994759929723339">"Włączono"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml
index c3b7ec5..4435e2b 100644
--- a/packages/SystemUI/res/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Dispositivo bloqueado"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Verificando rosto"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Enviar"</string>
-    <string name="phone_label" msgid="5715229948920451352">"abrir telefone"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"abrir assistência de voz"</string>
-    <string name="camera_label" msgid="8253821920931143699">"abrir câmera"</string>
     <string name="cancel" msgid="1089011503403416730">"Cancelar"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Confirmar"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Tentar novamente"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"A opção \"Sensores desativados\" está ativa"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Limpar todas as notificações."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"Mais <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one">Mais <xliff:g id="NUMBER_1">%s</xliff:g> notificações no grupo.</item>
-      <item quantity="other">Mais <xliff:g id="NUMBER_1">%s</xliff:g> notificações no grupo.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Mais # notificação no grupo.}one{Mais # notificação no grupo.}other{Mais # notificações no grupo.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"A tela está bloqueada na orientação paisagem."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"A tela está bloqueada na orientação retrato."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Mostruário de sobremesas"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Giro automático"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Giro automático da tela"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Localização"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Protetor de tela"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Acesso à câmera"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Acesso ao microfone"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Disponível"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Ponto de acesso"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Ativando…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Economia de dados ativada"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">%d dispositivo</item>
-      <item quantity="other">%d dispositivos</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# dispositivo}one{# dispositivo}other{# dispositivos}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Lanterna"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Câmera em uso"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Dados móveis"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Toque novamente"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Deslize para cima para abrir"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Pressione o ícone de desbloqueio para abrir"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Desbloqueado pelo rosto. Deslize para cima para abrir."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Desbloqueado pelo rosto. Toque no ícone do cadeado para abrir."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Desbloqueado pelo rosto. Pressione para abrir."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Rosto reconhecido. Pressione para abrir."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Quer continuar a sessão?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Recomeçar"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Sim, continuar"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Modo visitante"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Você está no modo visitante"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Ao adicionar um novo usuário, o dispositivo vai sair do modo visitante e excluir todos os apps e dados da Sessão de visitante atual."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Limite de usuários atingido"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">É possível adicionar até <xliff:g id="COUNT">%d</xliff:g> usuário.</item>
-      <item quantity="other">É possível adicionar até <xliff:g id="COUNT">%d</xliff:g> usuários.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Você só pode criar 1 usuário.}one{Você pode adicionar até # usuário.}other{Você pode adicionar até # usuários.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Remover usuário?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Todos os apps e dados deste usuário serão excluídos."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Remover"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Lembrete"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Desfazer"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Adiada para <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one">%d hora</item>
-      <item quantity="other">%d horas</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one">%d minuto</item>
-      <item quantity="other">%d minutos</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# hora}=2{# horas}one{# hora}other{# horas}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minuto}one{# minuto}other{# minuto}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Economia de bateria"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Botão <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Alertas"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Bateria"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Capturas de tela"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Mensagens gerais"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant Apps"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Configurar"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Armazenamento"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Dicas"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant Apps"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"alternar"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Controles do dispositivo"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Escolha um app para adicionar controles"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> controle adicionado.</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> controles adicionados.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# controle adicionado.}one{# controle adicionado.}other{# controles adicionados.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Removido"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Adicionado como favorito"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Adicionado como favorito (posição <xliff:g id="NUMBER">%d</xliff:g>)"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> dispositivos selecionados"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(sem conexão)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Não foi possível mudar. Toque para tentar novamente."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Parear novo dispositivo"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Conectar dispositivo"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Abra o app para transmitir esta sessão."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"App desconhecido"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Parar transmissão"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Adicionar bloco"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Não adicionar bloco"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Selecionar usuário"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> app está ativo</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> apps estão ativos</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# app está ativo}one{# apps está ativo}other{# apps estão ativos}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nova informação"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Apps ativos"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Esses apps ficam ativos e em execução mesmo quando não estão em uso. Isso melhora a funcionalidade deles, mas também pode afetar a duração da bateria."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi-Fi indisponível"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Modo de prioridade"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarme definido"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"A câmera está desativada"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"O microfone está desativado"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"A câmera e o microfone estão desativados"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notificação}one{# notificação}other{# notificações}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Transmitindo"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Interromper a transmissão do app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Se você transmitir o app <xliff:g id="SWITCHAPP">%1$s</xliff:g> ou mudar a saída, a transmissão atual será interrompida"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Transmitir <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Mudar saída"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Desconhecido"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, d de MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-pt-rBR/tiles_states_strings.xml b/packages/SystemUI/res/values-pt-rBR/tiles_states_strings.xml
index abf8749..bc7efe6 100644
--- a/packages/SystemUI/res/values-pt-rBR/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Desativado"</item>
     <item msgid="460891964396502657">"Ativado"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Indisponível"</item>
+    <item msgid="8014986104355098744">"Desativado"</item>
+    <item msgid="5966994759929723339">"Ativado"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index c49ddcb..34a84ab 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Dispositivo bloqueado"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"A analisar o rosto…"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Enviar"</string>
-    <string name="phone_label" msgid="5715229948920451352">"abrir telemóvel"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"abrir assistente de voz"</string>
-    <string name="camera_label" msgid="8253821920931143699">"abrir câmara"</string>
     <string name="cancel" msgid="1089011503403416730">"Cancelar"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Confirmar"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Tentar novamente"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Sensores desativados ativo"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Limpar todas as notificações."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">Mais <xliff:g id="NUMBER_1">%s</xliff:g> notificações no grupo.</item>
-      <item quantity="one">Mais <xliff:g id="NUMBER_0">%s</xliff:g> notificação no grupo.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Mais # notificação no grupo.}other{Mais # notificações no grupo.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"O ecrã está bloqueado na orientação horizontal."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"O ecrã está bloqueado na orientação vertical."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Vitrina de sobremesas"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Rotação auto."</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Rodar o ecrã automaticamente"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Localização"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Proteção de ecrã"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Acesso câmara"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Ac. microfone"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Disponível"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Zona Wi-Fi"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"A ativar..."</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Poup. dados ativada"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d dispositivos</item>
-      <item quantity="one">%d dispositivo</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# dispositivo}other{# dispositivos}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Lanterna"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Câmara em utilização"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Dados móveis"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Toque novamente"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Deslize rapidamente para cima para abrir"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Prima o ícone de desbloqueio para abrir"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Desbloqueado com o rosto. Deslize para cima para abrir."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Desbloqueio com a face. Prima ícone de desbloqueio p/ abrir."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Desbloqueado com o rosto. Prima para abrir."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Rosto reconhecido. Prima para abrir."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Pretende continuar a sessão?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Recomeçar"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Sim, continuar"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Modo convidado"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Está no modo convidado"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Ao adicionar um novo utilizador, o modo convidado é fechado e todas as apps e dados da sessão de convidado atual são eliminados."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Limite de utilizadores alcançado"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">Pode adicionar até <xliff:g id="COUNT">%d</xliff:g> utilizadores.</item>
-      <item quantity="one">Apenas é possível criar um utilizador.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Só é possível criar um utilizador.}other{É possível adicionar até # utilizadores.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Remover o utilizador?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Serão eliminados todos os dados e todas as aplicações deste utilizador."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Remover"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Lembrar-me"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Anular"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Suspensa por <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d horas</item>
-      <item quantity="one">%d hora</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d minutos</item>
-      <item quantity="one">%d minuto</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# hora}=2{# horas}other{# horas}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minuto}other{# minutos}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Poupança de bateria"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Botão <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Início"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Alertas"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Bateria"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Capturas de ecrã"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Mensagens gerais"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Apps instantâneas"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Configuração"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Armazenamento"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Sugestões"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Apps instantâneas"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"ativar/desativar"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Controlos de dispositivos"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Escolha uma app para adicionar controlos"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> controlos adicionados.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> controlo adicionado.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# controlo adicionado.}other{# controlos adicionados.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Removido"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Adicionado aos favoritos"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Adicionados aos favoritos, posição <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> dispositivos selecionados"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(desligado)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Não é possível mudar. Toque para tentar novamente."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Sincronize o novo dispositivo"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Ligue um dispositivo"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Para transmitir esta sessão, abra a app."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"App desconhecida"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Parar transmissão"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Adicionar mosaico"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Não adicion. mosaico"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Selecione utilizador"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> apps estão ativas</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> app está ativa</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# app está ativa}other{# apps estão ativas}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Novas informações"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Apps ativas"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Estas apps estão ativas e a funcionar, mesmo quando não as está a usar. Isto melhora a sua funcionalidade, mas também afeta a autonomia da bateria."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi indisponível"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Modo Prioridade"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarme definido"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"A câmara está desativada"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"O microfone está desativado"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"A câmara e o microfone estão desativados"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notificação}other{# notificações}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"A transmitir"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Interromper a transmissão da app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Se transmitir a app <xliff:g id="SWITCHAPP">%1$s</xliff:g> ou alterar a saída, a sua transmissão atual é interrompida"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Transmita a app <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Altere a saída"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Desconhecida"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, d de MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/tiles_states_strings.xml b/packages/SystemUI/res/values-pt-rPT/tiles_states_strings.xml
index c8e557b..0a01020 100644
--- a/packages/SystemUI/res/values-pt-rPT/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Desativado"</item>
     <item msgid="460891964396502657">"Ativado"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Indisponível"</item>
+    <item msgid="8014986104355098744">"Desativado"</item>
+    <item msgid="5966994759929723339">"Ativado"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index c3b7ec5..4435e2b 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Dispositivo bloqueado"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Verificando rosto"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Enviar"</string>
-    <string name="phone_label" msgid="5715229948920451352">"abrir telefone"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"abrir assistência de voz"</string>
-    <string name="camera_label" msgid="8253821920931143699">"abrir câmera"</string>
     <string name="cancel" msgid="1089011503403416730">"Cancelar"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Confirmar"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Tentar novamente"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"A opção \"Sensores desativados\" está ativa"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Limpar todas as notificações."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"Mais <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one">Mais <xliff:g id="NUMBER_1">%s</xliff:g> notificações no grupo.</item>
-      <item quantity="other">Mais <xliff:g id="NUMBER_1">%s</xliff:g> notificações no grupo.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Mais # notificação no grupo.}one{Mais # notificação no grupo.}other{Mais # notificações no grupo.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"A tela está bloqueada na orientação paisagem."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"A tela está bloqueada na orientação retrato."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Mostruário de sobremesas"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Giro automático"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Giro automático da tela"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Localização"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Protetor de tela"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Acesso à câmera"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Acesso ao microfone"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Disponível"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Ponto de acesso"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Ativando…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Economia de dados ativada"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">%d dispositivo</item>
-      <item quantity="other">%d dispositivos</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# dispositivo}one{# dispositivo}other{# dispositivos}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Lanterna"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Câmera em uso"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Dados móveis"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Toque novamente"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Deslize para cima para abrir"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Pressione o ícone de desbloqueio para abrir"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Desbloqueado pelo rosto. Deslize para cima para abrir."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Desbloqueado pelo rosto. Toque no ícone do cadeado para abrir."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Desbloqueado pelo rosto. Pressione para abrir."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Rosto reconhecido. Pressione para abrir."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Quer continuar a sessão?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Recomeçar"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Sim, continuar"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Modo visitante"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Você está no modo visitante"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Ao adicionar um novo usuário, o dispositivo vai sair do modo visitante e excluir todos os apps e dados da Sessão de visitante atual."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Limite de usuários atingido"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">É possível adicionar até <xliff:g id="COUNT">%d</xliff:g> usuário.</item>
-      <item quantity="other">É possível adicionar até <xliff:g id="COUNT">%d</xliff:g> usuários.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Você só pode criar 1 usuário.}one{Você pode adicionar até # usuário.}other{Você pode adicionar até # usuários.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Remover usuário?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Todos os apps e dados deste usuário serão excluídos."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Remover"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Lembrete"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Desfazer"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Adiada para <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one">%d hora</item>
-      <item quantity="other">%d horas</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one">%d minuto</item>
-      <item quantity="other">%d minutos</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# hora}=2{# horas}one{# hora}other{# horas}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minuto}one{# minuto}other{# minuto}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Economia de bateria"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Botão <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Alertas"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Bateria"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Capturas de tela"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Mensagens gerais"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant Apps"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Configurar"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Armazenamento"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Dicas"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant Apps"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"alternar"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Controles do dispositivo"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Escolha um app para adicionar controles"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> controle adicionado.</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> controles adicionados.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# controle adicionado.}one{# controle adicionado.}other{# controles adicionados.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Removido"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Adicionado como favorito"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Adicionado como favorito (posição <xliff:g id="NUMBER">%d</xliff:g>)"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> dispositivos selecionados"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(sem conexão)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Não foi possível mudar. Toque para tentar novamente."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Parear novo dispositivo"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Conectar dispositivo"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Abra o app para transmitir esta sessão."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"App desconhecido"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Parar transmissão"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Adicionar bloco"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Não adicionar bloco"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Selecionar usuário"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> app está ativo</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> apps estão ativos</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# app está ativo}one{# apps está ativo}other{# apps estão ativos}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nova informação"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Apps ativos"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Esses apps ficam ativos e em execução mesmo quando não estão em uso. Isso melhora a funcionalidade deles, mas também pode afetar a duração da bateria."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi-Fi indisponível"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Modo de prioridade"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarme definido"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"A câmera está desativada"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"O microfone está desativado"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"A câmera e o microfone estão desativados"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notificação}one{# notificação}other{# notificações}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Transmitindo"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Interromper a transmissão do app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Se você transmitir o app <xliff:g id="SWITCHAPP">%1$s</xliff:g> ou mudar a saída, a transmissão atual será interrompida"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Transmitir <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Mudar saída"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Desconhecido"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, d de MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-pt/tiles_states_strings.xml b/packages/SystemUI/res/values-pt/tiles_states_strings.xml
index abf8749..bc7efe6 100644
--- a/packages/SystemUI/res/values-pt/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-pt/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Desativado"</item>
     <item msgid="460891964396502657">"Ativado"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Indisponível"</item>
+    <item msgid="8014986104355098744">"Desativado"</item>
+    <item msgid="5966994759929723339">"Ativado"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 2be9570..f9ba7c7 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Dispozitiv blocat"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Scanarea chipului"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Trimiteți"</string>
-    <string name="phone_label" msgid="5715229948920451352">"deschideți telefonul"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"deschideți asistentul vocal"</string>
-    <string name="camera_label" msgid="8253821920931143699">"deschideți camera foto"</string>
     <string name="cancel" msgid="1089011503403416730">"Anulați"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Confirmați"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Încercați din nou"</string>
@@ -205,11 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Dezactivarea senzorilor este activă"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Ștergeți toate notificările."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="few">Încă <xliff:g id="NUMBER_1">%s</xliff:g> notificări în grup.</item>
-      <item quantity="other">Încă <xliff:g id="NUMBER_1">%s</xliff:g> de notificări în grup.</item>
-      <item quantity="one">Încă <xliff:g id="NUMBER_0">%s</xliff:g> notificare în grup.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Încă # notificare în grup.}few{Încă # notificări în grup.}other{Încă # de notificări în grup.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Ecranul este blocat în orientarea de tip peisaj."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Ecranul este blocat în orientarea de tip portret."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Vitrina cu dulciuri"</string>
@@ -227,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Rotire automată"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Rotirea automată a ecranului"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Locație"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Screensaver"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Acces la cameră"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Acces la microfon"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Disponibil"</string>
@@ -256,11 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Hotspot"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Se activează..."</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Economizor date activat"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="few">%d dispozitive</item>
-      <item quantity="other">%d de dispozitive</item>
-      <item quantity="one">%d dispozitiv</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# dispozitiv}few{# dispozitive}other{# de dispozitive}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Lanternă"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Se folosește camera foto"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Date mobile"</string>
@@ -317,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Atingeți din nou"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Glisați în sus pentru a deschide"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Apăsați pictograma de deblocare pentru a deschide"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"S-a deblocat folosind fața. Glisați în sus și deschideți."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"S-a deblocat cu ajutorul feței. Apăsați pictograma de deblocare pentru a deschide"</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"S-a deblocat cu ajutorul feței. Apăsați pentru a deschide."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Chipul a fost recunoscut. Apăsați pentru a deschide."</string>
@@ -353,12 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Vreți să continuați sesiunea?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Începeți din nou"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Da, continuați"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Modul pentru invitați"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Folosiți modul pentru invitați"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Dacă adăugați un utilizator nou, veți ieși din modul pentru invitați și se vor șterge toate aplicațiile și datele din sesiunea pentru invitați actuală."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Ați atins limita de utilizatori"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="few">Puteți adăuga maximum <xliff:g id="COUNT">%d</xliff:g> utilizatori.</item>
-      <item quantity="other">Puteți adăuga maximum <xliff:g id="COUNT">%d</xliff:g> de utilizatori.</item>
-      <item quantity="one">Poate fi creat doar un utilizator.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Se poate crea doar un utilizator.}few{Puteți adăuga până la # utilizatori.}other{Puteți adăuga până la # de utilizatori.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Eliminați utilizatorul?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Toate aplicațiile și datele acestui utilizator vor fi șterse."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Eliminați"</string>
@@ -544,16 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Reamintește-mi"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Anulați"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Amânată <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="few">%d ore</item>
-      <item quantity="other">%d de ore</item>
-      <item quantity="one">%d oră</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="few">%d minute</item>
-      <item quantity="other">%d de minute</item>
-      <item quantity="one">%d minut</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# oră}=2{# ore}few{# ore}other{# de ore}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minut}few{# minute}other{# de minute}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Economisirea bateriei"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Butonul <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"La început"</string>
@@ -702,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Alerte"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Baterie"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Capturi de ecran"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Mesaje generale"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Aplicații instantanee"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Configurarea"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Stocare"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Indicii"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Aplicații instantanee"</string>
@@ -776,11 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"Activați / dezactivați"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Comenzile dispozitivelor"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Alegeți aplicația pentru a adăuga comenzi"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="few">S-au adăugat <xliff:g id="NUMBER_1">%s</xliff:g> comenzi.</item>
-      <item quantity="other">S-au adăugat <xliff:g id="NUMBER_1">%s</xliff:g> de comenzi.</item>
-      <item quantity="one">S-a adăugat <xliff:g id="NUMBER_0">%s</xliff:g> comandă.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{S-a adăugat # comandă.}few{S-au adăugat # comenzi.}other{S-au adăugat # de comenzi.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Eliminată"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Marcată ca preferată"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Marcată ca preferată, poziția <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -852,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"S-au selectat <xliff:g id="COUNT">%1$d</xliff:g> dispozitive"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(deconectat)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Nu se poate comuta. Atingeți pentru a încerca din nou."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Asociați un nou dispozitiv"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Conectați un dispozitiv"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Pentru a proiecta această sesiune, deschideți aplicația."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Aplicație necunoscută"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Nu mai proiectați"</string>
@@ -937,11 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Adăugați un card"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Nu adăugați un card"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Alegeți utilizatorul"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="few"><xliff:g id="COUNT_1">%s</xliff:g> aplicații sunt active</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> de aplicații sunt active</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aplicație este activă</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# aplicație este activă}few{# aplicații sunt active}other{# de aplicații sunt active}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Informații noi"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aplicații active"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Aceste aplicații sunt active și rulează, chiar dacă nu le folosiți. Astfel, funcțiile lor sunt îmbunătățite, dar autonomia bateriei poate fi afectată."</string>
@@ -968,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi indisponibil"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Modul Prioritate"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarmă setată"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Camera foto este dezactivată"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Microfonul este dezactivat"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Camera și microfonul sunt dezactivate"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notificare}few{# notificări}other{# de notificări}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Se difuzează"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Opriți difuzarea <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Dacă difuzați <xliff:g id="SWITCHAPP">%1$s</xliff:g> sau schimbați rezultatul, difuzarea actuală se va opri"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Difuzați <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Schimbați rezultatul"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Necunoscută"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EE, z LLL"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ro/tiles_states_strings.xml b/packages/SystemUI/res/values-ro/tiles_states_strings.xml
index 1ad0a75..7b7bb3a 100644
--- a/packages/SystemUI/res/values-ro/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ro/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Dezactivat"</item>
     <item msgid="460891964396502657">"Activat"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Indisponibil"</item>
+    <item msgid="8014986104355098744">"Dezactivat"</item>
+    <item msgid="5966994759929723339">"Activat"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 6b9e54e..89d7680 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Устройство заблокировано"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Сканирование лица"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Отправить"</string>
-    <string name="phone_label" msgid="5715229948920451352">"Открыть телефон."</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"включить аудиоподсказки"</string>
-    <string name="camera_label" msgid="8253821920931143699">"Открыть камеру."</string>
     <string name="cancel" msgid="1089011503403416730">"Отмена"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Подтвердить"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Повторить попытку"</string>
@@ -205,12 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Датчики отключены"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Удалить все уведомления"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one">Ещё <xliff:g id="NUMBER_1">%s</xliff:g> уведомление.</item>
-      <item quantity="few">Ещё <xliff:g id="NUMBER_1">%s</xliff:g> уведомления.</item>
-      <item quantity="many">Ещё <xliff:g id="NUMBER_1">%s</xliff:g> уведомлений.</item>
-      <item quantity="other">Ещё <xliff:g id="NUMBER_1">%s</xliff:g> уведомления.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Доступно ещё # уведомление.}one{Доступно ещё # уведомление.}few{Доступны ещё # уведомления.}many{Доступно ещё # уведомлений.}other{Доступно ещё # уведомления.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Выбрана только альбомная ориентация экрана."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Выбрана только книжная ориентация экрана."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Коробка со сладостями"</string>
@@ -228,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"Доступ к камере"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Доступ к микрофону"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Доступно"</string>
@@ -257,12 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Точка доступа"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Включение…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Экономия трафика вкл."</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">%d устройство</item>
-      <item quantity="few">%d устройства</item>
-      <item quantity="many">%d устройств</item>
-      <item quantity="other">%d устройства</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# устройство}one{# устройство}few{# устройства}many{# устройств}other{# устройства}}"</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>
@@ -319,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Нажмите ещё раз"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Проведите вверх, чтобы открыть"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Нажмите на значок разблокировки."</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Сканирование выполнено. Чтобы открыть, проведите вверх."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Сканирование выполнено. Нажмите на значок разблокировки."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Разблокировано сканированием лица. Нажмите, чтобы открыть."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Лицо распознано. Нажмите, чтобы открыть."</string>
@@ -355,13 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Продолжить сеанс?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Начать заново"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Да, продолжить"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Гостевой режим"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Включен гостевой режим"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Добавив нового пользователя, вы выйдете из гостевого режима. Все приложения и данные в текущем гостевом сеансе будут удалены."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Достигнут лимит"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">Можно добавить не более <xliff:g id="COUNT">%d</xliff:g> пользователя.</item>
-      <item quantity="few">Можно добавить не более <xliff:g id="COUNT">%d</xliff:g> пользователей.</item>
-      <item quantity="many">Можно добавить не более <xliff:g id="COUNT">%d</xliff:g> пользователей.</item>
-      <item quantity="other">Можно добавить не более <xliff:g id="COUNT">%d</xliff:g> пользователя.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Можно создать только одного пользователя.}one{Вы можете добавить до # пользователя.}few{Вы можете добавить до # пользователей.}many{Вы можете добавить до # пользователей.}other{Вы можете добавить до # пользователя.}}"</string>
     <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>
@@ -547,18 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Добавить напоминание"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Отменить"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Отложено на <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one">%d час</item>
-      <item quantity="few">%d часа</item>
-      <item quantity="many">%d часов</item>
-      <item quantity="other">%d часа</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one">%d минута</item>
-      <item quantity="few">%d минуты</item>
-      <item quantity="many">%d минут</item>
-      <item quantity="other">%d минуты</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# час}=2{# часа}one{# час}few{# часа}many{# часов}other{# часа}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# минута}one{# минута}few{# минуты}many{# минут}other{# минуты}}"</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">"Главный экран"</string>
@@ -707,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Оповещения"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Батарея"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Скриншоты"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Сообщения"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Приложения с мгновенным запуском"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Настройка"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Хранилище"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Подсказки"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Приложения с мгновенным запуском"</string>
@@ -781,12 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"включить или отключить"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Управление устройствами"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Чтобы добавить виджеты управления, выберите приложение"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one">Добавлен <xliff:g id="NUMBER_1">%s</xliff:g> элемент управления.</item>
-      <item quantity="few">Добавлено <xliff:g id="NUMBER_1">%s</xliff:g> элемента управления.</item>
-      <item quantity="many">Добавлено <xliff:g id="NUMBER_1">%s</xliff:g> элементов управления.</item>
-      <item quantity="other">Добавлено <xliff:g id="NUMBER_1">%s</xliff:g> элемента управления.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{Добавлен # элемент управления.}one{Добавлен # элемент управления.}few{Добавлено # элемента управления.}many{Добавлено # элементов управления.}other{Добавлено # элемента управления.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Удалено"</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>
@@ -858,7 +831,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="9099497976087485862">"Подключить новое устройство"</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>
@@ -943,12 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Добавить параметр"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Не добавлять"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Выберите профиль"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one">Активно <xliff:g id="COUNT_1">%s</xliff:g> приложение</item>
-      <item quantity="few">Активно <xliff:g id="COUNT_1">%s</xliff:g> приложения</item>
-      <item quantity="many">Активно <xliff:g id="COUNT_1">%s</xliff:g> приложений</item>
-      <item quantity="other">Активно <xliff:g id="COUNT_1">%s</xliff:g> приложения</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# приложение активно}one{# приложение активно}few{# приложения активны}many{# приложений активно}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>
@@ -975,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Сеть Wi‑Fi недоступна"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Режим приоритета"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Будильник установлен"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Камера отключена"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Микрофон отключен"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Камера и микрофон отключены"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# уведомление}one{# уведомление}few{# уведомления}many{# уведомлений}other{# уведомления}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Трансляция"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Остановить трансляцию \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Если вы начнете транслировать \"<xliff:g id="SWITCHAPP">%1$s</xliff:g>\" или смените целевое устройство, текущая трансляция прервется."</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Транслировать \"<xliff:g id="SWITCHAPP">%1$s</xliff:g>\""</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Транслировать на другое устройство"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Неизвестно"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"d MMM EEEE"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ru/tiles_states_strings.xml b/packages/SystemUI/res/values-ru/tiles_states_strings.xml
index e1ee39f..6255bd8 100644
--- a/packages/SystemUI/res/values-ru/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ru/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Отключен"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml
index be3a8ac..54df18c 100644
--- a/packages/SystemUI/res/values-si/strings.xml
+++ b/packages/SystemUI/res/values-si/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"උපාංගය අගුලු දමා ඇත"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"මුහුණ ස්කෑන් කිරීම"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"යවන්න"</string>
-    <string name="phone_label" msgid="5715229948920451352">"දුරකථනය විවෘත කරන්න"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"විවෘත හඬ සහාය"</string>
-    <string name="camera_label" msgid="8253821920931143699">"කැමරාව විවෘත කරන්න"</string>
     <string name="cancel" msgid="1089011503403416730">"අවලංගු කරන්න"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"තහවුරු කරන්න"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"නැවත උත්සාහ කරන්න"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"සංවේදක ක්‍රියාවිරහිතය සක්‍රියයි"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"සියලු දැනුම්දීම් හිස් කරන්න."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one">ඇතුළත තව දැනුම්දීම් <xliff:g id="NUMBER_1">%s</xliff:g>ක් ඇත.</item>
-      <item quantity="other">ඇතුළත තව දැනුම්දීම් <xliff:g id="NUMBER_1">%s</xliff:g>ක් ඇත.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{ඇතුළත තව # දැනුම්දීමක් ඇත.}one{ඇතුළත තව දැනුම්දීම් #ක් ඇත.}other{ඇතුළත තව දැනුම්දීම් #ක් ඇත.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"තිරය තිරස් දිශානතියෙහි අගුළු දමා ඇත."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"තිරය සිරස් දිශානතිය තුළ අගුළු වැටී ඇත."</string>
     <string name="dessert_case" msgid="9104973640704357717">"අතුරුපස අවස්තාව"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"කැමරා ප්‍රවේශය"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"මයික් ප්‍රවේශය"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"තිබේ"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"හොට්ස්පොට්"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"ක්‍රියාවිරහිත කරමින්…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"දත්ත සුරැකුම ක්‍රියාත්මකයි"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">උපාංග %d</item>
-      <item quantity="other">උපාංග %d</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# උපාංගයක්}one{උපාංග #ක්}other{උපාංග #ක්}}"</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>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"නැවත තට්ටු කරන්න"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"විවෘත කිරීමට ස්වයිප් කරන්න"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"විවෘත කිරීමට අගුලු හැරීමේ නිරූපකය ඔබන්න"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"මුහුණ මගින් අගුලු හරින ලදි. විවෘත කිරීමට ස්වයිප් කරන්න."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"මුහුණ මගින් අගුලු හරින ලදි. විවෘත කිරීමට අගුලු හැරීමේ නිරූපකය ඔබන්න."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"මුහුණ මගින් අගුලු හරින ලදි. විවෘත කිරීමට ඔබන්න."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"මුහුණ හඳුනා ගන්නා ලදි. විවෘත කිරීමට ඔබන්න."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"ඔබගේ සැසිය දිගටම කරගෙන යෑමට ඔබට අවශ්‍යද?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"යළි මුල සිට අරඹන්න"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"ඔව්, දිගටම කරගෙන යන්න"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"ආගන්තුක ප්‍රකාරය"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"ඔබ ආගන්තුක ප්‍රකාරයේ සිටී"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"නව පරිශීලකයෙකු එක් කිරීම ආගන්තුක මාදිලියෙන් පිටවී වත්මන් ආගන්තුක සැසියෙන් සියලුම යෙදුම් සහ දත්ත මකනු ඇත."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"පරිශීලක සීමාවට ළඟා විය"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">ඔබට පරිශීලකයින් <xliff:g id="COUNT">%d</xliff:g>ක් දක්වා එක් කළ හැකිය.</item>
-      <item quantity="other">ඔබට පරිශීලකයින් <xliff:g id="COUNT">%d</xliff:g>ක් දක්වා එක් කළ හැකිය.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{එක් පරිශීලකයෙක් පමණක් තැනීම කළ හැක.}one{ඔබට පරිශීලකයන් #ක් දක්වා එක් කළ හැක.}other{ඔබට පරිශීලකයන් #ක් දක්වා එක් කළ හැක.}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"මට මතක් කරන්න"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"පසුගමනය කරන්න"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g>ක් මදක් නතර කරන ලදී"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one">පැය %d</item>
-      <item quantity="other">පැය %d</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one">මිනිත්තු %d</item>
-      <item quantity="other">මිනිත්තු %d</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{පැය #ක්}=2{පැය #ක්}one{පැය #ක්}other{පැය #ක්}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{මිනිත්තු #ක්}one{මිනිත්තු #ක්}other{මිනිත්තු #ක්}}"</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>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"ඇඟවීම්"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"බැටරිය"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"තිර රු"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"පොදු පණිවිඩ"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"ක්ෂණික යෙදුම්"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"පිහිටුවීම"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"ගබඩාව"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"ඉඟි"</string>
     <string name="instant_apps" msgid="8337185853050247304">"ක්ෂණික යෙදුම්"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"ටොගල් කරන්න"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"උපාංග පාලන"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"පාලන එක් කිරීමට යෙදුම තෝරා ගන්න"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one">පාලන <xliff:g id="NUMBER_1">%s</xliff:g>ක් එක් කරන ලදී.</item>
-      <item quantity="other">පාලන <xliff:g id="NUMBER_1">%s</xliff:g>ක් එක් කරන ලදී.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# පාලනයක් එක් කර ඇත.}one{පාලන #ක් එක් කර ඇත.}other{පාලන #ක් එක් කර ඇත.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"ඉවත් කළා"</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>
@@ -846,7 +831,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="9099497976087485862">"නව උපාංගය යුගල කරන්න"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"ටයිල් එක් කරන්න"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"ටයිල් එක් නොකරන්න"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"පරිශීලක තෝරන්න"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one">යෙදුම් <xliff:g id="COUNT_1">%s</xliff:g>ක් සක්‍රියයි</item>
-      <item quantity="other">යෙදුම් <xliff:g id="COUNT_1">%s</xliff:g>ක් සක්‍රියයි</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi ලබා ගත නොහැකිය"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"ප්‍රමුඛතා ප්‍රකාරය"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"සීනුව සකසන ලදි"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"කැමරාව ක්‍රියා විරහිතයි"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"මයිකය ක්‍රියා විරහිතයි"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"කැමරාව සහ මයික් ක්‍රියාවිරහිතයි"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{දැනුම්දීම් #ක්}one{දැනුම්දීම් #ක්}other{දැනුම්දීම් #ක්}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"විකාශනය කරමින්"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"<xliff:g id="APP_NAME">%1$s</xliff:g> විකාශනය කිරීම නවත්වන්නද?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"ඔබ <xliff:g id="SWITCHAPP">%1$s</xliff:g> විකාශනය කළහොත් හෝ ප්‍රතිදානය වෙනස් කළහොත්, ඔබගේ වත්මන් විකාශනය නවතිනු ඇත."</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> විකාශනය"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"ප්‍රතිදානය වෙනස් කරන්න"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"නොදනී"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-si/tiles_states_strings.xml b/packages/SystemUI/res/values-si/tiles_states_strings.xml
index 8a16acb..327e0b9 100644
--- a/packages/SystemUI/res/values-si/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-si/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"ක්‍රියාවිරහිතයි"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index 7f2e71c..d1a3d39 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Zariadenie je uzamknuté"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Skenovanie tváre"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Odoslať"</string>
-    <string name="phone_label" msgid="5715229948920451352">"otvoriť telefón"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"otvoriť hlasového asistenta"</string>
-    <string name="camera_label" msgid="8253821920931143699">"spustiť fotoaparát"</string>
     <string name="cancel" msgid="1089011503403416730">"Zrušiť"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Potvrdiť"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Skúsiť znova"</string>
@@ -205,12 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Funkcia Senzory sú vypnuté je aktívna"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Vymazať všetky upozornenia."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="few">Skupina obsahuje ešte <xliff:g id="NUMBER_1">%s</xliff:g> upozornenia.</item>
-      <item quantity="many">Skupina obsahuje ešte <xliff:g id="NUMBER_1">%s</xliff:g> upozornenia.</item>
-      <item quantity="other">Skupina obsahuje ešte <xliff:g id="NUMBER_1">%s</xliff:g> upozornení.</item>
-      <item quantity="one">Skupina obsahuje ešte <xliff:g id="NUMBER_0">%s</xliff:g> upozornenie.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{# ďalšie upozornenie v skupine.}few{# ďalšie upozornenia v skupine.}many{# more notifications inside.}other{# ďalších upozornení v skupine.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Obrazovka je uzamknutá v orientácii na šírku."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Obrazovka je uzamknutá v orientácii na výšku."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Pult s dezertami"</string>
@@ -228,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automatické otáčanie"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automatické otáčanie obrazovky"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Poloha"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Šetrič obrazovky"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Prístup ku kamere"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Prístup k mikrofónu"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"K dispozícii"</string>
@@ -257,12 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Hotspot"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Zapína sa…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Šetrič dát – zapnutý"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="few">%d zariadenia</item>
-      <item quantity="many">%d zariadenia</item>
-      <item quantity="other">%d zariadení</item>
-      <item quantity="one">%d zariadenie</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# zariadenie}few{# zariadenia}many{# devices}other{# zariadení}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Baterka"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Fotoaparát sa používa"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Mobilné dáta"</string>
@@ -319,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Klepnite znova"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Otvorte potiahnutím prstom nahor"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Otvorte klepnutím na ikonu odomknutia"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Odomknuté tvárou. Otvoríte potiahnutím nahor."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Odomknuté tvárou. Otvorte klepnutím na ikonu odomknutia."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Odomknuté tvárou. Otvorte stlačením."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Tvár bola rozpoznaná. Otvorte stlačením."</string>
@@ -355,13 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Chcete v relácii pokračovať?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Začať odznova"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Áno, pokračovať"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Režim pre hostí"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Ste v režime pre hostí"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Ak pridáte nového používatelia, ukončí sa režim pre hostí a odstránia sa všetky aplikácie a údaje z aktuálnej relácie hosťa."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Dosiahnutý limit počtu používateľov"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="few">Môžete pridať maximálne <xliff:g id="COUNT">%d</xliff:g> používateľov.</item>
-      <item quantity="many">You can add up to <xliff:g id="COUNT">%d</xliff:g> users.</item>
-      <item quantity="other">Môžete pridať maximálne <xliff:g id="COUNT">%d</xliff:g> používateľov.</item>
-      <item quantity="one">Môžete vytvoriť iba jedného používateľa.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Môžete vytvoriť iba jedného používateľa.}few{Môžete pridať až # používateľov.}many{You can add up to # users.}other{Môžete pridať až # používateľov.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Odstrániť používateľa?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Všetky aplikácie a údaje tohto používateľa budú odstránené."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Odstrániť"</string>
@@ -547,18 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Pripomenúť"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Späť"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Stlmené na <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="few">%d hodiny</item>
-      <item quantity="many">%d hodiny</item>
-      <item quantity="other">%d hodín</item>
-      <item quantity="one">%d hodina</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="few">%d minúty</item>
-      <item quantity="many">%d minúty</item>
-      <item quantity="other">%d minút</item>
-      <item quantity="one">%d minúta</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# hodina}=2{# hodiny}few{# hodiny}many{# hodiny}other{# hodín}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minúta}few{# minúty}many{# minúty}other{# minút}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Šetrič batérie"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Tlačidlo <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Domov"</string>
@@ -707,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Upozornenia"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Batéria"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Snímky obrazovky"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Všeobecné správy"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Okamžité aplikácie"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Nastavenie"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Úložisko"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Tipy"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Okamžité aplikácie"</string>
@@ -781,12 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"prepínač"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Ovládanie zariadení"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Vyberte aplikáciu, ktorej ovládače si chcete pridať"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="few">Boli pridané <xliff:g id="NUMBER_1">%s</xliff:g> ovládacie prvky.</item>
-      <item quantity="many"><xliff:g id="NUMBER_1">%s</xliff:g> controls added.</item>
-      <item quantity="other">Bolo pridaných <xliff:g id="NUMBER_1">%s</xliff:g> ovládacích prvkov.</item>
-      <item quantity="one">Bol pridaný <xliff:g id="NUMBER_0">%s</xliff:g> ovládací prvok.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{Bol pridaný # ovládací prvok.}few{Boli pridané # ovládacie prvky.}many{# controls added.}other{Bolo pridaných # ovládacích prvkov.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Odstránené"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Pridané medzi obľúbené"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Pridané medzi obľúbené, pozícia <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -858,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"Počet vybraných zariadení: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(odpojené)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Nedá sa prepnúť. Zopakujte klepnutím."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Spárovať nové zariadenie"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Pripojiť zariadenie"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Ak chcete túto reláciu prenášať, otvorte aplikáciu."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Neznáma aplikácia"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Zastaviť prenos"</string>
@@ -943,12 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Pridať kartu"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Nepridať kartu"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Vyberte používateľa"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="few"><xliff:g id="COUNT_1">%s</xliff:g> aplikácie sú aktívne</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%s</xliff:g> apps are active</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aplikácií je aktívnych</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aplikácia je aktívna</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# aplikácia je aktívna}few{# aplikácie sú aktívne}many{# apps are active}other{# aplikácií je aktívnych}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Nové informácie"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktívne aplikácie"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Tieto aplikácie sú spustené a aktívne, aj keď ich nepoužívate. Zlepšuje to ich funkčnosť, ale môže to mať vplyv aj na výdrž batérie."</string>
@@ -975,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi nie je k dispozícii"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Režim priority"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Budík je nastavený"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Kamera je vypnutá"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mikrofón je vypnutý"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Kamera a mikrofón sú vypnuté"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# upozornenie}few{# upozornenia}many{# notifications}other{# upozornení}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Vysiela"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Chcete zastaviť vysielanie aplikácie <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Ak vysielate aplikáciu <xliff:g id="SWITCHAPP">%1$s</xliff:g> alebo zmeníte výstup, aktuálne vysielanie bude zastavené"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Vysielanie aplikácie <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Zmena výstupu"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Neznáme"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, d. MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-sk/tiles_states_strings.xml b/packages/SystemUI/res/values-sk/tiles_states_strings.xml
index dcdfb3a..3cbde1c 100644
--- a/packages/SystemUI/res/values-sk/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-sk/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Vypnuté"</item>
     <item msgid="460891964396502657">"Zapnuté"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Nedostupné"</item>
+    <item msgid="8014986104355098744">"Vypnuté"</item>
+    <item msgid="5966994759929723339">"Zapnuté"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index dbb0942..1cf1380 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Naprava je zaklenjena."</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Optično branje obraza"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Pošlji"</string>
-    <string name="phone_label" msgid="5715229948920451352">"odpri telefon"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"odpri glasovnega pomočnika"</string>
-    <string name="camera_label" msgid="8253821920931143699">"odpri fotoaparat"</string>
     <string name="cancel" msgid="1089011503403416730">"Prekliči"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Potrdite"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Poskusi znova"</string>
@@ -205,12 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Izklop za tipala je aktiven"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Izbriši vsa obvestila."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"in <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one">Notri je še <xliff:g id="NUMBER_1">%s</xliff:g> obvestilo.</item>
-      <item quantity="two">Notri sta še <xliff:g id="NUMBER_1">%s</xliff:g> obvestili.</item>
-      <item quantity="few">Notri so še <xliff:g id="NUMBER_1">%s</xliff:g> obvestila.</item>
-      <item quantity="other">Notri je še <xliff:g id="NUMBER_1">%s</xliff:g> obvestil.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Notri je še # obvestilo.}one{Notri je še # obvestilo.}two{Notri sta še # obvestili.}few{Notri so še # obvestila.}other{Notri je še # obvestil.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Zaslon je zaklenjen v ležeči usmerjenosti."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Zaslon je zaklenjen v pokončni usmerjenosti."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Vitrina za sladice"</string>
@@ -228,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Samodejno sukanje"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Samodejno sukanje zaslona"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Lokacija"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Ohranjevalnik zaslona"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Dostop do fotoaparata"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Dostop do mikrofona"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Na voljo"</string>
@@ -257,12 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Dostopna točka"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Vklapljanje …"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Varč. s pod. je vkl."</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">%d naprava</item>
-      <item quantity="two">%d napravi</item>
-      <item quantity="few">%d naprave</item>
-      <item quantity="other">%d naprav</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# naprava}one{# naprava}two{# napravi}few{# naprave}other{# naprav}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Svetilka"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Fotoaparat je v uporabi"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Prenos podatkov v mobilnem omrežju"</string>
@@ -319,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Znova se dotaknite možnosti"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Povlecite navzgor, da odprete"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Za odpiranje pritisnite ikono za odklepanje."</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Odklenjeno z obrazom. Povlecite navzgor, da odprete."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Odklenjeno z obrazom. Za odpiranje pritisnite ikono za odklepanje."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Odklenjeno z obrazom. Pritisnite za odpiranje."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Obraz je prepoznan. Pritisnite za odpiranje."</string>
@@ -355,13 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Želite nadaljevati sejo?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Začni znova"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Da, nadaljuj"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Način za goste"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Ste v načinu za goste"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Če dodate novega uporabnika, se bo način za goste zaprl, aplikacije in podatki v trenutni seji gosta pa bodo izbrisani."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Omejitev uporabnikov je dosežena"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">Dodate lahko do <xliff:g id="COUNT">%d</xliff:g> uporabnika.</item>
-      <item quantity="two">Dodate lahko do <xliff:g id="COUNT">%d</xliff:g> uporabnika.</item>
-      <item quantity="few">Dodate lahko do <xliff:g id="COUNT">%d</xliff:g> uporabnike.</item>
-      <item quantity="other">Dodate lahko do <xliff:g id="COUNT">%d</xliff:g> uporabnikov.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Ustvariti je mogoče samo enega uporabnika.}one{Dodate lahko največ # uporabnika.}two{Dodate lahko največ # uporabnika.}few{Dodate lahko največ # uporabnike.}other{Dodate lahko največ # uporabnikov.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Želite odstraniti uporabnika?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Vse aplikacije in podatki tega uporabnika bodo izbrisani."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Odstrani"</string>
@@ -547,18 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Opomni me"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Razveljavi"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Preloženo za <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one">%d ura</item>
-      <item quantity="two">%d uri</item>
-      <item quantity="few">%d ure</item>
-      <item quantity="other">%d ur</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one">%d minuta</item>
-      <item quantity="two">%d minuti</item>
-      <item quantity="few">%d minute</item>
-      <item quantity="other">%d minut</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# ura}=2{# uri}one{# ura}two{# uri}few{# ure}other{# ur}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minuta}one{# minuta}two{# minuti}few{# minute}other{# minut}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Varčevanje z energijo baterije"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Gumb <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Začetek"</string>
@@ -707,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Opozorila"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Baterija"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Posnetki zaslona"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Splošna sporočila"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Nenamestljive aplikacije"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Nastavitev"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Shramba"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Namigi"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Nenamestljive aplikacije"</string>
@@ -781,12 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"preklop"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Kontrolniki naprave"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Izberite aplikacijo za dodajanje kontrolnikov"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> kontrolnik dodan.</item>
-      <item quantity="two"><xliff:g id="NUMBER_1">%s</xliff:g> kontrolnika dodana.</item>
-      <item quantity="few"><xliff:g id="NUMBER_1">%s</xliff:g> kontrolniki dodani.</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> kontrolnikov dodanih.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# kontrolnik je dodan.}one{# kontrolnik je dodan.}two{# kontrolnika sta dodana.}few{# kontrolniki so dodani.}other{# kontrolnikov je dodanih.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Odstranjeno"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Dodano med priljubljene"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Dodano med priljubljene, položaj <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -858,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"Izbranih je toliko naprav: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(povezava je prekinjena)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Preklop ni mogoč. Če želite poskusiti znova, se dotaknite."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Seznanitev nove naprave"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Povezovanje naprave"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Če želite predvajati to sejo, odprite aplikacijo."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Neznana aplikacija"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Ustavi predvajanje"</string>
@@ -943,12 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Dodaj ploščico"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Ne dodaj ploščice"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Izberite uporabnika"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> aplikacija je aktivna</item>
-      <item quantity="two"><xliff:g id="COUNT_1">%s</xliff:g> aplikaciji sta aktivni</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%s</xliff:g> aplikacije so aktivne</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aplikacij je aktivnih</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# aplikacija je aktivna.}one{# aplikacija je aktivna.}two{# aplikaciji sta aktivni.}few{# aplikacije so aktivne.}other{# aplikacij je aktivnih.}}"</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 aplikacije so aktivne in se izvajajo, tudi ko jih ne uporabljate. To sicer izboljša njihovo delovanje, vendar lahko hkrati vpliva na čas delovanja baterije."</string>
@@ -975,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi ni na voljo."</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Prednostni način"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarm je nastavljen."</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Fotoaparat je izklopljen"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mikrofon je izklopljen"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Fotoaparat in mikrofon sta izklopljena."</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# obvestilo}one{# obvestilo}two{# obvestili}few{# obvestila}other{# obvestil}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Oddajanje"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Želite ustaviti oddajanje aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Če oddajate aplikacijo <xliff:g id="SWITCHAPP">%1$s</xliff:g> ali spremenite izhod, bo trenutno oddajanje ustavljeno."</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Oddajaj aplikacijo <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Sprememba izhoda"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Neznano"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, d. MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-sl/tiles_states_strings.xml b/packages/SystemUI/res/values-sl/tiles_states_strings.xml
index f1ebee4..e720819 100644
--- a/packages/SystemUI/res/values-sl/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-sl/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Izklopljeno"</item>
     <item msgid="460891964396502657">"Vklopljeno"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Ni na voljo"</item>
+    <item msgid="8014986104355098744">"Izklopljeno"</item>
+    <item msgid="5966994759929723339">"Vklopljeno"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml
index c3c638a..71ba302 100644
--- a/packages/SystemUI/res/values-sq/strings.xml
+++ b/packages/SystemUI/res/values-sq/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Pajisja është e kyçur"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Po skanon fytyrën"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Dërgo"</string>
-    <string name="phone_label" msgid="5715229948920451352">"hap telefonin"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"hap ndihmën zanore"</string>
-    <string name="camera_label" msgid="8253821920931143699">"hap kamerën"</string>
     <string name="cancel" msgid="1089011503403416730">"Anulo"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Konfirmo"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Provo përsëri"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Çaktivizimi i sensorëve aktiv"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Pastro të gjitha njoftimet."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> njoftime të tjera në brendësi.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> njoftim tjetër në brendësi.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{# njoftim tjetër në brendësi.}other{# njoftime të tjera në brendësi.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Ekrani është i kyçur në orientimin horizontal."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Ekrani është i kyçur në orientimin vertikal."</string>
     <string name="dessert_case" msgid="9104973640704357717">"\"Kutia e ëmbëlsirës\""</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Rrotullim automatik"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Rrotullimi automatik i ekranit"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Vendndodhja"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Mbrojtësi i ekranit"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Qasja te kamera"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Qasja te mikrofoni"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"E disponueshme"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Qasje në zona publike interneti"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Po aktivizohet…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Kursyesi i të dhënave është aktiv"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d pajisje</item>
-      <item quantity="one">%d pajisje</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# pajisje}other{# pajisje}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Elektriku"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Kamera në përdorim"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Të dhënat celulare"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Trokit sërish"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Rrëshqit lart për ta hapur"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Shtyp ikonën e shkyçjes për ta hapur"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"U shkyç me fytyrë. Rrëshqit shpejt lart për ta hapur."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"U shkyç me fytyrë. Shtyp ikonën e shkyçjes për ta hapur."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"U shkyç me fytyrë. Shtyp për ta hapur."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Fytyra u njoh. Shtyp për ta hapur."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Dëshiron ta vazhdosh sesionin tënd?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Fillo nga e para"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Po, vazhdo"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Modaliteti \"vizitor\""</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Je në modalitetin \"vizitor\""</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Shtimi i një përdoruesi të ri do të të nxjerrë nga modaliteti \"vizitor\" dhe do të fshijë të gjitha aplikacionet dhe të dhënat nga sesioni aktual për vizitorë."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"U arrit kufiri i përdoruesve"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">Mund të shtosh deri në <xliff:g id="COUNT">%d</xliff:g> përdorues.</item>
-      <item quantity="one">Mund të krijohet vetëm një përdorues.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Mund të krijohet vetëm një përdorues.}other{Mund të shtosh deri në # përdorues.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Të hiqet ky përdorues?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Të gjitha aplikacionet dhe të dhënat e këtij përdoruesi do të fshihen."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Hiqe"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Më kujto"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Zhbëj"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"U shty për <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d orë</item>
-      <item quantity="one">%d orë</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d minuta</item>
-      <item quantity="one">%d minutë</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# orë}=2{# orë}other{# orë}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minutë}other{# minuta}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Kursyesi i baterisë"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Butoni <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Kreu"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Sinjalizimet"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Bateria"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Pamje ekrani"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Mesazhe të përgjithshme"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Aplikacionet e çastit"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Konfigurimi"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Hapësira ruajtëse"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Sugjerimet"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Aplikacionet e çastit"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"aktivizo/çaktivizo"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Kontrollet e pajisjes"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Zgjidh aplikacionin për të shtuar kontrollet"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other">U shtuan <xliff:g id="NUMBER_1">%s</xliff:g> kontrolle.</item>
-      <item quantity="one">U shtua <xliff:g id="NUMBER_0">%s</xliff:g> kontroll.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{U shtua # kontroll.}other{U shtuan # kontrolle.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"E hequr"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"E shtuar te të preferuarat"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"E shtuar te të preferuarat, pozicioni <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> pajisje të zgjedhura"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(shkëputur)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Nuk mund të ndërrohet. Trokit për të provuar përsëri."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Çifto pajisjen e re"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Lidh një pajisje"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Hap aplikacionin për të transmetuar këtë seancë."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Aplikacion i panjohur"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Ndalo transmetimin"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Shto një pllakëz"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Mos e shto pllakëzën"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Zgjidh përdoruesin"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> aplikacione janë aktive</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> aplikacion është aktiv</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# aplikacion është aktiv}other{# aplikacione janë aktive}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Informacion i ri"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aplikacionet aktive"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Këto aplikacione janë aktive dhe funksionojnë edhe kur nuk i përdor ato. Kjo përmirëson funksionalitetin e tyre, por mund të ndikojë edhe te kohëzgjatja e baterisë."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi nuk ofrohet"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Modaliteti \"Me përparësi\""</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarmi është caktuar"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Kamera është joaktive"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mikrofoni është joaktiv"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Kamera dhe mikrofoni janë joaktivë"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# njoftim}other{# njoftime}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Po transmeton"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Të ndalohet transmetimi i <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Nëse transmeton <xliff:g id="SWITCHAPP">%1$s</xliff:g> ose ndryshon daljen, transmetimi yt aktual do të ndalojë"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Transmeto <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Ndrysho daljen"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"I panjohur"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-sq/tiles_states_strings.xml b/packages/SystemUI/res/values-sq/tiles_states_strings.xml
index e24abf6..7a09f24 100644
--- a/packages/SystemUI/res/values-sq/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-sq/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Joaktiv"</item>
     <item msgid="460891964396502657">"Aktiv"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Nuk ofrohet"</item>
+    <item msgid="8014986104355098744">"Joaktiv"</item>
+    <item msgid="5966994759929723339">"Aktiv"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index a06931c..a72f817 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Уређај је закључан"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Скенирање лица"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Пошаљи"</string>
-    <string name="phone_label" msgid="5715229948920451352">"отвори телефон"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"отвори гласовну помоћ"</string>
-    <string name="camera_label" msgid="8253821920931143699">"отвори камеру"</string>
     <string name="cancel" msgid="1089011503403416730">"Откажи"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Потврди"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Пробај поново"</string>
@@ -205,11 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Сензори су искључени"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Обриши сва обавештења."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"и још <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one">Још <xliff:g id="NUMBER_1">%s</xliff:g> обавештење у групи.</item>
-      <item quantity="few">Још <xliff:g id="NUMBER_1">%s</xliff:g> обавештења у групи.</item>
-      <item quantity="other">Још <xliff:g id="NUMBER_1">%s</xliff:g> обавештења у групи.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Унутра је још # обавештење.}one{Унутра је још # обавештење.}few{Унутра су још # обавештења.}other{Унутра је још # обавештења.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Екран је закључан у хоризонталном положају."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Екран је закључан у вертикалном положају."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Витрина са посластицама"</string>
@@ -227,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"Приступ камери"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Приступ микрофону"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Доступно"</string>
@@ -256,11 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Хотспот"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Укључује се..."</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Уштеда података је укључена"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">%d уређај</item>
-      <item quantity="few">%d уређаја</item>
-      <item quantity="other">%d уређаја</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# уређај}one{# уређај}few{# уређаја}other{# уређаја}}"</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>
@@ -317,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Додирните поново"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Превуците нагоре да бисте отворили"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Притисните икону откључавања да бисте отворили."</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Откључано је лицем. Превуците нагоре да бисте отворили."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Откључано је лицем. Притисните икону откључавања да бисте отворили."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Откључано је лицем. Притисните да бисте отворили."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Лице је препознато. Притисните да бисте отворили."</string>
@@ -353,12 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Желите ли да наставите сесију?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Почни из почетка"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Да, настави"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Режим госта"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Користите режим госта"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Додавањем новог корисника изаћи ћете из режима госта и избрисаћете све апликације и податке из актуелне сесије госта."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Достигнут максимални број корисника"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">Можете да додате највише <xliff:g id="COUNT">%d</xliff:g> корисника.</item>
-      <item quantity="few">Можете да додате највише <xliff:g id="COUNT">%d</xliff:g> корисника.</item>
-      <item quantity="other">Можете да додате највише <xliff:g id="COUNT">%d</xliff:g> корисника.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Можете да направите само једног корисника.}one{Можете да додате највише # корисника.}few{Можете да додате највише # корисника.}other{Можете да додате највише # корисника.}}"</string>
     <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>
@@ -544,16 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Подсети ме"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Опозови"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Одложено је за <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one">%d сат</item>
-      <item quantity="few">%d сата</item>
-      <item quantity="other">%d сати</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one">%d минут</item>
-      <item quantity="few">%d минута</item>
-      <item quantity="other">%d минута</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# сат}=2{# сата}one{# сат}few{# сата}other{# сати}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# минут}one{# минут}few{# минута}other{# минута}}"</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">"Тастер Почетна"</string>
@@ -702,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Обавештења"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Батерија"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Снимци екрана"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Опште поруке"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Инстант апликације"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Подешавање"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Меморијски простор"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Савети"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Инстант апликације"</string>
@@ -776,11 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"укључите/искључите"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Контроле уређаја"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Одаберите апликацију за додавање контрола"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> контрола је додата.</item>
-      <item quantity="few"><xliff:g id="NUMBER_1">%s</xliff:g> контроле су додате.</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> контрола је додато.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# контрола је додата.}one{# контрола је додата.}few{# контроле су додате.}other{# контрола је додато.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Уклоњено"</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>
@@ -852,7 +831,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="9099497976087485862">"Упари нови уређај"</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>
@@ -937,11 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Додај плочицу"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Не додај плочицу"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Изаберите корисника"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> апликација је активна</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%s</xliff:g> апликације су активне</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> апликација је активно</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# апликација је активна}one{# апликација је активна}few{# апликације су активне}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>
@@ -968,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"WiFi није доступан"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Приоритетни режим"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Аларм је подешен"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Камера је искључена"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Микрофон је искључен"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Камера и микрофон су искључени"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# обавештење}one{# обавештење}few{# обавештења}other{# обавештења}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Емитовање"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Желите да зауставите емитовање апликације <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Ако емитујете апликацију <xliff:g id="SWITCHAPP">%1$s</xliff:g> или промените излаз, актуелно емитовање ће се зауставити"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Емитујте апликацију <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Промените излаз"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Непознато"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"ДДД, д. МММ"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"с:мин"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"ч:мин"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-sr/tiles_states_strings.xml b/packages/SystemUI/res/values-sr/tiles_states_strings.xml
index 0cef5a6..dace491 100644
--- a/packages/SystemUI/res/values-sr/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-sr/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Искључено"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 3c6d61d..96114e0 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Enheten är låst"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Registrerar ansikte"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Skicka"</string>
-    <string name="phone_label" msgid="5715229948920451352">"öppna mobilen"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"öppna röstassistenten"</string>
-    <string name="camera_label" msgid="8253821920931143699">"öppna kameran"</string>
     <string name="cancel" msgid="1089011503403416730">"Avbryt"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Bekräfta"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Försök igen"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Sensorer har inaktiverats"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Ta bort alla meddelanden."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"<xliff:g id="NUMBER">%s</xliff:g> till"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> fler aviseringar i gruppen.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> till avisering i gruppen.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{# till avisering i gruppen.}other{# till aviseringar i gruppen.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Bildskärmens riktning är nu låst i liggande format."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Bildskärmens riktning är nu låst i stående format."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Dessertdisken"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Rotera automatiskt"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Rotera skärmen automatiskt"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Plats"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Skärmsläckare"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Kameraåtkomst"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Mikrofonåtkomst"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Tillgänglig"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Surfzon"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Aktiverar …"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Databesparing på"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d enheter</item>
-      <item quantity="one">%d enhet</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# enhet}other{# enheter}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Ficklampa"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Kameran används"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Mobildata"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Tryck igen"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Öppna genom att svepa uppåt"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Tryck på ikonen lås upp för att öppna"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Upplåst med ansiktslås. Öppna genom att svepa uppåt."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Upplåst med ansiktslås. Tryck på ikonen lås upp för att öppna."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Upplåst med ansiktslås. Tryck för att öppna."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Ansiktet har identifierats. Tryck för att öppna."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Vill du fortsätta sessionen?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Börja om"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Ja, fortsätt"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Gästläge"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Du är i gästläge"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Om du lägger till en ny användare avslutas gästläget och alla appar och all data från den aktuella gästsessionen raderas."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Användargränsen har nåtts"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">Det går att lägga till upp till <xliff:g id="COUNT">%d</xliff:g> användare.</item>
-      <item quantity="one">Det går bara att skapa en användare.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Högst en användare kan skapas.}other{Du kan lägga till upp till # användare.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Vill du ta bort användaren?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Alla appar och all data som tillhör den här användaren raderas."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Ta bort"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Påminn mig"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Ångra"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Snoozad i <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d timmar</item>
-      <item quantity="one">%d timme</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d minuter</item>
-      <item quantity="one">%d minut</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# timme}=2{# timmar}other{# timmar}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minut}other{# minuter}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Batterisparläge"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Knappen <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Start"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Aviseringar"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Batteri"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Skärmbilder"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Allmänna meddelanden"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant Apps"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Konfigurering"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Lagring"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Tips"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Snabbappar"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"aktivera och inaktivera"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Enhetsstyrning"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Välj en app om du vill lägga till snabbkontroller"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> kontroller har lagts till.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> kontroll har lagts till.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# kontroll har lagts till.}other{# kontroller har lagts till.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Har tagits bort"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Har lagts till som favorit"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Har lagts till som favorit, plats <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> enheter har valts"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(frånkopplad)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Misslyckat byte. Tryck och försök igen."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Parkoppla en ny enhet"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Anslut en enhet"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Öppna appen om du vill casta den här sessionen."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Okänd app"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Sluta casta"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Lägg till ruta"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Lägg inte till ruta"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Välj användare"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> appar är aktiva</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> app är aktiv</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# app är aktiv}other{# appar är aktiva}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Ny information"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Aktiva appar"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Dessa appar är aktiva och körs även när du inte använder dem. Detta hjälper dem att fungera bättre men batteritiden kan påverkas."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wifi är inte tillgängligt"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Prioritetsläge"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarmet är aktiverat"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Kameran är av"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mikrofonen är av"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Kameran och mikrofonen är avstängda"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# avisering}other{# aviseringar}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Sänder"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Vill du sluta sända från <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Om en utsändning från <xliff:g id="SWITCHAPP">%1$s</xliff:g> pågår eller om du byter ljudutgång avbryts den nuvarande utsändningen"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Sänd från <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Byt ljudutgång"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Okänt"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, d MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h.mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk.mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-sv/tiles_states_strings.xml b/packages/SystemUI/res/values-sv/tiles_states_strings.xml
index 410a6bc..9e69b00 100644
--- a/packages/SystemUI/res/values-sv/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-sv/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Av"</item>
     <item msgid="460891964396502657">"På"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Inte tillgängligt"</item>
+    <item msgid="8014986104355098744">"Av"</item>
+    <item msgid="5966994759929723339">"På"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index 385f535..88ab84c 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Kifaa kimefungwa"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Inachanganua uso"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Tuma"</string>
-    <string name="phone_label" msgid="5715229948920451352">"fungua simu"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"fungua mapendekezo ya sauti"</string>
-    <string name="camera_label" msgid="8253821920931143699">"fungua kamera"</string>
     <string name="cancel" msgid="1089011503403416730">"Ghairi"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Thibitisha"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Jaribu tena"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Kipengele cha kuzima vitambuzi kimewashwa"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Futa arifa zote."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">Kuna arifa <xliff:g id="NUMBER_1">%s</xliff:g> zaidi katika kikundi.</item>
-      <item quantity="one">Kuna arifa <xliff:g id="NUMBER_0">%s</xliff:g> zaidi katika kikundi.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Kuna arifa # zaidi ndani ya kikundi.}other{Kuna arifa # zaidi ndani ya kikundi.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Skrini imefungwa sasa katika uelekezo wa mandhari."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Skrini imefungwa katika uelekeo wa picha."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Sanduku la Vitindamlo"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Zungusha kiotomatiki"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Skrini ijizungushe kiotomatiki"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Mahali"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Taswira ya skrini"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Ufikiaji wa kamera"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Ufikiaji wa maikrofoni"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Unapatikana"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Mtandaopepe"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Inawasha..."</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Kiokoa Data kimewashwa"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">Vifaa %d</item>
-      <item quantity="one">Kifaa %d</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{Kifaa #}other{Vifaa #}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Tochi"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Kamera inatumika"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Data ya simu"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Gusa tena"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Telezesha kidole juu ili ufungue"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Bonyeza aikoni ya kufungua ili ufungue"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Imefunguliwa kwa kutumia uso wako. Telezesha kidole juu ili ufungue."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Imefunguliwa kwa kutumia uso wako. Bonyeza aikoni ya kufungua ili ufungue."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Imefunguliwa kwa kutumia uso wako. Bonyeza ili ufungue."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Uso umetambuliwa. Bonyeza ili ufungue."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Je, unataka kuendelea na kipindi chako?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Anza upya"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Ndiyo, endelea"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Matumizi ya wageni"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Unatumia hali ya wageni"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Kuongeza mtumiaji mpya kutaondoa matumizi ya wageni yaliyopo na kufuta programu na data kutoka kwenye kipindi cha mgeni cha sasa."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Umefikia kima cha juu cha watumiaji"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">Unaruhusiwa kuongeza hadi watumiaji <xliff:g id="COUNT">%d</xliff:g>.</item>
-      <item quantity="one">Unaruhusiwa kuongeza mtumiaji mmoja pekee.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Unaweza kuweka mtumiaji mmoja pekee.}other{Unaweza kuweka hadi watumiaji #.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Je, ungependa kuondoa mtumiaji?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Programu na data yote ya mtumiaji huyu itafutwa."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Ondoa"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Nikumbushe"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Tendua"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Imeahirishwa kwa <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">Saa %d</item>
-      <item quantity="one">Saa %d</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">Dakika %d</item>
-      <item quantity="one">Dakika %d</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{Saa #}=2{Saa #}other{Saa #}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{Dakika #}other{Dakika #}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Kiokoa Betri"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Kitufe cha <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Mwanzo"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Arifa"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Betri"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Picha za skrini"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Ujumbe wa Jumla"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Programu zinazofunguka papo hapo"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Weka mipangilio"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Hifadhi"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Vidokezo"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Programu Zinazofunguka Papo Hapo"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"geuza"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Vidhibiti vya vifaa"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Chagua programu ili uweke vidhibiti"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other">Umeweka vidhibiti <xliff:g id="NUMBER_1">%s</xliff:g>.</item>
-      <item quantity="one">Umeweka kidhibiti <xliff:g id="NUMBER_0">%s</xliff:g>.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{Umeweka kidhibiti #.}other{Umeweka vidhibiti #.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Kimeondolewa"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Kimewekwa kwenye vipendwa"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Kimewekwa kwenye vipendwa, nafasi ya <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"Umechagua vifaa <xliff:g id="COUNT">%1$d</xliff:g>"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(imetenganishwa)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Imeshindwa kubadilisha. Gusa ili ujaribu tena."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Oanisha kifaa kipya"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Unganisha kifaa"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Ili utume kipindi hiki, tafadhali fungua programu."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Programu isiyojulikana"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Acha kutuma"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Kiongeze"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Kisiongezwe"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Chagua mtumiaji"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other">Programu <xliff:g id="COUNT_1">%s</xliff:g> zinatumika</item>
-      <item quantity="one">Programu <xliff:g id="COUNT_0">%s</xliff:g> inatumika</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{Programu # inatumika}other{Programu # zinatumika}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Maelezo mapya"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Programu zinazotumika"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Programu hizi zinaendelea kufanya kazi, hata wakati huzitumii. Hali hii huboresha utendaji wa programu hizo, lakini pia inaweza kuathiri muda wa matumizi ya betri."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi-Fi haipatikani"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Hali ya kipaumbele"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Kengele imewekwa"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Kamera imezimwa"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Maikrofoni imezimwa"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Kamera na maikrofoni zimezimwa"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{Arifa #}other{Arifa #}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Inaarifu"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Ungependa kusimamisha utangazaji kwenye <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Ikiwa unatangaza kwenye <xliff:g id="SWITCHAPP">%1$s</xliff:g> au unabadilisha maudhui, tangazo lako la sasa litasimamishwa"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Tangaza kwenye <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Badilisha maudhui"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Haijulikani"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, d MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"saa:dk"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:dk"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-sw/tiles_states_strings.xml b/packages/SystemUI/res/values-sw/tiles_states_strings.xml
index 79d29ab..2f765ef 100644
--- a/packages/SystemUI/res/values-sw/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-sw/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Imezimwa"</item>
     <item msgid="460891964396502657">"Imewashwa"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Haipatikani"</item>
+    <item msgid="8014986104355098744">"Imezimwa"</item>
+    <item msgid="5966994759929723339">"Imewashwa"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-sw600dp-land/dimens.xml b/packages/SystemUI/res/values-sw600dp-land/dimens.xml
index 6c42073..d638c9d 100644
--- a/packages/SystemUI/res/values-sw600dp-land/dimens.xml
+++ b/packages/SystemUI/res/values-sw600dp-land/dimens.xml
@@ -47,6 +47,8 @@
 
     <dimen name="lockscreen_shade_max_over_scroll_amount">32dp</dimen>
 
+    <dimen name="status_view_margin_horizontal">8dp</dimen>
+
     <!-- Distance that the full shade transition takes in order to complete by tapping on a button
          like "expand". -->
     <dimen name="lockscreen_shade_transition_by_tap_distance">200dp</dimen>
diff --git a/packages/SystemUI/res/values-sw600dp-port/dimens.xml b/packages/SystemUI/res/values-sw600dp-port/dimens.xml
index 589d12f..347cf29 100644
--- a/packages/SystemUI/res/values-sw600dp-port/dimens.xml
+++ b/packages/SystemUI/res/values-sw600dp-port/dimens.xml
@@ -21,5 +21,10 @@
     <dimen name="keyguard_status_view_bottom_margin">40dp</dimen>
     <dimen name="bouncer_user_switcher_y_trans">20dp</dimen>
 
+    <!-- qs_tiles_page_horizontal_margin should be margin / 2, otherwise full space between two
+         pages is margin * 2, and that makes tiles page not appear immediately after user swipes to
+         the side -->
+    <dimen name="qs_tiles_page_horizontal_margin">32dp</dimen>
+
     <dimen name="qqs_layout_padding_bottom">16dp</dimen>
 </resources>
diff --git a/packages/SystemUI/res/values-sw600dp/config.xml b/packages/SystemUI/res/values-sw600dp/config.xml
index 36cc0ad..c0071cb 100644
--- a/packages/SystemUI/res/values-sw600dp/config.xml
+++ b/packages/SystemUI/res/values-sw600dp/config.xml
@@ -40,4 +40,6 @@
 
     <bool name="config_use_large_screen_shade_header">true</bool>
 
+    <!-- Whether to show the side fps hint while on bouncer -->
+    <bool name="config_show_sidefps_hint_on_bouncer">true</bool>
 </resources>
diff --git a/packages/SystemUI/res/values-sw720dp-land/dimens.xml b/packages/SystemUI/res/values-sw720dp-land/dimens.xml
index f45f106d..868c003 100644
--- a/packages/SystemUI/res/values-sw720dp-land/dimens.xml
+++ b/packages/SystemUI/res/values-sw720dp-land/dimens.xml
@@ -25,6 +25,8 @@
 
     <dimen name="status_bar_header_height_keyguard">56dp</dimen>
 
+    <dimen name="status_view_margin_horizontal">24dp</dimen>
+
     <dimen name="qs_media_session_height_expanded">251dp</dimen>
     <dimen name="qs_content_horizontal_padding">40dp</dimen>
     <dimen name="qs_horizontal_margin">40dp</dimen>
diff --git a/packages/SystemUI/res/values-sw720dp-port/dimens.xml b/packages/SystemUI/res/values-sw720dp-port/dimens.xml
index 2abc9e3..a0bf072 100644
--- a/packages/SystemUI/res/values-sw720dp-port/dimens.xml
+++ b/packages/SystemUI/res/values-sw720dp-port/dimens.xml
@@ -25,9 +25,16 @@
     <dimen name="keyguard_status_view_bottom_margin">80dp</dimen>
     <dimen name="bouncer_user_switcher_y_trans">90dp</dimen>
 
+    <dimen name="large_screen_shade_header_left_padding">24dp</dimen>
     <dimen name="qqs_layout_padding_bottom">40dp</dimen>
 
     <dimen name="notification_panel_margin_horizontal">80dp</dimen>
     <dimen name="notification_side_paddings">40dp</dimen>
+
+    <!-- qs_tiles_page_horizontal_margin should be margin / 2, otherwise full space between two
+     pages is margin * 2, and that makes tiles page not appear immediately after user swipes to the
+     side -->
+    <dimen name="qs_tiles_page_horizontal_margin">60dp</dimen>
+
     <dimen name="notification_section_divider_height">16dp</dimen>
 </resources>
diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml
index 934800e..25dde54 100644
--- a/packages/SystemUI/res/values-ta/strings.xml
+++ b/packages/SystemUI/res/values-ta/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"சாதனம் பூட்டப்பட்டுள்ளது"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"முகத்தை ஸ்கேன் செய்கிறது"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"அனுப்பு"</string>
-    <string name="phone_label" msgid="5715229948920451352">"ஃபோனைத் திற"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"குரல் உதவியைத் திற"</string>
-    <string name="camera_label" msgid="8253821920931143699">"கேமராவைத் திற"</string>
     <string name="cancel" msgid="1089011503403416730">"ரத்துசெய்"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"உறுதிப்படுத்துக"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"மீண்டும் முயல்க"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"’சென்சார்கள் ஆஃப்’ செயலில் உள்ளது"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"எல்லா அறிவிப்புகளையும் அழி."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">உள்ளே மேலும் <xliff:g id="NUMBER_1">%s</xliff:g> அறிவிப்புகள் உள்ளன.</item>
-      <item quantity="one">உள்ளே மேலும் <xliff:g id="NUMBER_0">%s</xliff:g> அறிவிப்பு உள்ளது.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{குழுவில் மேலும் # அறிவிப்பு உள்ளது.}other{குழுவில் மேலும் # அறிவிப்புகள் உள்ளன.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"நிலத்தோற்ற திசையமைப்பில் திரைப் பூட்டப்பட்டுள்ளது."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"உருவப்பட திசையமைப்பில் திசை பூட்டப்பட்டுள்ளது."</string>
     <string name="dessert_case" msgid="9104973640704357717">"இனிப்பு வடிவங்கள்"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"கேமரா அணுகல்"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"மைக் அணுகல்"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"கிடைக்கிறது"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"ஹாட்ஸ்பாட்"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"ஆன் செய்கிறது…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"டேட்டா சேவர்: ஆன்"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d சாதனங்கள்</item>
-      <item quantity="one">%d சாதனம்</item>
-    </plurals>
+    <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_camera_in_use" msgid="4820591564526512571">"கேமரா உபயோகத்திலுள்ளது"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"மொபைல் டேட்டா"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"மீண்டும் தட்டவும்"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"திறப்பதற்கு மேல் நோக்கி ஸ்வைப் செய்யவும்"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"திறக்க, அன்லாக் ஐகானை அழுத்தவும்"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"முகத்தால் அன்லாக் செய்யப்பட்டது திறக்க மேல்நோக்கி ஸ்வைப்செய்க"</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"முகம் மூலம் அன்லாக் செய்யப்பட்டது. திறக்க, அன்லாக் ஐகானை அழுத்துக."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"முகம் மூலம் அன்லாக் செய்யப்பட்டது. திறக்க அழுத்தவும்."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"முகம் அங்கீகரிக்கப்பட்டது. திறக்க அழுத்தவும்."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"உங்கள் அமர்வைத் தொடர விருப்பமா?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"மீண்டும் தொடங்கு"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"தொடரவும்"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"கெஸ்ட் பயன்முறை"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"கெஸ்ட் பயன்முறையில் உள்ளீர்கள்"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"புதிய பயனரைச் சேர்த்தால் கெஸ்ட் பயன்முறையில் இருந்து வெளியேற்றப்படுவீர்கள். மேலும் தற்போதைய கெஸ்ட் அமர்வின் ஆப்ஸ் மற்றும் தரவு அனைத்தும் நீக்கப்படும்."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"பயனர் வரம்பை அடைந்துவிட்டீர்கள்"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> பயனர்கள் வரை சேர்க்க முடியும்.</item>
-      <item quantity="one">ஒரு பயனரை மட்டுமே சேர்க்க முடியும்.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{ஒரு பயனரை மட்டுமே சேர்க்க முடியும்.}other{# பயனர்கள் வரை சேர்க்கலாம்.}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"எனக்கு நினைவூட்டு"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"செயல்தவிர்"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"உறக்கநிலையில் வைத்திருந்த நேரம்: <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d மணிநேரம்</item>
-      <item quantity="one">%d மணிநேரம்</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d நிமிடங்கள்</item>
-      <item quantity="one">%d நிமிடம்</item>
-    </plurals>
+    <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="keyboard_key_button_template" msgid="8005673627272051429">"<xliff:g id="NAME">%1$s</xliff:g> பட்டன்"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"ஹோம்"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"விழிப்பூட்டல்கள்"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"பேட்டரி"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"ஸ்கிரீன் ஷாட்டுகள்"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"பொதுச் செய்திகள்"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"இன்ஸ்டண்ட் ஆப்ஸ்"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"அமைவு"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"சேமிப்பிடம்"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"குறிப்புகள்"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant Apps"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"நிலைமாற்று"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"சாதனக் கட்டுப்பாடுகள்"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"கட்டுப்பாடுகளைச் சேர்க்க வேண்டிய ஆப்ஸைத் தேர்ந்தெடுங்கள்"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> கட்டுப்பாடுகள் சேர்க்கப்பட்டன.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> கட்டுப்பாடு சேர்க்கப்பட்டது.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# கட்டுப்பாடு சேர்க்கப்பட்டது.}other{# கட்டுப்பாடுகள் சேர்க்கப்பட்டன.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"அகற்றப்பட்டது"</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>
@@ -846,7 +831,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="9099497976087485862">"புதிய சாதனத்தை இணைத்தல்"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"கட்டத்தைச் சேர்"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"கட்டத்தை சேர்க்காதே"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"பயனரைத் தேர்வுசெய்க"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> ஆப்ஸ் செயலிலுள்ளன</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> ஆப்ஸ் செயலிலுள்ளது</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"வைஃபை கிடைக்கவில்லை"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"முன்னுரிமைப் பயன்முறை"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"அலாரம் அமைக்கப்பட்டுள்ளது"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"கேமரா முடக்கப்பட்டுள்ளது"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"மைக் முடக்கப்பட்டுள்ளது"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"கேமராவும் மைக்கும் ஆஃப் செய்யப்பட்டுள்ளன"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# அறிவிப்பு}other{# அறிவிப்புகள்}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"ஒலிபரப்புதல்"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸ் ஒலிபரப்பப்படுவதை நிறுத்தவா?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"நீங்கள் <xliff:g id="SWITCHAPP">%1$s</xliff:g> ஆப்ஸை ஒலிபரப்பினாலோ அவுட்புட்டை மாற்றினாலோ உங்களின் தற்போதைய ஒலிபரப்பு நிறுத்தப்படும்"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> ஆப்ஸை ஒலிபரப்பு"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"அவுட்புட்டை மாற்று"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"தெரியவில்லை"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ta/tiles_states_strings.xml b/packages/SystemUI/res/values-ta/tiles_states_strings.xml
index 52fca12..41f6412 100644
--- a/packages/SystemUI/res/values-ta/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ta/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"முடக்கப்பட்டுள்ளது"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml
index e7e72ce..820abdd 100644
--- a/packages/SystemUI/res/values-te/strings.xml
+++ b/packages/SystemUI/res/values-te/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"పరికరం లాక్ చేయబడింది"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"ముఖాన్ని స్కాన్ చేస్తోంది"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"పంపు"</string>
-    <string name="phone_label" msgid="5715229948920451352">"ఫోన్‌ను తెరువు"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"వాయిస్ అసిస్టెంట్‌ను తెరువు"</string>
-    <string name="camera_label" msgid="8253821920931143699">"కెమెరాను తెరవండి"</string>
     <string name="cancel" msgid="1089011503403416730">"రద్దు చేయండి"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"నిర్ధారించు"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"మళ్లీ ప్రయత్నించు"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"సెన్సార్‌లు ఆఫ్ యాక్టివ్‌లో ఉంది"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"అన్ని నోటిఫికేషన్‌లను క్లియర్ చేయండి."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">లోపల మరో <xliff:g id="NUMBER_1">%s</xliff:g> నోటిఫికేషన్‌లు ఉన్నాయి.</item>
-      <item quantity="one">లోపల మరో <xliff:g id="NUMBER_0">%s</xliff:g> నోటిఫికేషన్ ఉంది.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{లోపల మరో # నోటిఫికేషన్ ఉంది.}other{లోపల మరో # నోటిఫికేషన్‌లు ఉన్నాయి.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"స్క్రీన్ ల్యాండ్‌స్కేప్ దృగ్విన్యాసంలో లాక్ చేయబడుతుంది."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"స్క్రీన్ పోర్ట్రెయిట్ దృగ్విన్యాసంలో లాక్ చేయబడుతుంది."</string>
     <string name="dessert_case" msgid="9104973640704357717">"డెజర్ట్ కేస్"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"కెమెరా యాక్సెస్"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"మైక్ యాక్సెస్"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"అందుబాటులో ఉంది"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"హాట్‌స్పాట్"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"ఆన్ చేస్తోంది…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"డేటా సేవర్ ఆన్‌లో ఉంది"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d పరికరాలు</item>
-      <item quantity="one">%d పరికరం</item>
-    </plurals>
+    <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_camera_in_use" msgid="4820591564526512571">"కెమెరా ఉపయోగంలో ఉంది"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"మొబైల్ డేటా"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"మళ్లీ ట్యాప్ చేయండి"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"తెరవడానికి, పైకి స్వైప్ చేయండి"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"తెరవడానికి అన్‌లాక్ చిహ్నాన్ని నొక్కండి"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"ముఖం ద్వారా అన్‌లాక్ అయింది. తెరవడానికి, పైకి స్వైప్ చేయండి."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"ముఖం ద్వారా అన్‌లాక్ చేయబడింది. తెరవడానికి అన్‌లాక్ చిహ్నాన్ని నొక్కండి."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"ముఖం ద్వారా అన్‌లాక్ చేయబడింది. తెరవడానికి నొక్కండి."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"ముఖం గుర్తించబడింది. తెరవడానికి నొక్కండి."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"మీరు మీ సెషన్‌ని కొనసాగించాలనుకుంటున్నారా?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"మొదటి నుండి ప్రారంభించు"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"అవును, కొనసాగించు"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"గెస్ట్ మోడ్"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"మీరు గెస్ట్ మోడ్‌లో ఉన్నారు"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"కొత్త యూజర్‌ను జోడించడం వలన గెస్ట్ మోడ్ నుండి వైదొలుగుతుంది. అలాగే ప్రస్తుత గెస్ట్ సెషన్ నుండి అన్ని యాప్‌లతో పాటు మొత్తం డేటా తొలగించబడుతుంది."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"వినియోగదారు పరిమితిని చేరుకున్నారు"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">మీరు <xliff:g id="COUNT">%d</xliff:g> వినియోగదారుల వరకు జోడించవచ్చు.</item>
-      <item quantity="one">ఒక్క వినియోగదారుని మాత్రమే సృష్టించవచ్చు.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{ఒక యూజర్‌ను మాత్రమే క్రియేట్ చేయవచ్చు.}other{మీరు గరిష్టంగా # మంది యూజర్‌లను జోడించవచ్చు.}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"నాకు గుర్తు చేయి"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"చర్య రద్దు చేయండి"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> వరకు తాత్కాలికంగా ఆపివేయబడింది"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d గంటలు</item>
-      <item quantity="one">%d గంట</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d నిమిషాలు</item>
-      <item quantity="one">%d నిమిషం</item>
-    </plurals>
+    <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="keyboard_key_button_template" msgid="8005673627272051429">"బటన్ <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"అలర్ట్‌లు"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"బ్యాటరీ"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"స్క్రీన్‌షాట్‌లు"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"సాధారణ మెసేజ్‌లు"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"ఇన్‌స్టంట్ యాప్‌లు"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"సెటప్ చేయండి"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"స్టోరేజ్"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"సూచనలు"</string>
     <string name="instant_apps" msgid="8337185853050247304">"ఇన్‌స్టంట్ యాప్‌లు"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"టోగుల్ చేయి"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"డివైజ్ కంట్రోల్స్"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"కంట్రోల్స్‌ను యాడ్ చేయడానికి యాప్‌ను ఎంచుకోండి"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> కంట్రోల్‌లు యాడ్ అయ్యాయి.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> కంట్రోల్ యాడ్ అయింది.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# కంట్రోల్ జోడించబడింది.}other{# కంట్రోల్స్ జోడించబడ్డాయి.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"తీసివేయబడింది"</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>
@@ -846,7 +831,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="9099497976087485862">"కొత్త పరికరాన్ని పెయిర్ చేయండి"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"టైల్‌ను జోడించండి"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"టైల్‌ను జోడించవద్దు"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"యూజర్‌ను ఎంచుకోండి"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> యాప్‌లు యాక్టివ్‌గా ఉన్నాయి</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> యాప్ యాక్టివ్‌గా ఉంది</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi అందుబాటులో లేదు"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"ముఖ్యమైన ఫైల్స్ మోడ్"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"అలారం సెట్ చేశాను"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"కెమెరా ఆఫ్‌లో ఉంది"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"మైక్ ఆఫ్‌లో ఉంది"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"కెమెరా, మైక్ ఆఫ్‌లో ఉన్నాయి"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# నోటిఫికేషన్}other{# నోటిఫికేషన్‌లు}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"ప్రసారం చేస్తోంది"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"<xliff:g id="APP_NAME">%1$s</xliff:g> ప్రసారం చేయడాన్ని ఆపివేయాలా?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"మీరు <xliff:g id="SWITCHAPP">%1$s</xliff:g> ప్రసారం చేస్తే లేదా అవుట్‌పుట్‌ను మార్చినట్లయితే, మీ ప్రస్తుత ప్రసారం ఆగిపోతుంది"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> ప్రసారం చేయండి"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"అవుట్‌పుట్‌ను మార్చండి"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"తెలియదు"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</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 6099792..44ba477 100644
--- a/packages/SystemUI/res/values-te/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-te/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"ఆఫ్"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-television/config.xml b/packages/SystemUI/res/values-television/config.xml
index 94f6c39..375bd39 100644
--- a/packages/SystemUI/res/values-television/config.xml
+++ b/packages/SystemUI/res/values-television/config.xml
@@ -22,7 +22,7 @@
 <resources>
     <!-- SystemUIFactory component -->
     <string name="config_systemUIFactoryComponent" translatable="false">
-        com.android.systemui.tv.TvSystemUIFactory
+        com.android.systemui.tv.TvSystemUIInitializer
     </string>
 
     <!-- Svelte specific logic, see RecentsConfiguration.SVELTE_* constants. -->
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 2d003db..9060b13 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"อุปกรณ์ถูกล็อก"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"กำลังสแกนใบหน้า"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"ส่ง"</string>
-    <string name="phone_label" msgid="5715229948920451352">"เปิดโทรศัพท์"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"เปิดตัวช่วยเสียง"</string>
-    <string name="camera_label" msgid="8253821920931143699">"เปิดกล้อง"</string>
     <string name="cancel" msgid="1089011503403416730">"ยกเลิก"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"ยืนยัน"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"ลองอีกครั้ง"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"\"ปิดเซ็นเซอร์\" เปิดใช้งานอยู่"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"ล้างการแจ้งเตือนทั้งหมด"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">มีการแจ้งเตือนอีก <xliff:g id="NUMBER_1">%s</xliff:g> รายการด้านใน</item>
-      <item quantity="one">มีการแจ้งเตือนอีก <xliff:g id="NUMBER_0">%s</xliff:g> รายการด้านใน</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{มีการแจ้งเตือนอีก # รายการด้านใน}other{มีการแจ้งเตือนอีก # รายการด้านใน}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"ขณะนี้หน้าจอถูกล็อกให้วางในแนวนอน"</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"ขณะนี้หน้าจอถูกล็อกให้วางในแนวตั้ง"</string>
     <string name="dessert_case" msgid="9104973640704357717">"ชั้นแสดงของหวาน"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"สิทธิ์เข้าถึงกล้อง"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"สิทธิ์เข้าถึงไมโครโฟน"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"พร้อมให้ใช้งาน"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"ฮอตสปอต"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"กำลังเปิด..."</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"เปิดการประหยัดเน็ตอยู่"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">อุปกรณ์ %d เครื่อง</item>
-      <item quantity="one">อุปกรณ์ %d เครื่อง</item>
-    </plurals>
+    <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_camera_in_use" msgid="4820591564526512571">"ใช้กล้องอยู่"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"เน็ตมือถือ"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"แตะอีกครั้ง"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"เลื่อนขึ้นเพื่อเปิด"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"กดไอคอนปลดล็อกเพื่อเปิด"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"ปลดล็อกด้วยใบหน้าแล้ว ปัดขึ้นเพื่อเปิด"</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"ปลดล็อกด้วยใบหน้าแล้ว กดไอคอนปลดล็อกเพื่อเปิด"</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"ปลดล็อกด้วยใบหน้าแล้ว กดเพื่อเปิด"</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"จดจำใบหน้าได้ กดเพื่อเปิด"</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"คุณต้องการอยู่ในเซสชันต่อไปไหม"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"เริ่มต้นใหม่"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"ใช่ ดำเนินการต่อ"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"โหมดผู้ใช้ชั่วคราว"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"คุณอยู่ในโหมดผู้ใช้ชั่วคราว"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"การเพิ่มผู้ใช้ใหม่จะเป็นการออกจากโหมดผู้ใช้ชั่วคราว และจะลบแอปและข้อมูลทั้งหมดจากเซสชันผู้ใช้ชั่วคราวในปัจจุบัน"</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"ถึงขีดจำกัดผู้ใช้แล้ว"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">คุณเพิ่มผู้ใช้ได้สูงสุด <xliff:g id="COUNT">%d</xliff:g> คน</item>
-      <item quantity="one">สร้างผู้ใช้ได้เพียง 1 คนเท่านั้น</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{สร้างผู้ใช้ได้เพียง 1 คนเท่านั้น}other{คุณเพิ่มผู้ใช้ได้สูงสุด # คน}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"เตือนฉัน"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"เลิกทำ"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"ปิดเสียงเตือนชั่วคราวไว้เป็นเวลา <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d ชั่วโมง</item>
-      <item quantity="one">%d ชั่วโมง</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d นาที</item>
-      <item quantity="one">%d นาที</item>
-    </plurals>
+    <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="keyboard_key_button_template" msgid="8005673627272051429">"ปุ่ม <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"การแจ้งเตือน"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"แบตเตอรี"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"ภาพหน้าจอ"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"ข้อความทั่วไป"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant Apps"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"ตั้งค่า"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"พื้นที่เก็บข้อมูล"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"คำแนะนำ"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant App"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"สลับ"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"ระบบควบคุมอุปกรณ์"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"เลือกแอปเพื่อเพิ่มตัวควบคุม"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other">เพิ่มตัวควบคุม <xliff:g id="NUMBER_1">%s</xliff:g> ตัวแล้ว</item>
-      <item quantity="one">เพิ่มตัวควบคุม <xliff:g id="NUMBER_0">%s</xliff:g> ตัวแล้ว</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{เพิ่มตัวควบคุม # ตัวแล้ว}other{เพิ่มตัวควบคุม # ตัวแล้ว}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"นำออกแล้ว"</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>
@@ -846,7 +831,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="9099497976087485862">"จับคู่อุปกรณ์ใหม่"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"เพิ่มองค์ประกอบ"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"ไม่เพิ่มองค์ประกอบ"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"เลือกผู้ใช้"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other">ทำงานอยู่ <xliff:g id="COUNT_1">%s</xliff:g> แอป</item>
-      <item quantity="one">ทำงานอยู่ <xliff:g id="COUNT_0">%s</xliff:g> แอป</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"ใช้ Wi‑Fi ไม่ได้"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"โหมดลำดับความสำคัญ"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"ตั้งปลุกแล้ว"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"กล้องปิดอยู่"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"ไมค์ปิดอยู่"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"กล้องและไมค์ปิดอยู่"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{การแจ้งเตือน # รายการ}other{การแจ้งเตือน # รายการ}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"กำลังออกอากาศ"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"หยุดการออกอากาศ <xliff:g id="APP_NAME">%1$s</xliff:g> ไหม"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"หากคุณออกอากาศ <xliff:g id="SWITCHAPP">%1$s</xliff:g> หรือเปลี่ยนแปลงเอาต์พุต การออกอากาศในปัจจุบันจะหยุดลง"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"ออกอากาศ <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"เปลี่ยนเอาต์พุต"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"ไม่ทราบ"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE d MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"HH:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-th/tiles_states_strings.xml b/packages/SystemUI/res/values-th/tiles_states_strings.xml
index 4565f35..9cd060f 100644
--- a/packages/SystemUI/res/values-th/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-th/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"ปิด"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 5e2fb53..6da2358 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Naka-lock ang device"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Sina-scan ang mukha"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Ipadala"</string>
-    <string name="phone_label" msgid="5715229948920451352">"buksan ang telepono"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"buksan ang voice assist"</string>
-    <string name="camera_label" msgid="8253821920931143699">"buksan ang camera"</string>
     <string name="cancel" msgid="1089011503403416730">"Kanselahin"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Kumpirmahin"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Subukang muli"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Aktibo ang i-off ang mga sensor"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"I-clear ang lahat ng notification."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one">May <xliff:g id="NUMBER_1">%s</xliff:g> pang notification sa loob.</item>
-      <item quantity="other">May <xliff:g id="NUMBER_1">%s</xliff:g> pang notification sa loob.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{May # pang notification sa loob.}one{May # pang notification sa loob.}other{May # pang notification sa loob.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Naka-lock ang screen sa pahigang oryentasyon."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Naka-lock ang screen sa patayong oryentasyon."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Dessert Case"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"I-auto rotate"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Awtomatikong i-rotate ang screen"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Lokasyon"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Screen saver"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Access sa camera"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Access sa mic"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Available"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Hotspot"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Ino-on…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Na-on ang Data Saver"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">%d device</item>
-      <item quantity="other">%d na device</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# device}one{# device}other{# na device}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Flashlight"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Ginagamit na camera"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Mobile data"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"I-tap ulit"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Mag-swipe pataas para buksan"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Pindutin ang icon ng unlock para buksan"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Na-unlock gamit ang mukha. Mag-swipe pataas para buksan."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Na-unlock gamit ang mukha. Pindutin ang icon ng unlock para buksan."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Na-unlock gamit ang mukha. Pindutin para buksan."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Nakilala ang mukha. Pindutin para buksan."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Gusto mo bang ipagpatuloy ang iyong session?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Magsimulang muli"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Oo, magpatuloy"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Guest mode"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Naka-guest mode ka"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Kapag nagdagdag ka ng bagong user, aalis sa guest mode at made-delete ang lahat ng app at data mula sa kasalukuyang session ng bisita."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Naabot na ang limitasyon sa user"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">Maaari kang magdagdag ng hanggang <xliff:g id="COUNT">%d</xliff:g> user.</item>
-      <item quantity="other">Maaari kang magdagdag ng hanggang <xliff:g id="COUNT">%d</xliff:g> na user.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Isang user lang ang puwedeng gawin.}one{Puwede kang magdagdag ng hanggang # user.}other{Puwede kang magdagdag ng hanggang # na user.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Gusto mo bang alisin ang user?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Made-delete ang lahat ng app at data ng user na ito."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Alisin"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Paalalahanan ako"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"I-undo"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Na-snooze ng <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one">%d oras</item>
-      <item quantity="other">%d na oras</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one">%d minuto</item>
-      <item quantity="other">%d na minuto</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# oras}=2{# oras}one{# oras}other{# na oras}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# minuto}one{# minuto}other{# na minuto}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Pantipid ng Baterya"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Button na <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Mga Alerto"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Baterya"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Mga Screenshot"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Mga Pangkalahatang Mensahe"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Instant Apps"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Setup"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Storage"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Mga Hint"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Instant Apps"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"i-toggle"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Mga kontrol ng device"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Pumili ng app para magdagdag ng mga kontrol"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> kontrol ang naidagdag.</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> na kontrol ang naidagdag.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{Nagdagdag ng # kontrol.}one{Nagdagdag ng # kontrol.}other{Nagdagdag ng # na kontrol.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Inalis"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Ginawang paborito"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Ginawang paborito, posisyon <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> (na) device ang napili"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(nadiskonekta)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Hindi makalipat. I-tap para subukan ulit."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Magpares ng bagong device"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Magkonekta ng device"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Para ma-cast ang session na ito, buksan ang app."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Hindi kilalang app"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Ihinto ang pag-cast"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Idagdag ang tile"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Huwag idagdag"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Pumili ng user"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> app ang aktibo</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> na app ang aktibo</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{Aktibo ang # app}one{Aktibo ang # app}other{Aktibo ang # na app}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Bagong impormasyon"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Mga aktibong app"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Aktibo at tumatakbo ang mga app na ito kahit na hindi mo ginagamit. Pinapahusay nito ang functionality ng mga app, pero posible rin itong makaapekto sa tagal ng baterya."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Hindi available ang Wi‑Fi"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Priority mode"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Nakatakda ang alarm"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Naka-off ang camera"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Naka-off ang mikropono"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Naka-off ang camera at mikropono"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# notification}one{# notification}other{# na notification}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Nagbo-broadcast"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Ihinto ang pag-broadcast ng <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Kung magbo-broadcast ka ng <xliff:g id="SWITCHAPP">%1$s</xliff:g> o babaguhin mo ang output, hihinto ang iyong kasalukuyang broadcast"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"I-broadcast ang <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Baguhin ang output"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Hindi alam"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-tl/tiles_states_strings.xml b/packages/SystemUI/res/values-tl/tiles_states_strings.xml
index 59fed0f..cd7dcf5 100644
--- a/packages/SystemUI/res/values-tl/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-tl/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Naka-off"</item>
     <item msgid="460891964396502657">"Naka-on"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Hindi available"</item>
+    <item msgid="8014986104355098744">"Naka-off"</item>
+    <item msgid="5966994759929723339">"Naka-on"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index b52d41d..a1fcb69 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Cihaz kilitlendi"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Yüz taranıyor"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Gönder"</string>
-    <string name="phone_label" msgid="5715229948920451352">"telefonu aç"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"sesli yardımı aç"</string>
-    <string name="camera_label" msgid="8253821920931143699">"kamerayı aç"</string>
     <string name="cancel" msgid="1089011503403416730">"İptal"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Onayla"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Tekrar dene"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Sensörler kapalı ayarı etkin"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Tüm bildirimleri temizle"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">Grup içinde <xliff:g id="NUMBER_1">%s</xliff:g> bildirim daha var.</item>
-      <item quantity="one">Grup içinde <xliff:g id="NUMBER_0">%s</xliff:g> bildirim daha var.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Grup içinde # bildirim daha var.}other{Grup içinde # bildirim daha var.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Ekran yatay yönde kilitlendi."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Ekran dikey yönde kilitlendi."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Tatlı Kutusu"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Otomatik döndür"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Ekranı otomatik döndür"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Konum"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Ekran koruyucu"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Kamera erişimi"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Mikrofon erişimi"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Kullanılabilir"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Hotspot"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Açılıyor…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Veri Tasarrufu açık"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d cihaz</item>
-      <item quantity="one">%d cihaz</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# cihaz}other{# cihaz}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Fener"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Kamera kullanımda"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Mobil veri"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Tekrar dokunun"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Açmak için yukarı kaydırın"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Açmak için Kilit açma simgesine basın"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Cihazın kilidini yüzünüzle açtınız. Açmak için yukarı kaydırın."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Kilit, yüzünüzle açıldı. Kilit açma simgesine basın."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Cihazın kilidini yüzünüzle açtınız. Açmak için basın."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Yüzünüz tanındı. Açmak için basın."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Oturumunuza devam etmek istiyor musunuz?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Baştan başla"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Evet, devam et"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Misafir modu"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Misafir modundasınız"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Yeni bir kullanıcı eklendiğinde misafir modundan çıkılarak mevcut misafir oturumundaki tüm uygulamalar ve veriler silinir."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Kullanıcı sınırına ulaşıldı"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">En fazla <xliff:g id="COUNT">%d</xliff:g> kullanıcı ekleyebilirsiniz.</item>
-      <item quantity="one">Yalnızca bir kullanıcı oluşturulabilir.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Yalnızca bir kullanıcı oluşturulabilir.}other{En çok # kullanıcı ekleyebilirsiniz.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Kullanıcı kaldırılsın mı?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Bu kullanıcının tüm uygulamaları ve verileri silinecek."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Kaldır"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Bana hatırlat"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Geri al"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> süreyle ertelendi"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d saat</item>
-      <item quantity="one">%d saat</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d dakika</item>
-      <item quantity="one">%d dakika</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# saat}=2{# saat}other{# saat}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# dakika}other{# dakika}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Pil Tasarrufu"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"<xliff:g id="NAME">%1$s</xliff:g> düğmesi"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Uyarılar"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Pil"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Ekran görüntüleri"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Genel Mesajlar"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Hazır Uygulamalar"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Kurulum"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Depolama alanı"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"İpuçları"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Hazır Uygulamalar"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"değiştir"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Cihaz denetimleri"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Denetim eklemek için uygulama seçin"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> kontrol eklendi.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> kontrol eklendi.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# kontrol eklendi.}other{# kontrol eklendi.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Kaldırıldı"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Favoriler listesine eklendi"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Favorilere eklendi, konum: <xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> cihaz seçildi"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(bağlantı kesildi)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Geçiş yapılamıyor. Tekrar denemek için dokunun."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Yeni cihaz eşle"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Cihaz bağla"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Bu oturumu yayınlamak için lütfen uygulamayı açın."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Bilinmeyen uygulama"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Yayını durdur"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Kart ekle"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Kart ekleme"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Kullanıcı seçin"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> uygulama etkin</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> uygulama etkin</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# uygulama etkin}other{# uygulama etkin}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Yeni bilgi"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Etkin uygulamalar"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Bu uygulamalar, kullanmadığınız zamanlarda bile etkin ve çalışır durumdadır. Bu durum daha iyi çalışmalarını sağlar ancak pil ömrünü de olumsuz etkileyebilir."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Kablosuz kullanılamıyor"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Öncelik modu"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Alarm kuruldu"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Kamera kapalı"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mikrofon kapalı"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Kamera ve mikrofon kapalı"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# bildirim}other{# bildirim}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Yayınlama"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"<xliff:g id="APP_NAME">%1$s</xliff:g> uygulamasında anons durdurulsun mu?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> uygulamasında anons yapar veya çıkışı değiştirirseniz mevcut anonsunuz duraklatılır"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> uygulamasında anons yapın"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Çıkışı değiştirme"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Bilinmiyor"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"d MMM, EEE"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:dd"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-tr/tiles_states_strings.xml b/packages/SystemUI/res/values-tr/tiles_states_strings.xml
index d06d727..28ba7dcb 100644
--- a/packages/SystemUI/res/values-tr/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-tr/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Kapalı"</item>
     <item msgid="460891964396502657">"Açık"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Kullanılamıyor"</item>
+    <item msgid="8014986104355098744">"Kapalı"</item>
+    <item msgid="5966994759929723339">"Açık"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index 51c61ce..970a14d 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Пристрій заблоковано"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Сканування обличчя"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Надіслати"</string>
-    <string name="phone_label" msgid="5715229948920451352">"відкрити телефон"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"запустити голосові підказки"</string>
-    <string name="camera_label" msgid="8253821920931143699">"відкрити камеру"</string>
     <string name="cancel" msgid="1089011503403416730">"Скасувати"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Підтвердити"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Повторити спробу"</string>
@@ -205,12 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Активовано вимкнення датчиків"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Очистити всі сповіщення."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one">Ще <xliff:g id="NUMBER_1">%s</xliff:g> сповіщення в групі.</item>
-      <item quantity="few">Ще <xliff:g id="NUMBER_1">%s</xliff:g> сповіщення в групі.</item>
-      <item quantity="many">Ще <xliff:g id="NUMBER_1">%s</xliff:g> сповіщень у групі.</item>
-      <item quantity="other">Ще <xliff:g id="NUMBER_1">%s</xliff:g> сповіщення в групі.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Ще # сповіщення в групі.}one{Ще # сповіщення в групі.}few{Ще # сповіщення в групі.}many{Ще # сповіщень у групі.}other{Ще # сповіщення в групі.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Екран заблоковано в альбомній орієнтації."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Екран заблоковано в книжковій орієнтації."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Вітрина десертів"</string>
@@ -228,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"Доступ до камери"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Доступ до мікрофона"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Дозволено"</string>
@@ -257,12 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Точка доступу"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Увімкнення…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Заощадження трафіку ввімкнено"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">%d пристрій</item>
-      <item quantity="few">%d пристрої</item>
-      <item quantity="many">%d пристроїв</item>
-      <item quantity="other">%d пристрою</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# пристрій}one{# пристрій}few{# пристрої}many{# пристроїв}other{# пристрою}}"</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>
@@ -319,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Натисніть знову"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Проведіть пальцем угору, щоб відкрити"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Щоб відкрити, натисніть значок розблокування."</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Розблоковано (фейсконтроль). Відкрити: проведіть угору."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Розблоковано (фейсконтроль). Натисніть значок розблокування."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Розблоковано (фейсконтроль). Натисніть, щоб відкрити."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Обличчя розпізнано. Натисніть, щоб відкрити."</string>
@@ -355,13 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Продовжити сеанс?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Почати знову"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Так, продовжити"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Режим гостя"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Ви ввійшли в режимі гостя"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Якщо додати нового користувача, ви вийдете з режиму гостя, а всі додатки й дані з поточного сеансу цього режиму буде видалено."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Ви досягли ліміту користувачів"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">Можна додати до <xliff:g id="COUNT">%d</xliff:g> користувача.</item>
-      <item quantity="few">Можна додати до <xliff:g id="COUNT">%d</xliff:g> користувачів.</item>
-      <item quantity="many">Можна додати до <xliff:g id="COUNT">%d</xliff:g> користувачів.</item>
-      <item quantity="other">Можна додати до <xliff:g id="COUNT">%d</xliff:g> користувача.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Можна створити лише одного користувача.}one{Можна додати щонайбільше # користувача.}few{Можна додати щонайбільше # користувачів.}many{Можна додати щонайбільше # користувачів.}other{Можна додати щонайбільше # користувача.}}"</string>
     <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>
@@ -547,18 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Нагадати"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Відмінити"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Відкладено на <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one">%d година</item>
-      <item quantity="few">%d години</item>
-      <item quantity="many">%d годин</item>
-      <item quantity="other">%d години</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one">%d хвилина</item>
-      <item quantity="few">%d хвилини</item>
-      <item quantity="many">%d хвилин</item>
-      <item quantity="other">%d хвилини</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# година}=2{# години}one{# година}few{# години}many{# годин}other{# години}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# хвилина}one{# хвилина}few{# хвилини}many{# хвилин}other{# хвилини}}"</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>
@@ -707,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Сповіщення"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Акумулятор"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Знімки екрана"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Загальні повідомлення"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Додатки з миттєвим запуском"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Налаштування"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Пам’ять"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Поради"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Додатки з миттєвим запуском"</string>
@@ -781,12 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"перемкнути"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Керування пристроями"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Виберіть, для якого додатка налаштувати елементи керування"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one">Додано <xliff:g id="NUMBER_1">%s</xliff:g> елемент керування.</item>
-      <item quantity="few">Додано <xliff:g id="NUMBER_1">%s</xliff:g> елементи керування.</item>
-      <item quantity="many">Додано <xliff:g id="NUMBER_1">%s</xliff:g> елементів керування.</item>
-      <item quantity="other">Додано <xliff:g id="NUMBER_1">%s</xliff:g> елемента керування.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{Додано # елемент керування.}one{Додано # елемент керування.}few{Додано # елементи керування.}many{Додано # елементів керування.}other{Додано # елемента керування.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Вилучено"</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>
@@ -858,7 +831,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="9099497976087485862">"Підключити новий пристрій"</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>
@@ -943,12 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Додати параметр"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Не додавати параметр"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Виберіть користувача"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one"><xliff:g id="COUNT_1">%s</xliff:g> додаток активний</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%s</xliff:g> додатки активні</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%s</xliff:g> додатків активні</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> додатка активні</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# додаток активний}one{# додаток активний}few{# додатки активні}many{# додатків активні}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>
@@ -975,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Мережа Wi-Fi недоступна"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Режим пріоритету"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Будильник установлено"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Камеру вимкнено"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Мікрофон вимкнено"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Камеру й мікрофон вимкнено"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# сповіщення}one{# сповіщення}few{# сповіщення}many{# сповіщень}other{# сповіщення}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Трансляція"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Зупинити трансляцію з додатка <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Якщо ви зміните додаток (<xliff:g id="SWITCHAPP">%1$s</xliff:g>) або аудіовихід, поточну трансляцію буде припинено"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Змінити додаток для трансляції на <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Змінити аудіовихід"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Невідомо"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, d MMM"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-uk/tiles_states_strings.xml b/packages/SystemUI/res/values-uk/tiles_states_strings.xml
index 040fb4d..3f6ca46 100644
--- a/packages/SystemUI/res/values-uk/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-uk/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Вимкнено"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml
index d2abb7a..2e7c3dff 100644
--- a/packages/SystemUI/res/values-ur/strings.xml
+++ b/packages/SystemUI/res/values-ur/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"آلہ مقفل کر دیا گیا"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"اسکیننگ چہرہ"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"بھیجیں"</string>
-    <string name="phone_label" msgid="5715229948920451352">"فون کھولیں"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"صوتی معاون کھولیں"</string>
-    <string name="camera_label" msgid="8253821920931143699">"کیمرا کھولیں"</string>
     <string name="cancel" msgid="1089011503403416730">"منسوخ کريں"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"تصدیق کریں"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"دوبارہ کوشش کریں"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"سینسرز آف فعال ہے"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"سبھی اطلاعات صاف کریں۔"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"<xliff:g id="NUMBER">%s</xliff:g> +"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">اندر <xliff:g id="NUMBER_1">%s</xliff:g> مزید اطلاعات ہیں۔ </item>
-      <item quantity="one">اندر <xliff:g id="NUMBER_0">%s</xliff:g> مزید اطلاع ہے۔</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{گروپ میں # مزید اطلاع ہے۔}other{گروپ میں # مزید اطلاعات ہے۔}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"اسکرین لینڈ اسکیپ سمت بندی میں مقفل ہے۔"</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"اسکرین پورٹریٹ سمت بندی میں مقفل ہے۔"</string>
     <string name="dessert_case" msgid="9104973640704357717">"ڈیزرٹ کیس"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"کیمرا تک رسائی"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"مائیکروفون تک رسائی"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"دستیاب ہے"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"ہاٹ اسپاٹ"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"آن ہو رہا ہے…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"ڈیٹا سیور آن ہے"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">‏%d آلات</item>
-      <item quantity="one">‏%d آلہ</item>
-    </plurals>
+    <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_camera_in_use" msgid="4820591564526512571">"کیمرا زیر استعمال ہے"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"موبائل ڈیٹا"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"دوبارہ تھپتھپائیں"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"کھولنے کے لیے اوپر سوائپ کريں"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"کھولنے کیلئے انلاک آئیکن دبائیں"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"چہرے سے غیر مقفل کیا گیا۔ کھولنے کے لیے اوپر سوائپ کريں۔"</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"چہرے سے انلاک کیا گیا۔ کھولنے کیلئے انلاک آئیکن دبائیں۔"</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"چہرے سے انلاک کیا گیا۔ کھولنے کے لیے دبائیں۔"</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"چہرے کی شناخت ہو گئی۔ کھولنے کے لیے دبائیں۔"</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"کیا آپ اپنا سیشن جاری رکھنا چاہتے ہیں؟"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"دوبارہ شروع کریں"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"ہاں، جاری رکھیں"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"مہمان وضع"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"آپ مہمان وضع میں ہیں"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"نئے صارف کو شامل کرنے سے مہمان وضع سے باہر نکل جائے گا اور موجودہ مہمان سیشن سے تمام ایپس اور ڈیٹا حذف ہو جائیں گے۔"</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"صارف کی حد مکمل ہو گئی"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">صرف <xliff:g id="COUNT">%d</xliff:g> صارفین بنائے جا سکتے ہیں۔</item>
-      <item quantity="one">صرف ایک صارف بنایا جا سکتا ہے۔</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{صرف ایک صارف بنایا جا سکتا ہے۔}other{آپ # تک صارفین شامل کر سکتے ہیں۔}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"مجھے یاد دلائیں"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"کالعدم کریں"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> کیلئے اسنوز کیا گیا"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">‏‎%d گھنٹے</item>
-      <item quantity="one">‏‎%d گھنٹہ</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">‏‎%d منٹ</item>
-      <item quantity="one">‏‎%d منٹ</item>
-    </plurals>
+    <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="keyboard_key_button_template" msgid="8005673627272051429">"بٹن <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"الرٹس"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"بیٹری"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"اسکرین شاٹس"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"عمومی پیغامات"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"فوری ایپس"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"سیٹ اپ"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"اسٹوریج"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"اشارات"</string>
     <string name="instant_apps" msgid="8337185853050247304">"فوری ایپس"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"ٹوگل کریں"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"آلہ کے کنٹرولز"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"کنٹرولز شامل کرنے کے لیے ایپ منتخب کریں"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> کنٹرولز شامل کر دیے گئے۔</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> کنٹرول شامل کر دیا گیا۔</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# کنٹرول کو شامل کیا گیا۔}other{# کنٹرولز کو شامل کیا گیا۔}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"ہٹا دیا گیا"</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>
@@ -846,7 +831,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="9099497976087485862">"نئے آلہ کا جوڑا بنائیں"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"ٹائل شامل کریں"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"ٹائل شامل نہ کریں"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"صارف منتخب کریں"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> ایپس فعال ہیں</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> ایپ فعال ہے</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"‏Wi-Fi دستیاب نہیں ہے"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"ترجیحی وضع"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"الارم سیٹ ہوگیا"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"کیمرا آف ہے"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"مائیک آف ہے"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"کیمرا اور مائیک آف ہیں"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# اطلاع}other{# اطلاعات}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>، <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"نشریات"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"<xliff:g id="APP_NAME">%1$s</xliff:g> براڈکاسٹنگ روکیں؟"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"اگر آپ <xliff:g id="SWITCHAPP">%1$s</xliff:g> براڈکاسٹ کرتے ہیں یا آؤٹ پٹ کو تبدیل کرتے ہیں تو آپ کا موجودہ براڈکاسٹ رک جائے گا"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> پر براڈکاسٹ کریں"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"آؤٹ پٹ تبدیل کریں"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"نامعلوم"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ur/tiles_states_strings.xml b/packages/SystemUI/res/values-ur/tiles_states_strings.xml
index 79d2cf6..05aa4e9 100644
--- a/packages/SystemUI/res/values-ur/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ur/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"آف"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml
index 293677a..8c1aff4 100644
--- a/packages/SystemUI/res/values-uz/strings.xml
+++ b/packages/SystemUI/res/values-uz/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Qurilma qulflandi"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Yuzni skanerlash"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Yuborish"</string>
-    <string name="phone_label" msgid="5715229948920451352">"telefonni ochish"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"ovozli yordamni yoqish"</string>
-    <string name="camera_label" msgid="8253821920931143699">"kamerani ochish"</string>
     <string name="cancel" msgid="1089011503403416730">"Bekor qilish"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"OK"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Qayta urinish"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Sensorlar nofaol ishlayapti"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Barcha eslatmalarni tozalash."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">Guruhda yana <xliff:g id="NUMBER_1">%s</xliff:g> ta bildirishnoma.</item>
-      <item quantity="one">Guruhda yana <xliff:g id="NUMBER_0">%s</xliff:g> ta bildirishnoma.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{Ichida yana # ta bildirishnoma bor.}other{Ichida yana # ta bildirishnoma bor.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Ekran eniga holatida qulflandi."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Ekran bo‘yiga holatida qulflandi."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Dessert Case"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Avto-burilish"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Ekranning avtomatik burilishi"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Joylashuv"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Ekran lavhasi"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Kameraga ruxsat"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Mikrofonga ruxsat"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Mavjud"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Hotspot"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Yoqilmoqda…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Trafik tejash yoniq"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d ta qurilma</item>
-      <item quantity="one">%d ta qurilma</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# ta qurilma}other{# ta qurilma}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Fonar"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Kamera ishlatilmoqda"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Mobil internet"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Yana bosing"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Ochish uchun tepaga suring"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Ochish uchun ochish belgisini bosing"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Yuz bilan ochildi. Ochish uchun tepaga suring."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Yuz orqali ochilgan. Ochish uchun ochish belgisini bosing."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Yuz orqali ochildi. Ochish uchun bosing."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Yuz aniqlandi. Ochish uchun bosing."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Seansni davom ettirmoqchimisiz?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Boshidan boshlansin"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Ha, davom ettirilsin"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Mehmon rejimi"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Mehmon rejimidasiz"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Yangi foydalanuvchi kiritilsa, mehmon rejimi tark etiladi va joriy mehmon seansidagi barcha ilova va ularning maʼlumotlari tozalanadi."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Limitga yetib keldi"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> tagacha foydalanuvchi qo‘shish mumkin.</item>
-      <item quantity="one">Faqat bitta foydalanuvchi yaratish mumkin.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Faqat bitta foydalanuvchi yaratish mumkin.}other{# tagacha foydalanuvchi kiritishingiz mumkin.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Foydalanuvchi olib tashlansinmi?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Ushbu foydalanuvchining barcha ilovalari va ma’lumotlari o‘chirib tashlanadi."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Olib tashlash"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Menga eslatilsin"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Qaytarish"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> muddatga kechiktirildi"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d soat</item>
-      <item quantity="one">%d soat</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d daqiqa</item>
-      <item quantity="one">%d daqiqa</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# soat}=2{# soat}other{# soat}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# daqiqa}other{# daqiqa}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Quvvat tejash"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"<xliff:g id="NAME">%1$s</xliff:g> tugmasi"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Bosh ekran"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Bildirishnomalar"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Batareya"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Skrinshotlar"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Umumiy xabarlar"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Darhol ochiladigan ilovalar"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Sozlash"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Xotira"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Maslahatlar"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Darhol ochiladigan ilovalar"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"oʻzgartirish"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Qurilmalarni boshqarish"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Boshqaruv elementlarini kiritish uchun ilovani tanlang"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> ta nazorat kiritilgan.</item>
-      <item quantity="one"><xliff:g id="NUMBER_0">%s</xliff:g> ta nazorat kiritilgan.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# ta boshqaruv elementi kiritildi.}other{# ta boshqaruv elementi kiritildi.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Olib tashlandi"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Saralanganlarga kiritilgan"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Saralanganlarga kiritilgan, <xliff:g id="NUMBER">%d</xliff:g>-joy"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"<xliff:g id="COUNT">%1$d</xliff:g> ta qurilma tanlandi"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(uzildi)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Xatolik. Qayta urinish uchun bosing."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Yangi qurilmani juftlash"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Qurilma ulash"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Bu seansni translatsiya qilish uchun ilovani oching."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Notanish ilova"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Toʻxtatish"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Tugma kiritish"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Tugma kiritilmasin"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Foydalanuvchini tanlang"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> ta ilova faol</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> ta ilova faol</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{# ta ilova faol}other{# ta ilova faol}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Yangi axborot"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Faol ilovalar"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Bu ilovalardan foydalanmasangiz ham ular faol va ishlamoqda. Bu ularning ishlashini yaxshilaydi, lekin batareya quvvatiga ham taʼsir qilishi mumkin."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi ishlamayapti"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Imtiyozli rejim"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Signal oʻrnatildi"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Kamera yoqilmagan"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Mikrofon yoqilmagan"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Kamera va mikrofon yoqilmagan"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# ta bildirishnoma}other{# ta bildirishnoma}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Signal uzatish"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga translatsiya toʻxtatilsinmi?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Agar <xliff:g id="SWITCHAPP">%1$s</xliff:g> ilovasiga translatsiya qilsangiz yoki ovoz chiqishini oʻzgartirsangiz, joriy translatsiya toʻxtab qoladi"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"<xliff:g id="SWITCHAPP">%1$s</xliff:g> ilovasiga translatsiya"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Ovoz chiqishini oʻzgartirish"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Noaniq"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"s:dd"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-uz/tiles_states_strings.xml b/packages/SystemUI/res/values-uz/tiles_states_strings.xml
index b687597..a84f769 100644
--- a/packages/SystemUI/res/values-uz/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-uz/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Oʻchiq"</item>
     <item msgid="460891964396502657">"Yoniq"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Bandman"</item>
+    <item msgid="8014986104355098744">"Oʻchiq"</item>
+    <item msgid="5966994759929723339">"Yoniq"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index af4bf0f..6f1e8f2 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Đã khóa thiết bị"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Quét tìm khuôn mặt"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Gửi"</string>
-    <string name="phone_label" msgid="5715229948920451352">"mở điện thoại"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"mở trợ lý thoại"</string>
-    <string name="camera_label" msgid="8253821920931143699">"mở máy ảnh"</string>
     <string name="cancel" msgid="1089011503403416730">"Hủy"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Xác nhận"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Thử lại"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Tùy chọn tắt cảm biến đang hoạt động"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Xóa tất cả thông báo."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">Còn <xliff:g id="NUMBER_1">%s</xliff:g> thông báo nữa bên trong.</item>
-      <item quantity="one">Còn <xliff:g id="NUMBER_0">%s</xliff:g> thông báo nữa bên trong.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{# thông báo khác bên trong.}other{# thông báo khác bên trong.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Màn hình hiện bị khóa theo hướng ngang."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Màn hình hiện bị khóa theo hướng dọc."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Tủ trưng bày bánh ngọt"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Tự động xoay"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Tự động xoay màn hình"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Vị trí"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Trình bảo vệ màn hình"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Truy cập máy ảnh"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Truy cập micrô"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Được phép"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"Điểm phát sóng"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Đang bật…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Trình tiết kiệm dữ liệu đang bật"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d thiết bị</item>
-      <item quantity="one">%d thiết bị</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{# thiết bị}other{# thiết bị}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"Đèn pin"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Máy ảnh đang được sử dụng"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Dữ liệu di động"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Nhấn lại"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Vuốt lên để mở"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Nhấn biểu tượng mở khoá để mở"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Đã mở khoá bằng khuôn mặt. Vuốt lên để mở"</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Đã mở khoá bằng khuôn mặt. Nhấn vào biểu tượng mở khoá để mở."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Đã mở khoá bằng khuôn mặt. Nhấn để mở."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Đã nhận diện khuôn mặt. Nhấn để mở."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Bạn có muốn tiếp tục phiên của mình không?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Bắt đầu lại"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Có, tiếp tục"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Chế độ khách"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Bạn đang ở chế độ khách"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Khi thêm người dùng mới, chế độ khách sẽ bị thoát và mọi ứng dụng cũng như dữ liệu trong phiên khách hiện tại sẽ bị xoá."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Đã đạt đến giới hạn người dùng"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">Bạn có thể thêm tối đa <xliff:g id="COUNT">%d</xliff:g> người dùng.</item>
-      <item quantity="one">Chỉ có thể tạo một người dùng.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Bạn chỉ có thể tạo một người dùng.}other{Bạn có thể thêm tối đa # người dùng.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Xóa người dùng?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Tất cả các ứng dụng và dữ liệu của người dùng này sẽ bị xóa."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Xóa"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Nhắc tôi"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Hủy"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Báo lại sau <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d giờ</item>
-      <item quantity="one">%d giờ</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d phút</item>
-      <item quantity="one">%d phút</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# giờ}=2{# giờ}other{# giờ}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{# phút}other{# phút}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Trình tiết kiệm pin"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Nút <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Cảnh báo"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Pin"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Ảnh chụp màn hình"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Thông báo chung"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Ứng dụng tức thì"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Thiết lập"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Bộ nhớ"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Gợi ý"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Ứng dụng tức thì"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"bật/tắt"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Điều khiển thiết bị"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Chọn ứng dụng để thêm các tùy chọn điều khiển"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other">Đã thêm <xliff:g id="NUMBER_1">%s</xliff:g> tùy chọn điều khiển.</item>
-      <item quantity="one">Đã thêm <xliff:g id="NUMBER_0">%s</xliff:g> tùy chọn điều khiển.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{Đã thêm # chế độ điều khiển.}other{Đã thêm # chế độ điều khiển.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Đã xóa"</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>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"Đã chọn <xliff:g id="COUNT">%1$d</xliff:g> thiết bị"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(đã ngắt kết nối)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Không thể chuyển đổi. Hãy nhấn để thử lại."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Ghép nối thiết bị mới"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Kết nối thiết bị"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Vui lòng mở ứng dụng để truyền phiên này."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"Ứng dụng không xác định"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Dừng truyền"</string>
@@ -931,10 +916,7 @@
     <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>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other">Ứng dụng <xliff:g id="COUNT_1">%s</xliff:g> đang hoạt động</item>
-      <item quantity="one">Ứng dụng <xliff:g id="COUNT_0">%s</xliff:g> đang hoạt động</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Không có Wi‑Fi"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Chế độ ưu tiên"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"Đã đặt chuông báo"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Camera đang tắt"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Micrô đã bị tắt"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Máy ảnh và micrô đang tắt"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# thông báo}other{# thông báo}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Phát sóng"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Dừng phát <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Nếu bạn phát <xliff:g id="SWITCHAPP">%1$s</xliff:g> hoặc thay đổi đầu ra, phiên truyền phát hiện tại sẽ dừng"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Phát <xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Thay đổi đầu ra"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Không xác định"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-vi/tiles_states_strings.xml b/packages/SystemUI/res/values-vi/tiles_states_strings.xml
index 827c72a..482a32f 100644
--- a/packages/SystemUI/res/values-vi/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-vi/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Đang tắt"</item>
     <item msgid="460891964396502657">"Đang bật"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Không có sẵn"</item>
+    <item msgid="8014986104355098744">"Tắt"</item>
+    <item msgid="5966994759929723339">"Đang bật"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index aa288c9..e36359c 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"设备已锁定"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"正在扫描面孔"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"发送"</string>
-    <string name="phone_label" msgid="5715229948920451352">"打开电话"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"打开语音助理"</string>
-    <string name="camera_label" msgid="8253821920931143699">"打开相机"</string>
     <string name="cancel" msgid="1089011503403416730">"取消"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"确认"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"重试"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"传感器已关闭"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"清除所有通知。"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">此群组内还有 <xliff:g id="NUMBER_1">%s</xliff:g> 条通知。</item>
-      <item quantity="one">此群组内还有 <xliff:g id="NUMBER_0">%s</xliff:g> 条通知。</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{此群组内还有 # 条通知。}other{此群组内还有 # 条通知。}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"屏幕锁定为横屏模式。"</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"屏幕锁定为纵向模式。"</string>
     <string name="dessert_case" msgid="9104973640704357717">"甜品盒"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"摄像头使用权限"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"麦克风使用权限"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"已允许"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"热点"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"正在开启…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"流量节省程序已开启"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d 台设备</item>
-      <item quantity="one">%d 台设备</item>
-    </plurals>
+    <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_camera_in_use" msgid="4820591564526512571">"相机正在使用中"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"移动数据"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"请再点按一次"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"向上滑动即可打开"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"按下解锁图标即可打开"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"已通过面孔识别解锁。向上滑动即可打开。"</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"已通过面孔识别解锁。按下解锁图标即可打开。"</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"已通过面孔识别解锁。点按即可打开。"</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"识别出面孔。点按即可打开。"</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"要继续您的会话吗?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"重新开始"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"是,继续"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"访客模式"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"您当前处于访客模式"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"如果添加新用户,系统将退出访客模式并删除当前访客会话中的所有应用和数据。"</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"已达到用户数上限"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">您最多可以添加 <xliff:g id="COUNT">%d</xliff:g> 位用户。</item>
-      <item quantity="one">您只能创建一位用户。</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{您只能创建一位用户。}other{您最多可添加 # 位用户。}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"提醒我"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"撤消"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"已延后 <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d 小时</item>
-      <item quantity="one">%d 小时</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d 分钟</item>
-      <item quantity="one">%d 分钟</item>
-    </plurals>
+    <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="keyboard_key_button_template" msgid="8005673627272051429">"<xliff:g id="NAME">%1$s</xliff:g>按钮"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"提醒"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"电池"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"屏幕截图"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"常规消息"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"免安装应用"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"设置"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"存储空间"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"提示"</string>
     <string name="instant_apps" msgid="8337185853050247304">"免安装应用"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"开启/关闭"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"设备控制器"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"选择要添加控制器的应用"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other">已添加 <xliff:g id="NUMBER_1">%s</xliff:g> 个控件。</item>
-      <item quantity="one">已添加 <xliff:g id="NUMBER_0">%s</xliff:g> 个控件。</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{已添加 # 个控件。}other{已添加 # 个控件。}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"已移除"</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>
@@ -846,7 +831,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="9099497976087485862">"与新设备配对"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"添加图块"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"不添加图块"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"选择用户"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> 个应用正在运行</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> 个应用正在运行</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"WLAN 已关闭"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"优先模式"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"闹钟已设置"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"摄像头已关闭"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"麦克风已关闭"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"摄像头和麦克风已关闭"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# 条通知}other{# 条通知}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>,<xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"正在广播"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"要停止广播“<xliff:g id="APP_NAME">%1$s</xliff:g>”的内容吗?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"如果广播“<xliff:g id="SWITCHAPP">%1$s</xliff:g>”的内容或更改输出来源,当前的广播就会停止"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"广播“<xliff:g id="SWITCHAPP">%1$s</xliff:g>”的内容"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"更改输出来源"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"未知"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-zh-rCN/tiles_states_strings.xml b/packages/SystemUI/res/values-zh-rCN/tiles_states_strings.xml
index 3c62872..b476255 100644
--- a/packages/SystemUI/res/values-zh-rCN/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"已关闭"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index abcf78b..893bc27 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"裝置已上鎖"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"掃瞄緊面孔"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"傳送"</string>
-    <string name="phone_label" msgid="5715229948920451352">"開啟電話"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"開啟語音助手"</string>
-    <string name="camera_label" msgid="8253821920931143699">"開啟相機"</string>
     <string name="cancel" msgid="1089011503403416730">"取消"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"確認"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"請再試一次"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"已啟用「感應器關閉」"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"清除所有通知。"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">裡面還有 <xliff:g id="NUMBER_1">%s</xliff:g> 個通知。</item>
-      <item quantity="one">裡面還有 <xliff:g id="NUMBER_0">%s</xliff:g> 個通知。</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{裡面還有 # 個通知。}other{裡面還有 # 個通知。}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"螢幕已鎖定為橫向模式。"</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"螢幕已鎖定為垂直模式。"</string>
     <string name="dessert_case" msgid="9104973640704357717">"Dessert Case"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"相機存取權"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"麥克風存取權"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"允許"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"熱點"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"正在開啟…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"數據節省模式已開啟"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d 部裝置</item>
-      <item quantity="one">%d 部裝置</item>
-    </plurals>
+    <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_camera_in_use" msgid="4820591564526512571">"相機使用中"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"流動數據"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"再次輕按"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"向上滑動即可開啟"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"按解鎖圖示即可開啟"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"已使用面孔解鎖,向上滑動即可開啟。"</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"已使用面孔解鎖。按解鎖圖示即可開啟。"</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"已使用面孔解鎖。按下即可開啟。"</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"已識別面孔。按下即可開啟。"</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"您要繼續您的工作階段嗎?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"重新開始"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"是的,請繼續"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"訪客模式"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"您正在使用訪客模式"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"新增使用者後,系統就會結束訪客模式,並刪除目前訪客工作階段中的所有應用程式和資料。"</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"已達到使用者上限"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">您可以加入多達 <xliff:g id="COUNT">%d</xliff:g> 個使用者。</item>
-      <item quantity="one">只可以建立一個使用者。</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{只可建立一位使用者。}other{您可以加入多達 # 位使用者。}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"提醒我"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"復原"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"已延後 <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d 個小時</item>
-      <item quantity="one">%d 個小時</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d 分鐘</item>
-      <item quantity="one">%d 分鐘</item>
-    </plurals>
+    <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="keyboard_key_button_template" msgid="8005673627272051429">"<xliff:g id="NAME">%1$s</xliff:g> 鍵"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"通知"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"電池"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"螢幕擷取畫面"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"一般訊息"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"免安裝應用程式"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"設定"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"儲存空間"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"提示"</string>
     <string name="instant_apps" msgid="8337185853050247304">"免安裝應用程式"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"切換"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"裝置控制"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"選擇要新增控制項的應用程式"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other">已新增 <xliff:g id="NUMBER_1">%s</xliff:g> 個控制項。</item>
-      <item quantity="one">已新增 <xliff:g id="NUMBER_0">%s</xliff:g> 個控制項。</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{已新增 # 個控制項。}other{已新增 # 個控制項。}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"已移除"</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>
@@ -846,7 +831,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="9099497976087485862">"配對新裝置"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"新增圖塊"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"不要新增圖塊"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"選取使用者"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other">已啟用 <xliff:g id="COUNT_1">%s</xliff:g> 個應用程式</item>
-      <item quantity="one">已啟用 <xliff:g id="COUNT_0">%s</xliff:g> 個應用程式</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi 已關閉"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"優先模式"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"已設定鬧鐘"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"相機已關閉"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"麥克風已關閉"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"相機和麥克風已關閉"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# 則通知}other{# 則通知}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>,<xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"廣播"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"要停止廣播「<xliff:g id="APP_NAME">%1$s</xliff:g>」的內容嗎?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"如要廣播「<xliff:g id="SWITCHAPP">%1$s</xliff:g>」的內容或變更輸出來源,系統就會停止廣播目前的內容"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"廣播「<xliff:g id="SWITCHAPP">%1$s</xliff:g>」的內容"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"變更輸出來源"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"不明"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"MMM d EEE"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-zh-rHK/tiles_states_strings.xml b/packages/SystemUI/res/values-zh-rHK/tiles_states_strings.xml
index ee41066..ab8e961a 100644
--- a/packages/SystemUI/res/values-zh-rHK/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"關閉"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 32d48ce..16aa647 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"裝置已鎖定"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"掃描臉孔"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"傳送"</string>
-    <string name="phone_label" msgid="5715229948920451352">"開啟電話"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"開啟語音小幫手"</string>
-    <string name="camera_label" msgid="8253821920931143699">"開啟攝影機"</string>
     <string name="cancel" msgid="1089011503403416730">"取消"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"確認"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"再試一次"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"感應器已關閉"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"清除所有通知。"</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="other">群組中還有 <xliff:g id="NUMBER_1">%s</xliff:g> 則通知。</item>
-      <item quantity="one">群組中還有 <xliff:g id="NUMBER_0">%s</xliff:g> 則通知。</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{其中還有 # 則通知。}other{其中還有 # 則通知。}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"螢幕已鎖定為橫向模式。"</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"螢幕已鎖定為垂直模式。"</string>
     <string name="dessert_case" msgid="9104973640704357717">"Dessert Case"</string>
@@ -226,6 +220,7 @@
     <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_camera_label" msgid="5612076679385269339">"相機存取權"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"麥克風存取權"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"可以使用"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"無線基地台"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"開啟中…"</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"數據節省模式已開啟"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="other">%d 個裝置</item>
-      <item quantity="one">%d 個裝置</item>
-    </plurals>
+    <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_camera_in_use" msgid="4820591564526512571">"正在使用相機"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"行動數據"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"再輕觸一次"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"向上滑動即可開啟"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"按下「解鎖」圖示即可開啟"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"你已用自己的臉解鎖裝置,向上滑動即可開啟。"</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"裝置已透過人臉解鎖,按下「解鎖」圖示即可開啟。"</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"裝置已透過你的臉解鎖,按下即可開啟。"</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"臉孔辨識完成,按下即可開啟。"</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"你要繼續這個工作階段嗎?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"重新開始"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"是,繼續"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"訪客模式"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"你目前處於訪客模式"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"新增使用者後,系統就會結束訪客模式,並刪除目前訪客工作階段中的所有應用程式和資料。"</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"已達使用者數量上限"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="other">最多可新增 <xliff:g id="COUNT">%d</xliff:g> 位使用者。</item>
-      <item quantity="one">只能建立 1 位使用者。</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{只能建立 1 位使用者。}other{最#多可新增 # 位使用者。}}"</string>
     <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>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"提醒我"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"復原"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"已延後 <xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="other">%d 小時</item>
-      <item quantity="one">%d 小時</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="other">%d 分鐘</item>
-      <item quantity="one">%d 分鐘</item>
-    </plurals>
+    <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="keyboard_key_button_template" msgid="8005673627272051429">"<xliff:g id="NAME">%1$s</xliff:g> 按鈕"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Home 鍵"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"快訊"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"電池"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"螢幕截圖"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"一般訊息"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"免安裝應用程式"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"設定"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"儲存空間"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"提示"</string>
     <string name="instant_apps" msgid="8337185853050247304">"免安裝應用程式"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"切換"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"裝置控制"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"選擇應用程式以新增控制項"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="other">已新增 <xliff:g id="NUMBER_1">%s</xliff:g> 個控制項。</item>
-      <item quantity="one">已新增 <xliff:g id="NUMBER_0">%s</xliff:g> 個控制項。</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{已新增 # 個控制項。}other{已新增 # 個控制項。}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"已移除"</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>
@@ -846,7 +831,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="9099497976087485862">"配對新裝置"</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>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"新增設定方塊"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"不要新增設定方塊"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"選取使用者"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="other"><xliff:g id="COUNT_1">%s</xliff:g> 個應用程式正在運作</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%s</xliff:g> 個應用程式正在運作</item>
-    </plurals>
+    <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>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"Wi‑Fi 已關閉"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"優先模式"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"鬧鐘設定成功"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"相機已關閉"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"麥克風已關閉"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"已關閉相機和麥克風"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{# 則通知}other{# 則通知}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>,<xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"廣播"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"要停止播送「<xliff:g id="APP_NAME">%1$s</xliff:g>」的內容嗎?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"如果播送「<xliff:g id="SWITCHAPP">%1$s</xliff:g>」的內容或變更輸出來源,系統就會停止播送目前的內容"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"播送「<xliff:g id="SWITCHAPP">%1$s</xliff:g>」的內容"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"變更輸出來源"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"不明"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"MMM d EEE"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-zh-rTW/tiles_states_strings.xml b/packages/SystemUI/res/values-zh-rTW/tiles_states_strings.xml
index 1f70740..3d6a546 100644
--- a/packages/SystemUI/res/values-zh-rTW/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"已關閉"</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>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 6545d72..8f9f579 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -124,9 +124,6 @@
     <string name="accessibility_lock_icon" msgid="661492842417875775">"Idivayisi ikhiyiwe"</string>
     <string name="accessibility_scanning_face" msgid="3093828357921541387">"Ukuskena ubuso"</string>
     <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Thumela"</string>
-    <string name="phone_label" msgid="5715229948920451352">"vula ifoni"</string>
-    <string name="voice_assist_label" msgid="3725967093735929020">"vula isilekeleli sezwi"</string>
-    <string name="camera_label" msgid="8253821920931143699">"vula ikhamera"</string>
     <string name="cancel" msgid="1089011503403416730">"Khansela"</string>
     <string name="biometric_dialog_confirm" msgid="2005978443007344895">"Qinisekisa"</string>
     <string name="biometric_dialog_try_again" msgid="8575345628117768844">"Zama futhi"</string>
@@ -205,10 +202,7 @@
     <string name="accessibility_sensors_off_active" msgid="2619725434618911551">"Izinzwa zivalwe kokusebenzayo"</string>
     <string name="accessibility_clear_all" msgid="970525598287244592">"Susa zonke izaziso."</string>
     <string name="notification_group_overflow_indicator" msgid="7605120293801012648">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <plurals name="notification_group_overflow_description" formatted="false" msgid="91483442850649192">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> izaziso eziningi ngaphakathi.</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> izaziso eziningi ngaphakathi.</item>
-    </plurals>
+    <string name="notification_group_overflow_description" msgid="7176322877233433278">"{count,plural, =1{isaziso esingu-# esengeziwe ngaphakathi.}one{izaziso ezingu-# ezengeziwe ngaphakathi.}other{izaziso ezingu-# ezengeziwe ngaphakathi.}}"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"Isikrini sikhiyelwe ngomumo we-landscape."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"Isikrini sikhiyelwe ngomumo we-portrait."</string>
     <string name="dessert_case" msgid="9104973640704357717">"Isikhwama soswidi"</string>
@@ -226,6 +220,7 @@
     <string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Ukuphenduka okuzenzakalelayo"</string>
     <string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Phendula iskrini ngokuzenzakalela"</string>
     <string name="quick_settings_location_label" msgid="2621868789013389163">"Indawo"</string>
+    <string name="quick_settings_screensaver_label" msgid="1495003469366524120">"Isilondolozi sesikrini"</string>
     <string name="quick_settings_camera_label" msgid="5612076679385269339">"Ukufinyelela kwekhamera"</string>
     <string name="quick_settings_mic_label" msgid="8392773746295266375">"Ukufinyelela kwe-mic"</string>
     <string name="quick_settings_camera_mic_available" msgid="1453719768420394314">"Iyatholakala"</string>
@@ -255,10 +250,7 @@
     <string name="quick_settings_hotspot_label" msgid="1199196300038363424">"I-Hotspot"</string>
     <string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"Iyavula..."</string>
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"Iseva yedatha ivuliwe"</string>
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices" formatted="false" msgid="3142308865165871976">
-      <item quantity="one">%d amadivayisi</item>
-      <item quantity="other">%d amadivayisi</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices" msgid="7536823087501239457">"{count,plural, =1{idivayisi engu-#}one{amadivayisi angu-#}other{amadivayisi angu-#}}"</string>
     <string name="quick_settings_flashlight_label" msgid="4904634272006284185">"I-Flashlight"</string>
     <string name="quick_settings_flashlight_camera_in_use" msgid="4820591564526512571">"Ikhamera esetshenziswayo"</string>
     <string name="quick_settings_cellular_detail_title" msgid="792977203299358893">"Idatha yeselula"</string>
@@ -315,6 +307,7 @@
     <string name="tap_again" msgid="1315420114387908655">"Thepha futhi"</string>
     <string name="keyguard_unlock" msgid="8031975796351361601">"Swayiphela phezulu ukuze uvule"</string>
     <string name="keyguard_unlock_press" msgid="9140109453735019209">"Cindezela isithonjana sokuvula ukuze uvule"</string>
+    <string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Vula ngobuso. Swayiphela phezulu ukuze uvule."</string>
     <string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Ivulwe ngobuso. Cindezela isithonjana sokuvula ukuze uvule."</string>
     <string name="keyguard_face_successful_unlock_press_alt_1" msgid="5715461103913071474">"Vula ngobuso. Cindezela ukuze uvule."</string>
     <string name="keyguard_face_successful_unlock_press_alt_2" msgid="8310787946357120406">"Ubuso buyaziwa. Cindezela ukuze uvule."</string>
@@ -351,11 +344,11 @@
     <string name="guest_wipe_session_message" msgid="3393823610257065457">"Ingabe ufuna ukuqhubeka ngesikhathi sakho?"</string>
     <string name="guest_wipe_session_wipe" msgid="8056836584445473309">"Qala phansi"</string>
     <string name="guest_wipe_session_dontwipe" msgid="3211052048269304205">"Yebo, qhubeka"</string>
+    <string name="guest_notification_app_name" msgid="2110425506754205509">"Imodi yesivakashi"</string>
+    <string name="guest_notification_session_active" msgid="5567273684713471450">"Usemodini yesivakashi"</string>
+    <string name="user_add_user_message_guest_remove" msgid="5589286604543355007">\n\n"Ukwengeza umsebenzisi omusha kuzokhipha imodi yesivakashi futhi kusule wonke ama-app nedatha kusuka esikhathini sesihambeli samanje."</string>
     <string name="user_limit_reached_title" msgid="2429229448830346057">"Kufinyelelwe kumkhawulo womsebenzisi"</string>
-    <plurals name="user_limit_reached_message" formatted="false" msgid="2573535787802908398">
-      <item quantity="one">Ungangeza kufikela kubasebenzisi abangu-<xliff:g id="COUNT">%d</xliff:g>.</item>
-      <item quantity="other">Ungangeza kufikela kubasebenzisi abangu-<xliff:g id="COUNT">%d</xliff:g>.</item>
-    </plurals>
+    <string name="user_limit_reached_message" msgid="1070703858915935796">"{count,plural, =1{Umsebenzisi oyedwa kuphela ongasungulwa.}one{Ungangeza kufikela kubasebenzisi abangu-#.}other{Ungangeza kufikela kubasebenzisi abangu-#.}}"</string>
     <string name="user_remove_user_title" msgid="9124124694835811874">"Susa umsebenzisi?"</string>
     <string name="user_remove_user_message" msgid="6702834122128031833">"Zonke izinhlelo zokusebenza nedatha yalo msebenzisi kuzosuswa."</string>
     <string name="user_remove_user_remove" msgid="8387386066949061256">"Susa"</string>
@@ -541,14 +534,8 @@
     <string name="notification_menu_snooze_action" msgid="5415729610393475019">"Ngikhumbuze"</string>
     <string name="snooze_undo" msgid="2738844148845992103">"Susa"</string>
     <string name="snoozed_for_time" msgid="7586689374860469469">"Kusnuzwe u-<xliff:g id="TIME_AMOUNT">%1$s</xliff:g>"</string>
-    <plurals name="snoozeHourOptions" formatted="false" msgid="2066838694120718170">
-      <item quantity="one">%d amahora</item>
-      <item quantity="other">%d amahora</item>
-    </plurals>
-    <plurals name="snoozeMinuteOptions" formatted="false" msgid="8998483159208055980">
-      <item quantity="one">%d amaminithi</item>
-      <item quantity="other">%d amaminithi</item>
-    </plurals>
+    <string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{ihora elingu-#}=2{amahora angu-#}one{amahora angu-#}other{amahora angu-#}}"</string>
+    <string name="snoozeMinuteOptions" msgid="2222082405822030979">"{count,plural, =1{umzuzu ongu-#}one{imizuzu engu-#}other{imizuzu engu-#}}"</string>
     <string name="battery_detail_switch_title" msgid="6940976502957380405">"Isilondolozi sebhethri"</string>
     <string name="keyboard_key_button_template" msgid="8005673627272051429">"Inkinobho <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="keyboard_key_home" msgid="3734400625170020657">"Ekhaya"</string>
@@ -697,7 +684,8 @@
     <string name="notification_channel_alerts" msgid="3385787053375150046">"Izexwayiso"</string>
     <string name="notification_channel_battery" msgid="9219995638046695106">"Ibhethri"</string>
     <string name="notification_channel_screenshot" msgid="7665814998932211997">"Izithombe-skrini"</string>
-    <string name="notification_channel_general" msgid="4384774889645929705">"Imilayezo ejwayelekile"</string>
+    <string name="notification_channel_instant" msgid="7556135423486752680">"Ama-App Asheshayo"</string>
+    <string name="notification_channel_setup" msgid="7660580986090760350">"Ukusetha"</string>
     <string name="notification_channel_storage" msgid="2720725707628094977">"Isitoreji"</string>
     <string name="notification_channel_hints" msgid="7703783206000346876">"Ukubonisa"</string>
     <string name="instant_apps" msgid="8337185853050247304">"Izinhlelo zokusebenza ezisheshayo"</string>
@@ -771,10 +759,7 @@
     <string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"guqula"</string>
     <string name="quick_controls_title" msgid="6839108006171302273">"Izilawuli zezinsiza"</string>
     <string name="controls_providers_title" msgid="6879775889857085056">"Khetha uhlelo lokusebenza ukwengeza izilawuli"</string>
-    <plurals name="controls_number_of_favorites" formatted="false" msgid="1057347832073807380">
-      <item quantity="one"><xliff:g id="NUMBER_1">%s</xliff:g> ukulawulwa okwengeziwe.</item>
-      <item quantity="other"><xliff:g id="NUMBER_1">%s</xliff:g> ukulawulwa okwengeziwe.</item>
-    </plurals>
+    <string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{ulawulo olu-# olwengeziwe.}one{ukulawulwa okungu-# okwengeziwe.}other{ukulawulwa okungu-# okwengeziwe.}}"</string>
     <string name="controls_removed" msgid="3731789252222856959">"Isusiwe"</string>
     <string name="accessibility_control_favorite" msgid="8694362691985545985">"Kwenziwe intandokazi"</string>
     <string name="accessibility_control_favorite_position" msgid="54220258048929221">"Kwenziwe intandokazi, isimo esiyi-<xliff:g id="NUMBER">%d</xliff:g>"</string>
@@ -846,7 +831,7 @@
     <string name="media_output_dialog_multiple_devices" msgid="1093771040315422350">"amadivayisi akhethiwe angu-<xliff:g id="COUNT">%1$d</xliff:g>"</string>
     <string name="media_output_dialog_disconnected" msgid="7090512852817111185">"(inqamukile)"</string>
     <string name="media_output_dialog_connect_failed" msgid="3080972621975339387">"Akukwazi ukushintsha. Thepha ukuze uzame futhi."</string>
-    <string name="media_output_dialog_pairing_new" msgid="9099497976087485862">"Bhangqa idivayisi entsha"</string>
+    <string name="media_output_dialog_pairing_new" msgid="5098212763195577270">"Xhuma idivayisi"</string>
     <string name="media_output_dialog_launch_app_text" msgid="1527413319632586259">"Ukuze usakaze le seshini, sicela uvule i-app."</string>
     <string name="media_output_dialog_unknown_launch_app_name" msgid="1084899329829371336">"I-app engaziwa"</string>
     <string name="media_output_dialog_button_stop_casting" msgid="6581379537930199189">"Misa ukusakaza"</string>
@@ -931,10 +916,7 @@
     <string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Engeza ithayela"</string>
     <string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Ungafaki ithayela"</string>
     <string name="qs_user_switch_dialog_title" msgid="3045189293587781366">"Khetha umsebenzisi"</string>
-    <plurals name="fgs_manager_footer_label" formatted="false" msgid="790443735462280164">
-      <item quantity="one">Ama-app angu-<xliff:g id="COUNT_1">%s</xliff:g> ayasebenza</item>
-      <item quantity="other">Ama-app angu-<xliff:g id="COUNT_1">%s</xliff:g> ayasebenza</item>
-    </plurals>
+    <string name="fgs_manager_footer_label" msgid="8276763570622288231">"{count,plural, =1{I-app e-# iyasebenza}one{Ama-app angu-# ayasebenza}other{Ama-app angu-# ayasebenza}}"</string>
     <string name="fgs_dot_content_description" msgid="2865071539464777240">"Ulwazi olusha"</string>
     <string name="fgs_manager_dialog_title" msgid="5879184257257718677">"Ama-app asebenzayo"</string>
     <string name="fgs_manager_dialog_message" msgid="2670045017200730076">"Lama-app ayaqhubeka esebenza, ngisho nalapho ungawasebenzisi. Lokhu kuthuthukisa ukusebenza kwawo, kodwa kungase kuthinte impilo yawo yebhethri."</string>
@@ -961,6 +943,18 @@
     <string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"I-Wi-Fi ayitholakali"</string>
     <string name="dream_overlay_status_bar_priority_mode" msgid="5428462123314728739">"Imodi ebalulekile"</string>
     <string name="dream_overlay_status_bar_alarm_set" msgid="566707328356590886">"I-alamu isethiwe"</string>
+    <string name="dream_overlay_status_bar_camera_off" msgid="5273073778969890823">"Ikhamera ivaliwe"</string>
+    <string name="dream_overlay_status_bar_mic_off" msgid="8366534415013819396">"Imakrofoni ivaliwe"</string>
     <string name="dream_overlay_status_bar_camera_mic_off" msgid="3199425257833773569">"Ikhamera nemakrofoni kuvaliwe"</string>
     <string name="dream_overlay_status_bar_notification_indicator" msgid="8091389255691081711">"{count,plural, =1{Isaziso esingu-#}one{Izaziso ezingu-#}other{Izaziso ezingu-#}}"</string>
+    <string name="dream_overlay_weather_complication_desc" msgid="824503662089783824">"<xliff:g id="WEATHER_CONDITION">%1$s</xliff:g>, <xliff:g id="TEMPERATURE">%2$s</xliff:g>"</string>
+    <string name="broadcasting_description_is_broadcasting" msgid="765627502786404290">"Ukusakaza"</string>
+    <string name="bt_le_audio_broadcast_dialog_title" msgid="3605428497924077811">"Misa ukusakaza i-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+    <string name="bt_le_audio_broadcast_dialog_sub_title" msgid="7889684551194225793">"Uma usakaza i-<xliff:g id="SWITCHAPP">%1$s</xliff:g> noma ushintsha okuphumayo, ukusakaza kwakho kwamanje kuzoma"</string>
+    <string name="bt_le_audio_broadcast_dialog_switch_app" msgid="6098768269397105733">"Sakaza i-<xliff:g id="SWITCHAPP">%1$s</xliff:g>"</string>
+    <string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Shintsha okuphumayo"</string>
+    <string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Akwaziwa"</string>
+    <string name="dream_date_complication_date_format" msgid="8191225366513860104">"EEE, MMM d"</string>
+    <string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h:mm"</string>
+    <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-zu/tiles_states_strings.xml b/packages/SystemUI/res/values-zu/tiles_states_strings.xml
index cc8bbb0..81c4636 100644
--- a/packages/SystemUI/res/values-zu/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-zu/tiles_states_strings.xml
@@ -171,4 +171,9 @@
     <item msgid="146088982397753810">"Valiwe"</item>
     <item msgid="460891964396502657">"Vuliwe"</item>
   </string-array>
+  <string-array name="tile_states_dream">
+    <item msgid="6184819793571079513">"Ayitholakali"</item>
+    <item msgid="8014986104355098744">"Valiwe"</item>
+    <item msgid="5966994759929723339">"Vuliwe"</item>
+  </string-array>
 </resources>
diff --git a/packages/SystemUI/res/values/attrs.xml b/packages/SystemUI/res/values/attrs.xml
index 3228c3c..9a71995 100644
--- a/packages/SystemUI/res/values/attrs.xml
+++ b/packages/SystemUI/res/values/attrs.xml
@@ -108,12 +108,6 @@
         <attr name="android:layout" />
     </declare-styleable>
 
-    <declare-styleable name="HybridNotificationTheme">
-        <attr name="hybridNotificationStyle" format="reference" />
-        <attr name="hybridNotificationTitleStyle" format="reference" />
-        <attr name="hybridNotificationTextStyle" format="reference" />
-    </declare-styleable>
-
     <declare-styleable name="PluginInflateContainer">
         <attr name="viewType" format="string" />
     </declare-styleable>
@@ -193,5 +187,9 @@
     <declare-styleable name="DreamOverlayDotImageView">
         <attr name="dotColor" format="color" />
     </declare-styleable>
+
+    <declare-styleable name="DelayableMarqueeTextView">
+        <attr name="marqueeDelay" format="integer" />
+    </declare-styleable>
 </resources>
 
diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml
index 02ba271..1eece4c 100644
--- a/packages/SystemUI/res/values/colors.xml
+++ b/packages/SystemUI/res/values/colors.xml
@@ -129,7 +129,6 @@
     <color name="smart_reply_button_stroke">@*android:color/accent_device_default</color>
 
     <!-- Biometric dialog colors -->
-    <color name="biometric_dialog_dim_color">#80000000</color>              <!-- 50% black -->
     <color name="biometric_dialog_gray">#ff757575</color>
     <color name="biometric_dialog_accent">@color/material_dynamic_primary40</color>
     <color name="biometric_dialog_error">#ffd93025</color>                  <!-- red 600 -->
@@ -233,4 +232,13 @@
     <color name="connected_network_secondary_color">#41493D</color>
 
     <color name="dream_overlay_camera_mic_off_dot_color">#FCBE03</color>
+
+    <!-- Air Quality -->
+    <color name="dream_overlay_aqi_good">#689F38</color>
+    <color name="dream_overlay_aqi_moderate">#FBC02D</color>
+    <color name="dream_overlay_aqi_unhealthy_sensitive">#F57C00</color>
+    <color name="dream_overlay_aqi_unhealthy">#C53929</color>
+    <color name="dream_overlay_aqi_very_unhealthy">#AD1457</color>
+    <color name="dream_overlay_aqi_hazardous">#880E4F</color>
+    <color name="dream_overlay_aqi_unknown">#BDC1C6</color>
 </resources>
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index 597e880..ec22c60 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -37,12 +37,6 @@
         <item>400</item>
     </integer-array>
 
-    <!-- Show mic or phone affordance on Keyguard -->
-    <bool name="config_keyguardShowLeftAffordance">false</bool>
-
-    <!-- Show camera affordance on Keyguard -->
-    <bool name="config_keyguardShowCameraAffordance">false</bool>
-
     <!-- decay duration (from size_max -> size), in ms -->
     <integer name="navigation_bar_deadzone_hold">333</integer>
     <integer name="navigation_bar_deadzone_decay">333</integer>
@@ -87,7 +81,7 @@
 
     <!-- Tiles native to System UI. Order should match "quick_settings_tiles_default" -->
     <string name="quick_settings_tiles_stock" translatable="false">
-        internet,bt,flashlight,dnd,alarm,airplane,controls,wallet,rotation,battery,cast,screenrecord,mictoggle,cameratoggle,location,hotspot,inversion,saver,dark,work,night,reverse,reduce_brightness,qr_code_scanner,onehanded,color_correction
+        internet,bt,flashlight,dnd,alarm,airplane,controls,wallet,rotation,battery,cast,screenrecord,mictoggle,cameratoggle,location,hotspot,inversion,saver,dark,work,night,reverse,reduce_brightness,qr_code_scanner,onehanded,color_correction,dream
     </string>
 
     <!-- The tiles to display in QuickSettings -->
@@ -292,7 +286,7 @@
     <bool name="config_enableFullscreenUserSwitcher">false</bool>
 
     <!-- SystemUIFactory component -->
-    <string name="config_systemUIFactoryComponent" translatable="false">com.android.systemui.SystemUIFactory</string>
+    <string name="config_systemUIFactoryComponent" translatable="false">com.android.systemui.SystemUIInitializerImpl</string>
 
     <!-- QS tile shape store width. negative implies fill configuration instead of stroke-->
     <dimen name="config_qsTileStrokeWidthActive">-1dp</dimen>
@@ -438,6 +432,9 @@
          they were added. -->
     <integer name="config_smart_replies_in_notifications_onclick_init_delay">200</integer>
 
+    <!-- Smartspace trampoline activity that is used when the user taps smartspace. -->
+    <string name="config_smartspaceTrampolineActivityComponent" translatable="false">com.google.android.apps.gsa.staticplugins.opa.smartspace.ExportedSmartspaceTrampolineActivity</string>
+
     <!-- Screenshot editing default activity.  Must handle ACTION_EDIT image/png intents.
          Blank sends the user to the Chooser first.
          This name is in the ComponentName flattened format (package/class)  -->
@@ -551,6 +548,9 @@
     <!-- Package name of the preferred system app to perform eSOS action -->
     <string name="config_preferredEmergencySosPackage" translatable="false"></string>
 
+    <!-- Whether to show the side fps hint while on bouncer -->
+    <bool name="config_show_sidefps_hint_on_bouncer">false</bool>
+
     <!-- Whether to use the split 2-column notification shade -->
     <bool name="config_use_split_notification_shade">false</bool>
 
@@ -629,11 +629,11 @@
 
     <!-- This value is used when calculating whether the device is in ambient light mode. It is
         light mode when the light sensor sample value exceeds above this value. -->
-    <integer name="config_ambientLightModeThreshold">5</integer>
+    <integer name="config_ambientLightModeThreshold">10</integer>
 
     <!-- This value is used when calculating whether the device is in ambient dark mode. It is
         dark mode when the light sensor sample value drops below this value. -->
-    <integer name="config_ambientDarkModeThreshold">2</integer>
+    <integer name="config_ambientDarkModeThreshold">5</integer>
 
     <!-- This value is used when calculating whether the device is in ambient light mode. Each
         sample contains light sensor events from this span of time duration. -->
@@ -690,14 +690,11 @@
     <!-- Flag to enable privacy dot views, it shall be true for normal case -->
     <bool name="config_enablePrivacyDot">true</bool>
 
-    <!-- Flag to enable dream overlay service and its registration -->
-    <bool name="config_dreamOverlayServiceEnabled">false</bool>
-
     <!-- Class for the communal source connector to be used -->
     <string name="config_communalSourceConnector" translatable="false"></string>
 
     <!-- How often in milliseconds to jitter the dream overlay in order to avoid burn-in. -->
-    <integer name="config_dreamOverlayBurnInProtectionUpdateIntervalMillis">500</integer>
+    <integer name="config_dreamOverlayBurnInProtectionUpdateIntervalMillis">1000</integer>
 
     <!-- How long in milliseconds before full burn-in protection is achieved. -->
     <integer name="config_dreamOverlayMillisUntilFullJitter">240000</integer>
@@ -727,4 +724,25 @@
         <item>com.android.keyguard</item>
         <item>com.android.systemui</item>
     </string-array>
+
+    <!-- The thresholds which determine the color used by the AQI dream overlay.
+         NOTE: This must always be kept sorted from low to high -->
+    <integer-array name="config_dreamAqiThresholds">
+        <item>-1</item>
+        <item>50</item>
+        <item>100</item>
+        <item>150</item>
+        <item>200</item>
+        <item>300</item>
+    </integer-array>
+
+    <!-- The color values which correspond to the thresholds above -->
+    <integer-array name="config_dreamAqiColorValues">
+        <item>@color/dream_overlay_aqi_good</item>
+        <item>@color/dream_overlay_aqi_moderate</item>
+        <item>@color/dream_overlay_aqi_unhealthy_sensitive</item>
+        <item>@color/dream_overlay_aqi_unhealthy</item>
+        <item>@color/dream_overlay_aqi_very_unhealthy</item>
+        <item>@color/dream_overlay_aqi_hazardous</item>
+    </integer-array>
 </resources>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 160dcd0..3fb00a3 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -44,11 +44,53 @@
     <!-- The threshold to drag to trigger the edge action -->
     <dimen name="navigation_edge_action_drag_threshold">16dp</dimen>
     <!-- The threshold to progress back animation for edge swipe -->
-    <dimen name="navigation_edge_action_progress_threshold">400dp</dimen>
+    <dimen name="navigation_edge_action_progress_threshold">412dp</dimen>
     <!-- The minimum display position of the arrow on the screen -->
     <dimen name="navigation_edge_arrow_min_y">64dp</dimen>
     <!-- The amount by which the arrow is shifted to avoid the finger-->
-    <dimen name="navigation_edge_finger_offset">48dp</dimen>
+    <dimen name="navigation_edge_finger_offset">64dp</dimen>
+
+    <!-- The thickness of the arrow -->
+    <dimen name="navigation_edge_arrow_thickness">4dp</dimen>
+    <!-- The minimum delta needed to change direction / stop triggering back -->
+    <dimen name="navigation_edge_minimum_x_delta_for_switch">32dp</dimen>
+
+    <!-- entry state -->
+    <dimen name="navigation_edge_entry_margin">4dp</dimen>
+    <dimen name="navigation_edge_entry_background_width">8dp</dimen>
+    <dimen name="navigation_edge_entry_background_height">60dp</dimen>
+    <dimen name="navigation_edge_entry_edge_corners">30dp</dimen>
+    <dimen name="navigation_edge_entry_far_corners">30dp</dimen>
+    <dimen name="navigation_edge_entry_arrow_length">10dp</dimen>
+    <dimen name="navigation_edge_entry_arrow_height">7dp</dimen>
+
+    <!-- pre-threshold -->
+    <dimen name="navigation_edge_pre_threshold_margin">4dp</dimen>
+    <dimen name="navigation_edge_pre_threshold_background_width">64dp</dimen>
+    <dimen name="navigation_edge_pre_threshold_background_height">60dp</dimen>
+    <dimen name="navigation_edge_pre_threshold_edge_corners">22dp</dimen>
+    <dimen name="navigation_edge_pre_threshold_far_corners">26dp</dimen>
+
+    <!-- post-threshold / active -->
+    <dimen name="navigation_edge_active_margin">14dp</dimen>
+    <dimen name="navigation_edge_active_background_width">60dp</dimen>
+    <dimen name="navigation_edge_active_background_height">60dp</dimen>
+    <dimen name="navigation_edge_active_edge_corners">30dp</dimen>
+    <dimen name="navigation_edge_active_far_corners">30dp</dimen>
+    <dimen name="navigation_edge_active_arrow_length">8dp</dimen>
+    <dimen name="navigation_edge_active_arrow_height">9dp</dimen>
+
+    <dimen name="navigation_edge_stretch_margin">18dp</dimen>
+    <dimen name="navigation_edge_stretch_background_width">74dp</dimen>
+    <dimen name="navigation_edge_stretch_background_height">60dp</dimen>
+    <dimen name="navigation_edge_stretch_edge_corners">30dp</dimen>
+    <dimen name="navigation_edge_stretch_far_corners">30dp</dimen>
+    <dimen name="navigation_edge_stretched_arrow_length">7dp</dimen>
+    <dimen name="navigation_edge_stretched_arrow_height">10dp</dimen>
+
+    <dimen name="navigation_edge_cancelled_arrow_length">12dp</dimen>
+    <dimen name="navigation_edge_cancelled_arrow_height">0dp</dimen>
+    <dimen name="navigation_edge_cancelled_edge_corners">6dp</dimen>
 
     <!-- Height of notification icons in the status bar -->
     <dimen name="status_bar_icon_size">@*android:dimen/status_bar_icon_size</dimen>
@@ -366,6 +408,7 @@
     <!-- Height of status bar in split shade mode - visible only on large screens -->
     <dimen name="large_screen_shade_header_height">@*android:dimen/quick_qs_offset_height</dimen>
     <dimen name="large_screen_shade_header_min_height">@dimen/qs_header_row_min_height</dimen>
+    <dimen name="large_screen_shade_header_left_padding">@dimen/qs_horizontal_margin</dimen>
 
     <!-- The top margin of the panel that holds the list of notifications.
          On phones it's always 0dp but it's overridden in Car UI
@@ -452,7 +495,7 @@
     <dimen name="navigation_key_padding">0dp</dimen>
 
     <!-- Floating rotation button -->
-    <dimen name="floating_rotation_button_diameter">40dp</dimen>
+    <dimen name="floating_rotation_button_diameter">52dp</dimen>
     <dimen name="floating_rotation_button_min_margin">20dp</dimen>
     <dimen name="floating_rotation_button_taskbar_left_margin">20dp</dimen>
     <dimen name="floating_rotation_button_taskbar_bottom_margin">10dp</dimen>
@@ -511,7 +554,7 @@
     <dimen name="qs_dual_tile_padding_horizontal">6dp</dimen>
     <dimen name="qs_panel_elevation">4dp</dimen>
     <dimen name="qs_panel_padding_bottom">@dimen/footer_actions_height</dimen>
-    <dimen name="qs_panel_padding_top">48dp</dimen>
+    <dimen name="qs_panel_padding_top">80dp</dimen>
 
     <dimen name="qs_data_usage_text_size">14sp</dimen>
     <dimen name="qs_data_usage_usage_text_size">36sp</dimen>
@@ -522,6 +565,8 @@
     <dimen name="qs_footer_icon_size">20dp</dimen>
     <dimen name="qs_header_row_min_height">48dp</dimen>
 
+    <dimen name="qs_header_non_clickable_element_height">24dp</dimen>
+
     <dimen name="qs_footer_padding">20dp</dimen>
     <dimen name="qs_security_footer_height">88dp</dimen>
     <dimen name="qs_security_footer_single_line_height">48dp</dimen>
@@ -621,6 +666,7 @@
     <!-- With the large clock, move up slightly from the center -->
     <dimen name="keyguard_large_clock_top_margin">-60dp</dimen>
 
+    <!-- TODO: Remove during migration -->
     <!-- Default line spacing multiplier between hours and minutes of the keyguard clock -->
     <item name="keyguard_clock_line_spacing_scale" type="dimen" format="float">.7</item>
     <!-- Burmese line spacing multiplier between hours and minutes of the keyguard clock -->
@@ -634,9 +680,6 @@
     <!-- The minimum background radius when swiping to a side for the camera / phone affordances. -->
     <dimen name="keyguard_affordance_min_background_radius">30dp</dimen>
 
-    <!-- The size of the touch targets on the keyguard for the affordances. -->
-    <dimen name="keyguard_affordance_touch_target_size">120dp</dimen>
-
     <!-- The grow amount for the camera and phone circles when hinting -->
     <dimen name="hint_grow_amount_sideways">60dp</dimen>
 
@@ -848,6 +891,7 @@
     <dimen name="burn_in_prevention_offset_y_clock">42dp</dimen>
 
     <!-- Clock maximum font size (dp is intentional, to prevent any further scaling) -->
+     <!-- TODO: Remove when clock migration complete -->
     <dimen name="large_clock_text_size">150dp</dimen>
     <dimen name="clock_text_size">86dp</dimen>
 
@@ -1018,6 +1062,7 @@
     <!-- Since the generic icon isn't circular, we need to scale it down so it still fits within
          the circular chip. -->
     <dimen name="media_ttt_generic_icon_size_receiver">70dp</dimen>
+    <dimen name="media_ttt_receiver_vert_translation">20dp</dimen>
 
     <!-- Window magnification -->
     <dimen name="magnification_border_drag_size">35dp</dimen>
@@ -1204,6 +1249,15 @@
     <!-- Maximum overshoot for the pulse expansion -->
     <dimen name="pulse_expansion_max_top_overshoot">32dp</dimen>
 
+    <!-- The drag amount required for the split shade to fully expand. -->
+    <dimen name="split_shade_full_transition_distance">200dp</dimen>
+    <!--
+        The drag amount required for the scrim to fully fade in when expanding the split shade.
+        Currently setting it a little longer than the full shade transition distance, to avoid
+        having a state where the screen is fully black without any content showing.
+    -->
+    <dimen name="split_shade_scrim_transition_distance">300dp</dimen>
+
     <!-- Alpha in duration in ms for the auth ripple to become fully vislble. If set to 0,
          it is immediately visible. -->
     <integer name="auth_ripple_alpha_in_duration">100</integer>
@@ -1400,6 +1454,7 @@
         @*android:dimen/status_bar_system_icon_size</dimen>
     <dimen name="dream_overlay_camera_mic_off_indicator_size">8dp</dimen>
     <dimen name="dream_overlay_notification_indicator_size">6dp</dimen>
+    <dimen name="dream_overlay_grey_chip_width">56dp</dimen>
 
     <!-- Dream overlay complications related dimensions -->
     <dimen name="dream_overlay_complication_clock_time_text_size">100sp</dimen>
@@ -1452,6 +1507,10 @@
 
     <dimen name="dream_overlay_y_offset">80dp</dimen>
 
+    <dimen name="dream_aqi_badge_corner_radius">28dp</dimen>
+    <dimen name="dream_aqi_badge_padding_vertical">6dp</dimen>
+    <dimen name="dream_aqi_badge_padding_horizontal">16dp</dimen>
+
     <dimen name="status_view_margin_horizontal">0dp</dimen>
 
     <!-- Media output broadcast dialog QR code picture size -->
@@ -1464,4 +1523,18 @@
     <dimen name="media_output_broadcast_info_title_height">24dp</dimen>
     <dimen name="media_output_broadcast_info_summary_height">20dp</dimen>
     <dimen name="media_output_broadcast_info_edit">18dp</dimen>
+
+    <!-- Broadcast dialog -->
+    <dimen name="broadcast_dialog_title_img_margin_top">18dp</dimen>
+    <dimen name="broadcast_dialog_title_text_size">24sp</dimen>
+    <dimen name="broadcast_dialog_title_text_margin">16dp</dimen>
+    <dimen name="broadcast_dialog_title_text_margin_top">18dp</dimen>
+    <dimen name="broadcast_dialog_subtitle_text_size">14sp</dimen>
+    <dimen name="broadcast_dialog_icon_size">24dp</dimen>
+    <dimen name="broadcast_dialog_icon_margin_top">25dp</dimen>
+    <dimen name="broadcast_dialog_btn_radius">100dp</dimen>
+    <dimen name="broadcast_dialog_btn_margin_bottom">4dp</dimen>
+    <dimen name="broadcast_dialog_btn_text_size">16sp</dimen>
+    <dimen name="broadcast_dialog_btn_minHeight">44dp</dimen>
+    <dimen name="broadcast_dialog_margin">16dp</dimen>
 </resources>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index e144b43..9c2542c 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -313,13 +313,6 @@
     <string name="accessibility_scanning_face">Scanning face</string>
     <!-- Click action label for accessibility for the smart reply buttons (not shown on-screen).". [CHAR LIMIT=NONE] -->
     <string name="accessibility_send_smart_reply">Send</string>
-    <!-- Content description of the manage notification button for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
-    <!-- Click action label for accessibility for the phone button. [CHAR LIMIT=NONE] -->
-    <string name="phone_label">open phone</string>
-    <!-- Click action label for accessibility for the voice assist button. This is not shown on-screen and is an accessibility label for the icon which launches the voice assist from the lock screen.[CHAR LIMIT=NONE] -->
-    <string name="voice_assist_label">open voice assist</string>
-    <!-- Click action label for accessibility for the phone button. [CHAR LIMIT=NONE] -->
-    <string name="camera_label">open camera</string>
     <!-- Button name for "Cancel". [CHAR LIMIT=NONE] -->
     <string name="cancel">Cancel</string>
 
@@ -505,10 +498,10 @@
     <string name="notification_group_overflow_indicator">+ <xliff:g id="number" example="3">%s</xliff:g></string>
 
     <!-- Content description describing how many more notifications are in a group [CHAR LIMIT=NONE] -->
-    <plurals name="notification_group_overflow_description">
-        <item quantity="one"><xliff:g id="number" example="1">%s</xliff:g> more notification inside.</item>
-        <item quantity="other"><xliff:g id="number" example="3">%s</xliff:g> more notifications inside.</item>
-    </plurals>
+    <string name="notification_group_overflow_description">{count, plural,
+        =1 {# more notification inside.}
+        other {# more notifications inside.}
+    }</string>
 
     <!-- Format to use to summarize a message from a contact in a single line of text. For example: "Julia: How's it going?". [CHAR LIMIT=NONE] -->
 
@@ -578,6 +571,8 @@
     <!-- QuickSettings: Location [CHAR LIMIT=NONE] -->
     <string name="quick_settings_location_label">Location</string>
     <!-- QuickSettings: Location (Off) [CHAR LIMIT=NONE] -->
+    <!-- QuickSettings: Screen saver [CHAR LIMIT=NONE] -->
+    <string name="quick_settings_screensaver_label">Screen saver</string>
     <!-- QuickSettings: Camera [CHAR LIMIT=NONE] -->
     <string name="quick_settings_camera_label">Camera access</string>
     <!-- QuickSettings: Microphone [CHAR LIMIT=NONE] -->
@@ -652,10 +647,10 @@
          the user why they can't toggle the hotspot tile. [CHAR LIMIT=20] -->
     <string name="quick_settings_hotspot_secondary_label_data_saver_enabled">Data Saver is on</string>
     <!-- QuickSettings: Hotspot: Secondary label for how many devices are connected to the hotspot [CHAR LIMIT=NONE] -->
-    <plurals name="quick_settings_hotspot_secondary_label_num_devices">
-        <item quantity="one">%d device</item>
-        <item quantity="other">%d devices</item>
-    </plurals>
+    <string name="quick_settings_hotspot_secondary_label_num_devices">{count, plural,
+        =1 {# device}
+        other {# devices}
+    }</string>
     <!-- QuickSettings: Notifications [CHAR LIMIT=NONE] -->
     <!-- QuickSettings: Flashlight [CHAR LIMIT=NONE] -->
     <string name="quick_settings_flashlight_label">Flashlight</string>
@@ -807,6 +802,8 @@
     <!-- Message shown when lock screen is unlocked (ie: by trust agent) and the user taps the empty space on the lock screen and UDFPS is supported. Provides extra instructions for how the user can enter their device [CHAR LIMIT=60] -->
     <string name="keyguard_unlock_press">Press the unlock icon to open</string>
 
+    <!-- Message shown when non-bypass face authentication succeeds. Provides extra instructions for how the user can enter their device [CHAR LIMIT=60] -->
+    <string name="keyguard_face_successful_unlock_swipe">Unlocked by face. Swipe up to open.</string>
     <!-- Message shown when non-bypass face authentication succeeds and UDFPS is supported. Provides extra instructions for how the user can enter their device [CHAR LIMIT=60] -->
     <string name="keyguard_face_successful_unlock_press">Unlocked by face. Press the unlock icon to open.</string>
     <!-- Message shown when non-bypass face authentication succeeds and UDFPS is supported. Provides extra instructions for how the user can enter their device [CHAR LIMIT=60] -->
@@ -911,14 +908,25 @@
     <!-- Notification when resuming an existing guest session: Action that continues with the current session [CHAR LIMIT=35] -->
     <string name="guest_wipe_session_dontwipe">Yes, continue</string>
 
+    <!-- App name of the notification when guest mode is entered [CHAR LIMIT=35] -->
+    <string name="guest_notification_app_name">Guest mode</string>
+    <!-- Title of the notification when guest mode is entered [CHAR LIMIT=35] -->
+    <string name="guest_notification_session_active">You are in guest mode</string>
+
+    <!-- Additional message for add user confirmation dialog that is appended when current user is
+         guest and guest is ephemeral. This is to warn users that current guest session
+         would get removed after a new user is added and switched to [CHAR LIMIT=none] -->
+    <string name="user_add_user_message_guest_remove">\n\nAdding a new user will exit guest mode
+        and delete all apps and data from the current guest session.</string>
+
     <!-- Title for the dialog that lets users know that the maximum allowed number of users on the device has been reached. [CHAR LIMIT=35]-->
     <string name="user_limit_reached_title">User limit reached</string>
 
     <!-- Message that tells people what's the maximum number of uses allowed on the device. [CHAR_LIMIT=NONE]-->
-    <plurals name="user_limit_reached_message">
-        <item quantity="one">Only one user can be created.</item>
-        <item quantity="other">You can add up to <xliff:g id="count" example="3">%d</xliff:g> users.</item>
-    </plurals>
+    <string name="user_limit_reached_message">{count, plural,
+        =1 {Only one user can be created.}
+        other {You can add up to # users.}
+    }</string>
 
     <!-- Title of the confirmation dialog for deleting a user [CHAR LIMIT=NONE] -->
     <string name="user_remove_user_title">Remove user?</string>
@@ -1473,20 +1481,20 @@
     <!-- Notification: Snooze panel: message indicating how long the notification was snoozed for. [CHAR LIMIT=100]-->
     <string name="snoozed_for_time">Snoozed for <xliff:g id="time_amount" example="15 minutes">%1$s</xliff:g></string>
 
-    <!-- Notification:Snooze panel: Snooze options for hours -->
-    <plurals name="snoozeHourOptions">
-        <item quantity="one">%d hour</item>
-        <item quantity="two">%d hours</item>
-        <item quantity="few">%d hours</item>
-        <item quantity="other">%d hours</item>
-    </plurals>
+    <!-- Notification:Snooze panel: Snooze options for hours [CHAR LIMIT=NONE]-->
+    <string name="snoozeHourOptions">{count, plural,
+        =1 {# hour}
+        =2 {# hours}
+        few {# hours}
+        other {# hours}
+    }</string>
 
-   <!--  Notification: Snooze panel: Snooze options for minutes -->
-   <plurals name="snoozeMinuteOptions">
-        <item quantity="one">%d minute</item>
-        <item quantity="few">%d minutes</item>
-        <item quantity="other">%d minutes</item>
-    </plurals>
+   <!--  Notification: Snooze panel: Snooze options for minutes [CHAR LIMIT=NONE]-->
+   <string name="snoozeMinuteOptions">{count, plural,
+        =1 {# minute}
+        few {# minutes}
+        other {# minutes}
+    }</string>
 
     <!-- Summary of battery saver not available [CHAR LIMIT=NONE] -->
 
@@ -1896,8 +1904,10 @@
     <string name="notification_channel_battery">Battery</string>
     <!-- Title for the notification channel dedicated to screenshot progress. [CHAR LIMIT=NONE] -->
     <string name="notification_channel_screenshot">Screenshots</string>
-    <!-- Title for the notification channel for miscellaneous notices. [CHAR LIMIT=NONE] -->
-    <string name="notification_channel_general">General Messages</string>
+    <!-- Title for the notification channel for instant app notices. [CHAR LIMIT=NONE] -->
+    <string name="notification_channel_instant">Instant Apps</string>
+    <!-- Title for the notification channel for setup notices. [CHAR LIMIT=NONE] -->
+    <string name="notification_channel_setup">Setup</string>
     <!-- Title for the notification channel for problems with storage (i.e. low disk). [CHAR LIMIT=NONE] -->
     <string name="notification_channel_storage">Storage</string>
     <!-- Title for the notification channel for hints and suggestions. [CHAR LIMIT=NONE] -->
@@ -2121,10 +2131,10 @@
     <!-- Controls management providers screen title [CHAR LIMIT=60]-->
     <string name="controls_providers_title">Choose app to add controls</string>
     <!-- Number of favorites for controls management screen [CHAR LIMIT=NONE]-->
-    <plurals name="controls_number_of_favorites">
-        <item quantity="one"><xliff:g id="number" example="1">%s</xliff:g> control added.</item>
-        <item quantity="other"><xliff:g id="number" example="3">%s</xliff:g> controls added.</item>
-    </plurals>
+    <string name="controls_number_of_favorites">{count, plural,
+        =1 {# control added.}
+        other {# controls added.}
+    }</string>
 
     <!-- Removed control in management screen [CHAR LIMIT=20] -->
     <string name="controls_removed">Removed</string>
@@ -2287,8 +2297,8 @@
     <string name="media_output_dialog_disconnected">(disconnected)</string>
     <!-- Summary for connecting error message [CHAR LIMIT=NONE] -->
     <string name="media_output_dialog_connect_failed">Can\'t switch. Tap to try again.</string>
-    <!-- Title for pairing item [CHAR LIMIT=60] -->
-    <string name="media_output_dialog_pairing_new">Pair new device</string>
+    <!-- Title for connecting item [CHAR LIMIT=60] -->
+    <string name="media_output_dialog_pairing_new">Connect a device</string>
     <!-- Title for launch app [CHAR LIMIT=60] -->
     <string name="media_output_dialog_launch_app_text">To cast this session, please open the app.</string>
     <!-- App name when can't get app name [CHAR LIMIT=60] -->
@@ -2480,10 +2490,10 @@
     <string name="qs_user_switch_dialog_title">Select user</string>
 
     <!-- Label for the entry point to open the dialog which shows currently running applications [CHAR LIMIT=NONE]-->
-    <plurals name="fgs_manager_footer_label">
-        <item quantity="one"><xliff:g id="count" example="1">%s</xliff:g> app is active</item>
-        <item quantity="other"><xliff:g id="count" example="2">%s</xliff:g> apps are active</item>
-    </plurals>
+    <string name="fgs_manager_footer_label">{count, plural,
+        =1 {# app is active}
+        other {# apps are active}
+    }</string>
     <!-- Content description for a dot indicator in the running application indicating that there
     is new information [CHAR LIMIT=NONE] -->
     <string name="fgs_dot_content_description">New information</string>
@@ -2545,6 +2555,10 @@
     <string name="dream_overlay_status_bar_priority_mode">Priority mode</string>
     <!-- Content description for the alarm set icon in the dream overlay status bar [CHAR LIMIT=NONE] -->
     <string name="dream_overlay_status_bar_alarm_set">Alarm set</string>
+    <!-- Content description for the camera off icon in the dream overlay status bar [CHAR LIMIT=NONE] -->
+    <string name="dream_overlay_status_bar_camera_off">Camera is off</string>
+    <!-- Content description for the mic off icon in the dream overlay status bar [CHAR LIMIT=NONE] -->
+    <string name="dream_overlay_status_bar_mic_off">Mic is off</string>
     <!-- Content description for the camera and mic off icon in the dream overlay status bar [CHAR LIMIT=NONE] -->
     <string name="dream_overlay_status_bar_camera_mic_off">Camera and mic are off</string>
     <!-- Content description for the notifications indicator icon in the dream overlay status bar [CHAR LIMIT=NONE] -->
@@ -2552,4 +2566,30 @@
     =1 {# notification}
     other {# notifications}
     }</string>
+    <!-- Accessibility label for weather complication on dreams with weather condition and temperature [CHAR_LIMIT=200] -->
+    <string name="dream_overlay_weather_complication_desc">
+        <xliff:g id="weather_condition" example="Partly cloudy">%1$s</xliff:g>, <xliff:g id="temperature" example="7°C">%2$s</xliff:g>
+    </string>
+
+    <!-- [CHAR LIMIT=NONE] Le audio broadcast dialog, media app is broadcasting -->
+    <string name="broadcasting_description_is_broadcasting">Broadcasting</string>
+    <!-- [CHAR LIMIT=NONE] Le audio broadcast dialog, title -->
+    <string name="bt_le_audio_broadcast_dialog_title">Stop broadcasting <xliff:g id="app_name" example="App Name 1">%1$s</xliff:g>?</string>
+    <!-- [CHAR LIMIT=NONE] Le audio broadcast dialog, sub-title -->
+    <string name="bt_le_audio_broadcast_dialog_sub_title">If you broadcast <xliff:g id="switchApp" example="App Name 2">%1$s</xliff:g> or change the output, your current broadcast will stop</string>
+    <!-- [CHAR LIMIT=NONE] Le audio broadcast dialog, switch to others app. -->
+    <string name="bt_le_audio_broadcast_dialog_switch_app">Broadcast <xliff:g id="switchApp" example="App Name 2">%1$s</xliff:g></string>
+    <!-- [CHAR LIMIT=NONE] Le audio broadcast dialog, different output. -->
+    <string name="bt_le_audio_broadcast_dialog_different_output">Change output</string>
+    <!-- [CHAR LIMIT=NONE] Le audio broadcast dialog, media app is unknown -->
+    <string name="bt_le_audio_broadcast_dialog_unknown_name">Unknown</string>
+
+    <!-- Date format for the Dream Date Complication [CHAR LIMIT=NONE] -->
+    <string name="dream_date_complication_date_format">EEE, MMM d</string>
+
+    <!-- Time format for the Dream Time Complication for 12-hour time format [CHAR LIMIT=NONE] -->
+    <string name="dream_time_complication_12_hr_time_format">h:mm</string>
+
+    <!-- Time format for the Dream Time Complication for 24-hour time format [CHAR LIMIT=NONE] -->
+    <string name="dream_time_complication_24_hr_time_format">kk:mm</string>
 </resources>
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index 0c25f54..112d903 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -17,30 +17,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:androidprv="http://schemas.android.com/apk/prv/res/android">
 
-    <!-- HybridNotification themes and styles -->
-
-    <style name="HybridNotification">
-        <item name="hybridNotificationStyle">@style/hybrid_notification</item>
-        <item name="hybridNotificationTitleStyle">@style/hybrid_notification_title</item>
-        <item name="hybridNotificationTextStyle">@style/hybrid_notification_text</item>
-    </style>
-
-    <style name="hybrid_notification">
-        <item name="android:paddingStart">@*android:dimen/notification_content_margin_start</item>
-        <item name="android:paddingEnd">12dp</item>
-    </style>
-
-    <style name="hybrid_notification_title">
-        <item name="android:paddingEnd">4dp</item>
-        <item name="android:textAppearance">@*android:style/TextAppearance.DeviceDefault.Notification.Title</item>
-    </style>
-
-    <style name="hybrid_notification_text"
-           parent="@*android:style/Widget.DeviceDefault.Notification.Text">
-        <item name="android:paddingEnd">4dp</item>
-    </style>
-
-
     <style name="TextAppearance.StatusBar.Clock" parent="@*android:style/TextAppearance.StatusBar.Icon">
         <item name="android:textSize">@dimen/status_bar_clock_size</item>
         <item name="android:fontFamily">@*android:string/config_headlineFontFamilyMedium</item>
@@ -289,6 +265,10 @@
     <style name="Animation.ShutdownUi" parent="@android:style/Animation.Toast">
     </style>
 
+    <style name="Theme.SystemUI.MediaProjectionAppSelector"
+        parent="@*android:style/Theme.DeviceDefault.Chooser">
+    </style>
+
     <!-- Standard animations for hiding and showing the status bar. -->
 
     <style name="Theme.SystemUI" parent="@*android:style/Theme.DeviceDefault.SystemUI">
@@ -1196,4 +1176,48 @@
         <item name="android:shadowColor">@color/keyguard_shadow_color</item>
         <item name="android:shadowRadius">?attr/shadowRadius</item>
     </style>
+
+    <style name="BroadcastDialogTitleStyle">
+        <item name="android:textAppearance">@style/TextAppearanceBroadcastDialogTitle</item>
+        <item name="android:layout_marginStart">@dimen/broadcast_dialog_title_text_margin</item>
+        <item name="android:layout_marginEnd">@dimen/broadcast_dialog_title_text_margin</item>
+        <item name="android:layout_marginTop">@dimen/broadcast_dialog_title_text_margin_top</item>
+        <item name="android:layout_marginBottom">18dp</item>
+    </style>
+
+    <style name="TextAppearanceBroadcastDialogTitle" parent="@android:style/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="BroadcastDialogBodyStyle">
+        <item name="android:textAppearance">@style/TextAppearanceBroadcastDialogSubTitle</item>
+        <item name="android:layout_margin">@dimen/broadcast_dialog_title_text_margin</item>
+    </style>
+
+    <style name="TextAppearanceBroadcastDialogSubTitle" parent="@android:style/TextAppearance.DeviceDefault.Headline">
+        <item name="android:textSize">@dimen/broadcast_dialog_subtitle_text_size</item>
+        <item name="android:textColor">?android:attr/textColorSecondary</item>
+        <item name="android:textDirection">locale</item>
+        <item name="android:ellipsize">end</item>
+    </style>
+
+    <style name="BroadcastDialogButtonStyle">
+        <item name="android:textAppearance">@style/TextAppearanceBroadcastDialogButton</item>
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_gravity">center</item>
+        <item name="android:gravity">center</item>
+        <item name="android:stateListAnimator">@null</item>
+        <item name="android:elevation">0dp</item>
+        <item name="android:minHeight">@dimen/broadcast_dialog_btn_minHeight</item>
+        <item name="android:background">@drawable/broadcast_dialog_btn_bg</item>
+    </style>
+
+    <style name="TextAppearanceBroadcastDialogButton" parent="@android:style/TextAppearance.DeviceDefault.Headline">
+        <item name="android:textColor">?androidprv:attr/textColorOnAccent</item>
+        <item name="android:textSize">@dimen/broadcast_dialog_btn_text_size</item>
+    </style>
 </resources>
diff --git a/packages/SystemUI/res/values/tiles_states_strings.xml b/packages/SystemUI/res/values/tiles_states_strings.xml
index e273416..c809551 100644
--- a/packages/SystemUI/res/values/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values/tiles_states_strings.xml
@@ -308,4 +308,14 @@
         <item>Off</item>
         <item>On</item>
     </string-array>
+
+    <!-- State names for dream (screensaver) tile: unavailable, off, on.
+         This subtitle is shown when the tile is in that particular state but does not set its own
+         subtitle, so some of these may never appear on screen. They should still be translated as
+         if they could appear. [CHAR LIMIT=32] -->
+    <string-array name="tile_states_dream">
+        <item>Unavailable</item>
+        <item>Off</item>
+        <item>On</item>
+    </string-array>
 </resources>
\ No newline at end of file
diff --git a/packages/SystemUI/res/xml/combined_qs_header_scene.xml b/packages/SystemUI/res/xml/combined_qs_header_scene.xml
index 0e83326..0fac76d 100644
--- a/packages/SystemUI/res/xml/combined_qs_header_scene.xml
+++ b/packages/SystemUI/res/xml/combined_qs_header_scene.xml
@@ -25,20 +25,109 @@
         <KeyFrameSet>
             <!-- These positions are to prevent visual movement of @id/date -->
             <KeyPosition
-                app:keyPositionType="pathRelative"
+                app:keyPositionType="deltaRelative"
                 app:percentX="0"
+                app:percentY="0"
                 app:framePosition="49"
+                app:percentWidth="1"
+                app:percentHeight="1"
+                app:curveFit="linear"
                 app:motionTarget="@id/date" />
             <KeyPosition
-                app:keyPositionType="pathRelative"
+                app:keyPositionType="deltaRelative"
                 app:percentX="1"
+                app:percentY="0.51"
                 app:framePosition="51"
+                app:percentWidth="1"
+                app:percentHeight="1"
+                app:curveFit="linear"
                 app:motionTarget="@id/date" />
             <KeyAttribute
                 app:motionTarget="@id/date"
-                app:framePosition="50"
+                app:framePosition="30"
                 android:alpha="0"
                 />
+            <KeyAttribute
+                app:motionTarget="@id/date"
+                app:framePosition="70"
+                android:alpha="0"
+                />
+            <KeyPosition
+                app:keyPositionType="pathRelative"
+                app:percentX="0"
+                app:percentY="0"
+                app:framePosition="0"
+                app:curveFit="linear"
+                app:motionTarget="@id/statusIcons" />
+            <KeyPosition
+                app:keyPositionType="pathRelative"
+                app:percentX="0"
+                app:percentY="0"
+                app:framePosition="50"
+                app:curveFit="linear"
+                app:motionTarget="@id/statusIcons" />
+            <KeyPosition
+                app:keyPositionType="deltaRelative"
+                app:percentX="1"
+                app:percentY="0.51"
+                app:framePosition="51"
+                app:curveFit="linear"
+                app:motionTarget="@id/statusIcons" />
+            <KeyAttribute
+                app:motionTarget="@id/statusIcons"
+                app:framePosition="30"
+                android:alpha="0"
+                />
+            <KeyAttribute
+                app:motionTarget="@id/statusIcons"
+                app:framePosition="70"
+                android:alpha="0"
+                />
+            <KeyPosition
+                app:keyPositionType="deltaRelative"
+                app:percentX="0"
+                app:percentY="0"
+                app:framePosition="50"
+                app:percentWidth="1"
+                app:percentHeight="1"
+                app:curveFit="linear"
+                app:motionTarget="@id/batteryRemainingIcon" />
+            <KeyPosition
+                app:keyPositionType="deltaRelative"
+                app:percentX="1"
+                app:percentY="0.51"
+                app:framePosition="51"
+                app:percentWidth="1"
+                app:percentHeight="1"
+                app:curveFit="linear"
+                app:motionTarget="@id/batteryRemainingIcon" />
+            <KeyAttribute
+                app:motionTarget="@id/batteryRemainingIcon"
+                app:framePosition="30"
+                android:alpha="0"
+                />
+            <KeyAttribute
+                app:motionTarget="@id/batteryRemainingIcon"
+                app:framePosition="70"
+                android:alpha="0"
+                />
+            <KeyPosition
+                app:motionTarget="@id/carrier_group"
+                app:percentX="1"
+                app:percentY="0.51"
+                app:framePosition="51"
+                app:percentWidth="1"
+                app:percentHeight="1"
+                app:curveFit="linear"
+                app:keyPositionType="deltaRelative" />
+            <KeyAttribute
+                app:motionTarget="@id/carrier_group"
+                app:framePosition="0"
+                android:alpha="0" />
+            <KeyAttribute
+                app:motionTarget="@id/carrier_group"
+                app:framePosition="70"
+                android:alpha="0" />
         </KeyFrameSet>
     </Transition>
 
diff --git a/packages/SystemUI/res/xml/large_screen_shade_header.xml b/packages/SystemUI/res/xml/large_screen_shade_header.xml
index 8909051..cdbf8ab 100644
--- a/packages/SystemUI/res/xml/large_screen_shade_header.xml
+++ b/packages/SystemUI/res/xml/large_screen_shade_header.xml
@@ -29,7 +29,12 @@
             app:layout_constraintTop_toTopOf="parent"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toStartOf="@id/date"
+            app:layout_constraintHorizontal_bias="0"
         />
+        <Transform
+            android:scaleX="1"
+            android:scaleY="1"
+            />
     </Constraint>
 
     <Constraint
@@ -47,9 +52,38 @@
 
     <Constraint
         android:id="@+id/carrier_group">
+        <Layout
+            app:layout_constraintWidth_min="48dp"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            app:layout_constrainedWidth="true"
+            android:layout_gravity="end|center_vertical"
+            android:layout_marginStart="8dp"
+            app:layout_constraintStart_toEndOf="@id/date"
+            app:layout_constraintEnd_toStartOf="@id/statusIcons"
+            app:layout_constraintTop_toTopOf="@id/clock"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintHorizontal_bias="1"
+            />
         <PropertySet
             android:alpha="1"
-            app:customFloatValue="1"
+        />
+    </Constraint>
+
+    <Constraint
+        android:id="@+id/statusIcons">
+        <Layout
+            app:layout_constraintHeight_min="@dimen/large_screen_shade_header_min_height"
+            android:layout_width="wrap_content"
+            android:layout_height="@dimen/large_screen_shade_header_min_height"
+            app:layout_constraintStart_toEndOf="@id/carrier_group"
+            app:layout_constraintEnd_toStartOf="@id/batteryRemainingIcon"
+            app:layout_constraintTop_toTopOf="@id/clock"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintHorizontal_bias="1"
+            />
+        <PropertySet
+            android:alpha="1"
         />
     </Constraint>
 
@@ -64,6 +98,9 @@
             app:layout_constraintTop_toTopOf="@id/clock"
             app:layout_constraintBottom_toBottomOf="parent"
         />
+        <PropertySet
+            android:alpha="1"
+        />
     </Constraint>
 
     <Constraint
@@ -75,6 +112,7 @@
             app:layout_constraintTop_toTopOf="@id/date"
             app:layout_constraintBottom_toBottomOf="@id/date"
             app:layout_constraintStart_toEndOf="@id/batteryRemainingIcon"
+            app:layout_constraintHorizontal_bias="1"
         />
     </Constraint>
 
diff --git a/packages/SystemUI/res/xml/media_session_collapsed.xml b/packages/SystemUI/res/xml/media_session_collapsed.xml
index eab7def..9115d42 100644
--- a/packages/SystemUI/res/xml/media_session_collapsed.xml
+++ b/packages/SystemUI/res/xml/media_session_collapsed.xml
@@ -19,7 +19,7 @@
     xmlns:app="http://schemas.android.com/apk/res-auto">
 
     <Constraint
-        android:id="@+id/media_action_barrier"
+        android:id="@+id/media_action_barrier_start"
         android:layout_width="0dp"
         android:layout_height="0dp"
         app:layout_constraintTop_toBottomOf="@id/media_seamless"
@@ -91,12 +91,16 @@
         app:layout_constraintRight_toLeftOf="@id/media_progress_bar"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintTop_toBottomOf="@id/media_seamless"
-        app:layout_constraintLeft_toRightOf="@id/media_action_barrier" />
+        app:layout_constraintLeft_toRightOf="@id/media_action_barrier_start" />
 
     <!-- Showing time while scrubbing isn't available in collapsed mode. -->
     <Constraint
         android:id="@+id/media_scrubbing_elapsed_time"
-        android:visibility="gone" />
+        android:visibility="gone"
+        app:layout_constraintRight_toLeftOf="@id/media_progress_bar"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/media_seamless"
+        app:layout_constraintLeft_toRightOf="@id/media_action_barrier_start" />
 
     <Constraint
         android:id="@+id/media_progress_bar"
@@ -124,7 +128,12 @@
     <!-- Showing time while scrubbing isn't available in collapsed mode. -->
     <Constraint
         android:id="@+id/media_scrubbing_total_time"
-        android:visibility="gone" />
+        android:visibility="gone"
+        app:layout_constraintVertical_bias="1"
+        app:layout_constraintLeft_toRightOf="@id/media_progress_bar"
+        app:layout_constraintRight_toLeftOf="@id/action0"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/media_seamless" />
 
     <Constraint
         android:id="@+id/action0"
diff --git a/packages/SystemUI/res/xml/qqs_header.xml b/packages/SystemUI/res/xml/qqs_header.xml
index c5b4c5d..ee0c4fb6 100644
--- a/packages/SystemUI/res/xml/qqs_header.xml
+++ b/packages/SystemUI/res/xml/qqs_header.xml
@@ -26,22 +26,27 @@
         <Layout
             android:layout_width="wrap_content"
             android:layout_height="0dp"
-            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintStart_toStartOf="@id/begin_guide"
             app:layout_constraintTop_toTopOf="parent"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toStartOf="@id/date"
             app:layout_constraintHorizontal_bias="0"
             app:layout_constraintHorizontal_chainStyle="packed"
         />
+        <Transform
+            android:scaleX="1"
+            android:scaleY="1"
+            />
     </Constraint>
 
     <Constraint
         android:id="@+id/date">
         <Layout
-            android:layout_width="wrap_content"
+            android:layout_width="0dp"
             android:layout_height="0dp"
+            app:layout_constrainedWidth="true"
             app:layout_constraintStart_toEndOf="@id/clock"
-            app:layout_constraintEnd_toStartOf="@id/carrier_group"
+            app:layout_constraintEnd_toStartOf="@id/barrier"
             app:layout_constraintTop_toTopOf="parent"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintHorizontal_bias="0"
@@ -50,17 +55,41 @@
 
     <Constraint
         android:id="@+id/statusIcons">
+        <Layout
+            android:layout_width="0dp"
+            android:layout_height="@dimen/qs_header_non_clickable_element_height"
+            app:layout_constraintHeight_min="@dimen/qs_header_non_clickable_element_height"
+            app:layout_constraintStart_toEndOf="@id/date"
+            app:layout_constraintEnd_toStartOf="@id/batteryRemainingIcon"
+            app:layout_constraintTop_toTopOf="@id/date"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintHorizontal_bias="1"
+            />
     </Constraint>
 
     <Constraint
-        android:id="@+id/batteryRemainingIcon" >
+        android:id="@+id/batteryRemainingIcon">
+        <Layout
+            android:layout_width="wrap_content"
+            android:layout_height="@dimen/qs_header_non_clickable_element_height"
+            app:layout_constrainedWidth="true"
+            app:layout_constraintHeight_min="@dimen/qs_header_non_clickable_element_height"
+            app:layout_constraintStart_toEndOf="@id/statusIcons"
+            app:layout_constraintEnd_toEndOf="@id/end_guide"
+            app:layout_constraintTop_toTopOf="@id/date"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintHorizontal_bias="1"
+            />
     </Constraint>
 
     <Constraint
         android:id="@+id/carrier_group">
-        <CustomAttribute
-            app:attributeName="alpha"
-            app:customFloatValue="0"
+        <Layout
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            />
+        <PropertySet
+            android:alpha="0"
         />
     </Constraint>
 
@@ -69,9 +98,11 @@
         <Layout
             android:layout_width="wrap_content"
             android:layout_height="0dp"
-            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toEndOf="@id/date"
+            app:layout_constraintEnd_toEndOf="@id/end_guide"
             app:layout_constraintTop_toTopOf="@id/date"
             app:layout_constraintBottom_toBottomOf="@id/date"
+            app:layout_constraintHorizontal_bias="1"
         />
     </Constraint>
 
diff --git a/packages/SystemUI/res/xml/qs_header_new.xml b/packages/SystemUI/res/xml/qs_header_new.xml
new file mode 100644
index 0000000..f39e6bd
--- /dev/null
+++ b/packages/SystemUI/res/xml/qs_header_new.xml
@@ -0,0 +1,124 @@
+<?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.
+  -->
+
+<ConstraintSet
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/qs_header_constraint"
+>
+
+    <Constraint
+        android:id="@+id/privacy_container">
+        <Layout
+            android:layout_width="wrap_content"
+            android:layout_height="@dimen/large_screen_shade_header_min_height"
+            app:layout_constraintEnd_toEndOf="@id/end_guide"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintBottom_toTopOf="@id/carrier_group"
+            app:layout_constraintHorizontal_bias="1"
+            />
+    </Constraint>
+
+    <Constraint
+        android:id="@+id/clock">
+        <Layout
+            android:layout_width="wrap_content"
+            android:layout_height="@dimen/large_screen_shade_header_min_height"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/privacy_container"
+            app:layout_constraintBottom_toTopOf="@id/date"
+            app:layout_constraintEnd_toStartOf="@id/carrier_group"
+            app:layout_constraintHorizontal_bias="0"
+        />
+        <Transform
+            android:scaleX="2.4"
+            android:scaleY="2.4"
+            />
+    </Constraint>
+
+    <Constraint
+        android:id="@+id/date">
+        <Layout
+            android:layout_width="0dp"
+            android:layout_height="@dimen/qs_header_non_clickable_element_height"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toStartOf="@id/space"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/clock"
+            app:layout_constraintHorizontal_bias="0"
+            app:layout_constraintHorizontal_chainStyle="spread_inside"
+        />
+    </Constraint>
+
+    <Constraint
+        android:id="@+id/carrier_group">
+        <Layout
+            app:layout_constraintHeight_min="@dimen/large_screen_shade_header_min_height"
+            android:minHeight="@dimen/large_screen_shade_header_min_height"
+            app:layout_constraintWidth_min="48dp"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            app:layout_constraintStart_toEndOf="@id/clock"
+            app:layout_constraintTop_toBottomOf="@id/privacy_container"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintHorizontal_bias="1"
+            app:layout_constraintBottom_toTopOf="@id/batteryRemainingIcon"
+            />
+        <PropertySet
+            android:alpha="1"
+            />
+    </Constraint>
+
+    <Constraint
+        android:id="@+id/statusIcons">
+        <Layout
+            android:layout_width="0dp"
+            android:layout_height="@dimen/qs_header_non_clickable_element_height"
+            app:layout_constrainedWidth="true"
+            app:layout_constraintStart_toEndOf="@id/space"
+            app:layout_constraintEnd_toStartOf="@id/batteryRemainingIcon"
+            app:layout_constraintTop_toTopOf="@id/date"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintHorizontal_bias="1"
+            />
+    </Constraint>
+
+    <Constraint
+        android:id="@+id/batteryRemainingIcon">
+        <Layout
+            android:layout_width="wrap_content"
+            android:layout_height="@dimen/qs_header_non_clickable_element_height"
+            app:layout_constraintHeight_min="@dimen/qs_header_non_clickable_element_height"
+            app:layout_constraintStart_toEndOf="@id/statusIcons"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="@id/date"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintHorizontal_bias="1"
+            />
+    </Constraint>
+
+
+    <Constraint
+        android:id="@id/space">
+        <Layout
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            app:layout_constraintStart_toEndOf="@id/date"
+            app:layout_constraintEnd_toStartOf="@id/statusIcons"
+            />
+    </Constraint>
+</ConstraintSet>
\ No newline at end of file
diff --git a/packages/SystemUI/screenshot/Android.bp b/packages/SystemUI/screenshot/Android.bp
new file mode 100644
index 0000000..f449398
--- /dev/null
+++ b/packages/SystemUI/screenshot/Android.bp
@@ -0,0 +1,45 @@
+// Copyright (C) 2022 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "frameworks_base_packages_SystemUI_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["frameworks_base_packages_SystemUI_license"],
+}
+
+android_library {
+    name: "SystemUIScreenshotLib",
+    manifest: "AndroidManifest.xml",
+
+    srcs: [
+        "src/**/*.kt",
+    ],
+
+    resource_dirs: [
+        "res",
+    ],
+
+    static_libs: [
+        "SystemUI-core",
+        "androidx.test.espresso.core",
+        "androidx.appcompat_appcompat",
+        "platform-screenshot-diff-core",
+        "guava",
+    ],
+
+    kotlincflags: ["-Xjvm-default=all"],
+}
diff --git a/packages/SystemUI/screenshot/AndroidManifest.xml b/packages/SystemUI/screenshot/AndroidManifest.xml
new file mode 100644
index 0000000..a405836
--- /dev/null
+++ b/packages/SystemUI/screenshot/AndroidManifest.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2022 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT 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.systemui.testing.screenshot">
+    <application>
+        <activity
+            android:name="com.android.systemui.testing.screenshot.ScreenshotActivity"
+            android:exported="true"
+            android:theme="@style/Theme.SystemUI.Screenshot" />
+    </application>
+</manifest>
diff --git a/packages/SystemUI/screenshot/res/values/themes.xml b/packages/SystemUI/screenshot/res/values/themes.xml
new file mode 100644
index 0000000..a7f8a26
--- /dev/null
+++ b/packages/SystemUI/screenshot/res/values/themes.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2022 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources>
+    <style name="Theme.SystemUI.Screenshot" parent="Theme.SystemUI">
+        <item name="android:windowActionBar">false</item>
+        <item name="android:windowNoTitle">true</item>
+
+        <!-- We make the status and navigation bars transparent so that the screenshotted content is
+             not clipped by the status bar height when drawn into the Bitmap (which is what happens
+             given that we draw the view into the Bitmap using hardware acceleration). -->
+        <item name="android:statusBarColor">@android:color/transparent</item>
+        <item name="android:navigationBarColor">@android:color/transparent</item>
+
+        <!-- Make sure that device specific cutouts don't impact the outcome of screenshot tests -->
+        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
+    </style>
+</resources>
\ No newline at end of file
diff --git a/packages/SystemUI/screenshot/src/com/android/systemui/testing/screenshot/Bitmap.kt b/packages/SystemUI/screenshot/src/com/android/systemui/testing/screenshot/Bitmap.kt
new file mode 100644
index 0000000..a4a70a4
--- /dev/null
+++ b/packages/SystemUI/screenshot/src/com/android/systemui/testing/screenshot/Bitmap.kt
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.testing.screenshot
+
+import android.graphics.Bitmap
+import android.graphics.Canvas
+import android.os.Build
+import android.view.View
+import platform.test.screenshot.matchers.MSSIMMatcher
+import platform.test.screenshot.matchers.PixelPerfectMatcher
+
+/** Draw this [View] into a [Bitmap]. */
+// TODO(b/195673633): Remove this once Compose screenshot tests use hardware rendering for their
+// tests.
+fun View.drawIntoBitmap(): Bitmap {
+    val bitmap =
+        Bitmap.createBitmap(
+            measuredWidth,
+            measuredHeight,
+            Bitmap.Config.ARGB_8888,
+        )
+    val canvas = Canvas(bitmap)
+    draw(canvas)
+    return bitmap
+}
+
+/**
+ * The [BitmapMatcher][platform.test.screenshot.matchers.BitmapMatcher] that should be used for
+ * screenshot *unit* tests.
+ */
+val UnitTestBitmapMatcher =
+    if (Build.CPU_ABI == "x86_64") {
+        // Different CPU architectures can sometimes end up rendering differently, so we can't do
+        // pixel-perfect matching on different architectures using the same golden. Given that our
+        // presubmits are run on cf_x86_64_phone, our goldens should be perfectly matched on the
+        // x86_64 architecture and use the Structural Similarity Index on others.
+        // TODO(b/237511747): Run our screenshot presubmit tests on arm64 instead so that we can
+        // do pixel perfect matching both at presubmit time and at development time with actual
+        // devices.
+        PixelPerfectMatcher()
+    } else {
+        MSSIMMatcher()
+    }
+
+/**
+ * The [BitmapMatcher][platform.test.screenshot.matchers.BitmapMatcher] that should be used for
+ * screenshot *unit* tests.
+ *
+ * We use the Structural Similarity Index for integration tests because they usually contain
+ * additional information and noise that shouldn't break the test.
+ */
+val IntegrationTestBitmapMatcher = MSSIMMatcher()
diff --git a/packages/SystemUI/screenshot/src/com/android/systemui/testing/screenshot/ScreenshotActivity.kt b/packages/SystemUI/screenshot/src/com/android/systemui/testing/screenshot/ScreenshotActivity.kt
new file mode 100644
index 0000000..2a55a80
--- /dev/null
+++ b/packages/SystemUI/screenshot/src/com/android/systemui/testing/screenshot/ScreenshotActivity.kt
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.testing.screenshot
+
+import androidx.activity.ComponentActivity
+
+/** The Activity that is launched and whose content is set for screenshot tests. */
+class ScreenshotActivity : ComponentActivity()
diff --git a/packages/SystemUI/screenshot/src/com/android/systemui/testing/screenshot/SystemUIGoldenImagePathManager.kt b/packages/SystemUI/screenshot/src/com/android/systemui/testing/screenshot/SystemUIGoldenImagePathManager.kt
new file mode 100644
index 0000000..cbab0a7
--- /dev/null
+++ b/packages/SystemUI/screenshot/src/com/android/systemui/testing/screenshot/SystemUIGoldenImagePathManager.kt
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.testing.screenshot
+
+import androidx.test.platform.app.InstrumentationRegistry
+import platform.test.screenshot.GoldenImagePathManager
+import platform.test.screenshot.PathConfig
+
+/** A [GoldenImagePathManager] that should be used for all SystemUI screenshot tests. */
+class SystemUIGoldenImagePathManager(
+    pathConfig: PathConfig,
+) :
+    GoldenImagePathManager(
+        appContext = InstrumentationRegistry.getInstrumentation().context,
+        deviceLocalPath =
+            InstrumentationRegistry.getInstrumentation()
+                .targetContext
+                .filesDir
+                .absolutePath
+                .toString() + "/sysui_screenshots",
+        pathConfig = pathConfig,
+    ) {
+    override fun toString(): String {
+        // This string is appended to all actual/expected screenshots on the device, so make sure
+        // it is a static value.
+        return "SystemUIGoldenImagePathManager"
+    }
+}
diff --git a/packages/SystemUI/screenshot/src/com/android/systemui/testing/screenshot/ViewCapture.kt b/packages/SystemUI/screenshot/src/com/android/systemui/testing/screenshot/ViewCapture.kt
new file mode 100644
index 0000000..c609e6f
--- /dev/null
+++ b/packages/SystemUI/screenshot/src/com/android/systemui/testing/screenshot/ViewCapture.kt
@@ -0,0 +1,180 @@
+package com.android.systemui.testing.screenshot
+
+import android.app.Activity
+import android.content.Context
+import android.content.ContextWrapper
+import android.graphics.Bitmap
+import android.graphics.Canvas
+import android.graphics.Rect
+import android.os.Build
+import android.os.Handler
+import android.os.Looper
+import android.util.Log
+import android.view.PixelCopy
+import android.view.SurfaceView
+import android.view.View
+import android.view.ViewTreeObserver
+import android.view.Window
+import androidx.annotation.RequiresApi
+import androidx.concurrent.futures.ResolvableFuture
+import androidx.test.annotation.ExperimentalTestApi
+import androidx.test.core.internal.os.HandlerExecutor
+import androidx.test.platform.graphics.HardwareRendererCompat
+import com.google.common.util.concurrent.ListenableFuture
+
+/*
+ * This file was forked from androidx/test/core/view/ViewCapture.kt to add [Window] parameter to
+ * [View.captureToBitmap].
+ * TODO(b/195673633): Remove this fork and use the AndroidX version instead.
+ */
+
+/**
+ * Asynchronously captures an image of the underlying view into a [Bitmap].
+ *
+ * For devices below [Build.VERSION_CODES#O] (or if the view's window cannot be determined), the
+ * image is obtained using [View#draw]. Otherwise, [PixelCopy] is used.
+ *
+ * This method will also enable [HardwareRendererCompat#setDrawingEnabled(boolean)] if required.
+ *
+ * This API is primarily intended for use in lower layer libraries or frameworks. For test authors,
+ * its recommended to use espresso or compose's captureToImage.
+ *
+ * This API is currently experimental and subject to change or removal.
+ */
+@ExperimentalTestApi
+@RequiresApi(Build.VERSION_CODES.JELLY_BEAN)
+fun View.captureToBitmap(window: Window? = null): ListenableFuture<Bitmap> {
+    val bitmapFuture: ResolvableFuture<Bitmap> = ResolvableFuture.create()
+    val mainExecutor = HandlerExecutor(Handler(Looper.getMainLooper()))
+
+    // disable drawing again if necessary once work is complete
+    if (!HardwareRendererCompat.isDrawingEnabled()) {
+        HardwareRendererCompat.setDrawingEnabled(true)
+        bitmapFuture.addListener({ HardwareRendererCompat.setDrawingEnabled(false) }, mainExecutor)
+    }
+
+    mainExecutor.execute {
+        val forceRedrawFuture = forceRedraw()
+        forceRedrawFuture.addListener({ generateBitmap(bitmapFuture, window) }, mainExecutor)
+    }
+
+    return bitmapFuture
+}
+
+/**
+ * Trigger a redraw of the given view.
+ *
+ * Should only be called on UI thread.
+ *
+ * @return a [ListenableFuture] that will be complete once ui drawing is complete
+ */
+// NoClassDefFoundError occurs on API 15
+@RequiresApi(Build.VERSION_CODES.JELLY_BEAN)
+// @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+@ExperimentalTestApi
+fun View.forceRedraw(): ListenableFuture<Void> {
+    val future: ResolvableFuture<Void> = ResolvableFuture.create()
+
+    if (Build.VERSION.SDK_INT >= 29 && isHardwareAccelerated) {
+        viewTreeObserver.registerFrameCommitCallback() { future.set(null) }
+    } else {
+        viewTreeObserver.addOnDrawListener(
+            object : ViewTreeObserver.OnDrawListener {
+                var handled = false
+                override fun onDraw() {
+                    if (!handled) {
+                        handled = true
+                        future.set(null)
+                        // cannot remove on draw listener inside of onDraw
+                        Handler(Looper.getMainLooper()).post {
+                            viewTreeObserver.removeOnDrawListener(this)
+                        }
+                    }
+                }
+            }
+        )
+    }
+    invalidate()
+    return future
+}
+
+private fun View.generateBitmap(
+    bitmapFuture: ResolvableFuture<Bitmap>,
+    window: Window? = null,
+) {
+    if (bitmapFuture.isCancelled) {
+        return
+    }
+    val destBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
+    when {
+        Build.VERSION.SDK_INT < 26 -> generateBitmapFromDraw(destBitmap, bitmapFuture)
+        this is SurfaceView -> generateBitmapFromSurfaceViewPixelCopy(destBitmap, bitmapFuture)
+        else -> {
+            val window = window ?: getActivity()?.window
+            if (window != null) {
+                generateBitmapFromPixelCopy(window, destBitmap, bitmapFuture)
+            } else {
+                Log.i(
+                    "View.captureToImage",
+                    "Could not find window for view. Falling back to View#draw instead of PixelCopy"
+                )
+                generateBitmapFromDraw(destBitmap, bitmapFuture)
+            }
+        }
+    }
+}
+
+@SuppressWarnings("NewApi")
+private fun SurfaceView.generateBitmapFromSurfaceViewPixelCopy(
+    destBitmap: Bitmap,
+    bitmapFuture: ResolvableFuture<Bitmap>
+) {
+    val onCopyFinished =
+        PixelCopy.OnPixelCopyFinishedListener { result ->
+            if (result == PixelCopy.SUCCESS) {
+                bitmapFuture.set(destBitmap)
+            } else {
+                bitmapFuture.setException(
+                    RuntimeException(String.format("PixelCopy failed: %d", result))
+                )
+            }
+        }
+    PixelCopy.request(this, null, destBitmap, onCopyFinished, handler)
+}
+
+internal fun View.generateBitmapFromDraw(
+    destBitmap: Bitmap,
+    bitmapFuture: ResolvableFuture<Bitmap>
+) {
+    destBitmap.density = resources.displayMetrics.densityDpi
+    computeScroll()
+    val canvas = Canvas(destBitmap)
+    canvas.translate((-scrollX).toFloat(), (-scrollY).toFloat())
+    draw(canvas)
+    bitmapFuture.set(destBitmap)
+}
+
+private fun View.getActivity(): Activity? {
+    fun Context.getActivity(): Activity? {
+        return when (this) {
+            is Activity -> this
+            is ContextWrapper -> this.baseContext.getActivity()
+            else -> null
+        }
+    }
+    return context.getActivity()
+}
+
+private fun View.generateBitmapFromPixelCopy(
+    window: Window,
+    destBitmap: Bitmap,
+    bitmapFuture: ResolvableFuture<Bitmap>
+) {
+    val locationInWindow = intArrayOf(0, 0)
+    getLocationInWindow(locationInWindow)
+    val x = locationInWindow[0]
+    val y = locationInWindow[1]
+    val boundsInWindow = Rect(x, y, x + width, y + height)
+
+    return window.generateBitmapFromPixelCopy(boundsInWindow, destBitmap, bitmapFuture)
+}
diff --git a/packages/SystemUI/screenshot/src/com/android/systemui/testing/screenshot/ViewScreenshotTestRule.kt b/packages/SystemUI/screenshot/src/com/android/systemui/testing/screenshot/ViewScreenshotTestRule.kt
new file mode 100644
index 0000000..60130e1
--- /dev/null
+++ b/packages/SystemUI/screenshot/src/com/android/systemui/testing/screenshot/ViewScreenshotTestRule.kt
@@ -0,0 +1,203 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.testing.screenshot
+
+import android.app.Activity
+import android.app.Dialog
+import android.graphics.Bitmap
+import android.graphics.HardwareRenderer
+import android.os.Looper
+import android.view.View
+import android.view.ViewGroup
+import android.view.ViewGroup.LayoutParams
+import android.view.ViewGroup.LayoutParams.MATCH_PARENT
+import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
+import android.view.Window
+import androidx.activity.ComponentActivity
+import androidx.test.espresso.Espresso
+import androidx.test.ext.junit.rules.ActivityScenarioRule
+import com.google.common.util.concurrent.FutureCallback
+import com.google.common.util.concurrent.Futures
+import kotlin.coroutines.suspendCoroutine
+import kotlinx.coroutines.runBlocking
+import org.junit.Assert.assertEquals
+import org.junit.rules.RuleChain
+import org.junit.rules.TestRule
+import org.junit.runner.Description
+import org.junit.runners.model.Statement
+import platform.test.screenshot.DeviceEmulationRule
+import platform.test.screenshot.DeviceEmulationSpec
+import platform.test.screenshot.MaterialYouColorsRule
+import platform.test.screenshot.ScreenshotTestRule
+import platform.test.screenshot.getEmulatedDevicePathConfig
+
+/** A rule for View screenshot diff unit tests. */
+class ViewScreenshotTestRule(emulationSpec: DeviceEmulationSpec) : TestRule {
+    private val colorsRule = MaterialYouColorsRule()
+    private val deviceEmulationRule = DeviceEmulationRule(emulationSpec)
+    private val screenshotRule =
+        ScreenshotTestRule(
+            SystemUIGoldenImagePathManager(getEmulatedDevicePathConfig(emulationSpec))
+        )
+    private val activityRule = ActivityScenarioRule(ScreenshotActivity::class.java)
+    private val delegateRule =
+        RuleChain.outerRule(colorsRule)
+            .around(deviceEmulationRule)
+            .around(screenshotRule)
+            .around(activityRule)
+    private val matcher = UnitTestBitmapMatcher
+
+    override fun apply(base: Statement, description: Description): Statement {
+        return delegateRule.apply(base, description)
+    }
+
+    /**
+     * Compare the content of the view provided by [viewProvider] with the golden image identified
+     * by [goldenIdentifier] in the context of [emulationSpec].
+     */
+    fun screenshotTest(
+        goldenIdentifier: String,
+        mode: Mode = Mode.WrapContent,
+        viewProvider: (ComponentActivity) -> View,
+    ) {
+        activityRule.scenario.onActivity { activity ->
+            // Make sure that the activity draws full screen and fits the whole display instead of
+            // the system bars.
+            val window = activity.window
+            window.setDecorFitsSystemWindows(false)
+
+            // Set the content.
+            activity.setContentView(viewProvider(activity), mode.layoutParams)
+
+            // Elevation/shadows is not deterministic when doing hardware rendering, so we disable
+            // it for any view in the hierarchy.
+            window.decorView.removeElevationRecursively()
+        }
+
+        // We call onActivity again because it will make sure that our Activity is done measuring,
+        // laying out and drawing its content (that we set in the previous onActivity lambda).
+        var contentView: View? = null
+        activityRule.scenario.onActivity { activity ->
+            // Check that the content is what we expected.
+            val content = activity.requireViewById<ViewGroup>(android.R.id.content)
+            assertEquals(1, content.childCount)
+            contentView = content.getChildAt(0)
+        }
+
+        val bitmap = contentView?.toBitmap() ?: error("contentView is null")
+        screenshotRule.assertBitmapAgainstGolden(
+            bitmap,
+            goldenIdentifier,
+            matcher,
+        )
+    }
+
+    /**
+     * Compare the content of the dialog provided by [dialogProvider] with the golden image
+     * identified by [goldenIdentifier] in the context of [emulationSpec].
+     */
+    fun dialogScreenshotTest(
+        goldenIdentifier: String,
+        dialogProvider: (Activity) -> Dialog,
+    ) {
+        var dialog: Dialog? = null
+        activityRule.scenario.onActivity { activity ->
+            dialog =
+                dialogProvider(activity).apply {
+                    // Make sure that the dialog draws full screen and fits the whole display
+                    // instead of the system bars.
+                    window.setDecorFitsSystemWindows(false)
+
+                    // Disable enter/exit animations.
+                    create()
+                    window.setWindowAnimations(0)
+
+                    // Elevation/shadows is not deterministic when doing hardware rendering, so we
+                    // disable it for any view in the hierarchy.
+                    window.decorView.removeElevationRecursively()
+
+                    // Show the dialog.
+                    show()
+                }
+        }
+
+        try {
+            val bitmap = dialog?.toBitmap() ?: error("dialog is null")
+            screenshotRule.assertBitmapAgainstGolden(
+                bitmap,
+                goldenIdentifier,
+                matcher,
+            )
+        } finally {
+            dialog?.dismiss()
+        }
+    }
+
+    private fun View.removeElevationRecursively() {
+        this.elevation = 0f
+
+        if (this is ViewGroup) {
+            repeat(childCount) { i -> getChildAt(i).removeElevationRecursively() }
+        }
+    }
+
+    private fun Dialog.toBitmap(): Bitmap {
+        val window = window
+        return window.decorView.toBitmap(window)
+    }
+
+    private fun View.toBitmap(window: Window? = null): Bitmap {
+        if (Looper.getMainLooper() == Looper.myLooper()) {
+            error("toBitmap() can't be called from the main thread")
+        }
+
+        if (!HardwareRenderer.isDrawingEnabled()) {
+            error("Hardware rendering is not enabled")
+        }
+
+        // Make sure we are idle.
+        Espresso.onIdle()
+
+        val mainExecutor = context.mainExecutor
+        return runBlocking {
+            suspendCoroutine { continuation ->
+                Futures.addCallback(
+                    captureToBitmap(window),
+                    object : FutureCallback<Bitmap> {
+                        override fun onSuccess(result: Bitmap?) {
+                            continuation.resumeWith(Result.success(result!!))
+                        }
+
+                        override fun onFailure(t: Throwable) {
+                            continuation.resumeWith(Result.failure(t))
+                        }
+                    },
+                    // We know that we are not on the main thread, so we can block the current
+                    // thread and wait for the result in the main thread.
+                    mainExecutor,
+                )
+            }
+        }
+    }
+
+    enum class Mode(val layoutParams: LayoutParams) {
+        WrapContent(LayoutParams(WRAP_CONTENT, WRAP_CONTENT)),
+        MatchSize(LayoutParams(MATCH_PARENT, MATCH_PARENT)),
+        MatchWidth(LayoutParams(MATCH_PARENT, WRAP_CONTENT)),
+        MatchHeight(LayoutParams(WRAP_CONTENT, MATCH_PARENT)),
+    }
+}
diff --git a/packages/SystemUI/screenshot/src/com/android/systemui/testing/screenshot/WindowCapture.kt b/packages/SystemUI/screenshot/src/com/android/systemui/testing/screenshot/WindowCapture.kt
new file mode 100644
index 0000000..d34f46b
--- /dev/null
+++ b/packages/SystemUI/screenshot/src/com/android/systemui/testing/screenshot/WindowCapture.kt
@@ -0,0 +1,37 @@
+package com.android.systemui.testing.screenshot
+
+import android.graphics.Bitmap
+import android.graphics.Rect
+import android.os.Handler
+import android.os.Looper
+import android.view.PixelCopy
+import android.view.Window
+import androidx.concurrent.futures.ResolvableFuture
+
+/*
+ * This file was forked from androidx/test/core/view/WindowCapture.kt.
+ * TODO(b/195673633): Remove this fork and use the AndroidX version instead.
+ */
+fun Window.generateBitmapFromPixelCopy(
+    boundsInWindow: Rect? = null,
+    destBitmap: Bitmap,
+    bitmapFuture: ResolvableFuture<Bitmap>
+) {
+    val onCopyFinished =
+        PixelCopy.OnPixelCopyFinishedListener { result ->
+            if (result == PixelCopy.SUCCESS) {
+                bitmapFuture.set(destBitmap)
+            } else {
+                bitmapFuture.setException(
+                    RuntimeException(String.format("PixelCopy failed: %d", result))
+                )
+            }
+        }
+    PixelCopy.request(
+        this,
+        boundsInWindow,
+        destBitmap,
+        onCopyFinished,
+        Handler(Looper.getMainLooper())
+    )
+}
diff --git a/packages/SystemUI/shared/Android.bp b/packages/SystemUI/shared/Android.bp
index 3cf5bc1..18bd6b4 100644
--- a/packages/SystemUI/shared/Android.bp
+++ b/packages/SystemUI/shared/Android.bp
@@ -47,11 +47,18 @@
     ],
     static_libs: [
         "PluginCoreLib",
+        "SystemUIAnimationLib",
+        "SystemUIPluginLib",
+        "SystemUIUnfoldLib",
         "androidx.dynamicanimation_dynamicanimation",
         "androidx.concurrent_concurrent-futures",
+        "gson-prebuilt-jar",
         "dagger2",
         "jsr330",
     ],
+    resource_dirs: [
+        "res",
+    ],
     java_version: "1.8",
     min_sdk_version: "current",
     plugins: ["dagger2-compiler"],
diff --git a/packages/SystemUI/shared/res/drawable/clock_default_thumbnail.xml b/packages/SystemUI/shared/res/drawable/clock_default_thumbnail.xml
new file mode 100644
index 0000000..be72d0b
--- /dev/null
+++ b/packages/SystemUI/shared/res/drawable/clock_default_thumbnail.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2022 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License
+  -->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="#FFFF00FF" />
+</shape>
diff --git a/packages/SystemUI/shared/res/layout/clock_default_large.xml b/packages/SystemUI/shared/res/layout/clock_default_large.xml
new file mode 100644
index 0000000..8510a0a
--- /dev/null
+++ b/packages/SystemUI/shared/res/layout/clock_default_large.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2022, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License")
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+<com.android.systemui.shared.clocks.AnimatableClockView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/animatable_clock_view_large"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:layout_gravity="center"
+    android:gravity="center_horizontal"
+    android:textSize="@dimen/large_clock_text_size"
+    android:fontFamily="@*android:string/config_clockFontFamily"
+    android:typeface="monospace"
+    android:elegantTextHeight="false"
+    chargeAnimationDelay="200"
+    dozeWeight="200"
+    lockScreenWeight="400" />
diff --git a/packages/SystemUI/shared/res/layout/clock_default_small.xml b/packages/SystemUI/shared/res/layout/clock_default_small.xml
new file mode 100644
index 0000000..ec0e427
--- /dev/null
+++ b/packages/SystemUI/shared/res/layout/clock_default_small.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2022, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License")
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+<com.android.systemui.shared.clocks.AnimatableClockView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/animatable_clock_view"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:layout_gravity="start"
+    android:gravity="start"
+    android:textSize="@dimen/small_clock_text_size"
+    android:fontFamily="@*android:string/config_clockFontFamily"
+    android:elegantTextHeight="false"
+    android:singleLine="true"
+    android:fontFeatureSettings="pnum"
+    chargeAnimationDelay="350"
+    dozeWeight="200"
+    lockScreenWeight="400" />
diff --git a/packages/SystemUI/shared/res/values/attrs.xml b/packages/SystemUI/shared/res/values/attrs.xml
new file mode 100644
index 0000000..f9d66ee
--- /dev/null
+++ b/packages/SystemUI/shared/res/values/attrs.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2022 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<!-- Formatting note: terminate all comments with a period, to avoid breaking
+     the documentation output. To suppress comment lines from the documentation
+     output, insert an eat-comment element after the comment lines.
+-->
+
+<resources>
+    <declare-styleable name="AnimatableClockView">
+        <attr name="dozeWeight" format="integer" />
+        <attr name="lockScreenWeight" format="integer" />
+        <attr name="chargeAnimationDelay" format="integer" />
+    </declare-styleable>
+</resources>
diff --git a/packages/SystemUI/shared/res/values/dimens.xml b/packages/SystemUI/shared/res/values/dimens.xml
new file mode 100644
index 0000000..8f90f0f
--- /dev/null
+++ b/packages/SystemUI/shared/res/values/dimens.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (c) 2022, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+-->
+<resources>
+    <!-- Clock maximum font size (dp is intentional, to prevent any further scaling) -->
+    <dimen name="large_clock_text_size">150sp</dimen>
+    <dimen name="small_clock_text_size">86sp</dimen>
+
+    <!-- Default line spacing multiplier between hours and minutes of the keyguard clock -->
+    <item name="keyguard_clock_line_spacing_scale" type="dimen" format="float">.7</item>
+    <!-- Burmese line spacing multiplier between hours and minutes of the keyguard clock -->
+    <item name="keyguard_clock_line_spacing_scale_burmese" type="dimen" format="float">1</item>
+</resources>
\ No newline at end of file
diff --git a/packages/SystemUI/shared/res/values/donottranslate.xml b/packages/SystemUI/shared/res/values/donottranslate.xml
new file mode 100644
index 0000000..383d5521
--- /dev/null
+++ b/packages/SystemUI/shared/res/values/donottranslate.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2022 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR 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">
+    <!-- Skeleton string format for displaying the time in 12-hour format. -->
+    <string name="clock_12hr_format">hm</string>
+
+    <!-- Skeleton string format for displaying the time in 24-hour format. -->
+    <string name="clock_24hr_format">Hm</string>
+</resources>
diff --git a/packages/SystemUI/shared/src/com/android/systemui/flags/Flag.kt b/packages/SystemUI/shared/src/com/android/systemui/flags/Flag.kt
index 19a5309..f7049cf 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/flags/Flag.kt
+++ b/packages/SystemUI/shared/src/com/android/systemui/flags/Flag.kt
@@ -29,6 +29,7 @@
 
 interface ParcelableFlag<T> : Flag<T>, Parcelable {
     val default: T
+    val overridden: Boolean
     override fun describeContents() = 0
 }
 
@@ -36,44 +37,108 @@
     val resourceId: Int
 }
 
+interface DeviceConfigFlag<T> : Flag<T> {
+    val name: String
+    val namespace: String
+    val default: T
+}
+
 interface SysPropFlag<T> : Flag<T> {
     val name: String
     val default: T
 }
 
+/**
+ * Base class for most common boolean flags.
+ *
+ * See [UnreleasedFlag] and [ReleasedFlag] for useful implementations.
+ */
 // Consider using the "parcelize" kotlin library.
-
-data class BooleanFlag @JvmOverloads constructor(
+abstract class BooleanFlag constructor(
     override val id: Int,
     override val default: Boolean = false,
-    override val teamfood: Boolean = false
+    override val teamfood: Boolean = false,
+    override val overridden: Boolean = false
 ) : ParcelableFlag<Boolean> {
 
     companion object {
         @JvmField
         val CREATOR = object : Parcelable.Creator<BooleanFlag> {
-            override fun createFromParcel(parcel: Parcel) = BooleanFlag(parcel)
+            override fun createFromParcel(parcel: Parcel) = object : BooleanFlag(parcel) {}
             override fun newArray(size: Int) = arrayOfNulls<BooleanFlag>(size)
         }
     }
 
     private constructor(parcel: Parcel) : this(
         id = parcel.readInt(),
-        default = parcel.readBoolean()
+        default = parcel.readBoolean(),
+        teamfood = parcel.readBoolean(),
+        overridden = parcel.readBoolean()
     )
 
     override fun writeToParcel(parcel: Parcel, flags: Int) {
         parcel.writeInt(id)
         parcel.writeBoolean(default)
+        parcel.writeBoolean(teamfood)
+        parcel.writeBoolean(overridden)
     }
 }
 
+/**
+ * A Flag that is is false by default.
+ *
+ * It can be changed or overridden in debug builds but not in release builds.
+ */
+data class UnreleasedFlag @JvmOverloads constructor(
+    override val id: Int,
+    override val teamfood: Boolean = false,
+    override val overridden: Boolean = false
+) : BooleanFlag(id, false, teamfood, overridden)
+
+/**
+ * A Flag that is is true by default.
+ *
+ * It can be changed or overridden in any build, meaning it can be turned off if needed.
+ */
+data class ReleasedFlag @JvmOverloads constructor(
+    override val id: Int,
+    override val teamfood: Boolean = false,
+    override val overridden: Boolean = false
+) : BooleanFlag(id, true, teamfood, overridden)
+
+/**
+ * A Flag that reads its default values from a resource overlay instead of code.
+ *
+ * Prefer [UnreleasedFlag] and [ReleasedFlag].
+ */
 data class ResourceBooleanFlag @JvmOverloads constructor(
     override val id: Int,
     @BoolRes override val resourceId: Int,
     override val teamfood: Boolean = false
 ) : ResourceFlag<Boolean>
 
+/**
+ * A Flag that can reads its overrides from DeviceConfig.
+ *
+ * This is generally useful for flags that come from or are used _outside_ of SystemUI.
+ *
+ * Prefer [UnreleasedFlag] and [ReleasedFlag].
+ */
+data class DeviceConfigBooleanFlag @JvmOverloads constructor(
+    override val id: Int,
+    override val name: String,
+    override val namespace: String,
+    override val default: Boolean = false,
+    override val teamfood: Boolean = false
+) : DeviceConfigFlag<Boolean>
+
+/**
+ * A Flag that can reads its overrides from System Properties.
+ *
+ * This is generally useful for flags that come from or are used _outside_ of SystemUI.
+ *
+ * Prefer [UnreleasedFlag] and [ReleasedFlag].
+ */
 data class SysPropBooleanFlag @JvmOverloads constructor(
     override val id: Int,
     override val name: String,
@@ -86,7 +151,8 @@
 data class StringFlag @JvmOverloads constructor(
     override val id: Int,
     override val default: String = "",
-    override val teamfood: Boolean = false
+    override val teamfood: Boolean = false,
+    override val overridden: Boolean = false
 ) : ParcelableFlag<String> {
     companion object {
         @JvmField
@@ -116,7 +182,8 @@
 data class IntFlag @JvmOverloads constructor(
     override val id: Int,
     override val default: Int = 0,
-    override val teamfood: Boolean = false
+    override val teamfood: Boolean = false,
+    override val overridden: Boolean = false
 ) : ParcelableFlag<Int> {
 
     companion object {
@@ -147,7 +214,8 @@
 data class LongFlag @JvmOverloads constructor(
     override val id: Int,
     override val default: Long = 0,
-    override val teamfood: Boolean = false
+    override val teamfood: Boolean = false,
+    override val overridden: Boolean = false
 ) : ParcelableFlag<Long> {
 
     companion object {
@@ -172,7 +240,8 @@
 data class FloatFlag @JvmOverloads constructor(
     override val id: Int,
     override val default: Float = 0f,
-    override val teamfood: Boolean = false
+    override val teamfood: Boolean = false,
+    override val overridden: Boolean = false
 ) : ParcelableFlag<Float> {
 
     companion object {
@@ -203,7 +272,8 @@
 data class DoubleFlag @JvmOverloads constructor(
     override val id: Int,
     override val default: Double = 0.0,
-    override val teamfood: Boolean = false
+    override val teamfood: Boolean = false,
+    override val overridden: Boolean = false
 ) : ParcelableFlag<Double> {
 
     companion object {
@@ -223,4 +293,4 @@
         parcel.writeInt(id)
         parcel.writeDouble(default)
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/shared/src/com/android/systemui/flags/FlagManager.kt b/packages/SystemUI/shared/src/com/android/systemui/flags/FlagManager.kt
index 26e40e1..d172690 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/flags/FlagManager.kt
+++ b/packages/SystemUI/shared/src/com/android/systemui/flags/FlagManager.kt
@@ -64,20 +64,29 @@
         intent.setPackage(RECEIVING_PACKAGE)
 
         return CallbackToFutureAdapter.getFuture {
-            completer: CallbackToFutureAdapter.Completer<Collection<Flag<*>>> ->
-                context.sendOrderedBroadcast(intent, null,
-                    object : BroadcastReceiver() {
-                        override fun onReceive(context: Context, intent: Intent) {
-                            val extras: Bundle? = getResultExtras(false)
-                            val listOfFlags: java.util.ArrayList<ParcelableFlag<*>>? =
-                                extras?.getParcelableArrayList(EXTRA_FLAGS)
-                            if (listOfFlags != null) {
-                                completer.set(listOfFlags)
-                            } else {
-                                completer.setException(NoFlagResultsException())
-                            }
+                completer: CallbackToFutureAdapter.Completer<Collection<Flag<*>>> ->
+            context.sendOrderedBroadcast(
+                intent,
+                null,
+                object : BroadcastReceiver() {
+                    override fun onReceive(context: Context, intent: Intent) {
+                        val extras: Bundle? = getResultExtras(false)
+                        val listOfFlags: java.util.ArrayList<ParcelableFlag<*>>? =
+                            extras?.getParcelableArrayList(
+                                EXTRA_FLAGS, ParcelableFlag::class.java
+                            )
+                        if (listOfFlags != null) {
+                            completer.set(listOfFlags)
+                        } else {
+                            completer.setException(NoFlagResultsException())
                         }
-                    }, null, Activity.RESULT_OK, "extra data", null)
+                    }
+                },
+                null,
+                Activity.RESULT_OK,
+                "extra data",
+                null
+            )
             "QueryingFlags"
         }
     }
@@ -152,7 +161,11 @@
             }
             val parts = uri.pathSegments
             val idStr = parts[parts.size - 1]
-            val id = try { idStr.toInt() } catch (e: NumberFormatException) { return }
+            val id = try {
+                idStr.toInt()
+            } catch (e: NumberFormatException) {
+                return
+            }
             clearCacheAction?.accept(id)
             dispatchListenersAndMaybeRestart(id, onSettingsChangedAction)
         }
@@ -188,4 +201,5 @@
 }
 
 class NoFlagResultsException : Exception(
-    "SystemUI failed to communicate its flags back successfully")
\ No newline at end of file
+    "SystemUI failed to communicate its flags back successfully"
+)
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/clocks/AnimatableClockView.kt b/packages/SystemUI/shared/src/com/android/systemui/shared/clocks/AnimatableClockView.kt
new file mode 100644
index 0000000..2739d59
--- /dev/null
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/clocks/AnimatableClockView.kt
@@ -0,0 +1,399 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.systemui.shared.clocks
+
+import android.animation.TimeInterpolator
+import android.annotation.ColorInt
+import android.annotation.FloatRange
+import android.annotation.IntRange
+import android.annotation.SuppressLint
+import android.content.Context
+import android.graphics.Canvas
+import android.text.TextUtils
+import android.text.format.DateFormat
+import android.util.AttributeSet
+import android.widget.TextView
+import com.android.systemui.animation.GlyphCallback
+import com.android.systemui.animation.Interpolators
+import com.android.systemui.animation.TextAnimator
+import com.android.systemui.shared.R
+import java.io.PrintWriter
+import java.util.Calendar
+import java.util.Locale
+import java.util.TimeZone
+
+/**
+ * Displays the time with the hour positioned above the minutes. (ie: 09 above 30 is 9:30)
+ * The time's text color is a gradient that changes its colors based on its controller.
+ */
+@SuppressLint("AppCompatCustomView")
+class AnimatableClockView @JvmOverloads constructor(
+    context: Context,
+    attrs: AttributeSet? = null,
+    defStyleAttr: Int = 0,
+    defStyleRes: Int = 0
+) : TextView(context, attrs, defStyleAttr, defStyleRes) {
+
+    private var lastMeasureCall: CharSequence = ""
+
+    private val time = Calendar.getInstance()
+
+    private val dozingWeightInternal: Int
+    private val lockScreenWeightInternal: Int
+    private val isSingleLineInternal: Boolean
+
+    private var format: CharSequence? = null
+    private var descFormat: CharSequence? = null
+
+    @ColorInt
+    private var dozingColor = 0
+
+    @ColorInt
+    private var lockScreenColor = 0
+
+    private var lineSpacingScale = 1f
+    private val chargeAnimationDelay: Int
+    private var textAnimator: TextAnimator? = null
+    private var onTextAnimatorInitialized: Runnable? = null
+
+    val dozingWeight: Int
+        get() = if (useBoldedVersion()) dozingWeightInternal + 100 else dozingWeightInternal
+
+    val lockScreenWeight: Int
+        get() = if (useBoldedVersion()) lockScreenWeightInternal + 100 else lockScreenWeightInternal
+
+    init {
+        val animatableClockViewAttributes = context.obtainStyledAttributes(
+            attrs, R.styleable.AnimatableClockView, defStyleAttr, defStyleRes
+        )
+
+        try {
+            dozingWeightInternal = animatableClockViewAttributes.getInt(
+                R.styleable.AnimatableClockView_dozeWeight,
+                100
+            )
+            lockScreenWeightInternal = animatableClockViewAttributes.getInt(
+                R.styleable.AnimatableClockView_lockScreenWeight,
+                300
+            )
+            chargeAnimationDelay = animatableClockViewAttributes.getInt(
+                R.styleable.AnimatableClockView_chargeAnimationDelay, 200
+            )
+        } finally {
+            animatableClockViewAttributes.recycle()
+        }
+
+        val textViewAttributes = context.obtainStyledAttributes(
+            attrs, android.R.styleable.TextView,
+            defStyleAttr, defStyleRes
+        )
+
+        isSingleLineInternal =
+            try {
+                textViewAttributes.getBoolean(android.R.styleable.TextView_singleLine, false)
+            } finally {
+                textViewAttributes.recycle()
+            }
+
+        refreshFormat()
+    }
+
+    override fun onAttachedToWindow() {
+        super.onAttachedToWindow()
+        refreshFormat()
+    }
+
+    /**
+     * Whether to use a bolded version based on the user specified fontWeightAdjustment.
+     */
+    fun useBoldedVersion(): Boolean {
+        // "Bold text" fontWeightAdjustment is 300.
+        return resources.configuration.fontWeightAdjustment > 100
+    }
+
+    fun refreshTime() {
+        time.timeInMillis = System.currentTimeMillis()
+        contentDescription = DateFormat.format(descFormat, time)
+        val formattedText = DateFormat.format(format, time)
+        // Setting text actually triggers a layout pass (because the text view is set to
+        // wrap_content width and TextView always relayouts for this). Avoid needless
+        // relayout if the text didn't actually change.
+        if (!TextUtils.equals(text, formattedText)) {
+            text = formattedText
+        }
+    }
+
+    fun onTimeZoneChanged(timeZone: TimeZone?) {
+        time.timeZone = timeZone
+        refreshFormat()
+    }
+
+    @SuppressLint("DrawAllocation")
+    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec)
+        lastMeasureCall = DateFormat.format(descFormat, System.currentTimeMillis())
+        val animator = textAnimator
+        if (animator == null) {
+            textAnimator = TextAnimator(layout) { invalidate() }
+            onTextAnimatorInitialized?.run()
+            onTextAnimatorInitialized = null
+        } else {
+            animator.updateLayout(layout)
+        }
+    }
+
+    override fun onDraw(canvas: Canvas) {
+        // intentionally doesn't call super.onDraw here or else the text will be rendered twice
+        textAnimator?.draw(canvas)
+    }
+
+    fun setLineSpacingScale(scale: Float) {
+        lineSpacingScale = scale
+        setLineSpacing(0f, lineSpacingScale)
+    }
+
+    fun setColors(@ColorInt dozingColor: Int, lockScreenColor: Int) {
+        this.dozingColor = dozingColor
+        this.lockScreenColor = lockScreenColor
+    }
+
+    fun animateAppearOnLockscreen() {
+        if (textAnimator == null) {
+            return
+        }
+        setTextStyle(
+            weight = dozingWeight,
+            textSize = -1f,
+            color = lockScreenColor,
+            animate = false,
+            duration = 0,
+            delay = 0,
+            onAnimationEnd = null
+        )
+        setTextStyle(
+            weight = lockScreenWeight,
+            textSize = -1f,
+            color = lockScreenColor,
+            animate = true,
+            duration = APPEAR_ANIM_DURATION,
+            delay = 0,
+            onAnimationEnd = null
+        )
+    }
+
+    fun animateFoldAppear(animate: Boolean = true) {
+        if (textAnimator == null) {
+            return
+        }
+        setTextStyle(
+            weight = lockScreenWeightInternal,
+            textSize = -1f,
+            color = lockScreenColor,
+            animate = false,
+            duration = 0,
+            delay = 0,
+            onAnimationEnd = null
+        )
+        setTextStyle(
+            weight = dozingWeightInternal,
+            textSize = -1f,
+            color = dozingColor,
+            animate = animate,
+            interpolator = Interpolators.EMPHASIZED_DECELERATE,
+            duration = ANIMATION_DURATION_FOLD_TO_AOD.toLong(),
+            delay = 0,
+            onAnimationEnd = null
+        )
+    }
+
+    fun animateCharge(isDozing: () -> Boolean) {
+        if (textAnimator == null || textAnimator!!.isRunning()) {
+            // Skip charge animation if dozing animation is already playing.
+            return
+        }
+        val startAnimPhase2 = Runnable {
+            setTextStyle(
+                weight = if (isDozing()) dozingWeight else lockScreenWeight,
+                textSize = -1f,
+                color = null,
+                animate = true,
+                duration = CHARGE_ANIM_DURATION_PHASE_1,
+                delay = 0,
+                onAnimationEnd = null
+            )
+        }
+        setTextStyle(
+            weight = if (isDozing()) lockScreenWeight else dozingWeight,
+            textSize = -1f,
+            color = null,
+            animate = true,
+            duration = CHARGE_ANIM_DURATION_PHASE_0,
+            delay = chargeAnimationDelay.toLong(),
+            onAnimationEnd = startAnimPhase2
+        )
+    }
+
+    fun animateDoze(isDozing: Boolean, animate: Boolean) {
+        setTextStyle(
+            weight = if (isDozing) dozingWeight else lockScreenWeight,
+            textSize = -1f,
+            color = if (isDozing) dozingColor else lockScreenColor,
+            animate = animate,
+            duration = DOZE_ANIM_DURATION,
+            delay = 0,
+            onAnimationEnd = null
+        )
+    }
+
+    private val glyphFilter: GlyphCallback? = null // Add text animation tweak here.
+
+    /**
+     * Set text style with an optional animation.
+     *
+     * By passing -1 to weight, the view preserves its current weight.
+     * By passing -1 to textSize, the view preserves its current text size.
+     *
+     * @param weight text weight.
+     * @param textSize font size.
+     * @param animate true to animate the text style change, otherwise false.
+     */
+    private fun setTextStyle(
+        @IntRange(from = 0, to = 1000) weight: Int,
+        @FloatRange(from = 0.0) textSize: Float,
+        color: Int?,
+        animate: Boolean,
+        interpolator: TimeInterpolator?,
+        duration: Long,
+        delay: Long,
+        onAnimationEnd: Runnable?
+    ) {
+        if (textAnimator != null) {
+            textAnimator?.setTextStyle(
+                weight = weight,
+                textSize = textSize,
+                color = color,
+                animate = animate,
+                duration = duration,
+                interpolator = interpolator,
+                delay = delay,
+                onAnimationEnd = onAnimationEnd
+            )
+            textAnimator?.glyphFilter = glyphFilter
+        } else {
+            // when the text animator is set, update its start values
+            onTextAnimatorInitialized = Runnable {
+                textAnimator?.setTextStyle(
+                    weight = weight,
+                    textSize = textSize,
+                    color = color,
+                    animate = false,
+                    duration = duration,
+                    interpolator = interpolator,
+                    delay = delay,
+                    onAnimationEnd = onAnimationEnd
+                )
+                textAnimator?.glyphFilter = glyphFilter
+            }
+        }
+    }
+
+    private fun setTextStyle(
+        @IntRange(from = 0, to = 1000) weight: Int,
+        @FloatRange(from = 0.0) textSize: Float,
+        color: Int?,
+        animate: Boolean,
+        duration: Long,
+        delay: Long,
+        onAnimationEnd: Runnable?
+    ) {
+        setTextStyle(
+            weight = weight,
+            textSize = textSize,
+            color = color,
+            animate = animate,
+            interpolator = null,
+            duration = duration,
+            delay = delay,
+            onAnimationEnd = onAnimationEnd
+        )
+    }
+
+    fun refreshFormat() = refreshFormat(DateFormat.is24HourFormat(context))
+    fun refreshFormat(use24HourFormat: Boolean) {
+        Patterns.update(context)
+
+        format = when {
+            isSingleLineInternal && use24HourFormat -> Patterns.sClockView24
+            !isSingleLineInternal && use24HourFormat -> DOUBLE_LINE_FORMAT_24_HOUR
+            isSingleLineInternal && !use24HourFormat -> Patterns.sClockView12
+            else -> DOUBLE_LINE_FORMAT_12_HOUR
+        }
+
+        descFormat = if (use24HourFormat) Patterns.sClockView24 else Patterns.sClockView12
+
+        refreshTime()
+    }
+
+    fun dump(pw: PrintWriter) {
+        pw.println("$this")
+        pw.println("    measuredWidth=$measuredWidth")
+        pw.println("    measuredHeight=$measuredHeight")
+        pw.println("    singleLineInternal=$isSingleLineInternal")
+        pw.println("    lastMeasureCall=$lastMeasureCall")
+        pw.println("    currText=$text")
+        pw.println("    currTimeContextDesc=$contentDescription")
+        pw.println("    time=$time")
+    }
+
+    // DateFormat.getBestDateTimePattern is extremely expensive, and refresh is called often.
+    // This is an optimization to ensure we only recompute the patterns when the inputs change.
+    private object Patterns {
+        var sClockView12: String? = null
+        var sClockView24: String? = null
+        var sCacheKey: String? = null
+
+        fun update(context: Context) {
+            val locale = Locale.getDefault()
+            val res = context.resources
+            val clockView12Skel = res.getString(R.string.clock_12hr_format)
+            val clockView24Skel = res.getString(R.string.clock_24hr_format)
+            val key = locale.toString() + clockView12Skel + clockView24Skel
+            if (key == sCacheKey) return
+
+            val clockView12 = DateFormat.getBestDateTimePattern(locale, clockView12Skel)
+            sClockView12 = clockView12
+
+            // CLDR insists on adding an AM/PM indicator even though it wasn't in the skeleton
+            // format.  The following code removes the AM/PM indicator if we didn't want it.
+            if (!clockView12Skel.contains("a")) {
+                sClockView12 = clockView12.replace("a".toRegex(), "").trim { it <= ' ' }
+            }
+            sClockView24 = DateFormat.getBestDateTimePattern(locale, clockView24Skel)
+            sCacheKey = key
+        }
+    }
+
+    companion object {
+        private val TAG = AnimatableClockView::class.simpleName
+        const val ANIMATION_DURATION_FOLD_TO_AOD: Int = 600
+        private const val DOUBLE_LINE_FORMAT_12_HOUR = "hh\nmm"
+        private const val DOUBLE_LINE_FORMAT_24_HOUR = "HH\nmm"
+        private const val DOZE_ANIM_DURATION: Long = 300
+        private const val APPEAR_ANIM_DURATION: Long = 350
+        private const val CHARGE_ANIM_DURATION_PHASE_0: Long = 500
+        private const val CHARGE_ANIM_DURATION_PHASE_1: Long = 1000
+    }
+}
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/clocks/ClockRegistry.kt b/packages/SystemUI/shared/src/com/android/systemui/shared/clocks/ClockRegistry.kt
new file mode 100644
index 0000000..e707d4d
--- /dev/null
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/clocks/ClockRegistry.kt
@@ -0,0 +1,191 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT 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.shared.clocks
+
+import android.content.Context
+import android.database.ContentObserver
+import android.graphics.drawable.Drawable
+import android.net.Uri
+import android.os.Handler
+import android.os.UserHandle
+import android.provider.Settings
+import android.util.Log
+import com.android.systemui.dagger.qualifiers.Main
+import com.android.systemui.plugins.Clock
+import com.android.systemui.plugins.ClockId
+import com.android.systemui.plugins.ClockMetadata
+import com.android.systemui.plugins.ClockProvider
+import com.android.systemui.plugins.ClockProviderPlugin
+import com.android.systemui.plugins.PluginListener
+import com.android.systemui.shared.plugins.PluginManager
+import com.google.gson.Gson
+import javax.inject.Inject
+
+private val TAG = ClockRegistry::class.simpleName
+private val DEBUG = true
+
+typealias ClockChangeListener = () -> Unit
+
+/** ClockRegistry aggregates providers and plugins */
+open class ClockRegistry(
+    val context: Context,
+    val pluginManager: PluginManager,
+    val handler: Handler,
+    defaultClockProvider: ClockProvider
+) {
+    @Inject constructor(
+        context: Context,
+        pluginManager: PluginManager,
+        @Main handler: Handler,
+        defaultClockProvider: DefaultClockProvider
+    ) : this(context, pluginManager, handler, defaultClockProvider as ClockProvider) { }
+
+    var isEnabled: Boolean = false
+
+    private val gson = Gson()
+    private val availableClocks = mutableMapOf<ClockId, ClockInfo>()
+    private val clockChangeListeners = mutableListOf<ClockChangeListener>()
+    private val settingObserver = object : ContentObserver(handler) {
+        override fun onChange(selfChange: Boolean, uris: Collection<Uri>, flags: Int, userId: Int) =
+            clockChangeListeners.forEach { it() }
+    }
+
+    private val pluginListener = object : PluginListener<ClockProviderPlugin> {
+        override fun onPluginConnected(plugin: ClockProviderPlugin, context: Context) =
+            connectClocks(plugin)
+
+        override fun onPluginDisconnected(plugin: ClockProviderPlugin) =
+            disconnectClocks(plugin)
+    }
+
+    open var currentClockId: ClockId
+        get() {
+            return try {
+                val json = Settings.Secure.getString(
+                    context.contentResolver,
+                    Settings.Secure.LOCK_SCREEN_CUSTOM_CLOCK_FACE
+                )
+                gson.fromJson(json, ClockSetting::class.java)?.clockId ?: DEFAULT_CLOCK_ID
+            } catch (ex: Exception) {
+                Log.e(TAG, "Failed to parse clock setting", ex)
+                DEFAULT_CLOCK_ID
+            }
+        }
+        set(value) {
+            try {
+                val json = gson.toJson(ClockSetting(value, System.currentTimeMillis()))
+                Settings.Secure.putString(
+                    context.contentResolver,
+                    Settings.Secure.LOCK_SCREEN_CUSTOM_CLOCK_FACE, json
+                )
+            } catch (ex: Exception) {
+                Log.e(TAG, "Failed to set clock setting", ex)
+            }
+        }
+
+    init {
+        connectClocks(defaultClockProvider)
+        if (!availableClocks.containsKey(DEFAULT_CLOCK_ID)) {
+            throw IllegalArgumentException(
+                "$defaultClockProvider did not register clock at $DEFAULT_CLOCK_ID"
+            )
+        }
+
+        pluginManager.addPluginListener(pluginListener, ClockProviderPlugin::class.java)
+        context.contentResolver.registerContentObserver(
+            Settings.Secure.getUriFor(Settings.Secure.LOCK_SCREEN_CUSTOM_CLOCK_FACE),
+            false,
+            settingObserver,
+            UserHandle.USER_ALL
+        )
+    }
+
+    private fun connectClocks(provider: ClockProvider) {
+        val currentId = currentClockId
+        for (clock in provider.getClocks()) {
+            val id = clock.clockId
+            val current = availableClocks[id]
+            if (current != null) {
+                Log.e(TAG, "Clock Id conflict: $id is registered by both " +
+                    "${provider::class.simpleName} and ${current.provider::class.simpleName}")
+                return
+            }
+
+            availableClocks[id] = ClockInfo(clock, provider)
+            if (currentId == id) {
+                if (DEBUG) {
+                    Log.i(TAG, "Current clock ($currentId) was connected")
+                }
+                clockChangeListeners.forEach { it() }
+            }
+        }
+    }
+
+    private fun disconnectClocks(provider: ClockProvider) {
+        val currentId = currentClockId
+        for (clock in provider.getClocks()) {
+            availableClocks.remove(clock.clockId)
+
+            if (currentId == clock.clockId) {
+                Log.w(TAG, "Current clock ($currentId) was disconnected")
+                clockChangeListeners.forEach { it() }
+            }
+        }
+    }
+
+    fun getClocks(): List<ClockMetadata> {
+        if (!isEnabled) {
+            return listOf(availableClocks[DEFAULT_CLOCK_ID]!!.metadata)
+        }
+        return availableClocks.map { (_, clock) -> clock.metadata }
+    }
+
+    fun getClockThumbnail(clockId: ClockId): Drawable? =
+        availableClocks[clockId]?.provider?.getClockThumbnail(clockId)
+
+    fun createExampleClock(clockId: ClockId): Clock? = createClock(clockId)
+
+    fun registerClockChangeListener(listener: ClockChangeListener) =
+        clockChangeListeners.add(listener)
+
+    fun unregisterClockChangeListener(listener: ClockChangeListener) =
+        clockChangeListeners.remove(listener)
+
+    fun createCurrentClock(): Clock {
+        val clockId = currentClockId
+        if (isEnabled && clockId.isNotEmpty()) {
+            val clock = createClock(clockId)
+            if (clock != null) {
+                return clock
+            } else {
+                Log.e(TAG, "Clock $clockId not found; using default")
+            }
+        }
+
+        return createClock(DEFAULT_CLOCK_ID)!!
+    }
+
+    private fun createClock(clockId: ClockId): Clock? =
+        availableClocks[clockId]?.provider?.createClock(clockId)
+
+    private data class ClockInfo(
+        val metadata: ClockMetadata,
+        val provider: ClockProvider
+    )
+
+    private data class ClockSetting(
+        val clockId: ClockId,
+        val _applied_timestamp: Long?
+    )
+}
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/clocks/DefaultClockProvider.kt b/packages/SystemUI/shared/src/com/android/systemui/shared/clocks/DefaultClockProvider.kt
new file mode 100644
index 0000000..5d8da59
--- /dev/null
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/clocks/DefaultClockProvider.kt
@@ -0,0 +1,183 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT 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.shared.clocks
+
+import android.content.res.Resources
+import android.graphics.Color
+import android.graphics.drawable.Drawable
+import android.icu.text.NumberFormat
+import android.util.TypedValue
+import android.view.LayoutInflater
+import com.android.internal.colorextraction.ColorExtractor
+import com.android.systemui.dagger.qualifiers.Main
+import com.android.systemui.plugins.Clock
+import com.android.systemui.plugins.ClockAnimation
+import com.android.systemui.plugins.ClockEvents
+import com.android.systemui.plugins.ClockId
+import com.android.systemui.plugins.ClockMetadata
+import com.android.systemui.plugins.ClockProvider
+import com.android.systemui.shared.R
+import java.io.PrintWriter
+import java.util.Locale
+import java.util.TimeZone
+import javax.inject.Inject
+
+private val TAG = DefaultClockProvider::class.simpleName
+const val DEFAULT_CLOCK_NAME = "Default Clock"
+const val DEFAULT_CLOCK_ID = "DEFAULT"
+
+/** Provides the default system clock */
+class DefaultClockProvider @Inject constructor(
+    val layoutInflater: LayoutInflater,
+    @Main val resources: Resources
+) : ClockProvider {
+    override fun getClocks(): List<ClockMetadata> =
+        listOf(ClockMetadata(DEFAULT_CLOCK_ID, DEFAULT_CLOCK_NAME))
+
+    override fun createClock(id: ClockId): Clock {
+        if (id != DEFAULT_CLOCK_ID) {
+            throw IllegalArgumentException("$id is unsupported by $TAG")
+        }
+        return DefaultClock(layoutInflater, resources)
+    }
+
+    override fun getClockThumbnail(id: ClockId): Drawable? {
+        if (id != DEFAULT_CLOCK_ID) {
+            throw IllegalArgumentException("$id is unsupported by $TAG")
+        }
+
+        // TODO: Update placeholder to actual resource
+        return resources.getDrawable(R.drawable.clock_default_thumbnail, null)
+    }
+}
+
+/**
+ * Controls the default clock visuals.
+ *
+ * This serves as an adapter between the clock interface and the
+ * AnimatableClockView used by the existing lockscreen clock.
+ */
+class DefaultClock(
+    private val layoutInflater: LayoutInflater,
+    private val resources: Resources
+) : Clock {
+    override val smallClock =
+        layoutInflater.inflate(R.layout.clock_default_small, null) as AnimatableClockView
+    override val largeClock =
+        layoutInflater.inflate(R.layout.clock_default_large, null) as AnimatableClockView
+    private val clocks = listOf(smallClock, largeClock)
+
+    private val burmeseNf = NumberFormat.getInstance(Locale.forLanguageTag("my"))
+    private val burmeseNumerals = burmeseNf.format(FORMAT_NUMBER.toLong())
+    private val burmeseLineSpacing =
+        resources.getFloat(R.dimen.keyguard_clock_line_spacing_scale_burmese)
+    private val defaultLineSpacing = resources.getFloat(R.dimen.keyguard_clock_line_spacing_scale)
+
+    override val events = object : ClockEvents {
+        override fun onTimeTick() = clocks.forEach { it.refreshTime() }
+
+        override fun onTimeFormatChanged(is24Hr: Boolean) =
+            clocks.forEach { it.refreshFormat(is24Hr) }
+
+        override fun onTimeZoneChanged(timeZone: TimeZone) =
+            clocks.forEach { it.onTimeZoneChanged(timeZone) }
+
+        override fun onFontSettingChanged() {
+            smallClock.setTextSize(
+                TypedValue.COMPLEX_UNIT_PX,
+                resources.getDimensionPixelSize(R.dimen.small_clock_text_size).toFloat()
+            )
+            largeClock.setTextSize(
+                TypedValue.COMPLEX_UNIT_PX,
+                resources.getDimensionPixelSize(R.dimen.large_clock_text_size).toFloat()
+            )
+        }
+
+        override fun onColorPaletteChanged(palette: ColorExtractor.GradientColors) =
+            clocks.forEach { it.setColors(DOZE_COLOR, palette.mainColor) }
+
+        override fun onLocaleChanged(locale: Locale) {
+            val nf = NumberFormat.getInstance(locale)
+            if (nf.format(FORMAT_NUMBER.toLong()) == burmeseNumerals) {
+                clocks.forEach { it.setLineSpacingScale(burmeseLineSpacing) }
+            } else {
+                clocks.forEach { it.setLineSpacingScale(defaultLineSpacing) }
+            }
+
+            clocks.forEach { it.refreshFormat() }
+        }
+    }
+
+    override val animation = object : ClockAnimation {
+        override fun initialize(dozeFraction: Float, foldFraction: Float) {
+            dozeState = AnimationState(dozeFraction)
+            foldState = AnimationState(foldFraction)
+
+            if (foldState.isActive) {
+                clocks.forEach { it.animateFoldAppear(false) }
+            } else {
+                clocks.forEach { it.animateDoze(dozeState.isActive, false) }
+            }
+        }
+
+        override fun enter() {
+            if (dozeState.isActive) {
+                clocks.forEach { it.animateAppearOnLockscreen() }
+            }
+        }
+
+        override fun charge() = clocks.forEach { it.animateCharge { dozeState.isActive } }
+
+        private var foldState = AnimationState(0f)
+        override fun fold(fraction: Float) {
+            val (hasChanged, hasJumped) = foldState.update(fraction)
+            if (hasChanged) {
+                clocks.forEach { it.animateFoldAppear(!hasJumped) }
+            }
+        }
+
+        private var dozeState = AnimationState(0f)
+        override fun doze(fraction: Float) {
+            val (hasChanged, hasJumped) = dozeState.update(fraction)
+            if (hasChanged) {
+                clocks.forEach { it.animateDoze(dozeState.isActive, !hasJumped) }
+            }
+        }
+    }
+
+    private class AnimationState(
+        var fraction: Float
+    ) {
+        var isActive: Boolean = fraction < 0.5f
+        fun update(newFraction: Float): Pair<Boolean, Boolean> {
+            val wasActive = isActive
+            val hasJumped = (fraction == 0f && newFraction == 1f) ||
+                (fraction == 1f && newFraction == 0f)
+            isActive = newFraction > fraction
+            fraction = newFraction
+            return Pair(wasActive != isActive, hasJumped)
+        }
+    }
+
+    init {
+        events.onLocaleChanged(Locale.getDefault())
+    }
+
+    override fun dump(pw: PrintWriter) = clocks.forEach { it.dump(pw) }
+
+    companion object {
+        private const val DOZE_COLOR = Color.WHITE
+        private const val FORMAT_NUMBER = 1234567890
+    }
+}
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/pip/PipSurfaceTransactionHelper.java b/packages/SystemUI/shared/src/com/android/systemui/shared/pip/PipSurfaceTransactionHelper.java
index 88fe034..203b236 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/pip/PipSurfaceTransactionHelper.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/pip/PipSurfaceTransactionHelper.java
@@ -80,7 +80,8 @@
 
     public PictureInPictureSurfaceTransaction scaleAndCrop(
             SurfaceControl.Transaction tx, SurfaceControl leash,
-            Rect sourceRectHint, Rect sourceBounds, Rect destinationBounds, Rect insets) {
+            Rect sourceRectHint, Rect sourceBounds, Rect destinationBounds, Rect insets,
+            float progress) {
         mTmpSourceRectF.set(sourceBounds);
         mTmpDestinationRect.set(sourceBounds);
         mTmpDestinationRect.inset(insets);
@@ -93,9 +94,13 @@
                     : (float) destinationBounds.height() / sourceBounds.height();
         } else {
             // scale by sourceRectHint if it's not edge-to-edge
-            scale = sourceRectHint.width() <= sourceRectHint.height()
+            final float endScale = sourceRectHint.width() <= sourceRectHint.height()
                     ? (float) destinationBounds.width() / sourceRectHint.width()
                     : (float) destinationBounds.height() / sourceRectHint.height();
+            final float startScale = sourceRectHint.width() <= sourceRectHint.height()
+                    ? (float) destinationBounds.width() / sourceBounds.width()
+                    : (float) destinationBounds.height() / sourceBounds.height();
+            scale = (1 - progress) * startScale + progress * endScale;
         }
         final float left = destinationBounds.left - (insets.left + sourceBounds.left) * scale;
         final float top = destinationBounds.top - (insets.top + sourceBounds.top) * scale;
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/ISystemUiProxy.aidl b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/ISystemUiProxy.aidl
index e743c4e..a030bf6 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/ISystemUiProxy.aidl
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/ISystemUiProxy.aidl
@@ -42,12 +42,6 @@
     void onOverviewShown(boolean fromHome) = 6;
 
     /**
-     * Get the secondary split screen app's rectangle when not minimized.
-     * @deprecated
-     */
-    Rect getNonMinimizedSplitScreenSecondaryBounds() = 7;
-
-    /**
      * Control the {@param alpha} of the option nav bar button (back-button in 2 button mode
      * and home handle & background in gestural mode).  The {@param animate} is currently only
      * supported for 2 button mode.
@@ -94,21 +88,6 @@
      */
     void stopScreenPinning() = 17;
 
-    /**
-     * Handle the provided image as if it was a screenshot.
-     *
-     * Deprecated, use handleImageBundleAsScreenshot with image bundle and UserTask
-     * @deprecated
-     */
-    void handleImageAsScreenshot(in Bitmap screenImage, in Rect locationInScreen,
-              in Insets visibleInsets, int taskId) = 21;
-
-    /**
-     * Sets the split-screen divider minimized state
-     * @deprecated
-     */
-    void setSplitScreenMinimized(boolean minimized) = 22;
-
     /*
      * Notifies that the swipe-to-home (recents animation) is finished.
      */
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/model/Task.java b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/model/Task.java
index 675dc9b5..4222744 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/model/Task.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/model/Task.java
@@ -16,8 +16,12 @@
 
 package com.android.systemui.shared.recents.model;
 
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
 import static android.view.Display.DEFAULT_DISPLAY;
 
+import static com.android.wm.shell.common.split.SplitScreenConstants.CONTROLLED_ACTIVITY_TYPES;
+import static com.android.wm.shell.common.split.SplitScreenConstants.CONTROLLED_WINDOWING_MODES;
+
 import android.app.ActivityManager;
 import android.app.ActivityManager.TaskDescription;
 import android.app.TaskInfo;
@@ -31,6 +35,8 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
+import com.android.internal.util.ArrayUtils;
+
 import java.io.PrintWriter;
 import java.util.Objects;
 
@@ -240,10 +246,16 @@
      */
     public static Task from(TaskKey taskKey, TaskInfo taskInfo, boolean isLocked) {
         ActivityManager.TaskDescription td = taskInfo.taskDescription;
+        // Also consider undefined activity type to include tasks in overview right after rebooting
+        // the device.
+        final boolean isDockable = taskInfo.supportsMultiWindow
+                && ArrayUtils.contains(CONTROLLED_WINDOWING_MODES, taskInfo.getWindowingMode())
+                && (taskInfo.getActivityType() == ACTIVITY_TYPE_UNDEFINED
+                || ArrayUtils.contains(CONTROLLED_ACTIVITY_TYPES, taskInfo.getActivityType()));
         return new Task(taskKey,
                 td != null ? td.getPrimaryColor() : 0,
-                td != null ? td.getBackgroundColor() : 0,
-                taskInfo.supportsSplitScreenMultiWindow, isLocked, td, taskInfo.topActivity);
+                td != null ? td.getBackgroundColor() : 0, isDockable , isLocked, td,
+                taskInfo.topActivity);
     }
 
     public Task(TaskKey key) {
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/rotation/RotationButtonController.java b/packages/SystemUI/shared/src/com/android/systemui/shared/rotation/RotationButtonController.java
index 01f417f..b29dc83 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/rotation/RotationButtonController.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/rotation/RotationButtonController.java
@@ -20,6 +20,7 @@
 import static android.view.Display.DEFAULT_DISPLAY;
 
 import static com.android.internal.view.RotationPolicy.NATURAL_ROTATION;
+import static com.android.systemui.shared.system.QuickStepContract.isGesturalMode;
 
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
@@ -97,6 +98,7 @@
     @SuppressLint("InlinedApi")
     private @WindowInsetsController.Behavior
     int mBehavior = WindowInsetsController.BEHAVIOR_DEFAULT;
+    private int mNavBarMode;
     private boolean mSkipOverrideUserLockPrefsOnce;
     private final int mLightIconColor;
     private final int mDarkIconColor;
@@ -397,6 +399,10 @@
         if (rotateSuggestionsDisabled) onRotationSuggestionsDisabled();
     }
 
+    public void onNavigationModeChanged(int mode) {
+        mNavBarMode = mode;
+    }
+
     public void onBehaviorChanged(int displayId, @WindowInsetsController.Behavior int behavior) {
         if (DEFAULT_DISPLAY != displayId) {
             return;
@@ -433,7 +439,8 @@
      */
     @SuppressLint("InlinedApi")
     private boolean canShowRotationButton() {
-        return mIsNavigationBarShowing || mBehavior == WindowInsetsController.BEHAVIOR_DEFAULT;
+        return mIsNavigationBarShowing || mBehavior == WindowInsetsController.BEHAVIOR_DEFAULT
+                || isGesturalMode(mNavBarMode);
     }
 
     @DrawableRes
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityManagerKt.kt b/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityManagerKt.kt
new file mode 100644
index 0000000..c142933
--- /dev/null
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityManagerKt.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.shared.system
+
+import android.app.ActivityManager
+
+/** Kotlin extensions for [ActivityManager] */
+object ActivityManagerKt {
+
+    /**
+     * Returns `true` whether the app with the given package name has an activity at the top of the
+     * most recent task; `false` otherwise
+     */
+    fun ActivityManager.isInForeground(packageName: String): Boolean {
+        val tasks: List<ActivityManager.RunningTaskInfo> = getRunningTasks(1)
+        return tasks.isNotEmpty() && packageName == tasks[0].topActivity.packageName
+    }
+}
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityManagerWrapper.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityManagerWrapper.java
index be3dfdc..916526d 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityManagerWrapper.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityManagerWrapper.java
@@ -130,19 +130,14 @@
     }
 
     /**
-     * @return a list of the recents tasks.
-     */
-    public List<RecentTaskInfo> getRecentTasks(int numTasks, int userId) {
-        return mAtm.getRecentTasks(numTasks, RECENT_IGNORE_UNAVAILABLE, userId);
-    }
-
-    /**
-     * @return the task snapshot for the given {@param taskId}.
+     * @return a {@link ThumbnailData} with {@link TaskSnapshot} for the given {@param taskId}.
+     *         The snapshot will be triggered if no cached {@link TaskSnapshot} exists.
      */
     public @NonNull ThumbnailData getTaskThumbnail(int taskId, boolean isLowResolution) {
         TaskSnapshot snapshot = null;
         try {
-            snapshot = getService().getTaskSnapshot(taskId, isLowResolution);
+            snapshot = getService().getTaskSnapshot(taskId, isLowResolution,
+                    true /* takeSnapshotIfNeeded */);
         } catch (RemoteException e) {
             Log.w(TAG, "Failed to retrieve task snapshot", e);
         }
@@ -245,25 +240,6 @@
     }
 
     /**
-     * Starts a task from Recents.
-     *
-     * @param resultCallback The result success callback
-     * @param resultCallbackHandler The handler to receive the result callback
-     */
-    public void startActivityFromRecentsAsync(Task.TaskKey taskKey, ActivityOptions options,
-            Consumer<Boolean> resultCallback, Handler resultCallbackHandler) {
-        final boolean result = startActivityFromRecents(taskKey, options);
-        if (resultCallback != null) {
-            resultCallbackHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    resultCallback.accept(result);
-                }
-            });
-        }
-    }
-
-    /**
      * Starts a task from Recents synchronously.
      */
     public boolean startActivityFromRecents(Task.TaskKey taskKey, ActivityOptions options) {
@@ -284,20 +260,6 @@
     }
 
     /**
-     * @deprecated use {@link TaskStackChangeListeners#registerTaskStackListener}
-     */
-    public void registerTaskStackListener(TaskStackChangeListener listener) {
-        TaskStackChangeListeners.getInstance().registerTaskStackListener(listener);
-    }
-
-    /**
-     * @deprecated use {@link TaskStackChangeListeners#unregisterTaskStackListener}
-     */
-    public void unregisterTaskStackListener(TaskStackChangeListener listener) {
-        TaskStackChangeListeners.getInstance().unregisterTaskStackListener(listener);
-    }
-
-    /**
      * Requests that the system close any open system windows (including other SystemUI).
      */
     public void closeSystemWindows(final String reason) {
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityOptionsCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityOptionsCompat.java
index add2d02..be99b27 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityOptionsCompat.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/ActivityOptionsCompat.java
@@ -28,14 +28,6 @@
 public abstract class ActivityOptionsCompat {
 
     /**
-     * @Deprecated
-     * @return ActivityOptions for starting a task in split screen as the primary window.
-     */
-    public static ActivityOptions makeSplitScreenOptions(boolean dockTopLeft) {
-        return ActivityOptions.makeBasic();
-    }
-
-    /**
      * @return ActivityOptions for starting a task in freeform.
      */
     public static ActivityOptions makeFreeformOptions() {
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/QuickStepContract.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/QuickStepContract.java
index 630fb36..97e0242 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/QuickStepContract.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/QuickStepContract.java
@@ -204,28 +204,6 @@
     }
 
     /**
-     * Touch slopes and thresholds for quick step operations. Drag slop is the point where the
-     * home button press/long press over are ignored and will start to drag when exceeded and the
-     * touch slop is when the respected operation will occur when exceeded. Touch slop must be
-     * larger than the drag slop.
-     */
-    public static int getQuickStepDragSlopPx() {
-        return convertDpToPixel(10);
-    }
-
-    public static int getQuickStepTouchSlopPx() {
-        return convertDpToPixel(24);
-    }
-
-    public static int getQuickScrubTouchSlopPx() {
-        return convertDpToPixel(24);
-    }
-
-    private static int convertDpToPixel(float dp) {
-        return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
-    }
-
-    /**
      * Returns whether the specified sysui state is such that the assistant gesture should be
      * disabled.
      */
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/RecentsAnimationControllerCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/RecentsAnimationControllerCompat.java
index 13f1db4a..0094820 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/RecentsAnimationControllerCompat.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/RecentsAnimationControllerCompat.java
@@ -65,14 +65,6 @@
         }
     }
 
-    public void hideCurrentInputMethod() {
-        try {
-            mAnimationController.hideCurrentInputMethod();
-        } catch (RemoteException e) {
-            Log.e(TAG, "Failed to set hide input method", e);
-        }
-    }
-
     /**
      * Sets the final surface transaction on a Task. This is used by Launcher to notify the system
      * that animating Activity to PiP has completed and the associated task surface should be
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationAdapterCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationAdapterCompat.java
index 06f5372..9265f07 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationAdapterCompat.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationAdapterCompat.java
@@ -114,6 +114,8 @@
     private static IRemoteTransition.Stub wrapRemoteTransition(
             final RemoteAnimationRunnerCompat remoteAnimationAdapter) {
         return new IRemoteTransition.Stub() {
+            final ArrayMap<IBinder, Runnable> mFinishRunnables = new ArrayMap<>();
+
             @Override
             public void startAnimation(IBinder token, TransitionInfo info,
                     SurfaceControl.Transaction t,
@@ -137,6 +139,8 @@
                 float displayH = 0;
                 for (int i = info.getChanges().size() - 1; i >= 0; --i) {
                     final TransitionInfo.Change change = info.getChanges().get(i);
+                    // skip changes that we didn't wrap
+                    if (!leashMap.containsKey(change.getLeash())) continue;
                     if (change.getTaskInfo() != null
                             && change.getTaskInfo().getActivityType() == ACTIVITY_TYPE_HOME) {
                         isReturnToHome = change.getMode() == TRANSIT_OPEN
@@ -173,6 +177,8 @@
                     for (int i = info.getChanges().size() - 1; i >= 0; --i) {
                         final TransitionInfo.Change change = info.getChanges().get(i);
                         final SurfaceControl leash = leashMap.get(change.getLeash());
+                        // skip changes that we didn't wrap
+                        if (leash == null) continue;
                         final int mode = info.getChanges().get(i).getMode();
                         // Only deal with independent layers
                         if (!TransitionInfo.isIndependent(change, info)) continue;
@@ -214,9 +220,9 @@
                         for (int i = info.getChanges().size() - 1; i >= 0; --i) {
                             info.getChanges().get(i).getLeash().release();
                         }
-                        for (int i = leashMap.size() - 1; i >= 0; --i) {
-                            leashMap.valueAt(i).release();
-                        }
+                        // Don't release here since launcher might still be using them. Instead
+                        // let launcher release them (eg. via RemoteAnimationTargets)
+                        leashMap.clear();
                         try {
                             finishCallback.onTransitionFinished(null /* wct */, finishTransaction);
                         } catch (RemoteException e) {
@@ -225,19 +231,32 @@
                         }
                     }
                 };
+                synchronized (mFinishRunnables) {
+                    mFinishRunnables.put(token, animationFinishedCallback);
+                }
                 // TODO(bc-unlcok): Pass correct transit type.
-                remoteAnimationAdapter.onAnimationStart(
-                        TRANSIT_OLD_NONE,
-                        appsCompat, wallpapersCompat, nonAppsCompat,
-                        animationFinishedCallback);
+                remoteAnimationAdapter.onAnimationStart(TRANSIT_OLD_NONE,
+                        appsCompat, wallpapersCompat, nonAppsCompat, () -> {
+                            synchronized (mFinishRunnables) {
+                                if (mFinishRunnables.remove(token) == null) return;
+                            }
+                            animationFinishedCallback.run();
+                        });
             }
 
             @Override
             public void mergeAnimation(IBinder token, TransitionInfo info,
                     SurfaceControl.Transaction t, IBinder mergeTarget,
                     IRemoteTransitionFinishedCallback finishCallback) {
-                // TODO: hook up merge to recents onTaskAppeared if applicable. Until then, ignore
-                //       any incoming merges.
+                // TODO: hook up merge to recents onTaskAppeared if applicable. Until then, adapt
+                //       to legacy cancel.
+                final Runnable finishRunnable;
+                synchronized (mFinishRunnables) {
+                    finishRunnable = mFinishRunnables.remove(mergeTarget);
+                }
+                if (finishRunnable == null) return;
+                remoteAnimationAdapter.onAnimationCancelled();
+                finishRunnable.run();
             }
         };
     }
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationTargetCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationTargetCompat.java
index 9cf482f..ef9e095 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationTargetCompat.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationTargetCompat.java
@@ -17,7 +17,6 @@
 package com.android.systemui.shared.system;
 
 import static android.view.WindowManager.LayoutParams.INVALID_WINDOW_TYPE;
-import static android.view.WindowManager.TRANSIT_CHANGE;
 import static android.view.WindowManager.TRANSIT_CLOSE;
 import static android.view.WindowManager.TRANSIT_OPEN;
 import static android.view.WindowManager.TRANSIT_TO_BACK;
@@ -32,7 +31,6 @@
 import android.graphics.Point;
 import android.graphics.Rect;
 import android.util.ArrayMap;
-import android.util.IntArray;
 import android.util.SparseArray;
 import android.view.RemoteAnimationTarget;
 import android.view.SurfaceControl;
@@ -81,6 +79,8 @@
     // Fields used only to unrap into RemoteAnimationTarget
     private final Rect startBounds;
 
+    public final boolean willShowImeOnTarget;
+
     public RemoteAnimationTargetCompat(RemoteAnimationTarget app) {
         taskId = app.taskId;
         mode = app.mode;
@@ -104,6 +104,7 @@
         windowType = app.windowType;
         windowConfiguration = app.windowConfiguration;
         startBounds = app.startBounds;
+        willShowImeOnTarget = app.willShowImeOnTarget;
     }
 
     private static int newModeToLegacyMode(int newMode) {
@@ -120,14 +121,15 @@
     }
 
     public RemoteAnimationTarget unwrap() {
-        return new RemoteAnimationTarget(
+        final RemoteAnimationTarget target = new RemoteAnimationTarget(
                 taskId, mode, leash, isTranslucent, clipRect, contentInsets,
                 prefixOrderIndex, position, localBounds, screenSpaceBounds, windowConfiguration,
                 isNotInRecents, mStartLeash, startBounds, taskInfo, allowEnterPip, windowType
         );
+        target.setWillShowImeOnTarget(willShowImeOnTarget);
+        return target;
     }
 
-
     /**
      * Almost a copy of Transitions#setupStartState.
      * TODO: remove when there is proper cross-process transaction sync.
@@ -142,21 +144,12 @@
         // changes should be ordered top-to-bottom in z
         final int mode = change.getMode();
 
-        // Don't move anything that isn't independent within its parents
-        if (!TransitionInfo.isIndependent(change, info)) {
-            if (mode == TRANSIT_OPEN || mode == TRANSIT_TO_FRONT || mode == TRANSIT_CHANGE) {
-                t.setPosition(leash, change.getEndRelOffset().x, change.getEndRelOffset().y);
-            }
-            return;
-        }
+        t.reparent(leash, info.getRootLeash());
+        final Rect absBounds =
+                (mode == TRANSIT_OPEN) ? change.getEndAbsBounds() : change.getStartAbsBounds();
+        t.setPosition(leash, absBounds.left - info.getRootOffset().x,
+                absBounds.top - info.getRootOffset().y);
 
-        final boolean hasParent = change.getParent() != null;
-
-        if (!hasParent) {
-            t.reparent(leash, info.getRootLeash());
-            t.setPosition(leash, change.getStartAbsBounds().left - info.getRootOffset().x,
-                    change.getStartAbsBounds().top - info.getRootOffset().y);
-        }
         // Put all the OPEN/SHOW on top
         if (mode == TRANSIT_OPEN || mode == TRANSIT_TO_FRONT) {
             if (isOpening) {
@@ -196,8 +189,7 @@
                 .setContainerLayer()
                 // Initial the surface visible to respect the visibility of the original surface.
                 .setHidden(false)
-                .setParent(change.getParent() == null ? info.getRootLeash()
-                        : info.getChange(change.getParent()).getLeash())
+                .setParent(info.getRootLeash())
                 .build();
         // Copied Transitions setup code (which expects bottom-to-top order, so we swap here)
         setupLeash(leashSurface, change, info.getChanges().size() - order, info, t);
@@ -217,8 +209,7 @@
         // TODO: once we can properly sync transactions across process, then get rid of this leash.
         leash = createLeash(info, change, order, t);
 
-        isTranslucent = (change.getFlags() & TransitionInfo.FLAG_TRANSLUCENT) != 0
-                || (change.getFlags() & TransitionInfo.FLAG_SHOW_WALLPAPER) != 0;
+        isTranslucent = (change.getFlags() & TransitionInfo.FLAG_TRANSLUCENT) != 0;
         clipRect = null;
         position = null;
         localBounds = new Rect(change.getEndAbsBounds());
@@ -247,6 +238,7 @@
             ? change.getTaskInfo().configuration.windowConfiguration
             : new WindowConfiguration();
         startBounds = change.getStartAbsBounds();
+        willShowImeOnTarget = (change.getFlags() & TransitionInfo.FLAG_WILL_IME_SHOWN) != 0;
     }
 
     public static RemoteAnimationTargetCompat[] wrap(RemoteAnimationTarget[] apps) {
@@ -269,58 +261,32 @@
     public static RemoteAnimationTargetCompat[] wrap(TransitionInfo info, boolean wallpapers,
             SurfaceControl.Transaction t, ArrayMap<SurfaceControl, SurfaceControl> leashMap) {
         final ArrayList<RemoteAnimationTargetCompat> out = new ArrayList<>();
-        final SparseArray<RemoteAnimationTargetCompat> childTaskTargets = new SparseArray<>();
-        final IntArray excludedParentTaskIds = new IntArray();
+        final SparseArray<TransitionInfo.Change> childTaskTargets = new SparseArray<>();
         for (int i = 0; i < info.getChanges().size(); i++) {
             final TransitionInfo.Change change = info.getChanges().get(i);
             final boolean changeIsWallpaper =
                     (change.getFlags() & TransitionInfo.FLAG_IS_WALLPAPER) != 0;
             if (wallpapers != changeIsWallpaper) continue;
 
+            if (!wallpapers) {
+                final ActivityManager.RunningTaskInfo taskInfo = change.getTaskInfo();
+                // Children always come before parent since changes are in top-to-bottom z-order.
+                if (taskInfo != null) {
+                    if (childTaskTargets.contains(taskInfo.taskId)) {
+                        // has children, so not a leaf. Skip.
+                        continue;
+                    }
+                    if (taskInfo.hasParentTask()) {
+                        childTaskTargets.put(taskInfo.parentTaskId, change);
+                    }
+                }
+            }
+
             final RemoteAnimationTargetCompat targetCompat =
                     new RemoteAnimationTargetCompat(change, info.getChanges().size() - i, info, t);
             if (leashMap != null) {
                 leashMap.put(change.getLeash(), targetCompat.leash);
             }
-            final ActivityManager.RunningTaskInfo taskInfo = change.getTaskInfo();
-            if (taskInfo != null) {
-                // Skip wrapping excluded parent task animate target since it will animate its child
-                // tasks instead.
-                if (excludedParentTaskIds.binarySearch(taskInfo.taskId) != -1) {
-                    continue;
-                }
-
-                // Check if there's a matching child task target in cache.
-                RemoteAnimationTargetCompat childTaskTarget = childTaskTargets.get(taskInfo.taskId);
-                if (childTaskTarget != null) {
-                    // Launcher monitors leaf task ids to perform animation, override the target
-                    // with its child task information so Launcher can animate this parent surface
-                    // directly with leaf task information.
-                    targetCompat.taskInfo = childTaskTarget.taskInfo;
-                    targetCompat.taskId = childTaskTarget.taskId;
-                    childTaskTargets.remove(taskInfo.taskId);
-                }
-
-                // Check if it has a parent task, cache its information for later use.
-                if (taskInfo.parentTaskId != -1
-                        && excludedParentTaskIds.binarySearch(taskInfo.parentTaskId) == -1) {
-                    if (!childTaskTargets.contains(taskInfo.parentTaskId)) {
-                        // Cache the target amd skip wrapping it info the final animation targets.
-                        // Otherwise, the child task might get transformed multiple-times with the
-                        // flow like RecentsView#redrawLiveTile.
-                        childTaskTargets.put(taskInfo.parentTaskId, targetCompat);
-                        continue;
-                    }
-
-                    // There is another child task target cached with the same parent task id.
-                    // Which means the parent having multiple child tasks in transition. Stop
-                    // propagate child task info.
-                    childTaskTarget = childTaskTargets.removeReturnOld(taskInfo.parentTaskId);
-                    out.add(childTaskTarget);
-                    excludedParentTaskIds.add(taskInfo.parentTaskId);
-                }
-            }
-
             out.add(targetCompat);
         }
 
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteTransitionCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteTransitionCompat.java
index de35514..7c1ef8c 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteTransitionCompat.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteTransitionCompat.java
@@ -21,12 +21,14 @@
 import static android.view.WindowManager.TRANSIT_CHANGE;
 import static android.view.WindowManager.TRANSIT_CLOSE;
 import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY;
+import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_LOCKED;
 import static android.view.WindowManager.TRANSIT_OPEN;
 import static android.view.WindowManager.TRANSIT_TO_BACK;
 import static android.view.WindowManager.TRANSIT_TO_FRONT;
 import static android.window.TransitionFilter.CONTAINER_ORDER_TOP;
 
 import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.ACTIVITY_TYPE_RECENTS;
+import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_CLOSING;
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
@@ -132,16 +134,17 @@
                 // TODO(b/177438007): Move this set-up logic into launcher's animation impl.
                 mToken = transition;
                 // This transition is for opening recents, so recents is on-top. We want to draw
-                // the current going-away task on top of recents, though, so move it to front
+                // the current going-away tasks on top of recents, though, so move them to front.
+                // Note that we divide up the "layer space" into 3 regions each the size of
+                // the change count. This way we can easily move changes into above/below/between
+                // while maintaining their relative ordering.
                 final ArrayList<WindowContainerToken> pausingTasks = new ArrayList<>();
                 WindowContainerToken pipTask = null;
                 WindowContainerToken recentsTask = null;
-                for (int i = info.getChanges().size() - 1; i >= 0; --i) {
-                    final TransitionInfo.Change change = info.getChanges().get(i);
-                    final ActivityManager.RunningTaskInfo taskInfo = change.getTaskInfo();
-                    if (change.getMode() == TRANSIT_CLOSE || change.getMode() == TRANSIT_TO_BACK) {
-                        t.setLayer(leashMap.get(change.getLeash()),
-                                info.getChanges().size() * 3 - i);
+                for (int i = apps.length - 1; i >= 0; --i) {
+                    final ActivityManager.RunningTaskInfo taskInfo = apps[i].taskInfo;
+                    if (apps[i].mode == MODE_CLOSING) {
+                        t.setLayer(apps[i].leash, info.getChanges().size() * 3 - i);
                         if (taskInfo == null) {
                             continue;
                         }
@@ -154,8 +157,7 @@
                     } else if (taskInfo != null
                             && taskInfo.topActivityType == ACTIVITY_TYPE_RECENTS) {
                         // This task is for recents, keep it on top.
-                        t.setLayer(leashMap.get(change.getLeash()),
-                                info.getChanges().size() * 3 - i);
+                        t.setLayer(apps[i].leash, info.getChanges().size() * 3 - i);
                         recentsTask = taskInfo.token;
                     } else if (taskInfo != null && taskInfo.topActivityType == ACTIVITY_TYPE_HOME) {
                         recentsTask = taskInfo.token;
@@ -167,7 +169,8 @@
                 }
                 t.apply();
                 mRecentsSession.setup(controller, info, finishedCallback, pausingTasks, pipTask,
-                        recentsTask, leashMap, mToken);
+                        recentsTask, leashMap, mToken,
+                        (info.getFlags() & TRANSIT_FLAG_KEYGUARD_LOCKED) != 0);
                 recents.onAnimationStart(mRecentsSession, apps, wallpapers, new Rect(0, 0, 0, 0),
                         new Rect());
             }
@@ -183,6 +186,8 @@
                 } catch (RemoteException e) {
                     Log.e(TAG, "Error merging transition.", e);
                 }
+                // commit taskAppeared after merge transition finished.
+                mRecentsSession.commitTasksAppearedIfNeeded(recents);
             }
         };
         mTransition = new RemoteTransition(remote, appThread);
@@ -219,15 +224,19 @@
         private WindowContainerToken mRecentsTask = null;
         private TransitionInfo mInfo = null;
         private ArrayList<SurfaceControl> mOpeningLeashes = null;
+        private boolean mOpeningHome = false;
         private ArrayMap<SurfaceControl, SurfaceControl> mLeashMap = null;
         private PictureInPictureSurfaceTransaction mPipTransaction = null;
         private IBinder mTransition = null;
+        private boolean mKeyguardLocked = false;
+        private RemoteAnimationTargetCompat[] mAppearedTargets;
+        private boolean mWillFinishToHome = false;
 
         void setup(RecentsAnimationControllerCompat wrapped, TransitionInfo info,
                 IRemoteTransitionFinishedCallback finishCB,
                 ArrayList<WindowContainerToken> pausingTasks, WindowContainerToken pipTask,
                 WindowContainerToken recentsTask, ArrayMap<SurfaceControl, SurfaceControl> leashMap,
-                IBinder transition) {
+                IBinder transition, boolean keyguardLocked) {
             if (mInfo != null) {
                 throw new IllegalStateException("Trying to run a new recents animation while"
                         + " recents is already active.");
@@ -240,12 +249,14 @@
             mRecentsTask = recentsTask;
             mLeashMap = leashMap;
             mTransition = transition;
+            mKeyguardLocked = keyguardLocked;
         }
 
         @SuppressLint("NewApi")
         boolean merge(TransitionInfo info, SurfaceControl.Transaction t,
                 RecentsAnimationListener recents) {
             SparseArray<TransitionInfo.Change> openingTasks = null;
+            mAppearedTargets = null;
             boolean cancelRecents = false;
             boolean homeGoingAway = false;
             boolean hasChangingApp = false;
@@ -312,6 +323,7 @@
             }
             final int layer = mInfo.getChanges().size() * 3;
             mOpeningLeashes = new ArrayList<>();
+            mOpeningHome = cancelRecents;
             final RemoteAnimationTargetCompat[] targets =
                     new RemoteAnimationTargetCompat[openingTasks.size()];
             for (int i = 0; i < openingTasks.size(); ++i) {
@@ -326,10 +338,17 @@
                 targets[i] = target;
             }
             t.apply();
-            recents.onTasksAppeared(targets);
+            mAppearedTargets = targets;
             return true;
         }
 
+        private void commitTasksAppearedIfNeeded(RecentsAnimationListener recents) {
+            if (mAppearedTargets != null) {
+                recents.onTasksAppeared(mAppearedTargets);
+                mAppearedTargets = null;
+            }
+        }
+
         @Override public ThumbnailData screenshotTask(int taskId) {
             try {
                 final TaskSnapshot snapshot =
@@ -351,10 +370,6 @@
             if (mWrapped != null) mWrapped.setAnimationTargetsBehindSystemBars(behindSystemBars);
         }
 
-        @Override public void hideCurrentInputMethod() {
-            mWrapped.hideCurrentInputMethod();
-        }
-
         @Override public void setFinishTaskTransaction(int taskId,
                 PictureInPictureSurfaceTransaction finishTransaction, SurfaceControl overlay) {
             mPipTransaction = finishTransaction;
@@ -374,7 +389,11 @@
             final SurfaceControl.Transaction t = new SurfaceControl.Transaction();
             final WindowContainerTransaction wct = new WindowContainerTransaction();
 
-            if (!toHome && mPausingTasks != null && mOpeningLeashes == null) {
+            if (mKeyguardLocked && mRecentsTask != null) {
+                if (toHome) wct.reorder(mRecentsTask, true /* toTop */);
+                else wct.restoreTransientOrder(mRecentsTask);
+            }
+            if (!toHome && !mWillFinishToHome && mPausingTasks != null && mOpeningLeashes == null) {
                 // The gesture went back to opening the app rather than continuing with
                 // recents, so end the transition by moving the app back to the top (and also
                 // re-showing it's task).
@@ -383,16 +402,41 @@
                     wct.reorder(mPausingTasks.get(i), true /* onTop */);
                     t.show(mInfo.getChange(mPausingTasks.get(i)).getLeash());
                 }
-                if (mRecentsTask != null) {
+                if (!mKeyguardLocked && mRecentsTask != null) {
+                    wct.restoreTransientOrder(mRecentsTask);
+                }
+            } else if (toHome && mOpeningHome && mPausingTasks != null) {
+                // Special situaition 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 recents order and also
+                // treat the home "pausing" task properly.
+                for (int i = mPausingTasks.size() - 1; i >= 0; --i) {
+                    final TransitionInfo.Change change = mInfo.getChange(mPausingTasks.get(i));
+                    final ActivityManager.RunningTaskInfo taskInfo = change.getTaskInfo();
+                    if (taskInfo.topActivityType == ACTIVITY_TYPE_HOME) {
+                        // Treat as opening (see above)
+                        wct.reorder(mPausingTasks.get(i), true /* onTop */);
+                        t.show(mInfo.getChange(mPausingTasks.get(i)).getLeash());
+                    } else {
+                        // Treat as hiding (see below)
+                        t.hide(mInfo.getChange(mPausingTasks.get(i)).getLeash());
+                    }
+                }
+                if (!mKeyguardLocked && mRecentsTask != null) {
                     wct.restoreTransientOrder(mRecentsTask);
                 }
             } else {
-                if (!sendUserLeaveHint) {
-                    for (int i = 0; i < mPausingTasks.size(); ++i) {
+                for (int i = 0; i < mPausingTasks.size(); ++i) {
+                    if (!sendUserLeaveHint) {
                         // This means recents is not *actually* finishing, so of course we gotta
                         // do special stuff in WMCore to accommodate.
                         wct.setDoNotPip(mPausingTasks.get(i));
                     }
+                    // Since we will reparent out of the leashes, pre-emptively hide the child
+                    // surface to match the leash. Otherwise, there will be a flicker before the
+                    // visibility gets committed in Core when using split-screen (in splitscreen,
+                    // the leaf-tasks are not "independent" so aren't hidden by normal setup).
+                    t.hide(mInfo.getChange(mPausingTasks.get(i)).getLeash());
                 }
                 if (mPipTask != null && mPipTransaction != null && sendUserLeaveHint) {
                     t.show(mInfo.getChange(mPipTask).getLeash());
@@ -402,18 +446,14 @@
                     mPipTransaction = null;
                 }
             }
-            // Release surface references now. This is apparently to free GPU
-            // memory while doing quick operations (eg. during CTS).
-            for (int i = 0; i < mLeashMap.size(); ++i) {
-                if (mLeashMap.keyAt(i) == mLeashMap.valueAt(i)) continue;
-                t.remove(mLeashMap.valueAt(i));
-            }
             try {
                 mFinishCB.onTransitionFinished(wct.isEmpty() ? null : wct, t);
             } catch (RemoteException e) {
                 Log.e("RemoteTransitionCompat", "Failed to call animation finish callback", e);
                 t.apply();
             }
+            // Only release the non-local created surface references. The animator is responsible
+            // for releasing the leashes created by local.
             for (int i = 0; i < mInfo.getChanges().size(); ++i) {
                 mInfo.getChanges().get(i).getLeash().release();
             }
@@ -423,6 +463,7 @@
             mPausingTasks = null;
             mInfo = null;
             mOpeningLeashes = null;
+            mOpeningHome = false;
             mLeashMap = null;
             mTransition = null;
         }
@@ -436,6 +477,7 @@
         }
 
         @Override public void setWillFinishToHome(boolean willFinishToHome) {
+            mWillFinishToHome = willFinishToHome;
             if (mWrapped != null) mWrapped.setWillFinishToHome(willFinishToHome);
         }
 
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/UniversalSmartspaceUtils.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/UniversalSmartspaceUtils.java
deleted file mode 100644
index 359d369..0000000
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/UniversalSmartspaceUtils.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.shared.system;
-
-import android.content.Intent;
-import android.os.Bundle;
-import android.view.SurfaceView;
-
-/** Utility class that is shared between SysUI and Launcher for Universal Smartspace features. */
-public final class UniversalSmartspaceUtils {
-    public static final String ACTION_REQUEST_SMARTSPACE_VIEW =
-            "com.android.systemui.REQUEST_SMARTSPACE_VIEW";
-    public static final String INTENT_BUNDLE_KEY = "bundle_key";
-
-    private static final String SYSUI_PACKAGE = "com.android.systemui";
-
-    /** Creates an intent to request that sysui draws the Smartspace to the SurfaceView. */
-    public static Intent createRequestSmartspaceIntent(SurfaceView surfaceView) {
-        Intent intent = new Intent(ACTION_REQUEST_SMARTSPACE_VIEW);
-
-        Bundle bundle = SurfaceViewRequestUtils.createSurfaceBundle(surfaceView);
-        return intent
-                .putExtra(INTENT_BUNDLE_KEY, bundle)
-                .setPackage(SYSUI_PACKAGE)
-                .addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY
-                        | Intent.FLAG_RECEIVER_FOREGROUND);
-    }
-
-    private UniversalSmartspaceUtils() {}
-}
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/WindowManagerWrapper.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/WindowManagerWrapper.java
index 5bd81a4..5577513 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/WindowManagerWrapper.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/WindowManagerWrapper.java
@@ -28,6 +28,7 @@
 import android.os.RemoteException;
 import android.util.Log;
 import android.view.InsetsController;
+import android.view.InsetsFrameProvider;
 import android.view.InsetsState;
 import android.view.SurfaceControl;
 import android.view.WindowManager;
@@ -105,30 +106,10 @@
      */
     public void setProvidesInsetsTypes(WindowManager.LayoutParams params,
             int[] providesInsetsTypes) {
-        params.providesInsetsTypes = providesInsetsTypes;
-    }
-
-    /**
-     *  Sets if app requested fixed orientation should be ignored for given displayId.
-     */
-    public void setIgnoreOrientationRequest(int displayId, boolean ignoreOrientationRequest) {
-        try {
-            WindowManagerGlobal.getWindowManagerService().setIgnoreOrientationRequest(
-                    displayId, ignoreOrientationRequest);
-        } catch (RemoteException e) {
-            Log.e(TAG, "Failed to setIgnoreOrientationRequest()", e);
-        }
-    }
-
-    /**
-     * @return the stable insets for the primary display.
-     */
-    public void getStableInsets(Rect outStableInsets) {
-        try {
-            WindowManagerGlobal.getWindowManagerService().getStableInsets(DEFAULT_DISPLAY,
-                    outStableInsets);
-        } catch (RemoteException e) {
-            Log.e(TAG, "Failed to get stable insets", e);
+        final int length = providesInsetsTypes.length;
+        params.providedInsets = new InsetsFrameProvider[length];
+        for (int i = 0; i < length; i++) {
+            params.providedInsets[i] = new InsetsFrameProvider(providesInsetsTypes[i]);
         }
     }
 
@@ -148,16 +129,6 @@
         }
     }
 
-    public void overridePendingAppTransitionRemote(
-            RemoteAnimationAdapterCompat remoteAnimationAdapter, int displayId) {
-        try {
-            WindowManagerGlobal.getWindowManagerService().overridePendingAppTransitionRemote(
-                    remoteAnimationAdapter.getWrapped(), displayId);
-        } catch (RemoteException e) {
-            Log.w(TAG, "Failed to override pending app transition (remote): ", e);
-        }
-    }
-
     /**
      * Enable or disable haptic feedback on the navigation bar buttons.
      */
@@ -170,19 +141,6 @@
         }
     }
 
-    public void setRecentsVisibility(boolean visible) {
-        try {
-            WindowManagerGlobal.getWindowManagerService().setRecentsVisibility(visible);
-        } catch (RemoteException e) {
-            Log.w(TAG, "Failed to set recents visibility");
-        }
-    }
-
-    @Deprecated
-    public void setPipVisibility(final boolean visible) {
-        // To be removed
-    }
-
     /**
      * @param displayId the id of display to check if there is a software navigation bar.
      *
@@ -197,22 +155,6 @@
     }
 
     /**
-     * @return The side of the screen where navigation bar is positioned.
-     * @see #NAV_BAR_POS_RIGHT
-     * @see #NAV_BAR_POS_LEFT
-     * @see #NAV_BAR_POS_BOTTOM
-     * @see #NAV_BAR_POS_INVALID
-     */
-    public int getNavBarPosition(int displayId) {
-        try {
-            return WindowManagerGlobal.getWindowManagerService().getNavBarPosition(displayId);
-        } catch (RemoteException e) {
-            Log.w(TAG, "Failed to get nav bar position");
-        }
-        return NAV_BAR_POS_INVALID;
-    }
-
-    /**
      * Mirrors a specified display. The SurfaceControl returned is the root of the mirrored
      * hierarchy.
      *
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/UnfoldSharedComponent.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/UnfoldSharedComponent.kt
deleted file mode 100644
index 9e5aeb8..0000000
--- a/packages/SystemUI/shared/src/com/android/systemui/unfold/UnfoldSharedComponent.kt
+++ /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.systemui.unfold
-
-import android.app.ActivityManager
-import android.content.ContentResolver
-import android.content.Context
-import android.hardware.SensorManager
-import android.hardware.devicestate.DeviceStateManager
-import android.os.Handler
-import com.android.systemui.dagger.qualifiers.Main
-import com.android.systemui.dagger.qualifiers.UiBackground
-import com.android.systemui.unfold.config.UnfoldTransitionConfig
-import com.android.systemui.unfold.updates.screen.ScreenStatusProvider
-import com.android.systemui.unfold.util.UnfoldTransitionATracePrefix
-import dagger.BindsInstance
-import dagger.Component
-import java.util.Optional
-import java.util.concurrent.Executor
-import javax.inject.Singleton
-
-/**
- * Provides [UnfoldTransitionProgressProvider]. The [Optional] is empty when the transition
- * animation is disabled.
- *
- * This component is meant to be used for places that don't use dagger. By providing those
- * parameters to the factory, all dagger objects are correctly instantiated. See
- * [createUnfoldTransitionProgressProvider] for an example.
- */
-@Singleton
-@Component(modules = [UnfoldSharedModule::class])
-internal interface UnfoldSharedComponent {
-
-    @Component.Factory
-    interface Factory {
-        fun create(
-            @BindsInstance context: Context,
-            @BindsInstance config: UnfoldTransitionConfig,
-            @BindsInstance screenStatusProvider: ScreenStatusProvider,
-            @BindsInstance deviceStateManager: DeviceStateManager,
-            @BindsInstance activityManager: ActivityManager,
-            @BindsInstance sensorManager: SensorManager,
-            @BindsInstance @Main handler: Handler,
-            @BindsInstance @Main executor: Executor,
-            @BindsInstance @UiBackground backgroundExecutor: Executor,
-            @BindsInstance @UnfoldTransitionATracePrefix tracingTagPrefix: String,
-            @BindsInstance contentResolver: ContentResolver = context.contentResolver
-        ): UnfoldSharedComponent
-    }
-
-    val unfoldTransitionProvider: Optional<UnfoldTransitionProgressProvider>
-}
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/UnfoldSharedModule.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/UnfoldSharedModule.kt
deleted file mode 100644
index c612995..0000000
--- a/packages/SystemUI/shared/src/com/android/systemui/unfold/UnfoldSharedModule.kt
+++ /dev/null
@@ -1,80 +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.systemui.unfold
-
-import android.hardware.SensorManager
-import com.android.systemui.dagger.qualifiers.UiBackground
-import com.android.systemui.unfold.config.UnfoldTransitionConfig
-import com.android.systemui.unfold.progress.FixedTimingTransitionProgressProvider
-import com.android.systemui.unfold.progress.PhysicsBasedUnfoldTransitionProgressProvider
-import com.android.systemui.unfold.updates.DeviceFoldStateProvider
-import com.android.systemui.unfold.updates.FoldStateProvider
-import com.android.systemui.unfold.updates.hinge.EmptyHingeAngleProvider
-import com.android.systemui.unfold.updates.hinge.HingeAngleProvider
-import com.android.systemui.unfold.updates.hinge.HingeSensorAngleProvider
-import com.android.systemui.unfold.util.ATraceLoggerTransitionProgressListener
-import com.android.systemui.unfold.util.ScaleAwareTransitionProgressProvider
-import dagger.Module
-import dagger.Provides
-import java.util.Optional
-import java.util.concurrent.Executor
-import javax.inject.Singleton
-
-@Module
-class UnfoldSharedModule {
-    @Provides
-    @Singleton
-    fun unfoldTransitionProgressProvider(
-        config: UnfoldTransitionConfig,
-        scaleAwareProviderFactory: ScaleAwareTransitionProgressProvider.Factory,
-        tracingListener: ATraceLoggerTransitionProgressListener,
-        foldStateProvider: FoldStateProvider
-    ): Optional<UnfoldTransitionProgressProvider> =
-        if (!config.isEnabled) {
-            Optional.empty()
-        } else {
-            val baseProgressProvider =
-                if (config.isHingeAngleEnabled) {
-                    PhysicsBasedUnfoldTransitionProgressProvider(foldStateProvider)
-                } else {
-                    FixedTimingTransitionProgressProvider(foldStateProvider)
-                }
-            Optional.of(
-                scaleAwareProviderFactory.wrap(baseProgressProvider).apply {
-                    // Always present callback that logs animation beginning and end.
-                    addCallback(tracingListener)
-                })
-        }
-
-    @Provides
-    @Singleton
-    fun provideFoldStateProvider(
-        deviceFoldStateProvider: DeviceFoldStateProvider
-    ): FoldStateProvider = deviceFoldStateProvider
-
-    @Provides
-    fun hingeAngleProvider(
-        config: UnfoldTransitionConfig,
-        sensorManager: SensorManager,
-        @UiBackground executor: Executor
-    ): HingeAngleProvider =
-        if (config.isHingeAngleEnabled) {
-            HingeSensorAngleProvider(sensorManager, executor)
-        } else {
-            EmptyHingeAngleProvider
-        }
-}
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/UnfoldTransitionFactory.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/UnfoldTransitionFactory.kt
deleted file mode 100644
index cc56007c..0000000
--- a/packages/SystemUI/shared/src/com/android/systemui/unfold/UnfoldTransitionFactory.kt
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-@file:JvmName("UnfoldTransitionFactory")
-
-package com.android.systemui.unfold
-
-import android.app.ActivityManager
-import android.content.Context
-import android.hardware.SensorManager
-import android.hardware.devicestate.DeviceStateManager
-import android.os.Handler
-import com.android.systemui.unfold.config.ResourceUnfoldTransitionConfig
-import com.android.systemui.unfold.config.UnfoldTransitionConfig
-import com.android.systemui.unfold.updates.screen.ScreenStatusProvider
-import java.util.concurrent.Executor
-
-/**
- * Factory for [UnfoldTransitionProgressProvider].
- *
- * This is needed as Launcher has to create the object manually. If dagger is available, this object
- * is provided in [UnfoldSharedModule].
- *
- * This should **never** be called from sysui, as the object is already provided in that process.
- */
-fun createUnfoldTransitionProgressProvider(
-    context: Context,
-    config: UnfoldTransitionConfig,
-    screenStatusProvider: ScreenStatusProvider,
-    deviceStateManager: DeviceStateManager,
-    activityManager: ActivityManager,
-    sensorManager: SensorManager,
-    mainHandler: Handler,
-    mainExecutor: Executor,
-    backgroundExecutor: Executor,
-    tracingTagPrefix: String
-): UnfoldTransitionProgressProvider =
-    DaggerUnfoldSharedComponent.factory()
-        .create(
-            context,
-            config,
-            screenStatusProvider,
-            deviceStateManager,
-            activityManager,
-            sensorManager,
-            mainHandler,
-            mainExecutor,
-            backgroundExecutor,
-            tracingTagPrefix)
-        .unfoldTransitionProvider
-        .orElse(null)
-        ?: throw IllegalStateException(
-            "Trying to create " +
-                "UnfoldTransitionProgressProvider when the transition is disabled")
-
-fun createConfig(context: Context): UnfoldTransitionConfig = ResourceUnfoldTransitionConfig(context)
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/UnfoldTransitionProgressProvider.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/UnfoldTransitionProgressProvider.kt
deleted file mode 100644
index 409dc95..0000000
--- a/packages/SystemUI/shared/src/com/android/systemui/unfold/UnfoldTransitionProgressProvider.kt
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.systemui.unfold
-
-import android.annotation.FloatRange
-import com.android.systemui.statusbar.policy.CallbackController
-import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener
-
-/**
- * Interface that allows to receive unfold transition progress updates.
- *
- * It can be used to update view properties based on the current animation progress.
- *
- * onTransitionProgress callback could be called on each frame.
- *
- * Use [createUnfoldTransitionProgressProvider] to create instances of this interface
- */
-interface UnfoldTransitionProgressProvider : CallbackController<TransitionProgressListener> {
-
-    fun destroy()
-
-    interface TransitionProgressListener {
-        fun onTransitionStarted() {}
-        fun onTransitionFinished() {}
-        fun onTransitionProgress(@FloatRange(from = 0.0, to = 1.0) progress: Float) {}
-    }
-}
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/config/ResourceUnfoldTransitionConfig.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/config/ResourceUnfoldTransitionConfig.kt
deleted file mode 100644
index d1b0639..0000000
--- a/packages/SystemUI/shared/src/com/android/systemui/unfold/config/ResourceUnfoldTransitionConfig.kt
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.systemui.unfold.config
-
-import android.content.Context
-import android.os.SystemProperties
-
-internal class ResourceUnfoldTransitionConfig(private val context: Context) :
-    UnfoldTransitionConfig {
-
-    override val isEnabled: Boolean
-        get() = readIsEnabledResource() && isPropertyEnabled
-
-    override val isHingeAngleEnabled: Boolean
-        get() = readIsHingeAngleEnabled()
-
-    private val isPropertyEnabled: Boolean
-        get() =
-            SystemProperties.getInt(
-                UNFOLD_TRANSITION_MODE_PROPERTY_NAME, UNFOLD_TRANSITION_PROPERTY_ENABLED) ==
-                UNFOLD_TRANSITION_PROPERTY_ENABLED
-
-    private fun readIsEnabledResource(): Boolean =
-        context.resources.getBoolean(com.android.internal.R.bool.config_unfoldTransitionEnabled)
-
-    private fun readIsHingeAngleEnabled(): Boolean =
-        context.resources.getBoolean(com.android.internal.R.bool.config_unfoldTransitionHingeAngle)
-}
-
-/**
- * Temporary persistent property to control unfold transition mode.
- *
- * See [com.android.unfold.config.AnimationMode].
- */
-private const val UNFOLD_TRANSITION_MODE_PROPERTY_NAME = "persist.unfold.transition_enabled"
-private const val UNFOLD_TRANSITION_PROPERTY_ENABLED = 1
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/config/UnfoldTransitionConfig.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/config/UnfoldTransitionConfig.kt
deleted file mode 100644
index 5b187b3..0000000
--- a/packages/SystemUI/shared/src/com/android/systemui/unfold/config/UnfoldTransitionConfig.kt
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.systemui.unfold.config
-
-interface UnfoldTransitionConfig {
-    val isEnabled: Boolean
-    val isHingeAngleEnabled: Boolean
-}
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/progress/PhysicsBasedUnfoldTransitionProgressProvider.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/progress/PhysicsBasedUnfoldTransitionProgressProvider.kt
deleted file mode 100644
index 04d920c..0000000
--- a/packages/SystemUI/shared/src/com/android/systemui/unfold/progress/PhysicsBasedUnfoldTransitionProgressProvider.kt
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.systemui.unfold.progress
-
-import android.util.Log
-import android.util.MathUtils.saturate
-import androidx.dynamicanimation.animation.DynamicAnimation
-import androidx.dynamicanimation.animation.FloatPropertyCompat
-import androidx.dynamicanimation.animation.SpringAnimation
-import androidx.dynamicanimation.animation.SpringForce
-import com.android.systemui.unfold.UnfoldTransitionProgressProvider
-import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener
-import com.android.systemui.unfold.updates.FOLD_UPDATE_FINISH_CLOSED
-import com.android.systemui.unfold.updates.FOLD_UPDATE_FINISH_FULL_OPEN
-import com.android.systemui.unfold.updates.FOLD_UPDATE_FINISH_HALF_OPEN
-import com.android.systemui.unfold.updates.FOLD_UPDATE_START_CLOSING
-import com.android.systemui.unfold.updates.FOLD_UPDATE_UNFOLDED_SCREEN_AVAILABLE
-import com.android.systemui.unfold.updates.FoldStateProvider
-import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdate
-import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdatesListener
-
-/** Maps fold updates to unfold transition progress using DynamicAnimation. */
-class PhysicsBasedUnfoldTransitionProgressProvider(
-    private val foldStateProvider: FoldStateProvider
-) : UnfoldTransitionProgressProvider, FoldUpdatesListener, DynamicAnimation.OnAnimationEndListener {
-
-    private val springAnimation =
-        SpringAnimation(this, AnimationProgressProperty).apply {
-            addEndListener(this@PhysicsBasedUnfoldTransitionProgressProvider)
-        }
-
-    private var isTransitionRunning = false
-    private var isAnimatedCancelRunning = false
-
-    private var transitionProgress: Float = 0.0f
-        set(value) {
-            if (isTransitionRunning) {
-                listeners.forEach { it.onTransitionProgress(value) }
-            }
-            field = value
-        }
-
-    private val listeners: MutableList<TransitionProgressListener> = mutableListOf()
-
-    init {
-        foldStateProvider.addCallback(this)
-        foldStateProvider.start()
-    }
-
-    override fun destroy() {
-        foldStateProvider.stop()
-    }
-
-    override fun onHingeAngleUpdate(angle: Float) {
-        if (!isTransitionRunning || isAnimatedCancelRunning) return
-        val progress = saturate(angle / FINAL_HINGE_ANGLE_POSITION)
-        springAnimation.animateToFinalPosition(progress)
-    }
-
-    override fun onFoldUpdate(@FoldUpdate update: Int) {
-        when (update) {
-            FOLD_UPDATE_UNFOLDED_SCREEN_AVAILABLE -> {
-                startTransition(startValue = 0f)
-
-                // Stop the animation if the device has already opened by the time when
-                // the display is available as we won't receive the full open event anymore
-                if (foldStateProvider.isFinishedOpening) {
-                    cancelTransition(endValue = 1f, animate = true)
-                }
-            }
-            FOLD_UPDATE_FINISH_FULL_OPEN, FOLD_UPDATE_FINISH_HALF_OPEN -> {
-                // Do not cancel if we haven't started the transition yet.
-                // This could happen when we fully unfolded the device before the screen
-                // became available. In this case we start and immediately cancel the animation
-                // in FOLD_UPDATE_UNFOLDED_SCREEN_AVAILABLE event handler, so we don't need to
-                // cancel it here.
-                if (isTransitionRunning) {
-                    cancelTransition(endValue = 1f, animate = true)
-                }
-            }
-            FOLD_UPDATE_FINISH_CLOSED -> {
-                cancelTransition(endValue = 0f, animate = false)
-            }
-            FOLD_UPDATE_START_CLOSING -> {
-                // The transition might be already running as the device might start closing several
-                // times before reaching an end state.
-                if (isTransitionRunning) {
-                    // If we are cancelling the animation, reset that so we can resume it normally.
-                    // The animation could be 'cancelled' when the user stops folding/unfolding
-                    // for some period of time or fully unfolds the device. In this case,
-                    // it is forced to run to the end ignoring all further hinge angle events.
-                    // By resetting this flag we allow reacting to hinge angle events again, so
-                    // the transition continues running.
-                    if (isAnimatedCancelRunning) {
-                        isAnimatedCancelRunning = false
-                    }
-                } else {
-                    startTransition(startValue = 1f)
-                }
-            }
-        }
-
-        if (DEBUG) {
-            Log.d(TAG, "onFoldUpdate = $update")
-        }
-    }
-
-    private fun cancelTransition(endValue: Float, animate: Boolean) {
-        if (isTransitionRunning && animate) {
-            isAnimatedCancelRunning = true
-            springAnimation.animateToFinalPosition(endValue)
-        } else {
-            transitionProgress = endValue
-            isAnimatedCancelRunning = false
-            isTransitionRunning = false
-            springAnimation.cancel()
-
-            listeners.forEach { it.onTransitionFinished() }
-
-            if (DEBUG) {
-                Log.d(TAG, "onTransitionFinished")
-            }
-        }
-    }
-
-    override fun onAnimationEnd(
-        animation: DynamicAnimation<out DynamicAnimation<*>>,
-        canceled: Boolean,
-        value: Float,
-        velocity: Float
-    ) {
-        if (isAnimatedCancelRunning) {
-            cancelTransition(value, animate = false)
-        }
-    }
-
-    private fun onStartTransition() {
-        listeners.forEach { it.onTransitionStarted() }
-        isTransitionRunning = true
-
-        if (DEBUG) {
-            Log.d(TAG, "onTransitionStarted")
-        }
-    }
-
-    private fun startTransition(startValue: Float) {
-        if (!isTransitionRunning) onStartTransition()
-
-        springAnimation.apply {
-            spring =
-                SpringForce().apply {
-                    finalPosition = startValue
-                    dampingRatio = SpringForce.DAMPING_RATIO_NO_BOUNCY
-                    stiffness = SPRING_STIFFNESS
-                }
-            minimumVisibleChange = MINIMAL_VISIBLE_CHANGE
-            setStartValue(startValue)
-            setMinValue(0f)
-            setMaxValue(1f)
-        }
-
-        springAnimation.start()
-    }
-
-    override fun addCallback(listener: TransitionProgressListener) {
-        listeners.add(listener)
-    }
-
-    override fun removeCallback(listener: TransitionProgressListener) {
-        listeners.remove(listener)
-    }
-
-    private object AnimationProgressProperty :
-        FloatPropertyCompat<PhysicsBasedUnfoldTransitionProgressProvider>("animation_progress") {
-
-        override fun setValue(
-            provider: PhysicsBasedUnfoldTransitionProgressProvider,
-            value: Float
-        ) {
-            provider.transitionProgress = value
-        }
-
-        override fun getValue(provider: PhysicsBasedUnfoldTransitionProgressProvider): Float =
-            provider.transitionProgress
-    }
-}
-
-private const val TAG = "PhysicsBasedUnfoldTransitionProgressProvider"
-private const val DEBUG = true
-
-private const val SPRING_STIFFNESS = 200.0f
-private const val MINIMAL_VISIBLE_CHANGE = 0.001f
-private const val FINAL_HINGE_ANGLE_POSITION = 165f
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/system/ActivityManagerActivityTypeProvider.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/system/ActivityManagerActivityTypeProvider.kt
new file mode 100644
index 0000000..7f2933e
--- /dev/null
+++ b/packages/SystemUI/shared/src/com/android/systemui/unfold/system/ActivityManagerActivityTypeProvider.kt
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT 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.unfold.system
+
+import android.app.ActivityManager
+import android.app.WindowConfiguration
+import com.android.systemui.unfold.util.CurrentActivityTypeProvider
+import javax.inject.Inject
+import javax.inject.Singleton
+
+@Singleton
+class ActivityManagerActivityTypeProvider @Inject constructor(
+    private val activityManager: ActivityManager
+) : CurrentActivityTypeProvider {
+
+    override val isHomeActivity: Boolean?
+        get() {
+            val activityType = activityManager.getRunningTasks(/* maxNum= */ 1)
+                    ?.getOrNull(0)?.topActivityType ?: return null
+
+            return activityType == WindowConfiguration.ACTIVITY_TYPE_HOME
+        }
+}
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/system/DeviceStateManagerFoldProvider.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/system/DeviceStateManagerFoldProvider.kt
new file mode 100644
index 0000000..3b8d318
--- /dev/null
+++ b/packages/SystemUI/shared/src/com/android/systemui/unfold/system/DeviceStateManagerFoldProvider.kt
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT 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.unfold.system
+
+import android.content.Context
+import android.hardware.devicestate.DeviceStateManager
+import com.android.systemui.unfold.updates.FoldProvider
+import com.android.systemui.unfold.updates.FoldProvider.FoldCallback
+import java.util.concurrent.Executor
+import javax.inject.Inject
+import javax.inject.Singleton
+
+@Singleton
+class DeviceStateManagerFoldProvider @Inject constructor(
+    private val deviceStateManager: DeviceStateManager,
+    private val context: Context
+) : FoldProvider {
+
+    private val callbacks: MutableMap<FoldCallback,
+            DeviceStateManager.DeviceStateCallback> = hashMapOf()
+
+    override fun registerCallback(callback: FoldCallback, executor: Executor) {
+        val listener = FoldStateListener(context, callback)
+        deviceStateManager.registerCallback(executor, listener)
+        callbacks[callback] = listener
+    }
+
+    override fun unregisterCallback(callback: FoldCallback) {
+        val listener = callbacks.remove(callback)
+        listener?.let {
+            deviceStateManager.unregisterCallback(it)
+        }
+    }
+
+    private inner class FoldStateListener(
+        context: Context,
+        listener: FoldCallback
+    ) : DeviceStateManager.FoldStateListener(context, { listener.onFoldUpdated(it) })
+}
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/system/SystemUnfoldSharedModule.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/system/SystemUnfoldSharedModule.kt
new file mode 100644
index 0000000..24ae42a
--- /dev/null
+++ b/packages/SystemUI/shared/src/com/android/systemui/unfold/system/SystemUnfoldSharedModule.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT 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.unfold.system
+
+import android.os.Handler
+import com.android.systemui.dagger.qualifiers.Main
+import com.android.systemui.dagger.qualifiers.UiBackground
+import com.android.systemui.unfold.config.ResourceUnfoldTransitionConfig
+import com.android.systemui.unfold.config.UnfoldTransitionConfig
+import com.android.systemui.unfold.dagger.UnfoldBackground
+import com.android.systemui.unfold.dagger.UnfoldMain
+import com.android.systemui.unfold.updates.FoldProvider
+import com.android.systemui.unfold.util.CurrentActivityTypeProvider
+import dagger.Binds
+import dagger.Module
+import java.util.concurrent.Executor
+
+/**
+ * Dagger module with system-only dependencies for the unfold animation.
+ * The code that is used to calculate unfold transition progress
+ * depends on some hidden APIs that are not available in normal
+ * apps. In order to re-use this code and use alternative implementations
+ * of these classes in other apps and hidden APIs here.
+ */
+@Module
+abstract class SystemUnfoldSharedModule {
+
+    @Binds
+    abstract fun activityTypeProvider(executor: ActivityManagerActivityTypeProvider):
+            CurrentActivityTypeProvider
+
+    @Binds
+    abstract fun config(config: ResourceUnfoldTransitionConfig): UnfoldTransitionConfig
+
+    @Binds
+    abstract fun foldState(provider: DeviceStateManagerFoldProvider): FoldProvider
+
+    @Binds
+    @UnfoldMain
+    abstract fun mainExecutor(@Main executor: Executor): Executor
+
+    @Binds
+    @UnfoldMain
+    abstract fun mainHandler(@Main handler: Handler): Handler
+
+    @Binds
+    @UnfoldBackground
+    abstract fun backgroundExecutor(@UiBackground executor: Executor): Executor
+}
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/DeviceFoldStateProvider.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/DeviceFoldStateProvider.kt
deleted file mode 100644
index 14581cc..0000000
--- a/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/DeviceFoldStateProvider.kt
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.systemui.unfold.updates
-
-import android.annotation.FloatRange
-import android.app.ActivityManager
-import android.app.WindowConfiguration.ACTIVITY_TYPE_HOME
-import android.content.Context
-import android.hardware.devicestate.DeviceStateManager
-import android.os.Handler
-import android.util.Log
-import androidx.annotation.VisibleForTesting
-import androidx.core.util.Consumer
-import com.android.systemui.dagger.qualifiers.Main
-import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdate
-import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdatesListener
-import com.android.systemui.unfold.updates.hinge.FULLY_CLOSED_DEGREES
-import com.android.systemui.unfold.updates.hinge.FULLY_OPEN_DEGREES
-import com.android.systemui.unfold.updates.hinge.HingeAngleProvider
-import com.android.systemui.unfold.updates.screen.ScreenStatusProvider
-import java.util.concurrent.Executor
-import javax.inject.Inject
-
-class DeviceFoldStateProvider
-@Inject
-constructor(
-    context: Context,
-    private val hingeAngleProvider: HingeAngleProvider,
-    private val screenStatusProvider: ScreenStatusProvider,
-    private val deviceStateManager: DeviceStateManager,
-    private val activityManager: ActivityManager,
-    @Main private val mainExecutor: Executor,
-    @Main private val handler: Handler
-) : FoldStateProvider {
-
-    private val outputListeners: MutableList<FoldUpdatesListener> = mutableListOf()
-
-    @FoldUpdate private var lastFoldUpdate: Int? = null
-
-    @FloatRange(from = 0.0, to = 180.0) private var lastHingeAngle: Float = 0f
-
-    private val hingeAngleListener = HingeAngleListener()
-    private val screenListener = ScreenStatusListener()
-    private val foldStateListener = FoldStateListener(context)
-    private val timeoutRunnable = TimeoutRunnable()
-
-    /**
-     * Time after which [FOLD_UPDATE_FINISH_HALF_OPEN] is emitted following a
-     * [FOLD_UPDATE_START_CLOSING] or [FOLD_UPDATE_START_OPENING] event, if an end state is not
-     * reached.
-     */
-    private val halfOpenedTimeoutMillis: Int =
-        context.resources.getInteger(
-            com.android.internal.R.integer.config_unfoldTransitionHalfFoldedTimeout)
-
-    private var isFolded = false
-    private var isUnfoldHandled = true
-
-    override fun start() {
-        deviceStateManager.registerCallback(mainExecutor, foldStateListener)
-        screenStatusProvider.addCallback(screenListener)
-        hingeAngleProvider.addCallback(hingeAngleListener)
-    }
-
-    override fun stop() {
-        screenStatusProvider.removeCallback(screenListener)
-        deviceStateManager.unregisterCallback(foldStateListener)
-        hingeAngleProvider.removeCallback(hingeAngleListener)
-        hingeAngleProvider.stop()
-    }
-
-    override fun addCallback(listener: FoldUpdatesListener) {
-        outputListeners.add(listener)
-    }
-
-    override fun removeCallback(listener: FoldUpdatesListener) {
-        outputListeners.remove(listener)
-    }
-
-    override val isFinishedOpening: Boolean
-        get() = !isFolded &&
-            (lastFoldUpdate == FOLD_UPDATE_FINISH_FULL_OPEN ||
-                lastFoldUpdate == FOLD_UPDATE_FINISH_HALF_OPEN)
-
-    private val isTransitionInProgress: Boolean
-        get() =
-            lastFoldUpdate == FOLD_UPDATE_START_OPENING ||
-                lastFoldUpdate == FOLD_UPDATE_START_CLOSING
-
-    private fun onHingeAngle(angle: Float) {
-        if (DEBUG) {
-            Log.d(TAG, "Hinge angle: $angle, lastHingeAngle: $lastHingeAngle")
-        }
-
-        val isClosing = angle < lastHingeAngle
-        val closingThreshold = getClosingThreshold()
-        val closingThresholdMet = closingThreshold == null || angle < closingThreshold
-        val isFullyOpened = FULLY_OPEN_DEGREES - angle < FULLY_OPEN_THRESHOLD_DEGREES
-        val closingEventDispatched = lastFoldUpdate == FOLD_UPDATE_START_CLOSING
-
-        if (isClosing && closingThresholdMet && !closingEventDispatched && !isFullyOpened) {
-            notifyFoldUpdate(FOLD_UPDATE_START_CLOSING)
-        }
-
-        if (isTransitionInProgress) {
-            if (isFullyOpened) {
-                notifyFoldUpdate(FOLD_UPDATE_FINISH_FULL_OPEN)
-                cancelTimeout()
-            } else {
-                // The timeout will trigger some constant time after the last angle update.
-                rescheduleAbortAnimationTimeout()
-            }
-        }
-
-        lastHingeAngle = angle
-        outputListeners.forEach { it.onHingeAngleUpdate(angle) }
-    }
-
-    /**
-     * Fold animation should be started only after the threshold returned here.
-     *
-     * This has been introduced because the fold animation might be distracting/unwanted on top of
-     * apps that support table-top/HALF_FOLDED mode. Only for launcher, there is no threshold.
-     */
-    private fun getClosingThreshold(): Int? {
-        val activityType =
-            activityManager.getRunningTasks(/* maxNum= */ 1)?.getOrNull(0)?.topActivityType
-                ?: return null
-
-        if (DEBUG) {
-            Log.d(TAG, "activityType=" + activityType)
-        }
-
-        return if (activityType == ACTIVITY_TYPE_HOME) {
-            null
-        } else {
-            START_CLOSING_ON_APPS_THRESHOLD_DEGREES
-        }
-    }
-
-    private inner class FoldStateListener(context: Context) :
-        DeviceStateManager.FoldStateListener(
-            context,
-            { folded: Boolean ->
-                isFolded = folded
-                lastHingeAngle = FULLY_CLOSED_DEGREES
-
-                if (folded) {
-                    hingeAngleProvider.stop()
-                    notifyFoldUpdate(FOLD_UPDATE_FINISH_CLOSED)
-                    cancelTimeout()
-                    isUnfoldHandled = false
-                } else {
-                    notifyFoldUpdate(FOLD_UPDATE_START_OPENING)
-                    rescheduleAbortAnimationTimeout()
-                    hingeAngleProvider.start()
-                }
-            })
-
-    private fun notifyFoldUpdate(@FoldUpdate update: Int) {
-        if (DEBUG) {
-            Log.d(TAG, stateToString(update))
-        }
-        outputListeners.forEach { it.onFoldUpdate(update) }
-        lastFoldUpdate = update
-    }
-
-    private fun rescheduleAbortAnimationTimeout() {
-        if (isTransitionInProgress) {
-            cancelTimeout()
-        }
-        handler.postDelayed(timeoutRunnable, halfOpenedTimeoutMillis.toLong())
-    }
-
-    private fun cancelTimeout() {
-        handler.removeCallbacks(timeoutRunnable)
-    }
-
-    private inner class ScreenStatusListener : ScreenStatusProvider.ScreenListener {
-
-        override fun onScreenTurnedOn() {
-            // Trigger this event only if we are unfolded and this is the first screen
-            // turned on event since unfold started. This prevents running the animation when
-            // turning on the internal display using the power button.
-            // Initially isUnfoldHandled is true so it will be reset to false *only* when we
-            // receive 'folded' event. If SystemUI started when device is already folded it will
-            // still receive 'folded' event on startup.
-            if (!isFolded && !isUnfoldHandled) {
-                outputListeners.forEach { it.onFoldUpdate(FOLD_UPDATE_UNFOLDED_SCREEN_AVAILABLE) }
-                isUnfoldHandled = true
-            }
-        }
-    }
-
-    private inner class HingeAngleListener : Consumer<Float> {
-        override fun accept(angle: Float) {
-            onHingeAngle(angle)
-        }
-    }
-
-    private inner class TimeoutRunnable : Runnable {
-        override fun run() {
-            notifyFoldUpdate(FOLD_UPDATE_FINISH_HALF_OPEN)
-        }
-    }
-}
-
-private fun stateToString(@FoldUpdate update: Int): String {
-    return when (update) {
-        FOLD_UPDATE_START_OPENING -> "START_OPENING"
-        FOLD_UPDATE_START_CLOSING -> "START_CLOSING"
-        FOLD_UPDATE_UNFOLDED_SCREEN_AVAILABLE -> "UNFOLDED_SCREEN_AVAILABLE"
-        FOLD_UPDATE_FINISH_HALF_OPEN -> "FINISH_HALF_OPEN"
-        FOLD_UPDATE_FINISH_FULL_OPEN -> "FINISH_FULL_OPEN"
-        FOLD_UPDATE_FINISH_CLOSED -> "FINISH_CLOSED"
-        else -> "UNKNOWN"
-    }
-}
-
-private const val TAG = "DeviceFoldProvider"
-private const val DEBUG = false
-
-/** Threshold after which we consider the device fully unfolded. */
-@VisibleForTesting const val FULLY_OPEN_THRESHOLD_DEGREES = 15f
-
-/** Fold animation on top of apps only when the angle exceeds this threshold. */
-@VisibleForTesting const val START_CLOSING_ON_APPS_THRESHOLD_DEGREES = 60
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/FoldStateProvider.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/FoldStateProvider.kt
deleted file mode 100644
index 14a3a70..0000000
--- a/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/FoldStateProvider.kt
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.systemui.unfold.updates
-
-import android.annotation.FloatRange
-import android.annotation.IntDef
-import com.android.systemui.statusbar.policy.CallbackController
-import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdatesListener
-
-/**
- * Allows to subscribe to main events related to fold/unfold process such as hinge angle update,
- * start folding/unfolding, screen availability
- */
-interface FoldStateProvider : CallbackController<FoldUpdatesListener> {
-    fun start()
-    fun stop()
-
-    val isFinishedOpening: Boolean
-
-    interface FoldUpdatesListener {
-        fun onHingeAngleUpdate(@FloatRange(from = 0.0, to = 180.0) angle: Float)
-        fun onFoldUpdate(@FoldUpdate update: Int)
-    }
-
-    @IntDef(
-        prefix = ["FOLD_UPDATE_"],
-        value =
-            [
-                FOLD_UPDATE_START_OPENING,
-                FOLD_UPDATE_START_CLOSING,
-                FOLD_UPDATE_UNFOLDED_SCREEN_AVAILABLE,
-                FOLD_UPDATE_FINISH_HALF_OPEN,
-                FOLD_UPDATE_FINISH_FULL_OPEN,
-                FOLD_UPDATE_FINISH_CLOSED])
-    @Retention(AnnotationRetention.SOURCE)
-    annotation class FoldUpdate
-}
-
-const val FOLD_UPDATE_START_OPENING = 0
-const val FOLD_UPDATE_START_CLOSING = 1
-const val FOLD_UPDATE_UNFOLDED_SCREEN_AVAILABLE = 2
-const val FOLD_UPDATE_FINISH_HALF_OPEN = 3
-const val FOLD_UPDATE_FINISH_FULL_OPEN = 4
-const val FOLD_UPDATE_FINISH_CLOSED = 5
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/hinge/EmptyHingeAngleProvider.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/hinge/EmptyHingeAngleProvider.kt
deleted file mode 100644
index b351585..0000000
--- a/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/hinge/EmptyHingeAngleProvider.kt
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.android.systemui.unfold.updates.hinge
-
-import androidx.core.util.Consumer
-
-internal object EmptyHingeAngleProvider : HingeAngleProvider {
-    override fun start() {}
-
-    override fun stop() {}
-
-    override fun removeCallback(listener: Consumer<Float>) {}
-
-    override fun addCallback(listener: Consumer<Float>) {}
-}
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/hinge/HingeAngleProvider.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/hinge/HingeAngleProvider.kt
deleted file mode 100644
index 48a5b12..0000000
--- a/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/hinge/HingeAngleProvider.kt
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.android.systemui.unfold.updates.hinge
-
-import androidx.core.util.Consumer
-import com.android.systemui.statusbar.policy.CallbackController
-
-/**
- * Emits device hinge angle values (angle between two integral parts of the device).
- *
- * The hinge angle could be from 0 to 360 degrees inclusive. For foldable devices usually 0
- * corresponds to fully closed (folded) state and 180 degrees corresponds to fully open (flat)
- * state.
- */
-interface HingeAngleProvider : CallbackController<Consumer<Float>> {
-    fun start()
-    fun stop()
-}
-
-const val FULLY_OPEN_DEGREES = 180f
-const val FULLY_CLOSED_DEGREES = 0f
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/hinge/HingeSensorAngleProvider.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/hinge/HingeSensorAngleProvider.kt
deleted file mode 100644
index c93412b..0000000
--- a/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/hinge/HingeSensorAngleProvider.kt
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.android.systemui.unfold.updates.hinge
-
-import android.hardware.Sensor
-import android.hardware.SensorEvent
-import android.hardware.SensorEventListener
-import android.hardware.SensorManager
-import android.os.Trace
-import androidx.core.util.Consumer
-import java.util.concurrent.Executor
-
-internal class HingeSensorAngleProvider(
-    private val sensorManager: SensorManager,
-    private val executor: Executor
-) :
-    HingeAngleProvider {
-
-    private val sensorListener = HingeAngleSensorListener()
-    private val listeners: MutableList<Consumer<Float>> = arrayListOf()
-
-    override fun start() = executor.execute {
-        Trace.beginSection("HingeSensorAngleProvider#start")
-        val sensor = sensorManager.getDefaultSensor(Sensor.TYPE_HINGE_ANGLE)
-        sensorManager.registerListener(
-            sensorListener,
-            sensor,
-            SensorManager.SENSOR_DELAY_FASTEST
-        )
-        Trace.endSection()
-    }
-
-    override fun stop() = executor.execute {
-        sensorManager.unregisterListener(sensorListener)
-    }
-
-    override fun removeCallback(listener: Consumer<Float>) {
-        listeners.remove(listener)
-    }
-
-    override fun addCallback(listener: Consumer<Float>) {
-        listeners.add(listener)
-    }
-
-    private inner class HingeAngleSensorListener : SensorEventListener {
-
-        override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {}
-
-        override fun onSensorChanged(event: SensorEvent) {
-            listeners.forEach { it.accept(event.values[0]) }
-        }
-    }
-}
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/screen/ScreenStatusProvider.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/screen/ScreenStatusProvider.kt
deleted file mode 100644
index 668c694..0000000
--- a/packages/SystemUI/shared/src/com/android/systemui/unfold/updates/screen/ScreenStatusProvider.kt
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.systemui.unfold.updates.screen
-
-import com.android.systemui.statusbar.policy.CallbackController
-import com.android.systemui.unfold.updates.screen.ScreenStatusProvider.ScreenListener
-
-interface ScreenStatusProvider : CallbackController<ScreenListener> {
-
-    interface ScreenListener {
-        /**
-         * Called when the screen is on and ready (windows are drawn and screen blocker is removed)
-         */
-        fun onScreenTurnedOn()
-    }
-}
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/util/ATraceLoggerTransitionProgressListener.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/util/ATraceLoggerTransitionProgressListener.kt
deleted file mode 100644
index 1574c8d..0000000
--- a/packages/SystemUI/shared/src/com/android/systemui/unfold/util/ATraceLoggerTransitionProgressListener.kt
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.android.systemui.unfold.util
-
-import android.os.Trace
-import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener
-import javax.inject.Inject
-import javax.inject.Qualifier
-
-/**
- * Listener that logs start and end of the fold-unfold transition.
- *
- * [tracePrefix] arg helps in differentiating those. Currently, this is expected to be logged twice
- * for each fold/unfold: in (1) systemui and (2) launcher process.
- */
-class ATraceLoggerTransitionProgressListener
-@Inject
-internal constructor(@UnfoldTransitionATracePrefix tracePrefix: String) :
-    TransitionProgressListener {
-
-    private val traceName = "$tracePrefix#$UNFOLD_TRANSITION_TRACE_NAME"
-
-    override fun onTransitionStarted() {
-        Trace.beginAsyncSection(traceName, /* cookie= */ 0)
-    }
-
-    override fun onTransitionFinished() {
-        Trace.endAsyncSection(traceName, /* cookie= */ 0)
-    }
-
-    override fun onTransitionProgress(progress: Float) {
-        Trace.setCounter(traceName, (progress * 100).toLong())
-    }
-}
-
-private const val UNFOLD_TRANSITION_TRACE_NAME = "FoldUnfoldTransitionInProgress"
-
-@Qualifier annotation class UnfoldTransitionATracePrefix
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/util/NaturalRotationUnfoldProgressProvider.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/util/NaturalRotationUnfoldProgressProvider.kt
index 53c528f..ec938b2 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/unfold/util/NaturalRotationUnfoldProgressProvider.kt
+++ b/packages/SystemUI/shared/src/com/android/systemui/unfold/util/NaturalRotationUnfoldProgressProvider.kt
@@ -1,3 +1,17 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT 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.unfold.util
 
 import android.content.Context
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/util/ScaleAwareTransitionProgressProvider.kt b/packages/SystemUI/shared/src/com/android/systemui/unfold/util/ScaleAwareTransitionProgressProvider.kt
deleted file mode 100644
index dfe8792..0000000
--- a/packages/SystemUI/shared/src/com/android/systemui/unfold/util/ScaleAwareTransitionProgressProvider.kt
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.android.systemui.unfold.util
-
-import android.animation.ValueAnimator
-import android.content.ContentResolver
-import android.database.ContentObserver
-import android.provider.Settings
-import com.android.systemui.unfold.UnfoldTransitionProgressProvider
-import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener
-import dagger.assisted.Assisted
-import dagger.assisted.AssistedFactory
-import dagger.assisted.AssistedInject
-
-/** Wraps [UnfoldTransitionProgressProvider] to disable transitions when animations are disabled. */
-class ScaleAwareTransitionProgressProvider
-@AssistedInject
-constructor(
-    @Assisted progressProviderToWrap: UnfoldTransitionProgressProvider,
-    private val contentResolver: ContentResolver
-) : UnfoldTransitionProgressProvider {
-
-    private val scopedUnfoldTransitionProgressProvider =
-        ScopedUnfoldTransitionProgressProvider(progressProviderToWrap)
-
-    private val animatorDurationScaleObserver =
-        object : ContentObserver(null) {
-            override fun onChange(selfChange: Boolean) {
-                onAnimatorScaleChanged()
-            }
-        }
-
-    init {
-        contentResolver.registerContentObserver(
-            Settings.Global.getUriFor(Settings.Global.ANIMATOR_DURATION_SCALE),
-            /* notifyForDescendants= */ false,
-            animatorDurationScaleObserver)
-        onAnimatorScaleChanged()
-    }
-
-    private fun onAnimatorScaleChanged() {
-        val animationsEnabled = ValueAnimator.areAnimatorsEnabled()
-        scopedUnfoldTransitionProgressProvider.setReadyToHandleTransition(animationsEnabled)
-    }
-
-    override fun addCallback(listener: TransitionProgressListener) {
-        scopedUnfoldTransitionProgressProvider.addCallback(listener)
-    }
-
-    override fun removeCallback(listener: TransitionProgressListener) {
-        scopedUnfoldTransitionProgressProvider.removeCallback(listener)
-    }
-
-    override fun destroy() {
-        contentResolver.unregisterContentObserver(animatorDurationScaleObserver)
-        scopedUnfoldTransitionProgressProvider.destroy()
-    }
-
-    @AssistedFactory
-    interface Factory {
-        fun wrap(
-            progressProvider: UnfoldTransitionProgressProvider
-        ): ScaleAwareTransitionProgressProvider
-    }
-}
diff --git a/packages/SystemUI/src-debug/com/android/systemui/flags/FlagsModule.kt b/packages/SystemUI/src-debug/com/android/systemui/flags/FlagsModule.kt
index 2560284..74bd9c6 100644
--- a/packages/SystemUI/src-debug/com/android/systemui/flags/FlagsModule.kt
+++ b/packages/SystemUI/src-debug/com/android/systemui/flags/FlagsModule.kt
@@ -27,7 +27,8 @@
 import javax.inject.Named
 
 @Module(includes = [
-    SettingsUtilModule::class
+    ServerFlagReaderModule::class,
+    SettingsUtilModule::class,
 ])
 abstract class FlagsModule {
     @Binds
@@ -46,4 +47,4 @@
         @Named(ALL_FLAGS)
         fun providesAllFlags(): Map<Int, Flag<*>> = Flags.collectFlags()
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src-release/com/android/systemui/flags/FlagsModule.kt b/packages/SystemUI/src-release/com/android/systemui/flags/FlagsModule.kt
index ab9e01e..38b5c9a 100644
--- a/packages/SystemUI/src-release/com/android/systemui/flags/FlagsModule.kt
+++ b/packages/SystemUI/src-release/com/android/systemui/flags/FlagsModule.kt
@@ -19,8 +19,8 @@
 import dagger.Binds
 import dagger.Module
 
-@Module
+@Module(includes = [ServerFlagReaderModule::class])
 abstract class FlagsModule {
     @Binds
     abstract fun bindsFeatureFlagRelease(impl: FeatureFlagsRelease): FeatureFlags
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/keyguard/AdminSecondaryLockScreenController.java b/packages/SystemUI/src/com/android/keyguard/AdminSecondaryLockScreenController.java
index 23195af..00f1c01 100644
--- a/packages/SystemUI/src/com/android/keyguard/AdminSecondaryLockScreenController.java
+++ b/packages/SystemUI/src/com/android/keyguard/AdminSecondaryLockScreenController.java
@@ -33,6 +33,7 @@
 import android.view.ViewGroup;
 
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.keyguard.KeyguardSecurityModel.SecurityMode;
 import com.android.keyguard.dagger.KeyguardBouncerScope;
 import com.android.systemui.dagger.qualifiers.Main;
 
@@ -208,7 +209,7 @@
             hide();
             if (mKeyguardCallback != null) {
                 mKeyguardCallback.dismiss(/* securityVerified= */ true, userId,
-                        /* bypassSecondaryLockScreen= */true);
+                        /* bypassSecondaryLockScreen= */true, SecurityMode.Invalid);
             }
         }
     }
diff --git a/packages/SystemUI/src/com/android/keyguard/AnimatableClockController.java b/packages/SystemUI/src/com/android/keyguard/AnimatableClockController.java
index 487e1a4..c69ff7e 100644
--- a/packages/SystemUI/src/com/android/keyguard/AnimatableClockController.java
+++ b/packages/SystemUI/src/com/android/keyguard/AnimatableClockController.java
@@ -32,6 +32,7 @@
 import com.android.systemui.broadcast.BroadcastDispatcher;
 import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.shared.clocks.AnimatableClockView;
 import com.android.systemui.statusbar.policy.BatteryController;
 import com.android.systemui.util.ViewController;
 
@@ -134,6 +135,21 @@
                 reset();
             }
         }
+
+        @Override
+        public void onTimeFormatChanged(String timeFormat) {
+            mView.refreshFormat();
+        }
+
+        @Override
+        public void onTimeZoneChanged(TimeZone timeZone) {
+            mView.onTimeZoneChanged(timeZone);
+        }
+
+        @Override
+        public void onUserSwitchComplete(int userId) {
+            mView.refreshFormat();
+        }
     };
 
     @Override
@@ -186,7 +202,7 @@
     /** Animate the clock appearance when a foldable device goes from fully-open/half-open state to
      * fully folded state and it goes to sleep (always on display screen) */
     public void animateFoldAppear() {
-        mView.animateFoldAppear();
+        mView.animateFoldAppear(true);
     }
 
     /**
@@ -197,20 +213,6 @@
     }
 
     /**
-     * Updates the timezone for the view.
-     */
-    public void onTimeZoneChanged(TimeZone timeZone) {
-        mView.onTimeZoneChanged(timeZone);
-    }
-
-    /**
-     * Trigger a time format update
-     */
-    public void refreshFormat() {
-        mView.refreshFormat();
-    }
-
-    /**
      * Return locallly stored dozing state.
      */
     @VisibleForTesting
diff --git a/packages/SystemUI/src/com/android/keyguard/AnimatableClockView.kt b/packages/SystemUI/src/com/android/keyguard/AnimatableClockView.kt
deleted file mode 100644
index e22386e..0000000
--- a/packages/SystemUI/src/com/android/keyguard/AnimatableClockView.kt
+++ /dev/null
@@ -1,394 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.keyguard
-
-import android.animation.TimeInterpolator
-import android.annotation.ColorInt
-import android.annotation.FloatRange
-import android.annotation.IntRange
-import android.annotation.SuppressLint
-import android.content.Context
-import android.graphics.Canvas
-import android.text.TextUtils
-import android.text.format.DateFormat
-import android.util.AttributeSet
-import android.widget.TextView
-import com.android.systemui.R
-import com.android.systemui.animation.Interpolators
-import com.android.systemui.statusbar.notification.stack.StackStateAnimator
-import java.io.PrintWriter
-import java.util.Calendar
-import java.util.Locale
-import java.util.TimeZone
-
-/**
- * Displays the time with the hour positioned above the minutes. (ie: 09 above 30 is 9:30)
- * The time's text color is a gradient that changes its colors based on its controller.
- */
-class AnimatableClockView @JvmOverloads constructor(
-    context: Context,
-    attrs: AttributeSet? = null,
-    defStyleAttr: Int = 0,
-    defStyleRes: Int = 0
-) : TextView(context, attrs, defStyleAttr, defStyleRes) {
-    private val tag = "AnimatableClockView"
-
-    private var lastMeasureCall: CharSequence = ""
-
-    private val time = Calendar.getInstance()
-
-    private val dozingWeightInternal: Int
-    private val lockScreenWeightInternal: Int
-    private val isSingleLineInternal: Boolean
-
-    private var format: CharSequence? = null
-    private var descFormat: CharSequence? = null
-
-    @ColorInt
-    private var dozingColor = 0
-
-    @ColorInt
-    private var lockScreenColor = 0
-
-    private var lineSpacingScale = 1f
-    private val chargeAnimationDelay: Int
-    private var textAnimator: TextAnimator? = null
-    private var onTextAnimatorInitialized: Runnable? = null
-
-    val dozingWeight: Int
-        get() = if (useBoldedVersion()) dozingWeightInternal + 100 else dozingWeightInternal
-
-    val lockScreenWeight: Int
-        get() = if (useBoldedVersion()) lockScreenWeightInternal + 100 else lockScreenWeightInternal
-
-    init {
-        val animatableClockViewAttributes = context.obtainStyledAttributes(
-            attrs, R.styleable.AnimatableClockView, defStyleAttr, defStyleRes
-        )
-
-        try {
-            dozingWeightInternal = animatableClockViewAttributes.getInt(
-                R.styleable.AnimatableClockView_dozeWeight,
-                100
-            )
-            lockScreenWeightInternal = animatableClockViewAttributes.getInt(
-                R.styleable.AnimatableClockView_lockScreenWeight,
-                300
-            )
-            chargeAnimationDelay = animatableClockViewAttributes.getInt(
-                R.styleable.AnimatableClockView_chargeAnimationDelay, 200
-            )
-        } finally {
-            animatableClockViewAttributes.recycle()
-        }
-
-        val textViewAttributes = context.obtainStyledAttributes(
-            attrs, android.R.styleable.TextView,
-            defStyleAttr, defStyleRes
-        )
-
-        isSingleLineInternal =
-            try {
-                textViewAttributes.getBoolean(android.R.styleable.TextView_singleLine, false)
-            } finally {
-                textViewAttributes.recycle()
-            }
-
-        refreshFormat()
-    }
-
-    override fun onAttachedToWindow() {
-        super.onAttachedToWindow()
-        refreshFormat()
-    }
-
-    /**
-     * Whether to use a bolded version based on the user specified fontWeightAdjustment.
-     */
-    fun useBoldedVersion(): Boolean {
-        // "Bold text" fontWeightAdjustment is 300.
-        return resources.configuration.fontWeightAdjustment > 100
-    }
-
-    fun refreshTime() {
-        time.timeInMillis = System.currentTimeMillis()
-        contentDescription = DateFormat.format(descFormat, time)
-        val formattedText = DateFormat.format(format, time)
-        // Setting text actually triggers a layout pass (because the text view is set to
-        // wrap_content width and TextView always relayouts for this). Avoid needless
-        // relayout if the text didn't actually change.
-        if (!TextUtils.equals(text, formattedText)) {
-            text = formattedText
-        }
-    }
-
-    fun onTimeZoneChanged(timeZone: TimeZone?) {
-        time.timeZone = timeZone
-        refreshFormat()
-    }
-
-    @SuppressLint("DrawAllocation")
-    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
-        super.onMeasure(widthMeasureSpec, heightMeasureSpec)
-        lastMeasureCall = DateFormat.format(descFormat, System.currentTimeMillis())
-        val animator = textAnimator
-        if (animator == null) {
-            textAnimator = TextAnimator(layout) { invalidate() }
-            onTextAnimatorInitialized?.run()
-            onTextAnimatorInitialized = null
-        } else {
-            animator.updateLayout(layout)
-        }
-    }
-
-    override fun onDraw(canvas: Canvas) {
-        // intentionally doesn't call super.onDraw here or else the text will be rendered twice
-        textAnimator?.draw(canvas)
-    }
-
-    fun setLineSpacingScale(scale: Float) {
-        lineSpacingScale = scale
-        setLineSpacing(0f, lineSpacingScale)
-    }
-
-    fun setColors(@ColorInt dozingColor: Int, lockScreenColor: Int) {
-        this.dozingColor = dozingColor
-        this.lockScreenColor = lockScreenColor
-    }
-
-    fun animateAppearOnLockscreen() {
-        if (textAnimator == null) {
-            return
-        }
-        setTextStyle(
-            weight = dozingWeight,
-            textSize = -1f,
-            color = lockScreenColor,
-            animate = false,
-            duration = 0,
-            delay = 0,
-            onAnimationEnd = null
-        )
-        setTextStyle(
-            weight = lockScreenWeight,
-            textSize = -1f,
-            color = lockScreenColor,
-            animate = true,
-            duration = APPEAR_ANIM_DURATION,
-            delay = 0,
-            onAnimationEnd = null
-        )
-    }
-
-    fun animateFoldAppear() {
-        if (textAnimator == null) {
-            return
-        }
-        setTextStyle(
-            weight = lockScreenWeightInternal,
-            textSize = -1f,
-            color = lockScreenColor,
-            animate = false,
-            duration = 0,
-            delay = 0,
-            onAnimationEnd = null
-        )
-        setTextStyle(
-            weight = dozingWeightInternal,
-            textSize = -1f,
-            color = dozingColor,
-            animate = true,
-            interpolator = Interpolators.EMPHASIZED_DECELERATE,
-            duration = StackStateAnimator.ANIMATION_DURATION_FOLD_TO_AOD.toLong(),
-            delay = 0,
-            onAnimationEnd = null
-        )
-    }
-
-    fun animateCharge(dozeStateGetter: DozeStateGetter) {
-        if (textAnimator == null || textAnimator!!.isRunning()) {
-            // Skip charge animation if dozing animation is already playing.
-            return
-        }
-        val startAnimPhase2 = Runnable {
-            setTextStyle(
-                weight = if (dozeStateGetter.isDozing) dozingWeight else lockScreenWeight,
-                textSize = -1f,
-                color = null,
-                animate = true,
-                duration = CHARGE_ANIM_DURATION_PHASE_1,
-                delay = 0,
-                onAnimationEnd = null
-            )
-        }
-        setTextStyle(
-            weight = if (dozeStateGetter.isDozing) lockScreenWeight else dozingWeight,
-            textSize = -1f,
-            color = null,
-            animate = true,
-            duration = CHARGE_ANIM_DURATION_PHASE_0,
-            delay = chargeAnimationDelay.toLong(),
-            onAnimationEnd = startAnimPhase2
-        )
-    }
-
-    fun animateDoze(isDozing: Boolean, animate: Boolean) {
-        setTextStyle(
-            weight = if (isDozing) dozingWeight else lockScreenWeight,
-            textSize = -1f,
-            color = if (isDozing) dozingColor else lockScreenColor,
-            animate = animate,
-            duration = DOZE_ANIM_DURATION,
-            delay = 0,
-            onAnimationEnd = null
-        )
-    }
-
-    /**
-     * Set text style with an optional animation.
-     *
-     * By passing -1 to weight, the view preserves its current weight.
-     * By passing -1 to textSize, the view preserves its current text size.
-     *
-     * @param weight text weight.
-     * @param textSize font size.
-     * @param animate true to animate the text style change, otherwise false.
-     */
-    private fun setTextStyle(
-        @IntRange(from = 0, to = 1000) weight: Int,
-        @FloatRange(from = 0.0) textSize: Float,
-        color: Int?,
-        animate: Boolean,
-        interpolator: TimeInterpolator?,
-        duration: Long,
-        delay: Long,
-        onAnimationEnd: Runnable?
-    ) {
-        if (textAnimator != null) {
-            textAnimator?.setTextStyle(
-                weight = weight,
-                textSize = textSize,
-                color = color,
-                animate = animate,
-                duration = duration,
-                interpolator = interpolator,
-                delay = delay,
-                onAnimationEnd = onAnimationEnd
-            )
-        } else {
-            // when the text animator is set, update its start values
-            onTextAnimatorInitialized = Runnable {
-                textAnimator?.setTextStyle(
-                    weight = weight,
-                    textSize = textSize,
-                    color = color,
-                    animate = false,
-                    duration = duration,
-                    interpolator = interpolator,
-                    delay = delay,
-                    onAnimationEnd = onAnimationEnd
-                )
-            }
-        }
-    }
-
-    private fun setTextStyle(
-        @IntRange(from = 0, to = 1000) weight: Int,
-        @FloatRange(from = 0.0) textSize: Float,
-        color: Int?,
-        animate: Boolean,
-        duration: Long,
-        delay: Long,
-        onAnimationEnd: Runnable?
-    ) {
-        setTextStyle(
-            weight = weight,
-            textSize = textSize,
-            color = color,
-            animate = animate,
-            interpolator = null,
-            duration = duration,
-            delay = delay,
-            onAnimationEnd = onAnimationEnd
-        )
-    }
-
-    fun refreshFormat() {
-        Patterns.update(context)
-        val use24HourFormat = DateFormat.is24HourFormat(context)
-
-        format = when {
-            isSingleLineInternal && use24HourFormat -> Patterns.sClockView24
-            !isSingleLineInternal && use24HourFormat -> DOUBLE_LINE_FORMAT_24_HOUR
-            isSingleLineInternal && !use24HourFormat -> Patterns.sClockView12
-            else -> DOUBLE_LINE_FORMAT_12_HOUR
-        }
-
-        descFormat = if (use24HourFormat) Patterns.sClockView24 else Patterns.sClockView12
-
-        refreshTime()
-    }
-
-    fun dump(pw: PrintWriter) {
-        pw.println("$this")
-        pw.println("    measuredWidth=$measuredWidth")
-        pw.println("    measuredHeight=$measuredHeight")
-        pw.println("    singleLineInternal=$isSingleLineInternal")
-        pw.println("    lastMeasureCall=$lastMeasureCall")
-        pw.println("    currText=$text")
-        pw.println("    currTimeContextDesc=$contentDescription")
-        pw.println("    time=$time")
-    }
-
-    // DateFormat.getBestDateTimePattern is extremely expensive, and refresh is called often.
-    // This is an optimization to ensure we only recompute the patterns when the inputs change.
-    private object Patterns {
-        var sClockView12: String? = null
-        var sClockView24: String? = null
-        var sCacheKey: String? = null
-
-        fun update(context: Context) {
-            val locale = Locale.getDefault()
-            val res = context.resources
-            val clockView12Skel = res.getString(R.string.clock_12hr_format)
-            val clockView24Skel = res.getString(R.string.clock_24hr_format)
-            val key = locale.toString() + clockView12Skel + clockView24Skel
-            if (key == sCacheKey) return
-
-            val clockView12 = DateFormat.getBestDateTimePattern(locale, clockView12Skel)
-            sClockView12 = clockView12
-
-            // CLDR insists on adding an AM/PM indicator even though it wasn't in the skeleton
-            // format.  The following code removes the AM/PM indicator if we didn't want it.
-            if (!clockView12Skel.contains("a")) {
-                sClockView12 = clockView12.replace("a".toRegex(), "").trim { it <= ' ' }
-            }
-            sClockView24 = DateFormat.getBestDateTimePattern(locale, clockView24Skel)
-            sCacheKey = key
-        }
-    }
-
-    interface DozeStateGetter {
-        val isDozing: Boolean
-    }
-}
-
-private const val DOUBLE_LINE_FORMAT_12_HOUR = "hh\nmm"
-private const val DOUBLE_LINE_FORMAT_24_HOUR = "HH\nmm"
-private const val DOZE_ANIM_DURATION: Long = 300
-private const val APPEAR_ANIM_DURATION: Long = 350
-private const val CHARGE_ANIM_DURATION_PHASE_0: Long = 500
-private const val CHARGE_ANIM_DURATION_PHASE_1: Long = 1000
diff --git a/packages/SystemUI/src/com/android/keyguard/EmergencyButtonController.java b/packages/SystemUI/src/com/android/keyguard/EmergencyButtonController.java
index f289105..c5190e8 100644
--- a/packages/SystemUI/src/com/android/keyguard/EmergencyButtonController.java
+++ b/packages/SystemUI/src/com/android/keyguard/EmergencyButtonController.java
@@ -35,7 +35,7 @@
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.keyguard.dagger.KeyguardBouncerScope;
-import com.android.systemui.statusbar.phone.ShadeController;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.statusbar.policy.ConfigurationController;
 import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
 import com.android.systemui.util.EmergencyDialerConstants;
diff --git a/packages/SystemUI/src/com/android/keyguard/FontInterpolator.kt b/packages/SystemUI/src/com/android/keyguard/FontInterpolator.kt
deleted file mode 100644
index 962c002..0000000
--- a/packages/SystemUI/src/com/android/keyguard/FontInterpolator.kt
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.keyguard
-
-import android.graphics.fonts.Font
-import android.graphics.fonts.FontVariationAxis
-import android.util.MathUtils
-
-private const val TAG_WGHT = "wght"
-private const val TAG_ITAL = "ital"
-
-private const val FONT_WEIGHT_MAX = 1000f
-private const val FONT_WEIGHT_MIN = 0f
-private const val FONT_WEIGHT_ANIMATION_STEP = 10f
-private const val FONT_WEIGHT_DEFAULT_VALUE = 400f
-
-private const val FONT_ITALIC_MAX = 1f
-private const val FONT_ITALIC_MIN = 0f
-private const val FONT_ITALIC_ANIMATION_STEP = 0.1f
-private const val FONT_ITALIC_DEFAULT_VALUE = 0f
-
-/**
- * Provide interpolation of two fonts by adjusting font variation settings.
- */
-class FontInterpolator {
-
-    /**
-     * Cache key for the interpolated font.
-     *
-     * This class is mutable for recycling.
-     */
-    private data class InterpKey(var l: Font?, var r: Font?, var progress: Float) {
-        fun set(l: Font, r: Font, progress: Float) {
-            this.l = l
-            this.r = r
-            this.progress = progress
-        }
-    }
-
-    /**
-     * Cache key for the font that has variable font.
-     *
-     * This class is mutable for recycling.
-     */
-    private data class VarFontKey(
-        var sourceId: Int,
-        var index: Int,
-        val sortedAxes: MutableList<FontVariationAxis>
-    ) {
-        constructor(font: Font, axes: List<FontVariationAxis>):
-                this(font.sourceIdentifier,
-                        font.ttcIndex,
-                        axes.toMutableList().apply { sortBy { it.tag } }
-                )
-
-        fun set(font: Font, axes: List<FontVariationAxis>) {
-            sourceId = font.sourceIdentifier
-            index = font.ttcIndex
-            sortedAxes.clear()
-            sortedAxes.addAll(axes)
-            sortedAxes.sortBy { it.tag }
-        }
-    }
-
-    // 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>()
-
-    // Mutable keys for recycling.
-    private val tmpInterpKey = InterpKey(null, null, 0f)
-    private val tmpVarFontKey = VarFontKey(0, 0, mutableListOf())
-
-    /**
-     * Linear interpolate the font variation settings.
-     */
-    fun lerp(start: Font, end: Font, progress: Float): Font {
-        if (progress == 0f) {
-            return start
-        } else if (progress == 1f) {
-            return end
-        }
-
-        val startAxes = start.axes ?: EMPTY_AXES
-        val endAxes = end.axes ?: EMPTY_AXES
-
-        if (startAxes.isEmpty() && endAxes.isEmpty()) {
-            return start
-        }
-
-        // Check we already know the result. This is commonly happens since we draws the different
-        // text chunks with the same font.
-        tmpInterpKey.set(start, end, progress)
-        val cachedFont = interpCache[tmpInterpKey]
-        if (cachedFont != null) {
-            return cachedFont
-        }
-
-        // General axes interpolation takes O(N log N), this is came from sorting the axes. Usually
-        // this doesn't take much time since the variation axes is usually up to 5. If we need to
-        // support more number of axes, we may want to preprocess the font and store the sorted axes
-        // and also pre-fill the missing axes value with default value from 'fvar' table.
-        val newAxes = lerp(startAxes, endAxes) { tag, startValue, endValue ->
-            when (tag) {
-                // TODO: Good to parse 'fvar' table for retrieving default value.
-                TAG_WGHT -> adjustWeight(
-                        MathUtils.lerp(
-                                startValue ?: FONT_WEIGHT_DEFAULT_VALUE,
-                                endValue ?: FONT_WEIGHT_DEFAULT_VALUE,
-                                progress))
-                TAG_ITAL -> adjustItalic(
-                        MathUtils.lerp(
-                                startValue ?: FONT_ITALIC_DEFAULT_VALUE,
-                                endValue ?: FONT_ITALIC_DEFAULT_VALUE,
-                                progress))
-                else -> {
-                    require(startValue != null && endValue != null) {
-                        "Unable to interpolate due to unknown default axes value : $tag"
-                    }
-                    MathUtils.lerp(startValue, endValue, progress)
-                }
-            }
-        }
-
-        // Check if we already make font for this axes. This is typically happens if the animation
-        // happens backward.
-        tmpVarFontKey.set(start, newAxes)
-        val axesCachedFont = verFontCache[tmpVarFontKey]
-        if (axesCachedFont != null) {
-            interpCache[InterpKey(start, end, progress)] = axesCachedFont
-            return axesCachedFont
-        }
-
-        // This is the first time to make the font for the axes. Build and store it to the cache.
-        // 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
-        return newFont
-    }
-
-    private fun lerp(
-        start: Array<FontVariationAxis>,
-        end: Array<FontVariationAxis>,
-        filter: (tag: String, left: Float?, right: Float?) -> Float
-    ): List<FontVariationAxis> {
-        // Safe to modify result of Font#getAxes since it returns cloned object.
-        start.sortBy { axis -> axis.tag }
-        end.sortBy { axis -> axis.tag }
-
-        val result = mutableListOf<FontVariationAxis>()
-        var i = 0
-        var j = 0
-        while (i < start.size || j < end.size) {
-            val tagA = if (i < start.size) start[i].tag else null
-            val tagB = if (j < end.size) end[j].tag else null
-
-            val comp = when {
-                tagA == null -> 1
-                tagB == null -> -1
-                else -> tagA.compareTo(tagB)
-            }
-
-            val axis = when {
-                comp == 0 -> {
-                    val v = filter(tagA!!, start[i++].styleValue, end[j++].styleValue)
-                    FontVariationAxis(tagA, v)
-                }
-                comp < 0 -> {
-                    val v = filter(tagA!!, start[i++].styleValue, null)
-                    FontVariationAxis(tagA, v)
-                }
-                else -> { // comp > 0
-                    val v = filter(tagB!!, null, end[j++].styleValue)
-                    FontVariationAxis(tagB, v)
-                }
-            }
-
-            result.add(axis)
-        }
-        return result
-    }
-
-    // For the performance reasons, we animate weight with FONT_WEIGHT_ANIMATION_STEP. This helps
-    // Cache hit ratio in the Skia glyph cache.
-    private fun adjustWeight(value: Float) =
-            coerceInWithStep(value, FONT_WEIGHT_MIN, FONT_WEIGHT_MAX, FONT_WEIGHT_ANIMATION_STEP)
-
-    // For the performance reasons, we animate italic with FONT_ITALIC_ANIMATION_STEP. This helps
-    // Cache hit ratio in the Skia glyph cache.
-    private fun adjustItalic(value: Float) =
-            coerceInWithStep(value, FONT_ITALIC_MIN, FONT_ITALIC_MAX, FONT_ITALIC_ANIMATION_STEP)
-
-    private fun coerceInWithStep(v: Float, min: Float, max: Float, step: Float) =
-            (v.coerceIn(min, max) / step).toInt() * step
-
-    companion object {
-        private val EMPTY_AXES = arrayOf<FontVariationAxis>()
-
-        // Returns true if given two font instance can be interpolated.
-        fun canInterpolate(start: Font, end: Font) =
-                start.ttcIndex == end.ttcIndex && start.sourceIdentifier == end.sourceIdentifier
-    }
-}
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java
index eb418ff..b8fcb10 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java
@@ -179,7 +179,7 @@
             if (dismissKeyguard) {
                 mDismissing = true;
                 mLatencyTracker.onActionStart(LatencyTracker.ACTION_LOCKSCREEN_UNLOCK);
-                getKeyguardSecurityCallback().dismiss(true, userId);
+                getKeyguardSecurityCallback().dismiss(true, userId, getSecurityMode());
             }
         } else {
             if (isValidPassword) {
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java
index 40edfe5..206b8be 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitch.java
@@ -22,6 +22,7 @@
 import com.android.systemui.R;
 import com.android.systemui.animation.Interpolators;
 import com.android.systemui.plugins.ClockPlugin;
+import com.android.systemui.shared.clocks.AnimatableClockView;
 
 import java.io.PrintWriter;
 import java.lang.annotation.Retention;
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java
index 5c9dd5e..ad06e05 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java
@@ -44,6 +44,8 @@
 import com.android.systemui.colorextraction.SysuiColorExtractor;
 import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.dump.DumpManager;
+import com.android.systemui.flags.FeatureFlags;
+import com.android.systemui.flags.Flags;
 import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
 import com.android.systemui.plugins.ClockPlugin;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
@@ -398,17 +400,6 @@
 
     void updateTimeZone(TimeZone timeZone) {
         mView.onTimeZoneChanged(timeZone);
-        if (mClockViewController != null) {
-            mClockViewController.onTimeZoneChanged(timeZone);
-            mLargeClockViewController.onTimeZoneChanged(timeZone);
-        }
-    }
-
-    void refreshFormat() {
-        if (mClockViewController != null) {
-            mClockViewController.refreshFormat();
-            mLargeClockViewController.refreshFormat();
-        }
     }
 
     /**
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardHostViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardHostViewController.java
index 12fa401..db64f05 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardHostViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardHostViewController.java
@@ -90,7 +90,7 @@
                                 Log.i(TAG, "TrustAgent dismissed Keyguard.");
                             }
                             mSecurityCallback.dismiss(false /* authenticated */, userId,
-                                    /* bypassSecondaryLockScreen */ false);
+                                    /* bypassSecondaryLockScreen */ false, SecurityMode.Invalid);
                         } else {
                             mViewMediatorCallback.playTrustedSound();
                         }
@@ -102,9 +102,9 @@
 
         @Override
         public boolean dismiss(boolean authenticated, int targetUserId,
-                boolean bypassSecondaryLockScreen) {
+                boolean bypassSecondaryLockScreen, SecurityMode expectedSecurityMode) {
             return mKeyguardSecurityContainerController.showNextSecurityScreenOrFinish(
-                    authenticated, targetUserId, bypassSecondaryLockScreen);
+                    authenticated, targetUserId, bypassSecondaryLockScreen, expectedSecurityMode);
         }
 
         @Override
@@ -212,7 +212,8 @@
      * @return True if the keyguard is done.
      */
     public boolean dismiss(int targetUserId) {
-        return mSecurityCallback.dismiss(false, targetUserId, false);
+        return mSecurityCallback.dismiss(false, targetUserId, false,
+                getCurrentSecurityMode());
     }
 
     /**
@@ -336,6 +337,11 @@
         mKeyguardSecurityContainerController.onStartingToHide();
     }
 
+    /** Called when bouncer visibility changes. */
+    public void onBouncerVisibilityChanged(@View.Visibility int visibility) {
+        mKeyguardSecurityContainerController.onBouncerVisibilityChanged(visibility);
+    }
+
     public boolean hasDismissActions() {
         return mDismissAction != null || mCancelAction != null;
     }
@@ -355,10 +361,10 @@
     }
 
     public boolean handleBackKey() {
-        if (mKeyguardSecurityContainerController.getCurrentSecurityMode()
-                != SecurityMode.None) {
+        SecurityMode securityMode = mKeyguardSecurityContainerController.getCurrentSecurityMode();
+        if (securityMode != SecurityMode.None) {
             mKeyguardSecurityContainerController.dismiss(
-                    false, KeyguardUpdateMonitor.getCurrentUser());
+                    false, KeyguardUpdateMonitor.getCurrentUser(), securityMode);
             return true;
         }
         return false;
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java
index 98ac640..87300c3 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardInputViewController.java
@@ -59,10 +59,11 @@
             return false;
         }
         @Override
-        public void dismiss(boolean securityVerified, int targetUserId) { }
+        public void dismiss(boolean securityVerified, int targetUserId,
+                SecurityMode expectedSecurityMode) { }
         @Override
         public void dismiss(boolean authenticated, int targetId,
-                boolean bypassSecondaryLockScreen) { }
+                boolean bypassSecondaryLockScreen, SecurityMode expectedSecurityMode) { }
         @Override
         public void onUserInput() { }
         @Override
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardListenModel.kt b/packages/SystemUI/src/com/android/keyguard/KeyguardListenModel.kt
index db2b4ac..0ea1965 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardListenModel.kt
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardListenModel.kt
@@ -55,11 +55,11 @@
     val faceAuthenticated: Boolean,
     val faceDisabled: Boolean,
     val goingToSleep: Boolean,
-    val keyguardAwake: Boolean,
+    val keyguardAwakeExcludingBouncerShowing: Boolean,
     val keyguardGoingAway: Boolean,
     val listeningForFaceAssistant: Boolean,
-    val lockIconPressed: Boolean,
     val occludingAppRequestingFaceAuth: Boolean,
+    val onlyFaceEnrolled: Boolean,
     val primaryUser: Boolean,
     val scanningAllowedByStrongAuth: Boolean,
     val secureCameraLaunched: Boolean,
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardMessageAreaController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardMessageAreaController.java
index 81cc3a9..3ec8ce9 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardMessageAreaController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardMessageAreaController.java
@@ -18,6 +18,7 @@
 
 import android.content.res.ColorStateList;
 import android.content.res.Configuration;
+import android.text.TextUtils;
 
 import com.android.systemui.statusbar.policy.ConfigurationController;
 import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
@@ -103,6 +104,15 @@
         mView.setMessage(resId);
     }
 
+    /**
+     * Set Text if KeyguardMessageArea is empty.
+     */
+    public void setMessageIfEmpty(int resId) {
+        if (TextUtils.isEmpty(mView.getText())) {
+            setMessage(resId);
+        }
+    }
+
     public void setNextMessageColor(ColorStateList colorState) {
         mView.setNextMessageColor(colorState);
     }
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordViewController.java
index bfacc59..29e912f 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPasswordViewController.java
@@ -207,6 +207,7 @@
         if (reason != KeyguardSecurityView.SCREEN_ON || mShowImeAtScreenOn) {
             showInput();
         }
+        mMessageAreaController.setMessageIfEmpty(R.string.keyguard_enter_your_password);
     }
 
     private void showInput() {
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java
index 39c3949..9aa6f03 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java
@@ -171,7 +171,7 @@
                 if (dismissKeyguard) {
                     mLockPatternView.setDisplayMode(LockPatternView.DisplayMode.Correct);
                     mLatencyTracker.onActionStart(LatencyTracker.ACTION_LOCKSCREEN_UNLOCK);
-                    getKeyguardSecurityCallback().dismiss(true, userId);
+                    getKeyguardSecurityCallback().dismiss(true, userId, SecurityMode.Pattern);
                 }
             } else {
                 mLockPatternView.setDisplayMode(LockPatternView.DisplayMode.Wrong);
@@ -304,6 +304,12 @@
     }
 
     @Override
+    public void onResume(int reason) {
+        super.onResume(reason);
+        mMessageAreaController.setMessageIfEmpty(R.string.keyguard_enter_your_pattern);
+    }
+
+    @Override
     public boolean needsInput() {
         return false;
     }
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputViewController.java
index f7423ed..59a018a 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPinBasedInputViewController.java
@@ -127,6 +127,7 @@
     public void onResume(int reason) {
         super.onResume(reason);
         mPasswordEntry.requestFocus();
+        mMessageAreaController.setMessageIfEmpty(R.string.keyguard_enter_your_pin);
     }
 
     @Override
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityCallback.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityCallback.java
index e384727..bc72f79 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityCallback.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityCallback.java
@@ -15,14 +15,17 @@
  */
 package com.android.keyguard;
 
+import com.android.keyguard.KeyguardSecurityModel.SecurityMode;
+
 public interface KeyguardSecurityCallback {
 
     /**
      * Dismiss the given security screen.
      * @param securityVerified true if the user correctly entered credentials for the given screen.
      * @param targetUserId a user that needs to be the foreground user at the dismissal completion.
+     * @param expectedSecurityMode The security mode that is invoking this dismiss.
      */
-    void dismiss(boolean securityVerified, int targetUserId);
+    void dismiss(boolean securityVerified, int targetUserId, SecurityMode expectedSecurityMode);
 
     /**
      * Dismiss the given security screen.
@@ -30,8 +33,10 @@
      * @param targetUserId a user that needs to be the foreground user at the dismissal completion.
      * @param bypassSecondaryLockScreen true if the user can bypass the secondary lock screen,
      *                                  if any, during this dismissal.
+     * @param expectedSecurityMode The security mode that is invoking this dismiss.
      */
-    void dismiss(boolean securityVerified, int targetUserId, boolean bypassSecondaryLockScreen);
+    void dismiss(boolean securityVerified, int targetUserId, boolean bypassSecondaryLockScreen,
+            SecurityMode expectedSecurityMode);
 
     /**
      * Manually report user activity to keep the device awake.
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
index cce516d..f697e25 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
@@ -50,6 +50,7 @@
 import android.util.Log;
 import android.util.MathUtils;
 import android.util.TypedValue;
+import android.view.GestureDetector;
 import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
@@ -93,6 +94,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.Consumer;
 
 public class KeyguardSecurityContainer extends FrameLayout {
     static final int USER_TYPE_PRIMARY = 1;
@@ -127,12 +129,12 @@
 
     private static final long IME_DISAPPEAR_DURATION_MS = 125;
 
-    // The duration of the animation to switch bouncer sides.
-    private static final long BOUNCER_HANDEDNESS_ANIMATION_DURATION_MS = 500;
+    // The duration of the animation to switch security sides.
+    private static final long SECURITY_SHIFT_ANIMATION_DURATION_MS = 500;
 
-    // How much of the switch sides animation should be dedicated to fading the bouncer out. The
+    // How much of the switch sides animation should be dedicated to fading the security out. The
     // remainder will fade it back in again.
-    private static final float BOUNCER_HANDEDNESS_ANIMATION_FADE_OUT_PROPORTION = 0.2f;
+    private static final float SECURITY_SHIFT_ANIMATION_FADE_OUT_PROPORTION = 0.2f;
 
     @VisibleForTesting
     KeyguardSecurityViewFlipper mSecurityViewFlipper;
@@ -146,6 +148,7 @@
     private final SpringAnimation mSpringAnimation;
     private final VelocityTracker mVelocityTracker = VelocityTracker.obtain();
     private final List<Gefingerpoken> mMotionEventListeners = new ArrayList<>();
+    private final GestureDetector mDoubleTapDetector;
 
     private float mLastTouchY = -1;
     private int mActivePointerId = -1;
@@ -233,7 +236,12 @@
 
     // Used to notify the container when something interesting happens.
     public interface SecurityCallback {
-        boolean dismiss(boolean authenticated, int targetUserId, boolean bypassSecondaryLockScreen);
+        /**
+         * Potentially dismiss the current security screen, after validating that all device
+         * security has been unlocked. Otherwise show the next screen.
+         */
+        boolean dismiss(boolean authenticated, int targetUserId, boolean bypassSecondaryLockScreen,
+                SecurityMode expectedSecurityMode);
 
         void userActivity();
 
@@ -305,6 +313,7 @@
         super(context, attrs, defStyle);
         mSpringAnimation = new SpringAnimation(this, DynamicAnimation.Y);
         mViewConfiguration = ViewConfiguration.get(context);
+        mDoubleTapDetector = new GestureDetector(context, new DoubleTapListener());
     }
 
     void onResume(SecurityMode securityMode, boolean faceAuthEnabled) {
@@ -372,10 +381,23 @@
         mViewMode.updatePositionByTouchX(x);
     }
 
-    /** Returns whether the inner SecurityViewFlipper is left-aligned when in one-handed mode. */
-    public boolean isOneHandedModeLeftAligned() {
-        return mCurrentMode == MODE_ONE_HANDED
-                && ((OneHandedViewMode) mViewMode).isLeftAligned();
+    public boolean isSidedSecurityMode() {
+        return mViewMode instanceof SidedSecurityMode;
+    }
+
+    /** Returns whether the inner SecurityViewFlipper is left-aligned when in sided mode. */
+    public boolean isSecurityLeftAligned() {
+        return mViewMode instanceof SidedSecurityMode
+                && ((SidedSecurityMode) mViewMode).isLeftAligned();
+    }
+
+    /**
+     * Returns whether the touch happened on the other side of security (like bouncer) when in
+     * sided mode.
+     */
+    public boolean isTouchOnTheOtherSideOfSecurity(MotionEvent ev) {
+        return mViewMode instanceof SidedSecurityMode
+                && ((SidedSecurityMode) mViewMode).isTouchOnTheOtherSideOfSecurity(ev);
     }
 
     public void onPause() {
@@ -439,6 +461,10 @@
                 .anyMatch(listener -> listener.onTouchEvent(event))
                 || super.onTouchEvent(event);
 
+        // double tap detector should be called after listeners handle touches as listeners are
+        // helping with ignoring falsing. Otherwise falsing will be activated for some double taps
+        mDoubleTapDetector.onTouchEvent(event);
+
         switch (action) {
             case MotionEvent.ACTION_MOVE:
                 mVelocityTracker.addMovement(event);
@@ -475,15 +501,26 @@
                 if (mSwipeListener != null) {
                     mSwipeListener.onSwipeUp();
                 }
-            } else {
-                if (!mIsDragging) {
-                    mViewMode.handleTap(event);
-                }
             }
         }
         return true;
     }
 
+    private class DoubleTapListener extends GestureDetector.SimpleOnGestureListener {
+        @Override
+        public boolean onDoubleTap(MotionEvent e) {
+            return handleDoubleTap(e);
+        }
+    }
+
+    @VisibleForTesting boolean handleDoubleTap(MotionEvent e) {
+        if (!mIsDragging) {
+            mViewMode.handleDoubleTap(e);
+            return true;
+        }
+        return false;
+    }
+
     void addMotionEventListener(Gefingerpoken listener) {
         mMotionEventListeners.add(listener);
     }
@@ -736,8 +773,8 @@
         /** Alter the ViewFlipper position, based upon a touch outside of it */
         default void updatePositionByTouchX(float x) {};
 
-        /** A tap on the container, outside of the ViewFlipper */
-        default void handleTap(MotionEvent event) {};
+        /** A double tap on the container, outside of the ViewFlipper */
+        default void handleDoubleTap(MotionEvent event) {};
 
         /** Called when the view needs to reset or hides */
         default void reset() {};
@@ -761,6 +798,195 @@
     }
 
     /**
+     * Base class for modes which support having on left/right side of the screen, used for large
+     * screen devices
+     */
+    abstract static class SidedSecurityMode implements ViewMode {
+        @Nullable private ValueAnimator mRunningSecurityShiftAnimator;
+        private KeyguardSecurityViewFlipper mViewFlipper;
+        private ViewGroup mView;
+        private GlobalSettings mGlobalSettings;
+        private int mDefaultSideSetting;
+
+        public void init(ViewGroup v, KeyguardSecurityViewFlipper viewFlipper,
+                GlobalSettings globalSettings, boolean leftAlignedByDefault) {
+            mView = v;
+            mViewFlipper = viewFlipper;
+            mGlobalSettings = globalSettings;
+            mDefaultSideSetting =
+                    leftAlignedByDefault ? Settings.Global.ONE_HANDED_KEYGUARD_SIDE_LEFT
+                            : Settings.Global.ONE_HANDED_KEYGUARD_SIDE_RIGHT;
+        }
+
+        /**
+         * Determine if a double tap on this view is on the other side. If so, will animate
+         * positions and record the preference to always show on this side.
+         */
+        @Override
+        public void handleDoubleTap(MotionEvent event) {
+            boolean currentlyLeftAligned = isLeftAligned();
+            // Did the tap hit the "other" side of the bouncer?
+            if (isTouchOnTheOtherSideOfSecurity(event, currentlyLeftAligned)) {
+                boolean willBeLeftAligned = !currentlyLeftAligned;
+                updateSideSetting(willBeLeftAligned);
+
+                int keyguardState = willBeLeftAligned
+                        ? SysUiStatsLog.KEYGUARD_BOUNCER_STATE_CHANGED__STATE__SWITCH_LEFT
+                        : SysUiStatsLog.KEYGUARD_BOUNCER_STATE_CHANGED__STATE__SWITCH_RIGHT;
+                SysUiStatsLog.write(SysUiStatsLog.KEYGUARD_BOUNCER_STATE_CHANGED, keyguardState);
+
+                updateSecurityViewLocation(willBeLeftAligned, /* animate= */ true);
+            }
+        }
+
+        private boolean isTouchOnTheOtherSideOfSecurity(MotionEvent ev, boolean leftAligned) {
+            float x = ev.getX();
+            return (leftAligned && (x > mView.getWidth() / 2f))
+                    || (!leftAligned && (x < mView.getWidth() / 2f));
+        }
+
+        public boolean isTouchOnTheOtherSideOfSecurity(MotionEvent ev) {
+            return isTouchOnTheOtherSideOfSecurity(ev, isLeftAligned());
+        }
+
+        protected abstract void updateSecurityViewLocation(boolean leftAlign, boolean animate);
+
+        protected void translateSecurityViewLocation(boolean leftAlign, boolean animate) {
+            translateSecurityViewLocation(leftAlign, animate, i -> {});
+        }
+
+        /**
+         * Moves the inner security view to the correct location with animation. This is triggered
+         * when the user double taps on the side of the screen that is not currently occupied by
+         * the security view.
+         */
+        protected void translateSecurityViewLocation(boolean leftAlign, boolean animate,
+                Consumer<Float> securityAlphaListener) {
+            if (mRunningSecurityShiftAnimator != null) {
+                mRunningSecurityShiftAnimator.cancel();
+                mRunningSecurityShiftAnimator = null;
+            }
+
+            int targetTranslation = leftAlign
+                    ? 0 : mView.getMeasuredWidth() - mViewFlipper.getWidth();
+
+            if (animate) {
+                // This animation is a bit fun to implement. The bouncer needs to move, and fade
+                // in/out at the same time. The issue is, the bouncer should only move a short
+                // amount (120dp or so), but obviously needs to go from one side of the screen to
+                // the other. This needs a pretty custom animation.
+                //
+                // This works as follows. It uses a ValueAnimation to simply drive the animation
+                // progress. This animator is responsible for both the translation of the bouncer,
+                // and the current fade. It will fade the bouncer out while also moving it along the
+                // 120dp path. Once the bouncer is fully faded out though, it will "snap" the
+                // bouncer closer to its destination, then fade it back in again. The effect is that
+                // the bouncer will move from 0 -> X while fading out, then
+                // (destination - X) -> destination while fading back in again.
+                // TODO(b/208250221): Make this animation properly abortable.
+                Interpolator positionInterpolator = AnimationUtils.loadInterpolator(
+                        mView.getContext(), android.R.interpolator.fast_out_extra_slow_in);
+                Interpolator fadeOutInterpolator = Interpolators.FAST_OUT_LINEAR_IN;
+                Interpolator fadeInInterpolator = Interpolators.LINEAR_OUT_SLOW_IN;
+
+                mRunningSecurityShiftAnimator = ValueAnimator.ofFloat(0.0f, 1.0f);
+                mRunningSecurityShiftAnimator.setDuration(SECURITY_SHIFT_ANIMATION_DURATION_MS);
+                mRunningSecurityShiftAnimator.setInterpolator(Interpolators.LINEAR);
+
+                int initialTranslation = (int) mViewFlipper.getTranslationX();
+                int totalTranslation = (int) mView.getResources().getDimension(
+                        R.dimen.security_shift_animation_translation);
+
+                final boolean shouldRestoreLayerType = mViewFlipper.hasOverlappingRendering()
+                        && mViewFlipper.getLayerType() != View.LAYER_TYPE_HARDWARE;
+                if (shouldRestoreLayerType) {
+                    mViewFlipper.setLayerType(View.LAYER_TYPE_HARDWARE, /* paint= */null);
+                }
+
+                float initialAlpha = mViewFlipper.getAlpha();
+
+                mRunningSecurityShiftAnimator.addListener(new AnimatorListenerAdapter() {
+                    @Override
+                    public void onAnimationEnd(Animator animation) {
+                        mRunningSecurityShiftAnimator = null;
+                    }
+                });
+                mRunningSecurityShiftAnimator.addUpdateListener(animation -> {
+                    float switchPoint = SECURITY_SHIFT_ANIMATION_FADE_OUT_PROPORTION;
+                    boolean isFadingOut = animation.getAnimatedFraction() < switchPoint;
+
+                    int currentTranslation = (int) (positionInterpolator.getInterpolation(
+                            animation.getAnimatedFraction()) * totalTranslation);
+                    int translationRemaining = totalTranslation - currentTranslation;
+
+                    // Flip the sign if we're going from right to left.
+                    if (leftAlign) {
+                        currentTranslation = -currentTranslation;
+                        translationRemaining = -translationRemaining;
+                    }
+
+                    float opacity;
+                    if (isFadingOut) {
+                        // The bouncer fades out over the first X%.
+                        float fadeOutFraction = MathUtils.constrainedMap(
+                                /* rangeMin= */1.0f,
+                                /* rangeMax= */0.0f,
+                                /* valueMin= */0.0f,
+                                /* valueMax= */switchPoint,
+                                animation.getAnimatedFraction());
+                        opacity = fadeOutInterpolator.getInterpolation(fadeOutFraction);
+
+                        // When fading out, the alpha needs to start from the initial opacity of the
+                        // view flipper, otherwise we get a weird bit of jank as it ramps back to
+                        // 100%.
+                        mViewFlipper.setAlpha(opacity * initialAlpha);
+
+                        // Animate away from the source.
+                        mViewFlipper.setTranslationX(initialTranslation + currentTranslation);
+                    } else {
+                        // And in again over the remaining (100-X)%.
+                        float fadeInFraction = MathUtils.constrainedMap(
+                                /* rangeMin= */0.0f,
+                                /* rangeMax= */1.0f,
+                                /* valueMin= */switchPoint,
+                                /* valueMax= */1.0f,
+                                animation.getAnimatedFraction());
+
+                        opacity = fadeInInterpolator.getInterpolation(fadeInFraction);
+                        mViewFlipper.setAlpha(opacity);
+
+                        // Fading back in, animate towards the destination.
+                        mViewFlipper.setTranslationX(targetTranslation - translationRemaining);
+                    }
+                    securityAlphaListener.accept(opacity);
+
+                    if (animation.getAnimatedFraction() == 1.0f && shouldRestoreLayerType) {
+                        mViewFlipper.setLayerType(View.LAYER_TYPE_NONE, /* paint= */null);
+                    }
+                });
+
+                mRunningSecurityShiftAnimator.start();
+            } else {
+                mViewFlipper.setTranslationX(targetTranslation);
+            }
+        }
+
+
+        boolean isLeftAligned() {
+            return mGlobalSettings.getInt(Settings.Global.ONE_HANDED_KEYGUARD_SIDE,
+                    mDefaultSideSetting)
+                    == Settings.Global.ONE_HANDED_KEYGUARD_SIDE_LEFT;
+        }
+
+        protected void updateSideSetting(boolean leftAligned) {
+            mGlobalSettings.putInt(
+                    Settings.Global.ONE_HANDED_KEYGUARD_SIDE,
+                    leftAligned ? Settings.Global.ONE_HANDED_KEYGUARD_SIDE_LEFT
+                            : Settings.Global.ONE_HANDED_KEYGUARD_SIDE_RIGHT);
+        }
+    }
+
+    /**
      * Default bouncer is centered within the space
      */
     static class DefaultViewMode implements ViewMode {
@@ -792,7 +1018,7 @@
      * User switcher mode will display both the current user icon as well as
      * a user switcher, in both portrait and landscape modes.
      */
-    static class UserSwitcherViewMode implements ViewMode {
+    static class UserSwitcherViewMode extends SidedSecurityMode {
         private ViewGroup mView;
         private ViewGroup mUserSwitcherViewGroup;
         private KeyguardSecurityViewFlipper mViewFlipper;
@@ -804,11 +1030,15 @@
         private UserSwitcherController.UserSwitchCallback mUserSwitchCallback =
                 this::setupUserSwitcher;
 
+        private float mAnimationLastAlpha = 1f;
+        private boolean mAnimationWaitsToShift = true;
+
         @Override
         public void init(@NonNull ViewGroup v, @NonNull GlobalSettings globalSettings,
                 @NonNull KeyguardSecurityViewFlipper viewFlipper,
                 @NonNull FalsingManager falsingManager,
                 @NonNull UserSwitcherController userSwitcherController) {
+            init(v, viewFlipper, globalSettings, /* leftAlignedByDefault= */false);
             mView = v;
             mViewFlipper = viewFlipper;
             mFalsingManager = falsingManager;
@@ -822,9 +1052,7 @@
                         true);
                 mUserSwitcherViewGroup =  mView.findViewById(R.id.keyguard_bouncer_user_switcher);
             }
-
             updateSecurityViewLocation();
-
             mUserSwitcher = mView.findViewById(R.id.user_switcher_header);
             setupUserSwitcher();
             mUserSwitcherController.addUserSwitchCallback(mUserSwitchCallback);
@@ -1020,18 +1248,65 @@
 
         @Override
         public void updateSecurityViewLocation() {
-            int yTrans = mResources.getDimensionPixelSize(R.dimen.bouncer_user_switcher_y_trans);
+            updateSecurityViewLocation(isLeftAligned(), /* animate= */false);
+        }
 
+        public void updateSecurityViewLocation(boolean leftAlign, boolean animate) {
+            setYTranslation();
+            setGravity();
+            setXTranslation(leftAlign, animate);
+        }
+
+        private void setXTranslation(boolean leftAlign, boolean animate) {
             if (mResources.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
-                updateViewGravity(mViewFlipper, Gravity.CENTER_HORIZONTAL);
-                updateViewGravity(mUserSwitcherViewGroup, Gravity.CENTER_HORIZONTAL);
+                mUserSwitcherViewGroup.setTranslationX(0);
+                mViewFlipper.setTranslationX(0);
+            } else {
+                int switcherTargetTranslation = leftAlign
+                        ? mView.getMeasuredWidth() - mViewFlipper.getWidth() : 0;
+                if (animate) {
+                    mAnimationWaitsToShift = true;
+                    mAnimationLastAlpha = 1f;
+                    translateSecurityViewLocation(leftAlign, animate, securityAlpha -> {
+                        // During the animation security view fades out - alpha goes from 1 to
+                        // (almost) 0 - and then fades in - alpha grows back to 1.
+                        // If new alpha is bigger than previous one it means we're at inflection
+                        // point and alpha is zero or almost zero. That's when we want to do
+                        // translation of user switcher, so that it's not visible to the user.
+                        boolean fullyFadeOut = securityAlpha == 0.0f
+                                || securityAlpha > mAnimationLastAlpha;
+                        if (fullyFadeOut && mAnimationWaitsToShift) {
+                            mUserSwitcherViewGroup.setTranslationX(switcherTargetTranslation);
+                            mAnimationWaitsToShift = false;
+                        }
+                        mUserSwitcherViewGroup.setAlpha(securityAlpha);
+                        mAnimationLastAlpha = securityAlpha;
+                    });
+                } else {
+                    translateSecurityViewLocation(leftAlign, animate);
+                    mUserSwitcherViewGroup.setTranslationX(switcherTargetTranslation);
+                }
+            }
 
+        }
+
+        private void setGravity() {
+            if (mResources.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
+                updateViewGravity(mUserSwitcherViewGroup, Gravity.CENTER_HORIZONTAL);
+                updateViewGravity(mViewFlipper, Gravity.CENTER_HORIZONTAL);
+            } else {
+                // horizontal gravity is the same because we translate these views anyway
+                updateViewGravity(mViewFlipper, Gravity.LEFT | Gravity.BOTTOM);
+                updateViewGravity(mUserSwitcherViewGroup, Gravity.LEFT | Gravity.CENTER_VERTICAL);
+            }
+        }
+
+        private void setYTranslation() {
+            int yTrans = mResources.getDimensionPixelSize(R.dimen.bouncer_user_switcher_y_trans);
+            if (mResources.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
                 mUserSwitcherViewGroup.setTranslationY(yTrans);
                 mViewFlipper.setTranslationY(-yTrans);
             } else {
-                updateViewGravity(mViewFlipper, Gravity.RIGHT | Gravity.BOTTOM);
-                updateViewGravity(mUserSwitcherViewGroup, Gravity.LEFT | Gravity.CENTER_VERTICAL);
-
                 // Attempt to reposition a bit higher to make up for this frame being a bit lower
                 // on the device
                 mUserSwitcherViewGroup.setTranslationY(-yTrans);
@@ -1050,20 +1325,18 @@
      * Logic to enabled one-handed bouncer mode. Supports animating the bouncer
      * between alternate sides of the display.
      */
-    static class OneHandedViewMode implements ViewMode {
-        @Nullable private ValueAnimator mRunningOneHandedAnimator;
+    static class OneHandedViewMode extends SidedSecurityMode {
         private ViewGroup mView;
         private KeyguardSecurityViewFlipper mViewFlipper;
-        private GlobalSettings mGlobalSettings;
 
         @Override
         public void init(@NonNull ViewGroup v, @NonNull GlobalSettings globalSettings,
                 @NonNull KeyguardSecurityViewFlipper viewFlipper,
                 @NonNull FalsingManager falsingManager,
                 @NonNull UserSwitcherController userSwitcherController) {
+            init(v, viewFlipper, globalSettings, /* leftAlignedByDefault= */true);
             mView = v;
             mViewFlipper = viewFlipper;
-            mGlobalSettings = globalSettings;
 
             updateSecurityViewGravity();
             updateSecurityViewLocation(isLeftAligned(), /* animate= */false);
@@ -1097,159 +1370,13 @@
             updateSecurityViewLocation(isTouchOnLeft, /* animate= */false);
         }
 
-        boolean isLeftAligned() {
-            return mGlobalSettings.getInt(Settings.Global.ONE_HANDED_KEYGUARD_SIDE,
-                    Settings.Global.ONE_HANDED_KEYGUARD_SIDE_LEFT)
-                == Settings.Global.ONE_HANDED_KEYGUARD_SIDE_LEFT;
-        }
-
-        private void updateSideSetting(boolean leftAligned) {
-            mGlobalSettings.putInt(
-                    Settings.Global.ONE_HANDED_KEYGUARD_SIDE,
-                    leftAligned ? Settings.Global.ONE_HANDED_KEYGUARD_SIDE_LEFT
-                    : Settings.Global.ONE_HANDED_KEYGUARD_SIDE_RIGHT);
-        }
-
-        /**
-         * Determine if a tap on this view is on the other side. If so, will animate positions
-         * and record the preference to always show on this side.
-         */
-        @Override
-        public void handleTap(MotionEvent event) {
-            float x = event.getX();
-            boolean currentlyLeftAligned = isLeftAligned();
-            // Did the tap hit the "other" side of the bouncer?
-            if ((currentlyLeftAligned && (x > mView.getWidth() / 2f))
-                    || (!currentlyLeftAligned && (x < mView.getWidth() / 2f))) {
-
-                boolean willBeLeftAligned = !currentlyLeftAligned;
-                updateSideSetting(willBeLeftAligned);
-
-                int keyguardState = willBeLeftAligned
-                        ? SysUiStatsLog.KEYGUARD_BOUNCER_STATE_CHANGED__STATE__SWITCH_LEFT
-                        : SysUiStatsLog.KEYGUARD_BOUNCER_STATE_CHANGED__STATE__SWITCH_RIGHT;
-                SysUiStatsLog.write(SysUiStatsLog.KEYGUARD_BOUNCER_STATE_CHANGED, keyguardState);
-
-                updateSecurityViewLocation(willBeLeftAligned, true /* animate */);
-            }
-        }
-
         @Override
         public void updateSecurityViewLocation() {
             updateSecurityViewLocation(isLeftAligned(), /* animate= */false);
         }
 
-        /**
-         * Moves the inner security view to the correct location (in one handed mode) with
-         * animation. This is triggered when the user taps on the side of the screen that is not
-         * currently occupied by the security view.
-         */
-        private void updateSecurityViewLocation(boolean leftAlign, boolean animate) {
-            if (mRunningOneHandedAnimator != null) {
-                mRunningOneHandedAnimator.cancel();
-                mRunningOneHandedAnimator = null;
-            }
-
-            int targetTranslation = leftAlign
-                    ? 0 : (int) (mView.getMeasuredWidth() - mViewFlipper.getWidth());
-
-            if (animate) {
-                // This animation is a bit fun to implement. The bouncer needs to move, and fade
-                // in/out at the same time. The issue is, the bouncer should only move a short
-                // amount (120dp or so), but obviously needs to go from one side of the screen to
-                // the other. This needs a pretty custom animation.
-                //
-                // This works as follows. It uses a ValueAnimation to simply drive the animation
-                // progress. This animator is responsible for both the translation of the bouncer,
-                // and the current fade. It will fade the bouncer out while also moving it along the
-                // 120dp path. Once the bouncer is fully faded out though, it will "snap" the
-                // bouncer closer to its destination, then fade it back in again. The effect is that
-                // the bouncer will move from 0 -> X while fading out, then
-                // (destination - X) -> destination while fading back in again.
-                // TODO(b/208250221): Make this animation properly abortable.
-                Interpolator positionInterpolator = AnimationUtils.loadInterpolator(
-                        mView.getContext(), android.R.interpolator.fast_out_extra_slow_in);
-                Interpolator fadeOutInterpolator = Interpolators.FAST_OUT_LINEAR_IN;
-                Interpolator fadeInInterpolator = Interpolators.LINEAR_OUT_SLOW_IN;
-
-                mRunningOneHandedAnimator = ValueAnimator.ofFloat(0.0f, 1.0f);
-                mRunningOneHandedAnimator.setDuration(BOUNCER_HANDEDNESS_ANIMATION_DURATION_MS);
-                mRunningOneHandedAnimator.setInterpolator(Interpolators.LINEAR);
-
-                int initialTranslation = (int) mViewFlipper.getTranslationX();
-                int totalTranslation = (int) mView.getResources().getDimension(
-                        R.dimen.one_handed_bouncer_move_animation_translation);
-
-                final boolean shouldRestoreLayerType = mViewFlipper.hasOverlappingRendering()
-                        && mViewFlipper.getLayerType() != View.LAYER_TYPE_HARDWARE;
-                if (shouldRestoreLayerType) {
-                    mViewFlipper.setLayerType(View.LAYER_TYPE_HARDWARE, /* paint= */null);
-                }
-
-                float initialAlpha = mViewFlipper.getAlpha();
-
-                mRunningOneHandedAnimator.addListener(new AnimatorListenerAdapter() {
-                        @Override
-                        public void onAnimationEnd(Animator animation) {
-                            mRunningOneHandedAnimator = null;
-                        }
-                    });
-                mRunningOneHandedAnimator.addUpdateListener(animation -> {
-                    float switchPoint = BOUNCER_HANDEDNESS_ANIMATION_FADE_OUT_PROPORTION;
-                    boolean isFadingOut = animation.getAnimatedFraction() < switchPoint;
-
-                    int currentTranslation = (int) (positionInterpolator.getInterpolation(
-                            animation.getAnimatedFraction()) * totalTranslation);
-                    int translationRemaining = totalTranslation - currentTranslation;
-
-                    // Flip the sign if we're going from right to left.
-                    if (leftAlign) {
-                        currentTranslation = -currentTranslation;
-                        translationRemaining = -translationRemaining;
-                    }
-
-                    if (isFadingOut) {
-                        // The bouncer fades out over the first X%.
-                        float fadeOutFraction = MathUtils.constrainedMap(
-                                /* rangeMin= */1.0f,
-                                /* rangeMax= */0.0f,
-                                /* valueMin= */0.0f,
-                                /* valueMax= */switchPoint,
-                                animation.getAnimatedFraction());
-                        float opacity = fadeOutInterpolator.getInterpolation(fadeOutFraction);
-
-                        // When fading out, the alpha needs to start from the initial opacity of the
-                        // view flipper, otherwise we get a weird bit of jank as it ramps back to
-                        // 100%.
-                        mViewFlipper.setAlpha(opacity * initialAlpha);
-
-                        // Animate away from the source.
-                        mViewFlipper.setTranslationX(initialTranslation + currentTranslation);
-                    } else {
-                        // And in again over the remaining (100-X)%.
-                        float fadeInFraction = MathUtils.constrainedMap(
-                                /* rangeMin= */0.0f,
-                                /* rangeMax= */1.0f,
-                                /* valueMin= */switchPoint,
-                                /* valueMax= */1.0f,
-                                animation.getAnimatedFraction());
-
-                        float opacity = fadeInInterpolator.getInterpolation(fadeInFraction);
-                        mViewFlipper.setAlpha(opacity);
-
-                        // Fading back in, animate towards the destination.
-                        mViewFlipper.setTranslationX(targetTranslation - translationRemaining);
-                    }
-
-                    if (animation.getAnimatedFraction() == 1.0f && shouldRestoreLayerType) {
-                        mViewFlipper.setLayerType(View.LAYER_TYPE_NONE, /* paint= */null);
-                    }
-                });
-
-                mRunningOneHandedAnimator.start();
-            } else {
-                mViewFlipper.setTranslationX(targetTranslation);
-            }
+        protected void updateSecurityViewLocation(boolean leftAlign, boolean animate) {
+            translateSecurityViewLocation(leftAlign, animate);
         }
     }
 }
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
index 19a2d9e..e1957c0 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
@@ -17,6 +17,7 @@
 package com.android.keyguard;
 
 import static android.app.StatusBarManager.SESSION_KEYGUARD;
+import static android.hardware.biometrics.BiometricSourceType.FINGERPRINT;
 
 import static com.android.keyguard.KeyguardSecurityContainer.BOUNCER_DISMISS_BIOMETRIC;
 import static com.android.keyguard.KeyguardSecurityContainer.BOUNCER_DISMISS_EXTENDED_ACCESS;
@@ -32,11 +33,13 @@
 import android.content.Intent;
 import android.content.res.ColorStateList;
 import android.content.res.Configuration;
+import android.hardware.biometrics.BiometricSourceType;
 import android.metrics.LogMaker;
 import android.os.UserHandle;
 import android.util.Log;
 import android.util.Slog;
 import android.view.MotionEvent;
+import android.view.View;
 
 import androidx.annotation.Nullable;
 
@@ -55,6 +58,7 @@
 import com.android.settingslib.utils.ThreadUtils;
 import com.android.systemui.Gefingerpoken;
 import com.android.systemui.R;
+import com.android.systemui.biometrics.SidefpsController;
 import com.android.systemui.classifier.FalsingCollector;
 import com.android.systemui.flags.FeatureFlags;
 import com.android.systemui.flags.Flags;
@@ -67,6 +71,8 @@
 import com.android.systemui.util.ViewController;
 import com.android.systemui.util.settings.GlobalSettings;
 
+import java.util.Optional;
+
 import javax.inject.Inject;
 
 /** Controller for {@link KeyguardSecurityContainer} */
@@ -93,6 +99,7 @@
     private final GlobalSettings mGlobalSettings;
     private final FeatureFlags mFeatureFlags;
     private final SessionTracker mSessionTracker;
+    private final Optional<SidefpsController> mSidefpsController;
 
     private int mLastOrientation = Configuration.ORIENTATION_UNDEFINED;
 
@@ -116,12 +123,8 @@
                 // If we're in one handed mode, the user can tap on the opposite side of the screen
                 // to move the bouncer across. In that case, inhibit the falsing (otherwise the taps
                 // to move the bouncer to each screen side can end up closing it instead).
-                if (mView.getMode() == KeyguardSecurityContainer.MODE_ONE_HANDED) {
-                    boolean isLeftAligned = mView.isOneHandedModeLeftAligned();
-                    if ((isLeftAligned && ev.getX() > mView.getWidth() / 2f)
-                            || (!isLeftAligned && ev.getX() <= mView.getWidth() / 2f)) {
-                        mFalsingCollector.avoidGesture();
-                    }
+                if (mView.isTouchOnTheOtherSideOfSecurity(ev)) {
+                    mFalsingCollector.avoidGesture();
                 }
 
                 if (mTouchDown != null) {
@@ -153,14 +156,17 @@
         }
 
         @Override
-        public void dismiss(boolean authenticated, int targetId) {
-            dismiss(authenticated, targetId, /* bypassSecondaryLockScreen */ false);
+        public void dismiss(boolean authenticated, int targetId,
+                SecurityMode expectedSecurityMode) {
+            dismiss(authenticated, targetId, /* bypassSecondaryLockScreen */ false,
+                    expectedSecurityMode);
         }
 
         @Override
         public void dismiss(boolean authenticated, int targetId,
-                boolean bypassSecondaryLockScreen) {
-            mSecurityCallback.dismiss(authenticated, targetId, bypassSecondaryLockScreen);
+                boolean bypassSecondaryLockScreen, SecurityMode expectedSecurityMode) {
+            mSecurityCallback.dismiss(authenticated, targetId, bypassSecondaryLockScreen,
+                    expectedSecurityMode);
         }
 
         public boolean isVerifyUnlockOnly() {
@@ -169,8 +175,8 @@
 
         public void reportUnlockAttempt(int userId, boolean success, int timeoutMs) {
             int bouncerSide = SysUiStatsLog.KEYGUARD_BOUNCER_PASSWORD_ENTERED__SIDE__DEFAULT;
-            if (mView.getMode() == KeyguardSecurityContainer.MODE_ONE_HANDED) {
-                bouncerSide = mView.isOneHandedModeLeftAligned()
+            if (mView.isSidedSecurityMode()) {
+                bouncerSide = mView.isSecurityLeftAligned()
                         ? SysUiStatsLog.KEYGUARD_BOUNCER_PASSWORD_ENTERED__SIDE__LEFT
                         : SysUiStatsLog.KEYGUARD_BOUNCER_PASSWORD_ENTERED__SIDE__RIGHT;
             }
@@ -240,13 +246,27 @@
                     reloadColors();
                 }
             };
+    private boolean mBouncerVisible = false;
     private final KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback =
             new KeyguardUpdateMonitorCallback() {
-        @Override
-        public void onDevicePolicyManagerStateChanged() {
-            showPrimarySecurityScreen(false);
-        }
-    };
+                @Override
+                public void onDevicePolicyManagerStateChanged() {
+                    showPrimarySecurityScreen(false);
+                }
+
+                @Override
+                public void onBiometricRunningStateChanged(boolean running,
+                        BiometricSourceType biometricSourceType) {
+                    if (biometricSourceType == FINGERPRINT) {
+                        updateSideFpsVisibility();
+                    }
+                }
+
+                @Override
+                public void onStrongAuthStateChanged(int userId) {
+                    updateSideFpsVisibility();
+                }
+            };
 
     private KeyguardSecurityContainerController(KeyguardSecurityContainer view,
             AdminSecondaryLockScreenController.Factory adminSecondaryLockScreenControllerFactory,
@@ -264,7 +284,8 @@
             UserSwitcherController userSwitcherController,
             FeatureFlags featureFlags,
             GlobalSettings globalSettings,
-            SessionTracker sessionTracker) {
+            SessionTracker sessionTracker,
+            Optional<SidefpsController> sidefpsController) {
         super(view);
         mLockPatternUtils = lockPatternUtils;
         mUpdateMonitor = keyguardUpdateMonitor;
@@ -284,6 +305,7 @@
         mFeatureFlags = featureFlags;
         mGlobalSettings = globalSettings;
         mSessionTracker = sessionTracker;
+        mSidefpsController = sidefpsController;
     }
 
     @Override
@@ -315,8 +337,24 @@
             getCurrentSecurityController().onPause();
         }
         mView.onPause();
+        // It might happen that onStartingToHide is not called when the device is locked while on
+        // bouncer.
+        setBouncerVisible(false);
     }
 
+    private void updateSideFpsVisibility() {
+        if (!mSidefpsController.isPresent()) {
+            return;
+        }
+        if (mBouncerVisible
+                && getResources().getBoolean(R.bool.config_show_sidefps_hint_on_bouncer)
+                && mUpdateMonitor.isFingerprintDetectionRunning()
+                && !mUpdateMonitor.userNeedsStrongAuth()) {
+            mSidefpsController.get().show();
+        } else {
+            mSidefpsController.get().hide();
+        }
+    }
 
     /**
      * Shows the primary security screen for the user. This will be either the multi-selector
@@ -350,8 +388,13 @@
         return mCurrentSecurityMode;
     }
 
-    public void dismiss(boolean authenticated, int targetUserId) {
-        mKeyguardSecurityCallback.dismiss(authenticated, targetUserId);
+    /**
+     * Potentially dismiss the current security screen, after validating that all device
+     * security has been unlocked. Otherwise show the next screen.
+     */
+    public void dismiss(boolean authenticated, int targetUserId,
+            SecurityMode expectedSecurityMode) {
+        mKeyguardSecurityCallback.dismiss(authenticated, targetUserId, expectedSecurityMode);
     }
 
     public void reset() {
@@ -367,8 +410,8 @@
     public void onResume(int reason) {
         if (mCurrentSecurityMode != SecurityMode.None) {
             int state = SysUiStatsLog.KEYGUARD_BOUNCER_STATE_CHANGED__STATE__SHOWN;
-            if (mView.getMode() == KeyguardSecurityContainer.MODE_ONE_HANDED) {
-                state = mView.isOneHandedModeLeftAligned()
+            if (mView.isSidedSecurityMode()) {
+                state = mView.isSecurityLeftAligned()
                         ? SysUiStatsLog.KEYGUARD_BOUNCER_STATE_CHANGED__STATE__SHOWN_LEFT
                         : SysUiStatsLog.KEYGUARD_BOUNCER_STATE_CHANGED__STATE__SHOWN_RIGHT;
             }
@@ -401,6 +444,17 @@
         if (mCurrentSecurityMode != SecurityMode.None) {
             getCurrentSecurityController().onStartingToHide();
         }
+        setBouncerVisible(false);
+    }
+
+    /** Called when the bouncer changes visibility. */
+    public void onBouncerVisibilityChanged(@View.Visibility int visibility) {
+        setBouncerVisible(visibility == View.VISIBLE);
+    }
+
+    private void setBouncerVisible(boolean visible) {
+        mBouncerVisible = visible;
+        updateSideFpsVisibility();
     }
 
     /**
@@ -410,12 +464,21 @@
      *     completion.
      * @param bypassSecondaryLockScreen true if the user is allowed to bypass the secondary
      *     secondary lock screen requirement, if any.
+     * @param expectedSecurityMode SecurityMode that is invoking this request. SecurityMode.Invalid
+     *      indicates that no check should be done
      * @return true if keyguard is done
      */
     public boolean showNextSecurityScreenOrFinish(boolean authenticated, int targetUserId,
-            boolean bypassSecondaryLockScreen) {
+            boolean bypassSecondaryLockScreen, SecurityMode expectedSecurityMode) {
 
         if (DEBUG) Log.d(TAG, "showNextSecurityScreenOrFinish(" + authenticated + ")");
+        if (expectedSecurityMode != SecurityMode.Invalid
+                && expectedSecurityMode != getCurrentSecurityMode()) {
+            Log.w(TAG, "Attempted to invoke showNextSecurityScreenOrFinish with securityMode "
+                    + expectedSecurityMode + ", but current mode is " + getCurrentSecurityMode());
+            return false;
+        }
+
         boolean finish = false;
         boolean strongAuth = false;
         int eventSubtype = -1;
@@ -659,6 +722,7 @@
         private final FeatureFlags mFeatureFlags;
         private final UserSwitcherController mUserSwitcherController;
         private final SessionTracker mSessionTracker;
+        private final Optional<SidefpsController> mSidefpsController;
 
         @Inject
         Factory(KeyguardSecurityContainer view,
@@ -677,7 +741,8 @@
                 UserSwitcherController userSwitcherController,
                 FeatureFlags featureFlags,
                 GlobalSettings globalSettings,
-                SessionTracker sessionTracker) {
+                SessionTracker sessionTracker,
+                Optional<SidefpsController> sidefpsController) {
             mView = view;
             mAdminSecondaryLockScreenControllerFactory = adminSecondaryLockScreenControllerFactory;
             mLockPatternUtils = lockPatternUtils;
@@ -694,6 +759,7 @@
             mGlobalSettings = globalSettings;
             mUserSwitcherController = userSwitcherController;
             mSessionTracker = sessionTracker;
+            mSidefpsController = sidefpsController;
         }
 
         public KeyguardSecurityContainerController create(
@@ -703,7 +769,8 @@
                     mKeyguardUpdateMonitor, mKeyguardSecurityModel, mMetricsLogger, mUiEventLogger,
                     mKeyguardStateController, securityCallback, mSecurityViewFlipperController,
                     mConfigurationController, mFalsingCollector, mFalsingManager,
-                    mUserSwitcherController, mFeatureFlags, mGlobalSettings, mSessionTracker);
+                    mUserSwitcherController, mFeatureFlags, mGlobalSettings, mSessionTracker,
+                    mSidefpsController);
         }
     }
 }
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinViewController.java
index 47df70b..ecd88e6 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPinViewController.java
@@ -16,6 +16,8 @@
 
 package com.android.keyguard;
 
+import static com.android.systemui.util.PluralMessageFormaterKt.icuMessageFormat;
+
 import android.annotation.NonNull;
 import android.app.AlertDialog;
 import android.app.AlertDialog.Builder;
@@ -168,7 +170,8 @@
                             mRemainingAttempts = -1;
                             mShowDefaultMessage = true;
                             getKeyguardSecurityCallback().dismiss(
-                                    true, KeyguardUpdateMonitor.getCurrentUser());
+                                    true, KeyguardUpdateMonitor.getCurrentUser(),
+                                    SecurityMode.SimPin);
                         } else {
                             mShowDefaultMessage = false;
                             if (result.getResult() == PinResult.PIN_RESULT_TYPE_INCORRECT) {
@@ -241,10 +244,9 @@
             displayMessage = mView.getResources().getString(
                     R.string.kg_password_wrong_pin_code_pukked);
         } else if (attemptsRemaining > 0) {
-            msgId = isDefault ? R.plurals.kg_password_default_pin_message :
-                    R.plurals.kg_password_wrong_pin_code;
-            displayMessage = mView.getResources()
-                    .getQuantityString(msgId, attemptsRemaining, attemptsRemaining);
+            msgId = isDefault ? R.string.kg_password_default_pin_message :
+                    R.string.kg_password_wrong_pin_code;
+            displayMessage = icuMessageFormat(mView.getResources(), msgId, attemptsRemaining);
         } else {
             msgId = isDefault ? R.string.kg_sim_pin_instructions : R.string.kg_password_pin_failed;
             displayMessage = mView.getResources().getString(msgId);
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukView.java
index 760c2cc..c0971bf 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukView.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukView.java
@@ -16,6 +16,8 @@
 
 package com.android.keyguard;
 
+import static com.android.systemui.util.PluralMessageFormaterKt.icuMessageFormat;
+
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.drawable.Drawable;
@@ -57,10 +59,9 @@
         if (attemptsRemaining == 0) {
             displayMessage = getContext().getString(R.string.kg_password_wrong_puk_code_dead);
         } else if (attemptsRemaining > 0) {
-            int msgId = isDefault ? R.plurals.kg_password_default_puk_message :
-                    R.plurals.kg_password_wrong_puk_code;
-            displayMessage = getContext().getResources()
-                    .getQuantityString(msgId, attemptsRemaining, attemptsRemaining);
+            int msgId = isDefault ? R.string.kg_password_default_puk_message :
+                    R.string.kg_password_wrong_puk_code;
+            displayMessage = icuMessageFormat(getResources(), msgId, attemptsRemaining);
         } else {
             int msgId = isDefault ? R.string.kg_puk_enter_puk_hint :
                     R.string.kg_password_puk_failed;
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukViewController.java
index 47aa43b..203f9b6 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSimPukViewController.java
@@ -69,7 +69,8 @@
             if (simState == TelephonyManager.SIM_STATE_READY) {
                 mRemainingAttempts = -1;
                 mShowDefaultMessage = true;
-                getKeyguardSecurityCallback().dismiss(true, KeyguardUpdateMonitor.getCurrentUser());
+                getKeyguardSecurityCallback().dismiss(true, KeyguardUpdateMonitor.getCurrentUser(),
+                        SecurityMode.SimPuk);
             } else {
                 resetState();
             }
@@ -278,7 +279,8 @@
                             mShowDefaultMessage = true;
 
                             getKeyguardSecurityCallback().dismiss(
-                                    true, KeyguardUpdateMonitor.getCurrentUser());
+                                    true, KeyguardUpdateMonitor.getCurrentUser(),
+                                    SecurityMode.SimPuk);
                         } else {
                             mShowDefaultMessage = false;
                             if (result.getResult() == PinResult.PIN_RESULT_TYPE_INCORRECT) {
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java
index 8921780..014d082 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardStatusViewController.java
@@ -240,11 +240,6 @@
         }
 
         @Override
-        public void onTimeFormatChanged(String timeFormat) {
-            mKeyguardClockSwitchController.refreshFormat();
-        }
-
-        @Override
         public void onTimeZoneChanged(TimeZone timeZone) {
             mKeyguardClockSwitchController.updateTimeZone(timeZone);
         }
@@ -256,11 +251,6 @@
                 refreshTime();
             }
         }
-
-        @Override
-        public void onUserSwitchComplete(int userId) {
-            mKeyguardClockSwitchController.refreshFormat();
-        }
     };
 
     /**
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
index 727d108..98946ac 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -41,7 +41,6 @@
 import android.app.ActivityTaskManager;
 import android.app.ActivityTaskManager.RootTaskInfo;
 import android.app.AlarmManager;
-import android.app.PendingIntent;
 import android.app.UserSwitchObserver;
 import android.app.admin.DevicePolicyManager;
 import android.app.trust.TrustManager;
@@ -67,7 +66,6 @@
 import android.hardware.fingerprint.FingerprintManager.AuthenticationResult;
 import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
 import android.nfc.NfcAdapter;
-import android.os.Build;
 import android.os.CancellationSignal;
 import android.os.Handler;
 import android.os.IRemoteCallback;
@@ -97,6 +95,7 @@
 import com.android.internal.jank.InteractionJankMonitor;
 import com.android.internal.util.LatencyTracker;
 import com.android.internal.widget.LockPatternUtils;
+import com.android.keyguard.logging.KeyguardUpdateMonitorLogger;
 import com.android.settingslib.WirelessUtils;
 import com.android.settingslib.fuelgauge.BatteryStatus;
 import com.android.systemui.Dumpable;
@@ -142,19 +141,8 @@
 public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpable {
 
     private static final String TAG = "KeyguardUpdateMonitor";
-    private static final boolean DEBUG = KeyguardConstants.DEBUG;
-    private static final boolean DEBUG_SIM_STATES = KeyguardConstants.DEBUG_SIM_STATES;
-    private static final boolean DEBUG_FACE = Build.IS_DEBUGGABLE;
-    private static final boolean DEBUG_FINGERPRINT = Build.IS_DEBUGGABLE;
-    private static final boolean DEBUG_ACTIVE_UNLOCK = Build.IS_DEBUGGABLE;
-    private static final boolean DEBUG_SPEW = false;
     private static final int BIOMETRIC_LOCKOUT_RESET_DELAY_MS = 600;
 
-    private static final String ACTION_FACE_UNLOCK_STARTED
-            = "com.android.facelock.FACE_UNLOCK_STARTED";
-    private static final String ACTION_FACE_UNLOCK_STOPPED
-            = "com.android.facelock.FACE_UNLOCK_STOPPED";
-
     // Callback messages
     private static final int MSG_TIME_UPDATE = 301;
     private static final int MSG_BATTERY_UPDATE = 302;
@@ -165,13 +153,11 @@
     private static final int MSG_USER_SWITCHING = 310;
     private static final int MSG_KEYGUARD_RESET = 312;
     private static final int MSG_USER_SWITCH_COMPLETE = 314;
-    private static final int MSG_USER_INFO_CHANGED = 317;
     private static final int MSG_REPORT_EMERGENCY_CALL_ACTION = 318;
     private static final int MSG_STARTED_WAKING_UP = 319;
     private static final int MSG_FINISHED_GOING_TO_SLEEP = 320;
     private static final int MSG_STARTED_GOING_TO_SLEEP = 321;
     private static final int MSG_KEYGUARD_BOUNCER_CHANGED = 322;
-    private static final int MSG_FACE_UNLOCK_STATE_CHANGED = 327;
     private static final int MSG_SIM_SUBSCRIPTION_INFO_CHANGED = 328;
     private static final int MSG_AIRPLANE_MODE_CHANGED = 329;
     private static final int MSG_SERVICE_STATE_CHANGE = 330;
@@ -228,7 +214,8 @@
      * If no cancel signal has been received after this amount of time, set the biometric running
      * state to stopped to allow Keyguard to retry authentication.
      */
-    private static final int DEFAULT_CANCEL_SIGNAL_TIMEOUT = 3000;
+    @VisibleForTesting
+    protected static final int DEFAULT_CANCEL_SIGNAL_TIMEOUT = 3000;
 
     private static final ComponentName FALLBACK_HOME_COMPONENT = new ComponentName(
             "com.android.settings", "com.android.settings.FallbackHome");
@@ -249,8 +236,8 @@
     }
 
     private final Context mContext;
+    private final KeyguardUpdateMonitorLogger mLogger;
     private final boolean mIsPrimaryUser;
-    private final boolean mIsAutomotive;
     private final AuthController mAuthController;
     private final StatusBarStateController mStatusBarStateController;
     private int mStatusBarState;
@@ -328,8 +315,6 @@
     private final LatencyTracker mLatencyTracker;
     private boolean mLogoutEnabled;
     private boolean mIsFaceEnrolled;
-    // If the user long pressed the lock icon, disabling face auth for the current session.
-    private boolean mLockIconPressed;
     private int mActiveMobileDataSubscription = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
     private final Executor mBackgroundExecutor;
     private SensorPrivacyManager mSensorPrivacyManager;
@@ -348,18 +333,15 @@
     private static final int HAL_ERROR_RETRY_TIMEOUT = 500; // ms
     private static final int HAL_ERROR_RETRY_MAX = 20;
 
-    private final Runnable mFpCancelNotReceived = () -> {
-        Log.e(TAG, "Fp cancellation not received, transitioning to STOPPED");
-        mFingerprintRunningState = BIOMETRIC_STATE_STOPPED;
-        updateFingerprintListeningState(BIOMETRIC_ACTION_STOP);
-    };
+    @VisibleForTesting
+    protected final Runnable mFpCancelNotReceived = this::onFingerprintCancelNotReceived;
 
-    private final Runnable mFaceCancelNotReceived = () -> {
-        Log.e(TAG, "Face cancellation not received, transitioning to STOPPED");
-        mFaceRunningState = BIOMETRIC_STATE_STOPPED;
-        updateFaceListeningState(BIOMETRIC_ACTION_STOP);
-    };
+    private final Runnable mFaceCancelNotReceived = this::onFaceCancelNotReceived;
 
+    @VisibleForTesting
+    protected Handler getHandler() {
+        return mHandler;
+    }
     private final Handler mHandler;
 
     private SparseBooleanArray mBiometricEnabledForUser = new SparseBooleanArray();
@@ -408,7 +390,6 @@
     private SparseBooleanArray mUserHasTrust = new SparseBooleanArray();
     private SparseBooleanArray mUserTrustIsManaged = new SparseBooleanArray();
     private SparseBooleanArray mUserTrustIsUsuallyManaged = new SparseBooleanArray();
-    private SparseBooleanArray mUserFaceUnlockRunning = new SparseBooleanArray();
     private Map<Integer, Intent> mSecondaryLockscreenRequirement = new HashMap<Integer, Intent>();
 
     @VisibleForTesting
@@ -482,17 +463,15 @@
 
     private void handleSimSubscriptionInfoChanged() {
         Assert.isMainThread();
-        if (DEBUG_SIM_STATES) {
-            Log.v(TAG, "onSubscriptionInfoChanged()");
-            List<SubscriptionInfo> sil = mSubscriptionManager
-                    .getCompleteActiveSubscriptionInfoList();
-            if (sil != null) {
-                for (SubscriptionInfo subInfo : sil) {
-                    Log.v(TAG, "SubInfo:" + subInfo);
-                }
-            } else {
-                Log.v(TAG, "onSubscriptionInfoChanged: list is null");
+        mLogger.v("onSubscriptionInfoChanged()");
+        List<SubscriptionInfo> sil = mSubscriptionManager
+                .getCompleteActiveSubscriptionInfoList();
+        if (sil != null) {
+            for (SubscriptionInfo subInfo : sil) {
+                mLogger.logSubInfo(subInfo);
             }
+        } else {
+            mLogger.v("onSubscriptionInfoChanged: list is null");
         }
         List<SubscriptionInfo> subscriptionInfos = getSubscriptionInfo(true /* forceReload */);
 
@@ -516,8 +495,7 @@
         while (iter.hasNext()) {
             Map.Entry<Integer, SimData> simData = iter.next();
             if (!activeSubIds.contains(simData.getKey())) {
-                Log.i(TAG, "Previously active sub id " + simData.getKey() + " is now invalid, "
-                        + "will remove");
+                mLogger.logInvalidSubId(simData.getKey());
                 iter.remove();
 
                 SimData data = simData.getValue();
@@ -702,7 +680,7 @@
             try {
                 mDreamManager.awaken();
             } catch (RemoteException e) {
-                Log.e(TAG, "Unable to awaken from dream");
+                mLogger.logException(e, "Unable to awaken from dream");
             }
         }
     }
@@ -751,6 +729,11 @@
 
     private void handleFingerprintAuthFailed() {
         Assert.isMainThread();
+        if (mHandler.hasCallbacks(mFpCancelNotReceived)) {
+            Log.d(TAG, "handleFingerprintAuthFailed()"
+                    + " triggered while waiting for cancellation, removing watchdog");
+            mHandler.removeCallbacks(mFpCancelNotReceived);
+        }
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
             if (cb != null) {
@@ -781,20 +764,25 @@
 
     private void handleFingerprintAuthenticated(int authUserId, boolean isStrongBiometric) {
         Trace.beginSection("KeyGuardUpdateMonitor#handlerFingerPrintAuthenticated");
+        if (mHandler.hasCallbacks(mFpCancelNotReceived)) {
+            Log.d(TAG, "handleFingerprintAuthenticated()"
+                    + " triggered while waiting for cancellation, removing watchdog");
+            mHandler.removeCallbacks(mFpCancelNotReceived);
+        }
         try {
             final int userId;
             try {
                 userId = ActivityManager.getService().getCurrentUser().id;
             } catch (RemoteException e) {
-                Log.e(TAG, "Failed to get current user id: ", e);
+                mLogger.logException(e, "Failed to get current user id");
                 return;
             }
             if (userId != authUserId) {
-                Log.d(TAG, "Fingerprint authenticated for wrong user: " + authUserId);
+                mLogger.logFingerprintAuthForWrongUser(authUserId);
                 return;
             }
             if (isFingerprintDisabled(userId)) {
-                Log.d(TAG, "Fingerprint disabled by DPM for userId: " + userId);
+                mLogger.logFingerprintDisabledForUser(userId);
                 return;
             }
             onFingerprintAuthenticated(userId, isStrongBiometric);
@@ -817,8 +805,7 @@
     private Runnable mRetryFingerprintAuthentication = new Runnable() {
         @Override
         public void run() {
-            Log.w(TAG, "Retrying fingerprint after HW unavailable, attempt " +
-                    mHardwareFingerprintUnavailableRetryCount);
+            mLogger.logRetryAfterFpHwUnavailable(mHardwareFingerprintUnavailableRetryCount);
             if (mFpm.isHardwareDetected()) {
                 updateFingerprintListeningState(BIOMETRIC_ACTION_UPDATE);
             } else if (mHardwareFingerprintUnavailableRetryCount < HAL_ERROR_RETRY_MAX) {
@@ -828,6 +815,12 @@
         }
     };
 
+    private void onFingerprintCancelNotReceived() {
+        mLogger.e("Fp cancellation not received, transitioning to STOPPED");
+        mFingerprintRunningState = BIOMETRIC_STATE_STOPPED;
+        KeyguardUpdateMonitor.this.updateFingerprintListeningState(BIOMETRIC_ACTION_STOP);
+    }
+
     private void handleFingerprintError(int msgId, String errString) {
         Assert.isMainThread();
         if (mHandler.hasCallbacks(mFpCancelNotReceived)) {
@@ -845,7 +838,9 @@
             setFingerprintRunningState(BIOMETRIC_STATE_STOPPED);
         }
 
-        if (msgId == FingerprintManager.FINGERPRINT_ERROR_HW_UNAVAILABLE) {
+        if (msgId == FingerprintManager.FINGERPRINT_ERROR_HW_UNAVAILABLE
+                || msgId == FingerprintManager.BIOMETRIC_ERROR_POWER_PRESSED) {
+            Log.d(TAG, "Fingerprint retrying auth due to(" + msgId + ") -> " + errString);
             mHandler.postDelayed(mRetryFingerprintAuthentication, HAL_ERROR_RETRY_TIMEOUT);
         }
 
@@ -853,7 +848,7 @@
         if (msgId == FingerprintManager.FINGERPRINT_ERROR_LOCKOUT_PERMANENT) {
             lockedOutStateChanged |= !mFingerprintLockedOutPermanent;
             mFingerprintLockedOutPermanent = true;
-            Log.d(TAG, "Fingerprint locked out - requiring strong auth");
+            mLogger.d("Fingerprint locked out - requiring strong auth");
             mLockPatternUtils.requireStrongAuth(
                     STRONG_AUTH_REQUIRED_AFTER_LOCKOUT, getCurrentUser());
         }
@@ -881,7 +876,7 @@
     }
 
     private void handleFingerprintLockoutReset(@LockoutMode int mode) {
-        Log.d(TAG, "handleFingerprintLockoutReset: " + mode);
+        mLogger.logFingerprintLockoutReset(mode);
         final boolean wasLockout = mFingerprintLockedOut;
         final boolean wasLockoutPermanent = mFingerprintLockedOutPermanent;
         mFingerprintLockedOut = (mode == BIOMETRIC_LOCKOUT_TIMED)
@@ -912,7 +907,7 @@
         boolean wasRunning = mFingerprintRunningState == BIOMETRIC_STATE_RUNNING;
         boolean isRunning = fingerprintRunningState == BIOMETRIC_STATE_RUNNING;
         mFingerprintRunningState = fingerprintRunningState;
-        Log.d(TAG, "fingerprintRunningState: " + mFingerprintRunningState);
+        mLogger.logFingerprintRunningState(mFingerprintRunningState);
         // Clients of KeyguardUpdateMonitor don't care about the internal state about the
         // asynchronousness of the cancel cycle. So only notify them if the actually running state
         // has changed.
@@ -979,7 +974,7 @@
 
     private void handleFaceAcquired(int acquireInfo) {
         Assert.isMainThread();
-        if (DEBUG_FACE) Log.d(TAG, "Face acquired acquireInfo=" + acquireInfo);
+        mLogger.logFaceAcquired(acquireInfo);
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
             if (cb != null) {
@@ -992,25 +987,25 @@
         Trace.beginSection("KeyGuardUpdateMonitor#handlerFaceAuthenticated");
         try {
             if (mGoingToSleep) {
-                Log.d(TAG, "Aborted successful auth because device is going to sleep.");
+                mLogger.d("Aborted successful auth because device is going to sleep.");
                 return;
             }
             final int userId;
             try {
                 userId = ActivityManager.getService().getCurrentUser().id;
             } catch (RemoteException e) {
-                Log.e(TAG, "Failed to get current user id: ", e);
+                mLogger.logException(e, "Failed to get current user id");
                 return;
             }
             if (userId != authUserId) {
-                Log.d(TAG, "Face authenticated for wrong user: " + authUserId);
+                mLogger.logFaceAuthForWrongUser(authUserId);
                 return;
             }
             if (isFaceDisabled(userId)) {
-                Log.d(TAG, "Face authentication disabled by DPM for userId: " + userId);
+                mLogger.logFaceAuthDisabledForUser(userId);
                 return;
             }
-            if (DEBUG_FACE) Log.d(TAG, "Face auth succeeded for user " + userId);
+            mLogger.logFaceAuthSuccess(userId);
             onFaceAuthenticated(userId, isStrongBiometric);
         } finally {
             setFaceRunningState(BIOMETRIC_STATE_STOPPED);
@@ -1020,7 +1015,7 @@
 
     private void handleFaceHelp(int msgId, String helpString) {
         Assert.isMainThread();
-        if (DEBUG_FACE) Log.d(TAG, "Face help received: " + helpString);
+        mLogger.logFaceAuthHelpMsg(msgId, helpString);
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
             if (cb != null) {
@@ -1032,15 +1027,21 @@
     private Runnable mRetryFaceAuthentication = new Runnable() {
         @Override
         public void run() {
-            Log.w(TAG, "Retrying face after HW unavailable, attempt " +
-                    mHardwareFaceUnavailableRetryCount);
+            mLogger.logRetryingAfterFaceHwUnavailable(mHardwareFaceUnavailableRetryCount);
             updateFaceListeningState(BIOMETRIC_ACTION_UPDATE);
         }
     };
 
-    private void handleFaceError(int msgId, String errString) {
+    private void onFaceCancelNotReceived() {
+        mLogger.e("Face cancellation not received, transitioning to STOPPED");
+        mFaceRunningState = BIOMETRIC_STATE_STOPPED;
+        KeyguardUpdateMonitor.this.updateFaceListeningState(BIOMETRIC_ACTION_STOP);
+    }
+
+    private void handleFaceError(int msgId, final String originalErrMsg) {
         Assert.isMainThread();
-        if (DEBUG_FACE) Log.d(TAG, "Face error received: " + errString + " msgId=" + msgId);
+        String errString = originalErrMsg;
+        mLogger.logFaceAuthError(msgId, originalErrMsg);
         if (mHandler.hasCallbacks(mFaceCancelNotReceived)) {
             mHandler.removeCallbacks(mFaceCancelNotReceived);
         }
@@ -1097,7 +1098,7 @@
     }
 
     private void handleFaceLockoutReset(@LockoutMode int mode) {
-        Log.d(TAG, "handleFaceLockoutReset: " + mode);
+        mLogger.logFaceLockoutReset(mode);
         final boolean wasLockoutPermanent = mFaceLockedOutPermanent;
         mFaceLockedOutPermanent = (mode == BIOMETRIC_LOCKOUT_PERMANENT);
         final boolean changed = (mFaceLockedOutPermanent != wasLockoutPermanent);
@@ -1115,7 +1116,7 @@
         boolean wasRunning = mFaceRunningState == BIOMETRIC_STATE_RUNNING;
         boolean isRunning = faceRunningState == BIOMETRIC_STATE_RUNNING;
         mFaceRunningState = faceRunningState;
-        Log.d(TAG, "faceRunningState: " + mFaceRunningState);
+        mLogger.logFaceRunningState(mFaceRunningState);
         // Clients of KeyguardUpdateMonitor don't care about the internal state or about the
         // asynchronousness of the cancel cycle. So only notify them if the actually running state
         // has changed.
@@ -1135,21 +1136,6 @@
         }
     }
 
-    private void handleFaceUnlockStateChanged(boolean running, int userId) {
-        Assert.isMainThread();
-        mUserFaceUnlockRunning.put(userId, running);
-        for (int i = 0; i < mCallbacks.size(); i++) {
-            KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
-            if (cb != null) {
-                cb.onFaceUnlockStateChanged(running, userId);
-            }
-        }
-    }
-
-    public boolean isFaceUnlockRunning(int userId) {
-        return mUserFaceUnlockRunning.get(userId);
-    }
-
     public boolean isFingerprintDetectionRunning() {
         return mFingerprintRunningState == BIOMETRIC_STATE_RUNNING;
     }
@@ -1246,8 +1232,7 @@
                     mDevicePolicyManager.getProfileOwnerOrDeviceOwnerSupervisionComponent(
                             UserHandle.of(userId));
             if (supervisorComponent == null) {
-                Log.e(TAG, "No Profile Owner or Device Owner supervision app found for User "
-                        + userId);
+                mLogger.logMissingSupervisorAppError(userId);
             } else {
                 Intent intent =
                         new Intent(DevicePolicyManager.ACTION_BIND_SECONDARY_LOCKSCREEN_SERVICE)
@@ -1373,23 +1358,13 @@
         }
     }
 
-    static class DisplayClientState {
-        public int clientGeneration;
-        public boolean clearing;
-        public PendingIntent intent;
-        public int playbackState;
-        public long playbackEventTime;
-    }
-
-    private DisplayClientState mDisplayClientState = new DisplayClientState();
-
     @VisibleForTesting
     protected final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
 
         @Override
         public void onReceive(Context context, Intent intent) {
             final String action = intent.getAction();
-            if (DEBUG) Log.d(TAG, "received broadcast " + action);
+            mLogger.logBroadcastReceived(action);
 
             if (Intent.ACTION_TIME_TICK.equals(action)
                     || Intent.ACTION_TIME_CHANGED.equals(action)) {
@@ -1416,12 +1391,10 @@
                     }
                     return;
                 }
-                if (DEBUG_SIM_STATES) {
-                    Log.v(TAG, "action " + action
-                            + " state: " + intent.getStringExtra(
-                            Intent.EXTRA_SIM_STATE)
-                            + " slotId: " + args.slotId + " subid: " + args.subId);
-                }
+                mLogger.logSimStateFromIntent(action,
+                        intent.getStringExtra(Intent.EXTRA_SIM_STATE),
+                        args.slotId,
+                        args.subId);
                 mHandler.obtainMessage(MSG_SIM_STATE_CHANGE, args.subId, args.slotId, args.simState)
                         .sendToTarget();
             } else if (TelephonyManager.ACTION_PHONE_STATE_CHANGED.equals(action)) {
@@ -1433,10 +1406,7 @@
                 ServiceState serviceState = ServiceState.newFromBundle(intent.getExtras());
                 int subId = intent.getIntExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX,
                         SubscriptionManager.INVALID_SUBSCRIPTION_ID);
-                if (DEBUG) {
-                    Log.v(TAG, "action " + action + " serviceState=" + serviceState + " subId="
-                            + subId);
-                }
+                mLogger.logServiceStateIntent(action, serviceState, subId);
                 mHandler.sendMessage(
                         mHandler.obtainMessage(MSG_SERVICE_STATE_CHANGE, subId, 0, serviceState));
             } else if (TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED.equals(action)) {
@@ -1456,19 +1426,6 @@
             final String action = intent.getAction();
             if (AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED.equals(action)) {
                 mHandler.sendEmptyMessage(MSG_TIME_UPDATE);
-            } else if (Intent.ACTION_USER_INFO_CHANGED.equals(action)) {
-                mHandler.sendMessage(mHandler.obtainMessage(MSG_USER_INFO_CHANGED,
-                        intent.getIntExtra(Intent.EXTRA_USER_HANDLE, getSendingUserId()), 0));
-            } else if (ACTION_FACE_UNLOCK_STARTED.equals(action)) {
-                Trace.beginSection(
-                        "KeyguardUpdateMonitor.mBroadcastAllReceiver#onReceive "
-                                + "ACTION_FACE_UNLOCK_STARTED");
-                mHandler.sendMessage(mHandler.obtainMessage(MSG_FACE_UNLOCK_STATE_CHANGED, 1,
-                        getSendingUserId()));
-                Trace.endSection();
-            } else if (ACTION_FACE_UNLOCK_STOPPED.equals(action)) {
-                mHandler.sendMessage(mHandler.obtainMessage(MSG_FACE_UNLOCK_STATE_CHANGED, 0,
-                        getSendingUserId()));
             } else if (DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED
                     .equals(action)) {
                 mHandler.sendMessage(mHandler.obtainMessage(MSG_DPM_STATE_CHANGED,
@@ -1569,7 +1526,7 @@
                  */
                 @Override
                 public void onUdfpsPointerDown(int sensorId) {
-                    Log.d(TAG, "onUdfpsPointerDown, sensorId: " + sensorId);
+                    mLogger.logUdfpsPointerDown(sensorId);
                     requestFaceAuth(true);
                 }
 
@@ -1578,7 +1535,7 @@
                  */
                 @Override
                 public void onUdfpsPointerUp(int sensorId) {
-                    Log.d(TAG, "onUdfpsPointerUp, sensorId: " + sensorId);
+                    mLogger.logUdfpsPointerUp(sensorId);
                 }
             };
 
@@ -1767,7 +1724,6 @@
 
     protected void handleStartedGoingToSleep(int arg1) {
         Assert.isMainThread();
-        mLockIconPressed = false;
         clearBiometricRecognized();
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
@@ -1815,16 +1771,6 @@
         }
     }
 
-    private void handleUserInfoChanged(int userId) {
-        Assert.isMainThread();
-        for (int i = 0; i < mCallbacks.size(); i++) {
-            KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
-            if (cb != null) {
-                cb.onUserInfoChanged(userId);
-            }
-        }
-    }
-
     private void handleUserUnlocked(int userId) {
         Assert.isMainThread();
         mUserIsUnlocked.put(userId, true);
@@ -1885,7 +1831,9 @@
             TelephonyListenerManager telephonyListenerManager,
             InteractionJankMonitor interactionJankMonitor,
             LatencyTracker latencyTracker,
-            ActiveUnlockConfig activeUnlockConfiguration) {
+            ActiveUnlockConfig activeUnlockConfiguration,
+            KeyguardUpdateMonitorLogger logger) {
+        mLogger = logger;
         mContext = context;
         mSubscriptionManager = SubscriptionManager.from(context);
         mTelephonyListenerManager = telephonyListenerManager;
@@ -1942,9 +1890,6 @@
                     case MSG_KEYGUARD_BOUNCER_CHANGED:
                         handleKeyguardBouncerChanged(msg.arg1, msg.arg2);
                         break;
-                    case MSG_USER_INFO_CHANGED:
-                        handleUserInfoChanged(msg.arg1);
-                        break;
                     case MSG_REPORT_EMERGENCY_CALL_ACTION:
                         handleReportEmergencyCallAction();
                         break;
@@ -1959,12 +1904,6 @@
                         handleStartedWakingUp();
                         Trace.endSection();
                         break;
-                    case MSG_FACE_UNLOCK_STATE_CHANGED:
-                        Trace.beginSection(
-                                "KeyguardUpdateMonitor#handler MSG_FACE_UNLOCK_STATE_CHANGED");
-                        handleFaceUnlockStateChanged(msg.arg1 != 0, msg.arg2);
-                        Trace.endSection();
-                        break;
                     case MSG_SIM_SUBSCRIPTION_INFO_CHANGED:
                         handleSimSubscriptionInfoChanged();
                         break;
@@ -2052,24 +1991,10 @@
                     .getServiceStateForSubscriber(subId);
             mHandler.sendMessage(
                     mHandler.obtainMessage(MSG_SERVICE_STATE_CHANGE, subId, 0, serviceState));
-
-            // Get initial state. Relying on Sticky behavior until API for getting info.
-            if (mBatteryStatus == null) {
-                Intent intent = mContext.registerReceiver(
-                        null,
-                        new IntentFilter(Intent.ACTION_BATTERY_CHANGED)
-                );
-                if (intent != null && mBatteryStatus == null) {
-                    mBroadcastReceiver.onReceive(mContext, intent);
-                }
-            }
         });
 
         final IntentFilter allUserFilter = new IntentFilter();
-        allUserFilter.addAction(Intent.ACTION_USER_INFO_CHANGED);
         allUserFilter.addAction(AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED);
-        allUserFilter.addAction(ACTION_FACE_UNLOCK_STARTED);
-        allUserFilter.addAction(ACTION_FACE_UNLOCK_STOPPED);
         allUserFilter.addAction(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED);
         allUserFilter.addAction(ACTION_USER_UNLOCKED);
         allUserFilter.addAction(ACTION_USER_STOPPED);
@@ -2127,8 +2052,6 @@
             mFaceManager.addLockoutResetCallback(mFaceLockoutResetCallback);
         }
 
-        mIsAutomotive = isAutomotive();
-
         TaskStackChangeListeners.getInstance().registerTaskStackListener(mTaskStackListener);
         mUserManager = context.getSystemService(UserManager.class);
         mIsPrimaryUser = mUserManager.isPrimaryUser();
@@ -2254,13 +2177,13 @@
                 || mFingerprintRunningState == BIOMETRIC_STATE_CANCELLING_RESTARTING;
         if (runningOrRestarting && !shouldListenForFingerprint) {
             if (action == BIOMETRIC_ACTION_START) {
-                Log.v(TAG, "Ignoring stopListeningForFingerprint()");
+                mLogger.v("Ignoring stopListeningForFingerprint()");
                 return;
             }
             stopListeningForFingerprint();
         } else if (!runningOrRestarting && shouldListenForFingerprint) {
             if (action == BIOMETRIC_ACTION_STOP) {
-                Log.v(TAG, "Ignoring startListeningForFingerprint()");
+                mLogger.v("Ignoring startListeningForFingerprint()");
                 return;
             }
             startListeningForFingerprint();
@@ -2286,7 +2209,7 @@
      * @param active If the interrupt started or ended.
      */
     public void onAuthInterruptDetected(boolean active) {
-        if (DEBUG) Log.d(TAG, "onAuthInterruptDetected(" + active + ")");
+        mLogger.logAuthInterruptDetected(active);
         if (mAuthInterruptActive == active) {
             return;
         }
@@ -2301,7 +2224,7 @@
      * @param userInitiatedRequest true if the user explicitly requested face auth
      */
     public void requestFaceAuth(boolean userInitiatedRequest) {
-        if (DEBUG) Log.d(TAG, "requestFaceAuth() userInitiated=" + userInitiatedRequest);
+        mLogger.logFaceAuthRequested(userInitiatedRequest);
         mIsFaceAuthUserRequested |= userInitiatedRequest;
         updateFaceListeningState(BIOMETRIC_ACTION_START);
     }
@@ -2327,14 +2250,14 @@
         boolean shouldListenForFace = shouldListenForFace();
         if (mFaceRunningState == BIOMETRIC_STATE_RUNNING && !shouldListenForFace) {
             if (action == BIOMETRIC_ACTION_START) {
-                Log.v(TAG, "Ignoring stopListeningForFace()");
+                mLogger.v("Ignoring stopListeningForFace()");
                 return;
             }
             mIsFaceAuthUserRequested = false;
             stopListeningForFace();
         } else if (mFaceRunningState != BIOMETRIC_STATE_RUNNING && shouldListenForFace) {
             if (action == BIOMETRIC_ACTION_STOP) {
-                Log.v(TAG, "Ignoring startListeningForFace()");
+                mLogger.v("Ignoring startListeningForFace()");
                 return;
             }
             startListeningForFace();
@@ -2351,9 +2274,7 @@
         }
 
         if (shouldTriggerActiveUnlock()) {
-            if (DEBUG_ACTIVE_UNLOCK) {
-                Log.d("ActiveUnlock", "initiate active unlock triggerReason=" + reason);
-            }
+            mLogger.logActiveUnlockTriggered(reason);
             mTrustManager.reportUserMayRequestUnlock(KeyguardUpdateMonitor.getCurrentUser());
         }
     }
@@ -2381,12 +2302,7 @@
         }
 
         if (allowRequest && shouldTriggerActiveUnlock()) {
-            if (DEBUG_ACTIVE_UNLOCK) {
-                Log.d("ActiveUnlock", "reportUserRequestedUnlock"
-                        + " origin=" + requestOrigin.name()
-                        + " reason=" + reason
-                        + " dismissKeyguard=" + dismissKeyguard);
-            }
+            mLogger.logUserRequestedUnlock(requestOrigin, reason, dismissKeyguard);
             mTrustManager.reportUserRequestedUnlock(KeyguardUpdateMonitor.getCurrentUser(),
                     dismissKeyguard);
         }
@@ -2536,32 +2452,30 @@
         final boolean shouldListen = shouldListenKeyguardState && shouldListenUserState
                 && shouldListenBouncerState && shouldListenUdfpsState && !isFingerprintLockedOut();
 
-        if (DEBUG_FINGERPRINT || DEBUG_SPEW) {
-            maybeLogListenerModelData(
-                    new KeyguardFingerprintListenModel(
-                        System.currentTimeMillis(),
-                        user,
-                        shouldListen,
-                        biometricEnabledForUser,
-                        mBouncerIsOrWillBeShowing,
-                        userCanSkipBouncer,
-                        mCredentialAttempted,
-                        mDeviceInteractive,
-                        mIsDreaming,
-                        isEncryptedOrLockdownForUser,
-                        fingerprintDisabledForUser,
-                        mFingerprintLockedOut,
-                        mGoingToSleep,
-                        mKeyguardGoingAway,
-                        mKeyguardIsVisible,
-                        mKeyguardOccluded,
-                        mOccludingAppRequestingFp,
-                        mIsPrimaryUser,
-                        shouldListenForFingerprintAssistant,
-                        mSwitchingUser,
-                        isUdfps,
-                        userDoesNotHaveTrust));
-        }
+        maybeLogListenerModelData(
+                new KeyguardFingerprintListenModel(
+                    System.currentTimeMillis(),
+                    user,
+                    shouldListen,
+                    biometricEnabledForUser,
+                    mBouncerIsOrWillBeShowing,
+                    userCanSkipBouncer,
+                    mCredentialAttempted,
+                    mDeviceInteractive,
+                    mIsDreaming,
+                    isEncryptedOrLockdownForUser,
+                    fingerprintDisabledForUser,
+                    mFingerprintLockedOut,
+                    mGoingToSleep,
+                    mKeyguardGoingAway,
+                    mKeyguardIsVisible,
+                    mKeyguardOccluded,
+                    mOccludingAppRequestingFp,
+                    mIsPrimaryUser,
+                    shouldListenForFingerprintAssistant,
+                    mSwitchingUser,
+                    isUdfps,
+                    userDoesNotHaveTrust));
 
         return shouldListen;
     }
@@ -2576,8 +2490,11 @@
         }
 
         final boolean statusBarShadeLocked = mStatusBarState == StatusBarState.SHADE_LOCKED;
-        final boolean awakeKeyguard = mKeyguardIsVisible && mDeviceInteractive && !mGoingToSleep
-                && !statusBarShadeLocked;
+        // mKeyguardIsVisible is true even when the bouncer is shown, we don't want to run face auth
+        // on bouncer if both fp and fingerprint are enrolled.
+        final boolean awakeKeyguardExcludingBouncerShowing = mKeyguardIsVisible
+                && mDeviceInteractive && !mGoingToSleep
+                && !statusBarShadeLocked && !mBouncerFullyShown;
         final int user = getCurrentUser();
         final int strongAuth = mStrongAuthTracker.getStrongAuthForUser(user);
         final boolean isLockDown =
@@ -2617,79 +2534,75 @@
         final boolean faceDisabledForUser = isFaceDisabled(user);
         final boolean biometricEnabledForUser = mBiometricEnabledForUser.get(user);
         final boolean shouldListenForFaceAssistant = shouldListenForFaceAssistant();
+        final boolean onlyFaceEnrolled = isOnlyFaceEnrolled();
 
         // Only listen if this KeyguardUpdateMonitor belongs to the primary user. There is an
         // instance of KeyguardUpdateMonitor for each user but KeyguardUpdateMonitor is user-aware.
         final boolean shouldListen =
-                (mBouncerFullyShown && !mGoingToSleep
+                ((mBouncerFullyShown && !mGoingToSleep && onlyFaceEnrolled)
                         || mAuthInterruptActive
                         || mOccludingAppRequestingFace
-                        || awakeKeyguard
+                        || awakeKeyguardExcludingBouncerShowing
                         || shouldListenForFaceAssistant
                         || mAuthController.isUdfpsFingerDown()
                         || mUdfpsBouncerShowing)
                 && !mSwitchingUser && !faceDisabledForUser && becauseCannotSkipBouncer
-                && !mKeyguardGoingAway && biometricEnabledForUser && !mLockIconPressed
+                && !mKeyguardGoingAway && biometricEnabledForUser
                 && strongAuthAllowsScanning && mIsPrimaryUser
                 && (!mSecureCameraLaunched || mOccludingAppRequestingFace)
                 && !faceAuthenticated
                 && !fpLockedout;
 
         // Aggregate relevant fields for debug logging.
-        if (DEBUG_FACE || DEBUG_SPEW) {
-            maybeLogListenerModelData(
-                    new KeyguardFaceListenModel(
-                        System.currentTimeMillis(),
-                        user,
-                        shouldListen,
-                        mAuthInterruptActive,
-                        becauseCannotSkipBouncer,
-                        biometricEnabledForUser,
-                        mBouncerFullyShown,
-                        faceAuthenticated,
-                        faceDisabledForUser,
-                        mGoingToSleep,
-                        awakeKeyguard,
-                        mKeyguardGoingAway,
-                        shouldListenForFaceAssistant,
-                        mLockIconPressed,
-                        mOccludingAppRequestingFace,
-                        mIsPrimaryUser,
-                        strongAuthAllowsScanning,
-                        mSecureCameraLaunched,
-                        mSwitchingUser,
-                        mUdfpsBouncerShowing));
-        }
+        maybeLogListenerModelData(
+                new KeyguardFaceListenModel(
+                    System.currentTimeMillis(),
+                    user,
+                    shouldListen,
+                    mAuthInterruptActive,
+                    becauseCannotSkipBouncer,
+                    biometricEnabledForUser,
+                    mBouncerFullyShown,
+                    faceAuthenticated,
+                    faceDisabledForUser,
+                    mGoingToSleep,
+                    awakeKeyguardExcludingBouncerShowing,
+                    mKeyguardGoingAway,
+                    shouldListenForFaceAssistant,
+                    mOccludingAppRequestingFace,
+                    onlyFaceEnrolled,
+                    mIsPrimaryUser,
+                    strongAuthAllowsScanning,
+                    mSecureCameraLaunched,
+                    mSwitchingUser,
+                    mUdfpsBouncerShowing));
 
         return shouldListen;
     }
 
-    private void maybeLogListenerModelData(KeyguardListenModel model) {
-        // Too chatty, but very useful when debugging issues.
-        if (DEBUG_SPEW) {
-            Log.v(TAG, model.toString());
-        }
+    private boolean isOnlyFaceEnrolled() {
+        return isFaceAuthEnabledForUser(getCurrentUser())
+                && !isUnlockWithFingerprintPossible(getCurrentUser());
+    }
 
-        if (DEBUG_ACTIVE_UNLOCK
-                && model instanceof KeyguardActiveUnlockModel) {
+    private void maybeLogListenerModelData(KeyguardListenModel model) {
+        mLogger.logKeyguardListenerModel(model);
+
+        if (model instanceof KeyguardActiveUnlockModel) {
             mListenModels.add(model);
             return;
         }
 
         // Add model data to the historical buffer.
         final boolean notYetRunning =
-                (DEBUG_FACE
-                    && model instanceof KeyguardFaceListenModel
-                    && mFaceRunningState != BIOMETRIC_STATE_RUNNING)
-                || (DEBUG_FINGERPRINT
-                    && model instanceof KeyguardFingerprintListenModel
-                    && mFingerprintRunningState != BIOMETRIC_STATE_RUNNING);
+                (model instanceof KeyguardFaceListenModel
+                        && mFaceRunningState != BIOMETRIC_STATE_RUNNING)
+                || (model instanceof KeyguardFingerprintListenModel
+                        && mFingerprintRunningState != BIOMETRIC_STATE_RUNNING);
         final boolean running =
-                (DEBUG_FACE
-                        && model instanceof KeyguardFaceListenModel
+                (model instanceof KeyguardFaceListenModel
                         && mFaceRunningState == BIOMETRIC_STATE_RUNNING)
-                        || (DEBUG_FINGERPRINT
-                        && model instanceof KeyguardFingerprintListenModel
+                        || (model instanceof KeyguardFingerprintListenModel
                         && mFingerprintRunningState == BIOMETRIC_STATE_RUNNING);
         if (notYetRunning && model.getListening()
                 || running && !model.getListening()) {
@@ -2697,25 +2610,13 @@
         }
     }
 
-    /**
-     * Whenever the lock icon is long pressed, disabling trust agents.
-     * This means that we cannot auth passively (face) until the user presses power.
-     */
-    public void onLockIconPressed() {
-        mLockIconPressed = true;
-        final int userId = getCurrentUser();
-        mUserFaceAuthenticated.put(userId, null);
-        updateFaceListeningState(BIOMETRIC_ACTION_UPDATE);
-        mStrongAuthTracker.onStrongAuthRequiredChanged(userId);
-    }
-
     private void startListeningForFingerprint() {
         final int userId = getCurrentUser();
         final boolean unlockPossible = isUnlockWithFingerprintPossible(userId);
         if (mFingerprintCancelSignal != null) {
-            Log.e(TAG, "Cancellation signal is not null, high chance of bug in fp auth lifecycle"
-                    + " management. FP state: " + mFingerprintRunningState
-                    + ", unlockPossible: " + unlockPossible);
+            mLogger.logUnexpectedFpCancellationSignalState(
+                    mFingerprintRunningState,
+                    unlockPossible);
         }
 
         if (mFingerprintRunningState == BIOMETRIC_STATE_CANCELLING) {
@@ -2726,7 +2627,7 @@
             // Waiting for restart via handleFingerprintError().
             return;
         }
-        if (DEBUG) Log.v(TAG, "startListeningForFingerprint()");
+        mLogger.v("startListeningForFingerprint()");
 
         if (unlockPossible) {
             mFingerprintCancelSignal = new CancellationSignal();
@@ -2747,9 +2648,7 @@
         final int userId = getCurrentUser();
         final boolean unlockPossible = isUnlockWithFacePossible(userId);
         if (mFaceCancelSignal != null) {
-            Log.e(TAG, "Cancellation signal is not null, high chance of bug in face auth lifecycle"
-                    + " management. Face state: " + mFaceRunningState
-                    + ", unlockPossible: " + unlockPossible);
+            mLogger.logUnexpectedFaceCancellationSignalState(mFaceRunningState, unlockPossible);
         }
 
         if (mFaceRunningState == BIOMETRIC_STATE_CANCELLING) {
@@ -2759,7 +2658,7 @@
             // Waiting for ERROR_CANCELED before requesting auth again
             return;
         }
-        if (DEBUG) Log.v(TAG, "startListeningForFace(): " + mFaceRunningState);
+        mLogger.logStartedListeningForFace(mFaceRunningState);
 
         if (unlockPossible) {
             mFaceCancelSignal = new CancellationSignal();
@@ -2825,7 +2724,7 @@
     }
 
     private void stopListeningForFingerprint() {
-        if (DEBUG) Log.v(TAG, "stopListeningForFingerprint()");
+        mLogger.v("stopListeningForFingerprint()");
         if (mFingerprintRunningState == BIOMETRIC_STATE_RUNNING) {
             if (mFingerprintCancelSignal != null) {
                 mFingerprintCancelSignal.cancel();
@@ -2841,7 +2740,7 @@
     }
 
     private void stopListeningForFace() {
-        if (DEBUG) Log.v(TAG, "stopListeningForFace()");
+        mLogger.v("stopListeningForFace()");
         if (mFaceRunningState == BIOMETRIC_STATE_RUNNING) {
             if (mFaceCancelSignal != null) {
                 mFaceCancelSignal.cancel();
@@ -2870,7 +2769,7 @@
                 if (mDeviceProvisioned) {
                     mHandler.sendEmptyMessage(MSG_DEVICE_PROVISIONED);
                 }
-                if (DEBUG) Log.d(TAG, "DEVICE_PROVISIONED state = " + mDeviceProvisioned);
+                mLogger.logDeviceProvisionedState(mDeviceProvisioned);
             }
         };
 
@@ -2975,7 +2874,7 @@
      */
     private void handlePhoneStateChanged(String newState) {
         Assert.isMainThread();
-        if (DEBUG) Log.d(TAG, "handlePhoneStateChanged(" + newState + ")");
+        mLogger.logPhoneStateChanged(newState);
         if (TelephonyManager.EXTRA_STATE_IDLE.equals(newState)) {
             mPhoneState = TelephonyManager.CALL_STATE_IDLE;
         } else if (TelephonyManager.EXTRA_STATE_OFFHOOK.equals(newState)) {
@@ -2996,7 +2895,7 @@
      */
     private void handleTimeUpdate() {
         Assert.isMainThread();
-        if (DEBUG) Log.d(TAG, "handleTimeUpdate");
+        mLogger.d("handleTimeUpdate");
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
             if (cb != null) {
@@ -3010,7 +2909,7 @@
      */
     private void handleTimeZoneUpdate(String timeZone) {
         Assert.isMainThread();
-        if (DEBUG) Log.d(TAG, "handleTimeZoneUpdate");
+        mLogger.d("handleTimeZoneUpdate");
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
             if (cb != null) {
@@ -3028,7 +2927,7 @@
      */
     private void handleTimeFormatUpdate(String timeFormat) {
         Assert.isMainThread();
-        if (DEBUG) Log.d(TAG, "handleTimeFormatUpdate timeFormat=" + timeFormat);
+        mLogger.logTimeFormatChanged(timeFormat);
         for (int i = 0; i < mCallbacks.size(); i++) {
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
             if (cb != null) {
@@ -3042,7 +2941,7 @@
      */
     private void handleBatteryUpdate(BatteryStatus status) {
         Assert.isMainThread();
-        if (DEBUG) Log.d(TAG, "handleBatteryUpdate");
+        mLogger.d("handleBatteryUpdate");
         final boolean batteryUpdateInteresting = isBatteryUpdateInteresting(mBatteryStatus, status);
         mBatteryStatus = status;
         if (batteryUpdateInteresting) {
@@ -3079,14 +2978,11 @@
     @VisibleForTesting
     void handleSimStateChange(int subId, int slotId, int state) {
         Assert.isMainThread();
-        if (DEBUG_SIM_STATES) {
-            Log.d(TAG, "handleSimStateChange(subId=" + subId + ", slotId="
-                    + slotId + ", state=" + state + ")");
-        }
+        mLogger.logSimState(subId, slotId, state);
 
         boolean becameAbsent = false;
         if (!SubscriptionManager.isValidSubscriptionId(subId)) {
-            Log.w(TAG, "invalid subId in handleSimStateChange()");
+            mLogger.w("invalid subId in handleSimStateChange()");
             /* Only handle No SIM(ABSENT) and Card Error(CARD_IO_ERROR) due to
              * handleServiceStateChange() handle other case */
             if (state == TelephonyManager.SIM_STATE_ABSENT) {
@@ -3135,13 +3031,10 @@
      */
     @VisibleForTesting
     void handleServiceStateChange(int subId, ServiceState serviceState) {
-        if (DEBUG) {
-            Log.d(TAG,
-                    "handleServiceStateChange(subId=" + subId + ", serviceState=" + serviceState);
-        }
+        mLogger.logServiceStateChange(subId, serviceState);
 
         if (!SubscriptionManager.isValidSubscriptionId(subId)) {
-            Log.w(TAG, "invalid subId in handleServiceStateChange()");
+            mLogger.w("invalid subId in handleServiceStateChange()");
             return;
         } else {
             updateTelephonyCapable(true);
@@ -3163,7 +3056,7 @@
      */
     public void onKeyguardVisibilityChanged(boolean showing) {
         Assert.isMainThread();
-        Log.d(TAG, "onKeyguardVisibilityChanged(" + showing + ")");
+        mLogger.logKeyguardVisibilityChanged(showing);
         mKeyguardIsVisible = showing;
 
         if (showing) {
@@ -3179,25 +3072,11 @@
         updateBiometricListeningState(BIOMETRIC_ACTION_UPDATE);
     }
 
-    /** Notifies that the occluded state changed. */
-    public void onKeyguardOccludedChanged(boolean occluded) {
-        Assert.isMainThread();
-        if (DEBUG) {
-            Log.d(TAG, "onKeyguardOccludedChanged(" + occluded + ")");
-        }
-        for (int i = 0; i < mCallbacks.size(); i++) {
-            KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
-            if (cb != null) {
-                cb.onKeyguardOccludedChanged(occluded);
-            }
-        }
-    }
-
     /**
      * Handle {@link #MSG_KEYGUARD_RESET}
      */
     private void handleKeyguardReset() {
-        if (DEBUG) Log.d(TAG, "handleKeyguardReset");
+        mLogger.d("handleKeyguardReset");
         updateBiometricListeningState(BIOMETRIC_ACTION_UPDATE);
         mNeedsSlowUnlockTransition = resolveNeedsSlowUnlockTransition();
     }
@@ -3211,8 +3090,8 @@
                 0 /* flags */, getCurrentUser());
 
         if (resolveInfo == null) {
-            Log.w(TAG, "resolveNeedsSlowUnlockTransition: returning false since activity "
-                    + "could not be resolved.");
+            mLogger.w("resolveNeedsSlowUnlockTransition: returning false since activity could "
+                            + "not be resolved.");
             return false;
         }
 
@@ -3230,11 +3109,7 @@
         final boolean wasBouncerFullyShown = mBouncerFullyShown;
         mBouncerIsOrWillBeShowing = bouncerIsOrWillBeShowing == 1;
         mBouncerFullyShown = bouncerFullyShown == 1;
-        if (DEBUG) {
-            Log.d(TAG, "handleKeyguardBouncerChanged"
-                    + " bouncerIsOrWillBeShowing=" + mBouncerIsOrWillBeShowing
-                    + " bouncerFullyShowing=" + mBouncerFullyShown);
-        }
+        mLogger.logKeyguardBouncerChanged(mBouncerIsOrWillBeShowing, mBouncerFullyShown);
 
         if (mBouncerFullyShown) {
             // If the bouncer is shown, always clear this flag. This can happen in the following
@@ -3347,10 +3222,6 @@
         return false;
     }
 
-    private boolean isAutomotive() {
-        return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE);
-    }
-
     /**
      * Remove the given observer's callback.
      *
@@ -3358,9 +3229,7 @@
      */
     public void removeCallback(KeyguardUpdateMonitorCallback callback) {
         Assert.isMainThread();
-        if (DEBUG) {
-            Log.v(TAG, "*** unregister callback for " + callback);
-        }
+        mLogger.logUnregisterCallback(callback);
 
         mCallbacks.removeIf(el -> el.get() == callback);
     }
@@ -3373,15 +3242,14 @@
      */
     public void registerCallback(KeyguardUpdateMonitorCallback callback) {
         Assert.isMainThread();
-        if (DEBUG) Log.v(TAG, "*** register callback for " + callback);
+        mLogger.logRegisterCallback(callback);
         // Prevent adding duplicate callbacks
 
         for (int i = 0; i < mCallbacks.size(); i++) {
             if (mCallbacks.get(i).get() == callback) {
-                if (DEBUG) {
-                    Log.e(TAG, "Object tried to add another callback",
-                            new Exception("Called by"));
-                }
+                mLogger.logException(
+                        new Exception("Called by"),
+                        "Object tried to add another callback");
                 return;
             }
         }
@@ -3413,8 +3281,6 @@
         callback.onTimeChanged();
         callback.onPhoneStateChanged(mPhoneState);
         callback.onRefreshCarrierInfo();
-        callback.onClockVisibilityChanged();
-        callback.onKeyguardOccludedChanged(mKeyguardOccluded);
         callback.onKeyguardVisibilityChangedRaw(mKeyguardIsVisible);
         callback.onTelephonyCapable(mTelephonyCapable);
 
@@ -3433,11 +3299,7 @@
      */
     public void sendKeyguardBouncerChanged(boolean bouncerIsOrWillBeShowing,
             boolean bouncerFullyShown) {
-        if (DEBUG) {
-            Log.d(TAG, "sendKeyguardBouncerChanged"
-                    + " bouncerIsOrWillBeShowing=" + bouncerIsOrWillBeShowing
-                    + " bouncerFullyShown=" + bouncerFullyShown);
-        }
+        mLogger.logSendKeyguardBouncerChanged(bouncerIsOrWillBeShowing, bouncerFullyShown);
         Message message = mHandler.obtainMessage(MSG_KEYGUARD_BOUNCER_CHANGED);
         message.arg1 = bouncerIsOrWillBeShowing ? 1 : 0;
         message.arg2 = bouncerFullyShown ? 1 : 0;
@@ -3454,7 +3316,7 @@
      */
     @MainThread
     public void reportSimUnlocked(int subId) {
-        if (DEBUG_SIM_STATES) Log.v(TAG, "reportSimUnlocked(subId=" + subId + ")");
+        mLogger.logSimUnlocked(subId);
         handleSimStateChange(subId, getSlotId(subId), TelephonyManager.SIM_STATE_READY);
     }
 
@@ -3591,10 +3453,6 @@
                 || state == TelephonyManager.SIM_STATE_PERM_DISABLED);
     }
 
-    public DisplayClientState getCachedDisplayClientState() {
-        return mDisplayClientState;
-    }
-
     // TODO: use these callbacks elsewhere in place of the existing notifyScreen*()
     // (KeyguardViewMediator, KeyguardHostView)
     public void dispatchStartedWakingUp() {
@@ -3643,6 +3501,10 @@
         mHandler.sendEmptyMessage(MSG_KEYGUARD_DISMISS_ANIMATION_FINISHED);
     }
 
+    /**
+     * @return true when the screen is on (including when a screensaver is showing),
+     * false when the screen is OFF or DOZE (including showing AOD UI)
+     */
     public boolean isDeviceInteractive() {
         return mDeviceInteractive;
     }
@@ -3731,7 +3593,9 @@
         try {
             ActivityManager.getService().unregisterUserSwitchObserver(mUserSwitchObserver);
         } catch (RemoteException e) {
-            Log.d(TAG, "RemoteException onDestroy. cannot unregister userSwitchObserver");
+            mLogger.logException(
+                    e,
+                    "RemoteException onDestroy. cannot unregister userSwitchObserver");
         }
 
         TaskStackChangeListeners.getInstance().unregisterTaskStackListener(mTaskStackListener);
@@ -3785,6 +3649,8 @@
             pw.println("    mFingerprintLockedOut=" + mFingerprintLockedOut);
             pw.println("    mFingerprintLockedOutPermanent=" + mFingerprintLockedOutPermanent);
             pw.println("    enabledByUser=" + mBiometricEnabledForUser.get(userId));
+            pw.println("    mKeyguardOccluded=" + mKeyguardOccluded);
+            pw.println("    mIsDreaming=" + mIsDreaming);
             if (isUdfpsSupported()) {
                 pw.println("        udfpsEnrolled=" + isUdfpsEnrolled());
                 pw.println("        shouldListenForUdfps=" + shouldListenForFingerprint(true));
@@ -3817,9 +3683,5 @@
             pw.println("    mNeedsSlowUnlockTransition=" + mNeedsSlowUnlockTransition);
         }
         mListenModels.print(pw);
-
-        if (mIsAutomotive) {
-            pw.println("  Running on Automotive build");
-        }
     }
 }
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java
index 051b81e..99e0ce2 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java
@@ -80,12 +80,6 @@
      */
     public void onKeyguardVisibilityChanged(boolean showing) { }
 
-    /**
-     * Called when the keyguard occluded state changes.
-     * @param occluded Indicates if the keyguard is now occluded.
-     */
-    public void onKeyguardOccludedChanged(boolean occluded) { }
-
     public void onKeyguardVisibilityChangedRaw(boolean showing) {
         final long now = SystemClock.elapsedRealtime();
         if (showing == mShowing
@@ -117,12 +111,6 @@
     public void onKeyguardDismissAnimationFinished() { }
 
     /**
-     * Called when visibility of lockscreen clock changes, such as when
-     * obscured by a widget.
-     */
-    public void onClockVisibilityChanged() { }
-
-    /**
      * Called when the device becomes provisioned
      */
     public void onDeviceProvisioned() { }
@@ -151,11 +139,6 @@
     public void onSimStateChanged(int subId, int slotId, int simState) { }
 
     /**
-     * Called when the user's info changed.
-     */
-    public void onUserInfoChanged(int userId) { }
-
-    /**
      * Called when a user got unlocked.
      */
     public void onUserUnlocked() { }
@@ -260,11 +243,6 @@
             BiometricSourceType biometricSourceType) { }
 
     /**
-     * Called when the state of face unlock changed.
-     */
-    public void onFaceUnlockStateChanged(boolean running, int userId) { }
-
-    /**
      * Called when biometric running state changed.
      */
     public void onBiometricRunningStateChanged(boolean running,
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java
index ca8728a..8293c74 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java
@@ -23,10 +23,10 @@
 import androidx.annotation.Nullable;
 
 import com.android.systemui.keyguard.KeyguardViewMediator;
+import com.android.systemui.shade.NotificationPanelViewController;
 import com.android.systemui.statusbar.phone.BiometricUnlockController;
 import com.android.systemui.statusbar.phone.CentralSurfaces;
 import com.android.systemui.statusbar.phone.KeyguardBypassController;
-import com.android.systemui.statusbar.phone.NotificationPanelViewController;
 import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
 
 /**
diff --git a/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java b/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java
index 0097196..06e1828 100644
--- a/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java
@@ -23,7 +23,6 @@
 import static com.android.keyguard.LockIconView.ICON_UNLOCK;
 import static com.android.systemui.classifier.Classifier.LOCK_ICON;
 import static com.android.systemui.doze.util.BurnInHelperKt.getBurnInOffset;
-import static com.android.systemui.doze.util.BurnInHelperKt.getBurnInProgressOffset;
 
 import android.content.res.Configuration;
 import android.content.res.Resources;
@@ -403,7 +402,6 @@
         float offsetY = MathUtils.lerp(0f,
                 getBurnInOffset(mMaxBurnInOffsetY * 2, false /* xAxis */)
                         - mMaxBurnInOffsetY, mInterpolatedDarkAmount);
-        float progress = MathUtils.lerp(0f, getBurnInProgressOffset(), mInterpolatedDarkAmount);
 
         mView.setTranslationX(offsetX);
         mView.setTranslationY(offsetY);
diff --git a/packages/SystemUI/src/com/android/keyguard/TextAnimator.kt b/packages/SystemUI/src/com/android/keyguard/TextAnimator.kt
deleted file mode 100644
index 3361015..0000000
--- a/packages/SystemUI/src/com/android/keyguard/TextAnimator.kt
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.keyguard
-
-import android.animation.Animator
-import android.animation.AnimatorListenerAdapter
-import android.animation.TimeInterpolator
-import android.animation.ValueAnimator
-import android.graphics.Canvas
-import android.graphics.Typeface
-import android.text.Layout
-import android.util.SparseArray
-
-private const val TAG_WGHT = "wght"
-private const val DEFAULT_ANIMATION_DURATION: Long = 300
-
-/**
- * This class provides text animation between two styles.
- *
- * Currently this class can provide text style animation for text weight and text size. For example
- * the simple view that draws text with animating text size is like as follows:
- *
- * <pre>
- * <code>
- *     class SimpleTextAnimation : View {
- *         @JvmOverloads constructor(...)
- *
- *         private val layout: Layout = ... // Text layout, e.g. StaticLayout.
- *
- *         // TextAnimator tells us when needs to be invalidate.
- *         private val animator = TextAnimator(layout) { invalidate() }
- *
- *         override fun onDraw(canvas: Canvas) = animator.draw(canvas)
- *
- *         // Change the text size with animation.
- *         fun setTextSize(sizePx: Float, animate: Boolean) {
- *             animator.setTextStyle(-1 /* unchanged weight */, sizePx, animate)
- *         }
- *     }
- * </code>
- * </pre>
- */
-class TextAnimator(
-    layout: Layout,
-    private val invalidateCallback: () -> Unit
-) {
-    // Following two members are for mutable for testing purposes.
-    internal var textInterpolator: TextInterpolator = TextInterpolator(layout)
-    internal var animator: ValueAnimator = ValueAnimator.ofFloat(1f).apply {
-        duration = DEFAULT_ANIMATION_DURATION
-        addUpdateListener {
-            textInterpolator.progress = it.animatedValue as Float
-            invalidateCallback()
-        }
-        addListener(object : AnimatorListenerAdapter() {
-            override fun onAnimationEnd(animation: Animator?) {
-                textInterpolator.rebase()
-            }
-            override fun onAnimationCancel(animation: Animator?) = textInterpolator.rebase()
-        })
-    }
-
-    private val typefaceCache = SparseArray<Typeface?>()
-
-    fun updateLayout(layout: Layout) {
-        textInterpolator.layout = layout
-    }
-
-    fun isRunning(): Boolean {
-        return animator.isRunning
-    }
-
-    fun draw(c: Canvas) = textInterpolator.draw(c)
-
-    /**
-     * Set text style with animation.
-     *
-     * By passing -1 to weight, the view preserve the current weight.
-     * By passing -1 to textSize, the view preserve the current text size.
-     * Bu passing -1 to duration, the default text animation, 1000ms, is used.
-     * By passing false to animate, the text will be updated without animation.
-     *
-     * @param weight an optional text weight.
-     * @param textSize an optional font size.
-     * @param colors an optional colors array that must be the same size as numLines passed to
-     *  the TextInterpolator
-     * @param animate an optional boolean indicating true for showing style transition as animation,
-     *                false for immediate style transition. True by default.
-     * @param duration an optional animation duration in milliseconds. This is ignored if animate is
-     *                 false.
-     * @param interpolator an optional time interpolator. If null is passed, last set interpolator
-     *                     will be used. This is ignored if animate is false.
-     */
-    fun setTextStyle(
-        weight: Int = -1,
-        textSize: Float = -1f,
-        color: Int? = null,
-        animate: Boolean = true,
-        duration: Long = -1L,
-        interpolator: TimeInterpolator? = null,
-        delay: Long = 0,
-        onAnimationEnd: Runnable? = null
-    ) {
-        if (animate) {
-            animator.cancel()
-            textInterpolator.rebase()
-        }
-
-        if (textSize >= 0) {
-            textInterpolator.targetPaint.textSize = textSize
-        }
-        if (weight >= 0) {
-            // Paint#setFontVariationSettings creates Typeface instance from scratch. To reduce the
-            // memory impact, cache the typeface result.
-            textInterpolator.targetPaint.typeface = typefaceCache.getOrElse(weight) {
-                textInterpolator.targetPaint.fontVariationSettings = "'$TAG_WGHT' $weight"
-                textInterpolator.targetPaint.typeface
-            }
-        }
-        if (color != null) {
-            textInterpolator.targetPaint.color = color
-        }
-        textInterpolator.onTargetPaintModified()
-
-        if (animate) {
-            animator.startDelay = delay
-            animator.duration = if (duration == -1L) {
-                DEFAULT_ANIMATION_DURATION
-            } else {
-                duration
-            }
-            interpolator?.let { animator.interpolator = it }
-            if (onAnimationEnd != null) {
-                val listener = object : AnimatorListenerAdapter() {
-                    override fun onAnimationEnd(animation: Animator?) {
-                        onAnimationEnd.run()
-                        animator.removeListener(this)
-                    }
-                    override fun onAnimationCancel(animation: Animator?) {
-                        animator.removeListener(this)
-                    }
-                }
-                animator.addListener(listener)
-            }
-            animator.start()
-        } else {
-            // No animation is requested, thus set base and target state to the same state.
-            textInterpolator.progress = 1f
-            textInterpolator.rebase()
-            invalidateCallback()
-        }
-    }
-}
-
-private fun <V> SparseArray<V>.getOrElse(key: Int, defaultValue: () -> V): V {
-    var v = get(key)
-    if (v == null) {
-        v = defaultValue()
-        put(key, v)
-    }
-    return v
-}
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/keyguard/TextInterpolator.kt b/packages/SystemUI/src/com/android/keyguard/TextInterpolator.kt
deleted file mode 100644
index 5d5797c..0000000
--- a/packages/SystemUI/src/com/android/keyguard/TextInterpolator.kt
+++ /dev/null
@@ -1,444 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.keyguard
-
-import android.graphics.Canvas
-import android.graphics.Paint
-import android.graphics.fonts.Font
-import android.graphics.text.PositionedGlyphs
-import android.text.Layout
-import android.text.TextPaint
-import android.text.TextShaper
-import android.util.MathUtils
-import com.android.internal.graphics.ColorUtils
-import java.lang.Math.max
-
-/**
- * Provide text style linear interpolation for plain text.
- */
-class TextInterpolator(
-    layout: Layout
-) {
-
-    /**
-     * Returns base paint used for interpolation.
-     *
-     * Once you modified the style parameters, you have to call reshapeText to recalculate base text
-     * layout.
-     *
-     * @return a paint object
-     */
-    val basePaint = TextPaint(layout.paint)
-
-    /**
-     * Returns target paint used for interpolation.
-     *
-     * Once you modified the style parameters, you have to call reshapeText to recalculate target
-     * text layout.
-     *
-     * @return a paint object
-     */
-    val targetPaint = TextPaint(layout.paint)
-
-    /**
-     * A class represents a single font run.
-     *
-     * A font run is a range that will be drawn with the same font.
-     */
-    private data class FontRun(
-        val start: Int, // inclusive
-        val end: Int, // exclusive
-        var baseFont: Font,
-        var targetFont: Font
-    ) {
-        val length: Int get() = end - start
-    }
-
-    /**
-     * A class represents text layout of a single run.
-     */
-    private class Run(
-        val glyphIds: IntArray,
-        val baseX: FloatArray, // same length as glyphIds
-        val baseY: FloatArray, // same length as glyphIds
-        val targetX: FloatArray, // same length as glyphIds
-        val targetY: FloatArray, // same length as glyphIds
-        val fontRuns: List<FontRun>
-    )
-
-    /**
-     * A class represents text layout of a single line.
-     */
-    private class Line(
-        val runs: List<Run>
-    )
-
-    private var lines = listOf<Line>()
-    private val fontInterpolator = FontInterpolator()
-
-    // Recycling object for glyph drawing. Will be extended for the longest font run if needed.
-    private val tmpDrawPaint = TextPaint()
-    private var tmpPositionArray = FloatArray(20)
-
-    /**
-     * The progress position of the interpolation.
-     *
-     * The 0f means the start state, 1f means the end state.
-     */
-    var progress: Float = 0f
-
-    /**
-     * The layout used for drawing text.
-     *
-     * Only non-styled text is supported. Even if the given layout is created from Spanned, the
-     * span information is not used.
-     *
-     * The paint objects used for interpolation are not changed by this method call.
-     *
-     * Note: disabling ligature is strongly recommended if you give extra letter spacing since they
-     * may be disjointed based on letter spacing value and cannot be interpolated. Animator will
-     * throw runtime exception if they cannot be interpolated.
-     */
-    var layout: Layout = layout
-        get() = field
-        set(value) {
-            field = value
-            shapeText(value)
-        }
-
-    init {
-        // shapeText needs to be called after all members are initialized.
-        shapeText(layout)
-    }
-
-    /**
-     * Recalculate internal text layout for interpolation.
-     *
-     * Whenever the target paint is modified, call this method to recalculate internal
-     * text layout used for interpolation.
-     */
-    fun onTargetPaintModified() {
-        updatePositionsAndFonts(shapeText(layout, targetPaint), updateBase = false)
-    }
-
-    /**
-     * Recalculate internal text layout for interpolation.
-     *
-     * Whenever the base paint is modified, call this method to recalculate internal
-     * text layout used for interpolation.
-     */
-    fun onBasePaintModified() {
-        updatePositionsAndFonts(shapeText(layout, basePaint), updateBase = true)
-    }
-
-    /**
-     * Rebase the base state to the middle of the interpolation.
-     *
-     * The text interpolator does not calculate all the text position by text shaper due to
-     * performance reasons. Instead, the text interpolator shape the start and end state and
-     * calculate text position of the middle state by linear interpolation. Due to this trick,
-     * the text positions of the middle state is likely different from the text shaper result.
-     * So, if you want to start animation from the middle state, you will see the glyph jumps due to
-     * this trick, i.e. the progress 0.5 of interpolation between weight 400 and 700 is different
-     * from text shape result of weight 550.
-     *
-     * After calling this method, do not call onBasePaintModified() since it reshape the text and
-     * update the base state. As in above notice, the text shaping result at current progress is
-     * different shaped result. By calling onBasePaintModified(), you may see the glyph jump.
-     *
-     * By calling this method, the progress will be reset to 0.
-     *
-     * This API is useful to continue animation from the middle of the state. For example, if you
-     * animate weight from 200 to 400, then if you want to move back to 200 at the half of the
-     * animation, it will look like
-     *
-     * <pre>
-     * <code>
-     *     val interp = TextInterpolator(layout)
-     *
-     *     // Interpolate between weight 200 to 400.
-     *     interp.basePaint.fontVariationSettings = "'wght' 200"
-     *     interp.onBasePaintModified()
-     *     interp.targetPaint.fontVariationSettings = "'wght' 400"
-     *     interp.onTargetPaintModified()
-     *
-     *     // animate
-     *     val animator = ValueAnimator.ofFloat(1f).apply {
-     *         addUpdaterListener {
-     *             interp.progress = it.animateValue as Float
-     *         }
-     *     }.start()
-     *
-     *     // Here, assuming you receive some event and want to start new animation from current
-     *     // state.
-     *     OnSomeEvent {
-     *         animator.cancel()
-     *
-     *         // start another animation from the current state.
-     *         interp.rebase() // Use current state as base state.
-     *         interp.targetPaint.fontVariationSettings = "'wght' 200" // set new target
-     *         interp.onTargetPaintModified() // reshape target
-     *
-     *         // Here the textInterpolator interpolate from 'wght' from 300 to 200 if the current
-     *         // progress is 0.5
-     *         animator.start()
-     *     }
-     * </code>
-     * </pre>
-     *
-     */
-    fun rebase() {
-        if (progress == 0f) {
-            return
-        } else if (progress == 1f) {
-            basePaint.set(targetPaint)
-        } else {
-            lerp(basePaint, targetPaint, progress, tmpDrawPaint)
-            basePaint.set(tmpDrawPaint)
-        }
-
-        lines.forEach { line ->
-            line.runs.forEach { run ->
-                for (i in run.baseX.indices) {
-                    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)
-                }
-            }
-        }
-
-        progress = 0f
-    }
-
-    /**
-     * Draws interpolated text at the given progress.
-     *
-     * @param canvas a canvas.
-     */
-    fun draw(canvas: Canvas) {
-        lerp(basePaint, targetPaint, progress, tmpDrawPaint)
-        lines.forEachIndexed { lineNo, line ->
-            line.runs.forEach { run ->
-                canvas.save()
-                try {
-                    // Move to drawing origin.
-                    val origin = layout.getDrawOrigin(lineNo)
-                    canvas.translate(origin, layout.getLineBaseline(lineNo).toFloat())
-
-                    run.fontRuns.forEach { fontRun ->
-                        drawFontRun(canvas, run, fontRun, tmpDrawPaint)
-                    }
-                } finally {
-                    canvas.restore()
-                }
-            }
-        }
-    }
-
-    // Shape text with current paint parameters.
-    private fun shapeText(layout: Layout) {
-        val baseLayout = shapeText(layout, basePaint)
-        val targetLayout = shapeText(layout, targetPaint)
-
-        require(baseLayout.size == targetLayout.size) {
-            "The new layout result has different line count."
-        }
-
-        var maxRunLength = 0
-        lines = baseLayout.zip(targetLayout) { baseLine, targetLine ->
-            val runs = baseLine.zip(targetLine) { base, target ->
-
-                require(base.glyphCount() == target.glyphCount()) {
-                    "Inconsistent glyph count at line ${lines.size}"
-                }
-
-                val glyphCount = base.glyphCount()
-
-                // Good to recycle the array if the existing array can hold the new layout result.
-                val glyphIds = IntArray(glyphCount) {
-                    base.getGlyphId(it).also { baseGlyphId ->
-                        require(baseGlyphId == target.getGlyphId(it)) {
-                            "Inconsistent glyph ID at $it in line ${lines.size}"
-                        }
-                    }
-                }
-
-                val baseX = FloatArray(glyphCount) { base.getGlyphX(it) }
-                val baseY = FloatArray(glyphCount) { base.getGlyphY(it) }
-                val targetX = FloatArray(glyphCount) { target.getGlyphX(it) }
-                val targetY = FloatArray(glyphCount) { target.getGlyphY(it) }
-
-                // Calculate font runs
-                val fontRun = mutableListOf<FontRun>()
-                if (glyphCount != 0) {
-                    var start = 0
-                    var baseFont = base.getFont(start)
-                    var targetFont = target.getFont(start)
-                    require(FontInterpolator.canInterpolate(baseFont, targetFont)) {
-                        "Cannot interpolate font at $start ($baseFont vs $targetFont)"
-                    }
-
-                    for (i in 1 until glyphCount) {
-                        val nextBaseFont = base.getFont(i)
-                        val nextTargetFont = target.getFont(i)
-
-                        if (baseFont !== nextBaseFont) {
-                            require(targetFont !== nextTargetFont) {
-                                "Base font has changed at $i but target font has not changed."
-                            }
-                            // Font transition point. push run and reset context.
-                            fontRun.add(FontRun(start, i, baseFont, targetFont))
-                            maxRunLength = max(maxRunLength, i - start)
-                            baseFont = nextBaseFont
-                            targetFont = nextTargetFont
-                            start = i
-                            require(FontInterpolator.canInterpolate(baseFont, targetFont)) {
-                                "Cannot interpolate font at $start ($baseFont vs $targetFont)"
-                            }
-                        } else { // baseFont === nextBaseFont
-                            require(targetFont === nextTargetFont) {
-                                "Base font has not changed at $i but target font has changed."
-                            }
-                        }
-                    }
-                    fontRun.add(FontRun(start, glyphCount, baseFont, targetFont))
-                    maxRunLength = max(maxRunLength, glyphCount - start)
-                }
-                Run(glyphIds, baseX, baseY, targetX, targetY, fontRun)
-            }
-            Line(runs)
-        }
-
-        // Update float array used for drawing.
-        if (tmpPositionArray.size < maxRunLength * 2) {
-            tmpPositionArray = FloatArray(maxRunLength * 2)
-        }
-    }
-
-    // Draws single font run.
-    private fun drawFontRun(c: Canvas, line: Run, run: FontRun, paint: Paint) {
-        var arrayIndex = 0
-        for (i in run.start until run.end) {
-            tmpPositionArray[arrayIndex++] =
-                    MathUtils.lerp(line.baseX[i], line.targetX[i], progress)
-            tmpPositionArray[arrayIndex++] =
-                    MathUtils.lerp(line.baseY[i], line.targetY[i], progress)
-        }
-
-        c.drawGlyphs(
-                line.glyphIds,
-                run.start,
-                tmpPositionArray,
-                0,
-                run.length,
-                fontInterpolator.lerp(run.baseFont, run.targetFont, progress),
-                paint)
-    }
-
-    private fun updatePositionsAndFonts(
-        layoutResult: List<List<PositionedGlyphs>>,
-        updateBase: Boolean
-    ) {
-        // Update target positions with newly calculated text layout.
-        check(layoutResult.size == lines.size) {
-            "The new layout result has different line count."
-        }
-
-        lines.zip(layoutResult) { line, runs ->
-            line.runs.zip(runs) { lineRun, newGlyphs ->
-                require(newGlyphs.glyphCount() == lineRun.glyphIds.size) {
-                    "The new layout has different glyph count."
-                }
-
-                lineRun.fontRuns.forEach { run ->
-                    val newFont = newGlyphs.getFont(run.start)
-                    for (i in run.start until run.end) {
-                        require(newGlyphs.getGlyphId(run.start) == lineRun.glyphIds[run.start]) {
-                            "The new layout has different glyph ID at ${run.start}"
-                        }
-                        require(newFont === newGlyphs.getFont(i)) {
-                            "The new layout has different font run." +
-                                    " $newFont vs ${newGlyphs.getFont(i)} at $i"
-                        }
-                    }
-
-                    // The passing base font and target font is already interpolatable, so just
-                    // check new font can be interpolatable with base font.
-                    require(FontInterpolator.canInterpolate(newFont, run.baseFont)) {
-                        "New font cannot be interpolated with existing font. $newFont," +
-                                " ${run.baseFont}"
-                    }
-
-                    if (updateBase) {
-                        run.baseFont = newFont
-                    } else {
-                        run.targetFont = newFont
-                    }
-                }
-
-                if (updateBase) {
-                    for (i in lineRun.baseX.indices) {
-                        lineRun.baseX[i] = newGlyphs.getGlyphX(i)
-                        lineRun.baseY[i] = newGlyphs.getGlyphY(i)
-                    }
-                } else {
-                    for (i in lineRun.baseX.indices) {
-                        lineRun.targetX[i] = newGlyphs.getGlyphX(i)
-                        lineRun.targetY[i] = newGlyphs.getGlyphY(i)
-                    }
-                }
-            }
-        }
-    }
-
-    // Linear interpolate the paint.
-    private fun lerp(from: Paint, to: Paint, progress: Float, out: Paint) {
-        out.set(from)
-
-        // Currently only font size & colors are interpolated.
-        // TODO(172943390): Add other interpolation or support custom interpolator.
-        out.textSize = MathUtils.lerp(from.textSize, to.textSize, progress)
-        out.color = ColorUtils.blendARGB(from.color, to.color, progress)
-    }
-
-    // Shape the text and stores the result to out argument.
-    private fun shapeText(
-        layout: Layout,
-        paint: TextPaint
-    ): List<List<PositionedGlyphs>> {
-        val out = mutableListOf<List<PositionedGlyphs>>()
-        for (lineNo in 0 until layout.lineCount) { // Shape all lines.
-            val lineStart = layout.getLineStart(lineNo)
-            val count = layout.getLineEnd(lineNo) - lineStart
-            val runs = mutableListOf<PositionedGlyphs>()
-            TextShaper.shapeText(layout.text, lineStart, count, layout.textDirectionHeuristic,
-                    paint) { _, _, glyphs, _ ->
-                runs.add(glyphs)
-            }
-            out.add(runs)
-        }
-        return out
-    }
-}
-
-private fun Layout.getDrawOrigin(lineNo: Int) =
-        if (getParagraphDirection(lineNo) == Layout.DIR_LEFT_TO_RIGHT) {
-            getLineLeft(lineNo)
-        } else {
-            getLineRight(lineNo)
-        }
diff --git a/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java b/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java
index 013cdac..9a0bfc1 100644
--- a/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java
+++ b/packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java
@@ -53,8 +53,11 @@
 
 /**
  * Manages custom clock faces for AOD and lock screen.
+ *
+ * @deprecated Migrate to ClockRegistry
  */
 @SysUISingleton
+@Deprecated
 public final class ClockManager {
 
     private static final String TAG = "ClockOptsProvider";
diff --git a/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardBouncerModule.java b/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardBouncerModule.java
index b3c1158..49e9783 100644
--- a/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardBouncerModule.java
+++ b/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardBouncerModule.java
@@ -16,6 +16,10 @@
 
 package com.android.keyguard.dagger;
 
+import static com.android.systemui.biometrics.SidefpsControllerKt.hasSideFpsSensor;
+
+import android.annotation.Nullable;
+import android.hardware.fingerprint.FingerprintManager;
 import android.view.LayoutInflater;
 import android.view.ViewGroup;
 
@@ -23,9 +27,14 @@
 import com.android.keyguard.KeyguardSecurityContainer;
 import com.android.keyguard.KeyguardSecurityViewFlipper;
 import com.android.systemui.R;
+import com.android.systemui.biometrics.SidefpsController;
 import com.android.systemui.dagger.qualifiers.RootView;
 import com.android.systemui.statusbar.phone.KeyguardBouncer;
 
+import java.util.Optional;
+
+import javax.inject.Provider;
+
 import dagger.Module;
 import dagger.Provides;
 
@@ -60,4 +69,16 @@
             KeyguardSecurityContainer containerView) {
         return containerView.findViewById(R.id.view_flipper);
     }
+
+    /** Provides {@link SidefpsController} if the device has the side fingerprint sensor. */
+    @Provides
+    @KeyguardBouncerScope
+    static Optional<SidefpsController> providesOptionalSidefpsController(
+            @Nullable FingerprintManager fingerprintManager,
+            Provider<SidefpsController> sidefpsControllerProvider) {
+        if (!hasSideFpsSensor(fingerprintManager)) {
+            return Optional.empty();
+        }
+        return Optional.of(sidefpsControllerProvider.get());
+    }
 }
diff --git a/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardStatusBarViewComponent.java b/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardStatusBarViewComponent.java
index 153da4b..d01c98a 100644
--- a/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardStatusBarViewComponent.java
+++ b/packages/SystemUI/src/com/android/keyguard/dagger/KeyguardStatusBarViewComponent.java
@@ -17,9 +17,9 @@
 package com.android.keyguard.dagger;
 
 import com.android.keyguard.KeyguardStatusViewController;
+import com.android.systemui.shade.NotificationPanelViewController;
 import com.android.systemui.statusbar.phone.KeyguardStatusBarView;
 import com.android.systemui.statusbar.phone.KeyguardStatusBarViewController;
-import com.android.systemui.statusbar.phone.NotificationPanelViewController;
 
 import dagger.BindsInstance;
 import dagger.Subcomponent;
diff --git a/packages/SystemUI/src/com/android/keyguard/logging/KeyguardUpdateMonitorLogger.kt b/packages/SystemUI/src/com/android/keyguard/logging/KeyguardUpdateMonitorLogger.kt
new file mode 100644
index 0000000..035b7f0
--- /dev/null
+++ b/packages/SystemUI/src/com/android/keyguard/logging/KeyguardUpdateMonitorLogger.kt
@@ -0,0 +1,326 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.keyguard.logging
+
+import android.hardware.biometrics.BiometricConstants.LockoutMode
+import android.telephony.ServiceState
+import android.telephony.SubscriptionInfo
+import com.android.keyguard.ActiveUnlockConfig
+import com.android.keyguard.KeyguardListenModel
+import com.android.keyguard.KeyguardUpdateMonitorCallback
+import com.android.systemui.log.LogBuffer
+import com.android.systemui.log.LogLevel
+import com.android.systemui.log.LogLevel.DEBUG
+import com.android.systemui.log.LogLevel.ERROR
+import com.android.systemui.log.LogLevel.INFO
+import com.android.systemui.log.LogLevel.VERBOSE
+import com.android.systemui.log.LogLevel.WARNING
+import com.android.systemui.log.dagger.KeyguardUpdateMonitorLog
+import com.google.errorprone.annotations.CompileTimeConstant
+import javax.inject.Inject
+
+private const val TAG = "KeyguardUpdateMonitorLog"
+
+/**
+ * Helper class for logging for [com.android.keyguard.KeyguardUpdateMonitor]
+ */
+class KeyguardUpdateMonitorLogger @Inject constructor(
+        @KeyguardUpdateMonitorLog private val logBuffer: LogBuffer
+) {
+    fun d(@CompileTimeConstant msg: String) = log(msg, DEBUG)
+
+    fun e(@CompileTimeConstant msg: String) = log(msg, ERROR)
+
+    fun v(@CompileTimeConstant msg: String) = log(msg, ERROR)
+
+    fun w(@CompileTimeConstant msg: String) = log(msg, WARNING)
+
+    fun log(@CompileTimeConstant msg: String, level: LogLevel) = logBuffer.log(TAG, level, msg)
+
+    fun logActiveUnlockTriggered(reason: String) {
+        logBuffer.log("ActiveUnlock", DEBUG,
+                { str1 = reason },
+                { "initiate active unlock triggerReason=$str1" })
+    }
+
+    fun logAuthInterruptDetected(active: Boolean) {
+        logBuffer.log(TAG, DEBUG,
+                { bool1 = active },
+                { "onAuthInterruptDetected($bool1)" })
+    }
+
+    fun logBroadcastReceived(action: String?) {
+        logBuffer.log(TAG, DEBUG, { str1 = action }, { "received broadcast $str1" })
+    }
+
+    fun logDeviceProvisionedState(deviceProvisioned: Boolean) {
+        logBuffer.log(TAG, DEBUG,
+                { bool1 = deviceProvisioned },
+                { "DEVICE_PROVISIONED state = $bool1" })
+    }
+
+    fun logException(ex: Exception, @CompileTimeConstant logMsg: String) {
+        logBuffer.log(TAG, ERROR, {}, { logMsg }, exception = ex)
+    }
+
+    fun logFaceAcquired(acquireInfo: Int) {
+        logBuffer.log(TAG, DEBUG,
+                { int1 = acquireInfo },
+                { "Face acquired acquireInfo=$int1" })
+    }
+
+    fun logFaceAuthDisabledForUser(userId: Int) {
+        logBuffer.log(TAG, DEBUG,
+                { int1 = userId },
+                { "Face authentication disabled by DPM for userId: $int1" })
+    }
+    fun logFaceAuthError(msgId: Int, originalErrMsg: String) {
+        logBuffer.log(TAG, DEBUG, {
+                    str1 = originalErrMsg
+                    int1 = msgId
+                }, { "Face error received: $str1 msgId= $int1" })
+    }
+
+    fun logFaceAuthForWrongUser(authUserId: Int) {
+        logBuffer.log(TAG, DEBUG,
+                { int1 = authUserId },
+                { "Face authenticated for wrong user: $int1" })
+    }
+
+    fun logFaceAuthHelpMsg(msgId: Int, helpMsg: String) {
+        logBuffer.log(TAG, DEBUG, {
+                    int1 = msgId
+                    str1 = helpMsg
+                }, { "Face help received, msgId: $int1 msg: $str1" })
+    }
+
+    fun logFaceAuthRequested(userInitiatedRequest: Boolean) {
+        logBuffer.log(TAG, DEBUG,
+                { bool1 = userInitiatedRequest },
+                { "requestFaceAuth() userInitiated=$bool1" })
+    }
+
+    fun logFaceAuthSuccess(userId: Int) {
+        logBuffer.log(TAG, DEBUG,
+                { int1 = userId },
+                { "Face auth succeeded for user $int1" })
+    }
+
+    fun logFaceLockoutReset(@LockoutMode mode: Int) {
+        logBuffer.log(TAG, DEBUG, { int1 = mode }, { "handleFaceLockoutReset: $int1" })
+    }
+
+    fun logFaceRunningState(faceRunningState: Int) {
+        logBuffer.log(TAG, DEBUG, { int1 = faceRunningState }, { "faceRunningState: $int1" })
+    }
+
+    fun logFingerprintAuthForWrongUser(authUserId: Int) {
+        logBuffer.log(TAG, DEBUG,
+                { int1 = authUserId },
+                { "Fingerprint authenticated for wrong user: $int1" })
+    }
+
+    fun logFingerprintDisabledForUser(userId: Int) {
+        logBuffer.log(TAG, DEBUG,
+                { int1 = userId },
+                { "Fingerprint disabled by DPM for userId: $int1" })
+    }
+
+    fun logFingerprintLockoutReset(@LockoutMode mode: Int) {
+        logBuffer.log(TAG, DEBUG, { int1 = mode }, { "handleFingerprintLockoutReset: $int1" })
+    }
+
+    fun logFingerprintRunningState(fingerprintRunningState: Int) {
+        logBuffer.log(TAG, DEBUG,
+                { int1 = fingerprintRunningState },
+                { "fingerprintRunningState: $int1" })
+    }
+
+    fun logInvalidSubId(subId: Int) {
+        logBuffer.log(TAG, INFO,
+                { int1 = subId },
+                { "Previously active sub id $int1 is now invalid, will remove" })
+    }
+
+    fun logKeyguardBouncerChanged(bouncerIsOrWillBeShowing: Boolean, bouncerFullyShown: Boolean) {
+        logBuffer.log(TAG, DEBUG, {
+            bool1 = bouncerIsOrWillBeShowing
+            bool2 = bouncerFullyShown
+        }, {
+            "handleKeyguardBouncerChanged " +
+                    "bouncerIsOrWillBeShowing=$bool1 bouncerFullyShowing=$bool2"
+        })
+    }
+
+    fun logKeyguardListenerModel(model: KeyguardListenModel) {
+        logBuffer.log(TAG, VERBOSE, { str1 = "$model" }, { str1!! })
+    }
+
+    fun logKeyguardVisibilityChanged(showing: Boolean) {
+        logBuffer.log(TAG, DEBUG, { bool1 = showing }, { "onKeyguardVisibilityChanged($bool1)" })
+    }
+
+    fun logMissingSupervisorAppError(userId: Int) {
+        logBuffer.log(TAG, ERROR,
+                { int1 = userId },
+                { "No Profile Owner or Device Owner supervision app found for User $int1" })
+    }
+
+    fun logPhoneStateChanged(newState: String) {
+        logBuffer.log(TAG, DEBUG,
+                { str1 = newState },
+                { "handlePhoneStateChanged($str1)" })
+    }
+
+    fun logRegisterCallback(callback: KeyguardUpdateMonitorCallback?) {
+        logBuffer.log(TAG, VERBOSE,
+                { str1 = "$callback" },
+                { "*** register callback for $str1" })
+    }
+
+    fun logRetryingAfterFaceHwUnavailable(retryCount: Int) {
+        logBuffer.log(TAG, WARNING,
+                { int1 = retryCount },
+                { "Retrying face after HW unavailable, attempt $int1" })
+    }
+
+    fun logRetryAfterFpHwUnavailable(retryCount: Int) {
+        logBuffer.log(TAG, WARNING,
+                { int1 = retryCount },
+                { "Retrying fingerprint attempt: $int1" })
+    }
+
+    fun logSendKeyguardBouncerChanged(
+        bouncerIsOrWillBeShowing: Boolean,
+        bouncerFullyShown: Boolean,
+    ) {
+        logBuffer.log(TAG, DEBUG, {
+            bool1 = bouncerIsOrWillBeShowing
+            bool2 = bouncerFullyShown
+        }, {
+            "sendKeyguardBouncerChanged bouncerIsOrWillBeShowing=$bool1 " +
+                    "bouncerFullyShown=$bool2"
+        })
+    }
+
+    fun logServiceStateChange(subId: Int, serviceState: ServiceState?) {
+        logBuffer.log(TAG, DEBUG, {
+            int1 = subId
+            str1 = "$serviceState"
+        }, { "handleServiceStateChange(subId=$int1, serviceState=$str1)" })
+    }
+
+    fun logServiceStateIntent(action: String, serviceState: ServiceState?, subId: Int) {
+        logBuffer.log(TAG, VERBOSE, {
+            str1 = action
+            str2 = "$serviceState"
+            int1 = subId
+        }, { "action $str1 serviceState=$str2 subId=$int1" })
+    }
+
+    fun logSimState(subId: Int, slotId: Int, state: Int) {
+        logBuffer.log(TAG, DEBUG, {
+            int1 = subId
+            int2 = slotId
+            long1 = state.toLong()
+        }, { "handleSimStateChange(subId=$int1, slotId=$int2, state=$long1)" })
+    }
+
+    fun logSimStateFromIntent(action: String, extraSimState: String, slotId: Int, subId: Int) {
+        logBuffer.log(TAG, VERBOSE, {
+            str1 = action
+            str2 = extraSimState
+            int1 = slotId
+            int2 = subId
+        }, { "action $str1 state: $str2 slotId: $int1 subid: $int2" })
+    }
+
+    fun logSimUnlocked(subId: Int) {
+        logBuffer.log(TAG, VERBOSE, { int1 = subId }, { "reportSimUnlocked(subId=$int1)" })
+    }
+
+    fun logStartedListeningForFace(faceRunningState: Int) {
+        logBuffer.log(TAG, VERBOSE,
+                { int1 = faceRunningState },
+                { "startListeningForFace(): $int1" })
+    }
+
+    fun logSubInfo(subInfo: SubscriptionInfo?) {
+        logBuffer.log(TAG, VERBOSE,
+                { str1 = "$subInfo" },
+                { "SubInfo:$str1" })
+    }
+
+    fun logTimeFormatChanged(newTimeFormat: String) {
+        logBuffer.log(TAG, DEBUG,
+                { str1 = newTimeFormat },
+                { "handleTimeFormatUpdate timeFormat=$str1" })
+    }
+
+    fun logUdfpsPointerDown(sensorId: Int) {
+        logBuffer.log(TAG, DEBUG,
+                { int1 = sensorId },
+                { "onUdfpsPointerDown, sensorId: $int1" })
+    }
+    fun logUdfpsPointerUp(sensorId: Int) {
+        logBuffer.log(TAG, DEBUG,
+                { int1 = sensorId },
+                { "onUdfpsPointerUp, sensorId: $int1" })
+    }
+
+    fun logUnexpectedFaceCancellationSignalState(faceRunningState: Int, unlockPossible: Boolean) {
+        logBuffer.log(TAG, ERROR, {
+                    int1 = faceRunningState
+                    bool1 = unlockPossible
+                }, {
+                    "Cancellation signal is not null, high chance of bug in " +
+                            "face auth lifecycle management. " +
+                            "Face state: $int1, unlockPossible: $bool1"
+                })
+    }
+
+    fun logUnexpectedFpCancellationSignalState(
+        fingerprintRunningState: Int,
+        unlockPossible: Boolean
+    ) {
+        logBuffer.log(TAG, ERROR, {
+                    int1 = fingerprintRunningState
+                    bool1 = unlockPossible
+                }, {
+                    "Cancellation signal is not null, high chance of bug in " +
+                            "fp auth lifecycle management. FP state: $int1, unlockPossible: $bool1"
+                })
+    }
+
+    fun logUnregisterCallback(callback: KeyguardUpdateMonitorCallback?) {
+        logBuffer.log(TAG, VERBOSE,
+                { str1 = "$callback" },
+                { "*** unregister callback for $str1" })
+    }
+
+    fun logUserRequestedUnlock(
+        requestOrigin: ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN,
+        reason: String,
+        dismissKeyguard: Boolean
+    ) {
+        logBuffer.log("ActiveUnlock", DEBUG, {
+                    str1 = requestOrigin.name
+                    str2 = reason
+                    bool1 = dismissKeyguard
+                }, { "reportUserRequestedUnlock origin=$str1 reason=$str2 dismissKeyguard=$bool1" })
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/Dependency.java b/packages/SystemUI/src/com/android/systemui/Dependency.java
index 1270bd8..5c84ff3 100644
--- a/packages/SystemUI/src/com/android/systemui/Dependency.java
+++ b/packages/SystemUI/src/com/android/systemui/Dependency.java
@@ -70,6 +70,7 @@
 import com.android.systemui.qs.tiles.dialog.InternetDialogFactory;
 import com.android.systemui.recents.OverviewProxyService;
 import com.android.systemui.screenrecord.RecordingController;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.shared.plugins.PluginManager;
 import com.android.systemui.shared.system.ActivityManagerWrapper;
 import com.android.systemui.shared.system.DevicePolicyManagerWrapper;
@@ -80,7 +81,6 @@
 import com.android.systemui.statusbar.NotificationMediaManager;
 import com.android.systemui.statusbar.NotificationRemoteInputManager;
 import com.android.systemui.statusbar.NotificationShadeWindowController;
-import com.android.systemui.statusbar.NotificationViewHierarchyManager;
 import com.android.systemui.statusbar.SmartReplyController;
 import com.android.systemui.statusbar.VibratorHelper;
 import com.android.systemui.statusbar.events.PrivacyDotViewController;
@@ -104,7 +104,6 @@
 import com.android.systemui.statusbar.phone.ManagedProfileController;
 import com.android.systemui.statusbar.phone.NotificationGroupAlertTransferHelper;
 import com.android.systemui.statusbar.phone.ScreenOffAnimationController;
-import com.android.systemui.statusbar.phone.ShadeController;
 import com.android.systemui.statusbar.phone.StatusBarContentInsetsProvider;
 import com.android.systemui.statusbar.phone.StatusBarIconController;
 import com.android.systemui.statusbar.phone.SystemUIDialogManager;
@@ -323,7 +322,6 @@
     @Inject Lazy<SmartReplyConstants> mSmartReplyConstants;
     @Inject Lazy<NotificationListener> mNotificationListener;
     @Inject Lazy<NotificationLogger> mNotificationLogger;
-    @Inject Lazy<NotificationViewHierarchyManager> mNotificationViewHierarchyManager;
     @Inject Lazy<NotificationFilter> mNotificationFilter;
     @Inject Lazy<KeyguardDismissUtil> mKeyguardDismissUtil;
     @Inject Lazy<SmartReplyController> mSmartReplyController;
@@ -540,8 +538,6 @@
         mProviders.put(SmartReplyConstants.class, mSmartReplyConstants::get);
         mProviders.put(NotificationListener.class, mNotificationListener::get);
         mProviders.put(NotificationLogger.class, mNotificationLogger::get);
-        mProviders.put(NotificationViewHierarchyManager.class,
-                mNotificationViewHierarchyManager::get);
         mProviders.put(NotificationFilter.class, mNotificationFilter::get);
         mProviders.put(KeyguardDismissUtil.class, mKeyguardDismissUtil::get);
         mProviders.put(SmartReplyController.class, mSmartReplyController::get);
diff --git a/packages/SystemUI/src/com/android/systemui/Gefingerpoken.java b/packages/SystemUI/src/com/android/systemui/Gefingerpoken.java
index b2d5c21..74d7a8b 100644
--- a/packages/SystemUI/src/com/android/systemui/Gefingerpoken.java
+++ b/packages/SystemUI/src/com/android/systemui/Gefingerpoken.java
@@ -20,6 +20,13 @@
 
 // ACHTUNG!
 public interface Gefingerpoken {
-    boolean onInterceptTouchEvent(MotionEvent ev);
-    boolean onTouchEvent(MotionEvent ev);
+    /** Called when a touch is being intercepted in a ViewGroup. */
+    default boolean onInterceptTouchEvent(MotionEvent ev) {
+        return false;
+    }
+
+    /** Called when a touch is being handled by a view. */
+    default boolean onTouchEvent(MotionEvent ev) {
+        return false;
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/GuestResetOrExitSessionReceiver.java b/packages/SystemUI/src/com/android/systemui/GuestResetOrExitSessionReceiver.java
new file mode 100644
index 0000000..fd84543
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/GuestResetOrExitSessionReceiver.java
@@ -0,0 +1,269 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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;
+
+import android.annotation.SdkConstant;
+import android.annotation.SdkConstant.SdkConstantType;
+import android.app.AlertDialog;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.UserInfo;
+import android.os.UserHandle;
+
+import com.android.internal.logging.UiEventLogger;
+import com.android.systemui.broadcast.BroadcastDispatcher;
+import com.android.systemui.qs.QSUserSwitcherEvent;
+import com.android.systemui.settings.UserTracker;
+import com.android.systemui.statusbar.phone.SystemUIDialog;
+import com.android.systemui.statusbar.policy.UserSwitcherController;
+
+import javax.inject.Inject;
+
+import dagger.assisted.Assisted;
+import dagger.assisted.AssistedFactory;
+import dagger.assisted.AssistedInject;
+
+/**
+ * Manages handling of guest session persistent notification
+ * and actions to reset guest or exit guest session
+ */
+public final class GuestResetOrExitSessionReceiver extends BroadcastReceiver {
+
+    private static final String TAG = GuestResetOrExitSessionReceiver.class.getSimpleName();
+
+    /**
+     * Broadcast sent to the system when guest user needs to be reset.
+     * This is only sent to registered receivers, not manifest receivers.
+     *
+     * @hide
+     */
+    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
+    public static final String ACTION_GUEST_RESET = "android.intent.action.GUEST_RESET";
+
+    /**
+     * Broadcast sent to the system when guest user needs to exit.
+     * This is only sent to registered receivers, not manifest receivers.
+     *
+     * @hide
+     */
+    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
+    public static final String ACTION_GUEST_EXIT = "android.intent.action.GUEST_EXIT";
+
+    public AlertDialog mExitSessionDialog;
+    public AlertDialog mResetSessionDialog;
+    private final UserTracker mUserTracker;
+    private final BroadcastDispatcher mBroadcastDispatcher;
+    private final ResetSessionDialog.Factory mResetSessionDialogFactory;
+    private final ExitSessionDialog.Factory mExitSessionDialogFactory;
+
+    @Inject
+    public GuestResetOrExitSessionReceiver(UserTracker userTracker,
+            BroadcastDispatcher broadcastDispatcher,
+            ResetSessionDialog.Factory resetSessionDialogFactory,
+            ExitSessionDialog.Factory exitSessionDialogFactory) {
+        mUserTracker = userTracker;
+        mBroadcastDispatcher = broadcastDispatcher;
+        mResetSessionDialogFactory = resetSessionDialogFactory;
+        mExitSessionDialogFactory = exitSessionDialogFactory;
+    }
+
+    /**
+     * Register this receiver with the {@link BroadcastDispatcher}
+     */
+    public void register() {
+        IntentFilter intentFilter = new IntentFilter();
+        intentFilter.addAction(ACTION_GUEST_RESET);
+        intentFilter.addAction(ACTION_GUEST_EXIT);
+        mBroadcastDispatcher.registerReceiver(this, intentFilter, null /* handler */,
+                                             UserHandle.SYSTEM);
+    }
+
+    @Override
+    public void onReceive(Context context, Intent intent) {
+        String action = intent.getAction();
+
+        cancelResetDialog();
+        cancelExitDialog();
+
+        UserInfo currentUser = mUserTracker.getUserInfo();
+        if (!currentUser.isGuest()) {
+            return;
+        }
+
+        if (ACTION_GUEST_RESET.equals(action)) {
+            mResetSessionDialog = mResetSessionDialogFactory.create(currentUser.id);
+            mResetSessionDialog.show();
+        } else if (ACTION_GUEST_EXIT.equals(action)) {
+            mExitSessionDialog = mExitSessionDialogFactory.create(currentUser.id,
+                        currentUser.isEphemeral());
+            mExitSessionDialog.show();
+        }
+    }
+
+    private void cancelResetDialog() {
+        if (mResetSessionDialog != null && mResetSessionDialog.isShowing()) {
+            mResetSessionDialog.cancel();
+            mResetSessionDialog = null;
+        }
+    }
+
+    private void cancelExitDialog() {
+        if (mExitSessionDialog != null && mExitSessionDialog.isShowing()) {
+            mExitSessionDialog.cancel();
+            mExitSessionDialog = null;
+        }
+    }
+
+    /**
+     * Dialog shown when asking for confirmation before
+     * reset and restart of guest user.
+     */
+    public static final class ResetSessionDialog extends SystemUIDialog implements
+            DialogInterface.OnClickListener {
+
+        private final UserSwitcherController mUserSwitcherController;
+        private final UiEventLogger mUiEventLogger;
+        private final int mUserId;
+
+        /** Factory class to create guest reset dialog instance */
+        @AssistedFactory
+        public interface Factory {
+            /** Create a guest reset dialog instance */
+            ResetSessionDialog create(int userId);
+        }
+
+        @AssistedInject
+        ResetSessionDialog(Context context,
+                UserSwitcherController userSwitcherController,
+                UiEventLogger uiEventLogger,
+                @Assisted int userId) {
+            super(context);
+
+            setTitle(com.android.settingslib.R.string.guest_reset_and_restart_dialog_title);
+            setMessage(context.getString(
+                        com.android.settingslib.R.string.guest_reset_and_restart_dialog_message));
+            setButton(DialogInterface.BUTTON_NEUTRAL,
+                    context.getString(android.R.string.cancel), this);
+            setButton(DialogInterface.BUTTON_POSITIVE,
+                    context.getString(
+                        com.android.settingslib.R.string.guest_reset_guest_confirm_button), this);
+            setCanceledOnTouchOutside(false);
+
+            mUserSwitcherController = userSwitcherController;
+            mUiEventLogger = uiEventLogger;
+            mUserId = userId;
+        }
+
+        @Override
+        public void onClick(DialogInterface dialog, int which) {
+            if (which == DialogInterface.BUTTON_POSITIVE) {
+                mUiEventLogger.log(QSUserSwitcherEvent.QS_USER_GUEST_REMOVE);
+                mUserSwitcherController.removeGuestUser(mUserId, UserHandle.USER_NULL);
+            } else if (which == DialogInterface.BUTTON_NEUTRAL) {
+                cancel();
+            }
+        }
+    }
+
+    /**
+     * Dialog shown when asking for confirmation before
+     * exit of guest user.
+     */
+    public static final class ExitSessionDialog extends SystemUIDialog implements
+            DialogInterface.OnClickListener {
+
+        private final UserSwitcherController mUserSwitcherController;
+        private final int mUserId;
+        private boolean mIsEphemeral;
+
+        /** Factory class to create guest exit dialog instance */
+        @AssistedFactory
+        public interface Factory {
+            /** Create a guest exit dialog instance */
+            ExitSessionDialog create(int userId, boolean isEphemeral);
+        }
+
+        @AssistedInject
+        ExitSessionDialog(Context context,
+                UserSwitcherController userSwitcherController,
+                @Assisted int userId,
+                @Assisted boolean isEphemeral) {
+            super(context);
+
+            if (isEphemeral) {
+                setTitle(context.getString(
+                            com.android.settingslib.R.string.guest_exit_dialog_title));
+                setMessage(context.getString(
+                            com.android.settingslib.R.string.guest_exit_dialog_message));
+                setButton(DialogInterface.BUTTON_NEUTRAL,
+                        context.getString(android.R.string.cancel), this);
+                setButton(DialogInterface.BUTTON_POSITIVE,
+                        context.getString(
+                            com.android.settingslib.R.string.guest_exit_dialog_button), this);
+            } else {
+                setTitle(context.getString(
+                            com.android.settingslib
+                                .R.string.guest_exit_dialog_title_non_ephemeral));
+                setMessage(context.getString(
+                            com.android.settingslib
+                                .R.string.guest_exit_dialog_message_non_ephemeral));
+                setButton(DialogInterface.BUTTON_NEUTRAL,
+                        context.getString(android.R.string.cancel), this);
+                setButton(DialogInterface.BUTTON_NEGATIVE,
+                        context.getString(
+                            com.android.settingslib.R.string.guest_exit_clear_data_button), this);
+                setButton(DialogInterface.BUTTON_POSITIVE,
+                        context.getString(
+                            com.android.settingslib.R.string.guest_exit_save_data_button), this);
+            }
+            setCanceledOnTouchOutside(false);
+
+            mUserSwitcherController = userSwitcherController;
+            mUserId = userId;
+            mIsEphemeral = isEphemeral;
+        }
+
+        @Override
+        public void onClick(DialogInterface dialog, int which) {
+            if (mIsEphemeral) {
+                if (which == DialogInterface.BUTTON_POSITIVE) {
+                    // Ephemeral guest: exit guest, guest is removed by the system
+                    // on exit, since its marked ephemeral
+                    mUserSwitcherController.exitGuestUser(mUserId, UserHandle.USER_NULL, false);
+                } else if (which == DialogInterface.BUTTON_NEUTRAL) {
+                    // Cancel clicked, do nothing
+                    cancel();
+                }
+            } else {
+                if (which == DialogInterface.BUTTON_POSITIVE) {
+                    // Non-ephemeral guest: exit guest, guest is not removed by the system
+                    // on exit, since its marked non-ephemeral
+                    mUserSwitcherController.exitGuestUser(mUserId, UserHandle.USER_NULL, false);
+                } else if (which == DialogInterface.BUTTON_NEGATIVE) {
+                    // Non-ephemeral guest: remove guest and then exit
+                    mUserSwitcherController.exitGuestUser(mUserId, UserHandle.USER_NULL, true);
+                } else if (which == DialogInterface.BUTTON_NEUTRAL) {
+                    // Cancel clicked, do nothing
+                    cancel();
+                }
+            }
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/GuestResumeSessionReceiver.java b/packages/SystemUI/src/com/android/systemui/GuestResumeSessionReceiver.java
index 9a6020f..76a7cad 100644
--- a/packages/SystemUI/src/com/android/systemui/GuestResumeSessionReceiver.java
+++ b/packages/SystemUI/src/com/android/systemui/GuestResumeSessionReceiver.java
@@ -35,12 +35,18 @@
 import com.android.systemui.statusbar.policy.UserSwitcherController;
 import com.android.systemui.util.settings.SecureSettings;
 
+import javax.inject.Inject;
+
+import dagger.assisted.Assisted;
+import dagger.assisted.AssistedFactory;
+import dagger.assisted.AssistedInject;
+
 /**
  * Manages notification when a guest session is resumed.
  */
 public class GuestResumeSessionReceiver extends BroadcastReceiver {
 
-    private static final String TAG = "GuestResumeSessionReceiver";
+    private static final String TAG = GuestResumeSessionReceiver.class.getSimpleName();
 
     @VisibleForTesting
     public static final String SETTING_GUEST_HAS_LOGGED_IN = "systemui.guest_has_logged_in";
@@ -48,27 +54,31 @@
     @VisibleForTesting
     public AlertDialog mNewSessionDialog;
     private final UserTracker mUserTracker;
-    private final UserSwitcherController mUserSwitcherController;
-    private final UiEventLogger mUiEventLogger;
     private final SecureSettings mSecureSettings;
+    private final BroadcastDispatcher mBroadcastDispatcher;
+    private final ResetSessionDialog.Factory mResetSessionDialogFactory;
+    private final GuestSessionNotification mGuestSessionNotification;
 
-    public GuestResumeSessionReceiver(UserSwitcherController userSwitcherController,
-            UserTracker userTracker, UiEventLogger uiEventLogger,
-            SecureSettings secureSettings) {
-        mUserSwitcherController = userSwitcherController;
+    @Inject
+    public GuestResumeSessionReceiver(
+            UserTracker userTracker,
+            SecureSettings secureSettings,
+            BroadcastDispatcher broadcastDispatcher,
+            GuestSessionNotification guestSessionNotification,
+            ResetSessionDialog.Factory resetSessionDialogFactory) {
         mUserTracker = userTracker;
-        mUiEventLogger = uiEventLogger;
         mSecureSettings = secureSettings;
+        mBroadcastDispatcher = broadcastDispatcher;
+        mGuestSessionNotification = guestSessionNotification;
+        mResetSessionDialogFactory = resetSessionDialogFactory;
     }
 
     /**
      * Register this receiver with the {@link BroadcastDispatcher}
-     *
-     * @param broadcastDispatcher to register the receiver.
      */
-    public void register(BroadcastDispatcher broadcastDispatcher) {
+    public void register() {
         IntentFilter f = new IntentFilter(Intent.ACTION_USER_SWITCHED);
-        broadcastDispatcher.registerReceiver(this, f, null /* handler */, UserHandle.SYSTEM);
+        mBroadcastDispatcher.registerReceiver(this, f, null /* handler */, UserHandle.SYSTEM);
     }
 
     @Override
@@ -89,14 +99,25 @@
                 return;
             }
 
-            int notFirstLogin = mSecureSettings.getIntForUser(
+            int guestLoginState = mSecureSettings.getIntForUser(
                     SETTING_GUEST_HAS_LOGGED_IN, 0, userId);
-            if (notFirstLogin != 0) {
-                mNewSessionDialog = new ResetSessionDialog(context, mUserSwitcherController,
-                        mUiEventLogger, userId);
+
+            if (guestLoginState == 0) {
+                // set 1 to indicate, 1st login
+                guestLoginState = 1;
+                mSecureSettings.putIntForUser(SETTING_GUEST_HAS_LOGGED_IN, guestLoginState, userId);
+            } else if (guestLoginState == 1) {
+                // set 2 to indicate, 2nd or later login
+                guestLoginState = 2;
+                mSecureSettings.putIntForUser(SETTING_GUEST_HAS_LOGGED_IN, guestLoginState, userId);
+            }
+
+            mGuestSessionNotification.createPersistentNotification(currentUser,
+                                                                   (guestLoginState <= 1));
+
+            if (guestLoginState > 1) {
+                mNewSessionDialog = mResetSessionDialogFactory.create(userId);
                 mNewSessionDialog.show();
-            } else {
-                mSecureSettings.putIntForUser(SETTING_GUEST_HAS_LOGGED_IN, 1, userId);
             }
         }
     }
@@ -124,10 +145,19 @@
         private final UiEventLogger mUiEventLogger;
         private final int mUserId;
 
-        ResetSessionDialog(Context context,
+
+        /** Factory class to create guest reset dialog instance */
+        @AssistedFactory
+        public interface Factory {
+            /** Create a guest reset dialog instance */
+            ResetSessionDialog create(int userId);
+        }
+
+        @AssistedInject
+        public ResetSessionDialog(Context context,
                 UserSwitcherController userSwitcherController,
                 UiEventLogger uiEventLogger,
-                int userId) {
+                @Assisted int userId) {
             super(context, false /* dismissOnDeviceLock */);
 
             setTitle(context.getString(R.string.guest_wipe_session_title));
diff --git a/packages/SystemUI/src/com/android/systemui/GuestSessionNotification.java b/packages/SystemUI/src/com/android/systemui/GuestSessionNotification.java
new file mode 100644
index 0000000..b0eaab9
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/GuestSessionNotification.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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;
+
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.UserInfo;
+import android.os.Bundle;
+import android.os.UserHandle;
+import android.provider.Settings;
+import android.util.FeatureFlagUtils;
+
+import com.android.internal.messages.nano.SystemMessageProto;
+import com.android.systemui.util.NotificationChannels;
+
+import javax.inject.Inject;
+
+/**
+ * Posts a persistent notification on entry to guest mode
+ */
+public final class GuestSessionNotification {
+
+    private static final String TAG = GuestSessionNotification.class.getSimpleName();
+
+    private final Context mContext;
+    private final NotificationManager mNotificationManager;
+
+    @Inject
+    public GuestSessionNotification(Context context,
+            NotificationManager notificationManager) {
+        mContext = context;
+        mNotificationManager = notificationManager;
+    }
+
+    private void overrideNotificationAppName(Notification.Builder notificationBuilder) {
+        final Bundle extras = new Bundle();
+        String appName = mContext.getString(R.string.guest_notification_app_name);
+
+        extras.putString(Notification.EXTRA_SUBSTITUTE_APP_NAME, appName);
+
+        notificationBuilder.addExtras(extras);
+    }
+
+    void createPersistentNotification(UserInfo userInfo, boolean isGuestFirstLogin) {
+        if (!FeatureFlagUtils.isEnabled(mContext,
+                FeatureFlagUtils.SETTINGS_GUEST_MODE_UX_CHANGES)
+                || !userInfo.isGuest()) {
+            // we create a persistent notification only if enabled and only for guests
+            return;
+        }
+        String contentText;
+        if (userInfo.isEphemeral()) {
+            contentText = mContext.getString(R.string.guest_notification_ephemeral);
+        } else if (isGuestFirstLogin) {
+            contentText = mContext.getString(R.string.guest_notification_non_ephemeral);
+        } else {
+            contentText = mContext.getString(
+                            R.string.guest_notification_non_ephemeral_non_first_login);
+        }
+
+        final Intent guestExitIntent = new Intent(
+                        GuestResetOrExitSessionReceiver.ACTION_GUEST_EXIT);
+        final Intent userSettingsIntent = new Intent(Settings.ACTION_USER_SETTINGS);
+
+        PendingIntent guestExitPendingIntent =
+                PendingIntent.getBroadcastAsUser(mContext, 0, guestExitIntent,
+                    PendingIntent.FLAG_IMMUTABLE,
+                    UserHandle.SYSTEM);
+
+        PendingIntent userSettingsPendingIntent =
+                PendingIntent.getActivityAsUser(mContext, 0, userSettingsIntent,
+                    PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE,
+                    null,
+                    UserHandle.of(userInfo.id));
+
+        Notification.Builder builder = new Notification.Builder(mContext,
+                                                                NotificationChannels.ALERTS)
+                .setSmallIcon(R.drawable.ic_account_circle)
+                .setContentTitle(mContext.getString(R.string.guest_notification_session_active))
+                .setContentText(contentText)
+                .setPriority(Notification.PRIORITY_DEFAULT)
+                .setOngoing(true)
+                .setContentIntent(userSettingsPendingIntent);
+
+        // we show reset button only if this is a 2nd or later login
+        if (!isGuestFirstLogin) {
+            final Intent guestResetIntent = new Intent(
+                            GuestResetOrExitSessionReceiver.ACTION_GUEST_RESET);
+
+            PendingIntent guestResetPendingIntent =
+                    PendingIntent.getBroadcastAsUser(mContext, 0, guestResetIntent,
+                        PendingIntent.FLAG_IMMUTABLE,
+                        UserHandle.SYSTEM);
+
+            builder.addAction(R.drawable.ic_sysbar_home,
+                        mContext.getString(
+                            com.android.settingslib.R.string.guest_reset_guest_confirm_button),
+                        guestResetPendingIntent);
+        }
+        builder.addAction(R.drawable.ic_sysbar_home,
+                        mContext.getString(
+                            com.android.settingslib.R.string.guest_exit_button),
+                        guestExitPendingIntent);
+
+        overrideNotificationAppName(builder);
+
+        mNotificationManager.notifyAsUser(null,
+                                         SystemMessageProto.SystemMessage.NOTE_GUEST_SESSION,
+                                         builder.build(),
+                                         UserHandle.of(userInfo.id));
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/Somnambulator.java b/packages/SystemUI/src/com/android/systemui/Somnambulator.java
index 0dd6d92..25801cf 100644
--- a/packages/SystemUI/src/com/android/systemui/Somnambulator.java
+++ b/packages/SystemUI/src/com/android/systemui/Somnambulator.java
@@ -17,12 +17,15 @@
 package com.android.systemui;
 
 import android.app.Activity;
-import android.content.Intent;
 import android.service.dreams.Sandman;
 
 /**
  * A simple activity that launches a dream.
  * <p>
+ *
+ * This activity has been deprecated and no longer used. The system uses its presence to determine
+ * whether a dock app should be started on dock through intent resolution.
+ *
  * Note: This Activity is special.  If this class is moved to another package or
  * renamed, be sure to update the component name in {@link Sandman}.
  * </p>
@@ -34,27 +37,6 @@
     @Override
     public void onStart() {
         super.onStart();
-
-        final Intent launchIntent = getIntent();
-        final String action = launchIntent.getAction();
-        if (Intent.ACTION_CREATE_SHORTCUT.equals(action)) {
-            Intent shortcutIntent = new Intent(this, Somnambulator.class);
-            shortcutIntent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
-                    | Intent.FLAG_ACTIVITY_NEW_TASK);
-            Intent resultIntent = new Intent();
-            resultIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
-                    Intent.ShortcutIconResource.fromContext(this, R.mipmap.ic_launcher_dreams));
-            resultIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
-            resultIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.start_dreams));
-            setResult(RESULT_OK, resultIntent);
-        } else {
-            boolean docked = launchIntent.hasCategory(Intent.CATEGORY_DESK_DOCK);
-            if (docked) {
-                Sandman.startDreamWhenDockedIfAppropriate(this);
-            } else {
-                Sandman.startDreamByUserRequest(this);
-            }
-        }
         finish();
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIAppComponentFactory.java b/packages/SystemUI/src/com/android/systemui/SystemUIAppComponentFactory.java
index 714d267bb..527ce12 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUIAppComponentFactory.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIAppComponentFactory.java
@@ -16,160 +16,22 @@
 
 package com.android.systemui;
 
-import android.app.Activity;
-import android.app.Application;
-import android.app.Service;
-import android.content.BroadcastReceiver;
-import android.content.ContentProvider;
 import android.content.Context;
-import android.content.Intent;
-import android.util.Log;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.core.app.AppComponentFactory;
-
-import com.android.systemui.dagger.ContextComponentHelper;
-import com.android.systemui.dagger.SysUIComponent;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-import javax.inject.Inject;
 
 /**
- * Implementation of AppComponentFactory that injects into constructors.
+ * Starts up SystemUI using the AOSP {@link SystemUIInitializerImpl}.
  *
- * This class sets up dependency injection when creating our application.
+ * This initializer relies on reflection to start everything up and should be considered deprecated.
+ * Instead, create your own {@link SystemUIAppComponentFactoryBase}, specify it in your
+ * AndroidManifest.xml and construct your own {@link SystemUIInitializer} directly.
  *
- * Services support dependency injection into their constructors.
- *
- * ContentProviders support injection into member variables - _not_ constructors.
+ * @deprecated Define your own SystemUIAppComponentFactoryBase implementation and use that. This
+ *             implementation may be changed or removed in future releases.
  */
-public class SystemUIAppComponentFactory extends AppComponentFactory {
-
-    private static final String TAG = "AppComponentFactory";
-    @Inject
-    public ContextComponentHelper mComponentHelper;
-
-    public SystemUIAppComponentFactory() {
-        super();
-    }
-
-    @NonNull
+@Deprecated
+public class SystemUIAppComponentFactory extends SystemUIAppComponentFactoryBase {
     @Override
-    public Application instantiateApplicationCompat(
-            @NonNull ClassLoader cl, @NonNull String className)
-            throws InstantiationException, IllegalAccessException, ClassNotFoundException {
-        Application app = super.instantiateApplicationCompat(cl, className);
-        if (app instanceof ContextInitializer) {
-            ((ContextInitializer) app).setContextAvailableCallback(
-                    context -> {
-                        SystemUIFactory.createFromConfig(context);
-                        SystemUIFactory.getInstance().getSysUIComponent().inject(
-                                SystemUIAppComponentFactory.this);
-                    }
-            );
-        }
-
-        return app;
-    }
-
-    @NonNull
-    @Override
-    public ContentProvider instantiateProviderCompat(
-            @NonNull ClassLoader cl, @NonNull String className)
-            throws InstantiationException, IllegalAccessException, ClassNotFoundException {
-
-        ContentProvider contentProvider = super.instantiateProviderCompat(cl, className);
-        if (contentProvider instanceof ContextInitializer) {
-            ((ContextInitializer) contentProvider).setContextAvailableCallback(
-                    context -> {
-                        SystemUIFactory.createFromConfig(context);
-                        SysUIComponent rootComponent =
-                                SystemUIFactory.getInstance().getSysUIComponent();
-                        try {
-                            Method injectMethod = rootComponent.getClass()
-                                    .getMethod("inject", contentProvider.getClass());
-                            injectMethod.invoke(rootComponent, contentProvider);
-                        } catch (NoSuchMethodException
-                                | IllegalAccessException
-                                | InvocationTargetException e) {
-                            Log.w(TAG, "No injector for class: " + contentProvider.getClass(), e);
-                        }
-                    }
-            );
-        }
-
-        return contentProvider;
-    }
-
-    @NonNull
-    @Override
-    public Activity instantiateActivityCompat(@NonNull ClassLoader cl, @NonNull String className,
-            @Nullable Intent intent)
-            throws InstantiationException, IllegalAccessException, ClassNotFoundException {
-        if (mComponentHelper == null) {
-            // This shouldn't happen, but is seen on occasion.
-            // Bug filed against framework to take a look: http://b/141008541
-            SystemUIFactory.getInstance().getSysUIComponent().inject(
-                    SystemUIAppComponentFactory.this);
-        }
-        Activity activity = mComponentHelper.resolveActivity(className);
-        if (activity != null) {
-            return activity;
-        }
-        return super.instantiateActivityCompat(cl, className, intent);
-    }
-
-    @NonNull
-    @Override
-    public Service instantiateServiceCompat(
-            @NonNull ClassLoader cl, @NonNull String className, Intent intent)
-            throws InstantiationException, IllegalAccessException, ClassNotFoundException {
-        if (mComponentHelper == null) {
-            // This shouldn't happen, but does when a device is freshly formatted.
-            // Bug filed against framework to take a look: http://b/141008541
-            SystemUIFactory.getInstance().getSysUIComponent().inject(
-                    SystemUIAppComponentFactory.this);
-        }
-        Service service = mComponentHelper.resolveService(className);
-        if (service != null) {
-            return service;
-        }
-        return super.instantiateServiceCompat(cl, className, intent);
-    }
-
-    @NonNull
-    @Override
-    public BroadcastReceiver instantiateReceiverCompat(@NonNull ClassLoader cl,
-            @NonNull String className, @Nullable Intent intent)
-            throws InstantiationException, IllegalAccessException, ClassNotFoundException {
-        if (mComponentHelper == null) {
-            // This shouldn't happen, but does when a device is freshly formatted.
-            // Bug filed against framework to take a look: http://b/141008541
-            SystemUIFactory.getInstance().getSysUIComponent().inject(
-                    SystemUIAppComponentFactory.this);
-        }
-        BroadcastReceiver receiver = mComponentHelper.resolveBroadcastReceiver(className);
-        if (receiver != null) {
-            return receiver;
-        }
-
-        return super.instantiateReceiverCompat(cl, className, intent);
-    }
-
-    /**
-     * A callback that receives a Context when one is ready.
-     */
-    public interface ContextAvailableCallback {
-        void onContextAvailable(Context context);
-    }
-
-    /**
-     * Implemented in classes that get started by the system before a context is available.
-     */
-    public interface ContextInitializer {
-        void setContextAvailableCallback(ContextAvailableCallback callback);
+    protected SystemUIInitializer createSystemUIInitializer(Context context) {
+        return SystemUIInitializerFactory.createWithContext(context);
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIAppComponentFactoryBase.kt b/packages/SystemUI/src/com/android/systemui/SystemUIAppComponentFactoryBase.kt
new file mode 100644
index 0000000..12108b0
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIAppComponentFactoryBase.kt
@@ -0,0 +1,183 @@
+/*
+ * 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.
+ */
+package com.android.systemui
+
+import android.app.Activity
+import android.app.Application
+import android.app.Service
+import android.content.BroadcastReceiver
+import android.content.ContentProvider
+import android.content.Context
+import android.content.Intent
+import android.util.Log
+import androidx.core.app.AppComponentFactory
+import com.android.systemui.dagger.ContextComponentHelper
+import java.lang.reflect.InvocationTargetException
+import java.util.concurrent.ExecutionException
+import javax.inject.Inject
+
+/**
+ * Implementation of AppComponentFactory that injects into constructors.
+ *
+ * This class sets up dependency injection when creating our application.
+ *
+ * Activities, Services, and BroadcastReceivers support dependency injection into
+ * their constructors.
+ *
+ * ContentProviders support injection into member variables - _not_ constructors.
+ */
+abstract class SystemUIAppComponentFactoryBase : AppComponentFactory() {
+    companion object {
+        private const val TAG = "AppComponentFactory"
+        // Must be static due to http://b/141008541.
+        var systemUIInitializer: SystemUIInitializer? = null
+    }
+
+    @set:Inject
+    lateinit var componentHelper: ContextComponentHelper
+
+    /**
+     * Returns a new [SystemUIInitializer].
+     *
+     * The returned implementation should be specific to your build.
+     */
+    protected abstract fun createSystemUIInitializer(context: Context): SystemUIInitializer
+
+    private fun createSystemUIInitializerInternal(context: Context): SystemUIInitializer {
+        return systemUIInitializer ?: run {
+            val initializer = createSystemUIInitializer(context.applicationContext)
+            try {
+                initializer.init(false)
+            } catch (exception: ExecutionException) {
+                throw RuntimeException("Failed to initialize SysUI", exception)
+            } catch (exception: InterruptedException) {
+                throw RuntimeException("Failed to initialize SysUI", exception)
+            }
+            initializer.sysUIComponent.inject(
+                this@SystemUIAppComponentFactoryBase
+            )
+
+            systemUIInitializer = initializer
+            return initializer
+        }
+    }
+
+    override fun instantiateApplicationCompat(cl: ClassLoader, className: String): Application {
+        val app = super.instantiateApplicationCompat(cl, className)
+        if (app !is ContextInitializer) {
+            throw RuntimeException("App must implement ContextInitializer")
+        } else {
+            app.setContextAvailableCallback { context ->
+                createSystemUIInitializerInternal(context)
+            }
+        }
+
+        return app
+    }
+
+    override fun instantiateProviderCompat(cl: ClassLoader, className: String): ContentProvider {
+        val contentProvider = super.instantiateProviderCompat(cl, className)
+        if (contentProvider is ContextInitializer) {
+            contentProvider.setContextAvailableCallback { context ->
+                val initializer = createSystemUIInitializerInternal(context)
+                val rootComponent = initializer.sysUIComponent
+                try {
+                    val injectMethod = rootComponent.javaClass
+                        .getMethod("inject", contentProvider.javaClass)
+                    injectMethod.invoke(rootComponent, contentProvider)
+                } catch (e: NoSuchMethodException) {
+                    Log.w(TAG, "No injector for class: " + contentProvider.javaClass, e)
+                } catch (e: IllegalAccessException) {
+                    Log.w(TAG, "No injector for class: " + contentProvider.javaClass, e)
+                } catch (e: InvocationTargetException) {
+                    Log.w(TAG, "No injector for class: " + contentProvider.javaClass, e)
+                }
+                initializer
+            }
+        }
+        return contentProvider
+    }
+
+    override fun instantiateActivityCompat(
+        cl: ClassLoader,
+        className: String,
+        intent: Intent?
+    ): Activity {
+        if (!this::componentHelper.isInitialized) {
+            // This shouldn't happen, but is seen on occasion.
+            // Bug filed against framework to take a look: http://b/141008541
+            systemUIInitializer?.sysUIComponent?.inject(this@SystemUIAppComponentFactoryBase)
+        }
+        return componentHelper.resolveActivity(className)
+            ?: super.instantiateActivityCompat(cl, className, intent)
+    }
+
+    override fun instantiateServiceCompat(
+        cl: ClassLoader,
+        className: String,
+        intent: Intent?
+    ): Service {
+        if (!this::componentHelper.isInitialized) {
+            // This shouldn't happen, but does when a device is freshly formatted.
+            // Bug filed against framework to take a look: http://b/141008541
+            systemUIInitializer?.sysUIComponent?.inject(this@SystemUIAppComponentFactoryBase)
+        }
+        return componentHelper.resolveService(className)
+            ?: super.instantiateServiceCompat(cl, className, intent)
+    }
+
+    override fun instantiateReceiverCompat(
+        cl: ClassLoader,
+        className: String,
+        intent: Intent?
+    ): BroadcastReceiver {
+        if (!this::componentHelper.isInitialized) {
+            // This shouldn't happen, but does when a device is freshly formatted.
+            // Bug filed against framework to take a look: http://b/141008541
+            systemUIInitializer?.sysUIComponent?.inject(this@SystemUIAppComponentFactoryBase)
+        }
+        return componentHelper.resolveBroadcastReceiver(className)
+            ?: super.instantiateReceiverCompat(cl, className, intent)
+    }
+
+    /**
+     * An Interface for classes that can be notified when an Application Context becomes available.
+     *
+     * An instance of this will be passed to implementers of [ContextInitializer].
+     */
+    fun interface ContextAvailableCallback {
+        /** Notifies when the Application Context is available.  */
+        fun onContextAvailable(context: Context): SystemUIInitializer
+    }
+
+    /**
+     * Interface for classes that can be constructed by the system before a context is available.
+     *
+     * This is intended for [Application] and [ContentProvider] implementations that
+     * either may not have a Context until some point after construction or are themselves
+     * a [Context].
+     *
+     * Implementers will be passed a [ContextAvailableCallback] that they should call as soon
+     * as an Application Context is ready.
+     */
+    interface ContextInitializer {
+        /**
+         * Called to supply the [ContextAvailableCallback] that should be called when an
+         * Application [Context] is available.
+         */
+        fun setContextAvailableCallback(callback: ContextAvailableCallback)
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
index 6d3fd50..9138b23 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
@@ -42,7 +42,6 @@
 import android.view.ThreadedRenderer;
 
 import com.android.internal.protolog.common.ProtoLog;
-import com.android.systemui.dagger.ContextComponentHelper;
 import com.android.systemui.dagger.GlobalRootComponent;
 import com.android.systemui.dagger.SysUIComponent;
 import com.android.systemui.dump.DumpManager;
@@ -65,7 +64,6 @@
     public static final String TAG = "SystemUIService";
     private static final boolean DEBUG = false;
 
-    private ContextComponentHelper mComponentHelper;
     private BootCompleteCacheImpl mBootCompleteCache;
     private DumpManager mDumpManager;
 
@@ -80,8 +78,8 @@
     private CoreStartable[] mServices;
     private boolean mServicesStarted;
     private SystemUIAppComponentFactory.ContextAvailableCallback mContextAvailableCallback;
-    private GlobalRootComponent mRootComponent;
     private SysUIComponent mSysUIComponent;
+    private SystemUIInitializer mInitializer;
 
     public SystemUIApplication() {
         super();
@@ -90,6 +88,10 @@
         ProtoLog.REQUIRE_PROTOLOGTOOL = false;
     }
 
+    protected GlobalRootComponent getRootComponent() {
+        return mInitializer.getRootComponent();
+    }
+
     @Override
     public void onCreate() {
         super.onCreate();
@@ -99,10 +101,8 @@
         TimingsTraceLog log = new TimingsTraceLog("SystemUIBootTiming",
                 Trace.TRACE_TAG_APP);
         log.traceBegin("DependencyInjection");
-        mContextAvailableCallback.onContextAvailable(this);
-        mRootComponent = SystemUIFactory.getInstance().getRootComponent();
-        mSysUIComponent = SystemUIFactory.getInstance().getSysUIComponent();
-        mComponentHelper = mSysUIComponent.getContextComponentHelper();
+        mInitializer = mContextAvailableCallback.onContextAvailable(this);
+        mSysUIComponent = mInitializer.getSysUIComponent();
         mBootCompleteCache = mSysUIComponent.provideBootCacheImpl();
         log.traceEnd();
 
@@ -189,15 +189,14 @@
      */
 
     public void startServicesIfNeeded() {
-        final String vendorComponent = SystemUIFactory.getInstance()
-                .getVendorComponent(getResources());
+        final String vendorComponent = mInitializer.getVendorComponent(getResources());
 
         // Sort the startables so that we get a deterministic ordering.
         // TODO: make #start idempotent and require users of CoreStartable to call it.
         Map<Class<?>, Provider<CoreStartable>> sortedStartables = new TreeMap<>(
                 Comparator.comparing(Class::getName));
-        sortedStartables.putAll(SystemUIFactory.getInstance().getStartableComponents());
-        sortedStartables.putAll(SystemUIFactory.getInstance().getStartableComponentsPerUser());
+        sortedStartables.putAll(mSysUIComponent.getStartables());
+        sortedStartables.putAll(mSysUIComponent.getPerUserStartables());
         startServicesIfNeeded(
                 sortedStartables, "StartServices", vendorComponent);
     }
@@ -212,7 +211,7 @@
         // Sort the startables so that we get a deterministic ordering.
         Map<Class<?>, Provider<CoreStartable>> sortedStartables = new TreeMap<>(
                 Comparator.comparing(Class::getName));
-        sortedStartables.putAll(SystemUIFactory.getInstance().getStartableComponentsPerUser());
+        sortedStartables.putAll(mSysUIComponent.getPerUserStartables());
         startServicesIfNeeded(
                 sortedStartables, "StartSecondaryServices", null);
     }
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java b/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java
deleted file mode 100644
index f5084f5..0000000
--- a/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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;
-
-import android.app.ActivityThread;
-import android.content.Context;
-import android.content.res.AssetManager;
-import android.content.res.Resources;
-import android.os.Handler;
-import android.os.HandlerThread;
-import android.util.Log;
-
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.systemui.dagger.DaggerGlobalRootComponent;
-import com.android.systemui.dagger.GlobalRootComponent;
-import com.android.systemui.dagger.SysUIComponent;
-import com.android.systemui.dagger.WMComponent;
-import com.android.wm.shell.dagger.WMShellConcurrencyModule;
-import com.android.systemui.navigationbar.gestural.BackGestureTfClassifierProvider;
-import com.android.systemui.screenshot.ScreenshotNotificationSmartActionsProvider;
-import com.android.wm.shell.transition.ShellTransitions;
-
-import java.util.Map;
-import java.util.Optional;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Executor;
-
-import javax.inject.Provider;
-
-/**
- * Class factory to provide customizable SystemUI components.
- */
-public class SystemUIFactory {
-    private static final String TAG = "SystemUIFactory";
-
-    static SystemUIFactory mFactory;
-    private GlobalRootComponent mRootComponent;
-    private WMComponent mWMComponent;
-    private SysUIComponent mSysUIComponent;
-    private boolean mInitializeComponents;
-
-    public static <T extends SystemUIFactory> T getInstance() {
-        return (T) mFactory;
-    }
-
-    public static void createFromConfig(Context context) {
-        createFromConfig(context, false);
-    }
-
-    @VisibleForTesting
-    public static void createFromConfig(Context context, boolean fromTest) {
-        if (mFactory != null) {
-            return;
-        }
-
-        final String clsName = context.getString(R.string.config_systemUIFactoryComponent);
-        if (clsName == null || clsName.length() == 0) {
-            throw new RuntimeException("No SystemUIFactory component configured");
-        }
-
-        try {
-            Class<?> cls = null;
-            cls = context.getClassLoader().loadClass(clsName);
-            mFactory = (SystemUIFactory) cls.newInstance();
-            mFactory.init(context, fromTest);
-        } catch (Throwable t) {
-            Log.w(TAG, "Error creating SystemUIFactory component: " + clsName, t);
-            throw new RuntimeException(t);
-        }
-    }
-
-    @VisibleForTesting
-    static void cleanup() {
-        mFactory = null;
-    }
-
-    public SystemUIFactory() {}
-
-    @VisibleForTesting
-    public void init(Context context, boolean fromTest)
-            throws ExecutionException, InterruptedException {
-        // Only initialize components for the main system ui process running as the primary user
-        mInitializeComponents = !fromTest
-                && android.os.Process.myUserHandle().isSystem()
-                && ActivityThread.currentProcessName().equals(ActivityThread.currentPackageName());
-        mRootComponent = buildGlobalRootComponent(context);
-
-        // Stand up WMComponent
-        setupWmComponent(context);
-        if (mInitializeComponents) {
-            // Only initialize when not starting from tests since this currently initializes some
-            // components that shouldn't be run in the test environment
-            mWMComponent.init();
-        }
-
-        // And finally, retrieve whatever SysUI needs from WMShell and build SysUI.
-        SysUIComponent.Builder builder = mRootComponent.getSysUIComponent();
-        if (mInitializeComponents) {
-            // Only initialize when not starting from tests since this currently initializes some
-            // components that shouldn't be run in the test environment
-            builder = prepareSysUIComponentBuilder(builder, mWMComponent)
-                    .setPip(mWMComponent.getPip())
-                    .setLegacySplitScreen(mWMComponent.getLegacySplitScreen())
-                    .setSplitScreen(mWMComponent.getSplitScreen())
-                    .setOneHanded(mWMComponent.getOneHanded())
-                    .setBubbles(mWMComponent.getBubbles())
-                    .setHideDisplayCutout(mWMComponent.getHideDisplayCutout())
-                    .setShellCommandHandler(mWMComponent.getShellCommandHandler())
-                    .setAppPairs(mWMComponent.getAppPairs())
-                    .setTaskViewFactory(mWMComponent.getTaskViewFactory())
-                    .setTransitions(mWMComponent.getTransitions())
-                    .setStartingSurface(mWMComponent.getStartingSurface())
-                    .setDisplayAreaHelper(mWMComponent.getDisplayAreaHelper())
-                    .setTaskSurfaceHelper(mWMComponent.getTaskSurfaceHelper())
-                    .setRecentTasks(mWMComponent.getRecentTasks())
-                    .setCompatUI(mWMComponent.getCompatUI())
-                    .setDragAndDrop(mWMComponent.getDragAndDrop())
-                    .setBackAnimation(mWMComponent.getBackAnimation());
-        } else {
-            // TODO: Call on prepareSysUIComponentBuilder but not with real components. Other option
-            // is separating this logic into newly creating SystemUITestsFactory.
-            builder = prepareSysUIComponentBuilder(builder, mWMComponent)
-                    .setPip(Optional.ofNullable(null))
-                    .setLegacySplitScreen(Optional.ofNullable(null))
-                    .setSplitScreen(Optional.ofNullable(null))
-                    .setOneHanded(Optional.ofNullable(null))
-                    .setBubbles(Optional.ofNullable(null))
-                    .setHideDisplayCutout(Optional.ofNullable(null))
-                    .setShellCommandHandler(Optional.ofNullable(null))
-                    .setAppPairs(Optional.ofNullable(null))
-                    .setTaskViewFactory(Optional.ofNullable(null))
-                    .setTransitions(new ShellTransitions() {})
-                    .setDisplayAreaHelper(Optional.ofNullable(null))
-                    .setStartingSurface(Optional.ofNullable(null))
-                    .setTaskSurfaceHelper(Optional.ofNullable(null))
-                    .setRecentTasks(Optional.ofNullable(null))
-                    .setCompatUI(Optional.ofNullable(null))
-                    .setDragAndDrop(Optional.ofNullable(null))
-                    .setBackAnimation(Optional.ofNullable(null));
-        }
-        mSysUIComponent = builder.build();
-        if (mInitializeComponents) {
-            mSysUIComponent.init();
-        }
-
-        // Every other part of our codebase currently relies on Dependency, so we
-        // really need to ensure the Dependency gets initialized early on.
-        Dependency dependency = mSysUIComponent.createDependency();
-        dependency.start();
-    }
-
-    /**
-     * Sets up {@link #mWMComponent}. On devices where the Shell runs on its own main thread,
-     * this will pre-create the thread to ensure that the components are constructed on the
-     * same thread, to reduce the likelihood of side effects from running the constructors on
-     * a different thread than the rest of the class logic.
-     */
-    private void setupWmComponent(Context context) {
-        WMComponent.Builder wmBuilder = mRootComponent.getWMComponentBuilder();
-        if (!mInitializeComponents || !WMShellConcurrencyModule.enableShellMainThread(context)) {
-            // If running under tests or shell thread is not enabled, we don't need anything special
-            mWMComponent = wmBuilder.build();
-            return;
-        }
-
-        // If the shell main thread is enabled, initialize the component on that thread
-        HandlerThread shellThread = WMShellConcurrencyModule.createShellMainThread();
-        shellThread.start();
-
-        // Use an async handler since we don't care about synchronization
-        Handler shellHandler = Handler.createAsync(shellThread.getLooper());
-        boolean built = shellHandler.runWithScissors(() -> {
-            wmBuilder.setShellMainThread(shellThread);
-            mWMComponent = wmBuilder.build();
-        }, 5000);
-        if (!built) {
-            Log.w(TAG, "Failed to initialize WMComponent");
-            throw new RuntimeException();
-        }
-    }
-
-    /**
-     * Prepares the SysUIComponent builder before it is built.
-     * @param sysUIBuilder the builder provided by the root component's getSysUIComponent() method
-     * @param wm the built WMComponent from the root component's getWMComponent() method
-     */
-    protected SysUIComponent.Builder prepareSysUIComponentBuilder(
-            SysUIComponent.Builder sysUIBuilder, WMComponent wm) {
-        return sysUIBuilder;
-    }
-
-    protected GlobalRootComponent buildGlobalRootComponent(Context context) {
-        return DaggerGlobalRootComponent.builder()
-                .context(context)
-                .build();
-    }
-
-    protected boolean shouldInitializeComponents() {
-        return mInitializeComponents;
-    }
-
-    public GlobalRootComponent getRootComponent() {
-        return mRootComponent;
-    }
-
-    public WMComponent getWMComponent() {
-        return mWMComponent;
-    }
-
-    public SysUIComponent getSysUIComponent() {
-        return mSysUIComponent;
-    }
-
-    /**
-     * Returns the list of {@link CoreStartable} components that should be started at startup.
-     */
-    public Map<Class<?>, Provider<CoreStartable>> getStartableComponents() {
-        return mSysUIComponent.getStartables();
-    }
-
-    /**
-     * Returns the list of additional system UI components that should be started.
-     */
-    public String getVendorComponent(Resources resources) {
-        return resources.getString(R.string.config_systemUIVendorServiceComponent);
-    }
-
-    /**
-     * Returns the list of {@link CoreStartable} components that should be started per user.
-     */
-    public Map<Class<?>, Provider<CoreStartable>> getStartableComponentsPerUser() {
-        return mSysUIComponent.getPerUserStartables();
-    }
-
-    /**
-     * Creates an instance of ScreenshotNotificationSmartActionsProvider.
-     * This method is overridden in vendor specific implementation of Sys UI.
-     */
-    public ScreenshotNotificationSmartActionsProvider
-                createScreenshotNotificationSmartActionsProvider(
-                        Context context, Executor executor, Handler uiHandler) {
-        return new ScreenshotNotificationSmartActionsProvider();
-    }
-
-    /**
-     * Creates an instance of BackGestureTfClassifierProvider.
-     * This method is overridden in vendor specific implementation of Sys UI.
-     */
-    public BackGestureTfClassifierProvider createBackGestureTfClassifierProvider(
-            AssetManager am, String modelName) {
-        return new BackGestureTfClassifierProvider();
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIInitializer.java b/packages/SystemUI/src/com/android/systemui/SystemUIInitializer.java
new file mode 100644
index 0000000..5f586c9
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIInitializer.java
@@ -0,0 +1,180 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.util.Log;
+
+import com.android.systemui.dagger.GlobalRootComponent;
+import com.android.systemui.dagger.SysUIComponent;
+import com.android.systemui.dagger.WMComponent;
+import com.android.systemui.util.InitializationChecker;
+import com.android.wm.shell.dagger.WMShellConcurrencyModule;
+import com.android.wm.shell.sysui.ShellInterface;
+import com.android.wm.shell.transition.ShellTransitions;
+
+import java.util.Optional;
+import java.util.concurrent.ExecutionException;
+
+/**
+ * Initializer that stands up SystemUI.
+ *
+ * Implementations should override {@link #getGlobalRootComponentBuilder()} to fill in their own
+ * Dagger root component.
+ */
+public abstract class SystemUIInitializer {
+    private static final String TAG = "SystemUIFactory";
+
+    private final Context mContext;
+
+    private GlobalRootComponent mRootComponent;
+    private WMComponent mWMComponent;
+    private SysUIComponent mSysUIComponent;
+    private InitializationChecker mInitializationChecker;
+
+    public SystemUIInitializer(Context context) {
+        mContext = context;
+    }
+
+    protected abstract GlobalRootComponent.Builder getGlobalRootComponentBuilder();
+
+    /**
+     * Prepares the SysUIComponent builder before it is built.
+     * @param sysUIBuilder the builder provided by the root component's getSysUIComponent() method
+     * @param wm the built WMComponent from the root component's getWMComponent() method
+     */
+    protected SysUIComponent.Builder prepareSysUIComponentBuilder(
+            SysUIComponent.Builder sysUIBuilder, WMComponent wm) {
+        return sysUIBuilder;
+    }
+
+    /**
+     * Starts the initialization process. This stands up the Dagger graph.
+     */
+    public void init(boolean fromTest) throws ExecutionException, InterruptedException {
+        mRootComponent = getGlobalRootComponentBuilder()
+                .context(mContext)
+                .instrumentationTest(fromTest)
+                .build();
+
+        mInitializationChecker = mRootComponent.getInitializationChecker();
+        boolean initializeComponents = mInitializationChecker.initializeComponents();
+
+        // Stand up WMComponent
+        setupWmComponent(mContext);
+
+        // And finally, retrieve whatever SysUI needs from WMShell and build SysUI.
+        SysUIComponent.Builder builder = mRootComponent.getSysUIComponent();
+        if (initializeComponents) {
+            // Only initialize when not starting from tests since this currently initializes some
+            // components that shouldn't be run in the test environment
+            builder = prepareSysUIComponentBuilder(builder, mWMComponent)
+                    .setShell(mWMComponent.getShell())
+                    .setPip(mWMComponent.getPip())
+                    .setSplitScreen(mWMComponent.getSplitScreen())
+                    .setOneHanded(mWMComponent.getOneHanded())
+                    .setBubbles(mWMComponent.getBubbles())
+                    .setTaskViewFactory(mWMComponent.getTaskViewFactory())
+                    .setTransitions(mWMComponent.getTransitions())
+                    .setStartingSurface(mWMComponent.getStartingSurface())
+                    .setDisplayAreaHelper(mWMComponent.getDisplayAreaHelper())
+                    .setRecentTasks(mWMComponent.getRecentTasks())
+                    .setBackAnimation(mWMComponent.getBackAnimation());
+
+            // Only initialize when not starting from tests since this currently initializes some
+            // components that shouldn't be run in the test environment
+            mWMComponent.init();
+        } else {
+            // TODO: Call on prepareSysUIComponentBuilder but not with real components. Other option
+            // is separating this logic into newly creating SystemUITestsFactory.
+            builder = prepareSysUIComponentBuilder(builder, mWMComponent)
+                    .setShell(new ShellInterface() {})
+                    .setPip(Optional.ofNullable(null))
+                    .setSplitScreen(Optional.ofNullable(null))
+                    .setOneHanded(Optional.ofNullable(null))
+                    .setBubbles(Optional.ofNullable(null))
+                    .setTaskViewFactory(Optional.ofNullable(null))
+                    .setTransitions(new ShellTransitions() {})
+                    .setDisplayAreaHelper(Optional.ofNullable(null))
+                    .setStartingSurface(Optional.ofNullable(null))
+                    .setRecentTasks(Optional.ofNullable(null))
+                    .setBackAnimation(Optional.ofNullable(null));
+        }
+        mSysUIComponent = builder.build();
+        if (initializeComponents) {
+            mSysUIComponent.init();
+        }
+
+        // Every other part of our codebase currently relies on Dependency, so we
+        // really need to ensure the Dependency gets initialized early on.
+        Dependency dependency = mSysUIComponent.createDependency();
+        dependency.start();
+    }
+
+    /**
+     * Sets up {@link #mWMComponent}. On devices where the Shell runs on its own main thread,
+     * this will pre-create the thread to ensure that the components are constructed on the
+     * same thread, to reduce the likelihood of side effects from running the constructors on
+     * a different thread than the rest of the class logic.
+     */
+    private void setupWmComponent(Context context) {
+        WMComponent.Builder wmBuilder = mRootComponent.getWMComponentBuilder();
+        if (!mInitializationChecker.initializeComponents()
+                || !WMShellConcurrencyModule.enableShellMainThread(context)) {
+            // If running under tests or shell thread is not enabled, we don't need anything special
+            mWMComponent = wmBuilder.build();
+            return;
+        }
+
+        // If the shell main thread is enabled, initialize the component on that thread
+        HandlerThread shellThread = WMShellConcurrencyModule.createShellMainThread();
+        shellThread.start();
+
+        // Use an async handler since we don't care about synchronization
+        Handler shellHandler = Handler.createAsync(shellThread.getLooper());
+        boolean built = shellHandler.runWithScissors(() -> {
+            wmBuilder.setShellMainThread(shellThread);
+            mWMComponent = wmBuilder.build();
+        }, 5000);
+        if (!built) {
+            Log.w(TAG, "Failed to initialize WMComponent");
+            throw new RuntimeException();
+        }
+    }
+
+    public GlobalRootComponent getRootComponent() {
+        return mRootComponent;
+    }
+
+    public WMComponent getWMComponent() {
+        return mWMComponent;
+    }
+
+    public SysUIComponent getSysUIComponent() {
+        return mSysUIComponent;
+    }
+
+    /**
+     * Returns the list of additional system UI components that should be started.
+     */
+    public String getVendorComponent(Resources resources) {
+        return resources.getString(R.string.config_systemUIVendorServiceComponent);
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIInitializerFactory.kt b/packages/SystemUI/src/com/android/systemui/SystemUIInitializerFactory.kt
new file mode 100644
index 0000000..b9454e8
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIInitializerFactory.kt
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.util.Log
+import com.android.internal.annotations.VisibleForTesting
+import com.android.systemui.util.Assert
+
+/**
+ * Factory to reflectively lookup a [SystemUIInitializer] to start SystemUI with.
+ */
+@Deprecated("Provide your own {@link SystemUIAppComponentFactoryBase} that doesn't need this.")
+object SystemUIInitializerFactory {
+    private const val TAG = "SysUIInitializerFactory"
+    @SuppressLint("StaticFieldLeak")
+    private var initializer: SystemUIInitializer? = null
+
+    /**
+     * Instantiate a [SystemUIInitializer] reflectively.
+     */
+    @JvmStatic
+    fun createWithContext(context: Context): SystemUIInitializer {
+        return createFromConfig(context)
+    }
+
+    /**
+     * Instantiate a [SystemUIInitializer] reflectively.
+     */
+    @JvmStatic
+    private fun createFromConfig(context: Context): SystemUIInitializer {
+        Assert.isMainThread()
+
+        return createFromConfigNoAssert(context)
+    }
+
+    @JvmStatic
+    @VisibleForTesting
+    fun createFromConfigNoAssert(context: Context): SystemUIInitializer {
+
+        return initializer ?: run {
+            val className = context.getString(R.string.config_systemUIFactoryComponent)
+            if (className.isEmpty()) {
+                throw RuntimeException("No SystemUIFactory component configured")
+            }
+            try {
+                val cls = context.classLoader.loadClass(className)
+                val constructor = cls.getConstructor(Context::class.java)
+                (constructor.newInstance(context) as SystemUIInitializer).apply {
+                    initializer = this
+                }
+            } catch (t: Throwable) {
+                Log.w(TAG, "Error creating SystemUIInitializer component: $className", t)
+                throw t
+            }
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIInitializerImpl.kt b/packages/SystemUI/src/com/android/systemui/SystemUIInitializerImpl.kt
new file mode 100644
index 0000000..8920c92
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIInitializerImpl.kt
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui
+
+import android.content.Context
+import com.android.systemui.dagger.DaggerGlobalRootComponent
+import com.android.systemui.dagger.GlobalRootComponent
+
+/**
+ * {@link SystemUIInitializer} that stands up AOSP SystemUI.
+ */
+class SystemUIInitializerImpl(context: Context) : SystemUIInitializer(context) {
+    override fun getGlobalRootComponentBuilder(): GlobalRootComponent.Builder {
+        return DaggerGlobalRootComponent.builder()
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/SystemActions.java b/packages/SystemUI/src/com/android/systemui/accessibility/SystemActions.java
index bd8e44c..a1288b5 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/SystemActions.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/SystemActions.java
@@ -199,8 +199,9 @@
         mNotificationShadeController = notificationShadeController;
         // Saving in instance variable since to prevent GC since
         // NotificationShadeWindowController.registerCallback() only keeps weak references.
-        mNotificationShadeCallback = (keyguardShowing, keyguardOccluded, bouncerShowing, mDozing) ->
-                registerOrUnregisterDismissNotificationShadeAction();
+        mNotificationShadeCallback =
+                (keyguardShowing, keyguardOccluded, bouncerShowing, mDozing, panelExpanded) ->
+                        registerOrUnregisterDismissNotificationShadeAction();
         mCentralSurfacesOptionalLazy = centralSurfacesOptionalLazy;
     }
 
@@ -499,7 +500,7 @@
 
     private void handleTakeScreenshot() {
         ScreenshotHelper screenshotHelper = new ScreenshotHelper(mContext);
-        screenshotHelper.takeScreenshot(WindowManager.TAKE_SCREENSHOT_FULLSCREEN, true, true,
+        screenshotHelper.takeScreenshot(WindowManager.TAKE_SCREENSHOT_FULLSCREEN,
                 SCREENSHOT_ACCESSIBILITY_ACTIONS, new Handler(Looper.getMainLooper()), null);
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuView.java b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuView.java
index d2703f5..aff0b1f 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuView.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuView.java
@@ -353,6 +353,7 @@
         }
 
         mIsShowing = false;
+        mDragAnimator.cancel();
         mWindowManager.removeView(this);
 
         setOnApplyWindowInsetsListener(null);
diff --git a/packages/SystemUI/src/com/android/systemui/analytics/DataCollector.java b/packages/SystemUI/src/com/android/systemui/analytics/DataCollector.java
deleted file mode 100644
index 0db5bef..0000000
--- a/packages/SystemUI/src/com/android/systemui/analytics/DataCollector.java
+++ /dev/null
@@ -1,506 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.analytics;
-
-import static com.android.systemui.statusbar.phone.nano.TouchAnalyticsProto.Session;
-import static com.android.systemui.statusbar.phone.nano.TouchAnalyticsProto.Session.PhoneEvent;
-
-import android.content.Context;
-import android.database.ContentObserver;
-import android.hardware.Sensor;
-import android.hardware.SensorEvent;
-import android.hardware.SensorEventListener;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.os.Build;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.UserHandle;
-import android.provider.Settings;
-import android.util.Log;
-import android.view.MotionEvent;
-import android.widget.Toast;
-
-import com.android.systemui.Dependency;
-import com.android.systemui.plugins.FalsingPlugin;
-import com.android.systemui.plugins.PluginListener;
-import com.android.systemui.shared.plugins.PluginManager;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-/**
- * Tracks touch, sensor and phone events when the lockscreen is on. If the phone is unlocked
- * the data containing these events is saved to a file. This data is collected
- * to analyze how a human interaction looks like.
- *
- * A session starts when the screen is turned on.
- * A session ends when the screen is turned off or user unlocks the phone.
- */
-public class DataCollector implements SensorEventListener {
-    private static final String TAG = "DataCollector";
-    private static final String COLLECTOR_ENABLE = "data_collector_enable";
-    private static final String COLLECT_BAD_TOUCHES = "data_collector_collect_bad_touches";
-    private static final String ALLOW_REJECTED_TOUCH_REPORTS =
-            "data_collector_allow_rejected_touch_reports";
-    private static final String DISABLE_UNLOCKING_FOR_FALSING_COLLECTION =
-            "data_collector_disable_unlocking";
-
-    private static final long TIMEOUT_MILLIS = 11000; // 11 seconds.
-    public static final boolean DEBUG = false;
-
-    private final Handler mHandler = new Handler(Looper.getMainLooper());
-    private final Context mContext;
-
-    // Err on the side of caution, so logging is not started after a crash even tough the screen
-    // is off.
-    private SensorLoggerSession mCurrentSession = null;
-
-    private boolean mEnableCollector = false;
-    private boolean mCollectBadTouches = false;
-    private boolean mCornerSwiping = false;
-    private boolean mTrackingStarted = false;
-    private boolean mAllowReportRejectedTouch = false;
-    private boolean mDisableUnlocking = false;
-
-    private static DataCollector sInstance = null;
-
-    private FalsingPlugin mFalsingPlugin = null;
-
-    protected final ContentObserver mSettingsObserver = new ContentObserver(mHandler) {
-        @Override
-        public void onChange(boolean selfChange) {
-            updateConfiguration();
-        }
-    };
-
-    private final PluginListener mPluginListener = new PluginListener<FalsingPlugin>() {
-        public void onPluginConnected(FalsingPlugin plugin, Context context) {
-            mFalsingPlugin = plugin;
-        }
-
-        public void onPluginDisconnected(FalsingPlugin plugin) {
-            mFalsingPlugin = null;
-        }
-    };
-
-    private DataCollector(Context context) {
-        mContext = context;
-
-        mContext.getContentResolver().registerContentObserver(
-                Settings.Secure.getUriFor(COLLECTOR_ENABLE), false,
-                mSettingsObserver,
-                UserHandle.USER_ALL);
-
-        mContext.getContentResolver().registerContentObserver(
-                Settings.Secure.getUriFor(COLLECT_BAD_TOUCHES), false,
-                mSettingsObserver,
-                UserHandle.USER_ALL);
-
-        mContext.getContentResolver().registerContentObserver(
-                Settings.Secure.getUriFor(ALLOW_REJECTED_TOUCH_REPORTS), false,
-                mSettingsObserver,
-                UserHandle.USER_ALL);
-
-        mContext.getContentResolver().registerContentObserver(
-                Settings.Secure.getUriFor(DISABLE_UNLOCKING_FOR_FALSING_COLLECTION), false,
-                mSettingsObserver,
-                UserHandle.USER_ALL);
-
-        updateConfiguration();
-
-        Dependency.get(PluginManager.class).addPluginListener(mPluginListener, FalsingPlugin.class);
-    }
-
-    public static DataCollector getInstance(Context context) {
-        if (sInstance == null) {
-            sInstance = new DataCollector(context);
-        }
-        return sInstance;
-    }
-
-    private void updateConfiguration() {
-        mEnableCollector = Build.IS_DEBUGGABLE && 0 != Settings.Secure.getInt(
-                mContext.getContentResolver(),
-                COLLECTOR_ENABLE, 0);
-        mCollectBadTouches = mEnableCollector && 0 != Settings.Secure.getInt(
-                mContext.getContentResolver(),
-                COLLECT_BAD_TOUCHES, 0);
-        mAllowReportRejectedTouch = Build.IS_DEBUGGABLE && 0 != Settings.Secure.getInt(
-                mContext.getContentResolver(),
-                ALLOW_REJECTED_TOUCH_REPORTS, 0);
-        mDisableUnlocking = mEnableCollector && Build.IS_DEBUGGABLE && 0 != Settings.Secure.getInt(
-                mContext.getContentResolver(),
-                DISABLE_UNLOCKING_FOR_FALSING_COLLECTION, 0);
-    }
-
-    private boolean sessionEntrypoint() {
-        if (isEnabled() && mCurrentSession == null) {
-            onSessionStart();
-            return true;
-        }
-        return false;
-    }
-
-    private void sessionExitpoint(int result) {
-        if (mCurrentSession != null) {
-            onSessionEnd(result);
-        }
-    }
-
-    private void onSessionStart() {
-        mCornerSwiping = false;
-        mTrackingStarted = false;
-        mCurrentSession = new SensorLoggerSession(System.currentTimeMillis(), System.nanoTime());
-    }
-
-    private void onSessionEnd(int result) {
-        SensorLoggerSession session = mCurrentSession;
-        mCurrentSession = null;
-
-        if (mEnableCollector || mDisableUnlocking) {
-            session.end(System.currentTimeMillis(), result);
-            queueSession(session);
-        }
-    }
-
-    public Uri reportRejectedTouch() {
-        if (mCurrentSession == null) {
-            Toast.makeText(mContext, "Generating rejected touch report failed: session timed out.",
-                    Toast.LENGTH_LONG).show();
-            return null;
-        }
-        SensorLoggerSession currentSession = mCurrentSession;
-
-        currentSession.setType(Session.REJECTED_TOUCH_REPORT);
-        currentSession.end(System.currentTimeMillis(), Session.SUCCESS);
-        Session proto = currentSession.toProto();
-
-        byte[] b = Session.toByteArray(proto);
-        File dir = new File(mContext.getExternalCacheDir(), "rejected_touch_reports");
-        dir.mkdir();
-        File touch = new File(dir, "rejected_touch_report_" + System.currentTimeMillis());
-
-        try {
-            new FileOutputStream(touch).write(b);
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-
-        return Uri.fromFile(touch);
-    }
-
-    private void queueSession(final SensorLoggerSession currentSession) {
-        AsyncTask.execute(new Runnable() {
-            @Override
-            public void run() {
-                byte[] b = Session.toByteArray(currentSession.toProto());
-
-                if (mFalsingPlugin != null) {
-                    mFalsingPlugin.dataCollected(currentSession.getResult() == Session.SUCCESS, b);
-                } else {
-                    String dir = mContext.getFilesDir().getAbsolutePath();
-                    if (currentSession.getResult() != Session.SUCCESS) {
-                        if (!mDisableUnlocking && !mCollectBadTouches) {
-                            return;
-                        }
-                        dir += "/bad_touches";
-                    } else if (!mDisableUnlocking) {
-                        dir += "/good_touches";
-                    }
-
-                    File file = new File(dir);
-                    file.mkdir();
-                    File touch = new File(file, "trace_" + System.currentTimeMillis());
-                    try {
-                        new FileOutputStream(touch).write(b);
-                    } catch (IOException e) {
-                        throw new RuntimeException(e);
-                    }
-                }
-            }
-        });
-    }
-
-    @Override
-    public synchronized void onSensorChanged(SensorEvent event) {
-        if (isEnabled() && mCurrentSession != null) {
-            mCurrentSession.addSensorEvent(event, System.nanoTime());
-        }
-    }
-
-    @Override
-    public void onAccuracyChanged(Sensor sensor, int accuracy) {
-    }
-
-    /**
-     * @return true if data is being collected - either for data gathering or creating a
-     *         rejected touch report.
-     */
-    public boolean isEnabled() {
-        return mEnableCollector || mAllowReportRejectedTouch || mDisableUnlocking;
-    }
-
-    public boolean isUnlockingDisabled() {
-        return mDisableUnlocking;
-    }
-    /**
-     * @return true if the full data set for data gathering should be collected - including
-     *         extensive sensor data, which is is not normally included with rejected touch reports.
-     */
-    public boolean isEnabledFull() {
-        return mEnableCollector;
-    }
-
-    public void onScreenTurningOn() {
-        if (sessionEntrypoint()) {
-            if (DEBUG) {
-                Log.d(TAG, "onScreenTurningOn");
-            }
-            addEvent(PhoneEvent.ON_SCREEN_ON);
-        }
-    }
-
-    public void onScreenOnFromTouch() {
-        if (sessionEntrypoint()) {
-            if (DEBUG) {
-                Log.d(TAG, "onScreenOnFromTouch");
-            }
-            addEvent(PhoneEvent.ON_SCREEN_ON_FROM_TOUCH);
-        }
-    }
-
-    public void onScreenOff() {
-        if (DEBUG) {
-            Log.d(TAG, "onScreenOff");
-        }
-        addEvent(PhoneEvent.ON_SCREEN_OFF);
-        sessionExitpoint(Session.FAILURE);
-    }
-
-    public void onSucccessfulUnlock() {
-        if (DEBUG) {
-            Log.d(TAG, "onSuccessfulUnlock");
-        }
-        addEvent(PhoneEvent.ON_SUCCESSFUL_UNLOCK);
-        sessionExitpoint(Session.SUCCESS);
-    }
-
-    public void onBouncerShown() {
-        if (DEBUG) {
-            Log.d(TAG, "onBouncerShown");
-        }
-        addEvent(PhoneEvent.ON_BOUNCER_SHOWN);
-    }
-
-    public void onBouncerHidden() {
-        if (DEBUG) {
-            Log.d(TAG, "onBouncerHidden");
-        }
-        addEvent(PhoneEvent.ON_BOUNCER_HIDDEN);
-    }
-
-    public void onQsDown() {
-        if (DEBUG) {
-            Log.d(TAG, "onQsDown");
-        }
-        addEvent(PhoneEvent.ON_QS_DOWN);
-    }
-
-    public void setQsExpanded(boolean expanded) {
-        if (DEBUG) {
-            Log.d(TAG, "setQsExpanded = " + expanded);
-        }
-        if (expanded) {
-            addEvent(PhoneEvent.SET_QS_EXPANDED_TRUE);
-        } else {
-            addEvent(PhoneEvent.SET_QS_EXPANDED_FALSE);
-        }
-    }
-
-    public void onTrackingStarted() {
-        if (DEBUG) {
-            Log.d(TAG, "onTrackingStarted");
-        }
-        mTrackingStarted = true;
-        addEvent(PhoneEvent.ON_TRACKING_STARTED);
-    }
-
-    public void onTrackingStopped() {
-        if (mTrackingStarted) {
-            if (DEBUG) {
-                Log.d(TAG, "onTrackingStopped");
-            }
-            mTrackingStarted = false;
-            addEvent(PhoneEvent.ON_TRACKING_STOPPED);
-        }
-    }
-
-    public void onNotificationActive() {
-        if (DEBUG) {
-            Log.d(TAG, "onNotificationActive");
-        }
-        addEvent(PhoneEvent.ON_NOTIFICATION_ACTIVE);
-    }
-
-
-    public void onNotificationDoubleTap() {
-        if (DEBUG) {
-            Log.d(TAG, "onNotificationDoubleTap");
-        }
-        addEvent(PhoneEvent.ON_NOTIFICATION_DOUBLE_TAP);
-    }
-
-    public void setNotificationExpanded() {
-        if (DEBUG) {
-            Log.d(TAG, "setNotificationExpanded");
-        }
-        addEvent(PhoneEvent.SET_NOTIFICATION_EXPANDED);
-    }
-
-    public void onNotificatonStartDraggingDown() {
-        if (DEBUG) {
-            Log.d(TAG, "onNotificationStartDraggingDown");
-        }
-        addEvent(PhoneEvent.ON_NOTIFICATION_START_DRAGGING_DOWN);
-    }
-
-    public void onStartExpandingFromPulse() {
-        if (DEBUG) {
-            Log.d(TAG, "onStartExpandingFromPulse");
-        }
-        // TODO: maybe add event
-    }
-
-    public void onExpansionFromPulseStopped() {
-        if (DEBUG) {
-            Log.d(TAG, "onExpansionFromPulseStopped");
-        }
-        // TODO: maybe add event
-    }
-
-    public void onNotificatonStopDraggingDown() {
-        if (DEBUG) {
-            Log.d(TAG, "onNotificationStopDraggingDown");
-        }
-        addEvent(PhoneEvent.ON_NOTIFICATION_STOP_DRAGGING_DOWN);
-    }
-
-    public void onNotificationDismissed() {
-        if (DEBUG) {
-            Log.d(TAG, "onNotificationDismissed");
-        }
-        addEvent(PhoneEvent.ON_NOTIFICATION_DISMISSED);
-    }
-
-    public void onNotificatonStartDismissing() {
-        if (DEBUG) {
-            Log.d(TAG, "onNotificationStartDismissing");
-        }
-        addEvent(PhoneEvent.ON_NOTIFICATION_START_DISMISSING);
-    }
-
-    public void onNotificatonStopDismissing() {
-        if (DEBUG) {
-            Log.d(TAG, "onNotificationStopDismissing");
-        }
-        addEvent(PhoneEvent.ON_NOTIFICATION_STOP_DISMISSING);
-    }
-
-    public void onCameraOn() {
-        if (DEBUG) {
-            Log.d(TAG, "onCameraOn");
-        }
-        addEvent(PhoneEvent.ON_CAMERA_ON);
-    }
-
-    public void onLeftAffordanceOn() {
-        if (DEBUG) {
-            Log.d(TAG, "onLeftAffordanceOn");
-        }
-        addEvent(PhoneEvent.ON_LEFT_AFFORDANCE_ON);
-    }
-
-    public void onAffordanceSwipingStarted(boolean rightCorner) {
-        if (DEBUG) {
-            Log.d(TAG, "onAffordanceSwipingStarted");
-        }
-        mCornerSwiping = true;
-        if (rightCorner) {
-            addEvent(PhoneEvent.ON_RIGHT_AFFORDANCE_SWIPING_STARTED);
-        } else {
-            addEvent(PhoneEvent.ON_LEFT_AFFORDANCE_SWIPING_STARTED);
-        }
-    }
-
-    public void onAffordanceSwipingAborted() {
-        if (mCornerSwiping) {
-            if (DEBUG) {
-                Log.d(TAG, "onAffordanceSwipingAborted");
-            }
-            mCornerSwiping = false;
-            addEvent(PhoneEvent.ON_AFFORDANCE_SWIPING_ABORTED);
-        }
-    }
-
-    public void onUnlockHintStarted() {
-        if (DEBUG) {
-            Log.d(TAG, "onUnlockHintStarted");
-        }
-        addEvent(PhoneEvent.ON_UNLOCK_HINT_STARTED);
-    }
-
-    public void onCameraHintStarted() {
-        if (DEBUG) {
-            Log.d(TAG, "onCameraHintStarted");
-        }
-        addEvent(PhoneEvent.ON_CAMERA_HINT_STARTED);
-    }
-
-    public void onLeftAffordanceHintStarted() {
-        if (DEBUG) {
-            Log.d(TAG, "onLeftAffordanceHintStarted");
-        }
-        addEvent(PhoneEvent.ON_LEFT_AFFORDANCE_HINT_STARTED);
-    }
-
-    public void onTouchEvent(MotionEvent event, int width, int height) {
-        if (mCurrentSession != null) {
-            if (DEBUG) {
-                Log.v(TAG, "onTouchEvent(ev.action="
-                        + MotionEvent.actionToString(event.getAction()) + ")");
-            }
-            mCurrentSession.addMotionEvent(event);
-            mCurrentSession.setTouchArea(width, height);
-        }
-    }
-
-    private void addEvent(int eventType) {
-        if (isEnabled() && mCurrentSession != null) {
-            mCurrentSession.addPhoneEvent(eventType, System.nanoTime());
-        }
-    }
-
-    public boolean isReportingEnabled() {
-        return mAllowReportRejectedTouch;
-    }
-
-    public void onFalsingSessionStarted() {
-        sessionEntrypoint();
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/analytics/SensorLoggerSession.java b/packages/SystemUI/src/com/android/systemui/analytics/SensorLoggerSession.java
deleted file mode 100644
index d294012..0000000
--- a/packages/SystemUI/src/com/android/systemui/analytics/SensorLoggerSession.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.analytics;
-
-import static com.android.systemui.statusbar.phone.nano.TouchAnalyticsProto.Session;
-import static com.android.systemui.statusbar.phone.nano.TouchAnalyticsProto.Session.PhoneEvent;
-import static com.android.systemui.statusbar.phone.nano.TouchAnalyticsProto.Session.SensorEvent;
-import static com.android.systemui.statusbar.phone.nano.TouchAnalyticsProto.Session.TouchEvent;
-
-import android.os.Build;
-import android.util.Log;
-import android.view.MotionEvent;
-
-import java.util.ArrayList;
-
-/**
- * Collects touch, sensor and phone events and converts the data to
- * TouchAnalyticsProto.Session.
- */
-public class SensorLoggerSession {
-    private static final String TAG = "SensorLoggerSession";
-
-    private final long mStartTimestampMillis;
-    private final long mStartSystemTimeNanos;
-
-    private long mEndTimestampMillis;
-    private int mType;
-
-    private ArrayList<TouchEvent> mMotionEvents = new ArrayList<>();
-    private ArrayList<SensorEvent> mSensorEvents = new ArrayList<>();
-    private ArrayList<PhoneEvent> mPhoneEvents = new ArrayList<>();
-    private int mTouchAreaHeight;
-    private int mTouchAreaWidth;
-    private int mResult = Session.UNKNOWN;
-
-    public SensorLoggerSession(long startTimestampMillis, long startSystemTimeNanos) {
-        mStartTimestampMillis = startTimestampMillis;
-        mStartSystemTimeNanos = startSystemTimeNanos;
-        mType = Session.REAL;
-    }
-
-    public void setType(int type) {
-        mType = type;
-    }
-
-    public void end(long endTimestampMillis, int result) {
-        mResult = result;
-        mEndTimestampMillis = endTimestampMillis;
-
-        if (DataCollector.DEBUG) {
-            Log.d(TAG, "Ending session result=" + result + " it lasted for " +
-                    (float) (mEndTimestampMillis - mStartTimestampMillis) / 1000f + "s");
-        }
-    }
-
-    public void addMotionEvent(MotionEvent motionEvent) {
-        TouchEvent event = motionEventToProto(motionEvent);
-        mMotionEvents.add(event);
-    }
-
-    public void addSensorEvent(android.hardware.SensorEvent eventOrig, long systemTimeNanos) {
-        SensorEvent event = sensorEventToProto(eventOrig, systemTimeNanos);
-        mSensorEvents.add(event);
-    }
-
-    public void addPhoneEvent(int eventType, long systemTimeNanos) {
-        PhoneEvent event = phoneEventToProto(eventType, systemTimeNanos);
-        mPhoneEvents.add(event);
-    }
-
-
-    @Override
-    public String toString() {
-        final StringBuilder sb = new StringBuilder("Session{");
-        sb.append("mStartTimestampMillis=").append(mStartTimestampMillis);
-        sb.append(", mStartSystemTimeNanos=").append(mStartSystemTimeNanos);
-        sb.append(", mEndTimestampMillis=").append(mEndTimestampMillis);
-        sb.append(", mResult=").append(mResult);
-        sb.append(", mTouchAreaHeight=").append(mTouchAreaHeight);
-        sb.append(", mTouchAreaWidth=").append(mTouchAreaWidth);
-        sb.append(", mMotionEvents=[size=").append(mMotionEvents.size()).append("]");
-        sb.append(", mSensorEvents=[size=").append(mSensorEvents.size()).append("]");
-        sb.append(", mPhoneEvents=[size=").append(mPhoneEvents.size()).append("]");
-        sb.append('}');
-        return sb.toString();
-    }
-
-    public Session toProto() {
-        Session proto = new Session();
-        proto.startTimestampMillis = mStartTimestampMillis;
-        proto.durationMillis = mEndTimestampMillis - mStartTimestampMillis;
-        proto.build = Build.FINGERPRINT;
-        proto.deviceId = Build.DEVICE;
-        proto.result = mResult;
-        proto.type = mType;
-        proto.sensorEvents = mSensorEvents.toArray(proto.sensorEvents);
-        proto.touchEvents = mMotionEvents.toArray(proto.touchEvents);
-        proto.phoneEvents = mPhoneEvents.toArray(proto.phoneEvents);
-        proto.touchAreaWidth = mTouchAreaWidth;
-        proto.touchAreaHeight = mTouchAreaHeight;
-        return proto;
-    }
-
-    private PhoneEvent phoneEventToProto(int eventType, long sysTimeNanos) {
-        PhoneEvent proto = new PhoneEvent();
-        proto.type = eventType;
-        proto.timeOffsetNanos = sysTimeNanos - mStartSystemTimeNanos;
-        return proto;
-    }
-
-    private SensorEvent sensorEventToProto(android.hardware.SensorEvent ev, long sysTimeNanos) {
-        SensorEvent proto = new SensorEvent();
-        proto.type = ev.sensor.getType();
-        proto.timeOffsetNanos = sysTimeNanos - mStartSystemTimeNanos;
-        proto.timestamp = ev.timestamp;
-        proto.values = ev.values.clone();
-        return proto;
-    }
-
-    private TouchEvent motionEventToProto(MotionEvent ev) {
-        int count = ev.getPointerCount();
-        TouchEvent proto = new TouchEvent();
-        proto.timeOffsetNanos = ev.getEventTimeNano() - mStartSystemTimeNanos;
-        proto.action = ev.getActionMasked();
-        proto.actionIndex = ev.getActionIndex();
-        proto.pointers = new TouchEvent.Pointer[count];
-        for (int i = 0; i < count; i++) {
-            TouchEvent.Pointer p = new TouchEvent.Pointer();
-            p.x = ev.getX(i);
-            p.y = ev.getY(i);
-            p.size = ev.getSize(i);
-            p.pressure = ev.getPressure(i);
-            p.id = ev.getPointerId(i);
-            proto.pointers[i] = p;
-        }
-        return proto;
-    }
-
-    public void setTouchArea(int width, int height) {
-        mTouchAreaWidth = width;
-        mTouchAreaHeight = height;
-    }
-
-    public int getResult() {
-        return mResult;
-    }
-
-    public long getStartTimestampMillis() {
-        return mStartTimestampMillis;
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistLogger.kt b/packages/SystemUI/src/com/android/systemui/assist/AssistLogger.kt
index e30f2e4..7326ab3 100644
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/assist/AssistLogger.kt
@@ -25,10 +25,10 @@
 import com.android.internal.logging.InstanceIdSequence
 import com.android.internal.logging.UiEventLogger
 import com.android.internal.util.FrameworkStatsLog
-import com.android.keyguard.KeyguardUpdateMonitor
 import com.android.systemui.assist.AssistantInvocationEvent.Companion.deviceStateFromLegacyDeviceState
 import com.android.systemui.assist.AssistantInvocationEvent.Companion.eventFromLegacyInvocationType
 import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.settings.UserTracker
 import javax.inject.Inject
 
 /** Class for reporting events related to Assistant sessions. */
@@ -37,7 +37,8 @@
     protected val context: Context,
     protected val uiEventLogger: UiEventLogger,
     private val assistUtils: AssistUtils,
-    private val phoneStateMonitor: PhoneStateMonitor
+    private val phoneStateMonitor: PhoneStateMonitor,
+    private val userTracker: UserTracker,
 ) {
 
     private val instanceIdSequence = InstanceIdSequence(INSTANCE_ID_MAX)
@@ -78,7 +79,7 @@
                 FrameworkStatsLog.ASSISTANT_INVOCATION_REPORTED,
                 invocationEvent.id,
                 assistantUid,
-                assistComponentFinal.flattenToString(),
+                assistComponentFinal?.flattenToString() ?: "",
                 getOrCreateInstanceId().id,
                 deviceStateFinal,
                 false)
@@ -91,7 +92,7 @@
         uiEventLogger.logWithInstanceId(
                 sessionEvent,
                 assistantUid,
-                assistantComponent.flattenToString(),
+                assistantComponent?.flattenToString(),
                 getOrCreateInstanceId())
 
         if (SESSION_END_EVENTS.contains(sessionEvent)) {
@@ -112,11 +113,15 @@
         currentInstanceId = null
     }
 
-    protected fun getAssistantComponentForCurrentUser(): ComponentName {
-        return assistUtils.getAssistComponentForUser(KeyguardUpdateMonitor.getCurrentUser())
+    protected fun getAssistantComponentForCurrentUser(): ComponentName? {
+        return assistUtils.getAssistComponentForUser(userTracker.userId)
     }
 
-    protected fun getAssistantUid(assistantComponent: ComponentName): Int {
+    protected fun getAssistantUid(assistantComponent: ComponentName?): Int {
+        if (assistantComponent == null) {
+            return 0
+        }
+
         var assistantUid = 0
         try {
             assistantUid = context.packageManager.getApplicationInfo(
@@ -138,4 +143,4 @@
                         AssistantSessionEvent.ASSISTANT_SESSION_INVOCATION_CANCELLED,
                         AssistantSessionEvent.ASSISTANT_SESSION_CLOSE)
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java
index bc1c5f4..84e1c3d 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java
@@ -90,6 +90,8 @@
     private static final int STATE_ANIMATING_OUT = 4;
     private static final int STATE_GONE = 5;
 
+    private static final float BACKGROUND_DIM_AMOUNT = 0.5f;
+
     /** Shows biometric prompt dialog animation. */
     private static final String SHOW = "show";
     /** Dismiss biometric prompt dialog animation.  */
@@ -247,13 +249,13 @@
                     break;
                 case AuthBiometricView.Callback.ACTION_BUTTON_TRY_AGAIN:
                     mFailedModalities.clear();
-                    mConfig.mCallback.onTryAgainPressed();
+                    mConfig.mCallback.onTryAgainPressed(getRequestId());
                     break;
                 case AuthBiometricView.Callback.ACTION_ERROR:
                     animateAway(AuthDialogCallback.DISMISSED_ERROR);
                     break;
                 case AuthBiometricView.Callback.ACTION_USE_DEVICE_CREDENTIAL:
-                    mConfig.mCallback.onDeviceCredentialPressed();
+                    mConfig.mCallback.onDeviceCredentialPressed(getRequestId());
                     mHandler.postDelayed(() -> {
                         addCredentialView(false /* animatePanel */, true /* animateContents */);
                     }, mConfig.mSkipAnimation ? 0 : AuthDialog.ANIMATE_CREDENTIAL_START_DELAY_MS);
@@ -371,7 +373,7 @@
 
     void sendEarlyUserCanceled() {
         mConfig.mCallback.onSystemEvent(
-                BiometricConstants.BIOMETRIC_SYSTEM_EVENT_EARLY_USER_CANCEL);
+                BiometricConstants.BIOMETRIC_SYSTEM_EVENT_EARLY_USER_CANCEL, getRequestId());
     }
 
     @Override
@@ -754,6 +756,16 @@
                     .setDuration(animateDuration)
                     .setInterpolator(mLinearOutSlowIn)
                     .setListener(getJankListener(this, DISMISS, animateDuration))
+                    .setUpdateListener(animation -> {
+                        if (mWindowManager == null || getViewRootImpl() == null) {
+                            Log.w(TAG, "skip updateViewLayout() for dim animation.");
+                            return;
+                        }
+                        final WindowManager.LayoutParams lp = getViewRootImpl().mWindowAttributes;
+                        lp.dimAmount = (1.0f - (Float) animation.getAnimatedValue())
+                                * BACKGROUND_DIM_AMOUNT;
+                        mWindowManager.updateViewLayout(this, lp);
+                    })
                     .withLayer()
                     .start();
         });
@@ -762,7 +774,8 @@
     private void sendPendingCallbackIfNotNull() {
         Log.d(TAG, "pendingCallback: " + mPendingCallbackReason);
         if (mPendingCallbackReason != null) {
-            mConfig.mCallback.onDismissed(mPendingCallbackReason, mCredentialAttestation);
+            mConfig.mCallback.onDismissed(mPendingCallbackReason,
+                    mCredentialAttestation, getRequestId());
             mPendingCallbackReason = null;
         }
     }
@@ -792,7 +805,7 @@
         }
         mContainerState = STATE_SHOWING;
         if (mBiometricView != null) {
-            mConfig.mCallback.onDialogAnimatedIn();
+            mConfig.mCallback.onDialogAnimatedIn(getRequestId());
             mBiometricView.onDialogAnimatedIn();
         }
     }
@@ -800,7 +813,8 @@
     @VisibleForTesting
     static WindowManager.LayoutParams getLayoutParams(IBinder windowToken, CharSequence title) {
         final int windowFlags = WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED
-                | WindowManager.LayoutParams.FLAG_SECURE;
+                | WindowManager.LayoutParams.FLAG_SECURE
+                | WindowManager.LayoutParams.FLAG_DIM_BEHIND;
         final WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
                 ViewGroup.LayoutParams.MATCH_PARENT,
                 ViewGroup.LayoutParams.MATCH_PARENT,
@@ -811,6 +825,7 @@
         lp.setFitInsetsTypes(lp.getFitInsetsTypes() & ~WindowInsets.Type.ime());
         lp.setTitle("BiometricPrompt");
         lp.accessibilityTitle = title;
+        lp.dimAmount = BACKGROUND_DIM_AMOUNT;
         lp.token = windowToken;
         return lp;
     }
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java
index a097c5e..47ff59c 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthController.java
@@ -340,11 +340,17 @@
     }
 
     @Override
-    public void onTryAgainPressed() {
+    public void onTryAgainPressed(long requestId) {
         if (mReceiver == null) {
             Log.e(TAG, "onTryAgainPressed: Receiver is null");
             return;
         }
+
+        if (requestId != mCurrentDialog.getRequestId()) {
+            Log.w(TAG, "requestId doesn't match, skip onTryAgainPressed");
+            return;
+        }
+
         try {
             mReceiver.onTryAgainPressed();
         } catch (RemoteException e) {
@@ -353,11 +359,17 @@
     }
 
     @Override
-    public void onDeviceCredentialPressed() {
+    public void onDeviceCredentialPressed(long requestId) {
         if (mReceiver == null) {
             Log.e(TAG, "onDeviceCredentialPressed: Receiver is null");
             return;
         }
+
+        if (requestId != mCurrentDialog.getRequestId()) {
+            Log.w(TAG, "requestId doesn't match, skip onDeviceCredentialPressed");
+            return;
+        }
+
         try {
             mReceiver.onDeviceCredentialPressed();
         } catch (RemoteException e) {
@@ -366,11 +378,17 @@
     }
 
     @Override
-    public void onSystemEvent(int event) {
+    public void onSystemEvent(int event, long requestId) {
         if (mReceiver == null) {
             Log.e(TAG, "onSystemEvent(" + event + "): Receiver is null");
             return;
         }
+
+        if (requestId != mCurrentDialog.getRequestId()) {
+            Log.w(TAG, "requestId doesn't match, skip onSystemEvent");
+            return;
+        }
+
         try {
             mReceiver.onSystemEvent(event);
         } catch (RemoteException e) {
@@ -379,12 +397,17 @@
     }
 
     @Override
-    public void onDialogAnimatedIn() {
+    public void onDialogAnimatedIn(long requestId) {
         if (mReceiver == null) {
             Log.e(TAG, "onDialogAnimatedIn: Receiver is null");
             return;
         }
 
+        if (requestId != mCurrentDialog.getRequestId()) {
+            Log.w(TAG, "requestId doesn't match, skip onDialogAnimatedIn");
+            return;
+        }
+
         try {
             mReceiver.onDialogAnimatedIn();
         } catch (RemoteException e) {
@@ -393,7 +416,14 @@
     }
 
     @Override
-    public void onDismissed(@DismissedReason int reason, @Nullable byte[] credentialAttestation) {
+    public void onDismissed(@DismissedReason int reason,
+                            @Nullable byte[] credentialAttestation, long requestId) {
+
+        if (mCurrentDialog != null && requestId != mCurrentDialog.getRequestId()) {
+            Log.w(TAG, "requestId doesn't match, skip onDismissed");
+            return;
+        }
+
         switch (reason) {
             case AuthDialogCallback.DISMISSED_USER_CANCELED:
                 sendResultAndCleanUp(BiometricPrompt.DISMISSED_REASON_USER_CANCEL,
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthDialogCallback.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthDialogCallback.java
index a7d2901..bbe461a 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthDialogCallback.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthDialogCallback.java
@@ -47,27 +47,28 @@
      * @param reason
      * @param credentialAttestation the HAT received from LockSettingsService upon verification
      */
-    void onDismissed(@DismissedReason int reason, @Nullable byte[] credentialAttestation);
+    void onDismissed(@DismissedReason int reason,
+                     @Nullable byte[] credentialAttestation, long requestId);
 
     /**
      * Invoked when the "try again" button is clicked
      */
-    void onTryAgainPressed();
+    void onTryAgainPressed(long requestId);
 
     /**
      * Invoked when the "use password" button is clicked
      */
-    void onDeviceCredentialPressed();
+    void onDeviceCredentialPressed(long requestId);
 
     /**
      * See {@link android.hardware.biometrics.BiometricPrompt.Builder
      * #setReceiveSystemEvents(boolean)}
      * @param event
      */
-    void onSystemEvent(int event);
+    void onSystemEvent(int event, long requestId);
 
     /**
      * Notifies when the dialog has finished animating.
      */
-    void onDialogAnimatedIn();
+    void onDialogAnimatedIn(long requestId);
 }
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleView.kt b/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleView.kt
index 378ae14..1c57480 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleView.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthRippleView.kt
@@ -29,8 +29,7 @@
 import android.view.animation.PathInterpolator
 import com.android.internal.graphics.ColorUtils
 import com.android.systemui.animation.Interpolators
-import com.android.systemui.statusbar.charging.DwellRippleShader
-import com.android.systemui.statusbar.charging.RippleShader
+import com.android.systemui.ripple.RippleShader
 
 private const val RIPPLE_SPARKLE_STRENGTH: Float = 0.4f
 
@@ -76,12 +75,12 @@
         }
     private var radius: Float = 0f
         set(value) {
-            rippleShader.radius = value
+            rippleShader.setMaxSize(value * 2f, value * 2f)
             field = value
         }
     private var origin: PointF = PointF()
         set(value) {
-            rippleShader.origin = value
+            rippleShader.setCenter(value.x, value.y)
             field = value
         }
 
@@ -298,7 +297,7 @@
             addListener(object : AnimatorListenerAdapter() {
                 override fun onAnimationStart(animation: Animator?) {
                     unlockedRippleInProgress = true
-                    rippleShader.shouldFadeOutRipple = true
+                    rippleShader.rippleFill = false
                     drawRipple = true
                     visibility = VISIBLE
                 }
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/DwellRippleShader.kt b/packages/SystemUI/src/com/android/systemui/biometrics/DwellRippleShader.kt
new file mode 100644
index 0000000..979fe33
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/DwellRippleShader.kt
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.biometrics
+
+import android.graphics.PointF
+import android.graphics.RuntimeShader
+import android.util.MathUtils
+
+/**
+ * Shader class that renders a distorted ripple for the UDFPS dwell effect.
+ * Adjustable shader parameters:
+ *   - progress
+ *   - origin
+ *   - color
+ *   - time
+ *   - maxRadius
+ *   - distortionStrength.
+ * See per field documentation for more details.
+ *
+ * Modeled after frameworks/base/graphics/java/android/graphics/drawable/RippleShader.java.
+ */
+class DwellRippleShader internal constructor() : RuntimeShader(SHADER) {
+    companion object {
+        private const val SHADER_UNIFORMS = """uniform vec2 in_origin;
+                uniform float in_time;
+                uniform float in_radius;
+                uniform float in_blur;
+                layout(color) uniform vec4 in_color;
+                uniform float in_phase1;
+                uniform float in_phase2;
+                uniform float in_distortion_strength;"""
+        private const val SHADER_LIB = """
+                float softCircle(vec2 uv, vec2 xy, float radius, float blur) {
+                  float blurHalf = blur * 0.5;
+                  float d = distance(uv, xy);
+                  return 1. - smoothstep(1. - blurHalf, 1. + blurHalf, d / radius);
+                }
+
+                float softRing(vec2 uv, vec2 xy, float radius, float blur) {
+                  float thickness_half = radius * 0.25;
+                  float circle_outer = softCircle(uv, xy, radius + thickness_half, blur);
+                  float circle_inner = softCircle(uv, xy, radius - thickness_half, blur);
+                  return circle_outer - circle_inner;
+                }
+
+                vec2 distort(vec2 p, float time, float distort_amount_xy, float frequency) {
+                    return p + vec2(sin(p.y * frequency + in_phase1),
+                                    cos(p.x * frequency * -1.23 + in_phase2)) * distort_amount_xy;
+                }
+
+                vec4 ripple(vec2 p, float distort_xy, float frequency) {
+                    vec2 p_distorted = distort(p, in_time, distort_xy, frequency);
+                    float circle = softCircle(p_distorted, in_origin, in_radius * 1.2, in_blur);
+                    float rippleAlpha = max(circle,
+                        softRing(p_distorted, in_origin, in_radius, in_blur)) * 0.25;
+                    return in_color * rippleAlpha;
+                }
+                """
+        private const val SHADER_MAIN = """vec4 main(vec2 p) {
+                    vec4 color1 = ripple(p,
+                        34 * in_distortion_strength, // distort_xy
+                        0.012 // frequency
+                    );
+                    vec4 color2 = ripple(p,
+                        49 * in_distortion_strength, // distort_xy
+                        0.018 // frequency
+                    );
+                    // Alpha blend between two layers.
+                    return vec4(color1.xyz + color2.xyz
+                        * (1 - color1.w), color1.w + color2.w * (1-color1.w));
+                }"""
+        private const val SHADER = SHADER_UNIFORMS + SHADER_LIB + SHADER_MAIN
+    }
+
+    /**
+     * Maximum radius of the ripple.
+     */
+    var maxRadius: Float = 0.0f
+
+    /**
+     * Origin coordinate of the ripple.
+     */
+    var origin: PointF = PointF()
+        set(value) {
+            field = value
+            setFloatUniform("in_origin", value.x, value.y)
+        }
+
+    /**
+     * Progress of the ripple. Float value between [0, 1].
+     */
+    var progress: Float = 0.0f
+        set(value) {
+            field = value
+            setFloatUniform("in_radius",
+                    (1 - (1 - value) * (1 - value) * (1 - value))* maxRadius)
+            setFloatUniform("in_blur", MathUtils.lerp(1f, 0.7f, value))
+        }
+
+    /**
+     * Distortion strength between [0, 1], with 0 being no distortion and 1 being full distortion.
+     */
+    var distortionStrength: Float = 0.0f
+        set(value) {
+            field = value
+            setFloatUniform("in_distortion_strength", value)
+        }
+
+    /**
+     * Play time since the start of the effect in seconds.
+     */
+    var time: Float = 0.0f
+        set(value) {
+            field = value * 0.001f
+            setFloatUniform("in_time", field)
+            setFloatUniform("in_phase1", field * 3f + 0.367f)
+            setFloatUniform("in_phase2", field * 7.2f * 1.531f)
+        }
+
+    /**
+     * A hex value representing the ripple color, in the format of ARGB
+     */
+    var color: Int = 0xffffff.toInt()
+        set(value) {
+            field = value
+            setColorUniform("in_color", value)
+        }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/SidefpsController.kt b/packages/SystemUI/src/com/android/systemui/biometrics/SidefpsController.kt
index 04e2dccd..d03106b 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/SidefpsController.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/SidefpsController.kt
@@ -34,16 +34,18 @@
 import android.os.Handler
 import android.util.Log
 import android.util.RotationUtils
-import android.view.View.AccessibilityDelegate
-import android.view.accessibility.AccessibilityEvent
 import android.view.Display
 import android.view.Gravity
 import android.view.LayoutInflater
 import android.view.Surface
 import android.view.View
+import android.view.View.AccessibilityDelegate
 import android.view.ViewPropertyAnimator
 import android.view.WindowInsets
 import android.view.WindowManager
+import android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION
+import android.view.WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY
+import android.view.accessibility.AccessibilityEvent
 import androidx.annotation.RawRes
 import com.airbnb.lottie.LottieAnimationView
 import com.airbnb.lottie.LottieProperty
@@ -70,13 +72,12 @@
     private val activityTaskManager: ActivityTaskManager,
     overviewProxyService: OverviewProxyService,
     displayManager: DisplayManager,
-    @Main mainExecutor: DelayableExecutor,
+    @Main private val mainExecutor: DelayableExecutor,
     @Main private val handler: Handler
 ) {
     @VisibleForTesting
     val sensorProps: FingerprintSensorPropertiesInternal = fingerprintManager
-        ?.sensorPropertiesInternal
-        ?.firstOrNull { it.isAnySidefpsType }
+        ?.sideFpsSensorProperties
         ?: throw IllegalStateException("no side fingerprint sensor")
 
     @VisibleForTesting
@@ -131,29 +132,38 @@
         fitInsetsTypes = 0 // overrides default, avoiding status bars during layout
         gravity = Gravity.TOP or Gravity.LEFT
         layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
-        privateFlags = WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY
+        privateFlags = PRIVATE_FLAG_TRUSTED_OVERLAY or PRIVATE_FLAG_NO_MOVE_ANIMATION
     }
 
     init {
-        fingerprintManager?.setSidefpsController(object : ISidefpsController.Stub() {
-            override fun show(
-                sensorId: Int,
-                @BiometricOverlayConstants.ShowReason reason: Int
-            ) = if (reason.isReasonToShow(activityTaskManager)) doShow() else hide(sensorId)
+        fingerprintManager?.setSidefpsController(
+            object : ISidefpsController.Stub() {
+                override fun show(
+                    sensorId: Int,
+                    @BiometricOverlayConstants.ShowReason reason: Int
+                ) = if (reason.isReasonToShow(activityTaskManager)) show() else hide()
 
-            private fun doShow() = mainExecutor.execute {
-                if (overlayView == null) {
-                    createOverlayForDisplay()
-                } else {
-                    Log.v(TAG, "overlay already shown")
-                }
-            }
-
-            override fun hide(sensorId: Int) = mainExecutor.execute { overlayView = null }
-        })
+                override fun hide(sensorId: Int) = hide()
+            })
         overviewProxyService.addCallback(overviewProxyListener)
     }
 
+    /** Shows the side fps overlay if not already shown. */
+    fun show() {
+        mainExecutor.execute {
+            if (overlayView == null) {
+                createOverlayForDisplay()
+            } else {
+                Log.v(TAG, "overlay already shown")
+            }
+        }
+    }
+
+    /** Hides the fps overlay if shown. */
+    fun hide() {
+        mainExecutor.execute { overlayView = null }
+    }
+
     private fun onOrientationChanged() {
         if (overlayView != null) {
             createOverlayForDisplay()
@@ -266,6 +276,12 @@
     }
 }
 
+private val FingerprintManager?.sideFpsSensorProperties: FingerprintSensorPropertiesInternal?
+    get() = this?.sensorPropertiesInternal?.firstOrNull { it.isAnySidefpsType }
+
+/** Returns [True] when the device has a side fingerprint sensor. */
+fun FingerprintManager?.hasSideFpsSensor(): Boolean = this?.sideFpsSensorProperties != null
+
 @BiometricOverlayConstants.ShowReason
 private fun Int.isReasonToShow(activityTaskManager: ActivityTaskManager): Boolean = when (this) {
     REASON_AUTH_KEYGUARD -> false
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java
index fb502e5..cf50f7f 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java
@@ -609,7 +609,7 @@
             @NonNull SystemUIDialogManager dialogManager,
             @NonNull LatencyTracker latencyTracker,
             @NonNull ActivityLaunchAnimator activityLaunchAnimator,
-            @NonNull Optional<AlternateUdfpsTouchProvider> aternateTouchProvider,
+            @NonNull Optional<AlternateUdfpsTouchProvider> alternateTouchProvider,
             @BiometricsBackground Executor biometricsExecutor) {
         mContext = context;
         mExecution = execution;
@@ -639,7 +639,7 @@
         mUnlockedScreenOffAnimationController = unlockedScreenOffAnimationController;
         mLatencyTracker = latencyTracker;
         mActivityLaunchAnimator = activityLaunchAnimator;
-        mAlternateTouchProvider = aternateTouchProvider.orElse(null);
+        mAlternateTouchProvider = alternateTouchProvider.orElse(null);
         mBiometricExecutor = biometricsExecutor;
 
         mOrientationListener = new BiometricDisplayListener(
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java
index ec4cf2f..24b8933 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java
@@ -510,6 +510,7 @@
                     mKeyguardViewManager.isBouncerInTransit() ? BouncerPanelExpansionCalculator
                             .aboutToShowBouncerProgress(fraction) : fraction;
             updateAlpha();
+            updatePauseAuth();
         }
     };
 
diff --git a/packages/SystemUI/src/com/android/systemui/bluetooth/BroadcastDialog.java b/packages/SystemUI/src/com/android/systemui/bluetooth/BroadcastDialog.java
new file mode 100644
index 0000000..9b7d498
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/bluetooth/BroadcastDialog.java
@@ -0,0 +1,134 @@
+/**
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.bluetooth;
+
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.Button;
+import android.widget.TextView;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.logging.UiEvent;
+import com.android.internal.logging.UiEventLogger;
+import com.android.systemui.R;
+import com.android.systemui.media.MediaDataUtils;
+import com.android.systemui.media.dialog.MediaOutputDialogFactory;
+import com.android.systemui.statusbar.phone.SystemUIDialog;
+
+/**
+ * Dialog for showing le audio broadcasting dialog.
+ */
+public class BroadcastDialog extends SystemUIDialog {
+
+    private static final String TAG = "BroadcastDialog";
+    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+
+    private Context mContext;
+    private UiEventLogger mUiEventLogger;
+    @VisibleForTesting
+    protected View mDialogView;
+    private MediaOutputDialogFactory mMediaOutputDialogFactory;
+    private String mSwitchBroadcastApp;
+    private String mOutputPackageName;
+
+    public BroadcastDialog(Context context, MediaOutputDialogFactory mediaOutputDialogFactory,
+            String switchBroadcastApp, String outputPkgName, UiEventLogger uiEventLogger) {
+        super(context);
+        if (DEBUG) {
+            Log.d(TAG, "Init BroadcastDialog");
+        }
+
+        mContext = getContext();
+        mMediaOutputDialogFactory = mediaOutputDialogFactory;
+        mSwitchBroadcastApp = switchBroadcastApp;
+        mOutputPackageName = outputPkgName;
+        mUiEventLogger = uiEventLogger;
+    }
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        if (DEBUG) {
+            Log.d(TAG, "onCreate");
+        }
+
+        mUiEventLogger.log(BroadcastDialogEvent.BROADCAST_DIALOG_SHOW);
+        mDialogView = LayoutInflater.from(mContext).inflate(R.layout.broadcast_dialog, null);
+        final Window window = getWindow();
+        window.setContentView(mDialogView);
+
+        TextView title = mDialogView.requireViewById(R.id.dialog_title);
+        TextView subTitle = mDialogView.requireViewById(R.id.dialog_subtitle);
+        title.setText(
+                mContext.getString(R.string.bt_le_audio_broadcast_dialog_title,
+                        MediaDataUtils.getAppLabel(mContext, mOutputPackageName,
+                                mContext.getString(
+                                        R.string.bt_le_audio_broadcast_dialog_unknown_name))));
+        subTitle.setText(
+                mContext.getString(R.string.bt_le_audio_broadcast_dialog_sub_title,
+                        mSwitchBroadcastApp));
+
+        Button switchBroadcast = mDialogView.requireViewById(R.id.switch_broadcast);
+        Button changeOutput = mDialogView.requireViewById(R.id.change_output);
+        Button cancelBtn = mDialogView.requireViewById(R.id.cancel);
+        switchBroadcast.setText(mContext.getString(
+                R.string.bt_le_audio_broadcast_dialog_switch_app, mSwitchBroadcastApp), null);
+        changeOutput.setOnClickListener((view) -> {
+            mMediaOutputDialogFactory.create(mOutputPackageName, true, null);
+            dismiss();
+        });
+        cancelBtn.setOnClickListener((view) -> {
+            if (DEBUG) {
+                Log.d(TAG, "BroadcastDialog dismiss.");
+            }
+            dismiss();
+        });
+    }
+
+    @Override
+    public void onWindowFocusChanged(boolean hasFocus) {
+        super.onWindowFocusChanged(hasFocus);
+        if (!hasFocus && isShowing()) {
+            dismiss();
+        }
+    }
+
+    public enum BroadcastDialogEvent implements UiEventLogger.UiEventEnum {
+        @UiEvent(doc = "The Broadcast dialog became visible on the screen.")
+        BROADCAST_DIALOG_SHOW(1062);
+
+        private final int mId;
+
+        BroadcastDialogEvent(int id) {
+            mId = id;
+        }
+
+        @Override
+        public int getId() {
+            return mId;
+        }
+    }
+
+}
diff --git a/packages/SystemUI/src/com/android/systemui/bluetooth/BroadcastDialogController.java b/packages/SystemUI/src/com/android/systemui/bluetooth/BroadcastDialogController.java
new file mode 100644
index 0000000..8a54345
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/bluetooth/BroadcastDialogController.java
@@ -0,0 +1,60 @@
+/**
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.bluetooth;
+
+import android.content.Context;
+import android.view.View;
+
+import com.android.internal.logging.UiEventLogger;
+import com.android.systemui.animation.DialogLaunchAnimator;
+import com.android.systemui.dagger.SysUISingleton;
+import com.android.systemui.media.dialog.MediaOutputDialogFactory;
+
+import javax.inject.Inject;
+
+/**
+ * Controller to create BroadcastDialog objects.
+ */
+@SysUISingleton
+public class BroadcastDialogController {
+
+    private Context mContext;
+    private UiEventLogger mUiEventLogger;
+    private DialogLaunchAnimator mDialogLaunchAnimator;
+    private MediaOutputDialogFactory mMediaOutputDialogFactory;
+
+    @Inject
+    public BroadcastDialogController(Context context, UiEventLogger uiEventLogger,
+            DialogLaunchAnimator dialogLaunchAnimator,
+            MediaOutputDialogFactory mediaOutputDialogFactory) {
+        mContext = context;
+        mUiEventLogger = uiEventLogger;
+        mDialogLaunchAnimator = dialogLaunchAnimator;
+        mMediaOutputDialogFactory = mediaOutputDialogFactory;
+    }
+
+    public void createBroadcastDialog(String switchAppName, String outputPkgName,
+            boolean aboveStatusBar, View view) {
+        BroadcastDialog broadcastDialog = new BroadcastDialog(mContext, mMediaOutputDialogFactory,
+                switchAppName, outputPkgName, mUiEventLogger);
+        if (view != null) {
+            mDialogLaunchAnimator.showFromView(broadcastDialog, view);
+        } else {
+            broadcastDialog.show();
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/camera/CameraGestureHelper.kt b/packages/SystemUI/src/com/android/systemui/camera/CameraGestureHelper.kt
new file mode 100644
index 0000000..81da8023
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/camera/CameraGestureHelper.kt
@@ -0,0 +1,158 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.camera
+
+import android.app.ActivityManager
+import android.app.ActivityOptions
+import android.app.IActivityTaskManager
+import android.content.ContentResolver
+import android.content.Context
+import android.content.Intent
+import android.content.pm.PackageManager
+import android.content.pm.ResolveInfo
+import android.os.RemoteException
+import android.os.UserHandle
+import android.util.Log
+import android.view.WindowManager
+import androidx.annotation.VisibleForTesting
+import com.android.keyguard.KeyguardUpdateMonitor
+import com.android.systemui.ActivityIntentHelper
+import com.android.systemui.dagger.qualifiers.Main
+import com.android.systemui.plugins.ActivityStarter
+import com.android.systemui.shared.system.ActivityManagerKt.isInForeground
+import com.android.systemui.statusbar.StatusBarState
+import com.android.systemui.statusbar.phone.CentralSurfaces
+import com.android.systemui.shade.PanelViewController
+import com.android.systemui.statusbar.policy.KeyguardStateController
+import java.util.concurrent.Executor
+import javax.inject.Inject
+
+/**
+ * Helps with handling camera-related gestures (for example, double-tap the power button to launch
+ * the camera).
+ */
+class CameraGestureHelper @Inject constructor(
+    private val context: Context,
+    private val centralSurfaces: CentralSurfaces,
+    private val keyguardStateController: KeyguardStateController,
+    private val packageManager: PackageManager,
+    private val activityManager: ActivityManager,
+    private val activityStarter: ActivityStarter,
+    private val activityIntentHelper: ActivityIntentHelper,
+    private val activityTaskManager: IActivityTaskManager,
+    private val cameraIntents: CameraIntentsWrapper,
+    private val contentResolver: ContentResolver,
+    @Main private val uiExecutor: Executor,
+) {
+    /**
+     * Whether the camera application can be launched for the camera launch gesture.
+     */
+    fun canCameraGestureBeLaunched(statusBarState: Int): Boolean {
+        if (!centralSurfaces.isCameraAllowedByAdmin) {
+            return false
+        }
+
+        val resolveInfo: ResolveInfo? = packageManager.resolveActivityAsUser(
+            getStartCameraIntent(),
+            PackageManager.MATCH_DEFAULT_ONLY,
+            KeyguardUpdateMonitor.getCurrentUser()
+        )
+        val resolvedPackage = resolveInfo?.activityInfo?.packageName
+        return (resolvedPackage != null &&
+                (statusBarState != StatusBarState.SHADE ||
+                !activityManager.isInForeground(resolvedPackage)))
+    }
+
+    /**
+     * Launches the camera.
+     *
+     * @param source The source of the camera launch, to be passed to the camera app via [Intent]
+     */
+    fun launchCamera(source: Int) {
+        val intent: Intent = getStartCameraIntent()
+        intent.putExtra(EXTRA_CAMERA_LAUNCH_SOURCE, source)
+        val wouldLaunchResolverActivity = activityIntentHelper.wouldLaunchResolverActivity(
+            intent, KeyguardUpdateMonitor.getCurrentUser()
+        )
+        if (CameraIntents.isSecureCameraIntent(intent) && !wouldLaunchResolverActivity) {
+            uiExecutor.execute {
+                // Normally an activity will set its requested rotation animation on its window.
+                // However when launching an activity causes the orientation to change this is too
+                // late. In these cases, the default animation is used. This doesn't look good for
+                // the camera (as it rotates the camera contents out of sync with physical reality).
+                // Therefore, we ask the WindowManager to force the cross-fade animation if an
+                // orientation change happens to occur during the launch.
+                val activityOptions = ActivityOptions.makeBasic()
+                activityOptions.setDisallowEnterPictureInPictureWhileLaunching(true)
+                activityOptions.rotationAnimationHint =
+                    WindowManager.LayoutParams.ROTATION_ANIMATION_SEAMLESS
+                try {
+                    activityTaskManager.startActivityAsUser(
+                        null,
+                        context.basePackageName,
+                        context.attributionTag,
+                        intent,
+                        intent.resolveTypeIfNeeded(contentResolver),
+                        null,
+                        null,
+                        0,
+                        Intent.FLAG_ACTIVITY_NEW_TASK,
+                        null,
+                        activityOptions.toBundle(),
+                        UserHandle.CURRENT.identifier,
+                    )
+                } catch (e: RemoteException) {
+                    Log.w(
+                        PanelViewController.TAG,
+                        "Unable to start camera activity",
+                        e
+                    )
+                }
+            }
+        } else {
+            // We need to delay starting the activity because ResolverActivity finishes itself if
+            // launched from behind the lock-screen.
+            activityStarter.startActivity(intent, false /* dismissShade */)
+        }
+
+        // Call this to make sure that the keyguard returns if the app that is being launched
+        // crashes after a timeout.
+        centralSurfaces.startLaunchTransitionTimeout()
+        // Call this to make sure the keyguard is ready to be dismissed once the next intent is
+        // handled by the OS (in our case it is the activity we started right above)
+        centralSurfaces.readyForKeyguardDone()
+    }
+
+    /**
+     * Returns an [Intent] that can be used to start the camera app such that it occludes the
+     * lock-screen, if needed.
+     */
+    private fun getStartCameraIntent(): Intent {
+        val isLockScreenDismissible = keyguardStateController.canDismissLockScreen()
+        val isSecure = keyguardStateController.isMethodSecure
+        return if (isSecure && !isLockScreenDismissible) {
+            cameraIntents.getSecureCameraIntent()
+        } else {
+            cameraIntents.getInsecureCameraIntent()
+        }
+    }
+
+    companion object {
+        @VisibleForTesting
+        const val EXTRA_CAMERA_LAUNCH_SOURCE = "com.android.systemui.camera_launch_source"
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/camera/CameraIntentsWrapper.kt b/packages/SystemUI/src/com/android/systemui/camera/CameraIntentsWrapper.kt
new file mode 100644
index 0000000..cf02f8f
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/camera/CameraIntentsWrapper.kt
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.camera
+
+import android.content.Context
+import android.content.Intent
+import javax.inject.Inject
+
+/** Injectable wrapper around [CameraIntents]. */
+class CameraIntentsWrapper @Inject constructor(
+    private val context: Context,
+) {
+
+    /**
+     * Returns an [Intent] that can be used to start the camera, suitable for when the device is
+     * already unlocked
+     */
+    fun getSecureCameraIntent(): Intent {
+        return CameraIntents.getSecureCameraIntent(context)
+    }
+
+    /**
+     * Returns an [Intent] that can be used to start the camera, suitable for when the device is not
+     * already unlocked
+     */
+    fun getInsecureCameraIntent(): Intent {
+        return CameraIntents.getInsecureCameraIntent(context)
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/charging/WiredChargingRippleController.kt b/packages/SystemUI/src/com/android/systemui/charging/WiredChargingRippleController.kt
new file mode 100644
index 0000000..da675de
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/charging/WiredChargingRippleController.kt
@@ -0,0 +1,223 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.charging
+
+import android.content.Context
+import android.content.res.Configuration
+import android.graphics.PixelFormat
+import android.os.SystemProperties
+import android.util.DisplayMetrics
+import android.view.View
+import android.view.WindowManager
+import com.android.internal.annotations.VisibleForTesting
+import com.android.internal.logging.UiEvent
+import com.android.internal.logging.UiEventLogger
+import com.android.settingslib.Utils
+import com.android.systemui.R
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.flags.FeatureFlags
+import com.android.systemui.flags.Flags
+import com.android.systemui.ripple.RippleView
+import com.android.systemui.statusbar.commandline.Command
+import com.android.systemui.statusbar.commandline.CommandRegistry
+import com.android.systemui.statusbar.policy.BatteryController
+import com.android.systemui.statusbar.policy.ConfigurationController
+import com.android.systemui.util.leak.RotationUtils
+import com.android.systemui.util.time.SystemClock
+import java.io.PrintWriter
+import javax.inject.Inject
+import kotlin.math.min
+import kotlin.math.pow
+
+private const val MAX_DEBOUNCE_LEVEL = 3
+private const val BASE_DEBOUNCE_TIME = 2000
+
+/***
+ * Controls the ripple effect that shows when wired charging begins.
+ * The ripple uses the accent color of the current theme.
+ */
+@SysUISingleton
+class WiredChargingRippleController @Inject constructor(
+    commandRegistry: CommandRegistry,
+    private val batteryController: BatteryController,
+    private val configurationController: ConfigurationController,
+    featureFlags: FeatureFlags,
+    private val context: Context,
+    private val windowManager: WindowManager,
+    private val systemClock: SystemClock,
+    private val uiEventLogger: UiEventLogger
+) {
+    private var pluggedIn: Boolean = false
+    private val rippleEnabled: Boolean = featureFlags.isEnabled(Flags.CHARGING_RIPPLE) &&
+            !SystemProperties.getBoolean("persist.debug.suppress-charging-ripple", false)
+    private var normalizedPortPosX: Float = context.resources.getFloat(
+            R.dimen.physical_charger_port_location_normalized_x)
+    private var normalizedPortPosY: Float = context.resources.getFloat(
+            R.dimen.physical_charger_port_location_normalized_y)
+    private val windowLayoutParams = WindowManager.LayoutParams().apply {
+        width = WindowManager.LayoutParams.MATCH_PARENT
+        height = WindowManager.LayoutParams.MATCH_PARENT
+        layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
+        format = PixelFormat.TRANSLUCENT
+        type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY
+        fitInsetsTypes = 0 // Ignore insets from all system bars
+        title = "Wired Charging Animation"
+        flags = (WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
+                or WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE)
+        setTrustedOverlay()
+    }
+    private var lastTriggerTime: Long? = null
+    private var debounceLevel = 0
+
+    @VisibleForTesting
+    var rippleView: RippleView = RippleView(context, attrs = null).also { it.setupShader() }
+
+    init {
+        pluggedIn = batteryController.isPluggedIn
+        commandRegistry.registerCommand("charging-ripple") { ChargingRippleCommand() }
+        updateRippleColor()
+    }
+
+    fun registerCallbacks() {
+        val batteryStateChangeCallback = object : BatteryController.BatteryStateChangeCallback {
+            override fun onBatteryLevelChanged(
+                level: Int,
+                nowPluggedIn: Boolean,
+                charging: Boolean
+            ) {
+                // Suppresses the ripple when the state change comes from wireless charging or
+                // its dock.
+                if (batteryController.isPluggedInWireless ||
+                        batteryController.isChargingSourceDock) {
+                    return
+                }
+
+                if (!pluggedIn && nowPluggedIn) {
+                    startRippleWithDebounce()
+                }
+                pluggedIn = nowPluggedIn
+            }
+        }
+        batteryController.addCallback(batteryStateChangeCallback)
+
+        val configurationChangedListener = object : ConfigurationController.ConfigurationListener {
+            override fun onUiModeChanged() {
+                updateRippleColor()
+            }
+            override fun onThemeChanged() {
+                updateRippleColor()
+            }
+
+            override fun onConfigChanged(newConfig: Configuration?) {
+                normalizedPortPosX = context.resources.getFloat(
+                        R.dimen.physical_charger_port_location_normalized_x)
+                normalizedPortPosY = context.resources.getFloat(
+                        R.dimen.physical_charger_port_location_normalized_y)
+            }
+        }
+        configurationController.addCallback(configurationChangedListener)
+    }
+
+    // Lazily debounce ripple to avoid triggering ripple constantly (e.g. from flaky chargers).
+    internal fun startRippleWithDebounce() {
+        val now = systemClock.elapsedRealtime()
+        // Debounce wait time = 2 ^ debounce level
+        if (lastTriggerTime == null ||
+                (now - lastTriggerTime!!) > BASE_DEBOUNCE_TIME * (2.0.pow(debounceLevel))) {
+            // Not waiting for debounce. Start ripple.
+            startRipple()
+            debounceLevel = 0
+        } else {
+            // Still waiting for debounce. Ignore ripple and bump debounce level.
+            debounceLevel = min(MAX_DEBOUNCE_LEVEL, debounceLevel + 1)
+        }
+        lastTriggerTime = now
+    }
+
+    fun startRipple() {
+        if (rippleView.rippleInProgress || rippleView.parent != null) {
+            // Skip if ripple is still playing, or not playing but already added the parent
+            // (which might happen just before the animation starts or right after
+            // the animation ends.)
+            return
+        }
+        windowLayoutParams.packageName = context.opPackageName
+        rippleView.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener {
+            override fun onViewDetachedFromWindow(view: View?) {}
+
+            override fun onViewAttachedToWindow(view: View?) {
+                layoutRipple()
+                rippleView.startRipple(Runnable {
+                    windowManager.removeView(rippleView)
+                })
+                rippleView.removeOnAttachStateChangeListener(this)
+            }
+        })
+        windowManager.addView(rippleView, windowLayoutParams)
+        uiEventLogger.log(WiredChargingRippleEvent.CHARGING_RIPPLE_PLAYED)
+    }
+
+    private fun layoutRipple() {
+        val displayMetrics = DisplayMetrics()
+        context.display.getRealMetrics(displayMetrics)
+        val width = displayMetrics.widthPixels
+        val height = displayMetrics.heightPixels
+        val maxDiameter = Integer.max(width, height) * 2f
+        rippleView.setMaxSize(maxDiameter, maxDiameter)
+        when (RotationUtils.getExactRotation(context)) {
+            RotationUtils.ROTATION_LANDSCAPE -> {
+                rippleView.setCenter(
+                        width * normalizedPortPosY, height * (1 - normalizedPortPosX))
+            }
+            RotationUtils.ROTATION_UPSIDE_DOWN -> {
+                rippleView.setCenter(
+                        width * (1 - normalizedPortPosX), height * (1 - normalizedPortPosY))
+            }
+            RotationUtils.ROTATION_SEASCAPE -> {
+                rippleView.setCenter(
+                        width * (1 - normalizedPortPosY), height * normalizedPortPosX)
+            }
+            else -> {
+                // ROTATION_NONE
+                rippleView.setCenter(
+                        width * normalizedPortPosX, height * normalizedPortPosY)
+            }
+        }
+    }
+
+    private fun updateRippleColor() {
+        rippleView.setColor(
+                Utils.getColorAttr(context, android.R.attr.colorAccent).defaultColor)
+    }
+
+    inner class ChargingRippleCommand : Command {
+        override fun execute(pw: PrintWriter, args: List<String>) {
+            startRipple()
+        }
+
+        override fun help(pw: PrintWriter) {
+            pw.println("Usage: adb shell cmd statusbar charging-ripple")
+        }
+    }
+
+    enum class WiredChargingRippleEvent(private val _id: Int) : UiEventLogger.UiEventEnum {
+        @UiEvent(doc = "Wired charging ripple effect played")
+        CHARGING_RIPPLE_PLAYED(829);
+
+        override fun getId() = _id
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingLayout.java b/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingLayout.java
index 0d3e2ae..65400c2 100644
--- a/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/charging/WirelessChargingLayout.java
@@ -21,7 +21,6 @@
 import android.animation.ValueAnimator;
 import android.content.Context;
 import android.graphics.Color;
-import android.graphics.PointF;
 import android.util.AttributeSet;
 import android.util.TypedValue;
 import android.view.ContextThemeWrapper;
@@ -34,7 +33,8 @@
 import com.android.settingslib.Utils;
 import com.android.systemui.R;
 import com.android.systemui.animation.Interpolators;
-import com.android.systemui.statusbar.charging.ChargingRippleView;
+import com.android.systemui.ripple.RippleShader;
+import com.android.systemui.ripple.RippleView;
 
 import java.text.NumberFormat;
 
@@ -46,7 +46,7 @@
     private static final long RIPPLE_ANIMATION_DURATION = 1500;
     private static final int SCRIM_COLOR = 0x4C000000;
     private static final int SCRIM_FADE_DURATION = 300;
-    private ChargingRippleView mRippleView;
+    private RippleView mRippleView;
 
     public WirelessChargingLayout(Context context) {
         super(context);
@@ -138,6 +138,8 @@
         animatorSetScrim.start();
 
         mRippleView = findViewById(R.id.wireless_charging_ripple);
+        // TODO: Make rounded box shape if the device is tablet.
+        mRippleView.setupShader(RippleShader.RippleShape.CIRCLE);
         OnAttachStateChangeListener listener = new OnAttachStateChangeListener() {
             @Override
             public void onViewAttachedToWindow(View view) {
@@ -230,11 +232,11 @@
         if (mRippleView != null) {
             int width = getMeasuredWidth();
             int height = getMeasuredHeight();
-            mRippleView.setColor(
-                    Utils.getColorAttr(mRippleView.getContext(),
-                            android.R.attr.colorAccent).getDefaultColor());
-            mRippleView.setOrigin(new PointF(width / 2, height / 2));
-            mRippleView.setRadius(Math.max(width, height) * 0.5f);
+            mRippleView.setCenter(width * 0.5f, height * 0.5f);
+            float maxSize = Math.max(width, height);
+            mRippleView.setMaxSize(maxSize, maxSize);
+            mRippleView.setColor(Utils.getColorAttr(mRippleView.getContext(),
+                    android.R.attr.colorAccent).getDefaultColor());
         }
 
         super.onLayout(changed, left, top, right, bottom);
diff --git a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java
index aa67ecd..c21e36a 100644
--- a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java
+++ b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/ClipboardOverlayController.java
@@ -97,6 +97,7 @@
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
+import androidx.annotation.NonNull;
 import androidx.core.view.ViewCompat;
 import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
 
@@ -132,7 +133,7 @@
     private static final int FONT_SEARCH_STEP_PX = 4;
 
     private final Context mContext;
-    private final UiEventLogger mUiEventLogger;
+    private final ClipboardLogger mClipboardLogger;
     private final BroadcastDispatcher mBroadcastDispatcher;
     private final DisplayManager mDisplayManager;
     private final DisplayMetrics mDisplayMetrics;
@@ -169,6 +170,7 @@
     private Animator mExitAnimator;
     private Animator mEnterAnimator;
     private final int mOrientation;
+    private boolean mKeyboardVisible;
 
 
     public ClipboardOverlayController(Context context,
@@ -180,7 +182,7 @@
         final Context displayContext = context.createDisplayContext(getDefaultDisplay());
         mContext = displayContext.createWindowContext(TYPE_SCREENSHOT, null);
 
-        mUiEventLogger = uiEventLogger;
+        mClipboardLogger = new ClipboardLogger(uiEventLogger);
 
         mAccessibilityManager = AccessibilityManager.getInstance(mContext);
         mTextClassifier = requireNonNull(context.getSystemService(TextClassificationManager.class))
@@ -230,7 +232,7 @@
 
             @Override
             public void onSwipeDismissInitiated(Animator animator) {
-                mUiEventLogger.log(CLIPBOARD_OVERLAY_SWIPE_DISMISSED);
+                mClipboardLogger.logSessionComplete(CLIPBOARD_OVERLAY_SWIPE_DISMISSED);
                 mExitAnimator = animator;
             }
 
@@ -248,7 +250,7 @@
         });
 
         mDismissButton.setOnClickListener(view -> {
-            mUiEventLogger.log(CLIPBOARD_OVERLAY_DISMISS_TAPPED);
+            mClipboardLogger.logSessionComplete(CLIPBOARD_OVERLAY_DISMISS_TAPPED);
             animateOut();
         });
 
@@ -261,8 +263,22 @@
         attachWindow();
         withWindowAttached(() -> {
             mWindow.setContentView(mView);
-            updateInsets(mWindowManager.getCurrentWindowMetrics().getWindowInsets());
-            mView.requestLayout();
+            WindowInsets insets = mWindowManager.getCurrentWindowMetrics().getWindowInsets();
+            mKeyboardVisible = insets.isVisible(WindowInsets.Type.ime());
+            updateInsets(insets);
+            mWindow.peekDecorView().getViewTreeObserver().addOnGlobalLayoutListener(
+                    new ViewTreeObserver.OnGlobalLayoutListener() {
+                        @Override
+                        public void onGlobalLayout() {
+                            WindowInsets insets =
+                                    mWindowManager.getCurrentWindowMetrics().getWindowInsets();
+                            boolean keyboardVisible = insets.isVisible(WindowInsets.Type.ime());
+                            if (keyboardVisible != mKeyboardVisible) {
+                                mKeyboardVisible = keyboardVisible;
+                                updateInsets(insets);
+                            }
+                        }
+                    });
             mWindow.peekDecorView().getViewRootImpl().setActivityConfigCallback(
                     new ViewRootImpl.ActivityConfigCallback() {
                         @Override
@@ -270,7 +286,8 @@
                                 int newDisplayId) {
                             if (mContext.getResources().getConfiguration().orientation
                                     != mOrientation) {
-                                mUiEventLogger.log(CLIPBOARD_OVERLAY_DISMISSED_OTHER);
+                                mClipboardLogger.logSessionComplete(
+                                        CLIPBOARD_OVERLAY_DISMISSED_OTHER);
                                 hideImmediate();
                             }
                         }
@@ -285,7 +302,7 @@
         });
 
         mTimeoutHandler.setOnTimeoutRunnable(() -> {
-            mUiEventLogger.log(CLIPBOARD_OVERLAY_TIMED_OUT);
+            mClipboardLogger.logSessionComplete(CLIPBOARD_OVERLAY_TIMED_OUT);
             animateOut();
         });
 
@@ -293,7 +310,7 @@
             @Override
             public void onReceive(Context context, Intent intent) {
                 if (ACTION_CLOSE_SYSTEM_DIALOGS.equals(intent.getAction())) {
-                    mUiEventLogger.log(CLIPBOARD_OVERLAY_DISMISSED_OTHER);
+                    mClipboardLogger.logSessionComplete(CLIPBOARD_OVERLAY_DISMISSED_OTHER);
                     animateOut();
                 }
             }
@@ -305,7 +322,7 @@
             @Override
             public void onReceive(Context context, Intent intent) {
                 if (SCREENSHOT_ACTION.equals(intent.getAction())) {
-                    mUiEventLogger.log(CLIPBOARD_OVERLAY_DISMISSED_OTHER);
+                    mClipboardLogger.logSessionComplete(CLIPBOARD_OVERLAY_DISMISSED_OTHER);
                     animateOut();
                 }
             }
@@ -375,7 +392,7 @@
                     mContext.getString(R.string.clipboard_send_nearby_description));
             mRemoteCopyChip.setVisibility(View.VISIBLE);
             mRemoteCopyChip.setOnClickListener((v) -> {
-                mUiEventLogger.log(CLIPBOARD_OVERLAY_REMOTE_COPY_TAPPED);
+                mClipboardLogger.logSessionComplete(CLIPBOARD_OVERLAY_REMOTE_COPY_TAPPED);
                 mContext.startActivity(remoteCopyIntent);
                 animateOut();
             });
@@ -384,8 +401,6 @@
             mRemoteCopyChip.setVisibility(View.GONE);
         }
         withWindowAttached(() -> {
-            updateInsets(
-                    mWindowManager.getCurrentWindowMetrics().getWindowInsets());
             if (mEnterAnimator == null || !mEnterAnimator.isRunning()) {
                 mView.post(this::animateIn);
             }
@@ -437,7 +452,7 @@
         chip.setContentDescription(action.getTitle());
         chip.setIcon(action.getIcon(), false);
         chip.setPendingIntent(action.getActionIntent(), () -> {
-            mUiEventLogger.log(CLIPBOARD_OVERLAY_ACTION_TAPPED);
+            mClipboardLogger.logSessionComplete(CLIPBOARD_OVERLAY_ACTION_TAPPED);
             animateOut();
         });
         chip.setAlpha(1);
@@ -473,7 +488,7 @@
                         touchRegion.op(tmpRect, Region.Op.UNION);
                         if (!touchRegion.contains(
                                 (int) motionEvent.getRawX(), (int) motionEvent.getRawY())) {
-                            mUiEventLogger.log(CLIPBOARD_OVERLAY_TAP_OUTSIDE);
+                            mClipboardLogger.logSessionComplete(CLIPBOARD_OVERLAY_TAP_OUTSIDE);
                             animateOut();
                         }
                     }
@@ -484,7 +499,7 @@
     }
 
     private void editImage(Uri uri) {
-        mUiEventLogger.log(CLIPBOARD_OVERLAY_EDIT_TAPPED);
+        mClipboardLogger.logSessionComplete(CLIPBOARD_OVERLAY_EDIT_TAPPED);
         String editorPackage = mContext.getString(R.string.config_screenshotEditor);
         Intent editIntent = new Intent(Intent.ACTION_EDIT);
         if (!TextUtils.isEmpty(editorPackage)) {
@@ -499,7 +514,7 @@
     }
 
     private void editText() {
-        mUiEventLogger.log(CLIPBOARD_OVERLAY_EDIT_TAPPED);
+        mClipboardLogger.logSessionComplete(CLIPBOARD_OVERLAY_EDIT_TAPPED);
         Intent editIntent = new Intent(mContext, EditTextActivity.class);
         editIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
         mContext.startActivity(editIntent);
@@ -507,13 +522,15 @@
     }
 
     private void shareContent(ClipData clip) {
-        mUiEventLogger.log(CLIPBOARD_OVERLAY_SHARE_TAPPED);
+        mClipboardLogger.logSessionComplete(CLIPBOARD_OVERLAY_SHARE_TAPPED);
         Intent shareIntent = new Intent(Intent.ACTION_SEND);
-        shareIntent.putExtra(Intent.EXTRA_TEXT, clip.getItemAt(0).getText());
         shareIntent.setDataAndType(
                 clip.getItemAt(0).getUri(), clip.getDescription().getMimeType(0));
-        shareIntent.putExtra(Intent.EXTRA_STREAM, clip.getItemAt(0).getUri());
-        shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+        shareIntent.putExtra(Intent.EXTRA_TEXT, clip.getItemAt(0).getText().toString());
+        if (clip.getItemAt(0).getUri() != null) {
+            shareIntent.putExtra(Intent.EXTRA_STREAM, clip.getItemAt(0).getUri());
+            shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+        }
         Intent chooserIntent = Intent.createChooser(shareIntent, null)
                 .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK)
                 .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
@@ -851,6 +868,7 @@
         mRemoteCopyChip.setVisibility(View.GONE);
         resetActionChips();
         mTimeoutHandler.cancelTimeout();
+        mClipboardLogger.reset();
     }
 
     @MainThread
@@ -956,4 +974,24 @@
             mWindowManager.updateViewLayout(decorView, mWindowLayoutParams);
         }
     }
+
+    static class ClipboardLogger {
+        private final UiEventLogger mUiEventLogger;
+        private boolean mGuarded = false;
+
+        ClipboardLogger(UiEventLogger uiEventLogger) {
+            mUiEventLogger = uiEventLogger;
+        }
+
+        void logSessionComplete(@NonNull UiEventLogger.UiEventEnum event) {
+            if (!mGuarded) {
+                mGuarded = true;
+                mUiEventLogger.log(event);
+            }
+        }
+
+        void reset() {
+            mGuarded = false;
+        }
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/EditTextActivity.java b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/EditTextActivity.java
index 3f78f97..1fa9ac5 100644
--- a/packages/SystemUI/src/com/android/systemui/clipboardoverlay/EditTextActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/clipboardoverlay/EditTextActivity.java
@@ -74,6 +74,7 @@
         }
         mEditText.setText(clip.getItemAt(0).getText());
         mEditText.requestFocus();
+        mEditText.setSelection(0);
         mSensitive = clip.getDescription().getExtras() != null
                 && clip.getDescription().getExtras()
                 .getBoolean(ClipDescription.EXTRA_IS_SENSITIVE);
diff --git a/packages/SystemUI/src/com/android/systemui/common/coroutine/ChannelExt.kt b/packages/SystemUI/src/com/android/systemui/common/coroutine/ChannelExt.kt
new file mode 100644
index 0000000..6f3beac
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/common/coroutine/ChannelExt.kt
@@ -0,0 +1,54 @@
+/*
+ *  Copyright (C) 2022 The Android Open Source Project
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT 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.common.coroutine
+
+import android.util.Log
+import kotlinx.coroutines.channels.SendChannel
+import kotlinx.coroutines.channels.onFailure
+
+object ChannelExt {
+
+    /**
+     * Convenience wrapper around [SendChannel.trySend] that also logs on failure. This is the
+     * equivalent of calling:
+     *
+     * ```
+     * sendChannel.trySend(element).onFailure {
+     *     Log.e(
+     *         loggingTag,
+     *         "Failed to send $elementDescription" +
+     *             " - downstream canceled or failed.",
+     *          it,
+     *    )
+     *}
+     * ```
+     */
+    fun <T> SendChannel<T>.trySendWithFailureLogging(
+        element: T,
+        loggingTag: String,
+        elementDescription: String = "updated state",
+    ) {
+        trySend(element).onFailure {
+            Log.e(
+                loggingTag,
+                "Failed to send $elementDescription - downstream canceled or failed.",
+                it,
+            )
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/common/coroutine/ConflatedCallbackFlow.kt b/packages/SystemUI/src/com/android/systemui/common/coroutine/ConflatedCallbackFlow.kt
new file mode 100644
index 0000000..d4a1f74
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/common/coroutine/ConflatedCallbackFlow.kt
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.common.coroutine
+
+import kotlin.experimental.ExperimentalTypeInference
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.channels.Channel
+import kotlinx.coroutines.channels.ProducerScope
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.buffer
+import kotlinx.coroutines.flow.callbackFlow
+
+object ConflatedCallbackFlow {
+
+    /**
+     * A [callbackFlow] that uses a buffer [Channel] that is "conflated" meaning that, if
+     * backpressure occurs (if the producer that emits new values into the flow is faster than the
+     * consumer(s) of the values in the flow), the values are buffered and, if the buffer fills up,
+     * we drop the oldest values automatically instead of suspending the producer.
+     */
+    @Suppress("EXPERIMENTAL_IS_NOT_ENABLED")
+    @OptIn(ExperimentalTypeInference::class, ExperimentalCoroutinesApi::class)
+    fun <T> conflatedCallbackFlow(
+        @BuilderInference block: suspend ProducerScope<T>.() -> Unit,
+    ): Flow<T> = callbackFlow(block).buffer(capacity = Channel.CONFLATED)
+}
diff --git a/packages/SystemUI/src/com/android/systemui/common/data/model/Position.kt b/packages/SystemUI/src/com/android/systemui/common/data/model/Position.kt
new file mode 100644
index 0000000..7c9df10
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/common/data/model/Position.kt
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.common.data.model
+
+/** Models a two-dimensional position */
+data class Position(
+    val x: Int,
+    val y: Int,
+)
diff --git a/packages/SystemUI/src/com/android/systemui/common/domain/model/Position.kt b/packages/SystemUI/src/com/android/systemui/common/domain/model/Position.kt
new file mode 100644
index 0000000..f697c0a
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/common/domain/model/Position.kt
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.common.domain.model
+
+import com.android.systemui.common.data.model.Position as DataLayerPosition
+
+/** Models a two-dimensional position */
+data class Position(
+    val x: Int,
+    val y: Int,
+) {
+    companion object {
+        fun DataLayerPosition.toDomainLayer(): Position {
+            return Position(
+                x = x,
+                y = y,
+            )
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/containeddrawable/ContainedDrawable.kt b/packages/SystemUI/src/com/android/systemui/containeddrawable/ContainedDrawable.kt
new file mode 100644
index 0000000..d6a059d
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/containeddrawable/ContainedDrawable.kt
@@ -0,0 +1,27 @@
+/*
+ *  Copyright (C) 2022 The Android Open Source Project
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT 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.containeddrawable
+
+import android.graphics.drawable.Drawable
+import androidx.annotation.DrawableRes
+
+/** Convenience container for [Drawable] or a way to load it later. */
+sealed class ContainedDrawable {
+    data class WithDrawable(val drawable: Drawable) : ContainedDrawable()
+    data class WithResource(@DrawableRes val resourceId: Int) : ContainedDrawable()
+}
diff --git a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt
index bed553e..50ce9d4 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt
@@ -20,13 +20,11 @@
 import android.app.backup.BackupManager
 import android.content.BroadcastReceiver
 import android.content.ComponentName
-import android.content.ContentResolver
 import android.content.Context
 import android.content.Intent
 import android.content.IntentFilter
 import android.database.ContentObserver
 import android.net.Uri
-import android.os.Environment
 import android.os.UserHandle
 import android.service.controls.Control
 import android.service.controls.actions.ControlAction
@@ -43,6 +41,7 @@
 import com.android.systemui.dagger.SysUISingleton
 import com.android.systemui.dagger.qualifiers.Background
 import com.android.systemui.dump.DumpManager
+import com.android.systemui.settings.UserFileManager
 import com.android.systemui.settings.UserTracker
 import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl.Companion.PREFS_CONTROLS_FILE
 import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl.Companion.PREFS_CONTROLS_SEEDING_COMPLETED
@@ -61,6 +60,7 @@
     private val bindingController: ControlsBindingController,
     private val listingController: ControlsListingController,
     private val broadcastDispatcher: BroadcastDispatcher,
+    private val userFileManager: UserFileManager,
     optionalWrapper: Optional<ControlsFavoritePersistenceWrapper>,
     dumpManager: DumpManager,
     userTracker: UserTracker
@@ -84,15 +84,12 @@
     override val currentUserId
         get() = currentUser.identifier
 
-    private val contentResolver: ContentResolver
-        get() = context.contentResolver
-
     private val persistenceWrapper: ControlsFavoritePersistenceWrapper
     @VisibleForTesting
     internal var auxiliaryPersistenceWrapper: AuxiliaryPersistenceWrapper
 
     init {
-        userStructure = UserStructure(context, currentUser)
+        userStructure = UserStructure(context, currentUser, userFileManager)
 
         persistenceWrapper = optionalWrapper.orElseGet {
             ControlsFavoritePersistenceWrapper(
@@ -111,7 +108,7 @@
     private fun setValuesForUser(newUser: UserHandle) {
         Log.d(TAG, "Changing to user: $newUser")
         currentUser = newUser
-        userStructure = UserStructure(context, currentUser)
+        userStructure = UserStructure(context, currentUser, userFileManager)
         persistenceWrapper.changeFileAndBackupManager(
                 userStructure.file,
                 BackupManager(userStructure.userContext)
@@ -187,8 +184,11 @@
 
                 // When a component is uninstalled, allow seeding to happen again if the user
                 // reinstalls the app
-                val prefs = userStructure.userContext.getSharedPreferences(
-                    PREFS_CONTROLS_FILE, Context.MODE_PRIVATE)
+                val prefs = userFileManager.getSharedPreferences(
+                    PREFS_CONTROLS_FILE,
+                    Context.MODE_PRIVATE,
+                    userTracker.userId
+                )
                 val completedSeedingPackageSet = prefs.getStringSet(
                     PREFS_CONTROLS_SEEDING_COMPLETED, mutableSetOf<String>())
                 val servicePackageSet = serviceInfoSet.map { it.packageName }
@@ -575,18 +575,12 @@
     }
 }
 
-class UserStructure(context: Context, user: UserHandle) {
+class UserStructure(context: Context, user: UserHandle, userFileManager: UserFileManager) {
     val userContext = context.createContextAsUser(user, 0)
-
-    val file = Environment.buildPath(
-            userContext.filesDir,
-            ControlsFavoritePersistenceWrapper.FILE_NAME
-    )
-
-    val auxiliaryFile = Environment.buildPath(
-            userContext.filesDir,
-            AuxiliaryPersistenceWrapper.AUXILIARY_FILE_NAME
-    )
+    val file = userFileManager.getFile(ControlsFavoritePersistenceWrapper.FILE_NAME,
+        user.identifier)
+    val auxiliaryFile = userFileManager.getFile(AuxiliaryPersistenceWrapper.AUXILIARY_FILE_NAME,
+        user.identifier)
 }
 
 /**
diff --git a/packages/SystemUI/src/com/android/systemui/controls/dagger/ControlsComponent.kt b/packages/SystemUI/src/com/android/systemui/controls/dagger/ControlsComponent.kt
index 2fd3731..9e4a364 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/dagger/ControlsComponent.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/dagger/ControlsComponent.kt
@@ -21,20 +21,22 @@
 import android.database.ContentObserver
 import android.os.UserHandle
 import android.provider.Settings
+import com.android.internal.widget.LockPatternUtils
+import com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_BOOT
 import com.android.systemui.controls.controller.ControlsController
+import com.android.systemui.controls.controller.ControlsTileResourceConfiguration
+import com.android.systemui.controls.controller.ControlsTileResourceConfigurationImpl
 import com.android.systemui.controls.management.ControlsListingController
 import com.android.systemui.controls.ui.ControlsUiController
 import com.android.systemui.dagger.SysUISingleton
 import com.android.systemui.settings.UserTracker
 import com.android.systemui.statusbar.policy.KeyguardStateController
 import com.android.systemui.util.settings.SecureSettings
-import com.android.internal.widget.LockPatternUtils
-import com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_BOOT
-import com.android.systemui.controls.controller.ControlsTileResourceConfiguration
-import com.android.systemui.controls.controller.ControlsTileResourceConfigurationImpl
 import dagger.Lazy
 import java.util.Optional
 import javax.inject.Inject
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.asStateFlow
 
 /**
  * Pseudo-component to inject into classes outside `com.android.systemui.controls`.
@@ -59,7 +61,8 @@
     private val contentResolver: ContentResolver
         get() = context.contentResolver
 
-    private var canShowWhileLockedSetting = false
+    private val _canShowWhileLockedSetting = MutableStateFlow(false)
+    val canShowWhileLockedSetting = _canShowWhileLockedSetting.asStateFlow()
 
     private val controlsTileResourceConfiguration: ControlsTileResourceConfiguration =
         optionalControlsTileResourceConfiguration.orElse(
@@ -117,7 +120,7 @@
                 == STRONG_AUTH_REQUIRED_AFTER_BOOT) {
             return Visibility.AVAILABLE_AFTER_UNLOCK
         }
-        if (!canShowWhileLockedSetting && !keyguardStateController.isUnlocked()) {
+        if (!canShowWhileLockedSetting.value && !keyguardStateController.isUnlocked()) {
             return Visibility.AVAILABLE_AFTER_UNLOCK
         }
 
@@ -125,7 +128,7 @@
     }
 
     private fun updateShowWhileLocked() {
-        canShowWhileLockedSetting = secureSettings.getIntForUser(
+        _canShowWhileLockedSetting.value = secureSettings.getIntForUser(
             Settings.Secure.LOCKSCREEN_SHOW_CONTROLS, 0, UserHandle.USER_CURRENT) != 0
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/AppAdapter.kt b/packages/SystemUI/src/com/android/systemui/controls/management/AppAdapter.kt
index 0bc6579..2389ad1 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/management/AppAdapter.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/management/AppAdapter.kt
@@ -28,6 +28,7 @@
 import androidx.recyclerview.widget.RecyclerView
 import com.android.systemui.R
 import com.android.systemui.controls.ControlsServiceInfo
+import com.android.systemui.util.icuMessageFormat
 import java.text.Collator
 import java.util.concurrent.Executor
 
@@ -61,7 +62,7 @@
             backgroundExecutor.execute {
                 val collator = Collator.getInstance(resources.configuration.locales[0])
                 val localeComparator = compareBy<ControlsServiceInfo, CharSequence>(collator) {
-                    it.loadLabel()
+                    it.loadLabel() ?: ""
                 }
                 listOfServices = serviceInfos.sortedWith(localeComparator)
                 uiExecutor.execute(::notifyDataSetChanged)
@@ -74,8 +75,10 @@
     }
 
     override fun onCreateViewHolder(parent: ViewGroup, i: Int): Holder {
-        return Holder(layoutInflater.inflate(R.layout.controls_app_item, parent, false),
-                favoritesRenderer)
+        return Holder(
+            layoutInflater.inflate(R.layout.controls_app_item, parent, false),
+            favoritesRenderer
+        )
     }
 
     override fun getItemCount() = listOfServices.size
@@ -116,10 +119,10 @@
 
     fun renderFavoritesForComponent(component: ComponentName): String? {
         val qty = favoriteFunction(component)
-        if (qty != 0) {
-            return resources.getQuantityString(R.plurals.controls_number_of_favorites, qty, qty)
+        return if (qty != 0) {
+            icuMessageFormat(resources, R.string.controls_number_of_favorites, qty)
         } else {
-            return null
+            null
         }
     }
 }
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 1268250..c1e99f5 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt
@@ -59,7 +59,7 @@
 import com.android.systemui.dagger.qualifiers.Main
 import com.android.systemui.globalactions.GlobalActionsPopupMenu
 import com.android.systemui.plugins.ActivityStarter
-import com.android.systemui.statusbar.phone.ShadeController
+import com.android.systemui.shade.ShadeController
 import com.android.systemui.statusbar.policy.KeyguardStateController
 import com.android.systemui.util.concurrency.DelayableExecutor
 import dagger.Lazy
@@ -71,18 +71,18 @@
 
 @SysUISingleton
 class ControlsUiControllerImpl @Inject constructor (
-    val controlsController: Lazy<ControlsController>,
-    val context: Context,
-    @Main val uiExecutor: DelayableExecutor,
-    @Background val bgExecutor: DelayableExecutor,
-    val controlsListingController: Lazy<ControlsListingController>,
-    @Main val sharedPreferences: SharedPreferences,
-    val controlActionCoordinator: ControlActionCoordinator,
-    private val activityStarter: ActivityStarter,
-    private val shadeController: ShadeController,
-    private val iconCache: CustomIconCache,
-    private val controlsMetricsLogger: ControlsMetricsLogger,
-    private val keyguardStateController: KeyguardStateController
+        val controlsController: Lazy<ControlsController>,
+        val context: Context,
+        @Main val uiExecutor: DelayableExecutor,
+        @Background val bgExecutor: DelayableExecutor,
+        val controlsListingController: Lazy<ControlsListingController>,
+        @Main val sharedPreferences: SharedPreferences,
+        val controlActionCoordinator: ControlActionCoordinator,
+        private val activityStarter: ActivityStarter,
+        private val shadeController: ShadeController,
+        private val iconCache: CustomIconCache,
+        private val controlsMetricsLogger: ControlsMetricsLogger,
+        private val keyguardStateController: KeyguardStateController
 ) : ControlsUiController {
 
     companion object {
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/DefaultBroadcastReceiverBinder.java b/packages/SystemUI/src/com/android/systemui/dagger/DefaultBroadcastReceiverBinder.java
index 0cf3333..8ba6f1c 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/DefaultBroadcastReceiverBinder.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/DefaultBroadcastReceiverBinder.java
@@ -18,6 +18,8 @@
 
 import android.content.BroadcastReceiver;
 
+import com.android.systemui.GuestResetOrExitSessionReceiver;
+import com.android.systemui.GuestResumeSessionReceiver;
 import com.android.systemui.media.dialog.MediaOutputDialogReceiver;
 import com.android.systemui.people.widget.PeopleSpaceWidgetPinnedReceiver;
 import com.android.systemui.people.widget.PeopleSpaceWidgetProvider;
@@ -89,4 +91,21 @@
     public abstract BroadcastReceiver bindPeopleSpaceWidgetProvider(
             PeopleSpaceWidgetProvider broadcastReceiver);
 
+    /**
+     *
+     */
+    @Binds
+    @IntoMap
+    @ClassKey(GuestResumeSessionReceiver.class)
+    public abstract BroadcastReceiver bindGuestResumeSessionReceiver(
+            GuestResumeSessionReceiver broadcastReceiver);
+
+    /**
+     *
+     */
+    @Binds
+    @IntoMap
+    @ClassKey(GuestResetOrExitSessionReceiver.class)
+    public abstract BroadcastReceiver bindGuestResetOrExitSessionReceiver(
+            GuestResetOrExitSessionReceiver broadcastReceiver);
 }
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java b/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java
index cd8ca05..4096ed4 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java
@@ -42,9 +42,11 @@
 import android.content.pm.LauncherApps;
 import android.content.pm.PackageManager;
 import android.content.pm.ShortcutManager;
+import android.content.res.AssetManager;
 import android.content.res.Resources;
 import android.hardware.SensorManager;
 import android.hardware.SensorPrivacyManager;
+import android.hardware.camera2.CameraManager;
 import android.hardware.devicestate.DeviceStateManager;
 import android.hardware.display.AmbientDisplayConfiguration;
 import android.hardware.display.ColorDisplayManager;
@@ -90,6 +92,7 @@
 import com.android.internal.statusbar.IStatusBarService;
 import com.android.internal.util.LatencyTracker;
 import com.android.systemui.Prefs;
+import com.android.systemui.dagger.qualifiers.Application;
 import com.android.systemui.dagger.qualifiers.DisplayId;
 import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.dagger.qualifiers.TestHarness;
@@ -404,6 +407,12 @@
     }
 
     @Provides
+    @Application
+    static AssetManager provideAssetManager(@Application Context context) {
+        return context.getAssets();
+    }
+
+    @Provides
     @Singleton
     static RoleManager provideRoleManager(Context context) {
         return context.getSystemService(RoleManager.class);
@@ -553,4 +562,10 @@
     static SafetyCenterManager provideSafetyCenterManager(Context context) {
         return context.getSystemService(SafetyCenterManager.class);
     }
+
+    @Provides
+    @Singleton
+    static CameraManager provideCameraManager(Context context) {
+        return context.getSystemService(CameraManager.class);
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/GlobalRootComponent.java b/packages/SystemUI/src/com/android/systemui/dagger/GlobalRootComponent.java
index 4f55ba4..9e33ee1 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/GlobalRootComponent.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/GlobalRootComponent.java
@@ -18,6 +18,9 @@
 
 import android.content.Context;
 
+import com.android.systemui.dagger.qualifiers.InstrumentationTest;
+import com.android.systemui.util.InitializationChecker;
+
 import javax.inject.Singleton;
 
 import dagger.BindsInstance;
@@ -37,7 +40,8 @@
     interface Builder {
         @BindsInstance
         Builder context(Context context);
-
+        @BindsInstance
+        Builder instrumentationTest(@InstrumentationTest boolean test);
         GlobalRootComponent build();
     }
 
@@ -50,4 +54,9 @@
      * Builder for a {@link SysUIComponent}, which makes it a subcomponent of this class.
      */
     SysUIComponent.Builder getSysUIComponent();
+
+    /**
+     * Returns an {@link InitializationChecker}.
+     */
+    InitializationChecker getInitializationChecker();
 }
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/ReferenceSystemUIModule.java b/packages/SystemUI/src/com/android/systemui/dagger/ReferenceSystemUIModule.java
index 4e48a52..a9e47c4 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/ReferenceSystemUIModule.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/ReferenceSystemUIModule.java
@@ -35,6 +35,7 @@
 import com.android.systemui.dock.DockManagerImpl;
 import com.android.systemui.doze.DozeHost;
 import com.android.systemui.media.dagger.MediaModule;
+import com.android.systemui.navigationbar.gestural.GestureModule;
 import com.android.systemui.plugins.qs.QSFactory;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.power.EnhancedEstimates;
@@ -43,6 +44,10 @@
 import com.android.systemui.qs.tileimpl.QSFactoryImpl;
 import com.android.systemui.recents.Recents;
 import com.android.systemui.recents.RecentsImplementation;
+import com.android.systemui.screenshot.ReferenceScreenshotModule;
+import com.android.systemui.shade.NotificationShadeWindowControllerImpl;
+import com.android.systemui.shade.ShadeController;
+import com.android.systemui.shade.ShadeControllerImpl;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
 import com.android.systemui.statusbar.NotificationLockscreenUserManagerImpl;
@@ -55,9 +60,6 @@
 import com.android.systemui.statusbar.phone.HeadsUpManagerPhone;
 import com.android.systemui.statusbar.phone.KeyguardBypassController;
 import com.android.systemui.statusbar.phone.KeyguardEnvironmentImpl;
-import com.android.systemui.statusbar.phone.NotificationShadeWindowControllerImpl;
-import com.android.systemui.statusbar.phone.ShadeController;
-import com.android.systemui.statusbar.phone.ShadeControllerImpl;
 import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
 import com.android.systemui.statusbar.policy.BatteryController;
 import com.android.systemui.statusbar.policy.BatteryControllerImpl;
@@ -94,9 +96,11 @@
  * SystemUI code that variants of SystemUI _must_ include to function correctly.
  */
 @Module(includes = {
+        GestureModule.class,
         MediaModule.class,
         PowerModule.class,
         QSModule.class,
+        ReferenceScreenshotModule.class,
         StartCentralSurfacesModule.class,
         VolumeModule.class
 })
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SysUIComponent.java b/packages/SystemUI/src/com/android/systemui/dagger/SysUIComponent.java
index 5d34a69..029cabb 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/SysUIComponent.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/SysUIComponent.java
@@ -21,7 +21,7 @@
 import com.android.systemui.CoreStartable;
 import com.android.systemui.Dependency;
 import com.android.systemui.InitController;
-import com.android.systemui.SystemUIAppComponentFactory;
+import com.android.systemui.SystemUIAppComponentFactoryBase;
 import com.android.systemui.dagger.qualifiers.PerUser;
 import com.android.systemui.dump.DumpManager;
 import com.android.systemui.keyguard.KeyguardSliceProvider;
@@ -37,22 +37,16 @@
 import com.android.systemui.unfold.SysUIUnfoldComponent;
 import com.android.systemui.unfold.UnfoldLatencyTracker;
 import com.android.systemui.unfold.util.NaturalRotationUnfoldProgressProvider;
-import com.android.wm.shell.ShellCommandHandler;
 import com.android.wm.shell.TaskViewFactory;
-import com.android.wm.shell.apppairs.AppPairs;
 import com.android.wm.shell.back.BackAnimation;
 import com.android.wm.shell.bubbles.Bubbles;
-import com.android.wm.shell.compatui.CompatUI;
 import com.android.wm.shell.displayareahelper.DisplayAreaHelper;
-import com.android.wm.shell.draganddrop.DragAndDrop;
-import com.android.wm.shell.hidedisplaycutout.HideDisplayCutout;
-import com.android.wm.shell.legacysplitscreen.LegacySplitScreen;
 import com.android.wm.shell.onehanded.OneHanded;
 import com.android.wm.shell.pip.Pip;
 import com.android.wm.shell.recents.RecentTasks;
 import com.android.wm.shell.splitscreen.SplitScreen;
 import com.android.wm.shell.startingsurface.StartingSurface;
-import com.android.wm.shell.tasksurfacehelper.TaskSurfaceHelper;
+import com.android.wm.shell.sysui.ShellInterface;
 import com.android.wm.shell.transition.ShellTransitions;
 
 import java.util.Map;
@@ -83,18 +77,15 @@
     @Subcomponent.Builder
     interface Builder {
         @BindsInstance
+        Builder setShell(ShellInterface s);
+
+        @BindsInstance
         Builder setPip(Optional<Pip> p);
 
         @BindsInstance
-        Builder setLegacySplitScreen(Optional<LegacySplitScreen> s);
-
-        @BindsInstance
         Builder setSplitScreen(Optional<SplitScreen> s);
 
         @BindsInstance
-        Builder setAppPairs(Optional<AppPairs> s);
-
-        @BindsInstance
         Builder setOneHanded(Optional<OneHanded> o);
 
         @BindsInstance
@@ -104,12 +95,6 @@
         Builder setTaskViewFactory(Optional<TaskViewFactory> t);
 
         @BindsInstance
-        Builder setHideDisplayCutout(Optional<HideDisplayCutout> h);
-
-        @BindsInstance
-        Builder setShellCommandHandler(Optional<ShellCommandHandler> shellDump);
-
-        @BindsInstance
         Builder setTransitions(ShellTransitions t);
 
         @BindsInstance
@@ -119,18 +104,9 @@
         Builder setDisplayAreaHelper(Optional<DisplayAreaHelper> h);
 
         @BindsInstance
-        Builder setTaskSurfaceHelper(Optional<TaskSurfaceHelper> t);
-
-        @BindsInstance
         Builder setRecentTasks(Optional<RecentTasks> r);
 
         @BindsInstance
-        Builder setCompatUI(Optional<CompatUI> s);
-
-        @BindsInstance
-        Builder setDragAndDrop(Optional<DragAndDrop> d);
-
-        @BindsInstance
         Builder setBackAnimation(Optional<BackAnimation> b);
 
         SysUIComponent build();
@@ -249,7 +225,7 @@
     /**
      * Member injection into the supplied argument.
      */
-    void inject(SystemUIAppComponentFactory factory);
+    void inject(SystemUIAppComponentFactoryBase factory);
 
     /**
      * Member injection into the supplied argument.
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUICoreStartableModule.kt b/packages/SystemUI/src/com/android/systemui/dagger/SystemUICoreStartableModule.kt
index a9f34085..6db3e82 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUICoreStartableModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUICoreStartableModule.kt
@@ -33,6 +33,7 @@
 import com.android.systemui.media.RingtonePlayer
 import com.android.systemui.power.PowerUI
 import com.android.systemui.recents.Recents
+import com.android.systemui.settings.dagger.MultiUserUtilsModule
 import com.android.systemui.shortcut.ShortcutKeyDispatcher
 import com.android.systemui.statusbar.notification.InstantAppNotifier
 import com.android.systemui.statusbar.phone.KeyguardLiftController
@@ -51,7 +52,7 @@
 /**
  * Collection of {@link CoreStartable}s that should be run on AOSP.
  */
-@Module
+@Module(includes = [MultiUserUtilsModule::class])
 abstract class SystemUICoreStartableModule {
     /** Inject into AuthController.  */
     @Binds
@@ -205,4 +206,4 @@
     @IntoMap
     @ClassKey(KeyguardLiftController::class)
     abstract fun bindKeyguardLiftController(sysui: KeyguardLiftController): CoreStartable
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java
index 366ef26..f32ea35 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java
@@ -26,7 +26,6 @@
 import com.android.keyguard.dagger.KeyguardBouncerComponent;
 import com.android.systemui.BootCompleteCache;
 import com.android.systemui.BootCompleteCacheImpl;
-import com.android.systemui.SystemUIFactory;
 import com.android.systemui.appops.dagger.AppOpsModule;
 import com.android.systemui.assist.AssistModule;
 import com.android.systemui.biometrics.AlternateUdfpsTouchProvider;
@@ -43,20 +42,21 @@
 import com.android.systemui.fragments.FragmentService;
 import com.android.systemui.log.dagger.LogModule;
 import com.android.systemui.lowlightclock.LowLightClockController;
+import com.android.systemui.media.dagger.MediaProjectionModule;
 import com.android.systemui.model.SysUiState;
 import com.android.systemui.navigationbar.NavigationBarComponent;
+import com.android.systemui.people.PeopleModule;
 import com.android.systemui.plugins.BcSmartspaceDataPlugin;
 import com.android.systemui.privacy.PrivacyModule;
 import com.android.systemui.recents.Recents;
 import com.android.systemui.screenshot.dagger.ScreenshotModule;
-import com.android.systemui.settings.dagger.SettingsModule;
+import com.android.systemui.settings.dagger.MultiUserUtilsModule;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.smartspace.dagger.SmartspaceModule;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
 import com.android.systemui.statusbar.NotificationShadeWindowController;
 import com.android.systemui.statusbar.QsFrameTranslateModule;
-import com.android.systemui.statusbar.notification.NotifPipelineFlags;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.collection.NotifPipeline;
 import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinder;
 import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinderImpl;
@@ -69,9 +69,8 @@
 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.ShadeController;
 import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent;
-import com.android.systemui.statusbar.policy.ConfigurationController;
+import com.android.systemui.statusbar.pipeline.dagger.StatusBarPipelineModule;
 import com.android.systemui.statusbar.policy.HeadsUpManager;
 import com.android.systemui.statusbar.policy.KeyguardStateController;
 import com.android.systemui.statusbar.policy.ZenModeController;
@@ -83,6 +82,7 @@
 import com.android.systemui.user.UserModule;
 import com.android.systemui.util.concurrency.SysUIConcurrencyModule;
 import com.android.systemui.util.dagger.UtilModule;
+import com.android.systemui.util.kotlin.CoroutinesModule;
 import com.android.systemui.util.sensors.SensorModule;
 import com.android.systemui.util.settings.SettingsUtilModule;
 import com.android.systemui.util.time.SystemClock;
@@ -115,22 +115,26 @@
             AssistModule.class,
             BiometricsModule.class,
             ClockModule.class,
+            CoroutinesModule.class,
             DreamModule.class,
             ControlsModule.class,
             DemoModeModule.class,
             FalsingModule.class,
             FlagsModule.class,
             LogModule.class,
+            MediaProjectionModule.class,
             PeopleHubModule.class,
+            PeopleModule.class,
             PluginModule.class,
             PrivacyModule.class,
             QsFrameTranslateModule.class,
             ScreenshotModule.class,
             SensorModule.class,
-            SettingsModule.class,
+            MultiUserUtilsModule.class,
             SettingsUtilModule.class,
             SmartRepliesInflationModule.class,
             SmartspaceModule.class,
+            StatusBarPipelineModule.class,
             StatusBarPolicyModule.class,
             StatusBarWindowModule.class,
             SysUIConcurrencyModule.class,
@@ -198,11 +202,6 @@
     @Binds
     abstract SystemClock bindSystemClock(SystemClockImpl systemClock);
 
-    @Provides
-    static SystemUIFactory getSystemUIFactory() {
-        return SystemUIFactory.getInstance();
-    }
-
     // TODO: This should provided by the WM component
     /** Provides Optional of BubbleManager */
     @SysUISingleton
@@ -212,7 +211,6 @@
             NotificationShadeWindowController notificationShadeWindowController,
             KeyguardStateController keyguardStateController,
             ShadeController shadeController,
-            ConfigurationController configurationController,
             @Nullable IStatusBarService statusBarService,
             INotificationManager notificationManager,
             NotificationVisibilityProvider visibilityProvider,
@@ -220,11 +218,9 @@
             ZenModeController zenModeController,
             NotificationLockscreenUserManager notifUserManager,
             NotificationGroupManagerLegacy groupManager,
-            NotificationEntryManager entryManager,
             CommonNotifCollection notifCollection,
             NotifPipeline notifPipeline,
             SysUiState sysUiState,
-            NotifPipelineFlags notifPipelineFlags,
             DumpManager dumpManager,
             @Main Executor sysuiMainExecutor) {
         return Optional.ofNullable(BubblesManager.create(context,
@@ -232,7 +228,6 @@
                 notificationShadeWindowController,
                 keyguardStateController,
                 shadeController,
-                configurationController,
                 statusBarService,
                 notificationManager,
                 visibilityProvider,
@@ -240,11 +235,9 @@
                 zenModeController,
                 notifUserManager,
                 groupManager,
-                entryManager,
                 notifCollection,
                 notifPipeline,
                 sysUiState,
-                notifPipelineFlags,
                 dumpManager,
                 sysuiMainExecutor));
     }
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/WMComponent.java b/packages/SystemUI/src/com/android/systemui/dagger/WMComponent.java
index b02074a..78a45f9 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/WMComponent.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/WMComponent.java
@@ -21,29 +21,24 @@
 
 import androidx.annotation.Nullable;
 
-import com.android.systemui.SystemUIFactory;
+import com.android.systemui.SystemUIInitializerFactory;
 import com.android.systemui.tv.TvWMComponent;
-import com.android.wm.shell.ShellCommandHandler;
-import com.android.wm.shell.ShellInit;
+import com.android.wm.shell.sysui.ShellCommandHandler;
+import com.android.wm.shell.sysui.ShellInit;
 import com.android.wm.shell.TaskViewFactory;
-import com.android.wm.shell.apppairs.AppPairs;
 import com.android.wm.shell.back.BackAnimation;
 import com.android.wm.shell.bubbles.Bubbles;
 import com.android.wm.shell.common.annotations.ShellMainThread;
-import com.android.wm.shell.compatui.CompatUI;
 import com.android.wm.shell.dagger.TvWMShellModule;
 import com.android.wm.shell.dagger.WMShellModule;
 import com.android.wm.shell.dagger.WMSingleton;
 import com.android.wm.shell.displayareahelper.DisplayAreaHelper;
-import com.android.wm.shell.draganddrop.DragAndDrop;
-import com.android.wm.shell.hidedisplaycutout.HideDisplayCutout;
-import com.android.wm.shell.legacysplitscreen.LegacySplitScreen;
 import com.android.wm.shell.onehanded.OneHanded;
 import com.android.wm.shell.pip.Pip;
 import com.android.wm.shell.recents.RecentTasks;
 import com.android.wm.shell.splitscreen.SplitScreen;
 import com.android.wm.shell.startingsurface.StartingSurface;
-import com.android.wm.shell.tasksurfacehelper.TaskSurfaceHelper;
+import com.android.wm.shell.sysui.ShellInterface;
 import com.android.wm.shell.transition.ShellTransitions;
 
 import java.util.Optional;
@@ -54,7 +49,7 @@
 /**
  * Dagger Subcomponent for WindowManager.  This class explicitly describes the interfaces exported
  * from the WM component into the SysUI component (in
- * {@link SystemUIFactory#init(Context, boolean)}), and references the specific dependencies
+ * {@link SystemUIInitializerFactory#init(Context, boolean)}), and references the specific dependencies
  * provided by its particular device/form-factor SystemUI implementation.
  *
  * ie. {@link WMComponent} includes {@link WMShellModule}
@@ -80,14 +75,24 @@
      * Initializes all the WMShell components before starting any of the SystemUI components.
      */
     default void init() {
-        getShellInit().init();
+        // TODO(238217847): To be removed once the dependencies are inverted and ShellController can
+        // inject these classes directly, otherwise, it's currently needed to ensure that these
+        // classes are created and set on the controller before onInit() is called
+        getShellInit();
+        getShellCommandHandler();
+        getShell().onInit();
     }
 
     @WMSingleton
+    ShellInterface getShell();
+
+    // TODO(238217847): To be removed once ShellController can inject ShellInit directly
+    @WMSingleton
     ShellInit getShellInit();
 
+    // TODO(238217847): To be removed once ShellController can inject ShellCommandHandler directly
     @WMSingleton
-    Optional<ShellCommandHandler> getShellCommandHandler();
+    ShellCommandHandler getShellCommandHandler();
 
     @WMSingleton
     Optional<OneHanded> getOneHanded();
@@ -96,21 +101,12 @@
     Optional<Pip> getPip();
 
     @WMSingleton
-    Optional<LegacySplitScreen> getLegacySplitScreen();
-
-    @WMSingleton
     Optional<SplitScreen> getSplitScreen();
 
     @WMSingleton
-    Optional<AppPairs> getAppPairs();
-
-    @WMSingleton
     Optional<Bubbles> getBubbles();
 
     @WMSingleton
-    Optional<HideDisplayCutout> getHideDisplayCutout();
-
-    @WMSingleton
     Optional<TaskViewFactory> getTaskViewFactory();
 
     @WMSingleton
@@ -123,17 +119,8 @@
     Optional<DisplayAreaHelper> getDisplayAreaHelper();
 
     @WMSingleton
-    Optional<TaskSurfaceHelper> getTaskSurfaceHelper();
-
-    @WMSingleton
     Optional<RecentTasks> getRecentTasks();
 
     @WMSingleton
-    Optional<CompatUI> getCompatUI();
-
-    @WMSingleton
-    Optional<DragAndDrop> getDragAndDrop();
-
-    @WMSingleton
     Optional<BackAnimation> getBackAnimation();
 }
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/InstrumentationTest.java b/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/InstrumentationTest.java
new file mode 100644
index 0000000..a803a39
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/dagger/qualifiers/InstrumentationTest.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.dagger.qualifiers;
+
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+
+import javax.inject.Qualifier;
+
+
+/**
+ * An annotation for injecting whether or not we are running in a test environment.
+ */
+@Qualifier
+@Documented
+@Retention(RUNTIME)
+public @interface InstrumentationTest {
+}
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java b/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java
index 19287c1..4161cf6 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java
@@ -332,6 +332,20 @@
     }
 
     /**
+     * Logs the car mode started event.
+     */
+    public void traceCarModeStarted() {
+        mLogger.logCarModeStarted();
+    }
+
+    /**
+     * Logs the car mode ended event.
+     */
+    public void traceCarModeEnded() {
+        mLogger.logCarModeEnded();
+    }
+
+    /**
      * Appends power save changes that may cause a new doze state
      * @param powerSaveActive true if power saving is active
      * @param nextState the state that we'll transition to
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeLogger.kt b/packages/SystemUI/src/com/android/systemui/doze/DozeLogger.kt
index 4c81563..4b279ec 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeLogger.kt
@@ -105,7 +105,7 @@
             bool4 = screenOnFromTouch
         }, {
             "Fling expand=$bool1 aboveThreshold=$bool2 thresholdNeeded=$bool3 " +
-                    "screenOnFromTouch=$bool4"
+                "screenOnFromTouch=$bool4"
         })
     }
 
@@ -151,7 +151,7 @@
             long2 = triggerAt
         }, {
             "Time tick scheduledAt=${DATE_FORMAT.format(Date(long1))} " +
-                    "triggerAt=${DATE_FORMAT.format(Date(long2))}"
+                "triggerAt=${DATE_FORMAT.format(Date(long2))}"
         })
     }
 
@@ -220,7 +220,7 @@
             str1 = partUpdated
         }, {
             "Posture changed, posture=${DevicePostureController.devicePostureToString(int1)}" +
-                    " partUpdated=$str1"
+                " partUpdated=$str1"
         })
     }
 
@@ -299,6 +299,18 @@
             "Doze aod dimming scrim opacity set, opacity=$long1"
         })
     }
+
+    fun logCarModeEnded() {
+        buffer.log(TAG, INFO, {}, {
+            "Doze car mode ended"
+        })
+    }
+
+    fun logCarModeStarted() {
+        buffer.log(TAG, INFO, {}, {
+            "Doze car mode started"
+        })
+    }
 }
 
 private const val TAG = "DozeLog"
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java b/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java
index 5779bb3..32bc9de 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java
@@ -20,6 +20,8 @@
 import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_WAKING;
 
 import android.annotation.MainThread;
+import android.app.UiModeManager;
+import android.content.res.Configuration;
 import android.hardware.display.AmbientDisplayConfiguration;
 import android.os.Trace;
 import android.os.UserHandle;
@@ -33,7 +35,6 @@
 import com.android.systemui.keyguard.WakefulnessLifecycle;
 import com.android.systemui.keyguard.WakefulnessLifecycle.Wakefulness;
 import com.android.systemui.statusbar.phone.DozeParameters;
-import com.android.systemui.statusbar.policy.BatteryController;
 import com.android.systemui.util.Assert;
 import com.android.systemui.util.wakelock.WakeLock;
 
@@ -66,6 +67,8 @@
         INITIALIZED,
         /** Regular doze. Device is asleep and listening for pulse triggers. */
         DOZE,
+        /** Deep doze. Device is asleep and is not listening for pulse triggers. */
+        DOZE_SUSPEND_TRIGGERS,
         /** Always-on doze. Device is asleep, showing UI and listening for pulse triggers. */
         DOZE_AOD,
         /** Pulse has been requested. Device is awake and preparing UI */
@@ -125,6 +128,7 @@
                             : Display.STATE_ON;
                 case DOZE_AOD_PAUSED:
                 case DOZE:
+                case DOZE_SUSPEND_TRIGGERS:
                     return Display.STATE_OFF;
                 case DOZE_PULSING:
                 case DOZE_PULSING_BRIGHT:
@@ -143,26 +147,27 @@
     private final WakeLock mWakeLock;
     private final AmbientDisplayConfiguration mConfig;
     private final WakefulnessLifecycle mWakefulnessLifecycle;
-    private final BatteryController mBatteryController;
     private final DozeHost mDozeHost;
-    private Part[] mParts;
+    private final UiModeManager mUiModeManager;
+    private final DockManager mDockManager;
+    private final Part[] mParts;
 
     private final ArrayList<State> mQueuedRequests = new ArrayList<>();
     private State mState = State.UNINITIALIZED;
     private int mPulseReason;
     private boolean mWakeLockHeldForCurrentState = false;
-    private DockManager mDockManager;
 
     @Inject
     public DozeMachine(@WrappedService Service service, AmbientDisplayConfiguration config,
             WakeLock wakeLock, WakefulnessLifecycle wakefulnessLifecycle,
-            BatteryController batteryController, DozeLog dozeLog, DockManager dockManager,
+            UiModeManager uiModeManager,
+            DozeLog dozeLog, DockManager dockManager,
             DozeHost dozeHost, Part[] parts) {
         mDozeService = service;
         mConfig = config;
         mWakefulnessLifecycle = wakefulnessLifecycle;
         mWakeLock = wakeLock;
-        mBatteryController = batteryController;
+        mUiModeManager = uiModeManager;
         mDozeLog = dozeLog;
         mDockManager = dockManager;
         mDozeHost = dozeHost;
@@ -244,7 +249,7 @@
         Assert.isMainThread();
         if (isExecutingTransition()) {
             throw new IllegalStateException("Cannot get state because there were pending "
-                    + "transitions: " + mQueuedRequests.toString());
+                    + "transitions: " + mQueuedRequests);
         }
         return mState;
     }
@@ -313,11 +318,8 @@
         }
         mDozeLog.traceDozeStateSendComplete(newState);
 
-        switch (newState) {
-            case FINISH:
-                mDozeService.finish();
-                break;
-            default:
+        if (newState == State.FINISH) {
+            mDozeService.finish();
         }
     }
 
@@ -357,6 +359,12 @@
         if (mState == State.FINISH) {
             return State.FINISH;
         }
+        if (mUiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_CAR
+                && (requestedState.canPulse() || requestedState.staysAwake())) {
+            Log.i(TAG, "Doze is suppressed with all triggers disabled as car mode is active");
+            mDozeLog.traceCarModeStarted();
+            return State.DOZE_SUSPEND_TRIGGERS;
+        }
         if (mDozeHost.isAlwaysOnSuppressed() && requestedState.isAlwaysOn()) {
             Log.i(TAG, "Doze is suppressed by an app. Suppressing state: " + requestedState);
             mDozeLog.traceAlwaysOnSuppressed(requestedState, "app");
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java
index 83220ca..60227ee9 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java
@@ -147,6 +147,7 @@
                 setLightSensorEnabled(true);
                 break;
             case DOZE:
+            case DOZE_SUSPEND_TRIGGERS:
                 setLightSensorEnabled(false);
                 resetBrightnessToDefault();
                 break;
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeSuppressor.java b/packages/SystemUI/src/com/android/systemui/doze/DozeSuppressor.java
index 89f50ad..7ed4b35 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeSuppressor.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeSuppressor.java
@@ -17,6 +17,7 @@
 package com.android.systemui.doze;
 
 import static android.app.UiModeManager.ACTION_ENTER_CAR_MODE;
+import static android.app.UiModeManager.ACTION_EXIT_CAR_MODE;
 
 import android.app.UiModeManager;
 import android.content.BroadcastReceiver;
@@ -96,6 +97,7 @@
                 registerBroadcastReceiver();
                 mDozeHost.addCallback(mHostCallback);
                 checkShouldImmediatelyEndDoze();
+                checkShouldImmediatelySuspendDoze();
                 break;
             case FINISH:
                 destroy();
@@ -110,11 +112,16 @@
         mDozeHost.removeCallback(mHostCallback);
     }
 
+    private void checkShouldImmediatelySuspendDoze() {
+        if (mUiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_CAR) {
+            mDozeLog.traceCarModeStarted();
+            mMachine.requestState(DozeMachine.State.DOZE_SUSPEND_TRIGGERS);
+        }
+    }
+
     private void checkShouldImmediatelyEndDoze() {
         String reason = null;
-        if (mUiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_CAR) {
-            reason = "car_mode";
-        } else if (!mDozeHost.isProvisioned()) {
+        if (!mDozeHost.isProvisioned()) {
             reason = "device_unprovisioned";
         } else if (mBiometricUnlockControllerLazy.get().hasPendingAuthentication()) {
             reason = "has_pending_auth";
@@ -141,6 +148,7 @@
             return;
         }
         IntentFilter filter = new IntentFilter(ACTION_ENTER_CAR_MODE);
+        filter.addAction(ACTION_EXIT_CAR_MODE);
         mBroadcastDispatcher.registerReceiver(mBroadcastReceiver, filter);
         mBroadcastReceiverRegistered = true;
     }
@@ -156,9 +164,14 @@
     private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
-            if (ACTION_ENTER_CAR_MODE.equals(intent.getAction())) {
-                mDozeLog.traceImmediatelyEndDoze("car_mode");
-                mMachine.requestState(DozeMachine.State.FINISH);
+            String action = intent.getAction();
+            if (ACTION_ENTER_CAR_MODE.equals(action)) {
+                mDozeLog.traceCarModeStarted();
+                mMachine.requestState(DozeMachine.State.DOZE_SUSPEND_TRIGGERS);
+            } else if (ACTION_EXIT_CAR_MODE.equals(action)) {
+                mDozeLog.traceCarModeEnded();
+                mMachine.requestState(mConfig.alwaysOnEnabled(UserHandle.USER_CURRENT)
+                        ? DozeMachine.State.DOZE_AOD : DozeMachine.State.DOZE);
             }
         }
     };
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java
index 1cc5df5..0014d6b 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java
@@ -16,6 +16,10 @@
 
 package com.android.systemui.doze;
 
+import static com.android.systemui.doze.DozeMachine.State.DOZE_SUSPEND_TRIGGERS;
+import static com.android.systemui.doze.DozeMachine.State.FINISH;
+import static com.android.systemui.doze.DozeMachine.State.UNINITIALIZED;
+
 import android.annotation.Nullable;
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -437,14 +441,18 @@
 
     @Override
     public void transitionTo(DozeMachine.State oldState, DozeMachine.State newState) {
+        if (oldState == DOZE_SUSPEND_TRIGGERS && (newState != FINISH
+                && newState != UNINITIALIZED)) {
+            // Register callbacks that were unregistered when we switched to
+            // DOZE_SUSPEND_TRIGGERS state.
+            registerCallbacks();
+        }
         switch (newState) {
             case INITIALIZED:
                 mAodInterruptRunnable = null;
                 sWakeDisplaySensorState = true;
-                mBroadcastReceiver.register(mBroadcastDispatcher);
-                mDockManager.addListener(mDockEventListener);
+                registerCallbacks();
                 mDozeSensors.requestTemporaryDisable();
-                mDozeHost.addCallback(mHostCallback);
                 break;
             case DOZE:
             case DOZE_AOD:
@@ -472,21 +480,36 @@
             case DOZE_PULSE_DONE:
                 mDozeSensors.requestTemporaryDisable();
                 break;
+            case DOZE_SUSPEND_TRIGGERS:
             case FINISH:
-                mBroadcastReceiver.unregister(mBroadcastDispatcher);
-                mDozeHost.removeCallback(mHostCallback);
-                mDockManager.removeListener(mDockEventListener);
-                mDozeSensors.setListening(false, false);
-                mDozeSensors.setProxListening(false);
-                mWantSensors = false;
-                mWantProxSensor = false;
-                mWantTouchScreenSensors = false;
+                stopListeningToAllTriggers();
                 break;
             default:
         }
         mDozeSensors.setListening(mWantSensors, mWantTouchScreenSensors);
     }
 
+    private void registerCallbacks() {
+        mBroadcastReceiver.register(mBroadcastDispatcher);
+        mDockManager.addListener(mDockEventListener);
+        mDozeHost.addCallback(mHostCallback);
+    }
+
+    private void unregisterCallbacks() {
+        mBroadcastReceiver.unregister(mBroadcastDispatcher);
+        mDozeHost.removeCallback(mHostCallback);
+        mDockManager.removeListener(mDockEventListener);
+    }
+
+    private void stopListeningToAllTriggers() {
+        unregisterCallbacks();
+        mDozeSensors.setListening(false, false);
+        mDozeSensors.setProxListening(false);
+        mWantSensors = false;
+        mWantProxSensor = false;
+        mWantTouchScreenSensors = false;
+    }
+
     @Override
     public void onScreenState(int state) {
         mDozeSensors.onScreenState(state);
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java b/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java
index e568b82..7c816ce 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeUi.java
@@ -26,8 +26,6 @@
 import android.text.format.Formatter;
 import android.util.Log;
 
-import com.android.keyguard.KeyguardUpdateMonitor;
-import com.android.keyguard.KeyguardUpdateMonitorCallback;
 import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.doze.dagger.DozeScope;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
@@ -44,8 +42,6 @@
  */
 @DozeScope
 public class DozeUi implements DozeMachine.Part {
-    // if enabled, calls dozeTimeTick() whenever the time changes:
-    private static final boolean BURN_IN_TESTING_ENABLED = false;
     private static final long TIME_TICK_DEADLINE_MILLIS = 90 * 1000; // 1.5min
     private final Context mContext;
     private final DozeHost mHost;
@@ -57,26 +53,13 @@
     private final DozeParameters mDozeParameters;
     private final DozeLog mDozeLog;
     private final StatusBarStateController mStatusBarStateController;
-    private final KeyguardUpdateMonitorCallback mKeyguardVisibilityCallback =
-            new KeyguardUpdateMonitorCallback() {
-                @Override
-                public void onTimeChanged() {
-                    if (BURN_IN_TESTING_ENABLED && mStatusBarStateController.isDozing()) {
-                        // update whenever the time changes for manual burn in testing
-                        mHost.dozeTimeTick();
-
-                        // Keep wakelock until a frame has been pushed.
-                        mHandler.post(mWakeLock.wrap(() -> {}));
-                    }
-                }
-            };
 
     private long mLastTimeTickElapsed = 0;
 
     @Inject
     public DozeUi(Context context, AlarmManager alarmManager,
             WakeLock wakeLock, DozeHost host, @Main Handler handler,
-            DozeParameters params, KeyguardUpdateMonitor keyguardUpdateMonitor,
+            DozeParameters params,
             StatusBarStateController statusBarStateController,
             DozeLog dozeLog) {
         mContext = context;
@@ -86,7 +69,6 @@
         mCanAnimateTransition = !params.getDisplayNeedsBlanking();
         mDozeParameters = params;
         mTimeTicker = new AlarmTimeout(alarmManager, this::onTimeTick, "doze_time_tick", handler);
-        keyguardUpdateMonitor.registerCallback(mKeyguardVisibilityCallback);
         mDozeLog = dozeLog;
         mStatusBarStateController = statusBarStateController;
     }
@@ -139,6 +121,7 @@
                 break;
             case DOZE:
             case DOZE_AOD_PAUSED:
+            case DOZE_SUSPEND_TRIGGERS:
                 unscheduleTimeTick();
                 break;
             case DOZE_REQUEST_PULSE:
diff --git a/packages/SystemUI/src/com/android/systemui/doze/util/BurnInHelperWrapper.kt b/packages/SystemUI/src/com/android/systemui/doze/util/BurnInHelperWrapper.kt
new file mode 100644
index 0000000..d853e04
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/doze/util/BurnInHelperWrapper.kt
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.doze.util
+
+import javax.inject.Inject
+
+/** Injectable wrapper around `BurnInHelper` functions */
+class BurnInHelperWrapper @Inject constructor() {
+
+    fun burnInOffset(amplitude: Int, xAxis: Boolean): Int {
+        return getBurnInOffset(amplitude, xAxis)
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayContainerViewController.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayContainerViewController.java
index 74949d0..d7b7777 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayContainerViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayContainerViewController.java
@@ -183,22 +183,22 @@
     }
 
     private void updateBurnInOffsets() {
-        int burnInOffset = mMaxBurnInOffset;
-
         // Make sure the offset starts at zero, to avoid a big jump in the overlay when it first
         // appears.
-        long millisSinceStart = System.currentTimeMillis() - mJitterStartTimeMillis;
+        final long millisSinceStart = System.currentTimeMillis() - mJitterStartTimeMillis;
+        final int burnInOffset;
         if (millisSinceStart < mMillisUntilFullJitter) {
             float lerpAmount = (float) millisSinceStart / (float) mMillisUntilFullJitter;
-            burnInOffset = Math.round(MathUtils.lerp(0f, burnInOffset, lerpAmount));
+            burnInOffset = Math.round(MathUtils.lerp(0f, mMaxBurnInOffset, lerpAmount));
+        } else {
+            burnInOffset = mMaxBurnInOffset;
         }
 
         // These translation values change slowly, and the set translation methods are idempotent,
         // so no translation occurs when the values don't change.
-        int burnInOffsetX = getBurnInOffset(burnInOffset * 2, true)
-                - burnInOffset;
-        int burnInOffsetY = getBurnInOffset(burnInOffset * 2, false)
-                - burnInOffset;
+        final int halfBurnInOffset = burnInOffset / 2;
+        final int burnInOffsetX = getBurnInOffset(burnInOffset, true) - halfBurnInOffset;
+        final int burnInOffsetY = getBurnInOffset(burnInOffset, false) - halfBurnInOffset;
         mView.setTranslationX(burnInOffsetX);
         mView.setTranslationY(burnInOffsetY);
 
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayNotificationCountProvider.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayNotificationCountProvider.java
index 6589f26..f9fc1f3 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayNotificationCountProvider.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayNotificationCountProvider.java
@@ -20,7 +20,6 @@
 import android.service.notification.NotificationListenerService;
 import android.service.notification.StatusBarNotification;
 
-import com.android.systemui.dagger.SysUISingleton;
 import com.android.systemui.dagger.qualifiers.Background;
 import com.android.systemui.statusbar.NotificationListener;
 import com.android.systemui.statusbar.NotificationListener.NotificationHandler;
@@ -33,13 +32,10 @@
 import java.util.Set;
 import java.util.concurrent.Executor;
 
-import javax.inject.Inject;
-
 /***
  * {@link DreamOverlayNotificationCountProvider} provides the current notification count to
- * registered callbacks.
+ * registered callbacks. Ongoing notifications are not included in the count.
  */
-@SysUISingleton
 public class DreamOverlayNotificationCountProvider
         implements CallbackController<DreamOverlayNotificationCountProvider.Callback> {
     private final Set<String> mNotificationKeys = new HashSet<>();
@@ -49,6 +45,10 @@
         @Override
         public void onNotificationPosted(
                 StatusBarNotification sbn, NotificationListenerService.RankingMap rankingMap) {
+            if (sbn.isOngoing()) {
+                // Don't count ongoing notifications.
+                return;
+            }
             mNotificationKeys.add(sbn.getKey());
             reportNotificationCountChanged();
         }
@@ -78,7 +78,6 @@
         }
     };
 
-    @Inject
     public DreamOverlayNotificationCountProvider(
             NotificationListener notificationListener,
             @Background Executor bgExecutor) {
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayRegistrant.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayRegistrant.java
index 994c630..99ca3c7 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayRegistrant.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayRegistrant.java
@@ -22,6 +22,7 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.res.Resources;
 import android.os.PatternMatcher;
 import android.os.RemoteException;
@@ -31,7 +32,6 @@
 import android.util.Log;
 
 import com.android.systemui.CoreStartable;
-import com.android.systemui.R;
 import com.android.systemui.dagger.qualifiers.Main;
 
 import javax.inject.Inject;
@@ -66,23 +66,15 @@
         final int enabledState =
                 packageManager.getComponentEnabledSetting(mOverlayServiceComponent);
 
-
-        // TODO(b/204626521): We should not have to set the component enabled setting if the
-        // enabled config flag is properly applied based on the RRO.
-        if (enabledState != PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER) {
-            final int overlayState = mResources.getBoolean(R.bool.config_dreamOverlayServiceEnabled)
-                    ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
-                    : PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
-
-            if (overlayState != enabledState) {
-                packageManager
-                        .setComponentEnabledSetting(mOverlayServiceComponent, overlayState, 0);
-            }
-        }
-
         // The overlay service is only registered when its component setting is enabled.
-        boolean register = packageManager.getComponentEnabledSetting(mOverlayServiceComponent)
-                == PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
+        boolean register = false;
+
+        try {
+            register = packageManager.getServiceInfo(mOverlayServiceComponent,
+                PackageManager.GET_META_DATA).enabled;
+        } catch (NameNotFoundException e) {
+            Log.e(TAG, "could not find dream overlay service");
+        }
 
         if (mCurrentRegisteredState == register) {
             return;
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStateController.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStateController.java
index fc71e2f..69e41ba 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStateController.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStateController.java
@@ -101,6 +101,9 @@
     public void addComplication(Complication complication) {
         mExecutor.execute(() -> {
             if (mComplications.add(complication)) {
+                if (DEBUG) {
+                    Log.d(TAG, "addComplication: added " + complication);
+                }
                 mCallbacks.stream().forEach(callback -> callback.onComplicationsChanged());
             }
         });
@@ -112,6 +115,9 @@
     public void removeComplication(Complication complication) {
         mExecutor.execute(() -> {
             if (mComplications.remove(complication)) {
+                if (DEBUG) {
+                    Log.d(TAG, "removeComplication: removed " + complication);
+                }
                 mCallbacks.stream().forEach(callback -> callback.onComplicationsChanged());
             }
         });
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarView.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarView.java
index 59a17ba..a25257d 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarView.java
@@ -43,6 +43,8 @@
             STATUS_ICON_NOTIFICATIONS,
             STATUS_ICON_WIFI_UNAVAILABLE,
             STATUS_ICON_ALARM_SET,
+            STATUS_ICON_CAMERA_DISABLED,
+            STATUS_ICON_MIC_DISABLED,
             STATUS_ICON_MIC_CAMERA_DISABLED,
             STATUS_ICON_PRIORITY_MODE_ON
     })
@@ -50,8 +52,10 @@
     public static final int STATUS_ICON_NOTIFICATIONS = 0;
     public static final int STATUS_ICON_WIFI_UNAVAILABLE = 1;
     public static final int STATUS_ICON_ALARM_SET = 2;
-    public static final int STATUS_ICON_MIC_CAMERA_DISABLED = 3;
-    public static final int STATUS_ICON_PRIORITY_MODE_ON = 4;
+    public static final int STATUS_ICON_CAMERA_DISABLED = 3;
+    public static final int STATUS_ICON_MIC_DISABLED = 4;
+    public static final int STATUS_ICON_MIC_CAMERA_DISABLED = 5;
+    public static final int STATUS_ICON_PRIORITY_MODE_ON = 6;
 
     private final Map<Integer, View> mStatusIcons = new HashMap<>();
 
@@ -80,6 +84,10 @@
                 fetchStatusIconForResId(R.id.dream_overlay_wifi_status));
         mStatusIcons.put(STATUS_ICON_ALARM_SET,
                 fetchStatusIconForResId(R.id.dream_overlay_alarm_set));
+        mStatusIcons.put(STATUS_ICON_CAMERA_DISABLED,
+                fetchStatusIconForResId(R.id.dream_overlay_camera_off));
+        mStatusIcons.put(STATUS_ICON_MIC_DISABLED,
+                fetchStatusIconForResId(R.id.dream_overlay_mic_off));
         mStatusIcons.put(STATUS_ICON_MIC_CAMERA_DISABLED,
                 fetchStatusIconForResId(R.id.dream_overlay_camera_mic_off));
         mStatusIcons.put(STATUS_ICON_NOTIFICATIONS,
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarViewController.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarViewController.java
index e878b22..55c1806 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarViewController.java
@@ -49,6 +49,7 @@
 
 import java.util.Locale;
 import java.util.Map;
+import java.util.Optional;
 import java.util.concurrent.Executor;
 
 import javax.inject.Inject;
@@ -65,7 +66,8 @@
     private final Resources mResources;
     private final DateFormatUtil mDateFormatUtil;
     private final IndividualSensorPrivacyController mSensorPrivacyController;
-    private final DreamOverlayNotificationCountProvider mDreamOverlayNotificationCountProvider;
+    private final Optional<DreamOverlayNotificationCountProvider>
+            mDreamOverlayNotificationCountProvider;
     private final ZenModeController mZenModeController;
     private final Executor mMainExecutor;
 
@@ -125,7 +127,7 @@
             NextAlarmController nextAlarmController,
             DateFormatUtil dateFormatUtil,
             IndividualSensorPrivacyController sensorPrivacyController,
-            DreamOverlayNotificationCountProvider dreamOverlayNotificationCountProvider,
+            Optional<DreamOverlayNotificationCountProvider> dreamOverlayNotificationCountProvider,
             ZenModeController zenModeController,
             StatusBarWindowStateController statusBarWindowStateController) {
         super(view);
@@ -161,7 +163,9 @@
         mZenModeController.addCallback(mZenModeCallback);
         updatePriorityModeStatusIcon();
 
-        mDreamOverlayNotificationCountProvider.addCallback(mNotificationCountCallback);
+        mDreamOverlayNotificationCountProvider.ifPresent(
+                provider -> provider.addCallback(mNotificationCountCallback));
+
         mTouchInsetSession.addViewToTracking(mView);
     }
 
@@ -171,7 +175,8 @@
         mSensorPrivacyController.removeCallback(mSensorCallback);
         mNextAlarmController.removeCallback(mNextAlarmCallback);
         mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
-        mDreamOverlayNotificationCountProvider.removeCallback(mNotificationCountCallback);
+        mDreamOverlayNotificationCountProvider.ifPresent(
+                provider -> provider.removeCallback(mNotificationCountCallback));
         mTouchInsetSession.clear();
 
         mIsAttached = false;
@@ -209,6 +214,13 @@
                 .isSensorBlocked(SensorPrivacyManager.Sensors.MICROPHONE);
         final boolean cameraBlocked = mSensorPrivacyController
                 .isSensorBlocked(SensorPrivacyManager.Sensors.CAMERA);
+        @DreamOverlayStatusBarView.StatusIconType int iconType = Resources.ID_NULL;
+        showIcon(
+                DreamOverlayStatusBarView.STATUS_ICON_CAMERA_DISABLED,
+                !micBlocked && cameraBlocked);
+        showIcon(
+                DreamOverlayStatusBarView.STATUS_ICON_MIC_DISABLED,
+                micBlocked && !cameraBlocked);
         showIcon(
                 DreamOverlayStatusBarView.STATUS_ICON_MIC_CAMERA_DISABLED,
                 micBlocked && cameraBlocked);
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/SmartSpaceComplication.java b/packages/SystemUI/src/com/android/systemui/dreams/SmartSpaceComplication.java
deleted file mode 100644
index a83e006df..0000000
--- a/packages/SystemUI/src/com/android/systemui/dreams/SmartSpaceComplication.java
+++ /dev/null
@@ -1,137 +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.systemui.dreams;
-
-import android.content.Context;
-import android.os.Parcelable;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.FrameLayout;
-
-import com.android.systemui.CoreStartable;
-import com.android.systemui.dreams.complication.Complication;
-import com.android.systemui.dreams.complication.ComplicationLayoutParams;
-import com.android.systemui.dreams.complication.ComplicationViewModel;
-import com.android.systemui.dreams.smartspace.DreamsSmartspaceController;
-import com.android.systemui.plugins.BcSmartspaceDataPlugin;
-
-import java.util.List;
-
-import javax.inject.Inject;
-
-/**
- * {@link SmartSpaceComplication} embodies the SmartSpace view found on the lockscreen as a
- * {@link Complication}
- */
-public class SmartSpaceComplication implements Complication {
-    /**
-     * {@link CoreStartable} responsbile for registering {@link SmartSpaceComplication} with
-     * SystemUI.
-     */
-    public static class Registrant extends CoreStartable {
-        private final DreamsSmartspaceController mSmartSpaceController;
-        private final DreamOverlayStateController mDreamOverlayStateController;
-        private final SmartSpaceComplication mComplication;
-
-        private final BcSmartspaceDataPlugin.SmartspaceTargetListener mSmartspaceListener =
-                new BcSmartspaceDataPlugin.SmartspaceTargetListener() {
-            @Override
-            public void onSmartspaceTargetsUpdated(List<? extends Parcelable> targets) {
-                if (!targets.isEmpty()) {
-                    mDreamOverlayStateController.addComplication(mComplication);
-                } else {
-                    mDreamOverlayStateController.removeComplication(mComplication);
-                }
-            }
-        };
-
-        /**
-         * Default constructor for {@link SmartSpaceComplication}.
-         */
-        @Inject
-        public Registrant(Context context,
-                DreamOverlayStateController dreamOverlayStateController,
-                SmartSpaceComplication smartSpaceComplication,
-                DreamsSmartspaceController smartSpaceController) {
-            super(context);
-            mDreamOverlayStateController = dreamOverlayStateController;
-            mComplication = smartSpaceComplication;
-            mSmartSpaceController = smartSpaceController;
-        }
-
-        @Override
-        public void start() {
-            mDreamOverlayStateController.addCallback(new DreamOverlayStateController.Callback() {
-                @Override
-                public void onStateChanged() {
-                    if (mDreamOverlayStateController.isOverlayActive()) {
-                        mSmartSpaceController.addListener(mSmartspaceListener);
-                    } else {
-                        mSmartSpaceController.removeListener(mSmartspaceListener);
-                    }
-                }
-            });
-        }
-    }
-
-    private static class SmartSpaceComplicationViewHolder implements ViewHolder {
-        private static final int SMARTSPACE_COMPLICATION_WEIGHT = 10;
-        private final DreamsSmartspaceController mSmartSpaceController;
-        private final Context mContext;
-
-        protected SmartSpaceComplicationViewHolder(
-                Context context,
-                DreamsSmartspaceController smartSpaceController) {
-            mSmartSpaceController = smartSpaceController;
-            mContext = context;
-        }
-
-        @Override
-        public View getView() {
-            final FrameLayout smartSpaceContainer = new FrameLayout(mContext);
-            smartSpaceContainer.addView(
-                    mSmartSpaceController.buildAndConnectView(smartSpaceContainer),
-                    new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
-                            ViewGroup.LayoutParams.WRAP_CONTENT));
-
-            return smartSpaceContainer;
-        }
-
-        @Override
-        public ComplicationLayoutParams getLayoutParams() {
-            return new ComplicationLayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT,
-                    ComplicationLayoutParams.POSITION_TOP | ComplicationLayoutParams.POSITION_START,
-                    ComplicationLayoutParams.DIRECTION_DOWN,
-                    SMARTSPACE_COMPLICATION_WEIGHT, true);
-        }
-    }
-
-    private final DreamsSmartspaceController mSmartSpaceController;
-    private final Context mContext;
-
-    @Inject
-    public SmartSpaceComplication(Context context,
-            DreamsSmartspaceController smartSpaceController) {
-        mContext = context;
-        mSmartSpaceController = smartSpaceController;
-    }
-
-    @Override
-    public ViewHolder createView(ComplicationViewModel model) {
-        return new SmartSpaceComplicationViewHolder(mContext, mSmartSpaceController);
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/Complication.java b/packages/SystemUI/src/com/android/systemui/dreams/complication/Complication.java
index 51bd311..29bb2f4 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/Complication.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/complication/Complication.java
@@ -162,7 +162,9 @@
             COMPLICATION_TYPE_DATE,
             COMPLICATION_TYPE_WEATHER,
             COMPLICATION_TYPE_AIR_QUALITY,
-            COMPLICATION_TYPE_CAST_INFO
+            COMPLICATION_TYPE_CAST_INFO,
+            COMPLICATION_TYPE_HOME_CONTROLS,
+            COMPLICATION_TYPE_SMARTSPACE
     })
     @Retention(RetentionPolicy.SOURCE)
     @interface ComplicationType {}
@@ -173,6 +175,8 @@
     int COMPLICATION_TYPE_WEATHER = 1 << 2;
     int COMPLICATION_TYPE_AIR_QUALITY = 1 << 3;
     int COMPLICATION_TYPE_CAST_INFO = 1 << 4;
+    int COMPLICATION_TYPE_HOME_CONTROLS = 1 << 5;
+    int COMPLICATION_TYPE_SMARTSPACE = 1 << 6;
 
     /**
      * The {@link Host} interface specifies a way a {@link Complication} to communicate with its
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationHostViewController.java b/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationHostViewController.java
index 4c0154f..fd6cfc0 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationHostViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationHostViewController.java
@@ -21,6 +21,7 @@
 
 import android.graphics.Rect;
 import android.graphics.Region;
+import android.os.Debug;
 import android.util.Log;
 import android.view.View;
 
@@ -44,7 +45,8 @@
  * a {@link ComplicationLayoutEngine}.
  */
 public class ComplicationHostViewController extends ViewController<ConstraintLayout> {
-    public static final String TAG = "ComplicationHostViewController";
+    private static final String TAG = "ComplicationHostVwCtrl";
+    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
     private final ComplicationLayoutEngine mLayoutEngine;
     private final LifecycleOwner mLifecycleOwner;
@@ -90,6 +92,11 @@
     }
 
     private void updateComplications(Collection<ComplicationViewModel> complications) {
+        if (DEBUG) {
+            Log.d(TAG, "updateComplications called. Callers = " + Debug.getCallers(25));
+            Log.d(TAG, "    mComplications = " + mComplications.toString());
+            Log.d(TAG, "    complications = " + complications.toString());
+        }
         final Collection<ComplicationId> ids = complications.stream()
                 .map(complicationViewModel -> complicationViewModel.getId())
                 .collect(Collectors.toSet());
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationLayoutEngine.java b/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationLayoutEngine.java
index ded61a8..9cd149b 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationLayoutEngine.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationLayoutEngine.java
@@ -54,7 +54,7 @@
  */
 @DreamOverlayComponent.DreamOverlayScope
 public class ComplicationLayoutEngine implements Complication.VisibilityController {
-    public static final String TAG = "ComplicationLayoutEngine";
+    public static final String TAG = "ComplicationLayoutEng";
 
     /**
      * {@link ViewEntry} is an internal container, capturing information necessary for working with
@@ -529,7 +529,7 @@
      */
     public void addComplication(ComplicationId id, View view,
             ComplicationLayoutParams lp, @Complication.Category int category) {
-        Log.d(TAG, "engine: " + this + " addComplication");
+        Log.d(TAG, "@" + Integer.toHexString(this.hashCode()) + " addComplication: " + id);
 
         // If the complication is present, remove.
         if (mEntries.containsKey(id)) {
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationUtils.java b/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationUtils.java
index a4a0075..d5db63d 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationUtils.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationUtils.java
@@ -19,7 +19,9 @@
 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_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;
 
@@ -48,6 +50,10 @@
                 return COMPLICATION_TYPE_AIR_QUALITY;
             case DreamBackend.COMPLICATION_TYPE_CAST_INFO:
                 return COMPLICATION_TYPE_CAST_INFO;
+            case DreamBackend.COMPLICATION_TYPE_HOME_CONTROLS:
+                return COMPLICATION_TYPE_HOME_CONTROLS;
+            case DreamBackend.COMPLICATION_TYPE_SMARTSPACE:
+                return COMPLICATION_TYPE_SMARTSPACE;
             default:
                 return COMPLICATION_TYPE_NONE;
         }
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationViewModel.java b/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationViewModel.java
index f023937..00cf58c 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationViewModel.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/complication/ComplicationViewModel.java
@@ -64,4 +64,9 @@
     public void exitDream() {
         mHost.requestExitDream();
     }
+
+    @Override
+    public String toString() {
+        return mId + "=" + mComplication.toString();
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/DreamClockDateComplication.java b/packages/SystemUI/src/com/android/systemui/dreams/complication/DreamClockDateComplication.java
deleted file mode 100644
index 1ca06b2..0000000
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/DreamClockDateComplication.java
+++ /dev/null
@@ -1,111 +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.systemui.dreams.complication;
-
-import static com.android.systemui.dreams.complication.dagger.DreamClockDateComplicationModule.DREAM_CLOCK_DATE_COMPLICATION_LAYOUT_PARAMS;
-import static com.android.systemui.dreams.complication.dagger.DreamClockDateComplicationModule.DREAM_CLOCK_DATE_COMPLICATION_VIEW;
-
-import android.content.Context;
-import android.view.View;
-
-import com.android.systemui.CoreStartable;
-import com.android.systemui.dreams.DreamOverlayStateController;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Provider;
-
-/**
- * Clock Date Complication that produce Clock Date view holder.
- */
-public class DreamClockDateComplication implements Complication {
-    private final Provider<DreamClockDateViewHolder> mDreamClockDateViewHolderProvider;
-
-    /**
-     * Default constructor for {@link DreamClockDateComplication}.
-     */
-    @Inject
-    public DreamClockDateComplication(
-            Provider<DreamClockDateViewHolder> dreamClockDateViewHolderProvider) {
-        mDreamClockDateViewHolderProvider = dreamClockDateViewHolderProvider;
-    }
-
-    @Override
-    public int getRequiredTypeAvailability() {
-        return COMPLICATION_TYPE_DATE;
-    }
-
-    /**
-     * Create {@link DreamClockDateViewHolder}.
-     */
-    @Override
-    public ViewHolder createView(ComplicationViewModel model) {
-        return mDreamClockDateViewHolderProvider.get();
-    }
-
-    /**
-     * {@link CoreStartable} responsible for registering {@link DreamClockDateComplication} with
-     * SystemUI.
-     */
-    public static class Registrant extends CoreStartable {
-        private final DreamOverlayStateController mDreamOverlayStateController;
-        private final DreamClockDateComplication mComplication;
-
-        /**
-         * Default constructor to register {@link DreamClockDateComplication}.
-         */
-        @Inject
-        public Registrant(Context context,
-                DreamOverlayStateController dreamOverlayStateController,
-                DreamClockDateComplication dreamClockDateComplication) {
-            super(context);
-            mDreamOverlayStateController = dreamOverlayStateController;
-            mComplication = dreamClockDateComplication;
-        }
-
-        @Override
-        public void start() {
-            mDreamOverlayStateController.addComplication(mComplication);
-        }
-    }
-
-    /**
-     * {@link ViewHolder} to contain value/logic associated with {@link DreamClockDateComplication}.
-     */
-    public static class DreamClockDateViewHolder implements ViewHolder {
-        private final View mView;
-        private final ComplicationLayoutParams mLayoutParams;
-
-        @Inject
-        DreamClockDateViewHolder(@Named(DREAM_CLOCK_DATE_COMPLICATION_VIEW) View view,
-                @Named(DREAM_CLOCK_DATE_COMPLICATION_LAYOUT_PARAMS)
-                        ComplicationLayoutParams layoutParams) {
-            mView = view;
-            mLayoutParams = layoutParams;
-        }
-
-        @Override
-        public View getView() {
-            return mView;
-        }
-
-        @Override
-        public ComplicationLayoutParams getLayoutParams() {
-            return mLayoutParams;
-        }
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/DreamClockTimeComplication.java b/packages/SystemUI/src/com/android/systemui/dreams/complication/DreamClockTimeComplication.java
index 7f67ecd..675a2f4 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/DreamClockTimeComplication.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/complication/DreamClockTimeComplication.java
@@ -16,8 +16,8 @@
 
 package com.android.systemui.dreams.complication;
 
-import static com.android.systemui.dreams.complication.dagger.DreamClockTimeComplicationModule.DREAM_CLOCK_TIME_COMPLICATION_LAYOUT_PARAMS;
 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 android.content.Context;
 import android.view.View;
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/DreamHomeControlsComplication.java b/packages/SystemUI/src/com/android/systemui/dreams/complication/DreamHomeControlsComplication.java
new file mode 100644
index 0000000..1c72e49
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/dreams/complication/DreamHomeControlsComplication.java
@@ -0,0 +1,205 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.dreams.complication;
+
+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 android.content.Context;
+import android.content.Intent;
+import android.util.Log;
+import android.view.View;
+import android.widget.ImageView;
+
+import com.android.systemui.CoreStartable;
+import com.android.systemui.animation.ActivityLaunchAnimator;
+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.util.ViewController;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+/**
+ * A dream complication that shows a home controls chip to launch device controls (to control
+ * devices at home like lights and thermostats).
+ */
+public class DreamHomeControlsComplication implements Complication {
+    private final DreamHomeControlsComplicationComponent.Factory mComponentFactory;
+
+    @Inject
+    public DreamHomeControlsComplication(
+            DreamHomeControlsComplicationComponent.Factory componentFactory) {
+        mComponentFactory = componentFactory;
+    }
+
+    @Override
+    public ViewHolder createView(ComplicationViewModel model) {
+        return mComponentFactory.create().getViewHolder();
+    }
+
+    @Override
+    public int getRequiredTypeAvailability() {
+        return COMPLICATION_TYPE_HOME_CONTROLS;
+    }
+
+    /**
+     * {@link CoreStartable} for registering the complication with SystemUI on startup.
+     */
+    public static class Registrant extends CoreStartable {
+        private final DreamHomeControlsComplication mComplication;
+        private final DreamOverlayStateController mDreamOverlayStateController;
+        private final ControlsComponent mControlsComponent;
+
+        private boolean mControlServicesAvailable = false;
+
+        // Callback for when the home controls service availability changes.
+        private final ControlsListingController.ControlsListingCallback mControlsCallback =
+                serviceInfos -> {
+                    boolean available = !serviceInfos.isEmpty();
+
+                    if (available != mControlServicesAvailable) {
+                        mControlServicesAvailable = available;
+                        updateComplicationAvailability();
+                    }
+                };
+
+        @Inject
+        public Registrant(Context context, DreamHomeControlsComplication complication,
+                DreamOverlayStateController dreamOverlayStateController,
+                ControlsComponent controlsComponent) {
+            super(context);
+
+            mComplication = complication;
+            mControlsComponent = controlsComponent;
+            mDreamOverlayStateController = dreamOverlayStateController;
+        }
+
+        @Override
+        public void start() {
+            mControlsComponent.getControlsListingController().ifPresent(
+                    c -> c.addCallback(mControlsCallback));
+        }
+
+        private void updateComplicationAvailability() {
+            final boolean hasFavorites = mControlsComponent.getControlsController()
+                    .map(c -> !c.getFavorites().isEmpty())
+                    .orElse(false);
+            if (!hasFavorites || !mControlServicesAvailable
+                    || mControlsComponent.getVisibility() == UNAVAILABLE) {
+                mDreamOverlayStateController.removeComplication(mComplication);
+            } else {
+                mDreamOverlayStateController.addComplication(mComplication);
+            }
+        }
+    }
+
+    /**
+     * Contains values/logic associated with the dream complication view.
+     */
+    public static class DreamHomeControlsChipViewHolder implements ViewHolder {
+        private final View mView;
+        private final ComplicationLayoutParams mLayoutParams;
+        private final DreamHomeControlsChipViewController mViewController;
+
+        @Inject
+        DreamHomeControlsChipViewHolder(
+                DreamHomeControlsChipViewController dreamHomeControlsChipViewController,
+                @Named(DREAM_HOME_CONTROLS_CHIP_VIEW) ImageView view,
+                @Named(DREAM_HOME_CONTROLS_CHIP_LAYOUT_PARAMS) ComplicationLayoutParams layoutParams
+        ) {
+            mView = view;
+            mLayoutParams = layoutParams;
+            mViewController = dreamHomeControlsChipViewController;
+            mViewController.init();
+        }
+
+        @Override
+        public View getView() {
+            return mView;
+        }
+
+        @Override
+        public ComplicationLayoutParams getLayoutParams() {
+            return mLayoutParams;
+        }
+    }
+
+    /**
+     * Controls behavior of the dream complication.
+     */
+    static class DreamHomeControlsChipViewController extends ViewController<ImageView> {
+        private static final boolean DEBUG = false;
+        private static final String TAG = "DreamHomeControlsCtrl";
+
+        private final ActivityStarter mActivityStarter;
+        private final Context mContext;
+        private final ControlsComponent mControlsComponent;
+
+        @Inject
+        DreamHomeControlsChipViewController(
+                @Named(DREAM_HOME_CONTROLS_CHIP_VIEW) ImageView view,
+                ActivityStarter activityStarter,
+                Context context,
+                ControlsComponent controlsComponent) {
+            super(view);
+
+            mActivityStarter = activityStarter;
+            mContext = context;
+            mControlsComponent = controlsComponent;
+        }
+
+        @Override
+        protected void onViewAttached() {
+            mView.setImageResource(mControlsComponent.getTileImageId());
+            mView.setContentDescription(mContext.getString(mControlsComponent.getTileTitleId()));
+            mView.setOnClickListener(this::onClickHomeControls);
+        }
+
+        @Override
+        protected void onViewDetached() {}
+
+        private void onClickHomeControls(View v) {
+            if (DEBUG) Log.d(TAG, "home controls complication tapped");
+
+            final Intent intent = new Intent(mContext, ControlsActivity.class)
+                    .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK)
+                    .putExtra(ControlsUiController.EXTRA_ANIMATE, true);
+
+            final ActivityLaunchAnimator.Controller controller =
+                    v != null ? ActivityLaunchAnimator.Controller.fromView(v, null /* cujType */)
+                            : null;
+            if (mControlsComponent.getVisibility() == AVAILABLE) {
+                // Controls can be made visible.
+                mActivityStarter.startActivity(intent, true /* dismissShade */, controller,
+                        true /* showOverLockscreenWhenLocked */);
+            } else if (mControlsComponent.getVisibility() == AVAILABLE_AFTER_UNLOCK) {
+                // Controls can be made visible only after device unlock.
+                mActivityStarter.postStartActivityDismissingKeyguard(intent, 0 /* delay */,
+                        controller);
+            }
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/DreamWeatherComplication.java b/packages/SystemUI/src/com/android/systemui/dreams/complication/DreamWeatherComplication.java
deleted file mode 100644
index f5c5a43..0000000
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/DreamWeatherComplication.java
+++ /dev/null
@@ -1,185 +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.systemui.dreams.complication;
-
-import static com.android.systemui.dreams.complication.dagger.DreamWeatherComplicationComponent.DreamWeatherComplicationModule.DREAM_WEATHER_COMPLICATION_LAYOUT_PARAMS;
-import static com.android.systemui.dreams.complication.dagger.DreamWeatherComplicationComponent.DreamWeatherComplicationModule.DREAM_WEATHER_COMPLICATION_VIEW;
-
-import android.app.smartspace.SmartspaceAction;
-import android.app.smartspace.SmartspaceTarget;
-import android.content.Context;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.Icon;
-import android.text.TextUtils;
-import android.widget.TextView;
-
-import com.android.systemui.CoreStartable;
-import com.android.systemui.R;
-import com.android.systemui.dreams.DreamOverlayStateController;
-import com.android.systemui.dreams.complication.dagger.DreamWeatherComplicationComponent;
-import com.android.systemui.plugins.BcSmartspaceDataPlugin.SmartspaceTargetListener;
-import com.android.systemui.statusbar.lockscreen.LockscreenSmartspaceController;
-import com.android.systemui.util.ViewController;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-
-/**
- * Weather Complication that produce Weather view holder.
- */
-public class DreamWeatherComplication implements Complication {
-    DreamWeatherComplicationComponent.Factory mComponentFactory;
-
-    /**
-     * Default constructor for {@link DreamWeatherComplication}.
-     */
-    @Inject
-    public DreamWeatherComplication(
-            DreamWeatherComplicationComponent.Factory componentFactory) {
-        mComponentFactory = componentFactory;
-    }
-
-    @Override
-    public int getRequiredTypeAvailability() {
-        return COMPLICATION_TYPE_WEATHER;
-    }
-
-    /**
-     * Create {@link DreamWeatherViewHolder}.
-     */
-    @Override
-    public ViewHolder createView(ComplicationViewModel model) {
-        return mComponentFactory.create().getViewHolder();
-    }
-
-    /**
-     * {@link CoreStartable} for registering {@link DreamWeatherComplication} with SystemUI.
-     */
-    public static class Registrant extends CoreStartable {
-        private final LockscreenSmartspaceController mSmartSpaceController;
-        private final DreamOverlayStateController mDreamOverlayStateController;
-        private final DreamWeatherComplication mComplication;
-
-        /**
-         * Default constructor to register {@link DreamWeatherComplication}.
-         */
-        @Inject
-        public Registrant(Context context,
-                LockscreenSmartspaceController smartspaceController,
-                DreamOverlayStateController dreamOverlayStateController,
-                DreamWeatherComplication dreamWeatherComplication) {
-            super(context);
-            mSmartSpaceController = smartspaceController;
-            mDreamOverlayStateController = dreamOverlayStateController;
-            mComplication = dreamWeatherComplication;
-        }
-
-        @Override
-        public void start() {
-            if (mSmartSpaceController.isEnabled()) {
-                mDreamOverlayStateController.addComplication(mComplication);
-            }
-        }
-    }
-
-    /**
-     * ViewHolder to contain value/logic associated with a Weather Complication View.
-     */
-    public static class DreamWeatherViewHolder implements ViewHolder {
-        private final TextView mView;
-        private final ComplicationLayoutParams mLayoutParams;
-        private final DreamWeatherViewController mViewController;
-
-        @Inject
-        DreamWeatherViewHolder(
-                @Named(DREAM_WEATHER_COMPLICATION_VIEW) TextView view,
-                DreamWeatherViewController controller,
-                @Named(DREAM_WEATHER_COMPLICATION_LAYOUT_PARAMS)
-                        ComplicationLayoutParams layoutParams) {
-            mView = view;
-            mLayoutParams = layoutParams;
-            mViewController = controller;
-            mViewController.init();
-        }
-
-        @Override
-        public TextView getView() {
-            return mView;
-        }
-
-        @Override
-        public ComplicationLayoutParams getLayoutParams() {
-            return mLayoutParams;
-        }
-    }
-
-    /**
-     * ViewController to contain value/logic associated with a Weather Complication View.
-     */
-    static class DreamWeatherViewController extends ViewController<TextView> {
-        private final LockscreenSmartspaceController mSmartSpaceController;
-        private SmartspaceTargetListener mSmartspaceTargetListener;
-
-        @Inject
-        DreamWeatherViewController(
-                @Named(DREAM_WEATHER_COMPLICATION_VIEW) TextView view,
-                LockscreenSmartspaceController smartspaceController
-        ) {
-            super(view);
-            mSmartSpaceController = smartspaceController;
-        }
-
-        @Override
-        protected void onViewAttached() {
-            mSmartspaceTargetListener = targets -> targets.forEach(
-                    t -> {
-                        if (t instanceof SmartspaceTarget
-                                && ((SmartspaceTarget) t).getFeatureType()
-                                == SmartspaceTarget.FEATURE_WEATHER) {
-                            final SmartspaceTarget target = (SmartspaceTarget) t;
-                            final SmartspaceAction headerAction = target.getHeaderAction();
-                            if (headerAction == null || TextUtils.isEmpty(
-                                    headerAction.getTitle())) {
-                                return;
-                            }
-
-                            String temperature = headerAction.getTitle().toString();
-                            mView.setText(temperature);
-                            final Icon icon = headerAction.getIcon();
-                            if (icon != null) {
-                                final int iconSize =
-                                        getResources().getDimensionPixelSize(
-                                                R.dimen.smart_action_button_icon_size);
-                                final Drawable iconDrawable = icon.loadDrawable(getContext());
-                                iconDrawable.setBounds(0, 0, iconSize, iconSize);
-                                mView.setCompoundDrawables(iconDrawable, null, null, null);
-                                mView.setCompoundDrawablePadding(
-                                        getResources().getDimensionPixelSize(
-                                                R.dimen.smart_action_button_icon_padding));
-
-                            }
-                        }
-                    });
-            mSmartSpaceController.addListener(mSmartspaceTargetListener);
-        }
-
-        @Override
-        protected void onViewDetached() {
-            mSmartSpaceController.removeListener(mSmartspaceTargetListener);
-        }
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/SmartSpaceComplication.java b/packages/SystemUI/src/com/android/systemui/dreams/complication/SmartSpaceComplication.java
new file mode 100644
index 0000000..567bdbc
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/dreams/complication/SmartSpaceComplication.java
@@ -0,0 +1,147 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.dreams.complication;
+
+import static com.android.systemui.dreams.complication.dagger.RegisteredComplicationsModule.DREAM_SMARTSPACE_LAYOUT_PARAMS;
+
+import android.content.Context;
+import android.os.Parcelable;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+
+import com.android.systemui.CoreStartable;
+import com.android.systemui.dreams.DreamOverlayStateController;
+import com.android.systemui.dreams.smartspace.DreamSmartspaceController;
+import com.android.systemui.plugins.BcSmartspaceDataPlugin;
+
+import java.util.List;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Provider;
+
+/**
+ * {@link SmartSpaceComplication} embodies the SmartSpace view found on the lockscreen as a
+ * {@link Complication}
+ */
+public class SmartSpaceComplication implements Complication {
+    private final Provider<SmartSpaceComplicationViewHolder> mViewHolderProvider;
+
+    @Inject
+    public SmartSpaceComplication(Provider<SmartSpaceComplicationViewHolder> viewHolderProvider) {
+        mViewHolderProvider = viewHolderProvider;
+    }
+
+    @Override
+    public ViewHolder createView(ComplicationViewModel model) {
+        return mViewHolderProvider.get();
+    }
+
+    @Override
+    public int getRequiredTypeAvailability() {
+        return COMPLICATION_TYPE_SMARTSPACE;
+    }
+
+    /**
+     * {@link CoreStartable} responsbile for registering {@link SmartSpaceComplication} with
+     * SystemUI.
+     */
+    public static class Registrant extends CoreStartable {
+        private final DreamSmartspaceController mSmartSpaceController;
+        private final DreamOverlayStateController mDreamOverlayStateController;
+        private final SmartSpaceComplication mComplication;
+
+        private final BcSmartspaceDataPlugin.SmartspaceTargetListener mSmartspaceListener =
+                new BcSmartspaceDataPlugin.SmartspaceTargetListener() {
+            @Override
+            public void onSmartspaceTargetsUpdated(List<? extends Parcelable> targets) {
+                if (!targets.isEmpty()) {
+                    mDreamOverlayStateController.addComplication(mComplication);
+                } else {
+                    mDreamOverlayStateController.removeComplication(mComplication);
+                }
+            }
+        };
+
+        /**
+         * Default constructor for {@link SmartSpaceComplication}.
+         */
+        @Inject
+        public Registrant(Context context,
+                DreamOverlayStateController dreamOverlayStateController,
+                SmartSpaceComplication smartSpaceComplication,
+                DreamSmartspaceController smartSpaceController) {
+            super(context);
+            mDreamOverlayStateController = dreamOverlayStateController;
+            mComplication = smartSpaceComplication;
+            mSmartSpaceController = smartSpaceController;
+        }
+
+        @Override
+        public void start() {
+            mDreamOverlayStateController.addCallback(new DreamOverlayStateController.Callback() {
+                @Override
+                public void onStateChanged() {
+                    if (mDreamOverlayStateController.isOverlayActive()) {
+                        mSmartSpaceController.addListener(mSmartspaceListener);
+                    } else {
+                        mSmartSpaceController.removeListener(mSmartspaceListener);
+                        mDreamOverlayStateController.removeComplication(mComplication);
+                    }
+                }
+            });
+        }
+    }
+
+    static class SmartSpaceComplicationViewHolder implements ViewHolder {
+        private View mView = null;
+        private final DreamSmartspaceController mSmartSpaceController;
+        private final Context mContext;
+        private final ComplicationLayoutParams mLayoutParams;
+
+        @Inject
+        protected SmartSpaceComplicationViewHolder(
+                Context context,
+                DreamSmartspaceController smartSpaceController,
+                @Named(DREAM_SMARTSPACE_LAYOUT_PARAMS) ComplicationLayoutParams layoutParams) {
+            mSmartSpaceController = smartSpaceController;
+            mContext = context;
+            mLayoutParams = layoutParams;
+        }
+
+        @Override
+        public View getView() {
+            if (mView != null) {
+                return mView;
+            }
+            final FrameLayout smartSpaceContainer = new FrameLayout(mContext);
+            smartSpaceContainer.addView(
+                    mSmartSpaceController.buildAndConnectView(smartSpaceContainer),
+                    new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
+                            ViewGroup.LayoutParams.WRAP_CONTENT));
+
+            mView = smartSpaceContainer;
+            return smartSpaceContainer;
+        }
+
+        @Override
+        public ComplicationLayoutParams getLayoutParams() {
+            return mLayoutParams;
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/DreamClockDateComplicationModule.java b/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/DreamClockDateComplicationModule.java
deleted file mode 100644
index eb2fc5d..0000000
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/DreamClockDateComplicationModule.java
+++ /dev/null
@@ -1,71 +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.systemui.dreams.complication.dagger;
-
-
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.android.internal.util.Preconditions;
-import com.android.systemui.R;
-import com.android.systemui.dreams.complication.ComplicationLayoutParams;
-import com.android.systemui.dreams.complication.DreamClockDateComplication;
-
-import javax.inject.Named;
-
-import dagger.Module;
-import dagger.Provides;
-
-/**
- * Module for providing {@link DreamClockDateComplication}.
- */
-@Module
-public interface DreamClockDateComplicationModule {
-    String DREAM_CLOCK_DATE_COMPLICATION_VIEW = "clock_date_complication_view";
-    String DREAM_CLOCK_DATE_COMPLICATION_LAYOUT_PARAMS =
-            "clock_date_complication_layout_params";
-    // Order weight of insert into parent container
-    //TODO(b/217199227): move to a single location.
-    int INSERT_ORDER_WEIGHT = 2;
-
-    /**
-     * Provides the complication view.
-     */
-    @Provides
-    @Named(DREAM_CLOCK_DATE_COMPLICATION_VIEW)
-    static View provideComplicationView(LayoutInflater layoutInflater) {
-        return Preconditions.checkNotNull(
-                layoutInflater.inflate(R.layout.dream_overlay_complication_clock_date,
-                        null, false),
-                "R.layout.dream_overlay_complication_clock_date did not properly inflated");
-    }
-
-    /**
-     * Provides the layout parameters for the complication view.
-     */
-    @Provides
-    @Named(DREAM_CLOCK_DATE_COMPLICATION_LAYOUT_PARAMS)
-    static ComplicationLayoutParams provideLayoutParams() {
-        return new ComplicationLayoutParams(0,
-                ViewGroup.LayoutParams.WRAP_CONTENT,
-                ComplicationLayoutParams.POSITION_BOTTOM
-                        | ComplicationLayoutParams.POSITION_START,
-                ComplicationLayoutParams.DIRECTION_END,
-                INSERT_ORDER_WEIGHT);
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/DreamClockTimeComplicationModule.java b/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/DreamClockTimeComplicationModule.java
index 3ad7d3d..5250d44 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/DreamClockTimeComplicationModule.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/DreamClockTimeComplicationModule.java
@@ -19,12 +19,10 @@
 
 import android.view.LayoutInflater;
 import android.view.View;
-import android.view.ViewGroup;
 import android.widget.TextClock;
 
 import com.android.internal.util.Preconditions;
 import com.android.systemui.R;
-import com.android.systemui.dreams.complication.ComplicationLayoutParams;
 import com.android.systemui.dreams.complication.DreamClockTimeComplication;
 
 import javax.inject.Named;
@@ -38,11 +36,6 @@
 @Module
 public interface DreamClockTimeComplicationModule {
     String DREAM_CLOCK_TIME_COMPLICATION_VIEW = "clock_time_complication_view";
-    String DREAM_CLOCK_TIME_COMPLICATION_LAYOUT_PARAMS =
-            "clock_time_complication_layout_params";
-    // Order weight of insert into parent container
-    //TODO(b/217199227): move to a single location.
-    int INSERT_ORDER_WEIGHT = 0;
     String TAG_WEIGHT = "'wght' ";
     int WEIGHT = 200;
 
@@ -59,18 +52,4 @@
         view.setFontVariationSettings(TAG_WEIGHT + WEIGHT);
         return view;
     }
-
-    /**
-     * Provides the layout parameters for the complication view.
-     */
-    @Provides
-    @Named(DREAM_CLOCK_TIME_COMPLICATION_LAYOUT_PARAMS)
-    static ComplicationLayoutParams provideLayoutParams() {
-        return new ComplicationLayoutParams(0,
-                ViewGroup.LayoutParams.WRAP_CONTENT,
-                ComplicationLayoutParams.POSITION_BOTTOM
-                        | ComplicationLayoutParams.POSITION_START,
-                ComplicationLayoutParams.DIRECTION_UP,
-                INSERT_ORDER_WEIGHT);
-    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/DreamHomeControlsComplicationComponent.java b/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/DreamHomeControlsComplicationComponent.java
new file mode 100644
index 0000000..cf05d2d
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/DreamHomeControlsComplicationComponent.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.dreams.complication.dagger;
+
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import android.view.LayoutInflater;
+import android.widget.ImageView;
+
+import com.android.systemui.R;
+import com.android.systemui.dreams.complication.DreamHomeControlsComplication;
+
+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;
+
+/**
+ * Responsible for generating dependencies for the {@link DreamHomeControlsComplication}.
+ */
+@Subcomponent(modules = DreamHomeControlsComplicationComponent.DreamHomeControlsModule.class)
+@DreamHomeControlsComplicationComponent.DreamHomeControlsComplicationScope
+public interface DreamHomeControlsComplicationComponent {
+    /**
+     * Creates a view holder for the home controls complication.
+     */
+    DreamHomeControlsComplication.DreamHomeControlsChipViewHolder getViewHolder();
+
+    /**
+     * Scope of the home controls complication.
+     */
+    @Documented
+    @Retention(RUNTIME)
+    @Scope
+    @interface DreamHomeControlsComplicationScope {}
+
+    /**
+     * Factory that generates a {@link DreamHomeControlsComplicationComponent}.
+     */
+    @Subcomponent.Factory
+    interface Factory {
+        DreamHomeControlsComplicationComponent create();
+    }
+
+    /**
+     * Scoped injected values for the {@link DreamHomeControlsComplicationComponent}.
+     */
+    @Module
+    interface DreamHomeControlsModule {
+        String DREAM_HOME_CONTROLS_CHIP_VIEW = "dream_home_controls_chip_view";
+
+        /**
+         * Provides the dream home controls chip view.
+         */
+        @Provides
+        @DreamHomeControlsComplicationScope
+        @Named(DREAM_HOME_CONTROLS_CHIP_VIEW)
+        static ImageView provideHomeControlsChipView(LayoutInflater layoutInflater) {
+            return (ImageView) layoutInflater.inflate(R.layout.dream_overlay_home_controls_chip,
+                    null, false);
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/DreamWeatherComplicationComponent.java b/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/DreamWeatherComplicationComponent.java
deleted file mode 100644
index 536f3dc..0000000
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/DreamWeatherComplicationComponent.java
+++ /dev/null
@@ -1,110 +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.systemui.dreams.complication.dagger;
-
-
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-import android.view.LayoutInflater;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import com.android.internal.util.Preconditions;
-import com.android.systemui.R;
-import com.android.systemui.dreams.complication.ComplicationLayoutParams;
-import com.android.systemui.dreams.complication.DreamWeatherComplication.DreamWeatherViewHolder;
-
-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 DreamWeatherComplicationComponent} is responsible for generating dependencies surrounding
- * the
- * Clock Date {@link com.android.systemui.dreams.complication.Complication}, such as the layout
- * details.
- */
-@Subcomponent(modules = {
-        DreamWeatherComplicationComponent.DreamWeatherComplicationModule.class,
-})
-@DreamWeatherComplicationComponent.DreamWeatherComplicationScope
-public interface DreamWeatherComplicationComponent {
-    /**
-     * Creates {@link DreamWeatherViewHolder}.
-     */
-    DreamWeatherViewHolder getViewHolder();
-
-    @Documented
-    @Retention(RUNTIME)
-    @Scope
-    @interface DreamWeatherComplicationScope {
-    }
-
-    /**
-     * Generates {@link DreamWeatherComplicationComponent}.
-     */
-    @Subcomponent.Factory
-    interface Factory {
-        DreamWeatherComplicationComponent create();
-    }
-
-    /**
-     * Scoped values for {@link DreamWeatherComplicationComponent}.
-     */
-    @Module
-    interface DreamWeatherComplicationModule {
-        String DREAM_WEATHER_COMPLICATION_VIEW = "weather_complication_view";
-        String DREAM_WEATHER_COMPLICATION_LAYOUT_PARAMS =
-                "weather_complication_layout_params";
-        // Order weight of insert into parent container
-        int INSERT_ORDER_WEIGHT = 1;
-
-        /**
-         * Provides the complication view.
-         */
-        @Provides
-        @DreamWeatherComplicationScope
-        @Named(DREAM_WEATHER_COMPLICATION_VIEW)
-        static TextView provideComplicationView(LayoutInflater layoutInflater) {
-            return Preconditions.checkNotNull((TextView)
-                            layoutInflater.inflate(R.layout.dream_overlay_complication_weather,
-                                    null, false),
-                    "R.layout.dream_overlay_complication_weather did not properly inflated");
-        }
-
-        /**
-         * Provides the layout parameters for the complication view.
-         */
-        @Provides
-        @DreamWeatherComplicationScope
-        @Named(DREAM_WEATHER_COMPLICATION_LAYOUT_PARAMS)
-        static ComplicationLayoutParams provideLayoutParams() {
-            return new ComplicationLayoutParams(0,
-                    ViewGroup.LayoutParams.WRAP_CONTENT,
-                    ComplicationLayoutParams.POSITION_BOTTOM
-                            | ComplicationLayoutParams.POSITION_START,
-                    ComplicationLayoutParams.DIRECTION_END,
-                    INSERT_ORDER_WEIGHT);
-        }
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/RegisteredComplicationsModule.java b/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/RegisteredComplicationsModule.java
index 62a4140..eb07238 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/RegisteredComplicationsModule.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/complication/dagger/RegisteredComplicationsModule.java
@@ -16,20 +16,79 @@
 
 package com.android.systemui.dreams.complication.dagger;
 
+import android.content.res.Resources;
+import android.view.ViewGroup;
+
+import com.android.systemui.R;
 import com.android.systemui.dagger.SystemUIBinder;
+import com.android.systemui.dagger.qualifiers.Main;
+import com.android.systemui.dreams.complication.ComplicationLayoutParams;
+
+import javax.inject.Named;
 
 import dagger.Module;
+import dagger.Provides;
 
 /**
  * Module for all components with corresponding dream layer complications registered in
  * {@link SystemUIBinder}.
  */
 @Module(includes = {
-                DreamClockDateComplicationModule.class,
                 DreamClockTimeComplicationModule.class,
         },
         subcomponents = {
-                DreamWeatherComplicationComponent.class,
+                DreamHomeControlsComplicationComponent.class,
         })
 public interface RegisteredComplicationsModule {
+    String DREAM_CLOCK_TIME_COMPLICATION_LAYOUT_PARAMS = "time_complication_layout_params";
+    String DREAM_SMARTSPACE_LAYOUT_PARAMS = "smartspace_layout_params";
+    String DREAM_HOME_CONTROLS_CHIP_LAYOUT_PARAMS = "home_controls_chip_layout_params";
+
+    int DREAM_CLOCK_TIME_COMPLICATION_WEIGHT = 1;
+    int DREAM_SMARTSPACE_COMPLICATION_WEIGHT = 0;
+    int DREAM_HOME_CONTROLS_CHIP_COMPLICATION_WEIGHT = 1;
+
+    /**
+     * Provides layout parameters for the clock time complication.
+     */
+    @Provides
+    @Named(DREAM_CLOCK_TIME_COMPLICATION_LAYOUT_PARAMS)
+    static ComplicationLayoutParams provideClockTimeLayoutParams() {
+        return new ComplicationLayoutParams(0,
+            ViewGroup.LayoutParams.WRAP_CONTENT,
+            ComplicationLayoutParams.POSITION_TOP
+                    | ComplicationLayoutParams.POSITION_START,
+            ComplicationLayoutParams.DIRECTION_DOWN,
+            DREAM_CLOCK_TIME_COMPLICATION_WEIGHT);
+    }
+
+    /**
+     * Provides layout parameters for the home controls complication.
+     */
+    @Provides
+    @Named(DREAM_HOME_CONTROLS_CHIP_LAYOUT_PARAMS)
+    static ComplicationLayoutParams provideHomeControlsChipLayoutParams(@Main Resources res) {
+        return new ComplicationLayoutParams(
+            res.getDimensionPixelSize(R.dimen.keyguard_affordance_fixed_width),
+            res.getDimensionPixelSize(R.dimen.keyguard_affordance_fixed_height),
+            ComplicationLayoutParams.POSITION_BOTTOM
+                    | ComplicationLayoutParams.POSITION_START,
+            ComplicationLayoutParams.DIRECTION_END,
+            DREAM_HOME_CONTROLS_CHIP_COMPLICATION_WEIGHT);
+    }
+
+    /**
+     * Provides layout parameters for the smartspace complication.
+     */
+    @Provides
+    @Named(DREAM_SMARTSPACE_LAYOUT_PARAMS)
+    static ComplicationLayoutParams provideSmartspaceLayoutParams() {
+        return new ComplicationLayoutParams(0,
+            ViewGroup.LayoutParams.WRAP_CONTENT,
+            ComplicationLayoutParams.POSITION_TOP
+                    | ComplicationLayoutParams.POSITION_START,
+            ComplicationLayoutParams.DIRECTION_DOWN,
+            DREAM_SMARTSPACE_COMPLICATION_WEIGHT,
+            true /*snapToGuide*/);
+    }
 }
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 c1dff24..2dd2098 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamModule.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamModule.java
@@ -17,10 +17,18 @@
 package com.android.systemui.dreams.dagger;
 
 import android.content.Context;
+import android.content.res.Resources;
 
 import com.android.settingslib.dream.DreamBackend;
+import com.android.systemui.dagger.SysUISingleton;
+import com.android.systemui.dagger.qualifiers.Main;
+import com.android.systemui.dreams.DreamOverlayNotificationCountProvider;
 import com.android.systemui.dreams.complication.dagger.RegisteredComplicationsModule;
 
+import java.util.Optional;
+
+import javax.inject.Named;
+
 import dagger.Module;
 import dagger.Provides;
 
@@ -34,6 +42,10 @@
             DreamOverlayComponent.class,
         })
 public interface DreamModule {
+    String DREAM_ONLY_ENABLED_FOR_SYSTEM_USER = "dream_only_enabled_for_system_user";
+
+    String DREAM_SUPPORTED = "dream_supported";
+
     /**
      * Provides an instance of the dream backend.
      */
@@ -41,4 +53,31 @@
     static DreamBackend providesDreamBackend(Context context) {
         return DreamBackend.getInstance(context);
     }
+
+    /**
+     * Provides an instance of a {@link DreamOverlayNotificationCountProvider}.
+     */
+    @SysUISingleton
+    @Provides
+    static Optional<DreamOverlayNotificationCountProvider>
+            providesDreamOverlayNotificationCountProvider() {
+        // If we decide to bring this back, we should gate it on a config that can be changed in
+        // an overlay.
+        return Optional.empty();
+    }
+
+    /** */
+    @Provides
+    @Named(DREAM_ONLY_ENABLED_FOR_SYSTEM_USER)
+    static boolean providesDreamOnlyEnabledForSystemUser(@Main Resources resources) {
+        return resources.getBoolean(
+                com.android.internal.R.bool.config_dreamsOnlyEnabledForSystemUser);
+    }
+
+    /** */
+    @Provides
+    @Named(DREAM_SUPPORTED)
+    static boolean providesDreamSupported(@Main Resources resources) {
+        return resources.getBoolean(com.android.internal.R.bool.config_dreamsSupported);
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/smartspace/DreamSmartspaceController.kt b/packages/SystemUI/src/com/android/systemui/dreams/smartspace/DreamSmartspaceController.kt
new file mode 100644
index 0000000..63f63a5
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/dreams/smartspace/DreamSmartspaceController.kt
@@ -0,0 +1,243 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.dreams.smartspace
+
+import android.app.smartspace.SmartspaceConfig
+import android.app.smartspace.SmartspaceManager
+import android.app.smartspace.SmartspaceSession
+import android.app.smartspace.SmartspaceTarget
+import android.content.Context
+import android.graphics.Color
+import android.util.Log
+import android.view.View
+import android.view.ViewGroup
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dagger.qualifiers.Main
+import com.android.systemui.plugins.BcSmartspaceDataPlugin
+import com.android.systemui.plugins.BcSmartspaceDataPlugin.SmartspaceTargetListener
+import com.android.systemui.plugins.BcSmartspaceDataPlugin.SmartspaceView
+import com.android.systemui.smartspace.SmartspacePrecondition
+import com.android.systemui.smartspace.SmartspaceTargetFilter
+import com.android.systemui.smartspace.dagger.SmartspaceModule.Companion.DREAM_SMARTSPACE_DATA_PLUGIN
+import com.android.systemui.smartspace.dagger.SmartspaceModule.Companion.DREAM_SMARTSPACE_PRECONDITION
+import com.android.systemui.smartspace.dagger.SmartspaceModule.Companion.DREAM_SMARTSPACE_TARGET_FILTER
+import com.android.systemui.smartspace.dagger.SmartspaceViewComponent
+import com.android.systemui.util.concurrency.Execution
+import java.lang.RuntimeException
+import java.util.Optional
+import java.util.concurrent.Executor
+import javax.inject.Inject
+import javax.inject.Named
+
+/**
+ * Controller for managing the smartspace view on the dream
+ */
+@SysUISingleton
+class DreamSmartspaceController @Inject constructor(
+    private val context: Context,
+    private val smartspaceManager: SmartspaceManager,
+    private val execution: Execution,
+    @Main private val uiExecutor: Executor,
+    private val smartspaceViewComponentFactory: SmartspaceViewComponent.Factory,
+    @Named(DREAM_SMARTSPACE_PRECONDITION) private val precondition: SmartspacePrecondition,
+    @Named(DREAM_SMARTSPACE_TARGET_FILTER)
+    private val optionalTargetFilter: Optional<SmartspaceTargetFilter>,
+    @Named(DREAM_SMARTSPACE_DATA_PLUGIN) optionalPlugin: Optional<BcSmartspaceDataPlugin>
+) {
+    companion object {
+        private const val TAG = "DreamSmartspaceCtrlr"
+    }
+
+    private var session: SmartspaceSession? = null
+    private val plugin: BcSmartspaceDataPlugin? = optionalPlugin.orElse(null)
+    private var targetFilter: SmartspaceTargetFilter? = optionalTargetFilter.orElse(null)
+
+    // A shadow copy of listeners is maintained to track whether the session should remain open.
+    private var listeners = mutableSetOf<SmartspaceTargetListener>()
+
+    private var unfilteredListeners = mutableSetOf<SmartspaceTargetListener>()
+
+    // Smartspace can be used on multiple displays, such as when the user casts their screen
+    private var smartspaceViews = mutableSetOf<SmartspaceView>()
+
+    var preconditionListener = object : SmartspacePrecondition.Listener {
+        override fun onCriteriaChanged() {
+            reloadSmartspace()
+        }
+    }
+
+    init {
+        precondition.addListener(preconditionListener)
+    }
+
+    var filterListener = object : SmartspaceTargetFilter.Listener {
+        override fun onCriteriaChanged() {
+            reloadSmartspace()
+        }
+    }
+
+    init {
+        targetFilter?.addListener(filterListener)
+    }
+
+    var stateChangeListener = object : View.OnAttachStateChangeListener {
+        override fun onViewAttachedToWindow(v: View) {
+            val view = v as SmartspaceView
+            // Until there is dream color matching
+            view.setPrimaryTextColor(Color.WHITE)
+            smartspaceViews.add(view)
+            connectSession()
+            view.setDozeAmount(0f)
+        }
+
+        override fun onViewDetachedFromWindow(v: View) {
+            smartspaceViews.remove(v as SmartspaceView)
+
+            if (smartspaceViews.isEmpty()) {
+                disconnect()
+            }
+        }
+    }
+
+    private val sessionListener = SmartspaceSession.OnTargetsAvailableListener { targets ->
+        execution.assertIsMainThread()
+
+        onTargetsAvailableUnfiltered(targets)
+        val filteredTargets = targets.filter { targetFilter?.filterSmartspaceTarget(it) ?: true }
+        plugin?.onTargetsAvailable(filteredTargets)
+    }
+
+    /**
+     * Constructs the smartspace view and connects it to the smartspace service.
+     */
+    fun buildAndConnectView(parent: ViewGroup): View? {
+        execution.assertIsMainThread()
+
+        if (!precondition.conditionsMet()) {
+            throw RuntimeException("Cannot build view when not enabled")
+        }
+
+        val view = buildView(parent)
+
+        connectSession()
+
+        return view
+    }
+
+    private fun buildView(parent: ViewGroup): View? {
+        return if (plugin != null) {
+            var view = smartspaceViewComponentFactory.create(parent, plugin, stateChangeListener)
+                .getView()
+            if (view !is View) {
+                return null
+            }
+            return view
+        } else {
+            null
+        }
+    }
+
+    private fun hasActiveSessionListeners(): Boolean {
+        return smartspaceViews.isNotEmpty() || listeners.isNotEmpty() ||
+            unfilteredListeners.isNotEmpty()
+    }
+
+    private fun connectSession() {
+        if (plugin == null || session != null || !hasActiveSessionListeners()) {
+            return
+        }
+
+        if (!precondition.conditionsMet()) {
+            return
+        }
+
+        val newSession = smartspaceManager.createSmartspaceSession(
+            SmartspaceConfig.Builder(context, "dream").build()
+        )
+        Log.d(TAG, "Starting smartspace session for dream")
+        newSession.addOnTargetsAvailableListener(uiExecutor, sessionListener)
+        this.session = newSession
+
+        plugin.registerSmartspaceEventNotifier {
+                e ->
+            session?.notifySmartspaceEvent(e)
+        }
+
+        reloadSmartspace()
+    }
+
+    /**
+     * Disconnects the smartspace view from the smartspace service and cleans up any resources.
+     */
+    private fun disconnect() {
+        if (hasActiveSessionListeners()) return
+
+        execution.assertIsMainThread()
+
+        if (session == null) {
+            return
+        }
+
+        session?.let {
+            it.removeOnTargetsAvailableListener(sessionListener)
+            it.close()
+        }
+
+        session = null
+
+        plugin?.registerSmartspaceEventNotifier(null)
+        plugin?.onTargetsAvailable(emptyList())
+        Log.d(TAG, "Ending smartspace session for dream")
+    }
+
+    fun addListener(listener: SmartspaceTargetListener) {
+        execution.assertIsMainThread()
+        plugin?.registerListener(listener)
+        listeners.add(listener)
+
+        connectSession()
+    }
+
+    fun removeListener(listener: SmartspaceTargetListener) {
+        execution.assertIsMainThread()
+        plugin?.unregisterListener(listener)
+        listeners.remove(listener)
+        disconnect()
+    }
+
+    private fun reloadSmartspace() {
+        session?.requestSmartspaceUpdate()
+    }
+
+    private fun onTargetsAvailableUnfiltered(targets: List<SmartspaceTarget>) {
+        unfilteredListeners.forEach { it.onSmartspaceTargetsUpdated(targets) }
+    }
+
+    /**
+     * Adds a listener for the raw, unfiltered list of smartspace targets. This should be used
+     * carefully, as it doesn't filter out targets which the user may not want shown.
+     */
+    fun addUnfilteredListener(listener: SmartspaceTargetListener) {
+        unfilteredListeners.add(listener)
+        connectSession()
+    }
+
+    fun removeUnfilteredListener(listener: SmartspaceTargetListener) {
+        unfilteredListeners.remove(listener)
+        disconnect()
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/smartspace/DreamsSmartspaceController.kt b/packages/SystemUI/src/com/android/systemui/dreams/smartspace/DreamsSmartspaceController.kt
deleted file mode 100644
index a309547..0000000
--- a/packages/SystemUI/src/com/android/systemui/dreams/smartspace/DreamsSmartspaceController.kt
+++ /dev/null
@@ -1,221 +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.systemui.dreams.smartspace
-
-import android.app.smartspace.SmartspaceConfig
-import android.app.smartspace.SmartspaceManager
-import android.app.smartspace.SmartspaceSession
-import android.content.Context
-import android.graphics.Color
-import android.util.Log
-import android.view.View
-import android.view.ViewGroup
-import com.android.systemui.dagger.SysUISingleton
-import com.android.systemui.dagger.qualifiers.Main
-import com.android.systemui.plugins.BcSmartspaceDataPlugin
-import com.android.systemui.plugins.BcSmartspaceDataPlugin.SmartspaceTargetListener
-import com.android.systemui.plugins.BcSmartspaceDataPlugin.SmartspaceView
-import com.android.systemui.smartspace.SmartspacePrecondition
-import com.android.systemui.smartspace.SmartspaceTargetFilter
-import com.android.systemui.smartspace.dagger.SmartspaceModule.Companion.DREAM_SMARTSPACE_DATA_PLUGIN
-import com.android.systemui.smartspace.dagger.SmartspaceModule.Companion.DREAM_SMARTSPACE_PRECONDITION
-import com.android.systemui.smartspace.dagger.SmartspaceModule.Companion.DREAM_SMARTSPACE_TARGET_FILTER
-import com.android.systemui.smartspace.dagger.SmartspaceViewComponent
-import com.android.systemui.util.concurrency.Execution
-import java.lang.RuntimeException
-import java.util.Optional
-import java.util.concurrent.Executor
-import javax.inject.Inject
-import javax.inject.Named
-
-/**
- * Controller for managing the smartspace view on the dream
- */
-@SysUISingleton
-class DreamsSmartspaceController @Inject constructor(
-    private val context: Context,
-    private val smartspaceManager: SmartspaceManager,
-    private val execution: Execution,
-    @Main private val uiExecutor: Executor,
-    private val smartspaceViewComponentFactory: SmartspaceViewComponent.Factory,
-    @Named(DREAM_SMARTSPACE_PRECONDITION) private val precondition: SmartspacePrecondition,
-    @Named(DREAM_SMARTSPACE_TARGET_FILTER)
-    private val optionalTargetFilter: Optional<SmartspaceTargetFilter>,
-    @Named(DREAM_SMARTSPACE_DATA_PLUGIN) optionalPlugin: Optional<BcSmartspaceDataPlugin>
-) {
-    companion object {
-        private const val TAG = "DreamsSmartspaceCtrlr"
-    }
-
-    private var session: SmartspaceSession? = null
-    private val plugin: BcSmartspaceDataPlugin? = optionalPlugin.orElse(null)
-    private var targetFilter: SmartspaceTargetFilter? = optionalTargetFilter.orElse(null)
-
-    // A shadow copy of listeners is maintained to track whether the session should remain open.
-    private var listeners = mutableSetOf<BcSmartspaceDataPlugin.SmartspaceTargetListener>()
-
-    // Smartspace can be used on multiple displays, such as when the user casts their screen
-    private var smartspaceViews = mutableSetOf<SmartspaceView>()
-
-    var preconditionListener = object : SmartspacePrecondition.Listener {
-        override fun onCriteriaChanged() {
-            reloadSmartspace()
-        }
-    }
-
-    init {
-        precondition.addListener(preconditionListener)
-    }
-
-    var filterListener = object : SmartspaceTargetFilter.Listener {
-        override fun onCriteriaChanged() {
-            reloadSmartspace()
-        }
-    }
-
-    init {
-        targetFilter?.addListener(filterListener)
-    }
-
-    var stateChangeListener = object : View.OnAttachStateChangeListener {
-        override fun onViewAttachedToWindow(v: View) {
-            val view = v as SmartspaceView
-            // Until there is dream color matching
-            view.setPrimaryTextColor(Color.WHITE)
-            smartspaceViews.add(view)
-            connectSession()
-            view.setDozeAmount(0f)
-        }
-
-        override fun onViewDetachedFromWindow(v: View) {
-            smartspaceViews.remove(v as SmartspaceView)
-
-            if (smartspaceViews.isEmpty()) {
-                disconnect()
-            }
-        }
-    }
-
-    private val sessionListener = SmartspaceSession.OnTargetsAvailableListener { targets ->
-        execution.assertIsMainThread()
-
-        val filteredTargets = targets.filter { targetFilter?.filterSmartspaceTarget(it) ?: true }
-        plugin?.onTargetsAvailable(filteredTargets)
-    }
-
-    /**
-     * Constructs the smartspace view and connects it to the smartspace service.
-     */
-    fun buildAndConnectView(parent: ViewGroup): View? {
-        execution.assertIsMainThread()
-
-        if (!precondition.conditionsMet()) {
-            throw RuntimeException("Cannot build view when not enabled")
-        }
-
-        val view = buildView(parent)
-
-        connectSession()
-
-        return view
-    }
-
-    private fun buildView(parent: ViewGroup): View? {
-        return if (plugin != null) {
-            var view = smartspaceViewComponentFactory.create(parent, plugin, stateChangeListener)
-                    .getView()
-            if (view !is View) {
-                return null
-            }
-
-            view.setIsDreaming(true)
-
-            return view
-        } else {
-            null
-        }
-    }
-
-    private fun hasActiveSessionListeners(): Boolean {
-        return smartspaceViews.isNotEmpty() || listeners.isNotEmpty()
-    }
-
-    private fun connectSession() {
-        if (plugin == null || session != null || !hasActiveSessionListeners()) {
-            return
-        }
-
-        if (!precondition.conditionsMet()) {
-            return
-        }
-
-        val newSession = smartspaceManager.createSmartspaceSession(
-                SmartspaceConfig.Builder(context, "dream").build())
-        Log.d(TAG, "Starting smartspace session for dream")
-        newSession.addOnTargetsAvailableListener(uiExecutor, sessionListener)
-        this.session = newSession
-
-        plugin.registerSmartspaceEventNotifier {
-                e -> session?.notifySmartspaceEvent(e)
-        }
-
-        reloadSmartspace()
-    }
-
-    /**
-     * Disconnects the smartspace view from the smartspace service and cleans up any resources.
-     */
-    private fun disconnect() {
-        if (hasActiveSessionListeners()) return
-
-        execution.assertIsMainThread()
-
-        if (session == null) {
-            return
-        }
-
-        session?.let {
-            it.removeOnTargetsAvailableListener(sessionListener)
-            it.close()
-        }
-
-        session = null
-
-        plugin?.registerSmartspaceEventNotifier(null)
-        plugin?.onTargetsAvailable(emptyList())
-        Log.d(TAG, "Ending smartspace session for dream")
-    }
-
-    fun addListener(listener: SmartspaceTargetListener) {
-        execution.assertIsMainThread()
-        plugin?.registerListener(listener)
-        listeners.add(listener)
-
-        connectSession()
-    }
-
-    fun removeListener(listener: SmartspaceTargetListener) {
-        execution.assertIsMainThread()
-        plugin?.unregisterListener(listener)
-        listeners.remove(listener)
-        disconnect()
-    }
-
-    private fun reloadSmartspace() {
-        session?.requestSmartspaceUpdate()
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/touch/BouncerSwipeTouchHandler.java b/packages/SystemUI/src/com/android/systemui/dreams/touch/BouncerSwipeTouchHandler.java
index fbca7b1..f769a23 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/touch/BouncerSwipeTouchHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/touch/BouncerSwipeTouchHandler.java
@@ -44,6 +44,7 @@
 import com.android.wm.shell.animation.FlingAnimationUtils;
 
 import java.util.Optional;
+
 import javax.inject.Inject;
 import javax.inject.Named;
 
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/touch/HideComplicationTouchHandler.java b/packages/SystemUI/src/com/android/systemui/dreams/touch/HideComplicationTouchHandler.java
index 4965c9d..3087cdf 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/touch/HideComplicationTouchHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/touch/HideComplicationTouchHandler.java
@@ -25,6 +25,7 @@
 
 import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.dreams.complication.Complication;
+import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
 import com.android.systemui.touch.TouchInsetManager;
 
 import com.google.common.util.concurrent.ListenableFuture;
@@ -50,6 +51,7 @@
 
     private final Complication.VisibilityController mVisibilityController;
     private final int mRestoreTimeout;
+    private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
     private final Handler mHandler;
     private final Executor mExecutor;
     private final TouchInsetManager mTouchInsetManager;
@@ -65,10 +67,12 @@
     HideComplicationTouchHandler(Complication.VisibilityController visibilityController,
             @Named(COMPLICATIONS_RESTORE_TIMEOUT) int restoreTimeout,
             TouchInsetManager touchInsetManager,
+            StatusBarKeyguardViewManager statusBarKeyguardViewManager,
             @Main Executor executor,
             @Main Handler handler) {
         mVisibilityController = visibilityController;
         mRestoreTimeout = restoreTimeout;
+        mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
         mHandler = handler;
         mTouchInsetManager = touchInsetManager;
         mExecutor = executor;
@@ -80,10 +84,13 @@
             Log.d(TAG, "onSessionStart");
         }
 
+        final boolean bouncerShowing = mStatusBarKeyguardViewManager.isBouncerShowing();
+
         // If other sessions are interested in this touch, do not fade out elements.
-        if (session.getActiveSessionCount() > 1) {
+        if (session.getActiveSessionCount() > 1 || bouncerShowing) {
             if (DEBUG) {
-                Log.d(TAG, "multiple active touch sessions, not fading");
+                Log.d(TAG, "not fading. Active session count: " + session.getActiveSessionCount()
+                        + ". Bouncer showing: " + bouncerShowing);
             }
             session.pop();
             return;
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 b9436f9..9c22dc6 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,7 +25,7 @@
 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.statusbar.phone.PanelViewController;
+import com.android.systemui.shade.PanelViewController;
 import com.android.wm.shell.animation.FlingAnimationUtils;
 
 import javax.inject.Named;
diff --git a/packages/SystemUI/src/com/android/systemui/flags/FeatureFlags.kt b/packages/SystemUI/src/com/android/systemui/flags/FeatureFlags.kt
index 9d6e3c2..dfa3bcd 100644
--- a/packages/SystemUI/src/com/android/systemui/flags/FeatureFlags.kt
+++ b/packages/SystemUI/src/com/android/systemui/flags/FeatureFlags.kt
@@ -23,12 +23,18 @@
  */
 interface FeatureFlags : FlagListenable {
     /** Returns a boolean value for the given flag.  */
-    fun isEnabled(flag: BooleanFlag): Boolean
+    fun isEnabled(flag: UnreleasedFlag): Boolean
+
+    /** Returns a boolean value for the given flag.  */
+    fun isEnabled(flag: ReleasedFlag): Boolean
 
     /** Returns a boolean value for the given flag.  */
     fun isEnabled(flag: ResourceBooleanFlag): Boolean
 
     /** Returns a boolean value for the given flag.  */
+    fun isEnabled(flag: DeviceConfigBooleanFlag): Boolean
+
+    /** Returns a boolean value for the given flag.  */
     fun isEnabled(flag: SysPropBooleanFlag): Boolean
 
     /** Returns a string value for the given flag.  */
@@ -36,4 +42,4 @@
 
     /** Returns a string value for the given flag.  */
     fun getString(flag: ResourceStringFlag): String
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsDebug.java b/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsDebug.java
index c4531b5..00c1a99 100644
--- a/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsDebug.java
+++ b/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsDebug.java
@@ -44,8 +44,11 @@
 import com.android.systemui.dump.DumpManager;
 import com.android.systemui.statusbar.commandline.Command;
 import com.android.systemui.statusbar.commandline.CommandRegistry;
+import com.android.systemui.util.DeviceConfigProxy;
 import com.android.systemui.util.settings.SecureSettings;
 
+import org.jetbrains.annotations.NotNull;
+
 import java.io.PrintWriter;
 import java.lang.reflect.Field;
 import java.util.ArrayList;
@@ -81,6 +84,8 @@
     private final SecureSettings mSecureSettings;
     private final Resources mResources;
     private final SystemPropertiesHelper mSystemProperties;
+    private final DeviceConfigProxy mDeviceConfigProxy;
+    private final ServerFlagReader mServerFlagReader;
     private final Map<Integer, Flag<?>> mAllFlags;
     private final Map<Integer, Boolean> mBooleanFlagCache = new TreeMap<>();
     private final Map<Integer, String> mStringFlagCache = new TreeMap<>();
@@ -94,6 +99,8 @@
             SystemPropertiesHelper systemProperties,
             @Main Resources resources,
             DumpManager dumpManager,
+            DeviceConfigProxy deviceConfigProxy,
+            ServerFlagReader serverFlagReader,
             @Named(ALL_FLAGS) Map<Integer, Flag<?>> allFlags,
             CommandRegistry commandRegistry,
             IStatusBarService barService) {
@@ -101,6 +108,8 @@
         mSecureSettings = secureSettings;
         mResources = resources;
         mSystemProperties = systemProperties;
+        mDeviceConfigProxy = deviceConfigProxy;
+        mServerFlagReader = serverFlagReader;
         mAllFlags = allFlags;
         mBarService = barService;
 
@@ -116,7 +125,16 @@
     }
 
     @Override
-    public boolean isEnabled(@NonNull BooleanFlag flag) {
+    public boolean isEnabled(@NotNull UnreleasedFlag flag) {
+        return isEnabledInternal(flag);
+    }
+
+    @Override
+    public boolean isEnabled(@NotNull ReleasedFlag flag) {
+        return isEnabledInternal(flag);
+    }
+
+    private boolean isEnabledInternal(@NotNull BooleanFlag flag) {
         int id = flag.getId();
         if (!mBooleanFlagCache.containsKey(id)) {
             mBooleanFlagCache.put(id,
@@ -138,6 +156,18 @@
     }
 
     @Override
+    public boolean isEnabled(@NonNull DeviceConfigBooleanFlag flag) {
+        int id = flag.getId();
+        if (!mBooleanFlagCache.containsKey(id)) {
+            boolean deviceConfigValue = mDeviceConfigProxy.getBoolean(flag.getNamespace(),
+                    flag.getName(), flag.getDefault());
+            mBooleanFlagCache.put(id, readFlagValue(id, deviceConfigValue));
+        }
+
+        return mBooleanFlagCache.get(id);
+    }
+
+    @Override
     public boolean isEnabled(@NonNull SysPropBooleanFlag flag) {
         int id = flag.getId();
         if (!mBooleanFlagCache.containsKey(id)) {
@@ -180,15 +210,22 @@
 
     /** Specific override for Boolean flags that checks against the teamfood list.*/
     private boolean readFlagValue(int id, boolean defaultValue) {
-        Boolean result = readFlagValueInternal(id, BooleanFlagSerializer.INSTANCE);
-        // Only check for teamfood if the default is false.
-        if (!defaultValue && result == null && id != Flags.TEAMFOOD.getId()) {
+        Boolean result = readBooleanFlagOverride(id);
+        boolean hasServerOverride = mServerFlagReader.hasOverride(id);
+
+        // Only check for teamfood if the default is false
+        // and there is no server override.
+        if (!hasServerOverride && !defaultValue && result == null && id != Flags.TEAMFOOD.getId()) {
             if (mAllFlags.containsKey(id) && mAllFlags.get(id).getTeamfood()) {
                 return isEnabled(Flags.TEAMFOOD);
             }
         }
 
-        return result == null ? defaultValue : result;
+        return result == null ? mServerFlagReader.readServerOverride(id, defaultValue) : result;
+    }
+
+    private Boolean readBooleanFlagOverride(int id) {
+        return readFlagValueInternal(id, BooleanFlagSerializer.INSTANCE);
     }
 
     @NonNull
@@ -293,6 +330,8 @@
             setFlagValue(flag.getId(), value, BooleanFlagSerializer.INSTANCE);
         } else if (flag instanceof ResourceBooleanFlag) {
             setFlagValue(flag.getId(), value, BooleanFlagSerializer.INSTANCE);
+        } else if (flag instanceof DeviceConfigBooleanFlag) {
+            setFlagValue(flag.getId(), value, BooleanFlagSerializer.INSTANCE);
         } else if (flag instanceof SysPropBooleanFlag) {
             // Store SysProp flags in SystemProperties where they can read by outside parties.
             mSystemProperties.setBoolean(((SysPropBooleanFlag) flag).getName(), value);
@@ -387,22 +426,38 @@
          */
         @Nullable
         private ParcelableFlag<?> toParcelableFlag(Flag<?> f) {
-            if (f instanceof BooleanFlag) {
-                return new BooleanFlag(f.getId(), isEnabled((BooleanFlag) f), f.getTeamfood());
-            }
-            if (f instanceof ResourceBooleanFlag) {
-                return new BooleanFlag(
-                        f.getId(), isEnabled((ResourceBooleanFlag) f), f.getTeamfood());
-            }
-            if (f instanceof SysPropBooleanFlag) {
+            boolean enabled;
+            boolean teamfood = f.getTeamfood();
+            boolean overridden;
+
+            if (f instanceof ReleasedFlag) {
+                enabled = isEnabled((ReleasedFlag) f);
+                overridden = readBooleanFlagOverride(f.getId()) != null;
+            } else if (f instanceof UnreleasedFlag) {
+                enabled = isEnabled((UnreleasedFlag) f);
+                overridden = readBooleanFlagOverride(f.getId()) != null;
+            } else if (f instanceof ResourceBooleanFlag) {
+                enabled = isEnabled((ResourceBooleanFlag) f);
+                overridden = readBooleanFlagOverride(f.getId()) != null;
+            } else if (f instanceof DeviceConfigBooleanFlag) {
+                enabled = isEnabled((DeviceConfigBooleanFlag) f);
+                overridden = false;
+            } else if (f instanceof SysPropBooleanFlag) {
                 // TODO(b/223379190): Teamfood not supported for sysprop flags yet.
-                return new BooleanFlag(
-                        f.getId(), isEnabled((SysPropBooleanFlag) f), false);
+                enabled = isEnabled((SysPropBooleanFlag) f);
+                teamfood = false;
+                overridden = !mSystemProperties.get(((SysPropBooleanFlag) f).getName()).isEmpty();
+            } else {
+                // TODO: add support for other flag types.
+                Log.w(TAG, "Unsupported Flag Type. Please file a bug.");
+                return null;
             }
 
-            // TODO: add support for other flag types.
-            Log.w(TAG, "Unsupported Flag Type. Please file a bug.");
-            return null;
+            if (enabled) {
+                return new ReleasedFlag(f.getId(), teamfood, overridden);
+            } else {
+                return new UnreleasedFlag(f.getId(), teamfood, overridden);
+            }
         }
     };
 
@@ -503,8 +558,10 @@
         }
 
         private boolean isBooleanFlagEnabled(Flag<?> flag) {
-            if (flag instanceof BooleanFlag) {
-                return isEnabled((BooleanFlag) flag);
+            if (flag instanceof ReleasedFlag) {
+                return isEnabled((ReleasedFlag) flag);
+            } else if (flag instanceof UnreleasedFlag) {
+                return isEnabled((UnreleasedFlag) flag);
             } else if (flag instanceof ResourceBooleanFlag) {
                 return isEnabled((ResourceBooleanFlag) flag);
             } else if (flag instanceof SysPropFlag) {
diff --git a/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsRelease.java b/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsRelease.java
index cacef16..049b17d 100644
--- a/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsRelease.java
+++ b/packages/SystemUI/src/com/android/systemui/flags/FeatureFlagsRelease.java
@@ -28,6 +28,9 @@
 import com.android.systemui.dagger.SysUISingleton;
 import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.dump.DumpManager;
+import com.android.systemui.util.DeviceConfigProxy;
+
+import org.jetbrains.annotations.NotNull;
 
 import java.io.PrintWriter;
 import java.util.Map;
@@ -44,16 +47,23 @@
 public class FeatureFlagsRelease implements FeatureFlags, Dumpable {
     private final Resources mResources;
     private final SystemPropertiesHelper mSystemProperties;
+    private final DeviceConfigProxy mDeviceConfigProxy;
+    private final ServerFlagReader mServerFlagReader;
     SparseBooleanArray mBooleanCache = new SparseBooleanArray();
     SparseArray<String> mStringCache = new SparseArray<>();
+    private boolean mInited;
 
     @Inject
     public FeatureFlagsRelease(
             @Main Resources resources,
             SystemPropertiesHelper systemProperties,
+            DeviceConfigProxy deviceConfigProxy,
+            ServerFlagReader serverFlagReader,
             DumpManager dumpManager) {
         mResources = resources;
         mSystemProperties = systemProperties;
+        mDeviceConfigProxy = deviceConfigProxy;
+        mServerFlagReader = serverFlagReader;
         dumpManager.registerDumpable("SysUIFlags", this);
     }
 
@@ -64,8 +74,13 @@
     public void removeListener(@NonNull Listener listener) {}
 
     @Override
-    public boolean isEnabled(BooleanFlag flag) {
-        return flag.getDefault();
+    public boolean isEnabled(@NotNull UnreleasedFlag flag) {
+        return false;
+    }
+
+    @Override
+    public boolean isEnabled(@NotNull ReleasedFlag flag) {
+        return mServerFlagReader.readServerOverride(flag.getId(), true);
     }
 
     @Override
@@ -79,6 +94,18 @@
     }
 
     @Override
+    public boolean isEnabled(@NonNull DeviceConfigBooleanFlag flag) {
+        int cacheIndex = mBooleanCache.indexOfKey(flag.getId());
+        if (cacheIndex < 0) {
+            boolean deviceConfigValue = mDeviceConfigProxy.getBoolean(flag.getNamespace(),
+                    flag.getName(), flag.getDefault());
+            return isEnabled(flag.getId(), deviceConfigValue);
+        }
+
+        return mBooleanCache.valueAt(cacheIndex);
+    }
+
+    @Override
     public boolean isEnabled(SysPropBooleanFlag flag) {
         int cacheIndex = mBooleanCache.indexOfKey(flag.getId());
         if (cacheIndex < 0) {
diff --git a/packages/SystemUI/src/com/android/systemui/flags/Flags.java b/packages/SystemUI/src/com/android/systemui/flags/Flags.java
index 2c79830..d9e75c48 100644
--- a/packages/SystemUI/src/com/android/systemui/flags/Flags.java
+++ b/packages/SystemUI/src/com/android/systemui/flags/Flags.java
@@ -16,6 +16,8 @@
 
 package com.android.systemui.flags;
 
+import static android.provider.DeviceConfig.NAMESPACE_WINDOW_MANAGER;
+
 import com.android.internal.annotations.Keep;
 import com.android.systemui.R;
 
@@ -30,7 +32,7 @@
  *
  * Flag Ids are integers.
  * Ids must be unique. This is enforced in a unit test.
- * Ids need not be sequential. Flags can "claim" a chunk of ids for flags in related featurs with
+ * Ids need not be sequential. Flags can "claim" a chunk of ids for flags in related features with
  * a comment. This is purely for organizational purposes.
  *
  * On public release builds, flags will always return their default value. There is no way to
@@ -39,28 +41,31 @@
  * See {@link FeatureFlagsDebug} for instructions on flipping the flags via adb.
  */
 public class Flags {
-    public static final BooleanFlag TEAMFOOD = new BooleanFlag(1, false);
+    public static final UnreleasedFlag TEAMFOOD = new UnreleasedFlag(1);
 
     /***************************************/
     // 100 - notification
-    public static final BooleanFlag NEW_NOTIFICATION_PIPELINE_RENDERING =
-            new BooleanFlag(101, true);
+    public static final UnreleasedFlag NOTIFICATION_PIPELINE_DEVELOPER_LOGGING =
+            new UnreleasedFlag(103);
 
-    public static final BooleanFlag NOTIFICATION_PIPELINE_DEVELOPER_LOGGING =
-            new BooleanFlag(103, false);
+    public static final UnreleasedFlag NSSL_DEBUG_LINES =
+            new UnreleasedFlag(105);
 
-    public static final BooleanFlag NSSL_DEBUG_LINES =
-            new BooleanFlag(105, false);
+    public static final UnreleasedFlag NSSL_DEBUG_REMOVE_ANIMATION =
+            new UnreleasedFlag(106);
 
-    public static final BooleanFlag NSSL_DEBUG_REMOVE_ANIMATION =
-            new BooleanFlag(106, false);
-
-    public static final BooleanFlag NEW_PIPELINE_CRASH_ON_CALL_TO_OLD_PIPELINE =
-            new BooleanFlag(107, false);
+    public static final UnreleasedFlag NEW_PIPELINE_CRASH_ON_CALL_TO_OLD_PIPELINE =
+            new UnreleasedFlag(107);
 
     public static final ResourceBooleanFlag NOTIFICATION_DRAG_TO_CONTENTS =
             new ResourceBooleanFlag(108, R.bool.config_notificationToContents);
 
+    public static final UnreleasedFlag REMOVE_UNRANKED_NOTIFICATIONS =
+            new UnreleasedFlag(109, true);
+
+    public static final UnreleasedFlag FSI_REQUIRES_KEYGUARD =
+            new UnreleasedFlag(110, true);
+
     /***************************************/
     // 200 - keyguard/lockscreen
 
@@ -68,11 +73,11 @@
     // public static final BooleanFlag KEYGUARD_LAYOUT =
     //         new BooleanFlag(200, true);
 
-    public static final BooleanFlag LOCKSCREEN_ANIMATIONS =
-            new BooleanFlag(201, true);
+    public static final ReleasedFlag LOCKSCREEN_ANIMATIONS =
+            new ReleasedFlag(201);
 
-    public static final BooleanFlag NEW_UNLOCK_SWIPE_ANIMATION =
-            new BooleanFlag(202, true);
+    public static final ReleasedFlag NEW_UNLOCK_SWIPE_ANIMATION =
+            new ReleasedFlag(202);
 
     public static final ResourceBooleanFlag CHARGING_RIPPLE =
             new ResourceBooleanFlag(203, R.bool.flag_charging_ripple);
@@ -83,18 +88,33 @@
     public static final ResourceBooleanFlag FACE_SCANNING_ANIM =
             new ResourceBooleanFlag(205, R.bool.config_enableFaceScanningAnimation);
 
+    /**
+     * Whether the KeyguardBottomArea(View|Controller) should use the modern architecture or the old
+     * one.
+     */
+    public static final UnreleasedFlag MODERN_BOTTOM_AREA = new UnreleasedFlag(206, true);
+
+
+    public static final UnreleasedFlag LOCKSCREEN_CUSTOM_CLOCKS = new UnreleasedFlag(207);
+
+    /**
+     * Flag to enable the usage of the new bouncer data source. This is a refactor of and
+     * eventual replacement of KeyguardBouncer.java.
+     */
+    public static final ReleasedFlag MODERN_BOUNCER = new ReleasedFlag(208);
+
     /***************************************/
     // 300 - power menu
-    public static final BooleanFlag POWER_MENU_LITE =
-            new BooleanFlag(300, true);
+    public static final ReleasedFlag POWER_MENU_LITE =
+            new ReleasedFlag(300);
 
     /***************************************/
     // 400 - smartspace
-    public static final BooleanFlag SMARTSPACE_DEDUPING =
-            new BooleanFlag(400, true);
+    public static final ReleasedFlag SMARTSPACE_DEDUPING =
+            new ReleasedFlag(400);
 
-    public static final BooleanFlag SMARTSPACE_SHARED_ELEMENT_TRANSITION_ENABLED =
-            new BooleanFlag(401, true);
+    public static final ReleasedFlag SMARTSPACE_SHARED_ELEMENT_TRANSITION_ENABLED =
+            new ReleasedFlag(401);
 
     public static final ResourceBooleanFlag SMARTSPACE =
             new ResourceBooleanFlag(402, R.bool.flag_smartspace);
@@ -105,11 +125,11 @@
      * @deprecated Not needed anymore
      */
     @Deprecated
-    public static final BooleanFlag NEW_USER_SWITCHER =
-            new BooleanFlag(500, true);
+    public static final ReleasedFlag NEW_USER_SWITCHER =
+            new ReleasedFlag(500);
 
-    public static final BooleanFlag COMBINED_QS_HEADERS =
-            new BooleanFlag(501, false);
+    public static final UnreleasedFlag COMBINED_QS_HEADERS =
+            new UnreleasedFlag(501, true);
 
     public static final ResourceBooleanFlag PEOPLE_TILE =
             new ResourceBooleanFlag(502, R.bool.flag_conversations);
@@ -121,30 +141,32 @@
      * @deprecated Not needed anymore
      */
     @Deprecated
-    public static final BooleanFlag NEW_FOOTER = new BooleanFlag(504, true);
+    public static final ReleasedFlag NEW_FOOTER = new ReleasedFlag(504);
 
-    public static final BooleanFlag NEW_HEADER = new BooleanFlag(505, false);
+    public static final UnreleasedFlag NEW_HEADER = new UnreleasedFlag(505, true);
     public static final ResourceBooleanFlag FULL_SCREEN_USER_SWITCHER =
             new ResourceBooleanFlag(506, R.bool.config_enableFullscreenUserSwitcher);
 
     /***************************************/
     // 600- status bar
-    public static final BooleanFlag COMBINED_STATUS_BAR_SIGNAL_ICONS =
-            new BooleanFlag(601, false);
-
     public static final ResourceBooleanFlag STATUS_BAR_USER_SWITCHER =
             new ResourceBooleanFlag(602, R.bool.flag_user_switcher_chip);
 
+    public static final UnreleasedFlag STATUS_BAR_LETTERBOX_APPEARANCE =
+            new UnreleasedFlag(603, false);
+
+    public static final UnreleasedFlag NEW_STATUS_BAR_PIPELINE = new UnreleasedFlag(604, true);
+
     /***************************************/
     // 700 - dialer/calls
-    public static final BooleanFlag ONGOING_CALL_STATUS_BAR_CHIP =
-            new BooleanFlag(700, true);
+    public static final ReleasedFlag ONGOING_CALL_STATUS_BAR_CHIP =
+            new ReleasedFlag(700);
 
-    public static final BooleanFlag ONGOING_CALL_IN_IMMERSIVE =
-            new BooleanFlag(701, true);
+    public static final ReleasedFlag ONGOING_CALL_IN_IMMERSIVE =
+            new ReleasedFlag(701);
 
-    public static final BooleanFlag ONGOING_CALL_IN_IMMERSIVE_CHIP_TAP =
-            new BooleanFlag(702, true);
+    public static final ReleasedFlag ONGOING_CALL_IN_IMMERSIVE_CHIP_TAP =
+            new ReleasedFlag(702);
 
     /***************************************/
     // 800 - general visual/theme
@@ -153,20 +175,46 @@
 
     /***************************************/
     // 900 - media
-    public static final BooleanFlag MEDIA_TAP_TO_TRANSFER = new BooleanFlag(900, false);
-    public static final BooleanFlag MEDIA_SESSION_ACTIONS = new BooleanFlag(901, false);
-    public static final BooleanFlag MEDIA_NEARBY_DEVICES = new BooleanFlag(903, true);
-    public static final BooleanFlag MEDIA_MUTE_AWAIT = new BooleanFlag(904, true);
+    public static final ReleasedFlag MEDIA_TAP_TO_TRANSFER = new ReleasedFlag(900);
+    public static final UnreleasedFlag MEDIA_SESSION_ACTIONS = new UnreleasedFlag(901);
+    public static final ReleasedFlag MEDIA_NEARBY_DEVICES = new ReleasedFlag(903);
+    public static final ReleasedFlag MEDIA_MUTE_AWAIT = new ReleasedFlag(904);
 
     // 1000 - dock
-    public static final BooleanFlag SIMULATE_DOCK_THROUGH_CHARGING =
-            new BooleanFlag(1000, true);
+    public static final ReleasedFlag SIMULATE_DOCK_THROUGH_CHARGING =
+            new ReleasedFlag(1000);
+    public static final ReleasedFlag DOCK_SETUP_ENABLED = new ReleasedFlag(1001);
+
 
     // 1100 - windowing
     @Keep
     public static final SysPropBooleanFlag WM_ENABLE_SHELL_TRANSITIONS =
             new SysPropBooleanFlag(1100, "persist.wm.debug.shell_transit", false);
 
+    /**
+     * b/170163464: animate bubbles expanded view collapse with home gesture
+     */
+    @Keep
+    public static final SysPropBooleanFlag BUBBLES_HOME_GESTURE =
+            new SysPropBooleanFlag(1101, "persist.wm.debug.bubbles_home_gesture", true);
+
+    @Keep
+    public static final DeviceConfigBooleanFlag WM_ENABLE_PARTIAL_SCREEN_SHARING =
+            new DeviceConfigBooleanFlag(1102, "record_task_content",
+                    NAMESPACE_WINDOW_MANAGER, false, true);
+
+    @Keep
+    public static final SysPropBooleanFlag HIDE_NAVBAR_WINDOW =
+            new SysPropBooleanFlag(1103, "persist.wm.debug.hide_navbar_window", false);
+
+    @Keep
+    public static final SysPropBooleanFlag WM_DESKTOP_WINDOWING =
+            new SysPropBooleanFlag(1104, "persist.wm.debug.desktop_mode", false);
+
+    @Keep
+    public static final SysPropBooleanFlag WM_CAPTION_ON_SHELL =
+            new SysPropBooleanFlag(1105, "persist.wm.debug.caption_on_shell", false);
+
     // 1200 - predictive back
     @Keep
     public static final SysPropBooleanFlag WM_ENABLE_PREDICTIVE_BACK = new SysPropBooleanFlag(
@@ -178,6 +226,13 @@
     public static final SysPropBooleanFlag WM_ALWAYS_ENFORCE_PREDICTIVE_BACK =
             new SysPropBooleanFlag(1202, "persist.wm.debug.predictive_back_always_enforce", false);
 
+    public static final UnreleasedFlag NEW_BACK_AFFORDANCE =
+            new UnreleasedFlag(1203, false /* teamfood */);
+
+    // 1300 - screenshots
+
+    public static final UnreleasedFlag SCREENSHOT_REQUEST_PROCESSOR = new UnreleasedFlag(1300);
+
     // Pay no attention to the reflection behind the curtain.
     // ========================== Curtain ==========================
     // |                                                           |
diff --git a/packages/SystemUI/src/com/android/systemui/flags/ServerFlagReader.kt b/packages/SystemUI/src/com/android/systemui/flags/ServerFlagReader.kt
new file mode 100644
index 0000000..fc5b9f4
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/flags/ServerFlagReader.kt
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.flags
+
+import com.android.systemui.util.DeviceConfigProxy
+import dagger.Binds
+import dagger.Module
+import javax.inject.Inject
+
+interface ServerFlagReader {
+    /** Returns true if there is a server-side setting stored. */
+    fun hasOverride(flagId: Int): Boolean
+
+    /** Returns any stored server-side setting or the default if not set. */
+    fun readServerOverride(flagId: Int, default: Boolean): Boolean
+}
+
+class ServerFlagReaderImpl @Inject constructor(
+    private val deviceConfig: DeviceConfigProxy
+) : ServerFlagReader {
+    override fun hasOverride(flagId: Int): Boolean =
+        deviceConfig.getProperty(
+            SYSUI_NAMESPACE,
+            getServerOverrideName(flagId)
+        ) != null
+
+    override fun readServerOverride(flagId: Int, default: Boolean): Boolean {
+        return deviceConfig.getBoolean(
+            SYSUI_NAMESPACE,
+            getServerOverrideName(flagId),
+            default
+        )
+    }
+
+    private fun getServerOverrideName(flagId: Int): String {
+        return "flag_override_$flagId"
+    }
+}
+
+private val SYSUI_NAMESPACE = "systemui"
+
+@Module
+interface ServerFlagReaderModule {
+    @Binds
+    fun bindsReader(impl: ServerFlagReaderImpl): ServerFlagReader
+}
+
+class ServerFlagReaderFake : ServerFlagReader {
+    private val flagMap: MutableMap<Int, Boolean> = mutableMapOf()
+
+    override fun hasOverride(flagId: Int): Boolean {
+        return flagMap.containsKey(flagId)
+    }
+
+    override fun readServerOverride(flagId: Int, default: Boolean): Boolean {
+        return flagMap.getOrDefault(flagId, default)
+    }
+
+    fun setFlagValue(flagId: Int, value: Boolean) {
+        flagMap.put(flagId, value)
+    }
+
+    fun eraseFlag(flagId: Int) {
+        flagMap.remove(flagId)
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java
index acb080a..ca65d12 100644
--- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java
@@ -54,6 +54,7 @@
 import android.graphics.drawable.Drawable;
 import android.media.AudioManager;
 import android.os.Binder;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
@@ -99,6 +100,7 @@
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.colorextraction.ColorExtractor;
 import com.android.internal.colorextraction.ColorExtractor.GradientColors;
+import com.android.internal.jank.InteractionJankMonitor;
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.UiEvent;
 import com.android.internal.logging.UiEventLogger;
@@ -110,6 +112,7 @@
 import com.android.keyguard.KeyguardUpdateMonitor;
 import com.android.systemui.MultiListLayout;
 import com.android.systemui.MultiListLayout.MultiListAdapter;
+import com.android.systemui.animation.DialogCuj;
 import com.android.systemui.animation.DialogLaunchAnimator;
 import com.android.systemui.animation.Interpolators;
 import com.android.systemui.broadcast.BroadcastDispatcher;
@@ -154,6 +157,8 @@
 
     private static final String TAG = "GlobalActionsDialogLite";
 
+    private static final String INTERACTION_JANK_TAG = "global_actions";
+
     private static final boolean SHOW_SILENT_TOGGLE = true;
 
     /* Valid settings for global actions keys.
@@ -499,7 +504,9 @@
         mDialog.getWindow().addFlags(FLAG_ALT_FOCUSABLE_IM);
 
         if (view != null) {
-            mDialogLaunchAnimator.showFromView(mDialog, view);
+            mDialogLaunchAnimator.showFromView(mDialog, view,
+                    new DialogCuj(InteractionJankMonitor.CUJ_SHADE_DIALOG_OPEN,
+                            INTERACTION_JANK_TAG));
         } else {
             mDialog.show();
         }
@@ -940,7 +947,7 @@
             mHandler.postDelayed(new Runnable() {
                 @Override
                 public void run() {
-                    mScreenshotHelper.takeScreenshot(TAKE_SCREENSHOT_FULLSCREEN, true, true,
+                    mScreenshotHelper.takeScreenshot(TAKE_SCREENSHOT_FULLSCREEN,
                             SCREENSHOT_GLOBAL_ACTIONS, mHandler, null);
                     mMetricsLogger.action(MetricsEvent.ACTION_SCREENSHOT_POWER_MENU);
                     mUiEventLogger.log(GlobalActionsEvent.GA_SCREENSHOT_PRESS);
@@ -1038,7 +1045,8 @@
 
         @Override
         public boolean showBeforeProvisioning() {
-            return false;
+            return Build.isDebuggable() && mGlobalSettings.getInt(
+                    Settings.Global.BUGREPORT_IN_POWER_MENU, 0) != 0;
         }
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java
index a724d87..3eb3c80 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java
@@ -55,6 +55,7 @@
 import android.os.RemoteException;
 import android.os.SystemProperties;
 import android.os.Trace;
+import android.util.ArrayMap;
 import android.util.Log;
 import android.util.Slog;
 import android.view.IRemoteAnimationFinishedCallback;
@@ -157,7 +158,7 @@
             Rect localBounds = new Rect(change.getEndAbsBounds());
             localBounds.offsetTo(change.getEndRelOffset().x, change.getEndRelOffset().y);
 
-            out.add(new RemoteAnimationTarget(
+            final RemoteAnimationTarget target = new RemoteAnimationTarget(
                     taskId,
                     newModeToLegacyMode(change.getMode()),
                     change.getLeash(),
@@ -168,7 +169,15 @@
                     info.getChanges().size() - i,
                     new Point(), localBounds, new Rect(change.getEndAbsBounds()),
                     windowConfiguration, isNotInRecents, null /* startLeash */,
-                    change.getStartAbsBounds(), taskInfo, false /* allowEnterPip */));
+                    change.getStartAbsBounds(), taskInfo, false /* allowEnterPip */);
+            // Use hasAnimatingParent to mark the anything below root task
+            if (taskId != -1 && change.getParent() != null) {
+                final TransitionInfo.Change parentChange = info.getChange(change.getParent());
+                if (parentChange != null && parentChange.getTaskInfo() != null) {
+                    target.hasAnimatingParent = true;
+                }
+            }
+            out.add(target);
         }
         return out.toArray(new RemoteAnimationTarget[out.size()]);
     }
@@ -189,8 +198,12 @@
         }
     }
 
+    // Wrap Keyguard going away animation
     private static IRemoteTransition wrap(IRemoteAnimationRunner runner) {
         return new IRemoteTransition.Stub() {
+            final ArrayMap<IBinder, IRemoteTransitionFinishedCallback> mFinishCallbacks =
+                    new ArrayMap<>();
+
             @Override
             public void startAnimation(IBinder transition, TransitionInfo info,
                     SurfaceControl.Transaction t, IRemoteTransitionFinishedCallback finishCallback)
@@ -200,16 +213,37 @@
                 final RemoteAnimationTarget[] wallpapers = wrap(info, true /* wallpapers */);
                 final RemoteAnimationTarget[] nonApps = new RemoteAnimationTarget[0];
 
-                // TODO: Remove this, and update alpha value in the IAnimationRunner.
-                for (TransitionInfo.Change change : info.getChanges()) {
-                    t.setAlpha(change.getLeash(), 1.0f);
+                // Sets the alpha to 0 for the opening root task for fade in animation. And since
+                // the fade in animation can only apply on the first opening app, so set alpha to 1
+                // for anything else.
+                boolean foundOpening = false;
+                for (RemoteAnimationTarget target : apps) {
+                    if (target.taskId != -1
+                            && target.mode == RemoteAnimationTarget.MODE_OPENING
+                            && !target.hasAnimatingParent) {
+                        if (foundOpening) {
+                            Log.w(TAG, "More than one opening target");
+                            t.setAlpha(target.leash, 1.0f);
+                            continue;
+                        }
+                        t.setAlpha(target.leash, 0.0f);
+                        foundOpening = true;
+                    } else {
+                        t.setAlpha(target.leash, 1.0f);
+                    }
                 }
                 t.apply();
+                synchronized (mFinishCallbacks) {
+                    mFinishCallbacks.put(transition, finishCallback);
+                }
                 runner.onAnimationStart(getTransitionOldType(info.getType(), info.getFlags(), apps),
                         apps, wallpapers, nonApps,
                         new IRemoteAnimationFinishedCallback.Stub() {
                             @Override
                             public void onAnimationFinished() throws RemoteException {
+                                synchronized (mFinishCallbacks) {
+                                    if (mFinishCallbacks.remove(transition) == null) return;
+                                }
                                 Slog.d(TAG, "Finish IRemoteAnimationRunner.");
                                 finishCallback.onTransitionFinished(null /* wct */, null /* t */);
                             }
@@ -220,6 +254,20 @@
             public void mergeAnimation(IBinder transition, TransitionInfo info,
                     SurfaceControl.Transaction t, IBinder mergeTarget,
                     IRemoteTransitionFinishedCallback finishCallback) {
+                try {
+                    final IRemoteTransitionFinishedCallback origFinishCB;
+                    synchronized (mFinishCallbacks) {
+                        origFinishCB = mFinishCallbacks.remove(transition);
+                    }
+                    if (origFinishCB == null) {
+                        // already finished (or not started yet), so do nothing.
+                        return;
+                    }
+                    runner.onAnimationCancelled(false /* isKeyguardOccluded */);
+                    origFinishCB.onTransitionFinished(null /* wct */, null /* t */);
+                } catch (RemoteException e) {
+                    // nothing, we'll just let it finish on its own I guess.
+                }
             }
         };
     }
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt
index 5ffc3f1..c944e50 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt
@@ -26,6 +26,7 @@
 import android.os.RemoteException
 import android.util.Log
 import android.view.RemoteAnimationTarget
+import android.view.SurfaceControl
 import android.view.SyncRtSurfaceTransactionApplier
 import android.view.View
 import androidx.annotation.VisibleForTesting
@@ -293,6 +294,8 @@
 
     private val handler = Handler()
 
+    private val tmpFloat = FloatArray(9)
+
     init {
         with(surfaceBehindAlphaAnimator) {
             duration = SURFACE_BEHIND_SWIPE_FADE_DURATION_MS
@@ -748,13 +751,27 @@
             if (keyguardStateController.isSnappingKeyguardBackAfterSwipe) amount
             else surfaceBehindAlpha
 
-        applyParamsToSurface(
-            SyncRtSurfaceTransactionApplier.SurfaceParams.Builder(
-                surfaceBehindRemoteAnimationTarget!!.leash)
-                .withMatrix(surfaceBehindMatrix)
-                .withCornerRadius(roundedCornerRadius)
-                .withAlpha(animationAlpha)
-                .build())
+        // SyncRtSurfaceTransactionApplier cannot apply transaction when the target view is unable
+        // to draw
+        val sc: SurfaceControl? = surfaceBehindRemoteAnimationTarget?.leash
+        if (keyguardViewController.viewRootImpl.view?.visibility != View.VISIBLE &&
+            sc?.isValid == true) {
+            with(SurfaceControl.Transaction()) {
+                setMatrix(sc, surfaceBehindMatrix, tmpFloat)
+                setCornerRadius(sc, roundedCornerRadius)
+                setAlpha(sc, animationAlpha)
+                apply()
+            }
+        } else {
+            applyParamsToSurface(
+                SyncRtSurfaceTransactionApplier.SurfaceParams.Builder(
+                    surfaceBehindRemoteAnimationTarget!!.leash)
+                    .withMatrix(surfaceBehindMatrix)
+                    .withCornerRadius(roundedCornerRadius)
+                    .withAlpha(animationAlpha)
+                    .build()
+            )
+        }
     }
 
     /**
@@ -769,8 +786,11 @@
         handler.removeCallbacksAndMessages(null)
 
         // Make sure we made the surface behind fully visible, just in case. It should already be
-        // fully visible. If the launcher is doing its own animation, let it continue without
-        // forcing it to 1f.
+        // fully visible. The exit animation is finished, and we should not hold the leash anymore,
+        // so forcing it to 1f.
+        surfaceBehindAlphaAnimator.cancel()
+        surfaceBehindEntryAnimator.cancel()
+        surfaceBehindAlpha = 1f
         setSurfaceBehindAppearAmount(1f)
         launcherUnlockController?.setUnlockAmount(1f, false /* forceIfAnimating */)
 
@@ -941,4 +961,4 @@
             return context.resources.getIntArray(R.array.config_foldedDeviceStates).isNotEmpty()
         }
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index f9b8ce28..dbf218a 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -40,6 +40,7 @@
 import android.app.AlarmManager;
 import android.app.PendingIntent;
 import android.app.StatusBarManager;
+import android.app.WindowConfiguration;
 import android.app.trust.TrustManager;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
@@ -121,6 +122,7 @@
 import com.android.systemui.keyguard.dagger.KeyguardModule;
 import com.android.systemui.navigationbar.NavigationModeController;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.shade.NotificationPanelViewController;
 import com.android.systemui.shared.system.QuickStepContract;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.NotificationShadeDepthController;
@@ -130,7 +132,6 @@
 import com.android.systemui.statusbar.phone.CentralSurfaces;
 import com.android.systemui.statusbar.phone.DozeParameters;
 import com.android.systemui.statusbar.phone.KeyguardBypassController;
-import com.android.systemui.statusbar.phone.NotificationPanelViewController;
 import com.android.systemui.statusbar.phone.ScreenOffAnimationController;
 import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
 import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -555,15 +556,6 @@
         }
 
         @Override
-        public void onUserInfoChanged(int userId) {
-        }
-
-        @Override
-        public void onClockVisibilityChanged() {
-            adjustStatusBarLocked();
-        }
-
-        @Override
         public void onDeviceProvisioned() {
             sendUserPresentBroadcast();
             synchronized (KeyguardViewMediator.this) {
@@ -933,6 +925,8 @@
                     }
 
                     final RemoteAnimationTarget primary = apps[0];
+                    final boolean isDream = (apps[0].taskInfo.topActivityType
+                            == WindowConfiguration.ACTIVITY_TYPE_DREAM);
 
                     final SyncRtSurfaceTransactionApplier applier =
                             new SyncRtSurfaceTransactionApplier(
@@ -954,20 +948,24 @@
 
                                     final float surfaceHeight = primary.screenSpaceBounds.height();
 
-                                    mUnoccludeMatrix.setTranslate(
-                                            0f,
-                                            (1f - animatedValue)
-                                                    * surfaceHeight
-                                                    * UNOCCLUDE_TRANSLATE_DISTANCE_PERCENT);
-
-                                    SyncRtSurfaceTransactionApplier.SurfaceParams params =
+                                    // Fade for all types of activities.
+                                    SyncRtSurfaceTransactionApplier.SurfaceParams.Builder
+                                            paramsBuilder =
                                             new SyncRtSurfaceTransactionApplier.SurfaceParams
                                                     .Builder(primary.leash)
-                                                    .withMatrix(mUnoccludeMatrix)
-                                                    .withCornerRadius(mWindowCornerRadius)
-                                                    .withAlpha(animatedValue)
-                                                    .build();
-                                    applier.scheduleApply(params);
+                                                    .withAlpha(animatedValue);
+                                    // Set translate if the occluding activity isn't Dream.
+                                    if (!isDream) {
+                                        mUnoccludeMatrix.setTranslate(
+                                                0f,
+                                                (1f - animatedValue)
+                                                        * surfaceHeight
+                                                        * UNOCCLUDE_TRANSLATE_DISTANCE_PERCENT);
+
+                                        paramsBuilder.withMatrix(mUnoccludeMatrix).withCornerRadius(
+                                                mWindowCornerRadius);
+                                    }
+                                    applier.scheduleApply(paramsBuilder.build());
                                 });
                         mUnoccludeAnimator.addListener(new AnimatorListenerAdapter() {
                             @Override
@@ -1190,6 +1188,7 @@
             mSystemReady = true;
             doKeyguardLocked(null);
             mUpdateMonitor.registerCallback(mUpdateCallback);
+            adjustStatusBarLocked();
             mDreamOverlayStateController.addCallback(mDreamOverlayStateCallback);
         }
         // Most services aren't available until the system reaches the ready state, so we
@@ -2497,10 +2496,18 @@
                 mInteractionJankMonitor.begin(
                         createInteractionJankMonitorConf("DismissPanel"));
 
+                // Apply the opening animation on root task if exists
+                RemoteAnimationTarget aniTarget = apps[0];
+                for (RemoteAnimationTarget tmpTarget : apps) {
+                    if (tmpTarget.taskId != -1 && !tmpTarget.hasAnimatingParent) {
+                        aniTarget = tmpTarget;
+                        break;
+                    }
+                }
                 // Pass the surface and metadata to the unlock animation controller.
                 mKeyguardUnlockAnimationControllerLazy.get()
                         .notifyStartSurfaceBehindRemoteAnimation(
-                                apps[0], startTime, mSurfaceBehindRemoteAnimationRequested);
+                                aniTarget, startTime, mSurfaceBehindRemoteAnimationRequested);
             } else {
                 mInteractionJankMonitor.begin(
                         createInteractionJankMonitorConf("RemoteAnimationDisabled"));
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java b/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java
index 165af13..4ff008f 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java
@@ -42,6 +42,8 @@
 import com.android.systemui.keyguard.DismissCallbackRegistry;
 import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
 import com.android.systemui.keyguard.KeyguardViewMediator;
+import com.android.systemui.keyguard.data.repository.KeyguardRepositoryModule;
+import com.android.systemui.keyguard.domain.usecase.KeyguardUseCaseModule;
 import com.android.systemui.navigationbar.NavigationModeController;
 import com.android.systemui.statusbar.NotificationShadeDepthController;
 import com.android.systemui.statusbar.NotificationShadeWindowController;
@@ -66,7 +68,11 @@
         KeyguardStatusBarViewComponent.class,
         KeyguardStatusViewComponent.class,
         KeyguardUserSwitcherComponent.class},
-        includes = {FalsingModule.class})
+        includes = {
+            FalsingModule.class,
+            KeyguardRepositoryModule.class,
+            KeyguardUseCaseModule.class,
+        })
 public class KeyguardModule {
     /**
      * Provides our instance of KeyguardViewMediator which is considered optional.
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfig.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfig.kt
new file mode 100644
index 0000000..3202ecb
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfig.kt
@@ -0,0 +1,121 @@
+/*
+ *  Copyright (C) 2022 The Android Open Source Project
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT 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.quickaffordance
+
+import android.content.Context
+import android.content.Intent
+import androidx.annotation.DrawableRes
+import com.android.systemui.animation.ActivityLaunchAnimator
+import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging
+import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow
+import com.android.systemui.containeddrawable.ContainedDrawable
+import com.android.systemui.controls.ControlsServiceInfo
+import com.android.systemui.controls.controller.StructureInfo
+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.dagger.SysUISingleton
+import com.android.systemui.dagger.qualifiers.Application
+import com.android.systemui.util.kotlin.getOrNull
+import javax.inject.Inject
+import kotlinx.coroutines.channels.awaitClose
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.flowOf
+
+/** Home controls quick affordance data source. */
+@SysUISingleton
+class HomeControlsKeyguardQuickAffordanceConfig
+@Inject
+constructor(
+    @Application context: Context,
+    private val component: ControlsComponent,
+) : KeyguardQuickAffordanceConfig {
+
+    private val appContext = context.applicationContext
+
+    override val state: Flow<KeyguardQuickAffordanceConfig.State> =
+        stateInternal(component.getControlsListingController().getOrNull())
+
+    override fun onQuickAffordanceClicked(
+        animationController: ActivityLaunchAnimator.Controller?,
+    ): KeyguardQuickAffordanceConfig.OnClickedResult {
+        return KeyguardQuickAffordanceConfig.OnClickedResult.StartActivity(
+            intent =
+                Intent(appContext, ControlsActivity::class.java)
+                    .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
+                    .putExtra(
+                        ControlsUiController.EXTRA_ANIMATE,
+                        true,
+                    ),
+            canShowWhileLocked = component.canShowWhileLockedSetting.value,
+        )
+    }
+
+    private fun stateInternal(
+        listingController: ControlsListingController?,
+    ): Flow<KeyguardQuickAffordanceConfig.State> {
+        if (listingController == null) {
+            return flowOf(KeyguardQuickAffordanceConfig.State.Hidden)
+        }
+
+        return conflatedCallbackFlow {
+            val callback =
+                object : ControlsListingController.ControlsListingCallback {
+                    override fun onServicesUpdated(serviceInfos: List<ControlsServiceInfo>) {
+                        val favorites: List<StructureInfo>? =
+                            component.getControlsController().getOrNull()?.getFavorites()
+
+                        trySendWithFailureLogging(
+                            state(
+                                isFeatureEnabled = component.isEnabled(),
+                                hasFavorites = favorites?.isNotEmpty() == true,
+                                hasServiceInfos = serviceInfos.isNotEmpty(),
+                                iconResourceId = component.getTileImageId(),
+                            ),
+                            TAG,
+                        )
+                    }
+                }
+
+            listingController.addCallback(callback)
+
+            awaitClose { listingController.removeCallback(callback) }
+        }
+    }
+
+    private fun state(
+        isFeatureEnabled: Boolean,
+        hasFavorites: Boolean,
+        hasServiceInfos: Boolean,
+        @DrawableRes iconResourceId: Int?,
+    ): KeyguardQuickAffordanceConfig.State {
+        return if (isFeatureEnabled && hasFavorites && hasServiceInfos && iconResourceId != null) {
+            KeyguardQuickAffordanceConfig.State.Visible(
+                icon = ContainedDrawable.WithResource(iconResourceId),
+                contentDescriptionResourceId = component.getTileTitleId(),
+            )
+        } else {
+            KeyguardQuickAffordanceConfig.State.Hidden
+        }
+    }
+
+    companion object {
+        private const val TAG = "HomeControlsKeyguardQuickAffordanceConfig"
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceConfig.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceConfig.kt
new file mode 100644
index 0000000..67a776e
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/KeyguardQuickAffordanceConfig.kt
@@ -0,0 +1,73 @@
+/*
+ *  Copyright (C) 2022 The Android Open Source Project
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT 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.quickaffordance
+
+import android.content.Intent
+import androidx.annotation.StringRes
+import com.android.systemui.animation.ActivityLaunchAnimator
+import com.android.systemui.containeddrawable.ContainedDrawable
+import kotlinx.coroutines.flow.Flow
+
+/** Defines interface that can act as data source for a single quick affordance model. */
+interface KeyguardQuickAffordanceConfig {
+
+    val state: Flow<State>
+
+    fun onQuickAffordanceClicked(
+        animationController: ActivityLaunchAnimator.Controller?
+    ): OnClickedResult
+
+    /**
+     * Encapsulates the state of a "quick affordance" in the keyguard bottom area (for example, a
+     * button on the lock-screen).
+     */
+    sealed class State {
+
+        /** No affordance should show up. */
+        object Hidden : State()
+
+        /** An affordance is visible. */
+        data class Visible(
+            /** An icon for the affordance. */
+            val icon: ContainedDrawable,
+            /**
+             * Resource ID for a string to use for the accessibility content description text of the
+             * affordance.
+             */
+            @StringRes val contentDescriptionResourceId: Int,
+        ) : State()
+    }
+
+    sealed class OnClickedResult {
+        /**
+         * Returning this as a result from the [onQuickAffordanceClicked] method means that the
+         * implementation has taken care of the click, the system will do nothing.
+         */
+        object Handled : OnClickedResult()
+
+        /**
+         * Returning this as a result from the [onQuickAffordanceClicked] method means that the
+         * implementation has _not_ taken care of the click and the system should start an activity
+         * using the given [Intent].
+         */
+        data class StartActivity(
+            val intent: Intent,
+            val canShowWhileLocked: Boolean,
+        ) : OnClickedResult()
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/QrCodeScannerKeyguardQuickAffordanceConfig.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/QrCodeScannerKeyguardQuickAffordanceConfig.kt
new file mode 100644
index 0000000..ea6497e
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/QrCodeScannerKeyguardQuickAffordanceConfig.kt
@@ -0,0 +1,90 @@
+/*
+ *  Copyright (C) 2022 The Android Open Source Project
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT 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.quickaffordance
+
+import com.android.systemui.R
+import com.android.systemui.animation.ActivityLaunchAnimator
+import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging
+import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow
+import com.android.systemui.containeddrawable.ContainedDrawable
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.qrcodescanner.controller.QRCodeScannerController
+import javax.inject.Inject
+import kotlinx.coroutines.channels.awaitClose
+import kotlinx.coroutines.flow.Flow
+
+/** QR code scanner quick affordance data source. */
+@SysUISingleton
+class QrCodeScannerKeyguardQuickAffordanceConfig
+@Inject
+constructor(
+    private val controller: QRCodeScannerController,
+) : KeyguardQuickAffordanceConfig {
+
+    override val state: Flow<KeyguardQuickAffordanceConfig.State> = conflatedCallbackFlow {
+        val callback =
+            object : QRCodeScannerController.Callback {
+                override fun onQRCodeScannerActivityChanged() {
+                    trySendWithFailureLogging(state(), TAG)
+                }
+                override fun onQRCodeScannerPreferenceChanged() {
+                    trySendWithFailureLogging(state(), TAG)
+                }
+            }
+
+        controller.addCallback(callback)
+        controller.registerQRCodeScannerChangeObservers(
+            QRCodeScannerController.DEFAULT_QR_CODE_SCANNER_CHANGE,
+            QRCodeScannerController.QR_CODE_SCANNER_PREFERENCE_CHANGE
+        )
+        // Registering does not push an initial update.
+        trySendWithFailureLogging(state(), "initial state", TAG)
+
+        awaitClose {
+            controller.unregisterQRCodeScannerChangeObservers(
+                QRCodeScannerController.DEFAULT_QR_CODE_SCANNER_CHANGE,
+                QRCodeScannerController.QR_CODE_SCANNER_PREFERENCE_CHANGE
+            )
+            controller.removeCallback(callback)
+        }
+    }
+
+    override fun onQuickAffordanceClicked(
+        animationController: ActivityLaunchAnimator.Controller?,
+    ): KeyguardQuickAffordanceConfig.OnClickedResult {
+        return KeyguardQuickAffordanceConfig.OnClickedResult.StartActivity(
+            intent = controller.intent,
+            canShowWhileLocked = true,
+        )
+    }
+
+    private fun state(): KeyguardQuickAffordanceConfig.State {
+        return if (controller.isEnabledForLockScreenButton) {
+            KeyguardQuickAffordanceConfig.State.Visible(
+                icon = ContainedDrawable.WithResource(R.drawable.ic_qr_code_scanner),
+                contentDescriptionResourceId = R.string.accessibility_qr_code_scanner_button,
+            )
+        } else {
+            KeyguardQuickAffordanceConfig.State.Hidden
+        }
+    }
+
+    companion object {
+        private const val TAG = "QrCodeScannerKeyguardQuickAffordanceConfig"
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/QuickAccessWalletKeyguardQuickAffordanceConfig.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/QuickAccessWalletKeyguardQuickAffordanceConfig.kt
new file mode 100644
index 0000000..cc5a997
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/QuickAccessWalletKeyguardQuickAffordanceConfig.kt
@@ -0,0 +1,114 @@
+/*
+ *  Copyright (C) 2022 The Android Open Source Project
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT 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.quickaffordance
+
+import android.graphics.drawable.Drawable
+import android.service.quickaccesswallet.GetWalletCardsError
+import android.service.quickaccesswallet.GetWalletCardsResponse
+import android.service.quickaccesswallet.QuickAccessWalletClient
+import android.util.Log
+import com.android.systemui.R
+import com.android.systemui.animation.ActivityLaunchAnimator
+import com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging
+import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow
+import com.android.systemui.containeddrawable.ContainedDrawable
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.plugins.ActivityStarter
+import com.android.systemui.wallet.controller.QuickAccessWalletController
+import javax.inject.Inject
+import kotlinx.coroutines.channels.awaitClose
+import kotlinx.coroutines.flow.Flow
+
+/** Quick access wallet quick affordance data source. */
+@SysUISingleton
+class QuickAccessWalletKeyguardQuickAffordanceConfig
+@Inject
+constructor(
+    private val walletController: QuickAccessWalletController,
+    private val activityStarter: ActivityStarter,
+) : KeyguardQuickAffordanceConfig {
+
+    override val state: Flow<KeyguardQuickAffordanceConfig.State> = conflatedCallbackFlow {
+        val callback =
+            object : QuickAccessWalletClient.OnWalletCardsRetrievedCallback {
+                override fun onWalletCardsRetrieved(response: GetWalletCardsResponse?) {
+                    trySendWithFailureLogging(
+                        state(
+                            isFeatureEnabled = walletController.isWalletEnabled,
+                            hasCard = response?.walletCards?.isNotEmpty() == true,
+                            tileIcon = walletController.walletClient.tileIcon,
+                        ),
+                        TAG,
+                    )
+                }
+
+                override fun onWalletCardRetrievalError(error: GetWalletCardsError?) {
+                    Log.e(TAG, "Wallet card retrieval error, message: \"${error?.message}\"")
+                    trySendWithFailureLogging(
+                        KeyguardQuickAffordanceConfig.State.Hidden,
+                        TAG,
+                    )
+                }
+            }
+
+        walletController.setupWalletChangeObservers(
+            callback,
+            QuickAccessWalletController.WalletChangeEvent.WALLET_PREFERENCE_CHANGE,
+            QuickAccessWalletController.WalletChangeEvent.DEFAULT_PAYMENT_APP_CHANGE
+        )
+        walletController.updateWalletPreference()
+        walletController.queryWalletCards(callback)
+
+        awaitClose {
+            walletController.unregisterWalletChangeObservers(
+                QuickAccessWalletController.WalletChangeEvent.WALLET_PREFERENCE_CHANGE,
+                QuickAccessWalletController.WalletChangeEvent.DEFAULT_PAYMENT_APP_CHANGE
+            )
+        }
+    }
+
+    override fun onQuickAffordanceClicked(
+        animationController: ActivityLaunchAnimator.Controller?,
+    ): KeyguardQuickAffordanceConfig.OnClickedResult {
+        walletController.startQuickAccessUiIntent(
+            activityStarter,
+            animationController,
+            /* hasCard= */ true,
+        )
+        return KeyguardQuickAffordanceConfig.OnClickedResult.Handled
+    }
+
+    private fun state(
+        isFeatureEnabled: Boolean,
+        hasCard: Boolean,
+        tileIcon: Drawable?,
+    ): KeyguardQuickAffordanceConfig.State {
+        return if (isFeatureEnabled && hasCard && tileIcon != null) {
+            KeyguardQuickAffordanceConfig.State.Visible(
+                icon = ContainedDrawable.WithDrawable(tileIcon),
+                contentDescriptionResourceId = R.string.accessibility_wallet_button,
+            )
+        } else {
+            KeyguardQuickAffordanceConfig.State.Hidden
+        }
+    }
+
+    companion object {
+        private const val TAG = "QuickAccessWalletKeyguardQuickAffordanceConfig"
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardQuickAffordanceConfigs.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardQuickAffordanceConfigs.kt
new file mode 100644
index 0000000..7164215
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardQuickAffordanceConfigs.kt
@@ -0,0 +1,67 @@
+/*
+ *  Copyright (C) 2022 The Android Open Source Project
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT 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.config
+
+import com.android.systemui.keyguard.data.quickaffordance.HomeControlsKeyguardQuickAffordanceConfig
+import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceConfig
+import com.android.systemui.keyguard.data.quickaffordance.QrCodeScannerKeyguardQuickAffordanceConfig
+import com.android.systemui.keyguard.data.quickaffordance.QuickAccessWalletKeyguardQuickAffordanceConfig
+import com.android.systemui.keyguard.shared.model.KeyguardQuickAffordancePosition
+import javax.inject.Inject
+import kotlin.reflect.KClass
+
+/** Injectable provider of the positioning of the known quick affordance configs. */
+interface KeyguardQuickAffordanceConfigs {
+    fun getAll(position: KeyguardQuickAffordancePosition): List<KeyguardQuickAffordanceConfig>
+    fun get(configClass: KClass<out KeyguardQuickAffordanceConfig>): KeyguardQuickAffordanceConfig
+}
+
+class KeyguardQuickAffordanceConfigsImpl
+@Inject
+constructor(
+    homeControls: HomeControlsKeyguardQuickAffordanceConfig,
+    quickAccessWallet: QuickAccessWalletKeyguardQuickAffordanceConfig,
+    qrCodeScanner: QrCodeScannerKeyguardQuickAffordanceConfig,
+) : KeyguardQuickAffordanceConfigs {
+    private val configsByPosition =
+        mapOf(
+            KeyguardQuickAffordancePosition.BOTTOM_START to
+                listOf(
+                    homeControls,
+                ),
+            KeyguardQuickAffordancePosition.BOTTOM_END to
+                listOf(
+                    quickAccessWallet,
+                    qrCodeScanner,
+                ),
+        )
+    private val configByClass =
+        configsByPosition.values.flatten().associateBy { config -> config::class }
+
+    override fun getAll(
+        position: KeyguardQuickAffordancePosition,
+    ): List<KeyguardQuickAffordanceConfig> {
+        return configsByPosition.getValue(position)
+    }
+
+    override fun get(
+        configClass: KClass<out KeyguardQuickAffordanceConfig>
+    ): KeyguardQuickAffordanceConfig {
+        return configByClass.getValue(configClass)
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardQuickAffordanceRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardQuickAffordanceRepository.kt
new file mode 100644
index 0000000..43c4fa0
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardQuickAffordanceRepository.kt
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.keyguard.data.config.KeyguardQuickAffordanceConfigs
+import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceConfig.State
+import com.android.systemui.keyguard.shared.model.KeyguardQuickAffordanceModel
+import com.android.systemui.keyguard.shared.model.KeyguardQuickAffordancePosition
+import javax.inject.Inject
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.combine
+
+/** Defines interface for classes that encapsulate quick affordance state for the keyguard. */
+interface KeyguardQuickAffordanceRepository {
+    fun affordance(position: KeyguardQuickAffordancePosition): Flow<KeyguardQuickAffordanceModel>
+}
+
+/** Real implementation of [KeyguardQuickAffordanceRepository] */
+@SysUISingleton
+class KeyguardQuickAffordanceRepositoryImpl
+@Inject
+constructor(
+    private val configs: KeyguardQuickAffordanceConfigs,
+) : KeyguardQuickAffordanceRepository {
+
+    /** Returns an observable for the quick affordance model in the given position. */
+    override fun affordance(
+        position: KeyguardQuickAffordancePosition
+    ): Flow<KeyguardQuickAffordanceModel> {
+        val configs = configs.getAll(position)
+        return combine(configs.map { config -> config.state }) { states ->
+            val index = states.indexOfFirst { state -> state is State.Visible }
+            val visibleState =
+                if (index != -1) {
+                    states[index] as State.Visible
+                } else {
+                    null
+                }
+            if (visibleState != null) {
+                KeyguardQuickAffordanceModel.Visible(
+                    configKey = configs[index]::class,
+                    icon = visibleState.icon,
+                    contentDescriptionResourceId = visibleState.contentDescriptionResourceId,
+                )
+            } else {
+                KeyguardQuickAffordanceModel.Hidden
+            }
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt
new file mode 100644
index 0000000..62cf1a6
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt
@@ -0,0 +1,181 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 com.android.systemui.common.coroutine.ChannelExt.trySendWithFailureLogging
+import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow
+import com.android.systemui.common.data.model.Position
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.plugins.statusbar.StatusBarStateController
+import com.android.systemui.statusbar.policy.KeyguardStateController
+import javax.inject.Inject
+import kotlinx.coroutines.channels.awaitClose
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.flow.asStateFlow
+
+/** Defines interface for classes that encapsulate application state for the keyguard. */
+interface KeyguardRepository {
+    /**
+     * Observable for whether the bottom area UI should animate the transition out of doze state.
+     *
+     * To learn more about doze state, please see [isDozing].
+     */
+    val animateBottomAreaDozingTransitions: StateFlow<Boolean>
+
+    /**
+     * Observable for the current amount of alpha that should be used for rendering the bottom area.
+     * UI.
+     */
+    val bottomAreaAlpha: StateFlow<Float>
+
+    /**
+     * Observable of the relative offset of the lock-screen clock from its natural position on the
+     * screen.
+     */
+    val clockPosition: StateFlow<Position>
+
+    /**
+     * Observable for whether the keyguard is showing.
+     *
+     * Note: this is also `true` when the lock-screen is occluded with an `Activity` "above" it in
+     * the z-order (which is not really above the system UI window, but rather - the lock-screen
+     * becomes invisible to reveal the "occluding activity").
+     */
+    val isKeyguardShowing: Flow<Boolean>
+
+    /**
+     * Observable for whether we are in doze state.
+     *
+     * Doze state is the same as "Always on Display" or "AOD". It is the state that the device can
+     * enter to conserve battery when the device is locked and inactive.
+     *
+     * Note that it is possible for the system to be transitioning into doze while this flow still
+     * returns `false`. In order to account for that, observers should also use the [dozeAmount]
+     * flow to check if it's greater than `0`
+     */
+    val isDozing: Flow<Boolean>
+
+    /**
+     * Observable for the amount of doze we are currently in.
+     *
+     * While in doze state, this amount can change - driving a cycle of animations designed to avoid
+     * pixel burn-in, etc.
+     *
+     * Also note that the value here may be greater than `0` while [isDozing] is still `false`, this
+     * happens during an animation/transition into doze mode. An observer would be wise to account
+     * for both flows if needed.
+     */
+    val dozeAmount: Flow<Float>
+
+    /** Sets whether the bottom area UI should animate the transition out of doze state. */
+    fun setAnimateDozingTransitions(animate: Boolean)
+
+    /** Sets the current amount of alpha that should be used for rendering the bottom area. */
+    fun setBottomAreaAlpha(alpha: Float)
+
+    /**
+     * Sets the relative offset of the lock-screen clock from its natural position on the screen.
+     */
+    fun setClockPosition(x: Int, y: Int)
+}
+
+/** Encapsulates application state for the keyguard. */
+@SysUISingleton
+class KeyguardRepositoryImpl
+@Inject
+constructor(
+    statusBarStateController: StatusBarStateController,
+    keyguardStateController: KeyguardStateController,
+) : KeyguardRepository {
+    private val _animateBottomAreaDozingTransitions = MutableStateFlow(false)
+    override val animateBottomAreaDozingTransitions =
+        _animateBottomAreaDozingTransitions.asStateFlow()
+
+    private val _bottomAreaAlpha = MutableStateFlow(1f)
+    override val bottomAreaAlpha = _bottomAreaAlpha.asStateFlow()
+
+    private val _clockPosition = MutableStateFlow(Position(0, 0))
+    override val clockPosition = _clockPosition.asStateFlow()
+
+    override val isKeyguardShowing: Flow<Boolean> = conflatedCallbackFlow {
+        val callback =
+            object : KeyguardStateController.Callback {
+                override fun onKeyguardShowingChanged() {
+                    trySendWithFailureLogging(
+                        keyguardStateController.isShowing,
+                        TAG,
+                        "updated isKeyguardShowing"
+                    )
+                }
+            }
+
+        keyguardStateController.addCallback(callback)
+        // Adding the callback does not send an initial update.
+        trySendWithFailureLogging(
+            keyguardStateController.isShowing,
+            TAG,
+            "initial isKeyguardShowing"
+        )
+
+        awaitClose { keyguardStateController.removeCallback(callback) }
+    }
+
+    override val isDozing: Flow<Boolean> = conflatedCallbackFlow {
+        val callback =
+            object : StatusBarStateController.StateListener {
+                override fun onDozingChanged(isDozing: Boolean) {
+                    trySendWithFailureLogging(isDozing, TAG, "updated isDozing")
+                }
+            }
+
+        statusBarStateController.addCallback(callback)
+        trySendWithFailureLogging(statusBarStateController.isDozing, TAG, "initial isDozing")
+
+        awaitClose { statusBarStateController.removeCallback(callback) }
+    }
+    override val dozeAmount: Flow<Float> = conflatedCallbackFlow {
+        val callback =
+            object : StatusBarStateController.StateListener {
+                override fun onDozeAmountChanged(linear: Float, eased: Float) {
+                    trySendWithFailureLogging(eased, TAG, "updated dozeAmount")
+                }
+            }
+
+        statusBarStateController.addCallback(callback)
+        trySendWithFailureLogging(statusBarStateController.dozeAmount, TAG, "initial dozeAmount")
+
+        awaitClose { statusBarStateController.removeCallback(callback) }
+    }
+
+    override fun setAnimateDozingTransitions(animate: Boolean) {
+        _animateBottomAreaDozingTransitions.value = animate
+    }
+
+    override fun setBottomAreaAlpha(alpha: Float) {
+        _bottomAreaAlpha.value = alpha
+    }
+
+    override fun setClockPosition(x: Int, y: Int) {
+        _clockPosition.value = Position(x, y)
+    }
+
+    companion object {
+        private const val TAG = "KeyguardRepositoryImpl"
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepositoryModule.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepositoryModule.kt
new file mode 100644
index 0000000..1a5670c
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepositoryModule.kt
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 com.android.systemui.keyguard.data.config.KeyguardQuickAffordanceConfigs
+import com.android.systemui.keyguard.data.config.KeyguardQuickAffordanceConfigsImpl
+import dagger.Binds
+import dagger.Module
+
+@Module
+interface KeyguardRepositoryModule {
+    @Binds fun keyguardRepository(impl: KeyguardRepositoryImpl): KeyguardRepository
+
+    @Binds
+    fun keyguardQuickAffordanceRepository(
+        impl: KeyguardQuickAffordanceRepositoryImpl
+    ): KeyguardQuickAffordanceRepository
+
+    @Binds
+    fun keyguardQuickAffordanceConfigs(
+        impl: KeyguardQuickAffordanceConfigsImpl
+    ): KeyguardQuickAffordanceConfigs
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/KeyguardUseCaseModule.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/KeyguardUseCaseModule.kt
new file mode 100644
index 0000000..c44c2c9
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/KeyguardUseCaseModule.kt
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.usecase
+
+import dagger.Binds
+import dagger.Module
+
+@Module
+interface KeyguardUseCaseModule {
+
+    @Binds
+    fun launchQuickAffordance(
+        impl: LaunchKeyguardQuickAffordanceUseCaseImpl
+    ): LaunchKeyguardQuickAffordanceUseCase
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/LaunchKeyguardQuickAffordanceUseCase.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/LaunchKeyguardQuickAffordanceUseCase.kt
new file mode 100644
index 0000000..3d60399
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/LaunchKeyguardQuickAffordanceUseCase.kt
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.usecase
+
+import android.content.Intent
+import com.android.internal.widget.LockPatternUtils
+import com.android.internal.widget.LockPatternUtils.StrongAuthTracker.StrongAuthFlags
+import com.android.systemui.animation.ActivityLaunchAnimator
+import com.android.systemui.plugins.ActivityStarter
+import com.android.systemui.settings.UserTracker
+import com.android.systemui.statusbar.policy.KeyguardStateController
+import javax.inject.Inject
+
+/** Defines interface for classes that can launch a quick affordance. */
+interface LaunchKeyguardQuickAffordanceUseCase {
+    operator fun invoke(
+        intent: Intent,
+        canShowWhileLocked: Boolean,
+        animationController: ActivityLaunchAnimator.Controller?,
+    )
+}
+
+/** Real implementation of [LaunchKeyguardQuickAffordanceUseCase] */
+class LaunchKeyguardQuickAffordanceUseCaseImpl
+@Inject
+constructor(
+    private val lockPatternUtils: LockPatternUtils,
+    private val keyguardStateController: KeyguardStateController,
+    private val userTracker: UserTracker,
+    private val activityStarter: ActivityStarter,
+) : LaunchKeyguardQuickAffordanceUseCase {
+    override operator fun invoke(
+        intent: Intent,
+        canShowWhileLocked: Boolean,
+        animationController: ActivityLaunchAnimator.Controller?,
+    ) {
+        @StrongAuthFlags
+        val strongAuthFlags =
+            lockPatternUtils.getStrongAuthForUser(userTracker.userHandle.identifier)
+        val needsToUnlockFirst =
+            when {
+                strongAuthFlags ==
+                    LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_BOOT -> true
+                !canShowWhileLocked && !keyguardStateController.isUnlocked -> true
+                else -> false
+            }
+        if (needsToUnlockFirst) {
+            activityStarter.postStartActivityDismissingKeyguard(
+                intent,
+                0 /* delay */,
+                animationController
+            )
+        } else {
+            activityStarter.startActivity(
+                intent,
+                true /* dismissShade */,
+                animationController,
+                true /* showOverLockscreenWhenLocked */,
+            )
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/ObserveAnimateBottomAreaTransitionsUseCase.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/ObserveAnimateBottomAreaTransitionsUseCase.kt
new file mode 100644
index 0000000..ca37727
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/ObserveAnimateBottomAreaTransitionsUseCase.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.usecase
+
+import com.android.systemui.keyguard.data.repository.KeyguardRepository
+import javax.inject.Inject
+import kotlinx.coroutines.flow.Flow
+
+/** Use-case for observing whether doze state transitions should animate the bottom area */
+class ObserveAnimateBottomAreaTransitionsUseCase
+@Inject
+constructor(
+    private val repository: KeyguardRepository,
+) {
+    operator fun invoke(): Flow<Boolean> {
+        return repository.animateBottomAreaDozingTransitions
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/ObserveBottomAreaAlphaUseCase.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/ObserveBottomAreaAlphaUseCase.kt
new file mode 100644
index 0000000..151b704
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/ObserveBottomAreaAlphaUseCase.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.usecase
+
+import com.android.systemui.keyguard.data.repository.KeyguardRepository
+import javax.inject.Inject
+import kotlinx.coroutines.flow.Flow
+
+/** Use-case for observing the alpha of the bottom area */
+class ObserveBottomAreaAlphaUseCase
+@Inject
+constructor(
+    private val repository: KeyguardRepository,
+) {
+    operator fun invoke(): Flow<Float> {
+        return repository.bottomAreaAlpha
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/ObserveClockPositionUseCase.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/ObserveClockPositionUseCase.kt
new file mode 100644
index 0000000..02c5737
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/ObserveClockPositionUseCase.kt
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.usecase
+
+import com.android.systemui.common.domain.model.Position
+import com.android.systemui.common.domain.model.Position.Companion.toDomainLayer
+import com.android.systemui.keyguard.data.repository.KeyguardRepository
+import javax.inject.Inject
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.map
+
+/** Use-case for observing the position of the clock. */
+class ObserveClockPositionUseCase
+@Inject
+constructor(
+    private val repository: KeyguardRepository,
+) {
+    operator fun invoke(): Flow<Position> {
+        return repository.clockPosition.map { it.toDomainLayer() }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/ObserveDozeAmountUseCase.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/ObserveDozeAmountUseCase.kt
new file mode 100644
index 0000000..56d6182
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/ObserveDozeAmountUseCase.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.usecase
+
+import com.android.systemui.keyguard.data.repository.KeyguardRepository
+import javax.inject.Inject
+import kotlinx.coroutines.flow.Flow
+
+/** Use-case for observing the amount of doze the system is in. */
+class ObserveDozeAmountUseCase
+@Inject
+constructor(
+    private val repository: KeyguardRepository,
+) {
+    operator fun invoke(): Flow<Float> {
+        return repository.dozeAmount
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/ObserveIsDozingUseCase.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/ObserveIsDozingUseCase.kt
new file mode 100644
index 0000000..1d241d9
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/ObserveIsDozingUseCase.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.usecase
+
+import com.android.systemui.keyguard.data.repository.KeyguardRepository
+import javax.inject.Inject
+import kotlinx.coroutines.flow.Flow
+
+/** Use-case for observing whether we are dozing. */
+class ObserveIsDozingUseCase
+@Inject
+constructor(
+    private val repository: KeyguardRepository,
+) {
+    operator fun invoke(): Flow<Boolean> {
+        return repository.isDozing
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/ObserveIsKeyguardShowingUseCase.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/ObserveIsKeyguardShowingUseCase.kt
new file mode 100644
index 0000000..11af123
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/ObserveIsKeyguardShowingUseCase.kt
@@ -0,0 +1,39 @@
+/*
+ *  Copyright (C) 2022 The Android Open Source Project
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT 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.usecase
+
+import com.android.systemui.keyguard.data.repository.KeyguardRepository
+import javax.inject.Inject
+import kotlinx.coroutines.flow.Flow
+
+/**
+ * Use-case for observing whether the keyguard is currently being shown.
+ *
+ * Note: this is also `true` when the lock-screen is occluded with an `Activity` "above" it in the
+ * z-order (which is not really above the system UI window, but rather - the lock-screen becomes
+ * invisible to reveal the "occluding activity").
+ */
+class ObserveIsKeyguardShowingUseCase
+@Inject
+constructor(
+    private val repository: KeyguardRepository,
+) {
+    operator fun invoke(): Flow<Boolean> {
+        return repository.isKeyguardShowing
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/ObserveKeyguardQuickAffordanceUseCase.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/ObserveKeyguardQuickAffordanceUseCase.kt
new file mode 100644
index 0000000..eef8ec3
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/ObserveKeyguardQuickAffordanceUseCase.kt
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.usecase
+
+import com.android.systemui.keyguard.data.repository.KeyguardQuickAffordanceRepository
+import com.android.systemui.keyguard.shared.model.KeyguardQuickAffordanceModel
+import com.android.systemui.keyguard.shared.model.KeyguardQuickAffordancePosition
+import javax.inject.Inject
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.combine
+
+/** Use-case for observing the model of a quick affordance in the keyguard. */
+class ObserveKeyguardQuickAffordanceUseCase
+@Inject
+constructor(
+    private val repository: KeyguardQuickAffordanceRepository,
+    private val isDozingUseCase: ObserveIsDozingUseCase,
+    private val isKeyguardShowingUseCase: ObserveIsKeyguardShowingUseCase,
+) {
+    operator fun invoke(
+        position: KeyguardQuickAffordancePosition
+    ): Flow<KeyguardQuickAffordanceModel> {
+        return combine(
+            repository.affordance(position),
+            isDozingUseCase(),
+            isKeyguardShowingUseCase(),
+        ) { affordance, isDozing, isKeyguardShowing ->
+            if (!isDozing && isKeyguardShowing) {
+                affordance
+            } else {
+                KeyguardQuickAffordanceModel.Hidden
+            }
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/OnKeyguardQuickAffordanceClickedUseCase.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/OnKeyguardQuickAffordanceClickedUseCase.kt
new file mode 100644
index 0000000..f8db90f
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/OnKeyguardQuickAffordanceClickedUseCase.kt
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.usecase
+
+import com.android.systemui.animation.ActivityLaunchAnimator
+import com.android.systemui.keyguard.data.config.KeyguardQuickAffordanceConfigs
+import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceConfig
+import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceConfig.OnClickedResult
+import javax.inject.Inject
+import kotlin.reflect.KClass
+
+/** Use-case for handling a click on a keyguard quick affordance (e.g. bottom button). */
+class OnKeyguardQuickAffordanceClickedUseCase
+@Inject
+constructor(
+    private val configs: KeyguardQuickAffordanceConfigs,
+    private val launchAffordanceUseCase: LaunchKeyguardQuickAffordanceUseCase,
+) {
+    operator fun invoke(
+        configKey: KClass<*>,
+        animationController: ActivityLaunchAnimator.Controller?,
+    ) {
+        @Suppress("UNCHECKED_CAST")
+        val config = configs.get(configKey as KClass<out KeyguardQuickAffordanceConfig>)
+        when (val result = config.onQuickAffordanceClicked(animationController)) {
+            is OnClickedResult.StartActivity ->
+                launchAffordanceUseCase(
+                    intent = result.intent,
+                    canShowWhileLocked = result.canShowWhileLocked,
+                    animationController = animationController
+                )
+            is OnClickedResult.Handled -> Unit
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/SetClockPositionUseCase.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/SetClockPositionUseCase.kt
new file mode 100644
index 0000000..8f746e5
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/SetClockPositionUseCase.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.usecase
+
+import com.android.systemui.keyguard.data.repository.KeyguardRepository
+import javax.inject.Inject
+
+/** Use-case for setting the updated clock position. */
+class SetClockPositionUseCase
+@Inject
+constructor(
+    private val keyguardRepository: KeyguardRepository,
+) {
+    operator fun invoke(x: Int, y: Int) {
+        keyguardRepository.setClockPosition(x, y)
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/SetKeyguardBottomAreaAlphaUseCase.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/SetKeyguardBottomAreaAlphaUseCase.kt
new file mode 100644
index 0000000..90be1ec
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/SetKeyguardBottomAreaAlphaUseCase.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.usecase
+
+import com.android.systemui.keyguard.data.repository.KeyguardRepository
+import javax.inject.Inject
+
+/** Use-case for setting the alpha that the keyguard bottom area should use */
+class SetKeyguardBottomAreaAlphaUseCase
+@Inject
+constructor(
+    private val repository: KeyguardRepository,
+) {
+    operator fun invoke(alpha: Float) {
+        repository.setBottomAreaAlpha(alpha)
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/SetKeyguardBottomAreaAnimateDozingTransitionsUseCase.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/SetKeyguardBottomAreaAnimateDozingTransitionsUseCase.kt
new file mode 100644
index 0000000..007780a
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/usecase/SetKeyguardBottomAreaAnimateDozingTransitionsUseCase.kt
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.keyguard.domain.usecase
+
+import com.android.systemui.keyguard.data.repository.KeyguardRepository
+import javax.inject.Inject
+
+/**
+ * Use-case for setting whether the keyguard bottom area should animate the next doze transitions
+ */
+class SetKeyguardBottomAreaAnimateDozingTransitionsUseCase
+@Inject
+constructor(
+    private val repository: KeyguardRepository,
+) {
+    operator fun invoke(animate: Boolean) {
+        repository.setAnimateDozingTransitions(animate)
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/KeyguardQuickAffordanceModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/KeyguardQuickAffordanceModel.kt
new file mode 100644
index 0000000..09785df
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/KeyguardQuickAffordanceModel.kt
@@ -0,0 +1,46 @@
+/*
+ *  Copyright (C) 2022 The Android Open Source Project
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT 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.shared.model
+
+import androidx.annotation.StringRes
+import com.android.systemui.containeddrawable.ContainedDrawable
+import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceConfig
+import kotlin.reflect.KClass
+
+/**
+ * Models a "quick affordance" in the keyguard bottom area (for example, a button on the
+ * lock-screen).
+ */
+sealed class KeyguardQuickAffordanceModel {
+
+    /** No affordance should show up. */
+    object Hidden : KeyguardQuickAffordanceModel()
+
+    /** A affordance is visible. */
+    data class Visible(
+        /** Identifier for the affordance this is modeling. */
+        val configKey: KClass<out KeyguardQuickAffordanceConfig>,
+        /** An icon for the affordance. */
+        val icon: ContainedDrawable,
+        /**
+         * Resource ID for a string to use for the accessibility content description text of the
+         * affordance.
+         */
+        @StringRes val contentDescriptionResourceId: Int,
+    ) : KeyguardQuickAffordanceModel()
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/KeyguardQuickAffordancePosition.kt b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/KeyguardQuickAffordancePosition.kt
new file mode 100644
index 0000000..b71e15d
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/KeyguardQuickAffordancePosition.kt
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.shared.model
+
+/** Enumerates all possible positions for quick affordances that can appear on the lock-screen. */
+enum class KeyguardQuickAffordancePosition {
+    BOTTOM_START,
+    BOTTOM_END,
+}
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
new file mode 100644
index 0000000..04d30bf
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBottomAreaViewBinder.kt
@@ -0,0 +1,307 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.ui.binder
+
+import android.util.Size
+import android.util.TypedValue
+import android.view.View
+import android.view.ViewGroup
+import android.view.ViewPropertyAnimator
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.core.view.isVisible
+import androidx.core.view.updateLayoutParams
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.repeatOnLifecycle
+import com.android.settingslib.Utils
+import com.android.systemui.R
+import com.android.systemui.animation.ActivityLaunchAnimator
+import com.android.systemui.animation.Interpolators
+import com.android.systemui.containeddrawable.ContainedDrawable
+import com.android.systemui.keyguard.ui.viewmodel.KeyguardBottomAreaViewModel
+import com.android.systemui.keyguard.ui.viewmodel.KeyguardQuickAffordanceViewModel
+import com.android.systemui.lifecycle.repeatWhenAttached
+import com.android.systemui.plugins.FalsingManager
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.collect
+import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.flatMapLatest
+import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.launch
+
+/**
+ * Binds a keyguard bottom area view to its view-model.
+ *
+ * To use this properly, users should maintain a one-to-one relationship between the [View] and the
+ * view-binding, binding each view only once. It is okay and expected for the same instance of the
+ * view-model to be reused for multiple view/view-binder bindings.
+ */
+object KeyguardBottomAreaViewBinder {
+
+    private const val EXIT_DOZE_BUTTON_REVEAL_ANIMATION_DURATION_MS = 250L
+
+    /**
+     * Defines interface for an object that acts as the binding between the view and its view-model.
+     *
+     * Users of the [KeyguardBottomAreaViewBinder] class should use this to control the binder after
+     * it is bound.
+     */
+    interface Binding {
+        /**
+         * Returns a collection of [ViewPropertyAnimator] instances that can be used to animate the
+         * indication areas.
+         */
+        fun getIndicationAreaAnimators(): List<ViewPropertyAnimator>
+
+        /** Notifies that device configuration has changed. */
+        fun onConfigurationChanged()
+    }
+
+    /** Binds the view to the view-model, continuing to update the former based on the latter. */
+    @JvmStatic
+    fun bind(
+        view: ViewGroup,
+        viewModel: KeyguardBottomAreaViewModel,
+        falsingManager: FalsingManager,
+    ): Binding {
+        val indicationArea: View = view.requireViewById(R.id.keyguard_indication_area)
+        val ambientIndicationArea: View? = view.findViewById(R.id.ambient_indication_container)
+        val startButton: ImageView = view.requireViewById(R.id.start_button)
+        val endButton: ImageView = view.requireViewById(R.id.end_button)
+        val overlayContainer: View = view.requireViewById(R.id.overlay_container)
+        val indicationText: TextView = view.requireViewById(R.id.keyguard_indication_text)
+        val indicationTextBottom: TextView =
+            view.requireViewById(R.id.keyguard_indication_text_bottom)
+
+        view.clipChildren = false
+        view.clipToPadding = false
+
+        val configurationBasedDimensions = MutableStateFlow(loadFromResources(view))
+
+        view.repeatWhenAttached {
+            repeatOnLifecycle(Lifecycle.State.STARTED) {
+                launch {
+                    combine(viewModel.startButton, viewModel.animateButtonReveal) {
+                            buttonModel,
+                            animateReveal ->
+                            Pair(buttonModel, animateReveal)
+                        }
+                        .collect { (buttonModel, animateReveal) ->
+                            updateButton(
+                                view = startButton,
+                                viewModel = buttonModel,
+                                animateReveal = animateReveal,
+                                falsingManager = falsingManager,
+                            )
+                        }
+                }
+
+                launch {
+                    combine(viewModel.endButton, viewModel.animateButtonReveal) {
+                            buttonModel,
+                            animateReveal ->
+                            Pair(buttonModel, animateReveal)
+                        }
+                        .collect { (buttonModel, animateReveal) ->
+                            updateButton(
+                                view = endButton,
+                                viewModel = buttonModel,
+                                animateReveal = animateReveal,
+                                falsingManager = falsingManager,
+                            )
+                        }
+                }
+
+                launch {
+                    viewModel.isOverlayContainerVisible.collect { isVisible ->
+                        overlayContainer.visibility =
+                            if (isVisible) {
+                                View.VISIBLE
+                            } else {
+                                View.INVISIBLE
+                            }
+                    }
+                }
+
+                launch {
+                    viewModel.alpha.collect { alpha ->
+                        view.importantForAccessibility =
+                            if (alpha == 0f) {
+                                View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
+                            } else {
+                                View.IMPORTANT_FOR_ACCESSIBILITY_AUTO
+                            }
+
+                        ambientIndicationArea?.alpha = alpha
+                        indicationArea.alpha = alpha
+                        startButton.alpha = alpha
+                        endButton.alpha = alpha
+                    }
+                }
+
+                launch {
+                    viewModel.indicationAreaTranslationX.collect { translationX ->
+                        indicationArea.translationX = translationX
+                        ambientIndicationArea?.translationX = translationX
+                    }
+                }
+
+                launch {
+                    combine(
+                            viewModel.isIndicationAreaPadded,
+                            configurationBasedDimensions.map { it.indicationAreaPaddingPx },
+                        ) { isPadded, paddingIfPaddedPx ->
+                            if (isPadded) {
+                                paddingIfPaddedPx
+                            } else {
+                                0
+                            }
+                        }
+                        .collect { paddingPx ->
+                            indicationArea.setPadding(paddingPx, 0, paddingPx, 0)
+                        }
+                }
+
+                launch {
+                    configurationBasedDimensions
+                        .map { it.defaultBurnInPreventionYOffsetPx }
+                        .flatMapLatest { defaultBurnInOffsetY ->
+                            viewModel.indicationAreaTranslationY(defaultBurnInOffsetY)
+                        }
+                        .collect { translationY ->
+                            indicationArea.translationY = translationY
+                            ambientIndicationArea?.translationY = translationY
+                        }
+                }
+
+                launch {
+                    configurationBasedDimensions.collect { dimensions ->
+                        indicationText.setTextSize(
+                            TypedValue.COMPLEX_UNIT_PX,
+                            dimensions.indicationTextSizePx.toFloat(),
+                        )
+                        indicationTextBottom.setTextSize(
+                            TypedValue.COMPLEX_UNIT_PX,
+                            dimensions.indicationTextSizePx.toFloat(),
+                        )
+
+                        startButton.updateLayoutParams<ViewGroup.LayoutParams> {
+                            width = dimensions.buttonSizePx.width
+                            height = dimensions.buttonSizePx.height
+                        }
+                        endButton.updateLayoutParams<ViewGroup.LayoutParams> {
+                            width = dimensions.buttonSizePx.width
+                            height = dimensions.buttonSizePx.height
+                        }
+                    }
+                }
+            }
+        }
+
+        return object : Binding {
+            override fun getIndicationAreaAnimators(): List<ViewPropertyAnimator> {
+                return listOf(indicationArea, ambientIndicationArea).mapNotNull { it?.animate() }
+            }
+
+            override fun onConfigurationChanged() {
+                configurationBasedDimensions.value = loadFromResources(view)
+            }
+        }
+    }
+
+    private fun updateButton(
+        view: ImageView,
+        viewModel: KeyguardQuickAffordanceViewModel,
+        animateReveal: Boolean,
+        falsingManager: FalsingManager,
+    ) {
+        if (!viewModel.isVisible) {
+            view.isVisible = false
+            return
+        }
+
+        if (!view.isVisible) {
+            view.isVisible = true
+            if (animateReveal) {
+                view.alpha = 0f
+                view.translationY = view.height / 2f
+                view
+                    .animate()
+                    .alpha(1f)
+                    .translationY(0f)
+                    .setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN)
+                    .setDuration(EXIT_DOZE_BUTTON_REVEAL_ANIMATION_DURATION_MS)
+                    .start()
+            }
+        }
+
+        when (viewModel.icon) {
+            is ContainedDrawable.WithDrawable -> view.setImageDrawable(viewModel.icon.drawable)
+            is ContainedDrawable.WithResource -> view.setImageResource(viewModel.icon.resourceId)
+        }
+
+        view.drawable.setTint(
+            Utils.getColorAttrDefaultColor(
+                view.context,
+                com.android.internal.R.attr.textColorPrimary
+            )
+        )
+        view.backgroundTintList =
+            Utils.getColorAttr(view.context, com.android.internal.R.attr.colorSurface)
+
+        view.contentDescription = view.context.getString(viewModel.contentDescriptionResourceId)
+        view.setOnClickListener {
+            if (falsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) {
+                return@setOnClickListener
+            }
+
+            if (viewModel.configKey != null) {
+                viewModel.onClicked(
+                    KeyguardQuickAffordanceViewModel.OnClickedParameters(
+                        configKey = viewModel.configKey,
+                        animationController = ActivityLaunchAnimator.Controller.fromView(view),
+                    )
+                )
+            }
+        }
+    }
+
+    private fun loadFromResources(view: View): ConfigurationBasedDimensions {
+        return ConfigurationBasedDimensions(
+            defaultBurnInPreventionYOffsetPx =
+                view.resources.getDimensionPixelOffset(R.dimen.default_burn_in_prevention_offset),
+            indicationAreaPaddingPx =
+                view.resources.getDimensionPixelOffset(R.dimen.keyguard_indication_area_padding),
+            indicationTextSizePx =
+                view.resources.getDimensionPixelSize(
+                    com.android.internal.R.dimen.text_size_small_material,
+                ),
+            buttonSizePx =
+                Size(
+                    view.resources.getDimensionPixelSize(R.dimen.keyguard_affordance_fixed_width),
+                    view.resources.getDimensionPixelSize(R.dimen.keyguard_affordance_fixed_height),
+                ),
+        )
+    }
+
+    private data class ConfigurationBasedDimensions(
+        val defaultBurnInPreventionYOffsetPx: Int,
+        val indicationAreaPaddingPx: Int,
+        val indicationTextSizePx: Int,
+        val buttonSizePx: Size,
+    )
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModel.kt
new file mode 100644
index 0000000..4b69a81
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModel.kt
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.ui.viewmodel
+
+import com.android.systemui.doze.util.BurnInHelperWrapper
+import com.android.systemui.keyguard.domain.usecase.ObserveAnimateBottomAreaTransitionsUseCase
+import com.android.systemui.keyguard.domain.usecase.ObserveBottomAreaAlphaUseCase
+import com.android.systemui.keyguard.domain.usecase.ObserveClockPositionUseCase
+import com.android.systemui.keyguard.domain.usecase.ObserveDozeAmountUseCase
+import com.android.systemui.keyguard.domain.usecase.ObserveIsDozingUseCase
+import com.android.systemui.keyguard.domain.usecase.ObserveKeyguardQuickAffordanceUseCase
+import com.android.systemui.keyguard.domain.usecase.OnKeyguardQuickAffordanceClickedUseCase
+import com.android.systemui.keyguard.shared.model.KeyguardQuickAffordanceModel
+import com.android.systemui.keyguard.shared.model.KeyguardQuickAffordancePosition
+import javax.inject.Inject
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.map
+
+/** View-model for the keyguard bottom area view */
+class KeyguardBottomAreaViewModel
+@Inject
+constructor(
+    private val observeQuickAffordanceUseCase: ObserveKeyguardQuickAffordanceUseCase,
+    private val onQuickAffordanceClickedUseCase: OnKeyguardQuickAffordanceClickedUseCase,
+    observeBottomAreaAlphaUseCase: ObserveBottomAreaAlphaUseCase,
+    observeIsDozingUseCase: ObserveIsDozingUseCase,
+    observeAnimateBottomAreaTransitionsUseCase: ObserveAnimateBottomAreaTransitionsUseCase,
+    private val observeDozeAmountUseCase: ObserveDozeAmountUseCase,
+    observeClockPositionUseCase: ObserveClockPositionUseCase,
+    private val burnInHelperWrapper: BurnInHelperWrapper,
+) {
+    /** An observable for the view-model of the "start button" quick affordance. */
+    val startButton: Flow<KeyguardQuickAffordanceViewModel> =
+        button(KeyguardQuickAffordancePosition.BOTTOM_START)
+    /** An observable for the view-model of the "end button" quick affordance. */
+    val endButton: Flow<KeyguardQuickAffordanceViewModel> =
+        button(KeyguardQuickAffordancePosition.BOTTOM_END)
+    /**
+     * An observable for whether the next time a quick action button becomes visible, it should
+     * animate.
+     */
+    val animateButtonReveal: Flow<Boolean> =
+        observeAnimateBottomAreaTransitionsUseCase().distinctUntilChanged()
+    /** An observable for whether the overlay container should be visible. */
+    val isOverlayContainerVisible: Flow<Boolean> =
+        observeIsDozingUseCase().map { !it }.distinctUntilChanged()
+    /** An observable for the alpha level for the entire bottom area. */
+    val alpha: Flow<Float> = observeBottomAreaAlphaUseCase().distinctUntilChanged()
+    /** An observable for whether the indication area should be padded. */
+    val isIndicationAreaPadded: Flow<Boolean> =
+        combine(startButton, endButton) { startButtonModel, endButtonModel ->
+                startButtonModel.isVisible || endButtonModel.isVisible
+            }
+            .distinctUntilChanged()
+    /** An observable for the x-offset by which the indication area should be translated. */
+    val indicationAreaTranslationX: Flow<Float> =
+        observeClockPositionUseCase().map { it.x.toFloat() }.distinctUntilChanged()
+
+    /** Returns an observable for the y-offset by which the indication area should be translated. */
+    fun indicationAreaTranslationY(defaultBurnInOffset: Int): Flow<Float> {
+        return observeDozeAmountUseCase()
+            .map { dozeAmount ->
+                dozeAmount *
+                    (burnInHelperWrapper.burnInOffset(
+                        /* amplitude = */ defaultBurnInOffset * 2,
+                        /* xAxis= */ false,
+                    ) - defaultBurnInOffset)
+            }
+            .distinctUntilChanged()
+    }
+
+    private fun button(
+        position: KeyguardQuickAffordancePosition
+    ): Flow<KeyguardQuickAffordanceViewModel> {
+        return observeQuickAffordanceUseCase(position)
+            .map { model -> model.toViewModel() }
+            .distinctUntilChanged()
+    }
+
+    private fun KeyguardQuickAffordanceModel.toViewModel(): KeyguardQuickAffordanceViewModel {
+        return when (this) {
+            is KeyguardQuickAffordanceModel.Visible ->
+                KeyguardQuickAffordanceViewModel(
+                    configKey = configKey,
+                    isVisible = true,
+                    icon = icon,
+                    contentDescriptionResourceId = contentDescriptionResourceId,
+                    onClicked = { parameters ->
+                        onQuickAffordanceClickedUseCase(
+                            configKey = parameters.configKey,
+                            animationController = parameters.animationController,
+                        )
+                    },
+                )
+            is KeyguardQuickAffordanceModel.Hidden -> KeyguardQuickAffordanceViewModel()
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardQuickAffordanceViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardQuickAffordanceViewModel.kt
new file mode 100644
index 0000000..2417998
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardQuickAffordanceViewModel.kt
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.ui.viewmodel
+
+import androidx.annotation.StringRes
+import com.android.systemui.animation.ActivityLaunchAnimator
+import com.android.systemui.containeddrawable.ContainedDrawable
+import kotlin.reflect.KClass
+
+/** Models the UI state of a keyguard quick affordance button. */
+data class KeyguardQuickAffordanceViewModel(
+    val configKey: KClass<*>? = null,
+    val isVisible: Boolean = false,
+    val icon: ContainedDrawable = ContainedDrawable.WithResource(0),
+    @StringRes val contentDescriptionResourceId: Int = 0,
+    val onClicked: (OnClickedParameters) -> Unit = {},
+) {
+    data class OnClickedParameters(
+        val configKey: KClass<*>,
+        val animationController: ActivityLaunchAnimator.Controller?,
+    )
+}
diff --git a/packages/SystemUI/src/com/android/systemui/lifecycle/RepeatWhenAttached.kt b/packages/SystemUI/src/com/android/systemui/lifecycle/RepeatWhenAttached.kt
new file mode 100644
index 0000000..e364918
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/lifecycle/RepeatWhenAttached.kt
@@ -0,0 +1,183 @@
+/*
+ *  Copyright (C) 2022 The Android Open Source Project
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT 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.lifecycle
+
+import android.view.View
+import android.view.ViewTreeObserver
+import androidx.annotation.MainThread
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleOwner
+import androidx.lifecycle.LifecycleRegistry
+import androidx.lifecycle.lifecycleScope
+import com.android.systemui.util.Assert
+import kotlin.coroutines.CoroutineContext
+import kotlin.coroutines.EmptyCoroutineContext
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.DisposableHandle
+import kotlinx.coroutines.launch
+
+/**
+ * Runs the given [block] every time the [View] becomes attached (or immediately after calling this
+ * function, if the view was already attached), automatically canceling the work when the `View`
+ * becomes detached.
+ *
+ * Only use from the main thread.
+ *
+ * When [block] is run, it is run in the context of a [ViewLifecycleOwner] which the caller can use
+ * to launch jobs, with confidence that the jobs will be properly canceled when the view is
+ * detached.
+ *
+ * The [block] may be run multiple times, running once per every time the view is attached. Each
+ * time the block is run for a new attachment event, the [ViewLifecycleOwner] provided will be a
+ * fresh one.
+ *
+ * @param coroutineContext An optional [CoroutineContext] to replace the dispatcher [block] is
+ * invoked on.
+ * @param block The block of code that should be run when the view becomes attached. It can end up
+ * being invoked multiple times if the view is reattached after being detached.
+ * @return A [DisposableHandle] to invoke when the caller of the function destroys its [View] and is
+ * no longer interested in the [block] being run the next time its attached. Calling this is an
+ * optional optimization as the logic will be properly cleaned up and destroyed each time the view
+ * is detached. Using this is not *thread-safe* and should only be used on the main thread.
+ */
+@MainThread
+fun View.repeatWhenAttached(
+    coroutineContext: CoroutineContext = EmptyCoroutineContext,
+    block: suspend LifecycleOwner.(View) -> Unit,
+): DisposableHandle {
+    Assert.isMainThread()
+    val view = this
+    // The suspend block will run on the app's main thread unless the caller supplies a different
+    // dispatcher to use. We don't want it to run on the Dispatchers.Default thread pool as
+    // default behavior. Instead, we want it to run on the view's UI thread since the user will
+    // presumably want to call view methods that require being called from said UI thread.
+    val lifecycleCoroutineContext = Dispatchers.Main + coroutineContext
+    var lifecycleOwner: ViewLifecycleOwner? = null
+    val onAttachListener =
+        object : View.OnAttachStateChangeListener {
+            override fun onViewAttachedToWindow(v: View?) {
+                Assert.isMainThread()
+                lifecycleOwner?.onDestroy()
+                lifecycleOwner =
+                    createLifecycleOwnerAndRun(
+                        view,
+                        lifecycleCoroutineContext,
+                        block,
+                    )
+            }
+
+            override fun onViewDetachedFromWindow(v: View?) {
+                lifecycleOwner?.onDestroy()
+                lifecycleOwner = null
+            }
+        }
+
+    addOnAttachStateChangeListener(onAttachListener)
+    if (view.isAttachedToWindow) {
+        lifecycleOwner =
+            createLifecycleOwnerAndRun(
+                view,
+                lifecycleCoroutineContext,
+                block,
+            )
+    }
+
+    return object : DisposableHandle {
+        override fun dispose() {
+            Assert.isMainThread()
+
+            lifecycleOwner?.onDestroy()
+            lifecycleOwner = null
+            view.removeOnAttachStateChangeListener(onAttachListener)
+        }
+    }
+}
+
+private fun createLifecycleOwnerAndRun(
+    view: View,
+    coroutineContext: CoroutineContext,
+    block: suspend LifecycleOwner.(View) -> Unit,
+): ViewLifecycleOwner {
+    return ViewLifecycleOwner(view).apply {
+        onCreate()
+        lifecycleScope.launch(coroutineContext) { block(view) }
+    }
+}
+
+/**
+ * A [LifecycleOwner] for a [View] for exclusive use by the [repeatWhenAttached] extension function.
+ *
+ * The implementation requires the caller to call [onCreate] and [onDestroy] when the view is
+ * attached to or detached from a view hierarchy. After [onCreate] and before [onDestroy] is called,
+ * the implementation monitors window state in the following way
+ *
+ * * If the window is not visible, we are in the [Lifecycle.State.CREATED] state
+ * * If the window is visible but not focused, we are in the [Lifecycle.State.STARTED] state
+ * * If the window is visible and focused, we are in the [Lifecycle.State.RESUMED] state
+ *
+ * Or in table format:
+ * ```
+ * ┌───────────────┬───────────────────┬──────────────┬─────────────────┐
+ * │ View attached │ Window Visibility │ Window Focus │ Lifecycle State │
+ * ├───────────────┼───────────────────┴──────────────┼─────────────────┤
+ * │ Not attached  │                 Any              │       N/A       │
+ * ├───────────────┼───────────────────┬──────────────┼─────────────────┤
+ * │               │    Not visible    │     Any      │     CREATED     │
+ * │               ├───────────────────┼──────────────┼─────────────────┤
+ * │   Attached    │                   │   No focus   │     STARTED     │
+ * │               │      Visible      ├──────────────┼─────────────────┤
+ * │               │                   │  Has focus   │     RESUMED     │
+ * └───────────────┴───────────────────┴──────────────┴─────────────────┘
+ * ```
+ */
+private class ViewLifecycleOwner(
+    private val view: View,
+) : LifecycleOwner {
+
+    private val windowVisibleListener =
+        ViewTreeObserver.OnWindowVisibilityChangeListener { updateState() }
+    private val windowFocusListener = ViewTreeObserver.OnWindowFocusChangeListener { updateState() }
+
+    private val registry = LifecycleRegistry(this)
+
+    fun onCreate() {
+        registry.currentState = Lifecycle.State.CREATED
+        view.viewTreeObserver.addOnWindowVisibilityChangeListener(windowVisibleListener)
+        view.viewTreeObserver.addOnWindowFocusChangeListener(windowFocusListener)
+        updateState()
+    }
+
+    fun onDestroy() {
+        view.viewTreeObserver.removeOnWindowVisibilityChangeListener(windowVisibleListener)
+        view.viewTreeObserver.removeOnWindowFocusChangeListener(windowFocusListener)
+        registry.currentState = Lifecycle.State.DESTROYED
+    }
+
+    override fun getLifecycle(): Lifecycle {
+        return registry
+    }
+
+    private fun updateState() {
+        registry.currentState =
+            when {
+                view.windowVisibility != View.VISIBLE -> Lifecycle.State.CREATED
+                !view.hasWindowFocus() -> Lifecycle.State.STARTED
+                else -> Lifecycle.State.RESUMED
+            }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/log/LogBuffer.kt b/packages/SystemUI/src/com/android/systemui/log/LogBuffer.kt
index db446c3..6124e10 100644
--- a/packages/SystemUI/src/com/android/systemui/log/LogBuffer.kt
+++ b/packages/SystemUI/src/com/android/systemui/log/LogBuffer.kt
@@ -20,9 +20,8 @@
 import android.util.Log
 import com.android.systemui.log.dagger.LogModule
 import com.android.systemui.util.collection.RingBuffer
+import com.google.errorprone.annotations.CompileTimeConstant
 import java.io.PrintWriter
-import java.text.SimpleDateFormat
-import java.util.Locale
 import java.util.concurrent.ArrayBlockingQueue
 import java.util.concurrent.BlockingQueue
 import kotlin.concurrent.thread
@@ -74,7 +73,7 @@
     private val name: String,
     private val maxSize: Int,
     private val logcatEchoTracker: LogcatEchoTracker,
-    private val systrace: Boolean = true
+    private val systrace: Boolean = true,
 ) {
     private val buffer = RingBuffer(maxSize) { LogMessageImpl.create() }
 
@@ -107,11 +106,11 @@
      * May also log the message to logcat if echoing is enabled for this buffer or tag.
      *
      * The actual string of the log message is not constructed until it is needed. To accomplish
-     * this, logging a message is a two-step process. First, a fresh instance  of [LogMessage] is
-     * obtained and is passed to the [initializer]. The initializer stores any relevant data on the
-     * message's fields. The message is then inserted into the buffer where it waits until it is
-     * either pushed out by newer messages or it needs to printed. If and when this latter moment
-     * occurs, the [printer] function is called on the message. It reads whatever data the
+     * this, logging a message is a two-step process. First, a fresh instance of [LogMessage] is
+     * obtained and is passed to the [messageInitializer]. The initializer stores any relevant data
+     * on the message's fields. The message is then inserted into the buffer where it waits until it
+     * is either pushed out by newer messages or it needs to printed. If and when this latter moment
+     * occurs, the [messagePrinter] function is called on the message. It reads whatever data the
      * initializer stored and converts it to a human-readable log message.
      *
      * @param tag A string of at most 23 characters, used for grouping logs into categories or
@@ -120,27 +119,49 @@
      * echoed. In general, a module should split most of its logs into either INFO or DEBUG level.
      * INFO level should be reserved for information that other parts of the system might care
      * about, leaving the specifics of code's day-to-day operations to DEBUG.
-     * @param initializer A function that will be called immediately to store relevant data on the
-     * log message. The value of `this` will be the LogMessage to be initialized.
-     * @param printer A function that will be called if and when the message needs to be dumped to
-     * logcat or a bug report. It should read the data stored by the initializer and convert it to
-     * a human-readable string. The value of `this` will be the LogMessage to be printed.
-     * **IMPORTANT:** The printer should ONLY ever reference fields on the LogMessage and NEVER any
-     * variables in its enclosing scope. Otherwise, the runtime will need to allocate a new instance
-     * of the printer for each call, thwarting our attempts at avoiding any sort of allocation.
+     * @param messageInitializer A function that will be called immediately to store relevant data
+     * on the log message. The value of `this` will be the LogMessage to be initialized.
+     * @param messagePrinter A function that will be called if and when the message needs to be
+     * dumped to logcat or a bug report. It should read the data stored by the initializer and
+     * convert it to a human-readable string. The value of `this` will be the LogMessage to be
+     * printed. **IMPORTANT:** The printer should ONLY ever reference fields on the LogMessage and
+     * NEVER any variables in its enclosing scope. Otherwise, the runtime will need to allocate a
+     * new instance of the printer for each call, thwarting our attempts at avoiding any sort of
+     * allocation.
+     * @param exception Provide any exception that need to be logged. This is saved as
+     * [LogMessage.exception]
      */
+    @JvmOverloads
     inline fun log(
-        tag: String,
-        level: LogLevel,
-        initializer: LogMessage.() -> Unit,
-        noinline printer: LogMessage.() -> String
+            tag: String,
+            level: LogLevel,
+            messageInitializer: MessageInitializer,
+            noinline messagePrinter: MessagePrinter,
+            exception: Throwable? = null,
     ) {
-        val message = obtain(tag, level, printer)
-        initializer(message)
+        val message = obtain(tag, level, messagePrinter, exception)
+        messageInitializer(message)
         commit(message)
     }
 
     /**
+     * Logs a compile-time string constant [message] to the log buffer. Use sparingly.
+     *
+     * May also log the message to logcat if echoing is enabled for this buffer or tag. This is for
+     * simpler use-cases where [message] is a compile time string constant. For use-cases where the
+     * log message is built during runtime, use the [LogBuffer.log] overloaded method that takes in
+     * an initializer and a message printer.
+     *
+     * Log buffers are limited by the number of entries, so logging more frequently
+     * will limit the time window that the LogBuffer covers in a bug report.  Richer logs, on the
+     * other hand, make a bug report more actionable, so using the [log] with a messagePrinter to
+     * add more detail to every log may do more to improve overall logging than adding more logs
+     * with this method.
+     */
+    fun log(tag: String, level: LogLevel, @CompileTimeConstant message: String) =
+            log(tag, level, {str1 = message}, { str1!! })
+
+    /**
      * You should call [log] instead of this method.
      *
      * Obtains the next [LogMessage] from the ring buffer. If the buffer is not yet at max size,
@@ -151,15 +172,16 @@
      */
     @Synchronized
     fun obtain(
-        tag: String,
-        level: LogLevel,
-        printer: (LogMessage) -> String
-    ): LogMessageImpl {
+            tag: String,
+            level: LogLevel,
+            messagePrinter: MessagePrinter,
+            exception: Throwable? = null,
+    ): LogMessage {
         if (!mutable) {
             return FROZEN_MESSAGE
         }
         val message = buffer.advance()
-        message.reset(tag, level, System.currentTimeMillis(), printer)
+        message.reset(tag, level, System.currentTimeMillis(), messagePrinter, exception)
         return message
     }
 
@@ -202,7 +224,7 @@
         val iterationStart = if (tailLength <= 0) { 0 } else { max(0, buffer.size - tailLength) }
 
         for (i in iterationStart until buffer.size) {
-            dumpMessage(buffer[i], pw)
+            buffer[i].dump(pw)
         }
     }
 
@@ -230,19 +252,9 @@
         }
     }
 
-    private fun dumpMessage(message: LogMessage, pw: PrintWriter) {
-        pw.print(DATE_FORMAT.format(message.timestamp))
-        pw.print(" ")
-        pw.print(message.level.shortString)
-        pw.print(" ")
-        pw.print(message.tag)
-        pw.print(": ")
-        pw.println(message.printer(message))
-    }
-
     private fun echo(message: LogMessage, toLogcat: Boolean, toSystrace: Boolean) {
         if (toLogcat || toSystrace) {
-            val strMessage = message.printer(message)
+            val strMessage = message.messagePrinter(message)
             if (toSystrace) {
                 echoToSystrace(message, strMessage)
             }
@@ -259,16 +271,21 @@
 
     private fun echoToLogcat(message: LogMessage, strMessage: String) {
         when (message.level) {
-            LogLevel.VERBOSE -> Log.v(message.tag, strMessage)
-            LogLevel.DEBUG -> Log.d(message.tag, strMessage)
-            LogLevel.INFO -> Log.i(message.tag, strMessage)
-            LogLevel.WARNING -> Log.w(message.tag, strMessage)
-            LogLevel.ERROR -> Log.e(message.tag, strMessage)
-            LogLevel.WTF -> Log.wtf(message.tag, strMessage)
+            LogLevel.VERBOSE -> Log.v(message.tag, strMessage, message.exception)
+            LogLevel.DEBUG -> Log.d(message.tag, strMessage, message.exception)
+            LogLevel.INFO -> Log.i(message.tag, strMessage, message.exception)
+            LogLevel.WARNING -> Log.w(message.tag, strMessage, message.exception)
+            LogLevel.ERROR -> Log.e(message.tag, strMessage, message.exception)
+            LogLevel.WTF -> Log.wtf(message.tag, strMessage, message.exception)
         }
     }
 }
 
+/**
+ * A function that will be called immediately to store relevant data on the log message. The value
+ * of `this` will be the LogMessage to be initialized.
+ */
+typealias MessageInitializer = LogMessage.() -> Unit
+
 private const val TAG = "LogBuffer"
-private val DATE_FORMAT = SimpleDateFormat("MM-dd HH:mm:ss.SSS", Locale.US)
-private val FROZEN_MESSAGE = LogMessageImpl.create()
\ No newline at end of file
+private val FROZEN_MESSAGE = LogMessageImpl.create()
diff --git a/packages/SystemUI/src/com/android/systemui/log/LogMessage.kt b/packages/SystemUI/src/com/android/systemui/log/LogMessage.kt
index 2a0a2aa6..dae2592 100644
--- a/packages/SystemUI/src/com/android/systemui/log/LogMessage.kt
+++ b/packages/SystemUI/src/com/android/systemui/log/LogMessage.kt
@@ -16,6 +16,10 @@
 
 package com.android.systemui.log
 
+import java.io.PrintWriter
+import java.text.SimpleDateFormat
+import java.util.Locale
+
 /**
  * Generic data class for storing messages logged to a [LogBuffer]
  *
@@ -25,7 +29,7 @@
  *
  * When a message is logged, the code doing the logging stores data in one or more of the generic
  * fields ([str1], [int1], etc). When it comes time to dump the message to logcat/bugreport/etc, the
- * [printer] function reads the data stored in the generic fields and converts that to a human-
+ * [messagePrinter] function reads the data stored in the generic fields and converts that to a human-
  * readable string. Thus, for every log type there must be a specialized initializer function that
  * stores data specific to that log type and a specialized printer function that prints that data.
  *
@@ -35,7 +39,8 @@
     val level: LogLevel
     val tag: String
     val timestamp: Long
-    val printer: LogMessage.() -> String
+    val messagePrinter: MessagePrinter
+    val exception: Throwable?
 
     var str1: String?
     var str2: String?
@@ -49,4 +54,43 @@
     var bool2: Boolean
     var bool3: Boolean
     var bool4: Boolean
+
+    /**
+     * Function that dumps the [LogMessage] to the provided [writer].
+     */
+    fun dump(writer: PrintWriter) {
+        val formattedTimestamp = DATE_FORMAT.format(timestamp)
+        val shortLevel = level.shortString
+        val messageToPrint = messagePrinter(this)
+        printLikeLogcat(writer, formattedTimestamp, shortLevel, tag, messageToPrint)
+        exception?.printStackTrace(writer)
+    }
 }
+
+/**
+ * A function that will be called if and when the message needs to be dumped to
+ * logcat or a bug report. It should read the data stored by the initializer and convert it to
+ * a human-readable string. The value of `this` will be the LogMessage to be printed.
+ * **IMPORTANT:** The printer should ONLY ever reference fields on the LogMessage and NEVER any
+ * variables in its enclosing scope. Otherwise, the runtime will need to allocate a new instance
+ * of the printer for each call, thwarting our attempts at avoiding any sort of allocation.
+ */
+typealias MessagePrinter = LogMessage.() -> String
+
+private fun printLikeLogcat(
+    pw: PrintWriter,
+    formattedTimestamp: String,
+    shortLogLevel: String,
+    tag: String,
+    message: String
+) {
+    pw.print(formattedTimestamp)
+    pw.print(" ")
+    pw.print(shortLogLevel)
+    pw.print(" ")
+    pw.print(tag)
+    pw.print(": ")
+    pw.println(message)
+}
+
+private val DATE_FORMAT = SimpleDateFormat("MM-dd HH:mm:ss.SSS", Locale.US)
diff --git a/packages/SystemUI/src/com/android/systemui/log/LogMessageImpl.kt b/packages/SystemUI/src/com/android/systemui/log/LogMessageImpl.kt
index d33ac4b..4dd6f65 100644
--- a/packages/SystemUI/src/com/android/systemui/log/LogMessageImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/log/LogMessageImpl.kt
@@ -23,7 +23,8 @@
     override var level: LogLevel,
     override var tag: String,
     override var timestamp: Long,
-    override var printer: LogMessage.() -> String,
+    override var messagePrinter: MessagePrinter,
+    override var exception: Throwable?,
     override var str1: String?,
     override var str2: String?,
     override var str3: String?,
@@ -35,19 +36,21 @@
     override var bool1: Boolean,
     override var bool2: Boolean,
     override var bool3: Boolean,
-    override var bool4: Boolean
+    override var bool4: Boolean,
 ) : LogMessage {
 
     fun reset(
         tag: String,
         level: LogLevel,
         timestamp: Long,
-        renderer: LogMessage.() -> String
+        renderer: MessagePrinter,
+        exception: Throwable? = null,
     ) {
         this.level = level
         this.tag = tag
         this.timestamp = timestamp
-        this.printer = renderer
+        this.messagePrinter = renderer
+        this.exception = exception
         str1 = null
         str2 = null
         str3 = null
@@ -68,7 +71,8 @@
                     LogLevel.DEBUG,
                     DEFAULT_TAG,
                     0,
-                    DEFAULT_RENDERER,
+                    DEFAULT_PRINTER,
+                    null,
                     null,
                     null,
                     null,
@@ -86,4 +90,4 @@
 }
 
 private const val DEFAULT_TAG = "UnknownTag"
-private val DEFAULT_RENDERER: LogMessage.() -> String = { "Unknown message: $this" }
+private val DEFAULT_PRINTER: MessagePrinter = { "Unknown message: $this" }
diff --git a/packages/SystemUI/src/com/android/systemui/log/dagger/KeyguardUpdateMonitorLog.kt b/packages/SystemUI/src/com/android/systemui/log/dagger/KeyguardUpdateMonitorLog.kt
new file mode 100644
index 0000000..323ee219
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/log/dagger/KeyguardUpdateMonitorLog.kt
@@ -0,0 +1,4 @@
+package com.android.systemui.log.dagger
+
+/** A [com.android.systemui.log.LogBuffer] for KeyguardUpdateMonitor. */
+annotation class KeyguardUpdateMonitorLog
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 eff025f..c858bc3 100644
--- a/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java
+++ b/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java
@@ -27,6 +27,8 @@
 import com.android.systemui.log.LogcatEchoTracker;
 import com.android.systemui.log.LogcatEchoTrackerDebug;
 import com.android.systemui.log.LogcatEchoTrackerProd;
+import com.android.systemui.statusbar.notification.NotifPipelineFlags;
+import com.android.systemui.util.Compile;
 
 import dagger.Module;
 import dagger.Provides;
@@ -48,11 +50,17 @@
     @Provides
     @SysUISingleton
     @NotificationLog
-    public static LogBuffer provideNotificationsLogBuffer(LogBufferFactory factory) {
-        return factory.create("NotifLog", 1000 /* maxSize */, false /* systrace */);
+    public static LogBuffer provideNotificationsLogBuffer(
+            LogBufferFactory factory,
+            NotifPipelineFlags notifPipelineFlags) {
+        int maxSize = 1000;
+        if (Compile.IS_DEBUG && notifPipelineFlags.isDevLoggingEnabled()) {
+            maxSize *= 10;
+        }
+        return factory.create("NotifLog", maxSize, false /* systrace */);
     }
 
-    /** Provides a logging buffer for all logs related to the data layer of notifications. */
+    /** Provides a logging buffer for logs related to heads up presentation of notifications. */
     @Provides
     @SysUISingleton
     @NotificationHeadsUpLog
@@ -60,6 +68,14 @@
         return factory.create("NotifHeadsUpLog", 1000);
     }
 
+    /** Provides a logging buffer for notification interruption calculations. */
+    @Provides
+    @SysUISingleton
+    @NotificationInterruptLog
+    public static LogBuffer provideNotificationInterruptLogBuffer(LogBufferFactory factory) {
+        return factory.create("NotifInterruptLog", 100);
+    }
+
     /** Provides a logging buffer for all logs for lockscreen to shade transition events. */
     @Provides
     @SysUISingleton
@@ -239,6 +255,16 @@
         return factory.create("MediaCarouselCtlrLog", 20);
     }
 
+    /**
+     * Provides a {@link LogBuffer} for use in the status bar connectivity pipeline
+     */
+    @Provides
+    @SysUISingleton
+    @StatusBarConnectivityLog
+    public static LogBuffer provideStatusBarConnectivityBuffer(LogBufferFactory factory) {
+        return factory.create("StatusBarConnectivityLog", 64);
+    }
+
     /** Allows logging buffers to be tweaked via adb on debug builds but not on prod builds. */
     @Provides
     @SysUISingleton
@@ -251,4 +277,24 @@
             return new LogcatEchoTrackerProd();
         }
     }
+
+    /**
+     * Provides a {@link LogBuffer} for use by the status bar network controller.
+     */
+    @Provides
+    @SysUISingleton
+    @StatusBarNetworkControllerLog
+    public static LogBuffer provideStatusBarNetworkControllerBuffer(LogBufferFactory factory) {
+        return factory.create("StatusBarNetworkControllerLog", 20);
+    }
+
+    /**
+     * Provides a {@link LogBuffer} for use by {@link com.android.keyguard.KeyguardUpdateMonitor}.
+     */
+    @Provides
+    @SysUISingleton
+    @KeyguardUpdateMonitorLog
+    public static LogBuffer provideKeyguardUpdateMonitorLogBuffer(LogBufferFactory factory) {
+        return factory.create("KeyguardUpdateMonitorLog", 200);
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/log/dagger/NotificationInterruptLog.java b/packages/SystemUI/src/com/android/systemui/log/dagger/NotificationInterruptLog.java
new file mode 100644
index 0000000..760fbf3
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/log/dagger/NotificationInterruptLog.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.log.dagger;
+
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import com.android.systemui.log.LogBuffer;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+
+import javax.inject.Qualifier;
+
+/** A {@link LogBuffer} for notification interruption logging. */
+@Qualifier
+@Documented
+@Retention(RUNTIME)
+public @interface NotificationInterruptLog {
+}
diff --git a/packages/SystemUI/src/com/android/systemui/log/dagger/StatusBarConnectivityLog.java b/packages/SystemUI/src/com/android/systemui/log/dagger/StatusBarConnectivityLog.java
new file mode 100644
index 0000000..f03fbcb
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/log/dagger/StatusBarConnectivityLog.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.log.LogBuffer;
+import com.android.systemui.statusbar.pipeline.ConnectivityInfoProcessor;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+
+import javax.inject.Qualifier;
+
+/**
+ * A {@link LogBuffer} for events processed by {@link ConnectivityInfoProcessor}
+ */
+@Qualifier
+@Documented
+@Retention(RUNTIME)
+public @interface StatusBarConnectivityLog {
+}
diff --git a/packages/SystemUI/src/com/android/systemui/log/dagger/StatusBarNetworkControllerLog.java b/packages/SystemUI/src/com/android/systemui/log/dagger/StatusBarNetworkControllerLog.java
new file mode 100644
index 0000000..f26b316
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/log/dagger/StatusBarNetworkControllerLog.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.log.LogBuffer;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+
+import javax.inject.Qualifier;
+
+/**
+ * A {@link LogBuffer} for {@link com.android.systemui.statusbar.connectivity.NetworkController}
+ */
+@Qualifier
+@Documented
+@Retention(RUNTIME)
+public @interface StatusBarNetworkControllerLog {
+}
diff --git a/packages/SystemUI/src/com/android/systemui/media/ColorSchemeTransition.kt b/packages/SystemUI/src/com/android/systemui/media/ColorSchemeTransition.kt
index f1d5e94..d082655 100644
--- a/packages/SystemUI/src/com/android/systemui/media/ColorSchemeTransition.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/ColorSchemeTransition.kt
@@ -17,20 +17,17 @@
 package com.android.systemui.media
 
 import android.animation.ArgbEvaluator
-import android.animation.ValueAnimator.AnimatorUpdateListener
 import android.animation.ValueAnimator
+import android.animation.ValueAnimator.AnimatorUpdateListener
 import android.content.Context
 import android.content.res.ColorStateList
-import android.graphics.Color
-import android.graphics.drawable.GradientDrawable
-import android.graphics.drawable.RippleDrawable
 import android.content.res.Configuration
 import android.content.res.Configuration.UI_MODE_NIGHT_YES
+import android.graphics.drawable.RippleDrawable
 import com.android.internal.R
 import com.android.internal.annotations.VisibleForTesting
 import com.android.settingslib.Utils
 import com.android.systemui.monet.ColorScheme
-import com.android.systemui.util.getColorWithAlpha
 
 /**
  * A [ColorTransition] is an object that updates the colors of views each time [updateColorScheme]
@@ -106,7 +103,6 @@
     constructor(context: Context, mediaViewHolder: MediaViewHolder) :
         this(context, mediaViewHolder, ::AnimatingColorTransition)
 
-    private var isGradientEnabled = true
     val bgColor = context.getColor(com.android.systemui.R.color.material_dynamic_secondary95)
     val surfaceColor = animatingColorTransitionFactory(
         bgColor,
@@ -187,16 +183,6 @@
         mediaViewHolder.seekBar.progressBackgroundTintList = ColorStateList.valueOf(textTertiary)
     }
 
-    val bgGradientStart = animatingColorTransitionFactory(
-        bgColor,
-        albumGradientPicker(::backgroundStartFromScheme, 0.25f)
-    ) { _ -> updateAlbumGradient() }
-
-    val bgGradientEnd = animatingColorTransitionFactory(
-        bgColor,
-        albumGradientPicker(::backgroundEndFromScheme, 0.9f)
-    ) { _ -> updateAlbumGradient() }
-
     val colorTransitions = arrayOf(
         surfaceColor,
         colorSeamless,
@@ -206,37 +192,13 @@
         textPrimaryInverse,
         textSecondary,
         textTertiary,
-        bgGradientStart,
-        bgGradientEnd
     )
 
-    private fun updateAlbumGradient() {
-        val gradient = mediaViewHolder.albumView.foreground?.mutate()
-        if (gradient is GradientDrawable) {
-            gradient.colors = intArrayOf(
-                bgGradientStart?.currentColor ?: 0,
-                bgGradientEnd?.currentColor ?: 0)
-        }
-    }
-
-    private fun albumGradientPicker(
-        inner: (ColorScheme) -> Int,
-        targetAlpha: Float
-    ): (ColorScheme) -> Int {
-        return { scheme ->
-            if (isGradientEnabled)
-                getColorWithAlpha(inner(scheme), targetAlpha)
-            else
-                Color.TRANSPARENT
-        }
-    }
-
     private fun loadDefaultColor(id: Int): Int {
         return Utils.getColorAttr(context, id).defaultColor
     }
 
-    fun updateColorScheme(colorScheme: ColorScheme?, enableGradient: Boolean) {
-        isGradientEnabled = enableGradient
+    fun updateColorScheme(colorScheme: ColorScheme?) {
         colorTransitions.forEach { it.updateColorScheme(colorScheme) }
         colorScheme?.let { mediaViewHolder.gutsViewHolder.colorScheme = colorScheme }
     }
diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java b/packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java
index 1597845..012d766 100644
--- a/packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java
@@ -38,7 +38,9 @@
 import android.graphics.drawable.Animatable;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
+import android.graphics.drawable.GradientDrawable;
 import android.graphics.drawable.Icon;
+import android.graphics.drawable.LayerDrawable;
 import android.graphics.drawable.TransitionDrawable;
 import android.media.session.MediaController;
 import android.media.session.MediaSession;
@@ -70,6 +72,7 @@
 import com.android.systemui.animation.ActivityLaunchAnimator;
 import com.android.systemui.animation.GhostedViewLaunchAnimatorController;
 import com.android.systemui.animation.Interpolators;
+import com.android.systemui.bluetooth.BroadcastDialogController;
 import com.android.systemui.broadcast.BroadcastSender;
 import com.android.systemui.dagger.qualifiers.Background;
 import com.android.systemui.dagger.qualifiers.Main;
@@ -81,6 +84,7 @@
 import com.android.systemui.shared.system.SysUiStatsLog;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
 import com.android.systemui.statusbar.policy.KeyguardStateController;
+import com.android.systemui.util.ColorUtilKt;
 import com.android.systemui.util.animation.TransitionLayout;
 import com.android.systemui.util.time.SystemClock;
 
@@ -188,6 +192,11 @@
     private final SeekBarViewModel.EnabledChangeListener mEnabledChangeListener =
             this::setIsSeekBarEnabled;
 
+    private final BroadcastDialogController mBroadcastDialogController;
+    private boolean mIsCurrentBroadcastedApp = false;
+    private boolean mShowBroadcastDialogButton = false;
+    private String mSwitchBroadcastApp;
+
     /**
      * Initialize a new control panel
      *
@@ -213,7 +222,8 @@
             MediaUiEventLogger logger,
             KeyguardStateController keyguardStateController,
             ActivityIntentHelper activityIntentHelper,
-            NotificationLockscreenUserManager lockscreenUserManager) {
+            NotificationLockscreenUserManager lockscreenUserManager,
+            BroadcastDialogController broadcastDialogController) {
         mContext = context;
         mBackgroundExecutor = backgroundExecutor;
         mMainExecutor = mainExecutor;
@@ -230,6 +240,7 @@
         mKeyguardStateController = keyguardStateController;
         mActivityIntentHelper = activityIntentHelper;
         mLockscreenUserManager = lockscreenUserManager;
+        mBroadcastDialogController = broadcastDialogController;
 
         mSeekBarViewModel.setLogSeek(() -> {
             if (mPackageName != null && mInstanceId != null) {
@@ -449,7 +460,10 @@
         final MediaController controller = getController();
         mBackgroundExecutor.execute(() -> mSeekBarViewModel.updateController(controller));
 
-        bindOutputSwitcherChip(data);
+        // Show the broadcast dialog button only when the le audio is enabled.
+        mShowBroadcastDialogButton =
+                data.getDevice() != null && data.getDevice().getShowBroadcastButton();
+        bindOutputSwitcherAndBroadcastButton(mShowBroadcastDialogButton, data);
         bindGutsMenuForPlayer(data);
         bindPlayerContentDescription(data);
         bindScrubbingTime(data);
@@ -467,21 +481,40 @@
         Trace.endSection();
     }
 
-    private void bindOutputSwitcherChip(MediaData data) {
-        // Output switcher chip
+    private void bindOutputSwitcherAndBroadcastButton(boolean showBroadcastButton, MediaData data) {
         ViewGroup seamlessView = mMediaViewHolder.getSeamless();
         seamlessView.setVisibility(View.VISIBLE);
         ImageView iconView = mMediaViewHolder.getSeamlessIcon();
         TextView deviceName = mMediaViewHolder.getSeamlessText();
         final MediaDeviceData device = data.getDevice();
 
-        // Disable clicking on output switcher for invalid devices and resumption controls
-        final boolean seamlessDisabled = (device != null && !device.getEnabled())
-                || data.getResumption();
-        final float seamlessAlpha = seamlessDisabled ? DISABLED_ALPHA : 1.0f;
-        mMediaViewHolder.getSeamlessButton().setAlpha(seamlessAlpha);
-        seamlessView.setEnabled(!seamlessDisabled);
-        CharSequence deviceString = mContext.getString(R.string.media_seamless_other_device);
+        final boolean enabled;
+        final boolean seamlessDisabled;
+        final int iconResource;
+        CharSequence deviceString;
+        if (showBroadcastButton) {
+            // TODO(b/233698402): Use the package name instead of app label to avoid the
+            // unexpected result.
+            mIsCurrentBroadcastedApp = device != null
+                    && TextUtils.equals(device.getName(),
+                    MediaDataUtils.getAppLabel(mContext, mPackageName, mContext.getString(
+                            R.string.bt_le_audio_broadcast_dialog_unknown_name)));
+            seamlessDisabled = !mIsCurrentBroadcastedApp;
+            // Always be enabled if the broadcast button is shown
+            enabled = true;
+            deviceString = mContext.getString(R.string.bt_le_audio_broadcast_dialog_unknown_name);
+            iconResource = R.drawable.settings_input_antenna;
+        } else {
+            // Disable clicking on output switcher for invalid devices and resumption controls
+            seamlessDisabled = (device != null && !device.getEnabled()) || data.getResumption();
+            enabled = !seamlessDisabled;
+            deviceString = mContext.getString(R.string.media_seamless_other_device);
+            iconResource = R.drawable.ic_media_home_devices;
+        }
+
+        mMediaViewHolder.getSeamlessButton().setAlpha(seamlessDisabled ? DISABLED_ALPHA : 1.0f);
+        seamlessView.setEnabled(enabled);
+
         if (device != null) {
             Drawable icon = device.getIcon();
             if (icon instanceof AdaptiveIcon) {
@@ -494,7 +527,7 @@
             deviceString = device.getName();
         } else {
             // Set to default icon
-            iconView.setImageResource(R.drawable.ic_media_home_devices);
+            iconView.setImageResource(iconResource);
         }
         deviceName.setText(deviceString);
         seamlessView.setContentDescription(deviceString);
@@ -503,21 +536,39 @@
                     if (mFalsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) {
                         return;
                     }
-                    mLogger.logOpenOutputSwitcher(mUid, mPackageName, mInstanceId);
-                    if (device.getIntent() != null) {
-                        if (device.getIntent().isActivity()) {
-                            mActivityStarter.startActivity(
-                                    device.getIntent().getIntent(), true);
+
+                    if (showBroadcastButton) {
+                        // If the current media app is not broadcasted and users press the outputer
+                        // button, we should pop up the broadcast dialog to check do they want to
+                        // switch broadcast to the other media app, otherwise we still pop up the
+                        // media output dialog.
+                        if (!mIsCurrentBroadcastedApp) {
+                            mLogger.logOpenBroadcastDialog(mUid, mPackageName, mInstanceId);
+                            mSwitchBroadcastApp = device.getName().toString();
+                            mBroadcastDialogController.createBroadcastDialog(mSwitchBroadcastApp,
+                                    mPackageName, true, mMediaViewHolder.getSeamlessButton());
                         } else {
-                            try {
-                                device.getIntent().send();
-                            } catch (PendingIntent.CanceledException e) {
-                                Log.e(TAG, "Device pending intent was canceled");
-                            }
+                            mLogger.logOpenOutputSwitcher(mUid, mPackageName, mInstanceId);
+                            mMediaOutputDialogFactory.create(mPackageName, true,
+                                    mMediaViewHolder.getSeamlessButton());
                         }
                     } else {
-                        mMediaOutputDialogFactory.create(mPackageName, true,
-                                mMediaViewHolder.getSeamlessButton());
+                        mLogger.logOpenOutputSwitcher(mUid, mPackageName, mInstanceId);
+                        if (device.getIntent() != null) {
+                            if (device.getIntent().isActivity()) {
+                                mActivityStarter.startActivity(
+                                        device.getIntent().getIntent(), true);
+                            } else {
+                                try {
+                                    device.getIntent().send();
+                                } catch (PendingIntent.CanceledException e) {
+                                    Log.e(TAG, "Device pending intent was canceled");
+                                }
+                            }
+                        } else {
+                            mMediaOutputDialogFactory.create(mPackageName, true,
+                                    mMediaViewHolder.getSeamlessButton());
+                        }
                     }
                 });
     }
@@ -648,7 +699,18 @@
             }
             if (wallpaperColors != null) {
                 mutableColorScheme = new ColorScheme(wallpaperColors, true, Style.CONTENT);
-                artwork = getScaledBackground(artworkIcon, width, height);
+                Drawable albumArt = getScaledBackground(artworkIcon, width, height);
+                GradientDrawable gradient = (GradientDrawable) mContext
+                        .getDrawable(R.drawable.qs_media_scrim);
+                gradient.setColors(new int[] {
+                        ColorUtilKt.getColorWithAlpha(
+                                MediaColorSchemesKt.backgroundStartFromScheme(mutableColorScheme),
+                                0.25f),
+                        ColorUtilKt.getColorWithAlpha(
+                                MediaColorSchemesKt.backgroundEndFromScheme(mutableColorScheme),
+                                0.9f),
+                });
+                artwork = new LayerDrawable(new Drawable[] { albumArt, gradient });
                 isArtworkBound = true;
             } else {
                 // If there's no artwork, use colors from the app icon
@@ -700,7 +762,7 @@
                 }
 
                 // Transition Colors to current color scheme
-                mColorSchemeTransition.updateColorScheme(colorScheme, mIsArtworkBound);
+                mColorSchemeTransition.updateColorScheme(colorScheme);
 
                 // App icon - use notification icon
                 ImageView appIconView = mMediaViewHolder.getAppIcon();
@@ -956,16 +1018,13 @@
 
     private void bindScrubbingTime(MediaData data) {
         ConstraintSet expandedSet = mMediaViewController.getExpandedLayout();
-        ConstraintSet collapsedSet = mMediaViewController.getCollapsedLayout();
         int elapsedTimeId = mMediaViewHolder.getScrubbingElapsedTimeView().getId();
         int totalTimeId = mMediaViewHolder.getScrubbingTotalTimeView().getId();
 
         boolean visible = scrubbingTimeViewsEnabled(data.getSemanticActions()) && mIsScrubbing;
         setVisibleAndAlpha(expandedSet, elapsedTimeId, visible);
         setVisibleAndAlpha(expandedSet, totalTimeId, visible);
-        // Never show in collapsed
-        setVisibleAndAlpha(collapsedSet, elapsedTimeId, false);
-        setVisibleAndAlpha(collapsedSet, totalTimeId, false);
+        // Collapsed view is always GONE as set in XML, so doesn't need to be updated dynamically
     }
 
     private boolean scrubbingTimeViewsEnabled(@Nullable MediaButton semanticActions) {
diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaData.kt b/packages/SystemUI/src/com/android/systemui/media/MediaData.kt
index aeeef6b..5b2cda0 100644
--- a/packages/SystemUI/src/com/android/systemui/media/MediaData.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/MediaData.kt
@@ -215,7 +215,10 @@
     val intent: PendingIntent? = null,
 
     /** Unique id for this device */
-    val id: String? = null
+    val id: String? = null,
+
+    /** Whether or not to show the broadcast button */
+    val showBroadcastButton: Boolean
 ) {
     /**
      * Check whether [MediaDeviceData] objects are equal in all fields except the icon. The icon
@@ -230,6 +233,7 @@
         return enabled == other.enabled &&
             name == other.name &&
             intent == other.intent &&
-            id == other.id
+            id == other.id &&
+            showBroadcastButton == other.showBroadcastButton
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaDataManager.kt b/packages/SystemUI/src/com/android/systemui/media/MediaDataManager.kt
index 6a69d42..30ba476 100644
--- a/packages/SystemUI/src/com/android/systemui/media/MediaDataManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/MediaDataManager.kt
@@ -686,7 +686,8 @@
                 val enabled = deviceIntent != null && deviceIntent.isActivity
                 val deviceDrawable = Icon.createWithResource(sbn.packageName, deviceIcon)
                         .loadDrawable(sbn.getPackageContext(context))
-                device = MediaDeviceData(enabled, deviceDrawable, deviceName, deviceIntent)
+                device = MediaDeviceData(enabled, deviceDrawable, deviceName, deviceIntent,
+                        showBroadcastButton = false)
             }
         }
 
diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaDataUtils.java b/packages/SystemUI/src/com/android/systemui/media/MediaDataUtils.java
new file mode 100644
index 0000000..b8185b9
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/media/MediaDataUtils.java
@@ -0,0 +1,43 @@
+/**
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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;
+
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.text.TextUtils;
+
+public class MediaDataUtils {
+
+    public static String getAppLabel(Context context, String packageName, String unknownName) {
+        if (TextUtils.isEmpty(packageName)) {
+            return null;
+        }
+        final PackageManager packageManager = context.getPackageManager();
+        ApplicationInfo applicationInfo;
+        try {
+            applicationInfo = packageManager.getApplicationInfo(packageName, 0);
+        } catch (PackageManager.NameNotFoundException e) {
+            applicationInfo = null;
+        }
+        final String applicationName =
+                (String) (applicationInfo != null
+                        ? packageManager.getApplicationLabel(applicationInfo)
+                        : unknownName);
+        return applicationName;
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaDeviceManager.kt b/packages/SystemUI/src/com/android/systemui/media/MediaDeviceManager.kt
index baed1c4..8305050 100644
--- a/packages/SystemUI/src/com/android/systemui/media/MediaDeviceManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/MediaDeviceManager.kt
@@ -16,15 +16,23 @@
 
 package com.android.systemui.media
 
+import android.bluetooth.BluetoothLeBroadcast
+import android.bluetooth.BluetoothLeBroadcastMetadata
+import android.content.Context
 import android.graphics.drawable.Drawable
 import android.media.MediaRouter2Manager
 import android.media.session.MediaController
+import android.text.TextUtils
+import android.util.Log
 import androidx.annotation.AnyThread
 import androidx.annotation.MainThread
 import androidx.annotation.WorkerThread
+import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast
+import com.android.settingslib.bluetooth.LocalBluetoothManager
 import com.android.settingslib.media.LocalMediaManager
 import com.android.settingslib.media.MediaDevice
 import com.android.systemui.Dumpable
+import com.android.systemui.R
 import com.android.systemui.dagger.qualifiers.Background
 import com.android.systemui.dagger.qualifiers.Main
 import com.android.systemui.dump.DumpManager
@@ -36,16 +44,20 @@
 import javax.inject.Inject
 
 private const val PLAYBACK_TYPE_UNKNOWN = 0
+private const val TAG = "MediaDeviceManager"
+private const val DEBUG = true
 
 /**
  * Provides information about the route (ie. device) where playback is occurring.
  */
 class MediaDeviceManager @Inject constructor(
+    private val context: Context,
     private val controllerFactory: MediaControllerFactory,
     private val localMediaManagerFactory: LocalMediaManagerFactory,
     private val mr2manager: MediaRouter2Manager,
     private val muteAwaitConnectionManagerFactory: MediaMuteAwaitConnectionManagerFactory,
     private val configurationController: ConfigurationController,
+    private val localBluetoothManager: LocalBluetoothManager?,
     @Main private val fgExecutor: Executor,
     @Background private val bgExecutor: Executor,
     dumpManager: DumpManager
@@ -147,7 +159,8 @@
         val controller: MediaController?,
         val localMediaManager: LocalMediaManager,
         val muteAwaitConnectionManager: MediaMuteAwaitConnectionManager?
-    ) : LocalMediaManager.DeviceCallback, MediaController.Callback() {
+    ) : LocalMediaManager.DeviceCallback, MediaController.Callback(),
+            BluetoothLeBroadcast.Callback {
 
         val token
             get() = controller?.sessionToken
@@ -166,7 +179,7 @@
         // A device that is not yet connected but is expected to connect imminently. Because it's
         // expected to connect imminently, it should be displayed as the current device.
         private var aboutToConnectDeviceOverride: AboutToConnectDevice? = null
-
+        private var broadcastDescription: String? = null
         private val configListener = object : ConfigurationController.ConfigurationListener {
             override fun onLocaleListChanged() {
                 updateCurrent()
@@ -238,7 +251,11 @@
         ) {
             aboutToConnectDeviceOverride = AboutToConnectDevice(
                 fullMediaDevice = localMediaManager.getMediaDeviceById(deviceAddress),
-                backupMediaDeviceData = MediaDeviceData(enabled = true, deviceIcon, deviceName)
+                backupMediaDeviceData = MediaDeviceData(
+                        /* enabled */ enabled = true,
+                        /* icon */ deviceIcon,
+                        /* name */ deviceName,
+                        /* showBroadcastButton */ showBroadcastButton = false)
             )
             updateCurrent()
         }
@@ -248,23 +265,127 @@
             updateCurrent()
         }
 
+
+        override fun onBroadcastStarted(reason: Int, broadcastId: Int) {
+            if (DEBUG) {
+                Log.d(TAG, "onBroadcastStarted(), reason = $reason , broadcastId = $broadcastId")
+            }
+            updateCurrent()
+        }
+
+        override fun onBroadcastStartFailed(reason: Int) {
+            if (DEBUG) {
+                Log.d(TAG, "onBroadcastStartFailed(), reason = $reason")
+            }
+        }
+
+        override fun onBroadcastMetadataChanged(broadcastId: Int,
+                                                metadata: BluetoothLeBroadcastMetadata) {
+            if (DEBUG) {
+                Log.d(TAG, "onBroadcastMetadataChanged(), broadcastId = $broadcastId , " +
+                        "metadata = $metadata")
+            }
+            updateCurrent()
+        }
+
+        override fun onBroadcastStopped(reason: Int, broadcastId: Int) {
+            if (DEBUG) {
+                Log.d(TAG, "onBroadcastStopped(), reason = $reason , broadcastId = $broadcastId")
+
+            }
+            updateCurrent()
+        }
+
+        override fun onBroadcastStopFailed(reason: Int) {
+            if (DEBUG) {
+                Log.d(TAG, "onBroadcastStopFailed(), reason = $reason")
+            }
+        }
+
+        override fun onBroadcastUpdated(reason: Int, broadcastId: Int) {
+            if (DEBUG) {
+                Log.d(TAG, "onBroadcastUpdated(), reason = $reason , broadcastId = $broadcastId")
+            }
+            updateCurrent()
+        }
+
+        override fun onBroadcastUpdateFailed(reason: Int, broadcastId: Int) {
+            if (DEBUG) {
+                Log.d(TAG, "onBroadcastUpdateFailed(), reason = $reason , " +
+                        "broadcastId = $broadcastId")
+            }
+        }
+
+        override fun onPlaybackStarted(reason: Int, broadcastId: Int) {}
+
+        override fun onPlaybackStopped(reason: Int, broadcastId: Int) {}
+
         @WorkerThread
         private fun updateCurrent() {
-            val aboutToConnect = aboutToConnectDeviceOverride
-            if (aboutToConnect != null &&
-                aboutToConnect.fullMediaDevice == null &&
-                aboutToConnect.backupMediaDeviceData != null) {
+            if (isLeAudioBroadcastEnabled()) {
+                current = MediaDeviceData(
+                        /* enabled */ true,
+                        /* icon */ context.getDrawable(R.drawable.settings_input_antenna),
+                        /* name */ broadcastDescription,
+                        /* intent */ null,
+                        /* showBroadcastButton */ showBroadcastButton = true)
+            } else {
+                val aboutToConnect = aboutToConnectDeviceOverride
+                if (aboutToConnect != null &&
+                        aboutToConnect.fullMediaDevice == null &&
+                        aboutToConnect.backupMediaDeviceData != null) {
                     // Only use [backupMediaDeviceData] when we don't have [fullMediaDevice].
                     current = aboutToConnect.backupMediaDeviceData
                     return
-            }
-            val device = aboutToConnect?.fullMediaDevice ?: localMediaManager.currentConnectedDevice
-            val route = controller?.let { mr2manager.getRoutingSessionForMediaController(it) }
+                }
+                val device = aboutToConnect?.fullMediaDevice
+                        ?: localMediaManager.currentConnectedDevice
+                val route = controller?.let { mr2manager.getRoutingSessionForMediaController(it) }
 
-            // If we have a controller but get a null route, then don't trust the device
-            val enabled = device != null && (controller == null || route != null)
-            val name = route?.name?.toString() ?: device?.name
-            current = MediaDeviceData(enabled, device?.iconWithoutBackground, name, id = device?.id)
+                // If we have a controller but get a null route, then don't trust the device
+                val enabled = device != null && (controller == null || route != null)
+                val name = route?.name?.toString() ?: device?.name
+                current = MediaDeviceData(enabled, device?.iconWithoutBackground, name,
+                        id = device?.id, showBroadcastButton = false)
+            }
+        }
+
+        private fun isLeAudioBroadcastEnabled(): Boolean {
+            if (localBluetoothManager != null) {
+                val profileManager = localBluetoothManager.profileManager
+                if (profileManager != null) {
+                    val bluetoothLeBroadcast = profileManager.leAudioBroadcastProfile
+                    if (bluetoothLeBroadcast != null && bluetoothLeBroadcast.isEnabled(null)) {
+                        getBroadcastingInfo(bluetoothLeBroadcast)
+                        return true
+                    } else if (DEBUG) {
+                        Log.d(TAG, "Can not get LocalBluetoothLeBroadcast")
+                    }
+                } else if (DEBUG) {
+                    Log.d(TAG, "Can not get LocalBluetoothProfileManager")
+                }
+            } else if (DEBUG) {
+                Log.d(TAG, "Can not get LocalBluetoothManager")
+            }
+            return false
+        }
+
+        private fun getBroadcastingInfo(bluetoothLeBroadcast: LocalBluetoothLeBroadcast) {
+            var currentBroadcastedApp = bluetoothLeBroadcast.appSourceName
+            // TODO(b/233698402): Use the package name instead of app label to avoid the
+            // unexpected result.
+            // Check the current media app's name is the same with current broadcast app's name
+            // or not.
+            var mediaApp = MediaDataUtils.getAppLabel(
+                    context, localMediaManager.packageName,
+                    context.getString(R.string.bt_le_audio_broadcast_dialog_unknown_name))
+            var isCurrentBroadcastedApp = TextUtils.equals(mediaApp, currentBroadcastedApp)
+            if (isCurrentBroadcastedApp) {
+                broadcastDescription = context.getString(
+                        R.string.broadcasting_description_is_broadcasting)
+            } else {
+                broadcastDescription = currentBroadcastedApp
+            }
         }
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaHierarchyManager.kt b/packages/SystemUI/src/com/android/systemui/media/MediaHierarchyManager.kt
index ed5c193..458ed40 100644
--- a/packages/SystemUI/src/com/android/systemui/media/MediaHierarchyManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/MediaHierarchyManager.kt
@@ -23,6 +23,7 @@
 import android.content.Context
 import android.content.res.Configuration
 import android.graphics.Rect
+import android.util.Log
 import android.util.MathUtils
 import android.view.View
 import android.view.ViewGroup
@@ -48,6 +49,8 @@
 import com.android.systemui.util.traceSection
 import javax.inject.Inject
 
+private val TAG: String = MediaHierarchyManager::class.java.simpleName
+
 /**
  * Similarly to isShown but also excludes views that have 0 alpha
  */
@@ -141,8 +144,7 @@
                     animatedFraction)
                 // When crossfading, let's keep the bounds at the right location during fading
                 boundsProgress = if (animationCrossFadeProgress < 0.5f) 0.0f else 1.0f
-                currentAlpha = calculateAlphaFromCrossFade(animationCrossFadeProgress,
-                    instantlyShowAtEnd = false)
+                currentAlpha = calculateAlphaFromCrossFade(animationCrossFadeProgress)
             } else {
                 // If we're not crossfading, let's interpolate from the start alpha to 1.0f
                 currentAlpha = MathUtils.lerp(animationStartAlpha, 1.0f, animatedFraction)
@@ -273,7 +275,7 @@
             if (value >= 0) {
                 updateTargetState()
                 // Setting the alpha directly, as the below call will use it to update the alpha
-                carouselAlpha = calculateAlphaFromCrossFade(field, instantlyShowAtEnd = true)
+                carouselAlpha = calculateAlphaFromCrossFade(field)
                 applyTargetStateIfNotAnimating()
             }
         }
@@ -411,18 +413,10 @@
      * @param crossFadeProgress The current cross fade progress. 0.5f means it's just switching
      * between the start and the end location and the content is fully faded, while 0.75f means
      * that we're halfway faded in again in the target state.
-     *
-     * @param instantlyShowAtEnd should the view be instantly shown at the end. This is needed
-     * to avoid fadinging in when the target was hidden anyway.
      */
-    private fun calculateAlphaFromCrossFade(
-        crossFadeProgress: Float,
-        instantlyShowAtEnd: Boolean
-    ): Float {
+    private fun calculateAlphaFromCrossFade(crossFadeProgress: Float): Float {
         if (crossFadeProgress <= 0.5f) {
             return 1.0f - crossFadeProgress / 0.5f
-        } else if (instantlyShowAtEnd) {
-            return 1.0f
         } else {
             return (crossFadeProgress - 0.5f) / 0.5f
         }
@@ -964,6 +958,14 @@
                         top,
                         left + currentBounds.width(),
                         top + currentBounds.height())
+
+                if (mediaFrame.childCount > 0) {
+                    val child = mediaFrame.getChildAt(0)
+                    if (mediaFrame.height < child.height) {
+                        Log.wtf(TAG, "mediaFrame height is too small for child: " +
+                            "${mediaFrame.height} vs ${child.height}")
+                    }
+                }
             }
             if (isCrossFadeAnimatorRunning) {
                 // When cross-fading with an animation, we only notify the media carousel of the
diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaProjectionAppSelectorActivity.kt b/packages/SystemUI/src/com/android/systemui/media/MediaProjectionAppSelectorActivity.kt
new file mode 100644
index 0000000..53abd99
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/media/MediaProjectionAppSelectorActivity.kt
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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
+
+import android.app.ActivityOptions
+import android.content.Intent
+import android.media.projection.IMediaProjection
+import android.media.projection.MediaProjectionManager.EXTRA_MEDIA_PROJECTION
+import android.os.Binder
+import android.os.Bundle
+import android.os.IBinder
+import android.os.ResultReceiver
+import android.view.View
+import com.android.internal.app.ChooserActivity
+import com.android.internal.app.chooser.NotSelectableTargetInfo
+import com.android.internal.app.chooser.TargetInfo
+import com.android.systemui.util.AsyncActivityLauncher
+import com.android.systemui.R;
+import javax.inject.Inject
+
+class MediaProjectionAppSelectorActivity @Inject constructor(
+    private val activityLauncher: AsyncActivityLauncher
+) : ChooserActivity() {
+
+    public override fun onCreate(bundle: Bundle?) {
+        val queryIntent = Intent(Intent.ACTION_MAIN)
+            .addCategory(Intent.CATEGORY_LAUNCHER)
+        intent.putExtra(Intent.EXTRA_INTENT, queryIntent)
+
+        // TODO(b/235465652) Use resource lexeme
+        intent.putExtra(Intent.EXTRA_TITLE, "Record or cast an app")
+
+        super.onCreate(bundle)
+
+        // TODO(b/235465652) we should update VisD of the title and add an icon
+        findViewById<View>(R.id.title)?.visibility = View.VISIBLE
+    }
+
+    override fun appliedThemeResId(): Int =
+        R.style.Theme_SystemUI_MediaProjectionAppSelector
+
+    override fun startSelected(which: Int, always: Boolean, filtered: Boolean) {
+        val currentListAdapter = mChooserMultiProfilePagerAdapter.activeListAdapter
+        val targetInfo = currentListAdapter.targetInfoForPosition(which, filtered) ?: return
+        if (targetInfo is NotSelectableTargetInfo) return
+
+        val intent = createIntent(targetInfo)
+
+        val launchToken: IBinder = Binder("media_projection_launch_token")
+        val activityOptions = ActivityOptions.makeBasic()
+        activityOptions.launchCookie = launchToken
+
+        val userHandle = mMultiProfilePagerAdapter.activeListAdapter.userHandle
+
+        // Launch activity asynchronously and wait for the result, launching of an activity
+        // is typically very fast, so we don't show any loaders.
+        // We wait for the activity to be launched to make sure that the window of the activity
+        // is created and ready to be captured.
+        val activityStarted = activityLauncher
+            .startActivityAsUser(intent, userHandle, activityOptions.toBundle()) {
+                onTargetActivityLaunched(launchToken)
+            }
+
+        // Rely on the ActivityManager to pop up a dialog regarding app suspension
+        // and return false if suspended
+        if (!targetInfo.isSuspended && activityStarted) {
+            // TODO(b/222078415) track activity launch
+        }
+    }
+
+    private fun createIntent(target: TargetInfo): Intent {
+        val intent = Intent(target.resolvedIntent)
+
+        // Launch the app in a new task, so it won't be in the host's app task
+        intent.flags = intent.flags or Intent.FLAG_ACTIVITY_NEW_TASK
+
+        // Remove activity forward result flag as this activity will
+        // return the media projection session
+        intent.flags = intent.flags and Intent.FLAG_ACTIVITY_FORWARD_RESULT.inv()
+
+        return intent
+    }
+
+    override fun onDestroy() {
+        activityLauncher.destroy()
+        super.onDestroy()
+    }
+
+    override fun onActivityStarted(cti: TargetInfo) {
+        // do nothing
+    }
+
+    private fun onTargetActivityLaunched(launchToken: IBinder) {
+        if (intent.hasExtra(EXTRA_CAPTURE_REGION_RESULT_RECEIVER)) {
+            // The client requested to return the result in the result receiver instead of
+            // activity result, let's send the media projection to the result receiver
+            val resultReceiver = intent
+                .getParcelableExtra(EXTRA_CAPTURE_REGION_RESULT_RECEIVER,
+                    ResultReceiver::class.java) as ResultReceiver
+            val captureRegion = MediaProjectionCaptureTarget(launchToken)
+            val data = Bundle().apply {
+                putParcelable(KEY_CAPTURE_TARGET, captureRegion)
+            }
+            resultReceiver.send(RESULT_OK, data)
+        } else {
+            // Return the media projection instance as activity result
+            val mediaProjectionBinder = intent.getIBinderExtra(EXTRA_MEDIA_PROJECTION)
+            val projection = IMediaProjection.Stub.asInterface(mediaProjectionBinder)
+
+            projection.launchCookie = launchToken
+
+            val intent = Intent()
+            intent.putExtra(EXTRA_MEDIA_PROJECTION, projection.asBinder())
+            setResult(RESULT_OK, intent)
+            setForceSendResultForMediaProjection()
+        }
+
+        finish()
+    }
+
+    override fun shouldGetOnlyDefaultActivities() = false
+
+    companion object {
+        /**
+         * When EXTRA_CAPTURE_REGION_RESULT_RECEIVER is passed as intent extra
+         * the activity will send the [CaptureRegion] to the result receiver
+         * instead of returning media projection instance through activity result.
+         */
+        const val EXTRA_CAPTURE_REGION_RESULT_RECEIVER = "capture_region_result_receiver"
+        const val KEY_CAPTURE_TARGET = "capture_region"
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaProjectionCaptureTarget.kt b/packages/SystemUI/src/com/android/systemui/media/MediaProjectionCaptureTarget.kt
new file mode 100644
index 0000000..fbf9294
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/media/MediaProjectionCaptureTarget.kt
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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
+
+import android.os.IBinder
+import android.os.Parcel
+import android.os.Parcelable
+
+/**
+ * Class that represents an area that should be captured.
+ * Currently it has only a launch cookie that represents a task but
+ * we potentially could add more identifiers e.g. for a pair of tasks.
+ */
+data class MediaProjectionCaptureTarget(
+    val launchCookie: IBinder?
+): Parcelable {
+
+    constructor(parcel: Parcel) : this(parcel.readStrongBinder())
+
+    override fun writeToParcel(dest: Parcel, flags: Int) {
+        dest.writeStrongBinder(launchCookie)
+    }
+
+    override fun describeContents(): Int = 0
+
+    companion object CREATOR : Parcelable.Creator<MediaProjectionCaptureTarget> {
+        override fun createFromParcel(parcel: Parcel): MediaProjectionCaptureTarget {
+            return MediaProjectionCaptureTarget(parcel)
+        }
+
+        override fun newArray(size: Int): Array<MediaProjectionCaptureTarget?> {
+            return arrayOfNulls(size)
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaProjectionPermissionActivity.java b/packages/SystemUI/src/com/android/systemui/media/MediaProjectionPermissionActivity.java
index 3860409..397bffc 100644
--- a/packages/SystemUI/src/com/android/systemui/media/MediaProjectionPermissionActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/media/MediaProjectionPermissionActivity.java
@@ -40,7 +40,10 @@
 import android.util.Log;
 import android.view.Window;
 
+import com.android.systemui.Dependency;
 import com.android.systemui.R;
+import com.android.systemui.flags.FeatureFlags;
+import com.android.systemui.flags.Flags;
 import com.android.systemui.statusbar.phone.SystemUIDialog;
 import com.android.systemui.util.Utils;
 
@@ -53,6 +56,7 @@
     private String mPackageName;
     private int mUid;
     private IMediaProjectionManager mService;
+    private FeatureFlags mFeatureFlags;
 
     private AlertDialog mDialog;
 
@@ -60,6 +64,7 @@
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
 
+        mFeatureFlags = Dependency.get(FeatureFlags.class);
         mPackageName = getCallingPackage();
         IBinder b = ServiceManager.getService(MEDIA_PROJECTION_SERVICE);
         mService = IMediaProjectionManager.Stub.asInterface(b);
@@ -141,14 +146,22 @@
             dialogTitle = getString(R.string.media_projection_dialog_title, appName);
         }
 
-        mDialog = new AlertDialog.Builder(this, R.style.Theme_SystemUI_Dialog)
+        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this,
+                R.style.Theme_SystemUI_Dialog)
                 .setTitle(dialogTitle)
                 .setIcon(R.drawable.ic_media_projection_permission)
                 .setMessage(dialogText)
                 .setPositiveButton(R.string.media_projection_action_text, this)
                 .setNeutralButton(android.R.string.cancel, this)
-                .setOnCancelListener(this)
-                .create();
+                .setOnCancelListener(this);
+
+        if (isPartialScreenSharingEnabled()) {
+            // This is a temporary entry point before we have a new permission dialog
+            // TODO(b/233183090): this activity should be redesigned to have a dropdown selector
+            dialogBuilder.setNegativeButton("App", this);
+        }
+
+        mDialog = dialogBuilder.create();
 
         SystemUIDialog.registerDismissListener(mDialog);
         SystemUIDialog.applyFlags(mDialog);
@@ -177,6 +190,15 @@
             if (which == AlertDialog.BUTTON_POSITIVE) {
                 setResult(RESULT_OK, getMediaProjectionIntent(mUid, mPackageName));
             }
+
+            if (isPartialScreenSharingEnabled() && which == AlertDialog.BUTTON_NEGATIVE) {
+                IMediaProjection projection = createProjection(mUid, mPackageName);
+                final Intent intent = new Intent(this, MediaProjectionAppSelectorActivity.class);
+                intent.putExtra(MediaProjectionManager.EXTRA_MEDIA_PROJECTION,
+                        projection.asBinder());
+                intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+                startActivity(intent);
+            }
         } catch (RemoteException e) {
             Log.e(TAG, "Error granting projection permission", e);
             setResult(RESULT_CANCELED);
@@ -188,10 +210,14 @@
         }
     }
 
+    private IMediaProjection createProjection(int uid, String packageName) throws RemoteException {
+        return mService.createProjection(uid, packageName,
+                MediaProjectionManager.TYPE_SCREEN_CAPTURE, false /* permanentGrant */);
+    }
+
     private Intent getMediaProjectionIntent(int uid, String packageName)
             throws RemoteException {
-        IMediaProjection projection = mService.createProjection(uid, packageName,
-                MediaProjectionManager.TYPE_SCREEN_CAPTURE, false /* permanentGrant */);
+        IMediaProjection projection = createProjection(uid, packageName);
         Intent intent = new Intent();
         intent.putExtra(MediaProjectionManager.EXTRA_MEDIA_PROJECTION, projection.asBinder());
         return intent;
@@ -201,4 +227,8 @@
     public void onCancel(DialogInterface dialog) {
         finish();
     }
+
+    private boolean isPartialScreenSharingEnabled() {
+        return mFeatureFlags.isEnabled(Flags.WM_ENABLE_PARTIAL_SCREEN_SHARING);
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaUiEventLogger.kt b/packages/SystemUI/src/com/android/systemui/media/MediaUiEventLogger.kt
index 52f5cc5..0baf01e 100644
--- a/packages/SystemUI/src/com/android/systemui/media/MediaUiEventLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/MediaUiEventLogger.kt
@@ -176,6 +176,11 @@
         logger.logWithInstanceId(MediaUiEvent.MEDIA_RECOMMENDATION_CARD_TAP, 0, packageName,
             instanceId)
     }
+
+    fun logOpenBroadcastDialog(uid: Int, packageName: String, instanceId: InstanceId) {
+        logger.logWithInstanceId(MediaUiEvent.MEDIA_OPEN_BROADCAST_DIALOG, uid, packageName,
+            instanceId)
+    }
 }
 
 enum class MediaUiEvent(val metricId: Int) : UiEventLogger.UiEventEnum {
@@ -273,7 +278,10 @@
     MEDIA_RECOMMENDATION_ITEM_TAP(1044),
 
     @UiEvent(doc = "User tapped on a media recommendation card")
-    MEDIA_RECOMMENDATION_CARD_TAP(1045);
+    MEDIA_RECOMMENDATION_CARD_TAP(1045),
+
+    @UiEvent(doc = "User opened the broadcast dialog from a media control")
+    MEDIA_OPEN_BROADCAST_DIALOG(1079);
 
     override fun getId() = metricId
 }
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/media/dagger/MediaProjectionModule.kt b/packages/SystemUI/src/com/android/systemui/media/dagger/MediaProjectionModule.kt
new file mode 100644
index 0000000..e33a1b9
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/media/dagger/MediaProjectionModule.kt
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.dagger
+
+import android.app.Activity
+import com.android.systemui.media.MediaProjectionAppSelectorActivity
+import dagger.Binds
+import dagger.Module
+import dagger.multibindings.ClassKey
+import dagger.multibindings.IntoMap
+
+@Module
+abstract class MediaProjectionModule {
+
+    @Binds
+    @IntoMap
+    @ClassKey(MediaProjectionAppSelectorActivity::class)
+    abstract fun provideMediaProjectionAppSelectorActivity(
+        activity: MediaProjectionAppSelectorActivity): Activity
+
+}
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java
index 1ab0b5e..e360d10 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java
@@ -42,14 +42,11 @@
     private static final String TAG = "MediaOutputAdapter";
     private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
-    private final MediaOutputDialog mMediaOutputDialog;
     private ViewGroup mConnectedItem;
     private boolean mIncludeDynamicGroup;
 
-    public MediaOutputAdapter(MediaOutputController controller,
-            MediaOutputDialog mediaOutputDialog) {
+    public MediaOutputAdapter(MediaOutputController controller) {
         super(controller);
-        mMediaOutputDialog = mediaOutputDialog;
         setHasStableIds(true);
     }
 
@@ -63,7 +60,7 @@
     @Override
     public void onBindViewHolder(@NonNull MediaDeviceBaseViewHolder viewHolder, int position) {
         final int size = mController.getMediaDevices().size();
-        if (position == size && mController.isZeroMode()) {
+        if (position == size) {
             viewHolder.onBind(CUSTOMIZED_ITEM_PAIR_NEW, false /* topMargin */,
                     true /* bottomMargin */);
         } else if (position < size) {
@@ -78,7 +75,7 @@
     @Override
     public long getItemId(int position) {
         final int size = mController.getMediaDevices().size();
-        if (position == size && mController.isZeroMode()) {
+        if (position == size) {
             return -1;
         } else if (position < size) {
             return ((List<MediaDevice>) (mController.getMediaDevices()))
@@ -91,11 +88,8 @@
 
     @Override
     public int getItemCount() {
-        if (mController.isZeroMode()) {
-            // Add extra one for "pair new" or dynamic group
-            return mController.getMediaDevices().size() + 1;
-        }
-        return mController.getMediaDevices().size();
+        // Add extra one for "pair new"
+        return mController.getMediaDevices().size() + 1;
     }
 
     class MediaDeviceViewHolder extends MediaDeviceBaseViewHolder {
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 9b964a5..4ef98cf 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java
@@ -91,6 +91,7 @@
     private TextView mHeaderSubtitle;
     private ImageView mHeaderIcon;
     private ImageView mAppResourceIcon;
+    private ImageView mBroadcastIcon;
     private RecyclerView mDevicesRecyclerView;
     private LinearLayout mDeviceListLayout;
     private LinearLayout mCastAppLayout;
@@ -100,6 +101,7 @@
     private int mListMaxHeight;
     private WallpaperColors mWallpaperColors;
     private Executor mExecutor;
+    private boolean mShouldLaunchLeBroadcastDialog;
 
     MediaOutputBaseAdapter mAdapter;
 
@@ -239,6 +241,7 @@
         mAppButton = mDialogView.requireViewById(R.id.launch_app_button);
         mAppResourceIcon = mDialogView.requireViewById(R.id.app_source_icon);
         mCastAppLayout = mDialogView.requireViewById(R.id.cast_app_section);
+        mBroadcastIcon = mDialogView.requireViewById(R.id.broadcast_icon);
 
         mDeviceListLayout.getViewTreeObserver().addOnGlobalLayoutListener(
                 mDeviceListLayoutListener);
@@ -366,6 +369,9 @@
         mStopButton.setEnabled(true);
         mStopButton.setText(getStopButtonText());
         mStopButton.setOnClickListener(v -> onStopButtonClick());
+
+        mBroadcastIcon.setVisibility(getBroadcastIconVisibility());
+        mBroadcastIcon.setOnClickListener(v -> onBroadcastIconClick());
     }
 
     private void updateButtonBackgroundColorFilter() {
@@ -394,7 +400,9 @@
     }
 
     public void handleLeBroadcastStarted() {
-        startLeBroadcastDialog();
+        // Waiting for the onBroadcastMetadataChanged. The UI launchs the broadcast dialog when
+        // the metadata is ready.
+        mShouldLaunchLeBroadcastDialog = true;
     }
 
     public void handleLeBroadcastStartFailed() {
@@ -404,10 +412,15 @@
     }
 
     public void handleLeBroadcastMetadataChanged() {
+        if (mShouldLaunchLeBroadcastDialog) {
+            startLeBroadcastDialog();
+            mShouldLaunchLeBroadcastDialog = false;
+        }
         refresh();
     }
 
     public void handleLeBroadcastStopped() {
+        mShouldLaunchLeBroadcastDialog = false;
         refresh();
     }
 
@@ -482,7 +495,7 @@
     abstract int getStopButtonVisibility();
 
     public CharSequence getStopButtonText() {
-        return mContext.getText(R.string.media_output_dialog_button_stop_casting);
+        return mContext.getText(R.string.keyboard_key_media_stop);
     }
 
     public void onStopButtonClick() {
@@ -490,6 +503,14 @@
         dismiss();
     }
 
+    public int getBroadcastIconVisibility() {
+        return View.GONE;
+    }
+
+    public void onBroadcastIconClick() {
+        // Do nothing.
+    }
+
     public boolean isBroadcastSupported() {
         return 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 8f06546..310469d 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBroadcastDialog.java
@@ -74,7 +74,7 @@
     MediaOutputBroadcastDialog(Context context, boolean aboveStatusbar,
             BroadcastSender broadcastSender, MediaOutputController mediaOutputController) {
         super(context, broadcastSender, mediaOutputController);
-        mAdapter = new MediaOutputGroupAdapter(mMediaOutputController);
+        mAdapter = new MediaOutputAdapter(mMediaOutputController);
         // TODO(b/226710953): Move the part to MediaOutputBaseDialog for every class
         //  that extends MediaOutputBaseDialog
         if (!aboveStatusbar) {
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java
index f8b5edc..52dbfe5 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputController.java
@@ -16,7 +16,7 @@
 
 package com.android.systemui.media.dialog;
 
-import static android.provider.Settings.ACTION_BLUETOOTH_PAIRING_SETTINGS;
+import static android.provider.Settings.ACTION_BLUETOOTH_SETTINGS;
 
 import android.annotation.CallbackExecutor;
 import android.app.AlertDialog;
@@ -62,6 +62,7 @@
 import com.android.settingslib.Utils;
 import com.android.settingslib.bluetooth.BluetoothUtils;
 import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast;
+import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcastMetadata;
 import com.android.settingslib.bluetooth.LocalBluetoothManager;
 import com.android.settingslib.media.InfoMediaManager;
 import com.android.settingslib.media.LocalMediaManager;
@@ -300,6 +301,9 @@
             return;
         }
         try {
+            synchronized (mMediaDevicesLock) {
+                mMediaDevices.removeIf(MediaDevice::isMutingExpectedDevice);
+            }
             mAudioManager.cancelMuteAwaitConnection(mAudioManager.getMutingExpectedDevice());
         } catch (Exception e) {
             Log.d(TAG, "Unable to cancel mute await connection");
@@ -711,22 +715,6 @@
         return false;
     }
 
-    boolean isZeroMode() {
-        synchronized (mMediaDevicesLock) {
-            if (mMediaDevices.size() == 1) {
-                final MediaDevice device = mMediaDevices.iterator().next();
-                // Add "pair new" only when local output device exists
-                final int type = device.getDeviceType();
-                if (type == MediaDevice.MediaDeviceType.TYPE_PHONE_DEVICE
-                        || type == MediaDevice.MediaDeviceType.TYPE_3POINT5_MM_AUDIO_DEVICE
-                        || type == MediaDevice.MediaDeviceType.TYPE_USB_C_AUDIO_DEVICE) {
-                    return true;
-                }
-            }
-            return false;
-        }
-    }
-
     void launchBluetoothPairing(View view) {
         ActivityLaunchAnimator.Controller controller =
                 mDialogLaunchAnimator.createActivityLaunchController(view);
@@ -736,7 +724,7 @@
         }
 
         Intent launchIntent =
-                new Intent(ACTION_BLUETOOTH_PAIRING_SETTINGS)
+                new Intent(ACTION_BLUETOOTH_SETTINGS)
                         .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
         final Intent deepLinkIntent =
                 new Intent(Settings.ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY);
@@ -847,7 +835,9 @@
             Log.d(TAG, "getBroadcastMetadata: LE Audio Broadcast is null");
             return "";
         }
-        return broadcast.getLocalBluetoothLeBroadcastMetaData().convertToQrCodeString();
+        final LocalBluetoothLeBroadcastMetadata metadata =
+                broadcast.getLocalBluetoothLeBroadcastMetaData();
+        return metadata != null ? metadata.convertToQrCodeString() : "";
     }
 
     boolean isActiveRemoteDevice(@NonNull MediaDevice device) {
@@ -858,6 +848,10 @@
                 || features.contains(MediaRoute2Info.FEATURE_REMOTE_GROUP_PLAYBACK));
     }
 
+    boolean isBluetoothLeDevice(@NonNull MediaDevice device) {
+        return device.isBLEDevice();
+    }
+
     boolean isBroadcastSupported() {
         LocalBluetoothLeBroadcast broadcast =
                 mLocalBluetoothManager.getProfileManager().getLeAudioBroadcastProfile();
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialog.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialog.java
index 026a305..fc4773d 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialog.java
@@ -42,7 +42,7 @@
             MediaOutputController mediaOutputController, UiEventLogger uiEventLogger) {
         super(context, broadcastSender, mediaOutputController);
         mUiEventLogger = uiEventLogger;
-        mAdapter = new MediaOutputAdapter(mMediaOutputController, this);
+        mAdapter = new MediaOutputAdapter(mMediaOutputController);
         if (!aboveStatusbar) {
             getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
         }
@@ -99,12 +99,17 @@
 
     @Override
     public boolean isBroadcastSupported() {
-        return mMediaOutputController.isBroadcastSupported();
+        boolean isBluetoothLeDevice = false;
+        if (mMediaOutputController.getCurrentConnectedMediaDevice() != null) {
+            isBluetoothLeDevice = mMediaOutputController.isBluetoothLeDevice(
+                    mMediaOutputController.getCurrentConnectedMediaDevice());
+        }
+        return mMediaOutputController.isBroadcastSupported() && isBluetoothLeDevice;
     }
 
     @Override
     public CharSequence getStopButtonText() {
-        int resId = R.string.media_output_dialog_button_stop_casting;
+        int resId = R.string.keyboard_key_media_stop;
         if (isBroadcastSupported() && mMediaOutputController.isPlaying()
                 && !mMediaOutputController.isBluetoothLeBroadcastEnabled()) {
             resId = R.string.media_output_broadcast;
@@ -129,6 +134,17 @@
         }
     }
 
+    @Override
+    public int getBroadcastIconVisibility() {
+        return (isBroadcastSupported() && mMediaOutputController.isBluetoothLeBroadcastEnabled())
+                ? View.VISIBLE : View.GONE;
+    }
+
+    @Override
+    public void onBroadcastIconClick() {
+        startLeBroadcastDialog();
+    }
+
     @VisibleForTesting
     public enum MediaOutputEvent implements UiEventLogger.UiEventEnum {
         @UiEvent(doc = "The MediaOutput dialog became visible on the screen.")
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialogFactory.kt b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialogFactory.kt
index 5581fb8..8249a7c 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialogFactory.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialogFactory.kt
@@ -21,8 +21,10 @@
 import android.media.session.MediaSessionManager
 import android.os.PowerExemptionManager
 import android.view.View
+import com.android.internal.jank.InteractionJankMonitor
 import com.android.internal.logging.UiEventLogger
 import com.android.settingslib.bluetooth.LocalBluetoothManager
+import com.android.systemui.animation.DialogCuj
 import com.android.systemui.animation.DialogLaunchAnimator
 import com.android.systemui.broadcast.BroadcastSender
 import com.android.systemui.media.nearby.NearbyMediaDevicesManager
@@ -48,6 +50,7 @@
     private val powerExemptionManager: PowerExemptionManager
 ) {
     companion object {
+        private const val INTERACTION_JANK_TAG = "media_output"
         var mediaOutputDialog: MediaOutputDialog? = null
     }
 
@@ -67,7 +70,13 @@
 
         // Show the dialog.
         if (view != null) {
-            dialogLaunchAnimator.showFromView(dialog, view)
+            dialogLaunchAnimator.showFromView(
+                dialog, view,
+                cuj = DialogCuj(
+                    InteractionJankMonitor.CUJ_SHADE_DIALOG_OPEN,
+                    INTERACTION_JANK_TAG
+                )
+            )
         } else {
             dialog.show()
         }
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputGroupAdapter.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputGroupAdapter.java
deleted file mode 100644
index ba2f006..0000000
--- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputGroupAdapter.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.dialog;
-
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.drawable.Drawable;
-import android.text.TextUtils;
-import android.util.Log;
-import android.util.TypedValue;
-import android.view.View;
-import android.view.ViewGroup;
-
-import androidx.annotation.NonNull;
-
-import com.android.settingslib.media.MediaDevice;
-import com.android.systemui.R;
-
-import java.util.List;
-
-/**
- * Adapter for media output dynamic group dialog.
- */
-//TODO: clear this class after new UI updated
-public class MediaOutputGroupAdapter extends MediaOutputBaseAdapter {
-
-    private static final String TAG = "MediaOutputGroupAdapter";
-    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
-
-    private final List<MediaDevice> mGroupMediaDevices;
-
-    public MediaOutputGroupAdapter(MediaOutputController controller) {
-        super(controller);
-        mGroupMediaDevices = controller.getGroupMediaDevices();
-    }
-
-    @Override
-    public MediaDeviceBaseViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup,
-            int viewType) {
-        super.onCreateViewHolder(viewGroup, viewType);
-
-        return new GroupViewHolder(mHolderView);
-    }
-
-    @Override
-    public void onBindViewHolder(@NonNull MediaDeviceBaseViewHolder viewHolder, int position) {
-        // Add "Group"
-        if (position == 0) {
-            viewHolder.onBind(CUSTOMIZED_ITEM_GROUP, true /* topMargin */,
-                    false /* bottomMargin */);
-            return;
-        }
-        // Add available devices
-        final int newPosition = position - 1;
-        final int size = mGroupMediaDevices.size();
-        if (newPosition < size) {
-            viewHolder.onBind(mGroupMediaDevices.get(newPosition), false /* topMargin */,
-                    newPosition == (size - 1) /* bottomMargin */, position);
-            return;
-        }
-        if (DEBUG) {
-            Log.d(TAG, "Incorrect position: " + position);
-        }
-    }
-
-    @Override
-    public int getItemCount() {
-        // Require extra item for group volume operation
-        return mGroupMediaDevices.size() + 1;
-    }
-
-    @Override
-    CharSequence getItemTitle(MediaDevice device) {
-        return super.getItemTitle(device);
-    }
-
-    class GroupViewHolder extends MediaDeviceBaseViewHolder {
-
-        GroupViewHolder(View view) {
-            super(view);
-        }
-
-        @Override
-        void onBind(MediaDevice device, boolean topMargin, boolean bottomMargin, int position) {
-            super.onBind(device, topMargin, bottomMargin, position);
-            mCheckBox.setVisibility(View.VISIBLE);
-            mCheckBox.setOnCheckedChangeListener((buttonView, isChecked) -> {
-                onCheckBoxClicked(isChecked, device);
-            });
-            boolean isCurrentSeekbarInvisible = mSeekBar.getVisibility() == View.GONE;
-            setTwoLineLayout(device, false /* bFocused */, true /* showSeekBar */,
-                    false /* showProgressBar */, false /* showSubtitle*/);
-            initSeekbar(device, isCurrentSeekbarInvisible);
-            final List<MediaDevice> selectedDevices = mController.getSelectedMediaDevice();
-            if (isDeviceIncluded(mController.getSelectableMediaDevice(), device)) {
-                mCheckBox.setButtonDrawable(R.drawable.ic_check_box);
-                mCheckBox.setChecked(false);
-                mCheckBox.setEnabled(true);
-            } else if (isDeviceIncluded(selectedDevices, device)) {
-                if (selectedDevices.size() == 1 || !isDeviceIncluded(
-                        mController.getDeselectableMediaDevice(), device)) {
-                    mCheckBox.setButtonDrawable(getDisabledCheckboxDrawable());
-                    mCheckBox.setChecked(true);
-                    mCheckBox.setEnabled(false);
-                } else {
-                    mCheckBox.setButtonDrawable(R.drawable.ic_check_box);
-                    mCheckBox.setChecked(true);
-                    mCheckBox.setEnabled(true);
-                }
-            }
-        }
-
-        @Override
-        void onBind(int customizedItem, boolean topMargin, boolean bottomMargin) {
-            if (customizedItem == CUSTOMIZED_ITEM_GROUP) {
-                setTwoLineLayout(mContext.getText(R.string.media_output_dialog_group),
-                        true /* bFocused */, true /* showSeekBar */, false /* showProgressBar */,
-                        false /* showSubtitle*/);
-                mTitleIcon.setImageDrawable(getSpeakerDrawable());
-                mCheckBox.setVisibility(View.GONE);
-                initSessionSeekbar();
-            }
-        }
-
-        private void onCheckBoxClicked(boolean isChecked, MediaDevice device) {
-            if (isChecked && isDeviceIncluded(mController.getSelectableMediaDevice(), device)) {
-                mController.addDeviceToPlayMedia(device);
-            } else if (!isChecked && isDeviceIncluded(mController.getDeselectableMediaDevice(),
-                    device)) {
-                mController.removeDeviceFromPlayMedia(device);
-            }
-        }
-
-        private Drawable getDisabledCheckboxDrawable() {
-            final Drawable drawable = mContext.getDrawable(R.drawable.ic_check_box_blue_24dp)
-                    .mutate();
-            final Bitmap checkbox = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
-                    drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
-            final Canvas canvas = new Canvas(checkbox);
-            TypedValue value = new TypedValue();
-            mContext.getTheme().resolveAttribute(android.R.attr.disabledAlpha, value, true);
-            drawable.setAlpha((int) (value.getFloat() * 255));
-            drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
-            drawable.draw(canvas);
-
-            return drawable;
-        }
-
-        private boolean isDeviceIncluded(List<MediaDevice> deviceList, MediaDevice targetDevice) {
-            for (MediaDevice device : deviceList) {
-                if (TextUtils.equals(device.getId(), targetDevice.getId())) {
-                    return true;
-                }
-            }
-            return false;
-        }
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputGroupDialog.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputGroupDialog.java
deleted file mode 100644
index bb3f969..0000000
--- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputGroupDialog.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.dialog;
-
-import android.content.Context;
-import android.graphics.drawable.Drawable;
-import android.os.Bundle;
-import android.view.View;
-import android.view.WindowManager;
-
-import androidx.core.graphics.drawable.IconCompat;
-
-import com.android.systemui.R;
-import com.android.systemui.broadcast.BroadcastSender;
-
-/**
- * Dialog for media output group.
- */
-// TODO(b/203073091): Remove this class once group logic been implemented.
-public class MediaOutputGroupDialog extends MediaOutputBaseDialog {
-
-    MediaOutputGroupDialog(Context context, boolean aboveStatusbar, BroadcastSender broadcastSender,
-            MediaOutputController mediaOutputController) {
-        super(context, broadcastSender, mediaOutputController);
-        mMediaOutputController.resetGroupMediaDevices();
-        mAdapter = new MediaOutputGroupAdapter(mMediaOutputController);
-        if (!aboveStatusbar) {
-            getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
-        }
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-    }
-
-    @Override
-    int getHeaderIconRes() {
-        return R.drawable.ic_arrow_back;
-    }
-
-    @Override
-    IconCompat getHeaderIcon() {
-        return null;
-    }
-
-    @Override
-    int getHeaderIconSize() {
-        return mContext.getResources().getDimensionPixelSize(
-                    R.dimen.media_output_dialog_header_back_icon_size);
-    }
-
-    @Override
-    CharSequence getHeaderText() {
-        return mContext.getString(R.string.media_output_dialog_add_output);
-    }
-
-    @Override
-    CharSequence getHeaderSubtitle() {
-        final int size = mMediaOutputController.getSelectedMediaDevice().size();
-        if (size == 1) {
-            return mContext.getText(R.string.media_output_dialog_single_device);
-        }
-        return mContext.getString(R.string.media_output_dialog_multiple_devices, size);
-    }
-
-    @Override
-    Drawable getAppSourceIcon() {
-        return null;
-    }
-
-    @Override
-    int getStopButtonVisibility() {
-        return View.VISIBLE;
-    }
-
-    @Override
-    void onHeaderIconClick() {
-        // Given that we launched the media output group dialog from the media output dialog,
-        // dismissing this dialog will show the media output dialog again.
-        dismiss();
-    }
-}
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 7c04810..2c35db3 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dream/MediaDreamComplication.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dream/MediaDreamComplication.java
@@ -37,11 +37,6 @@
     }
 
     @Override
-    public int getRequiredTypeAvailability() {
-        return COMPLICATION_TYPE_CAST_INFO;
-    }
-
-    @Override
     public ViewHolder createView(ComplicationViewModel model) {
         return mComponentFactory.create().getViewHolder();
     }
diff --git a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/ChipInfoCommon.kt b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/ChipInfoCommon.kt
index 3cc99a8..a29c588 100644
--- a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/ChipInfoCommon.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/ChipInfoCommon.kt
@@ -27,4 +27,4 @@
     fun getTimeoutMs(): Long
 }
 
-const val DEFAULT_TIMEOUT_MILLIS = 3000L
+const val DEFAULT_TIMEOUT_MILLIS = 10000L
diff --git a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/MediaTttChipControllerCommon.kt b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/MediaTttChipControllerCommon.kt
index 7cc52e4..5f478ce 100644
--- a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/MediaTttChipControllerCommon.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/MediaTttChipControllerCommon.kt
@@ -25,18 +25,19 @@
 import android.os.PowerManager
 import android.os.SystemClock
 import android.util.Log
-import android.view.Gravity
 import android.view.LayoutInflater
-import android.view.MotionEvent
-import android.view.View
 import android.view.ViewGroup
 import android.view.WindowManager
-import android.widget.LinearLayout
+import android.view.accessibility.AccessibilityManager
+import android.view.accessibility.AccessibilityManager.FLAG_CONTENT_CONTROLS
+import android.view.accessibility.AccessibilityManager.FLAG_CONTENT_ICONS
+import android.view.accessibility.AccessibilityManager.FLAG_CONTENT_TEXT
+import androidx.annotation.CallSuper
 import com.android.internal.widget.CachingIconView
 import com.android.settingslib.Utils
 import com.android.systemui.R
 import com.android.systemui.dagger.qualifiers.Main
-import com.android.systemui.statusbar.gesture.TapGestureDetector
+import com.android.systemui.statusbar.policy.ConfigurationController
 import com.android.systemui.util.concurrency.DelayableExecutor
 import com.android.systemui.util.view.ViewUtil
 
@@ -51,21 +52,24 @@
  * display the chip in a certain state, since they receive <T> in [updateChipView].
  */
 abstract class MediaTttChipControllerCommon<T : ChipInfoCommon>(
-    internal val context: Context,
-    internal val logger: MediaTttLogger,
-    private val windowManager: WindowManager,
-    private val viewUtil: ViewUtil,
-    @Main private val mainExecutor: DelayableExecutor,
-    private val tapGestureDetector: TapGestureDetector,
-    private val powerManager: PowerManager,
-    @LayoutRes private val chipLayoutRes: Int
+        internal val context: Context,
+        internal val logger: MediaTttLogger,
+        internal val windowManager: WindowManager,
+        private val viewUtil: ViewUtil,
+        @Main private val mainExecutor: DelayableExecutor,
+        private val accessibilityManager: AccessibilityManager,
+        private val configurationController: ConfigurationController,
+        private val powerManager: PowerManager,
+        @LayoutRes private val chipLayoutRes: Int,
 ) {
-    /** The window layout parameters we'll use when attaching the view to a window. */
+    /**
+     * Window layout params that will be used as a starting point for the [windowLayoutParams] of
+     * all subclasses.
+     */
     @SuppressLint("WrongConstant") // We're allowed to use TYPE_VOLUME_OVERLAY
-    private val windowLayoutParams = WindowManager.LayoutParams().apply {
+    internal val commonWindowLayoutParams = WindowManager.LayoutParams().apply {
         width = WindowManager.LayoutParams.WRAP_CONTENT
         height = WindowManager.LayoutParams.WRAP_CONTENT
-        gravity = Gravity.TOP.or(Gravity.CENTER_HORIZONTAL)
         type = WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY
         flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
         title = WINDOW_TITLE
@@ -73,50 +77,91 @@
         setTrustedOverlay()
     }
 
+    /**
+     * The window layout parameters we'll use when attaching the view to a window.
+     *
+     * Subclasses must override this to provide their specific layout params, and they should use
+     * [commonWindowLayoutParams] as part of their layout params.
+     */
+    internal abstract val windowLayoutParams: WindowManager.LayoutParams
+
     /** The chip view currently being displayed. Null if the chip is not being displayed. */
     private var chipView: ViewGroup? = null
 
+    /** The chip info currently being displayed. Null if the chip is not being displayed. */
+    internal var chipInfo: T? = null
+
     /** A [Runnable] that, when run, will cancel the pending timeout of the chip. */
     private var cancelChipViewTimeout: Runnable? = null
 
     /**
-     * Displays the chip with the current state.
+     * Displays the chip with the provided [newChipInfo].
      *
      * This method handles inflating and attaching the view, then delegates to [updateChipView] to
      * display the correct information in the chip.
      */
-    fun displayChip(chipInfo: T) {
-        val oldChipView = chipView
-        if (chipView == null) {
-            chipView = LayoutInflater
-                .from(context)
-                .inflate(chipLayoutRes, null) as ViewGroup
-        }
-        val currentChipView = chipView!!
+    fun displayChip(newChipInfo: T) {
+        val currentChipView = chipView
 
-        updateChipView(chipInfo, currentChipView)
+        if (currentChipView != null) {
+            updateChipView(newChipInfo, currentChipView)
+        } else {
+            // The chip is new, so set up all our callbacks and inflate the view
+            configurationController.addCallback(displayScaleListener)
+            // Wake the screen if necessary so the user will see the chip. (Per b/239426653, we want
+            // the chip to show over the dream state, so we should only wake up if the screen is
+            // completely off.)
+            if (!powerManager.isScreenOn) {
+                powerManager.wakeUp(
+                        SystemClock.uptimeMillis(),
+                        PowerManager.WAKE_REASON_APPLICATION,
+                        "com.android.systemui:media_tap_to_transfer_activated"
+                )
+            }
 
-        // Add view if necessary
-        if (oldChipView == null) {
-            tapGestureDetector.addOnGestureDetectedCallback(TAG, this::onScreenTapped)
-            windowManager.addView(chipView, windowLayoutParams)
-            // Wake the screen so the user will see the chip
-            powerManager.wakeUp(
-                SystemClock.uptimeMillis(),
-                PowerManager.WAKE_REASON_APPLICATION,
-                "com.android.systemui:media_tap_to_transfer_activated"
-            )
-            animateChipIn(currentChipView)
+            inflateAndUpdateChip(newChipInfo)
         }
 
         // Cancel and re-set the chip timeout each time we get a new state.
+        val timeout = accessibilityManager.getRecommendedTimeoutMillis(
+            newChipInfo.getTimeoutMs().toInt(),
+            // Not all chips have controls so FLAG_CONTENT_CONTROLS might be superfluous, but
+            // include it just to be safe.
+            FLAG_CONTENT_ICONS or FLAG_CONTENT_TEXT or FLAG_CONTENT_CONTROLS
+       )
         cancelChipViewTimeout?.run()
         cancelChipViewTimeout = mainExecutor.executeDelayed(
             { removeChip(MediaTttRemovalReason.REASON_TIMEOUT) },
-            chipInfo.getTimeoutMs()
+            timeout.toLong()
         )
     }
 
+    /** Inflates a new chip view, updates it with [newChipInfo], and adds the view to the window. */
+    private fun inflateAndUpdateChip(newChipInfo: T) {
+        val newChipView = LayoutInflater
+                .from(context)
+                .inflate(chipLayoutRes, null) as ViewGroup
+        chipView = newChipView
+        updateChipView(newChipInfo, newChipView)
+        windowManager.addView(newChipView, windowLayoutParams)
+        animateChipIn(newChipView)
+    }
+
+    /** Removes then re-inflates the chip. */
+    private fun reinflateChip() {
+        val currentChipInfo = chipInfo
+        if (chipView == null || currentChipInfo == null) { return }
+
+        windowManager.removeView(chipView)
+        inflateAndUpdateChip(currentChipInfo)
+    }
+
+    private val displayScaleListener = object : ConfigurationController.ConfigurationListener {
+        override fun onDensityOrFontScaleChanged() {
+            reinflateChip()
+        }
+    }
+
     /**
      * Hides the chip.
      *
@@ -126,17 +171,21 @@
     open fun removeChip(removalReason: String) {
         if (chipView == null) { return }
         logger.logChipRemoval(removalReason)
-        tapGestureDetector.removeOnGestureDetectedCallback(TAG)
+        configurationController.removeCallback(displayScaleListener)
         windowManager.removeView(chipView)
         chipView = null
+        chipInfo = null
         // No need to time the chip out since it's already gone
         cancelChipViewTimeout?.run()
     }
 
     /**
-     * A method implemented by subclasses to update [currentChipView] based on [chipInfo].
+     * A method implemented by subclasses to update [currentChipView] based on [newChipInfo].
      */
-    abstract fun updateChipView(chipInfo: T, currentChipView: ViewGroup)
+    @CallSuper
+    open fun updateChipView(newChipInfo: T, currentChipView: ViewGroup) {
+        chipInfo = newChipInfo
+    }
 
     /**
      * A method that can be implemented by subclcasses to do custom animations for when the chip
@@ -207,15 +256,6 @@
             isAppIcon = false
         )
     }
-
-    private fun onScreenTapped(e: MotionEvent) {
-        val view = chipView ?: return
-        // If the tap is within the chip bounds, we shouldn't hide the chip (in case users think the
-        // chip is tappable).
-        if (!viewUtil.touchIsWithinView(view, e.x, e.y)) {
-            removeChip(MediaTttRemovalReason.REASON_SCREEN_TAP)
-        }
-    }
 }
 
 // Used in CTS tests UpdateMediaTapToTransferSenderDisplayTest and
diff --git a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiver.kt b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiver.kt
index 072263f..0f1ae00 100644
--- a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiver.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiver.kt
@@ -16,6 +16,7 @@
 
 package com.android.systemui.media.taptotransfer.receiver
 
+import android.annotation.SuppressLint
 import android.app.StatusBarManager
 import android.content.Context
 import android.graphics.drawable.Drawable
@@ -24,8 +25,13 @@
 import android.os.Handler
 import android.os.PowerManager
 import android.util.Log
+import android.view.Gravity
+import android.view.View
 import android.view.ViewGroup
 import android.view.WindowManager
+import android.view.accessibility.AccessibilityManager
+import androidx.core.graphics.ColorUtils
+import com.android.settingslib.Utils
 import com.android.systemui.R
 import com.android.systemui.dagger.SysUISingleton
 import com.android.systemui.dagger.qualifiers.Main
@@ -34,7 +40,8 @@
 import com.android.systemui.media.taptotransfer.common.MediaTttChipControllerCommon
 import com.android.systemui.media.taptotransfer.common.MediaTttLogger
 import com.android.systemui.statusbar.CommandQueue
-import com.android.systemui.statusbar.gesture.TapGestureDetector
+import com.android.systemui.statusbar.policy.ConfigurationController
+import com.android.systemui.util.animation.AnimationUtil.Companion.frames
 import com.android.systemui.util.concurrency.DelayableExecutor
 import com.android.systemui.util.view.ViewUtil
 import javax.inject.Inject
@@ -46,26 +53,39 @@
  */
 @SysUISingleton
 class MediaTttChipControllerReceiver @Inject constructor(
-    commandQueue: CommandQueue,
-    context: Context,
-    @MediaTttReceiverLogger logger: MediaTttLogger,
-    windowManager: WindowManager,
-    viewUtil: ViewUtil,
-    mainExecutor: DelayableExecutor,
-    tapGestureDetector: TapGestureDetector,
-    powerManager: PowerManager,
-    @Main private val mainHandler: Handler,
-    private val uiEventLogger: MediaTttReceiverUiEventLogger,
+        commandQueue: CommandQueue,
+        context: Context,
+        @MediaTttReceiverLogger logger: MediaTttLogger,
+        windowManager: WindowManager,
+        viewUtil: ViewUtil,
+        mainExecutor: DelayableExecutor,
+        accessibilityManager: AccessibilityManager,
+        configurationController: ConfigurationController,
+        powerManager: PowerManager,
+        @Main private val mainHandler: Handler,
+        private val uiEventLogger: MediaTttReceiverUiEventLogger,
 ) : MediaTttChipControllerCommon<ChipReceiverInfo>(
-    context,
-    logger,
-    windowManager,
-    viewUtil,
-    mainExecutor,
-    tapGestureDetector,
-    powerManager,
-    R.layout.media_ttt_chip_receiver
+        context,
+        logger,
+        windowManager,
+        viewUtil,
+        mainExecutor,
+        accessibilityManager,
+        configurationController,
+        powerManager,
+        R.layout.media_ttt_chip_receiver,
 ) {
+    @SuppressLint("WrongConstant") // We're allowed to use LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
+    override val windowLayoutParams = commonWindowLayoutParams.apply {
+        gravity = Gravity.BOTTOM.or(Gravity.CENTER_HORIZONTAL)
+        // Params below are needed for the ripple to work correctly
+        width = WindowManager.LayoutParams.MATCH_PARENT
+        height = WindowManager.LayoutParams.MATCH_PARENT
+        layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
+        fitInsetsTypes = 0 // Ignore insets from all system bars
+        flags = WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
+    }
+
     private val commandQueueCallbacks = object : CommandQueue.Callbacks {
         override fun updateMediaTapToTransferReceiverDisplay(
             @StatusBarManager.MediaTransferReceiverState displayState: Int,
@@ -119,15 +139,29 @@
         )
     }
 
-    override fun updateChipView(chipInfo: ChipReceiverInfo, currentChipView: ViewGroup) {
+    override fun updateChipView(newChipInfo: ChipReceiverInfo, currentChipView: ViewGroup) {
+        super.updateChipView(newChipInfo, currentChipView)
         setIcon(
                 currentChipView,
-                chipInfo.routeInfo.packageName,
-                chipInfo.appIconDrawableOverride,
-                chipInfo.appNameOverride
+                newChipInfo.routeInfo.packageName,
+                newChipInfo.appIconDrawableOverride,
+                newChipInfo.appNameOverride
         )
     }
 
+    override fun animateChipIn(chipView: ViewGroup) {
+        val appIconView = chipView.requireViewById<View>(R.id.app_icon)
+        appIconView.animate()
+                .translationYBy(-1 * getTranslationAmount().toFloat())
+                .setDuration(30.frames)
+                .start()
+        appIconView.animate()
+                .alpha(1f)
+                .setDuration(5.frames)
+                .start()
+        startRipple(chipView.requireViewById(R.id.ripple))
+    }
+
     override fun getIconSize(isAppIcon: Boolean): Int? =
         context.resources.getDimensionPixelSize(
             if (isAppIcon) {
@@ -136,6 +170,45 @@
                 R.dimen.media_ttt_generic_icon_size_receiver
             }
         )
+
+    /** Returns the amount that the chip will be translated by in its intro animation. */
+    private fun getTranslationAmount(): Int {
+        return context.resources.getDimensionPixelSize(R.dimen.media_ttt_receiver_vert_translation)
+    }
+
+    private fun startRipple(rippleView: ReceiverChipRippleView) {
+        if (rippleView.rippleInProgress) {
+            // Skip if ripple is still playing
+            return
+        }
+        rippleView.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener {
+            override fun onViewDetachedFromWindow(view: View?) {}
+
+            override fun onViewAttachedToWindow(view: View?) {
+                if (view == null) {
+                    return
+                }
+                val attachedRippleView = view as ReceiverChipRippleView
+                layoutRipple(attachedRippleView)
+                attachedRippleView.startRipple()
+                attachedRippleView.removeOnAttachStateChangeListener(this)
+            }
+        })
+    }
+
+    private fun layoutRipple(rippleView: ReceiverChipRippleView) {
+        val windowBounds = windowManager.currentWindowMetrics.bounds
+        val height = windowBounds.height()
+        val width = windowBounds.width()
+
+        val maxDiameter = height / 2.5f
+        rippleView.setMaxSize(maxDiameter, maxDiameter)
+        // Center the ripple on the bottom of the screen in the middle.
+        rippleView.setCenter(width * 0.5f, height.toFloat())
+        val color = Utils.getColorAttrDefaultColor(context, R.attr.wallpaperTextColorAccent)
+        val colorWithAlpha = ColorUtils.setAlphaComponent(color, 70)
+        rippleView.setColor(colorWithAlpha)
+    }
 }
 
 data class ChipReceiverInfo(
diff --git a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/ReceiverChipRippleView.kt b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/ReceiverChipRippleView.kt
new file mode 100644
index 0000000..6a505f0
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/ReceiverChipRippleView.kt
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.media.taptotransfer.receiver
+
+import android.content.Context
+import android.util.AttributeSet
+import com.android.systemui.ripple.RippleView
+
+/**
+ * An expanding ripple effect for the media tap-to-transfer receiver chip.
+ */
+class ReceiverChipRippleView(context: Context?, attrs: AttributeSet?) : RippleView(context, attrs) {
+    init {
+        // TODO: use RippleShape#ELLIPSE when calling setupShader.
+        setupShader()
+        setRippleFill(true)
+        duration = 3000L
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/ChipStateSender.kt b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/ChipStateSender.kt
index cd86fff..a153cb6 100644
--- a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/ChipStateSender.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/ChipStateSender.kt
@@ -243,6 +243,6 @@
 // Give the Transfer*Triggered states a longer timeout since those states represent an active
 // process and we should keep the user informed about it as long as possible (but don't allow it to
 // continue indefinitely).
-private const val TRANSFER_TRIGGERED_TIMEOUT_MILLIS = 15000L
+private const val TRANSFER_TRIGGERED_TIMEOUT_MILLIS = 30000L
 
 private const val TAG = "ChipStateSender"
diff --git a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttChipControllerSender.kt b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttChipControllerSender.kt
index 54b4380..3ea11b8 100644
--- a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttChipControllerSender.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttChipControllerSender.kt
@@ -21,9 +21,11 @@
 import android.media.MediaRoute2Info
 import android.os.PowerManager
 import android.util.Log
+import android.view.Gravity
 import android.view.View
 import android.view.ViewGroup
 import android.view.WindowManager
+import android.view.accessibility.AccessibilityManager
 import android.widget.TextView
 import com.android.internal.statusbar.IUndoMediaTransferCallback
 import com.android.systemui.R
@@ -36,7 +38,7 @@
 import com.android.systemui.media.taptotransfer.common.MediaTttLogger
 import com.android.systemui.media.taptotransfer.common.MediaTttRemovalReason
 import com.android.systemui.statusbar.CommandQueue
-import com.android.systemui.statusbar.gesture.TapGestureDetector
+import com.android.systemui.statusbar.policy.ConfigurationController
 import com.android.systemui.util.concurrency.DelayableExecutor
 import com.android.systemui.util.view.ViewUtil
 import javax.inject.Inject
@@ -47,26 +49,30 @@
  */
 @SysUISingleton
 class MediaTttChipControllerSender @Inject constructor(
-    commandQueue: CommandQueue,
-    context: Context,
-    @MediaTttSenderLogger logger: MediaTttLogger,
-    windowManager: WindowManager,
-    viewUtil: ViewUtil,
-    @Main mainExecutor: DelayableExecutor,
-    tapGestureDetector: TapGestureDetector,
-    powerManager: PowerManager,
-    private val uiEventLogger: MediaTttSenderUiEventLogger
+        commandQueue: CommandQueue,
+        context: Context,
+        @MediaTttSenderLogger logger: MediaTttLogger,
+        windowManager: WindowManager,
+        viewUtil: ViewUtil,
+        @Main mainExecutor: DelayableExecutor,
+        accessibilityManager: AccessibilityManager,
+        configurationController: ConfigurationController,
+        powerManager: PowerManager,
+        private val uiEventLogger: MediaTttSenderUiEventLogger
 ) : MediaTttChipControllerCommon<ChipSenderInfo>(
-    context,
-    logger,
-    windowManager,
-    viewUtil,
-    mainExecutor,
-    tapGestureDetector,
-    powerManager,
-    R.layout.media_ttt_chip
+        context,
+        logger,
+        windowManager,
+        viewUtil,
+        mainExecutor,
+        accessibilityManager,
+        configurationController,
+        powerManager,
+        R.layout.media_ttt_chip,
 ) {
-    private var currentlyDisplayedChipState: ChipStateSender? = null
+    override val windowLayoutParams = commonWindowLayoutParams.apply {
+        gravity = Gravity.TOP.or(Gravity.CENTER_HORIZONTAL)
+    }
 
     private val commandQueueCallbacks = object : CommandQueue.Callbacks {
         override fun updateMediaTapToTransferSenderDisplay(
@@ -108,16 +114,18 @@
 
     /** Displays the chip view for the given state. */
     override fun updateChipView(
-            chipInfo: ChipSenderInfo,
-            currentChipView: ViewGroup) {
-        val chipState = chipInfo.state
-        currentlyDisplayedChipState = chipState
+            newChipInfo: ChipSenderInfo,
+            currentChipView: ViewGroup
+    ) {
+        super.updateChipView(newChipInfo, currentChipView)
+
+        val chipState = newChipInfo.state
 
         // App icon
-        setIcon(currentChipView, chipInfo.routeInfo.packageName)
+        setIcon(currentChipView, newChipInfo.routeInfo.packageName)
 
         // Text
-        val otherDeviceName = chipInfo.routeInfo.name.toString()
+        val otherDeviceName = newChipInfo.routeInfo.name.toString()
         currentChipView.requireViewById<TextView>(R.id.text).apply {
             text = chipState.getChipTextString(context, otherDeviceName)
         }
@@ -129,7 +137,7 @@
         // Undo
         val undoView = currentChipView.requireViewById<View>(R.id.undo)
         val undoClickListener = chipState.undoClickListener(
-                this, chipInfo.routeInfo, chipInfo.undoCallback, uiEventLogger
+                this, newChipInfo.routeInfo, newChipInfo.undoCallback, uiEventLogger
         )
         undoView.setOnClickListener(undoClickListener)
         undoView.visibility = (undoClickListener != null).visibleIfTrue()
@@ -153,12 +161,11 @@
     override fun removeChip(removalReason: String) {
         // Don't remove the chip if we're mid-transfer since the user should still be able to
         // see the status of the transfer. (But do remove it if it's finally timed out.)
-        if (currentlyDisplayedChipState?.isMidTransfer == true
-                && removalReason != MediaTttRemovalReason.REASON_TIMEOUT) {
+        if (chipInfo?.state?.isMidTransfer == true &&
+                removalReason != MediaTttRemovalReason.REASON_TIMEOUT) {
             return
         }
         super.removeChip(removalReason)
-        currentlyDisplayedChipState = null
     }
 
     private fun Boolean.visibleIfTrue(): Int {
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java
index 779292c..da9fefa 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java
@@ -17,11 +17,19 @@
 package com.android.systemui.navigationbar;
 
 import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU;
+import static android.view.WindowInsetsController.APPEARANCE_LOW_PROFILE_BARS;
+import static android.view.WindowInsetsController.APPEARANCE_OPAQUE_NAVIGATION_BARS;
+import static android.view.WindowInsetsController.APPEARANCE_SEMI_TRANSPARENT_NAVIGATION_BARS;
 
 import static com.android.systemui.accessibility.SystemActions.SYSTEM_ACTION_ID_ACCESSIBILITY_BUTTON;
 import static com.android.systemui.accessibility.SystemActions.SYSTEM_ACTION_ID_ACCESSIBILITY_BUTTON_CHOOSER;
 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A11Y_BUTTON_CLICKABLE;
 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A11Y_BUTTON_LONG_CLICKABLE;
+import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT;
+import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT_TRANSPARENT;
+import static com.android.systemui.statusbar.phone.BarTransitions.MODE_OPAQUE;
+import static com.android.systemui.statusbar.phone.BarTransitions.MODE_SEMI_TRANSPARENT;
+import static com.android.systemui.statusbar.phone.BarTransitions.MODE_TRANSPARENT;
 
 import android.content.ContentResolver;
 import android.content.Context;
@@ -40,6 +48,7 @@
 
 import androidx.annotation.NonNull;
 
+import com.android.keyguard.KeyguardViewController;
 import com.android.systemui.Dumpable;
 import com.android.systemui.accessibility.AccessibilityButtonModeObserver;
 import com.android.systemui.accessibility.AccessibilityButtonTargetsObserver;
@@ -50,6 +59,7 @@
 import com.android.systemui.recents.OverviewProxyService;
 import com.android.systemui.settings.UserTracker;
 import com.android.systemui.shared.system.QuickStepContract;
+import com.android.systemui.statusbar.phone.BarTransitions.TransitionMode;
 import com.android.systemui.statusbar.phone.CentralSurfaces;
 
 import java.io.PrintWriter;
@@ -80,6 +90,7 @@
     private final AccessibilityManager mAccessibilityManager;
     private final Lazy<AssistManager> mAssistManagerLazy;
     private final Lazy<Optional<CentralSurfaces>> mCentralSurfacesOptionalLazy;
+    private final KeyguardViewController mKeyguardViewController;
     private final UserTracker mUserTracker;
     private final SystemActions mSystemActions;
     private final AccessibilityButtonModeObserver mAccessibilityButtonModeObserver;
@@ -114,6 +125,7 @@
             OverviewProxyService overviewProxyService,
             Lazy<AssistManager> assistManagerLazy,
             Lazy<Optional<CentralSurfaces>> centralSurfacesOptionalLazy,
+            KeyguardViewController keyguardViewController,
             NavigationModeController navigationModeController,
             UserTracker userTracker,
             DumpManager dumpManager) {
@@ -122,6 +134,7 @@
         mAccessibilityManager = accessibilityManager;
         mAssistManagerLazy = assistManagerLazy;
         mCentralSurfacesOptionalLazy = centralSurfacesOptionalLazy;
+        mKeyguardViewController = keyguardViewController;
         mUserTracker = userTracker;
         mSystemActions = systemActions;
         accessibilityManager.addAccessibilityServicesStateChangeListener(this);
@@ -308,8 +321,12 @@
      * {@link InputMethodService} and the keyguard states.
      */
     public boolean isImeShown(int vis) {
-        View shadeWindowView = mCentralSurfacesOptionalLazy.get().get().getNotificationShadeWindowView();
-        boolean isKeyguardShowing = mCentralSurfacesOptionalLazy.get().get().isKeyguardShowing();
+        View shadeWindowView = null;
+        if (mCentralSurfacesOptionalLazy.get().isPresent()) {
+            shadeWindowView =
+                    mCentralSurfacesOptionalLazy.get().get().getNotificationShadeWindowView();
+        }
+        boolean isKeyguardShowing = mKeyguardViewController.isShowing();
         boolean imeVisibleOnShade = shadeWindowView != null && shadeWindowView.isAttachedToWindow()
                 && shadeWindowView.getRootWindowInsets().isVisible(WindowInsets.Type.ime());
         return imeVisibleOnShade
@@ -325,6 +342,23 @@
         void updateAssistantAvailable(boolean available);
     }
 
+    static @TransitionMode int transitionMode(boolean isTransient, int appearance) {
+        final int lightsOutOpaque = APPEARANCE_LOW_PROFILE_BARS | APPEARANCE_OPAQUE_NAVIGATION_BARS;
+        if (isTransient) {
+            return MODE_SEMI_TRANSPARENT;
+        } else if ((appearance & lightsOutOpaque) == lightsOutOpaque) {
+            return MODE_LIGHTS_OUT;
+        } else if ((appearance & APPEARANCE_LOW_PROFILE_BARS) != 0) {
+            return MODE_LIGHTS_OUT_TRANSPARENT;
+        } else if ((appearance & APPEARANCE_OPAQUE_NAVIGATION_BARS) != 0) {
+            return MODE_OPAQUE;
+        } else if ((appearance & APPEARANCE_SEMI_TRANSPARENT_NAVIGATION_BARS) != 0) {
+            return MODE_SEMI_TRANSPARENT;
+        } else {
+            return MODE_TRANSPARENT;
+        }
+    }
+
     @Override
     public void dump(@NonNull PrintWriter pw, @NonNull String[] args) {
         pw.println("NavbarTaskbarFriendster");
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
index aa38b78..75e48d2 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
@@ -27,9 +27,6 @@
 import static android.view.Display.DEFAULT_DISPLAY;
 import static android.view.InsetsState.ITYPE_NAVIGATION_BAR;
 import static android.view.InsetsState.containsType;
-import static android.view.WindowInsetsController.APPEARANCE_LOW_PROFILE_BARS;
-import static android.view.WindowInsetsController.APPEARANCE_OPAQUE_NAVIGATION_BARS;
-import static android.view.WindowInsetsController.APPEARANCE_SEMI_TRANSPARENT_NAVIGATION_BARS;
 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;
@@ -39,6 +36,7 @@
 import static com.android.internal.accessibility.common.ShortcutConstants.CHOOSER_PACKAGE_NAME;
 import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.HOME_BUTTON_LONG_PRESS_DURATION_MS;
 import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.NAV_BAR_HANDLE_FORCE_OPAQUE;
+import static com.android.systemui.navigationbar.NavBarHelper.transitionMode;
 import static com.android.systemui.recents.OverviewProxyService.OverviewProxyListener;
 import static com.android.systemui.shared.recents.utilities.Utilities.isTablet;
 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A11Y_BUTTON_CLICKABLE;
@@ -48,11 +46,7 @@
 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_IME_SWITCHER_SHOWING;
 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN;
 import static com.android.systemui.shared.system.QuickStepContract.isGesturalMode;
-import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT;
-import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT_TRANSPARENT;
 import static com.android.systemui.statusbar.phone.BarTransitions.MODE_OPAQUE;
-import static com.android.systemui.statusbar.phone.BarTransitions.MODE_SEMI_TRANSPARENT;
-import static com.android.systemui.statusbar.phone.BarTransitions.MODE_TRANSPARENT;
 import static com.android.systemui.statusbar.phone.BarTransitions.TransitionMode;
 import static com.android.systemui.statusbar.phone.CentralSurfaces.DEBUG_WINDOW_STATE;
 import static com.android.systemui.statusbar.phone.CentralSurfaces.dumpBarTransitions;
@@ -86,7 +80,7 @@
 import android.view.Display;
 import android.view.Gravity;
 import android.view.HapticFeedbackConstants;
-import android.view.InsetsState;
+import android.view.InsetsFrameProvider;
 import android.view.InsetsState.InternalInsetsType;
 import android.view.InsetsVisibilities;
 import android.view.KeyEvent;
@@ -111,6 +105,7 @@
 import com.android.internal.logging.UiEvent;
 import com.android.internal.logging.UiEventLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.internal.statusbar.LetterboxDetails;
 import com.android.internal.util.LatencyTracker;
 import com.android.internal.view.AppearanceRegion;
 import com.android.systemui.Gefingerpoken;
@@ -133,6 +128,7 @@
 import com.android.systemui.recents.OverviewProxyService;
 import com.android.systemui.recents.Recents;
 import com.android.systemui.settings.UserContextProvider;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.shared.navigationbar.RegionSamplingHelper;
 import com.android.systemui.shared.recents.utilities.Utilities;
 import com.android.systemui.shared.rotation.RotationButton;
@@ -151,7 +147,6 @@
 import com.android.systemui.statusbar.phone.BarTransitions;
 import com.android.systemui.statusbar.phone.CentralSurfaces;
 import com.android.systemui.statusbar.phone.LightBarController;
-import com.android.systemui.statusbar.phone.ShadeController;
 import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
 import com.android.systemui.statusbar.policy.DeviceProvisionedController;
 import com.android.systemui.util.DeviceConfigProxy;
@@ -215,8 +210,8 @@
     private final UiEventLogger mUiEventLogger;
     private final NavBarHelper mNavBarHelper;
     private final NotificationShadeDepthController mNotificationShadeDepthController;
-    private final UserContextProvider mUserContextProvider;
     private final OnComputeInternalInsetsListener mOnComputeInternalInsetsListener;
+    private final UserContextProvider mUserContextProvider;
     private final RegionSamplingHelper mRegionSamplingHelper;
     private final int mNavColorSampleMargin;
     private NavigationBarFrame mFrame;
@@ -631,6 +626,7 @@
                     }
                 }, mainExecutor, bgExecutor);
 
+        mView.setBackgroundExecutor(bgExecutor);
         mView.setEdgeBackGestureHandler(mEdgeBackGestureHandler);
         mNavBarMode = mNavigationModeController.addListener(mModeChangedListener);
     }
@@ -1075,7 +1071,8 @@
     @Override
     public void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
             AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
-            @Behavior int behavior, InsetsVisibilities requestedVisibilities, String packageName) {
+            @Behavior int behavior, InsetsVisibilities requestedVisibilities, String packageName,
+            LetterboxDetails[] letterboxDetails) {
         if (displayId != mDisplayId) {
             return;
         }
@@ -1152,23 +1149,6 @@
         return false;
     }
 
-    private static @TransitionMode int transitionMode(boolean isTransient, int appearance) {
-        final int lightsOutOpaque = APPEARANCE_LOW_PROFILE_BARS | APPEARANCE_OPAQUE_NAVIGATION_BARS;
-        if (isTransient) {
-            return MODE_SEMI_TRANSPARENT;
-        } else if ((appearance & lightsOutOpaque) == lightsOutOpaque) {
-            return MODE_LIGHTS_OUT;
-        } else if ((appearance & APPEARANCE_LOW_PROFILE_BARS) != 0) {
-            return MODE_LIGHTS_OUT_TRANSPARENT;
-        } else if ((appearance & APPEARANCE_OPAQUE_NAVIGATION_BARS) != 0) {
-            return MODE_OPAQUE;
-        } else if ((appearance & APPEARANCE_SEMI_TRANSPARENT_NAVIGATION_BARS) != 0) {
-            return MODE_SEMI_TRANSPARENT;
-        } else {
-            return MODE_TRANSPARENT;
-        }
-    }
-
     @Override
     public void disable(int displayId, int state1, int state2, boolean animate) {
         if (displayId != mDisplayId) {
@@ -1654,12 +1634,14 @@
                         | WindowManager.LayoutParams.FLAG_SLIPPERY,
                 PixelFormat.TRANSLUCENT);
         lp.gravity = gravity;
-        lp.providedInternalInsets = new Insets[InsetsState.SIZE];
         if (insetsHeight != -1) {
-            lp.providedInternalInsets[ITYPE_NAVIGATION_BAR] =
-                    Insets.of(0, height - insetsHeight, 0, 0);
+            lp.providedInsets = new InsetsFrameProvider[] {
+                new InsetsFrameProvider(ITYPE_NAVIGATION_BAR, Insets.of(0, 0, 0, insetsHeight))
+            };
         } else {
-            lp.providedInternalInsets[ITYPE_NAVIGATION_BAR] = null;
+            lp.providedInsets = new InsetsFrameProvider[] {
+                    new InsetsFrameProvider(ITYPE_NAVIGATION_BAR)
+            };
         }
         lp.token = new Binder();
         lp.accessibilityTitle = userContext.getString(R.string.nav_bar);
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java
index d756af7..3789cbb 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java
@@ -51,6 +51,8 @@
 import com.android.systemui.dagger.SysUISingleton;
 import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.dump.DumpManager;
+import com.android.systemui.flags.FeatureFlags;
+import com.android.systemui.flags.Flags;
 import com.android.systemui.model.SysUiState;
 import com.android.systemui.recents.OverviewProxyService;
 import com.android.systemui.shared.system.QuickStepContract;
@@ -69,7 +71,6 @@
 
 import javax.inject.Inject;
 
-
 /** A controller to handle navigation bars. */
 @SysUISingleton
 public class NavigationBarController implements
@@ -83,6 +84,7 @@
     private final Context mContext;
     private final Handler mHandler;
     private final NavigationBarComponent.Factory mNavigationBarComponentFactory;
+    private FeatureFlags mFeatureFlags;
     private final DisplayManager mDisplayManager;
     private final TaskbarDelegate mTaskbarDelegate;
     private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
@@ -114,10 +116,12 @@
             AutoHideController autoHideController,
             LightBarController lightBarController,
             Optional<Pip> pipOptional,
-            Optional<BackAnimation> backAnimation) {
+            Optional<BackAnimation> backAnimation,
+            FeatureFlags featureFlags) {
         mContext = context;
         mHandler = mainHandler;
         mNavigationBarComponentFactory = navigationBarComponentFactory;
+        mFeatureFlags = featureFlags;
         mDisplayManager = mContext.getSystemService(DisplayManager.class);
         commandQueue.addCallback(this);
         configurationController.addCallback(this);
@@ -218,7 +222,10 @@
 
     /** @return {@code true} if taskbar is enabled, false otherwise */
     private boolean initializeTaskbarIfNecessary() {
-        if (mIsTablet) {
+        // Enable for tablet or (phone AND flag is set); assuming phone = !mIsTablet
+        boolean taskbarEnabled = mIsTablet || mFeatureFlags.isEnabled(Flags.HIDE_NAVBAR_WINDOW);
+
+        if (taskbarEnabled) {
             Trace.beginSection("NavigationBarController#initializeTaskbarIfNecessary");
             // Remove navigation bar when taskbar is showing
             removeNavigationBar(mContext.getDisplayId());
@@ -227,7 +234,7 @@
         } else {
             mTaskbarDelegate.destroy();
         }
-        return mIsTablet;
+        return taskbarEnabled;
     }
 
     @Override
@@ -304,7 +311,7 @@
 
         // We may show TaskBar on the default display for large screen device. Don't need to create
         // navigation bar for this case.
-        if (mIsTablet && isOnDefaultDisplay) {
+        if (isOnDefaultDisplay && initializeTaskbarIfNecessary()) {
             return;
         }
 
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java
index 3fc9afe..9e1ba5f 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java
@@ -72,6 +72,7 @@
 import com.android.systemui.navigationbar.buttons.RotationContextButton;
 import com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler;
 import com.android.systemui.recents.Recents;
+import com.android.systemui.shade.NotificationPanelViewController;
 import com.android.systemui.shared.rotation.FloatingRotationButton;
 import com.android.systemui.shared.rotation.RotationButton.RotationButtonUpdatesCallback;
 import com.android.systemui.shared.rotation.RotationButtonController;
@@ -81,13 +82,13 @@
 import com.android.systemui.statusbar.phone.AutoHideController;
 import com.android.systemui.statusbar.phone.CentralSurfaces;
 import com.android.systemui.statusbar.phone.LightBarTransitionsController;
-import com.android.systemui.statusbar.phone.NotificationPanelViewController;
 import com.android.wm.shell.back.BackAnimation;
 import com.android.wm.shell.pip.Pip;
 
 import java.io.PrintWriter;
 import java.util.Map;
 import java.util.Optional;
+import java.util.concurrent.Executor;
 import java.util.function.Consumer;
 
 /** */
@@ -97,6 +98,8 @@
 
     final static boolean ALTERNATE_CAR_MODE_UI = false;
 
+    private Executor mBgExecutor;
+
     // The current view is one of mHorizontal or mVertical depending on the current configuration
     View mCurrentView = null;
     private View mVertical;
@@ -349,6 +352,10 @@
         notifyVerticalChangedListener(mIsVertical);
     }
 
+    public void setBackgroundExecutor(Executor bgExecutor) {
+        mBgExecutor = bgExecutor;
+    }
+
     public void setTouchHandler(Gefingerpoken touchHandler) {
         mTouchHandler = touchHandler;
     }
@@ -768,8 +775,8 @@
         updateSlippery();
         reloadNavIcons();
         updateNavButtonIcons();
-        WindowManagerWrapper.getInstance().setNavBarVirtualKeyHapticFeedbackEnabled(
-                !mShowSwipeUpUi);
+        mBgExecutor.execute(() -> WindowManagerWrapper.getInstance()
+                .setNavBarVirtualKeyHapticFeedbackEnabled(!mShowSwipeUpUi));
         getHomeButton().setAccessibilityDelegate(
                 mShowSwipeUpUi ? mQuickStepAccessibilityDelegate : null);
     }
@@ -812,6 +819,7 @@
         mImeDrawsImeNavBar = imeDrawsImeNavBar;
         mBarTransitions.onNavigationModeChanged(mNavBarMode);
         mEdgeBackGestureHandler.onNavigationModeChanged(mNavBarMode);
+        mRotationButtonController.onNavigationModeChanged(mNavBarMode);
         updateRotationButton();
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java b/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java
index 8ee16a9..9e0c496 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java
@@ -24,6 +24,7 @@
 import static android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
 
+import static com.android.systemui.navigationbar.NavBarHelper.transitionMode;
 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A11Y_BUTTON_CLICKABLE;
 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A11Y_BUTTON_LONG_CLICKABLE;
 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_ALLOW_GESTURE_IGNORING_BAR_VISIBILITY;
@@ -35,6 +36,7 @@
 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN;
 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_OVERVIEW_DISABLED;
 import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_PINNING;
+import static com.android.systemui.statusbar.phone.BarTransitions.TransitionMode;
 
 import android.app.StatusBarManager;
 import android.app.StatusBarManager.WindowVisibleState;
@@ -50,10 +52,12 @@
 import android.view.Display;
 import android.view.InsetsVisibilities;
 import android.view.View;
+import android.view.WindowInsetsController.Appearance;
 import android.view.WindowInsetsController.Behavior;
 
 import androidx.annotation.NonNull;
 
+import com.android.internal.statusbar.LetterboxDetails;
 import com.android.internal.view.AppearanceRegion;
 import com.android.systemui.Dumpable;
 import com.android.systemui.dagger.SysUISingleton;
@@ -114,6 +118,9 @@
             };
     private int mDisabledFlags;
     private @WindowVisibleState int mTaskBarWindowState = WINDOW_STATE_SHOWING;
+
+    private @TransitionMode int mTransitionMode;
+    private @Appearance int mAppearance;
     private @Behavior int mBehavior;
     private final Context mContext;
     private final DisplayManager mDisplayManager;
@@ -146,19 +153,12 @@
         }
     };
 
-    private final Consumer<Boolean> mNavbarOverlayVisibilityChangeCallback = (visible) -> {
-        if (visible) {
-            mAutoHideController.touchAutoHide();
-        }
-    };
     private BackAnimation mBackAnimation;
 
     @Inject
-    public TaskbarDelegate(
-            Context context,
+    public TaskbarDelegate(Context context,
             EdgeBackGestureHandler.Factory edgeBackGestureHandlerFactory,
-            LightBarTransitionsController.Factory lightBarTransitionsControllerFactory
-    ) {
+            LightBarTransitionsController.Factory lightBarTransitionsControllerFactory) {
         mLightBarTransitionsControllerFactory = lightBarTransitionsControllerFactory;
         mEdgeBackGestureHandler = edgeBackGestureHandlerFactory.create(context);
 
@@ -358,11 +358,18 @@
     @Override
     public void onSystemBarAttributesChanged(int displayId, int appearance,
             AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme, int behavior,
-            InsetsVisibilities requestedVisibilities, String packageName) {
+            InsetsVisibilities requestedVisibilities, String packageName,
+            LetterboxDetails[] letterboxDetails) {
         mOverviewProxyService.onSystemBarAttributesChanged(displayId, behavior);
-        if (mLightBarController != null && displayId == mDisplayId) {
-            mLightBarController.onNavigationBarAppearanceChanged(appearance, false/*nbModeChanged*/,
-                    BarTransitions.MODE_TRANSPARENT /*navigationBarMode*/, navbarColorManagedByIme);
+        boolean nbModeChanged = false;
+        if (mAppearance != appearance) {
+            mAppearance = appearance;
+            nbModeChanged = updateTransitionMode(
+                    transitionMode(mTaskbarTransientShowing, appearance));
+        }
+        if (displayId == mDisplayId) {
+            mLightBarController.onNavigationBarAppearanceChanged(appearance, nbModeChanged,
+                    BarTransitions.MODE_TRANSPARENT, navbarColorManagedByIme);
         }
         if (mBehavior != behavior) {
             mBehavior = behavior;
@@ -413,6 +420,22 @@
 
     private void onTransientStateChanged() {
         mEdgeBackGestureHandler.onNavBarTransientStateChanged(mTaskbarTransientShowing);
+
+        final int transitionMode = transitionMode(mTaskbarTransientShowing, mAppearance);
+        if (updateTransitionMode(transitionMode)) {
+            mLightBarController.onNavigationBarModeChanged(transitionMode);
+        }
+    }
+
+    private boolean updateTransitionMode(int barMode) {
+        if (mTransitionMode != barMode) {
+            mTransitionMode = barMode;
+            if (mAutoHideController != null) {
+                mAutoHideController.touchAutoHide();
+            }
+            return true;
+        }
+        return false;
     }
 
     @Override
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanel.kt b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanel.kt
new file mode 100644
index 0000000..2822435
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanel.kt
@@ -0,0 +1,397 @@
+package com.android.systemui.navigationbar.gestural
+
+import android.content.Context
+import android.graphics.Canvas
+import android.graphics.Paint
+import android.graphics.Path
+import android.graphics.RectF
+import android.view.View
+import androidx.dynamicanimation.animation.FloatPropertyCompat
+import androidx.dynamicanimation.animation.SpringAnimation
+import androidx.dynamicanimation.animation.SpringForce
+import com.android.internal.util.LatencyTracker
+import com.android.settingslib.Utils
+import com.android.systemui.navigationbar.gestural.BackPanelController.DelayedOnAnimationEndListener
+
+private const val TAG = "BackPanel"
+private const val DEBUG = false
+
+class BackPanel(context: Context, private val latencyTracker: LatencyTracker) : View(context) {
+
+    var arrowsPointLeft = false
+        set(value) {
+            if (field != value) {
+                invalidate()
+                field = value
+            }
+        }
+
+    // Arrow color and shape
+    private val arrowPath = Path()
+    private val arrowPaint = Paint()
+
+    // Arrow background color and shape
+    private var arrowBackgroundRect = RectF()
+    private var arrowBackgroundPaint = Paint()
+
+    // True if the panel is currently on the left of the screen
+    var isLeftPanel = false
+
+    /**
+     * Used to track back arrow latency from [android.view.MotionEvent.ACTION_DOWN] to [onDraw]
+     */
+    private var trackingBackArrowLatency = false
+
+    /**
+     * The length of the arrow measured horizontally. Used for animating [arrowPath]
+     */
+    private var arrowLength = AnimatedFloat("arrowLength", SpringForce())
+
+    /**
+     * The height of the arrow measured vertically from its center to its top (i.e. half the total
+     * height). Used for animating [arrowPath]
+     */
+    private var arrowHeight = AnimatedFloat("arrowHeight", SpringForce())
+
+    private val backgroundWidth = AnimatedFloat(
+        name = "backgroundWidth",
+        SpringForce().apply {
+            stiffness = 600f
+            dampingRatio = 0.65f
+        }
+    )
+
+    private val backgroundHeight = AnimatedFloat(
+        name = "backgroundHeight",
+        SpringForce().apply {
+            stiffness = 600f
+            dampingRatio = 0.65f
+        }
+    )
+
+    /**
+     * Corners of the background closer to the edge of the screen (where the arrow appeared from).
+     * Used for animating [arrowBackgroundRect]
+     */
+    private val backgroundEdgeCornerRadius = AnimatedFloat(
+        name = "backgroundEdgeCornerRadius",
+        SpringForce().apply {
+            stiffness = 400f
+            dampingRatio = SpringForce.DAMPING_RATIO_MEDIUM_BOUNCY
+        }
+    )
+
+    /**
+     * Corners of the background further from the edge of the screens (toward the direction the
+     * arrow is being dragged). Used for animating [arrowBackgroundRect]
+     */
+    private val backgroundFarCornerRadius = AnimatedFloat(
+        name = "backgroundDragCornerRadius",
+        SpringForce().apply {
+            stiffness = 2200f
+            dampingRatio = SpringForce.DAMPING_RATIO_NO_BOUNCY
+        }
+    )
+
+    /**
+     * Left/right position of the background relative to the canvas. Also corresponds with the
+     * background's margin relative to the screen edge. The arrow will be centered within the
+     * background.
+     */
+    private var horizontalTranslation = AnimatedFloat("horizontalTranslation", SpringForce())
+
+    private val currentAlpha: FloatPropertyCompat<BackPanel> =
+        object : FloatPropertyCompat<BackPanel>("currentAlpha") {
+            override fun setValue(panel: BackPanel, value: Float) {
+                panel.alpha = value
+            }
+
+            override fun getValue(panel: BackPanel): Float = panel.alpha
+        }
+
+    private val alphaAnimation = SpringAnimation(this, currentAlpha)
+        .setSpring(
+            SpringForce()
+                .setStiffness(60f)
+                .setDampingRatio(SpringForce.DAMPING_RATIO_NO_BOUNCY)
+        )
+
+    /**
+     * Canvas vertical translation. How far up/down the arrow and background appear relative to the
+     * canvas.
+     */
+    private var verticalTranslation: AnimatedFloat = AnimatedFloat(
+        name = "verticalTranslation",
+        SpringForce().apply {
+            stiffness = SpringForce.STIFFNESS_MEDIUM
+        }
+    )
+
+    /**
+     * Use for drawing debug info. Can only be set if [DEBUG]=true
+     */
+    var drawDebugInfo: ((canvas: Canvas) -> Unit)? = null
+        set(value) {
+            if (DEBUG) field = value
+        }
+
+    internal fun updateArrowPaint(arrowThickness: Float) {
+        // Arrow constants
+        arrowPaint.strokeWidth = arrowThickness
+
+        arrowPaint.color =
+            Utils.getColorAttrDefaultColor(context, com.android.internal.R.attr.colorPrimary)
+        arrowBackgroundPaint.color = Utils.getColorAccentDefaultColor(context)
+    }
+
+    private inner class AnimatedFloat(name: String, springForce: SpringForce) {
+        // The resting position when not stretched by a touch drag
+        private var restingPosition = 0f
+
+        // The current position as updated by the SpringAnimation
+        var pos = 0f
+            set(v) {
+                if (field != v) {
+                    field = v
+                    invalidate()
+                }
+            }
+
+        val animation: SpringAnimation
+
+        init {
+            val floatProp = object : FloatPropertyCompat<AnimatedFloat>(name) {
+                override fun setValue(animatedFloat: AnimatedFloat, value: Float) {
+                    animatedFloat.pos = value
+                }
+
+                override fun getValue(animatedFloat: AnimatedFloat): Float = animatedFloat.pos
+            }
+            animation = SpringAnimation(this, floatProp)
+            animation.spring = springForce
+        }
+
+        fun snapTo(newPosition: Float) {
+            animation.cancel()
+            restingPosition = newPosition
+            animation.spring.finalPosition = newPosition
+            pos = newPosition
+        }
+
+        fun stretchTo(stretchAmount: Float) {
+            animation.animateToFinalPosition(restingPosition + stretchAmount)
+        }
+
+        /**
+         * Animates to a new position ([finalPosition]) that is the given fraction ([amount])
+         * between the existing [restingPosition] and the new [finalPosition].
+         *
+         * The [restingPosition] will remain unchanged. Only the animation is updated.
+         */
+        fun stretchBy(finalPosition: Float, amount: Float) {
+            val stretchedAmount = amount * (finalPosition - restingPosition)
+            animation.animateToFinalPosition(restingPosition + stretchedAmount)
+        }
+
+        fun updateRestingPosition(pos: Float, animated: Boolean) {
+            restingPosition = pos
+            if (animated)
+                animation.animateToFinalPosition(restingPosition)
+            else
+                snapTo(restingPosition)
+        }
+    }
+
+    init {
+        visibility = GONE
+        arrowPaint.apply {
+            style = Paint.Style.STROKE
+            strokeCap = Paint.Cap.SQUARE
+        }
+        arrowBackgroundPaint.apply {
+            style = Paint.Style.FILL
+            strokeJoin = Paint.Join.ROUND
+            strokeCap = Paint.Cap.ROUND
+        }
+    }
+
+    private fun calculateArrowPath(dx: Float, dy: Float): Path {
+        arrowPath.reset()
+        arrowPath.moveTo(dx, -dy)
+        arrowPath.lineTo(0f, 0f)
+        arrowPath.lineTo(dx, dy)
+        arrowPath.moveTo(dx, -dy)
+        return arrowPath
+    }
+
+    fun addEndListener(endListener: DelayedOnAnimationEndListener): Boolean {
+        return if (alphaAnimation.isRunning) {
+            alphaAnimation.addEndListener(endListener)
+            true
+        } else if (horizontalTranslation.animation.isRunning) {
+            horizontalTranslation.animation.addEndListener(endListener)
+            true
+        } else {
+            endListener.runNow()
+            false
+        }
+    }
+
+    fun setStretch(
+        horizontalTranslationStretchAmount: Float,
+        arrowStretchAmount: Float,
+        backgroundWidthStretchAmount: Float,
+        fullyStretchedDimens: EdgePanelParams.BackIndicatorDimens
+    ) {
+        horizontalTranslation.stretchBy(
+            finalPosition = fullyStretchedDimens.horizontalTranslation,
+            amount = horizontalTranslationStretchAmount
+        )
+        arrowLength.stretchBy(
+            finalPosition = fullyStretchedDimens.arrowDimens.length,
+            amount = arrowStretchAmount
+        )
+        arrowHeight.stretchBy(
+            finalPosition = fullyStretchedDimens.arrowDimens.height,
+            amount = arrowStretchAmount
+        )
+        backgroundWidth.stretchBy(
+            finalPosition = fullyStretchedDimens.backgroundDimens.width,
+            amount = backgroundWidthStretchAmount
+        )
+    }
+
+    fun resetStretch() {
+        horizontalTranslation.stretchTo(0f)
+        arrowLength.stretchTo(0f)
+        arrowHeight.stretchTo(0f)
+        backgroundWidth.stretchTo(0f)
+        backgroundHeight.stretchTo(0f)
+        backgroundEdgeCornerRadius.stretchTo(0f)
+        backgroundFarCornerRadius.stretchTo(0f)
+    }
+
+    /**
+     * Updates resting arrow and background size not accounting for stretch
+     */
+    internal fun setRestingDimens(
+        restingParams: EdgePanelParams.BackIndicatorDimens,
+        animate: Boolean
+    ) {
+        horizontalTranslation.updateRestingPosition(restingParams.horizontalTranslation, animate)
+        arrowLength.updateRestingPosition(restingParams.arrowDimens.length, animate)
+        arrowHeight.updateRestingPosition(restingParams.arrowDimens.height, animate)
+        backgroundWidth.updateRestingPosition(restingParams.backgroundDimens.width, animate)
+        backgroundHeight.updateRestingPosition(restingParams.backgroundDimens.height, animate)
+        backgroundEdgeCornerRadius.updateRestingPosition(
+            restingParams.backgroundDimens.edgeCornerRadius,
+            animate
+        )
+        backgroundFarCornerRadius.updateRestingPosition(
+            restingParams.backgroundDimens.farCornerRadius,
+            animate
+        )
+    }
+
+    fun animateVertically(yPos: Float) = verticalTranslation.stretchTo(yPos)
+
+    fun setArrowStiffness(arrowStiffness: Float, arrowDampingRatio: Float) {
+        arrowLength.animation.spring.apply {
+            stiffness = arrowStiffness
+            dampingRatio = arrowDampingRatio
+        }
+        arrowHeight.animation.spring.apply {
+            stiffness = arrowStiffness
+            dampingRatio = arrowDampingRatio
+        }
+    }
+
+    override fun hasOverlappingRendering() = false
+
+    override fun onDraw(canvas: Canvas) {
+        var edgeCorner = backgroundEdgeCornerRadius.pos
+        val farCorner = backgroundFarCornerRadius.pos
+        val halfHeight = backgroundHeight.pos / 2
+
+        canvas.save()
+
+        if (!isLeftPanel) canvas.scale(-1f, 1f, width / 2.0f, 0f)
+
+        canvas.translate(
+            horizontalTranslation.pos,
+            height * 0.5f + verticalTranslation.pos
+        )
+
+        val arrowBackground = arrowBackgroundRect.apply {
+            left = 0f
+            top = -halfHeight
+            right = backgroundWidth.pos
+            bottom = halfHeight
+        }.toPathWithRoundCorners(
+            topLeft = edgeCorner,
+            bottomLeft = edgeCorner,
+            topRight = farCorner,
+            bottomRight = farCorner
+        )
+        canvas.drawPath(arrowBackground, arrowBackgroundPaint)
+
+        val dx = arrowLength.pos
+        val dy = arrowHeight.pos
+
+        // How far the arrow bounding box should be from the edge of the screen. Measured from
+        // either the tip or the back of the arrow, whichever is closer
+        var arrowOffset = (backgroundWidth.pos - dx) / 2
+        canvas.translate(
+            /* dx= */ arrowOffset,
+            /* dy= */ 0f /* pass 0 for the y position since the canvas was already translated */
+        )
+
+        val arrowPointsAwayFromEdge = !arrowsPointLeft.xor(isLeftPanel)
+        if (arrowPointsAwayFromEdge) {
+            canvas.apply {
+                scale(-1f, 1f, 0f, 0f)
+                translate(-dx, 0f)
+            }
+        }
+
+        val arrowPath = calculateArrowPath(dx = dx, dy = dy)
+        canvas.drawPath(arrowPath, arrowPaint)
+        canvas.restore()
+
+        if (trackingBackArrowLatency) {
+            latencyTracker.onActionEnd(LatencyTracker.ACTION_SHOW_BACK_ARROW)
+            trackingBackArrowLatency = false
+        }
+
+        if (DEBUG) drawDebugInfo?.invoke(canvas)
+    }
+
+    fun startTrackingShowBackArrowLatency() {
+        latencyTracker.onActionStart(LatencyTracker.ACTION_SHOW_BACK_ARROW)
+        trackingBackArrowLatency = true
+    }
+
+    private fun RectF.toPathWithRoundCorners(
+        topLeft: Float = 0f,
+        topRight: Float = 0f,
+        bottomRight: Float = 0f,
+        bottomLeft: Float = 0f
+    ): Path = Path().apply {
+        val corners = floatArrayOf(
+            topLeft, topLeft,
+            topRight, topRight,
+            bottomRight, bottomRight,
+            bottomLeft, bottomLeft
+        )
+        addRoundRect(this@toPathWithRoundCorners, corners, Path.Direction.CW)
+    }
+
+    fun cancelAlphaAnimations() {
+        alphaAnimation.cancel()
+        alpha = 1f
+    }
+
+    fun fadeOut() {
+        alphaAnimation.animateToFinalPosition(0f)
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanelController.kt b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanelController.kt
new file mode 100644
index 0000000..6424256
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanelController.kt
@@ -0,0 +1,735 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.navigationbar.gestural
+
+import android.content.Context
+import android.content.res.Configuration
+import android.graphics.Color
+import android.graphics.Paint
+import android.graphics.Point
+import android.os.Handler
+import android.os.SystemClock
+import android.os.VibrationEffect
+import android.util.Log
+import android.util.MathUtils.constrain
+import android.util.MathUtils.saturate
+import android.view.Gravity
+import android.view.MotionEvent
+import android.view.VelocityTracker
+import android.view.View
+import android.view.ViewConfiguration
+import android.view.WindowManager
+import android.view.animation.DecelerateInterpolator
+import android.view.animation.PathInterpolator
+import androidx.dynamicanimation.animation.DynamicAnimation
+import androidx.dynamicanimation.animation.SpringForce
+import com.android.internal.util.LatencyTracker
+import com.android.systemui.dagger.qualifiers.Main
+import com.android.systemui.plugins.NavigationEdgeBackPlugin
+import com.android.systemui.statusbar.VibratorHelper
+import com.android.systemui.statusbar.policy.ConfigurationController
+import com.android.systemui.util.ViewController
+import java.io.PrintWriter
+import javax.inject.Inject
+import kotlin.math.abs
+import kotlin.math.max
+import kotlin.math.min
+import kotlin.math.sign
+
+private const val TAG = "BackPanelController"
+private const val DEBUG = false
+
+private const val ENABLE_FAILSAFE = true
+
+private const val FAILSAFE_DELAY_MS: Long = 350
+
+/**
+ * The time required between the arrow-appears vibration effect and the back-committed vibration
+ * effect. If the arrow is flung quickly, the phone only vibrates once. However, if the arrow is
+ * held on the screen for a long time, it will vibrate a second time when the back gesture is
+ * committed.
+ */
+private const val GESTURE_DURATION_FOR_CLICK_MS = 400
+
+/**
+ * The min duration arrow remains on screen during a fling event.
+ */
+private const val FLING_MIN_APPEARANCE_DURATION = 235L
+
+/**
+ * The min duration arrow remains on screen during a fling event.
+ */
+private const val MIN_FLING_VELOCITY = 3000
+
+/**
+ * The amount of rubber banding we do for the vertical translation
+ */
+private const val RUBBER_BAND_AMOUNT = 15
+
+private const val ARROW_APPEAR_STIFFNESS = 600f
+private const val ARROW_APPEAR_DAMPING_RATIO = 0.4f
+private const val ARROW_DISAPPEAR_STIFFNESS = 1200f
+private const val ARROW_DISAPPEAR_DAMPING_RATIO = SpringForce.DAMPING_RATIO_NO_BOUNCY
+
+/**
+ * The interpolator used to rubber band
+ */
+private val RUBBER_BAND_INTERPOLATOR = PathInterpolator(1.0f / 5.0f, 1.0f, 1.0f, 1.0f)
+
+private val DECELERATE_INTERPOLATOR = DecelerateInterpolator()
+
+private val DECELERATE_INTERPOLATOR_SLOW = DecelerateInterpolator(0.7f)
+
+class BackPanelController private constructor(
+    context: Context,
+    private val windowManager: WindowManager,
+    private val viewConfiguration: ViewConfiguration,
+    @Main private val mainHandler: Handler,
+    private val vibratorHelper: VibratorHelper,
+    private val configurationController: ConfigurationController,
+    latencyTracker: LatencyTracker
+) : ViewController<BackPanel>(BackPanel(context, latencyTracker)), NavigationEdgeBackPlugin {
+
+    /**
+     * Injectable instance to create a new BackPanelController.
+     *
+     * Necessary because EdgeBackGestureHandler sometimes needs to create new instances of
+     * BackPanelController, and we need to match EdgeBackGestureHandler's context.
+     */
+    class Factory @Inject constructor(
+        private val windowManager: WindowManager,
+        private val viewConfiguration: ViewConfiguration,
+        @Main private val mainHandler: Handler,
+        private val vibratorHelper: VibratorHelper,
+        private val configurationController: ConfigurationController,
+        private val latencyTracker: LatencyTracker
+    ) {
+        /** Construct a [BackPanelController].  */
+        fun create(context: Context): BackPanelController {
+            val backPanelController = BackPanelController(
+                context,
+                windowManager,
+                viewConfiguration,
+                mainHandler,
+                vibratorHelper,
+                configurationController,
+                latencyTracker
+            )
+            backPanelController.init()
+            return backPanelController
+        }
+    }
+
+    private var params: EdgePanelParams = EdgePanelParams(resources)
+    private var currentState: GestureState = GestureState.GONE
+    private var previousState: GestureState = GestureState.GONE
+
+    // Phone should only vibrate the first time the arrow is activated
+    private var hasHapticPlayed = false
+
+    // Screen attributes
+    private lateinit var layoutParams: WindowManager.LayoutParams
+    private val displaySize = Point()
+
+    private lateinit var backCallback: NavigationEdgeBackPlugin.BackCallback
+
+    private var previousXTranslation = 0f
+    private var totalTouchDelta = 0f
+    private var velocityTracker: VelocityTracker? = null
+        set(value) {
+            if (field != value) field?.recycle()
+            field = value
+        }
+        get() {
+            if (field == null) field = VelocityTracker.obtain()
+            return field
+        }
+
+    // The x,y position of the first touch event
+    private var startX = 0f
+    private var startY = 0f
+
+    private var gestureStartTime = 0L
+
+    // Whether the current gesture has moved a sufficiently large amount,
+    // so that we can unambiguously start showing the ENTRY animation
+    private var hasPassedDragSlop = false
+
+    private val failsafeRunnable = Runnable { onFailsafe() }
+
+    private enum class GestureState {
+        /* Arrow is off the screen and invisible */
+        GONE,
+
+        /* Arrow is animating in */
+        ENTRY,
+
+        /* could be entry, neutral, or stretched, releasing will commit back */
+        ACTIVE,
+
+        /* releasing will cancel back */
+        INACTIVE,
+
+        /* like committed, but animation takes longer */
+        FLUNG,
+
+        /* back action currently occurring, arrow soon to be GONE */
+        COMMITTED,
+
+        /* back action currently cancelling, arrow soon to be GONE */
+        CANCELLED;
+
+        /**
+         * @return true if the current state responds to touch move events in some way (e.g. by
+         * stretching the back indicator)
+         */
+        fun isInteractive(): Boolean {
+            return when (this) {
+                ENTRY, ACTIVE, INACTIVE -> true
+                GONE, FLUNG, COMMITTED, CANCELLED -> false
+            }
+        }
+    }
+
+    /**
+     * Wrapper around OnAnimationEndListener which runs the given runnable after a delay. The
+     * runnable is not called if the animation is cancelled
+     */
+    inner class DelayedOnAnimationEndListener internal constructor(
+        private val handler: Handler,
+        private val runnable: Runnable,
+        private val minDuration: Long
+    ) : DynamicAnimation.OnAnimationEndListener {
+        override fun onAnimationEnd(
+            animation: DynamicAnimation<*>,
+            canceled: Boolean,
+            value: Float,
+            velocity: Float
+        ) {
+            animation.removeEndListener(this)
+            if (!canceled) {
+                // Total elapsed time of the gesture and the animation
+                val totalElapsedTime = SystemClock.uptimeMillis() - gestureStartTime
+                // The delay between finishing this animation and starting the runnable
+                val delay = max(0, minDuration - totalElapsedTime)
+                handler.postDelayed(runnable, delay)
+            }
+        }
+
+        internal fun runNow() {
+            runnable.run()
+        }
+    }
+
+    private val setCommittedEndListener =
+        DelayedOnAnimationEndListener(
+            mainHandler,
+            { updateArrowState(GestureState.COMMITTED) },
+            minDuration = FLING_MIN_APPEARANCE_DURATION
+        )
+
+    private val setGoneEndListener =
+        DelayedOnAnimationEndListener(
+            mainHandler,
+            {
+                cancelFailsafe()
+                updateArrowState(GestureState.GONE)
+            },
+            minDuration = 0
+        )
+
+    // Vibration
+    private var vibrationTime: Long = 0
+
+    // Minimum of the screen's width or the predefined threshold
+    private var fullyStretchedThreshold = 0f
+
+    /**
+     * Used for initialization and configuration changes
+     */
+    private fun updateConfiguration() {
+        params.update(resources)
+        mView.updateArrowPaint(params.arrowThickness)
+    }
+
+    private val configurationListener = object : ConfigurationController.ConfigurationListener {
+        override fun onConfigChanged(newConfig: Configuration?) {
+            updateConfiguration()
+        }
+
+        override fun onLayoutDirectionChanged(isLayoutRtl: Boolean) {
+            updateArrowDirection(isLayoutRtl)
+        }
+    }
+
+    override fun onViewAttached() {
+        updateConfiguration()
+        updateArrowDirection(configurationController.isLayoutRtl)
+        updateArrowState(GestureState.GONE, force = true)
+        updateRestingArrowDimens(animated = false, currentState)
+        configurationController.addCallback(configurationListener)
+    }
+
+    /** Update the arrow direction. The arrow should point the same way for both panels. */
+    private fun updateArrowDirection(isLayoutRtl: Boolean) {
+        mView.arrowsPointLeft = isLayoutRtl
+    }
+
+    override fun onViewDetached() {
+        configurationController.removeCallback(configurationListener)
+    }
+
+    override fun onMotionEvent(event: MotionEvent) {
+        velocityTracker!!.addMovement(event)
+        when (event.actionMasked) {
+            MotionEvent.ACTION_DOWN -> {
+                resetOnDown()
+                startX = event.x
+                startY = event.y
+                gestureStartTime = SystemClock.uptimeMillis()
+            }
+            MotionEvent.ACTION_MOVE -> {
+                // only go to the ENTRY state after some minimum motion has occurred
+                if (dragSlopExceeded(event.x, startX)) {
+                    handleMoveEvent(event)
+                }
+            }
+            MotionEvent.ACTION_UP -> {
+                if (currentState == GestureState.ACTIVE) {
+                    updateArrowState(if (isFlung()) GestureState.FLUNG else GestureState.COMMITTED)
+                } else if (currentState != GestureState.GONE) { // if invisible, skip animation
+                    updateArrowState(GestureState.CANCELLED)
+                }
+                velocityTracker = null
+            }
+            MotionEvent.ACTION_CANCEL -> {
+                // Receiving a CANCEL implies that something else intercepted
+                // the gesture, i.e., the user did not cancel their gesture.
+                // Therefore, disappear immediately, with minimum fanfare.
+                updateArrowState(GestureState.GONE)
+                velocityTracker = null
+            }
+        }
+    }
+
+    /**
+     * Returns false until the current gesture exceeds the touch slop threshold,
+     * and returns true thereafter (we reset on the subsequent back gesture).
+     * The moment it switches from false -> true is important,
+     * because that's when we switch state, from GONE -> ENTRY.
+     * @return whether the current gesture has moved past a minimum threshold.
+     */
+    private fun dragSlopExceeded(curX: Float, startX: Float): Boolean {
+        if (hasPassedDragSlop) return true
+
+        if (abs(curX - startX) > viewConfiguration.scaledTouchSlop) {
+            // Reset the arrow to the side
+            updateArrowState(GestureState.ENTRY)
+
+            windowManager.updateViewLayout(mView, layoutParams)
+            mView.startTrackingShowBackArrowLatency()
+
+            hasPassedDragSlop = true
+        }
+        return hasPassedDragSlop
+    }
+
+    private fun updateArrowStateOnMove(yTranslation: Float, xTranslation: Float) {
+        if (!currentState.isInteractive())
+            return
+
+        when (currentState) {
+            // Check if we should transition from ENTRY to ACTIVE
+            GestureState.ENTRY ->
+                if (xTranslation > params.swipeTriggerThreshold) {
+                    updateArrowState(GestureState.ACTIVE)
+                }
+
+            // Abort if we had continuous motion toward the edge for a while, OR the direction
+            // in Y is bigger than X * 2
+            GestureState.ACTIVE ->
+                if ((totalTouchDelta < 0 && -totalTouchDelta > params.minDeltaForSwitch) ||
+                    (yTranslation > xTranslation * 2)
+                ) {
+                    updateArrowState(GestureState.INACTIVE)
+                }
+
+            //  Re-activate if we had continuous motion away from the edge for a while
+            GestureState.INACTIVE ->
+                if (totalTouchDelta > 0 && totalTouchDelta > params.minDeltaForSwitch) {
+                    updateArrowState(GestureState.ACTIVE)
+                }
+
+            // By default assume the current direction is kept
+            else -> {}
+        }
+    }
+
+    private fun handleMoveEvent(event: MotionEvent) {
+        if (!currentState.isInteractive())
+            return
+
+        val x = event.x
+        val y = event.y
+
+        val yOffset = y - startY
+
+        // How far in the y direction we are from the original touch
+        val yTranslation = abs(yOffset)
+
+        // How far in the x direction we are from the original touch ignoring motion that
+        // occurs between the screen edge and the touch start.
+        val xTranslation = max(0f, if (mView.isLeftPanel) x - startX else startX - x)
+
+        // Compared to last time, how far we moved in the x direction. If <0, we are moving closer
+        // to the edge. If >0, we are moving further from the edge
+        val xDelta = xTranslation - previousXTranslation
+        previousXTranslation = xTranslation
+
+        if (abs(xDelta) > 0) {
+            if (sign(xDelta) == sign(totalTouchDelta)) {
+                // Direction has NOT changed, so keep counting the delta
+                totalTouchDelta += xDelta
+            } else {
+                // Direction has changed, so reset the delta
+                totalTouchDelta = xDelta
+            }
+        }
+
+        updateArrowStateOnMove(yTranslation, xTranslation)
+        when (currentState) {
+            GestureState.ACTIVE ->
+                stretchActiveBackIndicator(fullScreenStretchProgress(xTranslation))
+            GestureState.ENTRY ->
+                stretchEntryBackIndicator(preThresholdStretchProgress(xTranslation))
+            GestureState.INACTIVE ->
+                mView.resetStretch()
+        }
+
+        // set y translation
+        setVerticalTranslation(yOffset)
+    }
+
+    private fun setVerticalTranslation(yOffset: Float) {
+        val yTranslation = abs(yOffset)
+        val maxYOffset = (mView.height - params.entryIndicator.backgroundDimens.height) / 2f
+        val yProgress = saturate(yTranslation / (maxYOffset * RUBBER_BAND_AMOUNT))
+        mView.animateVertically(
+            RUBBER_BAND_INTERPOLATOR.getInterpolation(yProgress) * maxYOffset *
+                sign(yOffset)
+        )
+    }
+
+    /**
+     * @return the relative position of the drag from the time after the arrow is activated until
+     * the arrow is fully stretched (between 0.0 - 1.0f)
+     */
+    private fun fullScreenStretchProgress(xTranslation: Float): Float {
+        return saturate(
+            (xTranslation - params.swipeTriggerThreshold) /
+                (fullyStretchedThreshold - params.swipeTriggerThreshold)
+        )
+    }
+
+    /**
+     * Tracks the relative position of the drag from the entry until the threshold where the arrow
+     * activates (between 0.0 - 1.0f)
+     */
+    private fun preThresholdStretchProgress(xTranslation: Float): Float {
+        return saturate(xTranslation / params.swipeTriggerThreshold)
+    }
+
+    private fun stretchActiveBackIndicator(progress: Float) {
+        val rubberBandIterpolation = RUBBER_BAND_INTERPOLATOR.getInterpolation(progress)
+        mView.setStretch(
+            horizontalTranslationStretchAmount = rubberBandIterpolation,
+            arrowStretchAmount = rubberBandIterpolation,
+            backgroundWidthStretchAmount = DECELERATE_INTERPOLATOR_SLOW.getInterpolation(progress),
+            params.fullyStretchedIndicator
+        )
+    }
+
+    private fun stretchEntryBackIndicator(progress: Float) {
+        mView.setStretch(
+            horizontalTranslationStretchAmount = 0f,
+            arrowStretchAmount = RUBBER_BAND_INTERPOLATOR.getInterpolation(progress),
+            backgroundWidthStretchAmount = DECELERATE_INTERPOLATOR.getInterpolation(progress),
+            params.preThresholdIndicator
+        )
+    }
+
+    override fun onDestroy() {
+        cancelFailsafe()
+        windowManager.removeView(mView)
+    }
+
+    override fun setIsLeftPanel(isLeftPanel: Boolean) {
+        mView.isLeftPanel = isLeftPanel
+        layoutParams.gravity = if (isLeftPanel) {
+            Gravity.LEFT or Gravity.TOP
+        } else {
+            Gravity.RIGHT or Gravity.TOP
+        }
+    }
+
+    override fun setInsets(insetLeft: Int, insetRight: Int) {
+    }
+
+    override fun setBackCallback(callback: NavigationEdgeBackPlugin.BackCallback) {
+        backCallback = callback
+    }
+
+    override fun setLayoutParams(layoutParams: WindowManager.LayoutParams) {
+        this.layoutParams = layoutParams
+        windowManager.addView(mView, layoutParams)
+    }
+
+    private fun isFlung() = velocityTracker!!.run {
+        computeCurrentVelocity(1000)
+        abs(xVelocity) > MIN_FLING_VELOCITY
+    }
+
+    private fun playFlingBackAnimation() {
+        playAnimation(setCommittedEndListener)
+    }
+
+    private fun playCommitBackAnimation() {
+        // Check if we should vibrate again
+        if (previousState != GestureState.FLUNG) {
+            velocityTracker!!.computeCurrentVelocity(1000)
+            val isSlow = abs(velocityTracker!!.xVelocity) < 500
+            val hasNotVibratedRecently =
+                SystemClock.uptimeMillis() - vibrationTime >= GESTURE_DURATION_FOR_CLICK_MS
+            if (isSlow || hasNotVibratedRecently) {
+                vibratorHelper.vibrate(VibrationEffect.EFFECT_CLICK)
+            }
+        }
+        // Dispatch the actual back trigger
+        if (DEBUG) Log.d(TAG, "playCommitBackAnimation() invoked triggerBack() on backCallback")
+        backCallback.triggerBack()
+
+        playAnimation(setGoneEndListener)
+    }
+
+    private fun playCancelBackAnimation() {
+        backCallback.cancelBack()
+        playAnimation(setGoneEndListener)
+    }
+
+    /**
+     * @return true if the animation is running, false otherwise. Some transitions don't animate
+     */
+    private fun playAnimation(endListener: DelayedOnAnimationEndListener) {
+        updateRestingArrowDimens(animated = true, currentState)
+
+        if (!mView.addEndListener(endListener)) {
+            scheduleFailsafe()
+        }
+    }
+
+    private fun resetOnDown() {
+        hasPassedDragSlop = false
+        hasHapticPlayed = false
+        totalTouchDelta = 0f
+        vibrationTime = 0
+        cancelFailsafe()
+    }
+
+    private fun updateYPosition(touchY: Float) {
+        var yPosition = touchY - params.fingerOffset
+        yPosition = max(yPosition, params.minArrowYPosition.toFloat())
+        yPosition -= layoutParams.height / 2.0f
+        layoutParams.y = constrain(yPosition.toInt(), 0, displaySize.y)
+    }
+
+    override fun setDisplaySize(displaySize: Point) {
+        this.displaySize.set(displaySize.x, displaySize.y)
+        fullyStretchedThreshold = min(displaySize.x.toFloat(), params.swipeProgressThreshold)
+    }
+
+    /**
+     * Updates resting arrow and background size not accounting for stretch
+     */
+    private fun updateRestingArrowDimens(animated: Boolean, currentState: GestureState) {
+        if (animated) {
+            when (currentState) {
+                GestureState.ENTRY, GestureState.ACTIVE, GestureState.FLUNG ->
+                    mView.setArrowStiffness(ARROW_APPEAR_STIFFNESS, ARROW_APPEAR_DAMPING_RATIO)
+                GestureState.CANCELLED -> mView.fadeOut()
+                else ->
+                    mView.setArrowStiffness(
+                        ARROW_DISAPPEAR_STIFFNESS,
+                        ARROW_DISAPPEAR_DAMPING_RATIO
+                    )
+            }
+        }
+        mView.setRestingDimens(
+            restingParams = EdgePanelParams.BackIndicatorDimens(
+                horizontalTranslation = when (currentState) {
+                    GestureState.GONE -> -params.activeIndicator.backgroundDimens.width
+                    // Position the committed arrow slightly further off the screen so we  do not
+                    // see part of it bouncing
+                    GestureState.COMMITTED ->
+                        -params.activeIndicator.backgroundDimens.width * 1.5f
+                    GestureState.FLUNG -> params.fullyStretchedIndicator.horizontalTranslation
+                    GestureState.ACTIVE -> params.activeIndicator.horizontalTranslation
+                    GestureState.ENTRY, GestureState.INACTIVE, GestureState.CANCELLED ->
+                        params.entryIndicator.horizontalTranslation
+                },
+                arrowDimens = when (currentState) {
+                    GestureState.ACTIVE, GestureState.INACTIVE,
+                    GestureState.COMMITTED, GestureState.FLUNG -> params.activeIndicator.arrowDimens
+                    GestureState.CANCELLED -> params.cancelledArrowDimens
+                    GestureState.GONE, GestureState.ENTRY -> params.entryIndicator.arrowDimens
+                },
+                backgroundDimens = when (currentState) {
+                    GestureState.GONE, GestureState.ENTRY -> params.entryIndicator.backgroundDimens
+                    else ->
+                        params.activeIndicator.backgroundDimens.copy(
+                            edgeCornerRadius =
+                            if (currentState == GestureState.INACTIVE ||
+                                currentState == GestureState.CANCELLED
+                            )
+                                params.cancelledEdgeCornerRadius
+                            else
+                                params.activeIndicator.backgroundDimens.edgeCornerRadius
+                        )
+                }
+            ),
+            animate = animated
+        )
+    }
+
+    /**
+     * Update arrow state. If state has not changed, this is a no-op.
+     *
+     * Transitioning to active/inactive will indicate whether or not releasing touch will trigger
+     * the back action.
+     */
+    private fun updateArrowState(newState: GestureState, force: Boolean = false) {
+        if (!force && currentState == newState) return
+
+        if (DEBUG) Log.d(TAG, "updateArrowState $currentState -> $newState")
+        previousState = currentState
+        currentState = newState
+        if (currentState == GestureState.GONE) {
+            mView.cancelAlphaAnimations()
+            mView.visibility = View.GONE
+        } else {
+            mView.visibility = View.VISIBLE
+        }
+
+        when (currentState) {
+            // Transitioning to GONE never animates since the arrow is (presumably) already off the
+            // screen
+            GestureState.GONE -> updateRestingArrowDimens(animated = false, currentState)
+            GestureState.ENTRY -> {
+                updateYPosition(startY)
+                updateRestingArrowDimens(animated = true, currentState)
+            }
+            GestureState.ACTIVE -> {
+                updateRestingArrowDimens(animated = true, currentState)
+                // Vibrate the first time we transition to ACTIVE
+                if (!hasHapticPlayed) {
+                    hasHapticPlayed = true
+                    vibrationTime = SystemClock.uptimeMillis()
+                    vibratorHelper.vibrate(VibrationEffect.EFFECT_TICK)
+                }
+            }
+            GestureState.INACTIVE -> {
+                updateRestingArrowDimens(animated = true, currentState)
+            }
+            GestureState.FLUNG -> playFlingBackAnimation()
+            GestureState.COMMITTED -> playCommitBackAnimation()
+            GestureState.CANCELLED -> playCancelBackAnimation()
+        }
+    }
+
+    private fun scheduleFailsafe() {
+        if (!ENABLE_FAILSAFE) return
+        cancelFailsafe()
+        if (DEBUG) Log.d(TAG, "scheduleFailsafe")
+        mainHandler.postDelayed(failsafeRunnable, FAILSAFE_DELAY_MS)
+    }
+
+    private fun cancelFailsafe() {
+        if (DEBUG) Log.d(TAG, "cancelFailsafe")
+        mainHandler.removeCallbacks(failsafeRunnable)
+    }
+
+    private fun onFailsafe() {
+        if (DEBUG) Log.d(TAG, "onFailsafe")
+        updateArrowState(GestureState.GONE, force = true)
+    }
+
+    override fun dump(pw: PrintWriter) {
+        pw.println("$TAG:")
+        pw.println("  currentState=$currentState")
+        pw.println("  isLeftPanel=$mView.isLeftPanel")
+    }
+
+    init {
+        if (DEBUG) mView.drawDebugInfo = { canvas ->
+            val debugStrings = listOf(
+                "$currentState",
+                "startX=$startX",
+                "startY=$startY",
+                "xDelta=${"%.1f".format(totalTouchDelta)}",
+                "xTranslation=${"%.1f".format(previousXTranslation)}",
+                "pre=${"%.0f".format(preThresholdStretchProgress(previousXTranslation) * 100)}%",
+                "post=${"%.0f".format(fullScreenStretchProgress(previousXTranslation) * 100)}%"
+            )
+            val debugPaint = Paint().apply {
+                color = Color.WHITE
+            }
+            val debugInfoBottom = debugStrings.size * 32f + 4f
+            canvas.drawRect(
+                4f,
+                4f,
+                canvas.width.toFloat(),
+                debugStrings.size * 32f + 4f,
+                debugPaint
+            )
+            debugPaint.apply {
+                color = Color.BLACK
+                textSize = 32f
+            }
+            var offset = 32f
+            for (debugText in debugStrings) {
+                canvas.drawText(debugText, 10f, offset, debugPaint)
+                offset += 32f
+            }
+            debugPaint.apply {
+                color = Color.RED
+                style = Paint.Style.STROKE
+                strokeWidth = 4f
+            }
+            val canvasWidth = canvas.width.toFloat()
+            val canvasHeight = canvas.height.toFloat()
+            canvas.drawRect(0f, 0f, canvasWidth, canvasHeight, debugPaint)
+
+            fun drawVerticalLine(x: Float, color: Int) {
+                debugPaint.color = color
+                val x = if (mView.isLeftPanel) x else canvasWidth - x
+                canvas.drawLine(x, debugInfoBottom, x, canvas.height.toFloat(), debugPaint)
+            }
+
+            drawVerticalLine(x = params.swipeTriggerThreshold, 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 ea41fe7..6ac3ead 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgeBackGestureHandler.java
@@ -53,15 +53,17 @@
 import android.view.Surface;
 import android.view.ViewConfiguration;
 import android.view.WindowManager;
-import android.view.WindowMetrics;
+import android.window.BackEvent;
 
 import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
 import com.android.internal.policy.GestureNavigationSettingsObserver;
 import com.android.internal.util.LatencyTracker;
 import com.android.systemui.R;
-import com.android.systemui.SystemUIFactory;
 import com.android.systemui.broadcast.BroadcastDispatcher;
+import com.android.systemui.dagger.qualifiers.Background;
 import com.android.systemui.dagger.qualifiers.Main;
+import com.android.systemui.flags.FeatureFlags;
+import com.android.systemui.flags.Flags;
 import com.android.systemui.model.SysUiState;
 import com.android.systemui.navigationbar.NavigationBarView;
 import com.android.systemui.navigationbar.NavigationModeController;
@@ -81,16 +83,21 @@
 import com.android.systemui.tracing.ProtoTracer;
 import com.android.systemui.tracing.nano.EdgeBackGestureHandlerProto;
 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.pip.Pip;
 
 import java.io.PrintWriter;
 import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.concurrent.Executor;
+import java.util.function.Consumer;
 
 import javax.inject.Inject;
+import javax.inject.Provider;
 
 /**
  * Utility class to handle edge swipes for back gesture
@@ -128,7 +135,7 @@
                 @Override
                 public void onPrioritizedRotation(@Surface.Rotation int rotation) {
                     mStartingQuickstepRotation = rotation;
-                    updateDisabledForQuickstep(mContext.getResources().getConfiguration());
+                    updateDisabledForQuickstep(mLastReportedConfig);
                 }
             };
 
@@ -145,16 +152,6 @@
                 mPackageName = "_UNKNOWN";
             }
         }
-
-        @Override
-        public void onActivityPinned(String packageName, int userId, int taskId, int stackId) {
-            mIsInPipMode = true;
-        }
-
-        @Override
-        public void onActivityUnpinned() {
-            mIsInPipMode = false;
-        }
     };
 
     private DeviceConfig.OnPropertiesChangedListener mOnPropertiesChangedListener =
@@ -182,10 +179,13 @@
     private final PluginManager mPluginManager;
     private final ProtoTracer mProtoTracer;
     private final NavigationModeController mNavigationModeController;
+    private final BackPanelController.Factory mBackPanelControllerFactory;
     private final ViewConfiguration mViewConfiguration;
     private final WindowManager mWindowManager;
     private final IWindowManager mWindowManagerService;
+    private final Optional<Pip> mPipOptional;
     private final FalsingManager mFalsingManager;
+    private final Configuration mLastReportedConfig = new Configuration();
     // Activities which should not trigger Back gesture.
     private final List<ComponentName> mGestureBlockingActivities = new ArrayList<>();
 
@@ -193,12 +193,16 @@
     private final int mDisplayId;
 
     private final Executor mMainExecutor;
+    private final Executor mBackgroundExecutor;
 
     private final Rect mPipExcludedBounds = new Rect();
     private final Rect mNavBarOverlayExcludedBounds = new Rect();
     private final Region mExcludeRegion = new Region();
     private final Region mUnrestrictedExcludeRegion = new Region();
     private final LatencyTracker mLatencyTracker;
+    private final Provider<BackGestureTfClassifierProvider>
+            mBackGestureTfClassifierProviderProvider;
+    private final FeatureFlags mFeatureFlags;
 
     // The left side edge width where touch down is allowed
     private int mEdgeWidthLeft;
@@ -208,12 +212,18 @@
     private float mBottomGestureHeight;
     // The slop to distinguish between horizontal and vertical motion
     private float mTouchSlop;
+    // The threshold for triggering back
+    private float mBackSwipeTriggerThreshold;
+    // The threshold for back swipe full progress.
+    private float mBackSwipeProgressThreshold;
     // Duration after which we consider the event as longpress.
     private final int mLongPressTimeout;
     private int mStartingQuickstepRotation = -1;
     // We temporarily disable back gesture when user is quickswitching
     // between apps of different orientations
     private boolean mDisabledForQuickstep;
+    // This gets updated when the value of PipTransitionState#isInPip changes.
+    private boolean mIsInPip;
 
     private final PointF mDownPoint = new PointF();
     private final PointF mEndPoint = new PointF();
@@ -229,7 +239,7 @@
     private boolean mIsNavBarShownTransiently;
     private boolean mIsBackGestureAllowed;
     private boolean mGestureBlockingActivityRunning;
-    private boolean mIsInPipMode;
+    private boolean mIsNewBackAffordanceEnabled;
 
     private InputMonitor mInputMonitor;
     private InputChannelCompat.InputEventReceiver mInputEventReceiver;
@@ -244,6 +254,7 @@
     private BackGestureTfClassifierProvider mBackGestureTfClassifierProvider;
     private Map<String, Integer> mVocab;
     private boolean mUseMLModel;
+    private boolean mMLModelIsLoading;
     // minimum width below which we do not run the model
     private int mMLEnableWidth;
     private float mMLModelThreshold;
@@ -272,6 +283,8 @@
                             Log.d(DEBUG_MISSING_GESTURE_TAG, "Triggered back: down="
                                     + sendDown + ", up=" + sendUp);
                         }
+                    } else {
+                        mBackAnimation.setTriggerBack(true);
                     }
 
                     mOverviewProxyService.notifyBackAction(true, (int) mDownPoint.x,
@@ -283,6 +296,9 @@
 
                 @Override
                 public void cancelBack() {
+                    if (mBackAnimation != null) {
+                        mBackAnimation.setTriggerBack(false);
+                    }
                     logGesture(SysUiStatsLog.BACK_GESTURE__TYPE__INCOMPLETE);
                     mOverviewProxyService.notifyBackAction(false, (int) mDownPoint.x,
                             (int) mDownPoint.y, false /* isButton */, !mIsOnLeftEdge);
@@ -297,27 +313,48 @@
         }
     };
 
+    private final Consumer<Boolean> mOnIsInPipStateChangedListener =
+            (isInPip) -> mIsInPip = isInPip;
 
-    EdgeBackGestureHandler(Context context, OverviewProxyService overviewProxyService,
-            SysUiState sysUiState, PluginManager pluginManager, @Main Executor executor,
-            BroadcastDispatcher broadcastDispatcher, ProtoTracer protoTracer,
-            NavigationModeController navigationModeController, ViewConfiguration viewConfiguration,
-            WindowManager windowManager, IWindowManager windowManagerService,
-            FalsingManager falsingManager, LatencyTracker latencyTracker) {
+    EdgeBackGestureHandler(
+            Context context,
+            OverviewProxyService overviewProxyService,
+            SysUiState sysUiState,
+            PluginManager pluginManager,
+            @Main Executor executor,
+            @Background Executor backgroundExecutor,
+            BroadcastDispatcher broadcastDispatcher,
+            ProtoTracer protoTracer,
+            NavigationModeController navigationModeController,
+            BackPanelController.Factory backPanelControllerFactory,
+            ViewConfiguration viewConfiguration,
+            WindowManager windowManager,
+            IWindowManager windowManagerService,
+            Optional<Pip> pipOptional,
+            FalsingManager falsingManager,
+            LatencyTracker latencyTracker,
+            Provider<BackGestureTfClassifierProvider> backGestureTfClassifierProviderProvider,
+            FeatureFlags featureFlags) {
         super(broadcastDispatcher);
         mContext = context;
         mDisplayId = context.getDisplayId();
         mMainExecutor = executor;
+        mBackgroundExecutor = backgroundExecutor;
         mOverviewProxyService = overviewProxyService;
         mSysUiState = sysUiState;
         mPluginManager = pluginManager;
         mProtoTracer = protoTracer;
         mNavigationModeController = navigationModeController;
+        mBackPanelControllerFactory = backPanelControllerFactory;
         mViewConfiguration = viewConfiguration;
         mWindowManager = windowManager;
         mWindowManagerService = windowManagerService;
+        mPipOptional = pipOptional;
         mFalsingManager = falsingManager;
         mLatencyTracker = latencyTracker;
+        mBackGestureTfClassifierProviderProvider = backGestureTfClassifierProviderProvider;
+        mFeatureFlags = featureFlags;
+        mLastReportedConfig.setTo(mContext.getResources().getConfiguration());
         ComponentName recentsComponentName = ComponentName.unflattenFromString(
                 context.getString(com.android.internal.R.string.config_recentsComponentName));
         if (recentsComponentName != null) {
@@ -385,6 +422,11 @@
         final float backGestureSlop = DeviceConfig.getFloat(DeviceConfig.NAMESPACE_SYSTEMUI,
                         SystemUiDeviceConfigFlags.BACK_GESTURE_SLOP_MULTIPLIER, 0.75f);
         mTouchSlop = mViewConfiguration.getScaledTouchSlop() * backGestureSlop;
+        mBackSwipeTriggerThreshold = res.getDimension(
+                R.dimen.navigation_edge_action_drag_threshold);
+        mBackSwipeProgressThreshold = res.getDimension(
+                R.dimen.navigation_edge_action_progress_threshold);
+        updateBackAnimationThresholds();
     }
 
     public void updateNavigationBarOverlayExcludeRegion(Rect exclude) {
@@ -474,6 +516,7 @@
             mPluginManager.removePluginListener(this);
             TaskStackChangeListeners.getInstance().unregisterTaskStackListener(mTaskStackListener);
             DeviceConfig.removeOnPropertiesChangedListener(mOnPropertiesChangedListener);
+            mPipOptional.ifPresent(pip -> pip.setOnIsInPipStateChangedListener(null));
 
             try {
                 mWindowManagerService.unregisterSystemGestureExclusionListener(
@@ -491,6 +534,8 @@
             TaskStackChangeListeners.getInstance().registerTaskStackListener(mTaskStackListener);
             DeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_SYSTEMUI,
                     mMainExecutor::execute, mOnPropertiesChangedListener);
+            mPipOptional.ifPresent(
+                    pip -> pip.setOnIsInPipStateChangedListener(mOnIsInPipStateChangedListener));
 
             try {
                 mWindowManagerService.registerSystemGestureExclusionListener(
@@ -507,8 +552,8 @@
                     Choreographer.getInstance(), this::onInputEvent);
 
             // Add a nav bar panel window
-            setEdgeBackPlugin(
-                    new NavigationBarEdgePanel(mContext, mBackAnimation, mLatencyTracker));
+            mIsNewBackAffordanceEnabled = mFeatureFlags.isEnabled(Flags.NEW_BACK_AFFORDANCE);
+            resetEdgeBackPlugin();
             mPluginManager.addPluginListener(
                     this, NavigationEdgeBackPlugin.class, /*allowMultiple=*/ false);
         }
@@ -523,7 +568,17 @@
 
     @Override
     public void onPluginDisconnected(NavigationEdgeBackPlugin plugin) {
-        setEdgeBackPlugin(new NavigationBarEdgePanel(mContext, mBackAnimation, mLatencyTracker));
+        resetEdgeBackPlugin();
+    }
+
+    private void resetEdgeBackPlugin() {
+        if (mIsNewBackAffordanceEnabled) {
+            setEdgeBackPlugin(
+                    mBackPanelControllerFactory.create(mContext));
+        } else {
+            setEdgeBackPlugin(
+                    new NavigationBarEdgePanel(mContext, mLatencyTracker));
+        }
     }
 
     private void setEdgeBackPlugin(NavigationEdgeBackPlugin edgeBackPlugin) {
@@ -582,31 +637,63 @@
             return;
         }
 
-        if (newState) {
-            String mlModelName = DeviceConfig.getString(DeviceConfig.NAMESPACE_SYSTEMUI,
-                    SystemUiDeviceConfigFlags.BACK_GESTURE_ML_MODEL_NAME, "backgesture");
-            mBackGestureTfClassifierProvider = SystemUIFactory.getInstance()
-                    .createBackGestureTfClassifierProvider(mContext.getAssets(), mlModelName);
-            mMLModelThreshold = DeviceConfig.getFloat(DeviceConfig.NAMESPACE_SYSTEMUI,
-                    SystemUiDeviceConfigFlags.BACK_GESTURE_ML_MODEL_THRESHOLD, 0.9f);
-            if (mBackGestureTfClassifierProvider.isActive()) {
-                Trace.beginSection("EdgeBackGestureHandler#loadVocab");
-                mVocab = mBackGestureTfClassifierProvider.loadVocab(mContext.getAssets());
-                Trace.endSection();
-                mUseMLModel = true;
+        mUseMLModel = newState;
+
+        if (mUseMLModel) {
+            Assert.isMainThread();
+            if (mMLModelIsLoading) {
+                Log.d(TAG, "Model tried to load while already loading.");
                 return;
             }
-        }
-
-        mUseMLModel = false;
-        if (mBackGestureTfClassifierProvider != null) {
+            mMLModelIsLoading = true;
+            mBackgroundExecutor.execute(() -> loadMLModel());
+        } else if (mBackGestureTfClassifierProvider != null) {
             mBackGestureTfClassifierProvider.release();
             mBackGestureTfClassifierProvider = null;
+            mVocab = null;
         }
     }
 
+    private void loadMLModel() {
+        BackGestureTfClassifierProvider provider = mBackGestureTfClassifierProviderProvider.get();
+        float threshold = DeviceConfig.getFloat(DeviceConfig.NAMESPACE_SYSTEMUI,
+                SystemUiDeviceConfigFlags.BACK_GESTURE_ML_MODEL_THRESHOLD, 0.9f);
+        Map<String, Integer> vocab = null;
+        if (provider != null && !provider.isActive()) {
+            provider.release();
+            provider = null;
+            Log.w(TAG, "Cannot load model because it isn't active");
+        }
+        if (provider != null) {
+            Trace.beginSection("EdgeBackGestureHandler#loadVocab");
+            vocab = provider.loadVocab(mContext.getAssets());
+            Trace.endSection();
+        }
+        BackGestureTfClassifierProvider finalProvider = provider;
+        Map<String, Integer> finalVocab = vocab;
+        mMainExecutor.execute(() -> onMLModelLoadFinished(finalProvider, finalVocab, threshold));
+    }
+
+    private void onMLModelLoadFinished(BackGestureTfClassifierProvider provider,
+            Map<String, Integer> vocab, float threshold) {
+        Assert.isMainThread();
+        mMLModelIsLoading = false;
+        if (!mUseMLModel) {
+            // This can happen if the user disables Gesture Nav while the model is loading.
+            if (provider != null) {
+                provider.release();
+            }
+            Log.d(TAG, "Model finished loading but isn't needed.");
+            return;
+        }
+        mBackGestureTfClassifierProvider = provider;
+        mVocab = vocab;
+        mMLModelThreshold = threshold;
+    }
+
     private int getBackGesturePredictionsCategory(int x, int y, int app) {
-        if (app == -1) {
+        BackGestureTfClassifierProvider provider = mBackGestureTfClassifierProvider;
+        if (provider == null || app == -1) {
             return -1;
         }
         int distanceFromEdge;
@@ -627,7 +714,7 @@
             new long[]{(long) y},
         };
 
-        mMLResults = mBackGestureTfClassifierProvider.predict(featuresVector);
+        mMLResults = provider.predict(featuresVector);
         if (mMLResults == -1) {
             return -1;
         }
@@ -653,7 +740,7 @@
     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 = mIsInPipMode && mPipExcludedBounds.contains(x, y);
+        final boolean isInsidePip = mIsInPip && mPipExcludedBounds.contains(x, y);
         if (isInsidePip || mNavBarOverlayExcludedBounds.contains(x, y)) {
             return false;
         }
@@ -717,6 +804,7 @@
         MotionEvent cancelEv = MotionEvent.obtain(ev);
         cancelEv.setAction(MotionEvent.ACTION_CANCEL);
         mEdgeBackPlugin.onMotionEvent(cancelEv);
+        dispatchToBackAnimation(cancelEv);
         cancelEv.recycle();
     }
 
@@ -763,6 +851,7 @@
             if (mAllowGesture) {
                 mEdgeBackPlugin.setIsLeftPanel(mIsOnLeftEdge);
                 mEdgeBackPlugin.onMotionEvent(ev);
+                dispatchToBackAnimation(ev);
             }
             if (mLogGesture) {
                 mDownPoint.set(ev.getX(), ev.getY());
@@ -836,12 +925,23 @@
             if (mAllowGesture) {
                 // forward touch
                 mEdgeBackPlugin.onMotionEvent(ev);
+                dispatchToBackAnimation(ev);
             }
         }
 
         mProtoTracer.scheduleFrameUpdate();
     }
 
+    private void dispatchToBackAnimation(MotionEvent event) {
+        if (mBackAnimation != null) {
+            mBackAnimation.onBackMotion(
+                    event.getX(),
+                    event.getY(),
+                    event.getActionMasked(),
+                    mIsOnLeftEdge ? BackEvent.EDGE_LEFT : BackEvent.EDGE_RIGHT);
+        }
+    }
+
     private void updateDisabledForQuickstep(Configuration newConfig) {
         int rotation = newConfig.windowConfiguration.getRotation();
         mDisabledForQuickstep = mStartingQuickstepRotation > -1 &&
@@ -856,12 +956,12 @@
         if (DEBUG_MISSING_GESTURE) {
             Log.d(DEBUG_MISSING_GESTURE_TAG, "Config changed: config=" + newConfig);
         }
+        mLastReportedConfig.updateFrom(newConfig);
         updateDisplaySize();
     }
 
     private void updateDisplaySize() {
-        WindowMetrics metrics = mWindowManager.getMaximumWindowMetrics();
-        Rect bounds = metrics.getBounds();
+        Rect bounds = mLastReportedConfig.windowConfiguration.getMaxBounds();
         mDisplaySize.set(bounds.width(), bounds.height());
         if (DEBUG_MISSING_GESTURE) {
             Log.d(DEBUG_MISSING_GESTURE_TAG, "Update display size: mDisplaySize=" + mDisplaySize);
@@ -869,6 +969,16 @@
         if (mEdgeBackPlugin != null) {
             mEdgeBackPlugin.setDisplaySize(mDisplaySize);
         }
+        updateBackAnimationThresholds();
+    }
+
+    private void updateBackAnimationThresholds() {
+        if (mBackAnimation == null) {
+            return;
+        }
+        mBackAnimation.setSwipeThresholds(
+                mBackSwipeTriggerThreshold,
+                Math.min(mDisplaySize.x, mBackSwipeProgressThreshold));
     }
 
     private boolean sendEvent(int action, int code) {
@@ -906,7 +1016,7 @@
         pw.println("  mInRejectedExclusion=" + mInRejectedExclusion);
         pw.println("  mExcludeRegion=" + mExcludeRegion);
         pw.println("  mUnrestrictedExcludeRegion=" + mUnrestrictedExcludeRegion);
-        pw.println("  mIsInPipMode=" + mIsInPipMode);
+        pw.println("  mIsInPip=" + mIsInPip);
         pw.println("  mPipExcludedBounds=" + mPipExcludedBounds);
         pw.println("  mNavBarOverlayExcludedBounds=" + mNavBarOverlayExcludedBounds);
         pw.println("  mEdgeWidthLeft=" + mEdgeWidthLeft);
@@ -948,9 +1058,7 @@
 
     public void setBackAnimation(BackAnimation backAnimation) {
         mBackAnimation = backAnimation;
-        if (mEdgeBackPlugin != null && mEdgeBackPlugin instanceof NavigationBarEdgePanel) {
-            ((NavigationBarEdgePanel) mEdgeBackPlugin).setBackAnimation(backAnimation);
-        }
+        updateBackAnimationThresholds();
     }
 
     /**
@@ -964,43 +1072,80 @@
         private final SysUiState mSysUiState;
         private final PluginManager mPluginManager;
         private final Executor mExecutor;
+        private final Executor mBackgroundExecutor;
         private final BroadcastDispatcher mBroadcastDispatcher;
         private final ProtoTracer mProtoTracer;
         private final NavigationModeController mNavigationModeController;
+        private final BackPanelController.Factory mBackPanelControllerFactory;
         private final ViewConfiguration mViewConfiguration;
         private final WindowManager mWindowManager;
         private final IWindowManager mWindowManagerService;
+        private final Optional<Pip> mPipOptional;
         private final FalsingManager mFalsingManager;
         private final LatencyTracker mLatencyTracker;
+        private final Provider<BackGestureTfClassifierProvider>
+                mBackGestureTfClassifierProviderProvider;
+        private final FeatureFlags mFeatureFlags;
 
         @Inject
         public Factory(OverviewProxyService overviewProxyService,
-                SysUiState sysUiState, PluginManager pluginManager, @Main Executor executor,
-                BroadcastDispatcher broadcastDispatcher, ProtoTracer protoTracer,
-                NavigationModeController navigationModeController,
-                ViewConfiguration viewConfiguration, WindowManager windowManager,
-                IWindowManager windowManagerService, FalsingManager falsingManager,
-                LatencyTracker latencyTracker) {
+                       SysUiState sysUiState,
+                       PluginManager pluginManager,
+                       @Main Executor executor,
+                       @Background Executor backgroundExecutor,
+                       BroadcastDispatcher broadcastDispatcher,
+                       ProtoTracer protoTracer,
+                       NavigationModeController navigationModeController,
+                       BackPanelController.Factory backPanelControllerFactory,
+                       ViewConfiguration viewConfiguration,
+                       WindowManager windowManager,
+                       IWindowManager windowManagerService,
+                       Optional<Pip> pipOptional,
+                       FalsingManager falsingManager,
+                       LatencyTracker latencyTracker,
+                       Provider<BackGestureTfClassifierProvider>
+                               backGestureTfClassifierProviderProvider,
+                       FeatureFlags featureFlags) {
             mOverviewProxyService = overviewProxyService;
             mSysUiState = sysUiState;
             mPluginManager = pluginManager;
             mExecutor = executor;
+            mBackgroundExecutor = backgroundExecutor;
             mBroadcastDispatcher = broadcastDispatcher;
             mProtoTracer = protoTracer;
             mNavigationModeController = navigationModeController;
+            mBackPanelControllerFactory = backPanelControllerFactory;
             mViewConfiguration = viewConfiguration;
             mWindowManager = windowManager;
             mWindowManagerService = windowManagerService;
+            mPipOptional = pipOptional;
             mFalsingManager = falsingManager;
             mLatencyTracker = latencyTracker;
+            mBackGestureTfClassifierProviderProvider = backGestureTfClassifierProviderProvider;
+            mFeatureFlags = featureFlags;
         }
 
         /** Construct a {@link EdgeBackGestureHandler}. */
         public EdgeBackGestureHandler create(Context context) {
-            return new EdgeBackGestureHandler(context, mOverviewProxyService, mSysUiState,
-                    mPluginManager, mExecutor, mBroadcastDispatcher, mProtoTracer,
-                    mNavigationModeController, mViewConfiguration, mWindowManager,
-                    mWindowManagerService, mFalsingManager, mLatencyTracker);
+            return new EdgeBackGestureHandler(
+                    context,
+                    mOverviewProxyService,
+                    mSysUiState,
+                    mPluginManager,
+                    mExecutor,
+                    mBackgroundExecutor,
+                    mBroadcastDispatcher,
+                    mProtoTracer,
+                    mNavigationModeController,
+                    mBackPanelControllerFactory,
+                    mViewConfiguration,
+                    mWindowManager,
+                    mWindowManagerService,
+                    mPipOptional,
+                    mFalsingManager,
+                    mLatencyTracker,
+                    mBackGestureTfClassifierProviderProvider,
+                    mFeatureFlags);
         }
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgePanelParams.kt b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgePanelParams.kt
new file mode 100644
index 0000000..d56537b
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/EdgePanelParams.kt
@@ -0,0 +1,144 @@
+package com.android.systemui.navigationbar.gestural
+
+import android.content.res.Resources
+import com.android.systemui.R
+
+data class EdgePanelParams(private var resources: Resources) {
+
+    data class ArrowDimens(
+        val length: Float = 0f,
+        val height: Float = 0f
+    )
+
+    data class BackgroundDimens(
+        val width: Float = 0f,
+        val height: Float = 0f,
+        val edgeCornerRadius: Float = 0f,
+        val farCornerRadius: Float = 0f
+    )
+
+    data class BackIndicatorDimens(
+        val horizontalTranslation: Float = 0f,
+        val arrowDimens: ArrowDimens = ArrowDimens(),
+        val backgroundDimens: BackgroundDimens = BackgroundDimens()
+    )
+
+    var arrowThickness: Float = 0f
+        private set
+    var entryIndicator = BackIndicatorDimens()
+        private set
+    var activeIndicator = BackIndicatorDimens()
+        private set
+    var preThresholdIndicator = BackIndicatorDimens()
+        private set
+    var fullyStretchedIndicator = BackIndicatorDimens()
+        private set
+    var cancelledEdgeCornerRadius: Float = 0f
+        private set
+    var cancelledArrowDimens = ArrowDimens()
+
+    // navigation bar edge constants
+    var arrowPaddingEnd: Int = 0
+        private set
+
+    // The closest to y
+    var minArrowYPosition: Int = 0
+        private set
+    var fingerOffset: Int = 0
+        private set
+    var swipeTriggerThreshold: Float = 0f
+        private set
+    var swipeProgressThreshold: Float = 0f
+        private set
+
+    // The minimum delta needed to change direction / stop triggering back
+    var minDeltaForSwitch: Int = 0
+        private set
+
+    init {
+        update(resources)
+    }
+
+    private fun getDimen(id: Int): Float {
+        return resources.getDimension(id)
+    }
+
+    private fun getPx(id: Int): Int {
+        return resources.getDimensionPixelSize(id)
+    }
+
+    fun update(resources: Resources) {
+        this.resources = resources
+        arrowThickness = getDimen(R.dimen.navigation_edge_arrow_thickness)
+        arrowPaddingEnd = getPx(R.dimen.navigation_edge_panel_padding)
+        minArrowYPosition = getPx(R.dimen.navigation_edge_arrow_min_y)
+        fingerOffset = getPx(R.dimen.navigation_edge_finger_offset)
+        swipeTriggerThreshold = getDimen(R.dimen.navigation_edge_action_drag_threshold)
+        swipeProgressThreshold = getDimen(R.dimen.navigation_edge_action_progress_threshold)
+        minDeltaForSwitch = getPx(R.dimen.navigation_edge_minimum_x_delta_for_switch)
+
+        entryIndicator = BackIndicatorDimens(
+            horizontalTranslation = getDimen(R.dimen.navigation_edge_entry_margin),
+            arrowDimens = ArrowDimens(
+                length = getDimen(R.dimen.navigation_edge_entry_arrow_length),
+                height = getDimen(R.dimen.navigation_edge_entry_arrow_height),
+            ),
+            backgroundDimens = BackgroundDimens(
+                width = getDimen(R.dimen.navigation_edge_entry_background_width),
+                height = getDimen(R.dimen.navigation_edge_entry_background_height),
+                edgeCornerRadius = getDimen(R.dimen.navigation_edge_entry_edge_corners),
+                farCornerRadius = getDimen(R.dimen.navigation_edge_entry_far_corners)
+            )
+        )
+
+        activeIndicator = BackIndicatorDimens(
+            horizontalTranslation = getDimen(R.dimen.navigation_edge_active_margin),
+            arrowDimens = ArrowDimens(
+                length = getDimen(R.dimen.navigation_edge_active_arrow_length),
+                height = getDimen(R.dimen.navigation_edge_active_arrow_height),
+            ),
+            backgroundDimens = BackgroundDimens(
+                width = getDimen(R.dimen.navigation_edge_active_background_width),
+                height = getDimen(R.dimen.navigation_edge_active_background_height),
+                edgeCornerRadius = getDimen(R.dimen.navigation_edge_active_edge_corners),
+                farCornerRadius = getDimen(R.dimen.navigation_edge_active_far_corners)
+
+            )
+        )
+
+        preThresholdIndicator = BackIndicatorDimens(
+            horizontalTranslation = getDimen(R.dimen.navigation_edge_pre_threshold_margin),
+            arrowDimens = ArrowDimens(
+                length = entryIndicator.arrowDimens.length,
+                height = entryIndicator.arrowDimens.height,
+            ),
+            backgroundDimens = BackgroundDimens(
+                width = getDimen(R.dimen.navigation_edge_pre_threshold_background_width),
+                height = getDimen(R.dimen.navigation_edge_pre_threshold_background_height),
+                edgeCornerRadius = getDimen(R.dimen.navigation_edge_pre_threshold_edge_corners),
+                farCornerRadius = getDimen(R.dimen.navigation_edge_pre_threshold_far_corners)
+            )
+        )
+
+        fullyStretchedIndicator = BackIndicatorDimens(
+            horizontalTranslation = getDimen(R.dimen.navigation_edge_stretch_margin),
+            arrowDimens = ArrowDimens(
+                length = getDimen(R.dimen.navigation_edge_stretched_arrow_length),
+                height = getDimen(R.dimen.navigation_edge_stretched_arrow_height),
+            ),
+            backgroundDimens = BackgroundDimens(
+                width = getDimen(R.dimen.navigation_edge_stretch_background_width),
+                height = getDimen(R.dimen.navigation_edge_stretch_background_height),
+                edgeCornerRadius = getDimen(R.dimen.navigation_edge_stretch_edge_corners),
+                farCornerRadius = getDimen(R.dimen.navigation_edge_stretch_far_corners)
+            )
+        )
+
+        cancelledEdgeCornerRadius = getDimen(R.dimen.navigation_edge_cancelled_edge_corners)
+
+        cancelledArrowDimens = ArrowDimens(
+            length = getDimen(R.dimen.navigation_edge_cancelled_arrow_length),
+            height = getDimen(R.dimen.navigation_edge_cancelled_arrow_height)
+        )
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/GestureModule.java b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/GestureModule.java
new file mode 100644
index 0000000..f98496d
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/GestureModule.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.navigationbar.gestural;
+
+import dagger.Module;
+import dagger.Provides;
+
+/**
+ *
+ */
+@Module
+public interface GestureModule {
+    /** */
+    @Provides
+    static BackGestureTfClassifierProvider providsBackGestureTfClassifierProvider() {
+        return new BackGestureTfClassifierProvider();
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/NavigationBarEdgePanel.java b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/NavigationBarEdgePanel.java
index eba9d3f..122852f 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/NavigationBarEdgePanel.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/gestural/NavigationBarEdgePanel.java
@@ -43,7 +43,6 @@
 import android.view.WindowManager;
 import android.view.animation.Interpolator;
 import android.view.animation.PathInterpolator;
-import android.window.BackEvent;
 
 import androidx.core.graphics.ColorUtils;
 import androidx.dynamicanimation.animation.DynamicAnimation;
@@ -59,7 +58,6 @@
 import com.android.systemui.plugins.NavigationEdgeBackPlugin;
 import com.android.systemui.shared.navigationbar.RegionSamplingHelper;
 import com.android.systemui.statusbar.VibratorHelper;
-import com.android.wm.shell.back.BackAnimation;
 
 import java.io.PrintWriter;
 import java.util.concurrent.Executor;
@@ -283,14 +281,11 @@
                 }
             };
     private BackCallback mBackCallback;
-    private BackAnimation mBackAnimation;
 
-    public NavigationBarEdgePanel(Context context,
-            BackAnimation backAnimation, LatencyTracker latencyTracker) {
+    public NavigationBarEdgePanel(Context context, LatencyTracker latencyTracker) {
         super(context);
 
         mWindowManager = context.getSystemService(WindowManager.class);
-        mBackAnimation = backAnimation;
         mVibratorHelper = Dependency.get(VibratorHelper.class);
 
         mDensity = context.getResources().getDisplayMetrics().density;
@@ -360,7 +355,6 @@
                 .getDimension(R.dimen.navigation_edge_action_drag_threshold);
         mSwipeProgressThreshold = context.getResources()
                 .getDimension(R.dimen.navigation_edge_action_progress_threshold);
-        initializeBackAnimation();
 
         setVisibility(GONE);
 
@@ -388,17 +382,6 @@
         mLatencyTracker = latencyTracker;
     }
 
-    public void setBackAnimation(BackAnimation backAnimation) {
-        mBackAnimation = backAnimation;
-        initializeBackAnimation();
-    }
-
-    private void initializeBackAnimation() {
-        if (mBackAnimation != null) {
-            mBackAnimation.setSwipeThresholds(mSwipeTriggerThreshold, mSwipeProgressThreshold);
-        }
-    }
-
     @Override
     public void onDestroy() {
         cancelFailsafe();
@@ -484,12 +467,6 @@
 
     @Override
     public void onMotionEvent(MotionEvent event) {
-        if (mBackAnimation != null) {
-            mBackAnimation.onBackMotion(
-                    event.getX(), event.getY(),
-                    event.getActionMasked(),
-                    mIsLeftPanel ? BackEvent.EDGE_LEFT : BackEvent.EDGE_RIGHT);
-        }
         if (mVelocityTracker == null) {
             mVelocityTracker = VelocityTracker.obtain();
         }
@@ -903,9 +880,6 @@
             // Whenever the trigger back state changes the existing translation animation should be
             // cancelled
             mTranslationAnimation.cancel();
-            if (mBackAnimation != null) {
-                mBackAnimation.setTriggerBack(triggerBack);
-            }
         }
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/people/PeopleModule.kt b/packages/SystemUI/src/com/android/systemui/people/PeopleModule.kt
new file mode 100644
index 0000000..dd35445
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/people/PeopleModule.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.people
+
+import com.android.systemui.people.data.repository.PeopleTileRepository
+import com.android.systemui.people.data.repository.PeopleTileRepositoryImpl
+import com.android.systemui.people.data.repository.PeopleWidgetRepository
+import com.android.systemui.people.data.repository.PeopleWidgetRepositoryImpl
+import dagger.Binds
+import dagger.Module
+
+/** Dagger module to provide/bind people space dependencies. */
+@Module
+interface PeopleModule {
+    @Binds fun bindTileRepository(impl: PeopleTileRepositoryImpl): PeopleTileRepository
+
+    @Binds fun bindWidgetRepository(impl: PeopleWidgetRepositoryImpl): PeopleWidgetRepository
+}
diff --git a/packages/SystemUI/src/com/android/systemui/people/PeopleProvider.java b/packages/SystemUI/src/com/android/systemui/people/PeopleProvider.java
index b55d86e..0ba077e 100644
--- a/packages/SystemUI/src/com/android/systemui/people/PeopleProvider.java
+++ b/packages/SystemUI/src/com/android/systemui/people/PeopleProvider.java
@@ -29,7 +29,8 @@
 import android.util.Log;
 import android.widget.RemoteViews;
 
-import com.android.systemui.SystemUIAppComponentFactory;
+import com.android.systemui.SystemUIAppComponentFactoryBase.ContextAvailableCallback;
+import com.android.systemui.SystemUIAppComponentFactoryBase.ContextInitializer;
 import com.android.systemui.people.widget.PeopleSpaceWidgetManager;
 import com.android.systemui.shared.system.PeopleProviderUtils;
 
@@ -37,11 +38,11 @@
 
 /** API that returns a People Tile preview. */
 public class PeopleProvider extends ContentProvider implements
-        SystemUIAppComponentFactory.ContextInitializer {
+        ContextInitializer {
     private static final String TAG = "PeopleProvider";
     private static final boolean DEBUG = PeopleSpaceUtils.DEBUG;
     private static final String EMPTY_STRING = "";
-    private SystemUIAppComponentFactory.ContextAvailableCallback mCallback;
+    private ContextAvailableCallback mCallback;
 
     @Inject
     PeopleSpaceWidgetManager mPeopleSpaceWidgetManager;
@@ -144,7 +145,7 @@
 
     @Override
     public void setContextAvailableCallback(
-            SystemUIAppComponentFactory.ContextAvailableCallback callback) {
+            ContextAvailableCallback callback) {
         mCallback = callback;
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java
index 93a3f81..7cc95a1 100644
--- a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java
@@ -19,169 +19,63 @@
 import static android.appwidget.AppWidgetManager.EXTRA_APPWIDGET_ID;
 import static android.appwidget.AppWidgetManager.INVALID_APPWIDGET_ID;
 
-import static com.android.systemui.people.PeopleTileViewHelper.getPersonIconBitmap;
-import static com.android.systemui.people.PeopleTileViewHelper.getSizeInDp;
-
-import android.app.Activity;
-import android.app.people.PeopleSpaceTile;
-import android.content.Context;
 import android.content.Intent;
-import android.content.res.TypedArray;
-import android.graphics.Color;
-import android.graphics.Outline;
-import android.graphics.drawable.GradientDrawable;
 import android.os.Bundle;
 import android.util.Log;
-import android.view.View;
 import android.view.ViewGroup;
-import android.view.ViewOutlineProvider;
-import android.widget.LinearLayout;
 
-import com.android.systemui.R;
-import com.android.systemui.people.widget.PeopleSpaceWidgetManager;
-import com.android.systemui.people.widget.PeopleTileKey;
+import androidx.activity.ComponentActivity;
+import androidx.lifecycle.ViewModelProvider;
 
-import java.util.ArrayList;
-import java.util.List;
+import com.android.systemui.people.ui.view.PeopleViewBinder;
+import com.android.systemui.people.ui.viewmodel.PeopleViewModel;
 
 import javax.inject.Inject;
 
 /** People Tile Widget configuration activity that shows the user their conversation tiles. */
-public class PeopleSpaceActivity extends Activity {
+public class PeopleSpaceActivity extends ComponentActivity {
 
     private static final String TAG = "PeopleSpaceActivity";
     private static final boolean DEBUG = PeopleSpaceUtils.DEBUG;
 
-    private PeopleSpaceWidgetManager mPeopleSpaceWidgetManager;
-    private Context mContext;
-    private int mAppWidgetId;
+    private final PeopleViewModel.Factory mViewModelFactory;
 
     @Inject
-    public PeopleSpaceActivity(PeopleSpaceWidgetManager peopleSpaceWidgetManager) {
+    public PeopleSpaceActivity(PeopleViewModel.Factory viewModelFactory) {
         super();
-        mPeopleSpaceWidgetManager = peopleSpaceWidgetManager;
-
+        mViewModelFactory = viewModelFactory;
     }
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        mContext = getApplicationContext();
-        mAppWidgetId = getIntent().getIntExtra(EXTRA_APPWIDGET_ID,
-                INVALID_APPWIDGET_ID);
         setResult(RESULT_CANCELED);
+
+        PeopleViewModel viewModel = new ViewModelProvider(this, mViewModelFactory).get(
+                PeopleViewModel.class);
+
+        // Update the widget ID coming from the intent.
+        int widgetId = getIntent().getIntExtra(EXTRA_APPWIDGET_ID, INVALID_APPWIDGET_ID);
+        viewModel.onWidgetIdChanged(widgetId);
+
+        ViewGroup view = PeopleViewBinder.create(this);
+        PeopleViewBinder.bind(view, viewModel, /* lifecycleOwner= */ this,
+                (result) -> {
+                    finishActivity(result);
+                    return null;
+                });
+        setContentView(view);
     }
 
-    /** Builds the conversation selection activity. */
-    private void buildActivity() {
-        List<PeopleSpaceTile> priorityTiles = new ArrayList<>();
-        List<PeopleSpaceTile> recentTiles = new ArrayList<>();
-        try {
-            priorityTiles = mPeopleSpaceWidgetManager.getPriorityTiles();
-            recentTiles = mPeopleSpaceWidgetManager.getRecentTiles();
-        } catch (Exception e) {
-            Log.e(TAG, "Couldn't retrieve conversations", e);
+    private void finishActivity(PeopleViewModel.Result result) {
+        if (result instanceof PeopleViewModel.Result.Success) {
+            if (DEBUG) Log.d(TAG, "Widget added!");
+            Intent data = ((PeopleViewModel.Result.Success) result).getData();
+            setResult(RESULT_OK, data);
+        } else {
+            if (DEBUG) Log.d(TAG, "Activity dismissed with no widgets added!");
+            setResult(RESULT_CANCELED);
         }
-
-        // If no conversations, render activity without conversations
-        if (recentTiles.isEmpty() && priorityTiles.isEmpty()) {
-            setContentView(R.layout.people_space_activity_no_conversations);
-
-            // The Tile preview has colorBackground as its background. Change it so it's different
-            // than the activity's background.
-            LinearLayout item = findViewById(android.R.id.background);
-            GradientDrawable shape = (GradientDrawable) item.getBackground();
-            final TypedArray ta = mContext.getTheme().obtainStyledAttributes(
-                    new int[]{com.android.internal.R.attr.colorSurface});
-            shape.setColor(ta.getColor(0, Color.WHITE));
-            return;
-        }
-
-        setContentView(R.layout.people_space_activity);
-        setTileViews(R.id.priority, R.id.priority_tiles, priorityTiles);
-        setTileViews(R.id.recent, R.id.recent_tiles, recentTiles);
-    }
-
-    private ViewOutlineProvider mViewOutlineProvider = new ViewOutlineProvider() {
-        @Override
-        public void getOutline(View view, Outline outline) {
-            outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(),
-                    mContext.getResources().getDimension(R.dimen.people_space_widget_radius));
-        }
-    };
-
-    /** Sets a {@link PeopleSpaceTileView}s for each conversation. */
-    private void setTileViews(int viewId, int tilesId, List<PeopleSpaceTile> tiles) {
-        if (tiles.isEmpty()) {
-            LinearLayout view = findViewById(viewId);
-            view.setVisibility(View.GONE);
-            return;
-        }
-
-        ViewGroup layout = findViewById(tilesId);
-        layout.setClipToOutline(true);
-        layout.setOutlineProvider(mViewOutlineProvider);
-        for (int i = 0; i < tiles.size(); ++i) {
-            PeopleSpaceTile tile = tiles.get(i);
-            PeopleSpaceTileView tileView = new PeopleSpaceTileView(mContext,
-                    layout, tile.getId(), i == (tiles.size() - 1));
-            setTileView(tileView, tile);
-        }
-    }
-
-    /** Sets {@code tileView} with the data in {@code conversation}. */
-    private void setTileView(PeopleSpaceTileView tileView, PeopleSpaceTile tile) {
-        try {
-            if (tile.getUserName() != null) {
-                tileView.setName(tile.getUserName().toString());
-            }
-            tileView.setPersonIcon(getPersonIconBitmap(mContext, tile,
-                    getSizeInDp(mContext, R.dimen.avatar_size_for_medium,
-                            mContext.getResources().getDisplayMetrics().density)));
-
-            PeopleTileKey key = new PeopleTileKey(tile);
-            tileView.setOnClickListener(v -> storeWidgetConfiguration(tile, key));
-        } catch (Exception e) {
-            Log.e(TAG, "Couldn't retrieve shortcut information", e);
-        }
-    }
-
-    /** Stores the user selected configuration for {@code mAppWidgetId}. */
-    private void storeWidgetConfiguration(PeopleSpaceTile tile, PeopleTileKey key) {
-        if (PeopleSpaceUtils.DEBUG) {
-            if (DEBUG) {
-                Log.d(TAG, "Put " + tile.getUserName() + "'s shortcut ID: "
-                        + tile.getId() + " for widget ID: "
-                        + mAppWidgetId);
-            }
-        }
-        mPeopleSpaceWidgetManager.addNewWidget(mAppWidgetId, key);
-        finishActivity();
-    }
-
-    /** Finish activity with a successful widget configuration result. */
-    private void finishActivity() {
-        if (DEBUG) Log.d(TAG, "Widget added!");
-        setActivityResult(RESULT_OK);
         finish();
     }
-
-    /** Finish activity without choosing a widget. */
-    public void dismissActivity(View v) {
-        if (DEBUG) Log.d(TAG, "Activity dismissed with no widgets added!");
-        finish();
-    }
-
-    private void setActivityResult(int result) {
-        Intent resultValue = new Intent();
-        resultValue.putExtra(EXTRA_APPWIDGET_ID, mAppWidgetId);
-        setResult(result, resultValue);
-    }
-
-    @Override
-    protected void onResume() {
-        super.onResume();
-        // Refresh tile views to sync new conversations.
-        buildActivity();
-    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/people/PeopleStoryIconFactory.java b/packages/SystemUI/src/com/android/systemui/people/PeopleStoryIconFactory.java
index 4ee951f..58e700f 100644
--- a/packages/SystemUI/src/com/android/systemui/people/PeopleStoryIconFactory.java
+++ b/packages/SystemUI/src/com/android/systemui/people/PeopleStoryIconFactory.java
@@ -28,6 +28,7 @@
 import android.graphics.drawable.Drawable;
 import android.util.IconDrawableFactory;
 import android.util.Log;
+import android.view.ContextThemeWrapper;
 
 import androidx.core.graphics.drawable.RoundedBitmapDrawable;
 
@@ -52,16 +53,15 @@
 
     PeopleStoryIconFactory(Context context, PackageManager pm,
             IconDrawableFactory iconDrawableFactory, int iconSizeDp) {
-        context.setTheme(android.R.style.Theme_DeviceDefault_DayNight);
-        mIconBitmapSize = (int) (iconSizeDp * context.getResources().getDisplayMetrics().density);
-        mDensity = context.getResources().getDisplayMetrics().density;
+        mContext = new ContextThemeWrapper(context, android.R.style.Theme_DeviceDefault_DayNight);
+        mIconBitmapSize = (int) (iconSizeDp * mContext.getResources().getDisplayMetrics().density);
+        mDensity = mContext.getResources().getDisplayMetrics().density;
         mIconSize = mDensity * iconSizeDp;
         mPackageManager = pm;
         mIconDrawableFactory = iconDrawableFactory;
-        mImportantConversationColor = context.getColor(R.color.important_conversation);
-        mAccentColor = Utils.getColorAttr(context,
+        mImportantConversationColor = mContext.getColor(R.color.important_conversation);
+        mAccentColor = Utils.getColorAttr(mContext,
                 com.android.internal.R.attr.colorAccentPrimaryVariant).getDefaultColor();
-        mContext = context;
     }
 
 
diff --git a/packages/SystemUI/src/com/android/systemui/people/PeopleTileViewHelper.java b/packages/SystemUI/src/com/android/systemui/people/PeopleTileViewHelper.java
index 00aa138..be82b1f 100644
--- a/packages/SystemUI/src/com/android/systemui/people/PeopleTileViewHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/people/PeopleTileViewHelper.java
@@ -75,6 +75,7 @@
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.systemui.R;
+import com.android.systemui.people.data.model.PeopleTileModel;
 import com.android.systemui.people.widget.LaunchConversationActivity;
 import com.android.systemui.people.widget.PeopleSpaceWidgetProvider;
 import com.android.systemui.people.widget.PeopleTileKey;
@@ -299,7 +300,8 @@
         return createLastInteractionRemoteViews();
     }
 
-    private static boolean isDndBlockingTileData(@Nullable PeopleSpaceTile tile) {
+    /** Whether the conversation associated with {@code tile} can bypass DND. */
+    public static boolean isDndBlockingTileData(@Nullable PeopleSpaceTile tile) {
         if (tile == null) return false;
 
         int notificationPolicyState = tile.getNotificationPolicyState();
@@ -536,7 +538,8 @@
         return views;
     }
 
-    private static boolean getHasNewStory(PeopleSpaceTile tile) {
+    /** Whether {@code tile} has a new story. */
+    public static boolean getHasNewStory(PeopleSpaceTile tile) {
         return tile.getStatuses() != null && tile.getStatuses().stream().anyMatch(
                 c -> c.getActivity() == ACTIVITY_NEW_STORY);
     }
@@ -1250,16 +1253,24 @@
     }
 
     /** Returns a bitmap with the user icon and package icon. */
-    public static Bitmap getPersonIconBitmap(Context context, PeopleSpaceTile tile,
+    public static Bitmap getPersonIconBitmap(Context context, PeopleTileModel tile,
             int maxAvatarSize) {
-        boolean hasNewStory = getHasNewStory(tile);
-        return getPersonIconBitmap(context, tile, maxAvatarSize, hasNewStory);
+        return getPersonIconBitmap(context, maxAvatarSize, tile.getHasNewStory(),
+                tile.getUserIcon(), tile.getKey().getPackageName(), tile.getKey().getUserId(),
+                tile.isImportant(),  tile.isDndBlocking());
     }
 
     /** Returns a bitmap with the user icon and package icon. */
     private static Bitmap getPersonIconBitmap(
             Context context, PeopleSpaceTile tile, int maxAvatarSize, boolean hasNewStory) {
-        Icon icon = tile.getUserIcon();
+        return getPersonIconBitmap(context, maxAvatarSize, hasNewStory, tile.getUserIcon(),
+                tile.getPackageName(), getUserId(tile),
+                tile.isImportantConversation(), isDndBlockingTileData(tile));
+    }
+
+    private static Bitmap getPersonIconBitmap(
+            Context context, int maxAvatarSize, boolean hasNewStory, Icon icon, String packageName,
+            int userId, boolean importantConversation, boolean dndBlockingTileData) {
         if (icon == null) {
             Drawable placeholder = context.getDrawable(R.drawable.ic_avatar_with_badge).mutate();
             placeholder.setColorFilter(getDisabledColorFilter());
@@ -1272,10 +1283,10 @@
         RoundedBitmapDrawable roundedDrawable = RoundedBitmapDrawableFactory.create(
                 context.getResources(), icon.getBitmap());
         Drawable personDrawable = storyIcon.getPeopleTileDrawable(roundedDrawable,
-                tile.getPackageName(), getUserId(tile), tile.isImportantConversation(),
+                packageName, userId, importantConversation,
                 hasNewStory);
 
-        if (isDndBlockingTileData(tile)) {
+        if (dndBlockingTileData) {
             personDrawable.setColorFilter(getDisabledColorFilter());
         }
 
diff --git a/packages/SystemUI/src/com/android/systemui/people/data/model/PeopleTileModel.kt b/packages/SystemUI/src/com/android/systemui/people/data/model/PeopleTileModel.kt
new file mode 100644
index 0000000..5d8539f
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/people/data/model/PeopleTileModel.kt
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.people.data.model
+
+import android.graphics.drawable.Icon
+import com.android.systemui.people.widget.PeopleTileKey
+
+/** Models a tile/conversation. */
+data class PeopleTileModel(
+    val key: PeopleTileKey,
+    val username: String,
+    val userIcon: Icon,
+    val hasNewStory: Boolean,
+    val isImportant: Boolean,
+    val isDndBlocking: Boolean,
+)
diff --git a/packages/SystemUI/src/com/android/systemui/people/data/repository/PeopleTileRepository.kt b/packages/SystemUI/src/com/android/systemui/people/data/repository/PeopleTileRepository.kt
new file mode 100644
index 0000000..01b43d5
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/people/data/repository/PeopleTileRepository.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.people.data.repository
+
+import android.app.people.PeopleSpaceTile
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.people.PeopleTileViewHelper
+import com.android.systemui.people.data.model.PeopleTileModel
+import com.android.systemui.people.widget.PeopleSpaceWidgetManager
+import com.android.systemui.people.widget.PeopleTileKey
+import javax.inject.Inject
+
+/** A Repository to fetch the current tiles/conversations. */
+// TODO(b/238993727): Make the tiles API reactive.
+interface PeopleTileRepository {
+    /* The current priority tiles. */
+    fun priorityTiles(): List<PeopleTileModel>
+
+    /* The current recent tiles. */
+    fun recentTiles(): List<PeopleTileModel>
+}
+
+@SysUISingleton
+class PeopleTileRepositoryImpl
+@Inject
+constructor(
+    private val peopleSpaceWidgetManager: PeopleSpaceWidgetManager,
+) : PeopleTileRepository {
+    override fun priorityTiles(): List<PeopleTileModel> {
+        return peopleSpaceWidgetManager.priorityTiles.map { it.toModel() }
+    }
+
+    override fun recentTiles(): List<PeopleTileModel> {
+        return peopleSpaceWidgetManager.recentTiles.map { it.toModel() }
+    }
+
+    private fun PeopleSpaceTile.toModel(): PeopleTileModel {
+        return PeopleTileModel(
+            PeopleTileKey(this),
+            userName.toString(),
+            userIcon,
+            PeopleTileViewHelper.getHasNewStory(this),
+            isImportantConversation,
+            PeopleTileViewHelper.isDndBlockingTileData(this),
+        )
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/people/data/repository/PeopleWidgetRepository.kt b/packages/SystemUI/src/com/android/systemui/people/data/repository/PeopleWidgetRepository.kt
new file mode 100644
index 0000000..f2b6cb1
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/people/data/repository/PeopleWidgetRepository.kt
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.people.data.repository
+
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.people.widget.PeopleSpaceWidgetManager
+import com.android.systemui.people.widget.PeopleTileKey
+import javax.inject.Inject
+
+interface PeopleWidgetRepository {
+    /**
+     * Bind the widget with ID [widgetId] to the tile keyed by [tileKey].
+     *
+     * If there is already a widget with [widgetId], this existing widget will be reconfigured and
+     * associated to this tile. If there is no widget with [widgetId], a new one will be created.
+     */
+    fun setWidgetTile(widgetId: Int, tileKey: PeopleTileKey)
+}
+
+@SysUISingleton
+class PeopleWidgetRepositoryImpl
+@Inject
+constructor(
+    private val peopleSpaceWidgetManager: PeopleSpaceWidgetManager,
+) : PeopleWidgetRepository {
+    override fun setWidgetTile(widgetId: Int, tileKey: PeopleTileKey) {
+        peopleSpaceWidgetManager.addNewWidget(widgetId, tileKey)
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/people/ui/view/PeopleViewBinder.kt b/packages/SystemUI/src/com/android/systemui/people/ui/view/PeopleViewBinder.kt
new file mode 100644
index 0000000..d8a429e
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/people/ui/view/PeopleViewBinder.kt
@@ -0,0 +1,247 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.people.ui.view
+
+import android.content.Context
+import android.graphics.Color
+import android.graphics.Outline
+import android.graphics.drawable.GradientDrawable
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.view.ViewOutlineProvider
+import android.widget.LinearLayout
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.Lifecycle.State.CREATED
+import androidx.lifecycle.LifecycleOwner
+import androidx.lifecycle.lifecycleScope
+import androidx.lifecycle.repeatOnLifecycle
+import com.android.systemui.R
+import com.android.systemui.people.PeopleSpaceTileView
+import com.android.systemui.people.ui.viewmodel.PeopleTileViewModel
+import com.android.systemui.people.ui.viewmodel.PeopleViewModel
+import kotlinx.coroutines.flow.collect
+import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.launch
+
+/** A ViewBinder for [PeopleViewModel]. */
+object PeopleViewBinder {
+    private const val TAG = "PeopleViewBinder"
+
+    /**
+     * The [ViewOutlineProvider] used to clip the corner radius of the recent and priority lists.
+     */
+    private val ViewOutlineProvider =
+        object : ViewOutlineProvider() {
+            override fun getOutline(view: View, outline: Outline) {
+                outline.setRoundRect(
+                    0,
+                    0,
+                    view.width,
+                    view.height,
+                    view.context.resources.getDimension(R.dimen.people_space_widget_radius),
+                )
+            }
+        }
+
+    /** Create a [View] that can later be [bound][bind] to a [PeopleViewModel]. */
+    @JvmStatic
+    fun create(context: Context): ViewGroup {
+        return LayoutInflater.from(context)
+            .inflate(R.layout.people_space_activity, /* root= */ null) as ViewGroup
+    }
+
+    /** Bind [view] to [viewModel]. */
+    @JvmStatic
+    fun bind(
+        view: ViewGroup,
+        viewModel: PeopleViewModel,
+        lifecycleOwner: LifecycleOwner,
+        onResult: (PeopleViewModel.Result) -> Unit,
+    ) {
+        // Call [onResult] as soon as a result is available.
+        lifecycleOwner.lifecycleScope.launch {
+            lifecycleOwner.repeatOnLifecycle(CREATED) {
+                viewModel.result.collect { result ->
+                    if (result != null) {
+                        viewModel.clearResult()
+                        onResult(result)
+                    }
+                }
+            }
+        }
+
+        // Start collecting the UI data once the Activity is STARTED.
+        lifecycleOwner.lifecycleScope.launch {
+            lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
+                combine(
+                        viewModel.priorityTiles,
+                        viewModel.recentTiles,
+                    ) { priority, recent ->
+                        priority to recent
+                    }
+                    .collect { (priorityTiles, recentTiles) ->
+                        if (priorityTiles.isNotEmpty() || recentTiles.isNotEmpty()) {
+                            setConversationsContent(
+                                view,
+                                priorityTiles,
+                                recentTiles,
+                                viewModel::onTileClicked,
+                            )
+                        } else {
+                            setNoConversationsContent(view, viewModel::onUserJourneyCancelled)
+                        }
+                    }
+            }
+        }
+
+        // Make sure to refresh the tiles/conversations when the Activity is resumed, so that it
+        // updates them when going back to the Activity after leaving it.
+        lifecycleOwner.lifecycleScope.launch {
+            lifecycleOwner.repeatOnLifecycle(Lifecycle.State.RESUMED) {
+                viewModel.onTileRefreshRequested()
+            }
+        }
+    }
+
+    private fun setNoConversationsContent(view: ViewGroup, onGotItClicked: () -> Unit) {
+        // This should never happen.
+        if (view.childCount > 1) {
+            error("view has ${view.childCount} children, it should have maximum 1")
+        }
+
+        // The static content for no conversations is already shown.
+        if (view.findViewById<View>(R.id.top_level_no_conversations) != null) {
+            return
+        }
+
+        // If we were showing the content with conversations earlier, remove it.
+        if (view.childCount == 1) {
+            view.removeViewAt(0)
+        }
+
+        val context = view.context
+        val noConversationsView =
+            LayoutInflater.from(context)
+                .inflate(R.layout.people_space_activity_no_conversations, /* root= */ view)
+
+        noConversationsView.findViewById<View>(R.id.got_it_button).setOnClickListener {
+            onGotItClicked()
+        }
+
+        // The Tile preview has colorBackground as its background. Change it so it's different than
+        // the activity's background.
+        val item = noConversationsView.findViewById<LinearLayout>(android.R.id.background)
+        val shape = item.background as GradientDrawable
+        val ta =
+            context.theme.obtainStyledAttributes(
+                intArrayOf(com.android.internal.R.attr.colorSurface)
+            )
+        shape.setColor(ta.getColor(0, Color.WHITE))
+        ta.recycle()
+    }
+
+    private fun setConversationsContent(
+        view: ViewGroup,
+        priorityTiles: List<PeopleTileViewModel>,
+        recentTiles: List<PeopleTileViewModel>,
+        onTileClicked: (PeopleTileViewModel) -> Unit,
+    ) {
+        // This should never happen.
+        if (view.childCount > 1) {
+            error("view has ${view.childCount} children, it should have maximum 1")
+        }
+
+        // Inflate the content with conversations, if it's not already.
+        if (view.findViewById<View>(R.id.top_level_with_conversations) == null) {
+            // If we were showing the content without conversations earlier, remove it.
+            if (view.childCount == 1) {
+                view.removeViewAt(0)
+            }
+
+            LayoutInflater.from(view.context)
+                .inflate(R.layout.people_space_activity_with_conversations, /* root= */ view)
+        }
+
+        // TODO(b/193782241): Replace the NestedScrollView + 2x LinearLayout from this layout into a
+        // single RecyclerView once this screen is tested by screenshot tests. Introduce a
+        // PeopleSpaceTileViewBinder that will properly create and bind the View associated to a
+        // PeopleSpaceTileViewModel (and remove the PeopleSpaceTileView class).
+        val conversationsView = view.requireViewById<View>(R.id.top_level_with_conversations)
+        setTileViews(
+            conversationsView,
+            R.id.priority,
+            R.id.priority_tiles,
+            priorityTiles,
+            onTileClicked,
+        )
+
+        setTileViews(
+            conversationsView,
+            R.id.recent,
+            R.id.recent_tiles,
+            recentTiles,
+            onTileClicked,
+        )
+    }
+
+    /** Sets a [PeopleSpaceTileView]s for each conversation. */
+    private fun setTileViews(
+        root: View,
+        tilesListId: Int,
+        tilesId: Int,
+        tiles: List<PeopleTileViewModel>,
+        onTileClicked: (PeopleTileViewModel) -> Unit,
+    ) {
+        // Remove any previously added tile.
+        // TODO(b/193782241): Once this list is a big RecyclerView, set the current list and use
+        // DiffUtil to do as less addView/removeView as possible.
+        val layout = root.requireViewById<ViewGroup>(tilesId)
+        layout.removeAllViews()
+        layout.outlineProvider = ViewOutlineProvider
+
+        val tilesListView = root.requireViewById<LinearLayout>(tilesListId)
+        if (tiles.isEmpty()) {
+            tilesListView.visibility = View.GONE
+            return
+        }
+        tilesListView.visibility = View.VISIBLE
+
+        // Add each tile.
+        tiles.forEachIndexed { i, tile ->
+            val tileView =
+                PeopleSpaceTileView(root.context, layout, tile.key.shortcutId, i == tiles.size - 1)
+            bindTileView(tileView, tile, onTileClicked)
+        }
+    }
+
+    /** Sets [tileView] with the data in [conversation]. */
+    private fun bindTileView(
+        tileView: PeopleSpaceTileView,
+        tile: PeopleTileViewModel,
+        onTileClicked: (PeopleTileViewModel) -> Unit,
+    ) {
+        try {
+            tileView.setName(tile.username)
+            tileView.setPersonIcon(tile.icon)
+            tileView.setOnClickListener { onTileClicked(tile) }
+        } catch (e: Exception) {
+            Log.e(TAG, "Couldn't retrieve shortcut information", e)
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/people/ui/viewmodel/PeopleTileViewModel.kt b/packages/SystemUI/src/com/android/systemui/people/ui/viewmodel/PeopleTileViewModel.kt
new file mode 100644
index 0000000..40205ce
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/people/ui/viewmodel/PeopleTileViewModel.kt
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.people.ui.viewmodel
+
+import android.graphics.Bitmap
+import com.android.systemui.people.widget.PeopleTileKey
+
+/** Models UI state for a single tile/conversation. */
+data class PeopleTileViewModel(
+    val key: PeopleTileKey,
+    val icon: Bitmap,
+    val username: String?,
+)
diff --git a/packages/SystemUI/src/com/android/systemui/people/ui/viewmodel/PeopleViewModel.kt b/packages/SystemUI/src/com/android/systemui/people/ui/viewmodel/PeopleViewModel.kt
new file mode 100644
index 0000000..0834a5a
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/people/ui/viewmodel/PeopleViewModel.kt
@@ -0,0 +1,163 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.people.ui.viewmodel
+
+import android.appwidget.AppWidgetManager.EXTRA_APPWIDGET_ID
+import android.appwidget.AppWidgetManager.INVALID_APPWIDGET_ID
+import android.content.Context
+import android.content.Intent
+import android.util.Log
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.ViewModelProvider
+import com.android.systemui.R
+import com.android.systemui.dagger.qualifiers.Application
+import com.android.systemui.people.PeopleSpaceUtils
+import com.android.systemui.people.PeopleTileViewHelper
+import com.android.systemui.people.data.model.PeopleTileModel
+import com.android.systemui.people.data.repository.PeopleTileRepository
+import com.android.systemui.people.data.repository.PeopleWidgetRepository
+import javax.inject.Inject
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.flow.asStateFlow
+
+/**
+ * Models UI state for the people space, allowing the user to select which conversation should be
+ * associated to a new or existing Conversation widget.
+ */
+class PeopleViewModel(
+    @Application private val context: Context,
+    private val tileRepository: PeopleTileRepository,
+    private val widgetRepository: PeopleWidgetRepository,
+) : ViewModel() {
+    /**
+     * The list of the priority tiles/conversations.
+     *
+     * Important: Even though this is a Flow, the underlying API used to populate this Flow is not
+     * reactive and you have to manually call [onTileRefreshRequested] to refresh the tiles.
+     */
+    private val _priorityTiles = MutableStateFlow(priorityTiles())
+    val priorityTiles: Flow<List<PeopleTileViewModel>> = _priorityTiles.asStateFlow()
+
+    /**
+     * The list of the priority tiles/conversations.
+     *
+     * Important: Even though this is a Flow, the underlying API used to populate this Flow is not
+     * reactive and you have to manually call [onTileRefreshRequested] to refresh the tiles.
+     */
+    private val _recentTiles = MutableStateFlow(recentTiles())
+    val recentTiles: Flow<List<PeopleTileViewModel>> = _recentTiles.asStateFlow()
+
+    /** The ID of the widget currently being edited/added. */
+    private val _appWidgetId = MutableStateFlow(INVALID_APPWIDGET_ID)
+    val appWidgetId: StateFlow<Int> = _appWidgetId.asStateFlow()
+
+    /** The result of this user journey. */
+    private val _result = MutableStateFlow<Result?>(null)
+    val result: StateFlow<Result?> = _result.asStateFlow()
+
+    /** Refresh the [priorityTiles] and [recentTiles]. */
+    fun onTileRefreshRequested() {
+        _priorityTiles.value = priorityTiles()
+        _recentTiles.value = recentTiles()
+    }
+
+    /** Called when the [appWidgetId] should be changed to [widgetId]. */
+    fun onWidgetIdChanged(widgetId: Int) {
+        _appWidgetId.value = widgetId
+    }
+
+    /** Clear [result], setting it to null. */
+    fun clearResult() {
+        _result.value = null
+    }
+
+    /** Called when a tile is clicked. */
+    fun onTileClicked(tile: PeopleTileViewModel) {
+        val widgetId = _appWidgetId.value
+        if (PeopleSpaceUtils.DEBUG) {
+            Log.d(
+                TAG,
+                "Put ${tile.username}'s shortcut ID: ${tile.key.shortcutId} for widget ID $widgetId"
+            )
+        }
+        widgetRepository.setWidgetTile(widgetId, tile.key)
+        _result.value =
+            Result.Success(Intent().apply { putExtra(EXTRA_APPWIDGET_ID, appWidgetId.value) })
+    }
+
+    /** Called when this user journey is cancelled. */
+    fun onUserJourneyCancelled() {
+        _result.value = Result.Cancelled
+    }
+
+    private fun priorityTiles(): List<PeopleTileViewModel> {
+        return try {
+            tileRepository.priorityTiles().map { it.toViewModel() }
+        } catch (e: Exception) {
+            Log.e(TAG, "Couldn't retrieve priority conversations", e)
+            emptyList()
+        }
+    }
+
+    private fun recentTiles(): List<PeopleTileViewModel> {
+        return try {
+            tileRepository.recentTiles().map { it.toViewModel() }
+        } catch (e: Exception) {
+            Log.e(TAG, "Couldn't retrieve recent conversations", e)
+            emptyList()
+        }
+    }
+
+    private fun PeopleTileModel.toViewModel(): PeopleTileViewModel {
+        val icon =
+            PeopleTileViewHelper.getPersonIconBitmap(
+                context,
+                this,
+                PeopleTileViewHelper.getSizeInDp(
+                    context,
+                    R.dimen.avatar_size_for_medium,
+                    context.resources.displayMetrics.density,
+                )
+            )
+        return PeopleTileViewModel(key, icon, username)
+    }
+
+    /** The Factory that should be used to create a [PeopleViewModel]. */
+    class Factory
+    @Inject
+    constructor(
+        @Application private val context: Context,
+        private val tileRepository: PeopleTileRepository,
+        private val widgetRepository: PeopleWidgetRepository,
+    ) : ViewModelProvider.Factory {
+        override fun <T : ViewModel> create(modelClass: Class<T>): T {
+            check(modelClass == PeopleViewModel::class.java)
+            return PeopleViewModel(context, tileRepository, widgetRepository) as T
+        }
+    }
+
+    sealed class Result {
+        class Success(val data: Intent) : Result()
+        object Cancelled : Result()
+    }
+
+    companion object {
+        private const val TAG = "PeopleViewModel"
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/people/widget/LaunchConversationActivity.java b/packages/SystemUI/src/com/android/systemui/people/widget/LaunchConversationActivity.java
index e1b97a4..20c6c55 100644
--- a/packages/SystemUI/src/com/android/systemui/people/widget/LaunchConversationActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/people/widget/LaunchConversationActivity.java
@@ -21,6 +21,7 @@
 import android.content.Intent;
 import android.content.pm.LauncherApps;
 import android.os.Bundle;
+import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.UserHandle;
 import android.os.UserManager;
@@ -34,6 +35,7 @@
 import com.android.internal.logging.UiEventLoggerImpl;
 import com.android.internal.statusbar.IStatusBarService;
 import com.android.internal.statusbar.NotificationVisibility;
+import com.android.systemui.dagger.qualifiers.Background;
 import com.android.systemui.people.PeopleSpaceUtils;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
@@ -43,6 +45,7 @@
 import com.android.wm.shell.bubbles.Bubble;
 
 import java.util.Optional;
+import java.util.concurrent.Executor;
 
 import javax.inject.Inject;
 
@@ -58,6 +61,7 @@
     private boolean mIsForTesting;
     private IStatusBarService mIStatusBarService;
     private CommandQueue mCommandQueue;
+    private Executor mBgExecutor;
     private Bubble mBubble;
     private NotificationEntry mEntryToBubble;
 
@@ -67,7 +71,8 @@
             CommonNotifCollection commonNotifCollection,
             Optional<BubblesManager> bubblesManagerOptional,
             UserManager userManager,
-            CommandQueue commandQueue
+            CommandQueue commandQueue,
+            @Background Executor bgExecutor
     ) {
         super();
         mVisibilityProvider = visibilityProvider;
@@ -91,6 +96,7 @@
                 mCommandQueue.removeCallback(this);
             }
         });
+        mBgExecutor = bgExecutor;
     }
 
     @Override
@@ -172,34 +178,36 @@
             return;
         }
 
-        try {
-            if (mIStatusBarService == null || mCommonNotifCollection == null) {
-                if (DEBUG) {
-                    Log.d(TAG, "Skipping clear notification: null services, key: " + notifKey);
-                }
-                return;
+        if (mIStatusBarService == null || mCommonNotifCollection == null) {
+            if (DEBUG) {
+                Log.d(TAG, "Skipping clear notification: null services, key: " + notifKey);
             }
-
-            NotificationEntry entry = mCommonNotifCollection.getEntry(notifKey);
-            if (entry == null || entry.getRanking() == null) {
-                if (DEBUG) {
-                    Log.d(TAG, "Skipping clear notification: NotificationEntry or its Ranking"
-                            + " is null, key: " + notifKey);
-                }
-                return;
-            }
-
-            NotificationVisibility notifVisibility = mVisibilityProvider.obtain(entry, true);
-            int rank = notifVisibility.rank;
-
-            if (DEBUG) Log.d(TAG, "Clearing notification, key: " + notifKey + ", rank: " + rank);
-            mIStatusBarService.onNotificationClear(
-                    packageName, userHandle.getIdentifier(), notifKey,
-                    NotificationStats.DISMISSAL_OTHER,
-                    NotificationStats.DISMISS_SENTIMENT_POSITIVE, notifVisibility);
-        } catch (Exception e) {
-            Log.e(TAG, "Exception cancelling notification:" + e);
+            return;
         }
+
+        NotificationEntry entry = mCommonNotifCollection.getEntry(notifKey);
+        if (entry == null || entry.getRanking() == null) {
+            if (DEBUG) {
+                Log.d(TAG, "Skipping clear notification: NotificationEntry or its Ranking"
+                        + " is null, key: " + notifKey);
+            }
+            return;
+        }
+
+        NotificationVisibility notifVisibility = mVisibilityProvider.obtain(entry, true);
+        int rank = notifVisibility.rank;
+
+        if (DEBUG) Log.d(TAG, "Clearing notification, key: " + notifKey + ", rank: " + rank);
+        mBgExecutor.execute(() -> {
+            try {
+                mIStatusBarService.onNotificationClear(
+                        packageName, userHandle.getIdentifier(), notifKey,
+                        NotificationStats.DISMISSAL_OTHER,
+                        NotificationStats.DISMISS_SENTIMENT_POSITIVE, notifVisibility);
+            } catch (RemoteException e) {
+                Log.e(TAG, "Exception cancelling notification:" + e);
+            }
+        });
     }
 
     @VisibleForTesting
diff --git a/packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetManager.java b/packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetManager.java
index 1a7bd8c..18be0aa 100644
--- a/packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetManager.java
+++ b/packages/SystemUI/src/com/android/systemui/people/widget/PeopleSpaceWidgetManager.java
@@ -289,7 +289,7 @@
             if (DEBUG) Log.d(TAG, "Updating widget: " + appWidgetId);
             PeopleSpaceTile tile = getTileForExistingWidget(appWidgetId);
             if (tile == null) {
-                Log.e(TAG, "Matching conversation not found for shortcut ID");
+                Log.e(TAG, "Matching conversation not found for widget " + appWidgetId);
             }
             updateAppWidgetOptionsAndView(appWidgetId, tile);
             widgetIdToTile.put(appWidgetId, tile);
@@ -308,7 +308,7 @@
         if (DEBUG) Log.d(TAG, "Widget: " + appWidgetId + " for: " + key.toString());
 
         if (!PeopleTileKey.isValid(key)) {
-            Log.e(TAG, "Cannot update invalid widget");
+            Log.e(TAG, "Invalid tile key updating widget " + appWidgetId);
             return;
         }
         RemoteViews views = PeopleTileViewHelper.createRemoteViews(mContext, tile, appWidgetId,
@@ -330,7 +330,7 @@
     /** Updates tile in app widget options and the current view. */
     public void updateAppWidgetOptionsAndView(int appWidgetId, PeopleSpaceTile tile) {
         if (tile == null) {
-            if (DEBUG) Log.w(TAG, "Storing null tile");
+            Log.w(TAG, "Storing null tile for widget " + appWidgetId);
         }
         synchronized (mTiles) {
             mTiles.put(appWidgetId, tile);
@@ -348,7 +348,7 @@
         try {
             return getTileForExistingWidgetThrowing(appWidgetId);
         } catch (Exception e) {
-            Log.e(TAG, "failed to retrieve tile for widget ID " + appWidgetId, e);
+            Log.e(TAG, "failed to retrieve tile for existing widget " + appWidgetId, e);
             return null;
         }
     }
@@ -388,7 +388,7 @@
             boolean supplementFromStorage) throws
             PackageManager.NameNotFoundException {
         if (!PeopleTileKey.isValid(key)) {
-            Log.e(TAG, "PeopleTileKey invalid: " + key.toString());
+            Log.e(TAG, "Invalid tile key finding tile for existing widget " + appWidgetId);
             return null;
         }
 
@@ -423,7 +423,7 @@
             // Add current state.
             return getTileWithCurrentState(storedTile.build(), ACTION_BOOT_COMPLETED);
         } catch (RemoteException e) {
-            Log.e(TAG, "getTileFromPersistentStorage failing", e);
+            Log.e(TAG, "getTileFromPersistentStorage failing for widget " + appWidgetId, e);
             return null;
         }
     }
@@ -591,10 +591,7 @@
         if (DEBUG) Log.d(TAG, "Augmenting tile for existing widget: " + widgetId);
         PeopleSpaceTile tile = getTileForExistingWidget(widgetId);
         if (tile == null) {
-            if (DEBUG) {
-                Log.w(TAG, "Widget: " + widgetId
-                        + ". Null tile for existing widget, skipping update.");
-            }
+            Log.w(TAG, "Null tile for existing widget " + widgetId + ", skipping update.");
             return Optional.empty();
         }
         String contactUriString = mSharedPrefs.getString(String.valueOf(widgetId), null);
@@ -816,7 +813,7 @@
             tile = getTileFromPersistentStorage(key, appWidgetId,  /* supplementFromStorage= */
                     false);
         } catch (PackageManager.NameNotFoundException e) {
-            Log.e(TAG, "Cannot add widget since app was uninstalled");
+            Log.e(TAG, "Cannot add widget " + appWidgetId + " since app was uninstalled");
             return;
         }
         if (tile == null) {
@@ -851,7 +848,7 @@
                     Collections.singletonList(tile.getId()),
                     tile.getUserHandle(), LauncherApps.FLAG_CACHE_PEOPLE_TILE_SHORTCUTS);
         } catch (Exception e) {
-            Log.w(TAG, "failed to cache shortcut", e);
+            Log.w(TAG, "failed to cache shortcut for widget " + appWidgetId, e);
         }
         PeopleSpaceTile finalTile = tile;
         mBgExecutor.execute(
@@ -862,7 +859,7 @@
     public void registerConversationListenerIfNeeded(int widgetId, PeopleTileKey key) {
         // Retrieve storage needed for registration.
         if (!PeopleTileKey.isValid(key)) {
-            if (DEBUG) Log.w(TAG, "Could not register listener for widget: " + widgetId);
+            Log.w(TAG, "Invalid tile key registering listener for widget " + widgetId);
             return;
         }
         TileConversationListener newListener = new TileConversationListener();
@@ -911,7 +908,7 @@
                         widgetSp.getInt(USER_ID, INVALID_USER_ID),
                         widgetSp.getString(PACKAGE_NAME, null));
                 if (!PeopleTileKey.isValid(key)) {
-                    if (DEBUG) Log.e(TAG, "Could not delete " + widgetId);
+                    Log.e(TAG, "Invalid tile key trying to remove widget " + widgetId);
                     return;
                 }
                 storedWidgetIdsForKey = new HashSet<>(
@@ -1083,7 +1080,8 @@
                 synchronized (mLock) {
                     existingTile = getTileForExistingWidgetThrowing(appWidgetId);
                     if (existingTile == null) {
-                        Log.e(TAG, "Matching conversation not found for shortcut ID");
+                        Log.e(TAG, "Matching conversation not found for widget "
+                                + appWidgetId);
                         continue;
                     }
                     updatedTile = getTileWithCurrentState(existingTile, entryPoint);
@@ -1091,7 +1089,7 @@
                 }
             } catch (PackageManager.NameNotFoundException e) {
                 // Delete data for uninstalled widgets.
-                Log.e(TAG, "package no longer found for tile", e);
+                Log.e(TAG, "Package no longer found for widget " + appWidgetId, e);
                 JobScheduler jobScheduler = mContext.getSystemService(JobScheduler.class);
                 if (jobScheduler != null
                         && jobScheduler.getPendingJob(PeopleBackupFollowUpJob.JOB_ID) != null) {
diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
index 05e8c02..90fc1d7 100644
--- a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
+++ b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
@@ -55,6 +55,7 @@
 
 import androidx.annotation.VisibleForTesting;
 
+import com.android.internal.jank.InteractionJankMonitor;
 import com.android.internal.logging.UiEventLogger;
 import com.android.internal.messages.nano.SystemMessageProto.SystemMessage;
 import com.android.settingslib.Utils;
@@ -62,6 +63,7 @@
 import com.android.settingslib.utils.PowerUtil;
 import com.android.systemui.R;
 import com.android.systemui.SystemUIApplication;
+import com.android.systemui.animation.DialogCuj;
 import com.android.systemui.animation.DialogLaunchAnimator;
 import com.android.systemui.broadcast.BroadcastSender;
 import com.android.systemui.dagger.SysUISingleton;
@@ -93,6 +95,8 @@
     private static final String TAG_TEMPERATURE = "high_temp";
     private static final String TAG_AUTO_SAVER = "auto_saver";
 
+    private static final String INTERACTION_JANK_TAG = "start_power_saver";
+
     private static final int SHOWING_NOTHING = 0;
     private static final int SHOWING_WARNING = 1;
     private static final int SHOWING_INVALID_CHARGER = 3;
@@ -707,7 +711,9 @@
         });
         WeakReference<View> ref = mBatteryControllerLazy.get().getLastPowerSaverStartView();
         if (ref != null && ref.get() != null && ref.get().isAggregatedVisible()) {
-            mDialogLaunchAnimator.showFromView(d, ref.get());
+            mDialogLaunchAnimator.showFromView(d, ref.get(),
+                    new DialogCuj(InteractionJankMonitor.CUJ_SHADE_DIALOG_OPEN,
+                            INTERACTION_JANK_TAG));
         } else {
             d.show();
         }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt b/packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt
index 6f05852..0288c9f 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt
@@ -45,16 +45,18 @@
 import androidx.recyclerview.widget.RecyclerView
 import com.android.internal.config.sysui.SystemUiDeviceConfigFlags.TASK_MANAGER_ENABLED
 import com.android.internal.config.sysui.SystemUiDeviceConfigFlags.TASK_MANAGER_SHOW_FOOTER_DOT
+import com.android.internal.jank.InteractionJankMonitor
 import com.android.systemui.Dumpable
 import com.android.systemui.R
+import com.android.systemui.animation.DialogCuj
 import com.android.systemui.animation.DialogLaunchAnimator
 import com.android.systemui.broadcast.BroadcastDispatcher
 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.shared.system.SysUiStatsLog
 import com.android.systemui.settings.UserTracker
+import com.android.systemui.shared.system.SysUiStatsLog
 import com.android.systemui.statusbar.phone.SystemUIDialog
 import com.android.systemui.util.DeviceConfigProxy
 import com.android.systemui.util.indentIfPossible
@@ -81,6 +83,7 @@
 ) : IForegroundServiceObserver.Stub(), Dumpable {
 
     companion object {
+        private const val INTERACTION_JANK_TAG = "active_background_apps"
         private val LOG_TAG = FgsManagerController::class.java.simpleName
         private const val DEFAULT_TASK_MANAGER_ENABLED = true
         private const val DEFAULT_TASK_MANAGER_SHOW_FOOTER_DOT = false
@@ -153,31 +156,38 @@
 
             currentProfileIds.addAll(userTracker.userProfiles.map { it.id })
 
-            deviceConfigProxy.addOnPropertiesChangedListener(NAMESPACE_SYSTEMUI,
-                    backgroundExecutor) {
+            deviceConfigProxy.addOnPropertiesChangedListener(
+                NAMESPACE_SYSTEMUI,
+                backgroundExecutor
+            ) {
                 isAvailable = it.getBoolean(TASK_MANAGER_ENABLED, isAvailable)
                 showFooterDot =
-                        it.getBoolean(TASK_MANAGER_SHOW_FOOTER_DOT, showFooterDot)
+                    it.getBoolean(TASK_MANAGER_SHOW_FOOTER_DOT, showFooterDot)
             }
 
-            isAvailable = deviceConfigProxy.getBoolean(NAMESPACE_SYSTEMUI,
-                    TASK_MANAGER_ENABLED, DEFAULT_TASK_MANAGER_ENABLED)
-            showFooterDot = deviceConfigProxy.getBoolean(NAMESPACE_SYSTEMUI,
-                    TASK_MANAGER_SHOW_FOOTER_DOT, DEFAULT_TASK_MANAGER_SHOW_FOOTER_DOT)
+            isAvailable = deviceConfigProxy.getBoolean(
+                NAMESPACE_SYSTEMUI,
+                TASK_MANAGER_ENABLED, DEFAULT_TASK_MANAGER_ENABLED
+            )
+            showFooterDot = deviceConfigProxy.getBoolean(
+                NAMESPACE_SYSTEMUI,
+                TASK_MANAGER_SHOW_FOOTER_DOT, DEFAULT_TASK_MANAGER_SHOW_FOOTER_DOT
+            )
 
             dumpManager.registerDumpable(this)
 
             broadcastDispatcher.registerReceiver(
-                    object : BroadcastReceiver() {
-                        override fun onReceive(context: Context, intent: Intent) {
-                            if (intent.action == Intent.ACTION_SHOW_FOREGROUND_SERVICE_MANAGER) {
-                                showDialog(null)
-                            }
+                object : BroadcastReceiver() {
+                    override fun onReceive(context: Context, intent: Intent) {
+                        if (intent.action == Intent.ACTION_SHOW_FOREGROUND_SERVICE_MANAGER) {
+                            showDialog(null)
                         }
-                    },
-                    IntentFilter(Intent.ACTION_SHOW_FOREGROUND_SERVICE_MANAGER),
-                    executor = mainExecutor,
-                    flags = Context.RECEIVER_NOT_EXPORTED)
+                    }
+                },
+                IntentFilter(Intent.ACTION_SHOW_FOREGROUND_SERVICE_MANAGER),
+                executor = mainExecutor,
+                flags = Context.RECEIVER_NOT_EXPORTED
+            )
 
             initialized = true
         }
@@ -193,10 +203,12 @@
             val userPackageKey = UserPackage(userId, packageName)
             if (isForeground) {
                 runningServiceTokens.getOrPut(userPackageKey) { StartTimeAndTokens(systemClock) }
-                        .addToken(token)
+                    .addToken(token)
             } else {
                 if (runningServiceTokens[userPackageKey]?.also {
-                            it.removeToken(token) }?.isEmpty() == true) {
+                    it.removeToken(token)
+                }?.isEmpty() == true
+                ) {
                     runningServiceTokens.remove(userPackageKey)
                 }
             }
@@ -209,7 +221,7 @@
 
     @GuardedBy("lock")
     val onNumberOfPackagesChangedListeners: MutableSet<OnNumberOfPackagesChangedListener> =
-            mutableSetOf()
+        mutableSetOf()
 
     @GuardedBy("lock")
     val onDialogDismissedListeners: MutableSet<OnDialogDismissedListener> = mutableSetOf()
@@ -284,7 +296,7 @@
                 recyclerView.adapter = appListAdapter
 
                 val topSpacing = dialogContext.resources
-                        .getDimensionPixelSize(R.dimen.fgs_manager_list_top_spacing)
+                    .getDimensionPixelSize(R.dimen.fgs_manager_list_top_spacing)
                 dialog.setView(recyclerView, 0, topSpacing, 0, 0)
 
                 this.dialog = dialog
@@ -302,7 +314,15 @@
 
                 mainExecutor.execute {
                     viewLaunchedFrom
-                            ?.let { dialogLaunchAnimator.showFromView(dialog, it) } ?: dialog.show()
+                        ?.let {
+                            dialogLaunchAnimator.showFromView(
+                                dialog, it,
+                                cuj = DialogCuj(
+                                    InteractionJankMonitor.CUJ_SHADE_DIALOG_OPEN,
+                                    INTERACTION_JANK_TAG
+                                )
+                            )
+                        } ?: dialog.show()
                 }
 
                 backgroundExecutor.execute {
@@ -329,11 +349,14 @@
 
         addedPackages.forEach {
             val ai = packageManager.getApplicationInfoAsUser(it.packageName, 0, it.userId)
-            runningApps[it] = RunningApp(it.userId, it.packageName,
-                    runningServiceTokens[it]!!.startTime, it.uiControl,
-                    packageManager.getApplicationLabel(ai),
-                    packageManager.getUserBadgedIcon(
-                            packageManager.getApplicationIcon(ai), UserHandle.of(it.userId)))
+            runningApps[it] = RunningApp(
+                it.userId, it.packageName,
+                runningServiceTokens[it]!!.startTime, it.uiControl,
+                packageManager.getApplicationLabel(ai),
+                packageManager.getUserBadgedIcon(
+                    packageManager.getApplicationIcon(ai), UserHandle.of(it.userId)
+                )
+            )
             logEvent(stopped = false, it.packageName, it.userId, runningApps[it]!!.timeStarted)
         }
 
@@ -349,7 +372,7 @@
 
         mainExecutor.execute {
             appListAdapter
-                    .setData(runningApps.values.toList().sortedByDescending { it.timeStarted })
+                .setData(runningApps.values.toList().sortedByDescending { it.timeStarted })
         }
     }
 
@@ -367,8 +390,10 @@
         }
         backgroundExecutor.execute {
             val uid = packageManager.getPackageUidAsUser(packageName, userId)
-            SysUiStatsLog.write(SysUiStatsLog.TASK_MANAGER_EVENT_REPORTED, uid, event,
-                    timeLogged - timeStarted)
+            SysUiStatsLog.write(
+                SysUiStatsLog.TASK_MANAGER_EVENT_REPORTED, uid, event,
+                timeLogged - timeStarted
+            )
         }
     }
 
@@ -379,8 +404,10 @@
         private var data: List<RunningApp> = listOf()
 
         override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AppItemViewHolder {
-            return AppItemViewHolder(LayoutInflater.from(parent.context)
-                    .inflate(R.layout.fgs_manager_app_item, parent, false))
+            return AppItemViewHolder(
+                LayoutInflater.from(parent.context)
+                    .inflate(R.layout.fgs_manager_app_item, parent, false)
+            )
         }
 
         override fun onBindViewHolder(holder: AppItemViewHolder, position: Int) {
@@ -392,8 +419,9 @@
                 iconView.setImageDrawable(runningApp.icon)
                 appLabelView.text = runningApp.appLabel
                 durationView.text = DateUtils.formatDuration(
-                        max(systemClock.elapsedRealtime() - runningApp.timeStarted, 60000),
-                        DateUtils.LENGTH_MEDIUM)
+                    max(systemClock.elapsedRealtime() - runningApp.timeStarted, 60000),
+                    DateUtils.LENGTH_MEDIUM
+                )
                 stopButton.setOnClickListener {
                     stopButton.setText(R.string.fgs_manager_app_item_stop_button_stopped_label)
                     stopPackage(runningApp.userId, runningApp.packageName, runningApp.timeStarted)
@@ -431,12 +459,12 @@
                 }
 
                 override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int):
-                        Boolean {
+                    Boolean {
                     return oldData[oldItemPosition] == newData[newItemPosition]
                 }
 
                 override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int):
-                        Boolean {
+                    Boolean {
                     return oldData[oldItemPosition].stopped == newData[newItemPosition].stopped
                 }
             }).dispatchUpdatesTo(this)
@@ -462,7 +490,7 @@
 
         fun updateUiControl() {
             backgroundRestrictionExemptionReason =
-                    activityManager.getBackgroundRestrictionExemptionReason(uid)
+                activityManager.getBackgroundRestrictionExemptionReason(uid)
             uiControl = when (backgroundRestrictionExemptionReason) {
                 PowerExemptionManager.REASON_SYSTEM_UID,
                 PowerExemptionManager.REASON_DEVICE_DEMO_MODE -> UIControl.HIDE_ENTRY
@@ -523,8 +551,10 @@
         fun dump(pw: PrintWriter) {
             pw.println("StartTimeAndTokens: [")
             pw.indentIfPossible {
-                pw.println("startTime=$startTime (time running =" +
-                        " ${systemClock.elapsedRealtime() - startTime}ms)")
+                pw.println(
+                    "startTime=$startTime (time running =" +
+                        " ${systemClock.elapsedRealtime() - startTime}ms)"
+                )
                 pw.println("tokens: [")
                 pw.indentIfPossible {
                     for (token in tokens) {
@@ -572,8 +602,10 @@
             pw.indentIfPossible {
                 pw.println("userId=$userId")
                 pw.println("packageName=$packageName")
-                pw.println("timeStarted=$timeStarted (time since start =" +
-                        " ${systemClock.elapsedRealtime() - timeStarted}ms)")
+                pw.println(
+                    "timeStarted=$timeStarted (time since start =" +
+                        " ${systemClock.elapsedRealtime() - timeStarted}ms)"
+                )
                 pw.println("uiControl=$uiControl")
                 pw.println("appLabel=$appLabel")
                 pw.println("icon=$icon")
diff --git a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java
index ce50ddf..0697133 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java
@@ -15,6 +15,7 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
 import android.view.animation.Interpolator;
 import android.view.animation.OvershootInterpolator;
@@ -283,6 +284,7 @@
                 .inflate(R.layout.qs_paged_page, this, false);
         page.setMinRows(mMinRows);
         page.setMaxColumns(mMaxColumns);
+        page.setSelected(false);
         return page;
     }
 
@@ -625,6 +627,16 @@
         }
     }
 
+    @Override
+    public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+        super.onInitializeAccessibilityEvent(event);
+        if (mAdapter != null && mAdapter.getCount() > 0) {
+            event.setItemCount(mAdapter.getCount());
+            event.setFromIndex(getCurrentPageNumber());
+            event.setToIndex(getCurrentPageNumber());
+        }
+    }
+
     private static Animator setupBounceAnimator(View view, int ordinal) {
         view.setAlpha(0f);
         view.setScaleX(0f);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFgsManagerFooter.java b/packages/SystemUI/src/com/android/systemui/qs/QSFgsManagerFooter.java
index ba6b1dd..875493d7 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSFgsManagerFooter.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSFgsManagerFooter.java
@@ -17,6 +17,7 @@
 package com.android.systemui.qs;
 
 import static com.android.systemui.qs.dagger.QSFragmentModule.QS_FGS_MANAGER_FOOTER_VIEW;
+import static com.android.systemui.util.PluralMessageFormaterKt.icuMessageFormat;
 
 import android.content.Context;
 import android.view.View;
@@ -141,8 +142,8 @@
 
     public void handleRefreshState() {
         mMainExecutor.execute(() -> {
-            CharSequence text = mContext.getResources().getQuantityString(
-                    R.plurals.fgs_manager_footer_label, mNumPackages, mNumPackages);
+            CharSequence text = icuMessageFormat(mContext.getResources(),
+                    R.string.fgs_manager_footer_label, mNumPackages);
             mFooterText.setText(text);
             mNumberView.setText(Integer.toString(mNumPackages));
             mNumberView.setContentDescription(text);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java
index d03a2e5..8c5e6cc 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java
@@ -57,7 +57,6 @@
 import com.android.systemui.statusbar.policy.BrightnessMirrorController;
 import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
 import com.android.systemui.util.LifecycleFragment;
-import com.android.systemui.util.Utils;
 
 import java.io.PrintWriter;
 import java.util.Arrays;
@@ -624,7 +623,6 @@
         if (mQSAnimator != null) {
             mQSAnimator.setPosition(expansion);
         }
-        updateMediaPositions();
     }
 
     private void setAlphaAnimationProgress(float progress) {
@@ -644,10 +642,11 @@
         if (mLastQSExpansion == 1.0f) {
             // Fully expanded, let's set the layout bounds as clip bounds. This is necessary because
             // it's a scrollview and otherwise wouldn't be clipped. However, we set the horizontal
-            // bounds so the pages go to the ends of QSContainerImpl
-            ViewGroup.MarginLayoutParams lp =
-                    (ViewGroup.MarginLayoutParams) mQSPanelScrollView.getLayoutParams();
-            mQsBounds.set(-lp.leftMargin, 0, mQSPanelScrollView.getWidth() + lp.rightMargin,
+            // bounds so the pages go to the ends of QSContainerImpl (most cases) or its parent
+            // (large screen portrait)
+            int sideMargin = getResources().getDimensionPixelSize(
+                    R.dimen.qs_tiles_page_horizontal_margin) * 2;
+            mQsBounds.set(-sideMargin, 0, mQSPanelScrollView.getWidth() + sideMargin,
                     mQSPanelScrollView.getHeight());
         }
         mQSPanelScrollView.setClipBounds(mQsBounds);
@@ -660,54 +659,6 @@
                         - mQSPanelScrollView.getPaddingBottom());
     }
 
-    private void updateMediaPositions() {
-        if (Utils.useQsMediaPlayer(getContext())) {
-            mContainer.getLocationOnScreen(mTmpLocation);
-            float absoluteBottomPosition = mTmpLocation[1] + mContainer.getHeight();
-            // The Media can be scrolled off screen by default, let's offset it
-            float expandedMediaPosition = absoluteBottomPosition - mQSPanelScrollView.getScrollY()
-                    + mQSPanelScrollView.getScrollRange();
-            pinToBottom(expandedMediaPosition, mQsMediaHost, true /* expanded */);
-            // The expanded media host should never move above the laid out position
-            pinToBottom(absoluteBottomPosition, mQqsMediaHost, false /* expanded */);
-        }
-    }
-
-    private void pinToBottom(float absoluteBottomPosition, MediaHost mediaHost, boolean expanded) {
-        View hostView = mediaHost.getHostView();
-        // On keyguard we cross-fade to expanded, so no need to pin it.
-        // If the collapsed qs isn't visible, we also just keep it at the laid out position.
-        if (mLastQSExpansion > 0 && !isKeyguardState() && mQqsMediaHost.getVisible()) {
-            float targetPosition = absoluteBottomPosition - getTotalBottomMargin(hostView)
-                    - hostView.getHeight();
-            float currentPosition = mediaHost.getCurrentBounds().top
-                    - hostView.getTranslationY();
-            float translationY = targetPosition - currentPosition;
-            if (expanded) {
-                // Never go below the laid out position. This is necessary since the qs panel can
-                // change in height and we don't want to ever go below it's position
-                translationY = Math.min(translationY, 0);
-            } else {
-                translationY = Math.max(translationY, 0);
-            }
-            hostView.setTranslationY(translationY);
-        } else {
-            hostView.setTranslationY(0);
-        }
-    }
-
-    private float getTotalBottomMargin(View startView) {
-        int result = 0;
-        View child = startView;
-        View parent = (View) startView.getParent();
-        while (!(parent instanceof QSContainerImpl) && parent != null) {
-            result += parent.getHeight() - child.getBottom();
-            child = parent;
-            parent = (View) parent.getParent();
-        }
-        return result;
-    }
-
     private boolean headerWillBeAnimating() {
         return mState == StatusBarState.KEYGUARD && mShowCollapsedOnKeyguard
                 && !isKeyguardState();
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSSecurityFooter.java b/packages/SystemUI/src/com/android/systemui/qs/QSSecurityFooter.java
index 584de6e..87fcce4 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSSecurityFooter.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSSecurityFooter.java
@@ -80,9 +80,11 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
 
+import com.android.internal.jank.InteractionJankMonitor;
 import com.android.internal.util.FrameworkStatsLog;
 import com.android.systemui.FontSizeUtils;
 import com.android.systemui.R;
+import com.android.systemui.animation.DialogCuj;
 import com.android.systemui.animation.DialogLaunchAnimator;
 import com.android.systemui.broadcast.BroadcastDispatcher;
 import com.android.systemui.dagger.qualifiers.Background;
@@ -108,6 +110,8 @@
     protected static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
     private static final boolean DEBUG_FORCE_VISIBLE = false;
 
+    private static final String INTERACTION_JANK_TAG = "managed_device_info";
+
     private final TextView mFooterText;
     private final ImageView mPrimaryFooterIcon;
     private Context mContext;
@@ -557,7 +561,8 @@
 
                 mDialog.setView(view);
                 if (mView.isAggregatedVisible()) {
-                    mDialogLaunchAnimator.showFromView(mDialog, mView);
+                    mDialogLaunchAnimator.showFromView(mDialog, mView, new DialogCuj(
+                            InteractionJankMonitor.CUJ_SHADE_DIALOG_OPEN, INTERACTION_JANK_TAG));
                 } else {
                     mDialog.show();
                 }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java b/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java
index fbdabc7..4552abd 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java
@@ -19,8 +19,6 @@
 import android.content.Intent;
 import android.content.res.Resources;
 import android.os.Build;
-import android.os.Handler;
-import android.os.Looper;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.provider.Settings.Secure;
@@ -28,6 +26,7 @@
 import android.util.ArraySet;
 import android.util.Log;
 
+import androidx.annotation.MainThread;
 import androidx.annotation.Nullable;
 
 import com.android.internal.logging.InstanceId;
@@ -35,9 +34,7 @@
 import com.android.internal.logging.UiEventLogger;
 import com.android.systemui.Dumpable;
 import com.android.systemui.R;
-import com.android.systemui.broadcast.BroadcastDispatcher;
 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.plugins.PluginListener;
@@ -68,12 +65,20 @@
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
+import java.util.concurrent.Executor;
 import java.util.function.Predicate;
 
 import javax.inject.Inject;
 import javax.inject.Provider;
 
-/** Platform implementation of the quick settings tile host **/
+/** Platform implementation of the quick settings tile host
+ *
+ * This class keeps track of the set of current tiles and is the in memory source of truth
+ * (ground truth is kept in {@link Secure#QS_TILES}). When the ground truth changes,
+ * {@link #onTuningChanged} will be called and the tiles will be re-created as needed.
+ *
+ * This class also provides the interface for adding/removing/changing tiles.
+ */
 @SysUISingleton
 public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, Dumpable {
     private static final String TAG = "QSTileHost";
@@ -89,11 +94,11 @@
     private final TunerService mTunerService;
     private final PluginManager mPluginManager;
     private final DumpManager mDumpManager;
-    private final BroadcastDispatcher mBroadcastDispatcher;
     private final QSLogger mQSLogger;
     private final UiEventLogger mUiEventLogger;
     private final InstanceIdSequence mInstanceIdSequence;
     private final CustomTileStatePersister mCustomTileStatePersister;
+    private final Executor mMainExecutor;
 
     private final List<Callback> mCallbacks = new ArrayList<>();
     @Nullable
@@ -113,13 +118,11 @@
     public QSTileHost(Context context,
             StatusBarIconController iconController,
             QSFactory defaultFactory,
-            @Main Handler mainHandler,
-            @Background Looper bgLooper,
+            @Main Executor mainExecutor,
             PluginManager pluginManager,
             TunerService tunerService,
             Provider<AutoTileManager> autoTiles,
             DumpManager dumpManager,
-            BroadcastDispatcher broadcastDispatcher,
             Optional<CentralSurfaces> centralSurfacesOptional,
             QSLogger qsLogger,
             UiEventLogger uiEventLogger,
@@ -137,7 +140,7 @@
         mDumpManager = dumpManager;
         mQSLogger = qsLogger;
         mUiEventLogger = uiEventLogger;
-        mBroadcastDispatcher = broadcastDispatcher;
+        mMainExecutor = mainExecutor;
         mTileServiceRequestController = tileServiceRequestControllerBuilder.create(this);
         mTileLifeCycleManagerFactory = tileLifecycleManagerFactory;
 
@@ -151,7 +154,7 @@
         mSecureSettings = secureSettings;
         mCustomTileStatePersister = customTileStatePersister;
 
-        mainHandler.post(() -> {
+        mainExecutor.execute(() -> {
             // This is technically a hack to avoid circular dependency of
             // QSTileHost -> XXXTile -> QSTileHost. Posting ensures creation
             // finishes before creating any tiles.
@@ -258,6 +261,33 @@
         return mTileSpecs.indexOf(spec);
     }
 
+    /**
+     * Whenever the Secure Setting keeping track of the current tiles changes (or upon start) this
+     * will be called with the new value of the setting.
+     *
+     * This method will do the following:
+     * <ol>
+     *     <li>Destroy any existing tile that's not one of the current tiles (in the setting)</li>
+     *     <li>Create new tiles for those that don't already exist. If this tiles end up being
+     *         not available, they'll also be destroyed.</li>
+     *     <li>Save the resolved list of tiles (current tiles that are available) into the setting.
+     *         This means that after this call ends, the tiles in the Setting, {@link #mTileSpecs},
+     *         and visible tiles ({@link #mTiles}) must match.
+     *         </li>
+     * </ol>
+     *
+     * Additionally, if the user has changed, it'll do the following:
+     * <ul>
+     *     <li>Change the user for SystemUI tiles: {@link QSTile#userSwitch}.</li>
+     *     <li>Destroy any {@link CustomTile} and recreate it for the new user.</li>
+     * </ul>
+     *
+     * This happens in main thread as {@link com.android.systemui.tuner.TunerServiceImpl} dispatches
+     * in main thread.
+     *
+     * @see QSTile#isAvailable
+     */
+    @MainThread
     @Override
     public void onTuningChanged(String key, String newValue) {
         if (!TILES_SETTING.equals(key)) {
@@ -330,34 +360,44 @@
         mCurrentUser = currentUser;
         List<String> currentSpecs = new ArrayList<>(mTileSpecs);
         mTileSpecs.clear();
-        mTileSpecs.addAll(tileSpecs);
+        mTileSpecs.addAll(newTiles.keySet()); // Only add the valid (available) tiles.
         mTiles.clear();
         mTiles.putAll(newTiles);
         if (newTiles.isEmpty() && !tileSpecs.isEmpty()) {
             // If we didn't manage to create any tiles, set it to empty (default)
             Log.d(TAG, "No valid tiles on tuning changed. Setting to default.");
-            changeTiles(currentSpecs, loadTileSpecs(mContext, ""));
+            changeTilesByUser(currentSpecs, loadTileSpecs(mContext, ""));
         } else {
+            String resolvedTiles = TextUtils.join(",", mTileSpecs);
+            if (!resolvedTiles.equals(newValue)) {
+                // If the resolved tiles (those we actually ended up with) are different than
+                // the ones that are in the setting, update the Setting.
+                saveTilesToSettings(mTileSpecs);
+            }
             for (int i = 0; i < mCallbacks.size(); i++) {
                 mCallbacks.get(i).onTilesChanged();
             }
         }
     }
 
+    /**
+     * Only use with [CustomTile] if the tile doesn't exist anymore (and therefore doesn't need
+     * its lifecycle terminated).
+     */
     @Override
     public void removeTile(String spec) {
-        changeTileSpecs(tileSpecs-> tileSpecs.remove(spec));
+        mMainExecutor.execute(() -> changeTileSpecs(tileSpecs-> tileSpecs.remove(spec)));
     }
 
     /**
      * Remove many tiles at once.
      *
-     * It will only save to settings once (as opposed to {@link QSTileHost#removeTile} called
+     * It will only save to settings once (as opposed to {@link QSTileHost#removeTileByUser} called
      * multiple times).
      */
     @Override
     public void removeTiles(Collection<String> specs) {
-        changeTileSpecs(tileSpecs -> tileSpecs.removeAll(specs));
+        mMainExecutor.execute(() -> changeTileSpecs(tileSpecs -> tileSpecs.removeAll(specs)));
     }
 
     @Override
@@ -381,27 +421,29 @@
      * @param requestPosition -1 for end, 0 for beginning, or X for insertion at position X
      */
     public void addTile(String spec, int requestPosition) {
-        if (spec.equals("work")) Log.wtfStack(TAG, "Adding work tile");
-        changeTileSpecs(tileSpecs -> {
-            if (tileSpecs.contains(spec)) return false;
+        mMainExecutor.execute(() ->
+                changeTileSpecs(tileSpecs -> {
+                    if (tileSpecs.contains(spec)) return false;
 
-            int size = tileSpecs.size();
-            if (requestPosition == POSITION_AT_END || requestPosition >= size) {
-                tileSpecs.add(spec);
-            } else {
-                tileSpecs.add(requestPosition, spec);
-            }
-            return true;
-        });
+                    int size = tileSpecs.size();
+                    if (requestPosition == POSITION_AT_END || requestPosition >= size) {
+                        tileSpecs.add(spec);
+                    } else {
+                        tileSpecs.add(requestPosition, spec);
+                    }
+                    return true;
+                })
+        );
     }
 
-    void saveTilesToSettings(List<String> tileSpecs) {
-        if (tileSpecs.contains("work")) Log.wtfStack(TAG, "Saving work tile");
+    @MainThread
+    private void saveTilesToSettings(List<String> tileSpecs) {
         mSecureSettings.putStringForUser(TILES_SETTING, TextUtils.join(",", tileSpecs),
                 null /* tag */, false /* default */, mCurrentUser,
                 true /* overrideable by restore */);
     }
 
+    @MainThread
     private void changeTileSpecs(Predicate<List<String>> changeFunction) {
         final String setting = mSecureSettings.getStringForUser(TILES_SETTING, mCurrentUser);
         final List<String> tileSpecs = loadTileSpecs(mContext, setting);
@@ -421,29 +463,32 @@
      */
     public void addTile(ComponentName tile, boolean end) {
         String spec = CustomTile.toSpec(tile);
-        if (!mTileSpecs.contains(spec)) {
-            List<String> newSpecs = new ArrayList<>(mTileSpecs);
-            if (end) {
-                newSpecs.add(spec);
-            } else {
-                newSpecs.add(0, spec);
-            }
-            changeTiles(mTileSpecs, newSpecs);
-        }
+        addTile(spec, end ? POSITION_AT_END : 0);
     }
 
-    public void removeTile(ComponentName tile) {
-        List<String> newSpecs = new ArrayList<>(mTileSpecs);
-        newSpecs.remove(CustomTile.toSpec(tile));
-        changeTiles(mTileSpecs, newSpecs);
+    /**
+     * This will call through {@link #changeTilesByUser}. It should only be used when a tile is
+     * removed by a <b>user action</b> like {@code adb}.
+     */
+    public void removeTileByUser(ComponentName tile) {
+        mMainExecutor.execute(() -> {
+            List<String> newSpecs = new ArrayList<>(mTileSpecs);
+            if (newSpecs.remove(CustomTile.toSpec(tile))) {
+                changeTilesByUser(mTileSpecs, newSpecs);
+            }
+        });
     }
 
     /**
      * Change the tiles triggered by the user editing.
      * <p>
      * This is not called on device start, or on user change.
+     *
+     * {@link android.service.quicksettings.TileService#onTileRemoved} will be called for tiles
+     * that are removed.
      */
-    public void changeTiles(List<String> previousTiles, List<String> newTiles) {
+    @MainThread
+    public void changeTilesByUser(List<String> previousTiles, List<String> newTiles) {
         final List<String> copy = new ArrayList<>(previousTiles);
         final int NP = copy.size();
         for (int i = 0; i < NP; i++) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java
index ec0d081..eeb1010 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeaderController.java
@@ -134,18 +134,9 @@
         mQSCarrierGroupController
                 .setOnSingleCarrierChangedListener(mView::setIsSingleCarrier);
 
-        List<String> rssiIgnoredSlots;
-
-        if (mFeatureFlags.isEnabled(Flags.COMBINED_STATUS_BAR_SIGNAL_ICONS)) {
-            rssiIgnoredSlots = List.of(
-                    getResources().getString(com.android.internal.R.string.status_bar_no_calling),
-                    getResources().getString(com.android.internal.R.string.status_bar_call_strength)
-            );
-        } else {
-            rssiIgnoredSlots = List.of(
-                    getResources().getString(com.android.internal.R.string.status_bar_mobile)
-            );
-        }
+        List<String> rssiIgnoredSlots = List.of(
+                getResources().getString(com.android.internal.R.string.status_bar_mobile)
+        );
 
         mView.onAttach(mIconManager, mQSExpansionPathInterpolator, rssiIgnoredSlots,
                 mInsetsProvider, mFeatureFlags.isEnabled(Flags.COMBINED_QS_HEADERS));
diff --git a/packages/SystemUI/src/com/android/systemui/qs/carrier/CellSignalState.kt b/packages/SystemUI/src/com/android/systemui/qs/carrier/CellSignalState.kt
index 2dac639..e925b54 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/carrier/CellSignalState.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/carrier/CellSignalState.kt
@@ -27,7 +27,6 @@
     @JvmField val contentDescription: String? = null,
     @JvmField val typeContentDescription: String? = null,
     @JvmField val roaming: Boolean = false,
-    @JvmField val providerModelBehavior: Boolean = false
 ) {
     /**
      * Changes the visibility of this state by returning a copy with the visibility changed.
@@ -41,4 +40,4 @@
         if (this.visible == visible) return this
         else return copy(visible = visible)
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/carrier/QSCarrier.java b/packages/SystemUI/src/com/android/systemui/qs/carrier/QSCarrier.java
index 592da65..703b95a 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/carrier/QSCarrier.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/carrier/QSCarrier.java
@@ -45,7 +45,7 @@
     private View mSpacer;
     @Nullable
     private CellSignalState mLastSignalState;
-    private boolean mProviderModelInitialized = false;
+    private boolean mMobileSignalInitialized = false;
     private boolean mIsSingleCarrier;
 
     public QSCarrier(Context context) {
@@ -96,35 +96,25 @@
             mMobileRoaming.setImageTintList(colorStateList);
             mMobileSignal.setImageTintList(colorStateList);
 
-            if (state.providerModelBehavior) {
-                if (!mProviderModelInitialized) {
-                    mProviderModelInitialized = true;
-                    mMobileSignal.setImageDrawable(
-                            mContext.getDrawable(R.drawable.ic_qs_no_calling_sms));
-                }
-                mMobileSignal.setImageDrawable(mContext.getDrawable(state.mobileSignalIconId));
-                mMobileSignal.setContentDescription(state.contentDescription);
-            } else {
-                if (!mProviderModelInitialized) {
-                    mProviderModelInitialized = true;
-                    mMobileSignal.setImageDrawable(new SignalDrawable(mContext));
-                }
-                mMobileSignal.setImageLevel(state.mobileSignalIconId);
-                StringBuilder contentDescription = new StringBuilder();
-                if (state.contentDescription != null) {
-                    contentDescription.append(state.contentDescription).append(", ");
-                }
-                if (state.roaming) {
-                    contentDescription
-                            .append(mContext.getString(R.string.data_connection_roaming))
-                            .append(", ");
-                }
-                // TODO: show mobile data off/no internet text for 5 seconds before carrier text
-                if (hasValidTypeContentDescription(state.typeContentDescription)) {
-                    contentDescription.append(state.typeContentDescription);
-                }
-                mMobileSignal.setContentDescription(contentDescription);
+            if (!mMobileSignalInitialized) {
+                mMobileSignalInitialized = true;
+                mMobileSignal.setImageDrawable(new SignalDrawable(mContext));
             }
+            mMobileSignal.setImageLevel(state.mobileSignalIconId);
+            StringBuilder contentDescription = new StringBuilder();
+            if (state.contentDescription != null) {
+                contentDescription.append(state.contentDescription).append(", ");
+            }
+            if (state.roaming) {
+                contentDescription
+                        .append(mContext.getString(R.string.data_connection_roaming))
+                        .append(", ");
+            }
+            // TODO: show mobile data off/no internet text for 5 seconds before carrier text
+            if (hasValidTypeContentDescription(state.typeContentDescription)) {
+                contentDescription.append(state.typeContentDescription);
+            }
+            mMobileSignal.setContentDescription(contentDescription);
         }
         return true;
     }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/carrier/QSCarrierGroupController.java b/packages/SystemUI/src/com/android/systemui/qs/carrier/QSCarrierGroupController.java
index 6908e5a..6a8bf75 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/carrier/QSCarrierGroupController.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/carrier/QSCarrierGroupController.java
@@ -42,10 +42,7 @@
 import com.android.systemui.dagger.SysUISingleton;
 import com.android.systemui.dagger.qualifiers.Background;
 import com.android.systemui.dagger.qualifiers.Main;
-import com.android.systemui.flags.FeatureFlags;
-import com.android.systemui.flags.Flags;
 import com.android.systemui.plugins.ActivityStarter;
-import com.android.systemui.statusbar.connectivity.IconState;
 import com.android.systemui.statusbar.connectivity.MobileDataIndicators;
 import com.android.systemui.statusbar.connectivity.NetworkController;
 import com.android.systemui.statusbar.connectivity.SignalCallback;
@@ -78,7 +75,6 @@
     private QSCarrier[] mCarrierGroups = new QSCarrier[SIM_SLOTS];
     private int[] mLastSignalLevel = new int[SIM_SLOTS];
     private String[] mLastSignalLevelDescription = new String[SIM_SLOTS];
-    private final boolean mProviderModel;
     private final CarrierConfigTracker mCarrierConfigTracker;
 
     private boolean mIsSingleCarrier;
@@ -90,9 +86,6 @@
     private final SignalCallback mSignalCallback = new SignalCallback() {
                 @Override
                 public void setMobileDataIndicators(@NonNull MobileDataIndicators indicators) {
-                    if (mProviderModel) {
-                        return;
-                    }
                     int slotIndex = getSlotIndex(indicators.subId);
                     if (slotIndex >= SIM_SLOTS) {
                         Log.w(TAG, "setMobileDataIndicators - slot: " + slotIndex);
@@ -107,91 +100,12 @@
                             indicators.statusIcon.icon,
                             indicators.statusIcon.contentDescription,
                             indicators.typeContentDescription.toString(),
-                            indicators.roaming,
-                            mProviderModel
+                            indicators.roaming
                     );
                     mMainHandler.obtainMessage(H.MSG_UPDATE_STATE).sendToTarget();
                 }
 
                 @Override
-                public void setCallIndicator(@NonNull IconState statusIcon, int subId) {
-                    if (!mProviderModel) {
-                        return;
-                    }
-                    int slotIndex = getSlotIndex(subId);
-                    if (slotIndex >= SIM_SLOTS) {
-                        Log.w(TAG, "setMobileDataIndicators - slot: " + slotIndex);
-                        return;
-                    }
-                    if (slotIndex == SubscriptionManager.INVALID_SIM_SLOT_INDEX) {
-                        Log.e(TAG, "Invalid SIM slot index for subscription: " + subId);
-                        return;
-                    }
-
-                    boolean displayCallStrengthIcon =
-                            mCarrierConfigTracker.getCallStrengthConfig(subId);
-
-                    if (statusIcon.icon == R.drawable.ic_qs_no_calling_sms) {
-                        if (statusIcon.visible) {
-                            mInfos[slotIndex] = new CellSignalState(
-                                    true,
-                                    statusIcon.icon,
-                                    statusIcon.contentDescription,
-                                    "",
-                                    false,
-                                    mProviderModel);
-                        } else {
-                            // Whenever the no Calling & SMS state is cleared, switched to the last
-                            // known call strength icon.
-                            if (displayCallStrengthIcon) {
-                                mInfos[slotIndex] = new CellSignalState(
-                                        true,
-                                        mLastSignalLevel[slotIndex],
-                                        mLastSignalLevelDescription[slotIndex],
-                                        "",
-                                        false,
-                                        mProviderModel);
-                            } else {
-                                mInfos[slotIndex] = new CellSignalState(
-                                        true,
-                                        R.drawable.ic_qs_sim_card,
-                                        "",
-                                        "",
-                                        false,
-                                        mProviderModel);
-                            }
-                        }
-                        mMainHandler.obtainMessage(H.MSG_UPDATE_STATE).sendToTarget();
-                    } else {
-                        mLastSignalLevel[slotIndex] = statusIcon.icon;
-                        mLastSignalLevelDescription[slotIndex] = statusIcon.contentDescription;
-                        // Only Shows the call strength icon when the no Calling & SMS icon is not
-                        // shown.
-                        if (mInfos[slotIndex].mobileSignalIconId
-                                != R.drawable.ic_qs_no_calling_sms) {
-                            if (displayCallStrengthIcon) {
-                                mInfos[slotIndex] = new CellSignalState(
-                                        true,
-                                        statusIcon.icon,
-                                        statusIcon.contentDescription,
-                                        "",
-                                        false,
-                                        mProviderModel);
-                            } else {
-                                mInfos[slotIndex] = new CellSignalState(
-                                        true,
-                                        R.drawable.ic_qs_sim_card,
-                                        "",
-                                        "",
-                                        false,
-                                        mProviderModel);
-                            }
-                            mMainHandler.obtainMessage(H.MSG_UPDATE_STATE).sendToTarget();
-                        }
-                    }
-                }
-
-                @Override
                 public void setNoSims(boolean hasNoSims, boolean simDetected) {
                     if (hasNoSims) {
                         for (int i = 0; i < SIM_SLOTS; i++) {
@@ -219,14 +133,8 @@
             @Background Handler bgHandler, @Main Looper mainLooper,
             NetworkController networkController,
             CarrierTextManager.Builder carrierTextManagerBuilder, Context context,
-            CarrierConfigTracker carrierConfigTracker, FeatureFlags featureFlags,
-            SlotIndexResolver slotIndexResolver) {
+            CarrierConfigTracker carrierConfigTracker, SlotIndexResolver slotIndexResolver) {
 
-        if (featureFlags.isEnabled(Flags.COMBINED_STATUS_BAR_SIGNAL_ICONS)) {
-            mProviderModel = true;
-        } else {
-            mProviderModel = false;
-        }
         mActivityStarter = activityStarter;
         mBgHandler = bgHandler;
         mNetworkController = networkController;
@@ -243,7 +151,7 @@
             mActivityStarter.postStartActivityDismissingKeyguard(
                     new Intent(Settings.ACTION_WIRELESS_SETTINGS), 0);
         };
-        view.setOnClickListener(onClickListener);
+
         mNoSimTextView = view.getNoSimTextView();
         mNoSimTextView.setOnClickListener(onClickListener);
         mMainHandler = new H(mainLooper, this::handleUpdateCarrierInfo, this::handleUpdateState);
@@ -262,8 +170,7 @@
                     R.drawable.ic_qs_no_calling_sms,
                     context.getText(AccessibilityContentDescriptions.NO_CALLING).toString(),
                     "",
-                    false,
-                    mProviderModel);
+                    false);
             mLastSignalLevel[i] = TelephonyIcons.MOBILE_CALL_STRENGTH_ICONS[0];
             mLastSignalLevelDescription[i] =
                     context.getText(AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH[0])
@@ -351,8 +258,7 @@
             for (int i = 0; i < SIM_SLOTS; i++) {
                 if (mInfos[i].visible
                         && mInfos[i].mobileSignalIconId == R.drawable.ic_qs_sim_card) {
-                    mInfos[i] = new CellSignalState(true, R.drawable.ic_blank, "", "", false,
-                            mProviderModel);
+                    mInfos[i] = new CellSignalState(true, R.drawable.ic_blank, "", "", false);
                 }
             }
         }
@@ -470,15 +376,13 @@
         private final CarrierTextManager.Builder mCarrierTextControllerBuilder;
         private final Context mContext;
         private final CarrierConfigTracker mCarrierConfigTracker;
-        private final FeatureFlags mFeatureFlags;
         private final SlotIndexResolver mSlotIndexResolver;
 
         @Inject
         public Builder(ActivityStarter activityStarter, @Background Handler handler,
                 @Main Looper looper, NetworkController networkController,
                 CarrierTextManager.Builder carrierTextControllerBuilder, Context context,
-                CarrierConfigTracker carrierConfigTracker, FeatureFlags featureFlags,
-                SlotIndexResolver slotIndexResolver) {
+                CarrierConfigTracker carrierConfigTracker, SlotIndexResolver slotIndexResolver) {
             mActivityStarter = activityStarter;
             mHandler = handler;
             mLooper = looper;
@@ -486,7 +390,6 @@
             mCarrierTextControllerBuilder = carrierTextControllerBuilder;
             mContext = context;
             mCarrierConfigTracker = carrierConfigTracker;
-            mFeatureFlags = featureFlags;
             mSlotIndexResolver = slotIndexResolver;
         }
 
@@ -498,7 +401,7 @@
         public QSCarrierGroupController build() {
             return new QSCarrierGroupController(mView, mActivityStarter, mHandler, mLooper,
                     mNetworkController, mCarrierTextControllerBuilder, mContext,
-                    mCarrierConfigTracker, mFeatureFlags, mSlotIndexResolver);
+                    mCarrierConfigTracker, mSlotIndexResolver);
         }
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java
index e52bfbd..d84b12c 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java
@@ -182,7 +182,7 @@
         for (int i = 1; i < mTiles.size() && mTiles.get(i) != null; i++) {
             newSpecs.add(mTiles.get(i).spec);
         }
-        host.changeTiles(mCurrentSpecs, newSpecs);
+        host.changeTilesByUser(mCurrentSpecs, newSpecs);
         mCurrentSpecs = newSpecs;
     }
 
@@ -200,7 +200,7 @@
     /** */
     public void resetTileSpecs(List<String> specs) {
         // Notify the host so the tiles get removed callbacks.
-        mHost.changeTiles(mCurrentSpecs, specs);
+        mHost.changeTilesByUser(mCurrentSpecs, specs);
         setTileSpecs(specs);
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileRequestDialog.kt b/packages/SystemUI/src/com/android/systemui/qs/external/TileRequestDialog.kt
index bd2f64b..6265b3c 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/external/TileRequestDialog.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileRequestDialog.kt
@@ -73,6 +73,7 @@
             icon = tileData.icon?.loadDrawable(context)?.let {
                 QSTileImpl.DrawableIcon(it)
             } ?: ResourceIcon.get(R.drawable.android)
+            contentDescription = label
         }
         tile.onStateChanged(state)
         tile.post {
@@ -95,4 +96,4 @@
         val label: CharSequence,
         val icon: Icon?
     )
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java b/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java
index bf565a8..cfc57db 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java
@@ -289,7 +289,7 @@
                 }
             }
 
-            mServices.getHost().removeTile(component);
+            mServices.getHost().removeTile(CustomTile.toSpec(component));
         }
     };
 }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java
index 1488231..a92c7e3 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java
@@ -39,6 +39,7 @@
 import com.android.systemui.qs.tiles.DataSaverTile;
 import com.android.systemui.qs.tiles.DeviceControlsTile;
 import com.android.systemui.qs.tiles.DndTile;
+import com.android.systemui.qs.tiles.DreamTile;
 import com.android.systemui.qs.tiles.FlashlightTile;
 import com.android.systemui.qs.tiles.HotspotTile;
 import com.android.systemui.qs.tiles.InternetTile;
@@ -96,6 +97,7 @@
     private final Provider<QuickAccessWalletTile> mQuickAccessWalletTileProvider;
     private final Provider<QRCodeScannerTile> mQRCodeScannerTileProvider;
     private final Provider<OneHandedModeTile> mOneHandedModeTileProvider;
+    private final Provider<DreamTile> mDreamTileProvider;
 
     private final Lazy<QSHost> mQsHostLazy;
     private final Provider<CustomTile.Builder> mCustomTileBuilderProvider;
@@ -132,7 +134,8 @@
             Provider<QuickAccessWalletTile> quickAccessWalletTileProvider,
             Provider<QRCodeScannerTile> qrCodeScannerTileProvider,
             Provider<OneHandedModeTile> oneHandedModeTileProvider,
-            Provider<ColorCorrectionTile> colorCorrectionTileProvider) {
+            Provider<ColorCorrectionTile> colorCorrectionTileProvider,
+            Provider<DreamTile> dreamTileProvider) {
         mQsHostLazy = qsHostLazy;
         mCustomTileBuilderProvider = customTileBuilderProvider;
 
@@ -165,6 +168,7 @@
         mQRCodeScannerTileProvider = qrCodeScannerTileProvider;
         mOneHandedModeTileProvider = oneHandedModeTileProvider;
         mColorCorrectionTileProvider = colorCorrectionTileProvider;
+        mDreamTileProvider = dreamTileProvider;
     }
 
     /** Creates a tile with a type based on {@code tileSpec} */
@@ -238,6 +242,8 @@
                 return mOneHandedModeTileProvider.get();
             case "color_correction":
                 return mColorCorrectionTileProvider.get();
+            case "dream":
+                return mDreamTileProvider.get();
         }
 
         // Custom tiles
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileViewImpl.kt b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileViewImpl.kt
index 59164de..5147d59 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileViewImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileViewImpl.kt
@@ -670,7 +670,8 @@
         "qr_code_scanner" to R.array.tile_states_qr_code_scanner,
         "alarm" to R.array.tile_states_alarm,
         "onehanded" to R.array.tile_states_onehanded,
-        "color_correction" to R.array.tile_states_color_correction
+        "color_correction" to R.array.tile_states_color_correction,
+        "dream" to R.array.tile_states_dream
     )
 
     fun getSubtitleId(spec: String?): Int {
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 ccec80d..86d4fa3 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java
@@ -56,7 +56,6 @@
 
 /** Quick settings tile: Airplane mode **/
 public class AirplaneModeTile extends QSTileImpl<BooleanState> {
-    private final Icon mIcon = ResourceIcon.get(com.android.internal.R.drawable.ic_qs_airplane);
     private final SettingObserver mSetting;
     private final BroadcastDispatcher mBroadcastDispatcher;
     private final Lazy<ConnectivityManager> mLazyConnectivityManager;
@@ -129,11 +128,8 @@
         final boolean airplaneMode = value != 0;
         state.value = airplaneMode;
         state.label = mContext.getString(R.string.airplane_mode);
-        state.icon = mIcon;
-        if (state.slash == null) {
-            state.slash = new SlashState();
-        }
-        state.slash.isSlashed = !airplaneMode;
+        state.icon = ResourceIcon.get(state.value
+                ? R.drawable.qs_airplane_icon_on : R.drawable.qs_airplane_icon_off);
         state.state = airplaneMode ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
         state.contentDescription = state.label;
         state.expandedAccessibilityClassName = Switch.class.getName();
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 1004fca..ee49b29 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java
@@ -57,8 +57,6 @@
     private boolean mCharging;
     private boolean mPluggedIn;
 
-    private Icon mIcon = ResourceIcon.get(com.android.internal.R.drawable.ic_qs_battery_saver);
-
     @Inject
     public BatterySaverTile(
             QSHost host,
@@ -145,7 +143,9 @@
     protected void handleUpdateState(BooleanState state, Object arg) {
         state.state = mPluggedIn ? Tile.STATE_UNAVAILABLE
                 : mPowerSave ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
-        state.icon = mIcon;
+        state.icon = ResourceIcon.get(mPowerSave
+                ? R.drawable.qs_battery_saver_icon_on
+                : R.drawable.qs_battery_saver_icon_off);
         state.label = mContext.getString(R.string.battery_detail_switch_title);
         state.secondaryLabel = "";
         state.contentDescription = state.label;
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 f736231..9a0d0d9 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
@@ -16,12 +16,12 @@
 
 package com.android.systemui.qs.tiles;
 
+import static com.android.systemui.util.PluralMessageFormaterKt.icuMessageFormat;
+
 import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.BluetoothClass;
 import android.bluetooth.BluetoothDevice;
-import android.content.Context;
 import android.content.Intent;
-import android.graphics.drawable.Drawable;
 import android.os.Handler;
 import android.os.Looper;
 import android.os.UserManager;
@@ -134,9 +134,10 @@
         state.contentDescription = mContext.getString(
                 R.string.accessibility_quick_settings_bluetooth);
         state.stateDescription = "";
+
         if (enabled) {
             if (connected) {
-                state.icon = new BluetoothConnectedTileIcon();
+                state.icon = ResourceIcon.get(R.drawable.qs_bluetooth_icon_on);
                 if (!TextUtils.isEmpty(mController.getConnectedDeviceName())) {
                     state.label = mController.getConnectedDeviceName();
                 }
@@ -145,21 +146,19 @@
                                 + ", " + state.secondaryLabel;
             } else if (state.isTransient) {
                 state.icon = ResourceIcon.get(
-                        com.android.internal.R.drawable.ic_bluetooth_transient_animation);
+                        R.drawable.qs_bluetooth_icon_search);
                 state.stateDescription = state.secondaryLabel;
             } else {
                 state.icon =
-                        ResourceIcon.get(com.android.internal.R.drawable.ic_qs_bluetooth);
+                        ResourceIcon.get(R.drawable.qs_bluetooth_icon_off);
                 state.stateDescription = mContext.getString(R.string.accessibility_not_connected);
             }
             state.state = Tile.STATE_ACTIVE;
         } else {
-            state.icon = ResourceIcon.get(com.android.internal.R.drawable.ic_qs_bluetooth);
+            state.icon = ResourceIcon.get(R.drawable.qs_bluetooth_icon_off);
             state.state = Tile.STATE_INACTIVE;
         }
 
-        state.dualLabelContentDescription = mContext.getResources().getString(
-                R.string.accessibility_quick_settings_open_settings, getTileLabel());
         state.expandedAccessibilityClassName = Switch.class.getName();
     }
 
@@ -185,10 +184,8 @@
         List<CachedBluetoothDevice> connectedDevices = mController.getConnectedDevices();
         if (enabled && connected && !connectedDevices.isEmpty()) {
             if (connectedDevices.size() > 1) {
-                // TODO(b/76102598): add a new string for "X connected devices" after P
-                return mContext.getResources().getQuantityString(
-                        R.plurals.quick_settings_hotspot_secondary_label_num_devices,
-                        connectedDevices.size(),
+                return icuMessageFormat(mContext.getResources(),
+                        R.string.quick_settings_hotspot_secondary_label_num_devices,
                         connectedDevices.size());
             }
 
@@ -244,22 +241,4 @@
             refreshState();
         }
     };
-
-    /**
-     * Bluetooth icon wrapper (when connected with no battery indicator) for Quick Settings. This is
-     * used instead of {@link com.android.systemui.qs.tileimpl.QSTileImpl.DrawableIcon} in order to
-     * use a context that reflects dark/light theme attributes.
-     */
-    private class BluetoothConnectedTileIcon extends Icon {
-
-        BluetoothConnectedTileIcon() {
-            // Do nothing. Default constructor to limit visibility.
-        }
-
-        @Override
-        public Drawable getDrawable(Context context) {
-            // This method returns Pair<Drawable, String> - the first value is the drawable.
-            return context.getDrawable(R.drawable.ic_bluetooth_connected);
-        }
-    }
 }
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 fa2d444..ee41f1d 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CameraToggleTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CameraToggleTile.java
@@ -72,9 +72,9 @@
     @Override
     public @DrawableRes int getIconRes(boolean isBlocked) {
         if (isBlocked) {
-            return com.android.internal.R.drawable.ic_camera_blocked;
+            return R.drawable.qs_camera_access_icon_off;
         } else {
-            return com.android.internal.R.drawable.ic_camera_allowed;
+            return R.drawable.qs_camera_access_icon_on;
         }
     }
 
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 4afd39e3..dce137f 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
@@ -33,10 +33,12 @@
 import androidx.annotation.Nullable;
 
 import com.android.internal.app.MediaRouteDialogPresenter;
+import com.android.internal.jank.InteractionJankMonitor;
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.systemui.R;
 import com.android.systemui.animation.ActivityLaunchAnimator;
+import com.android.systemui.animation.DialogCuj;
 import com.android.systemui.animation.DialogLaunchAnimator;
 import com.android.systemui.dagger.qualifiers.Background;
 import com.android.systemui.dagger.qualifiers.Main;
@@ -63,6 +65,9 @@
 
 /** Quick settings tile: Cast **/
 public class CastTile extends QSTileImpl<BooleanState> {
+
+    private static final String INTERACTION_JANK_TAG = "cast";
+
     private static final Intent CAST_SETTINGS =
             new Intent(Settings.ACTION_CAST_SETTINGS);
 
@@ -211,7 +216,9 @@
 
             mUiHandler.post(() -> {
                 if (view != null) {
-                    mDialogLaunchAnimator.showFromView(dialog, view);
+                    mDialogLaunchAnimator.showFromView(dialog, view,
+                            new DialogCuj(InteractionJankMonitor.CUJ_SHADE_DIALOG_OPEN,
+                                    INTERACTION_JANK_TAG));
                 } else {
                     dialog.show();
                 }
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 1bbe411..9fdf594 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java
@@ -24,10 +24,12 @@
 
 import androidx.annotation.Nullable;
 
+import com.android.internal.jank.InteractionJankMonitor;
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.systemui.Prefs;
 import com.android.systemui.R;
+import com.android.systemui.animation.DialogCuj;
 import com.android.systemui.animation.DialogLaunchAnimator;
 import com.android.systemui.dagger.qualifiers.Background;
 import com.android.systemui.dagger.qualifiers.Main;
@@ -46,6 +48,8 @@
 public class DataSaverTile extends QSTileImpl<BooleanState> implements
         DataSaverController.Listener{
 
+    private static final String INTERACTION_JANK_TAG = "start_data_saver";
+
     private final DataSaverController mDataSaverController;
     private final DialogLaunchAnimator mDialogLaunchAnimator;
 
@@ -102,7 +106,9 @@
             dialog.setShowForAllUsers(true);
 
             if (view != null) {
-                mDialogLaunchAnimator.showFromView(dialog, view);
+                mDialogLaunchAnimator.showFromView(dialog, view, new DialogCuj(
+                        InteractionJankMonitor.CUJ_SHADE_DIALOG_OPEN,
+                        INTERACTION_JANK_TAG));
             } else {
                 dialog.show();
             }
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 6cff4cd..8b7f53f 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
@@ -39,11 +39,13 @@
 
 import androidx.annotation.Nullable;
 
+import com.android.internal.jank.InteractionJankMonitor;
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settingslib.notification.EnableZenModeDialog;
 import com.android.systemui.Prefs;
 import com.android.systemui.R;
+import com.android.systemui.animation.DialogCuj;
 import com.android.systemui.animation.DialogLaunchAnimator;
 import com.android.systemui.dagger.qualifiers.Background;
 import com.android.systemui.dagger.qualifiers.Main;
@@ -71,6 +73,8 @@
     private static final Intent ZEN_PRIORITY_SETTINGS =
             new Intent(Settings.ACTION_ZEN_MODE_PRIORITY_SETTINGS);
 
+    private static final String INTERACTION_JANK_TAG = "start_zen_mode";
+
     private final ZenModeController mController;
     private final SharedPreferences mSharedPreferences;
     private final SettingObserver mSettingZenDuration;
@@ -175,7 +179,10 @@
                     mUiHandler.post(() -> {
                         Dialog dialog = makeZenModeDialog();
                         if (view != null) {
-                            mDialogLaunchAnimator.showFromView(dialog, view, false);
+                            mDialogLaunchAnimator.showFromView(dialog, view, new DialogCuj(
+                                            InteractionJankMonitor.CUJ_SHADE_DIALOG_OPEN,
+                                            INTERACTION_JANK_TAG),
+                                    /* animateBackgroundBoundsChange= */ false);
                         } else {
                             dialog.show();
                         }
@@ -219,16 +226,15 @@
         if (mController == null) return;
         final int zen = arg instanceof Integer ? (Integer) arg : mController.getZen();
         final boolean newValue = zen != ZEN_MODE_OFF;
-        final boolean valueChanged = state.value != newValue;
-        if (state.slash == null) state.slash = new SlashState();
         state.dualTarget = true;
         state.value = newValue;
         state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
-        state.slash.isSlashed = !state.value;
+        state.icon = ResourceIcon.get(state.value
+                ? R.drawable.qs_dnd_icon_on
+                : R.drawable.qs_dnd_icon_off);
         state.label = getTileLabel();
         state.secondaryLabel = TextUtils.emptyIfNull(ZenModeConfig.getDescription(mContext,
                 zen != Global.ZEN_MODE_OFF, mController.getConfig(), false));
-        state.icon = ResourceIcon.get(com.android.internal.R.drawable.ic_qs_dnd);
         checkIfRestrictionEnforcedByAdminOnly(state, UserManager.DISALLOW_ADJUST_VOLUME);
         // Keeping the secondaryLabel in contentDescription instead of stateDescription is easier
         // to understand.
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DreamTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DreamTile.java
new file mode 100644
index 0000000..bebd580
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DreamTile.java
@@ -0,0 +1,253 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.tiles;
+
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.PackageManager;
+import android.content.pm.ServiceInfo;
+import android.os.Build;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.RemoteException;
+import android.provider.Settings;
+import android.service.dreams.IDreamManager;
+import android.service.quicksettings.Tile;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.View;
+
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+
+import com.android.internal.logging.MetricsLogger;
+import com.android.systemui.R;
+import com.android.systemui.broadcast.BroadcastDispatcher;
+import com.android.systemui.dagger.qualifiers.Background;
+import com.android.systemui.dagger.qualifiers.Main;
+import com.android.systemui.dreams.dagger.DreamModule;
+import com.android.systemui.plugins.ActivityStarter;
+import com.android.systemui.plugins.FalsingManager;
+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.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.SecureSettings;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+/** Quick settings tile: Screensaver (dream) **/
+public class DreamTile extends QSTileImpl<QSTile.BooleanState> {
+
+    private static final String LOG_TAG = "QSDream";
+    // TODO: consider 1 animated icon instead
+    private final Icon mIconDocked = ResourceIcon.get(R.drawable.ic_qs_screen_saver);
+    private final Icon mIconUndocked = ResourceIcon.get(R.drawable.ic_qs_screen_saver_undocked);
+    private final IDreamManager mDreamManager;
+    private final BroadcastDispatcher mBroadcastDispatcher;
+    private final SettingObserver mEnabledSettingObserver;
+    private final SettingObserver mDreamSettingObserver;
+    private final UserTracker mUserTracker;
+    private final boolean mDreamSupported;
+    private final boolean mDreamOnlyEnabledForSystemUser;
+
+    private boolean mIsDocked = false;
+
+    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (Intent.ACTION_DOCK_EVENT.equals(intent.getAction())) {
+                mIsDocked = intent.getIntExtra(Intent.EXTRA_DOCK_STATE, -1)
+                        != Intent.EXTRA_DOCK_STATE_UNDOCKED;
+            }
+            refreshState();
+        }
+    };
+
+    @Inject
+    public DreamTile(
+            QSHost host,
+            @Background Looper backgroundLooper,
+            @Main Handler mainHandler,
+            FalsingManager falsingManager,
+            MetricsLogger metricsLogger,
+            StatusBarStateController statusBarStateController,
+            ActivityStarter activityStarter,
+            QSLogger qsLogger,
+            IDreamManager dreamManager,
+            SecureSettings secureSettings,
+            BroadcastDispatcher broadcastDispatcher,
+            UserTracker userTracker,
+            @Named(DreamModule.DREAM_SUPPORTED) boolean dreamSupported,
+            @Named(DreamModule.DREAM_ONLY_ENABLED_FOR_SYSTEM_USER)
+                    boolean dreamOnlyEnabledForSystemUser
+    ) {
+        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
+                statusBarStateController, activityStarter, qsLogger);
+        mDreamManager = dreamManager;
+        mBroadcastDispatcher = broadcastDispatcher;
+        mEnabledSettingObserver = new SettingObserver(secureSettings, mHandler,
+                Settings.Secure.SCREENSAVER_ENABLED) {
+            @Override
+            protected void handleValueChanged(int value, boolean observedChange) {
+                refreshState();
+            }
+        };
+        mDreamSettingObserver = new SettingObserver(secureSettings, mHandler,
+                Settings.Secure.SCREENSAVER_COMPONENTS) {
+            @Override
+            protected void handleValueChanged(int value, boolean observedChange) {
+                refreshState();
+            }
+        };
+        mUserTracker = userTracker;
+        mDreamSupported = dreamSupported;
+        mDreamOnlyEnabledForSystemUser = dreamOnlyEnabledForSystemUser;
+    }
+
+    @Override
+    public void handleSetListening(boolean listening) {
+        super.handleSetListening(listening);
+
+        if (listening) {
+            final IntentFilter filter = new IntentFilter();
+            filter.addAction(Intent.ACTION_DREAMING_STARTED);
+            filter.addAction(Intent.ACTION_DREAMING_STOPPED);
+            filter.addAction(Intent.ACTION_DOCK_EVENT);
+            mBroadcastDispatcher.registerReceiver(mReceiver, filter);
+        } else {
+            mBroadcastDispatcher.unregisterReceiver(mReceiver);
+        }
+        mEnabledSettingObserver.setListening(listening);
+        mDreamSettingObserver.setListening(listening);
+    }
+
+    @Override
+    public BooleanState newTileState() {
+        return new BooleanState();
+    }
+
+    @Override
+    protected void handleClick(@Nullable View view) {
+        try {
+            if (mDreamManager.isDreaming()) {
+                mDreamManager.awaken();
+            } else {
+                mDreamManager.dream();
+            }
+        } catch (RemoteException e) {
+            Log.e(LOG_TAG, "Can't dream", e);
+        }
+    }
+
+    @Override
+    protected void handleLongClick(@Nullable View view) {
+        try {
+            // Need to wake on long click so bouncer->settings works.
+            mDreamManager.awaken();
+        } catch (RemoteException e) {
+            Log.e(LOG_TAG, "Can't awaken", e);
+        }
+        super.handleLongClick(view);
+    }
+
+    @Override
+    protected void handleUpdateState(BooleanState state, Object arg) {
+        state.label = getTileLabel();
+        state.secondaryLabel = getActiveDreamName();
+        state.contentDescription = getContentDescription(state.secondaryLabel);
+        state.icon = mIsDocked ? mIconDocked : mIconUndocked;
+
+        if (getActiveDream() == null || !isScreensaverEnabled()) {
+            state.state = Tile.STATE_UNAVAILABLE;
+        } else {
+            state.state = isDreaming() ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
+        }
+    }
+
+    @Nullable
+    @Override
+    public Intent getLongClickIntent() {
+        return new Intent(Settings.ACTION_DREAM_SETTINGS);
+    }
+
+    @Override
+    public CharSequence getTileLabel() {
+        return mContext.getString(R.string.quick_settings_screensaver_label);
+    }
+
+    @Override
+    public boolean isAvailable() {
+        // Only enable for devices that have dreams for the user(s) that can dream.
+        // For now, restrict to debug users.
+        return Build.isDebuggable()
+                && mDreamSupported
+                && (!mDreamOnlyEnabledForSystemUser || mUserTracker.getUserHandle().isSystem());
+    }
+
+    @VisibleForTesting
+    protected CharSequence getContentDescription(CharSequence dreamName) {
+        return !TextUtils.isEmpty(dreamName)
+                ? getTileLabel() + ", " + dreamName : getTileLabel();
+    }
+
+    private boolean isDreaming() {
+        try {
+            return mDreamManager.isDreaming();
+        } catch (RemoteException e) {
+            Log.e(LOG_TAG, "Can't check if dreaming", e);
+            return false;
+        }
+    }
+
+    private ComponentName getActiveDream() {
+        try {
+            final ComponentName[] dreams = mDreamManager.getDreamComponents();
+            return dreams != null && dreams.length > 0 ? dreams[0] : null;
+        } catch (RemoteException e) {
+            Log.w(TAG, "Failed to get active dream", e);
+            return null;
+        }
+    }
+
+    private CharSequence getActiveDreamName() {
+        final ComponentName componentName = getActiveDream();
+        if (componentName != null) {
+            PackageManager pm = mContext.getPackageManager();
+            try {
+                ServiceInfo ri = pm.getServiceInfo(componentName, 0);
+                if (ri != null) {
+                    return ri.loadLabel(pm);
+                }
+            } catch (PackageManager.NameNotFoundException exc) {
+                return null; // uninstalled?
+            }
+        }
+        return null;
+    }
+
+    private boolean isScreensaverEnabled() {
+        return mEnabledSettingObserver.getValue() == 1;
+    }
+}
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 7c8e77b..b6f6e93 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java
@@ -16,6 +16,8 @@
 
 package com.android.systemui.qs.tiles;
 
+import static com.android.systemui.util.PluralMessageFormaterKt.icuMessageFormat;
+
 import android.content.Intent;
 import android.os.Handler;
 import android.os.Looper;
@@ -186,9 +188,8 @@
             return mContext.getString(
                     R.string.quick_settings_hotspot_secondary_label_data_saver_enabled);
         } else if (numConnectedDevices > 0 && isActive) {
-            return mContext.getResources().getQuantityString(
-                    R.plurals.quick_settings_hotspot_secondary_label_num_devices,
-                    numConnectedDevices,
+            return icuMessageFormat(mContext.getResources(),
+                    R.string.quick_settings_hotspot_secondary_label_num_devices,
                     numConnectedDevices);
         }
 
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 fc93f44..9466a69 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
@@ -48,8 +48,6 @@
 /** Quick settings tile: Location **/
 public class LocationTile extends QSTileImpl<BooleanState> {
 
-    private final Icon mIcon = ResourceIcon.get(R.drawable.ic_location);
-
     private final LocationController mController;
     private final KeyguardStateController mKeyguard;
     private final Callback mCallback = new Callback();
@@ -119,8 +117,8 @@
         if (state.disabledByPolicy == false) {
             checkIfRestrictionEnforcedByAdminOnly(state, UserManager.DISALLOW_CONFIG_LOCATION);
         }
-        state.icon = mIcon;
-        state.slash.isSlashed = !state.value;
+        state.icon = ResourceIcon.get(state.value
+                ? R.drawable.qs_location_icon_on : R.drawable.qs_location_icon_off);
         state.label = mContext.getString(R.string.quick_settings_location_label);
         state.contentDescription = state.label;
         state.state = state.value ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
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 f4f0b2c..e547095 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/MicrophoneToggleTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/MicrophoneToggleTile.java
@@ -72,9 +72,9 @@
     @Override
     public @DrawableRes int getIconRes(boolean isBlocked) {
         if (isBlocked) {
-            return com.android.internal.R.drawable.ic_mic_blocked;
+            return R.drawable.qs_mic_access_off;
         } else {
-            return com.android.internal.R.drawable.ic_mic_allowed;
+            return R.drawable.qs_mic_access_on;
         }
     }
 
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 177c82e..600874f 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java
@@ -57,6 +57,7 @@
 /** Quick settings tile: Rotation **/
 public class RotationLockTile extends QSTileImpl<BooleanState> implements
         BatteryController.BatteryStateChangeCallback {
+    private static final String EMPTY_SECONDARY_STRING = "";
 
     private final Icon mIcon = ResourceIcon.get(com.android.internal.R.drawable.ic_qs_auto_rotate);
     private final RotationLockController mController;
@@ -144,13 +145,15 @@
                         && mController.isCameraRotationEnabled();
         state.value = !rotationLocked;
         state.label = mContext.getString(R.string.quick_settings_rotation_unlocked_label);
-        state.icon = mIcon;
+        state.icon = ResourceIcon.get(R.drawable.qs_auto_rotate_icon_off);
         state.contentDescription = getAccessibilityString(rotationLocked);
-        if (!rotationLocked && cameraRotation) {
-            state.secondaryLabel = mContext.getResources().getString(
-                    R.string.rotation_lock_camera_rotation_on);
+        if (!rotationLocked) {
+            state.secondaryLabel = cameraRotation ? mContext.getResources().getString(
+                    R.string.rotation_lock_camera_rotation_on)
+                    : EMPTY_SECONDARY_STRING;
+            state.icon = ResourceIcon.get(R.drawable.qs_auto_rotate_icon_on);
         } else {
-            state.secondaryLabel = "";
+            state.secondaryLabel = EMPTY_SECONDARY_STRING;
         }
         state.stateDescription = state.secondaryLabel;
 
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 45e43ee..75fb393 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java
@@ -27,11 +27,14 @@
 
 import androidx.annotation.Nullable;
 
+import com.android.internal.jank.InteractionJankMonitor;
 import com.android.internal.logging.MetricsLogger;
 import com.android.systemui.R;
+import com.android.systemui.animation.DialogCuj;
 import com.android.systemui.animation.DialogLaunchAnimator;
 import com.android.systemui.dagger.qualifiers.Background;
 import com.android.systemui.dagger.qualifiers.Main;
+import com.android.systemui.flags.FeatureFlags;
 import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.plugins.FalsingManager;
 import com.android.systemui.plugins.qs.QSTile;
@@ -52,11 +55,14 @@
 public class ScreenRecordTile extends QSTileImpl<QSTile.BooleanState>
         implements RecordingController.RecordingStateChangeCallback {
     private static final String TAG = "ScreenRecordTile";
+    private static final String INTERACTION_JANK_TAG = "screen_record";
+
     private final RecordingController mController;
     private final KeyguardDismissUtil mKeyguardDismissUtil;
     private final KeyguardStateController mKeyguardStateController;
     private final Callback mCallback = new Callback();
     private final DialogLaunchAnimator mDialogLaunchAnimator;
+    private final FeatureFlags mFlags;
 
     private long mMillisUntilFinished = 0;
 
@@ -67,6 +73,7 @@
             @Main Handler mainHandler,
             FalsingManager falsingManager,
             MetricsLogger metricsLogger,
+            FeatureFlags flags,
             StatusBarStateController statusBarStateController,
             ActivityStarter activityStarter,
             QSLogger qsLogger,
@@ -79,6 +86,7 @@
                 statusBarStateController, activityStarter, qsLogger);
         mController = controller;
         mController.observe(this, mCallback);
+        mFlags = flags;
         mKeyguardDismissUtil = keyguardDismissUtil;
         mKeyguardStateController = keyguardStateController;
         mDialogLaunchAnimator = dialogLaunchAnimator;
@@ -160,12 +168,13 @@
             mDialogLaunchAnimator.disableAllCurrentDialogsExitAnimations();
             getHost().collapsePanels();
         };
-        ScreenRecordDialog dialog = mController.createScreenRecordDialog(mContext,
-                onStartRecordingClicked);
+        ScreenRecordDialog dialog = mController.createScreenRecordDialog(mContext, mFlags,
+                mDialogLaunchAnimator, mActivityStarter, onStartRecordingClicked);
 
         ActivityStarter.OnDismissAction dismissAction = () -> {
             if (shouldAnimateFromView) {
-                mDialogLaunchAnimator.showFromView(dialog, view);
+                mDialogLaunchAnimator.showFromView(dialog, view, new DialogCuj(
+                        InteractionJankMonitor.CUJ_SHADE_DIALOG_OPEN, INTERACTION_JANK_TAG));
             } else {
                 dialog.show();
             }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java
index f1fdae7..3c8775d0 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java
@@ -778,7 +778,8 @@
             return;
         }
 
-        mTelephonyManager.setDataEnabled(enabled);
+        mTelephonyManager.setDataEnabledForReason(
+                TelephonyManager.DATA_ENABLED_REASON_USER, enabled);
         if (disableOtherSubscriptions) {
             final List<SubscriptionInfo> subInfoList =
                     mSubscriptionManager.getActiveSubscriptionInfoList();
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogFactory.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogFactory.kt
index 4386169..8566ca3 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogFactory.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogFactory.kt
@@ -19,7 +19,9 @@
 import android.os.Handler
 import android.util.Log
 import android.view.View
+import com.android.internal.jank.InteractionJankMonitor
 import com.android.internal.logging.UiEventLogger
+import com.android.systemui.animation.DialogCuj
 import com.android.systemui.animation.DialogLaunchAnimator
 import com.android.systemui.dagger.SysUISingleton
 import com.android.systemui.dagger.qualifiers.Background
@@ -45,6 +47,7 @@
     private val keyguardStateController: KeyguardStateController
 ) {
     companion object {
+        private const val INTERACTION_JANK_TAG = "internet"
         var internetDialog: InternetDialog? = null
     }
 
@@ -61,12 +64,20 @@
             }
             return
         } else {
-            internetDialog = InternetDialog(context, this, internetDialogController,
-                    canConfigMobileData, canConfigWifi, aboveStatusBar, uiEventLogger, handler,
-                    executor, keyguardStateController)
+            internetDialog = InternetDialog(
+                context, this, internetDialogController,
+                canConfigMobileData, canConfigWifi, aboveStatusBar, uiEventLogger, handler,
+                executor, keyguardStateController
+            )
             if (view != null) {
-                dialogLaunchAnimator.showFromView(internetDialog!!, view,
-                    animateBackgroundBoundsChange = true)
+                dialogLaunchAnimator.showFromView(
+                    internetDialog!!, view,
+                    animateBackgroundBoundsChange = true,
+                    cuj = DialogCuj(
+                        InteractionJankMonitor.CUJ_SHADE_DIALOG_OPEN,
+                        INTERACTION_JANK_TAG
+                    )
+                )
             } else {
                 internetDialog?.show()
             }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/user/UserSwitchDialogController.kt b/packages/SystemUI/src/com/android/systemui/qs/user/UserSwitchDialogController.kt
index 88aa734..bdcc6b0 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/user/UserSwitchDialogController.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/user/UserSwitchDialogController.kt
@@ -25,8 +25,10 @@
 import android.view.LayoutInflater
 import android.view.View
 import androidx.annotation.VisibleForTesting
+import com.android.internal.jank.InteractionJankMonitor
 import com.android.internal.logging.UiEventLogger
 import com.android.systemui.R
+import com.android.systemui.animation.DialogCuj
 import com.android.systemui.animation.DialogLaunchAnimator
 import com.android.systemui.dagger.SysUISingleton
 import com.android.systemui.plugins.ActivityStarter
@@ -67,6 +69,7 @@
     )
 
     companion object {
+        private const val INTERACTION_JANK_TAG = "switch_user"
         private val USER_SETTINGS_INTENT = Intent(Settings.ACTION_USER_SETTINGS)
     }
 
@@ -89,14 +92,16 @@
                 if (!falsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) {
                     uiEventLogger.log(QSUserSwitcherEvent.QS_USER_MORE_SETTINGS)
                     val controller = dialogLaunchAnimator.createActivityLaunchController(
-                        getButton(BUTTON_NEUTRAL))
+                        getButton(BUTTON_NEUTRAL)
+                    )
 
                     if (controller == null) {
                         dismiss()
                     }
 
                     activityStarter.postStartActivityDismissingKeyguard(
-                        USER_SETTINGS_INTENT, 0, controller)
+                        USER_SETTINGS_INTENT, 0, controller
+                    )
                 }
             }, false /* dismissOnClick */)
             val gridFrame = LayoutInflater.from(this.context)
@@ -107,7 +112,13 @@
 
             adapter.linkToViewGroup(gridFrame.findViewById(R.id.grid))
 
-            dialogLaunchAnimator.showFromView(this, view)
+            dialogLaunchAnimator.showFromView(
+                this, view,
+                cuj = DialogCuj(
+                    InteractionJankMonitor.CUJ_SHADE_DIALOG_OPEN,
+                    INTERACTION_JANK_TAG
+                )
+            )
             uiEventLogger.log(QSUserSwitcherEvent.QS_USER_DETAIL_OPEN)
             adapter.injectDialogShower(DialogShowerImpl(this, dialogLaunchAnimator))
         }
@@ -117,15 +128,16 @@
         private val animateFrom: Dialog,
         private val dialogLaunchAnimator: DialogLaunchAnimator
     ) : DialogInterface by animateFrom, DialogShower {
-        override fun showDialog(dialog: Dialog) {
+        override fun showDialog(dialog: Dialog, cuj: DialogCuj) {
             dialogLaunchAnimator.showFromDialog(
                 dialog,
-                animateFrom = animateFrom
+                animateFrom = animateFrom,
+                cuj
             )
         }
     }
 
     interface DialogShower : DialogInterface {
-        fun showDialog(dialog: Dialog)
+        fun showDialog(dialog: Dialog, cuj: DialogCuj)
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
index 9768e70..438236d 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
@@ -51,7 +51,6 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.ServiceConnection;
-import android.graphics.Bitmap;
 import android.graphics.Insets;
 import android.graphics.Rect;
 import android.graphics.Region;
@@ -97,6 +96,7 @@
 import com.android.systemui.navigationbar.buttons.KeyButtonView;
 import com.android.systemui.recents.OverviewProxyService.OverviewProxyListener;
 import com.android.systemui.settings.CurrentUserTracker;
+import com.android.systemui.shade.NotificationPanelViewController;
 import com.android.systemui.shared.recents.IOverviewProxy;
 import com.android.systemui.shared.recents.ISystemUiProxy;
 import com.android.systemui.shared.recents.model.Task;
@@ -105,7 +105,6 @@
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.NotificationShadeWindowController;
 import com.android.systemui.statusbar.phone.CentralSurfaces;
-import com.android.systemui.statusbar.phone.NotificationPanelViewController;
 import com.android.systemui.statusbar.phone.StatusBarWindowCallback;
 import com.android.systemui.statusbar.policy.CallbackController;
 import com.android.wm.shell.back.BackAnimation;
@@ -297,12 +296,6 @@
         }
 
         @Override
-        public Rect getNonMinimizedSplitScreenSecondaryBounds() {
-            // Deprecated
-            return null;
-        }
-
-        @Override
         public void setNavBarButtonAlpha(float alpha, boolean animate) {
             verifyCallerAndClearCallingIdentityPostMain("setNavBarButtonAlpha", () ->
                     notifyNavBarButtonAlphaChanged(alpha, animate));
@@ -349,17 +342,6 @@
         }
 
         @Override
-        public void handleImageAsScreenshot(Bitmap screenImage, Rect locationInScreen,
-                                            Insets visibleInsets, int taskId) {
-            // Deprecated
-        }
-
-        @Override
-        public void setSplitScreenMinimized(boolean minimized) {
-            // Deprecated
-        }
-
-        @Override
         public void notifySwipeToHomeFinished() {
             verifyCallerAndClearCallingIdentity("notifySwipeToHomeFinished", () ->
                     mPipOptional.ifPresent(
@@ -736,7 +718,7 @@
     }
 
     private void onStatusBarStateChanged(boolean keyguardShowing, boolean keyguardOccluded,
-            boolean bouncerShowing, boolean isDozing) {
+            boolean bouncerShowing, boolean isDozing, boolean panelExpanded) {
         mSysUiState.setFlag(SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING,
                         keyguardShowing && !keyguardOccluded)
                 .setFlag(SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED,
diff --git a/packages/SystemUI/src/com/android/systemui/ripple/RippleShader.kt b/packages/SystemUI/src/com/android/systemui/ripple/RippleShader.kt
new file mode 100644
index 0000000..0a8e6e2
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/ripple/RippleShader.kt
@@ -0,0 +1,228 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.systemui.ripple
+
+import android.graphics.PointF
+import android.graphics.RuntimeShader
+import android.util.MathUtils
+
+/**
+ * Shader class that renders an expanding ripple effect. The ripple contains three elements:
+ *
+ * 1. an expanding filled [RippleShape] that appears in the beginning and quickly fades away
+ * 2. an expanding ring that appears throughout the effect
+ * 3. an expanding ring-shaped area that reveals noise over #2.
+ *
+ * The ripple shader will be default to the circle shape if not specified.
+ *
+ * Modeled after frameworks/base/graphics/java/android/graphics/drawable/RippleShader.java.
+ */
+class RippleShader internal constructor(rippleShape: RippleShape = RippleShape.CIRCLE) :
+        RuntimeShader(buildShader(rippleShape)) {
+
+    /** Shapes that the [RippleShader] supports. */
+    enum class RippleShape {
+        CIRCLE,
+        ROUNDED_BOX,
+        ELLIPSE
+    }
+
+    companion object {
+        private const val SHADER_UNIFORMS = """uniform vec2 in_center;
+                uniform vec2 in_size;
+                uniform float in_progress;
+                uniform float in_cornerRadius;
+                uniform float in_thickness;
+                uniform float in_time;
+                uniform float in_distort_radial;
+                uniform float in_distort_xy;
+                uniform float in_fadeSparkle;
+                uniform float in_fadeFill;
+                uniform float in_fadeRing;
+                uniform float in_blur;
+                uniform float in_pixelDensity;
+                layout(color) uniform vec4 in_color;
+                uniform float in_sparkle_strength;"""
+
+        private const val SHADER_CIRCLE_MAIN = """vec4 main(vec2 p) {
+                vec2 p_distorted = distort(p, in_time, in_distort_radial, in_distort_xy);
+                float radius = in_size.x * 0.5;
+                float sparkleRing = soften(circleRing(p_distorted-in_center, radius), in_blur);
+                float inside = soften(sdCircle(p_distorted-in_center, radius * 1.2), in_blur);
+                float sparkle = sparkles(p - mod(p, in_pixelDensity * 0.8), in_time * 0.00175)
+                    * (1.-sparkleRing) * in_fadeSparkle;
+
+                float rippleInsideAlpha = (1.-inside) * in_fadeFill;
+                float rippleRingAlpha = (1.-sparkleRing) * in_fadeRing;
+                float rippleAlpha = max(rippleInsideAlpha, rippleRingAlpha) * 0.45;
+                vec4 ripple = in_color * rippleAlpha;
+                return mix(ripple, vec4(sparkle), sparkle * in_sparkle_strength);
+            }
+        """
+
+        private const val SHADER_ROUNDED_BOX_MAIN = """vec4 main(vec2 p) {
+                float sparkleRing = soften(roundedBoxRing(p-in_center, in_size, in_cornerRadius,
+                    in_thickness), in_blur);
+                float inside = soften(sdRoundedBox(p-in_center, in_size * 1.2, in_cornerRadius),
+                    in_blur);
+                float sparkle = sparkles(p - mod(p, in_pixelDensity * 0.8), in_time * 0.00175)
+                    * (1.-sparkleRing) * in_fadeSparkle;
+
+                float rippleInsideAlpha = (1.-inside) * in_fadeFill;
+                float rippleRingAlpha = (1.-sparkleRing) * in_fadeRing;
+                float rippleAlpha = max(rippleInsideAlpha, rippleRingAlpha) * 0.45;
+                vec4 ripple = in_color * rippleAlpha;
+                return mix(ripple, vec4(sparkle), sparkle * in_sparkle_strength);
+            }
+        """
+
+        private const val SHADER_ELLIPSE_MAIN = """vec4 main(vec2 p) {
+                vec2 p_distorted = distort(p, in_time, in_distort_radial, in_distort_xy);
+
+                float sparkleRing = soften(ellipseRing(p_distorted-in_center, in_size), in_blur);
+                float inside = soften(sdEllipse(p_distorted-in_center, in_size * 1.2), in_blur);
+                float sparkle = sparkles(p - mod(p, in_pixelDensity * 0.8), in_time * 0.00175)
+                    * (1.-sparkleRing) * in_fadeSparkle;
+
+                float rippleInsideAlpha = (1.-inside) * in_fadeFill;
+                float rippleRingAlpha = (1.-sparkleRing) * in_fadeRing;
+                float rippleAlpha = max(rippleInsideAlpha, rippleRingAlpha) * 0.45;
+                vec4 ripple = in_color * rippleAlpha;
+                return mix(ripple, vec4(sparkle), sparkle * in_sparkle_strength);
+            }
+        """
+
+        private const val CIRCLE_SHADER = SHADER_UNIFORMS + RippleShaderUtilLibrary.SHADER_LIB +
+                SdfShaderLibrary.SHADER_SDF_OPERATION_LIB + SdfShaderLibrary.CIRCLE_SDF +
+                SHADER_CIRCLE_MAIN
+        private const val ROUNDED_BOX_SHADER = SHADER_UNIFORMS +
+                RippleShaderUtilLibrary.SHADER_LIB + SdfShaderLibrary.SHADER_SDF_OPERATION_LIB +
+                SdfShaderLibrary.ROUNDED_BOX_SDF + SHADER_ROUNDED_BOX_MAIN
+        private const val ELLIPSE_SHADER = SHADER_UNIFORMS + RippleShaderUtilLibrary.SHADER_LIB +
+                SdfShaderLibrary.SHADER_SDF_OPERATION_LIB + SdfShaderLibrary.ELLIPSE_SDF +
+                SHADER_ELLIPSE_MAIN
+
+        private fun buildShader(rippleShape: RippleShape): String =
+                when (rippleShape) {
+                    RippleShape.CIRCLE -> CIRCLE_SHADER
+                    RippleShape.ROUNDED_BOX -> ROUNDED_BOX_SHADER
+                    RippleShape.ELLIPSE -> ELLIPSE_SHADER
+                }
+
+        private fun subProgress(start: Float, end: Float, progress: Float): Float {
+            val min = Math.min(start, end)
+            val max = Math.max(start, end)
+            val sub = Math.min(Math.max(progress, min), max)
+            return (sub - start) / (end - start)
+        }
+    }
+
+    /**
+     * Sets the center position of the ripple.
+     */
+    fun setCenter(x: Float, y: Float) {
+        setFloatUniform("in_center", x, y)
+    }
+
+    /** Max width of the ripple. */
+    private var maxSize: PointF = PointF()
+    fun setMaxSize(width: Float, height: Float) {
+        maxSize.x = width
+        maxSize.y = height
+    }
+
+    /**
+     * Progress of the ripple. Float value between [0, 1].
+     */
+    var progress: Float = 0.0f
+        set(value) {
+            field = value
+            setFloatUniform("in_progress", value)
+            val curvedProg = 1 - (1 - value) * (1 - value) * (1 - value)
+
+            setFloatUniform("in_size", /* width= */ maxSize.x * curvedProg,
+                    /* height= */ maxSize.y * curvedProg)
+            setFloatUniform("in_thickness", maxSize.y * curvedProg * 0.5f)
+            // radius should not exceed width and height values.
+            setFloatUniform("in_cornerRadius",
+                    Math.min(maxSize.x, maxSize.y) * curvedProg)
+
+            setFloatUniform("in_blur", MathUtils.lerp(1.25f, 0.5f, value))
+
+            val fadeIn = subProgress(0f, 0.1f, value)
+            val fadeOutNoise = subProgress(0.4f, 1f, value)
+            var fadeOutRipple = 0f
+            var fadeFill = 0f
+            if (!rippleFill) {
+                fadeFill = subProgress(0f, 0.6f, value)
+                fadeOutRipple = subProgress(0.3f, 1f, value)
+            }
+            setFloatUniform("in_fadeSparkle", Math.min(fadeIn, 1 - fadeOutNoise))
+            setFloatUniform("in_fadeFill", 1 - fadeFill)
+            setFloatUniform("in_fadeRing", Math.min(fadeIn, 1 - fadeOutRipple))
+        }
+
+    /**
+     * Play time since the start of the effect.
+     */
+    var time: Float = 0.0f
+        set(value) {
+            field = value
+            setFloatUniform("in_time", value)
+        }
+
+    /**
+     * A hex value representing the ripple color, in the format of ARGB
+     */
+    var color: Int = 0xffffff
+        set(value) {
+            field = value
+            setColorUniform("in_color", value)
+        }
+
+    /**
+     * Noise sparkle intensity. Expected value between [0, 1]. The sparkle is white, and thus
+     * with strength 0 it's transparent, leaving the ripple fully smooth, while with strength 1
+     * it's opaque white and looks the most grainy.
+     */
+    var sparkleStrength: Float = 0.0f
+        set(value) {
+            field = value
+            setFloatUniform("in_sparkle_strength", value)
+        }
+
+    /**
+     * Distortion strength of the ripple. Expected value between[0, 1].
+     */
+    var distortionStrength: Float = 0.0f
+        set(value) {
+            field = value
+            setFloatUniform("in_distort_radial", 75 * progress * value)
+            setFloatUniform("in_distort_xy", 75 * value)
+        }
+
+    var pixelDensity: Float = 1.0f
+        set(value) {
+            field = value
+            setFloatUniform("in_pixelDensity", value)
+        }
+
+    /**
+     * True if the ripple should stayed filled in as it expands to give a filled-in circle effect.
+     * False for a ring effect.
+     */
+    var rippleFill: Boolean = false
+}
diff --git a/packages/SystemUI/src/com/android/systemui/ripple/RippleShaderUtilLibrary.kt b/packages/SystemUI/src/com/android/systemui/ripple/RippleShaderUtilLibrary.kt
new file mode 100644
index 0000000..0cacbc2
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/ripple/RippleShaderUtilLibrary.kt
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.ripple
+
+/** A common utility functions that are used for computing [RippleShader]. */
+class RippleShaderUtilLibrary {
+    companion object {
+        const val SHADER_LIB = """
+            float triangleNoise(vec2 n) {
+                    n  = fract(n * vec2(5.3987, 5.4421));
+                    n += dot(n.yx, n.xy + vec2(21.5351, 14.3137));
+                    float xy = n.x * n.y;
+                    return fract(xy * 95.4307) + fract(xy * 75.04961) - 1.0;
+                }
+                const float PI = 3.1415926535897932384626;
+
+                float sparkles(vec2 uv, float t) {
+                    float n = triangleNoise(uv);
+                    float s = 0.0;
+                    for (float i = 0; i < 4; i += 1) {
+                        float l = i * 0.01;
+                        float h = l + 0.1;
+                        float o = smoothstep(n - l, h, n);
+                        o *= abs(sin(PI * o * (t + 0.55 * i)));
+                        s += o;
+                    }
+                    return s;
+                }
+
+                vec2 distort(vec2 p, float time, float distort_amount_radial,
+                    float distort_amount_xy) {
+                        float angle = atan(p.y, p.x);
+                          return p + vec2(sin(angle * 8 + time * 0.003 + 1.641),
+                                    cos(angle * 5 + 2.14 + time * 0.00412)) * distort_amount_radial
+                             + vec2(sin(p.x * 0.01 + time * 0.00215 + 0.8123),
+                                    cos(p.y * 0.01 + time * 0.005931)) * distort_amount_xy;
+            }"""
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/ripple/RippleView.kt b/packages/SystemUI/src/com/android/systemui/ripple/RippleView.kt
new file mode 100644
index 0000000..83d9f2d
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/ripple/RippleView.kt
@@ -0,0 +1,151 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.ripple
+
+import android.animation.Animator
+import android.animation.AnimatorListenerAdapter
+import android.animation.ValueAnimator
+import android.content.Context
+import android.content.res.Configuration
+import android.graphics.Canvas
+import android.graphics.Paint
+import android.util.AttributeSet
+import android.view.View
+import com.android.systemui.ripple.RippleShader.RippleShape
+
+private const val RIPPLE_SPARKLE_STRENGTH: Float = 0.3f
+private const val RIPPLE_DEFAULT_COLOR: Int = 0xffffffff.toInt()
+
+/**
+ * A generic expanding ripple effect.
+ *
+ * Set up the shader with a desired [RippleShape] using [setupShader], [setMaxSize] and [setCenter],
+ * then call [startRipple] to trigger the ripple expansion.
+ */
+open class RippleView(context: Context?, attrs: AttributeSet?) : View(context, attrs) {
+
+    private lateinit var rippleShader: RippleShader
+    private lateinit var rippleShape: RippleShape
+    private val ripplePaint = Paint()
+
+    var rippleInProgress: Boolean = false
+    var duration: Long = 1750
+
+    private var maxWidth: Float = 0.0f
+    private var maxHeight: Float = 0.0f
+    fun setMaxSize(maxWidth: Float, maxHeight: Float) {
+        this.maxWidth = maxWidth
+        this.maxHeight = maxHeight
+        rippleShader.setMaxSize(maxWidth, maxHeight)
+    }
+
+    private var centerX: Float = 0.0f
+    private var centerY: Float = 0.0f
+    fun setCenter(x: Float, y: Float) {
+        this.centerX = x
+        this.centerY = y
+        rippleShader.setCenter(x, y)
+    }
+
+    override fun onConfigurationChanged(newConfig: Configuration?) {
+        rippleShader.pixelDensity = resources.displayMetrics.density
+        super.onConfigurationChanged(newConfig)
+    }
+
+    override fun onAttachedToWindow() {
+        rippleShader.pixelDensity = resources.displayMetrics.density
+        super.onAttachedToWindow()
+    }
+
+    /** Initializes the shader. Must be called before [startRipple]. */
+    fun setupShader(rippleShape: RippleShape = RippleShape.CIRCLE) {
+        this.rippleShape = rippleShape
+        rippleShader = RippleShader(rippleShape)
+
+        rippleShader.color = RIPPLE_DEFAULT_COLOR
+        rippleShader.progress = 0f
+        rippleShader.sparkleStrength = RIPPLE_SPARKLE_STRENGTH
+
+        ripplePaint.shader = rippleShader
+    }
+
+    @JvmOverloads
+    fun startRipple(onAnimationEnd: Runnable? = null) {
+        if (rippleInProgress) {
+            return // Ignore if ripple effect is already playing
+        }
+        val animator = ValueAnimator.ofFloat(0f, 1f)
+        animator.duration = duration
+        animator.addUpdateListener { updateListener ->
+            val now = updateListener.currentPlayTime
+            val progress = updateListener.animatedValue as Float
+            rippleShader.progress = progress
+            rippleShader.distortionStrength = 1 - progress
+            rippleShader.time = now.toFloat()
+            invalidate()
+        }
+        animator.addListener(object : AnimatorListenerAdapter() {
+            override fun onAnimationEnd(animation: Animator?) {
+                rippleInProgress = false
+                onAnimationEnd?.run()
+            }
+        })
+        animator.start()
+        rippleInProgress = true
+    }
+
+    /** Set the color to be used for the ripple. */
+    fun setColor(color: Int) {
+        rippleShader.color = color
+    }
+
+    /**
+     * Set whether the ripple should remain filled as the ripple expands.
+     *
+     * See [RippleShader.rippleFill].
+     */
+    fun setRippleFill(rippleFill: Boolean) {
+        rippleShader.rippleFill = rippleFill
+    }
+
+    override fun onDraw(canvas: Canvas?) {
+        if (canvas == null || !canvas.isHardwareAccelerated) {
+            // Drawing with the ripple shader requires hardware acceleration, so skip
+            // if it's unsupported.
+            return
+        }
+        // To reduce overdraw, we mask the effect to a circle or a rectangle that's bigger than the
+        // active effect area. Values here should be kept in sync with the animation implementation
+        // in the ripple shader.
+        if (rippleShape == RippleShape.CIRCLE) {
+            val maskRadius = (1 - (1 - rippleShader.progress) * (1 - rippleShader.progress) *
+                    (1 - rippleShader.progress)) * maxWidth
+            canvas.drawCircle(centerX, centerY, maskRadius, ripplePaint)
+        } else {
+            val maskWidth = (1 - (1 - rippleShader.progress) * (1 - rippleShader.progress) *
+                    (1 - rippleShader.progress)) * maxWidth * 2
+            val maskHeight = (1 - (1 - rippleShader.progress) * (1 - rippleShader.progress) *
+                    (1 - rippleShader.progress)) * maxHeight * 2
+            canvas.drawRect(
+                    /* left= */ centerX - maskWidth,
+                    /* top= */ centerY - maskHeight,
+                    /* right= */ centerX + maskWidth,
+                    /* bottom= */ centerY + maskHeight,
+                    ripplePaint)
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/ripple/SdfShaderLibrary.kt b/packages/SystemUI/src/com/android/systemui/ripple/SdfShaderLibrary.kt
new file mode 100644
index 0000000..7f26146
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/ripple/SdfShaderLibrary.kt
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.ripple
+
+/** Library class that contains 2D signed distance functions. */
+class SdfShaderLibrary {
+    companion object {
+        const val CIRCLE_SDF = """
+            float sdCircle(vec2 p, float r) {
+                return (length(p)-r) / r;
+            }
+
+            float circleRing(vec2 p, float radius) {
+                float thicknessHalf = radius * 0.25;
+
+                float outerCircle = sdCircle(p, radius + thicknessHalf);
+                float innerCircle = sdCircle(p, radius);
+
+                return subtract(outerCircle, innerCircle);
+            }
+        """
+
+        const val ROUNDED_BOX_SDF = """
+            float sdRoundedBox(vec2 p, vec2 size, float cornerRadius) {
+                size *= 0.5;
+                cornerRadius *= 0.5;
+                vec2 d = abs(p)-size+cornerRadius;
+
+                float outside = length(max(d, 0.0));
+                float inside = min(max(d.x, d.y), 0.0);
+
+                return (outside+inside-cornerRadius)/size.y;
+            }
+
+            float roundedBoxRing(vec2 p, vec2 size, float cornerRadius,
+                float borderThickness) {
+                float outerRoundBox = sdRoundedBox(p, size, cornerRadius);
+                float innerRoundBox = sdRoundedBox(p, size - vec2(borderThickness),
+                    cornerRadius - borderThickness);
+                return subtract(outerRoundBox, innerRoundBox);
+            }
+        """
+
+        // Used non-trigonometry parametrization and Halley's method (iterative) for root finding.
+        // This is more expensive than the regular circle SDF, recommend to use the circle SDF if
+        // possible.
+        const val ELLIPSE_SDF = """float sdEllipse(vec2 p, vec2 wh) {
+            wh *= 0.5;
+
+            // symmetry
+            (wh.x > wh.y) ? wh = wh.yx, p = abs(p.yx) : p = abs(p);
+
+            vec2 u = wh*p, v = wh*wh;
+
+            float U1 = u.y/2.0;  float U5 = 4.0*U1;
+            float U2 = v.y-v.x;  float U6 = 6.0*U1;
+            float U3 = u.x-U2;   float U7 = 3.0*U3;
+            float U4 = u.x+U2;
+
+            float t = 0.5;
+            for (int i = 0; i < 3; i ++) {
+                float F1 = t*(t*t*(U1*t+U3)+U4)-U1;
+                float F2 = t*t*(U5*t+U7)+U4;
+                float F3 = t*(U6*t+U7);
+
+                t += (F1*F2)/(F1*F3-F2*F2);
+            }
+
+            t = clamp(t, 0.0, 1.0);
+
+            float d = distance(p, wh*vec2(1.0-t*t,2.0*t)/(t*t+1.0));
+            d /= wh.y;
+
+            return (dot(p/wh,p/wh)>1.0) ? d : -d;
+        }
+
+        float ellipseRing(vec2 p, vec2 wh) {
+            vec2 thicknessHalf = wh * 0.25;
+
+            float outerEllipse = sdEllipse(p, wh + thicknessHalf);
+            float innerEllipse = sdEllipse(p, wh);
+
+            return subtract(outerEllipse, innerEllipse);
+        }
+        """
+
+        const val SHADER_SDF_OPERATION_LIB = """
+            float soften(float d, float blur) {
+                float blurHalf = blur * 0.5;
+                return smoothstep(-blurHalf, blurHalf, d);
+            }
+
+            float subtract(float outer, float inner) {
+                return max(outer, -inner);
+            }
+        """
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingController.java b/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingController.java
index 1a08878..1083f22 100644
--- a/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingController.java
+++ b/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingController.java
@@ -29,8 +29,11 @@
 import androidx.annotation.Nullable;
 
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.systemui.animation.DialogLaunchAnimator;
 import com.android.systemui.broadcast.BroadcastDispatcher;
 import com.android.systemui.dagger.SysUISingleton;
+import com.android.systemui.flags.FeatureFlags;
+import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.settings.UserContextProvider;
 import com.android.systemui.statusbar.policy.CallbackController;
 
@@ -94,9 +97,11 @@
     }
 
     /** Create a dialog to show screen recording options to the user. */
-    public ScreenRecordDialog createScreenRecordDialog(Context context,
+    public ScreenRecordDialog createScreenRecordDialog(Context context, FeatureFlags flags,
+            DialogLaunchAnimator dialogLaunchAnimator, ActivityStarter activityStarter,
             @Nullable Runnable onStartRecordingClicked) {
-        return new ScreenRecordDialog(context, this, mUserContextProvider, onStartRecordingClicked);
+        return new ScreenRecordDialog(context, this, activityStarter, mUserContextProvider,
+                flags, dialogLaunchAnimator, onStartRecordingClicked);
     }
 
     /**
diff --git a/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java b/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java
index 5bb3413..0477626 100644
--- a/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java
+++ b/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java
@@ -16,6 +16,7 @@
 
 package com.android.systemui.screenrecord;
 
+import android.annotation.Nullable;
 import android.app.Notification;
 import android.app.NotificationChannel;
 import android.app.NotificationManager;
@@ -29,6 +30,7 @@
 import android.media.MediaRecorder;
 import android.net.Uri;
 import android.os.Bundle;
+import android.os.Handler;
 import android.os.IBinder;
 import android.os.RemoteException;
 import android.os.UserHandle;
@@ -40,6 +42,9 @@
 import com.android.internal.logging.UiEventLogger;
 import com.android.systemui.R;
 import com.android.systemui.dagger.qualifiers.LongRunning;
+import com.android.systemui.dagger.qualifiers.Main;
+import com.android.systemui.media.MediaProjectionCaptureTarget;
+import com.android.systemui.screenrecord.ScreenMediaRecorder.ScreenMediaRecorderListener;
 import com.android.systemui.settings.UserContextProvider;
 import com.android.systemui.statusbar.phone.KeyguardDismissUtil;
 
@@ -51,9 +56,10 @@
 /**
  * A service which records the device screen and optionally microphone input.
  */
-public class RecordingService extends Service implements MediaRecorder.OnInfoListener {
+public class RecordingService extends Service implements ScreenMediaRecorderListener {
     public static final int REQUEST_CODE = 2;
 
+    private static final int USER_ID_NOT_SPECIFIED = -1;
     private static final int NOTIFICATION_RECORDING_ID = 4274;
     private static final int NOTIFICATION_PROCESSING_ID = 4275;
     private static final int NOTIFICATION_VIEW_ID = 4273;
@@ -63,6 +69,7 @@
     private static final String EXTRA_PATH = "extra_path";
     private static final String EXTRA_AUDIO_SOURCE = "extra_useAudio";
     private static final String EXTRA_SHOW_TAPS = "extra_showTaps";
+    private static final String EXTRA_CAPTURE_TARGET = "extra_captureTarget";
 
     private static final String ACTION_START = "com.android.systemui.screenrecord.START";
     private static final String ACTION_STOP = "com.android.systemui.screenrecord.STOP";
@@ -73,6 +80,7 @@
 
     private final RecordingController mController;
     private final KeyguardDismissUtil mKeyguardDismissUtil;
+    private final Handler mMainHandler;
     private ScreenRecordingAudioSource mAudioSource;
     private boolean mShowTaps;
     private boolean mOriginalShowTaps;
@@ -84,10 +92,12 @@
 
     @Inject
     public RecordingService(RecordingController controller, @LongRunning Executor executor,
-            UiEventLogger uiEventLogger, NotificationManager notificationManager,
+            @Main Handler handler, UiEventLogger uiEventLogger,
+            NotificationManager notificationManager,
             UserContextProvider userContextTracker, KeyguardDismissUtil keyguardDismissUtil) {
         mController = controller;
         mLongExecutor = executor;
+        mMainHandler = handler;
         mUiEventLogger = uiEventLogger;
         mNotificationManager = notificationManager;
         mUserContextTracker = userContextTracker;
@@ -103,14 +113,18 @@
      * @param audioSource   The ordinal value of the audio source
      *                      {@link com.android.systemui.screenrecord.ScreenRecordingAudioSource}
      * @param showTaps   True to make touches visible while recording
+     * @param captureTarget   pass this parameter to capture a specific part instead
+     *                        of the full screen
      */
     public static Intent getStartIntent(Context context, int resultCode,
-            int audioSource, boolean showTaps) {
+            int audioSource, boolean showTaps,
+            @Nullable MediaProjectionCaptureTarget captureTarget) {
         return new Intent(context, RecordingService.class)
                 .setAction(ACTION_START)
                 .putExtra(EXTRA_RESULT_CODE, resultCode)
                 .putExtra(EXTRA_AUDIO_SOURCE, audioSource)
-                .putExtra(EXTRA_SHOW_TAPS, showTaps);
+                .putExtra(EXTRA_SHOW_TAPS, showTaps)
+                .putExtra(EXTRA_CAPTURE_TARGET, captureTarget);
     }
 
     @Override
@@ -129,6 +143,9 @@
                         .values()[intent.getIntExtra(EXTRA_AUDIO_SOURCE, 0)];
                 Log.d(TAG, "recording with audio source" + mAudioSource);
                 mShowTaps = intent.getBooleanExtra(EXTRA_SHOW_TAPS, false);
+                MediaProjectionCaptureTarget captureTarget =
+                        intent.getParcelableExtra(EXTRA_CAPTURE_TARGET,
+                                MediaProjectionCaptureTarget.class);
 
                 mOriginalShowTaps = Settings.System.getInt(
                         getApplicationContext().getContentResolver(),
@@ -138,8 +155,10 @@
 
                 mRecorder = new ScreenMediaRecorder(
                         mUserContextTracker.getUserContext(),
+                        mMainHandler,
                         currentUserId,
                         mAudioSource,
+                        captureTarget,
                         this
                 );
 
@@ -166,14 +185,8 @@
                 }
                 // Check user ID - we may be getting a stop intent after user switch, in which case
                 // we want to post the notifications for that user, which is NOT current user
-                int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1);
-                if (userId == -1) {
-                    userId = mUserContextTracker.getUserContext().getUserId();
-                }
-                Log.d(TAG, "notifying for user " + userId);
-                stopRecording(userId);
-                mNotificationManager.cancel(NOTIFICATION_RECORDING_ID);
-                stopSelf();
+                int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, USER_ID_NOT_SPECIFIED);
+                stopService(userId);
                 break;
 
             case ACTION_SHARE:
@@ -378,15 +391,39 @@
         return builder.build();
     }
 
-    private void stopRecording(int userId) {
+    private void stopService() {
+        stopService(USER_ID_NOT_SPECIFIED);
+    }
+
+    private void stopService(int userId) {
+        if (userId == USER_ID_NOT_SPECIFIED) {
+            userId = mUserContextTracker.getUserContext().getUserId();
+        }
+        Log.d(TAG, "notifying for user " + userId);
         setTapsVisible(mOriginalShowTaps);
         if (getRecorder() != null) {
-            getRecorder().end();
-            saveRecording(userId);
+            try {
+                getRecorder().end();
+                saveRecording(userId);
+            } catch (RuntimeException exception) {
+                // RuntimeException could happen if the recording stopped immediately after starting
+                // let's release the recorder and delete all temporary files in this case
+                getRecorder().release();
+                showErrorToast(R.string.screenrecord_start_error);
+                Log.e(TAG, "stopRecording called, but there was an error when ending"
+                        + "recording");
+                exception.printStackTrace();
+            } catch (Throwable throwable) {
+                // Something unexpected happen, SystemUI will crash but let's delete
+                // the temporary files anyway
+                getRecorder().release();
+                throw new RuntimeException(throwable);
+            }
         } else {
             Log.e(TAG, "stopRecording called, but recorder was null");
         }
         updateState(false);
+        stopSelf();
     }
 
     private void saveRecording(int userId) {
@@ -446,4 +483,12 @@
         Log.d(TAG, "Media recorder info: " + what);
         onStartCommand(getStopIntent(this), 0, 0);
     }
+
+    @Override
+    public void onStopped() {
+        if (mController.isRecording()) {
+            Log.d(TAG, "Stopping recording because the system requested the stop");
+            stopService();
+        }
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenMediaRecorder.java b/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenMediaRecorder.java
index 2133cf6..b8d96f7 100644
--- a/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenMediaRecorder.java
+++ b/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenMediaRecorder.java
@@ -40,6 +40,7 @@
 import android.media.projection.MediaProjection;
 import android.media.projection.MediaProjectionManager;
 import android.net.Uri;
+import android.os.Handler;
 import android.os.IBinder;
 import android.os.RemoteException;
 import android.os.ServiceManager;
@@ -50,17 +51,21 @@
 import android.view.Surface;
 import android.view.WindowManager;
 
+import com.android.systemui.media.MediaProjectionCaptureTarget;
 import java.io.File;
+import java.io.Closeable;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.nio.file.Files;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
 /**
  * Recording screen and mic/internal audio
  */
-public class ScreenMediaRecorder {
+public class ScreenMediaRecorder extends MediaProjection.Callback {
     private static final int TOTAL_NUM_TRACKS = 1;
     private static final int VIDEO_FRAME_RATE = 30;
     private static final int VIDEO_FRAME_RATE_TO_RESOLUTION_RATIO = 6;
@@ -81,15 +86,20 @@
     private ScreenRecordingMuxer mMuxer;
     private ScreenInternalAudioRecorder mAudio;
     private ScreenRecordingAudioSource mAudioSource;
+    private final MediaProjectionCaptureTarget mCaptureRegion;
+    private final Handler mHandler;
 
     private Context mContext;
-    MediaRecorder.OnInfoListener mListener;
+    ScreenMediaRecorderListener mListener;
 
-    public ScreenMediaRecorder(Context context,
+    public ScreenMediaRecorder(Context context, Handler handler,
             int user, ScreenRecordingAudioSource audioSource,
-            MediaRecorder.OnInfoListener listener) {
+            MediaProjectionCaptureTarget captureRegion,
+            ScreenMediaRecorderListener listener) {
         mContext = context;
+        mHandler = handler;
         mUser = user;
+        mCaptureRegion = captureRegion;
         mListener = listener;
         mAudioSource = audioSource;
     }
@@ -102,9 +112,12 @@
         IMediaProjection proj = null;
         proj = mediaService.createProjection(mUser, mContext.getPackageName(),
                     MediaProjectionManager.TYPE_SCREEN_CAPTURE, false);
-        IBinder projection = proj.asBinder();
-        mMediaProjection = new MediaProjection(mContext,
-                IMediaProjection.Stub.asInterface(projection));
+        IMediaProjection projection = IMediaProjection.Stub.asInterface(proj.asBinder());
+        if (mCaptureRegion != null) {
+            projection.setLaunchCookie(mCaptureRegion.getLaunchCookie());
+        }
+        mMediaProjection = new MediaProjection(mContext, projection);
+        mMediaProjection.registerCallback(this, mHandler);
 
         File cacheDir = mContext.getCacheDir();
         cacheDir.mkdirs();
@@ -162,10 +175,15 @@
                 metrics.densityDpi,
                 DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
                 mInputSurface,
-                null,
-                null);
+                new VirtualDisplay.Callback() {
+                    @Override
+                    public void onStopped() {
+                        onStop();
+                    }
+                },
+                mHandler);
 
-        mMediaRecorder.setOnInfoListener(mListener);
+        mMediaRecorder.setOnInfoListener((mr, what, extra) -> mListener.onInfo(mr, what, extra));
         if (mAudioSource == INTERNAL ||
                 mAudioSource == MIC_AND_INTERNAL) {
             mTempAudioFile = File.createTempFile("temp", ".aac",
@@ -259,21 +277,34 @@
     }
 
     /**
-     * End screen recording
+     * End screen recording, throws an exception if stopping recording failed
      */
-    void end() {
-        mMediaRecorder.stop();
-        mMediaRecorder.release();
-        mInputSurface.release();
-        mVirtualDisplay.release();
-        mMediaProjection.stop();
+    void end() throws IOException {
+        Closer closer = new Closer();
+
+        // MediaRecorder might throw RuntimeException if stopped immediately after starting
+        // We should remove the recording in this case as it will be invalid
+        closer.register(mMediaRecorder::stop);
+        closer.register(mMediaRecorder::release);
+        closer.register(mInputSurface::release);
+        closer.register(mVirtualDisplay::release);
+        closer.register(mMediaProjection::stop);
+        closer.register(this::stopInternalAudioRecording);
+
+        closer.close();
+
         mMediaRecorder = null;
         mMediaProjection = null;
-        stopInternalAudioRecording();
 
         Log.d(TAG, "end recording");
     }
 
+    @Override
+    public void onStop() {
+        Log.d(TAG, "The system notified about stopping the projection");
+        mListener.onStopped();
+    }
+
     private void stopInternalAudioRecording() {
         if (mAudioSource == INTERNAL || mAudioSource == MIC_AND_INTERNAL) {
             mAudio.end();
@@ -337,6 +368,18 @@
     }
 
     /**
+     * Release the resources without saving the data
+     */
+    protected void release() {
+        if (mTempVideoFile != null) {
+            mTempVideoFile.delete();
+        }
+        if (mTempAudioFile != null) {
+            mTempAudioFile.delete();
+        }
+    }
+
+    /**
     * Object representing the recording
     */
     public class SavedRecording {
@@ -362,4 +405,66 @@
             return mThumbnailBitmap;
         }
     }
+
+    interface ScreenMediaRecorderListener {
+        /**
+         * Called to indicate an info or a warning during recording.
+         * See {@link MediaRecorder.OnInfoListener} for the full description.
+         */
+        void onInfo(MediaRecorder mr, int what, int extra);
+
+        /**
+         * Called when the recording stopped by the system.
+         * For example, this might happen when doing partial screen sharing of an app
+         * and the app that is being captured is closed.
+         */
+        void onStopped();
+    }
+
+    /**
+     * Allows to register multiple {@link Closeable} objects and close them all by calling
+     * {@link Closer#close}. If there is an exception thrown during closing of one
+     * of the registered closeables it will continue trying closing the rest closeables.
+     * If there are one or more exceptions thrown they will be re-thrown at the end.
+     * In case of multiple exceptions only the first one will be thrown and all the rest
+     * will be printed.
+     */
+    private static class Closer implements Closeable {
+        private final List<Closeable> mCloseables = new ArrayList<>();
+
+        void register(Closeable closeable) {
+            mCloseables.add(closeable);
+        }
+
+        @Override
+        public void close() throws IOException {
+            Throwable throwable = null;
+
+            for (int i = 0; i < mCloseables.size(); i++) {
+                Closeable closeable = mCloseables.get(i);
+
+                try {
+                    closeable.close();
+                } catch (Throwable e) {
+                    if (throwable == null) {
+                        throwable = e;
+                    } else {
+                        e.printStackTrace();
+                    }
+                }
+            }
+
+            if (throwable != null) {
+                if (throwable instanceof IOException) {
+                    throw (IOException) throwable;
+                }
+
+                if (throwable instanceof RuntimeException) {
+                    throw (RuntimeException) throwable;
+                }
+
+                throw (Error) throwable;
+            }
+        }
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordDialog.java b/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordDialog.java
index 1fb88df..efa45a4 100644
--- a/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordDialog.java
@@ -16,6 +16,10 @@
 
 package com.android.systemui.screenrecord;
 
+import static android.app.Activity.RESULT_OK;
+
+import static com.android.systemui.media.MediaProjectionAppSelectorActivity.EXTRA_CAPTURE_REGION_RESULT_RECEIVER;
+import static com.android.systemui.media.MediaProjectionAppSelectorActivity.KEY_CAPTURE_TARGET;
 import static com.android.systemui.screenrecord.ScreenRecordingAudioSource.INTERNAL;
 import static com.android.systemui.screenrecord.ScreenRecordingAudioSource.MIC;
 import static com.android.systemui.screenrecord.ScreenRecordingAudioSource.MIC_AND_INTERNAL;
@@ -24,8 +28,13 @@
 import android.app.Activity;
 import android.app.PendingIntent;
 import android.content.Context;
+import android.content.Intent;
 import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.ResultReceiver;
 import android.view.Gravity;
+import android.view.View;
 import android.view.Window;
 import android.view.WindowManager;
 import android.widget.ArrayAdapter;
@@ -36,6 +45,13 @@
 import androidx.annotation.Nullable;
 
 import com.android.systemui.R;
+import com.android.systemui.animation.ActivityLaunchAnimator;
+import com.android.systemui.animation.DialogLaunchAnimator;
+import com.android.systemui.flags.FeatureFlags;
+import com.android.systemui.flags.Flags;
+import com.android.systemui.media.MediaProjectionAppSelectorActivity;
+import com.android.systemui.media.MediaProjectionCaptureTarget;
+import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.settings.UserContextProvider;
 import com.android.systemui.statusbar.phone.SystemUIDialog;
 
@@ -55,15 +71,23 @@
     private final UserContextProvider mUserContextProvider;
     @Nullable
     private final Runnable mOnStartRecordingClicked;
+    private final ActivityStarter mActivityStarter;
+    private final FeatureFlags mFlags;
+    private final DialogLaunchAnimator mDialogLaunchAnimator;
     private Switch mTapsSwitch;
     private Switch mAudioSwitch;
     private Spinner mOptions;
 
     public ScreenRecordDialog(Context context, RecordingController controller,
-            UserContextProvider userContextProvider, @Nullable Runnable onStartRecordingClicked) {
+            ActivityStarter activityStarter, UserContextProvider userContextProvider,
+            FeatureFlags flags, DialogLaunchAnimator dialogLaunchAnimator,
+            @Nullable Runnable onStartRecordingClicked) {
         super(context);
         mController = controller;
         mUserContextProvider = userContextProvider;
+        mActivityStarter = activityStarter;
+        mDialogLaunchAnimator = dialogLaunchAnimator;
+        mFlags = flags;
         mOnStartRecordingClicked = onStartRecordingClicked;
     }
 
@@ -91,10 +115,36 @@
                 mOnStartRecordingClicked.run();
             }
 
-            requestScreenCapture();
+            // Start full-screen recording
+            requestScreenCapture(/* captureTarget= */ null);
             dismiss();
         });
 
+        if (mFlags.isEnabled(Flags.WM_ENABLE_PARTIAL_SCREEN_SHARING)) {
+            TextView appBtn = findViewById(R.id.button_app);
+
+            appBtn.setVisibility(View.VISIBLE);
+            appBtn.setOnClickListener(v -> {
+                Intent intent = new Intent(getContext(), MediaProjectionAppSelectorActivity.class);
+                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+
+                // We can't start activity for result here so we use result receiver to get
+                // the selected target to capture
+                intent.putExtra(EXTRA_CAPTURE_REGION_RESULT_RECEIVER,
+                        new CaptureTargetResultReceiver());
+
+                ActivityLaunchAnimator.Controller animationController =
+                        mDialogLaunchAnimator.createActivityLaunchController(appBtn);
+
+                if (animationController == null) {
+                    dismiss();
+                }
+
+                mActivityStarter.startActivity(intent, /* dismissShade= */ true,
+                        animationController);
+            });
+        }
+
         mAudioSwitch = findViewById(R.id.screenrecord_audio_switch);
         mTapsSwitch = findViewById(R.id.screenrecord_taps_switch);
         mOptions = findViewById(R.id.screen_recording_options);
@@ -108,7 +158,12 @@
         });
     }
 
-    private void requestScreenCapture() {
+    /**
+     * Starts screen capture after some countdown
+     * @param captureTarget target to capture (could be e.g. a task) or
+     *                      null to record the whole screen
+     */
+    private void requestScreenCapture(@Nullable MediaProjectionCaptureTarget captureTarget) {
         Context userContext = mUserContextProvider.getUserContext();
         boolean showTaps = mTapsSwitch.isChecked();
         ScreenRecordingAudioSource audioMode = mAudioSwitch.isChecked()
@@ -118,7 +173,7 @@
                 RecordingService.REQUEST_CODE,
                 RecordingService.getStartIntent(
                         userContext, Activity.RESULT_OK,
-                        audioMode.ordinal(), showTaps),
+                        audioMode.ordinal(), showTaps, captureTarget),
                 PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
         PendingIntent stopIntent = PendingIntent.getService(userContext,
                 RecordingService.REQUEST_CODE,
@@ -126,4 +181,22 @@
                 PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
         mController.startCountdown(DELAY_MS, INTERVAL_MS, startIntent, stopIntent);
     }
+
+    private class CaptureTargetResultReceiver extends ResultReceiver {
+
+        CaptureTargetResultReceiver() {
+            super(new Handler(Looper.getMainLooper()));
+        }
+
+        @Override
+        protected void onReceiveResult(int resultCode, Bundle resultData) {
+            if (resultCode == RESULT_OK) {
+                MediaProjectionCaptureTarget captureTarget = resultData
+                        .getParcelable(KEY_CAPTURE_TARGET, MediaProjectionCaptureTarget.class);
+
+                // Start recording of the selected target
+                requestScreenCapture(captureTarget);
+            }
+        }
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ActionProxyReceiver.java b/packages/SystemUI/src/com/android/systemui/screenshot/ActionProxyReceiver.java
index daaa8973..814b8e9 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/ActionProxyReceiver.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/ActionProxyReceiver.java
@@ -102,7 +102,7 @@
                     ? ACTION_TYPE_EDIT
                     : ACTION_TYPE_SHARE;
             mScreenshotSmartActions.notifyScreenshotAction(
-                    context, intent.getStringExtra(EXTRA_ID), actionType, false, null);
+                    intent.getStringExtra(EXTRA_ID), actionType, false, null);
         }
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/DeleteScreenshotReceiver.java b/packages/SystemUI/src/com/android/systemui/screenshot/DeleteScreenshotReceiver.java
index 8d44205..e0346f2 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/DeleteScreenshotReceiver.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/DeleteScreenshotReceiver.java
@@ -62,7 +62,7 @@
         });
         if (intent.getBooleanExtra(EXTRA_SMART_ACTIONS_ENABLED, false)) {
             mScreenshotSmartActions.notifyScreenshotAction(
-                    context, intent.getStringExtra(EXTRA_ID), ACTION_TYPE_DELETE, false, null);
+                    intent.getStringExtra(EXTRA_ID), ACTION_TYPE_DELETE, false, null);
         }
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ImageCapture.kt b/packages/SystemUI/src/com/android/systemui/screenshot/ImageCapture.kt
new file mode 100644
index 0000000..39f35a5
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/ImageCapture.kt
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.screenshot
+
+import android.graphics.Bitmap
+import android.graphics.Rect
+
+interface ImageCapture {
+
+    fun captureDisplay(displayId: Int, crop: Rect? = null): Bitmap?
+
+    fun captureTask(taskId: Int): Bitmap?
+}
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ImageCaptureImpl.kt b/packages/SystemUI/src/com/android/systemui/screenshot/ImageCaptureImpl.kt
new file mode 100644
index 0000000..258c436
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/ImageCaptureImpl.kt
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.screenshot
+
+import android.app.IActivityTaskManager
+import android.graphics.Bitmap
+import android.graphics.Rect
+import android.hardware.display.DisplayManager
+import android.os.IBinder
+import android.util.Log
+import android.view.DisplayAddress
+import android.view.SurfaceControl
+import android.view.SurfaceControl.DisplayCaptureArgs
+import android.view.SurfaceControl.ScreenshotHardwareBuffer
+import androidx.annotation.VisibleForTesting
+import javax.inject.Inject
+
+private const val TAG = "ImageCaptureImpl"
+
+open class ImageCaptureImpl @Inject constructor(
+    private val displayManager: DisplayManager,
+    private val atmService: IActivityTaskManager
+) : ImageCapture {
+
+    override fun captureDisplay(displayId: Int, crop: Rect?): Bitmap? {
+        val width = crop?.width() ?: 0
+        val height = crop?.height() ?: 0
+        val sourceCrop = crop ?: Rect()
+        val displayToken = physicalDisplayToken(displayId) ?: return null
+        val buffer = captureDisplay(displayToken, width, height, sourceCrop)
+
+        return buffer?.asBitmap()
+    }
+
+    override fun captureTask(taskId: Int): Bitmap? {
+        val snapshot = atmService.takeTaskSnapshot(taskId)
+        return Bitmap.wrapHardwareBuffer(snapshot.hardwareBuffer, snapshot.colorSpace)
+    }
+
+    @VisibleForTesting
+    open fun physicalDisplayToken(displayId: Int): IBinder? {
+        val display = displayManager.getDisplay(displayId)
+        if (display == null) {
+            Log.e(TAG, "No display with id: $displayId")
+            return null
+        }
+        val address = display.address
+        if (address !is DisplayAddress.Physical) {
+            Log.e(TAG, "Display does not have a physical address: $display")
+            return null
+        }
+        return SurfaceControl.getPhysicalDisplayToken(address.physicalDisplayId)
+    }
+
+    @VisibleForTesting
+    open fun captureDisplay(displayToken: IBinder, width: Int, height: Int, crop: Rect): ScreenshotHardwareBuffer? {
+        val captureArgs = DisplayCaptureArgs.Builder(displayToken)
+            .setSize(width, height)
+            .setSourceCrop(crop)
+            .build()
+        return SurfaceControl.captureDisplay(captureArgs)
+    }
+
+}
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ReferenceScreenshotModule.java b/packages/SystemUI/src/com/android/systemui/screenshot/ReferenceScreenshotModule.java
new file mode 100644
index 0000000..6224e1b
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/ReferenceScreenshotModule.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.screenshot;
+
+import dagger.Module;
+import dagger.Provides;
+
+/**
+ *
+ */
+@Module
+public interface ReferenceScreenshotModule {
+    /** */
+    @Provides
+    static ScreenshotNotificationSmartActionsProvider providesScrnshtNotifSmartActionsProvider() {
+        return new ScreenshotNotificationSmartActionsProvider();
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/RequestProcessor.kt b/packages/SystemUI/src/com/android/systemui/screenshot/RequestProcessor.kt
new file mode 100644
index 0000000..beb54c8
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/RequestProcessor.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.screenshot
+
+import android.net.Uri
+import android.util.Log
+import android.view.WindowManager.ScreenshotType
+import android.view.WindowManager.TAKE_SCREENSHOT_FULLSCREEN
+import android.view.WindowManager.TAKE_SCREENSHOT_PROVIDED_IMAGE
+import android.view.WindowManager.TAKE_SCREENSHOT_SELECTED_REGION
+import com.android.internal.util.ScreenshotHelper.HardwareBitmapBundler
+import com.android.internal.util.ScreenshotHelper.ScreenshotRequest
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.screenshot.TakeScreenshotService.RequestCallback
+import java.util.function.Consumer
+import javax.inject.Inject
+
+/**
+ * Processes a screenshot request sent from {@link ScreenshotHelper}.
+ */
+@SysUISingleton
+internal class RequestProcessor @Inject constructor(
+    private val controller: ScreenshotController,
+) {
+    fun processRequest(
+        @ScreenshotType type: Int,
+        onSavedListener: Consumer<Uri>,
+        request: ScreenshotRequest,
+        callback: RequestCallback
+    ) {
+
+        if (type == TAKE_SCREENSHOT_PROVIDED_IMAGE) {
+            val image = HardwareBitmapBundler.bundleToHardwareBitmap(request.bitmapBundle)
+
+            controller.handleImageAsScreenshot(
+                image, request.boundsInScreen, request.insets,
+                request.taskId, request.userId, request.topComponent, onSavedListener, callback
+            )
+            return
+        }
+
+        when (type) {
+            TAKE_SCREENSHOT_FULLSCREEN ->
+                controller.takeScreenshotFullscreen(null, onSavedListener, callback)
+            TAKE_SCREENSHOT_SELECTED_REGION ->
+                controller.takeScreenshotPartial(null, onSavedListener, callback)
+            else -> Log.w(TAG, "Invalid screenshot option: $type")
+        }
+    }
+
+    companion object {
+        const val TAG: String = "RequestProcessor"
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/SaveImageInBackgroundTask.java b/packages/SystemUI/src/com/android/systemui/screenshot/SaveImageInBackgroundTask.java
index 50ee1f7..f248d69 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/SaveImageInBackgroundTask.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/SaveImageInBackgroundTask.java
@@ -38,7 +38,6 @@
 import android.net.Uri;
 import android.os.AsyncTask;
 import android.os.Bundle;
-import android.os.Handler;
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.os.UserManager;
@@ -49,7 +48,6 @@
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
 import com.android.systemui.R;
-import com.android.systemui.SystemUIFactory;
 import com.android.systemui.screenshot.ScreenshotController.SavedImageData.ActionTransition;
 
 import com.google.common.util.concurrent.ListenableFuture;
@@ -89,7 +87,10 @@
     SaveImageInBackgroundTask(Context context, ImageExporter exporter,
             ScreenshotSmartActions screenshotSmartActions,
             ScreenshotController.SaveImageInBackgroundData data,
-            Supplier<ActionTransition> sharedElementTransition) {
+            Supplier<ActionTransition> sharedElementTransition,
+            ScreenshotNotificationSmartActionsProvider
+                    screenshotNotificationSmartActionsProvider
+    ) {
         mContext = context;
         mScreenshotSmartActions = screenshotSmartActions;
         mImageData = new ScreenshotController.SavedImageData();
@@ -103,15 +104,7 @@
         // Initialize screenshot notification smart actions provider.
         mSmartActionsEnabled = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SYSTEMUI,
                 SystemUiDeviceConfigFlags.ENABLE_SCREENSHOT_NOTIFICATION_SMART_ACTIONS, true);
-        if (mSmartActionsEnabled) {
-            mSmartActionsProvider =
-                    SystemUIFactory.getInstance()
-                            .createScreenshotNotificationSmartActionsProvider(
-                                    context, THREAD_POOL_EXECUTOR, new Handler());
-        } else {
-            // If smart actions is not enabled use empty implementation.
-            mSmartActionsProvider = new ScreenshotNotificationSmartActionsProvider();
-        }
+        mSmartActionsProvider = screenshotNotificationSmartActionsProvider;
     }
 
     @Override
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java
index c213f19..69ee8e8 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java
@@ -57,14 +57,12 @@
 import android.media.MediaPlayer;
 import android.net.Uri;
 import android.os.Bundle;
-import android.os.IBinder;
 import android.os.RemoteException;
 import android.provider.Settings;
 import android.util.DisplayMetrics;
 import android.util.Log;
 import android.util.Pair;
 import android.view.Display;
-import android.view.DisplayAddress;
 import android.view.IRemoteAnimationFinishedCallback;
 import android.view.IRemoteAnimationRunner;
 import android.view.KeyEvent;
@@ -72,7 +70,6 @@
 import android.view.RemoteAnimationAdapter;
 import android.view.RemoteAnimationTarget;
 import android.view.ScrollCaptureResponse;
-import android.view.SurfaceControl;
 import android.view.View;
 import android.view.ViewRootImpl;
 import android.view.ViewTreeObserver;
@@ -249,6 +246,7 @@
     private final ScreenshotSmartActions mScreenshotSmartActions;
     private final UiEventLogger mUiEventLogger;
     private final ImageExporter mImageExporter;
+    private final ImageCapture mImageCapture;
     private final Executor mMainExecutor;
     private final ExecutorService mBgExecutor;
     private final BroadcastSender mBroadcastSender;
@@ -263,6 +261,8 @@
     private final ScrollCaptureController mScrollCaptureController;
     private final LongScreenshotData mLongScreenshotHolder;
     private final boolean mIsLowRamDevice;
+    private final ScreenshotNotificationSmartActionsProvider
+            mScreenshotNotificationSmartActionsProvider;
     private final TimeoutHandler mScreenshotHandler;
 
     private ScreenshotView mScreenshotView;
@@ -293,21 +293,26 @@
             ScrollCaptureClient scrollCaptureClient,
             UiEventLogger uiEventLogger,
             ImageExporter imageExporter,
+            ImageCapture imageCapture,
             @Main Executor mainExecutor,
             ScrollCaptureController scrollCaptureController,
             LongScreenshotData longScreenshotHolder,
             ActivityManager activityManager,
             TimeoutHandler timeoutHandler,
-            BroadcastSender broadcastSender) {
+            BroadcastSender broadcastSender,
+            ScreenshotNotificationSmartActionsProvider screenshotNotificationSmartActionsProvider
+    ) {
         mScreenshotSmartActions = screenshotSmartActions;
         mNotificationsController = screenshotNotificationsController;
         mScrollCaptureClient = scrollCaptureClient;
         mUiEventLogger = uiEventLogger;
         mImageExporter = imageExporter;
+        mImageCapture = imageCapture;
         mMainExecutor = mainExecutor;
         mScrollCaptureController = scrollCaptureController;
         mLongScreenshotHolder = longScreenshotHolder;
         mIsLowRamDevice = activityManager.isLowRamDevice();
+        mScreenshotNotificationSmartActionsProvider = screenshotNotificationSmartActionsProvider;
         mBgExecutor = Executors.newSingleThreadExecutor();
         mBroadcastSender = broadcastSender;
 
@@ -526,7 +531,7 @@
 
         // copy the input Rect, since SurfaceControl.screenshot can mutate it
         Rect screenRect = new Rect(crop);
-        Bitmap screenshot = captureScreenshot(crop);
+        Bitmap screenshot = mImageCapture.captureDisplay(DEFAULT_DISPLAY, crop);
 
         if (screenshot == null) {
             Log.e(TAG, "takeScreenshotInternal: Screenshot bitmap was null");
@@ -544,32 +549,6 @@
                 ClipboardOverlayController.SELF_PERMISSION);
     }
 
-    private Bitmap captureScreenshot(Rect crop) {
-        int width = crop.width();
-        int height = crop.height();
-        Bitmap screenshot = null;
-        final Display display = getDefaultDisplay();
-        final DisplayAddress address = display.getAddress();
-        if (!(address instanceof DisplayAddress.Physical)) {
-            Log.e(TAG, "Skipping Screenshot - Default display does not have a physical address: "
-                    + display);
-        } else {
-            final DisplayAddress.Physical physicalAddress = (DisplayAddress.Physical) address;
-
-            final IBinder displayToken = SurfaceControl.getPhysicalDisplayToken(
-                    physicalAddress.getPhysicalDisplayId());
-            final SurfaceControl.DisplayCaptureArgs captureArgs =
-                    new SurfaceControl.DisplayCaptureArgs.Builder(displayToken)
-                            .setSourceCrop(crop)
-                            .setSize(width, height)
-                            .build();
-            final SurfaceControl.ScreenshotHardwareBuffer screenshotBuffer =
-                    SurfaceControl.captureDisplay(captureArgs);
-            screenshot = screenshotBuffer == null ? null : screenshotBuffer.asBitmap();
-        }
-        return screenshot;
-    }
-
     private void saveScreenshot(Bitmap screenshot, Consumer<Uri> finisher, Rect screenRect,
             Insets screenInsets, ComponentName topComponent, boolean showFlash) {
         withWindowAttached(() ->
@@ -715,7 +694,7 @@
             mScreenshotView.showScrollChip(response.getPackageName(), /* onClick */ () -> {
                 DisplayMetrics displayMetrics = new DisplayMetrics();
                 getDefaultDisplay().getRealMetrics(displayMetrics);
-                Bitmap newScreenshot = captureScreenshot(
+                Bitmap newScreenshot = mImageCapture.captureDisplay(DEFAULT_DISPLAY,
                         new Rect(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels));
 
                 mScreenshotView.prepareScrollingTransition(response, mScreenBitmap, newScreenshot,
@@ -838,14 +817,20 @@
         // The media player creation is slow and needs on the background thread.
         return CallbackToFutureAdapter.getFuture((completer) -> {
             mBgExecutor.execute(() -> {
-                MediaPlayer player = MediaPlayer.create(mContext,
-                        Uri.fromFile(new File(mContext.getResources().getString(
-                                com.android.internal.R.string.config_cameraShutterSound))), null,
-                        new AudioAttributes.Builder()
-                                .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION)
-                                .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
-                                .build(), AudioSystem.newAudioSessionId());
-                completer.set(player);
+                try {
+                    MediaPlayer player = MediaPlayer.create(mContext,
+                            Uri.fromFile(new File(mContext.getResources().getString(
+                                    com.android.internal.R.string.config_cameraShutterSound))),
+                            null,
+                            new AudioAttributes.Builder()
+                                    .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION)
+                                    .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
+                                    .build(), AudioSystem.newAudioSessionId());
+                    completer.set(player);
+                } catch (IllegalStateException e) {
+                    Log.w(TAG, "Screenshot sound initialization failed", e);
+                    completer.set(null);
+                }
             });
             return "ScreenshotController#loadCameraSound";
         });
@@ -956,7 +941,8 @@
         }
 
         mSaveInBgTask = new SaveImageInBackgroundTask(mContext, mImageExporter,
-                mScreenshotSmartActions, data, getActionTransitionSupplier());
+                mScreenshotSmartActions, data, getActionTransitionSupplier(),
+                mScreenshotNotificationSmartActionsProvider);
         mSaveInBgTask.execute();
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotSmartActions.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotSmartActions.java
index 0527818..68b46d2 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotSmartActions.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotSmartActions.java
@@ -16,8 +16,6 @@
 
 package com.android.systemui.screenshot;
 
-import static android.os.AsyncTask.THREAD_POOL_EXECUTOR;
-
 import static com.android.systemui.screenshot.LogConfig.DEBUG_ACTIONS;
 import static com.android.systemui.screenshot.LogConfig.logTag;
 import static com.android.systemui.screenshot.ScreenshotNotificationSmartActionsProvider.ScreenshotSmartActionType;
@@ -25,17 +23,14 @@
 import android.app.ActivityManager;
 import android.app.Notification;
 import android.content.ComponentName;
-import android.content.Context;
 import android.content.Intent;
 import android.graphics.Bitmap;
 import android.net.Uri;
-import android.os.Handler;
 import android.os.SystemClock;
 import android.os.UserHandle;
 import android.util.Log;
 
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.systemui.SystemUIFactory;
 import com.android.systemui.dagger.SysUISingleton;
 import com.android.systemui.shared.system.ActivityManagerWrapper;
 
@@ -46,6 +41,7 @@
 import java.util.concurrent.TimeoutException;
 
 import javax.inject.Inject;
+import javax.inject.Provider;
 
 /**
  * Collects the static functions for retrieving and acting on smart actions.
@@ -53,9 +49,17 @@
 @SysUISingleton
 public class ScreenshotSmartActions {
     private static final String TAG = logTag(ScreenshotSmartActions.class);
+    private final Provider<ScreenshotNotificationSmartActionsProvider>
+            mScreenshotNotificationSmartActionsProviderProvider;
 
     @Inject
-    public ScreenshotSmartActions() {}
+    public ScreenshotSmartActions(
+            Provider<ScreenshotNotificationSmartActionsProvider>
+                    screenshotNotificationSmartActionsProviderProvider
+    ) {
+        mScreenshotNotificationSmartActionsProviderProvider =
+                screenshotNotificationSmartActionsProviderProvider;
+    }
 
     @VisibleForTesting
     CompletableFuture<List<Notification.Action>> getSmartActionsFuture(
@@ -165,12 +169,11 @@
         }
     }
 
-    void notifyScreenshotAction(Context context, String screenshotId, String action,
+    void notifyScreenshotAction(String screenshotId, String action,
             boolean isSmartAction, Intent intent) {
         try {
             ScreenshotNotificationSmartActionsProvider provider =
-                    SystemUIFactory.getInstance().createScreenshotNotificationSmartActionsProvider(
-                            context, THREAD_POOL_EXECUTOR, new Handler());
+                    mScreenshotNotificationSmartActionsProviderProvider.get();
             if (DEBUG_ACTIONS) {
                 Log.d(TAG, String.format("%s notifyAction: %s id=%s, isSmartAction=%b",
                         provider.getClass(), action, screenshotId, isSmartAction));
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/SmartActionsReceiver.java b/packages/SystemUI/src/com/android/systemui/screenshot/SmartActionsReceiver.java
index f703058..45af187 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/SmartActionsReceiver.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/SmartActionsReceiver.java
@@ -60,7 +60,7 @@
         }
 
         mScreenshotSmartActions.notifyScreenshotAction(
-                context, intent.getStringExtra(EXTRA_ID), actionType, true,
+                intent.getStringExtra(EXTRA_ID), actionType, true,
                 pendingIntent.getIntent());
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java b/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java
index 32d8203..f1f0223 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java
@@ -21,6 +21,7 @@
 
 import static com.android.internal.util.ScreenshotHelper.SCREENSHOT_MSG_PROCESS_COMPLETE;
 import static com.android.internal.util.ScreenshotHelper.SCREENSHOT_MSG_URI;
+import static com.android.systemui.flags.Flags.SCREENSHOT_REQUEST_PROCESSOR;
 import static com.android.systemui.screenshot.LogConfig.DEBUG_CALLBACK;
 import static com.android.systemui.screenshot.LogConfig.DEBUG_DISMISS;
 import static com.android.systemui.screenshot.LogConfig.DEBUG_SERVICE;
@@ -57,6 +58,8 @@
 import com.android.internal.util.ScreenshotHelper;
 import com.android.systemui.R;
 import com.android.systemui.dagger.qualifiers.Background;
+import com.android.systemui.flags.FeatureFlags;
+import com.android.systemui.flags.FlagListenable.FlagEvent;
 
 import java.util.concurrent.Executor;
 import java.util.function.Consumer;
@@ -75,6 +78,8 @@
     private final Handler mHandler;
     private final Context mContext;
     private final @Background Executor mBgExecutor;
+    private final RequestProcessor mProcessor;
+    private final FeatureFlags mFeatureFlags;
 
     private final BroadcastReceiver mCloseSystemDialogs = new BroadcastReceiver() {
         @Override
@@ -104,7 +109,8 @@
     public TakeScreenshotService(ScreenshotController screenshotController, UserManager userManager,
             DevicePolicyManager devicePolicyManager, UiEventLogger uiEventLogger,
             ScreenshotNotificationsController notificationsController, Context context,
-            @Background Executor bgExecutor) {
+            @Background Executor bgExecutor, FeatureFlags featureFlags,
+            RequestProcessor processor) {
         if (DEBUG_SERVICE) {
             Log.d(TAG, "new " + this);
         }
@@ -116,6 +122,9 @@
         mNotificationsController = notificationsController;
         mContext = context;
         mBgExecutor = bgExecutor;
+        mFeatureFlags = featureFlags;
+        mFeatureFlags.addListener(SCREENSHOT_REQUEST_PROCESSOR, FlagEvent::requestNoRestart);
+        mProcessor = processor;
     }
 
     @Override
@@ -218,6 +227,12 @@
         mUiEventLogger.log(ScreenshotEvent.getScreenshotSource(screenshotRequest.getSource()), 0,
                 topComponent == null ? "" : topComponent.getPackageName());
 
+        if (mFeatureFlags.isEnabled(SCREENSHOT_REQUEST_PROCESSOR)) {
+            Log.d(TAG, "handleMessage: Using request processor");
+            mProcessor.processRequest(msg.what, uriConsumer, screenshotRequest, requestCallback);
+            return true;
+        }
+
         switch (msg.what) {
             case WindowManager.TAKE_SCREENSHOT_FULLSCREEN:
                 if (DEBUG_SERVICE) {
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/dagger/ScreenshotModule.java b/packages/SystemUI/src/com/android/systemui/screenshot/dagger/ScreenshotModule.java
index 91ef3c3..3e44258 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/dagger/ScreenshotModule.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/dagger/ScreenshotModule.java
@@ -18,6 +18,8 @@
 
 import android.app.Service;
 
+import com.android.systemui.screenshot.ImageCapture;
+import com.android.systemui.screenshot.ImageCaptureImpl;
 import com.android.systemui.screenshot.TakeScreenshotService;
 
 import dagger.Binds;
@@ -37,4 +39,6 @@
     @ClassKey(TakeScreenshotService.class)
     public abstract Service bindTakeScreenshotService(TakeScreenshotService service);
 
+    @Binds
+    public abstract ImageCapture bindImageCapture(ImageCaptureImpl capture);
 }
diff --git a/packages/SystemUI/src/com/android/systemui/settings/UserFileManager.kt b/packages/SystemUI/src/com/android/systemui/settings/UserFileManager.kt
new file mode 100644
index 0000000..aa218db
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/settings/UserFileManager.kt
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.settings
+
+import android.content.Context
+import android.content.SharedPreferences
+import java.io.File
+
+/**
+ * Interface for retrieving file paths for file storage of system and secondary users.
+ */
+interface UserFileManager {
+    /**
+     * Return the file based on current user.
+     */
+    fun getFile(fileName: String, userId: Int): File
+    /**
+     * Get shared preferences from user.
+     */
+    fun getSharedPreferences(
+        fileName: String,
+        @Context.PreferencesMode mode: Int,
+        userId: Int
+    ): SharedPreferences
+}
diff --git a/packages/SystemUI/src/com/android/systemui/settings/UserFileManagerImpl.kt b/packages/SystemUI/src/com/android/systemui/settings/UserFileManagerImpl.kt
new file mode 100644
index 0000000..ad073c0
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/settings/UserFileManagerImpl.kt
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.settings
+
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.content.IntentFilter
+import android.content.SharedPreferences
+import android.os.Environment
+import android.os.UserHandle
+import android.os.UserManager
+import android.util.Log
+import androidx.annotation.VisibleForTesting
+import com.android.systemui.CoreStartable
+import com.android.systemui.broadcast.BroadcastDispatcher
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dagger.qualifiers.Background
+import com.android.systemui.util.concurrency.DelayableExecutor
+import java.io.File
+import javax.inject.Inject
+
+/**
+ * Implementation for retrieving file paths for file storage of system and secondary users.
+ * Files lie in {File Directory}/UserFileManager/{User Id} for secondary user.
+ * For system user, we use the conventional {File Directory}
+ */
+@SysUISingleton
+class UserFileManagerImpl @Inject constructor(
+    // Context of system process and system user.
+    val context: Context,
+    val userManager: UserManager,
+    val broadcastDispatcher: BroadcastDispatcher,
+    @Background val backgroundExecutor: DelayableExecutor
+) : UserFileManager, CoreStartable(context) {
+    companion object {
+        private const val FILES = "files"
+        @VisibleForTesting internal const val SHARED_PREFS = "shared_prefs"
+        @VisibleForTesting internal const val ID = "UserFileManager"
+    }
+
+   private val broadcastReceiver = object : BroadcastReceiver() {
+        /**
+         * Listen to Intent.ACTION_USER_REMOVED to clear user data.
+         */
+        override fun onReceive(context: Context, intent: Intent) {
+            if (intent.action == Intent.ACTION_USER_REMOVED) {
+                clearDeletedUserData()
+            }
+        }
+    }
+
+    /**
+     * Poll for user-specific directories to delete upon start up.
+     */
+    override fun start() {
+        clearDeletedUserData()
+        val filter = IntentFilter().apply {
+            addAction(Intent.ACTION_USER_REMOVED)
+        }
+        broadcastDispatcher.registerReceiver(broadcastReceiver, filter, backgroundExecutor)
+    }
+
+    /**
+     * Return the file based on current user.
+     */
+    override fun getFile(fileName: String, userId: Int): File {
+        return if (UserHandle(userId).isSystem) {
+            Environment.buildPath(
+                context.filesDir,
+                fileName
+            )
+        } else {
+            val secondaryFile = Environment.buildPath(
+                context.filesDir,
+                ID,
+                userId.toString(),
+                FILES,
+                fileName
+            )
+            ensureParentDirExists(secondaryFile)
+            secondaryFile
+        }
+    }
+
+    /**
+     * Get shared preferences from user.
+     */
+    override fun getSharedPreferences(
+        fileName: String,
+        @Context.PreferencesMode mode: Int,
+        userId: Int
+    ): SharedPreferences {
+        if (UserHandle(userId).isSystem) {
+            return context.getSharedPreferences(fileName, mode)
+        }
+        val secondaryUserDir = Environment.buildPath(
+            context.filesDir,
+            ID,
+            userId.toString(),
+            SHARED_PREFS,
+            fileName
+        )
+
+        ensureParentDirExists(secondaryUserDir)
+        return context.getSharedPreferences(secondaryUserDir, mode)
+    }
+
+    /**
+     * Remove dirs for deleted users.
+     */
+    @VisibleForTesting
+    internal fun clearDeletedUserData() {
+        backgroundExecutor.execute {
+            val file = Environment.buildPath(context.filesDir, ID)
+            if (!file.exists()) return@execute
+            val aliveUsers = userManager.aliveUsers.map { it.id.toString() }
+            val dirsToDelete = file.list().filter { !aliveUsers.contains(it) }
+
+            dirsToDelete.forEach { dir ->
+                try {
+                    val dirToDelete = Environment.buildPath(
+                        file,
+                        dir,
+                    )
+                    dirToDelete.deleteRecursively()
+                } catch (e: Exception) {
+                    Log.e(ID, "Deletion failed.", e)
+                }
+            }
+        }
+    }
+
+    /**
+     * Checks to see if parent dir of the file exists. If it does not, we create the parent dirs
+     * recursively.
+     */
+    @VisibleForTesting
+    internal fun ensureParentDirExists(file: File) {
+        val parent = file.parentFile
+        if (!parent.exists()) {
+            if (!parent.mkdirs()) {
+                Log.e(ID, "Could not create parent directory for file: ${file.absolutePath}")
+            }
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/settings/dagger/MultiUserUtilsModule.java b/packages/SystemUI/src/com/android/systemui/settings/dagger/MultiUserUtilsModule.java
new file mode 100644
index 0000000..2f62e44
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/settings/dagger/MultiUserUtilsModule.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.settings.dagger;
+
+import android.app.ActivityManager;
+import android.content.Context;
+import android.os.Handler;
+import android.os.UserManager;
+
+import com.android.systemui.CoreStartable;
+import com.android.systemui.dagger.SysUISingleton;
+import com.android.systemui.dagger.qualifiers.Background;
+import com.android.systemui.dump.DumpManager;
+import com.android.systemui.settings.UserContentResolverProvider;
+import com.android.systemui.settings.UserContextProvider;
+import com.android.systemui.settings.UserFileManager;
+import com.android.systemui.settings.UserFileManagerImpl;
+import com.android.systemui.settings.UserTracker;
+import com.android.systemui.settings.UserTrackerImpl;
+
+import dagger.Binds;
+import dagger.Module;
+import dagger.Provides;
+import dagger.multibindings.ClassKey;
+import dagger.multibindings.IntoMap;
+
+/**
+ * Dagger Module for classes found within the com.android.systemui.settings package.
+ */
+@Module
+public abstract class MultiUserUtilsModule {
+    @Binds
+    @SysUISingleton
+    abstract UserContextProvider bindUserContextProvider(UserTracker tracker);
+
+    @Binds
+    @SysUISingleton
+    abstract UserContentResolverProvider bindUserContentResolverProvider(
+            UserTracker tracker);
+
+    @SysUISingleton
+    @Provides
+    static UserTracker provideUserTracker(
+            Context context,
+            UserManager userManager,
+            DumpManager dumpManager,
+            @Background Handler handler
+    ) {
+        int startingUser = ActivityManager.getCurrentUser();
+        UserTrackerImpl tracker = new UserTrackerImpl(context, userManager, dumpManager, handler);
+        tracker.initialize(startingUser);
+        return tracker;
+    }
+
+    @Binds
+    @IntoMap
+    @ClassKey(UserFileManagerImpl.class)
+    abstract CoreStartable bindUserFileManagerCoreStartable(UserFileManagerImpl sysui);
+
+    @Binds
+    abstract UserFileManager bindUserFileManager(UserFileManagerImpl impl);
+}
diff --git a/packages/SystemUI/src/com/android/systemui/settings/dagger/SettingsModule.java b/packages/SystemUI/src/com/android/systemui/settings/dagger/SettingsModule.java
deleted file mode 100644
index 7084d3f..0000000
--- a/packages/SystemUI/src/com/android/systemui/settings/dagger/SettingsModule.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.settings.dagger;
-
-import android.app.ActivityManager;
-import android.content.Context;
-import android.os.Handler;
-import android.os.UserManager;
-
-import com.android.systemui.dagger.SysUISingleton;
-import com.android.systemui.dagger.qualifiers.Background;
-import com.android.systemui.dump.DumpManager;
-import com.android.systemui.settings.UserContentResolverProvider;
-import com.android.systemui.settings.UserContextProvider;
-import com.android.systemui.settings.UserTracker;
-import com.android.systemui.settings.UserTrackerImpl;
-
-import dagger.Binds;
-import dagger.Module;
-import dagger.Provides;
-
-/**
- * Dagger Module for classes found within the com.android.systemui.settings package.
- */
-@Module
-public abstract class SettingsModule {
-
-
-    @Binds
-    @SysUISingleton
-    abstract UserContextProvider bindUserContextProvider(UserTracker tracker);
-
-    @Binds
-    @SysUISingleton
-    abstract UserContentResolverProvider bindUserContentResolverProvider(
-            UserTracker tracker);
-
-    @SysUISingleton
-    @Provides
-    static UserTracker provideUserTracker(
-            Context context,
-            UserManager userManager,
-            DumpManager dumpManager,
-            @Background Handler handler
-    ) {
-        int startingUser = ActivityManager.getCurrentUser();
-        UserTrackerImpl tracker = new UserTrackerImpl(context, userManager, dumpManager, handler);
-        tracker.initialize(startingUser);
-        return tracker;
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/CombinedShadeHeadersConstraintManager.kt b/packages/SystemUI/src/com/android/systemui/shade/CombinedShadeHeadersConstraintManager.kt
new file mode 100644
index 0000000..e360ec2
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/CombinedShadeHeadersConstraintManager.kt
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 androidx.constraintlayout.widget.ConstraintSet
+
+typealias ConstraintChange = ConstraintSet.() -> Unit
+
+operator fun ConstraintChange?.plus(other: ConstraintChange?): ConstraintChange? {
+    // Prevent wrapping
+    if (this == null) return other
+    if (other == null) return this
+    else return {
+        this@plus()
+        other()
+    }
+}
+
+/**
+ * Contains all changes that need to be performed to the different [ConstraintSet] in
+ * [LargeScreenShadeHeaderController].
+ */
+data class ConstraintsChanges(
+    val qqsConstraintsChanges: ConstraintChange? = null,
+    val qsConstraintsChanges: ConstraintChange? = null,
+    val largeScreenConstraintsChanges: ConstraintChange? = null
+) {
+    operator fun plus(other: ConstraintsChanges) = ConstraintsChanges(
+        qqsConstraintsChanges + other.qqsConstraintsChanges,
+        qsConstraintsChanges + other.qsConstraintsChanges,
+        largeScreenConstraintsChanges + other.largeScreenConstraintsChanges
+    )
+}
+
+/**
+ * Determines [ConstraintChanges] for [LargeScreenShadeHeaderController] based on configurations.
+ *
+ * Given that the number of different scenarios is not that large, having specific methods instead
+ * of a full map between state and [ConstraintSet] was preferred.
+ */
+interface CombinedShadeHeadersConstraintManager {
+    /**
+     * Changes for when the visibility of the privacy chip changes
+     */
+    fun privacyChipVisibilityConstraints(visible: Boolean): ConstraintsChanges
+
+    /**
+     * Changes for situations with no top center cutout (there may be a corner cutout)
+     */
+    fun emptyCutoutConstraints(): ConstraintsChanges
+
+    /**
+     * Changes to incorporate side insets due to rounded corners/corner cutouts
+     */
+    fun edgesGuidelinesConstraints(
+        cutoutStart: Int,
+        paddingStart: Int,
+        cutoutEnd: Int,
+        paddingEnd: Int
+    ): ConstraintsChanges
+
+    /**
+     * Changes for situations with top center cutout (in this case, there are no corner cutouts).
+     */
+    fun centerCutoutConstraints(rtl: Boolean, offsetFromEdge: Int): ConstraintsChanges
+}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/CombinedShadeHeadersConstraintManagerImpl.kt b/packages/SystemUI/src/com/android/systemui/shade/CombinedShadeHeadersConstraintManagerImpl.kt
new file mode 100644
index 0000000..4063af3
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/CombinedShadeHeadersConstraintManagerImpl.kt
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.ViewGroup
+import androidx.constraintlayout.widget.ConstraintSet
+import com.android.systemui.R
+import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent
+
+/**
+ * Standard implementation of [CombinedShadeHeadersConstraintManager].
+ */
+@CentralSurfacesComponent.CentralSurfacesScope
+object CombinedShadeHeadersConstraintManagerImpl : CombinedShadeHeadersConstraintManager {
+
+    override fun privacyChipVisibilityConstraints(visible: Boolean): ConstraintsChanges {
+        val constraintAlpha = if (visible) 0f else 1f
+        return ConstraintsChanges(
+            qqsConstraintsChanges = {
+                setAlpha(R.id.statusIcons, constraintAlpha)
+                setAlpha(R.id.batteryRemainingIcon, constraintAlpha)
+            }
+        )
+    }
+
+    override fun emptyCutoutConstraints(): ConstraintsChanges {
+        return ConstraintsChanges(
+            qqsConstraintsChanges = {
+                connect(R.id.date, ConstraintSet.END, R.id.barrier, ConstraintSet.START)
+                createBarrier(
+                    R.id.barrier,
+                    ConstraintSet.START,
+                    0,
+                    R.id.statusIcons,
+                    R.id.privacy_container
+                )
+                connect(R.id.statusIcons, ConstraintSet.START, R.id.date, ConstraintSet.END)
+                connect(R.id.privacy_container, ConstraintSet.START, R.id.date, ConstraintSet.END)
+                constrainWidth(R.id.statusIcons, ViewGroup.LayoutParams.WRAP_CONTENT)
+            }
+        )
+    }
+
+    override fun edgesGuidelinesConstraints(
+        cutoutStart: Int,
+        paddingStart: Int,
+        cutoutEnd: Int,
+        paddingEnd: Int
+    ): ConstraintsChanges {
+        val change: ConstraintChange = {
+            setGuidelineBegin(R.id.begin_guide, Math.max(cutoutStart - paddingStart, 0))
+            setGuidelineEnd(R.id.end_guide, Math.max(cutoutEnd - paddingEnd, 0))
+        }
+        return ConstraintsChanges(
+            qqsConstraintsChanges = change,
+            qsConstraintsChanges = change
+        )
+    }
+
+    override fun centerCutoutConstraints(rtl: Boolean, offsetFromEdge: Int): ConstraintsChanges {
+        val centerStart = if (!rtl) R.id.center_left else R.id.center_right
+        val centerEnd = if (!rtl) R.id.center_right else R.id.center_left
+        // Use guidelines to block the center cutout area.
+        return ConstraintsChanges(
+            qqsConstraintsChanges = {
+                setGuidelineBegin(centerStart, offsetFromEdge)
+                setGuidelineEnd(centerEnd, offsetFromEdge)
+                connect(R.id.date, ConstraintSet.END, centerStart, ConstraintSet.START)
+                connect(
+                    R.id.statusIcons,
+                    ConstraintSet.START,
+                    centerEnd,
+                    ConstraintSet.END
+                )
+                connect(
+                    R.id.privacy_container,
+                    ConstraintSet.START,
+                    centerEnd,
+                    ConstraintSet.END
+                )
+                constrainWidth(R.id.statusIcons, 0)
+            },
+            qsConstraintsChanges = {
+                setGuidelineBegin(centerStart, offsetFromEdge)
+                setGuidelineEnd(centerEnd, offsetFromEdge)
+                connect(
+                    R.id.privacy_container,
+                    ConstraintSet.START,
+                    centerEnd,
+                    ConstraintSet.END
+                )
+            }
+        )
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/LargeScreenShadeHeaderController.kt b/packages/SystemUI/src/com/android/systemui/shade/LargeScreenShadeHeaderController.kt
new file mode 100644
index 0000000..0f9ac36
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/LargeScreenShadeHeaderController.kt
@@ -0,0 +1,504 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.shade
+
+import android.annotation.IdRes
+import android.app.StatusBarManager
+import android.content.res.Configuration
+import android.os.Trace
+import android.os.Trace.TRACE_TAG_APP
+import android.util.Pair
+import android.view.View
+import android.view.WindowInsets
+import android.widget.TextView
+import androidx.annotation.VisibleForTesting
+import androidx.constraintlayout.motion.widget.MotionLayout
+import com.android.settingslib.Utils
+import com.android.systemui.Dumpable
+import com.android.systemui.R
+import com.android.systemui.animation.ShadeInterpolation
+import com.android.systemui.battery.BatteryMeterView
+import com.android.systemui.battery.BatteryMeterViewController
+import com.android.systemui.dump.DumpManager
+import com.android.systemui.flags.FeatureFlags
+import com.android.systemui.flags.Flags
+import com.android.systemui.qs.ChipVisibilityListener
+import com.android.systemui.qs.HeaderPrivacyIconsController
+import com.android.systemui.qs.carrier.QSCarrierGroup
+import com.android.systemui.qs.carrier.QSCarrierGroupController
+import com.android.systemui.shade.LargeScreenShadeHeaderController.Companion.HEADER_TRANSITION_ID
+import com.android.systemui.shade.LargeScreenShadeHeaderController.Companion.LARGE_SCREEN_HEADER_CONSTRAINT
+import com.android.systemui.shade.LargeScreenShadeHeaderController.Companion.LARGE_SCREEN_HEADER_TRANSITION_ID
+import com.android.systemui.shade.LargeScreenShadeHeaderController.Companion.QQS_HEADER_CONSTRAINT
+import com.android.systemui.shade.LargeScreenShadeHeaderController.Companion.QS_HEADER_CONSTRAINT
+import com.android.systemui.statusbar.phone.StatusBarContentInsetsProvider
+import com.android.systemui.statusbar.phone.StatusBarIconController
+import com.android.systemui.statusbar.phone.StatusIconContainer
+import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent.CentralSurfacesScope
+import com.android.systemui.statusbar.phone.dagger.StatusBarViewModule.LARGE_SCREEN_BATTERY_CONTROLLER
+import com.android.systemui.statusbar.phone.dagger.StatusBarViewModule.LARGE_SCREEN_SHADE_HEADER
+import com.android.systemui.statusbar.policy.ConfigurationController
+import com.android.systemui.statusbar.policy.VariableDateView
+import com.android.systemui.statusbar.policy.VariableDateViewController
+import com.android.systemui.util.ViewController
+import java.io.PrintWriter
+import javax.inject.Inject
+import javax.inject.Named
+
+/**
+ * Controller for QS header on Large Screen width (large screen + landscape).
+ *
+ * Additionally, this serves as the staging ground for the combined QS headers. A single
+ * [MotionLayout] that changes constraints depending on the configuration and can animate the
+ * expansion of the headers in small screen portrait.
+ *
+ * [header] will be a [MotionLayout] if [Flags.COMBINED_QS_HEADERS] is enabled. In this case, the
+ * [MotionLayout] has 2 transitions:
+ * * [HEADER_TRANSITION_ID]: [QQS_HEADER_CONSTRAINT] <-> [QS_HEADER_CONSTRAINT] for portrait
+ *   handheld device configuration.
+ * * [LARGE_SCREEN_HEADER_TRANSITION_ID]: [LARGE_SCREEN_HEADER_CONSTRAINT] (to itself) for all
+ *   other configurations
+ */
+@CentralSurfacesScope
+class LargeScreenShadeHeaderController @Inject constructor(
+    @Named(LARGE_SCREEN_SHADE_HEADER) private val header: View,
+    private val statusBarIconController: StatusBarIconController,
+    private val privacyIconsController: HeaderPrivacyIconsController,
+    private val insetsProvider: StatusBarContentInsetsProvider,
+    private val configurationController: ConfigurationController,
+    private val variableDateViewControllerFactory: VariableDateViewController.Factory,
+    @Named(LARGE_SCREEN_BATTERY_CONTROLLER)
+    private val batteryMeterViewController: BatteryMeterViewController,
+    private val dumpManager: DumpManager,
+    private val featureFlags: FeatureFlags,
+    private val qsCarrierGroupControllerBuilder: QSCarrierGroupController.Builder,
+    private val combinedShadeHeadersConstraintManager: CombinedShadeHeadersConstraintManager
+) : ViewController<View>(header), Dumpable {
+
+    companion object {
+        /** IDs for transitions and constraints for the [MotionLayout]. These are only used when
+         * [Flags.COMBINED_QS_HEADERS] is enabled.
+         */
+        @VisibleForTesting
+        internal val HEADER_TRANSITION_ID = R.id.header_transition
+        @VisibleForTesting
+        internal val LARGE_SCREEN_HEADER_TRANSITION_ID = R.id.large_screen_header_transition
+        @VisibleForTesting
+        internal val QQS_HEADER_CONSTRAINT = R.id.qqs_header_constraint
+        @VisibleForTesting
+        internal val QS_HEADER_CONSTRAINT = R.id.qs_header_constraint
+        @VisibleForTesting
+        internal val LARGE_SCREEN_HEADER_CONSTRAINT = R.id.large_screen_header_constraint
+
+        private fun Int.stateToString() = when (this) {
+            QQS_HEADER_CONSTRAINT -> "QQS Header"
+            QS_HEADER_CONSTRAINT -> "QS Header"
+            LARGE_SCREEN_HEADER_CONSTRAINT -> "Large Screen Header"
+            else -> "Unknown state"
+        }
+    }
+
+    init {
+        loadConstraints()
+    }
+
+    private val combinedHeaders = featureFlags.isEnabled(Flags.COMBINED_QS_HEADERS)
+
+    private lateinit var iconManager: StatusBarIconController.TintedIconManager
+    private lateinit var carrierIconSlots: List<String>
+    private lateinit var qsCarrierGroupController: QSCarrierGroupController
+
+    private val batteryIcon: BatteryMeterView = header.findViewById(R.id.batteryRemainingIcon)
+    private val clock: TextView = header.findViewById(R.id.clock)
+    private val date: TextView = header.findViewById(R.id.date)
+    private val iconContainer: StatusIconContainer = header.findViewById(R.id.statusIcons)
+    private val qsCarrierGroup: QSCarrierGroup = header.findViewById(R.id.carrier_group)
+
+    private var cutoutLeft = 0
+    private var cutoutRight = 0
+    private var roundedCorners = 0
+    private var lastInsets: WindowInsets? = null
+
+    private var qsDisabled = false
+    private var visible = false
+        set(value) {
+            if (field == value) {
+                return
+            }
+            field = value
+            updateListeners()
+        }
+
+    /**
+     * Whether the QQS/QS part of the shade is visible. This is particularly important in
+     * Lockscreen, as the shade is visible but QS is not.
+     */
+    var qsVisible = false
+        set(value) {
+            if (field == value) {
+                return
+            }
+            field = value
+            onShadeExpandedChanged()
+        }
+
+    /**
+     * Whether we are in a configuration with large screen width. In this case, the header is a
+     * single line.
+     */
+    var largeScreenActive = false
+        set(value) {
+            if (field == value) {
+                return
+            }
+            field = value
+            onHeaderStateChanged()
+        }
+
+    /**
+     * Expansion fraction of the QQS/QS shade. This is not the expansion between QQS <-> QS.
+     */
+    var shadeExpandedFraction = -1f
+        set(value) {
+            if (visible && field != value) {
+                header.alpha = ShadeInterpolation.getContentAlpha(value)
+                field = value
+            }
+        }
+
+    /**
+     * Expansion fraction of the QQS <-> QS animation.
+     */
+    var qsExpandedFraction = -1f
+        set(value) {
+            if (visible && field != value) {
+                field = value
+                updatePosition()
+            }
+        }
+
+    /**
+     * Current scroll of QS.
+     */
+    var qsScrollY = 0
+        set(value) {
+            if (field != value) {
+                field = value
+                updateScrollY()
+            }
+        }
+
+    private val insetListener = View.OnApplyWindowInsetsListener { view, insets ->
+        updateConstraintsForInsets(view as MotionLayout, insets)
+        lastInsets = WindowInsets(insets)
+
+        view.onApplyWindowInsets(insets)
+    }
+
+    private val chipVisibilityListener: ChipVisibilityListener = object : ChipVisibilityListener {
+        override fun onChipVisibilityRefreshed(visible: Boolean) {
+            if (header is MotionLayout) {
+                // If the privacy chip is visible, we hide the status icons and battery remaining
+                // icon, only in QQS.
+                val update = combinedShadeHeadersConstraintManager
+                    .privacyChipVisibilityConstraints(visible)
+                header.updateAllConstraints(update)
+            }
+        }
+    }
+
+    private val configurationControllerListener =
+        object : ConfigurationController.ConfigurationListener {
+        override fun onConfigChanged(newConfig: Configuration?) {
+            if (header !is MotionLayout) {
+                val left = header.resources.getDimensionPixelSize(
+                    R.dimen.large_screen_shade_header_left_padding
+                )
+                header.setPadding(
+                    left,
+                    header.paddingTop,
+                    header.paddingRight,
+                    header.paddingBottom
+                )
+            }
+        }
+
+        override fun onDensityOrFontScaleChanged() {
+            clock.setTextAppearance(R.style.TextAppearance_QS_Status)
+            date.setTextAppearance(R.style.TextAppearance_QS_Status)
+            qsCarrierGroup.updateTextAppearance(R.style.TextAppearance_QS_Status_Carriers)
+            if (header is MotionLayout) {
+                loadConstraints()
+                lastInsets?.let { updateConstraintsForInsets(header, it) }
+            }
+            updateResources()
+        }
+    }
+
+    override fun onInit() {
+        if (header is MotionLayout) {
+            variableDateViewControllerFactory.create(date as VariableDateView).init()
+        }
+        batteryMeterViewController.init()
+
+        // battery settings same as in QS icons
+        batteryMeterViewController.ignoreTunerUpdates()
+        batteryIcon.setPercentShowMode(BatteryMeterView.MODE_ESTIMATE)
+
+        iconManager = StatusBarIconController.TintedIconManager(iconContainer, featureFlags)
+        iconManager.setTint(
+            Utils.getColorAttrDefaultColor(header.context, android.R.attr.textColorPrimary)
+        )
+
+        carrierIconSlots =
+            listOf(header.context.getString(com.android.internal.R.string.status_bar_mobile))
+        qsCarrierGroupController = qsCarrierGroupControllerBuilder
+            .setQSCarrierGroup(qsCarrierGroup)
+            .build()
+    }
+
+    override fun onViewAttached() {
+        privacyIconsController.chipVisibilityListener = chipVisibilityListener
+        if (header is MotionLayout) {
+            header.setOnApplyWindowInsetsListener(insetListener)
+            clock.addOnLayoutChangeListener { v, _, _, _, _, _, _, _, _ ->
+                val newPivot = if (v.isLayoutRtl) v.width.toFloat() else 0f
+                v.pivotX = newPivot
+            }
+        }
+
+        dumpManager.registerDumpable(this)
+        configurationController.addCallback(configurationControllerListener)
+
+        updateVisibility()
+        updateTransition()
+    }
+
+    override fun onViewDetached() {
+        privacyIconsController.chipVisibilityListener = null
+        dumpManager.unregisterDumpable(this::class.java.simpleName)
+        configurationController.removeCallback(configurationControllerListener)
+    }
+
+    fun disable(state1: Int, state2: Int, animate: Boolean) {
+        val disabled = state2 and StatusBarManager.DISABLE2_QUICK_SETTINGS != 0
+        if (disabled == qsDisabled) return
+        qsDisabled = disabled
+        updateVisibility()
+    }
+
+    private fun loadConstraints() {
+        if (header is MotionLayout) {
+            // Use resources.getXml instead of passing the resource id due to bug b/205018300
+            header.getConstraintSet(QQS_HEADER_CONSTRAINT)
+                .load(context, resources.getXml(R.xml.qqs_header))
+            val qsConstraints = if (featureFlags.isEnabled(Flags.NEW_HEADER)) {
+                R.xml.qs_header_new
+            } else {
+                R.xml.qs_header
+            }
+            header.getConstraintSet(QS_HEADER_CONSTRAINT)
+                .load(context, resources.getXml(qsConstraints))
+            header.getConstraintSet(LARGE_SCREEN_HEADER_CONSTRAINT)
+                .load(context, resources.getXml(R.xml.large_screen_shade_header))
+        }
+    }
+
+    private fun updateConstraintsForInsets(view: MotionLayout, insets: WindowInsets) {
+        val cutout = insets.displayCutout
+
+        val sbInsets: Pair<Int, Int> = insetsProvider.getStatusBarContentInsetsForCurrentRotation()
+        cutoutLeft = sbInsets.first
+        cutoutRight = sbInsets.second
+        val hasCornerCutout: Boolean = insetsProvider.currentRotationHasCornerCutout()
+        updateQQSPaddings()
+        // Set these guides as the left/right limits for content that lives in the top row, using
+        // cutoutLeft and cutoutRight
+        var changes = combinedShadeHeadersConstraintManager
+            .edgesGuidelinesConstraints(
+                if (view.isLayoutRtl) cutoutRight else cutoutLeft,
+                header.paddingStart,
+                if (view.isLayoutRtl) cutoutLeft else cutoutRight,
+                header.paddingEnd
+            )
+
+        if (cutout != null) {
+            val topCutout = cutout.boundingRectTop
+            if (topCutout.isEmpty || hasCornerCutout) {
+                changes += combinedShadeHeadersConstraintManager.emptyCutoutConstraints()
+            } else {
+                changes += combinedShadeHeadersConstraintManager.centerCutoutConstraints(
+                    view.isLayoutRtl,
+                    (view.width - view.paddingLeft - view.paddingRight - topCutout.width()) / 2
+                )
+            }
+        } else {
+           changes += combinedShadeHeadersConstraintManager.emptyCutoutConstraints()
+        }
+
+        view.updateAllConstraints(changes)
+    }
+
+    private fun updateScrollY() {
+        if (!largeScreenActive && combinedHeaders) {
+            header.scrollY = qsScrollY
+        }
+    }
+
+    private fun onShadeExpandedChanged() {
+        if (qsVisible) {
+            privacyIconsController.startListening()
+        } else {
+            privacyIconsController.stopListening()
+        }
+        updateVisibility()
+        updatePosition()
+    }
+
+    private fun onHeaderStateChanged() {
+        if (largeScreenActive || combinedHeaders) {
+            privacyIconsController.onParentVisible()
+        } else {
+            privacyIconsController.onParentInvisible()
+        }
+        updateVisibility()
+        updateTransition()
+    }
+
+    /**
+     * If not using [combinedHeaders] this should only be visible on large screen. Else, it should
+     * be visible any time the QQS/QS shade is open.
+     */
+    private fun updateVisibility() {
+        val visibility = if (!largeScreenActive && !combinedHeaders || qsDisabled) {
+            View.GONE
+        } else if (qsVisible) {
+            View.VISIBLE
+        } else {
+            View.INVISIBLE
+        }
+        if (header.visibility != visibility) {
+            header.visibility = visibility
+            visible = visibility == View.VISIBLE
+        }
+    }
+
+    private fun updateTransition() {
+        if (!combinedHeaders) {
+            return
+        }
+        header as MotionLayout
+        if (largeScreenActive) {
+            header.setTransition(LARGE_SCREEN_HEADER_TRANSITION_ID)
+            header.getConstraintSet(LARGE_SCREEN_HEADER_CONSTRAINT).applyTo(header)
+        } else {
+            header.setTransition(HEADER_TRANSITION_ID)
+            header.transitionToStart()
+            updatePosition()
+            updateScrollY()
+        }
+    }
+
+    private fun updatePosition() {
+        if (header is MotionLayout && !largeScreenActive && visible) {
+            Trace.instantForTrack(
+                TRACE_TAG_APP,
+                "LargeScreenHeaderController - updatePosition",
+                "position: $qsExpandedFraction"
+            )
+            header.progress = qsExpandedFraction
+        }
+    }
+
+    private fun updateListeners() {
+        qsCarrierGroupController.setListening(visible)
+        if (visible) {
+            updateSingleCarrier(qsCarrierGroupController.isSingleCarrier)
+            qsCarrierGroupController.setOnSingleCarrierChangedListener { updateSingleCarrier(it) }
+            statusBarIconController.addIconGroup(iconManager)
+        } else {
+            qsCarrierGroupController.setOnSingleCarrierChangedListener(null)
+            statusBarIconController.removeIconGroup(iconManager)
+        }
+    }
+
+    private fun updateSingleCarrier(singleCarrier: Boolean) {
+        if (singleCarrier) {
+            iconContainer.removeIgnoredSlots(carrierIconSlots)
+        } else {
+            iconContainer.addIgnoredSlots(carrierIconSlots)
+        }
+    }
+
+    private fun updateResources() {
+        roundedCorners = resources.getDimensionPixelSize(R.dimen.rounded_corner_content_padding)
+        val padding = resources.getDimensionPixelSize(R.dimen.qs_panel_padding)
+        header.setPadding(padding, header.paddingTop, padding, header.paddingBottom)
+        updateQQSPaddings()
+    }
+
+    private fun updateQQSPaddings() {
+        if (header is MotionLayout) {
+            val clockPaddingStart = resources
+                .getDimensionPixelSize(R.dimen.status_bar_left_clock_starting_padding)
+            val clockPaddingEnd = resources
+                .getDimensionPixelSize(R.dimen.status_bar_left_clock_end_padding)
+            clock.setPaddingRelative(
+                clockPaddingStart,
+                clock.paddingTop,
+                clockPaddingEnd,
+                clock.paddingBottom
+            )
+        }
+    }
+
+    override fun dump(pw: PrintWriter, args: Array<out String>) {
+        pw.println("visible: $visible")
+        pw.println("shadeExpanded: $qsVisible")
+        pw.println("shadeExpandedFraction: $shadeExpandedFraction")
+        pw.println("active: $largeScreenActive")
+        pw.println("qsExpandedFraction: $qsExpandedFraction")
+        pw.println("qsScrollY: $qsScrollY")
+        if (combinedHeaders) {
+            header as MotionLayout
+            pw.println("currentState: ${header.currentState.stateToString()}")
+        }
+    }
+
+    private fun MotionLayout.updateConstraints(@IdRes state: Int, update: ConstraintChange) {
+        val constraints = getConstraintSet(state)
+        constraints.update()
+        updateState(state, constraints)
+    }
+
+    /**
+     * Updates the [ConstraintSet] for the case of combined headers.
+     *
+     * Only non-`null` changes are applied to reduce the number of rebuilding in the [MotionLayout].
+     */
+    private fun MotionLayout.updateAllConstraints(updates: ConstraintsChanges) {
+        if (updates.qqsConstraintsChanges != null) {
+            updateConstraints(QQS_HEADER_CONSTRAINT, updates.qqsConstraintsChanges)
+        }
+        if (updates.qsConstraintsChanges != null) {
+            updateConstraints(QS_HEADER_CONSTRAINT, updates.qsConstraintsChanges)
+        }
+        if (updates.largeScreenConstraintsChanges != null) {
+            updateConstraints(LARGE_SCREEN_HEADER_CONSTRAINT, updates.largeScreenConstraintsChanges)
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NPVCDownEventState.kt b/packages/SystemUI/src/com/android/systemui/shade/NPVCDownEventState.kt
new file mode 100644
index 0000000..07e8b9f
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/NPVCDownEventState.kt
@@ -0,0 +1,136 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT 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.MotionEvent
+import com.android.systemui.dump.DumpsysTableLogger
+import com.android.systemui.dump.Row
+import com.android.systemui.util.collection.RingBuffer
+import java.text.SimpleDateFormat
+import java.util.Locale
+
+/** Container for storing information about [MotionEvent.ACTION_DOWN] on
+ * [NotificationPanelViewController].
+ *
+ * This will be used in a dump to log the latest recorded down events.
+ *
+ * @see NotificationPanelViewController.initDownStates
+ */
+class NPVCDownEventState private constructor(
+    private var timeStamp: Long = 0,
+    private var x: Float = 0f,
+    private var y: Float = 0f,
+    private var qsTouchAboveFalsingThreshold: Boolean = false,
+    private var dozing: Boolean = false,
+    private var collapsed: Boolean = false,
+    private var canCollapseOnQQS: Boolean = false,
+    private var listenForHeadsUp: Boolean = false,
+    private var allowExpandForSmallExpansion: Boolean = false,
+    private var touchSlopExceededBeforeDown: Boolean = false,
+    private var lastEventSynthesized: Boolean = false
+) {
+
+    /**
+     * List of [String] to be used as a [Row] with [DumpsysTableLogger].
+     */
+    val asStringList: List<String> by lazy {
+        listOf(
+            DATE_FORMAT.format(timeStamp),
+            x.toString(),
+            y.toString(),
+            qsTouchAboveFalsingThreshold.toString(),
+            dozing.toString(),
+            collapsed.toString(),
+            canCollapseOnQQS.toString(),
+            listenForHeadsUp.toString(),
+            allowExpandForSmallExpansion.toString(),
+            touchSlopExceededBeforeDown.toString(),
+            lastEventSynthesized.toString()
+        )
+    }
+
+    /**
+     * [RingBuffer] to store [NPVCDownEventState]. After the buffer is full, it will recycle old
+     * events.
+     *
+     * Do not use [append] to add new elements. Instead use [insert], as it will recycle if
+     * necessary.
+     */
+    class Buffer(capacity: Int) {
+
+        private val buffer = RingBuffer(capacity) { NPVCDownEventState() }
+
+        /**
+         * Insert a new element in the buffer.
+         */
+        fun insert(
+            timeStamp: Long,
+            x: Float,
+            y: Float,
+            qsTouchAboveFalsingThreshold: Boolean,
+            dozing: Boolean,
+            collapsed: Boolean,
+            canCollapseOnQQS: Boolean,
+            listenForHeadsUp: Boolean,
+            allowExpandForSmallExpansion: Boolean,
+            touchSlopExceededBeforeDown: Boolean,
+            lastEventSynthesized: Boolean
+        ) {
+            buffer.advance().apply {
+                this.timeStamp = timeStamp
+                this.x = x
+                this.y = y
+                this.qsTouchAboveFalsingThreshold = qsTouchAboveFalsingThreshold
+                this.dozing = dozing
+                this.collapsed = collapsed
+                this.canCollapseOnQQS = canCollapseOnQQS
+                this.listenForHeadsUp = listenForHeadsUp
+                this.allowExpandForSmallExpansion = allowExpandForSmallExpansion
+                this.touchSlopExceededBeforeDown = touchSlopExceededBeforeDown
+                this.lastEventSynthesized = lastEventSynthesized
+            }
+        }
+
+        /**
+         * Returns the content of the buffer (sorted from latest to newest).
+         *
+         * @see NPVCDownEventState.asStringList
+         */
+        fun toList(): List<Row> {
+            return buffer.asSequence().map { it.asStringList }.toList()
+        }
+    }
+
+    companion object {
+        /**
+         * Headers for dumping a table using [DumpsysTableLogger].
+         */
+        @JvmField
+        val TABLE_HEADERS = listOf(
+            "Timestamp",
+            "X",
+            "Y",
+            "QSTouchAboveFalsingThreshold",
+            "Dozing",
+            "Collapsed",
+            "CanCollapseOnQQS",
+            "ListenForHeadsUp",
+            "AllowExpandForSmallExpansion",
+            "TouchSlopExceededBeforeDown",
+            "LastEventSynthesized"
+        )
+    }
+}
+
+private val DATE_FORMAT = SimpleDateFormat("MM-dd HH:mm:ss.SSS", Locale.US)
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotifPanelEvents.kt b/packages/SystemUI/src/com/android/systemui/shade/NotifPanelEvents.kt
new file mode 100644
index 0000000..ce9d89f
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotifPanelEvents.kt
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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
+
+/** Provides certain notification panel events.  */
+interface NotifPanelEvents {
+
+    /** Registers callbacks to be invoked when notification panel events occur.  */
+    fun registerListener(listener: Listener)
+
+    /** Unregisters callbacks previously registered via [registerListener]  */
+    fun unregisterListener(listener: Listener)
+
+    /** Callbacks for certain notification panel events. */
+    interface Listener {
+
+        /** Invoked when the notification panel starts or stops collapsing. */
+        fun onPanelCollapsingChanged(isCollapsing: Boolean)
+
+        /**
+         * Invoked when the notification panel starts or stops launching an [android.app.Activity].
+         */
+        fun onLaunchingActivityChanged(isLaunchingActivity: Boolean)
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotifPanelEventsModule.java b/packages/SystemUI/src/com/android/systemui/shade/NotifPanelEventsModule.java
new file mode 100644
index 0000000..6772384
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotifPanelEventsModule.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.shade;
+
+import com.android.systemui.dagger.SysUISingleton;
+
+import dagger.Binds;
+import dagger.Module;
+
+/** Provides a {@link NotifPanelEvents} in {@link SysUISingleton} scope. */
+@Module
+public abstract class NotifPanelEventsModule {
+    @Binds
+    abstract NotifPanelEvents bindPanelEvents(
+            NotificationPanelViewController.PanelEventsEmitter impl);
+}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelUnfoldAnimationController.kt b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelUnfoldAnimationController.kt
new file mode 100644
index 0000000..e0cd482
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelUnfoldAnimationController.kt
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.content.Context
+import android.view.ViewGroup
+import com.android.systemui.R
+import com.android.systemui.shared.animation.UnfoldConstantTranslateAnimator
+import com.android.systemui.shared.animation.UnfoldConstantTranslateAnimator.Direction.LEFT
+import com.android.systemui.shared.animation.UnfoldConstantTranslateAnimator.Direction.RIGHT
+import com.android.systemui.shared.animation.UnfoldConstantTranslateAnimator.ViewIdToTranslate
+import com.android.systemui.unfold.SysUIUnfoldScope
+import com.android.systemui.unfold.util.NaturalRotationUnfoldProgressProvider
+import javax.inject.Inject
+
+@SysUIUnfoldScope
+class NotificationPanelUnfoldAnimationController
+@Inject
+constructor(private val context: Context, progressProvider: NaturalRotationUnfoldProgressProvider) {
+
+    private val translateAnimator by lazy {
+        UnfoldConstantTranslateAnimator(
+            viewsIdToTranslate =
+                setOf(
+                    ViewIdToTranslate(R.id.quick_settings_panel, LEFT),
+                    ViewIdToTranslate(R.id.notification_stack_scroller, RIGHT),
+                    ViewIdToTranslate(R.id.rightLayout, RIGHT),
+                    ViewIdToTranslate(R.id.clock, LEFT),
+                    ViewIdToTranslate(R.id.date, LEFT)),
+            progressProvider = progressProvider)
+    }
+
+    fun setup(root: ViewGroup) {
+        val translationMax =
+            context.resources.getDimensionPixelSize(R.dimen.notification_side_paddings).toFloat()
+        translateAnimator.init(root, translationMax)
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelView.java
new file mode 100644
index 0000000..9818af3
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelView.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.shade;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffXfermode;
+import android.util.AttributeSet;
+
+import com.android.systemui.R;
+import com.android.systemui.statusbar.phone.TapAgainView;
+
+public class NotificationPanelView extends PanelView {
+
+    private static final boolean DEBUG = false;
+
+    /**
+     * Fling expanding QS.
+     */
+    public static final int FLING_EXPAND = 0;
+
+    public static final String COUNTER_PANEL_OPEN = "panel_open";
+    public static final String COUNTER_PANEL_OPEN_QS = "panel_open_qs";
+
+    private int mCurrentPanelAlpha;
+    private final Paint mAlphaPaint = new Paint();
+    private boolean mDozing;
+    private RtlChangeListener mRtlChangeListener;
+
+    public NotificationPanelView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        setWillNotDraw(!DEBUG);
+        mAlphaPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY));
+
+        setBackgroundColor(Color.TRANSPARENT);
+    }
+
+    @Override
+    public void onRtlPropertiesChanged(int layoutDirection) {
+        if (mRtlChangeListener != null) {
+            mRtlChangeListener.onRtlPropertielsChanged(layoutDirection);
+        }
+    }
+
+    @Override
+    public boolean shouldDelayChildPressedState() {
+        return true;
+    }
+
+    @Override
+    protected void dispatchDraw(Canvas canvas) {
+        super.dispatchDraw(canvas);
+        if (mCurrentPanelAlpha != 255) {
+            canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), mAlphaPaint);
+        }
+    }
+
+    float getCurrentPanelAlpha() {
+        return mCurrentPanelAlpha;
+    }
+
+    void setPanelAlphaInternal(float alpha) {
+        mCurrentPanelAlpha = (int) alpha;
+        mAlphaPaint.setARGB(mCurrentPanelAlpha, 255, 255, 255);
+        invalidate();
+    }
+
+    public void setDozing(boolean dozing) {
+        mDozing = dozing;
+    }
+
+    @Override
+    public boolean hasOverlappingRendering() {
+        return !mDozing;
+    }
+
+    void setRtlChangeListener(RtlChangeListener listener) {
+        mRtlChangeListener = listener;
+    }
+
+    public TapAgainView getTapAgainView() {
+        return findViewById(R.id.shade_falsing_tap_again);
+    }
+
+    interface RtlChangeListener {
+        void onRtlPropertielsChanged(int layoutDirection);
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
new file mode 100644
index 0000000..4b8379a
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
@@ -0,0 +1,4997 @@
+/*
+ * 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.
+ */
+
+package com.android.systemui.shade;
+
+import static android.app.StatusBarManager.WINDOW_STATE_SHOWING;
+
+import static androidx.constraintlayout.widget.ConstraintSet.END;
+import static androidx.constraintlayout.widget.ConstraintSet.PARENT_ID;
+
+import static com.android.internal.jank.InteractionJankMonitor.CUJ_NOTIFICATION_SHADE_QS_EXPAND_COLLAPSE;
+import static com.android.keyguard.KeyguardClockSwitch.LARGE;
+import static com.android.keyguard.KeyguardClockSwitch.SMALL;
+import static com.android.systemui.animation.Interpolators.EMPHASIZED_ACCELERATE;
+import static com.android.systemui.animation.Interpolators.EMPHASIZED_DECELERATE;
+import static com.android.systemui.classifier.Classifier.QS_COLLAPSE;
+import static com.android.systemui.classifier.Classifier.QUICK_SETTINGS;
+import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED;
+import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_QUICK_SETTINGS_EXPANDED;
+import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
+import static com.android.systemui.statusbar.StatusBarState.SHADE;
+import static com.android.systemui.statusbar.StatusBarState.SHADE_LOCKED;
+import static com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout.ROWS_ALL;
+import static com.android.systemui.statusbar.notification.stack.StackStateAnimator.ANIMATION_DURATION_FOLD_TO_AOD;
+import static com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManagerKt.STATE_CLOSED;
+import static com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManagerKt.STATE_OPEN;
+import static com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManagerKt.STATE_OPENING;
+import static com.android.systemui.util.DumpUtilsKt.asIndenting;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ValueAnimator;
+import android.annotation.NonNull;
+import android.app.Fragment;
+import android.app.StatusBarManager;
+import android.content.ContentResolver;
+import android.database.ContentObserver;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.ColorFilter;
+import android.graphics.Insets;
+import android.graphics.Paint;
+import android.graphics.PixelFormat;
+import android.graphics.PointF;
+import android.graphics.Rect;
+import android.graphics.Region;
+import android.graphics.drawable.Drawable;
+import android.hardware.biometrics.SensorLocationInternal;
+import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.PowerManager;
+import android.os.Trace;
+import android.os.UserManager;
+import android.os.VibrationEffect;
+import android.provider.Settings;
+import android.transition.ChangeBounds;
+import android.transition.TransitionManager;
+import android.util.IndentingPrintWriter;
+import android.util.Log;
+import android.util.MathUtils;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.VelocityTracker;
+import android.view.View;
+import android.view.View.AccessibilityDelegate;
+import android.view.ViewGroup;
+import android.view.ViewPropertyAnimator;
+import android.view.ViewStub;
+import android.view.ViewTreeObserver;
+import android.view.WindowInsets;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityManager;
+import android.view.accessibility.AccessibilityNodeInfo;
+import android.widget.FrameLayout;
+
+import androidx.annotation.Nullable;
+import androidx.constraintlayout.widget.ConstraintSet;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.jank.InteractionJankMonitor;
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.internal.policy.ScreenDecorationsUtils;
+import com.android.internal.policy.SystemBarUtils;
+import com.android.internal.util.LatencyTracker;
+import com.android.keyguard.ActiveUnlockConfig;
+import com.android.keyguard.KeyguardStatusView;
+import com.android.keyguard.KeyguardStatusViewController;
+import com.android.keyguard.KeyguardUnfoldTransition;
+import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.keyguard.LockIconViewController;
+import com.android.keyguard.dagger.KeyguardQsUserSwitchComponent;
+import com.android.keyguard.dagger.KeyguardStatusBarViewComponent;
+import com.android.keyguard.dagger.KeyguardStatusViewComponent;
+import com.android.keyguard.dagger.KeyguardUserSwitcherComponent;
+import com.android.systemui.DejankUtils;
+import com.android.systemui.R;
+import com.android.systemui.animation.ActivityLaunchAnimator;
+import com.android.systemui.animation.Interpolators;
+import com.android.systemui.animation.LaunchAnimator;
+import com.android.systemui.biometrics.AuthController;
+import com.android.systemui.camera.CameraGestureHelper;
+import com.android.systemui.classifier.Classifier;
+import com.android.systemui.classifier.FalsingCollector;
+import com.android.systemui.controls.dagger.ControlsComponent;
+import com.android.systemui.dagger.SysUISingleton;
+import com.android.systemui.dagger.qualifiers.DisplayId;
+import com.android.systemui.dagger.qualifiers.Main;
+import com.android.systemui.doze.DozeLog;
+import com.android.systemui.dump.DumpsysTableLogger;
+import com.android.systemui.flags.FeatureFlags;
+import com.android.systemui.flags.Flags;
+import com.android.systemui.fragments.FragmentHostManager.FragmentListener;
+import com.android.systemui.fragments.FragmentService;
+import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
+import com.android.systemui.keyguard.domain.usecase.SetClockPositionUseCase;
+import com.android.systemui.keyguard.domain.usecase.SetKeyguardBottomAreaAlphaUseCase;
+import com.android.systemui.keyguard.domain.usecase.SetKeyguardBottomAreaAnimateDozingTransitionsUseCase;
+import com.android.systemui.keyguard.ui.viewmodel.KeyguardBottomAreaViewModel;
+import com.android.systemui.media.KeyguardMediaController;
+import com.android.systemui.media.MediaDataManager;
+import com.android.systemui.media.MediaHierarchyManager;
+import com.android.systemui.model.SysUiState;
+import com.android.systemui.navigationbar.NavigationModeController;
+import com.android.systemui.plugins.FalsingManager;
+import com.android.systemui.plugins.FalsingManager.FalsingTapListener;
+import com.android.systemui.plugins.qs.QS;
+import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener;
+import com.android.systemui.qrcodescanner.controller.QRCodeScannerController;
+import com.android.systemui.screenrecord.RecordingController;
+import com.android.systemui.shade.transition.ShadeTransitionController;
+import com.android.systemui.shared.system.QuickStepContract;
+import com.android.systemui.statusbar.CommandQueue;
+import com.android.systemui.statusbar.GestureRecorder;
+import com.android.systemui.statusbar.KeyguardIndicationController;
+import com.android.systemui.statusbar.LockscreenShadeTransitionController;
+import com.android.systemui.statusbar.NotificationRemoteInputManager;
+import com.android.systemui.statusbar.NotificationShadeDepthController;
+import com.android.systemui.statusbar.NotificationShadeWindowController;
+import com.android.systemui.statusbar.NotificationShelfController;
+import com.android.systemui.statusbar.PulseExpansionHandler;
+import com.android.systemui.statusbar.QsFrameTranslateController;
+import com.android.systemui.statusbar.RemoteInputController;
+import com.android.systemui.statusbar.StatusBarState;
+import com.android.systemui.statusbar.SysuiStatusBarStateController;
+import com.android.systemui.statusbar.VibratorHelper;
+import com.android.systemui.statusbar.events.PrivacyDotViewController;
+import com.android.systemui.statusbar.notification.AnimatableProperty;
+import com.android.systemui.statusbar.notification.ConversationNotificationManager;
+import com.android.systemui.statusbar.notification.DynamicPrivacyController;
+import com.android.systemui.statusbar.notification.NotificationEntryManager;
+import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
+import com.android.systemui.statusbar.notification.PropertyAnimator;
+import com.android.systemui.statusbar.notification.ViewGroupFadeHelper;
+import com.android.systemui.statusbar.notification.collection.ListEntry;
+import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.collection.render.ShadeViewManager;
+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.AmbientState;
+import com.android.systemui.statusbar.notification.stack.AnimationProperties;
+import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
+import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
+import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
+import com.android.systemui.statusbar.notification.stack.NotificationStackSizeCalculator;
+import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
+import com.android.systemui.statusbar.phone.CentralSurfaces;
+import com.android.systemui.statusbar.phone.DozeParameters;
+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.KeyguardBottomAreaView;
+import com.android.systemui.statusbar.phone.KeyguardBottomAreaViewController;
+import com.android.systemui.statusbar.phone.KeyguardBouncer;
+import com.android.systemui.statusbar.phone.KeyguardBypassController;
+import com.android.systemui.statusbar.phone.KeyguardClockPositionAlgorithm;
+import com.android.systemui.statusbar.phone.KeyguardStatusBarView;
+import com.android.systemui.statusbar.phone.KeyguardStatusBarViewController;
+import com.android.systemui.statusbar.phone.LockscreenGestureLogger;
+import com.android.systemui.statusbar.phone.LockscreenGestureLogger.LockscreenUiEvent;
+import com.android.systemui.statusbar.phone.NotificationIconAreaController;
+import com.android.systemui.statusbar.phone.PhoneStatusBarView;
+import com.android.systemui.statusbar.phone.ScreenOffAnimationController;
+import com.android.systemui.statusbar.phone.ScrimController;
+import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
+import com.android.systemui.statusbar.phone.StatusBarTouchableRegionManager;
+import com.android.systemui.statusbar.phone.TapAgainViewController;
+import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController;
+import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent;
+import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment;
+import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
+import com.android.systemui.statusbar.phone.panelstate.PanelState;
+import com.android.systemui.statusbar.policy.ConfigurationController;
+import com.android.systemui.statusbar.policy.KeyguardQsUserSwitchController;
+import com.android.systemui.statusbar.policy.KeyguardStateController;
+import com.android.systemui.statusbar.policy.KeyguardUserSwitcherController;
+import com.android.systemui.statusbar.policy.KeyguardUserSwitcherView;
+import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
+import com.android.systemui.statusbar.window.StatusBarWindowStateController;
+import com.android.systemui.unfold.SysUIUnfoldComponent;
+import com.android.systemui.util.Compile;
+import com.android.systemui.util.LargeScreenUtils;
+import com.android.systemui.util.ListenerSet;
+import com.android.systemui.util.Utils;
+import com.android.systemui.util.time.SystemClock;
+import com.android.systemui.wallet.controller.QuickAccessWalletController;
+import com.android.wm.shell.animation.FlingAnimationUtils;
+
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Optional;
+import java.util.Set;
+import java.util.function.Consumer;
+
+import javax.inject.Inject;
+import javax.inject.Provider;
+
+@CentralSurfacesComponent.CentralSurfacesScope
+public final class NotificationPanelViewController extends PanelViewController {
+
+    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;
+
+    /**
+     * The parallax amount of the quick settings translation when dragging down the panel
+     */
+    private static final float QS_PARALLAX_AMOUNT = 0.175f;
+
+    /**
+     * Fling expanding QS.
+     */
+    private static final int FLING_EXPAND = 0;
+
+    /**
+     * Fling collapsing QS, potentially stopping when QS becomes QQS.
+     */
+    private static final int FLING_COLLAPSE = 1;
+
+    /**
+     * Fling until QS is completely hidden.
+     */
+    private static final int FLING_HIDE = 2;
+    private static final long ANIMATION_DELAY_ICON_FADE_IN =
+            ActivityLaunchAnimator.TIMINGS.getTotalDuration()
+                    - CollapsedStatusBarFragment.FADE_IN_DURATION
+                    - CollapsedStatusBarFragment.FADE_IN_DELAY - 48;
+
+    private final DozeParameters mDozeParameters;
+    private final OnHeightChangedListener mOnHeightChangedListener = new OnHeightChangedListener();
+    private final Runnable mCollapseExpandAction = new CollapseExpandAction();
+    private final OnOverscrollTopChangedListener
+            mOnOverscrollTopChangedListener =
+            new OnOverscrollTopChangedListener();
+    private final OnEmptySpaceClickListener
+            mOnEmptySpaceClickListener =
+            new OnEmptySpaceClickListener();
+    private final MyOnHeadsUpChangedListener
+            mOnHeadsUpChangedListener =
+            new MyOnHeadsUpChangedListener();
+    private final HeightListener mHeightListener = new HeightListener();
+    private final ConfigurationListener mConfigurationListener = new ConfigurationListener();
+    private final SettingsChangeObserver mSettingsChangeObserver;
+
+    @VisibleForTesting
+    final StatusBarStateListener mStatusBarStateListener =
+            new StatusBarStateListener();
+    private final NotificationPanelView mView;
+    private final VibratorHelper mVibratorHelper;
+    private final MetricsLogger mMetricsLogger;
+    private final ConfigurationController mConfigurationController;
+    private final Provider<FlingAnimationUtils.Builder> mFlingAnimationUtilsBuilder;
+    private final NotificationStackScrollLayoutController mNotificationStackScrollLayoutController;
+    private final NotificationIconAreaController mNotificationIconAreaController;
+
+    // Cap and total height of Roboto font. Needs to be adjusted when font for the big clock is
+    // changed.
+    private static final int CAP_HEIGHT = 1456;
+    private static final int FONT_HEIGHT = 2163;
+
+    /**
+     * Maximum time before which we will expand the panel even for slow motions when getting a
+     * touch passed over from launcher.
+     */
+    private static final int MAX_TIME_TO_OPEN_WHEN_FLINGING_FROM_LAUNCHER = 300;
+
+    private static final int MAX_DOWN_EVENT_BUFFER_SIZE = 50;
+
+    private static final String COUNTER_PANEL_OPEN = "panel_open";
+    private static final String COUNTER_PANEL_OPEN_QS = "panel_open_qs";
+    private static final String COUNTER_PANEL_OPEN_PEEK = "panel_open_peek";
+
+    private static final Rect M_DUMMY_DIRTY_RECT = new Rect(0, 0, 1, 1);
+    private static final Rect EMPTY_RECT = new Rect();
+
+    private final InteractionJankMonitor mInteractionJankMonitor;
+    private final LayoutInflater mLayoutInflater;
+    private final FeatureFlags mFeatureFlags;
+    private final PowerManager mPowerManager;
+    private final AccessibilityManager mAccessibilityManager;
+    private final NotificationWakeUpCoordinator mWakeUpCoordinator;
+    private final PulseExpansionHandler mPulseExpansionHandler;
+    private final KeyguardBypassController mKeyguardBypassController;
+    private final KeyguardUpdateMonitor mUpdateMonitor;
+    private final ConversationNotificationManager mConversationNotificationManager;
+    private final AuthController mAuthController;
+    private final MediaHierarchyManager mMediaHierarchyManager;
+    private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
+    private final KeyguardStatusViewComponent.Factory mKeyguardStatusViewComponentFactory;
+    private final KeyguardQsUserSwitchComponent.Factory mKeyguardQsUserSwitchComponentFactory;
+    private final KeyguardUserSwitcherComponent.Factory mKeyguardUserSwitcherComponentFactory;
+    private final KeyguardStatusBarViewComponent.Factory mKeyguardStatusBarViewComponentFactory;
+    private final FragmentService mFragmentService;
+    private final ScrimController mScrimController;
+    private final PrivacyDotViewController mPrivacyDotViewController;
+    private final QuickAccessWalletController mQuickAccessWalletController;
+    private final QRCodeScannerController mQRCodeScannerController;
+    private final ControlsComponent mControlsComponent;
+    private final NotificationRemoteInputManager mRemoteInputManager;
+
+    private final LockscreenShadeTransitionController mLockscreenShadeTransitionController;
+    private final ShadeTransitionController mShadeTransitionController;
+    private final TapAgainViewController mTapAgainViewController;
+    private final LargeScreenShadeHeaderController mLargeScreenShadeHeaderController;
+    private final RecordingController mRecordingController;
+    private final PanelEventsEmitter mPanelEventsEmitter;
+    private boolean mSplitShadeEnabled;
+    /** The bottom padding reserved for elements of the keyguard measuring notifications. */
+    private float mKeyguardNotificationBottomPadding;
+    /**
+     * The top padding from where notification should start in lockscreen.
+     * Should be static also during animations and should match the Y of the first notification.
+     */
+    private float mKeyguardNotificationTopPadding;
+    /** Current max allowed keyguard notifications determined by measuring the panel. */
+    private int mMaxAllowedKeyguardNotifications;
+
+    private KeyguardQsUserSwitchController mKeyguardQsUserSwitchController;
+    private KeyguardUserSwitcherController mKeyguardUserSwitcherController;
+    private KeyguardStatusBarView mKeyguardStatusBar;
+    private KeyguardStatusBarViewController mKeyguardStatusBarViewController;
+    @VisibleForTesting
+    QS mQs;
+    private FrameLayout mQsFrame;
+    private final QsFrameTranslateController mQsFrameTranslateController;
+    private KeyguardStatusViewController mKeyguardStatusViewController;
+    private final LockIconViewController mLockIconViewController;
+    private NotificationsQuickSettingsContainer mNotificationContainerParent;
+    private final NotificationsQSContainerController mNotificationsQSContainerController;
+    private final Provider<KeyguardBottomAreaViewController>
+            mKeyguardBottomAreaViewControllerProvider;
+    private boolean mAnimateNextPositionUpdate;
+    private float mQuickQsHeaderHeight;
+    private final ScreenOffAnimationController mScreenOffAnimationController;
+    private final UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController;
+
+    private int mTrackingPointer;
+    private VelocityTracker mQsVelocityTracker;
+    private boolean mQsTracking;
+
+    /**
+     * If set, the ongoing touch gesture might both trigger the expansion in {@link PanelView} and
+     * the expansion for quick settings.
+     */
+    private boolean mConflictingQsExpansionGesture;
+
+    private boolean mPanelExpanded;
+
+    /**
+     * Indicates that QS is in expanded state which can happen by:
+     * - single pane shade: expanding shade and then expanding QS
+     * - split shade: just expanding shade (QS are expanded automatically)
+     */
+    private boolean mQsExpanded;
+    private boolean mQsExpandedWhenExpandingStarted;
+    private boolean mQsFullyExpanded;
+    private boolean mKeyguardShowing;
+    private boolean mKeyguardQsUserSwitchEnabled;
+    private boolean mKeyguardUserSwitcherEnabled;
+    private boolean mDozing;
+    private boolean mDozingOnDown;
+    private boolean mBouncerShowing;
+    private int mBarState;
+    private float mInitialHeightOnTouch;
+    private float mInitialTouchX;
+    private float mInitialTouchY;
+    private float mQsExpansionHeight;
+    private int mQsMinExpansionHeight;
+    private int mQsMaxExpansionHeight;
+    private int mQsPeekHeight;
+    private boolean mStackScrollerOverscrolling;
+    private boolean mQsExpansionFromOverscroll;
+    private float mLastOverscroll;
+    private boolean mQsExpansionEnabledPolicy = true;
+    private boolean mQsExpansionEnabledAmbient = true;
+    private ValueAnimator mQsExpansionAnimator;
+    private FlingAnimationUtils mFlingAnimationUtils;
+    private int mStatusBarMinHeight;
+    private int mStatusBarHeaderHeightKeyguard;
+    private float mOverStretchAmount;
+    private float mDownX;
+    private float mDownY;
+    private int mDisplayTopInset = 0; // in pixels
+    private int mDisplayRightInset = 0; // in pixels
+    private int mLargeScreenShadeHeaderHeight;
+    private int mSplitShadeNotificationsScrimMarginBottom;
+
+    private final KeyguardClockPositionAlgorithm
+            mClockPositionAlgorithm =
+            new KeyguardClockPositionAlgorithm();
+    private final KeyguardClockPositionAlgorithm.Result
+            mClockPositionResult =
+            new KeyguardClockPositionAlgorithm.Result();
+    private boolean mIsExpanding;
+
+    private boolean mBlockTouches;
+
+    /**
+     * Determines if QS should be already expanded when expanding shade.
+     * Used for split shade, two finger gesture as well as accessibility shortcut to QS.
+     */
+    @VisibleForTesting
+    boolean mQsExpandImmediate;
+    private boolean mTwoFingerQsExpandPossible;
+    private String mHeaderDebugInfo;
+
+    /**
+     * If we are in a panel collapsing motion, we reset scrollY of our scroll view but still
+     * need to take this into account in our panel height calculation.
+     */
+    private boolean mQsAnimatorExpand;
+    private boolean mIsLaunchTransitionFinished;
+    private boolean mOnlyAffordanceInThisMotion;
+    private ValueAnimator mQsSizeChangeAnimator;
+
+    private boolean mQsScrimEnabled = true;
+    private boolean mQsTouchAboveFalsingThreshold;
+    private int mQsFalsingThreshold;
+
+    private HeadsUpTouchHelper mHeadsUpTouchHelper;
+    private boolean mListenForHeadsUp;
+    private int mNavigationBarBottomHeight;
+    private boolean mExpandingFromHeadsUp;
+    private boolean mCollapsedOnDown;
+    private boolean mClosingWithAlphaFadeOut;
+    private boolean mHeadsUpAnimatingAway;
+    private boolean mLaunchingAffordance;
+    private final FalsingManager mFalsingManager;
+    private final FalsingCollector mFalsingCollector;
+
+    private final Runnable mHeadsUpExistenceChangedRunnable = () -> {
+        setHeadsUpAnimatingAway(false);
+        updatePanelExpansionAndVisibility();
+    };
+    private boolean mShowIconsWhenExpanded;
+    private int mIndicationBottomPadding;
+    private int mAmbientIndicationBottomPadding;
+    private boolean mIsFullWidth;
+    private boolean mBlockingExpansionForCurrentTouch;
+
+    /**
+     * Following variables maintain state of events when input focus transfer may occur.
+     */
+    private boolean mExpectingSynthesizedDown; // expecting to see synthesized DOWN event
+    private boolean mLastEventSynthesizedDown; // last event was synthesized DOWN event
+
+    /**
+     * Current dark amount that follows regular interpolation curve of animation.
+     */
+    private float mInterpolatedDarkAmount;
+
+    /**
+     * Dark amount that animates from 0 to 1 or vice-versa in linear manner, even if the
+     * interpolation curve is different.
+     */
+    private float mLinearDarkAmount;
+
+    private boolean mPulsing;
+    private boolean mHideIconsDuringLaunchAnimation = true;
+    private int mStackScrollerMeasuringPass;
+    /**
+     * Non-null if there's a heads-up notification that we're currently tracking the position of.
+     */
+    @Nullable
+    private ExpandableNotificationRow mTrackedHeadsUpNotification;
+    private final ArrayList<Consumer<ExpandableNotificationRow>>
+            mTrackingHeadsUpListeners = new ArrayList<>();
+    private HeadsUpAppearanceController mHeadsUpAppearanceController;
+
+    private int mPanelAlpha;
+    private Runnable mPanelAlphaEndAction;
+    private float mBottomAreaShadeAlpha;
+    private final ValueAnimator mBottomAreaShadeAlphaAnimator;
+    private final AnimatableProperty mPanelAlphaAnimator = AnimatableProperty.from("panelAlpha",
+            NotificationPanelView::setPanelAlphaInternal,
+            NotificationPanelView::getCurrentPanelAlpha,
+            R.id.panel_alpha_animator_tag, R.id.panel_alpha_animator_start_tag,
+            R.id.panel_alpha_animator_end_tag);
+    private final AnimationProperties mPanelAlphaOutPropertiesAnimator =
+            new AnimationProperties().setDuration(150).setCustomInterpolator(
+                    mPanelAlphaAnimator.getProperty(), Interpolators.ALPHA_OUT);
+    private final AnimationProperties mPanelAlphaInPropertiesAnimator =
+            new AnimationProperties().setDuration(200).setAnimationEndAction((property) -> {
+                if (mPanelAlphaEndAction != null) {
+                    mPanelAlphaEndAction.run();
+                }
+            }).setCustomInterpolator(
+                    mPanelAlphaAnimator.getProperty(), Interpolators.ALPHA_IN);
+    private final NotificationEntryManager mEntryManager;
+
+    private final CommandQueue mCommandQueue;
+    private final UserManager mUserManager;
+    private final MediaDataManager mMediaDataManager;
+    private final SysUiState mSysUiState;
+
+    private final NotificationShadeDepthController mDepthController;
+    private final int mDisplayId;
+
+    private KeyguardIndicationController mKeyguardIndicationController;
+    private int mHeadsUpInset;
+    private boolean mHeadsUpPinnedMode;
+    private boolean mAllowExpandForSmallExpansion;
+    private Runnable mExpandAfterLayoutRunnable;
+
+    /**
+     * The padding between the start of notifications and the qs boundary on the lockscreen.
+     * On lockscreen, notifications aren't inset this extra amount, but we still want the
+     * qs boundary to be padded.
+     */
+    private int mLockscreenNotificationQSPadding;
+
+    /**
+     * The amount of progress we are currently in if we're transitioning to the full shade.
+     * 0.0f means we're not transitioning yet, while 1 means we're all the way in the full
+     * shade. This value can also go beyond 1.1 when we're overshooting!
+     */
+    private float mTransitioningToFullShadeProgress;
+
+    /**
+     * Position of the qs bottom during the full shade transition. This is needed as the toppadding
+     * can change during state changes, which makes it much harder to do animations
+     */
+    private int mTransitionToFullShadeQSPosition;
+
+    /**
+     * Distance that the full shade transition takes in order for qs to fully transition to the
+     * shade.
+     */
+    private int mDistanceForQSFullShadeTransition;
+
+    /**
+     * The translation amount for QS for the full shade transition
+     */
+    private float mQsTranslationForFullShadeTransition;
+
+    /**
+     * The maximum overshoot allowed for the top padding for the full shade transition
+     */
+    private int mMaxOverscrollAmountForPulse;
+
+    /**
+     * Should we animate the next bounds update
+     */
+    private boolean mAnimateNextNotificationBounds;
+    /**
+     * The delay for the next bounds animation
+     */
+    private long mNotificationBoundsAnimationDelay;
+
+    /**
+     * The duration of the notification bounds animation
+     */
+    private long mNotificationBoundsAnimationDuration;
+
+    /**
+     * Is this a collapse that started on the panel where we should allow the panel to intercept
+     */
+    private boolean mIsPanelCollapseOnQQS;
+
+    private boolean mAnimatingQS;
+
+    /**
+     * The end bounds of a clipping animation.
+     */
+    private final Rect mQsClippingAnimationEndBounds = new Rect();
+
+    /**
+     * The animator for the qs clipping bounds.
+     */
+    private ValueAnimator mQsClippingAnimation = null;
+
+    /**
+     * Is the current animator resetting the qs translation.
+     */
+    private boolean mIsQsTranslationResetAnimator;
+
+    /**
+     * Is the current animator resetting the pulse expansion after a drag down
+     */
+    private boolean mIsPulseExpansionResetAnimator;
+    private final Rect mKeyguardStatusAreaClipBounds = new Rect();
+    private final Region mQsInterceptRegion = new Region();
+
+    /**
+     * The alpha of the views which only show on the keyguard but not in shade / shade locked
+     */
+    private float mKeyguardOnlyContentAlpha = 1.0f;
+
+    /**
+     * The translationY of the views which only show on the keyguard but in shade / shade locked.
+     */
+    private int mKeyguardOnlyTransitionTranslationY = 0;
+
+    private float mUdfpsMaxYBurnInOffset;
+
+    /**
+     * Are we currently in gesture navigation
+     */
+    private boolean mIsGestureNavigation;
+    private int mOldLayoutDirection;
+    private NotificationShelfController mNotificationShelfController;
+    private int mScrimCornerRadius;
+    private int mScreenCornerRadius;
+    private boolean mQSAnimatingHiddenFromCollapsed;
+    private boolean mUseLargeScreenShadeHeader;
+
+    private int mQsClipTop;
+    private int mQsClipBottom;
+    private boolean mQsVisible;
+    private final ContentResolver mContentResolver;
+    private float mMinFraction;
+
+    private final KeyguardMediaController mKeyguardMediaController;
+
+    private boolean mStatusViewCentered = true;
+
+    private final Optional<KeyguardUnfoldTransition> mKeyguardUnfoldTransition;
+    private final Optional<NotificationPanelUnfoldAnimationController>
+            mNotificationPanelUnfoldAnimationController;
+
+    /** The drag distance required to fully expand the split shade. */
+    private int mSplitShadeFullTransitionDistance;
+
+    private final NotificationListContainer mNotificationListContainer;
+    private final NotificationStackSizeCalculator mNotificationStackSizeCalculator;
+
+    private final NPVCDownEventState.Buffer mLastDownEvents;
+
+    private final Runnable mAnimateKeyguardBottomAreaInvisibleEndRunnable =
+            () -> mKeyguardBottomArea.setVisibility(View.GONE);
+
+    private final AccessibilityDelegate mAccessibilityDelegate = new AccessibilityDelegate() {
+        @Override
+        public void onInitializeAccessibilityNodeInfo(View host,
+                AccessibilityNodeInfo info) {
+            super.onInitializeAccessibilityNodeInfo(host, info);
+            info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD);
+            info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_UP);
+        }
+
+        @Override
+        public boolean performAccessibilityAction(View host, int action, Bundle args) {
+            if (action
+                    == AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD.getId()
+                    || action
+                    == AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_UP.getId()) {
+                mStatusBarKeyguardViewManager.showBouncer(true);
+                return true;
+            }
+            return super.performAccessibilityAction(host, action, args);
+        }
+    };
+
+    private final FalsingTapListener mFalsingTapListener = new FalsingTapListener() {
+        @Override
+        public void onDoubleTapRequired() {
+            if (mStatusBarStateController.getState() == StatusBarState.SHADE_LOCKED) {
+                mTapAgainViewController.show();
+            } else {
+                mKeyguardIndicationController.showTransientIndication(
+                        R.string.notification_tap_again);
+            }
+            mVibratorHelper.vibrate(VibrationEffect.EFFECT_STRENGTH_MEDIUM);
+        }
+    };
+
+    private final CameraGestureHelper mCameraGestureHelper;
+    private final Provider<KeyguardBottomAreaViewModel> mKeyguardBottomAreaViewModelProvider;
+    private final Provider<SetClockPositionUseCase> mSetClockPositionUseCaseProvider;
+    private final Provider<SetKeyguardBottomAreaAlphaUseCase>
+            mSetKeyguardBottomAreaAlphaUseCaseProvider;
+    private final Provider<SetKeyguardBottomAreaAnimateDozingTransitionsUseCase>
+            mSetKeyguardBottomAreaAnimateDozingTransitionsUseCaseProvider;
+
+    @Inject
+    public NotificationPanelViewController(NotificationPanelView view,
+            @Main Handler handler,
+            LayoutInflater layoutInflater,
+            FeatureFlags featureFlags,
+            NotificationWakeUpCoordinator coordinator, PulseExpansionHandler pulseExpansionHandler,
+            DynamicPrivacyController dynamicPrivacyController,
+            KeyguardBypassController bypassController, FalsingManager falsingManager,
+            FalsingCollector falsingCollector,
+            NotificationEntryManager notificationEntryManager,
+            KeyguardStateController keyguardStateController,
+            StatusBarStateController statusBarStateController,
+            StatusBarWindowStateController statusBarWindowStateController,
+            NotificationShadeWindowController notificationShadeWindowController,
+            DozeLog dozeLog,
+            DozeParameters dozeParameters, CommandQueue commandQueue, VibratorHelper vibratorHelper,
+            LatencyTracker latencyTracker, PowerManager powerManager,
+            AccessibilityManager accessibilityManager, @DisplayId int displayId,
+            KeyguardUpdateMonitor keyguardUpdateMonitor,
+            MetricsLogger metricsLogger,
+            ConfigurationController configurationController,
+            Provider<FlingAnimationUtils.Builder> flingAnimationUtilsBuilder,
+            StatusBarTouchableRegionManager statusBarTouchableRegionManager,
+            ConversationNotificationManager conversationNotificationManager,
+            MediaHierarchyManager mediaHierarchyManager,
+            StatusBarKeyguardViewManager statusBarKeyguardViewManager,
+            NotificationsQSContainerController notificationsQSContainerController,
+            NotificationStackScrollLayoutController notificationStackScrollLayoutController,
+            KeyguardStatusViewComponent.Factory keyguardStatusViewComponentFactory,
+            KeyguardQsUserSwitchComponent.Factory keyguardQsUserSwitchComponentFactory,
+            KeyguardUserSwitcherComponent.Factory keyguardUserSwitcherComponentFactory,
+            KeyguardStatusBarViewComponent.Factory keyguardStatusBarViewComponentFactory,
+            LockscreenShadeTransitionController lockscreenShadeTransitionController,
+            NotificationIconAreaController notificationIconAreaController,
+            AuthController authController,
+            ScrimController scrimController,
+            UserManager userManager,
+            MediaDataManager mediaDataManager,
+            NotificationShadeDepthController notificationShadeDepthController,
+            AmbientState ambientState,
+            LockIconViewController lockIconViewController,
+            KeyguardMediaController keyguardMediaController,
+            PrivacyDotViewController privacyDotViewController,
+            TapAgainViewController tapAgainViewController,
+            NavigationModeController navigationModeController,
+            FragmentService fragmentService,
+            ContentResolver contentResolver,
+            QuickAccessWalletController quickAccessWalletController,
+            QRCodeScannerController qrCodeScannerController,
+            RecordingController recordingController,
+            LargeScreenShadeHeaderController largeScreenShadeHeaderController,
+            ScreenOffAnimationController screenOffAnimationController,
+            LockscreenGestureLogger lockscreenGestureLogger,
+            PanelExpansionStateManager panelExpansionStateManager,
+            NotificationRemoteInputManager remoteInputManager,
+            Optional<SysUIUnfoldComponent> unfoldComponent,
+            ControlsComponent controlsComponent,
+            InteractionJankMonitor interactionJankMonitor,
+            QsFrameTranslateController qsFrameTranslateController,
+            SysUiState sysUiState,
+            Provider<KeyguardBottomAreaViewController> keyguardBottomAreaViewControllerProvider,
+            KeyguardUnlockAnimationController keyguardUnlockAnimationController,
+            NotificationListContainer notificationListContainer,
+            PanelEventsEmitter panelEventsEmitter,
+            NotificationStackSizeCalculator notificationStackSizeCalculator,
+            UnlockedScreenOffAnimationController unlockedScreenOffAnimationController,
+            ShadeTransitionController shadeTransitionController,
+            SystemClock systemClock,
+            CameraGestureHelper cameraGestureHelper,
+            Provider<KeyguardBottomAreaViewModel> keyguardBottomAreaViewModelProvider,
+            Provider<SetClockPositionUseCase> setClockPositionUseCaseProvider,
+            Provider<SetKeyguardBottomAreaAlphaUseCase> setKeyguardBottomAreaAlphaUseCaseProvider,
+            Provider<SetKeyguardBottomAreaAnimateDozingTransitionsUseCase>
+                    setKeyguardBottomAreaAnimateDozingTransitionsUseCaseProvider) {
+        super(view,
+                falsingManager,
+                dozeLog,
+                keyguardStateController,
+                (SysuiStatusBarStateController) statusBarStateController,
+                notificationShadeWindowController,
+                vibratorHelper,
+                statusBarKeyguardViewManager,
+                latencyTracker,
+                flingAnimationUtilsBuilder.get(),
+                statusBarTouchableRegionManager,
+                lockscreenGestureLogger,
+                panelExpansionStateManager,
+                ambientState,
+                interactionJankMonitor,
+                systemClock);
+        mView = view;
+        mVibratorHelper = vibratorHelper;
+        mKeyguardMediaController = keyguardMediaController;
+        mPrivacyDotViewController = privacyDotViewController;
+        mQuickAccessWalletController = quickAccessWalletController;
+        mQRCodeScannerController = qrCodeScannerController;
+        mControlsComponent = controlsComponent;
+        mMetricsLogger = metricsLogger;
+        mConfigurationController = configurationController;
+        mFlingAnimationUtilsBuilder = flingAnimationUtilsBuilder;
+        mMediaHierarchyManager = mediaHierarchyManager;
+        mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
+        mNotificationsQSContainerController = notificationsQSContainerController;
+        mNotificationListContainer = notificationListContainer;
+        mNotificationStackSizeCalculator = notificationStackSizeCalculator;
+        mKeyguardBottomAreaViewControllerProvider = keyguardBottomAreaViewControllerProvider;
+        mNotificationsQSContainerController.init();
+        mNotificationStackScrollLayoutController = notificationStackScrollLayoutController;
+        mNotificationIconAreaController = notificationIconAreaController;
+        mKeyguardStatusViewComponentFactory = keyguardStatusViewComponentFactory;
+        mKeyguardStatusBarViewComponentFactory = keyguardStatusBarViewComponentFactory;
+        mDepthController = notificationShadeDepthController;
+        mContentResolver = contentResolver;
+        mKeyguardQsUserSwitchComponentFactory = keyguardQsUserSwitchComponentFactory;
+        mKeyguardUserSwitcherComponentFactory = keyguardUserSwitcherComponentFactory;
+        mFragmentService = fragmentService;
+        mSettingsChangeObserver = new SettingsChangeObserver(handler);
+        mSplitShadeEnabled =
+                LargeScreenUtils.shouldUseSplitNotificationShade(mResources);
+        mView.setWillNotDraw(!DEBUG_DRAWABLE);
+        mLargeScreenShadeHeaderController = largeScreenShadeHeaderController;
+        mLayoutInflater = layoutInflater;
+        mFeatureFlags = featureFlags;
+        mFalsingManager = falsingManager;
+        mFalsingCollector = falsingCollector;
+        mPowerManager = powerManager;
+        mWakeUpCoordinator = coordinator;
+        mAccessibilityManager = accessibilityManager;
+        mView.setAccessibilityPaneTitle(determineAccessibilityPaneTitle());
+        setPanelAlpha(255, false /* animate */);
+        mCommandQueue = commandQueue;
+        mRecordingController = recordingController;
+        mDisplayId = displayId;
+        mPulseExpansionHandler = pulseExpansionHandler;
+        mDozeParameters = dozeParameters;
+        mScrimController = scrimController;
+        mUserManager = userManager;
+        mMediaDataManager = mediaDataManager;
+        mTapAgainViewController = tapAgainViewController;
+        mInteractionJankMonitor = interactionJankMonitor;
+        mSysUiState = sysUiState;
+        mPanelEventsEmitter = panelEventsEmitter;
+        pulseExpansionHandler.setPulseExpandAbortListener(() -> {
+            if (mQs != null) {
+                mQs.animateHeaderSlidingOut();
+            }
+        });
+        statusBarWindowStateController.addListener(this::onStatusBarWindowStateChanged);
+        mKeyguardBypassController = bypassController;
+        mUpdateMonitor = keyguardUpdateMonitor;
+        mLockscreenShadeTransitionController = lockscreenShadeTransitionController;
+        mShadeTransitionController = shadeTransitionController;
+        lockscreenShadeTransitionController.setNotificationPanelController(this);
+        shadeTransitionController.setNotificationPanelViewController(this);
+        DynamicPrivacyControlListener
+                dynamicPrivacyControlListener =
+                new DynamicPrivacyControlListener();
+        dynamicPrivacyController.addListener(dynamicPrivacyControlListener);
+
+        panelExpansionStateManager.addStateListener(this::onPanelStateChanged);
+
+        mBottomAreaShadeAlphaAnimator = ValueAnimator.ofFloat(1f, 0);
+        mBottomAreaShadeAlphaAnimator.addUpdateListener(animation -> {
+            mBottomAreaShadeAlpha = (float) animation.getAnimatedValue();
+            updateKeyguardBottomAreaAlpha();
+        });
+        mBottomAreaShadeAlphaAnimator.setDuration(160);
+        mBottomAreaShadeAlphaAnimator.setInterpolator(Interpolators.ALPHA_OUT);
+        mEntryManager = notificationEntryManager;
+        mConversationNotificationManager = conversationNotificationManager;
+        mAuthController = authController;
+        mLockIconViewController = lockIconViewController;
+        mScreenOffAnimationController = screenOffAnimationController;
+        mUnlockedScreenOffAnimationController = unlockedScreenOffAnimationController;
+        mRemoteInputManager = remoteInputManager;
+        mLastDownEvents = new NPVCDownEventState.Buffer(MAX_DOWN_EVENT_BUFFER_SIZE);
+
+        int currentMode = navigationModeController.addListener(
+                mode -> mIsGestureNavigation = QuickStepContract.isGesturalMode(mode));
+        mIsGestureNavigation = QuickStepContract.isGesturalMode(currentMode);
+
+        mView.setBackgroundColor(Color.TRANSPARENT);
+        OnAttachStateChangeListener onAttachStateChangeListener = new OnAttachStateChangeListener();
+        mView.addOnAttachStateChangeListener(onAttachStateChangeListener);
+        if (mView.isAttachedToWindow()) {
+            onAttachStateChangeListener.onViewAttachedToWindow(mView);
+        }
+
+        mView.setOnApplyWindowInsetsListener(new OnApplyWindowInsetsListener());
+
+        if (DEBUG_DRAWABLE) {
+            mView.getOverlay().add(new DebugDrawable());
+        }
+
+        mKeyguardUnfoldTransition = unfoldComponent.map(
+                SysUIUnfoldComponent::getKeyguardUnfoldTransition);
+        mNotificationPanelUnfoldAnimationController = unfoldComponent.map(
+                SysUIUnfoldComponent::getNotificationPanelUnfoldAnimationController);
+
+        mQsFrameTranslateController = qsFrameTranslateController;
+        updateUserSwitcherFlags();
+        mKeyguardBottomAreaViewModelProvider = keyguardBottomAreaViewModelProvider;
+        onFinishInflate();
+        keyguardUnlockAnimationController.addKeyguardUnlockAnimationListener(
+                new KeyguardUnlockAnimationController.KeyguardUnlockAnimationListener() {
+                    @Override
+                    public void onUnlockAnimationFinished() {
+                        // Make sure the clock is in the correct position after the unlock animation
+                        // so that it's not in the wrong place when we show the keyguard again.
+                        positionClockAndNotifications(true /* forceClockUpdate */);
+                    }
+
+                    @Override
+                    public void onUnlockAnimationStarted(
+                            boolean playingCannedAnimation,
+                            boolean isWakeAndUnlock,
+                            long unlockAnimationStartDelay,
+                            long unlockAnimationDuration) {
+                        // Disable blurs while we're unlocking so that panel expansion does not
+                        // cause blurring. This will eventually be re-enabled by the panel view on
+                        // ACTION_UP, since the user's finger might still be down after a swipe to
+                        // unlock gesture, and we don't want that to cause blurring either.
+                        mDepthController.setBlursDisabledForUnlock(mTracking);
+
+                        if (playingCannedAnimation && !isWakeAndUnlock) {
+                            // Hide the panel so it's not in the way or the surface behind the
+                            // keyguard, which will be appearing. If we're wake and unlocking, the
+                            // lock screen is hidden instantly so should not be flung away.
+                            if (isTracking() || isFlinging()) {
+                                // Instant collpase the notification panel since the notification
+                                // panel is already in the middle animating
+                                onTrackingStopped(false);
+                                instantCollapse();
+                            } else {
+                                mView.animate()
+                                        .alpha(0f)
+                                        .setStartDelay(0)
+                                        // Translate up by 4%.
+                                        .translationY(mView.getHeight() * -0.04f)
+                                        // This start delay is to give us time to animate out before
+                                        // the launcher icons animation starts, so use that as our
+                                        // duration.
+                                        .setDuration(unlockAnimationStartDelay)
+                                        .setInterpolator(EMPHASIZED_ACCELERATE)
+                                        .withEndAction(() -> {
+                                            instantCollapse();
+                                            mView.setAlpha(1f);
+                                            mView.setTranslationY(0f);
+                                        })
+                                        .start();
+                            }
+                        }
+                    }
+                });
+        mCameraGestureHelper = cameraGestureHelper;
+        mSetClockPositionUseCaseProvider = setClockPositionUseCaseProvider;
+        mSetKeyguardBottomAreaAlphaUseCaseProvider = setKeyguardBottomAreaAlphaUseCaseProvider;
+        mSetKeyguardBottomAreaAnimateDozingTransitionsUseCaseProvider =
+                setKeyguardBottomAreaAnimateDozingTransitionsUseCaseProvider;
+    }
+
+    @VisibleForTesting
+    void onFinishInflate() {
+        loadDimens();
+        mKeyguardStatusBar = mView.findViewById(R.id.keyguard_header);
+
+        FrameLayout userAvatarContainer = null;
+        KeyguardUserSwitcherView keyguardUserSwitcherView = null;
+
+        if (mKeyguardUserSwitcherEnabled && mUserManager.isUserSwitcherEnabled(
+                mResources.getBoolean(R.bool.qs_show_user_switcher_for_single_user))) {
+            if (mKeyguardQsUserSwitchEnabled) {
+                ViewStub stub = mView.findViewById(R.id.keyguard_qs_user_switch_stub);
+                userAvatarContainer = (FrameLayout) stub.inflate();
+            } else {
+                ViewStub stub = mView.findViewById(R.id.keyguard_user_switcher_stub);
+                keyguardUserSwitcherView = (KeyguardUserSwitcherView) stub.inflate();
+            }
+        }
+
+        mKeyguardStatusBarViewController =
+                mKeyguardStatusBarViewComponentFactory.build(
+                                mKeyguardStatusBar,
+                                mNotificationPanelViewStateProvider)
+                        .getKeyguardStatusBarViewController();
+        mKeyguardStatusBarViewController.init();
+
+        mNotificationContainerParent = mView.findViewById(R.id.notification_container_parent);
+        updateViewControllers(
+                mView.findViewById(R.id.keyguard_status_view),
+                userAvatarContainer,
+                keyguardUserSwitcherView);
+
+        NotificationStackScrollLayout stackScrollLayout = mView.findViewById(
+                R.id.notification_stack_scroller);
+        mNotificationStackScrollLayoutController.attach(stackScrollLayout);
+        mNotificationStackScrollLayoutController.setOnHeightChangedListener(
+                mOnHeightChangedListener);
+        mNotificationStackScrollLayoutController.setOverscrollTopChangedListener(
+                mOnOverscrollTopChangedListener);
+        mNotificationStackScrollLayoutController.setOnScrollListener(this::onNotificationScrolled);
+        mNotificationStackScrollLayoutController.setOnStackYChanged(this::onStackYChanged);
+        mNotificationStackScrollLayoutController.setOnEmptySpaceClickListener(
+                mOnEmptySpaceClickListener);
+        addTrackingHeadsUpListener(mNotificationStackScrollLayoutController::setTrackingHeadsUp);
+        mKeyguardBottomArea = mView.findViewById(R.id.keyguard_bottom_area);
+
+        initBottomArea();
+
+        mWakeUpCoordinator.setStackScroller(mNotificationStackScrollLayoutController);
+        mQsFrame = mView.findViewById(R.id.qs_frame);
+        mPulseExpansionHandler.setUp(mNotificationStackScrollLayoutController);
+        mWakeUpCoordinator.addListener(new NotificationWakeUpCoordinator.WakeUpListener() {
+            @Override
+            public void onFullyHiddenChanged(boolean isFullyHidden) {
+                mKeyguardStatusBarViewController.updateForHeadsUp();
+            }
+
+            @Override
+            public void onPulseExpansionChanged(boolean expandingChanged) {
+                if (mKeyguardBypassController.getBypassEnabled()) {
+                    // Position the notifications while dragging down while pulsing
+                    requestScrollerTopPaddingUpdate(false /* animate */);
+                }
+            }
+        });
+
+        mView.setRtlChangeListener(layoutDirection -> {
+            if (layoutDirection != mOldLayoutDirection) {
+                mOldLayoutDirection = layoutDirection;
+            }
+        });
+
+        mView.setAccessibilityDelegate(mAccessibilityDelegate);
+        if (mSplitShadeEnabled) {
+            updateResources();
+        }
+
+        mTapAgainViewController.init();
+        mLargeScreenShadeHeaderController.init();
+        mKeyguardUnfoldTransition.ifPresent(u -> u.setup(mView));
+        mNotificationPanelUnfoldAnimationController.ifPresent(controller ->
+                controller.setup(mNotificationContainerParent));
+    }
+
+    @Override
+    protected void loadDimens() {
+        super.loadDimens();
+        mFlingAnimationUtils = mFlingAnimationUtilsBuilder.get()
+                .setMaxLengthSeconds(0.4f).build();
+        mStatusBarMinHeight = SystemBarUtils.getStatusBarHeight(mView.getContext());
+        mStatusBarHeaderHeightKeyguard = Utils.getStatusBarHeaderHeightKeyguard(mView.getContext());
+        mQsPeekHeight = mResources.getDimensionPixelSize(R.dimen.qs_peek_height);
+        mClockPositionAlgorithm.loadDimens(mResources);
+        mQsFalsingThreshold = mResources.getDimensionPixelSize(R.dimen.qs_falsing_threshold);
+        mIndicationBottomPadding = mResources.getDimensionPixelSize(
+                R.dimen.keyguard_indication_bottom_padding);
+        int statusbarHeight = SystemBarUtils.getStatusBarHeight(mView.getContext());
+        mHeadsUpInset = statusbarHeight + mResources.getDimensionPixelSize(
+                R.dimen.heads_up_status_bar_padding);
+        mDistanceForQSFullShadeTransition = mResources.getDimensionPixelSize(
+                R.dimen.lockscreen_shade_qs_transition_distance);
+        mMaxOverscrollAmountForPulse = mResources.getDimensionPixelSize(
+                R.dimen.pulse_expansion_max_top_overshoot);
+        mScrimCornerRadius = mResources.getDimensionPixelSize(
+                R.dimen.notification_scrim_corner_radius);
+        mScreenCornerRadius = (int) ScreenDecorationsUtils.getWindowCornerRadius(
+                mView.getContext());
+        mLockscreenNotificationQSPadding = mResources.getDimensionPixelSize(
+                R.dimen.notification_side_paddings);
+        mUdfpsMaxYBurnInOffset = mResources.getDimensionPixelSize(R.dimen.udfps_burn_in_offset_y);
+    }
+
+    private void updateViewControllers(KeyguardStatusView keyguardStatusView,
+            FrameLayout userAvatarView,
+            KeyguardUserSwitcherView keyguardUserSwitcherView) {
+        // Re-associate the KeyguardStatusViewController
+        KeyguardStatusViewComponent statusViewComponent =
+                mKeyguardStatusViewComponentFactory.build(keyguardStatusView);
+        mKeyguardStatusViewController = statusViewComponent.getKeyguardStatusViewController();
+        mKeyguardStatusViewController.init();
+
+        if (mKeyguardUserSwitcherController != null) {
+            // Try to close the switcher so that callbacks are triggered if necessary.
+            // Otherwise, NPV can get into a state where some of the views are still hidden
+            mKeyguardUserSwitcherController.closeSwitcherIfOpenAndNotSimple(false);
+        }
+
+        mKeyguardQsUserSwitchController = null;
+        mKeyguardUserSwitcherController = null;
+
+        // Re-associate the KeyguardUserSwitcherController
+        if (userAvatarView != null) {
+            KeyguardQsUserSwitchComponent userSwitcherComponent =
+                    mKeyguardQsUserSwitchComponentFactory.build(userAvatarView);
+            mKeyguardQsUserSwitchController =
+                    userSwitcherComponent.getKeyguardQsUserSwitchController();
+            mKeyguardQsUserSwitchController.init();
+            mKeyguardStatusBarViewController.setKeyguardUserSwitcherEnabled(true);
+        } else if (keyguardUserSwitcherView != null) {
+            KeyguardUserSwitcherComponent userSwitcherComponent =
+                    mKeyguardUserSwitcherComponentFactory.build(keyguardUserSwitcherView);
+            mKeyguardUserSwitcherController =
+                    userSwitcherComponent.getKeyguardUserSwitcherController();
+            mKeyguardUserSwitcherController.init();
+            mKeyguardStatusBarViewController.setKeyguardUserSwitcherEnabled(true);
+        } else {
+            mKeyguardStatusBarViewController.setKeyguardUserSwitcherEnabled(false);
+        }
+    }
+
+    /**
+     * Returns if there's a custom clock being presented.
+     */
+    public boolean hasCustomClock() {
+        return mKeyguardStatusViewController.hasCustomClock();
+    }
+
+    private void setCentralSurfaces(CentralSurfaces centralSurfaces) {
+        // TODO: this can be injected.
+        mCentralSurfaces = centralSurfaces;
+    }
+
+    public void updateResources() {
+        mSplitShadeNotificationsScrimMarginBottom =
+                mResources.getDimensionPixelSize(
+                        R.dimen.split_shade_notifications_scrim_margin_bottom);
+        final boolean newSplitShadeEnabled =
+                LargeScreenUtils.shouldUseSplitNotificationShade(mResources);
+        final boolean splitShadeChanged = mSplitShadeEnabled != newSplitShadeEnabled;
+        mSplitShadeEnabled = newSplitShadeEnabled;
+
+        if (mQs != null) {
+            mQs.setInSplitShade(mSplitShadeEnabled);
+        }
+
+        mUseLargeScreenShadeHeader =
+                LargeScreenUtils.shouldUseLargeScreenShadeHeader(mView.getResources());
+
+        mLargeScreenShadeHeaderHeight =
+                mResources.getDimensionPixelSize(R.dimen.large_screen_shade_header_height);
+        mQuickQsHeaderHeight = mUseLargeScreenShadeHeader ? mLargeScreenShadeHeaderHeight :
+                SystemBarUtils.getQuickQsOffsetHeight(mView.getContext());
+        int topMargin = mUseLargeScreenShadeHeader ? mLargeScreenShadeHeaderHeight :
+                mResources.getDimensionPixelSize(R.dimen.notification_panel_margin_top);
+        mLargeScreenShadeHeaderController.setLargeScreenActive(mUseLargeScreenShadeHeader);
+        mAmbientState.setStackTopMargin(topMargin);
+        mNotificationsQSContainerController.updateResources();
+
+        updateKeyguardStatusViewAlignment(/* animate= */false);
+
+        mKeyguardMediaController.refreshMediaPosition();
+
+        if (splitShadeChanged) {
+            onSplitShadeEnabledChanged();
+        }
+
+        mSplitShadeFullTransitionDistance =
+                mResources.getDimensionPixelSize(R.dimen.split_shade_full_transition_distance);
+    }
+
+    private void onSplitShadeEnabledChanged() {
+        // when we switch between split shade and regular shade we want to enforce setting qs to
+        // the default state: expanded for split shade and collapsed otherwise
+        if (!isOnKeyguard() && mPanelExpanded) {
+            setQsExpanded(mSplitShadeEnabled);
+        }
+        if (isOnKeyguard() && mQsExpanded && mSplitShadeEnabled) {
+            // In single column keyguard - when you swipe from the top - QS is fully expanded and
+            // StatusBarState is KEYGUARD. That state doesn't make sense for split shade,
+            // where notifications are always visible and we effectively go to fully expanded
+            // shade, that is SHADE_LOCKED.
+            // Also we might just be switching from regular expanded shade, so we don't want
+            // to force state transition if it's already correct.
+            mStatusBarStateController.setState(StatusBarState.SHADE_LOCKED, /* force= */false);
+        }
+        updateClockAppearance();
+        updateQsState();
+        mNotificationStackScrollLayoutController.updateFooter();
+    }
+
+    private View reInflateStub(int viewId, int stubId, int layoutId, boolean enabled) {
+        View view = mView.findViewById(viewId);
+        if (view != null) {
+            int index = mView.indexOfChild(view);
+            mView.removeView(view);
+            if (enabled) {
+                view = mLayoutInflater.inflate(layoutId, mView, false);
+                mView.addView(view, index);
+            } else {
+                // Add the stub back so we can re-inflate it again if necessary
+                ViewStub stub = new ViewStub(mView.getContext(), layoutId);
+                stub.setId(stubId);
+                mView.addView(stub, index);
+                view = null;
+            }
+        } else if (enabled) {
+            // It's possible the stub was never inflated if the configuration changed
+            ViewStub stub = mView.findViewById(stubId);
+            view = stub.inflate();
+        }
+        return view;
+    }
+
+    @VisibleForTesting
+    void reInflateViews() {
+        if (DEBUG_LOGCAT) Log.d(TAG, "reInflateViews");
+        // Re-inflate the status view group.
+        KeyguardStatusView keyguardStatusView =
+                mNotificationContainerParent.findViewById(R.id.keyguard_status_view);
+        int statusIndex = mNotificationContainerParent.indexOfChild(keyguardStatusView);
+        mNotificationContainerParent.removeView(keyguardStatusView);
+        keyguardStatusView = (KeyguardStatusView) mLayoutInflater.inflate(
+                R.layout.keyguard_status_view, mNotificationContainerParent, false);
+        mNotificationContainerParent.addView(keyguardStatusView, statusIndex);
+        // When it's reinflated, this is centered by default. If it shouldn't be, this will update
+        // below when resources are updated.
+        mStatusViewCentered = true;
+        attachSplitShadeMediaPlayerContainer(
+                keyguardStatusView.findViewById(R.id.status_view_media_container));
+
+        // we need to update KeyguardStatusView constraints after reinflating it
+        updateResources();
+
+        // Re-inflate the keyguard user switcher group.
+        updateUserSwitcherFlags();
+        boolean isUserSwitcherEnabled = mUserManager.isUserSwitcherEnabled(
+                mResources.getBoolean(R.bool.qs_show_user_switcher_for_single_user));
+        boolean showQsUserSwitch = mKeyguardQsUserSwitchEnabled && isUserSwitcherEnabled;
+        boolean showKeyguardUserSwitcher =
+                !mKeyguardQsUserSwitchEnabled
+                        && mKeyguardUserSwitcherEnabled
+                        && isUserSwitcherEnabled;
+        FrameLayout userAvatarView = (FrameLayout) reInflateStub(
+                R.id.keyguard_qs_user_switch_view /* viewId */,
+                R.id.keyguard_qs_user_switch_stub /* stubId */,
+                R.layout.keyguard_qs_user_switch /* layoutId */,
+                showQsUserSwitch /* enabled */);
+        KeyguardUserSwitcherView keyguardUserSwitcherView =
+                (KeyguardUserSwitcherView) reInflateStub(
+                        R.id.keyguard_user_switcher_view /* viewId */,
+                        R.id.keyguard_user_switcher_stub /* stubId */,
+                        R.layout.keyguard_user_switcher /* layoutId */,
+                        showKeyguardUserSwitcher /* enabled */);
+
+        updateViewControllers(mView.findViewById(R.id.keyguard_status_view), userAvatarView,
+                keyguardUserSwitcherView);
+
+        // Update keyguard bottom area
+        int index = mView.indexOfChild(mKeyguardBottomArea);
+        mView.removeView(mKeyguardBottomArea);
+        KeyguardBottomAreaView oldBottomArea = mKeyguardBottomArea;
+        mKeyguardBottomArea = mKeyguardBottomAreaViewControllerProvider.get().getView();
+        mKeyguardBottomArea.initFrom(oldBottomArea);
+        mView.addView(mKeyguardBottomArea, index);
+        initBottomArea();
+        mKeyguardIndicationController.setIndicationArea(mKeyguardBottomArea);
+        mStatusBarStateListener.onDozeAmountChanged(mStatusBarStateController.getDozeAmount(),
+                mStatusBarStateController.getInterpolatedDozeAmount());
+
+        mKeyguardStatusViewController.setKeyguardStatusViewVisibility(
+                mBarState,
+                false,
+                false,
+                mBarState);
+        if (mKeyguardQsUserSwitchController != null) {
+            mKeyguardQsUserSwitchController.setKeyguardQsUserSwitchVisibility(
+                    mBarState,
+                    false,
+                    false,
+                    mBarState);
+        }
+        if (mKeyguardUserSwitcherController != null) {
+            mKeyguardUserSwitcherController.setKeyguardUserSwitcherVisibility(
+                    mBarState,
+                    false,
+                    false,
+                    mBarState);
+        }
+        setKeyguardBottomAreaVisibility(mBarState, false);
+
+        mKeyguardUnfoldTransition.ifPresent(u -> u.setup(mView));
+        mNotificationPanelUnfoldAnimationController.ifPresent(u -> u.setup(mView));
+    }
+
+    private void attachSplitShadeMediaPlayerContainer(FrameLayout container) {
+        mKeyguardMediaController.attachSplitShadeContainer(container);
+    }
+
+    private void initBottomArea() {
+        if (mFeatureFlags.isEnabled(Flags.MODERN_BOTTOM_AREA)) {
+            mKeyguardBottomArea.init(mKeyguardBottomAreaViewModelProvider.get(), mFalsingManager);
+        } else {
+            // TODO(b/235403546): remove this method call when the new implementation is complete
+            //  and these are not needed.
+            mKeyguardBottomArea.init(
+                    mFalsingManager,
+                    mQuickAccessWalletController,
+                    mControlsComponent,
+                    mQRCodeScannerController);
+        }
+    }
+
+    @VisibleForTesting
+    void setMaxDisplayedNotifications(int maxAllowed) {
+        mMaxAllowedKeyguardNotifications = maxAllowed;
+    }
+
+    private void updateMaxDisplayedNotifications(boolean recompute) {
+        if (recompute) {
+            setMaxDisplayedNotifications(Math.max(computeMaxKeyguardNotifications(), 1));
+        } else {
+            if (SPEW_LOGCAT) Log.d(TAG, "Skipping computeMaxKeyguardNotifications() by request");
+        }
+
+        if (mKeyguardShowing && !mKeyguardBypassController.getBypassEnabled()) {
+            mNotificationStackScrollLayoutController.setMaxDisplayedNotifications(
+                    mMaxAllowedKeyguardNotifications);
+            mNotificationStackScrollLayoutController.setKeyguardBottomPaddingForDebug(
+                    mKeyguardNotificationBottomPadding);
+        } else {
+            // no max when not on the keyguard
+            mNotificationStackScrollLayoutController.setMaxDisplayedNotifications(-1);
+            mNotificationStackScrollLayoutController.setKeyguardBottomPaddingForDebug(-1f);
+        }
+    }
+
+    private boolean shouldAvoidChangingNotificationsCount() {
+        return mHintAnimationRunning || mUnlockedScreenOffAnimationController.isAnimationPlaying();
+    }
+
+    public void setKeyguardIndicationController(KeyguardIndicationController indicationController) {
+        mKeyguardIndicationController = indicationController;
+        mKeyguardIndicationController.setIndicationArea(mKeyguardBottomArea);
+    }
+
+    private void updateGestureExclusionRect() {
+        Rect exclusionRect = calculateGestureExclusionRect();
+        mView.setSystemGestureExclusionRects(exclusionRect.isEmpty() ? Collections.emptyList()
+                : Collections.singletonList(exclusionRect));
+    }
+
+    private Rect calculateGestureExclusionRect() {
+        Rect exclusionRect = null;
+        Region touchableRegion = mStatusBarTouchableRegionManager.calculateTouchableRegion();
+        if (isFullyCollapsed() && touchableRegion != null) {
+            // Note: The manager also calculates the non-pinned touchable region
+            exclusionRect = touchableRegion.getBounds();
+        }
+        return exclusionRect != null ? exclusionRect : EMPTY_RECT;
+    }
+
+    private void setIsFullWidth(boolean isFullWidth) {
+        mIsFullWidth = isFullWidth;
+        mScrimController.setClipsQsScrim(isFullWidth);
+        mNotificationStackScrollLayoutController.setIsFullWidth(isFullWidth);
+    }
+
+    private void startQsSizeChangeAnimation(int oldHeight, final int newHeight) {
+        if (mQsSizeChangeAnimator != null) {
+            oldHeight = (int) mQsSizeChangeAnimator.getAnimatedValue();
+            mQsSizeChangeAnimator.cancel();
+        }
+        mQsSizeChangeAnimator = ValueAnimator.ofInt(oldHeight, newHeight);
+        mQsSizeChangeAnimator.setDuration(300);
+        mQsSizeChangeAnimator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
+        mQsSizeChangeAnimator.addUpdateListener(animation -> {
+            requestScrollerTopPaddingUpdate(false /* animate */);
+            requestPanelHeightUpdate();
+            int height = (int) mQsSizeChangeAnimator.getAnimatedValue();
+            mQs.setHeightOverride(height);
+        });
+        mQsSizeChangeAnimator.addListener(new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                mQsSizeChangeAnimator = null;
+            }
+        });
+        mQsSizeChangeAnimator.start();
+    }
+
+    /**
+     * Positions the clock and notifications dynamically depending on how many notifications are
+     * showing.
+     */
+    private void positionClockAndNotifications() {
+        positionClockAndNotifications(false /* forceUpdate */);
+    }
+
+    /**
+     * Positions the clock and notifications dynamically depending on how many notifications are
+     * showing.
+     *
+     * @param forceClockUpdate Should the clock be updated even when not on keyguard
+     */
+    private void positionClockAndNotifications(boolean forceClockUpdate) {
+        boolean animate = mNotificationStackScrollLayoutController.isAddOrRemoveAnimationPending();
+        int stackScrollerPadding;
+        boolean onKeyguard = isOnKeyguard();
+
+        if (onKeyguard || forceClockUpdate) {
+            updateClockAppearance();
+        }
+        if (!onKeyguard) {
+            if (mSplitShadeEnabled) {
+                // Quick settings are not on the top of the notifications
+                // when in split shade mode (they are on the left side),
+                // so we should not add a padding for them
+                stackScrollerPadding = 0;
+            } else {
+                stackScrollerPadding = getUnlockedStackScrollerPadding();
+            }
+        } else {
+            stackScrollerPadding = mClockPositionResult.stackScrollerPaddingExpanded;
+        }
+
+        mNotificationStackScrollLayoutController.setIntrinsicPadding(stackScrollerPadding);
+        mKeyguardBottomArea.setAntiBurnInOffsetX(mClockPositionResult.clockX);
+
+        mStackScrollerMeasuringPass++;
+        requestScrollerTopPaddingUpdate(animate);
+        mStackScrollerMeasuringPass = 0;
+        mAnimateNextPositionUpdate = false;
+    }
+
+    private void updateClockAppearance() {
+        int userSwitcherPreferredY = mStatusBarHeaderHeightKeyguard;
+        boolean bypassEnabled = mKeyguardBypassController.getBypassEnabled();
+        final boolean hasVisibleNotifications = mNotificationStackScrollLayoutController
+                .getVisibleNotificationCount() != 0
+                || mMediaDataManager.hasActiveMediaOrRecommendation();
+        boolean splitShadeWithActiveMedia =
+                mSplitShadeEnabled && mMediaDataManager.hasActiveMediaOrRecommendation();
+        boolean shouldAnimateClockChange = mScreenOffAnimationController.shouldAnimateClockChange();
+        if ((hasVisibleNotifications && !mSplitShadeEnabled)
+                || (splitShadeWithActiveMedia && !mDozing)) {
+            mKeyguardStatusViewController.displayClock(SMALL, shouldAnimateClockChange);
+        } else {
+            mKeyguardStatusViewController.displayClock(LARGE, shouldAnimateClockChange);
+        }
+        updateKeyguardStatusViewAlignment(true /* animate */);
+        int userSwitcherHeight = mKeyguardQsUserSwitchController != null
+                ? mKeyguardQsUserSwitchController.getUserIconHeight() : 0;
+        if (mKeyguardUserSwitcherController != null) {
+            userSwitcherHeight = mKeyguardUserSwitcherController.getHeight();
+        }
+        float expandedFraction =
+                mScreenOffAnimationController.shouldExpandNotifications()
+                        ? 1.0f : getExpandedFraction();
+        float darkamount =
+                mScreenOffAnimationController.shouldExpandNotifications()
+                        ? 1.0f : mInterpolatedDarkAmount;
+
+        float udfpsAodTopLocation = -1f;
+        if (mUpdateMonitor.isUdfpsEnrolled() && mAuthController.getUdfpsProps().size() > 0) {
+            FingerprintSensorPropertiesInternal props = mAuthController.getUdfpsProps().get(0);
+            final SensorLocationInternal location = props.getLocation();
+            udfpsAodTopLocation = location.sensorLocationY - location.sensorRadius
+                    - mUdfpsMaxYBurnInOffset;
+        }
+
+        mClockPositionAlgorithm.setup(
+                mStatusBarHeaderHeightKeyguard,
+                expandedFraction,
+                mKeyguardStatusViewController.getLockscreenHeight(),
+                userSwitcherHeight,
+                userSwitcherPreferredY,
+                darkamount, mOverStretchAmount,
+                bypassEnabled, getUnlockedStackScrollerPadding(),
+                computeQsExpansionFraction(),
+                mDisplayTopInset,
+                mSplitShadeEnabled,
+                udfpsAodTopLocation,
+                mKeyguardStatusViewController.getClockBottom(mStatusBarHeaderHeightKeyguard),
+                mKeyguardStatusViewController.isClockTopAligned());
+        mClockPositionAlgorithm.run(mClockPositionResult);
+        mSetClockPositionUseCaseProvider.get().invoke(
+                mClockPositionResult.clockX, mClockPositionResult.clockY);
+        boolean animate = mNotificationStackScrollLayoutController.isAddOrRemoveAnimationPending();
+        boolean animateClock = (animate || mAnimateNextPositionUpdate) && shouldAnimateClockChange;
+        mKeyguardStatusViewController.updatePosition(
+                mClockPositionResult.clockX, mClockPositionResult.clockY,
+                mClockPositionResult.clockScale, animateClock);
+        if (mKeyguardQsUserSwitchController != null) {
+            mKeyguardQsUserSwitchController.updatePosition(
+                    mClockPositionResult.clockX,
+                    mClockPositionResult.userSwitchY,
+                    animateClock);
+        }
+        if (mKeyguardUserSwitcherController != null) {
+            mKeyguardUserSwitcherController.updatePosition(
+                    mClockPositionResult.clockX,
+                    mClockPositionResult.userSwitchY,
+                    animateClock);
+        }
+        updateNotificationTranslucency();
+        updateClock();
+    }
+
+    private void updateKeyguardStatusViewAlignment(boolean animate) {
+        boolean shouldBeCentered = shouldKeyguardStatusViewBeCentered();
+        if (mStatusViewCentered != shouldBeCentered) {
+            mStatusViewCentered = shouldBeCentered;
+            ConstraintSet constraintSet = new ConstraintSet();
+            constraintSet.clone(mNotificationContainerParent);
+            int statusConstraint = shouldBeCentered ? PARENT_ID : R.id.qs_edge_guideline;
+            constraintSet.connect(R.id.keyguard_status_view, END, statusConstraint, END);
+            if (animate) {
+                ChangeBounds transition = new ChangeBounds();
+                if (mSplitShadeEnabled) {
+                    // Excluding media from the transition on split-shade, as it doesn't transition
+                    // horizontally properly.
+                    transition.excludeTarget(R.id.status_view_media_container, true);
+                }
+                transition.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
+                transition.setDuration(StackStateAnimator.ANIMATION_DURATION_STANDARD);
+                TransitionManager.beginDelayedTransition(mNotificationContainerParent, transition);
+            }
+
+            constraintSet.applyTo(mNotificationContainerParent);
+        }
+        mKeyguardUnfoldTransition.ifPresent(t -> t.setStatusViewCentered(mStatusViewCentered));
+    }
+
+    private boolean shouldKeyguardStatusViewBeCentered() {
+        boolean hasVisibleNotifications = mNotificationStackScrollLayoutController
+                .getVisibleNotificationCount() != 0
+                || mMediaDataManager.hasActiveMediaOrRecommendation();
+        boolean isOnAod = mDozing && mDozeParameters.getAlwaysOn();
+        return !mSplitShadeEnabled || !hasVisibleNotifications || isOnAod
+                || hasPulsingNotifications();
+    }
+
+    /**
+     * @return the padding of the stackscroller when unlocked
+     */
+    private int getUnlockedStackScrollerPadding() {
+        return (mQs != null ? mQs.getHeader().getHeight() : 0) + mQsPeekHeight;
+    }
+
+    /** Returns space between top of lock icon and bottom of NotificationStackScrollLayout. */
+    private float getLockIconPadding() {
+        float lockIconPadding = 0f;
+        if (mLockIconViewController.getTop() != 0f) {
+            lockIconPadding = mNotificationStackScrollLayoutController.getBottom()
+                    - mLockIconViewController.getTop();
+        }
+        return lockIconPadding;
+    }
+
+    /** Returns space available to show notifications on lockscreen. */
+    @VisibleForTesting
+    float getVerticalSpaceForLockscreenNotifications() {
+        final float lockIconPadding = getLockIconPadding();
+
+        float bottomPadding = Math.max(lockIconPadding,
+                Math.max(mIndicationBottomPadding, mAmbientIndicationBottomPadding));
+        mKeyguardNotificationBottomPadding = bottomPadding;
+
+        float staticTopPadding = mClockPositionAlgorithm.getLockscreenMinStackScrollerPadding()
+                // getMinStackScrollerPadding is from the top of the screen,
+                // but we need it from the top of the NSSL.
+                - mNotificationStackScrollLayoutController.getTop();
+        mKeyguardNotificationTopPadding = staticTopPadding;
+
+        // To debug the available space, enable debug lines in this class. If you change how the
+        // available space is calculated, please also update those lines.
+        final float verticalSpace =
+                mNotificationStackScrollLayoutController.getHeight()
+                        - staticTopPadding
+                        - bottomPadding;
+
+        if (SPEW_LOGCAT) {
+            Log.i(TAG, "\n");
+            Log.i(TAG, "staticTopPadding[" + staticTopPadding
+                    + "] = Clock.padding["
+                    + mClockPositionAlgorithm.getLockscreenMinStackScrollerPadding()
+                    + "] - NSSLC.top[" + mNotificationStackScrollLayoutController.getTop()
+                    + "]"
+            );
+            Log.i(TAG, "bottomPadding[" + bottomPadding
+                    + "] = max(ambientIndicationBottomPadding[" + mAmbientIndicationBottomPadding
+                    + "], mIndicationBottomPadding[" + mIndicationBottomPadding
+                    + "], lockIconPadding[" + lockIconPadding
+                    + "])"
+            );
+            Log.i(TAG, "verticalSpaceForNotifications[" + verticalSpace
+                    + "] = NSSL.height[" + mNotificationStackScrollLayoutController.getHeight()
+                    + "] - staticTopPadding[" + staticTopPadding
+                    + "] - bottomPadding[" + bottomPadding
+                    + "]"
+            );
+        }
+        return verticalSpace;
+    }
+
+    /** Returns extra space available to show the shelf on lockscreen */
+    @VisibleForTesting
+    float getVerticalSpaceForLockscreenShelf() {
+        final float lockIconPadding = getLockIconPadding();
+
+        final float noShelfOverlapBottomPadding =
+                Math.max(mIndicationBottomPadding, mAmbientIndicationBottomPadding);
+
+        final float extraSpaceForShelf = lockIconPadding - noShelfOverlapBottomPadding;
+
+        if (extraSpaceForShelf > 0f) {
+            return Math.min(mNotificationShelfController.getIntrinsicHeight(),
+                    extraSpaceForShelf);
+        }
+        return 0f;
+    }
+
+    /**
+     * @return Maximum number of notifications that can fit on keyguard.
+     */
+    @VisibleForTesting
+    int computeMaxKeyguardNotifications() {
+        if (mAmbientState.getFractionToShade() > 0) {
+            if (SPEW_LOGCAT) {
+                Log.v(TAG, "Internally skipping computeMaxKeyguardNotifications()"
+                        + " fractionToShade=" + mAmbientState.getFractionToShade()
+                );
+            }
+            return mMaxAllowedKeyguardNotifications;
+        }
+        return mNotificationStackSizeCalculator.computeMaxKeyguardNotifications(
+                mNotificationStackScrollLayoutController.getView(),
+                getVerticalSpaceForLockscreenNotifications(),
+                getVerticalSpaceForLockscreenShelf(),
+                mNotificationShelfController.getIntrinsicHeight()
+        );
+    }
+
+    private void updateClock() {
+        float alpha = mClockPositionResult.clockAlpha * mKeyguardOnlyContentAlpha;
+        mKeyguardStatusViewController.setAlpha(alpha);
+        mKeyguardStatusViewController
+                .setTranslationYExcludingMedia(mKeyguardOnlyTransitionTranslationY);
+        if (mKeyguardQsUserSwitchController != null) {
+            mKeyguardQsUserSwitchController.setAlpha(alpha);
+        }
+        if (mKeyguardUserSwitcherController != null) {
+            mKeyguardUserSwitcherController.setAlpha(alpha);
+        }
+    }
+
+    public void animateToFullShade(long delay) {
+        mNotificationStackScrollLayoutController.goToFullShade(delay);
+        mView.requestLayout();
+        mAnimateNextPositionUpdate = true;
+    }
+
+    private void setQsExpansionEnabled() {
+        if (mQs == null) return;
+        mQs.setHeaderClickable(isQsExpansionEnabled());
+    }
+
+    public void setQsExpansionEnabledPolicy(boolean qsExpansionEnabledPolicy) {
+        mQsExpansionEnabledPolicy = qsExpansionEnabledPolicy;
+        setQsExpansionEnabled();
+    }
+
+    public void resetViews(boolean animate) {
+        mIsLaunchTransitionFinished = false;
+        mBlockTouches = false;
+        mCentralSurfaces.getGutsManager().closeAndSaveGuts(true /* leavebehind */, true /* force */,
+                true /* controls */, -1 /* x */, -1 /* y */, true /* resetMenu */);
+        if (animate && !isFullyCollapsed()) {
+            animateCloseQs(true /* animateAway */);
+        } else {
+            closeQs();
+        }
+        mNotificationStackScrollLayoutController.setOverScrollAmount(0f, true /* onTop */, animate,
+                !animate /* cancelAnimators */);
+        mNotificationStackScrollLayoutController.resetScrollPosition();
+    }
+
+    /** Collapses the panel. */
+    public void collapsePanel(boolean animate, boolean delayed, float speedUpFactor) {
+        boolean waiting = false;
+        if (animate && !isFullyCollapsed()) {
+            collapse(delayed, speedUpFactor);
+            waiting = true;
+        } else {
+            resetViews(false /* animate */);
+            setExpandedFraction(0); // just in case
+        }
+        if (!waiting) {
+            // it's possible that nothing animated, so we replicate the termination
+            // conditions of panelExpansionChanged here
+            // TODO(b/200063118): This can likely go away in a future refactor CL.
+            getPanelExpansionStateManager().updateState(STATE_CLOSED);
+        }
+    }
+
+    @Override
+    public void collapse(boolean delayed, float speedUpFactor) {
+        if (!canPanelBeCollapsed()) {
+            return;
+        }
+
+        if (mQsExpanded) {
+            mQsExpandImmediate = true;
+            setShowShelfOnly(true);
+        }
+        super.collapse(delayed, speedUpFactor);
+    }
+
+    private void setShowShelfOnly(boolean shelfOnly) {
+        mNotificationStackScrollLayoutController.setShouldShowShelfOnly(
+                shelfOnly && !mSplitShadeEnabled);
+    }
+
+    public void closeQs() {
+        cancelQsAnimation();
+        setQsExpansion(mQsMinExpansionHeight);
+    }
+
+    @Override
+    @VisibleForTesting
+    protected void cancelHeightAnimator() {
+        super.cancelHeightAnimator();
+    }
+
+    public void cancelAnimation() {
+        mView.animate().cancel();
+    }
+
+    /**
+     * Animate QS closing by flinging it.
+     * If QS is expanded, it will collapse into QQS and stop.
+     * If in split shade, it will collapse the whole shade.
+     *
+     * @param animateAway Do not stop when QS becomes QQS. Fling until QS isn't visible anymore.
+     */
+    public void animateCloseQs(boolean animateAway) {
+        if (mSplitShadeEnabled) {
+            collapsePanel(
+                    /* animate= */true, /* delayed= */false, /* speedUpFactor= */1.0f);
+            return;
+        }
+
+        if (mQsExpansionAnimator != null) {
+            if (!mQsAnimatorExpand) {
+                return;
+            }
+            float height = mQsExpansionHeight;
+            mQsExpansionAnimator.cancel();
+            setQsExpansion(height);
+        }
+        flingSettings(0 /* vel */, animateAway ? FLING_HIDE : FLING_COLLAPSE);
+    }
+
+    private boolean isQsExpansionEnabled() {
+        return mQsExpansionEnabledPolicy && mQsExpansionEnabledAmbient
+                && !mRemoteInputManager.isRemoteInputActive();
+    }
+
+    public void expandWithQs() {
+        if (isQsExpansionEnabled()) {
+            mQsExpandImmediate = true;
+            setShowShelfOnly(true);
+        }
+        if (mSplitShadeEnabled && isOnKeyguard()) {
+            // It's a special case as this method is likely to not be initiated by finger movement
+            // but rather called from adb shell or accessibility service.
+            // We're using LockscreenShadeTransitionController because on lockscreen that's the
+            // source of truth for all shade motion. Not using it would make part of state to be
+            // outdated and will cause bugs. Ideally we'd use this controller also for non-split
+            // case but currently motion in portrait looks worse than when using flingSettings.
+            // TODO: make below function transitioning smoothly also in portrait with null target
+            mLockscreenShadeTransitionController.goToLockedShade(
+                    /* expandedView= */null, /* needsQSAnimation= */false);
+        } else if (isFullyCollapsed()) {
+            expand(true /* animate */);
+        } else {
+            traceQsJank(true /* startTracing */, false /* wasCancelled */);
+            flingSettings(0 /* velocity */, FLING_EXPAND);
+        }
+    }
+
+    public void expandWithoutQs() {
+        if (isQsExpanded()) {
+            flingSettings(0 /* velocity */, FLING_COLLAPSE);
+        } else {
+            expand(true /* animate */);
+        }
+    }
+
+    @Override
+    public void fling(float vel, boolean expand) {
+        GestureRecorder gr = mCentralSurfaces.getGestureRecorder();
+        if (gr != null) {
+            gr.tag("fling " + ((vel > 0) ? "open" : "closed"), "notifications,v=" + vel);
+        }
+        super.fling(vel, expand);
+    }
+
+    @Override
+    protected void flingToHeight(float vel, boolean expand, float target,
+            float collapseSpeedUpFactor, boolean expandBecauseOfFalsing) {
+        mHeadsUpTouchHelper.notifyFling(!expand);
+        mKeyguardStateController.notifyPanelFlingStart(!expand /* flingingToDismiss */);
+        setClosingWithAlphaFadeout(!expand && !isOnKeyguard() && getFadeoutAlpha() == 1.0f);
+        mNotificationStackScrollLayoutController.setPanelFlinging(true);
+        super.flingToHeight(vel, expand, target, collapseSpeedUpFactor, expandBecauseOfFalsing);
+    }
+
+    @Override
+    protected void onFlingEnd(boolean cancelled) {
+        super.onFlingEnd(cancelled);
+        mNotificationStackScrollLayoutController.setPanelFlinging(false);
+    }
+
+    private boolean onQsIntercept(MotionEvent event) {
+        if (DEBUG_LOGCAT) Log.d(TAG, "onQsIntercept");
+        int pointerIndex = event.findPointerIndex(mTrackingPointer);
+        if (pointerIndex < 0) {
+            pointerIndex = 0;
+            mTrackingPointer = event.getPointerId(pointerIndex);
+        }
+        final float x = event.getX(pointerIndex);
+        final float y = event.getY(pointerIndex);
+
+        switch (event.getActionMasked()) {
+            case MotionEvent.ACTION_DOWN:
+                mInitialTouchY = y;
+                mInitialTouchX = x;
+                initVelocityTracker();
+                trackMovement(event);
+                if (mKeyguardShowing
+                        && shouldQuickSettingsIntercept(mInitialTouchX, mInitialTouchY, 0)) {
+                    // Dragging down on the lockscreen statusbar should prohibit other interactions
+                    // immediately, otherwise we'll wait on the touchslop. This is to allow
+                    // dragging down to expanded quick settings directly on the lockscreen.
+                    mView.getParent().requestDisallowInterceptTouchEvent(true);
+                }
+                if (mQsExpansionAnimator != null) {
+                    mInitialHeightOnTouch = mQsExpansionHeight;
+                    mQsTracking = true;
+                    traceQsJank(true /* startTracing */, false /* wasCancelled */);
+                    mNotificationStackScrollLayoutController.cancelLongPress();
+                }
+                break;
+            case MotionEvent.ACTION_POINTER_UP:
+                final int upPointer = event.getPointerId(event.getActionIndex());
+                if (mTrackingPointer == upPointer) {
+                    // gesture is ongoing, find a new pointer to track
+                    final int newIndex = event.getPointerId(0) != upPointer ? 0 : 1;
+                    mTrackingPointer = event.getPointerId(newIndex);
+                    mInitialTouchX = event.getX(newIndex);
+                    mInitialTouchY = event.getY(newIndex);
+                }
+                break;
+
+            case MotionEvent.ACTION_MOVE:
+                final float h = y - mInitialTouchY;
+                trackMovement(event);
+                if (mQsTracking) {
+
+                    // Already tracking because onOverscrolled was called. We need to update here
+                    // so we don't stop for a frame until the next touch event gets handled in
+                    // onTouchEvent.
+                    setQsExpansion(h + mInitialHeightOnTouch);
+                    trackMovement(event);
+                    return true;
+                }
+                if ((h > getTouchSlop(event) || (h < -getTouchSlop(event) && mQsExpanded))
+                        && Math.abs(h) > Math.abs(x - mInitialTouchX)
+                        && shouldQuickSettingsIntercept(mInitialTouchX, mInitialTouchY, h)) {
+                    if (DEBUG_LOGCAT) Log.d(TAG, "onQsIntercept - start tracking expansion");
+                    mView.getParent().requestDisallowInterceptTouchEvent(true);
+                    mQsTracking = true;
+                    traceQsJank(true /* startTracing */, false /* wasCancelled */);
+                    onQsExpansionStarted();
+                    notifyExpandingFinished();
+                    mInitialHeightOnTouch = mQsExpansionHeight;
+                    mInitialTouchY = y;
+                    mInitialTouchX = x;
+                    mNotificationStackScrollLayoutController.cancelLongPress();
+                    return true;
+                }
+                break;
+
+            case MotionEvent.ACTION_CANCEL:
+            case MotionEvent.ACTION_UP:
+                trackMovement(event);
+                mQsTracking = false;
+                break;
+        }
+        return false;
+    }
+
+    @VisibleForTesting
+    boolean isQsTracking() {
+        return mQsTracking;
+    }
+
+    @Override
+    protected boolean isInContentBounds(float x, float y) {
+        float stackScrollerX = mNotificationStackScrollLayoutController.getX();
+        return !mNotificationStackScrollLayoutController
+                .isBelowLastNotification(x - stackScrollerX, y)
+                && stackScrollerX < x
+                && x < stackScrollerX + mNotificationStackScrollLayoutController.getWidth();
+    }
+
+    private void traceQsJank(boolean startTracing, boolean wasCancelled) {
+        if (mInteractionJankMonitor == null) {
+            return;
+        }
+        if (startTracing) {
+            mInteractionJankMonitor.begin(mView, CUJ_NOTIFICATION_SHADE_QS_EXPAND_COLLAPSE);
+        } else {
+            if (wasCancelled) {
+                mInteractionJankMonitor.cancel(CUJ_NOTIFICATION_SHADE_QS_EXPAND_COLLAPSE);
+            } else {
+                mInteractionJankMonitor.end(CUJ_NOTIFICATION_SHADE_QS_EXPAND_COLLAPSE);
+            }
+        }
+    }
+
+    private void initDownStates(MotionEvent event) {
+        if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
+            mOnlyAffordanceInThisMotion = false;
+            mQsTouchAboveFalsingThreshold = mQsFullyExpanded;
+            mDozingOnDown = isDozing();
+            mDownX = event.getX();
+            mDownY = event.getY();
+            mCollapsedOnDown = isFullyCollapsed();
+            mIsPanelCollapseOnQQS = canPanelCollapseOnQQS(mDownX, mDownY);
+            mListenForHeadsUp = mCollapsedOnDown && mHeadsUpManager.hasPinnedHeadsUp();
+            mAllowExpandForSmallExpansion = mExpectingSynthesizedDown;
+            mTouchSlopExceededBeforeDown = mExpectingSynthesizedDown;
+            // When false, down but not synthesized motion event.
+            mLastEventSynthesizedDown = mExpectingSynthesizedDown;
+            mLastDownEvents.insert(
+                    mSystemClock.currentTimeMillis(),
+                    mDownX,
+                    mDownY,
+                    mQsTouchAboveFalsingThreshold,
+                    mDozingOnDown,
+                    mCollapsedOnDown,
+                    mIsPanelCollapseOnQQS,
+                    mListenForHeadsUp,
+                    mAllowExpandForSmallExpansion,
+                    mTouchSlopExceededBeforeDown,
+                    mLastEventSynthesizedDown
+            );
+        } else {
+            // not down event at all.
+            mLastEventSynthesizedDown = false;
+        }
+    }
+
+    /**
+     * Can the panel collapse in this motion because it was started on QQS?
+     *
+     * @param downX the x location where the touch started
+     * @param downY the y location where the touch started
+     * @return true if the panel could be collapsed because it stared on QQS
+     */
+    private boolean canPanelCollapseOnQQS(float downX, float downY) {
+        if (mCollapsedOnDown || mKeyguardShowing || mQsExpanded) {
+            return false;
+        }
+        View header = mQs == null ? mKeyguardStatusBar : mQs.getHeader();
+        return downX >= mQsFrame.getX() && downX <= mQsFrame.getX() + mQsFrame.getWidth()
+                && downY <= header.getBottom();
+
+    }
+
+    private void flingQsWithCurrentVelocity(float y, boolean isCancelMotionEvent) {
+        float vel = getCurrentQSVelocity();
+        boolean expandsQs = flingExpandsQs(vel);
+        if (expandsQs) {
+            if (mFalsingManager.isUnlockingDisabled() || isFalseTouch(QUICK_SETTINGS)) {
+                expandsQs = false;
+            } else {
+                logQsSwipeDown(y);
+            }
+        } else if (vel < 0) {
+            mFalsingManager.isFalseTouch(QS_COLLAPSE);
+        }
+
+        int flingType;
+        if (expandsQs && !isCancelMotionEvent) {
+            flingType = FLING_EXPAND;
+        } else if (mSplitShadeEnabled) {
+            flingType = FLING_HIDE;
+        } else {
+            flingType = FLING_COLLAPSE;
+        }
+        flingSettings(vel, flingType);
+    }
+
+    private void logQsSwipeDown(float y) {
+        float vel = getCurrentQSVelocity();
+        final int
+                gesture =
+                mBarState == KEYGUARD ? MetricsEvent.ACTION_LS_QS
+                        : MetricsEvent.ACTION_SHADE_QS_PULL;
+        mLockscreenGestureLogger.write(gesture,
+                (int) ((y - mInitialTouchY) / mCentralSurfaces.getDisplayDensity()),
+                (int) (vel / mCentralSurfaces.getDisplayDensity()));
+    }
+
+    private boolean flingExpandsQs(float vel) {
+        if (Math.abs(vel) < mFlingAnimationUtils.getMinVelocityPxPerSecond()) {
+            return computeQsExpansionFraction() > 0.5f;
+        } else {
+            return vel > 0;
+        }
+    }
+
+    private boolean isFalseTouch(@Classifier.InteractionType int interactionType) {
+        if (mFalsingManager.isClassifierEnabled()) {
+            return mFalsingManager.isFalseTouch(interactionType);
+        }
+        return !mQsTouchAboveFalsingThreshold;
+    }
+
+    private float computeQsExpansionFraction() {
+        if (mQSAnimatingHiddenFromCollapsed) {
+            // When hiding QS from collapsed state, the expansion can sometimes temporarily
+            // be larger than 0 because of the timing, leading to flickers.
+            return 0.0f;
+        }
+        return Math.min(
+                1f, (mQsExpansionHeight - mQsMinExpansionHeight) / (mQsMaxExpansionHeight
+                        - mQsMinExpansionHeight));
+    }
+
+    @Override
+    protected boolean shouldExpandWhenNotFlinging() {
+        if (super.shouldExpandWhenNotFlinging()) {
+            return true;
+        }
+        if (mAllowExpandForSmallExpansion) {
+            // When we get a touch that came over from launcher, the velocity isn't always correct
+            // Let's err on expanding if the gesture has been reasonably slow
+            long timeSinceDown = mSystemClock.uptimeMillis() - mDownTime;
+            return timeSinceDown <= MAX_TIME_TO_OPEN_WHEN_FLINGING_FROM_LAUNCHER;
+        }
+        return false;
+    }
+
+    @Override
+    protected float getOpeningHeight() {
+        return mNotificationStackScrollLayoutController.getOpeningHeight();
+    }
+
+
+    private boolean handleQsTouch(MotionEvent event) {
+        if (mSplitShadeEnabled && touchXOutsideOfQs(event.getX())) {
+            return false;
+        }
+        final int action = event.getActionMasked();
+        boolean collapsedQs = !mQsExpanded && !mSplitShadeEnabled;
+        boolean expandedShadeCollapsedQs = getExpandedFraction() == 1f && mBarState != KEYGUARD
+                && collapsedQs && isQsExpansionEnabled();
+        if (action == MotionEvent.ACTION_DOWN && expandedShadeCollapsedQs) {
+            // Down in the empty area while fully expanded - go to QS.
+            mQsTracking = true;
+            traceQsJank(true /* startTracing */, false /* wasCancelled */);
+            mConflictingQsExpansionGesture = true;
+            onQsExpansionStarted();
+            mInitialHeightOnTouch = mQsExpansionHeight;
+            mInitialTouchY = event.getY();
+            mInitialTouchX = event.getX();
+        }
+        if (!isFullyCollapsed()) {
+            handleQsDown(event);
+        }
+        if (!mQsExpandImmediate && mQsTracking) {
+            onQsTouch(event);
+            if (!mConflictingQsExpansionGesture && !mSplitShadeEnabled) {
+                return true;
+            }
+        }
+        if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {
+            mConflictingQsExpansionGesture = false;
+        }
+        if (action == MotionEvent.ACTION_DOWN && isFullyCollapsed() && isQsExpansionEnabled()) {
+            mTwoFingerQsExpandPossible = true;
+        }
+        if (mTwoFingerQsExpandPossible && isOpenQsEvent(event) && event.getY(event.getActionIndex())
+                < mStatusBarMinHeight) {
+            mMetricsLogger.count(COUNTER_PANEL_OPEN_QS, 1);
+            mQsExpandImmediate = true;
+            setShowShelfOnly(true);
+            requestPanelHeightUpdate();
+
+            // Normally, we start listening when the panel is expanded, but here we need to start
+            // earlier so the state is already up to date when dragging down.
+            setListening(true);
+        }
+        return false;
+    }
+
+    private boolean touchXOutsideOfQs(float touchX) {
+        return touchX < mQsFrame.getX() || touchX > mQsFrame.getX() + mQsFrame.getWidth();
+    }
+
+    private boolean isInQsArea(float x, float y) {
+        if (touchXOutsideOfQs(x)) {
+            return false;
+        }
+        // Let's reject anything at the very bottom around the home handle in gesture nav
+        if (mIsGestureNavigation && y > mView.getHeight() - mNavigationBarBottomHeight) {
+            return false;
+        }
+        return y <= mNotificationStackScrollLayoutController.getBottomMostNotificationBottom()
+                || y <= mQs.getView().getY() + mQs.getView().getHeight();
+    }
+
+    private boolean isOpenQsEvent(MotionEvent event) {
+        final int pointerCount = event.getPointerCount();
+        final int action = event.getActionMasked();
+
+        final boolean
+                twoFingerDrag =
+                action == MotionEvent.ACTION_POINTER_DOWN && pointerCount == 2;
+
+        final boolean
+                stylusButtonClickDrag =
+                action == MotionEvent.ACTION_DOWN && (event.isButtonPressed(
+                        MotionEvent.BUTTON_STYLUS_PRIMARY) || event.isButtonPressed(
+                        MotionEvent.BUTTON_STYLUS_SECONDARY));
+
+        final boolean
+                mouseButtonClickDrag =
+                action == MotionEvent.ACTION_DOWN && (event.isButtonPressed(
+                        MotionEvent.BUTTON_SECONDARY) || event.isButtonPressed(
+                        MotionEvent.BUTTON_TERTIARY));
+
+        return twoFingerDrag || stylusButtonClickDrag || mouseButtonClickDrag;
+    }
+
+    private void handleQsDown(MotionEvent event) {
+        if (event.getActionMasked() == MotionEvent.ACTION_DOWN && shouldQuickSettingsIntercept(
+                event.getX(), event.getY(), -1)) {
+            if (DEBUG_LOGCAT) Log.d(TAG, "handleQsDown");
+            mFalsingCollector.onQsDown();
+            mQsTracking = true;
+            onQsExpansionStarted();
+            mInitialHeightOnTouch = mQsExpansionHeight;
+            mInitialTouchY = event.getY();
+            mInitialTouchX = event.getX();
+
+            // If we interrupt an expansion gesture here, make sure to update the state correctly.
+            notifyExpandingFinished();
+        }
+    }
+
+    /**
+     * Input focus transfer is about to happen.
+     */
+    public void startWaitingForOpenPanelGesture() {
+        if (!isFullyCollapsed()) {
+            return;
+        }
+        mExpectingSynthesizedDown = true;
+        onTrackingStarted();
+        updatePanelExpanded();
+    }
+
+    /**
+     * Called when this view is no longer waiting for input focus transfer.
+     *
+     * There are two scenarios behind this function call. First, input focus transfer
+     * has successfully happened and this view already received synthetic DOWN event.
+     * (mExpectingSynthesizedDown == false). Do nothing.
+     *
+     * Second, before input focus transfer finished, user may have lifted finger
+     * in previous window and this window never received synthetic DOWN event.
+     * (mExpectingSynthesizedDown == true).
+     * In this case, we use the velocity to trigger fling event.
+     *
+     * @param velocity unit is in px / millis
+     */
+    public void stopWaitingForOpenPanelGesture(boolean cancel, final float velocity) {
+        if (mExpectingSynthesizedDown) {
+            mExpectingSynthesizedDown = false;
+            if (cancel) {
+                collapse(false /* delayed */, 1.0f /* speedUpFactor */);
+            } else {
+                maybeVibrateOnOpening();
+                fling(velocity > 1f ? 1000f * velocity : 0, true /* expand */);
+            }
+            onTrackingStopped(false);
+        }
+    }
+
+    @Override
+    protected boolean flingExpands(float vel, float vectorVel, float x, float y) {
+        boolean expands = super.flingExpands(vel, vectorVel, x, y);
+
+        // If we are already running a QS expansion, make sure that we keep the panel open.
+        if (mQsExpansionAnimator != null) {
+            expands = true;
+        }
+        return expands;
+    }
+
+    @Override
+    protected boolean shouldGestureWaitForTouchSlop() {
+        if (mExpectingSynthesizedDown) {
+            mExpectingSynthesizedDown = false;
+            return false;
+        }
+        return isFullyCollapsed() || mBarState != StatusBarState.SHADE;
+    }
+
+    private void onQsTouch(MotionEvent event) {
+        int pointerIndex = event.findPointerIndex(mTrackingPointer);
+        if (pointerIndex < 0) {
+            pointerIndex = 0;
+            mTrackingPointer = event.getPointerId(pointerIndex);
+        }
+        final float y = event.getY(pointerIndex);
+        final float x = event.getX(pointerIndex);
+        final float h = y - mInitialTouchY;
+
+        switch (event.getActionMasked()) {
+            case MotionEvent.ACTION_DOWN:
+                mQsTracking = true;
+                traceQsJank(true /* startTracing */, false /* wasCancelled */);
+                mInitialTouchY = y;
+                mInitialTouchX = x;
+                onQsExpansionStarted();
+                mInitialHeightOnTouch = mQsExpansionHeight;
+                initVelocityTracker();
+                trackMovement(event);
+                break;
+
+            case MotionEvent.ACTION_POINTER_UP:
+                final int upPointer = event.getPointerId(event.getActionIndex());
+                if (mTrackingPointer == upPointer) {
+                    // gesture is ongoing, find a new pointer to track
+                    final int newIndex = event.getPointerId(0) != upPointer ? 0 : 1;
+                    final float newY = event.getY(newIndex);
+                    final float newX = event.getX(newIndex);
+                    mTrackingPointer = event.getPointerId(newIndex);
+                    mInitialHeightOnTouch = mQsExpansionHeight;
+                    mInitialTouchY = newY;
+                    mInitialTouchX = newX;
+                }
+                break;
+
+            case MotionEvent.ACTION_MOVE:
+                if (DEBUG_LOGCAT) Log.d(TAG, "onQSTouch move");
+                setQsExpansion(h + mInitialHeightOnTouch);
+                if (h >= getFalsingThreshold()) {
+                    mQsTouchAboveFalsingThreshold = true;
+                }
+                trackMovement(event);
+                break;
+
+            case MotionEvent.ACTION_UP:
+            case MotionEvent.ACTION_CANCEL:
+                mQsTracking = false;
+                mTrackingPointer = -1;
+                trackMovement(event);
+                float fraction = computeQsExpansionFraction();
+                if (fraction != 0f || y >= mInitialTouchY) {
+                    flingQsWithCurrentVelocity(y,
+                            event.getActionMasked() == MotionEvent.ACTION_CANCEL);
+                } else {
+                    traceQsJank(false /* startTracing */,
+                            event.getActionMasked() == MotionEvent.ACTION_CANCEL);
+                }
+                if (mQsVelocityTracker != null) {
+                    mQsVelocityTracker.recycle();
+                    mQsVelocityTracker = null;
+                }
+                break;
+        }
+    }
+
+    private int getFalsingThreshold() {
+        float factor = mCentralSurfaces.isWakeUpComingFromTouch() ? 1.5f : 1.0f;
+        return (int) (mQsFalsingThreshold * factor);
+    }
+
+    private void setOverScrolling(boolean overscrolling) {
+        mStackScrollerOverscrolling = overscrolling;
+        if (mQs == null) return;
+        mQs.setOverscrolling(overscrolling);
+    }
+
+    private void onQsExpansionStarted() {
+        cancelQsAnimation();
+        cancelHeightAnimator();
+
+        // Reset scroll position and apply that position to the expanded height.
+        float height = mQsExpansionHeight;
+        setQsExpansion(height);
+        requestPanelHeightUpdate();
+        mNotificationStackScrollLayoutController.checkSnoozeLeavebehind();
+
+        // When expanding QS, let's authenticate the user if possible,
+        // this will speed up notification actions.
+        if (height == 0) {
+            mCentralSurfaces.requestFaceAuth(false);
+        }
+    }
+
+    @VisibleForTesting
+    void setQsExpanded(boolean expanded) {
+        boolean changed = mQsExpanded != expanded;
+        if (changed) {
+            mQsExpanded = expanded;
+            updateQsState();
+            requestPanelHeightUpdate();
+            mFalsingCollector.setQsExpanded(expanded);
+            mCentralSurfaces.setQsExpanded(expanded);
+            mNotificationsQSContainerController.setQsExpanded(expanded);
+            mPulseExpansionHandler.setQsExpanded(expanded);
+            mKeyguardBypassController.setQSExpanded(expanded);
+            mPrivacyDotViewController.setQsExpanded(expanded);
+        }
+    }
+
+    private void maybeAnimateBottomAreaAlpha() {
+        mBottomAreaShadeAlphaAnimator.cancel();
+        if (mBarState == StatusBarState.SHADE_LOCKED) {
+            mBottomAreaShadeAlphaAnimator.setFloatValues(mBottomAreaShadeAlpha, 0.0f);
+            mBottomAreaShadeAlphaAnimator.start();
+        } else {
+            mBottomAreaShadeAlpha = 1f;
+        }
+    }
+
+    private void setKeyguardBottomAreaVisibility(int statusBarState, boolean goingToFullShade) {
+        mKeyguardBottomArea.animate().cancel();
+        if (goingToFullShade) {
+            mKeyguardBottomArea.animate().alpha(0f).setStartDelay(
+                    mKeyguardStateController.getKeyguardFadingAwayDelay()).setDuration(
+                    mKeyguardStateController.getShortenedFadingAwayDuration()).setInterpolator(
+                    Interpolators.ALPHA_OUT).withEndAction(
+                    mAnimateKeyguardBottomAreaInvisibleEndRunnable).start();
+        } else if (statusBarState == KEYGUARD
+                || statusBarState == StatusBarState.SHADE_LOCKED) {
+            mKeyguardBottomArea.setVisibility(View.VISIBLE);
+            mKeyguardBottomArea.setAlpha(1f);
+        } else {
+            mKeyguardBottomArea.setVisibility(View.GONE);
+        }
+    }
+
+    private void updateQsState() {
+        boolean qsFullScreen = mQsExpanded && !mSplitShadeEnabled;
+        mNotificationStackScrollLayoutController.setQsFullScreen(qsFullScreen);
+        mNotificationStackScrollLayoutController.setScrollingEnabled(
+                mBarState != KEYGUARD && (!qsFullScreen || mQsExpansionFromOverscroll));
+
+        if (mKeyguardUserSwitcherController != null && mQsExpanded
+                && !mStackScrollerOverscrolling) {
+            mKeyguardUserSwitcherController.closeSwitcherIfOpenAndNotSimple(true);
+        }
+        if (mQs == null) return;
+        mQs.setExpanded(mQsExpanded);
+    }
+
+    void setQsExpansion(float height) {
+        height = Math.min(Math.max(height, mQsMinExpansionHeight), mQsMaxExpansionHeight);
+        mQsFullyExpanded = height == mQsMaxExpansionHeight && mQsMaxExpansionHeight != 0;
+        boolean qsAnimatingAway = !mQsAnimatorExpand && mAnimatingQS;
+        if (height > mQsMinExpansionHeight && !mQsExpanded && !mStackScrollerOverscrolling
+                && !mDozing && !qsAnimatingAway) {
+            setQsExpanded(true);
+        } else if (height <= mQsMinExpansionHeight && mQsExpanded) {
+            setQsExpanded(false);
+        }
+        mQsExpansionHeight = height;
+        updateQsExpansion();
+        requestScrollerTopPaddingUpdate(false /* animate */);
+        mKeyguardStatusBarViewController.updateViewState();
+        if (mBarState == StatusBarState.SHADE_LOCKED || mBarState == KEYGUARD) {
+            updateKeyguardBottomAreaAlpha();
+            positionClockAndNotifications();
+        }
+
+        if (mAccessibilityManager.isEnabled()) {
+            mView.setAccessibilityPaneTitle(determineAccessibilityPaneTitle());
+        }
+
+        if (!mFalsingManager.isUnlockingDisabled() && mQsFullyExpanded
+                && mFalsingCollector.shouldEnforceBouncer()) {
+            mCentralSurfaces.executeRunnableDismissingKeyguard(null, null /* cancelAction */,
+                    false /* dismissShade */, true /* afterKeyguardGone */, false /* deferred */);
+        }
+        if (DEBUG_DRAWABLE) {
+            mView.invalidate();
+        }
+    }
+
+    private void updateQsExpansion() {
+        if (mQs == null) return;
+        final float squishiness;
+        if ((mQsExpandImmediate || mQsExpanded) && !mSplitShadeEnabled) {
+            squishiness = 1;
+        } else if (mLockscreenShadeTransitionController.getQSDragProgress() > 0) {
+            squishiness = mLockscreenShadeTransitionController.getQSDragProgress();
+        } else {
+            squishiness = mNotificationStackScrollLayoutController
+                    .getNotificationSquishinessFraction();
+        }
+        final float qsExpansionFraction = computeQsExpansionFraction();
+        final float adjustedExpansionFraction = mSplitShadeEnabled
+                ? 1f : computeQsExpansionFraction();
+        mQs.setQsExpansion(adjustedExpansionFraction, getExpandedFraction(), getHeaderTranslation(),
+                squishiness);
+        mMediaHierarchyManager.setQsExpansion(qsExpansionFraction);
+        int qsPanelBottomY = calculateQsBottomPosition(qsExpansionFraction);
+        mScrimController.setQsPosition(qsExpansionFraction, qsPanelBottomY);
+        setQSClippingBounds();
+
+        if (mSplitShadeEnabled) {
+            // In split shade we want to pretend that QS are always collapsed so their behaviour and
+            // interactions don't influence notifications as they do in portrait. But we want to set
+            // 0 explicitly in case we're rotating from non-split shade with QS expansion of 1.
+            mNotificationStackScrollLayoutController.setQsExpansionFraction(0);
+        } else {
+            mNotificationStackScrollLayoutController.setQsExpansionFraction(qsExpansionFraction);
+        }
+
+        mDepthController.setQsPanelExpansion(qsExpansionFraction);
+        mStatusBarKeyguardViewManager.setQsExpansion(qsExpansionFraction);
+
+        // updateQsExpansion will get called whenever mTransitionToFullShadeProgress or
+        // mLockscreenShadeTransitionController.getDragProgress change.
+        // When in lockscreen, getDragProgress indicates the true expanded fraction of QS
+        float shadeExpandedFraction = mTransitioningToFullShadeProgress > 0
+                ? mLockscreenShadeTransitionController.getQSDragProgress()
+                : getExpandedFraction();
+        mLargeScreenShadeHeaderController.setShadeExpandedFraction(shadeExpandedFraction);
+        mLargeScreenShadeHeaderController.setQsExpandedFraction(qsExpansionFraction);
+        mLargeScreenShadeHeaderController.setQsVisible(mQsVisible);
+    }
+
+    private void onStackYChanged(boolean shouldAnimate) {
+        if (mQs != null) {
+            if (shouldAnimate) {
+                animateNextNotificationBounds(StackStateAnimator.ANIMATION_DURATION_STANDARD,
+                        0 /* delay */);
+                mNotificationBoundsAnimationDelay = 0;
+            }
+            setQSClippingBounds();
+        }
+    }
+
+    private void onNotificationScrolled(int newScrollPosition) {
+        updateQSExpansionEnabledAmbient();
+    }
+
+    private void updateQSExpansionEnabledAmbient() {
+        final float scrollRangeToTop = mAmbientState.getTopPadding() - mQuickQsHeaderHeight;
+        mQsExpansionEnabledAmbient = mSplitShadeEnabled
+                || (mAmbientState.getScrollY() <= scrollRangeToTop);
+        setQsExpansionEnabled();
+    }
+
+    /**
+     * Updates scrim bounds, QS clipping, notifications clipping and keyguard status view clipping
+     * as well based on the bounds of the shade and QS state.
+     */
+    private void setQSClippingBounds() {
+        final int qsPanelBottomY = calculateQsBottomPosition(computeQsExpansionFraction());
+        final boolean qsVisible = (computeQsExpansionFraction() > 0 || qsPanelBottomY > 0);
+
+        int top = calculateTopQsClippingBound(qsPanelBottomY);
+        int bottom = calculateBottomQsClippingBound(top);
+        int left = calculateLeftQsClippingBound();
+        int right = calculateRightQsClippingBound();
+        // top should never be lower than bottom, otherwise it will be invisible.
+        top = Math.min(top, bottom);
+        applyQSClippingBounds(left, top, right, bottom, qsVisible);
+    }
+
+    private int calculateTopQsClippingBound(int qsPanelBottomY) {
+        int top;
+        if (mSplitShadeEnabled) {
+            top = Math.min(qsPanelBottomY, mLargeScreenShadeHeaderHeight);
+        } else {
+            if (mTransitioningToFullShadeProgress > 0.0f) {
+                // If we're transitioning, let's use the actual value. The else case
+                // can be wrong during transitions when waiting for the keyguard to unlock
+                top = mTransitionToFullShadeQSPosition;
+            } else {
+                final float notificationTop = getQSEdgePosition();
+                if (isOnKeyguard()) {
+                    if (mKeyguardBypassController.getBypassEnabled()) {
+                        // When bypassing on the keyguard, let's use the panel bottom.
+                        // this should go away once we unify the stackY position and don't have
+                        // to do this min anymore below.
+                        top = qsPanelBottomY;
+                    } else {
+                        top = (int) Math.min(qsPanelBottomY, notificationTop);
+                    }
+                } else {
+                    top = (int) notificationTop;
+                }
+            }
+            top += mOverStretchAmount;
+            // Correction for instant expansion caused by HUN pull down/
+            if (mMinFraction > 0f && mMinFraction < 1f) {
+                float realFraction =
+                        (getExpandedFraction() - mMinFraction) / (1f - mMinFraction);
+                top *= MathUtils.saturate(realFraction / mMinFraction);
+            }
+        }
+        return top;
+    }
+
+    private int calculateBottomQsClippingBound(int top) {
+        if (mSplitShadeEnabled) {
+            return top + mNotificationStackScrollLayoutController.getHeight()
+                    + mSplitShadeNotificationsScrimMarginBottom;
+        } else {
+            return getView().getBottom();
+        }
+    }
+
+    private int calculateLeftQsClippingBound() {
+        if (isFullWidth()) {
+            // left bounds can ignore insets, it should always reach the edge of the screen
+            return 0;
+        } else {
+            return mNotificationStackScrollLayoutController.getLeft();
+        }
+    }
+
+    private int calculateRightQsClippingBound() {
+        if (isFullWidth()) {
+            return getView().getRight() + mDisplayRightInset;
+        } else {
+            return mNotificationStackScrollLayoutController.getRight();
+        }
+    }
+
+    /**
+     * Applies clipping to quick settings, notifications layout and
+     * updates bounds of the notifications background (notifications scrim).
+     *
+     * The parameters are bounds of the notifications area rectangle, this function
+     * calculates bounds for the QS clipping based on the notifications bounds.
+     */
+    private void applyQSClippingBounds(int left, int top, int right, int bottom,
+            boolean qsVisible) {
+        if (!mAnimateNextNotificationBounds || mKeyguardStatusAreaClipBounds.isEmpty()) {
+            if (mQsClippingAnimation != null) {
+                // update the end position of the animator
+                mQsClippingAnimationEndBounds.set(left, top, right, bottom);
+            } else {
+                applyQSClippingImmediately(left, top, right, bottom, qsVisible);
+            }
+        } else {
+            mQsClippingAnimationEndBounds.set(left, top, right, bottom);
+            final int startLeft = mKeyguardStatusAreaClipBounds.left;
+            final int startTop = mKeyguardStatusAreaClipBounds.top;
+            final int startRight = mKeyguardStatusAreaClipBounds.right;
+            final int startBottom = mKeyguardStatusAreaClipBounds.bottom;
+            if (mQsClippingAnimation != null) {
+                mQsClippingAnimation.cancel();
+            }
+            mQsClippingAnimation = ValueAnimator.ofFloat(0.0f, 1.0f);
+            mQsClippingAnimation.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
+            mQsClippingAnimation.setDuration(mNotificationBoundsAnimationDuration);
+            mQsClippingAnimation.setStartDelay(mNotificationBoundsAnimationDelay);
+            mQsClippingAnimation.addUpdateListener(animation -> {
+                float fraction = animation.getAnimatedFraction();
+                int animLeft = (int) MathUtils.lerp(startLeft,
+                        mQsClippingAnimationEndBounds.left, fraction);
+                int animTop = (int) MathUtils.lerp(startTop,
+                        mQsClippingAnimationEndBounds.top, fraction);
+                int animRight = (int) MathUtils.lerp(startRight,
+                        mQsClippingAnimationEndBounds.right, fraction);
+                int animBottom = (int) MathUtils.lerp(startBottom,
+                        mQsClippingAnimationEndBounds.bottom, fraction);
+                applyQSClippingImmediately(animLeft, animTop, animRight, animBottom,
+                        qsVisible /* qsVisible */);
+            });
+            mQsClippingAnimation.addListener(new AnimatorListenerAdapter() {
+                @Override
+                public void onAnimationEnd(Animator animation) {
+                    mQsClippingAnimation = null;
+                    mIsQsTranslationResetAnimator = false;
+                    mIsPulseExpansionResetAnimator = false;
+                }
+            });
+            mQsClippingAnimation.start();
+        }
+        mAnimateNextNotificationBounds = false;
+        mNotificationBoundsAnimationDelay = 0;
+    }
+
+    private void applyQSClippingImmediately(int left, int top, int right, int bottom,
+            boolean qsVisible) {
+        // Fancy clipping for quick settings
+        int radius = mScrimCornerRadius;
+        boolean clipStatusView = false;
+        if (isFullWidth()) {
+            // The padding on this area is large enough that we can use a cheaper clipping strategy
+            mKeyguardStatusAreaClipBounds.set(left, top, right, bottom);
+            clipStatusView = qsVisible;
+            float screenCornerRadius = mRecordingController.isRecording() ? 0 : mScreenCornerRadius;
+            radius = (int) MathUtils.lerp(screenCornerRadius, mScrimCornerRadius,
+                    Math.min(top / (float) mScrimCornerRadius, 1f));
+        }
+        if (mQs != null) {
+            float qsTranslation = 0;
+            boolean pulseExpanding = mPulseExpansionHandler.isExpanding();
+            if (mTransitioningToFullShadeProgress > 0.0f || pulseExpanding
+                    || (mQsClippingAnimation != null
+                    && (mIsQsTranslationResetAnimator || mIsPulseExpansionResetAnimator))) {
+                if (pulseExpanding || mIsPulseExpansionResetAnimator) {
+                    // qsTranslation should only be positive during pulse expansion because it's
+                    // already translating in from the top
+                    qsTranslation = Math.max(0, (top - mQs.getHeader().getHeight()) / 2.0f);
+                } else if (!mSplitShadeEnabled) {
+                    qsTranslation = (top - mQs.getHeader().getHeight()) * QS_PARALLAX_AMOUNT;
+                }
+            }
+            mQsTranslationForFullShadeTransition = qsTranslation;
+            updateQsFrameTranslation();
+            float currentTranslation = mQsFrame.getTranslationY();
+            mQsClipTop = (int) (top - currentTranslation - mQsFrame.getTop());
+            mQsClipBottom = (int) (bottom - currentTranslation - mQsFrame.getTop());
+            mQsVisible = qsVisible;
+            mQs.setQsVisible(mQsVisible);
+            mQs.setFancyClipping(
+                    mQsClipTop,
+                    mQsClipBottom,
+                    radius,
+                    qsVisible && !mSplitShadeEnabled);
+        }
+        mKeyguardStatusViewController.setClipBounds(
+                clipStatusView ? mKeyguardStatusAreaClipBounds : null);
+        if (!qsVisible && mSplitShadeEnabled) {
+            // On the lockscreen when qs isn't visible, we don't want the bounds of the shade to
+            // be visible, otherwise you can see the bounds once swiping up to see bouncer
+            mScrimController.setNotificationsBounds(0, 0, 0, 0);
+        } else {
+            // Increase the height of the notifications scrim when not in split shade
+            // (e.g. portrait tablet) so the rounded corners are not visible at the bottom,
+            // in this case they are rendered off-screen
+            final int notificationsScrimBottom = mSplitShadeEnabled ? bottom : bottom + radius;
+            mScrimController.setNotificationsBounds(left, top, right, notificationsScrimBottom);
+        }
+
+        if (mSplitShadeEnabled) {
+            mKeyguardStatusBarViewController.setNoTopClipping();
+        } else {
+            mKeyguardStatusBarViewController.updateTopClipping(top);
+        }
+
+        mScrimController.setScrimCornerRadius(radius);
+
+        // Convert global clipping coordinates to local ones,
+        // relative to NotificationStackScrollLayout
+        int nsslLeft = left - mNotificationStackScrollLayoutController.getLeft();
+        int nsslRight = right - mNotificationStackScrollLayoutController.getLeft();
+        int nsslTop = top - mNotificationStackScrollLayoutController.getTop();
+        int nsslBottom = bottom - mNotificationStackScrollLayoutController.getTop();
+        int bottomRadius = mSplitShadeEnabled ? radius : 0;
+        mNotificationStackScrollLayoutController.setRoundedClippingBounds(
+                nsslLeft, nsslTop, nsslRight, nsslBottom, radius, bottomRadius);
+    }
+
+    private float getQSEdgePosition() {
+        // TODO: replace StackY with unified calculation
+        return Math.max(mQuickQsHeaderHeight * mAmbientState.getExpansionFraction(),
+                mAmbientState.getStackY()
+                        // need to adjust for extra margin introduced by large screen shade header
+                        + mAmbientState.getStackTopMargin() * mAmbientState.getExpansionFraction()
+                        - mAmbientState.getScrollY());
+    }
+
+    private int calculateQsBottomPosition(float qsExpansionFraction) {
+        if (mTransitioningToFullShadeProgress > 0.0f) {
+            return mTransitionToFullShadeQSPosition;
+        } else {
+            int qsBottomYFrom = (int) getHeaderTranslation() + mQs.getQsMinExpansionHeight();
+            int expandedTopMargin = mUseLargeScreenShadeHeader ? mLargeScreenShadeHeaderHeight : 0;
+            int qsBottomYTo = mQs.getDesiredHeight() + expandedTopMargin;
+            return (int) MathUtils.lerp(qsBottomYFrom, qsBottomYTo, qsExpansionFraction);
+        }
+    }
+
+    private String determineAccessibilityPaneTitle() {
+        if (mQs != null && mQs.isCustomizing()) {
+            return mResources.getString(R.string.accessibility_desc_quick_settings_edit);
+        } else if (mQsExpansionHeight != 0.0f && mQsFullyExpanded) {
+            // Upon initialisation when we are not layouted yet we don't want to announce that we
+            // are fully expanded, hence the != 0.0f check.
+            return mResources.getString(R.string.accessibility_desc_quick_settings);
+        } else if (mBarState == KEYGUARD) {
+            return mResources.getString(R.string.accessibility_desc_lock_screen);
+        } else {
+            return mResources.getString(R.string.accessibility_desc_notification_shade);
+        }
+    }
+
+    private float calculateNotificationsTopPadding() {
+        if (mSplitShadeEnabled) {
+            return mKeyguardShowing ? getKeyguardNotificationStaticPadding() : 0;
+        }
+        if (mKeyguardShowing && (mQsExpandImmediate
+                || mIsExpanding && mQsExpandedWhenExpandingStarted)) {
+
+            // Either QS pushes the notifications down when fully expanded, or QS is fully above the
+            // notifications (mostly on tablets). maxNotificationPadding denotes the normal top
+            // padding on Keyguard, maxQsPadding denotes the top padding from the quick settings
+            // panel. We need to take the maximum and linearly interpolate with the panel expansion
+            // for a nice motion.
+            int maxNotificationPadding = getKeyguardNotificationStaticPadding();
+            int maxQsPadding = mQsMaxExpansionHeight;
+            int max = mBarState == KEYGUARD ? Math.max(
+                    maxNotificationPadding, maxQsPadding) : maxQsPadding;
+            return (int) MathUtils.lerp((float) mQsMinExpansionHeight, (float) max,
+                    getExpandedFraction());
+        } else if (mQsSizeChangeAnimator != null) {
+            return Math.max(
+                    (int) mQsSizeChangeAnimator.getAnimatedValue(),
+                    getKeyguardNotificationStaticPadding());
+        } else if (mKeyguardShowing) {
+            // We can only do the smoother transition on Keyguard when we also are not collapsing
+            // from a scrolled quick settings.
+            return MathUtils.lerp((float) getKeyguardNotificationStaticPadding(),
+                    (float) (mQsMaxExpansionHeight),
+                    computeQsExpansionFraction());
+        } else {
+            return mQsFrameTranslateController.getNotificationsTopPadding(mQsExpansionHeight,
+                    mNotificationStackScrollLayoutController);
+        }
+    }
+
+    /**
+     * @return the topPadding of notifications when on keyguard not respecting quick settings
+     * expansion
+     */
+    private int getKeyguardNotificationStaticPadding() {
+        if (!mKeyguardShowing) {
+            return 0;
+        }
+        if (!mKeyguardBypassController.getBypassEnabled()) {
+            return mClockPositionResult.stackScrollerPadding;
+        }
+        int collapsedPosition = mHeadsUpInset;
+        if (!mNotificationStackScrollLayoutController.isPulseExpanding()) {
+            return collapsedPosition;
+        } else {
+            int expandedPosition = mClockPositionResult.stackScrollerPadding;
+            return (int) MathUtils.lerp(collapsedPosition, expandedPosition,
+                    mNotificationStackScrollLayoutController.calculateAppearFractionBypass());
+        }
+    }
+
+    private void requestScrollerTopPaddingUpdate(boolean animate) {
+        mNotificationStackScrollLayoutController.updateTopPadding(
+                calculateNotificationsTopPadding(), animate);
+        if (mKeyguardShowing && mKeyguardBypassController.getBypassEnabled()) {
+            // update the position of the header
+            updateQsExpansion();
+        }
+    }
+
+    /**
+     * Set the amount of pixels we have currently dragged down if we're transitioning to the full
+     * shade. 0.0f means we're not transitioning yet.
+     */
+    public void setTransitionToFullShadeAmount(float pxAmount, boolean animate, long delay) {
+        if (animate && isFullWidth()) {
+            animateNextNotificationBounds(StackStateAnimator.ANIMATION_DURATION_GO_TO_FULL_SHADE,
+                    delay);
+            mIsQsTranslationResetAnimator = mQsTranslationForFullShadeTransition > 0.0f;
+        }
+
+        if (mSplitShadeEnabled) {
+            updateQsExpansionForLockscreenToShadeTransition(pxAmount);
+        }
+        float endPosition = 0;
+        if (pxAmount > 0.0f) {
+            if (mNotificationStackScrollLayoutController.getVisibleNotificationCount() == 0
+                    && !mMediaDataManager.hasActiveMediaOrRecommendation()) {
+                // No notifications are visible, let's animate to the height of qs instead
+                if (mQs != null) {
+                    // Let's interpolate to the header height instead of the top padding,
+                    // because the toppadding is way too low because of the large clock.
+                    // we still want to take into account the edgePosition though as that nicely
+                    // overshoots in the stackscroller
+                    endPosition = getQSEdgePosition()
+                            - mNotificationStackScrollLayoutController.getTopPadding()
+                            + mQs.getHeader().getHeight();
+                }
+            } else {
+                // Interpolating to the new bottom edge position!
+                endPosition = getQSEdgePosition()
+                        + mNotificationStackScrollLayoutController.getFullShadeTransitionInset();
+                if (isOnKeyguard()) {
+                    endPosition -= mLockscreenNotificationQSPadding;
+                }
+            }
+        }
+
+        // Calculate the overshoot amount such that we're reaching the target after our desired
+        // distance, but only reach it fully once we drag a full shade length.
+        mTransitioningToFullShadeProgress = Interpolators.FAST_OUT_SLOW_IN.getInterpolation(
+                MathUtils.saturate(pxAmount / mDistanceForQSFullShadeTransition));
+
+        int position = (int) MathUtils.lerp((float) 0, endPosition,
+                mTransitioningToFullShadeProgress);
+        if (mTransitioningToFullShadeProgress > 0.0f) {
+            // we want at least 1 pixel otherwise the panel won't be clipped
+            position = Math.max(1, position);
+        }
+        mTransitionToFullShadeQSPosition = position;
+        updateQsExpansion();
+    }
+
+    private void updateQsExpansionForLockscreenToShadeTransition(float pxAmount) {
+        float qsExpansion = 0;
+        if (pxAmount > 0.0f) {
+            qsExpansion = MathUtils.lerp(mQsMinExpansionHeight, mQsMaxExpansionHeight,
+                    mLockscreenShadeTransitionController.getQSDragProgress());
+        }
+        // SHADE_LOCKED means transition is over and we don't want further updates
+        if (mBarState != SHADE_LOCKED) {
+            setQsExpansion(qsExpansion);
+        }
+    }
+
+    /**
+     * Notify the panel that the pulse expansion has finished and that we're going to the full
+     * shade
+     */
+    public void onPulseExpansionFinished() {
+        animateNextNotificationBounds(StackStateAnimator.ANIMATION_DURATION_GO_TO_FULL_SHADE, 0);
+        mIsPulseExpansionResetAnimator = true;
+    }
+
+    /**
+     * 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.
+     */
+    public void setKeyguardTransitionProgress(float keyguardAlpha, int keyguardTranslationY) {
+        mKeyguardOnlyContentAlpha = Interpolators.ALPHA_IN.getInterpolation(keyguardAlpha);
+        mKeyguardOnlyTransitionTranslationY = keyguardTranslationY;
+        if (mBarState == KEYGUARD) {
+            // If the animator is running, it's already fading out the content and this is a reset
+            mBottomAreaShadeAlpha = mKeyguardOnlyContentAlpha;
+            updateKeyguardBottomAreaAlpha();
+        }
+        updateClock();
+    }
+
+    /**
+     * Sets the alpha value to be set on the keyguard status bar.
+     *
+     * @param alpha value between 0 and 1. -1 if the value is to be reset.
+     */
+    public void setKeyguardStatusBarAlpha(float alpha) {
+        mKeyguardStatusBarViewController.setAlpha(alpha);
+    }
+
+    private void trackMovement(MotionEvent event) {
+        if (mQsVelocityTracker != null) mQsVelocityTracker.addMovement(event);
+    }
+
+    private void initVelocityTracker() {
+        if (mQsVelocityTracker != null) {
+            mQsVelocityTracker.recycle();
+        }
+        mQsVelocityTracker = VelocityTracker.obtain();
+    }
+
+    private float getCurrentQSVelocity() {
+        if (mQsVelocityTracker == null) {
+            return 0;
+        }
+        mQsVelocityTracker.computeCurrentVelocity(1000);
+        return mQsVelocityTracker.getYVelocity();
+    }
+
+    private void cancelQsAnimation() {
+        if (mQsExpansionAnimator != null) {
+            mQsExpansionAnimator.cancel();
+        }
+    }
+
+    /**
+     * @see #flingSettings(float, int, Runnable, boolean)
+     */
+    public void flingSettings(float vel, int type) {
+        flingSettings(vel, type, null /* onFinishRunnable */, false /* isClick */);
+    }
+
+    /**
+     * Animates QS or QQS as if the user had swiped up or down.
+     *
+     * @param vel              Finger velocity or 0 when not initiated by touch events.
+     * @param type             Either {@link #FLING_EXPAND}, {@link #FLING_COLLAPSE} or {@link
+     *                         #FLING_HIDE}.
+     * @param onFinishRunnable Runnable to be executed at the end of animation.
+     * @param isClick          If originated by click (different interpolator and duration.)
+     */
+    private void flingSettings(float vel, int type, final Runnable onFinishRunnable,
+            boolean isClick) {
+        float target;
+        switch (type) {
+            case FLING_EXPAND:
+                target = mQsMaxExpansionHeight;
+                break;
+            case FLING_COLLAPSE:
+                target = mQsMinExpansionHeight;
+                break;
+            case FLING_HIDE:
+            default:
+                if (mQs != null) {
+                    mQs.closeDetail();
+                }
+                target = 0;
+        }
+        if (target == mQsExpansionHeight) {
+            if (onFinishRunnable != null) {
+                onFinishRunnable.run();
+            }
+            traceQsJank(false /* startTracing */, type != FLING_EXPAND /* wasCancelled */);
+            return;
+        }
+
+        // If we move in the opposite direction, reset velocity and use a different duration.
+        boolean oppositeDirection = false;
+        boolean expanding = type == FLING_EXPAND;
+        if (vel > 0 && !expanding || vel < 0 && expanding) {
+            vel = 0;
+            oppositeDirection = true;
+        }
+        ValueAnimator animator = ValueAnimator.ofFloat(mQsExpansionHeight, target);
+        if (isClick) {
+            animator.setInterpolator(Interpolators.TOUCH_RESPONSE);
+            animator.setDuration(368);
+        } else {
+            mFlingAnimationUtils.apply(animator, mQsExpansionHeight, target, vel);
+        }
+        if (oppositeDirection) {
+            animator.setDuration(350);
+        }
+        animator.addUpdateListener(
+                animation -> setQsExpansion((Float) animation.getAnimatedValue()));
+        animator.addListener(new AnimatorListenerAdapter() {
+            private boolean mIsCanceled;
+
+            @Override
+            public void onAnimationStart(Animator animation) {
+                notifyExpandingStarted();
+            }
+
+            @Override
+            public void onAnimationCancel(Animator animation) {
+                mIsCanceled = true;
+            }
+
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                mQSAnimatingHiddenFromCollapsed = false;
+                mAnimatingQS = false;
+                notifyExpandingFinished();
+                mNotificationStackScrollLayoutController.resetCheckSnoozeLeavebehind();
+                mQsExpansionAnimator = null;
+                if (onFinishRunnable != null) {
+                    onFinishRunnable.run();
+                }
+                traceQsJank(false /* startTracing */, mIsCanceled /* wasCancelled */);
+            }
+        });
+        // Let's note that we're animating QS. Moving the animator here will cancel it immediately,
+        // so we need a separate flag.
+        mAnimatingQS = true;
+        animator.start();
+        mQsExpansionAnimator = animator;
+        mQsAnimatorExpand = expanding;
+        mQSAnimatingHiddenFromCollapsed = computeQsExpansionFraction() == 0.0f && target == 0;
+    }
+
+    /**
+     * @return Whether we should intercept a gesture to open Quick Settings.
+     */
+    private boolean shouldQuickSettingsIntercept(float x, float y, float yDiff) {
+        if (!isQsExpansionEnabled() || mCollapsedOnDown
+                || (mKeyguardShowing && mKeyguardBypassController.getBypassEnabled())
+                || mSplitShadeEnabled) {
+            return false;
+        }
+        View header = mKeyguardShowing || mQs == null ? mKeyguardStatusBar : mQs.getHeader();
+        int frameTop = mKeyguardShowing || mQs == null ? 0 : mQsFrame.getTop();
+        mQsInterceptRegion.set(
+                /* left= */ (int) mQsFrame.getX(),
+                /* top= */ header.getTop() + frameTop,
+                /* right= */ (int) mQsFrame.getX() + mQsFrame.getWidth(),
+                /* bottom= */ header.getBottom() + frameTop);
+        // Also allow QS to intercept if the touch is near the notch.
+        mStatusBarTouchableRegionManager.updateRegionForNotch(mQsInterceptRegion);
+        final boolean onHeader = mQsInterceptRegion.contains((int) x, (int) y);
+
+        if (mQsExpanded) {
+            return onHeader || (yDiff < 0 && isInQsArea(x, y));
+        } else {
+            return onHeader;
+        }
+    }
+
+    @Override
+    protected boolean canCollapsePanelOnTouch() {
+        if (!isInSettings() && mBarState == KEYGUARD) {
+            return true;
+        }
+
+        if (mNotificationStackScrollLayoutController.isScrolledToBottom()) {
+            return true;
+        }
+
+        return !mSplitShadeEnabled && (isInSettings() || mIsPanelCollapseOnQQS);
+    }
+
+    @Override
+    public int getMaxPanelHeight() {
+        int min = mStatusBarMinHeight;
+        if (!(mBarState == KEYGUARD)
+                && mNotificationStackScrollLayoutController.getNotGoneChildCount() == 0) {
+            int minHeight = mQsMinExpansionHeight;
+            min = Math.max(min, minHeight);
+        }
+        int maxHeight;
+        if (mQsExpandImmediate || mQsExpanded || mIsExpanding && mQsExpandedWhenExpandingStarted
+                || mPulsing || mSplitShadeEnabled) {
+            if (mSplitShadeEnabled && mBarState == SHADE) {
+                // Max panel height is used to calculate the fraction of the shade expansion.
+                // Traditionally the value is based on the number of notifications.
+                // On split-shade, we want the required distance to be a specific and constant
+                // value, to make sure the expansion motion has the expected speed.
+                // We also only want this on non-lockscreen for now.
+                maxHeight = mSplitShadeFullTransitionDistance;
+            } else {
+                maxHeight = calculatePanelHeightQsExpanded();
+            }
+        } else {
+            maxHeight = calculatePanelHeightShade();
+        }
+        maxHeight = Math.max(min, maxHeight);
+        if (maxHeight == 0) {
+            Log.wtf(TAG, "maxPanelHeight is invalid. mOverExpansion: "
+                    + mOverExpansion + ", calculatePanelHeightQsExpanded: "
+                    + calculatePanelHeightQsExpanded() + ", calculatePanelHeightShade: "
+                    + calculatePanelHeightShade() + ", mStatusBarMinHeight = "
+                    + mStatusBarMinHeight + ", mQsMinExpansionHeight = " + mQsMinExpansionHeight);
+        }
+        return maxHeight;
+    }
+
+    public boolean isInSettings() {
+        return mQsExpanded;
+    }
+
+    public boolean isExpanding() {
+        return mIsExpanding;
+    }
+
+    @Override
+    protected void onHeightUpdated(float expandedHeight) {
+        if (!mQsExpanded || mQsExpandImmediate || mIsExpanding && mQsExpandedWhenExpandingStarted) {
+            // Updating the clock position will set the top padding which might
+            // trigger a new panel height and re-position the clock.
+            // This is a circular dependency and should be avoided, otherwise we'll have
+            // a stack overflow.
+            if (mStackScrollerMeasuringPass > 2) {
+                if (DEBUG_LOGCAT) Log.d(TAG, "Unstable notification panel height. Aborting.");
+            } else {
+                positionClockAndNotifications();
+            }
+        }
+        if (mQsExpandImmediate || mQsExpanded && !mQsTracking && mQsExpansionAnimator == null
+                && !mQsExpansionFromOverscroll) {
+            float t;
+            if (mKeyguardShowing) {
+
+                // On Keyguard, interpolate the QS expansion linearly to the panel expansion
+                t = expandedHeight / (getMaxPanelHeight());
+            } else {
+                // In Shade, interpolate linearly such that QS is closed whenever panel height is
+                // minimum QS expansion + minStackHeight
+                float
+                        panelHeightQsCollapsed =
+                        mNotificationStackScrollLayoutController.getIntrinsicPadding()
+                                + mNotificationStackScrollLayoutController.getLayoutMinHeight();
+                float panelHeightQsExpanded = calculatePanelHeightQsExpanded();
+                t =
+                        (expandedHeight - panelHeightQsCollapsed) / (panelHeightQsExpanded
+                                - panelHeightQsCollapsed);
+            }
+            float
+                    targetHeight =
+                    mQsMinExpansionHeight + t * (mQsMaxExpansionHeight - mQsMinExpansionHeight);
+            setQsExpansion(targetHeight);
+        }
+        updateExpandedHeight(expandedHeight);
+        updateHeader();
+        updateNotificationTranslucency();
+        updatePanelExpanded();
+        updateGestureExclusionRect();
+        if (DEBUG_DRAWABLE) {
+            mView.invalidate();
+        }
+    }
+
+    private void updatePanelExpanded() {
+        boolean isExpanded = !isFullyCollapsed() || mExpectingSynthesizedDown;
+        if (mPanelExpanded != isExpanded) {
+            mPanelExpanded = isExpanded;
+
+            mHeadsUpManager.setIsPanelExpanded(isExpanded);
+            mStatusBarTouchableRegionManager.setPanelExpanded(isExpanded);
+            mCentralSurfaces.setPanelExpanded(isExpanded);
+
+            if (!isExpanded && mQs != null && mQs.isCustomizing()) {
+                mQs.closeCustomizer();
+            }
+        }
+    }
+
+    public boolean isPanelExpanded() {
+        return mPanelExpanded;
+    }
+
+    private int calculatePanelHeightShade() {
+        int emptyBottomMargin = mNotificationStackScrollLayoutController.getEmptyBottomMargin();
+        int maxHeight = mNotificationStackScrollLayoutController.getHeight() - emptyBottomMargin;
+
+        if (mBarState == KEYGUARD) {
+            int minKeyguardPanelBottom = mClockPositionAlgorithm.getLockscreenStatusViewHeight()
+                    + mNotificationStackScrollLayoutController.getIntrinsicContentHeight();
+            return Math.max(maxHeight, minKeyguardPanelBottom);
+        } else {
+            return maxHeight;
+        }
+    }
+
+    private int calculatePanelHeightQsExpanded() {
+        float
+                notificationHeight =
+                mNotificationStackScrollLayoutController.getHeight()
+                        - mNotificationStackScrollLayoutController.getEmptyBottomMargin()
+                        - mNotificationStackScrollLayoutController.getTopPadding();
+
+        // When only empty shade view is visible in QS collapsed state, simulate that we would have
+        // it in expanded QS state as well so we don't run into troubles when fading the view in/out
+        // and expanding/collapsing the whole panel from/to quick settings.
+        if (mNotificationStackScrollLayoutController.getNotGoneChildCount() == 0
+                && mNotificationStackScrollLayoutController.isShowingEmptyShadeView()) {
+            notificationHeight = mNotificationStackScrollLayoutController.getEmptyShadeViewHeight();
+        }
+        int maxQsHeight = mQsMaxExpansionHeight;
+
+        // If an animation is changing the size of the QS panel, take the animated value.
+        if (mQsSizeChangeAnimator != null) {
+            maxQsHeight = (int) mQsSizeChangeAnimator.getAnimatedValue();
+        }
+        float totalHeight = Math.max(maxQsHeight,
+                mBarState == KEYGUARD ? mClockPositionResult.stackScrollerPadding
+                        : 0) + notificationHeight
+                + mNotificationStackScrollLayoutController.getTopPaddingOverflow();
+        if (totalHeight > mNotificationStackScrollLayoutController.getHeight()) {
+            float
+                    fullyCollapsedHeight =
+                    maxQsHeight + mNotificationStackScrollLayoutController.getLayoutMinHeight();
+            totalHeight = Math.max(fullyCollapsedHeight,
+                    mNotificationStackScrollLayoutController.getHeight());
+        }
+        return (int) totalHeight;
+    }
+
+    private void updateNotificationTranslucency() {
+        float alpha = 1f;
+        if (mClosingWithAlphaFadeOut && !mExpandingFromHeadsUp
+                && !mHeadsUpManager.hasPinnedHeadsUp()) {
+            alpha = getFadeoutAlpha();
+        }
+        if (mBarState == KEYGUARD && !mHintAnimationRunning
+                && !mKeyguardBypassController.getBypassEnabled()) {
+            alpha *= mClockPositionResult.clockAlpha;
+        }
+        mNotificationStackScrollLayoutController.setAlpha(alpha);
+    }
+
+    private float getFadeoutAlpha() {
+        float alpha;
+        if (mQsMinExpansionHeight == 0) {
+            return 1.0f;
+        }
+        alpha = getExpandedHeight() / mQsMinExpansionHeight;
+        alpha = Math.max(0, Math.min(alpha, 1));
+        alpha = (float) Math.pow(alpha, 0.75);
+        return alpha;
+    }
+
+    /**
+     * Hides the header when notifications are colliding with it.
+     */
+    private void updateHeader() {
+        if (mBarState == KEYGUARD) {
+            mKeyguardStatusBarViewController.updateViewState();
+        }
+        updateQsExpansion();
+    }
+
+    private float getHeaderTranslation() {
+        if (mBarState == KEYGUARD && !mKeyguardBypassController.getBypassEnabled()) {
+            return -mQs.getQsMinExpansionHeight();
+        }
+        float appearAmount = mNotificationStackScrollLayoutController
+                .calculateAppearFraction(mExpandedHeight);
+        float startHeight = -mQsExpansionHeight;
+        if (!mSplitShadeEnabled && mBarState == StatusBarState.SHADE) {
+            // Small parallax as we pull down and clip QS
+            startHeight = -mQsExpansionHeight * QS_PARALLAX_AMOUNT;
+        }
+        if (mKeyguardBypassController.getBypassEnabled() && isOnKeyguard()) {
+            appearAmount = mNotificationStackScrollLayoutController.calculateAppearFractionBypass();
+            startHeight = -mQs.getQsMinExpansionHeight();
+        }
+        float translation = MathUtils.lerp(startHeight, 0, Math.min(1.0f, appearAmount));
+        return Math.min(0, translation);
+    }
+
+    private void updateKeyguardBottomAreaAlpha() {
+        // There are two possible panel expansion behaviors:
+        // • User dragging up to unlock: we want to fade out as quick as possible
+        //   (ALPHA_EXPANSION_THRESHOLD) to avoid seeing the bouncer over the bottom area.
+        // • User tapping on lock screen: bouncer won't be visible but panel expansion will
+        //   change due to "unlock hint animation." In this case, fading out the bottom area
+        //   would also hide the message that says "swipe to unlock," we don't want to do that.
+        float expansionAlpha = MathUtils.map(
+                isUnlockHintRunning() ? 0 : KeyguardBouncer.ALPHA_EXPANSION_THRESHOLD, 1f, 0f, 1f,
+                getExpandedFraction());
+        float alpha = Math.min(expansionAlpha, 1 - computeQsExpansionFraction());
+        alpha *= mBottomAreaShadeAlpha;
+        mKeyguardBottomArea.setComponentAlphas(alpha);
+        mSetKeyguardBottomAreaAlphaUseCaseProvider.get().invoke(alpha);
+        mLockIconViewController.setAlpha(alpha);
+    }
+
+    @Override
+    protected void onExpandingStarted() {
+        super.onExpandingStarted();
+        mNotificationStackScrollLayoutController.onExpansionStarted();
+        mIsExpanding = true;
+        mQsExpandedWhenExpandingStarted = mQsFullyExpanded;
+        mMediaHierarchyManager.setCollapsingShadeFromQS(mQsExpandedWhenExpandingStarted &&
+                /* We also start expanding when flinging closed Qs. Let's exclude that */
+                !mAnimatingQS);
+        if (mQsExpanded) {
+            onQsExpansionStarted();
+        }
+        // Since there are QS tiles in the header now, we need to make sure we start listening
+        // immediately so they can be up to date.
+        if (mQs == null) return;
+        mQs.setHeaderListening(true);
+    }
+
+    @Override
+    protected void onExpandingFinished() {
+        mScrimController.onExpandingFinished();
+        mNotificationStackScrollLayoutController.onExpansionStopped();
+        mHeadsUpManager.onExpandingFinished();
+        mConversationNotificationManager.onNotificationPanelExpandStateChanged(isFullyCollapsed());
+        mIsExpanding = false;
+        mMediaHierarchyManager.setCollapsingShadeFromQS(false);
+        mMediaHierarchyManager.setQsExpanded(mQsExpanded);
+        if (isFullyCollapsed()) {
+            DejankUtils.postAfterTraversal(() -> setListening(false));
+
+            // Workaround b/22639032: Make sure we invalidate something because else RenderThread
+            // thinks we are actually drawing a frame put in reality we don't, so RT doesn't go
+            // ahead with rendering and we jank.
+            mView.postOnAnimation(
+                    () -> mView.getParent().invalidateChild(mView, M_DUMMY_DIRTY_RECT));
+        } else {
+            setListening(true);
+        }
+        mQsExpandImmediate = false;
+        setShowShelfOnly(false);
+        mTwoFingerQsExpandPossible = false;
+        updateTrackingHeadsUp(null);
+        mExpandingFromHeadsUp = false;
+        setPanelScrimMinFraction(0.0f);
+        // Reset status bar alpha so alpha can be calculated upon updating view state.
+        setKeyguardStatusBarAlpha(-1f);
+    }
+
+    private void updateTrackingHeadsUp(@Nullable ExpandableNotificationRow pickedChild) {
+        mTrackedHeadsUpNotification = pickedChild;
+        for (int i = 0; i < mTrackingHeadsUpListeners.size(); i++) {
+            Consumer<ExpandableNotificationRow> listener = mTrackingHeadsUpListeners.get(i);
+            listener.accept(pickedChild);
+        }
+    }
+
+    @Nullable
+    public ExpandableNotificationRow getTrackedHeadsUpNotification() {
+        return mTrackedHeadsUpNotification;
+    }
+
+    private void setListening(boolean listening) {
+        mKeyguardStatusBarViewController.setBatteryListening(listening);
+        if (mQs == null) return;
+        mQs.setListening(listening);
+    }
+
+    @Override
+    public void expand(boolean animate) {
+        super.expand(animate);
+        setListening(true);
+    }
+
+    @Override
+    public void setOverExpansion(float overExpansion) {
+        if (overExpansion == mOverExpansion) {
+            return;
+        }
+        super.setOverExpansion(overExpansion);
+        // Translating the quick settings by half the overexpansion to center it in the background
+        // frame
+        updateQsFrameTranslation();
+        mNotificationStackScrollLayoutController.setOverExpansion(overExpansion);
+    }
+
+    private void updateQsFrameTranslation() {
+        mQsFrameTranslateController.translateQsFrame(mQsFrame, mQs, mOverExpansion,
+                mQsTranslationForFullShadeTransition);
+    }
+
+    @Override
+    protected void onTrackingStarted() {
+        mFalsingCollector.onTrackingStarted(!mKeyguardStateController.canDismissLockScreen());
+        super.onTrackingStarted();
+        mScrimController.onTrackingStarted();
+        if (mQsFullyExpanded) {
+            mQsExpandImmediate = true;
+            setShowShelfOnly(true);
+        }
+        mNotificationStackScrollLayoutController.onPanelTrackingStarted();
+        cancelPendingPanelCollapse();
+    }
+
+    @Override
+    protected void onTrackingStopped(boolean expand) {
+        mFalsingCollector.onTrackingStopped();
+        super.onTrackingStopped(expand);
+        if (expand) {
+            mNotificationStackScrollLayoutController.setOverScrollAmount(0.0f, true /* onTop */,
+                    true /* animate */);
+        }
+        mNotificationStackScrollLayoutController.onPanelTrackingStopped();
+
+        // If we unlocked from a swipe, the user's finger might still be down after the
+        // unlock animation ends. We need to wait until ACTION_UP to enable blurs again.
+        mDepthController.setBlursDisabledForUnlock(false);
+    }
+
+    private void updateMaxHeadsUpTranslation() {
+        mNotificationStackScrollLayoutController.setHeadsUpBoundaries(
+                getHeight(), mNavigationBarBottomHeight);
+    }
+
+    @Override
+    protected void startUnlockHintAnimation() {
+        if (mPowerManager.isPowerSaveMode() || mAmbientState.getDozeAmount() > 0f) {
+            onUnlockHintStarted();
+            onUnlockHintFinished();
+            return;
+        }
+        super.startUnlockHintAnimation();
+    }
+
+    @Override
+    protected void onUnlockHintFinished() {
+        super.onUnlockHintFinished();
+        mScrimController.setExpansionAffectsAlpha(true);
+        mNotificationStackScrollLayoutController.setUnlockHintRunning(false);
+    }
+
+    @Override
+    protected void onUnlockHintStarted() {
+        super.onUnlockHintStarted();
+        mScrimController.setExpansionAffectsAlpha(false);
+        mNotificationStackScrollLayoutController.setUnlockHintRunning(true);
+    }
+
+    @Override
+    protected boolean shouldUseDismissingAnimation() {
+        return mBarState != StatusBarState.SHADE && (mKeyguardStateController.canDismissLockScreen()
+                || !isTracking());
+    }
+
+    @Override
+    protected boolean isTrackingBlocked() {
+        return mConflictingQsExpansionGesture && mQsExpanded || mBlockingExpansionForCurrentTouch;
+    }
+
+    public boolean isQsExpanded() {
+        return mQsExpanded;
+    }
+
+    /** Returns whether the QS customizer is currently active. */
+    public boolean isQsCustomizing() {
+        return mQs.isCustomizing();
+    }
+
+    /** Close the QS customizer if it is open. */
+    public void closeQsCustomizer() {
+        mQs.closeCustomizer();
+    }
+
+    public boolean isLaunchTransitionFinished() {
+        return mIsLaunchTransitionFinished;
+    }
+
+    @Override
+    public void setIsLaunchAnimationRunning(boolean running) {
+        boolean wasRunning = mIsLaunchAnimationRunning;
+        super.setIsLaunchAnimationRunning(running);
+        if (wasRunning != mIsLaunchAnimationRunning) {
+            mPanelEventsEmitter.notifyLaunchingActivityChanged(running);
+        }
+    }
+
+    @Override
+    protected void setIsClosing(boolean isClosing) {
+        boolean wasClosing = isClosing();
+        super.setIsClosing(isClosing);
+        if (wasClosing != isClosing) {
+            mPanelEventsEmitter.notifyPanelCollapsingChanged(isClosing);
+        }
+    }
+
+    private void updateDozingVisibilities(boolean animate) {
+        mKeyguardBottomArea.setDozing(mDozing, animate);
+        mSetKeyguardBottomAreaAnimateDozingTransitionsUseCaseProvider.get().invoke(animate);
+        if (!mDozing && animate) {
+            mKeyguardStatusBarViewController.animateKeyguardStatusBarIn();
+        }
+    }
+
+    @Override
+    public boolean isDozing() {
+        return mDozing;
+    }
+
+    public void setQsScrimEnabled(boolean qsScrimEnabled) {
+        boolean changed = mQsScrimEnabled != qsScrimEnabled;
+        mQsScrimEnabled = qsScrimEnabled;
+        if (changed) {
+            updateQsState();
+        }
+    }
+
+    public void onScreenTurningOn() {
+        mKeyguardStatusViewController.dozeTimeTick();
+    }
+
+    @Override
+    protected boolean onMiddleClicked() {
+        switch (mBarState) {
+            case KEYGUARD:
+                if (!mDozingOnDown) {
+                    if (mUpdateMonitor.isFaceEnrolled()
+                            && !mUpdateMonitor.isFaceDetectionRunning()
+                            && !mUpdateMonitor.getUserCanSkipBouncer(
+                            KeyguardUpdateMonitor.getCurrentUser())) {
+                        mUpdateMonitor.requestFaceAuth(true);
+                    } else {
+                        mLockscreenGestureLogger.write(MetricsEvent.ACTION_LS_HINT,
+                                0 /* lengthDp - N/A */, 0 /* velocityDp - N/A */);
+                        mLockscreenGestureLogger
+                                .log(LockscreenUiEvent.LOCKSCREEN_LOCK_SHOW_HINT);
+                        startUnlockHintAnimation();
+                    }
+                    if (mUpdateMonitor.isFaceEnrolled()) {
+                        mUpdateMonitor.requestActiveUnlock(
+                                ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.UNLOCK_INTENT,
+                                "lockScreenEmptySpaceTap");
+                    }
+                }
+                return true;
+            case StatusBarState.SHADE_LOCKED:
+                if (!mQsExpanded) {
+                    mStatusBarStateController.setState(KEYGUARD);
+                }
+                return true;
+            default:
+                return true;
+        }
+    }
+
+    public void setPanelAlpha(int alpha, boolean animate) {
+        if (mPanelAlpha != alpha) {
+            mPanelAlpha = alpha;
+            PropertyAnimator.setProperty(mView, mPanelAlphaAnimator, alpha, alpha == 255
+                            ? mPanelAlphaInPropertiesAnimator : mPanelAlphaOutPropertiesAnimator,
+                    animate);
+        }
+    }
+
+    public void setPanelAlphaEndAction(Runnable r) {
+        mPanelAlphaEndAction = r;
+    }
+
+    public void setHeadsUpAnimatingAway(boolean headsUpAnimatingAway) {
+        mHeadsUpAnimatingAway = headsUpAnimatingAway;
+        mNotificationStackScrollLayoutController.setHeadsUpAnimatingAway(headsUpAnimatingAway);
+        updateVisibility();
+    }
+
+    /** Set whether the bouncer is showing. */
+    public void setBouncerShowing(boolean bouncerShowing) {
+        mBouncerShowing = bouncerShowing;
+        updateVisibility();
+    }
+
+    @Override
+    protected boolean shouldPanelBeVisible() {
+        boolean headsUpVisible = mHeadsUpAnimatingAway || mHeadsUpPinnedMode;
+        return headsUpVisible || isExpanded() || mBouncerShowing;
+    }
+
+    @Override
+    public void setHeadsUpManager(HeadsUpManagerPhone headsUpManager) {
+        super.setHeadsUpManager(headsUpManager);
+        mHeadsUpTouchHelper = new HeadsUpTouchHelper(headsUpManager,
+                mNotificationStackScrollLayoutController.getHeadsUpCallback(),
+                NotificationPanelViewController.this);
+    }
+
+    public void setTrackedHeadsUp(ExpandableNotificationRow pickedChild) {
+        if (pickedChild != null) {
+            updateTrackingHeadsUp(pickedChild);
+            mExpandingFromHeadsUp = true;
+        }
+        // otherwise we update the state when the expansion is finished
+    }
+
+    @Override
+    protected void onClosingFinished() {
+        mCentralSurfaces.onClosingFinished();
+        setClosingWithAlphaFadeout(false);
+        mMediaHierarchyManager.closeGuts();
+    }
+
+    private void setClosingWithAlphaFadeout(boolean closing) {
+        mClosingWithAlphaFadeOut = closing;
+        mNotificationStackScrollLayoutController.forceNoOverlappingRendering(closing);
+    }
+
+    private void updateExpandedHeight(float expandedHeight) {
+        if (mTracking) {
+            mNotificationStackScrollLayoutController
+                    .setExpandingVelocity(getCurrentExpandVelocity());
+        }
+        if (mKeyguardBypassController.getBypassEnabled() && isOnKeyguard()) {
+            // The expandedHeight is always the full panel Height when bypassing
+            expandedHeight = getMaxPanelHeight();
+        }
+        mNotificationStackScrollLayoutController.setExpandedHeight(expandedHeight);
+        updateKeyguardBottomAreaAlpha();
+        updateStatusBarIcons();
+    }
+
+    /**
+     * @return whether the notifications are displayed full width and don't have any margins on
+     * the side.
+     */
+    public boolean isFullWidth() {
+        return mIsFullWidth;
+    }
+
+    private void updateStatusBarIcons() {
+        boolean showIconsWhenExpanded =
+                (isPanelVisibleBecauseOfHeadsUp() || isFullWidth())
+                        && getExpandedHeight() < getOpeningHeight();
+        if (showIconsWhenExpanded && isOnKeyguard()) {
+            showIconsWhenExpanded = false;
+        }
+        if (showIconsWhenExpanded != mShowIconsWhenExpanded) {
+            mShowIconsWhenExpanded = showIconsWhenExpanded;
+            mCommandQueue.recomputeDisableFlags(mDisplayId, false);
+        }
+    }
+
+    private boolean isOnKeyguard() {
+        return mBarState == KEYGUARD;
+    }
+
+    /**
+     * Sets the minimum fraction for the panel expansion offset. This may be non-zero in certain
+     * cases, such as if there's a heads-up notification.
+     */
+    public void setPanelScrimMinFraction(float minFraction) {
+        mMinFraction = minFraction;
+        mDepthController.setPanelPullDownMinFraction(mMinFraction);
+        mScrimController.setPanelScrimMinFraction(mMinFraction);
+    }
+
+    public void clearNotificationEffects() {
+        mCentralSurfaces.clearNotificationEffects();
+    }
+
+    @Override
+    protected boolean isPanelVisibleBecauseOfHeadsUp() {
+        return (mHeadsUpManager.hasPinnedHeadsUp() || mHeadsUpAnimatingAway)
+                && mBarState == StatusBarState.SHADE;
+    }
+
+    /** Launches the camera. */
+    public void launchCamera(int source) {
+        if (!isFullyCollapsed()) {
+            setLaunchingAffordance(true);
+        }
+
+        mCameraGestureHelper.launchCamera(source);
+    }
+
+    public void onAffordanceLaunchEnded() {
+        setLaunchingAffordance(false);
+    }
+
+    /**
+     * Set whether we are currently launching an affordance. This is currently only set when
+     * launched via a camera gesture.
+     */
+    private void setLaunchingAffordance(boolean launchingAffordance) {
+        mLaunchingAffordance = launchingAffordance;
+        mKeyguardBypassController.setLaunchingAffordance(launchingAffordance);
+    }
+
+    /**
+     * Return true when a bottom affordance is launching an occluded activity with a splash screen.
+     */
+    public boolean isLaunchingAffordanceWithPreview() {
+        return mLaunchingAffordance;
+    }
+
+    /**
+     * Whether the camera application can be launched for the camera launch gesture.
+     */
+    public boolean canCameraGestureBeLaunched() {
+        return mCameraGestureHelper.canCameraGestureBeLaunched(mBarState);
+    }
+
+    public boolean hideStatusBarIconsWhenExpanded() {
+        if (mIsLaunchAnimationRunning) {
+            return mHideIconsDuringLaunchAnimation;
+        }
+        if (mHeadsUpAppearanceController != null
+                && mHeadsUpAppearanceController.shouldBeVisible()) {
+            return false;
+        }
+        return !isFullWidth() || !mShowIconsWhenExpanded;
+    }
+
+    public final QS.ScrollListener mScrollListener = new QS.ScrollListener() {
+        @Override
+        public void onQsPanelScrollChanged(int scrollY) {
+            mLargeScreenShadeHeaderController.setQsScrollY(scrollY);
+            if (scrollY > 0 && !mQsFullyExpanded) {
+                if (DEBUG_LOGCAT) Log.d(TAG, "Scrolling while not expanded. Forcing expand");
+                // If we are scrolling QS, we should be fully expanded.
+                expandWithQs();
+            }
+        }
+    };
+
+    private final FragmentListener mFragmentListener = new FragmentListener() {
+        @Override
+        public void onFragmentViewCreated(String tag, Fragment fragment) {
+            mQs = (QS) fragment;
+            mQs.setPanelView(mHeightListener);
+            mQs.setCollapseExpandAction(mCollapseExpandAction);
+            mQs.setHeaderClickable(isQsExpansionEnabled());
+            mQs.setOverscrolling(mStackScrollerOverscrolling);
+            mQs.setInSplitShade(mSplitShadeEnabled);
+
+            // recompute internal state when qspanel height changes
+            mQs.getView().addOnLayoutChangeListener(
+                    (v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> {
+                        final int height = bottom - top;
+                        final int oldHeight = oldBottom - oldTop;
+                        if (height != oldHeight) {
+                            mHeightListener.onQsHeightChanged();
+                        }
+                    });
+            mQs.setCollapsedMediaVisibilityChangedListener((visible) -> {
+                if (mQs.getHeader().isShown()) {
+                    animateNextNotificationBounds(StackStateAnimator.ANIMATION_DURATION_STANDARD,
+                            0 /* delay */);
+                    mNotificationStackScrollLayoutController.animateNextTopPaddingChange();
+                }
+            });
+            mLockscreenShadeTransitionController.setQS(mQs);
+            mShadeTransitionController.setQs(mQs);
+            mNotificationStackScrollLayoutController.setQsHeader((ViewGroup) mQs.getHeader());
+            mQs.setScrollListener(mScrollListener);
+            updateQsExpansion();
+        }
+
+        @Override
+        public void onFragmentViewDestroyed(String tag, Fragment fragment) {
+            // Manual handling of fragment lifecycle is only required because this bridges
+            // non-fragment and fragment code. Once we are using a fragment for the notification
+            // panel, mQs will not need to be null cause it will be tied to the same lifecycle.
+            if (fragment == mQs) {
+                mQs = null;
+            }
+        }
+    };
+
+    private void animateNextNotificationBounds(long duration, long delay) {
+        mAnimateNextNotificationBounds = true;
+        mNotificationBoundsAnimationDuration = duration;
+        mNotificationBoundsAnimationDelay = delay;
+    }
+
+    @Override
+    public void setTouchAndAnimationDisabled(boolean disabled) {
+        super.setTouchAndAnimationDisabled(disabled);
+        mNotificationStackScrollLayoutController.setAnimationsEnabled(!disabled);
+    }
+
+    /**
+     * Sets the dozing state.
+     *
+     * @param dozing              {@code true} when dozing.
+     * @param animate             if transition should be animated.
+     * @param wakeUpTouchLocation touch event location - if woken up by SLPI sensor.
+     */
+    public void setDozing(boolean dozing, boolean animate, PointF wakeUpTouchLocation) {
+        if (dozing == mDozing) return;
+        mView.setDozing(dozing);
+        mDozing = dozing;
+        mNotificationStackScrollLayoutController.setDozing(mDozing, animate, wakeUpTouchLocation);
+        mKeyguardBottomArea.setDozing(mDozing, animate);
+        mSetKeyguardBottomAreaAnimateDozingTransitionsUseCaseProvider.get().invoke(animate);
+        mKeyguardStatusBarViewController.setDozing(mDozing);
+
+        if (dozing) {
+            mBottomAreaShadeAlphaAnimator.cancel();
+        }
+
+        if (mBarState == KEYGUARD || mBarState == StatusBarState.SHADE_LOCKED) {
+            updateDozingVisibilities(animate);
+        }
+
+        final float dozeAmount = dozing ? 1 : 0;
+        mStatusBarStateController.setAndInstrumentDozeAmount(mView, dozeAmount, animate);
+
+        updateKeyguardStatusViewAlignment(animate);
+    }
+
+    public void setPulsing(boolean pulsing) {
+        mPulsing = pulsing;
+        final boolean
+                animatePulse =
+                !mDozeParameters.getDisplayNeedsBlanking() && mDozeParameters.getAlwaysOn();
+        if (animatePulse) {
+            mAnimateNextPositionUpdate = true;
+        }
+        // Do not animate the clock when waking up from a pulse.
+        // The height callback will take care of pushing the clock to the right position.
+        if (!mPulsing && !mDozing) {
+            mAnimateNextPositionUpdate = false;
+        }
+        mNotificationStackScrollLayoutController.setPulsing(pulsing, animatePulse);
+    }
+
+    public void setAmbientIndicationTop(int ambientIndicationTop, boolean ambientTextVisible) {
+        int ambientIndicationBottomPadding = 0;
+        if (ambientTextVisible) {
+            int stackBottom = mNotificationStackScrollLayoutController.getBottom();
+            ambientIndicationBottomPadding = stackBottom - ambientIndicationTop;
+        }
+        if (mAmbientIndicationBottomPadding != ambientIndicationBottomPadding) {
+            mAmbientIndicationBottomPadding = ambientIndicationBottomPadding;
+            updateMaxDisplayedNotifications(true);
+        }
+    }
+
+    public void dozeTimeTick() {
+        mLockIconViewController.dozeTimeTick();
+        mKeyguardBottomArea.dozeTimeTick();
+        mKeyguardStatusViewController.dozeTimeTick();
+        if (mInterpolatedDarkAmount > 0) {
+            positionClockAndNotifications();
+        }
+    }
+
+    public void setStatusAccessibilityImportance(int mode) {
+        mKeyguardStatusViewController.setStatusAccessibilityImportance(mode);
+    }
+
+    /**
+     * TODO: this should be removed.
+     * It's not correct to pass this view forward because other classes will end up adding
+     * children to it. Theme will be out of sync.
+     *
+     * @return bottom area view
+     */
+    public KeyguardBottomAreaView getKeyguardBottomAreaView() {
+        return mKeyguardBottomArea;
+    }
+
+    public void applyLaunchAnimationProgress(float linearProgress) {
+        boolean hideIcons = LaunchAnimator.getProgress(ActivityLaunchAnimator.TIMINGS,
+                linearProgress, ANIMATION_DELAY_ICON_FADE_IN, 100) == 0.0f;
+        if (hideIcons != mHideIconsDuringLaunchAnimation) {
+            mHideIconsDuringLaunchAnimation = hideIcons;
+            if (!hideIcons) {
+                mCommandQueue.recomputeDisableFlags(mDisplayId, true /* animate */);
+            }
+        }
+    }
+
+    public void addTrackingHeadsUpListener(Consumer<ExpandableNotificationRow> listener) {
+        mTrackingHeadsUpListeners.add(listener);
+    }
+
+    public void removeTrackingHeadsUpListener(Consumer<ExpandableNotificationRow> listener) {
+        mTrackingHeadsUpListeners.remove(listener);
+    }
+
+    public void setHeadsUpAppearanceController(
+            HeadsUpAppearanceController headsUpAppearanceController) {
+        mHeadsUpAppearanceController = headsUpAppearanceController;
+    }
+
+    /**
+     * Starts the animation before we dismiss Keyguard, i.e. an disappearing animation on the
+     * security view of the bouncer.
+     */
+    public void onBouncerPreHideAnimation() {
+        if (mKeyguardQsUserSwitchController != null) {
+            mKeyguardQsUserSwitchController.setKeyguardQsUserSwitchVisibility(
+                    mBarState,
+                    true /* keyguardFadingAway */,
+                    false /* goingToFullShade */,
+                    mBarState);
+        }
+        if (mKeyguardUserSwitcherController != null) {
+            mKeyguardUserSwitcherController.setKeyguardUserSwitcherVisibility(
+                    mBarState,
+                    true /* keyguardFadingAway */,
+                    false /* goingToFullShade */,
+                    mBarState);
+        }
+    }
+
+    /**
+     * Updates the views to the initial state for the fold to AOD animation
+     */
+    public void prepareFoldToAodAnimation() {
+        // Force show AOD UI even if we are not locked
+        showAodUi();
+
+        // Move the content of the AOD all the way to the left
+        // so we can animate to the initial position
+        final int translationAmount = mView.getResources().getDimensionPixelSize(
+                R.dimen.below_clock_padding_start);
+        mView.setTranslationX(-translationAmount);
+        mView.setAlpha(0);
+    }
+
+    /**
+     * Starts fold to AOD animation.
+     *
+     * @param startAction invoked when the animation starts.
+     * @param endAction invoked when the animation finishes, also if it was cancelled.
+     * @param cancelAction invoked when the animation is cancelled, before endAction.
+     */
+    public void startFoldToAodAnimation(Runnable startAction, Runnable endAction,
+            Runnable cancelAction) {
+        mView.animate()
+            .translationX(0)
+            .alpha(1f)
+            .setDuration(ANIMATION_DURATION_FOLD_TO_AOD)
+            .setInterpolator(EMPHASIZED_DECELERATE)
+            .setListener(new AnimatorListenerAdapter() {
+                @Override
+                public void onAnimationStart(Animator animation) {
+                    startAction.run();
+                }
+
+                @Override
+                public void onAnimationCancel(Animator animation) {
+                    cancelAction.run();
+                }
+
+                @Override
+                public void onAnimationEnd(Animator animation) {
+                    endAction.run();
+                }
+            }).start();
+
+        mKeyguardStatusViewController.animateFoldToAod();
+    }
+
+    /**
+     * Cancels fold to AOD transition and resets view state
+     */
+    public void cancelFoldToAodAnimation() {
+        cancelAnimation();
+        resetAlpha();
+        resetTranslation();
+    }
+
+    public void setImportantForAccessibility(int mode) {
+        mView.setImportantForAccessibility(mode);
+    }
+
+    /**
+     * Do not let the user drag the shade up and down for the current touch session.
+     * This is necessary to avoid shade expansion while/after the bouncer is dismissed.
+     */
+    public void blockExpansionForCurrentTouch() {
+        mBlockingExpansionForCurrentTouch = mTracking;
+    }
+
+    @Override
+    public void dump(PrintWriter pw, String[] args) {
+        super.dump(pw, args);
+        IndentingPrintWriter ipw = asIndenting(pw);
+        ipw.increaseIndent();
+        ipw.println("gestureExclusionRect:" + calculateGestureExclusionRect());
+        ipw.println("applyQSClippingImmediately: top(" + mQsClipTop + ") bottom(" + mQsClipBottom
+                + ")");
+        ipw.println("qsVisible:" + mQsVisible);
+        new DumpsysTableLogger(
+                TAG,
+                NPVCDownEventState.TABLE_HEADERS,
+                mLastDownEvents.toList()
+        ).printTableData(ipw);
+        ipw.decreaseIndent();
+        if (mKeyguardStatusBarViewController != null) {
+            mKeyguardStatusBarViewController.dump(pw, args);
+        }
+    }
+
+    public boolean hasActiveClearableNotifications() {
+        return mNotificationStackScrollLayoutController.hasActiveClearableNotifications(ROWS_ALL);
+    }
+
+    public RemoteInputController.Delegate createRemoteInputDelegate() {
+        return mNotificationStackScrollLayoutController.createDelegate();
+    }
+
+    /**
+     * Updates the notification views' sections and status bar icons. This is
+     * triggered by the NotificationPresenter whenever there are changes to the underlying
+     * notification data being displayed. In the new notification pipeline, this is handled in
+     * {@link ShadeViewManager}.
+     */
+    public void updateNotificationViews() {
+        mNotificationStackScrollLayoutController.updateFooter();
+
+        mNotificationIconAreaController.updateNotificationIcons(createVisibleEntriesList());
+    }
+
+    private List<ListEntry> createVisibleEntriesList() {
+        List<ListEntry> entries = new ArrayList<>(
+                mNotificationStackScrollLayoutController.getChildCount());
+        for (int i = 0; i < mNotificationStackScrollLayoutController.getChildCount(); i++) {
+            View view = mNotificationStackScrollLayoutController.getChildAt(i);
+            if (view instanceof ExpandableNotificationRow) {
+                entries.add(((ExpandableNotificationRow) view).getEntry());
+            }
+        }
+        return entries;
+    }
+
+    public void onUpdateRowStates() {
+        mNotificationStackScrollLayoutController.onUpdateRowStates();
+    }
+
+    public boolean hasPulsingNotifications() {
+        return mNotificationListContainer.hasPulsingNotifications();
+    }
+
+    public ActivatableNotificationView getActivatedChild() {
+        return mNotificationStackScrollLayoutController.getActivatedChild();
+    }
+
+    public void setActivatedChild(ActivatableNotificationView o) {
+        mNotificationStackScrollLayoutController.setActivatedChild(o);
+    }
+
+    public void runAfterAnimationFinished(Runnable r) {
+        mNotificationStackScrollLayoutController.runAfterAnimationFinished(r);
+    }
+
+    private Runnable mHideExpandedRunnable;
+    private final Runnable mMaybeHideExpandedRunnable = new Runnable() {
+        @Override
+        public void run() {
+            if (getExpansionFraction() == 0.0f) {
+                mView.post(mHideExpandedRunnable);
+            }
+        }
+    };
+
+    /**
+     * Initialize objects instead of injecting to avoid circular dependencies.
+     *
+     * @param hideExpandedRunnable a runnable to run when we need to hide the expanded panel.
+     */
+    public void initDependencies(
+            CentralSurfaces centralSurfaces,
+            Runnable hideExpandedRunnable,
+            NotificationShelfController notificationShelfController) {
+        setCentralSurfaces(centralSurfaces);
+        mHideExpandedRunnable = hideExpandedRunnable;
+        mNotificationStackScrollLayoutController.setShelfController(notificationShelfController);
+        mNotificationShelfController = notificationShelfController;
+        mLockscreenShadeTransitionController.bindController(notificationShelfController);
+        updateMaxDisplayedNotifications(true);
+    }
+
+    public void setAlpha(float alpha) {
+        mView.setAlpha(alpha);
+    }
+
+    public void resetTranslation() {
+        mView.setTranslationX(0f);
+    }
+
+    public void resetAlpha() {
+        mView.setAlpha(1f);
+    }
+
+    public ViewPropertyAnimator fadeOut(long startDelayMs, long durationMs, Runnable endAction) {
+        return mView.animate().alpha(0).setStartDelay(startDelayMs).setDuration(
+                durationMs).setInterpolator(Interpolators.ALPHA_OUT).withLayer().withEndAction(
+                endAction);
+    }
+
+    public void resetViewGroupFade() {
+        ViewGroupFadeHelper.reset(mView);
+    }
+
+    public void addOnGlobalLayoutListener(ViewTreeObserver.OnGlobalLayoutListener listener) {
+        mView.getViewTreeObserver().addOnGlobalLayoutListener(listener);
+    }
+
+    public void removeOnGlobalLayoutListener(ViewTreeObserver.OnGlobalLayoutListener listener) {
+        mView.getViewTreeObserver().removeOnGlobalLayoutListener(listener);
+    }
+
+    public MyOnHeadsUpChangedListener getOnHeadsUpChangedListener() {
+        return mOnHeadsUpChangedListener;
+    }
+
+    public int getHeight() {
+        return mView.getHeight();
+    }
+
+    public void setHeaderDebugInfo(String text) {
+        if (DEBUG_DRAWABLE) mHeaderDebugInfo = text;
+    }
+
+    public void onThemeChanged() {
+        mConfigurationListener.onThemeChanged();
+    }
+
+    @Override
+    public OnLayoutChangeListener createLayoutChangeListener() {
+        return new OnLayoutChangeListener();
+    }
+
+    @Override
+    protected TouchHandler createTouchHandler() {
+        return new TouchHandler() {
+
+            private long mLastTouchDownTime = -1L;
+
+            @Override
+            public boolean onInterceptTouchEvent(MotionEvent event) {
+                if (SPEW_LOGCAT) {
+                    Log.v(TAG,
+                            "NPVC onInterceptTouchEvent (" + event.getId() + "): (" + event.getX()
+                                    + "," + event.getY() + ")");
+                }
+                if (mBlockTouches || mQs.disallowPanelTouches()) {
+                    return false;
+                }
+                initDownStates(event);
+                // Do not let touches go to shade or QS if the bouncer is visible,
+                // but still let user swipe down to expand the panel, dismissing the bouncer.
+                if (mCentralSurfaces.isBouncerShowing()) {
+                    return true;
+                }
+                if (mCommandQueue.panelsEnabled()
+                        && !mNotificationStackScrollLayoutController.isLongPressInProgress()
+                        && mHeadsUpTouchHelper.onInterceptTouchEvent(event)) {
+                    mMetricsLogger.count(COUNTER_PANEL_OPEN, 1);
+                    mMetricsLogger.count(COUNTER_PANEL_OPEN_PEEK, 1);
+                    return true;
+                }
+                if (!shouldQuickSettingsIntercept(mDownX, mDownY, 0)
+                        && mPulseExpansionHandler.onInterceptTouchEvent(event)) {
+                    return true;
+                }
+
+                if (!isFullyCollapsed() && onQsIntercept(event)) {
+                    if (DEBUG_LOGCAT) Log.d(TAG, "onQsIntercept true");
+                    return true;
+                }
+                return super.onInterceptTouchEvent(event);
+            }
+
+            @Override
+            public boolean onTouch(View v, MotionEvent event) {
+                if (event.getAction() == MotionEvent.ACTION_DOWN) {
+                    if (event.getDownTime() == mLastTouchDownTime) {
+                        // An issue can occur when swiping down after unlock, where multiple down
+                        // events are received in this handler with identical downTimes. Until the
+                        // source of the issue can be located, detect this case and ignore.
+                        // see b/193350347
+                        Log.w(TAG, "Duplicate down event detected... ignoring");
+                        return true;
+                    }
+                    mLastTouchDownTime = event.getDownTime();
+                }
+
+
+                if (mBlockTouches || (mQsFullyExpanded && mQs != null
+                        && mQs.disallowPanelTouches())) {
+                    return false;
+                }
+
+                // Do not allow panel expansion if bouncer is scrimmed or showing over a dream,
+                // otherwise user would be able to pull down QS or expand the shade.
+                if (mCentralSurfaces.isBouncerShowingScrimmed()
+                        || mCentralSurfaces.isBouncerShowingOverDream()) {
+                    return false;
+                }
+
+                // Make sure the next touch won't the blocked after the current ends.
+                if (event.getAction() == MotionEvent.ACTION_UP
+                        || event.getAction() == MotionEvent.ACTION_CANCEL) {
+                    mBlockingExpansionForCurrentTouch = false;
+                }
+                // When touch focus transfer happens, ACTION_DOWN->ACTION_UP may happen immediately
+                // without any ACTION_MOVE event.
+                // In such case, simply expand the panel instead of being stuck at the bottom bar.
+                if (mLastEventSynthesizedDown && event.getAction() == MotionEvent.ACTION_UP) {
+                    expand(true /* animate */);
+                }
+                initDownStates(event);
+
+                // If pulse is expanding already, let's give it the touch. There are situations
+                // where the panel starts expanding even though we're also pulsing
+                boolean pulseShouldGetTouch = (!mIsExpanding
+                        && !shouldQuickSettingsIntercept(mDownX, mDownY, 0))
+                        || mPulseExpansionHandler.isExpanding();
+                if (pulseShouldGetTouch && mPulseExpansionHandler.onTouchEvent(event)) {
+                    // We're expanding all the other ones shouldn't get this anymore
+                    return true;
+                }
+                if (mListenForHeadsUp && !mHeadsUpTouchHelper.isTrackingHeadsUp()
+                        && !mNotificationStackScrollLayoutController.isLongPressInProgress()
+                        && mHeadsUpTouchHelper.onInterceptTouchEvent(event)) {
+                    mMetricsLogger.count(COUNTER_PANEL_OPEN_PEEK, 1);
+                }
+                boolean handled = false;
+                if (mOnlyAffordanceInThisMotion) {
+                    return true;
+                }
+                handled |= mHeadsUpTouchHelper.onTouchEvent(event);
+
+                if (!mHeadsUpTouchHelper.isTrackingHeadsUp() && handleQsTouch(event)) {
+                    if (DEBUG_LOGCAT) Log.d(TAG, "handleQsTouch true");
+                    return true;
+                }
+                if (event.getActionMasked() == MotionEvent.ACTION_DOWN && isFullyCollapsed()) {
+                    mMetricsLogger.count(COUNTER_PANEL_OPEN, 1);
+                    handled = true;
+                }
+
+                if (event.getActionMasked() == MotionEvent.ACTION_DOWN && isFullyExpanded()
+                        && mStatusBarKeyguardViewManager.isShowing()) {
+                    mStatusBarKeyguardViewManager.updateKeyguardPosition(event.getX());
+                }
+
+                handled |= super.onTouch(v, event);
+                return !mDozing || mPulsing || handled;
+            }
+        };
+    }
+
+    private final PhoneStatusBarView.TouchEventHandler mStatusBarViewTouchEventHandler =
+            new PhoneStatusBarView.TouchEventHandler() {
+                @Override
+                public void onInterceptTouchEvent(MotionEvent event) {
+                    mCentralSurfaces.onTouchEvent(event);
+                }
+
+                @Override
+                public boolean handleTouchEvent(MotionEvent event) {
+                    mCentralSurfaces.onTouchEvent(event);
+
+                    // TODO(b/202981994): Move the touch debugging in this method to a central
+                    //  location. (Right now, it's split between CentralSurfaces and here.)
+
+                    // If panels aren't enabled, ignore the gesture and don't pass it down to the
+                    // panel view.
+                    if (!mCommandQueue.panelsEnabled()) {
+                        if (event.getAction() == MotionEvent.ACTION_DOWN) {
+                            Log.v(
+                                    TAG,
+                                    String.format(
+                                            "onTouchForwardedFromStatusBar: "
+                                                    + "panel disabled, ignoring touch at (%d,%d)",
+                                            (int) event.getX(),
+                                            (int) event.getY()
+                                    )
+                            );
+                        }
+                        return false;
+                    }
+
+                    // If the view that would receive the touch is disabled, just have status bar
+                    // eat the gesture.
+                    if (event.getAction() == MotionEvent.ACTION_DOWN && !mView.isEnabled()) {
+                        Log.v(TAG,
+                                String.format(
+                                        "onTouchForwardedFromStatusBar: "
+                                                + "panel view disabled, eating touch at (%d,%d)",
+                                        (int) event.getX(),
+                                        (int) event.getY()
+                                )
+                        );
+                        return true;
+                    }
+
+                    return mView.dispatchTouchEvent(event);
+                }
+            };
+
+    @Override
+    protected OnConfigurationChangedListener createOnConfigurationChangedListener() {
+        return new OnConfigurationChangedListener();
+    }
+
+    public NotificationStackScrollLayoutController getNotificationStackScrollLayoutController() {
+        return mNotificationStackScrollLayoutController;
+    }
+
+    public void disable(int state1, int state2, boolean animated) {
+        mLargeScreenShadeHeaderController.disable(state1, state2, animated);
+    }
+
+    /**
+     * Close the keyguard user switcher if it is open and capable of closing.
+     *
+     * Has no effect if user switcher isn't supported, if the user switcher is already closed, or
+     * if the user switcher uses "simple" mode. The simple user switcher cannot be closed.
+     *
+     * @return true if the keyguard user switcher was open, and is now closed
+     */
+    public boolean closeUserSwitcherIfOpen() {
+        if (mKeyguardUserSwitcherController != null) {
+            return mKeyguardUserSwitcherController.closeSwitcherIfOpenAndNotSimple(
+                    true /* animate */);
+        }
+        return false;
+    }
+
+    private void updateUserSwitcherFlags() {
+        mKeyguardUserSwitcherEnabled = mResources.getBoolean(
+                com.android.internal.R.bool.config_keyguardUserSwitcher);
+        mKeyguardQsUserSwitchEnabled =
+                mKeyguardUserSwitcherEnabled
+                        && mFeatureFlags.isEnabled(Flags.QS_USER_DETAIL_SHORTCUT);
+    }
+
+    private void registerSettingsChangeListener() {
+        mContentResolver.registerContentObserver(
+                Settings.Global.getUriFor(Settings.Global.USER_SWITCHER_ENABLED),
+                /* notifyForDescendants */ false,
+                mSettingsChangeObserver
+        );
+    }
+
+    private void unregisterSettingsChangeListener() {
+        mContentResolver.unregisterContentObserver(mSettingsChangeObserver);
+    }
+
+    /**
+     * Updates notification panel-specific flags on {@link SysUiState}.
+     */
+    public void updateSystemUiStateFlags() {
+        if (SysUiState.DEBUG) {
+            Log.d(TAG, "Updating panel sysui state flags: fullyExpanded="
+                    + isFullyExpanded() + " inQs=" + isInSettings());
+        }
+        mSysUiState.setFlag(SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED,
+                        isFullyExpanded() && !isInSettings())
+                .setFlag(SYSUI_STATE_QUICK_SETTINGS_EXPANDED, isInSettings())
+                .commitUpdate(mDisplayId);
+    }
+
+    private class OnHeightChangedListener implements ExpandableView.OnHeightChangedListener {
+        @Override
+        public void onHeightChanged(ExpandableView view, boolean needsAnimation) {
+
+            // Block update if we are in quick settings and just the top padding changed
+            // (i.e. view == null).
+            if (view == null && mQsExpanded) {
+                return;
+            }
+            if (needsAnimation && mInterpolatedDarkAmount == 0) {
+                mAnimateNextPositionUpdate = true;
+            }
+            ExpandableView firstChildNotGone =
+                    mNotificationStackScrollLayoutController.getFirstChildNotGone();
+            ExpandableNotificationRow
+                    firstRow =
+                    firstChildNotGone instanceof ExpandableNotificationRow
+                            ? (ExpandableNotificationRow) firstChildNotGone : null;
+            if (firstRow != null && (view == firstRow || (firstRow.getNotificationParent()
+                    == firstRow))) {
+                requestScrollerTopPaddingUpdate(false /* animate */);
+            }
+            if (mKeyguardShowing) {
+                updateMaxDisplayedNotifications(true);
+            }
+            requestPanelHeightUpdate();
+        }
+
+        @Override
+        public void onReset(ExpandableView view) {
+        }
+    }
+
+    private class CollapseExpandAction implements Runnable {
+        @Override
+        public void run() {
+            onQsExpansionStarted();
+            if (mQsExpanded) {
+                flingSettings(0 /* vel */, FLING_COLLAPSE, null /* onFinishRunnable */,
+                        true /* isClick */);
+            } else if (isQsExpansionEnabled()) {
+                mLockscreenGestureLogger.write(MetricsEvent.ACTION_SHADE_QS_TAP, 0, 0);
+                flingSettings(0 /* vel */, FLING_EXPAND, null /* onFinishRunnable */,
+                        true /* isClick */);
+            }
+        }
+    }
+
+    private class OnOverscrollTopChangedListener implements
+            NotificationStackScrollLayout.OnOverscrollTopChangedListener {
+        @Override
+        public void onOverscrollTopChanged(float amount, boolean isRubberbanded) {
+            // When in split shade, overscroll shouldn't carry through to QS
+            if (mSplitShadeEnabled) {
+                return;
+            }
+            cancelQsAnimation();
+            if (!isQsExpansionEnabled()) {
+                amount = 0f;
+            }
+            float rounded = amount >= 1f ? amount : 0f;
+            setOverScrolling(rounded != 0f && isRubberbanded);
+            mQsExpansionFromOverscroll = rounded != 0f;
+            mLastOverscroll = rounded;
+            updateQsState();
+            setQsExpansion(mQsMinExpansionHeight + rounded);
+        }
+
+        @Override
+        public void flingTopOverscroll(float velocity, boolean open) {
+            // in split shade mode we want to expand/collapse QS only when touch happens within QS
+            if (mSplitShadeEnabled && touchXOutsideOfQs(mInitialTouchX)) {
+                return;
+            }
+            mLastOverscroll = 0f;
+            mQsExpansionFromOverscroll = false;
+            if (open) {
+                // During overscrolling, qsExpansion doesn't actually change that the qs is
+                // becoming expanded. Any layout could therefore reset the position again. Let's
+                // make sure we can expand
+                setOverScrolling(false);
+            }
+            setQsExpansion(mQsExpansionHeight);
+            boolean canExpand = isQsExpansionEnabled();
+            flingSettings(!canExpand && open ? 0f : velocity,
+                    open && canExpand ? FLING_EXPAND : FLING_COLLAPSE, () -> {
+                        setOverScrolling(false);
+                        updateQsState();
+                    }, false /* isClick */);
+        }
+    }
+
+    private class DynamicPrivacyControlListener implements DynamicPrivacyController.Listener {
+        @Override
+        public void onDynamicPrivacyChanged() {
+            // Do not request animation when pulsing or waking up, otherwise the clock wiill be out
+            // of sync with the notification panel.
+            if (mLinearDarkAmount != 0) {
+                return;
+            }
+            mAnimateNextPositionUpdate = true;
+        }
+    }
+
+    private class OnEmptySpaceClickListener implements
+            NotificationStackScrollLayout.OnEmptySpaceClickListener {
+        @Override
+        public void onEmptySpaceClicked(float x, float y) {
+            onEmptySpaceClick();
+        }
+    }
+
+    private class MyOnHeadsUpChangedListener implements OnHeadsUpChangedListener {
+        @Override
+        public void onHeadsUpPinnedModeChanged(final boolean inPinnedMode) {
+            if (inPinnedMode) {
+                mHeadsUpExistenceChangedRunnable.run();
+                updateNotificationTranslucency();
+            } else {
+                setHeadsUpAnimatingAway(true);
+                mNotificationStackScrollLayoutController.runAfterAnimationFinished(
+                        mHeadsUpExistenceChangedRunnable);
+            }
+            updateGestureExclusionRect();
+            mHeadsUpPinnedMode = inPinnedMode;
+            updateVisibility();
+            mKeyguardStatusBarViewController.updateForHeadsUp();
+        }
+
+        @Override
+        public void onHeadsUpPinned(NotificationEntry entry) {
+            if (!isOnKeyguard()) {
+                mNotificationStackScrollLayoutController.generateHeadsUpAnimation(
+                        entry.getHeadsUpAnimationView(), true);
+            }
+        }
+
+        @Override
+        public void onHeadsUpUnPinned(NotificationEntry entry) {
+
+            // When we're unpinning the notification via active edge they remain heads-upped,
+            // we need to make sure that an animation happens in this case, otherwise the
+            // notification
+            // will stick to the top without any interaction.
+            if (isFullyCollapsed() && entry.isRowHeadsUp() && !isOnKeyguard()) {
+                mNotificationStackScrollLayoutController.generateHeadsUpAnimation(
+                        entry.getHeadsUpAnimationView(), false);
+                entry.setHeadsUpIsVisible();
+            }
+        }
+    }
+
+    private class HeightListener implements QS.HeightListener {
+        public void onQsHeightChanged() {
+            mQsMaxExpansionHeight = mQs != null ? mQs.getDesiredHeight() : 0;
+            if (mQsExpanded && mQsFullyExpanded) {
+                mQsExpansionHeight = mQsMaxExpansionHeight;
+                requestScrollerTopPaddingUpdate(false /* animate */);
+                requestPanelHeightUpdate();
+            }
+            if (mAccessibilityManager.isEnabled()) {
+                mView.setAccessibilityPaneTitle(determineAccessibilityPaneTitle());
+            }
+            mNotificationStackScrollLayoutController.setMaxTopPadding(mQsMaxExpansionHeight);
+        }
+    }
+
+    private class ConfigurationListener implements ConfigurationController.ConfigurationListener {
+        @Override
+        public void onThemeChanged() {
+            if (DEBUG_LOGCAT) Log.d(TAG, "onThemeChanged");
+            reInflateViews();
+        }
+
+        @Override
+        public void onSmallestScreenWidthChanged() {
+            Trace.beginSection("onSmallestScreenWidthChanged");
+            if (DEBUG_LOGCAT) Log.d(TAG, "onSmallestScreenWidthChanged");
+
+            // Can affect multi-user switcher visibility as it depends on screen size by default:
+            // it is enabled only for devices with large screens (see config_keyguardUserSwitcher)
+            boolean prevKeyguardUserSwitcherEnabled = mKeyguardUserSwitcherEnabled;
+            boolean prevKeyguardQsUserSwitchEnabled = mKeyguardQsUserSwitchEnabled;
+            updateUserSwitcherFlags();
+            if (prevKeyguardUserSwitcherEnabled != mKeyguardUserSwitcherEnabled
+                    || prevKeyguardQsUserSwitchEnabled != mKeyguardQsUserSwitchEnabled) {
+                reInflateViews();
+            }
+
+            Trace.endSection();
+        }
+
+        @Override
+        public void onDensityOrFontScaleChanged() {
+            if (DEBUG_LOGCAT) Log.d(TAG, "onDensityOrFontScaleChanged");
+            reInflateViews();
+        }
+    }
+
+    private class SettingsChangeObserver extends ContentObserver {
+
+        SettingsChangeObserver(Handler handler) {
+            super(handler);
+        }
+
+        @Override
+        public void onChange(boolean selfChange) {
+            if (DEBUG_LOGCAT) Log.d(TAG, "onSettingsChanged");
+
+            // Can affect multi-user switcher visibility
+            reInflateViews();
+        }
+    }
+
+    private class StatusBarStateListener implements StateListener {
+        @Override
+        public void onStateChanged(int statusBarState) {
+            boolean goingToFullShade = mStatusBarStateController.goingToFullShade();
+            boolean keyguardFadingAway = mKeyguardStateController.isKeyguardFadingAway();
+            int oldState = mBarState;
+            boolean keyguardShowing = statusBarState == KEYGUARD;
+
+            if (mDozeParameters.shouldDelayKeyguardShow()
+                    && oldState == StatusBarState.SHADE
+                    && statusBarState == KEYGUARD) {
+                // This means we're doing the screen off animation - position the keyguard status
+                // view where it'll be on AOD, so we can animate it in.
+                mKeyguardStatusViewController.updatePosition(
+                        mClockPositionResult.clockX,
+                        mClockPositionResult.clockYFullyDozing,
+                        mClockPositionResult.clockScale,
+                        false /* animate */);
+            }
+
+            mKeyguardStatusViewController.setKeyguardStatusViewVisibility(
+                    statusBarState,
+                    keyguardFadingAway,
+                    goingToFullShade,
+                    mBarState);
+
+            setKeyguardBottomAreaVisibility(statusBarState, goingToFullShade);
+
+            mBarState = statusBarState;
+            mKeyguardShowing = keyguardShowing;
+
+            if (oldState == KEYGUARD && (goingToFullShade
+                    || statusBarState == StatusBarState.SHADE_LOCKED)) {
+
+                long startDelay;
+                long duration;
+                if (mKeyguardStateController.isKeyguardFadingAway()) {
+                    startDelay = mKeyguardStateController.getKeyguardFadingAwayDelay();
+                    duration = mKeyguardStateController.getShortenedFadingAwayDuration();
+                } else {
+                    startDelay = 0;
+                    duration = StackStateAnimator.ANIMATION_DURATION_STANDARD;
+                }
+                mKeyguardStatusBarViewController.animateKeyguardStatusBarOut(startDelay, duration);
+                updateQSMinHeight();
+            } else if (oldState == StatusBarState.SHADE_LOCKED
+                    && statusBarState == KEYGUARD) {
+                mKeyguardStatusBarViewController.animateKeyguardStatusBarIn();
+
+                mNotificationStackScrollLayoutController.resetScrollPosition();
+                // Only animate header if the header is visible. If not, it will partially
+                // animate out
+                // the top of QS
+                if (!mQsExpanded) {
+                    // TODO(b/185683835) Nicer clipping when using new spacial model
+                    if (mSplitShadeEnabled) {
+                        mQs.animateHeaderSlidingOut();
+                    }
+                }
+            } else {
+                final boolean animatingUnlockedShadeToKeyguard = oldState == SHADE
+                        && statusBarState == KEYGUARD
+                        && mScreenOffAnimationController.isKeyguardShowDelayed();
+                if (!animatingUnlockedShadeToKeyguard) {
+                    // Only make the status bar visible if we're not animating the screen off, since
+                    // we only want to be showing the clock/notifications during the animation.
+                    mKeyguardStatusBarViewController.updateViewState(
+                            /* alpha= */ 1f,
+                            keyguardShowing ? View.VISIBLE : View.INVISIBLE);
+                }
+                if (keyguardShowing && oldState != mBarState) {
+                    if (mQs != null) {
+                        mQs.hideImmediately();
+                    }
+                }
+            }
+            mKeyguardStatusBarViewController.updateForHeadsUp();
+            if (keyguardShowing) {
+                updateDozingVisibilities(false /* animate */);
+            }
+
+            updateMaxDisplayedNotifications(false);
+            // The update needs to happen after the headerSlide in above, otherwise the translation
+            // would reset
+            maybeAnimateBottomAreaAlpha();
+            updateQsState();
+        }
+
+        @Override
+        public void onDozeAmountChanged(float linearAmount, float amount) {
+            mInterpolatedDarkAmount = amount;
+            mLinearDarkAmount = linearAmount;
+            mKeyguardStatusViewController.setDarkAmount(mInterpolatedDarkAmount);
+            mKeyguardBottomArea.setDarkAmount(mInterpolatedDarkAmount);
+            positionClockAndNotifications();
+        }
+    }
+
+    /**
+     * 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() {
+                @Override
+                public float getPanelViewExpandedHeight() {
+                    return getExpandedHeight();
+                }
+
+                @Override
+                public boolean shouldHeadsUpBeVisible() {
+                    return mHeadsUpAppearanceController.shouldBeVisible();
+                }
+
+                @Override
+                public float getLockscreenShadeDragProgress() {
+                    return mTransitioningToFullShadeProgress > 0
+                            ? mLockscreenShadeTransitionController.getQSDragProgress()
+                            : computeQsExpansionFraction();
+                }
+            };
+
+    /**
+     * 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.
+     */
+    public void showAodUi() {
+        setDozing(true /* dozing */, false /* animate */, null);
+        mStatusBarStateController.setUpcomingState(KEYGUARD);
+        mEntryManager.updateNotifications("showAodUi");
+        mStatusBarStateListener.onStateChanged(KEYGUARD);
+        mStatusBarStateListener.onDozeAmountChanged(1f, 1f);
+        setExpandedFraction(1f);
+    }
+
+    /**
+     * Sets the overstretch amount in raw pixels when dragging down.
+     */
+    public void setOverStrechAmount(float amount) {
+        float progress = amount / mView.getHeight();
+        float overstretch = Interpolators.getOvershootInterpolation(progress);
+        mOverStretchAmount = overstretch * mMaxOverscrollAmountForPulse;
+        positionClockAndNotifications(true /* forceUpdate */);
+    }
+
+    private class OnAttachStateChangeListener implements View.OnAttachStateChangeListener {
+        @Override
+        public void onViewAttachedToWindow(View v) {
+            mFragmentService.getFragmentHostManager(mView)
+                    .addTagListener(QS.TAG, mFragmentListener);
+            mStatusBarStateController.addCallback(mStatusBarStateListener);
+            mStatusBarStateListener.onStateChanged(mStatusBarStateController.getState());
+            mConfigurationController.addCallback(mConfigurationListener);
+            // Theme might have changed between inflating this view and attaching it to the
+            // window, so
+            // force a call to onThemeChanged
+            mConfigurationListener.onThemeChanged();
+            mFalsingManager.addTapListener(mFalsingTapListener);
+            mKeyguardIndicationController.init();
+            registerSettingsChangeListener();
+        }
+
+        @Override
+        public void onViewDetachedFromWindow(View v) {
+            unregisterSettingsChangeListener();
+            mFragmentService.getFragmentHostManager(mView)
+                    .removeTagListener(QS.TAG, mFragmentListener);
+            mStatusBarStateController.removeCallback(mStatusBarStateListener);
+            mConfigurationController.removeCallback(mConfigurationListener);
+            mFalsingManager.removeTapListener(mFalsingTapListener);
+        }
+    }
+
+    private class OnLayoutChangeListener extends PanelViewController.OnLayoutChangeListener {
+
+        @Override
+        public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft,
+                int oldTop, int oldRight, int oldBottom) {
+            DejankUtils.startDetectingBlockingIpcs("NVP#onLayout");
+            super.onLayoutChange(v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom);
+            updateMaxDisplayedNotifications(!shouldAvoidChangingNotificationsCount());
+            setIsFullWidth(mNotificationStackScrollLayoutController.getWidth() == mView.getWidth());
+
+            // Update Clock Pivot
+            mKeyguardStatusViewController.setPivotX(((float) mView.getWidth()) / 2f);
+            mKeyguardStatusViewController.setPivotY(
+                    (FONT_HEIGHT - CAP_HEIGHT) / 2048f
+                            * mKeyguardStatusViewController.getClockTextSize());
+
+            // Calculate quick setting heights.
+            int oldMaxHeight = mQsMaxExpansionHeight;
+            if (mQs != null) {
+                updateQSMinHeight();
+                mQsMaxExpansionHeight = mQs.getDesiredHeight();
+                mNotificationStackScrollLayoutController.setMaxTopPadding(mQsMaxExpansionHeight);
+            }
+            positionClockAndNotifications();
+            if (mQsExpanded && mQsFullyExpanded) {
+                mQsExpansionHeight = mQsMaxExpansionHeight;
+                requestScrollerTopPaddingUpdate(false /* animate */);
+                requestPanelHeightUpdate();
+
+                // Size has changed, start an animation.
+                if (mQsMaxExpansionHeight != oldMaxHeight) {
+                    startQsSizeChangeAnimation(oldMaxHeight, mQsMaxExpansionHeight);
+                }
+            } else if (!mQsExpanded && mQsExpansionAnimator == null) {
+                setQsExpansion(mQsMinExpansionHeight + mLastOverscroll);
+            }
+            updateExpandedHeight(getExpandedHeight());
+            updateHeader();
+
+            // If we are running a size change animation, the animation takes care of the height of
+            // the container. However, if we are not animating, we always need to make the QS
+            // container
+            // the desired height so when closing the QS detail, it stays smaller after the size
+            // change
+            // animation is finished but the detail view is still being animated away (this
+            // animation
+            // takes longer than the size change animation).
+            if (mQsSizeChangeAnimator == null && mQs != null) {
+                mQs.setHeightOverride(mQs.getDesiredHeight());
+            }
+            updateMaxHeadsUpTranslation();
+            updateGestureExclusionRect();
+            if (mExpandAfterLayoutRunnable != null) {
+                mExpandAfterLayoutRunnable.run();
+                mExpandAfterLayoutRunnable = null;
+            }
+            DejankUtils.stopDetectingBlockingIpcs("NVP#onLayout");
+        }
+    }
+
+    private void updateQSMinHeight() {
+        float previousMin = mQsMinExpansionHeight;
+        if (mKeyguardShowing || mSplitShadeEnabled) {
+            mQsMinExpansionHeight = 0;
+        } else {
+            mQsMinExpansionHeight = mQs.getQsMinExpansionHeight();
+        }
+        if (mQsExpansionHeight == previousMin) {
+            mQsExpansionHeight = mQsMinExpansionHeight;
+        }
+    }
+
+    private class DebugDrawable extends Drawable {
+
+        private final Set<Integer> mDebugTextUsedYPositions = new HashSet<>();
+        private final Paint mDebugPaint = new Paint();
+
+        @Override
+        public void draw(@androidx.annotation.NonNull @NonNull Canvas canvas) {
+            mDebugTextUsedYPositions.clear();
+
+            mDebugPaint.setColor(Color.RED);
+            mDebugPaint.setStrokeWidth(2);
+            mDebugPaint.setStyle(Paint.Style.STROKE);
+            mDebugPaint.setTextSize(24);
+            if (mHeaderDebugInfo != null) canvas.drawText(mHeaderDebugInfo, 50, 100, mDebugPaint);
+
+            drawDebugInfo(canvas, getMaxPanelHeight(), Color.RED, "getMaxPanelHeight()");
+            drawDebugInfo(canvas, (int) getExpandedHeight(), Color.BLUE, "getExpandedHeight()");
+            drawDebugInfo(canvas, calculatePanelHeightQsExpanded(), Color.GREEN,
+                    "calculatePanelHeightQsExpanded()");
+            drawDebugInfo(canvas, calculatePanelHeightShade(), Color.YELLOW,
+                    "calculatePanelHeightShade()");
+            drawDebugInfo(canvas, (int) calculateNotificationsTopPadding(), Color.MAGENTA,
+                    "calculateNotificationsTopPadding()");
+            drawDebugInfo(canvas, mClockPositionResult.clockY, Color.GRAY,
+                    "mClockPositionResult.clockY");
+            drawDebugInfo(canvas, (int) mLockIconViewController.getTop(), Color.GRAY,
+                    "mLockIconViewController.getTop()");
+
+            if (mKeyguardShowing) {
+                // Notifications have the space between those two lines.
+                drawDebugInfo(canvas,
+                        mNotificationStackScrollLayoutController.getTop() +
+                                (int) mKeyguardNotificationTopPadding,
+                        Color.RED,
+                        "NSSL.getTop() + mKeyguardNotificationTopPadding");
+
+                drawDebugInfo(canvas, mNotificationStackScrollLayoutController.getBottom() -
+                                (int) mKeyguardNotificationBottomPadding,
+                        Color.RED,
+                        "NSSL.getBottom() - mKeyguardNotificationBottomPadding");
+            }
+
+            mDebugPaint.setColor(Color.CYAN);
+            canvas.drawLine(0, mClockPositionResult.stackScrollerPadding, mView.getWidth(),
+                    mNotificationStackScrollLayoutController.getTopPadding(), mDebugPaint);
+        }
+
+        private void drawDebugInfo(Canvas canvas, int y, int color, String label) {
+            mDebugPaint.setColor(color);
+            canvas.drawLine(/* startX= */ 0, /* startY= */ y, /* stopX= */ mView.getWidth(),
+                    /* stopY= */ y, mDebugPaint);
+            canvas.drawText(label + " = " + y + "px", /* x= */ 0,
+                    /* y= */ computeDebugYTextPosition(y), mDebugPaint);
+        }
+
+        private int computeDebugYTextPosition(int lineY) {
+            if (lineY - mDebugPaint.getTextSize() < 0) {
+                // Avoiding drawing out of bounds
+                lineY += mDebugPaint.getTextSize();
+            }
+            int textY = lineY;
+            while (mDebugTextUsedYPositions.contains(textY)) {
+                textY = (int) (textY + mDebugPaint.getTextSize());
+            }
+            mDebugTextUsedYPositions.add(textY);
+            return textY;
+        }
+
+        @Override
+        public void setAlpha(int alpha) {
+
+        }
+
+        @Override
+        public void setColorFilter(ColorFilter colorFilter) {
+
+        }
+
+        @Override
+        public int getOpacity() {
+            return PixelFormat.UNKNOWN;
+        }
+    }
+
+    private class OnApplyWindowInsetsListener implements View.OnApplyWindowInsetsListener {
+        public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
+            // the same types of insets that are handled in NotificationShadeWindowView
+            int insetTypes = WindowInsets.Type.systemBars() | WindowInsets.Type.displayCutout();
+            Insets combinedInsets = insets.getInsetsIgnoringVisibility(insetTypes);
+            mDisplayTopInset = combinedInsets.top;
+            mDisplayRightInset = combinedInsets.right;
+
+            mNavigationBarBottomHeight = insets.getStableInsetBottom();
+            updateMaxHeadsUpTranslation();
+            return insets;
+        }
+    }
+
+    /** Removes any pending runnables that would collapse the panel. */
+    public void cancelPendingPanelCollapse() {
+        mView.removeCallbacks(mMaybeHideExpandedRunnable);
+    }
+
+    @PanelState
+    private int mCurrentPanelState = STATE_CLOSED;
+
+    private void onPanelStateChanged(@PanelState int state) {
+        updateQSExpansionEnabledAmbient();
+
+        if (state == STATE_OPEN && mCurrentPanelState != state) {
+            mView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
+        }
+        if (state == STATE_OPENING) {
+            // we need to ignore it on keyguard as this is a false alarm - transition from unlocked
+            // to locked will trigger this event and we're not actually in the process of opening
+            // the shade, lockscreen is just always expanded
+            if (mSplitShadeEnabled && !isOnKeyguard()) {
+                mQsExpandImmediate = true;
+            }
+            mCentralSurfaces.makeExpandedVisible(false);
+        }
+        if (state == STATE_CLOSED) {
+            // Close the status bar in the next frame so we can show the end of the
+            // animation.
+            mView.post(mMaybeHideExpandedRunnable);
+        }
+        mCurrentPanelState = state;
+    }
+
+    /** Returns the handler that the status bar should forward touches to. */
+    public PhoneStatusBarView.TouchEventHandler getStatusBarTouchEventHandler() {
+        return mStatusBarViewTouchEventHandler;
+    }
+
+    @VisibleForTesting
+    StatusBarStateController getStatusBarStateController() {
+        return mStatusBarStateController;
+    }
+
+    @VisibleForTesting
+    boolean isHintAnimationRunning() {
+        return mHintAnimationRunning;
+    }
+
+    private void onStatusBarWindowStateChanged(@StatusBarManager.WindowVisibleState int state) {
+        if (state != WINDOW_STATE_SHOWING
+                && mStatusBarStateController.getState() == StatusBarState.SHADE) {
+            collapsePanel(
+                    false /* animate */,
+                    false /* delayed */,
+                    1.0f /* speedUpFactor */);
+        }
+    }
+
+    @SysUISingleton
+    static class PanelEventsEmitter implements NotifPanelEvents {
+
+        private final ListenerSet<Listener> mListeners = new ListenerSet<>();
+
+        @Inject
+        PanelEventsEmitter() {
+        }
+
+        @Override
+        public void registerListener(@androidx.annotation.NonNull @NonNull Listener listener) {
+            mListeners.addIfAbsent(listener);
+        }
+
+        @Override
+        public void unregisterListener(@androidx.annotation.NonNull @NonNull Listener listener) {
+            mListeners.remove(listener);
+        }
+
+        private void notifyLaunchingActivityChanged(boolean isLaunchingActivity) {
+            for (Listener cb : mListeners) {
+                cb.onLaunchingActivityChanged(isLaunchingActivity);
+            }
+        }
+
+        private void notifyPanelCollapsingChanged(boolean isCollapsing) {
+            for (NotifPanelEvents.Listener cb : mListeners) {
+                cb.onPanelCollapsingChanged(isCollapsing);
+            }
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java
new file mode 100644
index 0000000..1d92105
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java
@@ -0,0 +1,922 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 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_BEHAVIOR_CONTROLLED;
+
+import static com.android.systemui.DejankUtils.whitelistIpcs;
+import static com.android.systemui.statusbar.NotificationRemoteInputManager.ENABLE_REMOTE_INPUT;
+
+import android.app.IActivityManager;
+import android.content.Context;
+import android.content.pm.ActivityInfo;
+import android.content.res.Configuration;
+import android.graphics.PixelFormat;
+import android.graphics.Region;
+import android.os.Binder;
+import android.os.Build;
+import android.os.RemoteException;
+import android.os.Trace;
+import android.util.Log;
+import android.view.Display;
+import android.view.Gravity;
+import android.view.IWindow;
+import android.view.IWindowSession;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowManager;
+import android.view.WindowManager.LayoutParams;
+import android.view.WindowManagerGlobal;
+
+import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.systemui.Dumpable;
+import com.android.systemui.R;
+import com.android.systemui.biometrics.AuthController;
+import com.android.systemui.colorextraction.SysuiColorExtractor;
+import com.android.systemui.dagger.SysUISingleton;
+import com.android.systemui.dump.DumpManager;
+import com.android.systemui.keyguard.KeyguardViewMediator;
+import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener;
+import com.android.systemui.statusbar.NotificationShadeWindowController;
+import com.android.systemui.statusbar.StatusBarState;
+import com.android.systemui.statusbar.SysuiStatusBarStateController;
+import com.android.systemui.statusbar.phone.CentralSurfaces;
+import com.android.systemui.statusbar.phone.DozeParameters;
+import com.android.systemui.statusbar.phone.KeyguardBypassController;
+import com.android.systemui.statusbar.phone.ScreenOffAnimationController;
+import com.android.systemui.statusbar.phone.ScrimController;
+import com.android.systemui.statusbar.phone.StatusBarWindowCallback;
+import com.android.systemui.statusbar.policy.ConfigurationController;
+import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
+import com.android.systemui.statusbar.policy.KeyguardStateController;
+
+import java.io.PrintWriter;
+import java.lang.ref.Reference;
+import java.lang.ref.WeakReference;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+import java.util.function.Consumer;
+import java.util.stream.Collectors;
+
+import javax.inject.Inject;
+
+/**
+ * Encapsulates all logic for the notification shade window state management.
+ */
+@SysUISingleton
+public class NotificationShadeWindowControllerImpl implements NotificationShadeWindowController,
+        Dumpable, ConfigurationListener {
+
+    private static final String TAG = "NotificationShadeWindowController";
+
+    private final Context mContext;
+    private final WindowManager mWindowManager;
+    private final IActivityManager mActivityManager;
+    private final DozeParameters mDozeParameters;
+    private final KeyguardStateController mKeyguardStateController;
+    private final LayoutParams mLpChanged;
+    private final long mLockScreenDisplayTimeout;
+    private final float mKeyguardPreferredRefreshRate; // takes precedence over max
+    private final float mKeyguardMaxRefreshRate;
+    private final KeyguardViewMediator mKeyguardViewMediator;
+    private final KeyguardBypassController mKeyguardBypassController;
+    private final AuthController mAuthController;
+    private ViewGroup mNotificationShadeView;
+    private LayoutParams mLp;
+    private boolean mHasTopUi;
+    private boolean mHasTopUiChanged;
+    private float mScreenBrightnessDoze;
+    private final State mCurrentState = new State();
+    private OtherwisedCollapsedListener mListener;
+    private ForcePluginOpenListener mForcePluginOpenListener;
+    private Consumer<Integer> mScrimsVisibilityListener;
+    private final ArrayList<WeakReference<StatusBarWindowCallback>>
+            mCallbacks = new ArrayList<>();
+
+    private final SysuiColorExtractor mColorExtractor;
+    private final ScreenOffAnimationController mScreenOffAnimationController;
+    /**
+     * Layout params would be aggregated and dispatched all at once if this is > 0.
+     *
+     * @see #batchApplyWindowLayoutParams(Runnable)
+     */
+    private int mDeferWindowLayoutParams;
+    private boolean mLastKeyguardRotationAllowed;
+
+    @Inject
+    public NotificationShadeWindowControllerImpl(Context context, WindowManager windowManager,
+            IActivityManager activityManager, DozeParameters dozeParameters,
+            StatusBarStateController statusBarStateController,
+            ConfigurationController configurationController,
+            KeyguardViewMediator keyguardViewMediator,
+            KeyguardBypassController keyguardBypassController,
+            SysuiColorExtractor colorExtractor,
+            DumpManager dumpManager,
+            KeyguardStateController keyguardStateController,
+            ScreenOffAnimationController screenOffAnimationController,
+            AuthController authController) {
+        mContext = context;
+        mWindowManager = windowManager;
+        mActivityManager = activityManager;
+        mDozeParameters = dozeParameters;
+        mKeyguardStateController = keyguardStateController;
+        mScreenBrightnessDoze = mDozeParameters.getScreenBrightnessDoze();
+        mLpChanged = new LayoutParams();
+        mKeyguardViewMediator = keyguardViewMediator;
+        mKeyguardBypassController = keyguardBypassController;
+        mColorExtractor = colorExtractor;
+        mScreenOffAnimationController = screenOffAnimationController;
+        dumpManager.registerDumpable(getClass().getName(), this);
+        mAuthController = authController;
+        mLastKeyguardRotationAllowed = mKeyguardStateController.isKeyguardScreenRotationAllowed();
+        mLockScreenDisplayTimeout = context.getResources()
+                .getInteger(R.integer.config_lockScreenDisplayTimeout);
+        ((SysuiStatusBarStateController) statusBarStateController)
+                .addCallback(mStateListener,
+                        SysuiStatusBarStateController.RANK_STATUS_BAR_WINDOW_CONTROLLER);
+        configurationController.addCallback(this);
+
+        float desiredPreferredRefreshRate = context.getResources()
+                .getInteger(R.integer.config_keyguardRefreshRate);
+        float actualPreferredRefreshRate = -1;
+        if (desiredPreferredRefreshRate > -1) {
+            for (Display.Mode displayMode : context.getDisplay().getSupportedModes()) {
+                if (Math.abs(displayMode.getRefreshRate() - desiredPreferredRefreshRate) <= .1) {
+                    actualPreferredRefreshRate = displayMode.getRefreshRate();
+                    break;
+                }
+            }
+        }
+
+        mKeyguardPreferredRefreshRate = actualPreferredRefreshRate;
+
+        // Running on the highest frame rate available can be expensive.
+        // Let's specify a preferred refresh rate, and allow higher FPS only when we
+        // know that we're not falsing (because we unlocked.)
+        mKeyguardMaxRefreshRate = context.getResources()
+                .getInteger(R.integer.config_keyguardMaxRefreshRate);
+    }
+
+    /**
+     * Register to receive notifications about status bar window state changes.
+     */
+    @Override
+    public void registerCallback(StatusBarWindowCallback callback) {
+        // Prevent adding duplicate callbacks
+        for (int i = 0; i < mCallbacks.size(); i++) {
+            if (mCallbacks.get(i).get() == callback) {
+                return;
+            }
+        }
+        mCallbacks.add(new WeakReference<>(callback));
+    }
+
+    @Override
+    public void unregisterCallback(StatusBarWindowCallback callback) {
+        for (int i = 0; i < mCallbacks.size(); i++) {
+            if (mCallbacks.get(i).get() == callback) {
+                mCallbacks.remove(i);
+                return;
+            }
+        }
+    }
+
+    /**
+     * Register a listener to monitor scrims visibility
+     * @param listener A listener to monitor scrims visibility
+     */
+    @Override
+    public void setScrimsVisibilityListener(Consumer<Integer> listener) {
+        if (listener != null && mScrimsVisibilityListener != listener) {
+            mScrimsVisibilityListener = listener;
+        }
+    }
+
+    /**
+     * Adds the notification shade view to the window manager.
+     */
+    @Override
+    public void attach() {
+        // Now that the notification shade encompasses the sliding panel and its
+        // translucent backdrop, the entire thing is made TRANSLUCENT and is
+        // hardware-accelerated.
+        mLp = new LayoutParams(
+                ViewGroup.LayoutParams.MATCH_PARENT,
+                ViewGroup.LayoutParams.MATCH_PARENT,
+                LayoutParams.TYPE_NOTIFICATION_SHADE,
+                LayoutParams.FLAG_NOT_FOCUSABLE
+                        | LayoutParams.FLAG_TOUCHABLE_WHEN_WAKING
+                        | LayoutParams.FLAG_SPLIT_TOUCH
+                        | LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
+                        | LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS,
+                PixelFormat.TRANSLUCENT);
+        mLp.token = new Binder();
+        mLp.gravity = Gravity.TOP;
+        mLp.setFitInsetsTypes(0 /* types */);
+        mLp.softInputMode = LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
+        mLp.setTitle("NotificationShade");
+        mLp.packageName = mContext.getPackageName();
+        mLp.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
+
+        // We use BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE here, however, there is special logic in
+        // window manager which disables the transient show behavior.
+        // TODO: Clean this up once that behavior moves into the Shell.
+        mLp.privateFlags |= PRIVATE_FLAG_BEHAVIOR_CONTROLLED;
+        mLp.insetsFlags.behavior = BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
+
+        mWindowManager.addView(mNotificationShadeView, mLp);
+
+        mLpChanged.copyFrom(mLp);
+        onThemeChanged();
+
+        // Make the state consistent with KeyguardViewMediator#setupLocked during initialization.
+        if (mKeyguardViewMediator.isShowingAndNotOccluded()) {
+            setKeyguardShowing(true);
+        }
+    }
+
+    @Override
+    public void setNotificationShadeView(ViewGroup view) {
+        mNotificationShadeView = view;
+    }
+
+    @Override
+    public ViewGroup getNotificationShadeView() {
+        return mNotificationShadeView;
+    }
+
+    @Override
+    public void setDozeScreenBrightness(int value) {
+        mScreenBrightnessDoze = value / 255f;
+    }
+
+    private void setKeyguardDark(boolean dark) {
+        int vis = mNotificationShadeView.getSystemUiVisibility();
+        if (dark) {
+            vis = vis | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;
+            vis = vis | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
+        } else {
+            vis = vis & ~View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;
+            vis = vis & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
+        }
+        mNotificationShadeView.setSystemUiVisibility(vis);
+    }
+
+    private void applyKeyguardFlags(State state) {
+        final boolean keyguardOrAod = state.mKeyguardShowing
+                || (state.mDozing && mDozeParameters.getAlwaysOn());
+        if ((keyguardOrAod && !state.mBackdropShowing && !state.mLightRevealScrimOpaque)
+                || mKeyguardViewMediator.isAnimatingBetweenKeyguardAndSurfaceBehind()) {
+            // Show the wallpaper if we're on keyguard/AOD and the wallpaper is not occluded by a
+            // solid backdrop. Also, show it if we are currently animating between the
+            // keyguard and the surface behind the keyguard - we want to use the wallpaper as a
+            // backdrop for this animation.
+            mLpChanged.flags |= LayoutParams.FLAG_SHOW_WALLPAPER;
+        } else {
+            mLpChanged.flags &= ~LayoutParams.FLAG_SHOW_WALLPAPER;
+        }
+
+        if (state.mDozing) {
+            mLpChanged.privateFlags |= LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
+        } else {
+            mLpChanged.privateFlags &= ~LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
+        }
+
+        if (mKeyguardPreferredRefreshRate > 0) {
+            boolean onKeyguard = state.mStatusBarState == StatusBarState.KEYGUARD
+                    && !state.mKeyguardFadingAway && !state.mKeyguardGoingAway;
+            if (onKeyguard
+                    && mAuthController.isUdfpsEnrolled(KeyguardUpdateMonitor.getCurrentUser())) {
+                mLpChanged.preferredMaxDisplayRefreshRate = mKeyguardPreferredRefreshRate;
+            } else {
+                mLpChanged.preferredMaxDisplayRefreshRate = 0;
+            }
+            Trace.setCounter("display_set_preferred_refresh_rate",
+                    (long) mKeyguardPreferredRefreshRate);
+        } else if (mKeyguardMaxRefreshRate > 0) {
+            boolean bypassOnKeyguard = mKeyguardBypassController.getBypassEnabled()
+                    && state.mStatusBarState == StatusBarState.KEYGUARD
+                    && !state.mKeyguardFadingAway && !state.mKeyguardGoingAway;
+            if (state.mDozing || bypassOnKeyguard) {
+                mLpChanged.preferredMaxDisplayRefreshRate = mKeyguardMaxRefreshRate;
+            } else {
+                mLpChanged.preferredMaxDisplayRefreshRate = 0;
+            }
+            Trace.setCounter("display_max_refresh_rate",
+                    (long) mLpChanged.preferredMaxDisplayRefreshRate);
+        }
+
+        if (state.mBouncerShowing && !isDebuggable()) {
+            mLpChanged.flags |= LayoutParams.FLAG_SECURE;
+        } else {
+            mLpChanged.flags &= ~LayoutParams.FLAG_SECURE;
+        }
+    }
+
+    protected boolean isDebuggable() {
+        return Build.IS_DEBUGGABLE;
+    }
+
+    private void adjustScreenOrientation(State state) {
+        if (state.mBouncerShowing || state.isKeyguardShowingAndNotOccluded() || state.mDozing) {
+            if (mKeyguardStateController.isKeyguardScreenRotationAllowed()) {
+                mLpChanged.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_USER;
+            } else {
+                mLpChanged.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
+            }
+        } else {
+            mLpChanged.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
+        }
+    }
+
+    private void applyFocusableFlag(State state) {
+        boolean panelFocusable = state.mNotificationShadeFocusable && state.mPanelExpanded;
+        if (state.mBouncerShowing && (state.mKeyguardOccluded || state.mKeyguardNeedsInput)
+                || ENABLE_REMOTE_INPUT && state.mRemoteInputActive
+                // Make the panel focusable if we're doing the screen off animation, since the light
+                // reveal scrim is drawing in the panel and should consume touch events so that they
+                // don't go to the app behind.
+                || mScreenOffAnimationController.shouldIgnoreKeyguardTouches()) {
+            mLpChanged.flags &= ~LayoutParams.FLAG_NOT_FOCUSABLE;
+            mLpChanged.flags &= ~LayoutParams.FLAG_ALT_FOCUSABLE_IM;
+        } else if (state.isKeyguardShowingAndNotOccluded() || panelFocusable) {
+            mLpChanged.flags &= ~LayoutParams.FLAG_NOT_FOCUSABLE;
+            // Make sure to remove FLAG_ALT_FOCUSABLE_IM when keyguard needs input.
+            if (state.mKeyguardNeedsInput && state.isKeyguardShowingAndNotOccluded()) {
+                mLpChanged.flags &= ~LayoutParams.FLAG_ALT_FOCUSABLE_IM;
+            } else {
+                mLpChanged.flags |= LayoutParams.FLAG_ALT_FOCUSABLE_IM;
+            }
+        } else {
+            mLpChanged.flags |= LayoutParams.FLAG_NOT_FOCUSABLE;
+            mLpChanged.flags &= ~LayoutParams.FLAG_ALT_FOCUSABLE_IM;
+        }
+
+        mLpChanged.softInputMode = LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
+    }
+
+    private void applyForceShowNavigationFlag(State state) {
+        if (state.mPanelExpanded || state.mBouncerShowing
+                || ENABLE_REMOTE_INPUT && state.mRemoteInputActive) {
+            mLpChanged.privateFlags |= LayoutParams.PRIVATE_FLAG_STATUS_FORCE_SHOW_NAVIGATION;
+        } else {
+            mLpChanged.privateFlags &= ~LayoutParams.PRIVATE_FLAG_STATUS_FORCE_SHOW_NAVIGATION;
+        }
+    }
+
+    private void applyVisibility(State state) {
+        boolean visible = isExpanded(state);
+        if (state.mForcePluginOpen) {
+            if (mListener != null) {
+                mListener.setWouldOtherwiseCollapse(visible);
+            }
+            visible = true;
+        }
+        if (mNotificationShadeView != null) {
+            if (visible) {
+                mNotificationShadeView.setVisibility(View.VISIBLE);
+            } else {
+                mNotificationShadeView.setVisibility(View.INVISIBLE);
+            }
+        }
+    }
+
+    private boolean isExpanded(State state) {
+        return !state.mForceCollapsed && (state.isKeyguardShowingAndNotOccluded()
+                || state.mPanelVisible || state.mKeyguardFadingAway || state.mBouncerShowing
+                || state.mHeadsUpShowing
+                || state.mScrimsVisibility != ScrimController.TRANSPARENT)
+                || state.mBackgroundBlurRadius > 0
+                || state.mLaunchingActivity;
+    }
+
+    private void applyFitsSystemWindows(State state) {
+        boolean fitsSystemWindows = !state.isKeyguardShowingAndNotOccluded();
+        if (mNotificationShadeView != null
+                && mNotificationShadeView.getFitsSystemWindows() != fitsSystemWindows) {
+            mNotificationShadeView.setFitsSystemWindows(fitsSystemWindows);
+            mNotificationShadeView.requestApplyInsets();
+        }
+    }
+
+    private void applyUserActivityTimeout(State state) {
+        if (state.isKeyguardShowingAndNotOccluded()
+                && state.mStatusBarState == StatusBarState.KEYGUARD
+                && !state.mQsExpanded) {
+            mLpChanged.userActivityTimeout = state.mBouncerShowing
+                    ? KeyguardViewMediator.AWAKE_INTERVAL_BOUNCER_MS : mLockScreenDisplayTimeout;
+        } else {
+            mLpChanged.userActivityTimeout = -1;
+        }
+    }
+
+    private void applyInputFeatures(State state) {
+        if (state.isKeyguardShowingAndNotOccluded()
+                && state.mStatusBarState == StatusBarState.KEYGUARD
+                && !state.mQsExpanded && !state.mForceUserActivity) {
+            mLpChanged.inputFeatures |=
+                    LayoutParams.INPUT_FEATURE_DISABLE_USER_ACTIVITY;
+        } else {
+            mLpChanged.inputFeatures &=
+                    ~LayoutParams.INPUT_FEATURE_DISABLE_USER_ACTIVITY;
+        }
+    }
+
+    private void applyStatusBarColorSpaceAgnosticFlag(State state) {
+        if (!isExpanded(state)) {
+            mLpChanged.privateFlags |= LayoutParams.PRIVATE_FLAG_COLOR_SPACE_AGNOSTIC;
+        } else {
+            mLpChanged.privateFlags &=
+                    ~LayoutParams.PRIVATE_FLAG_COLOR_SPACE_AGNOSTIC;
+        }
+    }
+
+    private void applyWindowLayoutParams() {
+        if (mDeferWindowLayoutParams == 0 && mLp != null && mLp.copyFrom(mLpChanged) != 0) {
+            Trace.beginSection("updateViewLayout");
+            mWindowManager.updateViewLayout(mNotificationShadeView, mLp);
+            Trace.endSection();
+        }
+    }
+
+    @Override
+    public void batchApplyWindowLayoutParams(Runnable scope) {
+        mDeferWindowLayoutParams++;
+        scope.run();
+        mDeferWindowLayoutParams--;
+        applyWindowLayoutParams();
+    }
+
+    private void apply(State state) {
+        applyKeyguardFlags(state);
+        applyFocusableFlag(state);
+        applyForceShowNavigationFlag(state);
+        adjustScreenOrientation(state);
+        applyVisibility(state);
+        applyUserActivityTimeout(state);
+        applyInputFeatures(state);
+        applyFitsSystemWindows(state);
+        applyModalFlag(state);
+        applyBrightness(state);
+        applyHasTopUi(state);
+        applyNotTouchable(state);
+        applyStatusBarColorSpaceAgnosticFlag(state);
+        applyWindowLayoutParams();
+
+        if (mHasTopUi != mHasTopUiChanged) {
+            whitelistIpcs(() -> {
+                try {
+                    mActivityManager.setHasTopUi(mHasTopUiChanged);
+                } catch (RemoteException e) {
+                    Log.e(TAG, "Failed to call setHasTopUi", e);
+                }
+                mHasTopUi = mHasTopUiChanged;
+            });
+        }
+        notifyStateChangedCallbacks();
+    }
+
+    @Override
+    public void notifyStateChangedCallbacks() {
+        // Copy callbacks to separate ArrayList to avoid concurrent modification
+        List<StatusBarWindowCallback> activeCallbacks = mCallbacks.stream()
+                .map(Reference::get)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toList());
+        for (StatusBarWindowCallback cb : activeCallbacks) {
+            cb.onStateChanged(mCurrentState.mKeyguardShowing,
+                    mCurrentState.mKeyguardOccluded,
+                    mCurrentState.mBouncerShowing,
+                    mCurrentState.mDozing,
+                    mCurrentState.mPanelExpanded);
+        }
+    }
+
+    private void applyModalFlag(State state) {
+        if (state.mHeadsUpShowing) {
+            mLpChanged.flags |= LayoutParams.FLAG_NOT_TOUCH_MODAL;
+        } else {
+            mLpChanged.flags &= ~LayoutParams.FLAG_NOT_TOUCH_MODAL;
+        }
+    }
+
+    private void applyBrightness(State state) {
+        if (state.mForceDozeBrightness) {
+            mLpChanged.screenBrightness = mScreenBrightnessDoze;
+        } else {
+            mLpChanged.screenBrightness = LayoutParams.BRIGHTNESS_OVERRIDE_NONE;
+        }
+    }
+
+    private void applyHasTopUi(State state) {
+        mHasTopUiChanged = !state.mComponentsForcingTopUi.isEmpty() || isExpanded(state);
+    }
+
+    private void applyNotTouchable(State state) {
+        if (state.mNotTouchable) {
+            mLpChanged.flags |= LayoutParams.FLAG_NOT_TOUCHABLE;
+        } else {
+            mLpChanged.flags &= ~LayoutParams.FLAG_NOT_TOUCHABLE;
+        }
+    }
+
+    @Override
+    public void setTouchExclusionRegion(Region region) {
+        try {
+            final IWindowSession session = WindowManagerGlobal.getWindowSession();
+            session.updateTapExcludeRegion(
+                    IWindow.Stub.asInterface(getNotificationShadeView().getWindowToken()),
+                    region);
+        } catch (RemoteException e) {
+            Log.e(TAG, "could not update the tap exclusion region:" + e);
+        }
+    }
+
+
+    @Override
+    public void setKeyguardShowing(boolean showing) {
+        mCurrentState.mKeyguardShowing = showing;
+        apply(mCurrentState);
+    }
+
+    @Override
+    public void setKeyguardOccluded(boolean occluded) {
+        mCurrentState.mKeyguardOccluded = occluded;
+        apply(mCurrentState);
+    }
+
+    @Override
+    public void setKeyguardNeedsInput(boolean needsInput) {
+        mCurrentState.mKeyguardNeedsInput = needsInput;
+        apply(mCurrentState);
+    }
+
+    @Override
+    public void setPanelVisible(boolean visible) {
+        if (mCurrentState.mPanelVisible == visible
+                && mCurrentState.mNotificationShadeFocusable == visible) {
+            return;
+        }
+        mCurrentState.mPanelVisible = visible;
+        mCurrentState.mNotificationShadeFocusable = visible;
+        apply(mCurrentState);
+    }
+
+    @Override
+    public void setNotificationShadeFocusable(boolean focusable) {
+        mCurrentState.mNotificationShadeFocusable = focusable;
+        apply(mCurrentState);
+    }
+
+    @Override
+    public void setBouncerShowing(boolean showing) {
+        mCurrentState.mBouncerShowing = showing;
+        apply(mCurrentState);
+    }
+
+    @Override
+    public void setBackdropShowing(boolean showing) {
+        mCurrentState.mBackdropShowing = showing;
+        apply(mCurrentState);
+    }
+
+    @Override
+    public void setKeyguardFadingAway(boolean keyguardFadingAway) {
+        mCurrentState.mKeyguardFadingAway = keyguardFadingAway;
+        apply(mCurrentState);
+    }
+
+    @Override
+    public void setQsExpanded(boolean expanded) {
+        mCurrentState.mQsExpanded = expanded;
+        apply(mCurrentState);
+    }
+
+    @Override
+    public void setForceUserActivity(boolean forceUserActivity) {
+        mCurrentState.mForceUserActivity = forceUserActivity;
+        apply(mCurrentState);
+    }
+
+    @Override
+    public void setLaunchingActivity(boolean launching) {
+        mCurrentState.mLaunchingActivity = launching;
+        apply(mCurrentState);
+    }
+
+    @Override
+    public boolean isLaunchingActivity() {
+        return mCurrentState.mLaunchingActivity;
+    }
+
+    @Override
+    public void setScrimsVisibility(int scrimsVisibility) {
+        if (scrimsVisibility == mCurrentState.mScrimsVisibility) {
+            return;
+        }
+        boolean wasExpanded = isExpanded(mCurrentState);
+        mCurrentState.mScrimsVisibility = scrimsVisibility;
+        if (wasExpanded != isExpanded(mCurrentState)) {
+            apply(mCurrentState);
+        }
+        mScrimsVisibilityListener.accept(scrimsVisibility);
+    }
+
+    /**
+     * Current blur level, controller by
+     * {@link com.android.systemui.statusbar.NotificationShadeDepthController}.
+     * @param backgroundBlurRadius Radius in pixels.
+     */
+    @Override
+    public void setBackgroundBlurRadius(int backgroundBlurRadius) {
+        if (mCurrentState.mBackgroundBlurRadius == backgroundBlurRadius) {
+            return;
+        }
+        mCurrentState.mBackgroundBlurRadius = backgroundBlurRadius;
+        apply(mCurrentState);
+    }
+
+    @Override
+    public void setHeadsUpShowing(boolean showing) {
+        mCurrentState.mHeadsUpShowing = showing;
+        apply(mCurrentState);
+    }
+
+    @Override
+    public void setLightRevealScrimOpaque(boolean opaque) {
+        if (mCurrentState.mLightRevealScrimOpaque == opaque) {
+            return;
+        }
+        mCurrentState.mLightRevealScrimOpaque = opaque;
+        apply(mCurrentState);
+    }
+
+    @Override
+    public void setWallpaperSupportsAmbientMode(boolean supportsAmbientMode) {
+        mCurrentState.mWallpaperSupportsAmbientMode = supportsAmbientMode;
+        apply(mCurrentState);
+    }
+
+    /**
+     * @param state The {@link StatusBarStateController} of the status bar.
+     */
+    private void setStatusBarState(int state) {
+        mCurrentState.mStatusBarState = state;
+        apply(mCurrentState);
+    }
+
+    /**
+     * Force the window to be collapsed, even if it should theoretically be expanded.
+     * Used for when a heads-up comes in but we still need to wait for the touchable regions to
+     * be computed.
+     */
+    @Override
+    public void setForceWindowCollapsed(boolean force) {
+        mCurrentState.mForceCollapsed = force;
+        apply(mCurrentState);
+    }
+
+    @Override
+    public void setPanelExpanded(boolean isExpanded) {
+        if (mCurrentState.mPanelExpanded == isExpanded) {
+            return;
+        }
+        mCurrentState.mPanelExpanded = isExpanded;
+        apply(mCurrentState);
+    }
+
+    @Override
+    public void onRemoteInputActive(boolean remoteInputActive) {
+        mCurrentState.mRemoteInputActive = remoteInputActive;
+        apply(mCurrentState);
+    }
+
+    /**
+     * Set whether the screen brightness is forced to the value we use for doze mode by the status
+     * bar window.
+     */
+    @Override
+    public void setForceDozeBrightness(boolean forceDozeBrightness) {
+        if (mCurrentState.mForceDozeBrightness == forceDozeBrightness) {
+            return;
+        }
+        mCurrentState.mForceDozeBrightness = forceDozeBrightness;
+        apply(mCurrentState);
+    }
+
+    @Override
+    public void setDozing(boolean dozing) {
+        mCurrentState.mDozing = dozing;
+        apply(mCurrentState);
+    }
+
+    private final Set<Object> mForceOpenTokens = new HashSet<>();
+    @Override
+    public void setForcePluginOpen(boolean forceOpen, Object token) {
+        if (forceOpen) {
+            mForceOpenTokens.add(token);
+        } else {
+            mForceOpenTokens.remove(token);
+        }
+        final boolean previousForceOpenState = mCurrentState.mForcePluginOpen;
+        mCurrentState.mForcePluginOpen = !mForceOpenTokens.isEmpty();
+        if (previousForceOpenState != mCurrentState.mForcePluginOpen) {
+            apply(mCurrentState);
+            if (mForcePluginOpenListener != null) {
+                mForcePluginOpenListener.onChange(mCurrentState.mForcePluginOpen);
+            }
+        }
+    }
+
+    /**
+     * The forcePluginOpen state for the status bar.
+     */
+    @Override
+    public boolean getForcePluginOpen() {
+        return mCurrentState.mForcePluginOpen;
+    }
+
+    @Override
+    public void setNotTouchable(boolean notTouchable) {
+        mCurrentState.mNotTouchable = notTouchable;
+        apply(mCurrentState);
+    }
+
+    /**
+     * Whether the status bar panel is expanded or not.
+     */
+    @Override
+    public boolean getPanelExpanded() {
+        return mCurrentState.mPanelExpanded;
+    }
+
+    @Override
+    public void setStateListener(OtherwisedCollapsedListener listener) {
+        mListener = listener;
+    }
+
+    @Override
+    public void setForcePluginOpenListener(ForcePluginOpenListener listener) {
+        mForcePluginOpenListener = listener;
+    }
+
+    @Override
+    public void dump(PrintWriter pw, String[] args) {
+        pw.println(TAG + ":");
+        pw.println("  mKeyguardMaxRefreshRate=" + mKeyguardMaxRefreshRate);
+        pw.println("  mKeyguardPreferredRefreshRate=" + mKeyguardPreferredRefreshRate);
+        pw.println("  mDeferWindowLayoutParams=" + mDeferWindowLayoutParams);
+        pw.println(mCurrentState);
+        if (mNotificationShadeView != null && mNotificationShadeView.getViewRootImpl() != null) {
+            mNotificationShadeView.getViewRootImpl().dump("  ", pw);
+        }
+    }
+
+    @Override
+    public boolean isShowingWallpaper() {
+        return !mCurrentState.mBackdropShowing;
+    }
+
+    @Override
+    public void onThemeChanged() {
+        if (mNotificationShadeView == null) {
+            return;
+        }
+
+        final boolean useDarkText = mColorExtractor.getNeutralColors().supportsDarkText();
+        // Make sure we have the correct navbar/statusbar colors.
+        setKeyguardDark(useDarkText);
+    }
+
+    @Override
+    public void onConfigChanged(Configuration newConfig) {
+        final boolean newScreenRotationAllowed = mKeyguardStateController
+                .isKeyguardScreenRotationAllowed();
+
+        if (mLastKeyguardRotationAllowed != newScreenRotationAllowed) {
+            apply(mCurrentState);
+            mLastKeyguardRotationAllowed = newScreenRotationAllowed;
+        }
+    }
+
+    /**
+     * When keyguard will be dismissed but didn't start animation yet.
+     */
+    @Override
+    public void setKeyguardGoingAway(boolean goingAway) {
+        mCurrentState.mKeyguardGoingAway = goingAway;
+        apply(mCurrentState);
+    }
+
+    /**
+     * SystemUI may need top-ui to avoid jank when performing animations.  After the
+     * animation is performed, the component should remove itself from the list of features that
+     * are forcing SystemUI to be top-ui.
+     */
+    @Override
+    public void setRequestTopUi(boolean requestTopUi, String componentTag) {
+        if (requestTopUi) {
+            mCurrentState.mComponentsForcingTopUi.add(componentTag);
+        } else {
+            mCurrentState.mComponentsForcingTopUi.remove(componentTag);
+        }
+        apply(mCurrentState);
+    }
+
+    private static class State {
+        boolean mKeyguardShowing;
+        boolean mKeyguardOccluded;
+        boolean mKeyguardNeedsInput;
+        boolean mPanelVisible;
+        boolean mPanelExpanded;
+        boolean mNotificationShadeFocusable;
+        boolean mBouncerShowing;
+        boolean mKeyguardFadingAway;
+        boolean mKeyguardGoingAway;
+        boolean mQsExpanded;
+        boolean mHeadsUpShowing;
+        boolean mLightRevealScrimOpaque;
+        boolean mForceCollapsed;
+        boolean mForceDozeBrightness;
+        boolean mForceUserActivity;
+        boolean mLaunchingActivity;
+        boolean mBackdropShowing;
+        boolean mWallpaperSupportsAmbientMode;
+        boolean mNotTouchable;
+        Set<String> mComponentsForcingTopUi = new HashSet<>();
+
+        /**
+         * The status bar state from {@link CentralSurfaces}.
+         */
+        int mStatusBarState;
+
+        boolean mRemoteInputActive;
+        boolean mForcePluginOpen;
+        boolean mDozing;
+        int mScrimsVisibility;
+        int mBackgroundBlurRadius;
+
+        private boolean isKeyguardShowingAndNotOccluded() {
+            return mKeyguardShowing && !mKeyguardOccluded;
+        }
+
+        @Override
+        public String toString() {
+            StringBuilder result = new StringBuilder();
+            String newLine = "\n";
+            result.append("Window State {");
+            result.append(newLine);
+
+            Field[] fields = this.getClass().getDeclaredFields();
+
+            // Print field names paired with their values
+            for (Field field : fields) {
+                result.append("  ");
+                try {
+                    result.append(field.getName());
+                    result.append(": ");
+                    //requires access to private field:
+                    result.append(field.get(this));
+                } catch (IllegalAccessException ex) {
+                }
+                result.append(newLine);
+            }
+            result.append("}");
+
+            return result.toString();
+        }
+    }
+
+    private final StateListener mStateListener = new StateListener() {
+        @Override
+        public void onStateChanged(int newState) {
+            setStatusBarState(newState);
+        }
+
+        @Override
+        public void onDozingChanged(boolean isDozing) {
+            setDozing(isDozing);
+        }
+    };
+}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowView.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowView.java
new file mode 100644
index 0000000..e52170e
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowView.java
@@ -0,0 +1,619 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 static android.view.WindowInsets.Type.systemBars;
+
+import static com.android.systemui.statusbar.phone.CentralSurfaces.DEBUG;
+
+import android.annotation.ColorInt;
+import android.annotation.DrawableRes;
+import android.annotation.LayoutRes;
+import android.content.Context;
+import android.content.res.Configuration;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.Insets;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
+import android.os.Bundle;
+import android.util.AttributeSet;
+import android.view.ActionMode;
+import android.view.DisplayCutout;
+import android.view.InputQueue;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.MotionEvent;
+import android.view.SurfaceHolder;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
+import android.view.Window;
+import android.view.WindowInsets;
+import android.view.WindowInsetsController;
+import android.widget.FrameLayout;
+
+import com.android.internal.view.FloatingActionMode;
+import com.android.internal.widget.floatingtoolbar.FloatingToolbar;
+import com.android.systemui.R;
+
+/**
+ * Combined keyguard and notification panel view. Also holding backdrop and scrims.
+ */
+public class NotificationShadeWindowView extends FrameLayout {
+    public static final String TAG = "NotificationShadeWindowView";
+
+    private int mRightInset = 0;
+    private int mLeftInset = 0;
+
+    // Implements the floating action mode for TextView's Cut/Copy/Past menu. Normally provided by
+    // DecorView, but since this is a special window we have to roll our own.
+    private View mFloatingActionModeOriginatingView;
+    private ActionMode mFloatingActionMode;
+    private FloatingToolbar mFloatingToolbar;
+    private ViewTreeObserver.OnPreDrawListener mFloatingToolbarPreDrawListener;
+
+    private InteractionEventHandler mInteractionEventHandler;
+
+    public NotificationShadeWindowView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        setMotionEventSplittingEnabled(false);
+    }
+
+    public NotificationPanelView getNotificationPanelView() {
+        return findViewById(R.id.notification_panel);
+    }
+
+    @Override
+    public WindowInsets onApplyWindowInsets(WindowInsets windowInsets) {
+        final Insets insets = windowInsets.getInsetsIgnoringVisibility(systemBars());
+        if (getFitsSystemWindows()) {
+            boolean paddingChanged = insets.top != getPaddingTop()
+                    || insets.bottom != getPaddingBottom();
+
+            // Drop top inset, and pass through bottom inset.
+            if (paddingChanged) {
+                setPadding(0, 0, 0, 0);
+            }
+        } else {
+            boolean changed = getPaddingLeft() != 0
+                    || getPaddingRight() != 0
+                    || getPaddingTop() != 0
+                    || getPaddingBottom() != 0;
+            if (changed) {
+                setPadding(0, 0, 0, 0);
+            }
+        }
+
+        mLeftInset = 0;
+        mRightInset = 0;
+        DisplayCutout displayCutout = getRootWindowInsets().getDisplayCutout();
+        if (displayCutout != null) {
+            mLeftInset = displayCutout.getSafeInsetLeft();
+            mRightInset = displayCutout.getSafeInsetRight();
+        }
+        mLeftInset = Math.max(insets.left, mLeftInset);
+        mRightInset = Math.max(insets.right, mRightInset);
+        applyMargins();
+        return windowInsets;
+    }
+
+    private void applyMargins() {
+        final int count = getChildCount();
+        for (int i = 0; i < count; i++) {
+            View child = getChildAt(i);
+            if (child.getLayoutParams() instanceof LayoutParams) {
+                LayoutParams lp = (LayoutParams) child.getLayoutParams();
+                if (!lp.ignoreRightInset
+                        && (lp.rightMargin != mRightInset || lp.leftMargin != mLeftInset)) {
+                    lp.rightMargin = mRightInset;
+                    lp.leftMargin = mLeftInset;
+                    child.requestLayout();
+                }
+            }
+        }
+    }
+
+    @Override
+    public FrameLayout.LayoutParams generateLayoutParams(AttributeSet attrs) {
+        return new LayoutParams(getContext(), attrs);
+    }
+
+    @Override
+    protected FrameLayout.LayoutParams generateDefaultLayoutParams() {
+        return new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
+    }
+
+    @Override
+    protected void onAttachedToWindow() {
+        super.onAttachedToWindow();
+        setWillNotDraw(!DEBUG);
+    }
+
+    @Override
+    public boolean dispatchKeyEvent(KeyEvent event) {
+        if (mInteractionEventHandler.interceptMediaKey(event)) {
+            return true;
+        }
+
+        if (super.dispatchKeyEvent(event)) {
+            return true;
+        }
+
+        return mInteractionEventHandler.dispatchKeyEvent(event);
+    }
+
+    @Override
+    public boolean dispatchKeyEventPreIme(KeyEvent event) {
+        return mInteractionEventHandler.dispatchKeyEventPreIme(event);
+    }
+
+    protected void setInteractionEventHandler(InteractionEventHandler listener) {
+        mInteractionEventHandler = listener;
+    }
+
+    @Override
+    public boolean dispatchTouchEvent(MotionEvent ev) {
+        Boolean result = mInteractionEventHandler.handleDispatchTouchEvent(ev);
+
+        result = result != null ? result : super.dispatchTouchEvent(ev);
+
+        mInteractionEventHandler.dispatchTouchEventComplete();
+
+        return result;
+    }
+
+    @Override
+    public boolean onInterceptTouchEvent(MotionEvent ev) {
+        boolean intercept = mInteractionEventHandler.shouldInterceptTouchEvent(ev);
+        if (!intercept) {
+            intercept = super.onInterceptTouchEvent(ev);
+        }
+        if (intercept) {
+            mInteractionEventHandler.didIntercept(ev);
+        }
+
+        return intercept;
+    }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent ev) {
+        boolean handled = mInteractionEventHandler.handleTouchEvent(ev);
+
+        if (!handled) {
+            handled = super.onTouchEvent(ev);
+        }
+
+        if (!handled) {
+            mInteractionEventHandler.didNotHandleTouchEvent(ev);
+        }
+
+        return handled;
+    }
+
+    @Override
+    public void onDraw(Canvas canvas) {
+        super.onDraw(canvas);
+        if (DEBUG) {
+            Paint pt = new Paint();
+            pt.setColor(0x80FFFF00);
+            pt.setStrokeWidth(12.0f);
+            pt.setStyle(Paint.Style.STROKE);
+            canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), pt);
+        }
+    }
+
+    private static class LayoutParams extends FrameLayout.LayoutParams {
+
+        public boolean ignoreRightInset;
+
+        LayoutParams(int width, int height) {
+            super(width, height);
+        }
+
+        LayoutParams(Context c, AttributeSet attrs) {
+            super(c, attrs);
+
+            TypedArray a = c.obtainStyledAttributes(attrs, R.styleable.StatusBarWindowView_Layout);
+            ignoreRightInset = a.getBoolean(
+                    R.styleable.StatusBarWindowView_Layout_ignoreRightInset, false);
+            a.recycle();
+        }
+    }
+
+    @Override
+    public ActionMode startActionModeForChild(View originalView, ActionMode.Callback callback,
+            int type) {
+        if (type == ActionMode.TYPE_FLOATING) {
+            return startActionMode(originalView, callback);
+        }
+        return super.startActionModeForChild(originalView, callback, type);
+    }
+
+    private ActionMode createFloatingActionMode(
+            View originatingView, ActionMode.Callback2 callback) {
+        if (mFloatingActionMode != null) {
+            mFloatingActionMode.finish();
+        }
+        cleanupFloatingActionModeViews();
+        mFloatingToolbar = new FloatingToolbar(mFakeWindow);
+        final FloatingActionMode mode =
+                new FloatingActionMode(mContext, callback, originatingView, mFloatingToolbar);
+        mFloatingActionModeOriginatingView = originatingView;
+        mFloatingToolbarPreDrawListener = () -> {
+            mode.updateViewLocationInWindow();
+            return true;
+        };
+        return mode;
+    }
+
+    private void setHandledFloatingActionMode(ActionMode mode) {
+        mFloatingActionMode = mode;
+        mFloatingActionMode.invalidate();  // Will show the floating toolbar if necessary.
+        mFloatingActionModeOriginatingView.getViewTreeObserver()
+                .addOnPreDrawListener(mFloatingToolbarPreDrawListener);
+    }
+
+    private void cleanupFloatingActionModeViews() {
+        if (mFloatingToolbar != null) {
+            mFloatingToolbar.dismiss();
+            mFloatingToolbar = null;
+        }
+        if (mFloatingActionModeOriginatingView != null) {
+            if (mFloatingToolbarPreDrawListener != null) {
+                mFloatingActionModeOriginatingView.getViewTreeObserver()
+                        .removeOnPreDrawListener(mFloatingToolbarPreDrawListener);
+                mFloatingToolbarPreDrawListener = null;
+            }
+            mFloatingActionModeOriginatingView = null;
+        }
+    }
+
+    private ActionMode startActionMode(
+            View originatingView, ActionMode.Callback callback) {
+        ActionMode.Callback2 wrappedCallback = new ActionModeCallback2Wrapper(callback);
+        ActionMode mode = createFloatingActionMode(originatingView, wrappedCallback);
+        if (wrappedCallback.onCreateActionMode(mode, mode.getMenu())) {
+            setHandledFloatingActionMode(mode);
+        } else {
+            mode = null;
+        }
+        return mode;
+    }
+
+    private class ActionModeCallback2Wrapper extends ActionMode.Callback2 {
+        private final ActionMode.Callback mWrapped;
+
+        ActionModeCallback2Wrapper(ActionMode.Callback wrapped) {
+            mWrapped = wrapped;
+        }
+
+        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
+            return mWrapped.onCreateActionMode(mode, menu);
+        }
+
+        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
+            requestFitSystemWindows();
+            return mWrapped.onPrepareActionMode(mode, menu);
+        }
+
+        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
+            return mWrapped.onActionItemClicked(mode, item);
+        }
+
+        public void onDestroyActionMode(ActionMode mode) {
+            mWrapped.onDestroyActionMode(mode);
+            if (mode == mFloatingActionMode) {
+                cleanupFloatingActionModeViews();
+                mFloatingActionMode = null;
+            }
+            requestFitSystemWindows();
+        }
+
+        @Override
+        public void onGetContentRect(ActionMode mode, View view, Rect outRect) {
+            if (mWrapped instanceof ActionMode.Callback2) {
+                ((ActionMode.Callback2) mWrapped).onGetContentRect(mode, view, outRect);
+            } else {
+                super.onGetContentRect(mode, view, outRect);
+            }
+        }
+    }
+
+    interface InteractionEventHandler {
+        /**
+         * Returns a result for {@link ViewGroup#dispatchTouchEvent(MotionEvent)} or null to defer
+         * to the super method.
+         */
+        Boolean handleDispatchTouchEvent(MotionEvent ev);
+
+        /**
+         * Called after all dispatching is done.
+         */
+
+        void dispatchTouchEventComplete();
+
+        /**
+         * Returns if the view should intercept the touch event.
+         *
+         * The touch event may still be interecepted if
+         * {@link ViewGroup#onInterceptTouchEvent(MotionEvent)} decides to do so.
+         */
+        boolean shouldInterceptTouchEvent(MotionEvent ev);
+
+        /**
+         * Called when the view decides to intercept the touch event.
+         */
+        void didIntercept(MotionEvent ev);
+
+        boolean handleTouchEvent(MotionEvent ev);
+
+        void didNotHandleTouchEvent(MotionEvent ev);
+
+        boolean interceptMediaKey(KeyEvent event);
+
+        boolean dispatchKeyEvent(KeyEvent event);
+
+        boolean dispatchKeyEventPreIme(KeyEvent event);
+    }
+
+    /**
+     * Minimal window to satisfy FloatingToolbar.
+     */
+    private final Window mFakeWindow = new Window(mContext) {
+        @Override
+        public void takeSurface(SurfaceHolder.Callback2 callback) {
+        }
+
+        @Override
+        public void takeInputQueue(InputQueue.Callback callback) {
+        }
+
+        @Override
+        public boolean isFloating() {
+            return false;
+        }
+
+        @Override
+        public void alwaysReadCloseOnTouchAttr() {
+        }
+
+        @Override
+        public void setContentView(@LayoutRes int layoutResID) {
+        }
+
+        @Override
+        public void setContentView(View view) {
+        }
+
+        @Override
+        public void setContentView(View view, ViewGroup.LayoutParams params) {
+        }
+
+        @Override
+        public void addContentView(View view, ViewGroup.LayoutParams params) {
+        }
+
+        @Override
+        public void clearContentView() {
+        }
+
+        @Override
+        public View getCurrentFocus() {
+            return null;
+        }
+
+        @Override
+        public LayoutInflater getLayoutInflater() {
+            return null;
+        }
+
+        @Override
+        public void setTitle(CharSequence title) {
+        }
+
+        @Override
+        public void setTitleColor(@ColorInt int textColor) {
+        }
+
+        @Override
+        public void openPanel(int featureId, KeyEvent event) {
+        }
+
+        @Override
+        public void closePanel(int featureId) {
+        }
+
+        @Override
+        public void togglePanel(int featureId, KeyEvent event) {
+        }
+
+        @Override
+        public void invalidatePanelMenu(int featureId) {
+        }
+
+        @Override
+        public boolean performPanelShortcut(int featureId, int keyCode, KeyEvent event, int flags) {
+            return false;
+        }
+
+        @Override
+        public boolean performPanelIdentifierAction(int featureId, int id, int flags) {
+            return false;
+        }
+
+        @Override
+        public void closeAllPanels() {
+        }
+
+        @Override
+        public boolean performContextMenuIdentifierAction(int id, int flags) {
+            return false;
+        }
+
+        @Override
+        public void onConfigurationChanged(Configuration newConfig) {
+        }
+
+        @Override
+        public void setBackgroundDrawable(Drawable drawable) {
+        }
+
+        @Override
+        public void setFeatureDrawableResource(int featureId, @DrawableRes int resId) {
+        }
+
+        @Override
+        public void setFeatureDrawableUri(int featureId, Uri uri) {
+        }
+
+        @Override
+        public void setFeatureDrawable(int featureId, Drawable drawable) {
+        }
+
+        @Override
+        public void setFeatureDrawableAlpha(int featureId, int alpha) {
+        }
+
+        @Override
+        public void setFeatureInt(int featureId, int value) {
+        }
+
+        @Override
+        public void takeKeyEvents(boolean get) {
+        }
+
+        @Override
+        public boolean superDispatchKeyEvent(KeyEvent event) {
+            return false;
+        }
+
+        @Override
+        public boolean superDispatchKeyShortcutEvent(KeyEvent event) {
+            return false;
+        }
+
+        @Override
+        public boolean superDispatchTouchEvent(MotionEvent event) {
+            return false;
+        }
+
+        @Override
+        public boolean superDispatchTrackballEvent(MotionEvent event) {
+            return false;
+        }
+
+        @Override
+        public boolean superDispatchGenericMotionEvent(MotionEvent event) {
+            return false;
+        }
+
+        @Override
+        public View getDecorView() {
+            return NotificationShadeWindowView.this;
+        }
+
+        @Override
+        public View peekDecorView() {
+            return null;
+        }
+
+        @Override
+        public Bundle saveHierarchyState() {
+            return null;
+        }
+
+        @Override
+        public void restoreHierarchyState(Bundle savedInstanceState) {
+        }
+
+        @Override
+        protected void onActive() {
+        }
+
+        @Override
+        public void setChildDrawable(int featureId, Drawable drawable) {
+        }
+
+        @Override
+        public void setChildInt(int featureId, int value) {
+        }
+
+        @Override
+        public boolean isShortcutKey(int keyCode, KeyEvent event) {
+            return false;
+        }
+
+        @Override
+        public void setVolumeControlStream(int streamType) {
+        }
+
+        @Override
+        public int getVolumeControlStream() {
+            return 0;
+        }
+
+        @Override
+        public int getStatusBarColor() {
+            return 0;
+        }
+
+        @Override
+        public void setStatusBarColor(@ColorInt int color) {
+        }
+
+        @Override
+        public int getNavigationBarColor() {
+            return 0;
+        }
+
+        @Override
+        public void setNavigationBarColor(@ColorInt int color) {
+        }
+
+        @Override
+        public void setDecorCaptionShade(int decorCaptionShade) {
+        }
+
+        @Override
+        public void setResizingCaptionDrawable(Drawable drawable) {
+        }
+
+        @Override
+        public void onMultiWindowModeChanged() {
+        }
+
+        @Override
+        public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
+        }
+
+        @Override
+        public void reportActivityRelaunched() {
+        }
+
+        @Override
+        public WindowInsetsController getInsetsController() {
+            return null;
+        }
+    };
+
+}
+
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java
new file mode 100644
index 0000000..b8546df
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java
@@ -0,0 +1,500 @@
+/*
+ * 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.
+ */
+
+package com.android.systemui.shade;
+
+import android.app.StatusBarManager;
+import android.hardware.display.AmbientDisplayConfiguration;
+import android.media.AudioManager;
+import android.media.session.MediaSessionLegacyHelper;
+import android.os.SystemClock;
+import android.os.UserHandle;
+import android.provider.Settings;
+import android.util.Log;
+import android.view.GestureDetector;
+import android.view.InputDevice;
+import android.view.KeyEvent;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.keyguard.LockIconViewController;
+import com.android.systemui.R;
+import com.android.systemui.classifier.FalsingCollector;
+import com.android.systemui.dock.DockManager;
+import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
+import com.android.systemui.lowlightclock.LowLightClockController;
+import com.android.systemui.statusbar.DragDownHelper;
+import com.android.systemui.statusbar.LockscreenShadeTransitionController;
+import com.android.systemui.statusbar.NotificationShadeDepthController;
+import com.android.systemui.statusbar.NotificationShadeWindowController;
+import com.android.systemui.statusbar.SysuiStatusBarStateController;
+import com.android.systemui.statusbar.notification.stack.AmbientState;
+import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
+import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
+import com.android.systemui.statusbar.phone.CentralSurfaces;
+import com.android.systemui.statusbar.phone.PhoneStatusBarViewController;
+import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
+import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent;
+import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
+import com.android.systemui.statusbar.window.StatusBarWindowStateController;
+import com.android.systemui.tuner.TunerService;
+
+import java.io.PrintWriter;
+import java.util.Optional;
+
+import javax.inject.Inject;
+
+/**
+ * Controller for {@link NotificationShadeWindowView}.
+ */
+@CentralSurfacesComponent.CentralSurfacesScope
+public class NotificationShadeWindowViewController {
+    private static final String TAG = "NotifShadeWindowVC";
+    private final FalsingCollector mFalsingCollector;
+    private final TunerService mTunerService;
+    private final SysuiStatusBarStateController mStatusBarStateController;
+    private final NotificationShadeWindowView mView;
+    private final NotificationShadeDepthController mDepthController;
+    private final NotificationStackScrollLayoutController mNotificationStackScrollLayoutController;
+    private final LockscreenShadeTransitionController mLockscreenShadeTransitionController;
+    private final LockIconViewController mLockIconViewController;
+    private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
+    private final StatusBarWindowStateController mStatusBarWindowStateController;
+    private final KeyguardUnlockAnimationController mKeyguardUnlockAnimationController;
+    private final AmbientState mAmbientState;
+
+    private GestureDetector mGestureDetector;
+    private View mBrightnessMirror;
+    private boolean mTouchActive;
+    private boolean mTouchCancelled;
+    private boolean mExpandAnimationRunning;
+    private NotificationStackScrollLayout mStackScrollLayout;
+    private PhoneStatusBarViewController mStatusBarViewController;
+    private final CentralSurfaces mService;
+    private final NotificationShadeWindowController mNotificationShadeWindowController;
+    private DragDownHelper mDragDownHelper;
+    private boolean mDoubleTapEnabled;
+    private boolean mSingleTapEnabled;
+    private boolean mExpandingBelowNotch;
+    private final DockManager mDockManager;
+    private final NotificationPanelViewController mNotificationPanelViewController;
+    private final PanelExpansionStateManager mPanelExpansionStateManager;
+    private final Optional<LowLightClockController> mLowLightClockController;
+
+    private boolean mIsTrackingBarGesture = false;
+
+    @Inject
+    public NotificationShadeWindowViewController(
+            LockscreenShadeTransitionController transitionController,
+            FalsingCollector falsingCollector,
+            TunerService tunerService,
+            SysuiStatusBarStateController statusBarStateController,
+            DockManager dockManager,
+            NotificationShadeDepthController depthController,
+            NotificationShadeWindowView notificationShadeWindowView,
+            NotificationPanelViewController notificationPanelViewController,
+            PanelExpansionStateManager panelExpansionStateManager,
+            NotificationStackScrollLayoutController notificationStackScrollLayoutController,
+            StatusBarKeyguardViewManager statusBarKeyguardViewManager,
+            StatusBarWindowStateController statusBarWindowStateController,
+            LockIconViewController lockIconViewController,
+            Optional<LowLightClockController> lowLightClockController,
+            CentralSurfaces centralSurfaces,
+            NotificationShadeWindowController controller,
+            KeyguardUnlockAnimationController keyguardUnlockAnimationController,
+            AmbientState ambientState) {
+        mLockscreenShadeTransitionController = transitionController;
+        mFalsingCollector = falsingCollector;
+        mTunerService = tunerService;
+        mStatusBarStateController = statusBarStateController;
+        mView = notificationShadeWindowView;
+        mDockManager = dockManager;
+        mNotificationPanelViewController = notificationPanelViewController;
+        mPanelExpansionStateManager = panelExpansionStateManager;
+        mDepthController = depthController;
+        mNotificationStackScrollLayoutController = notificationStackScrollLayoutController;
+        mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
+        mStatusBarWindowStateController = statusBarWindowStateController;
+        mLockIconViewController = lockIconViewController;
+        mLowLightClockController = lowLightClockController;
+        mService = centralSurfaces;
+        mNotificationShadeWindowController = controller;
+        mKeyguardUnlockAnimationController = keyguardUnlockAnimationController;
+        mAmbientState = ambientState;
+
+        // This view is not part of the newly inflated expanded status bar.
+        mBrightnessMirror = mView.findViewById(R.id.brightness_mirror_container);
+    }
+
+    /**
+     * @return Location where to place the KeyguardBouncer
+     */
+    public ViewGroup getBouncerContainer() {
+        return mView.findViewById(R.id.keyguard_bouncer_container);
+    }
+
+    /** Inflates the {@link R.layout#status_bar_expanded} layout and sets it up. */
+    public void setupExpandedStatusBar() {
+        mStackScrollLayout = mView.findViewById(R.id.notification_stack_scroller);
+
+        TunerService.Tunable tunable = (key, newValue) -> {
+            AmbientDisplayConfiguration configuration =
+                    new AmbientDisplayConfiguration(mView.getContext());
+            switch (key) {
+                case Settings.Secure.DOZE_DOUBLE_TAP_GESTURE:
+                    mDoubleTapEnabled = configuration.doubleTapGestureEnabled(
+                            UserHandle.USER_CURRENT);
+                    break;
+                case Settings.Secure.DOZE_TAP_SCREEN_GESTURE:
+                    mSingleTapEnabled = configuration.tapGestureEnabled(UserHandle.USER_CURRENT);
+            }
+        };
+        mTunerService.addTunable(tunable,
+                Settings.Secure.DOZE_DOUBLE_TAP_GESTURE,
+                Settings.Secure.DOZE_TAP_SCREEN_GESTURE);
+
+        GestureDetector.SimpleOnGestureListener gestureListener =
+                new GestureDetector.SimpleOnGestureListener() {
+                    @Override
+                    public boolean onSingleTapConfirmed(MotionEvent e) {
+                        if (mSingleTapEnabled && !mDockManager.isDocked()) {
+                            mService.wakeUpIfDozing(
+                                    SystemClock.uptimeMillis(), mView, "SINGLE_TAP");
+                            return true;
+                        }
+                        return false;
+                    }
+
+                    @Override
+                    public boolean onDoubleTap(MotionEvent e) {
+                        if (mDoubleTapEnabled || mSingleTapEnabled) {
+                            mService.wakeUpIfDozing(
+                                    SystemClock.uptimeMillis(), mView, "DOUBLE_TAP");
+                            return true;
+                        }
+                        return false;
+                    }
+                };
+        mGestureDetector = new GestureDetector(mView.getContext(), gestureListener);
+
+        mLowLightClockController.ifPresent(controller -> controller.attachLowLightClockView(mView));
+
+        mView.setInteractionEventHandler(new NotificationShadeWindowView.InteractionEventHandler() {
+            @Override
+            public Boolean handleDispatchTouchEvent(MotionEvent ev) {
+                if (mStatusBarViewController == null) { // Fix for b/192490822
+                    Log.w(TAG, "Ignoring touch while statusBarView not yet set.");
+                    return false;
+                }
+                boolean isDown = ev.getActionMasked() == MotionEvent.ACTION_DOWN;
+                boolean isUp = ev.getActionMasked() == MotionEvent.ACTION_UP;
+                boolean isCancel = ev.getActionMasked() == MotionEvent.ACTION_CANCEL;
+
+                boolean expandingBelowNotch = mExpandingBelowNotch;
+                if (isUp || isCancel) {
+                    mExpandingBelowNotch = false;
+                }
+
+                // Reset manual touch dispatch state here but make sure the UP/CANCEL event still
+                // gets
+                // delivered.
+                if (!isCancel && mService.shouldIgnoreTouch()) {
+                    return false;
+                }
+
+                if (isDown) {
+                    mTouchActive = true;
+                    mTouchCancelled = false;
+                } else if (ev.getActionMasked() == MotionEvent.ACTION_UP
+                        || ev.getActionMasked() == MotionEvent.ACTION_CANCEL) {
+                    mTouchActive = false;
+                }
+                if (mTouchCancelled || mExpandAnimationRunning) {
+                    return false;
+                }
+
+                if (mKeyguardUnlockAnimationController.isPlayingCannedUnlockAnimation()) {
+                    // If the user was sliding their finger across the lock screen,
+                    // we may have been intercepting the touch and forwarding it to the
+                    // UDFPS affordance via mStatusBarKeyguardViewManager.onTouch (see below).
+                    // If this touch ended up unlocking the device, we want to cancel the touch
+                    // immediately, so we don't cause swipe or expand animations afterwards.
+                    cancelCurrentTouch();
+                    return true;
+                }
+
+                mFalsingCollector.onTouchEvent(ev);
+                mGestureDetector.onTouchEvent(ev);
+                mStatusBarKeyguardViewManager.onTouch(ev);
+                if (mBrightnessMirror != null
+                        && mBrightnessMirror.getVisibility() == View.VISIBLE) {
+                    // Disallow new pointers while the brightness mirror is visible. This is so that
+                    // you can't touch anything other than the brightness slider while the mirror is
+                    // showing and the rest of the panel is transparent.
+                    if (ev.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN) {
+                        return false;
+                    }
+                }
+                if (isDown) {
+                    mNotificationStackScrollLayoutController.closeControlsIfOutsideTouch(ev);
+                }
+
+                if (mStatusBarStateController.isDozing()) {
+                    mService.extendDozePulse();
+                }
+                mLockIconViewController.onTouchEvent(
+                        ev,
+                        () -> mService.wakeUpIfDozing(
+                                SystemClock.uptimeMillis(),
+                                mView,
+                                "LOCK_ICON_TOUCH"));
+
+                // In case we start outside of the view bounds (below the status bar), we need to
+                // dispatch
+                // the touch manually as the view system can't accommodate for touches outside of
+                // the
+                // regular view bounds.
+                if (isDown && ev.getY() >= mView.getBottom()) {
+                    mExpandingBelowNotch = true;
+                    expandingBelowNotch = true;
+                }
+                if (expandingBelowNotch) {
+                    return mStatusBarViewController.sendTouchToView(ev);
+                }
+
+                if (!mIsTrackingBarGesture && isDown
+                        && mNotificationPanelViewController.isFullyCollapsed()) {
+                    float x = ev.getRawX();
+                    float y = ev.getRawY();
+                    if (mStatusBarViewController.touchIsWithinView(x, y)) {
+                        if (mStatusBarWindowStateController.windowIsShowing()) {
+                            mIsTrackingBarGesture = true;
+                            return mStatusBarViewController.sendTouchToView(ev);
+                        } else { // it's hidden or hiding, don't send to notification shade.
+                            return true;
+                        }
+                    }
+                } else if (mIsTrackingBarGesture) {
+                    final boolean sendToStatusBar = mStatusBarViewController.sendTouchToView(ev);
+                    if (isUp || isCancel) {
+                        mIsTrackingBarGesture = false;
+                    }
+                    return sendToStatusBar;
+                }
+
+                return null;
+            }
+
+            @Override
+            public void dispatchTouchEventComplete() {
+                mFalsingCollector.onMotionEventComplete();
+            }
+
+            @Override
+            public boolean shouldInterceptTouchEvent(MotionEvent ev) {
+                if (mStatusBarStateController.isDozing() && !mService.isPulsing()
+                        && !mDockManager.isDocked()) {
+                    // Capture all touch events in always-on.
+                    return true;
+                }
+
+                if (mStatusBarKeyguardViewManager.isShowingAlternateAuthOrAnimating()) {
+                    // capture all touches if the alt auth bouncer is showing
+                    return true;
+                }
+
+                if (mLockIconViewController.onInterceptTouchEvent(ev)) {
+                    // immediately return true; don't send the touch to the drag down helper
+                    return true;
+                }
+
+                boolean intercept = false;
+                if (mNotificationPanelViewController.isFullyExpanded()
+                        && mDragDownHelper.isDragDownEnabled()
+                        && !mService.isBouncerShowing()
+                        && !mStatusBarStateController.isDozing()) {
+                    intercept = mDragDownHelper.onInterceptTouchEvent(ev);
+                }
+
+                return intercept;
+
+            }
+
+            @Override
+            public void didIntercept(MotionEvent ev) {
+                MotionEvent cancellation = MotionEvent.obtain(ev);
+                cancellation.setAction(MotionEvent.ACTION_CANCEL);
+                mStackScrollLayout.onInterceptTouchEvent(cancellation);
+                mNotificationPanelViewController.getView().onInterceptTouchEvent(cancellation);
+                cancellation.recycle();
+            }
+
+            @Override
+            public boolean handleTouchEvent(MotionEvent ev) {
+                boolean handled = false;
+                if (mStatusBarStateController.isDozing()) {
+                    handled = !mService.isPulsing();
+                }
+
+                if (mStatusBarKeyguardViewManager.isShowingAlternateAuthOrAnimating()) {
+                    // eat the touch
+                    handled = true;
+                }
+
+                if ((mDragDownHelper.isDragDownEnabled() && !handled)
+                        || mDragDownHelper.isDraggingDown()) {
+                    // we still want to finish our drag down gesture when locking the screen
+                    handled = mDragDownHelper.onTouchEvent(ev);
+                }
+
+                return handled;
+            }
+
+            @Override
+            public void didNotHandleTouchEvent(MotionEvent ev) {
+                final int action = ev.getActionMasked();
+                if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
+                    mService.setInteracting(StatusBarManager.WINDOW_STATUS_BAR, false);
+                }
+            }
+
+            @Override
+            public boolean interceptMediaKey(KeyEvent event) {
+                return mService.interceptMediaKey(event);
+            }
+
+            @Override
+            public boolean dispatchKeyEventPreIme(KeyEvent event) {
+                return mService.dispatchKeyEventPreIme(event);
+            }
+
+            @Override
+            public boolean dispatchKeyEvent(KeyEvent event) {
+                boolean down = event.getAction() == KeyEvent.ACTION_DOWN;
+                switch (event.getKeyCode()) {
+                    case KeyEvent.KEYCODE_BACK:
+                        if (!down) {
+                            mService.onBackPressed();
+                        }
+                        return true;
+                    case KeyEvent.KEYCODE_MENU:
+                        if (!down) {
+                            return mService.onMenuPressed();
+                        }
+                        break;
+                    case KeyEvent.KEYCODE_SPACE:
+                        if (!down) {
+                            return mService.onSpacePressed();
+                        }
+                        break;
+                    case KeyEvent.KEYCODE_VOLUME_DOWN:
+                    case KeyEvent.KEYCODE_VOLUME_UP:
+                        if (mStatusBarStateController.isDozing()) {
+                            MediaSessionLegacyHelper.getHelper(mView.getContext())
+                                    .sendVolumeKeyEvent(
+                                            event, AudioManager.USE_DEFAULT_STREAM_TYPE, true);
+                            return true;
+                        }
+                        break;
+                }
+                return false;
+            }
+        });
+
+        mView.setOnHierarchyChangeListener(new ViewGroup.OnHierarchyChangeListener() {
+            @Override
+            public void onChildViewAdded(View parent, View child) {
+                if (child.getId() == R.id.brightness_mirror_container) {
+                    mBrightnessMirror = child;
+                }
+            }
+
+            @Override
+            public void onChildViewRemoved(View parent, View child) {
+            }
+        });
+
+        setDragDownHelper(mLockscreenShadeTransitionController.getTouchHelper());
+
+        mDepthController.setRoot(mView);
+        mPanelExpansionStateManager.addExpansionListener(mDepthController);
+    }
+
+    public NotificationShadeWindowView getView() {
+        return mView;
+    }
+
+    public void cancelCurrentTouch() {
+        if (mTouchActive) {
+            final long now = SystemClock.uptimeMillis();
+            MotionEvent event = MotionEvent.obtain(now, now,
+                    MotionEvent.ACTION_CANCEL, 0.0f, 0.0f, 0);
+            event.setSource(InputDevice.SOURCE_TOUCHSCREEN);
+            mView.dispatchTouchEvent(event);
+            event.recycle();
+            mTouchCancelled = true;
+        }
+        mAmbientState.setSwipingUp(false);
+    }
+
+    public void dump(PrintWriter pw, String[] args) {
+        pw.print("  mExpandAnimationRunning=");
+        pw.println(mExpandAnimationRunning);
+        pw.print("  mTouchCancelled=");
+        pw.println(mTouchCancelled);
+        pw.print("  mTouchActive=");
+        pw.println(mTouchActive);
+    }
+
+    public void setExpandAnimationRunning(boolean running) {
+        if (mExpandAnimationRunning != running) {
+            mExpandAnimationRunning = running;
+            mNotificationShadeWindowController.setLaunchingActivity(mExpandAnimationRunning);
+        }
+    }
+
+    public void cancelExpandHelper() {
+        if (mStackScrollLayout != null) {
+            mStackScrollLayout.cancelExpandHelper();
+        }
+    }
+
+    public void setStatusBarViewController(PhoneStatusBarViewController statusBarViewController) {
+        mStatusBarViewController = statusBarViewController;
+    }
+
+    /**
+     * Tell the controller that dozing has begun or ended.
+     * @param dozing True if dozing has begun.
+     */
+    public void setDozing(boolean dozing) {
+        mLowLightClockController.ifPresent(controller -> controller.showLowLightClock(dozing));
+    }
+
+    /**
+     * Tell the controller to perform burn-in prevention.
+     */
+    public void dozeTimeTick() {
+        mLowLightClockController.ifPresent(LowLightClockController::dozeTimeTick);
+    }
+
+    @VisibleForTesting
+    void setDragDownHelper(DragDownHelper dragDownHelper) {
+        mDragDownHelper = dragDownHelper;
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationsQSContainerController.kt b/packages/SystemUI/src/com/android/systemui/shade/NotificationsQSContainerController.kt
new file mode 100644
index 0000000..13a5615
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationsQSContainerController.kt
@@ -0,0 +1,288 @@
+package com.android.systemui.shade
+
+import android.view.View
+import android.view.ViewGroup
+import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
+import android.view.WindowInsets
+import androidx.annotation.VisibleForTesting
+import androidx.constraintlayout.widget.ConstraintSet
+import androidx.constraintlayout.widget.ConstraintSet.*
+import com.android.systemui.R
+import com.android.systemui.dagger.qualifiers.Main
+import com.android.systemui.flags.FeatureFlags
+import com.android.systemui.flags.Flags
+import com.android.systemui.navigationbar.NavigationModeController
+import com.android.systemui.plugins.qs.QS
+import com.android.systemui.plugins.qs.QSContainerController
+import com.android.systemui.recents.OverviewProxyService
+import com.android.systemui.recents.OverviewProxyService.OverviewProxyListener
+import com.android.systemui.shared.system.QuickStepContract
+import com.android.systemui.util.LargeScreenUtils
+import com.android.systemui.util.ViewController
+import com.android.systemui.util.concurrency.DelayableExecutor
+import java.util.function.Consumer
+import javax.inject.Inject
+import kotlin.reflect.KMutableProperty0
+
+@VisibleForTesting
+internal const val INSET_DEBOUNCE_MILLIS = 500L
+
+class NotificationsQSContainerController @Inject constructor(
+    view: NotificationsQuickSettingsContainer,
+    private val navigationModeController: NavigationModeController,
+    private val overviewProxyService: OverviewProxyService,
+    private val featureFlags: FeatureFlags,
+    @Main private val delayableExecutor: DelayableExecutor
+) : ViewController<NotificationsQuickSettingsContainer>(view), QSContainerController {
+
+    var qsExpanded = false
+        set(value) {
+            if (field != value) {
+                field = value
+                mView.invalidate()
+            }
+        }
+    private var splitShadeEnabled = false
+    private var isQSDetailShowing = false
+    private var isQSCustomizing = false
+    private var isQSCustomizerAnimating = false
+
+    private var largeScreenShadeHeaderHeight = 0
+    private var largeScreenShadeHeaderActive = false
+    private var notificationsBottomMargin = 0
+    private var scrimShadeBottomMargin = 0
+    private var footerActionsOffset = 0
+    private var bottomStableInsets = 0
+    private var bottomCutoutInsets = 0
+    private var panelMarginHorizontal = 0
+    private var topMargin = 0
+
+    private val useCombinedQSHeaders = featureFlags.isEnabled(Flags.COMBINED_QS_HEADERS)
+
+    private var isGestureNavigation = true
+    private var taskbarVisible = false
+    private val taskbarVisibilityListener: OverviewProxyListener = object : OverviewProxyListener {
+        override fun onTaskbarStatusUpdated(visible: Boolean, stashed: Boolean) {
+            taskbarVisible = visible
+        }
+    }
+
+    // With certain configuration changes (like light/dark changes), the nav bar will disappear
+    // for a bit, causing `bottomStableInsets` to be unstable for some time. Debounce the value
+    // for 500ms.
+    // All interactions with this object happen in the main thread.
+    private val delayedInsetSetter = object : Runnable, Consumer<WindowInsets> {
+        private var canceller: Runnable? = null
+        private var stableInsets = 0
+        private var cutoutInsets = 0
+
+        override fun accept(insets: WindowInsets) {
+            // when taskbar is visible, stableInsetBottom will include its height
+            stableInsets = insets.stableInsetBottom
+            cutoutInsets = insets.displayCutout?.safeInsetBottom ?: 0
+            canceller?.run()
+            canceller = delayableExecutor.executeDelayed(this, INSET_DEBOUNCE_MILLIS)
+        }
+
+        override fun run() {
+            bottomStableInsets = stableInsets
+            bottomCutoutInsets = cutoutInsets
+            updateBottomSpacing()
+        }
+    }
+
+    override fun onInit() {
+        val currentMode: Int = navigationModeController.addListener { mode: Int ->
+            isGestureNavigation = QuickStepContract.isGesturalMode(mode)
+        }
+        isGestureNavigation = QuickStepContract.isGesturalMode(currentMode)
+    }
+
+    public override fun onViewAttached() {
+        updateResources()
+        overviewProxyService.addCallback(taskbarVisibilityListener)
+        mView.setInsetsChangedListener(delayedInsetSetter)
+        mView.setQSFragmentAttachedListener { qs: QS -> qs.setContainerController(this) }
+        mView.setConfigurationChangedListener { updateResources() }
+    }
+
+    override fun onViewDetached() {
+        overviewProxyService.removeCallback(taskbarVisibilityListener)
+        mView.removeOnInsetsChangedListener()
+        mView.removeQSFragmentAttachedListener()
+        mView.setConfigurationChangedListener(null)
+    }
+
+    fun updateResources() {
+        val newSplitShadeEnabled = LargeScreenUtils.shouldUseSplitNotificationShade(resources)
+        val splitShadeEnabledChanged = newSplitShadeEnabled != splitShadeEnabled
+        splitShadeEnabled = newSplitShadeEnabled
+        largeScreenShadeHeaderActive = LargeScreenUtils.shouldUseLargeScreenShadeHeader(resources)
+        notificationsBottomMargin = resources.getDimensionPixelSize(
+                R.dimen.notification_panel_margin_bottom)
+        largeScreenShadeHeaderHeight =
+                resources.getDimensionPixelSize(R.dimen.large_screen_shade_header_height)
+        panelMarginHorizontal = resources.getDimensionPixelSize(
+                R.dimen.notification_panel_margin_horizontal)
+        topMargin = if (largeScreenShadeHeaderActive) {
+            largeScreenShadeHeaderHeight
+        } else {
+            resources.getDimensionPixelSize(R.dimen.notification_panel_margin_top)
+        }
+        updateConstraints()
+
+        val scrimMarginChanged = ::scrimShadeBottomMargin.setAndReportChange(
+            resources.getDimensionPixelSize(R.dimen.split_shade_notifications_scrim_margin_bottom)
+        )
+        val footerOffsetChanged = ::footerActionsOffset.setAndReportChange(
+            resources.getDimensionPixelSize(R.dimen.qs_footer_action_inset) +
+                resources.getDimensionPixelSize(R.dimen.qs_footer_actions_bottom_padding)
+        )
+        val dimensChanged = scrimMarginChanged || footerOffsetChanged
+
+        if (splitShadeEnabledChanged || dimensChanged) {
+            updateBottomSpacing()
+        }
+    }
+
+    override fun setCustomizerAnimating(animating: Boolean) {
+        if (isQSCustomizerAnimating != animating) {
+            isQSCustomizerAnimating = animating
+            mView.invalidate()
+        }
+    }
+
+    override fun setCustomizerShowing(showing: Boolean) {
+        isQSCustomizing = showing
+        updateBottomSpacing()
+    }
+
+    override fun setDetailShowing(showing: Boolean) {
+        isQSDetailShowing = showing
+        updateBottomSpacing()
+    }
+
+    private fun updateBottomSpacing() {
+        val (containerPadding, notificationsMargin, qsContainerPadding) = calculateBottomSpacing()
+        mView.setPadding(0, 0, 0, containerPadding)
+        mView.setNotificationsMarginBottom(notificationsMargin)
+        mView.setQSContainerPaddingBottom(qsContainerPadding)
+    }
+
+    private fun calculateBottomSpacing(): Paddings {
+        val containerPadding: Int
+        var stackScrollMargin = notificationsBottomMargin
+        if (splitShadeEnabled) {
+            if (isGestureNavigation) {
+                // only default cutout padding, taskbar always hides
+                containerPadding = bottomCutoutInsets
+            } else if (taskbarVisible) {
+                // navigation buttons + visible taskbar means we're NOT on homescreen
+                containerPadding = bottomStableInsets
+            } else {
+                // navigation buttons + hidden taskbar means we're on homescreen
+                containerPadding = 0
+                // we need extra margin for notifications as navigation buttons are below them
+                stackScrollMargin = bottomStableInsets + notificationsBottomMargin
+            }
+        } else {
+            if (isQSCustomizing || isQSDetailShowing) {
+                // Clear out bottom paddings/margins so the qs customization can be full height.
+                containerPadding = 0
+                stackScrollMargin = 0
+            } else if (isGestureNavigation) {
+                containerPadding = bottomCutoutInsets
+            } else if (taskbarVisible) {
+                containerPadding = bottomStableInsets
+            } else {
+                containerPadding = 0
+                stackScrollMargin = bottomStableInsets + notificationsBottomMargin
+            }
+        }
+        val qsContainerPadding = if (!(isQSCustomizing || isQSDetailShowing)) {
+            // We also want this padding in the bottom in these cases
+            if (splitShadeEnabled) {
+                stackScrollMargin - scrimShadeBottomMargin - footerActionsOffset
+            } else {
+                bottomStableInsets
+            }
+        } else {
+            0
+        }
+        return Paddings(containerPadding, stackScrollMargin, qsContainerPadding)
+    }
+
+    fun updateConstraints() {
+        // To change the constraints at runtime, all children of the ConstraintLayout must have ids
+        ensureAllViewsHaveIds(mView)
+        val constraintSet = ConstraintSet()
+        constraintSet.clone(mView)
+        setKeyguardStatusViewConstraints(constraintSet)
+        setQsConstraints(constraintSet)
+        setNotificationsConstraints(constraintSet)
+        setLargeScreenShadeHeaderConstraints(constraintSet)
+        mView.applyConstraints(constraintSet)
+    }
+
+    private fun setLargeScreenShadeHeaderConstraints(constraintSet: ConstraintSet) {
+        if (largeScreenShadeHeaderActive) {
+            constraintSet.constrainHeight(R.id.split_shade_status_bar, largeScreenShadeHeaderHeight)
+        } else {
+            if (useCombinedQSHeaders) {
+                constraintSet.constrainHeight(R.id.split_shade_status_bar, WRAP_CONTENT)
+            }
+        }
+    }
+
+    private fun setNotificationsConstraints(constraintSet: ConstraintSet) {
+        val startConstraintId = if (splitShadeEnabled) R.id.qs_edge_guideline else PARENT_ID
+        constraintSet.apply {
+            connect(R.id.notification_stack_scroller, START, startConstraintId, START)
+            setMargin(R.id.notification_stack_scroller, START,
+                    if (splitShadeEnabled) 0 else panelMarginHorizontal)
+            setMargin(R.id.notification_stack_scroller, END, panelMarginHorizontal)
+            setMargin(R.id.notification_stack_scroller, TOP, topMargin)
+            setMargin(R.id.notification_stack_scroller, BOTTOM, notificationsBottomMargin)
+        }
+    }
+
+    private fun setQsConstraints(constraintSet: ConstraintSet) {
+        val endConstraintId = if (splitShadeEnabled) R.id.qs_edge_guideline else PARENT_ID
+        constraintSet.apply {
+            connect(R.id.qs_frame, END, endConstraintId, END)
+            setMargin(R.id.qs_frame, START, if (splitShadeEnabled) 0 else panelMarginHorizontal)
+            setMargin(R.id.qs_frame, END, if (splitShadeEnabled) 0 else panelMarginHorizontal)
+            setMargin(R.id.qs_frame, TOP, topMargin)
+        }
+    }
+
+    private fun setKeyguardStatusViewConstraints(constraintSet: ConstraintSet) {
+        val statusViewMarginHorizontal = resources.getDimensionPixelSize(
+                R.dimen.status_view_margin_horizontal)
+        constraintSet.apply {
+            setMargin(R.id.keyguard_status_view, START, statusViewMarginHorizontal)
+            setMargin(R.id.keyguard_status_view, END, statusViewMarginHorizontal)
+        }
+    }
+
+    private fun ensureAllViewsHaveIds(parentView: ViewGroup) {
+        for (i in 0 until parentView.childCount) {
+            val childView = parentView.getChildAt(i)
+            if (childView.id == View.NO_ID) {
+                childView.id = View.generateViewId()
+            }
+        }
+    }
+}
+
+private data class Paddings(
+    val containerPadding: Int,
+    val notificationsMargin: Int,
+    val qsContainerPadding: Int
+)
+
+private fun KMutableProperty0<Int>.setAndReportChange(newValue: Int): Boolean {
+    val oldValue = get()
+    set(newValue)
+    return oldValue != newValue
+}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationsQuickSettingsContainer.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationsQuickSettingsContainer.java
new file mode 100644
index 0000000..02316b7
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationsQuickSettingsContainer.java
@@ -0,0 +1,188 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.app.Fragment;
+import android.content.Context;
+import android.content.res.Configuration;
+import android.graphics.Canvas;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.WindowInsets;
+
+import androidx.annotation.Nullable;
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.constraintlayout.widget.ConstraintSet;
+
+import com.android.systemui.R;
+import com.android.systemui.fragments.FragmentHostManager;
+import com.android.systemui.fragments.FragmentHostManager.FragmentListener;
+import com.android.systemui.plugins.qs.QS;
+import com.android.systemui.statusbar.notification.AboveShelfObserver;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.function.Consumer;
+
+/**
+ * The container with notification stack scroller and quick settings inside.
+ */
+public class NotificationsQuickSettingsContainer extends ConstraintLayout
+        implements FragmentListener, AboveShelfObserver.HasViewAboveShelfChangedListener {
+
+    private View mQsFrame;
+    private View mStackScroller;
+    private View mKeyguardStatusBar;
+
+    private final ArrayList<View> mDrawingOrderedChildren = new ArrayList<>();
+    private final ArrayList<View> mLayoutDrawingOrder = new ArrayList<>();
+    private final Comparator<View> mIndexComparator = Comparator.comparingInt(this::indexOfChild);
+    private Consumer<WindowInsets> mInsetsChangedListener = insets -> {};
+    private Consumer<QS> mQSFragmentAttachedListener = qs -> {};
+    private QS mQs;
+    private View mQSContainer;
+
+    @Nullable
+    private Consumer<Configuration> mConfigurationChangedListener;
+
+    public NotificationsQuickSettingsContainer(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+        mQsFrame = findViewById(R.id.qs_frame);
+        mStackScroller = findViewById(R.id.notification_stack_scroller);
+        mKeyguardStatusBar = findViewById(R.id.keyguard_header);
+    }
+
+    @Override
+    public void onFragmentViewCreated(String tag, Fragment fragment) {
+        mQs = (QS) fragment;
+        mQSFragmentAttachedListener.accept(mQs);
+        mQSContainer = mQs.getView().findViewById(R.id.quick_settings_container);
+    }
+
+    @Override
+    public void onHasViewsAboveShelfChanged(boolean hasViewsAboveShelf) {
+        invalidate();
+    }
+
+    @Override
+    protected void onConfigurationChanged(Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        if (mConfigurationChangedListener != null) {
+            mConfigurationChangedListener.accept(newConfig);
+        }
+    }
+
+    public void setConfigurationChangedListener(Consumer<Configuration> listener) {
+        mConfigurationChangedListener = listener;
+    }
+
+    public void setNotificationsMarginBottom(int margin) {
+        LayoutParams params = (LayoutParams) mStackScroller.getLayoutParams();
+        params.bottomMargin = margin;
+        mStackScroller.setLayoutParams(params);
+    }
+
+    public void setQSContainerPaddingBottom(int paddingBottom) {
+        if (mQSContainer != null) {
+            mQSContainer.setPadding(
+                    mQSContainer.getPaddingLeft(),
+                    mQSContainer.getPaddingTop(),
+                    mQSContainer.getPaddingRight(),
+                    paddingBottom
+            );
+        }
+    }
+
+    public void setInsetsChangedListener(Consumer<WindowInsets> onInsetsChangedListener) {
+        mInsetsChangedListener = onInsetsChangedListener;
+    }
+
+    public void removeOnInsetsChangedListener() {
+        mInsetsChangedListener = insets -> {};
+    }
+
+    public void setQSFragmentAttachedListener(Consumer<QS> qsFragmentAttachedListener) {
+        mQSFragmentAttachedListener = qsFragmentAttachedListener;
+        // listener might be attached after fragment is attached
+        if (mQs != null) {
+            mQSFragmentAttachedListener.accept(mQs);
+        }
+    }
+
+    public void removeQSFragmentAttachedListener() {
+        mQSFragmentAttachedListener = qs -> {};
+    }
+
+    @Override
+    protected void onAttachedToWindow() {
+        super.onAttachedToWindow();
+        FragmentHostManager.get(this).addTagListener(QS.TAG, this);
+    }
+
+    @Override
+    protected void onDetachedFromWindow() {
+        super.onDetachedFromWindow();
+        FragmentHostManager.get(this).removeTagListener(QS.TAG, this);
+    }
+
+    @Override
+    public WindowInsets onApplyWindowInsets(WindowInsets insets) {
+        mInsetsChangedListener.accept(insets);
+        return insets;
+    }
+
+    @Override
+    protected void dispatchDraw(Canvas canvas) {
+        mDrawingOrderedChildren.clear();
+        mLayoutDrawingOrder.clear();
+        if (mKeyguardStatusBar.getVisibility() == View.VISIBLE) {
+            mDrawingOrderedChildren.add(mKeyguardStatusBar);
+            mLayoutDrawingOrder.add(mKeyguardStatusBar);
+        }
+        if (mQsFrame.getVisibility() == View.VISIBLE) {
+            mDrawingOrderedChildren.add(mQsFrame);
+            mLayoutDrawingOrder.add(mQsFrame);
+        }
+        if (mStackScroller.getVisibility() == View.VISIBLE) {
+            mDrawingOrderedChildren.add(mStackScroller);
+            mLayoutDrawingOrder.add(mStackScroller);
+        }
+
+        // Let's now find the order that the view has when drawing regularly by sorting
+        mLayoutDrawingOrder.sort(mIndexComparator);
+        super.dispatchDraw(canvas);
+    }
+
+    @Override
+    protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
+        int layoutIndex = mLayoutDrawingOrder.indexOf(child);
+        if (layoutIndex >= 0) {
+            return super.drawChild(canvas, mDrawingOrderedChildren.get(layoutIndex), drawingTime);
+        } else {
+            return super.drawChild(canvas, child, drawingTime);
+        }
+    }
+
+    public void applyConstraints(ConstraintSet constraintSet) {
+        constraintSet.applyTo(this);
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/OWNERS b/packages/SystemUI/src/com/android/systemui/shade/OWNERS
new file mode 100644
index 0000000..7dc9dc7e
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/OWNERS
@@ -0,0 +1,14 @@
+per-file *Notification* = set noparent
+per-file *Notification* = file:../statusbar/notification/OWNERS
+
+per-file NotificationsQuickSettingsContainer.java = kozynski@google.com, asc@google.com
+per-file NotificationsQSContainerController.kt = kozynski@google.com, asc@google.com
+per-file *ShadeHeader* = kozynski@google.com, asc@google.com
+
+per-file NotificationShadeWindowViewController.java = pixel@google.com, cinek@google.com, juliacr@google.com
+per-file NotificationShadeWindowView.java = pixel@google.com, cinek@google.com, juliacr@google.com
+
+per-file NotificationPanelUnfoldAnimationController.kt = alexflo@google.com, jeffdq@google.com, juliacr@google.com
+
+per-file NotificationPanelView.java = pixel@google.com, cinek@google.com, juliacr@google.com, justinweir@google.com
+per-file NotificationPanelViewController.java = pixel@google.com, cinek@google.com, juliacr@google.com, justinweir@google.com
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/shade/PanelView.java b/packages/SystemUI/src/com/android/systemui/shade/PanelView.java
new file mode 100644
index 0000000..efff0db
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/PanelView.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.shade;
+
+import android.content.Context;
+import android.content.res.Configuration;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.widget.FrameLayout;
+
+import com.android.systemui.statusbar.phone.CentralSurfaces;
+import com.android.systemui.statusbar.phone.HeadsUpManagerPhone;
+import com.android.systemui.statusbar.phone.KeyguardBottomAreaView;
+
+public abstract class PanelView extends FrameLayout {
+    public static final boolean DEBUG = false;
+    public static final String TAG = PanelView.class.getSimpleName();
+    private PanelViewController.TouchHandler mTouchHandler;
+
+    protected CentralSurfaces mCentralSurfaces;
+    protected HeadsUpManagerPhone mHeadsUpManager;
+
+    protected KeyguardBottomAreaView mKeyguardBottomArea;
+    private OnConfigurationChangedListener mOnConfigurationChangedListener;
+
+    public PanelView(Context context) {
+        super(context);
+    }
+
+    public PanelView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public PanelView(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+    }
+
+    public void setOnTouchListener(PanelViewController.TouchHandler touchHandler) {
+        super.setOnTouchListener(touchHandler);
+        mTouchHandler = touchHandler;
+    }
+
+    public void setOnConfigurationChangedListener(OnConfigurationChangedListener listener) {
+        mOnConfigurationChangedListener = listener;
+    }
+
+    @Override
+    public boolean onInterceptTouchEvent(MotionEvent event) {
+        return mTouchHandler.onInterceptTouchEvent(event);
+    }
+
+    @Override
+    public void dispatchConfigurationChanged(Configuration newConfig) {
+        super.dispatchConfigurationChanged(newConfig);
+        mOnConfigurationChangedListener.onConfigurationChanged(newConfig);
+    }
+
+    interface OnConfigurationChangedListener {
+        void onConfigurationChanged(Configuration newConfig);
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/PanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/PanelViewController.java
new file mode 100644
index 0000000..4aad245
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/PanelViewController.java
@@ -0,0 +1,1477 @@
+/*
+ * 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.
+ */
+
+package com.android.systemui.shade;
+
+import static android.view.View.INVISIBLE;
+import static android.view.View.VISIBLE;
+
+import static com.android.systemui.classifier.Classifier.BOUNCER_UNLOCK;
+import static com.android.systemui.classifier.Classifier.GENERIC;
+import static com.android.systemui.classifier.Classifier.QUICK_SETTINGS;
+import static com.android.systemui.classifier.Classifier.UNLOCK;
+import static com.android.systemui.shade.PanelView.DEBUG;
+
+import static java.lang.Float.isNaN;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ValueAnimator;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.os.VibrationEffect;
+import android.util.Log;
+import android.util.MathUtils;
+import android.view.InputDevice;
+import android.view.MotionEvent;
+import android.view.VelocityTracker;
+import android.view.View;
+import android.view.ViewConfiguration;
+import android.view.ViewGroup;
+import android.view.ViewPropertyAnimator;
+import android.view.ViewTreeObserver;
+import android.view.animation.Interpolator;
+
+import com.android.internal.jank.InteractionJankMonitor;
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.internal.util.LatencyTracker;
+import com.android.systemui.DejankUtils;
+import com.android.systemui.R;
+import com.android.systemui.animation.Interpolators;
+import com.android.systemui.classifier.Classifier;
+import com.android.systemui.doze.DozeLog;
+import com.android.systemui.plugins.FalsingManager;
+import com.android.systemui.statusbar.NotificationShadeWindowController;
+import com.android.systemui.statusbar.StatusBarState;
+import com.android.systemui.statusbar.SysuiStatusBarStateController;
+import com.android.systemui.statusbar.VibratorHelper;
+import com.android.systemui.statusbar.notification.stack.AmbientState;
+import com.android.systemui.statusbar.phone.BounceInterpolator;
+import com.android.systemui.statusbar.phone.CentralSurfaces;
+import com.android.systemui.statusbar.phone.HeadsUpManagerPhone;
+import com.android.systemui.statusbar.phone.KeyguardBottomAreaView;
+import com.android.systemui.statusbar.phone.LockscreenGestureLogger;
+import com.android.systemui.statusbar.phone.LockscreenGestureLogger.LockscreenUiEvent;
+import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
+import com.android.systemui.statusbar.phone.StatusBarTouchableRegionManager;
+import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
+import com.android.systemui.statusbar.policy.KeyguardStateController;
+import com.android.systemui.util.time.SystemClock;
+import com.android.wm.shell.animation.FlingAnimationUtils;
+
+import java.io.PrintWriter;
+import java.util.List;
+
+public abstract class PanelViewController {
+    public static final String TAG = PanelView.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;
+    private static final int NO_FIXED_DURATION = -1;
+    private static final long SHADE_OPEN_SPRING_OUT_DURATION = 350L;
+    private static final long SHADE_OPEN_SPRING_BACK_DURATION = 400L;
+
+    /**
+     * The factor of the usual high velocity that is needed in order to reach the maximum overshoot
+     * when flinging. A low value will make it that most flings will reach the maximum overshoot.
+     */
+    private static final float FACTOR_OF_HIGH_VELOCITY_FOR_MAX_OVERSHOOT = 0.5f;
+
+    protected long mDownTime;
+    protected boolean mTouchSlopExceededBeforeDown;
+    private float mMinExpandHeight;
+    private boolean mPanelUpdateWhenAnimatorEnds;
+    private final boolean mVibrateOnOpening;
+    protected boolean mIsLaunchAnimationRunning;
+    private int mFixedDuration = NO_FIXED_DURATION;
+    protected float mOverExpansion;
+
+    /**
+     * The overshoot amount when the panel flings open
+     */
+    private float mPanelFlingOvershootAmount;
+
+    /**
+     * The amount of pixels that we have overexpanded the last time with a gesture
+     */
+    private float mLastGesturedOverExpansion = -1;
+
+    /**
+     * Is the current animator the spring back animation?
+     */
+    private boolean mIsSpringBackAnimation;
+
+    private boolean mInSplitShade;
+
+    private void logf(String fmt, Object... args) {
+        Log.v(TAG, (mViewName != null ? (mViewName + ": ") : "") + String.format(fmt, args));
+    }
+
+    protected CentralSurfaces mCentralSurfaces;
+    protected HeadsUpManagerPhone mHeadsUpManager;
+    protected final StatusBarTouchableRegionManager mStatusBarTouchableRegionManager;
+
+    private float mHintDistance;
+    private float mInitialOffsetOnTouch;
+    private boolean mCollapsedAndHeadsUpOnDown;
+    private float mExpandedFraction = 0;
+    private float mExpansionDragDownAmountPx = 0;
+    protected float mExpandedHeight = 0;
+    private boolean mPanelClosedOnDown;
+    private boolean mHasLayoutedSinceDown;
+    private float mUpdateFlingVelocity;
+    private boolean mUpdateFlingOnLayout;
+    private boolean mClosing;
+    protected boolean mTracking;
+    private boolean mTouchSlopExceeded;
+    private int mTrackingPointer;
+    private int mTouchSlop;
+    private float mSlopMultiplier;
+    protected boolean mHintAnimationRunning;
+    private boolean mTouchAboveFalsingThreshold;
+    private int mUnlockFalsingThreshold;
+    private boolean mTouchStartedInEmptyArea;
+    private boolean mMotionAborted;
+    private boolean mUpwardsWhenThresholdReached;
+    private boolean mAnimatingOnDown;
+    private boolean mHandlingPointerUp;
+
+    private ValueAnimator mHeightAnimator;
+    private final VelocityTracker mVelocityTracker = VelocityTracker.obtain();
+    private final FlingAnimationUtils mFlingAnimationUtils;
+    private final FlingAnimationUtils mFlingAnimationUtilsClosing;
+    private final FlingAnimationUtils mFlingAnimationUtilsDismissing;
+    private final LatencyTracker mLatencyTracker;
+    private final FalsingManager mFalsingManager;
+    private final DozeLog mDozeLog;
+    private final VibratorHelper mVibratorHelper;
+
+    /**
+     * Whether an instant expand request is currently pending and we are just waiting for layout.
+     */
+    private boolean mInstantExpanding;
+    private boolean mAnimateAfterExpanding;
+    private boolean mIsFlinging;
+
+    private String mViewName;
+    private float mInitialTouchY;
+    private float mInitialTouchX;
+    private boolean mTouchDisabled;
+    private boolean mInitialTouchFromKeyguard;
+
+    /**
+     * Whether or not the PanelView can be expanded or collapsed with a drag.
+     */
+    private final boolean mNotificationsDragEnabled;
+
+    private final Interpolator mBounceInterpolator;
+    protected KeyguardBottomAreaView mKeyguardBottomArea;
+
+    /**
+     * Speed-up factor to be used when {@link #mFlingCollapseRunnable} runs the next time.
+     */
+    private float mNextCollapseSpeedUpFactor = 1.0f;
+
+    protected boolean mExpanding;
+    private boolean mGestureWaitForTouchSlop;
+    private boolean mIgnoreXTouchSlop;
+    private boolean mExpandLatencyTracking;
+    private final PanelView mView;
+    private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
+    private final NotificationShadeWindowController mNotificationShadeWindowController;
+    protected final Resources mResources;
+    protected final KeyguardStateController mKeyguardStateController;
+    protected final SysuiStatusBarStateController mStatusBarStateController;
+    protected final AmbientState mAmbientState;
+    protected final LockscreenGestureLogger mLockscreenGestureLogger;
+    private final PanelExpansionStateManager mPanelExpansionStateManager;
+    private final InteractionJankMonitor mInteractionJankMonitor;
+    protected final SystemClock mSystemClock;
+
+    protected abstract void onExpandingFinished();
+
+    protected void onExpandingStarted() {
+    }
+
+    protected void notifyExpandingStarted() {
+        if (!mExpanding) {
+            mExpanding = true;
+            onExpandingStarted();
+        }
+    }
+
+    protected final void notifyExpandingFinished() {
+        endClosing();
+        if (mExpanding) {
+            mExpanding = false;
+            onExpandingFinished();
+        }
+    }
+
+    protected AmbientState getAmbientState() {
+        return mAmbientState;
+    }
+
+    public PanelViewController(
+            PanelView view,
+            FalsingManager falsingManager,
+            DozeLog dozeLog,
+            KeyguardStateController keyguardStateController,
+            SysuiStatusBarStateController statusBarStateController,
+            NotificationShadeWindowController notificationShadeWindowController,
+            VibratorHelper vibratorHelper,
+            StatusBarKeyguardViewManager statusBarKeyguardViewManager,
+            LatencyTracker latencyTracker,
+            FlingAnimationUtils.Builder flingAnimationUtilsBuilder,
+            StatusBarTouchableRegionManager statusBarTouchableRegionManager,
+            LockscreenGestureLogger lockscreenGestureLogger,
+            PanelExpansionStateManager panelExpansionStateManager,
+            AmbientState ambientState,
+            InteractionJankMonitor interactionJankMonitor,
+            SystemClock systemClock) {
+        keyguardStateController.addCallback(new KeyguardStateController.Callback() {
+            @Override
+            public void onKeyguardFadingAwayChanged() {
+                requestPanelHeightUpdate();
+            }
+        });
+        mAmbientState = ambientState;
+        mView = view;
+        mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
+        mLockscreenGestureLogger = lockscreenGestureLogger;
+        mPanelExpansionStateManager = panelExpansionStateManager;
+        TouchHandler touchHandler = createTouchHandler();
+        mView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
+            @Override
+            public void onViewAttachedToWindow(View v) {
+                mViewName = mResources.getResourceName(mView.getId());
+            }
+
+            @Override
+            public void onViewDetachedFromWindow(View v) {
+            }
+        });
+
+        mView.addOnLayoutChangeListener(createLayoutChangeListener());
+        mView.setOnTouchListener(touchHandler);
+        mView.setOnConfigurationChangedListener(createOnConfigurationChangedListener());
+
+        mResources = mView.getResources();
+        mKeyguardStateController = keyguardStateController;
+        mStatusBarStateController = statusBarStateController;
+        mNotificationShadeWindowController = notificationShadeWindowController;
+        mFlingAnimationUtils = flingAnimationUtilsBuilder
+                .reset()
+                .setMaxLengthSeconds(FLING_MAX_LENGTH_SECONDS)
+                .setSpeedUpFactor(FLING_SPEED_UP_FACTOR)
+                .build();
+        mFlingAnimationUtilsClosing = flingAnimationUtilsBuilder
+                .reset()
+                .setMaxLengthSeconds(FLING_CLOSING_MAX_LENGTH_SECONDS)
+                .setSpeedUpFactor(FLING_CLOSING_SPEED_UP_FACTOR)
+                .build();
+        mFlingAnimationUtilsDismissing = flingAnimationUtilsBuilder
+                .reset()
+                .setMaxLengthSeconds(0.5f)
+                .setSpeedUpFactor(0.6f)
+                .setX2(0.6f)
+                .setY2(0.84f)
+                .build();
+        mLatencyTracker = latencyTracker;
+        mBounceInterpolator = new BounceInterpolator();
+        mFalsingManager = falsingManager;
+        mDozeLog = dozeLog;
+        mNotificationsDragEnabled = mResources.getBoolean(
+                R.bool.config_enableNotificationShadeDrag);
+        mVibratorHelper = vibratorHelper;
+        mVibrateOnOpening = mResources.getBoolean(R.bool.config_vibrateOnIconAnimation);
+        mStatusBarTouchableRegionManager = statusBarTouchableRegionManager;
+        mInteractionJankMonitor = interactionJankMonitor;
+        mSystemClock = systemClock;
+    }
+
+    protected void loadDimens() {
+        final ViewConfiguration configuration = ViewConfiguration.get(mView.getContext());
+        mTouchSlop = configuration.getScaledTouchSlop();
+        mSlopMultiplier = configuration.getScaledAmbiguousGestureMultiplier();
+        mHintDistance = mResources.getDimension(R.dimen.hint_move_distance);
+        mPanelFlingOvershootAmount = mResources.getDimension(R.dimen.panel_overshoot_amount);
+        mUnlockFalsingThreshold =
+                mResources.getDimensionPixelSize(R.dimen.unlock_falsing_threshold);
+        mInSplitShade = mResources.getBoolean(R.bool.config_use_split_notification_shade);
+    }
+
+    protected float getTouchSlop(MotionEvent event) {
+        // Adjust the touch slop if another gesture may be being performed.
+        return event.getClassification() == MotionEvent.CLASSIFICATION_AMBIGUOUS_GESTURE
+                ? mTouchSlop * mSlopMultiplier
+                : mTouchSlop;
+    }
+
+    private void addMovement(MotionEvent event) {
+        // Add movement to velocity tracker using raw screen X and Y coordinates instead
+        // of window coordinates because the window frame may be moving at the same time.
+        float deltaX = event.getRawX() - event.getX();
+        float deltaY = event.getRawY() - event.getY();
+        event.offsetLocation(deltaX, deltaY);
+        mVelocityTracker.addMovement(event);
+        event.offsetLocation(-deltaX, -deltaY);
+    }
+
+    public void setTouchAndAnimationDisabled(boolean disabled) {
+        mTouchDisabled = disabled;
+        if (mTouchDisabled) {
+            cancelHeightAnimator();
+            if (mTracking) {
+                onTrackingStopped(true /* expanded */);
+            }
+            notifyExpandingFinished();
+        }
+    }
+
+    public void startExpandLatencyTracking() {
+        if (mLatencyTracker.isEnabled()) {
+            mLatencyTracker.onActionStart(LatencyTracker.ACTION_EXPAND_PANEL);
+            mExpandLatencyTracking = true;
+        }
+    }
+
+    private void startOpening(MotionEvent event) {
+        updatePanelExpansionAndVisibility();
+        maybeVibrateOnOpening();
+
+        //TODO: keyguard opens QS a different way; log that too?
+
+        // Log the position of the swipe that opened the panel
+        float width = mCentralSurfaces.getDisplayWidth();
+        float height = mCentralSurfaces.getDisplayHeight();
+        int rot = mCentralSurfaces.getRotation();
+
+        mLockscreenGestureLogger.writeAtFractionalPosition(MetricsEvent.ACTION_PANEL_VIEW_EXPAND,
+                (int) (event.getX() / width * 100), (int) (event.getY() / height * 100), rot);
+        mLockscreenGestureLogger
+                .log(LockscreenUiEvent.LOCKSCREEN_UNLOCKED_NOTIFICATION_PANEL_EXPAND);
+    }
+
+    protected void maybeVibrateOnOpening() {
+        if (mVibrateOnOpening) {
+            mVibratorHelper.vibrate(VibrationEffect.EFFECT_TICK);
+        }
+    }
+
+    protected abstract float getOpeningHeight();
+
+    /**
+     * @return whether the swiping direction is upwards and above a 45 degree angle compared to the
+     * horizontal direction
+     */
+    private boolean isDirectionUpwards(float x, float y) {
+        float xDiff = x - mInitialTouchX;
+        float yDiff = y - mInitialTouchY;
+        if (yDiff >= 0) {
+            return false;
+        }
+        return Math.abs(yDiff) >= Math.abs(xDiff);
+    }
+
+    public void startExpandMotion(float newX, float newY, boolean startTracking,
+            float expandedHeight) {
+        if (!mHandlingPointerUp && !mStatusBarStateController.isDozing()) {
+            beginJankMonitoring();
+        }
+        mInitialOffsetOnTouch = expandedHeight;
+        mInitialTouchY = newY;
+        mInitialTouchX = newX;
+        mInitialTouchFromKeyguard = mStatusBarStateController.getState() == StatusBarState.KEYGUARD;
+        if (startTracking) {
+            mTouchSlopExceeded = true;
+            setExpandedHeight(mInitialOffsetOnTouch);
+            onTrackingStarted();
+        }
+    }
+
+    private void endMotionEvent(MotionEvent event, float x, float y, boolean forceCancel) {
+        mTrackingPointer = -1;
+        mAmbientState.setSwipingUp(false);
+        if ((mTracking && mTouchSlopExceeded) || Math.abs(x - mInitialTouchX) > mTouchSlop
+                || Math.abs(y - mInitialTouchY) > mTouchSlop
+                || event.getActionMasked() == MotionEvent.ACTION_CANCEL || forceCancel) {
+            mVelocityTracker.computeCurrentVelocity(1000);
+            float vel = mVelocityTracker.getYVelocity();
+            float vectorVel = (float) Math.hypot(
+                    mVelocityTracker.getXVelocity(), mVelocityTracker.getYVelocity());
+
+            final boolean onKeyguard =
+                    mStatusBarStateController.getState() == StatusBarState.KEYGUARD;
+
+            final boolean expand;
+            if (mKeyguardStateController.isKeyguardFadingAway()
+                    || (mInitialTouchFromKeyguard && !onKeyguard)) {
+                // Don't expand for any touches that started from the keyguard and ended after the
+                // keyguard is gone.
+                expand = false;
+            } else if (event.getActionMasked() == MotionEvent.ACTION_CANCEL || forceCancel) {
+                if (onKeyguard) {
+                    expand = true;
+                } else if (mCentralSurfaces.isBouncerShowingOverDream()) {
+                    expand = false;
+                } else {
+                    // If we get a cancel, put the shade back to the state it was in when the
+                    // gesture started
+                    expand = !mPanelClosedOnDown;
+                }
+            } else {
+                expand = flingExpands(vel, vectorVel, x, y);
+            }
+
+            mDozeLog.traceFling(expand, mTouchAboveFalsingThreshold,
+                    mCentralSurfaces.isFalsingThresholdNeeded(),
+                    mCentralSurfaces.isWakeUpComingFromTouch());
+            // Log collapse gesture if on lock screen.
+            if (!expand && onKeyguard) {
+                float displayDensity = mCentralSurfaces.getDisplayDensity();
+                int heightDp = (int) Math.abs((y - mInitialTouchY) / displayDensity);
+                int velocityDp = (int) Math.abs(vel / displayDensity);
+                mLockscreenGestureLogger.write(MetricsEvent.ACTION_LS_UNLOCK, heightDp, velocityDp);
+                mLockscreenGestureLogger.log(LockscreenUiEvent.LOCKSCREEN_UNLOCK);
+            }
+            @Classifier.InteractionType int interactionType = vel == 0 ? GENERIC
+                    : y - mInitialTouchY > 0 ? QUICK_SETTINGS
+                            : (mKeyguardStateController.canDismissLockScreen()
+                                    ? UNLOCK : BOUNCER_UNLOCK);
+
+            fling(vel, expand, isFalseTouch(x, y, interactionType));
+            onTrackingStopped(expand);
+            mUpdateFlingOnLayout = expand && mPanelClosedOnDown && !mHasLayoutedSinceDown;
+            if (mUpdateFlingOnLayout) {
+                mUpdateFlingVelocity = vel;
+            }
+        } else if (!mCentralSurfaces.isBouncerShowing()
+                && !mStatusBarKeyguardViewManager.isShowingAlternateAuthOrAnimating()
+                && !mKeyguardStateController.isKeyguardGoingAway()) {
+            boolean expands = onEmptySpaceClick();
+            onTrackingStopped(expands);
+        }
+        mVelocityTracker.clear();
+    }
+
+    protected float getCurrentExpandVelocity() {
+        mVelocityTracker.computeCurrentVelocity(1000);
+        return mVelocityTracker.getYVelocity();
+    }
+
+    private int getFalsingThreshold() {
+        float factor = mCentralSurfaces.isWakeUpComingFromTouch() ? 1.5f : 1.0f;
+        return (int) (mUnlockFalsingThreshold * factor);
+    }
+
+    protected abstract boolean shouldGestureWaitForTouchSlop();
+
+    protected void onTrackingStopped(boolean expand) {
+        mTracking = false;
+        mCentralSurfaces.onTrackingStopped(expand);
+        updatePanelExpansionAndVisibility();
+    }
+
+    protected void onTrackingStarted() {
+        endClosing();
+        mTracking = true;
+        mCentralSurfaces.onTrackingStarted();
+        notifyExpandingStarted();
+        updatePanelExpansionAndVisibility();
+    }
+
+    /**
+     * @return Whether a pair of coordinates are inside the visible view content bounds.
+     */
+    protected abstract boolean isInContentBounds(float x, float y);
+
+    protected void cancelHeightAnimator() {
+        if (mHeightAnimator != null) {
+            if (mHeightAnimator.isRunning()) {
+                mPanelUpdateWhenAnimatorEnds = false;
+            }
+            mHeightAnimator.cancel();
+        }
+        endClosing();
+    }
+
+    private void endClosing() {
+        if (mClosing) {
+            setIsClosing(false);
+            onClosingFinished();
+        }
+    }
+
+    protected boolean canCollapsePanelOnTouch() {
+        return true;
+    }
+
+    protected float getContentHeight() {
+        return mExpandedHeight;
+    }
+
+    /**
+     * @param vel       the current vertical velocity of the motion
+     * @param vectorVel the length of the vectorial velocity
+     * @return whether a fling should expands the panel; contracts otherwise
+     */
+    protected boolean flingExpands(float vel, float vectorVel, float x, float y) {
+        if (mFalsingManager.isUnlockingDisabled()) {
+            return true;
+        }
+
+        @Classifier.InteractionType int interactionType = y - mInitialTouchY > 0
+                ? QUICK_SETTINGS : (
+                        mKeyguardStateController.canDismissLockScreen() ? UNLOCK : BOUNCER_UNLOCK);
+
+        if (isFalseTouch(x, y, interactionType)) {
+            return true;
+        }
+        if (Math.abs(vectorVel) < mFlingAnimationUtils.getMinVelocityPxPerSecond()) {
+            return shouldExpandWhenNotFlinging();
+        } else {
+            return vel > 0;
+        }
+    }
+
+    protected boolean shouldExpandWhenNotFlinging() {
+        return getExpandedFraction() > 0.5f;
+    }
+
+    /**
+     * @param x the final x-coordinate when the finger was lifted
+     * @param y the final y-coordinate when the finger was lifted
+     * @return whether this motion should be regarded as a false touch
+     */
+    private boolean isFalseTouch(float x, float y,
+            @Classifier.InteractionType int interactionType) {
+        if (!mCentralSurfaces.isFalsingThresholdNeeded()) {
+            return false;
+        }
+        if (mFalsingManager.isClassifierEnabled()) {
+            return mFalsingManager.isFalseTouch(interactionType);
+        }
+        if (!mTouchAboveFalsingThreshold) {
+            return true;
+        }
+        if (mUpwardsWhenThresholdReached) {
+            return false;
+        }
+        return !isDirectionUpwards(x, y);
+    }
+
+    protected void fling(float vel, boolean expand) {
+        fling(vel, expand, 1.0f /* collapseSpeedUpFactor */, false);
+    }
+
+    protected void fling(float vel, boolean expand, boolean expandBecauseOfFalsing) {
+        fling(vel, expand, 1.0f /* collapseSpeedUpFactor */, expandBecauseOfFalsing);
+    }
+
+    protected void fling(float vel, boolean expand, float collapseSpeedUpFactor,
+            boolean expandBecauseOfFalsing) {
+        float target = expand ? getMaxPanelHeight() : 0;
+        if (!expand) {
+            setIsClosing(true);
+        }
+        flingToHeight(vel, expand, target, collapseSpeedUpFactor, expandBecauseOfFalsing);
+    }
+
+    protected void flingToHeight(float vel, boolean expand, float target,
+            float collapseSpeedUpFactor, boolean expandBecauseOfFalsing) {
+        if (target == mExpandedHeight && mOverExpansion == 0.0f) {
+            // We're at the target and didn't fling and there's no overshoot
+            onFlingEnd(false /* cancelled */);
+            return;
+        }
+        mIsFlinging = true;
+        // we want to perform an overshoot animation when flinging open
+        final boolean addOverscroll =
+                expand
+                        && !mInSplitShade // Split shade has its own overscroll logic
+                        && mStatusBarStateController.getState() != StatusBarState.KEYGUARD
+                        && mOverExpansion == 0.0f
+                        && vel >= 0;
+        final boolean shouldSpringBack = addOverscroll || (mOverExpansion != 0.0f && expand);
+        float overshootAmount = 0.0f;
+        if (addOverscroll) {
+            // Let's overshoot depending on the amount of velocity
+            overshootAmount = MathUtils.lerp(
+                    0.2f,
+                    1.0f,
+                    MathUtils.saturate(vel
+                            / (mFlingAnimationUtils.getHighVelocityPxPerSecond()
+                                    * FACTOR_OF_HIGH_VELOCITY_FOR_MAX_OVERSHOOT)));
+            overshootAmount += mOverExpansion / mPanelFlingOvershootAmount;
+        }
+        ValueAnimator animator = createHeightAnimator(target, overshootAmount);
+        if (expand) {
+            if (expandBecauseOfFalsing && vel < 0) {
+                vel = 0;
+            }
+            mFlingAnimationUtils.apply(animator, mExpandedHeight,
+                    target + overshootAmount * mPanelFlingOvershootAmount, vel, mView.getHeight());
+            if (vel == 0) {
+                animator.setDuration(SHADE_OPEN_SPRING_OUT_DURATION);
+            }
+        } else {
+            if (shouldUseDismissingAnimation()) {
+                if (vel == 0) {
+                    animator.setInterpolator(Interpolators.PANEL_CLOSE_ACCELERATED);
+                    long duration = (long) (200 + mExpandedHeight / mView.getHeight() * 100);
+                    animator.setDuration(duration);
+                } else {
+                    mFlingAnimationUtilsDismissing.apply(animator, mExpandedHeight, target, vel,
+                            mView.getHeight());
+                }
+            } else {
+                mFlingAnimationUtilsClosing.apply(
+                        animator, mExpandedHeight, target, vel, mView.getHeight());
+            }
+
+            // Make it shorter if we run a canned animation
+            if (vel == 0) {
+                animator.setDuration((long) (animator.getDuration() / collapseSpeedUpFactor));
+            }
+            if (mFixedDuration != NO_FIXED_DURATION) {
+                animator.setDuration(mFixedDuration);
+            }
+        }
+        animator.addListener(new AnimatorListenerAdapter() {
+            private boolean mCancelled;
+
+            @Override
+            public void onAnimationStart(Animator animation) {
+                if (!mStatusBarStateController.isDozing()) {
+                    beginJankMonitoring();
+                }
+            }
+
+            @Override
+            public void onAnimationCancel(Animator animation) {
+                mCancelled = true;
+            }
+
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                if (shouldSpringBack && !mCancelled) {
+                    // After the shade is flinged open to an overscrolled state, spring back
+                    // the shade by reducing section padding to 0.
+                    springBack();
+                } else {
+                    onFlingEnd(mCancelled);
+                }
+            }
+        });
+        setAnimator(animator);
+        animator.start();
+    }
+
+    private void springBack() {
+        if (mOverExpansion == 0) {
+            onFlingEnd(false /* cancelled */);
+            return;
+        }
+        mIsSpringBackAnimation = true;
+        ValueAnimator animator = ValueAnimator.ofFloat(mOverExpansion, 0);
+        animator.addUpdateListener(
+                animation -> setOverExpansionInternal((float) animation.getAnimatedValue(),
+                        false /* isFromGesture */));
+        animator.setDuration(SHADE_OPEN_SPRING_BACK_DURATION);
+        animator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
+        animator.addListener(new AnimatorListenerAdapter() {
+            private boolean mCancelled;
+            @Override
+            public void onAnimationCancel(Animator animation) {
+                mCancelled = true;
+            }
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                mIsSpringBackAnimation = false;
+                onFlingEnd(mCancelled);
+            }
+        });
+        setAnimator(animator);
+        animator.start();
+    }
+
+    protected void onFlingEnd(boolean cancelled) {
+        mIsFlinging = false;
+        // No overshoot when the animation ends
+        setOverExpansionInternal(0, false /* isFromGesture */);
+        setAnimator(null);
+        mKeyguardStateController.notifyPanelFlingEnd();
+        if (!cancelled) {
+            endJankMonitoring();
+            notifyExpandingFinished();
+        } else {
+            cancelJankMonitoring();
+        }
+        updatePanelExpansionAndVisibility();
+    }
+
+    protected abstract boolean shouldUseDismissingAnimation();
+
+    public String getName() {
+        return mViewName;
+    }
+
+    public void setExpandedHeight(float height) {
+        if (DEBUG) logf("setExpandedHeight(%.1f)", height);
+        setExpandedHeightInternal(height);
+    }
+
+    protected void requestPanelHeightUpdate() {
+        float currentMaxPanelHeight = getMaxPanelHeight();
+
+        if (isFullyCollapsed()) {
+            return;
+        }
+
+        if (currentMaxPanelHeight == mExpandedHeight) {
+            return;
+        }
+
+        if (mTracking && !isTrackingBlocked()) {
+            return;
+        }
+
+        if (mHeightAnimator != null && !mIsSpringBackAnimation) {
+            mPanelUpdateWhenAnimatorEnds = true;
+            return;
+        }
+
+        setExpandedHeight(currentMaxPanelHeight);
+    }
+
+    public void setExpandedHeightInternal(float h) {
+        if (isNaN(h)) {
+            Log.wtf(TAG, "ExpandedHeight set to NaN");
+        }
+        mNotificationShadeWindowController.batchApplyWindowLayoutParams(()-> {
+            if (mExpandLatencyTracking && h != 0f) {
+                DejankUtils.postAfterTraversal(
+                        () -> mLatencyTracker.onActionEnd(LatencyTracker.ACTION_EXPAND_PANEL));
+                mExpandLatencyTracking = false;
+            }
+            float maxPanelHeight = getMaxPanelHeight();
+            if (mHeightAnimator == null) {
+                // Split shade has its own overscroll logic
+                if (mTracking && !mInSplitShade) {
+                    float overExpansionPixels = Math.max(0, h - maxPanelHeight);
+                    setOverExpansionInternal(overExpansionPixels, true /* isFromGesture */);
+                }
+                mExpandedHeight = Math.min(h, maxPanelHeight);
+            } else {
+                mExpandedHeight = h;
+            }
+
+            // If we are closing the panel and we are almost there due to a slow decelerating
+            // interpolator, abort the animation.
+            if (mExpandedHeight < 1f && mExpandedHeight != 0f && mClosing) {
+                mExpandedHeight = 0f;
+                if (mHeightAnimator != null) {
+                    mHeightAnimator.end();
+                }
+            }
+            mExpansionDragDownAmountPx = h;
+            mExpandedFraction = Math.min(1f,
+                    maxPanelHeight == 0 ? 0 : mExpandedHeight / maxPanelHeight);
+            mAmbientState.setExpansionFraction(mExpandedFraction);
+            onHeightUpdated(mExpandedHeight);
+            updatePanelExpansionAndVisibility();
+        });
+    }
+
+    /**
+     * @return true if the panel tracking should be temporarily blocked; this is used when a
+     * conflicting gesture (opening QS) is happening
+     */
+    protected abstract boolean isTrackingBlocked();
+
+    protected void setOverExpansion(float overExpansion) {
+        mOverExpansion = overExpansion;
+    }
+
+    /**
+     * Set the current overexpansion
+     *
+     * @param overExpansion the amount of overexpansion to apply
+     * @param isFromGesture is this amount from a gesture and needs to be rubberBanded?
+     */
+    private void setOverExpansionInternal(float overExpansion, boolean isFromGesture) {
+        if (!isFromGesture) {
+            mLastGesturedOverExpansion = -1;
+            setOverExpansion(overExpansion);
+        } else if (mLastGesturedOverExpansion != overExpansion) {
+            mLastGesturedOverExpansion = overExpansion;
+            final float heightForFullOvershoot = mView.getHeight() / 3.0f;
+            float newExpansion = MathUtils.saturate(overExpansion / heightForFullOvershoot);
+            newExpansion = Interpolators.getOvershootInterpolation(newExpansion);
+            setOverExpansion(newExpansion * mPanelFlingOvershootAmount * 2.0f);
+        }
+    }
+
+    protected abstract void onHeightUpdated(float expandedHeight);
+
+    /**
+     * This returns the maximum height of the panel. Children should override this if their
+     * desired height is not the full height.
+     *
+     * @return the default implementation simply returns the maximum height.
+     */
+    protected abstract int getMaxPanelHeight();
+
+    public void setExpandedFraction(float frac) {
+        setExpandedHeight(getMaxPanelHeight() * frac);
+    }
+
+    public float getExpandedHeight() {
+        return mExpandedHeight;
+    }
+
+    public float getExpandedFraction() {
+        return mExpandedFraction;
+    }
+
+    public boolean isFullyExpanded() {
+        return mExpandedHeight >= getMaxPanelHeight();
+    }
+
+    public boolean isFullyCollapsed() {
+        return mExpandedFraction <= 0.0f;
+    }
+
+    public boolean isCollapsing() {
+        return mClosing || mIsLaunchAnimationRunning;
+    }
+
+    public boolean isFlinging() {
+        return mIsFlinging;
+    }
+
+    public boolean isTracking() {
+        return mTracking;
+    }
+
+    public void collapse(boolean delayed, float speedUpFactor) {
+        if (DEBUG) logf("collapse: " + this);
+        if (canPanelBeCollapsed()) {
+            cancelHeightAnimator();
+            notifyExpandingStarted();
+
+            // Set after notifyExpandingStarted, as notifyExpandingStarted resets the closing state.
+            setIsClosing(true);
+            if (delayed) {
+                mNextCollapseSpeedUpFactor = speedUpFactor;
+                mView.postDelayed(mFlingCollapseRunnable, 120);
+            } else {
+                fling(0, false /* expand */, speedUpFactor, false /* expandBecauseOfFalsing */);
+            }
+        }
+    }
+
+    public boolean canPanelBeCollapsed() {
+        return !isFullyCollapsed() && !mTracking && !mClosing;
+    }
+
+    private final Runnable mFlingCollapseRunnable = () -> fling(0, false /* expand */,
+            mNextCollapseSpeedUpFactor, false /* expandBecauseOfFalsing */);
+
+    public void expand(final boolean animate) {
+        if (!isFullyCollapsed() && !isCollapsing()) {
+            return;
+        }
+
+        mInstantExpanding = true;
+        mAnimateAfterExpanding = animate;
+        mUpdateFlingOnLayout = false;
+        abortAnimations();
+        if (mTracking) {
+            onTrackingStopped(true /* expands */); // The panel is expanded after this call.
+        }
+        if (mExpanding) {
+            notifyExpandingFinished();
+        }
+        updatePanelExpansionAndVisibility();
+
+        // Wait for window manager to pickup the change, so we know the maximum height of the panel
+        // then.
+        mView.getViewTreeObserver().addOnGlobalLayoutListener(
+                new ViewTreeObserver.OnGlobalLayoutListener() {
+                    @Override
+                    public void onGlobalLayout() {
+                        if (!mInstantExpanding) {
+                            mView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
+                            return;
+                        }
+                        if (mCentralSurfaces.getNotificationShadeWindowView().isVisibleToUser()) {
+                            mView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
+                            if (mAnimateAfterExpanding) {
+                                notifyExpandingStarted();
+                                beginJankMonitoring();
+                                fling(0, true /* expand */);
+                            } else {
+                                setExpandedFraction(1f);
+                            }
+                            mInstantExpanding = false;
+                        }
+                    }
+                });
+
+        // Make sure a layout really happens.
+        mView.requestLayout();
+    }
+
+    public void instantCollapse() {
+        abortAnimations();
+        setExpandedFraction(0f);
+        if (mExpanding) {
+            notifyExpandingFinished();
+        }
+        if (mInstantExpanding) {
+            mInstantExpanding = false;
+            updatePanelExpansionAndVisibility();
+        }
+    }
+
+    private void abortAnimations() {
+        cancelHeightAnimator();
+        mView.removeCallbacks(mFlingCollapseRunnable);
+    }
+
+    protected abstract void onClosingFinished();
+
+    protected void startUnlockHintAnimation() {
+
+        // We don't need to hint the user if an animation is already running or the user is changing
+        // the expansion.
+        if (mHeightAnimator != null || mTracking) {
+            return;
+        }
+        notifyExpandingStarted();
+        startUnlockHintAnimationPhase1(() -> {
+            notifyExpandingFinished();
+            onUnlockHintFinished();
+            mHintAnimationRunning = false;
+        });
+        onUnlockHintStarted();
+        mHintAnimationRunning = true;
+    }
+
+    protected void onUnlockHintFinished() {
+        mCentralSurfaces.onHintFinished();
+    }
+
+    protected void onUnlockHintStarted() {
+        mCentralSurfaces.onUnlockHintStarted();
+    }
+
+    public boolean isUnlockHintRunning() {
+        return mHintAnimationRunning;
+    }
+
+    /**
+     * Phase 1: Move everything upwards.
+     */
+    private void startUnlockHintAnimationPhase1(final Runnable onAnimationFinished) {
+        float target = Math.max(0, getMaxPanelHeight() - mHintDistance);
+        ValueAnimator animator = createHeightAnimator(target);
+        animator.setDuration(250);
+        animator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
+        animator.addListener(new AnimatorListenerAdapter() {
+            private boolean mCancelled;
+
+            @Override
+            public void onAnimationCancel(Animator animation) {
+                mCancelled = true;
+            }
+
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                if (mCancelled) {
+                    setAnimator(null);
+                    onAnimationFinished.run();
+                } else {
+                    startUnlockHintAnimationPhase2(onAnimationFinished);
+                }
+            }
+        });
+        animator.start();
+        setAnimator(animator);
+
+        final List<ViewPropertyAnimator> indicationAnimators =
+                mKeyguardBottomArea.getIndicationAreaAnimators();
+        for (final ViewPropertyAnimator indicationAreaAnimator : indicationAnimators) {
+            indicationAreaAnimator
+                    .translationY(-mHintDistance)
+                    .setDuration(250)
+                    .setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
+                    .withEndAction(() -> indicationAreaAnimator
+                            .translationY(0)
+                            .setDuration(450)
+                            .setInterpolator(mBounceInterpolator)
+                            .start())
+                    .start();
+        }
+    }
+
+    private void setAnimator(ValueAnimator animator) {
+        mHeightAnimator = animator;
+        if (animator == null && mPanelUpdateWhenAnimatorEnds) {
+            mPanelUpdateWhenAnimatorEnds = false;
+            requestPanelHeightUpdate();
+        }
+    }
+
+    /**
+     * Phase 2: Bounce down.
+     */
+    private void startUnlockHintAnimationPhase2(final Runnable onAnimationFinished) {
+        ValueAnimator animator = createHeightAnimator(getMaxPanelHeight());
+        animator.setDuration(450);
+        animator.setInterpolator(mBounceInterpolator);
+        animator.addListener(new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                setAnimator(null);
+                onAnimationFinished.run();
+                updatePanelExpansionAndVisibility();
+            }
+        });
+        animator.start();
+        setAnimator(animator);
+    }
+
+    private ValueAnimator createHeightAnimator(float targetHeight) {
+        return createHeightAnimator(targetHeight, 0.0f /* performOvershoot */);
+    }
+
+    /**
+     * Create an animator that can also overshoot
+     *
+     * @param targetHeight the target height
+     * @param overshootAmount the amount of overshoot desired
+     */
+    private ValueAnimator createHeightAnimator(float targetHeight, float overshootAmount) {
+        float startExpansion = mOverExpansion;
+        ValueAnimator animator = ValueAnimator.ofFloat(mExpandedHeight, targetHeight);
+        animator.addUpdateListener(
+                animation -> {
+                    if (overshootAmount > 0.0f
+                            // Also remove the overExpansion when collapsing
+                            || (targetHeight == 0.0f && startExpansion != 0)) {
+                        final float expansion = MathUtils.lerp(
+                                startExpansion,
+                                mPanelFlingOvershootAmount * overshootAmount,
+                                Interpolators.FAST_OUT_SLOW_IN.getInterpolation(
+                                        animator.getAnimatedFraction()));
+                        setOverExpansionInternal(expansion, false /* isFromGesture */);
+                    }
+                    setExpandedHeightInternal((float) animation.getAnimatedValue());
+                });
+        return animator;
+    }
+
+    /** Update the visibility of {@link PanelView} if necessary. */
+    public void updateVisibility() {
+        mView.setVisibility(shouldPanelBeVisible() ? VISIBLE : INVISIBLE);
+    }
+
+    /** Returns true if {@link PanelView} should be visible. */
+    abstract protected boolean shouldPanelBeVisible();
+
+    /**
+     * Updates the panel expansion and {@link PanelView} visibility if necessary.
+     *
+     * TODO(b/200063118): Could public calls to this method be replaced with calls to
+     *   {@link #updateVisibility()}? That would allow us to make this method private.
+     */
+    public void updatePanelExpansionAndVisibility() {
+        mPanelExpansionStateManager.onPanelExpansionChanged(
+                mExpandedFraction, isExpanded(), mTracking, mExpansionDragDownAmountPx);
+        updateVisibility();
+    }
+
+    public boolean isExpanded() {
+        return mExpandedFraction > 0f
+                || mInstantExpanding
+                || isPanelVisibleBecauseOfHeadsUp()
+                || mTracking
+                || mHeightAnimator != null
+                && !mIsSpringBackAnimation;
+    }
+
+    protected abstract boolean isPanelVisibleBecauseOfHeadsUp();
+
+    /**
+     * Gets called when the user performs a click anywhere in the empty area of the panel.
+     *
+     * @return whether the panel will be expanded after the action performed by this method
+     */
+    protected boolean onEmptySpaceClick() {
+        if (mHintAnimationRunning) {
+            return true;
+        }
+        return onMiddleClicked();
+    }
+
+    protected abstract boolean onMiddleClicked();
+
+    protected abstract boolean isDozing();
+
+    public void dump(PrintWriter pw, String[] args) {
+        pw.println(String.format("[PanelView(%s): expandedHeight=%f maxPanelHeight=%d closing=%s"
+                        + " tracking=%s timeAnim=%s%s "
+                        + "touchDisabled=%s" + "]",
+                this.getClass().getSimpleName(), getExpandedHeight(), getMaxPanelHeight(),
+                mClosing ? "T" : "f", mTracking ? "T" : "f", mHeightAnimator,
+                ((mHeightAnimator != null && mHeightAnimator.isStarted()) ? " (started)" : ""),
+                mTouchDisabled ? "T" : "f"));
+    }
+
+    public void setHeadsUpManager(HeadsUpManagerPhone headsUpManager) {
+        mHeadsUpManager = headsUpManager;
+    }
+
+    public void setIsLaunchAnimationRunning(boolean running) {
+        mIsLaunchAnimationRunning = running;
+    }
+
+    protected void setIsClosing(boolean isClosing) {
+        mClosing = isClosing;
+    }
+
+    protected boolean isClosing() {
+        return mClosing;
+    }
+
+    public void collapseWithDuration(int animationDuration) {
+        mFixedDuration = animationDuration;
+        collapse(false /* delayed */, 1.0f /* speedUpFactor */);
+        mFixedDuration = NO_FIXED_DURATION;
+    }
+
+    public ViewGroup getView() {
+        // TODO: remove this method, or at least reduce references to it.
+        return mView;
+    }
+
+    public OnLayoutChangeListener createLayoutChangeListener() {
+        return new OnLayoutChangeListener();
+    }
+
+    protected abstract TouchHandler createTouchHandler();
+
+    protected OnConfigurationChangedListener createOnConfigurationChangedListener() {
+        return new OnConfigurationChangedListener();
+    }
+
+    public class TouchHandler implements View.OnTouchListener {
+
+        public boolean onInterceptTouchEvent(MotionEvent event) {
+            if (mInstantExpanding || !mNotificationsDragEnabled || mTouchDisabled || (mMotionAborted
+                    && event.getActionMasked() != MotionEvent.ACTION_DOWN)) {
+                return false;
+            }
+
+            /*
+             * If the user drags anywhere inside the panel we intercept it if the movement is
+             * upwards. This allows closing the shade from anywhere inside the panel.
+             *
+             * We only do this if the current content is scrolled to the bottom,
+             * i.e canCollapsePanelOnTouch() is true and therefore there is no conflicting scrolling
+             * gesture
+             * possible.
+             */
+            int pointerIndex = event.findPointerIndex(mTrackingPointer);
+            if (pointerIndex < 0) {
+                pointerIndex = 0;
+                mTrackingPointer = event.getPointerId(pointerIndex);
+            }
+            final float x = event.getX(pointerIndex);
+            final float y = event.getY(pointerIndex);
+            boolean canCollapsePanel = canCollapsePanelOnTouch();
+
+            switch (event.getActionMasked()) {
+                case MotionEvent.ACTION_DOWN:
+                    mCentralSurfaces.userActivity();
+                    mAnimatingOnDown = mHeightAnimator != null && !mIsSpringBackAnimation;
+                    mMinExpandHeight = 0.0f;
+                    mDownTime = mSystemClock.uptimeMillis();
+                    if (mAnimatingOnDown && mClosing && !mHintAnimationRunning) {
+                        cancelHeightAnimator();
+                        mTouchSlopExceeded = true;
+                        return true;
+                    }
+                    mInitialTouchY = y;
+                    mInitialTouchX = x;
+                    mTouchStartedInEmptyArea = !isInContentBounds(x, y);
+                    mTouchSlopExceeded = mTouchSlopExceededBeforeDown;
+                    mMotionAborted = false;
+                    mPanelClosedOnDown = isFullyCollapsed();
+                    mCollapsedAndHeadsUpOnDown = false;
+                    mHasLayoutedSinceDown = false;
+                    mUpdateFlingOnLayout = false;
+                    mTouchAboveFalsingThreshold = false;
+                    addMovement(event);
+                    break;
+                case MotionEvent.ACTION_POINTER_UP:
+                    final int upPointer = event.getPointerId(event.getActionIndex());
+                    if (mTrackingPointer == upPointer) {
+                        // gesture is ongoing, find a new pointer to track
+                        final int newIndex = event.getPointerId(0) != upPointer ? 0 : 1;
+                        mTrackingPointer = event.getPointerId(newIndex);
+                        mInitialTouchX = event.getX(newIndex);
+                        mInitialTouchY = event.getY(newIndex);
+                    }
+                    break;
+                case MotionEvent.ACTION_POINTER_DOWN:
+                    if (mStatusBarStateController.getState() == StatusBarState.KEYGUARD) {
+                        mMotionAborted = true;
+                        mVelocityTracker.clear();
+                    }
+                    break;
+                case MotionEvent.ACTION_MOVE:
+                    final float h = y - mInitialTouchY;
+                    addMovement(event);
+                    final boolean openShadeWithoutHun =
+                            mPanelClosedOnDown && !mCollapsedAndHeadsUpOnDown;
+                    if (canCollapsePanel || mTouchStartedInEmptyArea || mAnimatingOnDown
+                            || openShadeWithoutHun) {
+                        float hAbs = Math.abs(h);
+                        float touchSlop = getTouchSlop(event);
+                        if ((h < -touchSlop
+                                || ((openShadeWithoutHun || mAnimatingOnDown) && hAbs > touchSlop))
+                                && hAbs > Math.abs(x - mInitialTouchX)) {
+                            cancelHeightAnimator();
+                            startExpandMotion(x, y, true /* startTracking */, mExpandedHeight);
+                            return true;
+                        }
+                    }
+                    break;
+                case MotionEvent.ACTION_CANCEL:
+                case MotionEvent.ACTION_UP:
+                    mVelocityTracker.clear();
+                    break;
+            }
+            return false;
+        }
+
+        @Override
+        public boolean onTouch(View v, MotionEvent event) {
+            if (mInstantExpanding || (mTouchDisabled
+                    && event.getActionMasked() != MotionEvent.ACTION_CANCEL) || (mMotionAborted
+                    && event.getActionMasked() != MotionEvent.ACTION_DOWN)) {
+                return false;
+            }
+
+            // If dragging should not expand the notifications shade, then return false.
+            if (!mNotificationsDragEnabled) {
+                if (mTracking) {
+                    // Turn off tracking if it's on or the shade can get stuck in the down position.
+                    onTrackingStopped(true /* expand */);
+                }
+                return false;
+            }
+
+            // On expanding, single mouse click expands the panel instead of dragging.
+            if (isFullyCollapsed() && event.isFromSource(InputDevice.SOURCE_MOUSE)) {
+                if (event.getAction() == MotionEvent.ACTION_UP) {
+                    expand(true);
+                }
+                return true;
+            }
+
+            /*
+             * We capture touch events here and update the expand height here in case according to
+             * the users fingers. This also handles multi-touch.
+             *
+             * Flinging is also enabled in order to open or close the shade.
+             */
+
+            int pointerIndex = event.findPointerIndex(mTrackingPointer);
+            if (pointerIndex < 0) {
+                pointerIndex = 0;
+                mTrackingPointer = event.getPointerId(pointerIndex);
+            }
+            final float x = event.getX(pointerIndex);
+            final float y = event.getY(pointerIndex);
+
+            if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
+                mGestureWaitForTouchSlop = shouldGestureWaitForTouchSlop();
+                mIgnoreXTouchSlop = true;
+            }
+
+            switch (event.getActionMasked()) {
+                case MotionEvent.ACTION_DOWN:
+                    startExpandMotion(x, y, false /* startTracking */, mExpandedHeight);
+                    mMinExpandHeight = 0.0f;
+                    mPanelClosedOnDown = isFullyCollapsed();
+                    mHasLayoutedSinceDown = false;
+                    mUpdateFlingOnLayout = false;
+                    mMotionAborted = false;
+                    mDownTime = mSystemClock.uptimeMillis();
+                    mTouchAboveFalsingThreshold = false;
+                    mCollapsedAndHeadsUpOnDown =
+                            isFullyCollapsed() && mHeadsUpManager.hasPinnedHeadsUp();
+                    addMovement(event);
+                    boolean regularHeightAnimationRunning = mHeightAnimator != null
+                            && !mHintAnimationRunning && !mIsSpringBackAnimation;
+                    if (!mGestureWaitForTouchSlop || regularHeightAnimationRunning) {
+                        mTouchSlopExceeded = regularHeightAnimationRunning
+                                        || mTouchSlopExceededBeforeDown;
+                        cancelHeightAnimator();
+                        onTrackingStarted();
+                    }
+                    if (isFullyCollapsed() && !mHeadsUpManager.hasPinnedHeadsUp()
+                            && !mCentralSurfaces.isBouncerShowing()) {
+                        startOpening(event);
+                    }
+                    break;
+
+                case MotionEvent.ACTION_POINTER_UP:
+                    final int upPointer = event.getPointerId(event.getActionIndex());
+                    if (mTrackingPointer == upPointer) {
+                        // gesture is ongoing, find a new pointer to track
+                        final int newIndex = event.getPointerId(0) != upPointer ? 0 : 1;
+                        final float newY = event.getY(newIndex);
+                        final float newX = event.getX(newIndex);
+                        mTrackingPointer = event.getPointerId(newIndex);
+                        mHandlingPointerUp = true;
+                        startExpandMotion(newX, newY, true /* startTracking */, mExpandedHeight);
+                        mHandlingPointerUp = false;
+                    }
+                    break;
+                case MotionEvent.ACTION_POINTER_DOWN:
+                    if (mStatusBarStateController.getState() == StatusBarState.KEYGUARD) {
+                        mMotionAborted = true;
+                        endMotionEvent(event, x, y, true /* forceCancel */);
+                        return false;
+                    }
+                    break;
+                case MotionEvent.ACTION_MOVE:
+                    addMovement(event);
+                    float h = y - mInitialTouchY;
+
+                    // If the panel was collapsed when touching, we only need to check for the
+                    // y-component of the gesture, as we have no conflicting horizontal gesture.
+                    if (Math.abs(h) > getTouchSlop(event)
+                            && (Math.abs(h) > Math.abs(x - mInitialTouchX)
+                            || mIgnoreXTouchSlop)) {
+                        mTouchSlopExceeded = true;
+                        if (mGestureWaitForTouchSlop && !mTracking && !mCollapsedAndHeadsUpOnDown) {
+                            if (mInitialOffsetOnTouch != 0f) {
+                                startExpandMotion(x, y, false /* startTracking */, mExpandedHeight);
+                                h = 0;
+                            }
+                            cancelHeightAnimator();
+                            onTrackingStarted();
+                        }
+                    }
+                    float newHeight = Math.max(0, h + mInitialOffsetOnTouch);
+                    newHeight = Math.max(newHeight, mMinExpandHeight);
+                    if (-h >= getFalsingThreshold()) {
+                        mTouchAboveFalsingThreshold = true;
+                        mUpwardsWhenThresholdReached = isDirectionUpwards(x, y);
+                    }
+                    if ((!mGestureWaitForTouchSlop || mTracking) && !isTrackingBlocked()) {
+                        // Count h==0 as part of swipe-up,
+                        // otherwise {@link NotificationStackScrollLayout}
+                        // wrongly enables stack height updates at the start of lockscreen swipe-up
+                        mAmbientState.setSwipingUp(h <= 0);
+                        setExpandedHeightInternal(newHeight);
+                    }
+                    break;
+
+                case MotionEvent.ACTION_UP:
+                case MotionEvent.ACTION_CANCEL:
+                    addMovement(event);
+                    endMotionEvent(event, x, y, false /* forceCancel */);
+                    // mHeightAnimator is null, there is no remaining frame, ends instrumenting.
+                    if (mHeightAnimator == null) {
+                        if (event.getActionMasked() == MotionEvent.ACTION_UP) {
+                            endJankMonitoring();
+                        } else {
+                            cancelJankMonitoring();
+                        }
+                    }
+                    break;
+            }
+            return !mGestureWaitForTouchSlop || mTracking;
+        }
+    }
+
+    public class OnLayoutChangeListener implements View.OnLayoutChangeListener {
+        @Override
+        public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft,
+                int oldTop, int oldRight, int oldBottom) {
+            requestPanelHeightUpdate();
+            mHasLayoutedSinceDown = true;
+            if (mUpdateFlingOnLayout) {
+                abortAnimations();
+                fling(mUpdateFlingVelocity, true /* expands */);
+                mUpdateFlingOnLayout = false;
+            }
+        }
+    }
+
+    public class OnConfigurationChangedListener implements
+            PanelView.OnConfigurationChangedListener {
+        @Override
+        public void onConfigurationChanged(Configuration newConfig) {
+            loadDimens();
+        }
+    }
+
+    private void beginJankMonitoring() {
+        if (mInteractionJankMonitor == null) {
+            return;
+        }
+        InteractionJankMonitor.Configuration.Builder builder =
+                InteractionJankMonitor.Configuration.Builder.withView(
+                                InteractionJankMonitor.CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE,
+                                mView)
+                        .setTag(isFullyCollapsed() ? "Expand" : "Collapse");
+        mInteractionJankMonitor.begin(builder);
+    }
+
+    private void endJankMonitoring() {
+        if (mInteractionJankMonitor == null) {
+            return;
+        }
+        InteractionJankMonitor.getInstance().end(
+                InteractionJankMonitor.CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE);
+    }
+
+    private void cancelJankMonitoring() {
+        if (mInteractionJankMonitor == null) {
+            return;
+        }
+        InteractionJankMonitor.getInstance().cancel(
+                InteractionJankMonitor.CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE);
+    }
+
+    protected float getExpansionFraction() {
+        return mExpandedFraction;
+    }
+
+    protected PanelExpansionStateManager getPanelExpansionStateManager() {
+        return mPanelExpansionStateManager;
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeController.java b/packages/SystemUI/src/com/android/systemui/shade/ShadeController.java
new file mode 100644
index 0000000..aa610bd
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeController.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 com.android.systemui.statusbar.StatusBarState;
+import com.android.systemui.statusbar.phone.CentralSurfaces;
+import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
+
+/**
+ * {@link ShadeController} is an abstraction of the work that used to be hard-coded in
+ * {@link CentralSurfaces}. The shade itself represents the concept of the status bar window state,
+ * and can be in multiple states: dozing, locked, showing the bouncer, occluded, etc. All/some of
+ * these are coordinated with {@link StatusBarKeyguardViewManager} via
+ * {@link com.android.systemui.keyguard.KeyguardViewMediator} and others.
+ */
+public interface ShadeController {
+
+    /**
+     * Make our window larger and the panel expanded
+     */
+    void instantExpandNotificationsPanel();
+
+    /** See {@link #animateCollapsePanels(int, boolean)}. */
+    void animateCollapsePanels();
+
+    /** See {@link #animateCollapsePanels(int, boolean)}. */
+    void animateCollapsePanels(int flags);
+
+    /**
+     * Collapse the shade animated, showing the bouncer when on {@link StatusBarState#KEYGUARD} or
+     * dismissing {@link CentralSurfaces} when on {@link StatusBarState#SHADE}.
+     */
+    void animateCollapsePanels(int flags, boolean force);
+
+    /** See {@link #animateCollapsePanels(int, boolean)}. */
+    void animateCollapsePanels(int flags, boolean force, boolean delayed);
+
+    /** See {@link #animateCollapsePanels(int, boolean)}. */
+    void animateCollapsePanels(int flags, boolean force, boolean delayed, float speedUpFactor);
+
+    /**
+     * If the notifications panel is not fully expanded, collapse it animated.
+     *
+     * @return Seems to always return false
+     */
+    boolean closeShadeIfOpen();
+
+    /** Returns whether the shade is currently open or opening. */
+    boolean isShadeOpen();
+
+    /**
+     * Add a runnable for NotificationPanelView to post when the panel is expanded.
+     *
+     * @param action the action to post
+     */
+    void postOnShadeExpanded(Runnable action);
+
+    /**
+     * Add a runnable to be executed after the shade collapses. Post-collapse runnables are
+     * aggregated and run serially.
+     *
+     * @param action the action to execute
+     */
+    void addPostCollapseAction(Runnable action);
+
+    /**
+     * Run all of the runnables added by {@link #addPostCollapseAction}.
+     */
+    void runPostCollapseRunnables();
+
+    /**
+     * Close the shade if it was open
+     *
+     * @return true if the shade was open, else false
+     */
+    boolean collapsePanel();
+
+    /**
+     * If animate is true, does the same as {@link #collapsePanel()}. Otherwise, instantly collapse
+     * the panel. Post collapse runnables will be executed
+     *
+     * @param animate true to animate the collapse, false for instantaneous collapse
+     */
+    void collapsePanel(boolean animate);
+}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeControllerImpl.java b/packages/SystemUI/src/com/android/systemui/shade/ShadeControllerImpl.java
new file mode 100644
index 0000000..f389dd9
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeControllerImpl.java
@@ -0,0 +1,229 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.util.Log;
+import android.view.ViewTreeObserver;
+import android.view.WindowManager;
+
+import com.android.systemui.assist.AssistManager;
+import com.android.systemui.dagger.SysUISingleton;
+import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.statusbar.CommandQueue;
+import com.android.systemui.statusbar.NotificationPresenter;
+import com.android.systemui.statusbar.NotificationShadeWindowController;
+import com.android.systemui.statusbar.StatusBarState;
+import com.android.systemui.statusbar.phone.CentralSurfaces;
+import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
+
+import java.util.ArrayList;
+import java.util.Optional;
+
+import javax.inject.Inject;
+
+import dagger.Lazy;
+
+/** An implementation of {@link ShadeController}. */
+@SysUISingleton
+public class ShadeControllerImpl implements ShadeController {
+
+    private static final String TAG = "ShadeControllerImpl";
+    private static final boolean SPEW = false;
+
+    private final CommandQueue mCommandQueue;
+    private final StatusBarStateController mStatusBarStateController;
+    protected final NotificationShadeWindowController mNotificationShadeWindowController;
+    private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
+    private final int mDisplayId;
+    protected final Lazy<Optional<CentralSurfaces>> mCentralSurfacesOptionalLazy;
+    private final Lazy<AssistManager> mAssistManagerLazy;
+
+    private final ArrayList<Runnable> mPostCollapseRunnables = new ArrayList<>();
+
+    @Inject
+    public ShadeControllerImpl(
+            CommandQueue commandQueue,
+            StatusBarStateController statusBarStateController,
+            NotificationShadeWindowController notificationShadeWindowController,
+            StatusBarKeyguardViewManager statusBarKeyguardViewManager,
+            WindowManager windowManager,
+            Lazy<Optional<CentralSurfaces>> centralSurfacesOptionalLazy,
+            Lazy<AssistManager> assistManagerLazy
+    ) {
+        mCommandQueue = commandQueue;
+        mStatusBarStateController = statusBarStateController;
+        mNotificationShadeWindowController = notificationShadeWindowController;
+        mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
+        mDisplayId = windowManager.getDefaultDisplay().getDisplayId();
+        // TODO: Remove circular reference to CentralSurfaces when possible.
+        mCentralSurfacesOptionalLazy = centralSurfacesOptionalLazy;
+        mAssistManagerLazy = assistManagerLazy;
+    }
+
+    @Override
+    public void instantExpandNotificationsPanel() {
+        // Make our window larger and the panel expanded.
+        getCentralSurfaces().makeExpandedVisible(true /* force */);
+        getNotificationPanelViewController().expand(false /* animate */);
+        mCommandQueue.recomputeDisableFlags(mDisplayId, false /* animate */);
+    }
+
+    @Override
+    public void animateCollapsePanels() {
+        animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE);
+    }
+
+    @Override
+    public void animateCollapsePanels(int flags) {
+        animateCollapsePanels(flags, false /* force */, false /* delayed */,
+                1.0f /* speedUpFactor */);
+    }
+
+    @Override
+    public void animateCollapsePanels(int flags, boolean force) {
+        animateCollapsePanels(flags, force, false /* delayed */, 1.0f /* speedUpFactor */);
+    }
+
+    @Override
+    public void animateCollapsePanels(int flags, boolean force, boolean delayed) {
+        animateCollapsePanels(flags, force, delayed, 1.0f /* speedUpFactor */);
+    }
+
+    @Override
+    public void animateCollapsePanels(int flags, boolean force, boolean delayed,
+            float speedUpFactor) {
+        if (!force && mStatusBarStateController.getState() != StatusBarState.SHADE) {
+            runPostCollapseRunnables();
+            return;
+        }
+        if (SPEW) {
+            Log.d(TAG, "animateCollapse():"
+                    + " mExpandedVisible=" + getCentralSurfaces().isExpandedVisible()
+                    + " flags=" + flags);
+        }
+
+        // TODO(b/62444020): remove when this bug is fixed
+        Log.v(TAG, "NotificationShadeWindow: " + getNotificationShadeWindowView()
+                + " canPanelBeCollapsed(): "
+                + getNotificationPanelViewController().canPanelBeCollapsed());
+        if (getNotificationShadeWindowView() != null
+                && getNotificationPanelViewController().canPanelBeCollapsed()
+                && (flags & CommandQueue.FLAG_EXCLUDE_NOTIFICATION_PANEL) == 0) {
+            // release focus immediately to kick off focus change transition
+            mNotificationShadeWindowController.setNotificationShadeFocusable(false);
+
+            getCentralSurfaces().getNotificationShadeWindowViewController().cancelExpandHelper();
+            getNotificationPanelViewController()
+                    .collapsePanel(true /* animate */, delayed, speedUpFactor);
+        }
+    }
+
+
+    @Override
+    public boolean closeShadeIfOpen() {
+        if (!getNotificationPanelViewController().isFullyCollapsed()) {
+            mCommandQueue.animateCollapsePanels(
+                    CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL, true /* force */);
+            getCentralSurfaces().visibilityChanged(false);
+            mAssistManagerLazy.get().hideAssist();
+        }
+        return false;
+    }
+
+    @Override
+    public boolean isShadeOpen() {
+        NotificationPanelViewController controller =
+                getNotificationPanelViewController();
+        return controller.isExpanding() || controller.isFullyExpanded();
+    }
+
+    @Override
+    public void postOnShadeExpanded(Runnable executable) {
+        getNotificationPanelViewController().addOnGlobalLayoutListener(
+                new ViewTreeObserver.OnGlobalLayoutListener() {
+                    @Override
+                    public void onGlobalLayout() {
+                        if (getCentralSurfaces().getNotificationShadeWindowView()
+                                .isVisibleToUser()) {
+                            getNotificationPanelViewController().removeOnGlobalLayoutListener(this);
+                            getNotificationPanelViewController().getView().post(executable);
+                        }
+                    }
+                });
+    }
+
+    @Override
+    public void addPostCollapseAction(Runnable action) {
+        mPostCollapseRunnables.add(action);
+    }
+
+    @Override
+    public void runPostCollapseRunnables() {
+        ArrayList<Runnable> clonedList = new ArrayList<>(mPostCollapseRunnables);
+        mPostCollapseRunnables.clear();
+        int size = clonedList.size();
+        for (int i = 0; i < size; i++) {
+            clonedList.get(i).run();
+        }
+        mStatusBarKeyguardViewManager.readyForKeyguardDone();
+    }
+
+    @Override
+    public boolean collapsePanel() {
+        if (!getNotificationPanelViewController().isFullyCollapsed()) {
+            // close the shade if it was open
+            animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL,
+                    true /* force */, true /* delayed */);
+            getCentralSurfaces().visibilityChanged(false);
+
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    @Override
+    public void collapsePanel(boolean animate) {
+        if (animate) {
+            boolean willCollapse = collapsePanel();
+            if (!willCollapse) {
+                runPostCollapseRunnables();
+            }
+        } else if (!getPresenter().isPresenterFullyCollapsed()) {
+            getCentralSurfaces().instantCollapseNotificationPanel();
+            getCentralSurfaces().visibilityChanged(false);
+        } else {
+            runPostCollapseRunnables();
+        }
+    }
+
+    private CentralSurfaces getCentralSurfaces() {
+        return mCentralSurfacesOptionalLazy.get().get();
+    }
+
+    private NotificationPresenter getPresenter() {
+        return getCentralSurfaces().getPresenter();
+    }
+
+    protected NotificationShadeWindowView getNotificationShadeWindowView() {
+        return getCentralSurfaces().getNotificationShadeWindowView();
+    }
+
+    private NotificationPanelViewController getNotificationPanelViewController() {
+        return getCentralSurfaces().getPanelController();
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/transition/NoOpOverScroller.kt b/packages/SystemUI/src/com/android/systemui/shade/transition/NoOpOverScroller.kt
new file mode 100644
index 0000000..f4db3ab
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/transition/NoOpOverScroller.kt
@@ -0,0 +1,14 @@
+package com.android.systemui.shade.transition
+
+import javax.inject.Inject
+
+/**
+ * An implementation on [ShadeOverScroller] that does nothing.
+ *
+ * At the moment there is only a concrete implementation [ShadeOverScroller] for split-shade, so
+ * this one is used when we are not in split-shade.
+ */
+class NoOpOverScroller @Inject constructor() : ShadeOverScroller {
+    override fun onPanelStateChanged(newPanelState: Int) {}
+    override fun onDragDownAmountChanged(newDragDownAmount: Float) {}
+}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/transition/ScrimShadeTransitionController.kt b/packages/SystemUI/src/com/android/systemui/shade/transition/ScrimShadeTransitionController.kt
new file mode 100644
index 0000000..afd57da
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/transition/ScrimShadeTransitionController.kt
@@ -0,0 +1,106 @@
+package com.android.systemui.shade.transition
+
+import android.content.res.Configuration
+import android.content.res.Resources
+import android.util.MathUtils.constrain
+import com.android.systemui.R
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dagger.qualifiers.Main
+import com.android.systemui.dump.DumpManager
+import com.android.systemui.statusbar.StatusBarState
+import com.android.systemui.statusbar.SysuiStatusBarStateController
+import com.android.systemui.statusbar.phone.ScrimController
+import com.android.systemui.statusbar.phone.panelstate.PanelExpansionChangeEvent
+import com.android.systemui.statusbar.phone.panelstate.PanelState
+import com.android.systemui.statusbar.phone.panelstate.STATE_OPENING
+import com.android.systemui.statusbar.policy.ConfigurationController
+import com.android.systemui.util.LargeScreenUtils
+import java.io.PrintWriter
+import javax.inject.Inject
+
+/** Controls the scrim properties during the shade expansion transition on non-lockscreen. */
+@SysUISingleton
+class ScrimShadeTransitionController
+@Inject
+constructor(
+    configurationController: ConfigurationController,
+    dumpManager: DumpManager,
+    private val scrimController: ScrimController,
+    @Main private val resources: Resources,
+    private val statusBarStateController: SysuiStatusBarStateController,
+) {
+
+    private var inSplitShade = false
+    private var splitShadeScrimTransitionDistance = 0
+    private var lastExpansionFraction: Float? = null
+    private var lastExpansionEvent: PanelExpansionChangeEvent? = null
+    private var currentPanelState: Int? = null
+
+    init {
+        updateResources()
+        configurationController.addCallback(
+            object : ConfigurationController.ConfigurationListener {
+                override fun onConfigChanged(newConfig: Configuration?) {
+                    updateResources()
+                }
+            })
+        dumpManager.registerDumpable(
+            ScrimShadeTransitionController::class.java.simpleName, this::dump)
+    }
+
+    private fun updateResources() {
+        inSplitShade = LargeScreenUtils.shouldUseSplitNotificationShade(resources)
+        splitShadeScrimTransitionDistance =
+            resources.getDimensionPixelSize(R.dimen.split_shade_scrim_transition_distance)
+    }
+
+    fun onPanelStateChanged(@PanelState state: Int) {
+        currentPanelState = state
+        onStateChanged()
+    }
+
+    fun onPanelExpansionChanged(panelExpansionChangeEvent: PanelExpansionChangeEvent) {
+        lastExpansionEvent = panelExpansionChangeEvent
+        onStateChanged()
+    }
+
+    private fun onStateChanged() {
+        val expansionEvent = lastExpansionEvent ?: return
+        val panelState = currentPanelState
+        val expansionFraction = calculateScrimExpansionFraction(expansionEvent, panelState)
+        scrimController.setRawPanelExpansionFraction(expansionFraction)
+        lastExpansionFraction = expansionFraction
+    }
+
+    private fun calculateScrimExpansionFraction(
+        expansionEvent: PanelExpansionChangeEvent,
+        @PanelState panelState: Int?
+    ): Float {
+        return if (canUseCustomFraction(panelState)) {
+            constrain(expansionEvent.dragDownPxAmount / splitShadeScrimTransitionDistance, 0f, 1f)
+        } else {
+            expansionEvent.fraction
+        }
+    }
+
+    private fun canUseCustomFraction(panelState: Int?) =
+        inSplitShade && isScreenUnlocked() && panelState == STATE_OPENING
+
+    private fun isScreenUnlocked() =
+        statusBarStateController.currentOrUpcomingState == StatusBarState.SHADE
+
+    private fun dump(printWriter: PrintWriter, args: Array<String>) {
+        printWriter.println(
+            """
+                ScrimShadeTransitionController:
+                  Resources:
+                    inSplitShade: $inSplitShade
+                    isScreenUnlocked: ${isScreenUnlocked()}
+                    splitShadeScrimTransitionDistance: $splitShadeScrimTransitionDistance
+                  State:
+                    currentPanelState: $currentPanelState
+                    lastExpansionFraction: $lastExpansionFraction
+                    lastExpansionEvent: $lastExpansionEvent
+            """.trimIndent())
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/transition/ShadeOverScroller.kt b/packages/SystemUI/src/com/android/systemui/shade/transition/ShadeOverScroller.kt
new file mode 100644
index 0000000..6c3a028
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/transition/ShadeOverScroller.kt
@@ -0,0 +1,11 @@
+package com.android.systemui.shade.transition
+
+import com.android.systemui.statusbar.phone.panelstate.PanelState
+
+/** Represents an over scroller for the non-lockscreen shade. */
+interface ShadeOverScroller {
+
+    fun onPanelStateChanged(@PanelState newPanelState: Int)
+
+    fun onDragDownAmountChanged(newDragDownAmount: 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
new file mode 100644
index 0000000..58acfb4
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/transition/ShadeTransitionController.kt
@@ -0,0 +1,107 @@
+package com.android.systemui.shade.transition
+
+import android.content.Context
+import android.content.res.Configuration
+import com.android.systemui.R
+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.statusbar.StatusBarState
+import com.android.systemui.statusbar.SysuiStatusBarStateController
+import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
+import com.android.systemui.statusbar.phone.panelstate.PanelExpansionChangeEvent
+import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager
+import com.android.systemui.statusbar.phone.panelstate.PanelState
+import com.android.systemui.statusbar.phone.panelstate.panelStateToString
+import com.android.systemui.statusbar.policy.ConfigurationController
+import java.io.PrintWriter
+import javax.inject.Inject
+
+/** Controls the shade expansion transition on non-lockscreen. */
+@SysUISingleton
+class ShadeTransitionController
+@Inject
+constructor(
+    configurationController: ConfigurationController,
+    panelExpansionStateManager: PanelExpansionStateManager,
+    dumpManager: DumpManager,
+    private val context: Context,
+    private val splitShadeOverScrollerFactory: SplitShadeOverScroller.Factory,
+    private val noOpOverScroller: NoOpOverScroller,
+    private val scrimShadeTransitionController: ScrimShadeTransitionController,
+    private val statusBarStateController: SysuiStatusBarStateController,
+) {
+
+    lateinit var notificationPanelViewController: NotificationPanelViewController
+    lateinit var notificationStackScrollLayoutController: NotificationStackScrollLayoutController
+    lateinit var qs: QS
+
+    private var inSplitShade = false
+    private var currentPanelState: Int? = null
+    private var lastPanelExpansionChangeEvent: PanelExpansionChangeEvent? = null
+
+    private val splitShadeOverScroller by lazy {
+        splitShadeOverScrollerFactory.create({ qs }, { notificationStackScrollLayoutController })
+    }
+    private val shadeOverScroller: ShadeOverScroller
+        get() =
+            if (inSplitShade && isScreenUnlocked() && propertiesInitialized()) {
+                splitShadeOverScroller
+            } else {
+                noOpOverScroller
+            }
+
+    init {
+        updateResources()
+        configurationController.addCallback(
+            object : ConfigurationController.ConfigurationListener {
+                override fun onConfigChanged(newConfig: Configuration?) {
+                    updateResources()
+                }
+            })
+        panelExpansionStateManager.addExpansionListener(this::onPanelExpansionChanged)
+        panelExpansionStateManager.addStateListener(this::onPanelStateChanged)
+        dumpManager.registerDumpable("ShadeTransitionController") { printWriter, _ ->
+            dump(printWriter)
+        }
+    }
+
+    private fun updateResources() {
+        inSplitShade = context.resources.getBoolean(R.bool.config_use_split_notification_shade)
+    }
+
+    private fun onPanelStateChanged(@PanelState state: Int) {
+        currentPanelState = state
+        shadeOverScroller.onPanelStateChanged(state)
+        scrimShadeTransitionController.onPanelStateChanged(state)
+    }
+
+    private fun onPanelExpansionChanged(event: PanelExpansionChangeEvent) {
+        lastPanelExpansionChangeEvent = event
+        shadeOverScroller.onDragDownAmountChanged(event.dragDownPxAmount)
+        scrimShadeTransitionController.onPanelExpansionChanged(event)
+    }
+
+    private fun propertiesInitialized() =
+        this::qs.isInitialized &&
+            this::notificationPanelViewController.isInitialized &&
+            this::notificationStackScrollLayoutController.isInitialized
+
+    private fun dump(pw: PrintWriter) {
+        pw.println(
+            """
+            ShadeTransitionController:
+                inSplitShade: $inSplitShade
+                isScreenUnlocked: ${isScreenUnlocked()}
+                currentPanelState: ${currentPanelState?.panelStateToString()}
+                lastPanelExpansionChangeEvent: $lastPanelExpansionChangeEvent
+                qs.isInitialized: ${this::qs.isInitialized}
+                npvc.isInitialized: ${this::notificationPanelViewController.isInitialized}
+                nssl.isInitialized: ${this::notificationStackScrollLayoutController.isInitialized}
+            """.trimIndent())
+    }
+
+    private fun isScreenUnlocked() =
+        statusBarStateController.currentOrUpcomingState == StatusBarState.SHADE
+}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/transition/SplitShadeOverScroller.kt b/packages/SystemUI/src/com/android/systemui/shade/transition/SplitShadeOverScroller.kt
new file mode 100644
index 0000000..204dd3c
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/transition/SplitShadeOverScroller.kt
@@ -0,0 +1,150 @@
+package com.android.systemui.shade.transition
+
+import android.animation.Animator
+import android.animation.ValueAnimator
+import android.content.Context
+import android.content.res.Configuration
+import android.util.MathUtils
+import com.android.internal.annotations.VisibleForTesting
+import com.android.systemui.R
+import com.android.systemui.animation.Interpolators
+import com.android.systemui.dump.DumpManager
+import com.android.systemui.plugins.qs.QS
+import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
+import com.android.systemui.statusbar.phone.ScrimController
+import com.android.systemui.statusbar.phone.panelstate.PanelState
+import com.android.systemui.statusbar.phone.panelstate.STATE_CLOSED
+import com.android.systemui.statusbar.phone.panelstate.STATE_OPENING
+import com.android.systemui.statusbar.policy.ConfigurationController
+import dagger.assisted.Assisted
+import dagger.assisted.AssistedFactory
+import dagger.assisted.AssistedInject
+import java.io.PrintWriter
+
+class SplitShadeOverScroller
+@AssistedInject
+constructor(
+    configurationController: ConfigurationController,
+    dumpManager: DumpManager,
+    private val context: Context,
+    private val scrimController: ScrimController,
+    @Assisted private val qSProvider: () -> QS,
+    @Assisted private val nsslControllerProvider: () -> NotificationStackScrollLayoutController
+) : ShadeOverScroller {
+
+    private var releaseOverScrollDuration = 0L
+    private var maxOverScrollAmount = 0
+    private var previousOverscrollAmount = 0
+    private var dragDownAmount: Float = 0f
+    @PanelState private var panelState: Int = STATE_CLOSED
+    private var releaseOverScrollAnimator: Animator? = null
+
+    private val qS: QS
+        get() = qSProvider()
+
+    private val nsslController: NotificationStackScrollLayoutController
+        get() = nsslControllerProvider()
+
+    init {
+        updateResources()
+        configurationController.addCallback(
+            object : ConfigurationController.ConfigurationListener {
+                override fun onConfigChanged(newConfig: Configuration?) {
+                    updateResources()
+                }
+            })
+        dumpManager.registerDumpable("SplitShadeOverScroller") { printWriter, _ ->
+            dump(printWriter)
+        }
+    }
+
+    private fun updateResources() {
+        val resources = context.resources
+        maxOverScrollAmount = resources.getDimensionPixelSize(R.dimen.shade_max_over_scroll_amount)
+        releaseOverScrollDuration =
+            resources.getInteger(R.integer.lockscreen_shade_over_scroll_release_duration).toLong()
+    }
+
+    override fun onPanelStateChanged(@PanelState newPanelState: Int) {
+        if (shouldReleaseOverscroll(previousState = panelState, newState = newPanelState)) {
+            releaseOverScroll()
+        }
+        panelState = newPanelState
+    }
+
+    override fun onDragDownAmountChanged(newDragDownAmount: Float) {
+        if (dragDownAmount == newDragDownAmount) {
+            return
+        }
+        dragDownAmount = newDragDownAmount
+        if (shouldOverscroll()) {
+            overScroll(newDragDownAmount)
+        }
+    }
+
+    private fun shouldOverscroll() = panelState == STATE_OPENING
+
+    private fun shouldReleaseOverscroll(@PanelState previousState: Int, @PanelState newState: Int) =
+        previousState == STATE_OPENING && newState != STATE_OPENING
+
+    private fun overScroll(dragDownAmount: Float) {
+        val overscrollAmount: Int = calculateOverscrollAmount(dragDownAmount)
+        applyOverscroll(overscrollAmount)
+        previousOverscrollAmount = overscrollAmount
+    }
+
+    private fun calculateOverscrollAmount(dragDownAmount: Float): Int {
+        val fullHeight: Int = nsslController.height
+        val fullHeightProgress: Float = MathUtils.saturate(dragDownAmount / fullHeight)
+        return (fullHeightProgress * maxOverScrollAmount).toInt()
+    }
+
+    private fun applyOverscroll(overscrollAmount: Int) {
+        qS.setOverScrollAmount(overscrollAmount)
+        scrimController.setNotificationsOverScrollAmount(overscrollAmount)
+        nsslController.setOverScrollAmount(overscrollAmount)
+    }
+
+    private fun releaseOverScroll() {
+        val animator = ValueAnimator.ofInt(previousOverscrollAmount, 0)
+        animator.addUpdateListener {
+            val overScrollAmount = it.animatedValue as Int
+            qS.setOverScrollAmount(overScrollAmount)
+            scrimController.setNotificationsOverScrollAmount(overScrollAmount)
+            nsslController.setOverScrollAmount(overScrollAmount)
+        }
+        animator.interpolator = Interpolators.STANDARD
+        animator.duration = releaseOverScrollDuration
+        animator.start()
+        releaseOverScrollAnimator = animator
+        previousOverscrollAmount = 0
+    }
+
+    @VisibleForTesting
+    internal fun finishAnimations() {
+        releaseOverScrollAnimator?.end()
+        releaseOverScrollAnimator = null
+    }
+
+    private fun dump(pw: PrintWriter) {
+        pw.println(
+            """
+            SplitShadeOverScroller:
+                Resources:
+                    releaseOverScrollDuration: $releaseOverScrollDuration
+                    maxOverScrollAmount: $maxOverScrollAmount
+                State:
+                    previousOverscrollAmount: $previousOverscrollAmount
+                    dragDownAmount: $dragDownAmount
+                    panelState: $panelState
+            """.trimIndent())
+    }
+
+    @AssistedFactory
+    fun interface Factory {
+        fun create(
+            qSProvider: () -> QS,
+            nsslControllerProvider: () -> NotificationStackScrollLayoutController
+        ): SplitShadeOverScroller
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/smartspace/dagger/SmartspaceModule.kt b/packages/SystemUI/src/com/android/systemui/smartspace/dagger/SmartspaceModule.kt
index 1b74ac3..b02a45a 100644
--- a/packages/SystemUI/src/com/android/systemui/smartspace/dagger/SmartspaceModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/smartspace/dagger/SmartspaceModule.kt
@@ -18,7 +18,7 @@
 import com.android.systemui.plugins.BcSmartspaceDataPlugin
 import com.android.systemui.smartspace.SmartspacePrecondition
 import com.android.systemui.smartspace.SmartspaceTargetFilter
-import com.android.systemui.smartspace.filters.LockscreenTargetFilter
+import com.android.systemui.smartspace.filters.LockscreenAndDreamTargetFilter
 import com.android.systemui.smartspace.preconditions.LockscreenPrecondition
 import dagger.Binds
 import dagger.BindsOptionalOf
@@ -61,7 +61,7 @@
     @Binds
     @Named(LOCKSCREEN_SMARTSPACE_TARGET_FILTER)
     abstract fun provideLockscreenSmartspaceTargetFilter(
-        filter: LockscreenTargetFilter?
+        filter: LockscreenAndDreamTargetFilter?
     ): SmartspaceTargetFilter?
 
     @Binds
@@ -69,4 +69,4 @@
     abstract fun bindSmartspacePrecondition(
         lockscreenPrecondition: LockscreenPrecondition?
     ): SmartspacePrecondition?
-}
\ No newline at end of file
+}
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 d3ae198..236ba1f 100644
--- a/packages/SystemUI/src/com/android/systemui/smartspace/dagger/SmartspaceViewComponent.kt
+++ b/packages/SystemUI/src/com/android/systemui/smartspace/dagger/SmartspaceViewComponent.kt
@@ -56,6 +56,8 @@
         ):
                 BcSmartspaceDataPlugin.SmartspaceView {
             val ssView = plugin.getView(parent)
+            // Currently, this is only used to provide SmartspaceView on Dream surface.
+            ssView.setIsDreaming(true)
             ssView.registerDataProvider(plugin)
 
             ssView.setIntentStarter(object : BcSmartspaceDataPlugin.IntentStarter {
@@ -81,4 +83,4 @@
             return ssView
         }
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/smartspace/filters/LockscreenAndDreamTargetFilter.kt b/packages/SystemUI/src/com/android/systemui/smartspace/filters/LockscreenAndDreamTargetFilter.kt
new file mode 100644
index 0000000..aa4cf75
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/smartspace/filters/LockscreenAndDreamTargetFilter.kt
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.smartspace.filters
+
+import android.app.smartspace.SmartspaceTarget
+import android.content.ContentResolver
+import android.content.Context
+import android.database.ContentObserver
+import android.net.Uri
+import android.os.Handler
+import android.os.UserHandle
+import android.provider.Settings
+import com.android.systemui.dagger.qualifiers.Main
+import com.android.systemui.settings.UserTracker
+import com.android.systemui.smartspace.SmartspaceTargetFilter
+import com.android.systemui.util.concurrency.Execution
+import com.android.systemui.util.settings.SecureSettings
+import java.util.concurrent.Executor
+import javax.inject.Inject
+
+/**
+ * {@link SmartspaceTargetFilter} for smartspace targets that show above the lockscreen and dreams.
+ */
+class LockscreenAndDreamTargetFilter @Inject constructor(
+    private val secureSettings: SecureSettings,
+    private val userTracker: UserTracker,
+    private val execution: Execution,
+    @Main private val handler: Handler,
+    private val contentResolver: ContentResolver,
+    @Main private val uiExecutor: Executor
+) : SmartspaceTargetFilter {
+    private var listeners: MutableSet<SmartspaceTargetFilter.Listener> = mutableSetOf()
+    private var showSensitiveContentForCurrentUser = false
+        set(value) {
+            val existing = field
+            field = value
+            if (existing != field) {
+                listeners.forEach { it.onCriteriaChanged() }
+            }
+        }
+    private var showSensitiveContentForManagedUser = false
+        set(value) {
+            val existing = field
+            field = value
+            if (existing != field) {
+                listeners.forEach { it.onCriteriaChanged() }
+            }
+        }
+
+    private val settingsObserver = object : ContentObserver(handler) {
+        override fun onChange(selfChange: Boolean, uri: Uri?) {
+            execution.assertIsMainThread()
+            updateUserContentSettings()
+        }
+    }
+
+    private var managedUserHandle: UserHandle? = null
+
+    override fun addListener(listener: SmartspaceTargetFilter.Listener) {
+        listeners.add(listener)
+
+        if (listeners.size != 1) {
+            return
+        }
+
+        userTracker.addCallback(userTrackerCallback, uiExecutor)
+
+        contentResolver.registerContentObserver(
+                secureSettings.getUriFor(Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS),
+                true,
+                settingsObserver,
+                UserHandle.USER_ALL
+        )
+
+        updateUserContentSettings()
+    }
+
+    override fun removeListener(listener: SmartspaceTargetFilter.Listener) {
+        listeners.remove(listener)
+
+        if (listeners.isNotEmpty()) {
+            return
+        }
+
+        userTracker.removeCallback(userTrackerCallback)
+        contentResolver.unregisterContentObserver(settingsObserver)
+    }
+
+    override fun filterSmartspaceTarget(t: SmartspaceTarget): Boolean {
+        return when (t.userHandle) {
+            userTracker.userHandle -> {
+                !t.isSensitive || showSensitiveContentForCurrentUser
+            }
+            managedUserHandle -> {
+                // Really, this should be "if this managed profile is associated with the current
+                // active user", but we don't have a good way to check that, so instead we cheat:
+                // Only the primary user can have an associated managed profile, so only show
+                // content for the managed profile if the primary user is active
+                userTracker.userHandle.identifier == UserHandle.USER_SYSTEM &&
+                        (!t.isSensitive || showSensitiveContentForManagedUser)
+            }
+            else -> {
+                false
+            }
+        }
+    }
+
+    private val userTrackerCallback = object : UserTracker.Callback {
+        override fun onUserChanged(newUser: Int, userContext: Context) {
+            execution.assertIsMainThread()
+            updateUserContentSettings()
+        }
+    }
+
+    private fun getWorkProfileUser(): UserHandle? {
+        for (userInfo in userTracker.userProfiles) {
+            if (userInfo.isManagedProfile) {
+                return userInfo.userHandle
+            }
+        }
+        return null
+    }
+
+    private fun updateUserContentSettings() {
+        val setting = Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS
+
+        showSensitiveContentForCurrentUser =
+                secureSettings.getIntForUser(setting, 0, userTracker.userId) == 1
+
+        managedUserHandle = getWorkProfileUser()
+        val managedId = managedUserHandle?.identifier
+        if (managedId != null) {
+            showSensitiveContentForManagedUser =
+                    secureSettings.getIntForUser(setting, 0, managedId) == 1
+        }
+
+        listeners.forEach { it.onCriteriaChanged() }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/smartspace/filters/LockscreenTargetFilter.kt b/packages/SystemUI/src/com/android/systemui/smartspace/filters/LockscreenTargetFilter.kt
deleted file mode 100644
index 6ad4901..0000000
--- a/packages/SystemUI/src/com/android/systemui/smartspace/filters/LockscreenTargetFilter.kt
+++ /dev/null
@@ -1,152 +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.systemui.smartspace.filters
-
-import android.app.smartspace.SmartspaceTarget
-import android.content.ContentResolver
-import android.content.Context
-import android.database.ContentObserver
-import android.net.Uri
-import android.os.Handler
-import android.os.UserHandle
-import android.provider.Settings
-import com.android.systemui.dagger.qualifiers.Main
-import com.android.systemui.settings.UserTracker
-import com.android.systemui.smartspace.SmartspaceTargetFilter
-import com.android.systemui.util.concurrency.Execution
-import com.android.systemui.util.settings.SecureSettings
-import java.util.concurrent.Executor
-import javax.inject.Inject
-
-/**
- * {@link SmartspaceTargetFilter} for smartspace targets that show above the lockscreen.
- */
-class LockscreenTargetFilter @Inject constructor(
-    private val secureSettings: SecureSettings,
-    private val userTracker: UserTracker,
-    private val execution: Execution,
-    @Main private val handler: Handler,
-    private val contentResolver: ContentResolver,
-    @Main private val uiExecutor: Executor
-) : SmartspaceTargetFilter {
-    private var listeners: MutableSet<SmartspaceTargetFilter.Listener> = mutableSetOf()
-    private var showSensitiveContentForCurrentUser = false
-        set(value) {
-            val existing = field
-            field = value
-            if (existing != field) {
-                listeners.forEach { it.onCriteriaChanged() }
-            }
-        }
-    private var showSensitiveContentForManagedUser = false
-        set(value) {
-            val existing = field
-            field = value
-            if (existing != field) {
-                listeners.forEach { it.onCriteriaChanged() }
-            }
-        }
-
-    private val settingsObserver = object : ContentObserver(handler) {
-        override fun onChange(selfChange: Boolean, uri: Uri?) {
-            execution.assertIsMainThread()
-            updateUserContentSettings()
-        }
-    }
-
-    private var managedUserHandle: UserHandle? = null
-
-    override fun addListener(listener: SmartspaceTargetFilter.Listener) {
-        listeners.add(listener)
-
-        if (listeners.size != 1) {
-            return
-        }
-
-        userTracker.addCallback(userTrackerCallback, uiExecutor)
-
-        contentResolver.registerContentObserver(
-                secureSettings.getUriFor(Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS),
-                true,
-                settingsObserver,
-                UserHandle.USER_ALL
-        )
-
-        updateUserContentSettings()
-    }
-
-    override fun removeListener(listener: SmartspaceTargetFilter.Listener) {
-        listeners.remove(listener)
-
-        if (listeners.isNotEmpty()) {
-            return
-        }
-
-        userTracker.removeCallback(userTrackerCallback)
-        contentResolver.unregisterContentObserver(settingsObserver)
-    }
-
-    override fun filterSmartspaceTarget(t: SmartspaceTarget): Boolean {
-        return when (t.userHandle) {
-            userTracker.userHandle -> {
-                !t.isSensitive || showSensitiveContentForCurrentUser
-            }
-            managedUserHandle -> {
-                // Really, this should be "if this managed profile is associated with the current
-                // active user", but we don't have a good way to check that, so instead we cheat:
-                // Only the primary user can have an associated managed profile, so only show
-                // content for the managed profile if the primary user is active
-                userTracker.userHandle.identifier == UserHandle.USER_SYSTEM &&
-                        (!t.isSensitive || showSensitiveContentForManagedUser)
-            }
-            else -> {
-                false
-            }
-        }
-    }
-
-    private val userTrackerCallback = object : UserTracker.Callback {
-        override fun onUserChanged(newUser: Int, userContext: Context) {
-            execution.assertIsMainThread()
-            updateUserContentSettings()
-        }
-    }
-
-    private fun getWorkProfileUser(): UserHandle? {
-        for (userInfo in userTracker.userProfiles) {
-            if (userInfo.isManagedProfile) {
-                return userInfo.userHandle
-            }
-        }
-        return null
-    }
-
-    private fun updateUserContentSettings() {
-        val setting = Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS
-
-        showSensitiveContentForCurrentUser =
-                secureSettings.getIntForUser(setting, 0, userTracker.userId) == 1
-
-        managedUserHandle = getWorkProfileUser()
-        val managedId = managedUserHandle?.identifier
-        if (managedId != null) {
-            showSensitiveContentForManagedUser =
-                    secureSettings.getIntForUser(setting, 0, managedId) == 1
-        }
-
-        listeners.forEach { it.onCriteriaChanged() }
-    }
-}
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/AlertingNotificationManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/AlertingNotificationManager.java
index 6cfbb43..07455a0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/AlertingNotificationManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/AlertingNotificationManager.java
@@ -66,7 +66,7 @@
      * @param entry entry to show
      */
     public void showNotification(@NonNull NotificationEntry entry) {
-        mLogger.logShowNotification(entry.getKey());
+        mLogger.logShowNotification(entry);
         addAlertEntry(entry);
         updateNotification(entry.getKey(), true /* alert */);
         entry.setInterruption();
@@ -320,7 +320,7 @@
          * @param updatePostTime whether or not to refresh the post time
          */
         public void updateEntry(boolean updatePostTime) {
-            mLogger.logUpdateEntry(mEntry.getKey(), updatePostTime);
+            mLogger.logUpdateEntry(mEntry, updatePostTime);
 
             long currentTime = mClock.currentTimeMillis();
             mEarliestRemovaltime = currentTime + mMinimumDisplayTime;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
index cc3121d..e992440 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
@@ -66,6 +66,7 @@
 import com.android.internal.statusbar.IAddTileResultCallback;
 import com.android.internal.statusbar.IStatusBar;
 import com.android.internal.statusbar.IUndoMediaTransferCallback;
+import com.android.internal.statusbar.LetterboxDetails;
 import com.android.internal.statusbar.StatusBarIcon;
 import com.android.internal.util.GcUtils;
 import com.android.internal.view.AppearanceRegion;
@@ -361,7 +362,7 @@
         default void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
                 AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
                 @Behavior int behavior, InsetsVisibilities requestedVisibilities,
-                String packageName) { }
+                String packageName, LetterboxDetails[] letterboxDetails) { }
 
         /**
          * @see IStatusBar#showTransient(int, int[], boolean).
@@ -1090,7 +1091,8 @@
     @Override
     public void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
             AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
-            @Behavior int behavior, InsetsVisibilities requestedVisibilities, String packageName) {
+            @Behavior int behavior, InsetsVisibilities requestedVisibilities, String packageName,
+            LetterboxDetails[] letterboxDetails) {
         synchronized (mLock) {
             SomeArgs args = SomeArgs.obtain();
             args.argi1 = displayId;
@@ -1100,6 +1102,7 @@
             args.argi4 = behavior;
             args.arg2 = requestedVisibilities;
             args.arg3 = packageName;
+            args.arg4 = letterboxDetails;
             mHandler.obtainMessage(MSG_SYSTEM_BAR_CHANGED, args).sendToTarget();
         }
     }
@@ -1561,7 +1564,8 @@
                     for (int i = 0; i < mCallbacks.size(); i++) {
                         mCallbacks.get(i).onSystemBarAttributesChanged(args.argi1, args.argi2,
                                 (AppearanceRegion[]) args.arg1, args.argi3 == 1, args.argi4,
-                                (InsetsVisibilities) args.arg2, (String) args.arg3);
+                                (InsetsVisibilities) args.arg2, (String) args.arg3,
+                                (LetterboxDetails[]) args.arg4);
                     }
                     args.recycle();
                     break;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
index 9e02909..ca14728 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
@@ -900,16 +900,36 @@
                 mStatusBarKeyguardViewManager.showBouncerMessage(message, mInitialTextColorState);
             }
         } else {
-            if (!mAccessibilityManager.isEnabled()
-                    && !mAccessibilityManager.isTouchExplorationEnabled()
-                    && mKeyguardUpdateMonitor.isUdfpsSupported()
-                    && mKeyguardUpdateMonitor.getUserCanSkipBouncer(
-                    KeyguardUpdateMonitor.getCurrentUser())) {
-                final int stringId = mKeyguardUpdateMonitor.getIsFaceAuthenticated()
-                        ? R.string.keyguard_face_successful_unlock_press
-                        : R.string.keyguard_unlock_press;
-                showBiometricMessage(mContext.getString(stringId));
+            final boolean canSkipBouncer = mKeyguardUpdateMonitor.getUserCanSkipBouncer(
+                    KeyguardUpdateMonitor.getCurrentUser());
+            if (canSkipBouncer) {
+                final boolean faceAuthenticated = mKeyguardUpdateMonitor.getIsFaceAuthenticated();
+                final boolean udfpsSupported = mKeyguardUpdateMonitor.isUdfpsSupported();
+                final boolean a11yEnabled = mAccessibilityManager.isEnabled()
+                        || mAccessibilityManager.isTouchExplorationEnabled();
+                if (udfpsSupported && faceAuthenticated) { // co-ex
+                    if (a11yEnabled) {
+                        showBiometricMessage(mContext.getString(
+                                R.string.keyguard_face_successful_unlock_swipe));
+                    } else {
+                        showBiometricMessage(mContext.getString(
+                                R.string.keyguard_face_successful_unlock_press));
+                    }
+                } else if (faceAuthenticated) { // face-only
+                    showBiometricMessage(mContext.getString(
+                            R.string.keyguard_face_successful_unlock_swipe));
+                } else if (udfpsSupported) { // udfps-only
+                    if (a11yEnabled) {
+                        showBiometricMessage(mContext.getString(R.string.keyguard_unlock));
+                    } else {
+                        showBiometricMessage(mContext.getString(
+                                R.string.keyguard_unlock_press));
+                    }
+                } else { // no security or unlocked by a trust agent
+                    showBiometricMessage(mContext.getString(R.string.keyguard_unlock));
+                }
             } else {
+                // suggest swiping up for the primary authentication bouncer
                 showBiometricMessage(mContext.getString(R.string.keyguard_unlock));
             }
         }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeKeyguardTransitionController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeKeyguardTransitionController.kt
index 01eb444..886ad68 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.MediaHierarchyManager
-import com.android.systemui.statusbar.phone.NotificationPanelViewController
+import com.android.systemui.shade.NotificationPanelViewController
 import com.android.systemui.statusbar.policy.ConfigurationController
 import dagger.assisted.Assisted
 import dagger.assisted.AssistedFactory
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt
index c1ea6bf..74d8f1b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt
@@ -29,6 +29,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.statusbar.notification.collection.NotificationEntry
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
 import com.android.systemui.statusbar.notification.row.ExpandableView
@@ -37,7 +38,6 @@
 import com.android.systemui.statusbar.phone.CentralSurfaces
 import com.android.systemui.statusbar.phone.KeyguardBypassController
 import com.android.systemui.statusbar.phone.LSShadeTransitionLogger
-import com.android.systemui.statusbar.phone.NotificationPanelViewController
 import com.android.systemui.statusbar.policy.ConfigurationController
 import com.android.systemui.util.LargeScreenUtils
 import java.io.PrintWriter
@@ -178,7 +178,7 @@
     val touchHelper = DragDownHelper(falsingManager, falsingCollector, this, context)
 
     private val splitShadeOverScroller: SplitShadeLockScreenOverScroller by lazy {
-        splitShadeOverScrollerFactory.create(qS, nsslController)
+        splitShadeOverScrollerFactory.create({ qS }, { nsslController })
     }
 
     private val phoneShadeOverScroller: SingleShadeLockScreenOverScroller by lazy {
@@ -911,4 +911,4 @@
         host.getLocationOnScreen(temp2)
         return expandCallback.getChildAtRawPosition(x + temp2[0], y + temp2[1])
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationListener.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationListener.java
index 68d35f9..824d3a3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationListener.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationListener.java
@@ -34,6 +34,8 @@
 import com.android.systemui.shared.plugins.PluginManager;
 import com.android.systemui.statusbar.dagger.CentralSurfacesModule;
 import com.android.systemui.statusbar.notification.collection.NotifCollection;
+import com.android.systemui.statusbar.notification.collection.PipelineDumpable;
+import com.android.systemui.statusbar.notification.collection.PipelineDumper;
 import com.android.systemui.statusbar.phone.CentralSurfaces;
 import com.android.systemui.statusbar.phone.NotificationListenerWithPlugins;
 import com.android.systemui.util.time.SystemClock;
@@ -52,7 +54,8 @@
  */
 @SysUISingleton
 @SuppressLint("OverrideAbstract")
-public class NotificationListener extends NotificationListenerWithPlugins {
+public class NotificationListener extends NotificationListenerWithPlugins implements
+        PipelineDumpable {
     private static final String TAG = "NotificationListener";
     private static final boolean DEBUG = CentralSurfaces.DEBUG;
     private static final long MAX_RANKING_DELAY_MILLIS = 500L;
@@ -255,6 +258,11 @@
         }
     }
 
+    @Override
+    public void dumpPipeline(@NonNull PipelineDumper d) {
+        d.dump("notificationHandlers", mNotificationHandlers);
+    }
+
     private static Ranking getRankingOrTemporaryStandIn(RankingMap rankingMap, String key) {
         Ranking ranking = new Ranking();
         if (!rankingMap.getRanking(key, ranking)) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java
index 1ce05ec..c900c5a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationMediaManager.java
@@ -36,7 +36,6 @@
 import android.media.session.PlaybackState;
 import android.os.AsyncTask;
 import android.os.Trace;
-import android.service.notification.NotificationListenerService;
 import android.service.notification.NotificationStats;
 import android.service.notification.StatusBarNotification;
 import android.util.ArraySet;
@@ -44,7 +43,6 @@
 import android.view.View;
 import android.widget.ImageView;
 
-import com.android.internal.statusbar.NotificationVisibility;
 import com.android.systemui.Dependency;
 import com.android.systemui.Dumpable;
 import com.android.systemui.animation.Interpolators;
@@ -56,9 +54,6 @@
 import com.android.systemui.media.SmartspaceMediaData;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.statusbar.dagger.CentralSurfacesModule;
-import com.android.systemui.statusbar.notification.NotifPipelineFlags;
-import com.android.systemui.statusbar.notification.NotificationEntryListener;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.collection.NotifCollection;
 import com.android.systemui.statusbar.notification.collection.NotifPipeline;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
@@ -112,11 +107,9 @@
     }
 
     private final NotificationVisibilityProvider mVisibilityProvider;
-    private final NotificationEntryManager mEntryManager;
     private final MediaDataManager mMediaDataManager;
     private final NotifPipeline mNotifPipeline;
     private final NotifCollection mNotifCollection;
-    private final boolean mUsingNotifPipeline;
 
     @Nullable
     private Lazy<NotificationShadeWindowController> mNotificationShadeWindowController;
@@ -180,12 +173,10 @@
             Lazy<Optional<CentralSurfaces>> centralSurfacesOptionalLazy,
             Lazy<NotificationShadeWindowController> notificationShadeWindowController,
             NotificationVisibilityProvider visibilityProvider,
-            NotificationEntryManager notificationEntryManager,
             MediaArtworkProcessor mediaArtworkProcessor,
             KeyguardBypassController keyguardBypassController,
             NotifPipeline notifPipeline,
             NotifCollection notifCollection,
-            NotifPipelineFlags notifPipelineFlags,
             @Main DelayableExecutor mainExecutor,
             MediaDataManager mediaDataManager,
             DumpManager dumpManager) {
@@ -197,19 +188,12 @@
         mCentralSurfacesOptionalLazy = centralSurfacesOptionalLazy;
         mNotificationShadeWindowController = notificationShadeWindowController;
         mVisibilityProvider = visibilityProvider;
-        mEntryManager = notificationEntryManager;
         mMainExecutor = mainExecutor;
         mMediaDataManager = mediaDataManager;
         mNotifPipeline = notifPipeline;
         mNotifCollection = notifCollection;
 
-        if (!notifPipelineFlags.isNewPipelineEnabled()) {
-            setupNEM();
-            mUsingNotifPipeline = false;
-        } else {
-            setupNotifPipeline();
-            mUsingNotifPipeline = true;
-        }
+        setupNotifPipeline();
 
         dumpManager.registerDumpable(this);
     }
@@ -273,79 +257,6 @@
         });
     }
 
-    private void setupNEM() {
-        mEntryManager.addNotificationEntryListener(new NotificationEntryListener() {
-
-            @Override
-            public void onPendingEntryAdded(NotificationEntry entry) {
-                mMediaDataManager.onNotificationAdded(entry.getKey(), entry.getSbn());
-            }
-
-            @Override
-            public void onPreEntryUpdated(NotificationEntry entry) {
-                mMediaDataManager.onNotificationAdded(entry.getKey(), entry.getSbn());
-            }
-
-            @Override
-            public void onEntryInflated(NotificationEntry entry) {
-                findAndUpdateMediaNotifications();
-            }
-
-            @Override
-            public void onEntryReinflated(NotificationEntry entry) {
-                findAndUpdateMediaNotifications();
-            }
-
-            @Override
-            public void onEntryRemoved(
-                    @NonNull NotificationEntry entry,
-                    @Nullable NotificationVisibility visibility,
-                    boolean removedByUser,
-                    int reason) {
-                removeEntry(entry);
-            }
-        });
-
-        // Pending entries are never inflated, and will never generate a call to onEntryRemoved().
-        // This can happen when notifications are added and canceled before inflation. Add this
-        // separate listener for cleanup, since media inflation occurs onPendingEntryAdded().
-        mEntryManager.addCollectionListener(new NotifCollectionListener() {
-            @Override
-            public void onEntryCleanUp(@NonNull NotificationEntry entry) {
-                removeEntry(entry);
-            }
-        });
-
-        mMediaDataManager.addListener(new MediaDataManager.Listener() {
-            @Override
-            public void onMediaDataLoaded(@NonNull String key,
-                    @Nullable String oldKey, @NonNull MediaData data, boolean immediately,
-                    int receivedSmartspaceCardLatency, boolean isSsReactivated) {
-            }
-
-            @Override
-            public void onSmartspaceMediaDataLoaded(@NonNull String key,
-                    @NonNull SmartspaceMediaData data, boolean shouldPrioritize) {
-
-            }
-
-            @Override
-            public void onMediaDataRemoved(@NonNull String key) {
-                NotificationEntry entry = mEntryManager.getPendingOrActiveNotif(key);
-                if (entry != null) {
-                    // TODO(b/160713608): "removing" this notification won't happen and
-                    //  won't send the 'deleteIntent' if the notification is ongoing.
-                    mEntryManager.performRemoveNotification(entry.getSbn(),
-                            getDismissedByUserStats(entry),
-                            NotificationListenerService.REASON_CANCEL);
-                }
-            }
-
-            @Override
-            public void onSmartspaceMediaDataRemoved(@NonNull String key, boolean immediately) {}
-        });
-    }
-
     private DismissedByUserStats getDismissedByUserStats(NotificationEntry entry) {
         return new DismissedByUserStats(
                 NotificationStats.DISMISSAL_SHADE, // Add DISMISSAL_MEDIA?
@@ -401,22 +312,10 @@
         if (mMediaNotificationKey == null) {
             return null;
         }
-        if (mUsingNotifPipeline) {
-            return Optional.ofNullable(mNotifPipeline.getEntry(mMediaNotificationKey))
-                .map(entry -> entry.getIcons().getShelfIcon())
-                .map(StatusBarIconView::getSourceIcon)
-                .orElse(null);
-        } else {
-            synchronized (mEntryManager) {
-                NotificationEntry entry = mEntryManager
-                    .getActiveNotificationUnfiltered(mMediaNotificationKey);
-                if (entry == null || entry.getIcons().getShelfIcon() == null) {
-                    return null;
-                }
-
-                return entry.getIcons().getShelfIcon().getSourceIcon();
-            }
-        }
+        return Optional.ofNullable(mNotifPipeline.getEntry(mMediaNotificationKey))
+            .map(entry -> entry.getIcons().getShelfIcon())
+            .map(StatusBarIconView::getSourceIcon)
+            .orElse(null);
     }
 
     public void addCallback(MediaListener callback) {
@@ -431,21 +330,9 @@
 
     public void findAndUpdateMediaNotifications() {
         boolean metaDataChanged;
-        if (mUsingNotifPipeline) {
-            // TODO(b/169655907): get the semi-filtered notifications for current user
-            Collection<NotificationEntry> allNotifications = mNotifPipeline.getAllNotifs();
-            metaDataChanged = findPlayingMediaNotification(allNotifications);
-        } else {
-            synchronized (mEntryManager) {
-                Collection<NotificationEntry> allNotifications = mEntryManager.getAllNotifs();
-                metaDataChanged = findPlayingMediaNotification(allNotifications);
-            }
-
-            if (metaDataChanged) {
-                mEntryManager.updateNotifications("NotificationMediaManager - metaDataChanged");
-            }
-
-        }
+        // TODO(b/169655907): get the semi-filtered notifications for current user
+        Collection<NotificationEntry> allNotifications = mNotifPipeline.getAllNotifs();
+        metaDataChanged = findPlayingMediaNotification(allNotifications);
         dispatchUpdateMediaMetaData(metaDataChanged, true /* allowEnterAnimation */);
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationPresenter.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationPresenter.java
index 3b3b5a2..cb414ba 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationPresenter.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationPresenter.java
@@ -50,16 +50,6 @@
     boolean isDeviceInVrMode();
 
     /**
-     * Updates the visual representation of the notifications.
-     */
-    void updateNotificationViews(String reason);
-
-    /**
-     * Called when the row states are updated by {@link NotificationViewHierarchyManager}.
-     */
-    void onUpdateRowStates();
-
-    /**
      * @return true if the shade is collapsing.
      */
     boolean isCollapsing();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java
index d71dec8..78b3b0a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationRemoteInputManager.java
@@ -68,6 +68,7 @@
 import com.android.systemui.statusbar.policy.RemoteInputUriController;
 import com.android.systemui.statusbar.policy.RemoteInputView;
 import com.android.systemui.util.DumpUtilsKt;
+import com.android.systemui.util.ListenerSet;
 
 import java.io.PrintWriter;
 import java.util.ArrayList;
@@ -75,6 +76,7 @@
 import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
+import java.util.function.Consumer;
 
 import dagger.Lazy;
 
@@ -118,6 +120,8 @@
     protected Callback mCallback;
 
     private final List<RemoteInputController.Callback> mControllerCallbacks = new ArrayList<>();
+    private final ListenerSet<Consumer<NotificationEntry>> mActionPressListeners =
+            new ListenerSet<>();
 
     private final InteractionHandler mInteractionHandler = new InteractionHandler() {
 
@@ -282,10 +286,6 @@
                 ServiceManager.getService(Context.STATUS_BAR_SERVICE));
         mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
         mRebuilder = rebuilder;
-        if (!mNotifPipelineFlags.isNewPipelineEnabled()) {
-            mRemoteInputListener = createLegacyRemoteInputLifetimeExtender(mainHandler,
-                    notificationEntryManager, smartReplyController);
-        }
         mKeyguardManager = context.getSystemService(KeyguardManager.class);
         mStatusBarStateController = statusBarStateController;
         mRemoteInputUriController = remoteInputUriController;
@@ -309,34 +309,19 @@
                     int reason) {
                 // We're removing the notification, the smart controller can forget about it.
                 mSmartReplyController.stopSending(entry);
-
-                if (removedByUser && entry != null) {
-                    onPerformRemoveNotification(entry, entry.getKey());
-                }
             }
         });
     }
 
     /** Add a listener for various remote input events.  Works with NEW pipeline only. */
     public void setRemoteInputListener(@NonNull RemoteInputListener remoteInputListener) {
-        if (mNotifPipelineFlags.isNewPipelineEnabled()) {
-            if (mRemoteInputListener != null) {
-                throw new IllegalStateException("mRemoteInputListener is already set");
-            }
-            mRemoteInputListener = remoteInputListener;
-            if (mRemoteInputController != null) {
-                mRemoteInputListener.setRemoteInputController(mRemoteInputController);
-            }
+        if (mRemoteInputListener != null) {
+            throw new IllegalStateException("mRemoteInputListener is already set");
         }
-    }
-
-    @NonNull
-    @VisibleForTesting
-    protected LegacyRemoteInputLifetimeExtender createLegacyRemoteInputLifetimeExtender(
-            Handler mainHandler,
-            NotificationEntryManager notificationEntryManager,
-            SmartReplyController smartReplyController) {
-        return new LegacyRemoteInputLifetimeExtender();
+        mRemoteInputListener = remoteInputListener;
+        if (mRemoteInputController != null) {
+            mRemoteInputListener.setRemoteInputController(mRemoteInputController);
+        }
     }
 
     /** Initializes this component with the provided dependencies. */
@@ -377,12 +362,6 @@
                 }
             }
         });
-        if (!mNotifPipelineFlags.isNewPipelineEnabled()) {
-            mSmartReplyController.setCallback((entry, reply) -> {
-                StatusBarNotification newSbn = mRebuilder.rebuildForSendingSmartReply(entry, reply);
-                mEntryManager.updateNotification(newSbn, null /* ranking */);
-            });
-        }
     }
 
     public void addControllerCallback(RemoteInputController.Callback callback) {
@@ -401,6 +380,14 @@
         }
     }
 
+    public void addActionPressListener(Consumer<NotificationEntry> listener) {
+        mActionPressListeners.addIfAbsent(listener);
+    }
+
+    public void removeActionPressListener(Consumer<NotificationEntry> listener) {
+        mActionPressListeners.remove(listener);
+    }
+
     /**
      * Activates a given {@link RemoteInput}
      *
@@ -576,19 +563,6 @@
         return v.findViewWithTag(RemoteInputView.VIEW_TAG);
     }
 
-    public ArrayList<NotificationLifetimeExtender> getLifetimeExtenders() {
-        // OLD pipeline code ONLY; can assume implementation
-        return ((LegacyRemoteInputLifetimeExtender) mRemoteInputListener).mLifetimeExtenders;
-    }
-
-    @VisibleForTesting
-    void onPerformRemoveNotification(NotificationEntry entry, final String key) {
-        // OLD pipeline code ONLY; can assume implementation
-        ((LegacyRemoteInputLifetimeExtender) mRemoteInputListener)
-                .mKeysKeptForRemoteInputHistory.remove(key);
-        cleanUpRemoteInputForUserRemoval(entry);
-    }
-
     /**
      * Disable remote input on the entry and remove the remote input view.
      * This should be called when a user dismisses a notification that won't be lifetime extended.
@@ -634,6 +608,9 @@
         if (mRemoteInputListener != null) {
             mRemoteInputListener.releaseNotificationIfKeptForRemoteInputHistory(entry);
         }
+        for (Consumer<NotificationEntry> listener : mActionPressListeners) {
+            listener.accept(entry);
+        }
     }
 
     /** Returns whether the notification should be lifetime extended for smart reply history */
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
index 0d60401..2214287 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java
@@ -229,6 +229,17 @@
         mActualWidth = actualWidth;
     }
 
+    @Override
+    public void getBoundsOnScreen(Rect outRect, boolean clipToParent) {
+        super.getBoundsOnScreen(outRect, clipToParent);
+        final int actualWidth = getActualWidth();
+        if (isLayoutRtl()) {
+            outRect.left = outRect.right - actualWidth;
+        } else {
+            outRect.right = outRect.left + actualWidth;
+        }
+    }
+
     /**
      * @return Actual width of shelf, accounting for possible ongoing width animation
      */
@@ -387,7 +398,14 @@
             if (child instanceof ActivatableNotificationView) {
                 ActivatableNotificationView anv =
                         (ActivatableNotificationView) child;
-                updateCornerRoundnessOnScroll(anv, viewStart, shelfStart);
+                // Because we show whole notifications on the lockscreen, the bottom notification is
+                // always "just about to enter the shelf" by normal scrolling rules.  This is fine
+                // if the shelf is visible, but if the shelf is hidden, it causes incorrect curling.
+                // notificationClipEnd handles the discrepancy between a visible and hidden shelf,
+                // so we use that when on the keyguard (and while animating away) to reduce curling.
+                final float keyguardSafeShelfStart =
+                        mAmbientState.isOnKeyguard() ? notificationClipEnd : shelfStart;
+                updateCornerRoundnessOnScroll(anv, viewStart, keyguardSafeShelfStart);
             }
         }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationViewHierarchyManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationViewHierarchyManager.java
deleted file mode 100644
index 054543c..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationViewHierarchyManager.java
+++ /dev/null
@@ -1,631 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.systemui.statusbar;
-
-import static com.android.systemui.statusbar.notification.stack.NotificationPriorityBucketKt.BUCKET_SILENT;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.os.Handler;
-import android.os.Trace;
-import android.os.UserHandle;
-import android.util.Log;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.android.keyguard.KeyguardUpdateMonitor;
-import com.android.systemui.R;
-import com.android.systemui.dagger.qualifiers.Main;
-import com.android.systemui.flags.FeatureFlags;
-import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.statusbar.dagger.CentralSurfacesModule;
-import com.android.systemui.statusbar.notification.AssistantFeedbackController;
-import com.android.systemui.statusbar.notification.DynamicChildBindController;
-import com.android.systemui.statusbar.notification.DynamicPrivacyController;
-import com.android.systemui.statusbar.notification.NotifPipelineFlags;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
-import com.android.systemui.statusbar.notification.collection.NotificationEntry;
-import com.android.systemui.statusbar.notification.collection.legacy.LowPriorityInflationHelper;
-import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy;
-import com.android.systemui.statusbar.notification.collection.legacy.VisualStabilityManager;
-import com.android.systemui.statusbar.notification.collection.render.NotifStackController;
-import com.android.systemui.statusbar.notification.collection.render.NotifStats;
-import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
-import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
-import com.android.systemui.statusbar.phone.KeyguardBypassController;
-import com.android.systemui.statusbar.policy.KeyguardStateController;
-import com.android.systemui.util.Assert;
-import com.android.wm.shell.bubbles.Bubbles;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Optional;
-import java.util.Stack;
-
-/**
- * NotificationViewHierarchyManager manages updating the view hierarchy of notification views based
- * on their group structure. For example, if a notification becomes bundled with another,
- * NotificationViewHierarchyManager will update the view hierarchy to reflect that. It also will
- * tell NotificationListContainer which notifications to display, and inform it of changes to those
- * notifications that might affect their display.
- */
-public class NotificationViewHierarchyManager implements DynamicPrivacyController.Listener {
-    private static final String TAG = "NotificationViewHierarchyManager";
-
-    private final Handler mHandler;
-
-    /**
-     * Re-usable map of top-level notifications to their sorted children if any.
-     * If the top-level notification doesn't have children, its key will still exist in this map
-     * with its value explicitly set to null.
-     */
-    private final HashMap<NotificationEntry, List<NotificationEntry>> mTmpChildOrderMap =
-            new HashMap<>();
-
-    // Dependencies:
-    private final DynamicChildBindController mDynamicChildBindController;
-    private final FeatureFlags mFeatureFlags;
-    protected final NotificationLockscreenUserManager mLockscreenUserManager;
-    protected final NotificationGroupManagerLegacy mGroupManager;
-    protected final VisualStabilityManager mVisualStabilityManager;
-    private final SysuiStatusBarStateController mStatusBarStateController;
-    private final NotificationEntryManager mEntryManager;
-    private final LowPriorityInflationHelper mLowPriorityInflationHelper;
-
-    /**
-     * {@code true} if notifications not part of a group should by default be rendered in their
-     * expanded state. If {@code false}, then only the first notification will be expanded if
-     * possible.
-     */
-    private final boolean mAlwaysExpandNonGroupedNotification;
-    private final Optional<Bubbles> mBubblesOptional;
-    private final DynamicPrivacyController mDynamicPrivacyController;
-    private final KeyguardBypassController mBypassController;
-    private final NotifPipelineFlags mNotifPipelineFlags;
-    private AssistantFeedbackController mAssistantFeedbackController;
-    private final KeyguardStateController mKeyguardStateController;
-    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
-    private final Context mContext;
-
-    private NotificationPresenter mPresenter;
-    private NotifStackController mStackController;
-    private NotificationListContainer mListContainer;
-
-    // Used to help track down re-entrant calls to our update methods, which will cause bugs.
-    private boolean mPerformingUpdate;
-    // Hack to get around re-entrant call in onDynamicPrivacyChanged() until we can track down
-    // the problem.
-    private boolean mIsHandleDynamicPrivacyChangeScheduled;
-
-    /**
-     * Injected constructor. See {@link CentralSurfacesModule}.
-     */
-    public NotificationViewHierarchyManager(
-            Context context,
-            @Main Handler mainHandler,
-            FeatureFlags featureFlags,
-            NotificationLockscreenUserManager notificationLockscreenUserManager,
-            NotificationGroupManagerLegacy groupManager,
-            VisualStabilityManager visualStabilityManager,
-            StatusBarStateController statusBarStateController,
-            NotificationEntryManager notificationEntryManager,
-            KeyguardBypassController bypassController,
-            Optional<Bubbles> bubblesOptional,
-            DynamicPrivacyController privacyController,
-            DynamicChildBindController dynamicChildBindController,
-            LowPriorityInflationHelper lowPriorityInflationHelper,
-            AssistantFeedbackController assistantFeedbackController,
-            NotifPipelineFlags notifPipelineFlags,
-            KeyguardUpdateMonitor keyguardUpdateMonitor,
-            KeyguardStateController keyguardStateController) {
-        mContext = context;
-        mHandler = mainHandler;
-        mFeatureFlags = featureFlags;
-        mLockscreenUserManager = notificationLockscreenUserManager;
-        mBypassController = bypassController;
-        mGroupManager = groupManager;
-        mVisualStabilityManager = visualStabilityManager;
-        mStatusBarStateController = (SysuiStatusBarStateController) statusBarStateController;
-        mEntryManager = notificationEntryManager;
-        mNotifPipelineFlags = notifPipelineFlags;
-        Resources res = context.getResources();
-        mAlwaysExpandNonGroupedNotification =
-                res.getBoolean(R.bool.config_alwaysExpandNonGroupedNotifications);
-        mBubblesOptional = bubblesOptional;
-        mDynamicPrivacyController = privacyController;
-        mDynamicChildBindController = dynamicChildBindController;
-        mLowPriorityInflationHelper = lowPriorityInflationHelper;
-        mAssistantFeedbackController = assistantFeedbackController;
-        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
-        mKeyguardStateController = keyguardStateController;
-    }
-
-    public void setUpWithPresenter(NotificationPresenter presenter,
-            NotifStackController stackController,
-            NotificationListContainer listContainer) {
-        mPresenter = presenter;
-        mStackController = stackController;
-        mListContainer = listContainer;
-        if (!mNotifPipelineFlags.isNewPipelineEnabled()) {
-            mDynamicPrivacyController.addListener(this);
-        }
-    }
-
-    /**
-     * Updates the visual representation of the notifications.
-     */
-    //TODO: Rewrite this to focus on Entries, or some other data object instead of views
-    public void updateNotificationViews() {
-        Assert.isMainThread();
-        if (!mNotifPipelineFlags.checkLegacyPipelineEnabled()) {
-            return;
-        }
-        Trace.beginSection("NotificationViewHierarchyManager.updateNotificationViews");
-
-        beginUpdate();
-
-        boolean dynamicallyUnlocked = mDynamicPrivacyController.isDynamicallyUnlocked()
-                && !(mStatusBarStateController.getState() == StatusBarState.KEYGUARD
-                && mKeyguardUpdateMonitor.getUserUnlockedWithBiometricAndIsBypassing(
-                KeyguardUpdateMonitor.getCurrentUser()))
-                && !mKeyguardStateController.isKeyguardGoingAway();
-        List<NotificationEntry> activeNotifications = mEntryManager.getVisibleNotifications();
-        ArrayList<ExpandableNotificationRow> toShow = new ArrayList<>(activeNotifications.size());
-        final int N = activeNotifications.size();
-        for (int i = 0; i < N; i++) {
-            NotificationEntry ent = activeNotifications.get(i);
-            if (shouldSuppressActiveNotification(ent)) {
-                continue;
-            }
-
-            int userId = ent.getSbn().getUserId();
-
-            // Display public version of the notification if we need to redact.
-            // TODO: This area uses a lot of calls into NotificationLockscreenUserManager.
-            // We can probably move some of this code there.
-            int currentUserId = mLockscreenUserManager.getCurrentUserId();
-            boolean devicePublic = mLockscreenUserManager.isLockscreenPublicMode(currentUserId);
-            boolean userPublic = devicePublic
-                    || mLockscreenUserManager.isLockscreenPublicMode(userId);
-            if (userPublic && dynamicallyUnlocked
-                    && (userId == currentUserId || userId == UserHandle.USER_ALL
-                    || !mLockscreenUserManager.needsSeparateWorkChallenge(userId))) {
-                userPublic = false;
-            }
-            boolean needsRedaction = mLockscreenUserManager.needsRedaction(ent);
-            boolean sensitive = userPublic && needsRedaction;
-            boolean deviceSensitive = devicePublic
-                    && !mLockscreenUserManager.userAllowsPrivateNotificationsInPublic(
-                    currentUserId);
-            ent.setSensitive(sensitive, deviceSensitive);
-            ent.getRow().setNeedsRedaction(needsRedaction);
-            mLowPriorityInflationHelper.recheckLowPriorityViewAndInflate(ent, ent.getRow());
-            boolean isChildInGroup = mGroupManager.isChildInGroup(ent);
-
-            boolean groupChangesAllowed =
-                    mVisualStabilityManager.areGroupChangesAllowed() // user isn't looking at notifs
-                    || !ent.hasFinishedInitialization(); // notif recently added
-
-            NotificationEntry parent = mGroupManager.getGroupSummary(ent);
-            if (!groupChangesAllowed) {
-                // We don't to change groups while the user is looking at them
-                boolean wasChildInGroup = ent.isChildInGroup();
-                if (isChildInGroup && !wasChildInGroup) {
-                    isChildInGroup = wasChildInGroup;
-                    mVisualStabilityManager.addGroupChangesAllowedCallback(mEntryManager,
-                            false /* persistent */);
-                } else if (!isChildInGroup && wasChildInGroup) {
-                    // We allow grouping changes if the group was collapsed
-                    if (mGroupManager.isLogicalGroupExpanded(ent.getSbn())) {
-                        isChildInGroup = wasChildInGroup;
-                        parent = ent.getRow().getNotificationParent().getEntry();
-                        mVisualStabilityManager.addGroupChangesAllowedCallback(mEntryManager,
-                                false /* persistent */);
-                    }
-                }
-            }
-
-            if (isChildInGroup) {
-                List<NotificationEntry> orderedChildren = mTmpChildOrderMap.get(parent);
-                if (orderedChildren == null) {
-                    orderedChildren = new ArrayList<>();
-                    mTmpChildOrderMap.put(parent, orderedChildren);
-                }
-                orderedChildren.add(ent);
-            } else {
-                // Top-level notif (either a summary or single notification)
-
-                // A child may have already added its summary to mTmpChildOrderMap with a
-                // list of children. This can happen since there's no guarantee summaries are
-                // sorted before its children.
-                if (!mTmpChildOrderMap.containsKey(ent)) {
-                    // mTmpChildOrderMap's keyset is used to iterate through all entries, so it's
-                    // necessary to add each top-level notif as a key
-                    mTmpChildOrderMap.put(ent, null);
-                }
-                toShow.add(ent.getRow());
-            }
-
-        }
-
-        ArrayList<ExpandableNotificationRow> viewsToRemove = new ArrayList<>();
-        for (int i=0; i< mListContainer.getContainerChildCount(); i++) {
-            View child = mListContainer.getContainerChildAt(i);
-            if (!toShow.contains(child) && child instanceof ExpandableNotificationRow) {
-                ExpandableNotificationRow row = (ExpandableNotificationRow) child;
-
-                // Blocking helper is effectively a detached view. Don't bother removing it from the
-                // layout.
-                if (!row.isBlockingHelperShowing()) {
-                    viewsToRemove.add((ExpandableNotificationRow) child);
-                }
-            }
-        }
-
-        for (ExpandableNotificationRow viewToRemove : viewsToRemove) {
-            NotificationEntry entry = viewToRemove.getEntry();
-            if (mEntryManager.getPendingOrActiveNotif(entry.getKey()) != null
-                && !shouldSuppressActiveNotification(entry)) {
-                // we are only transferring this notification to its parent, don't generate an
-                // animation. If the notification is suppressed, this isn't a transfer.
-                mListContainer.setChildTransferInProgress(true);
-            }
-            if (viewToRemove.isSummaryWithChildren()) {
-                viewToRemove.removeAllChildren();
-            }
-            mListContainer.removeContainerView(viewToRemove);
-            mListContainer.setChildTransferInProgress(false);
-        }
-
-        removeNotificationChildren();
-
-        for (int i = 0; i < toShow.size(); i++) {
-            View v = toShow.get(i);
-            if (v.getParent() == null) {
-                mVisualStabilityManager.notifyViewAddition(v);
-                mListContainer.addContainerView(v);
-            } else if (!mListContainer.containsView(v)) {
-                // the view is added somewhere else. Let's make sure
-                // the ordering works properly below, by excluding these
-                toShow.remove(v);
-                i--;
-            }
-        }
-
-        addNotificationChildrenAndSort();
-
-        // So after all this work notifications still aren't sorted correctly.
-        // Let's do that now by advancing through toShow and mListContainer in
-        // lock-step, making sure mListContainer matches what we see in toShow.
-        int j = 0;
-        for (int i = 0; i < mListContainer.getContainerChildCount(); i++) {
-            View child = mListContainer.getContainerChildAt(i);
-            if (!(child instanceof ExpandableNotificationRow)) {
-                // We don't care about non-notification views.
-                continue;
-            }
-            if (((ExpandableNotificationRow) child).isBlockingHelperShowing()) {
-                // Don't count/reorder notifications that are showing the blocking helper!
-                continue;
-            }
-
-            ExpandableNotificationRow targetChild = toShow.get(j);
-            if (child != targetChild) {
-                // Oops, wrong notification at this position. Put the right one
-                // here and advance both lists.
-                if (mVisualStabilityManager.canReorderNotification(targetChild)) {
-                    mListContainer.changeViewPosition(targetChild, i);
-                } else {
-                    mVisualStabilityManager.addReorderingAllowedCallback(mEntryManager,
-                            false  /* persistent */);
-                }
-            }
-            j++;
-
-        }
-
-        mDynamicChildBindController.updateContentViews(mTmpChildOrderMap);
-        mVisualStabilityManager.onReorderingFinished();
-        // clear the map again for the next usage
-        mTmpChildOrderMap.clear();
-
-        updateRowStatesInternal();
-        updateNotifStats();
-
-        mListContainer.onNotificationViewUpdateFinished();
-
-        endUpdate();
-        Trace.endSection();
-    }
-
-    /**
-     * In the spirit of unidirectional data flow, calculate this information when the notification
-     * views are updated, and set it once, speeding up lookups later.
-     * This is analogous to logic in the
-     * {@link com.android.systemui.statusbar.notification.collection.coordinator.StackCoordinator}
-     */
-    private void updateNotifStats() {
-        Trace.beginSection("NotificationViewHierarchyManager.updateNotifStats");
-        boolean hasNonClearableAlertingNotifs = false;
-        boolean hasClearableAlertingNotifs = false;
-        boolean hasNonClearableSilentNotifs = false;
-        boolean hasClearableSilentNotifs = false;
-        final int childCount = mListContainer.getContainerChildCount();
-        int visibleTopLevelEntries = 0;
-        for (int i = 0; i < childCount; i++) {
-            View child = mListContainer.getContainerChildAt(i);
-            if (child == null || child.getVisibility() == View.GONE) {
-                continue;
-            }
-            if (!(child instanceof ExpandableNotificationRow)) {
-                continue;
-            }
-            final ExpandableNotificationRow row = (ExpandableNotificationRow) child;
-            boolean isSilent = row.getEntry().getBucket() == BUCKET_SILENT;
-            // NOTE: NotificationEntry.isClearable() will internally check group children to ensure
-            //  the group itself definitively clearable.
-            boolean isClearable = row.getEntry().isClearable();
-            visibleTopLevelEntries++;
-            if (isSilent) {
-                if (isClearable) {
-                    hasClearableSilentNotifs = true;
-                } else {  // !isClearable
-                    hasNonClearableSilentNotifs = true;
-                }
-            } else {  // !isSilent
-                if (isClearable) {
-                    hasClearableAlertingNotifs = true;
-                } else {  // !isClearable
-                    hasNonClearableAlertingNotifs = true;
-                }
-            }
-        }
-        mStackController.setNotifStats(new NotifStats(
-                visibleTopLevelEntries /* numActiveNotifs */,
-                hasNonClearableAlertingNotifs /* hasNonClearableAlertingNotifs */,
-                hasClearableAlertingNotifs /* hasClearableAlertingNotifs */,
-                hasNonClearableSilentNotifs /* hasNonClearableSilentNotifs */,
-                hasClearableSilentNotifs /* hasClearableSilentNotifs */
-        ));
-        Trace.endSection();
-    }
-
-    /**
-     * Should a notification entry from the active list be suppressed and not show?
-     */
-    private boolean shouldSuppressActiveNotification(NotificationEntry ent) {
-        final boolean isBubbleNotificationSuppressedFromShade = mBubblesOptional.isPresent()
-                && mBubblesOptional.get().isBubbleNotificationSuppressedFromShade(
-                        ent.getKey(), ent.getSbn().getGroupKey());
-        if (ent.isRowDismissed() || ent.isRowRemoved()
-                || isBubbleNotificationSuppressedFromShade) {
-            // we want to suppress removed notifications because they could
-            // temporarily become children if they were isolated before.
-            return true;
-        }
-        return false;
-    }
-
-    private void addNotificationChildrenAndSort() {
-        // Let's now add all notification children which are missing
-        boolean orderChanged = false;
-        ArrayList<ExpandableNotificationRow> orderedRows = new ArrayList<>();
-        for (int i = 0; i < mListContainer.getContainerChildCount(); i++) {
-            View view = mListContainer.getContainerChildAt(i);
-            if (!(view instanceof ExpandableNotificationRow)) {
-                // We don't care about non-notification views.
-                continue;
-            }
-
-            ExpandableNotificationRow parent = (ExpandableNotificationRow) view;
-            List<ExpandableNotificationRow> children = parent.getAttachedChildren();
-            List<NotificationEntry> orderedChildren = mTmpChildOrderMap.get(parent.getEntry());
-            if (orderedChildren == null) {
-                // Not a group
-                continue;
-            }
-            parent.setUntruncatedChildCount(orderedChildren.size());
-            for (int childIndex = 0; childIndex < orderedChildren.size(); childIndex++) {
-                ExpandableNotificationRow childView = orderedChildren.get(childIndex).getRow();
-                if (children == null || !children.contains(childView)) {
-                    if (childView.getParent() != null) {
-                        Log.wtf(TAG, "trying to add a notification child that already has "
-                                + "a parent. class:" + childView.getParent().getClass()
-                                + "\n child: " + childView);
-                        // This shouldn't happen. We can recover by removing it though.
-                        ((ViewGroup) childView.getParent()).removeView(childView);
-                    }
-                    mVisualStabilityManager.notifyViewAddition(childView);
-                    parent.addChildNotification(childView, childIndex);
-                    mListContainer.notifyGroupChildAdded(childView);
-                }
-                orderedRows.add(childView);
-            }
-
-            // Finally after removing and adding has been performed we can apply the order.
-            orderChanged |= parent.applyChildOrder(orderedRows, mVisualStabilityManager,
-                    mEntryManager);
-            orderedRows.clear();
-        }
-        if (orderChanged) {
-            mListContainer.generateChildOrderChangedEvent();
-        }
-    }
-
-    private void removeNotificationChildren() {
-        // First let's remove all children which don't belong in the parents
-        ArrayList<ExpandableNotificationRow> toRemove = new ArrayList<>();
-        for (int i = 0; i < mListContainer.getContainerChildCount(); i++) {
-            View view = mListContainer.getContainerChildAt(i);
-            if (!(view instanceof ExpandableNotificationRow)) {
-                // We don't care about non-notification views.
-                continue;
-            }
-
-            ExpandableNotificationRow parent = (ExpandableNotificationRow) view;
-            List<ExpandableNotificationRow> children = parent.getAttachedChildren();
-            List<NotificationEntry> orderedChildren = mTmpChildOrderMap.get(parent.getEntry());
-
-            if (children != null) {
-                toRemove.clear();
-                for (ExpandableNotificationRow childRow : children) {
-                    if ((orderedChildren == null
-                            || !orderedChildren.contains(childRow.getEntry()))
-                            && !childRow.keepInParent()) {
-                        toRemove.add(childRow);
-                    }
-                }
-                for (ExpandableNotificationRow remove : toRemove) {
-                    parent.removeChildNotification(remove);
-                    if (mEntryManager.getActiveNotificationUnfiltered(
-                            remove.getEntry().getSbn().getKey()) == null) {
-                        // We only want to add an animation if the view is completely removed
-                        // otherwise it's just a transfer
-                        mListContainer.notifyGroupChildRemoved(remove,
-                                parent.getChildrenContainer());
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Updates expanded, dimmed and locked states of notification rows.
-     */
-    public void updateRowStates() {
-        Assert.isMainThread();
-        if (!mNotifPipelineFlags.checkLegacyPipelineEnabled()) {
-            return;
-        }
-
-        beginUpdate();
-        updateRowStatesInternal();
-        endUpdate();
-    }
-
-    private void updateRowStatesInternal() {
-        Trace.beginSection("NotificationViewHierarchyManager.updateRowStates");
-        final int N = mListContainer.getContainerChildCount();
-
-        int visibleNotifications = 0;
-        boolean onKeyguard =
-                mStatusBarStateController.getCurrentOrUpcomingState() == StatusBarState.KEYGUARD;
-        Stack<ExpandableNotificationRow> stack = new Stack<>();
-        for (int i = N - 1; i >= 0; i--) {
-            View child = mListContainer.getContainerChildAt(i);
-            if (!(child instanceof ExpandableNotificationRow)) {
-                continue;
-            }
-            stack.push((ExpandableNotificationRow) child);
-        }
-        while(!stack.isEmpty()) {
-            ExpandableNotificationRow row = stack.pop();
-            NotificationEntry entry = row.getEntry();
-            boolean isChildNotification = mGroupManager.isChildInGroup(entry);
-
-            if (!onKeyguard) {
-                // If mAlwaysExpandNonGroupedNotification is false, then only expand the
-                // very first notification and if it's not a child of grouped notifications.
-                row.setSystemExpanded(mAlwaysExpandNonGroupedNotification
-                        || (visibleNotifications == 0 && !isChildNotification
-                        && !row.isLowPriority()));
-            }
-
-            int userId = entry.getSbn().getUserId();
-            boolean suppressedSummary = mGroupManager.isSummaryOfSuppressedGroup(
-                    entry.getSbn()) && !entry.isRowRemoved();
-            boolean showOnKeyguard = mLockscreenUserManager.shouldShowOnKeyguard(entry);
-            if (!showOnKeyguard) {
-                // min priority notifications should show if their summary is showing
-                if (mGroupManager.isChildInGroup(entry)) {
-                    NotificationEntry summary = mGroupManager.getLogicalGroupSummary(entry);
-                    if (summary != null && mLockscreenUserManager.shouldShowOnKeyguard(summary)) {
-                        showOnKeyguard = true;
-                    }
-                }
-            }
-            if (suppressedSummary
-                    || mLockscreenUserManager.shouldHideNotifications(userId)
-                    || (onKeyguard && !showOnKeyguard)) {
-                entry.getRow().setVisibility(View.GONE);
-            } else {
-                boolean wasGone = entry.getRow().getVisibility() == View.GONE;
-                if (wasGone) {
-                    entry.getRow().setVisibility(View.VISIBLE);
-                }
-                if (!isChildNotification && !entry.getRow().isRemoved()) {
-                    if (wasGone) {
-                        // notify the scroller of a child addition
-                        mListContainer.generateAddAnimation(entry.getRow(),
-                                !showOnKeyguard /* fromMoreCard */);
-                    }
-                    visibleNotifications++;
-                }
-            }
-            if (row.isSummaryWithChildren()) {
-                List<ExpandableNotificationRow> notificationChildren =
-                        row.getAttachedChildren();
-                int size = notificationChildren.size();
-                for (int i = size - 1; i >= 0; i--) {
-                    stack.push(notificationChildren.get(i));
-                }
-            }
-            row.setFeedbackIcon(mAssistantFeedbackController.getFeedbackIcon(entry));
-            row.setLastAudiblyAlertedMs(entry.getLastAudiblyAlertedMs());
-        }
-
-        Trace.beginSection("NotificationPresenter#onUpdateRowStates");
-        mPresenter.onUpdateRowStates();
-        Trace.endSection();
-        Trace.endSection();
-    }
-
-    @Override
-    public void onDynamicPrivacyChanged() {
-        mNotifPipelineFlags.assertLegacyPipelineEnabled();
-        if (mPerformingUpdate) {
-            Log.w(TAG, "onDynamicPrivacyChanged made a re-entrant call");
-        }
-        // This listener can be called from updateNotificationViews() via a convoluted listener
-        // chain, so we post here to prevent a re-entrant call. See b/136186188
-        // TODO: Refactor away the need for this
-        if (!mIsHandleDynamicPrivacyChangeScheduled) {
-            mIsHandleDynamicPrivacyChangeScheduled = true;
-            mHandler.post(this::onHandleDynamicPrivacyChanged);
-        }
-    }
-
-    private void onHandleDynamicPrivacyChanged() {
-        mIsHandleDynamicPrivacyChangeScheduled = false;
-        updateNotificationViews();
-    }
-
-    private void beginUpdate() {
-        if (mPerformingUpdate) {
-            Log.wtf(TAG, "Re-entrant code during update", new Exception());
-        }
-        mPerformingUpdate = true;
-    }
-
-    private void endUpdate() {
-        if (!mPerformingUpdate) {
-            Log.wtf(TAG, "Manager state has become desynced", new Exception());
-        }
-        mPerformingUpdate = false;
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SplitShadeLockScreenOverScroller.kt b/packages/SystemUI/src/com/android/systemui/statusbar/SplitShadeLockScreenOverScroller.kt
index 96ce6b4..13d8adb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/SplitShadeLockScreenOverScroller.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/SplitShadeLockScreenOverScroller.kt
@@ -9,6 +9,7 @@
 import com.android.internal.annotations.VisibleForTesting
 import com.android.systemui.R
 import com.android.systemui.animation.Interpolators
+import com.android.systemui.dump.DumpManager
 import com.android.systemui.plugins.qs.QS
 import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
 import com.android.systemui.statusbar.phone.ScrimController
@@ -16,16 +17,18 @@
 import dagger.assisted.Assisted
 import dagger.assisted.AssistedFactory
 import dagger.assisted.AssistedInject
+import java.io.PrintWriter
 
 class SplitShadeLockScreenOverScroller
 @AssistedInject
 constructor(
     configurationController: ConfigurationController,
+    dumpManager: DumpManager,
     private val context: Context,
     private val scrimController: ScrimController,
     private val statusBarStateController: SysuiStatusBarStateController,
-    @Assisted private val qS: QS,
-    @Assisted private val nsslController: NotificationStackScrollLayoutController
+    @Assisted private val qSProvider: () -> QS,
+    @Assisted private val nsslControllerProvider: () -> NotificationStackScrollLayoutController
 ) : LockScreenShadeOverScroller {
 
     private var releaseOverScrollAnimator: Animator? = null
@@ -34,6 +37,12 @@
     private var maxOverScrollAmount = 0
     private var previousOverscrollAmount = 0
 
+    private val qS: QS
+        get() = qSProvider()
+
+    private val nsslController: NotificationStackScrollLayoutController
+        get() = nsslControllerProvider()
+
     init {
         updateResources()
         configurationController.addCallback(
@@ -42,6 +51,9 @@
                     updateResources()
                 }
             })
+        dumpManager.registerDumpable("SplitShadeLockscreenOverScroller") { printWriter, _ ->
+            dump(printWriter)
+        }
     }
 
     private fun updateResources() {
@@ -114,11 +126,25 @@
         releaseOverScrollAnimator = null
     }
 
+    private fun dump(printWriter: PrintWriter) {
+        printWriter.println(
+            """
+            SplitShadeLockScreenOverScroller:
+                Resources:
+                    transitionToFullShadeDistance: $transitionToFullShadeDistance
+                    maxOverScrollAmount: $maxOverScrollAmount
+                    releaseOverScrollDuration: $releaseOverScrollDuration
+                State:
+                    previousOverscrollAmount: $previousOverscrollAmount
+                    expansionDragDownAmount: $expansionDragDownAmount
+            """.trimIndent())
+    }
+
     @AssistedFactory
     fun interface Factory {
         fun create(
-            qS: QS,
-            nsslController: NotificationStackScrollLayoutController
+            qSProvider: () -> QS,
+            nsslControllerProvider: () -> NotificationStackScrollLayoutController
         ): SplitShadeLockScreenOverScroller
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java
index 3013ad0..a57d849b2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java
@@ -61,21 +61,19 @@
     private int mVisibleState = -1;
     private DualToneHandler mDualToneHandler;
     private boolean mForceHidden;
-    private boolean mProviderModel;
 
     /**
      * Designated constructor
      */
     public static StatusBarMobileView fromContext(
             Context context,
-            String slot,
-            boolean providerModel
+            String slot
     ) {
         LayoutInflater inflater = LayoutInflater.from(context);
         StatusBarMobileView v = (StatusBarMobileView)
                 inflater.inflate(R.layout.status_bar_mobile_signal_group, null);
         v.setSlot(slot);
-        v.init(providerModel);
+        v.init();
         v.setVisibleState(STATE_ICON);
         return v;
     }
@@ -108,17 +106,12 @@
         outRect.bottom += translationY;
     }
 
-    private void init(boolean providerModel) {
-        mProviderModel = providerModel;
+    private void init() {
         mDualToneHandler = new DualToneHandler(getContext());
         mMobileGroup = findViewById(R.id.mobile_group);
         mMobile = findViewById(R.id.mobile_signal);
         mMobileType = findViewById(R.id.mobile_type);
-        if (mProviderModel) {
-            mMobileRoaming = findViewById(R.id.mobile_roaming_large);
-        } else {
-            mMobileRoaming = findViewById(R.id.mobile_roaming);
-        }
+        mMobileRoaming = findViewById(R.id.mobile_roaming);
         mMobileRoamingSpace = findViewById(R.id.mobile_roaming_space);
         mIn = findViewById(R.id.mobile_in);
         mOut = findViewById(R.id.mobile_out);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarState.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarState.java
index 718bc5c..f78b067 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarState.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarState.java
@@ -22,18 +22,21 @@
 public class StatusBarState {
 
     /**
-     * The status bar is in the "normal" shade mode.
+     * The status bar is in the "normal", unlocked mode or the device is still locked but we're
+     * accessing camera from power button double-tap shortcut.
      */
     public static final int SHADE = 0;
 
     /**
-     * Status bar is currently the Keyguard.
+     * Status bar is currently the Keyguard. In single column mode, when you swipe from the top of
+     * the keyguard to expand QS immediately, it's still KEYGUARD state.
      */
     public static final int KEYGUARD = 1;
 
     /**
-     * Status bar is in the special mode, where it is fully interactive but still locked. So
-     * dismissing the shade will still show the bouncer.
+     * Status bar is in the special mode, where it was transitioned from lockscreen to shade.
+     * Depending on user's security settings, dismissing the shade will either show the
+     * bouncer or go directly to unlocked {@link #SHADE} mode.
      */
     public static final int SHADE_LOCKED = 2;
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/charging/ChargingRippleView.kt b/packages/SystemUI/src/com/android/systemui/statusbar/charging/ChargingRippleView.kt
deleted file mode 100644
index 10e90fe..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/charging/ChargingRippleView.kt
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.statusbar.charging
-
-import android.animation.Animator
-import android.animation.AnimatorListenerAdapter
-import android.animation.ValueAnimator
-import android.content.Context
-import android.content.res.Configuration
-import android.graphics.Canvas
-import android.graphics.Paint
-import android.graphics.PointF
-import android.util.AttributeSet
-import android.view.View
-
-private const val RIPPLE_SPARKLE_STRENGTH: Float = 0.3f
-
-/**
- * Expanding ripple effect that shows when charging begins.
- */
-class ChargingRippleView(context: Context?, attrs: AttributeSet?) : View(context, attrs) {
-    private val rippleShader = RippleShader()
-    private val defaultColor: Int = 0xffffffff.toInt()
-    private val ripplePaint = Paint()
-
-    var rippleInProgress: Boolean = false
-    var radius: Float = 0.0f
-        set(value) {
-            rippleShader.radius = value
-            field = value
-        }
-    var origin: PointF = PointF()
-        set(value) {
-            rippleShader.origin = value
-            field = value
-        }
-    var duration: Long = 1750
-
-    init {
-        rippleShader.color = defaultColor
-        rippleShader.progress = 0f
-        rippleShader.sparkleStrength = RIPPLE_SPARKLE_STRENGTH
-        ripplePaint.shader = rippleShader
-    }
-
-    override fun onConfigurationChanged(newConfig: Configuration?) {
-        rippleShader.pixelDensity = resources.displayMetrics.density
-        super.onConfigurationChanged(newConfig)
-    }
-
-    override fun onAttachedToWindow() {
-        rippleShader.pixelDensity = resources.displayMetrics.density
-        super.onAttachedToWindow()
-    }
-
-    @JvmOverloads
-    fun startRipple(onAnimationEnd: Runnable? = null) {
-        if (rippleInProgress) {
-            return // Ignore if ripple effect is already playing
-        }
-        val animator = ValueAnimator.ofFloat(0f, 1f)
-        animator.duration = duration
-        animator.addUpdateListener { animator ->
-            val now = animator.currentPlayTime
-            val progress = animator.animatedValue as Float
-            rippleShader.progress = progress
-            rippleShader.distortionStrength = 1 - progress
-            rippleShader.time = now.toFloat()
-            invalidate()
-        }
-        animator.addListener(object : AnimatorListenerAdapter() {
-            override fun onAnimationEnd(animation: Animator?) {
-                rippleInProgress = false
-                onAnimationEnd?.run()
-            }
-        })
-        animator.start()
-        rippleInProgress = true
-    }
-
-    fun setColor(color: Int) {
-        rippleShader.color = color
-    }
-
-    override fun onDraw(canvas: Canvas?) {
-        if (canvas == null || !canvas.isHardwareAccelerated) {
-            // Drawing with the ripple shader requires hardware acceleration, so skip
-            // if it's unsupported.
-            return
-        }
-        // To reduce overdraw, we mask the effect to a circle whose radius is big enough to cover
-        // the active effect area. Values here should be kept in sync with the
-        // animation implementation in the ripple shader.
-        val maskRadius = (1 - (1 - rippleShader.progress) * (1 - rippleShader.progress) *
-                (1 - rippleShader.progress)) * radius * 2
-        canvas?.drawCircle(origin.x, origin.y, maskRadius, ripplePaint)
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/charging/DwellRippleShader.kt b/packages/SystemUI/src/com/android/systemui/statusbar/charging/DwellRippleShader.kt
deleted file mode 100644
index 236129f..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/charging/DwellRippleShader.kt
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.statusbar.charging
-
-import android.graphics.PointF
-import android.graphics.RuntimeShader
-import android.util.MathUtils
-
-/**
- * Shader class that renders a distorted ripple for the UDFPS dwell effect.
- * Adjustable shader parameters:
- *   - progress
- *   - origin
- *   - color
- *   - time
- *   - maxRadius
- *   - distortionStrength.
- * See per field documentation for more details.
- *
- * Modeled after frameworks/base/graphics/java/android/graphics/drawable/RippleShader.java.
- */
-class DwellRippleShader internal constructor() : RuntimeShader(SHADER) {
-    companion object {
-        private const val SHADER_UNIFORMS = """uniform vec2 in_origin;
-                uniform float in_time;
-                uniform float in_radius;
-                uniform float in_blur;
-                layout(color) uniform vec4 in_color;
-                uniform float in_phase1;
-                uniform float in_phase2;
-                uniform float in_distortion_strength;"""
-        private const val SHADER_LIB = """
-                float softCircle(vec2 uv, vec2 xy, float radius, float blur) {
-                  float blurHalf = blur * 0.5;
-                  float d = distance(uv, xy);
-                  return 1. - smoothstep(1. - blurHalf, 1. + blurHalf, d / radius);
-                }
-
-                float softRing(vec2 uv, vec2 xy, float radius, float blur) {
-                  float thickness_half = radius * 0.25;
-                  float circle_outer = softCircle(uv, xy, radius + thickness_half, blur);
-                  float circle_inner = softCircle(uv, xy, radius - thickness_half, blur);
-                  return circle_outer - circle_inner;
-                }
-
-                vec2 distort(vec2 p, float time, float distort_amount_xy, float frequency) {
-                    return p + vec2(sin(p.y * frequency + in_phase1),
-                                    cos(p.x * frequency * -1.23 + in_phase2)) * distort_amount_xy;
-                }
-
-                vec4 ripple(vec2 p, float distort_xy, float frequency) {
-                    vec2 p_distorted = distort(p, in_time, distort_xy, frequency);
-                    float circle = softCircle(p_distorted, in_origin, in_radius * 1.2, in_blur);
-                    float rippleAlpha = max(circle,
-                        softRing(p_distorted, in_origin, in_radius, in_blur)) * 0.25;
-                    return in_color * rippleAlpha;
-                }
-                """
-        private const val SHADER_MAIN = """vec4 main(vec2 p) {
-                    vec4 color1 = ripple(p,
-                        34 * in_distortion_strength, // distort_xy
-                        0.012 // frequency
-                    );
-                    vec4 color2 = ripple(p,
-                        49 * in_distortion_strength, // distort_xy
-                        0.018 // frequency
-                    );
-                    // Alpha blend between two layers.
-                    return vec4(color1.xyz + color2.xyz
-                        * (1 - color1.w), color1.w + color2.w * (1-color1.w));
-                }"""
-        private const val SHADER = SHADER_UNIFORMS + SHADER_LIB + SHADER_MAIN
-    }
-
-    /**
-     * Maximum radius of the ripple.
-     */
-    var maxRadius: Float = 0.0f
-
-    /**
-     * Origin coordinate of the ripple.
-     */
-    var origin: PointF = PointF()
-        set(value) {
-            field = value
-            setFloatUniform("in_origin", value.x, value.y)
-        }
-
-    /**
-     * Progress of the ripple. Float value between [0, 1].
-     */
-    var progress: Float = 0.0f
-        set(value) {
-            field = value
-            setFloatUniform("in_radius",
-                    (1 - (1 - value) * (1 - value) * (1 - value))* maxRadius)
-            setFloatUniform("in_blur", MathUtils.lerp(1f, 0.7f, value))
-        }
-
-    /**
-     * Distortion strength between [0, 1], with 0 being no distortion and 1 being full distortion.
-     */
-    var distortionStrength: Float = 0.0f
-        set(value) {
-            field = value
-            setFloatUniform("in_distortion_strength", value)
-        }
-
-    /**
-     * Play time since the start of the effect in seconds.
-     */
-    var time: Float = 0.0f
-        set(value) {
-            field = value * 0.001f
-            setFloatUniform("in_time", field)
-            setFloatUniform("in_phase1", field * 3f + 0.367f)
-            setFloatUniform("in_phase2", field * 7.2f * 1.531f)
-        }
-
-    /**
-     * A hex value representing the ripple color, in the format of ARGB
-     */
-    var color: Int = 0xffffff.toInt()
-        set(value) {
-            field = value
-            setColorUniform("in_color", value)
-        }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/charging/RippleShader.kt b/packages/SystemUI/src/com/android/systemui/statusbar/charging/RippleShader.kt
deleted file mode 100644
index bdad36c..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/charging/RippleShader.kt
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.systemui.statusbar.charging
-
-import android.graphics.PointF
-import android.graphics.RuntimeShader
-import android.util.MathUtils
-
-/**
- * Shader class that renders an expanding charging ripple effect. A charging ripple contains
- * three elements:
- * 1. an expanding filled circle that appears in the beginning and quickly fades away
- * 2. an expanding ring that appears throughout the effect
- * 3. an expanding ring-shaped area that reveals noise over #2.
- *
- * Modeled after frameworks/base/graphics/java/android/graphics/drawable/RippleShader.java.
- */
-class RippleShader internal constructor() : RuntimeShader(SHADER) {
-    companion object {
-        private const val SHADER_UNIFORMS = """uniform vec2 in_origin;
-                uniform float in_progress;
-                uniform float in_maxRadius;
-                uniform float in_time;
-                uniform float in_distort_radial;
-                uniform float in_distort_xy;
-                uniform float in_radius;
-                uniform float in_fadeSparkle;
-                uniform float in_fadeCircle;
-                uniform float in_fadeRing;
-                uniform float in_blur;
-                uniform float in_pixelDensity;
-                layout(color) uniform vec4 in_color;
-                uniform float in_sparkle_strength;"""
-        private const val SHADER_LIB = """float triangleNoise(vec2 n) {
-                    n  = fract(n * vec2(5.3987, 5.4421));
-                    n += dot(n.yx, n.xy + vec2(21.5351, 14.3137));
-                    float xy = n.x * n.y;
-                    return fract(xy * 95.4307) + fract(xy * 75.04961) - 1.0;
-                }
-                const float PI = 3.1415926535897932384626;
-
-                float threshold(float v, float l, float h) {
-                  return step(l, v) * (1.0 - step(h, v));
-                }
-
-                float sparkles(vec2 uv, float t) {
-                  float n = triangleNoise(uv);
-                  float s = 0.0;
-                  for (float i = 0; i < 4; i += 1) {
-                    float l = i * 0.01;
-                    float h = l + 0.1;
-                    float o = smoothstep(n - l, h, n);
-                    o *= abs(sin(PI * o * (t + 0.55 * i)));
-                    s += o;
-                  }
-                  return s;
-                }
-
-                float softCircle(vec2 uv, vec2 xy, float radius, float blur) {
-                  float blurHalf = blur * 0.5;
-                  float d = distance(uv, xy);
-                  return 1. - smoothstep(1. - blurHalf, 1. + blurHalf, d / radius);
-                }
-
-                float softRing(vec2 uv, vec2 xy, float radius, float blur) {
-                  float thickness_half = radius * 0.25;
-                  float circle_outer = softCircle(uv, xy, radius + thickness_half, blur);
-                  float circle_inner = softCircle(uv, xy, radius - thickness_half, blur);
-                  return circle_outer - circle_inner;
-                }
-
-                vec2 distort(vec2 p, vec2 origin, float time,
-                    float distort_amount_radial, float distort_amount_xy) {
-                    float2 distance = origin - p;
-                    float angle = atan(distance.y, distance.x);
-                    return p + vec2(sin(angle * 8 + time * 0.003 + 1.641),
-                                    cos(angle * 5 + 2.14 + time * 0.00412)) * distort_amount_radial
-                             + vec2(sin(p.x * 0.01 + time * 0.00215 + 0.8123),
-                                    cos(p.y * 0.01 + time * 0.005931)) * distort_amount_xy;
-                }"""
-        private const val SHADER_MAIN = """vec4 main(vec2 p) {
-                    vec2 p_distorted = distort(p, in_origin, in_time, in_distort_radial,
-                        in_distort_xy);
-
-                    // Draw shapes
-                    float sparkleRing = softRing(p_distorted, in_origin, in_radius, in_blur);
-                    float sparkle = sparkles(p - mod(p, in_pixelDensity * 0.8), in_time * 0.00175)
-                        * sparkleRing * in_fadeSparkle;
-                    float circle = softCircle(p_distorted, in_origin, in_radius * 1.2, in_blur);
-                    float rippleAlpha = max(circle * in_fadeCircle,
-                        softRing(p_distorted, in_origin, in_radius, in_blur) * in_fadeRing) * 0.45;
-                    vec4 ripple = in_color * rippleAlpha;
-                    return mix(ripple, vec4(sparkle), sparkle * in_sparkle_strength);
-                }"""
-        private const val SHADER = SHADER_UNIFORMS + SHADER_LIB + SHADER_MAIN
-
-        private fun subProgress(start: Float, end: Float, progress: Float): Float {
-            val min = Math.min(start, end)
-            val max = Math.max(start, end)
-            val sub = Math.min(Math.max(progress, min), max)
-            return (sub - start) / (end - start)
-        }
-    }
-
-    /**
-     * Maximum radius of the ripple.
-     */
-    var radius: Float = 0.0f
-        set(value) {
-            field = value
-            setFloatUniform("in_maxRadius", value)
-        }
-
-    /**
-     * Origin coordinate of the ripple.
-     */
-    var origin: PointF = PointF()
-        set(value) {
-            field = value
-            setFloatUniform("in_origin", value.x, value.y)
-        }
-
-    /**
-     * Progress of the ripple. Float value between [0, 1].
-     */
-    var progress: Float = 0.0f
-        set(value) {
-            field = value
-            setFloatUniform("in_progress", value)
-            setFloatUniform("in_radius",
-                    (1 - (1 - value) * (1 - value) * (1 - value))* radius)
-            setFloatUniform("in_blur", MathUtils.lerp(1.25f, 0.5f, value))
-
-            val fadeIn = subProgress(0f, 0.1f, value)
-            val fadeOutNoise = subProgress(0.4f, 1f, value)
-            var fadeOutRipple = 0f
-            var fadeCircle = 0f
-            if (shouldFadeOutRipple) {
-                fadeCircle = subProgress(0f, 0.2f, value)
-                fadeOutRipple = subProgress(0.3f, 1f, value)
-            }
-            setFloatUniform("in_fadeSparkle", Math.min(fadeIn, 1 - fadeOutNoise))
-            setFloatUniform("in_fadeCircle", 1 - fadeCircle)
-            setFloatUniform("in_fadeRing", Math.min(fadeIn, 1 - fadeOutRipple))
-        }
-
-    /**
-     * Play time since the start of the effect.
-     */
-    var time: Float = 0.0f
-        set(value) {
-            field = value
-            setFloatUniform("in_time", value)
-        }
-
-    /**
-     * A hex value representing the ripple color, in the format of ARGB
-     */
-    var color: Int = 0xffffff.toInt()
-        set(value) {
-            field = value
-            setColorUniform("in_color", value)
-        }
-
-    /**
-     * Noise sparkle intensity. Expected value between [0, 1]. The sparkle is white, and thus
-     * with strength 0 it's transparent, leaving the ripple fully smooth, while with strength 1
-     * it's opaque white and looks the most grainy.
-     */
-    var sparkleStrength: Float = 0.0f
-        set(value) {
-            field = value
-            setFloatUniform("in_sparkle_strength", value)
-        }
-
-    /**
-     * Distortion strength of the ripple. Expected value between[0, 1].
-     */
-    var distortionStrength: Float = 0.0f
-        set(value) {
-            field = value
-            setFloatUniform("in_distort_radial", 75 * progress * value)
-            setFloatUniform("in_distort_xy", 75 * value)
-        }
-
-    var pixelDensity: Float = 1.0f
-        set(value) {
-            field = value
-            setFloatUniform("in_pixelDensity", value)
-        }
-
-    var shouldFadeOutRipple: Boolean = true
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/charging/WiredChargingRippleController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/charging/WiredChargingRippleController.kt
deleted file mode 100644
index 5df593b..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/charging/WiredChargingRippleController.kt
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.statusbar.charging
-
-import android.content.Context
-import android.content.res.Configuration
-import android.graphics.PixelFormat
-import android.graphics.PointF
-import android.os.SystemProperties
-import android.util.DisplayMetrics
-import android.view.View
-import android.view.WindowManager
-import com.android.internal.annotations.VisibleForTesting
-import com.android.internal.logging.UiEvent
-import com.android.internal.logging.UiEventLogger
-import com.android.settingslib.Utils
-import com.android.systemui.R
-import com.android.systemui.dagger.SysUISingleton
-import com.android.systemui.flags.FeatureFlags
-import com.android.systemui.flags.Flags
-import com.android.systemui.statusbar.commandline.Command
-import com.android.systemui.statusbar.commandline.CommandRegistry
-import com.android.systemui.statusbar.policy.BatteryController
-import com.android.systemui.statusbar.policy.ConfigurationController
-import com.android.systemui.util.leak.RotationUtils
-import com.android.systemui.util.time.SystemClock
-import java.io.PrintWriter
-import javax.inject.Inject
-import kotlin.math.min
-import kotlin.math.pow
-
-private const val MAX_DEBOUNCE_LEVEL = 3
-private const val BASE_DEBOUNCE_TIME = 2000
-
-/***
- * Controls the ripple effect that shows when wired charging begins.
- * The ripple uses the accent color of the current theme.
- */
-@SysUISingleton
-class WiredChargingRippleController @Inject constructor(
-    commandRegistry: CommandRegistry,
-    private val batteryController: BatteryController,
-    private val configurationController: ConfigurationController,
-    featureFlags: FeatureFlags,
-    private val context: Context,
-    private val windowManager: WindowManager,
-    private val systemClock: SystemClock,
-    private val uiEventLogger: UiEventLogger
-) {
-    private var pluggedIn: Boolean? = null
-    private val rippleEnabled: Boolean = featureFlags.isEnabled(Flags.CHARGING_RIPPLE) &&
-            !SystemProperties.getBoolean("persist.debug.suppress-charging-ripple", false)
-    private var normalizedPortPosX: Float = context.resources.getFloat(
-            R.dimen.physical_charger_port_location_normalized_x)
-    private var normalizedPortPosY: Float = context.resources.getFloat(
-            R.dimen.physical_charger_port_location_normalized_y)
-    private val windowLayoutParams = WindowManager.LayoutParams().apply {
-        width = WindowManager.LayoutParams.MATCH_PARENT
-        height = WindowManager.LayoutParams.MATCH_PARENT
-        layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
-        format = PixelFormat.TRANSLUCENT
-        type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY
-        fitInsetsTypes = 0 // Ignore insets from all system bars
-        title = "Wired Charging Animation"
-        flags = (WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
-                or WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE)
-        setTrustedOverlay()
-    }
-    private var lastTriggerTime: Long? = null
-    private var debounceLevel = 0
-
-    @VisibleForTesting
-    var rippleView: ChargingRippleView = ChargingRippleView(context, attrs = null)
-
-    init {
-        pluggedIn = batteryController.isPluggedIn
-        commandRegistry.registerCommand("charging-ripple") { ChargingRippleCommand() }
-        updateRippleColor()
-    }
-
-    fun registerCallbacks() {
-        val batteryStateChangeCallback = object : BatteryController.BatteryStateChangeCallback {
-            override fun onBatteryLevelChanged(
-                level: Int,
-                nowPluggedIn: Boolean,
-                charging: Boolean
-            ) {
-                // Suppresses the ripple when the state change comes from wireless charging.
-                if (batteryController.isPluggedInWireless) {
-                    return
-                }
-                val wasPluggedIn = pluggedIn
-                pluggedIn = nowPluggedIn
-                if ((wasPluggedIn == null || !wasPluggedIn) && nowPluggedIn) {
-                    startRippleWithDebounce()
-                }
-            }
-        }
-        batteryController.addCallback(batteryStateChangeCallback)
-
-        val configurationChangedListener = object : ConfigurationController.ConfigurationListener {
-            override fun onUiModeChanged() {
-                updateRippleColor()
-            }
-            override fun onThemeChanged() {
-                updateRippleColor()
-            }
-
-            override fun onConfigChanged(newConfig: Configuration?) {
-                normalizedPortPosX = context.resources.getFloat(
-                        R.dimen.physical_charger_port_location_normalized_x)
-                normalizedPortPosY = context.resources.getFloat(
-                        R.dimen.physical_charger_port_location_normalized_y)
-            }
-        }
-        configurationController.addCallback(configurationChangedListener)
-    }
-
-    // Lazily debounce ripple to avoid triggering ripple constantly (e.g. from flaky chargers).
-    internal fun startRippleWithDebounce() {
-        val now = systemClock.elapsedRealtime()
-        // Debounce wait time = 2 ^ debounce level
-        if (lastTriggerTime == null ||
-                (now - lastTriggerTime!!) > BASE_DEBOUNCE_TIME * (2.0.pow(debounceLevel))) {
-            // Not waiting for debounce. Start ripple.
-            startRipple()
-            debounceLevel = 0
-        } else {
-            // Still waiting for debounce. Ignore ripple and bump debounce level.
-            debounceLevel = min(MAX_DEBOUNCE_LEVEL, debounceLevel + 1)
-        }
-        lastTriggerTime = now
-    }
-
-    fun startRipple() {
-        if (rippleView.rippleInProgress || rippleView.parent != null) {
-            // Skip if ripple is still playing, or not playing but already added the parent
-            // (which might happen just before the animation starts or right after
-            // the animation ends.)
-            return
-        }
-        windowLayoutParams.packageName = context.opPackageName
-        rippleView.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener {
-            override fun onViewDetachedFromWindow(view: View?) {}
-
-            override fun onViewAttachedToWindow(view: View?) {
-                layoutRipple()
-                rippleView.startRipple(Runnable {
-                    windowManager.removeView(rippleView)
-                })
-                rippleView.removeOnAttachStateChangeListener(this)
-            }
-        })
-        windowManager.addView(rippleView, windowLayoutParams)
-        uiEventLogger.log(WiredChargingRippleEvent.CHARGING_RIPPLE_PLAYED)
-    }
-
-    private fun layoutRipple() {
-        val displayMetrics = DisplayMetrics()
-        context.display.getRealMetrics(displayMetrics)
-        val width = displayMetrics.widthPixels
-        val height = displayMetrics.heightPixels
-        rippleView.radius = Integer.max(width, height).toFloat()
-        rippleView.origin = when (RotationUtils.getExactRotation(context)) {
-            RotationUtils.ROTATION_LANDSCAPE -> {
-                PointF(width * normalizedPortPosY, height * (1 - normalizedPortPosX))
-            }
-            RotationUtils.ROTATION_UPSIDE_DOWN -> {
-                PointF(width * (1 - normalizedPortPosX), height * (1 - normalizedPortPosY))
-            }
-            RotationUtils.ROTATION_SEASCAPE -> {
-                PointF(width * (1 - normalizedPortPosY), height * normalizedPortPosX)
-            }
-            else -> {
-                // ROTATION_NONE
-                PointF(width * normalizedPortPosX, height * normalizedPortPosY)
-            }
-        }
-    }
-
-    private fun updateRippleColor() {
-        rippleView.setColor(
-                Utils.getColorAttr(context, android.R.attr.colorAccent).defaultColor)
-    }
-
-    inner class ChargingRippleCommand : Command {
-        override fun execute(pw: PrintWriter, args: List<String>) {
-            startRipple()
-        }
-
-        override fun help(pw: PrintWriter) {
-            pw.println("Usage: adb shell cmd statusbar charging-ripple")
-        }
-    }
-
-    enum class WiredChargingRippleEvent(private val _id: Int) : UiEventLogger.UiEventEnum {
-        @UiEvent(doc = "Wired charging ripple effect played")
-        CHARGING_RIPPLE_PLAYED(829);
-
-        override fun getId() = _id
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/CallbackHandler.java b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/CallbackHandler.java
index 6914ae6..1638780 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/CallbackHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/CallbackHandler.java
@@ -21,6 +21,7 @@
 import android.telephony.SubscriptionInfo;
 
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.systemui.dagger.SysUISingleton;
 import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.statusbar.connectivity.NetworkController.EmergencyListener;
 
@@ -36,6 +37,7 @@
  * Implements network listeners and forwards the calls along onto other listeners but on
  * the current or specified Looper.
  */
+@SysUISingleton
 public class CallbackHandler extends Handler implements EmergencyListener, SignalCallback {
     private static final String TAG = "CallbackHandler";
     private static final int MSG_EMERGENCE_CHANGED           = 0;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileSignalController.java
index 9d8667a..5cf1abc 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileSignalController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileSignalController.java
@@ -26,25 +26,17 @@
 import android.os.Handler;
 import android.os.Looper;
 import android.provider.Settings.Global;
-import android.telephony.AccessNetworkConstants;
 import android.telephony.CellSignalStrength;
 import android.telephony.CellSignalStrengthCdma;
-import android.telephony.ServiceState;
 import android.telephony.SignalStrength;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
-import android.telephony.ims.ImsException;
-import android.telephony.ims.ImsMmTelManager;
-import android.telephony.ims.ImsReasonInfo;
-import android.telephony.ims.ImsRegistrationAttributes;
-import android.telephony.ims.RegistrationManager.RegistrationCallback;
 import android.text.Html;
 import android.text.TextUtils;
 import android.util.Log;
 
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.settingslib.AccessibilityContentDescriptions;
 import com.android.settingslib.SignalIcon.MobileIconGroup;
 import com.android.settingslib.graph.SignalDrawable;
 import com.android.settingslib.mobile.MobileMappings.Config;
@@ -54,8 +46,6 @@
 import com.android.settingslib.mobile.TelephonyIcons;
 import com.android.settingslib.net.SignalStrengthUtil;
 import com.android.systemui.R;
-import com.android.systemui.flags.FeatureFlags;
-import com.android.systemui.flags.Flags;
 import com.android.systemui.util.CarrierConfigTracker;
 
 import java.io.PrintWriter;
@@ -70,33 +60,22 @@
 public class MobileSignalController extends SignalController<MobileState, MobileIconGroup> {
     private static final SimpleDateFormat SSDF = new SimpleDateFormat("MM-dd HH:mm:ss.SSS");
     private static final int STATUS_HISTORY_SIZE = 64;
-    private static final int IMS_TYPE_WWAN = 1;
-    private static final int IMS_TYPE_WLAN = 2;
-    private static final int IMS_TYPE_WLAN_CROSS_SIM = 3;
     private final TelephonyManager mPhone;
     private final CarrierConfigTracker mCarrierConfigTracker;
-    private final ImsMmTelManager mImsMmTelManager;
     private final SubscriptionDefaults mDefaults;
     private final String mNetworkNameDefault;
     private final String mNetworkNameSeparator;
     private final ContentObserver mObserver;
-    private final boolean mProviderModelBehavior;
-    private final Handler mReceiverHandler;
-    private int mImsType = IMS_TYPE_WWAN;
     // Save entire info for logging, we only use the id.
     final SubscriptionInfo mSubscriptionInfo;
     private Map<String, MobileIconGroup> mNetworkToIconLookup;
 
-    private int mLastLevel;
     private MobileIconGroup mDefaultIcons;
     private Config mConfig;
     @VisibleForTesting
     boolean mInflateSignalStrengths = false;
-    private int mLastWwanLevel;
-    private int mLastWlanLevel;
-    private int mLastWlanCrossSimLevel;
     @VisibleForTesting
-    MobileStatusTracker mMobileStatusTracker;
+    final MobileStatusTracker mMobileStatusTracker;
 
     // Save the previous STATUS_HISTORY_SIZE states for logging.
     private final String[] mMobileStatusHistory = new String[STATUS_HISTORY_SIZE];
@@ -133,52 +112,6 @@
                 }
             };
 
-    private final RegistrationCallback mRegistrationCallback = new RegistrationCallback() {
-        @Override
-        public void onRegistered(ImsRegistrationAttributes attributes) {
-            Log.d(mTag, "onRegistered: " + "attributes=" + attributes);
-            int imsTransportType = attributes.getTransportType();
-            int registrationAttributes = attributes.getAttributeFlags();
-            if (imsTransportType == AccessNetworkConstants.TRANSPORT_TYPE_WWAN) {
-                mImsType = IMS_TYPE_WWAN;
-                IconState statusIcon = new IconState(
-                        true,
-                        getCallStrengthIcon(mLastWwanLevel, /* isWifi= */false),
-                        getCallStrengthDescription(mLastWwanLevel, /* isWifi= */false));
-                notifyCallStateChange(statusIcon, mSubscriptionInfo.getSubscriptionId());
-            } else if (imsTransportType == AccessNetworkConstants.TRANSPORT_TYPE_WLAN) {
-                if (registrationAttributes == 0) {
-                    mImsType = IMS_TYPE_WLAN;
-                    IconState statusIcon = new IconState(
-                            true,
-                            getCallStrengthIcon(mLastWlanLevel, /* isWifi= */true),
-                            getCallStrengthDescription(mLastWlanLevel, /* isWifi= */true));
-                    notifyCallStateChange(statusIcon, mSubscriptionInfo.getSubscriptionId());
-                } else if (registrationAttributes
-                        == ImsRegistrationAttributes.ATTR_EPDG_OVER_CELL_INTERNET) {
-                    mImsType = IMS_TYPE_WLAN_CROSS_SIM;
-                    IconState statusIcon = new IconState(
-                            true,
-                            getCallStrengthIcon(mLastWlanCrossSimLevel, /* isWifi= */false),
-                            getCallStrengthDescription(
-                                    mLastWlanCrossSimLevel, /* isWifi= */false));
-                    notifyCallStateChange(statusIcon, mSubscriptionInfo.getSubscriptionId());
-                }
-            }
-        }
-
-        @Override
-        public void onUnregistered(ImsReasonInfo info) {
-            Log.d(mTag, "onDeregistered: " + "info=" + info);
-            mImsType = IMS_TYPE_WWAN;
-            IconState statusIcon = new IconState(
-                    true,
-                    getCallStrengthIcon(mLastWwanLevel, /* isWifi= */false),
-                    getCallStrengthDescription(mLastWwanLevel, /* isWifi= */false));
-            notifyCallStateChange(statusIcon, mSubscriptionInfo.getSubscriptionId());
-        }
-    };
-
     // TODO: Reduce number of vars passed in, if we have the NetworkController, probably don't
     // need listener lists anymore.
     public MobileSignalController(
@@ -192,7 +125,7 @@
             SubscriptionDefaults defaults,
             Looper receiverLooper,
             CarrierConfigTracker carrierConfigTracker,
-            FeatureFlags featureFlags
+            MobileStatusTrackerFactory mobileStatusTrackerFactory
     ) {
         super("MobileSignalController(" + info.getSubscriptionId() + ")", context,
                 NetworkCapabilities.TRANSPORT_CELLULAR, callbackHandler,
@@ -206,7 +139,6 @@
                 R.string.status_bar_network_name_separator).toString();
         mNetworkNameDefault = getTextIfExists(
                 com.android.internal.R.string.lockscreen_carrier_default).toString();
-        mReceiverHandler = new Handler(receiverLooper);
 
         mNetworkToIconLookup = mapIconSets(mConfig);
         mDefaultIcons = getDefaultIcons(mConfig);
@@ -223,10 +155,7 @@
                 updateTelephony();
             }
         };
-        mImsMmTelManager = ImsMmTelManager.createForSubscriptionId(info.getSubscriptionId());
-        mMobileStatusTracker = new MobileStatusTracker(mPhone, receiverLooper,
-                info, mDefaults, mMobileCallback);
-        mProviderModelBehavior = featureFlags.isEnabled(Flags.COMBINED_STATUS_BAR_SIGNAL_ICONS);
+        mMobileStatusTracker = mobileStatusTrackerFactory.createTracker(mMobileCallback);
     }
 
     void setConfiguration(Config config) {
@@ -271,41 +200,14 @@
         mContext.getContentResolver().registerContentObserver(Global.getUriFor(
                 Global.MOBILE_DATA + mSubscriptionInfo.getSubscriptionId()),
                 true, mObserver);
-        if (mProviderModelBehavior) {
-            mReceiverHandler.post(mTryRegisterIms);
-        }
     }
 
-    // There is no listener to monitor whether the IMS service is ready, so we have to retry the
-    // IMS registration.
-    private final Runnable mTryRegisterIms = new Runnable() {
-        private static final int MAX_RETRY = 12;
-        private int mRetryCount;
-
-        @Override
-        public void run() {
-            try {
-                mRetryCount++;
-                mImsMmTelManager.registerImsRegistrationCallback(
-                        mReceiverHandler::post, mRegistrationCallback);
-                Log.d(mTag, "registerImsRegistrationCallback succeeded");
-            } catch (RuntimeException | ImsException e) {
-                if (mRetryCount < MAX_RETRY) {
-                    Log.e(mTag, mRetryCount + " registerImsRegistrationCallback failed", e);
-                    // Wait for 5 seconds to retry
-                    mReceiverHandler.postDelayed(mTryRegisterIms, 5000);
-                }
-            }
-        }
-    };
-
     /**
      * Stop listening for phone state changes.
      */
     public void unregisterListener() {
         mMobileStatusTracker.setListening(false);
         mContext.getContentResolver().unregisterContentObserver(mObserver);
-        mImsMmTelManager.unregisterImsRegistrationCallback(mRegistrationCallback);
     }
 
     private void updateInflateSignalStrength() {
@@ -394,7 +296,7 @@
         CharSequence qsDescription = null;
 
         if (mCurrentState.dataSim) {
-            // If using provider model behavior, only show QS icons if the state is also default
+            // only show QS icons if the state is also default
             if (!mCurrentState.isDefault) {
                 return new QsInfo(qsTypeIcon, qsIcon, qsDescription);
             }
@@ -416,32 +318,15 @@
 
     private SbInfo getSbInfo(String contentDescription, int dataTypeIcon) {
         final boolean dataDisabled = mCurrentState.isDataDisabledOrNotDefault();
-        boolean showTriangle = false;
-        int typeIcon = 0;
-        IconState statusIcon = null;
+        IconState statusIcon = new IconState(
+                mCurrentState.enabled && !mCurrentState.airplaneMode,
+                getCurrentIconId(), contentDescription);
 
-        if (mProviderModelBehavior) {
-            boolean showDataIconStatusBar = (mCurrentState.dataConnected || dataDisabled)
-                    && (mCurrentState.dataSim && mCurrentState.isDefault);
-            typeIcon =
-                    (showDataIconStatusBar || mConfig.alwaysShowDataRatIcon) ? dataTypeIcon : 0;
-            showDataIconStatusBar |= mCurrentState.roaming;
-            statusIcon = new IconState(
-                    showDataIconStatusBar && !mCurrentState.airplaneMode,
-                    getCurrentIconId(), contentDescription);
-
-            showTriangle = showDataIconStatusBar && !mCurrentState.airplaneMode;
-        } else {
-            statusIcon = new IconState(
-                    mCurrentState.enabled && !mCurrentState.airplaneMode,
-                    getCurrentIconId(), contentDescription);
-
-            boolean showDataIconInStatusBar =
-                    (mCurrentState.dataConnected && mCurrentState.isDefault) || dataDisabled;
-            typeIcon =
-                    (showDataIconInStatusBar || mConfig.alwaysShowDataRatIcon) ? dataTypeIcon : 0;
-            showTriangle = mCurrentState.enabled && !mCurrentState.airplaneMode;
-        }
+        boolean showDataIconInStatusBar =
+                (mCurrentState.dataConnected && mCurrentState.isDefault) || dataDisabled;
+        int typeIcon =
+                (showDataIconInStatusBar || mConfig.alwaysShowDataRatIcon) ? dataTypeIcon : 0;
+        boolean showTriangle = mCurrentState.enabled && !mCurrentState.airplaneMode;
 
         return new SbInfo(showTriangle, typeIcon, statusIcon);
     }
@@ -560,144 +445,7 @@
     }
 
     private void updateMobileStatus(MobileStatus mobileStatus) {
-        int lastVoiceState = mCurrentState.getVoiceServiceState();
         mCurrentState.setFromMobileStatus(mobileStatus);
-
-        notifyMobileLevelChangeIfNecessary(mobileStatus.signalStrength);
-        if (mProviderModelBehavior) {
-            maybeNotifyCallStateChanged(lastVoiceState);
-        }
-    }
-
-    /** Call state changed is only applicable when provider model behavior is true */
-    private void maybeNotifyCallStateChanged(int lastVoiceState) {
-        int currentVoiceState = mCurrentState.getVoiceServiceState();
-        if (lastVoiceState == currentVoiceState) {
-            return;
-        }
-        // Only update the no calling Status in the below scenarios
-        // 1. The first valid voice state has been received
-        // 2. The voice state has been changed and either the last or current state is
-        //    ServiceState.STATE_IN_SERVICE
-        if (lastVoiceState == -1
-                || (lastVoiceState == ServiceState.STATE_IN_SERVICE
-                        || currentVoiceState == ServiceState.STATE_IN_SERVICE)) {
-            boolean isNoCalling = mCurrentState.isNoCalling();
-            isNoCalling &= !hideNoCalling();
-            IconState statusIcon = new IconState(isNoCalling,
-                    R.drawable.ic_qs_no_calling_sms,
-                    getTextIfExists(AccessibilityContentDescriptions.NO_CALLING).toString());
-            notifyCallStateChange(statusIcon, mSubscriptionInfo.getSubscriptionId());
-        }
-    }
-
-    void updateNoCallingState() {
-        int currentVoiceState = mCurrentState.getVoiceServiceState();
-        boolean isNoCalling = currentVoiceState != ServiceState.STATE_IN_SERVICE;
-        isNoCalling &= !hideNoCalling();
-        IconState statusIcon = new IconState(isNoCalling,
-                R.drawable.ic_qs_no_calling_sms,
-                getTextIfExists(AccessibilityContentDescriptions.NO_CALLING).toString());
-        notifyCallStateChange(statusIcon, mSubscriptionInfo.getSubscriptionId());
-    }
-
-    private boolean hideNoCalling() {
-        return mNetworkController.hasDefaultNetwork()
-                && mCarrierConfigTracker.getNoCallingConfig(mSubscriptionInfo.getSubscriptionId());
-    }
-
-    private int getCallStrengthIcon(int level, boolean isWifi) {
-        return isWifi ? TelephonyIcons.WIFI_CALL_STRENGTH_ICONS[level]
-                : TelephonyIcons.MOBILE_CALL_STRENGTH_ICONS[level];
-    }
-
-    private String getCallStrengthDescription(int level, boolean isWifi) {
-        return isWifi
-                ? getTextIfExists(AccessibilityContentDescriptions.WIFI_CONNECTION_STRENGTH[level])
-                        .toString()
-                : getTextIfExists(AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH[level])
-                        .toString();
-    }
-
-    void refreshCallIndicator(SignalCallback callback) {
-        boolean isNoCalling = mCurrentState.isNoCalling();
-        isNoCalling &= !hideNoCalling();
-        IconState statusIcon = new IconState(isNoCalling,
-                R.drawable.ic_qs_no_calling_sms,
-                getTextIfExists(AccessibilityContentDescriptions.NO_CALLING).toString());
-        callback.setCallIndicator(statusIcon, mSubscriptionInfo.getSubscriptionId());
-
-        switch (mImsType) {
-            case IMS_TYPE_WWAN:
-                statusIcon = new IconState(
-                        true,
-                        getCallStrengthIcon(mLastWwanLevel, /* isWifi= */false),
-                        getCallStrengthDescription(mLastWwanLevel, /* isWifi= */false));
-                break;
-            case IMS_TYPE_WLAN:
-                statusIcon = new IconState(
-                        true,
-                        getCallStrengthIcon(mLastWlanLevel, /* isWifi= */true),
-                        getCallStrengthDescription(mLastWlanLevel, /* isWifi= */true));
-                break;
-            case IMS_TYPE_WLAN_CROSS_SIM:
-                statusIcon = new IconState(
-                        true,
-                        getCallStrengthIcon(mLastWlanCrossSimLevel, /* isWifi= */false),
-                        getCallStrengthDescription(mLastWlanCrossSimLevel, /* isWifi= */false));
-        }
-        callback.setCallIndicator(statusIcon, mSubscriptionInfo.getSubscriptionId());
-    }
-
-    void notifyWifiLevelChange(int level) {
-        if (!mProviderModelBehavior) {
-            return;
-        }
-        mLastWlanLevel = level;
-        if (mImsType != IMS_TYPE_WLAN) {
-            return;
-        }
-        IconState statusIcon = new IconState(
-                true,
-                getCallStrengthIcon(level, /* isWifi= */true),
-                getCallStrengthDescription(level, /* isWifi= */true));
-        notifyCallStateChange(statusIcon, mSubscriptionInfo.getSubscriptionId());
-    }
-
-    void notifyDefaultMobileLevelChange(int level) {
-        if (!mProviderModelBehavior) {
-            return;
-        }
-        mLastWlanCrossSimLevel = level;
-        if (mImsType != IMS_TYPE_WLAN_CROSS_SIM) {
-            return;
-        }
-        IconState statusIcon = new IconState(
-                true,
-                getCallStrengthIcon(level, /* isWifi= */false),
-                getCallStrengthDescription(level, /* isWifi= */false));
-        notifyCallStateChange(statusIcon, mSubscriptionInfo.getSubscriptionId());
-    }
-
-    void notifyMobileLevelChangeIfNecessary(SignalStrength signalStrength) {
-        if (!mProviderModelBehavior) {
-            return;
-        }
-        int newLevel = getSignalLevel(signalStrength);
-        if (newLevel != mLastLevel) {
-            mLastLevel = newLevel;
-            mLastWwanLevel = newLevel;
-            if (mImsType == IMS_TYPE_WWAN) {
-                IconState statusIcon = new IconState(
-                        true,
-                        getCallStrengthIcon(newLevel, /* isWifi= */false),
-                        getCallStrengthDescription(newLevel, /* isWifi= */false));
-                notifyCallStateChange(statusIcon, mSubscriptionInfo.getSubscriptionId());
-            }
-            if (mCurrentState.dataSim) {
-                mNetworkController.notifyDefaultMobileLevelChange(newLevel);
-            }
-        }
     }
 
     int getSignalLevel(SignalStrength signalStrength) {
@@ -801,19 +549,14 @@
         mMobileStatusHistoryIndex = (mMobileStatusHistoryIndex + 1) % STATUS_HISTORY_SIZE;
     }
 
-    @VisibleForTesting
-    void setImsType(int imsType) {
-        mImsType = imsType;
-    }
-
     @Override
     public void dump(PrintWriter pw) {
         super.dump(pw);
         pw.println("  mSubscription=" + mSubscriptionInfo + ",");
-        pw.println("  mProviderModelBehavior=" + mProviderModelBehavior + ",");
         pw.println("  mInflateSignalStrengths=" + mInflateSignalStrengths + ",");
         pw.println("  isDataDisabled=" + isDataDisabled() + ",");
         pw.println("  mNetworkToIconLookup=" + mNetworkToIconLookup + ",");
+        pw.println("  mMobileStatusTracker.isListening=" + mMobileStatusTracker.isListening());
         pw.println("  MobileStatusHistory");
         int size = 0;
         for (int i = 0; i < STATUS_HISTORY_SIZE; i++) {
@@ -843,6 +586,11 @@
             icon = iconState;
             description = desc;
         }
+
+        @Override
+        public String toString() {
+            return "QsInfo: ratTypeIcon=" + ratTypeIcon + " icon=" + icon;
+        }
     }
 
     /** Box for status bar icon info */
@@ -856,5 +604,11 @@
             ratTypeIcon = typeIcon;
             icon = iconState;
         }
+
+        @Override
+        public String toString() {
+            return "SbInfo: showTriangle=" + showTriangle + " ratTypeIcon=" + ratTypeIcon
+                    + " icon=" + icon;
+        }
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileSignalControllerFactory.kt b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileSignalControllerFactory.kt
new file mode 100644
index 0000000..7938179
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileSignalControllerFactory.kt
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.connectivity
+
+import android.content.Context
+import android.os.Looper
+import android.telephony.SubscriptionInfo
+import android.telephony.TelephonyManager
+import com.android.settingslib.mobile.MobileMappings
+import com.android.settingslib.mobile.MobileStatusTracker
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.util.CarrierConfigTracker
+import javax.inject.Inject
+
+/**
+ * Factory to make MobileSignalController injectable
+ */
+@SysUISingleton
+internal class MobileSignalControllerFactory @Inject constructor(
+    val context: Context,
+    val callbackHandler: CallbackHandler,
+    val carrierConfigTracker: CarrierConfigTracker,
+) {
+    fun createMobileSignalController(
+        config: MobileMappings.Config,
+        hasMobileData: Boolean,
+        phone: TelephonyManager,
+        networkController: NetworkControllerImpl,
+        subscriptionInfo: SubscriptionInfo,
+        subscriptionDefaults: MobileStatusTracker.SubscriptionDefaults,
+        receiverLooper: Looper,
+    ): MobileSignalController {
+        val mobileTrackerFactory = MobileStatusTrackerFactory(
+            phone,
+            receiverLooper,
+            subscriptionInfo,
+            subscriptionDefaults)
+
+        return MobileSignalController(
+            context,
+            config,
+            hasMobileData,
+            phone,
+            callbackHandler,
+            networkController,
+            subscriptionInfo,
+            subscriptionDefaults,
+            receiverLooper,
+            carrierConfigTracker,
+            mobileTrackerFactory,
+        )
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileStatusTrackerFactory.kt b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileStatusTrackerFactory.kt
new file mode 100644
index 0000000..a4c1a198
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/MobileStatusTrackerFactory.kt
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.connectivity
+
+import android.os.Looper
+import android.telephony.SubscriptionInfo
+import android.telephony.TelephonyManager
+import com.android.settingslib.mobile.MobileStatusTracker
+
+/**
+ * Factory for [MobileStatusTracker], which lives in SettingsLib
+ */
+class MobileStatusTrackerFactory (
+    val phone: TelephonyManager,
+    val receiverLooper: Looper,
+    val info: SubscriptionInfo,
+    val defaults: MobileStatusTracker.SubscriptionDefaults,
+) {
+    fun createTracker(
+        callback: MobileStatusTracker.Callback
+    ): MobileStatusTracker {
+        return MobileStatusTracker(
+            phone,
+            receiverLooper,
+            info,
+            defaults,
+            callback)
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java
index d49e1e6..b3dd853 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java
@@ -71,8 +71,9 @@
 import com.android.systemui.demomode.DemoMode;
 import com.android.systemui.demomode.DemoModeController;
 import com.android.systemui.dump.DumpManager;
-import com.android.systemui.flags.FeatureFlags;
-import com.android.systemui.flags.Flags;
+import com.android.systemui.log.LogBuffer;
+import com.android.systemui.log.LogLevel;
+import com.android.systemui.log.dagger.StatusBarNetworkControllerLog;
 import com.android.systemui.qs.tiles.dialog.InternetDialogFactory;
 import com.android.systemui.settings.CurrentUserTracker;
 import com.android.systemui.statusbar.policy.ConfigurationController;
@@ -94,9 +95,12 @@
 import java.util.List;
 import java.util.Locale;
 import java.util.concurrent.Executor;
+import java.util.stream.Collectors;
 
 import javax.inject.Inject;
 
+import kotlin.Unit;
+
 /** Platform implementation of the network controller. **/
 @SysUISingleton
 public class NetworkControllerImpl extends BroadcastReceiver
@@ -128,11 +132,11 @@
     private final BroadcastDispatcher mBroadcastDispatcher;
     private final DemoModeController mDemoModeController;
     private final Object mLock = new Object();
-    private final boolean mProviderModelBehavior;
     private Config mConfig;
     private final CarrierConfigTracker mCarrierConfigTracker;
-    private final FeatureFlags mFeatureFlags;
     private final DumpManager mDumpManager;
+    private final LogBuffer mLogBuffer;
+    private final MobileSignalControllerFactory mMobileFactory;
 
     private TelephonyCallback.ActiveDataSubscriptionIdListener mPhoneStateListener;
     private int mActiveMobileDataSubscription = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
@@ -228,10 +232,11 @@
             DemoModeController demoModeController,
             CarrierConfigTracker carrierConfigTracker,
             WifiStatusTrackerFactory trackerFactory,
+            MobileSignalControllerFactory mobileFactory,
             @Main Handler handler,
             InternetDialogFactory internetDialogFactory,
-            FeatureFlags featureFlags,
-            DumpManager dumpManager) {
+            DumpManager dumpManager,
+            @StatusBarNetworkControllerLog LogBuffer logBuffer) {
         this(context, connectivityManager,
                 telephonyManager,
                 telephonyListenerManager,
@@ -249,9 +254,10 @@
                 demoModeController,
                 carrierConfigTracker,
                 trackerFactory,
+                mobileFactory,
                 handler,
-                featureFlags,
-                dumpManager);
+                dumpManager,
+                logBuffer);
         mReceiverHandler.post(mRegisterListeners);
         mInternetDialogFactory = internetDialogFactory;
     }
@@ -274,9 +280,10 @@
             DemoModeController demoModeController,
             CarrierConfigTracker carrierConfigTracker,
             WifiStatusTrackerFactory trackerFactory,
+            MobileSignalControllerFactory mobileFactory,
             @Main Handler handler,
-            FeatureFlags featureFlags,
-            DumpManager dumpManager
+            DumpManager dumpManager,
+            LogBuffer logBuffer
     ) {
         mContext = context;
         mTelephonyListenerManager = telephonyListenerManager;
@@ -288,6 +295,7 @@
         mCallbackHandler = callbackHandler;
         mDataSaverController = new DataSaverControllerImpl(context);
         mBroadcastDispatcher = broadcastDispatcher;
+        mMobileFactory = mobileFactory;
 
         mSubscriptionManager = subManager;
         mSubDefaults = defaultsHandler;
@@ -295,8 +303,8 @@
         mHasMobileDataFeature = telephonyManager.isDataCapable();
         mDemoModeController = demoModeController;
         mCarrierConfigTracker = carrierConfigTracker;
-        mFeatureFlags = featureFlags;
         mDumpManager = dumpManager;
+        mLogBuffer = logBuffer;
 
         // telephony
         mPhone = telephonyManager;
@@ -446,7 +454,6 @@
         };
 
         mDemoModeController.addCallback(this);
-        mProviderModelBehavior = mFeatureFlags.isEnabled(Flags.COMBINED_STATUS_BAR_SIGNAL_ICONS);
 
         mDumpManager.registerDumpable(TAG, this);
     }
@@ -487,16 +494,16 @@
 
         // broadcasts
         IntentFilter filter = new IntentFilter();
-        filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
-        filter.addAction(Intent.ACTION_SIM_STATE_CHANGED);
-        filter.addAction(TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED);
-        filter.addAction(TelephonyManager.ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED);
-        filter.addAction(Intent.ACTION_SERVICE_STATE);
-        filter.addAction(TelephonyManager.ACTION_SERVICE_PROVIDERS_UPDATED);
+        filter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED);
         filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
         filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
-        filter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED);
+        filter.addAction(Intent.ACTION_SERVICE_STATE);
+        filter.addAction(Intent.ACTION_SIM_STATE_CHANGED);
         filter.addAction(Settings.Panel.ACTION_INTERNET_CONNECTIVITY);
+        filter.addAction(TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED);
+        filter.addAction(TelephonyManager.ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED);
+        filter.addAction(TelephonyManager.ACTION_SERVICE_PROVIDERS_UPDATED);
+        filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
         mBroadcastDispatcher.registerReceiverWithHandler(this, filter, mReceiverHandler);
         mListening = true;
 
@@ -649,20 +656,6 @@
         return controller != null ? controller.getNetworkNameForCarrierWiFi() : "";
     }
 
-    void notifyWifiLevelChange(int level) {
-        for (int i = 0; i < mMobileSignalControllers.size(); i++) {
-            MobileSignalController mobileSignalController = mMobileSignalControllers.valueAt(i);
-            mobileSignalController.notifyWifiLevelChange(level);
-        }
-    }
-
-    void notifyDefaultMobileLevelChange(int level) {
-        for (int i = 0; i < mMobileSignalControllers.size(); i++) {
-            MobileSignalController mobileSignalController = mMobileSignalControllers.valueAt(i);
-            mobileSignalController.notifyDefaultMobileLevelChange(level);
-        }
-    }
-
     private void notifyControllersMobileDataChanged() {
         for (int i = 0; i < mMobileSignalControllers.size(); i++) {
             MobileSignalController mobileSignalController = mMobileSignalControllers.valueAt(i);
@@ -735,9 +728,6 @@
         for (int i = 0; i < mMobileSignalControllers.size(); i++) {
             MobileSignalController mobileSignalController = mMobileSignalControllers.valueAt(i);
             mobileSignalController.notifyListeners(cb);
-            if (mProviderModelBehavior) {
-                mobileSignalController.refreshCallIndicator(cb);
-            }
         }
         mCallbackHandler.setListening(cb, true);
     }
@@ -770,6 +760,17 @@
             Log.d(TAG, "onReceive: intent=" + intent);
         }
         final String action = intent.getAction();
+        mLogBuffer.log(
+                TAG,
+                LogLevel.INFO,
+                logMessage -> {
+                    logMessage.setStr1(action);
+                    return Unit.INSTANCE;
+                },
+                logMessage -> String.format(
+                        Locale.US,
+                        "Received broadcast with action \"%s\"",
+                        logMessage.getStr1()));
         switch (action) {
             case ConnectivityManager.CONNECTIVITY_ACTION:
                 updateConnectivity();
@@ -841,9 +842,6 @@
         for (int i = 0; i < mMobileSignalControllers.size(); i++) {
             MobileSignalController controller = mMobileSignalControllers.valueAt(i);
             controller.setConfiguration(mConfig);
-            if (mProviderModelBehavior) {
-                controller.refreshCallIndicator(mCallbackHandler);
-            }
         }
         refreshLocale();
     }
@@ -937,6 +935,12 @@
                         : lhs.getSimSlotIndex() - rhs.getSimSlotIndex();
             }
         });
+        Log.i(
+                TAG,
+                String.format(
+                        Locale.US,
+                        "Subscriptions changed: %s",
+                        createSubscriptionChangeStatement(mCurrentSubscriptions, subscriptions)));
         mCurrentSubscriptions = subscriptions;
 
         SparseArray<MobileSignalController> cachedControllers =
@@ -954,11 +958,15 @@
                 mMobileSignalControllers.put(subId, cachedControllers.get(subId));
                 cachedControllers.remove(subId);
             } else {
-                MobileSignalController controller = new MobileSignalController(mContext, mConfig,
-                        mHasMobileDataFeature, mPhone.createForSubscriptionId(subId),
-                        mCallbackHandler, this, subscriptions.get(i),
-                        mSubDefaults, mReceiverHandler.getLooper(), mCarrierConfigTracker,
-                        mFeatureFlags);
+                MobileSignalController controller = mMobileFactory.createMobileSignalController(
+                        mConfig,
+                        mHasMobileDataFeature,
+                        mPhone.createForSubscriptionId(subId),
+                        this,
+                        subscriptions.get(i),
+                        mSubDefaults,
+                        mReceiverHandler.getLooper()
+                );
                 controller.setUserSetupComplete(mUserSetup);
                 mMobileSignalControllers.put(subId, controller);
                 if (subscriptions.get(i).getSimSlotIndex() == 0) {
@@ -1112,24 +1120,11 @@
                 || mValidatedTransports.get(NetworkCapabilities.TRANSPORT_ETHERNET);
 
         pushConnectivityToSignals();
-        if (mProviderModelBehavior) {
-            mNoDefaultNetwork = !mConnectedTransports.get(NetworkCapabilities.TRANSPORT_CELLULAR)
-                    && !mConnectedTransports.get(NetworkCapabilities.TRANSPORT_WIFI)
-                    && !mConnectedTransports.get(NetworkCapabilities.TRANSPORT_ETHERNET);
-            mCallbackHandler.setConnectivityStatus(mNoDefaultNetwork, !mInetCondition,
-                    mNoNetworksAvailable);
-            for (int i = 0; i < mMobileSignalControllers.size(); i++) {
-                MobileSignalController mobileSignalController = mMobileSignalControllers.valueAt(i);
-                mobileSignalController.updateNoCallingState();
-            }
-            notifyAllListeners();
-        } else {
-            mNoDefaultNetwork = !mConnectedTransports.get(NetworkCapabilities.TRANSPORT_CELLULAR)
-                    && !mConnectedTransports.get(NetworkCapabilities.TRANSPORT_WIFI)
-                    && !mConnectedTransports.get(NetworkCapabilities.TRANSPORT_ETHERNET);
-            mCallbackHandler.setConnectivityStatus(mNoDefaultNetwork, !mInetCondition,
-                    mNoNetworksAvailable);
-        }
+        mNoDefaultNetwork = !mConnectedTransports.get(NetworkCapabilities.TRANSPORT_CELLULAR)
+                && !mConnectedTransports.get(NetworkCapabilities.TRANSPORT_WIFI)
+                && !mConnectedTransports.get(NetworkCapabilities.TRANSPORT_ETHERNET);
+        mCallbackHandler.setConnectivityStatus(mNoDefaultNetwork, !mInetCondition,
+                mNoNetworksAvailable);
     }
 
     /**
@@ -1154,6 +1149,7 @@
         pw.print("  hasVoiceCallingFeature()=");
         pw.println(hasVoiceCallingFeature());
         pw.println("  mListening=" + mListening);
+        pw.println("  mActiveMobileDataSubscription=" + mActiveMobileDataSubscription);
 
         pw.println("  - connectivity ------");
         pw.print("  mConnectedTransports=");
@@ -1318,7 +1314,7 @@
                 mMobileSignalControllers.clear();
                 int start = mSubscriptionManager.getActiveSubscriptionInfoCountMax();
                 for (int i = start /* get out of normal index range */; i < start + num; i++) {
-                    subs.add(addSignalController(i, i));
+                    subs.add(addDemoModeSignalController(i, i));
                 }
                 mCallbackHandler.setSubs(subs);
                 for (int i = 0; i < mMobileSignalControllers.size(); i++) {
@@ -1344,7 +1340,7 @@
             List<SubscriptionInfo> subs = new ArrayList<>();
             while (mMobileSignalControllers.size() <= slot) {
                 int nextSlot = mMobileSignalControllers.size();
-                subs.add(addSignalController(nextSlot, nextSlot));
+                subs.add(addDemoModeSignalController(nextSlot, nextSlot));
             }
             if (!subs.isEmpty()) {
                 mCallbackHandler.setSubs(subs);
@@ -1434,14 +1430,20 @@
         mHistoryIndex = (mHistoryIndex + 1) % HISTORY_SIZE;
     }
 
-    private SubscriptionInfo addSignalController(int id, int simSlotIndex) {
+    private SubscriptionInfo addDemoModeSignalController(int id, int simSlotIndex) {
         SubscriptionInfo info = new SubscriptionInfo(id, "", simSlotIndex, "", "", 0, 0, "", 0,
                 null, null, null, "", false, null, null);
-        MobileSignalController controller = new MobileSignalController(mContext,
-                mConfig, mHasMobileDataFeature,
-                mPhone.createForSubscriptionId(info.getSubscriptionId()), mCallbackHandler, this,
-                info, mSubDefaults, mReceiverHandler.getLooper(), mCarrierConfigTracker,
-                mFeatureFlags);
+
+        MobileSignalController controller = mMobileFactory.createMobileSignalController(
+                mConfig,
+                mHasMobileDataFeature,
+                mPhone.createForSubscriptionId(info.getSubscriptionId()),
+                this,
+                info,
+                mSubDefaults,
+                mReceiverHandler.getLooper()
+        );
+
         mMobileSignalControllers.put(id, controller);
         controller.getState().userSetup = true;
         return info;
@@ -1473,4 +1475,23 @@
      * get created will also run on the BG Looper.
      */
     private final Runnable mRegisterListeners = () -> registerListeners();
+
+    /** Returns a logging statement for the given old and new list of {@link SubscriptionInfo} */
+    private static String createSubscriptionChangeStatement(
+            final @Nullable List<SubscriptionInfo> oldSubscriptions,
+            final @Nullable List<SubscriptionInfo> newSubscriptions) {
+        return String.format(
+                Locale.US,
+                "old=%s, new=%s",
+                toSubscriptionIds(oldSubscriptions),
+                toSubscriptionIds(newSubscriptions));
+    }
+
+    /** Returns to a list of subscription IDs for the given list of {@link SubscriptionInfo} */
+    @Nullable
+    private static List<Integer> toSubscriptionIds(
+            final @Nullable List<SubscriptionInfo> subscriptions) {
+        return subscriptions != null ? subscriptions.stream().map(
+                SubscriptionInfo::getSubscriptionId).collect(Collectors.toList()) : null;
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/WifiSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/WifiSignalController.java
index 87cdb17..12f2c22 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/WifiSignalController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/WifiSignalController.java
@@ -222,7 +222,6 @@
         mCurrentState.connected = mWifiTracker.connected;
         mCurrentState.ssid = mWifiTracker.ssid;
         mCurrentState.rssi = mWifiTracker.rssi;
-        boolean levelChanged = mCurrentState.level != mWifiTracker.level;
         mCurrentState.level = mWifiTracker.level;
         mCurrentState.statusLabel = mWifiTracker.statusLabel;
         mCurrentState.isCarrierMerged = mWifiTracker.isCarrierMerged;
@@ -230,10 +229,6 @@
         mCurrentState.iconGroup =
                 mCurrentState.isCarrierMerged ? mCarrierMergedWifiIconGroup
                         : mUnmergedWifiIconGroup;
-
-        if (levelChanged) {
-            mNetworkController.notifyWifiLevelChange(mCurrentState.level);
-        }
     }
 
     boolean isCarrierMergedWifi(int subId) {
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 a62a152..5351024 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/core/StatusBarInitializer.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/core/StatusBarInitializer.kt
@@ -24,6 +24,7 @@
 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
 import java.lang.IllegalStateException
 import javax.inject.Inject
@@ -34,7 +35,8 @@
  */
 @CentralSurfacesScope
 class StatusBarInitializer @Inject constructor(
-    private val windowController: StatusBarWindowController
+    private val windowController: StatusBarWindowController,
+    private val creationListeners: Set<@JvmSuppressWildcards OnStatusBarViewInitializedListener>,
 ) {
 
     var statusBarViewUpdatedListener: OnStatusBarViewUpdatedListener? = null
@@ -56,6 +58,9 @@
                             statusBarFragmentComponent.phoneStatusBarViewController,
                             statusBarFragmentComponent.phoneStatusBarTransitions
                         )
+                        creationListeners.forEach { listener ->
+                            listener.onStatusBarViewInitialized(statusBarFragmentComponent)
+                        }
                     }
 
                     override fun onFragmentViewDestroyed(tag: String?, fragment: Fragment?) {
@@ -69,6 +74,17 @@
                 .commit()
     }
 
+    interface OnStatusBarViewInitializedListener {
+
+        /**
+         * The status bar view has been initialized.
+         *
+         * @param component Dagger component that is created when the status bar view is created.
+         * Can be used to retrieve dependencies from that scope, including the status bar root view.
+         */
+        fun onStatusBarViewInitialized(component: StatusBarFragmentComponent)
+    }
+
     interface OnStatusBarViewUpdatedListener {
         fun onStatusBarViewUpdated(
             statusBarView: PhoneStatusBarView,
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 29411e6..0951e82 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/dagger/CentralSurfacesDependenciesModule.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/dagger/CentralSurfacesDependenciesModule.java
@@ -19,16 +19,17 @@
 import android.app.IActivityManager;
 import android.content.Context;
 import android.os.Handler;
+import android.os.RemoteException;
 import android.service.dreams.IDreamManager;
+import android.util.Log;
 
+import com.android.internal.jank.InteractionJankMonitor;
 import com.android.internal.statusbar.IStatusBarService;
-import com.android.keyguard.KeyguardUpdateMonitor;
 import com.android.systemui.animation.ActivityLaunchAnimator;
 import com.android.systemui.animation.DialogLaunchAnimator;
 import com.android.systemui.dagger.SysUISingleton;
 import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.dump.DumpManager;
-import com.android.systemui.flags.FeatureFlags;
 import com.android.systemui.media.MediaDataManager;
 import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
@@ -41,23 +42,16 @@
 import com.android.systemui.statusbar.NotificationMediaManager;
 import com.android.systemui.statusbar.NotificationRemoteInputManager;
 import com.android.systemui.statusbar.NotificationShadeWindowController;
-import com.android.systemui.statusbar.NotificationViewHierarchyManager;
 import com.android.systemui.statusbar.RemoteInputNotificationRebuilder;
 import com.android.systemui.statusbar.SmartReplyController;
 import com.android.systemui.statusbar.StatusBarStateControllerImpl;
 import com.android.systemui.statusbar.SysuiStatusBarStateController;
 import com.android.systemui.statusbar.commandline.CommandRegistry;
 import com.android.systemui.statusbar.gesture.SwipeStatusBarAwayGestureHandler;
-import com.android.systemui.statusbar.notification.AssistantFeedbackController;
-import com.android.systemui.statusbar.notification.DynamicChildBindController;
-import com.android.systemui.statusbar.notification.DynamicPrivacyController;
 import com.android.systemui.statusbar.notification.NotifPipelineFlags;
 import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.collection.NotifCollection;
 import com.android.systemui.statusbar.notification.collection.NotifPipeline;
-import com.android.systemui.statusbar.notification.collection.legacy.LowPriorityInflationHelper;
-import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy;
-import com.android.systemui.statusbar.notification.collection.legacy.VisualStabilityManager;
 import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
 import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider;
 import com.android.systemui.statusbar.phone.CentralSurfaces;
@@ -67,6 +61,8 @@
 import com.android.systemui.statusbar.phone.ManagedProfileControllerImpl;
 import com.android.systemui.statusbar.phone.StatusBarIconController;
 import com.android.systemui.statusbar.phone.StatusBarIconControllerImpl;
+import com.android.systemui.statusbar.phone.StatusBarIconList;
+import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
 import com.android.systemui.statusbar.phone.StatusBarRemoteInputCallback;
 import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController;
 import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallFlags;
@@ -77,7 +73,6 @@
 import com.android.systemui.tracing.ProtoTracer;
 import com.android.systemui.util.concurrency.DelayableExecutor;
 import com.android.systemui.util.time.SystemClock;
-import com.android.wm.shell.bubbles.Bubbles;
 
 import java.util.Optional;
 import java.util.concurrent.Executor;
@@ -138,12 +133,10 @@
             Lazy<Optional<CentralSurfaces>> centralSurfacesOptionalLazy,
             Lazy<NotificationShadeWindowController> notificationShadeWindowController,
             NotificationVisibilityProvider visibilityProvider,
-            NotificationEntryManager notificationEntryManager,
             MediaArtworkProcessor mediaArtworkProcessor,
             KeyguardBypassController keyguardBypassController,
             NotifPipeline notifPipeline,
             NotifCollection notifCollection,
-            NotifPipelineFlags notifPipelineFlags,
             @Main DelayableExecutor mainExecutor,
             MediaDataManager mediaDataManager,
             DumpManager dumpManager) {
@@ -152,12 +145,10 @@
                 centralSurfacesOptionalLazy,
                 notificationShadeWindowController,
                 visibilityProvider,
-                notificationEntryManager,
                 mediaArtworkProcessor,
                 keyguardBypassController,
                 notifPipeline,
                 notifCollection,
-                notifPipelineFlags,
                 mainExecutor,
                 mediaDataManager,
                 dumpManager);
@@ -184,47 +175,6 @@
     NotificationRemoteInputManager.Callback provideNotificationRemoteInputManagerCallback(
             StatusBarRemoteInputCallback callbackImpl);
 
-    /** */
-    @SysUISingleton
-    @Provides
-    static NotificationViewHierarchyManager provideNotificationViewHierarchyManager(
-            Context context,
-            @Main Handler mainHandler,
-            FeatureFlags featureFlags,
-            NotificationLockscreenUserManager notificationLockscreenUserManager,
-            NotificationGroupManagerLegacy groupManager,
-            VisualStabilityManager visualStabilityManager,
-            StatusBarStateController statusBarStateController,
-            NotificationEntryManager notificationEntryManager,
-            KeyguardBypassController bypassController,
-            Optional<Bubbles> bubblesOptional,
-            DynamicPrivacyController privacyController,
-            DynamicChildBindController dynamicChildBindController,
-            LowPriorityInflationHelper lowPriorityInflationHelper,
-            AssistantFeedbackController assistantFeedbackController,
-            NotifPipelineFlags notifPipelineFlags,
-            KeyguardUpdateMonitor keyguardUpdateMonitor,
-            KeyguardStateController keyguardStateController) {
-        return new NotificationViewHierarchyManager(
-                context,
-                mainHandler,
-                featureFlags,
-                notificationLockscreenUserManager,
-                groupManager,
-                visualStabilityManager,
-                statusBarStateController,
-                notificationEntryManager,
-                bypassController,
-                bubblesOptional,
-                privacyController,
-                dynamicChildBindController,
-                lowPriorityInflationHelper,
-                assistantFeedbackController,
-                notifPipelineFlags,
-                keyguardUpdateMonitor,
-                keyguardStateController);
-    }
-
     /**
      * Provides our instance of CommandQueue which is considered optional.
      */
@@ -259,6 +209,16 @@
      */
     @Provides
     @SysUISingleton
+    static StatusBarIconList provideStatusBarIconList(Context context) {
+        return new StatusBarIconList(
+                context.getResources().getStringArray(
+                        com.android.internal.R.array.config_statusBarIcons));
+    }
+
+    /**
+     */
+    @Provides
+    @SysUISingleton
     static OngoingCallController provideOngoingCallController(
             Context context,
             CommonNotifCollection notifCollection,
@@ -317,7 +277,31 @@
      */
     @Provides
     @SysUISingleton
-    static DialogLaunchAnimator provideDialogLaunchAnimator(IDreamManager dreamManager) {
-        return new DialogLaunchAnimator(dreamManager);
+    static DialogLaunchAnimator provideDialogLaunchAnimator(IDreamManager dreamManager,
+            KeyguardStateController keyguardStateController,
+            Lazy<StatusBarKeyguardViewManager> statusBarKeyguardViewManager,
+            InteractionJankMonitor interactionJankMonitor) {
+        DialogLaunchAnimator.Callback callback = new DialogLaunchAnimator.Callback() {
+            @Override
+            public boolean isDreaming() {
+                try {
+                    return dreamManager.isDreaming();
+                } catch (RemoteException e) {
+                    Log.e("DialogLaunchAnimator.Callback", "dreamManager.isDreaming failed", e);
+                    return false;
+                }
+            }
+
+            @Override
+            public boolean isUnlocked() {
+                return keyguardStateController.isUnlocked();
+            }
+
+            @Override
+            public boolean isShowingAlternateAuthOnUnlock() {
+                return statusBarKeyguardViewManager.get().shouldShowAltAuth();
+            }
+        };
+        return new DialogLaunchAnimator(callback, interactionJankMonitor);
     }
 }
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 a35bced..a509fca 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt
@@ -37,6 +37,8 @@
 import com.android.systemui.R
 import com.android.systemui.dagger.SysUISingleton
 import com.android.systemui.dagger.qualifiers.Main
+import com.android.systemui.flags.FeatureFlags
+import com.android.systemui.flags.Flags
 import com.android.systemui.plugins.ActivityStarter
 import com.android.systemui.plugins.BcSmartspaceDataPlugin
 import com.android.systemui.plugins.BcSmartspaceDataPlugin.SmartspaceTargetListener
@@ -44,13 +46,11 @@
 import com.android.systemui.plugins.FalsingManager
 import com.android.systemui.plugins.statusbar.StatusBarStateController
 import com.android.systemui.settings.UserTracker
-import com.android.systemui.flags.FeatureFlags
-import com.android.systemui.flags.Flags
+import com.android.systemui.statusbar.phone.KeyguardBypassController
 import com.android.systemui.statusbar.policy.ConfigurationController
 import com.android.systemui.statusbar.policy.DeviceProvisionedController
 import com.android.systemui.util.concurrency.Execution
 import com.android.systemui.util.settings.SecureSettings
-import java.lang.RuntimeException
 import java.util.Optional
 import java.util.concurrent.Executor
 import javax.inject.Inject
@@ -71,6 +71,7 @@
     private val configurationController: ConfigurationController,
     private val statusBarStateController: StatusBarStateController,
     private val deviceProvisionedController: DeviceProvisionedController,
+    private val bypassController: KeyguardBypassController,
     private val execution: Execution,
     @Main private val uiExecutor: Executor,
     @Main private val handler: Handler,
@@ -154,6 +155,13 @@
             }
         }
 
+    private val bypassStateChangedListener =
+        object : KeyguardBypassController.OnBypassStateChangedListener {
+            override fun onBypassStateChanged(isEnabled: Boolean) {
+                updateBypassEnabled()
+            }
+        }
+
     init {
         deviceProvisionedController.addCallback(deviceProvisionedListener)
     }
@@ -164,6 +172,11 @@
         return featureFlags.isEnabled(Flags.SMARTSPACE) && plugin != null
     }
 
+    private fun updateBypassEnabled() {
+        val bypassEnabled = bypassController.bypassEnabled
+        smartspaceViews.forEach { it.setKeyguardBypassEnabled(bypassEnabled) }
+    }
+
     /**
      * Constructs the smartspace view and connects it to the smartspace service.
      */
@@ -211,6 +224,7 @@
             }
         })
         ssView.setFalsingManager(falsingManager)
+        ssView.setKeyguardBypassEnabled(bypassController.bypassEnabled)
         return (ssView as View).apply { addOnAttachStateChangeListener(stateChangeListener) }
     }
 
@@ -248,11 +262,13 @@
         )
         configurationController.addCallback(configChangeListener)
         statusBarStateController.addCallback(statusBarStateListener)
+        bypassController.registerOnBypassStateChangedListener(bypassStateChangedListener)
 
         plugin.registerSmartspaceEventNotifier {
                 e -> session?.notifySmartspaceEvent(e)
         }
 
+        updateBypassEnabled()
         reloadSmartspace()
     }
 
@@ -276,6 +292,7 @@
         contentResolver.unregisterContentObserver(settingsObserver)
         configurationController.removeCallback(configChangeListener)
         statusBarStateController.removeCallback(statusBarStateListener)
+        bypassController.unregisterOnBypassStateChangedListener(bypassStateChangedListener)
         session = null
 
         plugin?.registerSmartspaceEventNotifier(null)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/ConversationNotifications.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/ConversationNotifications.kt
index 5aeab84..d248961 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/ConversationNotifications.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/ConversationNotifications.kt
@@ -31,7 +31,6 @@
 import com.android.systemui.plugins.statusbar.StatusBarStateController
 import com.android.systemui.statusbar.notification.collection.NotificationEntry
 import com.android.systemui.statusbar.notification.collection.inflation.BindEventManager
-import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy
 import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection
 import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
@@ -129,11 +128,9 @@
  */
 @SysUISingleton
 class ConversationNotificationManager @Inject constructor(
-    private val bindEventManager: BindEventManager,
-    private val notificationGroupManager: NotificationGroupManagerLegacy,
+    bindEventManager: BindEventManager,
     private val context: Context,
     private val notifCollection: CommonNotifCollection,
-    private val featureFlags: NotifPipelineFlags,
     @Main private val mainHandler: Handler
 ) {
     // Need this state to be thread safe, since it's accessed from the ui thread
@@ -172,12 +169,10 @@
                                 layout.setIsImportantConversation(important, false)
                             }
                         }
-                if (changed && !featureFlags.isNewPipelineEnabled()) {
-                    notificationGroupManager.updateIsolation(entry)
-                }
             }
         }
     }
+
     fun onEntryViewBound(entry: NotificationEntry) {
         if (!entry.ranking.isConversation) {
             return
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicPrivacyController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicPrivacyController.java
index a0ccd57..1be4c04 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicPrivacyController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/DynamicPrivacyController.java
@@ -80,7 +80,7 @@
 
     @VisibleForTesting
     boolean isDynamicPrivacyEnabled() {
-        return !mLockscreenUserManager.userAllowsPrivateNotificationsInPublic(
+        return mLockscreenUserManager.userAllowsNotificationsInPublic(
                 mLockscreenUserManager.getCurrentUserId());
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/InstantAppNotifier.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/InstantAppNotifier.java
index df412ed..8cb18a0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/InstantAppNotifier.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/InstantAppNotifier.java
@@ -260,7 +260,7 @@
 
         Intent browserIntent = getTaskIntent(taskId, userId);
         Notification.Builder builder =
-                new Notification.Builder(mContext, NotificationChannels.GENERAL);
+                new Notification.Builder(mContext, NotificationChannels.INSTANT);
         if (browserIntent != null && browserIntent.isWebIntent()) {
             // Make sure that this doesn't resolve back to an instant app
             browserIntent
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 f6a55e6..7fbdd35 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotifPipelineFlags.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotifPipelineFlags.kt
@@ -29,10 +29,6 @@
     val featureFlags: FeatureFlags
 ) {
     fun checkLegacyPipelineEnabled(): Boolean {
-        if (!isNewPipelineEnabled()) {
-            return true
-        }
-
         if (Compile.IS_DEBUG) {
             Toast.makeText(context, "Old pipeline code running!", Toast.LENGTH_SHORT).show()
         }
@@ -45,16 +41,16 @@
         return false
     }
 
-    fun assertLegacyPipelineEnabled(): Unit =
-        check(!isNewPipelineEnabled()) { "Old pipeline code running w/ new pipeline enabled" }
-
-    fun isNewPipelineEnabled(): Boolean =
-        featureFlags.isEnabled(Flags.NEW_NOTIFICATION_PIPELINE_RENDERING)
-
     fun isDevLoggingEnabled(): Boolean =
         featureFlags.isEnabled(Flags.NOTIFICATION_PIPELINE_DEVELOPER_LOGGING)
 
     fun isSmartspaceDedupingEnabled(): Boolean =
             featureFlags.isEnabled(Flags.SMARTSPACE) &&
                     featureFlags.isEnabled(Flags.SMARTSPACE_DEDUPING)
-}
\ No newline at end of file
+
+    fun removeUnrankedNotifs(): Boolean =
+        featureFlags.isEnabled(Flags.REMOVE_UNRANKED_NOTIFICATIONS)
+
+    fun fullScreenIntentRequiresKeyguard(): Boolean =
+        featureFlags.isEnabled(Flags.FSI_REQUIRES_KEYGUARD)
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java
index c86bf93..7583a98 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java
@@ -41,15 +41,14 @@
 import com.android.internal.statusbar.IStatusBarService;
 import com.android.internal.statusbar.NotificationVisibility;
 import com.android.systemui.Dumpable;
+import com.android.systemui.dagger.qualifiers.Background;
 import com.android.systemui.dump.DumpManager;
 import com.android.systemui.statusbar.NotificationLifetimeExtender;
 import com.android.systemui.statusbar.NotificationListener;
 import com.android.systemui.statusbar.NotificationListener.NotificationHandler;
-import com.android.systemui.statusbar.NotificationPresenter;
 import com.android.systemui.statusbar.NotificationRemoteInputManager;
 import com.android.systemui.statusbar.NotificationRemoveInterceptor;
 import com.android.systemui.statusbar.NotificationUiAdjustment;
-import com.android.systemui.statusbar.notification.collection.NotifLiveDataStoreImpl;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinder;
 import com.android.systemui.statusbar.notification.collection.legacy.LegacyNotificationRanker;
@@ -73,6 +72,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.Executor;
 
 import dagger.Lazy;
 
@@ -111,8 +111,8 @@
     private final Lazy<NotificationRemoteInputManager> mRemoteInputManagerLazy;
     private final LeakDetector mLeakDetector;
     private final IStatusBarService mStatusBarService;
-    private final NotifLiveDataStoreImpl mNotifLiveDataStore;
     private final DumpManager mDumpManager;
+    private final Executor mBgExecutor;
 
     private final Set<NotificationEntry> mAllNotifications = new ArraySet<>();
     private final Set<NotificationEntry> mReadOnlyAllNotifications =
@@ -138,7 +138,6 @@
     private final List<NotifCollectionListener> mNotifCollectionListeners = new ArrayList<>();
 
     private LegacyNotificationRanker mRanker = new LegacyNotificationRankerStub();
-    private NotificationPresenter mPresenter;
     private RankingMap mLatestRankingMap;
 
     @VisibleForTesting
@@ -158,8 +157,8 @@
             Lazy<NotificationRemoteInputManager> notificationRemoteInputManagerLazy,
             LeakDetector leakDetector,
             IStatusBarService statusBarService,
-            NotifLiveDataStoreImpl notifLiveDataStore,
-            DumpManager dumpManager
+            DumpManager dumpManager,
+            @Background Executor bgExecutor
     ) {
         mLogger = logger;
         mGroupManager = groupManager;
@@ -168,8 +167,8 @@
         mRemoteInputManagerLazy = notificationRemoteInputManagerLazy;
         mLeakDetector = leakDetector;
         mStatusBarService = statusBarService;
-        mNotifLiveDataStore = notifLiveDataStore;
         mDumpManager = dumpManager;
+        mBgExecutor = bgExecutor;
     }
 
     /** Once called, the NEM will start processing notification events from system server. */
@@ -245,10 +244,6 @@
         mRemoveInterceptors.remove(interceptor);
     }
 
-    public void setUpWithPresenter(NotificationPresenter presenter) {
-        mPresenter = presenter;
-    }
-
     /** Adds multiple {@link NotificationLifetimeExtender}s. */
     public void addNotificationLifetimeExtenders(List<NotificationLifetimeExtender> extenders) {
         for (NotificationLifetimeExtender extender : extenders) {
@@ -566,17 +561,19 @@
     private void sendNotificationRemovalToServer(
             StatusBarNotification notification,
             DismissedByUserStats dismissedByUserStats) {
-        try {
-            mStatusBarService.onNotificationClear(
-                    notification.getPackageName(),
-                    notification.getUser().getIdentifier(),
-                    notification.getKey(),
-                    dismissedByUserStats.dismissalSurface,
-                    dismissedByUserStats.dismissalSentiment,
-                    dismissedByUserStats.notificationVisibility);
-        } catch (RemoteException ex) {
-            // system process is dead if we're here.
-        }
+        mBgExecutor.execute(() -> {
+            try {
+                mStatusBarService.onNotificationClear(
+                        notification.getPackageName(),
+                        notification.getUser().getIdentifier(),
+                        notification.getKey(),
+                        dismissedByUserStats.dismissalSurface,
+                        dismissedByUserStats.dismissalSentiment,
+                        dismissedByUserStats.notificationVisibility);
+            } catch (RemoteException ex) {
+                // system process is dead if we're here.
+            }
+        });
     }
 
     /**
@@ -656,11 +653,6 @@
             listener.onEntryBind(entry, notification);
         }
 
-        // Construct the expanded view.
-        if (!mNotifPipelineFlags.isNewPipelineEnabled()) {
-            mNotificationRowBinderLazy.get().inflateViews(entry, null, mInflationCallback);
-        }
-
         mPendingNotifications.put(key, entry);
         mLogger.logNotifAdded(entry.getKey());
         for (NotificationEntryListener listener : mNotificationEntryListeners) {
@@ -717,10 +709,6 @@
             listener.onEntryUpdated(entry, fromSystem);
         }
 
-        if (!mNotifPipelineFlags.isNewPipelineEnabled()) {
-            mNotificationRowBinderLazy.get().inflateViews(entry, null, mInflationCallback);
-        }
-
         updateNotifications("updateNotificationInternal");
 
         for (NotificationEntryListener listener : mNotificationEntryListeners) {
@@ -745,17 +733,7 @@
      * @param reason why the notifications are updating
      */
     public void updateNotifications(String reason) {
-        if (mNotifPipelineFlags.isNewPipelineEnabled()) {
-            mLogger.logUseWhileNewPipelineActive("updateNotifications", reason);
-            return;
-        }
-        Trace.beginSection("NotificationEntryManager.updateNotifications");
-        reapplyFilterAndSort(reason);
-        if (mPresenter != null) {
-            mPresenter.updateNotificationViews(reason);
-        }
-        mNotifLiveDataStore.setActiveNotifList(getVisibleNotifications());
-        Trace.endSection();
+        mLogger.logUseWhileNewPipelineActive("updateNotifications", reason);
     }
 
     public void updateNotificationRanking(RankingMap rankingMap) {
@@ -932,26 +910,12 @@
 
     /** Resorts / filters the current notification set with the current RankingMap */
     public void reapplyFilterAndSort(String reason) {
-        if (mNotifPipelineFlags.isNewPipelineEnabled()) {
-            mLogger.logUseWhileNewPipelineActive("reapplyFilterAndSort", reason);
-            return;
-        }
-        Trace.beginSection("NotificationEntryManager.reapplyFilterAndSort");
-        updateRankingAndSort(mRanker.getRankingMap(), reason);
-        Trace.endSection();
+        mLogger.logUseWhileNewPipelineActive("reapplyFilterAndSort", reason);
     }
 
     /** Calls to NotificationRankingManager and updates mSortedAndFiltered */
     private void updateRankingAndSort(RankingMap rankingMap, String reason) {
-        if (mNotifPipelineFlags.isNewPipelineEnabled()) {
-            mLogger.logUseWhileNewPipelineActive("updateRankingAndSort", reason);
-            return;
-        }
-        Trace.beginSection("NotificationEntryManager.updateRankingAndSort");
-        mSortedAndFiltered.clear();
-        mSortedAndFiltered.addAll(mRanker.updateRanking(
-                rankingMap, mActiveNotifications.values(), reason));
-        Trace.endSection();
+        mLogger.logUseWhileNewPipelineActive("updateRankingAndSort", reason);
     }
 
     /** dump the current active notification list. Called from CentralSurfaces */
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManagerLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManagerLogger.kt
index 2397005..52dcf02 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManagerLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManagerLogger.kt
@@ -17,18 +17,32 @@
 package com.android.systemui.statusbar.notification
 
 import com.android.systemui.log.LogBuffer
+import com.android.systemui.log.LogLevel
 import com.android.systemui.log.LogLevel.DEBUG
 import com.android.systemui.log.LogLevel.INFO
 import com.android.systemui.log.LogLevel.WARNING
+import com.android.systemui.log.LogMessage
 import com.android.systemui.log.dagger.NotificationLog
+import com.android.systemui.util.Compile
 import javax.inject.Inject
 
 /** Logger for [NotificationEntryManager]. */
 class NotificationEntryManagerLogger @Inject constructor(
+    notifPipelineFlags: NotifPipelineFlags,
     @NotificationLog private val buffer: LogBuffer
 ) {
+    private val devLoggingEnabled by lazy { notifPipelineFlags.isDevLoggingEnabled() }
+
+    private inline fun devLog(
+        level: LogLevel,
+        initializer: LogMessage.() -> Unit,
+        noinline printer: LogMessage.() -> String
+    ) {
+        if (Compile.IS_DEBUG && devLoggingEnabled) buffer.log(TAG, level, initializer, printer)
+    }
+
     fun logNotifAdded(key: String) {
-        buffer.log(TAG, INFO, {
+        devLog(INFO, {
             str1 = key
         }, {
             "NOTIF ADDED $str1"
@@ -36,7 +50,7 @@
     }
 
     fun logNotifUpdated(key: String) {
-        buffer.log(TAG, INFO, {
+        devLog(INFO, {
             str1 = key
         }, {
             "NOTIF UPDATED $str1"
@@ -44,7 +58,7 @@
     }
 
     fun logInflationAborted(key: String, status: String, reason: String) {
-        buffer.log(TAG, DEBUG, {
+        devLog(DEBUG, {
             str1 = key
             str2 = status
             str3 = reason
@@ -54,7 +68,7 @@
     }
 
     fun logNotifInflated(key: String, isNew: Boolean) {
-        buffer.log(TAG, DEBUG, {
+        devLog(DEBUG, {
             str1 = key
             bool1 = isNew
         }, {
@@ -63,7 +77,7 @@
     }
 
     fun logRemovalIntercepted(key: String) {
-        buffer.log(TAG, INFO, {
+        devLog(INFO, {
             str1 = key
         }, {
             "NOTIF REMOVE INTERCEPTED for $str1"
@@ -71,7 +85,7 @@
     }
 
     fun logLifetimeExtended(key: String, extenderName: String, status: String) {
-        buffer.log(TAG, INFO, {
+        devLog(INFO, {
             str1 = key
             str2 = extenderName
             str3 = status
@@ -81,7 +95,7 @@
     }
 
     fun logNotifRemoved(key: String, removedByUser: Boolean) {
-        buffer.log(TAG, INFO, {
+        devLog(INFO, {
             str1 = key
             bool1 = removedByUser
         }, {
@@ -90,7 +104,7 @@
     }
 
     fun logFilterAndSort(reason: String) {
-        buffer.log(TAG, INFO, {
+        devLog(INFO, {
             str1 = reason
         }, {
             "FILTER AND SORT reason=$str1"
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationLaunchAnimatorController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationLaunchAnimatorController.kt
index b764c27..31b21c9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationLaunchAnimatorController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationLaunchAnimatorController.kt
@@ -4,10 +4,10 @@
 import com.android.internal.jank.InteractionJankMonitor
 import com.android.systemui.animation.ActivityLaunchAnimator
 import com.android.systemui.animation.LaunchAnimator
+import com.android.systemui.shade.NotificationShadeWindowViewController
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
 import com.android.systemui.statusbar.notification.stack.NotificationListContainer
 import com.android.systemui.statusbar.phone.HeadsUpManagerPhone
-import com.android.systemui.statusbar.phone.NotificationShadeWindowViewController
 import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent
 import com.android.systemui.statusbar.policy.HeadsUpUtil
 import javax.inject.Inject
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 126a986..dbf4810 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationWakeUpCoordinator.kt
@@ -18,8 +18,10 @@
 
 import android.animation.ObjectAnimator
 import android.util.FloatProperty
+import com.android.systemui.Dumpable
 import com.android.systemui.animation.Interpolators
 import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dump.DumpManager
 import com.android.systemui.plugins.statusbar.StatusBarStateController
 import com.android.systemui.statusbar.StatusBarState
 import com.android.systemui.statusbar.notification.collection.NotificationEntry
@@ -32,17 +34,20 @@
 import com.android.systemui.statusbar.phone.panelstate.PanelExpansionListener
 import com.android.systemui.statusbar.policy.HeadsUpManager
 import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener
+import java.io.PrintWriter
 import javax.inject.Inject
 import kotlin.math.min
 
 @SysUISingleton
 class NotificationWakeUpCoordinator @Inject constructor(
+    dumpManager: DumpManager,
     private val mHeadsUpManager: HeadsUpManager,
     private val statusBarStateController: StatusBarStateController,
     private val bypassController: KeyguardBypassController,
     private val dozeParameters: DozeParameters,
     private val screenOffAnimationController: ScreenOffAnimationController
-) : OnHeadsUpChangedListener, StatusBarStateController.StateListener, PanelExpansionListener {
+) : OnHeadsUpChangedListener, StatusBarStateController.StateListener, PanelExpansionListener,
+    Dumpable {
 
     private val mNotificationVisibility = object : FloatProperty<NotificationWakeUpCoordinator>(
         "notificationVisibility") {
@@ -60,6 +65,7 @@
 
     private var mLinearDozeAmount: Float = 0.0f
     private var mDozeAmount: Float = 0.0f
+    private var mDozeAmountSource: String = "init"
     private var mNotificationVisibleAmount = 0.0f
     private var mNotificationsVisible = false
     private var mNotificationsVisibleForExpansion = false
@@ -142,6 +148,7 @@
         }
 
     init {
+        dumpManager.registerDumpable(this)
         mHeadsUpManager.addListener(this)
         statusBarStateController.addCallback(this)
         addListener(object : WakeUpListener {
@@ -248,13 +255,14 @@
             // Let's notify the scroller that an animation started
             notifyAnimationStart(mLinearDozeAmount == 1.0f)
         }
-        setDozeAmount(linear, eased)
+        setDozeAmount(linear, eased, source = "StatusBar")
     }
 
-    fun setDozeAmount(linear: Float, eased: Float) {
+    fun setDozeAmount(linear: Float, eased: Float, source: String) {
         val changed = linear != mLinearDozeAmount
         mLinearDozeAmount = linear
         mDozeAmount = eased
+        mDozeAmountSource = source
         mStackScrollerController.setDozeAmount(mDozeAmount)
         updateHideAmount()
         if (changed && linear == 0.0f) {
@@ -271,7 +279,7 @@
             // undefined state, so it's an indication that we should do state cleanup. We override
             // the doze amount to 0f (not dozing) so that the notifications are no longer hidden.
             // See: UnlockedScreenOffAnimationController.onFinishedWakingUp()
-            setDozeAmount(0f, 0f)
+            setDozeAmount(0f, 0f, source = "Override: Shade->Shade (lock cancelled by unlock)")
         }
 
         if (overrideDozeAmountIfAnimatingScreenOff(mLinearDozeAmount)) {
@@ -311,12 +319,11 @@
      */
     private fun overrideDozeAmountIfBypass(): Boolean {
         if (bypassController.bypassEnabled) {
-            var amount = 1.0f
-            if (statusBarStateController.state == StatusBarState.SHADE ||
-                statusBarStateController.state == StatusBarState.SHADE_LOCKED) {
-                amount = 0.0f
+            if (statusBarStateController.state == StatusBarState.KEYGUARD) {
+                setDozeAmount(1f, 1f, source = "Override: bypass (keyguard)")
+            } else {
+                setDozeAmount(0f, 0f, source = "Override: bypass (shade)")
             }
-            setDozeAmount(amount, amount)
             return true
         }
         return false
@@ -332,7 +339,7 @@
      */
     private fun overrideDozeAmountIfAnimatingScreenOff(linearDozeAmount: Float): Boolean {
         if (screenOffAnimationController.overrideNotificationsFullyDozingOnKeyguard()) {
-            setDozeAmount(1f, 1f)
+            setDozeAmount(1f, 1f, source = "Override: animating screen off")
             return true
         }
 
@@ -426,4 +433,24 @@
          */
         @JvmDefault fun onPulseExpansionChanged(expandingChanged: Boolean) {}
     }
-}
\ No newline at end of file
+
+    override fun dump(pw: PrintWriter, args: Array<out String>) {
+        pw.println("mLinearDozeAmount: $mLinearDozeAmount")
+        pw.println("mDozeAmount: $mDozeAmount")
+        pw.println("mDozeAmountSource: $mDozeAmountSource")
+        pw.println("mNotificationVisibleAmount: $mNotificationVisibleAmount")
+        pw.println("mNotificationsVisible: $mNotificationsVisible")
+        pw.println("mNotificationsVisibleForExpansion: $mNotificationsVisibleForExpansion")
+        pw.println("mVisibilityAmount: $mVisibilityAmount")
+        pw.println("mLinearVisibilityAmount: $mLinearVisibilityAmount")
+        pw.println("pulseExpanding: $pulseExpanding")
+        pw.println("state: ${StatusBarState.toString(state)}")
+        pw.println("fullyAwake: $fullyAwake")
+        pw.println("wakingUp: $wakingUp")
+        pw.println("willWakeUp: $willWakeUp")
+        pw.println("collapsedEnoughToHide: $collapsedEnoughToHide")
+        pw.println("pulsing: $pulsing")
+        pw.println("notificationsFullyHidden: $notificationsFullyHidden")
+        pw.println("canShowPulsingHuns: $canShowPulsingHuns")
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/OWNERS b/packages/SystemUI/src/com/android/systemui/statusbar/notification/OWNERS
new file mode 100644
index 0000000..ed80f33
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/OWNERS
@@ -0,0 +1,14 @@
+set noparent
+
+# Bug component: 78010
+
+aaliomer@google.com
+aroederer@google.com
+jeffdq@google.com
+juliacr@google.com
+juliatuttle@google.com
+lynhan@google.com
+steell@google.com
+yurilin@google.com
+
+per-file MediaNotificationProcessor.java = ethibodeau@google.com, asc@google.com
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/SectionClassifier.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/SectionClassifier.kt
deleted file mode 100644
index 1f2d0fe..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/SectionClassifier.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.statusbar.notification
-
-import com.android.systemui.dagger.SysUISingleton
-import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection
-import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner
-import javax.inject.Inject
-
-/**
- * A class which is used to classify the sections.
- * NOTE: This class exists to avoid putting metadata like "isMinimized" on the NotifSection
- */
-@SysUISingleton
-class SectionClassifier @Inject constructor() {
-    private lateinit var lowPrioritySections: Set<NotifSectioner>
-
-    /**
-     * Feed the provider the information it needs about which sections should have minimized top
-     * level views, so that it can calculate the correct minimized state.
-     */
-    fun setMinimizedSections(sections: Collection<NotifSectioner>) {
-        lowPrioritySections = sections.toSet()
-    }
-
-    /**
-     * Determine if the given section is minimized
-     */
-    fun isMinimizedSection(section: NotifSection): Boolean {
-        return lowPrioritySections.contains(section.sectioner)
-    }
-}
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/SectionHeaderVisibilityProvider.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/SectionHeaderVisibilityProvider.kt
deleted file mode 100644
index 68bdd18..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/SectionHeaderVisibilityProvider.kt
+++ /dev/null
@@ -1,40 +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.systemui.statusbar.notification
-
-import android.content.Context
-import com.android.systemui.dagger.SysUISingleton
-import com.android.systemui.R
-import javax.inject.Inject
-
-/**
- * A class which keeps track of whether section headers should be shown in the notification shade.
- *
- * (In an ideal world, this would directly monitor the state of the keyguard and invalidate the
- * pipeline to show/hide headers, but the KeyguardController already invalidates the pipeline when
- * the keyguard's state changes. Instead of having both classes monitor for state changes and ending
- * up with duplicate runs of the pipeline, we let the KeyguardController update the header
- * visibility when it invalidates, and we just store that state here.)
- */
-@SysUISingleton
-class SectionHeaderVisibilityProvider @Inject constructor(
-    context: Context
-) {
-    var neverShowSectionHeaders = context.resources.getBoolean(R.bool.config_notification_never_show_section_headers)
-        private set
-    var sectionHeadersVisible = true
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListDumper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListDumper.java
index 6be8a49..f6a572e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListDumper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListDumper.java
@@ -16,6 +16,7 @@
 
 package com.android.systemui.statusbar.notification.collection;
 
+import static com.android.systemui.statusbar.notification.NotificationUtils.logKey;
 import static com.android.systemui.statusbar.notification.collection.NotifCollection.REASON_NOT_CANCELED;
 import static com.android.systemui.statusbar.notification.collection.NotificationEntry.DismissState.NOT_DISMISSED;
 
@@ -52,7 +53,7 @@
                     sb,
                     true,
                     includeRecordKeeping,
-                    interactionTracker.hasUserInteractedWith(entry.getKey()));
+                    interactionTracker.hasUserInteractedWith(logKey(entry)));
             if (entry instanceof GroupEntry) {
                 GroupEntry ge = (GroupEntry) entry;
                 NotificationEntry summary = ge.getSummary();
@@ -63,7 +64,7 @@
                             sb,
                             true,
                             includeRecordKeeping,
-                            interactionTracker.hasUserInteractedWith(summary.getKey()));
+                            interactionTracker.hasUserInteractedWith(logKey(summary)));
                 }
                 List<NotificationEntry> children = ge.getChildren();
                 for (int childIndex = 0;  childIndex < children.size(); childIndex++) {
@@ -74,7 +75,7 @@
                             sb,
                             true,
                             includeRecordKeeping,
-                            interactionTracker.hasUserInteractedWith(child.getKey()));
+                            interactionTracker.hasUserInteractedWith(logKey(child)));
                 }
             }
         }
@@ -115,12 +116,19 @@
     ) {
         sb.append(indent)
                 .append("[").append(index).append("] ")
-                .append(entry.getKey());
+                .append(index.length() == 1 ? " " : "")
+                .append(logKey(entry));
 
         if (includeParent) {
             sb.append(" (parent=")
-                    .append(entry.getParent() != null ? entry.getParent().getKey() : null)
+                    .append(logKey(entry.getParent()))
                     .append(")");
+
+            NotificationEntry notifEntry = entry.getRepresentativeEntry();
+            if (notifEntry != null) {
+                sb.append(" rank=")
+                        .append(notifEntry.getRanking().getRank());
+            }
         }
 
         if (entry.getSection() != null) {
@@ -178,15 +186,15 @@
 
             if (notifEntry.getAttachState().getSuppressedChanges().getParent() != null) {
                 rksb.append("suppressedParent=")
-                        .append(notifEntry.getAttachState().getSuppressedChanges()
-                                .getParent().getKey())
+                        .append(logKey(notifEntry.getAttachState().getSuppressedChanges()
+                                .getParent()))
                         .append(" ");
             }
 
             if (notifEntry.getAttachState().getSuppressedChanges().getSection() != null) {
                 rksb.append("suppressedSection=")
                         .append(notifEntry.getAttachState().getSuppressedChanges()
-                                .getSection())
+                                .getSection().getLabel())
                         .append(" ");
             }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java
index 6085096..68bf69a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java
@@ -70,6 +70,7 @@
 import com.android.internal.statusbar.IStatusBarService;
 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.dump.LogBufferEulogizer;
@@ -89,6 +90,7 @@
 import com.android.systemui.statusbar.notification.collection.notifcollection.InternalNotifUpdater;
 import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
 import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionLogger;
+import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionLoggerKt;
 import com.android.systemui.statusbar.notification.collection.notifcollection.NotifDismissInterceptor;
 import com.android.systemui.statusbar.notification.collection.notifcollection.NotifEvent;
 import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender;
@@ -104,11 +106,14 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Queue;
+import java.util.Set;
+import java.util.concurrent.Executor;
 import java.util.concurrent.TimeUnit;
 
 import javax.inject.Inject;
@@ -137,12 +142,13 @@
  */
 @MainThread
 @SysUISingleton
-public class NotifCollection implements Dumpable {
+public class NotifCollection implements Dumpable, PipelineDumpable {
     private final IStatusBarService mStatusBarService;
     private final SystemClock mClock;
     private final NotifPipelineFlags mNotifPipelineFlags;
     private final NotifCollectionLogger mLogger;
     private final Handler mMainHandler;
+    private final Executor mBgExecutor;
     private final LogBufferEulogizer mEulogizer;
     private final DumpManager mDumpManager;
 
@@ -156,6 +162,8 @@
     private final List<NotifLifetimeExtender> mLifetimeExtenders = new ArrayList<>();
     private final List<NotifDismissInterceptor> mDismissInterceptors = new ArrayList<>();
 
+    private Set<String> mNotificationsWithoutRankings = Collections.emptySet();
+
     private Queue<NotifEvent> mEventQueue = new ArrayDeque<>();
 
     private boolean mAttached = false;
@@ -169,6 +177,7 @@
             NotifPipelineFlags notifPipelineFlags,
             NotifCollectionLogger logger,
             @Main Handler mainHandler,
+            @Background Executor bgExecutor,
             LogBufferEulogizer logBufferEulogizer,
             DumpManager dumpManager) {
         mStatusBarService = statusBarService;
@@ -176,6 +185,7 @@
         mNotifPipelineFlags = notifPipelineFlags;
         mLogger = logger;
         mMainHandler = mainHandler;
+        mBgExecutor = bgExecutor;
         mEulogizer = logBufferEulogizer;
         mDumpManager = dumpManager;
     }
@@ -266,13 +276,14 @@
             requireNonNull(stats);
             NotificationEntry storedEntry = mNotificationSet.get(entry.getKey());
             if (storedEntry == null) {
-                mLogger.logNonExistentNotifDismissed(entry.getKey());
+                mLogger.logNonExistentNotifDismissed(entry);
                 continue;
             }
             if (entry != storedEntry) {
                 throw mEulogizer.record(
                         new IllegalStateException("Invalid entry: "
-                                + "different stored and dismissed entries for " + entry.getKey()));
+                                + "different stored and dismissed entries for " + logKey(entry)
+                                + " stored=@" + Integer.toHexString(storedEntry.hashCode())));
             }
 
             if (entry.getDismissState() == DISMISSED) {
@@ -281,30 +292,32 @@
 
             updateDismissInterceptors(entry);
             if (isDismissIntercepted(entry)) {
-                mLogger.logNotifDismissedIntercepted(entry.getKey());
+                mLogger.logNotifDismissedIntercepted(entry);
                 continue;
             }
 
             entriesToLocallyDismiss.add(entry);
             if (!isCanceled(entry)) {
                 // send message to system server if this notification hasn't already been cancelled
-                try {
-                    mStatusBarService.onNotificationClear(
-                            entry.getSbn().getPackageName(),
-                            entry.getSbn().getUser().getIdentifier(),
-                            entry.getSbn().getKey(),
-                            stats.dismissalSurface,
-                            stats.dismissalSentiment,
-                            stats.notificationVisibility);
-                } catch (RemoteException e) {
-                    // system process is dead if we're here.
-                    mLogger.logRemoteExceptionOnNotificationClear(entry.getKey(), e);
-                }
+                mBgExecutor.execute(() -> {
+                    try {
+                        mStatusBarService.onNotificationClear(
+                                entry.getSbn().getPackageName(),
+                                entry.getSbn().getUser().getIdentifier(),
+                                entry.getSbn().getKey(),
+                                stats.dismissalSurface,
+                                stats.dismissalSentiment,
+                                stats.notificationVisibility);
+                    } catch (RemoteException e) {
+                        // system process is dead if we're here.
+                        mLogger.logRemoteExceptionOnNotificationClear(entry, e);
+                    }
+                });
             }
         }
 
         locallyDismissNotifications(entriesToLocallyDismiss);
-        dispatchEventsAndRebuildList();
+        dispatchEventsAndRebuildList("dismissNotifications");
     }
 
     /**
@@ -341,14 +354,14 @@
                 // interceptors the chance to filter the notification
                 updateDismissInterceptors(entry);
                 if (isDismissIntercepted(entry)) {
-                    mLogger.logNotifClearAllDismissalIntercepted(entry.getKey());
+                    mLogger.logNotifClearAllDismissalIntercepted(entry);
                 }
                 entries.remove(i);
             }
         }
 
         locallyDismissNotifications(entries);
-        dispatchEventsAndRebuildList();
+        dispatchEventsAndRebuildList("dismissAllNotifications");
     }
 
     /**
@@ -362,7 +375,7 @@
             NotificationEntry entry = entries.get(i);
 
             entry.setDismissState(DISMISSED);
-            mLogger.logNotifDismissed(entry.getKey());
+            mLogger.logNotifDismissed(entry);
 
             if (isCanceled(entry)) {
                 canceledEntries.add(entry);
@@ -395,7 +408,7 @@
 
         postNotification(sbn, requireRanking(rankingMap, sbn.getKey()));
         applyRanking(rankingMap);
-        dispatchEventsAndRebuildList();
+        dispatchEventsAndRebuildList("onNotificationPosted");
     }
 
     private void onNotificationGroupPosted(List<CoalescedEvent> batch) {
@@ -406,7 +419,7 @@
         for (CoalescedEvent event : batch) {
             postNotification(event.getSbn(), event.getRanking());
         }
-        dispatchEventsAndRebuildList();
+        dispatchEventsAndRebuildList("onNotificationGroupPosted");
     }
 
     private void onNotificationRemoved(
@@ -415,26 +428,26 @@
             int reason) {
         Assert.isMainThread();
 
-        mLogger.logNotifRemoved(sbn.getKey(), reason);
+        mLogger.logNotifRemoved(sbn, reason);
 
         final NotificationEntry entry = mNotificationSet.get(sbn.getKey());
         if (entry == null) {
             // TODO (b/160008901): Throw an exception here
-            mLogger.logNoNotificationToRemoveWithKey(sbn.getKey(), reason);
+            mLogger.logNoNotificationToRemoveWithKey(sbn, reason);
             return;
         }
 
         entry.mCancellationReason = reason;
         tryRemoveNotification(entry);
         applyRanking(rankingMap);
-        dispatchEventsAndRebuildList();
+        dispatchEventsAndRebuildList("onNotificationRemoved");
     }
 
     private void onNotificationRankingUpdate(RankingMap rankingMap) {
         Assert.isMainThread();
         mEventQueue.add(new RankingUpdatedEvent(rankingMap));
         applyRanking(rankingMap);
-        dispatchEventsAndRebuildList();
+        dispatchEventsAndRebuildList("onNotificationRankingUpdate");
     }
 
     private void onNotificationChannelModified(
@@ -444,7 +457,7 @@
             int modificationType) {
         Assert.isMainThread();
         mEventQueue.add(new ChannelChangedEvent(pkgName, user, channel, modificationType));
-        dispatchEventsAndRebuildList();
+        dispatchEventsAndRebuildList("onNotificationChannelModified");
     }
 
     private void onNotificationsInitialized() {
@@ -463,7 +476,7 @@
             mEventQueue.add(new BindEntryEvent(entry, sbn));
             mNotificationSet.put(sbn.getKey(), entry);
 
-            mLogger.logNotifPosted(sbn.getKey());
+            mLogger.logNotifPosted(entry);
             mEventQueue.add(new EntryAddedEvent(entry));
 
         } else {
@@ -482,7 +495,7 @@
             entry.setSbn(sbn);
             mEventQueue.add(new BindEntryEvent(entry, sbn));
 
-            mLogger.logNotifUpdated(sbn.getKey());
+            mLogger.logNotifUpdated(entry);
             mEventQueue.add(new EntryUpdatedEvent(entry, true /* fromSystem */));
         }
     }
@@ -497,12 +510,12 @@
         if (mNotificationSet.get(entry.getKey()) != entry) {
             throw mEulogizer.record(
                     new IllegalStateException("No notification to remove with key "
-                            + entry.getKey()));
+                            + logKey(entry)));
         }
 
         if (!isCanceled(entry)) {
             throw mEulogizer.record(
-                    new IllegalStateException("Cannot remove notification " + entry.getKey()
+                    new IllegalStateException("Cannot remove notification " + logKey(entry)
                             + ": has not been marked for removal"));
         }
 
@@ -513,7 +526,7 @@
         }
 
         if (!isLifetimeExtended(entry)) {
-            mLogger.logNotifReleased(entry.getKey());
+            mLogger.logNotifReleased(entry);
             mNotificationSet.remove(entry.getKey());
             cancelDismissInterception(entry);
             mEventQueue.add(new EntryRemovedEvent(entry, entry.mCancellationReason));
@@ -558,6 +571,7 @@
     }
 
     private void applyRanking(@NonNull RankingMap rankingMap) {
+        ArrayMap<String, NotificationEntry> currentEntriesWithoutRankings = null;
         for (NotificationEntry entry : mNotificationSet.values()) {
             if (!isCanceled(entry)) {
 
@@ -571,22 +585,37 @@
                     // TODO: (b/145659174) update the sbn's overrideGroupKey in
                     //  NotificationEntry.setRanking instead of here once we fully migrate to the
                     //  NewNotifPipeline
-                    if (mNotifPipelineFlags.isNewPipelineEnabled()) {
-                        final String newOverrideGroupKey = ranking.getOverrideGroupKey();
-                        if (!Objects.equals(entry.getSbn().getOverrideGroupKey(),
-                                newOverrideGroupKey)) {
-                            entry.getSbn().setOverrideGroupKey(newOverrideGroupKey);
-                        }
+                    final String newOverrideGroupKey = ranking.getOverrideGroupKey();
+                    if (!Objects.equals(entry.getSbn().getOverrideGroupKey(),
+                            newOverrideGroupKey)) {
+                        entry.getSbn().setOverrideGroupKey(newOverrideGroupKey);
                     }
                 } else {
-                    mLogger.logRankingMissing(entry.getKey(), rankingMap);
+                    if (currentEntriesWithoutRankings == null) {
+                        currentEntriesWithoutRankings = new ArrayMap<>();
+                    }
+                    currentEntriesWithoutRankings.put(entry.getKey(), entry);
                 }
             }
         }
+        NotifCollectionLoggerKt.maybeLogInconsistentRankings(
+                mLogger,
+                mNotificationsWithoutRankings,
+                currentEntriesWithoutRankings,
+                rankingMap
+        );
+        mNotificationsWithoutRankings = currentEntriesWithoutRankings == null
+                ? Collections.emptySet() : currentEntriesWithoutRankings.keySet();
+        if (currentEntriesWithoutRankings != null && mNotifPipelineFlags.removeUnrankedNotifs()) {
+            for (NotificationEntry entry : currentEntriesWithoutRankings.values()) {
+                entry.mCancellationReason = REASON_UNKNOWN;
+                tryRemoveNotification(entry);
+            }
+        }
         mEventQueue.add(new RankingAppliedEvent());
     }
 
-    private void dispatchEventsAndRebuildList() {
+    private void dispatchEventsAndRebuildList(String reason) {
         Trace.beginSection("NotifCollection.dispatchEventsAndRebuildList");
         mAmDispatchingToOtherCode = true;
         while (!mEventQueue.isEmpty()) {
@@ -595,7 +624,7 @@
         mAmDispatchingToOtherCode = false;
 
         if (mBuildListener != null) {
-            mBuildListener.onBuildList(mReadOnlyNotificationSet);
+            mBuildListener.onBuildList(mReadOnlyNotificationSet, reason);
         }
         Trace.endSection();
     }
@@ -609,22 +638,28 @@
         }
         checkForReentrantCall();
 
-        if (!entry.mLifetimeExtenders.remove(extender)) {
-            throw mEulogizer.record(new IllegalStateException(
-                    String.format(
-                            "Cannot end lifetime extension for extender \"%s\" (%s)",
-                            extender.getName(),
-                            extender)));
+        NotificationEntry collectionEntry = getEntry(entry.getKey());
+        String logKey = logKey(entry);
+        String collectionEntryIs = collectionEntry == null ? "null"
+                : entry == collectionEntry ? "same" : "different";
+
+        if (entry != collectionEntry) {
+            // TODO: We should probably make this throw, but that's too risky right now
+            mLogger.logEntryBeingExtendedNotInCollection(entry, extender, collectionEntryIs);
         }
 
-        mLogger.logLifetimeExtensionEnded(
-                entry.getKey(),
-                extender,
-                entry.mLifetimeExtenders.size());
+        if (!entry.mLifetimeExtenders.remove(extender)) {
+            throw mEulogizer.record(new IllegalStateException(
+                    String.format("Cannot end lifetime extension for extender \"%s\""
+                                    + " of entry %s (collection entry is %s)",
+                            extender.getName(), logKey, collectionEntryIs)));
+        }
+
+        mLogger.logLifetimeExtensionEnded(entry, extender, entry.mLifetimeExtenders.size());
 
         if (!isLifetimeExtended(entry)) {
             if (tryRemoveNotification(entry)) {
-                dispatchEventsAndRebuildList();
+                dispatchEventsAndRebuildList("onEndLifetimeExtension");
             }
         }
     }
@@ -647,7 +682,7 @@
         mAmDispatchingToOtherCode = true;
         for (NotifLifetimeExtender extender : mLifetimeExtenders) {
             if (extender.maybeExtendLifetime(entry, entry.mCancellationReason)) {
-                mLogger.logLifetimeExtended(entry.getKey(), extender);
+                mLogger.logLifetimeExtended(entry, extender);
                 entry.mLifetimeExtenders.add(extender);
             }
         }
@@ -820,16 +855,27 @@
     @Override
     public void dump(PrintWriter pw, @NonNull String[] args) {
         final List<NotificationEntry> entries = new ArrayList<>(getAllNotifs());
+        entries.sort(Comparator.comparing(NotificationEntry::getKey));
 
-        pw.println("\t" + TAG + " unsorted/unfiltered notifications:");
-        if (entries.size() == 0) {
-            pw.println("\t\t None");
-        }
+        pw.println("\t" + TAG + " unsorted/unfiltered notifications: " + entries.size());
         pw.println(
                 ListDumper.dumpList(
                         entries,
                         true,
                         "\t\t"));
+
+        pw.println("\n\tmNotificationsWithoutRankings: " + mNotificationsWithoutRankings.size());
+        for (String key : mNotificationsWithoutRankings) {
+            pw.println("\t * : " + key);
+        }
+    }
+
+    @Override
+    public void dumpPipeline(@NonNull PipelineDumper d) {
+        d.dump("notifCollectionListeners", mNotifCollectionListeners);
+        d.dump("lifetimeExtenders", mLifetimeExtenders);
+        d.dump("dismissInterceptors", mDismissInterceptors);
+        d.dump("buildListener", mBuildListener);
     }
 
     private final BatchableNotificationHandler mNotifHandler = new BatchableNotificationHandler() {
@@ -908,21 +954,21 @@
         // Make sure we have the notification to update
         NotificationEntry entry = mNotificationSet.get(sbn.getKey());
         if (entry == null) {
-            mLogger.logNotifInternalUpdateFailed(sbn.getKey(), name, reason);
+            mLogger.logNotifInternalUpdateFailed(sbn, name, reason);
             return;
         }
-        mLogger.logNotifInternalUpdate(sbn.getKey(), name, reason);
+        mLogger.logNotifInternalUpdate(entry, name, reason);
 
         // First do the pieces of postNotification which are not about assuming the notification
         // was sent by the app
         entry.setSbn(sbn);
         mEventQueue.add(new BindEntryEvent(entry, sbn));
 
-        mLogger.logNotifUpdated(sbn.getKey());
+        mLogger.logNotifUpdated(entry);
         mEventQueue.add(new EntryUpdatedEvent(entry, false /* fromSystem */));
 
         // Skip the applyRanking step and go straight to dispatching the events
-        dispatchEventsAndRebuildList();
+        dispatchEventsAndRebuildList("updateNotificationInternally");
     }
 
     /**
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifInflaterImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifInflaterImpl.java
index 4daed77..d1aa01b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifInflaterImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifInflaterImpl.java
@@ -75,8 +75,13 @@
     }
 
     @Override
-    public void abortInflation(NotificationEntry entry) {
-        entry.abortTask();
+    public boolean abortInflation(NotificationEntry entry) {
+        return entry.abortTask();
+    }
+
+    @Override
+    public void releaseViews(@NonNull NotificationEntry entry) {
+        requireBinder().releaseViews(entry);
     }
 
     private NotificationContentInflater.InflationCallback wrapInflationCallback(
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifPipeline.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifPipeline.kt
index e3ee813..f662a04 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifPipeline.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifPipeline.kt
@@ -16,7 +16,6 @@
 package com.android.systemui.statusbar.notification.collection
 
 import com.android.systemui.dagger.SysUISingleton
-import com.android.systemui.statusbar.notification.NotifPipelineFlags
 import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderEntryListener
 import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderGroupListener
 import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderListListener
@@ -76,7 +75,6 @@
  */
 @SysUISingleton
 class NotifPipeline @Inject constructor(
-    notifPipelineFlags: NotifPipelineFlags,
     private val mNotifCollection: NotifCollection,
     private val mShadeListBuilder: ShadeListBuilder,
     private val mRenderStageManager: RenderStageManager
@@ -107,8 +105,6 @@
         return mNotifCollection.getEntry(key)
     }
 
-    val isNewPipelineEnabled: Boolean = notifPipelineFlags.isNewPipelineEnabled()
-
     /**
      * Registers a lifetime extender. Lifetime extenders can cause notifications that have been
      * dismissed or retracted by system server to be temporarily retained in the collection.
@@ -253,4 +249,4 @@
     fun getInternalNotifUpdater(name: String?): InternalNotifUpdater {
         return mNotifCollection.getInternalNotifUpdater(name)
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java
index aedbd1b..b6392f7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java
@@ -175,6 +175,10 @@
     public boolean mRemoteEditImeAnimatingAway;
     public boolean mRemoteEditImeVisible;
     private boolean mExpandAnimationRunning;
+    /**
+     * Flag to determine if the entry is blockable by DnD filters
+     */
+    private boolean mBlockable;
 
     /**
      * @param sbn the StatusBarNotification from system server
@@ -253,6 +257,7 @@
         }
 
         mRanking = ranking.withAudiblyAlertedInfo(mRanking);
+        updateIsBlockable();
     }
 
     /*
@@ -471,11 +476,13 @@
     /**
      * Abort all existing inflation tasks
      */
-    public void abortTask() {
+    public boolean abortTask() {
         if (mRunningTask != null) {
             mRunningTask.abort();
             mRunningTask = null;
+            return true;
         }
+        return false;
     }
 
     public void setInflationTask(InflationTask abortableTask) {
@@ -781,15 +788,20 @@
      * or is not in an allowList).
      */
     public boolean isBlockable() {
+        return mBlockable;
+    }
+
+    private void updateIsBlockable() {
         if (getChannel() == null) {
-            return false;
+            mBlockable = false;
+            return;
         }
         if (getChannel().isImportanceLockedByCriticalDeviceFunction()
                 && !getChannel().isBlockable()) {
-            return false;
+            mBlockable = false;
+            return;
         }
-
-        return true;
+        mBlockable = true;
     }
 
     private boolean shouldSuppressVisualEffect(int effect) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/PipelineDumpable.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/PipelineDumpable.kt
new file mode 100644
index 0000000..a1aec3f
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/PipelineDumpable.kt
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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
+
+interface PipelineDumpable {
+    fun dumpPipeline(d: PipelineDumper)
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/PipelineDumper.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/PipelineDumper.kt
new file mode 100644
index 0000000..a10c745
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/PipelineDumper.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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
+
+import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Pluggable
+import com.android.systemui.statusbar.notification.collection.notifcollection.NotifDismissInterceptor
+import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender
+import com.android.systemui.util.asIndenting
+import com.android.systemui.util.withIncreasedIndent
+import java.io.PrintWriter
+
+class PipelineDumper(pw: PrintWriter) {
+    private val ipw = pw.asIndenting()
+
+    fun print(a: Any?) = ipw.print(a)
+    fun println(a: Any?) = ipw.println(a)
+    fun withIncreasedIndent(b: () -> Unit) = ipw.withIncreasedIndent(b)
+    fun withIncreasedIndent(r: Runnable) = ipw.withIncreasedIndent(r)
+
+    fun dump(label: String, value: Any?) {
+        ipw.print("$label: ")
+        dump(value)
+    }
+
+    private fun dump(value: Any?) = when (value) {
+        null, is String, is Int -> println(value)
+        is Collection<*> -> dumpCollection(value)
+        else -> {
+            println(value.fullPipelineName)
+            withIncreasedIndent { (value as? PipelineDumpable)?.dumpPipeline(this) }
+        }
+    }
+
+    private fun dumpCollection(values: Collection<Any?>) {
+        println(values.size)
+        withIncreasedIndent { values.forEach { dump(it) } }
+    }
+}
+
+private val Any.bareClassName: String get() {
+    val className = javaClass.name
+    val packageName = javaClass.`package`.name
+    return className.substring(packageName.length + 1)
+}
+
+private val Any.barePipelineName: String? get() = when (this) {
+    is NotifLifetimeExtender -> name
+    is NotifDismissInterceptor -> name
+    is Pluggable<*> -> name
+    else -> null
+}
+
+private val Any.fullPipelineName: String get() =
+    barePipelineName?.let { "\"$it\" ($bareClassName)" } ?: bareClassName
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java
index df2fe4e..420f21d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java
@@ -87,7 +87,7 @@
  */
 @MainThread
 @SysUISingleton
-public class ShadeListBuilder implements Dumpable {
+public class ShadeListBuilder implements Dumpable, PipelineDumpable {
     private final SystemClock mSystemClock;
     private final ShadeListBuilderLogger mLogger;
     private final NotificationInteractionTracker mInteractionTracker;
@@ -304,70 +304,72 @@
     private final CollectionReadyForBuildListener mReadyForBuildListener =
             new CollectionReadyForBuildListener() {
                 @Override
-                public void onBuildList(Collection<NotificationEntry> entries) {
+                public void onBuildList(Collection<NotificationEntry> entries, String reason) {
                     Assert.isMainThread();
                     mPipelineState.requireIsBefore(STATE_BUILD_STARTED);
 
-                    mLogger.logOnBuildList();
+                    mLogger.logOnBuildList(reason);
                     mAllEntries = entries;
                     mChoreographer.schedule();
                 }
             };
 
-    private void onPreRenderInvalidated(Invalidator invalidator) {
+    private void onPreRenderInvalidated(Invalidator invalidator, @Nullable String reason) {
         Assert.isMainThread();
 
-        mLogger.logPreRenderInvalidated(invalidator.getName(), mPipelineState.getState());
+        mLogger.logPreRenderInvalidated(invalidator, mPipelineState.getState(), reason);
 
         rebuildListIfBefore(STATE_FINALIZING);
     }
 
-    private void onPreGroupFilterInvalidated(NotifFilter filter) {
+    private void onPreGroupFilterInvalidated(NotifFilter filter, @Nullable String reason) {
         Assert.isMainThread();
 
-        mLogger.logPreGroupFilterInvalidated(filter.getName(), mPipelineState.getState());
+        mLogger.logPreGroupFilterInvalidated(filter, mPipelineState.getState(), reason);
 
         rebuildListIfBefore(STATE_PRE_GROUP_FILTERING);
     }
 
-    private void onReorderingAllowedInvalidated(NotifStabilityManager stabilityManager) {
+    private void onReorderingAllowedInvalidated(NotifStabilityManager stabilityManager,
+            @Nullable String reason) {
         Assert.isMainThread();
 
         mLogger.logReorderingAllowedInvalidated(
-                stabilityManager.getName(),
-                mPipelineState.getState());
+                stabilityManager,
+                mPipelineState.getState(),
+                reason);
 
         rebuildListIfBefore(STATE_GROUPING);
     }
 
-    private void onPromoterInvalidated(NotifPromoter promoter) {
+    private void onPromoterInvalidated(NotifPromoter promoter, @Nullable String reason) {
         Assert.isMainThread();
 
-        mLogger.logPromoterInvalidated(promoter.getName(), mPipelineState.getState());
+        mLogger.logPromoterInvalidated(promoter, mPipelineState.getState(), reason);
 
         rebuildListIfBefore(STATE_TRANSFORMING);
     }
 
-    private void onNotifSectionInvalidated(NotifSectioner section) {
+    private void onNotifSectionInvalidated(NotifSectioner section, @Nullable String reason) {
         Assert.isMainThread();
 
-        mLogger.logNotifSectionInvalidated(section.getName(), mPipelineState.getState());
+        mLogger.logNotifSectionInvalidated(section, mPipelineState.getState(), reason);
 
         rebuildListIfBefore(STATE_SORTING);
     }
 
-    private void onFinalizeFilterInvalidated(NotifFilter filter) {
+    private void onFinalizeFilterInvalidated(NotifFilter filter, @Nullable String reason) {
         Assert.isMainThread();
 
-        mLogger.logFinalizeFilterInvalidated(filter.getName(), mPipelineState.getState());
+        mLogger.logFinalizeFilterInvalidated(filter, mPipelineState.getState(), reason);
 
         rebuildListIfBefore(STATE_FINALIZE_FILTERING);
     }
 
-    private void onNotifComparatorInvalidated(NotifComparator comparator) {
+    private void onNotifComparatorInvalidated(NotifComparator comparator, @Nullable String reason) {
         Assert.isMainThread();
 
-        mLogger.logNotifComparatorInvalidated(comparator.getName(), mPipelineState.getState());
+        mLogger.logNotifComparatorInvalidated(comparator, mPipelineState.getState(), reason);
 
         rebuildListIfBefore(STATE_SORTING);
     }
@@ -456,7 +458,8 @@
         mLogger.logEndBuildList(
                 mIterationCount,
                 mReadOnlyNotifList.size(),
-                countChildren(mReadOnlyNotifList));
+                countChildren(mReadOnlyNotifList),
+                /* enforcedVisualStability */ !mNotifStabilityManager.isEveryChangeAllowed());
         if (mAlwaysLogList || mIterationCount % 10 == 0) {
             Trace.beginSection("ShadeListBuilder.logFinalList");
             mLogger.logFinalList(mNotifList);
@@ -579,11 +582,7 @@
                     if (existingSummary == null) {
                         group.setSummary(entry);
                     } else {
-                        mLogger.logDuplicateSummary(
-                                mIterationCount,
-                                group.getKey(),
-                                existingSummary.getKey(),
-                                entry.getKey());
+                        mLogger.logDuplicateSummary(mIterationCount, group, existingSummary, entry);
 
                         // Use whichever one was posted most recently
                         if (entry.getSbn().getPostTime()
@@ -990,7 +989,7 @@
         // Check for suppressed order changes
         if (!getStabilityManager().isEveryChangeAllowed()) {
             mForceReorderable = true;
-            boolean isSorted = isSorted(mNotifList, mTopLevelComparator);
+            boolean isSorted = isShadeSorted();
             mForceReorderable = false;
             if (!isSorted) {
                 getStabilityManager().onEntryReorderSuppressed();
@@ -999,9 +998,23 @@
         Trace.endSection();
     }
 
+    private boolean isShadeSorted() {
+        if (!isSorted(mNotifList, mTopLevelComparator)) {
+            return false;
+        }
+        for (ListEntry entry : mNotifList) {
+            if (entry instanceof GroupEntry) {
+                if (!isSorted(((GroupEntry) entry).getChildren(), mGroupChildrenComparator)) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
     /** Determine whether the items in the list are sorted according to the comparator */
     @VisibleForTesting
-    public static <T> boolean isSorted(List<T> items, Comparator<T> comparator) {
+    public static <T> boolean isSorted(List<T> items, Comparator<? super T> comparator) {
         if (items.size() <= 1) {
             return true;
         }
@@ -1070,7 +1083,7 @@
         if (!Objects.equals(curr, prev)) {
             mLogger.logEntryAttachStateChanged(
                     mIterationCount,
-                    entry.getKey(),
+                    entry,
                     prev.getParent(),
                     curr.getParent());
 
@@ -1209,7 +1222,7 @@
     };
 
 
-    private final Comparator<ListEntry> mGroupChildrenComparator = (o1, o2) -> {
+    private final Comparator<NotificationEntry> mGroupChildrenComparator = (o1, o2) -> {
         int index1 = canReorder(o1) ? -1 : o1.getPreviousAttachState().getStableIndex();
         int index2 = canReorder(o2) ? -1 : o2.getPreviousAttachState().getStableIndex();
         int cmp = Integer.compare(index1, index2);
@@ -1383,6 +1396,21 @@
                 "\t\t"));
     }
 
+    @Override
+    public void dumpPipeline(@NonNull PipelineDumper d) {
+        d.dump("choreographer", mChoreographer);
+        d.dump("notifPreGroupFilters", mNotifPreGroupFilters);
+        d.dump("onBeforeTransformGroupsListeners", mOnBeforeTransformGroupsListeners);
+        d.dump("notifPromoters", mNotifPromoters);
+        d.dump("onBeforeSortListeners", mOnBeforeSortListeners);
+        d.dump("notifSections", mNotifSections);
+        d.dump("notifComparators", mNotifComparators);
+        d.dump("onBeforeFinalizeFilterListeners", mOnBeforeFinalizeFilterListeners);
+        d.dump("notifFinalizeFilters", mNotifFinalizeFilters);
+        d.dump("onBeforeRenderListListeners", mOnBeforeRenderListListeners);
+        d.dump("onRenderListListener", mOnRenderListListener);
+    }
+
     /** See {@link #setOnRenderListListener(OnRenderListListener)} */
     public interface OnRenderListListener {
         /**
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coalescer/GroupCoalescer.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coalescer/GroupCoalescer.java
index 050b4c1..98f2167 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coalescer/GroupCoalescer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coalescer/GroupCoalescer.java
@@ -32,6 +32,8 @@
 import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.statusbar.NotificationListener;
 import com.android.systemui.statusbar.NotificationListener.NotificationHandler;
+import com.android.systemui.statusbar.notification.collection.PipelineDumpable;
+import com.android.systemui.statusbar.notification.collection.PipelineDumper;
 import com.android.systemui.util.concurrency.DelayableExecutor;
 import com.android.systemui.util.time.SystemClock;
 
@@ -63,7 +65,7 @@
  * passed along to the NotifCollection.
  */
 @MainThread
-public class GroupCoalescer implements Dumpable {
+public class GroupCoalescer implements Dumpable, PipelineDumpable {
     private final DelayableExecutor mMainExecutor;
     private final SystemClock mClock;
     private final GroupCoalescerLogger mLogger;
@@ -314,6 +316,11 @@
         }
     }
 
+    @Override
+    public void dumpPipeline(@NonNull PipelineDumper d) {
+        d.dump("handler", mHandler);
+    }
+
     private final Comparator<CoalescedEvent> mEventComparator = (o1, o2) -> {
         int cmp = Boolean.compare(
                 o2.getSbn().getNotification().isGroupSummary(),
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/BubbleCoordinator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/BubbleCoordinator.java
index b923fdf..3627b40 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/BubbleCoordinator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/BubbleCoordinator.java
@@ -127,14 +127,6 @@
                 DismissedByUserStats dismissedByUserStats,
                 int reason
         ) {
-            if (!mNotifPipeline.isNewPipelineEnabled()) {
-                // The `entry` will be from whichever pipeline is active, so if the old pipeline is
-                // running, make sure that we use the new pipeline's entry (if it still exists).
-                NotificationEntry newPipelineEntry = mNotifPipeline.getEntry(entry.getKey());
-                if (newPipelineEntry != null) {
-                    entry = newPipelineEntry;
-                }
-            }
             if (isInterceptingDismissal(entry)) {
                 mInterceptedDismissalEntries.remove(entry.getKey());
                 mOnEndDismissInterception.onEndDismissInterception(mDismissInterceptor, entry,
@@ -150,7 +142,7 @@
 
         @Override
         public void invalidateNotifications(String reason) {
-            mNotifFilter.invalidateList();
+            mNotifFilter.invalidateList(reason);
         }
 
         @Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/DebugModeCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/DebugModeCoordinator.kt
index df54ccd..2405405 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/DebugModeCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/DebugModeCoordinator.kt
@@ -30,12 +30,12 @@
 ) : Coordinator {
 
     override fun attach(pipeline: NotifPipeline) {
-        pipeline.addPreGroupFilter(preGroupFilter)
-        debugModeFilterProvider.registerInvalidationListener(preGroupFilter::invalidateList)
+        pipeline.addPreGroupFilter(filter)
+        debugModeFilterProvider.registerInvalidationListener { filter.invalidateList(null) }
     }
 
-    private val preGroupFilter = object : NotifFilter("DebugModeCoordinator") {
+    private val filter = object : NotifFilter("DebugModeFilter") {
         override fun shouldFilterOut(entry: NotificationEntry, now: Long) =
             debugModeFilterProvider.shouldFilterOut(entry)
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/DeviceProvisionedCoordinator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/DeviceProvisionedCoordinator.java
index e865249..058042c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/DeviceProvisionedCoordinator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/DeviceProvisionedCoordinator.java
@@ -90,7 +90,7 @@
             new DeviceProvisionedController.DeviceProvisionedListener() {
                 @Override
                 public void onDeviceProvisionedChanged() {
-                    mNotifFilter.invalidateList();
+                    mNotifFilter.invalidateList("onDeviceProvisionedChanged");
                 }
             };
 }
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 da0169b..8278b54 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
@@ -18,7 +18,6 @@
 import android.app.Notification
 import android.app.Notification.GROUP_ALERT_SUMMARY
 import android.util.ArrayMap
-import android.util.ArraySet
 import com.android.systemui.dagger.qualifiers.Main
 import com.android.systemui.statusbar.NotificationRemoteInputManager
 import com.android.systemui.statusbar.notification.collection.GroupEntry
@@ -36,11 +35,13 @@
 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.logKey
 import com.android.systemui.statusbar.notification.stack.BUCKET_HEADS_UP
 import com.android.systemui.statusbar.policy.HeadsUpManager
 import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener
 import com.android.systemui.util.concurrency.DelayableExecutor
 import com.android.systemui.util.time.SystemClock
+import java.util.function.Consumer
 import javax.inject.Inject
 
 /**
@@ -85,6 +86,7 @@
         pipeline.addOnBeforeFinalizeFilterListener(::onBeforeFinalizeFilter)
         pipeline.addPromoter(mNotifPromoter)
         pipeline.addNotificationLifetimeExtender(mLifetimeExtender)
+        mRemoteInputManager.addActionPressListener(mActionPressListener)
     }
 
     private fun onHeadsUpViewBound(entry: NotificationEntry) {
@@ -277,8 +279,8 @@
         .firstOrNull()
         ?.let { posted ->
             posted.entry.takeIf { entry ->
-                locationLookupByKey(entry.key) == GroupLocation.Isolated
-                        && entry.sbn.notification.groupAlertBehavior == GROUP_ALERT_SUMMARY
+                locationLookupByKey(entry.key) == GroupLocation.Isolated &&
+                        entry.sbn.notification.groupAlertBehavior == GROUP_ALERT_SUMMARY
             }
         }
 
@@ -448,6 +450,14 @@
                 (entry.sbn.notification.flags and Notification.FLAG_ONLY_ALERT_ONCE) == 0)
     }
 
+    /** When an action is pressed on a notification, end HeadsUp lifetime extension. */
+    private val mActionPressListener = Consumer<NotificationEntry> { entry ->
+        if (mNotifsExtendingLifetime.contains(entry)) {
+            val removeInMillis = mHeadsUpManager.getEarliestRemovalTime(entry.key)
+            mExecutor.executeDelayed({ endNotifLifetimeExtensionIfExtended(entry) }, removeInMillis)
+        }
+    }
+
     private val mLifetimeExtender = object : NotifLifetimeExtender {
         override fun getName() = TAG
 
@@ -503,6 +513,7 @@
     private val mOnHeadsUpChangedListener = object : OnHeadsUpChangedListener {
         override fun onHeadsUpStateChanged(entry: NotificationEntry, isHeadsUp: Boolean) {
             if (!isHeadsUp) {
+                mNotifPromoter.invalidateList("headsUpEnded: ${entry.logKey}")
                 mHeadsUpViewBinder.unbindHeadsUpView(entry)
                 endNotifLifetimeExtensionIfExtended(entry)
             }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HideNotifsForOtherUsersCoordinator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HideNotifsForOtherUsersCoordinator.java
index 7b5cf85..e4e2bc1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HideNotifsForOtherUsersCoordinator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HideNotifsForOtherUsersCoordinator.java
@@ -41,14 +41,11 @@
 @CoordinatorScope
 public class HideNotifsForOtherUsersCoordinator implements Coordinator {
     private final NotificationLockscreenUserManager mLockscreenUserManager;
-    private final SharedCoordinatorLogger mLogger;
 
     @Inject
     public HideNotifsForOtherUsersCoordinator(
-            NotificationLockscreenUserManager lockscreenUserManager,
-            SharedCoordinatorLogger logger) {
+            NotificationLockscreenUserManager lockscreenUserManager) {
         mLockscreenUserManager = lockscreenUserManager;
-        mLogger = logger;
     }
 
     @Override
@@ -70,23 +67,19 @@
         // changes
         @Override
         public void onCurrentProfilesChanged(SparseArray<UserInfo> currentProfiles) {
-            mLogger.logUserOrProfileChanged(
-                    mLockscreenUserManager.getCurrentUserId(),
-                    profileIdsToStr(currentProfiles));
-            mFilter.invalidateList();
+            StringBuilder sb = new StringBuilder("onCurrentProfilesChanged:");
+            sb.append(" user=").append(mLockscreenUserManager.getCurrentUserId());
+            sb.append(" profiles=");
+            sb.append("{");
+            for (int i = 0; i < currentProfiles.size(); i++) {
+                if (i != 0) {
+                    sb.append(",");
+                }
+                sb.append(currentProfiles.keyAt(i));
+            }
+            sb.append("}");
+            mFilter.invalidateList(sb.toString());
         }
     };
 
-    private String profileIdsToStr(SparseArray<UserInfo> currentProfiles) {
-        StringBuilder sb = new StringBuilder();
-        sb.append("{");
-        for (int i = 0; i < currentProfiles.size(); i++) {
-            sb.append(currentProfiles.keyAt(i));
-            if (i < currentProfiles.size() - 1) {
-                sb.append(",");
-            }
-        }
-        sb.append("}");
-        return sb.toString();
-    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinator.java
index ff1c70c..e3d71c8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinator.java
@@ -16,15 +16,15 @@
 
 package com.android.systemui.statusbar.notification.collection.coordinator;
 
-import com.android.keyguard.KeyguardUpdateMonitor;
+import androidx.annotation.NonNull;
+
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.statusbar.StatusBarState;
-import com.android.systemui.statusbar.notification.SectionHeaderVisibilityProvider;
 import com.android.systemui.statusbar.notification.collection.NotifPipeline;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope;
 import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
-import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
+import com.android.systemui.statusbar.notification.collection.provider.SectionHeaderVisibilityProvider;
 import com.android.systemui.statusbar.notification.interruption.KeyguardNotificationVisibilityProvider;
 
 import javax.inject.Inject;
@@ -36,27 +36,18 @@
 @CoordinatorScope
 public class KeyguardCoordinator implements Coordinator {
     private static final String TAG = "KeyguardCoordinator";
-    private final StatusBarStateController mStatusBarStateController;
-    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
-    private final HighPriorityProvider mHighPriorityProvider;
-    private final SectionHeaderVisibilityProvider mSectionHeaderVisibilityProvider;
     private final KeyguardNotificationVisibilityProvider mKeyguardNotificationVisibilityProvider;
-    private final SharedCoordinatorLogger mLogger;
+    private final SectionHeaderVisibilityProvider mSectionHeaderVisibilityProvider;
+    private final StatusBarStateController mStatusBarStateController;
 
     @Inject
     public KeyguardCoordinator(
-            StatusBarStateController statusBarStateController,
-            KeyguardUpdateMonitor keyguardUpdateMonitor,
-            HighPriorityProvider highPriorityProvider,
-            SectionHeaderVisibilityProvider sectionHeaderVisibilityProvider,
             KeyguardNotificationVisibilityProvider keyguardNotificationVisibilityProvider,
-            SharedCoordinatorLogger logger) {
-        mStatusBarStateController = statusBarStateController;
-        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
-        mHighPriorityProvider = highPriorityProvider;
-        mSectionHeaderVisibilityProvider = sectionHeaderVisibilityProvider;
+            SectionHeaderVisibilityProvider sectionHeaderVisibilityProvider,
+            StatusBarStateController statusBarStateController) {
         mKeyguardNotificationVisibilityProvider = keyguardNotificationVisibilityProvider;
-        mLogger = logger;
+        mSectionHeaderVisibilityProvider = sectionHeaderVisibilityProvider;
+        mStatusBarStateController = statusBarStateController;
     }
 
     @Override
@@ -72,7 +63,7 @@
 
     private final NotifFilter mNotifFilter = new NotifFilter(TAG) {
         @Override
-        public boolean shouldFilterOut(NotificationEntry entry, long now) {
+        public boolean shouldFilterOut(@NonNull NotificationEntry entry, long now) {
             return mKeyguardNotificationVisibilityProvider.shouldHideNotification(entry);
         }
     };
@@ -84,9 +75,8 @@
     }
 
     private void invalidateListFromFilter(String reason) {
-        mLogger.logKeyguardCoordinatorInvalidated(reason);
         updateSectionHeadersVisibility();
-        mNotifFilter.invalidateList();
+        mNotifFilter.invalidateList(reason);
     }
 
     private void updateSectionHeadersVisibility() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/NotifCoordinators.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/NotifCoordinators.kt
index 359e202..1399385 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/NotifCoordinators.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/NotifCoordinators.kt
@@ -15,24 +15,22 @@
  */
 package com.android.systemui.statusbar.notification.collection.coordinator
 
-import com.android.systemui.Dumpable
-import com.android.systemui.dump.DumpManager
 import com.android.systemui.statusbar.notification.NotifPipelineFlags
 import com.android.systemui.statusbar.notification.collection.NotifPipeline
+import com.android.systemui.statusbar.notification.collection.PipelineDumpable
+import com.android.systemui.statusbar.notification.collection.PipelineDumper
 import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
 import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner
-import java.io.PrintWriter
 import javax.inject.Inject
 
 /**
  * Handles the attachment of [Coordinator]s to the [NotifPipeline] so that the
  * Coordinators can register their respective callbacks.
  */
-interface NotifCoordinators : Coordinator, Dumpable
+interface NotifCoordinators : Coordinator, PipelineDumpable
 
 @CoordinatorScope
 class NotifCoordinatorsImpl @Inject constructor(
-    dumpManager: DumpManager,
     notifPipelineFlags: NotifPipelineFlags,
     dataStoreCoordinator: DataStoreCoordinator,
     hideLocallyDismissedNotifsCoordinator: HideLocallyDismissedNotifsCoordinator,
@@ -66,15 +64,11 @@
      * Creates all the coordinators.
      */
     init {
-        dumpManager.registerDumpable(TAG, this)
-
         // TODO(b/208866714): formalize the system by which some coordinators may be required by the
         //  pipeline, such as this DataStoreCoordinator which cannot be removed, as it's a critical
         //  glue between the pipeline and parts of SystemUI which depend on pipeline output via the
         //  NotifLiveDataStore.
-        if (notifPipelineFlags.isNewPipelineEnabled()) {
-            mCoordinators.add(dataStoreCoordinator)
-        }
+        mCoordinators.add(dataStoreCoordinator)
 
         // Attach normal coordinators.
         mCoordinators.add(hideLocallyDismissedNotifsCoordinator)
@@ -97,18 +91,14 @@
         if (notifPipelineFlags.isSmartspaceDedupingEnabled()) {
             mCoordinators.add(smartspaceDedupingCoordinator)
         }
-        if (notifPipelineFlags.isNewPipelineEnabled()) {
-            mCoordinators.add(headsUpCoordinator)
-            mCoordinators.add(gutsCoordinator)
-            mCoordinators.add(preparationCoordinator)
-            mCoordinators.add(remoteInputCoordinator)
-        }
+        mCoordinators.add(headsUpCoordinator)
+        mCoordinators.add(gutsCoordinator)
+        mCoordinators.add(preparationCoordinator)
+        mCoordinators.add(remoteInputCoordinator)
 
         // Manually add Ordered Sections
         // HeadsUp > FGS > People > Alerting > Silent > Minimized > Unknown/Default
-        if (notifPipelineFlags.isNewPipelineEnabled()) {
-            mOrderedSections.add(headsUpCoordinator.sectioner) // HeadsUp
-        }
+        mOrderedSections.add(headsUpCoordinator.sectioner)
         mOrderedSections.add(appOpsCoordinator.sectioner) // ForegroundService
         mOrderedSections.add(conversationCoordinator.sectioner) // People
         mOrderedSections.add(rankingCoordinator.alertingSectioner) // Alerting
@@ -127,15 +117,12 @@
         pipeline.setSections(mOrderedSections)
     }
 
-    override fun dump(pw: PrintWriter, args: Array<String>) {
-        pw.println()
-        pw.println("$TAG:")
-        for (c in mCoordinators) {
-            pw.println("\t${c.javaClass}")
-        }
-        for (s in mOrderedSections) {
-            pw.println("\t${s.name}")
-        }
+    /*
+     * As part of the NotifPipeline dumpable, dumps the list of coordinators; sections are omitted
+     * as they are dumped in the RenderStageManager instead.
+     */
+    override fun dumpPipeline(d: PipelineDumper) = with(d) {
+        dump("coordinators", mCoordinators)
     }
 
     companion object {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinator.java
index 210fe8f..ef1e57b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinator.java
@@ -16,6 +16,7 @@
 
 package com.android.systemui.statusbar.notification.collection.coordinator;
 
+import static com.android.systemui.statusbar.notification.NotificationUtils.logKey;
 import static com.android.systemui.statusbar.notification.stack.NotificationChildrenContainer.NUMBER_OF_CHILDREN_WHEN_CHILDREN_EXPANDED;
 
 import static java.util.Objects.requireNonNull;
@@ -147,7 +148,8 @@
     @Override
     public void attach(NotifPipeline pipeline) {
         mNotifErrorManager.addInflationErrorListener(mInflationErrorListener);
-        mAdjustmentProvider.addDirtyListener(mNotifInflatingFilter::invalidateList);
+        mAdjustmentProvider.addDirtyListener(
+                () -> mNotifInflatingFilter.invalidateList("adjustmentProviderChanged"));
 
         pipeline.addCollectionListener(mNotifCollectionListener);
         // Inflate after grouping/sorting since that affects what views to inflate.
@@ -245,12 +247,13 @@
             } catch (RemoteException ex) {
                 // System server is dead, nothing to do about that
             }
-            mNotifInflationErrorFilter.invalidateList();
+            mNotifInflationErrorFilter.invalidateList("onNotifInflationError for " + logKey(entry));
         }
 
         @Override
         public void onNotifInflationErrorCleared(NotificationEntry entry) {
-            mNotifInflationErrorFilter.invalidateList();
+            mNotifInflationErrorFilter.invalidateList(
+                    "onNotifInflationErrorCleared for " + logKey(entry));
         }
     };
 
@@ -360,22 +363,25 @@
     }
 
     private void abortInflation(NotificationEntry entry, String reason) {
-        mLogger.logInflationAborted(entry.getKey(), reason);
-        mNotifInflater.abortInflation(entry);
-        mInflatingNotifs.remove(entry);
+        final boolean taskAborted = mNotifInflater.abortInflation(entry);
+        final boolean wasInflating = mInflatingNotifs.remove(entry);
+        if (taskAborted || wasInflating) {
+            mLogger.logInflationAborted(entry, reason);
+        }
     }
 
     private void onInflationFinished(NotificationEntry entry, NotifViewController controller) {
-        mLogger.logNotifInflated(entry.getKey());
+        mLogger.logNotifInflated(entry);
         mInflatingNotifs.remove(entry);
         mViewBarn.registerViewForEntry(entry, controller);
         mInflationStates.put(entry, STATE_INFLATED);
         mBindEventManager.notifyViewBound(entry);
-        mNotifInflatingFilter.invalidateList();
+        mNotifInflatingFilter.invalidateList("onInflationFinished for " + logKey(entry));
     }
 
     private void freeNotifViews(NotificationEntry entry) {
         mViewBarn.removeViewForEntry(entry);
+        mNotifInflater.releaseViews(entry);
         // TODO: clear the entry's row here, or even better, stop setting the row on the entry!
         mInflationStates.put(entry, STATE_UNINFLATED);
     }
@@ -397,20 +403,20 @@
             return false;
         }
         if (isBeyondGroupInitializationWindow(group, now)) {
-            mLogger.logGroupInflationTookTooLong(group.getKey());
+            mLogger.logGroupInflationTookTooLong(group);
             return false;
         }
         if (mInflatingNotifs.contains(group.getSummary())) {
-            mLogger.logDelayingGroupRelease(group.getKey(), group.getSummary().getKey());
+            mLogger.logDelayingGroupRelease(group, group.getSummary());
             return true;
         }
         for (NotificationEntry child : group.getChildren()) {
             if (mInflatingNotifs.contains(child) && !child.wasAttachedInPreviousPass()) {
-                mLogger.logDelayingGroupRelease(group.getKey(), child.getKey());
+                mLogger.logDelayingGroupRelease(group, child);
                 return true;
             }
         }
-        mLogger.logDoneWaitingForGroupInflation(group.getKey());
+        mLogger.logDoneWaitingForGroupInflation(group);
         return false;
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinatorLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinatorLogger.kt
index f835250..30f1315 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinatorLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinatorLogger.kt
@@ -19,48 +19,51 @@
 import com.android.systemui.log.LogBuffer
 import com.android.systemui.log.LogLevel
 import com.android.systemui.log.dagger.NotificationLog
+import com.android.systemui.statusbar.notification.collection.GroupEntry
+import com.android.systemui.statusbar.notification.collection.NotificationEntry
+import com.android.systemui.statusbar.notification.logKey
 import javax.inject.Inject
 
 class PreparationCoordinatorLogger @Inject constructor(
     @NotificationLog private val buffer: LogBuffer
 ) {
-    fun logNotifInflated(key: String) {
+    fun logNotifInflated(entry: NotificationEntry) {
         buffer.log(TAG, LogLevel.DEBUG, {
-            str1 = key
+            str1 = entry.logKey
         }, {
             "NOTIF INFLATED $str1"
         })
     }
 
-    fun logInflationAborted(key: String, reason: String) {
+    fun logInflationAborted(entry: NotificationEntry, reason: String) {
         buffer.log(TAG, LogLevel.DEBUG, {
-            str1 = key
+            str1 = entry.logKey
             str2 = reason
         }, {
             "NOTIF INFLATION ABORTED $str1 reason=$str2"
         })
     }
 
-    fun logDoneWaitingForGroupInflation(groupKey: String) {
+    fun logDoneWaitingForGroupInflation(group: GroupEntry) {
         buffer.log(TAG, LogLevel.DEBUG, {
-            str1 = groupKey
+            str1 = group.logKey
         }, {
             "Finished inflating all members of group $str1, releasing group"
         })
     }
 
-    fun logGroupInflationTookTooLong(groupKey: String) {
+    fun logGroupInflationTookTooLong(group: GroupEntry) {
         buffer.log(TAG, LogLevel.WARNING, {
-            str1 = groupKey
+            str1 = group.logKey
         }, {
             "Group inflation took too long for $str1, releasing children early"
         })
     }
 
-    fun logDelayingGroupRelease(groupKey: String, childKey: String) {
+    fun logDelayingGroupRelease(group: GroupEntry, child: NotificationEntry) {
         buffer.log(TAG, LogLevel.DEBUG, {
-            str1 = groupKey
-            str2 = childKey
+            str1 = group.logKey
+            str2 = child.logKey
         }, {
             "Delaying release of group $str1 because child $str2 is still inflating"
         })
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinator.java
index 57fd197..67a8a63 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinator.java
@@ -20,7 +20,6 @@
 import android.annotation.Nullable;
 
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.statusbar.notification.SectionClassifier;
 import com.android.systemui.statusbar.notification.collection.ListEntry;
 import com.android.systemui.statusbar.notification.collection.NotifPipeline;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
@@ -28,6 +27,7 @@
 import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
 import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner;
 import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
+import com.android.systemui.statusbar.notification.collection.provider.SectionStyleProvider;
 import com.android.systemui.statusbar.notification.collection.render.NodeController;
 import com.android.systemui.statusbar.notification.collection.render.SectionHeaderController;
 import com.android.systemui.statusbar.notification.dagger.AlertingHeader;
@@ -51,7 +51,7 @@
     public static final boolean SHOW_ALL_SECTIONS = false;
     private final StatusBarStateController mStatusBarStateController;
     private final HighPriorityProvider mHighPriorityProvider;
-    private final SectionClassifier mSectionClassifier;
+    private final SectionStyleProvider mSectionStyleProvider;
     private final NodeController mSilentNodeController;
     private final SectionHeaderController mSilentHeaderController;
     private final NodeController mAlertingHeaderController;
@@ -62,13 +62,13 @@
     public RankingCoordinator(
             StatusBarStateController statusBarStateController,
             HighPriorityProvider highPriorityProvider,
-            SectionClassifier sectionClassifier,
+            SectionStyleProvider sectionStyleProvider,
             @AlertingHeader NodeController alertingHeaderController,
             @SilentHeader SectionHeaderController silentHeaderController,
             @SilentHeader NodeController silentNodeController) {
         mStatusBarStateController = statusBarStateController;
         mHighPriorityProvider = highPriorityProvider;
-        mSectionClassifier = sectionClassifier;
+        mSectionStyleProvider = sectionStyleProvider;
         mAlertingHeaderController = alertingHeaderController;
         mSilentNodeController = silentNodeController;
         mSilentHeaderController = silentHeaderController;
@@ -77,7 +77,7 @@
     @Override
     public void attach(NotifPipeline pipeline) {
         mStatusBarStateController.addCallback(mStatusBarStateCallback);
-        mSectionClassifier.setMinimizedSections(Collections.singleton(mMinimizedNotifSectioner));
+        mSectionStyleProvider.setMinimizedSections(Collections.singleton(mMinimizedNotifSectioner));
 
         pipeline.addPreGroupFilter(mSuspendedFilter);
         pipeline.addPreGroupFilter(mDndVisualEffectsFilter);
@@ -199,7 +199,7 @@
             new StatusBarStateController.StateListener() {
                 @Override
                 public void onDozingChanged(boolean isDozing) {
-                    mDndVisualEffectsFilter.invalidateList();
+                    mDndVisualEffectsFilter.invalidateList("onDozingChanged to " + isDozing);
                 }
             };
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RowAppearanceCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RowAppearanceCoordinator.kt
index 4e9d3ac..1494574 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RowAppearanceCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RowAppearanceCoordinator.kt
@@ -19,11 +19,11 @@
 import android.content.Context
 import com.android.systemui.R
 import com.android.systemui.statusbar.notification.AssistantFeedbackController
-import com.android.systemui.statusbar.notification.SectionClassifier
 import com.android.systemui.statusbar.notification.collection.ListEntry
 import com.android.systemui.statusbar.notification.collection.NotifPipeline
 import com.android.systemui.statusbar.notification.collection.NotificationEntry
 import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
+import com.android.systemui.statusbar.notification.collection.provider.SectionStyleProvider
 import com.android.systemui.statusbar.notification.collection.render.NotifRowController
 import javax.inject.Inject
 
@@ -35,7 +35,7 @@
 class RowAppearanceCoordinator @Inject internal constructor(
     context: Context,
     private var mAssistantFeedbackController: AssistantFeedbackController,
-    private var mSectionClassifier: SectionClassifier
+    private var mSectionStyleProvider: SectionStyleProvider
 ) : Coordinator {
 
     private var entryToExpand: NotificationEntry? = null
@@ -55,7 +55,7 @@
 
     private fun onBeforeRenderList(list: List<ListEntry>) {
         entryToExpand = list.firstOrNull()?.representativeEntry?.takeIf { entry ->
-            !mSectionClassifier.isMinimizedSection(entry.section!!)
+            !mSectionStyleProvider.isMinimizedSection(entry.section!!)
         }
     }
 
@@ -68,4 +68,4 @@
         // Show the "alerted" bell icon
         controller.setLastAudiblyAlertedMs(entry.lastAudiblyAlertedMs)
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/SensitiveContentCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/SensitiveContentCoordinator.kt
index 3f8a39f..aeeeb4f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/SensitiveContentCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/SensitiveContentCoordinator.kt
@@ -64,7 +64,7 @@
         pipeline.addPreRenderInvalidator(this)
     }
 
-    override fun onDynamicPrivacyChanged(): Unit = invalidateList()
+    override fun onDynamicPrivacyChanged(): Unit = invalidateList("onDynamicPrivacyChanged")
 
     override fun onBeforeRenderList(entries: List<ListEntry>) {
         if (keyguardStateController.isKeyguardGoingAway() ||
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/SharedCoordinatorLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/SharedCoordinatorLogger.kt
deleted file mode 100644
index 25bc641..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/SharedCoordinatorLogger.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.LogBuffer
-import com.android.systemui.log.LogLevel
-import com.android.systemui.log.dagger.NotificationLog
-import javax.inject.Inject
-
-/**
- * Shared logging class for coordinators that don't log enough to merit their own logger.
- */
-class SharedCoordinatorLogger @Inject constructor(
-    @NotificationLog private val buffer: LogBuffer
-) {
-    fun logUserOrProfileChanged(userId: Int, profiles: String) {
-        buffer.log("NotCurrentUserFilter", LogLevel.INFO, {
-            int1 = userId
-            str1 = profiles
-        }, {
-            "Current user or profiles changed. Current user is $int1; profiles are $str1"
-        })
-    }
-
-    fun logKeyguardCoordinatorInvalidated(reason: String) {
-        buffer.log("KeyguardCoordinator", LogLevel.DEBUG, {
-            str1 = reason
-        }, {
-            "KeyguardCoordinator invalidated: $str1"
-        })
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/SmartspaceDedupingCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/SmartspaceDedupingCoordinator.kt
index 48f00ac..9d0f974 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/SmartspaceDedupingCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/SmartspaceDedupingCoordinator.kt
@@ -30,6 +30,7 @@
 import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
 import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter
 import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener
+import com.android.systemui.statusbar.notification.logKey
 import com.android.systemui.util.concurrency.DelayableExecutor
 import com.android.systemui.util.time.SystemClock
 import java.util.concurrent.TimeUnit.SECONDS
@@ -65,13 +66,6 @@
         statusBarStateController.addCallback(statusBarStateListener)
         smartspaceController.addListener(this::onNewSmartspaceTargets)
 
-        if (!pipeline.isNewPipelineEnabled) {
-            // TODO (b/173126564): Remove this once the old pipeline is no longer necessary
-            notificationLockscreenUserManager.addKeyguardNotificationSuppressor { entry ->
-                isDupedWithSmartspaceContent(entry)
-            }
-        }
-
         recordStatusBarState(statusBarStateController.state)
     }
 
@@ -137,7 +131,7 @@
         }
 
         if (changed) {
-            filter.invalidateList()
+            filter.invalidateList("onNewSmartspaceTargets")
             notificationEntryManager.updateNotifications("Smartspace targets changed")
         }
 
@@ -174,7 +168,7 @@
             target.cancelTimeoutRunnable = executor.executeDelayed({
                 target.cancelTimeoutRunnable = null
                 target.shouldFilter = true
-                filter.invalidateList()
+                filter.invalidateList("updateAlertException: ${entry.logKey}")
                 notificationEntryManager.updateNotifications("deduping timeout expired")
             }, alertExceptionExpires - now)
         }
@@ -191,7 +185,7 @@
         isOnLockscreen = newState == StatusBarState.KEYGUARD
 
         if (isOnLockscreen != wasOnLockscreen) {
-            filter.invalidateList()
+            filter.invalidateList("recordStatusBarState: " + StatusBarState.toString(newState))
             // No need to call notificationEntryManager.updateNotifications; something else already
             // does it for us when the keyguard state changes
         }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ViewConfigCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ViewConfigCoordinator.kt
index 31a13e6..657c394d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ViewConfigCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ViewConfigCoordinator.kt
@@ -16,15 +16,18 @@
 
 package com.android.systemui.statusbar.notification.collection.coordinator
 
+import android.util.Log
 import com.android.internal.widget.MessagingGroup
 import com.android.internal.widget.MessagingMessage
 import com.android.keyguard.KeyguardUpdateMonitor
+import com.android.keyguard.KeyguardUpdateMonitorCallback
 import com.android.systemui.statusbar.NotificationLockscreenUserManager
 import com.android.systemui.statusbar.NotificationLockscreenUserManager.UserChangedListener
 import com.android.systemui.statusbar.notification.collection.NotifPipeline
 import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
 import com.android.systemui.statusbar.notification.row.NotificationGutsManager
 import com.android.systemui.statusbar.policy.ConfigurationController
+import com.android.systemui.util.Compile
 import javax.inject.Inject
 
 /**
@@ -38,24 +41,50 @@
     private val mLockscreenUserManager: NotificationLockscreenUserManager,
     private val mGutsManager: NotificationGutsManager,
     private val mKeyguardUpdateMonitor: KeyguardUpdateMonitor
-) : Coordinator, UserChangedListener, ConfigurationController.ConfigurationListener {
+) : Coordinator, ConfigurationController.ConfigurationListener {
 
+    private var mIsSwitchingUser = false
     private var mReinflateNotificationsOnUserSwitched = false
     private var mDispatchUiModeChangeOnUserSwitched = false
     private var mPipeline: NotifPipeline? = null
 
-    override fun attach(pipeline: NotifPipeline) {
-        mPipeline = pipeline
-        if (pipeline.isNewPipelineEnabled) {
-            mLockscreenUserManager.addUserChangedListener(this)
-            mConfigurationController.addCallback(this)
+    private val mKeyguardUpdateCallback = object : KeyguardUpdateMonitorCallback() {
+        override fun onUserSwitching(userId: Int) {
+            log { "ViewConfigCoordinator.onUserSwitching(userId=$userId)" }
+            mIsSwitchingUser = true
+        }
+
+        override fun onUserSwitchComplete(userId: Int) {
+            log { "ViewConfigCoordinator.onUserSwitchComplete(userId=$userId)" }
+            mIsSwitchingUser = false
+            applyChangesOnUserSwitched()
         }
     }
 
+    private val mUserChangedListener = object : UserChangedListener {
+        override fun onUserChanged(userId: Int) {
+            log { "ViewConfigCoordinator.onUserChanged(userId=$userId)" }
+            applyChangesOnUserSwitched()
+        }
+    }
+
+    override fun attach(pipeline: NotifPipeline) {
+        mPipeline = pipeline
+        mLockscreenUserManager.addUserChangedListener(mUserChangedListener)
+        mConfigurationController.addCallback(this)
+        mKeyguardUpdateMonitor.registerCallback(mKeyguardUpdateCallback)
+    }
+
     override fun onDensityOrFontScaleChanged() {
+        log {
+            val keyguardIsSwitchingUser = mKeyguardUpdateMonitor.isSwitchingUser
+            "ViewConfigCoordinator.onDensityOrFontScaleChanged()" +
+                    " isSwitchingUser=$mIsSwitchingUser" +
+                    " keyguardUpdateMonitor.isSwitchingUser=$keyguardIsSwitchingUser"
+        }
         MessagingMessage.dropCache()
         MessagingGroup.dropCache()
-        if (!mKeyguardUpdateMonitor.isSwitchingUser) {
+        if (!mIsSwitchingUser) {
             updateNotificationsOnDensityOrFontScaleChanged()
         } else {
             mReinflateNotificationsOnUserSwitched = true
@@ -63,7 +92,13 @@
     }
 
     override fun onUiModeChanged() {
-        if (!mKeyguardUpdateMonitor.isSwitchingUser) {
+        log {
+            val keyguardIsSwitchingUser = mKeyguardUpdateMonitor.isSwitchingUser
+            "ViewConfigCoordinator.onUiModeChanged()" +
+                    " isSwitchingUser=$mIsSwitchingUser" +
+                    " keyguardUpdateMonitor.isSwitchingUser=$keyguardIsSwitchingUser"
+        }
+        if (!mIsSwitchingUser) {
             updateNotificationsOnUiModeChanged()
         } else {
             mDispatchUiModeChangeOnUserSwitched = true
@@ -74,7 +109,7 @@
         onDensityOrFontScaleChanged()
     }
 
-    override fun onUserChanged(userId: Int) {
+    private fun applyChangesOnUserSwitched() {
         if (mReinflateNotificationsOnUserSwitched) {
             updateNotificationsOnDensityOrFontScaleChanged()
             mReinflateNotificationsOnUserSwitched = false
@@ -86,9 +121,9 @@
     }
 
     private fun updateNotificationsOnUiModeChanged() {
+        log { "ViewConfigCoordinator.updateNotificationsOnUiModeChanged()" }
         mPipeline?.allNotifs?.forEach { entry ->
-            val row = entry.row
-            row?.onUiModeChanged()
+            entry.row?.onUiModeChanged()
         }
     }
 
@@ -101,4 +136,13 @@
             }
         }
     }
-}
\ No newline at end of file
+
+    private inline fun log(message: () -> String) {
+        if (DEBUG) Log.d(TAG, message())
+    }
+
+    companion object {
+        private const val TAG = "ViewConfigCoordinator"
+        private val DEBUG = Compile.IS_DEBUG && Log.isLoggable(TAG, Log.DEBUG)
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinator.java
index d7bd95c..d3bc257 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinator.java
@@ -16,8 +16,9 @@
 
 package com.android.systemui.statusbar.notification.collection.coordinator;
 
-import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_AWAKE;
-import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_WAKING;
+import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_ASLEEP;
+
+import android.util.Log;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.VisibleForTesting;
@@ -27,14 +28,15 @@
 import com.android.systemui.dump.DumpManager;
 import com.android.systemui.keyguard.WakefulnessLifecycle;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.shade.NotifPanelEvents;
 import com.android.systemui.statusbar.notification.collection.GroupEntry;
 import com.android.systemui.statusbar.notification.collection.ListEntry;
 import com.android.systemui.statusbar.notification.collection.NotifPipeline;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifStabilityManager;
 import com.android.systemui.statusbar.notification.collection.provider.VisualStabilityProvider;
-import com.android.systemui.statusbar.phone.NotifPanelEvents;
 import com.android.systemui.statusbar.policy.HeadsUpManager;
+import com.android.systemui.util.Compile;
 import com.android.systemui.util.concurrency.DelayableExecutor;
 
 import java.io.PrintWriter;
@@ -54,6 +56,8 @@
 @SysUISingleton
 public class VisualStabilityCoordinator implements Coordinator, Dumpable,
         NotifPanelEvents.Listener {
+    public static final String TAG = "VisualStability";
+    public static final boolean DEBUG = Compile.IS_DEBUG && Log.isLoggable(TAG, Log.VERBOSE);
     private final DelayableExecutor mDelayableExecutor;
     private final HeadsUpManager mHeadsUpManager;
     private final NotifPanelEvents mNotifPanelEvents;
@@ -61,7 +65,8 @@
     private final VisualStabilityProvider mVisualStabilityProvider;
     private final WakefulnessLifecycle mWakefulnessLifecycle;
 
-    private boolean mScreenOn;
+    private boolean mSleepy = true;
+    private boolean mFullyDozed;
     private boolean mPanelExpanded;
     private boolean mPulsing;
     private boolean mNotifPanelCollapsing;
@@ -104,8 +109,8 @@
     @Override
     public void attach(NotifPipeline pipeline) {
         mWakefulnessLifecycle.addObserver(mWakefulnessObserver);
-        mScreenOn = mWakefulnessLifecycle.getWakefulness() == WAKEFULNESS_AWAKE
-                || mWakefulnessLifecycle.getWakefulness() == WAKEFULNESS_WAKING;
+        mSleepy = mWakefulnessLifecycle.getWakefulness() == WAKEFULNESS_ASLEEP;
+        mFullyDozed = mStatusBarStateController.getDozeAmount() == 1f;
 
         mStatusBarStateController.addCallback(mStatusBarStateControllerListener);
         mPulsing = mStatusBarStateController.isPulsing();
@@ -113,6 +118,7 @@
 
         pipeline.setVisualStabilityManager(mNotifStabilityManager);
     }
+
     // TODO(b/203826051): Ensure stability manager can allow reordering off-screen
     //  HUNs to the top of the shade
     private final NotifStabilityManager mNotifStabilityManager =
@@ -174,14 +180,28 @@
                 }
             };
 
-    private void updateAllowedStates() {
+    private void updateAllowedStates(String field, boolean value) {
+        boolean wasPipelineRunAllowed = mPipelineRunAllowed;
+        boolean wasReorderingAllowed = mReorderingAllowed;
         mPipelineRunAllowed = !isPanelCollapsingOrLaunchingActivity();
         mReorderingAllowed = isReorderingAllowed();
-        if ((mPipelineRunAllowed && mIsSuppressingPipelineRun)
-                || (mReorderingAllowed && (mIsSuppressingGroupChange
-                        || isSuppressingSectionChange()
-                        || mIsSuppressingEntryReorder))) {
-            mNotifStabilityManager.invalidateList();
+        if (DEBUG && (wasPipelineRunAllowed != mPipelineRunAllowed
+                || wasReorderingAllowed != mReorderingAllowed)) {
+            Log.d(TAG, "Stability allowances changed:"
+                    + "  pipelineRunAllowed " + wasPipelineRunAllowed + "->" + mPipelineRunAllowed
+                    + "  reorderingAllowed " + wasReorderingAllowed + "->" + mReorderingAllowed
+                    + "  when setting " + field + "=" + value);
+        }
+        if (mPipelineRunAllowed && mIsSuppressingPipelineRun) {
+            mNotifStabilityManager.invalidateList("pipeline run suppression ended");
+        } else if (mReorderingAllowed && (mIsSuppressingGroupChange
+                || isSuppressingSectionChange()
+                || mIsSuppressingEntryReorder)) {
+            String reason = "reorder suppression ended for"
+                    + " group=" + mIsSuppressingGroupChange
+                    + " section=" + isSuppressingSectionChange()
+                    + " sort=" + mIsSuppressingEntryReorder;
+            mNotifStabilityManager.invalidateList(reason);
         }
         mVisualStabilityProvider.setReorderingAllowed(mReorderingAllowed);
     }
@@ -195,7 +215,7 @@
     }
 
     private boolean isReorderingAllowed() {
-        return (!mScreenOn || !mPanelExpanded) && !mPulsing;
+        return ((mFullyDozed && mSleepy) || !mPanelExpanded) && !mPulsing;
     }
 
     /**
@@ -226,7 +246,7 @@
                         now + ALLOW_SECTION_CHANGE_TIMEOUT));
 
         if (!wasSectionChangeAllowed) {
-            mNotifStabilityManager.invalidateList();
+            mNotifStabilityManager.invalidateList("temporarilyAllowSectionChanges");
         }
     }
 
@@ -235,27 +255,37 @@
                 @Override
                 public void onPulsingChanged(boolean pulsing) {
                     mPulsing = pulsing;
-                    updateAllowedStates();
+                    updateAllowedStates("pulsing", pulsing);
                 }
 
                 @Override
                 public void onExpandedChanged(boolean expanded) {
                     mPanelExpanded = expanded;
-                    updateAllowedStates();
+                    updateAllowedStates("panelExpanded", expanded);
+                }
+
+                @Override
+                public void onDozeAmountChanged(float linear, float eased) {
+                    final boolean fullyDozed = linear == 1f;
+                    mFullyDozed = fullyDozed;
+                    updateAllowedStates("fullyDozed", fullyDozed);
                 }
             };
 
     final WakefulnessLifecycle.Observer mWakefulnessObserver = new WakefulnessLifecycle.Observer() {
         @Override
         public void onFinishedGoingToSleep() {
-            mScreenOn = false;
-            updateAllowedStates();
+            // NOTE: this method is called much earlier than what we consider "finished" going to
+            // sleep (the animation isn't done), so we also need to check the doze amount is not 1
+            // and use the combo to determine that the locked shade is not visible.
+            mSleepy = true;
+            updateAllowedStates("sleepy", true);
         }
 
         @Override
         public void onStartedWakingUp() {
-            mScreenOn = true;
-            updateAllowedStates();
+            mSleepy = false;
+            updateAllowedStates("sleepy", false);
         }
     };
 
@@ -265,7 +295,8 @@
         pw.println("  notifPanelCollapsing: " + mNotifPanelCollapsing);
         pw.println("  launchingNotifActivity: " + mNotifPanelLaunchingActivity);
         pw.println("reorderingAllowed: " + mReorderingAllowed);
-        pw.println("  screenOn: " + mScreenOn);
+        pw.println("  sleepy: " + mSleepy);
+        pw.println("  fullyDozed: " + mFullyDozed);
         pw.println("  panelExpanded: " + mPanelExpanded);
         pw.println("  pulsing: " + mPulsing);
         pw.println("isSuppressingPipelineRun: " + mIsSuppressingPipelineRun);
@@ -285,12 +316,12 @@
     @Override
     public void onPanelCollapsingChanged(boolean isCollapsing) {
         mNotifPanelCollapsing = isCollapsing;
-        updateAllowedStates();
+        updateAllowedStates("notifPanelCollapsing", isCollapsing);
     }
 
     @Override
     public void onLaunchingActivityChanged(boolean isLaunchingActivity) {
         mNotifPanelLaunchingActivity = isLaunchingActivity;
-        updateAllowedStates();
+        updateAllowedStates("notifPanelLaunchingActivity", isLaunchingActivity);
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotifInflater.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotifInflater.kt
index d98e7f7..08e21e8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotifInflater.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotifInflater.kt
@@ -42,9 +42,14 @@
 
     /**
      * Request to stop the inflation of an entry.  For example, called when a notification is
-     * removed and no longer needs to be inflated.
+     * removed and no longer needs to be inflated.  Returns whether anything may have been aborted.
      */
-    fun abortInflation(entry: NotificationEntry)
+    fun abortInflation(entry: NotificationEntry): Boolean
+
+    /**
+     * Called to let the system remove the content views from the notification row.
+     */
+    fun releaseViews(entry: NotificationEntry)
 
     /**
      * Callback once all the views are inflated and bound for a given NotificationEntry.
@@ -57,4 +62,4 @@
      * A class holding parameters used when inflating the notification row
      */
     class Params(val isLowPriority: Boolean, val reason: String)
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotifUiAdjustment.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotifUiAdjustment.kt
index 3475fcf..ee0b008 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotifUiAdjustment.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotifUiAdjustment.kt
@@ -31,6 +31,7 @@
     val smartActions: List<Notification.Action>,
     val smartReplies: List<CharSequence>,
     val isConversation: Boolean,
+    val isSnoozeEnabled: Boolean,
     val isMinimized: Boolean,
     val needsRedaction: Boolean,
 ) {
@@ -42,6 +43,7 @@
         ): Boolean = when {
             oldAdjustment === newAdjustment -> false
             oldAdjustment.isConversation != newAdjustment.isConversation -> true
+            oldAdjustment.isSnoozeEnabled != newAdjustment.isSnoozeEnabled -> true
             oldAdjustment.isMinimized != newAdjustment.isMinimized -> true
             oldAdjustment.needsRedaction != newAdjustment.needsRedaction -> true
             areDifferent(oldAdjustment.smartActions, newAdjustment.smartActions) -> true
@@ -57,9 +59,9 @@
             first.size != second.size -> true
             else -> first.asSequence().zip(second.asSequence()).any {
                 (!TextUtils.equals(it.first.title, it.second.title)) ||
-                        (areDifferent(it.first.getIcon(), it.second.getIcon())) ||
-                        (it.first.actionIntent != it.second.actionIntent) ||
-                        (areDifferent(it.first.remoteInputs, it.second.remoteInputs))
+                    (areDifferent(it.first.getIcon(), it.second.getIcon())) ||
+                    (it.first.actionIntent != it.second.actionIntent) ||
+                    (areDifferent(it.first.remoteInputs, it.second.remoteInputs))
             }
         }
 
@@ -78,7 +80,7 @@
             first.size != second.size -> true
             else -> first.asSequence().zip(second.asSequence()).any {
                 (!TextUtils.equals(it.first.label, it.second.label)) ||
-                        (areDifferent(it.first.choices, it.second.choices))
+                    (areDifferent(it.first.choices, it.second.choices))
             }
         }
 
@@ -94,4 +96,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotifUiAdjustmentProvider.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotifUiAdjustmentProvider.kt
index f7b6376..745d6fe 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotifUiAdjustmentProvider.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotifUiAdjustmentProvider.kt
@@ -16,12 +16,18 @@
 
 package com.android.systemui.statusbar.notification.collection.inflation
 
+import android.database.ContentObserver
+import android.os.Handler
+import android.os.UserHandle
+import android.provider.Settings.Secure.SHOW_NOTIFICATION_SNOOZE
 import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dagger.qualifiers.Main
 import com.android.systemui.statusbar.NotificationLockscreenUserManager
-import com.android.systemui.statusbar.notification.SectionClassifier
 import com.android.systemui.statusbar.notification.collection.GroupEntry
 import com.android.systemui.statusbar.notification.collection.NotificationEntry
+import com.android.systemui.statusbar.notification.collection.provider.SectionStyleProvider
 import com.android.systemui.util.ListenerSet
+import com.android.systemui.util.settings.SecureSettings
 import javax.inject.Inject
 
 /**
@@ -30,14 +36,23 @@
  */
 @SysUISingleton
 class NotifUiAdjustmentProvider @Inject constructor(
+    @Main private val handler: Handler,
+    private val secureSettings: SecureSettings,
     private val lockscreenUserManager: NotificationLockscreenUserManager,
-    private val sectionClassifier: SectionClassifier,
+    private val sectionStyleProvider: SectionStyleProvider
 ) {
     private val dirtyListeners = ListenerSet<Runnable>()
+    private var isSnoozeEnabled = false
 
     fun addDirtyListener(listener: Runnable) {
         if (dirtyListeners.isEmpty()) {
             lockscreenUserManager.addNotificationStateChangedListener(notifStateChangedListener)
+            updateSnoozeEnabled()
+            secureSettings.registerContentObserverForUser(
+                SHOW_NOTIFICATION_SNOOZE,
+                settingsObserver,
+                UserHandle.USER_ALL
+            )
         }
         dirtyListeners.addIfAbsent(listener)
     }
@@ -46,6 +61,7 @@
         dirtyListeners.remove(listener)
         if (dirtyListeners.isEmpty()) {
             lockscreenUserManager.removeNotificationStateChangedListener(notifStateChangedListener)
+            secureSettings.unregisterContentObserver(settingsObserver)
         }
     }
 
@@ -54,10 +70,21 @@
             dirtyListeners.forEach(Runnable::run)
         }
 
+    private val settingsObserver = object : ContentObserver(handler) {
+        override fun onChange(selfChange: Boolean) {
+            updateSnoozeEnabled()
+            dirtyListeners.forEach(Runnable::run)
+        }
+    }
+
+    private fun updateSnoozeEnabled() {
+        isSnoozeEnabled = secureSettings.getInt(SHOW_NOTIFICATION_SNOOZE, 0) == 1
+    }
+
     private fun isEntryMinimized(entry: NotificationEntry): Boolean {
         val section = entry.section ?: error("Entry must have a section to determine if minimized")
         val parent = entry.parent ?: error("Entry must have a parent to determine if minimized")
-        val isMinimizedSection = sectionClassifier.isMinimizedSection(section)
+        val isMinimizedSection = sectionStyleProvider.isMinimizedSection(section)
         val isTopLevelEntry = parent == GroupEntry.ROOT_ENTRY
         val isGroupSummary = parent.summary == entry
         return isMinimizedSection && (isTopLevelEntry || isGroupSummary)
@@ -73,7 +100,8 @@
         smartActions = entry.ranking.smartActions,
         smartReplies = entry.ranking.smartReplies,
         isConversation = entry.ranking.isConversation,
+        isSnoozeEnabled = isSnoozeEnabled,
         isMinimized = isEntryMinimized(entry),
         needsRedaction = lockscreenUserManager.needsRedaction(entry),
     )
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinder.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinder.java
index 3a4701c..46b467e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinder.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotificationRowBinder.java
@@ -50,4 +50,9 @@
             NotificationUiAdjustment oldAdjustment,
             NotificationUiAdjustment newAdjustment,
             NotificationRowContentBinder.InflationCallback callback);
+
+    /**
+     * Called when a notification is no longer likely to be displayed and can have its views freed.
+     */
+    void releaseViews(NotificationEntry entry);
 }
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 b84a797..528f720 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,6 +16,8 @@
 
 package com.android.systemui.statusbar.notification.collection.inflation;
 
+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;
 
 import static java.util.Objects.requireNonNull;
@@ -161,6 +163,18 @@
         }
     }
 
+    @Override
+    public void releaseViews(NotificationEntry entry) {
+        if (!entry.rowExists()) {
+            return;
+        }
+        final RowContentBindParams params = mRowContentBindStage.getStageParams(entry);
+        params.markContentViewsFreeable(FLAG_CONTENT_VIEW_CONTRACTED);
+        params.markContentViewsFreeable(FLAG_CONTENT_VIEW_EXPANDED);
+        params.markContentViewsFreeable(FLAG_CONTENT_VIEW_PUBLIC);
+        mRowContentBindStage.requestRebind(entry, null);
+    }
+
     /**
      * Bind row to various controllers and managers. This is only called when the row is first
      * created.
@@ -249,6 +263,8 @@
         }
 
         RowContentBindParams params = mRowContentBindStage.getStageParams(entry);
+        params.requireContentViews(FLAG_CONTENT_VIEW_CONTRACTED);
+        params.requireContentViews(FLAG_CONTENT_VIEW_EXPANDED);
         params.setUseIncreasedCollapsedHeight(useIncreasedCollapsedHeight);
         params.setUseLowPriority(isLowPriority);
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/OnUserInteractionCallbackImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/OnUserInteractionCallbackImpl.java
index 7dd3672..a7719d3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/OnUserInteractionCallbackImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/OnUserInteractionCallbackImpl.java
@@ -23,6 +23,7 @@
 
 import androidx.annotation.NonNull;
 
+import com.android.systemui.dagger.SysUISingleton;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.statusbar.notification.collection.NotifCollection;
 import com.android.systemui.statusbar.notification.collection.NotifCollection.CancellationReason;
@@ -33,10 +34,13 @@
 import com.android.systemui.statusbar.notification.row.OnUserInteractionCallback;
 import com.android.systemui.statusbar.policy.HeadsUpManager;
 
+import javax.inject.Inject;
+
 /**
  * Callback for when a user interacts with a {@see ExpandableNotificationRow}. Sends relevant
  * information about the interaction to the notification pipeline.
  */
+@SysUISingleton
 public class OnUserInteractionCallbackImpl implements OnUserInteractionCallback {
     private final NotificationVisibilityProvider mVisibilityProvider;
     private final NotifCollection mNotifCollection;
@@ -44,6 +48,7 @@
     private final StatusBarStateController mStatusBarStateController;
     private final VisualStabilityCoordinator mVisualStabilityCoordinator;
 
+    @Inject
     public OnUserInteractionCallbackImpl(
             NotificationVisibilityProvider visibilityProvider,
             NotifCollection notifCollection,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/init/NotifPipelineInitializer.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/init/NotifPipelineInitializer.java
index 70b1156..a34d033 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/init/NotifPipelineInitializer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/init/NotifPipelineInitializer.java
@@ -18,20 +18,24 @@
 
 import android.util.Log;
 
+import androidx.annotation.NonNull;
+
 import com.android.systemui.Dumpable;
 import com.android.systemui.dagger.SysUISingleton;
 import com.android.systemui.dump.DumpManager;
 import com.android.systemui.statusbar.NotificationListener;
-import com.android.systemui.statusbar.notification.NotifPipelineFlags;
 import com.android.systemui.statusbar.notification.collection.NotifCollection;
 import com.android.systemui.statusbar.notification.collection.NotifInflaterImpl;
 import com.android.systemui.statusbar.notification.collection.NotifPipeline;
+import com.android.systemui.statusbar.notification.collection.PipelineDumpable;
+import com.android.systemui.statusbar.notification.collection.PipelineDumper;
 import com.android.systemui.statusbar.notification.collection.ShadeListBuilder;
 import com.android.systemui.statusbar.notification.collection.coalescer.GroupCoalescer;
 import com.android.systemui.statusbar.notification.collection.coordinator.NotifCoordinators;
 import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinderImpl;
 import com.android.systemui.statusbar.notification.collection.render.NotifStackController;
 import com.android.systemui.statusbar.notification.collection.render.RenderStageManager;
+import com.android.systemui.statusbar.notification.collection.render.ShadeViewManager;
 import com.android.systemui.statusbar.notification.collection.render.ShadeViewManagerFactory;
 import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
 
@@ -43,7 +47,7 @@
  * Initialization code for the new notification pipeline.
  */
 @SysUISingleton
-public class NotifPipelineInitializer implements Dumpable {
+public class NotifPipelineInitializer implements Dumpable, PipelineDumpable {
     private final NotifPipeline mPipelineWrapper;
     private final GroupCoalescer mGroupCoalescer;
     private final NotifCollection mNotifCollection;
@@ -53,8 +57,10 @@
     private final NotifInflaterImpl mNotifInflater;
     private final DumpManager mDumpManager;
     private final ShadeViewManagerFactory mShadeViewManagerFactory;
-    private final NotifPipelineFlags mNotifPipelineFlags;
 
+    /* These are saved just for dumping. */
+    private ShadeViewManager mShadeViewManager;
+    private NotificationListener mNotificationService;
 
     @Inject
     public NotifPipelineInitializer(
@@ -66,8 +72,7 @@
             NotifCoordinators notifCoordinators,
             NotifInflaterImpl notifInflater,
             DumpManager dumpManager,
-            ShadeViewManagerFactory shadeViewManagerFactory,
-            NotifPipelineFlags notifPipelineFlags
+            ShadeViewManagerFactory shadeViewManagerFactory
     ) {
         mPipelineWrapper = pipelineWrapper;
         mGroupCoalescer = groupCoalescer;
@@ -78,7 +83,6 @@
         mDumpManager = dumpManager;
         mNotifInflater = notifInflater;
         mShadeViewManagerFactory = shadeViewManagerFactory;
-        mNotifPipelineFlags = notifPipelineFlags;
     }
 
     /** Hooks the new pipeline up to NotificationManager */
@@ -87,36 +91,61 @@
             NotificationRowBinderImpl rowBinder,
             NotificationListContainer listContainer,
             NotifStackController stackController) {
-
         mDumpManager.registerDumpable("NotifPipeline", this);
 
+        mNotificationService = notificationService;
+
         // Setup inflation
-        if (mNotifPipelineFlags.isNewPipelineEnabled()) {
-            mNotifInflater.setRowBinder(rowBinder);
-        }
+        mNotifInflater.setRowBinder(rowBinder);
 
         // Wire up coordinators
         mNotifPluggableCoordinators.attach(mPipelineWrapper);
 
         // Wire up pipeline
-        if (mNotifPipelineFlags.isNewPipelineEnabled()) {
-            mShadeViewManagerFactory
-                    .create(listContainer, stackController)
-                    .attach(mRenderStageManager);
-        }
+        mShadeViewManager = mShadeViewManagerFactory.create(listContainer, stackController);
+        mShadeViewManager.attach(mRenderStageManager);
         mRenderStageManager.attach(mListBuilder);
         mListBuilder.attach(mNotifCollection);
         mNotifCollection.attach(mGroupCoalescer);
-        mGroupCoalescer.attach(notificationService);
+        mGroupCoalescer.attach(mNotificationService);
 
         Log.d(TAG, "Notif pipeline initialized."
-                + " rendering=" + mNotifPipelineFlags.isNewPipelineEnabled());
+                + " rendering=" + true);
     }
 
     @Override
     public void dump(PrintWriter pw, String[] args) {
-        mNotifPluggableCoordinators.dump(pw, args);
-        mGroupCoalescer.dump(pw, args);
+        dumpPipeline(new PipelineDumper(pw));
+    }
+
+    @Override
+    public void dumpPipeline(@NonNull PipelineDumper d) {
+        d.println("STAGE 0: SETUP");
+        d.dump("notifPluggableCoordinators", mNotifPluggableCoordinators);
+        d.println("");
+
+        d.println("STAGE 1: LISTEN");
+        d.dump("notificationService", mNotificationService);
+        d.println("");
+
+        d.println("STAGE 2: BATCH EVENTS");
+        d.dump("groupCoalescer", mGroupCoalescer);
+        d.println("");
+
+        d.println("STAGE 3: COLLECT");
+        d.dump("notifCollection", mNotifCollection);
+        d.println("");
+
+        d.println("STAGE 4: BUILD LIST");
+        d.dump("listBuilder", mListBuilder);
+        d.println("");
+
+        d.println("STAGE 5: DISPATCH RENDER");
+        d.dump("renderStageManager", mRenderStageManager);
+        d.println("");
+
+        d.println("STAGE 6: UPDATE SHADE");
+        d.dump("shadeViewManager", mShadeViewManager);
     }
 
     private static final String TAG = "NotifPipeline";
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/legacy/LegacyNotificationPresenterExtensions.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/legacy/LegacyNotificationPresenterExtensions.java
deleted file mode 100644
index bdbb0eb..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/legacy/LegacyNotificationPresenterExtensions.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.legacy;
-
-import static com.android.systemui.statusbar.phone.CentralSurfaces.SPEW;
-
-import android.service.notification.StatusBarNotification;
-import android.util.Log;
-
-import androidx.annotation.NonNull;
-
-import com.android.internal.statusbar.NotificationVisibility;
-import com.android.systemui.statusbar.notification.NotificationEntryListener;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
-import com.android.systemui.statusbar.notification.collection.NotificationEntry;
-import com.android.systemui.statusbar.notification.collection.render.NotifShadeEventSource;
-
-import org.jetbrains.annotations.NotNull;
-
-import javax.inject.Inject;
-
-/**
- * This is some logic extracted from the
- * {@link com.android.systemui.statusbar.phone.StatusBarNotificationPresenter}
- * into a class that implements a new-pipeline interface so that the new pipeline can implement it
- * correctly.
- *
- * Specifically, this is the logic which updates notifications when uiMode and screen properties
- * change, and which closes the shade when the last notification disappears.
- */
-public class LegacyNotificationPresenterExtensions implements NotifShadeEventSource {
-    private static final String TAG = "LegacyNotifPresenter";
-    private final NotificationEntryManager mEntryManager;
-    private boolean mEntryListenerAdded;
-    private Runnable mShadeEmptiedCallback;
-    private Runnable mNotifRemovedByUserCallback;
-
-    @Inject
-    public LegacyNotificationPresenterExtensions(NotificationEntryManager entryManager) {
-        mEntryManager = entryManager;
-    }
-
-    private void ensureEntryListenerAdded() {
-        if (mEntryListenerAdded) return;
-        mEntryListenerAdded = true;
-        mEntryManager.addNotificationEntryListener(new NotificationEntryListener() {
-            @Override
-            public void onEntryRemoved(
-                    @NotNull NotificationEntry entry,
-                    NotificationVisibility visibility,
-                    boolean removedByUser,
-                    int reason) {
-                StatusBarNotification old = entry.getSbn();
-                if (SPEW) {
-                    Log.d(TAG, "removeNotification key=" + entry.getKey()
-                            + " old=" + old + " reason=" + reason);
-                }
-
-                if (old != null && !mEntryManager.hasActiveNotifications()) {
-                    if (mShadeEmptiedCallback != null) mShadeEmptiedCallback.run();
-                }
-                if (removedByUser) {
-                    if (mNotifRemovedByUserCallback != null) mNotifRemovedByUserCallback.run();
-                }
-            }
-        });
-    }
-
-    @Override
-    public void setNotifRemovedByUserCallback(@NonNull Runnable callback) {
-        if (mNotifRemovedByUserCallback != null) {
-            throw new IllegalStateException("mNotifRemovedByUserCallback already set");
-        }
-        mNotifRemovedByUserCallback = callback;
-        ensureEntryListenerAdded();
-    }
-
-    @Override
-    public void setShadeEmptiedCallback(@NonNull Runnable callback) {
-        if (mShadeEmptiedCallback != null) {
-            throw new IllegalStateException("mShadeEmptiedCallback already set");
-        }
-        mShadeEmptiedCallback = callback;
-        ensureEntryListenerAdded();
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/legacy/OnUserInteractionCallbackImplLegacy.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/legacy/OnUserInteractionCallbackImplLegacy.java
deleted file mode 100644
index 103b14b..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/legacy/OnUserInteractionCallbackImplLegacy.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.legacy;
-
-import static android.service.notification.NotificationStats.DISMISS_SENTIMENT_NEUTRAL;
-
-import android.service.notification.NotificationListenerService;
-import android.service.notification.NotificationStats;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
-import com.android.systemui.statusbar.notification.collection.NotifCollection.CancellationReason;
-import com.android.systemui.statusbar.notification.collection.NotificationEntry;
-import com.android.systemui.statusbar.notification.collection.notifcollection.DismissedByUserStats;
-import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager;
-import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider;
-import com.android.systemui.statusbar.notification.row.OnUserInteractionCallback;
-import com.android.systemui.statusbar.policy.HeadsUpManager;
-
-/**
- * Callback for when a user interacts with a {@see ExpandableNotificationRow}.
- */
-public class OnUserInteractionCallbackImplLegacy implements OnUserInteractionCallback {
-    private final NotificationEntryManager mNotificationEntryManager;
-    private final NotificationVisibilityProvider mVisibilityProvider;
-    private final HeadsUpManager mHeadsUpManager;
-    private final StatusBarStateController mStatusBarStateController;
-    private final VisualStabilityManager mVisualStabilityManager;
-    private final GroupMembershipManager mGroupMembershipManager;
-
-    public OnUserInteractionCallbackImplLegacy(
-            NotificationEntryManager notificationEntryManager,
-            NotificationVisibilityProvider visibilityProvider,
-            HeadsUpManager headsUpManager,
-            StatusBarStateController statusBarStateController,
-            VisualStabilityManager visualStabilityManager,
-            GroupMembershipManager groupMembershipManager
-    ) {
-        mNotificationEntryManager = notificationEntryManager;
-        mVisibilityProvider = visibilityProvider;
-        mHeadsUpManager = headsUpManager;
-        mStatusBarStateController = statusBarStateController;
-        mVisualStabilityManager = visualStabilityManager;
-        mGroupMembershipManager = groupMembershipManager;
-    }
-
-    /**
-     * Callback triggered when a user:
-     * 1. Manually dismisses a notification {@see ExpandableNotificationRow}.
-     * 2. Clicks on a notification with flag {@link android.app.Notification#FLAG_AUTO_CANCEL}.
-     * {@see StatusBarNotificationActivityStarter}
-     *
-     * @param groupSummaryToDismiss the group summary that should be dismissed
-     *                              along with this dismissal. If null, does not additionally
-     *                              dismiss any notifications.
-     */
-    private void onDismiss(
-            NotificationEntry entry,
-            @NotificationListenerService.NotificationCancelReason int cancellationReason,
-            @Nullable NotificationEntry groupSummaryToDismiss
-    ) {
-        int dismissalSurface = NotificationStats.DISMISSAL_SHADE;
-        if (mHeadsUpManager.isAlerting(entry.getKey())) {
-            dismissalSurface = NotificationStats.DISMISSAL_PEEK;
-        } else if (mStatusBarStateController.isDozing()) {
-            dismissalSurface = NotificationStats.DISMISSAL_AOD;
-        }
-
-        if (groupSummaryToDismiss != null) {
-            onDismiss(groupSummaryToDismiss, cancellationReason, null);
-        }
-
-        mNotificationEntryManager.performRemoveNotification(
-                entry.getSbn(),
-                new DismissedByUserStats(
-                        dismissalSurface,
-                        DISMISS_SENTIMENT_NEUTRAL,
-                        mVisibilityProvider.obtain(entry, true)),
-                cancellationReason
-        );
-
-    }
-
-    @Override
-    public void onImportanceChanged(NotificationEntry entry) {
-        mVisualStabilityManager.temporarilyAllowReordering();
-    }
-
-    /**
-     * @param entry that is being dismissed
-     * @return the group summary to dismiss along with this entry if this is the last entry in
-     * the group. Else, returns null.
-     */
-    @Nullable
-    private NotificationEntry getGroupSummaryToDismiss(NotificationEntry entry) {
-        if (mGroupMembershipManager.isOnlyChildInGroup(entry)) {
-            NotificationEntry groupSummary = mGroupMembershipManager.getLogicalGroupSummary(entry);
-            return groupSummary.isDismissable() ? groupSummary : null;
-        }
-        return null;
-    }
-
-    @Override
-    @NonNull
-    public Runnable registerFutureDismissal(@NonNull NotificationEntry entry,
-            @CancellationReason int cancellationReason) {
-        NotificationEntry groupSummaryToDismiss = getGroupSummaryToDismiss(entry);
-        return () -> onDismiss(entry, cancellationReason, groupSummaryToDismiss);
-    }
-}
-
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/NotifSection.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/NotifSection.kt
index 263737e..9765e8f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/NotifSection.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/NotifSection.kt
@@ -16,6 +16,8 @@
 
 package com.android.systemui.statusbar.notification.collection.listbuilder
 
+import com.android.systemui.statusbar.notification.collection.PipelineDumpable
+import com.android.systemui.statusbar.notification.collection.PipelineDumper
 import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifComparator
 import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner
 import com.android.systemui.statusbar.notification.collection.render.NodeController
@@ -24,13 +26,18 @@
 data class NotifSection(
     val sectioner: NotifSectioner,
     val index: Int
-) {
-    val label: String
-        get() = "Section($index, $bucket, \"${sectioner.name}\")"
-
+) : PipelineDumpable {
+    @PriorityBucket
+    val bucket: Int = sectioner.bucket
+    val label: String = "$index:$bucket:${sectioner.name}"
     val headerController: NodeController? = sectioner.headerNodeController
-
     val comparator: NotifComparator? = sectioner.comparator
 
-    @PriorityBucket val bucket: Int = sectioner.bucket
+    override fun dumpPipeline(d: PipelineDumper) = with(d) {
+        dump("index", index)
+        dump("bucket", bucket)
+        dump("sectioner", sectioner)
+        dump("headerController", headerController)
+        dump("comparator", comparator)
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/ShadeListBuilderLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/ShadeListBuilderLogger.kt
index f8bf85f..d8dae5d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/ShadeListBuilderLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/ShadeListBuilderLogger.kt
@@ -21,101 +21,121 @@
 import com.android.systemui.log.LogLevel.INFO
 import com.android.systemui.log.LogLevel.WARNING
 import com.android.systemui.log.dagger.NotificationLog
+import com.android.systemui.statusbar.notification.NotifPipelineFlags
 import com.android.systemui.statusbar.notification.collection.GroupEntry
 import com.android.systemui.statusbar.notification.collection.ListEntry
+import com.android.systemui.statusbar.notification.collection.NotificationEntry
+import com.android.systemui.statusbar.notification.collection.listbuilder.PipelineState.StateName
+import com.android.systemui.statusbar.notification.collection.listbuilder.PipelineState.getStateName
+import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Invalidator
+import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifComparator
 import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter
 import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifPromoter
+import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner
+import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifStabilityManager
+import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Pluggable
+import com.android.systemui.statusbar.notification.logKey
+import com.android.systemui.util.Compile
 import javax.inject.Inject
 
 class ShadeListBuilderLogger @Inject constructor(
+    notifPipelineFlags: NotifPipelineFlags,
     @NotificationLog private val buffer: LogBuffer
 ) {
-    fun logOnBuildList() {
+    fun logOnBuildList(reason: String?) {
         buffer.log(TAG, INFO, {
+            str1 = reason
         }, {
-            "Request received from NotifCollection"
+            "Request received from NotifCollection for $str1"
         })
     }
 
-    fun logEndBuildList(buildId: Int, topLevelEntries: Int, numChildren: Int) {
+    fun logEndBuildList(
+        buildId: Int,
+        topLevelEntries: Int,
+        numChildren: Int,
+        enforcedVisualStability: Boolean
+    ) {
         buffer.log(TAG, INFO, {
             long1 = buildId.toLong()
             int1 = topLevelEntries
             int2 = numChildren
+            bool1 = enforcedVisualStability
         }, {
-            "(Build $long1) Build complete ($int1 top-level entries, $int2 children)"
+            "(Build $long1) Build complete ($int1 top-level entries, $int2 children)" +
+                    " enforcedVisualStability=$bool1"
         })
     }
 
-    fun logPreRenderInvalidated(filterName: String, pipelineState: Int) {
+    private fun logPluggableInvalidated(
+        type: String,
+        pluggable: Pluggable<*>,
+        @StateName pipelineState: Int,
+        reason: String?
+    ) {
         buffer.log(TAG, DEBUG, {
-            str1 = filterName
+            str1 = type
+            str2 = pluggable.name
             int1 = pipelineState
+            str3 = reason
         }, {
-            """Pre-render Invalidator "$str1" invalidated; pipeline state is $int1"""
+            """Invalidated while ${getStateName(int1)} by $str1 "$str2" because $str3"""
         })
     }
 
-    fun logPreGroupFilterInvalidated(filterName: String, pipelineState: Int) {
-        buffer.log(TAG, DEBUG, {
-            str1 = filterName
-            int1 = pipelineState
-        }, {
-            """Pre-group NotifFilter "$str1" invalidated; pipeline state is $int1"""
-        })
-    }
+    fun logPreRenderInvalidated(
+        invalidator: Invalidator,
+        @StateName pipelineState: Int,
+        reason: String?
+    ) = logPluggableInvalidated("Pre-render Invalidator", invalidator, pipelineState, reason)
 
-    fun logReorderingAllowedInvalidated(name: String, pipelineState: Int) {
-        buffer.log(TAG, DEBUG, {
-            str1 = name
-            int1 = pipelineState
-        }, {
-            """ReorderingNowAllowed "$str1" invalidated; pipeline state is $int1"""
-        })
-    }
+    fun logPreGroupFilterInvalidated(
+        filter: NotifFilter,
+        @StateName pipelineState: Int,
+        reason: String?
+    ) = logPluggableInvalidated("Pre-group NotifFilter", filter, pipelineState, reason)
 
-    fun logPromoterInvalidated(name: String, pipelineState: Int) {
-        buffer.log(TAG, DEBUG, {
-            str1 = name
-            int1 = pipelineState
-        }, {
-            """NotifPromoter "$str1" invalidated; pipeline state is $int1"""
-        })
-    }
+    fun logReorderingAllowedInvalidated(
+        stabilityManager: NotifStabilityManager,
+        @StateName pipelineState: Int,
+        reason: String?
+    ) = logPluggableInvalidated("ReorderingNowAllowed", stabilityManager, pipelineState, reason)
 
-    fun logNotifSectionInvalidated(name: String, pipelineState: Int) {
-        buffer.log(TAG, DEBUG, {
-            str1 = name
-            int1 = pipelineState
-        }, {
-            """NotifSection "$str1" invalidated; pipeline state is $int1"""
-        })
-    }
+    fun logPromoterInvalidated(
+        promoter: NotifPromoter,
+        @StateName pipelineState: Int,
+        reason: String?
+    ) = logPluggableInvalidated("NotifPromoter", promoter, pipelineState, reason)
 
-    fun logNotifComparatorInvalidated(name: String, pipelineState: Int) {
-        buffer.log(TAG, DEBUG, {
-            str1 = name
-            int1 = pipelineState
-        }, {
-            """NotifComparator "$str1" invalidated; pipeline state is $int1"""
-        })
-    }
+    fun logNotifSectionInvalidated(
+        sectioner: NotifSectioner,
+        @StateName pipelineState: Int,
+        reason: String?
+    ) = logPluggableInvalidated("NotifSection", sectioner, pipelineState, reason)
 
-    fun logFinalizeFilterInvalidated(name: String, pipelineState: Int) {
-        buffer.log(TAG, DEBUG, {
-            str1 = name
-            int1 = pipelineState
-        }, {
-            """Finalize NotifFilter "$str1" invalidated; pipeline state is $int1"""
-        })
-    }
+    fun logNotifComparatorInvalidated(
+        comparator: NotifComparator,
+        @StateName pipelineState: Int,
+        reason: String?
+    ) = logPluggableInvalidated("NotifComparator", comparator, pipelineState, reason)
 
-    fun logDuplicateSummary(buildId: Int, groupKey: String, existingKey: String, newKey: String) {
+    fun logFinalizeFilterInvalidated(
+        filter: NotifFilter,
+        @StateName pipelineState: Int,
+        reason: String?
+    ) = logPluggableInvalidated("Finalize NotifFilter", filter, pipelineState, reason)
+
+    fun logDuplicateSummary(
+        buildId: Int,
+        group: GroupEntry,
+        existingSummary: NotificationEntry,
+        newSummary: NotificationEntry
+    ) {
         buffer.log(TAG, WARNING, {
             long1 = buildId.toLong()
-            str1 = groupKey
-            str2 = existingKey
-            str3 = newKey
+            str1 = group.logKey
+            str2 = existingSummary.logKey
+            str3 = newSummary.logKey
         }, {
             """(Build $long1) Duplicate summary for group "$str1": "$str2" vs. "$str3""""
         })
@@ -124,7 +144,7 @@
     fun logDuplicateTopLevelKey(buildId: Int, topLevelKey: String) {
         buffer.log(TAG, WARNING, {
             long1 = buildId.toLong()
-            str1 = topLevelKey
+            str1 = logKey(topLevelKey)
         }, {
             "(Build $long1) Duplicate top-level key: $str1"
         })
@@ -132,15 +152,15 @@
 
     fun logEntryAttachStateChanged(
         buildId: Int,
-        key: String,
+        entry: ListEntry,
         prevParent: GroupEntry?,
         newParent: GroupEntry?
     ) {
         buffer.log(TAG, INFO, {
             long1 = buildId.toLong()
-            str1 = key
-            str2 = prevParent?.key
-            str3 = newParent?.key
+            str1 = entry.logKey
+            str2 = prevParent?.logKey
+            str3 = newParent?.logKey
         }, {
 
             val action = if (str2 == null && str3 != null) {
@@ -160,8 +180,8 @@
     fun logParentChanged(buildId: Int, prevParent: GroupEntry?, newParent: GroupEntry?) {
         buffer.log(TAG, INFO, {
             long1 = buildId.toLong()
-            str1 = prevParent?.key
-            str2 = newParent?.key
+            str1 = prevParent?.logKey
+            str2 = newParent?.logKey
         }, {
             if (str1 == null && str2 != null) {
                 "(Build $long1)     Parent is {$str2}"
@@ -180,8 +200,8 @@
     ) {
         buffer.log(TAG, INFO, {
             long1 = buildId.toLong()
-            str1 = suppressedParent?.key
-            str2 = keepingParent?.key
+            str1 = suppressedParent?.logKey
+            str2 = keepingParent?.logKey
         }, {
             "(Build $long1)     Change of parent to '$str1' suppressed; keeping parent '$str2'"
         })
@@ -193,7 +213,7 @@
     ) {
         buffer.log(TAG, INFO, {
             long1 = buildId.toLong()
-            str1 = keepingParent?.key
+            str1 = keepingParent?.logKey
         }, {
             "(Build $long1)     Group pruning suppressed; keeping parent '$str1'"
         })
@@ -273,6 +293,8 @@
         })
     }
 
+    val logRankInFinalList = Compile.IS_DEBUG && notifPipelineFlags.isDevLoggingEnabled()
+
     fun logFinalList(entries: List<ListEntry>) {
         if (entries.isEmpty()) {
             buffer.log(TAG, DEBUG, {}, { "(empty list)" })
@@ -281,26 +303,32 @@
             val entry = entries[i]
             buffer.log(TAG, DEBUG, {
                 int1 = i
-                str1 = entry.key
+                str1 = entry.logKey
+                bool1 = logRankInFinalList
+                int2 = entry.representativeEntry!!.ranking.rank
             }, {
-                "[$int1] $str1"
+                "[$int1] $str1".let { if (bool1) "$it rank=$int2" else it }
             })
 
             if (entry is GroupEntry) {
                 entry.summary?.let {
                     buffer.log(TAG, DEBUG, {
-                        str1 = it.key
+                        str1 = it.logKey
+                        bool1 = logRankInFinalList
+                        int2 = it.ranking.rank
                     }, {
-                        "  [*] $str1 (summary)"
+                        "  [*] $str1 (summary)".let { if (bool1) "$it rank=$int2" else it }
                     })
                 }
                 for (j in entry.children.indices) {
                     val child = entry.children[j]
                     buffer.log(TAG, DEBUG, {
                         int1 = j
-                        str1 = child.key
+                        str1 = child.logKey
+                        bool1 = logRankInFinalList
+                        int2 = child.ranking.rank
                     }, {
-                        "  [$int1] $str1"
+                        "  [$int1] $str1".let { if (bool1) "$it rank=$int2" else it }
                     })
                 }
             }
@@ -308,7 +336,7 @@
     }
 
     fun logPipelineRunSuppressed() =
-            buffer.log(TAG, INFO, {}) { "Suppressing pipeline run during animation." }
+        buffer.log(TAG, INFO, {}, { "Suppressing pipeline run during animation." })
 }
 
-private const val TAG = "ShadeListBuilder"
\ No newline at end of file
+private const val TAG = "ShadeListBuilder"
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/Pluggable.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/Pluggable.java
index b981a96..966ab4c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/Pluggable.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/Pluggable.java
@@ -49,10 +49,10 @@
      * Call this method when something has caused this pluggable's behavior to change. The pipeline
      * will be re-run.
      */
-    public final void invalidateList() {
+    public final void invalidateList(@Nullable String reason) {
         if (mListener != null) {
             Trace.beginSection("Pluggable<" + mName + ">.invalidateList");
-            mListener.onPluggableInvalidated((This) this);
+            mListener.onPluggableInvalidated((This) this, reason);
             Trace.endSection();
         }
     }
@@ -74,7 +74,7 @@
      * @param <T> The type of pluggable that is being listened to.
      */
     public interface PluggableListener<T> {
-        /** Called whenever {@link #invalidateList()} is called on this pluggable. */
-        void onPluggableInvalidated(T pluggable);
+        /** Called whenever {@link #invalidateList(String)} is called on this pluggable. */
+        void onPluggableInvalidated(T pluggable, @Nullable String reason);
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/CollectionReadyForBuildListener.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/CollectionReadyForBuildListener.java
index 4023474..941b2ae 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/CollectionReadyForBuildListener.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/CollectionReadyForBuildListener.java
@@ -29,5 +29,5 @@
      * Called by the NotifCollection to indicate that something in the collection has changed and
      * that the list builder should regenerate the list.
      */
-    void onBuildList(Collection<NotificationEntry> entries);
+    void onBuildList(Collection<NotificationEntry> entries, String reason);
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionLogger.kt
index 7e79367..ebcac6b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionLogger.kt
@@ -19,6 +19,7 @@
 import android.os.RemoteException
 import android.service.notification.NotificationListenerService
 import android.service.notification.NotificationListenerService.RankingMap
+import android.service.notification.StatusBarNotification
 import com.android.systemui.log.LogBuffer
 import com.android.systemui.log.LogLevel.DEBUG
 import com.android.systemui.log.LogLevel.ERROR
@@ -65,9 +66,9 @@
 class NotifCollectionLogger @Inject constructor(
     @NotificationLog private val buffer: LogBuffer
 ) {
-    fun logNotifPosted(key: String) {
+    fun logNotifPosted(entry: NotificationEntry) {
         buffer.log(TAG, INFO, {
-            str1 = key
+            str1 = entry.logKey
         }, {
             "POSTED $str1"
         })
@@ -75,49 +76,49 @@
 
     fun logNotifGroupPosted(groupKey: String, batchSize: Int) {
         buffer.log(TAG, INFO, {
-            str1 = groupKey
+            str1 = logKey(groupKey)
             int1 = batchSize
         }, {
             "POSTED GROUP $str1 ($int1 events)"
         })
     }
 
-    fun logNotifUpdated(key: String) {
+    fun logNotifUpdated(entry: NotificationEntry) {
         buffer.log(TAG, INFO, {
-            str1 = key
+            str1 = entry.logKey
         }, {
             "UPDATED $str1"
         })
     }
 
-    fun logNotifRemoved(key: String, @CancellationReason reason: Int) {
+    fun logNotifRemoved(sbn: StatusBarNotification, @CancellationReason reason: Int) {
         buffer.log(TAG, INFO, {
-            str1 = key
+            str1 = sbn.logKey
             int1 = reason
         }, {
             "REMOVED $str1 reason=${cancellationReasonDebugString(int1)}"
         })
     }
 
-    fun logNotifReleased(key: String) {
+    fun logNotifReleased(entry: NotificationEntry) {
         buffer.log(TAG, INFO, {
-            str1 = key
+            str1 = entry.logKey
         }, {
             "RELEASED $str1"
         })
     }
 
-    fun logNotifDismissed(key: String) {
+    fun logNotifDismissed(entry: NotificationEntry) {
         buffer.log(TAG, INFO, {
-            str1 = key
+            str1 = entry.logKey
         }, {
             "DISMISSED $str1"
         })
     }
 
-    fun logNonExistentNotifDismissed(key: String) {
+    fun logNonExistentNotifDismissed(entry: NotificationEntry) {
         buffer.log(TAG, INFO, {
-            str1 = key
+            str1 = entry.logKey
         }, {
             "DISMISSED Non Existent $str1"
         })
@@ -125,7 +126,7 @@
 
     fun logChildDismissed(entry: NotificationEntry) {
         buffer.log(TAG, DEBUG, {
-            str1 = entry.key
+            str1 = entry.logKey
         }, {
             "CHILD DISMISSED (inferred): $str1"
         })
@@ -141,31 +142,31 @@
 
     fun logDismissOnAlreadyCanceledEntry(entry: NotificationEntry) {
         buffer.log(TAG, DEBUG, {
-            str1 = entry.key
+            str1 = entry.logKey
         }, {
             "Dismiss on $str1, which was already canceled. Trying to remove..."
         })
     }
 
-    fun logNotifDismissedIntercepted(key: String) {
+    fun logNotifDismissedIntercepted(entry: NotificationEntry) {
         buffer.log(TAG, INFO, {
-            str1 = key
+            str1 = entry.logKey
         }, {
             "DISMISS INTERCEPTED $str1"
         })
     }
 
-    fun logNotifClearAllDismissalIntercepted(key: String) {
+    fun logNotifClearAllDismissalIntercepted(entry: NotificationEntry) {
         buffer.log(TAG, INFO, {
-            str1 = key
+            str1 = entry.logKey
         }, {
             "CLEAR ALL DISMISSAL INTERCEPTED $str1"
         })
     }
 
-    fun logNotifInternalUpdate(key: String, name: String, reason: String) {
+    fun logNotifInternalUpdate(entry: NotificationEntry, name: String, reason: String) {
         buffer.log(TAG, INFO, {
-            str1 = key
+            str1 = entry.logKey
             str2 = name
             str3 = reason
         }, {
@@ -173,9 +174,9 @@
         })
     }
 
-    fun logNotifInternalUpdateFailed(key: String, name: String, reason: String) {
+    fun logNotifInternalUpdateFailed(sbn: StatusBarNotification, name: String, reason: String) {
         buffer.log(TAG, INFO, {
-            str1 = key
+            str1 = sbn.logKey
             str2 = name
             str3 = reason
         }, {
@@ -183,26 +184,49 @@
         })
     }
 
-    fun logNoNotificationToRemoveWithKey(key: String, @CancellationReason reason: Int) {
+    fun logNoNotificationToRemoveWithKey(
+        sbn: StatusBarNotification,
+        @CancellationReason reason: Int
+    ) {
         buffer.log(TAG, ERROR, {
-            str1 = key
+            str1 = sbn.logKey
             int1 = reason
         }, {
             "No notification to remove with key $str1 reason=${cancellationReasonDebugString(int1)}"
         })
     }
 
-    fun logRankingMissing(key: String, rankingMap: RankingMap) {
-        buffer.log(TAG, WARNING, { str1 = key }, { "Ranking update is missing ranking for $str1" })
-        buffer.log(TAG, DEBUG, {}, { "Ranking map contents:" })
-        for (entry in rankingMap.orderedKeys) {
-            buffer.log(TAG, DEBUG, { str1 = entry }, { "  $str1" })
-        }
+    fun logMissingRankings(
+        newlyInconsistentEntries: List<NotificationEntry>,
+        totalInconsistent: Int,
+        rankingMap: RankingMap
+    ) {
+        buffer.log(TAG, WARNING, {
+            int1 = totalInconsistent
+            int2 = newlyInconsistentEntries.size
+            str1 = newlyInconsistentEntries.joinToString { it.logKey ?: "null" }
+        }, {
+            "Ranking update is missing ranking for $int1 entries ($int2 new): $str1"
+        })
+        buffer.log(TAG, DEBUG, {
+            str1 = rankingMap.orderedKeys.map { logKey(it) ?: "null" }.toString()
+        }, {
+            "Ranking map contents: $str1"
+        })
     }
 
-    fun logRemoteExceptionOnNotificationClear(key: String, e: RemoteException) {
+    fun logRecoveredRankings(newlyConsistentKeys: List<String>) {
+        buffer.log(TAG, INFO, {
+            int1 = newlyConsistentKeys.size
+            str1 = newlyConsistentKeys.joinToString { logKey(it) ?: "null" }
+        }, {
+            "Ranking update now contains rankings for $int1 previously inconsistent entries: $str1"
+        })
+    }
+
+    fun logRemoteExceptionOnNotificationClear(entry: NotificationEntry, e: RemoteException) {
         buffer.log(TAG, WTF, {
-            str1 = key
+            str1 = entry.logKey
             str2 = e.toString()
         }, {
             "RemoteException while attempting to clear $str1:\n$str2"
@@ -217,9 +241,9 @@
         })
     }
 
-    fun logLifetimeExtended(key: String, extender: NotifLifetimeExtender) {
+    fun logLifetimeExtended(entry: NotificationEntry, extender: NotifLifetimeExtender) {
         buffer.log(TAG, INFO, {
-            str1 = key
+            str1 = entry.logKey
             str2 = extender.name
         }, {
             "LIFETIME EXTENDED: $str1 by $str2"
@@ -227,12 +251,12 @@
     }
 
     fun logLifetimeExtensionEnded(
-        key: String,
+        entry: NotificationEntry,
         extender: NotifLifetimeExtender,
         totalExtenders: Int
     ) {
         buffer.log(TAG, INFO, {
-            str1 = key
+            str1 = entry.logKey
             str2 = extender.name
             int1 = totalExtenders
         }, {
@@ -248,6 +272,20 @@
         })
     }
 
+    fun logEntryBeingExtendedNotInCollection(
+        entry: NotificationEntry,
+        extender: NotifLifetimeExtender,
+        collectionEntryIs: String
+    ) {
+        buffer.log(TAG, WARNING, {
+            str1 = entry.logKey
+            str2 = extender.name
+            str3 = collectionEntryIs
+        }, {
+            "While ending lifetime extension by $str2 of $str1, entry in collection is $str3"
+        })
+    }
+
     fun logFutureDismissalReused(dismissal: FutureDismissal) {
         buffer.log(TAG, INFO, {
             str1 = dismissal.label
@@ -324,4 +362,29 @@
     }
 }
 
+fun maybeLogInconsistentRankings(
+    logger: NotifCollectionLogger,
+    oldKeysWithoutRankings: Set<String>,
+    newEntriesWithoutRankings: Map<String, NotificationEntry>?,
+    rankingMap: RankingMap
+) {
+    if (oldKeysWithoutRankings.isEmpty() && newEntriesWithoutRankings == null) return
+    val newlyConsistent: List<String> = oldKeysWithoutRankings
+        .mapNotNull { key ->
+            key.takeIf { key !in (newEntriesWithoutRankings ?: emptyMap()) }
+                .takeIf { key in rankingMap.orderedKeys }
+        }.sorted()
+    if (newlyConsistent.isNotEmpty()) {
+        logger.logRecoveredRankings(newlyConsistent)
+    }
+    val newlyInconsistent: List<NotificationEntry> = newEntriesWithoutRankings
+        ?.mapNotNull { (key, entry) ->
+            entry.takeIf { key !in oldKeysWithoutRankings }
+        }?.sortedBy { it.key } ?: emptyList()
+    if (newlyInconsistent.isNotEmpty()) {
+        val totalInconsistent: Int = newEntriesWithoutRankings?.size ?: 0
+        logger.logMissingRankings(newlyInconsistent, totalInconsistent, rankingMap)
+    }
+}
+
 private const val TAG = "NotifCollection"
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/NotificationVisibilityProviderImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/NotificationVisibilityProviderImpl.kt
index 6a1e36f..ec10aaf 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/NotificationVisibilityProviderImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/NotificationVisibilityProviderImpl.kt
@@ -17,6 +17,7 @@
 package com.android.systemui.statusbar.notification.collection.provider
 
 import com.android.internal.statusbar.NotificationVisibility
+import com.android.systemui.dagger.SysUISingleton
 import com.android.systemui.statusbar.notification.collection.NotifLiveDataStore
 import com.android.systemui.statusbar.notification.collection.NotificationEntry
 import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection
@@ -25,6 +26,7 @@
 import javax.inject.Inject
 
 /** pipeline-agnostic implementation for getting [NotificationVisibility]. */
+@SysUISingleton
 class NotificationVisibilityProviderImpl @Inject constructor(
     private val notifDataStore: NotifLiveDataStore,
     private val notifCollection: CommonNotifCollection
@@ -46,4 +48,4 @@
         NotificationLogger.getNotificationLocation(notifCollection.getEntry(key))
 
     private fun getCount() = notifDataStore.activeNotifCount.value
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/SectionHeaderVisibilityProvider.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/SectionHeaderVisibilityProvider.kt
new file mode 100644
index 0000000..82c7aae
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/SectionHeaderVisibilityProvider.kt
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.provider
+
+import android.content.Context
+import com.android.systemui.R
+import com.android.systemui.dagger.SysUISingleton
+import javax.inject.Inject
+
+/**
+ * A class which keeps track of whether section headers should be shown in the notification shade.
+ *
+ * (In an ideal world, this would directly monitor the state of the keyguard and invalidate the
+ * pipeline to show/hide headers, but the KeyguardController already invalidates the pipeline when
+ * the keyguard's state changes. Instead of having both classes monitor for state changes and ending
+ * up with duplicate runs of the pipeline, we let the KeyguardController update the header
+ * visibility when it invalidates, and we just store that state here.)
+ */
+@SysUISingleton
+class SectionHeaderVisibilityProvider @Inject constructor(
+    context: Context
+) {
+    val neverShowSectionHeaders =
+        context.resources.getBoolean(R.bool.config_notification_never_show_section_headers)
+    var sectionHeadersVisible = true
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/SectionStyleProvider.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/SectionStyleProvider.kt
new file mode 100644
index 0000000..7b94830
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/SectionStyleProvider.kt
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.collection.provider
+
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection
+import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner
+import javax.inject.Inject
+
+/**
+ * A class which is used to classify the sections.
+ * NOTE: This class exists to avoid putting metadata like "isMinimized" on the NotifSection
+ */
+@SysUISingleton
+class SectionStyleProvider @Inject constructor() {
+    private lateinit var lowPrioritySections: Set<NotifSectioner>
+
+    /**
+     * Feed the provider the information it needs about which sections should have minimized top
+     * level views, so that it can calculate the correct minimized state.
+     */
+    fun setMinimizedSections(sections: Collection<NotifSectioner>) {
+        lowPrioritySections = sections.toSet()
+    }
+
+    /**
+     * Determine if the given section is minimized
+     */
+    fun isMinimizedSection(section: NotifSection): Boolean {
+        return lowPrioritySections.contains(section.sectioner)
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupExpansionManagerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupExpansionManagerImpl.java
index a2cb950..1b3f83d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupExpansionManagerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupExpansionManagerImpl.java
@@ -16,6 +16,7 @@
 
 package com.android.systemui.statusbar.notification.collection.render;
 
+import com.android.systemui.dagger.SysUISingleton;
 import com.android.systemui.statusbar.notification.collection.GroupEntry;
 import com.android.systemui.statusbar.notification.collection.ListEntry;
 import com.android.systemui.statusbar.notification.collection.NotifPipeline;
@@ -28,10 +29,13 @@
 import java.util.HashSet;
 import java.util.Set;
 
+import javax.inject.Inject;
+
 /**
  * Provides grouping information for notification entries including information about a group's
  * expanded state.
  */
+@SysUISingleton
 public class GroupExpansionManagerImpl implements GroupExpansionManager, Coordinator {
     private final GroupMembershipManager mGroupMembershipManager;
     private final Set<OnGroupExpansionChangeListener> mOnGroupChangeListeners = new HashSet<>();
@@ -39,6 +43,7 @@
     // Set of summary keys whose groups are expanded
     private final Set<NotificationEntry> mExpandedGroups = new HashSet<>();
 
+    @Inject
     public GroupExpansionManagerImpl(GroupMembershipManager groupMembershipManager) {
         mGroupMembershipManager = groupMembershipManager;
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilder.kt
index 8be710c..d234e54 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilder.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilder.kt
@@ -16,12 +16,12 @@
 
 package com.android.systemui.statusbar.notification.collection.render
 
-import com.android.systemui.statusbar.notification.SectionHeaderVisibilityProvider
 import com.android.systemui.statusbar.notification.NotificationSectionsFeatureManager
 import com.android.systemui.statusbar.notification.collection.GroupEntry
 import com.android.systemui.statusbar.notification.collection.ListEntry
 import com.android.systemui.statusbar.notification.collection.NotificationEntry
 import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection
+import com.android.systemui.statusbar.notification.collection.provider.SectionHeaderVisibilityProvider
 import com.android.systemui.util.Compile
 import com.android.systemui.util.traceSection
 
@@ -107,4 +107,4 @@
                 .apply { entry.children.forEach { children.add(buildNotifNode(this, it)) } }
         else -> throw RuntimeException("Unexpected entry: $entry")
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilderLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilderLogger.kt
index 3501b44..38e3d49 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilderLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilderLogger.kt
@@ -19,20 +19,24 @@
 import com.android.systemui.log.LogBuffer
 import com.android.systemui.log.LogLevel
 import com.android.systemui.log.dagger.NotificationLog
+import com.android.systemui.statusbar.notification.NotifPipelineFlags
 import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection
 import com.android.systemui.util.Compile
 import javax.inject.Inject
 
 class NodeSpecBuilderLogger @Inject constructor(
+    notifPipelineFlags: NotifPipelineFlags,
     @NotificationLog private val buffer: LogBuffer
 ) {
+    private val devLoggingEnabled by lazy { notifPipelineFlags.isDevLoggingEnabled() }
+
     fun logBuildNodeSpec(
         oldSections: Set<NotifSection?>,
         newHeaders: Map<NotifSection?, NodeController?>,
         newCounts: Map<NotifSection?, Int>,
         newSectionOrder: List<NotifSection?>
     ) {
-        if (!Compile.IS_DEBUG)
+        if (!(Compile.IS_DEBUG && devLoggingEnabled))
             return
 
         buffer.log(TAG, LogLevel.DEBUG, {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/RenderStageManager.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/RenderStageManager.kt
index a9c3987..7a37846 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/RenderStageManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/RenderStageManager.kt
@@ -20,6 +20,8 @@
 import com.android.systemui.statusbar.notification.collection.GroupEntry
 import com.android.systemui.statusbar.notification.collection.ListEntry
 import com.android.systemui.statusbar.notification.collection.NotificationEntry
+import com.android.systemui.statusbar.notification.collection.PipelineDumpable
+import com.android.systemui.statusbar.notification.collection.PipelineDumper
 import com.android.systemui.statusbar.notification.collection.ShadeListBuilder
 import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderEntryListener
 import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderGroupListener
@@ -33,7 +35,7 @@
  * provided to [setViewRenderer].
  */
 @SysUISingleton
-class RenderStageManager @Inject constructor() {
+class RenderStageManager @Inject constructor() : PipelineDumpable {
     private val onAfterRenderListListeners = mutableListOf<OnAfterRenderListListener>()
     private val onAfterRenderGroupListeners = mutableListOf<OnAfterRenderGroupListener>()
     private val onAfterRenderEntryListeners = mutableListOf<OnAfterRenderEntryListener>()
@@ -75,6 +77,13 @@
         onAfterRenderEntryListeners.add(listener)
     }
 
+    override fun dumpPipeline(d: PipelineDumper) = with(d) {
+        dump("ViewRenderer", viewRenderer)
+        dump("OnAfterRenderListListeners", onAfterRenderListListeners)
+        dump("OnAfterRenderGroupListeners", onAfterRenderGroupListeners)
+        dump("OnAfterRenderEntryListeners", onAfterRenderEntryListeners)
+    }
+
     private fun dispatchOnAfterRenderList(
         viewRenderer: NotifViewRenderer,
         entries: List<ListEntry>
@@ -139,4 +148,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/RootNodeController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/RootNodeController.kt
index b76169f..2073e92 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/RootNodeController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/RootNodeController.kt
@@ -17,6 +17,8 @@
 package com.android.systemui.statusbar.notification.collection.render
 
 import android.view.View
+import com.android.systemui.statusbar.notification.collection.PipelineDumpable
+import com.android.systemui.statusbar.notification.collection.PipelineDumper
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
 import com.android.systemui.statusbar.notification.row.ExpandableView
 import com.android.systemui.statusbar.notification.stack.NotificationListContainer
@@ -28,7 +30,7 @@
 class RootNodeController(
     private val listContainer: NotificationListContainer,
     override val view: View
-) : NodeController {
+) : NodeController, PipelineDumpable {
     override val nodeLabel: String = "<root>"
 
     override fun getChildAt(index: Int): View? {
@@ -59,4 +61,8 @@
             listContainer.setChildTransferInProgress(false)
         }
     }
+
+    override fun dumpPipeline(d: PipelineDumper) = with(d) {
+        dump("listContainer", listContainer)
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewDiffer.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewDiffer.kt
index f460644..9a9941e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewDiffer.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewDiffer.kt
@@ -123,7 +123,7 @@
                 when (childNode.parent) {
                     null -> {
                         // A new child (either newly created or coming from some other parent)
-                        logger.logAttachingChild(childNode.label, parentNode.label)
+                        logger.logAttachingChild(childNode.label, parentNode.label, index)
                         parentNode.addChildAt(childNode, index)
                         childNode.parent = parentNode
                     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewDifferLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewDifferLogger.kt
index 4c03572..6d1071c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewDifferLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewDifferLogger.kt
@@ -43,12 +43,13 @@
         })
     }
 
-    fun logAttachingChild(key: String, parent: String) {
+    fun logAttachingChild(key: String, parent: String, atIndex: Int) {
         buffer.log(TAG, LogLevel.DEBUG, {
             str1 = key
             str2 = parent
+            int1 = atIndex
         }, {
-            "Attaching view $str1 to $str2"
+            "Attaching view $str1 to $str2 at index $int1"
         })
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewManager.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewManager.kt
index 6ed8107..df8e87f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewManager.kt
@@ -19,10 +19,12 @@
 import android.content.Context
 import android.view.View
 import com.android.systemui.statusbar.notification.NotificationSectionsFeatureManager
-import com.android.systemui.statusbar.notification.SectionHeaderVisibilityProvider
 import com.android.systemui.statusbar.notification.collection.GroupEntry
 import com.android.systemui.statusbar.notification.collection.ListEntry
 import com.android.systemui.statusbar.notification.collection.NotificationEntry
+import com.android.systemui.statusbar.notification.collection.PipelineDumpable
+import com.android.systemui.statusbar.notification.collection.PipelineDumper
+import com.android.systemui.statusbar.notification.collection.provider.SectionHeaderVisibilityProvider
 import com.android.systemui.statusbar.notification.stack.NotificationListContainer
 import com.android.systemui.util.traceSection
 import dagger.assisted.Assisted
@@ -43,12 +45,12 @@
     nodeSpecBuilderLogger: NodeSpecBuilderLogger,
     shadeViewDifferLogger: ShadeViewDifferLogger,
     private val viewBarn: NotifViewBarn
-) {
+) : PipelineDumpable {
     // We pass a shim view here because the listContainer may not actually have a view associated
     // with it and the differ never actually cares about the root node's view.
     private val rootController = RootNodeController(listContainer, View(context))
     private val specBuilder = NodeSpecBuilder(mediaContainerController, featureManager,
-            sectionHeaderVisibilityProvider, viewBarn, nodeSpecBuilderLogger)
+        sectionHeaderVisibilityProvider, viewBarn, nodeSpecBuilderLogger)
     private val viewDiffer = ShadeViewDiffer(rootController, shadeViewDifferLogger)
 
     /** Method for attaching this manager to the pipeline. */
@@ -56,6 +58,12 @@
         renderStageManager.setViewRenderer(viewRenderer)
     }
 
+    override fun dumpPipeline(d: PipelineDumper) = with(d) {
+        dump("rootController", rootController)
+        dump("specBuilder", specBuilder)
+        dump("viewDiffer", viewDiffer)
+    }
+
     private val viewRenderer = object : NotifViewRenderer {
 
         override fun onRenderList(notifList: List<ListEntry>) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java
index c9c7fe9..fac234c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/dagger/NotificationsModule.java
@@ -35,29 +35,27 @@
 import com.android.systemui.people.widget.PeopleSpaceWidgetManager;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.settings.UserContextProvider;
+import com.android.systemui.shade.NotifPanelEventsModule;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.statusbar.NotificationListener;
 import com.android.systemui.statusbar.NotificationRemoteInputManager;
 import com.android.systemui.statusbar.notification.AssistantFeedbackController;
 import com.android.systemui.statusbar.notification.NotifPipelineFlags;
 import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.NotificationEntryManagerLogger;
-import com.android.systemui.statusbar.notification.collection.NotifCollection;
 import com.android.systemui.statusbar.notification.collection.NotifInflaterImpl;
 import com.android.systemui.statusbar.notification.collection.NotifLiveDataStore;
 import com.android.systemui.statusbar.notification.collection.NotifLiveDataStoreImpl;
 import com.android.systemui.statusbar.notification.collection.NotifPipeline;
 import com.android.systemui.statusbar.notification.collection.NotifPipelineChoreographerModule;
 import com.android.systemui.statusbar.notification.collection.coordinator.ShadeEventCoordinator;
-import com.android.systemui.statusbar.notification.collection.coordinator.VisualStabilityCoordinator;
 import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorsModule;
 import com.android.systemui.statusbar.notification.collection.inflation.BindEventManager;
 import com.android.systemui.statusbar.notification.collection.inflation.BindEventManagerImpl;
 import com.android.systemui.statusbar.notification.collection.inflation.NotifInflater;
 import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinder;
 import com.android.systemui.statusbar.notification.collection.inflation.OnUserInteractionCallbackImpl;
-import com.android.systemui.statusbar.notification.collection.legacy.LegacyNotificationPresenterExtensions;
 import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy;
-import com.android.systemui.statusbar.notification.collection.legacy.OnUserInteractionCallbackImplLegacy;
 import com.android.systemui.statusbar.notification.collection.legacy.VisualStabilityManager;
 import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
 import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
@@ -88,9 +86,6 @@
 import com.android.systemui.statusbar.notification.stack.StackScrollAlgorithm;
 import com.android.systemui.statusbar.phone.CentralSurfaces;
 import com.android.systemui.statusbar.phone.KeyguardBypassController;
-import com.android.systemui.statusbar.phone.NotifPanelEventsModule;
-import com.android.systemui.statusbar.phone.ShadeController;
-import com.android.systemui.statusbar.policy.HeadsUpManager;
 import com.android.systemui.util.leak.LeakDetector;
 import com.android.systemui.wmshell.BubblesManager;
 
@@ -116,12 +111,10 @@
 })
 public interface NotificationsModule {
     @Binds
-    StackScrollAlgorithm.SectionProvider bindSectionProvider(
-            NotificationSectionsManager impl);
+    StackScrollAlgorithm.SectionProvider bindSectionProvider(NotificationSectionsManager impl);
 
     @Binds
-    StackScrollAlgorithm.BypassController bindBypassController(
-            KeyguardBypassController impl);
+    StackScrollAlgorithm.BypassController bindBypassController(KeyguardBypassController impl);
 
     /** Provides an instance of {@link NotificationEntryManager} */
     @SysUISingleton
@@ -134,8 +127,8 @@
             Lazy<NotificationRemoteInputManager> notificationRemoteInputManagerLazy,
             LeakDetector leakDetector,
             IStatusBarService statusBarService,
-            NotifLiveDataStoreImpl notifLiveDataStore,
-            DumpManager dumpManager) {
+            DumpManager dumpManager,
+            @Background Executor bgExecutor) {
         return new NotificationEntryManager(
                 logger,
                 groupManager,
@@ -144,8 +137,8 @@
                 notificationRemoteInputManagerLazy,
                 leakDetector,
                 statusBarService,
-                notifLiveDataStore,
-                dumpManager);
+                dumpManager,
+                bgExecutor);
     }
 
     /** Provides an instance of {@link NotificationGutsManager} */
@@ -179,7 +172,6 @@
                 accessibilityManager,
                 highPriorityProvider,
                 notificationManager,
-                notificationEntryManager,
                 peopleSpaceWidgetManager,
                 launcherApps,
                 shortcutManager,
@@ -194,12 +186,8 @@
     }
 
     /** Provides an instance of {@link NotifGutsViewManager} */
-    @SysUISingleton
-    @Provides
-    static NotifGutsViewManager provideNotifGutsViewManager(
-            NotificationGutsManager notificationGutsManager) {
-        return notificationGutsManager;
-    }
+    @Binds
+    NotifGutsViewManager bindNotifGutsViewManager(NotificationGutsManager notificationGutsManager);
 
     /** Provides an instance of {@link VisualStabilityManager} */
     @SysUISingleton
@@ -226,10 +214,8 @@
     static NotificationLogger provideNotificationLogger(
             NotificationListener notificationListener,
             @UiBackground Executor uiBgExecutor,
-            NotifPipelineFlags notifPipelineFlags,
             NotifLiveDataStore notifLiveDataStore,
             NotificationVisibilityProvider visibilityProvider,
-            NotificationEntryManager entryManager,
             NotifPipeline notifPipeline,
             StatusBarStateController statusBarStateController,
             NotificationLogger.ExpansionStateLogger expansionStateLogger,
@@ -237,10 +223,8 @@
         return new NotificationLogger(
                 notificationListener,
                 uiBgExecutor,
-                notifPipelineFlags,
                 notifLiveDataStore,
                 visibilityProvider,
-                entryManager,
                 notifPipeline,
                 statusBarStateController,
                 expansionStateLogger,
@@ -257,25 +241,13 @@
     /** Provides an instance of {@link GroupMembershipManager} */
     @SysUISingleton
     @Provides
-    static GroupMembershipManager provideGroupMembershipManager(
-            NotifPipelineFlags notifPipelineFlags,
-            Lazy<NotificationGroupManagerLegacy> groupManagerLegacy) {
-        return notifPipelineFlags.isNewPipelineEnabled()
-                ? new GroupMembershipManagerImpl()
-                : groupManagerLegacy.get();
+    static GroupMembershipManager provideGroupMembershipManager() {
+        return new GroupMembershipManagerImpl();
     }
 
     /** Provides an instance of {@link GroupExpansionManager} */
-    @SysUISingleton
-    @Provides
-    static GroupExpansionManager provideGroupExpansionManager(
-            NotifPipelineFlags notifPipelineFlags,
-            Lazy<GroupMembershipManager> groupMembershipManager,
-            Lazy<NotificationGroupManagerLegacy> groupManagerLegacy) {
-        return notifPipelineFlags.isNewPipelineEnabled()
-                ? new GroupExpansionManagerImpl(groupMembershipManager.get())
-                : groupManagerLegacy.get();
-    }
+    @Binds
+    GroupExpansionManager provideGroupExpansionManager(GroupExpansionManagerImpl impl);
 
     /** Initializes the notification data pipeline (can be disabled via config). */
     @SysUISingleton
@@ -294,69 +266,28 @@
     /**
      * Provide the active notification collection managing the notifications to render.
      */
-    @Provides
-    @SysUISingleton
-    static CommonNotifCollection provideCommonNotifCollection(
-            NotifPipelineFlags notifPipelineFlags,
-            Lazy<NotifPipeline> pipeline,
-            NotificationEntryManager entryManager) {
-        return notifPipelineFlags.isNewPipelineEnabled()
-                ? pipeline.get() : entryManager;
-    }
+    @Binds
+    CommonNotifCollection provideCommonNotifCollection(NotifPipeline pipeline);
 
     /**
      * Provide the object which can be used to obtain NotificationVisibility objects.
      */
     @Binds
-    @SysUISingleton
     NotificationVisibilityProvider provideNotificationVisibilityProvider(
-            NotificationVisibilityProviderImpl newProvider);
+            NotificationVisibilityProviderImpl impl);
 
     /**
      * Provide the active implementation for presenting notifications.
      */
-    @Provides
-    @SysUISingleton
-    static NotifShadeEventSource provideNotifShadeEventSource(
-            NotifPipelineFlags notifPipelineFlags,
-            Lazy<ShadeEventCoordinator> shadeEventCoordinatorLazy,
-            Lazy<LegacyNotificationPresenterExtensions> legacyNotificationPresenterExtensionsLazy) {
-        return notifPipelineFlags.isNewPipelineEnabled()
-                ? shadeEventCoordinatorLazy.get()
-                : legacyNotificationPresenterExtensionsLazy.get();
-    }
+    @Binds
+    NotifShadeEventSource provideNotifShadeEventSource(ShadeEventCoordinator shadeEventCoordinator);
 
     /**
      * Provide a dismissal callback that's triggered when a user manually dismissed a notification
      * from the notification shade or it gets auto-cancelled by click.
      */
-    @Provides
-    @SysUISingleton
-    static OnUserInteractionCallback provideOnUserInteractionCallback(
-            NotifPipelineFlags notifPipelineFlags,
-            HeadsUpManager headsUpManager,
-            StatusBarStateController statusBarStateController,
-            Lazy<NotifCollection> notifCollection,
-            Lazy<NotificationVisibilityProvider> visibilityProvider,
-            Lazy<VisualStabilityCoordinator> visualStabilityCoordinator,
-            NotificationEntryManager entryManager,
-            VisualStabilityManager visualStabilityManager,
-            Lazy<GroupMembershipManager> groupMembershipManagerLazy) {
-        return notifPipelineFlags.isNewPipelineEnabled()
-                ? new OnUserInteractionCallbackImpl(
-                        visibilityProvider.get(),
-                        notifCollection.get(),
-                        headsUpManager,
-                        statusBarStateController,
-                        visualStabilityCoordinator.get())
-                : new OnUserInteractionCallbackImplLegacy(
-                        entryManager,
-                        visibilityProvider.get(),
-                        headsUpManager,
-                        statusBarStateController,
-                        visualStabilityManager,
-                        groupMembershipManagerLazy.get());
-    }
+    @Binds
+    OnUserInteractionCallback provideOnUserInteractionCallback(OnUserInteractionCallbackImpl impl);
 
     /** */
     @Binds
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 11ffde6..0e9f1cd 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
@@ -23,31 +23,22 @@
 import com.android.systemui.statusbar.NotificationListener
 import com.android.systemui.statusbar.NotificationPresenter
 import com.android.systemui.statusbar.notification.AnimatedImageNotificationManager
-import com.android.systemui.statusbar.notification.NotifPipelineFlags
 import com.android.systemui.statusbar.notification.NotificationActivityStarter
 import com.android.systemui.statusbar.notification.NotificationClicker
 import com.android.systemui.statusbar.notification.NotificationEntryManager
 import com.android.systemui.statusbar.notification.NotificationListController
 import com.android.systemui.statusbar.notification.collection.NotifLiveDataStore
 import com.android.systemui.statusbar.notification.collection.NotifPipeline
-import com.android.systemui.statusbar.notification.collection.NotificationRankingManager
 import com.android.systemui.statusbar.notification.collection.TargetSdkResolver
-import com.android.systemui.statusbar.notification.collection.inflation.BindEventManagerImpl
 import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinderImpl
 import com.android.systemui.statusbar.notification.collection.init.NotifPipelineInitializer
-import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy
 import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection
-import com.android.systemui.statusbar.notification.collection.provider.DebugModeFilterProvider
 import com.android.systemui.statusbar.notification.collection.render.NotifStackController
-import com.android.systemui.statusbar.notification.interruption.HeadsUpController
 import com.android.systemui.statusbar.notification.interruption.HeadsUpViewBinder
 import com.android.systemui.statusbar.notification.row.NotifBindPipelineInitializer
 import com.android.systemui.statusbar.notification.stack.NotificationListContainer
 import com.android.systemui.statusbar.phone.CentralSurfaces
-import com.android.systemui.statusbar.phone.NotificationGroupAlertTransferHelper
 import com.android.systemui.statusbar.policy.DeviceProvisionedController
-import com.android.systemui.statusbar.policy.HeadsUpManager
-import com.android.systemui.statusbar.policy.RemoteInputUriController
 import com.android.wm.shell.bubbles.Bubbles
 import dagger.Lazy
 import java.io.PrintWriter
@@ -64,30 +55,21 @@
 @SysUISingleton
 class NotificationsControllerImpl @Inject constructor(
     private val centralSurfaces: Lazy<CentralSurfaces>,
-    private val notifPipelineFlags: NotifPipelineFlags,
     private val notificationListener: NotificationListener,
     private val entryManager: NotificationEntryManager,
-    private val debugModeFilterProvider: DebugModeFilterProvider,
-    private val legacyRanker: NotificationRankingManager,
     private val commonNotifCollection: Lazy<CommonNotifCollection>,
     private val notifPipeline: Lazy<NotifPipeline>,
     private val notifLiveDataStore: NotifLiveDataStore,
     private val targetSdkResolver: TargetSdkResolver,
-    private val newNotifPipelineInitializer: Lazy<NotifPipelineInitializer>,
+    private val notifPipelineInitializer: Lazy<NotifPipelineInitializer>,
     private val notifBindPipelineInitializer: NotifBindPipelineInitializer,
     private val deviceProvisionedController: DeviceProvisionedController,
     private val notificationRowBinder: NotificationRowBinderImpl,
-    private val bindEventManagerImpl: BindEventManagerImpl,
-    private val remoteInputUriController: RemoteInputUriController,
-    private val groupManagerLegacy: Lazy<NotificationGroupManagerLegacy>,
-    private val groupAlertTransferHelper: NotificationGroupAlertTransferHelper,
-    private val headsUpManager: HeadsUpManager,
-    private val headsUpController: HeadsUpController,
     private val headsUpViewBinder: HeadsUpViewBinder,
     private val clickerBuilder: NotificationClicker.Builder,
     private val animatedImageNotificationManager: AnimatedImageNotificationManager,
     private val peopleSpaceWidgetManager: PeopleSpaceWidgetManager,
-    private val bubblesOptional: Optional<Bubbles>
+    private val bubblesOptional: Optional<Bubbles>,
 ) : NotificationsController {
 
     override fun initialize(
@@ -118,33 +100,13 @@
         notifBindPipelineInitializer.initialize()
         animatedImageNotificationManager.bind()
 
-        if (INITIALIZE_NEW_PIPELINE) {
-            newNotifPipelineInitializer.get().initialize(
-                    notificationListener,
-                    notificationRowBinder,
-                    listContainer,
-                    stackController)
-        }
+        notifPipelineInitializer.get().initialize(
+                notificationListener,
+                notificationRowBinder,
+                listContainer,
+                stackController)
 
-        if (notifPipelineFlags.isNewPipelineEnabled()) {
-            targetSdkResolver.initialize(notifPipeline.get())
-            // TODO
-        } else {
-            targetSdkResolver.initialize(entryManager)
-            remoteInputUriController.attach(entryManager)
-            groupAlertTransferHelper.bind(entryManager, groupManagerLegacy.get())
-            bindEventManagerImpl.attachToLegacyPipeline(entryManager)
-            headsUpManager.addListener(groupManagerLegacy.get())
-            headsUpManager.addListener(groupAlertTransferHelper)
-            headsUpController.attach(entryManager, headsUpManager)
-            groupManagerLegacy.get().setHeadsUpManager(headsUpManager)
-            groupAlertTransferHelper.setHeadsUpManager(headsUpManager)
-            debugModeFilterProvider.registerInvalidationListener {
-                entryManager.updateNotifications("debug mode filter changed")
-            }
-
-            entryManager.initialize(notificationListener, legacyRanker)
-        }
+        targetSdkResolver.initialize(notifPipeline.get())
 
         peopleSpaceWidgetManager.attach(notificationListener)
     }
@@ -185,9 +147,4 @@
 
     override fun getActiveNotificationsCount(): Int =
         notifLiveDataStore.activeNotifCount.value
-
-    companion object {
-        // NOTE: The new pipeline is always active, even if the old pipeline is *rendering*.
-        private const val INITIALIZE_NEW_PIPELINE = true
-    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/HeadsUpViewBinder.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/HeadsUpViewBinder.java
index 19cf9dc..5ef2b9e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/HeadsUpViewBinder.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/HeadsUpViewBinder.java
@@ -83,7 +83,7 @@
         params.setUseIncreasedHeadsUpHeight(useIncreasedHeadsUp);
         params.requireContentViews(FLAG_CONTENT_VIEW_HEADS_UP);
         CancellationSignal signal = mStage.requestRebind(entry, en -> {
-            mLogger.entryBoundSuccessfully(entry.getKey());
+            mLogger.entryBoundSuccessfully(entry);
             en.getRow().setUsesIncreasedHeadsUpHeight(params.useIncreasedHeadsUpHeight());
             // requestRebing promises that if we called cancel before this callback would be
             // invoked, then we will not enter this callback, and because we always cancel before
@@ -94,7 +94,7 @@
             }
         });
         abortBindCallback(entry);
-        mLogger.startBindingHun(entry.getKey());
+        mLogger.startBindingHun(entry);
         mOngoingBindCallbacks.put(entry, signal);
     }
 
@@ -105,7 +105,7 @@
     public void abortBindCallback(NotificationEntry entry) {
         CancellationSignal ongoingBindCallback = mOngoingBindCallbacks.remove(entry);
         if (ongoingBindCallback != null) {
-            mLogger.currentOngoingBindingAborted(entry.getKey());
+            mLogger.currentOngoingBindingAborted(entry);
             ongoingBindCallback.cancel();
         }
     }
@@ -116,7 +116,7 @@
     public void unbindHeadsUpView(NotificationEntry entry) {
         abortBindCallback(entry);
         mStage.getStageParams(entry).markContentViewsFreeable(FLAG_CONTENT_VIEW_HEADS_UP);
-        mLogger.entryContentViewMarkedFreeable(entry.getKey());
-        mStage.requestRebind(entry, e -> mLogger.entryUnbound(e.getKey()));
+        mLogger.entryContentViewMarkedFreeable(entry);
+        mStage.requestRebind(entry, e -> mLogger.entryUnbound(e));
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/HeadsUpViewBinderLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/HeadsUpViewBinderLogger.kt
index 50a6207..d1feaa0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/HeadsUpViewBinderLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/HeadsUpViewBinderLogger.kt
@@ -3,44 +3,46 @@
 import com.android.systemui.log.LogBuffer
 import com.android.systemui.log.LogLevel.INFO
 import com.android.systemui.log.dagger.NotificationHeadsUpLog
+import com.android.systemui.statusbar.notification.collection.NotificationEntry
+import com.android.systemui.statusbar.notification.logKey
 import javax.inject.Inject
 
 class HeadsUpViewBinderLogger @Inject constructor(@NotificationHeadsUpLog val buffer: LogBuffer) {
-    fun startBindingHun(key: String) {
+    fun startBindingHun(entry: NotificationEntry) {
         buffer.log(TAG, INFO, {
-            str1 = key
+            str1 = entry.logKey
         }, {
             "start binding heads up entry $str1 "
         })
     }
 
-    fun currentOngoingBindingAborted(key: String) {
+    fun currentOngoingBindingAborted(entry: NotificationEntry) {
         buffer.log(TAG, INFO, {
-            str1 = key
+            str1 = entry.logKey
         }, {
             "aborted potential ongoing heads up entry binding $str1 "
         })
     }
 
-    fun entryBoundSuccessfully(key: String) {
+    fun entryBoundSuccessfully(entry: NotificationEntry) {
         buffer.log(TAG, INFO, {
-            str1 = key
+            str1 = entry.logKey
         }, {
             "heads up entry bound successfully $str1 "
         })
     }
 
-    fun entryUnbound(key: String) {
+    fun entryUnbound(entry: NotificationEntry) {
         buffer.log(TAG, INFO, {
-            str1 = key
+            str1 = entry.logKey
         }, {
             "heads up entry unbound successfully $str1 "
         })
     }
 
-    fun entryContentViewMarkedFreeable(key: String) {
+    fun entryContentViewMarkedFreeable(entry: NotificationEntry) {
         buffer.log(TAG, INFO, {
-            str1 = key
+            str1 = entry.logKey
         }, {
             "start unbinding heads up entry $str1 "
         })
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 bef3d50..99d320d 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,22 +16,20 @@
 
 package com.android.systemui.statusbar.notification.interruption
 
-import android.service.notification.StatusBarNotification
 import com.android.systemui.log.LogBuffer
 import com.android.systemui.log.LogLevel.DEBUG
 import com.android.systemui.log.LogLevel.INFO
 import com.android.systemui.log.LogLevel.WARNING
-import com.android.systemui.log.dagger.NotificationHeadsUpLog
-import com.android.systemui.log.dagger.NotificationLog
+import com.android.systemui.log.dagger.NotificationInterruptLog
 import com.android.systemui.statusbar.notification.collection.NotificationEntry
+import com.android.systemui.statusbar.notification.logKey
 import javax.inject.Inject
 
 class NotificationInterruptLogger @Inject constructor(
-    @NotificationLog val notifBuffer: LogBuffer,
-    @NotificationHeadsUpLog val hunBuffer: LogBuffer
+    @NotificationInterruptLog val buffer: LogBuffer
 ) {
     fun logHeadsUpFeatureChanged(useHeadsUp: Boolean) {
-        hunBuffer.log(TAG, INFO, {
+        buffer.log(TAG, INFO, {
             bool1 = useHeadsUp
         }, {
             "heads up is enabled=$bool1"
@@ -39,118 +37,118 @@
     }
 
     fun logWillDismissAll() {
-        hunBuffer.log(TAG, INFO, {
+        buffer.log(TAG, INFO, {
         }, {
             "dismissing any existing heads up notification on disable event"
         })
     }
 
-    fun logNoBubbleNotAllowed(sbn: StatusBarNotification) {
-        notifBuffer.log(TAG, DEBUG, {
-            str1 = sbn.key
+    fun logNoBubbleNotAllowed(entry: NotificationEntry) {
+        buffer.log(TAG, DEBUG, {
+            str1 = entry.logKey
         }, {
             "No bubble up: not allowed to bubble: $str1"
         })
     }
 
-    fun logNoBubbleNoMetadata(sbn: StatusBarNotification) {
-        notifBuffer.log(TAG, DEBUG, {
-            str1 = sbn.key
+    fun logNoBubbleNoMetadata(entry: NotificationEntry) {
+        buffer.log(TAG, DEBUG, {
+            str1 = entry.logKey
         }, {
             "No bubble up: notification: $str1 doesn't have valid metadata"
         })
     }
 
     fun logNoHeadsUpFeatureDisabled() {
-        hunBuffer.log(TAG, DEBUG, {
+        buffer.log(TAG, DEBUG, {
         }, {
             "No heads up: no huns"
         })
     }
 
-    fun logNoHeadsUpPackageSnoozed(sbn: StatusBarNotification) {
-        hunBuffer.log(TAG, DEBUG, {
-            str1 = sbn.key
+    fun logNoHeadsUpPackageSnoozed(entry: NotificationEntry) {
+        buffer.log(TAG, DEBUG, {
+            str1 = entry.logKey
         }, {
             "No alerting: snoozed package: $str1"
         })
     }
 
-    fun logNoHeadsUpAlreadyBubbled(sbn: StatusBarNotification) {
-        hunBuffer.log(TAG, DEBUG, {
-            str1 = sbn.key
+    fun logNoHeadsUpAlreadyBubbled(entry: NotificationEntry) {
+        buffer.log(TAG, DEBUG, {
+            str1 = entry.logKey
         }, {
             "No heads up: in unlocked shade where notification is shown as a bubble: $str1"
         })
     }
 
-    fun logNoHeadsUpSuppressedByDnd(sbn: StatusBarNotification) {
-        hunBuffer.log(TAG, DEBUG, {
-            str1 = sbn.key
+    fun logNoHeadsUpSuppressedByDnd(entry: NotificationEntry) {
+        buffer.log(TAG, DEBUG, {
+            str1 = entry.logKey
         }, {
             "No heads up: suppressed by DND: $str1"
         })
     }
 
-    fun logNoHeadsUpNotImportant(sbn: StatusBarNotification) {
-        hunBuffer.log(TAG, DEBUG, {
-            str1 = sbn.key
+    fun logNoHeadsUpNotImportant(entry: NotificationEntry) {
+        buffer.log(TAG, DEBUG, {
+            str1 = entry.logKey
         }, {
             "No heads up: unimportant notification: $str1"
         })
     }
 
-    fun logNoHeadsUpNotInUse(sbn: StatusBarNotification) {
-        hunBuffer.log(TAG, DEBUG, {
-            str1 = sbn.key
+    fun logNoHeadsUpNotInUse(entry: NotificationEntry) {
+        buffer.log(TAG, DEBUG, {
+            str1 = entry.logKey
         }, {
             "No heads up: not in use: $str1"
         })
     }
 
     fun logNoHeadsUpSuppressedBy(
-        sbn: StatusBarNotification,
+        entry: NotificationEntry,
         suppressor: NotificationInterruptSuppressor
     ) {
-        hunBuffer.log(TAG, DEBUG, {
-            str1 = sbn.key
+        buffer.log(TAG, DEBUG, {
+            str1 = entry.logKey
             str2 = suppressor.name
         }, {
             "No heads up: aborted by suppressor: $str2 sbnKey=$str1"
         })
     }
 
-    fun logHeadsUp(sbn: StatusBarNotification) {
-        hunBuffer.log(TAG, DEBUG, {
-            str1 = sbn.key
+    fun logHeadsUp(entry: NotificationEntry) {
+        buffer.log(TAG, DEBUG, {
+            str1 = entry.logKey
         }, {
             "Heads up: $str1"
         })
     }
 
-    fun logNoAlertingFilteredOut(sbn: StatusBarNotification) {
-        hunBuffer.log(TAG, DEBUG, {
-            str1 = sbn.key
+    fun logNoAlertingFilteredOut(entry: NotificationEntry) {
+        buffer.log(TAG, DEBUG, {
+            str1 = entry.logKey
         }, {
             "No alerting: filtered notification: $str1"
         })
     }
 
-    fun logNoAlertingGroupAlertBehavior(sbn: StatusBarNotification) {
-        hunBuffer.log(TAG, DEBUG, {
-            str1 = sbn.key
+    fun logNoAlertingGroupAlertBehavior(entry: NotificationEntry) {
+        buffer.log(TAG, DEBUG, {
+            str1 = entry.logKey
         }, {
             "No alerting: suppressed due to group alert behavior: $str1"
         })
     }
 
     fun logNoAlertingSuppressedBy(
-        sbn: StatusBarNotification,
+        entry: NotificationEntry,
         suppressor: NotificationInterruptSuppressor,
         awake: Boolean
     ) {
-        hunBuffer.log(TAG, DEBUG, {
-            str1 = sbn.key
+        buffer.log(TAG, DEBUG, {
+            str1 = entry.logKey
             str2 = suppressor.name
             bool1 = awake
         }, {
@@ -158,65 +156,65 @@
         })
     }
 
-    fun logNoAlertingRecentFullscreen(sbn: StatusBarNotification) {
-        hunBuffer.log(TAG, DEBUG, {
-            str1 = sbn.key
+    fun logNoAlertingRecentFullscreen(entry: NotificationEntry) {
+        buffer.log(TAG, DEBUG, {
+            str1 = entry.logKey
         }, {
             "No alerting: recent fullscreen: $str1"
         })
     }
 
-    fun logNoPulsingSettingDisabled(sbn: StatusBarNotification) {
-        hunBuffer.log(TAG, DEBUG, {
-            str1 = sbn.key
+    fun logNoPulsingSettingDisabled(entry: NotificationEntry) {
+        buffer.log(TAG, DEBUG, {
+            str1 = entry.logKey
         }, {
             "No pulsing: disabled by setting: $str1"
         })
     }
 
-    fun logNoPulsingBatteryDisabled(sbn: StatusBarNotification) {
-        hunBuffer.log(TAG, DEBUG, {
-            str1 = sbn.key
+    fun logNoPulsingBatteryDisabled(entry: NotificationEntry) {
+        buffer.log(TAG, DEBUG, {
+            str1 = entry.logKey
         }, {
             "No pulsing: disabled by battery saver: $str1"
         })
     }
 
-    fun logNoPulsingNoAlert(sbn: StatusBarNotification) {
-        hunBuffer.log(TAG, DEBUG, {
-            str1 = sbn.key
+    fun logNoPulsingNoAlert(entry: NotificationEntry) {
+        buffer.log(TAG, DEBUG, {
+            str1 = entry.logKey
         }, {
             "No pulsing: notification shouldn't alert: $str1"
         })
     }
 
-    fun logNoPulsingNoAmbientEffect(sbn: StatusBarNotification) {
-        hunBuffer.log(TAG, DEBUG, {
-            str1 = sbn.key
+    fun logNoPulsingNoAmbientEffect(entry: NotificationEntry) {
+        buffer.log(TAG, DEBUG, {
+            str1 = entry.logKey
         }, {
             "No pulsing: ambient effect suppressed: $str1"
         })
     }
 
-    fun logNoPulsingNotImportant(sbn: StatusBarNotification) {
-        hunBuffer.log(TAG, DEBUG, {
-            str1 = sbn.key
+    fun logNoPulsingNotImportant(entry: NotificationEntry) {
+        buffer.log(TAG, DEBUG, {
+            str1 = entry.logKey
         }, {
             "No pulsing: not important enough: $str1"
         })
     }
 
-    fun logPulsing(sbn: StatusBarNotification) {
-        hunBuffer.log(TAG, DEBUG, {
-            str1 = sbn.key
+    fun logPulsing(entry: NotificationEntry) {
+        buffer.log(TAG, DEBUG, {
+            str1 = entry.logKey
         }, {
             "Pulsing: $str1"
         })
     }
 
     fun logNoFullscreen(entry: NotificationEntry, reason: String) {
-        hunBuffer.log(TAG, DEBUG, {
-            str1 = entry.key
+        buffer.log(TAG, DEBUG, {
+            str1 = entry.logKey
             str2 = reason
         }, {
             "No FullScreenIntent: $str2: $str1"
@@ -224,8 +222,8 @@
     }
 
     fun logNoFullscreenWarning(entry: NotificationEntry, reason: String) {
-        hunBuffer.log(TAG, WARNING, {
-            str1 = entry.key
+        buffer.log(TAG, WARNING, {
+            str1 = entry.logKey
             str2 = reason
         }, {
             "No FullScreenIntent: WARNING: $str2: $str1"
@@ -233,17 +231,17 @@
     }
 
     fun logFullscreen(entry: NotificationEntry, reason: String) {
-        hunBuffer.log(TAG, DEBUG, {
-            str1 = entry.key
+        buffer.log(TAG, DEBUG, {
+            str1 = entry.logKey
             str2 = reason
         }, {
             "FullScreenIntent: $str2: $str1"
         })
     }
 
-    fun keyguardHideNotification(key: String) {
-        hunBuffer.log(TAG, DEBUG, {
-            str1 = key
+    fun keyguardHideNotification(entry: NotificationEntry) {
+        buffer.log(TAG, DEBUG, {
+            str1 = entry.logKey
         }, {
             "Keyguard Hide Notification: $str1"
         })
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 e1ddbd2..558fd62 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
@@ -37,10 +37,10 @@
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.statusbar.StatusBarState;
 import com.android.systemui.statusbar.notification.NotifPipelineFlags;
-import com.android.systemui.statusbar.notification.NotificationFilter;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.policy.BatteryController;
 import com.android.systemui.statusbar.policy.HeadsUpManager;
+import com.android.systemui.statusbar.policy.KeyguardStateController;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -58,13 +58,12 @@
 
     private final List<NotificationInterruptSuppressor> mSuppressors = new ArrayList<>();
     private final StatusBarStateController mStatusBarStateController;
-    private final NotificationFilter mNotificationFilter;
+    private final KeyguardStateController mKeyguardStateController;
     private final ContentResolver mContentResolver;
     private final PowerManager mPowerManager;
     private final IDreamManager mDreamManager;
     private final AmbientDisplayConfiguration mAmbientDisplayConfiguration;
     private final BatteryController mBatteryController;
-    private final ContentObserver mHeadsUpObserver;
     private final HeadsUpManager mHeadsUpManager;
     private final NotificationInterruptLogger mLogger;
     private final NotifPipelineFlags mFlags;
@@ -79,9 +78,9 @@
             PowerManager powerManager,
             IDreamManager dreamManager,
             AmbientDisplayConfiguration ambientDisplayConfiguration,
-            NotificationFilter notificationFilter,
             BatteryController batteryController,
             StatusBarStateController statusBarStateController,
+            KeyguardStateController keyguardStateController,
             HeadsUpManager headsUpManager,
             NotificationInterruptLogger logger,
             @Main Handler mainHandler,
@@ -92,13 +91,13 @@
         mDreamManager = dreamManager;
         mBatteryController = batteryController;
         mAmbientDisplayConfiguration = ambientDisplayConfiguration;
-        mNotificationFilter = notificationFilter;
         mStatusBarStateController = statusBarStateController;
+        mKeyguardStateController = keyguardStateController;
         mHeadsUpManager = headsUpManager;
         mLogger = logger;
         mFlags = flags;
         mKeyguardNotificationVisibilityProvider = keyguardNotificationVisibilityProvider;
-        mHeadsUpObserver = new ContentObserver(mainHandler) {
+        ContentObserver headsUpObserver = new ContentObserver(mainHandler) {
             @Override
             public void onChange(boolean selfChange) {
                 boolean wasUsing = mUseHeadsUp;
@@ -121,12 +120,12 @@
             mContentResolver.registerContentObserver(
                     Settings.Global.getUriFor(Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED),
                     true,
-                    mHeadsUpObserver);
+                    headsUpObserver);
             mContentResolver.registerContentObserver(
                     Settings.Global.getUriFor(SETTING_HEADS_UP_TICKER), true,
-                    mHeadsUpObserver);
+                    headsUpObserver);
         }
-        mHeadsUpObserver.onChange(true); // set up
+        headsUpObserver.onChange(true); // set up
     }
 
     @Override
@@ -147,14 +146,14 @@
         }
 
         if (!entry.canBubble()) {
-            mLogger.logNoBubbleNotAllowed(sbn);
+            mLogger.logNoBubbleNotAllowed(entry);
             return false;
         }
 
         if (entry.getBubbleMetadata() == null
                 || (entry.getBubbleMetadata().getShortcutId() == null
                     && entry.getBubbleMetadata().getIntent() == null)) {
-            mLogger.logNoBubbleNoMetadata(sbn);
+            mLogger.logNoBubbleNoMetadata(entry);
             return false;
         }
 
@@ -228,6 +227,28 @@
             return false;
         }
 
+        // 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()) {
+                    mLogger.logFullscreen(entry, "Expected not to HUN while keyguard occluded");
+                } else {
+                    // Likely LOCKED_SHADE, but launch FSI anyway
+                    mLogger.logFullscreen(entry, "Keyguard is showing and not occluded");
+                }
+                return true;
+            }
+
+            // 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.
+            final int uid = entry.getSbn().getUid();
+            android.util.EventLog.writeEvent(0x534e4554, "231322873", uid, "no hun or keyguard");
+            mLogger.logNoFullscreenWarning(entry, "Expected not to HUN while not on keyguard");
+            return false;
+        }
+
         // If the notification won't HUN for some other reason (DND/snooze/etc), launch FSI.
         mLogger.logFullscreen(entry, "Expected not to HUN");
         return true;
@@ -254,45 +275,49 @@
             return false;
         }
 
+        if (!canAlertHeadsUpCommon(entry)) {
+            return false;
+        }
+
         if (!canAlertAwakeCommon(entry)) {
             return false;
         }
 
         if (isSnoozedPackage(sbn)) {
-            mLogger.logNoHeadsUpPackageSnoozed(sbn);
+            mLogger.logNoHeadsUpPackageSnoozed(entry);
             return false;
         }
 
         boolean inShade = mStatusBarStateController.getState() == SHADE;
         if (entry.isBubble() && inShade) {
-            mLogger.logNoHeadsUpAlreadyBubbled(sbn);
+            mLogger.logNoHeadsUpAlreadyBubbled(entry);
             return false;
         }
 
         if (entry.shouldSuppressPeek()) {
-            mLogger.logNoHeadsUpSuppressedByDnd(sbn);
+            mLogger.logNoHeadsUpSuppressedByDnd(entry);
             return false;
         }
 
         if (entry.getImportance() < NotificationManager.IMPORTANCE_HIGH) {
-            mLogger.logNoHeadsUpNotImportant(sbn);
+            mLogger.logNoHeadsUpNotImportant(entry);
             return false;
         }
 
         boolean inUse = mPowerManager.isScreenOn() && !isDreaming();
 
         if (!inUse) {
-            mLogger.logNoHeadsUpNotInUse(sbn);
+            mLogger.logNoHeadsUpNotInUse(entry);
             return false;
         }
 
         for (int i = 0; i < mSuppressors.size(); i++) {
             if (mSuppressors.get(i).suppressAwakeHeadsUp(entry)) {
-                mLogger.logNoHeadsUpSuppressedBy(sbn, mSuppressors.get(i));
+                mLogger.logNoHeadsUpSuppressedBy(entry, mSuppressors.get(i));
                 return false;
             }
         }
-        mLogger.logHeadsUp(sbn);
+        mLogger.logHeadsUp(entry);
         return true;
     }
 
@@ -304,33 +329,36 @@
      * @return true if the entry should ambient pulse, false otherwise
      */
     private boolean shouldHeadsUpWhenDozing(NotificationEntry entry) {
-        StatusBarNotification sbn = entry.getSbn();
-
         if (!mAmbientDisplayConfiguration.pulseOnNotificationEnabled(UserHandle.USER_CURRENT)) {
-            mLogger.logNoPulsingSettingDisabled(sbn);
+            mLogger.logNoPulsingSettingDisabled(entry);
             return false;
         }
 
         if (mBatteryController.isAodPowerSave()) {
-            mLogger.logNoPulsingBatteryDisabled(sbn);
+            mLogger.logNoPulsingBatteryDisabled(entry);
             return false;
         }
 
         if (!canAlertCommon(entry)) {
-            mLogger.logNoPulsingNoAlert(sbn);
+            mLogger.logNoPulsingNoAlert(entry);
+            return false;
+        }
+
+        if (!canAlertHeadsUpCommon(entry)) {
+            mLogger.logNoPulsingNoAlert(entry);
             return false;
         }
 
         if (entry.shouldSuppressAmbient()) {
-            mLogger.logNoPulsingNoAmbientEffect(sbn);
+            mLogger.logNoPulsingNoAmbientEffect(entry);
             return false;
         }
 
         if (entry.getImportance() < NotificationManager.IMPORTANCE_DEFAULT) {
-            mLogger.logNoPulsingNotImportant(sbn);
+            mLogger.logNoPulsingNotImportant(entry);
             return false;
         }
-        mLogger.logPulsing(sbn);
+        mLogger.logPulsing(entry);
         return true;
     }
 
@@ -341,33 +369,38 @@
      * @return true if these checks pass, false if the notification should not alert
      */
     private boolean canAlertCommon(NotificationEntry entry) {
-        StatusBarNotification sbn = entry.getSbn();
-
-        if (!mFlags.isNewPipelineEnabled() && mNotificationFilter.shouldFilterOut(entry)) {
-            mLogger.logNoAlertingFilteredOut(sbn);
-            return false;
-        }
-
-        // Don't alert notifications that are suppressed due to group alert behavior
-        if (sbn.isGroup() && sbn.getNotification().suppressAlertingDueToGrouping()) {
-            mLogger.logNoAlertingGroupAlertBehavior(sbn);
-            return false;
-        }
-
         for (int i = 0; i < mSuppressors.size(); i++) {
             if (mSuppressors.get(i).suppressInterruptions(entry)) {
-                mLogger.logNoAlertingSuppressedBy(sbn, mSuppressors.get(i), /* awake */ false);
+                mLogger.logNoAlertingSuppressedBy(entry, mSuppressors.get(i), /* awake */ false);
                 return false;
             }
         }
 
-        if (entry.hasJustLaunchedFullScreenIntent()) {
-            mLogger.logNoAlertingRecentFullscreen(sbn);
+        if (mKeyguardNotificationVisibilityProvider.shouldHideNotification(entry)) {
+            mLogger.keyguardHideNotification(entry);
             return false;
         }
 
-        if (mKeyguardNotificationVisibilityProvider.shouldHideNotification(entry)) {
-            mLogger.keyguardHideNotification(entry.getKey());
+        return true;
+    }
+
+    /**
+     * Common checks for heads up notifications on regular and AOD displays.
+     *
+     * @param entry the entry to check
+     * @return true if these checks pass, false if the notification should not alert
+     */
+    private boolean canAlertHeadsUpCommon(NotificationEntry entry) {
+        StatusBarNotification sbn = entry.getSbn();
+
+        // Don't alert notifications that are suppressed due to group alert behavior
+        if (sbn.isGroup() && sbn.getNotification().suppressAlertingDueToGrouping()) {
+            mLogger.logNoAlertingGroupAlertBehavior(entry);
+            return false;
+        }
+
+        if (entry.hasJustLaunchedFullScreenIntent()) {
+            mLogger.logNoAlertingRecentFullscreen(entry);
             return false;
         }
 
@@ -385,7 +418,7 @@
 
         for (int i = 0; i < mSuppressors.size(); i++) {
             if (mSuppressors.get(i).suppressAwakeInterruptions(entry)) {
-                mLogger.logNoAlertingSuppressedBy(sbn, mSuppressors.get(i), /* awake */ true);
+                mLogger.logNoAlertingSuppressedBy(entry, mSuppressors.get(i), /* awake */ true);
                 return false;
             }
         }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java
index 9fbd5c3..6391877 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java
@@ -22,7 +22,6 @@
 import android.os.SystemClock;
 import android.os.Trace;
 import android.service.notification.NotificationListenerService;
-import android.service.notification.StatusBarNotification;
 import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.Log;
@@ -39,9 +38,6 @@
 import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener;
 import com.android.systemui.statusbar.NotificationListener;
 import com.android.systemui.statusbar.StatusBarState;
-import com.android.systemui.statusbar.notification.NotifPipelineFlags;
-import com.android.systemui.statusbar.notification.NotificationEntryListener;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.collection.NotifLiveDataStore;
 import com.android.systemui.statusbar.notification.collection.NotifPipeline;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
@@ -80,7 +76,6 @@
     private final Executor mUiBgExecutor;
     private final NotifLiveDataStore mNotifLiveDataStore;
     private final NotificationVisibilityProvider mVisibilityProvider;
-    private final NotificationEntryManager mEntryManager;
     private final NotifPipeline mNotifPipeline;
     private final NotificationPanelLogger mNotificationPanelLogger;
     private final ExpansionStateLogger mExpansionStateLogger;
@@ -220,10 +215,8 @@
      */
     public NotificationLogger(NotificationListener notificationListener,
             @UiBackground Executor uiBgExecutor,
-            NotifPipelineFlags notifPipelineFlags,
             NotifLiveDataStore notifLiveDataStore,
             NotificationVisibilityProvider visibilityProvider,
-            NotificationEntryManager entryManager,
             NotifPipeline notifPipeline,
             StatusBarStateController statusBarStateController,
             ExpansionStateLogger expansionStateLogger,
@@ -232,7 +225,6 @@
         mUiBgExecutor = uiBgExecutor;
         mNotifLiveDataStore = notifLiveDataStore;
         mVisibilityProvider = visibilityProvider;
-        mEntryManager = entryManager;
         mNotifPipeline = notifPipeline;
         mBarService = IStatusBarService.Stub.asInterface(
                 ServiceManager.getService(Context.STATUS_BAR_SERVICE));
@@ -241,36 +233,7 @@
         // Not expected to be destroyed, don't need to unsubscribe
         statusBarStateController.addCallback(this);
 
-        if (notifPipelineFlags.isNewPipelineEnabled()) {
-            registerNewPipelineListener();
-        } else {
-            registerLegacyListener();
-        }
-    }
-
-    private void registerLegacyListener() {
-        mEntryManager.addNotificationEntryListener(new NotificationEntryListener() {
-            @Override
-            public void onEntryRemoved(
-                    NotificationEntry entry,
-                    NotificationVisibility visibility,
-                    boolean removedByUser,
-                    int reason) {
-                mExpansionStateLogger.onEntryRemoved(entry.getKey());
-            }
-
-            @Override
-            public void onPreEntryUpdated(NotificationEntry entry) {
-                mExpansionStateLogger.onEntryUpdated(entry.getKey());
-            }
-
-            @Override
-            public void onInflationError(
-                    StatusBarNotification notification,
-                    Exception exception) {
-                logNotificationError(notification, exception);
-            }
-        });
+        registerNewPipelineListener();
     }
 
     private void registerNewPipelineListener() {
@@ -333,26 +296,6 @@
         }
     }
 
-    /**
-     * Logs Notification inflation error
-     */
-    private void logNotificationError(
-            StatusBarNotification notification,
-            Exception exception) {
-        try {
-            mBarService.onNotificationError(
-                    notification.getPackageName(),
-                    notification.getTag(),
-                    notification.getId(),
-                    notification.getUid(),
-                    notification.getInitialPid(),
-                    exception.getMessage(),
-                    notification.getUserId());
-        } catch (RemoteException ex) {
-            // The end is nigh.
-        }
-    }
-
     private void logNotificationVisibilityChanges(
             Collection<NotificationVisibility> newlyVisible,
             Collection<NotificationVisibility> noLongerVisible) {
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 26614ff..3c01802 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
@@ -143,7 +143,7 @@
 
     // We don't correctly track dark mode until the content views are inflated, so always update
     // the background on first content update just in case it happens to be during a theme change.
-    private boolean mUpdateBackgroundOnUpdate = true;
+    private boolean mUpdateSelfBackgroundOnUpdate = true;
     private boolean mNotificationTranslationFinished = false;
     private boolean mIsSnoozed;
     private boolean mIsFaded;
@@ -555,9 +555,28 @@
         updateLimits();
         updateShelfIconColor();
         updateRippleAllowed();
-        if (mUpdateBackgroundOnUpdate) {
-            mUpdateBackgroundOnUpdate = false;
-            updateBackgroundColors();
+        if (mUpdateSelfBackgroundOnUpdate) {
+            // Because this is triggered by UiMode change which we already propagated to children,
+            // we know that child rows will receive the same event, and will update their own
+            // backgrounds when they finish inflating, so propagating again would be redundant.
+            mUpdateSelfBackgroundOnUpdate = false;
+            updateBackgroundColorsOfSelf();
+        }
+    }
+
+    private void updateBackgroundColorsOfSelf() {
+        super.updateBackgroundColors();
+    }
+
+    @Override
+    public void updateBackgroundColors() {
+        // Because this call is made by the NSSL only on attached rows at the moment of the
+        // UiMode or Theme change, we have to propagate to our child views.
+        updateBackgroundColorsOfSelf();
+        if (mIsSummaryWithChildren) {
+            for (ExpandableNotificationRow child : mChildrenContainer.getAttachedChildren()) {
+                child.updateBackgroundColors();
+            }
         }
     }
 
@@ -1244,7 +1263,7 @@
     }
 
     public void onUiModeChanged() {
-        mUpdateBackgroundOnUpdate = true;
+        mUpdateSelfBackgroundOnUpdate = true;
         reInflateViews();
         if (mChildrenContainer != null) {
             for (ExpandableNotificationRow child : mChildrenContainer.getAttachedChildren()) {
@@ -1890,6 +1909,8 @@
      * @param isEnabled whether the content views should be enabled for accessibility
      */
     private void updateContentAccessibilityImportanceForGuts(boolean isEnabled) {
+        updateAccessibilityImportance(isEnabled);
+
         if (mChildrenContainer != null) {
             updateChildAccessibilityImportance(mChildrenContainer, isEnabled);
         }
@@ -1905,6 +1926,15 @@
     }
 
     /**
+     * Updates whether this view is important for accessibility based on {@code isEnabled}.
+     */
+    private void updateAccessibilityImportance(boolean isEnabled) {
+        setImportantForAccessibility(isEnabled
+                ? View.IMPORTANT_FOR_ACCESSIBILITY_AUTO
+                : View.IMPORTANT_FOR_ACCESSIBILITY_NO);
+    }
+
+    /**
      * Updates whether the given childView is important for accessibility based on
      * {@code isEnabled}.
      */
@@ -2075,6 +2105,13 @@
 
     public void applyLaunchAnimationParams(LaunchAnimationParameters params) {
         if (params == null) {
+            // `null` params indicates the animation is over, which means we can't access
+            // params.getParentStartClipTopAmount() which has the value we want to restore.
+            // Fortunately, only NotificationShelf actually uses these values for anything other
+            // than this launch animation, so we can restore the value to 0 and it's right for now.
+            if (mNotificationParent != null) {
+                mNotificationParent.setClipTopAmount(0);
+            }
             return;
         }
 
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 599039d..a493a67 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
@@ -19,6 +19,7 @@
 import static com.android.systemui.Dependency.ALLOW_NOTIFICATION_LONG_PRESS_NAME;
 import static com.android.systemui.statusbar.NotificationRemoteInputManager.ENABLE_REMOTE_INPUT;
 import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
+import static com.android.systemui.statusbar.notification.NotificationUtils.logKey;
 
 import android.util.Log;
 import android.view.View;
@@ -247,7 +248,7 @@
     @Override
     @NonNull
     public String getNodeLabel() {
-        return mView.getEntry().getKey();
+        return logKey(mView.getEntry());
     }
 
     @Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowDragController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowDragController.java
index c2c40d8..4939a9c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowDragController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowDragController.java
@@ -47,8 +47,8 @@
 
 import com.android.systemui.R;
 import com.android.systemui.animation.Interpolators;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.statusbar.CommandQueue;
-import com.android.systemui.statusbar.phone.ShadeController;
 import com.android.systemui.statusbar.policy.HeadsUpManager;
 
 import javax.inject.Inject;
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 d71e7680..8f73b80 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
@@ -58,7 +58,6 @@
     private ArrayList<View> mMatchParentViews = new ArrayList<View>();
     private static Rect mClipRect = new Rect();
     private boolean mWillBeGone;
-    private int mMinClipTopAmount = 0;
     private boolean mClipToActualHeight = true;
     private boolean mChangingPosition = false;
     private ViewGroup mTransientContainer;
@@ -187,10 +186,12 @@
      * @param notifyListeners Whether the listener should be informed about the change.
      */
     public void setActualHeight(int actualHeight, boolean notifyListeners) {
-        mActualHeight = actualHeight;
-        updateClipping();
-        if (notifyListeners) {
-            notifyHeightChanged(false  /* needsAnimation */);
+        if (mActualHeight != actualHeight) {
+            mActualHeight = actualHeight;
+            updateClipping();
+            if (notifyListeners) {
+                notifyHeightChanged(false  /* needsAnimation */);
+            }
         }
     }
 
@@ -477,14 +478,6 @@
         mWillBeGone = willBeGone;
     }
 
-    public int getMinClipTopAmount() {
-        return mMinClipTopAmount;
-    }
-
-    public void setMinClipTopAmount(int minClipTopAmount) {
-        mMinClipTopAmount = minClipTopAmount;
-    }
-
     @Override
     public void setLayerType(int layerType, Paint paint) {
         // Allow resetting the layerType to NONE regardless of overlappingRendering
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridConversationNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridConversationNotificationView.java
index c661408..99a24cb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridConversationNotificationView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridConversationNotificationView.java
@@ -67,6 +67,7 @@
         mConversationIconView = requireViewById(com.android.internal.R.id.conversation_icon);
         mConversationFacePile = requireViewById(com.android.internal.R.id.conversation_face_pile);
         mConversationSenderName = requireViewById(R.id.conversation_notification_sender);
+        applyTextColor(mConversationSenderName, mSecondaryTextColor);
         mFacePileSize = getResources()
                 .getDimensionPixelSize(R.dimen.conversation_single_line_face_pile_size);
         mFacePileAvatarSize = getResources()
@@ -75,6 +76,9 @@
                 .getDimensionPixelSize(R.dimen.conversation_single_line_avatar_size);
         mFacePileProtectionWidth = getResources().getDimensionPixelSize(
                 R.dimen.conversation_single_line_face_pile_protection_width);
+        mTransformationHelper.setCustomTransformation(
+                new FadeOutAndDownWithTitleTransformation(mConversationSenderName),
+                mConversationSenderName.getId());
         mTransformationHelper.addViewTransformingToSimilar(mConversationIconView);
         mTransformationHelper.addTransformedView(mConversationSenderName);
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridGroupManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridGroupManager.java
index 56f8e08..77fd051 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridGroupManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridGroupManager.java
@@ -16,13 +16,14 @@
 
 package com.android.systemui.statusbar.notification.row;
 
+import static com.android.systemui.util.PluralMessageFormaterKt.icuMessageFormat;
+
 import android.annotation.Nullable;
 import android.app.Notification;
 import android.content.Context;
 import android.content.res.Resources;
 import android.service.notification.StatusBarNotification;
 import android.util.TypedValue;
-import android.view.ContextThemeWrapper;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -55,10 +56,8 @@
         mOverflowNumberPadding = res.getDimensionPixelSize(R.dimen.group_overflow_number_padding);
     }
 
-    private HybridNotificationView inflateHybridViewWithStyle(int style,
-            View contentView, ViewGroup parent) {
-        LayoutInflater inflater = new ContextThemeWrapper(mContext, style)
-                .getSystemService(LayoutInflater.class);
+    private HybridNotificationView inflateHybridView(View contentView, ViewGroup parent) {
+        LayoutInflater inflater = LayoutInflater.from(mContext);
         int layout = contentView instanceof ConversationLayout
                 ? R.layout.hybrid_conversation_notification
                 : R.layout.hybrid_notification;
@@ -91,16 +90,8 @@
     public HybridNotificationView bindFromNotification(HybridNotificationView reusableView,
             View contentView, StatusBarNotification notification,
             ViewGroup parent) {
-        return bindFromNotificationWithStyle(reusableView, contentView, notification,
-                R.style.HybridNotification, parent);
-    }
-
-    private HybridNotificationView bindFromNotificationWithStyle(
-            HybridNotificationView reusableView, View contentView,
-            StatusBarNotification notification,
-            int style, ViewGroup parent) {
         if (reusableView == null) {
-            reusableView = inflateHybridViewWithStyle(style, contentView, parent);
+            reusableView = inflateHybridView(contentView, parent);
         }
         CharSequence titleText = resolveTitle(notification.getNotification());
         CharSequence contentText = resolveText(notification.getNotification());
@@ -136,8 +127,8 @@
         if (!text.equals(reusableView.getText())) {
             reusableView.setText(text);
         }
-        String contentDescription = String.format(mContext.getResources().getQuantityString(
-                R.plurals.notification_group_overflow_description, number), number);
+        String contentDescription = icuMessageFormat(mContext.getResources(),
+                R.string.notification_group_overflow_description, number);
 
         reusableView.setContentDescription(contentDescription);
         reusableView.setTextSize(TypedValue.COMPLEX_UNIT_PX, mOverflowNumberSize);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridNotificationView.java
index c0d85a6..fc9d9e8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridNotificationView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/HybridNotificationView.java
@@ -16,13 +16,18 @@
 
 package com.android.systemui.statusbar.notification.row;
 
+import static android.app.Notification.COLOR_INVALID;
+
 import android.annotation.Nullable;
 import android.content.Context;
+import android.content.res.TypedArray;
 import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.view.View;
 import android.widget.TextView;
 
+import androidx.annotation.ColorInt;
+
 import com.android.keyguard.AlphaOptimizedLinearLayout;
 import com.android.systemui.R;
 import com.android.systemui.statusbar.CrossFadeHelper;
@@ -40,6 +45,8 @@
     protected final ViewTransformationHelper mTransformationHelper = new ViewTransformationHelper();
     protected TextView mTitleView;
     protected TextView mTextView;
+    protected int mPrimaryTextColor = COLOR_INVALID;
+    protected int mSecondaryTextColor = COLOR_INVALID;
 
     public HybridNotificationView(Context context) {
         this(context, null);
@@ -69,42 +76,37 @@
     @Override
     protected void onFinishInflate() {
         super.onFinishInflate();
+        resolveThemeTextColors();
         mTitleView = findViewById(R.id.notification_title);
         mTextView = findViewById(R.id.notification_text);
+        applyTextColor(mTitleView, mPrimaryTextColor);
+        applyTextColor(mTextView, mSecondaryTextColor);
         mTransformationHelper.setCustomTransformation(
-                new ViewTransformationHelper.CustomTransformation() {
-                    @Override
-                    public boolean transformTo(TransformState ownState, TransformableView notification,
-                            float transformationAmount) {
-                        // We want to transform to the same y location as the title
-                        TransformState otherState = notification.getCurrentState(
-                                TRANSFORMING_VIEW_TITLE);
-                        CrossFadeHelper.fadeOut(mTextView, transformationAmount);
-                        if (otherState != null) {
-                            ownState.transformViewVerticalTo(otherState, transformationAmount);
-                            otherState.recycle();
-                        }
-                        return true;
-                    }
-
-                    @Override
-                    public boolean transformFrom(TransformState ownState,
-                            TransformableView notification, float transformationAmount) {
-                        // We want to transform from the same y location as the title
-                        TransformState otherState = notification.getCurrentState(
-                                TRANSFORMING_VIEW_TITLE);
-                        CrossFadeHelper.fadeIn(mTextView, transformationAmount, true /* remap */);
-                        if (otherState != null) {
-                            ownState.transformViewVerticalFrom(otherState, transformationAmount);
-                            otherState.recycle();
-                        }
-                        return true;
-                    }
-                }, TRANSFORMING_VIEW_TEXT);
+                new FadeOutAndDownWithTitleTransformation(mTextView),
+                TRANSFORMING_VIEW_TEXT);
         mTransformationHelper.addTransformedView(TRANSFORMING_VIEW_TITLE, mTitleView);
         mTransformationHelper.addTransformedView(TRANSFORMING_VIEW_TEXT, mTextView);
     }
 
+    protected void applyTextColor(TextView textView, @ColorInt int textColor) {
+        if (textColor != COLOR_INVALID) {
+            textView.setTextColor(textColor);
+        }
+    }
+
+    private void resolveThemeTextColors() {
+        try (TypedArray ta = mContext.getTheme().obtainStyledAttributes(
+                android.R.style.Theme_DeviceDefault_DayNight, new int[]{
+                        android.R.attr.textColorPrimary,
+                        android.R.attr.textColorSecondary
+                })) {
+            if (ta != null) {
+                mPrimaryTextColor = ta.getColor(0, mPrimaryTextColor);
+                mSecondaryTextColor = ta.getColor(1, mSecondaryTextColor);
+            }
+        }
+    }
+
     public void bind(@Nullable CharSequence title, @Nullable CharSequence text,
             @Nullable View contentView) {
         mTitleView.setText(title);
@@ -152,4 +154,40 @@
 
     @Override
     public void setNotificationFaded(boolean faded) {}
+
+    protected static class FadeOutAndDownWithTitleTransformation extends
+            ViewTransformationHelper.CustomTransformation {
+
+        private final View mView;
+
+        public FadeOutAndDownWithTitleTransformation(View view) {
+            mView = view;
+        }
+
+        @Override
+        public boolean transformTo(TransformState ownState, TransformableView notification,
+                float transformationAmount) {
+            // We want to transform to the same y location as the title
+            TransformState otherState = notification.getCurrentState(TRANSFORMING_VIEW_TITLE);
+            CrossFadeHelper.fadeOut(mView, transformationAmount);
+            if (otherState != null) {
+                ownState.transformViewVerticalTo(otherState, transformationAmount);
+                otherState.recycle();
+            }
+            return true;
+        }
+
+        @Override
+        public boolean transformFrom(TransformState ownState,
+                TransformableView notification, float transformationAmount) {
+            // We want to transform from the same y location as the title
+            TransformState otherState = notification.getCurrentState(TRANSFORMING_VIEW_TITLE);
+            CrossFadeHelper.fadeIn(mView, transformationAmount, true /* remap */);
+            if (otherState != null) {
+                ownState.transformViewVerticalFrom(otherState, transformationAmount);
+                otherState.recycle();
+            }
+            return true;
+        }
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotifBindPipeline.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotifBindPipeline.java
index f693ebb..ea564dd 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotifBindPipeline.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotifBindPipeline.java
@@ -112,7 +112,8 @@
     public void manageRow(
             @NonNull NotificationEntry entry,
             @NonNull ExpandableNotificationRow row) {
-        mLogger.logManagedRow(entry.getKey());
+        mLogger.logManagedRow(entry);
+        mLogger.logManagedRow(entry);
 
         final BindEntry bindEntry = getBindEntry(entry);
         if (bindEntry == null) {
@@ -154,12 +155,12 @@
      * the real work once rather than repeatedly start and cancel it.
      */
     private void requestPipelineRun(NotificationEntry entry) {
-        mLogger.logRequestPipelineRun(entry.getKey());
+        mLogger.logRequestPipelineRun(entry);
 
         final BindEntry bindEntry = getBindEntry(entry);
         if (bindEntry.row == null) {
             // Row is not managed yet but may be soon. Stop for now.
-            mLogger.logRequestPipelineRowNotSet(entry.getKey());
+            mLogger.logRequestPipelineRowNotSet(entry);
             return;
         }
 
@@ -177,7 +178,7 @@
      * callbacks when the run finishes. If a run is already in progress, it is restarted.
      */
     private void startPipeline(NotificationEntry entry) {
-        mLogger.logStartPipeline(entry.getKey());
+        mLogger.logStartPipeline(entry);
 
         if (mStage == null) {
             throw new IllegalStateException("No stage was ever set on the pipeline");
@@ -193,7 +194,7 @@
         final BindEntry bindEntry = getBindEntry(entry);
         final Set<BindCallback> callbacks = bindEntry.callbacks;
 
-        mLogger.logFinishedPipeline(entry.getKey(), callbacks.size());
+        mLogger.logFinishedPipeline(entry, callbacks.size());
 
         bindEntry.invalidated = false;
         // Move all callbacks to separate list as callbacks may themselves add/remove callbacks.
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotifBindPipelineLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotifBindPipelineLogger.kt
index ec406f0..ab91926 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotifBindPipelineLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotifBindPipelineLogger.kt
@@ -19,6 +19,8 @@
 import com.android.systemui.log.LogBuffer
 import com.android.systemui.log.LogLevel.INFO
 import com.android.systemui.log.dagger.NotificationLog
+import com.android.systemui.statusbar.notification.collection.NotificationEntry
+import com.android.systemui.statusbar.notification.logKey
 import javax.inject.Inject
 
 class NotifBindPipelineLogger @Inject constructor(
@@ -32,41 +34,41 @@
         })
     }
 
-    fun logManagedRow(notifKey: String) {
+    fun logManagedRow(entry: NotificationEntry) {
         buffer.log(TAG, INFO, {
-            str1 = notifKey
+            str1 = entry.logKey
         }, {
             "Row set for notif: $str1"
         })
     }
 
-    fun logRequestPipelineRun(notifKey: String) {
+    fun logRequestPipelineRun(entry: NotificationEntry) {
         buffer.log(TAG, INFO, {
-            str1 = notifKey
+            str1 = entry.logKey
         }, {
             "Request pipeline run for notif: $str1"
         })
     }
 
-    fun logRequestPipelineRowNotSet(notifKey: String) {
+    fun logRequestPipelineRowNotSet(entry: NotificationEntry) {
         buffer.log(TAG, INFO, {
-            str1 = notifKey
+            str1 = entry.logKey
         }, {
             "Row is not set so pipeline will not run. notif = $str1"
         })
     }
 
-    fun logStartPipeline(notifKey: String) {
+    fun logStartPipeline(entry: NotificationEntry) {
         buffer.log(TAG, INFO, {
-            str1 = notifKey
+            str1 = entry.logKey
         }, {
             "Start pipeline for notif: $str1"
         })
     }
 
-    fun logFinishedPipeline(notifKey: String, numCallbacks: Int) {
+    fun logFinishedPipeline(entry: NotificationEntry, numCallbacks: Int) {
         buffer.log(TAG, INFO, {
-            str1 = notifKey
+            str1 = entry.logKey
             int1 = numCallbacks
         }, {
             "Finished pipeline for notif $str1 with $int1 callbacks"
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java
index 134f24e..7120fe5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfo.java
@@ -68,10 +68,10 @@
 import com.android.systemui.dagger.qualifiers.Background;
 import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.people.widget.PeopleSpaceWidgetManager;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.statusbar.notification.NotificationChannelHelper;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
-import com.android.systemui.statusbar.phone.ShadeController;
 import com.android.systemui.wmshell.BubblesManager;
 
 import java.lang.annotation.Retention;
@@ -266,9 +266,14 @@
         snooze.setOnClickListener(mOnSnoozeClick);
         */
 
-        if (mAppBubble == BUBBLE_PREFERENCE_ALL) {
-            ((TextView) findViewById(R.id.default_summary)).setText(getResources().getString(
+        TextView defaultSummaryTextView = findViewById(R.id.default_summary);
+        if (mAppBubble == BUBBLE_PREFERENCE_ALL
+                && BubblesManager.areBubblesEnabled(mContext, mSbn.getUser())) {
+            defaultSummaryTextView.setText(getResources().getString(
                     R.string.notification_channel_summary_default_with_bubbles, mAppName));
+        } else {
+            defaultSummaryTextView.setText(getResources().getString(
+                    R.string.notification_channel_summary_default));
         }
 
         findViewById(R.id.priority).setOnClickListener(mOnFavoriteClick);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java
index 8a7155a..c4ff259 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationGutsManager.java
@@ -21,7 +21,6 @@
 
 import android.app.INotificationManager;
 import android.app.NotificationChannel;
-import android.appwidget.AppWidgetManager;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.LauncherApps;
@@ -55,6 +54,7 @@
 import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.settings.UserContextProvider;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.statusbar.NotificationLifetimeExtender;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
 import com.android.systemui.statusbar.NotificationPresenter;
@@ -62,16 +62,13 @@
 import com.android.systemui.statusbar.StatusBarStateControllerImpl;
 import com.android.systemui.statusbar.notification.AssistantFeedbackController;
 import com.android.systemui.statusbar.notification.NotificationActivityStarter;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
 import com.android.systemui.statusbar.notification.collection.render.NotifGutsViewListener;
 import com.android.systemui.statusbar.notification.collection.render.NotifGutsViewManager;
 import com.android.systemui.statusbar.notification.dagger.NotificationsModule;
-import com.android.systemui.statusbar.notification.row.NotificationInfo.CheckSaveListener;
 import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
 import com.android.systemui.statusbar.phone.CentralSurfaces;
-import com.android.systemui.statusbar.phone.ShadeController;
 import com.android.systemui.statusbar.policy.DeviceProvisionedController;
 import com.android.systemui.wmshell.BubblesManager;
 
@@ -114,7 +111,6 @@
     private NotificationPresenter mPresenter;
     private NotificationActivityStarter mNotificationActivityStarter;
     private NotificationListContainer mListContainer;
-    private CheckSaveListener mCheckSaveListener;
     private OnSettingsClickListener mOnSettingsClickListener;
     @VisibleForTesting
     protected String mKeyToRemoveOnGutsClosed;
@@ -131,7 +127,6 @@
     private final UserContextProvider mContextTracker;
     private final UiEventLogger mUiEventLogger;
     private final ShadeController mShadeController;
-    private final AppWidgetManager mAppWidgetManager;
     private NotifGutsViewListener mGutsListener;
 
     /**
@@ -144,7 +139,6 @@
             AccessibilityManager accessibilityManager,
             HighPriorityProvider highPriorityProvider,
             INotificationManager notificationManager,
-            NotificationEntryManager notificationEntryManager,
             PeopleSpaceWidgetManager peopleSpaceWidgetManager,
             LauncherApps launcherApps,
             ShortcutManager shortcutManager,
@@ -173,17 +167,15 @@
         mUiEventLogger = uiEventLogger;
         mOnUserInteractionCallback = onUserInteractionCallback;
         mShadeController = shadeController;
-        mAppWidgetManager = AppWidgetManager.getInstance(context);
 
         dumpManager.registerDumpable(this);
     }
 
     public void setUpWithPresenter(NotificationPresenter presenter,
             NotificationListContainer listContainer,
-            CheckSaveListener checkSave, OnSettingsClickListener onSettingsClick) {
+            OnSettingsClickListener onSettingsClick) {
         mPresenter = presenter;
         mListContainer = listContainer;
-        mCheckSaveListener = checkSave;
         mOnSettingsClickListener = onSettingsClick;
     }
 
@@ -218,14 +210,11 @@
     }
 
     private void startAppDetailsSettingsActivity(String packageName, final int appUid,
-            final NotificationChannel channel, ExpandableNotificationRow row) {
+            ExpandableNotificationRow row) {
         final Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
         intent.setData(Uri.fromParts("package", packageName, null));
         intent.putExtra(Settings.EXTRA_APP_PACKAGE, packageName);
         intent.putExtra(Settings.EXTRA_APP_UID, appUid);
-        if (channel != null) {
-            intent.putExtra(EXTRA_FRAGMENT_ARG_KEY, channel.getId());
-        }
         mNotificationActivityStarter.startNotificationGutsIntent(intent, appUid, row);
     }
 
@@ -233,7 +222,7 @@
             ExpandableNotificationRow row) {
         if (ops.contains(OP_SYSTEM_ALERT_WINDOW)) {
             if (ops.contains(OP_CAMERA) || ops.contains(OP_RECORD_AUDIO)) {
-                startAppDetailsSettingsActivity(pkg, uid, null, row);
+                startAppDetailsSettingsActivity(pkg, uid, row);
             } else {
                 Intent intent = new Intent(Settings.ACTION_MANAGE_APP_OVERLAY_PERMISSION);
                 intent.setData(Uri.fromParts("package", pkg, null));
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationSnooze.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationSnooze.java
index 7269f55..512b049 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationSnooze.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationSnooze.java
@@ -16,6 +16,8 @@
 
 package com.android.systemui.statusbar.notification.row;
 
+import static com.android.systemui.util.PluralMessageFormaterKt.icuMessageFormat;
+
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
 import android.animation.AnimatorSet;
@@ -243,11 +245,11 @@
     private SnoozeOption createOption(int minutes, int accessibilityActionId) {
         Resources res = getResources();
         boolean showInHours = minutes >= 60;
-        int pluralResId = showInHours
-                ? R.plurals.snoozeHourOptions
-                : R.plurals.snoozeMinuteOptions;
+        int stringResId = showInHours
+                ? R.string.snoozeHourOptions
+                : R.string.snoozeMinuteOptions;
         int count = showInHours ? (minutes / 60) : minutes;
-        String description = res.getQuantityString(pluralResId, count, count);
+        String description = icuMessageFormat(res, stringResId, count);
         String resultText = String.format(res.getString(R.string.snoozed_for_time), description);
         AccessibilityAction action = new AccessibilityAction(accessibilityActionId, description);
         final int index = resultText.indexOf(description);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowContentBindStage.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowContentBindStage.java
index 3616f8f..81cf146 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowContentBindStage.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowContentBindStage.java
@@ -57,7 +57,7 @@
             @NonNull StageCallback callback) {
         RowContentBindParams params = getStageParams(entry);
 
-        mLogger.logStageParams(entry.getKey(), params.toString());
+        mLogger.logStageParams(entry, params);
 
         // Resolve content to bind/unbind.
         @InflationFlag int inflationFlags = params.getContentViews();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowContentBindStageLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowContentBindStageLogger.kt
index 29cce33..f9923b2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowContentBindStageLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/RowContentBindStageLogger.kt
@@ -19,17 +19,19 @@
 import com.android.systemui.log.LogBuffer
 import com.android.systemui.log.LogLevel.INFO
 import com.android.systemui.log.dagger.NotificationLog
+import com.android.systemui.statusbar.notification.collection.NotificationEntry
+import com.android.systemui.statusbar.notification.logKey
 import javax.inject.Inject
 
 class RowContentBindStageLogger @Inject constructor(
     @NotificationLog private val buffer: LogBuffer
 ) {
-    fun logStageParams(notifKey: String, stageParams: String) {
+    fun logStageParams(entry: NotificationEntry, stageParams: RowContentBindParams) {
         buffer.log(TAG, INFO, {
-            str1 = notifKey
-            str2 = stageParams
+            str1 = entry.logKey
+            str2 = stageParams.toString()
         }, {
-            "Invalidated notif $str1 with params: \n$str2"
+            "Invalidated notif $str1 with params: $str2"
         })
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/StackScrollerDecorView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/StackScrollerDecorView.java
index 7414bdc..5aaf63f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/StackScrollerDecorView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/StackScrollerDecorView.java
@@ -74,11 +74,6 @@
         mSecondaryView = findSecondaryView();
         setVisible(false /* nowVisible */, false /* animate */);
         setSecondaryVisible(false /* nowVisible */, false /* animate */);
-    }
-
-    @Override
-    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
-        super.onLayout(changed, left, top, right, bottom);
         setOutlineProvider(null);
     }
 
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 e2ed1d8..427004e7 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
@@ -17,8 +17,11 @@
 package com.android.systemui.statusbar.notification.stack;
 
 import static com.android.internal.jank.InteractionJankMonitor.CUJ_NOTIFICATION_SHADE_SCROLL_FLING;
+import static com.android.internal.jank.InteractionJankMonitor.CUJ_SHADE_CLEAR_ALL;
 import static com.android.systemui.statusbar.notification.stack.NotificationPriorityBucketKt.BUCKET_SILENT;
 import static com.android.systemui.statusbar.notification.stack.StackStateAnimator.ANIMATION_DURATION_SWIPE;
+import static com.android.systemui.util.DumpUtilsKt.println;
+import static com.android.systemui.util.DumpUtilsKt.visibilityString;
 
 import static java.lang.annotation.RetentionPolicy.SOURCE;
 
@@ -81,6 +84,7 @@
 import com.android.systemui.flags.FeatureFlags;
 import com.android.systemui.flags.Flags;
 import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.EmptyShadeView;
 import com.android.systemui.statusbar.NotificationShelf;
@@ -105,7 +109,6 @@
 import com.android.systemui.statusbar.phone.HeadsUpAppearanceController;
 import com.android.systemui.statusbar.phone.HeadsUpTouchHelper;
 import com.android.systemui.statusbar.phone.ScreenOffAnimationController;
-import com.android.systemui.statusbar.phone.ShadeController;
 import com.android.systemui.statusbar.policy.HeadsUpUtil;
 import com.android.systemui.statusbar.policy.ScrollAdapter;
 import com.android.systemui.util.Assert;
@@ -746,19 +749,20 @@
         }
     }
 
-    private void logHunSkippedForUnexpectedState(String key, boolean expected, boolean actual) {
+    private void logHunSkippedForUnexpectedState(ExpandableNotificationRow enr,
+            boolean expected, boolean actual) {
         if (mLogger == null) return;
-        mLogger.hunSkippedForUnexpectedState(key, expected, actual);
+        mLogger.hunSkippedForUnexpectedState(enr.getEntry(), expected, actual);
     }
 
-    private void logHunAnimationSkipped(String key, String reason) {
+    private void logHunAnimationSkipped(ExpandableNotificationRow enr, String reason) {
         if (mLogger == null) return;
-        mLogger.hunAnimationSkipped(key, reason);
+        mLogger.hunAnimationSkipped(enr.getEntry(), reason);
     }
 
-    private void logHunAnimationEventAdded(String key, int type) {
+    private void logHunAnimationEventAdded(ExpandableNotificationRow enr, int type) {
         if (mLogger == null) return;
-        mLogger.hunAnimationEventAdded(key, type);
+        mLogger.hunAnimationEventAdded(enr.getEntry(), type);
     }
 
     private void onDrawDebug(Canvas canvas) {
@@ -1386,12 +1390,7 @@
      */
     @ShadeViewRefactor(RefactorComponent.COORDINATOR)
     public void setExpandedHeight(float height) {
-        final float shadeBottom = getHeight() - getEmptyBottomMargin();
         final boolean skipHeightUpdate = shouldSkipHeightUpdate();
-        if (!skipHeightUpdate) {
-            final float expansionFraction = MathUtils.saturate(height / shadeBottom);
-            mAmbientState.setExpansionFraction(expansionFraction);
-        }
         updateStackPosition();
 
         if (!skipHeightUpdate) {
@@ -3177,7 +3176,7 @@
             if (isHeadsUp != row.isHeadsUp()) {
                 // For cases where we have a heads up showing and appearing again we shouldn't
                 // do the animations at all.
-                logHunSkippedForUnexpectedState(key, isHeadsUp, row.isHeadsUp());
+                logHunSkippedForUnexpectedState(row, isHeadsUp, row.isHeadsUp());
                 continue;
             }
             int type = AnimationEvent.ANIMATION_TYPE_HEADS_UP_OTHER;
@@ -3195,7 +3194,7 @@
                 if (row.isChildInGroup()) {
                     // We can otherwise get stuck in there if it was just isolated
                     row.setHeadsUpAnimatingAway(false);
-                    logHunAnimationSkipped(key, "row is child in group");
+                    logHunAnimationSkipped(row, "row is child in group");
                     continue;
                 }
             } else {
@@ -3203,7 +3202,7 @@
                 if (viewState == null) {
                     // A view state was never generated for this view, so we don't need to animate
                     // this. This may happen with notification children.
-                    logHunAnimationSkipped(key, "row has no viewState");
+                    logHunAnimationSkipped(row, "row has no viewState");
                     continue;
                 }
                 if (isHeadsUp && (mAddedHeadsUpChildren.contains(row) || pinnedAndClosed)) {
@@ -3227,7 +3226,7 @@
                         + " onBottom=" + onBottom
                         + " row=" + row.getEntry().getKey());
             }
-            logHunAnimationEventAdded(key, type);
+            logHunAnimationEventAdded(row, type);
         }
         mHeadsUpChangeAnimations.clear();
         mAddedHeadsUpChildren.clear();
@@ -4363,8 +4362,6 @@
 
     /**
      * Update colors of "dismiss" and "empty shade" views.
-     *
-     * @param lightTheme True if light theme should be used.
      */
     @ShadeViewRefactor(RefactorComponent.DECORATOR)
     void updateDecorViews() {
@@ -4558,31 +4555,12 @@
         mClearAllInProgress = clearAllInProgress;
         mAmbientState.setClearAllInProgress(clearAllInProgress);
         mController.getNoticationRoundessManager().setClearAllInProgress(clearAllInProgress);
-        handleClearAllClipping();
     }
 
     boolean getClearAllInProgress() {
         return mClearAllInProgress;
     }
 
-    @ShadeViewRefactor(RefactorComponent.ADAPTER)
-    private void handleClearAllClipping() {
-        final int count = getChildCount();
-        boolean previousChildWillBeDismissed = false;
-        for (int i = 0; i < count; i++) {
-            ExpandableView child = (ExpandableView) getChildAt(i);
-            if (child.getVisibility() == GONE) {
-                continue;
-            }
-            if (mClearAllInProgress && previousChildWillBeDismissed) {
-                child.setMinClipTopAmount(child.getClipTopAmount());
-            } else {
-                child.setMinClipTopAmount(0);
-            }
-            previousChildWillBeDismissed = canChildBeCleared(child);
-        }
-    }
-
     @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
     public boolean isFooterViewNotGone() {
         return mFooterView != null
@@ -4799,8 +4777,7 @@
                 if (SPEW) {
                     Log.v(TAG, "generateHeadsUpAnimation: previous hun appear animation cancelled");
                 }
-                logHunAnimationSkipped(row.getEntry().getKey(),
-                        "previous hun appear animation cancelled");
+                logHunAnimationSkipped(row, "previous hun appear animation cancelled");
                 return;
             }
             mHeadsUpChangeAnimations.add(new Pair<>(row, isHeadsUp));
@@ -5079,30 +5056,31 @@
     @ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
     public void dump(PrintWriter pwOriginal, String[] args) {
         IndentingPrintWriter pw = DumpUtilsKt.asIndenting(pwOriginal);
-        StringBuilder sb = new StringBuilder("[")
-                .append(this.getClass().getSimpleName()).append(":")
-                .append(" pulsing=").append(mPulsing ? "T" : "f")
-                .append(" expanded=").append(mIsExpanded ? "T" : "f")
-                .append(" headsUpPinned=").append(mInHeadsUpPinnedMode ? "T" : "f")
-                .append(" qsClipping=").append(mShouldUseRoundedRectClipping ? "T" : "f")
-                .append(" qsClipDismiss=").append(mDismissUsingRowTranslationX ? "T" : "f")
-                .append(" visibility=").append(DumpUtilsKt.visibilityString(getVisibility()))
-                .append(" alpha=").append(getAlpha())
-                .append(" scrollY=").append(mAmbientState.getScrollY())
-                .append(" maxTopPadding=").append(mMaxTopPadding)
-                .append(" showShelfOnly=").append(mShouldShowShelfOnly ? "T" : "f")
-                .append(" qsExpandFraction=").append(mQsExpansionFraction)
-                .append(" isCurrentUserSetup=").append(mIsCurrentUserSetup)
-                .append(" hideAmount=").append(mAmbientState.getHideAmount())
-                .append(" ambientStateSwipingUp=").append(mAmbientState.isSwipingUp())
-                .append(" maxDisplayedNotifications=").append(mMaxDisplayedNotifications)
-                .append(" intrinsicContentHeight=").append(mIntrinsicContentHeight)
-                .append(" contentHeight=").append(mContentHeight)
-                .append(" intrinsicPadding=").append(mIntrinsicPadding)
-                .append(" topPadding=").append(mTopPadding)
-                .append(" bottomPadding=").append(mBottomPadding)
-                .append("]");
-        pw.println(sb.toString());
+        pw.println("Internal state:");
+        DumpUtilsKt.withIncreasedIndent(pw, () -> {
+            println(pw, "pulsing", mPulsing);
+            println(pw, "expanded", mIsExpanded);
+            println(pw, "headsUpPinned", mInHeadsUpPinnedMode);
+            println(pw, "qsClipping", mShouldUseRoundedRectClipping);
+            println(pw, "qsClipDismiss", mDismissUsingRowTranslationX);
+            println(pw, "visibility", visibilityString(getVisibility()));
+            println(pw, "alpha", getAlpha());
+            println(pw, "scrollY", mAmbientState.getScrollY());
+            println(pw, "maxTopPadding", mMaxTopPadding);
+            println(pw, "showShelfOnly", mShouldShowShelfOnly);
+            println(pw, "qsExpandFraction", mQsExpansionFraction);
+            println(pw, "isCurrentUserSetup", mIsCurrentUserSetup);
+            println(pw, "hideAmount", mAmbientState.getHideAmount());
+            println(pw, "ambientStateSwipingUp", mAmbientState.isSwipingUp());
+            println(pw, "maxDisplayedNotifications", mMaxDisplayedNotifications);
+            println(pw, "intrinsicContentHeight", mIntrinsicContentHeight);
+            println(pw, "contentHeight", mContentHeight);
+            println(pw, "intrinsicPadding", mIntrinsicPadding);
+            println(pw, "topPadding", mTopPadding);
+            println(pw, "bottomPadding", mBottomPadding);
+        });
+        pw.println();
+        pw.println("Contents:");
         DumpUtilsKt.withIncreasedIndent(pw, () -> {
             int childCount = getChildCount();
             pw.println("Number of children: " + childCount);
@@ -5269,6 +5247,7 @@
         setClearAllInProgress(true);
         mShadeNeedsToClose = closeShade;
 
+        InteractionJankMonitor.getInstance().begin(this, CUJ_SHADE_CLEAR_ALL);
         // Decrease the delay for every row we animate to give the sense of
         // accelerating the swipes
         final int rowDelayDecrement = 5;
@@ -6181,6 +6160,7 @@
     private void onClearAllAnimationsEnd(
             List<ExpandableNotificationRow> viewsToRemove,
             @SelectedRows int selectedRows) {
+        InteractionJankMonitor.getInstance().end(CUJ_SHADE_CLEAR_ALL);
         if (mClearAllAnimationListener != null) {
             mClearAllAnimationListener.onAnimationEnd(viewsToRemove, selectedRows);
         }
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 e5f8424..cc539b0 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
@@ -28,7 +28,6 @@
 import static com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout.ROWS_GENTLE;
 import static com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout.ROWS_HIGH_PRIORITY;
 import static com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout.SelectedRows;
-import static com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout.canChildBeCleared;
 import static com.android.systemui.statusbar.phone.NotificationIconAreaController.HIGH_PRIORITY;
 
 import android.content.res.Configuration;
@@ -38,12 +37,10 @@
 import android.os.Trace;
 import android.os.UserHandle;
 import android.provider.Settings;
-import android.service.notification.NotificationListenerService;
 import android.service.notification.StatusBarNotification;
 import android.util.Log;
 import android.util.Pair;
 import android.view.Display;
-import android.view.LayoutInflater;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
@@ -53,27 +50,27 @@
 import androidx.annotation.Nullable;
 
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.colorextraction.ColorExtractor;
 import com.android.internal.jank.InteractionJankMonitor;
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.UiEvent;
 import com.android.internal.logging.UiEventLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.internal.statusbar.IStatusBarService;
 import com.android.systemui.ExpandHelper;
 import com.android.systemui.Gefingerpoken;
 import com.android.systemui.R;
 import com.android.systemui.SwipeHelper;
 import com.android.systemui.classifier.Classifier;
 import com.android.systemui.classifier.FalsingCollector;
-import com.android.systemui.colorextraction.SysuiColorExtractor;
 import com.android.systemui.dagger.qualifiers.Main;
+import com.android.systemui.dump.DumpManager;
 import com.android.systemui.media.KeyguardMediaController;
 import com.android.systemui.plugins.FalsingManager;
 import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
 import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin.OnMenuEventListener;
 import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.shade.ShadeController;
+import com.android.systemui.shade.transition.ShadeTransitionController;
 import com.android.systemui.statusbar.LockscreenShadeTransitionController;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager.UserChangedListener;
@@ -84,13 +81,13 @@
 import com.android.systemui.statusbar.SysuiStatusBarStateController;
 import com.android.systemui.statusbar.notification.DynamicPrivacyController;
 import com.android.systemui.statusbar.notification.LaunchAnimationParameters;
-import com.android.systemui.statusbar.notification.NotifPipelineFlags;
 import com.android.systemui.statusbar.notification.NotificationActivityStarter;
-import com.android.systemui.statusbar.notification.NotificationEntryListener;
 import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.collection.NotifCollection;
 import com.android.systemui.statusbar.notification.collection.NotifPipeline;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.collection.PipelineDumpable;
+import com.android.systemui.statusbar.notification.collection.PipelineDumper;
 import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy;
 import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy.OnGroupChangeListener;
 import com.android.systemui.statusbar.notification.collection.legacy.VisualStabilityManager;
@@ -115,9 +112,7 @@
 import com.android.systemui.statusbar.phone.HeadsUpTouchHelper;
 import com.android.systemui.statusbar.phone.KeyguardBypassController;
 import com.android.systemui.statusbar.phone.ScrimController;
-import com.android.systemui.statusbar.phone.ShadeController;
 import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent;
-import com.android.systemui.statusbar.phone.shade.transition.ShadeTransitionController;
 import com.android.systemui.statusbar.policy.ConfigurationController;
 import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
 import com.android.systemui.statusbar.policy.DeviceProvisionedController;
@@ -156,18 +151,16 @@
     private final ConfigurationController mConfigurationController;
     private final ZenModeController mZenModeController;
     private final MetricsLogger mMetricsLogger;
+    private final DumpManager mDumpManager;
     private final FalsingCollector mFalsingCollector;
     private final FalsingManager mFalsingManager;
     private final Resources mResources;
     private final NotificationSwipeHelper.Builder mNotificationSwipeHelperBuilder;
     private final ScrimController mScrimController;
-    private final NotifPipelineFlags mNotifPipelineFlags;
     private final NotifPipeline mNotifPipeline;
     private final NotifCollection mNotifCollection;
     private final NotificationEntryManager mNotificationEntryManager;
-    private final IStatusBarService mIStatusBarService;
     private final UiEventLogger mUiEventLogger;
-    private final LayoutInflater mLayoutInflater;
     private final NotificationRemoteInputManager mRemoteInputManager;
     private final VisualStabilityManager mVisualStabilityManager;
     private final ShadeController mShadeController;
@@ -204,8 +197,6 @@
     @Nullable
     private NotificationActivityStarter mNotificationActivityStarter;
 
-    private ColorExtractor.OnColorsChangedListener mOnColorsChangedListener;
-
     @VisibleForTesting
     final View.OnAttachStateChangeListener mOnAttachStateChangeListener =
             new View.OnAttachStateChangeListener() {
@@ -254,10 +245,7 @@
             mView.setAnimateBottomOnLayout(true);
         }
         // Let's update the footer once the notifications have been updated (in the next frame)
-        mView.post(() -> {
-            updateFooter();
-            updateSectionBoundaries("dynamic privacy changed");
-        });
+        mView.post(this::updateFooter);
     };
 
     @VisibleForTesting
@@ -639,9 +627,9 @@
             KeyguardMediaController keyguardMediaController,
             KeyguardBypassController keyguardBypassController,
             ZenModeController zenModeController,
-            SysuiColorExtractor colorExtractor,
             NotificationLockscreenUserManager lockscreenUserManager,
             MetricsLogger metricsLogger,
+            DumpManager dumpManager,
             FalsingCollector falsingCollector,
             FalsingManager falsingManager,
             @Main Resources resources,
@@ -651,15 +639,12 @@
             NotificationGroupManagerLegacy legacyGroupManager,
             GroupExpansionManager groupManager,
             @SilentHeader SectionHeaderController silentHeaderController,
-            NotifPipelineFlags notifPipelineFlags,
             NotifPipeline notifPipeline,
             NotifCollection notifCollection,
             NotificationEntryManager notificationEntryManager,
             LockscreenShadeTransitionController lockscreenShadeTransitionController,
             ShadeTransitionController shadeTransitionController,
-            IStatusBarService iStatusBarService,
             UiEventLogger uiEventLogger,
-            LayoutInflater layoutInflater,
             NotificationRemoteInputManager remoteInputManager,
             VisualStabilityManager visualStabilityManager,
             ShadeController shadeController,
@@ -684,6 +669,7 @@
         mZenModeController = zenModeController;
         mLockscreenUserManager = lockscreenUserManager;
         mMetricsLogger = metricsLogger;
+        mDumpManager = dumpManager;
         mLockscreenShadeTransitionController = lockscreenShadeTransitionController;
         mShadeTransitionController = shadeTransitionController;
         mFalsingCollector = falsingCollector;
@@ -701,14 +687,11 @@
                 mCentralSurfaces.requestNotificationUpdate("onGroupsChanged");
             }
         });
-        mNotifPipelineFlags = notifPipelineFlags;
         mSilentHeaderController = silentHeaderController;
         mNotifPipeline = notifPipeline;
         mNotifCollection = notifCollection;
         mNotificationEntryManager = notificationEntryManager;
-        mIStatusBarService = iStatusBarService;
         mUiEventLogger = uiEventLogger;
-        mLayoutInflater = layoutInflater;
         mRemoteInputManager = remoteInputManager;
         mVisualStabilityManager = visualStabilityManager;
         mShadeController = shadeController;
@@ -735,6 +718,7 @@
             }
         });
         mView.setShadeController(mShadeController);
+        mDumpManager.registerDumpable(mView);
 
         mKeyguardBypassController.registerOnBypassStateChangedListener(
                 isEnabled -> mNotificationRoundnessManager.setShouldRoundPulsingViews(!isEnabled));
@@ -747,21 +731,12 @@
                 .setOnMenuEventListener(mMenuEventListener)
                 .build();
 
-        if (mNotifPipelineFlags.isNewPipelineEnabled()) {
-            mNotifPipeline.addCollectionListener(new NotifCollectionListener() {
-                @Override
-                public void onEntryUpdated(NotificationEntry entry) {
-                    mView.onEntryUpdated(entry);
-                }
-            });
-        } else {
-            mNotificationEntryManager.addNotificationEntryListener(new NotificationEntryListener() {
-                @Override
-                public void onPreEntryUpdated(NotificationEntry entry) {
-                    mView.onEntryUpdated(entry);
-                }
-            });
-        }
+        mNotifPipeline.addCollectionListener(new NotifCollectionListener() {
+            @Override
+            public void onEntryUpdated(NotificationEntry entry) {
+                mView.onEntryUpdated(entry);
+            }
+        });
 
         mView.initView(mView.getContext(), mSwipeHelper, mNotificationStackSizeCalculator);
         mView.setKeyguardBypassEnabled(mKeyguardBypassController.getBypassEnabled());
@@ -1233,10 +1208,6 @@
         Trace.endSection();
     }
 
-    public boolean areNotificationsHiddenInShade() {
-        return mZenModeController.areNotificationsHiddenInShade();
-    }
-
     public boolean isShowingEmptyShadeView() {
         return mShowEmptyShadeView;
     }
@@ -1341,15 +1312,6 @@
         };
     }
 
-    public void updateSectionBoundaries(String reason) {
-        if (mNotifPipelineFlags.isNewPipelineEnabled()) {
-            return;
-        }
-        Trace.beginSection("NSSLC.updateSectionBoundaries");
-        mView.updateSectionBoundaries(reason);
-        Trace.endSection();
-    }
-
     public void updateFooter() {
         Trace.beginSection("NSSLC.updateFooter");
         mView.updateFooter();
@@ -1465,39 +1427,18 @@
 
     private void onAnimationEnd(List<ExpandableNotificationRow> viewsToRemove,
             @SelectedRows int selectedRows) {
-        if (mNotifPipelineFlags.isNewPipelineEnabled()) {
-            if (selectedRows == ROWS_ALL) {
-                mNotifCollection.dismissAllNotifications(
-                        mLockscreenUserManager.getCurrentUserId());
-            } else {
-                final List<Pair<NotificationEntry, DismissedByUserStats>>
-                        entriesWithRowsDismissedFromShade = new ArrayList<>();
-                for (ExpandableNotificationRow row : viewsToRemove) {
-                    final NotificationEntry entry = row.getEntry();
-                    entriesWithRowsDismissedFromShade.add(
-                            new Pair<>(entry, getDismissedByUserStats(entry)));
-                }
-                mNotifCollection.dismissNotifications(entriesWithRowsDismissedFromShade);
-            }
+        if (selectedRows == ROWS_ALL) {
+            mNotifCollection.dismissAllNotifications(
+                    mLockscreenUserManager.getCurrentUserId());
         } else {
-            for (ExpandableNotificationRow rowToRemove : viewsToRemove) {
-                if (canChildBeCleared(rowToRemove)) {
-                    mNotificationEntryManager.performRemoveNotification(
-                            rowToRemove.getEntry().getSbn(),
-                            getDismissedByUserStats(rowToRemove.getEntry()),
-                            NotificationListenerService.REASON_CANCEL_ALL);
-                } else {
-                    rowToRemove.resetTranslation();
-                }
+            final List<Pair<NotificationEntry, DismissedByUserStats>>
+                    entriesWithRowsDismissedFromShade = new ArrayList<>();
+            for (ExpandableNotificationRow row : viewsToRemove) {
+                final NotificationEntry entry = row.getEntry();
+                entriesWithRowsDismissedFromShade.add(
+                        new Pair<>(entry, getDismissedByUserStats(entry)));
             }
-            if (selectedRows == ROWS_ALL) {
-                try {
-                    // TODO(b/169585328): Do not clear media player notifications
-                    mIStatusBarService.onClearAllNotifications(
-                            mLockscreenUserManager.getCurrentUserId());
-                } catch (Exception ignored) {
-                }
-            }
+            mNotifCollection.dismissNotifications(entriesWithRowsDismissedFromShade);
         }
     }
 
@@ -1621,7 +1562,8 @@
         }
     }
 
-    private class NotificationListContainerImpl implements NotificationListContainer {
+    private class NotificationListContainerImpl implements NotificationListContainer,
+            PipelineDumpable {
 
         @Override
         public void setChildTransferInProgress(boolean childTransferInProgress) {
@@ -1767,6 +1709,12 @@
         public void setWillExpand(boolean willExpand) {
             mView.setWillExpand(willExpand);
         }
+
+        @Override
+        public void dumpPipeline(@NonNull PipelineDumper d) {
+            d.dump("NotificationStackScrollLayoutController.this",
+                    NotificationStackScrollLayoutController.this);
+        }
     }
 
     class TouchHandler implements Gefingerpoken {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLogger.kt
index 04bf621..5f79c0e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLogger.kt
@@ -3,21 +3,27 @@
 import com.android.systemui.log.LogBuffer
 import com.android.systemui.log.LogLevel.INFO
 import com.android.systemui.log.dagger.NotificationHeadsUpLog
-import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout.AnimationEvent.*
+import com.android.systemui.statusbar.notification.collection.NotificationEntry
+import com.android.systemui.statusbar.notification.logKey
+import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_ADD
+import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_HEADS_UP_APPEAR
+import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_HEADS_UP_DISAPPEAR
+import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_HEADS_UP_DISAPPEAR_CLICK
+import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_HEADS_UP_OTHER
 import javax.inject.Inject
 
 class NotificationStackScrollLogger @Inject constructor(
     @NotificationHeadsUpLog private val buffer: LogBuffer
 ) {
-    fun hunAnimationSkipped(key: String, reason: String) {
+    fun hunAnimationSkipped(entry: NotificationEntry, reason: String) {
         buffer.log(TAG, INFO, {
-            str1 = key
+            str1 = entry.logKey
             str2 = reason
         }, {
             "heads up animation skipped: key: $str1 reason: $str2"
         })
     }
-    fun hunAnimationEventAdded(key: String, type: Int) {
+    fun hunAnimationEventAdded(entry: NotificationEntry, type: Int) {
         val reason: String
         reason = if (type == ANIMATION_TYPE_HEADS_UP_DISAPPEAR) {
             "HEADS_UP_DISAPPEAR"
@@ -33,16 +39,16 @@
             type.toString()
         }
         buffer.log(TAG, INFO, {
-            str1 = key
+            str1 = entry.logKey
             str2 = reason
         }, {
             "heads up animation added: $str1 with type $str2"
         })
     }
 
-    fun hunSkippedForUnexpectedState(key: String, expected: Boolean, actual: Boolean) {
+    fun hunSkippedForUnexpectedState(entry: NotificationEntry, expected: Boolean, actual: Boolean) {
         buffer.log(TAG, INFO, {
-            str1 = key
+            str1 = entry.logKey
             bool1 = expected
             bool2 = actual
         }, {
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 4013254..6d513d0da 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
@@ -24,8 +24,7 @@
 import android.view.View;
 import android.view.ViewGroup;
 
-import androidx.annotation.VisibleForTesting;
-
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.policy.SystemBarUtils;
 import com.android.keyguard.BouncerPanelExpansionCalculator;
 import com.android.systemui.R;
@@ -65,6 +64,9 @@
     private int mPinnedZTranslationExtra;
     private float mNotificationScrimPadding;
     private int mMarginBottom;
+    private float mQuickQsOffsetHeight;
+    private float mSmallCornerRadius;
+    private float mLargeCornerRadius;
 
     public StackScrollAlgorithm(
             Context context,
@@ -74,10 +76,10 @@
     }
 
     public void initView(Context context) {
-        initConstants(context);
+        updateResources(context);
     }
 
-    private void initConstants(Context context) {
+    private void updateResources(Context context) {
         Resources res = context.getResources();
         mPaddingBetweenElements = res.getDimensionPixelSize(
                 R.dimen.notification_divider_height);
@@ -93,6 +95,9 @@
                 R.dimen.notification_section_divider_height_lockscreen);
         mNotificationScrimPadding = res.getDimensionPixelSize(R.dimen.notification_side_paddings);
         mMarginBottom = res.getDimensionPixelSize(R.dimen.notification_panel_margin_bottom);
+        mQuickQsOffsetHeight = SystemBarUtils.getQuickQsOffsetHeight(context);
+        mSmallCornerRadius = res.getDimension(R.dimen.notification_corner_radius_small);
+        mLargeCornerRadius = res.getDimension(R.dimen.notification_corner_radius);
     }
 
     /**
@@ -441,6 +446,15 @@
         return false;
     }
 
+    @VisibleForTesting
+    void maybeUpdateHeadsUpIsVisible(ExpandableViewState viewState, boolean isShadeExpanded,
+            boolean mustStayOnScreen, boolean topVisible, float viewEnd, float hunMax) {
+
+        if (isShadeExpanded && mustStayOnScreen && topVisible) {
+            viewState.headsUpIsVisible = viewEnd < hunMax;
+        }
+    }
+
     // TODO(b/172289889) polish shade open from HUN
     /**
      * Populates the {@link ExpandableViewState} for a single child.
@@ -474,14 +488,6 @@
                     : ShadeInterpolation.getContentAlpha(expansion);
         }
 
-        if (ambientState.isShadeExpanded() && view.mustStayOnScreen()
-                && viewState.yTranslation >= 0) {
-            // Even if we're not scrolled away we're in view and we're also not in the
-            // shelf. We can relax the constraints and let us scroll off the top!
-            float end = viewState.yTranslation + viewState.height + ambientState.getStackY();
-            viewState.headsUpIsVisible = end < ambientState.getMaxHeadsUpTranslation();
-        }
-
         final float expansionFraction = getExpansionFractionWithoutShelf(
                 algorithmState, ambientState);
 
@@ -497,8 +503,15 @@
             algorithmState.mCurrentExpandedYPosition += gap;
         }
 
+        // Must set viewState.yTranslation _before_ use.
+        // Incoming views have yTranslation=0 by default.
         viewState.yTranslation = algorithmState.mCurrentYPosition;
 
+        maybeUpdateHeadsUpIsVisible(viewState, ambientState.isShadeExpanded(),
+                view.mustStayOnScreen(), /* topVisible */ viewState.yTranslation >= 0,
+                /* viewEnd */ viewState.yTranslation + viewState.height + ambientState.getStackY(),
+                /* hunMax */ ambientState.getMaxHeadsUpTranslation()
+        );
         if (view instanceof FooterView) {
             final boolean shadeClosed = !ambientState.isShadeExpanded();
             final boolean isShelfShowing = algorithmState.firstViewInShelf != null;
@@ -682,7 +695,8 @@
                 if (row.mustStayOnScreen() && !childState.headsUpIsVisible
                         && !row.showingPulsing()) {
                     // Ensure that the heads up is always visible even when scrolled off
-                    clampHunToTop(ambientState, row, childState);
+                    clampHunToTop(mQuickQsOffsetHeight, ambientState.getStackTranslation(),
+                            row.getCollapsedHeight(), childState);
                     if (isTopEntry && row.isAboveShelf()) {
                         // the first hun can't get off screen.
                         clampHunToMaxTranslation(ambientState, row, childState);
@@ -719,27 +733,62 @@
         }
     }
 
-    private void clampHunToTop(AmbientState ambientState, ExpandableNotificationRow row,
-            ExpandableViewState childState) {
-        float newTranslation = Math.max(ambientState.getTopPadding()
-                + ambientState.getStackTranslation(), childState.yTranslation);
-        childState.height = (int) Math.max(childState.height - (newTranslation
-                - childState.yTranslation), row.getCollapsedHeight());
-        childState.yTranslation = newTranslation;
+    /**
+     * When shade is open and we are scrolled to the bottom of notifications,
+     * clamp incoming HUN in its collapsed form, right below qs offset.
+     * Transition pinned collapsed HUN to full height when scrolling back up.
+     */
+    @VisibleForTesting
+    void clampHunToTop(float quickQsOffsetHeight, float stackTranslation, float collapsedHeight,
+            ExpandableViewState viewState) {
+
+        final float newTranslation = Math.max(quickQsOffsetHeight + stackTranslation,
+                viewState.yTranslation);
+
+        // Transition from collapsed pinned state to fully expanded state
+        // when the pinned HUN approaches its actual location (when scrolling back to top).
+        final float distToRealY = newTranslation - viewState.yTranslation;
+        viewState.height = (int) Math.max(viewState.height - distToRealY, collapsedHeight);
+        viewState.yTranslation = newTranslation;
     }
 
+    // Pin HUN to bottom of expanded QS
+    // while the rest of notifications are scrolled offscreen.
     private void clampHunToMaxTranslation(AmbientState ambientState, ExpandableNotificationRow row,
             ExpandableViewState childState) {
-        float newTranslation;
         float maxHeadsUpTranslation = ambientState.getMaxHeadsUpTranslation();
-        float maxShelfPosition = ambientState.getInnerHeight() + ambientState.getTopPadding()
+        final float maxShelfPosition = ambientState.getInnerHeight() + ambientState.getTopPadding()
                 + ambientState.getStackTranslation();
         maxHeadsUpTranslation = Math.min(maxHeadsUpTranslation, maxShelfPosition);
-        float bottomPosition = maxHeadsUpTranslation - row.getCollapsedHeight();
-        newTranslation = Math.min(childState.yTranslation, bottomPosition);
+
+        final float bottomPosition = maxHeadsUpTranslation - row.getCollapsedHeight();
+        final float newTranslation = Math.min(childState.yTranslation, bottomPosition);
         childState.height = (int) Math.min(childState.height, maxHeadsUpTranslation
                 - newTranslation);
         childState.yTranslation = newTranslation;
+
+        // Animate pinned HUN bottom corners to and from original roundness.
+        final float originalCornerRadius =
+                row.isLastInSection() ? 1f : (mSmallCornerRadius / mLargeCornerRadius);
+        final float roundness = computeCornerRoundnessForPinnedHun(mHostView.getHeight(),
+                ambientState.getStackY(), getMaxAllowedChildHeight(row), originalCornerRadius);
+        row.setBottomRoundness(roundness, /* animate= */ false);
+    }
+
+    @VisibleForTesting
+    float computeCornerRoundnessForPinnedHun(float hostViewHeight, float stackY,
+            float viewMaxHeight, float originalCornerRadius) {
+
+        // Compute y where corner roundness should be in its original unpinned state.
+        // We use view max height because the pinned collapsed HUN expands to max height
+        // when it becomes unpinned.
+        final float originalRoundnessY = hostViewHeight - viewMaxHeight;
+
+        final float distToOriginalRoundness = Math.max(0f, stackY - originalRoundnessY);
+        final float progressToPinnedRoundness = Math.min(1f,
+                distToOriginalRoundness / viewMaxHeight);
+
+        return MathUtils.lerp(originalCornerRadius, 1f, progressToPinnedRoundness);
     }
 
     protected int getMaxAllowedChildHeight(View child) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java
index 7c9df42..174bf4c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java
@@ -25,6 +25,7 @@
 import com.android.keyguard.KeyguardSliceView;
 import com.android.systemui.R;
 import com.android.systemui.animation.Interpolators;
+import com.android.systemui.shared.clocks.AnimatableClockView;
 import com.android.systemui.statusbar.NotificationShelf;
 import com.android.systemui.statusbar.StatusBarIconView;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
@@ -52,7 +53,8 @@
     public static final int ANIMATION_DURATION_CLOSE_REMOTE_INPUT = 150;
     public static final int ANIMATION_DURATION_HEADS_UP_APPEAR = 400;
     public static final int ANIMATION_DURATION_HEADS_UP_DISAPPEAR = 400;
-    public static final int ANIMATION_DURATION_FOLD_TO_AOD = 600;
+    public static final int ANIMATION_DURATION_FOLD_TO_AOD =
+            AnimatableClockView.ANIMATION_DURATION_FOLD_TO_AOD;
     public static final int ANIMATION_DURATION_PULSE_APPEAR =
             KeyguardSliceView.DEFAULT_ANIM_DURATION;
     public static final int ANIMATION_DURATION_BLOCKING_HELPER_FADE = 240;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateLogger.kt
index 77377af..cb4a088 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateLogger.kt
@@ -3,6 +3,7 @@
 import com.android.systemui.log.LogBuffer
 import com.android.systemui.log.LogLevel
 import com.android.systemui.log.dagger.NotificationHeadsUpLog
+import com.android.systemui.statusbar.notification.logKey
 import javax.inject.Inject
 
 class StackStateLogger @Inject constructor(
@@ -10,7 +11,7 @@
 ) {
     fun logHUNViewDisappearing(key: String) {
         buffer.log(TAG, LogLevel.INFO, {
-            str1 = key
+            str1 = logKey(key)
         }, {
             "Heads up view disappearing $str1 "
         })
@@ -18,7 +19,7 @@
 
     fun logHUNViewAppearing(key: String) {
         buffer.log(TAG, LogLevel.INFO, {
-            str1 = key
+            str1 = logKey(key)
         }, {
             "Heads up notification view appearing $str1 "
         })
@@ -26,7 +27,7 @@
 
     fun logHUNViewDisappearingWithRemoveEvent(key: String) {
         buffer.log(TAG, LogLevel.ERROR, {
-            str1 = key
+            str1 = logKey(key)
         }, {
             "Heads up view disappearing $str1 for ANIMATION_TYPE_REMOVE"
         })
@@ -34,7 +35,7 @@
 
     fun logHUNViewAppearingWithAddEvent(key: String) {
         buffer.log(TAG, LogLevel.ERROR, {
-            str1 = key
+            str1 = logKey(key)
         }, {
             "Heads up view disappearing $str1 for ANIMATION_TYPE_ADD"
         })
@@ -42,7 +43,7 @@
 
     fun disappearAnimationEnded(key: String) {
         buffer.log(TAG, LogLevel.INFO, {
-            str1 = key
+            str1 = logKey(key)
         }, {
             "Heads up notification disappear animation ended $str1 "
         })
@@ -50,7 +51,7 @@
 
     fun appearAnimationEnded(key: String) {
         buffer.log(TAG, LogLevel.INFO, {
-            str1 = key
+            str1 = logKey(key)
         }, {
             "Heads up notification appear animation ended $str1 "
         })
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java
index 8782be5..9070ead 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java
@@ -428,7 +428,7 @@
             if (isSafetyCenterEnabled && !mAutoTracker.isAdded(mSafetySpec)) {
                 initSafetyTile();
             } else if (!isSafetyCenterEnabled && mAutoTracker.isAdded(mSafetySpec)) {
-                mHost.removeTile(CustomTile.getComponentFromSpec(mSafetySpec));
+                mHost.removeTile(mSafetySpec);
                 mHost.unmarkTileAsAutoAdded(mSafetySpec);
             }
         }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java
index 39620ac..65ba5ad 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java
@@ -60,6 +60,7 @@
 import com.android.systemui.keyguard.WakefulnessLifecycle;
 import com.android.systemui.log.SessionTracker;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.NotificationMediaManager;
 import com.android.systemui.statusbar.NotificationShadeWindowController;
@@ -161,7 +162,7 @@
     private final Handler mHandler;
     private final KeyguardBypassController mKeyguardBypassController;
     private PowerManager.WakeLock mWakeLock;
-    private final ShadeController mShadeController;
+    private final com.android.systemui.shade.ShadeController mShadeController;
     private final KeyguardUpdateMonitor mUpdateMonitor;
     private final DozeParameters mDozeParameters;
     private final KeyguardStateController mKeyguardStateController;
@@ -448,7 +449,6 @@
         }
         // During wake and unlock, we need to draw black before waking up to avoid abrupt
         // brightness changes due to display state transitions.
-        boolean alwaysOnEnabled = mDozeParameters.getAlwaysOn();
         Runnable wakeUp = ()-> {
             if (!wasDeviceInteractive) {
                 if (DEBUG_BIO_WAKELOCK) {
@@ -659,7 +659,10 @@
             mLatencyTracker.onActionCancel(action);
         }
 
-        if (biometricSourceType == BiometricSourceType.FINGERPRINT
+        if (!mVibratorHelper.hasVibrator()
+                && (!mUpdateMonitor.isDeviceInteractive() || mUpdateMonitor.isDreaming())) {
+            startWakeAndUnlock(MODE_SHOW_BOUNCER);
+        } else if (biometricSourceType == BiometricSourceType.FINGERPRINT
                 && mUpdateMonitor.isUdfpsSupported()) {
             long currUptimeMillis = SystemClock.uptimeMillis();
             if (currUptimeMillis - mLastFpFailureUptimeMillis < mConsecutiveFpFailureThreshold) {
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 37079e5..5a80508 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java
@@ -47,6 +47,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.statusbar.GestureRecorder;
 import com.android.systemui.statusbar.LightRevealScrim;
 import com.android.systemui.statusbar.NotificationPresenter;
@@ -265,9 +268,6 @@
 
     boolean isPulsing();
 
-    @Nullable
-    View getAmbientIndicationContainer();
-
     boolean isOccluded();
 
     //TODO: These can / should probably be moved to NotificationPresenter or ShadeController
@@ -427,12 +427,6 @@
 
     void onHintFinished();
 
-    void onCameraHintStarted();
-
-    void onVoiceAssistHintStarted();
-
-    void onPhoneHintStarted();
-
     void onTrackingStopped(boolean expand);
 
     // TODO: Figure out way to remove these.
@@ -448,6 +442,8 @@
 
     void setBouncerShowing(boolean bouncerShowing);
 
+  void setBouncerShowingOverDream(boolean bouncerShowingOverDream);
+
     void collapseShade();
 
     int getWakefulnessState();
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 9060d5f..747c4de 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java
@@ -45,6 +45,7 @@
 
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.internal.statusbar.LetterboxDetails;
 import com.android.internal.view.AppearanceRegion;
 import com.android.keyguard.KeyguardUpdateMonitor;
 import com.android.systemui.R;
@@ -54,9 +55,11 @@
 import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.keyguard.WakefulnessLifecycle;
 import com.android.systemui.qs.QSPanelController;
+import com.android.systemui.shade.NotificationPanelView;
+import com.android.systemui.shade.NotificationPanelViewController;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.DisableFlagsLogger;
-import com.android.systemui.statusbar.SysuiStatusBarStateController;
 import com.android.systemui.statusbar.VibratorHelper;
 import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
 import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent;
@@ -74,7 +77,7 @@
 public class CentralSurfacesCommandQueueCallbacks implements CommandQueue.Callbacks {
     private final CentralSurfaces mCentralSurfaces;
     private final Context mContext;
-    private final ShadeController mShadeController;
+    private final com.android.systemui.shade.ShadeController mShadeController;
     private final CommandQueue mCommandQueue;
     private final NotificationPanelViewController mNotificationPanelViewController;
     private final RemoteInputQuickSettingsDisabler mRemoteInputQuickSettingsDisabler;
@@ -87,19 +90,16 @@
     private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
     private final AssistManager mAssistManager;
     private final DozeServiceHost mDozeServiceHost;
-    private final SysuiStatusBarStateController mStatusBarStateController;
-    private final NotificationShadeWindowView mNotificationShadeWindowView;
     private final NotificationStackScrollLayoutController mNotificationStackScrollLayoutController;
     private final StatusBarHideIconsForBouncerManager mStatusBarHideIconsForBouncerManager;
     private final PowerManager mPowerManager;
     private final VibratorHelper mVibratorHelper;
     private final Optional<Vibrator> mVibratorOptional;
-    private final LightBarController mLightBarController;
     private final DisableFlagsLogger mDisableFlagsLogger;
     private final int mDisplayId;
     private final boolean mVibrateOnOpening;
     private final VibrationEffect mCameraLaunchGestureVibrationEffect;
-
+    private final SystemBarAttributesListener mSystemBarAttributesListener;
 
     private static final VibrationAttributes HARDWARE_FEEDBACK_VIBRATION_ATTRIBUTES =
             VibrationAttributes.createForUsage(VibrationAttributes.USAGE_HARDWARE_FEEDBACK);
@@ -122,16 +122,14 @@
             StatusBarKeyguardViewManager statusBarKeyguardViewManager,
             AssistManager assistManager,
             DozeServiceHost dozeServiceHost,
-            SysuiStatusBarStateController statusBarStateController,
-            NotificationShadeWindowView notificationShadeWindowView,
             NotificationStackScrollLayoutController notificationStackScrollLayoutController,
             StatusBarHideIconsForBouncerManager statusBarHideIconsForBouncerManager,
             PowerManager powerManager,
             VibratorHelper vibratorHelper,
             Optional<Vibrator> vibratorOptional,
-            LightBarController lightBarController,
             DisableFlagsLogger disableFlagsLogger,
-            @DisplayId int displayId) {
+            @DisplayId int displayId,
+            SystemBarAttributesListener systemBarAttributesListener) {
 
         mCentralSurfaces = centralSurfaces;
         mContext = context;
@@ -148,20 +146,18 @@
         mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
         mAssistManager = assistManager;
         mDozeServiceHost = dozeServiceHost;
-        mStatusBarStateController = statusBarStateController;
-        mNotificationShadeWindowView = notificationShadeWindowView;
         mNotificationStackScrollLayoutController = notificationStackScrollLayoutController;
         mStatusBarHideIconsForBouncerManager = statusBarHideIconsForBouncerManager;
         mPowerManager = powerManager;
         mVibratorHelper = vibratorHelper;
         mVibratorOptional = vibratorOptional;
-        mLightBarController = lightBarController;
         mDisableFlagsLogger = disableFlagsLogger;
         mDisplayId = displayId;
 
         mVibrateOnOpening = resources.getBoolean(R.bool.config_vibrateOnIconAnimation);
         mCameraLaunchGestureVibrationEffect = getCameraGestureVibrationEffect(
                 mVibratorOptional, resources);
+        mSystemBarAttributesListener = systemBarAttributesListener;
     }
 
     @Override
@@ -187,7 +183,7 @@
     public void remQsTile(ComponentName tile) {
         QSPanelController qsPanelController = mCentralSurfaces.getQSPanelController();
         if (qsPanelController != null && qsPanelController.getHost() != null) {
-            qsPanelController.getHost().removeTile(tile);
+            qsPanelController.getHost().removeTileByUser(tile);
         }
     }
 
@@ -388,8 +384,7 @@
                 if (mStatusBarKeyguardViewManager.isBouncerShowing()) {
                     mStatusBarKeyguardViewManager.reset(true /* hide */);
                 }
-                mNotificationPanelViewController.launchCamera(
-                        mCentralSurfaces.isDeviceInteractive() /* animate */, source);
+                mNotificationPanelViewController.launchCamera(source);
                 mCentralSurfaces.updateScrimController();
             } else {
                 // We need to defer the camera launch until the screen comes on, since otherwise
@@ -464,18 +459,23 @@
     @Override
     public void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
             AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
-            @Behavior int behavior, InsetsVisibilities requestedVisibilities, String packageName) {
+            @Behavior int behavior, InsetsVisibilities requestedVisibilities, String packageName,
+            LetterboxDetails[] letterboxDetails) {
         if (displayId != mDisplayId) {
             return;
         }
-        boolean barModeChanged = mCentralSurfaces.setAppearance(appearance);
-
-        mLightBarController.onStatusBarAppearanceChanged(appearanceRegions, barModeChanged,
-                mCentralSurfaces.getBarMode(), navbarColorManagedByIme);
-
-        mCentralSurfaces.updateBubblesVisibility();
-        mStatusBarStateController.setSystemBarAttributes(
-                appearance, behavior, requestedVisibilities, packageName);
+        // SystemBarAttributesListener should __always__ be the top-level listener for system bar
+        // attributes changed.
+        mSystemBarAttributesListener.onSystemBarAttributesChanged(
+                displayId,
+                appearance,
+                appearanceRegions,
+                navbarColorManagedByIme,
+                behavior,
+                requestedVisibilities,
+                packageName,
+                letterboxDetails
+        );
     }
 
     @Override
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 450d0d3..ee45c42 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
@@ -139,6 +139,7 @@
 import com.android.systemui.biometrics.AuthRippleController;
 import com.android.systemui.broadcast.BroadcastDispatcher;
 import com.android.systemui.camera.CameraIntents;
+import com.android.systemui.charging.WiredChargingRippleController;
 import com.android.systemui.charging.WirelessChargingAnimation;
 import com.android.systemui.classifier.FalsingCollector;
 import com.android.systemui.colorextraction.SysuiColorExtractor;
@@ -147,7 +148,6 @@
 import com.android.systemui.dagger.qualifiers.UiBackground;
 import com.android.systemui.demomode.DemoMode;
 import com.android.systemui.demomode.DemoModeController;
-import com.android.systemui.dreams.DreamOverlayStateController;
 import com.android.systemui.emergency.EmergencyGesture;
 import com.android.systemui.flags.FeatureFlags;
 import com.android.systemui.flags.Flags;
@@ -174,6 +174,10 @@
 import com.android.systemui.recents.ScreenPinningRequest;
 import com.android.systemui.scrim.ScrimView;
 import com.android.systemui.settings.brightness.BrightnessSliderController;
+import com.android.systemui.shade.NotificationPanelViewController;
+import com.android.systemui.shade.NotificationShadeWindowView;
+import com.android.systemui.shade.NotificationShadeWindowViewController;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.shared.plugins.PluginManager;
 import com.android.systemui.statusbar.AutoHideUiElement;
 import com.android.systemui.statusbar.BackDropView;
@@ -192,16 +196,12 @@
 import com.android.systemui.statusbar.NotificationShadeDepthController;
 import com.android.systemui.statusbar.NotificationShadeWindowController;
 import com.android.systemui.statusbar.NotificationShelfController;
-import com.android.systemui.statusbar.NotificationViewHierarchyManager;
 import com.android.systemui.statusbar.PowerButtonReveal;
 import com.android.systemui.statusbar.PulseExpansionHandler;
 import com.android.systemui.statusbar.StatusBarState;
 import com.android.systemui.statusbar.SysuiStatusBarStateController;
-import com.android.systemui.statusbar.charging.WiredChargingRippleController;
-import com.android.systemui.statusbar.connectivity.NetworkController;
 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.NotificationActivityStarter;
 import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.NotificationLaunchAnimatorControllerProvider;
@@ -305,7 +305,6 @@
     }
 
     private final LockscreenShadeTransitionController mLockscreenShadeTransitionController;
-    private final DreamOverlayStateController mDreamOverlayStateController;
     private CentralSurfacesCommandQueueCallbacks mCommandQueueCallbacks;
     private float mTransitionToFullShadeProgress = 0f;
     private NotificationListContainer mNotifListContainer;
@@ -435,6 +434,7 @@
      */
     protected int mState; // TODO: remove this. Just use StatusBarStateController
     protected boolean mBouncerShowing;
+    private boolean mBouncerShowingOverDream;
 
     private final PhoneStatusBarPolicy mIconPolicy;
 
@@ -484,7 +484,7 @@
     private final Lazy<BiometricUnlockController> mBiometricUnlockControllerLazy;
     private final CentralSurfacesComponent.Factory mCentralSurfacesComponentFactory;
     private final PluginManager mPluginManager;
-    private final ShadeController mShadeController;
+    private final com.android.systemui.shade.ShadeController mShadeController;
     private final InitController mInitController;
 
     private final PluginDependencyProvider mPluginDependencyProvider;
@@ -513,7 +513,6 @@
     protected final NotificationEntryManager mEntryManager;
     private final NotificationGutsManager mGutsManager;
     private final NotificationLogger mNotificationLogger;
-    private final NotificationViewHierarchyManager mViewHierarchyManager;
     private final PanelExpansionStateManager mPanelExpansionStateManager;
     private final KeyguardViewMediator mKeyguardViewMediator;
     protected final NotificationInterruptStateProvider mNotificationInterruptStateProvider;
@@ -649,7 +648,6 @@
     private final Optional<Bubbles> mBubblesOptional;
     private final Bubbles.BubbleExpandListener mBubbleExpandListener;
     private final Optional<StartingSurface> mStartingSurfaceOptional;
-    private final NotifPipelineFlags mNotifPipelineFlags;
 
     private final ActivityIntentHelper mActivityIntentHelper;
     private NotificationStackScrollLayoutController mStackScrollerController;
@@ -691,7 +689,6 @@
             NotificationGutsManager notificationGutsManager,
             NotificationLogger notificationLogger,
             NotificationInterruptStateProvider notificationInterruptStateProvider,
-            NotificationViewHierarchyManager notificationViewHierarchyManager,
             PanelExpansionStateManager panelExpansionStateManager,
             KeyguardViewMediator keyguardViewMediator,
             DisplayMetrics displayMetrics,
@@ -754,10 +751,8 @@
             WallpaperManager wallpaperManager,
             Optional<StartingSurface> startingSurfaceOptional,
             ActivityLaunchAnimator activityLaunchAnimator,
-            NotifPipelineFlags notifPipelineFlags,
             InteractionJankMonitor jankMonitor,
             DeviceStateManager deviceStateManager,
-            DreamOverlayStateController dreamOverlayStateController,
             WiredChargingRippleController wiredChargingRippleController,
             IDreamManager dreamManager) {
         super(context);
@@ -782,7 +777,6 @@
         mGutsManager = notificationGutsManager;
         mNotificationLogger = notificationLogger;
         mNotificationInterruptStateProvider = notificationInterruptStateProvider;
-        mViewHierarchyManager = notificationViewHierarchyManager;
         mPanelExpansionStateManager = panelExpansionStateManager;
         mKeyguardViewMediator = keyguardViewMediator;
         mDisplayMetrics = displayMetrics;
@@ -840,11 +834,9 @@
         mMessageRouter = messageRouter;
         mWallpaperManager = wallpaperManager;
         mJankMonitor = jankMonitor;
-        mDreamOverlayStateController = dreamOverlayStateController;
 
         mLockscreenShadeTransitionController = lockscreenShadeTransitionController;
         mStartingSurfaceOptional = startingSurfaceOptional;
-        mNotifPipelineFlags = notifPipelineFlags;
         mDreamManager = dreamManager;
         lockscreenShadeTransitionController.setCentralSurfaces(this);
         statusBarWindowStateController.addListener(this::onStatusBarWindowStateChanged);
@@ -947,7 +939,7 @@
         }
         mCommandQueueCallbacks.onSystemBarAttributesChanged(mDisplayId, result.mAppearance,
                 result.mAppearanceRegions, result.mNavbarColorManagedByIme, result.mBehavior,
-                result.mRequestedVisibilities, result.mPackageName);
+                result.mRequestedVisibilities, result.mPackageName, result.mLetterboxDetails);
 
         // StatusBarManagerService has a back up of IME token and it's restored here.
         mCommandQueueCallbacks.setImeWindowStatus(mDisplayId, result.mImeToken,
@@ -1113,7 +1105,6 @@
                     isFolded, willGoToSleep, isShadeOpen, leaveOpen));
         }
         if (leaveOpen) {
-            mStatusBarStateController.setLeaveOpenOnKeyguardHide(true);
             if (mKeyguardStateController.isShowing()) {
                 // When device state changes on keyguard we don't want to keep the state of
                 // the shade and instead we open clean state of keyguard with shade closed.
@@ -1122,6 +1113,9 @@
                 // expanded. To prevent that we can close QS which resets QS and some parts of
                 // the shade to its default state. Read more in b/201537421
                 mCloseQsBeforeScreenOff = true;
+            } else {
+                // below makes shade stay open when going from folded to unfolded
+                mStatusBarStateController.setLeaveOpenOnKeyguardHide(true);
             }
         }
     }
@@ -1171,9 +1165,6 @@
 
         mStatusBarTouchableRegionManager.setup(this, mNotificationShadeWindowView);
         mHeadsUpManager.addListener(mNotificationPanelViewController.getOnHeadsUpChangedListener());
-        if (!mNotifPipelineFlags.isNewPipelineEnabled()) {
-            mHeadsUpManager.addListener(mVisualStabilityManager);
-        }
         mNotificationPanelViewController.setHeadsUpManager(mHeadsUpManager);
 
         createNavigationBar(result);
@@ -1258,8 +1249,6 @@
             backdrop.setScaleY(scale);
         });
 
-        mNotificationPanelViewController.setUserSetupComplete(mUserSetup);
-
         // Set up the quick settings tile panel
         final View container = mNotificationShadeWindowView.findViewById(R.id.qs_frame);
         if (container != null) {
@@ -1715,7 +1704,7 @@
             // Wrap the animation controller to dismiss the shade and set
             // mIsLaunchingActivityOverLockscreen during the animation.
             ActivityLaunchAnimator.Controller delegate = wrapAnimationController(
-                    animationController, dismissShade);
+                    animationController, dismissShade, /* isLaunchForActivity= */ true);
             controller = new DelegateLaunchAnimatorController(delegate) {
                 @Override
                 public void onIntentStarted(boolean willAnimate) {
@@ -1867,12 +1856,6 @@
         return mDozeServiceHost.isPulsing();
     }
 
-    @androidx.annotation.Nullable
-    @Override
-    public View getAmbientIndicationContainer() {
-        return mAmbientIndicationContainer;
-    }
-
     /**
      * When the keyguard is showing and covered by a "showWhenLocked" activity it
      * is occluded. This is controlled by {@link com.android.server.policy.PhoneWindowManager}
@@ -2331,15 +2314,7 @@
             pw.print  ("      ");
             mNotificationPanelViewController.dump(pw, args);
         }
-        pw.println("  mStackScroller: ");
-        if (mStackScroller != null) {
-            // Double indent until we rewrite the rest of this dump()
-            pw.increaseIndent();
-            pw.increaseIndent();
-            mStackScroller.dump(pw, args);
-            pw.decreaseIndent();
-            pw.decreaseIndent();
-        }
+        pw.println("  mStackScroller: " + mStackScroller + " (dump moved)");
         pw.println("  Theme:");
         String nightMode = mUiModeManager == null ? "null" : mUiModeManager.getNightMode() + "";
         pw.println("    dark theme: " + nightMode +
@@ -2477,7 +2452,7 @@
                         true /* isActivityIntent */);
         ActivityLaunchAnimator.Controller animController =
                 animationController != null ? wrapAnimationController(animationController,
-                        dismissShade) : null;
+                        dismissShade, /* isLaunchForActivity= */ true) : null;
 
         // If we animate, we will dismiss the shade only once the animation is done. This is taken
         // care of by the StatusBarLaunchAnimationController.
@@ -2546,13 +2521,34 @@
                 callback.onActivityStarted(ActivityManager.START_CANCELED);
             }
         };
+        // Do not deferKeyguard when occluded because, when keyguard is occluded,
+        // we do not launch the activity until keyguard is done.
+        boolean occluded = mStatusBarKeyguardViewManager.isShowing()
+                && mStatusBarKeyguardViewManager.isOccluded();
+        boolean deferred = !occluded;
         executeRunnableDismissingKeyguard(runnable, cancelRunnable, dismissShadeDirectly,
-                willLaunchResolverActivity, true /* deferred */, animate);
+                willLaunchResolverActivity, deferred /* deferred */, animate);
     }
 
+    /**
+     * Return a {@link ActivityLaunchAnimator.Controller} wrapping {@code animationController} so
+     * that:
+     *  - if it launches in the notification shade window and {@code dismissShade} is true, then
+     *    the shade will be instantly dismissed at the end of the animation.
+     *  - if it launches in status bar window, it will make the status bar window match the device
+     *    size during the animation (that way, the animation won't be clipped by the status bar
+     *    size).
+     *
+     * @param animationController the controller that is wrapped and will drive the main animation.
+     * @param dismissShade whether the notification shade will be dismissed at the end of the
+     *                     animation. This is ignored if {@code animationController} is not
+     *                     animating in the shade window.
+     * @param isLaunchForActivity whether the launch is for an activity.
+     */
     @Nullable
     private ActivityLaunchAnimator.Controller wrapAnimationController(
-            ActivityLaunchAnimator.Controller animationController, boolean dismissShade) {
+            ActivityLaunchAnimator.Controller animationController, boolean dismissShade,
+            boolean isLaunchForActivity) {
         View rootView = animationController.getLaunchContainer().getRootView();
 
         Optional<ActivityLaunchAnimator.Controller> controllerFromStatusBar =
@@ -2566,7 +2562,7 @@
             // If the view is not in the status bar, then we are animating a view in the shade.
             // We have to make sure that we collapse it when the animation ends or is cancelled.
             return new StatusBarLaunchAnimatorController(animationController, this,
-                    true /* isLaunchForActivity */);
+                    isLaunchForActivity);
         }
 
         return animationController;
@@ -2707,7 +2703,8 @@
     @Override
     public void dismissKeyguardThenExecute(OnDismissAction action, Runnable cancelAction,
             boolean afterKeyguardGone) {
-        if (mWakefulnessLifecycle.getWakefulness() == WAKEFULNESS_ASLEEP
+        if (!action.willRunAnimationOnKeyguard()
+                && mWakefulnessLifecycle.getWakefulness() == WAKEFULNESS_ASLEEP
                 && mKeyguardStateController.canDismissLockScreen()
                 && !mStatusBarStateController.leaveOpenOnKeyguardHide()
                 && mDozeServiceHost.isPulsing()) {
@@ -3009,8 +3006,7 @@
 
     @Override
     public boolean isInLaunchTransition() {
-        return mNotificationPanelViewController.isLaunchTransitionRunning()
-                || mNotificationPanelViewController.isLaunchTransitionFinished();
+        return mNotificationPanelViewController.isLaunchTransitionFinished();
     }
 
     /**
@@ -3042,11 +3038,7 @@
             mCommandQueue.appTransitionStarting(mDisplayId, SystemClock.uptimeMillis(),
                     LightBarTransitionsController.DEFAULT_TINT_ANIMATION_DURATION, true);
         };
-        if (mNotificationPanelViewController.isLaunchTransitionRunning()) {
-            mNotificationPanelViewController.setLaunchTransitionEndRunnable(hideRunnable);
-        } else {
-            hideRunnable.run();
-        }
+        hideRunnable.run();
     }
 
     private void cancelAfterLaunchTransitionRunnables() {
@@ -3055,7 +3047,6 @@
         }
         mLaunchTransitionEndRunnable = null;
         mLaunchTransitionCancelRunnable = null;
-        mNotificationPanelViewController.setLaunchTransitionEndRunnable(null);
     }
 
     /**
@@ -3311,9 +3302,13 @@
 
     @Override
     public boolean onBackPressed() {
-        boolean isScrimmedBouncer = mScrimController.getState() == ScrimState.BOUNCER_SCRIMMED;
-        if (mStatusBarKeyguardViewManager.onBackPressed(isScrimmedBouncer /* hideImmediately */)) {
-            if (isScrimmedBouncer) {
+        final boolean isScrimmedBouncer =
+                mScrimController.getState() == ScrimState.BOUNCER_SCRIMMED;
+        final boolean isBouncerOverDream = isBouncerShowingOverDream();
+
+        if (mStatusBarKeyguardViewManager.onBackPressed(
+                isScrimmedBouncer || isBouncerOverDream /* hideImmediately */)) {
+            if (isScrimmedBouncer || isBouncerOverDream) {
                 mStatusBarStateController.setLeaveOpenOnKeyguardHide(false);
             } else {
                 mNotificationPanelViewController.expandWithoutQs();
@@ -3325,17 +3320,14 @@
             return true;
         }
         if (mNotificationPanelViewController.isQsExpanded()) {
-            if (mNotificationPanelViewController.isQsDetailShowing()) {
-                mNotificationPanelViewController.closeQsDetail();
-            } else {
                 mNotificationPanelViewController.animateCloseQs(false /* animateAway */);
-            }
             return true;
         }
         if (mNotificationPanelViewController.closeUserSwitcherIfOpen()) {
             return true;
         }
-        if (mState != StatusBarState.KEYGUARD && mState != StatusBarState.SHADE_LOCKED) {
+        if (mState != StatusBarState.KEYGUARD && mState != StatusBarState.SHADE_LOCKED
+                && !isBouncerOverDream) {
             if (mNotificationPanelViewController.canPanelBeCollapsed()) {
                 mShadeController.animateCollapsePanels();
             }
@@ -3479,24 +3471,6 @@
     }
 
     @Override
-    public void onCameraHintStarted() {
-        mFalsingCollector.onCameraHintStarted();
-        mKeyguardIndicationController.showTransientIndication(R.string.camera_hint);
-    }
-
-    @Override
-    public void onVoiceAssistHintStarted() {
-        mFalsingCollector.onLeftAffordanceHintStarted();
-        mKeyguardIndicationController.showTransientIndication(R.string.voice_hint);
-    }
-
-    @Override
-    public void onPhoneHintStarted() {
-        mFalsingCollector.onLeftAffordanceHintStarted();
-        mKeyguardIndicationController.showTransientIndication(R.string.phone_hint);
-    }
-
-    @Override
     public void onTrackingStopped(boolean expand) {
     }
 
@@ -3551,6 +3525,17 @@
     }
 
     /**
+     * Sets whether the bouncer over dream is showing. Note that the bouncer over dream is handled
+     * independently of the rest of the notification panel. As a result, setting this state via
+     * {@link #setBouncerShowing(boolean)} leads to unintended side effects from states modified
+     * behind the dream.
+     */
+    @Override
+    public void setBouncerShowingOverDream(boolean bouncerShowingOverDream) {
+        mBouncerShowingOverDream = bouncerShowingOverDream;
+    }
+  
+    /**
      * Propagate the bouncer state to status bar components.
      *
      * Separate from {@link #setBouncerShowing} because we sometimes re-create the status bar and
@@ -3684,8 +3669,7 @@
                         .updateSensitivenessForOccludedWakeup();
             }
             if (mLaunchCameraWhenFinishedWaking) {
-                mNotificationPanelViewController.launchCamera(
-                        false /* animate */, mLastCameraLaunchSource);
+                mNotificationPanelViewController.launchCamera(mLastCameraLaunchSource);
                 mLaunchCameraWhenFinishedWaking = false;
             }
             if (mLaunchEmergencyActionWhenFinishedWaking) {
@@ -4118,8 +4102,9 @@
                 // We wrap animationCallback with a StatusBarLaunchAnimatorController so that the
                 // shade is collapsed after the animation (or when it is cancelled, aborted, etc).
                 ActivityLaunchAnimator.Controller controller =
-                        animationController != null ? new StatusBarLaunchAnimatorController(
-                                animationController, this, intent.isActivity()) : null;
+                        animationController != null ? wrapAnimationController(
+                                animationController, /* dismissShade= */ true, intent.isActivity())
+                                : null;
 
                 mActivityLaunchAnimator.startPendingIntentWithAnimation(
                         controller, animate, intent.getCreatorPackage(),
@@ -4206,7 +4191,7 @@
 
     @Override
     public boolean isBouncerShowingOverDream() {
-        return isBouncerShowing() && mDreamOverlayStateController.isOverlayActive();
+        return mBouncerShowingOverDream;
     }
 
     /**
@@ -4327,9 +4312,6 @@
                 if (!mUserSetup) {
                     animateCollapseQuickSettings();
                 }
-                if (mNotificationPanelViewController != null) {
-                    mNotificationPanelViewController.setUserSetupComplete(mUserSetup);
-                }
                 updateQsExpansionEnabled();
             }
         }
@@ -4368,9 +4350,6 @@
                 Log.v(TAG, "configuration changed: " + mContext.getResources().getConfiguration());
             }
 
-            if (!mNotifPipelineFlags.isNewPipelineEnabled()) {
-                mViewHierarchyManager.updateRowStates();
-            }
             mScreenPinningRequest.onConfigurationChanged();
         }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java
index 6dbbf0d..fc8e7d5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java
@@ -30,7 +30,6 @@
 import com.android.systemui.R;
 import com.android.systemui.demomode.DemoMode;
 import com.android.systemui.flags.FeatureFlags;
-import com.android.systemui.flags.Flags;
 import com.android.systemui.plugins.DarkIconDispatcher;
 import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
 import com.android.systemui.statusbar.StatusBarIconView;
@@ -255,9 +254,7 @@
 
     public void addMobileView(MobileIconState state) {
         Log.d(TAG, "addMobileView: ");
-        StatusBarMobileView view = StatusBarMobileView.fromContext(
-                mContext, state.slot,
-                mFeatureFlags.isEnabled(Flags.COMBINED_STATUS_BAR_SIGNAL_ICONS));
+        StatusBarMobileView view = StatusBarMobileView.fromContext(mContext, state.slot);
 
         view.applyMobileState(state);
         view.setStaticDrawableColor(mColor);
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 55b310f..80c3e6c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java
@@ -40,6 +40,8 @@
 import com.android.systemui.doze.DozeReceiver;
 import com.android.systemui.keyguard.KeyguardViewMediator;
 import com.android.systemui.keyguard.WakefulnessLifecycle;
+import com.android.systemui.shade.NotificationPanelViewController;
+import com.android.systemui.shade.NotificationShadeWindowViewController;
 import com.android.systemui.statusbar.NotificationShadeWindowController;
 import com.android.systemui.statusbar.PulseExpansionHandler;
 import com.android.systemui.statusbar.StatusBarState;
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 9863a0e..484441a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java
@@ -26,6 +26,7 @@
 import com.android.systemui.R;
 import com.android.systemui.plugins.DarkIconDispatcher;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.shade.NotificationPanelViewController;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.CrossFadeHelper;
 import com.android.systemui.statusbar.HeadsUpStatusBarView;
@@ -40,8 +41,8 @@
 import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
 import com.android.systemui.util.ViewController;
 
-import java.util.Optional;
 import java.util.ArrayList;
+import java.util.Optional;
 import java.util.function.BiConsumer;
 import java.util.function.Consumer;
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java
index 415bd90..80432db 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java
@@ -217,8 +217,9 @@
      * Notify that the status bar panel gets expanded or collapsed.
      *
      * @param isExpanded True to notify expanded, false to notify collapsed.
+     * TODO(b/237811427) replace with a listener
      */
-    void setIsPanelExpanded(boolean isExpanded) {
+    public void setIsPanelExpanded(boolean isExpanded) {
         if (isExpanded != mIsExpanded) {
             mIsExpanded = isExpanded;
             if (isExpanded) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpTouchHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpTouchHelper.java
index 42f301d..6bfb0da 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpTouchHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpTouchHelper.java
@@ -21,6 +21,7 @@
 import android.view.ViewConfiguration;
 
 import com.android.systemui.Gefingerpoken;
+import com.android.systemui.shade.NotificationPanelViewController;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
 import com.android.systemui.statusbar.notification.row.ExpandableView;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardAffordanceHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardAffordanceHelper.java
deleted file mode 100644
index 2922b4c..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardAffordanceHelper.java
+++ /dev/null
@@ -1,587 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
-import android.content.Context;
-import android.view.MotionEvent;
-import android.view.VelocityTracker;
-import android.view.View;
-import android.view.ViewConfiguration;
-
-import com.android.systemui.R;
-import com.android.systemui.animation.Interpolators;
-import com.android.systemui.classifier.Classifier;
-import com.android.systemui.plugins.FalsingManager;
-import com.android.systemui.statusbar.KeyguardAffordanceView;
-import com.android.wm.shell.animation.FlingAnimationUtils;
-
-/**
- * A touch handler of the keyguard which is responsible for launching phone and camera affordances.
- */
-public class KeyguardAffordanceHelper {
-
-    public static final long HINT_PHASE1_DURATION = 200;
-    private static final long HINT_PHASE2_DURATION = 350;
-    private static final float BACKGROUND_RADIUS_SCALE_FACTOR = 0.25f;
-    private static final int HINT_CIRCLE_OPEN_DURATION = 500;
-
-    private final Context mContext;
-    private final Callback mCallback;
-
-    private FlingAnimationUtils mFlingAnimationUtils;
-    private VelocityTracker mVelocityTracker;
-    private boolean mSwipingInProgress;
-    private float mInitialTouchX;
-    private float mInitialTouchY;
-    private float mTranslation;
-    private float mTranslationOnDown;
-    private int mTouchSlop;
-    private int mMinTranslationAmount;
-    private int mMinFlingVelocity;
-    private int mHintGrowAmount;
-    private KeyguardAffordanceView mLeftIcon;
-    private KeyguardAffordanceView mRightIcon;
-    private Animator mSwipeAnimator;
-    private final FalsingManager mFalsingManager;
-    private int mMinBackgroundRadius;
-    private boolean mMotionCancelled;
-    private int mTouchTargetSize;
-    private View mTargetedView;
-    private boolean mTouchSlopExeeded;
-    private AnimatorListenerAdapter mFlingEndListener = new AnimatorListenerAdapter() {
-        @Override
-        public void onAnimationEnd(Animator animation) {
-            mSwipeAnimator = null;
-            mSwipingInProgress = false;
-            mTargetedView = null;
-        }
-    };
-    private Runnable mAnimationEndRunnable = new Runnable() {
-        @Override
-        public void run() {
-            mCallback.onAnimationToSideEnded();
-        }
-    };
-
-    KeyguardAffordanceHelper(Callback callback, Context context, FalsingManager falsingManager) {
-        mContext = context;
-        mCallback = callback;
-        initIcons();
-        updateIcon(mLeftIcon, 0.0f, mLeftIcon.getRestingAlpha(), false, false, true, false);
-        updateIcon(mRightIcon, 0.0f, mRightIcon.getRestingAlpha(), false, false, true, false);
-        mFalsingManager = falsingManager;
-        initDimens();
-    }
-
-    private void initDimens() {
-        final ViewConfiguration configuration = ViewConfiguration.get(mContext);
-        mTouchSlop = configuration.getScaledPagingTouchSlop();
-        mMinFlingVelocity = configuration.getScaledMinimumFlingVelocity();
-        mMinTranslationAmount = mContext.getResources().getDimensionPixelSize(
-                R.dimen.keyguard_min_swipe_amount);
-        mMinBackgroundRadius = mContext.getResources().getDimensionPixelSize(
-                R.dimen.keyguard_affordance_min_background_radius);
-        mTouchTargetSize = mContext.getResources().getDimensionPixelSize(
-                R.dimen.keyguard_affordance_touch_target_size);
-        mHintGrowAmount =
-                mContext.getResources().getDimensionPixelSize(R.dimen.hint_grow_amount_sideways);
-        mFlingAnimationUtils = new FlingAnimationUtils(mContext.getResources().getDisplayMetrics(),
-                0.4f);
-    }
-
-    private void initIcons() {
-        mLeftIcon = mCallback.getLeftIcon();
-        mRightIcon = mCallback.getRightIcon();
-        updatePreviews();
-    }
-
-    public void updatePreviews() {
-        mLeftIcon.setPreviewView(mCallback.getLeftPreview());
-        mRightIcon.setPreviewView(mCallback.getRightPreview());
-    }
-
-    public boolean onTouchEvent(MotionEvent event) {
-        int action = event.getActionMasked();
-        if (mMotionCancelled && action != MotionEvent.ACTION_DOWN) {
-            return false;
-        }
-        final float y = event.getY();
-        final float x = event.getX();
-
-        boolean isUp = false;
-        switch (action) {
-            case MotionEvent.ACTION_DOWN:
-                View targetView = getIconAtPosition(x, y);
-                if (targetView == null || (mTargetedView != null && mTargetedView != targetView)) {
-                    mMotionCancelled = true;
-                    return false;
-                }
-                if (mTargetedView != null) {
-                    cancelAnimation();
-                } else {
-                    mTouchSlopExeeded = false;
-                }
-                startSwiping(targetView);
-                mInitialTouchX = x;
-                mInitialTouchY = y;
-                mTranslationOnDown = mTranslation;
-                initVelocityTracker();
-                trackMovement(event);
-                mMotionCancelled = false;
-                break;
-            case MotionEvent.ACTION_POINTER_DOWN:
-                mMotionCancelled = true;
-                endMotion(true /* forceSnapBack */, x, y);
-                break;
-            case MotionEvent.ACTION_MOVE:
-                trackMovement(event);
-                float xDist = x - mInitialTouchX;
-                float yDist = y - mInitialTouchY;
-                float distance = (float) Math.hypot(xDist, yDist);
-                if (!mTouchSlopExeeded && distance > mTouchSlop) {
-                    mTouchSlopExeeded = true;
-                }
-                if (mSwipingInProgress) {
-                    if (mTargetedView == mRightIcon) {
-                        distance = mTranslationOnDown - distance;
-                        distance = Math.min(0, distance);
-                    } else {
-                        distance = mTranslationOnDown + distance;
-                        distance = Math.max(0, distance);
-                    }
-                    setTranslation(distance, false /* isReset */, false /* animateReset */);
-                }
-                break;
-
-            case MotionEvent.ACTION_UP:
-                isUp = true;
-            case MotionEvent.ACTION_CANCEL:
-                boolean hintOnTheRight = mTargetedView == mRightIcon;
-                trackMovement(event);
-                endMotion(!isUp, x, y);
-                if (!mTouchSlopExeeded && isUp) {
-                    mCallback.onIconClicked(hintOnTheRight);
-                }
-                break;
-        }
-        return true;
-    }
-
-    private void startSwiping(View targetView) {
-        mCallback.onSwipingStarted(targetView == mRightIcon);
-        mSwipingInProgress = true;
-        mTargetedView = targetView;
-    }
-
-    private View getIconAtPosition(float x, float y) {
-        if (leftSwipePossible() && isOnIcon(mLeftIcon, x, y)) {
-            return mLeftIcon;
-        }
-        if (rightSwipePossible() && isOnIcon(mRightIcon, x, y)) {
-            return mRightIcon;
-        }
-        return null;
-    }
-
-    public boolean isOnAffordanceIcon(float x, float y) {
-        return isOnIcon(mLeftIcon, x, y) || isOnIcon(mRightIcon, x, y);
-    }
-
-    private boolean isOnIcon(View icon, float x, float y) {
-        float iconX = icon.getX() + icon.getWidth() / 2.0f;
-        float iconY = icon.getY() + icon.getHeight() / 2.0f;
-        double distance = Math.hypot(x - iconX, y - iconY);
-        return distance <= mTouchTargetSize / 2;
-    }
-
-    private void endMotion(boolean forceSnapBack, float lastX, float lastY) {
-        if (mSwipingInProgress) {
-            flingWithCurrentVelocity(forceSnapBack, lastX, lastY);
-        } else {
-            mTargetedView = null;
-        }
-        if (mVelocityTracker != null) {
-            mVelocityTracker.recycle();
-            mVelocityTracker = null;
-        }
-    }
-
-    private boolean rightSwipePossible() {
-        return mRightIcon.getVisibility() == View.VISIBLE;
-    }
-
-    private boolean leftSwipePossible() {
-        return mLeftIcon.getVisibility() == View.VISIBLE;
-    }
-
-    public boolean onInterceptTouchEvent(MotionEvent ev) {
-        return false;
-    }
-
-    public void startHintAnimation(boolean right,
-            Runnable onFinishedListener) {
-        cancelAnimation();
-        startHintAnimationPhase1(right, onFinishedListener);
-    }
-
-    private void startHintAnimationPhase1(final boolean right, final Runnable onFinishedListener) {
-        final KeyguardAffordanceView targetView = right ? mRightIcon : mLeftIcon;
-        ValueAnimator animator = getAnimatorToRadius(right, mHintGrowAmount);
-        animator.addListener(new AnimatorListenerAdapter() {
-            private boolean mCancelled;
-
-            @Override
-            public void onAnimationCancel(Animator animation) {
-                mCancelled = true;
-            }
-
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                if (mCancelled) {
-                    mSwipeAnimator = null;
-                    mTargetedView = null;
-                    onFinishedListener.run();
-                } else {
-                    startUnlockHintAnimationPhase2(right, onFinishedListener);
-                }
-            }
-        });
-        animator.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN);
-        animator.setDuration(HINT_PHASE1_DURATION);
-        animator.start();
-        mSwipeAnimator = animator;
-        mTargetedView = targetView;
-    }
-
-    /**
-     * Phase 2: Move back.
-     */
-    private void startUnlockHintAnimationPhase2(boolean right, final Runnable onFinishedListener) {
-        ValueAnimator animator = getAnimatorToRadius(right, 0);
-        animator.addListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                mSwipeAnimator = null;
-                mTargetedView = null;
-                onFinishedListener.run();
-            }
-        });
-        animator.setInterpolator(Interpolators.FAST_OUT_LINEAR_IN);
-        animator.setDuration(HINT_PHASE2_DURATION);
-        animator.setStartDelay(HINT_CIRCLE_OPEN_DURATION);
-        animator.start();
-        mSwipeAnimator = animator;
-    }
-
-    private ValueAnimator getAnimatorToRadius(final boolean right, int radius) {
-        final KeyguardAffordanceView targetView = right ? mRightIcon : mLeftIcon;
-        ValueAnimator animator = ValueAnimator.ofFloat(targetView.getCircleRadius(), radius);
-        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-            @Override
-            public void onAnimationUpdate(ValueAnimator animation) {
-                float newRadius = (float) animation.getAnimatedValue();
-                targetView.setCircleRadiusWithoutAnimation(newRadius);
-                float translation = getTranslationFromRadius(newRadius);
-                mTranslation = right ? -translation : translation;
-                updateIconsFromTranslation(targetView);
-            }
-        });
-        return animator;
-    }
-
-    private void cancelAnimation() {
-        if (mSwipeAnimator != null) {
-            mSwipeAnimator.cancel();
-        }
-    }
-
-    private void flingWithCurrentVelocity(boolean forceSnapBack, float lastX, float lastY) {
-        float vel = getCurrentVelocity(lastX, lastY);
-
-        // We snap back if the current translation is not far enough
-        boolean snapBack = false;
-        if (mCallback.needsAntiFalsing()) {
-            snapBack = snapBack || mFalsingManager.isFalseTouch(
-                    mTargetedView == mRightIcon
-                            ? Classifier.RIGHT_AFFORDANCE : Classifier.LEFT_AFFORDANCE);
-        }
-        snapBack = snapBack || isBelowFalsingThreshold();
-
-        // or if the velocity is in the opposite direction.
-        boolean velIsInWrongDirection = vel * mTranslation < 0;
-        snapBack |= Math.abs(vel) > mMinFlingVelocity && velIsInWrongDirection;
-        vel = snapBack ^ velIsInWrongDirection ? 0 : vel;
-        fling(vel, snapBack || forceSnapBack, mTranslation < 0);
-    }
-
-    private boolean isBelowFalsingThreshold() {
-        return Math.abs(mTranslation) < Math.abs(mTranslationOnDown) + getMinTranslationAmount();
-    }
-
-    private int getMinTranslationAmount() {
-        float factor = mCallback.getAffordanceFalsingFactor();
-        return (int) (mMinTranslationAmount * factor);
-    }
-
-    private void fling(float vel, final boolean snapBack, boolean right) {
-        float target = right ? -mCallback.getMaxTranslationDistance()
-                : mCallback.getMaxTranslationDistance();
-        target = snapBack ? 0 : target;
-
-        ValueAnimator animator = ValueAnimator.ofFloat(mTranslation, target);
-        mFlingAnimationUtils.apply(animator, mTranslation, target, vel);
-        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-            @Override
-            public void onAnimationUpdate(ValueAnimator animation) {
-                mTranslation = (float) animation.getAnimatedValue();
-            }
-        });
-        animator.addListener(mFlingEndListener);
-        if (!snapBack) {
-            startFinishingCircleAnimation(vel * 0.375f, mAnimationEndRunnable, right);
-            mCallback.onAnimationToSideStarted(right, mTranslation, vel);
-        } else {
-            reset(true);
-        }
-        animator.start();
-        mSwipeAnimator = animator;
-        if (snapBack) {
-            mCallback.onSwipingAborted();
-        }
-    }
-
-    private void startFinishingCircleAnimation(float velocity, Runnable animationEndRunnable,
-            boolean right) {
-        KeyguardAffordanceView targetView = right ? mRightIcon : mLeftIcon;
-        targetView.finishAnimation(velocity, animationEndRunnable);
-    }
-
-    private void setTranslation(float translation, boolean isReset, boolean animateReset) {
-        translation = rightSwipePossible() ? translation : Math.max(0, translation);
-        translation = leftSwipePossible() ? translation : Math.min(0, translation);
-        float absTranslation = Math.abs(translation);
-        if (translation != mTranslation || isReset) {
-            KeyguardAffordanceView targetView = translation > 0 ? mLeftIcon : mRightIcon;
-            KeyguardAffordanceView otherView = translation > 0 ? mRightIcon : mLeftIcon;
-            float alpha = absTranslation / getMinTranslationAmount();
-
-            // We interpolate the alpha of the other icons to 0
-            float fadeOutAlpha = 1.0f - alpha;
-            fadeOutAlpha = Math.max(fadeOutAlpha, 0.0f);
-
-            boolean animateIcons = isReset && animateReset;
-            boolean forceNoCircleAnimation = isReset && !animateReset;
-            float radius = getRadiusFromTranslation(absTranslation);
-            boolean slowAnimation = isReset && isBelowFalsingThreshold();
-            if (!isReset) {
-                updateIcon(targetView, radius, alpha + fadeOutAlpha * targetView.getRestingAlpha(),
-                        false, false, false, false);
-            } else {
-                updateIcon(targetView, 0.0f, fadeOutAlpha * targetView.getRestingAlpha(),
-                        animateIcons, slowAnimation, true /* isReset */, forceNoCircleAnimation);
-            }
-            updateIcon(otherView, 0.0f, fadeOutAlpha * otherView.getRestingAlpha(),
-                    animateIcons, slowAnimation, isReset, forceNoCircleAnimation);
-
-            mTranslation = translation;
-        }
-    }
-
-    private void updateIconsFromTranslation(KeyguardAffordanceView targetView) {
-        float absTranslation = Math.abs(mTranslation);
-        float alpha = absTranslation / getMinTranslationAmount();
-
-        // We interpolate the alpha of the other icons to 0
-        float fadeOutAlpha =  1.0f - alpha;
-        fadeOutAlpha = Math.max(0.0f, fadeOutAlpha);
-
-        // We interpolate the alpha of the targetView to 1
-        KeyguardAffordanceView otherView = targetView == mRightIcon ? mLeftIcon : mRightIcon;
-        updateIconAlpha(targetView, alpha + fadeOutAlpha * targetView.getRestingAlpha(), false);
-        updateIconAlpha(otherView, fadeOutAlpha * otherView.getRestingAlpha(), false);
-    }
-
-    private float getTranslationFromRadius(float circleSize) {
-        float translation = (circleSize - mMinBackgroundRadius)
-                / BACKGROUND_RADIUS_SCALE_FACTOR;
-        return translation > 0.0f ? translation + mTouchSlop : 0.0f;
-    }
-
-    private float getRadiusFromTranslation(float translation) {
-        if (translation <= mTouchSlop) {
-            return 0.0f;
-        }
-        return (translation - mTouchSlop)  * BACKGROUND_RADIUS_SCALE_FACTOR + mMinBackgroundRadius;
-    }
-
-    public void animateHideLeftRightIcon() {
-        cancelAnimation();
-        updateIcon(mRightIcon, 0f, 0f, true, false, false, false);
-        updateIcon(mLeftIcon, 0f, 0f, true, false, false, false);
-    }
-
-    private void updateIcon(KeyguardAffordanceView view, float circleRadius, float alpha,
-                            boolean animate, boolean slowRadiusAnimation, boolean force,
-                            boolean forceNoCircleAnimation) {
-        if (view.getVisibility() != View.VISIBLE && !force) {
-            return;
-        }
-        if (forceNoCircleAnimation) {
-            view.setCircleRadiusWithoutAnimation(circleRadius);
-        } else {
-            view.setCircleRadius(circleRadius, slowRadiusAnimation);
-        }
-        updateIconAlpha(view, alpha, animate);
-    }
-
-    private void updateIconAlpha(KeyguardAffordanceView view, float alpha, boolean animate) {
-        float scale = getScale(alpha, view);
-        alpha = Math.min(1.0f, alpha);
-        view.setImageAlpha(alpha, animate);
-        view.setImageScale(scale, animate);
-    }
-
-    private float getScale(float alpha, KeyguardAffordanceView icon) {
-        float scale = alpha / icon.getRestingAlpha() * 0.2f +
-                KeyguardAffordanceView.MIN_ICON_SCALE_AMOUNT;
-        return Math.min(scale, KeyguardAffordanceView.MAX_ICON_SCALE_AMOUNT);
-    }
-
-    private void trackMovement(MotionEvent event) {
-        if (mVelocityTracker != null) {
-            mVelocityTracker.addMovement(event);
-        }
-    }
-
-    private void initVelocityTracker() {
-        if (mVelocityTracker != null) {
-            mVelocityTracker.recycle();
-        }
-        mVelocityTracker = VelocityTracker.obtain();
-    }
-
-    private float getCurrentVelocity(float lastX, float lastY) {
-        if (mVelocityTracker == null) {
-            return 0;
-        }
-        mVelocityTracker.computeCurrentVelocity(1000);
-        float aX = mVelocityTracker.getXVelocity();
-        float aY = mVelocityTracker.getYVelocity();
-        float bX = lastX - mInitialTouchX;
-        float bY = lastY - mInitialTouchY;
-        float bLen = (float) Math.hypot(bX, bY);
-        // Project the velocity onto the distance vector: a * b / |b|
-        float projectedVelocity = (aX * bX + aY * bY) / bLen;
-        if (mTargetedView == mRightIcon) {
-            projectedVelocity = -projectedVelocity;
-        }
-        return projectedVelocity;
-    }
-
-    public void onConfigurationChanged() {
-        initDimens();
-        initIcons();
-    }
-
-    public void onRtlPropertiesChanged() {
-        initIcons();
-    }
-
-    public void reset(boolean animate) {
-        cancelAnimation();
-        setTranslation(0.0f, true /* isReset */, animate);
-        mMotionCancelled = true;
-        if (mSwipingInProgress) {
-            mCallback.onSwipingAborted();
-            mSwipingInProgress = false;
-        }
-    }
-
-    public boolean isSwipingInProgress() {
-        return mSwipingInProgress;
-    }
-
-    public void launchAffordance(boolean animate, boolean left) {
-        if (mSwipingInProgress) {
-            // We don't want to mess with the state if the user is actually swiping already.
-            return;
-        }
-        KeyguardAffordanceView targetView = left ? mLeftIcon : mRightIcon;
-        KeyguardAffordanceView otherView = left ? mRightIcon : mLeftIcon;
-        startSwiping(targetView);
-
-        // Do not animate the circle expanding if the affordance isn't visible,
-        // otherwise the circle will be meaningless.
-        if (targetView.getVisibility() != View.VISIBLE) {
-            animate = false;
-        }
-
-        if (animate) {
-            fling(0, false, !left);
-            updateIcon(otherView, 0.0f, 0, true, false, true, false);
-        } else {
-            mCallback.onAnimationToSideStarted(!left, mTranslation, 0);
-            mTranslation = left ? mCallback.getMaxTranslationDistance()
-                    : mCallback.getMaxTranslationDistance();
-            updateIcon(otherView, 0.0f, 0.0f, false, false, true, false);
-            targetView.instantFinishAnimation();
-            mFlingEndListener.onAnimationEnd(null);
-            mAnimationEndRunnable.run();
-        }
-    }
-
-    public interface Callback {
-
-        /**
-         * Notifies the callback when an animation to a side page was started.
-         *
-         * @param rightPage Is the page animated to the right page?
-         */
-        void onAnimationToSideStarted(boolean rightPage, float translation, float vel);
-
-        /**
-         * Notifies the callback the animation to a side page has ended.
-         */
-        void onAnimationToSideEnded();
-
-        float getMaxTranslationDistance();
-
-        void onSwipingStarted(boolean rightIcon);
-
-        void onSwipingAborted();
-
-        void onIconClicked(boolean rightIcon);
-
-        KeyguardAffordanceView getLeftIcon();
-
-        KeyguardAffordanceView getRightIcon();
-
-        View getLeftPreview();
-
-        View getRightPreview();
-
-        /**
-         * @return The factor the minimum swipe amount should be multiplied with.
-         */
-        float getAffordanceFalsingFactor();
-
-        boolean needsAntiFalsing();
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
index 414bc84..dc77d10 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
@@ -16,56 +16,32 @@
 
 package com.android.systemui.statusbar.phone;
 
-import static android.view.accessibility.AccessibilityNodeInfo.ACTION_CLICK;
-import static android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
-
+import static com.android.internal.util.Preconditions.checkNotNull;
 import static com.android.systemui.controls.dagger.ControlsComponent.Visibility.AVAILABLE;
 import static com.android.systemui.doze.util.BurnInHelperKt.getBurnInOffset;
-import static com.android.systemui.tuner.LockscreenFragment.LOCKSCREEN_LEFT_BUTTON;
-import static com.android.systemui.tuner.LockscreenFragment.LOCKSCREEN_LEFT_UNLOCK;
-import static com.android.systemui.tuner.LockscreenFragment.LOCKSCREEN_RIGHT_BUTTON;
-import static com.android.systemui.tuner.LockscreenFragment.LOCKSCREEN_RIGHT_UNLOCK;
 import static com.android.systemui.wallet.controller.QuickAccessWalletController.WalletChangeEvent.DEFAULT_PAYMENT_APP_CHANGE;
 import static com.android.systemui.wallet.controller.QuickAccessWalletController.WalletChangeEvent.WALLET_PREFERENCE_CHANGE;
 
-import android.app.ActivityManager;
-import android.app.ActivityOptions;
 import android.app.ActivityTaskManager;
 import android.app.admin.DevicePolicyManager;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.content.ServiceConnection;
-import android.content.pm.ActivityInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
 import android.content.res.ColorStateList;
 import android.content.res.Configuration;
 import android.graphics.drawable.Drawable;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.os.Message;
-import android.os.Messenger;
 import android.os.RemoteException;
 import android.os.UserHandle;
-import android.provider.MediaStore;
-import android.service.media.CameraPrewarmService;
 import android.service.quickaccesswallet.GetWalletCardsError;
 import android.service.quickaccesswallet.GetWalletCardsResponse;
 import android.service.quickaccesswallet.QuickAccessWalletClient;
-import android.telecom.TelecomManager;
-import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.util.Log;
 import android.util.TypedValue;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.ViewPropertyAnimator;
 import android.view.WindowInsets;
-import android.view.WindowManager;
-import android.view.accessibility.AccessibilityNodeInfo;
 import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.TextView;
@@ -73,81 +49,40 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.widget.LockPatternUtils;
-import com.android.keyguard.KeyguardUpdateMonitor;
-import com.android.keyguard.KeyguardUpdateMonitorCallback;
 import com.android.settingslib.Utils;
-import com.android.systemui.ActivityIntentHelper;
 import com.android.systemui.Dependency;
 import com.android.systemui.R;
 import com.android.systemui.animation.ActivityLaunchAnimator;
 import com.android.systemui.animation.Interpolators;
-import com.android.systemui.assist.AssistManager;
-import com.android.systemui.camera.CameraIntents;
-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.keyguard.ui.binder.KeyguardBottomAreaViewBinder;
+import com.android.systemui.keyguard.ui.viewmodel.KeyguardBottomAreaViewModel;
 import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.plugins.FalsingManager;
-import com.android.systemui.plugins.IntentButtonProvider;
-import com.android.systemui.plugins.IntentButtonProvider.IntentButton;
-import com.android.systemui.plugins.IntentButtonProvider.IntentButton.IconState;
 import com.android.systemui.qrcodescanner.controller.QRCodeScannerController;
-import com.android.systemui.statusbar.KeyguardAffordanceView;
-import com.android.systemui.statusbar.policy.AccessibilityController;
-import com.android.systemui.statusbar.policy.ExtensionController;
-import com.android.systemui.statusbar.policy.ExtensionController.Extension;
-import com.android.systemui.statusbar.policy.FlashlightController;
 import com.android.systemui.statusbar.policy.KeyguardStateController;
-import com.android.systemui.statusbar.policy.PreviewInflater;
-import com.android.systemui.tuner.LockscreenFragment.LockButtonFactory;
-import com.android.systemui.tuner.TunerService;
 import com.android.systemui.wallet.controller.QuickAccessWalletController;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
  * Implementation for the bottom area of the Keyguard, including camera/phone affordance and status
  * text.
  */
-public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickListener,
-        KeyguardStateController.Callback,
-        AccessibilityController.AccessibilityStateChangedCallback {
+public class KeyguardBottomAreaView extends FrameLayout {
 
-    final static String TAG = "CentralSurfaces/KeyguardBottomAreaView";
-
-    public static final String CAMERA_LAUNCH_SOURCE_AFFORDANCE = "lockscreen_affordance";
-    public static final String CAMERA_LAUNCH_SOURCE_WIGGLE = "wiggle_gesture";
-    public static final String CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP = "power_double_tap";
-    public static final String CAMERA_LAUNCH_SOURCE_LIFT_TRIGGER = "lift_to_launch_ml";
-
-    public static final String EXTRA_CAMERA_LAUNCH_SOURCE
-            = "com.android.systemui.camera_launch_source";
-
-    private static final String LEFT_BUTTON_PLUGIN
-            = "com.android.systemui.action.PLUGIN_LOCKSCREEN_LEFT_BUTTON";
-    private static final String RIGHT_BUTTON_PLUGIN
-            = "com.android.systemui.action.PLUGIN_LOCKSCREEN_RIGHT_BUTTON";
-
-    private static final Intent PHONE_INTENT = new Intent(Intent.ACTION_DIAL);
-    private static final int DOZE_ANIMATION_STAGGER_DELAY = 48;
+    private static final String TAG = "CentralSurfaces/KeyguardBottomAreaView";
     private static final int DOZE_ANIMATION_ELEMENT_DURATION = 250;
 
-    // TODO(b/179494051): May no longer be needed
-    private final boolean mShowLeftAffordance;
-    private final boolean mShowCameraAffordance;
-
-    private KeyguardAffordanceView mRightAffordanceView;
-    private KeyguardAffordanceView mLeftAffordanceView;
-
     private ImageView mWalletButton;
     private ImageView mQRCodeScannerButton;
     private ImageView mControlsButton;
     private boolean mHasCard = false;
-    private WalletCardRetriever mCardRetriever = new WalletCardRetriever();
+    private final WalletCardRetriever mCardRetriever = new WalletCardRetriever();
     private QuickAccessWalletController mQuickAccessWalletController;
     private QRCodeScannerController mQRCodeScannerController;
     private ControlsComponent mControlsComponent;
@@ -157,68 +92,44 @@
     private ViewGroup mIndicationArea;
     private TextView mIndicationText;
     private TextView mIndicationTextBottom;
-    private ViewGroup mPreviewContainer;
     private ViewGroup mOverlayContainer;
 
-    private View mLeftPreview;
-    private View mCameraPreview;
-
     private ActivityStarter mActivityStarter;
     private KeyguardStateController mKeyguardStateController;
-    private FlashlightController mFlashlightController;
-    private PreviewInflater mPreviewInflater;
-    private AccessibilityController mAccessibilityController;
-    private CentralSurfaces mCentralSurfaces;
-    private KeyguardAffordanceHelper mAffordanceHelper;
     private FalsingManager mFalsingManager;
-    private boolean mUserSetupComplete;
-    private boolean mPrewarmBound;
-    private Messenger mPrewarmMessenger;
-    private final ServiceConnection mPrewarmConnection = new ServiceConnection() {
 
-        @Override
-        public void onServiceConnected(ComponentName name, IBinder service) {
-            mPrewarmMessenger = new Messenger(service);
-        }
-
-        @Override
-        public void onServiceDisconnected(ComponentName name) {
-            mPrewarmMessenger = null;
-        }
-    };
-
-    private boolean mLeftIsVoiceAssist;
-    private Drawable mLeftAssistIcon;
-
-    private IntentButton mRightButton = new DefaultRightButton();
-    private Extension<IntentButton> mRightExtension;
-    private String mRightButtonStr;
-    private IntentButton mLeftButton = new DefaultLeftButton();
-    private Extension<IntentButton> mLeftExtension;
-    private String mLeftButtonStr;
     private boolean mDozing;
     private int mIndicationBottomMargin;
     private int mIndicationPadding;
     private float mDarkAmount;
     private int mBurnInXOffset;
     private int mBurnInYOffset;
-    private ActivityIntentHelper mActivityIntentHelper;
-    private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
 
-    private ControlsListingController.ControlsListingCallback mListingCallback =
-            new ControlsListingController.ControlsListingCallback() {
-                public void onServicesUpdated(List<ControlsServiceInfo> serviceInfos) {
-                    post(() -> {
-                        boolean available = !serviceInfos.isEmpty();
+    private final ControlsListingController.ControlsListingCallback mListingCallback =
+            serviceInfos -> post(() -> {
+                boolean available = !serviceInfos.isEmpty();
 
-                        if (available != mControlServicesAvailable) {
-                            mControlServicesAvailable = available;
-                            updateControlsVisibility();
-                            updateAffordanceColors();
-                        }
-                    });
+                if (available != mControlServicesAvailable) {
+                    mControlServicesAvailable = available;
+                    updateControlsVisibility();
+                    updateAffordanceColors();
                 }
-            };
+            });
+
+    private final KeyguardStateController.Callback mKeyguardStateCallback =
+            new KeyguardStateController.Callback() {
+        @Override
+        public void onKeyguardShowingChanged() {
+            if (mKeyguardStateController.isShowing()) {
+                if (mQuickAccessWalletController != null) {
+                    mQuickAccessWalletController.queryWalletCards(mCardRetriever);
+                }
+            }
+        }
+    };
+
+    @Nullable private KeyguardBottomAreaViewBinder.Binding mBinding;
+    private boolean mUsesBinder;
 
     public KeyguardBottomAreaView(Context context) {
         this(context, null);
@@ -235,45 +146,66 @@
     public KeyguardBottomAreaView(Context context, AttributeSet attrs, int defStyleAttr,
             int defStyleRes) {
         super(context, attrs, defStyleAttr, defStyleRes);
-        mShowLeftAffordance = getResources().getBoolean(R.bool.config_keyguardShowLeftAffordance);
-        mShowCameraAffordance = getResources()
-                .getBoolean(R.bool.config_keyguardShowCameraAffordance);
     }
 
-    private AccessibilityDelegate mAccessibilityDelegate = new AccessibilityDelegate() {
-        @Override
-        public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
-            super.onInitializeAccessibilityNodeInfo(host, info);
-            String label = null;
-            if (host == mRightAffordanceView) {
-                label = getResources().getString(R.string.camera_label);
-            } else if (host == mLeftAffordanceView) {
-                if (mLeftIsVoiceAssist) {
-                    label = getResources().getString(R.string.voice_assist_label);
-                } else {
-                    label = getResources().getString(R.string.phone_label);
-                }
-            }
-            info.addAction(new AccessibilityAction(ACTION_CLICK, label));
+    /**
+     * Initializes the view.
+     */
+    public void init(
+            final KeyguardBottomAreaViewModel viewModel,
+            final FalsingManager falsingManager) {
+        Log.i(TAG, System.identityHashCode(this) + " initialized with a binder");
+        mUsesBinder = true;
+        mBinding = KeyguardBottomAreaViewBinder.bind(this, viewModel, falsingManager);
+    }
+
+    /**
+     * Initializes the {@link KeyguardBottomAreaView} with the given dependencies
+     *
+     * @deprecated Use
+     * {@link #init(KeyguardBottomAreaViewModel, FalsingManager)} instead
+     */
+    @Deprecated
+    public void init(
+            FalsingManager falsingManager,
+            QuickAccessWalletController controller,
+            ControlsComponent controlsComponent,
+            QRCodeScannerController qrCodeScannerController) {
+        if (mUsesBinder) {
+            return;
         }
 
-        @Override
-        public boolean performAccessibilityAction(View host, int action, Bundle args) {
-            if (action == ACTION_CLICK) {
-                if (host == mRightAffordanceView) {
-                    launchCamera(CAMERA_LAUNCH_SOURCE_AFFORDANCE);
-                    return true;
-                } else if (host == mLeftAffordanceView) {
-                    launchLeftAffordance();
-                    return true;
-                }
-            }
-            return super.performAccessibilityAction(host, action, args);
-        }
-    };
+        Log.i(TAG, "initialized without a binder");
+        mFalsingManager = falsingManager;
 
+        mQuickAccessWalletController = controller;
+        mQuickAccessWalletController.setupWalletChangeObservers(
+                mCardRetriever, WALLET_PREFERENCE_CHANGE, DEFAULT_PAYMENT_APP_CHANGE);
+        mQuickAccessWalletController.updateWalletPreference();
+        mQuickAccessWalletController.queryWalletCards(mCardRetriever);
+        updateWalletVisibility();
+
+        mControlsComponent = controlsComponent;
+        mControlsComponent.getControlsListingController().ifPresent(
+                c -> c.addCallback(mListingCallback));
+
+        mQRCodeScannerController = qrCodeScannerController;
+        mQRCodeScannerController.registerQRCodeScannerChangeObservers(
+                QRCodeScannerController.DEFAULT_QR_CODE_SCANNER_CHANGE,
+                QRCodeScannerController.QR_CODE_SCANNER_PREFERENCE_CHANGE);
+        updateQRCodeButtonVisibility();
+
+        updateAffordanceColors();
+    }
+
+    /**
+     * Initializes this instance of {@link KeyguardBottomAreaView} based on the given instance of
+     * another {@link KeyguardBottomAreaView}
+     */
     public void initFrom(KeyguardBottomAreaView oldBottomArea) {
-        setCentralSurfaces(oldBottomArea.mCentralSurfaces);
+        if (mUsesBinder) {
+            return;
+        }
 
         // if it exists, continue to use the original ambient indication container
         // instead of the newly inflated one
@@ -302,11 +234,11 @@
     @Override
     protected void onFinishInflate() {
         super.onFinishInflate();
-        mPreviewInflater = new PreviewInflater(mContext, new LockPatternUtils(mContext),
-                new ActivityIntentHelper(mContext));
+        if (mUsesBinder) {
+            return;
+        }
+
         mOverlayContainer = findViewById(R.id.overlay_container);
-        mRightAffordanceView = findViewById(R.id.camera_button);
-        mLeftAffordanceView = findViewById(R.id.left_button);
         mWalletButton = findViewById(R.id.wallet_button);
         mQRCodeScannerButton = findViewById(R.id.qr_code_scanner_button);
         mControlsButton = findViewById(R.id.controls_button);
@@ -318,18 +250,11 @@
                 R.dimen.keyguard_indication_margin_bottom);
         mBurnInYOffset = getResources().getDimensionPixelSize(
                 R.dimen.default_burn_in_prevention_offset);
-        updateCameraVisibility();
         mKeyguardStateController = Dependency.get(KeyguardStateController.class);
-        mKeyguardStateController.addCallback(this);
+        mKeyguardStateController.addCallback(mKeyguardStateCallback);
         setClipChildren(false);
         setClipToPadding(false);
-        mRightAffordanceView.setOnClickListener(this);
-        mLeftAffordanceView.setOnClickListener(this);
-        initAccessibility();
         mActivityStarter = Dependency.get(ActivityStarter.class);
-        mFlashlightController = Dependency.get(FlashlightController.class);
-        mAccessibilityController = Dependency.get(AccessibilityController.class);
-        mActivityIntentHelper = new ActivityIntentHelper(getContext());
 
         mIndicationPadding = getResources().getDimensionPixelSize(
                 R.dimen.keyguard_indication_area_padding);
@@ -338,51 +263,26 @@
         updateControlsVisibility();
     }
 
-    /**
-     * Set the container where the previews are rendered.
-     */
-    public void setPreviewContainer(ViewGroup previewContainer) {
-        mPreviewContainer = previewContainer;
-        inflateCameraPreview();
-        updateLeftAffordance();
-    }
-
     @Override
     protected void onAttachedToWindow() {
         super.onAttachedToWindow();
-        mAccessibilityController.addStateChangedCallback(this);
-        mRightExtension = Dependency.get(ExtensionController.class).newExtension(IntentButton.class)
-                .withPlugin(IntentButtonProvider.class, RIGHT_BUTTON_PLUGIN,
-                        p -> p.getIntentButton())
-                .withTunerFactory(new LockButtonFactory(mContext, LOCKSCREEN_RIGHT_BUTTON))
-                .withDefault(() -> new DefaultRightButton())
-                .withCallback(button -> setRightButton(button))
-                .build();
-        mLeftExtension = Dependency.get(ExtensionController.class).newExtension(IntentButton.class)
-                .withPlugin(IntentButtonProvider.class, LEFT_BUTTON_PLUGIN,
-                        p -> p.getIntentButton())
-                .withTunerFactory(new LockButtonFactory(mContext, LOCKSCREEN_LEFT_BUTTON))
-                .withDefault(() -> new DefaultLeftButton())
-                .withCallback(button -> setLeftButton(button))
-                .build();
+        if (mUsesBinder) {
+            return;
+        }
+
         final IntentFilter filter = new IntentFilter();
         filter.addAction(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED);
-        getContext().registerReceiverAsUser(mDevicePolicyReceiver,
-                UserHandle.ALL, filter, null, null);
-        mKeyguardUpdateMonitor = Dependency.get(KeyguardUpdateMonitor.class);
-        mKeyguardUpdateMonitor.registerCallback(mUpdateMonitorCallback);
-        mKeyguardStateController.addCallback(this);
+        mKeyguardStateController.addCallback(mKeyguardStateCallback);
     }
 
     @Override
     protected void onDetachedFromWindow() {
         super.onDetachedFromWindow();
-        mKeyguardStateController.removeCallback(this);
-        mAccessibilityController.removeStateChangedCallback(this);
-        mRightExtension.destroy();
-        mLeftExtension.destroy();
-        getContext().unregisterReceiver(mDevicePolicyReceiver);
-        mKeyguardUpdateMonitor.removeCallback(mUpdateMonitorCallback);
+        if (mUsesBinder) {
+            return;
+        }
+
+        mKeyguardStateController.removeCallback(mKeyguardStateCallback);
 
         if (mQuickAccessWalletController != null) {
             mQuickAccessWalletController.unregisterWalletChangeObservers(
@@ -401,14 +301,16 @@
         }
     }
 
-    private void initAccessibility() {
-        mLeftAffordanceView.setAccessibilityDelegate(mAccessibilityDelegate);
-        mRightAffordanceView.setAccessibilityDelegate(mAccessibilityDelegate);
-    }
-
     @Override
     protected void onConfigurationChanged(Configuration newConfig) {
         super.onConfigurationChanged(newConfig);
+        if (mUsesBinder) {
+            if (mBinding != null) {
+                mBinding.onConfigurationChanged();
+            }
+            return;
+        }
+
         mIndicationBottomMargin = getResources().getDimensionPixelSize(
                 R.dimen.keyguard_indication_margin_bottom);
         mBurnInYOffset = getResources().getDimensionPixelSize(
@@ -427,19 +329,7 @@
                 getResources().getDimensionPixelSize(
                         com.android.internal.R.dimen.text_size_small_material));
 
-        ViewGroup.LayoutParams lp = mRightAffordanceView.getLayoutParams();
-        lp.width = getResources().getDimensionPixelSize(R.dimen.keyguard_affordance_width);
-        lp.height = getResources().getDimensionPixelSize(R.dimen.keyguard_affordance_height);
-        mRightAffordanceView.setLayoutParams(lp);
-        updateRightAffordanceIcon();
-
-        lp = mLeftAffordanceView.getLayoutParams();
-        lp.width = getResources().getDimensionPixelSize(R.dimen.keyguard_affordance_width);
-        lp.height = getResources().getDimensionPixelSize(R.dimen.keyguard_affordance_height);
-        mLeftAffordanceView.setLayoutParams(lp);
-        updateLeftAffordanceIcon();
-
-        lp = mWalletButton.getLayoutParams();
+        ViewGroup.LayoutParams lp = mWalletButton.getLayoutParams();
         lp.width = getResources().getDimensionPixelSize(R.dimen.keyguard_affordance_fixed_width);
         lp.height = getResources().getDimensionPixelSize(R.dimen.keyguard_affordance_fixed_height);
         mWalletButton.setLayoutParams(lp);
@@ -462,77 +352,11 @@
         updateAffordanceColors();
     }
 
-    private void updateRightAffordanceIcon() {
-        IconState state = mRightButton.getIcon();
-        mRightAffordanceView.setVisibility(!mDozing && state.isVisible ? View.VISIBLE : View.GONE);
-        if (state.drawable != mRightAffordanceView.getDrawable()
-                || state.tint != mRightAffordanceView.shouldTint()) {
-            mRightAffordanceView.setImageDrawable(state.drawable, state.tint);
-        }
-        mRightAffordanceView.setContentDescription(state.contentDescription);
-    }
-
-    public void setCentralSurfaces(CentralSurfaces centralSurfaces) {
-        mCentralSurfaces = centralSurfaces;
-        updateCameraVisibility(); // in case onFinishInflate() was called too early
-    }
-
-    public void setAffordanceHelper(KeyguardAffordanceHelper affordanceHelper) {
-        mAffordanceHelper = affordanceHelper;
-    }
-
-    public void setUserSetupComplete(boolean userSetupComplete) {
-        mUserSetupComplete = userSetupComplete;
-        updateCameraVisibility();
-        updateLeftAffordanceIcon();
-    }
-
-    private Intent getCameraIntent() {
-        return mRightButton.getIntent();
-    }
-
-    /**
-     * Resolves the intent to launch the camera application.
-     */
-    public ResolveInfo resolveCameraIntent() {
-        return mContext.getPackageManager().resolveActivityAsUser(getCameraIntent(),
-                PackageManager.MATCH_DEFAULT_ONLY,
-                KeyguardUpdateMonitor.getCurrentUser());
-    }
-
-    private void updateCameraVisibility() {
-        if (mRightAffordanceView == null) {
-            // Things are not set up yet; reply hazy, ask again later
-            return;
-        }
-        mRightAffordanceView.setVisibility(!mDozing && mShowCameraAffordance
-                && mRightButton.getIcon().isVisible ? View.VISIBLE : View.GONE);
-    }
-
-    /**
-     * Set an alternate icon for the left assist affordance (replace the mic icon)
-     */
-    public void setLeftAssistIcon(Drawable drawable) {
-        mLeftAssistIcon = drawable;
-        updateLeftAffordanceIcon();
-    }
-
-    private void updateLeftAffordanceIcon() {
-        if (!mShowLeftAffordance || mDozing) {
-            mLeftAffordanceView.setVisibility(GONE);
-            return;
-        }
-
-        IconState state = mLeftButton.getIcon();
-        mLeftAffordanceView.setVisibility(state.isVisible ? View.VISIBLE : View.GONE);
-        if (state.drawable != mLeftAffordanceView.getDrawable()
-                || state.tint != mLeftAffordanceView.shouldTint()) {
-            mLeftAffordanceView.setImageDrawable(state.drawable, state.tint);
-        }
-        mLeftAffordanceView.setContentDescription(state.contentDescription);
-    }
-
     private void updateWalletVisibility() {
+        if (mUsesBinder) {
+            return;
+        }
+
         if (mDozing
                 || mQuickAccessWalletController == null
                 || !mQuickAccessWalletController.isWalletEnabled()
@@ -550,6 +374,10 @@
     }
 
     private void updateControlsVisibility() {
+        if (mUsesBinder) {
+            return;
+        }
+
         if (mControlsComponent == null) return;
 
         mControlsButton.setImageResource(mControlsComponent.getTileImageId());
@@ -575,129 +403,11 @@
         }
     }
 
-    public boolean isLeftVoiceAssist() {
-        return mLeftIsVoiceAssist;
-    }
-
-    private boolean isPhoneVisible() {
-        PackageManager pm = mContext.getPackageManager();
-        return pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)
-                && pm.resolveActivity(PHONE_INTENT, 0) != null;
-    }
-
-    @Override
-    public void onStateChanged(boolean accessibilityEnabled, boolean touchExplorationEnabled) {
-        mRightAffordanceView.setClickable(touchExplorationEnabled);
-        mLeftAffordanceView.setClickable(touchExplorationEnabled);
-        mRightAffordanceView.setFocusable(accessibilityEnabled);
-        mLeftAffordanceView.setFocusable(accessibilityEnabled);
-    }
-
-    @Override
-    public void onClick(View v) {
-        if (v == mRightAffordanceView) {
-            launchCamera(CAMERA_LAUNCH_SOURCE_AFFORDANCE);
-        } else if (v == mLeftAffordanceView) {
-            launchLeftAffordance();
-        }
-    }
-
-    public void bindCameraPrewarmService() {
-        Intent intent = getCameraIntent();
-        ActivityInfo targetInfo = mActivityIntentHelper.getTargetActivityInfo(intent,
-                KeyguardUpdateMonitor.getCurrentUser(), true /* onlyDirectBootAware */);
-        if (targetInfo != null && targetInfo.metaData != null) {
-            String clazz = targetInfo.metaData.getString(
-                    MediaStore.META_DATA_STILL_IMAGE_CAMERA_PREWARM_SERVICE);
-            if (clazz != null) {
-                Intent serviceIntent = new Intent();
-                serviceIntent.setClassName(targetInfo.packageName, clazz);
-                serviceIntent.setAction(CameraPrewarmService.ACTION_PREWARM);
-                try {
-                    if (getContext().bindServiceAsUser(serviceIntent, mPrewarmConnection,
-                            Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE,
-                            new UserHandle(UserHandle.USER_CURRENT))) {
-                        mPrewarmBound = true;
-                    }
-                } catch (SecurityException e) {
-                    Log.w(TAG, "Unable to bind to prewarm service package=" + targetInfo.packageName
-                            + " class=" + clazz, e);
-                }
-            }
-        }
-    }
-
-    public void unbindCameraPrewarmService(boolean launched) {
-        if (mPrewarmBound) {
-            if (mPrewarmMessenger != null && launched) {
-                try {
-                    mPrewarmMessenger.send(Message.obtain(null /* handler */,
-                            CameraPrewarmService.MSG_CAMERA_FIRED));
-                } catch (RemoteException e) {
-                    Log.w(TAG, "Error sending camera fired message", e);
-                }
-            }
-            mContext.unbindService(mPrewarmConnection);
-            mPrewarmBound = false;
-        }
-    }
-
-    public void launchCamera(String source) {
-        final Intent intent = getCameraIntent();
-        intent.putExtra(EXTRA_CAMERA_LAUNCH_SOURCE, source);
-        boolean wouldLaunchResolverActivity = mActivityIntentHelper.wouldLaunchResolverActivity(
-                intent, KeyguardUpdateMonitor.getCurrentUser());
-        if (CameraIntents.isSecureCameraIntent(intent) && !wouldLaunchResolverActivity) {
-            AsyncTask.execute(new Runnable() {
-                @Override
-                public void run() {
-                    int result = ActivityManager.START_CANCELED;
-
-                    // Normally an activity will set it's requested rotation
-                    // animation on its window. However when launching an activity
-                    // causes the orientation to change this is too late. In these cases
-                    // the default animation is used. This doesn't look good for
-                    // the camera (as it rotates the camera contents out of sync
-                    // with physical reality). So, we ask the WindowManager to
-                    // force the crossfade animation if an orientation change
-                    // happens to occur during the launch.
-                    ActivityOptions o = ActivityOptions.makeBasic();
-                    o.setDisallowEnterPictureInPictureWhileLaunching(true);
-                    o.setRotationAnimationHint(
-                            WindowManager.LayoutParams.ROTATION_ANIMATION_SEAMLESS);
-                    try {
-                        result = ActivityTaskManager.getService().startActivityAsUser(
-                                null, getContext().getBasePackageName(),
-                                getContext().getAttributionTag(), intent,
-                                intent.resolveTypeIfNeeded(getContext().getContentResolver()),
-                                null, null, 0, Intent.FLAG_ACTIVITY_NEW_TASK, null, o.toBundle(),
-                                UserHandle.CURRENT.getIdentifier());
-                    } catch (RemoteException e) {
-                        Log.w(TAG, "Unable to start camera activity", e);
-                    }
-                    final boolean launched = isSuccessfulLaunch(result);
-                    post(new Runnable() {
-                        @Override
-                        public void run() {
-                            unbindCameraPrewarmService(launched);
-                        }
-                    });
-                }
-            });
-        } else {
-            // We need to delay starting the activity because ResolverActivity finishes itself if
-            // launched behind lockscreen.
-            mActivityStarter.startActivity(intent, false /* dismissShade */,
-                    new ActivityStarter.Callback() {
-                        @Override
-                        public void onActivityStarted(int resultCode) {
-                            unbindCameraPrewarmService(isSuccessfulLaunch(resultCode));
-                        }
-                    });
-        }
-    }
-
     public void setDarkAmount(float darkAmount) {
+        if (mUsesBinder) {
+            return;
+        }
+
         if (darkAmount == mDarkAmount) {
             return;
         }
@@ -705,85 +415,21 @@
         dozeTimeTick();
     }
 
-    private static boolean isSuccessfulLaunch(int result) {
-        return result == ActivityManager.START_SUCCESS
-                || result == ActivityManager.START_DELIVERED_TO_TOP
-                || result == ActivityManager.START_TASK_TO_FRONT;
-    }
-
-    public void launchLeftAffordance() {
-        if (mLeftIsVoiceAssist) {
-            launchVoiceAssist();
-        } else {
-            launchPhone();
+    /**
+     * Returns a list of animators to use to animate the indication areas.
+     */
+    public List<ViewPropertyAnimator> getIndicationAreaAnimators() {
+        if (mUsesBinder) {
+            return checkNotNull(mBinding).getIndicationAreaAnimators();
         }
-    }
 
-    @VisibleForTesting
-    void launchVoiceAssist() {
-        Runnable runnable = new Runnable() {
-            @Override
-            public void run() {
-                Dependency.get(AssistManager.class).launchVoiceAssistFromKeyguard();
-            }
-        };
-        if (!mKeyguardStateController.canDismissLockScreen()) {
-            Dependency.get(Dependency.BACKGROUND_EXECUTOR).execute(runnable);
-        } else {
-            boolean dismissShade = !TextUtils.isEmpty(mRightButtonStr)
-                    && Dependency.get(TunerService.class).getValue(LOCKSCREEN_RIGHT_UNLOCK, 1) != 0;
-            mCentralSurfaces.executeRunnableDismissingKeyguard(runnable, null /* cancelAction */,
-                    dismissShade, false /* afterKeyguardGone */, true /* deferred */);
+        List<ViewPropertyAnimator> animators =
+                new ArrayList<>(mAmbientIndicationArea != null ? 2 : 1);
+        animators.add(mIndicationArea.animate());
+        if (mAmbientIndicationArea != null) {
+            animators.add(mAmbientIndicationArea.animate());
         }
-    }
-
-    private boolean canLaunchVoiceAssist() {
-        return Dependency.get(AssistManager.class).canVoiceAssistBeLaunchedFromKeyguard();
-    }
-
-    private void launchPhone() {
-        final TelecomManager tm = TelecomManager.from(mContext);
-        if (tm.isInCall()) {
-            AsyncTask.execute(new Runnable() {
-                @Override
-                public void run() {
-                    tm.showInCallScreen(false /* showDialpad */);
-                }
-            });
-        } else {
-            boolean dismissShade = !TextUtils.isEmpty(mLeftButtonStr)
-                    && Dependency.get(TunerService.class).getValue(LOCKSCREEN_LEFT_UNLOCK, 1) != 0;
-            mActivityStarter.startActivity(mLeftButton.getIntent(), dismissShade);
-        }
-    }
-
-
-    @Override
-    protected void onVisibilityChanged(View changedView, int visibility) {
-        super.onVisibilityChanged(changedView, visibility);
-        if (changedView == this && visibility == VISIBLE) {
-            updateCameraVisibility();
-        }
-    }
-
-    public KeyguardAffordanceView getLeftView() {
-        return mLeftAffordanceView;
-    }
-
-    public KeyguardAffordanceView getRightView() {
-        return mRightAffordanceView;
-    }
-
-    public View getLeftPreview() {
-        return mLeftPreview;
-    }
-
-    public View getRightPreview() {
-        return mCameraPreview;
-    }
-
-    public View getIndicationArea() {
-        return mIndicationArea;
+        return animators;
     }
 
     @Override
@@ -791,67 +437,7 @@
         return false;
     }
 
-    @Override
-    public void onUnlockedChanged() {
-        updateCameraVisibility();
-    }
-
-    @Override
-    public void onKeyguardShowingChanged() {
-        if (mKeyguardStateController.isShowing()) {
-            if (mQuickAccessWalletController != null) {
-                mQuickAccessWalletController.queryWalletCards(mCardRetriever);
-            }
-        }
-    }
-
-    private void inflateCameraPreview() {
-        if (mPreviewContainer == null) {
-            return;
-        }
-        View previewBefore = mCameraPreview;
-        boolean visibleBefore = false;
-        if (previewBefore != null) {
-            mPreviewContainer.removeView(previewBefore);
-            visibleBefore = previewBefore.getVisibility() == View.VISIBLE;
-        }
-        mCameraPreview = mPreviewInflater.inflatePreview(getCameraIntent());
-        if (mCameraPreview != null) {
-            mPreviewContainer.addView(mCameraPreview);
-            mCameraPreview.setVisibility(visibleBefore ? View.VISIBLE : View.INVISIBLE);
-        }
-        if (mAffordanceHelper != null) {
-            mAffordanceHelper.updatePreviews();
-        }
-    }
-
-    private void updateLeftPreview() {
-        if (mPreviewContainer == null) {
-            return;
-        }
-        View previewBefore = mLeftPreview;
-        if (previewBefore != null) {
-            mPreviewContainer.removeView(previewBefore);
-        }
-
-        if (mLeftIsVoiceAssist) {
-            if (Dependency.get(AssistManager.class).getVoiceInteractorComponentName() != null) {
-                mLeftPreview = mPreviewInflater.inflatePreviewFromService(
-                        Dependency.get(AssistManager.class).getVoiceInteractorComponentName());
-            }
-        } else {
-            mLeftPreview = mPreviewInflater.inflatePreview(mLeftButton.getIntent());
-        }
-        if (mLeftPreview != null) {
-            mPreviewContainer.addView(mLeftPreview);
-            mLeftPreview.setVisibility(View.INVISIBLE);
-        }
-        if (mAffordanceHelper != null) {
-            mAffordanceHelper.updatePreviews();
-        }
-    }
-
-    public void startFinishDozeAnimation() {
+    private void startFinishDozeAnimation() {
         long delay = 0;
         if (mWalletButton.getVisibility() == View.VISIBLE) {
             startFinishDozeAnimationElement(mWalletButton, delay);
@@ -862,13 +448,6 @@
         if (mControlsButton.getVisibility() == View.VISIBLE) {
             startFinishDozeAnimationElement(mControlsButton, delay);
         }
-        if (mLeftAffordanceView.getVisibility() == View.VISIBLE) {
-            startFinishDozeAnimationElement(mLeftAffordanceView, delay);
-            delay += DOZE_ANIMATION_STAGGER_DELAY;
-        }
-        if (mRightAffordanceView.getVisibility() == View.VISIBLE) {
-            startFinishDozeAnimationElement(mRightAffordanceView, delay);
-        }
     }
 
     private void startFinishDozeAnimationElement(View element, long delay) {
@@ -882,58 +461,13 @@
                 .setDuration(DOZE_ANIMATION_ELEMENT_DURATION);
     }
 
-    private final BroadcastReceiver mDevicePolicyReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            post(new Runnable() {
-                @Override
-                public void run() {
-                    updateCameraVisibility();
-                }
-            });
-        }
-    };
-
-    private final KeyguardUpdateMonitorCallback mUpdateMonitorCallback =
-            new KeyguardUpdateMonitorCallback() {
-                @Override
-                public void onUserSwitchComplete(int userId) {
-                    updateCameraVisibility();
-                }
-
-                @Override
-                public void onUserUnlocked() {
-                    inflateCameraPreview();
-                    updateCameraVisibility();
-                    updateLeftAffordance();
-                }
-            };
-
-    public void updateLeftAffordance() {
-        updateLeftAffordanceIcon();
-        updateLeftPreview();
-    }
-
-    private void setRightButton(IntentButton button) {
-        mRightButton = button;
-        updateRightAffordanceIcon();
-        updateCameraVisibility();
-        inflateCameraPreview();
-    }
-
-    private void setLeftButton(IntentButton button) {
-        mLeftButton = button;
-        if (!(mLeftButton instanceof DefaultLeftButton)) {
-            mLeftIsVoiceAssist = false;
-        }
-        updateLeftAffordance();
-    }
-
     public void setDozing(boolean dozing, boolean animate) {
+        if (mUsesBinder) {
+            return;
+        }
+
         mDozing = dozing;
 
-        updateCameraVisibility();
-        updateLeftAffordanceIcon();
         updateWalletVisibility();
         updateControlsVisibility();
         updateQRCodeButtonVisibility();
@@ -949,6 +483,10 @@
     }
 
     public void dozeTimeTick() {
+        if (mUsesBinder) {
+            return;
+        }
+
         int burnInYOffset = getBurnInOffset(mBurnInYOffset * 2, false /* xAxis */)
                 - mBurnInYOffset;
         mIndicationArea.setTranslationY(burnInYOffset * mDarkAmount);
@@ -958,6 +496,10 @@
     }
 
     public void setAntiBurnInOffsetX(int burnInXOffset) {
+        if (mUsesBinder) {
+            return;
+        }
+
         if (mBurnInXOffset == burnInXOffset) {
             return;
         }
@@ -969,80 +511,27 @@
     }
 
     /**
-     * Sets the alpha of the indication areas and affordances, excluding the lock icon.
+     * Sets the alpha of various sub-components, for example the indication areas and bottom quick
+     * action buttons. Does not set the alpha of the lock icon.
      */
-    public void setAffordanceAlpha(float alpha) {
-        mLeftAffordanceView.setAlpha(alpha);
-        mRightAffordanceView.setAlpha(alpha);
+    public void setComponentAlphas(float alpha) {
+        if (mUsesBinder) {
+            return;
+        }
+
+        setImportantForAccessibility(
+                alpha == 0f
+                        ? View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
+                        : View.IMPORTANT_FOR_ACCESSIBILITY_AUTO);
+        if (mAmbientIndicationArea != null) {
+            mAmbientIndicationArea.setAlpha(alpha);
+        }
         mIndicationArea.setAlpha(alpha);
         mWalletButton.setAlpha(alpha);
         mQRCodeScannerButton.setAlpha(alpha);
         mControlsButton.setAlpha(alpha);
     }
 
-    private class DefaultLeftButton implements IntentButton {
-
-        private IconState mIconState = new IconState();
-
-        @Override
-        public IconState getIcon() {
-            mLeftIsVoiceAssist = canLaunchVoiceAssist();
-            if (mLeftIsVoiceAssist) {
-                mIconState.isVisible = mUserSetupComplete && mShowLeftAffordance;
-                if (mLeftAssistIcon == null) {
-                    mIconState.drawable = mContext.getDrawable(R.drawable.ic_mic_26dp);
-                } else {
-                    mIconState.drawable = mLeftAssistIcon;
-                }
-                mIconState.contentDescription = mContext.getString(
-                        R.string.accessibility_voice_assist_button);
-            } else {
-                mIconState.isVisible = mUserSetupComplete && mShowLeftAffordance
-                        && isPhoneVisible();
-                mIconState.drawable = mContext.getDrawable(
-                        com.android.internal.R.drawable.ic_phone);
-                mIconState.contentDescription = mContext.getString(
-                        R.string.accessibility_phone_button);
-            }
-            return mIconState;
-        }
-
-        @Override
-        public Intent getIntent() {
-            return PHONE_INTENT;
-        }
-    }
-
-    private class DefaultRightButton implements IntentButton {
-
-        private IconState mIconState = new IconState();
-
-        @Override
-        public IconState getIcon() {
-            boolean isCameraDisabled = (mCentralSurfaces != null)
-                    && !mCentralSurfaces.isCameraAllowedByAdmin();
-            mIconState.isVisible = !isCameraDisabled
-                    && mShowCameraAffordance
-                    && mUserSetupComplete
-                    && resolveCameraIntent() != null;
-            mIconState.drawable = mContext.getDrawable(R.drawable.ic_camera_alt_24dp);
-            mIconState.contentDescription =
-                    mContext.getString(R.string.accessibility_camera_button);
-            return mIconState;
-        }
-
-        @Override
-        public Intent getIntent() {
-            boolean canDismissLs = mKeyguardStateController.canDismissLockScreen();
-            boolean secure = mKeyguardStateController.isMethodSecure();
-            if (secure && !canDismissLs) {
-                return CameraIntents.getSecureCameraIntent(getContext());
-            } else {
-                return CameraIntents.getInsecureCameraIntent(getContext());
-            }
-        }
-    }
-
     @Override
     public WindowInsets onApplyWindowInsets(WindowInsets insets) {
         int bottom = insets.getDisplayCutout() != null
@@ -1055,39 +544,11 @@
         return insets;
     }
 
-    /** Set the falsing manager */
-    public void setFalsingManager(FalsingManager falsingManager) {
-        mFalsingManager = falsingManager;
-    }
-
-    /**
-     * Initialize the wallet feature, only enabling if the feature is enabled within the platform.
-     */
-    public void initWallet(
-            QuickAccessWalletController controller) {
-        mQuickAccessWalletController = controller;
-        mQuickAccessWalletController.setupWalletChangeObservers(
-                mCardRetriever, WALLET_PREFERENCE_CHANGE, DEFAULT_PAYMENT_APP_CHANGE);
-        mQuickAccessWalletController.updateWalletPreference();
-        mQuickAccessWalletController.queryWalletCards(mCardRetriever);
-
-        updateWalletVisibility();
-        updateAffordanceColors();
-    }
-
-    /**
-     * Initialize the qr code scanner feature, controlled by QRCodeScannerController.
-     */
-    public void initQRCodeScanner(QRCodeScannerController qrCodeScannerController) {
-        mQRCodeScannerController = qrCodeScannerController;
-        mQRCodeScannerController.registerQRCodeScannerChangeObservers(
-                QRCodeScannerController.DEFAULT_QR_CODE_SCANNER_CHANGE,
-                QRCodeScannerController.QR_CODE_SCANNER_PREFERENCE_CHANGE);
-        updateQRCodeButtonVisibility();
-        updateAffordanceColors();
-    }
-
     private void updateQRCodeButtonVisibility() {
+        if (mUsesBinder) {
+            return;
+        }
+
         if (mQuickAccessWalletController != null
                 && mQuickAccessWalletController.isWalletEnabled()) {
             // Don't enable if quick access wallet is enabled
@@ -1108,6 +569,10 @@
     }
 
     private void onQRCodeScannerClicked(View view) {
+        if (mUsesBinder) {
+            return;
+        }
+
         Intent intent = mQRCodeScannerController.getIntent();
         if (intent != null) {
             try {
@@ -1127,6 +592,10 @@
     }
 
     private void updateAffordanceColors() {
+        if (mUsesBinder) {
+            return;
+        }
+
         int iconColor = Utils.getColorAttrDefaultColor(
                 mContext,
                 com.android.internal.R.attr.textColorPrimary);
@@ -1142,18 +611,11 @@
         mQRCodeScannerButton.setBackgroundTintList(bgColor);
     }
 
-    /**
-      * Initialize controls via the ControlsComponent
-      */
-    public void initControls(ControlsComponent controlsComponent) {
-        mControlsComponent = controlsComponent;
-        mControlsComponent.getControlsListingController().ifPresent(
-                c -> c.addCallback(mListingCallback));
-
-        updateAffordanceColors();
-    }
-
     private void onWalletClick(View v) {
+        if (mUsesBinder) {
+            return;
+        }
+
         // More coming here; need to inform the user about how to proceed
         if (mFalsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) {
             return;
@@ -1169,6 +631,10 @@
     }
 
     private void onControlsClick(View v) {
+        if (mUsesBinder) {
+            return;
+        }
+
         if (mFalsingManager.isFalseTap(FalsingManager.LOW_PENALTY)) {
             return;
         }
@@ -1195,10 +661,10 @@
         public void onWalletCardsRetrieved(@NonNull GetWalletCardsResponse response) {
             mHasCard = !response.getWalletCards().isEmpty();
             Drawable tileIcon = mQuickAccessWalletController.getWalletClient().getTileIcon();
+            if (tileIcon != null) {
+                mWalletButton.setImageDrawable(tileIcon);
+            }
             post(() -> {
-                if (tileIcon != null) {
-                    mWalletButton.setImageDrawable(tileIcon);
-                }
                 updateWalletVisibility();
                 updateAffordanceColors();
             });
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaViewController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaViewController.kt
new file mode 100644
index 0000000..3942dae
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaViewController.kt
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.util.ViewController
+import javax.inject.Inject
+
+class KeyguardBottomAreaViewController @Inject constructor(view: KeyguardBottomAreaView) :
+    ViewController<KeyguardBottomAreaView> (view) {
+    override fun onViewAttached() {
+    }
+
+    override fun onViewDetached() {
+    }
+
+    fun getView(): KeyguardBottomAreaView {
+        // TODO: remove this method.
+        return mView
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
index 9b88e26..0001cd0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
@@ -266,6 +266,9 @@
 
     private void setVisibility(@View.Visibility int visibility) {
         mContainer.setVisibility(visibility);
+        if (mKeyguardViewController != null) {
+            mKeyguardViewController.onBouncerVisibilityChanged(visibility);
+        }
         dispatchVisibilityChanged();
     }
 
@@ -641,7 +644,7 @@
         /**
          * Invoked when the bouncer expansion reaches {@link KeyguardBouncer#EXPANSION_VISIBLE}.
          * This is NOT called each time the bouncer is shown, but rather only when the fully
-         * shown amount has changed based on the panel expansion. The bouncer is visibility
+         * shown amount has changed based on the panel expansion. The bouncer's visibility
          * can still change when the expansion amount hasn't changed.
          * See {@link KeyguardBouncer#isShowing()} for the checks for the bouncer showing state.
          */
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 629aa03..01af486 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java
@@ -27,6 +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.statusbar.policy.KeyguardUserSwitcherListView;
 
 /**
@@ -309,9 +310,12 @@
      */
     private float getClockAlpha(int y) {
         float alphaKeyguard = Math.max(0, y / Math.max(1f, getClockY(1f, mDarkAmount)));
-        float qsAlphaFactor = MathUtils.saturate(mQsExpansion / 0.3f);
-        qsAlphaFactor = 1f - qsAlphaFactor;
-        alphaKeyguard *= qsAlphaFactor;
+        if (!mIsSplitShade) {
+            // in split shade QS are always expanded so this factor shouldn't apply
+            float qsAlphaFactor = MathUtils.saturate(mQsExpansion / 0.3f);
+            qsAlphaFactor = 1f - qsAlphaFactor;
+            alphaKeyguard *= qsAlphaFactor;
+        }
         alphaKeyguard = Interpolators.ACCELERATE.getInterpolation(alphaKeyguard);
         return MathUtils.lerp(alphaKeyguard, 1f, mDarkAmount);
     }
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 def574c..f06b346 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java
@@ -42,6 +42,7 @@
 import com.android.systemui.battery.BatteryMeterViewController;
 import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.shade.NotificationPanelViewController;
 import com.android.systemui.statusbar.StatusBarState;
 import com.android.systemui.statusbar.SysuiStatusBarStateController;
 import com.android.systemui.statusbar.events.SystemStatusAnimationCallback;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LargeScreenShadeHeaderController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LargeScreenShadeHeaderController.kt
deleted file mode 100644
index 178c17d..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LargeScreenShadeHeaderController.kt
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.statusbar.phone
-
-import android.app.StatusBarManager
-import android.view.View
-import android.widget.TextView
-import androidx.constraintlayout.motion.widget.MotionLayout
-import com.android.settingslib.Utils
-import com.android.systemui.Dumpable
-import com.android.systemui.FontSizeUtils
-import com.android.systemui.R
-import com.android.systemui.animation.ShadeInterpolation
-import com.android.systemui.battery.BatteryMeterView
-import com.android.systemui.battery.BatteryMeterViewController
-import com.android.systemui.dump.DumpManager
-import com.android.systemui.flags.FeatureFlags
-import com.android.systemui.flags.Flags
-import com.android.systemui.qs.ChipVisibilityListener
-import com.android.systemui.qs.HeaderPrivacyIconsController
-import com.android.systemui.qs.carrier.QSCarrierGroup
-import com.android.systemui.qs.carrier.QSCarrierGroupController
-import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent.CentralSurfacesScope
-import com.android.systemui.statusbar.phone.dagger.StatusBarViewModule.LARGE_SCREEN_BATTERY_CONTROLLER
-import com.android.systemui.statusbar.phone.dagger.StatusBarViewModule.LARGE_SCREEN_SHADE_HEADER
-import com.android.systemui.statusbar.policy.ConfigurationController
-import java.io.PrintWriter
-import javax.inject.Inject
-import javax.inject.Named
-
-@CentralSurfacesScope
-class LargeScreenShadeHeaderController @Inject constructor(
-    @Named(LARGE_SCREEN_SHADE_HEADER) private val header: View,
-    private val statusBarIconController: StatusBarIconController,
-    private val privacyIconsController: HeaderPrivacyIconsController,
-    private val configurationController: ConfigurationController,
-    qsCarrierGroupControllerBuilder: QSCarrierGroupController.Builder,
-    featureFlags: FeatureFlags,
-    @Named(LARGE_SCREEN_BATTERY_CONTROLLER) batteryMeterViewController: BatteryMeterViewController,
-    dumpManager: DumpManager
-) : Dumpable {
-
-    companion object {
-        private val HEADER_TRANSITION_ID = R.id.header_transition
-        private val LARGE_SCREEN_HEADER_TRANSITION_ID = R.id.large_screen_header_transition
-        private val QQS_HEADER_CONSTRAINT = R.id.qqs_header_constraint
-        private val QS_HEADER_CONSTRAINT = R.id.qs_header_constraint
-        private val LARGE_SCREEN_HEADER_CONSTRAINT = R.id.large_screen_header_constraint
-
-        private fun Int.stateToString() = when (this) {
-            QQS_HEADER_CONSTRAINT -> "QQS Header"
-            QS_HEADER_CONSTRAINT -> "QS Header"
-            LARGE_SCREEN_HEADER_CONSTRAINT -> "Large Screen Header"
-            else -> "Unknown state"
-        }
-    }
-
-    private val combinedHeaders = featureFlags.isEnabled(Flags.COMBINED_QS_HEADERS)
-    private val iconManager: StatusBarIconController.TintedIconManager
-    private val iconContainer: StatusIconContainer
-    private val carrierIconSlots: List<String>
-    private val qsCarrierGroupController: QSCarrierGroupController
-    private val clock: TextView = header.findViewById(R.id.clock)
-    private val date: TextView = header.findViewById(R.id.date)
-    private val qsCarrierGroup: QSCarrierGroup = header.findViewById(R.id.carrier_group)
-
-    private var qsDisabled = false
-
-    private var visible = false
-        set(value) {
-            if (field == value) {
-                return
-            }
-            field = value
-            updateListeners()
-        }
-
-    var shadeExpanded = false
-        set(value) {
-            if (field == value) {
-                return
-            }
-            field = value
-            onShadeExpandedChanged()
-        }
-
-    var active = false
-        set(value) {
-            if (field == value) {
-                return
-            }
-            field = value
-            onHeaderStateChanged()
-        }
-
-    var shadeExpandedFraction = -1f
-        set(value) {
-            if (visible && field != value) {
-                header.alpha = ShadeInterpolation.getContentAlpha(value)
-                field = value
-            }
-        }
-
-    var qsExpandedFraction = -1f
-        set(value) {
-            if (visible && field != value) {
-                field = value
-                updateVisibility()
-                updatePosition()
-            }
-        }
-
-    var qsScrollY = 0
-        set(value) {
-            if (field != value) {
-                field = value
-                updateScrollY()
-            }
-        }
-
-    private val chipVisibilityListener: ChipVisibilityListener = object : ChipVisibilityListener {
-        override fun onChipVisibilityRefreshed(visible: Boolean) {
-            if (header is MotionLayout) {
-                val state = header.getConstraintSet(QQS_HEADER_CONSTRAINT).apply {
-                    setAlpha(R.id.statusIcons, if (visible) 0f else 1f)
-                    setAlpha(R.id.batteryRemainingIcon, if (visible) 0f else 1f)
-                }
-                header.updateState(QQS_HEADER_CONSTRAINT, state)
-            }
-        }
-    }
-
-    init {
-        if (header is MotionLayout) {
-            val context = header.context
-            val resources = header.resources
-            header.getConstraintSet(QQS_HEADER_CONSTRAINT)
-                    .load(context, resources.getXml(R.xml.qqs_header))
-            header.getConstraintSet(QS_HEADER_CONSTRAINT)
-                    .load(context, resources.getXml(R.xml.qs_header))
-            header.getConstraintSet(LARGE_SCREEN_HEADER_CONSTRAINT)
-                    .load(context, resources.getXml(R.xml.large_screen_shade_header))
-            privacyIconsController.chipVisibilityListener = chipVisibilityListener
-        }
-
-        bindConfigurationListener()
-
-        batteryMeterViewController.init()
-        val batteryIcon: BatteryMeterView = header.findViewById(R.id.batteryRemainingIcon)
-
-        // battery settings same as in QS icons
-        batteryMeterViewController.ignoreTunerUpdates()
-        batteryIcon.setPercentShowMode(BatteryMeterView.MODE_ESTIMATE)
-
-        iconContainer = header.findViewById(R.id.statusIcons)
-        iconManager = StatusBarIconController.TintedIconManager(iconContainer, featureFlags)
-        iconManager.setTint(Utils.getColorAttrDefaultColor(header.context,
-                android.R.attr.textColorPrimary))
-
-        carrierIconSlots = if (featureFlags.isEnabled(Flags.COMBINED_STATUS_BAR_SIGNAL_ICONS)) {
-            listOf(
-                header.context.getString(com.android.internal.R.string.status_bar_no_calling),
-                header.context.getString(com.android.internal.R.string.status_bar_call_strength)
-            )
-        } else {
-            listOf(header.context.getString(com.android.internal.R.string.status_bar_mobile))
-        }
-        qsCarrierGroupController = qsCarrierGroupControllerBuilder
-                .setQSCarrierGroup(header.findViewById(R.id.carrier_group))
-                .build()
-
-        dumpManager.registerDumpable(this)
-
-        updateVisibility()
-        updateConstraints()
-    }
-
-    fun disable(state1: Int, state2: Int, animate: Boolean) {
-        val disabled = state2 and StatusBarManager.DISABLE2_QUICK_SETTINGS != 0
-        if (disabled == qsDisabled) return
-        qsDisabled = disabled
-        updateVisibility()
-    }
-
-    private fun updateScrollY() {
-        if (!active && combinedHeaders) {
-            header.scrollY = qsScrollY
-        }
-    }
-
-    private fun bindConfigurationListener() {
-        val listener = object : ConfigurationController.ConfigurationListener {
-            override fun onDensityOrFontScaleChanged() {
-                val qsStatusStyle = R.style.TextAppearance_QS_Status
-                FontSizeUtils.updateFontSizeFromStyle(clock, qsStatusStyle)
-                FontSizeUtils.updateFontSizeFromStyle(date, qsStatusStyle)
-                qsCarrierGroup.updateTextAppearance(qsStatusStyle)
-            }
-        }
-        configurationController.addCallback(listener)
-    }
-
-    private fun onShadeExpandedChanged() {
-        if (shadeExpanded) {
-            privacyIconsController.startListening()
-        } else {
-            privacyIconsController.stopListening()
-        }
-        updateVisibility()
-        updatePosition()
-    }
-
-    private fun onHeaderStateChanged() {
-        if (active || combinedHeaders) {
-            privacyIconsController.onParentVisible()
-        } else {
-            privacyIconsController.onParentInvisible()
-        }
-        updateVisibility()
-        updateConstraints()
-    }
-
-    private fun updateVisibility() {
-        val visibility = if (!active && !combinedHeaders || qsDisabled) {
-            View.GONE
-        } else if (shadeExpanded) {
-            View.VISIBLE
-        } else {
-            View.INVISIBLE
-        }
-        if (header.visibility != visibility) {
-            header.visibility = visibility
-            visible = visibility == View.VISIBLE
-        }
-    }
-
-    private fun updateConstraints() {
-        if (!combinedHeaders) {
-            return
-        }
-        header as MotionLayout
-        if (active) {
-            header.setTransition(LARGE_SCREEN_HEADER_TRANSITION_ID)
-        } else {
-            header.setTransition(HEADER_TRANSITION_ID)
-            header.transitionToStart()
-            updatePosition()
-            updateScrollY()
-        }
-    }
-
-    private fun updatePosition() {
-        if (header is MotionLayout && !active && visible) {
-            header.setProgress(qsExpandedFraction)
-        }
-    }
-
-    private fun updateListeners() {
-        qsCarrierGroupController.setListening(visible)
-        if (visible) {
-            updateSingleCarrier(qsCarrierGroupController.isSingleCarrier)
-            qsCarrierGroupController.setOnSingleCarrierChangedListener { updateSingleCarrier(it) }
-            statusBarIconController.addIconGroup(iconManager)
-        } else {
-            qsCarrierGroupController.setOnSingleCarrierChangedListener(null)
-            statusBarIconController.removeIconGroup(iconManager)
-        }
-    }
-
-    private fun updateSingleCarrier(singleCarrier: Boolean) {
-        if (singleCarrier) {
-            iconContainer.removeIgnoredSlots(carrierIconSlots)
-        } else {
-            iconContainer.addIgnoredSlots(carrierIconSlots)
-        }
-    }
-
-    override fun dump(pw: PrintWriter, args: Array<out String>) {
-        pw.println("visible: $visible")
-        pw.println("shadeExpanded: $shadeExpanded")
-        pw.println("shadeExpandedFraction: $shadeExpandedFraction")
-        pw.println("active: $active")
-        pw.println("qsExpandedFraction: $qsExpandedFraction")
-        pw.println("qsScrollY: $qsScrollY")
-        if (combinedHeaders) {
-            header as MotionLayout
-            pw.println("currentState: ${header.currentState.stateToString()}")
-        }
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxAppearanceCalculator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxAppearanceCalculator.kt
new file mode 100644
index 0000000..4496607
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxAppearanceCalculator.kt
@@ -0,0 +1,231 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 android.annotation.ColorInt
+import android.graphics.Rect
+import android.view.InsetsFlags
+import android.view.ViewDebug
+import android.view.WindowInsetsController
+import android.view.WindowInsetsController.APPEARANCE_SEMI_TRANSPARENT_STATUS_BARS
+import android.view.WindowInsetsController.Appearance
+import com.android.internal.statusbar.LetterboxDetails
+import com.android.internal.util.ContrastColorUtil
+import com.android.internal.view.AppearanceRegion
+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
+import javax.inject.Inject
+
+class LetterboxAppearance(
+    @Appearance val appearance: Int,
+    val appearanceRegions: Array<AppearanceRegion>
+) {
+    override fun toString(): String {
+        val appearanceString =
+                ViewDebug.flagsToString(InsetsFlags::class.java, "appearance", appearance)
+        return "LetterboxAppearance{$appearanceString, ${appearanceRegions.contentToString()}}"
+    }
+}
+
+/**
+ * Responsible for calculating the [Appearance] and [AppearanceRegion] for the status bar when apps
+ * are letterboxed.
+ */
+@CentralSurfacesScope
+class LetterboxAppearanceCalculator
+@Inject
+constructor(
+    private val lightBarController: LightBarController,
+    private val dumpManager: DumpManager,
+    private val letterboxBackgroundProvider: LetterboxBackgroundProvider,
+) : OnStatusBarViewInitializedListener, CentralSurfacesComponent.Startable {
+
+    private var statusBarBoundsProvider: StatusBarBoundsProvider? = null
+
+    override fun start() {
+        dumpManager.registerDumpable(javaClass.simpleName) { printWriter, _ -> dump(printWriter) }
+    }
+
+    override fun stop() {
+        dumpManager.unregisterDumpable(javaClass.simpleName)
+    }
+
+    private var lastAppearance: Int? = null
+    private var lastAppearanceRegions: Array<AppearanceRegion>? = null
+    private var lastLetterboxes: Array<LetterboxDetails>? = null
+    private var lastLetterboxAppearance: LetterboxAppearance? = null
+
+    fun getLetterboxAppearance(
+        @Appearance originalAppearance: Int,
+        originalAppearanceRegions: Array<AppearanceRegion>,
+        letterboxes: Array<LetterboxDetails>
+    ): LetterboxAppearance {
+        lastAppearance = originalAppearance
+        lastAppearanceRegions = originalAppearanceRegions
+        lastLetterboxes = letterboxes
+        return getLetterboxAppearanceInternal(
+                letterboxes, originalAppearance, originalAppearanceRegions)
+            .also { lastLetterboxAppearance = it }
+    }
+
+    private fun getLetterboxAppearanceInternal(
+        letterboxes: Array<LetterboxDetails>,
+        originalAppearance: Int,
+        originalAppearanceRegions: Array<AppearanceRegion>
+    ): LetterboxAppearance {
+        if (isScrimNeeded(letterboxes)) {
+            return originalAppearanceWithScrim(originalAppearance, originalAppearanceRegions)
+        }
+        val appearance = appearanceWithoutScrim(originalAppearance)
+        val appearanceRegions = getAppearanceRegions(originalAppearanceRegions, letterboxes)
+        return LetterboxAppearance(appearance, appearanceRegions.toTypedArray())
+    }
+
+    private fun isScrimNeeded(letterboxes: Array<LetterboxDetails>): Boolean {
+        if (isOuterLetterboxMultiColored()) {
+            return true
+        }
+        return letterboxes.any { letterbox ->
+            letterbox.letterboxInnerBounds.overlapsWith(getStartSideIconBounds()) ||
+                letterbox.letterboxInnerBounds.overlapsWith(getEndSideIconsBounds())
+        }
+    }
+
+    private fun getAppearanceRegions(
+        originalAppearanceRegions: Array<AppearanceRegion>,
+        letterboxes: Array<LetterboxDetails>
+    ): List<AppearanceRegion> {
+        return sanitizeAppearanceRegions(originalAppearanceRegions, letterboxes) +
+            getAllOuterAppearanceRegions(letterboxes)
+    }
+
+    private fun sanitizeAppearanceRegions(
+        originalAppearanceRegions: Array<AppearanceRegion>,
+        letterboxes: Array<LetterboxDetails>
+    ): List<AppearanceRegion> =
+        originalAppearanceRegions.map { appearanceRegion ->
+            val matchingLetterbox =
+                letterboxes.find { it.letterboxFullBounds == appearanceRegion.bounds }
+            if (matchingLetterbox == null) {
+                appearanceRegion
+            } else {
+                // When WindowManager sends appearance regions for an app, it sends them for the
+                // full bounds of its window.
+                // Here we want the bounds to be only for the inner bounds of the letterboxed app.
+                AppearanceRegion(
+                    appearanceRegion.appearance, matchingLetterbox.letterboxInnerBounds)
+            }
+        }
+
+    private fun originalAppearanceWithScrim(
+        @Appearance originalAppearance: Int,
+        originalAppearanceRegions: Array<AppearanceRegion>
+    ): LetterboxAppearance {
+        return LetterboxAppearance(
+            originalAppearance or APPEARANCE_SEMI_TRANSPARENT_STATUS_BARS,
+            originalAppearanceRegions)
+    }
+
+    @Appearance
+    private fun appearanceWithoutScrim(@Appearance originalAppearance: Int): Int =
+        originalAppearance and APPEARANCE_SEMI_TRANSPARENT_STATUS_BARS.inv()
+
+    private fun getAllOuterAppearanceRegions(
+        letterboxes: Array<LetterboxDetails>
+    ): List<AppearanceRegion> = letterboxes.map(this::getOuterAppearanceRegions).flatten()
+
+    private fun getOuterAppearanceRegions(
+        letterboxDetails: LetterboxDetails
+    ): List<AppearanceRegion> {
+        @Appearance val outerAppearance = getOuterAppearance()
+        return getVisibleOuterBounds(letterboxDetails).map { bounds ->
+            AppearanceRegion(outerAppearance, bounds)
+        }
+    }
+
+    private fun getVisibleOuterBounds(letterboxDetails: LetterboxDetails): List<Rect> {
+        val inner = letterboxDetails.letterboxInnerBounds
+        val outer = letterboxDetails.letterboxFullBounds
+        val top = Rect(outer.left, outer.top, outer.right, inner.top)
+        val left = Rect(outer.left, outer.top, inner.left, outer.bottom)
+        val right = Rect(inner.right, outer.top, outer.right, outer.bottom)
+        val bottom = Rect(outer.left, inner.bottom, outer.right, outer.bottom)
+        return listOf(left, top, right, bottom).filter { !it.isEmpty }
+    }
+
+    @Appearance
+    private fun getOuterAppearance(): Int {
+        val backgroundColor = outerLetterboxBackgroundColor()
+        val darkAppearanceContrast =
+            ContrastColorUtil.calculateContrast(
+                lightBarController.darkAppearanceIconColor, backgroundColor)
+        val lightAppearanceContrast =
+            ContrastColorUtil.calculateContrast(
+                lightBarController.lightAppearanceIconColor, backgroundColor)
+        return if (lightAppearanceContrast > darkAppearanceContrast) {
+            WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
+        } else {
+            0 // APPEARANCE_DEFAULT
+        }
+    }
+
+    @ColorInt
+    private fun outerLetterboxBackgroundColor(): Int {
+        return letterboxBackgroundProvider.letterboxBackgroundColor
+    }
+
+    private fun isOuterLetterboxMultiColored(): Boolean {
+        return letterboxBackgroundProvider.isLetterboxBackgroundMultiColored
+    }
+
+    private fun getEndSideIconsBounds(): Rect {
+        return statusBarBoundsProvider?.visibleEndSideBounds ?: Rect()
+    }
+
+    private fun getStartSideIconBounds(): Rect {
+        return statusBarBoundsProvider?.visibleStartSideBounds ?: Rect()
+    }
+
+    override fun onStatusBarViewInitialized(component: StatusBarFragmentComponent) {
+        statusBarBoundsProvider = component.boundsProvider
+    }
+
+    private fun Rect.overlapsWith(other: Rect): Boolean {
+        if (this.contains(other) || other.contains(this)) {
+            return false
+        }
+        return this.intersect(other)
+    }
+
+    private fun dump(printWriter: PrintWriter) {
+        printWriter.println(
+            """
+           lastAppearance: ${lastAppearance?.toAppearanceString()}
+           lastAppearanceRegion: ${Arrays.toString(lastAppearanceRegions)},
+           lastLetterboxes: ${Arrays.toString(lastLetterboxes)},
+           lastLetterboxAppearance: $lastLetterboxAppearance
+       """.trimIndent())
+    }
+}
+
+private fun Int.toAppearanceString(): String =
+    ViewDebug.flagsToString(InsetsFlags::class.java, "appearance", this)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxBackgroundProvider.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxBackgroundProvider.kt
new file mode 100644
index 0000000..96b9aca
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LetterboxBackgroundProvider.kt
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.phone
+
+import android.annotation.ColorInt
+import android.graphics.Color
+import android.os.RemoteException
+import android.view.IWindowManager
+import com.android.systemui.Dumpable
+import com.android.systemui.dagger.qualifiers.Background
+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
+class LetterboxBackgroundProvider
+@Inject
+constructor(
+    private val windowManager: IWindowManager,
+    @Background private val backgroundExecutor: Executor,
+    private val dumpManager: DumpManager,
+) : CentralSurfacesComponent.Startable, Dumpable {
+
+    @ColorInt
+    var letterboxBackgroundColor: Int = Color.BLACK
+        private set
+
+    var isLetterboxBackgroundMultiColored: Boolean = false
+        private set
+
+    override fun start() {
+        dumpManager.registerDumpable(javaClass.simpleName, this)
+
+        // Using a background executor, as binder calls to IWindowManager are blocking
+        backgroundExecutor.execute {
+            try {
+                isLetterboxBackgroundMultiColored = windowManager.isLetterboxBackgroundMultiColored
+                letterboxBackgroundColor = windowManager.letterboxBackgroundColorInArgb
+            } catch (e: RemoteException) {
+                e.rethrowFromSystemServer()
+            }
+        }
+    }
+
+    override fun stop() {
+        dumpManager.unregisterDumpable(javaClass.simpleName)
+    }
+
+    override fun dump(pw: PrintWriter, args: Array<out String>) {
+        pw.println(
+            """
+           letterboxBackgroundColor: ${Color.valueOf(letterboxBackgroundColor)}
+           isLetterboxBackgroundMultiColored: $isLetterboxBackgroundMultiColored
+       """.trimIndent())
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java
index 2c57328..4d14542 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightBarController.java
@@ -23,8 +23,8 @@
 import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT_TRANSPARENT;
 import static com.android.systemui.statusbar.phone.BarTransitions.MODE_TRANSPARENT;
 
+import android.annotation.ColorInt;
 import android.content.Context;
-import android.graphics.Color;
 import android.graphics.Rect;
 import android.view.InsetsFlags;
 import android.view.ViewDebug;
@@ -63,7 +63,8 @@
     private int mStatusBarMode;
     private int mNavigationBarMode;
     private int mNavigationMode;
-    private final Color mDarkModeColor;
+    private final int mDarkIconColor;
+    private final int mLightIconColor;
 
     /**
      * Whether the navigation bar should be light factoring in already how much alpha the scrim has
@@ -94,7 +95,8 @@
             BatteryController batteryController,
             NavigationModeController navModeController,
             DumpManager dumpManager) {
-        mDarkModeColor = Color.valueOf(ctx.getColor(R.color.dark_mode_icon_color_single_tone));
+        mDarkIconColor = ctx.getColor(R.color.dark_mode_icon_color_single_tone);
+        mLightIconColor = ctx.getColor(R.color.light_mode_icon_color_single_tone);
         mStatusBarIconController = (SysuiDarkIconDispatcher) darkIconDispatcher;
         mBatteryController = batteryController;
         mBatteryController.addCallback(this);
@@ -107,6 +109,16 @@
         }
     }
 
+    @ColorInt
+    int getLightAppearanceIconColor() {
+        return mDarkIconColor;
+    }
+
+    @ColorInt
+    int getDarkAppearanceIconColor() {
+        return mLightIconColor;
+    }
+
     public void setNavigationBar(LightBarTransitionsController navigationBar) {
         mNavigationBarController = navigationBar;
         updateNavigation();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightsOutNotifController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightsOutNotifController.java
index c61510c..6e98c49 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightsOutNotifController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightsOutNotifController.java
@@ -32,6 +32,7 @@
 import androidx.lifecycle.Observer;
 
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.statusbar.LetterboxDetails;
 import com.android.internal.view.AppearanceRegion;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.notification.collection.NotifLiveDataStore;
@@ -144,7 +145,7 @@
         public void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
                 AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
                 @Behavior int behavior, InsetsVisibilities requestedVisibilities,
-                String packageName) {
+                String packageName, LetterboxDetails[] letterboxDetails) {
             if (displayId != mDisplayId) {
                 return;
             }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NPVCDownEventState.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NPVCDownEventState.kt
deleted file mode 100644
index d44a569..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NPVCDownEventState.kt
+++ /dev/null
@@ -1,136 +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.systemui.statusbar.phone
-
-import android.view.MotionEvent
-import com.android.systemui.dump.DumpsysTableLogger
-import com.android.systemui.dump.Row
-import com.android.systemui.util.collection.RingBuffer
-import java.text.SimpleDateFormat
-import java.util.Locale
-
-/** Container for storing information about [MotionEvent.ACTION_DOWN] on
- * [NotificationPanelViewController].
- *
- * This will be used in a dump to log the latest recorded down events.
- *
- * @see NotificationPanelViewController.initDownStates
- */
-class NPVCDownEventState private constructor(
-    private var timeStamp: Long = 0,
-    private var x: Float = 0f,
-    private var y: Float = 0f,
-    private var qsTouchAboveFalsingThreshold: Boolean = false,
-    private var dozing: Boolean = false,
-    private var collapsed: Boolean = false,
-    private var canCollapseOnQQS: Boolean = false,
-    private var listenForHeadsUp: Boolean = false,
-    private var allowExpandForSmallExpansion: Boolean = false,
-    private var touchSlopExceededBeforeDown: Boolean = false,
-    private var lastEventSynthesized: Boolean = false
-) {
-
-    /**
-     * List of [String] to be used as a [Row] with [DumpsysTableLogger].
-     */
-    val asStringList: List<String> by lazy {
-        listOf(
-            DATE_FORMAT.format(timeStamp),
-            x.toString(),
-            y.toString(),
-            qsTouchAboveFalsingThreshold.toString(),
-            dozing.toString(),
-            collapsed.toString(),
-            canCollapseOnQQS.toString(),
-            listenForHeadsUp.toString(),
-            allowExpandForSmallExpansion.toString(),
-            touchSlopExceededBeforeDown.toString(),
-            lastEventSynthesized.toString()
-        )
-    }
-
-    /**
-     * [RingBuffer] to store [NPVCDownEventState]. After the buffer is full, it will recycle old
-     * events.
-     *
-     * Do not use [append] to add new elements. Instead use [insert], as it will recycle if
-     * necessary.
-     */
-    class Buffer(capacity: Int) {
-
-        private val buffer = RingBuffer(capacity) { NPVCDownEventState() }
-
-        /**
-         * Insert a new element in the buffer.
-         */
-        fun insert(
-            timeStamp: Long,
-            x: Float,
-            y: Float,
-            qsTouchAboveFalsingThreshold: Boolean,
-            dozing: Boolean,
-            collapsed: Boolean,
-            canCollapseOnQQS: Boolean,
-            listenForHeadsUp: Boolean,
-            allowExpandForSmallExpansion: Boolean,
-            touchSlopExceededBeforeDown: Boolean,
-            lastEventSynthesized: Boolean
-        ) {
-            buffer.advance().apply {
-                this.timeStamp = timeStamp
-                this.x = x
-                this.y = y
-                this.qsTouchAboveFalsingThreshold = qsTouchAboveFalsingThreshold
-                this.dozing = dozing
-                this.collapsed = collapsed
-                this.canCollapseOnQQS = canCollapseOnQQS
-                this.listenForHeadsUp = listenForHeadsUp
-                this.allowExpandForSmallExpansion = allowExpandForSmallExpansion
-                this.touchSlopExceededBeforeDown = touchSlopExceededBeforeDown
-                this.lastEventSynthesized = lastEventSynthesized
-            }
-        }
-
-        /**
-         * Returns the content of the buffer (sorted from latest to newest).
-         *
-         * @see NPVCDownEventState.asStringList
-         */
-        fun toList(): List<Row> {
-            return buffer.asSequence().map { it.asStringList }.toList()
-        }
-    }
-
-    companion object {
-        /**
-         * Headers for dumping a table using [DumpsysTableLogger].
-         */
-        @JvmField
-        val TABLE_HEADERS = listOf(
-            "Timestamp",
-            "X",
-            "Y",
-            "QSTouchAboveFalsingThreshold",
-            "Dozing",
-            "Collapsed",
-            "CanCollapseOnQQS",
-            "ListenForHeadsUp",
-            "AllowExpandForSmallExpansion",
-            "TouchSlopExceededBeforeDown",
-            "LastEventSynthesized"
-        )
-    }
-}
-
-private val DATE_FORMAT = SimpleDateFormat("MM-dd HH:mm:ss.SSS", Locale.US)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotifPanelEvents.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotifPanelEvents.kt
deleted file mode 100644
index a385e22..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotifPanelEvents.kt
+++ /dev/null
@@ -1,39 +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.systemui.statusbar.phone
-
-/** Provides certain notification panel events.  */
-interface NotifPanelEvents {
-
-    /** Registers callbacks to be invoked when notification panel events occur.  */
-    fun registerListener(listener: Listener)
-
-    /** Unregisters callbacks previously registered via [registerListener]  */
-    fun unregisterListener(listener: Listener)
-
-    /** Callbacks for certain notification panel events. */
-    interface Listener {
-
-        /** Invoked when the notification panel starts or stops collapsing. */
-        fun onPanelCollapsingChanged(isCollapsing: Boolean)
-
-        /**
-         * Invoked when the notification panel starts or stops launching an [android.app.Activity].
-         */
-        fun onLaunchingActivityChanged(isLaunchingActivity: Boolean)
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotifPanelEventsModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotifPanelEventsModule.java
deleted file mode 100644
index 2aaf6a5..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotifPanelEventsModule.java
+++ /dev/null
@@ -1,30 +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.systemui.statusbar.phone;
-
-import com.android.systemui.dagger.SysUISingleton;
-
-import dagger.Binds;
-import dagger.Module;
-
-/** Provides a {@link NotifPanelEvents} in {@link SysUISingleton} scope. */
-@Module
-public abstract class NotifPanelEventsModule {
-    @Binds
-    abstract NotifPanelEvents bindPanelEvents(
-            NotificationPanelViewController.PanelEventsEmitter impl);
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java
index 2dc3261..7b8c5fc 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java
@@ -13,7 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License
  */
-
 package com.android.systemui.statusbar.phone;
 
 import static com.android.systemui.statusbar.phone.HeadsUpAppearanceController.CONTENT_FADE_DELAY;
@@ -31,6 +30,7 @@
 import android.util.Property;
 import android.view.ContextThemeWrapper;
 import android.view.View;
+import android.view.ViewGroup;
 import android.view.animation.Interpolator;
 
 import androidx.annotation.VisibleForTesting;
@@ -40,7 +40,6 @@
 import com.android.settingslib.Utils;
 import com.android.systemui.R;
 import com.android.systemui.animation.Interpolators;
-import com.android.systemui.statusbar.AlphaOptimizedFrameLayout;
 import com.android.systemui.statusbar.StatusBarIconView;
 import com.android.systemui.statusbar.notification.stack.AnimationFilter;
 import com.android.systemui.statusbar.notification.stack.AnimationProperties;
@@ -54,7 +53,7 @@
  * A container for notification icons. It handles overflowing icons properly and positions them
  * correctly on the screen.
  */
-public class NotificationIconContainer extends AlphaOptimizedFrameLayout {
+public class NotificationIconContainer extends ViewGroup {
     /**
      * A float value indicating how much before the overflow start the icons should transform into
      * a dot. A value of 0 means that they are exactly at the end and a value of 1 means it starts
@@ -232,6 +231,31 @@
     }
 
     @Override
+    public boolean hasOverlappingRendering() {
+        // Does the same as "AlphaOptimizedFrameLayout".
+        return false;
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        final int childCount = getChildCount();
+        final int maxVisibleIcons = getMaxVisibleIcons(childCount);
+        final int width = MeasureSpec.getSize(widthMeasureSpec);
+        final int childWidthSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.UNSPECIFIED);
+        int totalWidth = (int) (getActualPaddingStart() + getActualPaddingEnd());
+        for (int i = 0; i < childCount; i++) {
+            View child = getChildAt(i);
+            measureChild(child, childWidthSpec, heightMeasureSpec);
+            if (i <= maxVisibleIcons) {
+                totalWidth += child.getMeasuredWidth();
+            }
+        }
+        final int measuredWidth = resolveSize(totalWidth, widthMeasureSpec);
+        final int measuredHeight = MeasureSpec.getSize(heightMeasureSpec);
+        setMeasuredDimension(measuredWidth, measuredHeight);
+    }
+
+    @Override
     protected void onLayout(boolean changed, int l, int t, int r, int b) {
         float centerY = getHeight() / 2.0f;
         // we layout all our children on the left at the top
@@ -399,6 +423,21 @@
                 + getActualPaddingEnd();
     }
 
+    @VisibleForTesting
+    boolean shouldForceOverflow(int i, int speedBumpIndex, float iconAppearAmount,
+            int maxVisibleIcons) {
+        return speedBumpIndex != -1 && i >= speedBumpIndex
+                && iconAppearAmount > 0.0f || i >= maxVisibleIcons;
+    }
+
+    @VisibleForTesting
+    boolean isOverflowing(boolean isLastChild, float translationX, float layoutEnd,
+            float iconSize) {
+        // Layout end, as used here, does not include padding end.
+        final float overflowX = isLastChild ? layoutEnd : layoutEnd - iconSize;
+        return translationX >= overflowX;
+    }
+
     /**
      * Calculate the horizontal translations for each notification based on how much the icons
      * are inserted into the notification container.
@@ -408,8 +447,7 @@
         float translationX = getActualPaddingStart();
         int firstOverflowIndex = -1;
         int childCount = getChildCount();
-        int maxVisibleIcons = mOnLockScreen ? MAX_ICONS_ON_AOD :
-                mIsStaticLayout ? MAX_STATIC_ICONS : childCount;
+        int maxVisibleIcons = getMaxVisibleIcons(childCount);
         float layoutEnd = getLayoutEnd();
         mVisualOverflowStart = 0;
         mFirstVisibleIconState = null;
@@ -425,26 +463,26 @@
             if (mFirstVisibleIconState == null) {
                 mFirstVisibleIconState = iconState;
             }
-            boolean forceOverflow = mSpeedBumpIndex != -1 && i >= mSpeedBumpIndex
-                    && iconState.iconAppearAmount > 0.0f || i >= maxVisibleIcons;
-            boolean isLastChild = i == childCount - 1;
-            float drawingScale = mOnLockScreen && view instanceof StatusBarIconView
-                    ? ((StatusBarIconView) view).getIconScaleIncreased()
-                    : 1f;
             iconState.visibleState = iconState.hidden
                     ? StatusBarIconView.STATE_HIDDEN
                     : StatusBarIconView.STATE_ICON;
 
-            final float overflowDotX = layoutEnd - mIconSize;
-            boolean isOverflowing = translationX > overflowDotX;
+            final boolean forceOverflow = shouldForceOverflow(i, mSpeedBumpIndex,
+                    iconState.iconAppearAmount, maxVisibleIcons);
+            final boolean isOverflowing = forceOverflow || isOverflowing(
+                    /* isLastChild= */ i == childCount - 1, translationX, layoutEnd, mIconSize);
 
-            if (firstOverflowIndex == -1 && (forceOverflow || isOverflowing)) {
-                firstOverflowIndex = isLastChild && !forceOverflow ? i - 1 : i;
+            // First icon to overflow.
+            if (firstOverflowIndex == -1 && isOverflowing) {
+                firstOverflowIndex = i;
                 mVisualOverflowStart = layoutEnd - mIconSize;
                 if (forceOverflow || mIsStaticLayout) {
                     mVisualOverflowStart = Math.min(translationX, mVisualOverflowStart);
                 }
             }
+            final float drawingScale = mOnLockScreen && view instanceof StatusBarIconView
+                    ? ((StatusBarIconView) view).getIconScaleIncreased()
+                    : 1f;
             translationX += iconState.iconAppearAmount * view.getWidth() * drawingScale;
         }
         mNumDots = 0;
@@ -493,6 +531,11 @@
         }
     }
 
+    private int getMaxVisibleIcons(int childCount) {
+        return mOnLockScreen ? MAX_ICONS_ON_AOD :
+                mIsStaticLayout ? MAX_STATIC_ICONS : childCount;
+    }
+
     private float getLayoutEnd() {
         return getActualWidth() - getActualPaddingEnd();
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelUnfoldAnimationController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelUnfoldAnimationController.kt
deleted file mode 100644
index ff48755..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelUnfoldAnimationController.kt
+++ /dev/null
@@ -1,52 +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.systemui.statusbar.phone
-
-import android.content.Context
-import android.view.ViewGroup
-import com.android.systemui.R
-import com.android.systemui.shared.animation.UnfoldConstantTranslateAnimator
-import com.android.systemui.shared.animation.UnfoldConstantTranslateAnimator.Direction.LEFT
-import com.android.systemui.shared.animation.UnfoldConstantTranslateAnimator.Direction.RIGHT
-import com.android.systemui.shared.animation.UnfoldConstantTranslateAnimator.ViewIdToTranslate
-import com.android.systemui.unfold.SysUIUnfoldScope
-import com.android.systemui.unfold.util.NaturalRotationUnfoldProgressProvider
-import javax.inject.Inject
-
-@SysUIUnfoldScope
-class NotificationPanelUnfoldAnimationController
-@Inject
-constructor(private val context: Context, progressProvider: NaturalRotationUnfoldProgressProvider) {
-
-    private val translateAnimator by lazy {
-        UnfoldConstantTranslateAnimator(
-            viewsIdToTranslate =
-                setOf(
-                    ViewIdToTranslate(R.id.quick_settings_panel, LEFT),
-                    ViewIdToTranslate(R.id.notification_stack_scroller, RIGHT),
-                    ViewIdToTranslate(R.id.rightLayout, RIGHT),
-                    ViewIdToTranslate(R.id.clock, LEFT),
-                    ViewIdToTranslate(R.id.date, LEFT)),
-            progressProvider = progressProvider)
-    }
-
-    fun setup(root: ViewGroup) {
-        val translationMax =
-            context.resources.getDimensionPixelSize(R.dimen.notification_side_paddings).toFloat()
-        translateAnimator.init(root, translationMax)
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
deleted file mode 100644
index d9ba494..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.statusbar.phone;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.PorterDuff;
-import android.graphics.PorterDuffXfermode;
-import android.util.AttributeSet;
-
-import com.android.systemui.R;
-
-public class NotificationPanelView extends PanelView {
-
-    private static final boolean DEBUG = false;
-
-    /**
-     * Fling expanding QS.
-     */
-    public static final int FLING_EXPAND = 0;
-
-    static final String COUNTER_PANEL_OPEN = "panel_open";
-    static final String COUNTER_PANEL_OPEN_QS = "panel_open_qs";
-
-    private int mCurrentPanelAlpha;
-    private final Paint mAlphaPaint = new Paint();
-    private boolean mDozing;
-    private RtlChangeListener mRtlChangeListener;
-
-    public NotificationPanelView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        setWillNotDraw(!DEBUG);
-        mAlphaPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY));
-
-        setBackgroundColor(Color.TRANSPARENT);
-    }
-
-    @Override
-    public void onRtlPropertiesChanged(int layoutDirection) {
-        if (mRtlChangeListener != null) {
-            mRtlChangeListener.onRtlPropertielsChanged(layoutDirection);
-        }
-    }
-
-    @Override
-    public boolean shouldDelayChildPressedState() {
-        return true;
-    }
-
-    @Override
-    protected void dispatchDraw(Canvas canvas) {
-        super.dispatchDraw(canvas);
-        if (mCurrentPanelAlpha != 255) {
-            canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), mAlphaPaint);
-        }
-    }
-
-    float getCurrentPanelAlpha() {
-        return mCurrentPanelAlpha;
-    }
-
-    void setPanelAlphaInternal(float alpha) {
-        mCurrentPanelAlpha = (int) alpha;
-        mAlphaPaint.setARGB(mCurrentPanelAlpha, 255, 255, 255);
-        invalidate();
-    }
-
-    public void setDozing(boolean dozing) {
-        mDozing = dozing;
-    }
-
-    @Override
-    public boolean hasOverlappingRendering() {
-        return !mDozing;
-    }
-
-    void setRtlChangeListener(RtlChangeListener listener) {
-        mRtlChangeListener = listener;
-    }
-
-    public TapAgainView getTapAgainView() {
-        return findViewById(R.id.shade_falsing_tap_again);
-    }
-
-    interface RtlChangeListener {
-        void onRtlPropertielsChanged(int layoutDirection);
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
deleted file mode 100644
index 3580fe6..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
+++ /dev/null
@@ -1,5181 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.systemui.statusbar.phone;
-
-import static android.app.StatusBarManager.WINDOW_STATE_SHOWING;
-
-import static androidx.constraintlayout.widget.ConstraintSet.END;
-import static androidx.constraintlayout.widget.ConstraintSet.PARENT_ID;
-
-import static com.android.internal.jank.InteractionJankMonitor.CUJ_NOTIFICATION_SHADE_QS_EXPAND_COLLAPSE;
-import static com.android.keyguard.KeyguardClockSwitch.LARGE;
-import static com.android.keyguard.KeyguardClockSwitch.SMALL;
-import static com.android.systemui.animation.Interpolators.EMPHASIZED_ACCELERATE;
-import static com.android.systemui.animation.Interpolators.EMPHASIZED_DECELERATE;
-import static com.android.systemui.classifier.Classifier.QS_COLLAPSE;
-import static com.android.systemui.classifier.Classifier.QUICK_SETTINGS;
-import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED;
-import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_QUICK_SETTINGS_EXPANDED;
-import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
-import static com.android.systemui.statusbar.StatusBarState.SHADE;
-import static com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout.ROWS_ALL;
-import static com.android.systemui.statusbar.notification.stack.StackStateAnimator.ANIMATION_DURATION_FOLD_TO_AOD;
-import static com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManagerKt.STATE_CLOSED;
-import static com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManagerKt.STATE_OPEN;
-import static com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManagerKt.STATE_OPENING;
-import static com.android.systemui.util.DumpUtilsKt.asIndenting;
-
-import static java.lang.Float.isNaN;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
-import android.annotation.NonNull;
-import android.app.ActivityManager;
-import android.app.Fragment;
-import android.app.StatusBarManager;
-import android.content.ContentResolver;
-import android.content.pm.ResolveInfo;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.database.ContentObserver;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.ColorFilter;
-import android.graphics.Insets;
-import android.graphics.Paint;
-import android.graphics.PointF;
-import android.graphics.Rect;
-import android.graphics.Region;
-import android.graphics.drawable.Drawable;
-import android.hardware.biometrics.SensorLocationInternal;
-import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.PowerManager;
-import android.os.Trace;
-import android.os.UserManager;
-import android.os.VibrationEffect;
-import android.provider.Settings;
-import android.transition.ChangeBounds;
-import android.transition.TransitionManager;
-import android.util.IndentingPrintWriter;
-import android.util.Log;
-import android.util.MathUtils;
-import android.view.LayoutInflater;
-import android.view.MotionEvent;
-import android.view.VelocityTracker;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewPropertyAnimator;
-import android.view.ViewStub;
-import android.view.ViewTreeObserver;
-import android.view.WindowInsets;
-import android.view.accessibility.AccessibilityEvent;
-import android.view.accessibility.AccessibilityManager;
-import android.view.accessibility.AccessibilityNodeInfo;
-import android.widget.FrameLayout;
-
-import androidx.annotation.Nullable;
-import androidx.constraintlayout.widget.ConstraintSet;
-
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.jank.InteractionJankMonitor;
-import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.internal.policy.ScreenDecorationsUtils;
-import com.android.internal.policy.SystemBarUtils;
-import com.android.internal.util.LatencyTracker;
-import com.android.keyguard.ActiveUnlockConfig;
-import com.android.keyguard.KeyguardStatusView;
-import com.android.keyguard.KeyguardStatusViewController;
-import com.android.keyguard.KeyguardUnfoldTransition;
-import com.android.keyguard.KeyguardUpdateMonitor;
-import com.android.keyguard.LockIconViewController;
-import com.android.keyguard.dagger.KeyguardQsUserSwitchComponent;
-import com.android.keyguard.dagger.KeyguardStatusBarViewComponent;
-import com.android.keyguard.dagger.KeyguardStatusViewComponent;
-import com.android.keyguard.dagger.KeyguardUserSwitcherComponent;
-import com.android.systemui.DejankUtils;
-import com.android.systemui.R;
-import com.android.systemui.animation.ActivityLaunchAnimator;
-import com.android.systemui.animation.Interpolators;
-import com.android.systemui.animation.LaunchAnimator;
-import com.android.systemui.biometrics.AuthController;
-import com.android.systemui.classifier.Classifier;
-import com.android.systemui.classifier.FalsingCollector;
-import com.android.systemui.controls.dagger.ControlsComponent;
-import com.android.systemui.dagger.SysUISingleton;
-import com.android.systemui.dagger.qualifiers.DisplayId;
-import com.android.systemui.dagger.qualifiers.Main;
-import com.android.systemui.doze.DozeLog;
-import com.android.systemui.dump.DumpsysTableLogger;
-import com.android.systemui.flags.FeatureFlags;
-import com.android.systemui.flags.Flags;
-import com.android.systemui.fragments.FragmentHostManager.FragmentListener;
-import com.android.systemui.fragments.FragmentService;
-import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
-import com.android.systemui.media.KeyguardMediaController;
-import com.android.systemui.media.MediaDataManager;
-import com.android.systemui.media.MediaHierarchyManager;
-import com.android.systemui.model.SysUiState;
-import com.android.systemui.navigationbar.NavigationModeController;
-import com.android.systemui.plugins.FalsingManager;
-import com.android.systemui.plugins.FalsingManager.FalsingTapListener;
-import com.android.systemui.plugins.qs.QS;
-import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener;
-import com.android.systemui.qrcodescanner.controller.QRCodeScannerController;
-import com.android.systemui.screenrecord.RecordingController;
-import com.android.systemui.shared.system.QuickStepContract;
-import com.android.systemui.statusbar.CommandQueue;
-import com.android.systemui.statusbar.GestureRecorder;
-import com.android.systemui.statusbar.KeyguardAffordanceView;
-import com.android.systemui.statusbar.KeyguardIndicationController;
-import com.android.systemui.statusbar.LockscreenShadeTransitionController;
-import com.android.systemui.statusbar.NotificationRemoteInputManager;
-import com.android.systemui.statusbar.NotificationShadeDepthController;
-import com.android.systemui.statusbar.NotificationShadeWindowController;
-import com.android.systemui.statusbar.NotificationShelfController;
-import com.android.systemui.statusbar.PulseExpansionHandler;
-import com.android.systemui.statusbar.QsFrameTranslateController;
-import com.android.systemui.statusbar.RemoteInputController;
-import com.android.systemui.statusbar.StatusBarState;
-import com.android.systemui.statusbar.SysuiStatusBarStateController;
-import com.android.systemui.statusbar.VibratorHelper;
-import com.android.systemui.statusbar.events.PrivacyDotViewController;
-import com.android.systemui.statusbar.notification.AnimatableProperty;
-import com.android.systemui.statusbar.notification.ConversationNotificationManager;
-import com.android.systemui.statusbar.notification.DynamicPrivacyController;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
-import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
-import com.android.systemui.statusbar.notification.PropertyAnimator;
-import com.android.systemui.statusbar.notification.ViewGroupFadeHelper;
-import com.android.systemui.statusbar.notification.collection.ListEntry;
-import com.android.systemui.statusbar.notification.collection.NotificationEntry;
-import com.android.systemui.statusbar.notification.collection.render.ShadeViewManager;
-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.AmbientState;
-import com.android.systemui.statusbar.notification.stack.AnimationProperties;
-import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
-import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
-import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
-import com.android.systemui.statusbar.notification.stack.NotificationStackSizeCalculator;
-import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
-import com.android.systemui.statusbar.phone.LockscreenGestureLogger.LockscreenUiEvent;
-import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent;
-import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment;
-import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
-import com.android.systemui.statusbar.phone.panelstate.PanelState;
-import com.android.systemui.statusbar.phone.shade.transition.ShadeTransitionController;
-import com.android.systemui.statusbar.policy.ConfigurationController;
-import com.android.systemui.statusbar.policy.KeyguardQsUserSwitchController;
-import com.android.systemui.statusbar.policy.KeyguardStateController;
-import com.android.systemui.statusbar.policy.KeyguardUserSwitcherController;
-import com.android.systemui.statusbar.policy.KeyguardUserSwitcherView;
-import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
-import com.android.systemui.statusbar.window.StatusBarWindowStateController;
-import com.android.systemui.unfold.SysUIUnfoldComponent;
-import com.android.systemui.util.Compile;
-import com.android.systemui.util.LargeScreenUtils;
-import com.android.systemui.util.ListenerSet;
-import com.android.systemui.util.Utils;
-import com.android.systemui.util.settings.SecureSettings;
-import com.android.systemui.util.time.SystemClock;
-import com.android.systemui.wallet.controller.QuickAccessWalletController;
-import com.android.wm.shell.animation.FlingAnimationUtils;
-
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Optional;
-import java.util.Set;
-import java.util.concurrent.Executor;
-import java.util.function.Consumer;
-
-import javax.inject.Inject;
-import javax.inject.Provider;
-
-@CentralSurfacesComponent.CentralSurfacesScope
-public class NotificationPanelViewController extends PanelViewController {
-
-    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;
-
-    /**
-     * The parallax amount of the quick settings translation when dragging down the panel
-     */
-    private static final float QS_PARALLAX_AMOUNT = 0.175f;
-
-    /**
-     * Fling expanding QS.
-     */
-    private static final int FLING_EXPAND = 0;
-
-    /**
-     * Fling collapsing QS, potentially stopping when QS becomes QQS.
-     */
-    private static final int FLING_COLLAPSE = 1;
-
-    /**
-     * Fling until QS is completely hidden.
-     */
-    private static final int FLING_HIDE = 2;
-    private static final long ANIMATION_DELAY_ICON_FADE_IN =
-            ActivityLaunchAnimator.TIMINGS.getTotalDuration()
-                    - CollapsedStatusBarFragment.FADE_IN_DURATION
-                    - CollapsedStatusBarFragment.FADE_IN_DELAY - 48;
-
-    private final DozeParameters mDozeParameters;
-    private final OnHeightChangedListener mOnHeightChangedListener = new OnHeightChangedListener();
-    private final Runnable mCollapseExpandAction = new CollapseExpandAction();
-    private final OnOverscrollTopChangedListener
-            mOnOverscrollTopChangedListener =
-            new OnOverscrollTopChangedListener();
-    private final KeyguardAffordanceHelperCallback
-            mKeyguardAffordanceHelperCallback =
-            new KeyguardAffordanceHelperCallback();
-    private final OnEmptySpaceClickListener
-            mOnEmptySpaceClickListener =
-            new OnEmptySpaceClickListener();
-    private final MyOnHeadsUpChangedListener
-            mOnHeadsUpChangedListener =
-            new MyOnHeadsUpChangedListener();
-    private final HeightListener mHeightListener = new HeightListener();
-    private final ConfigurationListener mConfigurationListener = new ConfigurationListener();
-    private final SettingsChangeObserver mSettingsChangeObserver;
-
-    @VisibleForTesting final StatusBarStateListener mStatusBarStateListener =
-            new StatusBarStateListener();
-    private final NotificationPanelView mView;
-    private final VibratorHelper mVibratorHelper;
-    private final MetricsLogger mMetricsLogger;
-    private final ActivityManager mActivityManager;
-    private final ConfigurationController mConfigurationController;
-    private final Provider<FlingAnimationUtils.Builder> mFlingAnimationUtilsBuilder;
-    private final NotificationStackScrollLayoutController mNotificationStackScrollLayoutController;
-    private final NotificationIconAreaController mNotificationIconAreaController;
-
-    // Cap and total height of Roboto font. Needs to be adjusted when font for the big clock is
-    // changed.
-    private static final int CAP_HEIGHT = 1456;
-    private static final int FONT_HEIGHT = 2163;
-
-    /**
-     * Maximum time before which we will expand the panel even for slow motions when getting a
-     * touch passed over from launcher.
-     */
-    private static final int MAX_TIME_TO_OPEN_WHEN_FLINGING_FROM_LAUNCHER = 300;
-
-    private static final int MAX_DOWN_EVENT_BUFFER_SIZE = 50;
-
-    private static final String COUNTER_PANEL_OPEN = "panel_open";
-    private static final String COUNTER_PANEL_OPEN_QS = "panel_open_qs";
-    private static final String COUNTER_PANEL_OPEN_PEEK = "panel_open_peek";
-
-    private static final Rect M_DUMMY_DIRTY_RECT = new Rect(0, 0, 1, 1);
-    private static final Rect EMPTY_RECT = new Rect();
-
-    private final InteractionJankMonitor mInteractionJankMonitor;
-    private final LayoutInflater mLayoutInflater;
-    private final FeatureFlags mFeatureFlags;
-    private final PowerManager mPowerManager;
-    private final AccessibilityManager mAccessibilityManager;
-    private final NotificationWakeUpCoordinator mWakeUpCoordinator;
-    private final PulseExpansionHandler mPulseExpansionHandler;
-    private final KeyguardBypassController mKeyguardBypassController;
-    private final KeyguardUpdateMonitor mUpdateMonitor;
-    private final ConversationNotificationManager mConversationNotificationManager;
-    private final AuthController mAuthController;
-    private final MediaHierarchyManager mMediaHierarchyManager;
-    private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
-    private final KeyguardStatusViewComponent.Factory mKeyguardStatusViewComponentFactory;
-    private final KeyguardQsUserSwitchComponent.Factory mKeyguardQsUserSwitchComponentFactory;
-    private final KeyguardUserSwitcherComponent.Factory mKeyguardUserSwitcherComponentFactory;
-    private final KeyguardStatusBarViewComponent.Factory mKeyguardStatusBarViewComponentFactory;
-    private final FragmentService mFragmentService;
-    private final ScrimController mScrimController;
-    private final PrivacyDotViewController mPrivacyDotViewController;
-    private final QuickAccessWalletController mQuickAccessWalletController;
-    private final QRCodeScannerController mQRCodeScannerController;
-    private final ControlsComponent mControlsComponent;
-    private final NotificationRemoteInputManager mRemoteInputManager;
-
-    private final LockscreenShadeTransitionController mLockscreenShadeTransitionController;
-    private final ShadeTransitionController mShadeTransitionController;
-    private final TapAgainViewController mTapAgainViewController;
-    private final LargeScreenShadeHeaderController mLargeScreenShadeHeaderController;
-    private final RecordingController mRecordingController;
-    private final PanelEventsEmitter mPanelEventsEmitter;
-    private boolean mSplitShadeEnabled;
-    // The bottom padding reserved for elements of the keyguard measuring notifications
-    private float mKeyguardNotificationBottomPadding;
-    /**
-     * The top padding from where notification should start in lockscreen.
-     * Should be static also during animations and should match the Y of the first notification.
-     */
-    private float mKeyguardNotificationTopPadding;
-    // Current max allowed keyguard notifications determined by measuring the panel
-    private int mMaxAllowedKeyguardNotifications;
-
-    private ViewGroup mPreviewContainer;
-    private KeyguardAffordanceHelper mAffordanceHelper;
-    private KeyguardQsUserSwitchController mKeyguardQsUserSwitchController;
-    private KeyguardUserSwitcherController mKeyguardUserSwitcherController;
-    private KeyguardStatusBarView mKeyguardStatusBar;
-    private KeyguardStatusBarViewController mKeyguardStatusBarViewController;
-    @VisibleForTesting QS mQs;
-    private FrameLayout mQsFrame;
-    private QsFrameTranslateController mQsFrameTranslateController;
-    private KeyguardStatusViewController mKeyguardStatusViewController;
-    private LockIconViewController mLockIconViewController;
-    private NotificationsQuickSettingsContainer mNotificationContainerParent;
-    private NotificationsQSContainerController mNotificationsQSContainerController;
-    private boolean mAnimateNextPositionUpdate;
-    private float mQuickQsHeaderHeight;
-    private ScreenOffAnimationController mScreenOffAnimationController;
-    private UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController;
-
-    private int mTrackingPointer;
-    private VelocityTracker mQsVelocityTracker;
-    private boolean mQsTracking;
-
-    /**
-     * If set, the ongoing touch gesture might both trigger the expansion in {@link PanelView} and
-     * the expansion for quick settings.
-     */
-    private boolean mConflictingQsExpansionGesture;
-
-    private boolean mPanelExpanded;
-
-    /**
-     * Indicates that QS is in expanded state which can happen by:
-     * - single pane shade: expanding shade and then expanding QS
-     * - split shade: just expanding shade (QS are expanded automatically)
-     */
-    private boolean mQsExpanded;
-    private boolean mQsExpandedWhenExpandingStarted;
-    private boolean mQsFullyExpanded;
-    private boolean mKeyguardShowing;
-    private boolean mKeyguardQsUserSwitchEnabled;
-    private boolean mKeyguardUserSwitcherEnabled;
-    private boolean mDozing;
-    private boolean mDozingOnDown;
-    private boolean mBouncerShowing;
-    private int mBarState;
-    private float mInitialHeightOnTouch;
-    private float mInitialTouchX;
-    private float mInitialTouchY;
-    private float mQsExpansionHeight;
-    private int mQsMinExpansionHeight;
-    private int mQsMaxExpansionHeight;
-    private int mQsPeekHeight;
-    private boolean mStackScrollerOverscrolling;
-    private boolean mQsExpansionFromOverscroll;
-    private float mLastOverscroll;
-    private boolean mQsExpansionEnabledPolicy = true;
-    private boolean mQsExpansionEnabledAmbient = true;
-    private ValueAnimator mQsExpansionAnimator;
-    private FlingAnimationUtils mFlingAnimationUtils;
-    private int mStatusBarMinHeight;
-    private int mStatusBarHeaderHeightKeyguard;
-    private float mOverStretchAmount;
-    private float mDownX;
-    private float mDownY;
-    private int mDisplayTopInset = 0; // in pixels
-    private int mDisplayRightInset = 0; // in pixels
-    private int mLargeScreenShadeHeaderHeight;
-    private int mSplitShadeNotificationsScrimMarginBottom;
-
-    /**
-     * Vertical overlap allowed between the bottom of the notification shelf and
-     * the top of the lock icon or the under-display fingerprint sensor background.
-     */
-    private int mShelfAndLockIconOverlap;
-
-    private final KeyguardClockPositionAlgorithm
-            mClockPositionAlgorithm =
-            new KeyguardClockPositionAlgorithm();
-    private final KeyguardClockPositionAlgorithm.Result
-            mClockPositionResult =
-            new KeyguardClockPositionAlgorithm.Result();
-    private boolean mIsExpanding;
-
-    private boolean mBlockTouches;
-
-    /**
-     * Determines if QS should be already expanded when expanding shade.
-     * Used for split shade, two finger gesture as well as accessibility shortcut to QS.
-     */
-    @VisibleForTesting boolean mQsExpandImmediate;
-    private boolean mTwoFingerQsExpandPossible;
-    private String mHeaderDebugInfo;
-
-    /**
-     * If we are in a panel collapsing motion, we reset scrollY of our scroll view but still
-     * need to take this into account in our panel height calculation.
-     */
-    private boolean mQsAnimatorExpand;
-    private boolean mIsLaunchTransitionFinished;
-    private boolean mIsLaunchTransitionRunning;
-    private Runnable mLaunchAnimationEndRunnable;
-    private boolean mOnlyAffordanceInThisMotion;
-    private ValueAnimator mQsSizeChangeAnimator;
-
-    private boolean mQsScrimEnabled = true;
-    private boolean mQsTouchAboveFalsingThreshold;
-    private int mQsFalsingThreshold;
-
-    private HeadsUpTouchHelper mHeadsUpTouchHelper;
-    private boolean mListenForHeadsUp;
-    private int mNavigationBarBottomHeight;
-    private boolean mExpandingFromHeadsUp;
-    private boolean mCollapsedOnDown;
-    private int mPositionMinSideMargin;
-    private boolean mClosingWithAlphaFadeOut;
-    private boolean mHeadsUpAnimatingAway;
-    private boolean mLaunchingAffordance;
-    private boolean mAffordanceHasPreview;
-    private final FalsingManager mFalsingManager;
-    private final FalsingCollector mFalsingCollector;
-    private String mLastCameraLaunchSource = KeyguardBottomAreaView.CAMERA_LAUNCH_SOURCE_AFFORDANCE;
-
-    private Runnable mHeadsUpExistenceChangedRunnable = () -> {
-        setHeadsUpAnimatingAway(false);
-        updatePanelExpansionAndVisibility();
-    };
-    private boolean mShowIconsWhenExpanded;
-    private int mIndicationBottomPadding;
-    private int mAmbientIndicationBottomPadding;
-    private boolean mIsFullWidth;
-    private boolean mBlockingExpansionForCurrentTouch;
-
-    // TODO (b/204204226): no longer needed once refactor is complete
-    private final boolean mUseCombinedQSHeaders;
-
-    /**
-     * Following variables maintain state of events when input focus transfer may occur.
-     */
-    private boolean mExpectingSynthesizedDown; // expecting to see synthesized DOWN event
-    private boolean mLastEventSynthesizedDown; // last event was synthesized DOWN event
-
-    /**
-     * Current dark amount that follows regular interpolation curve of animation.
-     */
-    private float mInterpolatedDarkAmount;
-
-    /**
-     * Dark amount that animates from 0 to 1 or vice-versa in linear manner, even if the
-     * interpolation curve is different.
-     */
-    private float mLinearDarkAmount;
-
-    private boolean mPulsing;
-    private boolean mUserSetupComplete;
-    private boolean mHideIconsDuringLaunchAnimation = true;
-    private int mStackScrollerMeasuringPass;
-    /**
-     * Non-null if there's a heads-up notification that we're currently tracking the position of.
-     */
-    @Nullable
-    private ExpandableNotificationRow mTrackedHeadsUpNotification;
-    private final ArrayList<Consumer<ExpandableNotificationRow>>
-            mTrackingHeadsUpListeners = new ArrayList<>();
-    private HeadsUpAppearanceController mHeadsUpAppearanceController;
-
-    private int mPanelAlpha;
-    private Runnable mPanelAlphaEndAction;
-    private float mBottomAreaShadeAlpha;
-    private final ValueAnimator mBottomAreaShadeAlphaAnimator;
-    private final AnimatableProperty mPanelAlphaAnimator = AnimatableProperty.from("panelAlpha",
-            NotificationPanelView::setPanelAlphaInternal,
-            NotificationPanelView::getCurrentPanelAlpha,
-            R.id.panel_alpha_animator_tag, R.id.panel_alpha_animator_start_tag,
-            R.id.panel_alpha_animator_end_tag);
-    private final AnimationProperties mPanelAlphaOutPropertiesAnimator =
-            new AnimationProperties().setDuration(150).setCustomInterpolator(
-                    mPanelAlphaAnimator.getProperty(), Interpolators.ALPHA_OUT);
-    private final AnimationProperties mPanelAlphaInPropertiesAnimator =
-            new AnimationProperties().setDuration(200).setAnimationEndAction((property) -> {
-                            if (mPanelAlphaEndAction != null) {
-                                mPanelAlphaEndAction.run();
-                            }
-                        }).setCustomInterpolator(
-                    mPanelAlphaAnimator.getProperty(), Interpolators.ALPHA_IN);
-    private final NotificationEntryManager mEntryManager;
-
-    private final CommandQueue mCommandQueue;
-    private final UserManager mUserManager;
-    private final MediaDataManager mMediaDataManager;
-    private final SysUiState mSysUiState;
-
-    private NotificationShadeDepthController mDepthController;
-    private int mDisplayId;
-
-    /**
-     * Cache the resource id of the theme to avoid unnecessary work in onThemeChanged.
-     *
-     * onThemeChanged is forced when the theme might not have changed. So, to avoid unncessary
-     * work, check the current id with the cached id.
-     */
-    private int mThemeResId;
-    private KeyguardIndicationController mKeyguardIndicationController;
-    private int mShelfHeight;
-    private int mDarkIconSize;
-    private int mHeadsUpInset;
-    private boolean mHeadsUpPinnedMode;
-    private boolean mAllowExpandForSmallExpansion;
-    private Runnable mExpandAfterLayoutRunnable;
-
-    /**
-     * The padding between the start of notifications and the qs boundary on the lockscreen.
-     * On lockscreen, notifications aren't inset this extra amount, but we still want the
-     * qs boundary to be padded.
-     */
-    private int mLockscreenNotificationQSPadding;
-
-    /**
-     * The amount of progress we are currently in if we're transitioning to the full shade.
-     * 0.0f means we're not transitioning yet, while 1 means we're all the way in the full
-     * shade. This value can also go beyond 1.1 when we're overshooting!
-     */
-    private float mTransitioningToFullShadeProgress;
-
-    /**
-     * Position of the qs bottom during the full shade transition. This is needed as the toppadding
-     * can change during state changes, which makes it much harder to do animations
-     */
-    private int mTransitionToFullShadeQSPosition;
-
-    /**
-     * Distance that the full shade transition takes in order for qs to fully transition to the
-     * shade.
-     */
-    private int mDistanceForQSFullShadeTransition;
-
-    /**
-     * The translation amount for QS for the full shade transition
-     */
-    private float mQsTranslationForFullShadeTransition;
-
-    /**
-     * The maximum overshoot allowed for the top padding for the full shade transition
-     */
-    private int mMaxOverscrollAmountForPulse;
-
-    /**
-     * Should we animate the next bounds update
-     */
-    private boolean mAnimateNextNotificationBounds;
-    /**
-     * The delay for the next bounds animation
-     */
-    private long mNotificationBoundsAnimationDelay;
-
-    /**
-     * The duration of the notification bounds animation
-     */
-    private long mNotificationBoundsAnimationDuration;
-
-    /**
-     * Is this a collapse that started on the panel where we should allow the panel to intercept
-     */
-    private boolean mIsPanelCollapseOnQQS;
-
-    private boolean mAnimatingQS;
-
-    /**
-     * The end bounds of a clipping animation.
-     */
-    private final Rect mQsClippingAnimationEndBounds = new Rect();
-
-    /**
-     * The animator for the qs clipping bounds.
-     */
-    private ValueAnimator mQsClippingAnimation = null;
-
-    /**
-     * Is the current animator resetting the qs translation.
-     */
-    private boolean mIsQsTranslationResetAnimator;
-
-    /**
-     * Is the current animator resetting the pulse expansion after a drag down
-     */
-    private boolean mIsPulseExpansionResetAnimator;
-    private final Rect mKeyguardStatusAreaClipBounds = new Rect();
-    private final Region mQsInterceptRegion = new Region();
-
-    /**
-     * The alpha of the views which only show on the keyguard but not in shade / shade locked
-     */
-    private float mKeyguardOnlyContentAlpha = 1.0f;
-
-    /**
-     * The translationY of the views which only show on the keyguard but in shade / shade locked.
-     */
-    private int mKeyguardOnlyTransitionTranslationY = 0;
-
-    private float mUdfpsMaxYBurnInOffset;
-
-    /**
-     * Are we currently in gesture navigation
-     */
-    private boolean mIsGestureNavigation;
-    private int mOldLayoutDirection;
-    private NotificationShelfController mNotificationShelfController;
-    private int mScrimCornerRadius;
-    private int mScreenCornerRadius;
-    private boolean mQSAnimatingHiddenFromCollapsed;
-
-    private int mQsClipTop;
-    private int mQsClipBottom;
-    private boolean mQsVisible;
-    private final ContentResolver mContentResolver;
-    private float mMinFraction;
-
-    private final Executor mUiExecutor;
-    private final SecureSettings mSecureSettings;
-
-    private KeyguardMediaController mKeyguardMediaController;
-
-    private boolean mStatusViewCentered = true;
-
-    private Optional<KeyguardUnfoldTransition> mKeyguardUnfoldTransition;
-    private Optional<NotificationPanelUnfoldAnimationController>
-            mNotificationPanelUnfoldAnimationController;
-
-    private final NotificationListContainer mNotificationListContainer;
-    private final NotificationStackSizeCalculator mNotificationStackSizeCalculator;
-
-    private final NPVCDownEventState.Buffer mLastDownEvents;
-
-    private View.AccessibilityDelegate mAccessibilityDelegate = new View.AccessibilityDelegate() {
-        @Override
-        public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
-            super.onInitializeAccessibilityNodeInfo(host, info);
-            info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD);
-            info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_UP);
-        }
-
-        @Override
-        public boolean performAccessibilityAction(View host, int action, Bundle args) {
-            if (action == AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD.getId()
-                    || action
-                    == AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_UP.getId()) {
-                mStatusBarKeyguardViewManager.showBouncer(true);
-                return true;
-            }
-            return super.performAccessibilityAction(host, action, args);
-        }
-    };
-
-    private final FalsingTapListener mFalsingTapListener = new FalsingTapListener() {
-        @Override
-        public void onDoubleTapRequired() {
-            if (mStatusBarStateController.getState() == StatusBarState.SHADE_LOCKED) {
-                mTapAgainViewController.show();
-            } else {
-                mKeyguardIndicationController.showTransientIndication(
-                        R.string.notification_tap_again);
-            }
-            mVibratorHelper.vibrate(VibrationEffect.EFFECT_STRENGTH_MEDIUM);
-        }
-    };
-
-    @Inject
-    public NotificationPanelViewController(NotificationPanelView view,
-            @Main Resources resources,
-            @Main Handler handler,
-            LayoutInflater layoutInflater,
-            FeatureFlags featureFlags,
-            NotificationWakeUpCoordinator coordinator, PulseExpansionHandler pulseExpansionHandler,
-            DynamicPrivacyController dynamicPrivacyController,
-            KeyguardBypassController bypassController, FalsingManager falsingManager,
-            FalsingCollector falsingCollector,
-            NotificationEntryManager notificationEntryManager,
-            KeyguardStateController keyguardStateController,
-            StatusBarStateController statusBarStateController,
-            StatusBarWindowStateController statusBarWindowStateController,
-            NotificationShadeWindowController notificationShadeWindowController,
-            DozeLog dozeLog,
-            DozeParameters dozeParameters, CommandQueue commandQueue, VibratorHelper vibratorHelper,
-            LatencyTracker latencyTracker, PowerManager powerManager,
-            AccessibilityManager accessibilityManager, @DisplayId int displayId,
-            KeyguardUpdateMonitor keyguardUpdateMonitor,
-            MetricsLogger metricsLogger,
-            ActivityManager activityManager,
-            ConfigurationController configurationController,
-            Provider<FlingAnimationUtils.Builder> flingAnimationUtilsBuilder,
-            StatusBarTouchableRegionManager statusBarTouchableRegionManager,
-            ConversationNotificationManager conversationNotificationManager,
-            MediaHierarchyManager mediaHierarchyManager,
-            StatusBarKeyguardViewManager statusBarKeyguardViewManager,
-            NotificationsQSContainerController notificationsQSContainerController,
-            NotificationStackScrollLayoutController notificationStackScrollLayoutController,
-            KeyguardStatusViewComponent.Factory keyguardStatusViewComponentFactory,
-            KeyguardQsUserSwitchComponent.Factory keyguardQsUserSwitchComponentFactory,
-            KeyguardUserSwitcherComponent.Factory keyguardUserSwitcherComponentFactory,
-            KeyguardStatusBarViewComponent.Factory keyguardStatusBarViewComponentFactory,
-            LockscreenShadeTransitionController lockscreenShadeTransitionController,
-            NotificationIconAreaController notificationIconAreaController,
-            AuthController authController,
-            ScrimController scrimController,
-            UserManager userManager,
-            MediaDataManager mediaDataManager,
-            NotificationShadeDepthController notificationShadeDepthController,
-            AmbientState ambientState,
-            LockIconViewController lockIconViewController,
-            KeyguardMediaController keyguardMediaController,
-            PrivacyDotViewController privacyDotViewController,
-            TapAgainViewController tapAgainViewController,
-            NavigationModeController navigationModeController,
-            FragmentService fragmentService,
-            ContentResolver contentResolver,
-            QuickAccessWalletController quickAccessWalletController,
-            QRCodeScannerController qrCodeScannerController,
-            RecordingController recordingController,
-            @Main Executor uiExecutor,
-            SecureSettings secureSettings,
-            LargeScreenShadeHeaderController largeScreenShadeHeaderController,
-            ScreenOffAnimationController screenOffAnimationController,
-            LockscreenGestureLogger lockscreenGestureLogger,
-            PanelExpansionStateManager panelExpansionStateManager,
-            NotificationRemoteInputManager remoteInputManager,
-            Optional<SysUIUnfoldComponent> unfoldComponent,
-            ControlsComponent controlsComponent,
-            InteractionJankMonitor interactionJankMonitor,
-            QsFrameTranslateController qsFrameTranslateController,
-            SysUiState sysUiState,
-            KeyguardUnlockAnimationController keyguardUnlockAnimationController,
-            NotificationListContainer notificationListContainer,
-            PanelEventsEmitter panelEventsEmitter,
-            NotificationStackSizeCalculator notificationStackSizeCalculator,
-            UnlockedScreenOffAnimationController unlockedScreenOffAnimationController,
-            ShadeTransitionController shadeTransitionController,
-            SystemClock systemClock) {
-        super(view,
-                falsingManager,
-                dozeLog,
-                keyguardStateController,
-                (SysuiStatusBarStateController) statusBarStateController,
-                notificationShadeWindowController,
-                vibratorHelper,
-                statusBarKeyguardViewManager,
-                latencyTracker,
-                flingAnimationUtilsBuilder.get(),
-                statusBarTouchableRegionManager,
-                lockscreenGestureLogger,
-                panelExpansionStateManager,
-                ambientState,
-                interactionJankMonitor,
-                keyguardUnlockAnimationController,
-                systemClock);
-        mView = view;
-        mVibratorHelper = vibratorHelper;
-        mKeyguardMediaController = keyguardMediaController;
-        mPrivacyDotViewController = privacyDotViewController;
-        mQuickAccessWalletController = quickAccessWalletController;
-        mQRCodeScannerController = qrCodeScannerController;
-        mControlsComponent = controlsComponent;
-        mMetricsLogger = metricsLogger;
-        mActivityManager = activityManager;
-        mConfigurationController = configurationController;
-        mFlingAnimationUtilsBuilder = flingAnimationUtilsBuilder;
-        mMediaHierarchyManager = mediaHierarchyManager;
-        mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
-        mNotificationsQSContainerController = notificationsQSContainerController;
-        mNotificationListContainer = notificationListContainer;
-        mNotificationStackSizeCalculator = notificationStackSizeCalculator;
-        mNotificationsQSContainerController.init();
-        mNotificationStackScrollLayoutController = notificationStackScrollLayoutController;
-        mNotificationIconAreaController = notificationIconAreaController;
-        mKeyguardStatusViewComponentFactory = keyguardStatusViewComponentFactory;
-        mKeyguardStatusBarViewComponentFactory = keyguardStatusBarViewComponentFactory;
-        mDepthController = notificationShadeDepthController;
-        mContentResolver = contentResolver;
-        mKeyguardQsUserSwitchComponentFactory = keyguardQsUserSwitchComponentFactory;
-        mKeyguardUserSwitcherComponentFactory = keyguardUserSwitcherComponentFactory;
-        mFragmentService = fragmentService;
-        mSettingsChangeObserver = new SettingsChangeObserver(handler);
-        mSplitShadeEnabled =
-                LargeScreenUtils.shouldUseSplitNotificationShade(mResources);
-        mView.setWillNotDraw(!DEBUG_DRAWABLE);
-        mLargeScreenShadeHeaderController = largeScreenShadeHeaderController;
-        mLayoutInflater = layoutInflater;
-        mFeatureFlags = featureFlags;
-        mFalsingManager = falsingManager;
-        mFalsingCollector = falsingCollector;
-        mPowerManager = powerManager;
-        mWakeUpCoordinator = coordinator;
-        mAccessibilityManager = accessibilityManager;
-        mView.setAccessibilityPaneTitle(determineAccessibilityPaneTitle());
-        setPanelAlpha(255, false /* animate */);
-        mCommandQueue = commandQueue;
-        mRecordingController = recordingController;
-        mDisplayId = displayId;
-        mPulseExpansionHandler = pulseExpansionHandler;
-        mDozeParameters = dozeParameters;
-        mScrimController = scrimController;
-        mUserManager = userManager;
-        mMediaDataManager = mediaDataManager;
-        mTapAgainViewController = tapAgainViewController;
-        mUiExecutor = uiExecutor;
-        mSecureSettings = secureSettings;
-        mInteractionJankMonitor = interactionJankMonitor;
-        mSysUiState = sysUiState;
-        mPanelEventsEmitter = panelEventsEmitter;
-        pulseExpansionHandler.setPulseExpandAbortListener(() -> {
-            if (mQs != null) {
-                mQs.animateHeaderSlidingOut();
-            }
-        });
-        statusBarWindowStateController.addListener(this::onStatusBarWindowStateChanged);
-        mThemeResId = mView.getContext().getThemeResId();
-        mKeyguardBypassController = bypassController;
-        mUpdateMonitor = keyguardUpdateMonitor;
-        mLockscreenShadeTransitionController = lockscreenShadeTransitionController;
-        mShadeTransitionController = shadeTransitionController;
-        lockscreenShadeTransitionController.setNotificationPanelController(this);
-        shadeTransitionController.setNotificationPanelViewController(this);
-        DynamicPrivacyControlListener
-                dynamicPrivacyControlListener =
-                new DynamicPrivacyControlListener();
-        dynamicPrivacyController.addListener(dynamicPrivacyControlListener);
-
-        panelExpansionStateManager.addStateListener(this::onPanelStateChanged);
-
-        mBottomAreaShadeAlphaAnimator = ValueAnimator.ofFloat(1f, 0);
-        mBottomAreaShadeAlphaAnimator.addUpdateListener(animation -> {
-            mBottomAreaShadeAlpha = (float) animation.getAnimatedValue();
-            updateKeyguardBottomAreaAlpha();
-        });
-        mBottomAreaShadeAlphaAnimator.setDuration(160);
-        mBottomAreaShadeAlphaAnimator.setInterpolator(Interpolators.ALPHA_OUT);
-        mEntryManager = notificationEntryManager;
-        mConversationNotificationManager = conversationNotificationManager;
-        mAuthController = authController;
-        mLockIconViewController = lockIconViewController;
-        mScreenOffAnimationController = screenOffAnimationController;
-        mUnlockedScreenOffAnimationController = unlockedScreenOffAnimationController;
-        mRemoteInputManager = remoteInputManager;
-        mLastDownEvents = new NPVCDownEventState.Buffer(MAX_DOWN_EVENT_BUFFER_SIZE);
-
-        int currentMode = navigationModeController.addListener(
-                mode -> mIsGestureNavigation = QuickStepContract.isGesturalMode(mode));
-        mIsGestureNavigation = QuickStepContract.isGesturalMode(currentMode);
-
-        mView.setBackgroundColor(Color.TRANSPARENT);
-        OnAttachStateChangeListener onAttachStateChangeListener = new OnAttachStateChangeListener();
-        mView.addOnAttachStateChangeListener(onAttachStateChangeListener);
-        if (mView.isAttachedToWindow()) {
-            onAttachStateChangeListener.onViewAttachedToWindow(mView);
-        }
-
-        mView.setOnApplyWindowInsetsListener(new OnApplyWindowInsetsListener());
-
-        if (DEBUG_DRAWABLE) {
-            mView.getOverlay().add(new DebugDrawable());
-        }
-
-        mKeyguardUnfoldTransition = unfoldComponent.map(c -> c.getKeyguardUnfoldTransition());
-        mNotificationPanelUnfoldAnimationController = unfoldComponent.map(
-                SysUIUnfoldComponent::getNotificationPanelUnfoldAnimationController);
-
-        mQsFrameTranslateController = qsFrameTranslateController;
-        updateUserSwitcherFlags();
-        onFinishInflate();
-        mUseCombinedQSHeaders = featureFlags.isEnabled(Flags.COMBINED_QS_HEADERS);
-        keyguardUnlockAnimationController.addKeyguardUnlockAnimationListener(
-                new KeyguardUnlockAnimationController.KeyguardUnlockAnimationListener() {
-                    @Override
-                    public void onUnlockAnimationFinished() {
-                        // Make sure the clock is in the correct position after the unlock animation
-                        // so that it's not in the wrong place when we show the keyguard again.
-                        positionClockAndNotifications(true /* forceClockUpdate */);
-                    }
-
-                    @Override
-                    public void onUnlockAnimationStarted(
-                            boolean playingCannedAnimation,
-                            boolean isWakeAndUnlock,
-                            long unlockAnimationStartDelay,
-                            long unlockAnimationDuration) {
-                        // Disable blurs while we're unlocking so that panel expansion does not
-                        // cause blurring. This will eventually be re-enabled by the panel view on
-                        // ACTION_UP, since the user's finger might still be down after a swipe to
-                        // unlock gesture, and we don't want that to cause blurring either.
-                        mDepthController.setBlursDisabledForUnlock(mTracking);
-
-                        if (playingCannedAnimation && !isWakeAndUnlock) {
-                            // Hide the panel so it's not in the way or the surface behind the
-                            // keyguard, which will be appearing. If we're wake and unlocking, the
-                            // lock screen is hidden instantly so should not be flung away.
-                            if (isTracking() || isFlinging()) {
-                                // Instant collpase the notification panel since the notification
-                                // panel is already in the middle animating
-                                onTrackingStopped(false);
-                                instantCollapse();
-                            } else {
-                                mView.animate()
-                                        .alpha(0f)
-                                        .setStartDelay(0)
-                                        // Translate up by 4%.
-                                        .translationY(mView.getHeight() * -0.04f)
-                                        // This start delay is to give us time to animate out before
-                                        // the launcher icons animation starts, so use that as our
-                                        // duration.
-                                        .setDuration(unlockAnimationStartDelay)
-                                        .setInterpolator(EMPHASIZED_ACCELERATE)
-                                        .withEndAction(() -> {
-                                            instantCollapse();
-                                            mView.setAlpha(1f);
-                                            mView.setTranslationY(0f);
-                                        })
-                                        .start();
-                            }
-                        }
-                    }
-                });
-    }
-
-    @VisibleForTesting
-    void onFinishInflate() {
-        loadDimens();
-        mKeyguardStatusBar = mView.findViewById(R.id.keyguard_header);
-
-        FrameLayout userAvatarContainer = null;
-        KeyguardUserSwitcherView keyguardUserSwitcherView = null;
-
-        if (mKeyguardUserSwitcherEnabled && mUserManager.isUserSwitcherEnabled(
-                mResources.getBoolean(R.bool.qs_show_user_switcher_for_single_user))) {
-            if (mKeyguardQsUserSwitchEnabled) {
-                ViewStub stub = mView.findViewById(R.id.keyguard_qs_user_switch_stub);
-                userAvatarContainer = (FrameLayout) stub.inflate();
-            } else {
-                ViewStub stub = mView.findViewById(R.id.keyguard_user_switcher_stub);
-                keyguardUserSwitcherView = (KeyguardUserSwitcherView) stub.inflate();
-            }
-        }
-
-        mKeyguardStatusBarViewController =
-                mKeyguardStatusBarViewComponentFactory.build(
-                        mKeyguardStatusBar,
-                        mNotificationPanelViewStateProvider)
-                        .getKeyguardStatusBarViewController();
-        mKeyguardStatusBarViewController.init();
-
-        mNotificationContainerParent = mView.findViewById(R.id.notification_container_parent);
-        updateViewControllers(
-                mView.findViewById(R.id.keyguard_status_view),
-                userAvatarContainer,
-                keyguardUserSwitcherView);
-
-        NotificationStackScrollLayout stackScrollLayout = mView.findViewById(
-                R.id.notification_stack_scroller);
-        mNotificationStackScrollLayoutController.attach(stackScrollLayout);
-        mNotificationStackScrollLayoutController.setOnHeightChangedListener(
-                mOnHeightChangedListener);
-        mNotificationStackScrollLayoutController.setOverscrollTopChangedListener(
-                mOnOverscrollTopChangedListener);
-        mNotificationStackScrollLayoutController.setOnScrollListener(this::onNotificationScrolled);
-        mNotificationStackScrollLayoutController.setOnStackYChanged(this::onStackYChanged);
-        mNotificationStackScrollLayoutController.setOnEmptySpaceClickListener(
-                mOnEmptySpaceClickListener);
-        addTrackingHeadsUpListener(mNotificationStackScrollLayoutController::setTrackingHeadsUp);
-        mKeyguardBottomArea = mView.findViewById(R.id.keyguard_bottom_area);
-        mPreviewContainer = mView.findViewById(R.id.preview_container);
-        mKeyguardBottomArea.setPreviewContainer(mPreviewContainer);
-
-        initBottomArea();
-
-        mWakeUpCoordinator.setStackScroller(mNotificationStackScrollLayoutController);
-        mQsFrame = mView.findViewById(R.id.qs_frame);
-        mPulseExpansionHandler.setUp(mNotificationStackScrollLayoutController);
-        mWakeUpCoordinator.addListener(new NotificationWakeUpCoordinator.WakeUpListener() {
-            @Override
-            public void onFullyHiddenChanged(boolean isFullyHidden) {
-                mKeyguardStatusBarViewController.updateForHeadsUp();
-            }
-
-            @Override
-            public void onPulseExpansionChanged(boolean expandingChanged) {
-                if (mKeyguardBypassController.getBypassEnabled()) {
-                    // Position the notifications while dragging down while pulsing
-                    requestScrollerTopPaddingUpdate(false /* animate */);
-                }
-            }
-        });
-
-        mView.setRtlChangeListener(layoutDirection -> {
-            if (layoutDirection != mOldLayoutDirection) {
-                mAffordanceHelper.onRtlPropertiesChanged();
-                mOldLayoutDirection = layoutDirection;
-            }
-        });
-
-        mView.setAccessibilityDelegate(mAccessibilityDelegate);
-        if (mSplitShadeEnabled) {
-            updateResources();
-        }
-
-        mTapAgainViewController.init();
-        mKeyguardUnfoldTransition.ifPresent(u -> u.setup(mView));
-        mNotificationPanelUnfoldAnimationController.ifPresent(controller ->
-                controller.setup(mNotificationContainerParent));
-    }
-
-    @Override
-    protected void loadDimens() {
-        super.loadDimens();
-        mFlingAnimationUtils = mFlingAnimationUtilsBuilder.get()
-                .setMaxLengthSeconds(0.4f).build();
-        mStatusBarMinHeight = SystemBarUtils.getStatusBarHeight(mView.getContext());
-        mStatusBarHeaderHeightKeyguard = Utils.getStatusBarHeaderHeightKeyguard(mView.getContext());
-        mQsPeekHeight = mResources.getDimensionPixelSize(R.dimen.qs_peek_height);
-        mClockPositionAlgorithm.loadDimens(mResources);
-        mQsFalsingThreshold = mResources.getDimensionPixelSize(R.dimen.qs_falsing_threshold);
-        mPositionMinSideMargin = mResources.getDimensionPixelSize(
-                R.dimen.notification_panel_min_side_margin);
-        mIndicationBottomPadding = mResources.getDimensionPixelSize(
-                R.dimen.keyguard_indication_bottom_padding);
-        mShelfHeight = mResources.getDimensionPixelSize(R.dimen.notification_shelf_height);
-        mDarkIconSize = mResources.getDimensionPixelSize(R.dimen.status_bar_icon_drawing_size_dark);
-        int statusbarHeight = SystemBarUtils.getStatusBarHeight(mView.getContext());
-        mHeadsUpInset = statusbarHeight + mResources.getDimensionPixelSize(
-                R.dimen.heads_up_status_bar_padding);
-        mDistanceForQSFullShadeTransition = mResources.getDimensionPixelSize(
-                R.dimen.lockscreen_shade_qs_transition_distance);
-        mMaxOverscrollAmountForPulse = mResources.getDimensionPixelSize(
-                R.dimen.pulse_expansion_max_top_overshoot);
-        mScrimCornerRadius = mResources.getDimensionPixelSize(
-                R.dimen.notification_scrim_corner_radius);
-        mScreenCornerRadius = (int) ScreenDecorationsUtils.getWindowCornerRadius(
-                mView.getContext());
-        mLockscreenNotificationQSPadding = mResources.getDimensionPixelSize(
-                R.dimen.notification_side_paddings);
-        mUdfpsMaxYBurnInOffset = mResources.getDimensionPixelSize(R.dimen.udfps_burn_in_offset_y);
-    }
-
-    private void updateViewControllers(KeyguardStatusView keyguardStatusView,
-            FrameLayout userAvatarView,
-            KeyguardUserSwitcherView keyguardUserSwitcherView) {
-        // Re-associate the KeyguardStatusViewController
-        KeyguardStatusViewComponent statusViewComponent =
-                mKeyguardStatusViewComponentFactory.build(keyguardStatusView);
-        mKeyguardStatusViewController = statusViewComponent.getKeyguardStatusViewController();
-        mKeyguardStatusViewController.init();
-
-        if (mKeyguardUserSwitcherController != null) {
-            // Try to close the switcher so that callbacks are triggered if necessary.
-            // Otherwise, NPV can get into a state where some of the views are still hidden
-            mKeyguardUserSwitcherController.closeSwitcherIfOpenAndNotSimple(false);
-        }
-
-        mKeyguardQsUserSwitchController = null;
-        mKeyguardUserSwitcherController = null;
-
-        // Re-associate the KeyguardUserSwitcherController
-        if (userAvatarView != null) {
-            KeyguardQsUserSwitchComponent userSwitcherComponent =
-                    mKeyguardQsUserSwitchComponentFactory.build(userAvatarView);
-            mKeyguardQsUserSwitchController =
-                    userSwitcherComponent.getKeyguardQsUserSwitchController();
-            mKeyguardQsUserSwitchController.init();
-            mKeyguardStatusBarViewController.setKeyguardUserSwitcherEnabled(true);
-        } else if (keyguardUserSwitcherView != null) {
-            KeyguardUserSwitcherComponent userSwitcherComponent =
-                    mKeyguardUserSwitcherComponentFactory.build(keyguardUserSwitcherView);
-            mKeyguardUserSwitcherController =
-                    userSwitcherComponent.getKeyguardUserSwitcherController();
-            mKeyguardUserSwitcherController.init();
-            mKeyguardStatusBarViewController.setKeyguardUserSwitcherEnabled(true);
-        } else {
-            mKeyguardStatusBarViewController.setKeyguardUserSwitcherEnabled(false);
-        }
-    }
-
-    /**
-     * Returns if there's a custom clock being presented.
-     */
-    public boolean hasCustomClock() {
-        return mKeyguardStatusViewController.hasCustomClock();
-    }
-
-    private void setCentralSurfaces(CentralSurfaces centralSurfaces) {
-        // TODO: this can be injected.
-        mCentralSurfaces = centralSurfaces;
-        mKeyguardBottomArea.setCentralSurfaces(mCentralSurfaces);
-    }
-
-    public void updateResources() {
-        mSplitShadeNotificationsScrimMarginBottom =
-                mResources.getDimensionPixelSize(
-                        R.dimen.split_shade_notifications_scrim_margin_bottom);
-        mShelfAndLockIconOverlap =
-                mResources.getDimensionPixelSize(R.dimen.shelf_and_lock_icon_overlap);
-
-        final boolean newSplitShadeEnabled =
-                LargeScreenUtils.shouldUseSplitNotificationShade(mResources);
-        final boolean splitShadeChanged = mSplitShadeEnabled != newSplitShadeEnabled;
-        mSplitShadeEnabled = newSplitShadeEnabled;
-
-        boolean useLargeScreenShadeHeader =
-                LargeScreenUtils.shouldUseLargeScreenShadeHeader(mView.getResources());
-        if (mQs != null) {
-            mQs.setInSplitShade(mSplitShadeEnabled);
-        }
-        mLargeScreenShadeHeaderHeight =
-                mResources.getDimensionPixelSize(R.dimen.large_screen_shade_header_height);
-        mQuickQsHeaderHeight = useLargeScreenShadeHeader ? mLargeScreenShadeHeaderHeight :
-                SystemBarUtils.getQuickQsOffsetHeight(mView.getContext());
-        int topMargin = useLargeScreenShadeHeader ? mLargeScreenShadeHeaderHeight :
-                mResources.getDimensionPixelSize(R.dimen.notification_panel_margin_top);
-        mLargeScreenShadeHeaderController.setActive(useLargeScreenShadeHeader);
-        mAmbientState.setStackTopMargin(topMargin);
-        mNotificationsQSContainerController.updateResources();
-
-        updateKeyguardStatusViewAlignment(/* animate= */false);
-
-        mKeyguardMediaController.refreshMediaPosition();
-
-        if (splitShadeChanged) {
-            // when we switch from split shade to regular shade we want to enforce setting qs to
-            // the default state: expanded for split shade and collapsed otherwise
-            if (!isOnKeyguard() && mPanelExpanded) {
-                setQsExpanded(mSplitShadeEnabled);
-            }
-            updateClockAppearance();
-            updateQsState();
-            mNotificationStackScrollLayoutController.updateFooter();
-        }
-    }
-
-    private View reInflateStub(int viewId, int stubId, int layoutId, boolean enabled) {
-        View view = mView.findViewById(viewId);
-        if (view != null) {
-            int index = mView.indexOfChild(view);
-            mView.removeView(view);
-            if (enabled) {
-                view = mLayoutInflater.inflate(layoutId, mView, false);
-                mView.addView(view, index);
-            } else {
-                // Add the stub back so we can re-inflate it again if necessary
-                ViewStub stub = new ViewStub(mView.getContext(), layoutId);
-                stub.setId(stubId);
-                mView.addView(stub, index);
-                view = null;
-            }
-        } else if (enabled) {
-            // It's possible the stub was never inflated if the configuration changed
-            ViewStub stub = mView.findViewById(stubId);
-            view = stub.inflate();
-        }
-        return view;
-    }
-
-    @VisibleForTesting
-    void reInflateViews() {
-        if (DEBUG_LOGCAT) Log.d(TAG, "reInflateViews");
-        // Re-inflate the status view group.
-        KeyguardStatusView keyguardStatusView =
-                mNotificationContainerParent.findViewById(R.id.keyguard_status_view);
-        int statusIndex = mNotificationContainerParent.indexOfChild(keyguardStatusView);
-        mNotificationContainerParent.removeView(keyguardStatusView);
-        keyguardStatusView = (KeyguardStatusView) mLayoutInflater.inflate(
-                R.layout.keyguard_status_view, mNotificationContainerParent, false);
-        mNotificationContainerParent.addView(keyguardStatusView, statusIndex);
-        // When it's reinflated, this is centered by default. If it shouldn't be, this will update
-        // below when resources are updated.
-        mStatusViewCentered = true;
-        attachSplitShadeMediaPlayerContainer(
-                keyguardStatusView.findViewById(R.id.status_view_media_container));
-
-        // we need to update KeyguardStatusView constraints after reinflating it
-        updateResources();
-
-        // Re-inflate the keyguard user switcher group.
-        updateUserSwitcherFlags();
-        boolean isUserSwitcherEnabled = mUserManager.isUserSwitcherEnabled(
-                mResources.getBoolean(R.bool.qs_show_user_switcher_for_single_user));
-        boolean showQsUserSwitch = mKeyguardQsUserSwitchEnabled && isUserSwitcherEnabled;
-        boolean showKeyguardUserSwitcher =
-                !mKeyguardQsUserSwitchEnabled
-                        && mKeyguardUserSwitcherEnabled
-                        && isUserSwitcherEnabled;
-        FrameLayout userAvatarView = (FrameLayout) reInflateStub(
-                R.id.keyguard_qs_user_switch_view /* viewId */,
-                R.id.keyguard_qs_user_switch_stub /* stubId */,
-                R.layout.keyguard_qs_user_switch /* layoutId */,
-                showQsUserSwitch /* enabled */);
-        KeyguardUserSwitcherView keyguardUserSwitcherView =
-                (KeyguardUserSwitcherView) reInflateStub(
-                        R.id.keyguard_user_switcher_view /* viewId */,
-                        R.id.keyguard_user_switcher_stub /* stubId */,
-                        R.layout.keyguard_user_switcher /* layoutId */,
-                        showKeyguardUserSwitcher /* enabled */);
-
-        updateViewControllers(mView.findViewById(R.id.keyguard_status_view), userAvatarView,
-                keyguardUserSwitcherView);
-
-        // Update keyguard bottom area
-        int index = mView.indexOfChild(mKeyguardBottomArea);
-        mView.removeView(mKeyguardBottomArea);
-        KeyguardBottomAreaView oldBottomArea = mKeyguardBottomArea;
-        mKeyguardBottomArea = (KeyguardBottomAreaView) mLayoutInflater.inflate(
-                R.layout.keyguard_bottom_area, mView, false);
-        mKeyguardBottomArea.initFrom(oldBottomArea);
-        mKeyguardBottomArea.setPreviewContainer(mPreviewContainer);
-        mView.addView(mKeyguardBottomArea, index);
-        initBottomArea();
-        mKeyguardIndicationController.setIndicationArea(mKeyguardBottomArea);
-        mStatusBarStateListener.onDozeAmountChanged(mStatusBarStateController.getDozeAmount(),
-                mStatusBarStateController.getInterpolatedDozeAmount());
-
-        mKeyguardStatusViewController.setKeyguardStatusViewVisibility(
-                mBarState,
-                false,
-                false,
-                mBarState);
-        if (mKeyguardQsUserSwitchController != null) {
-            mKeyguardQsUserSwitchController.setKeyguardQsUserSwitchVisibility(
-                    mBarState,
-                    false,
-                    false,
-                    mBarState);
-        }
-        if (mKeyguardUserSwitcherController != null) {
-            mKeyguardUserSwitcherController.setKeyguardUserSwitcherVisibility(
-                    mBarState,
-                    false,
-                    false,
-                    mBarState);
-        }
-        setKeyguardBottomAreaVisibility(mBarState, false);
-
-        mKeyguardUnfoldTransition.ifPresent(u -> u.setup(mView));
-        mNotificationPanelUnfoldAnimationController.ifPresent(u -> u.setup(mView));
-    }
-
-    private void attachSplitShadeMediaPlayerContainer(FrameLayout container) {
-        mKeyguardMediaController.attachSplitShadeContainer(container);
-    }
-
-    private void initBottomArea() {
-        mAffordanceHelper = new KeyguardAffordanceHelper(
-                mKeyguardAffordanceHelperCallback, mView.getContext(), mFalsingManager);
-        mKeyguardBottomArea.setAffordanceHelper(mAffordanceHelper);
-        mKeyguardBottomArea.setCentralSurfaces(mCentralSurfaces);
-        mKeyguardBottomArea.setUserSetupComplete(mUserSetupComplete);
-        mKeyguardBottomArea.setFalsingManager(mFalsingManager);
-        mKeyguardBottomArea.initWallet(mQuickAccessWalletController);
-        mKeyguardBottomArea.initControls(mControlsComponent);
-        mKeyguardBottomArea.initQRCodeScanner(mQRCodeScannerController);
-    }
-
-    @VisibleForTesting
-    void setMaxDisplayedNotifications(int maxAllowed) {
-        mMaxAllowedKeyguardNotifications = maxAllowed;
-    }
-
-    private void updateMaxDisplayedNotifications(boolean recompute) {
-        if (recompute) {
-            mMaxAllowedKeyguardNotifications = Math.max(computeMaxKeyguardNotifications(), 1);
-        } else {
-            if (SPEW_LOGCAT) Log.d(TAG, "Skipping computeMaxKeyguardNotifications() by request");
-        }
-
-        if (mKeyguardShowing && !mKeyguardBypassController.getBypassEnabled()) {
-            mNotificationStackScrollLayoutController.setMaxDisplayedNotifications(
-                    mMaxAllowedKeyguardNotifications);
-            mNotificationStackScrollLayoutController.setKeyguardBottomPaddingForDebug(
-                    mKeyguardNotificationBottomPadding);
-        } else {
-            // no max when not on the keyguard
-            mNotificationStackScrollLayoutController.setMaxDisplayedNotifications(-1);
-            mNotificationStackScrollLayoutController.setKeyguardBottomPaddingForDebug(-1f);
-        }
-    }
-
-    private boolean shouldAvoidChangingNotificationsCount() {
-        return mHintAnimationRunning || mUnlockedScreenOffAnimationController.isAnimationPlaying();
-    }
-
-    public void setKeyguardIndicationController(KeyguardIndicationController indicationController) {
-        mKeyguardIndicationController = indicationController;
-        mKeyguardIndicationController.setIndicationArea(mKeyguardBottomArea);
-    }
-
-    private void updateGestureExclusionRect() {
-        Rect exclusionRect = calculateGestureExclusionRect();
-        mView.setSystemGestureExclusionRects(exclusionRect.isEmpty() ? Collections.EMPTY_LIST
-                : Collections.singletonList(exclusionRect));
-    }
-
-    private Rect calculateGestureExclusionRect() {
-        Rect exclusionRect = null;
-        Region touchableRegion = mStatusBarTouchableRegionManager.calculateTouchableRegion();
-        if (isFullyCollapsed() && touchableRegion != null) {
-            // Note: The manager also calculates the non-pinned touchable region
-            exclusionRect = touchableRegion.getBounds();
-        }
-        return exclusionRect != null ? exclusionRect : EMPTY_RECT;
-    }
-
-    private void setIsFullWidth(boolean isFullWidth) {
-        mIsFullWidth = isFullWidth;
-        mScrimController.setClipsQsScrim(isFullWidth);
-        mNotificationStackScrollLayoutController.setIsFullWidth(isFullWidth);
-    }
-
-    private void startQsSizeChangeAnimation(int oldHeight, final int newHeight) {
-        if (mQsSizeChangeAnimator != null) {
-            oldHeight = (int) mQsSizeChangeAnimator.getAnimatedValue();
-            mQsSizeChangeAnimator.cancel();
-        }
-        mQsSizeChangeAnimator = ValueAnimator.ofInt(oldHeight, newHeight);
-        mQsSizeChangeAnimator.setDuration(300);
-        mQsSizeChangeAnimator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
-        mQsSizeChangeAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-            @Override
-            public void onAnimationUpdate(ValueAnimator animation) {
-                requestScrollerTopPaddingUpdate(false /* animate */);
-                requestPanelHeightUpdate();
-                int height = (int) mQsSizeChangeAnimator.getAnimatedValue();
-                mQs.setHeightOverride(height);
-            }
-        });
-        mQsSizeChangeAnimator.addListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                mQsSizeChangeAnimator = null;
-            }
-        });
-        mQsSizeChangeAnimator.start();
-    }
-
-    /**
-     * Positions the clock and notifications dynamically depending on how many notifications are
-     * showing.
-     */
-    private void positionClockAndNotifications() {
-        positionClockAndNotifications(false /* forceUpdate */);
-    }
-
-    /**
-     * Positions the clock and notifications dynamically depending on how many notifications are
-     * showing.
-     *
-     * @param forceClockUpdate Should the clock be updated even when not on keyguard
-     */
-    private void positionClockAndNotifications(boolean forceClockUpdate) {
-        boolean animate = mNotificationStackScrollLayoutController.isAddOrRemoveAnimationPending();
-        int stackScrollerPadding;
-        boolean onKeyguard = isOnKeyguard();
-
-        if (onKeyguard || forceClockUpdate) {
-            updateClockAppearance();
-        }
-        if (!onKeyguard) {
-            if (mSplitShadeEnabled) {
-                // Quick settings are not on the top of the notifications
-                // when in split shade mode (they are on the left side),
-                // so we should not add a padding for them
-                stackScrollerPadding = 0;
-            } else {
-                stackScrollerPadding = getUnlockedStackScrollerPadding();
-            }
-        } else {
-            stackScrollerPadding = mClockPositionResult.stackScrollerPaddingExpanded;
-        }
-
-        mNotificationStackScrollLayoutController.setIntrinsicPadding(stackScrollerPadding);
-        mKeyguardBottomArea.setAntiBurnInOffsetX(mClockPositionResult.clockX);
-
-        mStackScrollerMeasuringPass++;
-        requestScrollerTopPaddingUpdate(animate);
-        mStackScrollerMeasuringPass = 0;
-        mAnimateNextPositionUpdate = false;
-    }
-
-    private void updateClockAppearance() {
-        int userSwitcherPreferredY = mStatusBarHeaderHeightKeyguard;
-        boolean bypassEnabled = mKeyguardBypassController.getBypassEnabled();
-        final boolean hasVisibleNotifications = mNotificationStackScrollLayoutController
-                .getVisibleNotificationCount() != 0
-                || mMediaDataManager.hasActiveMediaOrRecommendation();
-        boolean splitShadeWithActiveMedia =
-                mSplitShadeEnabled && mMediaDataManager.hasActiveMediaOrRecommendation();
-        boolean shouldAnimateClockChange = mScreenOffAnimationController.shouldAnimateClockChange();
-        if ((hasVisibleNotifications && !mSplitShadeEnabled)
-                || (splitShadeWithActiveMedia && !mDozing)) {
-            mKeyguardStatusViewController.displayClock(SMALL, shouldAnimateClockChange);
-        } else {
-            mKeyguardStatusViewController.displayClock(LARGE, shouldAnimateClockChange);
-        }
-        updateKeyguardStatusViewAlignment(true /* animate */);
-        int userSwitcherHeight = mKeyguardQsUserSwitchController != null
-                ? mKeyguardQsUserSwitchController.getUserIconHeight() : 0;
-        if (mKeyguardUserSwitcherController != null) {
-            userSwitcherHeight = mKeyguardUserSwitcherController.getHeight();
-        }
-        float expandedFraction =
-                mScreenOffAnimationController.shouldExpandNotifications()
-                        ? 1.0f : getExpandedFraction();
-        float darkamount =
-                mScreenOffAnimationController.shouldExpandNotifications()
-                        ? 1.0f : mInterpolatedDarkAmount;
-
-        float udfpsAodTopLocation = -1f;
-        if (mUpdateMonitor.isUdfpsEnrolled() && mAuthController.getUdfpsProps().size() > 0) {
-            FingerprintSensorPropertiesInternal props = mAuthController.getUdfpsProps().get(0);
-            final SensorLocationInternal location = props.getLocation();
-            udfpsAodTopLocation = location.sensorLocationY - location.sensorRadius
-                    - mUdfpsMaxYBurnInOffset;
-        }
-
-        mClockPositionAlgorithm.setup(
-                mStatusBarHeaderHeightKeyguard,
-                expandedFraction,
-                mKeyguardStatusViewController.getLockscreenHeight(),
-                userSwitcherHeight,
-                userSwitcherPreferredY,
-                darkamount, mOverStretchAmount,
-                bypassEnabled, getUnlockedStackScrollerPadding(),
-                computeQsExpansionFraction(),
-                mDisplayTopInset,
-                mSplitShadeEnabled,
-                udfpsAodTopLocation,
-                mKeyguardStatusViewController.getClockBottom(mStatusBarHeaderHeightKeyguard),
-                mKeyguardStatusViewController.isClockTopAligned());
-        mClockPositionAlgorithm.run(mClockPositionResult);
-        boolean animate = mNotificationStackScrollLayoutController.isAddOrRemoveAnimationPending();
-        boolean animateClock = (animate || mAnimateNextPositionUpdate) && shouldAnimateClockChange;
-        mKeyguardStatusViewController.updatePosition(
-                mClockPositionResult.clockX, mClockPositionResult.clockY,
-                mClockPositionResult.clockScale, animateClock);
-        if (mKeyguardQsUserSwitchController != null) {
-            mKeyguardQsUserSwitchController.updatePosition(
-                    mClockPositionResult.clockX,
-                    mClockPositionResult.userSwitchY,
-                    animateClock);
-        }
-        if (mKeyguardUserSwitcherController != null) {
-            mKeyguardUserSwitcherController.updatePosition(
-                    mClockPositionResult.clockX,
-                    mClockPositionResult.userSwitchY,
-                    animateClock);
-        }
-        updateNotificationTranslucency();
-        updateClock();
-    }
-
-    private void updateKeyguardStatusViewAlignment(boolean animate) {
-        boolean hasVisibleNotifications = mNotificationStackScrollLayoutController
-                .getVisibleNotificationCount() != 0
-                || mMediaDataManager.hasActiveMediaOrRecommendation();
-        boolean shouldBeCentered = !mSplitShadeEnabled || !hasVisibleNotifications || mDozing;
-        if (mStatusViewCentered != shouldBeCentered) {
-            mStatusViewCentered = shouldBeCentered;
-            ConstraintSet constraintSet = new ConstraintSet();
-            constraintSet.clone(mNotificationContainerParent);
-            int statusConstraint = shouldBeCentered ? PARENT_ID : R.id.qs_edge_guideline;
-            constraintSet.connect(R.id.keyguard_status_view, END, statusConstraint, END);
-            if (animate) {
-                ChangeBounds transition = new ChangeBounds();
-                if (mSplitShadeEnabled) {
-                    // Excluding media from the transition on split-shade, as it doesn't transition
-                    // horizontally properly.
-                    transition.excludeTarget(R.id.status_view_media_container, true);
-                }
-                transition.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
-                transition.setDuration(StackStateAnimator.ANIMATION_DURATION_STANDARD);
-                TransitionManager.beginDelayedTransition(mNotificationContainerParent, transition);
-            }
-
-            constraintSet.applyTo(mNotificationContainerParent);
-        }
-        mKeyguardUnfoldTransition.ifPresent(t -> t.setStatusViewCentered(mStatusViewCentered));
-    }
-
-    /**
-     * @return the padding of the stackscroller when unlocked
-     */
-    private int getUnlockedStackScrollerPadding() {
-        return (mQs != null ? mQs.getHeader().getHeight() : 0) + mQsPeekHeight;
-    }
-
-    /** Returns space between top of lock icon and bottom of NotificationStackScrollLayout. */
-    private float getLockIconPadding() {
-        float lockIconPadding = 0f;
-        if (mLockIconViewController.getTop() != 0f) {
-            lockIconPadding = mNotificationStackScrollLayoutController.getBottom()
-                    - mLockIconViewController.getTop();
-        }
-        return lockIconPadding;
-    }
-
-    /** Returns space available to show notifications on lockscreen. */
-    @VisibleForTesting
-    float getVerticalSpaceForLockscreenNotifications() {
-        final float lockIconPadding = getLockIconPadding();
-
-        float bottomPadding = Math.max(lockIconPadding,
-                Math.max(mIndicationBottomPadding, mAmbientIndicationBottomPadding));
-        mKeyguardNotificationBottomPadding = bottomPadding;
-
-        float staticTopPadding = mClockPositionAlgorithm.getLockscreenMinStackScrollerPadding()
-                // getMinStackScrollerPadding is from the top of the screen,
-                // but we need it from the top of the NSSL.
-                - mNotificationStackScrollLayoutController.getTop();
-        mKeyguardNotificationTopPadding = staticTopPadding;
-
-        // To debug the available space, enable debug lines in this class. If you change how the
-        // available space is calculated, please also update those lines.
-        final float verticalSpace =
-                mNotificationStackScrollLayoutController.getHeight()
-                        - staticTopPadding
-                        - bottomPadding;
-
-        if (SPEW_LOGCAT) {
-            Log.i(TAG, "\n");
-            Log.i(TAG, "staticTopPadding[" + staticTopPadding
-                    + "] = Clock.padding["
-                    + mClockPositionAlgorithm.getLockscreenMinStackScrollerPadding()
-                    + "] - NSSLC.top[" + mNotificationStackScrollLayoutController.getTop()
-                    + "]"
-            );
-            Log.i(TAG, "bottomPadding[" + bottomPadding
-                    + "] = max(ambientIndicationBottomPadding[" + mAmbientIndicationBottomPadding
-                    + "], mIndicationBottomPadding[" + mIndicationBottomPadding
-                    + "], lockIconPadding[" + lockIconPadding
-                    + "])"
-            );
-            Log.i(TAG, "verticalSpaceForNotifications[" + verticalSpace
-                    + "] = NSSL.height[" + mNotificationStackScrollLayoutController.getHeight()
-                    + "] - staticTopPadding[" + staticTopPadding
-                    + "] - bottomPadding[" + bottomPadding
-                    + "]"
-            );
-        }
-        return verticalSpace;
-    }
-
-    /** Returns extra space available to show the shelf on lockscreen */
-    @VisibleForTesting
-    float getVerticalSpaceForLockscreenShelf() {
-        final float lockIconPadding = getLockIconPadding();
-
-        final float noShelfOverlapBottomPadding =
-                Math.max(mIndicationBottomPadding, mAmbientIndicationBottomPadding);
-
-        final float extraSpaceForShelf = lockIconPadding - noShelfOverlapBottomPadding;
-
-        if (extraSpaceForShelf > 0f) {
-            return Math.min(mNotificationShelfController.getIntrinsicHeight(),
-                    extraSpaceForShelf);
-        }
-        return 0f;
-    }
-
-    /**
-     * @return Maximum number of notifications that can fit on keyguard.
-     */
-    @VisibleForTesting
-    int computeMaxKeyguardNotifications() {
-        if (mAmbientState.getFractionToShade() > 0) {
-            if (SPEW_LOGCAT) {
-                Log.v(TAG, "Internally skipping computeMaxKeyguardNotifications()"
-                        + " fractionToShade=" + mAmbientState.getFractionToShade()
-                );
-            }
-            return mMaxAllowedKeyguardNotifications;
-        }
-        return mNotificationStackSizeCalculator.computeMaxKeyguardNotifications(
-                mNotificationStackScrollLayoutController.getView(),
-                getVerticalSpaceForLockscreenNotifications(),
-                getVerticalSpaceForLockscreenShelf(),
-                mNotificationShelfController.getIntrinsicHeight()
-        );
-    }
-
-    private void updateClock() {
-        float alpha = mClockPositionResult.clockAlpha * mKeyguardOnlyContentAlpha;
-        mKeyguardStatusViewController.setAlpha(alpha);
-        mKeyguardStatusViewController
-                .setTranslationYExcludingMedia(mKeyguardOnlyTransitionTranslationY);
-        if (mKeyguardQsUserSwitchController != null) {
-            mKeyguardQsUserSwitchController.setAlpha(alpha);
-        }
-        if (mKeyguardUserSwitcherController != null) {
-            mKeyguardUserSwitcherController.setAlpha(alpha);
-        }
-    }
-
-    public void animateToFullShade(long delay) {
-        mNotificationStackScrollLayoutController.goToFullShade(delay);
-        mView.requestLayout();
-        mAnimateNextPositionUpdate = true;
-    }
-
-    private void setQsExpansionEnabled() {
-        if (mQs == null) return;
-        mQs.setHeaderClickable(isQsExpansionEnabled());
-    }
-
-    public void setQsExpansionEnabledPolicy(boolean qsExpansionEnabledPolicy) {
-        mQsExpansionEnabledPolicy = qsExpansionEnabledPolicy;
-        setQsExpansionEnabled();
-    }
-
-    @Override
-    public void resetViews(boolean animate) {
-        mIsLaunchTransitionFinished = false;
-        mBlockTouches = false;
-        if (!mLaunchingAffordance) {
-            mAffordanceHelper.reset(false);
-            mLastCameraLaunchSource = KeyguardBottomAreaView.CAMERA_LAUNCH_SOURCE_AFFORDANCE;
-        }
-        mCentralSurfaces.getGutsManager().closeAndSaveGuts(true /* leavebehind */, true /* force */,
-                true /* controls */, -1 /* x */, -1 /* y */, true /* resetMenu */);
-        if (animate && !isFullyCollapsed()) {
-            animateCloseQs(true /* animateAway */);
-        } else {
-            closeQs();
-        }
-        mNotificationStackScrollLayoutController.setOverScrollAmount(0f, true /* onTop */, animate,
-                !animate /* cancelAnimators */);
-        mNotificationStackScrollLayoutController.resetScrollPosition();
-    }
-
-    /** Collapses the panel. */
-    public void collapsePanel(boolean animate, boolean delayed, float speedUpFactor) {
-        boolean waiting = false;
-        if (animate && !isFullyCollapsed()) {
-            collapse(delayed, speedUpFactor);
-            waiting = true;
-        } else {
-            resetViews(false /* animate */);
-            setExpandedFraction(0); // just in case
-        }
-        if (!waiting) {
-            // it's possible that nothing animated, so we replicate the termination
-            // conditions of panelExpansionChanged here
-            // TODO(b/200063118): This can likely go away in a future refactor CL.
-            getPanelExpansionStateManager().updateState(STATE_CLOSED);
-        }
-    }
-
-    @Override
-    public void collapse(boolean delayed, float speedUpFactor) {
-        if (!canPanelBeCollapsed()) {
-            return;
-        }
-
-        if (mQsExpanded) {
-            mQsExpandImmediate = true;
-            setShowShelfOnly(true);
-        }
-        super.collapse(delayed, speedUpFactor);
-    }
-
-    private void setShowShelfOnly(boolean shelfOnly) {
-        mNotificationStackScrollLayoutController.setShouldShowShelfOnly(
-                shelfOnly && !mSplitShadeEnabled);
-    }
-
-    public void closeQs() {
-        cancelQsAnimation();
-        setQsExpansion(mQsMinExpansionHeight);
-    }
-
-    public void cancelAnimation() {
-        mView.animate().cancel();
-    }
-
-
-    /**
-     * Animate QS closing by flinging it.
-     * If QS is expanded, it will collapse into QQS and stop.
-     *
-     * @param animateAway Do not stop when QS becomes QQS. Fling until QS isn't visible anymore.
-     */
-    public void animateCloseQs(boolean animateAway) {
-        if (mQsExpansionAnimator != null) {
-            if (!mQsAnimatorExpand) {
-                return;
-            }
-            float height = mQsExpansionHeight;
-            mQsExpansionAnimator.cancel();
-            setQsExpansion(height);
-        }
-        flingSettings(0 /* vel */, animateAway ? FLING_HIDE : FLING_COLLAPSE);
-    }
-
-    private boolean isQsExpansionEnabled() {
-        return mQsExpansionEnabledPolicy && mQsExpansionEnabledAmbient
-                && !mRemoteInputManager.isRemoteInputActive();
-    }
-
-    public void expandWithQs() {
-        if (isQsExpansionEnabled()) {
-            mQsExpandImmediate = true;
-            setShowShelfOnly(true);
-        }
-        if (mSplitShadeEnabled && isOnKeyguard()) {
-            // It's a special case as this method is likely to not be initiated by finger movement
-            // but rather called from adb shell or accessibility service.
-            // We're using LockscreenShadeTransitionController because on lockscreen that's the
-            // source of truth for all shade motion. Not using it would make part of state to be
-            // outdated and will cause bugs. Ideally we'd use this controller also for non-split
-            // case but currently motion in portrait looks worse than when using flingSettings.
-            // TODO: make below function transitioning smoothly also in portrait with null target
-            mLockscreenShadeTransitionController.goToLockedShade(
-                    /* expandedView= */null, /* needsQSAnimation= */false);
-        } else if (isFullyCollapsed()) {
-            expand(true /* animate */);
-        } else {
-            traceQsJank(true /* startTracing */, false /* wasCancelled */);
-            flingSettings(0 /* velocity */, FLING_EXPAND);
-        }
-    }
-
-    public void expandWithoutQs() {
-        if (isQsExpanded()) {
-            flingSettings(0 /* velocity */, FLING_COLLAPSE);
-        } else {
-            expand(true /* animate */);
-        }
-    }
-
-    @Override
-    public void fling(float vel, boolean expand) {
-        GestureRecorder gr = mCentralSurfaces.getGestureRecorder();
-        if (gr != null) {
-            gr.tag("fling " + ((vel > 0) ? "open" : "closed"), "notifications,v=" + vel);
-        }
-        super.fling(vel, expand);
-    }
-
-    @Override
-    protected void flingToHeight(float vel, boolean expand, float target,
-            float collapseSpeedUpFactor, boolean expandBecauseOfFalsing) {
-        mHeadsUpTouchHelper.notifyFling(!expand);
-        mKeyguardStateController.notifyPanelFlingStart(!expand /* flingingToDismiss */);
-        setClosingWithAlphaFadeout(!expand && !isOnKeyguard() && getFadeoutAlpha() == 1.0f);
-        mNotificationStackScrollLayoutController.setPanelFlinging(true);
-        super.flingToHeight(vel, expand, target, collapseSpeedUpFactor, expandBecauseOfFalsing);
-    }
-
-    @Override
-    protected void onFlingEnd(boolean cancelled) {
-        super.onFlingEnd(cancelled);
-        mNotificationStackScrollLayoutController.setPanelFlinging(false);
-    }
-
-    private boolean onQsIntercept(MotionEvent event) {
-        if (DEBUG_LOGCAT) Log.d(TAG, "onQsIntercept");
-        int pointerIndex = event.findPointerIndex(mTrackingPointer);
-        if (pointerIndex < 0) {
-            pointerIndex = 0;
-            mTrackingPointer = event.getPointerId(pointerIndex);
-        }
-        final float x = event.getX(pointerIndex);
-        final float y = event.getY(pointerIndex);
-
-        switch (event.getActionMasked()) {
-            case MotionEvent.ACTION_DOWN:
-                mInitialTouchY = y;
-                mInitialTouchX = x;
-                initVelocityTracker();
-                trackMovement(event);
-                if (mKeyguardShowing
-                        && shouldQuickSettingsIntercept(mInitialTouchX, mInitialTouchY, 0)) {
-                    // Dragging down on the lockscreen statusbar should prohibit other interactions
-                    // immediately, otherwise we'll wait on the touchslop. This is to allow
-                    // dragging down to expanded quick settings directly on the lockscreen.
-                    mView.getParent().requestDisallowInterceptTouchEvent(true);
-                }
-                if (mQsExpansionAnimator != null) {
-                    mInitialHeightOnTouch = mQsExpansionHeight;
-                    mQsTracking = true;
-                    traceQsJank(true /* startTracing */, false /* wasCancelled */);
-                    mNotificationStackScrollLayoutController.cancelLongPress();
-                }
-                break;
-            case MotionEvent.ACTION_POINTER_UP:
-                final int upPointer = event.getPointerId(event.getActionIndex());
-                if (mTrackingPointer == upPointer) {
-                    // gesture is ongoing, find a new pointer to track
-                    final int newIndex = event.getPointerId(0) != upPointer ? 0 : 1;
-                    mTrackingPointer = event.getPointerId(newIndex);
-                    mInitialTouchX = event.getX(newIndex);
-                    mInitialTouchY = event.getY(newIndex);
-                }
-                break;
-
-            case MotionEvent.ACTION_MOVE:
-                final float h = y - mInitialTouchY;
-                trackMovement(event);
-                if (mQsTracking) {
-
-                    // Already tracking because onOverscrolled was called. We need to update here
-                    // so we don't stop for a frame until the next touch event gets handled in
-                    // onTouchEvent.
-                    setQsExpansion(h + mInitialHeightOnTouch);
-                    trackMovement(event);
-                    return true;
-                }
-                if ((h > getTouchSlop(event) || (h < -getTouchSlop(event) && mQsExpanded))
-                        && Math.abs(h) > Math.abs(x - mInitialTouchX)
-                        && shouldQuickSettingsIntercept(mInitialTouchX, mInitialTouchY, h)) {
-                    if (DEBUG_LOGCAT) Log.d(TAG, "onQsIntercept - start tracking expansion");
-                    mView.getParent().requestDisallowInterceptTouchEvent(true);
-                    mQsTracking = true;
-                    traceQsJank(true /* startTracing */, false /* wasCancelled */);
-                    onQsExpansionStarted();
-                    notifyExpandingFinished();
-                    mInitialHeightOnTouch = mQsExpansionHeight;
-                    mInitialTouchY = y;
-                    mInitialTouchX = x;
-                    mNotificationStackScrollLayoutController.cancelLongPress();
-                    return true;
-                }
-                break;
-
-            case MotionEvent.ACTION_CANCEL:
-            case MotionEvent.ACTION_UP:
-                trackMovement(event);
-                mQsTracking = false;
-                break;
-        }
-        return false;
-    }
-
-    @VisibleForTesting
-    boolean isQsTracking() {
-        return mQsTracking;
-    }
-
-    @Override
-    protected boolean isInContentBounds(float x, float y) {
-        float stackScrollerX = mNotificationStackScrollLayoutController.getX();
-        return !mNotificationStackScrollLayoutController
-                .isBelowLastNotification(x - stackScrollerX, y)
-                && stackScrollerX < x
-                && x < stackScrollerX + mNotificationStackScrollLayoutController.getWidth();
-    }
-
-    private void traceQsJank(boolean startTracing, boolean wasCancelled) {
-        if (mInteractionJankMonitor == null) {
-            return;
-        }
-        if (startTracing) {
-            mInteractionJankMonitor.begin(mView, CUJ_NOTIFICATION_SHADE_QS_EXPAND_COLLAPSE);
-        } else {
-            if (wasCancelled) {
-                mInteractionJankMonitor.cancel(CUJ_NOTIFICATION_SHADE_QS_EXPAND_COLLAPSE);
-            } else {
-                mInteractionJankMonitor.end(CUJ_NOTIFICATION_SHADE_QS_EXPAND_COLLAPSE);
-            }
-        }
-    }
-
-    private void initDownStates(MotionEvent event) {
-        if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
-            mOnlyAffordanceInThisMotion = false;
-            mQsTouchAboveFalsingThreshold = mQsFullyExpanded;
-            mDozingOnDown = isDozing();
-            mDownX = event.getX();
-            mDownY = event.getY();
-            mCollapsedOnDown = isFullyCollapsed();
-            mIsPanelCollapseOnQQS = canPanelCollapseOnQQS(mDownX, mDownY);
-            mListenForHeadsUp = mCollapsedOnDown && mHeadsUpManager.hasPinnedHeadsUp();
-            mAllowExpandForSmallExpansion = mExpectingSynthesizedDown;
-            mTouchSlopExceededBeforeDown = mExpectingSynthesizedDown;
-            if (mExpectingSynthesizedDown) {
-                mLastEventSynthesizedDown = true;
-            } else {
-                // down but not synthesized motion event.
-                mLastEventSynthesizedDown = false;
-            }
-            mLastDownEvents.insert(
-                    mSystemClock.currentTimeMillis(),
-                    mDownX,
-                    mDownY,
-                    mQsTouchAboveFalsingThreshold,
-                    mDozingOnDown,
-                    mCollapsedOnDown,
-                    mIsPanelCollapseOnQQS,
-                    mListenForHeadsUp,
-                    mAllowExpandForSmallExpansion,
-                    mTouchSlopExceededBeforeDown,
-                    mLastEventSynthesizedDown
-            );
-        } else {
-            // not down event at all.
-            mLastEventSynthesizedDown = false;
-        }
-    }
-
-    /**
-     * Can the panel collapse in this motion because it was started on QQS?
-     *
-     * @param downX the x location where the touch started
-     * @param downY the y location where the touch started
-     *
-     * @return true if the panel could be collapsed because it stared on QQS
-     */
-    private boolean canPanelCollapseOnQQS(float downX, float downY) {
-        if (mCollapsedOnDown || mKeyguardShowing || mQsExpanded) {
-            return false;
-        }
-        View header = mQs == null ? mKeyguardStatusBar : mQs.getHeader();
-        return downX >= mQsFrame.getX() && downX <= mQsFrame.getX() + mQsFrame.getWidth()
-                        && downY <= header.getBottom();
-
-    }
-
-    private void flingQsWithCurrentVelocity(float y, boolean isCancelMotionEvent) {
-        float vel = getCurrentQSVelocity();
-        boolean expandsQs = flingExpandsQs(vel);
-        if (expandsQs) {
-            if (mFalsingManager.isUnlockingDisabled() || isFalseTouch(QUICK_SETTINGS)) {
-                expandsQs = false;
-            } else {
-                logQsSwipeDown(y);
-            }
-        } else if (vel < 0) {
-            mFalsingManager.isFalseTouch(QS_COLLAPSE);
-        }
-
-        int flingType;
-        if (expandsQs && !isCancelMotionEvent) {
-            flingType = FLING_EXPAND;
-        } else if (mSplitShadeEnabled) {
-            flingType = FLING_HIDE;
-        } else {
-            flingType = FLING_COLLAPSE;
-        }
-        flingSettings(vel, flingType);
-    }
-
-    private void logQsSwipeDown(float y) {
-        float vel = getCurrentQSVelocity();
-        final int
-                gesture =
-                mBarState == KEYGUARD ? MetricsEvent.ACTION_LS_QS
-                        : MetricsEvent.ACTION_SHADE_QS_PULL;
-        mLockscreenGestureLogger.write(gesture,
-                (int) ((y - mInitialTouchY) / mCentralSurfaces.getDisplayDensity()),
-                (int) (vel / mCentralSurfaces.getDisplayDensity()));
-    }
-
-    private boolean flingExpandsQs(float vel) {
-        if (Math.abs(vel) < mFlingAnimationUtils.getMinVelocityPxPerSecond()) {
-            return computeQsExpansionFraction() > 0.5f;
-        } else {
-            return vel > 0;
-        }
-    }
-
-    private boolean isFalseTouch(@Classifier.InteractionType int interactionType) {
-        if (mFalsingManager.isClassifierEnabled()) {
-            return mFalsingManager.isFalseTouch(interactionType);
-        }
-        return !mQsTouchAboveFalsingThreshold;
-    }
-
-    private float computeQsExpansionFraction() {
-        if (mQSAnimatingHiddenFromCollapsed) {
-            // When hiding QS from collapsed state, the expansion can sometimes temporarily
-            // be larger than 0 because of the timing, leading to flickers.
-            return 0.0f;
-        }
-        return Math.min(
-                1f, (mQsExpansionHeight - mQsMinExpansionHeight) / (mQsMaxExpansionHeight
-                        - mQsMinExpansionHeight));
-    }
-
-    @Override
-    protected boolean shouldExpandWhenNotFlinging() {
-        if (super.shouldExpandWhenNotFlinging()) {
-            return true;
-        }
-        if (mAllowExpandForSmallExpansion) {
-            // When we get a touch that came over from launcher, the velocity isn't always correct
-            // Let's err on expanding if the gesture has been reasonably slow
-            long timeSinceDown = mSystemClock.uptimeMillis() - mDownTime;
-            return timeSinceDown <= MAX_TIME_TO_OPEN_WHEN_FLINGING_FROM_LAUNCHER;
-        }
-        return false;
-    }
-
-    @Override
-    protected float getOpeningHeight() {
-        return mNotificationStackScrollLayoutController.getOpeningHeight();
-    }
-
-
-    private boolean handleQsTouch(MotionEvent event) {
-        if (mSplitShadeEnabled && touchXOutsideOfQs(event.getX())) {
-            return false;
-        }
-        final int action = event.getActionMasked();
-        boolean collapsedQs = !mQsExpanded && !mSplitShadeEnabled;
-        boolean expandedShadeCollapsedQs = getExpandedFraction() == 1f && mBarState != KEYGUARD
-                && collapsedQs && isQsExpansionEnabled();
-        if (action == MotionEvent.ACTION_DOWN && expandedShadeCollapsedQs) {
-            // Down in the empty area while fully expanded - go to QS.
-            mQsTracking = true;
-            traceQsJank(true /* startTracing */, false /* wasCancelled */);
-            mConflictingQsExpansionGesture = true;
-            onQsExpansionStarted();
-            mInitialHeightOnTouch = mQsExpansionHeight;
-            mInitialTouchY = event.getY();
-            mInitialTouchX = event.getX();
-        }
-        if (!isFullyCollapsed()) {
-            handleQsDown(event);
-        }
-        if (!mQsExpandImmediate && mQsTracking) {
-            onQsTouch(event);
-            if (!mConflictingQsExpansionGesture && !mSplitShadeEnabled) {
-                return true;
-            }
-        }
-        if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {
-            mConflictingQsExpansionGesture = false;
-        }
-        if (action == MotionEvent.ACTION_DOWN && isFullyCollapsed() && isQsExpansionEnabled()) {
-            mTwoFingerQsExpandPossible = true;
-        }
-        if (mTwoFingerQsExpandPossible && isOpenQsEvent(event) && event.getY(event.getActionIndex())
-                < mStatusBarMinHeight) {
-            mMetricsLogger.count(COUNTER_PANEL_OPEN_QS, 1);
-            mQsExpandImmediate = true;
-            setShowShelfOnly(true);
-            requestPanelHeightUpdate();
-
-            // Normally, we start listening when the panel is expanded, but here we need to start
-            // earlier so the state is already up to date when dragging down.
-            setListening(true);
-        }
-        return false;
-    }
-
-    private boolean touchXOutsideOfQs(float touchX) {
-        return touchX < mQsFrame.getX() || touchX > mQsFrame.getX() + mQsFrame.getWidth();
-    }
-
-    private boolean isInQsArea(float x, float y) {
-        if (touchXOutsideOfQs(x)) {
-            return false;
-        }
-        // Let's reject anything at the very bottom around the home handle in gesture nav
-        if (mIsGestureNavigation && y > mView.getHeight() - mNavigationBarBottomHeight) {
-            return false;
-        }
-        return y <= mNotificationStackScrollLayoutController.getBottomMostNotificationBottom()
-                        || y <= mQs.getView().getY() + mQs.getView().getHeight();
-    }
-
-    private boolean isOpenQsEvent(MotionEvent event) {
-        final int pointerCount = event.getPointerCount();
-        final int action = event.getActionMasked();
-
-        final boolean
-                twoFingerDrag =
-                action == MotionEvent.ACTION_POINTER_DOWN && pointerCount == 2;
-
-        final boolean
-                stylusButtonClickDrag =
-                action == MotionEvent.ACTION_DOWN && (event.isButtonPressed(
-                        MotionEvent.BUTTON_STYLUS_PRIMARY) || event.isButtonPressed(
-                        MotionEvent.BUTTON_STYLUS_SECONDARY));
-
-        final boolean
-                mouseButtonClickDrag =
-                action == MotionEvent.ACTION_DOWN && (event.isButtonPressed(
-                        MotionEvent.BUTTON_SECONDARY) || event.isButtonPressed(
-                        MotionEvent.BUTTON_TERTIARY));
-
-        return twoFingerDrag || stylusButtonClickDrag || mouseButtonClickDrag;
-    }
-
-    private void handleQsDown(MotionEvent event) {
-        if (event.getActionMasked() == MotionEvent.ACTION_DOWN && shouldQuickSettingsIntercept(
-                event.getX(), event.getY(), -1)) {
-            if (DEBUG_LOGCAT) Log.d(TAG, "handleQsDown");
-            mFalsingCollector.onQsDown();
-            mQsTracking = true;
-            onQsExpansionStarted();
-            mInitialHeightOnTouch = mQsExpansionHeight;
-            mInitialTouchY = event.getY();
-            mInitialTouchX = event.getX();
-
-            // If we interrupt an expansion gesture here, make sure to update the state correctly.
-            notifyExpandingFinished();
-        }
-    }
-
-    /**
-     * Input focus transfer is about to happen.
-     */
-    public void startWaitingForOpenPanelGesture() {
-        if (!isFullyCollapsed()) {
-            return;
-        }
-        mExpectingSynthesizedDown = true;
-        onTrackingStarted();
-        updatePanelExpanded();
-    }
-
-    /**
-     * Called when this view is no longer waiting for input focus transfer.
-     *
-     * There are two scenarios behind this function call. First, input focus transfer
-     * has successfully happened and this view already received synthetic DOWN event.
-     * (mExpectingSynthesizedDown == false). Do nothing.
-     *
-     * Second, before input focus transfer finished, user may have lifted finger
-     * in previous window and this window never received synthetic DOWN event.
-     * (mExpectingSynthesizedDown == true).
-     * In this case, we use the velocity to trigger fling event.
-     *
-     * @param velocity unit is in px / millis
-     */
-    public void stopWaitingForOpenPanelGesture(boolean cancel, final float velocity) {
-        if (mExpectingSynthesizedDown) {
-            mExpectingSynthesizedDown = false;
-            if (cancel) {
-                collapse(false /* delayed */, 1.0f /* speedUpFactor */);
-            } else {
-                maybeVibrateOnOpening();
-                fling(velocity > 1f ? 1000f * velocity : 0, true /* expand */);
-            }
-            onTrackingStopped(false);
-        }
-    }
-
-    @Override
-    protected boolean flingExpands(float vel, float vectorVel, float x, float y) {
-        boolean expands = super.flingExpands(vel, vectorVel, x, y);
-
-        // If we are already running a QS expansion, make sure that we keep the panel open.
-        if (mQsExpansionAnimator != null) {
-            expands = true;
-        }
-        return expands;
-    }
-
-    @Override
-    protected boolean shouldGestureWaitForTouchSlop() {
-        if (mExpectingSynthesizedDown) {
-            mExpectingSynthesizedDown = false;
-            return false;
-        }
-        return isFullyCollapsed() || mBarState != StatusBarState.SHADE;
-    }
-
-    @Override
-    protected boolean shouldGestureIgnoreXTouchSlop(float x, float y) {
-        return !mAffordanceHelper.isOnAffordanceIcon(x, y);
-    }
-
-    private void onQsTouch(MotionEvent event) {
-        int pointerIndex = event.findPointerIndex(mTrackingPointer);
-        if (pointerIndex < 0) {
-            pointerIndex = 0;
-            mTrackingPointer = event.getPointerId(pointerIndex);
-        }
-        final float y = event.getY(pointerIndex);
-        final float x = event.getX(pointerIndex);
-        final float h = y - mInitialTouchY;
-
-        switch (event.getActionMasked()) {
-            case MotionEvent.ACTION_DOWN:
-                mQsTracking = true;
-                traceQsJank(true /* startTracing */, false /* wasCancelled */);
-                mInitialTouchY = y;
-                mInitialTouchX = x;
-                onQsExpansionStarted();
-                mInitialHeightOnTouch = mQsExpansionHeight;
-                initVelocityTracker();
-                trackMovement(event);
-                break;
-
-            case MotionEvent.ACTION_POINTER_UP:
-                final int upPointer = event.getPointerId(event.getActionIndex());
-                if (mTrackingPointer == upPointer) {
-                    // gesture is ongoing, find a new pointer to track
-                    final int newIndex = event.getPointerId(0) != upPointer ? 0 : 1;
-                    final float newY = event.getY(newIndex);
-                    final float newX = event.getX(newIndex);
-                    mTrackingPointer = event.getPointerId(newIndex);
-                    mInitialHeightOnTouch = mQsExpansionHeight;
-                    mInitialTouchY = newY;
-                    mInitialTouchX = newX;
-                }
-                break;
-
-            case MotionEvent.ACTION_MOVE:
-                if (DEBUG_LOGCAT) Log.d(TAG, "onQSTouch move");
-                setQsExpansion(h + mInitialHeightOnTouch);
-                if (h >= getFalsingThreshold()) {
-                    mQsTouchAboveFalsingThreshold = true;
-                }
-                trackMovement(event);
-                break;
-
-            case MotionEvent.ACTION_UP:
-            case MotionEvent.ACTION_CANCEL:
-                mQsTracking = false;
-                mTrackingPointer = -1;
-                trackMovement(event);
-                float fraction = computeQsExpansionFraction();
-                if (fraction != 0f || y >= mInitialTouchY) {
-                    flingQsWithCurrentVelocity(y,
-                            event.getActionMasked() == MotionEvent.ACTION_CANCEL);
-                } else {
-                    traceQsJank(false /* startTracing */,
-                            event.getActionMasked() == MotionEvent.ACTION_CANCEL);
-                }
-                if (mQsVelocityTracker != null) {
-                    mQsVelocityTracker.recycle();
-                    mQsVelocityTracker = null;
-                }
-                break;
-        }
-    }
-
-    private int getFalsingThreshold() {
-        float factor = mCentralSurfaces.isWakeUpComingFromTouch() ? 1.5f : 1.0f;
-        return (int) (mQsFalsingThreshold * factor);
-    }
-
-    private void setOverScrolling(boolean overscrolling) {
-        mStackScrollerOverscrolling = overscrolling;
-        if (mQs == null) return;
-        mQs.setOverscrolling(overscrolling);
-    }
-
-    private void onQsExpansionStarted() {
-        onQsExpansionStarted(0);
-    }
-
-    protected void onQsExpansionStarted(int overscrollAmount) {
-        cancelQsAnimation();
-        cancelHeightAnimator();
-
-        // Reset scroll position and apply that position to the expanded height.
-        float height = mQsExpansionHeight - overscrollAmount;
-        setQsExpansion(height);
-        requestPanelHeightUpdate();
-        mNotificationStackScrollLayoutController.checkSnoozeLeavebehind();
-
-        // When expanding QS, let's authenticate the user if possible,
-        // this will speed up notification actions.
-        if (height == 0) {
-            mCentralSurfaces.requestFaceAuth(false);
-        }
-    }
-
-    @VisibleForTesting void setQsExpanded(boolean expanded) {
-        boolean changed = mQsExpanded != expanded;
-        if (changed) {
-            mQsExpanded = expanded;
-            updateQsState();
-            requestPanelHeightUpdate();
-            mFalsingCollector.setQsExpanded(expanded);
-            mCentralSurfaces.setQsExpanded(expanded);
-            mNotificationsQSContainerController.setQsExpanded(expanded);
-            mPulseExpansionHandler.setQsExpanded(expanded);
-            mKeyguardBypassController.setQSExpanded(expanded);
-            mPrivacyDotViewController.setQsExpanded(expanded);
-        }
-    }
-
-    private void maybeAnimateBottomAreaAlpha() {
-        mBottomAreaShadeAlphaAnimator.cancel();
-        if (mBarState == StatusBarState.SHADE_LOCKED) {
-            mBottomAreaShadeAlphaAnimator.setFloatValues(mBottomAreaShadeAlpha, 0.0f);
-            mBottomAreaShadeAlphaAnimator.start();
-        } else {
-            mBottomAreaShadeAlpha = 1f;
-        }
-    }
-
-    private final Runnable mAnimateKeyguardBottomAreaInvisibleEndRunnable = new Runnable() {
-        @Override
-        public void run() {
-            mKeyguardBottomArea.setVisibility(View.GONE);
-        }
-    };
-
-    private void setKeyguardBottomAreaVisibility(int statusBarState, boolean goingToFullShade) {
-        mKeyguardBottomArea.animate().cancel();
-        if (goingToFullShade) {
-            mKeyguardBottomArea.animate().alpha(0f).setStartDelay(
-                    mKeyguardStateController.getKeyguardFadingAwayDelay()).setDuration(
-                    mKeyguardStateController.getShortenedFadingAwayDuration()).setInterpolator(
-                    Interpolators.ALPHA_OUT).withEndAction(
-                    mAnimateKeyguardBottomAreaInvisibleEndRunnable).start();
-        } else if (statusBarState == KEYGUARD
-                || statusBarState == StatusBarState.SHADE_LOCKED) {
-            mKeyguardBottomArea.setVisibility(View.VISIBLE);
-            mKeyguardBottomArea.setAlpha(1f);
-        } else {
-            mKeyguardBottomArea.setVisibility(View.GONE);
-        }
-    }
-
-    private void updateQsState() {
-        boolean qsFullScreen = mQsExpanded && !mSplitShadeEnabled;
-        mNotificationStackScrollLayoutController.setQsFullScreen(qsFullScreen);
-        mNotificationStackScrollLayoutController.setScrollingEnabled(
-                mBarState != KEYGUARD && (!qsFullScreen || mQsExpansionFromOverscroll));
-
-        if (mKeyguardUserSwitcherController != null && mQsExpanded
-                && !mStackScrollerOverscrolling) {
-            mKeyguardUserSwitcherController.closeSwitcherIfOpenAndNotSimple(true);
-        }
-        if (mQs == null) return;
-        mQs.setExpanded(mQsExpanded);
-    }
-
-    void setQsExpansion(float height) {
-        height = Math.min(Math.max(height, mQsMinExpansionHeight), mQsMaxExpansionHeight);
-        mQsFullyExpanded = height == mQsMaxExpansionHeight && mQsMaxExpansionHeight != 0;
-        boolean qsAnimatingAway = !mQsAnimatorExpand && mAnimatingQS;
-        if (height > mQsMinExpansionHeight && !mQsExpanded && !mStackScrollerOverscrolling
-                && !mDozing && !qsAnimatingAway) {
-            setQsExpanded(true);
-        } else if (height <= mQsMinExpansionHeight && mQsExpanded) {
-            setQsExpanded(false);
-        }
-        mQsExpansionHeight = height;
-        updateQsExpansion();
-        requestScrollerTopPaddingUpdate(false /* animate */);
-        mKeyguardStatusBarViewController.updateViewState();
-        if (mBarState == StatusBarState.SHADE_LOCKED || mBarState == KEYGUARD) {
-            updateKeyguardBottomAreaAlpha();
-            positionClockAndNotifications();
-        }
-
-        if (mAccessibilityManager.isEnabled()) {
-            mView.setAccessibilityPaneTitle(determineAccessibilityPaneTitle());
-        }
-
-        if (!mFalsingManager.isUnlockingDisabled() && mQsFullyExpanded
-                && mFalsingCollector.shouldEnforceBouncer()) {
-            mCentralSurfaces.executeRunnableDismissingKeyguard(null, null /* cancelAction */,
-                    false /* dismissShade */, true /* afterKeyguardGone */, false /* deferred */);
-        }
-        if (DEBUG_DRAWABLE) {
-            mView.invalidate();
-        }
-    }
-
-    private void updateQsExpansion() {
-        if (mQs == null) return;
-        final float squishiness;
-        if ((mQsExpandImmediate || mQsExpanded) && !mSplitShadeEnabled) {
-            squishiness = 1;
-        } else if (mLockscreenShadeTransitionController.getQSDragProgress() > 0) {
-            squishiness = mLockscreenShadeTransitionController.getQSDragProgress();
-        } else {
-            squishiness = mNotificationStackScrollLayoutController
-                    .getNotificationSquishinessFraction();
-        }
-        final float qsExpansionFraction = computeQsExpansionFraction();
-        final float adjustedExpansionFraction = mSplitShadeEnabled
-                ? 1f : computeQsExpansionFraction();
-        mQs.setQsExpansion(adjustedExpansionFraction, getExpandedFraction(), getHeaderTranslation(),
-                squishiness);
-        mMediaHierarchyManager.setQsExpansion(qsExpansionFraction);
-        int qsPanelBottomY = calculateQsBottomPosition(qsExpansionFraction);
-        mScrimController.setQsPosition(qsExpansionFraction, qsPanelBottomY);
-        setQSClippingBounds();
-
-        if (mSplitShadeEnabled) {
-            // In split shade we want to pretend that QS are always collapsed so their behaviour and
-            // interactions don't influence notifications as they do in portrait. But we want to set
-            // 0 explicitly in case we're rotating from non-split shade with QS expansion of 1.
-            mNotificationStackScrollLayoutController.setQsExpansionFraction(0);
-        } else {
-            mNotificationStackScrollLayoutController.setQsExpansionFraction(qsExpansionFraction);
-        }
-
-        mDepthController.setQsPanelExpansion(qsExpansionFraction);
-        mStatusBarKeyguardViewManager.setQsExpansion(qsExpansionFraction);
-
-        // updateQsExpansion will get called whenever mTransitionToFullShadeProgress or
-        // mLockscreenShadeTransitionController.getDragProgress change.
-        // When in lockscreen, getDragProgress indicates the true expanded fraction of QS
-        float shadeExpandedFraction = mTransitioningToFullShadeProgress > 0
-                ? mLockscreenShadeTransitionController.getQSDragProgress()
-                : getExpandedFraction();
-        mLargeScreenShadeHeaderController.setShadeExpandedFraction(shadeExpandedFraction);
-        mLargeScreenShadeHeaderController.setQsExpandedFraction(qsExpansionFraction);
-        mLargeScreenShadeHeaderController.setShadeExpanded(mQsVisible);
-    }
-
-    private void onStackYChanged(boolean shouldAnimate) {
-        if (mQs != null) {
-            if (shouldAnimate) {
-                animateNextNotificationBounds(StackStateAnimator.ANIMATION_DURATION_STANDARD,
-                        0 /* delay */);
-                mNotificationBoundsAnimationDelay = 0;
-            }
-            setQSClippingBounds();
-        }
-    };
-
-    private void onNotificationScrolled(int newScrollPosition) {
-        updateQSExpansionEnabledAmbient();
-    }
-
-    private void updateQSExpansionEnabledAmbient() {
-        final float scrollRangeToTop = mAmbientState.getTopPadding() - mQuickQsHeaderHeight;
-        mQsExpansionEnabledAmbient = mSplitShadeEnabled
-                || (mAmbientState.getScrollY() <= scrollRangeToTop);
-        setQsExpansionEnabled();
-    }
-
-    /**
-     * Updates scrim bounds, QS clipping, and KSV clipping as well based on the bounds of the shade
-     * and QS state.
-     */
-    private void setQSClippingBounds() {
-        final int qsPanelBottomY = calculateQsBottomPosition(computeQsExpansionFraction());
-        final boolean qsVisible = (computeQsExpansionFraction() > 0 || qsPanelBottomY > 0);
-
-        int top = calculateTopQsClippingBound(qsPanelBottomY);
-        int bottom = calculateBottomQsClippingBound(top);
-        int left = calculateLeftQsClippingBound();
-        int right = calculateRightQsClippingBound();
-        // top should never be lower than bottom, otherwise it will be invisible.
-        top = Math.min(top, bottom);
-        applyQSClippingBounds(left, top, right, bottom, qsVisible);
-    }
-
-    private int calculateTopQsClippingBound(int qsPanelBottomY) {
-        int top;
-        if (mSplitShadeEnabled) {
-            top = Math.min(qsPanelBottomY, mLargeScreenShadeHeaderHeight);
-        } else {
-            if (mTransitioningToFullShadeProgress > 0.0f) {
-                // If we're transitioning, let's use the actual value. The else case
-                // can be wrong during transitions when waiting for the keyguard to unlock
-                top = mTransitionToFullShadeQSPosition;
-            } else {
-                final float notificationTop = getQSEdgePosition();
-                if (isOnKeyguard()) {
-                    if (mKeyguardBypassController.getBypassEnabled()) {
-                        // When bypassing on the keyguard, let's use the panel bottom.
-                        // this should go away once we unify the stackY position and don't have
-                        // to do this min anymore below.
-                        top = qsPanelBottomY;
-                    } else {
-                        top = (int) Math.min(qsPanelBottomY, notificationTop);
-                    }
-                } else {
-                    top = (int) notificationTop;
-                }
-            }
-            top += mOverStretchAmount;
-            // Correction for instant expansion caused by HUN pull down/
-            if (mMinFraction > 0f && mMinFraction < 1f) {
-                float realFraction =
-                        (getExpandedFraction() - mMinFraction) / (1f - mMinFraction);
-                top *= MathUtils.saturate(realFraction / mMinFraction);
-            }
-        }
-        return top;
-    }
-
-    private int calculateBottomQsClippingBound(int top) {
-        if (mSplitShadeEnabled) {
-            return top + mNotificationStackScrollLayoutController.getHeight()
-                    + mSplitShadeNotificationsScrimMarginBottom;
-        } else {
-            return getView().getBottom();
-        }
-    }
-
-    private int calculateLeftQsClippingBound() {
-        if (isFullWidth()) {
-            // left bounds can ignore insets, it should always reach the edge of the screen
-            return 0;
-        } else {
-            return mNotificationStackScrollLayoutController.getLeft();
-        }
-    }
-
-    private int calculateRightQsClippingBound() {
-        if (isFullWidth()) {
-            return getView().getRight() + mDisplayRightInset;
-        } else {
-            return mNotificationStackScrollLayoutController.getRight();
-        }
-    }
-
-    private void applyQSClippingBounds(int left, int top, int right, int bottom,
-            boolean qsVisible) {
-        if (!mAnimateNextNotificationBounds || mKeyguardStatusAreaClipBounds.isEmpty()) {
-            if (mQsClippingAnimation != null) {
-                // update the end position of the animator
-                mQsClippingAnimationEndBounds.set(left, top, right, bottom);
-            } else {
-                applyQSClippingImmediately(left, top, right, bottom, qsVisible);
-            }
-        } else {
-            mQsClippingAnimationEndBounds.set(left, top, right, bottom);
-            final int startLeft = mKeyguardStatusAreaClipBounds.left;
-            final int startTop = mKeyguardStatusAreaClipBounds.top;
-            final int startRight = mKeyguardStatusAreaClipBounds.right;
-            final int startBottom = mKeyguardStatusAreaClipBounds.bottom;
-            if (mQsClippingAnimation != null) {
-                mQsClippingAnimation.cancel();
-            }
-            mQsClippingAnimation = ValueAnimator.ofFloat(0.0f, 1.0f);
-            mQsClippingAnimation.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
-            mQsClippingAnimation.setDuration(mNotificationBoundsAnimationDuration);
-            mQsClippingAnimation.setStartDelay(mNotificationBoundsAnimationDelay);
-            mQsClippingAnimation.addUpdateListener(animation -> {
-                float fraction = animation.getAnimatedFraction();
-                int animLeft = (int) MathUtils.lerp(startLeft,
-                        mQsClippingAnimationEndBounds.left, fraction);
-                int animTop = (int) MathUtils.lerp(startTop,
-                        mQsClippingAnimationEndBounds.top, fraction);
-                int animRight = (int) MathUtils.lerp(startRight,
-                        mQsClippingAnimationEndBounds.right, fraction);
-                int animBottom = (int) MathUtils.lerp(startBottom,
-                        mQsClippingAnimationEndBounds.bottom, fraction);
-                applyQSClippingImmediately(animLeft, animTop, animRight, animBottom,
-                        qsVisible /* qsVisible */);
-            });
-            mQsClippingAnimation.addListener(new AnimatorListenerAdapter() {
-                @Override
-                public void onAnimationEnd(Animator animation) {
-                    mQsClippingAnimation = null;
-                    mIsQsTranslationResetAnimator = false;
-                    mIsPulseExpansionResetAnimator = false;
-                }
-            });
-            mQsClippingAnimation.start();
-        }
-        mAnimateNextNotificationBounds = false;
-        mNotificationBoundsAnimationDelay = 0;
-    }
-
-    private void applyQSClippingImmediately(int left, int top, int right, int bottom,
-            boolean qsVisible) {
-        // Fancy clipping for quick settings
-        int radius = mScrimCornerRadius;
-        boolean clipStatusView = false;
-        if (isFullWidth()) {
-            // The padding on this area is large enough that we can use a cheaper clipping strategy
-            mKeyguardStatusAreaClipBounds.set(left, top, right, bottom);
-            clipStatusView = qsVisible;
-            float screenCornerRadius = mRecordingController.isRecording() ? 0 : mScreenCornerRadius;
-            radius = (int) MathUtils.lerp(screenCornerRadius, mScrimCornerRadius,
-                    Math.min(top / (float) mScrimCornerRadius, 1f));
-        }
-        if (mQs != null) {
-            float qsTranslation = 0;
-            boolean pulseExpanding = mPulseExpansionHandler.isExpanding();
-            if (mTransitioningToFullShadeProgress > 0.0f || pulseExpanding
-                    || (mQsClippingAnimation != null
-                        && (mIsQsTranslationResetAnimator || mIsPulseExpansionResetAnimator))) {
-                if (pulseExpanding || mIsPulseExpansionResetAnimator) {
-                    // qsTranslation should only be positive during pulse expansion because it's
-                    // already translating in from the top
-                    qsTranslation = Math.max(0, (top - mQs.getHeader().getHeight()) / 2.0f);
-                } else if (!mSplitShadeEnabled) {
-                    qsTranslation = (top - mQs.getHeader().getHeight()) * QS_PARALLAX_AMOUNT;
-                }
-            }
-            mQsTranslationForFullShadeTransition = qsTranslation;
-            updateQsFrameTranslation();
-            float currentTranslation = mQsFrame.getTranslationY();
-            mQsClipTop = (int) (top - currentTranslation - mQsFrame.getTop());
-            mQsClipBottom = (int) (bottom - currentTranslation - mQsFrame.getTop());
-            mQsVisible = qsVisible;
-            mQs.setQsVisible(mQsVisible);
-            mQs.setFancyClipping(
-                    mQsClipTop,
-                    mQsClipBottom,
-                    radius, qsVisible
-                    && !mSplitShadeEnabled);
-        }
-        mKeyguardStatusViewController.setClipBounds(
-                clipStatusView ? mKeyguardStatusAreaClipBounds : null);
-        if (!qsVisible && mSplitShadeEnabled) {
-            // On the lockscreen when qs isn't visible, we don't want the bounds of the shade to
-            // be visible, otherwise you can see the bounds once swiping up to see bouncer
-            mScrimController.setNotificationsBounds(0, 0, 0, 0);
-        } else {
-            // Increase the height of the notifications scrim when not in split shade
-            // (e.g. portrait tablet) so the rounded corners are not visible at the bottom,
-            // in this case they are rendered off-screen
-            final int notificationsScrimBottom = mSplitShadeEnabled ? bottom : bottom + radius;
-            mScrimController.setNotificationsBounds(left, top, right, notificationsScrimBottom);
-        }
-
-        if (mSplitShadeEnabled) {
-            mKeyguardStatusBarViewController.setNoTopClipping();
-        } else {
-            mKeyguardStatusBarViewController.updateTopClipping(top);
-        }
-
-        mScrimController.setScrimCornerRadius(radius);
-
-        // Convert global clipping coordinates to local ones,
-        // relative to NotificationStackScrollLayout
-        int nsslLeft = left - mNotificationStackScrollLayoutController.getLeft();
-        int nsslRight = right - mNotificationStackScrollLayoutController.getLeft();
-        int nsslTop = top - mNotificationStackScrollLayoutController.getTop();
-        int nsslBottom = bottom - mNotificationStackScrollLayoutController.getTop();
-        int bottomRadius = mSplitShadeEnabled ? radius : 0;
-        mNotificationStackScrollLayoutController.setRoundedClippingBounds(
-                nsslLeft, nsslTop, nsslRight, nsslBottom, radius, bottomRadius);
-    }
-
-    private float getQSEdgePosition() {
-        // TODO: replace StackY with unified calculation
-        return Math.max(mQuickQsHeaderHeight * mAmbientState.getExpansionFraction(),
-                mAmbientState.getStackY()
-                        // need to adjust for extra margin introduced by large screen shade header
-                        + mAmbientState.getStackTopMargin() * mAmbientState.getExpansionFraction()
-                        - mAmbientState.getScrollY());
-    }
-
-    private int calculateQsBottomPosition(float qsExpansionFraction) {
-        if (mTransitioningToFullShadeProgress > 0.0f) {
-            return mTransitionToFullShadeQSPosition;
-        } else {
-            int qsBottomY = (int) getHeaderTranslation() + mQs.getQsMinExpansionHeight();
-            if (qsExpansionFraction != 0.0) {
-                qsBottomY = (int) MathUtils.lerp(
-                        qsBottomY, mQs.getDesiredHeight(), qsExpansionFraction);
-            }
-            return qsBottomY;
-        }
-    }
-
-    private String determineAccessibilityPaneTitle() {
-        if (mQs != null && mQs.isCustomizing()) {
-            return mResources.getString(R.string.accessibility_desc_quick_settings_edit);
-        } else if (mQsExpansionHeight != 0.0f && mQsFullyExpanded) {
-            // Upon initialisation when we are not layouted yet we don't want to announce that we
-            // are fully expanded, hence the != 0.0f check.
-            return mResources.getString(R.string.accessibility_desc_quick_settings);
-        } else if (mBarState == KEYGUARD) {
-            return mResources.getString(R.string.accessibility_desc_lock_screen);
-        } else {
-            return mResources.getString(R.string.accessibility_desc_notification_shade);
-        }
-    }
-
-    private float calculateNotificationsTopPadding() {
-        if (mSplitShadeEnabled && !mKeyguardShowing) {
-            return 0;
-        }
-        if (mKeyguardShowing && (mQsExpandImmediate
-                || mIsExpanding && mQsExpandedWhenExpandingStarted)) {
-
-            // Either QS pushes the notifications down when fully expanded, or QS is fully above the
-            // notifications (mostly on tablets). maxNotificationPadding denotes the normal top
-            // padding on Keyguard, maxQsPadding denotes the top padding from the quick settings
-            // panel. We need to take the maximum and linearly interpolate with the panel expansion
-            // for a nice motion.
-            int maxNotificationPadding = getKeyguardNotificationStaticPadding();
-            int maxQsPadding = mQsMaxExpansionHeight;
-            int max = mBarState == KEYGUARD ? Math.max(
-                    maxNotificationPadding, maxQsPadding) : maxQsPadding;
-            return (int) MathUtils.lerp((float) mQsMinExpansionHeight, (float) max,
-                    getExpandedFraction());
-        } else if (mQsSizeChangeAnimator != null) {
-            return Math.max(
-                    (int) mQsSizeChangeAnimator.getAnimatedValue(),
-                    getKeyguardNotificationStaticPadding());
-        } else if (mKeyguardShowing) {
-            // We can only do the smoother transition on Keyguard when we also are not collapsing
-            // from a scrolled quick settings.
-            return MathUtils.lerp((float) getKeyguardNotificationStaticPadding(),
-                    (float) (mQsMaxExpansionHeight),
-                    computeQsExpansionFraction());
-        } else {
-            return mQsFrameTranslateController.getNotificationsTopPadding(mQsExpansionHeight,
-                    mNotificationStackScrollLayoutController);
-        }
-    }
-
-    /**
-     * @return the topPadding of notifications when on keyguard not respecting quick settings
-     * expansion
-     */
-    private int getKeyguardNotificationStaticPadding() {
-        if (!mKeyguardShowing) {
-            return 0;
-        }
-        if (!mKeyguardBypassController.getBypassEnabled()) {
-            return mClockPositionResult.stackScrollerPadding;
-        }
-        int collapsedPosition = mHeadsUpInset;
-        if (!mNotificationStackScrollLayoutController.isPulseExpanding()) {
-            return collapsedPosition;
-        } else {
-            int expandedPosition = mClockPositionResult.stackScrollerPadding;
-            return (int) MathUtils.lerp(collapsedPosition, expandedPosition,
-                    mNotificationStackScrollLayoutController.calculateAppearFractionBypass());
-        }
-    }
-
-
-    protected void requestScrollerTopPaddingUpdate(boolean animate) {
-        mNotificationStackScrollLayoutController.updateTopPadding(
-                calculateNotificationsTopPadding(), animate);
-        if (mKeyguardShowing && mKeyguardBypassController.getBypassEnabled()) {
-            // update the position of the header
-            updateQsExpansion();
-        }
-    }
-
-    /**
-     * Set the amount of pixels we have currently dragged down if we're transitioning to the full
-     * shade. 0.0f means we're not transitioning yet.
-     */
-    public void setTransitionToFullShadeAmount(float pxAmount, boolean animate, long delay) {
-        if (animate && isFullWidth()) {
-            animateNextNotificationBounds(StackStateAnimator.ANIMATION_DURATION_GO_TO_FULL_SHADE,
-                    delay);
-            mIsQsTranslationResetAnimator = mQsTranslationForFullShadeTransition > 0.0f;
-        }
-
-        float endPosition = 0;
-        if (pxAmount > 0.0f) {
-            if (mNotificationStackScrollLayoutController.getVisibleNotificationCount() == 0
-                    && !mMediaDataManager.hasActiveMediaOrRecommendation()) {
-                // No notifications are visible, let's animate to the height of qs instead
-                if (mQs != null) {
-                    // Let's interpolate to the header height instead of the top padding,
-                    // because the toppadding is way too low because of the large clock.
-                    // we still want to take into account the edgePosition though as that nicely
-                    // overshoots in the stackscroller
-                    endPosition = getQSEdgePosition()
-                            - mNotificationStackScrollLayoutController.getTopPadding()
-                            + mQs.getHeader().getHeight();
-                }
-            } else {
-                // Interpolating to the new bottom edge position!
-                endPosition = getQSEdgePosition()
-                        + mNotificationStackScrollLayoutController.getFullShadeTransitionInset();
-                if (isOnKeyguard()) {
-                    endPosition -= mLockscreenNotificationQSPadding;
-                }
-            }
-        }
-
-        // Calculate the overshoot amount such that we're reaching the target after our desired
-        // distance, but only reach it fully once we drag a full shade length.
-        mTransitioningToFullShadeProgress = Interpolators.FAST_OUT_SLOW_IN.getInterpolation(
-                MathUtils.saturate(pxAmount / mDistanceForQSFullShadeTransition));
-
-        int position = (int) MathUtils.lerp((float) 0, endPosition,
-                mTransitioningToFullShadeProgress);
-        if (mTransitioningToFullShadeProgress > 0.0f) {
-            // we want at least 1 pixel otherwise the panel won't be clipped
-            position = Math.max(1, position);
-        }
-        mTransitionToFullShadeQSPosition = position;
-        updateQsExpansion();
-    }
-
-    /**
-     * Notify the panel that the pulse expansion has finished and that we're going to the full
-     * shade
-     */
-    public void onPulseExpansionFinished() {
-        animateNextNotificationBounds(StackStateAnimator.ANIMATION_DURATION_GO_TO_FULL_SHADE, 0);
-        mIsPulseExpansionResetAnimator = true;
-    }
-
-    /**
-     * 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.
-     */
-    public void setKeyguardTransitionProgress(float keyguardAlpha, int keyguardTranslationY) {
-        mKeyguardOnlyContentAlpha = Interpolators.ALPHA_IN.getInterpolation(keyguardAlpha);
-        mKeyguardOnlyTransitionTranslationY = keyguardTranslationY;
-        if (mBarState == KEYGUARD) {
-            // If the animator is running, it's already fading out the content and this is a reset
-            mBottomAreaShadeAlpha = mKeyguardOnlyContentAlpha;
-            updateKeyguardBottomAreaAlpha();
-        }
-        updateClock();
-    }
-
-    /**
-     * Sets the alpha value to be set on the keyguard status bar.
-     *
-     * @param alpha value between 0 and 1. -1 if the value is to be reset.
-     */
-    public void setKeyguardStatusBarAlpha(float alpha) {
-        mKeyguardStatusBarViewController.setAlpha(alpha);
-    }
-
-    private void trackMovement(MotionEvent event) {
-        if (mQsVelocityTracker != null) mQsVelocityTracker.addMovement(event);
-    }
-
-    private void initVelocityTracker() {
-        if (mQsVelocityTracker != null) {
-            mQsVelocityTracker.recycle();
-        }
-        mQsVelocityTracker = VelocityTracker.obtain();
-    }
-
-    private float getCurrentQSVelocity() {
-        if (mQsVelocityTracker == null) {
-            return 0;
-        }
-        mQsVelocityTracker.computeCurrentVelocity(1000);
-        return mQsVelocityTracker.getYVelocity();
-    }
-
-    private void cancelQsAnimation() {
-        if (mQsExpansionAnimator != null) {
-            mQsExpansionAnimator.cancel();
-        }
-    }
-
-    /**
-     * @see #flingSettings(float, int, Runnable, boolean)
-     */
-    public void flingSettings(float vel, int type) {
-        flingSettings(vel, type, null /* onFinishRunnable */, false /* isClick */);
-    }
-
-    /**
-     * Animates QS or QQS as if the user had swiped up or down.
-     *
-     * @param vel              Finger velocity or 0 when not initiated by touch events.
-     * @param type             Either {@link #FLING_EXPAND}, {@link #FLING_COLLAPSE} or {@link
-     *                         #FLING_HIDE}.
-     * @param onFinishRunnable Runnable to be executed at the end of animation.
-     * @param isClick          If originated by click (different interpolator and duration.)
-     */
-    protected void flingSettings(float vel, int type, final Runnable onFinishRunnable,
-            boolean isClick) {
-        float target;
-        switch (type) {
-            case FLING_EXPAND:
-                target = mQsMaxExpansionHeight;
-                break;
-            case FLING_COLLAPSE:
-                target = mQsMinExpansionHeight;
-                break;
-            case FLING_HIDE:
-            default:
-                if (mQs != null) {
-                    mQs.closeDetail();
-                }
-                target = 0;
-        }
-        if (target == mQsExpansionHeight) {
-            if (onFinishRunnable != null) {
-                onFinishRunnable.run();
-            }
-            traceQsJank(false /* startTracing */, type != FLING_EXPAND /* wasCancelled */);
-            return;
-        }
-
-        // If we move in the opposite direction, reset velocity and use a different duration.
-        boolean oppositeDirection = false;
-        boolean expanding = type == FLING_EXPAND;
-        if (vel > 0 && !expanding || vel < 0 && expanding) {
-            vel = 0;
-            oppositeDirection = true;
-        }
-        ValueAnimator animator = ValueAnimator.ofFloat(mQsExpansionHeight, target);
-        if (isClick) {
-            animator.setInterpolator(Interpolators.TOUCH_RESPONSE);
-            animator.setDuration(368);
-        } else {
-            mFlingAnimationUtils.apply(animator, mQsExpansionHeight, target, vel);
-        }
-        if (oppositeDirection) {
-            animator.setDuration(350);
-        }
-        animator.addUpdateListener(animation -> {
-            setQsExpansion((Float) animation.getAnimatedValue());
-        });
-        animator.addListener(new AnimatorListenerAdapter() {
-            private boolean mIsCanceled;
-            @Override
-            public void onAnimationStart(Animator animation) {
-                notifyExpandingStarted();
-            }
-
-            @Override
-            public void onAnimationCancel(Animator animation) {
-                mIsCanceled = true;
-            }
-
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                mQSAnimatingHiddenFromCollapsed = false;
-                mAnimatingQS = false;
-                notifyExpandingFinished();
-                mNotificationStackScrollLayoutController.resetCheckSnoozeLeavebehind();
-                mQsExpansionAnimator = null;
-                if (onFinishRunnable != null) {
-                    onFinishRunnable.run();
-                }
-                traceQsJank(false /* startTracing */, mIsCanceled /* wasCancelled */);
-            }
-        });
-        // Let's note that we're animating QS. Moving the animator here will cancel it immediately,
-        // so we need a separate flag.
-        mAnimatingQS = true;
-        animator.start();
-        mQsExpansionAnimator = animator;
-        mQsAnimatorExpand = expanding;
-        mQSAnimatingHiddenFromCollapsed = computeQsExpansionFraction() == 0.0f && target == 0;
-    }
-
-    /**
-     * @return Whether we should intercept a gesture to open Quick Settings.
-     */
-    private boolean shouldQuickSettingsIntercept(float x, float y, float yDiff) {
-        if (!isQsExpansionEnabled() || mCollapsedOnDown
-                || (mKeyguardShowing && mKeyguardBypassController.getBypassEnabled())
-                || mSplitShadeEnabled) {
-            return false;
-        }
-        View header = mKeyguardShowing || mQs == null ? mKeyguardStatusBar : mQs.getHeader();
-        int frameTop = mKeyguardShowing || mQs == null ? 0 : mQsFrame.getTop();
-        mQsInterceptRegion.set(
-                /* left= */ (int) mQsFrame.getX(),
-                /* top= */ header.getTop() + frameTop,
-                /* right= */ (int) mQsFrame.getX() + mQsFrame.getWidth(),
-                /* bottom= */ header.getBottom() + frameTop);
-        // Also allow QS to intercept if the touch is near the notch.
-        mStatusBarTouchableRegionManager.updateRegionForNotch(mQsInterceptRegion);
-        final boolean onHeader = mQsInterceptRegion.contains((int) x, (int) y);
-
-        if (mQsExpanded) {
-            return onHeader || (yDiff < 0 && isInQsArea(x, y));
-        } else {
-            return onHeader;
-        }
-    }
-
-    @Override
-    protected boolean canCollapsePanelOnTouch() {
-        if (!isInSettings() && mBarState == KEYGUARD) {
-            return true;
-        }
-
-        if (mNotificationStackScrollLayoutController.isScrolledToBottom()) {
-            return true;
-        }
-
-        return !mSplitShadeEnabled && (isInSettings() || mIsPanelCollapseOnQQS);
-    }
-
-    @Override
-    protected int getMaxPanelHeight() {
-        int min = mStatusBarMinHeight;
-        if (!(mBarState == KEYGUARD)
-                && mNotificationStackScrollLayoutController.getNotGoneChildCount() == 0) {
-            int minHeight = mQsMinExpansionHeight;
-            min = Math.max(min, minHeight);
-        }
-        int maxHeight;
-        if (mQsExpandImmediate || mQsExpanded || mIsExpanding && mQsExpandedWhenExpandingStarted
-                || mPulsing) {
-            maxHeight = calculatePanelHeightQsExpanded();
-        } else {
-            maxHeight = calculatePanelHeightShade();
-        }
-        maxHeight = Math.max(min, maxHeight);
-        if (maxHeight == 0 || isNaN(maxHeight)) {
-            Log.wtf(TAG, "maxPanelHeight is invalid. mOverExpansion: "
-                    + mOverExpansion + ", calculatePanelHeightQsExpanded: "
-                    + calculatePanelHeightQsExpanded() + ", calculatePanelHeightShade: "
-                    + calculatePanelHeightShade() + ", mStatusBarMinHeight = "
-                    + mStatusBarMinHeight + ", mQsMinExpansionHeight = " + mQsMinExpansionHeight);
-        }
-        return maxHeight;
-    }
-
-    public boolean isInSettings() {
-        return mQsExpanded;
-    }
-
-    public boolean isExpanding() {
-        return mIsExpanding;
-    }
-
-    @Override
-    protected void onHeightUpdated(float expandedHeight) {
-        if (!mQsExpanded || mQsExpandImmediate || mIsExpanding && mQsExpandedWhenExpandingStarted) {
-            // Updating the clock position will set the top padding which might
-            // trigger a new panel height and re-position the clock.
-            // This is a circular dependency and should be avoided, otherwise we'll have
-            // a stack overflow.
-            if (mStackScrollerMeasuringPass > 2) {
-                if (DEBUG_LOGCAT) Log.d(TAG, "Unstable notification panel height. Aborting.");
-            } else {
-                positionClockAndNotifications();
-            }
-        }
-        if (mQsExpandImmediate || mQsExpanded && !mQsTracking && mQsExpansionAnimator == null
-                && !mQsExpansionFromOverscroll) {
-            float t;
-            if (mKeyguardShowing) {
-
-                // On Keyguard, interpolate the QS expansion linearly to the panel expansion
-                t = expandedHeight / (getMaxPanelHeight());
-            } else {
-                // In Shade, interpolate linearly such that QS is closed whenever panel height is
-                // minimum QS expansion + minStackHeight
-                float
-                        panelHeightQsCollapsed =
-                        mNotificationStackScrollLayoutController.getIntrinsicPadding()
-                                + mNotificationStackScrollLayoutController.getLayoutMinHeight();
-                float panelHeightQsExpanded = calculatePanelHeightQsExpanded();
-                t =
-                        (expandedHeight - panelHeightQsCollapsed) / (panelHeightQsExpanded
-                                - panelHeightQsCollapsed);
-            }
-            float
-                    targetHeight =
-                    mQsMinExpansionHeight + t * (mQsMaxExpansionHeight - mQsMinExpansionHeight);
-            setQsExpansion(targetHeight);
-        }
-        updateExpandedHeight(expandedHeight);
-        updateHeader();
-        updateNotificationTranslucency();
-        updatePanelExpanded();
-        updateGestureExclusionRect();
-        if (DEBUG_DRAWABLE) {
-            mView.invalidate();
-        }
-    }
-
-    private void updatePanelExpanded() {
-        boolean isExpanded = !isFullyCollapsed() || mExpectingSynthesizedDown;
-        if (mPanelExpanded != isExpanded) {
-            mPanelExpanded = isExpanded;
-
-            mHeadsUpManager.setIsPanelExpanded(isExpanded);
-            mStatusBarTouchableRegionManager.setPanelExpanded(isExpanded);
-            mCentralSurfaces.setPanelExpanded(isExpanded);
-
-            if (!isExpanded && mQs != null && mQs.isCustomizing()) {
-                mQs.closeCustomizer();
-            }
-        }
-    }
-
-    boolean isPanelExpanded() {
-        return mPanelExpanded;
-    }
-
-    private int calculatePanelHeightShade() {
-        int emptyBottomMargin = mNotificationStackScrollLayoutController.getEmptyBottomMargin();
-        int maxHeight = mNotificationStackScrollLayoutController.getHeight() - emptyBottomMargin;
-
-        if (mBarState == KEYGUARD) {
-            int minKeyguardPanelBottom = mClockPositionAlgorithm.getLockscreenStatusViewHeight()
-                    + mNotificationStackScrollLayoutController.getIntrinsicContentHeight();
-            return Math.max(maxHeight, minKeyguardPanelBottom);
-        } else {
-            return maxHeight;
-        }
-    }
-
-    private int calculatePanelHeightQsExpanded() {
-        float
-                notificationHeight =
-                mNotificationStackScrollLayoutController.getHeight()
-                        - mNotificationStackScrollLayoutController.getEmptyBottomMargin()
-                        - mNotificationStackScrollLayoutController.getTopPadding();
-
-        // When only empty shade view is visible in QS collapsed state, simulate that we would have
-        // it in expanded QS state as well so we don't run into troubles when fading the view in/out
-        // and expanding/collapsing the whole panel from/to quick settings.
-        if (mNotificationStackScrollLayoutController.getNotGoneChildCount() == 0
-                && mNotificationStackScrollLayoutController.isShowingEmptyShadeView()) {
-            notificationHeight = mNotificationStackScrollLayoutController.getEmptyShadeViewHeight();
-        }
-        int maxQsHeight = mQsMaxExpansionHeight;
-
-        // If an animation is changing the size of the QS panel, take the animated value.
-        if (mQsSizeChangeAnimator != null) {
-            maxQsHeight = (int) mQsSizeChangeAnimator.getAnimatedValue();
-        }
-        float totalHeight = Math.max(maxQsHeight,
-                mBarState == KEYGUARD ? mClockPositionResult.stackScrollerPadding
-                        : 0) + notificationHeight
-                + mNotificationStackScrollLayoutController.getTopPaddingOverflow();
-        if (totalHeight > mNotificationStackScrollLayoutController.getHeight()) {
-            float
-                    fullyCollapsedHeight =
-                    maxQsHeight + mNotificationStackScrollLayoutController.getLayoutMinHeight();
-            totalHeight = Math.max(fullyCollapsedHeight,
-                    mNotificationStackScrollLayoutController.getHeight());
-        }
-        return (int) totalHeight;
-    }
-
-    private void updateNotificationTranslucency() {
-        float alpha = 1f;
-        if (mClosingWithAlphaFadeOut && !mExpandingFromHeadsUp
-                && !mHeadsUpManager.hasPinnedHeadsUp()) {
-            alpha = getFadeoutAlpha();
-        }
-        if (mBarState == KEYGUARD && !mHintAnimationRunning
-                && !mKeyguardBypassController.getBypassEnabled()) {
-            alpha *= mClockPositionResult.clockAlpha;
-        }
-        mNotificationStackScrollLayoutController.setAlpha(alpha);
-    }
-
-    private float getFadeoutAlpha() {
-        float alpha;
-        if (mQsMinExpansionHeight == 0) {
-            return 1.0f;
-        }
-        alpha = getExpandedHeight() / mQsMinExpansionHeight;
-        alpha = Math.max(0, Math.min(alpha, 1));
-        alpha = (float) Math.pow(alpha, 0.75);
-        return alpha;
-    }
-
-    /**
-     * Hides the header when notifications are colliding with it.
-     */
-    private void updateHeader() {
-        if (mBarState == KEYGUARD) {
-            mKeyguardStatusBarViewController.updateViewState();
-        }
-        updateQsExpansion();
-    }
-
-    protected float getHeaderTranslation() {
-        if (mBarState == KEYGUARD && !mKeyguardBypassController.getBypassEnabled()) {
-            return -mQs.getQsMinExpansionHeight();
-        }
-        float appearAmount = mNotificationStackScrollLayoutController
-                .calculateAppearFraction(mExpandedHeight);
-        float startHeight = -mQsExpansionHeight;
-        if (!mSplitShadeEnabled && mBarState == StatusBarState.SHADE) {
-            // Small parallax as we pull down and clip QS
-            startHeight = -mQsExpansionHeight * QS_PARALLAX_AMOUNT;
-        }
-        if (mKeyguardBypassController.getBypassEnabled() && isOnKeyguard()) {
-            appearAmount = mNotificationStackScrollLayoutController.calculateAppearFractionBypass();
-            startHeight = -mQs.getQsMinExpansionHeight();
-        }
-        float translation = MathUtils.lerp(startHeight, 0, Math.min(1.0f, appearAmount));
-        return Math.min(0, translation);
-    }
-
-    private void updateKeyguardBottomAreaAlpha() {
-        // There are two possible panel expansion behaviors:
-        // • User dragging up to unlock: we want to fade out as quick as possible
-        //   (ALPHA_EXPANSION_THRESHOLD) to avoid seeing the bouncer over the bottom area.
-        // • User tapping on lock screen: bouncer won't be visible but panel expansion will
-        //   change due to "unlock hint animation." In this case, fading out the bottom area
-        //   would also hide the message that says "swipe to unlock," we don't want to do that.
-        float expansionAlpha = MathUtils.map(
-                isUnlockHintRunning() ? 0 : KeyguardBouncer.ALPHA_EXPANSION_THRESHOLD, 1f, 0f, 1f,
-                getExpandedFraction());
-        float alpha = Math.min(expansionAlpha, 1 - computeQsExpansionFraction());
-        alpha *= mBottomAreaShadeAlpha;
-        mKeyguardBottomArea.setAffordanceAlpha(alpha);
-        mKeyguardBottomArea.setImportantForAccessibility(
-                alpha == 0f ? View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
-                        : View.IMPORTANT_FOR_ACCESSIBILITY_AUTO);
-        View ambientIndicationContainer = mCentralSurfaces.getAmbientIndicationContainer();
-        if (ambientIndicationContainer != null) {
-            ambientIndicationContainer.setAlpha(alpha);
-        }
-        mLockIconViewController.setAlpha(alpha);
-    }
-
-    @Override
-    protected void onExpandingStarted() {
-        super.onExpandingStarted();
-        mNotificationStackScrollLayoutController.onExpansionStarted();
-        mIsExpanding = true;
-        mQsExpandedWhenExpandingStarted = mQsFullyExpanded;
-        mMediaHierarchyManager.setCollapsingShadeFromQS(mQsExpandedWhenExpandingStarted &&
-                /* We also start expanding when flinging closed Qs. Let's exclude that */
-                !mAnimatingQS);
-        if (mQsExpanded) {
-            onQsExpansionStarted();
-        }
-        // Since there are QS tiles in the header now, we need to make sure we start listening
-        // immediately so they can be up to date.
-        if (mQs == null) return;
-        mQs.setHeaderListening(true);
-    }
-
-    @Override
-    protected void onExpandingFinished() {
-        mScrimController.onExpandingFinished();
-        mNotificationStackScrollLayoutController.onExpansionStopped();
-        mHeadsUpManager.onExpandingFinished();
-        mConversationNotificationManager.onNotificationPanelExpandStateChanged(isFullyCollapsed());
-        mIsExpanding = false;
-        mMediaHierarchyManager.setCollapsingShadeFromQS(false);
-        mMediaHierarchyManager.setQsExpanded(mQsExpanded);
-        if (isFullyCollapsed()) {
-            DejankUtils.postAfterTraversal(new Runnable() {
-                @Override
-                public void run() {
-                    setListening(false);
-                }
-            });
-
-            // Workaround b/22639032: Make sure we invalidate something because else RenderThread
-            // thinks we are actually drawing a frame put in reality we don't, so RT doesn't go
-            // ahead with rendering and we jank.
-            mView.postOnAnimation(new Runnable() {
-                @Override
-                public void run() {
-                    mView.getParent().invalidateChild(mView, M_DUMMY_DIRTY_RECT);
-                }
-            });
-        } else {
-            setListening(true);
-        }
-        mQsExpandImmediate = false;
-        setShowShelfOnly(false);
-        mTwoFingerQsExpandPossible = false;
-        updateTrackingHeadsUp(null);
-        mExpandingFromHeadsUp = false;
-        setPanelScrimMinFraction(0.0f);
-        // Reset status bar alpha so alpha can be calculated upon updating view state.
-        setKeyguardStatusBarAlpha(-1f);
-    }
-
-    private void updateTrackingHeadsUp(@Nullable ExpandableNotificationRow pickedChild) {
-        mTrackedHeadsUpNotification = pickedChild;
-        for (int i = 0; i < mTrackingHeadsUpListeners.size(); i++) {
-            Consumer<ExpandableNotificationRow> listener = mTrackingHeadsUpListeners.get(i);
-            listener.accept(pickedChild);
-        }
-    }
-
-    @Nullable
-    public ExpandableNotificationRow getTrackedHeadsUpNotification() {
-        return mTrackedHeadsUpNotification;
-    }
-
-    private void setListening(boolean listening) {
-        mKeyguardStatusBarViewController.setBatteryListening(listening);
-        if (mQs == null) return;
-        mQs.setListening(listening);
-    }
-
-    @Override
-    public void expand(boolean animate) {
-        super.expand(animate);
-        setListening(true);
-    }
-
-    @Override
-    public void setOverExpansion(float overExpansion) {
-        if (overExpansion == mOverExpansion) {
-            return;
-        }
-        super.setOverExpansion(overExpansion);
-        // Translating the quick settings by half the overexpansion to center it in the background
-        // frame
-        updateQsFrameTranslation();
-        mNotificationStackScrollLayoutController.setOverExpansion(overExpansion);
-    }
-
-    private void updateQsFrameTranslation() {
-        mQsFrameTranslateController.translateQsFrame(mQsFrame, mQs, mOverExpansion,
-                mQsTranslationForFullShadeTransition);
-    }
-
-    @Override
-    protected void onTrackingStarted() {
-        mFalsingCollector.onTrackingStarted(!mKeyguardStateController.canDismissLockScreen());
-        super.onTrackingStarted();
-        mScrimController.onTrackingStarted();
-        if (mQsFullyExpanded) {
-            mQsExpandImmediate = true;
-            setShowShelfOnly(true);
-        }
-        if (mBarState == KEYGUARD || mBarState == StatusBarState.SHADE_LOCKED) {
-            mAffordanceHelper.animateHideLeftRightIcon();
-        }
-        mNotificationStackScrollLayoutController.onPanelTrackingStarted();
-        cancelPendingPanelCollapse();
-    }
-
-    @Override
-    protected void onTrackingStopped(boolean expand) {
-        mFalsingCollector.onTrackingStopped();
-        super.onTrackingStopped(expand);
-        if (expand) {
-            mNotificationStackScrollLayoutController.setOverScrollAmount(0.0f, true /* onTop */,
-                    true /* animate */);
-        }
-        mNotificationStackScrollLayoutController.onPanelTrackingStopped();
-        if (expand && (mBarState == KEYGUARD
-                || mBarState == StatusBarState.SHADE_LOCKED)) {
-            if (!mHintAnimationRunning) {
-                mAffordanceHelper.reset(true);
-            }
-        }
-
-        // If we unlocked from a swipe, the user's finger might still be down after the
-        // unlock animation ends. We need to wait until ACTION_UP to enable blurs again.
-        mDepthController.setBlursDisabledForUnlock(false);
-    }
-
-    private void updateMaxHeadsUpTranslation() {
-        mNotificationStackScrollLayoutController.setHeadsUpBoundaries(
-                getHeight(), mNavigationBarBottomHeight);
-    }
-
-    @Override
-    protected void startUnlockHintAnimation() {
-        if (mPowerManager.isPowerSaveMode() || mAmbientState.getDozeAmount() > 0f) {
-            onUnlockHintStarted();
-            onUnlockHintFinished();
-            return;
-        }
-        super.startUnlockHintAnimation();
-    }
-
-    @Override
-    protected void onUnlockHintFinished() {
-        super.onUnlockHintFinished();
-        mScrimController.setExpansionAffectsAlpha(true);
-        mNotificationStackScrollLayoutController.setUnlockHintRunning(false);
-    }
-
-    @Override
-    protected void onUnlockHintStarted() {
-        super.onUnlockHintStarted();
-        mScrimController.setExpansionAffectsAlpha(false);
-        mNotificationStackScrollLayoutController.setUnlockHintRunning(true);
-    }
-
-    @Override
-    protected boolean shouldUseDismissingAnimation() {
-        return mBarState != StatusBarState.SHADE && (mKeyguardStateController.canDismissLockScreen()
-                || !isTracking());
-    }
-
-    @Override
-    protected boolean isTrackingBlocked() {
-        return mConflictingQsExpansionGesture && mQsExpanded || mBlockingExpansionForCurrentTouch;
-    }
-
-    public boolean isQsExpanded() {
-        return mQsExpanded;
-    }
-
-    public boolean isQsDetailShowing() {
-        return mQs.isShowingDetail();
-    }
-
-    /** Returns whether the QS customizer is currently active. */
-    public boolean isQsCustomizing() {
-        return mQs.isCustomizing();
-    }
-
-    public void closeQsDetail() {
-        mQs.closeDetail();
-    }
-
-    /** Close the QS customizer if it is open. */
-    public void closeQsCustomizer() {
-        mQs.closeCustomizer();
-    }
-
-    public boolean isLaunchTransitionFinished() {
-        return mIsLaunchTransitionFinished;
-    }
-
-    public boolean isLaunchTransitionRunning() {
-        return mIsLaunchTransitionRunning;
-    }
-
-    @Override
-    public void setIsLaunchAnimationRunning(boolean running) {
-        boolean wasRunning = mIsLaunchAnimationRunning;
-        super.setIsLaunchAnimationRunning(running);
-        if (wasRunning != mIsLaunchAnimationRunning) {
-            mPanelEventsEmitter.notifyLaunchingActivityChanged(running);
-        }
-    }
-
-    @Override
-    protected void setIsClosing(boolean isClosing) {
-        boolean wasClosing = isClosing();
-        super.setIsClosing(isClosing);
-        if (wasClosing != isClosing) {
-            mPanelEventsEmitter.notifyPanelCollapsingChanged(isClosing);
-        }
-    }
-
-    public void setLaunchTransitionEndRunnable(Runnable r) {
-        mLaunchAnimationEndRunnable = r;
-    }
-
-    private void updateDozingVisibilities(boolean animate) {
-        mKeyguardBottomArea.setDozing(mDozing, animate);
-        if (!mDozing && animate) {
-            mKeyguardStatusBarViewController.animateKeyguardStatusBarIn();
-        }
-    }
-
-    @Override
-    public boolean isDozing() {
-        return mDozing;
-    }
-
-    public void setQsScrimEnabled(boolean qsScrimEnabled) {
-        boolean changed = mQsScrimEnabled != qsScrimEnabled;
-        mQsScrimEnabled = qsScrimEnabled;
-        if (changed) {
-            updateQsState();
-        }
-    }
-
-    public void onScreenTurningOn() {
-        mKeyguardStatusViewController.dozeTimeTick();
-    }
-
-    @Override
-    protected boolean onMiddleClicked() {
-        switch (mBarState) {
-            case KEYGUARD:
-                if (!mDozingOnDown) {
-                    if (mUpdateMonitor.isFaceEnrolled()
-                            && !mUpdateMonitor.isFaceDetectionRunning()
-                            && !mUpdateMonitor.getUserCanSkipBouncer(
-                                    KeyguardUpdateMonitor.getCurrentUser())) {
-                        mUpdateMonitor.requestFaceAuth(true);
-                    } else {
-                        mLockscreenGestureLogger.write(MetricsEvent.ACTION_LS_HINT,
-                                0 /* lengthDp - N/A */, 0 /* velocityDp - N/A */);
-                        mLockscreenGestureLogger
-                            .log(LockscreenUiEvent.LOCKSCREEN_LOCK_SHOW_HINT);
-                        startUnlockHintAnimation();
-                    }
-                    if (mUpdateMonitor.isFaceEnrolled()) {
-                        mUpdateMonitor.requestActiveUnlock(
-                                ActiveUnlockConfig.ACTIVE_UNLOCK_REQUEST_ORIGIN.UNLOCK_INTENT,
-                                "lockScreenEmptySpaceTap");
-                    }
-                }
-                return true;
-            case StatusBarState.SHADE_LOCKED:
-                if (!mQsExpanded) {
-                    mStatusBarStateController.setState(KEYGUARD);
-                }
-                return true;
-            default:
-                return true;
-        }
-    }
-
-    public void setPanelAlpha(int alpha, boolean animate) {
-        if (mPanelAlpha != alpha) {
-            mPanelAlpha = alpha;
-            PropertyAnimator.setProperty(mView, mPanelAlphaAnimator, alpha, alpha == 255
-                            ? mPanelAlphaInPropertiesAnimator : mPanelAlphaOutPropertiesAnimator,
-                    animate);
-        }
-    }
-
-    public void setPanelAlphaEndAction(Runnable r) {
-        mPanelAlphaEndAction = r;
-    }
-
-    public void setHeadsUpAnimatingAway(boolean headsUpAnimatingAway) {
-        mHeadsUpAnimatingAway = headsUpAnimatingAway;
-        mNotificationStackScrollLayoutController.setHeadsUpAnimatingAway(headsUpAnimatingAway);
-        updateVisibility();
-    }
-
-    /** Set whether the bouncer is showing. */
-    public void setBouncerShowing(boolean bouncerShowing) {
-        mBouncerShowing = bouncerShowing;
-        updateVisibility();
-    }
-
-    @Override
-    protected boolean shouldPanelBeVisible() {
-        boolean headsUpVisible = mHeadsUpAnimatingAway || mHeadsUpPinnedMode;
-        return headsUpVisible || isExpanded() || mBouncerShowing;
-    }
-
-    @Override
-    public void setHeadsUpManager(HeadsUpManagerPhone headsUpManager) {
-        super.setHeadsUpManager(headsUpManager);
-        mHeadsUpTouchHelper = new HeadsUpTouchHelper(headsUpManager,
-                mNotificationStackScrollLayoutController.getHeadsUpCallback(),
-                NotificationPanelViewController.this);
-    }
-
-    public void setTrackedHeadsUp(ExpandableNotificationRow pickedChild) {
-        if (pickedChild != null) {
-            updateTrackingHeadsUp(pickedChild);
-            mExpandingFromHeadsUp = true;
-        }
-        // otherwise we update the state when the expansion is finished
-    }
-
-    @Override
-    protected void onClosingFinished() {
-        mCentralSurfaces.onClosingFinished();
-        setClosingWithAlphaFadeout(false);
-        mMediaHierarchyManager.closeGuts();
-    }
-
-    private void setClosingWithAlphaFadeout(boolean closing) {
-        mClosingWithAlphaFadeOut = closing;
-        mNotificationStackScrollLayoutController.forceNoOverlappingRendering(closing);
-    }
-
-    protected void updateExpandedHeight(float expandedHeight) {
-        if (mTracking) {
-            mNotificationStackScrollLayoutController
-                    .setExpandingVelocity(getCurrentExpandVelocity());
-        }
-        if (mKeyguardBypassController.getBypassEnabled() && isOnKeyguard()) {
-            // The expandedHeight is always the full panel Height when bypassing
-            expandedHeight = getMaxPanelHeight();
-        }
-        mNotificationStackScrollLayoutController.setExpandedHeight(expandedHeight);
-        updateKeyguardBottomAreaAlpha();
-        updateStatusBarIcons();
-    }
-
-    /**
-     * @return whether the notifications are displayed full width and don't have any margins on
-     * the side.
-     */
-    public boolean isFullWidth() {
-        return mIsFullWidth;
-    }
-
-    private void updateStatusBarIcons() {
-        boolean
-                showIconsWhenExpanded =
-                (isPanelVisibleBecauseOfHeadsUp() || isFullWidth())
-                        && getExpandedHeight() < getOpeningHeight();
-        boolean noVisibleNotifications = true;
-        if (showIconsWhenExpanded && noVisibleNotifications && isOnKeyguard()) {
-            showIconsWhenExpanded = false;
-        }
-        if (showIconsWhenExpanded != mShowIconsWhenExpanded) {
-            mShowIconsWhenExpanded = showIconsWhenExpanded;
-            mCommandQueue.recomputeDisableFlags(mDisplayId, false);
-        }
-    }
-
-    private boolean isOnKeyguard() {
-        return mBarState == KEYGUARD;
-    }
-
-    /**
-     * Sets the minimum fraction for the panel expansion offset. This may be non-zero in certain
-     * cases, such as if there's a heads-up notification.
-     */
-    public void setPanelScrimMinFraction(float minFraction) {
-        mMinFraction = minFraction;
-        mDepthController.setPanelPullDownMinFraction(mMinFraction);
-        mScrimController.setPanelScrimMinFraction(mMinFraction);
-    }
-
-    public void clearNotificationEffects() {
-        mCentralSurfaces.clearNotificationEffects();
-    }
-
-    @Override
-    protected boolean isPanelVisibleBecauseOfHeadsUp() {
-        return (mHeadsUpManager.hasPinnedHeadsUp() || mHeadsUpAnimatingAway)
-                && mBarState == StatusBarState.SHADE;
-    }
-
-    public void launchCamera(boolean animate, int source) {
-        if (source == StatusBarManager.CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP) {
-            mLastCameraLaunchSource = KeyguardBottomAreaView.CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP;
-        } else if (source == StatusBarManager.CAMERA_LAUNCH_SOURCE_WIGGLE) {
-            mLastCameraLaunchSource = KeyguardBottomAreaView.CAMERA_LAUNCH_SOURCE_WIGGLE;
-        } else if (source == StatusBarManager.CAMERA_LAUNCH_SOURCE_LIFT_TRIGGER) {
-            mLastCameraLaunchSource = KeyguardBottomAreaView.CAMERA_LAUNCH_SOURCE_LIFT_TRIGGER;
-        } else {
-
-            // Default.
-            mLastCameraLaunchSource = KeyguardBottomAreaView.CAMERA_LAUNCH_SOURCE_AFFORDANCE;
-        }
-
-        // If we are launching it when we are occluded already we don't want it to animate,
-        // nor setting these flags, since the occluded state doesn't change anymore, hence it's
-        // never reset.
-        if (!isFullyCollapsed()) {
-            setLaunchingAffordance(true);
-        } else {
-            animate = false;
-        }
-        mAffordanceHasPreview = mKeyguardBottomArea.getRightPreview() != null;
-        mAffordanceHelper.launchAffordance(
-                animate, mView.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL);
-    }
-
-    public void onAffordanceLaunchEnded() {
-        setLaunchingAffordance(false);
-    }
-
-    /**
-     * Set whether we are currently launching an affordance. This is currently only set when
-     * launched via a camera gesture.
-     */
-    private void setLaunchingAffordance(boolean launchingAffordance) {
-        mLaunchingAffordance = launchingAffordance;
-        mKeyguardAffordanceHelperCallback.getLeftIcon().setLaunchingAffordance(launchingAffordance);
-        mKeyguardAffordanceHelperCallback.getRightIcon().setLaunchingAffordance(
-                launchingAffordance);
-        mKeyguardBypassController.setLaunchingAffordance(launchingAffordance);
-    }
-
-    /**
-     * Return true when a bottom affordance is launching an occluded activity with a splash screen.
-     */
-    public boolean isLaunchingAffordanceWithPreview() {
-        return mLaunchingAffordance && mAffordanceHasPreview;
-    }
-
-    /**
-     * Whether the camera application can be launched for the camera launch gesture.
-     */
-    public boolean canCameraGestureBeLaunched() {
-        if (!mCentralSurfaces.isCameraAllowedByAdmin()) {
-            return false;
-        }
-
-        ResolveInfo resolveInfo = mKeyguardBottomArea.resolveCameraIntent();
-        String
-                packageToLaunch =
-                (resolveInfo == null || resolveInfo.activityInfo == null) ? null
-                        : resolveInfo.activityInfo.packageName;
-        return packageToLaunch != null && (mBarState != StatusBarState.SHADE || !isForegroundApp(
-                packageToLaunch)) && !mAffordanceHelper.isSwipingInProgress();
-    }
-
-    /**
-     * Return true if the applications with the package name is running in foreground.
-     *
-     * @param pkgName application package name.
-     */
-    private boolean isForegroundApp(String pkgName) {
-        List<ActivityManager.RunningTaskInfo> tasks = mActivityManager.getRunningTasks(1);
-        return !tasks.isEmpty() && pkgName.equals(tasks.get(0).topActivity.getPackageName());
-    }
-
-    public boolean hideStatusBarIconsWhenExpanded() {
-        if (mIsLaunchAnimationRunning) {
-            return mHideIconsDuringLaunchAnimation;
-        }
-        if (mHeadsUpAppearanceController != null
-                && mHeadsUpAppearanceController.shouldBeVisible()) {
-            return false;
-        }
-        return !isFullWidth() || !mShowIconsWhenExpanded;
-    }
-
-    public final QS.ScrollListener mScrollListener = new QS.ScrollListener() {
-        @Override
-        public void onQsPanelScrollChanged(int scrollY) {
-            mLargeScreenShadeHeaderController.setQsScrollY(scrollY);
-            if (scrollY > 0 && !mQsFullyExpanded) {
-                if (DEBUG_LOGCAT) Log.d(TAG, "Scrolling while not expanded. Forcing expand");
-                // If we are scrolling QS, we should be fully expanded.
-                expandWithQs();
-            }
-        }
-    };
-
-    private final FragmentListener mFragmentListener = new FragmentListener() {
-        @Override
-        public void onFragmentViewCreated(String tag, Fragment fragment) {
-            mQs = (QS) fragment;
-            mQs.setPanelView(mHeightListener);
-            mQs.setCollapseExpandAction(mCollapseExpandAction);
-            mQs.setHeaderClickable(isQsExpansionEnabled());
-            mQs.setOverscrolling(mStackScrollerOverscrolling);
-            mQs.setInSplitShade(mSplitShadeEnabled);
-
-            // recompute internal state when qspanel height changes
-            mQs.getView().addOnLayoutChangeListener(
-                    (v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> {
-                        final int height = bottom - top;
-                        final int oldHeight = oldBottom - oldTop;
-                        if (height != oldHeight) {
-                            mHeightListener.onQsHeightChanged();
-                        }
-                    });
-            mQs.setCollapsedMediaVisibilityChangedListener((visible) -> {
-                if (mQs.getHeader().isShown()) {
-                    animateNextNotificationBounds(StackStateAnimator.ANIMATION_DURATION_STANDARD,
-                            0 /* delay */);
-                    mNotificationStackScrollLayoutController.animateNextTopPaddingChange();
-                }
-            });
-            mLockscreenShadeTransitionController.setQS(mQs);
-            mShadeTransitionController.setQs(mQs);
-            mNotificationStackScrollLayoutController.setQsHeader((ViewGroup) mQs.getHeader());
-            mQs.setScrollListener(mScrollListener);
-            updateQsExpansion();
-        }
-
-        @Override
-        public void onFragmentViewDestroyed(String tag, Fragment fragment) {
-            // Manual handling of fragment lifecycle is only required because this bridges
-            // non-fragment and fragment code. Once we are using a fragment for the notification
-            // panel, mQs will not need to be null cause it will be tied to the same lifecycle.
-            if (fragment == mQs) {
-                mQs = null;
-            }
-        }
-    };
-
-    private void animateNextNotificationBounds(long duration, long delay) {
-        mAnimateNextNotificationBounds = true;
-        mNotificationBoundsAnimationDuration = duration;
-        mNotificationBoundsAnimationDelay = delay;
-    }
-
-    @Override
-    public void setTouchAndAnimationDisabled(boolean disabled) {
-        super.setTouchAndAnimationDisabled(disabled);
-        if (disabled && mAffordanceHelper.isSwipingInProgress() && !mIsLaunchTransitionRunning) {
-            mAffordanceHelper.reset(false /* animate */);
-        }
-        mNotificationStackScrollLayoutController.setAnimationsEnabled(!disabled);
-    }
-
-    /**
-     * Sets the dozing state.
-     *
-     * @param dozing              {@code true} when dozing.
-     * @param animate             if transition should be animated.
-     * @param wakeUpTouchLocation touch event location - if woken up by SLPI sensor.
-     */
-    public void setDozing(boolean dozing, boolean animate, PointF wakeUpTouchLocation) {
-        if (dozing == mDozing) return;
-        mView.setDozing(dozing);
-        mDozing = dozing;
-        mNotificationStackScrollLayoutController.setDozing(mDozing, animate, wakeUpTouchLocation);
-        mKeyguardBottomArea.setDozing(mDozing, animate);
-        mKeyguardStatusBarViewController.setDozing(mDozing);
-
-        if (dozing) {
-            mBottomAreaShadeAlphaAnimator.cancel();
-        }
-
-        if (mBarState == KEYGUARD || mBarState == StatusBarState.SHADE_LOCKED) {
-            updateDozingVisibilities(animate);
-        }
-
-        final float dozeAmount = dozing ? 1 : 0;
-        mStatusBarStateController.setAndInstrumentDozeAmount(mView, dozeAmount, animate);
-    }
-
-    public void setPulsing(boolean pulsing) {
-        mPulsing = pulsing;
-        final boolean
-                animatePulse =
-                !mDozeParameters.getDisplayNeedsBlanking() && mDozeParameters.getAlwaysOn();
-        if (animatePulse) {
-            mAnimateNextPositionUpdate = true;
-        }
-        // Do not animate the clock when waking up from a pulse.
-        // The height callback will take care of pushing the clock to the right position.
-        if (!mPulsing && !mDozing) {
-            mAnimateNextPositionUpdate = false;
-        }
-        mNotificationStackScrollLayoutController.setPulsing(pulsing, animatePulse);
-    }
-
-    public void setAmbientIndicationTop(int ambientIndicationTop, boolean ambientTextVisible) {
-        int ambientIndicationBottomPadding = 0;
-        if (ambientTextVisible) {
-            int stackBottom = mNotificationStackScrollLayoutController.getBottom();
-            ambientIndicationBottomPadding = stackBottom - ambientIndicationTop;
-        }
-        if (mAmbientIndicationBottomPadding != ambientIndicationBottomPadding) {
-            mAmbientIndicationBottomPadding = ambientIndicationBottomPadding;
-            updateMaxDisplayedNotifications(true);
-        }
-    }
-
-    public void dozeTimeTick() {
-        mLockIconViewController.dozeTimeTick();
-        mKeyguardBottomArea.dozeTimeTick();
-        mKeyguardStatusViewController.dozeTimeTick();
-        if (mInterpolatedDarkAmount > 0) {
-            positionClockAndNotifications();
-        }
-    }
-
-    public void setStatusAccessibilityImportance(int mode) {
-        mKeyguardStatusViewController.setStatusAccessibilityImportance(mode);
-    }
-
-    /**
-     * TODO: this should be removed.
-     * It's not correct to pass this view forward because other classes will end up adding
-     * children to it. Theme will be out of sync.
-     *
-     * @return bottom area view
-     */
-    public KeyguardBottomAreaView getKeyguardBottomAreaView() {
-        return mKeyguardBottomArea;
-    }
-
-    public void setUserSetupComplete(boolean userSetupComplete) {
-        mUserSetupComplete = userSetupComplete;
-        mKeyguardBottomArea.setUserSetupComplete(userSetupComplete);
-    }
-
-    public void applyLaunchAnimationProgress(float linearProgress) {
-        boolean hideIcons = LaunchAnimator.getProgress(ActivityLaunchAnimator.TIMINGS,
-                linearProgress, ANIMATION_DELAY_ICON_FADE_IN, 100) == 0.0f;
-        if (hideIcons != mHideIconsDuringLaunchAnimation) {
-            mHideIconsDuringLaunchAnimation = hideIcons;
-            if (!hideIcons) {
-                mCommandQueue.recomputeDisableFlags(mDisplayId, true /* animate */);
-            }
-        }
-    }
-
-    public void addTrackingHeadsUpListener(Consumer<ExpandableNotificationRow> listener) {
-        mTrackingHeadsUpListeners.add(listener);
-    }
-
-    public void removeTrackingHeadsUpListener(Consumer<ExpandableNotificationRow> listener) {
-        mTrackingHeadsUpListeners.remove(listener);
-    }
-
-    public void setHeadsUpAppearanceController(
-            HeadsUpAppearanceController headsUpAppearanceController) {
-        mHeadsUpAppearanceController = headsUpAppearanceController;
-    }
-
-    /**
-     * Starts the animation before we dismiss Keyguard, i.e. an disappearing animation on the
-     * security view of the bouncer.
-     */
-    public void onBouncerPreHideAnimation() {
-        if (mKeyguardQsUserSwitchController != null) {
-            mKeyguardQsUserSwitchController.setKeyguardQsUserSwitchVisibility(
-                    mBarState,
-                    true /* keyguardFadingAway */,
-                    false /* goingToFullShade */,
-                    mBarState);
-        }
-        if (mKeyguardUserSwitcherController != null) {
-            mKeyguardUserSwitcherController.setKeyguardUserSwitcherVisibility(
-                    mBarState,
-                    true /* keyguardFadingAway */,
-                    false /* goingToFullShade */,
-                    mBarState);
-        }
-    }
-
-    /**
-     * Updates the views to the initial state for the fold to AOD animation
-     */
-    public void prepareFoldToAodAnimation() {
-        // Force show AOD UI even if we are not locked
-        showAodUi();
-
-        // Move the content of the AOD all the way to the left
-        // so we can animate to the initial position
-        final int translationAmount = mView.getResources().getDimensionPixelSize(
-                R.dimen.below_clock_padding_start);
-        mView.setTranslationX(-translationAmount);
-        mView.setAlpha(0);
-    }
-
-    /**
-     * Starts fold to AOD animation
-     */
-    public void startFoldToAodAnimation(Runnable endAction) {
-        mView.animate()
-            .translationX(0)
-            .alpha(1f)
-            .setDuration(ANIMATION_DURATION_FOLD_TO_AOD)
-            .setInterpolator(EMPHASIZED_DECELERATE)
-            .setListener(new AnimatorListenerAdapter() {
-                @Override
-                public void onAnimationCancel(Animator animation) {
-                    endAction.run();
-                }
-                @Override
-                public void onAnimationEnd(Animator animation) {
-                    endAction.run();
-                }
-            })
-            .start();
-
-        mKeyguardStatusViewController.animateFoldToAod();
-    }
-
-    /**
-     * Cancels fold to AOD transition and resets view state
-     */
-    public void cancelFoldToAodAnimation() {
-        cancelAnimation();
-        resetAlpha();
-        resetTranslation();
-    }
-
-    /** */
-    public void setImportantForAccessibility(int mode) {
-        mView.setImportantForAccessibility(mode);
-    }
-
-    /**
-     * Do not let the user drag the shade up and down for the current touch session.
-     * This is necessary to avoid shade expansion while/after the bouncer is dismissed.
-     */
-    public void blockExpansionForCurrentTouch() {
-        mBlockingExpansionForCurrentTouch = mTracking;
-    }
-
-    @Override
-    public void dump(PrintWriter pw, String[] args) {
-        super.dump(pw, args);
-        IndentingPrintWriter ipw = asIndenting(pw);
-        ipw.increaseIndent();
-        ipw.println("gestureExclusionRect:" + calculateGestureExclusionRect());
-        ipw.println("applyQSClippingImmediately: top(" + mQsClipTop + ") bottom(" + mQsClipBottom
-                + ")");
-        ipw.println("qsVisible:" + mQsVisible);
-        new DumpsysTableLogger(
-                TAG,
-                NPVCDownEventState.TABLE_HEADERS,
-                mLastDownEvents.toList()
-        ).printTableData(ipw);
-        ipw.decreaseIndent();
-        if (mKeyguardStatusBarViewController != null) {
-            mKeyguardStatusBarViewController.dump(pw, args);
-        }
-    }
-
-    public boolean hasActiveClearableNotifications() {
-        return mNotificationStackScrollLayoutController.hasActiveClearableNotifications(ROWS_ALL);
-    }
-
-    public RemoteInputController.Delegate createRemoteInputDelegate() {
-        return mNotificationStackScrollLayoutController.createDelegate();
-    }
-
-    /**
-     * Updates the notification views' sections and status bar icons. This is
-     * triggered by the NotificationPresenter whenever there are changes to the underlying
-     * notification data being displayed. In the new notification pipeline, this is handled in
-     * {@link ShadeViewManager}.
-     */
-    public void updateNotificationViews(String reason) {
-        mNotificationStackScrollLayoutController.updateSectionBoundaries(reason);
-        mNotificationStackScrollLayoutController.updateFooter();
-
-        mNotificationIconAreaController.updateNotificationIcons(createVisibleEntriesList());
-    }
-
-    private List<ListEntry> createVisibleEntriesList() {
-        List<ListEntry> entries = new ArrayList<>(
-                mNotificationStackScrollLayoutController.getChildCount());
-        for (int i = 0; i < mNotificationStackScrollLayoutController.getChildCount(); i++) {
-            View view = mNotificationStackScrollLayoutController.getChildAt(i);
-            if (view instanceof ExpandableNotificationRow) {
-                entries.add(((ExpandableNotificationRow) view).getEntry());
-            }
-        }
-        return entries;
-    }
-
-    public void onUpdateRowStates() {
-        mNotificationStackScrollLayoutController.onUpdateRowStates();
-    }
-
-    public boolean hasPulsingNotifications() {
-        return mNotificationListContainer.hasPulsingNotifications();
-    }
-
-    public ActivatableNotificationView getActivatedChild() {
-        return mNotificationStackScrollLayoutController.getActivatedChild();
-    }
-
-    public void setActivatedChild(ActivatableNotificationView o) {
-        mNotificationStackScrollLayoutController.setActivatedChild(o);
-    }
-
-    public void runAfterAnimationFinished(Runnable r) {
-        mNotificationStackScrollLayoutController.runAfterAnimationFinished(r);
-    }
-
-    private Runnable mHideExpandedRunnable;
-    private final Runnable mMaybeHideExpandedRunnable = new Runnable() {
-        @Override
-        public void run() {
-            if (getExpansionFraction() == 0.0f) {
-                mView.post(mHideExpandedRunnable);
-            }
-        }
-    };
-
-    /**
-     * Initialize objects instead of injecting to avoid circular dependencies.
-     *
-     * @param hideExpandedRunnable a runnable to run when we need to hide the expanded panel.
-     */
-    public void initDependencies(
-            CentralSurfaces centralSurfaces,
-            Runnable hideExpandedRunnable,
-            NotificationShelfController notificationShelfController) {
-        setCentralSurfaces(centralSurfaces);
-        mHideExpandedRunnable = hideExpandedRunnable;
-        mNotificationStackScrollLayoutController.setShelfController(notificationShelfController);
-        mNotificationShelfController = notificationShelfController;
-        mLockscreenShadeTransitionController.bindController(notificationShelfController);
-        updateMaxDisplayedNotifications(true);
-    }
-
-    public void setAlpha(float alpha) {
-        mView.setAlpha(alpha);
-    }
-
-    public void resetTranslation() {
-        mView.setTranslationX(0f);
-    }
-
-    public void resetAlpha() {
-        mView.setAlpha(1f);
-    }
-
-    public ViewPropertyAnimator fadeOut(long startDelayMs, long durationMs, Runnable endAction) {
-        return mView.animate().alpha(0).setStartDelay(startDelayMs).setDuration(
-                durationMs).setInterpolator(Interpolators.ALPHA_OUT).withLayer().withEndAction(
-                endAction);
-    }
-
-    public void resetViewGroupFade() {
-        ViewGroupFadeHelper.reset(mView);
-    }
-
-    public void addOnGlobalLayoutListener(ViewTreeObserver.OnGlobalLayoutListener listener) {
-        mView.getViewTreeObserver().addOnGlobalLayoutListener(listener);
-    }
-
-    public void removeOnGlobalLayoutListener(ViewTreeObserver.OnGlobalLayoutListener listener) {
-        mView.getViewTreeObserver().removeOnGlobalLayoutListener(listener);
-    }
-
-    public MyOnHeadsUpChangedListener getOnHeadsUpChangedListener() {
-        return mOnHeadsUpChangedListener;
-    }
-
-    public int getHeight() {
-        return mView.getHeight();
-    }
-
-    public void setHeaderDebugInfo(String text) {
-        if (DEBUG_DRAWABLE) mHeaderDebugInfo = text;
-    }
-
-    public void onThemeChanged() {
-        mConfigurationListener.onThemeChanged();
-    }
-
-    @Override
-    public OnLayoutChangeListener createLayoutChangeListener() {
-        return new OnLayoutChangeListener();
-    }
-
-    @Override
-    protected TouchHandler createTouchHandler() {
-        return new TouchHandler() {
-
-            private long mLastTouchDownTime = -1L;
-
-            @Override
-            public boolean onInterceptTouchEvent(MotionEvent event) {
-                if (SPEW_LOGCAT) {
-                    Log.v(TAG,
-                            "NPVC onInterceptTouchEvent (" + event.getId() + "): (" + event.getX()
-                                    + "," + event.getY() + ")");
-                }
-                if (mBlockTouches || mQs.disallowPanelTouches()) {
-                    return false;
-                }
-                initDownStates(event);
-                // Do not let touches go to shade or QS if the bouncer is visible,
-                // but still let user swipe down to expand the panel, dismissing the bouncer.
-                if (mCentralSurfaces.isBouncerShowing()) {
-                    return true;
-                }
-                if (mCommandQueue.panelsEnabled()
-                        && !mNotificationStackScrollLayoutController.isLongPressInProgress()
-                        && mHeadsUpTouchHelper.onInterceptTouchEvent(event)) {
-                    mMetricsLogger.count(COUNTER_PANEL_OPEN, 1);
-                    mMetricsLogger.count(COUNTER_PANEL_OPEN_PEEK, 1);
-                    return true;
-                }
-                if (!shouldQuickSettingsIntercept(mDownX, mDownY, 0)
-                        && mPulseExpansionHandler.onInterceptTouchEvent(event)) {
-                    return true;
-                }
-
-                if (!isFullyCollapsed() && onQsIntercept(event)) {
-                    if (DEBUG_LOGCAT) Log.d(TAG, "onQsIntercept true");
-                    return true;
-                }
-                return super.onInterceptTouchEvent(event);
-            }
-
-            @Override
-            public boolean onTouch(View v, MotionEvent event) {
-                if (event.getAction() == MotionEvent.ACTION_DOWN) {
-                    if (event.getDownTime() == mLastTouchDownTime) {
-                        // An issue can occur when swiping down after unlock, where multiple down
-                        // events are received in this handler with identical downTimes. Until the
-                        // source of the issue can be located, detect this case and ignore.
-                        // see b/193350347
-                        Log.w(TAG, "Duplicate down event detected... ignoring");
-                        return true;
-                    }
-                    mLastTouchDownTime = event.getDownTime();
-                }
-
-
-                if (mBlockTouches || (mQsFullyExpanded && mQs != null
-                        && mQs.disallowPanelTouches())) {
-                    return false;
-                }
-
-                // Do not allow panel expansion if bouncer is scrimmed or showing over a dream,
-                // otherwise user would be able to pull down QS or expand the shade.
-                if (mCentralSurfaces.isBouncerShowingScrimmed()
-                        || mCentralSurfaces.isBouncerShowingOverDream()) {
-                    return false;
-                }
-
-                // Make sure the next touch won't the blocked after the current ends.
-                if (event.getAction() == MotionEvent.ACTION_UP
-                        || event.getAction() == MotionEvent.ACTION_CANCEL) {
-                    mBlockingExpansionForCurrentTouch = false;
-                }
-                // When touch focus transfer happens, ACTION_DOWN->ACTION_UP may happen immediately
-                // without any ACTION_MOVE event.
-                // In such case, simply expand the panel instead of being stuck at the bottom bar.
-                if (mLastEventSynthesizedDown && event.getAction() == MotionEvent.ACTION_UP) {
-                    expand(true /* animate */);
-                }
-                initDownStates(event);
-
-                // If pulse is expanding already, let's give it the touch. There are situations
-                // where the panel starts expanding even though we're also pulsing
-                boolean pulseShouldGetTouch = (!mIsExpanding
-                        && !shouldQuickSettingsIntercept(mDownX, mDownY, 0))
-                        || mPulseExpansionHandler.isExpanding();
-                if (pulseShouldGetTouch && mPulseExpansionHandler.onTouchEvent(event)) {
-                    // We're expanding all the other ones shouldn't get this anymore
-                    return true;
-                }
-                if (mListenForHeadsUp && !mHeadsUpTouchHelper.isTrackingHeadsUp()
-                        && !mNotificationStackScrollLayoutController.isLongPressInProgress()
-                        && mHeadsUpTouchHelper.onInterceptTouchEvent(event)) {
-                    mMetricsLogger.count(COUNTER_PANEL_OPEN_PEEK, 1);
-                }
-                boolean handled = false;
-                if ((!mIsExpanding || mHintAnimationRunning) && !mQsExpanded
-                        && mBarState != StatusBarState.SHADE && !mDozing) {
-                    handled |= mAffordanceHelper.onTouchEvent(event);
-                }
-                if (mOnlyAffordanceInThisMotion) {
-                    return true;
-                }
-                handled |= mHeadsUpTouchHelper.onTouchEvent(event);
-
-                if (!mHeadsUpTouchHelper.isTrackingHeadsUp() && handleQsTouch(event)) {
-                    if (DEBUG_LOGCAT) Log.d(TAG, "handleQsTouch true");
-                    return true;
-                }
-                if (event.getActionMasked() == MotionEvent.ACTION_DOWN && isFullyCollapsed()) {
-                    mMetricsLogger.count(COUNTER_PANEL_OPEN, 1);
-                    handled = true;
-                }
-
-                if (event.getActionMasked() == MotionEvent.ACTION_DOWN && isFullyExpanded()
-                        && mStatusBarKeyguardViewManager.isShowing()) {
-                    mStatusBarKeyguardViewManager.updateKeyguardPosition(event.getX());
-                }
-
-                handled |= super.onTouch(v, event);
-                return !mDozing || mPulsing || handled;
-            }
-        };
-    }
-
-    private final PhoneStatusBarView.TouchEventHandler mStatusBarViewTouchEventHandler =
-            new PhoneStatusBarView.TouchEventHandler() {
-                @Override
-                public void onInterceptTouchEvent(MotionEvent event) {
-                    mCentralSurfaces.onTouchEvent(event);
-                }
-
-                @Override
-                public boolean handleTouchEvent(MotionEvent event) {
-                    mCentralSurfaces.onTouchEvent(event);
-
-                    // TODO(b/202981994): Move the touch debugging in this method to a central
-                    //  location. (Right now, it's split between CentralSurfaces and here.)
-
-                    // If panels aren't enabled, ignore the gesture and don't pass it down to the
-                    // panel view.
-                    if (!mCommandQueue.panelsEnabled()) {
-                        if (event.getAction() == MotionEvent.ACTION_DOWN) {
-                            Log.v(
-                                    TAG,
-                                    String.format(
-                                            "onTouchForwardedFromStatusBar: "
-                                                    + "panel disabled, ignoring touch at (%d,%d)",
-                                            (int) event.getX(),
-                                            (int) event.getY()
-                                    )
-                            );
-                        }
-                        return false;
-                    }
-
-                    // If the view that would receive the touch is disabled, just have status bar
-                    // eat the gesture.
-                    if (event.getAction() == MotionEvent.ACTION_DOWN && !mView.isEnabled()) {
-                        Log.v(TAG,
-                                String.format(
-                                        "onTouchForwardedFromStatusBar: "
-                                                + "panel view disabled, eating touch at (%d,%d)",
-                                        (int) event.getX(),
-                                        (int) event.getY()
-                                )
-                        );
-                        return true;
-                    }
-
-                    return mView.dispatchTouchEvent(event);
-                }
-            };
-
-    @Override
-    protected PanelViewController.OnConfigurationChangedListener
-            createOnConfigurationChangedListener() {
-        return new OnConfigurationChangedListener();
-    }
-
-    public NotificationStackScrollLayoutController getNotificationStackScrollLayoutController() {
-        return mNotificationStackScrollLayoutController;
-    }
-
-    public void disable(int state1, int state2, boolean animated) {
-        mLargeScreenShadeHeaderController.disable(state1, state2, animated);
-    }
-
-    /**
-     * Close the keyguard user switcher if it is open and capable of closing.
-     *
-     * Has no effect if user switcher isn't supported, if the user switcher is already closed, or
-     * if the user switcher uses "simple" mode. The simple user switcher cannot be closed.
-     *
-     * @return true if the keyguard user switcher was open, and is now closed
-     */
-    public boolean closeUserSwitcherIfOpen() {
-        if (mKeyguardUserSwitcherController != null) {
-            return mKeyguardUserSwitcherController.closeSwitcherIfOpenAndNotSimple(
-                    true /* animate */);
-        }
-        return false;
-    }
-
-    private void updateUserSwitcherFlags() {
-        mKeyguardUserSwitcherEnabled = mResources.getBoolean(
-                com.android.internal.R.bool.config_keyguardUserSwitcher);
-        mKeyguardQsUserSwitchEnabled =
-                mKeyguardUserSwitcherEnabled
-                        && mFeatureFlags.isEnabled(Flags.QS_USER_DETAIL_SHORTCUT);
-    }
-
-    private void registerSettingsChangeListener() {
-        mContentResolver.registerContentObserver(
-                Settings.Global.getUriFor(Settings.Global.USER_SWITCHER_ENABLED),
-                /* notifyForDescendants */ false,
-                mSettingsChangeObserver
-        );
-    }
-
-    private void unregisterSettingsChangeListener() {
-        mContentResolver.unregisterContentObserver(mSettingsChangeObserver);
-    }
-
-    /**
-     * Updates notification panel-specific flags on {@link SysUiState}.
-     */
-    public void updateSystemUiStateFlags() {
-        if (SysUiState.DEBUG) {
-            Log.d(TAG, "Updating panel sysui state flags: fullyExpanded="
-                    + isFullyExpanded() + " inQs=" + isInSettings());
-        }
-        mSysUiState.setFlag(SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED,
-                isFullyExpanded() && !isInSettings())
-                .setFlag(SYSUI_STATE_QUICK_SETTINGS_EXPANDED, isInSettings())
-                .commitUpdate(mDisplayId);
-    }
-
-    private class OnHeightChangedListener implements ExpandableView.OnHeightChangedListener {
-        @Override
-        public void onHeightChanged(ExpandableView view, boolean needsAnimation) {
-
-            // Block update if we are in quick settings and just the top padding changed
-            // (i.e. view == null).
-            if (view == null && mQsExpanded) {
-                return;
-            }
-            if (needsAnimation && mInterpolatedDarkAmount == 0) {
-                mAnimateNextPositionUpdate = true;
-            }
-            ExpandableView firstChildNotGone =
-                    mNotificationStackScrollLayoutController.getFirstChildNotGone();
-            ExpandableNotificationRow
-                    firstRow =
-                    firstChildNotGone instanceof ExpandableNotificationRow
-                            ? (ExpandableNotificationRow) firstChildNotGone : null;
-            if (firstRow != null && (view == firstRow || (firstRow.getNotificationParent()
-                    == firstRow))) {
-                requestScrollerTopPaddingUpdate(false /* animate */);
-            }
-            if (mKeyguardShowing) {
-                updateMaxDisplayedNotifications(true);
-            }
-            requestPanelHeightUpdate();
-        }
-
-        @Override
-        public void onReset(ExpandableView view) {
-        }
-    }
-
-    private class CollapseExpandAction implements Runnable {
-        @Override
-        public void run() {
-            onQsExpansionStarted();
-            if (mQsExpanded) {
-                flingSettings(0 /* vel */, FLING_COLLAPSE, null /* onFinishRunnable */,
-                        true /* isClick */);
-            } else if (isQsExpansionEnabled()) {
-                mLockscreenGestureLogger.write(MetricsEvent.ACTION_SHADE_QS_TAP, 0, 0);
-                flingSettings(0 /* vel */, FLING_EXPAND, null /* onFinishRunnable */,
-                        true /* isClick */);
-            }
-        }
-    }
-
-    private class OnOverscrollTopChangedListener implements
-            NotificationStackScrollLayout.OnOverscrollTopChangedListener {
-        @Override
-        public void onOverscrollTopChanged(float amount, boolean isRubberbanded) {
-            // When in split shade, overscroll shouldn't carry through to QS
-            if (mSplitShadeEnabled) {
-                return;
-            }
-            cancelQsAnimation();
-            if (!isQsExpansionEnabled()) {
-                amount = 0f;
-            }
-            float rounded = amount >= 1f ? amount : 0f;
-            setOverScrolling(rounded != 0f && isRubberbanded);
-            mQsExpansionFromOverscroll = rounded != 0f;
-            mLastOverscroll = rounded;
-            updateQsState();
-            setQsExpansion(mQsMinExpansionHeight + rounded);
-        }
-
-        @Override
-        public void flingTopOverscroll(float velocity, boolean open) {
-            // in split shade mode we want to expand/collapse QS only when touch happens within QS
-            if (mSplitShadeEnabled && touchXOutsideOfQs(mInitialTouchX)) {
-                return;
-            }
-            mLastOverscroll = 0f;
-            mQsExpansionFromOverscroll = false;
-            if (open) {
-                // During overscrolling, qsExpansion doesn't actually change that the qs is
-                // becoming expanded. Any layout could therefore reset the position again. Let's
-                // make sure we can expand
-                setOverScrolling(false);
-            }
-            setQsExpansion(mQsExpansionHeight);
-            boolean canExpand = isQsExpansionEnabled();
-            flingSettings(!canExpand && open ? 0f : velocity,
-                    open && canExpand ? FLING_EXPAND : FLING_COLLAPSE, () -> {
-                        setOverScrolling(false);
-                        updateQsState();
-                    }, false /* isClick */);
-        }
-    }
-
-    private class DynamicPrivacyControlListener implements DynamicPrivacyController.Listener {
-        @Override
-        public void onDynamicPrivacyChanged() {
-            // Do not request animation when pulsing or waking up, otherwise the clock wiill be out
-            // of sync with the notification panel.
-            if (mLinearDarkAmount != 0) {
-                return;
-            }
-            mAnimateNextPositionUpdate = true;
-        }
-    }
-
-    private class KeyguardAffordanceHelperCallback implements KeyguardAffordanceHelper.Callback {
-        @Override
-        public void onAnimationToSideStarted(boolean rightPage, float translation, float vel) {
-            boolean
-                    start =
-                    mView.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL ? rightPage
-                            : !rightPage;
-            mIsLaunchTransitionRunning = true;
-            mLaunchAnimationEndRunnable = null;
-            float displayDensity = mCentralSurfaces.getDisplayDensity();
-            int lengthDp = Math.abs((int) (translation / displayDensity));
-            int velocityDp = Math.abs((int) (vel / displayDensity));
-            if (start) {
-                mLockscreenGestureLogger.write(MetricsEvent.ACTION_LS_DIALER, lengthDp, velocityDp);
-                mLockscreenGestureLogger.log(LockscreenUiEvent.LOCKSCREEN_DIALER);
-                mFalsingCollector.onLeftAffordanceOn();
-                if (mFalsingCollector.shouldEnforceBouncer()) {
-                    mCentralSurfaces.executeRunnableDismissingKeyguard(
-                            () -> mKeyguardBottomArea.launchLeftAffordance(), null,
-                            true /* dismissShade */, false /* afterKeyguardGone */,
-                            true /* deferred */);
-                } else {
-                    mKeyguardBottomArea.launchLeftAffordance();
-                }
-            } else {
-                if (KeyguardBottomAreaView.CAMERA_LAUNCH_SOURCE_AFFORDANCE.equals(
-                        mLastCameraLaunchSource)) {
-                    mLockscreenGestureLogger.write(
-                            MetricsEvent.ACTION_LS_CAMERA, lengthDp, velocityDp);
-                    mLockscreenGestureLogger.log(LockscreenUiEvent.LOCKSCREEN_CAMERA);
-                }
-                mFalsingCollector.onCameraOn();
-                if (mFalsingCollector.shouldEnforceBouncer()) {
-                    mCentralSurfaces.executeRunnableDismissingKeyguard(
-                            () -> mKeyguardBottomArea.launchCamera(mLastCameraLaunchSource), null,
-                            true /* dismissShade */, false /* afterKeyguardGone */,
-                            true /* deferred */);
-                } else {
-                    mKeyguardBottomArea.launchCamera(mLastCameraLaunchSource);
-                }
-            }
-            mCentralSurfaces.startLaunchTransitionTimeout();
-            mBlockTouches = true;
-        }
-
-        @Override
-        public void onAnimationToSideEnded() {
-            mIsLaunchTransitionRunning = false;
-            mIsLaunchTransitionFinished = true;
-            if (mLaunchAnimationEndRunnable != null) {
-                mLaunchAnimationEndRunnable.run();
-                mLaunchAnimationEndRunnable = null;
-            }
-            mCentralSurfaces.readyForKeyguardDone();
-        }
-
-        @Override
-        public float getMaxTranslationDistance() {
-            return (float) Math.hypot(mView.getWidth(), getHeight());
-        }
-
-        @Override
-        public void onSwipingStarted(boolean rightIcon) {
-            mFalsingCollector.onAffordanceSwipingStarted(rightIcon);
-            boolean
-                    camera =
-                    mView.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL ? !rightIcon
-                            : rightIcon;
-            if (camera) {
-                mKeyguardBottomArea.bindCameraPrewarmService();
-            }
-            mView.requestDisallowInterceptTouchEvent(true);
-            mOnlyAffordanceInThisMotion = true;
-            mQsTracking = false;
-        }
-
-        @Override
-        public void onSwipingAborted() {
-            mFalsingCollector.onAffordanceSwipingAborted();
-            mKeyguardBottomArea.unbindCameraPrewarmService(false /* launched */);
-        }
-
-        @Override
-        public void onIconClicked(boolean rightIcon) {
-            if (mHintAnimationRunning) {
-                return;
-            }
-            mHintAnimationRunning = true;
-            mAffordanceHelper.startHintAnimation(rightIcon, () -> {
-                mHintAnimationRunning = false;
-                mCentralSurfaces.onHintFinished();
-            });
-            rightIcon =
-                    mView.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL ? !rightIcon
-                            : rightIcon;
-            if (rightIcon) {
-                mCentralSurfaces.onCameraHintStarted();
-            } else {
-                if (mKeyguardBottomArea.isLeftVoiceAssist()) {
-                    mCentralSurfaces.onVoiceAssistHintStarted();
-                } else {
-                    mCentralSurfaces.onPhoneHintStarted();
-                }
-            }
-        }
-
-        @Override
-        public KeyguardAffordanceView getLeftIcon() {
-            return mView.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL
-                    ? mKeyguardBottomArea.getRightView() : mKeyguardBottomArea.getLeftView();
-        }
-
-        @Override
-        public KeyguardAffordanceView getRightIcon() {
-            return mView.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL
-                    ? mKeyguardBottomArea.getLeftView() : mKeyguardBottomArea.getRightView();
-        }
-
-        @Override
-        public View getLeftPreview() {
-            return mView.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL
-                    ? mKeyguardBottomArea.getRightPreview() : mKeyguardBottomArea.getLeftPreview();
-        }
-
-        @Override
-        public View getRightPreview() {
-            return mView.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL
-                    ? mKeyguardBottomArea.getLeftPreview() : mKeyguardBottomArea.getRightPreview();
-        }
-
-        @Override
-        public float getAffordanceFalsingFactor() {
-            return mCentralSurfaces.isWakeUpComingFromTouch() ? 1.5f : 1.0f;
-        }
-
-        @Override
-        public boolean needsAntiFalsing() {
-            return mBarState == KEYGUARD;
-        }
-    }
-
-    private class OnEmptySpaceClickListener implements
-            NotificationStackScrollLayout.OnEmptySpaceClickListener {
-        @Override
-        public void onEmptySpaceClicked(float x, float y) {
-            onEmptySpaceClick(x);
-        }
-    }
-
-    private class MyOnHeadsUpChangedListener implements OnHeadsUpChangedListener {
-        @Override
-        public void onHeadsUpPinnedModeChanged(final boolean inPinnedMode) {
-            if (inPinnedMode) {
-                mHeadsUpExistenceChangedRunnable.run();
-                updateNotificationTranslucency();
-            } else {
-                setHeadsUpAnimatingAway(true);
-                mNotificationStackScrollLayoutController.runAfterAnimationFinished(
-                        mHeadsUpExistenceChangedRunnable);
-            }
-            updateGestureExclusionRect();
-            mHeadsUpPinnedMode = inPinnedMode;
-            updateVisibility();
-            mKeyguardStatusBarViewController.updateForHeadsUp();
-        }
-
-        @Override
-        public void onHeadsUpPinned(NotificationEntry entry) {
-            if (!isOnKeyguard()) {
-                mNotificationStackScrollLayoutController.generateHeadsUpAnimation(
-                        entry.getHeadsUpAnimationView(), true);
-            }
-        }
-
-        @Override
-        public void onHeadsUpUnPinned(NotificationEntry entry) {
-
-            // When we're unpinning the notification via active edge they remain heads-upped,
-            // we need to make sure that an animation happens in this case, otherwise the
-            // notification
-            // will stick to the top without any interaction.
-            if (isFullyCollapsed() && entry.isRowHeadsUp() && !isOnKeyguard()) {
-                mNotificationStackScrollLayoutController.generateHeadsUpAnimation(
-                        entry.getHeadsUpAnimationView(), false);
-                entry.setHeadsUpIsVisible();
-            }
-        }
-    }
-
-    private class HeightListener implements QS.HeightListener {
-        public void onQsHeightChanged() {
-            mQsMaxExpansionHeight = mQs != null ? mQs.getDesiredHeight() : 0;
-            if (mQsExpanded && mQsFullyExpanded) {
-                mQsExpansionHeight = mQsMaxExpansionHeight;
-                requestScrollerTopPaddingUpdate(false /* animate */);
-                requestPanelHeightUpdate();
-            }
-            if (mAccessibilityManager.isEnabled()) {
-                mView.setAccessibilityPaneTitle(determineAccessibilityPaneTitle());
-            }
-            mNotificationStackScrollLayoutController.setMaxTopPadding(mQsMaxExpansionHeight);
-        }
-    }
-
-    private class ConfigurationListener implements ConfigurationController.ConfigurationListener {
-        @Override
-        public void onThemeChanged() {
-            if (DEBUG_LOGCAT) Log.d(TAG, "onThemeChanged");
-            mThemeResId = mView.getContext().getThemeResId();
-            reInflateViews();
-        }
-
-        @Override
-        public void onSmallestScreenWidthChanged() {
-            Trace.beginSection("onSmallestScreenWidthChanged");
-            if (DEBUG_LOGCAT) Log.d(TAG, "onSmallestScreenWidthChanged");
-
-            // Can affect multi-user switcher visibility as it depends on screen size by default:
-            // it is enabled only for devices with large screens (see config_keyguardUserSwitcher)
-            boolean prevKeyguardUserSwitcherEnabled = mKeyguardUserSwitcherEnabled;
-            boolean prevKeyguardQsUserSwitchEnabled = mKeyguardQsUserSwitchEnabled;
-            updateUserSwitcherFlags();
-            if (prevKeyguardUserSwitcherEnabled != mKeyguardUserSwitcherEnabled
-                    || prevKeyguardQsUserSwitchEnabled != mKeyguardQsUserSwitchEnabled) {
-                reInflateViews();
-            }
-
-            Trace.endSection();
-        }
-
-        @Override
-        public void onDensityOrFontScaleChanged() {
-            if (DEBUG_LOGCAT) Log.d(TAG, "onDensityOrFontScaleChanged");
-            reInflateViews();
-        }
-    }
-
-    private class SettingsChangeObserver extends ContentObserver {
-
-        SettingsChangeObserver(Handler handler) {
-            super(handler);
-        }
-
-        @Override
-        public void onChange(boolean selfChange) {
-            if (DEBUG_LOGCAT) Log.d(TAG, "onSettingsChanged");
-
-            // Can affect multi-user switcher visibility
-            reInflateViews();
-        }
-    }
-
-    private class StatusBarStateListener implements StateListener {
-        @Override
-        public void onStateChanged(int statusBarState) {
-            boolean goingToFullShade = mStatusBarStateController.goingToFullShade();
-            boolean keyguardFadingAway = mKeyguardStateController.isKeyguardFadingAway();
-            int oldState = mBarState;
-            boolean keyguardShowing = statusBarState == KEYGUARD;
-
-            if (mDozeParameters.shouldDelayKeyguardShow()
-                    && oldState == StatusBarState.SHADE
-                    && statusBarState == KEYGUARD) {
-                // This means we're doing the screen off animation - position the keyguard status
-                // view where it'll be on AOD, so we can animate it in.
-                mKeyguardStatusViewController.updatePosition(
-                        mClockPositionResult.clockX,
-                        mClockPositionResult.clockYFullyDozing,
-                        mClockPositionResult.clockScale,
-                        false /* animate */);
-            }
-
-            mKeyguardStatusViewController.setKeyguardStatusViewVisibility(
-                    statusBarState,
-                    keyguardFadingAway,
-                    goingToFullShade,
-                    mBarState);
-
-            setKeyguardBottomAreaVisibility(statusBarState, goingToFullShade);
-
-            mBarState = statusBarState;
-            mKeyguardShowing = keyguardShowing;
-
-            if (oldState == KEYGUARD && (goingToFullShade
-                    || statusBarState == StatusBarState.SHADE_LOCKED)) {
-
-                long startDelay;
-                long duration;
-                if (mKeyguardStateController.isKeyguardFadingAway()) {
-                    startDelay = mKeyguardStateController.getKeyguardFadingAwayDelay();
-                    duration = mKeyguardStateController.getShortenedFadingAwayDuration();
-                } else {
-                    startDelay = 0;
-                    duration = StackStateAnimator.ANIMATION_DURATION_STANDARD;
-                }
-                mKeyguardStatusBarViewController.animateKeyguardStatusBarOut(startDelay, duration);
-                if (mSplitShadeEnabled) {
-                    // temporary workaround for QS height not being updated during lockscreen to
-                    // shade transition
-                    setQsExpanded(true);
-                }
-                updateQSMinHeight();
-            } else if (oldState == StatusBarState.SHADE_LOCKED
-                    && statusBarState == KEYGUARD) {
-                mKeyguardStatusBarViewController.animateKeyguardStatusBarIn();
-
-                mNotificationStackScrollLayoutController.resetScrollPosition();
-                // Only animate header if the header is visible. If not, it will partially
-                // animate out
-                // the top of QS
-                if (!mQsExpanded) {
-                    // TODO(b/185683835) Nicer clipping when using new spacial model
-                    if (mSplitShadeEnabled) {
-                        mQs.animateHeaderSlidingOut();
-                    }
-                }
-            } else {
-                final boolean animatingUnlockedShadeToKeyguard = oldState == SHADE
-                        && statusBarState == KEYGUARD
-                        && mScreenOffAnimationController.isKeyguardShowDelayed();
-                if (!animatingUnlockedShadeToKeyguard) {
-                    // Only make the status bar visible if we're not animating the screen off, since
-                    // we only want to be showing the clock/notifications during the animation.
-                    mKeyguardStatusBarViewController.updateViewState(
-                            /* alpha= */ 1f,
-                            keyguardShowing ? View.VISIBLE : View.INVISIBLE);
-                }
-                if (keyguardShowing && oldState != mBarState) {
-                    if (mQs != null) {
-                        mQs.hideImmediately();
-                    }
-                }
-            }
-            mKeyguardStatusBarViewController.updateForHeadsUp();
-            if (keyguardShowing) {
-                updateDozingVisibilities(false /* animate */);
-            }
-
-            updateMaxDisplayedNotifications(false);
-            // The update needs to happen after the headerSlide in above, otherwise the translation
-            // would reset
-            maybeAnimateBottomAreaAlpha();
-            updateQsState();
-        }
-
-        @Override
-        public void onDozeAmountChanged(float linearAmount, float amount) {
-            mInterpolatedDarkAmount = amount;
-            mLinearDarkAmount = linearAmount;
-            mKeyguardStatusViewController.setDarkAmount(mInterpolatedDarkAmount);
-            mKeyguardBottomArea.setDarkAmount(mInterpolatedDarkAmount);
-            positionClockAndNotifications();
-        }
-    }
-
-    /**
-     * 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() {
-                @Override
-                public float getPanelViewExpandedHeight() {
-                    return getExpandedHeight();
-                }
-
-                @Override
-                public boolean shouldHeadsUpBeVisible() {
-                    return mHeadsUpAppearanceController.shouldBeVisible();
-                }
-
-                @Override
-                public float getLockscreenShadeDragProgress() {
-                    return mTransitioningToFullShadeProgress > 0
-                            ? mLockscreenShadeTransitionController.getQSDragProgress()
-                            : computeQsExpansionFraction();
-                }
-            };
-
-    /**
-     * 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.
-     */
-    public void showAodUi() {
-        setDozing(true /* dozing */, false /* animate */, null);
-        mStatusBarStateController.setUpcomingState(KEYGUARD);
-        mEntryManager.updateNotifications("showAodUi");
-        mStatusBarStateListener.onStateChanged(KEYGUARD);
-        mStatusBarStateListener.onDozeAmountChanged(1f, 1f);
-        setExpandedFraction(1f);
-    }
-
-    /**
-     * Sets the overstretch amount in raw pixels when dragging down.
-     */
-    public void setOverStrechAmount(float amount) {
-        float progress = amount / mView.getHeight();
-        float overstretch = Interpolators.getOvershootInterpolation(progress);
-        mOverStretchAmount = overstretch * mMaxOverscrollAmountForPulse;
-        positionClockAndNotifications(true /* forceUpdate */);
-    }
-
-    private class OnAttachStateChangeListener implements View.OnAttachStateChangeListener {
-        @Override
-        public void onViewAttachedToWindow(View v) {
-            mFragmentService.getFragmentHostManager(mView)
-                            .addTagListener(QS.TAG, mFragmentListener);
-            mStatusBarStateController.addCallback(mStatusBarStateListener);
-            mStatusBarStateListener.onStateChanged(mStatusBarStateController.getState());
-            mConfigurationController.addCallback(mConfigurationListener);
-            // Theme might have changed between inflating this view and attaching it to the
-            // window, so
-            // force a call to onThemeChanged
-            mConfigurationListener.onThemeChanged();
-            mFalsingManager.addTapListener(mFalsingTapListener);
-            mKeyguardIndicationController.init();
-            registerSettingsChangeListener();
-        }
-
-        @Override
-        public void onViewDetachedFromWindow(View v) {
-            unregisterSettingsChangeListener();
-            mFragmentService.getFragmentHostManager(mView)
-                            .removeTagListener(QS.TAG, mFragmentListener);
-            mStatusBarStateController.removeCallback(mStatusBarStateListener);
-            mConfigurationController.removeCallback(mConfigurationListener);
-            mFalsingManager.removeTapListener(mFalsingTapListener);
-        }
-    }
-
-    private class OnLayoutChangeListener extends PanelViewController.OnLayoutChangeListener {
-
-        @Override
-        public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft,
-                int oldTop, int oldRight, int oldBottom) {
-            DejankUtils.startDetectingBlockingIpcs("NVP#onLayout");
-            super.onLayoutChange(v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom);
-            updateMaxDisplayedNotifications(!shouldAvoidChangingNotificationsCount());
-            setIsFullWidth(mNotificationStackScrollLayoutController.getWidth() == mView.getWidth());
-
-            // Update Clock Pivot
-            mKeyguardStatusViewController.setPivotX(mView.getWidth() / 2);
-            mKeyguardStatusViewController.setPivotY(
-                    (FONT_HEIGHT - CAP_HEIGHT) / 2048f
-                            * mKeyguardStatusViewController.getClockTextSize());
-
-            // Calculate quick setting heights.
-            int oldMaxHeight = mQsMaxExpansionHeight;
-            if (mQs != null) {
-                updateQSMinHeight();
-                mQsMaxExpansionHeight = mQs.getDesiredHeight();
-                mNotificationStackScrollLayoutController.setMaxTopPadding(mQsMaxExpansionHeight);
-            }
-            positionClockAndNotifications();
-            if (mQsExpanded && mQsFullyExpanded) {
-                mQsExpansionHeight = mQsMaxExpansionHeight;
-                requestScrollerTopPaddingUpdate(false /* animate */);
-                requestPanelHeightUpdate();
-
-                // Size has changed, start an animation.
-                if (mQsMaxExpansionHeight != oldMaxHeight) {
-                    startQsSizeChangeAnimation(oldMaxHeight, mQsMaxExpansionHeight);
-                }
-            } else if (!mQsExpanded && mQsExpansionAnimator == null) {
-                setQsExpansion(mQsMinExpansionHeight + mLastOverscroll);
-            }
-            updateExpandedHeight(getExpandedHeight());
-            updateHeader();
-
-            // If we are running a size change animation, the animation takes care of the height of
-            // the container. However, if we are not animating, we always need to make the QS
-            // container
-            // the desired height so when closing the QS detail, it stays smaller after the size
-            // change
-            // animation is finished but the detail view is still being animated away (this
-            // animation
-            // takes longer than the size change animation).
-            if (mQsSizeChangeAnimator == null && mQs != null) {
-                mQs.setHeightOverride(mQs.getDesiredHeight());
-            }
-            updateMaxHeadsUpTranslation();
-            updateGestureExclusionRect();
-            if (mExpandAfterLayoutRunnable != null) {
-                mExpandAfterLayoutRunnable.run();
-                mExpandAfterLayoutRunnable = null;
-            }
-            DejankUtils.stopDetectingBlockingIpcs("NVP#onLayout");
-        }
-    }
-
-    private void updateQSMinHeight() {
-        float previousMin = mQsMinExpansionHeight;
-        if (mKeyguardShowing || mSplitShadeEnabled) {
-            mQsMinExpansionHeight = 0;
-        } else {
-            mQsMinExpansionHeight = mQs.getQsMinExpansionHeight();
-        }
-        if (mQsExpansionHeight == previousMin) {
-            mQsExpansionHeight = mQsMinExpansionHeight;
-        }
-    }
-
-    private class DebugDrawable extends Drawable {
-
-        private final Set<Integer> mDebugTextUsedYPositions = new HashSet<>();
-        private final Paint mDebugPaint = new Paint();
-
-        @Override
-        public void draw(@NonNull Canvas canvas) {
-            mDebugTextUsedYPositions.clear();
-
-            mDebugPaint.setColor(Color.RED);
-            mDebugPaint.setStrokeWidth(2);
-            mDebugPaint.setStyle(Paint.Style.STROKE);
-            mDebugPaint.setTextSize(24);
-            if (mHeaderDebugInfo != null) canvas.drawText(mHeaderDebugInfo, 50, 100, mDebugPaint);
-
-            drawDebugInfo(canvas, getMaxPanelHeight(), Color.RED, "getMaxPanelHeight()");
-            drawDebugInfo(canvas, (int) getExpandedHeight(), Color.BLUE, "getExpandedHeight()");
-            drawDebugInfo(canvas, calculatePanelHeightQsExpanded(), Color.GREEN,
-                    "calculatePanelHeightQsExpanded()");
-            drawDebugInfo(canvas, calculatePanelHeightShade(), Color.YELLOW,
-                    "calculatePanelHeightShade()");
-            drawDebugInfo(canvas, (int) calculateNotificationsTopPadding(), Color.MAGENTA,
-                    "calculateNotificationsTopPadding()");
-            drawDebugInfo(canvas, mClockPositionResult.clockY, Color.GRAY,
-                    "mClockPositionResult.clockY");
-            drawDebugInfo(canvas, (int) mLockIconViewController.getTop(), Color.GRAY,
-                    "mLockIconViewController.getTop()");
-
-            if (mKeyguardShowing) {
-                // Notifications have the space between those two lines.
-                drawDebugInfo(canvas,
-                        mNotificationStackScrollLayoutController.getTop() +
-                                (int) mKeyguardNotificationTopPadding,
-                        Color.RED,
-                        "NSSL.getTop() + mKeyguardNotificationTopPadding");
-
-                drawDebugInfo(canvas, mNotificationStackScrollLayoutController.getBottom() -
-                                (int) mKeyguardNotificationBottomPadding,
-                        Color.RED,
-                        "NSSL.getBottom() - mKeyguardNotificationBottomPadding");
-            }
-
-            mDebugPaint.setColor(Color.CYAN);
-            canvas.drawLine(0, mClockPositionResult.stackScrollerPadding, mView.getWidth(),
-                    mNotificationStackScrollLayoutController.getTopPadding(), mDebugPaint);
-        }
-
-        private void drawDebugInfo(Canvas canvas, int y, int color, String label) {
-            mDebugPaint.setColor(color);
-            canvas.drawLine(/* startX= */ 0, /* startY= */ y, /* stopX= */ mView.getWidth(),
-                    /* stopY= */ y, mDebugPaint);
-            canvas.drawText(label, /* x= */ 0, /* y= */ computeDebugYTextPosition(y), mDebugPaint);
-        }
-
-        private int computeDebugYTextPosition(int lineY) {
-            if (lineY - mDebugPaint.getTextSize() < 0) {
-                // Avoiding drawing out of bounds
-                lineY += mDebugPaint.getTextSize();
-            }
-            int textY = lineY;
-            while (mDebugTextUsedYPositions.contains(textY)) {
-                textY = (int) (textY + mDebugPaint.getTextSize());
-            }
-            mDebugTextUsedYPositions.add(textY);
-            return textY;
-        }
-
-        @Override
-        public void setAlpha(int alpha) {
-
-        }
-
-        @Override
-        public void setColorFilter(ColorFilter colorFilter) {
-
-        }
-
-        @Override
-        public int getOpacity() {
-            return 0;
-        }
-    }
-
-    private class OnConfigurationChangedListener extends
-            PanelViewController.OnConfigurationChangedListener {
-        @Override
-        public void onConfigurationChanged(Configuration newConfig) {
-            super.onConfigurationChanged(newConfig);
-            mAffordanceHelper.onConfigurationChanged();
-        }
-    }
-
-    private class OnApplyWindowInsetsListener implements View.OnApplyWindowInsetsListener {
-        public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
-            // the same types of insets that are handled in NotificationShadeWindowView
-            int insetTypes = WindowInsets.Type.systemBars() | WindowInsets.Type.displayCutout();
-            Insets combinedInsets = insets.getInsetsIgnoringVisibility(insetTypes);
-            mDisplayTopInset = combinedInsets.top;
-            mDisplayRightInset = combinedInsets.right;
-
-            mNavigationBarBottomHeight = insets.getStableInsetBottom();
-            updateMaxHeadsUpTranslation();
-            return insets;
-        }
-    }
-
-    /** Removes any pending runnables that would collapse the panel. */
-    public void cancelPendingPanelCollapse() {
-        mView.removeCallbacks(mMaybeHideExpandedRunnable);
-    }
-
-    @PanelState
-    private int mCurrentPanelState = STATE_CLOSED;
-
-    private void onPanelStateChanged(@PanelState int state) {
-        updateQSExpansionEnabledAmbient();
-
-        if (state == STATE_OPEN && mCurrentPanelState != state) {
-            mView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
-        }
-        if (state == STATE_OPENING) {
-            // we need to ignore it on keyguard as this is a false alarm - transition from unlocked
-            // to locked will trigger this event and we're not actually in the process of opening
-            // the shade, lockscreen is just always expanded
-            if (mSplitShadeEnabled && !isOnKeyguard()) {
-                mQsExpandImmediate = true;
-            }
-            mCentralSurfaces.makeExpandedVisible(false);
-        }
-        if (state == STATE_CLOSED) {
-            // Close the status bar in the next frame so we can show the end of the
-            // animation.
-            mView.post(mMaybeHideExpandedRunnable);
-        }
-        mCurrentPanelState = state;
-    }
-
-    /** Returns the handler that the status bar should forward touches to. */
-    public PhoneStatusBarView.TouchEventHandler getStatusBarTouchEventHandler() {
-        return mStatusBarViewTouchEventHandler;
-    }
-
-    private void onStatusBarWindowStateChanged(@StatusBarManager.WindowVisibleState int state) {
-        if (state != WINDOW_STATE_SHOWING
-                && mStatusBarStateController.getState() == StatusBarState.SHADE) {
-            collapsePanel(
-                    false /* animate */,
-                    false /* delayed */,
-                    1.0f /* speedUpFactor */);
-        }
-    }
-
-    @SysUISingleton
-    static class PanelEventsEmitter implements NotifPanelEvents {
-
-        private final ListenerSet<Listener> mListeners = new ListenerSet<>();
-
-        @Inject
-        PanelEventsEmitter() {}
-
-        @Override
-        public void registerListener(@NonNull Listener listener) {
-            mListeners.addIfAbsent(listener);
-        }
-
-        @Override
-        public void unregisterListener(@NonNull Listener listener) {
-            mListeners.remove(listener);
-        }
-
-        private void notifyLaunchingActivityChanged(boolean isLaunchingActivity) {
-            for (Listener cb : mListeners) {
-                cb.onLaunchingActivityChanged(isLaunchingActivity);
-            }
-        }
-
-        private void notifyPanelCollapsingChanged(boolean isCollapsing) {
-            for (NotifPanelEvents.Listener cb : mListeners) {
-                cb.onPanelCollapsingChanged(isCollapsing);
-            }
-        }
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowControllerImpl.java
deleted file mode 100644
index faae4bb..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowControllerImpl.java
+++ /dev/null
@@ -1,915 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 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_BEHAVIOR_CONTROLLED;
-
-import static com.android.systemui.DejankUtils.whitelistIpcs;
-import static com.android.systemui.statusbar.NotificationRemoteInputManager.ENABLE_REMOTE_INPUT;
-
-import android.app.IActivityManager;
-import android.content.Context;
-import android.content.pm.ActivityInfo;
-import android.content.res.Configuration;
-import android.graphics.PixelFormat;
-import android.graphics.Region;
-import android.os.Binder;
-import android.os.Build;
-import android.os.RemoteException;
-import android.os.Trace;
-import android.util.Log;
-import android.view.Display;
-import android.view.Gravity;
-import android.view.IWindow;
-import android.view.IWindowSession;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.WindowManager;
-import android.view.WindowManager.LayoutParams;
-import android.view.WindowManagerGlobal;
-
-import com.android.keyguard.KeyguardUpdateMonitor;
-import com.android.systemui.Dumpable;
-import com.android.systemui.R;
-import com.android.systemui.biometrics.AuthController;
-import com.android.systemui.colorextraction.SysuiColorExtractor;
-import com.android.systemui.dagger.SysUISingleton;
-import com.android.systemui.dump.DumpManager;
-import com.android.systemui.keyguard.KeyguardViewMediator;
-import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener;
-import com.android.systemui.statusbar.NotificationShadeWindowController;
-import com.android.systemui.statusbar.StatusBarState;
-import com.android.systemui.statusbar.SysuiStatusBarStateController;
-import com.android.systemui.statusbar.policy.ConfigurationController;
-import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
-import com.android.systemui.statusbar.policy.KeyguardStateController;
-
-import java.io.PrintWriter;
-import java.lang.ref.Reference;
-import java.lang.ref.WeakReference;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
-import java.util.function.Consumer;
-import java.util.stream.Collectors;
-
-import javax.inject.Inject;
-
-/**
- * Encapsulates all logic for the notification shade window state management.
- */
-@SysUISingleton
-public class NotificationShadeWindowControllerImpl implements NotificationShadeWindowController,
-        Dumpable, ConfigurationListener {
-
-    private static final String TAG = "NotificationShadeWindowController";
-    private static final boolean DEBUG = false;
-
-    private final Context mContext;
-    private final WindowManager mWindowManager;
-    private final IActivityManager mActivityManager;
-    private final DozeParameters mDozeParameters;
-    private final KeyguardStateController mKeyguardStateController;
-    private final LayoutParams mLpChanged;
-    private final long mLockScreenDisplayTimeout;
-    private final float mKeyguardPreferredRefreshRate; // takes precedence over max
-    private final float mKeyguardMaxRefreshRate;
-    private final KeyguardViewMediator mKeyguardViewMediator;
-    private final KeyguardBypassController mKeyguardBypassController;
-    private final AuthController mAuthController;
-    private ViewGroup mNotificationShadeView;
-    private LayoutParams mLp;
-    private boolean mHasTopUi;
-    private boolean mHasTopUiChanged;
-    private float mScreenBrightnessDoze;
-    private final State mCurrentState = new State();
-    private OtherwisedCollapsedListener mListener;
-    private ForcePluginOpenListener mForcePluginOpenListener;
-    private Consumer<Integer> mScrimsVisibilityListener;
-    private final ArrayList<WeakReference<StatusBarWindowCallback>>
-            mCallbacks = new ArrayList<>();
-
-    private final SysuiColorExtractor mColorExtractor;
-    private final ScreenOffAnimationController mScreenOffAnimationController;
-    /**
-     * Layout params would be aggregated and dispatched all at once if this is > 0.
-     *
-     * @see #batchApplyWindowLayoutParams(Runnable)
-     */
-    private int mDeferWindowLayoutParams;
-    private boolean mLastKeyguardRotationAllowed;
-
-    @Inject
-    public NotificationShadeWindowControllerImpl(Context context, WindowManager windowManager,
-            IActivityManager activityManager, DozeParameters dozeParameters,
-            StatusBarStateController statusBarStateController,
-            ConfigurationController configurationController,
-            KeyguardViewMediator keyguardViewMediator,
-            KeyguardBypassController keyguardBypassController,
-            SysuiColorExtractor colorExtractor,
-            DumpManager dumpManager,
-            KeyguardStateController keyguardStateController,
-            ScreenOffAnimationController screenOffAnimationController,
-            AuthController authController) {
-        mContext = context;
-        mWindowManager = windowManager;
-        mActivityManager = activityManager;
-        mDozeParameters = dozeParameters;
-        mKeyguardStateController = keyguardStateController;
-        mScreenBrightnessDoze = mDozeParameters.getScreenBrightnessDoze();
-        mLpChanged = new LayoutParams();
-        mKeyguardViewMediator = keyguardViewMediator;
-        mKeyguardBypassController = keyguardBypassController;
-        mColorExtractor = colorExtractor;
-        mScreenOffAnimationController = screenOffAnimationController;
-        dumpManager.registerDumpable(getClass().getName(), this);
-        mAuthController = authController;
-        mLastKeyguardRotationAllowed = mKeyguardStateController.isKeyguardScreenRotationAllowed();
-        mLockScreenDisplayTimeout = context.getResources()
-                .getInteger(R.integer.config_lockScreenDisplayTimeout);
-        ((SysuiStatusBarStateController) statusBarStateController)
-                .addCallback(mStateListener,
-                        SysuiStatusBarStateController.RANK_STATUS_BAR_WINDOW_CONTROLLER);
-        configurationController.addCallback(this);
-
-        float desiredPreferredRefreshRate = context.getResources()
-                .getInteger(R.integer.config_keyguardRefreshRate);
-        float actualPreferredRefreshRate = -1;
-        if (desiredPreferredRefreshRate > -1) {
-            for (Display.Mode displayMode : context.getDisplay().getSupportedModes()) {
-                if (Math.abs(displayMode.getRefreshRate() - desiredPreferredRefreshRate) <= .1) {
-                    actualPreferredRefreshRate = displayMode.getRefreshRate();
-                    break;
-                }
-            }
-        }
-
-        mKeyguardPreferredRefreshRate = actualPreferredRefreshRate;
-
-        // Running on the highest frame rate available can be expensive.
-        // Let's specify a preferred refresh rate, and allow higher FPS only when we
-        // know that we're not falsing (because we unlocked.)
-        mKeyguardMaxRefreshRate = context.getResources()
-                .getInteger(R.integer.config_keyguardMaxRefreshRate);
-    }
-
-    /**
-     * Register to receive notifications about status bar window state changes.
-     */
-    @Override
-    public void registerCallback(StatusBarWindowCallback callback) {
-        // Prevent adding duplicate callbacks
-        for (int i = 0; i < mCallbacks.size(); i++) {
-            if (mCallbacks.get(i).get() == callback) {
-                return;
-            }
-        }
-        mCallbacks.add(new WeakReference<StatusBarWindowCallback>(callback));
-    }
-
-    @Override
-    public void unregisterCallback(StatusBarWindowCallback callback) {
-        for (int i = 0; i < mCallbacks.size(); i++) {
-            if (mCallbacks.get(i).get() == callback) {
-                mCallbacks.remove(i);
-                return;
-            }
-        }
-    }
-
-    /**
-     * Register a listener to monitor scrims visibility
-     * @param listener A listener to monitor scrims visibility
-     */
-    @Override
-    public void setScrimsVisibilityListener(Consumer<Integer> listener) {
-        if (listener != null && mScrimsVisibilityListener != listener) {
-            mScrimsVisibilityListener = listener;
-        }
-    }
-
-    /**
-     * Adds the notification shade view to the window manager.
-     */
-    @Override
-    public void attach() {
-        // Now that the notification shade encompasses the sliding panel and its
-        // translucent backdrop, the entire thing is made TRANSLUCENT and is
-        // hardware-accelerated.
-        mLp = new LayoutParams(
-                ViewGroup.LayoutParams.MATCH_PARENT,
-                ViewGroup.LayoutParams.MATCH_PARENT,
-                LayoutParams.TYPE_NOTIFICATION_SHADE,
-                LayoutParams.FLAG_NOT_FOCUSABLE
-                        | LayoutParams.FLAG_TOUCHABLE_WHEN_WAKING
-                        | LayoutParams.FLAG_SPLIT_TOUCH
-                        | LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
-                        | LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS,
-                PixelFormat.TRANSLUCENT);
-        mLp.token = new Binder();
-        mLp.gravity = Gravity.TOP;
-        mLp.setFitInsetsTypes(0 /* types */);
-        mLp.softInputMode = LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
-        mLp.setTitle("NotificationShade");
-        mLp.packageName = mContext.getPackageName();
-        mLp.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
-
-        // We use BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE here, however, there is special logic in
-        // window manager which disables the transient show behavior.
-        // TODO: Clean this up once that behavior moves into the Shell.
-        mLp.privateFlags |= PRIVATE_FLAG_BEHAVIOR_CONTROLLED;
-        mLp.insetsFlags.behavior = BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
-
-        mWindowManager.addView(mNotificationShadeView, mLp);
-        mLpChanged.copyFrom(mLp);
-        onThemeChanged();
-
-        // Make the state consistent with KeyguardViewMediator#setupLocked during initialization.
-        if (mKeyguardViewMediator.isShowingAndNotOccluded()) {
-            setKeyguardShowing(true);
-        }
-    }
-
-    @Override
-    public void setNotificationShadeView(ViewGroup view) {
-        mNotificationShadeView = view;
-    }
-
-    @Override
-    public ViewGroup getNotificationShadeView() {
-        return mNotificationShadeView;
-    }
-
-    @Override
-    public void setDozeScreenBrightness(int value) {
-        mScreenBrightnessDoze = value / 255f;
-    }
-
-    private void setKeyguardDark(boolean dark) {
-        int vis = mNotificationShadeView.getSystemUiVisibility();
-        if (dark) {
-            vis = vis | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;
-            vis = vis | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
-        } else {
-            vis = vis & ~View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;
-            vis = vis & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
-        }
-        mNotificationShadeView.setSystemUiVisibility(vis);
-    }
-
-    private void applyKeyguardFlags(State state) {
-        final boolean keyguardOrAod = state.mKeyguardShowing
-                || (state.mDozing && mDozeParameters.getAlwaysOn());
-        if ((keyguardOrAod && !state.mBackdropShowing && !state.mLightRevealScrimOpaque)
-                || mKeyguardViewMediator.isAnimatingBetweenKeyguardAndSurfaceBehind()) {
-            // Show the wallpaper if we're on keyguard/AOD and the wallpaper is not occluded by a
-            // solid backdrop. Also, show it if we are currently animating between the
-            // keyguard and the surface behind the keyguard - we want to use the wallpaper as a
-            // backdrop for this animation.
-            mLpChanged.flags |= LayoutParams.FLAG_SHOW_WALLPAPER;
-        } else {
-            mLpChanged.flags &= ~LayoutParams.FLAG_SHOW_WALLPAPER;
-        }
-
-        if (state.mDozing) {
-            mLpChanged.privateFlags |= LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
-        } else {
-            mLpChanged.privateFlags &= ~LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
-        }
-
-        if (mKeyguardPreferredRefreshRate > 0) {
-            boolean onKeyguard = state.mStatusBarState == StatusBarState.KEYGUARD
-                    && !state.mKeyguardFadingAway && !state.mKeyguardGoingAway;
-            if (onKeyguard
-                    && mAuthController.isUdfpsEnrolled(KeyguardUpdateMonitor.getCurrentUser())) {
-                mLpChanged.preferredMaxDisplayRefreshRate = mKeyguardPreferredRefreshRate;
-            } else {
-                mLpChanged.preferredMaxDisplayRefreshRate = 0;
-            }
-            Trace.setCounter("display_set_preferred_refresh_rate",
-                    (long) mKeyguardPreferredRefreshRate);
-        } else if (mKeyguardMaxRefreshRate > 0) {
-            boolean bypassOnKeyguard = mKeyguardBypassController.getBypassEnabled()
-                    && state.mStatusBarState == StatusBarState.KEYGUARD
-                    && !state.mKeyguardFadingAway && !state.mKeyguardGoingAway;
-            if (state.mDozing || bypassOnKeyguard) {
-                mLpChanged.preferredMaxDisplayRefreshRate = mKeyguardMaxRefreshRate;
-            } else {
-                mLpChanged.preferredMaxDisplayRefreshRate = 0;
-            }
-            Trace.setCounter("display_max_refresh_rate",
-                    (long) mLpChanged.preferredMaxDisplayRefreshRate);
-        }
-
-        if (state.mBouncerShowing && !isDebuggable()) {
-            mLpChanged.flags |= LayoutParams.FLAG_SECURE;
-        } else {
-            mLpChanged.flags &= ~LayoutParams.FLAG_SECURE;
-        }
-    }
-
-    protected boolean isDebuggable() {
-        return Build.IS_DEBUGGABLE;
-    }
-
-    private void adjustScreenOrientation(State state) {
-        if (state.mBouncerShowing || state.isKeyguardShowingAndNotOccluded() || state.mDozing) {
-            if (mKeyguardStateController.isKeyguardScreenRotationAllowed()) {
-                mLpChanged.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_USER;
-            } else {
-                mLpChanged.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
-            }
-        } else {
-            mLpChanged.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
-        }
-    }
-
-    private void applyFocusableFlag(State state) {
-        boolean panelFocusable = state.mNotificationShadeFocusable && state.mPanelExpanded;
-        if (state.mBouncerShowing && (state.mKeyguardOccluded || state.mKeyguardNeedsInput)
-                || ENABLE_REMOTE_INPUT && state.mRemoteInputActive
-                // Make the panel focusable if we're doing the screen off animation, since the light
-                // reveal scrim is drawing in the panel and should consume touch events so that they
-                // don't go to the app behind.
-                || mScreenOffAnimationController.shouldIgnoreKeyguardTouches()) {
-            mLpChanged.flags &= ~LayoutParams.FLAG_NOT_FOCUSABLE;
-            mLpChanged.flags &= ~LayoutParams.FLAG_ALT_FOCUSABLE_IM;
-        } else if (state.isKeyguardShowingAndNotOccluded() || panelFocusable) {
-            mLpChanged.flags &= ~LayoutParams.FLAG_NOT_FOCUSABLE;
-            // Make sure to remove FLAG_ALT_FOCUSABLE_IM when keyguard needs input.
-            if (state.mKeyguardNeedsInput && state.isKeyguardShowingAndNotOccluded()) {
-                mLpChanged.flags &= ~LayoutParams.FLAG_ALT_FOCUSABLE_IM;
-            } else {
-                mLpChanged.flags |= LayoutParams.FLAG_ALT_FOCUSABLE_IM;
-            }
-        } else {
-            mLpChanged.flags |= LayoutParams.FLAG_NOT_FOCUSABLE;
-            mLpChanged.flags &= ~LayoutParams.FLAG_ALT_FOCUSABLE_IM;
-        }
-
-        mLpChanged.softInputMode = LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
-    }
-
-    private void applyForceShowNavigationFlag(State state) {
-        if (state.mPanelExpanded || state.mBouncerShowing
-                || ENABLE_REMOTE_INPUT && state.mRemoteInputActive) {
-            mLpChanged.privateFlags |= LayoutParams.PRIVATE_FLAG_STATUS_FORCE_SHOW_NAVIGATION;
-        } else {
-            mLpChanged.privateFlags &= ~LayoutParams.PRIVATE_FLAG_STATUS_FORCE_SHOW_NAVIGATION;
-        }
-    }
-
-    private void applyVisibility(State state) {
-        boolean visible = isExpanded(state);
-        if (state.mForcePluginOpen) {
-            if (mListener != null) {
-                mListener.setWouldOtherwiseCollapse(visible);
-            }
-            visible = true;
-        }
-        if (mNotificationShadeView != null) {
-            if (visible) {
-                mNotificationShadeView.setVisibility(View.VISIBLE);
-            } else {
-                mNotificationShadeView.setVisibility(View.INVISIBLE);
-            }
-        }
-    }
-
-    private boolean isExpanded(State state) {
-        return !state.mForceCollapsed && (state.isKeyguardShowingAndNotOccluded()
-                || state.mPanelVisible || state.mKeyguardFadingAway || state.mBouncerShowing
-                || state.mHeadsUpShowing
-                || state.mScrimsVisibility != ScrimController.TRANSPARENT)
-                || state.mBackgroundBlurRadius > 0
-                || state.mLaunchingActivity;
-    }
-
-    private void applyFitsSystemWindows(State state) {
-        boolean fitsSystemWindows = !state.isKeyguardShowingAndNotOccluded();
-        if (mNotificationShadeView != null
-                && mNotificationShadeView.getFitsSystemWindows() != fitsSystemWindows) {
-            mNotificationShadeView.setFitsSystemWindows(fitsSystemWindows);
-            mNotificationShadeView.requestApplyInsets();
-        }
-    }
-
-    private void applyUserActivityTimeout(State state) {
-        if (state.isKeyguardShowingAndNotOccluded()
-                && state.mStatusBarState == StatusBarState.KEYGUARD
-                && !state.mQsExpanded) {
-            mLpChanged.userActivityTimeout = state.mBouncerShowing
-                    ? KeyguardViewMediator.AWAKE_INTERVAL_BOUNCER_MS : mLockScreenDisplayTimeout;
-        } else {
-            mLpChanged.userActivityTimeout = -1;
-        }
-    }
-
-    private void applyInputFeatures(State state) {
-        if (state.isKeyguardShowingAndNotOccluded()
-                && state.mStatusBarState == StatusBarState.KEYGUARD
-                && !state.mQsExpanded && !state.mForceUserActivity) {
-            mLpChanged.inputFeatures |=
-                    LayoutParams.INPUT_FEATURE_DISABLE_USER_ACTIVITY;
-        } else {
-            mLpChanged.inputFeatures &=
-                    ~LayoutParams.INPUT_FEATURE_DISABLE_USER_ACTIVITY;
-        }
-    }
-
-    private void applyStatusBarColorSpaceAgnosticFlag(State state) {
-        if (!isExpanded(state)) {
-            mLpChanged.privateFlags |= LayoutParams.PRIVATE_FLAG_COLOR_SPACE_AGNOSTIC;
-        } else {
-            mLpChanged.privateFlags &=
-                    ~LayoutParams.PRIVATE_FLAG_COLOR_SPACE_AGNOSTIC;
-        }
-    }
-
-    private void applyWindowLayoutParams() {
-        if (mDeferWindowLayoutParams == 0 && mLp != null && mLp.copyFrom(mLpChanged) != 0) {
-            Trace.beginSection("updateViewLayout");
-            mWindowManager.updateViewLayout(mNotificationShadeView, mLp);
-            Trace.endSection();
-        }
-    }
-
-    @Override
-    public void batchApplyWindowLayoutParams(Runnable scope) {
-        mDeferWindowLayoutParams++;
-        scope.run();
-        mDeferWindowLayoutParams--;
-        applyWindowLayoutParams();
-    }
-
-    private void apply(State state) {
-        applyKeyguardFlags(state);
-        applyFocusableFlag(state);
-        applyForceShowNavigationFlag(state);
-        adjustScreenOrientation(state);
-        applyVisibility(state);
-        applyUserActivityTimeout(state);
-        applyInputFeatures(state);
-        applyFitsSystemWindows(state);
-        applyModalFlag(state);
-        applyBrightness(state);
-        applyHasTopUi(state);
-        applyNotTouchable(state);
-        applyStatusBarColorSpaceAgnosticFlag(state);
-        applyWindowLayoutParams();
-
-        if (mHasTopUi != mHasTopUiChanged) {
-            whitelistIpcs(() -> {
-                try {
-                    mActivityManager.setHasTopUi(mHasTopUiChanged);
-                } catch (RemoteException e) {
-                    Log.e(TAG, "Failed to call setHasTopUi", e);
-                }
-                mHasTopUi = mHasTopUiChanged;
-            });
-        }
-        notifyStateChangedCallbacks();
-    }
-
-    @Override
-    public void notifyStateChangedCallbacks() {
-        // Copy callbacks to separate ArrayList to avoid concurrent modification
-        List<StatusBarWindowCallback> activeCallbacks = mCallbacks.stream()
-                .map(Reference::get)
-                .filter(Objects::nonNull)
-                .collect(Collectors.toList());
-        for (StatusBarWindowCallback cb : activeCallbacks) {
-            cb.onStateChanged(mCurrentState.mKeyguardShowing,
-                    mCurrentState.mKeyguardOccluded,
-                    mCurrentState.mBouncerShowing,
-                    mCurrentState.mDozing);
-        }
-    }
-
-    private void applyModalFlag(State state) {
-        if (state.mHeadsUpShowing) {
-            mLpChanged.flags |= LayoutParams.FLAG_NOT_TOUCH_MODAL;
-        } else {
-            mLpChanged.flags &= ~LayoutParams.FLAG_NOT_TOUCH_MODAL;
-        }
-    }
-
-    private void applyBrightness(State state) {
-        if (state.mForceDozeBrightness) {
-            mLpChanged.screenBrightness = mScreenBrightnessDoze;
-        } else {
-            mLpChanged.screenBrightness = LayoutParams.BRIGHTNESS_OVERRIDE_NONE;
-        }
-    }
-
-    private void applyHasTopUi(State state) {
-        mHasTopUiChanged = !state.mComponentsForcingTopUi.isEmpty() || isExpanded(state);
-    }
-
-    private void applyNotTouchable(State state) {
-        if (state.mNotTouchable) {
-            mLpChanged.flags |= LayoutParams.FLAG_NOT_TOUCHABLE;
-        } else {
-            mLpChanged.flags &= ~LayoutParams.FLAG_NOT_TOUCHABLE;
-        }
-    }
-
-    @Override
-    public void setTouchExclusionRegion(Region region) {
-        try {
-            final IWindowSession session = WindowManagerGlobal.getWindowSession();
-            session.updateTapExcludeRegion(
-                    IWindow.Stub.asInterface(getNotificationShadeView().getWindowToken()),
-                    region);
-        } catch (RemoteException e) {
-            Log.e(TAG, "could not update the tap exclusion region:" + e);
-        }
-    }
-
-
-    @Override
-    public void setKeyguardShowing(boolean showing) {
-        mCurrentState.mKeyguardShowing = showing;
-        apply(mCurrentState);
-    }
-
-    @Override
-    public void setKeyguardOccluded(boolean occluded) {
-        mCurrentState.mKeyguardOccluded = occluded;
-        apply(mCurrentState);
-    }
-
-    @Override
-    public void setKeyguardNeedsInput(boolean needsInput) {
-        mCurrentState.mKeyguardNeedsInput = needsInput;
-        apply(mCurrentState);
-    }
-
-    @Override
-    public void setPanelVisible(boolean visible) {
-        if (mCurrentState.mPanelVisible == visible
-                && mCurrentState.mNotificationShadeFocusable == visible) {
-            return;
-        }
-        mCurrentState.mPanelVisible = visible;
-        mCurrentState.mNotificationShadeFocusable = visible;
-        apply(mCurrentState);
-    }
-
-    @Override
-    public void setNotificationShadeFocusable(boolean focusable) {
-        mCurrentState.mNotificationShadeFocusable = focusable;
-        apply(mCurrentState);
-    }
-
-    @Override
-    public void setBouncerShowing(boolean showing) {
-        mCurrentState.mBouncerShowing = showing;
-        apply(mCurrentState);
-    }
-
-    @Override
-    public void setBackdropShowing(boolean showing) {
-        mCurrentState.mBackdropShowing = showing;
-        apply(mCurrentState);
-    }
-
-    @Override
-    public void setKeyguardFadingAway(boolean keyguardFadingAway) {
-        mCurrentState.mKeyguardFadingAway = keyguardFadingAway;
-        apply(mCurrentState);
-    }
-
-    @Override
-    public void setQsExpanded(boolean expanded) {
-        mCurrentState.mQsExpanded = expanded;
-        apply(mCurrentState);
-    }
-
-    @Override
-    public void setForceUserActivity(boolean forceUserActivity) {
-        mCurrentState.mForceUserActivity = forceUserActivity;
-        apply(mCurrentState);
-    }
-
-    @Override
-    public void setLaunchingActivity(boolean launching) {
-        mCurrentState.mLaunchingActivity = launching;
-        apply(mCurrentState);
-    }
-
-    @Override
-    public boolean isLaunchingActivity() {
-        return mCurrentState.mLaunchingActivity;
-    }
-
-    @Override
-    public void setScrimsVisibility(int scrimsVisibility) {
-        if (scrimsVisibility == mCurrentState.mScrimsVisibility) {
-            return;
-        }
-        boolean wasExpanded = isExpanded(mCurrentState);
-        mCurrentState.mScrimsVisibility = scrimsVisibility;
-        if (wasExpanded != isExpanded(mCurrentState)) {
-            apply(mCurrentState);
-        }
-        mScrimsVisibilityListener.accept(scrimsVisibility);
-    }
-
-    /**
-     * Current blur level, controller by
-     * {@link com.android.systemui.statusbar.NotificationShadeDepthController}.
-     * @param backgroundBlurRadius Radius in pixels.
-     */
-    @Override
-    public void setBackgroundBlurRadius(int backgroundBlurRadius) {
-        if (mCurrentState.mBackgroundBlurRadius == backgroundBlurRadius) {
-            return;
-        }
-        mCurrentState.mBackgroundBlurRadius = backgroundBlurRadius;
-        apply(mCurrentState);
-    }
-
-    @Override
-    public void setHeadsUpShowing(boolean showing) {
-        mCurrentState.mHeadsUpShowing = showing;
-        apply(mCurrentState);
-    }
-
-    @Override
-    public void setLightRevealScrimOpaque(boolean opaque) {
-        if (mCurrentState.mLightRevealScrimOpaque == opaque) {
-            return;
-        }
-        mCurrentState.mLightRevealScrimOpaque = opaque;
-        apply(mCurrentState);
-    }
-
-    @Override
-    public void setWallpaperSupportsAmbientMode(boolean supportsAmbientMode) {
-        mCurrentState.mWallpaperSupportsAmbientMode = supportsAmbientMode;
-        apply(mCurrentState);
-    }
-
-    /**
-     * @param state The {@link StatusBarStateController} of the status bar.
-     */
-    private void setStatusBarState(int state) {
-        mCurrentState.mStatusBarState = state;
-        apply(mCurrentState);
-    }
-
-    /**
-     * Force the window to be collapsed, even if it should theoretically be expanded.
-     * Used for when a heads-up comes in but we still need to wait for the touchable regions to
-     * be computed.
-     */
-    @Override
-    public void setForceWindowCollapsed(boolean force) {
-        mCurrentState.mForceCollapsed = force;
-        apply(mCurrentState);
-    }
-
-    @Override
-    public void setPanelExpanded(boolean isExpanded) {
-        if (mCurrentState.mPanelExpanded == isExpanded) {
-            return;
-        }
-        mCurrentState.mPanelExpanded = isExpanded;
-        apply(mCurrentState);
-    }
-
-    @Override
-    public void onRemoteInputActive(boolean remoteInputActive) {
-        mCurrentState.mRemoteInputActive = remoteInputActive;
-        apply(mCurrentState);
-    }
-
-    /**
-     * Set whether the screen brightness is forced to the value we use for doze mode by the status
-     * bar window.
-     */
-    @Override
-    public void setForceDozeBrightness(boolean forceDozeBrightness) {
-        if (mCurrentState.mForceDozeBrightness == forceDozeBrightness) {
-            return;
-        }
-        mCurrentState.mForceDozeBrightness = forceDozeBrightness;
-        apply(mCurrentState);
-    }
-
-    @Override
-    public void setDozing(boolean dozing) {
-        mCurrentState.mDozing = dozing;
-        apply(mCurrentState);
-    }
-
-    private final Set<Object> mForceOpenTokens = new HashSet<>();
-    @Override
-    public void setForcePluginOpen(boolean forceOpen, Object token) {
-        if (forceOpen) {
-            mForceOpenTokens.add(token);
-        } else {
-            mForceOpenTokens.remove(token);
-        }
-        final boolean previousForceOpenState = mCurrentState.mForcePluginOpen;
-        mCurrentState.mForcePluginOpen = !mForceOpenTokens.isEmpty();
-        if (previousForceOpenState != mCurrentState.mForcePluginOpen) {
-            apply(mCurrentState);
-            if (mForcePluginOpenListener != null) {
-                mForcePluginOpenListener.onChange(mCurrentState.mForcePluginOpen);
-            }
-        }
-    }
-
-    /**
-     * The forcePluginOpen state for the status bar.
-     */
-    @Override
-    public boolean getForcePluginOpen() {
-        return mCurrentState.mForcePluginOpen;
-    }
-
-    @Override
-    public void setNotTouchable(boolean notTouchable) {
-        mCurrentState.mNotTouchable = notTouchable;
-        apply(mCurrentState);
-    }
-
-    /**
-     * Whether the status bar panel is expanded or not.
-     */
-    @Override
-    public boolean getPanelExpanded() {
-        return mCurrentState.mPanelExpanded;
-    }
-
-    @Override
-    public void setStateListener(OtherwisedCollapsedListener listener) {
-        mListener = listener;
-    }
-
-    @Override
-    public void setForcePluginOpenListener(ForcePluginOpenListener listener) {
-        mForcePluginOpenListener = listener;
-    }
-
-    @Override
-    public void dump(PrintWriter pw, String[] args) {
-        pw.println(TAG + ":");
-        pw.println("  mKeyguardMaxRefreshRate=" + mKeyguardMaxRefreshRate);
-        pw.println("  mKeyguardPreferredRefreshRate=" + mKeyguardPreferredRefreshRate);
-        pw.println("  mDeferWindowLayoutParams=" + mDeferWindowLayoutParams);
-        pw.println(mCurrentState);
-        if (mNotificationShadeView != null && mNotificationShadeView.getViewRootImpl() != null) {
-            mNotificationShadeView.getViewRootImpl().dump("  ", pw);
-        }
-    }
-
-    @Override
-    public boolean isShowingWallpaper() {
-        return !mCurrentState.mBackdropShowing;
-    }
-
-    @Override
-    public void onThemeChanged() {
-        if (mNotificationShadeView == null) {
-            return;
-        }
-
-        final boolean useDarkText = mColorExtractor.getNeutralColors().supportsDarkText();
-        // Make sure we have the correct navbar/statusbar colors.
-        setKeyguardDark(useDarkText);
-    }
-
-    @Override
-    public void onConfigChanged(Configuration newConfig) {
-        final boolean newScreenRotationAllowed = mKeyguardStateController
-                .isKeyguardScreenRotationAllowed();
-
-        if (mLastKeyguardRotationAllowed != newScreenRotationAllowed) {
-            apply(mCurrentState);
-            mLastKeyguardRotationAllowed = newScreenRotationAllowed;
-        }
-    }
-
-    /**
-     * When keyguard will be dismissed but didn't start animation yet.
-     */
-    @Override
-    public void setKeyguardGoingAway(boolean goingAway) {
-        mCurrentState.mKeyguardGoingAway = goingAway;
-        apply(mCurrentState);
-    }
-
-    /**
-     * SystemUI may need top-ui to avoid jank when performing animations.  After the
-     * animation is performed, the component should remove itself from the list of features that
-     * are forcing SystemUI to be top-ui.
-     */
-    @Override
-    public void setRequestTopUi(boolean requestTopUi, String componentTag) {
-        if (requestTopUi) {
-            mCurrentState.mComponentsForcingTopUi.add(componentTag);
-        } else {
-            mCurrentState.mComponentsForcingTopUi.remove(componentTag);
-        }
-        apply(mCurrentState);
-    }
-
-    private static class State {
-        boolean mKeyguardShowing;
-        boolean mKeyguardOccluded;
-        boolean mKeyguardNeedsInput;
-        boolean mPanelVisible;
-        boolean mPanelExpanded;
-        boolean mNotificationShadeFocusable;
-        boolean mBouncerShowing;
-        boolean mKeyguardFadingAway;
-        boolean mKeyguardGoingAway;
-        boolean mQsExpanded;
-        boolean mHeadsUpShowing;
-        boolean mLightRevealScrimOpaque;
-        boolean mForceCollapsed;
-        boolean mForceDozeBrightness;
-        boolean mForceUserActivity;
-        boolean mLaunchingActivity;
-        boolean mBackdropShowing;
-        boolean mWallpaperSupportsAmbientMode;
-        boolean mNotTouchable;
-        Set<String> mComponentsForcingTopUi = new HashSet<>();
-
-        /**
-         * The status bar state from {@link CentralSurfaces}.
-         */
-        int mStatusBarState;
-
-        boolean mRemoteInputActive;
-        boolean mForcePluginOpen;
-        boolean mDozing;
-        int mScrimsVisibility;
-        int mBackgroundBlurRadius;
-
-        private boolean isKeyguardShowingAndNotOccluded() {
-            return mKeyguardShowing && !mKeyguardOccluded;
-        }
-
-        @Override
-        public String toString() {
-            StringBuilder result = new StringBuilder();
-            String newLine = "\n";
-            result.append("Window State {");
-            result.append(newLine);
-
-            Field[] fields = this.getClass().getDeclaredFields();
-
-            // Print field names paired with their values
-            for (Field field : fields) {
-                result.append("  ");
-                try {
-                    result.append(field.getName());
-                    result.append(": ");
-                    //requires access to private field:
-                    result.append(field.get(this));
-                } catch (IllegalAccessException ex) {
-                }
-                result.append(newLine);
-            }
-            result.append("}");
-
-            return result.toString();
-        }
-    }
-
-    private final StateListener mStateListener = new StateListener() {
-        @Override
-        public void onStateChanged(int newState) {
-            setStatusBarState(newState);
-        }
-
-        @Override
-        public void onDozingChanged(boolean isDozing) {
-            setDozing(isDozing);
-        }
-    };
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowView.java
deleted file mode 100644
index 1e3a02b..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowView.java
+++ /dev/null
@@ -1,622 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 static android.view.WindowInsets.Type.systemBars;
-
-import android.annotation.ColorInt;
-import android.annotation.DrawableRes;
-import android.annotation.LayoutRes;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.content.res.TypedArray;
-import android.graphics.Canvas;
-import android.graphics.Insets;
-import android.graphics.Paint;
-import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
-import android.net.Uri;
-import android.os.Bundle;
-import android.util.AttributeSet;
-import android.view.ActionMode;
-import android.view.DisplayCutout;
-import android.view.InputQueue;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.MotionEvent;
-import android.view.SurfaceHolder;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewTreeObserver;
-import android.view.Window;
-import android.view.WindowInsets;
-import android.view.WindowInsetsController;
-import android.widget.FrameLayout;
-
-import com.android.internal.view.FloatingActionMode;
-import com.android.internal.widget.floatingtoolbar.FloatingToolbar;
-import com.android.systemui.R;
-
-/**
- * Combined keyguard and notification panel view. Also holding backdrop and scrims.
- */
-public class NotificationShadeWindowView extends FrameLayout {
-    public static final String TAG = "NotificationShadeWindowView";
-    public static final boolean DEBUG = CentralSurfaces.DEBUG;
-
-    private int mRightInset = 0;
-    private int mLeftInset = 0;
-
-    // Implements the floating action mode for TextView's Cut/Copy/Past menu. Normally provided by
-    // DecorView, but since this is a special window we have to roll our own.
-    private View mFloatingActionModeOriginatingView;
-    private ActionMode mFloatingActionMode;
-    private FloatingToolbar mFloatingToolbar;
-    private ViewTreeObserver.OnPreDrawListener mFloatingToolbarPreDrawListener;
-
-    private InteractionEventHandler mInteractionEventHandler;
-
-    public NotificationShadeWindowView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        setMotionEventSplittingEnabled(false);
-    }
-
-    public NotificationPanelView getNotificationPanelView() {
-        return findViewById(R.id.notification_panel);
-    }
-
-    @Override
-    public WindowInsets onApplyWindowInsets(WindowInsets windowInsets) {
-        final Insets insets = windowInsets.getInsetsIgnoringVisibility(systemBars());
-        if (getFitsSystemWindows()) {
-            boolean paddingChanged = insets.top != getPaddingTop()
-                    || insets.bottom != getPaddingBottom();
-
-            // Drop top inset, and pass through bottom inset.
-            if (paddingChanged) {
-                setPadding(0, 0, 0, 0);
-            }
-        } else {
-            boolean changed = getPaddingLeft() != 0
-                    || getPaddingRight() != 0
-                    || getPaddingTop() != 0
-                    || getPaddingBottom() != 0;
-            if (changed) {
-                setPadding(0, 0, 0, 0);
-            }
-        }
-
-        mLeftInset = 0;
-        mRightInset = 0;
-        DisplayCutout displayCutout = getRootWindowInsets().getDisplayCutout();
-        if (displayCutout != null) {
-            mLeftInset = displayCutout.getSafeInsetLeft();
-            mRightInset = displayCutout.getSafeInsetRight();
-        }
-        mLeftInset = Math.max(insets.left, mLeftInset);
-        mRightInset = Math.max(insets.right, mRightInset);
-        applyMargins();
-        return windowInsets;
-    }
-
-    private void applyMargins() {
-        final int count = getChildCount();
-        for (int i = 0; i < count; i++) {
-            View child = getChildAt(i);
-            if (child.getLayoutParams() instanceof LayoutParams) {
-                LayoutParams lp = (LayoutParams) child.getLayoutParams();
-                if (!lp.ignoreRightInset
-                        && (lp.rightMargin != mRightInset || lp.leftMargin != mLeftInset)) {
-                    lp.rightMargin = mRightInset;
-                    lp.leftMargin = mLeftInset;
-                    child.requestLayout();
-                }
-            }
-        }
-    }
-
-    @Override
-    public FrameLayout.LayoutParams generateLayoutParams(AttributeSet attrs) {
-        return new LayoutParams(getContext(), attrs);
-    }
-
-    @Override
-    protected FrameLayout.LayoutParams generateDefaultLayoutParams() {
-        return new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
-    }
-
-    @Override
-    protected void onAttachedToWindow() {
-        super.onAttachedToWindow();
-        setWillNotDraw(!DEBUG);
-    }
-
-    @Override
-    public boolean dispatchKeyEvent(KeyEvent event) {
-        if (mInteractionEventHandler.interceptMediaKey(event)) {
-            return true;
-        }
-
-        if (super.dispatchKeyEvent(event)) {
-            return true;
-        }
-
-        return mInteractionEventHandler.dispatchKeyEvent(event);
-    }
-
-    @Override
-    public boolean dispatchKeyEventPreIme(KeyEvent event) {
-        return mInteractionEventHandler.dispatchKeyEventPreIme(event);
-    }
-
-    protected void setInteractionEventHandler(InteractionEventHandler listener) {
-        mInteractionEventHandler = listener;
-    }
-
-    @Override
-    public boolean dispatchTouchEvent(MotionEvent ev) {
-        Boolean result = mInteractionEventHandler.handleDispatchTouchEvent(ev);
-
-        result = result != null ? result : super.dispatchTouchEvent(ev);
-
-        mInteractionEventHandler.dispatchTouchEventComplete();
-
-        return result;
-    }
-
-    @Override
-    public boolean onInterceptTouchEvent(MotionEvent ev) {
-        boolean intercept = mInteractionEventHandler.shouldInterceptTouchEvent(ev);
-        if (!intercept) {
-            intercept = super.onInterceptTouchEvent(ev);
-        }
-        if (intercept) {
-            mInteractionEventHandler.didIntercept(ev);
-        }
-
-        return intercept;
-    }
-
-    @Override
-    public boolean onTouchEvent(MotionEvent ev) {
-        boolean handled = mInteractionEventHandler.handleTouchEvent(ev);
-
-        if (!handled) {
-            handled = super.onTouchEvent(ev);
-        }
-
-        if (!handled) {
-            mInteractionEventHandler.didNotHandleTouchEvent(ev);
-        }
-
-        return handled;
-    }
-
-    @Override
-    public void onDraw(Canvas canvas) {
-        super.onDraw(canvas);
-        if (DEBUG) {
-            Paint pt = new Paint();
-            pt.setColor(0x80FFFF00);
-            pt.setStrokeWidth(12.0f);
-            pt.setStyle(Paint.Style.STROKE);
-            canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), pt);
-        }
-    }
-
-    class LayoutParams extends FrameLayout.LayoutParams {
-
-        public boolean ignoreRightInset;
-
-        LayoutParams(int width, int height) {
-            super(width, height);
-        }
-
-        LayoutParams(Context c, AttributeSet attrs) {
-            super(c, attrs);
-
-            TypedArray a = c.obtainStyledAttributes(attrs, R.styleable.StatusBarWindowView_Layout);
-            ignoreRightInset = a.getBoolean(
-                    R.styleable.StatusBarWindowView_Layout_ignoreRightInset, false);
-            a.recycle();
-        }
-    }
-
-    @Override
-    public ActionMode startActionModeForChild(View originalView, ActionMode.Callback callback,
-            int type) {
-        if (type == ActionMode.TYPE_FLOATING) {
-            return startActionMode(originalView, callback, type);
-        }
-        return super.startActionModeForChild(originalView, callback, type);
-    }
-
-    private ActionMode createFloatingActionMode(
-            View originatingView, ActionMode.Callback2 callback) {
-        if (mFloatingActionMode != null) {
-            mFloatingActionMode.finish();
-        }
-        cleanupFloatingActionModeViews();
-        mFloatingToolbar = new FloatingToolbar(mFakeWindow);
-        final FloatingActionMode mode =
-                new FloatingActionMode(mContext, callback, originatingView, mFloatingToolbar);
-        mFloatingActionModeOriginatingView = originatingView;
-        mFloatingToolbarPreDrawListener =
-                new ViewTreeObserver.OnPreDrawListener() {
-                    @Override
-                    public boolean onPreDraw() {
-                        mode.updateViewLocationInWindow();
-                        return true;
-                    }
-                };
-        return mode;
-    }
-
-    private void setHandledFloatingActionMode(ActionMode mode) {
-        mFloatingActionMode = mode;
-        mFloatingActionMode.invalidate();  // Will show the floating toolbar if necessary.
-        mFloatingActionModeOriginatingView.getViewTreeObserver()
-                .addOnPreDrawListener(mFloatingToolbarPreDrawListener);
-    }
-
-    private void cleanupFloatingActionModeViews() {
-        if (mFloatingToolbar != null) {
-            mFloatingToolbar.dismiss();
-            mFloatingToolbar = null;
-        }
-        if (mFloatingActionModeOriginatingView != null) {
-            if (mFloatingToolbarPreDrawListener != null) {
-                mFloatingActionModeOriginatingView.getViewTreeObserver()
-                        .removeOnPreDrawListener(mFloatingToolbarPreDrawListener);
-                mFloatingToolbarPreDrawListener = null;
-            }
-            mFloatingActionModeOriginatingView = null;
-        }
-    }
-
-    private ActionMode startActionMode(
-            View originatingView, ActionMode.Callback callback, int type) {
-        ActionMode.Callback2 wrappedCallback = new ActionModeCallback2Wrapper(callback);
-        ActionMode mode = createFloatingActionMode(originatingView, wrappedCallback);
-        if (mode != null && wrappedCallback.onCreateActionMode(mode, mode.getMenu())) {
-            setHandledFloatingActionMode(mode);
-        } else {
-            mode = null;
-        }
-        return mode;
-    }
-
-    private class ActionModeCallback2Wrapper extends ActionMode.Callback2 {
-        private final ActionMode.Callback mWrapped;
-
-        ActionModeCallback2Wrapper(ActionMode.Callback wrapped) {
-            mWrapped = wrapped;
-        }
-
-        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
-            return mWrapped.onCreateActionMode(mode, menu);
-        }
-
-        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
-            requestFitSystemWindows();
-            return mWrapped.onPrepareActionMode(mode, menu);
-        }
-
-        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
-            return mWrapped.onActionItemClicked(mode, item);
-        }
-
-        public void onDestroyActionMode(ActionMode mode) {
-            mWrapped.onDestroyActionMode(mode);
-            if (mode == mFloatingActionMode) {
-                cleanupFloatingActionModeViews();
-                mFloatingActionMode = null;
-            }
-            requestFitSystemWindows();
-        }
-
-        @Override
-        public void onGetContentRect(ActionMode mode, View view, Rect outRect) {
-            if (mWrapped instanceof ActionMode.Callback2) {
-                ((ActionMode.Callback2) mWrapped).onGetContentRect(mode, view, outRect);
-            } else {
-                super.onGetContentRect(mode, view, outRect);
-            }
-        }
-    }
-
-    interface InteractionEventHandler {
-        /**
-         * Returns a result for {@link ViewGroup#dispatchTouchEvent(MotionEvent)} or null to defer
-         * to the super method.
-         */
-        Boolean handleDispatchTouchEvent(MotionEvent ev);
-
-        /**
-         * Called after all dispatching is done.
-         */
-
-        void dispatchTouchEventComplete();
-
-        /**
-         * Returns if the view should intercept the touch event.
-         *
-         * The touch event may still be interecepted if
-         * {@link ViewGroup#onInterceptTouchEvent(MotionEvent)} decides to do so.
-         */
-        boolean shouldInterceptTouchEvent(MotionEvent ev);
-
-        /**
-         * Called when the view decides to intercept the touch event.
-         */
-        void didIntercept(MotionEvent ev);
-
-        boolean handleTouchEvent(MotionEvent ev);
-
-        void didNotHandleTouchEvent(MotionEvent ev);
-
-        boolean interceptMediaKey(KeyEvent event);
-
-        boolean dispatchKeyEvent(KeyEvent event);
-
-        boolean dispatchKeyEventPreIme(KeyEvent event);
-    }
-
-    /**
-     * Minimal window to satisfy FloatingToolbar.
-     */
-    private Window mFakeWindow = new Window(mContext) {
-        @Override
-        public void takeSurface(SurfaceHolder.Callback2 callback) {
-        }
-
-        @Override
-        public void takeInputQueue(InputQueue.Callback callback) {
-        }
-
-        @Override
-        public boolean isFloating() {
-            return false;
-        }
-
-        @Override
-        public void alwaysReadCloseOnTouchAttr() {
-        }
-
-        @Override
-        public void setContentView(@LayoutRes int layoutResID) {
-        }
-
-        @Override
-        public void setContentView(View view) {
-        }
-
-        @Override
-        public void setContentView(View view, ViewGroup.LayoutParams params) {
-        }
-
-        @Override
-        public void addContentView(View view, ViewGroup.LayoutParams params) {
-        }
-
-        @Override
-        public void clearContentView() {
-        }
-
-        @Override
-        public View getCurrentFocus() {
-            return null;
-        }
-
-        @Override
-        public LayoutInflater getLayoutInflater() {
-            return null;
-        }
-
-        @Override
-        public void setTitle(CharSequence title) {
-        }
-
-        @Override
-        public void setTitleColor(@ColorInt int textColor) {
-        }
-
-        @Override
-        public void openPanel(int featureId, KeyEvent event) {
-        }
-
-        @Override
-        public void closePanel(int featureId) {
-        }
-
-        @Override
-        public void togglePanel(int featureId, KeyEvent event) {
-        }
-
-        @Override
-        public void invalidatePanelMenu(int featureId) {
-        }
-
-        @Override
-        public boolean performPanelShortcut(int featureId, int keyCode, KeyEvent event, int flags) {
-            return false;
-        }
-
-        @Override
-        public boolean performPanelIdentifierAction(int featureId, int id, int flags) {
-            return false;
-        }
-
-        @Override
-        public void closeAllPanels() {
-        }
-
-        @Override
-        public boolean performContextMenuIdentifierAction(int id, int flags) {
-            return false;
-        }
-
-        @Override
-        public void onConfigurationChanged(Configuration newConfig) {
-        }
-
-        @Override
-        public void setBackgroundDrawable(Drawable drawable) {
-        }
-
-        @Override
-        public void setFeatureDrawableResource(int featureId, @DrawableRes int resId) {
-        }
-
-        @Override
-        public void setFeatureDrawableUri(int featureId, Uri uri) {
-        }
-
-        @Override
-        public void setFeatureDrawable(int featureId, Drawable drawable) {
-        }
-
-        @Override
-        public void setFeatureDrawableAlpha(int featureId, int alpha) {
-        }
-
-        @Override
-        public void setFeatureInt(int featureId, int value) {
-        }
-
-        @Override
-        public void takeKeyEvents(boolean get) {
-        }
-
-        @Override
-        public boolean superDispatchKeyEvent(KeyEvent event) {
-            return false;
-        }
-
-        @Override
-        public boolean superDispatchKeyShortcutEvent(KeyEvent event) {
-            return false;
-        }
-
-        @Override
-        public boolean superDispatchTouchEvent(MotionEvent event) {
-            return false;
-        }
-
-        @Override
-        public boolean superDispatchTrackballEvent(MotionEvent event) {
-            return false;
-        }
-
-        @Override
-        public boolean superDispatchGenericMotionEvent(MotionEvent event) {
-            return false;
-        }
-
-        @Override
-        public View getDecorView() {
-            return NotificationShadeWindowView.this;
-        }
-
-        @Override
-        public View peekDecorView() {
-            return null;
-        }
-
-        @Override
-        public Bundle saveHierarchyState() {
-            return null;
-        }
-
-        @Override
-        public void restoreHierarchyState(Bundle savedInstanceState) {
-        }
-
-        @Override
-        protected void onActive() {
-        }
-
-        @Override
-        public void setChildDrawable(int featureId, Drawable drawable) {
-        }
-
-        @Override
-        public void setChildInt(int featureId, int value) {
-        }
-
-        @Override
-        public boolean isShortcutKey(int keyCode, KeyEvent event) {
-            return false;
-        }
-
-        @Override
-        public void setVolumeControlStream(int streamType) {
-        }
-
-        @Override
-        public int getVolumeControlStream() {
-            return 0;
-        }
-
-        @Override
-        public int getStatusBarColor() {
-            return 0;
-        }
-
-        @Override
-        public void setStatusBarColor(@ColorInt int color) {
-        }
-
-        @Override
-        public int getNavigationBarColor() {
-            return 0;
-        }
-
-        @Override
-        public void setNavigationBarColor(@ColorInt int color) {
-        }
-
-        @Override
-        public void setDecorCaptionShade(int decorCaptionShade) {
-        }
-
-        @Override
-        public void setResizingCaptionDrawable(Drawable drawable) {
-        }
-
-        @Override
-        public void onMultiWindowModeChanged() {
-        }
-
-        @Override
-        public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
-        }
-
-        @Override
-        public void reportActivityRelaunched() {
-        }
-
-        @Override
-        public WindowInsetsController getInsetsController() {
-            return null;
-        }
-    };
-
-}
-
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java
deleted file mode 100644
index be5b33e..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java
+++ /dev/null
@@ -1,497 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.systemui.statusbar.phone;
-
-import android.app.StatusBarManager;
-import android.hardware.display.AmbientDisplayConfiguration;
-import android.media.AudioManager;
-import android.media.session.MediaSessionLegacyHelper;
-import android.os.SystemClock;
-import android.os.UserHandle;
-import android.provider.Settings;
-import android.util.Log;
-import android.view.GestureDetector;
-import android.view.InputDevice;
-import android.view.KeyEvent;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.keyguard.LockIconViewController;
-import com.android.systemui.R;
-import com.android.systemui.classifier.FalsingCollector;
-import com.android.systemui.dock.DockManager;
-import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
-import com.android.systemui.lowlightclock.LowLightClockController;
-import com.android.systemui.statusbar.DragDownHelper;
-import com.android.systemui.statusbar.LockscreenShadeTransitionController;
-import com.android.systemui.statusbar.NotificationShadeDepthController;
-import com.android.systemui.statusbar.NotificationShadeWindowController;
-import com.android.systemui.statusbar.SysuiStatusBarStateController;
-import com.android.systemui.statusbar.notification.stack.AmbientState;
-import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
-import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
-import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent;
-import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
-import com.android.systemui.statusbar.window.StatusBarWindowStateController;
-import com.android.systemui.tuner.TunerService;
-
-import java.io.PrintWriter;
-import java.util.Optional;
-
-import javax.inject.Inject;
-
-/**
- * Controller for {@link NotificationShadeWindowView}.
- */
-@CentralSurfacesComponent.CentralSurfacesScope
-public class NotificationShadeWindowViewController {
-    private static final String TAG = "NotifShadeWindowVC";
-    private final FalsingCollector mFalsingCollector;
-    private final TunerService mTunerService;
-    private final SysuiStatusBarStateController mStatusBarStateController;
-    private final NotificationShadeWindowView mView;
-    private final NotificationShadeDepthController mDepthController;
-    private final NotificationStackScrollLayoutController mNotificationStackScrollLayoutController;
-    private final LockscreenShadeTransitionController mLockscreenShadeTransitionController;
-    private final LockIconViewController mLockIconViewController;
-    private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
-    private final StatusBarWindowStateController mStatusBarWindowStateController;
-    private final KeyguardUnlockAnimationController mKeyguardUnlockAnimationController;
-    private final AmbientState mAmbientState;
-
-    private GestureDetector mGestureDetector;
-    private View mBrightnessMirror;
-    private boolean mTouchActive;
-    private boolean mTouchCancelled;
-    private boolean mExpandAnimationRunning;
-    private NotificationStackScrollLayout mStackScrollLayout;
-    private PhoneStatusBarViewController mStatusBarViewController;
-    private final CentralSurfaces mService;
-    private final NotificationShadeWindowController mNotificationShadeWindowController;
-    private DragDownHelper mDragDownHelper;
-    private boolean mDoubleTapEnabled;
-    private boolean mSingleTapEnabled;
-    private boolean mExpandingBelowNotch;
-    private final DockManager mDockManager;
-    private final NotificationPanelViewController mNotificationPanelViewController;
-    private final PanelExpansionStateManager mPanelExpansionStateManager;
-    private final Optional<LowLightClockController> mLowLightClockController;
-
-    private boolean mIsTrackingBarGesture = false;
-
-    @Inject
-    public NotificationShadeWindowViewController(
-            LockscreenShadeTransitionController transitionController,
-            FalsingCollector falsingCollector,
-            TunerService tunerService,
-            SysuiStatusBarStateController statusBarStateController,
-            DockManager dockManager,
-            NotificationShadeDepthController depthController,
-            NotificationShadeWindowView notificationShadeWindowView,
-            NotificationPanelViewController notificationPanelViewController,
-            PanelExpansionStateManager panelExpansionStateManager,
-            NotificationStackScrollLayoutController notificationStackScrollLayoutController,
-            StatusBarKeyguardViewManager statusBarKeyguardViewManager,
-            StatusBarWindowStateController statusBarWindowStateController,
-            LockIconViewController lockIconViewController,
-            Optional<LowLightClockController> lowLightClockController,
-            CentralSurfaces centralSurfaces,
-            NotificationShadeWindowController controller,
-            KeyguardUnlockAnimationController keyguardUnlockAnimationController,
-            AmbientState ambientState) {
-        mLockscreenShadeTransitionController = transitionController;
-        mFalsingCollector = falsingCollector;
-        mTunerService = tunerService;
-        mStatusBarStateController = statusBarStateController;
-        mView = notificationShadeWindowView;
-        mDockManager = dockManager;
-        mNotificationPanelViewController = notificationPanelViewController;
-        mPanelExpansionStateManager = panelExpansionStateManager;
-        mDepthController = depthController;
-        mNotificationStackScrollLayoutController = notificationStackScrollLayoutController;
-        mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
-        mStatusBarWindowStateController = statusBarWindowStateController;
-        mLockIconViewController = lockIconViewController;
-        mLowLightClockController = lowLightClockController;
-        mService = centralSurfaces;
-        mNotificationShadeWindowController = controller;
-        mKeyguardUnlockAnimationController = keyguardUnlockAnimationController;
-        mAmbientState = ambientState;
-
-        // This view is not part of the newly inflated expanded status bar.
-        mBrightnessMirror = mView.findViewById(R.id.brightness_mirror_container);
-    }
-
-    /**
-     * @return Location where to place the KeyguardBouncer
-     */
-    public ViewGroup getBouncerContainer() {
-        return mView.findViewById(R.id.keyguard_bouncer_container);
-    }
-
-    /** Inflates the {@link R.layout#status_bar_expanded} layout and sets it up. */
-    public void setupExpandedStatusBar() {
-        mStackScrollLayout = mView.findViewById(R.id.notification_stack_scroller);
-
-        TunerService.Tunable tunable = (key, newValue) -> {
-            AmbientDisplayConfiguration configuration =
-                    new AmbientDisplayConfiguration(mView.getContext());
-            switch (key) {
-                case Settings.Secure.DOZE_DOUBLE_TAP_GESTURE:
-                    mDoubleTapEnabled = configuration.doubleTapGestureEnabled(
-                            UserHandle.USER_CURRENT);
-                    break;
-                case Settings.Secure.DOZE_TAP_SCREEN_GESTURE:
-                    mSingleTapEnabled = configuration.tapGestureEnabled(UserHandle.USER_CURRENT);
-            }
-        };
-        mTunerService.addTunable(tunable,
-                Settings.Secure.DOZE_DOUBLE_TAP_GESTURE,
-                Settings.Secure.DOZE_TAP_SCREEN_GESTURE);
-
-        GestureDetector.SimpleOnGestureListener gestureListener =
-                new GestureDetector.SimpleOnGestureListener() {
-                    @Override
-                    public boolean onSingleTapConfirmed(MotionEvent e) {
-                        if (mSingleTapEnabled && !mDockManager.isDocked()) {
-                            mService.wakeUpIfDozing(
-                                    SystemClock.uptimeMillis(), mView, "SINGLE_TAP");
-                            return true;
-                        }
-                        return false;
-                    }
-
-                    @Override
-                    public boolean onDoubleTap(MotionEvent e) {
-                        if (mDoubleTapEnabled || mSingleTapEnabled) {
-                            mService.wakeUpIfDozing(
-                                    SystemClock.uptimeMillis(), mView, "DOUBLE_TAP");
-                            return true;
-                        }
-                        return false;
-                    }
-                };
-        mGestureDetector = new GestureDetector(mView.getContext(), gestureListener);
-
-        mLowLightClockController.ifPresent(controller -> controller.attachLowLightClockView(mView));
-
-        mView.setInteractionEventHandler(new NotificationShadeWindowView.InteractionEventHandler() {
-            @Override
-            public Boolean handleDispatchTouchEvent(MotionEvent ev) {
-                if (mStatusBarViewController == null) { // Fix for b/192490822
-                    Log.w(TAG, "Ignoring touch while statusBarView not yet set.");
-                    return false;
-                }
-                boolean isDown = ev.getActionMasked() == MotionEvent.ACTION_DOWN;
-                boolean isUp = ev.getActionMasked() == MotionEvent.ACTION_UP;
-                boolean isCancel = ev.getActionMasked() == MotionEvent.ACTION_CANCEL;
-
-                boolean expandingBelowNotch = mExpandingBelowNotch;
-                if (isUp || isCancel) {
-                    mExpandingBelowNotch = false;
-                }
-
-                // Reset manual touch dispatch state here but make sure the UP/CANCEL event still
-                // gets
-                // delivered.
-                if (!isCancel && mService.shouldIgnoreTouch()) {
-                    return false;
-                }
-
-                if (isDown) {
-                    mTouchActive = true;
-                    mTouchCancelled = false;
-                } else if (ev.getActionMasked() == MotionEvent.ACTION_UP
-                        || ev.getActionMasked() == MotionEvent.ACTION_CANCEL) {
-                    mTouchActive = false;
-                }
-                if (mTouchCancelled || mExpandAnimationRunning) {
-                    return false;
-                }
-
-                if (mKeyguardUnlockAnimationController.isPlayingCannedUnlockAnimation()) {
-                    // If the user was sliding their finger across the lock screen,
-                    // we may have been intercepting the touch and forwarding it to the
-                    // UDFPS affordance via mStatusBarKeyguardViewManager.onTouch (see below).
-                    // If this touch ended up unlocking the device, we want to cancel the touch
-                    // immediately, so we don't cause swipe or expand animations afterwards.
-                    cancelCurrentTouch();
-                    return true;
-                }
-
-                mFalsingCollector.onTouchEvent(ev);
-                mGestureDetector.onTouchEvent(ev);
-                mStatusBarKeyguardViewManager.onTouch(ev);
-                if (mBrightnessMirror != null
-                        && mBrightnessMirror.getVisibility() == View.VISIBLE) {
-                    // Disallow new pointers while the brightness mirror is visible. This is so that
-                    // you can't touch anything other than the brightness slider while the mirror is
-                    // showing and the rest of the panel is transparent.
-                    if (ev.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN) {
-                        return false;
-                    }
-                }
-                if (isDown) {
-                    mNotificationStackScrollLayoutController.closeControlsIfOutsideTouch(ev);
-                }
-
-                if (mStatusBarStateController.isDozing()) {
-                    mService.extendDozePulse();
-                }
-                mLockIconViewController.onTouchEvent(
-                        ev,
-                        () -> mService.wakeUpIfDozing(
-                                SystemClock.uptimeMillis(),
-                                mView,
-                                "LOCK_ICON_TOUCH"));
-
-                // In case we start outside of the view bounds (below the status bar), we need to
-                // dispatch
-                // the touch manually as the view system can't accommodate for touches outside of
-                // the
-                // regular view bounds.
-                if (isDown && ev.getY() >= mView.getBottom()) {
-                    mExpandingBelowNotch = true;
-                    expandingBelowNotch = true;
-                }
-                if (expandingBelowNotch) {
-                    return mStatusBarViewController.sendTouchToView(ev);
-                }
-
-                if (!mIsTrackingBarGesture && isDown
-                        && mNotificationPanelViewController.isFullyCollapsed()) {
-                    float x = ev.getRawX();
-                    float y = ev.getRawY();
-                    if (mStatusBarViewController.touchIsWithinView(x, y)) {
-                        if (mStatusBarWindowStateController.windowIsShowing()) {
-                            mIsTrackingBarGesture = true;
-                            return mStatusBarViewController.sendTouchToView(ev);
-                        } else { // it's hidden or hiding, don't send to notification shade.
-                            return true;
-                        }
-                    }
-                } else if (mIsTrackingBarGesture) {
-                    final boolean sendToStatusBar = mStatusBarViewController.sendTouchToView(ev);
-                    if (isUp || isCancel) {
-                        mIsTrackingBarGesture = false;
-                    }
-                    return sendToStatusBar;
-                }
-
-                return null;
-            }
-
-            @Override
-            public void dispatchTouchEventComplete() {
-                mFalsingCollector.onMotionEventComplete();
-            }
-
-            @Override
-            public boolean shouldInterceptTouchEvent(MotionEvent ev) {
-                if (mStatusBarStateController.isDozing() && !mService.isPulsing()
-                        && !mDockManager.isDocked()) {
-                    // Capture all touch events in always-on.
-                    return true;
-                }
-
-                if (mStatusBarKeyguardViewManager.isShowingAlternateAuthOrAnimating()) {
-                    // capture all touches if the alt auth bouncer is showing
-                    return true;
-                }
-
-                if (mLockIconViewController.onInterceptTouchEvent(ev)) {
-                    // immediately return true; don't send the touch to the drag down helper
-                    return true;
-                }
-
-                boolean intercept = false;
-                if (mNotificationPanelViewController.isFullyExpanded()
-                        && mDragDownHelper.isDragDownEnabled()
-                        && !mService.isBouncerShowing()
-                        && !mStatusBarStateController.isDozing()) {
-                    intercept = mDragDownHelper.onInterceptTouchEvent(ev);
-                }
-
-                return intercept;
-
-            }
-
-            @Override
-            public void didIntercept(MotionEvent ev) {
-                MotionEvent cancellation = MotionEvent.obtain(ev);
-                cancellation.setAction(MotionEvent.ACTION_CANCEL);
-                mStackScrollLayout.onInterceptTouchEvent(cancellation);
-                mNotificationPanelViewController.getView().onInterceptTouchEvent(cancellation);
-                cancellation.recycle();
-            }
-
-            @Override
-            public boolean handleTouchEvent(MotionEvent ev) {
-                boolean handled = false;
-                if (mStatusBarStateController.isDozing()) {
-                    handled = !mService.isPulsing();
-                }
-
-                if (mStatusBarKeyguardViewManager.isShowingAlternateAuthOrAnimating()) {
-                    // eat the touch
-                    handled = true;
-                }
-
-                if ((mDragDownHelper.isDragDownEnabled() && !handled)
-                        || mDragDownHelper.isDraggingDown()) {
-                    // we still want to finish our drag down gesture when locking the screen
-                    handled = mDragDownHelper.onTouchEvent(ev);
-                }
-
-                return handled;
-            }
-
-            @Override
-            public void didNotHandleTouchEvent(MotionEvent ev) {
-                final int action = ev.getActionMasked();
-                if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
-                    mService.setInteracting(StatusBarManager.WINDOW_STATUS_BAR, false);
-                }
-            }
-
-            @Override
-            public boolean interceptMediaKey(KeyEvent event) {
-                return mService.interceptMediaKey(event);
-            }
-
-            @Override
-            public boolean dispatchKeyEventPreIme(KeyEvent event) {
-                return mService.dispatchKeyEventPreIme(event);
-            }
-
-            @Override
-            public boolean dispatchKeyEvent(KeyEvent event) {
-                boolean down = event.getAction() == KeyEvent.ACTION_DOWN;
-                switch (event.getKeyCode()) {
-                    case KeyEvent.KEYCODE_BACK:
-                        if (!down) {
-                            mService.onBackPressed();
-                        }
-                        return true;
-                    case KeyEvent.KEYCODE_MENU:
-                        if (!down) {
-                            return mService.onMenuPressed();
-                        }
-                        break;
-                    case KeyEvent.KEYCODE_SPACE:
-                        if (!down) {
-                            return mService.onSpacePressed();
-                        }
-                        break;
-                    case KeyEvent.KEYCODE_VOLUME_DOWN:
-                    case KeyEvent.KEYCODE_VOLUME_UP:
-                        if (mStatusBarStateController.isDozing()) {
-                            MediaSessionLegacyHelper.getHelper(mView.getContext())
-                                    .sendVolumeKeyEvent(
-                                            event, AudioManager.USE_DEFAULT_STREAM_TYPE, true);
-                            return true;
-                        }
-                        break;
-                }
-                return false;
-            }
-        });
-
-        mView.setOnHierarchyChangeListener(new ViewGroup.OnHierarchyChangeListener() {
-            @Override
-            public void onChildViewAdded(View parent, View child) {
-                if (child.getId() == R.id.brightness_mirror_container) {
-                    mBrightnessMirror = child;
-                }
-            }
-
-            @Override
-            public void onChildViewRemoved(View parent, View child) {
-            }
-        });
-
-        setDragDownHelper(mLockscreenShadeTransitionController.getTouchHelper());
-
-        mDepthController.setRoot(mView);
-        mPanelExpansionStateManager.addExpansionListener(mDepthController);
-    }
-
-    public NotificationShadeWindowView getView() {
-        return mView;
-    }
-
-    public void cancelCurrentTouch() {
-        if (mTouchActive) {
-            final long now = SystemClock.uptimeMillis();
-            MotionEvent event = MotionEvent.obtain(now, now,
-                    MotionEvent.ACTION_CANCEL, 0.0f, 0.0f, 0);
-            event.setSource(InputDevice.SOURCE_TOUCHSCREEN);
-            mView.dispatchTouchEvent(event);
-            event.recycle();
-            mTouchCancelled = true;
-        }
-        mAmbientState.setSwipingUp(false);
-    }
-
-    public void dump(PrintWriter pw, String[] args) {
-        pw.print("  mExpandAnimationRunning=");
-        pw.println(mExpandAnimationRunning);
-        pw.print("  mTouchCancelled=");
-        pw.println(mTouchCancelled);
-        pw.print("  mTouchActive=");
-        pw.println(mTouchActive);
-    }
-
-    public void setExpandAnimationRunning(boolean running) {
-        if (mExpandAnimationRunning != running) {
-            mExpandAnimationRunning = running;
-            mNotificationShadeWindowController.setLaunchingActivity(mExpandAnimationRunning);
-        }
-    }
-
-    public void cancelExpandHelper() {
-        if (mStackScrollLayout != null) {
-            mStackScrollLayout.cancelExpandHelper();
-        }
-    }
-
-    public void setStatusBarViewController(PhoneStatusBarViewController statusBarViewController) {
-        mStatusBarViewController = statusBarViewController;
-    }
-
-    /**
-     * Tell the controller that dozing has begun or ended.
-     * @param dozing True if dozing has begun.
-     */
-    public void setDozing(boolean dozing) {
-        mLowLightClockController.ifPresent(controller -> controller.showLowLightClock(dozing));
-    }
-
-    /**
-     * Tell the controller to perform burn-in prevention.
-     */
-    public void dozeTimeTick() {
-        mLowLightClockController.ifPresent(LowLightClockController::dozeTimeTick);
-    }
-
-    @VisibleForTesting
-    void setDragDownHelper(DragDownHelper dragDownHelper) {
-        mDragDownHelper = dragDownHelper;
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQSContainerController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQSContainerController.kt
deleted file mode 100644
index ebedbf9..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQSContainerController.kt
+++ /dev/null
@@ -1,292 +0,0 @@
-package com.android.systemui.statusbar.phone
-
-import android.view.View
-import android.view.ViewGroup
-import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
-import android.view.WindowInsets
-import androidx.annotation.VisibleForTesting
-import androidx.constraintlayout.widget.ConstraintSet
-import androidx.constraintlayout.widget.ConstraintSet.BOTTOM
-import androidx.constraintlayout.widget.ConstraintSet.END
-import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID
-import androidx.constraintlayout.widget.ConstraintSet.START
-import androidx.constraintlayout.widget.ConstraintSet.TOP
-import com.android.systemui.R
-import com.android.systemui.dagger.qualifiers.Main
-import com.android.systemui.flags.FeatureFlags
-import com.android.systemui.flags.Flags
-import com.android.systemui.navigationbar.NavigationModeController
-import com.android.systemui.plugins.qs.QS
-import com.android.systemui.plugins.qs.QSContainerController
-import com.android.systemui.recents.OverviewProxyService
-import com.android.systemui.recents.OverviewProxyService.OverviewProxyListener
-import com.android.systemui.shared.system.QuickStepContract
-import com.android.systemui.util.LargeScreenUtils
-import com.android.systemui.util.ViewController
-import com.android.systemui.util.concurrency.DelayableExecutor
-import java.util.function.Consumer
-import javax.inject.Inject
-import kotlin.reflect.KMutableProperty0
-
-@VisibleForTesting
-internal const val INSET_DEBOUNCE_MILLIS = 500L
-
-class NotificationsQSContainerController @Inject constructor(
-    view: NotificationsQuickSettingsContainer,
-    private val navigationModeController: NavigationModeController,
-    private val overviewProxyService: OverviewProxyService,
-    private val featureFlags: FeatureFlags,
-    @Main private val delayableExecutor: DelayableExecutor
-) : ViewController<NotificationsQuickSettingsContainer>(view), QSContainerController {
-
-    var qsExpanded = false
-        set(value) {
-            if (field != value) {
-                field = value
-                mView.invalidate()
-            }
-        }
-    private var splitShadeEnabled = false
-    private var isQSDetailShowing = false
-    private var isQSCustomizing = false
-    private var isQSCustomizerAnimating = false
-
-    private var largeScreenShadeHeaderHeight = 0
-    private var largeScreenShadeHeaderActive = false
-    private var notificationsBottomMargin = 0
-    private var scrimShadeBottomMargin = 0
-    private var footerActionsOffset = 0
-    private var bottomStableInsets = 0
-    private var bottomCutoutInsets = 0
-    private var panelMarginHorizontal = 0
-    private var topMargin = 0
-
-    private val useCombinedQSHeaders = featureFlags.isEnabled(Flags.COMBINED_QS_HEADERS)
-
-    private var isGestureNavigation = true
-    private var taskbarVisible = false
-    private val taskbarVisibilityListener: OverviewProxyListener = object : OverviewProxyListener {
-        override fun onTaskbarStatusUpdated(visible: Boolean, stashed: Boolean) {
-            taskbarVisible = visible
-        }
-    }
-
-    // With certain configuration changes (like light/dark changes), the nav bar will disappear
-    // for a bit, causing `bottomStableInsets` to be unstable for some time. Debounce the value
-    // for 500ms.
-    // All interactions with this object happen in the main thread.
-    private val delayedInsetSetter = object : Runnable, Consumer<WindowInsets> {
-        private var canceller: Runnable? = null
-        private var stableInsets = 0
-        private var cutoutInsets = 0
-
-        override fun accept(insets: WindowInsets) {
-            // when taskbar is visible, stableInsetBottom will include its height
-            stableInsets = insets.stableInsetBottom
-            cutoutInsets = insets.displayCutout?.safeInsetBottom ?: 0
-            canceller?.run()
-            canceller = delayableExecutor.executeDelayed(this, INSET_DEBOUNCE_MILLIS)
-        }
-
-        override fun run() {
-            bottomStableInsets = stableInsets
-            bottomCutoutInsets = cutoutInsets
-            updateBottomSpacing()
-        }
-    }
-
-    override fun onInit() {
-        val currentMode: Int = navigationModeController.addListener { mode: Int ->
-            isGestureNavigation = QuickStepContract.isGesturalMode(mode)
-        }
-        isGestureNavigation = QuickStepContract.isGesturalMode(currentMode)
-    }
-
-    public override fun onViewAttached() {
-        updateResources()
-        overviewProxyService.addCallback(taskbarVisibilityListener)
-        mView.setInsetsChangedListener(delayedInsetSetter)
-        mView.setQSFragmentAttachedListener { qs: QS -> qs.setContainerController(this) }
-        mView.setConfigurationChangedListener { updateResources() }
-    }
-
-    override fun onViewDetached() {
-        overviewProxyService.removeCallback(taskbarVisibilityListener)
-        mView.removeOnInsetsChangedListener()
-        mView.removeQSFragmentAttachedListener()
-        mView.setConfigurationChangedListener(null)
-    }
-
-    fun updateResources() {
-        val newSplitShadeEnabled = LargeScreenUtils.shouldUseSplitNotificationShade(resources)
-        val splitShadeEnabledChanged = newSplitShadeEnabled != splitShadeEnabled
-        splitShadeEnabled = newSplitShadeEnabled
-        largeScreenShadeHeaderActive = LargeScreenUtils.shouldUseLargeScreenShadeHeader(resources)
-        notificationsBottomMargin = resources.getDimensionPixelSize(
-                R.dimen.notification_panel_margin_bottom)
-        largeScreenShadeHeaderHeight =
-                resources.getDimensionPixelSize(R.dimen.large_screen_shade_header_height)
-        panelMarginHorizontal = resources.getDimensionPixelSize(
-                R.dimen.notification_panel_margin_horizontal)
-        topMargin = if (largeScreenShadeHeaderActive) {
-            largeScreenShadeHeaderHeight
-        } else {
-            resources.getDimensionPixelSize(R.dimen.notification_panel_margin_top)
-        }
-        updateConstraints()
-
-        val scrimMarginChanged = ::scrimShadeBottomMargin.setAndReportChange(
-            resources.getDimensionPixelSize(R.dimen.split_shade_notifications_scrim_margin_bottom)
-        )
-        val footerOffsetChanged = ::footerActionsOffset.setAndReportChange(
-            resources.getDimensionPixelSize(R.dimen.qs_footer_action_inset) +
-                resources.getDimensionPixelSize(R.dimen.qs_footer_actions_bottom_padding)
-        )
-        val dimensChanged = scrimMarginChanged || footerOffsetChanged
-
-        if (splitShadeEnabledChanged || dimensChanged) {
-            updateBottomSpacing()
-        }
-    }
-
-    override fun setCustomizerAnimating(animating: Boolean) {
-        if (isQSCustomizerAnimating != animating) {
-            isQSCustomizerAnimating = animating
-            mView.invalidate()
-        }
-    }
-
-    override fun setCustomizerShowing(showing: Boolean) {
-        isQSCustomizing = showing
-        updateBottomSpacing()
-    }
-
-    override fun setDetailShowing(showing: Boolean) {
-        isQSDetailShowing = showing
-        updateBottomSpacing()
-    }
-
-    private fun updateBottomSpacing() {
-        val (containerPadding, notificationsMargin, qsContainerPadding) = calculateBottomSpacing()
-        mView.setPadding(0, 0, 0, containerPadding)
-        mView.setNotificationsMarginBottom(notificationsMargin)
-        mView.setQSContainerPaddingBottom(qsContainerPadding)
-    }
-
-    private fun calculateBottomSpacing(): Paddings {
-        val containerPadding: Int
-        var stackScrollMargin = notificationsBottomMargin
-        if (splitShadeEnabled) {
-            if (isGestureNavigation) {
-                // only default cutout padding, taskbar always hides
-                containerPadding = bottomCutoutInsets
-            } else if (taskbarVisible) {
-                // navigation buttons + visible taskbar means we're NOT on homescreen
-                containerPadding = bottomStableInsets
-            } else {
-                // navigation buttons + hidden taskbar means we're on homescreen
-                containerPadding = 0
-                // we need extra margin for notifications as navigation buttons are below them
-                stackScrollMargin = bottomStableInsets + notificationsBottomMargin
-            }
-        } else {
-            if (isQSCustomizing || isQSDetailShowing) {
-                // Clear out bottom paddings/margins so the qs customization can be full height.
-                containerPadding = 0
-                stackScrollMargin = 0
-            } else if (isGestureNavigation) {
-                containerPadding = bottomCutoutInsets
-            } else if (taskbarVisible) {
-                containerPadding = bottomStableInsets
-            } else {
-                containerPadding = 0
-                stackScrollMargin = bottomStableInsets + notificationsBottomMargin
-            }
-        }
-        val qsContainerPadding = if (!(isQSCustomizing || isQSDetailShowing)) {
-            // We also want this padding in the bottom in these cases
-            if (splitShadeEnabled) {
-                stackScrollMargin - scrimShadeBottomMargin - footerActionsOffset
-            } else {
-                bottomStableInsets
-            }
-        } else {
-            0
-        }
-        return Paddings(containerPadding, stackScrollMargin, qsContainerPadding)
-    }
-
-    fun updateConstraints() {
-        // To change the constraints at runtime, all children of the ConstraintLayout must have ids
-        ensureAllViewsHaveIds(mView)
-        val constraintSet = ConstraintSet()
-        constraintSet.clone(mView)
-        setKeyguardStatusViewConstraints(constraintSet)
-        setQsConstraints(constraintSet)
-        setNotificationsConstraints(constraintSet)
-        setLargeScreenShadeHeaderConstraints(constraintSet)
-        mView.applyConstraints(constraintSet)
-    }
-
-    private fun setLargeScreenShadeHeaderConstraints(constraintSet: ConstraintSet) {
-        if (largeScreenShadeHeaderActive) {
-            constraintSet.constrainHeight(R.id.split_shade_status_bar, largeScreenShadeHeaderHeight)
-        } else {
-            if (useCombinedQSHeaders) {
-                constraintSet.constrainHeight(R.id.split_shade_status_bar, WRAP_CONTENT)
-            }
-        }
-    }
-
-    private fun setNotificationsConstraints(constraintSet: ConstraintSet) {
-        val startConstraintId = if (splitShadeEnabled) R.id.qs_edge_guideline else PARENT_ID
-        constraintSet.apply {
-            connect(R.id.notification_stack_scroller, START, startConstraintId, START)
-            setMargin(R.id.notification_stack_scroller, START,
-                    if (splitShadeEnabled) 0 else panelMarginHorizontal)
-            setMargin(R.id.notification_stack_scroller, END, panelMarginHorizontal)
-            setMargin(R.id.notification_stack_scroller, TOP, topMargin)
-            setMargin(R.id.notification_stack_scroller, BOTTOM, notificationsBottomMargin)
-        }
-    }
-
-    private fun setQsConstraints(constraintSet: ConstraintSet) {
-        val endConstraintId = if (splitShadeEnabled) R.id.qs_edge_guideline else PARENT_ID
-        constraintSet.apply {
-            connect(R.id.qs_frame, END, endConstraintId, END)
-            setMargin(R.id.qs_frame, START, if (splitShadeEnabled) 0 else panelMarginHorizontal)
-            setMargin(R.id.qs_frame, END, if (splitShadeEnabled) 0 else panelMarginHorizontal)
-            setMargin(R.id.qs_frame, TOP, topMargin)
-        }
-    }
-
-    private fun setKeyguardStatusViewConstraints(constraintSet: ConstraintSet) {
-        val statusViewMarginHorizontal = resources.getDimensionPixelSize(
-                R.dimen.status_view_margin_horizontal)
-        constraintSet.apply {
-            setMargin(R.id.keyguard_status_view, START, statusViewMarginHorizontal)
-            setMargin(R.id.keyguard_status_view, END, statusViewMarginHorizontal)
-        }
-    }
-
-    private fun ensureAllViewsHaveIds(parentView: ViewGroup) {
-        for (i in 0 until parentView.childCount) {
-            val childView = parentView.getChildAt(i)
-            if (childView.id == View.NO_ID) {
-                childView.id = View.generateViewId()
-            }
-        }
-    }
-}
-
-private data class Paddings(
-    val containerPadding: Int,
-    val notificationsMargin: Int,
-    val qsContainerPadding: Int
-)
-
-private fun KMutableProperty0<Int>.setAndReportChange(newValue: Int): Boolean {
-    val oldValue = get()
-    set(newValue)
-    return oldValue != newValue
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java
deleted file mode 100644
index 2446cf7..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 android.app.Fragment;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.graphics.Canvas;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.WindowInsets;
-
-import androidx.annotation.Nullable;
-import androidx.constraintlayout.widget.ConstraintLayout;
-import androidx.constraintlayout.widget.ConstraintSet;
-
-import com.android.systemui.R;
-import com.android.systemui.fragments.FragmentHostManager;
-import com.android.systemui.fragments.FragmentHostManager.FragmentListener;
-import com.android.systemui.plugins.qs.QS;
-import com.android.systemui.statusbar.notification.AboveShelfObserver;
-
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.function.Consumer;
-
-/**
- * The container with notification stack scroller and quick settings inside.
- */
-public class NotificationsQuickSettingsContainer extends ConstraintLayout
-        implements FragmentListener, AboveShelfObserver.HasViewAboveShelfChangedListener {
-
-    private View mQsFrame;
-    private View mStackScroller;
-    private View mKeyguardStatusBar;
-
-    private ArrayList<View> mDrawingOrderedChildren = new ArrayList<>();
-    private ArrayList<View> mLayoutDrawingOrder = new ArrayList<>();
-    private final Comparator<View> mIndexComparator = Comparator.comparingInt(this::indexOfChild);
-    private Consumer<WindowInsets> mInsetsChangedListener = insets -> {};
-    private Consumer<QS> mQSFragmentAttachedListener = qs -> {};
-    private QS mQs;
-    private View mQSScrollView;
-    private View mQSContainer;
-
-    @Nullable
-    private Consumer<Configuration> mConfigurationChangedListener;
-
-    public NotificationsQuickSettingsContainer(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-        mQsFrame = findViewById(R.id.qs_frame);
-        mStackScroller = findViewById(R.id.notification_stack_scroller);
-        mKeyguardStatusBar = findViewById(R.id.keyguard_header);
-    }
-
-    @Override
-    public void onFragmentViewCreated(String tag, Fragment fragment) {
-        mQs = (QS) fragment;
-        mQSFragmentAttachedListener.accept(mQs);
-        mQSScrollView = mQs.getView().findViewById(R.id.expanded_qs_scroll_view);
-        mQSContainer = mQs.getView().findViewById(R.id.quick_settings_container);
-    }
-
-    @Override
-    public void onHasViewsAboveShelfChanged(boolean hasViewsAboveShelf) {
-        invalidate();
-    }
-
-    @Override
-    protected void onConfigurationChanged(Configuration newConfig) {
-        super.onConfigurationChanged(newConfig);
-        if (mConfigurationChangedListener != null) {
-            mConfigurationChangedListener.accept(newConfig);
-        }
-    }
-
-    public void setConfigurationChangedListener(Consumer<Configuration> listener) {
-        mConfigurationChangedListener = listener;
-    }
-
-    public void setNotificationsMarginBottom(int margin) {
-        LayoutParams params = (LayoutParams) mStackScroller.getLayoutParams();
-        params.bottomMargin = margin;
-        mStackScroller.setLayoutParams(params);
-    }
-
-    public void setQSContainerPaddingBottom(int paddingBottom) {
-        if (mQSContainer != null) {
-            mQSContainer.setPadding(
-                    mQSContainer.getPaddingLeft(),
-                    mQSContainer.getPaddingTop(),
-                    mQSContainer.getPaddingRight(),
-                    paddingBottom
-            );
-        }
-    }
-
-    public void setInsetsChangedListener(Consumer<WindowInsets> onInsetsChangedListener) {
-        mInsetsChangedListener = onInsetsChangedListener;
-    }
-
-    public void removeOnInsetsChangedListener() {
-        mInsetsChangedListener = insets -> {};
-    }
-
-    public void setQSFragmentAttachedListener(Consumer<QS> qsFragmentAttachedListener) {
-        mQSFragmentAttachedListener = qsFragmentAttachedListener;
-        // listener might be attached after fragment is attached
-        if (mQs != null) {
-            mQSFragmentAttachedListener.accept(mQs);
-        }
-    }
-
-    public void removeQSFragmentAttachedListener() {
-        mQSFragmentAttachedListener = qs -> {};
-    }
-
-    @Override
-    protected void onAttachedToWindow() {
-        super.onAttachedToWindow();
-        FragmentHostManager.get(this).addTagListener(QS.TAG, this);
-    }
-
-    @Override
-    protected void onDetachedFromWindow() {
-        super.onDetachedFromWindow();
-        FragmentHostManager.get(this).removeTagListener(QS.TAG, this);
-    }
-
-    @Override
-    public WindowInsets onApplyWindowInsets(WindowInsets insets) {
-        mInsetsChangedListener.accept(insets);
-        return insets;
-    }
-
-    @Override
-    protected void dispatchDraw(Canvas canvas) {
-        mDrawingOrderedChildren.clear();
-        mLayoutDrawingOrder.clear();
-        if (mKeyguardStatusBar.getVisibility() == View.VISIBLE) {
-            mDrawingOrderedChildren.add(mKeyguardStatusBar);
-            mLayoutDrawingOrder.add(mKeyguardStatusBar);
-        }
-        if (mQsFrame.getVisibility() == View.VISIBLE) {
-            mDrawingOrderedChildren.add(mQsFrame);
-            mLayoutDrawingOrder.add(mQsFrame);
-        }
-        if (mStackScroller.getVisibility() == View.VISIBLE) {
-            mDrawingOrderedChildren.add(mStackScroller);
-            mLayoutDrawingOrder.add(mStackScroller);
-        }
-
-        // Let's now find the order that the view has when drawing regularly by sorting
-        mLayoutDrawingOrder.sort(mIndexComparator);
-        super.dispatchDraw(canvas);
-    }
-
-    @Override
-    protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
-        int layoutIndex = mLayoutDrawingOrder.indexOf(child);
-        if (layoutIndex >= 0) {
-            return super.drawChild(canvas, mDrawingOrderedChildren.get(layoutIndex), drawingTime);
-        } else {
-            return super.drawChild(canvas, child, drawingTime);
-        }
-    }
-
-    public void applyConstraints(ConstraintSet constraintSet) {
-        constraintSet.applyTo(this);
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/OWNERS b/packages/SystemUI/src/com/android/systemui/statusbar/phone/OWNERS
new file mode 100644
index 0000000..4657e9b
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/OWNERS
@@ -0,0 +1,6 @@
+per-file *Notification* = set noparent
+per-file *Notification* = file:../notification/OWNERS
+
+per-file NotificationIcon* = ccassidy@google.com, evanlaird@google.com, pixel@google.com
+
+per-file NotificationShadeWindowControllerImpl.java = dupin@google.com, cinek@google.com, beverlyt@google.com, pixel@google.com, juliacr@google.com
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
deleted file mode 100644
index 45dc943..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.statusbar.phone;
-
-import android.content.Context;
-import android.content.res.Configuration;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.widget.FrameLayout;
-
-public abstract class PanelView extends FrameLayout {
-    public static final boolean DEBUG = false;
-    public static final String TAG = PanelView.class.getSimpleName();
-    private PanelViewController.TouchHandler mTouchHandler;
-
-    protected CentralSurfaces mCentralSurfaces;
-    protected HeadsUpManagerPhone mHeadsUpManager;
-
-    protected KeyguardBottomAreaView mKeyguardBottomArea;
-    private OnConfigurationChangedListener mOnConfigurationChangedListener;
-
-    public PanelView(Context context) {
-        super(context);
-    }
-
-    public PanelView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    public PanelView(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-    }
-
-    public PanelView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
-        super(context, attrs, defStyleAttr, defStyleRes);
-    }
-
-    public void setOnTouchListener(PanelViewController.TouchHandler touchHandler) {
-        super.setOnTouchListener(touchHandler);
-        mTouchHandler = touchHandler;
-    }
-
-    public void setOnConfigurationChangedListener(OnConfigurationChangedListener listener) {
-        mOnConfigurationChangedListener = listener;
-    }
-
-    @Override
-    public boolean onInterceptTouchEvent(MotionEvent event) {
-        return mTouchHandler.onInterceptTouchEvent(event);
-    }
-
-    @Override
-    public void dispatchConfigurationChanged(Configuration newConfig) {
-        super.dispatchConfigurationChanged(newConfig);
-        mOnConfigurationChangedListener.onConfigurationChanged(newConfig);
-    }
-
-    interface OnConfigurationChangedListener {
-        void onConfigurationChanged(Configuration newConfig);
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java
deleted file mode 100644
index 3d3e6ed..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java
+++ /dev/null
@@ -1,1483 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.systemui.statusbar.phone;
-
-import static android.view.View.INVISIBLE;
-import static android.view.View.VISIBLE;
-
-import static com.android.internal.jank.InteractionJankMonitor.CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE;
-import static com.android.systemui.classifier.Classifier.BOUNCER_UNLOCK;
-import static com.android.systemui.classifier.Classifier.GENERIC;
-import static com.android.systemui.classifier.Classifier.QUICK_SETTINGS;
-import static com.android.systemui.classifier.Classifier.UNLOCK;
-
-import static java.lang.Float.isNaN;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.os.VibrationEffect;
-import android.util.Log;
-import android.util.MathUtils;
-import android.view.InputDevice;
-import android.view.MotionEvent;
-import android.view.VelocityTracker;
-import android.view.View;
-import android.view.ViewConfiguration;
-import android.view.ViewGroup;
-import android.view.ViewTreeObserver;
-import android.view.animation.Interpolator;
-
-import com.android.internal.jank.InteractionJankMonitor;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.internal.util.LatencyTracker;
-import com.android.systemui.DejankUtils;
-import com.android.systemui.R;
-import com.android.systemui.animation.Interpolators;
-import com.android.systemui.classifier.Classifier;
-import com.android.systemui.doze.DozeLog;
-import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
-import com.android.systemui.plugins.FalsingManager;
-import com.android.systemui.statusbar.NotificationShadeWindowController;
-import com.android.systemui.statusbar.StatusBarState;
-import com.android.systemui.statusbar.SysuiStatusBarStateController;
-import com.android.systemui.statusbar.VibratorHelper;
-import com.android.systemui.statusbar.notification.stack.AmbientState;
-import com.android.systemui.statusbar.phone.LockscreenGestureLogger.LockscreenUiEvent;
-import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
-import com.android.systemui.statusbar.policy.KeyguardStateController;
-import com.android.systemui.util.time.SystemClock;
-import com.android.wm.shell.animation.FlingAnimationUtils;
-
-import java.io.PrintWriter;
-
-public abstract class PanelViewController {
-    public static final boolean DEBUG = PanelView.DEBUG;
-    public static final String TAG = PanelView.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;
-    private static final int NO_FIXED_DURATION = -1;
-    private static final long SHADE_OPEN_SPRING_OUT_DURATION = 350L;
-    private static final long SHADE_OPEN_SPRING_BACK_DURATION = 400L;
-
-    /**
-     * The factor of the usual high velocity that is needed in order to reach the maximum overshoot
-     * when flinging. A low value will make it that most flings will reach the maximum overshoot.
-     */
-    private static final float FACTOR_OF_HIGH_VELOCITY_FOR_MAX_OVERSHOOT = 0.5f;
-
-    protected long mDownTime;
-    protected boolean mTouchSlopExceededBeforeDown;
-    private float mMinExpandHeight;
-    private boolean mPanelUpdateWhenAnimatorEnds;
-    private boolean mVibrateOnOpening;
-    protected boolean mIsLaunchAnimationRunning;
-    private int mFixedDuration = NO_FIXED_DURATION;
-    protected float mOverExpansion;
-
-    /**
-     * The overshoot amount when the panel flings open
-     */
-    private float mPanelFlingOvershootAmount;
-
-    /**
-     * The amount of pixels that we have overexpanded the last time with a gesture
-     */
-    private float mLastGesturedOverExpansion = -1;
-
-    /**
-     * Is the current animator the spring back animation?
-     */
-    private boolean mIsSpringBackAnimation;
-
-    private boolean mInSplitShade;
-
-    private void logf(String fmt, Object... args) {
-        Log.v(TAG, (mViewName != null ? (mViewName + ": ") : "") + String.format(fmt, args));
-    }
-
-    protected CentralSurfaces mCentralSurfaces;
-    protected HeadsUpManagerPhone mHeadsUpManager;
-    protected final StatusBarTouchableRegionManager mStatusBarTouchableRegionManager;
-
-    private float mHintDistance;
-    private float mInitialOffsetOnTouch;
-    private boolean mCollapsedAndHeadsUpOnDown;
-    private float mExpandedFraction = 0;
-    private float mExpansionDragDownAmountPx = 0;
-    protected float mExpandedHeight = 0;
-    private boolean mPanelClosedOnDown;
-    private boolean mHasLayoutedSinceDown;
-    private float mUpdateFlingVelocity;
-    private boolean mUpdateFlingOnLayout;
-    private boolean mClosing;
-    protected boolean mTracking;
-    private boolean mTouchSlopExceeded;
-    private int mTrackingPointer;
-    private int mTouchSlop;
-    private float mSlopMultiplier;
-    protected boolean mHintAnimationRunning;
-    private boolean mOverExpandedBeforeFling;
-    private boolean mTouchAboveFalsingThreshold;
-    private int mUnlockFalsingThreshold;
-    private boolean mTouchStartedInEmptyArea;
-    private boolean mMotionAborted;
-    private boolean mUpwardsWhenThresholdReached;
-    private boolean mAnimatingOnDown;
-    private boolean mHandlingPointerUp;
-
-    private ValueAnimator mHeightAnimator;
-    private final VelocityTracker mVelocityTracker = VelocityTracker.obtain();
-    private FlingAnimationUtils mFlingAnimationUtils;
-    private FlingAnimationUtils mFlingAnimationUtilsClosing;
-    private FlingAnimationUtils mFlingAnimationUtilsDismissing;
-    private final LatencyTracker mLatencyTracker;
-    private final FalsingManager mFalsingManager;
-    private final DozeLog mDozeLog;
-    private final VibratorHelper mVibratorHelper;
-
-    /**
-     * Whether an instant expand request is currently pending and we are just waiting for layout.
-     */
-    private boolean mInstantExpanding;
-    private boolean mAnimateAfterExpanding;
-    private boolean mIsFlinging;
-
-    private String mViewName;
-    private float mInitialTouchY;
-    private float mInitialTouchX;
-    private boolean mTouchDisabled;
-    private boolean mInitialTouchFromKeyguard;
-
-    /**
-     * Whether or not the PanelView can be expanded or collapsed with a drag.
-     */
-    private boolean mNotificationsDragEnabled;
-
-    private Interpolator mBounceInterpolator;
-    protected KeyguardBottomAreaView mKeyguardBottomArea;
-
-    /**
-     * Speed-up factor to be used when {@link #mFlingCollapseRunnable} runs the next time.
-     */
-    private float mNextCollapseSpeedUpFactor = 1.0f;
-
-    protected boolean mExpanding;
-    private boolean mGestureWaitForTouchSlop;
-    private boolean mIgnoreXTouchSlop;
-    private boolean mExpandLatencyTracking;
-    private final PanelView mView;
-    private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
-    private final NotificationShadeWindowController mNotificationShadeWindowController;
-    protected final Resources mResources;
-    protected final KeyguardStateController mKeyguardStateController;
-    protected final SysuiStatusBarStateController mStatusBarStateController;
-    protected final AmbientState mAmbientState;
-    protected final LockscreenGestureLogger mLockscreenGestureLogger;
-    private final PanelExpansionStateManager mPanelExpansionStateManager;
-    private final TouchHandler mTouchHandler;
-    private final InteractionJankMonitor mInteractionJankMonitor;
-    protected final SystemClock mSystemClock;
-
-    protected abstract void onExpandingFinished();
-
-    protected void onExpandingStarted() {
-    }
-
-    protected void notifyExpandingStarted() {
-        if (!mExpanding) {
-            mExpanding = true;
-            onExpandingStarted();
-        }
-    }
-
-    protected final void notifyExpandingFinished() {
-        endClosing();
-        if (mExpanding) {
-            mExpanding = false;
-            onExpandingFinished();
-        }
-    }
-
-    protected AmbientState getAmbientState() {
-        return mAmbientState;
-    }
-
-    private KeyguardUnlockAnimationController mKeyguardUnlockAnimationController;
-
-    public PanelViewController(
-            PanelView view,
-            FalsingManager falsingManager,
-            DozeLog dozeLog,
-            KeyguardStateController keyguardStateController,
-            SysuiStatusBarStateController statusBarStateController,
-            NotificationShadeWindowController notificationShadeWindowController,
-            VibratorHelper vibratorHelper,
-            StatusBarKeyguardViewManager statusBarKeyguardViewManager,
-            LatencyTracker latencyTracker,
-            FlingAnimationUtils.Builder flingAnimationUtilsBuilder,
-            StatusBarTouchableRegionManager statusBarTouchableRegionManager,
-            LockscreenGestureLogger lockscreenGestureLogger,
-            PanelExpansionStateManager panelExpansionStateManager,
-            AmbientState ambientState,
-            InteractionJankMonitor interactionJankMonitor,
-            KeyguardUnlockAnimationController keyguardUnlockAnimationController,
-            SystemClock systemClock) {
-        mKeyguardUnlockAnimationController = keyguardUnlockAnimationController;
-        keyguardStateController.addCallback(new KeyguardStateController.Callback() {
-            @Override
-            public void onKeyguardFadingAwayChanged() {
-                requestPanelHeightUpdate();
-            }
-        });
-        mAmbientState = ambientState;
-        mView = view;
-        mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
-        mLockscreenGestureLogger = lockscreenGestureLogger;
-        mPanelExpansionStateManager = panelExpansionStateManager;
-        mTouchHandler = createTouchHandler();
-        mView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
-            @Override
-            public void onViewAttachedToWindow(View v) {
-                mViewName = mResources.getResourceName(mView.getId());
-            }
-
-            @Override
-            public void onViewDetachedFromWindow(View v) {
-            }
-        });
-
-        mView.addOnLayoutChangeListener(createLayoutChangeListener());
-        mView.setOnTouchListener(mTouchHandler);
-        mView.setOnConfigurationChangedListener(createOnConfigurationChangedListener());
-
-        mResources = mView.getResources();
-        mKeyguardStateController = keyguardStateController;
-        mStatusBarStateController = statusBarStateController;
-        mNotificationShadeWindowController = notificationShadeWindowController;
-        mFlingAnimationUtils = flingAnimationUtilsBuilder
-                .reset()
-                .setMaxLengthSeconds(FLING_MAX_LENGTH_SECONDS)
-                .setSpeedUpFactor(FLING_SPEED_UP_FACTOR)
-                .build();
-        mFlingAnimationUtilsClosing = flingAnimationUtilsBuilder
-                .reset()
-                .setMaxLengthSeconds(FLING_CLOSING_MAX_LENGTH_SECONDS)
-                .setSpeedUpFactor(FLING_CLOSING_SPEED_UP_FACTOR)
-                .build();
-        mFlingAnimationUtilsDismissing = flingAnimationUtilsBuilder
-                .reset()
-                .setMaxLengthSeconds(0.5f)
-                .setSpeedUpFactor(0.6f)
-                .setX2(0.6f)
-                .setY2(0.84f)
-                .build();
-        mLatencyTracker = latencyTracker;
-        mBounceInterpolator = new BounceInterpolator();
-        mFalsingManager = falsingManager;
-        mDozeLog = dozeLog;
-        mNotificationsDragEnabled = mResources.getBoolean(
-                R.bool.config_enableNotificationShadeDrag);
-        mVibratorHelper = vibratorHelper;
-        mVibrateOnOpening = mResources.getBoolean(R.bool.config_vibrateOnIconAnimation);
-        mStatusBarTouchableRegionManager = statusBarTouchableRegionManager;
-        mInteractionJankMonitor = interactionJankMonitor;
-        mSystemClock = systemClock;
-    }
-
-    protected void loadDimens() {
-        final ViewConfiguration configuration = ViewConfiguration.get(mView.getContext());
-        mTouchSlop = configuration.getScaledTouchSlop();
-        mSlopMultiplier = configuration.getScaledAmbiguousGestureMultiplier();
-        mHintDistance = mResources.getDimension(R.dimen.hint_move_distance);
-        mPanelFlingOvershootAmount = mResources.getDimension(R.dimen.panel_overshoot_amount);
-        mUnlockFalsingThreshold =
-                mResources.getDimensionPixelSize(R.dimen.unlock_falsing_threshold);
-        mInSplitShade = mResources.getBoolean(R.bool.config_use_split_notification_shade);
-    }
-
-    protected float getTouchSlop(MotionEvent event) {
-        // Adjust the touch slop if another gesture may be being performed.
-        return event.getClassification() == MotionEvent.CLASSIFICATION_AMBIGUOUS_GESTURE
-                ? mTouchSlop * mSlopMultiplier
-                : mTouchSlop;
-    }
-
-    private void addMovement(MotionEvent event) {
-        // Add movement to velocity tracker using raw screen X and Y coordinates instead
-        // of window coordinates because the window frame may be moving at the same time.
-        float deltaX = event.getRawX() - event.getX();
-        float deltaY = event.getRawY() - event.getY();
-        event.offsetLocation(deltaX, deltaY);
-        mVelocityTracker.addMovement(event);
-        event.offsetLocation(-deltaX, -deltaY);
-    }
-
-    public void setTouchAndAnimationDisabled(boolean disabled) {
-        mTouchDisabled = disabled;
-        if (mTouchDisabled) {
-            cancelHeightAnimator();
-            if (mTracking) {
-                onTrackingStopped(true /* expanded */);
-            }
-            notifyExpandingFinished();
-        }
-    }
-
-    public void startExpandLatencyTracking() {
-        if (mLatencyTracker.isEnabled()) {
-            mLatencyTracker.onActionStart(LatencyTracker.ACTION_EXPAND_PANEL);
-            mExpandLatencyTracking = true;
-        }
-    }
-
-    private void startOpening(MotionEvent event) {
-        updatePanelExpansionAndVisibility();
-        maybeVibrateOnOpening();
-
-        //TODO: keyguard opens QS a different way; log that too?
-
-        // Log the position of the swipe that opened the panel
-        float width = mCentralSurfaces.getDisplayWidth();
-        float height = mCentralSurfaces.getDisplayHeight();
-        int rot = mCentralSurfaces.getRotation();
-
-        mLockscreenGestureLogger.writeAtFractionalPosition(MetricsEvent.ACTION_PANEL_VIEW_EXPAND,
-                (int) (event.getX() / width * 100), (int) (event.getY() / height * 100), rot);
-        mLockscreenGestureLogger
-                .log(LockscreenUiEvent.LOCKSCREEN_UNLOCKED_NOTIFICATION_PANEL_EXPAND);
-    }
-
-    protected void maybeVibrateOnOpening() {
-        if (mVibrateOnOpening) {
-            mVibratorHelper.vibrate(VibrationEffect.EFFECT_TICK);
-        }
-    }
-
-    protected abstract float getOpeningHeight();
-
-    /**
-     * @return whether the swiping direction is upwards and above a 45 degree angle compared to the
-     * horizontal direction
-     */
-    private boolean isDirectionUpwards(float x, float y) {
-        float xDiff = x - mInitialTouchX;
-        float yDiff = y - mInitialTouchY;
-        if (yDiff >= 0) {
-            return false;
-        }
-        return Math.abs(yDiff) >= Math.abs(xDiff);
-    }
-
-    protected void startExpandMotion(float newX, float newY, boolean startTracking,
-            float expandedHeight) {
-        if (!mHandlingPointerUp && !mStatusBarStateController.isDozing()) {
-            beginJankMonitoring(CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE);
-        }
-        mInitialOffsetOnTouch = expandedHeight;
-        mInitialTouchY = newY;
-        mInitialTouchX = newX;
-        mInitialTouchFromKeyguard = mStatusBarStateController.getState() == StatusBarState.KEYGUARD;
-        if (startTracking) {
-            mTouchSlopExceeded = true;
-            setExpandedHeight(mInitialOffsetOnTouch);
-            onTrackingStarted();
-        }
-    }
-
-    private void endMotionEvent(MotionEvent event, float x, float y, boolean forceCancel) {
-        mTrackingPointer = -1;
-        mAmbientState.setSwipingUp(false);
-        if ((mTracking && mTouchSlopExceeded) || Math.abs(x - mInitialTouchX) > mTouchSlop
-                || Math.abs(y - mInitialTouchY) > mTouchSlop
-                || event.getActionMasked() == MotionEvent.ACTION_CANCEL || forceCancel) {
-            mVelocityTracker.computeCurrentVelocity(1000);
-            float vel = mVelocityTracker.getYVelocity();
-            float vectorVel = (float) Math.hypot(
-                    mVelocityTracker.getXVelocity(), mVelocityTracker.getYVelocity());
-
-            final boolean onKeyguard =
-                    mStatusBarStateController.getState() == StatusBarState.KEYGUARD;
-
-            final boolean expand;
-            if (mKeyguardStateController.isKeyguardFadingAway()
-                    || (mInitialTouchFromKeyguard && !onKeyguard)) {
-                // Don't expand for any touches that started from the keyguard and ended after the
-                // keyguard is gone.
-                expand = false;
-            } else if (event.getActionMasked() == MotionEvent.ACTION_CANCEL || forceCancel) {
-                if (onKeyguard) {
-                    expand = true;
-                } else {
-                    // If we get a cancel, put the shade back to the state it was in when the
-                    // gesture started
-                    expand = !mPanelClosedOnDown;
-                }
-            } else {
-                expand = flingExpands(vel, vectorVel, x, y);
-            }
-            mDozeLog.traceFling(expand, mTouchAboveFalsingThreshold,
-                    mCentralSurfaces.isFalsingThresholdNeeded(),
-                    mCentralSurfaces.isWakeUpComingFromTouch());
-            // Log collapse gesture if on lock screen.
-            if (!expand && onKeyguard) {
-                float displayDensity = mCentralSurfaces.getDisplayDensity();
-                int heightDp = (int) Math.abs((y - mInitialTouchY) / displayDensity);
-                int velocityDp = (int) Math.abs(vel / displayDensity);
-                mLockscreenGestureLogger.write(MetricsEvent.ACTION_LS_UNLOCK, heightDp, velocityDp);
-                mLockscreenGestureLogger.log(LockscreenUiEvent.LOCKSCREEN_UNLOCK);
-            }
-            @Classifier.InteractionType int interactionType = vel == 0 ? GENERIC
-                    : y - mInitialTouchY > 0 ? QUICK_SETTINGS
-                            : (mKeyguardStateController.canDismissLockScreen()
-                                    ? UNLOCK : BOUNCER_UNLOCK);
-
-            fling(vel, expand, isFalseTouch(x, y, interactionType));
-            onTrackingStopped(expand);
-            mUpdateFlingOnLayout = expand && mPanelClosedOnDown && !mHasLayoutedSinceDown;
-            if (mUpdateFlingOnLayout) {
-                mUpdateFlingVelocity = vel;
-            }
-        } else if (!mCentralSurfaces.isBouncerShowing()
-                && !mStatusBarKeyguardViewManager.isShowingAlternateAuthOrAnimating()
-                && !mKeyguardStateController.isKeyguardGoingAway()) {
-            boolean expands = onEmptySpaceClick(mInitialTouchX);
-            onTrackingStopped(expands);
-        }
-        mVelocityTracker.clear();
-    }
-
-    protected float getCurrentExpandVelocity() {
-        mVelocityTracker.computeCurrentVelocity(1000);
-        return mVelocityTracker.getYVelocity();
-    }
-
-    private int getFalsingThreshold() {
-        float factor = mCentralSurfaces.isWakeUpComingFromTouch() ? 1.5f : 1.0f;
-        return (int) (mUnlockFalsingThreshold * factor);
-    }
-
-    protected abstract boolean shouldGestureWaitForTouchSlop();
-
-    protected abstract boolean shouldGestureIgnoreXTouchSlop(float x, float y);
-
-    protected void onTrackingStopped(boolean expand) {
-        mTracking = false;
-        mCentralSurfaces.onTrackingStopped(expand);
-        updatePanelExpansionAndVisibility();
-    }
-
-    protected void onTrackingStarted() {
-        endClosing();
-        mTracking = true;
-        mCentralSurfaces.onTrackingStarted();
-        notifyExpandingStarted();
-        updatePanelExpansionAndVisibility();
-    }
-
-    /**
-     * @return Whether a pair of coordinates are inside the visible view content bounds.
-     */
-    protected abstract boolean isInContentBounds(float x, float y);
-
-    protected void cancelHeightAnimator() {
-        if (mHeightAnimator != null) {
-            if (mHeightAnimator.isRunning()) {
-                mPanelUpdateWhenAnimatorEnds = false;
-            }
-            mHeightAnimator.cancel();
-        }
-        endClosing();
-    }
-
-    private void endClosing() {
-        if (mClosing) {
-            setIsClosing(false);
-            onClosingFinished();
-        }
-    }
-
-    protected boolean canCollapsePanelOnTouch() {
-        return true;
-    }
-
-    protected float getContentHeight() {
-        return mExpandedHeight;
-    }
-
-    /**
-     * @param vel       the current vertical velocity of the motion
-     * @param vectorVel the length of the vectorial velocity
-     * @return whether a fling should expands the panel; contracts otherwise
-     */
-    protected boolean flingExpands(float vel, float vectorVel, float x, float y) {
-        if (mFalsingManager.isUnlockingDisabled()) {
-            return true;
-        }
-
-        @Classifier.InteractionType int interactionType = y - mInitialTouchY > 0
-                ? QUICK_SETTINGS : (
-                        mKeyguardStateController.canDismissLockScreen() ? UNLOCK : BOUNCER_UNLOCK);
-
-        if (isFalseTouch(x, y, interactionType)) {
-            return true;
-        }
-        if (Math.abs(vectorVel) < mFlingAnimationUtils.getMinVelocityPxPerSecond()) {
-            return shouldExpandWhenNotFlinging();
-        } else {
-            return vel > 0;
-        }
-    }
-
-    protected boolean shouldExpandWhenNotFlinging() {
-        return getExpandedFraction() > 0.5f;
-    }
-
-    /**
-     * @param x the final x-coordinate when the finger was lifted
-     * @param y the final y-coordinate when the finger was lifted
-     * @return whether this motion should be regarded as a false touch
-     */
-    private boolean isFalseTouch(float x, float y,
-            @Classifier.InteractionType int interactionType) {
-        if (!mCentralSurfaces.isFalsingThresholdNeeded()) {
-            return false;
-        }
-        if (mFalsingManager.isClassifierEnabled()) {
-            return mFalsingManager.isFalseTouch(interactionType);
-        }
-        if (!mTouchAboveFalsingThreshold) {
-            return true;
-        }
-        if (mUpwardsWhenThresholdReached) {
-            return false;
-        }
-        return !isDirectionUpwards(x, y);
-    }
-
-    protected void fling(float vel, boolean expand) {
-        fling(vel, expand, 1.0f /* collapseSpeedUpFactor */, false);
-    }
-
-    protected void fling(float vel, boolean expand, boolean expandBecauseOfFalsing) {
-        fling(vel, expand, 1.0f /* collapseSpeedUpFactor */, expandBecauseOfFalsing);
-    }
-
-    protected void fling(float vel, boolean expand, float collapseSpeedUpFactor,
-            boolean expandBecauseOfFalsing) {
-        float target = expand ? getMaxPanelHeight() : 0;
-        if (!expand) {
-            setIsClosing(true);
-        }
-        flingToHeight(vel, expand, target, collapseSpeedUpFactor, expandBecauseOfFalsing);
-    }
-
-    protected void flingToHeight(float vel, boolean expand, float target,
-            float collapseSpeedUpFactor, boolean expandBecauseOfFalsing) {
-        if (target == mExpandedHeight && mOverExpansion == 0.0f) {
-            // We're at the target and didn't fling and there's no overshoot
-            onFlingEnd(false /* cancelled */);
-            return;
-        }
-        mIsFlinging = true;
-        // we want to perform an overshoot animation when flinging open
-        final boolean addOverscroll =
-                expand
-                        && !mInSplitShade // Split shade has its own overscroll logic
-                        && mStatusBarStateController.getState() != StatusBarState.KEYGUARD
-                        && mOverExpansion == 0.0f
-                        && vel >= 0;
-        final boolean shouldSpringBack = addOverscroll || (mOverExpansion != 0.0f && expand);
-        float overshootAmount = 0.0f;
-        if (addOverscroll) {
-            // Let's overshoot depending on the amount of velocity
-            overshootAmount = MathUtils.lerp(
-                    0.2f,
-                    1.0f,
-                    MathUtils.saturate(vel
-                            / (mFlingAnimationUtils.getHighVelocityPxPerSecond()
-                                    * FACTOR_OF_HIGH_VELOCITY_FOR_MAX_OVERSHOOT)));
-            overshootAmount += mOverExpansion / mPanelFlingOvershootAmount;
-        }
-        ValueAnimator animator = createHeightAnimator(target, overshootAmount);
-        if (expand) {
-            if (expandBecauseOfFalsing && vel < 0) {
-                vel = 0;
-            }
-            mFlingAnimationUtils.apply(animator, mExpandedHeight,
-                    target + overshootAmount * mPanelFlingOvershootAmount, vel, mView.getHeight());
-            if (vel == 0) {
-                animator.setDuration(SHADE_OPEN_SPRING_OUT_DURATION);
-            }
-        } else {
-            if (shouldUseDismissingAnimation()) {
-                if (vel == 0) {
-                    animator.setInterpolator(Interpolators.PANEL_CLOSE_ACCELERATED);
-                    long duration = (long) (200 + mExpandedHeight / mView.getHeight() * 100);
-                    animator.setDuration(duration);
-                } else {
-                    mFlingAnimationUtilsDismissing.apply(animator, mExpandedHeight, target, vel,
-                            mView.getHeight());
-                }
-            } else {
-                mFlingAnimationUtilsClosing.apply(
-                        animator, mExpandedHeight, target, vel, mView.getHeight());
-            }
-
-            // Make it shorter if we run a canned animation
-            if (vel == 0) {
-                animator.setDuration((long) (animator.getDuration() / collapseSpeedUpFactor));
-            }
-            if (mFixedDuration != NO_FIXED_DURATION) {
-                animator.setDuration(mFixedDuration);
-            }
-        }
-        animator.addListener(new AnimatorListenerAdapter() {
-            private boolean mCancelled;
-
-            @Override
-            public void onAnimationStart(Animator animation) {
-                if (!mStatusBarStateController.isDozing()) {
-                    beginJankMonitoring(CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE);
-                }
-            }
-
-            @Override
-            public void onAnimationCancel(Animator animation) {
-                mCancelled = true;
-            }
-
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                if (shouldSpringBack && !mCancelled) {
-                    // After the shade is flinged open to an overscrolled state, spring back
-                    // the shade by reducing section padding to 0.
-                    springBack();
-                } else {
-                    onFlingEnd(mCancelled);
-                }
-            }
-        });
-        setAnimator(animator);
-        animator.start();
-    }
-
-    private void springBack() {
-        if (mOverExpansion == 0) {
-            onFlingEnd(false /* cancelled */);
-            return;
-        }
-        mIsSpringBackAnimation = true;
-        ValueAnimator animator = ValueAnimator.ofFloat(mOverExpansion, 0);
-        animator.addUpdateListener(
-                animation -> {
-                    setOverExpansionInternal((float) animation.getAnimatedValue(),
-                            false /* isFromGesture */);
-                });
-        animator.setDuration(SHADE_OPEN_SPRING_BACK_DURATION);
-        animator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
-        animator.addListener(new AnimatorListenerAdapter() {
-            private boolean mCancelled;
-            @Override
-            public void onAnimationCancel(Animator animation) {
-                mCancelled = true;
-            }
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                mIsSpringBackAnimation = false;
-                onFlingEnd(mCancelled);
-            }
-        });
-        setAnimator(animator);
-        animator.start();
-    }
-
-    void onFlingEnd(boolean cancelled) {
-        mIsFlinging = false;
-        // No overshoot when the animation ends
-        setOverExpansionInternal(0, false /* isFromGesture */);
-        setAnimator(null);
-        mKeyguardStateController.notifyPanelFlingEnd();
-        if (!cancelled) {
-            endJankMonitoring(CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE);
-            notifyExpandingFinished();
-        } else {
-            cancelJankMonitoring(CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE);
-        }
-        updatePanelExpansionAndVisibility();
-    }
-
-    protected abstract boolean shouldUseDismissingAnimation();
-
-    public String getName() {
-        return mViewName;
-    }
-
-    public void setExpandedHeight(float height) {
-        if (DEBUG) logf("setExpandedHeight(%.1f)", height);
-        setExpandedHeightInternal(height);
-    }
-
-    protected void requestPanelHeightUpdate() {
-        float currentMaxPanelHeight = getMaxPanelHeight();
-
-        if (isFullyCollapsed()) {
-            return;
-        }
-
-        if (currentMaxPanelHeight == mExpandedHeight) {
-            return;
-        }
-
-        if (mTracking && !isTrackingBlocked()) {
-            return;
-        }
-
-        if (mHeightAnimator != null && !mIsSpringBackAnimation) {
-            mPanelUpdateWhenAnimatorEnds = true;
-            return;
-        }
-
-        setExpandedHeight(currentMaxPanelHeight);
-    }
-
-    private float getStackHeightFraction(float height) {
-        final float gestureFraction = height / getMaxPanelHeight();
-        final float stackHeightFraction = Interpolators.ACCELERATE_DECELERATE
-                .getInterpolation(gestureFraction);
-        return stackHeightFraction;
-    }
-
-    public void setExpandedHeightInternal(float h) {
-        if (isNaN(h)) {
-            Log.wtf(TAG, "ExpandedHeight set to NaN");
-        }
-        mNotificationShadeWindowController.batchApplyWindowLayoutParams(()-> {
-            if (mExpandLatencyTracking && h != 0f) {
-                DejankUtils.postAfterTraversal(
-                        () -> mLatencyTracker.onActionEnd(LatencyTracker.ACTION_EXPAND_PANEL));
-                mExpandLatencyTracking = false;
-            }
-            float maxPanelHeight = getMaxPanelHeight();
-            if (mHeightAnimator == null) {
-                // Split shade has its own overscroll logic
-                if (mTracking && !mInSplitShade) {
-                    float overExpansionPixels = Math.max(0, h - maxPanelHeight);
-                    setOverExpansionInternal(overExpansionPixels, true /* isFromGesture */);
-                }
-                mExpandedHeight = Math.min(h, maxPanelHeight);
-            } else {
-                mExpandedHeight = h;
-            }
-
-            // If we are closing the panel and we are almost there due to a slow decelerating
-            // interpolator, abort the animation.
-            if (mExpandedHeight < 1f && mExpandedHeight != 0f && mClosing) {
-                mExpandedHeight = 0f;
-                if (mHeightAnimator != null) {
-                    mHeightAnimator.end();
-                }
-            }
-            mExpansionDragDownAmountPx = h;
-            mExpandedFraction = Math.min(1f,
-                    maxPanelHeight == 0 ? 0 : mExpandedHeight / maxPanelHeight);
-            onHeightUpdated(mExpandedHeight);
-            updatePanelExpansionAndVisibility();
-        });
-    }
-
-    /**
-     * @return true if the panel tracking should be temporarily blocked; this is used when a
-     * conflicting gesture (opening QS) is happening
-     */
-    protected abstract boolean isTrackingBlocked();
-
-    protected void setOverExpansion(float overExpansion) {
-        mOverExpansion = overExpansion;
-    }
-
-    /**
-     * Set the current overexpansion
-     *
-     * @param overExpansion the amount of overexpansion to apply
-     * @param isFromGesture is this amount from a gesture and needs to be rubberBanded?
-     */
-    private void setOverExpansionInternal(float overExpansion, boolean isFromGesture) {
-        if (!isFromGesture) {
-            mLastGesturedOverExpansion = -1;
-            setOverExpansion(overExpansion);
-        } else if (mLastGesturedOverExpansion != overExpansion) {
-            mLastGesturedOverExpansion = overExpansion;
-            final float heightForFullOvershoot = mView.getHeight() / 3.0f;
-            float newExpansion = MathUtils.saturate(overExpansion / heightForFullOvershoot);
-            newExpansion = Interpolators.getOvershootInterpolation(newExpansion);
-            setOverExpansion(newExpansion * mPanelFlingOvershootAmount * 2.0f);
-        }
-    }
-
-    protected abstract void onHeightUpdated(float expandedHeight);
-
-    /**
-     * This returns the maximum height of the panel. Children should override this if their
-     * desired height is not the full height.
-     *
-     * @return the default implementation simply returns the maximum height.
-     */
-    protected abstract int getMaxPanelHeight();
-
-    public void setExpandedFraction(float frac) {
-        setExpandedHeight(getMaxPanelHeight() * frac);
-    }
-
-    public float getExpandedHeight() {
-        return mExpandedHeight;
-    }
-
-    public float getExpandedFraction() {
-        return mExpandedFraction;
-    }
-
-    public boolean isFullyExpanded() {
-        return mExpandedHeight >= getMaxPanelHeight();
-    }
-
-    public boolean isFullyCollapsed() {
-        return mExpandedFraction <= 0.0f;
-    }
-
-    public boolean isCollapsing() {
-        return mClosing || mIsLaunchAnimationRunning;
-    }
-
-    public boolean isFlinging() {
-        return mIsFlinging;
-    }
-
-    public boolean isTracking() {
-        return mTracking;
-    }
-
-    public void collapse(boolean delayed, float speedUpFactor) {
-        if (DEBUG) logf("collapse: " + this);
-        if (canPanelBeCollapsed()) {
-            cancelHeightAnimator();
-            notifyExpandingStarted();
-
-            // Set after notifyExpandingStarted, as notifyExpandingStarted resets the closing state.
-            setIsClosing(true);
-            if (delayed) {
-                mNextCollapseSpeedUpFactor = speedUpFactor;
-                mView.postDelayed(mFlingCollapseRunnable, 120);
-            } else {
-                fling(0, false /* expand */, speedUpFactor, false /* expandBecauseOfFalsing */);
-            }
-        }
-    }
-
-    public boolean canPanelBeCollapsed() {
-        return !isFullyCollapsed() && !mTracking && !mClosing;
-    }
-
-    private final Runnable mFlingCollapseRunnable = new Runnable() {
-        @Override
-        public void run() {
-            fling(0, false /* expand */, mNextCollapseSpeedUpFactor,
-                    false /* expandBecauseOfFalsing */);
-        }
-    };
-
-    public void expand(final boolean animate) {
-        if (!isFullyCollapsed() && !isCollapsing()) {
-            return;
-        }
-
-        mInstantExpanding = true;
-        mAnimateAfterExpanding = animate;
-        mUpdateFlingOnLayout = false;
-        abortAnimations();
-        if (mTracking) {
-            onTrackingStopped(true /* expands */); // The panel is expanded after this call.
-        }
-        if (mExpanding) {
-            notifyExpandingFinished();
-        }
-        updatePanelExpansionAndVisibility();
-
-        // Wait for window manager to pickup the change, so we know the maximum height of the panel
-        // then.
-        mView.getViewTreeObserver().addOnGlobalLayoutListener(
-                new ViewTreeObserver.OnGlobalLayoutListener() {
-                    @Override
-                    public void onGlobalLayout() {
-                        if (!mInstantExpanding) {
-                            mView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
-                            return;
-                        }
-                        if (mCentralSurfaces.getNotificationShadeWindowView().isVisibleToUser()) {
-                            mView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
-                            if (mAnimateAfterExpanding) {
-                                notifyExpandingStarted();
-                                beginJankMonitoring(CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE);
-                                fling(0, true /* expand */);
-                            } else {
-                                setExpandedFraction(1f);
-                            }
-                            mInstantExpanding = false;
-                        }
-                    }
-                });
-
-        // Make sure a layout really happens.
-        mView.requestLayout();
-    }
-
-    public void instantCollapse() {
-        abortAnimations();
-        setExpandedFraction(0f);
-        if (mExpanding) {
-            notifyExpandingFinished();
-        }
-        if (mInstantExpanding) {
-            mInstantExpanding = false;
-            updatePanelExpansionAndVisibility();
-        }
-    }
-
-    private void abortAnimations() {
-        cancelHeightAnimator();
-        mView.removeCallbacks(mFlingCollapseRunnable);
-    }
-
-    protected abstract void onClosingFinished();
-
-    protected void startUnlockHintAnimation() {
-
-        // We don't need to hint the user if an animation is already running or the user is changing
-        // the expansion.
-        if (mHeightAnimator != null || mTracking) {
-            return;
-        }
-        notifyExpandingStarted();
-        startUnlockHintAnimationPhase1(() -> {
-            notifyExpandingFinished();
-            onUnlockHintFinished();
-            mHintAnimationRunning = false;
-        });
-        onUnlockHintStarted();
-        mHintAnimationRunning = true;
-    }
-
-    protected void onUnlockHintFinished() {
-        mCentralSurfaces.onHintFinished();
-    }
-
-    protected void onUnlockHintStarted() {
-        mCentralSurfaces.onUnlockHintStarted();
-    }
-
-    public boolean isUnlockHintRunning() {
-        return mHintAnimationRunning;
-    }
-
-    /**
-     * Phase 1: Move everything upwards.
-     */
-    private void startUnlockHintAnimationPhase1(final Runnable onAnimationFinished) {
-        float target = Math.max(0, getMaxPanelHeight() - mHintDistance);
-        ValueAnimator animator = createHeightAnimator(target);
-        animator.setDuration(250);
-        animator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
-        animator.addListener(new AnimatorListenerAdapter() {
-            private boolean mCancelled;
-
-            @Override
-            public void onAnimationCancel(Animator animation) {
-                mCancelled = true;
-            }
-
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                if (mCancelled) {
-                    setAnimator(null);
-                    onAnimationFinished.run();
-                } else {
-                    startUnlockHintAnimationPhase2(onAnimationFinished);
-                }
-            }
-        });
-        animator.start();
-        setAnimator(animator);
-
-        View[] viewsToAnimate = {
-                mKeyguardBottomArea.getIndicationArea(),
-                mCentralSurfaces.getAmbientIndicationContainer()};
-        for (View v : viewsToAnimate) {
-            if (v == null) {
-                continue;
-            }
-            v.animate().translationY(-mHintDistance).setDuration(250).setInterpolator(
-                    Interpolators.FAST_OUT_SLOW_IN).withEndAction(() -> v.animate().translationY(
-                    0).setDuration(450).setInterpolator(mBounceInterpolator).start()).start();
-        }
-    }
-
-    private void setAnimator(ValueAnimator animator) {
-        mHeightAnimator = animator;
-        if (animator == null && mPanelUpdateWhenAnimatorEnds) {
-            mPanelUpdateWhenAnimatorEnds = false;
-            requestPanelHeightUpdate();
-        }
-    }
-
-    /**
-     * Phase 2: Bounce down.
-     */
-    private void startUnlockHintAnimationPhase2(final Runnable onAnimationFinished) {
-        ValueAnimator animator = createHeightAnimator(getMaxPanelHeight());
-        animator.setDuration(450);
-        animator.setInterpolator(mBounceInterpolator);
-        animator.addListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                setAnimator(null);
-                onAnimationFinished.run();
-                updatePanelExpansionAndVisibility();
-            }
-        });
-        animator.start();
-        setAnimator(animator);
-    }
-
-    private ValueAnimator createHeightAnimator(float targetHeight) {
-        return createHeightAnimator(targetHeight, 0.0f /* performOvershoot */);
-    }
-
-    /**
-     * Create an animator that can also overshoot
-     *
-     * @param targetHeight the target height
-     * @param overshootAmount the amount of overshoot desired
-     */
-    private ValueAnimator createHeightAnimator(float targetHeight, float overshootAmount) {
-        float startExpansion = mOverExpansion;
-        ValueAnimator animator = ValueAnimator.ofFloat(mExpandedHeight, targetHeight);
-        animator.addUpdateListener(
-                animation -> {
-                    if (overshootAmount > 0.0f
-                            // Also remove the overExpansion when collapsing
-                            || (targetHeight == 0.0f && startExpansion != 0)) {
-                        final float expansion = MathUtils.lerp(
-                                startExpansion,
-                                mPanelFlingOvershootAmount * overshootAmount,
-                                Interpolators.FAST_OUT_SLOW_IN.getInterpolation(
-                                        animator.getAnimatedFraction()));
-                        setOverExpansionInternal(expansion, false /* isFromGesture */);
-                    }
-                    setExpandedHeightInternal((float) animation.getAnimatedValue());
-                });
-        return animator;
-    }
-
-    /** Update the visibility of {@link PanelView} if necessary. */
-    public void updateVisibility() {
-        mView.setVisibility(shouldPanelBeVisible() ? VISIBLE : INVISIBLE);
-    }
-
-    /** Returns true if {@link PanelView} should be visible. */
-    abstract boolean shouldPanelBeVisible();
-
-    /**
-     * Updates the panel expansion and {@link PanelView} visibility if necessary.
-     *
-     * TODO(b/200063118): Could public calls to this method be replaced with calls to
-     *   {@link #updateVisibility()}? That would allow us to make this method private.
-     */
-    public void updatePanelExpansionAndVisibility() {
-        mPanelExpansionStateManager.onPanelExpansionChanged(
-                mExpandedFraction, isExpanded(), mTracking, mExpansionDragDownAmountPx);
-        updateVisibility();
-    }
-
-    public boolean isExpanded() {
-        return mExpandedFraction > 0f
-                || mInstantExpanding
-                || isPanelVisibleBecauseOfHeadsUp()
-                || mTracking
-                || mHeightAnimator != null
-                && !mIsSpringBackAnimation;
-    }
-
-    protected abstract boolean isPanelVisibleBecauseOfHeadsUp();
-
-    /**
-     * Gets called when the user performs a click anywhere in the empty area of the panel.
-     *
-     * @return whether the panel will be expanded after the action performed by this method
-     */
-    protected boolean onEmptySpaceClick(float x) {
-        if (mHintAnimationRunning) {
-            return true;
-        }
-        return onMiddleClicked();
-    }
-
-    protected abstract boolean onMiddleClicked();
-
-    protected abstract boolean isDozing();
-
-    public void dump(PrintWriter pw, String[] args) {
-        pw.println(String.format("[PanelView(%s): expandedHeight=%f maxPanelHeight=%d closing=%s"
-                        + " tracking=%s timeAnim=%s%s "
-                        + "touchDisabled=%s" + "]",
-                this.getClass().getSimpleName(), getExpandedHeight(), getMaxPanelHeight(),
-                mClosing ? "T" : "f", mTracking ? "T" : "f", mHeightAnimator,
-                ((mHeightAnimator != null && mHeightAnimator.isStarted()) ? " (started)" : ""),
-                mTouchDisabled ? "T" : "f"));
-    }
-
-    public abstract void resetViews(boolean animate);
-
-    public void setHeadsUpManager(HeadsUpManagerPhone headsUpManager) {
-        mHeadsUpManager = headsUpManager;
-    }
-
-    public void setIsLaunchAnimationRunning(boolean running) {
-        mIsLaunchAnimationRunning = running;
-    }
-
-    protected void setIsClosing(boolean isClosing) {
-        mClosing = isClosing;
-    }
-
-    protected boolean isClosing() {
-        return mClosing;
-    }
-
-    public void collapseWithDuration(int animationDuration) {
-        mFixedDuration = animationDuration;
-        collapse(false /* delayed */, 1.0f /* speedUpFactor */);
-        mFixedDuration = NO_FIXED_DURATION;
-    }
-
-    public ViewGroup getView() {
-        // TODO: remove this method, or at least reduce references to it.
-        return mView;
-    }
-
-    public OnLayoutChangeListener createLayoutChangeListener() {
-        return new OnLayoutChangeListener();
-    }
-
-    protected abstract TouchHandler createTouchHandler();
-
-    protected OnConfigurationChangedListener createOnConfigurationChangedListener() {
-        return new OnConfigurationChangedListener();
-    }
-
-    public class TouchHandler implements View.OnTouchListener {
-
-        public boolean onInterceptTouchEvent(MotionEvent event) {
-            if (mInstantExpanding || !mNotificationsDragEnabled || mTouchDisabled || (mMotionAborted
-                    && event.getActionMasked() != MotionEvent.ACTION_DOWN)) {
-                return false;
-            }
-
-            /*
-             * If the user drags anywhere inside the panel we intercept it if the movement is
-             * upwards. This allows closing the shade from anywhere inside the panel.
-             *
-             * We only do this if the current content is scrolled to the bottom,
-             * i.e canCollapsePanelOnTouch() is true and therefore there is no conflicting scrolling
-             * gesture
-             * possible.
-             */
-            int pointerIndex = event.findPointerIndex(mTrackingPointer);
-            if (pointerIndex < 0) {
-                pointerIndex = 0;
-                mTrackingPointer = event.getPointerId(pointerIndex);
-            }
-            final float x = event.getX(pointerIndex);
-            final float y = event.getY(pointerIndex);
-            boolean canCollapsePanel = canCollapsePanelOnTouch();
-
-            switch (event.getActionMasked()) {
-                case MotionEvent.ACTION_DOWN:
-                    mCentralSurfaces.userActivity();
-                    mAnimatingOnDown = mHeightAnimator != null && !mIsSpringBackAnimation;
-                    mMinExpandHeight = 0.0f;
-                    mDownTime = mSystemClock.uptimeMillis();
-                    if (mAnimatingOnDown && mClosing && !mHintAnimationRunning) {
-                        cancelHeightAnimator();
-                        mTouchSlopExceeded = true;
-                        return true;
-                    }
-                    mInitialTouchY = y;
-                    mInitialTouchX = x;
-                    mTouchStartedInEmptyArea = !isInContentBounds(x, y);
-                    mTouchSlopExceeded = mTouchSlopExceededBeforeDown;
-                    mMotionAborted = false;
-                    mPanelClosedOnDown = isFullyCollapsed();
-                    mCollapsedAndHeadsUpOnDown = false;
-                    mHasLayoutedSinceDown = false;
-                    mUpdateFlingOnLayout = false;
-                    mTouchAboveFalsingThreshold = false;
-                    addMovement(event);
-                    break;
-                case MotionEvent.ACTION_POINTER_UP:
-                    final int upPointer = event.getPointerId(event.getActionIndex());
-                    if (mTrackingPointer == upPointer) {
-                        // gesture is ongoing, find a new pointer to track
-                        final int newIndex = event.getPointerId(0) != upPointer ? 0 : 1;
-                        mTrackingPointer = event.getPointerId(newIndex);
-                        mInitialTouchX = event.getX(newIndex);
-                        mInitialTouchY = event.getY(newIndex);
-                    }
-                    break;
-                case MotionEvent.ACTION_POINTER_DOWN:
-                    if (mStatusBarStateController.getState() == StatusBarState.KEYGUARD) {
-                        mMotionAborted = true;
-                        mVelocityTracker.clear();
-                    }
-                    break;
-                case MotionEvent.ACTION_MOVE:
-                    final float h = y - mInitialTouchY;
-                    addMovement(event);
-                    final boolean openShadeWithoutHun =
-                            mPanelClosedOnDown && !mCollapsedAndHeadsUpOnDown;
-                    if (canCollapsePanel || mTouchStartedInEmptyArea || mAnimatingOnDown
-                            || openShadeWithoutHun) {
-                        float hAbs = Math.abs(h);
-                        float touchSlop = getTouchSlop(event);
-                        if ((h < -touchSlop
-                                || ((openShadeWithoutHun || mAnimatingOnDown) && hAbs > touchSlop))
-                                && hAbs > Math.abs(x - mInitialTouchX)) {
-                            cancelHeightAnimator();
-                            startExpandMotion(x, y, true /* startTracking */, mExpandedHeight);
-                            return true;
-                        }
-                    }
-                    break;
-                case MotionEvent.ACTION_CANCEL:
-                case MotionEvent.ACTION_UP:
-                    mVelocityTracker.clear();
-                    break;
-            }
-            return false;
-        }
-
-        @Override
-        public boolean onTouch(View v, MotionEvent event) {
-            if (mInstantExpanding || (mTouchDisabled
-                    && event.getActionMasked() != MotionEvent.ACTION_CANCEL) || (mMotionAborted
-                    && event.getActionMasked() != MotionEvent.ACTION_DOWN)) {
-                return false;
-            }
-
-            // If dragging should not expand the notifications shade, then return false.
-            if (!mNotificationsDragEnabled) {
-                if (mTracking) {
-                    // Turn off tracking if it's on or the shade can get stuck in the down position.
-                    onTrackingStopped(true /* expand */);
-                }
-                return false;
-            }
-
-            // On expanding, single mouse click expands the panel instead of dragging.
-            if (isFullyCollapsed() && event.isFromSource(InputDevice.SOURCE_MOUSE)) {
-                if (event.getAction() == MotionEvent.ACTION_UP) {
-                    expand(true);
-                }
-                return true;
-            }
-
-            /*
-             * We capture touch events here and update the expand height here in case according to
-             * the users fingers. This also handles multi-touch.
-             *
-             * Flinging is also enabled in order to open or close the shade.
-             */
-
-            int pointerIndex = event.findPointerIndex(mTrackingPointer);
-            if (pointerIndex < 0) {
-                pointerIndex = 0;
-                mTrackingPointer = event.getPointerId(pointerIndex);
-            }
-            final float x = event.getX(pointerIndex);
-            final float y = event.getY(pointerIndex);
-
-            if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
-                mGestureWaitForTouchSlop = shouldGestureWaitForTouchSlop();
-                mIgnoreXTouchSlop = isFullyCollapsed() || shouldGestureIgnoreXTouchSlop(x, y);
-            }
-
-            switch (event.getActionMasked()) {
-                case MotionEvent.ACTION_DOWN:
-                    startExpandMotion(x, y, false /* startTracking */, mExpandedHeight);
-                    mMinExpandHeight = 0.0f;
-                    mPanelClosedOnDown = isFullyCollapsed();
-                    mHasLayoutedSinceDown = false;
-                    mUpdateFlingOnLayout = false;
-                    mMotionAborted = false;
-                    mDownTime = mSystemClock.uptimeMillis();
-                    mTouchAboveFalsingThreshold = false;
-                    mCollapsedAndHeadsUpOnDown =
-                            isFullyCollapsed() && mHeadsUpManager.hasPinnedHeadsUp();
-                    addMovement(event);
-                    boolean regularHeightAnimationRunning = mHeightAnimator != null
-                            && !mHintAnimationRunning && !mIsSpringBackAnimation;
-                    if (!mGestureWaitForTouchSlop || regularHeightAnimationRunning) {
-                        mTouchSlopExceeded = regularHeightAnimationRunning
-                                        || mTouchSlopExceededBeforeDown;
-                        cancelHeightAnimator();
-                        onTrackingStarted();
-                    }
-                    if (isFullyCollapsed() && !mHeadsUpManager.hasPinnedHeadsUp()
-                            && !mCentralSurfaces.isBouncerShowing()) {
-                        startOpening(event);
-                    }
-                    break;
-
-                case MotionEvent.ACTION_POINTER_UP:
-                    final int upPointer = event.getPointerId(event.getActionIndex());
-                    if (mTrackingPointer == upPointer) {
-                        // gesture is ongoing, find a new pointer to track
-                        final int newIndex = event.getPointerId(0) != upPointer ? 0 : 1;
-                        final float newY = event.getY(newIndex);
-                        final float newX = event.getX(newIndex);
-                        mTrackingPointer = event.getPointerId(newIndex);
-                        mHandlingPointerUp = true;
-                        startExpandMotion(newX, newY, true /* startTracking */, mExpandedHeight);
-                        mHandlingPointerUp = false;
-                    }
-                    break;
-                case MotionEvent.ACTION_POINTER_DOWN:
-                    if (mStatusBarStateController.getState() == StatusBarState.KEYGUARD) {
-                        mMotionAborted = true;
-                        endMotionEvent(event, x, y, true /* forceCancel */);
-                        return false;
-                    }
-                    break;
-                case MotionEvent.ACTION_MOVE:
-                    addMovement(event);
-                    float h = y - mInitialTouchY;
-
-                    // If the panel was collapsed when touching, we only need to check for the
-                    // y-component of the gesture, as we have no conflicting horizontal gesture.
-                    if (Math.abs(h) > getTouchSlop(event)
-                            && (Math.abs(h) > Math.abs(x - mInitialTouchX)
-                            || mIgnoreXTouchSlop)) {
-                        mTouchSlopExceeded = true;
-                        if (mGestureWaitForTouchSlop && !mTracking && !mCollapsedAndHeadsUpOnDown) {
-                            if (mInitialOffsetOnTouch != 0f) {
-                                startExpandMotion(x, y, false /* startTracking */, mExpandedHeight);
-                                h = 0;
-                            }
-                            cancelHeightAnimator();
-                            onTrackingStarted();
-                        }
-                    }
-                    float newHeight = Math.max(0, h + mInitialOffsetOnTouch);
-                    newHeight = Math.max(newHeight, mMinExpandHeight);
-                    if (-h >= getFalsingThreshold()) {
-                        mTouchAboveFalsingThreshold = true;
-                        mUpwardsWhenThresholdReached = isDirectionUpwards(x, y);
-                    }
-                    if ((!mGestureWaitForTouchSlop || mTracking) && !isTrackingBlocked()) {
-                        // Count h==0 as part of swipe-up,
-                        // otherwise {@link NotificationStackScrollLayout}
-                        // wrongly enables stack height updates at the start of lockscreen swipe-up
-                        mAmbientState.setSwipingUp(h <= 0);
-                        setExpandedHeightInternal(newHeight);
-                    }
-                    break;
-
-                case MotionEvent.ACTION_UP:
-                case MotionEvent.ACTION_CANCEL:
-                    addMovement(event);
-                    endMotionEvent(event, x, y, false /* forceCancel */);
-                    // mHeightAnimator is null, there is no remaining frame, ends instrumenting.
-                    if (mHeightAnimator == null) {
-                        if (event.getActionMasked() == MotionEvent.ACTION_UP) {
-                            endJankMonitoring(CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE);
-                        } else {
-                            cancelJankMonitoring(CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE);
-                        }
-                    }
-                    break;
-            }
-            return !mGestureWaitForTouchSlop || mTracking;
-        }
-    }
-
-    public class OnLayoutChangeListener implements View.OnLayoutChangeListener {
-        @Override
-        public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft,
-                int oldTop, int oldRight, int oldBottom) {
-            requestPanelHeightUpdate();
-            mHasLayoutedSinceDown = true;
-            if (mUpdateFlingOnLayout) {
-                abortAnimations();
-                fling(mUpdateFlingVelocity, true /* expands */);
-                mUpdateFlingOnLayout = false;
-            }
-        }
-    }
-
-    public class OnConfigurationChangedListener implements
-            PanelView.OnConfigurationChangedListener {
-        @Override
-        public void onConfigurationChanged(Configuration newConfig) {
-            loadDimens();
-        }
-    }
-
-    private void beginJankMonitoring(int cuj) {
-        if (mInteractionJankMonitor == null) {
-            return;
-        }
-        InteractionJankMonitor.Configuration.Builder builder =
-                InteractionJankMonitor.Configuration.Builder.withView(cuj, mView)
-                        .setTag(isFullyCollapsed() ? "Expand" : "Collapse");
-        mInteractionJankMonitor.begin(builder);
-    }
-
-    private void endJankMonitoring(int cuj) {
-        if (mInteractionJankMonitor == null) {
-            return;
-        }
-        InteractionJankMonitor.getInstance().end(cuj);
-    }
-
-    private void cancelJankMonitoring(int cuj) {
-        if (mInteractionJankMonitor == null) {
-            return;
-        }
-        InteractionJankMonitor.getInstance().cancel(cuj);
-    }
-
-    protected float getExpansionFraction() {
-        return mExpandedFraction;
-    }
-
-    protected PanelExpansionStateManager getPanelExpansionStateManager() {
-        return mPanelExpansionStateManager;
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java
index 2052ee6..15c6dcf 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java
@@ -31,7 +31,7 @@
 
     private final float mIconAlphaWhenOpaque;
 
-    private View mLeftSide, mStatusIcons, mBattery;
+    private View mStartSide, mStatusIcons, mBattery;
     private Animator mCurrentAnimation;
 
     /**
@@ -41,7 +41,7 @@
         super(backgroundView, R.drawable.status_background);
         final Resources res = statusBarView.getContext().getResources();
         mIconAlphaWhenOpaque = res.getFraction(R.dimen.status_bar_icon_drawing_alpha, 1, 1);
-        mLeftSide = statusBarView.findViewById(R.id.status_bar_left_side);
+        mStartSide = statusBarView.findViewById(R.id.status_bar_start_side_except_heads_up);
         mStatusIcons = statusBarView.findViewById(R.id.statusIcons);
         mBattery = statusBarView.findViewById(R.id.battery);
         applyModeBackground(-1, getMode(), false /*animate*/);
@@ -75,7 +75,7 @@
     }
 
     private void applyMode(int mode, boolean animate) {
-        if (mLeftSide == null) return; // pre-init
+        if (mStartSide == null) return; // pre-init
         float newAlpha = getNonBatteryClockAlphaFor(mode);
         float newAlphaBC = getBatteryClockAlpha(mode);
         if (mCurrentAnimation != null) {
@@ -84,7 +84,7 @@
         if (animate) {
             AnimatorSet anims = new AnimatorSet();
             anims.playTogether(
-                    animateTransitionTo(mLeftSide, newAlpha),
+                    animateTransitionTo(mStartSide, newAlpha),
                     animateTransitionTo(mStatusIcons, newAlpha),
                     animateTransitionTo(mBattery, newAlphaBC)
                     );
@@ -94,7 +94,7 @@
             anims.start();
             mCurrentAnimation = anims;
         } else {
-            mLeftSide.setAlpha(newAlpha);
+            mStartSide.setAlpha(newAlpha);
             mStatusIcons.setAlpha(newAlpha);
             mBattery.setAlpha(newAlphaBC);
         }
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 9da2ef7..f9c4c8f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewController.kt
@@ -21,7 +21,6 @@
 import android.view.View
 import android.view.ViewGroup
 import android.view.ViewTreeObserver
-
 import com.android.systemui.R
 import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator
 import com.android.systemui.statusbar.phone.userswitcher.StatusBarUserSwitcherController
@@ -32,9 +31,7 @@
 import com.android.systemui.util.ViewController
 import com.android.systemui.util.kotlin.getOrNull
 import com.android.systemui.util.view.ViewUtil
-
 import java.util.Optional
-
 import javax.inject.Inject
 import javax.inject.Named
 
@@ -58,8 +55,8 @@
     override fun onViewAttached() {
         if (moveFromCenterAnimationController == null) return
 
-        val statusBarLeftSide: View = mView.findViewById(R.id.status_bar_left_side)
-        val systemIconArea: ViewGroup = mView.findViewById(R.id.system_icon_area)
+        val statusBarLeftSide: View = mView.findViewById(R.id.status_bar_start_side_except_heads_up)
+        val systemIconArea: ViewGroup = mView.findViewById(R.id.status_bar_end_side_content)
 
         val viewsToAnimate = arrayOf(
             statusBarLeftSide,
@@ -126,11 +123,11 @@
     class StatusBarViewsCenterProvider : UnfoldMoveFromCenterAnimator.ViewCenterProvider {
         override fun getViewCenter(view: View, outPoint: Point) =
             when (view.id) {
-                R.id.status_bar_left_side -> {
+                R.id.status_bar_start_side_except_heads_up -> {
                     // items aligned to the start, return start center point
                     getViewEdgeCenter(view, outPoint, isStart = true)
                 }
-                R.id.system_icon_area -> {
+                R.id.status_bar_end_side_content -> {
                     // items aligned to the end, return end center point
                     getViewEdgeCenter(view, outPoint, isStart = false)
                 }
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 5e7dc11..cb0a148 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
@@ -54,8 +54,8 @@
 import com.android.systemui.dock.DockManager;
 import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
 import com.android.systemui.scrim.ScrimView;
+import com.android.systemui.shade.NotificationPanelViewController;
 import com.android.systemui.statusbar.notification.stack.ViewState;
-import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
 import com.android.systemui.statusbar.policy.ConfigurationController;
 import com.android.systemui.statusbar.policy.KeyguardStateController;
 import com.android.systemui.util.AlarmTimeout;
@@ -265,7 +265,6 @@
             KeyguardUpdateMonitor keyguardUpdateMonitor, DockManager dockManager,
             ConfigurationController configurationController, @Main Executor mainExecutor,
             ScreenOffAnimationController screenOffAnimationController,
-            PanelExpansionStateManager panelExpansionStateManager,
             KeyguardUnlockAnimationController keyguardUnlockAnimationController,
             StatusBarKeyguardViewManager statusBarKeyguardViewManager) {
         mScrimStateListener = lightBarController::setScrimState;
@@ -305,10 +304,6 @@
                 ScrimController.this.onThemeChanged();
             }
         });
-        panelExpansionStateManager.addExpansionListener(
-                event -> setRawPanelExpansionFraction(event.getFraction())
-        );
-
         mColors = new GradientColors();
     }
 
@@ -553,13 +548,12 @@
      *
      * The expansion fraction is tied to the scrim opacity.
      *
-     * See {@link PanelExpansionListener#onPanelExpansionChanged}.
+     * See {@link ScrimShadeTransitionController#onPanelExpansionChanged}.
      *
      * @param rawPanelExpansionFraction From 0 to 1 where 0 means collapsed and 1 expanded.
      */
-     @VisibleForTesting
-     void setRawPanelExpansionFraction(
-            @FloatRange(from = 0.0, to = 1.0) float rawPanelExpansionFraction) {
+    public void setRawPanelExpansionFraction(
+             @FloatRange(from = 0.0, to = 1.0) float rawPanelExpansionFraction) {
         if (isNaN(rawPanelExpansionFraction)) {
             throw new IllegalArgumentException("rawPanelExpansionFraction should not be NaN");
         }
@@ -790,7 +784,8 @@
                 mInFrontAlpha = 0;
             }
 
-            if (mBouncerHiddenFraction != KeyguardBouncer.EXPANSION_HIDDEN) {
+            if (mState == ScrimState.DREAMING
+                    && mBouncerHiddenFraction != KeyguardBouncer.EXPANSION_HIDDEN) {
                 final float interpolatedFraction =
                         BouncerPanelExpansionCalculator.aboutToShowBouncerProgress(
                                 mBouncerHiddenFraction);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ShadeController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ShadeController.java
deleted file mode 100644
index 83ee125..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ShadeController.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the
- * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the specific language governing
- * permissions and limitations under the License.
- */
-
-package com.android.systemui.statusbar.phone;
-
-import com.android.systemui.statusbar.StatusBarState;
-
-/**
- * {@link ShadeController} is an abstraction of the work that used to be hard-coded in
- * {@link CentralSurfaces}. The shade itself represents the concept of the status bar window state,
- * and can be in multiple states: dozing, locked, showing the bouncer, occluded, etc. All/some of
- * these are coordinated with {@link StatusBarKeyguardViewManager} via
- * {@link com.android.systemui.keyguard.KeyguardViewMediator} and others.
- */
-public interface ShadeController {
-
-    /**
-     * Make our window larger and the panel expanded
-     */
-    void instantExpandNotificationsPanel();
-
-    /** See {@link #animateCollapsePanels(int, boolean)}. */
-    void animateCollapsePanels();
-
-    /** See {@link #animateCollapsePanels(int, boolean)}. */
-    void animateCollapsePanels(int flags);
-
-    /**
-     * Collapse the shade animated, showing the bouncer when on {@link StatusBarState#KEYGUARD} or
-     * dismissing {@link CentralSurfaces} when on {@link StatusBarState#SHADE}.
-     */
-    void animateCollapsePanels(int flags, boolean force);
-
-    /** See {@link #animateCollapsePanels(int, boolean)}. */
-    void animateCollapsePanels(int flags, boolean force, boolean delayed);
-
-    /** See {@link #animateCollapsePanels(int, boolean)}. */
-    void animateCollapsePanels(int flags, boolean force, boolean delayed, float speedUpFactor);
-
-    /**
-     * If the notifications panel is not fully expanded, collapse it animated.
-     *
-     * @return Seems to always return false
-     */
-    boolean closeShadeIfOpen();
-
-    /** Returns whether the shade is currently open or opening. */
-    boolean isShadeOpen();
-
-    /**
-     * Add a runnable for NotificationPanelView to post when the panel is expanded.
-     *
-     * @param action the action to post
-     */
-    void postOnShadeExpanded(Runnable action);
-
-    /**
-     * Add a runnable to be executed after the shade collapses. Post-collapse runnables are
-     * aggregated and run serially.
-     *
-     * @param action the action to execute
-     */
-    void addPostCollapseAction(Runnable action);
-
-    /**
-     * Run all of the runnables added by {@link #addPostCollapseAction}.
-     */
-    void runPostCollapseRunnables();
-
-    /**
-     * Close the shade if it was open
-     *
-     * @return true if the shade was open, else false
-     */
-    boolean collapsePanel();
-
-    /**
-     * If {@param animate}, does the same as {@link #collapsePanel()}. Otherwise, instantly collapse
-     * the panel. Post collapse runnables will be executed
-     *
-     * @param animate
-     */
-    void collapsePanel(boolean animate);
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ShadeControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ShadeControllerImpl.java
deleted file mode 100644
index cee8b33..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ShadeControllerImpl.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.systemui.statusbar.phone;
-
-import android.util.Log;
-import android.view.ViewTreeObserver;
-import android.view.WindowManager;
-
-import com.android.systemui.assist.AssistManager;
-import com.android.systemui.dagger.SysUISingleton;
-import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.statusbar.CommandQueue;
-import com.android.systemui.statusbar.NotificationPresenter;
-import com.android.systemui.statusbar.NotificationShadeWindowController;
-import com.android.systemui.statusbar.StatusBarState;
-
-import java.util.ArrayList;
-import java.util.Optional;
-
-import javax.inject.Inject;
-
-import dagger.Lazy;
-
-/** An implementation of {@link com.android.systemui.statusbar.phone.ShadeController}. */
-@SysUISingleton
-public class ShadeControllerImpl implements ShadeController {
-
-    private static final String TAG = "ShadeControllerImpl";
-    private static final boolean SPEW = false;
-
-    private final CommandQueue mCommandQueue;
-    private final StatusBarStateController mStatusBarStateController;
-    protected final NotificationShadeWindowController mNotificationShadeWindowController;
-    private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
-    private final int mDisplayId;
-    protected final Lazy<Optional<CentralSurfaces>> mCentralSurfacesOptionalLazy;
-    private final Lazy<AssistManager> mAssistManagerLazy;
-
-    private final ArrayList<Runnable> mPostCollapseRunnables = new ArrayList<>();
-
-    @Inject
-    public ShadeControllerImpl(
-            CommandQueue commandQueue,
-            StatusBarStateController statusBarStateController,
-            NotificationShadeWindowController notificationShadeWindowController,
-            StatusBarKeyguardViewManager statusBarKeyguardViewManager,
-            WindowManager windowManager,
-            Lazy<Optional<CentralSurfaces>> centralSurfacesOptionalLazy,
-            Lazy<AssistManager> assistManagerLazy
-    ) {
-        mCommandQueue = commandQueue;
-        mStatusBarStateController = statusBarStateController;
-        mNotificationShadeWindowController = notificationShadeWindowController;
-        mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
-        mDisplayId = windowManager.getDefaultDisplay().getDisplayId();
-        // TODO: Remove circular reference to CentralSurfaces when possible.
-        mCentralSurfacesOptionalLazy = centralSurfacesOptionalLazy;
-        mAssistManagerLazy = assistManagerLazy;
-    }
-
-    @Override
-    public void instantExpandNotificationsPanel() {
-        // Make our window larger and the panel expanded.
-        getCentralSurfaces().makeExpandedVisible(true /* force */);
-        getNotificationPanelViewController().expand(false /* animate */);
-        mCommandQueue.recomputeDisableFlags(mDisplayId, false /* animate */);
-    }
-
-    @Override
-    public void animateCollapsePanels() {
-        animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE);
-    }
-
-    @Override
-    public void animateCollapsePanels(int flags) {
-        animateCollapsePanels(flags, false /* force */, false /* delayed */,
-                1.0f /* speedUpFactor */);
-    }
-
-    @Override
-    public void animateCollapsePanels(int flags, boolean force) {
-        animateCollapsePanels(flags, force, false /* delayed */, 1.0f /* speedUpFactor */);
-    }
-
-    @Override
-    public void animateCollapsePanels(int flags, boolean force, boolean delayed) {
-        animateCollapsePanels(flags, force, delayed, 1.0f /* speedUpFactor */);
-    }
-
-    @Override
-    public void animateCollapsePanels(int flags, boolean force, boolean delayed,
-            float speedUpFactor) {
-        if (!force && mStatusBarStateController.getState() != StatusBarState.SHADE) {
-            runPostCollapseRunnables();
-            return;
-        }
-        if (SPEW) {
-            Log.d(TAG, "animateCollapse():"
-                    + " mExpandedVisible=" + getCentralSurfaces().isExpandedVisible()
-                    + " flags=" + flags);
-        }
-
-        // TODO(b/62444020): remove when this bug is fixed
-        Log.v(TAG, "NotificationShadeWindow: " + getNotificationShadeWindowView()
-                + " canPanelBeCollapsed(): "
-                + getNotificationPanelViewController().canPanelBeCollapsed());
-        if (getNotificationShadeWindowView() != null
-                && getNotificationPanelViewController().canPanelBeCollapsed()
-                && (flags & CommandQueue.FLAG_EXCLUDE_NOTIFICATION_PANEL) == 0) {
-            // release focus immediately to kick off focus change transition
-            mNotificationShadeWindowController.setNotificationShadeFocusable(false);
-
-            getCentralSurfaces().getNotificationShadeWindowViewController().cancelExpandHelper();
-            getNotificationPanelViewController()
-                    .collapsePanel(true /* animate */, delayed, speedUpFactor);
-        }
-    }
-
-
-    @Override
-    public boolean closeShadeIfOpen() {
-        if (!getNotificationPanelViewController().isFullyCollapsed()) {
-            mCommandQueue.animateCollapsePanels(
-                    CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL, true /* force */);
-            getCentralSurfaces().visibilityChanged(false);
-            mAssistManagerLazy.get().hideAssist();
-        }
-        return false;
-    }
-
-    @Override
-    public boolean isShadeOpen() {
-        NotificationPanelViewController controller =
-                getNotificationPanelViewController();
-        return controller.isExpanding() || controller.isFullyExpanded();
-    }
-
-    @Override
-    public void postOnShadeExpanded(Runnable executable) {
-        getNotificationPanelViewController().addOnGlobalLayoutListener(
-                new ViewTreeObserver.OnGlobalLayoutListener() {
-                    @Override
-                    public void onGlobalLayout() {
-                        if (getCentralSurfaces().getNotificationShadeWindowView().isVisibleToUser()) {
-                            getNotificationPanelViewController().removeOnGlobalLayoutListener(this);
-                            getNotificationPanelViewController().getView().post(executable);
-                        }
-                    }
-                });
-    }
-
-    @Override
-    public void addPostCollapseAction(Runnable action) {
-        mPostCollapseRunnables.add(action);
-    }
-
-    @Override
-    public void runPostCollapseRunnables() {
-        ArrayList<Runnable> clonedList = new ArrayList<>(mPostCollapseRunnables);
-        mPostCollapseRunnables.clear();
-        int size = clonedList.size();
-        for (int i = 0; i < size; i++) {
-            clonedList.get(i).run();
-        }
-        mStatusBarKeyguardViewManager.readyForKeyguardDone();
-    }
-
-    @Override
-    public boolean collapsePanel() {
-        if (!getNotificationPanelViewController().isFullyCollapsed()) {
-            // close the shade if it was open
-            animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL,
-                    true /* force */, true /* delayed */);
-            getCentralSurfaces().visibilityChanged(false);
-
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    @Override
-    public void collapsePanel(boolean animate) {
-        if (animate) {
-            boolean willCollapse = collapsePanel();
-            if (!willCollapse) {
-                runPostCollapseRunnables();
-            }
-        } else if (!getPresenter().isPresenterFullyCollapsed()) {
-            getCentralSurfaces().instantCollapseNotificationPanel();
-            getCentralSurfaces().visibilityChanged(false);
-        } else {
-            runPostCollapseRunnables();
-        }
-    }
-
-    private CentralSurfaces getCentralSurfaces() {
-        return mCentralSurfacesOptionalLazy.get().get();
-    }
-
-    private NotificationPresenter getPresenter() {
-        return getCentralSurfaces().getPresenter();
-    }
-
-    protected NotificationShadeWindowView getNotificationShadeWindowView() {
-        return getCentralSurfaces().getNotificationShadeWindowView();
-    }
-
-    private NotificationPanelViewController getNotificationPanelViewController() {
-        return getCentralSurfaces().getPanelController();
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarBoundsProvider.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarBoundsProvider.kt
new file mode 100644
index 0000000..f5ba399
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarBoundsProvider.kt
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 android.graphics.Rect
+import android.view.View
+import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentComponent
+import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentModule.END_SIDE_CONTENT
+import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentModule.START_SIDE_CONTENT
+import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentScope
+import com.android.systemui.util.boundsOnScreen
+import javax.inject.Inject
+import javax.inject.Named
+
+/** Provides various bounds within the status bar. */
+@StatusBarFragmentScope
+class StatusBarBoundsProvider
+@Inject
+constructor(
+    private val changeListeners: Set<@JvmSuppressWildcards BoundsChangeListener>,
+    @Named(START_SIDE_CONTENT) private val startSideContent: View,
+    @Named(END_SIDE_CONTENT) private val endSideContent: View,
+) : StatusBarFragmentComponent.Startable {
+
+    interface BoundsChangeListener {
+        fun onStatusBarBoundsChanged()
+    }
+
+    private var previousBounds =
+        BoundsPair(start = startSideContent.boundsOnScreen, end = endSideContent.boundsOnScreen)
+
+    private val layoutListener =
+        View.OnLayoutChangeListener { _, _, _, _, _, _, _, _, _ ->
+            val newBounds = BoundsPair(start = visibleStartSideBounds, end = visibleEndSideBounds)
+            if (previousBounds != newBounds) {
+                previousBounds = newBounds
+                changeListeners.forEach { it.onStatusBarBoundsChanged() }
+            }
+        }
+
+    override fun start() {
+        startSideContent.addOnLayoutChangeListener(layoutListener)
+        endSideContent.addOnLayoutChangeListener(layoutListener)
+    }
+
+    override fun stop() {
+        startSideContent.removeOnLayoutChangeListener(layoutListener)
+        endSideContent.removeOnLayoutChangeListener(layoutListener)
+    }
+
+    /**
+     * Returns the bounds of the end side of the status bar that are visible to the user. The end
+     * side is right when in LTR and is left when in RTL.
+     *
+     * Note that even though the layout might be larger, here we only return the bounds for what is
+     * visible to the user.
+     *
+     * The end side of the status bar contains the multi-user switcher and status icons such as
+     * wi-fi, battery, etc
+     */
+    val visibleEndSideBounds: Rect
+        get() = endSideContent.boundsOnScreen
+
+    /**
+     * Returns the bounds of the start side of the status bar that are visible to the user. The
+     * start side is left when in LTR and is right when in RTL.
+     *
+     * Note that even though the layout might be larger, here we only return the bounds for what is
+     * visible to the user.
+     *
+     * The start side of the status bar contains the operator name, clock, on-going call chip, and
+     * notifications.
+     */
+    val visibleStartSideBounds: Rect
+        get() = startSideContent.boundsOnScreen
+}
+
+private data class BoundsPair(val start: Rect, val end: Rect)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarContentInsetsProvider.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarContentInsetsProvider.kt
index f5462bc..c850d4f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarContentInsetsProvider.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarContentInsetsProvider.kt
@@ -123,7 +123,7 @@
         val point = Point()
         context.display.getRealSize(point)
 
-        return topBounds.left <= 0 || topBounds.right >= point.y
+        return topBounds.left <= 0 || topBounds.right >= point.x
     }
 
     /**
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 50f2169..ebfbf54 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeadsUpChangeListener.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeadsUpChangeListener.java
@@ -17,6 +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.statusbar.NotificationRemoteInputManager;
 import com.android.systemui.statusbar.NotificationShadeWindowController;
 import com.android.systemui.statusbar.StatusBarState;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java
index 31d9266..30b640b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java
@@ -38,7 +38,6 @@
 import com.android.systemui.dagger.SysUISingleton;
 import com.android.systemui.demomode.DemoModeCommandReceiver;
 import com.android.systemui.flags.FeatureFlags;
-import com.android.systemui.flags.Flags;
 import com.android.systemui.plugins.DarkIconDispatcher;
 import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
 import com.android.systemui.statusbar.StatusBarIconView;
@@ -361,9 +360,7 @@
         }
 
         private StatusBarMobileView onCreateStatusBarMobileView(String slot) {
-            StatusBarMobileView view = StatusBarMobileView.fromContext(
-                            mContext, slot,
-                    mFeatureFlags.isEnabled(Flags.COMBINED_STATUS_BAR_SIGNAL_ICONS));
+            StatusBarMobileView view = StatusBarMobileView.fromContext(mContext, slot);
             return view;
         }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java
index a94c2b7..7c31366 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java
@@ -16,6 +16,8 @@
 
 package com.android.systemui.statusbar.phone;
 
+import static com.android.systemui.statusbar.phone.StatusBarIconList.Slot;
+
 import android.annotation.NonNull;
 import android.content.Context;
 import android.graphics.drawable.Icon;
@@ -56,11 +58,12 @@
  * registered with it.
  */
 @SysUISingleton
-public class StatusBarIconControllerImpl extends StatusBarIconList implements Tunable,
+public class StatusBarIconControllerImpl implements Tunable,
         ConfigurationListener, Dumpable, CommandQueue.Callbacks, StatusBarIconController, DemoMode {
 
     private static final String TAG = "StatusBarIconController";
 
+    private final StatusBarIconList mStatusBarIconList;
     private final ArrayList<IconManager> mIconGroups = new ArrayList<>();
     private final ArraySet<String> mIconHideList = new ArraySet<>();
 
@@ -74,15 +77,12 @@
             DemoModeController demoModeController,
             ConfigurationController configurationController,
             TunerService tunerService,
-            DumpManager dumpManager) {
-        super(context.getResources().getStringArray(
-                com.android.internal.R.array.config_statusBarIcons));
-        configurationController.addCallback(this);
-
+            DumpManager dumpManager,
+            StatusBarIconList statusBarIconList) {
+        mStatusBarIconList = statusBarIconList;
         mContext = context;
 
-        loadDimens();
-
+        configurationController.addCallback(this);
         commandQueue.addCallback(this);
         tunerService.addTunable(this, ICON_HIDE_LIST);
         demoModeController.addCallback(this);
@@ -101,15 +101,14 @@
 
         group.setController(this);
         mIconGroups.add(group);
-        List<Slot> allSlots = getSlots();
+        List<Slot> allSlots = mStatusBarIconList.getSlots();
         for (int i = 0; i < allSlots.size(); i++) {
             Slot slot = allSlots.get(i);
             List<StatusBarIconHolder> holders = slot.getHolderListInViewOrder();
             boolean hidden = mIconHideList.contains(slot.getName());
 
             for (StatusBarIconHolder holder : holders) {
-                int tag = holder.getTag();
-                int viewIndex = getViewIndex(getSlotIndex(slot.getName()), holder.getTag());
+                int viewIndex = mStatusBarIconList.getViewIndex(slot.getName(), holder.getTag());
                 group.onIconAdded(viewIndex, slot.getName(), hidden, holder);
             }
         }
@@ -144,7 +143,7 @@
         }
         mIconHideList.clear();
         mIconHideList.addAll(StatusBarIconController.getIconHideList(mContext, newValue));
-        ArrayList<Slot> currentSlots = getSlots();
+        List<Slot> currentSlots = mStatusBarIconList.getSlots();
         ArrayMap<Slot, List<StatusBarIconHolder>> slotsToReAdd = new ArrayMap<>();
 
         // This is a little hacky... Peel off all of the holders on all of the slots
@@ -163,17 +162,13 @@
             List<StatusBarIconHolder> iconsForSlot = slotsToReAdd.get(item);
             if (iconsForSlot == null) continue;
             for (StatusBarIconHolder holder : iconsForSlot) {
-                setIcon(getSlotIndex(item.getName()), holder);
+                setIcon(item.getName(), holder);
             }
         }
     }
 
-    private void loadDimens() {
-    }
-
-    private void addSystemIcon(int index, StatusBarIconHolder holder) {
-        String slot = getSlotName(index);
-        int viewIndex = getViewIndex(index, holder.getTag());
+    private void addSystemIcon(String slot, StatusBarIconHolder holder) {
+        int viewIndex = mStatusBarIconList.getViewIndex(slot, holder.getTag());
         boolean hidden = mIconHideList.contains(slot);
 
         mIconGroups.forEach(l -> l.onIconAdded(viewIndex, slot, hidden, holder));
@@ -182,18 +177,17 @@
     /** */
     @Override
     public void setIcon(String slot, int resourceId, CharSequence contentDescription) {
-        int index = getSlotIndex(slot);
-        StatusBarIconHolder holder = getIcon(index, 0);
+        StatusBarIconHolder holder = mStatusBarIconList.getIconHolder(slot, 0);
         if (holder == null) {
             StatusBarIcon icon = new StatusBarIcon(UserHandle.SYSTEM, mContext.getPackageName(),
                     Icon.createWithResource(
                             mContext, resourceId), 0, 0, contentDescription);
             holder = StatusBarIconHolder.fromIcon(icon);
-            setIcon(index, holder);
+            setIcon(slot, holder);
         } else {
             holder.getIcon().icon = Icon.createWithResource(mContext, resourceId);
             holder.getIcon().contentDescription = contentDescription;
-            handleSet(index, holder);
+            handleSet(slot, holder);
         }
     }
 
@@ -203,21 +197,18 @@
      */
     @Override
     public void setSignalIcon(String slot, WifiIconState state) {
-
-        int index = getSlotIndex(slot);
-
         if (state == null) {
-            removeIcon(index, 0);
+            removeIcon(slot, 0);
             return;
         }
 
-        StatusBarIconHolder holder = getIcon(index, 0);
+        StatusBarIconHolder holder = mStatusBarIconList.getIconHolder(slot, 0);
         if (holder == null) {
             holder = StatusBarIconHolder.fromWifiIconState(state);
-            setIcon(index, holder);
+            setIcon(slot, holder);
         } else {
             holder.setWifiState(state);
-            handleSet(index, holder);
+            handleSet(slot, holder);
         }
     }
 
@@ -229,8 +220,7 @@
      */
     @Override
     public void setMobileIcons(String slot, List<MobileIconState> iconStates) {
-        Slot mobileSlot = getSlot(slot);
-        int slotIndex = getSlotIndex(slot);
+        Slot mobileSlot = mStatusBarIconList.getSlot(slot);
 
         // Reverse the sort order to show icons with left to right([Slot1][Slot2]..).
         // StatusBarIconList has UI design that first items go to the right of second items.
@@ -241,10 +231,10 @@
             StatusBarIconHolder holder = mobileSlot.getHolderForTag(state.subId);
             if (holder == null) {
                 holder = StatusBarIconHolder.fromMobileIconState(state);
-                setIcon(slotIndex, holder);
+                setIcon(slot, holder);
             } else {
                 holder.setMobileState(state);
-                handleSet(slotIndex, holder);
+                handleSet(slot, holder);
             }
         }
     }
@@ -256,21 +246,19 @@
      */
     @Override
     public void setCallStrengthIcons(String slot, List<CallIndicatorIconState> states) {
-        Slot callStrengthSlot = getSlot(slot);
-        int callStrengthSlotIndex = getSlotIndex(slot);
+        Slot callStrengthSlot = mStatusBarIconList.getSlot(slot);
         Collections.reverse(states);
         for (CallIndicatorIconState state : states) {
             if (!state.isNoCalling) {
                 StatusBarIconHolder holder = callStrengthSlot.getHolderForTag(state.subId);
                 if (holder == null) {
                     holder = StatusBarIconHolder.fromCallIndicatorState(mContext, state);
-                    setIcon(callStrengthSlotIndex, holder);
                 } else {
                     holder.setIcon(new StatusBarIcon(UserHandle.SYSTEM, mContext.getPackageName(),
                             Icon.createWithResource(mContext, state.callStrengthResId), 0, 0,
                             state.callStrengthDescription));
-                    setIcon(callStrengthSlotIndex, holder);
                 }
+                setIcon(slot, holder);
             }
             setIconVisibility(slot, !state.isNoCalling, state.subId);
         }
@@ -283,21 +271,19 @@
      */
     @Override
     public void setNoCallingIcons(String slot, List<CallIndicatorIconState> states) {
-        Slot noCallingSlot = getSlot(slot);
-        int noCallingSlotIndex = getSlotIndex(slot);
+        Slot noCallingSlot = mStatusBarIconList.getSlot(slot);
         Collections.reverse(states);
         for (CallIndicatorIconState state : states) {
             if (state.isNoCalling) {
                 StatusBarIconHolder holder = noCallingSlot.getHolderForTag(state.subId);
                 if (holder == null) {
                     holder = StatusBarIconHolder.fromCallIndicatorState(mContext, state);
-                    setIcon(noCallingSlotIndex, holder);
                 } else {
                     holder.setIcon(new StatusBarIcon(UserHandle.SYSTEM, mContext.getPackageName(),
                             Icon.createWithResource(mContext, state.noCallingResId), 0, 0,
                             state.noCallingDescription));
-                    setIcon(noCallingSlotIndex, holder);
                 }
+                setIcon(slot, holder);
             }
             setIconVisibility(slot, state.isNoCalling, state.subId);
         }
@@ -305,42 +291,31 @@
 
     @Override
     public void setExternalIcon(String slot) {
-        int viewIndex = getViewIndex(getSlotIndex(slot), 0);
+        int viewIndex = mStatusBarIconList.getViewIndex(slot, 0);
         int height = mContext.getResources().getDimensionPixelSize(
                 R.dimen.status_bar_icon_drawing_size);
         mIconGroups.forEach(l -> l.onIconExternal(viewIndex, height));
     }
 
     //TODO: remove this (used in command queue and for 3rd party tiles?)
-    @Override
     public void setIcon(String slot, StatusBarIcon icon) {
-        setIcon(getSlotIndex(slot), icon);
-    }
-
-    /**
-     * For backwards compatibility, in the event that someone gives us a slot and a status bar icon
-     */
-    private void setIcon(int index, StatusBarIcon icon) {
-        String slot = getSlotName(index);
         if (icon == null) {
             removeAllIconsForSlot(slot);
             return;
         }
 
         StatusBarIconHolder holder = StatusBarIconHolder.fromIcon(icon);
-        setIcon(index, holder);
+        setIcon(slot, holder);
     }
 
-    /** */
-    @Override
-    public void setIcon(int index, @NonNull StatusBarIconHolder holder) {
-        boolean isNew = getIcon(index, holder.getTag()) == null;
-        super.setIcon(index, holder);
+    private void setIcon(String slot, @NonNull StatusBarIconHolder holder) {
+        boolean isNew = mStatusBarIconList.getIconHolder(slot, holder.getTag()) == null;
+        mStatusBarIconList.setIcon(slot, holder);
 
         if (isNew) {
-            addSystemIcon(index, holder);
+            addSystemIcon(slot, holder);
         } else {
-            handleSet(index, holder);
+            handleSet(slot, holder);
         }
     }
 
@@ -351,34 +326,33 @@
 
     /** */
     public void setIconVisibility(String slot, boolean visibility, int tag) {
-        int index = getSlotIndex(slot);
-        StatusBarIconHolder holder = getIcon(index, tag);
+        StatusBarIconHolder holder = mStatusBarIconList.getIconHolder(slot, tag);
         if (holder == null || holder.isVisible() == visibility) {
             return;
         }
 
         holder.setVisible(visibility);
-        handleSet(index, holder);
+        handleSet(slot, holder);
     }
 
     /** */
     @Override
     public void setIconAccessibilityLiveRegion(String slotName, int accessibilityLiveRegion) {
-        Slot slot = getSlot(slotName);
+        Slot slot = mStatusBarIconList.getSlot(slotName);
         if (!slot.hasIconsInSlot()) {
             return;
         }
 
-        int slotIndex = getSlotIndex(slotName);
         List<StatusBarIconHolder> iconsToUpdate = slot.getHolderListInViewOrder();
         for (StatusBarIconHolder holder : iconsToUpdate) {
-            int viewIndex = getViewIndex(slotIndex, holder.getTag());
+            int viewIndex = mStatusBarIconList.getViewIndex(slotName, holder.getTag());
             mIconGroups.forEach(l -> l.mGroup.getChildAt(viewIndex)
                     .setAccessibilityLiveRegion(accessibilityLiveRegion));
         }
     }
 
     /** */
+    @Override
     public void removeIcon(String slot) {
         removeAllIconsForSlot(slot);
     }
@@ -386,39 +360,34 @@
     /** */
     @Override
     public void removeIcon(String slot, int tag) {
-        removeIcon(getSlotIndex(slot), tag);
+        if (mStatusBarIconList.getIconHolder(slot, tag) == null) {
+            return;
+        }
+        int viewIndex = mStatusBarIconList.getViewIndex(slot, tag);
+        mStatusBarIconList.removeIcon(slot, tag);
+        mIconGroups.forEach(l -> l.onRemoveIcon(viewIndex));
     }
 
     /** */
     @Override
     public void removeAllIconsForSlot(String slotName) {
-        Slot slot = getSlot(slotName);
+        Slot slot = mStatusBarIconList.getSlot(slotName);
         if (!slot.hasIconsInSlot()) {
             return;
         }
 
-        int slotIndex = getSlotIndex(slotName);
         List<StatusBarIconHolder> iconsToRemove = slot.getHolderListInViewOrder();
         for (StatusBarIconHolder holder : iconsToRemove) {
-            int viewIndex = getViewIndex(slotIndex, holder.getTag());
+            int viewIndex = mStatusBarIconList.getViewIndex(slotName, holder.getTag());
             slot.removeForTag(holder.getTag());
             mIconGroups.forEach(l -> l.onRemoveIcon(viewIndex));
         }
     }
 
-    /** */
-    @Override
-    public void removeIcon(int index, int tag) {
-        if (getIcon(index, tag) == null) {
-            return;
-        }
-        super.removeIcon(index, tag);
-        int viewIndex = getViewIndex(index, 0);
-        mIconGroups.forEach(l -> l.onRemoveIcon(viewIndex));
-    }
 
-    private void handleSet(int index, StatusBarIconHolder holder) {
-        int viewIndex = getViewIndex(index, holder.getTag());
+
+    private void handleSet(String slotName, StatusBarIconHolder holder) {
+        int viewIndex = mStatusBarIconList.getViewIndex(slotName, holder.getTag());
         mIconGroups.forEach(l -> l.onSetIconHolder(viewIndex, holder));
     }
 
@@ -438,7 +407,7 @@
             }
         }
 
-        super.dump(pw);
+        mStatusBarIconList.dump(pw);
     }
 
     /** */
@@ -482,7 +451,6 @@
     /** */
     @Override
     public void onDensityOrFontScaleChanged() {
-        loadDimens();
         refreshIconGroups();
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java
index c876c32..8800b05 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java
@@ -25,60 +25,72 @@
 
 import java.io.PrintWriter;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
+/** A class holding the list of all the system icons that could be shown in the status bar. */
 public class StatusBarIconList {
-    private ArrayList<Slot> mSlots = new ArrayList<>();
+    private final ArrayList<Slot> mSlots = new ArrayList<>();
+    private final List<Slot> mViewOnlySlots = Collections.unmodifiableList(mSlots);
 
     public StatusBarIconList(String[] slots) {
         final int N = slots.length;
-        for (int i=0; i < N; i++) {
+        for (int i = 0; i < N; i++) {
             mSlots.add(new Slot(slots[i], null));
         }
     }
 
-    public int getSlotIndex(String slot) {
-        final int N = mSlots.size();
-        for (int i=0; i<N; i++) {
-            Slot item = mSlots.get(i);
-            if (item.getName().equals(slot)) {
-                return i;
-            }
-        }
-        // Auto insert new items at the beginning.
-        mSlots.add(0, new Slot(slot, null));
-        return 0;
+    /** Returns the list of current slots. */
+    public List<Slot> getSlots() {
+        return mViewOnlySlots;
     }
 
-    protected ArrayList<Slot> getSlots() {
-        return new ArrayList<>(mSlots);
+    /**
+     * Gets the slot with the given {@code name}, or creates a new slot if we don't already have a
+     * slot by that name.
+     *
+     * If a new slot is created, that slot will be inserted at the front of the list.
+     *
+     * TODO(b/237533036): Rename this to getOrCreateSlot to make it more clear that it could create
+     *   a new slot. Other methods in this class will also create a new slot if we don't have one,
+     *   should those be re-named too?
+     */
+    public Slot getSlot(String name) {
+        return mSlots.get(findOrInsertSlot(name));
     }
 
-    protected Slot getSlot(String name) {
-        return mSlots.get(getSlotIndex(name));
+    /**
+     * Sets the icon in {@code holder} to be associated with the slot with the given
+     * {@code slotName}.
+     */
+    public void setIcon(String slotName, @NonNull StatusBarIconHolder holder) {
+        mSlots.get(findOrInsertSlot(slotName)).addHolder(holder);
     }
 
-    public int size() {
-        return mSlots.size();
+    /**
+     * Removes the icon holder that we had associated with {@code slotName}'s slot at the given
+     * {@code tag}.
+     */
+    public void removeIcon(String slotName, int tag) {
+        mSlots.get(findOrInsertSlot(slotName)).removeForTag(tag);
     }
 
-    public void setIcon(int index, @NonNull StatusBarIconHolder holder) {
-        mSlots.get(index).addHolder(holder);
+    /**
+     * Returns the icon holder currently associated with {@code slotName}'s slot at the given
+     * {@code tag}, or null if we don't have one.
+     */
+    @Nullable
+    public StatusBarIconHolder getIconHolder(String slotName, int tag) {
+        return mSlots.get(findOrInsertSlot(slotName)).getHolderForTag(tag);
     }
 
-    public void removeIcon(int index, int tag) {
-        mSlots.get(index).removeForTag(tag);
-    }
-
-    public String getSlotName(int index) {
-        return mSlots.get(index).getName();
-    }
-
-    public StatusBarIconHolder getIcon(int index, int tag) {
-        return mSlots.get(index).getHolderForTag(tag);
-    }
-
-    public int getViewIndex(int slotIndex, int tag) {
+    /**
+     * Returns the index of the icon in {@code slotName}'s slot at the given {@code tag}.
+     *
+     * Note that a single slot can have multiple icons, and this function takes that into account.
+     */
+    public int getViewIndex(String slotName, int tag) {
+        int slotIndex = findOrInsertSlot(slotName);
         int count = 0;
         for (int i = 0; i < slotIndex; i++) {
             Slot item = mSlots.get(i);
@@ -100,6 +112,25 @@
         }
     }
 
+    private int findOrInsertSlot(String slot) {
+        final int N = mSlots.size();
+        for (int i = 0; i < N; i++) {
+            Slot item = mSlots.get(i);
+            if (item.getName().equals(slot)) {
+                return i;
+            }
+        }
+        // Auto insert new items at the beginning.
+        mSlots.add(0, new Slot(slot, null));
+        return 0;
+    }
+
+
+    /**
+     * A class representing one slot in the status bar system icons view.
+     *
+     * Note that one slot can have multiple icons associated with it.
+     */
     public static class Slot {
         private final String mName;
         private StatusBarIconHolder mHolder;
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 68d95e8..d5c6f89 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
@@ -56,6 +56,8 @@
 import com.android.systemui.navigationbar.NavigationBarView;
 import com.android.systemui.navigationbar.NavigationModeController;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.shade.NotificationPanelViewController;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.shared.system.QuickStepContract;
 import com.android.systemui.shared.system.SysUiStatsLog;
 import com.android.systemui.statusbar.NotificationMediaManager;
@@ -121,7 +123,7 @@
     @Nullable
     private final FoldAodAnimationController mFoldAodAnimationController;
     private KeyguardMessageAreaController mKeyguardMessageAreaController;
-    private final Lazy<ShadeController> mShadeController;
+    private final Lazy<com.android.systemui.shade.ShadeController> mShadeController;
 
     private final BouncerExpansionCallback mExpansionCallback = new BouncerExpansionCallback() {
         private boolean mBouncerAnimating;
@@ -162,6 +164,10 @@
 
         @Override
         public void onVisibilityChanged(boolean isVisible) {
+            mCentralSurfaces
+                    .setBouncerShowingOverDream(
+                            isVisible && mDreamOverlayStateController.isOverlayActive());
+
             if (!isVisible) {
                 mCentralSurfaces.setBouncerHiddenFraction(KeyguardBouncer.EXPANSION_HIDDEN);
             }
@@ -465,7 +471,8 @@
         showBouncer(scrimmed);
     }
 
-    private boolean shouldShowAltAuth() {
+    /** Whether we should show the alternate authentication instead of the traditional bouncer. */
+    public boolean shouldShowAltAuth() {
         return mAlternateAuthInterceptor != null
                 && mKeyguardUpdateManager.isUnlockingWithBiometricAllowed(true);
     }
@@ -1040,7 +1047,6 @@
         }
 
         if (occluded != mLastOccluded || mFirstUpdate) {
-            mKeyguardUpdateManager.onKeyguardOccludedChanged(occluded);
             mKeyguardStateController.notifyKeyguardState(showing, occluded);
         }
         if ((showing && !occluded) != (mLastShowing && !mLastOccluded) || mFirstUpdate) {
@@ -1069,11 +1075,6 @@
         mCentralSurfaces.onKeyguardViewManagerStatesUpdated();
     }
 
-    private View getCurrentNavBarView() {
-        final NavigationBarView navBarView = mCentralSurfaces.getNavigationBarView();
-        return navBarView != null ? navBarView.getCurrentView() : null;
-    }
-
     /**
      * Updates the visibility of the nav bar window (which will cause insets changes).
      */
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 cf776e3..374f091 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java
@@ -52,21 +52,17 @@
 import com.android.systemui.animation.ActivityLaunchAnimator;
 import com.android.systemui.assist.AssistManager;
 import com.android.systemui.plugins.ActivityStarter;
-import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.statusbar.CommandQueue;
+import com.android.systemui.shade.NotificationPanelViewController;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.statusbar.NotificationClickNotifier;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
 import com.android.systemui.statusbar.NotificationPresenter;
 import com.android.systemui.statusbar.NotificationRemoteInputManager;
-import com.android.systemui.statusbar.notification.NotifPipelineFlags;
 import com.android.systemui.statusbar.notification.NotificationActivityStarter;
-import com.android.systemui.statusbar.notification.NotificationEntryListener;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.NotificationLaunchAnimatorControllerProvider;
 import com.android.systemui.statusbar.notification.collection.NotifPipeline;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
-import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager;
 import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider;
 import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider;
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
@@ -92,33 +88,27 @@
 
     private final Context mContext;
 
-    private final CommandQueue mCommandQueue;
     private final Handler mMainThreadHandler;
     private final Executor mUiBgExecutor;
 
-    private final NotificationEntryManager mEntryManager;
-    private final NotifPipeline mNotifPipeline;
     private final NotificationVisibilityProvider mVisibilityProvider;
     private final HeadsUpManagerPhone mHeadsUpManager;
     private final ActivityStarter mActivityStarter;
     private final NotificationClickNotifier mClickNotifier;
-    private final StatusBarStateController mStatusBarStateController;
     private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
     private final KeyguardManager mKeyguardManager;
     private final IDreamManager mDreamManager;
     private final Optional<BubblesManager> mBubblesManagerOptional;
     private final Lazy<AssistManager> mAssistManagerLazy;
     private final NotificationRemoteInputManager mRemoteInputManager;
-    private final GroupMembershipManager mGroupMembershipManager;
     private final NotificationLockscreenUserManager mLockscreenUserManager;
-    private final ShadeController mShadeController;
+    private final com.android.systemui.shade.ShadeController mShadeController;
     private final KeyguardStateController mKeyguardStateController;
     private final NotificationInterruptStateProvider mNotificationInterruptStateProvider;
     private final LockPatternUtils mLockPatternUtils;
     private final StatusBarRemoteInputCallback mStatusBarRemoteInputCallback;
     private final ActivityIntentHelper mActivityIntentHelper;
 
-    private final NotifPipelineFlags mNotifPipelineFlags;
     private final MetricsLogger mMetricsLogger;
     private final StatusBarNotificationActivityStarterLogger mLogger;
 
@@ -134,23 +124,19 @@
     @Inject
     StatusBarNotificationActivityStarter(
             Context context,
-            CommandQueue commandQueue,
             Handler mainThreadHandler,
             Executor uiBgExecutor,
-            NotificationEntryManager entryManager,
             NotifPipeline notifPipeline,
             NotificationVisibilityProvider visibilityProvider,
             HeadsUpManagerPhone headsUpManager,
             ActivityStarter activityStarter,
             NotificationClickNotifier clickNotifier,
-            StatusBarStateController statusBarStateController,
             StatusBarKeyguardViewManager statusBarKeyguardViewManager,
             KeyguardManager keyguardManager,
             IDreamManager dreamManager,
             Optional<BubblesManager> bubblesManagerOptional,
             Lazy<AssistManager> assistManagerLazy,
             NotificationRemoteInputManager remoteInputManager,
-            GroupMembershipManager groupMembershipManager,
             NotificationLockscreenUserManager lockscreenUserManager,
             ShadeController shadeController,
             KeyguardStateController keyguardStateController,
@@ -158,7 +144,6 @@
             LockPatternUtils lockPatternUtils,
             StatusBarRemoteInputCallback remoteInputCallback,
             ActivityIntentHelper activityIntentHelper,
-            NotifPipelineFlags notifPipelineFlags,
             MetricsLogger metricsLogger,
             StatusBarNotificationActivityStarterLogger logger,
             OnUserInteractionCallback onUserInteractionCallback,
@@ -168,23 +153,18 @@
             ActivityLaunchAnimator activityLaunchAnimator,
             NotificationLaunchAnimatorControllerProvider notificationAnimationProvider) {
         mContext = context;
-        mCommandQueue = commandQueue;
         mMainThreadHandler = mainThreadHandler;
         mUiBgExecutor = uiBgExecutor;
-        mEntryManager = entryManager;
-        mNotifPipeline = notifPipeline;
         mVisibilityProvider = visibilityProvider;
         mHeadsUpManager = headsUpManager;
         mActivityStarter = activityStarter;
         mClickNotifier = clickNotifier;
-        mStatusBarStateController = statusBarStateController;
         mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
         mKeyguardManager = keyguardManager;
         mDreamManager = dreamManager;
         mBubblesManagerOptional = bubblesManagerOptional;
         mAssistManagerLazy = assistManagerLazy;
         mRemoteInputManager = remoteInputManager;
-        mGroupMembershipManager = groupMembershipManager;
         mLockscreenUserManager = lockscreenUserManager;
         mShadeController = shadeController;
         mKeyguardStateController = keyguardStateController;
@@ -192,7 +172,6 @@
         mLockPatternUtils = lockPatternUtils;
         mStatusBarRemoteInputCallback = remoteInputCallback;
         mActivityIntentHelper = activityIntentHelper;
-        mNotifPipelineFlags = notifPipelineFlags;
         mMetricsLogger = metricsLogger;
         mLogger = logger;
         mOnUserInteractionCallback = onUserInteractionCallback;
@@ -203,21 +182,12 @@
         mActivityLaunchAnimator = activityLaunchAnimator;
         mNotificationAnimationProvider = notificationAnimationProvider;
 
-        if (!mNotifPipelineFlags.isNewPipelineEnabled()) {
-            mEntryManager.addNotificationEntryListener(new NotificationEntryListener() {
-                @Override
-                public void onPendingEntryAdded(NotificationEntry entry) {
-                    handleFullScreenIntent(entry);
-                }
-            });
-        } else {
-            mNotifPipeline.addCollectionListener(new NotifCollectionListener() {
-                @Override
-                public void onEntryAdded(NotificationEntry entry) {
-                    handleFullScreenIntent(entry);
-                }
-            });
-        }
+        notifPipeline.addCollectionListener(new NotifCollectionListener() {
+            @Override
+            public void onEntryAdded(NotificationEntry entry) {
+                handleFullScreenIntent(entry);
+            }
+        });
     }
 
     /**
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 aa061d7..6996ee7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenter.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationPresenter.java
@@ -30,19 +30,17 @@
 import android.util.Slog;
 import android.view.View;
 import android.view.accessibility.AccessibilityManager;
-import android.widget.TextView;
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.internal.statusbar.IStatusBarService;
-import com.android.internal.widget.MessagingGroup;
-import com.android.internal.widget.MessagingMessage;
-import com.android.keyguard.KeyguardUpdateMonitor;
 import com.android.systemui.Dependency;
 import com.android.systemui.ForegroundServiceNotificationListener;
 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.statusbar.CommandQueue;
 import com.android.systemui.statusbar.KeyguardIndicationController;
 import com.android.systemui.statusbar.LockscreenShadeTransitionController;
@@ -51,13 +49,11 @@
 import com.android.systemui.statusbar.NotificationPresenter;
 import com.android.systemui.statusbar.NotificationRemoteInputManager;
 import com.android.systemui.statusbar.NotificationShadeWindowController;
-import com.android.systemui.statusbar.NotificationViewHierarchyManager;
 import com.android.systemui.statusbar.StatusBarState;
 import com.android.systemui.statusbar.SysuiStatusBarStateController;
 import com.android.systemui.statusbar.notification.AboveShelfObserver;
 import com.android.systemui.statusbar.notification.DynamicPrivacyController;
 import com.android.systemui.statusbar.notification.NotifPipelineFlags;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinderImpl;
 import com.android.systemui.statusbar.notification.collection.render.NotifShadeEventSource;
@@ -72,40 +68,31 @@
 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.ConfigurationController;
 import com.android.systemui.statusbar.policy.KeyguardStateController;
 
-import java.util.List;
-
 import javax.inject.Inject;
 
 @CentralSurfacesComponent.CentralSurfacesScope
 class StatusBarNotificationPresenter implements NotificationPresenter,
-        ConfigurationController.ConfigurationListener,
         NotificationRowBinderImpl.BindRowCallback,
         CommandQueue.Callbacks {
     private static final String TAG = "StatusBarNotificationPresenter";
 
     private final ActivityStarter mActivityStarter;
     private final KeyguardStateController mKeyguardStateController;
-    private final NotificationViewHierarchyManager mViewHierarchyManager;
     private final NotificationLockscreenUserManager mLockscreenUserManager;
     private final SysuiStatusBarStateController mStatusBarStateController;
     private final NotifShadeEventSource mNotifShadeEventSource;
-    private final NotificationEntryManager mEntryManager;
     private final NotificationMediaManager mMediaManager;
     private final NotificationGutsManager mGutsManager;
-    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
     private final LockscreenGestureLogger mLockscreenGestureLogger;
 
     private final NotificationPanelViewController mNotificationPanel;
     private final HeadsUpManagerPhone mHeadsUpManager;
     private final AboveShelfObserver mAboveShelfObserver;
     private final DozeScrimController mDozeScrimController;
-    private final ScrimController mScrimController;
     private final KeyguardIndicationController mKeyguardIndicationController;
     private final CentralSurfaces mCentralSurfaces;
-    private final ShadeController mShadeController;
     private final LockscreenShadeTransitionController mShadeTransitionController;
     private final CommandQueue mCommandQueue;
 
@@ -116,42 +103,34 @@
     private final IStatusBarService mBarService;
     private final DynamicPrivacyController mDynamicPrivacyController;
     private final NotificationListContainer mNotifListContainer;
-    private boolean mReinflateNotificationsOnUserSwitched;
-    private boolean mDispatchUiModeChangeOnUserSwitched;
-    private TextView mNotificationPanelDebugText;
 
     protected boolean mVrMode;
 
     @Inject
-    StatusBarNotificationPresenter(Context context,
+    StatusBarNotificationPresenter(
+            Context context,
             NotificationPanelViewController panel,
             HeadsUpManagerPhone headsUp,
             NotificationShadeWindowView statusBarWindow,
             ActivityStarter activityStarter,
             NotificationStackScrollLayoutController stackScrollerController,
             DozeScrimController dozeScrimController,
-            ScrimController scrimController,
             NotificationShadeWindowController notificationShadeWindowController,
             DynamicPrivacyController dynamicPrivacyController,
             KeyguardStateController keyguardStateController,
             KeyguardIndicationController keyguardIndicationController,
             CentralSurfaces centralSurfaces,
-            ShadeController shadeController,
             LockscreenShadeTransitionController shadeTransitionController,
             CommandQueue commandQueue,
-            NotificationViewHierarchyManager notificationViewHierarchyManager,
             NotificationLockscreenUserManager lockscreenUserManager,
             SysuiStatusBarStateController sysuiStatusBarStateController,
             NotifShadeEventSource notifShadeEventSource,
-            NotificationEntryManager notificationEntryManager,
             NotificationMediaManager notificationMediaManager,
             NotificationGutsManager notificationGutsManager,
-            KeyguardUpdateMonitor keyguardUpdateMonitor,
             LockscreenGestureLogger lockscreenGestureLogger,
             InitController initController,
             NotificationInterruptStateProvider notificationInterruptStateProvider,
             NotificationRemoteInputManager remoteInputManager,
-            ConfigurationController configurationController,
             NotifPipelineFlags notifPipelineFlags,
             NotificationRemoteInputManager.Callback remoteInputManagerCallback,
             NotificationListContainer notificationListContainer) {
@@ -163,17 +142,13 @@
         mKeyguardIndicationController = keyguardIndicationController;
         // TODO: use KeyguardStateController#isOccluded to remove this dependency
         mCentralSurfaces = centralSurfaces;
-        mShadeController = shadeController;
         mShadeTransitionController = shadeTransitionController;
         mCommandQueue = commandQueue;
-        mViewHierarchyManager = notificationViewHierarchyManager;
         mLockscreenUserManager = lockscreenUserManager;
         mStatusBarStateController = sysuiStatusBarStateController;
         mNotifShadeEventSource = notifShadeEventSource;
-        mEntryManager = notificationEntryManager;
         mMediaManager = notificationMediaManager;
         mGutsManager = notificationGutsManager;
-        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
         mLockscreenGestureLogger = lockscreenGestureLogger;
         mAboveShelfObserver = new AboveShelfObserver(stackScrollerController.getView());
         mNotificationShadeWindowController = notificationShadeWindowController;
@@ -182,7 +157,6 @@
                 R.id.notification_container_parent));
         mAccessibilityManager = context.getSystemService(AccessibilityManager.class);
         mDozeScrimController = dozeScrimController;
-        mScrimController = scrimController;
         mKeyguardManager = context.getSystemService(KeyguardManager.class);
         mBarService = IStatusBarService.Stub.asInterface(
                 ServiceManager.getService(Context.STATUS_BAR_SERVICE));
@@ -203,23 +177,13 @@
 
         initController.addPostInitTask(() -> {
             mKeyguardIndicationController.init();
-            mViewHierarchyManager.setUpWithPresenter(this,
-                    stackScrollerController.getNotifStackController(),
-                    mNotifListContainer);
             mNotifShadeEventSource.setShadeEmptiedCallback(this::maybeClosePanelForShadeEmptied);
             mNotifShadeEventSource.setNotifRemovedByUserCallback(this::maybeEndAmbientPulse);
-            if (!mNotifPipelineFlags.isNewPipelineEnabled()) {
-                mEntryManager.setUpWithPresenter(this);
-                mEntryManager.addNotificationLifetimeExtender(mHeadsUpManager);
-                mEntryManager.addNotificationLifetimeExtender(mGutsManager);
-                mEntryManager.addNotificationLifetimeExtenders(
-                        remoteInputManager.getLifetimeExtenders());
-            }
             notificationInterruptStateProvider.addSuppressor(mInterruptSuppressor);
             mLockscreenUserManager.setUpWithPresenter(this);
             mMediaManager.setUpWithPresenter(this);
             mGutsManager.setUpWithPresenter(
-                    this, mNotifListContainer, mCheckSaveListener, mOnSettingsClickListener);
+                    this, mNotifListContainer, mOnSettingsClickListener);
             // ForegroundServiceNotificationListener adds its listener in its constructor
             // but we need to request it here in order for it to be instantiated.
             // TODO: figure out how to do this correctly once Dependency.get() is gone.
@@ -227,7 +191,6 @@
 
             onUserSwitched(mLockscreenUserManager.getCurrentUserId());
         });
-        configurationController.addCallback(this);
     }
 
     /** Called when the shade has been emptied to attempt to close the shade */
@@ -242,65 +205,6 @@
     }
 
     @Override
-    public void onDensityOrFontScaleChanged() {
-        // TODO(b/145659174): Remove legacy pipeline code
-        if (mNotifPipelineFlags.isNewPipelineEnabled()) return;
-        MessagingMessage.dropCache();
-        MessagingGroup.dropCache();
-        if (!mKeyguardUpdateMonitor.isSwitchingUser()) {
-            updateNotificationsOnDensityOrFontScaleChanged();
-        } else {
-            mReinflateNotificationsOnUserSwitched = true;
-        }
-    }
-
-    @Override
-    public void onUiModeChanged() {
-        // TODO(b/145659174): Remove legacy pipeline code
-        if (mNotifPipelineFlags.isNewPipelineEnabled()) return;
-        if (!mKeyguardUpdateMonitor.isSwitchingUser()) {
-            updateNotificationsOnUiModeChanged();
-        } else {
-            mDispatchUiModeChangeOnUserSwitched = true;
-        }
-    }
-
-    @Override
-    public void onThemeChanged() {
-        onDensityOrFontScaleChanged();
-    }
-
-    private void updateNotificationsOnUiModeChanged() {
-        // TODO(b/145659174): Remove legacy pipeline code
-        if (mNotifPipelineFlags.isNewPipelineEnabled()) return;
-        List<NotificationEntry> userNotifications =
-                mEntryManager.getActiveNotificationsForCurrentUser();
-        for (int i = 0; i < userNotifications.size(); i++) {
-            NotificationEntry entry = userNotifications.get(i);
-            ExpandableNotificationRow row = entry.getRow();
-            if (row != null) {
-                row.onUiModeChanged();
-            }
-        }
-    }
-
-    private void updateNotificationsOnDensityOrFontScaleChanged() {
-        // TODO(b/145659174): Remove legacy pipeline code
-        if (mNotifPipelineFlags.isNewPipelineEnabled()) return;
-        List<NotificationEntry> userNotifications =
-                mEntryManager.getActiveNotificationsForCurrentUser();
-        for (int i = 0; i < userNotifications.size(); i++) {
-            NotificationEntry entry = userNotifications.get(i);
-            entry.onDensityOrFontScaleChanged();
-            boolean exposedGuts = entry.areGutsExposed();
-            if (exposedGuts) {
-                mGutsManager.onDensityOrFontScaleChanged(entry);
-            }
-        }
-    }
-
-
-    @Override
     public boolean isCollapsing() {
         return mNotificationPanel.isCollapsing()
                 || mNotificationShadeWindowController.isLaunchingActivity();
@@ -316,41 +220,12 @@
     }
 
     @Override
-    public void updateNotificationViews(final String reason) {
-        if (!mNotifPipelineFlags.checkLegacyPipelineEnabled()) {
-            return;
-        }
-        // The function updateRowStates depends on both of these being non-null, so check them here.
-        // We may be called before they are set from DeviceProvisionedController's callback.
-        if (mScrimController == null) return;
-
-        // Do not modify the notifications during collapse.
-        if (isCollapsing()) {
-            mShadeController.addPostCollapseAction(() -> updateNotificationViews(reason));
-            return;
-        }
-        mViewHierarchyManager.updateNotificationViews();
-        mNotificationPanel.updateNotificationViews(reason);
-    }
-
-    @Override
     public void onUserSwitched(int newUserId) {
         // Begin old BaseStatusBar.userSwitched
         mHeadsUpManager.setUser(newUserId);
         // End old BaseStatusBar.userSwitched
         if (MULTIUSER_DEBUG) mNotificationPanel.setHeaderDebugInfo("USER " + newUserId);
         mCommandQueue.animateCollapsePanels();
-        if (!mNotifPipelineFlags.isNewPipelineEnabled()) {
-            if (mReinflateNotificationsOnUserSwitched) {
-                updateNotificationsOnDensityOrFontScaleChanged();
-                mReinflateNotificationsOnUserSwitched = false;
-            }
-            if (mDispatchUiModeChangeOnUserSwitched) {
-                updateNotificationsOnUiModeChanged();
-                mDispatchUiModeChangeOnUserSwitched = false;
-            }
-            updateNotificationViews("user switched");
-        }
         mMediaManager.clearCurrentMediaNotification();
         mCentralSurfaces.setLockscreenUser(newUserId);
         updateMediaMetaData(true, false);
@@ -398,11 +273,6 @@
     }
 
     @Override
-    public void onUpdateRowStates() {
-        mNotificationPanel.onUpdateRowStates();
-    }
-
-    @Override
     public void onExpandClicked(NotificationEntry clickedEntry, View clickedView,
             boolean nowExpanded) {
         mHeadsUpManager.setExpanded(clickedEntry, nowExpanded);
@@ -494,7 +364,8 @@
                 return true;
             }
 
-            if (sbn.getNotification().fullScreenIntent != null) {
+            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
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java
index 262dc83..40b9a15 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallback.java
@@ -37,6 +37,7 @@
 import com.android.systemui.dagger.qualifiers.Main;
 import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.statusbar.ActionClickLogger;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.CommandQueue.Callbacks;
@@ -66,7 +67,7 @@
     private final ActivityStarter mActivityStarter;
     private final Context mContext;
     private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
-    private final ShadeController mShadeController;
+    private final com.android.systemui.shade.ShadeController mShadeController;
     private Executor mExecutor;
     private final ActivityIntentHelper mActivityIntentHelper;
     private final GroupExpansionManager mGroupExpansionManager;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java
index ee242a4..492734e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java
@@ -26,8 +26,6 @@
 import com.android.settingslib.mobile.TelephonyIcons;
 import com.android.systemui.R;
 import com.android.systemui.dagger.SysUISingleton;
-import com.android.systemui.flags.FeatureFlags;
-import com.android.systemui.flags.Flags;
 import com.android.systemui.statusbar.connectivity.IconState;
 import com.android.systemui.statusbar.connectivity.MobileDataIndicators;
 import com.android.systemui.statusbar.connectivity.NetworkController;
@@ -66,7 +64,6 @@
     private final Handler mHandler = Handler.getMain();
     private final CarrierConfigTracker mCarrierConfigTracker;
     private final TunerService mTunerService;
-    private final FeatureFlags mFeatureFlags;
 
     private boolean mHideAirplane;
     private boolean mHideMobile;
@@ -90,8 +87,7 @@
             CarrierConfigTracker carrierConfigTracker,
             NetworkController networkController,
             SecurityController securityController,
-            TunerService tunerService,
-            FeatureFlags featureFlags
+            TunerService tunerService
     ) {
         mContext = context;
 
@@ -100,7 +96,6 @@
         mNetworkController = networkController;
         mSecurityController = securityController;
         mTunerService = tunerService;
-        mFeatureFlags = featureFlags;
 
         mSlotAirplane = mContext.getString(com.android.internal.R.string.status_bar_airplane);
         mSlotMobile   = mContext.getString(com.android.internal.R.string.status_bar_mobile);
@@ -378,40 +373,6 @@
     }
 
     @Override
-    public void setConnectivityStatus(boolean noDefaultNetwork, boolean noValidatedNetwork,
-            boolean noNetworksAvailable) {
-        if (!mFeatureFlags.isEnabled(Flags.COMBINED_STATUS_BAR_SIGNAL_ICONS)) {
-            return;
-        }
-        if (DEBUG) {
-            Log.d(TAG, "setConnectivityStatus: "
-                    + "noDefaultNetwork = " + noDefaultNetwork + ","
-                    + "noValidatedNetwork = " + noValidatedNetwork + ","
-                    + "noNetworksAvailable = " + noNetworksAvailable);
-        }
-        WifiIconState newState = mWifiIconState.copy();
-        newState.noDefaultNetwork = noDefaultNetwork;
-        newState.noValidatedNetwork = noValidatedNetwork;
-        newState.noNetworksAvailable = noNetworksAvailable;
-        newState.slot = mSlotWifi;
-        newState.airplaneSpacerVisible = mIsAirplaneMode;
-        if (noDefaultNetwork && noNetworksAvailable && !mIsAirplaneMode) {
-            newState.visible = true;
-            newState.resId = R.drawable.ic_qs_no_internet_unavailable;
-        } else if (noDefaultNetwork && !noNetworksAvailable
-                && (!mIsAirplaneMode || (mIsAirplaneMode && mIsWifiEnabled))) {
-            newState.visible = true;
-            newState.resId = R.drawable.ic_qs_no_internet_available;
-        } else {
-            newState.visible = false;
-            newState.resId = 0;
-        }
-        updateWifiIconWithState(newState);
-        mWifiIconState = newState;
-    }
-
-
-    @Override
     public void setEthernetIndicators(IconState state) {
         boolean visible = state.visible && !mHideEthernet;
         int resId = state.icon;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java
index 4e90900..75dac1a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarTouchableRegionManager.java
@@ -136,8 +136,9 @@
      * Notify that the status bar panel gets expanded or collapsed.
      *
      * @param isExpanded True to notify expanded, false to notify collapsed.
+     * TODO(b/237811427) replace with a listener
      */
-    void setPanelExpanded(boolean isExpanded) {
+    public void setPanelExpanded(boolean isExpanded) {
         if (isExpanded != mIsStatusBarExpanded) {
             mIsStatusBarExpanded = isExpanded;
             if (isExpanded) {
@@ -153,7 +154,7 @@
      * any existing display cutouts (notch)
      * @return the heads up notification touch area
      */
-    Region calculateTouchableRegion() {
+    public Region calculateTouchableRegion() {
         // Update touchable region for HeadsUp notifications
         final Region headsUpTouchableRegion = mHeadsUpManager.getTouchableRegion();
         if (headsUpTouchableRegion != null) {
@@ -222,7 +223,7 @@
         }
     }
 
-    void updateRegionForNotch(Region touchableRegion) {
+    public void updateRegionForNotch(Region touchableRegion) {
         WindowInsets windowInsets = mNotificationShadeWindowView.getRootWindowInsets();
         if (windowInsets == null) {
             Log.w(TAG, "StatusBarWindowView is not attached.");
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowCallback.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowCallback.java
index ac43b67..ae48c2d3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowCallback.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowCallback.java
@@ -17,5 +17,5 @@
 
 public interface StatusBarWindowCallback {
     void onStateChanged(boolean keyguardShowing, boolean keyguardOccluded, boolean bouncerShowing,
-            boolean isDozing);
+            boolean isDozing, boolean panelExpanded);
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemBarAttributesListener.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemBarAttributesListener.kt
new file mode 100644
index 0000000..a0415f2
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemBarAttributesListener.kt
@@ -0,0 +1,158 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 android.view.InsetsVisibilities
+import android.view.WindowInsetsController.Appearance
+import android.view.WindowInsetsController.Behavior
+import com.android.internal.statusbar.LetterboxDetails
+import com.android.internal.view.AppearanceRegion
+import com.android.systemui.dump.DumpManager
+import com.android.systemui.flags.FeatureFlags
+import com.android.systemui.flags.Flags
+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
+
+/**
+ * Top-level listener of system attributes changed. This class is __always the first__ one to be
+ * notified about changes.
+ *
+ * It is responsible for modifying any attributes if necessary, and then notifying the other
+ * downstream listeners.
+ */
+@CentralSurfacesScope
+class SystemBarAttributesListener
+@Inject
+internal constructor(
+    private val centralSurfaces: CentralSurfaces,
+    private val featureFlags: FeatureFlags,
+    private val letterboxAppearanceCalculator: LetterboxAppearanceCalculator,
+    private val statusBarStateController: SysuiStatusBarStateController,
+    private val lightBarController: LightBarController,
+    private val dumpManager: DumpManager,
+) : CentralSurfacesComponent.Startable, 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)
+    }
+
+    override fun onStatusBarBoundsChanged() {
+        val params = lastSystemBarAttributesParams
+        if (params != null && shouldUseLetterboxAppearance(params.letterboxesArray)) {
+            onSystemBarAttributesChanged(
+                params.displayId,
+                params.appearance,
+                params.appearanceRegionsArray,
+                params.navbarColorManagedByIme,
+                params.behavior,
+                params.requestedVisibilities,
+                params.packageName,
+                params.letterboxesArray)
+        }
+    }
+
+    fun onSystemBarAttributesChanged(
+        displayId: Int,
+        @Appearance originalAppearance: Int,
+        originalAppearanceRegions: Array<AppearanceRegion>,
+        navbarColorManagedByIme: Boolean,
+        @Behavior behavior: Int,
+        requestedVisibilities: InsetsVisibilities,
+        packageName: String,
+        letterboxDetails: Array<LetterboxDetails>
+    ) {
+        lastSystemBarAttributesParams =
+            SystemBarAttributesParams(
+                displayId,
+                originalAppearance,
+                originalAppearanceRegions.toList(),
+                navbarColorManagedByIme,
+                behavior,
+                requestedVisibilities,
+                packageName,
+                letterboxDetails.toList())
+
+        val (appearance, appearanceRegions) =
+            modifyAppearanceIfNeeded(
+                originalAppearance, originalAppearanceRegions, letterboxDetails)
+
+        val barModeChanged = centralSurfaces.setAppearance(appearance)
+
+        lightBarController.onStatusBarAppearanceChanged(
+            appearanceRegions, barModeChanged, centralSurfaces.barMode, navbarColorManagedByIme)
+
+        centralSurfaces.updateBubblesVisibility()
+        statusBarStateController.setSystemBarAttributes(
+            appearance, behavior, requestedVisibilities, packageName)
+    }
+
+    private fun modifyAppearanceIfNeeded(
+        appearance: Int,
+        appearanceRegions: Array<AppearanceRegion>,
+        letterboxDetails: Array<LetterboxDetails>
+    ): Pair<Int, Array<AppearanceRegion>> =
+        if (shouldUseLetterboxAppearance(letterboxDetails)) {
+            val letterboxAppearance =
+                letterboxAppearanceCalculator.getLetterboxAppearance(
+                    appearance, appearanceRegions, letterboxDetails)
+            lastLetterboxAppearance = letterboxAppearance
+            Pair(letterboxAppearance.appearance, letterboxAppearance.appearanceRegions)
+        } else {
+            lastLetterboxAppearance = null
+            Pair(appearance, appearanceRegions)
+        }
+
+    private fun shouldUseLetterboxAppearance(letterboxDetails: Array<LetterboxDetails>) =
+        isLetterboxAppearanceFlagEnabled() && letterboxDetails.isNotEmpty()
+
+    private fun isLetterboxAppearanceFlagEnabled() =
+        featureFlags.isEnabled(Flags.STATUS_BAR_LETTERBOX_APPEARANCE)
+
+    private fun dump(printWriter: PrintWriter, strings: Array<String>) {
+        printWriter.println("lastSystemBarAttributesParams: $lastSystemBarAttributesParams")
+        printWriter.println("lastLetterboxAppearance: $lastLetterboxAppearance")
+        printWriter.println("letterbox appearance flag: ${isLetterboxAppearanceFlagEnabled()}")
+    }
+}
+
+/**
+ * Keeps track of the parameters passed in
+ * [SystemBarAttributesListener.onSystemBarAttributesChanged].
+ */
+private data class SystemBarAttributesParams(
+    val displayId: Int,
+    @Appearance val appearance: Int,
+    val appearanceRegions: List<AppearanceRegion>,
+    val navbarColorManagedByIme: Boolean,
+    @Behavior val behavior: Int,
+    val requestedVisibilities: InsetsVisibilities,
+    val packageName: String,
+    val letterboxes: List<LetterboxDetails>,
+) {
+    val letterboxesArray = letterboxes.toTypedArray()
+    val appearanceRegionsArray = appearanceRegions.toTypedArray()
+}
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 36a0456..26bc3e3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java
@@ -93,6 +93,17 @@
     }
 
     public SystemUIDialog(Context context, int theme, boolean dismissOnDeviceLock) {
+        // TODO(b/219008720): Remove those calls to Dependency.get by introducing a
+        // SystemUIDialogFactory and make all other dialogs create a SystemUIDialog to which we set
+        // the content and attach listeners.
+        this(context, theme, dismissOnDeviceLock, Dependency.get(SystemUIDialogManager.class),
+                Dependency.get(SysUiState.class), Dependency.get(BroadcastDispatcher.class),
+                Dependency.get(DialogLaunchAnimator.class));
+    }
+
+    public SystemUIDialog(Context context, int theme, boolean dismissOnDeviceLock,
+            SystemUIDialogManager dialogManager, SysUiState sysUiState,
+            BroadcastDispatcher broadcastDispatcher, DialogLaunchAnimator dialogLaunchAnimator) {
         super(context, theme);
         mContext = context;
 
@@ -101,13 +112,10 @@
         attrs.setTitle(getClass().getSimpleName());
         getWindow().setAttributes(attrs);
 
-        mDismissReceiver = dismissOnDeviceLock ? new DismissReceiver(this) : null;
-
-        // TODO(b/219008720): Remove those calls to Dependency.get by introducing a
-        // SystemUIDialogFactory and make all other dialogs create a SystemUIDialog to which we set
-        // the content and attach listeners.
-        mDialogManager = Dependency.get(SystemUIDialogManager.class);
-        mSysUiState = Dependency.get(SysUiState.class);
+        mDismissReceiver = dismissOnDeviceLock ? new DismissReceiver(this, broadcastDispatcher,
+                dialogLaunchAnimator) : null;
+        mDialogManager = dialogManager;
+        mSysUiState = sysUiState;
     }
 
     @Override
@@ -326,7 +334,10 @@
      * @param dismissAction An action to run when the dialog is dismissed.
      */
     public static void registerDismissListener(Dialog dialog, @Nullable Runnable dismissAction) {
-        DismissReceiver dismissReceiver = new DismissReceiver(dialog);
+        // TODO(b/219008720): Remove those calls to Dependency.get.
+        DismissReceiver dismissReceiver = new DismissReceiver(dialog,
+                Dependency.get(BroadcastDispatcher.class),
+                Dependency.get(DialogLaunchAnimator.class));
         dialog.setOnDismissListener(d -> {
             dismissReceiver.unregister();
             if (dismissAction != null) dismissAction.run();
@@ -408,11 +419,11 @@
         private final BroadcastDispatcher mBroadcastDispatcher;
         private final DialogLaunchAnimator mDialogLaunchAnimator;
 
-        DismissReceiver(Dialog dialog) {
+        DismissReceiver(Dialog dialog, BroadcastDispatcher broadcastDispatcher,
+                DialogLaunchAnimator dialogLaunchAnimator) {
             mDialog = dialog;
-            // TODO(b/219008720): Remove those calls to Dependency.get.
-            mBroadcastDispatcher = Dependency.get(BroadcastDispatcher.class);
-            mDialogLaunchAnimator = Dependency.get(DialogLaunchAnimator.class);
+            mBroadcastDispatcher = broadcastDispatcher;
+            mDialogLaunchAnimator = dialogLaunchAnimator;
         }
 
         void register() {
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 c5e5297..64b04e9 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
@@ -22,6 +22,10 @@
 
 import com.android.keyguard.LockIconViewController;
 import com.android.systemui.biometrics.AuthRippleController;
+import com.android.systemui.shade.LargeScreenShadeHeaderController;
+import com.android.systemui.shade.NotificationPanelViewController;
+import com.android.systemui.shade.NotificationShadeWindowView;
+import com.android.systemui.shade.NotificationShadeWindowViewController;
 import com.android.systemui.statusbar.NotificationPresenter;
 import com.android.systemui.statusbar.NotificationShelfController;
 import com.android.systemui.statusbar.core.StatusBarInitializer;
@@ -32,10 +36,6 @@
 import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutListContainerModule;
 import com.android.systemui.statusbar.phone.CentralSurfacesCommandQueueCallbacks;
 import com.android.systemui.statusbar.phone.CentralSurfacesImpl;
-import com.android.systemui.statusbar.phone.LargeScreenShadeHeaderController;
-import com.android.systemui.statusbar.phone.NotificationPanelViewController;
-import com.android.systemui.statusbar.phone.NotificationShadeWindowView;
-import com.android.systemui.statusbar.phone.NotificationShadeWindowViewController;
 import com.android.systemui.statusbar.phone.StatusBarHeadsUpChangeListener;
 import com.android.systemui.statusbar.phone.StatusBarNotificationActivityStarterModule;
 import com.android.systemui.statusbar.phone.StatusBarNotificationPresenterModule;
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 21e5ad5..b0532d7 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,13 +16,34 @@
 
 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 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 06532c4..c4e7a8a 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
@@ -30,27 +30,35 @@
 import com.android.systemui.biometrics.AuthRippleView;
 import com.android.systemui.broadcast.BroadcastDispatcher;
 import com.android.systemui.dagger.qualifiers.Main;
+import com.android.systemui.dump.DumpManager;
 import com.android.systemui.flags.FeatureFlags;
 import com.android.systemui.flags.Flags;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.privacy.OngoingPrivacyChip;
+import com.android.systemui.shade.CombinedShadeHeadersConstraintManager;
+import com.android.systemui.shade.CombinedShadeHeadersConstraintManagerImpl;
+import com.android.systemui.shade.NotificationPanelView;
+import com.android.systemui.shade.NotificationPanelViewController;
+import com.android.systemui.shade.NotificationShadeWindowView;
+import com.android.systemui.shade.NotificationsQuickSettingsContainer;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.NotificationShelf;
 import com.android.systemui.statusbar.NotificationShelfController;
 import com.android.systemui.statusbar.OperatorNameViewController;
 import com.android.systemui.statusbar.connectivity.NetworkController;
+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.stack.NotificationStackScrollLayout;
+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.NotificationPanelView;
-import com.android.systemui.statusbar.phone.NotificationPanelViewController;
-import com.android.systemui.statusbar.phone.NotificationShadeWindowView;
-import com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer;
+import com.android.systemui.statusbar.phone.StatusBarBoundsProvider;
 import com.android.systemui.statusbar.phone.StatusBarHideIconsForBouncerManager;
 import com.android.systemui.statusbar.phone.StatusBarIconController;
 import com.android.systemui.statusbar.phone.StatusBarLocationPublisher;
 import com.android.systemui.statusbar.phone.StatusIconContainer;
+import com.android.systemui.statusbar.phone.SystemBarAttributesListener;
 import com.android.systemui.statusbar.phone.TapAgainView;
 import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment;
 import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragmentLogger;
@@ -68,8 +76,10 @@
 
 import javax.inject.Named;
 
+import dagger.Binds;
 import dagger.Module;
 import dagger.Provides;
+import dagger.multibindings.IntoSet;
 
 @Module(subcomponents = StatusBarFragmentComponent.class)
 public abstract class StatusBarViewModule {
@@ -177,6 +187,14 @@
     /** */
     @Provides
     @CentralSurfacesComponent.CentralSurfacesScope
+    public static CombinedShadeHeadersConstraintManager
+            provideCombinedShadeHeadersConstraintManager() {
+        return CombinedShadeHeadersConstraintManagerImpl.INSTANCE;
+    }
+
+    /** */
+    @Provides
+    @CentralSurfacesComponent.CentralSurfacesScope
     public static OngoingPrivacyChip getSplitShadeOngoingPrivacyChip(
             @Named(LARGE_SCREEN_SHADE_HEADER) View header) {
         return header.findViewById(R.id.privacy_chip);
@@ -236,6 +254,17 @@
         return notificationShadeWindowView.findViewById(R.id.notification_container_parent);
     }
 
+    @Binds
+    @IntoSet
+    abstract OnStatusBarViewInitializedListener statusBarInitializedListener(
+            LetterboxAppearanceCalculator letterboxAppearanceCalculator
+    );
+
+    @Binds
+    @IntoSet
+    abstract StatusBarBoundsProvider.BoundsChangeListener sysBarAttrsListenerAsBoundsListener(
+            SystemBarAttributesListener systemBarAttributesListener);
+
     /**
      * Creates a new {@link CollapsedStatusBarFragment}.
      *
@@ -268,7 +297,8 @@
             CollapsedStatusBarFragmentLogger collapsedStatusBarFragmentLogger,
             OperatorNameViewController.Factory operatorNameViewControllerFactory,
             SecureSettings secureSettings,
-            @Main Executor mainExecutor
+            @Main Executor mainExecutor,
+            DumpManager dumpManager
     ) {
         return new CollapsedStatusBarFragment(statusBarFragmentComponentFactory,
                 ongoingCallController,
@@ -288,6 +318,20 @@
                 collapsedStatusBarFragmentLogger,
                 operatorNameViewControllerFactory,
                 secureSettings,
-                mainExecutor);
+                mainExecutor,
+                dumpManager);
     }
+
+    /**
+     * Constructs a new, unattached {@link KeyguardBottomAreaView}.
+     *
+     * Note that this is explicitly _not_ a singleton, as we want to be able to reinflate it
+     */
+    @Provides
+    public static KeyguardBottomAreaView providesKeyguardBottomAreaView(
+            NotificationPanelView npv, LayoutInflater layoutInflater) {
+        return (KeyguardBottomAreaView) layoutInflater.inflate(R
+                .layout.keyguard_bottom_area, npv, false);
+    }
+
 }
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 cf1edf9..29b4d5b 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
@@ -34,6 +34,8 @@
 import android.os.UserHandle;
 import android.provider.Settings;
 import android.telephony.SubscriptionManager;
+import android.util.ArrayMap;
+import android.util.IndentingPrintWriter;
 import android.util.SparseArray;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -43,11 +45,14 @@
 
 import androidx.annotation.VisibleForTesting;
 
+import com.android.systemui.Dumpable;
 import com.android.systemui.R;
 import com.android.systemui.animation.Interpolators;
 import com.android.systemui.dagger.qualifiers.Main;
+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.statusbar.CommandQueue;
 import com.android.systemui.statusbar.DisableFlagsLogger.DisableState;
 import com.android.systemui.statusbar.OperatorNameView;
@@ -59,13 +64,13 @@
 import com.android.systemui.statusbar.events.SystemStatusAnimationCallback;
 import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler;
 import com.android.systemui.statusbar.phone.NotificationIconAreaController;
-import com.android.systemui.statusbar.phone.NotificationPanelViewController;
 import com.android.systemui.statusbar.phone.PhoneStatusBarView;
 import com.android.systemui.statusbar.phone.StatusBarHideIconsForBouncerManager;
 import com.android.systemui.statusbar.phone.StatusBarIconController;
 import com.android.systemui.statusbar.phone.StatusBarIconController.DarkIconManager;
 import com.android.systemui.statusbar.phone.StatusBarLocationPublisher;
 import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentComponent;
+import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentComponent.Startable;
 import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController;
 import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallListener;
 import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
@@ -76,9 +81,12 @@
 import com.android.systemui.util.CarrierConfigTracker.DefaultDataSubscriptionChangedListener;
 import com.android.systemui.util.settings.SecureSettings;
 
+import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.Executor;
 
 /**
@@ -89,7 +97,7 @@
 @SuppressLint("ValidFragment")
 public class CollapsedStatusBarFragment extends Fragment implements CommandQueue.Callbacks,
         StatusBarStateController.StateListener,
-        SystemStatusAnimationCallback {
+        SystemStatusAnimationCallback, Dumpable {
 
     public static final String TAG = "CollapsedStatusBarFragment";
     private static final String EXTRA_PANEL_STATE = "panel_state";
@@ -102,7 +110,7 @@
     private final KeyguardStateController mKeyguardStateController;
     private final NotificationPanelViewController mNotificationPanelViewController;
     private final NetworkController mNetworkController;
-    private LinearLayout mSystemIconArea;
+    private LinearLayout mEndSideContent;
     private View mClockView;
     private View mOngoingCallChip;
     private View mNotificationIconAreaInner;
@@ -124,8 +132,10 @@
     private final StatusBarHideIconsForBouncerManager mStatusBarHideIconsForBouncerManager;
     private final SecureSettings mSecureSettings;
     private final Executor mMainExecutor;
+    private final DumpManager mDumpManager;
 
     private List<String> mBlockedIcons = new ArrayList<>();
+    private Map<Startable, Startable.State> mStartableStates = new ArrayMap<>();
 
     private SignalCallback mSignalCallback = new SignalCallback() {
         @Override
@@ -185,7 +195,8 @@
             CollapsedStatusBarFragmentLogger collapsedStatusBarFragmentLogger,
             OperatorNameViewController.Factory operatorNameViewControllerFactory,
             SecureSettings secureSettings,
-            @Main Executor mainExecutor
+            @Main Executor mainExecutor,
+            DumpManager dumpManager
     ) {
         mStatusBarFragmentComponentFactory = statusBarFragmentComponentFactory;
         mOngoingCallController = ongoingCallController;
@@ -206,6 +217,7 @@
         mOperatorNameViewControllerFactory = operatorNameViewControllerFactory;
         mSecureSettings = secureSettings;
         mMainExecutor = mainExecutor;
+        mDumpManager = dumpManager;
     }
 
     @Override
@@ -217,8 +229,15 @@
     @Override
     public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
+        mDumpManager.registerDumpable(getClass().getSimpleName(), this);
         mStatusBarFragmentComponent = mStatusBarFragmentComponentFactory.create(this);
         mStatusBarFragmentComponent.init();
+        mStartableStates.clear();
+        for (Startable startable : mStatusBarFragmentComponent.getStartables()) {
+            mStartableStates.put(startable, Startable.State.STARTING);
+            startable.start();
+            mStartableStates.put(startable, Startable.State.STARTED);
+        }
 
         mStatusBar = (PhoneStatusBarView) view;
         View contents = mStatusBar.findViewById(R.id.status_bar_contents);
@@ -232,16 +251,16 @@
         mDarkIconManager.setShouldLog(true);
         updateBlockedIcons();
         mStatusBarIconController.addIconGroup(mDarkIconManager);
-        mSystemIconArea = mStatusBar.findViewById(R.id.system_icon_area);
+        mEndSideContent = mStatusBar.findViewById(R.id.status_bar_end_side_content);
         mClockView = mStatusBar.findViewById(R.id.clock);
         mOngoingCallChip = mStatusBar.findViewById(R.id.ongoing_call_chip);
-        showSystemIconArea(false);
+        showEndSideContent(false);
         showClock(false);
         initEmergencyCryptkeeperText();
         initOperatorName();
         initNotificationIconArea();
         mSystemEventAnimator =
-                new StatusBarSystemEventAnimator(mSystemIconArea, getResources());
+                new StatusBarSystemEventAnimator(mEndSideContent, getResources());
         mCarrierConfigTracker.addCallback(mCarrierConfigCallback);
         mCarrierConfigTracker.addDefaultDataSubscriptionChangedListener(mDefaultDataListener);
     }
@@ -321,6 +340,13 @@
         }
         mCarrierConfigTracker.removeCallback(mCarrierConfigCallback);
         mCarrierConfigTracker.removeDataSubscriptionChangedListener(mDefaultDataListener);
+
+        for (Startable startable : mStatusBarFragmentComponent.getStartables()) {
+            mStartableStates.put(startable, Startable.State.STOPPING);
+            startable.stop();
+            mStartableStates.put(startable, Startable.State.STOPPED);
+        }
+        mDumpManager.unregisterDumpable(getClass().getSimpleName());
     }
 
     /** Initializes views related to the notification icon area. */
@@ -370,10 +396,10 @@
         mDisabled2 = state2;
         if ((diff1 & DISABLE_SYSTEM_INFO) != 0 || ((diff2 & DISABLE2_SYSTEM_ICONS) != 0)) {
             if ((state1 & DISABLE_SYSTEM_INFO) != 0 || ((state2 & DISABLE2_SYSTEM_ICONS) != 0)) {
-                hideSystemIconArea(animate);
+                hideEndSideContent(animate);
                 hideOperatorName(animate);
             } else {
-                showSystemIconArea(animate);
+                showEndSideContent(animate);
                 showOperatorName(animate);
             }
         }
@@ -474,19 +500,19 @@
         return mStatusBarHideIconsForBouncerManager.getShouldHideStatusBarIconsForBouncer();
     }
 
-    private void hideSystemIconArea(boolean animate) {
-        animateHide(mSystemIconArea, animate);
+    private void hideEndSideContent(boolean animate) {
+        animateHide(mEndSideContent, animate);
     }
 
-    private void showSystemIconArea(boolean animate) {
+    private void showEndSideContent(boolean animate) {
         // Only show the system icon area if we are not currently animating
         int state = mAnimationScheduler.getAnimationState();
         if (state == IDLE || state == SHOWING_PERSISTENT_DOT) {
-            animateShow(mSystemIconArea, animate);
+            animateShow(mEndSideContent, animate);
         } else {
             // We are in the middle of a system status event animation, which will animate the
             // alpha (but not the visibility). Allow the view to become visible again
-            mSystemIconArea.setVisibility(View.VISIBLE);
+            mEndSideContent.setVisibility(View.VISIBLE);
         }
     }
 
@@ -674,4 +700,23 @@
                     updateStatusBarLocation(left, right);
                 }
             };
+
+    @Override
+    public void dump(PrintWriter printWriter, String[] args) {
+        IndentingPrintWriter pw = new IndentingPrintWriter(printWriter, /* singleIndent= */"  ");
+        StatusBarFragmentComponent component = mStatusBarFragmentComponent;
+        if (component == null) {
+            pw.println("StatusBarFragmentComponent is null");
+        } else {
+            Set<Startable> startables = component.getStartables();
+            pw.println("Startables: " + startables.size());
+            pw.increaseIndent();
+            for (Startable startable : startables) {
+                Startable.State startableState = mStartableStates.getOrDefault(startable,
+                        Startable.State.NONE);
+                pw.println(startable + ", state: " + startableState);
+            }
+            pw.decreaseIndent();
+        }
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/dagger/StatusBarFragmentComponent.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/dagger/StatusBarFragmentComponent.java
index 6717bc7..d9a5844 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/dagger/StatusBarFragmentComponent.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/dagger/StatusBarFragmentComponent.java
@@ -23,9 +23,12 @@
 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.StatusBarBoundsProvider;
 import com.android.systemui.statusbar.phone.StatusBarDemoMode;
 import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment;
 
+import java.util.Set;
+
 import dagger.BindsInstance;
 import dagger.Subcomponent;
 
@@ -41,7 +44,10 @@
  * should be included here or in {@link StatusBarFragmentModule}.
  */
 
-@Subcomponent(modules = {StatusBarFragmentModule.class})
+@Subcomponent(modules = {
+        StatusBarFragmentModule.class,
+        StatusBarStartablesModule.class
+})
 @StatusBarFragmentScope
 public interface StatusBarFragmentComponent {
     /** Simple factory. */
@@ -52,6 +58,18 @@
     }
 
     /**
+     * Performs initialization logic after {@link StatusBarFragmentComponent} has been constructed.
+     */
+    interface Startable {
+        void start();
+        void stop();
+
+        enum State {
+            NONE, STARTING, STARTED, STOPPING, STOPPED
+        }
+    }
+
+    /**
      * Initialize anything extra for the component. Must be called after the component is created.
      */
     default void init() {
@@ -92,4 +110,10 @@
     /** */
     @StatusBarFragmentScope
     PhoneStatusBarTransitions getPhoneStatusBarTransitions();
+
+    /** */
+    Set<Startable> getStartables();
+
+    /** */
+    StatusBarBoundsProvider getBoundsProvider();
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/dagger/StatusBarFragmentModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/dagger/StatusBarFragmentModule.java
index d5f5362..41f1f95 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/dagger/StatusBarFragmentModule.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/dagger/StatusBarFragmentModule.java
@@ -21,11 +21,12 @@
 import com.android.systemui.R;
 import com.android.systemui.battery.BatteryMeterView;
 import com.android.systemui.dagger.qualifiers.RootView;
+import com.android.systemui.shade.NotificationPanelViewController;
 import com.android.systemui.statusbar.HeadsUpStatusBarView;
-import com.android.systemui.statusbar.phone.NotificationPanelViewController;
 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.StatusBarBoundsProvider;
 import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment;
 import com.android.systemui.statusbar.phone.userswitcher.StatusBarUserSwitcherContainer;
 import com.android.systemui.statusbar.phone.userswitcher.StatusBarUserSwitcherController;
@@ -34,12 +35,14 @@
 import com.android.systemui.statusbar.window.StatusBarWindowController;
 
 import java.util.Optional;
+import java.util.Set;
 
 import javax.inject.Named;
 
 import dagger.Binds;
 import dagger.Module;
 import dagger.Provides;
+import dagger.multibindings.Multibinds;
 
 /** Dagger module for {@link StatusBarFragmentComponent}. */
 @Module
@@ -48,6 +51,8 @@
     String LIGHTS_OUT_NOTIF_VIEW = "lights_out_notif_view";
     String OPERATOR_NAME_VIEW = "operator_name_view";
     String OPERATOR_NAME_FRAME_VIEW = "operator_name_frame_view";
+    String START_SIDE_CONTENT = "start_side_content";
+    String END_SIDE_CONTENT = "end_side_content";
 
     /** */
     @Provides
@@ -68,6 +73,22 @@
     /** */
     @Provides
     @StatusBarFragmentScope
+    @Named(START_SIDE_CONTENT)
+    static View startSideContent(@RootView PhoneStatusBarView view) {
+        return view.findViewById(R.id.status_bar_start_side_content);
+    }
+
+    /** */
+    @Provides
+    @StatusBarFragmentScope
+    @Named(END_SIDE_CONTENT)
+    static View endSideContent(@RootView PhoneStatusBarView view) {
+        return view.findViewById(R.id.status_bar_end_side_content);
+    }
+
+    /** */
+    @Provides
+    @StatusBarFragmentScope
     @Named(LIGHTS_OUT_NOTIF_VIEW)
     static View provideLightsOutNotifView(@RootView PhoneStatusBarView view) {
         return view.findViewById(R.id.notification_lights_out);
@@ -138,4 +159,8 @@
     static HeadsUpStatusBarView providesHeasdUpStatusBarView(@RootView PhoneStatusBarView view) {
         return view.findViewById(R.id.heads_up_status_bar_view);
     }
+
+    /** */
+    @Multibinds
+    Set<StatusBarBoundsProvider.BoundsChangeListener> boundsChangeListeners();
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/dagger/StatusBarStartablesModule.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/dagger/StatusBarStartablesModule.kt
new file mode 100644
index 0000000..9003d13
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/dagger/StatusBarStartablesModule.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.fragment.dagger
+
+import com.android.systemui.statusbar.phone.StatusBarBoundsProvider
+import dagger.Binds
+import dagger.Module
+import dagger.multibindings.IntoSet
+
+@Module
+internal interface StatusBarStartablesModule {
+
+    @Binds
+    @IntoSet
+    fun statusBarBoundsCalculator(
+        statusBarBoundsProvider: StatusBarBoundsProvider
+    ): StatusBarFragmentComponent.Startable
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/panelstate/PanelExpansionChangeEvent.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/panelstate/PanelExpansionChangeEvent.kt
index c0384b4..7c61b29 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/panelstate/PanelExpansionChangeEvent.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/panelstate/PanelExpansionChangeEvent.kt
@@ -1,3 +1,18 @@
+/*
+ * 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.
+ */
 package com.android.systemui.statusbar.phone.panelstate
 
 import android.annotation.FloatRange
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/panelstate/PanelExpansionStateManager.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/panelstate/PanelExpansionStateManager.kt
index 911e750..a6160aa 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/panelstate/PanelExpansionStateManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/panelstate/PanelExpansionStateManager.kt
@@ -20,6 +20,7 @@
 import android.util.Log
 import androidx.annotation.FloatRange
 import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.util.Compile
 import javax.inject.Inject
 
 /**
@@ -109,8 +110,8 @@
 
         debugLog(
             "panelExpansionChanged:" +
-                    "start state=${oldState.stateToString()} " +
-                    "end state=${state.stateToString()} " +
+                    "start state=${oldState.panelStateToString()} " +
+                    "end state=${state.panelStateToString()} " +
                     "f=$fraction " +
                     "expanded=$expanded " +
                     "tracking=$tracking" +
@@ -126,14 +127,15 @@
 
     /** Updates the panel state if necessary. */
     fun updateState(@PanelState state: Int) {
-        debugLog("update state: ${this.state.stateToString()} -> ${state.stateToString()}")
+        debugLog(
+            "update state: ${this.state.panelStateToString()} -> ${state.panelStateToString()}")
         if (this.state != state) {
             updateStateInternal(state)
         }
     }
 
     private fun updateStateInternal(@PanelState state: Int) {
-        debugLog("go state: ${this.state.stateToString()} -> ${state.stateToString()}")
+        debugLog("go state: ${this.state.panelStateToString()} -> ${state.panelStateToString()}")
         this.state = state
         stateListeners.forEach { it.onPanelStateChanged(state) }
     }
@@ -154,7 +156,7 @@
 const val STATE_OPEN = 2
 
 @PanelState
-private fun Int.stateToString(): String {
+fun Int.panelStateToString(): String {
     return when (this) {
         STATE_CLOSED -> "CLOSED"
         STATE_OPENING -> "OPENING"
@@ -163,5 +165,5 @@
     }
 }
 
-private const val DEBUG = false
 private val TAG = PanelExpansionStateManager::class.simpleName
+private val DEBUG = Compile.IS_DEBUG && Log.isLoggable(TAG, Log.DEBUG)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/NoOpOverScroller.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/NoOpOverScroller.kt
deleted file mode 100644
index 2789db8..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/NoOpOverScroller.kt
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.android.systemui.statusbar.phone.shade.transition
-
-import javax.inject.Inject
-
-/**
- * An implementation on [ShadeOverScroller] that does nothing.
- *
- * At the moment there is only a concrete implementation [ShadeOverScroller] for split-shade, so
- * this one is used when we are not in split-shade.
- */
-class NoOpOverScroller @Inject constructor() : ShadeOverScroller {
-    override fun onPanelStateChanged(newPanelState: Int) {}
-    override fun onDragDownAmountChanged(newDragDownAmount: Float) {}
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/ShadeOverScroller.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/ShadeOverScroller.kt
deleted file mode 100644
index f1cedeb..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/ShadeOverScroller.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.android.systemui.statusbar.phone.shade.transition
-
-import com.android.systemui.statusbar.phone.panelstate.PanelState
-
-/** Represents an over scroller for the non-lockscreen shade. */
-interface ShadeOverScroller {
-
-    fun onPanelStateChanged(@PanelState newPanelState: Int)
-
-    fun onDragDownAmountChanged(newDragDownAmount: Float)
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/ShadeTransitionController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/ShadeTransitionController.kt
deleted file mode 100644
index 2762b9a..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/ShadeTransitionController.kt
+++ /dev/null
@@ -1,73 +0,0 @@
-package com.android.systemui.statusbar.phone.shade.transition
-
-import android.content.Context
-import android.content.res.Configuration
-import com.android.systemui.R
-import com.android.systemui.dagger.SysUISingleton
-import com.android.systemui.plugins.qs.QS
-import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
-import com.android.systemui.statusbar.phone.NotificationPanelViewController
-import com.android.systemui.statusbar.phone.panelstate.PanelExpansionChangeEvent
-import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager
-import com.android.systemui.statusbar.phone.panelstate.PanelState
-import com.android.systemui.statusbar.policy.ConfigurationController
-import javax.inject.Inject
-
-/** Controls the shade expansion transition on non-lockscreen. */
-@SysUISingleton
-class ShadeTransitionController
-@Inject
-constructor(
-    configurationController: ConfigurationController,
-    panelExpansionStateManager: PanelExpansionStateManager,
-    private val context: Context,
-    private val splitShadeOverScrollerFactory: SplitShadeOverScroller.Factory,
-    private val noOpOverScroller: NoOpOverScroller
-) {
-
-    lateinit var notificationPanelViewController: NotificationPanelViewController
-    lateinit var notificationStackScrollLayoutController: NotificationStackScrollLayoutController
-    lateinit var qs: QS
-
-    private var inSplitShade = false
-
-    private val splitShadeOverScroller by lazy {
-        splitShadeOverScrollerFactory.create(qs, notificationStackScrollLayoutController)
-    }
-    private val shadeOverScroller: ShadeOverScroller
-        get() =
-            if (inSplitShade && propertiesInitialized()) {
-                splitShadeOverScroller
-            } else {
-                noOpOverScroller
-            }
-
-    init {
-        updateResources()
-        configurationController.addCallback(
-            object : ConfigurationController.ConfigurationListener {
-                override fun onConfigChanged(newConfig: Configuration?) {
-                    updateResources()
-                }
-            })
-        panelExpansionStateManager.addExpansionListener(this::onPanelExpansionChanged)
-        panelExpansionStateManager.addStateListener(this::onPanelStateChanged)
-    }
-
-    private fun updateResources() {
-        inSplitShade = context.resources.getBoolean(R.bool.config_use_split_notification_shade)
-    }
-
-    private fun onPanelStateChanged(@PanelState state: Int) {
-        shadeOverScroller.onPanelStateChanged(state)
-    }
-
-    private fun onPanelExpansionChanged(event: PanelExpansionChangeEvent) {
-        shadeOverScroller.onDragDownAmountChanged(event.dragDownPxAmount)
-    }
-
-    private fun propertiesInitialized() =
-        this::qs.isInitialized &&
-            this::notificationPanelViewController.isInitialized &&
-            this::notificationStackScrollLayoutController.isInitialized
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/SplitShadeOverScroller.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/SplitShadeOverScroller.kt
deleted file mode 100644
index 71050f2..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/shade/transition/SplitShadeOverScroller.kt
+++ /dev/null
@@ -1,142 +0,0 @@
-package com.android.systemui.statusbar.phone.shade.transition
-
-import android.animation.Animator
-import android.animation.ValueAnimator
-import android.content.Context
-import android.content.res.Configuration
-import android.util.MathUtils
-import com.android.internal.annotations.VisibleForTesting
-import com.android.systemui.R
-import com.android.systemui.animation.Interpolators
-import com.android.systemui.dump.DumpManager
-import com.android.systemui.plugins.qs.QS
-import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
-import com.android.systemui.statusbar.phone.ScrimController
-import com.android.systemui.statusbar.phone.panelstate.PanelState
-import com.android.systemui.statusbar.phone.panelstate.STATE_CLOSED
-import com.android.systemui.statusbar.phone.panelstate.STATE_OPENING
-import com.android.systemui.statusbar.policy.ConfigurationController
-import dagger.assisted.Assisted
-import dagger.assisted.AssistedFactory
-import dagger.assisted.AssistedInject
-import java.io.PrintWriter
-
-class SplitShadeOverScroller
-@AssistedInject
-constructor(
-    configurationController: ConfigurationController,
-    dumpManager: DumpManager,
-    private val context: Context,
-    private val scrimController: ScrimController,
-    @Assisted private val qS: QS,
-    @Assisted private val nsslController: NotificationStackScrollLayoutController
-) : ShadeOverScroller {
-
-    private var releaseOverScrollDuration = 0L
-    private var maxOverScrollAmount = 0
-    private var previousOverscrollAmount = 0
-    private var dragDownAmount: Float = 0f
-    @PanelState private var panelState: Int = STATE_CLOSED
-    private var releaseOverScrollAnimator: Animator? = null
-
-    init {
-        updateResources()
-        configurationController.addCallback(
-            object : ConfigurationController.ConfigurationListener {
-                override fun onConfigChanged(newConfig: Configuration?) {
-                    updateResources()
-                }
-            })
-        dumpManager.registerDumpable(this::dump)
-    }
-
-    private fun updateResources() {
-        val resources = context.resources
-        maxOverScrollAmount = resources.getDimensionPixelSize(R.dimen.shade_max_over_scroll_amount)
-        releaseOverScrollDuration =
-            resources.getInteger(R.integer.lockscreen_shade_over_scroll_release_duration).toLong()
-    }
-
-    override fun onPanelStateChanged(@PanelState newPanelState: Int) {
-        if (shouldReleaseOverscroll(previousState = panelState, newState = newPanelState)) {
-            releaseOverScroll()
-        }
-        panelState = newPanelState
-    }
-
-    override fun onDragDownAmountChanged(newDragDownAmount: Float) {
-        if (dragDownAmount == newDragDownAmount) {
-            return
-        }
-        dragDownAmount = newDragDownAmount
-        if (shouldOverscroll()) {
-            overScroll(newDragDownAmount)
-        }
-    }
-
-    private fun shouldOverscroll() = panelState == STATE_OPENING
-
-    private fun shouldReleaseOverscroll(@PanelState previousState: Int, @PanelState newState: Int) =
-        previousState == STATE_OPENING && newState != STATE_OPENING
-
-    private fun overScroll(dragDownAmount: Float) {
-        val overscrollAmount: Int = calculateOverscrollAmount(dragDownAmount)
-        applyOverscroll(overscrollAmount)
-        previousOverscrollAmount = overscrollAmount
-    }
-
-    private fun calculateOverscrollAmount(dragDownAmount: Float): Int {
-        val fullHeight: Int = nsslController.height
-        val fullHeightProgress: Float = MathUtils.saturate(dragDownAmount / fullHeight)
-        return (fullHeightProgress * maxOverScrollAmount).toInt()
-    }
-
-    private fun applyOverscroll(overscrollAmount: Int) {
-        qS.setOverScrollAmount(overscrollAmount)
-        scrimController.setNotificationsOverScrollAmount(overscrollAmount)
-        nsslController.setOverScrollAmount(overscrollAmount)
-    }
-
-    private fun releaseOverScroll() {
-        val animator = ValueAnimator.ofInt(previousOverscrollAmount, 0)
-        animator.addUpdateListener {
-            val overScrollAmount = it.animatedValue as Int
-            qS.setOverScrollAmount(overScrollAmount)
-            scrimController.setNotificationsOverScrollAmount(overScrollAmount)
-            nsslController.setOverScrollAmount(overScrollAmount)
-        }
-        animator.interpolator = Interpolators.STANDARD
-        animator.duration = releaseOverScrollDuration
-        animator.start()
-        releaseOverScrollAnimator = animator
-        previousOverscrollAmount = 0
-    }
-
-    @VisibleForTesting
-    internal fun finishAnimations() {
-        releaseOverScrollAnimator?.end()
-        releaseOverScrollAnimator = null
-    }
-
-    private fun dump(pw: PrintWriter, strings: Array<String>) {
-        pw.println(
-            """
-            SplitShadeOverScroller:
-                Resources:
-                    releaseOverScrollDuration: $releaseOverScrollDuration
-                    maxOverScrollAmount: $maxOverScrollAmount
-                State:
-                    previousOverscrollAmount: $previousOverscrollAmount
-                    dragDownAmount: $dragDownAmount
-                    panelState: $panelState
-            """.trimIndent())
-    }
-
-    @AssistedFactory
-    fun interface Factory {
-        fun create(
-            qS: QS,
-            nsslController: NotificationStackScrollLayoutController
-        ): SplitShadeOverScroller
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/ConnectivityInfoCollector.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/ConnectivityInfoCollector.kt
new file mode 100644
index 0000000..6c02b0d
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/ConnectivityInfoCollector.kt
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.pipeline
+
+import com.android.systemui.statusbar.pipeline.repository.NetworkCapabilityInfo
+import kotlinx.coroutines.flow.StateFlow
+
+/**
+ * Interface exposing a flow for raw connectivity information. Clients should collect on
+ * [rawConnectivityInfoFlow] to get updates on connectivity information.
+ *
+ * Note: [rawConnectivityInfoFlow] should be a *hot* flow, so that we only create one instance of it
+ * and all clients get references to the same flow.
+ *
+ * This will be used for the new status bar pipeline to compile information we need to display some
+ * of the icons in the RHS of the status bar.
+ */
+interface ConnectivityInfoCollector {
+    val rawConnectivityInfoFlow: StateFlow<RawConnectivityInfo>
+}
+
+/**
+ * An object containing all of the raw connectivity information.
+ *
+ * Importantly, all the information in this object should not be processed at all (i.e., the data
+ * that we receive from callbacks should be piped straight into this object and not be filtered,
+ * manipulated, or processed in any way). Instead, any listeners on
+ * [ConnectivityInfoCollector.rawConnectivityInfoFlow] can do the processing.
+ *
+ * This allows us to keep all the processing in one place which is beneficial for logging and
+ * debugging purposes.
+ */
+data class RawConnectivityInfo(
+        val networkCapabilityInfo: Map<Int, NetworkCapabilityInfo> = emptyMap(),
+)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/ConnectivityInfoCollectorImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/ConnectivityInfoCollectorImpl.kt
new file mode 100644
index 0000000..8d69422
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/ConnectivityInfoCollectorImpl.kt
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.pipeline
+
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dagger.qualifiers.Application
+import com.android.systemui.statusbar.pipeline.repository.NetworkCapabilitiesRepo
+import kotlinx.coroutines.CoroutineScope
+import javax.inject.Inject
+import kotlinx.coroutines.flow.SharingStarted.Companion.Lazily
+import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.flow.stateIn
+
+/**
+ * The real implementation of [ConnectivityInfoCollector] that will collect information from all the
+ * relevant connectivity callbacks and compile it into [rawConnectivityInfoFlow].
+ */
+@SysUISingleton
+class ConnectivityInfoCollectorImpl @Inject constructor(
+        networkCapabilitiesRepo: NetworkCapabilitiesRepo,
+        @Application scope: CoroutineScope,
+) : ConnectivityInfoCollector {
+    override val rawConnectivityInfoFlow: StateFlow<RawConnectivityInfo> =
+            // TODO(b/238425913): Collect all the separate flows for individual raw information into
+            //   this final flow.
+            networkCapabilitiesRepo.dataStream
+                    .map {
+                        RawConnectivityInfo(networkCapabilityInfo = it)
+                    }
+                    .stateIn(scope, started = Lazily, initialValue = RawConnectivityInfo())
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/ConnectivityInfoProcessor.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/ConnectivityInfoProcessor.kt
new file mode 100644
index 0000000..1aae250
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/ConnectivityInfoProcessor.kt
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.pipeline
+
+import android.content.Context
+import com.android.systemui.CoreStartable
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dagger.qualifiers.Application
+import com.android.systemui.statusbar.pipeline.repository.NetworkCapabilityInfo
+import javax.inject.Inject
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.SharingStarted.Companion.Lazily
+import kotlinx.coroutines.flow.emptyFlow
+import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.flow.stateIn
+
+/**
+ * A processor that transforms raw connectivity information that we get from callbacks and turns it
+ * into a list of displayable connectivity information.
+ *
+ * This will be used for the new status bar pipeline to calculate the list of icons that should be
+ * displayed in the RHS of the status bar.
+ *
+ * Anyone can listen to [processedInfoFlow] to get updates to the processed data.
+ */
+@SysUISingleton
+class ConnectivityInfoProcessor @Inject constructor(
+        connectivityInfoCollector: ConnectivityInfoCollector,
+        context: Context,
+        @Application private val scope: CoroutineScope,
+        statusBarPipelineFlags: StatusBarPipelineFlags,
+) : CoreStartable(context) {
+    // Note: This flow will not start running until a client calls `collect` on it, which means that
+    // [connectivityInfoCollector]'s flow will also not start anything until that `collect` call
+    // happens.
+    val processedInfoFlow: Flow<ProcessedConnectivityInfo> =
+            if (!statusBarPipelineFlags.isNewPipelineEnabled())
+                emptyFlow()
+            else connectivityInfoCollector.rawConnectivityInfoFlow
+                    .map { it.process() }
+                    .stateIn(
+                            scope,
+                            started = Lazily,
+                            initialValue = ProcessedConnectivityInfo()
+                    )
+
+    override fun start() {
+    }
+
+    private fun RawConnectivityInfo.process(): ProcessedConnectivityInfo {
+        // TODO(b/238425913): Actually process the raw info into meaningful data.
+        return ProcessedConnectivityInfo(this.networkCapabilityInfo)
+    }
+}
+
+/**
+ * An object containing connectivity info that has been processed into data that can be directly
+ * used by the status bar (and potentially other SysUI areas) to display icons.
+ */
+data class ProcessedConnectivityInfo(
+        val networkCapabilityInfo: Map<Int, NetworkCapabilityInfo> = emptyMap(),
+)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/ConnectivityPipelineLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/ConnectivityPipelineLogger.kt
new file mode 100644
index 0000000..f88e9d6
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/ConnectivityPipelineLogger.kt
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.pipeline
+
+import android.net.Network
+import android.net.NetworkCapabilities
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.log.LogBuffer
+import com.android.systemui.log.LogLevel
+import com.android.systemui.log.dagger.StatusBarConnectivityLog
+import javax.inject.Inject
+
+@SysUISingleton
+class ConnectivityPipelineLogger @Inject constructor(
+    @StatusBarConnectivityLog private val buffer: LogBuffer,
+) {
+    fun logOnCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) {
+        buffer.log(
+            TAG,
+            LogLevel.INFO,
+            {
+                int1 = network.getNetId()
+                str1 = networkCapabilities.toString()
+            },
+            {
+                "onCapabilitiesChanged: net=$int1 capabilities=$str1"
+            }
+        )
+    }
+
+    fun logOnLost(network: Network) {
+        buffer.log(
+            TAG,
+            LogLevel.INFO,
+            {
+                int1 = network.getNetId()
+            },
+            {
+                "onLost: net=$int1"
+            }
+        )
+    }
+}
+
+private const val TAG = "SbConnectivityPipeline"
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/StatusBarPipelineFlags.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/StatusBarPipelineFlags.kt
new file mode 100644
index 0000000..589cdb8
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/StatusBarPipelineFlags.kt
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.pipeline
+
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.flags.FeatureFlags
+import com.android.systemui.flags.Flags
+import javax.inject.Inject
+
+/** All flagging methods related to the new status bar pipeline (see b/238425913). */
+@SysUISingleton
+class StatusBarPipelineFlags @Inject constructor(private val featureFlags: FeatureFlags) {
+    /**
+     * Returns true if we should run the new pipeline.
+     *
+     * TODO(b/238425913): We may want to split this out into:
+     *   (1) isNewPipelineLoggingEnabled(), where the new pipeline runs and logs its decisions but
+     *       doesn't change the UI at all.
+     *   (2) isNewPipelineEnabled(), where the new pipeline runs and does change the UI (and the old
+     *       pipeline doesn't change the UI).
+     */
+    fun isNewPipelineEnabled(): Boolean = featureFlags.isEnabled(Flags.NEW_STATUS_BAR_PIPELINE)
+}
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
new file mode 100644
index 0000000..c4e2b73
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.pipeline.dagger
+
+import com.android.systemui.CoreStartable
+import com.android.systemui.statusbar.pipeline.ConnectivityInfoCollector
+import com.android.systemui.statusbar.pipeline.ConnectivityInfoCollectorImpl
+import com.android.systemui.statusbar.pipeline.ConnectivityInfoProcessor
+import dagger.Binds
+import dagger.Module
+import dagger.multibindings.ClassKey
+import dagger.multibindings.IntoMap
+
+@Module
+abstract class StatusBarPipelineModule {
+    /** Inject into ConnectivityInfoProcessor. */
+    @Binds
+    @IntoMap
+    @ClassKey(ConnectivityInfoProcessor::class)
+    abstract fun bindConnectivityInfoProcessor(cip: ConnectivityInfoProcessor): CoreStartable
+
+    @Binds
+    abstract fun provideConnectivityInfoCollector(
+            impl: ConnectivityInfoCollectorImpl
+    ): ConnectivityInfoCollector
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/repository/NetworkCapabilitiesRepo.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/repository/NetworkCapabilitiesRepo.kt
new file mode 100644
index 0000000..e5980c3
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/repository/NetworkCapabilitiesRepo.kt
@@ -0,0 +1,92 @@
+/*
+ * 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.
+ */
+
+@file:OptIn(ExperimentalCoroutinesApi::class)
+
+package com.android.systemui.statusbar.pipeline.repository
+
+import android.annotation.SuppressLint
+import android.net.ConnectivityManager
+import android.net.Network
+import android.net.NetworkCapabilities
+import android.net.NetworkRequest
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dagger.qualifiers.Application
+import com.android.systemui.statusbar.pipeline.ConnectivityPipelineLogger
+import javax.inject.Inject
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.channels.awaitClose
+import kotlinx.coroutines.flow.SharingStarted.Companion.Lazily
+import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.flow.callbackFlow
+import kotlinx.coroutines.flow.stateIn
+
+/** Repository that contains all relevant [NetworkCapabilites] for the current networks */
+@SysUISingleton
+class NetworkCapabilitiesRepo @Inject constructor(
+    connectivityManager: ConnectivityManager,
+    @Application scope: CoroutineScope,
+    logger: ConnectivityPipelineLogger,
+) {
+    @SuppressLint("MissingPermission")
+    val dataStream: StateFlow<Map<Int, NetworkCapabilityInfo>> = run {
+        var state = emptyMap<Int, NetworkCapabilityInfo>()
+        callbackFlow {
+                val networkRequest: NetworkRequest =
+                    NetworkRequest.Builder()
+                        .clearCapabilities()
+                        .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)
+                        .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
+                        .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
+                        .build()
+                val callback =
+                    // TODO (b/240569788): log these using [LogBuffer]
+                    object : ConnectivityManager.NetworkCallback(FLAG_INCLUDE_LOCATION_INFO) {
+                        override fun onCapabilitiesChanged(
+                            network: Network,
+                            networkCapabilities: NetworkCapabilities
+                        ) {
+                            logger.logOnCapabilitiesChanged(network, networkCapabilities)
+                            state =
+                                state.toMutableMap().also {
+                                    it[network.getNetId()] =
+                                        NetworkCapabilityInfo(network, networkCapabilities)
+                                }
+                            trySend(state)
+                        }
+
+                        override fun onLost(network: Network) {
+                            logger.logOnLost(network)
+                            state = state.toMutableMap().also { it.remove(network.getNetId()) }
+                            trySend(state)
+                        }
+                    }
+                connectivityManager.registerNetworkCallback(networkRequest, callback)
+
+                awaitClose { connectivityManager.unregisterNetworkCallback(callback) }
+            }
+            .stateIn(scope, started = Lazily, initialValue = state)
+    }
+}
+
+/** contains info about network capabilities. */
+data class NetworkCapabilityInfo(
+    val network: Network,
+    val capabilities: NetworkCapabilities,
+)
+
+private const val TAG = "ConnectivityRepository"
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java
index a89c128..753e940 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java
@@ -119,6 +119,17 @@
     }
 
     /**
+     * Returns {@code true} if the charging source is
+     * {@link android.os.BatteryManager#BATTERY_PLUGGED_DOCK}.
+     *
+     * <P>Note that charging from dock is not considered as wireless charging. In other words,
+     * {@link BatteryController#isWirelessCharging()} and this are mutually exclusive.
+     */
+    default boolean isChargingSourceDock() {
+        return false;
+    }
+
+    /**
      * A listener that will be notified whenever a change in battery level or power save mode has
      * occurred.
      */
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java
index 917a5e0..33ddf7e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java
@@ -76,7 +76,7 @@
 
     protected int mLevel;
     protected boolean mPluggedIn;
-    private boolean mPluggedInWireless;
+    private int mPluggedChargingSource;
     protected boolean mCharging;
     private boolean mStateUnknown = false;
     private boolean mCharged;
@@ -195,10 +195,8 @@
             mLevel = (int)(100f
                     * intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0)
                     / intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100));
-            mPluggedIn = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) != 0;
-            mPluggedInWireless = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0)
-                    == BatteryManager.BATTERY_PLUGGED_WIRELESS;
-
+            mPluggedChargingSource = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
+            mPluggedIn = mPluggedChargingSource != 0;
             final int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS,
                     BatteryManager.BATTERY_STATUS_UNKNOWN);
             mCharged = status == BatteryManager.BATTERY_STATUS_FULL;
@@ -284,7 +282,7 @@
 
     @Override
     public boolean isPluggedInWireless() {
-        return mPluggedInWireless;
+        return mPluggedChargingSource == BatteryManager.BATTERY_PLUGGED_WIRELESS;
     }
 
     @Override
@@ -441,4 +439,9 @@
         registerReceiver();
         updatePowerSave();
     }
+
+    @Override
+    public boolean isChargingSourceDock() {
+        return mPluggedChargingSource == BatteryManager.BATTERY_PLUGGED_DOCK;
+    }
 }
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 5bd20ff..86e7456 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessMirrorController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessMirrorController.java
@@ -28,9 +28,9 @@
 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.statusbar.NotificationShadeDepthController;
-import com.android.systemui.statusbar.phone.NotificationPanelViewController;
-import com.android.systemui.statusbar.phone.NotificationShadeWindowView;
 
 import java.util.Objects;
 import java.util.function.Consumer;
@@ -68,6 +68,7 @@
             mBrightnessMirror.setVisibility(View.INVISIBLE);
         });
         mVisibilityCallback = visibilityCallback;
+        updateResources();
     }
 
     public void showMirror() {
@@ -154,6 +155,7 @@
                 .inflate(R.layout.brightness_mirror_container, mStatusBarWindow, false);
         mToggleSliderController = setMirrorLayout();
         mStatusBarWindow.addView(mBrightnessMirror, index);
+        updateResources();
 
         for (int i = 0; i < mBrightnessMirrorListeners.size(); i++) {
             mBrightnessMirrorListeners.valueAt(i).onBrightnessMirrorReinflated(mBrightnessMirror);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightControllerImpl.java
index 4cf1d2b..9946b4b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightControllerImpl.java
@@ -17,15 +17,11 @@
 package com.android.systemui.statusbar.policy;
 
 import android.annotation.WorkerThread;
-import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.hardware.camera2.CameraAccessException;
 import android.hardware.camera2.CameraCharacteristics;
 import android.hardware.camera2.CameraManager;
-import android.os.Handler;
-import android.os.HandlerThread;
-import android.os.Process;
 import android.provider.Settings;
 import android.provider.Settings.Secure;
 import android.text.TextUtils;
@@ -33,12 +29,19 @@
 
 import androidx.annotation.NonNull;
 
+import com.android.internal.annotations.GuardedBy;
+import com.android.systemui.broadcast.BroadcastSender;
 import com.android.systemui.dagger.SysUISingleton;
+import com.android.systemui.dagger.qualifiers.Background;
 import com.android.systemui.dump.DumpManager;
+import com.android.systemui.util.settings.SecureSettings;
 
 import java.io.PrintWriter;
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
+import java.util.concurrent.Executor;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
 
 import javax.inject.Inject;
 
@@ -59,65 +62,88 @@
         "com.android.settings.flashlight.action.FLASHLIGHT_CHANGED";
 
     private final CameraManager mCameraManager;
-    private final Context mContext;
-    /** Call {@link #ensureHandler()} before using */
-    private Handler mHandler;
+    private final Executor mExecutor;
+    private final SecureSettings mSecureSettings;
+    private final DumpManager mDumpManager;
+    private final BroadcastSender mBroadcastSender;
 
-    /** Lock on mListeners when accessing */
+    private final boolean mHasFlashlight;
+
+    @GuardedBy("mListeners")
     private final ArrayList<WeakReference<FlashlightListener>> mListeners = new ArrayList<>(1);
 
-    /** Lock on {@code this} when accessing */
+    @GuardedBy("this")
     private boolean mFlashlightEnabled;
-
-    private String mCameraId;
+    @GuardedBy("this")
     private boolean mTorchAvailable;
 
-    @Inject
-    public FlashlightControllerImpl(Context context, DumpManager dumpManager) {
-        mContext = context;
-        mCameraManager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE);
+    private final AtomicReference<String> mCameraId;
+    private final AtomicBoolean mInitted = new AtomicBoolean(false);
 
-        dumpManager.registerDumpable(getClass().getSimpleName(), this);
-        tryInitCamera();
+    @Inject
+    public FlashlightControllerImpl(
+            DumpManager dumpManager,
+            CameraManager cameraManager,
+            @Background Executor bgExecutor,
+            SecureSettings secureSettings,
+            BroadcastSender broadcastSender,
+            PackageManager packageManager
+    ) {
+        mCameraManager = cameraManager;
+        mExecutor = bgExecutor;
+        mCameraId = new AtomicReference<>(null);
+        mSecureSettings = secureSettings;
+        mDumpManager = dumpManager;
+        mBroadcastSender = broadcastSender;
+
+        mHasFlashlight = packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
+        init();
     }
 
+    private void init() {
+        if (!mInitted.getAndSet(true)) {
+            mDumpManager.registerDumpable(getClass().getSimpleName(), this);
+            mExecutor.execute(this::tryInitCamera);
+        }
+    }
+
+    @WorkerThread
     private void tryInitCamera() {
+        if (!mHasFlashlight || mCameraId.get() != null) return;
         try {
-            mCameraId = getCameraId();
+            mCameraId.set(getCameraId());
         } catch (Throwable e) {
             Log.e(TAG, "Couldn't initialize.", e);
             return;
         }
 
-        if (mCameraId != null) {
-            ensureHandler();
-            mCameraManager.registerTorchCallback(mTorchCallback, mHandler);
+        if (mCameraId.get() != null) {
+            mCameraManager.registerTorchCallback(mExecutor, mTorchCallback);
         }
     }
 
     public void setFlashlight(boolean enabled) {
-        boolean pendingError = false;
-        synchronized (this) {
-            if (mCameraId == null) return;
-            if (mFlashlightEnabled != enabled) {
-                mFlashlightEnabled = enabled;
-                try {
-                    mCameraManager.setTorchMode(mCameraId, enabled);
-                } catch (CameraAccessException e) {
-                    Log.e(TAG, "Couldn't set torch mode", e);
-                    mFlashlightEnabled = false;
-                    pendingError = true;
+        if (!mHasFlashlight) return;
+        if (mCameraId.get() == null) {
+            mExecutor.execute(this::tryInitCamera);
+        }
+        mExecutor.execute(() -> {
+            if (mCameraId.get() == null) return;
+            synchronized (this) {
+                if (mFlashlightEnabled != enabled) {
+                    try {
+                        mCameraManager.setTorchMode(mCameraId.get(), enabled);
+                    } catch (CameraAccessException e) {
+                        Log.e(TAG, "Couldn't set torch mode", e);
+                        dispatchError();
+                    }
                 }
             }
-        }
-        dispatchModeChanged(mFlashlightEnabled);
-        if (pendingError) {
-            dispatchError();
-        }
+        });
     }
 
     public boolean hasFlashlight() {
-        return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
+        return mHasFlashlight;
     }
 
     public synchronized boolean isEnabled() {
@@ -131,13 +157,13 @@
     @Override
     public void addCallback(@NonNull FlashlightListener l) {
         synchronized (mListeners) {
-            if (mCameraId == null) {
-                tryInitCamera();
+            if (mCameraId.get() == null) {
+                mExecutor.execute(this::tryInitCamera);
             }
             cleanUpListenersLocked(l);
             mListeners.add(new WeakReference<>(l));
-            l.onFlashlightAvailabilityChanged(mTorchAvailable);
-            l.onFlashlightChanged(mFlashlightEnabled);
+            l.onFlashlightAvailabilityChanged(isAvailable());
+            l.onFlashlightChanged(isEnabled());
         }
     }
 
@@ -148,14 +174,7 @@
         }
     }
 
-    private synchronized void ensureHandler() {
-        if (mHandler == null) {
-            HandlerThread thread = new HandlerThread(TAG, Process.THREAD_PRIORITY_BACKGROUND);
-            thread.start();
-            mHandler = new Handler(thread.getLooper());
-        }
-    }
-
+    @WorkerThread
     private String getCameraId() throws CameraAccessException {
         String[] ids = mCameraManager.getCameraIdList();
         for (String id : ids) {
@@ -221,10 +240,9 @@
         @Override
         @WorkerThread
         public void onTorchModeUnavailable(String cameraId) {
-            if (TextUtils.equals(cameraId, mCameraId)) {
+            if (TextUtils.equals(cameraId, mCameraId.get())) {
                 setCameraAvailable(false);
-                Settings.Secure.putInt(
-                    mContext.getContentResolver(), Settings.Secure.FLASHLIGHT_AVAILABLE, 0);
+                mSecureSettings.putInt(Settings.Secure.FLASHLIGHT_AVAILABLE, 0);
 
             }
         }
@@ -232,14 +250,12 @@
         @Override
         @WorkerThread
         public void onTorchModeChanged(String cameraId, boolean enabled) {
-            if (TextUtils.equals(cameraId, mCameraId)) {
+            if (TextUtils.equals(cameraId, mCameraId.get())) {
                 setCameraAvailable(true);
                 setTorchMode(enabled);
-                Settings.Secure.putInt(
-                    mContext.getContentResolver(), Settings.Secure.FLASHLIGHT_AVAILABLE, 1);
-                Settings.Secure.putInt(
-                    mContext.getContentResolver(), Secure.FLASHLIGHT_ENABLED, enabled ? 1 : 0);
-                mContext.sendBroadcast(new Intent(ACTION_FLASHLIGHT_CHANGED));
+                mSecureSettings.putInt(Settings.Secure.FLASHLIGHT_AVAILABLE, 1);
+                mSecureSettings.putInt(Secure.FLASHLIGHT_ENABLED, enabled ? 1 : 0);
+                mBroadcastSender.sendBroadcast(new Intent(ACTION_FLASHLIGHT_CHANGED));
             }
         }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java
index bce5a15..d3837d7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManager.java
@@ -142,7 +142,7 @@
 
     protected void setEntryPinned(
             @NonNull HeadsUpManager.HeadsUpEntry headsUpEntry, boolean isPinned) {
-        mLogger.logSetEntryPinned(headsUpEntry.mEntry.getKey(), isPinned);
+        mLogger.logSetEntryPinned(headsUpEntry.mEntry, isPinned);
         NotificationEntry entry = headsUpEntry.mEntry;
         if (entry.isRowPinned() != isPinned) {
             entry.setRowPinned(isPinned);
@@ -183,7 +183,7 @@
         entry.setHeadsUp(false);
         setEntryPinned((HeadsUpEntry) alertEntry, false /* isPinned */);
         EventLogTags.writeSysuiHeadsUpStatus(entry.getKey(), 0 /* visible */);
-        mLogger.logNotificationActuallyRemoved(entry.getKey());
+        mLogger.logNotificationActuallyRemoved(entry);
         for (OnHeadsUpChangedListener listener : mListeners) {
             listener.onHeadsUpStateChanged(entry, false);
         }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManagerLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManagerLogger.kt
index 6a74ba9..d7c81af 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManagerLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpManagerLogger.kt
@@ -20,6 +20,8 @@
 import com.android.systemui.log.LogLevel.INFO
 import com.android.systemui.log.LogLevel.VERBOSE
 import com.android.systemui.log.dagger.NotificationHeadsUpLog
+import com.android.systemui.statusbar.notification.collection.NotificationEntry
+import com.android.systemui.statusbar.notification.logKey
 import javax.inject.Inject
 
 /** Logger for [HeadsUpManager]. */
@@ -56,9 +58,9 @@
         })
     }
 
-    fun logShowNotification(key: String) {
+    fun logShowNotification(entry: NotificationEntry) {
         buffer.log(TAG, INFO, {
-            str1 = key
+            str1 = entry.logKey
         }, {
             "show notification $str1"
         })
@@ -66,16 +68,16 @@
 
     fun logRemoveNotification(key: String, releaseImmediately: Boolean) {
         buffer.log(TAG, INFO, {
-            str1 = key
+            str1 = logKey(key)
             bool1 = releaseImmediately
         }, {
             "remove notification $str1 releaseImmediately: $bool1"
         })
     }
 
-    fun logNotificationActuallyRemoved(key: String) {
+    fun logNotificationActuallyRemoved(entry: NotificationEntry) {
         buffer.log(TAG, INFO, {
-            str1 = key
+            str1 = entry.logKey
         }, {
             "notification removed $str1 "
         })
@@ -83,7 +85,7 @@
 
     fun logUpdateNotification(key: String, alert: Boolean, hasEntry: Boolean) {
         buffer.log(TAG, INFO, {
-            str1 = key
+            str1 = logKey(key)
             bool1 = alert
             bool2 = hasEntry
         }, {
@@ -91,12 +93,12 @@
         })
     }
 
-    fun logUpdateEntry(key: String, updatePostTime: Boolean) {
+    fun logUpdateEntry(entry: NotificationEntry, updatePostTime: Boolean) {
         buffer.log(TAG, INFO, {
-            str1 = key
+            str1 = entry.logKey
             bool1 = updatePostTime
         }, {
-            "update entry $key updatePostTime: $bool1"
+            "update entry $str1 updatePostTime: $bool1"
         })
     }
 
@@ -108,9 +110,9 @@
         })
     }
 
-    fun logSetEntryPinned(key: String, isPinned: Boolean) {
+    fun logSetEntryPinned(entry: NotificationEntry, isPinned: Boolean) {
         buffer.log(TAG, VERBOSE, {
-            str1 = key
+            str1 = entry.logKey
             bool1 = isPinned
         }, {
             "set entry pinned $str1 pinned: $bool1"
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java
index 2fb16ee..bdac888 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardStateControllerImpl.java
@@ -424,11 +424,6 @@
         }
 
         @Override
-        public void onFaceUnlockStateChanged(boolean running, int userId) {
-            update(false /* updateAlways */);
-        }
-
-        @Override
         public void onStrongAuthStateChanged(int userId) {
             update(false /* updateAlways */);
         }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/PreviewInflater.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/PreviewInflater.java
deleted file mode 100644
index 3d31714..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/PreviewInflater.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.policy;
-
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-
-import com.android.internal.widget.LockPatternUtils;
-import com.android.keyguard.KeyguardUpdateMonitor;
-import com.android.systemui.ActivityIntentHelper;
-import com.android.systemui.statusbar.phone.KeyguardPreviewContainer;
-
-import java.util.List;
-
-/**
- * Utility class to inflate previews for phone and camera affordance.
- */
-public class PreviewInflater {
-
-    private static final String TAG = "PreviewInflater";
-
-    private static final String META_DATA_KEYGUARD_LAYOUT = "com.android.keyguard.layout";
-    private final ActivityIntentHelper mActivityIntentHelper;
-
-    private Context mContext;
-    private LockPatternUtils mLockPatternUtils;
-
-    public PreviewInflater(Context context, LockPatternUtils lockPatternUtils,
-            ActivityIntentHelper activityIntentHelper) {
-        mContext = context;
-        mLockPatternUtils = lockPatternUtils;
-        mActivityIntentHelper = activityIntentHelper;
-    }
-
-    public View inflatePreview(Intent intent) {
-        WidgetInfo info = getWidgetInfo(intent);
-        return inflatePreview(info);
-    }
-
-    public View inflatePreviewFromService(ComponentName componentName) {
-        WidgetInfo info = getWidgetInfoFromService(componentName);
-        return inflatePreview(info);
-    }
-
-    private KeyguardPreviewContainer inflatePreview(WidgetInfo info) {
-        if (info == null) {
-            return null;
-        }
-        View v = inflateWidgetView(info);
-        if (v == null) {
-            return null;
-        }
-        KeyguardPreviewContainer container = new KeyguardPreviewContainer(mContext, null);
-        container.addView(v);
-        return container;
-    }
-
-    private View inflateWidgetView(WidgetInfo widgetInfo) {
-        View widgetView = null;
-        try {
-            Context appContext = mContext.createPackageContext(
-                    widgetInfo.contextPackage, Context.CONTEXT_RESTRICTED);
-            LayoutInflater appInflater = (LayoutInflater)
-                    appContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-            appInflater = appInflater.cloneInContext(appContext);
-            widgetView = appInflater.inflate(widgetInfo.layoutId, null, false);
-        } catch (PackageManager.NameNotFoundException|RuntimeException e) {
-            Log.w(TAG, "Error creating widget view", e);
-        }
-        return widgetView;
-    }
-
-    private WidgetInfo getWidgetInfoFromService(ComponentName componentName) {
-        PackageManager packageManager = mContext.getPackageManager();
-        // Look for the preview specified in the service meta-data
-        try {
-            Bundle metaData = packageManager.getServiceInfo(
-                    componentName, PackageManager.GET_META_DATA).metaData;
-            return getWidgetInfoFromMetaData(componentName.getPackageName(), metaData);
-        } catch (PackageManager.NameNotFoundException e) {
-            Log.w(TAG, "Failed to load preview; " + componentName.flattenToShortString()
-                    + " not found", e);
-        }
-        return null;
-    }
-
-    private WidgetInfo getWidgetInfoFromMetaData(String contextPackage,
-            Bundle metaData) {
-        if (metaData == null) {
-            return null;
-        }
-        int layoutId = metaData.getInt(META_DATA_KEYGUARD_LAYOUT);
-        if (layoutId == 0) {
-            return null;
-        }
-        WidgetInfo info = new WidgetInfo();
-        info.contextPackage = contextPackage;
-        info.layoutId = layoutId;
-        return info;
-    }
-
-    private WidgetInfo getWidgetInfo(Intent intent) {
-        PackageManager packageManager = mContext.getPackageManager();
-        int flags = PackageManager.MATCH_DEFAULT_ONLY
-                | PackageManager.MATCH_DIRECT_BOOT_AWARE
-                | PackageManager.MATCH_DIRECT_BOOT_UNAWARE;
-        final List<ResolveInfo> appList = packageManager.queryIntentActivitiesAsUser(
-                intent, flags, KeyguardUpdateMonitor.getCurrentUser());
-        if (appList.size() == 0) {
-            return null;
-        }
-        ResolveInfo resolved = packageManager.resolveActivityAsUser(intent,
-                flags | PackageManager.GET_META_DATA,
-                KeyguardUpdateMonitor.getCurrentUser());
-        if (mActivityIntentHelper.wouldLaunchResolverActivity(resolved, appList)) {
-            return null;
-        }
-        if (resolved == null || resolved.activityInfo == null) {
-            return null;
-        }
-        return getWidgetInfoFromMetaData(resolved.activityInfo.packageName,
-                resolved.activityInfo.metaData);
-    }
-
-    private static class WidgetInfo {
-        String contextPackage;
-        int layoutId;
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java
index 1b685d0..62fc01f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java
@@ -45,6 +45,7 @@
 import android.provider.Settings;
 import android.telephony.TelephonyCallback;
 import android.text.TextUtils;
+import android.util.FeatureFlagUtils;
 import android.util.Log;
 import android.util.SparseArray;
 import android.util.SparseBooleanArray;
@@ -61,11 +62,12 @@
 import com.android.internal.util.LatencyTracker;
 import com.android.settingslib.RestrictedLockUtilsInternal;
 import com.android.settingslib.users.UserCreatingDialog;
-import com.android.settingslib.utils.ThreadUtils;
 import com.android.systemui.Dumpable;
+import com.android.systemui.GuestResetOrExitSessionReceiver;
 import com.android.systemui.GuestResumeSessionReceiver;
 import com.android.systemui.R;
 import com.android.systemui.SystemUISecondaryUserService;
+import com.android.systemui.animation.DialogCuj;
 import com.android.systemui.animation.DialogLaunchAnimator;
 import com.android.systemui.broadcast.BroadcastDispatcher;
 import com.android.systemui.broadcast.BroadcastSender;
@@ -114,6 +116,9 @@
     private static final String PERMISSION_SELF = "com.android.systemui.permission.SELF";
     private static final long MULTI_USER_JOURNEY_TIMEOUT = 20000l;
 
+    private static final String INTERACTION_JANK_ADD_NEW_USER_TAG = "add_new_user";
+    private static final String INTERACTION_JANK_EXIT_GUEST_MODE_TAG = "exit_guest_mode";
+
     protected final Context mContext;
     protected final UserTracker mUserTracker;
     protected final UserManager mUserManager;
@@ -121,6 +126,8 @@
     private final ArrayList<WeakReference<BaseUserAdapter>> mAdapters = new ArrayList<>();
     @VisibleForTesting
     final GuestResumeSessionReceiver mGuestResumeSessionReceiver;
+    @VisibleForTesting
+    final GuestResetOrExitSessionReceiver mGuestResetOrExitSessionReceiver;
     private final KeyguardStateController mKeyguardStateController;
     private final DeviceProvisionedController mDeviceProvisionedController;
     private final DevicePolicyManager mDevicePolicyManager;
@@ -159,6 +166,7 @@
     private final AtomicBoolean mGuestIsResetting;
     private final AtomicBoolean mGuestCreationScheduled;
     private FalsingManager mFalsingManager;
+    @Nullable
     private View mView;
     private String mCreateSupervisedUserPackage;
     private GlobalSettings mGlobalSettings;
@@ -188,7 +196,9 @@
             InteractionJankMonitor interactionJankMonitor,
             LatencyTracker latencyTracker,
             DumpManager dumpManager,
-            DialogLaunchAnimator dialogLaunchAnimator) {
+            DialogLaunchAnimator dialogLaunchAnimator,
+            GuestResumeSessionReceiver guestResumeSessionReceiver,
+            GuestResetOrExitSessionReceiver guestResetOrExitSessionReceiver) {
         mContext = context;
         mActivityManager = activityManager;
         mUserTracker = userTracker;
@@ -200,14 +210,13 @@
         mInteractionJankMonitor = interactionJankMonitor;
         mLatencyTracker = latencyTracker;
         mGlobalSettings = globalSettings;
-        mGuestResumeSessionReceiver = new GuestResumeSessionReceiver(
-                this, mUserTracker, mUiEventLogger, secureSettings);
+        mGuestResumeSessionReceiver = guestResumeSessionReceiver;
+        mGuestResetOrExitSessionReceiver = guestResetOrExitSessionReceiver;
         mBgExecutor = bgExecutor;
         mLongRunningExecutor = longRunningExecutor;
         mUiExecutor = uiExecutor;
-        if (!UserManager.isGuestUserEphemeral()) {
-            mGuestResumeSessionReceiver.register(mBroadcastDispatcher);
-        }
+        mGuestResumeSessionReceiver.register();
+        mGuestResetOrExitSessionReceiver.register();
         mGuestUserAutoCreated = mContext.getResources().getBoolean(
                 com.android.internal.R.bool.config_guestUserAutoCreated);
         mGuestIsResetting = new AtomicBoolean();
@@ -278,6 +287,10 @@
         refreshUsers(UserHandle.USER_NULL);
     }
 
+    private static boolean isEnableGuestModeUxChanges(Context context) {
+        return FeatureFlagUtils.isEnabled(context, FeatureFlagUtils.SETTINGS_GUEST_MODE_UX_CHANGES);
+    }
+
     /**
      * Refreshes users from UserManager.
      *
@@ -524,20 +537,31 @@
 
     private void onUserListItemClicked(int id, UserRecord record, DialogShower dialogShower) {
         int currUserId = mUserTracker.getUserId();
+        // If switching from guest and guest is ephemeral, then follow the flow
+        // of showExitGuestDialog to remove current guest,
+        // and switch to selected user
+        UserInfo currUserInfo = mUserTracker.getUserInfo();
         if (currUserId == id) {
             if (record.isGuest) {
-                showExitGuestDialog(id, dialogShower);
+                showExitGuestDialog(id, currUserInfo.isEphemeral(), dialogShower);
             }
             return;
         }
-        if (UserManager.isGuestUserEphemeral()) {
-            // If switching from guest, we want to bring up the guest exit dialog instead of switching
-            UserInfo currUserInfo = mUserManager.getUserInfo(currUserId);
-            if (currUserInfo != null && currUserInfo.isGuest()) {
-                showExitGuestDialog(currUserId, record.resolveId(), dialogShower);
+
+        if (currUserInfo != null && currUserInfo.isGuest()) {
+            if (isEnableGuestModeUxChanges(mContext)) {
+                showExitGuestDialog(currUserId, currUserInfo.isEphemeral(),
+                        record.resolveId(), dialogShower);
                 return;
+            } else {
+                if (currUserInfo.isEphemeral()) {
+                    showExitGuestDialog(currUserId, currUserInfo.isEphemeral(),
+                            record.resolveId(), dialogShower);
+                    return;
+                }
             }
         }
+
         if (dialogShower != null) {
             // If we haven't morphed into another dialog, it means we have just switched users.
             // Then, dismiss the dialog.
@@ -548,9 +572,11 @@
 
     protected void switchToUserId(int id) {
         try {
-            mInteractionJankMonitor.begin(InteractionJankMonitor.Configuration.Builder
-                    .withView(InteractionJankMonitor.CUJ_USER_SWITCH, mView)
-                    .setTimeout(MULTI_USER_JOURNEY_TIMEOUT));
+            if (mView != null) {
+                mInteractionJankMonitor.begin(InteractionJankMonitor.Configuration.Builder
+                        .withView(InteractionJankMonitor.CUJ_USER_SWITCH, mView)
+                        .setTimeout(MULTI_USER_JOURNEY_TIMEOUT));
+            }
             mLatencyTracker.onActionStart(LatencyTracker.ACTION_USER_SWITCH);
             pauseRefreshUsers();
             mActivityManager.switchUser(id);
@@ -559,7 +585,7 @@
         }
     }
 
-    private void showExitGuestDialog(int id, DialogShower dialogShower) {
+    private void showExitGuestDialog(int id, boolean isGuestEphemeral, DialogShower dialogShower) {
         int newId = UserHandle.USER_SYSTEM;
         if (mResumeUserOnGuestLogout && mLastNonGuestUser != UserHandle.USER_SYSTEM) {
             UserInfo info = mUserManager.getUserInfo(mLastNonGuestUser);
@@ -567,16 +593,19 @@
                 newId = info.id;
             }
         }
-        showExitGuestDialog(id, newId, dialogShower);
+        showExitGuestDialog(id, isGuestEphemeral, newId, dialogShower);
     }
 
-    private void showExitGuestDialog(int id, int targetId, DialogShower dialogShower) {
+    private void showExitGuestDialog(int id, boolean isGuestEphemeral,
+                        int targetId, DialogShower dialogShower) {
         if (mExitGuestDialog != null && mExitGuestDialog.isShowing()) {
             mExitGuestDialog.cancel();
         }
-        mExitGuestDialog = new ExitGuestDialog(mContext, id, targetId);
+        mExitGuestDialog = new ExitGuestDialog(mContext, id, isGuestEphemeral, targetId);
         if (dialogShower != null) {
-            dialogShower.showDialog(mExitGuestDialog);
+            dialogShower.showDialog(mExitGuestDialog, new DialogCuj(
+                    InteractionJankMonitor.CUJ_USER_DIALOG_OPEN,
+                    INTERACTION_JANK_EXIT_GUEST_MODE_TAG));
         } else {
             mExitGuestDialog.show();
         }
@@ -588,7 +617,11 @@
         }
         mAddUserDialog = new AddUserDialog(mContext);
         if (dialogShower != null) {
-            dialogShower.showDialog(mAddUserDialog);
+            dialogShower.showDialog(mAddUserDialog,
+                    new DialogCuj(
+                            InteractionJankMonitor.CUJ_USER_DIALOG_OPEN,
+                            INTERACTION_JANK_ADD_NEW_USER_TAG
+                    ));
         } else {
             mAddUserDialog.show();
         }
@@ -808,6 +841,52 @@
         }
     }
 
+    /**
+     * Exits guest user and switches to previous non-guest user. The guest must be the current
+     * user.
+     *
+     * @param guestUserId user id of the guest user to exit
+     * @param targetUserId user id of the guest user to exit, set to UserHandle.USER_NULL when
+     *                       target user id is not known
+     * @param forceRemoveGuestOnExit true: remove guest before switching user,
+     *                               false: remove guest only if its ephemeral, else keep guest
+     */
+    public void exitGuestUser(@UserIdInt int guestUserId, @UserIdInt int targetUserId,
+                    boolean forceRemoveGuestOnExit) {
+        UserInfo currentUser = mUserTracker.getUserInfo();
+        if (currentUser.id != guestUserId) {
+            Log.w(TAG, "User requesting to start a new session (" + guestUserId + ")"
+                    + " is not current user (" + currentUser.id + ")");
+            return;
+        }
+        if (!currentUser.isGuest()) {
+            Log.w(TAG, "User requesting to start a new session (" + guestUserId + ")"
+                    + " is not a guest");
+            return;
+        }
+
+        int newUserId = UserHandle.USER_SYSTEM;
+        if (targetUserId == UserHandle.USER_NULL) {
+            // when target user is not specified switch to last non guest user
+            if (mResumeUserOnGuestLogout && mLastNonGuestUser != UserHandle.USER_SYSTEM) {
+                UserInfo info = mUserManager.getUserInfo(mLastNonGuestUser);
+                if (info != null && info.isEnabled() && info.supportsSwitchToByUser()) {
+                    newUserId = info.id;
+                }
+            }
+        } else {
+            newUserId = targetUserId;
+        }
+
+        if (currentUser.isEphemeral() || forceRemoveGuestOnExit) {
+            mUiEventLogger.log(QSUserSwitcherEvent.QS_USER_GUEST_REMOVE);
+            removeGuestUser(currentUser.id, newUserId);
+        } else {
+            mUiEventLogger.log(QSUserSwitcherEvent.QS_USER_SWITCH);
+            switchToUserId(newUserId);
+        }
+    }
+
     private void scheduleGuestCreation() {
         if (!mGuestCreationScheduled.compareAndSet(false, true)) {
             return;
@@ -859,15 +938,17 @@
         guestCreationProgressDialog.show();
 
         // userManager.createGuest will block the thread so post is needed for the dialog to show
-        ThreadUtils.postOnMainThread(() -> {
+        mBgExecutor.execute(() -> {
             final int guestId = createGuest();
-            guestCreationProgressDialog.dismiss();
-            if (guestId == UserHandle.USER_NULL) {
-                Toast.makeText(mContext,
-                        com.android.settingslib.R.string.add_guest_failed,
-                        Toast.LENGTH_SHORT).show();
-            }
-            callback.accept(guestId);
+            mUiExecutor.execute(() -> {
+                guestCreationProgressDialog.dismiss();
+                if (guestId == UserHandle.USER_NULL) {
+                    Toast.makeText(mContext,
+                            com.android.settingslib.R.string.add_guest_failed,
+                            Toast.LENGTH_SHORT).show();
+                }
+                callback.accept(guestId);
+            });
         });
     }
 
@@ -975,9 +1056,14 @@
         public String getName(Context context, UserRecord item) {
             if (item.isGuest) {
                 if (item.isCurrent) {
-                    return context.getString(mController.mGuestUserAutoCreated
+                    if (isEnableGuestModeUxChanges(context)) {
+                        return context.getString(
+                                com.android.settingslib.R.string.guest_exit_quick_settings_button);
+                    } else {
+                        return context.getString(mController.mGuestUserAutoCreated
                             ? com.android.settingslib.R.string.guest_reset_guest
                             : com.android.settingslib.R.string.guest_exit_guest);
+                    }
                 } else {
                     if (item.info != null) {
                         return context.getString(com.android.internal.R.string.guest_name);
@@ -994,8 +1080,13 @@
                                             ? com.android.settingslib.R.string.guest_resetting
                                             : com.android.internal.R.string.guest_name);
                         } else {
-                            return context.getString(
-                                    com.android.settingslib.R.string.guest_new_guest);
+                            if (isEnableGuestModeUxChanges(context)) {
+                                // we always show "guest" as string, instead of "add guest"
+                                return context.getString(com.android.internal.R.string.guest_name);
+                            } else {
+                                return context.getString(
+                                        com.android.settingslib.R.string.guest_new_guest);
+                            }
                         }
                     }
                 }
@@ -1017,7 +1108,11 @@
         protected static Drawable getIconDrawable(Context context, UserRecord item) {
             int iconRes;
             if (item.isAddUser) {
-                iconRes = R.drawable.ic_account_circle_filled;
+                if (isEnableGuestModeUxChanges(context)) {
+                    iconRes = R.drawable.ic_add;
+                } else {
+                    iconRes = R.drawable.ic_account_circle_filled;
+                }
             } else if (item.isGuest) {
                 iconRes = R.drawable.ic_account_circle;
             } else if (item.isAddSupervisedUser) {
@@ -1189,24 +1284,58 @@
 
         private final int mGuestId;
         private final int mTargetId;
+        private final boolean mIsGuestEphemeral;
 
-        public ExitGuestDialog(Context context, int guestId, int targetId) {
+        ExitGuestDialog(Context context, int guestId, boolean isGuestEphemeral,
+                    int targetId) {
             super(context);
-            setTitle(mGuestUserAutoCreated
-                    ? com.android.settingslib.R.string.guest_reset_guest_dialog_title
-                    : com.android.settingslib.R.string.guest_remove_guest_dialog_title);
-            setMessage(context.getString(R.string.guest_exit_guest_dialog_message));
-            setButton(DialogInterface.BUTTON_NEUTRAL,
-                    context.getString(android.R.string.cancel), this);
-            setButton(DialogInterface.BUTTON_POSITIVE,
-                    context.getString(mGuestUserAutoCreated
+            if (isEnableGuestModeUxChanges(context)) {
+                if (isGuestEphemeral) {
+                    setTitle(context.getString(
+                                com.android.settingslib.R.string.guest_exit_dialog_title));
+                    setMessage(context.getString(
+                                com.android.settingslib.R.string.guest_exit_dialog_message));
+                    setButton(DialogInterface.BUTTON_NEUTRAL,
+                            context.getString(android.R.string.cancel), this);
+                    setButton(DialogInterface.BUTTON_POSITIVE,
+                            context.getString(
+                                com.android.settingslib.R.string.guest_exit_dialog_button), this);
+                } else {
+                    setTitle(context.getString(
+                                com.android.settingslib
+                                    .R.string.guest_exit_dialog_title_non_ephemeral));
+                    setMessage(context.getString(
+                                com.android.settingslib
+                                    .R.string.guest_exit_dialog_message_non_ephemeral));
+                    setButton(DialogInterface.BUTTON_NEUTRAL,
+                            context.getString(android.R.string.cancel), this);
+                    setButton(DialogInterface.BUTTON_NEGATIVE,
+                            context.getString(
+                                com.android.settingslib.R.string.guest_exit_clear_data_button),
+                            this);
+                    setButton(DialogInterface.BUTTON_POSITIVE,
+                            context.getString(
+                                com.android.settingslib.R.string.guest_exit_save_data_button),
+                            this);
+                }
+            } else {
+                setTitle(mGuestUserAutoCreated
+                        ? com.android.settingslib.R.string.guest_reset_guest_dialog_title
+                        : com.android.settingslib.R.string.guest_remove_guest_dialog_title);
+                setMessage(context.getString(R.string.guest_exit_guest_dialog_message));
+                setButton(DialogInterface.BUTTON_NEUTRAL,
+                        context.getString(android.R.string.cancel), this);
+                setButton(DialogInterface.BUTTON_POSITIVE,
+                        context.getString(mGuestUserAutoCreated
                             ? com.android.settingslib.R.string.guest_reset_guest_confirm_button
                             : com.android.settingslib.R.string.guest_remove_guest_confirm_button),
-                    this);
+                        this);
+            }
             SystemUIDialog.setWindowOnTop(this, mKeyguardStateController.isShowing());
             setCanceledOnTouchOutside(false);
             mGuestId = guestId;
             mTargetId = targetId;
+            mIsGuestEphemeral = isGuestEphemeral;
         }
 
         @Override
@@ -1216,12 +1345,40 @@
             if (mFalsingManager.isFalseTap(penalty)) {
                 return;
             }
-            if (which == BUTTON_NEUTRAL) {
-                cancel();
+            if (isEnableGuestModeUxChanges(getContext())) {
+                if (mIsGuestEphemeral) {
+                    if (which == DialogInterface.BUTTON_POSITIVE) {
+                        mDialogLaunchAnimator.dismissStack(this);
+                        // Ephemeral guest: exit guest, guest is removed by the system
+                        // on exit, since its marked ephemeral
+                        exitGuestUser(mGuestId, mTargetId, false);
+                    } else if (which == DialogInterface.BUTTON_NEGATIVE) {
+                        // Cancel clicked, do nothing
+                        cancel();
+                    }
+                } else {
+                    if (which == DialogInterface.BUTTON_POSITIVE) {
+                        mDialogLaunchAnimator.dismissStack(this);
+                        // Non-ephemeral guest: exit guest, guest is not removed by the system
+                        // on exit, since its marked non-ephemeral
+                        exitGuestUser(mGuestId, mTargetId, false);
+                    } else if (which == DialogInterface.BUTTON_NEGATIVE) {
+                        mDialogLaunchAnimator.dismissStack(this);
+                        // Non-ephemeral guest: remove guest and then exit
+                        exitGuestUser(mGuestId, mTargetId, true);
+                    } else if (which == DialogInterface.BUTTON_NEUTRAL) {
+                        // Cancel clicked, do nothing
+                        cancel();
+                    }
+                }
             } else {
-                mUiEventLogger.log(QSUserSwitcherEvent.QS_USER_GUEST_REMOVE);
-                mDialogLaunchAnimator.dismissStack(this);
-                removeGuestUser(mGuestId, mTargetId);
+                if (which == BUTTON_NEUTRAL) {
+                    cancel();
+                } else {
+                    mUiEventLogger.log(QSUserSwitcherEvent.QS_USER_GUEST_REMOVE);
+                    mDialogLaunchAnimator.dismissStack(this);
+                    removeGuestUser(mGuestId, mTargetId);
+                }
             }
         }
     }
@@ -1230,10 +1387,17 @@
     final class AddUserDialog extends SystemUIDialog implements
             DialogInterface.OnClickListener {
 
-        public AddUserDialog(Context context) {
+        AddUserDialog(Context context) {
             super(context);
+
             setTitle(com.android.settingslib.R.string.user_add_user_title);
-            setMessage(com.android.settingslib.R.string.user_add_user_message_short);
+            String message = context.getString(
+                                com.android.settingslib.R.string.user_add_user_message_short);
+            UserInfo currentUser = mUserTracker.getUserInfo();
+            if (currentUser != null && currentUser.isGuest() && currentUser.isEphemeral()) {
+                message += context.getString(R.string.user_add_user_message_guest_remove);
+            }
+            setMessage(message);
             setButton(DialogInterface.BUTTON_NEUTRAL,
                     context.getString(android.R.string.cancel), this);
             setButton(DialogInterface.BUTTON_POSITIVE,
diff --git a/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIFactory.java b/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIFactory.java
deleted file mode 100644
index c99ad23..0000000
--- a/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIFactory.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.systemui.tv;
-
-import android.content.Context;
-
-import com.android.systemui.SystemUIFactory;
-import com.android.systemui.dagger.GlobalRootComponent;
-
-/**
- * TV variant {@link SystemUIFactory}, that substitutes default {@link GlobalRootComponent} for
- * {@link TvGlobalRootComponent}
- */
-public class TvSystemUIFactory extends SystemUIFactory {
-    @Override
-    protected GlobalRootComponent buildGlobalRootComponent(Context context) {
-        return DaggerTvGlobalRootComponent.builder()
-                .context(context)
-                .build();
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIInitializer.java b/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIInitializer.java
new file mode 100644
index 0000000..fabbb2c
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIInitializer.java
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ */
+
+package com.android.systemui.tv;
+
+import android.content.Context;
+
+import com.android.systemui.SystemUIInitializer;
+import com.android.systemui.dagger.GlobalRootComponent;
+
+/**
+ * TV variant {@link SystemUIInitializer}, that substitutes default {@link GlobalRootComponent} for
+ * {@link TvGlobalRootComponent}
+ */
+public class TvSystemUIInitializer extends SystemUIInitializer {
+    public TvSystemUIInitializer(Context context) {
+        super(context);
+    }
+
+    @Override
+    protected GlobalRootComponent.Builder getGlobalRootComponentBuilder() {
+        return DaggerTvGlobalRootComponent.builder();
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIModule.java b/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIModule.java
index 9a19d8d..aac5bf0 100644
--- a/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIModule.java
+++ b/packages/SystemUI/src/com/android/systemui/tv/TvSystemUIModule.java
@@ -35,6 +35,7 @@
 import com.android.systemui.dock.DockManager;
 import com.android.systemui.dock.DockManagerImpl;
 import com.android.systemui.doze.DozeHost;
+import com.android.systemui.navigationbar.gestural.GestureModule;
 import com.android.systemui.plugins.qs.QSFactory;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.power.EnhancedEstimates;
@@ -45,6 +46,10 @@
 import com.android.systemui.qs.tileimpl.QSFactoryImpl;
 import com.android.systemui.recents.Recents;
 import com.android.systemui.recents.RecentsImplementation;
+import com.android.systemui.screenshot.ReferenceScreenshotModule;
+import com.android.systemui.shade.NotificationShadeWindowControllerImpl;
+import com.android.systemui.shade.ShadeController;
+import com.android.systemui.shade.ShadeControllerImpl;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.NotificationListener;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
@@ -57,9 +62,6 @@
 import com.android.systemui.statusbar.phone.HeadsUpManagerPhone;
 import com.android.systemui.statusbar.phone.KeyguardBypassController;
 import com.android.systemui.statusbar.phone.KeyguardEnvironmentImpl;
-import com.android.systemui.statusbar.phone.NotificationShadeWindowControllerImpl;
-import com.android.systemui.statusbar.phone.ShadeController;
-import com.android.systemui.statusbar.phone.ShadeControllerImpl;
 import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
 import com.android.systemui.statusbar.policy.BatteryController;
 import com.android.systemui.statusbar.policy.BatteryControllerImpl;
@@ -87,8 +89,10 @@
  * overridden by the System UI implementation.
  */
 @Module(includes = {
+            GestureModule.class,
             PowerModule.class,
             QSModule.class,
+            ReferenceScreenshotModule.class,
             VolumeModule.class,
         },
         subcomponents = {
diff --git a/packages/SystemUI/src/com/android/systemui/unfold/FoldAodAnimationController.kt b/packages/SystemUI/src/com/android/systemui/unfold/FoldAodAnimationController.kt
index d6dfcea..8f127fd 100644
--- a/packages/SystemUI/src/com/android/systemui/unfold/FoldAodAnimationController.kt
+++ b/packages/SystemUI/src/com/android/systemui/unfold/FoldAodAnimationController.kt
@@ -22,11 +22,12 @@
 import android.os.PowerManager
 import android.provider.Settings
 import androidx.core.view.OneShotPreDrawListener
+import com.android.internal.util.LatencyTracker
 import com.android.systemui.dagger.qualifiers.Main
 import com.android.systemui.keyguard.WakefulnessLifecycle
 import com.android.systemui.statusbar.LightRevealScrim
-import com.android.systemui.statusbar.phone.ScreenOffAnimation
 import com.android.systemui.statusbar.phone.CentralSurfaces
+import com.android.systemui.statusbar.phone.ScreenOffAnimation
 import com.android.systemui.statusbar.policy.CallbackController
 import com.android.systemui.unfold.FoldAodAnimationController.FoldAodAnimationStatus
 import com.android.systemui.util.settings.GlobalSettings
@@ -47,7 +48,8 @@
     private val context: Context,
     private val deviceStateManager: DeviceStateManager,
     private val wakefulnessLifecycle: WakefulnessLifecycle,
-    private val globalSettings: GlobalSettings
+    private val globalSettings: GlobalSettings,
+    private val latencyTracker: LatencyTracker,
 ) : CallbackController<FoldAodAnimationStatus>, ScreenOffAnimation, WakefulnessLifecycle.Observer {
 
     private lateinit var mCentralSurfaces: CentralSurfaces
@@ -64,12 +66,14 @@
     private var isAnimationPlaying = false
 
     private val statusListeners = arrayListOf<FoldAodAnimationStatus>()
+    private val foldToAodLatencyTracker = FoldToAodLatencyTracker()
 
     private val startAnimationRunnable = Runnable {
-        mCentralSurfaces.notificationPanelViewController.startFoldToAodAnimation {
-            // End action
-            setAnimationState(playing = false)
-        }
+        mCentralSurfaces.notificationPanelViewController.startFoldToAodAnimation(
+            /* startAction= */ { foldToAodLatencyTracker.onAnimationStarted() },
+            /* endAction= */ { setAnimationState(playing = false) },
+            /* cancelAction= */ { setAnimationState(playing = false) },
+        )
     }
 
     override fun initialize(centralSurfaces: CentralSurfaces, lightRevealScrim: LightRevealScrim) {
@@ -82,11 +86,13 @@
     /** Returns true if we should run fold to AOD animation */
     override fun shouldPlayAnimation(): Boolean = shouldPlayAnimation
 
-    override fun startAnimation(): Boolean =
-        if (alwaysOnEnabled &&
+    private fun shouldStartAnimation(): Boolean =
+        alwaysOnEnabled &&
             wakefulnessLifecycle.lastSleepReason == PowerManager.GO_TO_SLEEP_REASON_DEVICE_FOLD &&
             globalSettings.getString(Settings.Global.ANIMATOR_DURATION_SCALE) != "0"
-        ) {
+
+    override fun startAnimation(): Boolean =
+        if (shouldStartAnimation()) {
             setAnimationState(playing = true)
             mCentralSurfaces.notificationPanelViewController.prepareFoldToAodAnimation()
             true
@@ -97,6 +103,7 @@
 
     override fun onStartedWakingUp() {
         if (isAnimationPlaying) {
+            foldToAodLatencyTracker.cancel()
             handler.removeCallbacks(startAnimationRunnable)
             mCentralSurfaces.notificationPanelViewController.cancelFoldToAodAnimation()
         }
@@ -137,7 +144,8 @@
             // but we should wait for the initial animation preparations to be drawn
             // (setting initial alpha/translation)
             OneShotPreDrawListener.add(
-                mCentralSurfaces.notificationPanelViewController.view, onReady
+                mCentralSurfaces.notificationPanelViewController.view,
+                onReady
             )
         } else {
             // No animation, call ready callback immediately
@@ -209,5 +217,41 @@
                     isFoldHandled = false
                 }
                 this.isFolded = isFolded
-            })
+                if (isFolded) {
+                    foldToAodLatencyTracker.onFolded()
+                }
+            }
+        )
+
+    /**
+     * Tracks the latency of fold to AOD using [LatencyTracker].
+     *
+     * Events that trigger start and end are:
+     *
+     * - Start: Once [DeviceStateManager] sends the folded signal [FoldToAodLatencyTracker.onFolded]
+     * is called and latency tracking starts.
+     * - End: Once the fold -> AOD animation starts, [FoldToAodLatencyTracker.onAnimationStarted] is
+     * called, and latency tracking stops.
+     */
+    private inner class FoldToAodLatencyTracker {
+
+        /** Triggers the latency logging, if needed. */
+        fun onFolded() {
+            if (shouldStartAnimation()) {
+                latencyTracker.onActionStart(LatencyTracker.ACTION_FOLD_TO_AOD)
+            }
+        }
+        /**
+         * Called once the Fold -> AOD animation is started.
+         *
+         * For latency tracking, this determines the end of the fold to aod action.
+         */
+        fun onAnimationStarted() {
+            latencyTracker.onActionEnd(LatencyTracker.ACTION_FOLD_TO_AOD)
+        }
+
+        fun cancel() {
+            latencyTracker.onActionCancel(LatencyTracker.ACTION_FOLD_TO_AOD)
+        }
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/unfold/SysUIUnfoldModule.kt b/packages/SystemUI/src/com/android/systemui/unfold/SysUIUnfoldModule.kt
index 7350b37..13ac39c 100644
--- a/packages/SystemUI/src/com/android/systemui/unfold/SysUIUnfoldModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/unfold/SysUIUnfoldModule.kt
@@ -18,7 +18,7 @@
 
 import com.android.keyguard.KeyguardUnfoldTransition
 import com.android.systemui.dagger.SysUISingleton
-import com.android.systemui.statusbar.phone.NotificationPanelUnfoldAnimationController
+import com.android.systemui.shade.NotificationPanelUnfoldAnimationController
 import com.android.systemui.statusbar.phone.StatusBarMoveFromCenterAnimationController
 import com.android.systemui.unfold.util.NaturalRotationUnfoldProgressProvider
 import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider
diff --git a/packages/SystemUI/src/com/android/systemui/unfold/UnfoldTransitionModule.kt b/packages/SystemUI/src/com/android/systemui/unfold/UnfoldTransitionModule.kt
index d2d2361..eea6ac0e 100644
--- a/packages/SystemUI/src/com/android/systemui/unfold/UnfoldTransitionModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/unfold/UnfoldTransitionModule.kt
@@ -20,6 +20,7 @@
 import android.view.IWindowManager
 import com.android.systemui.keyguard.LifecycleScreenStatusProvider
 import com.android.systemui.unfold.config.UnfoldTransitionConfig
+import com.android.systemui.unfold.system.SystemUnfoldSharedModule
 import com.android.systemui.unfold.updates.FoldStateProvider
 import com.android.systemui.unfold.updates.screen.ScreenStatusProvider
 import com.android.systemui.unfold.util.NaturalRotationUnfoldProgressProvider
@@ -34,7 +35,7 @@
 import javax.inject.Named
 import javax.inject.Singleton
 
-@Module(includes = [UnfoldSharedModule::class])
+@Module(includes = [UnfoldSharedModule::class, SystemUnfoldSharedModule::class])
 class UnfoldTransitionModule {
 
     @Provides @UnfoldTransitionATracePrefix fun tracingTagPrefix() = "systemui"
@@ -62,11 +63,6 @@
 
     @Provides
     @Singleton
-    fun provideUnfoldTransitionConfig(context: Context): UnfoldTransitionConfig =
-        createConfig(context)
-
-    @Provides
-    @Singleton
     fun provideNaturalRotationProgressProvider(
         context: Context,
         windowManager: IWindowManager,
diff --git a/packages/SystemUI/src/com/android/systemui/user/CreateUserActivity.java b/packages/SystemUI/src/com/android/systemui/user/CreateUserActivity.java
index cc6bf6a..f017126 100644
--- a/packages/SystemUI/src/com/android/systemui/user/CreateUserActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/user/CreateUserActivity.java
@@ -31,6 +31,7 @@
 
 import com.android.settingslib.users.EditUserInfoController;
 import com.android.systemui.R;
+import com.android.systemui.plugins.ActivityStarter;
 
 import javax.inject.Inject;
 
@@ -55,15 +56,18 @@
     private final UserCreator mUserCreator;
     private final EditUserInfoController mEditUserInfoController;
     private final IActivityManager mActivityManager;
+    private final ActivityStarter mActivityStarter;
 
     private Dialog mSetupUserDialog;
 
     @Inject
     public CreateUserActivity(UserCreator userCreator,
-            EditUserInfoController editUserInfoController, IActivityManager activityManager) {
+            EditUserInfoController editUserInfoController, IActivityManager activityManager,
+            ActivityStarter activityStarter) {
         mUserCreator = userCreator;
         mEditUserInfoController = editUserInfoController;
         mActivityManager = activityManager;
+        mActivityStarter = activityStarter;
     }
 
     @Override
@@ -104,10 +108,7 @@
 
         return mEditUserInfoController.createDialog(
                 this,
-                (intent, requestCode) -> {
-                    mEditUserInfoController.startingActivityForResult();
-                    startActivityForResult(intent, requestCode);
-                },
+                this::startActivity,
                 null,
                 defaultUserName,
                 getString(com.android.settingslib.R.string.user_add_user),
@@ -160,4 +161,17 @@
             Log.e(TAG, "Couldn't switch user.", e);
         }
     }
+
+    /**
+     * Lambda to start activity from an intent. Ensures that device is unlocked first.
+     * @param intent
+     * @param requestCode
+     */
+    private void startActivity(Intent intent, int requestCode) {
+        mActivityStarter.dismissKeyguardThenExecute(() -> {
+            mEditUserInfoController.startingActivityForResult();
+            startActivityForResult(intent, requestCode);
+            return true;
+        }, /* cancel= */ null, /* afterKeyguardGone= */ true);
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/user/UserCreator.java b/packages/SystemUI/src/com/android/systemui/user/UserCreator.java
deleted file mode 100644
index 0686071c..0000000
--- a/packages/SystemUI/src/com/android/systemui/user/UserCreator.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.user;
-
-import android.app.Dialog;
-import android.content.Context;
-import android.content.pm.UserInfo;
-import android.content.res.Resources;
-import android.graphics.drawable.Drawable;
-import android.os.UserManager;
-
-import com.android.internal.util.UserIcons;
-import com.android.settingslib.users.UserCreatingDialog;
-import com.android.settingslib.utils.ThreadUtils;
-
-import java.util.function.Consumer;
-
-import javax.inject.Inject;
-
-/**
- * A class to do the user creation process. It shows a progress dialog, and manages the user
- * creation
- */
-public class UserCreator {
-
-    private final Context mContext;
-    private final UserManager mUserManager;
-
-    @Inject
-    public UserCreator(Context context, UserManager userManager) {
-        mContext = context;
-        mUserManager = userManager;
-    }
-
-    /**
-     * Shows a progress dialog then starts the user creation process on the main thread.
-     *
-     * @param successCallback is called when the user creation is successful.
-     * @param errorCallback   is called when userManager.createUser returns null.
-     *                        (Exceptions are not handled by this class)
-     */
-    public void createUser(String userName, Drawable userIcon, Consumer<UserInfo> successCallback,
-            Runnable errorCallback) {
-
-        Dialog userCreationProgressDialog = new UserCreatingDialog(mContext);
-        userCreationProgressDialog.show();
-
-        // userManager.createUser will block the thread so post is needed for the dialog to show
-        ThreadUtils.postOnMainThread(() -> {
-            UserInfo user =
-                    mUserManager.createUser(userName, UserManager.USER_TYPE_FULL_SECONDARY, 0);
-            if (user == null) {
-                // Couldn't create user for some reason
-                userCreationProgressDialog.dismiss();
-                errorCallback.run();
-                return;
-            }
-
-            Drawable newUserIcon = userIcon;
-            Resources res = mContext.getResources();
-            if (newUserIcon == null) {
-                newUserIcon = UserIcons.getDefaultUserIcon(res, user.id, false);
-            }
-            mUserManager.setUserIcon(
-                    user.id, UserIcons.convertToBitmapAtUserIconSize(res, newUserIcon));
-
-            userCreationProgressDialog.dismiss();
-            successCallback.accept(user);
-        });
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/user/UserCreator.kt b/packages/SystemUI/src/com/android/systemui/user/UserCreator.kt
new file mode 100644
index 0000000..dcbbe74
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/user/UserCreator.kt
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.user
+
+import android.app.Dialog
+import android.content.Context
+import android.content.pm.UserInfo
+import android.graphics.drawable.Drawable
+import android.os.UserManager
+import com.android.internal.util.UserIcons
+import com.android.settingslib.users.UserCreatingDialog
+import com.android.systemui.dagger.qualifiers.Background
+import com.android.systemui.dagger.qualifiers.Main
+import java.util.concurrent.Executor
+import java.util.function.Consumer
+import javax.inject.Inject
+
+/**
+ * A class to do the user creation process. It shows a progress dialog, and manages the user
+ * creation
+ */
+class UserCreator @Inject constructor(
+    private val context: Context,
+    private val userManager: UserManager,
+    @Main private val mainExecutor: Executor,
+    @Background private val bgExecutor: Executor
+) {
+    /**
+     * Shows a progress dialog then starts the user creation process on the main thread.
+     *
+     * @param successCallback is called when the user creation is successful.
+     * @param errorCallback is called when userManager.createUser returns null.
+     * (Exceptions are not handled by this class)
+     */
+    fun createUser(
+        userName: String?,
+        userIcon: Drawable?,
+        successCallback: Consumer<UserInfo?>,
+       errorCallback: Runnable
+    ) {
+        val userCreationProgressDialog: Dialog = UserCreatingDialog(context)
+        userCreationProgressDialog.show()
+
+        // userManager.createUser will block the thread so post is needed for the dialog to show
+        bgExecutor.execute {
+            val user = userManager.createUser(userName, UserManager.USER_TYPE_FULL_SECONDARY, 0)
+            mainExecutor.execute main@{
+                if (user == null) {
+                    // Couldn't create user for some reason
+                    userCreationProgressDialog.dismiss()
+                    errorCallback.run()
+                    return@main
+                }
+                bgExecutor.execute {
+                    var newUserIcon = userIcon
+                    val res = context.resources
+                    if (newUserIcon == null) {
+                        newUserIcon = UserIcons.getDefaultUserIcon(res, user.id, false)
+                    }
+                    userManager.setUserIcon(
+                        user.id, UserIcons.convertToBitmapAtUserIconSize(res, newUserIcon))
+                }
+                userCreationProgressDialog.dismiss()
+                successCallback.accept(user)
+            }
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/user/UserSwitcherActivity.kt b/packages/SystemUI/src/com/android/systemui/user/UserSwitcherActivity.kt
index ad73491..74d5111 100644
--- a/packages/SystemUI/src/com/android/systemui/user/UserSwitcherActivity.kt
+++ b/packages/SystemUI/src/com/android/systemui/user/UserSwitcherActivity.kt
@@ -28,6 +28,7 @@
 import android.os.UserManager
 import android.provider.Settings
 import android.view.LayoutInflater
+import android.view.MotionEvent
 import android.view.View
 import android.view.ViewGroup
 import android.widget.AdapterView
@@ -38,8 +39,10 @@
 import com.android.internal.annotations.VisibleForTesting
 import com.android.internal.util.UserIcons
 import com.android.settingslib.Utils
+import com.android.systemui.Gefingerpoken
 import com.android.systemui.R
 import com.android.systemui.broadcast.BroadcastDispatcher
+import com.android.systemui.classifier.FalsingCollector
 import com.android.systemui.plugins.FalsingManager
 import com.android.systemui.plugins.FalsingManager.LOW_PENALTY
 import com.android.systemui.settings.UserTracker
@@ -61,12 +64,13 @@
     private val userSwitcherController: UserSwitcherController,
     private val broadcastDispatcher: BroadcastDispatcher,
     private val layoutInflater: LayoutInflater,
+    private val falsingCollector: FalsingCollector,
     private val falsingManager: FalsingManager,
     private val userManager: UserManager,
     private val userTracker: UserTracker
 ) : LifecycleActivity() {
 
-    private lateinit var parent: ViewGroup
+    private lateinit var parent: UserSwitcherRootView
     private lateinit var broadcastReceiver: BroadcastReceiver
     private var popupMenu: UserSwitcherPopupMenu? = null
     private lateinit var addButton: View
@@ -202,7 +206,14 @@
             or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
             or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)
 
-        parent = requireViewById<ViewGroup>(R.id.user_switcher_root)
+        parent = requireViewById<UserSwitcherRootView>(R.id.user_switcher_root)
+
+        parent.touchHandler = object : Gefingerpoken {
+            override fun onTouchEvent(ev: MotionEvent?): Boolean {
+                falsingCollector.onTouchEvent(ev)
+                return false
+            }
+        }
 
         requireViewById<View>(R.id.cancel).apply {
             setOnClickListener {
@@ -241,7 +252,7 @@
         )
         popupMenuAdapter.addAll(items)
 
-        popupMenu = UserSwitcherPopupMenu(this, falsingManager).apply {
+        popupMenu = UserSwitcherPopupMenu(this).apply {
             setAnchorView(addButton)
             setAdapter(popupMenuAdapter)
             setOnItemClickListener {
diff --git a/packages/SystemUI/src/com/android/systemui/user/UserSwitcherPopupMenu.kt b/packages/SystemUI/src/com/android/systemui/user/UserSwitcherPopupMenu.kt
index 754a934..ee785b6 100644
--- a/packages/SystemUI/src/com/android/systemui/user/UserSwitcherPopupMenu.kt
+++ b/packages/SystemUI/src/com/android/systemui/user/UserSwitcherPopupMenu.kt
@@ -23,16 +23,13 @@
 import android.widget.ListAdapter
 import android.widget.ListPopupWindow
 import android.widget.ListView
-
 import com.android.systemui.R
-import com.android.systemui.plugins.FalsingManager
 
 /**
  * Popup menu for displaying items on the fullscreen user switcher.
  */
 class UserSwitcherPopupMenu(
-    private val context: Context,
-    private val falsingManager: FalsingManager
+    private val context: Context
 ) : ListPopupWindow(context) {
 
     private val res = context.resources
diff --git a/packages/SystemUI/src/com/android/systemui/user/UserSwitcherRootView.kt b/packages/SystemUI/src/com/android/systemui/user/UserSwitcherRootView.kt
new file mode 100644
index 0000000..66a3017
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/user/UserSwitcherRootView.kt
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.user
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.MotionEvent
+import androidx.constraintlayout.widget.ConstraintLayout
+import com.android.systemui.Gefingerpoken
+
+/** A simple subclass that allows for observing touch events as they happen. */
+class UserSwitcherRootView(
+    context: Context,
+    attrs: AttributeSet?
+) : ConstraintLayout(context, attrs) {
+
+    /** Assign this field to observer touch events. */
+    var touchHandler: Gefingerpoken? = null
+
+    override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
+        touchHandler?.onTouchEvent(ev)
+        return super.dispatchTouchEvent(ev)
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/util/AsyncActivityLauncher.kt b/packages/SystemUI/src/com/android/systemui/util/AsyncActivityLauncher.kt
new file mode 100644
index 0000000..80d0e4b
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/util/AsyncActivityLauncher.kt
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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
+
+import android.app.IActivityTaskManager
+import android.app.WaitResult
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import android.os.UserHandle
+import com.android.systemui.dagger.qualifiers.Main
+import com.android.systemui.dagger.qualifiers.UiBackground
+import java.util.concurrent.Executor
+import javax.inject.Inject
+
+/**
+ * Helper class that allows to launch an activity and asynchronously wait
+ * for it to be launched. This class uses application context, so the intent
+ * will be launched with FLAG_ACTIVITY_NEW_TASK.
+ */
+class AsyncActivityLauncher @Inject constructor(
+    private val context: Context,
+    private val activityTaskManager: IActivityTaskManager,
+    @UiBackground private val backgroundExecutor: Executor,
+    @Main private val mainExecutor: Executor
+) {
+
+    private var pendingCallback: ((WaitResult) -> Unit)? = null
+
+    /**
+     * Starts activity and notifies about the result using the provided [callback].
+     * If there is already pending activity launch the call will be ignored.
+     *
+     * @return true if launch has started, false otherwise
+     */
+    fun startActivityAsUser(intent: Intent, userHandle: UserHandle,
+                            activityOptions: Bundle? = null,
+                            callback: (WaitResult) -> Unit): Boolean {
+        if (pendingCallback != null) return false
+
+        pendingCallback = callback
+
+        intent.flags = intent.flags or Intent.FLAG_ACTIVITY_NEW_TASK
+
+        backgroundExecutor.execute {
+            val waitResult = activityTaskManager.startActivityAndWait(
+                /* caller = */ null,
+                /* callingPackage = */ context.packageName,
+                /* callingFeatureId = */ context.attributionTag,
+                /* intent = */ intent,
+                /* resolvedType = */ null,
+                /* resultTo = */ null,
+                /* resultWho = */ null,
+                /* requestCode = */ 0,
+                /* flags = */ 0,
+                /* profilerInfo = */ null,
+                /* options = */ activityOptions,
+                /* userId = */ userHandle.identifier
+            )
+            mainExecutor.execute {
+                pendingCallback?.invoke(waitResult)
+            }
+        }
+
+        return true
+    }
+
+    /**
+     * Cancels pending activity launches. It guarantees that the callback won't be fired
+     * but the activity will be launched anyway.
+     */
+    fun destroy() {
+        pendingCallback = null
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/util/ConvenienceExtensions.kt b/packages/SystemUI/src/com/android/systemui/util/ConvenienceExtensions.kt
index 57b3f53..ec7aabb 100644
--- a/packages/SystemUI/src/com/android/systemui/util/ConvenienceExtensions.kt
+++ b/packages/SystemUI/src/com/android/systemui/util/ConvenienceExtensions.kt
@@ -16,7 +16,9 @@
 
 package com.android.systemui.util
 
+import android.graphics.Rect
 import android.util.IndentingPrintWriter
+import android.view.View
 import android.view.ViewGroup
 import java.io.PrintWriter
 
@@ -45,4 +47,12 @@
     if (this is IndentingPrintWriter) increaseIndent()
     block()
     if (this is IndentingPrintWriter) decreaseIndent()
-}
\ No newline at end of file
+}
+
+/** Convenience extension property for [View.getBoundsOnScreen]. */
+val View.boundsOnScreen: Rect
+    get() {
+        val bounds = Rect()
+        getBoundsOnScreen(bounds)
+        return bounds
+    }
diff --git a/packages/SystemUI/src/com/android/systemui/util/DelayableMarqueeTextView.kt b/packages/SystemUI/src/com/android/systemui/util/DelayableMarqueeTextView.kt
new file mode 100644
index 0000000..8b90547
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/util/DelayableMarqueeTextView.kt
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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
+
+import android.content.Context
+import android.util.AttributeSet
+import com.android.systemui.R
+
+class DelayableMarqueeTextView @JvmOverloads constructor(
+    context: Context,
+    attrs: AttributeSet? = null,
+    defStyleAttr: Int = 0,
+    defStyleRes: Int = 0
+) : SafeMarqueeTextView(context, attrs, defStyleAttr, defStyleRes) {
+
+    var marqueeDelay: Long = DEFAULT_MARQUEE_DELAY
+    private var wantsMarquee = false
+    private var marqueeBlocked = true
+
+    private val enableMarquee = Runnable {
+        if (wantsMarquee) {
+            marqueeBlocked = false
+            startMarquee()
+        }
+    }
+
+    init {
+        val typedArray = context.theme.obtainStyledAttributes(
+                attrs,
+                R.styleable.DelayableMarqueeTextView,
+                defStyleAttr,
+                defStyleRes
+        )
+        marqueeDelay = typedArray.getInteger(
+                R.styleable.DelayableMarqueeTextView_marqueeDelay,
+                DEFAULT_MARQUEE_DELAY.toInt()
+        ).toLong()
+        typedArray.recycle()
+    }
+
+    override fun startMarquee() {
+        if (!isSelected) {
+            return
+        }
+        wantsMarquee = true
+        if (marqueeBlocked) {
+            if (handler?.hasCallbacks(enableMarquee) == false) {
+                postDelayed(enableMarquee, marqueeDelay)
+            }
+            return
+        }
+        super.startMarquee()
+    }
+
+    override fun stopMarquee() {
+        handler?.removeCallbacks(enableMarquee)
+        wantsMarquee = false
+        marqueeBlocked = true
+        super.stopMarquee()
+    }
+
+    companion object {
+        const val DEFAULT_MARQUEE_DELAY = 2000L
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/util/DumpUtils.kt b/packages/SystemUI/src/com/android/systemui/util/DumpUtils.kt
index f952476..018ef96 100644
--- a/packages/SystemUI/src/com/android/systemui/util/DumpUtils.kt
+++ b/packages/SystemUI/src/com/android/systemui/util/DumpUtils.kt
@@ -55,6 +55,10 @@
     }
 }
 
+/** Print a line which is '$label=$value' */
+fun IndentingPrintWriter.println(label: String, value: Any) =
+    append(label).append('=').println(value)
+
 /** Return a readable string for the visibility */
 fun visibilityString(@View.Visibility visibility: Int): String = when (visibility) {
     View.GONE -> "gone"
diff --git a/packages/SystemUI/src/com/android/systemui/util/InitializationChecker.kt b/packages/SystemUI/src/com/android/systemui/util/InitializationChecker.kt
new file mode 100644
index 0000000..f53b682
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/util/InitializationChecker.kt
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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
+
+import android.app.ActivityThread
+import android.os.Process
+import com.android.systemui.dagger.qualifiers.InstrumentationTest
+import javax.inject.Inject
+
+/**
+ * Used to check whether SystemUI should be fully initialized.
+ */
+class InitializationChecker @Inject constructor(
+    @InstrumentationTest private val instrumentationTest: Boolean
+) {
+
+    /**
+     * Only initialize components for the main system ui process running as the primary user
+     */
+    fun initializeComponents(): Boolean =
+        !instrumentationTest &&
+                Process.myUserHandle().isSystem &&
+                ActivityThread.currentProcessName() == ActivityThread.currentPackageName()
+}
diff --git a/packages/SystemUI/src/com/android/systemui/util/NoRemeasureMotionLayout.kt b/packages/SystemUI/src/com/android/systemui/util/NoRemeasureMotionLayout.kt
new file mode 100644
index 0000000..3095d80
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/util/NoRemeasureMotionLayout.kt
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.Choreographer
+import androidx.constraintlayout.motion.widget.MotionLayout
+
+/**
+ * [MotionLayout] that avoids remeasuring with the same inputs in the same frame.
+ *
+ * This is important when this view is the child of a view that performs more than one measure pass
+ * (e.g. [LinearLayout] or [ConstraintLayout]). In those cases, if this view is measured with the
+ * same inputs in the same frame, we use the last result.
+ */
+class NoRemeasureMotionLayout @JvmOverloads constructor(
+    context: Context,
+    attrs: AttributeSet?,
+    defStyle: Int = 0
+) : MotionLayout(context, attrs, defStyle) {
+
+    private var lastWidthSpec: Int? = null
+    private var lastHeightSpec: Int? = null
+    private var lastFrame: Long? = null
+
+    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
+        if (
+            lastWidthSpec == widthMeasureSpec &&
+            lastHeightSpec == heightMeasureSpec &&
+            Choreographer.getMainThreadInstance()?.frameTime == lastFrame
+        ) {
+            setMeasuredDimension(measuredWidth, measuredHeight)
+            return
+        }
+        traceSection("NoRemeasureMotionLayout - measure") {
+            super.onMeasure(widthMeasureSpec, heightMeasureSpec)
+            lastWidthSpec = widthMeasureSpec
+            lastHeightSpec = heightMeasureSpec
+            lastFrame = Choreographer.getMainThreadInstance()?.frameTime
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/util/NotificationChannels.java b/packages/SystemUI/src/com/android/systemui/util/NotificationChannels.java
index 76dfcb1..53da213 100644
--- a/packages/SystemUI/src/com/android/systemui/util/NotificationChannels.java
+++ b/packages/SystemUI/src/com/android/systemui/util/NotificationChannels.java
@@ -35,11 +35,15 @@
 public class NotificationChannels extends CoreStartable {
     public static String ALERTS      = "ALR";
     public static String SCREENSHOTS_HEADSUP = "SCN_HEADSUP";
-    public static String GENERAL     = "GEN";
+    // Deprecated. Please use or create a more specific channel that users will better understand
+    @Deprecated
+    static String GENERAL     = "GEN";
     public static String STORAGE     = "DSK";
     public static String BATTERY     = "BAT";
     public static String TVPIP       = TvPipNotificationController.NOTIFICATION_CHANNEL; // "TVPIP"
     public static String HINTS       = "HNT";
+    public static String INSTANT     = "INS";
+    public static String SETUP       = "STP";
 
     @Inject
     public NotificationChannels(Context context) {
@@ -64,11 +68,17 @@
                 context.getString(R.string.notification_channel_alerts),
                 NotificationManager.IMPORTANCE_HIGH);
 
-        final NotificationChannel general = new NotificationChannel(
-                GENERAL,
-                context.getString(R.string.notification_channel_general),
+        final NotificationChannel instant = new NotificationChannel(
+                INSTANT,
+                context.getString(R.string.notification_channel_instant),
                 NotificationManager.IMPORTANCE_MIN);
 
+        final NotificationChannel setup = new NotificationChannel(
+                SETUP,
+                context.getString(R.string.notification_channel_setup),
+                NotificationManager.IMPORTANCE_DEFAULT);
+        setup.setSound(null, null);
+
         final NotificationChannel storage = new NotificationChannel(
                 STORAGE,
                 context.getString(R.string.notification_channel_storage),
@@ -84,7 +94,8 @@
 
         nm.createNotificationChannels(Arrays.asList(
                 alerts,
-                general,
+                instant,
+                setup,
                 storage,
                 createScreenshotChannel(
                         context.getString(R.string.notification_channel_screenshot)),
@@ -123,6 +134,11 @@
     @Override
     public void start() {
         createAll(mContext);
+        cleanUp();
+    }
+
+    private void cleanUp() {
+        mContext.getSystemService(NotificationManager.class).deleteNotificationChannel(GENERAL);
     }
 
     private static boolean isTv(Context context) {
diff --git a/packages/SystemUI/src/com/android/systemui/util/PluralMessageFormater.kt b/packages/SystemUI/src/com/android/systemui/util/PluralMessageFormater.kt
new file mode 100644
index 0000000..83b471d
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/util/PluralMessageFormater.kt
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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
+
+import android.annotation.StringRes
+import android.content.res.Resources
+import android.util.PluralsMessageFormatter
+
+/**
+ * Utility method that provides the localized plural string for the given [messageId]
+ * using the [count] parameter.
+ */
+fun icuMessageFormat(res: Resources, @StringRes messageId: Int, count: Int): String {
+    return PluralsMessageFormatter.format(res, mapOf<String, Any>("count" to count), messageId)
+}
diff --git a/packages/SystemUI/src/com/android/systemui/util/condition/Monitor.java b/packages/SystemUI/src/com/android/systemui/util/condition/Monitor.java
index d3c6e9a..dac8a0b 100644
--- a/packages/SystemUI/src/com/android/systemui/util/condition/Monitor.java
+++ b/packages/SystemUI/src/com/android/systemui/util/condition/Monitor.java
@@ -16,16 +16,17 @@
 
 package com.android.systemui.util.condition;
 
+import android.util.ArraySet;
 import android.util.Log;
 
-import com.android.systemui.statusbar.policy.CallbackController;
+import com.android.systemui.dagger.qualifiers.Main;
 
 import org.jetbrains.annotations.NotNull;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
+import java.util.Collections;
+import java.util.HashMap;
 import java.util.Set;
 import java.util.concurrent.Executor;
 import java.util.stream.Collectors;
@@ -36,157 +37,128 @@
  * {@link Monitor} takes in a set of conditions, monitors whether all of them have
  * been fulfilled, and informs any registered listeners.
  */
-public class Monitor implements CallbackController<Monitor.Callback> {
+public class Monitor {
     private final String mTag = getClass().getSimpleName();
-
-    private final ArrayList<Callback> mCallbacks = new ArrayList<>();
-
-    // Set of all conditions that need to be monitored.
-    private final Set<Condition> mConditions;
     private final Executor mExecutor;
 
-    // Whether all conditions have been met.
-    private boolean mAllConditionsMet = false;
+    private final HashMap<Condition, ArraySet<Subscription.Token>> mConditions = new HashMap<>();
+    private final HashMap<Subscription.Token, SubscriptionState> mSubscriptions = new HashMap<>();
 
-    // Whether the monitor has started listening for all the conditions.
-    private boolean mHaveConditionsStarted = false;
+    private static class SubscriptionState {
+        private final Subscription mSubscription;
+        private Boolean mAllConditionsMet;
+
+        SubscriptionState(Subscription subscription) {
+            mSubscription = subscription;
+        }
+
+        public Set<Condition> getConditions() {
+            return mSubscription.mConditions;
+        }
+
+        public void update() {
+            // Overriding conditions do not override each other
+            final Collection<Condition> overridingConditions = mSubscription.mConditions.stream()
+                    .filter(Condition::isOverridingCondition).collect(Collectors.toSet());
+
+            final Collection<Condition> targetCollection = overridingConditions.isEmpty()
+                    ? mSubscription.mConditions : overridingConditions;
+
+            final boolean newAllConditionsMet = targetCollection.isEmpty() ? true : targetCollection
+                    .stream()
+                    .map(Condition::isConditionMet)
+                    .allMatch(conditionMet -> conditionMet);
+
+            if (mAllConditionsMet != null && newAllConditionsMet == mAllConditionsMet) {
+                return;
+            }
+
+            mAllConditionsMet = newAllConditionsMet;
+            mSubscription.mCallback.onConditionsChanged(mAllConditionsMet);
+        }
+    }
 
     // Callback for when each condition has been updated.
     private final Condition.Callback mConditionCallback = new Condition.Callback() {
         @Override
         public void onConditionChanged(Condition condition) {
-            mExecutor.execute(() -> updateConditionMetState());
+            mExecutor.execute(() -> updateConditionMetState(condition));
         }
     };
 
     @Inject
-    public Monitor(Executor executor, Set<Condition> conditions, Set<Callback> callbacks) {
-        mConditions = new HashSet<>();
+    public Monitor(@Main Executor executor) {
         mExecutor = executor;
-
-        if (conditions != null) {
-            mConditions.addAll(conditions);
-        }
-
-        if (callbacks == null) {
-            return;
-        }
-
-        for (Callback callback : callbacks) {
-            addCallbackLocked(callback);
-        }
     }
 
-    private void updateConditionMetState() {
-        // Overriding conditions do not override each other
-        final Collection<Condition> overridingConditions = mConditions.stream()
-                .filter(Condition::isOverridingCondition).collect(Collectors.toSet());
+    private void updateConditionMetState(Condition condition) {
+        final ArraySet<Subscription.Token> subscriptions = mConditions.get(condition);
 
-        final Collection<Condition> targetCollection = overridingConditions.isEmpty()
-                ? mConditions : overridingConditions;
-
-        final boolean newAllConditionsMet = targetCollection.isEmpty() ? true : targetCollection
-                .stream()
-                .map(Condition::isConditionMet)
-                .allMatch(conditionMet -> conditionMet);
-
-        if (newAllConditionsMet == mAllConditionsMet) {
+        // It's possible the condition was removed between the time the callback occurred and
+        // update was executed on the main thread.
+        if (subscriptions == null) {
             return;
         }
 
-        if (shouldLog()) Log.d(mTag, "all conditions met: " + newAllConditionsMet);
-        mAllConditionsMet = newAllConditionsMet;
-
-        // Updates all callbacks.
-        final Iterator<Callback> iterator = mCallbacks.iterator();
-        while (iterator.hasNext()) {
-            final Callback callback = iterator.next();
-            if (callback == null) {
-                iterator.remove();
-            } else {
-                callback.onConditionsChanged(mAllConditionsMet);
-            }
-        }
-    }
-
-    private void addConditionLocked(@NotNull Condition condition) {
-        mConditions.add(condition);
-
-        if (!mHaveConditionsStarted) {
-            return;
-        }
-
-        condition.addCallback(mConditionCallback);
-        updateConditionMetState();
+        subscriptions.stream().forEach(token -> mSubscriptions.get(token).update());
     }
 
     /**
-     * Adds a condition for the monitor to listen to and consider when determining whether the
-     * overall condition state is met.
+     * Registers a callback and the set of conditions to trigger it.
+     * @param subscription A {@link Subscription} detailing the desired conditions and callback.
+     * @return A {@link Subscription.Token} that can be used to remove the subscription.
      */
-    public void addCondition(@NotNull Condition condition) {
-        mExecutor.execute(() -> addConditionLocked(condition));
-    }
+    public Subscription.Token addSubscription(@NotNull Subscription subscription) {
+        final Subscription.Token token = new Subscription.Token();
+        final SubscriptionState state = new SubscriptionState(subscription);
 
-    /**
-     * Removes a condition from further consideration.
-     */
-    public void removeCondition(@NotNull Condition condition) {
         mExecutor.execute(() -> {
-            mConditions.remove(condition);
+            mSubscriptions.put(token, state);
 
-            if (!mHaveConditionsStarted) {
+            // Add and associate conditions.
+            subscription.getConditions().stream().forEach(condition -> {
+                if (!mConditions.containsKey(condition)) {
+                    mConditions.put(condition, new ArraySet<>());
+                    condition.addCallback(mConditionCallback);
+                }
+
+                mConditions.get(condition).add(token);
+            });
+
+            // Update subscription state.
+            state.update();
+
+        });
+        return token;
+    }
+
+    /**
+     * Removes a subscription from participating in future callbacks.
+     * @param token The {@link Subscription.Token} returned when the {@link Subscription} was
+     *              originally added.
+     */
+    public void removeSubscription(@NotNull Subscription.Token token) {
+        mExecutor.execute(() -> {
+            if (shouldLog()) Log.d(mTag, "removing callback");
+            if (!mSubscriptions.containsKey(token)) {
+                Log.e(mTag, "subscription not present:" + token);
                 return;
             }
 
-            condition.removeCallback(mConditionCallback);
-            updateConditionMetState();
-        });
-    }
+            mSubscriptions.remove(token).getConditions().forEach(condition -> {
+                if (!mConditions.containsKey(condition)) {
+                    Log.e(mTag, "condition not present:" + condition);
+                    return;
 
-    private void addCallbackLocked(@NotNull Callback callback) {
-        if (mCallbacks.contains(callback)) {
-            return;
-        }
-
-        if (shouldLog()) Log.d(mTag, "adding callback");
-        mCallbacks.add(callback);
-
-        // Updates the callback immediately.
-        callback.onConditionsChanged(mAllConditionsMet);
-
-        if (!mHaveConditionsStarted) {
-            if (shouldLog()) Log.d(mTag, "starting all conditions");
-            mConditions.forEach(condition -> condition.addCallback(mConditionCallback));
-            updateConditionMetState();
-            mHaveConditionsStarted = true;
-        }
-    }
-
-    @Override
-    public void addCallback(@NotNull Callback callback) {
-        mExecutor.execute(() -> addCallbackLocked(callback));
-    }
-
-    @Override
-    public void removeCallback(@NotNull Callback callback) {
-        mExecutor.execute(() -> {
-            if (shouldLog()) Log.d(mTag, "removing callback");
-            final Iterator<Callback> iterator = mCallbacks.iterator();
-            while (iterator.hasNext()) {
-                final Callback cb = iterator.next();
-                if (cb == null || cb == callback) {
-                    iterator.remove();
                 }
-            }
+                final Set<Subscription.Token> conditionSubscriptions = mConditions.get(condition);
 
-            if (mCallbacks.isEmpty() && mHaveConditionsStarted) {
-                if (shouldLog()) Log.d(mTag, "stopping all conditions");
-                mConditions.forEach(condition -> condition.removeCallback(mConditionCallback));
-
-                mAllConditionsMet = false;
-                mHaveConditionsStarted = false;
-            }
+                conditionSubscriptions.remove(token);
+                if (conditionSubscriptions.isEmpty()) {
+                    condition.removeCallback(mConditionCallback);
+                    mConditions.remove(condition);
+                }
+            });
         });
     }
 
@@ -195,10 +167,92 @@
     }
 
     /**
+     * A {@link Subscription} represents a set of conditions and a callback that is informed when
+     * these conditions change.
+     */
+    public static class Subscription {
+        private final Set<Condition> mConditions;
+        private final Callback mCallback;
+
+        /** */
+        public Subscription(Set<Condition> conditions, Callback callback) {
+            this.mConditions = Collections.unmodifiableSet(conditions);
+            this.mCallback = callback;
+        }
+
+        public Set<Condition> getConditions() {
+            return mConditions;
+        }
+
+        public Callback getCallback() {
+            return mCallback;
+        }
+
+        /**
+         * A {@link Token} is an identifier that is associated with a {@link Subscription} which is
+         * registered with a {@link Monitor}.
+         */
+        public static class Token {
+        }
+
+        /**
+         * {@link Builder} is a helper class for constructing a {@link Subscription}.
+         */
+        public static class Builder {
+            private final Callback mCallback;
+            private final ArraySet<Condition> mConditions;
+
+            /**
+             * Default constructor specifying the {@link Callback} for the {@link Subscription}.
+             * @param callback
+             */
+            public Builder(Callback callback) {
+                mCallback = callback;
+                mConditions = new ArraySet<>();
+            }
+
+            /**
+             * Adds a {@link Condition} to be associated with the {@link Subscription}.
+             * @param condition
+             * @return The updated {@link Builder}.
+             */
+            public Builder addCondition(Condition condition) {
+                mConditions.add(condition);
+                return this;
+            }
+
+            /**
+             * Adds a set of {@link Condition} to be associated with the {@link Subscription}.
+             * @param condition
+             * @return The updated {@link Builder}.
+             */
+            public Builder addConditions(Set<Condition> condition) {
+                mConditions.addAll(condition);
+                return this;
+            }
+
+            /**
+             * Builds the {@link Subscription}.
+             * @return The resulting {@link Subscription}.
+             */
+            public Subscription build() {
+                return new Subscription(mConditions, mCallback);
+            }
+        }
+    }
+
+    /**
      * Callback that receives updates of whether all conditions have been fulfilled.
      */
     public interface Callback {
         /**
+         * Returns the conditions associated with this callback.
+         */
+        default ArrayList<Condition> getConditions() {
+            return new ArrayList<>();
+        }
+
+        /**
          * Triggered when the fulfillment of all conditions have been met.
          *
          * @param allConditionsMet True if all conditions have been fulfilled. False if none or
diff --git a/packages/SystemUI/src/com/android/systemui/util/condition/dagger/MonitorComponent.java b/packages/SystemUI/src/com/android/systemui/util/condition/dagger/MonitorComponent.java
deleted file mode 100644
index fc67973..0000000
--- a/packages/SystemUI/src/com/android/systemui/util/condition/dagger/MonitorComponent.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.util.condition.dagger;
-
-import com.android.systemui.util.condition.Condition;
-import com.android.systemui.util.condition.Monitor;
-
-import java.util.Set;
-
-import dagger.BindsInstance;
-import dagger.Subcomponent;
-
-/**
- * Component for {@link Monitor}.
- */
-@Subcomponent
-public interface MonitorComponent {
-    /**
-     * Factory for {@link MonitorComponent}.
-     */
-    @Subcomponent.Factory
-    interface Factory {
-        MonitorComponent create(@BindsInstance Set<Condition> conditions,
-                @BindsInstance Set<Monitor.Callback> callbacks);
-    }
-
-    /**
-     * Provides {@link Monitor}.
-     * @return
-     */
-    Monitor getMonitor();
-}
diff --git a/packages/SystemUI/src/com/android/systemui/util/dagger/UtilModule.java b/packages/SystemUI/src/com/android/systemui/util/dagger/UtilModule.java
index 7892d6e..981bf01 100644
--- a/packages/SystemUI/src/com/android/systemui/util/dagger/UtilModule.java
+++ b/packages/SystemUI/src/com/android/systemui/util/dagger/UtilModule.java
@@ -18,7 +18,6 @@
 
 import com.android.systemui.util.RingerModeTracker;
 import com.android.systemui.util.RingerModeTrackerImpl;
-import com.android.systemui.util.condition.dagger.MonitorComponent;
 import com.android.systemui.util.wrapper.UtilWrapperModule;
 
 import dagger.Binds;
@@ -27,9 +26,6 @@
 /** Dagger Module for code in the util package. */
 @Module(includes = {
                 UtilWrapperModule.class
-        },
-        subcomponents = {
-                MonitorComponent.class,
         })
 public interface UtilModule {
     /** */
diff --git a/packages/SystemUI/src/com/android/systemui/util/kotlin/CoroutinesModule.kt b/packages/SystemUI/src/com/android/systemui/util/kotlin/CoroutinesModule.kt
new file mode 100644
index 0000000..05d087e
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/util/kotlin/CoroutinesModule.kt
@@ -0,0 +1,41 @@
+package com.android.systemui.util.kotlin
+
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dagger.qualifiers.Application
+import com.android.systemui.dagger.qualifiers.Background
+import com.android.systemui.dagger.qualifiers.Main
+import dagger.Module
+import dagger.Provides
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+
+/** Providers for various coroutines-related constructs. */
+@Module
+object CoroutinesModule {
+    @Provides
+    @SysUISingleton
+    @Application
+    fun applicationScope(
+        @Main dispatcher: CoroutineDispatcher,
+    ): CoroutineScope = CoroutineScope(dispatcher)
+
+    @Provides
+    @SysUISingleton
+    @Main
+    fun mainDispatcher(): CoroutineDispatcher = Dispatchers.Main.immediate
+
+    /**
+     * Provide a [CoroutineDispatcher] backed by a thread pool containing at most X threads, where
+     * X is the number of CPU cores available.
+     *
+     * Because there are multiple threads at play, there is no serialization order guarantee. You
+     * should use a [kotlinx.coroutines.channels.Channel] for serialization if necessary.
+     *
+     * @see Dispatchers.Default
+     */
+    @Provides
+    @SysUISingleton
+    @Background
+    fun bgDispatcher(): CoroutineDispatcher = Dispatchers.Default
+}
diff --git a/packages/SystemUI/src/com/android/systemui/util/service/ObservableServiceConnection.java b/packages/SystemUI/src/com/android/systemui/util/service/ObservableServiceConnection.java
index c57dbe3..064c224 100644
--- a/packages/SystemUI/src/com/android/systemui/util/service/ObservableServiceConnection.java
+++ b/packages/SystemUI/src/com/android/systemui/util/service/ObservableServiceConnection.java
@@ -155,11 +155,6 @@
      * Disconnect from the service if bound.
      */
     public void unbind() {
-        if (!mBoundCalled) {
-            return;
-        }
-        mBoundCalled = false;
-        mContext.unbindService(this);
         onDisconnected(DISCONNECT_REASON_UNBIND);
     }
 
@@ -210,12 +205,15 @@
             Log.d(TAG, "onDisconnected:" + reason);
         }
 
+        // If not bound or already unbound, do not proceed setting reason, unbinding, and
+        // notifying
         if (!mBoundCalled) {
             return;
         }
 
+        mBoundCalled = false;
         mLastDisconnectReason = Optional.of(reason);
-        unbind();
+        mContext.unbindService(this);
         mProxy = null;
 
         applyToCallbacksLocked(callback-> callback.onDisconnected(this,
diff --git a/packages/SystemUI/src/com/android/systemui/util/service/PersistentConnectionManager.java b/packages/SystemUI/src/com/android/systemui/util/service/PersistentConnectionManager.java
index 292c062..6e19bed 100644
--- a/packages/SystemUI/src/com/android/systemui/util/service/PersistentConnectionManager.java
+++ b/packages/SystemUI/src/com/android/systemui/util/service/PersistentConnectionManager.java
@@ -72,6 +72,11 @@
 
         @Override
         public void onDisconnected(ObservableServiceConnection connection, int reason) {
+            // Do not attempt to reconnect if we were manually unbound
+            if (reason == ObservableServiceConnection.DISCONNECT_REASON_UNBIND) {
+                return;
+            }
+
             if (mSystemClock.currentTimeMillis() - mStartTime > mMinConnectionDuration) {
                 initiateConnectionAttempt();
             } else {
diff --git a/packages/SystemUI/src/com/android/systemui/wmshell/BubblesManager.java b/packages/SystemUI/src/com/android/systemui/wmshell/BubblesManager.java
index 83fc281..4c76270 100644
--- a/packages/SystemUI/src/com/android/systemui/wmshell/BubblesManager.java
+++ b/packages/SystemUI/src/com/android/systemui/wmshell/BubblesManager.java
@@ -21,14 +21,10 @@
 import static android.provider.Settings.Secure.NOTIFICATION_BUBBLES;
 import static android.service.notification.NotificationListenerService.REASON_APP_CANCEL;
 import static android.service.notification.NotificationListenerService.REASON_APP_CANCEL_ALL;
-import static android.service.notification.NotificationListenerService.REASON_CANCEL;
-import static android.service.notification.NotificationListenerService.REASON_CANCEL_ALL;
-import static android.service.notification.NotificationListenerService.REASON_CLICK;
 import static android.service.notification.NotificationListenerService.REASON_GROUP_SUMMARY_CANCELED;
 import static android.service.notification.NotificationStats.DISMISSAL_BUBBLE;
 import static android.service.notification.NotificationStats.DISMISS_SENTIMENT_NEUTRAL;
 
-import static com.android.systemui.statusbar.notification.NotificationEntryManager.UNDEFINED_DISMISS_REASON;
 import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_BUBBLES;
 import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_WITH_CLASS_NAME;
 
@@ -38,14 +34,12 @@
 import android.app.NotificationManager;
 import android.content.Context;
 import android.content.pm.UserInfo;
-import android.content.res.Configuration;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.UserHandle;
 import android.provider.Settings;
 import android.service.notification.NotificationListenerService.RankingMap;
 import android.service.notification.ZenModeConfig;
-import android.util.ArraySet;
 import android.util.Log;
 import android.util.Pair;
 import android.util.SparseArray;
@@ -55,17 +49,15 @@
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.statusbar.IStatusBarService;
-import com.android.internal.statusbar.NotificationVisibility;
 import com.android.systemui.Dumpable;
 import com.android.systemui.dagger.SysUISingleton;
 import com.android.systemui.dump.DumpManager;
 import com.android.systemui.model.SysUiState;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.shared.system.QuickStepContract;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
 import com.android.systemui.statusbar.NotificationShadeWindowController;
-import com.android.systemui.statusbar.notification.NotifPipelineFlags;
 import com.android.systemui.statusbar.notification.NotificationChannelHelper;
-import com.android.systemui.statusbar.notification.NotificationEntryListener;
 import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.collection.NotifCollection;
 import com.android.systemui.statusbar.notification.collection.NotifPipeline;
@@ -77,8 +69,7 @@
 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.phone.ShadeController;
-import com.android.systemui.statusbar.policy.ConfigurationController;
+import com.android.systemui.statusbar.phone.StatusBarWindowCallback;
 import com.android.systemui.statusbar.policy.KeyguardStateController;
 import com.android.systemui.statusbar.policy.ZenModeController;
 import com.android.wm.shell.bubbles.Bubble;
@@ -91,6 +82,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Optional;
+import java.util.Set;
 import java.util.concurrent.Executor;
 import java.util.function.Consumer;
 import java.util.function.IntConsumer;
@@ -113,7 +105,6 @@
     private final NotificationInterruptStateProvider mNotificationInterruptStateProvider;
     private final NotificationLockscreenUserManager mNotifUserManager;
     private final NotificationGroupManagerLegacy mNotificationGroupManager;
-    private final NotificationEntryManager mNotificationEntryManager;
     private final CommonNotifCollection mCommonNotifCollection;
     private final NotifPipeline mNotifPipeline;
     private final Executor mSysuiMainExecutor;
@@ -121,6 +112,7 @@
     private final Bubbles.SysuiProxy mSysuiProxy;
     // TODO (b/145659174): allow for multiple callbacks to support the "shadow" new notif pipeline
     private final List<NotifCallback> mCallbacks = new ArrayList<>();
+    private final StatusBarWindowCallback mStatusBarWindowCallback;
 
     /**
      * Creates {@link BubblesManager}, returns {@code null} if Optional {@link Bubbles} not present
@@ -132,7 +124,6 @@
             NotificationShadeWindowController notificationShadeWindowController,
             KeyguardStateController keyguardStateController,
             ShadeController shadeController,
-            ConfigurationController configurationController,
             @Nullable IStatusBarService statusBarService,
             INotificationManager notificationManager,
             NotificationVisibilityProvider visibilityProvider,
@@ -140,11 +131,9 @@
             ZenModeController zenModeController,
             NotificationLockscreenUserManager notifUserManager,
             NotificationGroupManagerLegacy groupManager,
-            NotificationEntryManager entryManager,
             CommonNotifCollection notifCollection,
             NotifPipeline notifPipeline,
             SysUiState sysUiState,
-            NotifPipelineFlags notifPipelineFlags,
             DumpManager dumpManager,
             Executor sysuiMainExecutor) {
         if (bubblesOptional.isPresent()) {
@@ -153,7 +142,6 @@
                     notificationShadeWindowController,
                     keyguardStateController,
                     shadeController,
-                    configurationController,
                     statusBarService,
                     notificationManager,
                     visibilityProvider,
@@ -161,11 +149,9 @@
                     zenModeController,
                     notifUserManager,
                     groupManager,
-                    entryManager,
                     notifCollection,
                     notifPipeline,
                     sysUiState,
-                    notifPipelineFlags,
                     dumpManager,
                     sysuiMainExecutor);
         } else {
@@ -179,7 +165,6 @@
             NotificationShadeWindowController notificationShadeWindowController,
             KeyguardStateController keyguardStateController,
             ShadeController shadeController,
-            ConfigurationController configurationController,
             @Nullable IStatusBarService statusBarService,
             INotificationManager notificationManager,
             NotificationVisibilityProvider visibilityProvider,
@@ -187,11 +172,9 @@
             ZenModeController zenModeController,
             NotificationLockscreenUserManager notifUserManager,
             NotificationGroupManagerLegacy groupManager,
-            NotificationEntryManager entryManager,
             CommonNotifCollection notifCollection,
             NotifPipeline notifPipeline,
             SysUiState sysUiState,
-            NotifPipelineFlags notifPipelineFlags,
             DumpManager dumpManager,
             Executor sysuiMainExecutor) {
         mContext = context;
@@ -203,7 +186,6 @@
         mNotificationInterruptStateProvider = interruptionStateProvider;
         mNotifUserManager = notifUserManager;
         mNotificationGroupManager = groupManager;
-        mNotificationEntryManager = entryManager;
         mCommonNotifCollection = notifCollection;
         mNotifPipeline = notifPipeline;
         mSysuiMainExecutor = sysuiMainExecutor;
@@ -213,11 +195,7 @@
                 ServiceManager.getService(Context.STATUS_BAR_SERVICE))
                 : statusBarService;
 
-        if (notifPipelineFlags.isNewPipelineEnabled()) {
-            setupNotifPipeline();
-        } else {
-            setupNEM();
-        }
+        setupNotifPipeline();
 
         dumpManager.registerDumpable(TAG, this);
 
@@ -230,23 +208,6 @@
             }
         });
 
-        configurationController.addCallback(new ConfigurationController.ConfigurationListener() {
-            @Override
-            public void onConfigChanged(Configuration newConfig) {
-                mBubbles.onConfigChanged(newConfig);
-            }
-
-            @Override
-            public void onUiModeChanged() {
-                mBubbles.updateForThemeChanges();
-            }
-
-            @Override
-            public void onThemeChanged() {
-                mBubbles.updateForThemeChanges();
-            }
-        });
-
         zenModeController.addCallback(new ZenModeController.Callback() {
             @Override
             public void onZenChanged(int zen) {
@@ -278,9 +239,15 @@
 
                 });
 
+        // Store callback in a field so it won't get GC'd
+        mStatusBarWindowCallback =
+                (keyguardShowing, keyguardOccluded, bouncerShowing, isDozing, panelExpanded) ->
+                        mBubbles.onNotificationPanelExpandedChanged(panelExpanded);
+        notificationShadeWindowController.registerCallback(mStatusBarWindowCallback);
+
         mSysuiProxy = new Bubbles.SysuiProxy() {
             @Override
-            public void isNotificationShadeExpand(Consumer<Boolean> callback) {
+            public void isNotificationPanelExpand(Consumer<Boolean> callback) {
                 sysuiMainExecutor.execute(() -> {
                     callback.accept(mNotificationShadeWindowController.getPanelExpanded());
                 });
@@ -295,7 +262,7 @@
             }
 
             @Override
-            public void getShouldRestoredEntries(ArraySet<String> savedBubbleKeys,
+            public void getShouldRestoredEntries(Set<String> savedBubbleKeys,
                     Consumer<List<BubbleEntry>> callback) {
                 sysuiMainExecutor.execute(() -> {
                     List<BubbleEntry> result = new ArrayList<>();
@@ -430,141 +397,6 @@
         mBubbles.setSysuiProxy(mSysuiProxy);
     }
 
-    private void setupNEM() {
-        mNotificationEntryManager.addNotificationEntryListener(
-                new NotificationEntryListener() {
-                    @Override
-                    public void onPendingEntryAdded(NotificationEntry entry) {
-                        BubblesManager.this.onEntryAdded(entry);
-                    }
-
-                    @Override
-                    public void onPreEntryUpdated(NotificationEntry entry) {
-                        BubblesManager.this.onEntryUpdated(entry);
-                    }
-
-                    @Override
-                    public void onEntryRemoved(
-                            NotificationEntry entry,
-                            @Nullable NotificationVisibility visibility,
-                            boolean removedByUser,
-                            int reason) {
-                        BubblesManager.this.onEntryRemoved(entry);
-                    }
-
-                    @Override
-                    public void onNotificationRankingUpdated(RankingMap rankingMap) {
-                        BubblesManager.this.onRankingUpdate(rankingMap);
-                    }
-
-                    @Override
-                    public void onNotificationChannelModified(
-                            String pkgName,
-                            UserHandle user,
-                            NotificationChannel channel,
-                            int modificationType) {
-                        BubblesManager.this.onNotificationChannelModified(pkgName,
-                                user,
-                                channel,
-                                modificationType);
-                    }
-                });
-
-        // The new pipeline takes care of this as a NotifDismissInterceptor BubbleCoordinator
-        mNotificationEntryManager.addNotificationRemoveInterceptor(
-                (key, entry, dismissReason) -> {
-                    final boolean isClearAll = dismissReason == REASON_CANCEL_ALL;
-                    final boolean isUserDismiss = dismissReason == REASON_CANCEL
-                            || dismissReason == REASON_CLICK;
-                    final boolean isAppCancel = dismissReason == REASON_APP_CANCEL
-                            || dismissReason == REASON_APP_CANCEL_ALL;
-                    final boolean isSummaryCancel =
-                            dismissReason == REASON_GROUP_SUMMARY_CANCELED;
-
-                    // Need to check for !appCancel here because the notification may have
-                    // previously been dismissed & entry.isRowDismissed would still be true
-                    boolean userRemovedNotif =
-                            (entry != null && entry.isRowDismissed() && !isAppCancel)
-                                    || isClearAll || isUserDismiss || isSummaryCancel;
-
-                    if (userRemovedNotif) {
-                        return handleDismissalInterception(entry);
-                    }
-                    return false;
-                });
-
-        mNotificationGroupManager.registerGroupChangeListener(
-                new NotificationGroupManagerLegacy.OnGroupChangeListener() {
-                    @Override
-                    public void onGroupSuppressionChanged(
-                            NotificationGroupManagerLegacy.NotificationGroup group,
-                            boolean suppressed) {
-                        // More notifications could be added causing summary to no longer
-                        // be suppressed -- in this case need to remove the key.
-                        final String groupKey = group.summary != null
-                                ? group.summary.getSbn().getGroupKey()
-                                : null;
-                        if (!suppressed && groupKey != null) {
-                            mBubbles.removeSuppressedSummaryIfNecessary(groupKey, null, null);
-                        }
-                    }
-                });
-
-        addNotifCallback(new NotifCallback() {
-            @Override
-            public void removeNotification(NotificationEntry entry,
-                    DismissedByUserStats dismissedByUserStats, int reason) {
-                mNotificationEntryManager.performRemoveNotification(entry.getSbn(),
-                        dismissedByUserStats, reason);
-            }
-
-            @Override
-            public void invalidateNotifications(String reason) {
-                mNotificationEntryManager.updateNotifications(reason);
-            }
-
-            @Override
-            public void maybeCancelSummary(NotificationEntry entry) {
-                // Check if removed bubble has an associated suppressed group summary that needs
-                // to be removed now.
-                final String groupKey = entry.getSbn().getGroupKey();
-                mBubbles.removeSuppressedSummaryIfNecessary(groupKey, (summaryKey) -> {
-                    final NotificationEntry summary =
-                            mNotificationEntryManager.getActiveNotificationUnfiltered(summaryKey);
-                    if (summary != null) {
-                        mNotificationEntryManager.performRemoveNotification(
-                                summary.getSbn(),
-                                getDismissedByUserStats(summary, false),
-                                UNDEFINED_DISMISS_REASON);
-                    }
-                }, mSysuiMainExecutor);
-
-                // Check if we still need to remove the summary from NoManGroup because the summary
-                // may not be in the mBubbleData.mSuppressedGroupKeys list and removed above.
-                // For example:
-                // 1. Bubbled notifications (group) is posted to shade and are visible bubbles
-                // 2. User expands bubbles so now their respective notifications in the shade are
-                // hidden, including the group summary
-                // 3. User removes all bubbles
-                // 4. We expect all the removed bubbles AND the summary (note: the summary was
-                // never added to the suppressedSummary list in BubbleData, so we add this check)
-                NotificationEntry summary = mNotificationGroupManager.getLogicalGroupSummary(entry);
-                if (summary != null) {
-                    ArrayList<NotificationEntry> summaryChildren =
-                            mNotificationGroupManager.getLogicalChildren(summary.getSbn());
-                    boolean isSummaryThisNotif = summary.getKey().equals(entry.getKey());
-                    if (!isSummaryThisNotif && (summaryChildren == null
-                            || summaryChildren.isEmpty())) {
-                        mNotificationEntryManager.performRemoveNotification(
-                                summary.getSbn(),
-                                getDismissedByUserStats(summary, false),
-                                UNDEFINED_DISMISS_REASON);
-                    }
-                }
-            }
-        });
-    }
-
     private void setupNotifPipeline() {
         mNotifPipeline.addCollectionListener(new NotifCollectionListener() {
             @Override
@@ -573,8 +405,8 @@
             }
 
             @Override
-            public void onEntryUpdated(NotificationEntry entry) {
-                BubblesManager.this.onEntryUpdated(entry);
+            public void onEntryUpdated(NotificationEntry entry, boolean fromSystem) {
+                BubblesManager.this.onEntryUpdated(entry, fromSystem);
             }
 
             @Override
@@ -612,9 +444,10 @@
         }
     }
 
-    void onEntryUpdated(NotificationEntry entry) {
+    void onEntryUpdated(NotificationEntry entry, boolean fromSystem) {
+        boolean shouldBubble = mNotificationInterruptStateProvider.shouldBubbleUp(entry);
         mBubbles.onEntryUpdated(notifToBubbleEntry(entry),
-                mNotificationInterruptStateProvider.shouldBubbleUp(entry));
+                shouldBubble, fromSystem);
     }
 
     void onEntryRemoved(NotificationEntry entry) {
diff --git a/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java b/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java
index a6db2aa..eba2795 100644
--- a/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java
+++ b/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java
@@ -47,7 +47,6 @@
 import com.android.systemui.keyguard.ScreenLifecycle;
 import com.android.systemui.keyguard.WakefulnessLifecycle;
 import com.android.systemui.model.SysUiState;
-import com.android.systemui.navigationbar.NavigationModeController;
 import com.android.systemui.shared.tracing.ProtoTraceable;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.policy.ConfigurationController;
@@ -55,10 +54,6 @@
 import com.android.systemui.statusbar.policy.UserInfoController;
 import com.android.systemui.tracing.ProtoTracer;
 import com.android.systemui.tracing.nano.SystemUiTraceProto;
-import com.android.wm.shell.ShellCommandHandler;
-import com.android.wm.shell.compatui.CompatUI;
-import com.android.wm.shell.draganddrop.DragAndDrop;
-import com.android.wm.shell.hidedisplaycutout.HideDisplayCutout;
 import com.android.wm.shell.nano.WmShellTraceProto;
 import com.android.wm.shell.onehanded.OneHanded;
 import com.android.wm.shell.onehanded.OneHandedEventCallback;
@@ -67,6 +62,7 @@
 import com.android.wm.shell.pip.Pip;
 import com.android.wm.shell.protolog.ShellProtoLogImpl;
 import com.android.wm.shell.splitscreen.SplitScreen;
+import com.android.wm.shell.sysui.ShellInterface;
 
 import java.io.PrintWriter;
 import java.util.Arrays;
@@ -106,19 +102,15 @@
                     | SYSUI_STATE_QUICK_SETTINGS_EXPANDED;
 
     // Shell interfaces
+    private final ShellInterface mShell;
     private final Optional<Pip> mPipOptional;
     private final Optional<SplitScreen> mSplitScreenOptional;
     private final Optional<OneHanded> mOneHandedOptional;
-    private final Optional<HideDisplayCutout> mHideDisplayCutoutOptional;
-    private final Optional<ShellCommandHandler> mShellCommandHandler;
-    private final Optional<CompatUI> mCompatUIOptional;
-    private final Optional<DragAndDrop> mDragAndDropOptional;
 
     private final CommandQueue mCommandQueue;
     private final ConfigurationController mConfigurationController;
     private final KeyguardStateController mKeyguardStateController;
     private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
-    private final NavigationModeController mNavigationModeController;
     private final ScreenLifecycle mScreenLifecycle;
     private final SysUiState mSysUiState;
     private final WakefulnessLifecycle mWakefulnessLifecycle;
@@ -126,27 +118,47 @@
     private final UserInfoController mUserInfoController;
     private final Executor mSysUiMainExecutor;
 
+    // Listeners and callbacks. Note that we prefer member variable over anonymous class here to
+    // avoid the situation that some implementations, like KeyguardUpdateMonitor, use WeakReference
+    // internally and anonymous class could be released after registration.
+    private final ConfigurationController.ConfigurationListener mConfigurationListener =
+            new ConfigurationController.ConfigurationListener() {
+                @Override
+                public void onConfigChanged(Configuration newConfig) {
+                    mShell.onConfigurationChanged(newConfig);
+                }
+            };
+    private final KeyguardStateController.Callback mKeyguardStateCallback =
+            new KeyguardStateController.Callback() {
+                @Override
+                public void onKeyguardShowingChanged() {
+                    mShell.onKeyguardVisibilityChanged(mKeyguardStateController.isShowing(),
+                            mKeyguardStateController.isOccluded(),
+                            mKeyguardStateController.isAnimatingBetweenKeyguardAndSurfaceBehind());
+                }
+            };
+    private final KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback =
+            new KeyguardUpdateMonitorCallback() {
+                @Override
+                public void onKeyguardDismissAnimationFinished() {
+                    mShell.onKeyguardDismissAnimationFinished();
+                }
+            };
+
     private boolean mIsSysUiStateValid;
-    private KeyguardUpdateMonitorCallback mSplitScreenKeyguardCallback;
-    private KeyguardUpdateMonitorCallback mPipKeyguardCallback;
     private KeyguardUpdateMonitorCallback mOneHandedKeyguardCallback;
-    private KeyguardStateController.Callback mCompatUIKeyguardCallback;
     private WakefulnessLifecycle.Observer mWakefulnessObserver;
 
     @Inject
     public WMShell(Context context,
+            ShellInterface shell,
             Optional<Pip> pipOptional,
             Optional<SplitScreen> splitScreenOptional,
             Optional<OneHanded> oneHandedOptional,
-            Optional<HideDisplayCutout> hideDisplayCutoutOptional,
-            Optional<ShellCommandHandler> shellCommandHandler,
-            Optional<CompatUI> sizeCompatUIOptional,
-            Optional<DragAndDrop> dragAndDropOptional,
             CommandQueue commandQueue,
             ConfigurationController configurationController,
             KeyguardStateController keyguardStateController,
             KeyguardUpdateMonitor keyguardUpdateMonitor,
-            NavigationModeController navigationModeController,
             ScreenLifecycle screenLifecycle,
             SysUiState sysUiState,
             ProtoTracer protoTracer,
@@ -154,28 +166,32 @@
             UserInfoController userInfoController,
             @Main Executor sysUiMainExecutor) {
         super(context);
+        mShell = shell;
         mCommandQueue = commandQueue;
         mConfigurationController = configurationController;
         mKeyguardStateController = keyguardStateController;
         mKeyguardUpdateMonitor = keyguardUpdateMonitor;
-        mNavigationModeController = navigationModeController;
         mScreenLifecycle = screenLifecycle;
         mSysUiState = sysUiState;
         mPipOptional = pipOptional;
         mSplitScreenOptional = splitScreenOptional;
         mOneHandedOptional = oneHandedOptional;
-        mHideDisplayCutoutOptional = hideDisplayCutoutOptional;
         mWakefulnessLifecycle = wakefulnessLifecycle;
         mProtoTracer = protoTracer;
-        mShellCommandHandler = shellCommandHandler;
-        mCompatUIOptional = sizeCompatUIOptional;
-        mDragAndDropOptional = dragAndDropOptional;
         mUserInfoController = userInfoController;
         mSysUiMainExecutor = sysUiMainExecutor;
     }
 
     @Override
     public void start() {
+        // Notify with the initial configuration and subscribe for new config changes
+        mShell.onConfigurationChanged(mContext.getResources().getConfiguration());
+        mConfigurationController.addCallback(mConfigurationListener);
+
+        // Subscribe to keyguard changes
+        mKeyguardStateController.addCallback(mKeyguardStateCallback);
+        mKeyguardUpdateMonitor.registerCallback(mKeyguardUpdateMonitorCallback);
+
         // TODO: Consider piping config change and other common calls to a shell component to
         //  delegate internally
         mProtoTracer.add(this);
@@ -183,9 +199,6 @@
         mPipOptional.ifPresent(this::initPip);
         mSplitScreenOptional.ifPresent(this::initSplitScreen);
         mOneHandedOptional.ifPresent(this::initOneHanded);
-        mHideDisplayCutoutOptional.ifPresent(this::initHideDisplayCutout);
-        mCompatUIOptional.ifPresent(this::initCompatUi);
-        mDragAndDropOptional.ifPresent(this::initDragAndDrop);
     }
 
     @VisibleForTesting
@@ -197,42 +210,11 @@
             }
         });
 
-        mPipKeyguardCallback = new KeyguardUpdateMonitorCallback() {
-            @Override
-            public void onKeyguardVisibilityChanged(boolean showing) {
-                pip.onKeyguardVisibilityChanged(showing,
-                        mKeyguardStateController.isAnimatingBetweenKeyguardAndSurfaceBehind());
-            }
-
-            @Override
-            public void onKeyguardDismissAnimationFinished() {
-                pip.onKeyguardDismissAnimationFinished();
-            }
-        };
-        mKeyguardUpdateMonitor.registerCallback(mPipKeyguardCallback);
-
         mSysUiState.addCallback(sysUiStateFlag -> {
             mIsSysUiStateValid = (sysUiStateFlag & INVALID_SYSUI_STATE_MASK) == 0;
             pip.onSystemUiStateChanged(mIsSysUiStateValid, sysUiStateFlag);
         });
 
-        mConfigurationController.addCallback(new ConfigurationController.ConfigurationListener() {
-            @Override
-            public void onConfigChanged(Configuration newConfig) {
-                pip.onConfigurationChanged(newConfig);
-            }
-
-            @Override
-            public void onDensityOrFontScaleChanged() {
-                pip.onDensityOrFontScaleChanged();
-            }
-
-            @Override
-            public void onThemeChanged() {
-                pip.onOverlayChanged();
-            }
-        });
-
         // The media session listener needs to be re-registered when switching users
         mUserInfoController.addCallback((String name, Drawable picture, String userAccount) ->
                 pip.registerSessionListenerForCurrentUser());
@@ -240,14 +222,6 @@
 
     @VisibleForTesting
     void initSplitScreen(SplitScreen splitScreen) {
-        mSplitScreenKeyguardCallback = new KeyguardUpdateMonitorCallback() {
-            @Override
-            public void onKeyguardVisibilityChanged(boolean showing) {
-                splitScreen.onKeyguardVisibilityChanged(showing);
-            }
-        };
-        mKeyguardUpdateMonitor.registerCallback(mSplitScreenKeyguardCallback);
-
         mWakefulnessLifecycle.addObserver(new WakefulnessLifecycle.Observer() {
             @Override
             public void onFinishedWakingUp() {
@@ -293,14 +267,9 @@
             }
         });
 
+        // TODO: Either move into ShellInterface or register a receiver on the Shell side directly
         mOneHandedKeyguardCallback = new KeyguardUpdateMonitorCallback() {
             @Override
-            public void onKeyguardVisibilityChanged(boolean showing) {
-                oneHanded.onKeyguardVisibilityChanged(showing);
-                oneHanded.stopOneHanded();
-            }
-
-            @Override
             public void onUserSwitchComplete(int userId) {
                 oneHanded.onUserSwitch(userId);
             }
@@ -348,48 +317,6 @@
                 }
             }
         });
-
-        mConfigurationController.addCallback(new ConfigurationController.ConfigurationListener() {
-            @Override
-            public void onConfigChanged(Configuration newConfig) {
-                oneHanded.onConfigChanged(newConfig);
-            }
-        });
-    }
-
-    @VisibleForTesting
-    void initHideDisplayCutout(HideDisplayCutout hideDisplayCutout) {
-        mConfigurationController.addCallback(new ConfigurationController.ConfigurationListener() {
-            @Override
-            public void onConfigChanged(Configuration newConfig) {
-                hideDisplayCutout.onConfigurationChanged(newConfig);
-            }
-        });
-    }
-
-    @VisibleForTesting
-    void initCompatUi(CompatUI sizeCompatUI) {
-        mCompatUIKeyguardCallback = new KeyguardStateController.Callback() {
-            @Override
-            public void onKeyguardShowingChanged() {
-                sizeCompatUI.onKeyguardShowingChanged(mKeyguardStateController.isShowing());
-            }
-        };
-        mKeyguardStateController.addCallback(mCompatUIKeyguardCallback);
-    }
-
-    void initDragAndDrop(DragAndDrop dragAndDrop) {
-        mConfigurationController.addCallback(new ConfigurationController.ConfigurationListener() {
-            @Override
-            public void onConfigChanged(Configuration newConfig) {
-                dragAndDrop.onConfigChanged(newConfig);
-            }
-
-            @Override
-            public void onThemeChanged() {
-                dragAndDrop.onThemeChanged();
-            }
-        });
     }
 
     @Override
@@ -404,8 +331,7 @@
     @Override
     public void dump(PrintWriter pw, String[] args) {
         // Handle commands if provided
-        if (mShellCommandHandler.isPresent()
-                && mShellCommandHandler.get().handleCommand(args, pw)) {
+        if (mShell.handleCommand(args, pw)) {
             return;
         }
         // Handle logging commands if provided
@@ -413,8 +339,7 @@
             return;
         }
         // Dump WMShell stuff here if no commands were handled
-        mShellCommandHandler.ifPresent(
-                shellCommandHandler -> shellCommandHandler.dump(pw));
+        mShell.dump(pw);
     }
 
     @Override
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/AdminSecondaryLockScreenControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/AdminSecondaryLockScreenControllerTest.java
index dffad6c..80385e6 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/AdminSecondaryLockScreenControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/AdminSecondaryLockScreenControllerTest.java
@@ -44,6 +44,7 @@
 
 import androidx.test.filters.SmallTest;
 
+import com.android.keyguard.KeyguardSecurityModel.SecurityMode;
 import com.android.systemui.SysuiTestCase;
 
 import org.junit.After;
@@ -190,7 +191,7 @@
 
     private void verifyViewDismissed(SurfaceView v) throws Exception {
         verify(mKeyguardSecurityContainer).removeView(v);
-        verify(mKeyguardCallback).dismiss(true, TARGET_USER_ID, true);
+        verify(mKeyguardCallback).dismiss(true, TARGET_USER_ID, true, SecurityMode.Invalid);
         assertThat(mContext.isBound(mComponentName)).isFalse();
     }
 }
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/FontInterpolatorTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/FontInterpolatorTest.kt
deleted file mode 100644
index 95fa3b9..0000000
--- a/packages/SystemUI/tests/src/com/android/keyguard/FontInterpolatorTest.kt
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.keyguard
-
-import android.graphics.Paint
-import android.graphics.fonts.Font
-import android.graphics.fonts.FontVariationAxis
-import android.graphics.text.TextRunShaper
-import android.testing.AndroidTestingRunner
-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
-
-@RunWith(AndroidTestingRunner::class)
-@SmallTest
-class FontInterpolatorTest : SysuiTestCase() {
-
-    private val sFont = TextRunShaper.shapeTextRun("A", 0, 1, 0, 1, 0f, 0f, false, Paint())
-            .getFont(0)
-
-    private fun assertSameAxes(expect: Font, actual: Font) {
-        val expectAxes = expect.axes?.also { it.sortBy { axis -> axis.tag } }
-        val actualAxes = actual.axes?.also { it.sortBy { axis -> axis.tag } }
-        assertThat(expectAxes).isEqualTo(actualAxes)
-    }
-
-    private fun assertSameAxes(expectVarSettings: String, actual: Font) {
-
-        val expectAxes = FontVariationAxis.fromFontVariationSettings(expectVarSettings)?.also {
-            it.sortBy { axis -> axis.tag }
-        }
-        val actualAxes = actual.axes?.also { it.sortBy { axis -> axis.tag } }
-        assertThat(expectAxes).isEqualTo(actualAxes)
-    }
-
-    @Test
-    fun textInterpolation() {
-        val startFont = Font.Builder(sFont)
-                .setFontVariationSettings("'wght' 100, 'ital' 0, 'GRAD' 200")
-                .build()
-        val endFont = Font.Builder(sFont)
-                .setFontVariationSettings("'wght' 900, 'ital' 1, 'GRAD' 700")
-                .build()
-
-        val interp = FontInterpolator()
-        assertSameAxes(startFont, interp.lerp(startFont, endFont, 0f))
-        assertSameAxes(endFont, interp.lerp(startFont, endFont, 1f))
-        assertSameAxes("'wght' 500, 'ital' 0.5, 'GRAD' 450", interp.lerp(startFont, endFont, 0.5f))
-    }
-
-    @Test
-    fun textInterpolation_DefaultValue() {
-        val startFont = Font.Builder(sFont)
-                .setFontVariationSettings("'wght' 100")
-                .build()
-        val endFont = Font.Builder(sFont)
-                .setFontVariationSettings("'ital' 1")
-                .build()
-
-        val interp = FontInterpolator()
-        assertSameAxes("'wght' 250, 'ital' 0.5", interp.lerp(startFont, endFont, 0.5f))
-    }
-
-    @Test
-    fun testInterpCache() {
-        val startFont = Font.Builder(sFont)
-                .setFontVariationSettings("'wght' 100")
-                .build()
-        val endFont = Font.Builder(sFont)
-                .setFontVariationSettings("'ital' 1")
-                .build()
-
-        val interp = FontInterpolator()
-        val resultFont = interp.lerp(startFont, endFont, 0.5f)
-        val cachedFont = interp.lerp(startFont, endFont, 0.5f)
-        assertThat(resultFont).isSameInstanceAs(cachedFont)
-    }
-
-    @Test
-    fun testAxesCache() {
-        val startFont = Font.Builder(sFont)
-                .setFontVariationSettings("'wght' 100")
-                .build()
-        val endFont = Font.Builder(sFont)
-                .setFontVariationSettings("'ital' 1")
-                .build()
-
-        val interp = FontInterpolator()
-        val resultFont = interp.lerp(startFont, endFont, 0.5f)
-        val reversedFont = interp.lerp(endFont, startFont, 0.5f)
-        assertThat(resultFont).isSameInstanceAs(reversedFont)
-    }
-}
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerTest.java
index 5db2cf4..b2d9219 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerTest.java
@@ -48,9 +48,11 @@
 import com.android.systemui.broadcast.BroadcastDispatcher;
 import com.android.systemui.colorextraction.SysuiColorExtractor;
 import com.android.systemui.dump.DumpManager;
+import com.android.systemui.flags.FeatureFlags;
 import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
 import com.android.systemui.plugins.ClockPlugin;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.shared.clocks.AnimatableClockView;
 import com.android.systemui.statusbar.StatusBarState;
 import com.android.systemui.statusbar.lockscreen.LockscreenSmartspaceController;
 import com.android.systemui.statusbar.phone.KeyguardBypassController;
@@ -117,6 +119,8 @@
     private FrameLayout mLargeClockFrame;
     @Mock
     private SecureSettings mSecureSettings;
+    @Mock
+    private FeatureFlags mFeatureFlags;
 
     private final View mFakeSmartspaceView = new View(mContext);
 
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchTest.java
index 8717a0e..6c6f0ac 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchTest.java
@@ -43,6 +43,7 @@
 import com.android.systemui.R;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.plugins.ClockPlugin;
+import com.android.systemui.shared.clocks.AnimatableClockView;
 import com.android.systemui.statusbar.StatusBarState;
 
 import org.junit.Before;
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardHostViewControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardHostViewControllerTest.java
index ac1a83c..4021652 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardHostViewControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardHostViewControllerTest.java
@@ -20,6 +20,7 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.inOrder;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -31,6 +32,7 @@
 import android.testing.TestableLooper;
 import android.testing.TestableResources;
 import android.view.Gravity;
+import android.view.View;
 import android.view.ViewGroup;
 import android.widget.FrameLayout;
 
@@ -42,6 +44,7 @@
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.InOrder;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnit;
 import org.mockito.junit.MockitoRule;
@@ -104,6 +107,17 @@
     }
 
     @Test
+    public void onBouncerVisible_propagatesToKeyguardSecurityContainerController() {
+        mKeyguardHostViewController.onBouncerVisibilityChanged(ViewGroup.VISIBLE);
+        mKeyguardHostViewController.onBouncerVisibilityChanged(ViewGroup.INVISIBLE);
+
+        InOrder order = inOrder(mKeyguardSecurityContainerController);
+        order.verify(mKeyguardSecurityContainerController).onBouncerVisibilityChanged(View.VISIBLE);
+        order.verify(mKeyguardSecurityContainerController).onBouncerVisibilityChanged(
+                View.INVISIBLE);
+    }
+
+    @Test
     public void testGravityReappliedOnConfigurationChange() {
         FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
                 ViewGroup.LayoutParams.MATCH_PARENT,
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardListenQueueTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardListenQueueTest.kt
index b1e2012..bb455da 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardListenQueueTest.kt
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardListenQueueTest.kt
@@ -86,13 +86,13 @@
     becauseCannotSkipBouncer = false,
     biometricSettingEnabledForUser = false,
     bouncerFullyShown = false,
+    onlyFaceEnrolled = false,
     faceAuthenticated = false,
     faceDisabled = false,
     goingToSleep = false,
-    keyguardAwake = false,
+    keyguardAwakeExcludingBouncerShowing = false,
     keyguardGoingAway = false,
     listeningForFaceAssistant = false,
-    lockIconPressed = false,
     occludingAppRequestingFaceAuth = false,
     primaryUser = false,
     scanningAllowedByStrongAuth = false,
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardMessageAreaControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardMessageAreaControllerTest.java
index 1518ea1..8293cc2 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardMessageAreaControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardMessageAreaControllerTest.java
@@ -17,11 +17,13 @@
 package com.android.keyguard;
 
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 
 import android.test.suitebuilder.annotation.SmallTest;
 import android.testing.AndroidTestingRunner;
 
+import com.android.systemui.R;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.statusbar.policy.ConfigurationController;
 import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
@@ -90,4 +92,19 @@
         mMessageAreaController.setBouncerShowing(true);
         verify(mKeyguardMessageArea).setBouncerShowing(true);
     }
+
+    @Test
+    public void testSetMessageIfEmpty_empty() {
+        mMessageAreaController.setMessage("");
+        mMessageAreaController.setMessageIfEmpty(R.string.keyguard_enter_your_pin);
+        verify(mKeyguardMessageArea).setMessage(R.string.keyguard_enter_your_pin);
+    }
+
+    @Test
+    public void testSetMessageIfEmpty_notEmpty() {
+        mMessageAreaController.setMessage("abc");
+        mMessageAreaController.setMessageIfEmpty(R.string.keyguard_enter_your_pin);
+        verify(mKeyguardMessageArea, never()).setMessage(getContext()
+                .getResources().getText(R.string.keyguard_enter_your_pin));
+    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPasswordViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPasswordViewControllerTest.kt
index a1e23a20..ec85603 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPasswordViewControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPasswordViewControllerTest.kt
@@ -73,25 +73,25 @@
     @Before
     fun setup() {
         MockitoAnnotations.initMocks(this)
-        Mockito.`when`(keyguardPasswordView
-                .findViewById<KeyguardMessageArea>(R.id.keyguard_message_area))
-                .thenReturn(mKeyguardMessageArea)
+        Mockito.`when`(
+            keyguardPasswordView.findViewById<KeyguardMessageArea>(R.id.keyguard_message_area)
+        ).thenReturn(mKeyguardMessageArea)
         Mockito.`when`(messageAreaControllerFactory.create(mKeyguardMessageArea))
-                .thenReturn(mKeyguardMessageAreaController)
+            .thenReturn(mKeyguardMessageAreaController)
         keyguardPasswordViewController = KeyguardPasswordViewController(
-                keyguardPasswordView,
-                keyguardUpdateMonitor,
-                securityMode,
-                lockPatternUtils,
-                keyguardSecurityCallback,
-                messageAreaControllerFactory,
-                latencyTracker,
-                inputMethodManager,
-                emergencyButtonController,
-                mainExecutor,
-                mContext.resources,
-                falsingCollector,
-                keyguardViewController
+            keyguardPasswordView,
+            keyguardUpdateMonitor,
+            securityMode,
+            lockPatternUtils,
+            keyguardSecurityCallback,
+            messageAreaControllerFactory,
+            latencyTracker,
+            inputMethodManager,
+            emergencyButtonController,
+            mainExecutor,
+            mContext.resources,
+            falsingCollector,
+            keyguardViewController
         )
     }
 
@@ -110,4 +110,11 @@
         keyguardPasswordViewController.onResume(KeyguardSecurityView.VIEW_REVEALED)
         verify(keyguardPasswordView, never()).requestFocus()
     }
-}
\ No newline at end of file
+
+    @Test
+    fun onResume_testSetInitialText() {
+        keyguardPasswordViewController.onResume(KeyguardSecurityView.SCREEN_ON)
+        verify(mKeyguardMessageAreaController)
+            .setMessageIfEmpty(R.string.keyguard_enter_your_password)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPatternViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPatternViewControllerTest.kt
index 8e1e42a..616a105 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPatternViewControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPatternViewControllerTest.kt
@@ -31,8 +31,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
 
 @SmallTest
@@ -41,28 +41,39 @@
 class KeyguardPatternViewControllerTest : SysuiTestCase() {
     @Mock
     private lateinit var mKeyguardPatternView: KeyguardPatternView
+
     @Mock
     private lateinit var mKeyguardUpdateMonitor: KeyguardUpdateMonitor
+
     @Mock
     private lateinit var mSecurityMode: KeyguardSecurityModel.SecurityMode
+
     @Mock
     private lateinit var mLockPatternUtils: LockPatternUtils
+
     @Mock
     private lateinit var mKeyguardSecurityCallback: KeyguardSecurityCallback
+
     @Mock
     private lateinit var mLatencyTracker: LatencyTracker
     private var mFalsingCollector: FalsingCollector = FalsingCollectorFake()
+
     @Mock
     private lateinit var mEmergencyButtonController: EmergencyButtonController
+
     @Mock
     private lateinit
     var mKeyguardMessageAreaControllerFactory: KeyguardMessageAreaController.Factory
+
     @Mock
     private lateinit var mKeyguardMessageArea: KeyguardMessageArea
+
     @Mock
     private lateinit var mKeyguardMessageAreaController: KeyguardMessageAreaController
+
     @Mock
     private lateinit var mLockPatternView: LockPatternView
+
     @Mock
     private lateinit var mPostureController: DevicePostureController
 
@@ -73,15 +84,17 @@
         MockitoAnnotations.initMocks(this)
         `when`(mKeyguardPatternView.isAttachedToWindow).thenReturn(true)
         `when`(mKeyguardPatternView.findViewById<KeyguardMessageArea>(R.id.keyguard_message_area))
-                .thenReturn(mKeyguardMessageArea)
+            .thenReturn(mKeyguardMessageArea)
         `when`(mKeyguardPatternView.findViewById<LockPatternView>(R.id.lockPatternView))
-                .thenReturn(mLockPatternView)
+            .thenReturn(mLockPatternView)
         `when`(mKeyguardMessageAreaControllerFactory.create(mKeyguardMessageArea))
-                .thenReturn(mKeyguardMessageAreaController)
-        mKeyguardPatternViewController = KeyguardPatternViewController(mKeyguardPatternView,
-        mKeyguardUpdateMonitor, mSecurityMode, mLockPatternUtils, mKeyguardSecurityCallback,
-                mLatencyTracker, mFalsingCollector, mEmergencyButtonController,
-                mKeyguardMessageAreaControllerFactory, mPostureController)
+            .thenReturn(mKeyguardMessageAreaController)
+        mKeyguardPatternViewController = KeyguardPatternViewController(
+            mKeyguardPatternView,
+            mKeyguardUpdateMonitor, mSecurityMode, mLockPatternUtils, mKeyguardSecurityCallback,
+            mLatencyTracker, mFalsingCollector, mEmergencyButtonController,
+            mKeyguardMessageAreaControllerFactory, mPostureController
+        )
     }
 
     @Test
@@ -90,4 +103,11 @@
         mKeyguardPatternViewController.onPause()
         verify(mKeyguardMessageAreaController).setMessage("")
     }
+
+    @Test
+    fun onResume_setInitialText() {
+        mKeyguardPatternViewController.onResume(KeyguardSecurityView.SCREEN_ON)
+        verify(mKeyguardMessageAreaController)
+            .setMessageIfEmpty(R.string.keyguard_enter_your_pattern)
+    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinBasedInputViewControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinBasedInputViewControllerTest.java
index 9597cab..7bc8e8a 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinBasedInputViewControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardPinBasedInputViewControllerTest.java
@@ -113,5 +113,11 @@
         mKeyguardPinViewController.onResume(KeyguardSecurityView.SCREEN_ON);
         verify(mPasswordEntry).requestFocus();
     }
+
+    @Test
+    public void onResume_setInitialText() {
+        mKeyguardPinViewController.onResume(KeyguardSecurityView.SCREEN_ON);
+        verify(mKeyguardMessageAreaController).setMessageIfEmpty(R.string.keyguard_enter_your_pin);
+    }
 }
 
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java
index 4d33430..aecec9d 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java
@@ -21,10 +21,14 @@
 import static com.android.keyguard.KeyguardSecurityContainer.MODE_DEFAULT;
 import static com.android.keyguard.KeyguardSecurityContainer.MODE_ONE_HANDED;
 
+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.eq;
+import static org.mockito.Mockito.atLeastOnce;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.reset;
@@ -34,9 +38,11 @@
 
 import android.content.res.Configuration;
 import android.content.res.Resources;
+import android.hardware.biometrics.BiometricSourceType;
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
 import android.view.MotionEvent;
+import android.view.View;
 import android.view.WindowInsetsController;
 
 import androidx.test.filters.SmallTest;
@@ -47,6 +53,7 @@
 import com.android.keyguard.KeyguardSecurityModel.SecurityMode;
 import com.android.systemui.R;
 import com.android.systemui.SysuiTestCase;
+import com.android.systemui.biometrics.SidefpsController;
 import com.android.systemui.classifier.FalsingCollector;
 import com.android.systemui.flags.FeatureFlags;
 import com.android.systemui.log.SessionTracker;
@@ -60,15 +67,19 @@
 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.junit.MockitoJUnit;
 import org.mockito.junit.MockitoRule;
 
+import java.util.Optional;
+
 @SmallTest
 @RunWith(AndroidTestingRunner.class)
 @TestableLooper.RunWithLooper()
 public class KeyguardSecurityContainerControllerTest extends SysuiTestCase {
-    private static final int VIEW_WIDTH = 1600;
+    private static final int TARGET_USER_ID = 100;
 
     @Rule
     public MockitoRule mRule = MockitoJUnit.rule();
@@ -104,6 +115,8 @@
     @Mock
     private KeyguardMessageAreaController.Factory mKeyguardMessageAreaControllerFactory;
     @Mock
+    private KeyguardMessageAreaController mKeyguardMessageAreaController;
+    @Mock
     private KeyguardMessageArea mKeyguardMessageArea;
     @Mock
     private ConfigurationController mConfigurationController;
@@ -125,6 +138,14 @@
     private SessionTracker mSessionTracker;
     @Mock
     private KeyguardViewController mKeyguardViewController;
+    @Mock
+    private SidefpsController mSidefpsController;
+    @Mock
+    private KeyguardPasswordViewController mKeyguardPasswordViewControllerMock;
+
+    @Captor
+    private ArgumentCaptor<KeyguardUpdateMonitorCallback> mKeyguardUpdateMonitorCallback;
+
     private Configuration mConfiguration;
 
     private KeyguardSecurityContainerController mKeyguardSecurityContainerController;
@@ -139,7 +160,6 @@
         when(mResources.getConfiguration()).thenReturn(mConfiguration);
         when(mView.getContext()).thenReturn(mContext);
         when(mView.getResources()).thenReturn(mResources);
-        when(mView.getWidth()).thenReturn(VIEW_WIDTH);
         when(mAdminSecondaryLockScreenControllerFactory.create(any(KeyguardSecurityCallback.class)))
                 .thenReturn(mAdminSecondaryLockScreenController);
         when(mSecurityViewFlipper.getWindowInsetsController()).thenReturn(mWindowInsetsController);
@@ -147,6 +167,8 @@
         when(mKeyguardPasswordView.getRootView()).thenReturn(mSecurityViewFlipper);
         when(mKeyguardPasswordView.findViewById(R.id.keyguard_message_area))
                 .thenReturn(mKeyguardMessageArea);
+        when(mKeyguardMessageAreaControllerFactory.create(any(KeyguardMessageArea.class)))
+                .thenReturn(mKeyguardMessageAreaController);
         when(mKeyguardPasswordView.getWindowInsetsController()).thenReturn(mWindowInsetsController);
         mKeyguardPasswordViewController = new KeyguardPasswordViewController(
                 (KeyguardPasswordView) mKeyguardPasswordView, mKeyguardUpdateMonitor,
@@ -160,7 +182,7 @@
                 mKeyguardStateController, mKeyguardSecurityViewFlipperController,
                 mConfigurationController, mFalsingCollector, mFalsingManager,
                 mUserSwitcherController, mFeatureFlags, mGlobalSettings,
-                mSessionTracker).create(mSecurityCallback);
+                mSessionTracker, Optional.of(mSidefpsController)).create(mSecurityCallback);
     }
 
     @Test
@@ -208,49 +230,26 @@
                 mUserSwitcherController);
     }
 
-    private void touchDownLeftSide() {
+    private void touchDown() {
         mKeyguardSecurityContainerController.mGlobalTouchListener.onTouchEvent(
                 MotionEvent.obtain(
                         /* downTime= */0,
                         /* eventTime= */0,
                         MotionEvent.ACTION_DOWN,
-                        /* x= */VIEW_WIDTH / 3f,
-                        /* y= */0,
-                        /* metaState= */0));
-    }
-
-    private void touchDownRightSide() {
-        mKeyguardSecurityContainerController.mGlobalTouchListener.onTouchEvent(
-                MotionEvent.obtain(
-                        /* downTime= */0,
-                        /* eventTime= */0,
-                        MotionEvent.ACTION_DOWN,
-                        /* x= */(VIEW_WIDTH / 3f) * 2,
+                        /* x= */0,
                         /* y= */0,
                         /* metaState= */0));
     }
 
     @Test
-    public void onInterceptTap_inhibitsFalsingInOneHandedMode() {
-        when(mView.getMode()).thenReturn(MODE_ONE_HANDED);
-        when(mView.isOneHandedModeLeftAligned()).thenReturn(true);
+    public void onInterceptTap_inhibitsFalsingInSidedSecurityMode() {
 
-        touchDownLeftSide();
+        when(mView.isTouchOnTheOtherSideOfSecurity(any())).thenReturn(false);
+        touchDown();
         verify(mFalsingCollector, never()).avoidGesture();
 
-        // Now on the right.
-        touchDownRightSide();
-        verify(mFalsingCollector).avoidGesture();
-
-        // Move and re-test
-        reset(mFalsingCollector);
-        when(mView.isOneHandedModeLeftAligned()).thenReturn(false);
-
-        // On the right...
-        touchDownRightSide();
-        verify(mFalsingCollector, never()).avoidGesture();
-
-        touchDownLeftSide();
+        when(mView.isTouchOnTheOtherSideOfSecurity(any())).thenReturn(true);
+        touchDown();
         verify(mFalsingCollector).avoidGesture();
     }
 
@@ -281,9 +280,7 @@
     @Test
     public void showSecurityScreen_twoHandedMode_flagEnabled_noOneHandedMode() {
         when(mResources.getBoolean(R.bool.can_use_one_handed_bouncer)).thenReturn(true);
-        when(mKeyguardSecurityViewFlipperController.getSecurityView(
-                eq(SecurityMode.Password), any(KeyguardSecurityCallback.class)))
-                .thenReturn((KeyguardInputViewController) mKeyguardPasswordViewController);
+        setupGetSecurityView();
 
         mKeyguardSecurityContainerController.showSecurityScreen(SecurityMode.Password);
         verify(mView).initMode(MODE_DEFAULT, mGlobalSettings, mFalsingManager,
@@ -299,4 +296,165 @@
         verify(mUserSwitcherController)
                 .removeUserSwitchCallback(any(UserSwitcherController.UserSwitchCallback.class));
     }
+
+    @Test
+    public void onBouncerVisibilityChanged_allConditionsGood_sideFpsHintShown() {
+        setupConditionsToEnableSideFpsHint();
+        reset(mSidefpsController);
+
+        mKeyguardSecurityContainerController.onBouncerVisibilityChanged(View.VISIBLE);
+
+        verify(mSidefpsController).show();
+        verify(mSidefpsController, never()).hide();
+    }
+
+    @Test
+    public void onBouncerVisibilityChanged_fpsSensorNotRunning_sideFpsHintHidden() {
+        setupConditionsToEnableSideFpsHint();
+        setFingerprintDetectionRunning(false);
+        reset(mSidefpsController);
+
+        mKeyguardSecurityContainerController.onBouncerVisibilityChanged(View.VISIBLE);
+
+        verify(mSidefpsController).hide();
+        verify(mSidefpsController, never()).show();
+    }
+
+    @Test
+    public void onBouncerVisibilityChanged_withoutSidedSecurity_sideFpsHintHidden() {
+        setupConditionsToEnableSideFpsHint();
+        setSideFpsHintEnabledFromResources(false);
+        reset(mSidefpsController);
+
+        mKeyguardSecurityContainerController.onBouncerVisibilityChanged(View.VISIBLE);
+
+        verify(mSidefpsController).hide();
+        verify(mSidefpsController, never()).show();
+    }
+
+    @Test
+    public void onBouncerVisibilityChanged_needsStrongAuth_sideFpsHintHidden() {
+        setupConditionsToEnableSideFpsHint();
+        setNeedsStrongAuth(true);
+        reset(mSidefpsController);
+
+        mKeyguardSecurityContainerController.onBouncerVisibilityChanged(View.VISIBLE);
+
+        verify(mSidefpsController).hide();
+        verify(mSidefpsController, never()).show();
+    }
+
+    @Test
+    public void onBouncerVisibilityChanged_sideFpsHintShown_sideFpsHintHidden() {
+        setupGetSecurityView();
+        setupConditionsToEnableSideFpsHint();
+        mKeyguardSecurityContainerController.onBouncerVisibilityChanged(View.VISIBLE);
+        verify(mSidefpsController, atLeastOnce()).show();
+        reset(mSidefpsController);
+
+        mKeyguardSecurityContainerController.onBouncerVisibilityChanged(View.INVISIBLE);
+
+        verify(mSidefpsController).hide();
+        verify(mSidefpsController, never()).show();
+    }
+
+    @Test
+    public void onStartingToHide_sideFpsHintShown_sideFpsHintHidden() {
+        setupGetSecurityView();
+        setupConditionsToEnableSideFpsHint();
+        mKeyguardSecurityContainerController.onBouncerVisibilityChanged(View.VISIBLE);
+        verify(mSidefpsController, atLeastOnce()).show();
+        reset(mSidefpsController);
+
+        mKeyguardSecurityContainerController.onStartingToHide();
+
+        verify(mSidefpsController).hide();
+        verify(mSidefpsController, never()).show();
+    }
+
+    @Test
+    public void onPause_sideFpsHintShown_sideFpsHintHidden() {
+        setupGetSecurityView();
+        setupConditionsToEnableSideFpsHint();
+        mKeyguardSecurityContainerController.onBouncerVisibilityChanged(View.VISIBLE);
+        verify(mSidefpsController, atLeastOnce()).show();
+        reset(mSidefpsController);
+
+        mKeyguardSecurityContainerController.onPause();
+
+        verify(mSidefpsController).hide();
+        verify(mSidefpsController, never()).show();
+    }
+
+    @Test
+    public void showNextSecurityScreenOrFinish_setsSecurityScreenToPinAfterSimPinUnlock() {
+        // GIVEN the current security method is SimPin
+        when(mKeyguardUpdateMonitor.getUserHasTrust(anyInt())).thenReturn(false);
+        when(mKeyguardUpdateMonitor.getUserUnlockedWithBiometric(TARGET_USER_ID)).thenReturn(false);
+        mKeyguardSecurityContainerController.showSecurityScreen(SecurityMode.SimPin);
+
+        // WHEN a request is made from the SimPin screens to show the next security method
+        when(mKeyguardSecurityModel.getSecurityMode(TARGET_USER_ID)).thenReturn(SecurityMode.PIN);
+        mKeyguardSecurityContainerController.showNextSecurityScreenOrFinish(
+                /* authenticated= */true,
+                TARGET_USER_ID,
+                /* bypassSecondaryLockScreen= */true,
+                SecurityMode.SimPin);
+
+        // THEN the next security method of PIN is set, and the keyguard is not marked as done
+        verify(mSecurityCallback, never()).finish(anyBoolean(), anyInt());
+        assertThat(mKeyguardSecurityContainerController.getCurrentSecurityMode())
+                .isEqualTo(SecurityMode.PIN);
+    }
+
+    @Test
+    public void showNextSecurityScreenOrFinish_ignoresCallWhenSecurityMethodHasChanged() {
+        //GIVEN current security mode has been set to PIN
+        mKeyguardSecurityContainerController.showSecurityScreen(SecurityMode.PIN);
+
+        //WHEN a request comes from SimPin to dismiss the security screens
+        boolean keyguardDone = mKeyguardSecurityContainerController.showNextSecurityScreenOrFinish(
+                /* authenticated= */true,
+                TARGET_USER_ID,
+                /* bypassSecondaryLockScreen= */true,
+                SecurityMode.SimPin);
+
+        //THEN no action has happened, which will not dismiss the security screens
+        assertThat(keyguardDone).isEqualTo(false);
+        verify(mKeyguardUpdateMonitor, never()).getUserHasTrust(anyInt());
+    }
+
+    private void setupConditionsToEnableSideFpsHint() {
+        attachView();
+        setSideFpsHintEnabledFromResources(true);
+        setFingerprintDetectionRunning(true);
+        setNeedsStrongAuth(false);
+    }
+
+    private void attachView() {
+        mKeyguardSecurityContainerController.onViewAttached();
+        verify(mKeyguardUpdateMonitor).registerCallback(mKeyguardUpdateMonitorCallback.capture());
+    }
+
+    private void setFingerprintDetectionRunning(boolean running) {
+        when(mKeyguardUpdateMonitor.isFingerprintDetectionRunning()).thenReturn(running);
+        mKeyguardUpdateMonitorCallback.getValue().onBiometricRunningStateChanged(running,
+                BiometricSourceType.FINGERPRINT);
+    }
+
+    private void setSideFpsHintEnabledFromResources(boolean enabled) {
+        when(mResources.getBoolean(R.bool.config_show_sidefps_hint_on_bouncer)).thenReturn(
+                enabled);
+    }
+
+    private void setNeedsStrongAuth(boolean needed) {
+        when(mKeyguardUpdateMonitor.userNeedsStrongAuth()).thenReturn(needed);
+        mKeyguardUpdateMonitorCallback.getValue().onStrongAuthStateChanged(/* userId= */ 0);
+    }
+
+    private void setupGetSecurityView() {
+        when(mKeyguardSecurityViewFlipperController.getSecurityView(
+                any(), any(KeyguardSecurityCallback.class)))
+                .thenReturn((KeyguardInputViewController) mKeyguardPasswordViewControllerMock);
+    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java
index d49f4d8..f2ac0c7 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java
@@ -16,6 +16,11 @@
 
 package com.android.keyguard;
 
+import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
+import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
+import static android.provider.Settings.Global.ONE_HANDED_KEYGUARD_SIDE;
+import static android.provider.Settings.Global.ONE_HANDED_KEYGUARD_SIDE_LEFT;
+import static android.provider.Settings.Global.ONE_HANDED_KEYGUARD_SIDE_RIGHT;
 import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
 import static android.view.WindowInsets.Type.ime;
 import static android.view.WindowInsets.Type.systemBars;
@@ -25,7 +30,9 @@
 
 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.atLeastOnce;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.verify;
@@ -34,14 +41,13 @@
 import android.content.pm.UserInfo;
 import android.content.res.Configuration;
 import android.graphics.Insets;
-import android.provider.Settings;
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
 import android.view.Gravity;
+import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.WindowInsets;
-import android.view.WindowInsetsController;
 import android.widget.FrameLayout;
 
 import androidx.test.filters.SmallTest;
@@ -70,6 +76,9 @@
 @RunWith(AndroidTestingRunner.class)
 @TestableLooper.RunWithLooper()
 public class KeyguardSecurityContainerTest extends SysuiTestCase {
+
+    private static final int VIEW_WIDTH = 1600;
+
     private int mScreenWidth;
     private int mFakeMeasureSpec;
 
@@ -77,8 +86,6 @@
     public MockitoRule mRule = MockitoJUnit.rule();
 
     @Mock
-    private WindowInsetsController mWindowInsetsController;
-    @Mock
     private KeyguardSecurityViewFlipper mSecurityViewFlipper;
     @Mock
     private GlobalSettings mGlobalSettings;
@@ -102,7 +109,6 @@
         mSecurityViewFlipperLayoutParams = new FrameLayout.LayoutParams(
                 MATCH_PARENT, MATCH_PARENT);
 
-        when(mSecurityViewFlipper.getWindowInsetsController()).thenReturn(mWindowInsetsController);
         when(mSecurityViewFlipper.getLayoutParams()).thenReturn(mSecurityViewFlipperLayoutParams);
         mKeyguardSecurityContainer = new KeyguardSecurityContainer(getContext());
         mKeyguardSecurityContainer.mSecurityViewFlipper = mSecurityViewFlipper;
@@ -212,14 +218,12 @@
         mKeyguardSecurityContainer.updatePositionByTouchX(
                 mKeyguardSecurityContainer.getWidth() - 1f);
 
-        verify(mGlobalSettings).putInt(Settings.Global.ONE_HANDED_KEYGUARD_SIDE,
-                Settings.Global.ONE_HANDED_KEYGUARD_SIDE_RIGHT);
-        verify(mSecurityViewFlipper).setTranslationX(
+        verify(mGlobalSettings).putInt(ONE_HANDED_KEYGUARD_SIDE, ONE_HANDED_KEYGUARD_SIDE_RIGHT);
+        assertSecurityTranslationX(
                 mKeyguardSecurityContainer.getWidth() - mSecurityViewFlipper.getWidth());
 
         mKeyguardSecurityContainer.updatePositionByTouchX(1f);
-        verify(mGlobalSettings).putInt(Settings.Global.ONE_HANDED_KEYGUARD_SIDE,
-                Settings.Global.ONE_HANDED_KEYGUARD_SIDE_LEFT);
+        verify(mGlobalSettings).putInt(ONE_HANDED_KEYGUARD_SIDE, ONE_HANDED_KEYGUARD_SIDE_LEFT);
 
         verify(mSecurityViewFlipper).setTranslationX(0.0f);
     }
@@ -237,49 +241,43 @@
     }
 
     @Test
-    public void testUserSwitcherModeViewGravityLandscape() {
+    public void testUserSwitcherModeViewPositionLandscape() {
         // GIVEN one user has been setup and in landscape
         when(mUserSwitcherController.getUsers()).thenReturn(buildUserRecords(1));
-        Configuration config = new Configuration();
-        config.orientation = Configuration.ORIENTATION_LANDSCAPE;
-        when(getContext().getResources().getConfiguration()).thenReturn(config);
+        Configuration landscapeConfig = configuration(ORIENTATION_LANDSCAPE);
+        when(getContext().getResources().getConfiguration()).thenReturn(landscapeConfig);
 
         // WHEN UserSwitcherViewMode is initialized and config has changed
         setupUserSwitcher();
-        reset(mSecurityViewFlipper);
-        when(mSecurityViewFlipper.getLayoutParams()).thenReturn(mSecurityViewFlipperLayoutParams);
-        mKeyguardSecurityContainer.onConfigurationChanged(config);
+        mKeyguardSecurityContainer.onConfigurationChanged(landscapeConfig);
 
         // THEN views are oriented side by side
-        verify(mSecurityViewFlipper).setLayoutParams(mLayoutCaptor.capture());
-        assertThat(mLayoutCaptor.getValue().gravity).isEqualTo(Gravity.RIGHT | Gravity.BOTTOM);
-        ViewGroup userSwitcher = mKeyguardSecurityContainer.findViewById(
-                R.id.keyguard_bouncer_user_switcher);
-        assertThat(((FrameLayout.LayoutParams) userSwitcher.getLayoutParams()).gravity)
-                .isEqualTo(Gravity.LEFT | Gravity.CENTER_VERTICAL);
+        assertSecurityGravity(Gravity.LEFT | Gravity.BOTTOM);
+        assertUserSwitcherGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL);
+        assertSecurityTranslationX(
+                mKeyguardSecurityContainer.getWidth() - mSecurityViewFlipper.getWidth());
+        assertUserSwitcherTranslationX(0f);
+
     }
 
     @Test
     public void testUserSwitcherModeViewGravityPortrait() {
         // GIVEN one user has been setup and in landscape
         when(mUserSwitcherController.getUsers()).thenReturn(buildUserRecords(1));
-        Configuration config = new Configuration();
-        config.orientation = Configuration.ORIENTATION_PORTRAIT;
-        when(getContext().getResources().getConfiguration()).thenReturn(config);
+        Configuration portraitConfig = configuration(ORIENTATION_PORTRAIT);
+        when(getContext().getResources().getConfiguration()).thenReturn(portraitConfig);
 
         // WHEN UserSwitcherViewMode is initialized and config has changed
         setupUserSwitcher();
         reset(mSecurityViewFlipper);
         when(mSecurityViewFlipper.getLayoutParams()).thenReturn(mSecurityViewFlipperLayoutParams);
-        mKeyguardSecurityContainer.onConfigurationChanged(config);
+        mKeyguardSecurityContainer.onConfigurationChanged(portraitConfig);
 
         // THEN views are both centered horizontally
-        verify(mSecurityViewFlipper).setLayoutParams(mLayoutCaptor.capture());
-        assertThat(mLayoutCaptor.getValue().gravity).isEqualTo(Gravity.CENTER_HORIZONTAL);
-        ViewGroup userSwitcher = mKeyguardSecurityContainer.findViewById(
-                R.id.keyguard_bouncer_user_switcher);
-        assertThat(((FrameLayout.LayoutParams) userSwitcher.getLayoutParams()).gravity)
-                .isEqualTo(Gravity.CENTER_HORIZONTAL);
+        assertSecurityGravity(Gravity.CENTER_HORIZONTAL);
+        assertUserSwitcherGravity(Gravity.CENTER_HORIZONTAL);
+        assertSecurityTranslationX(0);
+        assertUserSwitcherTranslationX(0);
     }
 
     @Test
@@ -310,9 +308,102 @@
         assertThat(anchor.isClickable()).isTrue();
     }
 
+    @Test
+    public void testTouchesAreRecognizedAsBeingOnTheOtherSideOfSecurity() {
+        setupUserSwitcher();
+        setViewWidth(VIEW_WIDTH);
+
+        // security is on the right side by default
+        assertThat(mKeyguardSecurityContainer.isTouchOnTheOtherSideOfSecurity(
+                touchEventLeftSide())).isTrue();
+        assertThat(mKeyguardSecurityContainer.isTouchOnTheOtherSideOfSecurity(
+                touchEventRightSide())).isFalse();
+
+        // move security to the left side
+        when(mGlobalSettings.getInt(any(), anyInt())).thenReturn(ONE_HANDED_KEYGUARD_SIDE_LEFT);
+        mKeyguardSecurityContainer.onConfigurationChanged(new Configuration());
+
+        assertThat(mKeyguardSecurityContainer.isTouchOnTheOtherSideOfSecurity(
+                touchEventLeftSide())).isFalse();
+        assertThat(mKeyguardSecurityContainer.isTouchOnTheOtherSideOfSecurity(
+                touchEventRightSide())).isTrue();
+    }
+
+    @Test
+    public void testSecuritySwitchesSidesInLandscapeUserSwitcherMode() {
+        when(getContext().getResources().getConfiguration())
+                .thenReturn(configuration(ORIENTATION_LANDSCAPE));
+        setupUserSwitcher();
+
+        // switch sides
+        when(mGlobalSettings.getInt(any(), anyInt())).thenReturn(ONE_HANDED_KEYGUARD_SIDE_LEFT);
+        mKeyguardSecurityContainer.onConfigurationChanged(new Configuration());
+
+        assertSecurityTranslationX(0);
+        assertUserSwitcherTranslationX(
+                mKeyguardSecurityContainer.getWidth() - mSecurityViewFlipper.getWidth());
+    }
+
+    private Configuration configuration(@Configuration.Orientation int orientation) {
+        Configuration config = new Configuration();
+        config.orientation = orientation;
+        return config;
+    }
+
+    private void assertSecurityTranslationX(float translation) {
+        verify(mSecurityViewFlipper).setTranslationX(translation);
+    }
+
+    private void assertUserSwitcherTranslationX(float translation) {
+        ViewGroup userSwitcher = mKeyguardSecurityContainer.findViewById(
+                R.id.keyguard_bouncer_user_switcher);
+        assertThat(userSwitcher.getTranslationX()).isEqualTo(translation);
+    }
+
+    private void assertUserSwitcherGravity(@Gravity.GravityFlags int gravity) {
+        ViewGroup userSwitcher = mKeyguardSecurityContainer.findViewById(
+                R.id.keyguard_bouncer_user_switcher);
+        assertThat(((FrameLayout.LayoutParams) userSwitcher.getLayoutParams()).gravity)
+                .isEqualTo(gravity);
+    }
+
+    private void assertSecurityGravity(@Gravity.GravityFlags int gravity) {
+        verify(mSecurityViewFlipper, atLeastOnce()).setLayoutParams(mLayoutCaptor.capture());
+        assertThat(mLayoutCaptor.getValue().gravity).isEqualTo(gravity);
+    }
+
+    private void setViewWidth(int width) {
+        mKeyguardSecurityContainer.setRight(width);
+        mKeyguardSecurityContainer.setLeft(0);
+    }
+
+    private MotionEvent touchEventLeftSide() {
+        return MotionEvent.obtain(
+                /* downTime= */0,
+                /* eventTime= */0,
+                MotionEvent.ACTION_DOWN,
+                /* x= */VIEW_WIDTH / 3f,
+                /* y= */0,
+                /* metaState= */0);
+    }
+
+    private MotionEvent touchEventRightSide() {
+        return MotionEvent.obtain(
+                /* downTime= */0,
+                /* eventTime= */0,
+                MotionEvent.ACTION_DOWN,
+                /* x= */(VIEW_WIDTH / 3f) * 2,
+                /* y= */0,
+                /* metaState= */0);
+    }
+
     private void setupUserSwitcher() {
+        when(mGlobalSettings.getInt(any(), anyInt())).thenReturn(ONE_HANDED_KEYGUARD_SIDE_RIGHT);
         mKeyguardSecurityContainer.initMode(KeyguardSecurityContainer.MODE_USER_SWITCHER,
                 mGlobalSettings, mFalsingManager, mUserSwitcherController);
+        // reset mSecurityViewFlipper so setup doesn't influence test verifications
+        reset(mSecurityViewFlipper);
+        when(mSecurityViewFlipper.getLayoutParams()).thenReturn(mSecurityViewFlipperLayoutParams);
     }
 
     private ArrayList<UserRecord> buildUserRecords(int count) {
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewControllerTest.java
index 70025230..4dcaa7c 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardStatusViewControllerTest.java
@@ -89,28 +89,6 @@
     }
 
     @Test
-    public void timeFormatUpdateNotifiesClockSwitchController() {
-        mController.onViewAttached();
-
-        verify(mKeyguardUpdateMonitor).registerCallback(
-                mKeyguardUpdateMonitorCallbackCaptor.capture());
-
-        mKeyguardUpdateMonitorCallbackCaptor.getValue().onTimeFormatChanged("");
-        verify(mKeyguardClockSwitchController).refreshFormat();
-    }
-
-    @Test
-    public void userChangeNotifiesClockSwitchController() {
-        mController.onViewAttached();
-
-        verify(mKeyguardUpdateMonitor).registerCallback(
-                mKeyguardUpdateMonitorCallbackCaptor.capture());
-
-        mKeyguardUpdateMonitorCallbackCaptor.getValue().onUserSwitchComplete(0);
-        verify(mKeyguardClockSwitchController).refreshFormat();
-    }
-
-    @Test
     public void setTranslationYExcludingMedia_forwardsCallToView() {
         float translationY = 123f;
 
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
index 2dc066c..c677371 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
@@ -16,11 +16,13 @@
 
 package com.android.keyguard;
 
+import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ERROR_LOCKOUT;
 import static android.telephony.SubscriptionManager.DATA_ROAMING_DISABLE;
 import static android.telephony.SubscriptionManager.NAME_SOURCE_CARRIER_ID;
 
 import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.SOME_AUTH_REQUIRED_AFTER_USER_REQUEST;
 import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_BOOT;
+import static com.android.keyguard.KeyguardUpdateMonitor.DEFAULT_CANCEL_SIGNAL_TIMEOUT;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -31,7 +33,6 @@
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.atLeastOnce;
 import static org.mockito.Mockito.clearInvocations;
-import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
@@ -41,6 +42,7 @@
 
 import android.app.Activity;
 import android.app.ActivityManager;
+import android.app.IActivityManager;
 import android.app.admin.DevicePolicyManager;
 import android.app.trust.IStrongAuthTracker;
 import android.app.trust.TrustManager;
@@ -52,6 +54,7 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.content.pm.ServiceInfo;
+import android.content.pm.UserInfo;
 import android.hardware.biometrics.BiometricConstants;
 import android.hardware.biometrics.BiometricManager;
 import android.hardware.biometrics.BiometricSourceType;
@@ -68,6 +71,7 @@
 import android.os.CancellationSignal;
 import android.os.Handler;
 import android.os.IRemoteCallback;
+import android.os.RemoteException;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.telephony.ServiceState;
@@ -86,6 +90,7 @@
 import com.android.internal.widget.ILockSettings;
 import com.android.internal.widget.LockPatternUtils;
 import com.android.keyguard.KeyguardUpdateMonitor.BiometricAuthenticated;
+import com.android.keyguard.logging.KeyguardUpdateMonitorLogger;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.biometrics.AuthController;
 import com.android.systemui.broadcast.BroadcastDispatcher;
@@ -105,6 +110,7 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.mockito.MockitoSession;
+import org.mockito.internal.util.reflection.FieldSetter;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -179,26 +185,41 @@
     private KeyguardUpdateMonitorCallback mTestCallback;
     @Mock
     private ActiveUnlockConfig mActiveUnlockConfig;
+    @Mock
+    private KeyguardUpdateMonitorLogger mKeyguardUpdateMonitorLogger;
+    @Mock
+    private IActivityManager mActivityService;
+
+    private final int mCurrentUserId = 100;
+    private final UserInfo mCurrentUserInfo = new UserInfo(mCurrentUserId, "Test user", 0);
+
+    @Captor
+    private ArgumentCaptor<IBiometricEnabledOnKeyguardCallback>
+            mBiometricEnabledCallbackArgCaptor;
+    @Captor
+    private ArgumentCaptor<FaceManager.AuthenticationCallback> mAuthenticationCallbackCaptor;
+    @Captor
+    private ArgumentCaptor<CancellationSignal> mCancellationSignalCaptor;
+
     // Direct executor
-    private Executor mBackgroundExecutor = Runnable::run;
-    private Executor mMainExecutor = Runnable::run;
+    private final Executor mBackgroundExecutor = Runnable::run;
+    private final Executor mMainExecutor = Runnable::run;
     private TestableLooper mTestableLooper;
+    private Handler mHandler;
     private TestableKeyguardUpdateMonitor mKeyguardUpdateMonitor;
     private TestableContext mSpiedContext;
     private MockitoSession mMockitoSession;
     private StatusBarStateController.StateListener mStatusBarStateListener;
+    private IBiometricEnabledOnKeyguardCallback mBiometricEnabledOnKeyguardCallback;
 
     @Before
-    public void setup() {
+    public void setup() throws RemoteException {
         MockitoAnnotations.initMocks(this);
         mSpiedContext = spy(mContext);
         when(mPackageManager.hasSystemFeature(anyString())).thenReturn(true);
         when(mSpiedContext.getPackageManager()).thenReturn(mPackageManager);
-        doAnswer(invocation -> {
-            IBiometricEnabledOnKeyguardCallback callback = invocation.getArgument(0);
-            callback.onChanged(true /* enabled */, KeyguardUpdateMonitor.getCurrentUser());
-            return null;
-        }).when(mBiometricManager).registerEnabledOnKeyguardCallback(any());
+        when(mActivityService.getCurrentUser()).thenReturn(mCurrentUserInfo);
+        when(mActivityService.getCurrentUserId()).thenReturn(mCurrentUserId);
         when(mFaceManager.isHardwareDetected()).thenReturn(true);
         when(mFaceManager.hasEnrolledTemplates()).thenReturn(true);
         when(mFaceManager.hasEnrolledTemplates(anyInt())).thenReturn(true);
@@ -259,13 +280,27 @@
                 .startMocking();
         ExtendedMockito.doReturn(SubscriptionManager.INVALID_SUBSCRIPTION_ID)
                 .when(SubscriptionManager::getDefaultSubscriptionId);
+        KeyguardUpdateMonitor.setCurrentUser(mCurrentUserId);
         ExtendedMockito.doReturn(KeyguardUpdateMonitor.getCurrentUser())
                 .when(ActivityManager::getCurrentUser);
+        ExtendedMockito.doReturn(mActivityService).when(ActivityManager::getService);
 
         mTestableLooper = TestableLooper.get(this);
         allowTestableLooperAsMainThread();
         mKeyguardUpdateMonitor = new TestableKeyguardUpdateMonitor(mSpiedContext);
 
+        verify(mBiometricManager)
+                .registerEnabledOnKeyguardCallback(mBiometricEnabledCallbackArgCaptor.capture());
+        mBiometricEnabledOnKeyguardCallback = mBiometricEnabledCallbackArgCaptor.getValue();
+        biometricsEnabledForCurrentUser();
+
+        mHandler = spy(mKeyguardUpdateMonitor.getHandler());
+        try {
+            FieldSetter.setField(mKeyguardUpdateMonitor,
+                    KeyguardUpdateMonitor.class.getDeclaredField("mHandler"), mHandler);
+        } catch (NoSuchFieldException e) {
+
+        }
         verify(mStatusBarStateController).addCallback(mStatusBarStateListenerCaptor.capture());
         mStatusBarStateListener = mStatusBarStateListenerCaptor.getValue();
         mKeyguardUpdateMonitor.registerCallback(mTestCallback);
@@ -305,7 +340,7 @@
 
         when(mTelephonyManager.getActiveModemCount()).thenReturn(1);
         when(mTelephonyManager.getSimState(anyInt())).thenReturn(state);
-        when(mSubscriptionManager.getSubscriptionIds(anyInt())).thenReturn(new int[] { subId });
+        when(mSubscriptionManager.getSubscriptionIds(anyInt())).thenReturn(new int[]{subId});
 
         KeyguardUpdateMonitor testKUM = new TestableKeyguardUpdateMonitor(mSpiedContext);
 
@@ -480,7 +515,7 @@
         // Even SimState Loaded, still need ACTION_SERVICE_STATE turn on mTelephonyCapable
         assertThat(mKeyguardUpdateMonitor.mTelephonyCapable).isFalse();
 
-        Intent intentServiceState =  new Intent(Intent.ACTION_SERVICE_STATE);
+        Intent intentServiceState = new Intent(Intent.ACTION_SERVICE_STATE);
         intentSimState.putExtra(Intent.EXTRA_SIM_STATE
                 , Intent.SIM_STATE_LOADED);
         mKeyguardUpdateMonitor.mBroadcastReceiver.onReceive(getContext()
@@ -495,7 +530,7 @@
         mTestableLooper.processAllMessages();
 
         verify(mFingerprintManager).authenticate(any(), any(), any(), any(), anyInt(), anyInt(),
-                        anyInt());
+                anyInt());
         verify(mFingerprintManager, never()).detectFingerprint(any(), any(), anyInt());
     }
 
@@ -545,11 +580,12 @@
 
     @Test
     public void testTriesToAuthenticate_whenBouncer() {
+        fingerprintIsNotEnrolled();
         setKeyguardBouncerVisibility(true);
 
         verify(mFaceManager).authenticate(any(), any(), any(), any(), anyInt(), anyBoolean());
-        verify(mFaceManager).isHardwareDetected();
-        verify(mFaceManager).hasEnrolledTemplates(anyInt());
+        verify(mFaceManager, atLeastOnce()).isHardwareDetected();
+        verify(mFaceManager, atLeastOnce()).hasEnrolledTemplates(anyInt());
     }
 
     @Test
@@ -715,7 +751,6 @@
         verify(mLockPatternUtils).requireStrongAuth(anyInt(), anyInt());
     }
 
-
     @Test
     public void testFaceAndFingerprintLockout() {
         mKeyguardUpdateMonitor.dispatchStartedWakingUp();
@@ -766,7 +801,8 @@
     public void testBiometricsCleared_whenUserSwitches() throws Exception {
         final IRemoteCallback reply = new IRemoteCallback.Stub() {
             @Override
-            public void sendResult(Bundle data) {} // do nothing
+            public void sendResult(Bundle data) {
+            } // do nothing
         };
         final BiometricAuthenticated dummyAuthentication =
                 new BiometricAuthenticated(true /* authenticated */, true /* strong */);
@@ -784,7 +820,8 @@
     public void testMultiUserJankMonitor_whenUserSwitches() throws Exception {
         final IRemoteCallback reply = new IRemoteCallback.Stub() {
             @Override
-            public void sendResult(Bundle data) {} // do nothing
+            public void sendResult(Bundle data) {
+            } // do nothing
         };
         mKeyguardUpdateMonitor.handleUserSwitchComplete(10 /* user */);
         verify(mInteractionJankMonitor).end(InteractionJankMonitor.CUJ_USER_SWITCH);
@@ -921,6 +958,7 @@
 
     @Test
     public void testSecondaryLockscreenRequirement() {
+        KeyguardUpdateMonitor.setCurrentUser(UserHandle.myUserId());
         int user = KeyguardUpdateMonitor.getCurrentUser();
         String packageName = "fake.test.package";
         String cls = "FakeService";
@@ -1094,8 +1132,7 @@
     @Test
     public void testShouldNotUpdateBiometricListeningStateOnStatusBarStateChange() {
         // GIVEN state for face auth should run aside from StatusBarState
-        when(mDevicePolicyManager.getKeyguardDisabledFeatures(null,
-                KeyguardUpdateMonitor.getCurrentUser())).thenReturn(0);
+        biometricsNotDisabledThroughDevicePolicyManager();
         mStatusBarStateListener.onStateChanged(StatusBarState.SHADE_LOCKED);
         setKeyguardBouncerVisibility(false /* isVisible */);
         mKeyguardUpdateMonitor.dispatchStartedWakingUp();
@@ -1109,8 +1146,7 @@
 
         // THEN face unlock is not running b/c status bar state changes don't cause biometric
         // listening state to update
-        assertThat(mKeyguardUpdateMonitor.isFaceUnlockRunning(
-                KeyguardUpdateMonitor.getCurrentUser())).isEqualTo(false);
+        assertThat(mKeyguardUpdateMonitor.isFaceDetectionRunning()).isEqualTo(false);
 
         // WHEN biometric listening state is updated
         mKeyguardUpdateMonitor.onKeyguardVisibilityChanged(true);
@@ -1151,6 +1187,471 @@
         verify(mTestCallback).showTrustGrantedMessage("Unlocked by wearable");
     }
 
+    @Test
+    public void testShouldListenForFace_whenFaceManagerNotAvailable_returnsFalse() {
+        mFaceManager = null;
+        mKeyguardUpdateMonitor = new TestableKeyguardUpdateMonitor(mSpiedContext);
+
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isFalse();
+    }
+
+    @Test
+    public void testShouldListenForFace_whenFpIsLockedOut_returnsFalse() throws RemoteException {
+        // Face auth should run when the following is true.
+        keyguardNotGoingAway();
+        bouncerFullyVisibleAndNotGoingToSleep();
+        currentUserIsPrimary();
+        strongAuthNotRequired();
+        biometricsEnabledForCurrentUser();
+        currentUserDoesNotHaveTrust();
+        biometricsNotDisabledThroughDevicePolicyManager();
+        userNotCurrentlySwitching();
+        mTestableLooper.processAllMessages();
+
+        // Fingerprint is locked out.
+        fingerprintErrorLockedOut();
+
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isFalse();
+    }
+
+    @Test
+    public void testShouldListenForFace_whenFaceIsAlreadyAuthenticated_returnsFalse()
+            throws RemoteException {
+        // Face auth should run when the following is true.
+        bouncerFullyVisibleAndNotGoingToSleep();
+        fingerprintIsNotEnrolled();
+        keyguardNotGoingAway();
+        currentUserIsPrimary();
+        strongAuthNotRequired();
+        biometricsEnabledForCurrentUser();
+        currentUserDoesNotHaveTrust();
+        biometricsNotDisabledThroughDevicePolicyManager();
+        userNotCurrentlySwitching();
+
+        mTestableLooper.processAllMessages();
+
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isTrue();
+
+        triggerSuccessfulFaceAuth();
+        mTestableLooper.processAllMessages();
+
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isFalse();
+    }
+
+    @Test
+    public void testShouldListenForFace_whenUserIsNotPrimary_returnsFalse() throws RemoteException {
+        // This disables face auth
+        when(mUserManager.isPrimaryUser()).thenReturn(false);
+        mKeyguardUpdateMonitor =
+                new TestableKeyguardUpdateMonitor(mSpiedContext);
+
+        // Preconditions for face auth to run
+        keyguardNotGoingAway();
+        bouncerFullyVisibleAndNotGoingToSleep();
+        strongAuthNotRequired();
+        biometricsEnabledForCurrentUser();
+        currentUserDoesNotHaveTrust();
+        biometricsNotDisabledThroughDevicePolicyManager();
+        userNotCurrentlySwitching();
+        mTestableLooper.processAllMessages();
+
+
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isFalse();
+    }
+
+    @Test
+    public void testShouldListenForFace_whenStrongAuthDoesNotAllowScanning_returnsFalse()
+            throws RemoteException {
+        // Preconditions for face auth to run
+        keyguardNotGoingAway();
+        bouncerFullyVisibleAndNotGoingToSleep();
+        currentUserIsPrimary();
+        biometricsEnabledForCurrentUser();
+        currentUserDoesNotHaveTrust();
+        biometricsNotDisabledThroughDevicePolicyManager();
+        userNotCurrentlySwitching();
+
+        // This disables face auth
+        when(mStrongAuthTracker.getStrongAuthForUser(KeyguardUpdateMonitor.getCurrentUser()))
+                .thenReturn(STRONG_AUTH_REQUIRED_AFTER_BOOT);
+        mTestableLooper.processAllMessages();
+
+
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isFalse();
+    }
+
+    @Test
+    public void testShouldListenForFace_whenBiometricsDisabledForUser_returnsFalse()
+            throws RemoteException {
+        // Preconditions for face auth to run
+        keyguardNotGoingAway();
+        bouncerFullyVisibleAndNotGoingToSleep();
+        fingerprintIsNotEnrolled();
+        currentUserIsPrimary();
+        currentUserDoesNotHaveTrust();
+        biometricsNotDisabledThroughDevicePolicyManager();
+        biometricsEnabledForCurrentUser();
+        userNotCurrentlySwitching();
+        mTestableLooper.processAllMessages();
+
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isTrue();
+
+        // This disables face auth
+        biometricsDisabledForCurrentUser();
+        mTestableLooper.processAllMessages();
+
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isFalse();
+    }
+
+    @Test
+    public void testShouldListenForFace_whenUserCurrentlySwitching_returnsFalse()
+            throws RemoteException {
+        // Preconditions for face auth to run
+        keyguardNotGoingAway();
+        bouncerFullyVisibleAndNotGoingToSleep();
+        fingerprintIsNotEnrolled();
+        currentUserIsPrimary();
+        currentUserDoesNotHaveTrust();
+        biometricsNotDisabledThroughDevicePolicyManager();
+        biometricsEnabledForCurrentUser();
+        userNotCurrentlySwitching();
+        mTestableLooper.processAllMessages();
+
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isTrue();
+
+        userCurrentlySwitching();
+        mTestableLooper.processAllMessages();
+
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isFalse();
+    }
+
+    @Test
+    public void testShouldListenForFace_whenSecureCameraLaunched_returnsFalse()
+            throws RemoteException {
+        // Preconditions for face auth to run
+        keyguardNotGoingAway();
+        bouncerFullyVisibleAndNotGoingToSleep();
+        fingerprintIsNotEnrolled();
+        currentUserIsPrimary();
+        currentUserDoesNotHaveTrust();
+        biometricsNotDisabledThroughDevicePolicyManager();
+        biometricsEnabledForCurrentUser();
+        userNotCurrentlySwitching();
+        mTestableLooper.processAllMessages();
+
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isTrue();
+
+        secureCameraLaunched();
+        mTestableLooper.processAllMessages();
+
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isFalse();
+    }
+
+    @Test
+    public void testShouldListenForFace_whenOccludingAppRequestsFaceAuth_returnsTrue()
+            throws RemoteException {
+        // Preconditions for face auth to run
+        keyguardNotGoingAway();
+        bouncerFullyVisibleAndNotGoingToSleep();
+        currentUserIsPrimary();
+        currentUserDoesNotHaveTrust();
+        biometricsNotDisabledThroughDevicePolicyManager();
+        biometricsEnabledForCurrentUser();
+        userNotCurrentlySwitching();
+        mTestableLooper.processAllMessages();
+
+        secureCameraLaunched();
+
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isFalse();
+
+        occludingAppRequestsFaceAuth();
+        mTestableLooper.processAllMessages();
+
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isTrue();
+    }
+
+    @Test
+    public void testShouldListenForFace_whenBouncerShowingAndDeviceIsAwake_returnsTrue()
+            throws RemoteException {
+        // Preconditions for face auth to run
+        keyguardNotGoingAway();
+        currentUserIsPrimary();
+        currentUserDoesNotHaveTrust();
+        biometricsNotDisabledThroughDevicePolicyManager();
+        biometricsEnabledForCurrentUser();
+        userNotCurrentlySwitching();
+        mTestableLooper.processAllMessages();
+
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isFalse();
+
+        bouncerFullyVisibleAndNotGoingToSleep();
+        fingerprintIsNotEnrolled();
+        mTestableLooper.processAllMessages();
+
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isTrue();
+    }
+
+    @Test
+    public void testShouldListenForFace_whenAuthInterruptIsActive_returnsTrue()
+            throws RemoteException {
+        // Preconditions for face auth to run
+        keyguardNotGoingAway();
+        currentUserIsPrimary();
+        currentUserDoesNotHaveTrust();
+        biometricsNotDisabledThroughDevicePolicyManager();
+        biometricsEnabledForCurrentUser();
+        userNotCurrentlySwitching();
+        mTestableLooper.processAllMessages();
+
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isFalse();
+
+        triggerAuthInterrupt();
+        mTestableLooper.processAllMessages();
+
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isTrue();
+    }
+
+    @Test
+    public void testShouldListenForFace_whenKeyguardIsAwake_returnsTrue() throws RemoteException {
+        // Preconditions for face auth to run
+        keyguardNotGoingAway();
+        currentUserIsPrimary();
+        currentUserDoesNotHaveTrust();
+        biometricsNotDisabledThroughDevicePolicyManager();
+        biometricsEnabledForCurrentUser();
+        userNotCurrentlySwitching();
+        bouncerFullyVisible();
+
+        statusBarShadeIsLocked();
+        mTestableLooper.processAllMessages();
+
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isFalse();
+
+        deviceNotGoingToSleep();
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isFalse();
+        deviceIsInteractive();
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isFalse();
+        keyguardIsVisible();
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isFalse();
+        statusBarShadeIsNotLocked();
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isFalse();
+        bouncerNotFullyVisible();
+
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isTrue();
+    }
+
+    @Test
+    public void testShouldListenForFace_whenUdfpsFingerDown_returnsTrue() throws RemoteException {
+        // Preconditions for face auth to run
+        keyguardNotGoingAway();
+        currentUserIsPrimary();
+        currentUserDoesNotHaveTrust();
+        biometricsNotDisabledThroughDevicePolicyManager();
+        biometricsEnabledForCurrentUser();
+        userNotCurrentlySwitching();
+        when(mAuthController.isUdfpsFingerDown()).thenReturn(false);
+        mTestableLooper.processAllMessages();
+
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isFalse();
+
+        when(mAuthController.isUdfpsFingerDown()).thenReturn(true);
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isTrue();
+    }
+
+    @Test
+    public void testShouldListenForFace_whenUdfpsBouncerIsShowing_returnsTrue()
+            throws RemoteException {
+        // Preconditions for face auth to run
+        keyguardNotGoingAway();
+        currentUserIsPrimary();
+        currentUserDoesNotHaveTrust();
+        biometricsNotDisabledThroughDevicePolicyManager();
+        biometricsEnabledForCurrentUser();
+        userNotCurrentlySwitching();
+        mTestableLooper.processAllMessages();
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isFalse();
+
+        mKeyguardUpdateMonitor.setUdfpsBouncerShowing(true);
+
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isTrue();
+    }
+
+    @Test
+    public void testBouncerVisibility_whenBothFingerprintAndFaceIsEnrolled_stopsFaceAuth()
+            throws RemoteException {
+        // Both fingerprint and face are enrolled by default
+        // Preconditions for face auth to run
+        keyguardNotGoingAway();
+        currentUserIsPrimary();
+        currentUserDoesNotHaveTrust();
+        biometricsNotDisabledThroughDevicePolicyManager();
+        biometricsEnabledForCurrentUser();
+        userNotCurrentlySwitching();
+        deviceNotGoingToSleep();
+        deviceIsInteractive();
+        statusBarShadeIsNotLocked();
+        keyguardIsVisible();
+
+        mTestableLooper.processAllMessages();
+
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFace()).isTrue();
+
+        mKeyguardUpdateMonitor.requestFaceAuth(true);
+        verify(mFaceManager).authenticate(any(),
+                mCancellationSignalCaptor.capture(),
+                mAuthenticationCallbackCaptor.capture(),
+                any(),
+                anyInt(),
+                anyBoolean());
+        CancellationSignal cancelSignal = mCancellationSignalCaptor.getValue();
+
+        bouncerFullyVisible();
+        mTestableLooper.processAllMessages();
+
+        assertThat(cancelSignal.isCanceled()).isTrue();
+    }
+
+    @Test
+    public void testFingerprintCanAuth_whenCancellationNotReceivedAndAuthFailed() {
+        mKeyguardUpdateMonitor.dispatchStartedWakingUp();
+        mTestableLooper.processAllMessages();
+        mKeyguardUpdateMonitor.onKeyguardVisibilityChanged(true);
+
+        verify(mFaceManager).authenticate(any(), any(), any(), any(), anyInt(), anyBoolean());
+        verify(mFingerprintManager).authenticate(any(), any(), any(), any(), anyInt(), anyInt(),
+                anyInt());
+
+        mKeyguardUpdateMonitor.onFaceAuthenticated(0, false);
+        // Make sure keyguard is going away after face auth attempt, and that it calls
+        // updateBiometricStateListeningState.
+        mKeyguardUpdateMonitor.onKeyguardVisibilityChanged(false);
+        mTestableLooper.processAllMessages();
+
+        verify(mHandler).postDelayed(mKeyguardUpdateMonitor.mFpCancelNotReceived,
+                DEFAULT_CANCEL_SIGNAL_TIMEOUT);
+
+        mKeyguardUpdateMonitor.onFingerprintAuthenticated(0, true);
+        mTestableLooper.processAllMessages();
+
+        verify(mHandler, times(1)).removeCallbacks(mKeyguardUpdateMonitor.mFpCancelNotReceived);
+        mKeyguardUpdateMonitor.dispatchStartedGoingToSleep(0 /* why */);
+        mTestableLooper.processAllMessages();
+        assertThat(mKeyguardUpdateMonitor.shouldListenForFingerprint(anyBoolean())).isEqualTo(true);
+    }
+
+    private void fingerprintIsNotEnrolled() {
+        when(mFingerprintManager.hasEnrolledTemplates(mCurrentUserId)).thenReturn(false);
+    }
+
+    private void statusBarShadeIsNotLocked() {
+        mStatusBarStateListener.onStateChanged(StatusBarState.KEYGUARD);
+    }
+
+    private void statusBarShadeIsLocked() {
+        mStatusBarStateListener.onStateChanged(StatusBarState.SHADE_LOCKED);
+    }
+
+    private void keyguardIsVisible() {
+        mKeyguardUpdateMonitor.onKeyguardVisibilityChanged(true);
+    }
+
+    private void triggerAuthInterrupt() {
+        mKeyguardUpdateMonitor.onAuthInterruptDetected(true);
+    }
+
+    private void occludingAppRequestsFaceAuth() {
+        mKeyguardUpdateMonitor.requestFaceAuthOnOccludingApp(true);
+    }
+
+    private void secureCameraLaunched() {
+        mKeyguardUpdateMonitor.onCameraLaunched();
+    }
+
+    private void userCurrentlySwitching() {
+        mKeyguardUpdateMonitor.setSwitchingUser(true);
+    }
+
+    private void fingerprintErrorLockedOut() {
+        mKeyguardUpdateMonitor.mFingerprintAuthenticationCallback
+                .onAuthenticationError(FINGERPRINT_ERROR_LOCKOUT, "Fingerprint locked out");
+    }
+
+    private void triggerSuccessfulFaceAuth() {
+        mKeyguardUpdateMonitor.requestFaceAuth(true);
+        verify(mFaceManager).authenticate(any(),
+                any(),
+                mAuthenticationCallbackCaptor.capture(),
+                any(),
+                anyInt(),
+                anyBoolean());
+        mAuthenticationCallbackCaptor.getValue()
+                .onAuthenticationSucceeded(
+                        new FaceManager.AuthenticationResult(null, null, mCurrentUserId, false));
+    }
+
+    private void currentUserIsPrimary() {
+        when(mUserManager.isPrimaryUser()).thenReturn(true);
+    }
+
+    private void biometricsNotDisabledThroughDevicePolicyManager() {
+        when(mDevicePolicyManager.getKeyguardDisabledFeatures(null,
+                KeyguardUpdateMonitor.getCurrentUser())).thenReturn(0);
+    }
+
+    private void biometricsEnabledForCurrentUser() throws RemoteException {
+        mBiometricEnabledOnKeyguardCallback.onChanged(true, KeyguardUpdateMonitor.getCurrentUser());
+    }
+
+    private void biometricsDisabledForCurrentUser() throws RemoteException {
+        mBiometricEnabledOnKeyguardCallback.onChanged(
+                false,
+                KeyguardUpdateMonitor.getCurrentUser()
+        );
+    }
+
+    private void strongAuthNotRequired() {
+        when(mStrongAuthTracker.getStrongAuthForUser(KeyguardUpdateMonitor.getCurrentUser()))
+                .thenReturn(0);
+    }
+
+    private void currentUserDoesNotHaveTrust() {
+        mKeyguardUpdateMonitor.onTrustChanged(
+                false,
+                KeyguardUpdateMonitor.getCurrentUser(),
+                -1,
+                new ArrayList<>()
+        );
+    }
+
+    private void userNotCurrentlySwitching() {
+        mKeyguardUpdateMonitor.setSwitchingUser(false);
+    }
+
+    private void keyguardNotGoingAway() {
+        mKeyguardUpdateMonitor.setKeyguardGoingAway(false);
+    }
+
+    private void bouncerFullyVisibleAndNotGoingToSleep() {
+        bouncerFullyVisible();
+        deviceNotGoingToSleep();
+    }
+
+    private void deviceNotGoingToSleep() {
+        mKeyguardUpdateMonitor.dispatchFinishedGoingToSleep(/* value doesn't matter */1);
+    }
+
+    private void deviceIsInteractive() {
+        mKeyguardUpdateMonitor.dispatchStartedWakingUp();
+    }
+
+    private void bouncerNotFullyVisible() {
+        setKeyguardBouncerVisibility(false);
+    }
+
+    private void bouncerFullyVisible() {
+        setKeyguardBouncerVisibility(true);
+    }
+
     private void setKeyguardBouncerVisibility(boolean isVisible) {
         mKeyguardUpdateMonitor.sendKeyguardBouncerChanged(isVisible, isVisible);
         mTestableLooper.processAllMessages();
@@ -1190,7 +1691,8 @@
                     mBackgroundExecutor, mMainExecutor,
                     mStatusBarStateController, mLockPatternUtils,
                     mAuthController, mTelephonyListenerManager,
-                    mInteractionJankMonitor, mLatencyTracker, mActiveUnlockConfig);
+                    mInteractionJankMonitor, mLatencyTracker, mActiveUnlockConfig,
+                    mKeyguardUpdateMonitorLogger);
             setStrongAuthTracker(KeyguardUpdateMonitorTest.this.mStrongAuthTracker);
         }
 
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/TextAnimatorTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/TextAnimatorTest.kt
deleted file mode 100644
index 3322414..0000000
--- a/packages/SystemUI/tests/src/com/android/keyguard/TextAnimatorTest.kt
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.keyguard
-
-import android.animation.AnimatorListenerAdapter
-import android.animation.ValueAnimator
-import android.graphics.Typeface
-import android.testing.AndroidTestingRunner
-import android.text.Layout
-import android.text.StaticLayout
-import android.text.TextPaint
-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
-import org.mockito.ArgumentCaptor
-import org.mockito.Mockito.`when`
-import org.mockito.Mockito.eq
-import org.mockito.Mockito.inOrder
-import org.mockito.Mockito.mock
-import org.mockito.Mockito.never
-import org.mockito.Mockito.times
-import org.mockito.Mockito.verify
-
-import kotlin.math.ceil
-
-private val PAINT = TextPaint().apply {
-    textSize = 32f
-}
-
-@RunWith(AndroidTestingRunner::class)
-@SmallTest
-class TextAnimatorTest : SysuiTestCase() {
-
-    private fun makeLayout(text: String, paint: TextPaint): Layout {
-        val width = ceil(Layout.getDesiredWidth(text, 0, text.length, paint)).toInt()
-        return StaticLayout.Builder.obtain(text, 0, text.length, paint, width).build()
-    }
-
-    @Test
-    fun testAnimationStarted() {
-        val layout = makeLayout("Hello, World", PAINT)
-        val valueAnimator = mock(ValueAnimator::class.java)
-        val textInterpolator = mock(TextInterpolator::class.java)
-        val paint = mock(TextPaint::class.java)
-        `when`(textInterpolator.targetPaint).thenReturn(paint)
-
-        val textAnimator = TextAnimator(layout, {}).apply {
-            this.textInterpolator = textInterpolator
-            this.animator = valueAnimator
-        }
-
-        textAnimator.setTextStyle(
-                weight = 400,
-                animate = true
-        )
-
-        // If animation is requested, the base state should be rebased and the target state should
-        // be updated.
-        val order = inOrder(textInterpolator)
-        order.verify(textInterpolator).rebase()
-        order.verify(textInterpolator).onTargetPaintModified()
-
-        // In case of animation, should not shape the base state since the animation should start
-        // from current state.
-        verify(textInterpolator, never()).onBasePaintModified()
-
-        // Then, animation should be started.
-        verify(valueAnimator, times(1)).start()
-    }
-
-    @Test
-    fun testAnimationNotStarted() {
-        val layout = makeLayout("Hello, World", PAINT)
-        val valueAnimator = mock(ValueAnimator::class.java)
-        val textInterpolator = mock(TextInterpolator::class.java)
-        val paint = mock(TextPaint::class.java)
-        `when`(textInterpolator.targetPaint).thenReturn(paint)
-
-        val textAnimator = TextAnimator(layout, {}).apply {
-            this.textInterpolator = textInterpolator
-            this.animator = valueAnimator
-        }
-
-        textAnimator.setTextStyle(
-                weight = 400,
-                animate = false
-        )
-
-        // If animation is not requested, the progress should be 1 which is end of animation and the
-        // base state is rebased to target state by calling rebase.
-        val order = inOrder(textInterpolator)
-        order.verify(textInterpolator).onTargetPaintModified()
-        order.verify(textInterpolator).progress = 1f
-        order.verify(textInterpolator).rebase()
-
-        // Then, animation start should not be called.
-        verify(valueAnimator, never()).start()
-    }
-
-    @Test
-    fun testAnimationEnded() {
-        val layout = makeLayout("Hello, World", PAINT)
-        val valueAnimator = mock(ValueAnimator::class.java)
-        val textInterpolator = mock(TextInterpolator::class.java)
-        val paint = mock(TextPaint::class.java)
-        `when`(textInterpolator.targetPaint).thenReturn(paint)
-        val animationEndCallback = mock(Runnable::class.java)
-
-        val textAnimator = TextAnimator(layout, {}).apply {
-            this.textInterpolator = textInterpolator
-            this.animator = valueAnimator
-        }
-
-        textAnimator.setTextStyle(
-                weight = 400,
-                animate = true,
-                onAnimationEnd = animationEndCallback
-        )
-
-        // Verify animationEnd callback has been added.
-        val captor = ArgumentCaptor.forClass(AnimatorListenerAdapter::class.java)
-        verify(valueAnimator).addListener(captor.capture())
-        captor.value.onAnimationEnd(valueAnimator)
-
-        // Verify animationEnd callback has been invoked and removed.
-        verify(animationEndCallback).run()
-        verify(valueAnimator).removeListener(eq(captor.value))
-    }
-
-    @Test
-    fun testCacheTypeface() {
-        val layout = makeLayout("Hello, World", PAINT)
-        val valueAnimator = mock(ValueAnimator::class.java)
-        val textInterpolator = mock(TextInterpolator::class.java)
-        val paint = TextPaint().apply {
-            typeface = Typeface.createFromFile("/system/fonts/Roboto-Regular.ttf")
-        }
-        `when`(textInterpolator.targetPaint).thenReturn(paint)
-
-        val textAnimator = TextAnimator(layout, {}).apply {
-            this.textInterpolator = textInterpolator
-            this.animator = valueAnimator
-        }
-
-        textAnimator.setTextStyle(
-                weight = 400,
-                animate = true
-        )
-
-        val prevTypeface = paint.typeface
-
-        textAnimator.setTextStyle(
-                weight = 700,
-                animate = true
-        )
-
-        assertThat(paint.typeface).isNotSameInstanceAs(prevTypeface)
-
-        textAnimator.setTextStyle(
-                weight = 400,
-                animate = true
-        )
-
-        assertThat(paint.typeface).isSameInstanceAs(prevTypeface)
-    }
-}
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/TextInterpolatorTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/TextInterpolatorTest.kt
deleted file mode 100644
index e42d537..0000000
--- a/packages/SystemUI/tests/src/com/android/keyguard/TextInterpolatorTest.kt
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.keyguard
-
-import android.graphics.Bitmap
-import android.graphics.Canvas
-import android.graphics.Typeface
-import android.graphics.fonts.Font
-import android.graphics.fonts.FontFamily
-import android.testing.AndroidTestingRunner
-import android.text.Layout
-import android.text.StaticLayout
-import android.text.TextDirectionHeuristic
-import android.text.TextDirectionHeuristics
-import android.text.TextPaint
-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
-import java.io.File
-import kotlin.math.ceil
-
-private const val TEXT = "Hello, World."
-private const val BIDI_TEXT = "abc\u05D0\u05D1\u05D2"
-private const val BMP_WIDTH = 400
-private const val BMP_HEIGHT = 300
-
-// Due to b/189235998 the weight 400 of the default font is no longer variable font. To be able to
-// test variable behavior, create the interpolatable typefaces with manually here.
-private val VF_FONT = Font.Builder(File("/system/fonts/Roboto-Regular.ttf")).build()
-
-private fun Font.toTypeface() =
-        Typeface.CustomFallbackBuilder(FontFamily.Builder(this).build()).build()
-
-private val PAINT = TextPaint().apply {
-    typeface = Font.Builder(VF_FONT).setFontVariationSettings("'wght' 400").build().toTypeface()
-    textSize = 32f
-}
-
-private val START_PAINT = TextPaint(PAINT).apply {
-    typeface = Font.Builder(VF_FONT).setFontVariationSettings("'wght' 400").build().toTypeface()
-}
-
-private val END_PAINT = TextPaint(PAINT).apply {
-    typeface = Font.Builder(VF_FONT).setFontVariationSettings("'wght' 700").build().toTypeface()
-}
-
-@RunWith(AndroidTestingRunner::class)
-@SmallTest
-class TextInterpolatorTest : SysuiTestCase() {
-
-    private fun makeLayout(
-        text: String,
-        paint: TextPaint,
-        dir: TextDirectionHeuristic = TextDirectionHeuristics.LTR
-    ): Layout {
-        val width = ceil(Layout.getDesiredWidth(text, 0, text.length, paint)).toInt()
-        return StaticLayout.Builder.obtain(text, 0, text.length, paint, width)
-                .setTextDirection(dir).build()
-    }
-
-    @Test
-    fun testStartState() {
-        val layout = makeLayout(TEXT, PAINT)
-
-        val interp = TextInterpolator(layout)
-        interp.basePaint.set(START_PAINT)
-        interp.onBasePaintModified()
-
-        interp.targetPaint.set(END_PAINT)
-        interp.onTargetPaintModified()
-
-        // Just after created TextInterpolator, it should have 0 progress.
-        assertThat(interp.progress).isEqualTo(0f)
-        val actual = interp.toBitmap(BMP_WIDTH, BMP_HEIGHT)
-        val expected = makeLayout(TEXT, START_PAINT).toBitmap(BMP_WIDTH, BMP_HEIGHT)
-
-        assertThat(expected.sameAs(actual)).isTrue()
-    }
-
-    @Test
-    fun testEndState() {
-        val layout = makeLayout(TEXT, PAINT)
-
-        val interp = TextInterpolator(layout)
-        interp.basePaint.set(START_PAINT)
-        interp.onBasePaintModified()
-
-        interp.targetPaint.set(END_PAINT)
-        interp.onTargetPaintModified()
-
-        interp.progress = 1f
-        val actual = interp.toBitmap(BMP_WIDTH, BMP_HEIGHT)
-        val expected = makeLayout(TEXT, END_PAINT).toBitmap(BMP_WIDTH, BMP_HEIGHT)
-
-        assertThat(expected.sameAs(actual)).isTrue()
-    }
-
-    @Test
-    fun testMiddleState() {
-        val layout = makeLayout(TEXT, PAINT)
-
-        val interp = TextInterpolator(layout)
-        interp.basePaint.set(START_PAINT)
-        interp.onBasePaintModified()
-
-        interp.targetPaint.set(END_PAINT)
-        interp.onTargetPaintModified()
-
-        // We cannot expect exact text layout of the middle position since we don't use text shaping
-        // result for the middle state for performance reason. Just check it is not equals to start
-        // end state.
-        interp.progress = 0.5f
-        val actual = interp.toBitmap(BMP_WIDTH, BMP_HEIGHT)
-        assertThat(actual.sameAs(makeLayout(TEXT, START_PAINT)
-            .toBitmap(BMP_WIDTH, BMP_HEIGHT))).isFalse()
-        assertThat(actual.sameAs(makeLayout(TEXT, END_PAINT)
-            .toBitmap(BMP_WIDTH, BMP_HEIGHT))).isFalse()
-    }
-
-    @Test
-    fun testRebase() {
-        val layout = makeLayout(TEXT, PAINT)
-
-        val interp = TextInterpolator(layout)
-        interp.basePaint.set(START_PAINT)
-        interp.onBasePaintModified()
-
-        interp.targetPaint.set(END_PAINT)
-        interp.onTargetPaintModified()
-
-        interp.progress = 0.5f
-        val expected = interp.toBitmap(BMP_WIDTH, BMP_HEIGHT)
-
-        // Rebase base state to the current state of progress 0.5.
-        interp.rebase()
-        assertThat(interp.progress).isEqualTo(0f)
-        val actual = interp.toBitmap(BMP_WIDTH, BMP_HEIGHT)
-
-        assertThat(expected.sameAs(actual)).isTrue()
-    }
-
-    @Test
-    fun testBidi_LTR() {
-        val layout = makeLayout(BIDI_TEXT, PAINT, TextDirectionHeuristics.LTR)
-
-        val interp = TextInterpolator(layout)
-        interp.basePaint.set(START_PAINT)
-        interp.onBasePaintModified()
-
-        interp.targetPaint.set(END_PAINT)
-        interp.onTargetPaintModified()
-
-        // Just after created TextInterpolator, it should have 0 progress.
-        assertThat(interp.progress).isEqualTo(0f)
-        val actual = interp.toBitmap(BMP_WIDTH, BMP_HEIGHT)
-        val expected = makeLayout(BIDI_TEXT, START_PAINT, TextDirectionHeuristics.LTR)
-                .toBitmap(BMP_WIDTH, BMP_HEIGHT)
-
-        assertThat(expected.sameAs(actual)).isTrue()
-    }
-
-    @Test
-    fun testBidi_RTL() {
-        val layout = makeLayout(BIDI_TEXT, PAINT, TextDirectionHeuristics.RTL)
-
-        val interp = TextInterpolator(layout)
-        interp.basePaint.set(START_PAINT)
-        interp.onBasePaintModified()
-
-        interp.targetPaint.set(END_PAINT)
-        interp.onTargetPaintModified()
-
-        // Just after created TextInterpolator, it should have 0 progress.
-        assertThat(interp.progress).isEqualTo(0f)
-        val actual = interp.toBitmap(BMP_WIDTH, BMP_HEIGHT)
-        val expected = makeLayout(BIDI_TEXT, START_PAINT, TextDirectionHeuristics.RTL)
-                .toBitmap(BMP_WIDTH, BMP_HEIGHT)
-
-        assertThat(expected.sameAs(actual)).isTrue()
-    }
-}
-
-private fun Layout.toBitmap(width: Int, height: Int) =
-        Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888).also { draw(Canvas(it)) }!!
-
-private fun TextInterpolator.toBitmap(width: Int, height: Int) =
-        Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888).also { draw(Canvas(it)) }
\ No newline at end of file
diff --git a/packages/SystemUI/tests/src/com/android/systemui/DependencyTest.java b/packages/SystemUI/tests/src/com/android/systemui/DependencyTest.java
index 5d8e435..a0fdc8f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/DependencyTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/DependencyTest.java
@@ -26,6 +26,8 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import java.util.concurrent.ExecutionException;
+
 @SmallTest
 public class DependencyTest extends SysuiTestCase {
 
@@ -44,10 +46,12 @@
     }
 
     @Test
-    public void testInitDependency() {
+    public void testInitDependency() throws ExecutionException, InterruptedException {
         Dependency.clearDependencies();
-        Dependency dependency =
-                SystemUIFactory.getInstance().getSysUIComponent().createDependency();
+        SystemUIInitializer initializer =
+                SystemUIInitializerFactory.createFromConfigNoAssert(mContext);
+        initializer.init(true);
+        Dependency dependency = initializer.getSysUIComponent().createDependency();
         dependency.start();
     }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/SysuiBaseFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/SysuiBaseFragmentTest.java
deleted file mode 100644
index 8c20b24..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/SysuiBaseFragmentTest.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the
- * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the specific language governing
- * permissions and limitations under the License.
- */
-
-package com.android.systemui;
-
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-
-import android.app.Fragment;
-import android.app.Instrumentation;
-import android.testing.BaseFragmentTest;
-import android.testing.DexmakerShareClassLoaderRule;
-
-import androidx.test.InstrumentationRegistry;
-
-import com.android.systemui.assist.AssistManager;
-import com.android.systemui.utils.leaks.LeakCheckedTest;
-import com.android.systemui.utils.leaks.LeakCheckedTest.SysuiLeakCheck;
-
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.Rule;
-import org.mockito.Mockito;
-
-public abstract class SysuiBaseFragmentTest extends BaseFragmentTest {
-
-    public static final Class<?>[] ALL_SUPPORTED_CLASSES = LeakCheckedTest.ALL_SUPPORTED_CLASSES;
-
-    @Rule
-    public final SysuiLeakCheck mLeakCheck = new SysuiLeakCheck();
-
-    @Rule
-    public final DexmakerShareClassLoaderRule mDexmakerShareClassLoaderRule =
-            new DexmakerShareClassLoaderRule();
-
-    protected TestableDependency mDependency;
-    protected SysuiTestableContext mSysuiContext;
-    private Instrumentation mRealInstrumentation;
-
-    public SysuiBaseFragmentTest(Class<? extends Fragment> cls) {
-        super(cls);
-    }
-
-    @Before
-    public void SysuiSetup() {
-        SystemUIFactory.createFromConfig(mContext, true);
-        mDependency = new TestableDependency(
-                SystemUIFactory.getInstance().getSysUIComponent().createDependency());
-        Dependency.setInstance(mDependency);
-
-        // TODO: Figure out another way to give reference to a SysuiTestableContext.
-        mSysuiContext = (SysuiTestableContext) mContext;
-
-        mRealInstrumentation = InstrumentationRegistry.getInstrumentation();
-        Instrumentation inst = spy(mRealInstrumentation);
-        when(inst.getContext()).thenThrow(new RuntimeException(
-                "SysUI Tests should use SysuiTestCase#getContext or SysuiTestCase#mContext"));
-        when(inst.getTargetContext()).thenThrow(new RuntimeException(
-                "SysUI Tests should use SysuiTestCase#getContext or SysuiTestCase#mContext"));
-        InstrumentationRegistry.registerInstance(inst, InstrumentationRegistry.getArguments());
-        mDependency.injectMockDependency(AssistManager.class);
-    }
-
-    @After
-    public void SysuiTeardown() {
-        InstrumentationRegistry.registerInstance(mRealInstrumentation,
-                InstrumentationRegistry.getArguments());
-        SystemUIFactory.cleanup();
-    }
-
-    @AfterClass
-    public static void mockitoTeardown() {
-        Mockito.framework().clearInlineMocks();
-    }
-
-    @Override
-    protected SysuiTestableContext getContext() {
-        return new SysuiTestableContext(InstrumentationRegistry.getContext(), mLeakCheck);
-    }
-
-    public void injectLeakCheckedDependencies(Class<?>... cls) {
-        for (Class<?> c : cls) {
-            injectLeakCheckedDependency(c);
-        }
-    }
-
-    public <T> void injectLeakCheckedDependency(Class<T> c) {
-        mDependency.injectTestDependency(c, mLeakCheck.getLeakChecker(c));
-    }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java b/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java
deleted file mode 100644
index 8c79277..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-
-import android.app.Instrumentation;
-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.TestableLooper;
-import android.util.Log;
-
-import androidx.test.InstrumentationRegistry;
-import androidx.test.uiautomator.UiDevice;
-
-import com.android.keyguard.KeyguardUpdateMonitor;
-import com.android.settingslib.bluetooth.LocalBluetoothManager;
-import com.android.systemui.broadcast.BroadcastDispatcher;
-import com.android.systemui.broadcast.FakeBroadcastDispatcher;
-import com.android.systemui.broadcast.logging.BroadcastDispatcherLogger;
-import com.android.systemui.classifier.FalsingManagerFake;
-import com.android.systemui.dump.DumpManager;
-import com.android.systemui.plugins.FalsingManager;
-import com.android.systemui.settings.UserTracker;
-import com.android.systemui.statusbar.SmartReplyController;
-import com.android.systemui.statusbar.phone.SystemUIDialogManager;
-
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.Rule;
-import org.mockito.Mockito;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Executor;
-import java.util.concurrent.Future;
-
-/**
- * Base class that does System UI specific setup.
- */
-public abstract class SysuiTestCase {
-
-    private static final String TAG = "SysuiTestCase";
-
-    private Handler mHandler;
-    @Rule
-    public SysuiTestableContext mContext = new SysuiTestableContext(
-            InstrumentationRegistry.getContext(), getLeakCheck());
-    @Rule
-    public final DexmakerShareClassLoaderRule mDexmakerShareClassLoaderRule =
-            new DexmakerShareClassLoaderRule();
-    public TestableDependency mDependency;
-    private Instrumentation mRealInstrumentation;
-    private FakeBroadcastDispatcher mFakeBroadcastDispatcher;
-
-    @Before
-    public void SysuiSetup() throws Exception {
-        SystemUIFactory.createFromConfig(mContext, true);
-        mDependency = new TestableDependency(
-                SystemUIFactory.getInstance().getSysUIComponent().createDependency());
-        Dependency.setInstance(mDependency);
-        mFakeBroadcastDispatcher = new FakeBroadcastDispatcher(mContext, mock(Looper.class),
-                mock(Executor.class), mock(DumpManager.class),
-                mock(BroadcastDispatcherLogger.class), mock(UserTracker.class));
-
-        mRealInstrumentation = InstrumentationRegistry.getInstrumentation();
-        Instrumentation inst = spy(mRealInstrumentation);
-        when(inst.getContext()).thenAnswer(invocation -> {
-            throw new RuntimeException(
-                    "SysUI Tests should use SysuiTestCase#getContext or SysuiTestCase#mContext");
-        });
-        when(inst.getTargetContext()).thenAnswer(invocation -> {
-            throw new RuntimeException(
-                    "SysUI Tests should use SysuiTestCase#getContext or SysuiTestCase#mContext");
-        });
-        InstrumentationRegistry.registerInstance(inst, InstrumentationRegistry.getArguments());
-        // Many tests end up creating a BroadcastDispatcher. Instead, give them a fake that will
-        // record receivers registered. They are not actually leaked as they are kept just as a weak
-        // reference and are never sent to the Context. This will also prevent a real
-        // BroadcastDispatcher from actually registering receivers.
-        mDependency.injectTestDependency(BroadcastDispatcher.class, mFakeBroadcastDispatcher);
-        // A lot of tests get the FalsingManager, often via several layers of indirection.
-        // None of them actually need it.
-        mDependency.injectTestDependency(FalsingManager.class, new FalsingManagerFake());
-        mDependency.injectMockDependency(KeyguardUpdateMonitor.class);
-
-        // A lot of tests get the LocalBluetoothManager, often via several layers of indirection.
-        // None of them actually need it.
-        mDependency.injectMockDependency(LocalBluetoothManager.class);
-
-        // Notifications tests are injecting one of these, causing many classes (including
-        // KeyguardUpdateMonitor to be created (injected).
-        // TODO(b/1531701009) Clean up NotificationContentView creation to prevent this
-        mDependency.injectMockDependency(SmartReplyController.class);
-
-        // Make sure that all tests on any SystemUIDialog does not crash because this dependency
-        // is missing (constructing the actual one would throw).
-        // TODO(b/219008720): Remove this.
-        mDependency.injectMockDependency(SystemUIDialogManager.class);
-    }
-
-    @After
-    public void SysuiTeardown() {
-        InstrumentationRegistry.registerInstance(mRealInstrumentation,
-                InstrumentationRegistry.getArguments());
-        if (TestableLooper.get(this) != null) {
-            TestableLooper.get(this).processAllMessages();
-        }
-        disallowTestableLooperAsMainThread();
-        mContext.cleanUpReceivers(this.getClass().getSimpleName());
-        mFakeBroadcastDispatcher.cleanUpReceivers(this.getClass().getSimpleName());
-    }
-
-    @AfterClass
-    public static void mockitoTearDown() {
-        Mockito.framework().clearInlineMocks();
-    }
-
-    /**
-     * Tests are run on the TestableLooper; however, there are parts of SystemUI that assert that
-     * the code is run from the main looper. Therefore, we allow the TestableLooper to pass these
-     * assertions since in a test, the TestableLooper is essentially the MainLooper.
-     */
-    protected void allowTestableLooperAsMainThread() {
-        com.android.systemui.util.Assert.setTestableLooper(TestableLooper.get(this).getLooper());
-    }
-
-    protected void disallowTestableLooperAsMainThread() {
-        com.android.systemui.util.Assert.setTestableLooper(null);
-    }
-
-    protected LeakCheck getLeakCheck() {
-        return null;
-    }
-
-    protected FakeBroadcastDispatcher getFakeBroadcastDispatcher() {
-        return mFakeBroadcastDispatcher;
-    }
-
-    public SysuiTestableContext getContext() {
-        return mContext;
-    }
-
-    protected UiDevice getUiDevice() {
-        return UiDevice.getInstance(mRealInstrumentation);
-    }
-
-    protected void runShellCommand(String command) throws IOException {
-        ParcelFileDescriptor pfd = mRealInstrumentation.getUiAutomation()
-                .executeShellCommand(command);
-
-        // Read the input stream fully.
-        FileInputStream fis = new ParcelFileDescriptor.AutoCloseInputStream(pfd);
-        while (fis.read() != -1);
-        fis.close();
-    }
-
-    protected void waitForIdleSync() {
-        if (mHandler == null) {
-            mHandler = new Handler(Looper.getMainLooper());
-        }
-        waitForIdleSync(mHandler);
-    }
-
-    protected void waitForUiOffloadThread() {
-        Future<?> future = Dependency.get(UiOffloadThread.class).execute(() -> { });
-        try {
-            future.get();
-        } catch (InterruptedException | ExecutionException e) {
-            Log.e(TAG, "Failed to wait for ui offload thread.", e);
-        }
-    }
-
-    public static void waitForIdleSync(Handler h) {
-        validateThread(h.getLooper());
-        Idler idler = new Idler(null);
-        h.getLooper().getQueue().addIdleHandler(idler);
-        // Ensure we are non-idle, so the idle handler can run.
-        h.post(new EmptyRunnable());
-        idler.waitForIdle();
-    }
-
-    private static final void validateThread(Looper l) {
-        if (Looper.myLooper() == l) {
-            throw new RuntimeException(
-                "This method can not be called from the looper being synced");
-        }
-    }
-
-    /** Delegates to {@link android.testing.TestableResources#addOverride(int, Object)}. */
-    protected void overrideResource(int resourceId, Object value) {
-        mContext.getOrCreateTestableResources().addOverride(resourceId, value);
-    }
-
-    public static final class EmptyRunnable implements Runnable {
-        public void run() {
-        }
-    }
-
-    public static final class Idler implements MessageQueue.IdleHandler {
-        private final Runnable mCallback;
-        private boolean mIdle;
-
-        public Idler(Runnable callback) {
-            mCallback = callback;
-            mIdle = false;
-        }
-
-        @Override
-        public boolean queueIdle() {
-            if (mCallback != null) {
-                mCallback.run();
-            }
-            synchronized (this) {
-                mIdle = true;
-                notifyAll();
-            }
-            return false;
-        }
-
-        public void waitForIdle() {
-            synchronized (this) {
-                while (!mIdle) {
-                    try {
-                        wait();
-                    } catch (InterruptedException e) {
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuViewTest.java
index 7e9f84c..bebd871 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuViewTest.java
@@ -191,6 +191,16 @@
     }
 
     @Test
+    public void hideMenuViewWhenStartingAnimation_animatorNotRunning() {
+        mMenuView.show();
+
+        mMenuView.mDragAnimator.start();
+        mMenuView.hide();
+
+        assertThat(mMenuView.mDragAnimator.isRunning()).isFalse();
+    }
+
+    @Test
     public void onTargetsChanged_singleTarget_expectedRadii() {
         final Position alignRightPosition = new Position(1.0f, 0.0f);
         final AccessibilityFloatingMenuView menuView = new AccessibilityFloatingMenuView(mContext,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/animation/ActivityLaunchAnimatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/animation/ActivityLaunchAnimatorTest.kt
index c48cbb1..0f11241 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/animation/ActivityLaunchAnimatorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/animation/ActivityLaunchAnimatorTest.kt
@@ -26,6 +26,7 @@
 import junit.framework.Assert.assertNull
 import junit.framework.Assert.assertTrue
 import junit.framework.AssertionFailedError
+import kotlin.concurrent.thread
 import org.junit.After
 import org.junit.Before
 import org.junit.Rule
@@ -34,19 +35,18 @@
 import org.mockito.ArgumentCaptor
 import org.mockito.ArgumentMatchers.anyBoolean
 import org.mockito.Mock
-import org.mockito.Mockito.`when`
 import org.mockito.Mockito.never
 import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when`
 import org.mockito.Spy
 import org.mockito.junit.MockitoJUnit
-import kotlin.concurrent.thread
 
 @SmallTest
 @RunWith(AndroidTestingRunner::class)
 @RunWithLooper
 class ActivityLaunchAnimatorTest : SysuiTestCase() {
     private val launchContainer = LinearLayout(mContext)
-    private val testLaunchAnimator = LaunchAnimator(TEST_TIMINGS, TEST_INTERPOLATORS)
+    private val testLaunchAnimator = fakeLaunchAnimator()
     @Mock lateinit var callback: ActivityLaunchAnimator.Callback
     @Mock lateinit var listener: ActivityLaunchAnimator.Listener
     @Spy private val controller = TestLaunchAnimatorController(launchContainer)
@@ -77,12 +77,13 @@
         // We start in a new thread so that we can ensure that the callbacks are called in the main
         // thread.
         thread {
-            animator.startIntentWithAnimation(
+                animator.startIntentWithAnimation(
                     controller = controller,
                     animate = animate,
                     intentStarter = intentStarter
-            )
-        }.join()
+                )
+            }
+            .join()
     }
 
     @Test
@@ -197,14 +198,25 @@
         val bounds = Rect(10 /* left */, 20 /* top */, 30 /* right */, 40 /* bottom */)
         val taskInfo = ActivityManager.RunningTaskInfo()
         taskInfo.topActivity = ComponentName("com.android.systemui", "FakeActivity")
-        taskInfo.topActivityInfo = ActivityInfo().apply {
-            applicationInfo = ApplicationInfo()
-        }
+        taskInfo.topActivityInfo = ActivityInfo().apply { applicationInfo = ApplicationInfo() }
 
         return RemoteAnimationTarget(
-                0, RemoteAnimationTarget.MODE_OPENING, SurfaceControl(), false, Rect(), Rect(), 0,
-                Point(), Rect(), bounds, WindowConfiguration(), false, SurfaceControl(), Rect(),
-                taskInfo, false
+            0,
+            RemoteAnimationTarget.MODE_OPENING,
+            SurfaceControl(),
+            false,
+            Rect(),
+            Rect(),
+            0,
+            Point(),
+            Rect(),
+            bounds,
+            WindowConfiguration(),
+            false,
+            SurfaceControl(),
+            Rect(),
+            taskInfo,
+            false
         )
     }
 }
@@ -213,17 +225,17 @@
  * A simple implementation of [ActivityLaunchAnimator.Controller] which throws if it is called
  * outside of the main thread.
  */
-private class TestLaunchAnimatorController(
-    override var launchContainer: ViewGroup
-) : ActivityLaunchAnimator.Controller {
-    override fun createAnimatorState() = LaunchAnimator.State(
+private class TestLaunchAnimatorController(override var launchContainer: ViewGroup) :
+    ActivityLaunchAnimator.Controller {
+    override fun createAnimatorState() =
+        LaunchAnimator.State(
             top = 100,
             bottom = 200,
             left = 300,
             right = 400,
             topCornerRadius = 10f,
             bottomCornerRadius = 20f
-    )
+        )
 
     private fun assertOnMainThread() {
         if (Looper.myLooper() != Looper.getMainLooper()) {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/animation/DialogLaunchAnimatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/animation/DialogLaunchAnimatorTest.kt
index fe2efa5..7c1e384 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/animation/DialogLaunchAnimatorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/animation/DialogLaunchAnimatorTest.kt
@@ -5,7 +5,6 @@
 import android.graphics.Color
 import android.graphics.drawable.ColorDrawable
 import android.os.Bundle
-import android.service.dreams.IDreamManager
 import android.testing.AndroidTestingRunner
 import android.testing.TestableLooper
 import android.testing.ViewUtils
@@ -15,6 +14,7 @@
 import android.view.WindowManager
 import android.widget.LinearLayout
 import androidx.test.filters.SmallTest
+import com.android.internal.jank.InteractionJankMonitor
 import com.android.internal.policy.DecorView
 import com.android.systemui.SysuiTestCase
 import junit.framework.Assert.assertEquals
@@ -29,23 +29,24 @@
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.mockito.Mock
+import org.mockito.Mockito.any
+import org.mockito.Mockito.verify
 import org.mockito.junit.MockitoJUnit
 
 @SmallTest
 @RunWith(AndroidTestingRunner::class)
 @TestableLooper.RunWithLooper
 class DialogLaunchAnimatorTest : SysuiTestCase() {
-    private val launchAnimator = LaunchAnimator(TEST_TIMINGS, TEST_INTERPOLATORS)
     private lateinit var dialogLaunchAnimator: DialogLaunchAnimator
     private val attachedViews = mutableSetOf<View>()
 
-    @Mock lateinit var dreamManager: IDreamManager
+    @Mock lateinit var interactionJankMonitor: InteractionJankMonitor
     @get:Rule val rule = MockitoJUnit.rule()
 
     @Before
     fun setUp() {
-        dialogLaunchAnimator = DialogLaunchAnimator(
-            dreamManager, launchAnimator, isForTesting = true)
+        dialogLaunchAnimator =
+            fakeDialogLaunchAnimator(interactionJankMonitor = interactionJankMonitor)
     }
 
     @After
@@ -90,7 +91,8 @@
 
         // The dialog content is inside this fake window view.
         assertNotNull(
-            dialogContentWithBackground.findViewByPredicate { it === dialog.contentView })
+            dialogContentWithBackground.findViewByPredicate { it === dialog.contentView }
+        )
 
         // Clicking the transparent background should dismiss the dialog.
         runOnMainThreadAndWaitForIdleSync {
@@ -147,6 +149,22 @@
     }
 
     @Test
+    fun testActivityLaunchWhenLockedWithoutAlternateAuth() {
+        val dialogLaunchAnimator =
+            fakeDialogLaunchAnimator(isUnlocked = false, isShowingAlternateAuthOnUnlock = false)
+        val dialog = createAndShowDialog(dialogLaunchAnimator)
+        assertNull(dialogLaunchAnimator.createActivityLaunchController(dialog.contentView))
+    }
+
+    @Test
+    fun testActivityLaunchWhenLockedWithAlternateAuth() {
+        val dialogLaunchAnimator =
+            fakeDialogLaunchAnimator(isUnlocked = false, isShowingAlternateAuthOnUnlock = true)
+        val dialog = createAndShowDialog(dialogLaunchAnimator)
+        assertNotNull(dialogLaunchAnimator.createActivityLaunchController(dialog.contentView))
+    }
+
+    @Test
     fun testDialogAnimationIsChangedByAnimator() {
         // Important: the power menu animation relies on this behavior to know when to animate (see
         // http://ag/16774605).
@@ -161,11 +179,39 @@
         assertNotEquals(0, dialog.window.attributes.windowAnimations)
     }
 
-    private fun createAndShowDialog(): TestDialog {
+    @Test
+    fun testCujSpecificationLogsInteraction() {
+        val touchSurface = createTouchSurface()
+        runOnMainThreadAndWaitForIdleSync {
+            val dialog = TestDialog(context)
+            dialogLaunchAnimator.showFromView(
+                dialog, touchSurface, cuj = DialogCuj(InteractionJankMonitor.CUJ_SHADE_DIALOG_OPEN))
+        }
+
+        verify(interactionJankMonitor).begin(any())
+        verify(interactionJankMonitor).end(InteractionJankMonitor.CUJ_SHADE_DIALOG_OPEN)
+    }
+
+    @Test
+    fun testShowFromDialogCujSpecificationLogsInteraction() {
+        val firstDialog = createAndShowDialog()
+        runOnMainThreadAndWaitForIdleSync {
+            val dialog = TestDialog(context)
+            dialogLaunchAnimator.showFromDialog(
+                dialog, firstDialog, cuj = DialogCuj(InteractionJankMonitor.CUJ_USER_DIALOG_OPEN))
+            dialog
+        }
+        verify(interactionJankMonitor).begin(any())
+        verify(interactionJankMonitor).end(InteractionJankMonitor.CUJ_USER_DIALOG_OPEN)
+    }
+
+    private fun createAndShowDialog(
+        animator: DialogLaunchAnimator = dialogLaunchAnimator,
+    ): TestDialog {
         val touchSurface = createTouchSurface()
         return runOnMainThreadAndWaitForIdleSync {
             val dialog = TestDialog(context)
-            dialogLaunchAnimator.showFromView(dialog, touchSurface)
+            animator.showFromView(dialog, touchSurface)
             dialog
         }
     }
@@ -224,4 +270,4 @@
             window.setBackgroundDrawable(windowBackground)
         }
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/animation/FontInterpolatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/animation/FontInterpolatorTest.kt
new file mode 100644
index 0000000..f01da2d
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/animation/FontInterpolatorTest.kt
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.animation
+
+import android.graphics.Paint
+import android.graphics.fonts.Font
+import android.graphics.fonts.FontVariationAxis
+import android.graphics.text.TextRunShaper
+import android.testing.AndroidTestingRunner
+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
+
+@RunWith(AndroidTestingRunner::class)
+@SmallTest
+class FontInterpolatorTest : SysuiTestCase() {
+
+    private val sFont = TextRunShaper.shapeTextRun("A", 0, 1, 0, 1, 0f, 0f, false, Paint())
+            .getFont(0)
+
+    private fun assertSameAxes(expect: Font, actual: Font) {
+        val expectAxes = expect.axes?.also { it.sortBy { axis -> axis.tag } }
+        val actualAxes = actual.axes?.also { it.sortBy { axis -> axis.tag } }
+        assertThat(expectAxes).isEqualTo(actualAxes)
+    }
+
+    private fun assertSameAxes(expectVarSettings: String, actual: Font) {
+
+        val expectAxes = FontVariationAxis.fromFontVariationSettings(expectVarSettings)?.also {
+            it.sortBy { axis -> axis.tag }
+        }
+        val actualAxes = actual.axes?.also { it.sortBy { axis -> axis.tag } }
+        assertThat(expectAxes).isEqualTo(actualAxes)
+    }
+
+    @Test
+    fun textInterpolation() {
+        val startFont = Font.Builder(sFont)
+                .setFontVariationSettings("'wght' 100, 'ital' 0, 'GRAD' 200")
+                .build()
+        val endFont = Font.Builder(sFont)
+                .setFontVariationSettings("'wght' 900, 'ital' 1, 'GRAD' 700")
+                .build()
+
+        val interp = FontInterpolator()
+        assertSameAxes(startFont, interp.lerp(startFont, endFont, 0f))
+        assertSameAxes(endFont, interp.lerp(startFont, endFont, 1f))
+        assertSameAxes("'wght' 500, 'ital' 0.5, 'GRAD' 450", interp.lerp(startFont, endFont, 0.5f))
+    }
+
+    @Test
+    fun textInterpolation_DefaultValue() {
+        val startFont = Font.Builder(sFont)
+                .setFontVariationSettings("'wght' 100")
+                .build()
+        val endFont = Font.Builder(sFont)
+                .setFontVariationSettings("'ital' 1")
+                .build()
+
+        val interp = FontInterpolator()
+        assertSameAxes("'wght' 250, 'ital' 0.5", interp.lerp(startFont, endFont, 0.5f))
+    }
+
+    @Test
+    fun testInterpCache() {
+        val startFont = Font.Builder(sFont)
+                .setFontVariationSettings("'wght' 100")
+                .build()
+        val endFont = Font.Builder(sFont)
+                .setFontVariationSettings("'ital' 1")
+                .build()
+
+        val interp = FontInterpolator()
+        val resultFont = interp.lerp(startFont, endFont, 0.5f)
+        val cachedFont = interp.lerp(startFont, endFont, 0.5f)
+        assertThat(resultFont).isSameInstanceAs(cachedFont)
+    }
+
+    @Test
+    fun testAxesCache() {
+        val startFont = Font.Builder(sFont)
+                .setFontVariationSettings("'wght' 100")
+                .build()
+        val endFont = Font.Builder(sFont)
+                .setFontVariationSettings("'ital' 1")
+                .build()
+
+        val interp = FontInterpolator()
+        val resultFont = interp.lerp(startFont, endFont, 0.5f)
+        val reversedFont = interp.lerp(endFont, startFont, 0.5f)
+        assertThat(resultFont).isSameInstanceAs(reversedFont)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/animation/TestValues.kt b/packages/SystemUI/tests/src/com/android/systemui/animation/TestValues.kt
deleted file mode 100644
index dadf94e..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/animation/TestValues.kt
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.android.systemui.animation
-
-/**
- * A [LaunchAnimator.Timings] to be used in tests.
- *
- * Note that all timings except the total duration are non-zero to avoid divide-by-zero exceptions
- * when computing the progress of a sub-animation (the contents fade in/out).
- */
-val TEST_TIMINGS = LaunchAnimator.Timings(
-    totalDuration = 0L,
-    contentBeforeFadeOutDelay = 1L,
-    contentBeforeFadeOutDuration = 1L,
-    contentAfterFadeInDelay = 1L,
-    contentAfterFadeInDuration = 1L
-)
-
-/** A [LaunchAnimator.Interpolators] to be used in tests. */
-val TEST_INTERPOLATORS = LaunchAnimator.Interpolators(
-    positionInterpolator = Interpolators.STANDARD,
-    positionXInterpolator = Interpolators.STANDARD,
-    contentBeforeFadeOutInterpolator = Interpolators.STANDARD,
-    contentAfterFadeInInterpolator = Interpolators.STANDARD
-)
\ No newline at end of file
diff --git a/packages/SystemUI/tests/src/com/android/systemui/animation/TextAnimatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/animation/TextAnimatorTest.kt
new file mode 100644
index 0000000..ed0cd7e
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/animation/TextAnimatorTest.kt
@@ -0,0 +1,181 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.animation
+
+import android.animation.AnimatorListenerAdapter
+import android.animation.ValueAnimator
+import android.graphics.Typeface
+import android.testing.AndroidTestingRunner
+import android.text.Layout
+import android.text.StaticLayout
+import android.text.TextPaint
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.google.common.truth.Truth.assertThat
+import kotlin.math.ceil
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentCaptor
+import org.mockito.Mockito.eq
+import org.mockito.Mockito.inOrder
+import org.mockito.Mockito.mock
+import org.mockito.Mockito.never
+import org.mockito.Mockito.times
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when`
+
+private val PAINT = TextPaint().apply {
+    textSize = 32f
+}
+
+@RunWith(AndroidTestingRunner::class)
+@SmallTest
+class TextAnimatorTest : SysuiTestCase() {
+
+    private fun makeLayout(text: String, paint: TextPaint): Layout {
+        val width = ceil(Layout.getDesiredWidth(text, 0, text.length, paint)).toInt()
+        return StaticLayout.Builder.obtain(text, 0, text.length, paint, width).build()
+    }
+
+    @Test
+    fun testAnimationStarted() {
+        val layout = makeLayout("Hello, World", PAINT)
+        val valueAnimator = mock(ValueAnimator::class.java)
+        val textInterpolator = mock(TextInterpolator::class.java)
+        val paint = mock(TextPaint::class.java)
+        `when`(textInterpolator.targetPaint).thenReturn(paint)
+
+        val textAnimator = TextAnimator(layout, {}).apply {
+            this.textInterpolator = textInterpolator
+            this.animator = valueAnimator
+        }
+
+        textAnimator.setTextStyle(
+                weight = 400,
+                animate = true
+        )
+
+        // If animation is requested, the base state should be rebased and the target state should
+        // be updated.
+        val order = inOrder(textInterpolator)
+        order.verify(textInterpolator).rebase()
+        order.verify(textInterpolator).onTargetPaintModified()
+
+        // In case of animation, should not shape the base state since the animation should start
+        // from current state.
+        verify(textInterpolator, never()).onBasePaintModified()
+
+        // Then, animation should be started.
+        verify(valueAnimator, times(1)).start()
+    }
+
+    @Test
+    fun testAnimationNotStarted() {
+        val layout = makeLayout("Hello, World", PAINT)
+        val valueAnimator = mock(ValueAnimator::class.java)
+        val textInterpolator = mock(TextInterpolator::class.java)
+        val paint = mock(TextPaint::class.java)
+        `when`(textInterpolator.targetPaint).thenReturn(paint)
+
+        val textAnimator = TextAnimator(layout, {}).apply {
+            this.textInterpolator = textInterpolator
+            this.animator = valueAnimator
+        }
+
+        textAnimator.setTextStyle(
+                weight = 400,
+                animate = false
+        )
+
+        // If animation is not requested, the progress should be 1 which is end of animation and the
+        // base state is rebased to target state by calling rebase.
+        val order = inOrder(textInterpolator)
+        order.verify(textInterpolator).onTargetPaintModified()
+        order.verify(textInterpolator).progress = 1f
+        order.verify(textInterpolator).rebase()
+
+        // Then, animation start should not be called.
+        verify(valueAnimator, never()).start()
+    }
+
+    @Test
+    fun testAnimationEnded() {
+        val layout = makeLayout("Hello, World", PAINT)
+        val valueAnimator = mock(ValueAnimator::class.java)
+        val textInterpolator = mock(TextInterpolator::class.java)
+        val paint = mock(TextPaint::class.java)
+        `when`(textInterpolator.targetPaint).thenReturn(paint)
+        val animationEndCallback = mock(Runnable::class.java)
+
+        val textAnimator = TextAnimator(layout, {}).apply {
+            this.textInterpolator = textInterpolator
+            this.animator = valueAnimator
+        }
+
+        textAnimator.setTextStyle(
+                weight = 400,
+                animate = true,
+                onAnimationEnd = animationEndCallback
+        )
+
+        // Verify animationEnd callback has been added.
+        val captor = ArgumentCaptor.forClass(AnimatorListenerAdapter::class.java)
+        verify(valueAnimator).addListener(captor.capture())
+        captor.value.onAnimationEnd(valueAnimator)
+
+        // Verify animationEnd callback has been invoked and removed.
+        verify(animationEndCallback).run()
+        verify(valueAnimator).removeListener(eq(captor.value))
+    }
+
+    @Test
+    fun testCacheTypeface() {
+        val layout = makeLayout("Hello, World", PAINT)
+        val valueAnimator = mock(ValueAnimator::class.java)
+        val textInterpolator = mock(TextInterpolator::class.java)
+        val paint = TextPaint().apply {
+            typeface = Typeface.createFromFile("/system/fonts/Roboto-Regular.ttf")
+        }
+        `when`(textInterpolator.targetPaint).thenReturn(paint)
+
+        val textAnimator = TextAnimator(layout, {}).apply {
+            this.textInterpolator = textInterpolator
+            this.animator = valueAnimator
+        }
+
+        textAnimator.setTextStyle(
+                weight = 400,
+                animate = true
+        )
+
+        val prevTypeface = paint.typeface
+
+        textAnimator.setTextStyle(
+                weight = 700,
+                animate = true
+        )
+
+        assertThat(paint.typeface).isNotSameInstanceAs(prevTypeface)
+
+        textAnimator.setTextStyle(
+                weight = 400,
+                animate = true
+        )
+
+        assertThat(paint.typeface).isSameInstanceAs(prevTypeface)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/animation/TextInterpolatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/animation/TextInterpolatorTest.kt
new file mode 100644
index 0000000..2a183bd
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/animation/TextInterpolatorTest.kt
@@ -0,0 +1,326 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.animation
+
+import android.graphics.Bitmap
+import android.graphics.Canvas
+import android.graphics.Color
+import android.graphics.Typeface
+import android.graphics.fonts.Font
+import android.graphics.fonts.FontFamily
+import android.testing.AndroidTestingRunner
+import android.text.Layout
+import android.text.StaticLayout
+import android.text.TextDirectionHeuristic
+import android.text.TextDirectionHeuristics
+import android.text.TextPaint
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.google.common.truth.Truth.assertThat
+import java.io.File
+import kotlin.math.ceil
+import org.junit.Test
+import org.junit.runner.RunWith
+
+private const val TEXT = "Hello, World."
+private const val BIDI_TEXT = "abc\u05D0\u05D1\u05D2"
+private const val BMP_WIDTH = 400
+private const val BMP_HEIGHT = 300
+
+// Due to b/189235998 the weight 400 of the default font is no longer variable font. To be able to
+// test variable behavior, create the interpolatable typefaces with manually here.
+private val VF_FONT = Font.Builder(File("/system/fonts/Roboto-Regular.ttf")).build()
+
+private fun Font.toTypeface() =
+        Typeface.CustomFallbackBuilder(FontFamily.Builder(this).build()).build()
+
+private val PAINT = TextPaint().apply {
+    typeface = Font.Builder(VF_FONT).setFontVariationSettings("'wght' 400").build().toTypeface()
+    textSize = 32f
+}
+
+private val START_PAINT = TextPaint(PAINT).apply {
+    typeface = Font.Builder(VF_FONT).setFontVariationSettings("'wght' 400").build().toTypeface()
+}
+
+private val END_PAINT = TextPaint(PAINT).apply {
+    typeface = Font.Builder(VF_FONT).setFontVariationSettings("'wght' 700").build().toTypeface()
+}
+
+@RunWith(AndroidTestingRunner::class)
+@SmallTest
+class TextInterpolatorTest : SysuiTestCase() {
+
+    private fun makeLayout(
+        text: String,
+        paint: TextPaint,
+        dir: TextDirectionHeuristic = TextDirectionHeuristics.LTR
+    ): Layout {
+        val width = ceil(Layout.getDesiredWidth(text, 0, text.length, paint)).toInt()
+        return StaticLayout.Builder.obtain(text, 0, text.length, paint, width)
+                .setTextDirection(dir).build()
+    }
+
+    @Test
+    fun testStartState() {
+        val layout = makeLayout(TEXT, PAINT)
+
+        val interp = TextInterpolator(layout)
+        interp.basePaint.set(START_PAINT)
+        interp.onBasePaintModified()
+
+        interp.targetPaint.set(END_PAINT)
+        interp.onTargetPaintModified()
+
+        // Just after created TextInterpolator, it should have 0 progress.
+        assertThat(interp.progress).isEqualTo(0f)
+        val actual = interp.toBitmap(BMP_WIDTH, BMP_HEIGHT)
+        val expected = makeLayout(TEXT, START_PAINT).toBitmap(BMP_WIDTH, BMP_HEIGHT)
+
+        assertThat(expected.sameAs(actual)).isTrue()
+    }
+
+    @Test
+    fun testEndState() {
+        val layout = makeLayout(TEXT, PAINT)
+
+        val interp = TextInterpolator(layout)
+        interp.basePaint.set(START_PAINT)
+        interp.onBasePaintModified()
+
+        interp.targetPaint.set(END_PAINT)
+        interp.onTargetPaintModified()
+
+        interp.progress = 1f
+        val actual = interp.toBitmap(BMP_WIDTH, BMP_HEIGHT)
+        val expected = makeLayout(TEXT, END_PAINT).toBitmap(BMP_WIDTH, BMP_HEIGHT)
+
+        assertThat(expected.sameAs(actual)).isTrue()
+    }
+
+    @Test
+    fun testMiddleState() {
+        val layout = makeLayout(TEXT, PAINT)
+
+        val interp = TextInterpolator(layout)
+        interp.basePaint.set(START_PAINT)
+        interp.onBasePaintModified()
+
+        interp.targetPaint.set(END_PAINT)
+        interp.onTargetPaintModified()
+
+        // We cannot expect exact text layout of the middle position since we don't use text shaping
+        // result for the middle state for performance reason. Just check it is not equals to start
+        // end state.
+        interp.progress = 0.5f
+        val actual = interp.toBitmap(BMP_WIDTH, BMP_HEIGHT)
+        assertThat(actual.sameAs(makeLayout(TEXT, START_PAINT)
+            .toBitmap(BMP_WIDTH, BMP_HEIGHT))).isFalse()
+        assertThat(actual.sameAs(makeLayout(TEXT, END_PAINT)
+            .toBitmap(BMP_WIDTH, BMP_HEIGHT))).isFalse()
+    }
+
+    @Test
+    fun testRebase() {
+        val layout = makeLayout(TEXT, PAINT)
+
+        val interp = TextInterpolator(layout)
+        interp.basePaint.set(START_PAINT)
+        interp.onBasePaintModified()
+
+        interp.targetPaint.set(END_PAINT)
+        interp.onTargetPaintModified()
+
+        interp.progress = 0.5f
+        val expected = interp.toBitmap(BMP_WIDTH, BMP_HEIGHT)
+
+        // Rebase base state to the current state of progress 0.5.
+        interp.rebase()
+        assertThat(interp.progress).isEqualTo(0f)
+        val actual = interp.toBitmap(BMP_WIDTH, BMP_HEIGHT)
+
+        assertThat(expected.sameAs(actual)).isTrue()
+    }
+
+    @Test
+    fun testBidi_LTR() {
+        val layout = makeLayout(BIDI_TEXT, PAINT, TextDirectionHeuristics.LTR)
+
+        val interp = TextInterpolator(layout)
+        interp.basePaint.set(START_PAINT)
+        interp.onBasePaintModified()
+
+        interp.targetPaint.set(END_PAINT)
+        interp.onTargetPaintModified()
+
+        // Just after created TextInterpolator, it should have 0 progress.
+        assertThat(interp.progress).isEqualTo(0f)
+        val actual = interp.toBitmap(BMP_WIDTH, BMP_HEIGHT)
+        val expected = makeLayout(BIDI_TEXT, START_PAINT, TextDirectionHeuristics.LTR)
+                .toBitmap(BMP_WIDTH, BMP_HEIGHT)
+
+        assertThat(expected.sameAs(actual)).isTrue()
+    }
+
+    @Test
+    fun testBidi_RTL() {
+        val layout = makeLayout(BIDI_TEXT, PAINT, TextDirectionHeuristics.RTL)
+
+        val interp = TextInterpolator(layout)
+        interp.basePaint.set(START_PAINT)
+        interp.onBasePaintModified()
+
+        interp.targetPaint.set(END_PAINT)
+        interp.onTargetPaintModified()
+
+        // Just after created TextInterpolator, it should have 0 progress.
+        assertThat(interp.progress).isEqualTo(0f)
+        val actual = interp.toBitmap(BMP_WIDTH, BMP_HEIGHT)
+        val expected = makeLayout(BIDI_TEXT, START_PAINT, TextDirectionHeuristics.RTL)
+                .toBitmap(BMP_WIDTH, BMP_HEIGHT)
+
+        assertThat(expected.sameAs(actual)).isTrue()
+    }
+
+    @Test
+    fun testGlyphCallback_Empty() {
+        val layout = makeLayout(BIDI_TEXT, PAINT, TextDirectionHeuristics.RTL)
+
+        val interp = TextInterpolator(layout).apply {
+            glyphFilter = { glyph, progress ->
+            }
+        }
+        interp.basePaint.set(START_PAINT)
+        interp.onBasePaintModified()
+
+        interp.targetPaint.set(END_PAINT)
+        interp.onTargetPaintModified()
+
+        // Just after created TextInterpolator, it should have 0 progress.
+        val actual = interp.toBitmap(BMP_WIDTH, BMP_HEIGHT)
+        val expected = makeLayout(BIDI_TEXT, START_PAINT, TextDirectionHeuristics.RTL)
+                .toBitmap(BMP_WIDTH, BMP_HEIGHT)
+
+        assertThat(expected.sameAs(actual)).isTrue()
+    }
+
+    @Test
+    fun testGlyphCallback_Xcoordinate() {
+        val layout = makeLayout(BIDI_TEXT, PAINT, TextDirectionHeuristics.RTL)
+
+        val interp = TextInterpolator(layout).apply {
+            glyphFilter = { glyph, progress ->
+                glyph.x += 30f
+            }
+        }
+        interp.basePaint.set(START_PAINT)
+        interp.onBasePaintModified()
+
+        interp.targetPaint.set(END_PAINT)
+        interp.onTargetPaintModified()
+
+        // Just after created TextInterpolator, it should have 0 progress.
+        val actual = interp.toBitmap(BMP_WIDTH, BMP_HEIGHT)
+        val expected = makeLayout(BIDI_TEXT, START_PAINT, TextDirectionHeuristics.RTL)
+                .toBitmap(BMP_WIDTH, BMP_HEIGHT)
+
+        // The glyph position was modified by callback, so the bitmap should not be the same.
+        // We cannot modify the result of StaticLayout, so we cannot expect the exact  bitmaps.
+        assertThat(expected.sameAs(actual)).isFalse()
+    }
+
+    @Test
+    fun testGlyphCallback_Ycoordinate() {
+        val layout = makeLayout(BIDI_TEXT, PAINT, TextDirectionHeuristics.RTL)
+
+        val interp = TextInterpolator(layout).apply {
+            glyphFilter = { glyph, progress ->
+                glyph.y += 30f
+            }
+        }
+        interp.basePaint.set(START_PAINT)
+        interp.onBasePaintModified()
+
+        interp.targetPaint.set(END_PAINT)
+        interp.onTargetPaintModified()
+
+        // Just after created TextInterpolator, it should have 0 progress.
+        val actual = interp.toBitmap(BMP_WIDTH, BMP_HEIGHT)
+        val expected = makeLayout(BIDI_TEXT, START_PAINT, TextDirectionHeuristics.RTL)
+                .toBitmap(BMP_WIDTH, BMP_HEIGHT)
+
+        // The glyph position was modified by callback, so the bitmap should not be the same.
+        // We cannot modify the result of StaticLayout, so we cannot expect the exact  bitmaps.
+        assertThat(expected.sameAs(actual)).isFalse()
+    }
+
+    @Test
+    fun testGlyphCallback_TextSize() {
+        val layout = makeLayout(BIDI_TEXT, PAINT, TextDirectionHeuristics.RTL)
+
+        val interp = TextInterpolator(layout).apply {
+            glyphFilter = { glyph, progress ->
+                glyph.textSize += 10f
+            }
+        }
+        interp.basePaint.set(START_PAINT)
+        interp.onBasePaintModified()
+
+        interp.targetPaint.set(END_PAINT)
+        interp.onTargetPaintModified()
+
+        // Just after created TextInterpolator, it should have 0 progress.
+        val actual = interp.toBitmap(BMP_WIDTH, BMP_HEIGHT)
+        val expected = makeLayout(BIDI_TEXT, START_PAINT, TextDirectionHeuristics.RTL)
+                .toBitmap(BMP_WIDTH, BMP_HEIGHT)
+
+        // The glyph position was modified by callback, so the bitmap should not be the same.
+        // We cannot modify the result of StaticLayout, so we cannot expect the exact  bitmaps.
+        assertThat(expected.sameAs(actual)).isFalse()
+    }
+
+    @Test
+    fun testGlyphCallback_Color() {
+        val layout = makeLayout(BIDI_TEXT, PAINT, TextDirectionHeuristics.RTL)
+
+        val interp = TextInterpolator(layout).apply {
+            glyphFilter = { glyph, progress ->
+                glyph.color = Color.RED
+            }
+        }
+        interp.basePaint.set(START_PAINT)
+        interp.onBasePaintModified()
+
+        interp.targetPaint.set(END_PAINT)
+        interp.onTargetPaintModified()
+
+        // Just after created TextInterpolator, it should have 0 progress.
+        val actual = interp.toBitmap(BMP_WIDTH, BMP_HEIGHT)
+        val expected = makeLayout(BIDI_TEXT, START_PAINT, TextDirectionHeuristics.RTL)
+                .toBitmap(BMP_WIDTH, BMP_HEIGHT)
+
+        // The glyph position was modified by callback, so the bitmap should not be the same.
+        // We cannot modify the result of StaticLayout, so we cannot expect the exact  bitmaps.
+        assertThat(expected.sameAs(actual)).isFalse()
+    }
+}
+
+private fun Layout.toBitmap(width: Int, height: Int) =
+        Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888).also { draw(Canvas(it)) }!!
+
+private fun TextInterpolator.toBitmap(width: Int, height: Int) =
+        Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888).also { draw(Canvas(it)) }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/animation/ViewHierarchyAnimatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/animation/ViewHierarchyAnimatorTest.kt
index b61fbbe..273786d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/animation/ViewHierarchyAnimatorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/animation/ViewHierarchyAnimatorTest.kt
@@ -207,6 +207,25 @@
     }
 
     @Test
+    fun animatesInvisibleViews() {
+        rootView.layout(10 /* l */, 10 /* t */, 50 /* r */, 50 /* b */)
+        rootView.visibility = View.INVISIBLE
+
+        val success = ViewHierarchyAnimator.animate(rootView)
+        // Change all bounds.
+        rootView.layout(0 /* l */, 15 /* t */, 70 /* r */, 80 /* b */)
+
+        assertTrue(success)
+        assertNotNull(rootView.getTag(R.id.tag_animator))
+        // The initial values should be those of the previous layout.
+        checkBounds(rootView, l = 10, t = 10, r = 50, b = 50)
+        endAnimation(rootView)
+        assertNull(rootView.getTag(R.id.tag_animator))
+        // The end values should be those of the latest layout.
+        checkBounds(rootView, l = 0, t = 15, r = 70, b = 80)
+    }
+
+    @Test
     fun animatesAppearingViewsFromStartToEnd() {
         // Starting GONE.
         rootView.visibility = View.GONE
@@ -222,20 +241,6 @@
         assertNull(rootView.getTag(R.id.tag_animator))
         checkBounds(rootView, l = 0, t = 100, r = 100, b = 200)
 
-        // Starting INVISIBLE.
-        rootView.visibility = View.INVISIBLE
-        rootView.layout(0 /* l */, 50 /* t */, 50 /* r */, 100 /* b */)
-        success = ViewHierarchyAnimator.animateAddition(rootView)
-        rootView.visibility = View.VISIBLE
-        rootView.layout(0 /* l */, 100 /* t */, 100 /* r */, 200 /* b */)
-
-        assertTrue(success)
-        assertNotNull(rootView.getTag(R.id.tag_animator))
-        checkBounds(rootView, l = 50, t = 150, r = 50, b = 150)
-        endAnimation(rootView)
-        assertNull(rootView.getTag(R.id.tag_animator))
-        checkBounds(rootView, l = 0, t = 100, r = 100, b = 200)
-
         // Starting with nothing.
         rootView.layout(0 /* l */, 0 /* t */, 0 /* r */, 0 /* b */)
         success = ViewHierarchyAnimator.animateAddition(rootView)
@@ -937,7 +942,7 @@
     }
 
     @Test
-    fun doesNotAnimateInvisibleViews() {
+    fun doesNotAnimateGoneViews() {
         rootView.layout(10 /* l */, 10 /* t */, 50 /* r */, 50 /* b */)
 
         // GONE
@@ -948,15 +953,6 @@
         assertFalse(success)
         assertNull(rootView.getTag(R.id.tag_animator))
         checkBounds(rootView, l = 0, t = 15, r = 55, b = 80)
-
-        // INVISIBLE.
-        rootView.visibility = View.INVISIBLE
-        success = ViewHierarchyAnimator.animate(rootView)
-        rootView.layout(0 /* l */, 20 /* t */, 10 /* r */, 50 /* b */)
-
-        assertFalse(success)
-        assertNull(rootView.getTag(R.id.tag_animator))
-        checkBounds(rootView, l = 0, t = 20, r = 10, b = 50)
     }
 
     @Test
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 bc5a4d3..bf3788e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt
@@ -48,11 +48,12 @@
 import org.junit.runner.RunWith
 import org.mockito.Mock
 import org.mockito.Mockito.anyInt
+import org.mockito.Mockito.anyLong
 import org.mockito.Mockito.eq
 import org.mockito.Mockito.never
 import org.mockito.Mockito.verify
-import org.mockito.junit.MockitoJUnit
 import org.mockito.Mockito.`when` as whenever
+import org.mockito.junit.MockitoJUnit
 
 @RunWith(AndroidTestingRunner::class)
 @RunWithLooper(setAsMainLooper = true)
@@ -87,7 +88,7 @@
     @Test
     fun testNotifiesAnimatedIn() {
         initializeFingerprintContainer()
-        verify(callback).onDialogAnimatedIn()
+        verify(callback).onDialogAnimatedIn(authContainer?.requestId ?: 0L)
     }
 
     @Test
@@ -96,13 +97,13 @@
         container.dismissFromSystemServer()
         waitForIdleSync()
 
-        verify(callback, never()).onDialogAnimatedIn()
+        verify(callback, never()).onDialogAnimatedIn(anyLong())
 
         container.addToView()
         waitForIdleSync()
 
         // attaching the view resets the state and allows this to happen again
-        verify(callback).onDialogAnimatedIn()
+        verify(callback).onDialogAnimatedIn(authContainer?.requestId ?: 0L)
     }
 
     @Test
@@ -110,14 +111,17 @@
         val container = initializeFingerprintContainer()
         waitForIdleSync()
 
-        verify(callback).onDialogAnimatedIn()
+        val requestID = authContainer?.requestId ?: 0L
+
+        verify(callback).onDialogAnimatedIn(requestID)
 
         container.onWindowFocusChanged(false)
         waitForIdleSync()
 
         verify(callback).onDismissed(
-            eq(AuthDialogCallback.DISMISSED_USER_CANCELED),
-            eq<ByteArray?>(null) /* credentialAttestation */
+                eq(AuthDialogCallback.DISMISSED_USER_CANCELED),
+                eq<ByteArray?>(null), /* credentialAttestation */
+                eq(requestID)
         )
         assertThat(container.parent).isNull()
     }
@@ -131,8 +135,9 @@
         waitForIdleSync()
 
         verify(callback).onDismissed(
-            eq(AuthDialogCallback.DISMISSED_BIOMETRIC_AUTHENTICATED),
-            eq<ByteArray?>(null) /* credentialAttestation */
+                eq(AuthDialogCallback.DISMISSED_BIOMETRIC_AUTHENTICATED),
+                eq<ByteArray?>(null), /* credentialAttestation */
+                eq(authContainer?.requestId ?: 0L)
         )
         assertThat(container.parent).isNull()
     }
@@ -146,11 +151,13 @@
         waitForIdleSync()
 
         verify(callback).onSystemEvent(
-            eq(BiometricConstants.BIOMETRIC_SYSTEM_EVENT_EARLY_USER_CANCEL)
+                eq(BiometricConstants.BIOMETRIC_SYSTEM_EVENT_EARLY_USER_CANCEL),
+                eq(authContainer?.requestId ?: 0L)
         )
         verify(callback).onDismissed(
-            eq(AuthDialogCallback.DISMISSED_USER_CANCELED),
-            eq<ByteArray?>(null) /* credentialAttestation */
+                eq(AuthDialogCallback.DISMISSED_USER_CANCELED),
+                eq<ByteArray?>(null), /* credentialAttestation */
+                eq(authContainer?.requestId ?: 0L)
         )
         assertThat(container.parent).isNull()
     }
@@ -164,8 +171,9 @@
         waitForIdleSync()
 
         verify(callback).onDismissed(
-            eq(AuthDialogCallback.DISMISSED_BUTTON_NEGATIVE),
-            eq<ByteArray?>(null) /* credentialAttestation */
+                eq(AuthDialogCallback.DISMISSED_BUTTON_NEGATIVE),
+                eq<ByteArray?>(null), /* credentialAttestation */
+                eq(authContainer?.requestId ?: 0L)
         )
         assertThat(container.parent).isNull()
     }
@@ -180,7 +188,7 @@
         )
         waitForIdleSync()
 
-        verify(callback).onTryAgainPressed()
+        verify(callback).onTryAgainPressed(authContainer?.requestId ?: 0L)
     }
 
     @Test
@@ -192,8 +200,9 @@
         waitForIdleSync()
 
         verify(callback).onDismissed(
-            eq(AuthDialogCallback.DISMISSED_ERROR),
-            eq<ByteArray?>(null) /* credentialAttestation */
+                eq(AuthDialogCallback.DISMISSED_ERROR),
+                eq<ByteArray?>(null), /* credentialAttestation */
+                eq(authContainer?.requestId ?: 0L)
         )
         assertThat(authContainer!!.parent).isNull()
     }
@@ -209,7 +218,7 @@
         )
         waitForIdleSync()
 
-        verify(callback).onDeviceCredentialPressed()
+        verify(callback).onDeviceCredentialPressed(authContainer?.requestId ?: 0L)
         assertThat(container.hasCredentialView()).isTrue()
     }
 
@@ -297,6 +306,16 @@
     }
 
     @Test
+    fun testLayoutParams_hasDimbehindWindowFlag() {
+        val layoutParams = AuthContainerView.getLayoutParams(windowToken, "")
+        val lpFlags = layoutParams.flags
+        val lpDimAmount = layoutParams.dimAmount
+
+        assertThat((lpFlags and WindowManager.LayoutParams.FLAG_DIM_BEHIND) != 0).isTrue()
+        assertThat(lpDimAmount).isGreaterThan(0f)
+    }
+
+    @Test
     fun testLayoutParams_excludesImeInsets() {
         val layoutParams = AuthContainerView.getLayoutParams(windowToken, "")
         assertThat((layoutParams.fitInsetsTypes and WindowInsets.Type.ime()) == 0).isTrue()
@@ -312,12 +331,12 @@
         container.onAuthenticationFailed(BiometricAuthenticator.TYPE_FACE, "failed")
         waitForIdleSync()
 
-        verify(callback, never()).onTryAgainPressed()
+        verify(callback, never()).onTryAgainPressed(anyLong())
 
         container.onPointerDown()
         waitForIdleSync()
 
-        verify(callback).onTryAgainPressed()
+        verify(callback).onTryAgainPressed(authContainer?.requestId ?: 0L)
     }
 
     private fun initializeFingerprintContainer(
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 d948a99..d158892 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthControllerTest.java
@@ -291,7 +291,8 @@
     public void testSendsReasonUserCanceled_whenDismissedByUserCancel() throws Exception {
         showDialog(new int[]{1} /* sensorIds */, false /* credentialAllowed */);
         mAuthController.onDismissed(AuthDialogCallback.DISMISSED_USER_CANCELED,
-                null /* credentialAttestation */);
+                null, /* credentialAttestation */
+                mAuthController.mCurrentDialog.getRequestId());
         verify(mReceiver).onDialogDismissed(
                 eq(BiometricPrompt.DISMISSED_REASON_USER_CANCEL),
                 eq(null) /* credentialAttestation */);
@@ -301,7 +302,8 @@
     public void testSendsReasonNegative_whenDismissedByButtonNegative() throws Exception {
         showDialog(new int[] {1} /* sensorIds */, false /* credentialAllowed */);
         mAuthController.onDismissed(AuthDialogCallback.DISMISSED_BUTTON_NEGATIVE,
-                null /* credentialAttestation */);
+                null, /* credentialAttestation */
+                mAuthController.mCurrentDialog.getRequestId());
         verify(mReceiver).onDialogDismissed(
                 eq(BiometricPrompt.DISMISSED_REASON_NEGATIVE),
                 eq(null) /* credentialAttestation */);
@@ -311,7 +313,8 @@
     public void testSendsReasonConfirmed_whenDismissedByButtonPositive() throws Exception {
         showDialog(new int[] {1} /* sensorIds */, false /* credentialAllowed */);
         mAuthController.onDismissed(AuthDialogCallback.DISMISSED_BUTTON_POSITIVE,
-                null /* credentialAttestation */);
+                null, /* credentialAttestation */
+                mAuthController.mCurrentDialog.getRequestId());
         verify(mReceiver).onDialogDismissed(
                 eq(BiometricPrompt.DISMISSED_REASON_BIOMETRIC_CONFIRMED),
                 eq(null) /* credentialAttestation */);
@@ -321,7 +324,8 @@
     public void testSendsReasonConfirmNotRequired_whenDismissedByAuthenticated() throws Exception {
         showDialog(new int[] {1} /* sensorIds */, false /* credentialAllowed */);
         mAuthController.onDismissed(AuthDialogCallback.DISMISSED_BIOMETRIC_AUTHENTICATED,
-                null /* credentialAttestation */);
+                null, /* credentialAttestation */
+                mAuthController.mCurrentDialog.getRequestId());
         verify(mReceiver).onDialogDismissed(
                 eq(BiometricPrompt.DISMISSED_REASON_BIOMETRIC_CONFIRM_NOT_REQUIRED),
                 eq(null) /* credentialAttestation */);
@@ -331,7 +335,8 @@
     public void testSendsReasonError_whenDismissedByError() throws Exception {
         showDialog(new int[] {1} /* sensorIds */, false /* credentialAllowed */);
         mAuthController.onDismissed(AuthDialogCallback.DISMISSED_ERROR,
-                null /* credentialAttestation */);
+                null, /* credentialAttestation */
+                mAuthController.mCurrentDialog.getRequestId());
         verify(mReceiver).onDialogDismissed(
                 eq(BiometricPrompt.DISMISSED_REASON_ERROR),
                 eq(null) /* credentialAttestation */);
@@ -341,7 +346,8 @@
     public void testSendsReasonServerRequested_whenDismissedByServer() throws Exception {
         showDialog(new int[] {1} /* sensorIds */, false /* credentialAllowed */);
         mAuthController.onDismissed(AuthDialogCallback.DISMISSED_BY_SYSTEM_SERVER,
-                null /* credentialAttestation */);
+                null, /* credentialAttestation */
+                mAuthController.mCurrentDialog.getRequestId());
         verify(mReceiver).onDialogDismissed(
                 eq(BiometricPrompt.DISMISSED_REASON_SERVER_REQUESTED),
                 eq(null) /* credentialAttestation */);
@@ -355,7 +361,7 @@
         final byte[] credentialAttestation = generateRandomHAT();
 
         mAuthController.onDismissed(AuthDialogCallback.DISMISSED_CREDENTIAL_AUTHENTICATED,
-                credentialAttestation);
+                credentialAttestation, mAuthController.mCurrentDialog.getRequestId());
         verify(mReceiver).onDialogDismissed(
                 eq(BiometricPrompt.DISMISSED_REASON_CREDENTIAL_CONFIRMED),
                 AdditionalMatchers.aryEq(credentialAttestation));
@@ -531,7 +537,7 @@
         final byte[] credentialAttestation = generateRandomHAT();
 
         mAuthController.onDismissed(AuthDialogCallback.DISMISSED_CREDENTIAL_AUTHENTICATED,
-                credentialAttestation);
+                credentialAttestation, mAuthController.mCurrentDialog.getRequestId());
         verify(mReceiver).onDialogDismissed(
                 eq(BiometricPrompt.DISMISSED_REASON_CREDENTIAL_CONFIRMED),
                 AdditionalMatchers.aryEq(credentialAttestation));
@@ -640,17 +646,19 @@
     @Test
     public void testDoesNotCrash_whenTryAgainPressedAfterDismissal() {
         showDialog(new int[] {1} /* sensorIds */, false /* credentialAllowed */);
+        final long requestID = mAuthController.mCurrentDialog.getRequestId();
         mAuthController.onDismissed(AuthDialogCallback.DISMISSED_USER_CANCELED,
-                null /* credentialAttestation */);
-        mAuthController.onTryAgainPressed();
+                null, /* credentialAttestation */requestID);
+        mAuthController.onTryAgainPressed(requestID);
     }
 
     @Test
     public void testDoesNotCrash_whenDeviceCredentialPressedAfterDismissal() {
         showDialog(new int[] {1} /* sensorIds */, false /* credentialAllowed */);
+        final long requestID = mAuthController.mCurrentDialog.getRequestId();
         mAuthController.onDismissed(AuthDialogCallback.DISMISSED_USER_CANCELED,
-                null /* credentialAttestation */);
-        mAuthController.onDeviceCredentialPressed();
+                null /* credentialAttestation */, requestID);
+        mAuthController.onDeviceCredentialPressed(requestID);
     }
 
     @Test
@@ -708,7 +716,8 @@
         // WHEN dialog is shown and then dismissed
         showDialog(new int[]{1} /* sensorIds */, false /* credentialAllowed */);
         mAuthController.onDismissed(AuthDialogCallback.DISMISSED_USER_CANCELED,
-                null /* credentialAttestation */);
+                null /* credentialAttestation */,
+                mAuthController.mCurrentDialog.getRequestId());
 
         // THEN callback should be received
         verify(callback).onBiometricPromptDismissed();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/OWNERS b/packages/SystemUI/tests/src/com/android/systemui/biometrics/OWNERS
new file mode 100644
index 0000000..adb10f0
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/OWNERS
@@ -0,0 +1,4 @@
+set noparent
+
+include /services/core/java/com/android/server/biometrics/OWNERS
+beverlyt@google.com
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 dec2b82..8d969d0 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/SidefpsControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/SidefpsControllerTest.kt
@@ -45,6 +45,8 @@
 import android.view.ViewPropertyAnimator
 import android.view.WindowInsets
 import android.view.WindowManager
+import android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION
+import android.view.WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY
 import android.view.WindowMetrics
 import androidx.test.filters.SmallTest
 import com.airbnb.lottie.LottieAnimationView
@@ -62,7 +64,6 @@
 import org.mockito.ArgumentMatchers.eq
 import org.mockito.Captor
 import org.mockito.Mock
-import org.mockito.Mockito.`when`
 import org.mockito.Mockito.any
 import org.mockito.Mockito.anyFloat
 import org.mockito.Mockito.anyInt
@@ -72,6 +73,7 @@
 import org.mockito.Mockito.reset
 import org.mockito.Mockito.times
 import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when` as whenEver
 import org.mockito.junit.MockitoJUnit
 
 private const val DISPLAY_ID = 2
@@ -126,15 +128,15 @@
         context.addMockSystemService(DisplayManager::class.java, displayManager)
         context.addMockSystemService(WindowManager::class.java, windowManager)
 
-        `when`(layoutInflater.inflate(R.layout.sidefps_view, null, false)).thenReturn(sidefpsView)
-        `when`(sidefpsView.findViewById<LottieAnimationView>(eq(R.id.sidefps_animation)))
+        whenEver(layoutInflater.inflate(R.layout.sidefps_view, null, false)).thenReturn(sidefpsView)
+        whenEver(sidefpsView.findViewById<LottieAnimationView>(eq(R.id.sidefps_animation)))
             .thenReturn(mock(LottieAnimationView::class.java))
         with(mock(ViewPropertyAnimator::class.java)) {
-            `when`(sidefpsView.animate()).thenReturn(this)
-            `when`(alpha(anyFloat())).thenReturn(this)
-            `when`(setStartDelay(anyLong())).thenReturn(this)
-            `when`(setDuration(anyLong())).thenReturn(this)
-            `when`(setListener(any())).thenAnswer {
+            whenEver(sidefpsView.animate()).thenReturn(this)
+            whenEver(alpha(anyFloat())).thenReturn(this)
+            whenEver(setStartDelay(anyLong())).thenReturn(this)
+            whenEver(setDuration(anyLong())).thenReturn(this)
+            whenEver(setListener(any())).thenAnswer {
                 (it.arguments[0] as Animator.AnimatorListener)
                     .onAnimationEnd(mock(Animator::class.java))
                 this
@@ -177,7 +179,7 @@
         displayBounds = Rect(0, 0, displayWidth, displayHeight)
         var locations = listOf(sensorLocation)
 
-        `when`(fingerprintManager.sensorPropertiesInternal).thenReturn(
+        whenEver(fingerprintManager.sensorPropertiesInternal).thenReturn(
             listOf(
                 FingerprintSensorPropertiesInternal(
                     SENSOR_ID,
@@ -196,12 +198,12 @@
         displayInfo.initInfo()
         val dmGlobal = mock(DisplayManagerGlobal::class.java)
         val display = Display(dmGlobal, DISPLAY_ID, displayInfo, DEFAULT_DISPLAY_ADJUSTMENTS)
-        `when`(dmGlobal.getDisplayInfo(eq(DISPLAY_ID))).thenReturn(displayInfo)
-        `when`(windowManager.defaultDisplay).thenReturn(display)
-        `when`(windowManager.maximumWindowMetrics).thenReturn(
+        whenEver(dmGlobal.getDisplayInfo(eq(DISPLAY_ID))).thenReturn(displayInfo)
+        whenEver(windowManager.defaultDisplay).thenReturn(display)
+        whenEver(windowManager.maximumWindowMetrics).thenReturn(
                 WindowMetrics(displayBounds, WindowInsets.CONSUMED)
         )
-        `when`(windowManager.currentWindowMetrics).thenReturn(
+        whenEver(windowManager.currentWindowMetrics).thenReturn(
             WindowMetrics(displayBounds, windowInsets)
         )
 
@@ -277,13 +279,13 @@
 
     @Test
     fun testShowsForMostSettings() = testWithDisplay {
-        `when`(activityTaskManager.getTasks(anyInt())).thenReturn(listOf(fpEnrollTask()))
+        whenEver(activityTaskManager.getTasks(anyInt())).thenReturn(listOf(fpEnrollTask()))
         testIgnoredFor(REASON_AUTH_SETTINGS, ignored = false)
     }
 
     @Test
     fun testIgnoredForVerySpecificSettings() = testWithDisplay {
-        `when`(activityTaskManager.getTasks(anyInt())).thenReturn(listOf(fpSettingsTask()))
+        whenEver(activityTaskManager.getTasks(anyInt())).thenReturn(listOf(fpSettingsTask()))
         testIgnoredFor(REASON_AUTH_SETTINGS)
     }
 
@@ -424,6 +426,58 @@
         assertThat(overlayViewParamsCaptor.value.x).isEqualTo(displayWidth - boundsWidth)
         assertThat(overlayViewParamsCaptor.value.y).isEqualTo(sensorLocation.sensorLocationY)
     }
+
+    @Test
+    fun hasSideFpsSensor_withSensorProps_returnsTrue() = testWithDisplay {
+        // By default all those tests assume the side fps sensor is available.
+
+        assertThat(fingerprintManager.hasSideFpsSensor()).isTrue()
+    }
+
+    @Test
+    fun hasSideFpsSensor_withoutSensorProps_returnsFalse() {
+        whenEver(fingerprintManager.sensorPropertiesInternal).thenReturn(null)
+
+        assertThat(fingerprintManager.hasSideFpsSensor()).isFalse()
+    }
+
+    @Test
+    fun testLayoutParams_hasNoMoveAnimationWindowFlag() = testWithDisplay(
+        deviceConfig = DeviceConfig.Y_ALIGNED_UNFOLDED
+    ) {
+        sideFpsController.overlayOffsets = sensorLocation
+        sideFpsController.updateOverlayParams(
+            windowManager.defaultDisplay,
+            indicatorBounds
+        )
+        overlayController.show(SENSOR_ID, REASON_UNKNOWN)
+        executor.runAllReady()
+
+        verify(windowManager).updateViewLayout(any(), overlayViewParamsCaptor.capture())
+
+        val lpFlags = overlayViewParamsCaptor.value.privateFlags
+
+        assertThat((lpFlags and PRIVATE_FLAG_NO_MOVE_ANIMATION) != 0).isTrue()
+    }
+
+    @Test
+    fun testLayoutParams_hasTrustedOverlayWindowFlag() = testWithDisplay(
+        deviceConfig = DeviceConfig.Y_ALIGNED_UNFOLDED
+    ) {
+        sideFpsController.overlayOffsets = sensorLocation
+        sideFpsController.updateOverlayParams(
+            windowManager.defaultDisplay,
+            indicatorBounds
+        )
+        overlayController.show(SENSOR_ID, REASON_UNKNOWN)
+        executor.runAllReady()
+
+        verify(windowManager).updateViewLayout(any(), overlayViewParamsCaptor.capture())
+
+        val lpFlags = overlayViewParamsCaptor.value.privateFlags
+
+        assertThat((lpFlags and PRIVATE_FLAG_TRUSTED_OVERLAY) != 0).isTrue()
+    }
 }
 
 private fun insetsForSmallNavbar() = insetsWithBottom(60)
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 0fdd905..b61bda8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java
@@ -21,6 +21,7 @@
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.atLeast;
+import static org.mockito.Mockito.atLeastOnce;
 import static org.mockito.Mockito.eq;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.reset;
@@ -468,6 +469,40 @@
         verify(mView).setUnpausedAlpha(255);
     }
 
+    @Test
+    public void testUpdatePanelExpansion_pauseAuth() {
+        // GIVEN view is attached + on the keyguard
+        mController.onViewAttached();
+        captureStatusBarStateListeners();
+        captureStatusBarExpansionListeners();
+        sendStatusBarStateChanged(StatusBarState.KEYGUARD);
+        reset(mView);
+
+        // WHEN panelViewExpansion changes to hide
+        when(mView.getUnpausedAlpha()).thenReturn(0);
+        updateStatusBarExpansion(0f, false);
+
+        // THEN pause auth is updated to PAUSE
+        verify(mView, atLeastOnce()).setPauseAuth(true);
+    }
+
+    @Test
+    public void testUpdatePanelExpansion_unpauseAuth() {
+        // GIVEN view is attached + on the keyguard + panel expansion is 0f
+        mController.onViewAttached();
+        captureStatusBarStateListeners();
+        captureStatusBarExpansionListeners();
+        sendStatusBarStateChanged(StatusBarState.KEYGUARD);
+        reset(mView);
+
+        // WHEN panelViewExpansion changes to expanded
+        when(mView.getUnpausedAlpha()).thenReturn(255);
+        updateStatusBarExpansion(1f, true);
+
+        // THEN pause auth is updated to NOT pause
+        verify(mView, atLeastOnce()).setPauseAuth(false);
+    }
+
     private void sendStatusBarStateChanged(int statusBarState) {
         mStatusBarStateListener.onStateChanged(statusBarState);
     }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/bluetooth/BroadcastDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/bluetooth/BroadcastDialogTest.java
new file mode 100644
index 0000000..a61cecb
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/bluetooth/BroadcastDialogTest.java
@@ -0,0 +1,83 @@
+/**
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.bluetooth;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.mock;
+
+import androidx.test.filters.SmallTest;
+
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+import android.view.View;
+import android.widget.Button;
+import android.widget.TextView;
+
+import com.android.internal.logging.UiEventLogger;
+import com.android.systemui.R;
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.media.dialog.MediaOutputDialogFactory;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.MockitoAnnotations;
+
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper(setAsMainLooper = true)
+public class BroadcastDialogTest extends SysuiTestCase {
+
+    private static final String SWITCH_APP = "Music";
+    private static final String TEST_PACKAGE = "com.google.android.apps.nbu.files";
+    private BroadcastDialog mBroadcastDialog;
+    private View mDialogView;
+    private TextView mSubTitle;
+    private Button mChangeOutputButton;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mBroadcastDialog = new BroadcastDialog(mContext, mock(MediaOutputDialogFactory.class),
+                SWITCH_APP, TEST_PACKAGE, mock(UiEventLogger.class));
+        mBroadcastDialog.show();
+        mDialogView = mBroadcastDialog.mDialogView;
+    }
+
+    @After
+    public void tearDown() {
+        mBroadcastDialog.dismiss();
+    }
+
+    @Test
+    public void onCreate_withCurrentApp_checkSwitchAppContent() {
+        mSubTitle = mDialogView.requireViewById(R.id.dialog_subtitle);
+
+        assertThat(mSubTitle.getText()).isEqualTo(
+                mContext.getString(R.string.bt_le_audio_broadcast_dialog_sub_title, SWITCH_APP));
+    }
+
+    @Test
+    public void onClick_withChangeOutput_dismissBroadcastDialog() {
+        mChangeOutputButton = mDialogView.requireViewById(R.id.change_output);
+        mChangeOutputButton.performClick();
+
+        assertThat(mBroadcastDialog.isShowing()).isFalse();
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/camera/CameraGestureHelperTest.kt b/packages/SystemUI/tests/src/com/android/systemui/camera/CameraGestureHelperTest.kt
new file mode 100644
index 0000000..ca94ea8
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/camera/CameraGestureHelperTest.kt
@@ -0,0 +1,311 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.camera
+
+import android.app.ActivityManager
+import android.app.IActivityTaskManager
+import android.content.ComponentName
+import android.content.ContentResolver
+import android.content.Intent
+import android.content.pm.ActivityInfo
+import android.content.pm.PackageManager
+import android.content.pm.ResolveInfo
+import androidx.test.filters.SmallTest
+import com.android.systemui.ActivityIntentHelper
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.plugins.ActivityStarter
+import com.android.systemui.statusbar.StatusBarState
+import com.android.systemui.statusbar.phone.CentralSurfaces
+import com.android.systemui.statusbar.policy.KeyguardStateController
+import com.android.systemui.util.mockito.KotlinArgumentCaptor
+import com.android.systemui.util.mockito.eq
+import com.android.systemui.util.mockito.mock
+import com.google.common.truth.Truth.assertThat
+import com.google.common.util.concurrent.MoreExecutors
+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.any
+import org.mockito.Mockito.anyInt
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when` as whenever
+import org.mockito.MockitoAnnotations
+
+@SmallTest
+@RunWith(JUnit4::class)
+class CameraGestureHelperTest : SysuiTestCase() {
+
+    @Mock
+    lateinit var centralSurfaces: CentralSurfaces
+    @Mock
+    lateinit var keyguardStateController: KeyguardStateController
+    @Mock
+    lateinit var packageManager: PackageManager
+    @Mock
+    lateinit var activityManager: ActivityManager
+    @Mock
+    lateinit var activityStarter: ActivityStarter
+    @Mock
+    lateinit var activityIntentHelper: ActivityIntentHelper
+    @Mock
+    lateinit var activityTaskManager: IActivityTaskManager
+    @Mock
+    lateinit var cameraIntents: CameraIntentsWrapper
+    @Mock
+    lateinit var contentResolver: ContentResolver
+
+    private lateinit var underTest: CameraGestureHelper
+
+    @Before
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+        whenever(cameraIntents.getSecureCameraIntent()).thenReturn(
+            Intent(CameraIntents.DEFAULT_SECURE_CAMERA_INTENT_ACTION)
+        )
+        whenever(cameraIntents.getInsecureCameraIntent()).thenReturn(
+            Intent(CameraIntents.DEFAULT_INSECURE_CAMERA_INTENT_ACTION)
+        )
+
+        prepare()
+
+        underTest = CameraGestureHelper(
+            context = mock(),
+            centralSurfaces = centralSurfaces,
+            keyguardStateController = keyguardStateController,
+            packageManager = packageManager,
+            activityManager = activityManager,
+            activityStarter = activityStarter,
+            activityIntentHelper = activityIntentHelper,
+            activityTaskManager = activityTaskManager,
+            cameraIntents = cameraIntents,
+            contentResolver = contentResolver,
+            uiExecutor = MoreExecutors.directExecutor(),
+        )
+    }
+
+    /**
+     * Prepares for tests by setting up the various mocks to emulate a specific device state.
+     *
+     * <p>Safe to call multiple times in a single test (for example, once in [setUp] and once in the
+     * actual test case).
+     *
+     * @param isCameraAllowedByAdmin Whether the device administrator allows use of the camera app
+     * @param installedCameraAppCount The number of installed camera apps on the device
+     * @param isUsingSecureScreenLockOption Whether the user-controlled setting for Screen Lock is
+     * set with a "secure" option that requires the user to provide some secret/credentials to be
+     * able to unlock the device, for example "Face Unlock", "PIN", or "Password". Examples of
+     * non-secure options are "None" and "Swipe"
+     * @param isCameraActivityRunningOnTop Whether the camera activity is running at the top of the
+     * most recent/current task of activities
+     * @param isTaskListEmpty Whether there are no active activity tasks at all. Note that this is
+     * treated as `false` if [isCameraActivityRunningOnTop] is set to `true`
+     */
+    private fun prepare(
+        isCameraAllowedByAdmin: Boolean = true,
+        installedCameraAppCount: Int = 1,
+        isUsingSecureScreenLockOption: Boolean = true,
+        isCameraActivityRunningOnTop: Boolean = false,
+        isTaskListEmpty: Boolean = false,
+    ) {
+        whenever(centralSurfaces.isCameraAllowedByAdmin).thenReturn(isCameraAllowedByAdmin)
+
+        whenever(activityIntentHelper.wouldLaunchResolverActivity(any(), anyInt()))
+            .thenReturn(installedCameraAppCount > 1)
+
+        whenever(keyguardStateController.isMethodSecure).thenReturn(isUsingSecureScreenLockOption)
+        whenever(keyguardStateController.canDismissLockScreen())
+            .thenReturn(!isUsingSecureScreenLockOption)
+
+        if (installedCameraAppCount >= 1) {
+            val resolveInfo = ResolveInfo().apply {
+                this.activityInfo = ActivityInfo().apply {
+                    packageName = CAMERA_APP_PACKAGE_NAME
+                }
+            }
+            whenever(packageManager.resolveActivityAsUser(any(), anyInt(), anyInt())).thenReturn(
+                resolveInfo
+            )
+        } else {
+            whenever(packageManager.resolveActivityAsUser(any(), anyInt(), anyInt())).thenReturn(
+                null
+            )
+        }
+
+        when {
+            isCameraActivityRunningOnTop -> {
+                val runningTaskInfo = ActivityManager.RunningTaskInfo().apply {
+                    topActivity = ComponentName(CAMERA_APP_PACKAGE_NAME, "cameraActivity")
+                }
+                whenever(activityManager.getRunningTasks(anyInt())).thenReturn(
+                    listOf(
+                        runningTaskInfo
+                    )
+                )
+            }
+            isTaskListEmpty -> {
+                whenever(activityManager.getRunningTasks(anyInt())).thenReturn(emptyList())
+            }
+            else -> {
+                whenever(activityManager.getRunningTasks(anyInt())).thenReturn(listOf())
+            }
+        }
+    }
+
+    @Test
+    fun `canCameraGestureBeLaunched - status bar state is keyguard - returns true`() {
+        assertThat(underTest.canCameraGestureBeLaunched(StatusBarState.KEYGUARD)).isTrue()
+    }
+
+    @Test
+    fun `canCameraGestureBeLaunched - state is shade-locked - returns true`() {
+        assertThat(underTest.canCameraGestureBeLaunched(StatusBarState.SHADE_LOCKED)).isTrue()
+    }
+
+    @Test
+    fun `canCameraGestureBeLaunched - state is keyguard - camera activity on top - returns true`() {
+        prepare(isCameraActivityRunningOnTop = true)
+
+        assertThat(underTest.canCameraGestureBeLaunched(StatusBarState.KEYGUARD)).isTrue()
+    }
+
+    @Test
+    fun `canCameraGestureBeLaunched - state is shade-locked - camera activity on top - true`() {
+        prepare(isCameraActivityRunningOnTop = true)
+
+        assertThat(underTest.canCameraGestureBeLaunched(StatusBarState.SHADE_LOCKED)).isTrue()
+    }
+
+    @Test
+    fun `canCameraGestureBeLaunched - not allowed by admin - returns false`() {
+        prepare(isCameraAllowedByAdmin = false)
+
+        assertThat(underTest.canCameraGestureBeLaunched(StatusBarState.KEYGUARD)).isFalse()
+    }
+
+    @Test
+    fun `canCameraGestureBeLaunched - intent does not resolve to any app - returns false`() {
+        prepare(installedCameraAppCount = 0)
+
+        assertThat(underTest.canCameraGestureBeLaunched(StatusBarState.KEYGUARD)).isFalse()
+    }
+
+    @Test
+    fun `canCameraGestureBeLaunched - state is shade - no running tasks - returns true`() {
+        prepare(isCameraActivityRunningOnTop = false, isTaskListEmpty = true)
+
+        assertThat(underTest.canCameraGestureBeLaunched(StatusBarState.SHADE)).isTrue()
+    }
+
+    @Test
+    fun `canCameraGestureBeLaunched - state is shade - camera activity on top - returns false`() {
+        prepare(isCameraActivityRunningOnTop = true)
+
+        assertThat(underTest.canCameraGestureBeLaunched(StatusBarState.SHADE)).isFalse()
+    }
+
+    @Test
+    fun `canCameraGestureBeLaunched - state is shade - camera activity not on top - true`() {
+        assertThat(underTest.canCameraGestureBeLaunched(StatusBarState.SHADE)).isTrue()
+    }
+
+    @Test
+    fun `launchCamera - only one camera app installed - using secure screen lock option`() {
+        val source = 1337
+
+        underTest.launchCamera(source)
+
+        assertActivityStarting(isSecure = true, source = source)
+    }
+
+    @Test
+    fun `launchCamera - only one camera app installed - using non-secure screen lock option`() {
+        prepare(isUsingSecureScreenLockOption = false)
+        val source = 1337
+
+        underTest.launchCamera(source)
+
+        assertActivityStarting(isSecure = false, source = source)
+    }
+
+    @Test
+    fun `launchCamera - multiple camera apps installed - using secure screen lock option`() {
+        prepare(installedCameraAppCount = 2)
+        val source = 1337
+
+        underTest.launchCamera(source)
+
+        assertActivityStarting(
+            isSecure = true,
+            source = source,
+            moreThanOneCameraAppInstalled = true
+        )
+    }
+
+    @Test
+    fun `launchCamera - multiple camera apps installed - using non-secure screen lock option`() {
+        prepare(
+            isUsingSecureScreenLockOption = false,
+            installedCameraAppCount = 2,
+        )
+        val source = 1337
+
+        underTest.launchCamera(source)
+
+        assertActivityStarting(
+            isSecure = false,
+            moreThanOneCameraAppInstalled = true,
+            source = source
+        )
+    }
+
+    private fun assertActivityStarting(
+        isSecure: Boolean,
+        source: Int,
+        moreThanOneCameraAppInstalled: Boolean = false,
+    ) {
+        val intentCaptor = KotlinArgumentCaptor(Intent::class.java)
+        if (isSecure && !moreThanOneCameraAppInstalled) {
+            verify(activityTaskManager).startActivityAsUser(
+                any(),
+                any(),
+                any(),
+                intentCaptor.capture(),
+                any(),
+                any(),
+                any(),
+                anyInt(),
+                anyInt(),
+                any(),
+                any(),
+                anyInt()
+            )
+        } else {
+            verify(activityStarter).startActivity(intentCaptor.capture(), eq(false))
+        }
+        val intent = intentCaptor.value
+
+        assertThat(CameraIntents.isSecureCameraIntent(intent)).isEqualTo(isSecure)
+        assertThat(intent.getIntExtra(CameraGestureHelper.EXTRA_CAMERA_LAUNCH_SOURCE, -1))
+            .isEqualTo(source)
+    }
+
+    companion object {
+        private const val CAMERA_APP_PACKAGE_NAME = "cameraAppPackageName"
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/charging/WiredChargingRippleControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/charging/WiredChargingRippleControllerTest.kt
new file mode 100644
index 0000000..3ac28c8
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/charging/WiredChargingRippleControllerTest.kt
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.charging
+
+import android.testing.AndroidTestingRunner
+import android.view.View
+import android.view.WindowManager
+import androidx.test.filters.SmallTest
+import com.android.internal.logging.UiEventLogger
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.flags.FeatureFlags
+import com.android.systemui.flags.Flags
+import com.android.systemui.ripple.RippleView
+import com.android.systemui.statusbar.commandline.CommandRegistry
+import com.android.systemui.statusbar.policy.BatteryController
+import com.android.systemui.statusbar.policy.ConfigurationController
+import com.android.systemui.util.time.FakeSystemClock
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentCaptor
+import org.mockito.ArgumentMatchers
+import org.mockito.Mock
+import org.mockito.Mockito.any
+import org.mockito.Mockito.eq
+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
+@RunWith(AndroidTestingRunner::class)
+class WiredChargingRippleControllerTest : SysuiTestCase() {
+    private lateinit var controller: WiredChargingRippleController
+    @Mock private lateinit var commandRegistry: CommandRegistry
+    @Mock private lateinit var batteryController: BatteryController
+    @Mock private lateinit var featureFlags: FeatureFlags
+    @Mock private lateinit var configurationController: ConfigurationController
+    @Mock private lateinit var rippleView: RippleView
+    @Mock private lateinit var windowManager: WindowManager
+    @Mock private lateinit var uiEventLogger: UiEventLogger
+    private val systemClock = FakeSystemClock()
+
+    @Before
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+        `when`(featureFlags.isEnabled(Flags.CHARGING_RIPPLE)).thenReturn(true)
+        controller = WiredChargingRippleController(
+                commandRegistry, batteryController, configurationController,
+                featureFlags, context, windowManager, systemClock, uiEventLogger)
+        rippleView.setupShader()
+        controller.rippleView = rippleView // Replace the real ripple view with a mock instance
+        controller.registerCallbacks()
+    }
+
+    @Test
+    fun testTriggerRipple_UnlockedState() {
+        val captor = ArgumentCaptor
+                .forClass(BatteryController.BatteryStateChangeCallback::class.java)
+        verify(batteryController).addCallback(captor.capture())
+
+        // Verify ripple added to window manager.
+        captor.value.onBatteryLevelChanged(
+                /* unusedBatteryLevel= */ 0,
+                /* plugged in= */ true,
+                /* charging= */ false)
+        val attachListenerCaptor =
+                ArgumentCaptor.forClass(View.OnAttachStateChangeListener::class.java)
+        verify(rippleView).addOnAttachStateChangeListener(attachListenerCaptor.capture())
+        verify(windowManager).addView(eq(rippleView), any<WindowManager.LayoutParams>())
+
+        // Verify ripple started
+        val runnableCaptor =
+                ArgumentCaptor.forClass(Runnable::class.java)
+        attachListenerCaptor.value.onViewAttachedToWindow(rippleView)
+        verify(rippleView).startRipple(runnableCaptor.capture())
+
+        // Verify ripple removed
+        runnableCaptor.value.run()
+        verify(windowManager).removeView(rippleView)
+
+        // Verify event logged
+        verify(uiEventLogger).log(
+                WiredChargingRippleController.WiredChargingRippleEvent.CHARGING_RIPPLE_PLAYED)
+    }
+
+    @Test
+    fun testUpdateRippleColor() {
+        val captor = ArgumentCaptor
+                .forClass(ConfigurationController.ConfigurationListener::class.java)
+        verify(configurationController).addCallback(captor.capture())
+
+        reset(rippleView)
+        captor.value.onThemeChanged()
+        verify(rippleView).setColor(ArgumentMatchers.anyInt())
+
+        reset(rippleView)
+        captor.value.onUiModeChanged()
+        verify(rippleView).setColor(ArgumentMatchers.anyInt())
+    }
+
+    @Test
+    fun testDebounceRipple() {
+        var time: Long = 0
+        systemClock.setElapsedRealtime(time)
+
+        controller.startRippleWithDebounce()
+        verify(rippleView).addOnAttachStateChangeListener(ArgumentMatchers.any())
+
+        reset(rippleView)
+        // Wait a short while and trigger.
+        time += 100
+        systemClock.setElapsedRealtime(time)
+        controller.startRippleWithDebounce()
+
+        // Verify the ripple is debounced.
+        verify(rippleView, never()).addOnAttachStateChangeListener(ArgumentMatchers.any())
+
+        // Trigger many times.
+        for (i in 0..100) {
+            time += 100
+            systemClock.setElapsedRealtime(time)
+            controller.startRippleWithDebounce()
+        }
+        // Verify all attempts are debounced.
+        verify(rippleView, never()).addOnAttachStateChangeListener(ArgumentMatchers.any())
+
+        // Wait a long while and trigger.
+        systemClock.setElapsedRealtime(time + 500000)
+        controller.startRippleWithDebounce()
+        // Verify that ripple is triggered.
+        verify(rippleView).addOnAttachStateChangeListener(ArgumentMatchers.any())
+    }
+
+    @Test
+    fun testRipple_whenDocked_doesNotPlayRipple() {
+        `when`(batteryController.isChargingSourceDock).thenReturn(true)
+        val captor = ArgumentCaptor
+                .forClass(BatteryController.BatteryStateChangeCallback::class.java)
+        verify(batteryController).addCallback(captor.capture())
+
+        captor.value.onBatteryLevelChanged(
+                /* unusedBatteryLevel= */ 0,
+                /* plugged in= */ true,
+                /* charging= */ false)
+
+        val attachListenerCaptor =
+                ArgumentCaptor.forClass(View.OnAttachStateChangeListener::class.java)
+        verify(rippleView, never()).addOnAttachStateChangeListener(attachListenerCaptor.capture())
+        verify(windowManager, never()).addView(eq(rippleView), any<WindowManager.LayoutParams>())
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsControllerImplTest.kt
index 3c7ea4f..c31fd82 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsControllerImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsControllerImplTest.kt
@@ -37,9 +37,14 @@
 import com.android.systemui.controls.management.ControlsListingController
 import com.android.systemui.controls.ui.ControlsUiController
 import com.android.systemui.dump.DumpManager
+import com.android.systemui.settings.UserFileManager
 import com.android.systemui.settings.UserTracker
 import com.android.systemui.util.concurrency.FakeExecutor
 import com.android.systemui.util.time.FakeSystemClock
+import com.google.common.truth.Truth.assertThat
+import java.io.File
+import java.util.Optional
+import java.util.function.Consumer
 import org.junit.After
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
@@ -50,20 +55,20 @@
 import org.junit.runner.RunWith
 import org.mockito.ArgumentCaptor
 import org.mockito.ArgumentMatchers
+import org.mockito.ArgumentMatchers.anyString
 import org.mockito.Captor
 import org.mockito.Mock
 import org.mockito.Mockito
 import org.mockito.Mockito.anyInt
-import org.mockito.Mockito.`when`
 import org.mockito.Mockito.inOrder
 import org.mockito.Mockito.mock
 import org.mockito.Mockito.never
 import org.mockito.Mockito.reset
+import org.mockito.Mockito.times
 import org.mockito.Mockito.verify
 import org.mockito.Mockito.verifyNoMoreInteractions
+import org.mockito.Mockito.`when`
 import org.mockito.MockitoAnnotations
-import java.util.Optional
-import java.util.function.Consumer
 
 @SmallTest
 @RunWith(AndroidTestingRunner::class)
@@ -85,6 +90,8 @@
     private lateinit var listingController: ControlsListingController
     @Mock(stubOnly = true)
     private lateinit var userTracker: UserTracker
+    @Mock
+    private lateinit var userFileManager: UserFileManager
 
     @Captor
     private lateinit var structureInfoCaptor: ArgumentCaptor<StructureInfo>
@@ -153,6 +160,9 @@
 
         canceller = DidRunRunnable()
         `when`(bindingController.bindAndLoad(any(), any())).thenReturn(canceller)
+        `when`(userFileManager.getFile(anyString(), anyInt())).thenReturn(mock(File::class.java))
+        `when`(userFileManager.getSharedPreferences(anyString(), anyInt(), anyInt()))
+            .thenReturn(context.getSharedPreferences("test", Context.MODE_PRIVATE))
 
         controller = ControlsControllerImpl(
                 wrapper,
@@ -161,6 +171,7 @@
                 bindingController,
                 listingController,
                 broadcastDispatcher,
+                userFileManager,
                 Optional.of(persistenceWrapper),
                 mock(DumpManager::class.java),
                 userTracker
@@ -217,6 +228,7 @@
                 bindingController,
                 listingController,
                 broadcastDispatcher,
+                userFileManager,
                 Optional.of(persistenceWrapper),
                 mock(DumpManager::class.java),
                 userTracker
@@ -911,6 +923,14 @@
 
         assertTrue(controller.getFavoritesForStructure(TEST_COMPONENT_2, TEST_STRUCTURE).isEmpty())
     }
+
+    @Test
+    fun testUserStructure() {
+        val userStructure = UserStructure(context, context.user, userFileManager)
+        verify(userFileManager, times(2))
+            .getFile(ControlsFavoritePersistenceWrapper.FILE_NAME, context.user.identifier)
+        assertThat(userStructure.file).isNotNull()
+    }
 }
 
 private class DidRunRunnable() : Runnable {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/management/AppAdapterTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/management/AppAdapterTest.kt
new file mode 100644
index 0000000..1e4a9e4
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/controls/management/AppAdapterTest.kt
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.controls.management
+
+import android.content.ComponentName
+import android.content.res.Resources
+import android.testing.AndroidTestingRunner
+import android.testing.TestableLooper
+import android.view.LayoutInflater
+import androidx.test.filters.SmallTest
+import com.android.settingslib.core.lifecycle.Lifecycle
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.controls.ControlsServiceInfo
+import com.android.systemui.util.concurrency.FakeExecutor
+import com.android.systemui.util.mockito.any
+import com.android.systemui.util.time.FakeSystemClock
+import com.google.common.truth.Truth.assertThat
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentCaptor
+import org.mockito.Mock
+import org.mockito.Mockito.mock
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when`
+import org.mockito.MockitoAnnotations
+
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+@TestableLooper.RunWithLooper(setAsMainLooper = true)
+class AppAdapterTest : SysuiTestCase() {
+    private val fakeSystemClock = FakeSystemClock()
+    private val backgroundExecutor = FakeExecutor(fakeSystemClock)
+    private val uiExecutor = FakeExecutor(fakeSystemClock)
+    @Mock lateinit var lifecycle: Lifecycle
+    @Mock lateinit var controlsListingController: ControlsListingController
+    @Mock lateinit var layoutInflater: LayoutInflater
+    @Mock lateinit var onAppSelected: (ComponentName?) -> Unit
+    @Mock lateinit var favoritesRenderer: FavoritesRenderer
+    val resources: Resources = context.resources
+    lateinit var adapter: AppAdapter
+    @Before
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+        adapter = AppAdapter(backgroundExecutor,
+            uiExecutor,
+            lifecycle,
+            controlsListingController,
+            layoutInflater,
+            onAppSelected,
+            favoritesRenderer,
+            resources)
+    }
+
+    @Test
+    fun testOnServicesUpdated_nullLoadLabel() {
+        val captor = ArgumentCaptor
+            .forClass(ControlsListingController.ControlsListingCallback::class.java)
+        val controlsServiceInfo = mock(ControlsServiceInfo::class.java)
+        val serviceInfo = listOf(controlsServiceInfo)
+        `when`(controlsServiceInfo.loadLabel()).thenReturn(null)
+        verify(controlsListingController).observe(any(Lifecycle::class.java), captor.capture())
+
+        captor.value.onServicesUpdated(serviceInfo)
+        backgroundExecutor.runAllReady()
+        uiExecutor.runAllReady()
+
+        assertThat(adapter.itemCount).isEqualTo(serviceInfo.size)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeMachineTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeMachineTest.java
index 3340f2f..abe7ae1 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeMachineTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeMachineTest.java
@@ -21,7 +21,9 @@
 import static com.android.systemui.doze.DozeMachine.State.DOZE_AOD_DOCKED;
 import static com.android.systemui.doze.DozeMachine.State.DOZE_PULSE_DONE;
 import static com.android.systemui.doze.DozeMachine.State.DOZE_PULSING;
+import static com.android.systemui.doze.DozeMachine.State.DOZE_PULSING_BRIGHT;
 import static com.android.systemui.doze.DozeMachine.State.DOZE_REQUEST_PULSE;
+import static com.android.systemui.doze.DozeMachine.State.DOZE_SUSPEND_TRIGGERS;
 import static com.android.systemui.doze.DozeMachine.State.FINISH;
 import static com.android.systemui.doze.DozeMachine.State.INITIALIZED;
 import static com.android.systemui.doze.DozeMachine.State.UNINITIALIZED;
@@ -39,6 +41,8 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import android.app.UiModeManager;
+import android.content.res.Configuration;
 import android.hardware.display.AmbientDisplayConfiguration;
 import android.testing.AndroidTestingRunner;
 import android.testing.UiThreadTest;
@@ -50,7 +54,6 @@
 import com.android.systemui.dock.DockManager;
 import com.android.systemui.keyguard.WakefulnessLifecycle;
 import com.android.systemui.statusbar.phone.DozeParameters;
-import com.android.systemui.statusbar.policy.BatteryController;
 import com.android.systemui.util.wakelock.WakeLockFake;
 
 import org.junit.Before;
@@ -70,9 +73,12 @@
     private WakefulnessLifecycle mWakefulnessLifecycle;
     @Mock
     private DozeLog mDozeLog;
-    @Mock private DockManager mDockManager;
+    @Mock
+    private DockManager mDockManager;
     @Mock
     private DozeHost mHost;
+    @Mock
+    private UiModeManager mUiModeManager;
     private DozeServiceFake mServiceFake;
     private WakeLockFake mWakeLockFake;
     private AmbientDisplayConfiguration mConfigMock;
@@ -89,7 +95,7 @@
         when(mDockManager.isHidden()).thenReturn(false);
 
         mMachine = new DozeMachine(mServiceFake, mConfigMock, mWakeLockFake,
-                mWakefulnessLifecycle, mock(BatteryController.class), mDozeLog, mDockManager,
+                mWakefulnessLifecycle, mUiModeManager, mDozeLog, mDockManager,
                 mHost, new DozeMachine.Part[]{mPartMock});
     }
 
@@ -462,4 +468,64 @@
 
         assertEquals(Display.STATE_ON, DOZE_REQUEST_PULSE.screenState(dozeParameters));
     }
+
+    @Test
+    public void testTransitionToInitialized_carModeIsEnabled() {
+        when(mUiModeManager.getCurrentModeType()).thenReturn(Configuration.UI_MODE_TYPE_CAR);
+        mMachine.requestState(INITIALIZED);
+
+        verify(mPartMock).transitionTo(UNINITIALIZED, INITIALIZED);
+        verify(mPartMock).transitionTo(INITIALIZED, DOZE_SUSPEND_TRIGGERS);
+        assertEquals(DOZE_SUSPEND_TRIGGERS, mMachine.getState());
+    }
+
+    @Test
+    public void testTransitionToFinish_carModeIsEnabled() {
+        when(mUiModeManager.getCurrentModeType()).thenReturn(Configuration.UI_MODE_TYPE_CAR);
+        mMachine.requestState(INITIALIZED);
+        mMachine.requestState(FINISH);
+
+        assertEquals(FINISH, mMachine.getState());
+    }
+
+    @Test
+    public void testDozeToDozeSuspendTriggers_carModeIsEnabled() {
+        when(mUiModeManager.getCurrentModeType()).thenReturn(Configuration.UI_MODE_TYPE_CAR);
+        mMachine.requestState(INITIALIZED);
+        mMachine.requestState(DOZE);
+
+        assertEquals(DOZE_SUSPEND_TRIGGERS, mMachine.getState());
+    }
+
+    @Test
+    public void testDozeAoDToDozeSuspendTriggers_carModeIsEnabled() {
+        when(mUiModeManager.getCurrentModeType()).thenReturn(Configuration.UI_MODE_TYPE_CAR);
+        mMachine.requestState(INITIALIZED);
+        mMachine.requestState(DOZE_AOD);
+
+        assertEquals(DOZE_SUSPEND_TRIGGERS, mMachine.getState());
+    }
+
+    @Test
+    public void testDozePulsingBrightDozeSuspendTriggers_carModeIsEnabled() {
+        when(mUiModeManager.getCurrentModeType()).thenReturn(Configuration.UI_MODE_TYPE_CAR);
+        mMachine.requestState(INITIALIZED);
+        mMachine.requestState(DOZE_PULSING_BRIGHT);
+
+        assertEquals(DOZE_SUSPEND_TRIGGERS, mMachine.getState());
+    }
+
+    @Test
+    public void testDozeAodDockedDozeSuspendTriggers_carModeIsEnabled() {
+        when(mUiModeManager.getCurrentModeType()).thenReturn(Configuration.UI_MODE_TYPE_CAR);
+        mMachine.requestState(INITIALIZED);
+        mMachine.requestState(DOZE_AOD_DOCKED);
+
+        assertEquals(DOZE_SUSPEND_TRIGGERS, mMachine.getState());
+    }
+
+    @Test
+    public void testDozeSuppressTriggers_screenState() {
+        assertEquals(Display.STATE_OFF, DOZE_SUSPEND_TRIGGERS.screenState(null));
+    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java
index 2e7b88d..03827da 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java
@@ -24,6 +24,7 @@
 import static com.android.systemui.doze.DozeMachine.State.DOZE_PULSE_DONE;
 import static com.android.systemui.doze.DozeMachine.State.DOZE_PULSING;
 import static com.android.systemui.doze.DozeMachine.State.DOZE_REQUEST_PULSE;
+import static com.android.systemui.doze.DozeMachine.State.DOZE_SUSPEND_TRIGGERS;
 import static com.android.systemui.doze.DozeMachine.State.FINISH;
 import static com.android.systemui.doze.DozeMachine.State.INITIALIZED;
 import static com.android.systemui.doze.DozeMachine.State.UNINITIALIZED;
@@ -182,6 +183,21 @@
     }
 
     @Test
+    public void dozeSuspendTriggers_doesNotUseLightSensor() {
+        // GIVEN the device is DOZE and the display state changes to ON
+        mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
+        mScreen.transitionTo(INITIALIZED, DOZE_SUSPEND_TRIGGERS);
+        waitForSensorManager();
+
+        // WHEN new sensor event sent
+        mSensor.sendSensorEvent(3);
+
+        // THEN brightness is NOT changed, it's set to the default brightness
+        assertNotSame(3, mServiceFake.screenBrightness);
+        assertEquals(DEFAULT_BRIGHTNESS, mServiceFake.screenBrightness);
+    }
+
+    @Test
     public void aod_usesLightSensor() {
         // GIVEN the device is DOZE_AOD and the display state changes to ON
         mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSuppressorTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSuppressorTest.java
index aa0a909..0f29dcd 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSuppressorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSuppressorTest.java
@@ -16,19 +16,26 @@
 
 package com.android.systemui.doze;
 
+import static android.app.UiModeManager.ACTION_ENTER_CAR_MODE;
+import static android.app.UiModeManager.ACTION_EXIT_CAR_MODE;
+
 import static com.android.systemui.doze.DozeMachine.State.DOZE;
 import static com.android.systemui.doze.DozeMachine.State.DOZE_AOD;
+import static com.android.systemui.doze.DozeMachine.State.DOZE_SUSPEND_TRIGGERS;
 import static com.android.systemui.doze.DozeMachine.State.FINISH;
 import static com.android.systemui.doze.DozeMachine.State.INITIALIZED;
 import static com.android.systemui.doze.DozeMachine.State.UNINITIALIZED;
 
-import static org.mockito.Matchers.anyObject;
+import static org.hamcrest.Matchers.containsInAnyOrder;
+import static org.junit.Assert.assertEquals;
 import static org.mockito.Mockito.anyInt;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import android.app.UiModeManager;
 import android.content.BroadcastReceiver;
+import android.content.Intent;
+import android.content.IntentFilter;
 import android.content.res.Configuration;
 import android.hardware.display.AmbientDisplayConfiguration;
 import android.testing.AndroidTestingRunner;
@@ -77,7 +84,10 @@
 
     @Captor
     private ArgumentCaptor<BroadcastReceiver> mBroadcastReceiverCaptor;
+    @Captor
+    private ArgumentCaptor<IntentFilter> mIntentFilterCaptor;
     private BroadcastReceiver mBroadcastReceiver;
+    private IntentFilter mIntentFilter;
 
     @Captor
     private ArgumentCaptor<DozeHost.Callback> mDozeHostCaptor;
@@ -122,15 +132,59 @@
     }
 
     @Test
-    public void testEndDoze_carMode() {
+    public void testSuspendTriggersDoze_carMode() {
         // GIVEN car mode
         when(mUiModeManager.getCurrentModeType()).thenReturn(Configuration.UI_MODE_TYPE_CAR);
 
         // WHEN dozing begins
         mDozeSuppressor.transitionTo(UNINITIALIZED, INITIALIZED);
 
-        // THEN doze immediately ends
-        verify(mDozeMachine).requestState(FINISH);
+        // THEN doze continues with all doze triggers disabled.
+        verify(mDozeMachine).requestState(DOZE_SUSPEND_TRIGGERS);
+    }
+
+    @Test
+    public void testSuspendTriggersDoze_enterCarMode() {
+        // GIVEN currently dozing
+        mDozeSuppressor.transitionTo(UNINITIALIZED, INITIALIZED);
+        captureBroadcastReceiver();
+        mDozeSuppressor.transitionTo(INITIALIZED, DOZE);
+
+        // WHEN car mode entered
+        mBroadcastReceiver.onReceive(null, new Intent(ACTION_ENTER_CAR_MODE));
+
+        // THEN doze continues with all doze triggers disabled.
+        verify(mDozeMachine).requestState(DOZE_SUSPEND_TRIGGERS);
+    }
+
+    @Test
+    public void testDozeResume_exitCarMode() {
+        // GIVEN currently suspended, with AOD not enabled
+        when(mConfig.alwaysOnEnabled(anyInt())).thenReturn(false);
+        mDozeSuppressor.transitionTo(UNINITIALIZED, INITIALIZED);
+        captureBroadcastReceiver();
+        mDozeSuppressor.transitionTo(INITIALIZED, DOZE_SUSPEND_TRIGGERS);
+
+        // WHEN exiting car mode
+        mBroadcastReceiver.onReceive(null, new Intent(ACTION_EXIT_CAR_MODE));
+
+        // THEN doze is resumed
+        verify(mDozeMachine).requestState(DOZE);
+    }
+
+    @Test
+    public void testDozeAoDResume_exitCarMode() {
+        // GIVEN currently suspended, with AOD not enabled
+        when(mConfig.alwaysOnEnabled(anyInt())).thenReturn(true);
+        mDozeSuppressor.transitionTo(UNINITIALIZED, INITIALIZED);
+        captureBroadcastReceiver();
+        mDozeSuppressor.transitionTo(INITIALIZED, DOZE_SUSPEND_TRIGGERS);
+
+        // WHEN exiting car mode
+        mBroadcastReceiver.onReceive(null, new Intent(ACTION_EXIT_CAR_MODE));
+
+        // THEN doze AOD is resumed
+        verify(mDozeMachine).requestState(DOZE_AOD);
     }
 
     @Test
@@ -225,7 +279,11 @@
 
     private void captureBroadcastReceiver() {
         verify(mBroadcastDispatcher).registerReceiver(mBroadcastReceiverCaptor.capture(),
-                anyObject());
+                mIntentFilterCaptor.capture());
         mBroadcastReceiver = mBroadcastReceiverCaptor.getValue();
+        mIntentFilter = mIntentFilterCaptor.getValue();
+        assertEquals(2, mIntentFilter.countActions());
+        org.hamcrest.MatcherAssert.assertThat(() -> mIntentFilter.actionsIterator(),
+                containsInAnyOrder(ACTION_ENTER_CAR_MODE, ACTION_EXIT_CAR_MODE));
     }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java
index 4eeb4ac..01a1a37 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java
@@ -17,6 +17,8 @@
 package com.android.systemui.doze;
 
 import static com.android.systemui.doze.DozeMachine.State.DOZE_AOD;
+import static com.android.systemui.doze.DozeMachine.State.INITIALIZED;
+import static com.android.systemui.doze.DozeMachine.State.UNINITIALIZED;
 
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyFloat;
@@ -133,7 +135,7 @@
         ArgumentCaptor<DozeHost.Callback> captor = ArgumentCaptor.forClass(DozeHost.Callback.class);
         doAnswer(invocation -> null).when(mHost).addCallback(captor.capture());
 
-        mTriggers.transitionTo(DozeMachine.State.UNINITIALIZED, DozeMachine.State.INITIALIZED);
+        mTriggers.transitionTo(UNINITIALIZED, DozeMachine.State.INITIALIZED);
         mTriggers.transitionTo(DozeMachine.State.INITIALIZED, DozeMachine.State.DOZE);
         clearInvocations(mMachine);
 
@@ -192,8 +194,21 @@
     }
 
     @Test
+    public void transitionToDozeSuspendTriggers_disablesAllCallbacks() {
+        mTriggers.transitionTo(UNINITIALIZED, INITIALIZED);
+        when(mMachine.getState()).thenReturn(DozeMachine.State.DOZE_SUSPEND_TRIGGERS);
+
+        mTriggers.transitionTo(DozeMachine.State.INITIALIZED,
+                DozeMachine.State.DOZE_SUSPEND_TRIGGERS);
+
+        verify(mDockManager).removeListener(any());
+        verify(mBroadcastDispatcher).unregisterReceiver(any());
+        verify(mHost).removeCallback(any());
+    }
+
+    @Test
     public void testDockEventListener_registerAndUnregister() {
-        mTriggers.transitionTo(DozeMachine.State.UNINITIALIZED, DozeMachine.State.INITIALIZED);
+        mTriggers.transitionTo(UNINITIALIZED, DozeMachine.State.INITIALIZED);
         verify(mDockManager).addListener(any());
 
         mTriggers.transitionTo(DozeMachine.State.DOZE, DozeMachine.State.FINISH);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeUiTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeUiTest.java
index e5a75e2..49cdfa7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeUiTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeUiTest.java
@@ -86,7 +86,7 @@
         mHandler = mHandlerThread.getThreadHandler();
 
         mDozeUi = new DozeUi(mContext, mAlarmManager, mWakeLock, mHost, mHandler,
-                mDozeParameters, mKeyguardUpdateMonitor, mStatusBarStateController, mDozeLog);
+                mDozeParameters, mStatusBarStateController, mDozeLog);
         mDozeUi.setDozeMachine(mMachine);
     }
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayNotificationCountProviderTest.java b/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayNotificationCountProviderTest.java
index b7de6c1..25d4c47 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayNotificationCountProviderTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayNotificationCountProviderTest.java
@@ -16,6 +16,7 @@
 
 package com.android.systemui.dreams;
 
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -48,6 +49,8 @@
     @Mock
     StatusBarNotification mNotification2;
     @Mock
+    StatusBarNotification mNotification3;
+    @Mock
     NotificationListenerService.RankingMap mRankingMap;
 
     private DreamOverlayNotificationCountProvider mProvider;
@@ -58,6 +61,8 @@
 
         when(mNotification1.getKey()).thenReturn("key1");
         when(mNotification2.getKey()).thenReturn("key2");
+        when(mNotification3.getKey()).thenReturn("key3");
+        when(mNotification3.isOngoing()).thenReturn(true);
 
         final StatusBarNotification[] notifications = {mNotification1};
         when(mNotificationListener.getActiveNotifications()).thenReturn(notifications);
@@ -83,4 +88,13 @@
         handlerArgumentCaptor.getValue().onNotificationRemoved(mNotification1, mRankingMap);
         verify(mCallback).onNotificationCountChanged(0);
     }
+
+    @Test
+    public void testPostingOngoingNotificationDoesNotCallCallbackWithNotificationCount() {
+        final ArgumentCaptor<NotificationHandler> handlerArgumentCaptor =
+                ArgumentCaptor.forClass(NotificationHandler.class);
+        verify(mNotificationListener).addNotificationHandler(handlerArgumentCaptor.capture());
+        handlerArgumentCaptor.getValue().onNotificationPosted(mNotification3, mRankingMap);
+        verify(mCallback, never()).onNotificationCountChanged(2);
+    }
 }
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 fb64c7b..2adf285 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayStateControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayStateControllerTest.java
@@ -207,4 +207,15 @@
             assertThat(complications.contains(weatherComplication)).isFalse();
         }
     }
+
+    @Test
+    public void testComplicationWithNoTypeNotFiltered() {
+        final Complication complication = Mockito.mock(Complication.class);
+        final DreamOverlayStateController stateController =
+                new DreamOverlayStateController(mExecutor);
+        stateController.addComplication(complication);
+        mExecutor.runAllReady();
+        assertThat(stateController.getComplications(true).contains(complication))
+                .isTrue();
+    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayStatusBarViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayStatusBarViewControllerTest.java
index 3c28d48..60e5a94 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayStatusBarViewControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayStatusBarViewControllerTest.java
@@ -57,6 +57,7 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
+import java.util.Optional;
 import java.util.concurrent.Executor;
 
 @SmallTest
@@ -115,7 +116,7 @@
                 mNextAlarmController,
                 mDateFormatUtil,
                 mSensorPrivacyController,
-                mDreamOverlayNotificationCountProvider,
+                Optional.of(mDreamOverlayNotificationCountProvider),
                 mZenModeController,
                 mStatusBarWindowStateController);
     }
@@ -183,6 +184,28 @@
     }
 
     @Test
+    public void testOnViewAttachedShowsMicIconWhenDisabled() {
+        when(mSensorPrivacyController.isSensorBlocked(SensorPrivacyManager.Sensors.MICROPHONE))
+                .thenReturn(true);
+        when(mSensorPrivacyController.isSensorBlocked(SensorPrivacyManager.Sensors.CAMERA))
+                .thenReturn(false);
+        mController.onViewAttached();
+        verify(mView).showIcon(
+                DreamOverlayStatusBarView.STATUS_ICON_MIC_DISABLED, true, null);
+    }
+
+    @Test
+    public void testOnViewAttachedShowsCameraIconWhenDisabled() {
+        when(mSensorPrivacyController.isSensorBlocked(SensorPrivacyManager.Sensors.MICROPHONE))
+                .thenReturn(false);
+        when(mSensorPrivacyController.isSensorBlocked(SensorPrivacyManager.Sensors.CAMERA))
+                .thenReturn(true);
+        mController.onViewAttached();
+        verify(mView).showIcon(
+                DreamOverlayStatusBarView.STATUS_ICON_CAMERA_DISABLED, true, null);
+    }
+
+    @Test
     public void testOnViewAttachedShowsMicCameraIconWhenDisabled() {
         when(mSensorPrivacyController.isSensorBlocked(SensorPrivacyManager.Sensors.MICROPHONE))
                 .thenReturn(true);
@@ -194,17 +217,6 @@
     }
 
     @Test
-    public void testOnViewAttachedHidesMicCameraIconWhenEnabled() {
-        when(mSensorPrivacyController.isSensorBlocked(SensorPrivacyManager.Sensors.MICROPHONE))
-                .thenReturn(false);
-        when(mSensorPrivacyController.isSensorBlocked(SensorPrivacyManager.Sensors.CAMERA))
-                .thenReturn(false);
-        mController.onViewAttached();
-        verify(mView).showIcon(
-                DreamOverlayStatusBarView.STATUS_ICON_MIC_CAMERA_DISABLED, false, null);
-    }
-
-    @Test
     public void testOnViewAttachedShowsNotificationsIconWhenNotificationsExist() {
         mController.onViewAttached();
 
@@ -231,6 +243,26 @@
     }
 
     @Test
+    public void testNotificationsIconNotShownWhenCountProviderAbsent() {
+        DreamOverlayStatusBarViewController controller = new DreamOverlayStatusBarViewController(
+                mView,
+                mResources,
+                mMainExecutor,
+                mConnectivityManager,
+                mTouchSession,
+                mAlarmManager,
+                mNextAlarmController,
+                mDateFormatUtil,
+                mSensorPrivacyController,
+                Optional.empty(),
+                mZenModeController,
+                mStatusBarWindowStateController);
+        controller.onViewAttached();
+        verify(mView, never()).showIcon(
+                eq(DreamOverlayStatusBarView.STATUS_ICON_NOTIFICATIONS), eq(true), any());
+    }
+
+    @Test
     public void testOnViewAttachedShowsPriorityModeIconWhenEnabled() {
         when(mZenModeController.getZen()).thenReturn(
                 Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS);
@@ -365,24 +397,6 @@
     }
 
     @Test
-    public void testMicCameraIconHiddenWhenSensorsNotBlocked() {
-        when(mSensorPrivacyController.isSensorBlocked(SensorPrivacyManager.Sensors.MICROPHONE))
-                .thenReturn(true).thenReturn(false);
-        when(mSensorPrivacyController.isSensorBlocked(SensorPrivacyManager.Sensors.CAMERA))
-                .thenReturn(true).thenReturn(false);
-        mController.onViewAttached();
-
-        final ArgumentCaptor<IndividualSensorPrivacyController.Callback> callbackCapture =
-                ArgumentCaptor.forClass(IndividualSensorPrivacyController.Callback.class);
-        verify(mSensorPrivacyController).addCallback(callbackCapture.capture());
-        callbackCapture.getValue().onSensorBlockedChanged(
-                SensorPrivacyManager.Sensors.MICROPHONE, false);
-
-        verify(mView).showIcon(
-                DreamOverlayStatusBarView.STATUS_ICON_MIC_CAMERA_DISABLED, false, null);
-    }
-
-    @Test
     public void testPriorityModeIconShownWhenZenModeEnabled() {
         mController.onViewAttached();
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/SmartSpaceComplicationTest.java b/packages/SystemUI/tests/src/com/android/systemui/dreams/SmartSpaceComplicationTest.java
deleted file mode 100644
index ed1cf69..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/SmartSpaceComplicationTest.java
+++ /dev/null
@@ -1,93 +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.systemui.dreams;
-
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.app.smartspace.SmartspaceTarget;
-import android.content.Context;
-import android.testing.AndroidTestingRunner;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.systemui.SysuiTestCase;
-import com.android.systemui.dreams.smartspace.DreamsSmartspaceController;
-import com.android.systemui.plugins.BcSmartspaceDataPlugin;
-
-import org.junit.Before;
-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 java.util.Arrays;
-
-@SmallTest
-@RunWith(AndroidTestingRunner.class)
-public class SmartSpaceComplicationTest extends SysuiTestCase {
-    @Mock
-    private Context mContext;
-
-    @Mock
-    private DreamsSmartspaceController mSmartspaceController;
-
-    @Mock
-    private DreamOverlayStateController mDreamOverlayStateController;
-
-    @Mock
-    private SmartSpaceComplication mComplication;
-
-    @Before
-    public void setup() {
-        MockitoAnnotations.initMocks(this);
-    }
-
-    /**
-     * Ensures {@link SmartSpaceComplication} is only registered when it is available.
-     */
-    @Test
-    public void testAvailability() {
-
-        final SmartSpaceComplication.Registrant registrant = new SmartSpaceComplication.Registrant(
-                mContext,
-                mDreamOverlayStateController,
-                mComplication,
-                mSmartspaceController);
-        registrant.start();
-        verify(mDreamOverlayStateController, never()).addComplication(eq(mComplication));
-
-
-        final ArgumentCaptor<DreamOverlayStateController.Callback> dreamCallbackCaptor =
-                ArgumentCaptor.forClass(DreamOverlayStateController.Callback.class);
-        verify(mDreamOverlayStateController).addCallback(dreamCallbackCaptor.capture());
-
-        when(mDreamOverlayStateController.isOverlayActive()).thenReturn(true);
-        dreamCallbackCaptor.getValue().onStateChanged();
-
-        final ArgumentCaptor<BcSmartspaceDataPlugin.SmartspaceTargetListener> listenerCaptor =
-                ArgumentCaptor.forClass(BcSmartspaceDataPlugin.SmartspaceTargetListener.class);
-        verify(mSmartspaceController).addListener(listenerCaptor.capture());
-
-        final SmartspaceTarget target = Mockito.mock(SmartspaceTarget.class);
-        listenerCaptor.getValue().onSmartspaceTargetsUpdated(Arrays.asList(target));
-        verify(mDreamOverlayStateController).addComplication(eq(mComplication));
-    }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationUtilsTest.java b/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationUtilsTest.java
index 365c529..e099c92 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationUtilsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/ComplicationUtilsTest.java
@@ -19,6 +19,8 @@
 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_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;
@@ -57,6 +59,10 @@
                 .isEqualTo(COMPLICATION_TYPE_AIR_QUALITY);
         assertThat(convertComplicationType(DreamBackend.COMPLICATION_TYPE_CAST_INFO))
                 .isEqualTo(COMPLICATION_TYPE_CAST_INFO);
+        assertThat(convertComplicationType(DreamBackend.COMPLICATION_TYPE_HOME_CONTROLS))
+                .isEqualTo(COMPLICATION_TYPE_HOME_CONTROLS);
+        assertThat(convertComplicationType(DreamBackend.COMPLICATION_TYPE_SMARTSPACE))
+                .isEqualTo(COMPLICATION_TYPE_SMARTSPACE);
     }
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/DreamClockDateComplicationTest.java b/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/DreamClockDateComplicationTest.java
deleted file mode 100644
index 86aa14d..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/DreamClockDateComplicationTest.java
+++ /dev/null
@@ -1,128 +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.systemui.dreams.complication;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.junit.Assert.assertEquals;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.testing.AndroidTestingRunner;
-import android.view.View;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.systemui.SysuiTestCase;
-import com.android.systemui.dreams.DreamOverlayStateController;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-import javax.inject.Provider;
-
-@SmallTest
-@RunWith(AndroidTestingRunner.class)
-public class DreamClockDateComplicationTest extends SysuiTestCase {
-    @SuppressWarnings("HidingField")
-    @Mock
-    private Context mContext;
-
-    @Mock
-    private DreamOverlayStateController mDreamOverlayStateController;
-
-    @Mock
-    private DreamClockDateComplication mComplication;
-
-    @Mock
-    private Provider<DreamClockDateComplication.DreamClockDateViewHolder>
-            mDreamClockDateViewHolderProvider;
-
-    @Mock
-    private DreamClockDateComplication.DreamClockDateViewHolder
-            mDreamClockDateViewHolder;
-
-    @Mock
-    private ComplicationViewModel mComplicationViewModel;
-
-    @Mock
-    private View mView;
-
-    @Mock
-    private ComplicationLayoutParams mLayoutParams;
-
-    @Before
-    public void setup() {
-        MockitoAnnotations.initMocks(this);
-        when(mDreamClockDateViewHolderProvider.get()).thenReturn(mDreamClockDateViewHolder);
-
-    }
-
-    /**
-     * Ensures {@link DreamClockDateComplication} is registered.
-     */
-    @Test
-    public void testComplicationAdded() {
-        final DreamClockDateComplication.Registrant registrant =
-                new DreamClockDateComplication.Registrant(
-                        mContext,
-                        mDreamOverlayStateController,
-                        mComplication);
-        registrant.start();
-        verify(mDreamOverlayStateController).addComplication(eq(mComplication));
-    }
-
-    /**
-     * Verifies {@link DreamClockDateComplication} has the required type.
-     */
-    @Test
-    public void testComplicationRequiredTypeAvailability() {
-        final DreamClockDateComplication complication =
-                new DreamClockDateComplication(mDreamClockDateViewHolderProvider);
-        assertEquals(Complication.COMPLICATION_TYPE_DATE,
-                complication.getRequiredTypeAvailability());
-    }
-
-    /**
-     * Verifies {@link DreamClockDateComplication.DreamClockDateViewHolder} is obtainable from its
-     * provider when the complication creates view.
-     */
-    @Test
-    public void testComplicationViewHolderProviderOnCreateView() {
-        final DreamClockDateComplication complication =
-                new DreamClockDateComplication(mDreamClockDateViewHolderProvider);
-        final Complication.ViewHolder viewHolder = complication.createView(mComplicationViewModel);
-        verify(mDreamClockDateViewHolderProvider).get();
-        assertThat(viewHolder).isEqualTo(mDreamClockDateViewHolder);
-    }
-
-    /**
-     * Verifies {@link DreamClockDateComplication.DreamClockDateViewHolder} has the intended view
-     * and layout parameters from constructor.
-     */
-    @Test
-    public void testComplicationViewHolderContentAccessors() {
-        final DreamClockDateComplication.DreamClockDateViewHolder viewHolder =
-                new DreamClockDateComplication.DreamClockDateViewHolder(mView, mLayoutParams);
-        assertThat(viewHolder.getView()).isEqualTo(mView);
-        assertThat(viewHolder.getLayoutParams()).isEqualTo(mLayoutParams);
-    }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/DreamHomeControlsComplicationTest.java b/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/DreamHomeControlsComplicationTest.java
new file mode 100644
index 0000000..04ff7ae
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/DreamHomeControlsComplicationTest.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.dreams.complication;
+
+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;
+
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.testing.AndroidTestingRunner;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.controls.ControlsServiceInfo;
+import com.android.systemui.controls.controller.ControlsController;
+import com.android.systemui.controls.controller.StructureInfo;
+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 org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.List;
+import java.util.Optional;
+
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+public class DreamHomeControlsComplicationTest extends SysuiTestCase {
+    @Mock
+    private DreamHomeControlsComplication mComplication;
+
+    @Mock
+    private DreamOverlayStateController mDreamOverlayStateController;
+
+    @Mock
+    private Context mContext;
+
+    @Mock
+    private ControlsComponent mControlsComponent;
+
+    @Mock
+    private ControlsController mControlsController;
+
+    @Mock
+    private ControlsListingController mControlsListingController;
+
+    @Mock
+    private DreamHomeControlsComplicationComponent.Factory mComponentFactory;
+
+    @Captor
+    private ArgumentCaptor<ControlsListingController.ControlsListingCallback> mCallbackCaptor;
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+
+        when(mContext.getString(anyInt())).thenReturn("");
+        when(mControlsComponent.getControlsController()).thenReturn(
+                Optional.of(mControlsController));
+        when(mControlsComponent.getControlsListingController()).thenReturn(
+                Optional.of(mControlsListingController));
+        when(mControlsComponent.getVisibility()).thenReturn(AVAILABLE);
+    }
+
+    @Test
+    public void complicationType() {
+        final DreamHomeControlsComplication complication =
+                new DreamHomeControlsComplication(mComponentFactory);
+        assertThat(complication.getRequiredTypeAvailability()).isEqualTo(
+                COMPLICATION_TYPE_HOME_CONTROLS);
+    }
+
+    @Test
+    public void complicationAvailability_serviceNotAvailable_noFavorites_doNotAddComplication() {
+        final DreamHomeControlsComplication.Registrant registrant =
+                new DreamHomeControlsComplication.Registrant(mContext, mComplication,
+                        mDreamOverlayStateController, mControlsComponent);
+        registrant.start();
+
+        setHaveFavorites(false);
+        setServiceAvailable(false);
+
+        verify(mDreamOverlayStateController, never()).addComplication(mComplication);
+    }
+
+    @Test
+    public void complicationAvailability_serviceAvailable_noFavorites_doNotAddComplication() {
+        final DreamHomeControlsComplication.Registrant registrant =
+                new DreamHomeControlsComplication.Registrant(mContext, mComplication,
+                        mDreamOverlayStateController, mControlsComponent);
+        registrant.start();
+
+        setHaveFavorites(false);
+        setServiceAvailable(true);
+
+        verify(mDreamOverlayStateController, never()).addComplication(mComplication);
+    }
+
+    @Test
+    public void complicationAvailability_serviceNotAvailable_haveFavorites_doNotAddComplication() {
+        final DreamHomeControlsComplication.Registrant registrant =
+                new DreamHomeControlsComplication.Registrant(mContext, mComplication,
+                        mDreamOverlayStateController, mControlsComponent);
+        registrant.start();
+
+        setHaveFavorites(true);
+        setServiceAvailable(false);
+
+        verify(mDreamOverlayStateController, never()).addComplication(mComplication);
+    }
+
+    @Test
+    public void complicationAvailability_serviceAvailable_haveFavorites_addComplication() {
+        final DreamHomeControlsComplication.Registrant registrant =
+                new DreamHomeControlsComplication.Registrant(mContext, mComplication,
+                        mDreamOverlayStateController, mControlsComponent);
+        registrant.start();
+
+        setHaveFavorites(true);
+        setServiceAvailable(true);
+
+        verify(mDreamOverlayStateController).addComplication(mComplication);
+    }
+
+    private void setHaveFavorites(boolean value) {
+        final List<StructureInfo> favorites = mock(List.class);
+        when(favorites.isEmpty()).thenReturn(!value);
+        when(mControlsController.getFavorites()).thenReturn(favorites);
+    }
+
+    private void setServiceAvailable(boolean value) {
+        final List<ControlsServiceInfo> serviceInfos = mock(List.class);
+        when(serviceInfos.isEmpty()).thenReturn(!value);
+        triggerControlsListingCallback(serviceInfos);
+    }
+
+    private void triggerControlsListingCallback(List<ControlsServiceInfo> serviceInfos) {
+        verify(mControlsListingController).addCallback(mCallbackCaptor.capture());
+        mCallbackCaptor.getValue().onServicesUpdated(serviceInfos);
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/DreamWeatherComplicationTest.java b/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/DreamWeatherComplicationTest.java
deleted file mode 100644
index 151742a..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/DreamWeatherComplicationTest.java
+++ /dev/null
@@ -1,79 +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.systemui.dreams.complication;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.testing.AndroidTestingRunner;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.systemui.SysuiTestCase;
-import com.android.systemui.dreams.DreamOverlayStateController;
-import com.android.systemui.statusbar.lockscreen.LockscreenSmartspaceController;
-
-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)
-public class DreamWeatherComplicationTest extends SysuiTestCase {
-    @SuppressWarnings("HidingField")
-    @Mock
-    private Context mContext;
-
-    @Mock
-    private LockscreenSmartspaceController mSmartspaceController;
-
-    @Mock
-    private DreamOverlayStateController mDreamOverlayStateController;
-
-    @Mock
-    private DreamWeatherComplication mComplication;
-
-    @Before
-    public void setup() {
-        MockitoAnnotations.initMocks(this);
-    }
-
-    /**
-     * Ensures {@link DreamWeatherComplication} is only registered when it is available.
-     */
-    @Test
-    public void testComplicationAvailability() {
-        when(mSmartspaceController.isEnabled()).thenReturn(false);
-        final DreamWeatherComplication.Registrant registrant =
-                new DreamWeatherComplication.Registrant(
-                        mContext,
-                        mSmartspaceController,
-                        mDreamOverlayStateController,
-                        mComplication);
-        registrant.start();
-        verify(mDreamOverlayStateController, never()).addComplication(any());
-
-        when(mSmartspaceController.isEnabled()).thenReturn(true);
-        registrant.start();
-        verify(mDreamOverlayStateController).addComplication(eq(mComplication));
-    }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/SmartSpaceComplicationTest.java b/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/SmartSpaceComplicationTest.java
new file mode 100644
index 0000000..7d54758
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/dreams/complication/SmartSpaceComplicationTest.java
@@ -0,0 +1,192 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.dreams.complication;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.smartspace.SmartspaceTarget;
+import android.content.Context;
+import android.testing.AndroidTestingRunner;
+import android.view.View;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.dreams.DreamOverlayStateController;
+import com.android.systemui.dreams.smartspace.DreamSmartspaceController;
+import com.android.systemui.plugins.BcSmartspaceDataPlugin;
+
+import org.junit.Before;
+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 java.util.Arrays;
+
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+public class SmartSpaceComplicationTest extends SysuiTestCase {
+    @Mock
+    private Context mContext;
+
+    @Mock
+    private DreamSmartspaceController mSmartspaceController;
+
+    @Mock
+    private DreamOverlayStateController mDreamOverlayStateController;
+
+    @Mock
+    private SmartSpaceComplication mComplication;
+
+    @Mock
+    private ComplicationViewModel mComplicationViewModel;
+
+    @Mock
+    private View mBcSmartspaceView;
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+    }
+
+    /**
+     * Ensures {@link SmartSpaceComplication} isn't registered right away on start.
+     */
+    @Test
+    public void testRegistrantStart_doesNotAddComplication() {
+        final SmartSpaceComplication.Registrant registrant = getRegistrant();
+        registrant.start();
+        verify(mDreamOverlayStateController, never()).addComplication(eq(mComplication));
+    }
+
+    private SmartSpaceComplication.Registrant getRegistrant() {
+        return new SmartSpaceComplication.Registrant(
+                mContext,
+                mDreamOverlayStateController,
+                mComplication,
+                mSmartspaceController);
+    }
+
+    @Test
+    public void testOverlayActive_addsTargetListener() {
+        final SmartSpaceComplication.Registrant registrant = getRegistrant();
+        registrant.start();
+
+        final ArgumentCaptor<DreamOverlayStateController.Callback> dreamCallbackCaptor =
+                ArgumentCaptor.forClass(DreamOverlayStateController.Callback.class);
+        verify(mDreamOverlayStateController).addCallback(dreamCallbackCaptor.capture());
+
+        when(mDreamOverlayStateController.isOverlayActive()).thenReturn(true);
+        dreamCallbackCaptor.getValue().onStateChanged();
+
+        // Test
+        final ArgumentCaptor<BcSmartspaceDataPlugin.SmartspaceTargetListener> listenerCaptor =
+                ArgumentCaptor.forClass(BcSmartspaceDataPlugin.SmartspaceTargetListener.class);
+        verify(mSmartspaceController).addListener(listenerCaptor.capture());
+    }
+
+    @Test
+    public void testOverlayActive_targetsNonEmpty_addsComplication() {
+        final SmartSpaceComplication.Registrant registrant = getRegistrant();
+        registrant.start();
+
+        final ArgumentCaptor<DreamOverlayStateController.Callback> dreamCallbackCaptor =
+                ArgumentCaptor.forClass(DreamOverlayStateController.Callback.class);
+        verify(mDreamOverlayStateController).addCallback(dreamCallbackCaptor.capture());
+
+        when(mDreamOverlayStateController.isOverlayActive()).thenReturn(true);
+        dreamCallbackCaptor.getValue().onStateChanged();
+
+        final ArgumentCaptor<BcSmartspaceDataPlugin.SmartspaceTargetListener> listenerCaptor =
+                ArgumentCaptor.forClass(BcSmartspaceDataPlugin.SmartspaceTargetListener.class);
+        verify(mSmartspaceController).addListener(listenerCaptor.capture());
+
+        // Test
+        final SmartspaceTarget target = Mockito.mock(SmartspaceTarget.class);
+        listenerCaptor.getValue().onSmartspaceTargetsUpdated(Arrays.asList(target));
+        verify(mDreamOverlayStateController).addComplication(eq(mComplication));
+    }
+
+    @Test
+    public void testOverlayActive_targetsEmpty_removesComplication() {
+        final SmartSpaceComplication.Registrant registrant = getRegistrant();
+        registrant.start();
+
+        final ArgumentCaptor<DreamOverlayStateController.Callback> dreamCallbackCaptor =
+                ArgumentCaptor.forClass(DreamOverlayStateController.Callback.class);
+        verify(mDreamOverlayStateController).addCallback(dreamCallbackCaptor.capture());
+
+        when(mDreamOverlayStateController.isOverlayActive()).thenReturn(true);
+        dreamCallbackCaptor.getValue().onStateChanged();
+
+        final ArgumentCaptor<BcSmartspaceDataPlugin.SmartspaceTargetListener> listenerCaptor =
+                ArgumentCaptor.forClass(BcSmartspaceDataPlugin.SmartspaceTargetListener.class);
+        verify(mSmartspaceController).addListener(listenerCaptor.capture());
+
+        final SmartspaceTarget target = Mockito.mock(SmartspaceTarget.class);
+        listenerCaptor.getValue().onSmartspaceTargetsUpdated(Arrays.asList(target));
+        verify(mDreamOverlayStateController).addComplication(eq(mComplication));
+
+        // Test
+        listenerCaptor.getValue().onSmartspaceTargetsUpdated(Arrays.asList());
+        verify(mDreamOverlayStateController).removeComplication(eq(mComplication));
+    }
+
+    @Test
+    public void testOverlayInActive_removesTargetListener_removesComplication() {
+        final SmartSpaceComplication.Registrant registrant = getRegistrant();
+        registrant.start();
+
+        final ArgumentCaptor<DreamOverlayStateController.Callback> dreamCallbackCaptor =
+                ArgumentCaptor.forClass(DreamOverlayStateController.Callback.class);
+        verify(mDreamOverlayStateController).addCallback(dreamCallbackCaptor.capture());
+
+        when(mDreamOverlayStateController.isOverlayActive()).thenReturn(true);
+        dreamCallbackCaptor.getValue().onStateChanged();
+
+        final ArgumentCaptor<BcSmartspaceDataPlugin.SmartspaceTargetListener> listenerCaptor =
+                ArgumentCaptor.forClass(BcSmartspaceDataPlugin.SmartspaceTargetListener.class);
+        verify(mSmartspaceController).addListener(listenerCaptor.capture());
+
+        final SmartspaceTarget target = Mockito.mock(SmartspaceTarget.class);
+        listenerCaptor.getValue().onSmartspaceTargetsUpdated(Arrays.asList(target));
+        verify(mDreamOverlayStateController).addComplication(eq(mComplication));
+
+        // Test
+        when(mDreamOverlayStateController.isOverlayActive()).thenReturn(false);
+        dreamCallbackCaptor.getValue().onStateChanged();
+        verify(mSmartspaceController).removeListener(listenerCaptor.getValue());
+        verify(mDreamOverlayStateController).removeComplication(eq(mComplication));
+    }
+
+    @Test
+    public void testGetView_reusesSameView() {
+        final Complication.ViewHolder viewHolder =
+                new SmartSpaceComplication.SmartSpaceComplicationViewHolder(getContext(),
+                        mSmartspaceController, mock(ComplicationLayoutParams.class));
+        when(mSmartspaceController.buildAndConnectView(any())).thenReturn(mBcSmartspaceView);
+        assertEquals(viewHolder.getView(), viewHolder.getView());
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/touch/BouncerSwipeTouchHandlerTest.java b/packages/SystemUI/tests/src/com/android/systemui/dreams/touch/BouncerSwipeTouchHandlerTest.java
index 89c82fb..c3fca29 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/touch/BouncerSwipeTouchHandlerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/dreams/touch/BouncerSwipeTouchHandlerTest.java
@@ -422,7 +422,29 @@
         verify(mUiEventLogger).log(BouncerSwipeTouchHandler.DreamEvent.DREAM_BOUNCER_FULLY_VISIBLE);
     }
 
+    /**
+     * Ensures {@link CentralSurfaces}
+     */
+    @Test
+    public void testInformBouncerShowingOnExpand() {
+        swipeToPosition(1f, Direction.UP, 0);
+    }
+
+    /**
+     * Ensures {@link CentralSurfaces}
+     */
+    @Test
+    public void testInformBouncerHidingOnCollapse() {
+        // Must swipe up to set initial state.
+        swipeToPosition(1f, Direction.UP, 0);
+        Mockito.clearInvocations(mCentralSurfaces);
+
+        swipeToPosition(0f, Direction.DOWN, 0);
+    }
+
+
     private void swipeToPosition(float percent, Direction direction, float velocityY) {
+        Mockito.clearInvocations(mTouchSession);
         mTouchHandler.onSessionStart(mTouchSession);
         ArgumentCaptor<GestureDetector.OnGestureListener> gestureListenerCaptor =
                 ArgumentCaptor.forClass(GestureDetector.OnGestureListener.class);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/touch/HideComplicationTouchHandlerTest.java b/packages/SystemUI/tests/src/com/android/systemui/dreams/touch/HideComplicationTouchHandlerTest.java
index 0a02133..14a5702 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/dreams/touch/HideComplicationTouchHandlerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/dreams/touch/HideComplicationTouchHandlerTest.java
@@ -35,6 +35,7 @@
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.dreams.complication.Complication;
 import com.android.systemui.shared.system.InputChannelCompat;
+import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
 import com.android.systemui.touch.TouchInsetManager;
 import com.android.systemui.util.concurrency.FakeExecutor;
 import com.android.systemui.util.time.FakeSystemClock;
@@ -59,6 +60,9 @@
     TouchInsetManager mTouchInsetManager;
 
     @Mock
+    StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
+
+    @Mock
     Handler mHandler;
 
     @Mock
@@ -83,12 +87,45 @@
                 mVisibilityController,
                 RESTORE_TIMEOUT,
                 mTouchInsetManager,
+                mStatusBarKeyguardViewManager,
                 mFakeExecutor,
                 mHandler);
 
         // Report multiple active sessions.
         when(mSession.getActiveSessionCount()).thenReturn(2);
 
+        // Bouncer hidden.
+        when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
+
+        // Start session.
+        touchHandler.onSessionStart(mSession);
+
+        // Verify session end.
+        verify(mSession).pop();
+
+        // Verify no interaction with visibility controller.
+        verify(mVisibilityController, never()).setVisibility(anyInt(), anyBoolean());
+    }
+
+    /**
+     * Ensures no actions are taken when the bouncer is showing.
+     */
+    @Test
+    public void testSessionEndWhenBouncerShowing() {
+        final HideComplicationTouchHandler touchHandler = new HideComplicationTouchHandler(
+                mVisibilityController,
+                RESTORE_TIMEOUT,
+                mTouchInsetManager,
+                mStatusBarKeyguardViewManager,
+                mFakeExecutor,
+                mHandler);
+
+        // Report one session.
+        when(mSession.getActiveSessionCount()).thenReturn(1);
+
+        // Bouncer is showing.
+        when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(true);
+
         // Start session.
         touchHandler.onSessionStart(mSession);
 
@@ -108,12 +145,16 @@
                 mVisibilityController,
                 RESTORE_TIMEOUT,
                 mTouchInsetManager,
+                mStatusBarKeyguardViewManager,
                 mFakeExecutor,
                 mHandler);
 
         // Report one session
         when(mSession.getActiveSessionCount()).thenReturn(1);
 
+        // Bouncer hidden.
+        when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
+
         // Start session
         touchHandler.onSessionStart(mSession);
 
@@ -149,12 +190,16 @@
                 mVisibilityController,
                 RESTORE_TIMEOUT,
                 mTouchInsetManager,
+                mStatusBarKeyguardViewManager,
                 mFakeExecutor,
                 mHandler);
 
         // Report one session
         when(mSession.getActiveSessionCount()).thenReturn(1);
 
+        // Bouncer hidden.
+        when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
+
         // Start session
         touchHandler.onSessionStart(mSession);
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/flags/FakeFeatureFlags.kt b/packages/SystemUI/tests/src/com/android/systemui/flags/FakeFeatureFlags.kt
new file mode 100644
index 0000000..7b1455c
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/flags/FakeFeatureFlags.kt
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.flags
+
+import android.util.SparseArray
+import android.util.SparseBooleanArray
+import androidx.core.util.containsKey
+
+class FakeFeatureFlags : FeatureFlags {
+    private val booleanFlags = SparseBooleanArray()
+    private val stringFlags = SparseArray<String>()
+    private val knownFlagNames = mutableMapOf<Int, String>()
+
+    init {
+        Flags.getFlagFields().forEach { field ->
+            val flag: Flag<*> = field.get(null) as Flag<*>
+            knownFlagNames[flag.id] = field.name
+        }
+    }
+
+    fun set(flag: BooleanFlag, value: Boolean) {
+        booleanFlags.put(flag.id, value)
+    }
+
+    fun set(flag: DeviceConfigBooleanFlag, value: Boolean) {
+        booleanFlags.put(flag.id, value)
+    }
+
+    fun set(flag: ResourceBooleanFlag, value: Boolean) {
+        booleanFlags.put(flag.id, value)
+    }
+
+    fun set(flag: SysPropBooleanFlag, value: Boolean) {
+        booleanFlags.put(flag.id, value)
+    }
+
+    fun set(flag: StringFlag, value: String) {
+        stringFlags.put(flag.id, value)
+    }
+
+    fun set(flag: ResourceStringFlag, value: String) {
+        stringFlags.put(flag.id, value)
+    }
+
+
+    override fun isEnabled(flag: UnreleasedFlag): Boolean = requireBooleanValue(flag.id)
+
+    override fun isEnabled(flag: ReleasedFlag): Boolean = requireBooleanValue(flag.id)
+
+    override fun isEnabled(flag: ResourceBooleanFlag): Boolean = requireBooleanValue(flag.id)
+
+    override fun isEnabled(flag: DeviceConfigBooleanFlag): Boolean = requireBooleanValue(flag.id)
+
+    override fun isEnabled(flag: SysPropBooleanFlag): Boolean = requireBooleanValue(flag.id)
+
+    override fun getString(flag: StringFlag): String = requireStringValue(flag.id)
+
+    override fun getString(flag: ResourceStringFlag): String = requireStringValue(flag.id)
+
+    override fun addListener(flag: Flag<*>, listener: FlagListenable.Listener) {}
+
+    override fun removeListener(listener: FlagListenable.Listener) {}
+
+    private fun flagName(flagId: Int): String {
+        return knownFlagNames[flagId] ?: "UNKNOWN(id=$flagId)"
+    }
+
+    private fun requireBooleanValue(flagId: Int): Boolean {
+        if (!booleanFlags.containsKey(flagId)) {
+            throw IllegalStateException("Flag ${flagName(flagId)} was accessed but not specified.")
+        }
+        return booleanFlags[flagId]
+    }
+
+    private fun requireStringValue(flagId: Int): String {
+        if (!stringFlags.containsKey(flagId)) {
+            throw IllegalStateException("Flag ${flagName(flagId)} was accessed but not specified.")
+        }
+        return stringFlags[flagId]
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/flags/FakeFeatureFlagsTest.kt b/packages/SystemUI/tests/src/com/android/systemui/flags/FakeFeatureFlagsTest.kt
new file mode 100644
index 0000000..ff579a1
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/flags/FakeFeatureFlagsTest.kt
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.flags
+
+import android.testing.AndroidTestingRunner
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.google.common.truth.Truth.assertThat
+import java.lang.IllegalStateException
+import org.junit.Assert.fail
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+class FakeFeatureFlagsTest : SysuiTestCase() {
+
+    private val unreleasedFlag = UnreleasedFlag(-1000)
+    private val releasedFlag = ReleasedFlag(-1001)
+    private val stringFlag = StringFlag(-1002)
+    private val resourceBooleanFlag = ResourceBooleanFlag(-1003, resourceId = -1)
+    private val resourceStringFlag = ResourceStringFlag(-1004, resourceId = -1)
+    private val sysPropBooleanFlag = SysPropBooleanFlag(-1005, name = "test")
+
+    /**
+     * FakeFeatureFlags does not honor any default values. All flags which are accessed must be
+     * specified. If not, an exception is thrown.
+     */
+    @Test
+    fun throwsIfUnspecifiedFlagIsAccessed() {
+        val flags: FeatureFlags = FakeFeatureFlags()
+        try {
+            assertThat(flags.isEnabled(Flags.TEAMFOOD)).isFalse()
+            fail("Expected an exception when accessing an unspecified flag.")
+        } catch (ex: IllegalStateException) {
+            assertThat(ex.message).contains("TEAMFOOD")
+        }
+        try {
+            assertThat(flags.isEnabled(unreleasedFlag)).isFalse()
+            fail("Expected an exception when accessing an unspecified flag.")
+        } catch (ex: IllegalStateException) {
+            assertThat(ex.message).contains("UNKNOWN(id=-1000)")
+        }
+        try {
+            assertThat(flags.isEnabled(releasedFlag)).isFalse()
+            fail("Expected an exception when accessing an unspecified flag.")
+        } catch (ex: IllegalStateException) {
+            assertThat(ex.message).contains("UNKNOWN(id=-1001)")
+        }
+        try {
+            assertThat(flags.isEnabled(resourceBooleanFlag)).isFalse()
+            fail("Expected an exception when accessing an unspecified flag.")
+        } catch (ex: IllegalStateException) {
+            assertThat(ex.message).contains("UNKNOWN(id=-1003)")
+        }
+        try {
+            assertThat(flags.isEnabled(sysPropBooleanFlag)).isFalse()
+            fail("Expected an exception when accessing an unspecified flag.")
+        } catch (ex: IllegalStateException) {
+            assertThat(ex.message).contains("UNKNOWN(id=-1005)")
+        }
+        try {
+            assertThat(flags.getString(stringFlag)).isEmpty()
+            fail("Expected an exception when accessing an unspecified flag.")
+        } catch (ex: IllegalStateException) {
+            assertThat(ex.message).contains("UNKNOWN(id=-1002)")
+        }
+        try {
+            assertThat(flags.getString(resourceStringFlag)).isEmpty()
+            fail("Expected an exception when accessing an unspecified flag.")
+        } catch (ex: IllegalStateException) {
+            assertThat(ex.message).contains("UNKNOWN(id=-1004)")
+        }
+    }
+
+    @Test
+    fun specifiedFlagsReturnCorrectValues() {
+        val flags = FakeFeatureFlags()
+        flags.set(unreleasedFlag, false)
+        flags.set(releasedFlag, false)
+        flags.set(resourceBooleanFlag, false)
+        flags.set(sysPropBooleanFlag, false)
+        flags.set(resourceStringFlag, "")
+
+        assertThat(flags.isEnabled(unreleasedFlag)).isFalse()
+        assertThat(flags.isEnabled(releasedFlag)).isFalse()
+        assertThat(flags.isEnabled(resourceBooleanFlag)).isFalse()
+        assertThat(flags.isEnabled(sysPropBooleanFlag)).isFalse()
+        assertThat(flags.getString(resourceStringFlag)).isEmpty()
+
+        flags.set(unreleasedFlag, true)
+        flags.set(releasedFlag, true)
+        flags.set(resourceBooleanFlag, true)
+        flags.set(sysPropBooleanFlag, true)
+        flags.set(resourceStringFlag, "Android")
+
+        assertThat(flags.isEnabled(unreleasedFlag)).isTrue()
+        assertThat(flags.isEnabled(releasedFlag)).isTrue()
+        assertThat(flags.isEnabled(resourceBooleanFlag)).isTrue()
+        assertThat(flags.isEnabled(sysPropBooleanFlag)).isTrue()
+        assertThat(flags.getString(resourceStringFlag)).isEqualTo("Android")
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/flags/FeatureFlagsDebugTest.kt b/packages/SystemUI/tests/src/com/android/systemui/flags/FeatureFlagsDebugTest.kt
index b43856a..4511193 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/flags/FeatureFlagsDebugTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/flags/FeatureFlagsDebugTest.kt
@@ -26,6 +26,7 @@
 import com.android.systemui.dump.DumpManager
 import com.android.systemui.statusbar.commandline.Command
 import com.android.systemui.statusbar.commandline.CommandRegistry
+import com.android.systemui.util.DeviceConfigProxyFake
 import com.android.systemui.util.mockito.any
 import com.android.systemui.util.mockito.argumentCaptor
 import com.android.systemui.util.mockito.capture
@@ -34,6 +35,10 @@
 import com.android.systemui.util.mockito.withArgCaptor
 import com.android.systemui.util.settings.SecureSettings
 import com.google.common.truth.Truth.assertThat
+import java.io.PrintWriter
+import java.io.Serializable
+import java.io.StringWriter
+import java.util.function.Consumer
 import org.junit.Assert
 import org.junit.Before
 import org.junit.Test
@@ -47,12 +52,8 @@
 import org.mockito.Mockito.verify
 import org.mockito.Mockito.verifyNoMoreInteractions
 import org.mockito.Mockito.verifyZeroInteractions
-import org.mockito.MockitoAnnotations
-import java.io.PrintWriter
-import java.io.Serializable
-import java.io.StringWriter
-import java.util.function.Consumer
 import org.mockito.Mockito.`when` as whenever
+import org.mockito.MockitoAnnotations
 
 /**
  * NOTE: This test is for the version of FeatureFlagManager in src-release, which should not allow
@@ -74,9 +75,11 @@
     private val flagMap = mutableMapOf<Int, Flag<*>>()
     private lateinit var broadcastReceiver: BroadcastReceiver
     private lateinit var clearCacheAction: Consumer<Int>
+    private val serverFlagReader = ServerFlagReaderFake()
 
-    private val teamfoodableFlagA = BooleanFlag(500, false, true)
-    private val teamfoodableFlagB = BooleanFlag(501, true, true)
+    private val deviceConfig = DeviceConfigProxyFake()
+    private val teamfoodableFlagA = UnreleasedFlag(500, true)
+    private val teamfoodableFlagB = ReleasedFlag(501, true)
 
     @Before
     fun setup() {
@@ -90,6 +93,8 @@
             systemProperties,
             resources,
             dumpManager,
+            deviceConfig,
+            serverFlagReader,
             flagMap,
             commandRegistry,
             barService
@@ -106,40 +111,41 @@
     }
 
     @Test
-    fun testReadBooleanFlag() {
+    fun readBooleanFlag() {
         // Remember that the TEAMFOOD flag is id#1 and has special behavior.
         whenever(flagManager.readFlagValue<Boolean>(eq(3), any())).thenReturn(true)
         whenever(flagManager.readFlagValue<Boolean>(eq(4), any())).thenReturn(false)
-        assertThat(mFeatureFlagsDebug.isEnabled(BooleanFlag(2, true))).isTrue()
-        assertThat(mFeatureFlagsDebug.isEnabled(BooleanFlag(3, false))).isTrue()
-        assertThat(mFeatureFlagsDebug.isEnabled(BooleanFlag(4, true))).isFalse()
-        assertThat(mFeatureFlagsDebug.isEnabled(BooleanFlag(5, false))).isFalse()
+
+        assertThat(mFeatureFlagsDebug.isEnabled(ReleasedFlag(2))).isTrue()
+        assertThat(mFeatureFlagsDebug.isEnabled(UnreleasedFlag(3))).isTrue()
+        assertThat(mFeatureFlagsDebug.isEnabled(ReleasedFlag(4))).isFalse()
+        assertThat(mFeatureFlagsDebug.isEnabled(UnreleasedFlag(5))).isFalse()
     }
 
     @Test
-    fun testTeamFoodFlag_False() {
+    fun teamFoodFlag_False() {
         whenever(flagManager.readFlagValue<Boolean>(eq(1), any())).thenReturn(false)
         assertThat(mFeatureFlagsDebug.isEnabled(teamfoodableFlagA)).isFalse()
         assertThat(mFeatureFlagsDebug.isEnabled(teamfoodableFlagB)).isTrue()
 
         // Regular boolean flags should still test the same.
         // Only our teamfoodableFlag should change.
-        testReadBooleanFlag()
+        readBooleanFlag()
     }
 
     @Test
-    fun testTeamFoodFlag_True() {
+    fun teamFoodFlag_True() {
         whenever(flagManager.readFlagValue<Boolean>(eq(1), any())).thenReturn(true)
         assertThat(mFeatureFlagsDebug.isEnabled(teamfoodableFlagA)).isTrue()
         assertThat(mFeatureFlagsDebug.isEnabled(teamfoodableFlagB)).isTrue()
 
         // Regular boolean flags should still test the same.
         // Only our teamfoodableFlag should change.
-        testReadBooleanFlag()
+        readBooleanFlag()
     }
 
     @Test
-    fun testTeamFoodFlag_Overridden() {
+    fun teamFoodFlag_Overridden() {
         whenever(flagManager.readFlagValue<Boolean>(eq(teamfoodableFlagA.id), any()))
                 .thenReturn(true)
         whenever(flagManager.readFlagValue<Boolean>(eq(teamfoodableFlagB.id), any()))
@@ -150,11 +156,11 @@
 
         // Regular boolean flags should still test the same.
         // Only our teamfoodableFlag should change.
-        testReadBooleanFlag()
+        readBooleanFlag()
     }
 
     @Test
-    fun testReadResourceBooleanFlag() {
+    fun readResourceBooleanFlag() {
         whenever(resources.getBoolean(1001)).thenReturn(false)
         whenever(resources.getBoolean(1002)).thenReturn(true)
         whenever(resources.getBoolean(1003)).thenReturn(false)
@@ -179,7 +185,7 @@
     }
 
     @Test
-    fun testReadSysPropBooleanFlag() {
+    fun readSysPropBooleanFlag() {
         whenever(systemProperties.getBoolean(anyString(), anyBoolean())).thenAnswer {
             if ("b".equals(it.getArgument<String?>(0))) {
                 return@thenAnswer true
@@ -195,7 +201,22 @@
     }
 
     @Test
-    fun testReadStringFlag() {
+    fun readDeviceConfigBooleanFlag() {
+        val namespace = "test_namespace"
+        deviceConfig.setProperty(namespace, "a", "true", false)
+        deviceConfig.setProperty(namespace, "b", "false", false)
+        deviceConfig.setProperty(namespace, "c", null, false)
+
+        assertThat(mFeatureFlagsDebug.isEnabled(DeviceConfigBooleanFlag(1, "a", namespace)))
+            .isTrue()
+        assertThat(mFeatureFlagsDebug.isEnabled(DeviceConfigBooleanFlag(2, "b", namespace)))
+            .isFalse()
+        assertThat(mFeatureFlagsDebug.isEnabled(DeviceConfigBooleanFlag(3, "c", namespace)))
+            .isFalse()
+    }
+
+    @Test
+    fun readStringFlag() {
         whenever(flagManager.readFlagValue<String>(eq(3), any())).thenReturn("foo")
         whenever(flagManager.readFlagValue<String>(eq(4), any())).thenReturn("bar")
         assertThat(mFeatureFlagsDebug.getString(StringFlag(1, "biz"))).isEqualTo("biz")
@@ -205,7 +226,7 @@
     }
 
     @Test
-    fun testReadResourceStringFlag() {
+    fun readResourceStringFlag() {
         whenever(resources.getString(1001)).thenReturn("")
         whenever(resources.getString(1002)).thenReturn("resource2")
         whenever(resources.getString(1003)).thenReturn("resource3")
@@ -235,8 +256,8 @@
     }
 
     @Test
-    fun testBroadcastReceiverIgnoresInvalidData() {
-        addFlag(BooleanFlag(1, false))
+    fun broadcastReceiver_IgnoresInvalidData() {
+        addFlag(UnreleasedFlag(1))
         addFlag(ResourceBooleanFlag(2, 1002))
         addFlag(StringFlag(3, "flag3"))
         addFlag(ResourceStringFlag(4, 1004))
@@ -254,10 +275,10 @@
     }
 
     @Test
-    fun testIntentWithIdButNoValueKeyClears() {
-        addFlag(BooleanFlag(1, false))
+    fun intentWithId_NoValueKeyClears() {
+        addFlag(UnreleasedFlag(1))
 
-        // trying to erase an id not in the map does noting
+        // trying to erase an id not in the map does nothing
         broadcastReceiver.onReceive(
             mockContext,
             Intent(FlagManager.ACTION_SET_FLAG).putExtra(FlagManager.EXTRA_ID, 0)
@@ -273,9 +294,9 @@
     }
 
     @Test
-    fun testSetBooleanFlag() {
-        addFlag(BooleanFlag(1, false))
-        addFlag(BooleanFlag(2, false))
+    fun setBooleanFlag() {
+        addFlag(UnreleasedFlag(1))
+        addFlag(UnreleasedFlag(2))
         addFlag(ResourceBooleanFlag(3, 1003))
         addFlag(ResourceBooleanFlag(4, 1004))
 
@@ -293,7 +314,7 @@
     }
 
     @Test
-    fun testSetStringFlag() {
+    fun setStringFlag() {
         addFlag(StringFlag(1, "flag1"))
         addFlag(ResourceStringFlag(2, 1002))
 
@@ -305,7 +326,7 @@
     }
 
     @Test
-    fun testSetFlagClearsCache() {
+    fun setFlag_ClearsCache() {
         val flag1 = addFlag(StringFlag(1, "flag1"))
         whenever(flagManager.readFlagValue<String>(eq(1), any())).thenReturn("original")
 
@@ -327,12 +348,30 @@
     }
 
     @Test
-    fun testRegisterCommand() {
+    fun serverSide_Overrides_MakesFalse() {
+        val flag = ReleasedFlag(100)
+
+        serverFlagReader.setFlagValue(flag.id, false)
+
+        assertThat(mFeatureFlagsDebug.isEnabled(flag)).isFalse()
+    }
+
+    @Test
+    fun serverSide_Overrides_MakesTrue() {
+        val flag = UnreleasedFlag(100)
+
+        serverFlagReader.setFlagValue(flag.id, true)
+
+        assertThat(mFeatureFlagsDebug.isEnabled(flag)).isTrue()
+    }
+
+    @Test
+    fun statusBarCommand_IsRegistered() {
         verify(commandRegistry).registerCommand(anyString(), any())
     }
 
     @Test
-    fun testNoOpCommand() {
+    fun noOpCommand() {
         val cmd = captureCommand()
 
         cmd.execute(pw, ArrayList())
@@ -342,37 +381,73 @@
     }
 
     @Test
-    fun testReadFlagCommand() {
-        addFlag(BooleanFlag(1, false))
+    fun readFlagCommand() {
+        addFlag(UnreleasedFlag(1))
         val cmd = captureCommand()
         cmd.execute(pw, listOf("1"))
         verify(flagManager).readFlagValue<Boolean>(eq(1), any())
     }
 
     @Test
-    fun testSetFlagCommand() {
-        addFlag(BooleanFlag(1, false))
+    fun setFlagCommand() {
+        addFlag(UnreleasedFlag(1))
         val cmd = captureCommand()
         cmd.execute(pw, listOf("1", "on"))
         verifyPutData(1, "{\"type\":\"boolean\",\"value\":true}")
     }
 
     @Test
-    fun testToggleFlagCommand() {
-        addFlag(BooleanFlag(1, true))
+    fun toggleFlagCommand() {
+        addFlag(ReleasedFlag(1))
         val cmd = captureCommand()
         cmd.execute(pw, listOf("1", "toggle"))
         verifyPutData(1, "{\"type\":\"boolean\",\"value\":false}", 2)
     }
 
     @Test
-    fun testEraseFlagCommand() {
-        addFlag(BooleanFlag(1, true))
+    fun eraseFlagCommand() {
+        addFlag(ReleasedFlag(1))
         val cmd = captureCommand()
         cmd.execute(pw, listOf("1", "erase"))
         verify(secureSettings).putStringForUser(eq("key-1"), eq(""), anyInt())
     }
 
+    @Test
+    fun dumpFormat() {
+        val flag1 = ReleasedFlag(1)
+        val flag2 = ResourceBooleanFlag(2, 1002)
+        val flag3 = UnreleasedFlag(3)
+        val flag4 = StringFlag(4, "")
+        val flag5 = StringFlag(5, "flag5default")
+        val flag6 = ResourceStringFlag(6, 1006)
+        val flag7 = ResourceStringFlag(7, 1007)
+
+        whenever(resources.getBoolean(1002)).thenReturn(true)
+        whenever(resources.getString(1006)).thenReturn("resource1006")
+        whenever(resources.getString(1007)).thenReturn("resource1007")
+        whenever(flagManager.readFlagValue(eq(7), eq(StringFlagSerializer)))
+            .thenReturn("override7")
+
+        // WHEN the flags have been accessed
+        assertThat(mFeatureFlagsDebug.isEnabled(flag1)).isTrue()
+        assertThat(mFeatureFlagsDebug.isEnabled(flag2)).isTrue()
+        assertThat(mFeatureFlagsDebug.isEnabled(flag3)).isFalse()
+        assertThat(mFeatureFlagsDebug.getString(flag4)).isEmpty()
+        assertThat(mFeatureFlagsDebug.getString(flag5)).isEqualTo("flag5default")
+        assertThat(mFeatureFlagsDebug.getString(flag6)).isEqualTo("resource1006")
+        assertThat(mFeatureFlagsDebug.getString(flag7)).isEqualTo("override7")
+
+        // THEN the dump contains the flags and the default values
+        val dump = dumpToString()
+        assertThat(dump).contains(" sysui_flag_1: true\n")
+        assertThat(dump).contains(" sysui_flag_2: true\n")
+        assertThat(dump).contains(" sysui_flag_3: false\n")
+        assertThat(dump).contains(" sysui_flag_4: [length=0] \"\"\n")
+        assertThat(dump).contains(" sysui_flag_5: [length=12] \"flag5default\"\n")
+        assertThat(dump).contains(" sysui_flag_6: [length=12] \"resource1006\"\n")
+        assertThat(dump).contains(" sysui_flag_7: [length=9] \"override7\"\n")
+    }
+
     private fun verifyPutData(id: Int, data: String, numReads: Int = 1) {
         inOrder(flagManager, secureSettings).apply {
             verify(flagManager, times(numReads)).readFlagValue(eq(id), any<FlagSerializer<*>>())
@@ -403,42 +478,6 @@
         return captor.value.invoke()
     }
 
-    @Test
-    fun testDump() {
-        val flag1 = BooleanFlag(1, true)
-        val flag2 = ResourceBooleanFlag(2, 1002)
-        val flag3 = BooleanFlag(3, false)
-        val flag4 = StringFlag(4, "")
-        val flag5 = StringFlag(5, "flag5default")
-        val flag6 = ResourceStringFlag(6, 1006)
-        val flag7 = ResourceStringFlag(7, 1007)
-
-        whenever(resources.getBoolean(1002)).thenReturn(true)
-        whenever(resources.getString(1006)).thenReturn("resource1006")
-        whenever(resources.getString(1007)).thenReturn("resource1007")
-        whenever(flagManager.readFlagValue(eq(7), eq(StringFlagSerializer)))
-            .thenReturn("override7")
-
-        // WHEN the flags have been accessed
-        assertThat(mFeatureFlagsDebug.isEnabled(flag1)).isTrue()
-        assertThat(mFeatureFlagsDebug.isEnabled(flag2)).isTrue()
-        assertThat(mFeatureFlagsDebug.isEnabled(flag3)).isFalse()
-        assertThat(mFeatureFlagsDebug.getString(flag4)).isEmpty()
-        assertThat(mFeatureFlagsDebug.getString(flag5)).isEqualTo("flag5default")
-        assertThat(mFeatureFlagsDebug.getString(flag6)).isEqualTo("resource1006")
-        assertThat(mFeatureFlagsDebug.getString(flag7)).isEqualTo("override7")
-
-        // THEN the dump contains the flags and the default values
-        val dump = dumpToString()
-        assertThat(dump).contains(" sysui_flag_1: true\n")
-        assertThat(dump).contains(" sysui_flag_2: true\n")
-        assertThat(dump).contains(" sysui_flag_3: false\n")
-        assertThat(dump).contains(" sysui_flag_4: [length=0] \"\"\n")
-        assertThat(dump).contains(" sysui_flag_5: [length=12] \"flag5default\"\n")
-        assertThat(dump).contains(" sysui_flag_6: [length=12] \"resource1006\"\n")
-        assertThat(dump).contains(" sysui_flag_7: [length=9] \"override7\"\n")
-    }
-
     private fun dumpToString(): String {
         val sw = StringWriter()
         val pw = PrintWriter(sw)
@@ -446,4 +485,4 @@
         pw.flush()
         return sw.toString()
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/flags/FeatureFlagsReleaseTest.kt b/packages/SystemUI/tests/src/com/android/systemui/flags/FeatureFlagsReleaseTest.kt
index b5deb0b..e94b520 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/flags/FeatureFlagsReleaseTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/flags/FeatureFlagsReleaseTest.kt
@@ -20,6 +20,7 @@
 import android.test.suitebuilder.annotation.SmallTest
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.dump.DumpManager
+import com.android.systemui.util.DeviceConfigProxyFake
 import com.android.systemui.util.mockito.any
 import com.google.common.truth.Truth.assertThat
 import org.junit.After
@@ -29,8 +30,8 @@
 import org.mockito.Mock
 import org.mockito.Mockito.verify
 import org.mockito.Mockito.verifyNoMoreInteractions
-import org.mockito.MockitoAnnotations
 import org.mockito.Mockito.`when` as whenever
+import org.mockito.MockitoAnnotations
 
 /**
  * NOTE: This test is for the version of FeatureFlagManager in src-release, which should not allow
@@ -43,11 +44,19 @@
     @Mock private lateinit var mResources: Resources
     @Mock private lateinit var mSystemProperties: SystemPropertiesHelper
     @Mock private lateinit var mDumpManager: DumpManager
+    private val serverFlagReader = ServerFlagReaderFake()
+
+    private val deviceConfig = DeviceConfigProxyFake()
 
     @Before
     fun setup() {
         MockitoAnnotations.initMocks(this)
-        mFeatureFlagsRelease = FeatureFlagsRelease(mResources, mSystemProperties, mDumpManager)
+        mFeatureFlagsRelease = FeatureFlagsRelease(
+            mResources,
+            mSystemProperties,
+            deviceConfig,
+            serverFlagReader,
+            mDumpManager)
     }
 
     @After
@@ -85,6 +94,21 @@
     }
 
     @Test
+    fun testReadDeviceConfigBooleanFlag() {
+        val namespace = "test_namespace"
+        deviceConfig.setProperty(namespace, "a", "true", false)
+        deviceConfig.setProperty(namespace, "b", "false", false)
+        deviceConfig.setProperty(namespace, "c", null, false)
+
+        assertThat(mFeatureFlagsRelease.isEnabled(DeviceConfigBooleanFlag(1, "a", namespace)))
+            .isTrue()
+        assertThat(mFeatureFlagsRelease.isEnabled(DeviceConfigBooleanFlag(2, "b", namespace)))
+            .isFalse()
+        assertThat(mFeatureFlagsRelease.isEnabled(DeviceConfigBooleanFlag(3, "c", namespace)))
+            .isFalse()
+    }
+
+    @Test
     fun testSysPropBooleanFlag() {
         val flagId = 213
         val flagName = "sys_prop_flag"
@@ -94,4 +118,22 @@
         whenever(mSystemProperties.getBoolean(flagName, flagDefault)).thenReturn(flagDefault)
         assertThat(mFeatureFlagsRelease.isEnabled(flag)).isEqualTo(flagDefault)
     }
-}
\ No newline at end of file
+
+    @Test
+    fun serverSide_OverridesReleased_MakesFalse() {
+        val flag = ReleasedFlag(100)
+
+        serverFlagReader.setFlagValue(flag.id, false)
+
+        assertThat(mFeatureFlagsRelease.isEnabled(flag)).isFalse()
+    }
+
+    @Test
+    fun serverSide_OverridesUnreleased_Ignored() {
+        val flag = UnreleasedFlag(100)
+
+        serverFlagReader.setFlagValue(flag.id, true)
+
+        assertThat(mFeatureFlagsRelease.isEnabled(flag)).isFalse()
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/flags/FlagManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/flags/FlagManagerTest.kt
index a2eca81..17324a0 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/flags/FlagManagerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/flags/FlagManagerTest.kt
@@ -26,6 +26,7 @@
 import com.android.systemui.util.mockito.mock
 import com.android.systemui.util.mockito.withArgCaptor
 import com.google.common.truth.Truth.assertThat
+import java.util.function.Consumer
 import org.junit.Assert.assertThrows
 import org.junit.Before
 import org.junit.Test
@@ -33,9 +34,8 @@
 import org.mockito.Mockito.times
 import org.mockito.Mockito.verify
 import org.mockito.Mockito.verifyNoMoreInteractions
-import org.mockito.MockitoAnnotations
-import java.util.function.Consumer
 import org.mockito.Mockito.`when` as whenever
+import org.mockito.MockitoAnnotations
 
 /**
  * NOTE: This test is for the version of FeatureFlagManager in src-release, which should not allow
@@ -64,14 +64,14 @@
         verifyNoMoreInteractions(mFlagSettingsHelper)
 
         // adding the first listener registers the observer
-        mFlagManager.addListener(BooleanFlag(1, true), listener1)
+        mFlagManager.addListener(ReleasedFlag(1), listener1)
         val observer = withArgCaptor<ContentObserver> {
             verify(mFlagSettingsHelper).registerContentObserver(any(), any(), capture())
         }
         verifyNoMoreInteractions(mFlagSettingsHelper)
 
         // adding another listener does nothing
-        mFlagManager.addListener(BooleanFlag(2, true), listener2)
+        mFlagManager.addListener(ReleasedFlag(2), listener2)
         verifyNoMoreInteractions(mFlagSettingsHelper)
 
         // removing the original listener does nothing with second one still present
@@ -89,7 +89,7 @@
         val listener = mock<FlagListenable.Listener>()
         val clearCacheAction = mock<Consumer<Int>>()
         mFlagManager.clearCacheAction = clearCacheAction
-        mFlagManager.addListener(BooleanFlag(1, true), listener)
+        mFlagManager.addListener(ReleasedFlag(1), listener)
         val observer = withArgCaptor<ContentObserver> {
             verify(mFlagSettingsHelper).registerContentObserver(any(), any(), capture())
         }
@@ -101,8 +101,8 @@
     fun testObserverInvokesListeners() {
         val listener1 = mock<FlagListenable.Listener>()
         val listener10 = mock<FlagListenable.Listener>()
-        mFlagManager.addListener(BooleanFlag(1, true), listener1)
-        mFlagManager.addListener(BooleanFlag(10, true), listener10)
+        mFlagManager.addListener(ReleasedFlag(1), listener1)
+        mFlagManager.addListener(ReleasedFlag(10), listener10)
         val observer = withArgCaptor<ContentObserver> {
             verify(mFlagSettingsHelper).registerContentObserver(any(), any(), capture())
         }
@@ -127,8 +127,8 @@
     fun testOnlySpecificFlagListenerIsInvoked() {
         val listener1 = mock<FlagListenable.Listener>()
         val listener10 = mock<FlagListenable.Listener>()
-        mFlagManager.addListener(BooleanFlag(1, true), listener1)
-        mFlagManager.addListener(BooleanFlag(10, true), listener10)
+        mFlagManager.addListener(ReleasedFlag(1), listener1)
+        mFlagManager.addListener(ReleasedFlag(10), listener10)
 
         mFlagManager.dispatchListenersAndMaybeRestart(1, null)
         val flagEvent1 = withArgCaptor<FlagListenable.FlagEvent> {
@@ -148,8 +148,8 @@
     @Test
     fun testSameListenerCanBeUsedForMultipleFlags() {
         val listener = mock<FlagListenable.Listener>()
-        mFlagManager.addListener(BooleanFlag(1, true), listener)
-        mFlagManager.addListener(BooleanFlag(10, true), listener)
+        mFlagManager.addListener(ReleasedFlag(1), listener)
+        mFlagManager.addListener(ReleasedFlag(10), listener)
 
         mFlagManager.dispatchListenersAndMaybeRestart(1, null)
         val flagEvent1 = withArgCaptor<FlagListenable.FlagEvent> {
@@ -177,7 +177,7 @@
     @Test
     fun testListenerCanSuppressRestart() {
         val restartAction = mock<Consumer<Boolean>>()
-        mFlagManager.addListener(BooleanFlag(1, true)) { event ->
+        mFlagManager.addListener(ReleasedFlag(1)) { event ->
             event.requestNoRestart()
         }
         mFlagManager.dispatchListenersAndMaybeRestart(1, restartAction)
@@ -188,7 +188,7 @@
     @Test
     fun testListenerOnlySuppressesRestartForOwnFlag() {
         val restartAction = mock<Consumer<Boolean>>()
-        mFlagManager.addListener(BooleanFlag(10, true)) { event ->
+        mFlagManager.addListener(ReleasedFlag(10)) { event ->
             event.requestNoRestart()
         }
         mFlagManager.dispatchListenersAndMaybeRestart(1, restartAction)
@@ -199,10 +199,10 @@
     @Test
     fun testRestartWhenNotAllListenersRequestSuppress() {
         val restartAction = mock<Consumer<Boolean>>()
-        mFlagManager.addListener(BooleanFlag(10, true)) { event ->
+        mFlagManager.addListener(ReleasedFlag(10)) { event ->
             event.requestNoRestart()
         }
-        mFlagManager.addListener(BooleanFlag(10, true)) {
+        mFlagManager.addListener(ReleasedFlag(10)) {
             // do not request
         }
         mFlagManager.dispatchListenersAndMaybeRestart(1, restartAction)
@@ -295,4 +295,4 @@
         assertThat(StringFlagSerializer.toSettingsData("foo"))
             .isEqualTo("{\"type\":\"string\",\"value\":\"foo\"}")
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/flags/FlagsTest.java b/packages/SystemUI/tests/src/com/android/systemui/flags/FlagsTest.java
index 25c3028..250cc48 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/flags/FlagsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/flags/FlagsTest.java
@@ -107,11 +107,11 @@
     }
 
     private static class DuplicateFlagContainer {
-        public static final BooleanFlag A_FLAG = new BooleanFlag(0);
-        public static final BooleanFlag B_FLAG = new BooleanFlag(0);
+        public static final BooleanFlag A_FLAG = new UnreleasedFlag(0);
+        public static final BooleanFlag B_FLAG = new UnreleasedFlag(0);
         public static final StringFlag C_FLAG = new StringFlag(0);
 
-        public static final BooleanFlag D_FLAG = new BooleanFlag(1);
+        public static final BooleanFlag D_FLAG = new UnreleasedFlag(1);
 
         public static final DoubleFlag E_FLAG = new DoubleFlag(3);
         public static final DoubleFlag F_FLAG = new DoubleFlag(3);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogLiteTest.java b/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogLiteTest.java
index f00fbe6..141a213 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogLiteTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogLiteTest.java
@@ -20,6 +20,7 @@
 
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.spy;
@@ -480,4 +481,13 @@
         // hide dialog again
         mGlobalActionsDialogLite.showOrHideDialog(true, true, null /* view */);
     }
+
+    @Test
+    public void testBugreportAction_whenDebugMode_shouldOfferBugreportButtonBeforeProvisioning() {
+        doReturn(1).when(mGlobalSettings).getInt(anyString(), anyInt());
+
+        GlobalActionsDialogLite.BugReportAction bugReportAction =
+                mGlobalActionsDialogLite.makeBugReportActionForTesting();
+        assertThat(bugReportAction.showBeforeProvisioning()).isTrue();
+    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/AnimatableClockControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/AnimatableClockControllerTest.java
index 5a4bb86..df506b4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/AnimatableClockControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/AnimatableClockControllerTest.java
@@ -34,12 +34,12 @@
 import androidx.test.filters.SmallTest;
 
 import com.android.keyguard.AnimatableClockController;
-import com.android.keyguard.AnimatableClockView;
 import com.android.keyguard.KeyguardUpdateMonitor;
 import com.android.settingslib.Utils;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.broadcast.BroadcastDispatcher;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.shared.clocks.AnimatableClockView;
 import com.android.systemui.statusbar.policy.BatteryController;
 
 import org.junit.After;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardSliceProviderTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardSliceProviderTest.java
index 51c2580..23516c9 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardSliceProviderTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardSliceProviderTest.java
@@ -45,6 +45,7 @@
 import androidx.test.filters.SmallTest;
 
 import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.systemui.SystemUIInitializerImpl;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.statusbar.NotificationMediaManager;
@@ -100,7 +101,7 @@
         MockitoAnnotations.initMocks(this);
         mIsZenMode = false;
         mProvider = new TestableKeyguardSliceProvider();
-        mProvider.setContextAvailableCallback(context -> { });
+        mProvider.setContextAvailableCallback(context -> new SystemUIInitializerImpl(mContext));
         mProvider.attachInfo(getContext(), null);
         reset(mContentResolver);
         SliceProvider.setSpecs(new HashSet<>(Arrays.asList(SliceSpecs.LIST)));
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 8a36a68..21c018a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
@@ -228,6 +228,13 @@
                 mViewMediator.mViewMediatorCallback.getBouncerPromptReason());
     }
 
+    @Test
+    public void testHideSurfaceBehindKeyguardMarksKeyguardNotGoingAway() {
+        mViewMediator.hideSurfaceBehindKeyguard();
+
+        verify(mKeyguardStateController).notifyKeyguardGoingAway(false);
+    }
+
     private void createAndStartViewMediator() {
         mViewMediator = new KeyguardViewMediator(
                 mContext,
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
new file mode 100644
index 0000000..592e80b
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/HomeControlsKeyguardQuickAffordanceConfigTest.kt
@@ -0,0 +1,99 @@
+/*
+ *  Copyright (C) 2022 The Android Open Source Project
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT 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.quickaffordance
+
+import androidx.test.filters.SmallTest
+import com.android.systemui.R
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.animation.ActivityLaunchAnimator
+import com.android.systemui.controls.controller.ControlsController
+import com.android.systemui.controls.dagger.ControlsComponent
+import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceConfig.OnClickedResult
+import com.android.systemui.util.mockito.mock
+import com.google.common.truth.Truth.assertThat
+import java.util.Optional
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.launchIn
+import kotlinx.coroutines.flow.onEach
+import kotlinx.coroutines.test.runBlockingTest
+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.`when` as whenever
+import org.mockito.MockitoAnnotations
+
+@SmallTest
+@RunWith(JUnit4::class)
+class HomeControlsKeyguardQuickAffordanceConfigTest : SysuiTestCase() {
+
+    @Mock private lateinit var component: ControlsComponent
+    @Mock private lateinit var animationController: ActivityLaunchAnimator.Controller
+
+    private lateinit var underTest: HomeControlsKeyguardQuickAffordanceConfig
+
+    @Before
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+
+        underTest =
+            HomeControlsKeyguardQuickAffordanceConfig(
+                context = context,
+                component = component,
+            )
+    }
+
+    @Test
+    fun `state - when listing controller is missing - returns None`() = runBlockingTest {
+        whenever(component.isEnabled()).thenReturn(true)
+        whenever(component.getTileImageId()).thenReturn(R.drawable.controls_icon)
+        whenever(component.getTileTitleId()).thenReturn(R.string.quick_controls_title)
+        val controlsController = mock<ControlsController>()
+        whenever(component.getControlsController()).thenReturn(Optional.of(controlsController))
+        whenever(component.getControlsListingController()).thenReturn(Optional.empty())
+        whenever(controlsController.getFavorites()).thenReturn(listOf(mock()))
+
+        val values = mutableListOf<KeyguardQuickAffordanceConfig.State>()
+        val job = underTest.state.onEach(values::add).launchIn(this)
+
+        assertThat(values.last())
+            .isInstanceOf(KeyguardQuickAffordanceConfig.State.Hidden::class.java)
+        job.cancel()
+    }
+
+    @Test
+    fun `onQuickAffordanceClicked - canShowWhileLockedSetting is true`() = runBlockingTest {
+        whenever(component.canShowWhileLockedSetting).thenReturn(MutableStateFlow(true))
+
+        val onClickedResult = underTest.onQuickAffordanceClicked(animationController)
+
+        assertThat(onClickedResult).isInstanceOf(OnClickedResult.StartActivity::class.java)
+        assertThat((onClickedResult as OnClickedResult.StartActivity).canShowWhileLocked).isTrue()
+    }
+
+    @Test
+    fun `onQuickAffordanceClicked - canShowWhileLockedSetting is false`() = runBlockingTest {
+        whenever(component.canShowWhileLockedSetting).thenReturn(MutableStateFlow(false))
+
+        val onClickedResult = underTest.onQuickAffordanceClicked(animationController)
+
+        assertThat(onClickedResult).isInstanceOf(OnClickedResult.StartActivity::class.java)
+        assertThat((onClickedResult as OnClickedResult.StartActivity).canShowWhileLocked).isFalse()
+    }
+}
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
new file mode 100644
index 0000000..6fd04de
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/QrCodeScannerKeyguardQuickAffordanceConfigTest.kt
@@ -0,0 +1,148 @@
+/*
+ *  Copyright (C) 2022 The Android Open Source Project
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT 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.quickaffordance
+
+import android.content.Intent
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceConfig.OnClickedResult
+import com.android.systemui.qrcodescanner.controller.QRCodeScannerController
+import com.android.systemui.util.mockito.argumentCaptor
+import com.android.systemui.util.mockito.mock
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.flow.launchIn
+import kotlinx.coroutines.flow.onEach
+import kotlinx.coroutines.test.runBlockingTest
+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.verify
+import org.mockito.Mockito.`when` as whenever
+import org.mockito.MockitoAnnotations
+
+@SmallTest
+@RunWith(JUnit4::class)
+class QrCodeScannerKeyguardQuickAffordanceConfigTest : SysuiTestCase() {
+
+    @Mock private lateinit var controller: QRCodeScannerController
+
+    private lateinit var underTest: QrCodeScannerKeyguardQuickAffordanceConfig
+
+    @Before
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+        whenever(controller.intent).thenReturn(INTENT_1)
+
+        underTest = QrCodeScannerKeyguardQuickAffordanceConfig(controller)
+    }
+
+    @Test
+    fun `affordance - sets up registration and delivers initial model`() = runBlockingTest {
+        whenever(controller.isEnabledForLockScreenButton).thenReturn(true)
+        var latest: KeyguardQuickAffordanceConfig.State? = null
+
+        val job = underTest.state.onEach { latest = it }.launchIn(this)
+
+        val callbackCaptor = argumentCaptor<QRCodeScannerController.Callback>()
+        verify(controller).addCallback(callbackCaptor.capture())
+        verify(controller)
+            .registerQRCodeScannerChangeObservers(
+                QRCodeScannerController.DEFAULT_QR_CODE_SCANNER_CHANGE,
+                QRCodeScannerController.QR_CODE_SCANNER_PREFERENCE_CHANGE
+            )
+        assertVisibleState(latest)
+
+        job.cancel()
+        verify(controller).removeCallback(callbackCaptor.value)
+    }
+
+    @Test
+    fun `affordance - scanner activity changed - delivers model with updated intent`() =
+        runBlockingTest {
+            whenever(controller.isEnabledForLockScreenButton).thenReturn(true)
+            var latest: KeyguardQuickAffordanceConfig.State? = null
+            val job = underTest.state.onEach { latest = it }.launchIn(this)
+            val callbackCaptor = argumentCaptor<QRCodeScannerController.Callback>()
+            verify(controller).addCallback(callbackCaptor.capture())
+
+            whenever(controller.intent).thenReturn(INTENT_2)
+            callbackCaptor.value.onQRCodeScannerActivityChanged()
+
+            assertVisibleState(latest)
+
+            job.cancel()
+            verify(controller).removeCallback(callbackCaptor.value)
+        }
+
+    @Test
+    fun `affordance - scanner preference changed - delivers visible model`() = runBlockingTest {
+        var latest: KeyguardQuickAffordanceConfig.State? = null
+        val job = underTest.state.onEach { latest = it }.launchIn(this)
+        val callbackCaptor = argumentCaptor<QRCodeScannerController.Callback>()
+        verify(controller).addCallback(callbackCaptor.capture())
+
+        whenever(controller.isEnabledForLockScreenButton).thenReturn(true)
+        callbackCaptor.value.onQRCodeScannerPreferenceChanged()
+
+        assertVisibleState(latest)
+
+        job.cancel()
+        verify(controller).removeCallback(callbackCaptor.value)
+    }
+
+    @Test
+    fun `affordance - scanner preference changed - delivers none`() = runBlockingTest {
+        var latest: KeyguardQuickAffordanceConfig.State? = null
+        val job = underTest.state.onEach { latest = it }.launchIn(this)
+        val callbackCaptor = argumentCaptor<QRCodeScannerController.Callback>()
+        verify(controller).addCallback(callbackCaptor.capture())
+
+        whenever(controller.isEnabledForLockScreenButton).thenReturn(false)
+        callbackCaptor.value.onQRCodeScannerPreferenceChanged()
+
+        assertThat(latest).isEqualTo(KeyguardQuickAffordanceConfig.State.Hidden)
+
+        job.cancel()
+        verify(controller).removeCallback(callbackCaptor.value)
+    }
+
+    @Test
+    fun onQuickAffordanceClicked() {
+        assertThat(underTest.onQuickAffordanceClicked(mock()))
+            .isEqualTo(
+                OnClickedResult.StartActivity(
+                    intent = INTENT_1,
+                    canShowWhileLocked = true,
+                )
+            )
+    }
+
+    private fun assertVisibleState(latest: KeyguardQuickAffordanceConfig.State?) {
+        assertThat(latest).isInstanceOf(KeyguardQuickAffordanceConfig.State.Visible::class.java)
+        val visibleState = latest as KeyguardQuickAffordanceConfig.State.Visible
+        assertThat(visibleState.icon).isNotNull()
+        assertThat(visibleState.contentDescriptionResourceId).isNotNull()
+    }
+
+    companion object {
+        private val INTENT_1 = Intent("intent1")
+        private val INTENT_2 = Intent("intent2")
+    }
+}
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
new file mode 100644
index 0000000..345c51f
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/quickaffordance/QuickAccessWalletKeyguardQuickAffordanceConfigTest.kt
@@ -0,0 +1,179 @@
+/*
+ *  Copyright (C) 2022 The Android Open Source Project
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT 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.quickaffordance
+
+import android.graphics.drawable.Drawable
+import android.service.quickaccesswallet.GetWalletCardsResponse
+import android.service.quickaccesswallet.QuickAccessWalletClient
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.animation.ActivityLaunchAnimator
+import com.android.systemui.containeddrawable.ContainedDrawable
+import com.android.systemui.plugins.ActivityStarter
+import com.android.systemui.util.mockito.any
+import com.android.systemui.util.mockito.mock
+import com.android.systemui.wallet.controller.QuickAccessWalletController
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.flow.launchIn
+import kotlinx.coroutines.flow.onEach
+import kotlinx.coroutines.test.runBlockingTest
+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.verify
+import org.mockito.Mockito.`when` as whenever
+import org.mockito.MockitoAnnotations
+
+@SmallTest
+@RunWith(JUnit4::class)
+class QuickAccessWalletKeyguardQuickAffordanceConfigTest : SysuiTestCase() {
+
+    @Mock private lateinit var walletController: QuickAccessWalletController
+    @Mock private lateinit var activityStarter: ActivityStarter
+
+    private lateinit var underTest: QuickAccessWalletKeyguardQuickAffordanceConfig
+
+    @Before
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+
+        underTest =
+            QuickAccessWalletKeyguardQuickAffordanceConfig(
+                walletController,
+                activityStarter,
+            )
+    }
+
+    @Test
+    fun `affordance - keyguard showing - has wallet card - visible model`() = runBlockingTest {
+        setUpState()
+        var latest: KeyguardQuickAffordanceConfig.State? = null
+
+        val job = underTest.state.onEach { latest = it }.launchIn(this)
+
+        val visibleModel = latest as KeyguardQuickAffordanceConfig.State.Visible
+        assertThat(visibleModel.icon).isEqualTo(ContainedDrawable.WithDrawable(ICON))
+        assertThat(visibleModel.contentDescriptionResourceId).isNotNull()
+        job.cancel()
+    }
+
+    @Test
+    fun `affordance - wallet not enabled - model is none`() = runBlockingTest {
+        setUpState(isWalletEnabled = false)
+        var latest: KeyguardQuickAffordanceConfig.State? = null
+
+        val job = underTest.state.onEach { latest = it }.launchIn(this)
+
+        assertThat(latest).isEqualTo(KeyguardQuickAffordanceConfig.State.Hidden)
+
+        job.cancel()
+    }
+
+    @Test
+    fun `affordance - query not successful - model is none`() = runBlockingTest {
+        setUpState(isWalletQuerySuccessful = false)
+        var latest: KeyguardQuickAffordanceConfig.State? = null
+
+        val job = underTest.state.onEach { latest = it }.launchIn(this)
+
+        assertThat(latest).isEqualTo(KeyguardQuickAffordanceConfig.State.Hidden)
+
+        job.cancel()
+    }
+
+    @Test
+    fun `affordance - missing icon - model is none`() = runBlockingTest {
+        setUpState(hasWalletIcon = false)
+        var latest: KeyguardQuickAffordanceConfig.State? = null
+
+        val job = underTest.state.onEach { latest = it }.launchIn(this)
+
+        assertThat(latest).isEqualTo(KeyguardQuickAffordanceConfig.State.Hidden)
+
+        job.cancel()
+    }
+
+    @Test
+    fun `affordance - no selected card - model is none`() = runBlockingTest {
+        setUpState(hasWalletIcon = false)
+        var latest: KeyguardQuickAffordanceConfig.State? = null
+
+        val job = underTest.state.onEach { latest = it }.launchIn(this)
+
+        assertThat(latest).isEqualTo(KeyguardQuickAffordanceConfig.State.Hidden)
+
+        job.cancel()
+    }
+
+    @Test
+    fun onQuickAffordanceClicked() {
+        val animationController: ActivityLaunchAnimator.Controller = mock()
+
+        assertThat(underTest.onQuickAffordanceClicked(animationController))
+            .isEqualTo(KeyguardQuickAffordanceConfig.OnClickedResult.Handled)
+        verify(walletController)
+            .startQuickAccessUiIntent(
+                activityStarter,
+                animationController,
+                /* hasCard= */ true,
+            )
+    }
+
+    private fun setUpState(
+        isWalletEnabled: Boolean = true,
+        isWalletQuerySuccessful: Boolean = true,
+        hasWalletIcon: Boolean = true,
+        hasSelectedCard: Boolean = true,
+    ) {
+        whenever(walletController.isWalletEnabled).thenReturn(isWalletEnabled)
+
+        val walletClient: QuickAccessWalletClient = mock()
+        val icon: Drawable? =
+            if (hasWalletIcon) {
+                ICON
+            } else {
+                null
+            }
+        whenever(walletClient.tileIcon).thenReturn(icon)
+        whenever(walletController.walletClient).thenReturn(walletClient)
+
+        whenever(walletController.queryWalletCards(any())).thenAnswer { invocation ->
+            with(
+                invocation.arguments[0] as QuickAccessWalletClient.OnWalletCardsRetrievedCallback
+            ) {
+                if (isWalletQuerySuccessful) {
+                    onWalletCardsRetrieved(
+                        if (hasSelectedCard) {
+                            GetWalletCardsResponse(listOf(mock()), 0)
+                        } else {
+                            GetWalletCardsResponse(emptyList(), 0)
+                        }
+                    )
+                } else {
+                    onWalletCardRetrievalError(mock())
+                }
+            }
+        }
+    }
+
+    companion object {
+        private val ICON: Drawable = mock()
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/FakeKeyguardQuickAffordanceConfig.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/FakeKeyguardQuickAffordanceConfig.kt
new file mode 100644
index 0000000..6fff440
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/FakeKeyguardQuickAffordanceConfig.kt
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 com.android.systemui.animation.ActivityLaunchAnimator
+import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceConfig
+import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceConfig.OnClickedResult
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.yield
+
+/**
+ * Fake implementation of a quick affordance data source.
+ *
+ * This class is abstract to force tests to provide extensions of it as the system that references
+ * these configs uses each implementation's class type to refer to them.
+ */
+abstract class FakeKeyguardQuickAffordanceConfig : KeyguardQuickAffordanceConfig {
+
+    private val _onClickedInvocations = mutableListOf<ActivityLaunchAnimator.Controller?>()
+    val onClickedInvocations: List<ActivityLaunchAnimator.Controller?> = _onClickedInvocations
+
+    var onClickedResult: OnClickedResult = OnClickedResult.Handled
+
+    private val _state =
+        MutableStateFlow<KeyguardQuickAffordanceConfig.State>(
+            KeyguardQuickAffordanceConfig.State.Hidden
+        )
+    override val state: Flow<KeyguardQuickAffordanceConfig.State> = _state
+
+    override fun onQuickAffordanceClicked(
+        animationController: ActivityLaunchAnimator.Controller?,
+    ): OnClickedResult {
+        _onClickedInvocations.add(animationController)
+        return onClickedResult
+    }
+
+    suspend fun setState(state: KeyguardQuickAffordanceConfig.State) {
+        _state.value = state
+        // Yield to allow the test's collection coroutine to "catch up" and collect this value
+        // before the test continues to the next line.
+        // TODO(b/239834928): once coroutines.test is updated, switch to the approach described in
+        // https://developer.android.com/kotlin/flow/test#continuous-collection and remove this.
+        yield()
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/FakeKeyguardQuickAffordanceConfigs.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/FakeKeyguardQuickAffordanceConfigs.kt
new file mode 100644
index 0000000..a24fc93
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/FakeKeyguardQuickAffordanceConfigs.kt
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 com.android.systemui.keyguard.data.config.KeyguardQuickAffordanceConfigs
+import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceConfig
+import com.android.systemui.keyguard.shared.model.KeyguardQuickAffordancePosition
+import kotlin.reflect.KClass
+
+/** Fake implementation of [KeyguardQuickAffordanceConfigs], for tests. */
+class FakeKeyguardQuickAffordanceConfigs(
+    private val configsByPosition:
+        Map<KeyguardQuickAffordancePosition, List<KeyguardQuickAffordanceConfig>>,
+) : KeyguardQuickAffordanceConfigs {
+
+    override fun getAll(
+        position: KeyguardQuickAffordancePosition
+    ): List<KeyguardQuickAffordanceConfig> {
+        return configsByPosition.getValue(position)
+    }
+
+    override fun get(
+        configClass: KClass<out KeyguardQuickAffordanceConfig>
+    ): KeyguardQuickAffordanceConfig {
+        return configsByPosition.values
+            .flatten()
+            .associateBy { config -> config::class }
+            .getValue(configClass)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/FakeKeyguardQuickAffordanceRepository.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/FakeKeyguardQuickAffordanceRepository.kt
new file mode 100644
index 0000000..10d2e4d
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/FakeKeyguardQuickAffordanceRepository.kt
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 com.android.systemui.keyguard.shared.model.KeyguardQuickAffordanceModel
+import com.android.systemui.keyguard.shared.model.KeyguardQuickAffordancePosition
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.yield
+
+/** Fake implementation of [KeyguardQuickAffordanceRepository], for tests. */
+class FakeKeyguardQuickAffordanceRepository : KeyguardQuickAffordanceRepository {
+
+    private val modelByPosition =
+        mutableMapOf<
+            KeyguardQuickAffordancePosition, MutableStateFlow<KeyguardQuickAffordanceModel>>()
+
+    init {
+        KeyguardQuickAffordancePosition.values().forEach { value ->
+            modelByPosition[value] = MutableStateFlow(KeyguardQuickAffordanceModel.Hidden)
+        }
+    }
+
+    override fun affordance(
+        position: KeyguardQuickAffordancePosition
+    ): Flow<KeyguardQuickAffordanceModel> {
+        return modelByPosition.getValue(position)
+    }
+
+    suspend fun setModel(
+        position: KeyguardQuickAffordancePosition,
+        model: KeyguardQuickAffordanceModel
+    ) {
+        modelByPosition.getValue(position).value = model
+        // Yield to allow the test's collection coroutine to "catch up" and collect this value
+        // before the test continues to the next line.
+        // TODO(b/239834928): once coroutines.test is updated, switch to the approach described in
+        // https://developer.android.com/kotlin/flow/test#continuous-collection and remove this.
+        yield()
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt
new file mode 100644
index 0000000..d40b985
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.keyguard.data.repository
+
+import com.android.systemui.common.data.model.Position
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.StateFlow
+
+/** Fake implementation of [KeyguardRepository] */
+class FakeKeyguardRepository : KeyguardRepository {
+
+    private val _animateBottomAreaDozingTransitions = MutableStateFlow(false)
+    override val animateBottomAreaDozingTransitions: StateFlow<Boolean> =
+        _animateBottomAreaDozingTransitions
+
+    private val _bottomAreaAlpha = MutableStateFlow(1f)
+    override val bottomAreaAlpha: StateFlow<Float> = _bottomAreaAlpha
+
+    private val _clockPosition = MutableStateFlow(Position(0, 0))
+    override val clockPosition: StateFlow<Position> = _clockPosition
+
+    private val _isKeyguardShowing = MutableStateFlow(false)
+    override val isKeyguardShowing: Flow<Boolean> = _isKeyguardShowing
+
+    private val _isDozing = MutableStateFlow(false)
+    override val isDozing: Flow<Boolean> = _isDozing
+
+    private val _dozeAmount = MutableStateFlow(0f)
+    override val dozeAmount: Flow<Float> = _dozeAmount
+
+    init {
+        setDozeAmount(0f)
+        setDozing(false)
+    }
+
+    override fun setAnimateDozingTransitions(animate: Boolean) {
+        _animateBottomAreaDozingTransitions.tryEmit(animate)
+    }
+
+    override fun setBottomAreaAlpha(alpha: Float) {
+        _bottomAreaAlpha.value = alpha
+    }
+
+    override fun setClockPosition(x: Int, y: Int) {
+        _clockPosition.value = Position(x, y)
+    }
+
+    fun setKeyguardShowing(isShowing: Boolean) {
+        _isKeyguardShowing.value = isShowing
+    }
+
+    fun setDozing(isDozing: Boolean) {
+        _isDozing.value = isDozing
+    }
+
+    fun setDozeAmount(dozeAmount: Float) {
+        _dozeAmount.value = dozeAmount
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/HomeControlsKeyguardQuickAffordanceConfigParameterizedStateTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/HomeControlsKeyguardQuickAffordanceConfigParameterizedStateTest.kt
new file mode 100644
index 0000000..bcc76ab
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/HomeControlsKeyguardQuickAffordanceConfigParameterizedStateTest.kt
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 androidx.test.filters.SmallTest
+import com.android.systemui.R
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.controls.controller.ControlsController
+import com.android.systemui.controls.dagger.ControlsComponent
+import com.android.systemui.controls.management.ControlsListingController
+import com.android.systemui.keyguard.data.quickaffordance.HomeControlsKeyguardQuickAffordanceConfig
+import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceConfig
+import com.android.systemui.util.mockito.mock
+import com.google.common.truth.Truth.assertThat
+import java.util.Optional
+import kotlinx.coroutines.flow.launchIn
+import kotlinx.coroutines.flow.onEach
+import kotlinx.coroutines.test.runBlockingTest
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
+import org.junit.runners.Parameterized.Parameter
+import org.junit.runners.Parameterized.Parameters
+import org.mockito.ArgumentCaptor
+import org.mockito.Captor
+import org.mockito.Mock
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when` as whenever
+import org.mockito.MockitoAnnotations
+
+@SmallTest
+@RunWith(Parameterized::class)
+class HomeControlsKeyguardQuickAffordanceConfigParameterizedStateTest : SysuiTestCase() {
+
+    companion object {
+        @Parameters(
+            name =
+                "feature enabled = {0}, has favorites = {1}, has service infos = {2} - expected" +
+                    " visible = {3}"
+        )
+        @JvmStatic
+        fun data() =
+            (0 until 8)
+                .map { combination ->
+                    arrayOf(
+                        /* isFeatureEnabled= */ combination and 0b100 != 0,
+                        /* hasFavorites= */ combination and 0b010 != 0,
+                        /* hasServiceInfos= */ combination and 0b001 != 0,
+                        /* isVisible= */ combination == 0b111,
+                    )
+                }
+                .toList()
+    }
+
+    @Mock private lateinit var component: ControlsComponent
+    @Mock private lateinit var controlsController: ControlsController
+    @Mock private lateinit var controlsListingController: ControlsListingController
+    @Captor
+    private lateinit var callbackCaptor:
+        ArgumentCaptor<ControlsListingController.ControlsListingCallback>
+
+    private lateinit var underTest: HomeControlsKeyguardQuickAffordanceConfig
+
+    @JvmField @Parameter(0) var isFeatureEnabled: Boolean = false
+    @JvmField @Parameter(1) var hasFavorites: Boolean = false
+    @JvmField @Parameter(2) var hasServiceInfos: Boolean = false
+    @JvmField @Parameter(3) var isVisible: Boolean = false
+
+    @Before
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+        whenever(component.getTileImageId()).thenReturn(R.drawable.controls_icon)
+        whenever(component.getTileTitleId()).thenReturn(R.string.quick_controls_title)
+        whenever(component.getControlsController()).thenReturn(Optional.of(controlsController))
+        whenever(component.getControlsListingController())
+            .thenReturn(Optional.of(controlsListingController))
+
+        underTest =
+            HomeControlsKeyguardQuickAffordanceConfig(
+                context = context,
+                component = component,
+            )
+    }
+
+    @Test
+    fun state() = runBlockingTest {
+        whenever(component.isEnabled()).thenReturn(isFeatureEnabled)
+        whenever(controlsController.getFavorites())
+            .thenReturn(
+                if (hasFavorites) {
+                    listOf(mock())
+                } else {
+                    emptyList()
+                }
+            )
+        val values = mutableListOf<KeyguardQuickAffordanceConfig.State>()
+        val job = underTest.state.onEach(values::add).launchIn(this)
+
+        verify(controlsListingController).addCallback(callbackCaptor.capture())
+        callbackCaptor.value.onServicesUpdated(
+            if (hasServiceInfos) {
+                listOf(mock())
+            } else {
+                emptyList()
+            }
+        )
+
+        assertThat(values.last())
+            .isInstanceOf(
+                if (isVisible) {
+                    KeyguardQuickAffordanceConfig.State.Visible::class.java
+                } else {
+                    KeyguardQuickAffordanceConfig.State.Hidden::class.java
+                }
+            )
+        job.cancel()
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardQuickAffordanceRepositoryImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardQuickAffordanceRepositoryImplTest.kt
new file mode 100644
index 0000000..dc0e6f7
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardQuickAffordanceRepositoryImplTest.kt
@@ -0,0 +1,193 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceConfig
+import com.android.systemui.keyguard.shared.model.KeyguardQuickAffordanceModel
+import com.android.systemui.keyguard.shared.model.KeyguardQuickAffordancePosition
+import com.android.systemui.util.mockito.mock
+import com.google.common.truth.Truth.assertThat
+import kotlin.reflect.KClass
+import kotlinx.coroutines.flow.launchIn
+import kotlinx.coroutines.flow.onEach
+import kotlinx.coroutines.test.runBlockingTest
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.mockito.MockitoAnnotations
+
+@SmallTest
+@RunWith(JUnit4::class)
+class KeyguardQuickAffordanceRepositoryImplTest : SysuiTestCase() {
+
+    private lateinit var underTest: KeyguardQuickAffordanceRepository
+
+    private lateinit var homeControls: FakeKeyguardQuickAffordanceConfig
+    private lateinit var quickAccessWallet: FakeKeyguardQuickAffordanceConfig
+    private lateinit var qrCodeScanner: FakeKeyguardQuickAffordanceConfig
+
+    @Before
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+
+        homeControls = object : FakeKeyguardQuickAffordanceConfig() {}
+        quickAccessWallet = object : FakeKeyguardQuickAffordanceConfig() {}
+        qrCodeScanner = object : FakeKeyguardQuickAffordanceConfig() {}
+
+        underTest =
+            KeyguardQuickAffordanceRepositoryImpl(
+                configs =
+                    FakeKeyguardQuickAffordanceConfigs(
+                        mapOf(
+                            KeyguardQuickAffordancePosition.BOTTOM_START to
+                                listOf(
+                                    homeControls,
+                                ),
+                            KeyguardQuickAffordancePosition.BOTTOM_END to
+                                listOf(
+                                    quickAccessWallet,
+                                    qrCodeScanner,
+                                ),
+                        ),
+                    ),
+            )
+    }
+
+    @Test
+    fun `bottom start affordance - none`() = runBlockingTest {
+        // TODO(b/239834928): once coroutines.test is updated, switch to the approach described in
+        // https://developer.android.com/kotlin/flow/test#continuous-collection
+        var latest: KeyguardQuickAffordanceModel? = null
+        val job =
+            underTest
+                .affordance(KeyguardQuickAffordancePosition.BOTTOM_START)
+                .onEach { latest = it }
+                .launchIn(this)
+
+        assertThat(latest).isEqualTo(KeyguardQuickAffordanceModel.Hidden)
+        job.cancel()
+    }
+
+    @Test
+    fun `bottom start affordance - home controls`() = runBlockingTest {
+        // TODO(b/239834928): once coroutines.test is updated, switch to the approach described in
+        // https://developer.android.com/kotlin/flow/test#continuous-collection
+        var latest: KeyguardQuickAffordanceModel? = null
+        val job =
+            underTest
+                .affordance(KeyguardQuickAffordancePosition.BOTTOM_START)
+                .onEach { latest = it }
+                .launchIn(this)
+
+        val state =
+            KeyguardQuickAffordanceConfig.State.Visible(
+                icon = mock(),
+                contentDescriptionResourceId = CONTENT_DESCRIPTION_RESOURCE_ID,
+            )
+        homeControls.setState(state)
+
+        assertThat(latest).isEqualTo(state.toModel(homeControls::class))
+        job.cancel()
+    }
+
+    @Test
+    fun `bottom end affordance - none`() = runBlockingTest {
+        // TODO(b/239834928): once coroutines.test is updated, switch to the approach described in
+        // https://developer.android.com/kotlin/flow/test#continuous-collection
+        var latest: KeyguardQuickAffordanceModel? = null
+        val job =
+            underTest
+                .affordance(KeyguardQuickAffordancePosition.BOTTOM_END)
+                .onEach { latest = it }
+                .launchIn(this)
+
+        assertThat(latest).isEqualTo(KeyguardQuickAffordanceModel.Hidden)
+        job.cancel()
+    }
+
+    @Test
+    fun `bottom end affordance - quick access wallet`() = runBlockingTest {
+        // TODO(b/239834928): once coroutines.test is updated, switch to the approach described in
+        // https://developer.android.com/kotlin/flow/test#continuous-collection
+        var latest: KeyguardQuickAffordanceModel? = null
+        val job =
+            underTest
+                .affordance(KeyguardQuickAffordancePosition.BOTTOM_END)
+                .onEach { latest = it }
+                .launchIn(this)
+
+        val quickAccessWalletState =
+            KeyguardQuickAffordanceConfig.State.Visible(
+                icon = mock(),
+                contentDescriptionResourceId = CONTENT_DESCRIPTION_RESOURCE_ID,
+            )
+        quickAccessWallet.setState(quickAccessWalletState)
+        val qrCodeScannerState =
+            KeyguardQuickAffordanceConfig.State.Visible(
+                icon = mock(),
+                contentDescriptionResourceId = CONTENT_DESCRIPTION_RESOURCE_ID,
+            )
+        qrCodeScanner.setState(qrCodeScannerState)
+
+        assertThat(latest).isEqualTo(quickAccessWalletState.toModel(quickAccessWallet::class))
+        job.cancel()
+    }
+
+    @Test
+    fun `bottom end affordance - qr code scanner`() = runBlockingTest {
+        // TODO(b/239834928): once coroutines.test is updated, switch to the approach described in
+        // https://developer.android.com/kotlin/flow/test#continuous-collection
+        var latest: KeyguardQuickAffordanceModel? = null
+        val job =
+            underTest
+                .affordance(KeyguardQuickAffordancePosition.BOTTOM_END)
+                .onEach { latest = it }
+                .launchIn(this)
+
+        val state =
+            KeyguardQuickAffordanceConfig.State.Visible(
+                icon = mock(),
+                contentDescriptionResourceId = CONTENT_DESCRIPTION_RESOURCE_ID,
+            )
+        qrCodeScanner.setState(state)
+
+        assertThat(latest).isEqualTo(state.toModel(qrCodeScanner::class))
+        job.cancel()
+    }
+
+    private fun KeyguardQuickAffordanceConfig.State?.toModel(
+        configKey: KClass<out KeyguardQuickAffordanceConfig>,
+    ): KeyguardQuickAffordanceModel? {
+        return when (this) {
+            is KeyguardQuickAffordanceConfig.State.Visible ->
+                KeyguardQuickAffordanceModel.Visible(
+                    configKey = configKey,
+                    icon = icon,
+                    contentDescriptionResourceId = CONTENT_DESCRIPTION_RESOURCE_ID,
+                )
+            is KeyguardQuickAffordanceConfig.State.Hidden -> KeyguardQuickAffordanceModel.Hidden
+            null -> null
+        }
+    }
+
+    companion object {
+        private const val CONTENT_DESCRIPTION_RESOURCE_ID = 1337
+    }
+}
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
new file mode 100644
index 0000000..3d2c51a
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardRepositoryImplTest.kt
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.common.data.model.Position
+import com.android.systemui.plugins.statusbar.StatusBarStateController
+import com.android.systemui.statusbar.policy.KeyguardStateController
+import com.android.systemui.util.mockito.argumentCaptor
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.flow.launchIn
+import kotlinx.coroutines.flow.onEach
+import kotlinx.coroutines.test.runBlockingTest
+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.verify
+import org.mockito.Mockito.`when` as whenever
+import org.mockito.MockitoAnnotations
+
+@SmallTest
+@RunWith(JUnit4::class)
+class KeyguardRepositoryImplTest : SysuiTestCase() {
+
+    @Mock private lateinit var statusBarStateController: StatusBarStateController
+    @Mock private lateinit var keyguardStateController: KeyguardStateController
+
+    private lateinit var underTest: KeyguardRepositoryImpl
+
+    @Before
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+
+        underTest = KeyguardRepositoryImpl(statusBarStateController, keyguardStateController)
+    }
+
+    @Test
+    fun animateBottomAreaDozingTransitions() = runBlockingTest {
+        assertThat(underTest.animateBottomAreaDozingTransitions.value).isEqualTo(false)
+
+        underTest.setAnimateDozingTransitions(true)
+        assertThat(underTest.animateBottomAreaDozingTransitions.value).isTrue()
+
+        underTest.setAnimateDozingTransitions(false)
+        assertThat(underTest.animateBottomAreaDozingTransitions.value).isFalse()
+
+        underTest.setAnimateDozingTransitions(true)
+        assertThat(underTest.animateBottomAreaDozingTransitions.value).isTrue()
+    }
+
+    @Test
+    fun bottomAreaAlpha() = runBlockingTest {
+        assertThat(underTest.bottomAreaAlpha.value).isEqualTo(1f)
+
+        underTest.setBottomAreaAlpha(0.1f)
+        assertThat(underTest.bottomAreaAlpha.value).isEqualTo(0.1f)
+
+        underTest.setBottomAreaAlpha(0.2f)
+        assertThat(underTest.bottomAreaAlpha.value).isEqualTo(0.2f)
+
+        underTest.setBottomAreaAlpha(0.3f)
+        assertThat(underTest.bottomAreaAlpha.value).isEqualTo(0.3f)
+
+        underTest.setBottomAreaAlpha(0.5f)
+        assertThat(underTest.bottomAreaAlpha.value).isEqualTo(0.5f)
+
+        underTest.setBottomAreaAlpha(1.0f)
+        assertThat(underTest.bottomAreaAlpha.value).isEqualTo(1f)
+    }
+
+    @Test
+    fun clockPosition() = runBlockingTest {
+        assertThat(underTest.clockPosition.value).isEqualTo(Position(0, 0))
+
+        underTest.setClockPosition(0, 1)
+        assertThat(underTest.clockPosition.value).isEqualTo(Position(0, 1))
+
+        underTest.setClockPosition(1, 9)
+        assertThat(underTest.clockPosition.value).isEqualTo(Position(1, 9))
+
+        underTest.setClockPosition(1, 0)
+        assertThat(underTest.clockPosition.value).isEqualTo(Position(1, 0))
+
+        underTest.setClockPosition(3, 1)
+        assertThat(underTest.clockPosition.value).isEqualTo(Position(3, 1))
+    }
+
+    @Test
+    fun isKeyguardShowing() = runBlockingTest {
+        whenever(keyguardStateController.isShowing).thenReturn(false)
+        var latest: Boolean? = null
+        val job = underTest.isKeyguardShowing.onEach { latest = it }.launchIn(this)
+
+        assertThat(latest).isFalse()
+
+        val captor = argumentCaptor<KeyguardStateController.Callback>()
+        verify(keyguardStateController).addCallback(captor.capture())
+
+        whenever(keyguardStateController.isShowing).thenReturn(true)
+        captor.value.onKeyguardShowingChanged()
+        assertThat(latest).isTrue()
+
+        whenever(keyguardStateController.isShowing).thenReturn(false)
+        captor.value.onKeyguardShowingChanged()
+        assertThat(latest).isFalse()
+
+        job.cancel()
+    }
+
+    @Test
+    fun isDozing() = runBlockingTest {
+        var latest: Boolean? = null
+        val job = underTest.isDozing.onEach { latest = it }.launchIn(this)
+
+        val captor = argumentCaptor<StatusBarStateController.StateListener>()
+        verify(statusBarStateController).addCallback(captor.capture())
+
+        captor.value.onDozingChanged(true)
+        assertThat(latest).isTrue()
+
+        captor.value.onDozingChanged(false)
+        assertThat(latest).isFalse()
+
+        job.cancel()
+        verify(statusBarStateController).removeCallback(captor.value)
+    }
+
+    @Test
+    fun dozeAmount() = runBlockingTest {
+        val values = mutableListOf<Float>()
+        val job = underTest.dozeAmount.onEach(values::add).launchIn(this)
+
+        val captor = argumentCaptor<StatusBarStateController.StateListener>()
+        verify(statusBarStateController).addCallback(captor.capture())
+
+        captor.value.onDozeAmountChanged(0.433f, 0.4f)
+        captor.value.onDozeAmountChanged(0.498f, 0.5f)
+        captor.value.onDozeAmountChanged(0.661f, 0.65f)
+
+        assertThat(values).isEqualTo(listOf(0f, 0.4f, 0.5f, 0.65f))
+
+        job.cancel()
+        verify(statusBarStateController).removeCallback(captor.value)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/usecase/FakeLaunchKeyguardQuickAffordanceUseCase.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/usecase/FakeLaunchKeyguardQuickAffordanceUseCase.kt
new file mode 100644
index 0000000..ba0c31f
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/usecase/FakeLaunchKeyguardQuickAffordanceUseCase.kt
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.usecase
+
+import android.content.Intent
+import com.android.systemui.animation.ActivityLaunchAnimator
+
+/** Fake implementation of [LaunchKeyguardQuickAffordanceUseCase], for tests. */
+class FakeLaunchKeyguardQuickAffordanceUseCase : LaunchKeyguardQuickAffordanceUseCase {
+
+    data class Invocation(
+        val intent: Intent,
+        val canShowWhileLocked: Boolean,
+        val animationController: ActivityLaunchAnimator.Controller?
+    )
+
+    private val _invocations = mutableListOf<Invocation>()
+    val invocations: List<Invocation> = _invocations
+
+    override fun invoke(
+        intent: Intent,
+        canShowWhileLocked: Boolean,
+        animationController: ActivityLaunchAnimator.Controller?
+    ) {
+        _invocations.add(
+            Invocation(
+                intent = intent,
+                canShowWhileLocked = canShowWhileLocked,
+                animationController = animationController,
+            )
+        )
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/usecase/LaunchKeyguardQuickAffordanceUseCaseImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/usecase/LaunchKeyguardQuickAffordanceUseCaseImplTest.kt
new file mode 100644
index 0000000..b3c1ae0
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/usecase/LaunchKeyguardQuickAffordanceUseCaseImplTest.kt
@@ -0,0 +1,178 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.usecase
+
+import android.content.Intent
+import androidx.test.filters.SmallTest
+import com.android.internal.widget.LockPatternUtils
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.animation.ActivityLaunchAnimator
+import com.android.systemui.plugins.ActivityStarter
+import com.android.systemui.settings.UserTracker
+import com.android.systemui.statusbar.policy.KeyguardStateController
+import com.android.systemui.util.mockito.any
+import com.android.systemui.util.mockito.mock
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
+import org.junit.runners.Parameterized.Parameter
+import org.junit.runners.Parameterized.Parameters
+import org.mockito.Mock
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when` as whenever
+import org.mockito.MockitoAnnotations
+
+@SmallTest
+@RunWith(Parameterized::class)
+class LaunchKeyguardQuickAffordanceUseCaseImplTest : SysuiTestCase() {
+
+    companion object {
+        private val INTENT = Intent("some.intent.action")
+
+        @Parameters(
+            name =
+                "needStrongAuthAfterBoot={0}, canShowWhileLocked={1}," +
+                    " keyguardIsUnlocked={2}, needsToUnlockFirst={3}"
+        )
+        @JvmStatic
+        fun data() =
+            listOf(
+                arrayOf(
+                    /* needStrongAuthAfterBoot= */ false,
+                    /* canShowWhileLocked= */ false,
+                    /* keyguardIsUnlocked= */ false,
+                    /* needsToUnlockFirst= */ true,
+                ),
+                arrayOf(
+                    /* needStrongAuthAfterBoot= */ false,
+                    /* canShowWhileLocked= */ false,
+                    /* keyguardIsUnlocked= */ true,
+                    /* needsToUnlockFirst= */ false,
+                ),
+                arrayOf(
+                    /* needStrongAuthAfterBoot= */ false,
+                    /* canShowWhileLocked= */ true,
+                    /* keyguardIsUnlocked= */ false,
+                    /* needsToUnlockFirst= */ false,
+                ),
+                arrayOf(
+                    /* needStrongAuthAfterBoot= */ false,
+                    /* canShowWhileLocked= */ true,
+                    /* keyguardIsUnlocked= */ true,
+                    /* needsToUnlockFirst= */ false,
+                ),
+                arrayOf(
+                    /* needStrongAuthAfterBoot= */ true,
+                    /* canShowWhileLocked= */ false,
+                    /* keyguardIsUnlocked= */ false,
+                    /* needsToUnlockFirst= */ true,
+                ),
+                arrayOf(
+                    /* needStrongAuthAfterBoot= */ true,
+                    /* canShowWhileLocked= */ false,
+                    /* keyguardIsUnlocked= */ true,
+                    /* needsToUnlockFirst= */ true,
+                ),
+                arrayOf(
+                    /* needStrongAuthAfterBoot= */ true,
+                    /* canShowWhileLocked= */ true,
+                    /* keyguardIsUnlocked= */ false,
+                    /* needsToUnlockFirst= */ true,
+                ),
+                arrayOf(
+                    /* needStrongAuthAfterBoot= */ true,
+                    /* canShowWhileLocked= */ true,
+                    /* keyguardIsUnlocked= */ true,
+                    /* needsToUnlockFirst= */ true,
+                ),
+            )
+    }
+
+    @Mock private lateinit var lockPatternUtils: LockPatternUtils
+    @Mock private lateinit var keyguardStateController: KeyguardStateController
+    @Mock private lateinit var userTracker: UserTracker
+    @Mock private lateinit var activityStarter: ActivityStarter
+    @Mock private lateinit var animationController: ActivityLaunchAnimator.Controller
+
+    private lateinit var underTest: LaunchKeyguardQuickAffordanceUseCase
+
+    @JvmField @Parameter(0) var needStrongAuthAfterBoot: Boolean = false
+    @JvmField @Parameter(1) var canShowWhileLocked: Boolean = false
+    @JvmField @Parameter(2) var keyguardIsUnlocked: Boolean = false
+    @JvmField @Parameter(3) var needsToUnlockFirst: Boolean = false
+
+    @Before
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+
+        underTest =
+            LaunchKeyguardQuickAffordanceUseCaseImpl(
+                lockPatternUtils = lockPatternUtils,
+                keyguardStateController = keyguardStateController,
+                userTracker = userTracker,
+                activityStarter = activityStarter,
+            )
+    }
+
+    @Test
+    fun invoke() {
+        setUpMocks(
+            needStrongAuthAfterBoot = needStrongAuthAfterBoot,
+            keyguardIsUnlocked = keyguardIsUnlocked,
+        )
+
+        underTest(
+            intent = INTENT,
+            canShowWhileLocked = canShowWhileLocked,
+            animationController = animationController,
+        )
+
+        if (needsToUnlockFirst) {
+            verify(activityStarter)
+                .postStartActivityDismissingKeyguard(
+                    INTENT,
+                    /* delay= */ 0,
+                    animationController,
+                )
+        } else {
+            verify(activityStarter)
+                .startActivity(
+                    INTENT,
+                    /* dismissShade= */ true,
+                    animationController,
+                    /* showOverLockscreenWhenLocked= */ true,
+                )
+        }
+    }
+
+    private fun setUpMocks(
+        needStrongAuthAfterBoot: Boolean = true,
+        keyguardIsUnlocked: Boolean = false,
+    ) {
+        whenever(userTracker.userHandle).thenReturn(mock())
+        whenever(lockPatternUtils.getStrongAuthForUser(any()))
+            .thenReturn(
+                if (needStrongAuthAfterBoot) {
+                    LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_BOOT
+                } else {
+                    LockPatternUtils.StrongAuthTracker.STRONG_AUTH_NOT_REQUIRED
+                }
+            )
+        whenever(keyguardStateController.isUnlocked).thenReturn(keyguardIsUnlocked)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/usecase/ObserveKeyguardQuickAffordanceUseCaseTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/usecase/ObserveKeyguardQuickAffordanceUseCaseTest.kt
new file mode 100644
index 0000000..b90400be
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/usecase/ObserveKeyguardQuickAffordanceUseCaseTest.kt
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.usecase
+
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.containeddrawable.ContainedDrawable
+import com.android.systemui.keyguard.data.quickaffordance.HomeControlsKeyguardQuickAffordanceConfig
+import com.android.systemui.keyguard.data.repository.FakeKeyguardQuickAffordanceRepository
+import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
+import com.android.systemui.keyguard.shared.model.KeyguardQuickAffordanceModel
+import com.android.systemui.keyguard.shared.model.KeyguardQuickAffordancePosition
+import com.android.systemui.util.mockito.mock
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.flow.launchIn
+import kotlinx.coroutines.flow.onEach
+import kotlinx.coroutines.test.runBlockingTest
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@SmallTest
+@RunWith(JUnit4::class)
+class ObserveKeyguardQuickAffordanceUseCaseTest : SysuiTestCase() {
+
+    private lateinit var underTest: ObserveKeyguardQuickAffordanceUseCase
+
+    private lateinit var repository: FakeKeyguardRepository
+    private lateinit var quickAffordanceRepository: FakeKeyguardQuickAffordanceRepository
+    private lateinit var isDozingUseCase: ObserveIsDozingUseCase
+    private lateinit var isKeyguardShowingUseCase: ObserveIsKeyguardShowingUseCase
+
+    @Before
+    fun setUp() {
+        repository = FakeKeyguardRepository()
+        repository.setKeyguardShowing(true)
+        isDozingUseCase = ObserveIsDozingUseCase(repository)
+        isKeyguardShowingUseCase = ObserveIsKeyguardShowingUseCase(repository)
+        quickAffordanceRepository = FakeKeyguardQuickAffordanceRepository()
+
+        underTest =
+            ObserveKeyguardQuickAffordanceUseCase(
+                repository = quickAffordanceRepository,
+                isDozingUseCase = isDozingUseCase,
+                isKeyguardShowingUseCase = isKeyguardShowingUseCase,
+            )
+    }
+
+    @Test
+    fun `invoke - affordance is visible`() = runBlockingTest {
+        val configKey = HomeControlsKeyguardQuickAffordanceConfig::class
+        val model =
+            KeyguardQuickAffordanceModel.Visible(
+                configKey = configKey,
+                icon = ICON,
+                contentDescriptionResourceId = CONTENT_DESCRIPTION_RESOURCE_ID,
+            )
+        quickAffordanceRepository.setModel(
+            KeyguardQuickAffordancePosition.BOTTOM_END,
+            model,
+        )
+
+        var latest: KeyguardQuickAffordanceModel? = null
+        val job =
+            underTest(KeyguardQuickAffordancePosition.BOTTOM_END)
+                .onEach { latest = it }
+                .launchIn(this)
+
+        assertThat(latest).isInstanceOf(KeyguardQuickAffordanceModel.Visible::class.java)
+        val visibleModel = latest as KeyguardQuickAffordanceModel.Visible
+        assertThat(visibleModel.configKey).isEqualTo(configKey)
+        assertThat(visibleModel.icon).isEqualTo(ICON)
+        assertThat(visibleModel.contentDescriptionResourceId)
+            .isEqualTo(CONTENT_DESCRIPTION_RESOURCE_ID)
+        job.cancel()
+    }
+
+    @Test
+    fun `invoke - affordance not visible while dozing`() = runBlockingTest {
+        repository.setDozing(true)
+        val configKey = HomeControlsKeyguardQuickAffordanceConfig::class
+        val model =
+            KeyguardQuickAffordanceModel.Visible(
+                configKey = configKey,
+                icon = ICON,
+                contentDescriptionResourceId = CONTENT_DESCRIPTION_RESOURCE_ID,
+            )
+        quickAffordanceRepository.setModel(
+            KeyguardQuickAffordancePosition.BOTTOM_END,
+            model,
+        )
+
+        var latest: KeyguardQuickAffordanceModel? = null
+        val job =
+            underTest(KeyguardQuickAffordancePosition.BOTTOM_END)
+                .onEach { latest = it }
+                .launchIn(this)
+        assertThat(latest).isEqualTo(KeyguardQuickAffordanceModel.Hidden)
+        job.cancel()
+    }
+
+    @Test
+    fun `invoke - affordance not visible when lockscreen is not showing`() = runBlockingTest {
+        repository.setKeyguardShowing(false)
+        val configKey = HomeControlsKeyguardQuickAffordanceConfig::class
+        val model =
+            KeyguardQuickAffordanceModel.Visible(
+                configKey = configKey,
+                icon = ICON,
+                contentDescriptionResourceId = CONTENT_DESCRIPTION_RESOURCE_ID,
+            )
+        quickAffordanceRepository.setModel(
+            KeyguardQuickAffordancePosition.BOTTOM_END,
+            model,
+        )
+
+        var latest: KeyguardQuickAffordanceModel? = null
+        val job =
+            underTest(KeyguardQuickAffordancePosition.BOTTOM_END)
+                .onEach { latest = it }
+                .launchIn(this)
+        assertThat(latest).isEqualTo(KeyguardQuickAffordanceModel.Hidden)
+        job.cancel()
+    }
+
+    @Test
+    fun `invoke - affordance is none`() = runBlockingTest {
+        quickAffordanceRepository.setModel(
+            KeyguardQuickAffordancePosition.BOTTOM_START,
+            KeyguardQuickAffordanceModel.Hidden,
+        )
+
+        var latest: KeyguardQuickAffordanceModel? = null
+        val job =
+            underTest(KeyguardQuickAffordancePosition.BOTTOM_START)
+                .onEach { latest = it }
+                .launchIn(this)
+        assertThat(latest).isEqualTo(KeyguardQuickAffordanceModel.Hidden)
+        job.cancel()
+    }
+
+    companion object {
+        private val ICON: ContainedDrawable = mock()
+        private const val CONTENT_DESCRIPTION_RESOURCE_ID = 1337
+    }
+}
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
new file mode 100644
index 0000000..00dd58e
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModelTest.kt
@@ -0,0 +1,503 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.ui.viewmodel
+
+import android.content.Intent
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.animation.ActivityLaunchAnimator
+import com.android.systemui.containeddrawable.ContainedDrawable
+import com.android.systemui.doze.util.BurnInHelperWrapper
+import com.android.systemui.keyguard.data.quickaffordance.KeyguardQuickAffordanceConfig
+import com.android.systemui.keyguard.data.repository.FakeKeyguardQuickAffordanceConfig
+import com.android.systemui.keyguard.data.repository.FakeKeyguardQuickAffordanceConfigs
+import com.android.systemui.keyguard.data.repository.FakeKeyguardQuickAffordanceRepository
+import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
+import com.android.systemui.keyguard.domain.usecase.FakeLaunchKeyguardQuickAffordanceUseCase
+import com.android.systemui.keyguard.domain.usecase.ObserveAnimateBottomAreaTransitionsUseCase
+import com.android.systemui.keyguard.domain.usecase.ObserveBottomAreaAlphaUseCase
+import com.android.systemui.keyguard.domain.usecase.ObserveClockPositionUseCase
+import com.android.systemui.keyguard.domain.usecase.ObserveDozeAmountUseCase
+import com.android.systemui.keyguard.domain.usecase.ObserveIsDozingUseCase
+import com.android.systemui.keyguard.domain.usecase.ObserveIsKeyguardShowingUseCase
+import com.android.systemui.keyguard.domain.usecase.ObserveKeyguardQuickAffordanceUseCase
+import com.android.systemui.keyguard.domain.usecase.OnKeyguardQuickAffordanceClickedUseCase
+import com.android.systemui.keyguard.shared.model.KeyguardQuickAffordanceModel
+import com.android.systemui.keyguard.shared.model.KeyguardQuickAffordancePosition
+import com.android.systemui.util.mockito.any
+import com.android.systemui.util.mockito.mock
+import com.google.common.truth.Truth.assertThat
+import kotlin.reflect.KClass
+import kotlinx.coroutines.flow.launchIn
+import kotlinx.coroutines.flow.onEach
+import kotlinx.coroutines.test.runBlockingTest
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.mockito.ArgumentMatchers.anyInt
+import org.mockito.Mock
+import org.mockito.Mockito.`when` as whenever
+import org.mockito.MockitoAnnotations
+
+@SmallTest
+@RunWith(JUnit4::class)
+class KeyguardBottomAreaViewModelTest : SysuiTestCase() {
+
+    @Mock private lateinit var animationController: ActivityLaunchAnimator.Controller
+    @Mock private lateinit var burnInHelperWrapper: BurnInHelperWrapper
+
+    private lateinit var underTest: KeyguardBottomAreaViewModel
+
+    private lateinit var affordanceRepository: FakeKeyguardQuickAffordanceRepository
+    private lateinit var repository: FakeKeyguardRepository
+    private lateinit var isDozingUseCase: ObserveIsDozingUseCase
+    private lateinit var isKeyguardShowingUseCase: ObserveIsKeyguardShowingUseCase
+    private lateinit var launchQuickAffordanceUseCase: FakeLaunchKeyguardQuickAffordanceUseCase
+    private lateinit var homeControlsQuickAffordanceConfig: FakeKeyguardQuickAffordanceConfig
+    private lateinit var quickAccessWalletAffordanceConfig: FakeKeyguardQuickAffordanceConfig
+    private lateinit var qrCodeScannerAffordanceConfig: FakeKeyguardQuickAffordanceConfig
+
+    @Before
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+        whenever(burnInHelperWrapper.burnInOffset(anyInt(), any()))
+            .thenReturn(RETURNED_BURN_IN_OFFSET)
+
+        affordanceRepository = FakeKeyguardQuickAffordanceRepository()
+        repository = FakeKeyguardRepository()
+        isDozingUseCase =
+            ObserveIsDozingUseCase(
+                repository = repository,
+            )
+        isKeyguardShowingUseCase =
+            ObserveIsKeyguardShowingUseCase(
+                repository = repository,
+            )
+        launchQuickAffordanceUseCase = FakeLaunchKeyguardQuickAffordanceUseCase()
+        homeControlsQuickAffordanceConfig = object : FakeKeyguardQuickAffordanceConfig() {}
+        quickAccessWalletAffordanceConfig = object : FakeKeyguardQuickAffordanceConfig() {}
+        qrCodeScannerAffordanceConfig = object : FakeKeyguardQuickAffordanceConfig() {}
+
+        underTest =
+            KeyguardBottomAreaViewModel(
+                observeQuickAffordanceUseCase =
+                    ObserveKeyguardQuickAffordanceUseCase(
+                        repository = affordanceRepository,
+                        isDozingUseCase = isDozingUseCase,
+                        isKeyguardShowingUseCase = isKeyguardShowingUseCase,
+                    ),
+                onQuickAffordanceClickedUseCase =
+                    OnKeyguardQuickAffordanceClickedUseCase(
+                        configs =
+                            FakeKeyguardQuickAffordanceConfigs(
+                                mapOf(
+                                    KeyguardQuickAffordancePosition.BOTTOM_START to
+                                        listOf(
+                                            homeControlsQuickAffordanceConfig,
+                                        ),
+                                    KeyguardQuickAffordancePosition.BOTTOM_END to
+                                        listOf(
+                                            quickAccessWalletAffordanceConfig,
+                                            qrCodeScannerAffordanceConfig,
+                                        ),
+                                ),
+                            ),
+                        launchAffordanceUseCase = launchQuickAffordanceUseCase,
+                    ),
+                observeBottomAreaAlphaUseCase =
+                    ObserveBottomAreaAlphaUseCase(
+                        repository = repository,
+                    ),
+                observeIsDozingUseCase = isDozingUseCase,
+                observeAnimateBottomAreaTransitionsUseCase =
+                    ObserveAnimateBottomAreaTransitionsUseCase(
+                        repository = repository,
+                    ),
+                observeDozeAmountUseCase =
+                    ObserveDozeAmountUseCase(
+                        repository = repository,
+                    ),
+                observeClockPositionUseCase =
+                    ObserveClockPositionUseCase(
+                        repository = repository,
+                    ),
+                burnInHelperWrapper = burnInHelperWrapper,
+            )
+    }
+
+    @Test
+    fun `startButton - present - not dozing - lockscreen showing - visible model - starts activity on click`() = // ktlint-disable max-line-length
+        runBlockingTest {
+            var latest: KeyguardQuickAffordanceViewModel? = null
+            val job = underTest.startButton.onEach { latest = it }.launchIn(this)
+
+            repository.setDozing(false)
+            repository.setKeyguardShowing(true)
+            val testConfig =
+                TestConfig(
+                    isVisible = true,
+                    icon = mock(),
+                    canShowWhileLocked = false,
+                    intent = Intent("action"),
+                )
+            val configKey =
+                setUpQuickAffordanceModel(
+                    position = KeyguardQuickAffordancePosition.BOTTOM_START,
+                    testConfig = testConfig,
+                )
+
+            assertQuickAffordanceViewModel(
+                viewModel = latest,
+                testConfig = testConfig,
+                configKey = configKey,
+            )
+            job.cancel()
+        }
+
+    @Test
+    fun `endButton - present - not dozing - lockscreen showing - visible model - do nothing on click`() = // ktlint-disable max-line-length
+        runBlockingTest {
+            var latest: KeyguardQuickAffordanceViewModel? = null
+            val job = underTest.endButton.onEach { latest = it }.launchIn(this)
+
+            repository.setDozing(false)
+            repository.setKeyguardShowing(true)
+            val config =
+                TestConfig(
+                    isVisible = true,
+                    icon = mock(),
+                    canShowWhileLocked = false,
+                    intent =
+                        null, // This will cause it to tell the system that the click was handled.
+                )
+            val configKey =
+                setUpQuickAffordanceModel(
+                    position = KeyguardQuickAffordancePosition.BOTTOM_END,
+                    testConfig = config,
+                )
+
+            assertQuickAffordanceViewModel(
+                viewModel = latest,
+                testConfig = config,
+                configKey = configKey,
+            )
+            job.cancel()
+        }
+
+    @Test
+    fun `startButton - not present - not dozing - lockscreen showing - model is none`() =
+        runBlockingTest {
+            var latest: KeyguardQuickAffordanceViewModel? = null
+            val job = underTest.startButton.onEach { latest = it }.launchIn(this)
+
+            repository.setDozing(false)
+            repository.setKeyguardShowing(true)
+            val config =
+                TestConfig(
+                    isVisible = false,
+                )
+            val configKey =
+                setUpQuickAffordanceModel(
+                    position = KeyguardQuickAffordancePosition.BOTTOM_START,
+                    testConfig = config,
+                )
+
+            assertQuickAffordanceViewModel(
+                viewModel = latest,
+                testConfig = config,
+                configKey = configKey,
+            )
+            job.cancel()
+        }
+
+    @Test
+    fun `startButton - present - dozing - lockscreen showing - model is none`() = runBlockingTest {
+        var latest: KeyguardQuickAffordanceViewModel? = null
+        val job = underTest.startButton.onEach { latest = it }.launchIn(this)
+
+        repository.setDozing(true)
+        repository.setKeyguardShowing(true)
+        val config =
+            TestConfig(
+                isVisible = true,
+                icon = mock(),
+                canShowWhileLocked = false,
+                intent = Intent("action"),
+            )
+        val configKey =
+            setUpQuickAffordanceModel(
+                position = KeyguardQuickAffordancePosition.BOTTOM_START,
+                testConfig = config,
+            )
+
+        assertQuickAffordanceViewModel(
+            viewModel = latest,
+            testConfig = TestConfig(isVisible = false),
+            configKey = configKey,
+        )
+        job.cancel()
+    }
+
+    @Test
+    fun `startButton - present - not dozing - lockscreen not showing - model is none`() =
+        runBlockingTest {
+            var latest: KeyguardQuickAffordanceViewModel? = null
+            val job = underTest.startButton.onEach { latest = it }.launchIn(this)
+
+            repository.setDozing(false)
+            repository.setKeyguardShowing(false)
+            val config =
+                TestConfig(
+                    isVisible = true,
+                    icon = mock(),
+                    canShowWhileLocked = false,
+                    intent = Intent("action"),
+                )
+            val configKey =
+                setUpQuickAffordanceModel(
+                    position = KeyguardQuickAffordancePosition.BOTTOM_START,
+                    testConfig = config,
+                )
+
+            assertQuickAffordanceViewModel(
+                viewModel = latest,
+                testConfig = TestConfig(isVisible = false),
+                configKey = configKey,
+            )
+            job.cancel()
+        }
+
+    @Test
+    fun animateButtonReveal() = runBlockingTest {
+        val values = mutableListOf<Boolean>()
+        val job = underTest.animateButtonReveal.onEach(values::add).launchIn(this)
+
+        repository.setAnimateDozingTransitions(true)
+        repository.setAnimateDozingTransitions(false)
+
+        assertThat(values).isEqualTo(listOf(false, true, false))
+        job.cancel()
+    }
+
+    @Test
+    fun isOverlayContainerVisible() = runBlockingTest {
+        val values = mutableListOf<Boolean>()
+        val job = underTest.isOverlayContainerVisible.onEach(values::add).launchIn(this)
+
+        repository.setDozing(true)
+        repository.setDozing(false)
+
+        assertThat(values).isEqualTo(listOf(true, false, true))
+        job.cancel()
+    }
+
+    @Test
+    fun alpha() = runBlockingTest {
+        val values = mutableListOf<Float>()
+        val job = underTest.alpha.onEach(values::add).launchIn(this)
+
+        repository.setBottomAreaAlpha(0.1f)
+        repository.setBottomAreaAlpha(0.5f)
+        repository.setBottomAreaAlpha(0.2f)
+        repository.setBottomAreaAlpha(0f)
+
+        assertThat(values).isEqualTo(listOf(1f, 0.1f, 0.5f, 0.2f, 0f))
+        job.cancel()
+    }
+
+    @Test
+    fun isIndicationAreaPadded() = runBlockingTest {
+        repository.setKeyguardShowing(true)
+        val values = mutableListOf<Boolean>()
+        val job = underTest.isIndicationAreaPadded.onEach(values::add).launchIn(this)
+
+        setUpQuickAffordanceModel(
+            position = KeyguardQuickAffordancePosition.BOTTOM_START,
+            testConfig =
+                TestConfig(
+                    isVisible = true,
+                    icon = mock(),
+                    canShowWhileLocked = true,
+                )
+        )
+        setUpQuickAffordanceModel(
+            position = KeyguardQuickAffordancePosition.BOTTOM_END,
+            testConfig =
+                TestConfig(
+                    isVisible = true,
+                    icon = mock(),
+                    canShowWhileLocked = false,
+                )
+        )
+        setUpQuickAffordanceModel(
+            position = KeyguardQuickAffordancePosition.BOTTOM_START,
+            testConfig =
+                TestConfig(
+                    isVisible = false,
+                )
+        )
+        setUpQuickAffordanceModel(
+            position = KeyguardQuickAffordancePosition.BOTTOM_END,
+            testConfig =
+                TestConfig(
+                    isVisible = false,
+                )
+        )
+
+        assertThat(values)
+            .isEqualTo(
+                listOf(
+                    // Initially, no button is visible so the indication area is not padded.
+                    false,
+                    // Once we add the first visible button, the indication area becomes padded.
+                    // This
+                    // continues to be true after we add the second visible button and even after we
+                    // make the first button not visible anymore.
+                    true,
+                    // Once both buttons are not visible, the indication area is, again, not padded.
+                    false,
+                )
+            )
+        job.cancel()
+    }
+
+    @Test
+    fun indicationAreaTranslationX() = runBlockingTest {
+        val values = mutableListOf<Float>()
+        val job = underTest.indicationAreaTranslationX.onEach(values::add).launchIn(this)
+
+        repository.setClockPosition(100, 100)
+        repository.setClockPosition(200, 100)
+        repository.setClockPosition(200, 200)
+        repository.setClockPosition(300, 100)
+
+        assertThat(values).isEqualTo(listOf(0f, 100f, 200f, 300f))
+        job.cancel()
+    }
+
+    @Test
+    fun indicationAreaTranslationY() = runBlockingTest {
+        val values = mutableListOf<Float>()
+        val job =
+            underTest
+                .indicationAreaTranslationY(DEFAULT_BURN_IN_OFFSET)
+                .onEach(values::add)
+                .launchIn(this)
+
+        val expectedTranslationValues =
+            listOf(
+                -0f, // Negative 0 - apparently there's a difference in floating point arithmetic -
+                // FML
+                setDozeAmountAndCalculateExpectedTranslationY(0.1f),
+                setDozeAmountAndCalculateExpectedTranslationY(0.2f),
+                setDozeAmountAndCalculateExpectedTranslationY(0.5f),
+                setDozeAmountAndCalculateExpectedTranslationY(1f),
+            )
+
+        assertThat(values).isEqualTo(expectedTranslationValues)
+        job.cancel()
+    }
+
+    private fun setDozeAmountAndCalculateExpectedTranslationY(dozeAmount: Float): Float {
+        repository.setDozeAmount(dozeAmount)
+        return dozeAmount * (RETURNED_BURN_IN_OFFSET - DEFAULT_BURN_IN_OFFSET)
+    }
+
+    private suspend fun setUpQuickAffordanceModel(
+        position: KeyguardQuickAffordancePosition,
+        testConfig: TestConfig,
+    ): KClass<*> {
+        val config =
+            when (position) {
+                KeyguardQuickAffordancePosition.BOTTOM_START -> homeControlsQuickAffordanceConfig
+                KeyguardQuickAffordancePosition.BOTTOM_END -> quickAccessWalletAffordanceConfig
+            }
+
+        affordanceRepository.setModel(
+            position = position,
+            model =
+                if (testConfig.isVisible) {
+                    if (testConfig.intent != null) {
+                        config.onClickedResult =
+                            KeyguardQuickAffordanceConfig.OnClickedResult.StartActivity(
+                                intent = testConfig.intent,
+                                canShowWhileLocked = testConfig.canShowWhileLocked,
+                            )
+                    }
+                    KeyguardQuickAffordanceModel.Visible(
+                        configKey = config::class,
+                        icon = testConfig.icon ?: error("Icon is unexpectedly null!"),
+                        contentDescriptionResourceId = CONTENT_DESCRIPTION_RESOURCE_ID,
+                    )
+                } else {
+                    KeyguardQuickAffordanceModel.Hidden
+                }
+        )
+        return config::class
+    }
+
+    private fun assertQuickAffordanceViewModel(
+        viewModel: KeyguardQuickAffordanceViewModel?,
+        testConfig: TestConfig,
+        configKey: KClass<*>,
+    ) {
+        checkNotNull(viewModel)
+        assertThat(viewModel.isVisible).isEqualTo(testConfig.isVisible)
+        if (testConfig.isVisible) {
+            assertThat(viewModel.icon).isEqualTo(testConfig.icon)
+            viewModel.onClicked.invoke(
+                KeyguardQuickAffordanceViewModel.OnClickedParameters(
+                    configKey = configKey,
+                    animationController = animationController,
+                )
+            )
+            testConfig.intent?.let { intent ->
+                assertThat(launchQuickAffordanceUseCase.invocations)
+                    .isEqualTo(
+                        listOf(
+                            FakeLaunchKeyguardQuickAffordanceUseCase.Invocation(
+                                intent = intent,
+                                canShowWhileLocked = testConfig.canShowWhileLocked,
+                                animationController = animationController,
+                            )
+                        )
+                    )
+            }
+                ?: run { assertThat(launchQuickAffordanceUseCase.invocations).isEmpty() }
+        } else {
+            assertThat(viewModel.isVisible).isFalse()
+        }
+    }
+
+    private data class TestConfig(
+        val isVisible: Boolean,
+        val icon: ContainedDrawable? = null,
+        val canShowWhileLocked: Boolean = false,
+        val intent: Intent? = null,
+    ) {
+        init {
+            check(!isVisible || icon != null) { "Must supply non-null icon if visible!" }
+        }
+    }
+
+    companion object {
+        private const val DEFAULT_BURN_IN_OFFSET = 5
+        private const val RETURNED_BURN_IN_OFFSET = 3
+        private const val CONTENT_DESCRIPTION_RESOURCE_ID = 1337
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/lifecycle/RepeatWhenAttachedTest.kt b/packages/SystemUI/tests/src/com/android/systemui/lifecycle/RepeatWhenAttachedTest.kt
new file mode 100644
index 0000000..80f3e46
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/lifecycle/RepeatWhenAttachedTest.kt
@@ -0,0 +1,319 @@
+/*
+ *  Copyright (C) 2022 The Android Open Source Project
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT 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.lifecycle
+
+import android.testing.TestableLooper.RunWithLooper
+import android.view.View
+import android.view.ViewTreeObserver
+import androidx.arch.core.executor.ArchTaskExecutor
+import androidx.arch.core.executor.TaskExecutor
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleOwner
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.util.Assert
+import com.android.systemui.util.mockito.argumentCaptor
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.DisposableHandle
+import kotlinx.coroutines.test.runBlockingTest
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.rules.TestWatcher
+import org.junit.runner.Description
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.mockito.Mock
+import org.mockito.Mockito.any
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when` as whenever
+import org.mockito.junit.MockitoJUnit
+
+@SmallTest
+@RunWith(JUnit4::class)
+@RunWithLooper
+class RepeatWhenAttachedTest : SysuiTestCase() {
+
+    @JvmField @Rule val mockito = MockitoJUnit.rule()
+    @JvmField @Rule val instantTaskExecutor = InstantTaskExecutorRule()
+
+    @Mock private lateinit var view: View
+    @Mock private lateinit var viewTreeObserver: ViewTreeObserver
+
+    private lateinit var block: Block
+    private lateinit var attachListeners: MutableList<View.OnAttachStateChangeListener>
+
+    @Before
+    fun setUp() {
+        Assert.setTestThread(Thread.currentThread())
+        whenever(view.viewTreeObserver).thenReturn(viewTreeObserver)
+        whenever(view.windowVisibility).thenReturn(View.GONE)
+        whenever(view.hasWindowFocus()).thenReturn(false)
+        attachListeners = mutableListOf()
+        whenever(view.addOnAttachStateChangeListener(any())).then {
+            attachListeners.add(it.arguments[0] as View.OnAttachStateChangeListener)
+        }
+        whenever(view.removeOnAttachStateChangeListener(any())).then {
+            attachListeners.remove(it.arguments[0] as View.OnAttachStateChangeListener)
+        }
+        block = Block()
+    }
+
+    @Test(expected = IllegalStateException::class)
+    fun `repeatWhenAttached - enforces main thread`() = runBlockingTest {
+        Assert.setTestThread(null)
+
+        repeatWhenAttached()
+    }
+
+    @Test(expected = IllegalStateException::class)
+    fun `repeatWhenAttached - dispose enforces main thread`() = runBlockingTest {
+        val disposableHandle = repeatWhenAttached()
+        Assert.setTestThread(null)
+
+        disposableHandle.dispose()
+    }
+
+    @Test
+    fun `repeatWhenAttached - view starts detached - runs block when attached`() = runBlockingTest {
+        whenever(view.isAttachedToWindow).thenReturn(false)
+        repeatWhenAttached()
+        assertThat(block.invocationCount).isEqualTo(0)
+
+        whenever(view.isAttachedToWindow).thenReturn(true)
+        attachListeners.last().onViewAttachedToWindow(view)
+
+        assertThat(block.invocationCount).isEqualTo(1)
+        assertThat(block.latestLifecycleState).isEqualTo(Lifecycle.State.CREATED)
+    }
+
+    @Test
+    fun `repeatWhenAttached - view already attached - immediately runs block`() = runBlockingTest {
+        whenever(view.isAttachedToWindow).thenReturn(true)
+
+        repeatWhenAttached()
+
+        assertThat(block.invocationCount).isEqualTo(1)
+        assertThat(block.latestLifecycleState).isEqualTo(Lifecycle.State.CREATED)
+    }
+
+    @Test
+    fun `repeatWhenAttached - starts visible without focus - STARTED`() = runBlockingTest {
+        whenever(view.isAttachedToWindow).thenReturn(true)
+        whenever(view.windowVisibility).thenReturn(View.VISIBLE)
+
+        repeatWhenAttached()
+
+        assertThat(block.invocationCount).isEqualTo(1)
+        assertThat(block.latestLifecycleState).isEqualTo(Lifecycle.State.STARTED)
+    }
+
+    @Test
+    fun `repeatWhenAttached - starts with focus but invisible - CREATED`() = runBlockingTest {
+        whenever(view.isAttachedToWindow).thenReturn(true)
+        whenever(view.hasWindowFocus()).thenReturn(true)
+
+        repeatWhenAttached()
+
+        assertThat(block.invocationCount).isEqualTo(1)
+        assertThat(block.latestLifecycleState).isEqualTo(Lifecycle.State.CREATED)
+    }
+
+    @Test
+    fun `repeatWhenAttached - starts visible and with focus - RESUMED`() = runBlockingTest {
+        whenever(view.isAttachedToWindow).thenReturn(true)
+        whenever(view.windowVisibility).thenReturn(View.VISIBLE)
+        whenever(view.hasWindowFocus()).thenReturn(true)
+
+        repeatWhenAttached()
+
+        assertThat(block.invocationCount).isEqualTo(1)
+        assertThat(block.latestLifecycleState).isEqualTo(Lifecycle.State.RESUMED)
+    }
+
+    @Test
+    fun `repeatWhenAttached - becomes visible without focus - STARTED`() = runBlockingTest {
+        whenever(view.isAttachedToWindow).thenReturn(true)
+        repeatWhenAttached()
+        val listenerCaptor = argumentCaptor<ViewTreeObserver.OnWindowVisibilityChangeListener>()
+        verify(viewTreeObserver).addOnWindowVisibilityChangeListener(listenerCaptor.capture())
+
+        whenever(view.windowVisibility).thenReturn(View.VISIBLE)
+        listenerCaptor.value.onWindowVisibilityChanged(View.VISIBLE)
+
+        assertThat(block.invocationCount).isEqualTo(1)
+        assertThat(block.latestLifecycleState).isEqualTo(Lifecycle.State.STARTED)
+    }
+
+    @Test
+    fun `repeatWhenAttached - gains focus but invisible - CREATED`() = runBlockingTest {
+        whenever(view.isAttachedToWindow).thenReturn(true)
+        repeatWhenAttached()
+        val listenerCaptor = argumentCaptor<ViewTreeObserver.OnWindowFocusChangeListener>()
+        verify(viewTreeObserver).addOnWindowFocusChangeListener(listenerCaptor.capture())
+
+        whenever(view.hasWindowFocus()).thenReturn(true)
+        listenerCaptor.value.onWindowFocusChanged(true)
+
+        assertThat(block.invocationCount).isEqualTo(1)
+        assertThat(block.latestLifecycleState).isEqualTo(Lifecycle.State.CREATED)
+    }
+
+    @Test
+    fun `repeatWhenAttached - becomes visible and gains focus - RESUMED`() = runBlockingTest {
+        whenever(view.isAttachedToWindow).thenReturn(true)
+        repeatWhenAttached()
+        val visibleCaptor = argumentCaptor<ViewTreeObserver.OnWindowVisibilityChangeListener>()
+        verify(viewTreeObserver).addOnWindowVisibilityChangeListener(visibleCaptor.capture())
+        val focusCaptor = argumentCaptor<ViewTreeObserver.OnWindowFocusChangeListener>()
+        verify(viewTreeObserver).addOnWindowFocusChangeListener(focusCaptor.capture())
+
+        whenever(view.windowVisibility).thenReturn(View.VISIBLE)
+        visibleCaptor.value.onWindowVisibilityChanged(View.VISIBLE)
+        whenever(view.hasWindowFocus()).thenReturn(true)
+        focusCaptor.value.onWindowFocusChanged(true)
+
+        assertThat(block.invocationCount).isEqualTo(1)
+        assertThat(block.latestLifecycleState).isEqualTo(Lifecycle.State.RESUMED)
+    }
+
+    @Test
+    fun `repeatWhenAttached - view gets detached - destroys the lifecycle`() = runBlockingTest {
+        whenever(view.isAttachedToWindow).thenReturn(true)
+        repeatWhenAttached()
+
+        whenever(view.isAttachedToWindow).thenReturn(false)
+        attachListeners.last().onViewDetachedFromWindow(view)
+
+        assertThat(block.invocationCount).isEqualTo(1)
+        assertThat(block.latestLifecycleState).isEqualTo(Lifecycle.State.DESTROYED)
+    }
+
+    @Test
+    fun `repeatWhenAttached - view gets reattached - recreates a lifecycle`() = runBlockingTest {
+        whenever(view.isAttachedToWindow).thenReturn(true)
+        repeatWhenAttached()
+        whenever(view.isAttachedToWindow).thenReturn(false)
+        attachListeners.last().onViewDetachedFromWindow(view)
+
+        whenever(view.isAttachedToWindow).thenReturn(true)
+        attachListeners.last().onViewAttachedToWindow(view)
+
+        assertThat(block.invocationCount).isEqualTo(2)
+        assertThat(block.invocations[0].lifecycleState).isEqualTo(Lifecycle.State.DESTROYED)
+        assertThat(block.invocations[1].lifecycleState).isEqualTo(Lifecycle.State.CREATED)
+    }
+
+    @Test
+    fun `repeatWhenAttached - dispose attached`() = runBlockingTest {
+        whenever(view.isAttachedToWindow).thenReturn(true)
+        val handle = repeatWhenAttached()
+
+        handle.dispose()
+
+        assertThat(attachListeners).isEmpty()
+        assertThat(block.invocationCount).isEqualTo(1)
+        assertThat(block.latestLifecycleState).isEqualTo(Lifecycle.State.DESTROYED)
+    }
+
+    @Test
+    fun `repeatWhenAttached - dispose never attached`() = runBlockingTest {
+        whenever(view.isAttachedToWindow).thenReturn(false)
+        val handle = repeatWhenAttached()
+
+        handle.dispose()
+
+        assertThat(attachListeners).isEmpty()
+        assertThat(block.invocationCount).isEqualTo(0)
+    }
+
+    @Test
+    fun `repeatWhenAttached - dispose previously attached now detached`() = runBlockingTest {
+        whenever(view.isAttachedToWindow).thenReturn(true)
+        val handle = repeatWhenAttached()
+        attachListeners.last().onViewDetachedFromWindow(view)
+
+        handle.dispose()
+
+        assertThat(attachListeners).isEmpty()
+        assertThat(block.invocationCount).isEqualTo(1)
+        assertThat(block.latestLifecycleState).isEqualTo(Lifecycle.State.DESTROYED)
+    }
+
+    private fun CoroutineScope.repeatWhenAttached(): DisposableHandle {
+        return view.repeatWhenAttached(
+            coroutineContext = coroutineContext,
+            block = block,
+        )
+    }
+
+    private class Block : suspend LifecycleOwner.(View) -> Unit {
+        data class Invocation(
+            val lifecycleOwner: LifecycleOwner,
+        ) {
+            val lifecycleState: Lifecycle.State
+                get() = lifecycleOwner.lifecycle.currentState
+        }
+
+        private val _invocations = mutableListOf<Invocation>()
+        val invocations: List<Invocation> = _invocations
+        val invocationCount: Int
+            get() = _invocations.size
+        val latestLifecycleState: Lifecycle.State
+            get() = _invocations.last().lifecycleState
+
+        override suspend fun invoke(lifecycleOwner: LifecycleOwner, view: View) {
+            _invocations.add(Invocation(lifecycleOwner))
+        }
+    }
+
+    /**
+     * Test rule that makes ArchTaskExecutor main thread assertions pass. There is one such assert
+     * in LifecycleRegistry.
+     */
+    class InstantTaskExecutorRule : TestWatcher() {
+        // TODO(b/240620122): This is a copy of
+        //  androidx/arch/core/executor/testing/InstantTaskExecutorRule which should be replaced
+        //  with a dependency on the real library once b/ is cleared.
+        override fun starting(description: Description) {
+            super.starting(description)
+            ArchTaskExecutor.getInstance()
+                .setDelegate(
+                    object : TaskExecutor() {
+                        override fun executeOnDiskIO(runnable: Runnable) {
+                            runnable.run()
+                        }
+
+                        override fun postToMainThread(runnable: Runnable) {
+                            runnable.run()
+                        }
+
+                        override fun isMainThread(): Boolean {
+                            return true
+                        }
+                    }
+                )
+        }
+
+        override fun finished(description: Description) {
+            super.finished(description)
+            ArchTaskExecutor.getInstance().setDelegate(null)
+        }
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/log/LogBufferTest.kt b/packages/SystemUI/tests/src/com/android/systemui/log/LogBufferTest.kt
new file mode 100644
index 0000000..56aff3c
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/log/LogBufferTest.kt
@@ -0,0 +1,138 @@
+package com.android.systemui.log
+
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.google.common.truth.Truth.assertThat
+import java.io.PrintWriter
+import java.io.StringWriter
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.junit.MockitoJUnitRunner
+
+@SmallTest
+@RunWith(MockitoJUnitRunner::class)
+class LogBufferTest : SysuiTestCase() {
+    private lateinit var buffer: LogBuffer
+
+    private lateinit var outputWriter: StringWriter
+
+    @Mock
+    private lateinit var logcatEchoTracker: LogcatEchoTracker
+
+    @Before
+    fun setup() {
+        outputWriter = StringWriter()
+        buffer = createBuffer()
+    }
+
+    private fun createBuffer(): LogBuffer {
+        return LogBuffer("TestBuffer", 1, logcatEchoTracker, false)
+    }
+
+    @Test
+    fun log_shouldSaveLogToBuffer() {
+        buffer.log("Test", LogLevel.INFO, "Some test message")
+
+        val dumpedString = dumpBuffer()
+
+        assertThat(dumpedString).contains("Some test message")
+    }
+
+    @Test
+    fun log_shouldRotateIfLogBufferIsFull() {
+        buffer.log("Test", LogLevel.INFO, "This should be rotated")
+        buffer.log("Test", LogLevel.INFO, "New test message")
+
+        val dumpedString = dumpBuffer()
+
+        assertThat(dumpedString).contains("New test message")
+    }
+
+    @Test
+    fun dump_writesExceptionAndStacktrace() {
+        buffer = createBuffer()
+        val exception = createTestException("Exception message", "TestClass")
+        buffer.log("Tag", LogLevel.ERROR, { str1 = "Extra message" }, { str1!! }, exception)
+
+        val dumpedString = dumpBuffer()
+
+        assertThat(dumpedString).contains("Extra message")
+        assertThat(dumpedString).contains("java.lang.RuntimeException: Exception message")
+        assertThat(dumpedString).contains("at TestClass.TestMethod(TestClass.java:1)")
+        assertThat(dumpedString).contains("at TestClass.TestMethod(TestClass.java:2)")
+    }
+
+    @Test
+    fun dump_writesCauseAndStacktrace() {
+        buffer = createBuffer()
+        val exception = createTestException("Exception message",
+                "TestClass",
+                cause = createTestException("The real cause!", "TestClass"))
+        buffer.log("Tag", LogLevel.ERROR, { str1 = "Extra message" }, { str1!! }, exception)
+
+        val dumpedString = dumpBuffer()
+
+        assertThat(dumpedString)
+                .contains("Caused by: java.lang.RuntimeException: The real cause!")
+        assertThat(dumpedString).contains("at TestClass.TestMethod(TestClass.java:1)")
+        assertThat(dumpedString).contains("at TestClass.TestMethod(TestClass.java:2)")
+    }
+
+    @Test
+    fun dump_writesSuppressedExceptionAndStacktrace() {
+        buffer = createBuffer()
+        val exception = RuntimeException("Root exception message")
+        exception.addSuppressed(
+                createTestException(
+                        "First suppressed exception",
+                        "FirstClass",
+                        createTestException("Cause of suppressed exp", "ThirdClass")
+                ))
+        exception.addSuppressed(
+                createTestException("Second suppressed exception", "SecondClass"))
+        buffer.log("Tag", LogLevel.ERROR, { str1 = "Extra message" }, { str1!! }, exception)
+
+        val dumpedStr = dumpBuffer()
+
+        // first suppressed exception
+        assertThat(dumpedStr)
+                .contains("Suppressed: " +
+                        "java.lang.RuntimeException: First suppressed exception")
+        assertThat(dumpedStr).contains("at FirstClass.TestMethod(FirstClass.java:1)")
+        assertThat(dumpedStr).contains("at FirstClass.TestMethod(FirstClass.java:2)")
+
+        assertThat(dumpedStr)
+                .contains("Caused by: java.lang.RuntimeException: Cause of suppressed exp")
+        assertThat(dumpedStr).contains("at ThirdClass.TestMethod(ThirdClass.java:1)")
+        assertThat(dumpedStr).contains("at ThirdClass.TestMethod(ThirdClass.java:2)")
+
+        // second suppressed exception
+        assertThat(dumpedStr)
+                .contains("Suppressed: " +
+                        "java.lang.RuntimeException: Second suppressed exception")
+        assertThat(dumpedStr).contains("at SecondClass.TestMethod(SecondClass.java:1)")
+        assertThat(dumpedStr).contains("at SecondClass.TestMethod(SecondClass.java:2)")
+    }
+
+    private fun createTestException(
+            message: String,
+            errorClass: String,
+            cause: Throwable? = null,
+    ): Exception {
+        val exception = RuntimeException(message, cause)
+        exception.stackTrace = (1..5).map { lineNumber ->
+            StackTraceElement(errorClass,
+                    "TestMethod",
+                    "$errorClass.java",
+                    lineNumber)
+        }.toTypedArray()
+        return exception
+    }
+
+    private fun dumpBuffer(): String {
+        buffer.dump(PrintWriter(outputWriter), tailLength = 100)
+        return outputWriter.toString()
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/ColorSchemeTransitionTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/ColorSchemeTransitionTest.kt
index b979241..f56d42e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/ColorSchemeTransitionTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/ColorSchemeTransitionTest.kt
@@ -16,7 +16,6 @@
 
 package com.android.systemui.media
 
-import org.mockito.Mockito.`when` as whenever
 import android.animation.ValueAnimator
 import android.graphics.Color
 import android.testing.AndroidTestingRunner
@@ -34,6 +33,7 @@
 import org.mockito.Mockito.never
 import org.mockito.Mockito.times
 import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when` as whenever
 import org.mockito.junit.MockitoJUnit
 
 private const val DEFAULT_COLOR = Color.RED
@@ -147,8 +147,8 @@
 
     @Test
     fun testColorSchemeTransition_update() {
-        colorSchemeTransition.updateColorScheme(colorScheme, true)
-        verify(mockAnimatingTransition, times(10)).updateColorScheme(colorScheme)
+        colorSchemeTransition.updateColorScheme(colorScheme)
+        verify(mockAnimatingTransition, times(8)).updateColorScheme(colorScheme)
         verify(gutsViewHolder).colorScheme = colorScheme
     }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/MediaControlPanelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/MediaControlPanelTest.kt
index 6f4579b..1785022 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/MediaControlPanelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/MediaControlPanelTest.kt
@@ -21,7 +21,6 @@
 import android.app.PendingIntent
 import android.app.smartspace.SmartspaceAction
 import android.content.Context
-import org.mockito.Mockito.`when` as whenever
 import android.content.Intent
 import android.content.pm.ApplicationInfo
 import android.content.pm.PackageManager
@@ -58,6 +57,7 @@
 import com.android.systemui.ActivityIntentHelper
 import com.android.systemui.R
 import com.android.systemui.SysuiTestCase
+import com.android.systemui.bluetooth.BroadcastDialogController
 import com.android.systemui.broadcast.BroadcastSender
 import com.android.systemui.media.MediaControlPanel.KEY_SMARTSPACE_APP_NAME
 import com.android.systemui.media.dialog.MediaOutputDialogFactory
@@ -68,8 +68,8 @@
 import com.android.systemui.util.animation.TransitionLayout
 import com.android.systemui.util.concurrency.FakeExecutor
 import com.android.systemui.util.mockito.KotlinArgumentCaptor
-import com.android.systemui.util.mockito.argumentCaptor
 import com.android.systemui.util.mockito.any
+import com.android.systemui.util.mockito.argumentCaptor
 import com.android.systemui.util.mockito.eq
 import com.android.systemui.util.mockito.nullable
 import com.android.systemui.util.mockito.withArgCaptor
@@ -92,6 +92,7 @@
 import org.mockito.Mockito.reset
 import org.mockito.Mockito.times
 import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when` as whenever
 import org.mockito.junit.MockitoJUnit
 
 private const val KEY = "TEST_KEY"
@@ -104,6 +105,7 @@
 private const val SESSION_TITLE = "SESSION_TITLE"
 private const val DISABLED_DEVICE_NAME = "DISABLED_DEVICE_NAME"
 private const val REC_APP_NAME = "REC APP NAME"
+private const val APP_NAME = "APP_NAME"
 
 @SmallTest
 @RunWith(AndroidTestingRunner::class)
@@ -130,6 +132,7 @@
     @Mock private lateinit var mediaCarouselController: MediaCarouselController
     @Mock private lateinit var falsingManager: FalsingManager
     @Mock private lateinit var transitionParent: ViewGroup
+    @Mock private lateinit var broadcastDialogController: BroadcastDialogController
     private lateinit var appIcon: ImageView
     @Mock private lateinit var albumView: ImageView
     private lateinit var titleText: TextView
@@ -160,8 +163,9 @@
     private lateinit var dismissText: TextView
 
     private lateinit var session: MediaSession
-    private val device = MediaDeviceData(true, null, DEVICE_NAME)
-    private val disabledDevice = MediaDeviceData(false, null, DISABLED_DEVICE_NAME)
+    private lateinit var device: MediaDeviceData
+    private val disabledDevice = MediaDeviceData(false, null, DISABLED_DEVICE_NAME, null,
+            showBroadcastButton = false)
     private lateinit var mediaData: MediaData
     private val clock = FakeSystemClock()
     @Mock private lateinit var logger: MediaUiEventLogger
@@ -187,6 +191,7 @@
     private lateinit var recSubtitle1: TextView
     private lateinit var recSubtitle2: TextView
     private lateinit var recSubtitle3: TextView
+    private var shouldShowBroadcastButton: Boolean = false
 
     @JvmField @Rule val mockito = MockitoJUnit.rule()
 
@@ -223,7 +228,8 @@
             logger,
             keyguardStateController,
             activityIntentHelper,
-            lockscreenUserManager) {
+            lockscreenUserManager,
+            broadcastDialogController) {
                 override fun loadAnimator(
                     animId: Int,
                     otionInterpolator: Interpolator,
@@ -236,28 +242,7 @@
         initGutsViewHolderMocks()
         initMediaViewHolderMocks()
 
-        // Create media session
-        val metadataBuilder = MediaMetadata.Builder().apply {
-            putString(MediaMetadata.METADATA_KEY_ARTIST, SESSION_ARTIST)
-            putString(MediaMetadata.METADATA_KEY_TITLE, SESSION_TITLE)
-        }
-        val playbackBuilder = PlaybackState.Builder().apply {
-            setState(PlaybackState.STATE_PAUSED, 6000L, 1f)
-            setActions(PlaybackState.ACTION_PLAY)
-        }
-        session = MediaSession(context, SESSION_KEY).apply {
-            setMetadata(metadataBuilder.build())
-            setPlaybackState(playbackBuilder.build())
-        }
-        session.setActive(true)
-
-        mediaData = MediaTestUtils.emptyMediaData.copy(
-                artist = ARTIST,
-                song = TITLE,
-                packageName = PACKAGE,
-                token = session.sessionToken,
-                device = device,
-                instanceId = instanceId)
+        initDeviceMediaData(false, DEVICE_NAME)
 
         // Set up recommendation view
         initRecommendationViewHolderMocks()
@@ -293,6 +278,34 @@
         whenever(gutsViewHolder.dismissText).thenReturn(dismissText)
     }
 
+    private fun initDeviceMediaData(shouldShowBroadcastButton: Boolean, name: String) {
+        device = MediaDeviceData(true, null, name, null,
+                showBroadcastButton = shouldShowBroadcastButton)
+
+        // Create media session
+        val metadataBuilder = MediaMetadata.Builder().apply {
+            putString(MediaMetadata.METADATA_KEY_ARTIST, SESSION_ARTIST)
+            putString(MediaMetadata.METADATA_KEY_TITLE, SESSION_TITLE)
+        }
+        val playbackBuilder = PlaybackState.Builder().apply {
+            setState(PlaybackState.STATE_PAUSED, 6000L, 1f)
+            setActions(PlaybackState.ACTION_PLAY)
+        }
+        session = MediaSession(context, SESSION_KEY).apply {
+            setMetadata(metadataBuilder.build())
+            setPlaybackState(playbackBuilder.build())
+        }
+        session.setActive(true)
+
+        mediaData = MediaTestUtils.emptyMediaData.copy(
+                artist = ARTIST,
+                song = TITLE,
+                packageName = PACKAGE,
+                token = session.sessionToken,
+                device = device,
+                instanceId = instanceId)
+    }
+
     /**
      * Initialize elements in media view holder
      */
@@ -342,6 +355,7 @@
         whenever(viewHolder.player).thenReturn(view)
         whenever(viewHolder.appIcon).thenReturn(appIcon)
         whenever(viewHolder.albumView).thenReturn(albumView)
+        whenever(albumView.foreground).thenReturn(mock(Drawable::class.java))
         whenever(viewHolder.titleText).thenReturn(titleText)
         whenever(viewHolder.artistText).thenReturn(artistText)
         whenever(seamlessBackground.getDrawable(0)).thenReturn(mock(GradientDrawable::class.java))
@@ -1045,6 +1059,28 @@
         assertThat(seamless.isEnabled()).isFalse()
     }
 
+    @Test
+    fun bindBroadcastButton() {
+        initMediaViewHolderMocks()
+        initDeviceMediaData(true, APP_NAME)
+
+        val mockAvd0 = mock(AnimatedVectorDrawable::class.java)
+        whenever(mockAvd0.mutate()).thenReturn(mockAvd0)
+        val semanticActions0 = MediaButton(
+                playOrPause = MediaAction(mockAvd0, Runnable {}, "play", null)
+        )
+        val state = mediaData.copy(resumption = true, semanticActions = semanticActions0,
+                isPlaying = false)
+        player.attachPlayer(viewHolder)
+        player.bindPlayer(state, PACKAGE)
+        assertThat(seamlessText.getText()).isEqualTo(APP_NAME)
+        assertThat(seamless.isEnabled()).isTrue()
+
+        seamless.callOnClick()
+
+        verify(logger).logOpenBroadcastDialog(anyInt(), eq(PACKAGE), eq(instanceId))
+    }
+
     /* ***** Guts tests for the player ***** */
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/MediaDataCombineLatestTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/MediaDataCombineLatestTest.java
index 3e335c5..04b93d7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/MediaDataCombineLatestTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/MediaDataCombineLatestTest.java
@@ -79,7 +79,7 @@
                 new ArrayList<>(), new ArrayList<>(), null, PACKAGE, null, null, null, true, null,
                 MediaData.PLAYBACK_LOCAL, false, KEY, false, false, false, 0L,
                 InstanceId.fakeInstanceId(-1), -1);
-        mDeviceData = new MediaDeviceData(true, null, DEVICE_NAME);
+        mDeviceData = new MediaDeviceData(true, null, DEVICE_NAME, null, false);
     }
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/MediaDeviceManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/MediaDeviceManagerTest.kt
index 187210a..ee10426 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/MediaDeviceManagerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/MediaDeviceManagerTest.kt
@@ -16,6 +16,10 @@
 
 package com.android.systemui.media
 
+import android.bluetooth.BluetoothLeBroadcast
+import android.bluetooth.BluetoothLeBroadcastMetadata
+import android.content.pm.ApplicationInfo
+import android.content.pm.PackageManager
 import android.graphics.drawable.Drawable
 import android.media.MediaRouter2Manager
 import android.media.RoutingSessionInfo
@@ -25,8 +29,12 @@
 import android.testing.AndroidTestingRunner
 import android.testing.TestableLooper
 import androidx.test.filters.SmallTest
+import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast
+import com.android.settingslib.bluetooth.LocalBluetoothManager
+import com.android.settingslib.bluetooth.LocalBluetoothProfileManager
 import com.android.settingslib.media.LocalMediaManager
 import com.android.settingslib.media.MediaDevice
+import com.android.systemui.R
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.dump.DumpManager
 import com.android.systemui.media.muteawait.MediaMuteAwaitConnectionManager
@@ -42,6 +50,7 @@
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.mockito.ArgumentCaptor
+import org.mockito.ArgumentMatchers.anyInt
 import org.mockito.Mock
 import org.mockito.Mockito.any
 import org.mockito.Mockito.mock
@@ -60,6 +69,8 @@
 private const val DEVICE_ID = "DEVICE_ID"
 private const val DEVICE_NAME = "DEVICE_NAME"
 private const val REMOTE_DEVICE_NAME = "REMOTE_DEVICE_NAME"
+private const val BROADCAST_APP_NAME = "BROADCAST_APP_NAME"
+private const val NORMAL_APP_NAME = "NORMAL_APP_NAME"
 
 @SmallTest
 @RunWith(AndroidTestingRunner::class)
@@ -83,6 +94,12 @@
     @Mock private lateinit var controller: MediaController
     @Mock private lateinit var playbackInfo: PlaybackInfo
     @Mock private lateinit var configurationController: ConfigurationController
+    @Mock private lateinit var bluetoothLeBroadcast: BluetoothLeBroadcast
+    @Mock private lateinit var localBluetoothProfileManager: LocalBluetoothProfileManager
+    @Mock private lateinit var localBluetoothLeBroadcast: LocalBluetoothLeBroadcast
+    @Mock private lateinit var packageManager: PackageManager
+    @Mock private lateinit var applicationInfo: ApplicationInfo
+    private lateinit var localBluetoothManager: LocalBluetoothManager
     private lateinit var session: MediaSession
     private lateinit var mediaData: MediaData
     @JvmField @Rule val mockito = MockitoJUnit.rule()
@@ -91,12 +108,15 @@
     fun setUp() {
         fakeFgExecutor = FakeExecutor(FakeSystemClock())
         fakeBgExecutor = FakeExecutor(FakeSystemClock())
+        localBluetoothManager = mDependency.injectMockDependency(LocalBluetoothManager::class.java)
         manager = MediaDeviceManager(
+                context,
                 controllerFactory,
                 lmmFactory,
                 mr2,
                 muteAwaitFactory,
                 configurationController,
+                localBluetoothManager,
                 fakeFgExecutor,
                 fakeBgExecutor,
                 dumpster
@@ -119,6 +139,7 @@
                 token = session.sessionToken)
         whenever(controllerFactory.create(session.sessionToken))
                 .thenReturn(controller)
+        setupLeAudioConfiguration(false)
     }
 
     @After
@@ -545,7 +566,8 @@
     @Test
     fun testRemotePlaybackDeviceOverride() {
         whenever(route.name).thenReturn(DEVICE_NAME)
-        val deviceData = MediaDeviceData(false, null, REMOTE_DEVICE_NAME, null)
+        val deviceData = MediaDeviceData(false, null, REMOTE_DEVICE_NAME, null,
+                showBroadcastButton = false)
         val mediaDataWithDevice = mediaData.copy(device = deviceData)
 
         // GIVEN media data that already has a device set
@@ -560,12 +582,95 @@
         verify(lmm, never()).registerCallback(any())
     }
 
+    @Test
+    fun onBroadcastStarted_currentMediaDeviceDataIsBroadcasting() {
+        val broadcastCallback = setupBroadcastCallback()
+        setupLeAudioConfiguration(true)
+        setupBroadcastPackage(BROADCAST_APP_NAME)
+        broadcastCallback.onBroadcastStarted(1, 1)
+
+        manager.onMediaDataLoaded(KEY, null, mediaData)
+        fakeBgExecutor.runAllReady()
+        fakeFgExecutor.runAllReady()
+
+        val data = captureDeviceData(KEY)
+        assertThat(data.showBroadcastButton).isTrue()
+        assertThat(data.enabled).isTrue()
+        assertThat(data.name).isEqualTo(context.getString(
+                R.string.broadcasting_description_is_broadcasting))
+    }
+
+    @Test
+    fun onBroadcastStarted_currentMediaDeviceDataIsNotBroadcasting() {
+        val broadcastCallback = setupBroadcastCallback()
+        setupLeAudioConfiguration(true)
+        setupBroadcastPackage(NORMAL_APP_NAME)
+        broadcastCallback.onBroadcastStarted(1, 1)
+
+        manager.onMediaDataLoaded(KEY, null, mediaData)
+        fakeBgExecutor.runAllReady()
+        fakeFgExecutor.runAllReady()
+
+        val data = captureDeviceData(KEY)
+        assertThat(data.showBroadcastButton).isTrue()
+        assertThat(data.enabled).isTrue()
+        assertThat(data.name).isEqualTo(BROADCAST_APP_NAME)
+    }
+
+    @Test
+    fun onBroadcastStopped_bluetoothLeBroadcastIsDisabledAndBroadcastingButtonIsGone() {
+        val broadcastCallback = setupBroadcastCallback()
+        setupLeAudioConfiguration(false)
+        broadcastCallback.onBroadcastStopped(1, 1)
+
+        manager.onMediaDataLoaded(KEY, null, mediaData)
+        fakeBgExecutor.runAllReady()
+        fakeFgExecutor.runAllReady()
+
+        val data = captureDeviceData(KEY)
+        assertThat(data.showBroadcastButton).isFalse()
+    }
+
     fun captureCallback(): LocalMediaManager.DeviceCallback {
         val captor = ArgumentCaptor.forClass(LocalMediaManager.DeviceCallback::class.java)
         verify(lmm).registerCallback(captor.capture())
         return captor.getValue()
     }
 
+    fun setupBroadcastCallback(): BluetoothLeBroadcast.Callback {
+        val callback: BluetoothLeBroadcast.Callback = object : BluetoothLeBroadcast.Callback {
+            override fun onBroadcastStarted(reason: Int, broadcastId: Int) {}
+            override fun onBroadcastStartFailed(reason: Int) {}
+            override fun onBroadcastStopped(reason: Int, broadcastId: Int) {}
+            override fun onBroadcastStopFailed(reason: Int) {}
+            override fun onPlaybackStarted(reason: Int, broadcastId: Int) {}
+            override fun onPlaybackStopped(reason: Int, broadcastId: Int) {}
+            override fun onBroadcastUpdated(reason: Int, broadcastId: Int) {}
+            override fun onBroadcastUpdateFailed(reason: Int, broadcastId: Int) {}
+            override fun onBroadcastMetadataChanged(broadcastId: Int,
+                                                    metadata: BluetoothLeBroadcastMetadata) {}
+        }
+
+        bluetoothLeBroadcast.registerCallback(fakeFgExecutor, callback)
+        return callback;
+    }
+
+    fun setupLeAudioConfiguration(isLeAudio: Boolean) {
+        whenever(localBluetoothManager.profileManager).thenReturn(localBluetoothProfileManager)
+        whenever(localBluetoothProfileManager.leAudioBroadcastProfile)
+                .thenReturn(localBluetoothLeBroadcast)
+        whenever(localBluetoothLeBroadcast.isEnabled(any())).thenReturn(isLeAudio)
+        whenever(localBluetoothLeBroadcast.appSourceName).thenReturn(BROADCAST_APP_NAME)
+    }
+
+    fun setupBroadcastPackage(currentName: String) {
+        whenever(lmm.packageName).thenReturn(PACKAGE)
+        whenever(packageManager.getApplicationInfo(eq(PACKAGE), anyInt()))
+                .thenReturn(applicationInfo)
+        whenever(packageManager.getApplicationLabel(applicationInfo)).thenReturn(currentName)
+        context.setMockPackageManager(packageManager)
+    }
+
     fun captureDeviceData(key: String, oldKey: String? = null): MediaDeviceData {
         val captor = ArgumentCaptor.forClass(MediaDeviceData::class.java)
         verify(listener).onMediaDeviceChanged(eq(key), eq(oldKey), captor.capture())
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/MediaTestUtils.kt b/packages/SystemUI/tests/src/com/android/systemui/media/MediaTestUtils.kt
index ae58fe6..3d9ed5f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/MediaTestUtils.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/MediaTestUtils.kt
@@ -20,7 +20,8 @@
             device = null,
             active = true,
             resumeAction = null,
+            isPlaying = false,
             instanceId = InstanceId.fakeInstanceId(-1),
             appUid = -1)
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java
index c4cb833..260bb87 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java
@@ -71,14 +71,13 @@
 
     @Before
     public void setUp() {
-        mMediaOutputAdapter = new MediaOutputAdapter(mMediaOutputController, mMediaOutputDialog);
+        mMediaOutputAdapter = new MediaOutputAdapter(mMediaOutputController);
         mViewHolder = (MediaOutputAdapter.MediaDeviceViewHolder) mMediaOutputAdapter
                 .onCreateViewHolder(new LinearLayout(mContext), 0);
         mSpyMediaOutputSeekbar = spy(mViewHolder.mSeekBar);
 
         when(mMediaOutputController.getMediaDevices()).thenReturn(mMediaDevices);
         when(mMediaOutputController.hasAdjustVolumeUserRestriction()).thenReturn(false);
-        when(mMediaOutputController.isZeroMode()).thenReturn(false);
         when(mMediaOutputController.isTransferring()).thenReturn(false);
         when(mMediaOutputController.getDeviceIconCompat(mMediaDevice1)).thenReturn(mIconCompat);
         when(mMediaOutputController.getDeviceIconCompat(mMediaDevice2)).thenReturn(mIconCompat);
@@ -98,28 +97,12 @@
     }
 
     @Test
-    public void getItemCount_nonZeroMode_isDeviceSize() {
-        assertThat(mMediaOutputAdapter.getItemCount()).isEqualTo(mMediaDevices.size());
-    }
-
-    @Test
-    public void getItemCount_zeroMode_containExtraOneForPairNew() {
-        when(mMediaOutputController.isZeroMode()).thenReturn(true);
-
+    public void getItemCount_containExtraOneForPairNew() {
         assertThat(mMediaOutputAdapter.getItemCount()).isEqualTo(mMediaDevices.size() + 1);
     }
 
     @Test
-    public void getItemCount_withDynamicGroup_containExtraOneForGroup() {
-        when(mMediaOutputController.getSelectedMediaDevice()).thenReturn(mMediaDevices);
-        when(mMediaOutputController.isZeroMode()).thenReturn(false);
-
-        assertThat(mMediaOutputAdapter.getItemCount()).isEqualTo(mMediaDevices.size());
-    }
-
-    @Test
-    public void onBindViewHolder_zeroMode_bindPairNew_verifyView() {
-        when(mMediaOutputController.isZeroMode()).thenReturn(true);
+    public void onBindViewHolder_bindPairNew_verifyView() {
         mMediaOutputAdapter.onBindViewHolder(mViewHolder, 2);
 
         assertThat(mViewHolder.mTitleText.getVisibility()).isEqualTo(View.VISIBLE);
@@ -133,7 +116,6 @@
     @Test
     public void onBindViewHolder_bindGroup_withSessionName_verifyView() {
         when(mMediaOutputController.getSelectedMediaDevice()).thenReturn(mMediaDevices);
-        when(mMediaOutputController.isZeroMode()).thenReturn(false);
         when(mMediaOutputController.getSessionName()).thenReturn(TEST_SESSION_NAME);
         mMediaOutputAdapter.getItemCount();
         mMediaOutputAdapter.onBindViewHolder(mViewHolder, 0);
@@ -148,7 +130,6 @@
     @Test
     public void onBindViewHolder_bindGroup_noSessionName_verifyView() {
         when(mMediaOutputController.getSelectedMediaDevice()).thenReturn(mMediaDevices);
-        when(mMediaOutputController.isZeroMode()).thenReturn(false);
         when(mMediaOutputController.getSessionName()).thenReturn(null);
         mMediaOutputAdapter.getItemCount();
         mMediaOutputAdapter.onBindViewHolder(mViewHolder, 0);
@@ -257,7 +238,6 @@
 
     @Test
     public void onItemClick_clickPairNew_verifyLaunchBluetoothPairing() {
-        when(mMediaOutputController.isZeroMode()).thenReturn(true);
         mMediaOutputAdapter.onBindViewHolder(mViewHolder, 2);
         mViewHolder.mContainerLayout.performClick();
 
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 9eaa20c..d414660 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
@@ -43,6 +43,8 @@
 import androidx.core.graphics.drawable.IconCompat;
 import androidx.test.filters.SmallTest;
 
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
 import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast;
 import com.android.settingslib.bluetooth.LocalBluetoothManager;
 import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
@@ -98,10 +100,17 @@
     private CharSequence mHeaderSubtitle;
     private String mStopText;
     private boolean mIsBroadcasting;
+    private boolean mIsBroadcastIconVisibility;
+
 
     @Before
     public void setUp() {
         when(mLocalBluetoothManager.getProfileManager()).thenReturn(mLocalBluetoothProfileManager);
+        final CachedBluetoothDeviceManager cachedBluetoothDeviceManager = mock(
+                CachedBluetoothDeviceManager.class);
+        when(mLocalBluetoothManager.getCachedDeviceManager()).thenReturn(
+                cachedBluetoothDeviceManager);
+        when(cachedBluetoothDeviceManager.findDevice(any())).thenReturn(null);
         when(mLocalBluetoothProfileManager.getLeAudioBroadcastProfile()).thenReturn(null);
         when(mMediaController.getPlaybackState()).thenReturn(mPlaybackState);
         when(mPlaybackState.getState()).thenReturn(PlaybackState.STATE_NONE);
@@ -153,6 +162,27 @@
     }
 
     @Test
+    public void refresh_broadcastIconVisibilityOff_broadcastIconLayoutNotVisible() {
+        mIsBroadcastIconVisibility = false;
+
+        mMediaOutputBaseDialogImpl.refresh();
+        final ImageView view = mMediaOutputBaseDialogImpl.mDialogView.requireViewById(
+                R.id.broadcast_icon);
+
+        assertThat(view.getVisibility()).isEqualTo(View.GONE);
+    }
+    @Test
+    public void refresh_broadcastIconVisibilityOn_broadcastIconLayoutVisible() {
+        mIsBroadcastIconVisibility = true;
+
+        mMediaOutputBaseDialogImpl.refresh();
+        final ImageView view = mMediaOutputBaseDialogImpl.mDialogView.requireViewById(
+                R.id.broadcast_icon);
+
+        assertThat(view.getVisibility()).isEqualTo(View.VISIBLE);
+    }
+
+    @Test
     public void refresh_checkTitle() {
         mHeaderTitle = "test_string";
 
@@ -308,5 +338,10 @@
         public CharSequence getStopButtonText() {
             return mStopText;
         }
+
+        @Override
+        public int getBroadcastIconVisibility() {
+            return mIsBroadcastIconVisibility ? View.VISIBLE : View.GONE;
+        }
     }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java
index 2bf5f0f..751c895 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputControllerTest.java
@@ -383,62 +383,6 @@
     }
 
     @Test
-    public void isZeroMode_onlyFromPhoneOutput_returnTrue() {
-        // Multiple available devices
-        assertThat(mMediaOutputController.isZeroMode()).isFalse();
-        when(mMediaDevice1.getDeviceType()).thenReturn(
-                MediaDevice.MediaDeviceType.TYPE_PHONE_DEVICE);
-        mMediaDevices.clear();
-        mMediaDevices.add(mMediaDevice1);
-        mMediaOutputController.start(mCb);
-        mMediaOutputController.onDeviceListUpdate(mMediaDevices);
-
-        assertThat(mMediaOutputController.isZeroMode()).isTrue();
-
-        when(mMediaDevice1.getDeviceType()).thenReturn(
-                MediaDevice.MediaDeviceType.TYPE_3POINT5_MM_AUDIO_DEVICE);
-
-        assertThat(mMediaOutputController.isZeroMode()).isTrue();
-
-        when(mMediaDevice1.getDeviceType()).thenReturn(
-                MediaDevice.MediaDeviceType.TYPE_USB_C_AUDIO_DEVICE);
-
-        assertThat(mMediaOutputController.isZeroMode()).isTrue();
-    }
-
-    @Test
-    public void isZeroMode_notFromPhoneOutput_returnFalse() {
-        when(mMediaDevice1.getDeviceType()).thenReturn(
-                MediaDevice.MediaDeviceType.TYPE_UNKNOWN);
-        mMediaDevices.clear();
-        mMediaDevices.add(mMediaDevice1);
-        mMediaOutputController.start(mCb);
-        mMediaOutputController.onDeviceListUpdate(mMediaDevices);
-
-        assertThat(mMediaOutputController.isZeroMode()).isFalse();
-
-        when(mMediaDevice1.getDeviceType()).thenReturn(
-                MediaDevice.MediaDeviceType.TYPE_FAST_PAIR_BLUETOOTH_DEVICE);
-
-        assertThat(mMediaOutputController.isZeroMode()).isFalse();
-
-        when(mMediaDevice1.getDeviceType()).thenReturn(
-                MediaDevice.MediaDeviceType.TYPE_BLUETOOTH_DEVICE);
-
-        assertThat(mMediaOutputController.isZeroMode()).isFalse();
-
-        when(mMediaDevice1.getDeviceType()).thenReturn(
-                MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE);
-
-        assertThat(mMediaOutputController.isZeroMode()).isFalse();
-
-        when(mMediaDevice1.getDeviceType()).thenReturn(
-                MediaDevice.MediaDeviceType.TYPE_CAST_GROUP_DEVICE);
-
-        assertThat(mMediaOutputController.isZeroMode()).isFalse();
-    }
-
-    @Test
     public void getGroupMediaDevices_differentDeviceOrder_showingSameOrder() {
         final MediaDevice selectedMediaDevice1 = mock(MediaDevice.class);
         final MediaDevice selectedMediaDevice2 = mock(MediaDevice.class);
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 ef0fc95..6afed1a 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
@@ -140,16 +140,31 @@
         mFeatures.add(MediaRoute2Info.FEATURE_REMOTE_GROUP_PLAYBACK);
 
         assertThat(mMediaOutputDialog.getStopButtonVisibility()).isEqualTo(View.VISIBLE);
+    }
 
-        mFeatures.clear();
+    @Test
+    public void getStopButtonVisibility_remoteBLEDevice_returnVisible() {
         when(mLocalBluetoothProfileManager.getLeAudioBroadcastProfile()).thenReturn(
                 mLocalBluetoothLeBroadcast);
         when(mLocalBluetoothLeBroadcast.isEnabled(any())).thenReturn(false);
         when(mPlaybackState.getState()).thenReturn(PlaybackState.STATE_PLAYING);
+        when(mMediaDevice.isBLEDevice()).thenReturn(true);
+
         assertThat(mMediaOutputDialog.getStopButtonVisibility()).isEqualTo(View.VISIBLE);
     }
 
     @Test
+    public void getStopButtonVisibility_remoteNonBLEDevice_returnGone() {
+        when(mLocalBluetoothProfileManager.getLeAudioBroadcastProfile()).thenReturn(
+                mLocalBluetoothLeBroadcast);
+        when(mLocalBluetoothLeBroadcast.isEnabled(any())).thenReturn(false);
+        when(mPlaybackState.getState()).thenReturn(PlaybackState.STATE_PLAYING);
+        when(mMediaDevice.isBLEDevice()).thenReturn(false);
+
+        assertThat(mMediaOutputDialog.getStopButtonVisibility()).isEqualTo(View.GONE);
+    }
+
+    @Test
     public void getStopButtonVisibility_localDevice_returnGone() {
         mFeatures.add(MediaRoute2Info.FEATURE_LOCAL_PLAYBACK);
 
@@ -157,6 +172,39 @@
     }
 
     @Test
+    public void getBroadcastIconVisibility_isBroadcasting_returnVisible() {
+        when(mLocalBluetoothProfileManager.getLeAudioBroadcastProfile()).thenReturn(
+                mLocalBluetoothLeBroadcast);
+        when(mLocalBluetoothLeBroadcast.isEnabled(any())).thenReturn(true);
+        when(mPlaybackState.getState()).thenReturn(PlaybackState.STATE_PLAYING);
+        when(mMediaDevice.isBLEDevice()).thenReturn(true);
+
+        assertThat(mMediaOutputDialog.getBroadcastIconVisibility()).isEqualTo(View.VISIBLE);
+    }
+
+    @Test
+    public void getBroadcastIconVisibility_noBroadcasting_returnGone() {
+        when(mLocalBluetoothProfileManager.getLeAudioBroadcastProfile()).thenReturn(
+                mLocalBluetoothLeBroadcast);
+        when(mLocalBluetoothLeBroadcast.isEnabled(any())).thenReturn(false);
+        when(mPlaybackState.getState()).thenReturn(PlaybackState.STATE_PLAYING);
+        when(mMediaDevice.isBLEDevice()).thenReturn(true);
+
+        assertThat(mMediaOutputDialog.getBroadcastIconVisibility()).isEqualTo(View.GONE);
+    }
+
+    @Test
+    public void getBroadcastIconVisibility_remoteNonLeDevice_returnGone() {
+        when(mLocalBluetoothProfileManager.getLeAudioBroadcastProfile()).thenReturn(
+                mLocalBluetoothLeBroadcast);
+        when(mLocalBluetoothLeBroadcast.isEnabled(any())).thenReturn(false);
+        when(mPlaybackState.getState()).thenReturn(PlaybackState.STATE_PLAYING);
+        when(mMediaDevice.isBLEDevice()).thenReturn(false);
+
+        assertThat(mMediaOutputDialog.getBroadcastIconVisibility()).isEqualTo(View.GONE);
+    }
+
+    @Test
     // Check the visibility metric logging by creating a new MediaOutput dialog,
     // and verify if the calling times increases.
     public void onCreate_ShouldLogVisibility() {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputGroupAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputGroupAdapterTest.java
deleted file mode 100644
index 9256cd32..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputGroupAdapterTest.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.dialog;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.graphics.drawable.Icon;
-import android.testing.AndroidTestingRunner;
-import android.view.View;
-import android.widget.LinearLayout;
-
-import androidx.core.graphics.drawable.IconCompat;
-import androidx.test.filters.SmallTest;
-
-import com.android.settingslib.media.MediaDevice;
-import com.android.systemui.R;
-import com.android.systemui.SysuiTestCase;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@SmallTest
-@RunWith(AndroidTestingRunner.class)
-public class MediaOutputGroupAdapterTest extends SysuiTestCase {
-
-    private static final String TEST_DEVICE_NAME_1 = "test_device_name_1";
-    private static final String TEST_DEVICE_NAME_2 = "test_device_name_2";
-    private static final String TEST_DEVICE_ID_1 = "test_device_id_1";
-    private static final String TEST_DEVICE_ID_2 = "test_device_id_2";
-    private static final int TEST_VOLUME = 10;
-    private static final int TEST_MAX_VOLUME = 50;
-
-    // Mock
-    private MediaOutputController mMediaOutputController = mock(MediaOutputController.class);
-    private MediaDevice mMediaDevice1 = mock(MediaDevice.class);
-    private MediaDevice mMediaDevice2 = mock(MediaDevice.class);
-    private Icon mIcon = mock(Icon.class);
-    private IconCompat mIconCompat = mock(IconCompat.class);
-
-    private MediaOutputGroupAdapter mGroupAdapter;
-    private MediaOutputGroupAdapter.GroupViewHolder mGroupViewHolder;
-    private List<MediaDevice> mGroupMediaDevices = new ArrayList<>();
-    private List<MediaDevice> mSelectableMediaDevices = new ArrayList<>();
-    private List<MediaDevice> mSelectedMediaDevices = new ArrayList<>();
-    private List<MediaDevice> mDeselectableMediaDevices = new ArrayList<>();
-
-    @Before
-    public void setUp() {
-        when(mMediaOutputController.getGroupMediaDevices()).thenReturn(mGroupMediaDevices);
-        when(mMediaOutputController.getDeviceIconCompat(mMediaDevice1)).thenReturn(mIconCompat);
-        when(mMediaOutputController.getDeviceIconCompat(mMediaDevice2)).thenReturn(mIconCompat);
-        when(mMediaOutputController.getSelectableMediaDevice()).thenReturn(mSelectableMediaDevices);
-        when(mMediaOutputController.getSelectedMediaDevice()).thenReturn(mSelectedMediaDevices);
-        when(mMediaOutputController.getDeselectableMediaDevice()).thenReturn(
-                mDeselectableMediaDevices);
-        when(mIconCompat.toIcon(mContext)).thenReturn(mIcon);
-        when(mMediaDevice1.getName()).thenReturn(TEST_DEVICE_NAME_1);
-        when(mMediaDevice1.getId()).thenReturn(TEST_DEVICE_ID_1);
-        when(mMediaDevice2.getName()).thenReturn(TEST_DEVICE_NAME_2);
-        when(mMediaDevice2.getId()).thenReturn(TEST_DEVICE_ID_2);
-        mGroupMediaDevices.add(mMediaDevice1);
-        mGroupMediaDevices.add(mMediaDevice2);
-        mSelectedMediaDevices.add(mMediaDevice1);
-        mSelectableMediaDevices.add(mMediaDevice2);
-        mDeselectableMediaDevices.add(mMediaDevice1);
-
-        mGroupAdapter = new MediaOutputGroupAdapter(mMediaOutputController);
-        mGroupViewHolder = (MediaOutputGroupAdapter.GroupViewHolder) mGroupAdapter
-                .onCreateViewHolder(new LinearLayout(mContext), 0);
-    }
-
-    @Test
-    public void onBindViewHolder_verifyGroupItem() {
-        mGroupAdapter.onBindViewHolder(mGroupViewHolder, 0);
-
-        assertThat(mGroupViewHolder.mTitleText.getVisibility()).isEqualTo(View.GONE);
-        assertThat(mGroupViewHolder.mCheckBox.getVisibility()).isEqualTo(View.GONE);
-        assertThat(mGroupViewHolder.mSubTitleText.getVisibility()).isEqualTo(View.GONE);
-        assertThat(mGroupViewHolder.mProgressBar.getVisibility()).isEqualTo(View.GONE);
-        assertThat(mGroupViewHolder.mSeekBar.getVisibility()).isEqualTo(View.VISIBLE);
-        assertThat(mGroupViewHolder.mTwoLineTitleText.getVisibility()).isEqualTo(View.VISIBLE);
-        assertThat(mGroupViewHolder.mTwoLineTitleText.getText()).isEqualTo(mContext.getText(
-                R.string.media_output_dialog_group));
-    }
-
-    @Test
-    public void onBindViewHolder_singleSelectedDevice_verifyView() {
-        mGroupAdapter.onBindViewHolder(mGroupViewHolder, 1);
-
-        assertThat(mGroupViewHolder.mTitleText.getVisibility()).isEqualTo(View.GONE);
-        assertThat(mGroupViewHolder.mProgressBar.getVisibility()).isEqualTo(View.GONE);
-        assertThat(mGroupViewHolder.mSubTitleText.getVisibility()).isEqualTo(View.GONE);
-        assertThat(mGroupViewHolder.mSeekBar.getVisibility()).isEqualTo(View.VISIBLE);
-        assertThat(mGroupViewHolder.mTwoLineTitleText.getVisibility()).isEqualTo(View.VISIBLE);
-        assertThat(mGroupViewHolder.mTwoLineTitleText.getText()).isEqualTo(TEST_DEVICE_NAME_1);
-        assertThat(mGroupViewHolder.mCheckBox.getVisibility()).isEqualTo(View.VISIBLE);
-        assertThat(mGroupViewHolder.mCheckBox.isChecked()).isTrue();
-        // Disabled checkBox
-        assertThat(mGroupViewHolder.mCheckBox.isEnabled()).isFalse();
-    }
-
-    @Test
-    public void onBindViewHolder_multipleSelectedDevice_verifyView() {
-        mSelectedMediaDevices.clear();
-        mSelectedMediaDevices.add(mMediaDevice1);
-        mSelectedMediaDevices.add(mMediaDevice2);
-        mDeselectableMediaDevices.clear();
-        mDeselectableMediaDevices.add(mMediaDevice1);
-        mDeselectableMediaDevices.add(mMediaDevice2);
-        mSelectableMediaDevices.clear();
-
-        mGroupAdapter.onBindViewHolder(mGroupViewHolder, 1);
-
-        assertThat(mGroupViewHolder.mTitleText.getVisibility()).isEqualTo(View.GONE);
-        assertThat(mGroupViewHolder.mProgressBar.getVisibility()).isEqualTo(View.GONE);
-        assertThat(mGroupViewHolder.mSubTitleText.getVisibility()).isEqualTo(View.GONE);
-        assertThat(mGroupViewHolder.mSeekBar.getVisibility()).isEqualTo(View.VISIBLE);
-        assertThat(mGroupViewHolder.mTwoLineTitleText.getVisibility()).isEqualTo(View.VISIBLE);
-        assertThat(mGroupViewHolder.mTwoLineTitleText.getText()).isEqualTo(TEST_DEVICE_NAME_1);
-        assertThat(mGroupViewHolder.mCheckBox.getVisibility()).isEqualTo(View.VISIBLE);
-        assertThat(mGroupViewHolder.mCheckBox.isChecked()).isTrue();
-        // Enabled checkBox
-        assertThat(mGroupViewHolder.mCheckBox.isEnabled()).isTrue();
-    }
-
-    @Test
-    public void onBindViewHolder_notDeselectedDevice_verifyView() {
-        mSelectedMediaDevices.clear();
-        mSelectedMediaDevices.add(mMediaDevice1);
-        mSelectedMediaDevices.add(mMediaDevice2);
-        mDeselectableMediaDevices.clear();
-        mDeselectableMediaDevices.add(mMediaDevice1);
-        mSelectableMediaDevices.clear();
-
-        mGroupAdapter.onBindViewHolder(mGroupViewHolder, 2);
-
-        assertThat(mGroupViewHolder.mTitleText.getVisibility()).isEqualTo(View.GONE);
-        assertThat(mGroupViewHolder.mProgressBar.getVisibility()).isEqualTo(View.GONE);
-        assertThat(mGroupViewHolder.mSubTitleText.getVisibility()).isEqualTo(View.GONE);
-        assertThat(mGroupViewHolder.mSeekBar.getVisibility()).isEqualTo(View.VISIBLE);
-        assertThat(mGroupViewHolder.mTwoLineTitleText.getVisibility()).isEqualTo(View.VISIBLE);
-        assertThat(mGroupViewHolder.mTwoLineTitleText.getText()).isEqualTo(TEST_DEVICE_NAME_2);
-        assertThat(mGroupViewHolder.mCheckBox.getVisibility()).isEqualTo(View.VISIBLE);
-        assertThat(mGroupViewHolder.mCheckBox.isChecked()).isTrue();
-        // Disabled checkBox
-        assertThat(mGroupViewHolder.mCheckBox.isEnabled()).isFalse();
-    }
-
-    @Test
-    public void onBindViewHolder_selectableDevice_verifyCheckBox() {
-        mGroupAdapter.onBindViewHolder(mGroupViewHolder, 2);
-
-        assertThat(mGroupViewHolder.mTitleText.getVisibility()).isEqualTo(View.GONE);
-        assertThat(mGroupViewHolder.mProgressBar.getVisibility()).isEqualTo(View.GONE);
-        assertThat(mGroupViewHolder.mSubTitleText.getVisibility()).isEqualTo(View.GONE);
-        assertThat(mGroupViewHolder.mSeekBar.getVisibility()).isEqualTo(View.VISIBLE);
-        assertThat(mGroupViewHolder.mTwoLineTitleText.getVisibility()).isEqualTo(View.VISIBLE);
-        assertThat(mGroupViewHolder.mTwoLineTitleText.getText()).isEqualTo(TEST_DEVICE_NAME_2);
-        assertThat(mGroupViewHolder.mCheckBox.getVisibility()).isEqualTo(View.VISIBLE);
-        assertThat(mGroupViewHolder.mCheckBox.isChecked()).isFalse();
-        // Enabled checkBox
-        assertThat(mGroupViewHolder.mCheckBox.isEnabled()).isTrue();
-    }
-
-    @Test
-    public void onBindViewHolder_verifyDeviceVolume() {
-        when(mMediaDevice1.getCurrentVolume()).thenReturn(TEST_VOLUME);
-        when(mMediaDevice1.getMaxVolume()).thenReturn(TEST_MAX_VOLUME);
-        mGroupViewHolder.mSeekBar.setVisibility(View.VISIBLE);
-
-        mGroupAdapter.onBindViewHolder(mGroupViewHolder, 1);
-
-        assertThat(mGroupViewHolder.mSeekBar.getVolume()).isEqualTo(TEST_VOLUME);
-    }
-
-    @Test
-    public void clickSelectedDevice_verifyRemoveDeviceFromPlayMedia() {
-        mSelectedMediaDevices.clear();
-        mSelectedMediaDevices.add(mMediaDevice1);
-        mSelectedMediaDevices.add(mMediaDevice2);
-        mDeselectableMediaDevices.clear();
-        mDeselectableMediaDevices.add(mMediaDevice1);
-        mDeselectableMediaDevices.add(mMediaDevice2);
-        mSelectableMediaDevices.clear();
-
-        mGroupAdapter.onBindViewHolder(mGroupViewHolder, 1);
-        mGroupViewHolder.mCheckBox.performClick();
-
-        verify(mMediaOutputController).removeDeviceFromPlayMedia(mMediaDevice1);
-    }
-
-    @Test
-    public void clickSelectabelDevice_verifyAddDeviceToPlayMedia() {
-        mGroupAdapter.onBindViewHolder(mGroupViewHolder, 2);
-
-        mGroupViewHolder.mCheckBox.performClick();
-
-        verify(mMediaOutputController).addDeviceToPlayMedia(mMediaDevice2);
-    }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputGroupDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputGroupDialogTest.java
deleted file mode 100644
index 4534ae6..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputGroupDialogTest.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.dialog;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import android.media.AudioManager;
-import android.media.session.MediaSessionManager;
-import android.os.PowerExemptionManager;
-import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
-import android.view.View;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.settingslib.bluetooth.LocalBluetoothManager;
-import com.android.settingslib.media.LocalMediaManager;
-import com.android.settingslib.media.MediaDevice;
-import com.android.systemui.R;
-import com.android.systemui.SysuiTestCase;
-import com.android.systemui.animation.DialogLaunchAnimator;
-import com.android.systemui.broadcast.BroadcastSender;
-import com.android.systemui.media.nearby.NearbyMediaDevicesManager;
-import com.android.systemui.plugins.ActivityStarter;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Optional;
-
-@SmallTest
-@RunWith(AndroidTestingRunner.class)
-@TestableLooper.RunWithLooper
-public class MediaOutputGroupDialogTest extends SysuiTestCase {
-
-    private static final String TEST_PACKAGE = "test_package";
-
-    // Mock
-    private MediaSessionManager mMediaSessionManager = mock(MediaSessionManager.class);
-    private LocalBluetoothManager mLocalBluetoothManager = mock(LocalBluetoothManager.class);
-    private ActivityStarter mStarter = mock(ActivityStarter.class);
-    private BroadcastSender mBroadcastSender = mock(BroadcastSender.class);
-    private LocalMediaManager mLocalMediaManager = mock(LocalMediaManager.class);
-    private MediaDevice mMediaDevice = mock(MediaDevice.class);
-    private MediaDevice mMediaDevice1 = mock(MediaDevice.class);
-    private NotificationEntryManager mNotificationEntryManager =
-            mock(NotificationEntryManager.class);
-    private final DialogLaunchAnimator mDialogLaunchAnimator = mock(DialogLaunchAnimator.class);
-    private NearbyMediaDevicesManager mNearbyMediaDevicesManager = mock(
-            NearbyMediaDevicesManager.class);
-    private final AudioManager mAudioManager = mock(AudioManager.class);
-    private PowerExemptionManager mPowerExemptionManager = mock(PowerExemptionManager.class);
-
-    private MediaOutputGroupDialog mMediaOutputGroupDialog;
-    private MediaOutputController mMediaOutputController;
-    private List<MediaDevice> mMediaDevices = new ArrayList<>();
-
-    @Before
-    public void setUp() {
-        mMediaOutputController = new MediaOutputController(mContext, TEST_PACKAGE,
-                mMediaSessionManager, mLocalBluetoothManager, mStarter,
-                mNotificationEntryManager, mDialogLaunchAnimator,
-                Optional.of(mNearbyMediaDevicesManager), mAudioManager, mPowerExemptionManager);
-        mMediaOutputController.mLocalMediaManager = mLocalMediaManager;
-        mMediaOutputGroupDialog = new MediaOutputGroupDialog(mContext, false, mBroadcastSender,
-                mMediaOutputController);
-        mMediaOutputGroupDialog.show();
-        when(mLocalMediaManager.getSelectedMediaDevice()).thenReturn(mMediaDevices);
-    }
-
-    @After
-    public void tearDown() {
-        mMediaOutputGroupDialog.dismissDialog();
-    }
-
-    @Test
-    public void getStopButtonVisibility_returnVisible() {
-        assertThat(mMediaOutputGroupDialog.getStopButtonVisibility()).isEqualTo(View.VISIBLE);
-    }
-
-    @Test
-    public void getHeaderSubtitle_singleDevice_verifyTitle() {
-        mMediaDevices.add(mMediaDevice);
-
-        assertThat(mMediaOutputGroupDialog.getHeaderSubtitle()).isEqualTo(
-                mContext.getText(R.string.media_output_dialog_single_device));
-    }
-
-    @Test
-    public void getHeaderSubtitle_multipleDevices_verifyTitle() {
-        mMediaDevices.add(mMediaDevice);
-        mMediaDevices.add(mMediaDevice1);
-
-        assertThat(mMediaOutputGroupDialog.getHeaderSubtitle()).isEqualTo(mContext.getString(
-                R.string.media_output_dialog_multiple_devices, mMediaDevices.size()));
-    }
-
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/common/MediaTttChipControllerCommonTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/common/MediaTttChipControllerCommonTest.kt
index b9a69bb..f133068 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/common/MediaTttChipControllerCommonTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/common/MediaTttChipControllerCommonTest.kt
@@ -21,16 +21,17 @@
 import android.content.pm.PackageManager
 import android.graphics.drawable.Drawable
 import android.os.PowerManager
-import android.view.MotionEvent
 import android.view.View
 import android.view.ViewGroup
 import android.view.WindowManager
+import android.view.accessibility.AccessibilityManager
 import android.widget.ImageView
 import androidx.test.filters.SmallTest
 import com.android.systemui.R
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.dagger.qualifiers.Main
-import com.android.systemui.statusbar.gesture.TapGestureDetector
+import com.android.systemui.statusbar.policy.ConfigurationController
+import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener
 import com.android.systemui.util.concurrency.DelayableExecutor
 import com.android.systemui.util.concurrency.FakeExecutor
 import com.android.systemui.util.mockito.any
@@ -52,7 +53,7 @@
 
 @SmallTest
 class MediaTttChipControllerCommonTest : SysuiTestCase() {
-    private lateinit var controllerCommon: MediaTttChipControllerCommon<ChipInfo>
+    private lateinit var controllerCommon: TestControllerCommon
 
     private lateinit var fakeClock: FakeSystemClock
     private lateinit var fakeExecutor: FakeExecutor
@@ -65,12 +66,14 @@
     @Mock
     private lateinit var logger: MediaTttLogger
     @Mock
+    private lateinit var accessibilityManager: AccessibilityManager
+    @Mock
+    private lateinit var configurationController: ConfigurationController
+    @Mock
     private lateinit var windowManager: WindowManager
     @Mock
     private lateinit var viewUtil: ViewUtil
     @Mock
-    private lateinit var tapGestureDetector: TapGestureDetector
-    @Mock
     private lateinit var powerManager: PowerManager
 
     @Before
@@ -88,32 +91,56 @@
         )).thenReturn(applicationInfo)
         context.setMockPackageManager(packageManager)
 
+        whenever(accessibilityManager.getRecommendedTimeoutMillis(any(), any()))
+            .thenReturn(TIMEOUT_MS.toInt())
+
         fakeClock = FakeSystemClock()
         fakeExecutor = FakeExecutor(fakeClock)
 
         controllerCommon = TestControllerCommon(
-            context, logger, windowManager, viewUtil, fakeExecutor, tapGestureDetector, powerManager
+                context,
+                logger,
+                windowManager,
+                viewUtil,
+                fakeExecutor,
+                accessibilityManager,
+                configurationController,
+                powerManager,
         )
     }
 
     @Test
-    fun displayChip_chipAddedAndGestureDetectionStartedAndScreenOn() {
+    fun displayChip_chipAdded() {
         controllerCommon.displayChip(getState())
 
         verify(windowManager).addView(any(), any())
-        verify(tapGestureDetector).addOnGestureDetectedCallback(any(), any())
+    }
+
+    @Test
+    fun displayChip_screenOff_screenWakes() {
+        whenever(powerManager.isScreenOn).thenReturn(false)
+
+        controllerCommon.displayChip(getState())
+
         verify(powerManager).wakeUp(any(), any(), any())
     }
 
     @Test
-    fun displayChip_twice_chipAndGestureDetectionNotAddedTwice() {
+    fun displayChip_screenAlreadyOn_screenNotWoken() {
+        whenever(powerManager.isScreenOn).thenReturn(true)
+
+        controllerCommon.displayChip(getState())
+
+        verify(powerManager, never()).wakeUp(any(), any(), any())
+    }
+
+    @Test
+    fun displayChip_twice_chipNotAddedTwice() {
         controllerCommon.displayChip(getState())
         reset(windowManager)
-        reset(tapGestureDetector)
 
         controllerCommon.displayChip(getState())
         verify(windowManager, never()).addView(any(), any())
-        verify(tapGestureDetector, never()).addOnGestureDetectedCallback(any(), any())
     }
 
     @Test
@@ -173,7 +200,20 @@
     }
 
     @Test
-    fun removeChip_chipRemovedAndGestureDetectionStoppedAndRemovalLogged() {
+    fun displayScaleChange_chipReinflatedWithMostRecentState() {
+        controllerCommon.displayChip(getState(name = "First name"))
+        controllerCommon.displayChip(getState(name = "Second name"))
+        reset(windowManager)
+
+        getConfigurationListener().onDensityOrFontScaleChanged()
+
+        verify(windowManager).removeView(any())
+        verify(windowManager).addView(any(), any())
+        assertThat(controllerCommon.mostRecentChipInfo?.name).isEqualTo("Second name")
+    }
+
+    @Test
+    fun removeChip_chipRemovedAndRemovalLogged() {
         // First, add the chip
         controllerCommon.displayChip(getState())
 
@@ -182,7 +222,6 @@
         controllerCommon.removeChip(reason)
 
         verify(windowManager).removeView(any())
-        verify(tapGestureDetector).removeOnGestureDetectedCallback(any())
         verify(logger).logChipRemoval(reason)
     }
 
@@ -294,41 +333,7 @@
         assertThat(chipView.getAppIconView().measuredHeight).isEqualTo(ICON_SIZE)
     }
 
-    @Test
-    fun tapGestureDetected_outsideViewBounds_viewHidden() {
-        controllerCommon.displayChip(getState())
-        whenever(viewUtil.touchIsWithinView(any(), any(), any())).thenReturn(false)
-        val gestureCallbackCaptor = argumentCaptor<(MotionEvent) -> Unit>()
-        verify(tapGestureDetector).addOnGestureDetectedCallback(
-            any(), capture(gestureCallbackCaptor)
-        )
-        val callback = gestureCallbackCaptor.value!!
-
-        callback.invoke(
-            MotionEvent.obtain(0, 0, MotionEvent.ACTION_DOWN, 0f, 0f, 0)
-        )
-
-        verify(windowManager).removeView(any())
-    }
-
-    @Test
-    fun tapGestureDetected_insideViewBounds_viewNotHidden() {
-        controllerCommon.displayChip(getState())
-        whenever(viewUtil.touchIsWithinView(any(), any(), any())).thenReturn(true)
-        val gestureCallbackCaptor = argumentCaptor<(MotionEvent) -> Unit>()
-        verify(tapGestureDetector).addOnGestureDetectedCallback(
-            any(), capture(gestureCallbackCaptor)
-        )
-        val callback = gestureCallbackCaptor.value!!
-
-        callback.invoke(
-            MotionEvent.obtain(0, 0, MotionEvent.ACTION_DOWN, 0f, 0f, 0)
-        )
-
-        verify(windowManager, never()).removeView(any())
-    }
-
-    private fun getState() = ChipInfo()
+    private fun getState(name: String = "name") = ChipInfo(name)
 
     private fun getChipView(): ViewGroup {
         val viewCaptor = ArgumentCaptor.forClass(View::class.java)
@@ -338,37 +343,48 @@
 
     private fun ViewGroup.getAppIconView() = this.requireViewById<ImageView>(R.id.app_icon)
 
+    private fun getConfigurationListener(): ConfigurationListener {
+        val callbackCaptor = argumentCaptor<ConfigurationListener>()
+        verify(configurationController).addCallback(capture(callbackCaptor))
+        return callbackCaptor.value
+    }
+
     inner class TestControllerCommon(
         context: Context,
         logger: MediaTttLogger,
         windowManager: WindowManager,
         viewUtil: ViewUtil,
         @Main mainExecutor: DelayableExecutor,
-        tapGestureDetector: TapGestureDetector,
-        powerManager: PowerManager
+        accessibilityManager: AccessibilityManager,
+        configurationController: ConfigurationController,
+        powerManager: PowerManager,
     ) : MediaTttChipControllerCommon<ChipInfo>(
         context,
         logger,
         windowManager,
         viewUtil,
         mainExecutor,
-        tapGestureDetector,
+        accessibilityManager,
+        configurationController,
         powerManager,
-        R.layout.media_ttt_chip
+        R.layout.media_ttt_chip,
     ) {
-        override fun updateChipView(chipInfo: ChipInfo, currentChipView: ViewGroup) {
+        var mostRecentChipInfo: ChipInfo? = null
 
+        override val windowLayoutParams = commonWindowLayoutParams
+        override fun updateChipView(newChipInfo: ChipInfo, currentChipView: ViewGroup) {
+            super.updateChipView(newChipInfo, currentChipView)
+            mostRecentChipInfo = newChipInfo
         }
-
-        override fun getIconSize(isAppIcon: Boolean): Int? = ICON_SIZE
+        override fun getIconSize(isAppIcon: Boolean): Int = ICON_SIZE
     }
 
-    inner class ChipInfo : ChipInfoCommon {
-        override fun getTimeoutMs() = TIMEOUT_MS
+    inner class ChipInfo(val name: String) : ChipInfoCommon {
+        override fun getTimeoutMs() = 1L
     }
 }
 
 private const val PACKAGE_NAME = "com.android.systemui"
 private const val APP_NAME = "Fake App Name"
 private const val TIMEOUT_MS = 10000L
-private const val ICON_SIZE = 47
\ No newline at end of file
+private const val ICON_SIZE = 47
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiverTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiverTest.kt
index 9edc4f4..dbc5f7c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiverTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiverTest.kt
@@ -28,6 +28,7 @@
 import android.view.View
 import android.view.ViewGroup
 import android.view.WindowManager
+import android.view.accessibility.AccessibilityManager
 import android.widget.ImageView
 import androidx.test.filters.SmallTest
 import com.android.internal.logging.testing.UiEventLoggerFake
@@ -35,7 +36,7 @@
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.media.taptotransfer.common.MediaTttLogger
 import com.android.systemui.statusbar.CommandQueue
-import com.android.systemui.statusbar.gesture.TapGestureDetector
+import com.android.systemui.statusbar.policy.ConfigurationController
 import com.android.systemui.util.concurrency.FakeExecutor
 import com.android.systemui.util.mockito.any
 import com.android.systemui.util.mockito.eq
@@ -65,6 +66,10 @@
     @Mock
     private lateinit var logger: MediaTttLogger
     @Mock
+    private lateinit var accessibilityManager: AccessibilityManager
+    @Mock
+    private lateinit var configurationController: ConfigurationController
+    @Mock
     private lateinit var powerManager: PowerManager
     @Mock
     private lateinit var windowManager: WindowManager
@@ -99,7 +104,8 @@
             windowManager,
             viewUtil,
             FakeExecutor(FakeSystemClock()),
-            TapGestureDetector(context),
+            accessibilityManager,
+            configurationController,
             powerManager,
             Handler.getMain(),
             receiverUiEventLogger
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttChipControllerSenderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttChipControllerSenderTest.kt
index a8c72dd..cd8ee73 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttChipControllerSenderTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttChipControllerSenderTest.kt
@@ -27,6 +27,7 @@
 import android.view.View
 import android.view.ViewGroup
 import android.view.WindowManager
+import android.view.accessibility.AccessibilityManager
 import android.widget.ImageView
 import android.widget.TextView
 import androidx.test.filters.SmallTest
@@ -36,13 +37,12 @@
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.media.taptotransfer.common.MediaTttLogger
 import com.android.systemui.statusbar.CommandQueue
-import com.android.systemui.statusbar.gesture.TapGestureDetector
+import com.android.systemui.statusbar.policy.ConfigurationController
 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.systemui.util.view.ViewUtil
-
 import com.google.common.truth.Truth.assertThat
 import org.junit.Before
 import org.junit.Test
@@ -51,8 +51,8 @@
 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
 
 @SmallTest
 @RunWith(AndroidTestingRunner::class)
@@ -67,6 +67,10 @@
     @Mock
     private lateinit var logger: MediaTttLogger
     @Mock
+    private lateinit var accessibilityManager: AccessibilityManager
+    @Mock
+    private lateinit var configurationController: ConfigurationController
+    @Mock
     private lateinit var powerManager: PowerManager
     @Mock
     private lateinit var windowManager: WindowManager
@@ -95,9 +99,12 @@
 
         fakeClock = FakeSystemClock()
         fakeExecutor = FakeExecutor(fakeClock)
+
         uiEventLoggerFake = UiEventLoggerFake()
         senderUiEventLogger = MediaTttSenderUiEventLogger(uiEventLoggerFake)
 
+        whenever(accessibilityManager.getRecommendedTimeoutMillis(any(), any())).thenReturn(TIMEOUT)
+
         controllerSender = MediaTttChipControllerSender(
             commandQueue,
             context,
@@ -105,7 +112,8 @@
             windowManager,
             viewUtil,
             fakeExecutor,
-            TapGestureDetector(context),
+            accessibilityManager,
+            configurationController,
             powerManager,
             senderUiEventLogger
         )
@@ -592,7 +600,7 @@
         fakeClock.advanceTime(1000L)
         controllerSender.removeChip("fakeRemovalReason")
 
-        fakeClock.advanceTime(state.state.timeout + 1)
+        fakeClock.advanceTime(TIMEOUT + 1L)
 
         verify(windowManager).removeView(any())
     }
@@ -615,7 +623,7 @@
         fakeClock.advanceTime(1000L)
         controllerSender.removeChip("fakeRemovalReason")
 
-        fakeClock.advanceTime(state.state.timeout + 1)
+        fakeClock.advanceTime(TIMEOUT + 1L)
 
         verify(windowManager).removeView(any())
     }
@@ -674,6 +682,7 @@
 private const val APP_NAME = "Fake app name"
 private const val OTHER_DEVICE_NAME = "My Tablet"
 private const val PACKAGE_NAME = "com.android.systemui"
+private const val TIMEOUT = 10000
 
 private val routeInfo = MediaRoute2Info.Builder("id", OTHER_DEVICE_NAME)
     .addFeature("feature")
diff --git a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavBarHelperTest.java b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavBarHelperTest.java
index edcf479..8073103 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavBarHelperTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavBarHelperTest.java
@@ -39,6 +39,7 @@
 import androidx.test.filters.SmallTest;
 import androidx.test.runner.AndroidJUnit4;
 
+import com.android.keyguard.KeyguardViewController;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.accessibility.AccessibilityButtonModeObserver;
 import com.android.systemui.accessibility.AccessibilityButtonTargetsObserver;
@@ -112,7 +113,7 @@
         mNavBarHelper = new NavBarHelper(mContext, mAccessibilityManager,
                 mAccessibilityButtonModeObserver, mAccessibilityButtonTargetObserver,
                 mSystemActions, mOverviewProxyService, mAssistManagerLazy,
-                () -> Optional.of(mock(CentralSurfaces.class)),
+                () -> Optional.of(mock(CentralSurfaces.class)), mock(KeyguardViewController.class),
                 mNavigationModeController, mUserTracker, mDumpManager);
 
     }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerTest.java
index 4e3bdea..b0cf061 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerTest.java
@@ -41,6 +41,7 @@
 import com.android.systemui.Dependency;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.dump.DumpManager;
+import com.android.systemui.flags.FeatureFlags;
 import com.android.systemui.model.SysUiState;
 import com.android.systemui.recents.OverviewProxyService;
 import com.android.systemui.statusbar.CommandQueue;
@@ -96,7 +97,8 @@
                         mock(AutoHideController.class),
                         mock(LightBarController.class),
                         Optional.of(mock(Pip.class)),
-                        Optional.of(mock(BackAnimation.class))));
+                        Optional.of(mock(BackAnimation.class)),
+                        mock(FeatureFlags.class)));
         initializeNavigationBars();
     }
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTest.java b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTest.java
index 1cfa3b2..51f0953 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarTest.java
@@ -72,6 +72,7 @@
 
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.UiEventLogger;
+import com.android.keyguard.KeyguardViewController;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.SysuiTestableContext;
 import com.android.systemui.accessibility.AccessibilityButtonModeObserver;
@@ -89,6 +90,8 @@
 import com.android.systemui.recents.Recents;
 import com.android.systemui.settings.UserContextProvider;
 import com.android.systemui.settings.UserTracker;
+import com.android.systemui.shade.NotificationShadeWindowView;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.shared.rotation.RotationButtonController;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.NotificationRemoteInputManager;
@@ -97,8 +100,6 @@
 import com.android.systemui.statusbar.phone.CentralSurfaces;
 import com.android.systemui.statusbar.phone.LightBarController;
 import com.android.systemui.statusbar.phone.LightBarTransitionsController;
-import com.android.systemui.statusbar.phone.NotificationShadeWindowView;
-import com.android.systemui.statusbar.phone.ShadeController;
 import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
 import com.android.systemui.statusbar.policy.DeviceProvisionedController;
 import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -193,6 +194,8 @@
     @Mock
     private CentralSurfaces mCentralSurfaces;
     @Mock
+    private KeyguardViewController mKeyguardViewController;
+    @Mock
     private UserContextProvider mUserContextProvider;
     @Mock
     private Resources mResources;
@@ -237,8 +240,8 @@
                     mock(AccessibilityButtonTargetsObserver.class),
                     mSystemActions, mOverviewProxyService,
                     () -> mock(AssistManager.class), () -> Optional.of(mCentralSurfaces),
-                    mock(NavigationModeController.class), mock(UserTracker.class),
-                    mock(DumpManager.class)));
+                    mKeyguardViewController, mock(NavigationModeController.class),
+                    mock(UserTracker.class), mock(DumpManager.class)));
             mNavigationBar = createNavBar(mContext);
             mExternalDisplayNavigationBar = createNavBar(mSysuiTestableContextExternal);
         });
@@ -377,7 +380,7 @@
 
         // Verify navbar didn't alter and showing back icon when the keyguard is showing without
         // requesting IME insets visible.
-        doReturn(true).when(mCentralSurfaces).isKeyguardShowing();
+        doReturn(true).when(mKeyguardViewController).isShowing();
         mNavigationBar.setImeWindowStatus(DEFAULT_DISPLAY, null, IME_VISIBLE,
                 BACK_DISPOSITION_DEFAULT, true);
         assertFalse((mNavigationBar.getNavigationIconHints() & NAVIGATION_HINT_BACK_ALT) != 0);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/people/widget/LaunchConversationActivityTest.java b/packages/SystemUI/tests/src/com/android/systemui/people/widget/LaunchConversationActivityTest.java
index 99f21ad..c8ebd12 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/people/widget/LaunchConversationActivityTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/people/widget/LaunchConversationActivityTest.java
@@ -48,6 +48,8 @@
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
 import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider;
+import com.android.systemui.util.concurrency.FakeExecutor;
+import com.android.systemui.util.time.FakeSystemClock;
 import com.android.systemui.wmshell.BubblesManager;
 import com.android.wm.shell.bubbles.Bubble;
 
@@ -106,6 +108,9 @@
 
     private Intent mIntent;
 
+    private FakeSystemClock mFakeSystemClock = new FakeSystemClock();
+    private FakeExecutor mBgExecutor = new FakeExecutor(mFakeSystemClock);
+
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
@@ -114,7 +119,8 @@
                 mNotifCollection,
                 Optional.of(mBubblesManager),
                 mUserManager,
-                mCommandQueue
+                mCommandQueue,
+                mBgExecutor
         );
         verify(mCommandQueue, times(1)).addCallback(mCallbacksCaptor.capture());
 
@@ -193,6 +199,7 @@
         // Ensure callback removed
         verify(mCommandQueue).removeCallback(any());
         // Clear the notification for bubbles.
+        FakeExecutor.exhaustExecutors(mBgExecutor);
         verify(mIStatusBarService, times(1)).onNotificationClear(any(),
                 anyInt(), any(), anyInt(), anyInt(), mNotificationVisibilityCaptor.capture());
         // Do not select the bubble.
diff --git a/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java b/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java
index 26e4d9d..a56990f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java
@@ -222,7 +222,7 @@
 
         mReceiver.onReceive(mContext, intent);
 
-        verify(mDialogLaunchAnimator).showFromView(any(), eq(mView));
+        verify(mDialogLaunchAnimator).showFromView(any(), eq(mView), any());
 
         mPowerNotificationWarnings.getSaverConfirmationDialog().dismiss();
     }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java
index 664af75..32c66d2 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFragmentTest.java
@@ -32,8 +32,6 @@
 import android.content.Context;
 import android.graphics.Rect;
 import android.os.Bundle;
-import android.os.Handler;
-import android.os.Looper;
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper.RunWithLooper;
 import android.view.LayoutInflater;
@@ -42,36 +40,23 @@
 
 import androidx.test.filters.SmallTest;
 
-import com.android.internal.logging.UiEventLogger;
 import com.android.keyguard.BouncerPanelExpansionCalculator;
 import com.android.systemui.R;
 import com.android.systemui.SysuiBaseFragmentTest;
 import com.android.systemui.animation.ShadeInterpolation;
-import com.android.systemui.broadcast.BroadcastDispatcher;
 import com.android.systemui.dump.DumpManager;
 import com.android.systemui.media.MediaHost;
 import com.android.systemui.plugins.FalsingManager;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.customize.QSCustomizerController;
 import com.android.systemui.qs.dagger.QSFragmentComponent;
-import com.android.systemui.qs.external.CustomTileStatePersister;
-import com.android.systemui.qs.external.TileLifecycleManager;
 import com.android.systemui.qs.external.TileServiceRequestController;
-import com.android.systemui.qs.logging.QSLogger;
-import com.android.systemui.qs.tileimpl.QSFactoryImpl;
-import com.android.systemui.settings.UserTracker;
-import com.android.systemui.shared.plugins.PluginManager;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.StatusBarState;
-import com.android.systemui.statusbar.phone.AutoTileManager;
-import com.android.systemui.statusbar.phone.CentralSurfaces;
 import com.android.systemui.statusbar.phone.KeyguardBypassController;
-import com.android.systemui.statusbar.phone.StatusBarIconController;
 import com.android.systemui.statusbar.policy.ConfigurationController;
 import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
-import com.android.systemui.tuner.TunerService;
 import com.android.systemui.util.animation.UniqueObjectHostView;
-import com.android.systemui.util.settings.SecureSettings;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -79,8 +64,6 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
-import java.util.Optional;
-
 @RunWith(AndroidTestingRunner.class)
 @RunWithLooper(setAsMainLooper = true)
 @SmallTest
@@ -125,34 +108,11 @@
         mFragments.dispatchResume();
         processAllMessages();
 
-        QSTileHost host =
-                new QSTileHost(
-                        mContext,
-                        mock(StatusBarIconController.class),
-                        mock(QSFactoryImpl.class),
-                        new Handler(),
-                        Looper.myLooper(),
-                        mock(PluginManager.class),
-                        mock(TunerService.class),
-                        () -> mock(AutoTileManager.class),
-                        mock(DumpManager.class),
-                        mock(BroadcastDispatcher.class),
-                        Optional.of(mock(CentralSurfaces.class)),
-                        mock(QSLogger.class),
-                        mock(UiEventLogger.class),
-                        mock(UserTracker.class),
-                        mock(SecureSettings.class),
-                        mock(CustomTileStatePersister.class),
-                        mTileServiceRequestControllerBuilder,
-                        mock(TileLifecycleManager.Factory.class));
-
         qs.setListening(true);
         processAllMessages();
 
         qs.setListening(false);
         processAllMessages();
-        host.destroy();
-        processAllMessages();
     }
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSSecurityFooterTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSSecurityFooterTest.java
index a3c353b..c1c0f78 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSSecurityFooterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSSecurityFooterTest.java
@@ -731,7 +731,7 @@
 
         mTestableLooper.processAllMessages();
 
-        verify(mDialogLaunchAnimator).showFromView(any(), eq(mRootView));
+        verify(mDialogLaunchAnimator).showFromView(any(), eq(mRootView), any());
     }
 
     @Test
@@ -768,7 +768,7 @@
         ArgumentCaptor<AlertDialog> dialogCaptor = ArgumentCaptor.forClass(AlertDialog.class);
 
         mTestableLooper.processAllMessages();
-        verify(mDialogLaunchAnimator).showFromView(dialogCaptor.capture(), any());
+        verify(mDialogLaunchAnimator).showFromView(dialogCaptor.capture(), any(), any());
 
         AlertDialog dialog = dialogCaptor.getValue();
         dialog.create();
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 8cf3fe2..7dbc561 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSTileHostTest.java
@@ -32,12 +32,11 @@
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
+import android.database.ContentObserver;
 import android.os.Handler;
 import android.os.Looper;
 import android.os.UserHandle;
 import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
-import android.testing.TestableLooper.RunWithLooper;
 import android.view.View;
 
 import androidx.annotation.Nullable;
@@ -48,7 +47,6 @@
 import com.android.internal.util.CollectionUtils;
 import com.android.systemui.R;
 import com.android.systemui.SysuiTestCase;
-import com.android.systemui.broadcast.BroadcastDispatcher;
 import com.android.systemui.classifier.FalsingManagerFake;
 import com.android.systemui.dump.DumpManager;
 import com.android.systemui.plugins.ActivityStarter;
@@ -68,8 +66,10 @@
 import com.android.systemui.statusbar.phone.CentralSurfaces;
 import com.android.systemui.statusbar.phone.StatusBarIconController;
 import com.android.systemui.tuner.TunerService;
+import com.android.systemui.util.concurrency.FakeExecutor;
 import com.android.systemui.util.settings.FakeSettings;
 import com.android.systemui.util.settings.SecureSettings;
+import com.android.systemui.util.time.FakeSystemClock;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -81,18 +81,19 @@
 import java.io.StringWriter;
 import java.util.List;
 import java.util.Optional;
+import java.util.concurrent.Executor;
 
 import javax.inject.Provider;
 
 @RunWith(AndroidTestingRunner.class)
 @SmallTest
-@RunWithLooper(setAsMainLooper = true)
 public class QSTileHostTest extends SysuiTestCase {
 
     private static String MOCK_STATE_STRING = "MockState";
     private static ComponentName CUSTOM_TILE =
             ComponentName.unflattenFromString("TEST_PKG/.TEST_CLS");
     private static final String CUSTOM_TILE_SPEC = CustomTile.toSpec(CUSTOM_TILE);
+    private static final String SETTING = QSTileHost.TILES_SETTING;
 
     @Mock
     private StatusBarIconController mIconController;
@@ -107,8 +108,6 @@
     @Mock
     private DumpManager mDumpManager;
     @Mock
-    private BroadcastDispatcher mBroadcastDispatcher;
-    @Mock
     private QSTile.State mMockState;
     @Mock
     private CentralSurfaces mCentralSurfaces;
@@ -132,31 +131,47 @@
     @Mock
     private TileLifecycleManager mTileLifecycleManager;
 
-    private Handler mHandler;
-    private TestableLooper mLooper;
+    private FakeExecutor mMainExecutor;
+
     private QSTileHost mQSTileHost;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        mLooper = TestableLooper.get(this);
-        mHandler = new Handler(mLooper.getLooper());
+        mMainExecutor = new FakeExecutor(new FakeSystemClock());
+
         when(mTileServiceRequestControllerBuilder.create(any()))
                 .thenReturn(mTileServiceRequestController);
         when(mTileLifecycleManagerFactory.create(any(Intent.class), any(UserHandle.class)))
                 .thenReturn(mTileLifecycleManager);
 
         mSecureSettings = new FakeSettings();
-        mSecureSettings.putStringForUser(
-                QSTileHost.TILES_SETTING, "", "", false, mUserTracker.getUserId(), false);
-        mQSTileHost = new TestQSTileHost(mContext, mIconController, mDefaultFactory, mHandler,
-                mLooper.getLooper(), mPluginManager, mTunerService, mAutoTiles, mDumpManager,
-                mBroadcastDispatcher, mCentralSurfaces, mQSLogger, mUiEventLogger, mUserTracker,
-                mSecureSettings, mCustomTileStatePersister, mTileServiceRequestControllerBuilder,
-                mTileLifecycleManagerFactory);
+        saveSetting("");
+        mQSTileHost = new TestQSTileHost(mContext, mIconController, mDefaultFactory, mMainExecutor,
+                mPluginManager, mTunerService, mAutoTiles, mDumpManager, mCentralSurfaces,
+                mQSLogger, mUiEventLogger, mUserTracker, mSecureSettings, mCustomTileStatePersister,
+                mTileServiceRequestControllerBuilder, mTileLifecycleManagerFactory);
+
+        mSecureSettings.registerContentObserverForUser(SETTING, new ContentObserver(null) {
+            @Override
+            public void onChange(boolean selfChange) {
+                super.onChange(selfChange);
+                mMainExecutor.execute(() -> mQSTileHost.onTuningChanged(SETTING, getSetting()));
+                mMainExecutor.runAllReady();
+            }
+        }, mUserTracker.getUserId());
         setUpTileFactory();
     }
 
+    private void saveSetting(String value) {
+        mSecureSettings.putStringForUser(
+                SETTING, value, "", false, mUserTracker.getUserId(), false);
+    }
+
+    private String getSetting() {
+        return mSecureSettings.getStringForUser(SETTING, mUserTracker.getUserId());
+    }
+
     private void setUpTileFactory() {
         when(mMockState.toString()).thenReturn(MOCK_STATE_STRING);
         // Only create this kind of tiles
@@ -173,6 +188,10 @@
                         return new NotAvailableTile(mQSTileHost);
                     } else if (CUSTOM_TILE_SPEC.equals(spec)) {
                         return mCustomTile;
+                    } else if ("internet".equals(spec)
+                            || "wifi".equals(spec)
+                            || "cell".equals(spec)) {
+                        return new TestTile1(mQSTileHost);
                     } else {
                         return null;
                     }
@@ -196,14 +215,14 @@
     public void testInvalidSpecUsesDefault() {
         mContext.getOrCreateTestableResources()
                 .addOverride(R.string.quick_settings_tiles, "spec1,spec2");
-        mQSTileHost.onTuningChanged(QSTileHost.TILES_SETTING, "not-valid");
+        saveSetting("not-valid");
 
         assertEquals(2, mQSTileHost.getTiles().size());
     }
 
     @Test
     public void testRemoveWifiAndCellularWithoutInternet() {
-        mQSTileHost.onTuningChanged(QSTileHost.TILES_SETTING, "wifi, spec1, cell, spec2");
+        saveSetting("wifi, spec1, cell, spec2");
 
         assertEquals("internet", mQSTileHost.mTileSpecs.get(0));
         assertEquals("spec1", mQSTileHost.mTileSpecs.get(1));
@@ -212,7 +231,7 @@
 
     @Test
     public void testRemoveWifiAndCellularWithInternet() {
-        mQSTileHost.onTuningChanged(QSTileHost.TILES_SETTING, "wifi, spec1, cell, spec2, internet");
+        saveSetting("wifi, spec1, cell, spec2, internet");
 
         assertEquals("spec1", mQSTileHost.mTileSpecs.get(0));
         assertEquals("spec2", mQSTileHost.mTileSpecs.get(1));
@@ -221,7 +240,7 @@
 
     @Test
     public void testRemoveWifiWithoutInternet() {
-        mQSTileHost.onTuningChanged(QSTileHost.TILES_SETTING, "spec1, wifi, spec2");
+        saveSetting("spec1, wifi, spec2");
 
         assertEquals("spec1", mQSTileHost.mTileSpecs.get(0));
         assertEquals("internet", mQSTileHost.mTileSpecs.get(1));
@@ -230,7 +249,7 @@
 
     @Test
     public void testRemoveCellWithInternet() {
-        mQSTileHost.onTuningChanged(QSTileHost.TILES_SETTING, "spec1, spec2, cell, internet");
+        saveSetting("spec1, spec2, cell, internet");
 
         assertEquals("spec1", mQSTileHost.mTileSpecs.get(0));
         assertEquals("spec2", mQSTileHost.mTileSpecs.get(1));
@@ -239,7 +258,7 @@
 
     @Test
     public void testNoWifiNoCellularNoInternet() {
-        mQSTileHost.onTuningChanged(QSTileHost.TILES_SETTING, "spec1,spec2");
+        saveSetting("spec1,spec2");
 
         assertEquals("spec1", mQSTileHost.mTileSpecs.get(0));
         assertEquals("spec2", mQSTileHost.mTileSpecs.get(1));
@@ -249,7 +268,7 @@
     public void testSpecWithInvalidDoesNotUseDefault() {
         mContext.getOrCreateTestableResources()
                 .addOverride(R.string.quick_settings_tiles, "spec1,spec2");
-        mQSTileHost.onTuningChanged(QSTileHost.TILES_SETTING, "spec2,not-valid");
+        saveSetting("spec2,not-valid");
 
         assertEquals(1, mQSTileHost.getTiles().size());
         QSTile element = CollectionUtils.firstOrNull(mQSTileHost.getTiles());
@@ -258,7 +277,7 @@
 
     @Test
     public void testDump() {
-        mQSTileHost.onTuningChanged(QSTileHost.TILES_SETTING, "spec1,spec2");
+        saveSetting("spec1,spec2");
         StringWriter w = new StringWriter();
         PrintWriter pw = new PrintWriter(w);
         mQSTileHost.dump(pw, new String[]{});
@@ -274,7 +293,7 @@
     public void testDefault() {
         mContext.getOrCreateTestableResources()
                 .addOverride(R.string.quick_settings_tiles_default, "spec1");
-        mQSTileHost.onTuningChanged(QSTileHost.TILES_SETTING, "default");
+        saveSetting("default");
         assertEquals(1, mQSTileHost.getTiles().size());
         QSTile element = CollectionUtils.firstOrNull(mQSTileHost.getTiles());
         assertTrue(element instanceof TestTile1);
@@ -285,7 +304,7 @@
     public void testNoRepeatedSpecs_addTile() {
         mContext.getOrCreateTestableResources()
                 .addOverride(R.string.quick_settings_tiles, "spec1,spec2");
-        mQSTileHost.onTuningChanged(QSTileHost.TILES_SETTING, "spec1,spec2");
+        saveSetting("spec1,spec2");
 
         mQSTileHost.addTile("spec1");
 
@@ -298,9 +317,10 @@
     public void testAddTileAtValidPosition() {
         mContext.getOrCreateTestableResources()
                 .addOverride(R.string.quick_settings_tiles, "spec1,spec3");
-        mQSTileHost.onTuningChanged(QSTileHost.TILES_SETTING, "spec1,spec3");
+        saveSetting("spec1,spec3");
 
         mQSTileHost.addTile("spec2", 1);
+        mMainExecutor.runAllReady();
 
         assertEquals(3, mQSTileHost.mTileSpecs.size());
         assertEquals("spec1", mQSTileHost.mTileSpecs.get(0));
@@ -312,9 +332,10 @@
     public void testAddTileAtInvalidPositionAddsToEnd() {
         mContext.getOrCreateTestableResources()
                 .addOverride(R.string.quick_settings_tiles, "spec1,spec3");
-        mQSTileHost.onTuningChanged(QSTileHost.TILES_SETTING, "spec1,spec3");
+        saveSetting("spec1,spec3");
 
         mQSTileHost.addTile("spec2", 100);
+        mMainExecutor.runAllReady();
 
         assertEquals(3, mQSTileHost.mTileSpecs.size());
         assertEquals("spec1", mQSTileHost.mTileSpecs.get(0));
@@ -326,9 +347,10 @@
     public void testAddTileAtEnd() {
         mContext.getOrCreateTestableResources()
                 .addOverride(R.string.quick_settings_tiles, "spec1,spec3");
-        mQSTileHost.onTuningChanged(QSTileHost.TILES_SETTING, "spec1,spec3");
+        saveSetting("spec1,spec3");
 
         mQSTileHost.addTile("spec2", QSTileHost.POSITION_AT_END);
+        mMainExecutor.runAllReady();
 
         assertEquals(3, mQSTileHost.mTileSpecs.size());
         assertEquals("spec1", mQSTileHost.mTileSpecs.get(0));
@@ -338,9 +360,10 @@
 
     @Test
     public void testNoRepeatedSpecs_customTile() {
-        mQSTileHost.onTuningChanged(QSTileHost.TILES_SETTING, CUSTOM_TILE_SPEC);
+        saveSetting(CUSTOM_TILE_SPEC);
 
         mQSTileHost.addTile(CUSTOM_TILE, /* end */ false);
+        mMainExecutor.runAllReady();
 
         assertEquals(1, mQSTileHost.mTileSpecs.size());
         assertEquals(CUSTOM_TILE_SPEC, mQSTileHost.mTileSpecs.get(0));
@@ -348,9 +371,10 @@
 
     @Test
     public void testAddedAtBeginningOnDefault_customTile() {
-        mQSTileHost.onTuningChanged(QSTileHost.TILES_SETTING, "spec1"); // seed
+        saveSetting("spec1"); // seed
 
         mQSTileHost.addTile(CUSTOM_TILE);
+        mMainExecutor.runAllReady();
 
         assertEquals(2, mQSTileHost.mTileSpecs.size());
         assertEquals(CUSTOM_TILE_SPEC, mQSTileHost.mTileSpecs.get(0));
@@ -358,9 +382,10 @@
 
     @Test
     public void testAddedAtBeginning_customTile() {
-        mQSTileHost.onTuningChanged(QSTileHost.TILES_SETTING, "spec1"); // seed
+        saveSetting("spec1"); // seed
 
         mQSTileHost.addTile(CUSTOM_TILE, /* end */ false);
+        mMainExecutor.runAllReady();
 
         assertEquals(2, mQSTileHost.mTileSpecs.size());
         assertEquals(CUSTOM_TILE_SPEC, mQSTileHost.mTileSpecs.get(0));
@@ -368,9 +393,10 @@
 
     @Test
     public void testAddedAtEnd_customTile() {
-        mQSTileHost.onTuningChanged(QSTileHost.TILES_SETTING, "spec1"); // seed
+        saveSetting("spec1"); // seed
 
         mQSTileHost.addTile(CUSTOM_TILE, /* end */ true);
+        mMainExecutor.runAllReady();
 
         assertEquals(2, mQSTileHost.mTileSpecs.size());
         assertEquals(CUSTOM_TILE_SPEC, mQSTileHost.mTileSpecs.get(1));
@@ -409,13 +435,13 @@
 
     @Test
     public void testNotAvailableTile_specNotNull() {
-        mQSTileHost.onTuningChanged(QSTileHost.TILES_SETTING, "na");
+        saveSetting("na");
         verify(mQSLogger, never()).logTileDestroyed(isNull(), anyString());
     }
 
     @Test
     public void testCustomTileRemoved_stateDeleted() {
-        mQSTileHost.changeTiles(List.of(CUSTOM_TILE_SPEC), List.of());
+        mQSTileHost.changeTilesByUser(List.of(CUSTOM_TILE_SPEC), List.of());
 
         verify(mCustomTileStatePersister)
                 .removeState(new TileServiceKey(CUSTOM_TILE, mQSTileHost.getUserId()));
@@ -423,29 +449,99 @@
 
     @Test
     public void testRemoveTiles() {
-        List<String> tiles = List.of("spec1", "spec2", "spec3");
-        mQSTileHost.saveTilesToSettings(tiles);
+        saveSetting("spec1,spec2,spec3");
 
         mQSTileHost.removeTiles(List.of("spec1", "spec2"));
 
+        mMainExecutor.runAllReady();
         assertEquals(List.of("spec3"), mQSTileHost.mTileSpecs);
     }
 
+    @Test
+    public void testTilesRemovedInQuickSuccession() {
+        saveSetting("spec1,spec2,spec3");
+        mQSTileHost.removeTile("spec1");
+        mQSTileHost.removeTile("spec3");
+
+        mMainExecutor.runAllReady();
+        assertEquals(List.of("spec2"), mQSTileHost.mTileSpecs);
+        assertEquals("spec2", getSetting());
+    }
+
+    @Test
+    public void testAddTileInMainThread() {
+        saveSetting("spec1,spec2");
+
+        mQSTileHost.addTile("spec3");
+        assertEquals(List.of("spec1", "spec2"), mQSTileHost.mTileSpecs);
+
+        mMainExecutor.runAllReady();
+        assertEquals(List.of("spec1", "spec2", "spec3"), mQSTileHost.mTileSpecs);
+    }
+
+    @Test
+    public void testRemoveTileInMainThread() {
+        saveSetting("spec1,spec2");
+
+        mQSTileHost.removeTile("spec1");
+        assertEquals(List.of("spec1", "spec2"), mQSTileHost.mTileSpecs);
+
+        mMainExecutor.runAllReady();
+        assertEquals(List.of("spec2"), mQSTileHost.mTileSpecs);
+    }
+
+    @Test
+    public void testRemoveTilesInMainThread() {
+        saveSetting("spec1,spec2,spec3");
+
+        mQSTileHost.removeTiles(List.of("spec3", "spec1"));
+        assertEquals(List.of("spec1", "spec2", "spec3"), mQSTileHost.mTileSpecs);
+
+        mMainExecutor.runAllReady();
+        assertEquals(List.of("spec2"), mQSTileHost.mTileSpecs);
+    }
+
+    @Test
+    public void testRemoveTileByUserInMainThread() {
+        saveSetting("spec1," + CUSTOM_TILE_SPEC);
+
+        mQSTileHost.removeTileByUser(CUSTOM_TILE);
+        assertEquals(List.of("spec1", CUSTOM_TILE_SPEC), mQSTileHost.mTileSpecs);
+
+        mMainExecutor.runAllReady();
+        assertEquals(List.of("spec1"), mQSTileHost.mTileSpecs);
+    }
+
+    @Test
+    public void testNonValidTileNotStoredInSettings() {
+        saveSetting("spec1,not-valid");
+
+        assertEquals(List.of("spec1"), mQSTileHost.mTileSpecs);
+        assertEquals("spec1", getSetting());
+    }
+
+    @Test
+    public void testNotAvailableTileNotStoredInSettings() {
+        saveSetting("spec1,na");
+
+        assertEquals(List.of("spec1"), mQSTileHost.mTileSpecs);
+        assertEquals("spec1", getSetting());
+    }
+
     private class TestQSTileHost extends QSTileHost {
         TestQSTileHost(Context context, StatusBarIconController iconController,
-                QSFactory defaultFactory, Handler mainHandler, Looper bgLooper,
+                QSFactory defaultFactory, Executor mainExecutor,
                 PluginManager pluginManager, TunerService tunerService,
                 Provider<AutoTileManager> autoTiles, DumpManager dumpManager,
-                BroadcastDispatcher broadcastDispatcher, CentralSurfaces centralSurfaces,
-                QSLogger qsLogger, UiEventLogger uiEventLogger, UserTracker userTracker,
-                SecureSettings secureSettings, CustomTileStatePersister customTileStatePersister,
+                CentralSurfaces centralSurfaces, QSLogger qsLogger, UiEventLogger uiEventLogger,
+                UserTracker userTracker, SecureSettings secureSettings,
+                CustomTileStatePersister customTileStatePersister,
                 TileServiceRequestController.Builder tileServiceRequestControllerBuilder,
                 TileLifecycleManager.Factory tileLifecycleManagerFactory) {
-            super(context, iconController, defaultFactory, mainHandler, bgLooper, pluginManager,
-                    tunerService, autoTiles, dumpManager, broadcastDispatcher,
-                    Optional.of(centralSurfaces), qsLogger, uiEventLogger, userTracker,
-                    secureSettings, customTileStatePersister, tileServiceRequestControllerBuilder,
-                    tileLifecycleManagerFactory);
+            super(context, iconController, defaultFactory, mainExecutor, pluginManager,
+                    tunerService, autoTiles, dumpManager, Optional.of(centralSurfaces), qsLogger,
+                    uiEventLogger, userTracker, secureSettings, customTileStatePersister,
+                    tileServiceRequestControllerBuilder, tileLifecycleManagerFactory);
         }
 
         @Override
@@ -455,25 +551,16 @@
         @Override
         public void onPluginDisconnected(QSFactory plugin) {
         }
-
-        @Override
-        void saveTilesToSettings(List<String> tileSpecs) {
-            super.saveTilesToSettings(tileSpecs);
-            // After tiles are changed, make sure to call onTuningChanged with the new setting if it
-            // changed
-            String specs = mSecureSettings.getStringForUser(
-                    QSTileHost.TILES_SETTING, mUserTracker.getUserId());
-            onTuningChanged(TILES_SETTING, specs);
-        }
     }
 
+
     private class TestTile extends QSTileImpl<QSTile.State> {
 
         protected TestTile(QSHost host) {
             super(
                     host,
-                    mLooper.getLooper(),
-                    new Handler(mLooper.getLooper()),
+                    mock(Looper.class),
+                    mock(Handler.class),
                     new FalsingManagerFake(),
                     mock(MetricsLogger.class),
                     mock(StatusBarStateController.class),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QuickStatusBarHeaderControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/QuickStatusBarHeaderControllerTest.kt
index 07c8af9..be14cc5 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QuickStatusBarHeaderControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QuickStatusBarHeaderControllerTest.kt
@@ -26,7 +26,6 @@
 import com.android.systemui.colorextraction.SysuiColorExtractor
 import com.android.systemui.demomode.DemoModeController
 import com.android.systemui.flags.FeatureFlags
-import com.android.systemui.flags.Flags
 import com.android.systemui.qs.carrier.QSCarrierGroup
 import com.android.systemui.qs.carrier.QSCarrierGroupController
 import com.android.systemui.statusbar.phone.StatusBarContentInsetsProvider
@@ -46,10 +45,10 @@
 import org.mockito.Answers
 import org.mockito.ArgumentMatchers.anyInt
 import org.mockito.Mock
-import org.mockito.Mockito.`when`
 import org.mockito.Mockito.anyBoolean
 import org.mockito.Mockito.reset
 import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when`
 import org.mockito.MockitoAnnotations
 
 @SmallTest
@@ -162,7 +161,6 @@
 
     @Test
     fun testRSSISlot_notCombined() {
-        `when`(featureFlags.isEnabled(Flags.COMBINED_STATUS_BAR_SIGNAL_ICONS)).thenReturn(false)
         controller.init()
 
         val captor = argumentCaptor<List<String>>()
@@ -174,20 +172,6 @@
     }
 
     @Test
-    fun testRSSISlot_combined() {
-        `when`(featureFlags.isEnabled(Flags.COMBINED_STATUS_BAR_SIGNAL_ICONS)).thenReturn(true)
-        controller.init()
-
-        val captor = argumentCaptor<List<String>>()
-        verify(view).onAttach(any(), any(), capture(captor), any(), anyBoolean())
-
-        assertThat(captor.value).containsExactly(
-            mContext.getString(com.android.internal.R.string.status_bar_no_calling),
-            mContext.getString(com.android.internal.R.string.status_bar_call_strength)
-        )
-    }
-
-    @Test
     fun testSingleCarrierCallback() {
         controller.init()
         reset(view)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/carrier/QSCarrierGroupControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/carrier/QSCarrierGroupControllerTest.java
index bd794d6..1e7722a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/carrier/QSCarrierGroupControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/carrier/QSCarrierGroupControllerTest.java
@@ -16,19 +16,26 @@
 
 package com.android.systemui.qs.carrier;
 
+import static com.google.common.truth.Truth.assertThat;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
 import static org.mockito.Mockito.when;
 
+import android.content.Context;
+import android.content.Intent;
 import android.os.Handler;
+import android.provider.Settings;
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
 import android.view.View;
@@ -37,7 +44,6 @@
 import androidx.test.filters.SmallTest;
 
 import com.android.keyguard.CarrierTextManager;
-import com.android.systemui.flags.FeatureFlags;
 import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.statusbar.connectivity.IconState;
 import com.android.systemui.statusbar.connectivity.MobileDataIndicators;
@@ -50,6 +56,7 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
@@ -80,11 +87,11 @@
     @Mock
     private QSCarrier mQSCarrier3;
     private TestableLooper mTestableLooper;
-    @Mock private FeatureFlags mFeatureFlags;
     @Mock
     private QSCarrierGroupController.OnSingleCarrierChangedListener mOnSingleCarrierChangedListener;
 
     private FakeSlotIndexResolver mSlotIndexResolver;
+    private ClickListenerTextView mNoCarrierTextView;
 
     @Before
     public void setup() throws Exception {
@@ -108,7 +115,8 @@
                 .when(mCarrierTextManager)
                 .setListening(any(CarrierTextManager.CarrierTextCallback.class));
 
-        when(mQSCarrierGroup.getNoSimTextView()).thenReturn(new TextView(mContext));
+        mNoCarrierTextView = new ClickListenerTextView(mContext);
+        when(mQSCarrierGroup.getNoSimTextView()).thenReturn(mNoCarrierTextView);
         when(mQSCarrierGroup.getCarrier1View()).thenReturn(mQSCarrier1);
         when(mQSCarrierGroup.getCarrier2View()).thenReturn(mQSCarrier2);
         when(mQSCarrierGroup.getCarrier3View()).thenReturn(mQSCarrier3);
@@ -120,7 +128,7 @@
         mQSCarrierGroupController = new QSCarrierGroupController.Builder(
                 mActivityStarter, handler, TestableLooper.get(this).getLooper(),
                 mNetworkController, mCarrierTextControllerBuilder, mContext, mCarrierConfigTracker,
-                mFeatureFlags, mSlotIndexResolver)
+                mSlotIndexResolver)
                 .setQSCarrierGroup(mQSCarrierGroup)
                 .build();
 
@@ -376,6 +384,47 @@
         verify(mOnSingleCarrierChangedListener, never()).onSingleCarrierChanged(anyBoolean());
     }
 
+    @Test
+    public void testOnlyInternalViewsHaveClickableListener() {
+        ArgumentCaptor<View.OnClickListener> captor =
+                ArgumentCaptor.forClass(View.OnClickListener.class);
+
+        verify(mQSCarrier1).setOnClickListener(captor.capture());
+        verify(mQSCarrier2).setOnClickListener(captor.getValue());
+        verify(mQSCarrier3).setOnClickListener(captor.getValue());
+
+        assertThat(mNoCarrierTextView.getOnClickListener()).isSameInstanceAs(captor.getValue());
+        verify(mQSCarrierGroup, never()).setOnClickListener(any());
+    }
+
+    @Test
+    public void testOnClickListenerDoesntStartActivityIfViewNotVisible() {
+        ArgumentCaptor<View.OnClickListener> captor =
+                ArgumentCaptor.forClass(View.OnClickListener.class);
+
+        verify(mQSCarrier1).setOnClickListener(captor.capture());
+        when(mQSCarrier1.isVisibleToUser()).thenReturn(false);
+
+        captor.getValue().onClick(mQSCarrier1);
+        verifyZeroInteractions(mActivityStarter);
+    }
+
+    @Test
+    public void testOnClickListenerLaunchesActivityIfViewVisible() {
+        ArgumentCaptor<View.OnClickListener> listenerCaptor =
+                ArgumentCaptor.forClass(View.OnClickListener.class);
+        ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
+
+        verify(mQSCarrier1).setOnClickListener(listenerCaptor.capture());
+        when(mQSCarrier1.isVisibleToUser()).thenReturn(true);
+
+        listenerCaptor.getValue().onClick(mQSCarrier1);
+        verify(mActivityStarter)
+                .postStartActivityDismissingKeyguard(intentCaptor.capture(), anyInt());
+        assertThat(intentCaptor.getValue().getAction())
+                .isEqualTo(Settings.ACTION_WIRELESS_SETTINGS);
+    }
+
     private class FakeSlotIndexResolver implements QSCarrierGroupController.SlotIndexResolver {
         public boolean overrideInvalid;
 
@@ -384,4 +433,22 @@
             return overrideInvalid ? -1 : subscriptionId;
         }
     }
+
+    private class ClickListenerTextView extends TextView {
+        View.OnClickListener mListener = null;
+
+        ClickListenerTextView(Context context) {
+            super(context);
+        }
+
+        @Override
+        public void setOnClickListener(OnClickListener l) {
+            super.setOnClickListener(l);
+            mListener = l;
+        }
+
+        View.OnClickListener getOnClickListener() {
+            return mListener;
+        }
+    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/carrier/QSCarrierTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/carrier/QSCarrierTest.java
index 5212255..99a17a6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/carrier/QSCarrierTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/carrier/QSCarrierTest.java
@@ -22,13 +22,11 @@
 
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
-import android.util.FeatureFlagUtils;
 import android.view.LayoutInflater;
 import android.view.View;
 
 import androidx.test.filters.SmallTest;
 
-import com.android.settingslib.graph.SignalDrawable;
 import com.android.settingslib.mobile.TelephonyIcons;
 import com.android.systemui.R;
 import com.android.systemui.SysuiTestCase;
@@ -59,14 +57,14 @@
 
     @Test
     public void testUpdateState_first() {
-        CellSignalState c = new CellSignalState(true, mSignalIconId, "", "", false, false);
+        CellSignalState c = new CellSignalState(true, mSignalIconId, "", "", false);
 
         assertTrue(mQSCarrier.updateState(c, false));
     }
 
     @Test
     public void testUpdateState_same() {
-        CellSignalState c = new CellSignalState(true, mSignalIconId, "", "", false, false);
+        CellSignalState c = new CellSignalState(true, mSignalIconId, "", "", false);
 
         assertTrue(mQSCarrier.updateState(c, false));
         assertFalse(mQSCarrier.updateState(c, false));
@@ -74,7 +72,7 @@
 
     @Test
     public void testUpdateState_changed() {
-        CellSignalState c = new CellSignalState(true, mSignalIconId, "", "", false, false);
+        CellSignalState c = new CellSignalState(true, mSignalIconId, "", "", false);
 
         assertTrue(mQSCarrier.updateState(c, false));
 
@@ -85,14 +83,14 @@
 
     @Test
     public void testUpdateState_singleCarrier_first() {
-        CellSignalState c = new CellSignalState(true, mSignalIconId, "", "", false, false);
+        CellSignalState c = new CellSignalState(true, mSignalIconId, "", "", false);
 
         assertTrue(mQSCarrier.updateState(c, true));
     }
 
     @Test
     public void testUpdateState_singleCarrier_noShowIcon() {
-        CellSignalState c = new CellSignalState(true, mSignalIconId, "", "", false, false);
+        CellSignalState c = new CellSignalState(true, mSignalIconId, "", "", false);
 
         mQSCarrier.updateState(c, true);
 
@@ -101,7 +99,7 @@
 
     @Test
     public void testUpdateState_multiCarrier_showIcon() {
-        CellSignalState c = new CellSignalState(true, mSignalIconId, "", "", false, false);
+        CellSignalState c = new CellSignalState(true, mSignalIconId, "", "", false);
 
         mQSCarrier.updateState(c, false);
 
@@ -110,7 +108,7 @@
 
     @Test
     public void testUpdateState_changeSingleMultiSingle() {
-        CellSignalState c = new CellSignalState(true, mSignalIconId, "", "", false, false);
+        CellSignalState c = new CellSignalState(true, mSignalIconId, "", "", false);
 
         mQSCarrier.updateState(c, true);
         assertEquals(View.GONE, mQSCarrier.getRSSIView().getVisibility());
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterTest.java
index 3d53062..d42cbe3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/customize/TileAdapterTest.java
@@ -55,6 +55,6 @@
     @Test
     public void testResetNotifiesHost() {
         mTileAdapter.resetTileSpecs(Collections.emptyList());
-        verify(mQSTileHost).changeTiles(any(), any());
+        verify(mQSTileHost).changeTilesByUser(any(), any());
     }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileRequestDialogTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileRequestDialogTest.kt
index 2ad9c94..fb17fc0 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileRequestDialogTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileRequestDialogTest.kt
@@ -163,4 +163,20 @@
         assertThat(tile.isClickable).isFalse()
         assertThat(tile.isLongClickable).isFalse()
     }
-}
\ No newline at end of file
+
+    @Test
+    fun setTileData_tileHasCorrectContentDescription() {
+        val icon = Icon.createWithResource(mContext, R.drawable.cloud)
+        val tileData = TileRequestDialog.TileData(APP_NAME, LABEL, icon)
+
+        dialog.setTileData(tileData)
+        dialog.show()
+
+        TestableLooper.get(this).processAllMessages()
+
+        val content = dialog.requireViewById<ViewGroup>(TileRequestDialog.CONTENT_ID)
+        val tile = content.getChildAt(1) as QSTileView
+
+        assertThat(tile.contentDescription).isEqualTo(LABEL)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java
index 6b7e5b93..471ddfd 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServicesTest.java
@@ -29,6 +29,7 @@
 import android.content.ComponentName;
 import android.content.Intent;
 import android.os.Handler;
+import android.os.HandlerExecutor;
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.service.quicksettings.IQSTileService;
@@ -65,6 +66,7 @@
 
 import java.util.ArrayList;
 import java.util.Optional;
+import java.util.concurrent.Executor;
 
 import javax.inject.Provider;
 
@@ -130,17 +132,16 @@
                 .thenReturn(mTileLifecycleManager);
 
         Provider<Handler> provider = () -> new Handler(mTestableLooper.getLooper());
+        Executor executor = new HandlerExecutor(provider.get());
 
         QSTileHost host = new QSTileHost(mContext,
                 mStatusBarIconController,
                 mQSFactory,
-                provider.get(),
-                mTestableLooper.getLooper(),
+                executor,
                 mPluginManager,
                 mTunerService,
                 () -> mAutoTileManager,
                 mDumpManager,
-                mock(BroadcastDispatcher.class),
                 Optional.of(mCentralSurfaces),
                 mQSLogger,
                 mUiEventLogger,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSFactoryImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSFactoryImplTest.kt
index 0f2c2647..ca3182a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSFactoryImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tileimpl/QSFactoryImplTest.kt
@@ -34,6 +34,7 @@
 import com.android.systemui.qs.tiles.DataSaverTile
 import com.android.systemui.qs.tiles.DeviceControlsTile
 import com.android.systemui.qs.tiles.DndTile
+import com.android.systemui.qs.tiles.DreamTile
 import com.android.systemui.qs.tiles.FlashlightTile
 import com.android.systemui.qs.tiles.HotspotTile
 import com.android.systemui.qs.tiles.InternetTile
@@ -89,7 +90,8 @@
         "wallet" to QuickAccessWalletTile::class.java,
         "qr_code_scanner" to QRCodeScannerTile::class.java,
         "onehanded" to OneHandedModeTile::class.java,
-        "color_correction" to ColorCorrectionTile::class.java
+        "color_correction" to ColorCorrectionTile::class.java,
+        "dream" to DreamTile::class.java
 )
 
 @RunWith(AndroidTestingRunner::class)
@@ -129,6 +131,7 @@
     @Mock private lateinit var qrCodeScannerTile: QRCodeScannerTile
     @Mock private lateinit var oneHandedModeTile: OneHandedModeTile
     @Mock private lateinit var colorCorrectionTile: ColorCorrectionTile
+    @Mock private lateinit var dreamTile: DreamTile
 
     private lateinit var factory: QSFactoryImpl
 
@@ -171,7 +174,8 @@
                 { quickAccessWalletTile },
                 { qrCodeScannerTile },
                 { oneHandedModeTile },
-                { colorCorrectionTile }
+                { colorCorrectionTile },
+                { dreamTile }
         )
         // When adding/removing tiles, fix also [specMap]
     }
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
new file mode 100644
index 0000000..73a0cbc
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/AirplaneModeTileTest.kt
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.tiles
+
+import android.net.ConnectivityManager
+import android.os.Handler
+import android.testing.AndroidTestingRunner
+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
+import com.android.systemui.classifier.FalsingManagerFake
+import com.android.systemui.plugins.ActivityStarter
+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.logging.QSLogger
+import com.android.systemui.qs.tileimpl.QSTileImpl
+import com.android.systemui.util.settings.GlobalSettings
+import com.google.common.truth.Truth.assertThat
+import dagger.Lazy
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito
+import org.mockito.MockitoAnnotations
+
+@RunWith(AndroidTestingRunner::class)
+@TestableLooper.RunWithLooper(setAsMainLooper = true)
+@SmallTest
+class AirplaneModeTileTest : SysuiTestCase() {
+    @Mock
+    private lateinit var mHost: QSHost
+    @Mock
+    private lateinit var mMetricsLogger: MetricsLogger
+    @Mock
+    private lateinit var mStatusBarStateController: StatusBarStateController
+    @Mock
+    private lateinit var mActivityStarter: ActivityStarter
+    @Mock
+    private lateinit var mQsLogger: QSLogger
+    @Mock
+    private lateinit var mBroadcastDispatcher: BroadcastDispatcher
+    @Mock
+    private lateinit var mConnectivityManager: Lazy<ConnectivityManager>
+    @Mock
+    private lateinit var mGlobalSettings: GlobalSettings
+    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,
+            mTestableLooper.looper,
+            Handler(mTestableLooper.looper),
+            FalsingManagerFake(),
+            mMetricsLogger,
+            mStatusBarStateController,
+            mActivityStarter,
+            mQsLogger,
+            mBroadcastDispatcher,
+            mConnectivityManager,
+            mGlobalSettings)
+    }
+
+    @Test
+    fun testIcon_whenDisabled_showsOffState() {
+        val state = QSTile.BooleanState()
+
+        mTile.handleUpdateState(state, 0)
+
+        assertThat(state.icon)
+            .isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_airplane_icon_off))
+    }
+
+    @Test
+    fun testIcon_whenEnabled_showsOnState() {
+        val state = QSTile.BooleanState()
+
+        mTile.handleUpdateState(state, 1)
+
+        assertThat(state.icon)
+            .isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_airplane_icon_on))
+    }
+}
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 3d9205e..95e7ad9f 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
@@ -24,15 +24,19 @@
 import android.view.View
 import androidx.test.filters.SmallTest
 import com.android.internal.logging.MetricsLogger
+import com.android.systemui.R
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.classifier.FalsingManagerFake
 import com.android.systemui.plugins.ActivityStarter
+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.logging.QSLogger
+import com.android.systemui.qs.tileimpl.QSTileImpl
 import com.android.systemui.statusbar.policy.BatteryController
 import com.android.systemui.util.settings.FakeSettings
 import com.android.systemui.util.settings.SecureSettings
+import com.google.common.truth.Truth.assertThat
 import org.junit.Assert.assertEquals
 import org.junit.Before
 import org.junit.Test
@@ -77,6 +81,7 @@
     fun setUp() {
         MockitoAnnotations.initMocks(this)
         testableLooper = TestableLooper.get(this)
+        `when`(qsHost.context).thenReturn(mContext)
         `when`(qsHost.userContext).thenReturn(userContext)
         `when`(userContext.userId).thenReturn(USER)
 
@@ -133,4 +138,26 @@
         tile.handleSetListening(false)
         verify(batteryController).clearLastPowerSaverStartView()
     }
+
+    @Test
+    fun testIcon_whenBatterySaverDisabled_isOffState() {
+        val state = QSTile.BooleanState()
+        tile.onPowerSaveChanged(false)
+
+        tile.handleUpdateState(state, /* arg= */ null)
+
+        assertThat(state.icon)
+                .isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_battery_saver_icon_off))
+    }
+
+    @Test
+    fun testIcon_whenBatterySaverEnabled_isOnState() {
+        val state = QSTile.BooleanState()
+        tile.onPowerSaveChanged(true)
+
+        tile.handleUpdateState(state, /* arg= */ null)
+
+        assertThat(state.icon)
+                .isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_battery_saver_icon_on))
+    }
 }
\ No newline at end of file
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 cc47248..d65901777 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
@@ -10,6 +10,7 @@
 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
 import com.android.systemui.plugins.ActivityStarter
@@ -18,6 +19,7 @@
 import com.android.systemui.plugins.statusbar.StatusBarStateController
 import com.android.systemui.qs.QSTileHost
 import com.android.systemui.qs.logging.QSLogger
+import com.android.systemui.qs.tileimpl.QSTileImpl
 import com.android.systemui.statusbar.policy.BluetoothController
 import com.google.common.truth.Truth.assertThat
 import org.junit.Before
@@ -25,6 +27,7 @@
 import org.junit.runner.RunWith
 import org.mockito.Mock
 import org.mockito.Mockito
+import org.mockito.Mockito.`when`
 import org.mockito.MockitoAnnotations
 
 @RunWith(AndroidTestingRunner::class)
@@ -84,6 +87,53 @@
         assertThat(tile.restrictionChecked).isEqualTo(UserManager.DISALLOW_BLUETOOTH)
     }
 
+    @Test
+    fun testIcon_whenDisabled_isOffState() {
+        val state = QSTile.BooleanState()
+        disableBluetooth()
+
+        tile.handleUpdateState(state, /* arg= */ null)
+
+        assertThat(state.icon)
+                .isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_bluetooth_icon_off))
+    }
+
+    @Test
+    fun testIcon_whenDisconnected_isOffState() {
+        val state = QSTile.BooleanState()
+        enableBluetooth()
+        setBluetoothDisconnected()
+
+        tile.handleUpdateState(state, /* arg= */ null)
+
+        assertThat(state.icon)
+                .isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_bluetooth_icon_off))
+    }
+
+    @Test
+    fun testIcon_whenConnected_isOnState() {
+        val state = QSTile.BooleanState()
+        enableBluetooth()
+        setBluetoothConnected()
+
+        tile.handleUpdateState(state, /* arg= */ null)
+
+        assertThat(state.icon)
+                .isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_bluetooth_icon_on))
+    }
+
+    @Test
+    fun testIcon_whenConnecting_isSearchState() {
+        val state = QSTile.BooleanState()
+        enableBluetooth()
+        setBluetoothConnecting()
+
+        tile.handleUpdateState(state, /* arg= */ null)
+
+        assertThat(state.icon)
+                .isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_bluetooth_icon_search))
+    }
+
     private class FakeBluetoothTile(
         qsTileHost: QSTileHost,
         backgroundLooper: Looper,
@@ -114,4 +164,27 @@
             restrictionChecked = userRestriction
         }
     }
+
+    fun enableBluetooth() {
+        `when`(bluetoothController.isBluetoothEnabled).thenReturn(true)
+    }
+
+    fun disableBluetooth() {
+        `when`(bluetoothController.isBluetoothEnabled).thenReturn(false)
+    }
+
+    fun setBluetoothDisconnected() {
+        `when`(bluetoothController.isBluetoothConnecting).thenReturn(false)
+        `when`(bluetoothController.isBluetoothConnected).thenReturn(false)
+    }
+
+    fun setBluetoothConnected() {
+        `when`(bluetoothController.isBluetoothConnecting).thenReturn(false)
+        `when`(bluetoothController.isBluetoothConnected).thenReturn(true)
+    }
+
+    fun setBluetoothConnecting() {
+        `when`(bluetoothController.isBluetoothConnected).thenReturn(false)
+        `when`(bluetoothController.isBluetoothConnecting).thenReturn(true)
+    }
 }
\ No newline at end of file
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
new file mode 100644
index 0000000..cfbb82f
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CameraToggleTileTest.kt
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.tiles
+
+import android.os.Handler
+import android.testing.AndroidTestingRunner
+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
+import com.android.systemui.plugins.ActivityStarter
+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.logging.QSLogger
+import com.android.systemui.qs.tileimpl.QSTileImpl
+import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController
+import com.android.systemui.statusbar.policy.KeyguardStateController
+import com.google.common.truth.Truth.assertThat
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.MockitoAnnotations
+import org.mockito.Mockito.`when` as whenever
+
+@RunWith(AndroidTestingRunner::class)
+@TestableLooper.RunWithLooper(setAsMainLooper = true)
+@SmallTest
+class CameraToggleTileTest : SysuiTestCase() {
+    companion object {
+        /* isBlocked */
+        const val CAMERA_TOGGLE_ENABLED: Boolean = false
+        const val CAMERA_TOGGLE_DISABLED: Boolean = true
+    }
+
+    @Mock
+    private lateinit var host: 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 privacyController: IndividualSensorPrivacyController
+    @Mock
+    private lateinit var keyguardStateController: KeyguardStateController
+
+    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,
+                testableLooper.looper,
+                Handler(testableLooper.looper),
+                metricsLogger,
+                FalsingManagerFake(),
+                statusBarStateController,
+                activityStarter,
+                qsLogger,
+                privacyController,
+                keyguardStateController)
+    }
+
+    @Test
+    fun testIcon_whenCameraAccessEnabled_isOnState() {
+        val state = QSTile.BooleanState()
+
+        tile.handleUpdateState(state, CAMERA_TOGGLE_ENABLED)
+
+        assertThat(state.icon)
+                .isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_camera_access_icon_on))
+    }
+
+    @Test
+    fun testIcon_whenCameraAccessDisabled_isOffState() {
+        val state = QSTile.BooleanState()
+
+        tile.handleUpdateState(state, CAMERA_TOGGLE_DISABLED)
+
+        assertThat(state.icon)
+                .isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_camera_access_icon_off))
+    }
+}
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 9936d49..ce5edb1 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
@@ -21,6 +21,7 @@
 import android.content.SharedPreferences
 import android.os.Handler
 import android.provider.Settings
+import android.provider.Settings.Global.ZEN_MODE_NO_INTERRUPTIONS
 import android.provider.Settings.Global.ZEN_MODE_OFF
 import android.testing.AndroidTestingRunner
 import android.testing.TestableLooper
@@ -28,19 +29,24 @@
 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
 import com.android.systemui.classifier.FalsingManagerFake
 import com.android.systemui.plugins.ActivityStarter
+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.logging.QSLogger
+import com.android.systemui.qs.tileimpl.QSTileImpl
 import com.android.systemui.statusbar.policy.ZenModeController
 import com.android.systemui.util.mockito.any
 import com.android.systemui.util.mockito.eq
+import com.android.systemui.util.mockito.nullable
 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
@@ -49,9 +55,8 @@
 import org.mockito.Mockito.anyBoolean
 import org.mockito.Mockito.never
 import org.mockito.Mockito.verify
-import org.mockito.MockitoAnnotations
-import java.io.File
 import org.mockito.Mockito.`when` as whenever
+import org.mockito.MockitoAnnotations
 
 @SmallTest
 @RunWith(AndroidTestingRunner::class)
@@ -65,22 +70,31 @@
 
     @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 uiEventLogger: UiEventLogger
+
     @Mock
     private lateinit var zenModeController: ZenModeController
+
     @Mock
     private lateinit var sharedPreferences: SharedPreferences
+
     @Mock
     private lateinit var dialogLaunchAnimator: DialogLaunchAnimator
+
     @Mock
     private lateinit var hostDialog: Dialog
 
@@ -173,7 +187,7 @@
         tile.handleClick(view)
         testableLooper.processAllMessages()
 
-        verify(dialogLaunchAnimator).showFromView(any(), eq(view), anyBoolean())
+        verify(dialogLaunchAnimator).showFromView(any(), eq(view), nullable(), anyBoolean())
     }
 
     @Test
@@ -187,6 +201,26 @@
         tile.handleClick(view)
         testableLooper.processAllMessages()
 
-        verify(dialogLaunchAnimator, never()).showFromView(any(), any(), anyBoolean())
+        verify(dialogLaunchAnimator, never()).showFromView(any(), any(), nullable(), anyBoolean())
     }
-}
\ No newline at end of file
+
+    @Test
+    fun testIcon_whenDndModeOff_isOffState() {
+        whenever(zenModeController.zen).thenReturn(ZEN_MODE_OFF)
+        val state = QSTile.BooleanState()
+
+        tile.handleUpdateState(state, /* arg= */ null)
+
+        assertThat(state.icon).isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_dnd_icon_off))
+    }
+
+    @Test
+    fun testIcon_whenDndModeOn_isOnState() {
+        whenever(zenModeController.zen).thenReturn(ZEN_MODE_NO_INTERRUPTIONS)
+        val state = QSTile.BooleanState()
+
+        tile.handleUpdateState(state, /* arg= */ null)
+
+        assertThat(state.icon).isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_dnd_icon_on))
+    }
+}
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
new file mode 100644
index 0000000..a13bece
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DreamTileTest.java
@@ -0,0 +1,270 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.tiles;
+
+import static junit.framework.TestCase.assertEquals;
+import static junit.framework.TestCase.assertFalse;
+import static junit.framework.TestCase.assertTrue;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.os.Handler;
+import android.os.RemoteException;
+import android.os.UserHandle;
+import android.provider.Settings;
+import android.service.dreams.IDreamManager;
+import android.service.quicksettings.Tile;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.internal.logging.MetricsLogger;
+import com.android.systemui.R;
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.broadcast.BroadcastDispatcher;
+import com.android.systemui.classifier.FalsingManagerFake;
+import com.android.systemui.plugins.ActivityStarter;
+import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.qs.QSTileHost;
+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.FakeSettings;
+import com.android.systemui.util.settings.SecureSettings;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper(setAsMainLooper = true)
+@SmallTest
+public class DreamTileTest extends SysuiTestCase {
+
+    @Mock
+    private ActivityStarter mActivityStarter;
+    @Mock
+    private QSTileHost mHost;
+    @Mock
+    private MetricsLogger mMetricsLogger;
+    @Mock
+    private QSLogger mQSLogger;
+    @Mock
+    private StatusBarStateController mStatusBarStateController;
+    @Mock
+    private IDreamManager mDreamManager;
+    @Mock
+    private BroadcastDispatcher mBroadcastDispatcher;
+    @Mock
+    private UserTracker mUserTracker;
+
+    private TestableLooper mTestableLooper;
+
+    private DreamTile mTile;
+
+    private SecureSettings mSecureSettings;
+
+    private static final ComponentName COLORS_DREAM_COMPONENT_NAME = new ComponentName(
+            "com.android.dreams", ".Colors");
+
+    private static final int DEFAULT_USER = 0;
+
+    private final String mExpectedTileLabel = mContext.getResources().getString(
+            R.string.quick_settings_screensaver_label);
+
+    @Before
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+        mSecureSettings = new FakeSettings();
+        mTestableLooper = TestableLooper.get(this);
+
+        when(mHost.getUserId()).thenReturn(DEFAULT_USER);
+        when(mHost.getContext()).thenReturn(mContext);
+
+        mTile = spy(constructTileForTest(true, false));
+
+        mTestableLooper.processAllMessages();
+        mTile.initialize();
+    }
+
+    @Test
+    public void testNotAvailable() throws RemoteException {
+        // Should not be available if screensaver is disabled
+        setScreensaverEnabled(false);
+
+        mTile.refreshState();
+        mTestableLooper.processAllMessages();
+        assertEquals(Tile.STATE_UNAVAILABLE, mTile.getState().state);
+
+        // Should not be available if component is not set
+        mSecureSettings.putInt(Settings.Secure.SCREENSAVER_ENABLED, 1);
+        when(mDreamManager.getDreamComponents()).thenReturn(null);
+
+        mTestableLooper.processAllMessages();
+        assertEquals(Tile.STATE_UNAVAILABLE, mTile.getState().state);
+        assertEquals(mExpectedTileLabel, mTile.getState().contentDescription);
+    }
+
+    @Test
+    public void testInactiveWhenDreaming() throws RemoteException {
+        setScreensaverEnabled(true);
+
+        when(mDreamManager.getDreamComponents()).thenReturn(new ComponentName[]{
+                COLORS_DREAM_COMPONENT_NAME
+        });
+        when(mDreamManager.isDreaming()).thenReturn(false);
+
+        mTile.refreshState();
+        mTestableLooper.processAllMessages();
+        assertEquals(Tile.STATE_INACTIVE, mTile.getState().state);
+    }
+
+    @Test
+    public void testActive() throws RemoteException {
+        setScreensaverEnabled(true);
+
+        when(mDreamManager.getDreamComponents()).thenReturn(new ComponentName[]{
+                COLORS_DREAM_COMPONENT_NAME
+        });
+        when(mDreamManager.isDreaming()).thenReturn(true);
+
+        mTile.refreshState();
+        mTestableLooper.processAllMessages();
+        assertEquals(Tile.STATE_ACTIVE, mTile.getState().state);
+    }
+
+    @Test
+    public void testClick() throws RemoteException {
+        // Set the AOSP dream enabled as the base setup.
+        setScreensaverEnabled(true);
+        when(mDreamManager.getDreamComponents()).thenReturn(new ComponentName[]{
+                COLORS_DREAM_COMPONENT_NAME
+        });
+        when(mDreamManager.isDreaming()).thenReturn(false);
+
+        mTile.refreshState();
+        mTestableLooper.processAllMessages();
+        assertEquals(Tile.STATE_INACTIVE, mTile.getState().state);
+
+        // Now click
+        mTile.handleClick(null /* view */);
+
+        verify(mDreamManager).dream();
+
+        when(mDreamManager.isDreaming()).thenReturn(true);
+        mTile.refreshState();
+        mTestableLooper.processAllMessages();
+        assertEquals(Tile.STATE_ACTIVE, mTile.getState().state);
+
+        // Click again to see that other method is called
+        mTile.handleClick(null /* view */);
+
+        verify(mDreamManager).awaken();
+    }
+
+    @Test
+    public void testContentDescription() {
+        assertEquals(mExpectedTileLabel, mTile.getContentDescription(null));
+
+        final String testDreamName = "MyDream";
+        assertEquals(mExpectedTileLabel + ", " + testDreamName,
+                mTile.getContentDescription(testDreamName));
+    }
+
+    @Test
+    public void testUserAvailability() {
+        DreamTile unsupportedTile = constructTileForTest(false, true);
+        assertFalse(unsupportedTile.isAvailable());
+
+        DreamTile supportedTileAllUsers = constructTileForTest(true, false);
+
+        UserHandle systemUserHandle = mock(UserHandle.class);
+        when(systemUserHandle.isSystem()).thenReturn(true);
+
+        UserHandle nonSystemUserHandle = mock(UserHandle.class);
+        when(nonSystemUserHandle.isSystem()).thenReturn(false);
+
+        when(mUserTracker.getUserHandle()).thenReturn(systemUserHandle);
+        assertTrue(supportedTileAllUsers.isAvailable());
+        when(mUserTracker.getUserHandle()).thenReturn(nonSystemUserHandle);
+        assertTrue(supportedTileAllUsers.isAvailable());
+
+        DreamTile supportedTileOnlySystemUser = constructTileForTest(true, true);
+        when(mUserTracker.getUserHandle()).thenReturn(systemUserHandle);
+        assertTrue(supportedTileOnlySystemUser.isAvailable());
+        when(mUserTracker.getUserHandle()).thenReturn(nonSystemUserHandle);
+        assertFalse(supportedTileOnlySystemUser.isAvailable());
+    }
+
+    @Test
+    public void testIconDockState() {
+        final DreamTile dockedTile = constructTileForTest(true, false);
+
+        final ArgumentCaptor<BroadcastReceiver> receiverCaptor = ArgumentCaptor.forClass(
+                BroadcastReceiver.class);
+        dockedTile.handleSetListening(true);
+        verify(mBroadcastDispatcher).registerReceiver(receiverCaptor.capture(), any());
+        final BroadcastReceiver receiver = receiverCaptor.getValue();
+
+        Intent dockIntent = new Intent(Intent.ACTION_DOCK_EVENT);
+        dockIntent.putExtra(Intent.EXTRA_DOCK_STATE, Intent.EXTRA_DOCK_STATE_DESK);
+        receiver.onReceive(mContext, dockIntent);
+        mTestableLooper.processAllMessages();
+        assertEquals(QSTileImpl.ResourceIcon.get(R.drawable.ic_qs_screen_saver),
+                dockedTile.getState().icon);
+
+        dockIntent.putExtra(Intent.EXTRA_DOCK_STATE, Intent.EXTRA_DOCK_STATE_UNDOCKED);
+        receiver.onReceive(mContext, dockIntent);
+        mTestableLooper.processAllMessages();
+        assertEquals(QSTileImpl.ResourceIcon.get(R.drawable.ic_qs_screen_saver_undocked),
+                dockedTile.getState().icon);
+    }
+
+    private void setScreensaverEnabled(boolean enabled) {
+        mSecureSettings.putIntForUser(Settings.Secure.SCREENSAVER_ENABLED, enabled ? 1 : 0,
+                DEFAULT_USER);
+    }
+
+    private DreamTile constructTileForTest(boolean dreamSupported,
+            boolean dreamOnlyEnabledForSystemUser) {
+        return new DreamTile(
+                mHost,
+                mTestableLooper.getLooper(),
+                new Handler(mTestableLooper.getLooper()),
+                new FalsingManagerFake(),
+                mMetricsLogger,
+                mStatusBarStateController,
+                mActivityStarter,
+                mQSLogger,
+                mDreamManager,
+                mSecureSettings,
+                mBroadcastDispatcher,
+                mUserTracker,
+                dreamSupported, dreamOnlyEnabledForSystemUser);
+    }
+}
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
new file mode 100644
index 0000000..d2bbc8c
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/LocationTileTest.kt
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.tiles
+
+import android.content.Context
+import android.os.Handler
+import android.testing.AndroidTestingRunner
+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
+import com.android.systemui.plugins.ActivityStarter
+import com.android.systemui.plugins.qs.QSTile
+import com.android.systemui.plugins.statusbar.StatusBarStateController
+import com.android.systemui.qs.QSTileHost
+import com.android.systemui.qs.logging.QSLogger
+import com.android.systemui.qs.tileimpl.QSTileImpl
+import com.android.systemui.statusbar.policy.KeyguardStateController
+import com.android.systemui.statusbar.policy.LocationController
+import com.google.common.truth.Truth.assertThat
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.`when`
+import org.mockito.MockitoAnnotations
+
+@RunWith(AndroidTestingRunner::class)
+@TestableLooper.RunWithLooper(setAsMainLooper = true)
+@SmallTest
+class LocationTileTest : SysuiTestCase() {
+
+    @Mock
+    private lateinit var mockContext: Context
+    @Mock
+    private lateinit var qsLogger: QSLogger
+    @Mock
+    private lateinit var qsHost: QSTileHost
+    @Mock
+    private lateinit var metricsLogger: MetricsLogger
+    private val falsingManager = FalsingManagerFake()
+    @Mock
+    private lateinit var statusBarStateController: StatusBarStateController
+    @Mock
+    private lateinit var activityStarter: ActivityStarter
+    @Mock
+    private lateinit var locationController: LocationController
+    @Mock
+    private lateinit var keyguardStateController: KeyguardStateController
+
+    private val uiEventLogger = UiEventLoggerFake()
+    private lateinit var testableLooper: TestableLooper
+    private lateinit var tile: LocationTile
+
+    @Before
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+        testableLooper = TestableLooper.get(this)
+        `when`(qsHost.uiEventLogger).thenReturn(uiEventLogger)
+        `when`(qsHost.context).thenReturn(mockContext)
+
+        tile = LocationTile(qsHost,
+            testableLooper.looper,
+            Handler(testableLooper.looper),
+            falsingManager,
+            metricsLogger,
+            statusBarStateController,
+            activityStarter,
+            qsLogger,
+            locationController,
+            keyguardStateController)
+    }
+
+    @Test
+    fun testIcon_whenDisabled_isOffState() {
+        val state = QSTile.BooleanState()
+        `when`(locationController.isLocationEnabled).thenReturn(false)
+
+        tile.handleUpdateState(state, /* arg= */ null)
+
+        assertThat(state.icon)
+            .isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_location_icon_off))
+    }
+
+    @Test
+    fun testIcon_whenEnabled_isOnState() {
+        val state = QSTile.BooleanState()
+        `when`(locationController.isLocationEnabled).thenReturn(true)
+
+        tile.handleUpdateState(state, /* arg= */ null)
+
+        assertThat(state.icon)
+            .isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_location_icon_on))
+    }
+}
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
new file mode 100644
index 0000000..1ab601c
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/MicrophoneToggleTileTest.kt
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.tiles
+
+import android.os.Handler
+import android.testing.AndroidTestingRunner
+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
+import com.android.systemui.plugins.ActivityStarter
+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.logging.QSLogger
+import com.android.systemui.qs.tileimpl.QSTileImpl
+import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController
+import com.android.systemui.statusbar.policy.KeyguardStateController
+import com.google.common.truth.Truth.assertThat
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.MockitoAnnotations
+import org.mockito.Mockito.`when` as whenever
+
+@RunWith(AndroidTestingRunner::class)
+@TestableLooper.RunWithLooper(setAsMainLooper = true)
+@SmallTest
+class MicrophoneToggleTileTest : SysuiTestCase() {
+    companion object {
+        /* isBlocked */
+        const val MICROPHONE_TOGGLE_ENABLED: Boolean = false
+        const val MICROPHONE_TOGGLE_DISABLED: Boolean = true
+    }
+
+    @Mock
+    private lateinit var host: 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 privacyController: IndividualSensorPrivacyController
+    @Mock
+    private lateinit var keyguardStateController: KeyguardStateController
+
+    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,
+                testableLooper.looper,
+                Handler(testableLooper.looper),
+                metricsLogger,
+                FalsingManagerFake(),
+                statusBarStateController,
+                activityStarter,
+                qsLogger,
+                privacyController,
+                keyguardStateController)
+    }
+
+    @Test
+    fun testIcon_whenMicrophoneAccessEnabled_isOnState() {
+        val state = QSTile.BooleanState()
+
+        tile.handleUpdateState(state, MICROPHONE_TOGGLE_ENABLED)
+
+        assertThat(state.icon).isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_mic_access_on))
+    }
+
+    @Test
+    fun testIcon_whenMicrophoneAccessDisabled_isOffState() {
+        val state = QSTile.BooleanState()
+
+        tile.handleUpdateState(state, MICROPHONE_TOGGLE_DISABLED)
+
+        assertThat(state.icon).isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_mic_access_off))
+    }
+}
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 55c51b2..e9dfd3e 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
@@ -36,9 +36,11 @@
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.classifier.FalsingManagerFake;
 import com.android.systemui.plugins.ActivityStarter;
+import com.android.systemui.plugins.qs.QSTile;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSTileHost;
 import com.android.systemui.qs.logging.QSLogger;
+import com.android.systemui.qs.tileimpl.QSTileImpl;
 import com.android.systemui.statusbar.policy.BatteryController;
 import com.android.systemui.statusbar.policy.DeviceStateRotationLockSettingController;
 import com.android.systemui.statusbar.policy.RotationLockController;
@@ -194,6 +196,26 @@
         assertEquals("", mLockTile.getState().secondaryLabel.toString());
     }
 
+    @Test
+    public void testIcon_whenDisabled_isOffState() {
+        QSTile.BooleanState state = new QSTile.BooleanState();
+        disableAutoRotation();
+
+        mLockTile.handleUpdateState(state, /* arg= */ null);
+
+        assertEquals(state.icon, QSTileImpl.ResourceIcon.get(R.drawable.qs_auto_rotate_icon_off));
+    }
+
+    @Test
+    public void testIcon_whenEnabled_isOnState() {
+        QSTile.BooleanState state = new QSTile.BooleanState();
+        enableAutoRotation();
+
+        mLockTile.handleUpdateState(state, /* arg= */ null);
+
+        assertEquals(state.icon, QSTileImpl.ResourceIcon.get(R.drawable.qs_auto_rotate_icon_on));
+    }
+
     private void enableAutoRotation() {
         when(mRotationPolicyWrapper.isRotationLocked()).thenReturn(false);
     }
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 e4c5299..e6bd396 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
@@ -22,6 +22,7 @@
 
 import static org.junit.Assert.assertFalse;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -38,6 +39,7 @@
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.animation.DialogLaunchAnimator;
 import com.android.systemui.classifier.FalsingManagerFake;
+import com.android.systemui.flags.FeatureFlags;
 import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.qs.QSTileHost;
@@ -73,6 +75,8 @@
     @Mock
     private QSLogger mQSLogger;
     @Mock
+    private FeatureFlags mFeatureFlags;
+    @Mock
     private KeyguardStateController mKeyguardStateController;
     @Mock
     private DialogLaunchAnimator mDialogLaunchAnimator;
@@ -94,6 +98,7 @@
                 new Handler(mTestableLooper.getLooper()),
                 new FalsingManagerFake(),
                 mMetricsLogger,
+                mFeatureFlags,
                 mStatusBarStateController,
                 mActivityStarter,
                 mQSLogger,
@@ -125,7 +130,8 @@
         mTestableLooper.processAllMessages();
 
         ArgumentCaptor<Runnable> onStartRecordingClicked = ArgumentCaptor.forClass(Runnable.class);
-        verify(mController).createScreenRecordDialog(any(), onStartRecordingClicked.capture());
+        verify(mController).createScreenRecordDialog(any(), eq(mFeatureFlags),
+                eq(mDialogLaunchAnimator), eq(mActivityStarter), onStartRecordingClicked.capture());
 
         // When starting the recording, we collapse the shade and disable the dialog animation.
         assertNotNull(onStartRecordingClicked.getValue());
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/user/UserSwitchDialogControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/user/UserSwitchDialogControllerTest.kt
index 030c65a..9d908fd 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/user/UserSwitchDialogControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/user/UserSwitchDialogControllerTest.kt
@@ -42,11 +42,12 @@
 import org.mockito.ArgumentMatcher
 import org.mockito.Captor
 import org.mockito.Mock
-import org.mockito.Mockito.`when`
+import org.mockito.Mockito.anyBoolean
 import org.mockito.Mockito.anyInt
 import org.mockito.Mockito.argThat
 import org.mockito.Mockito.never
 import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when`
 import org.mockito.MockitoAnnotations
 
 @SmallTest
@@ -82,19 +83,19 @@
         `when`(dialog.context).thenReturn(mContext)
 
         controller = UserSwitchDialogController(
-                { userDetailViewAdapter },
-                activityStarter,
-                falsingManager,
-                dialogLaunchAnimator,
-                uiEventLogger,
-                { dialog }
+            { userDetailViewAdapter },
+            activityStarter,
+            falsingManager,
+            dialogLaunchAnimator,
+            uiEventLogger,
+            { dialog }
         )
     }
 
     @Test
     fun showDialog_callsDialogShow() {
         controller.showDialog(launchView)
-        verify(dialogLaunchAnimator).showFromView(dialog, launchView)
+        verify(dialogLaunchAnimator).showFromView(eq(dialog), eq(launchView), any(), anyBoolean())
         verify(uiEventLogger).log(QSUserSwitcherEvent.QS_USER_DETAIL_OPEN)
     }
 
@@ -140,11 +141,11 @@
         clickCaptor.value.onClick(dialog, DialogInterface.BUTTON_NEUTRAL)
 
         verify(activityStarter)
-                .postStartActivityDismissingKeyguard(
-                        argThat(IntentMatcher(Settings.ACTION_USER_SETTINGS)),
-                        eq(0),
-                        eq(null)
-                )
+            .postStartActivityDismissingKeyguard(
+                argThat(IntentMatcher(Settings.ACTION_USER_SETTINGS)),
+                eq(0),
+                eq(null)
+            )
         verify(uiEventLogger).log(QSUserSwitcherEvent.QS_USER_MORE_SETTINGS)
     }
 
@@ -167,4 +168,4 @@
             return argument?.action == action
         }
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/ripple/RippleViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/ripple/RippleViewTest.kt
new file mode 100644
index 0000000..2d2f4cc
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/ripple/RippleViewTest.kt
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.ripple
+
+import android.testing.AndroidTestingRunner
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+class RippleViewTest : SysuiTestCase() {
+    @Mock
+    private lateinit var rippleView: RippleView
+
+    @Before
+    fun setup() {
+        rippleView = RippleView(context, null)
+    }
+
+    @Test
+    fun testSetupShader_compilesCircle() {
+        rippleView.setupShader(RippleShader.RippleShape.CIRCLE)
+    }
+
+    @Test
+    fun testSetupShader_compilesRoundedBox() {
+        rippleView.setupShader(RippleShader.RippleShape.ROUNDED_BOX)
+    }
+
+    @Test
+    fun testSetupShader_compilesEllipse() {
+        rippleView.setupShader(RippleShader.RippleShape.ELLIPSE)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenrecord/RecordingServiceTest.java b/packages/SystemUI/tests/src/com/android/systemui/screenrecord/RecordingServiceTest.java
index 91cafea..a1d78cb 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/screenrecord/RecordingServiceTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/screenrecord/RecordingServiceTest.java
@@ -16,18 +16,22 @@
 
 package com.android.systemui.screenrecord;
 
+import static org.junit.Assert.assertThrows;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
 import android.app.Notification;
 import android.app.NotificationManager;
 import android.content.Intent;
+import android.os.Binder;
+import android.os.Handler;
 import android.os.RemoteException;
 import android.testing.AndroidTestingRunner;
 
@@ -35,6 +39,7 @@
 
 import com.android.internal.logging.UiEventLogger;
 import com.android.systemui.SysuiTestCase;
+import com.android.systemui.media.MediaProjectionCaptureTarget;
 import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.settings.UserContextProvider;
 import com.android.systemui.statusbar.phone.KeyguardDismissUtil;
@@ -66,6 +71,8 @@
     @Mock
     private Executor mExecutor;
     @Mock
+    private Handler mHandler;
+    @Mock
     private UserContextProvider mUserContextTracker;
     private KeyguardDismissUtil mKeyguardDismissUtil = new KeyguardDismissUtil() {
         public void executeWhenUnlocked(ActivityStarter.OnDismissAction action,
@@ -79,8 +86,8 @@
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
-        mRecordingService = Mockito.spy(new RecordingService(mController, mExecutor, mUiEventLogger,
-                mNotificationManager, mUserContextTracker, mKeyguardDismissUtil));
+        mRecordingService = Mockito.spy(new RecordingService(mController, mExecutor, mHandler,
+                mUiEventLogger, mNotificationManager, mUserContextTracker, mKeyguardDismissUtil));
 
         // Return actual context info
         doReturn(mContext).when(mRecordingService).getApplicationContext();
@@ -103,8 +110,17 @@
     }
 
     @Test
-    public void testLogStartRecording() {
-        Intent startIntent = RecordingService.getStartIntent(mContext, 0, 0, false);
+    public void testLogStartFullScreenRecording() {
+        Intent startIntent = RecordingService.getStartIntent(mContext, 0, 0, false, null);
+        mRecordingService.onStartCommand(startIntent, 0, 0);
+
+        verify(mUiEventLogger, times(1)).log(Events.ScreenRecordEvent.SCREEN_RECORD_START);
+    }
+
+    @Test
+    public void testLogStartPartialRecording() {
+        MediaProjectionCaptureTarget target = new MediaProjectionCaptureTarget(new Binder());
+        Intent startIntent = RecordingService.getStartIntent(mContext, 0, 0, false, target);
         mRecordingService.onStartCommand(startIntent, 0, 0);
 
         verify(mUiEventLogger, times(1)).log(Events.ScreenRecordEvent.SCREEN_RECORD_START);
@@ -137,10 +153,60 @@
         // When the screen recording does not start properly
         doThrow(new RuntimeException("fail")).when(mScreenMediaRecorder).start();
 
-        Intent startIntent = RecordingService.getStartIntent(mContext, 0, 0, false);
+        Intent startIntent = RecordingService.getStartIntent(mContext, 0, 0, false, null);
         mRecordingService.onStartCommand(startIntent, 0, 0);
 
         // Then the state is set to not recording
         verify(mController).updateState(false);
     }
+
+    @Test
+    public void testOnSystemRequestedStop_recordingInProgress_endsRecording() throws IOException {
+        doReturn(true).when(mController).isRecording();
+
+        mRecordingService.onStopped();
+
+        verify(mScreenMediaRecorder).end();
+    }
+
+    @Test
+    public void testOnSystemRequestedStop_recordingInProgress_updatesState() {
+        doReturn(true).when(mController).isRecording();
+
+        mRecordingService.onStopped();
+
+        verify(mController).updateState(false);
+    }
+
+    @Test
+    public void testOnSystemRequestedStop_recordingIsNotInProgress_doesNotEndRecording()
+            throws IOException {
+        doReturn(false).when(mController).isRecording();
+
+        mRecordingService.onStopped();
+
+        verify(mScreenMediaRecorder, never()).end();
+    }
+
+    @Test
+    public void testOnSystemRequestedStop_recorderEndThrowsRuntimeException_releasesRecording()
+            throws IOException {
+        doReturn(true).when(mController).isRecording();
+        doThrow(new RuntimeException()).when(mScreenMediaRecorder).end();
+
+        mRecordingService.onStopped();
+
+        verify(mScreenMediaRecorder).release();
+    }
+
+    @Test
+    public void testOnSystemRequestedStop_recorderEndThrowsOOMError_releasesRecording()
+            throws IOException {
+        doReturn(true).when(mController).isRecording();
+        doThrow(new OutOfMemoryError()).when(mScreenMediaRecorder).end();
+
+        assertThrows(Throwable.class, () -> mRecordingService.onStopped());
+
+        verify(mScreenMediaRecorder).release();
+    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenrecord/ScreenRecordDialogTest.kt b/packages/SystemUI/tests/src/com/android/systemui/screenrecord/ScreenRecordDialogTest.kt
new file mode 100644
index 0000000..03d9444
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/screenrecord/ScreenRecordDialogTest.kt
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.screenrecord
+
+import android.testing.AndroidTestingRunner
+import android.testing.TestableLooper
+import android.view.View
+import androidx.test.filters.SmallTest
+import com.android.systemui.R
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.animation.DialogLaunchAnimator
+import com.android.systemui.flags.FeatureFlags
+import com.android.systemui.flags.Flags
+import com.android.systemui.plugins.ActivityStarter
+import com.android.systemui.settings.UserContextProvider
+import com.google.common.truth.Truth.assertThat
+import org.junit.After
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.MockitoAnnotations
+import org.mockito.Mockito.`when` as whenever
+
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+@TestableLooper.RunWithLooper(setAsMainLooper = true)
+class ScreenRecordDialogTest : SysuiTestCase() {
+
+    @Mock
+    private lateinit var starter: ActivityStarter
+    @Mock
+    private lateinit var controller: RecordingController
+    @Mock
+    private lateinit var userContextProvider: UserContextProvider
+    @Mock
+    private lateinit var flags: FeatureFlags
+    @Mock
+    private lateinit var dialogLaunchAnimator: DialogLaunchAnimator
+    @Mock
+    private lateinit var onStartRecordingClicked: Runnable
+
+    private lateinit var dialog: ScreenRecordDialog
+
+    @Before
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+
+        dialog = ScreenRecordDialog(
+            context, controller, starter, userContextProvider, flags, dialogLaunchAnimator,
+            onStartRecordingClicked
+        )
+    }
+
+    @After
+    fun teardown() {
+        if (::dialog.isInitialized) {
+            dialog.dismiss()
+        }
+    }
+
+    @Test
+    fun testShowDialog_partialScreenSharingDisabled_appButtonIsNotVisible() {
+        whenever(flags.isEnabled(Flags.WM_ENABLE_PARTIAL_SCREEN_SHARING)).thenReturn(false)
+
+        dialog.show()
+
+        val visibility = dialog.requireViewById<View>(R.id.button_app).visibility
+        assertThat(visibility).isEqualTo(View.GONE)
+    }
+
+    @Test
+    fun testShowDialog_partialScreenSharingEnabled_appButtonIsVisible() {
+        whenever(flags.isEnabled(Flags.WM_ENABLE_PARTIAL_SCREEN_SHARING)).thenReturn(true)
+
+        dialog.show()
+
+        val visibility = dialog.requireViewById<View>(R.id.button_app).visibility
+        assertThat(visibility).isEqualTo(View.VISIBLE)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenshot/ActionProxyReceiverTest.java b/packages/SystemUI/tests/src/com/android/systemui/screenshot/ActionProxyReceiverTest.java
index 7ab49584f..e1eda11 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/screenshot/ActionProxyReceiverTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/screenshot/ActionProxyReceiverTest.java
@@ -32,7 +32,6 @@
 import static org.mockito.Mockito.verify;
 
 import android.app.PendingIntent;
-import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
 import android.testing.AndroidTestingRunner;
@@ -115,7 +114,7 @@
         actionProxyReceiver.onReceive(mContext, mIntent);
 
         verify(mMockScreenshotSmartActions, never())
-                .notifyScreenshotAction(any(Context.class), anyString(), anyString(), anyBoolean(),
+                .notifyScreenshotAction(anyString(), anyString(), anyBoolean(),
                         any(Intent.class));
     }
 
@@ -129,7 +128,7 @@
         actionProxyReceiver.onReceive(mContext, mIntent);
 
         verify(mMockScreenshotSmartActions).notifyScreenshotAction(
-                mContext, testId, ACTION_TYPE_SHARE, false, null);
+                testId, ACTION_TYPE_SHARE, false, null);
     }
 
     private ActionProxyReceiver constructActionProxyReceiver(boolean withStatusBar) {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenshot/DeleteScreenshotReceiverTest.java b/packages/SystemUI/tests/src/com/android/systemui/screenshot/DeleteScreenshotReceiverTest.java
index 664c125..d58f47a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/screenshot/DeleteScreenshotReceiverTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/screenshot/DeleteScreenshotReceiverTest.java
@@ -31,7 +31,6 @@
 
 import android.content.ContentResolver;
 import android.content.ContentValues;
-import android.content.Context;
 import android.content.Intent;
 import android.database.Cursor;
 import android.net.Uri;
@@ -81,7 +80,7 @@
 
         verify(mMockExecutor, never()).execute(any(Runnable.class));
         verify(mMockScreenshotSmartActions, never()).notifyScreenshotAction(
-                any(Context.class), any(String.class), any(String.class), anyBoolean(),
+                any(String.class), any(String.class), anyBoolean(),
                 any(Intent.class));
     }
 
@@ -113,7 +112,7 @@
         }
 
         // ensure smart actions not called by default
-        verify(mMockScreenshotSmartActions, never()).notifyScreenshotAction(any(Context.class),
+        verify(mMockScreenshotSmartActions, never()).notifyScreenshotAction(
                 any(String.class), any(String.class), anyBoolean(), any(Intent.class));
     }
 
@@ -129,7 +128,7 @@
         mDeleteScreenshotReceiver.onReceive(mContext, intent);
 
         verify(mMockExecutor).execute(any(Runnable.class));
-        verify(mMockScreenshotSmartActions).notifyScreenshotAction(mContext, testId,
+        verify(mMockScreenshotSmartActions).notifyScreenshotAction(testId,
                 ACTION_TYPE_DELETE, false, null);
     }
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenshot/ImageCaptureImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/screenshot/ImageCaptureImplTest.kt
new file mode 100644
index 0000000..ce3f20d
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/screenshot/ImageCaptureImplTest.kt
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.screenshot
+
+import android.app.IActivityTaskManager
+import android.graphics.Rect
+import android.hardware.display.DisplayManager
+import android.os.Binder
+import android.os.IBinder
+import android.testing.AndroidTestingRunner
+import android.view.Display
+import android.view.SurfaceControl.ScreenshotHardwareBuffer
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.util.mockito.mock
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+
+/**
+ * Test the logic within ImageCaptureImpl
+ */
+@RunWith(AndroidTestingRunner::class)
+class ImageCaptureImplTest : SysuiTestCase() {
+    private val displayManager = mock<DisplayManager>()
+    private val atmService = mock<IActivityTaskManager>()
+    private val capture = TestableImageCaptureImpl(displayManager, atmService)
+
+    @Test
+    fun captureDisplayWithCrop() {
+        capture.captureDisplay(Display.DEFAULT_DISPLAY, Rect(1, 2, 3, 4))
+        assertThat(capture.token).isNotNull()
+        assertThat(capture.width!!).isEqualTo(2)
+        assertThat(capture.height!!).isEqualTo(2)
+        assertThat(capture.crop!!).isEqualTo(Rect(1, 2, 3, 4))
+    }
+
+    @Test
+    fun captureDisplayWithNullCrop() {
+        capture.captureDisplay(Display.DEFAULT_DISPLAY, null)
+        assertThat(capture.token).isNotNull()
+        assertThat(capture.width!!).isEqualTo(0)
+        assertThat(capture.height!!).isEqualTo(0)
+        assertThat(capture.crop!!).isEqualTo(Rect())
+    }
+
+    class TestableImageCaptureImpl(
+        displayManager: DisplayManager,
+        atmService: IActivityTaskManager
+    ) :
+        ImageCaptureImpl(displayManager, atmService) {
+
+        var token: IBinder? = null
+        var width: Int? = null
+        var height: Int? = null
+        var crop: Rect? = null
+
+        override fun physicalDisplayToken(displayId: Int): IBinder {
+            return Binder()
+        }
+
+        override fun captureDisplay(displayToken: IBinder, width: Int, height: Int, crop: Rect):
+                ScreenshotHardwareBuffer {
+            this.token = displayToken
+            this.width = width
+            this.height = height
+            this.crop = crop
+            return ScreenshotHardwareBuffer(null, null, false, false)
+        }
+    }
+}
\ No newline at end of file
diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenshot/RequestProcessorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/screenshot/RequestProcessorTest.kt
new file mode 100644
index 0000000..002f23a
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/screenshot/RequestProcessorTest.kt
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.screenshot
+
+import android.content.ComponentName
+import android.graphics.Bitmap
+import android.graphics.ColorSpace
+import android.graphics.Insets
+import android.graphics.Rect
+import android.hardware.HardwareBuffer
+import android.net.Uri
+import android.view.WindowManager
+import android.view.WindowManager.ScreenshotSource
+import com.android.internal.util.ScreenshotHelper.HardwareBitmapBundler
+import com.android.internal.util.ScreenshotHelper.ScreenshotRequest
+import com.android.systemui.screenshot.TakeScreenshotService.RequestCallback
+import com.android.systemui.util.mockito.argumentCaptor
+import com.android.systemui.util.mockito.mock
+import com.google.common.truth.Truth.assertThat
+import java.util.function.Consumer
+import org.junit.Test
+import org.mockito.Mockito.eq
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.isNull
+
+class RequestProcessorTest {
+    private val controller = mock<ScreenshotController>()
+    private val bitmapCaptor = argumentCaptor<Bitmap>()
+
+    @Test
+    fun testFullScreenshot() {
+        val request = ScreenshotRequest(ScreenshotSource.SCREENSHOT_KEY_CHORD)
+        val onSavedListener = mock<Consumer<Uri>>()
+        val callback = mock<RequestCallback>()
+        val processor = RequestProcessor(controller)
+
+        processor.processRequest(WindowManager.TAKE_SCREENSHOT_FULLSCREEN, onSavedListener,
+            request, callback)
+
+        verify(controller).takeScreenshotFullscreen(/* topComponent */ isNull(),
+            eq(onSavedListener), eq(callback))
+    }
+
+    @Test
+    fun testSelectedRegionScreenshot() {
+        val request = ScreenshotRequest(ScreenshotSource.SCREENSHOT_KEY_CHORD)
+        val onSavedListener = mock<Consumer<Uri>>()
+        val callback = mock<RequestCallback>()
+        val processor = RequestProcessor(controller)
+
+        processor.processRequest(WindowManager.TAKE_SCREENSHOT_SELECTED_REGION, onSavedListener,
+            request, callback)
+
+        verify(controller).takeScreenshotPartial(/* topComponent */ isNull(),
+            eq(onSavedListener), eq(callback))
+    }
+
+    @Test
+    fun testProvidedImageScreenshot() {
+        val taskId = 1111
+        val userId = 2222
+        val bounds = Rect(50, 50, 150, 150)
+        val topComponent = ComponentName("test", "test")
+        val processor = RequestProcessor(controller)
+
+        val buffer = HardwareBuffer.create(100, 100, HardwareBuffer.RGBA_8888, 1,
+            HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE)
+        val bitmap = Bitmap.wrapHardwareBuffer(buffer, ColorSpace.get(ColorSpace.Named.SRGB))!!
+        val bitmapBundle = HardwareBitmapBundler.hardwareBitmapToBundle(bitmap)
+
+        val request = ScreenshotRequest(ScreenshotSource.SCREENSHOT_OTHER, bitmapBundle,
+            bounds, Insets.NONE, taskId, userId, topComponent)
+
+        val onSavedListener = mock<Consumer<Uri>>()
+        val callback = mock<RequestCallback>()
+
+        processor.processRequest(WindowManager.TAKE_SCREENSHOT_PROVIDED_IMAGE, onSavedListener,
+            request, callback)
+
+        verify(controller).handleImageAsScreenshot(
+            bitmapCaptor.capture(), eq(bounds), eq(Insets.NONE), eq(taskId), eq(userId),
+            eq(topComponent), eq(onSavedListener), eq(callback)
+        )
+
+        assertThat(bitmapCaptor.value.equalsHardwareBitmap(bitmap)).isTrue()
+    }
+
+    private fun Bitmap.equalsHardwareBitmap(bitmap: Bitmap): Boolean {
+        return bitmap.hardwareBuffer == this.hardwareBuffer &&
+                bitmap.colorSpace == this.colorSpace
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenshot/ScreenshotNotificationSmartActionsTest.java b/packages/SystemUI/tests/src/com/android/systemui/screenshot/ScreenshotNotificationSmartActionsTest.java
index 3d658ec..69b7b88 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/screenshot/ScreenshotNotificationSmartActionsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/screenshot/ScreenshotNotificationSmartActionsTest.java
@@ -43,7 +43,6 @@
 
 import androidx.test.filters.SmallTest;
 
-import com.android.systemui.SystemUIFactory;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.screenshot.ScreenshotController.SavedImageData.ActionTransition;
 
@@ -71,7 +70,7 @@
     public void setup() {
         mSmartActionsProvider = mock(
                 ScreenshotNotificationSmartActionsProvider.class);
-        mScreenshotSmartActions = new ScreenshotSmartActions();
+        mScreenshotSmartActions = new ScreenshotSmartActions(() -> mSmartActionsProvider);
         mHandler = mock(Handler.class);
     }
 
@@ -158,8 +157,7 @@
         Bitmap bitmap = mock(Bitmap.class);
         when(bitmap.getConfig()).thenReturn(Bitmap.Config.HARDWARE);
         ScreenshotNotificationSmartActionsProvider actionsProvider =
-                SystemUIFactory.getInstance().createScreenshotNotificationSmartActionsProvider(
-                        mContext, null, mHandler);
+                new ScreenshotNotificationSmartActionsProvider();
         CompletableFuture<List<Notification.Action>> smartActionsFuture =
                 mScreenshotSmartActions.getSmartActionsFuture("", null, bitmap,
                         actionsProvider, REGULAR_SMART_ACTIONS,
@@ -183,7 +181,7 @@
         data.mActionsReadyListener = null;
         SaveImageInBackgroundTask task =
                 new SaveImageInBackgroundTask(mContext, null, mScreenshotSmartActions, data,
-                        ActionTransition::new);
+                        ActionTransition::new, mSmartActionsProvider);
 
         Notification.Action shareAction = task.createShareAction(mContext, mContext.getResources(),
                 Uri.parse("Screenshot_123.png")).get().action;
@@ -211,7 +209,7 @@
         data.mActionsReadyListener = null;
         SaveImageInBackgroundTask task =
                 new SaveImageInBackgroundTask(mContext, null, mScreenshotSmartActions, data,
-                        ActionTransition::new);
+                        ActionTransition::new, mSmartActionsProvider);
 
         Notification.Action editAction = task.createEditAction(mContext, mContext.getResources(),
                 Uri.parse("Screenshot_123.png")).get().action;
@@ -239,7 +237,7 @@
         data.mActionsReadyListener = null;
         SaveImageInBackgroundTask task =
                 new SaveImageInBackgroundTask(mContext, null, mScreenshotSmartActions, data,
-                        ActionTransition::new);
+                        ActionTransition::new, mSmartActionsProvider);
 
         Notification.Action deleteAction = task.createDeleteAction(mContext,
                 mContext.getResources(),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenshot/SmartActionsReceiverTest.java b/packages/SystemUI/tests/src/com/android/systemui/screenshot/SmartActionsReceiverTest.java
index 011e6b7..83c9497 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/screenshot/SmartActionsReceiverTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/screenshot/SmartActionsReceiverTest.java
@@ -74,6 +74,6 @@
         verify(mMockPendingIntent).send(
                 eq(mContext), eq(0), isNull(), isNull(), isNull(), isNull(), any(Bundle.class));
         verify(mMockScreenshotSmartActions).notifyScreenshotAction(
-                mContext, testId, testActionType, true, intent);
+                testId, testActionType, true, intent);
     }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/settings/UserFileManagerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/settings/UserFileManagerImplTest.kt
new file mode 100644
index 0000000..6d9b01e
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/settings/UserFileManagerImplTest.kt
@@ -0,0 +1,153 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.settings
+
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.IntentFilter
+import android.os.Environment
+import android.os.UserManager
+import android.testing.AndroidTestingRunner
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.broadcast.BroadcastDispatcher
+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.google.common.truth.Truth.assertThat
+import java.util.concurrent.Executor
+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.isNull
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.verify
+import org.mockito.MockitoAnnotations
+
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+class UserFileManagerImplTest : SysuiTestCase() {
+    companion object {
+        const val TEST_FILE_NAME = "abc.txt"
+    }
+
+    lateinit var userFileManager: UserFileManagerImpl
+    lateinit var backgroundExecutor: FakeExecutor
+    @Mock
+    lateinit var userManager: UserManager
+    @Mock
+    lateinit var broadcastDispatcher: BroadcastDispatcher
+
+    @Before
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+        backgroundExecutor = FakeExecutor(FakeSystemClock())
+        userFileManager = UserFileManagerImpl(context, userManager,
+            broadcastDispatcher, backgroundExecutor)
+    }
+
+    @After
+    fun end() {
+        val dir = Environment.buildPath(
+            context.filesDir,
+            UserFileManagerImpl.ID)
+        dir.deleteRecursively()
+    }
+
+    @Test
+    fun testGetFile() {
+        assertThat(userFileManager.getFile(TEST_FILE_NAME, 0).path)
+            .isEqualTo("${context.filesDir}/$TEST_FILE_NAME")
+        assertThat(userFileManager.getFile(TEST_FILE_NAME, 11).path)
+            .isEqualTo("${context.filesDir}/${UserFileManagerImpl.ID}/11/files/$TEST_FILE_NAME")
+    }
+
+    @Test
+    fun testGetSharedPreferences() {
+        val secondarySharedPref = userFileManager.getSharedPreferences(TEST_FILE_NAME, 0, 11)
+        val secondaryUserDir = Environment.buildPath(
+            context.filesDir,
+            UserFileManagerImpl.ID,
+            "11",
+            UserFileManagerImpl.SHARED_PREFS,
+            TEST_FILE_NAME
+        )
+
+        assertThat(secondarySharedPref).isNotNull()
+        assertThat(secondaryUserDir.exists())
+        assertThat(userFileManager.getSharedPreferences(TEST_FILE_NAME, 0, 0))
+            .isNotEqualTo(secondarySharedPref)
+    }
+
+    @Test
+    fun testUserFileManagerStart() {
+        val userFileManager = spy(userFileManager)
+        userFileManager.start()
+        verify(userFileManager).clearDeletedUserData()
+        verify(broadcastDispatcher).registerReceiver(any(BroadcastReceiver::class.java),
+            any(IntentFilter::class.java),
+            any(Executor::class.java), isNull(), eq(Context.RECEIVER_EXPORTED), isNull())
+    }
+
+    @Test
+    fun testClearDeletedUserData() {
+        val dir = Environment.buildPath(
+            context.filesDir,
+            UserFileManagerImpl.ID,
+            "11",
+            "files"
+        )
+        dir.mkdirs()
+        val file = Environment.buildPath(
+            context.filesDir,
+            UserFileManagerImpl.ID,
+            "11",
+            "files",
+            TEST_FILE_NAME
+        )
+        val secondaryUserDir = Environment.buildPath(
+            context.filesDir,
+            UserFileManagerImpl.ID,
+            "11",
+        )
+        file.createNewFile()
+        assertThat(secondaryUserDir.exists()).isTrue()
+        assertThat(file.exists()).isTrue()
+        userFileManager.clearDeletedUserData()
+        assertThat(backgroundExecutor.runAllReady()).isGreaterThan(0)
+        verify(userManager).aliveUsers
+        assertThat(secondaryUserDir.exists()).isFalse()
+        assertThat(file.exists()).isFalse()
+    }
+
+    @Test
+    fun testEnsureParentDirExists() {
+        val file = Environment.buildPath(
+            context.filesDir,
+            UserFileManagerImpl.ID,
+            "11",
+            "files",
+            TEST_FILE_NAME
+        )
+        assertThat(file.parentFile.exists()).isFalse()
+        userFileManager.ensureParentDirExists(file)
+        assertThat(file.parentFile.exists()).isTrue()
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/CombinedShadeHeaderConstraintsTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/CombinedShadeHeaderConstraintsTest.kt
new file mode 100644
index 0000000..0ce9056
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/CombinedShadeHeaderConstraintsTest.kt
@@ -0,0 +1,328 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.testing.AndroidTestingRunner
+import androidx.constraintlayout.widget.ConstraintSet
+import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID
+import androidx.constraintlayout.widget.ConstraintSet.START
+import androidx.test.filters.SmallTest
+import com.android.systemui.R
+import com.android.systemui.SysuiTestCase
+import com.google.common.truth.Truth.assertThat
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+class CombinedShadeHeaderConstraintsTest : SysuiTestCase() {
+
+    private lateinit var qqsConstraint: ConstraintSet
+    private lateinit var qsConstraint: ConstraintSet
+    private lateinit var largeScreenConstraint: ConstraintSet
+
+    @Before
+    fun setUp() {
+        qqsConstraint = ConstraintSet().apply {
+            load(context, context.resources.getXml(R.xml.qqs_header))
+        }
+        qsConstraint = ConstraintSet().apply {
+            load(context, context.resources.getXml(R.xml.qs_header_new))
+        }
+        largeScreenConstraint = ConstraintSet().apply {
+            load(context, context.resources.getXml(R.xml.large_screen_shade_header))
+        }
+    }
+
+    @Test
+    fun testEdgeElementsAlignedWithGuide_qqs() {
+        with(qqsConstraint) {
+            assertThat(getConstraint(R.id.clock).layout.startToStart).isEqualTo(R.id.begin_guide)
+            assertThat(getConstraint(R.id.clock).layout.horizontalBias).isEqualTo(0f)
+
+            assertThat(getConstraint(R.id.batteryRemainingIcon).layout.endToEnd)
+                .isEqualTo(R.id.end_guide)
+            assertThat(getConstraint(R.id.batteryRemainingIcon).layout.horizontalBias)
+                .isEqualTo(1f)
+
+            assertThat(getConstraint(R.id.privacy_container).layout.endToEnd)
+                .isEqualTo(R.id.end_guide)
+            assertThat(getConstraint(R.id.privacy_container).layout.horizontalBias)
+                .isEqualTo(1f)
+        }
+    }
+
+    @Test
+    fun testClockScale() {
+        with(qqsConstraint.getConstraint(R.id.clock)) {
+            assertThat(transform.scaleX).isEqualTo(1f)
+            assertThat(transform.scaleY).isEqualTo(1f)
+        }
+        with(qsConstraint.getConstraint(R.id.clock)) {
+            assertThat(transform.scaleX).isGreaterThan(1f)
+            assertThat(transform.scaleY).isGreaterThan(1f)
+        }
+    }
+
+    @Test
+    fun testEdgeElementsAlignedWithEdgeOrGuide_qs() {
+        with(qsConstraint) {
+            assertThat(getConstraint(R.id.clock).layout.startToStart).isEqualTo(PARENT_ID)
+            assertThat(getConstraint(R.id.clock).layout.horizontalBias).isEqualTo(0f)
+
+            assertThat(getConstraint(R.id.date).layout.startToStart).isEqualTo(PARENT_ID)
+            assertThat(getConstraint(R.id.date).layout.horizontalBias).isEqualTo(0f)
+
+            assertThat(getConstraint(R.id.batteryRemainingIcon).layout.endToEnd)
+                .isEqualTo(PARENT_ID)
+            assertThat(getConstraint(R.id.batteryRemainingIcon).layout.horizontalBias)
+                .isEqualTo(1f)
+
+            assertThat(getConstraint(R.id.privacy_container).layout.endToEnd)
+                .isEqualTo(R.id.end_guide)
+            assertThat(getConstraint(R.id.privacy_container).layout.horizontalBias).isEqualTo(1f)
+        }
+    }
+
+    @Test
+    fun testEdgeElementsAlignedWithEdge_largeScreen() {
+        with(largeScreenConstraint) {
+            assertThat(getConstraint(R.id.clock).layout.startToStart).isEqualTo(PARENT_ID)
+            assertThat(getConstraint(R.id.clock).layout.horizontalBias).isEqualTo(0f)
+
+            assertThat(getConstraint(R.id.privacy_container).layout.endToEnd).isEqualTo(PARENT_ID)
+            assertThat(getConstraint(R.id.privacy_container).layout.horizontalBias).isEqualTo(1f)
+        }
+    }
+
+    @Test
+    fun testCarrierAlpha() {
+        assertThat(qqsConstraint.getConstraint(R.id.carrier_group).propertySet.alpha).isEqualTo(0f)
+        assertThat(qsConstraint.getConstraint(R.id.carrier_group).propertySet.alpha).isEqualTo(1f)
+        assertThat(largeScreenConstraint.getConstraint(R.id.carrier_group).propertySet.alpha)
+            .isEqualTo(1f)
+    }
+
+    @Test
+    fun testPrivacyChipVisibilityConstraints_notVisible() {
+        val changes = CombinedShadeHeadersConstraintManagerImpl
+            .privacyChipVisibilityConstraints(false)
+        changes()
+
+        with(qqsConstraint) {
+            assertThat(getConstraint(R.id.statusIcons).propertySet.alpha).isEqualTo(1f)
+            assertThat(getConstraint(R.id.batteryRemainingIcon).propertySet.alpha).isEqualTo(1f)
+        }
+
+        with(qsConstraint) {
+            assertThat(getConstraint(R.id.statusIcons).propertySet.alpha).isEqualTo(1f)
+            assertThat(getConstraint(R.id.batteryRemainingIcon).propertySet.alpha).isEqualTo(1f)
+        }
+
+        with(largeScreenConstraint) {
+            assertThat(getConstraint(R.id.statusIcons).propertySet.alpha).isEqualTo(1f)
+            assertThat(getConstraint(R.id.batteryRemainingIcon).propertySet.alpha).isEqualTo(1f)
+        }
+    }
+
+    @Test
+    fun testPrivacyChipVisibilityConstraints_visible() {
+        val changes = CombinedShadeHeadersConstraintManagerImpl
+            .privacyChipVisibilityConstraints(true)
+        changes()
+
+        with(qqsConstraint) {
+            assertThat(getConstraint(R.id.statusIcons).propertySet.alpha).isEqualTo(0f)
+            assertThat(getConstraint(R.id.batteryRemainingIcon).propertySet.alpha).isEqualTo(0f)
+        }
+
+        with(qsConstraint) {
+            assertThat(getConstraint(R.id.statusIcons).propertySet.alpha).isEqualTo(1f)
+            assertThat(getConstraint(R.id.batteryRemainingIcon).propertySet.alpha).isEqualTo(1f)
+        }
+
+        with(largeScreenConstraint) {
+            assertThat(getConstraint(R.id.statusIcons).propertySet.alpha).isEqualTo(1f)
+            assertThat(getConstraint(R.id.batteryRemainingIcon).propertySet.alpha).isEqualTo(1f)
+        }
+    }
+
+    @Test
+    fun testEmptyCutoutConstraints() {
+        val changes = CombinedShadeHeadersConstraintManagerImpl.emptyCutoutConstraints()
+        changes()
+
+        // QS and Large Screen don't change with cutouts.
+        assertThat(changes.qsConstraintsChanges).isNull()
+        assertThat(changes.largeScreenConstraintsChanges).isNull()
+
+        with(qqsConstraint) {
+            // In this case, the date is constrained on the end by a Barrier determined by either
+            // privacy or statusIcons
+            assertThat(getConstraint(R.id.date).layout.endToStart).isEqualTo(R.id.barrier)
+            assertThat(getConstraint(R.id.statusIcons).layout.startToEnd).isEqualTo(R.id.date)
+            assertThat(getConstraint(R.id.privacy_container).layout.startToEnd).isEqualTo(R.id.date)
+            assertThat(getConstraint(R.id.barrier).layout.mReferenceIds).asList().containsExactly(
+                R.id.statusIcons,
+                R.id.privacy_container
+            )
+            assertThat(getConstraint(R.id.barrier).layout.mBarrierDirection).isEqualTo(START)
+        }
+    }
+
+    @Test
+    fun testGuidesAreSetInCorrectPosition_largeCutoutSmallerPadding() {
+        val cutoutStart = 100
+        val padding = 10
+        val cutoutEnd = 30
+        val changes = CombinedShadeHeadersConstraintManagerImpl.edgesGuidelinesConstraints(
+            cutoutStart,
+            padding,
+            cutoutEnd,
+            padding
+        )
+        changes()
+
+        with(qqsConstraint) {
+            assertThat(getConstraint(R.id.begin_guide).layout.guideBegin)
+                .isEqualTo(cutoutStart - padding)
+            assertThat(getConstraint(R.id.end_guide).layout.guideEnd)
+                .isEqualTo(cutoutEnd - padding)
+        }
+
+        with(qsConstraint) {
+            assertThat(getConstraint(R.id.begin_guide).layout.guideBegin)
+                .isEqualTo(cutoutStart - padding)
+            assertThat(getConstraint(R.id.end_guide).layout.guideEnd)
+                .isEqualTo(cutoutEnd - padding)
+        }
+
+        assertThat(changes.largeScreenConstraintsChanges).isNull()
+    }
+
+    @Test
+    fun testGuidesAreSetInCorrectPosition_smallCutoutLargerPadding() {
+        val cutoutStart = 5
+        val padding = 10
+        val cutoutEnd = 10
+
+        val changes = CombinedShadeHeadersConstraintManagerImpl.edgesGuidelinesConstraints(
+            cutoutStart,
+            padding,
+            cutoutEnd,
+            padding
+        )
+        changes()
+
+        with(qqsConstraint) {
+            assertThat(getConstraint(R.id.begin_guide).layout.guideBegin).isEqualTo(0)
+            assertThat(getConstraint(R.id.end_guide).layout.guideEnd).isEqualTo(0)
+        }
+
+        with(qsConstraint) {
+            assertThat(getConstraint(R.id.begin_guide).layout.guideBegin).isEqualTo(0)
+            assertThat(getConstraint(R.id.end_guide).layout.guideEnd).isEqualTo(0)
+        }
+
+        assertThat(changes.largeScreenConstraintsChanges).isNull()
+    }
+
+    @Test
+    fun testCenterCutoutConstraints_ltr() {
+        val offsetFromEdge = 400
+        val rtl = false
+
+        val changes = CombinedShadeHeadersConstraintManagerImpl
+            .centerCutoutConstraints(rtl, offsetFromEdge)
+        changes()
+
+        // In LTR, center_left is towards the start and center_right is towards the end
+        with(qqsConstraint) {
+            assertThat(getConstraint(R.id.center_left).layout.guideBegin).isEqualTo(offsetFromEdge)
+            assertThat(getConstraint(R.id.center_right).layout.guideEnd).isEqualTo(offsetFromEdge)
+            assertThat(getConstraint(R.id.date).layout.endToStart).isEqualTo(R.id.center_left)
+            assertThat(getConstraint(R.id.statusIcons).layout.startToEnd)
+                .isEqualTo(R.id.center_right)
+            assertThat(getConstraint(R.id.privacy_container).layout.startToEnd)
+                .isEqualTo(R.id.center_right)
+        }
+
+        with(qsConstraint) {
+            assertThat(getConstraint(R.id.center_left).layout.guideBegin).isEqualTo(offsetFromEdge)
+            assertThat(getConstraint(R.id.center_right).layout.guideEnd).isEqualTo(offsetFromEdge)
+
+            assertThat(getConstraint(R.id.date).layout.endToStart).isNotEqualTo(R.id.center_left)
+            assertThat(getConstraint(R.id.date).layout.endToStart).isNotEqualTo(R.id.center_right)
+
+            assertThat(getConstraint(R.id.statusIcons).layout.startToEnd)
+                .isNotEqualTo(R.id.center_left)
+            assertThat(getConstraint(R.id.statusIcons).layout.startToEnd)
+                .isNotEqualTo(R.id.center_right)
+
+            assertThat(getConstraint(R.id.privacy_container).layout.startToEnd)
+                .isEqualTo(R.id.center_right)
+        }
+
+        assertThat(changes.largeScreenConstraintsChanges).isNull()
+    }
+
+    @Test
+    fun testCenterCutoutConstraints_rtl() {
+        val offsetFromEdge = 400
+        val rtl = true
+
+        val changes = CombinedShadeHeadersConstraintManagerImpl
+            .centerCutoutConstraints(rtl, offsetFromEdge)
+        changes()
+
+        // In RTL, center_left is towards the end and center_right is towards the start
+        with(qqsConstraint) {
+            assertThat(getConstraint(R.id.center_left).layout.guideEnd).isEqualTo(offsetFromEdge)
+            assertThat(getConstraint(R.id.center_right).layout.guideBegin).isEqualTo(offsetFromEdge)
+            assertThat(getConstraint(R.id.date).layout.endToStart).isEqualTo(R.id.center_right)
+            assertThat(getConstraint(R.id.statusIcons).layout.startToEnd)
+                .isEqualTo(R.id.center_left)
+            assertThat(getConstraint(R.id.privacy_container).layout.startToEnd)
+                .isEqualTo(R.id.center_left)
+        }
+
+        with(qsConstraint) {
+            assertThat(getConstraint(R.id.center_left).layout.guideEnd).isEqualTo(offsetFromEdge)
+            assertThat(getConstraint(R.id.center_right).layout.guideBegin).isEqualTo(offsetFromEdge)
+
+            assertThat(getConstraint(R.id.date).layout.endToStart).isNotEqualTo(R.id.center_left)
+            assertThat(getConstraint(R.id.date).layout.endToStart).isNotEqualTo(R.id.center_right)
+
+            assertThat(getConstraint(R.id.statusIcons).layout.startToEnd)
+                .isNotEqualTo(R.id.center_left)
+            assertThat(getConstraint(R.id.statusIcons).layout.startToEnd)
+                .isNotEqualTo(R.id.center_right)
+
+            assertThat(getConstraint(R.id.privacy_container).layout.startToEnd)
+                .isEqualTo(R.id.center_left)
+        }
+
+        assertThat(changes.largeScreenConstraintsChanges).isNull()
+    }
+
+    private operator fun ConstraintsChanges.invoke() {
+        qqsConstraintsChanges?.invoke(qqsConstraint)
+        qsConstraintsChanges?.invoke(qsConstraint)
+        largeScreenConstraintsChanges?.invoke(largeScreenConstraint)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/ConstraintChangeTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/ConstraintChangeTest.kt
new file mode 100644
index 0000000..9b2e085
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/ConstraintChangeTest.kt
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.testing.AndroidTestingRunner
+import androidx.constraintlayout.widget.ConstraintSet
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.util.mockito.mock
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito.inOrder
+import org.mockito.Mockito.verify
+
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+class ConstraintChangeTest : SysuiTestCase() {
+
+    @Test
+    fun testSumNonNull() {
+        val mock1: ConstraintChange = mock()
+        val mock2: ConstraintChange = mock()
+
+        val constraintSet = ConstraintSet()
+
+        val sum = mock1 + mock2
+        sum?.invoke(constraintSet)
+
+        val inOrder = inOrder(mock1, mock2)
+        inOrder.verify(mock1).invoke(constraintSet)
+        inOrder.verify(mock2).invoke(constraintSet)
+    }
+
+    @Test
+    fun testSumThisNull() {
+        val mock: ConstraintChange = mock()
+        val constraintSet = ConstraintSet()
+
+        val sum = (null as? ConstraintChange?) + mock
+        sum?.invoke(constraintSet)
+
+        verify(mock).invoke(constraintSet)
+    }
+
+    @Test
+    fun testSumThisNull_notWrapped() {
+        val change: ConstraintChange = {}
+
+        val sum = (null as? ConstraintChange?) + change
+        assertThat(sum).isSameInstanceAs(change)
+    }
+
+    @Test
+    fun testSumOtherNull() {
+        val mock: ConstraintChange = mock()
+        val constraintSet = ConstraintSet()
+
+        val sum = mock + (null as? ConstraintChange?)
+        sum?.invoke(constraintSet)
+
+        verify(mock).invoke(constraintSet)
+    }
+
+    @Test
+    fun testSumOtherNull_notWrapped() {
+        val change: ConstraintChange = {}
+
+        val sum = change + (null as? ConstraintChange?)
+        assertThat(sum).isSameInstanceAs(change)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/ConstraintChangesTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/ConstraintChangesTest.kt
new file mode 100644
index 0000000..0abb084
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/ConstraintChangesTest.kt
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.testing.AndroidTestingRunner
+import androidx.constraintlayout.widget.ConstraintSet
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.util.mockito.mock
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito.inOrder
+
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+class ConstraintChangesTest : SysuiTestCase() {
+
+    @Test
+    fun testSumWithoutNulls() {
+        val mockQQS1: ConstraintChange = mock()
+        val mockQS1: ConstraintChange = mock()
+        val mockLS1: ConstraintChange = mock()
+        val mockQQS2: ConstraintChange = mock()
+        val mockQS2: ConstraintChange = mock()
+        val mockLS2: ConstraintChange = mock()
+
+        val changes1 = ConstraintsChanges(mockQQS1, mockQS1, mockLS1)
+        val changes2 = ConstraintsChanges(mockQQS2, mockQS2, mockLS2)
+
+        val sum = changes1 + changes2
+
+        val constraintSet = ConstraintSet()
+        sum.qqsConstraintsChanges?.invoke(constraintSet)
+        sum.qsConstraintsChanges?.invoke(constraintSet)
+        sum.largeScreenConstraintsChanges?.invoke(constraintSet)
+
+        val inOrder = inOrder(mockQQS1, mockQS1, mockLS1, mockQQS2, mockQS2, mockLS2)
+
+        inOrder.verify(mockQQS1).invoke(constraintSet)
+        inOrder.verify(mockQQS2).invoke(constraintSet)
+        inOrder.verify(mockQS1).invoke(constraintSet)
+        inOrder.verify(mockQS2).invoke(constraintSet)
+        inOrder.verify(mockLS1).invoke(constraintSet)
+        inOrder.verify(mockLS2).invoke(constraintSet)
+    }
+
+    @Test
+    fun testSumWithSomeNulls() {
+        val mockQQS: ConstraintChange = mock()
+        val mockQS: ConstraintChange = mock()
+
+        val changes1 = ConstraintsChanges(mockQQS, null, null)
+        val changes2 = ConstraintsChanges(null, mockQS, null)
+
+        val sum = changes1 + changes2
+
+        assertThat(sum.qqsConstraintsChanges).isSameInstanceAs(mockQQS)
+        assertThat(sum.qsConstraintsChanges).isSameInstanceAs(mockQS)
+        assertThat(sum.largeScreenConstraintsChanges).isNull()
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/LargeScreenShadeHeaderControllerCombinedTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/LargeScreenShadeHeaderControllerCombinedTest.kt
new file mode 100644
index 0000000..ed1a13b
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/LargeScreenShadeHeaderControllerCombinedTest.kt
@@ -0,0 +1,659 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.content.Context
+import android.content.res.Resources
+import android.content.res.XmlResourceParser
+import android.graphics.Rect
+import android.testing.AndroidTestingRunner
+import android.view.DisplayCutout
+import android.view.View
+import android.view.WindowInsets
+import android.widget.TextView
+import androidx.constraintlayout.motion.widget.MotionLayout
+import androidx.constraintlayout.widget.ConstraintSet
+import androidx.test.filters.SmallTest
+import com.android.systemui.R
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.animation.ShadeInterpolation
+import com.android.systemui.battery.BatteryMeterView
+import com.android.systemui.battery.BatteryMeterViewController
+import com.android.systemui.dump.DumpManager
+import com.android.systemui.flags.FeatureFlags
+import com.android.systemui.flags.Flags
+import com.android.systemui.qs.ChipVisibilityListener
+import com.android.systemui.qs.HeaderPrivacyIconsController
+import com.android.systemui.qs.carrier.QSCarrierGroup
+import com.android.systemui.qs.carrier.QSCarrierGroupController
+import com.android.systemui.shade.LargeScreenShadeHeaderController.Companion.HEADER_TRANSITION_ID
+import com.android.systemui.shade.LargeScreenShadeHeaderController.Companion.LARGE_SCREEN_HEADER_CONSTRAINT
+import com.android.systemui.shade.LargeScreenShadeHeaderController.Companion.LARGE_SCREEN_HEADER_TRANSITION_ID
+import com.android.systemui.shade.LargeScreenShadeHeaderController.Companion.QQS_HEADER_CONSTRAINT
+import com.android.systemui.shade.LargeScreenShadeHeaderController.Companion.QS_HEADER_CONSTRAINT
+import com.android.systemui.statusbar.phone.StatusBarContentInsetsProvider
+import com.android.systemui.statusbar.phone.StatusBarIconController
+import com.android.systemui.statusbar.phone.StatusIconContainer
+import com.android.systemui.statusbar.policy.FakeConfigurationController
+import com.android.systemui.statusbar.policy.VariableDateView
+import com.android.systemui.statusbar.policy.VariableDateViewController
+import com.android.systemui.util.mockito.any
+import com.android.systemui.util.mockito.capture
+import com.android.systemui.util.mockito.eq
+import com.android.systemui.util.mockito.mock
+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.Answers
+import org.mockito.ArgumentCaptor
+import org.mockito.ArgumentMatchers
+import org.mockito.Mock
+import org.mockito.Mockito.anyBoolean
+import org.mockito.Mockito.anyFloat
+import org.mockito.Mockito.anyInt
+import org.mockito.Mockito.clearInvocations
+import org.mockito.Mockito.inOrder
+import org.mockito.Mockito.never
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when` as whenever
+import org.mockito.junit.MockitoJUnit
+
+private val EMPTY_CHANGES = ConstraintsChanges()
+
+/**
+ * Tests for [LargeScreenShadeHeaderController] when [Flags.COMBINED_QS_HEADERS] is `true`.
+ *
+ * Once that flag is removed, this class will be combined with
+ * [LargeScreenShadeHeaderControllerTest].
+ */
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+class LargeScreenShadeHeaderControllerCombinedTest : SysuiTestCase() {
+
+    @Mock
+    private lateinit var statusIcons: StatusIconContainer
+    @Mock
+    private lateinit var statusBarIconController: StatusBarIconController
+    @Mock
+    private lateinit var qsCarrierGroupController: QSCarrierGroupController
+    @Mock
+    private lateinit var qsCarrierGroupControllerBuilder: QSCarrierGroupController.Builder
+    @Mock
+    private lateinit var featureFlags: FeatureFlags
+    @Mock
+    private lateinit var clock: TextView
+    @Mock
+    private lateinit var date: VariableDateView
+    @Mock
+    private lateinit var carrierGroup: QSCarrierGroup
+    @Mock
+    private lateinit var batteryMeterView: BatteryMeterView
+    @Mock
+    private lateinit var batteryMeterViewController: BatteryMeterViewController
+    @Mock
+    private lateinit var privacyIconsController: HeaderPrivacyIconsController
+    @Mock
+    private lateinit var insetsProvider: StatusBarContentInsetsProvider
+    @Mock
+    private lateinit var variableDateViewControllerFactory: VariableDateViewController.Factory
+    @Mock
+    private lateinit var variableDateViewController: VariableDateViewController
+    @Mock
+    private lateinit var dumpManager: DumpManager
+    @Mock
+    private lateinit var combinedShadeHeadersConstraintManager:
+        CombinedShadeHeadersConstraintManager
+
+    @Mock
+    private lateinit var mockedContext: Context
+    @Mock(answer = Answers.RETURNS_MOCKS)
+    private lateinit var view: MotionLayout
+
+    @Mock
+    private lateinit var qqsConstraints: ConstraintSet
+    @Mock
+    private lateinit var qsConstraints: ConstraintSet
+    @Mock
+    private lateinit var largeScreenConstraints: ConstraintSet
+
+    @JvmField @Rule
+    val mockitoRule = MockitoJUnit.rule()
+    var viewVisibility = View.GONE
+
+    private lateinit var controller: LargeScreenShadeHeaderController
+    private lateinit var carrierIconSlots: List<String>
+    private val configurationController = FakeConfigurationController()
+
+    @Before
+    fun setUp() {
+        whenever<TextView>(view.findViewById(R.id.clock)).thenReturn(clock)
+        whenever(clock.context).thenReturn(mockedContext)
+
+        whenever<TextView>(view.findViewById(R.id.date)).thenReturn(date)
+        whenever(date.context).thenReturn(mockedContext)
+        whenever(variableDateViewControllerFactory.create(any()))
+            .thenReturn(variableDateViewController)
+
+        whenever<QSCarrierGroup>(view.findViewById(R.id.carrier_group)).thenReturn(carrierGroup)
+        whenever<BatteryMeterView>(view.findViewById(R.id.batteryRemainingIcon))
+            .thenReturn(batteryMeterView)
+
+        whenever<StatusIconContainer>(view.findViewById(R.id.statusIcons)).thenReturn(statusIcons)
+        whenever(statusIcons.context).thenReturn(context)
+
+        whenever(qsCarrierGroupControllerBuilder.setQSCarrierGroup(any()))
+            .thenReturn(qsCarrierGroupControllerBuilder)
+        whenever(qsCarrierGroupControllerBuilder.build()).thenReturn(qsCarrierGroupController)
+
+        whenever(view.context).thenReturn(context)
+        whenever(view.resources).thenReturn(context.resources)
+        whenever(view.setVisibility(ArgumentMatchers.anyInt())).then {
+            viewVisibility = it.arguments[0] as Int
+            null
+        }
+        whenever(view.visibility).thenAnswer { _ -> viewVisibility }
+
+        whenever(featureFlags.isEnabled(Flags.COMBINED_QS_HEADERS)).thenReturn(true)
+        whenever(featureFlags.isEnabled(Flags.NEW_HEADER)).thenReturn(true)
+
+        setUpDefaultInsets()
+        setUpMotionLayout(view)
+
+        controller = LargeScreenShadeHeaderController(
+            view,
+            statusBarIconController,
+            privacyIconsController,
+            insetsProvider,
+            configurationController,
+            variableDateViewControllerFactory,
+            batteryMeterViewController,
+            dumpManager,
+            featureFlags,
+            qsCarrierGroupControllerBuilder,
+            combinedShadeHeadersConstraintManager
+        )
+        whenever(view.isAttachedToWindow).thenReturn(true)
+        controller.init()
+        carrierIconSlots = listOf(
+            context.getString(com.android.internal.R.string.status_bar_mobile))
+    }
+
+    @Test
+    fun testCorrectConstraints() {
+        val captor = ArgumentCaptor.forClass(XmlResourceParser::class.java)
+
+        verify(qqsConstraints).load(eq(context), capture(captor))
+        assertThat(captor.value.getResId()).isEqualTo(R.xml.qqs_header)
+
+        verify(qsConstraints).load(eq(context), capture(captor))
+        assertThat(captor.value.getResId()).isEqualTo(R.xml.qs_header_new)
+
+        verify(largeScreenConstraints).load(eq(context), capture(captor))
+        assertThat(captor.value.getResId()).isEqualTo(R.xml.large_screen_shade_header)
+    }
+
+    @Test
+    fun testControllersCreatedAndInitialized() {
+        verify(variableDateViewController).init()
+
+        verify(batteryMeterViewController).init()
+        verify(batteryMeterViewController).ignoreTunerUpdates()
+        verify(batteryMeterView).setPercentShowMode(BatteryMeterView.MODE_ESTIMATE)
+
+        val inOrder = inOrder(qsCarrierGroupControllerBuilder)
+        inOrder.verify(qsCarrierGroupControllerBuilder).setQSCarrierGroup(carrierGroup)
+        inOrder.verify(qsCarrierGroupControllerBuilder).build()
+    }
+
+    @Test
+    fun testClockPivotLtr() {
+        val width = 200
+        whenever(clock.width).thenReturn(width)
+        whenever(clock.isLayoutRtl).thenReturn(false)
+
+        val captor = ArgumentCaptor.forClass(View.OnLayoutChangeListener::class.java)
+        verify(clock).addOnLayoutChangeListener(capture(captor))
+
+        captor.value.onLayoutChange(clock, 0, 1, 2, 3, 4, 5, 6, 7)
+        verify(clock).pivotX = 0f
+    }
+
+    @Test
+    fun testClockPivotRtl() {
+        val width = 200
+        whenever(clock.width).thenReturn(width)
+        whenever(clock.isLayoutRtl).thenReturn(true)
+
+        val captor = ArgumentCaptor.forClass(View.OnLayoutChangeListener::class.java)
+        verify(clock).addOnLayoutChangeListener(capture(captor))
+
+        captor.value.onLayoutChange(clock, 0, 1, 2, 3, 4, 5, 6, 7)
+        verify(clock).pivotX = width.toFloat()
+    }
+
+    @Test
+    fun testShadeExpanded_true() {
+        // When shade is expanded, view should be visible regardless of largeScreenActive
+        controller.largeScreenActive = false
+        controller.qsVisible = true
+        assertThat(viewVisibility).isEqualTo(View.VISIBLE)
+
+        controller.largeScreenActive = true
+        assertThat(viewVisibility).isEqualTo(View.VISIBLE)
+    }
+
+    @Test
+    fun testShadeExpanded_false() {
+        // When shade is not expanded, view should be invisible regardless of largeScreenActive
+        controller.largeScreenActive = false
+        controller.qsVisible = false
+        assertThat(viewVisibility).isEqualTo(View.INVISIBLE)
+
+        controller.largeScreenActive = true
+        assertThat(viewVisibility).isEqualTo(View.INVISIBLE)
+    }
+
+    @Test
+    fun testLargeScreenActive_true() {
+        controller.largeScreenActive = false // Make sure there's a change
+        clearInvocations(view)
+
+        controller.largeScreenActive = true
+
+        verify(view).setTransition(LARGE_SCREEN_HEADER_TRANSITION_ID)
+    }
+
+    @Test
+    fun testLargeScreenActive_false() {
+        controller.largeScreenActive = true // Make sure there's a change
+        clearInvocations(view)
+
+        controller.largeScreenActive = false
+
+        verify(view).setTransition(HEADER_TRANSITION_ID)
+    }
+
+    @Test
+    fun testShadeExpandedFraction() {
+        // View needs to be visible for this to actually take effect
+        controller.qsVisible = true
+
+        clearInvocations(view)
+        controller.shadeExpandedFraction = 0.3f
+        verify(view).alpha = ShadeInterpolation.getContentAlpha(0.3f)
+
+        clearInvocations(view)
+        controller.shadeExpandedFraction = 1f
+        verify(view).alpha = ShadeInterpolation.getContentAlpha(1f)
+
+        clearInvocations(view)
+        controller.shadeExpandedFraction = 0f
+        verify(view).alpha = ShadeInterpolation.getContentAlpha(0f)
+    }
+
+    @Test
+    fun testQsExpandedFraction_headerTransition() {
+        controller.qsVisible = true
+        controller.largeScreenActive = false
+
+        clearInvocations(view)
+        controller.qsExpandedFraction = 0.3f
+        verify(view).progress = 0.3f
+    }
+
+    @Test
+    fun testQsExpandedFraction_largeScreen() {
+        controller.qsVisible = true
+        controller.largeScreenActive = true
+
+        clearInvocations(view)
+        controller.qsExpandedFraction = 0.3f
+        verify(view, never()).progress = anyFloat()
+    }
+
+    @Test
+    fun testScrollY_headerTransition() {
+        controller.largeScreenActive = false
+
+        clearInvocations(view)
+        controller.qsScrollY = 20
+        verify(view).scrollY = 20
+    }
+
+    @Test
+    fun testScrollY_largeScreen() {
+        controller.largeScreenActive = true
+
+        clearInvocations(view)
+        controller.qsScrollY = 20
+        verify(view, never()).scrollY = anyInt()
+    }
+
+    @Test
+    fun testPrivacyChipVisibilityChanged_visible_changesCorrectConstraints() {
+        val chipVisibleChanges = createMockConstraintChanges()
+        val chipNotVisibleChanges = createMockConstraintChanges()
+
+        whenever(combinedShadeHeadersConstraintManager.privacyChipVisibilityConstraints(true))
+            .thenReturn(chipVisibleChanges)
+        whenever(combinedShadeHeadersConstraintManager.privacyChipVisibilityConstraints(false))
+            .thenReturn(chipNotVisibleChanges)
+
+        val captor = ArgumentCaptor.forClass(ChipVisibilityListener::class.java)
+        verify(privacyIconsController).chipVisibilityListener = capture(captor)
+
+        captor.value.onChipVisibilityRefreshed(true)
+
+        verify(chipVisibleChanges.qqsConstraintsChanges)!!.invoke(qqsConstraints)
+        verify(chipVisibleChanges.qsConstraintsChanges)!!.invoke(qsConstraints)
+        verify(chipVisibleChanges.largeScreenConstraintsChanges)!!.invoke(largeScreenConstraints)
+
+        verify(chipNotVisibleChanges.qqsConstraintsChanges, never())!!.invoke(any())
+        verify(chipNotVisibleChanges.qsConstraintsChanges, never())!!.invoke(any())
+        verify(chipNotVisibleChanges.largeScreenConstraintsChanges, never())!!.invoke(any())
+    }
+
+    @Test
+    fun testPrivacyChipVisibilityChanged_notVisible_changesCorrectConstraints() {
+        val chipVisibleChanges = createMockConstraintChanges()
+        val chipNotVisibleChanges = createMockConstraintChanges()
+
+        whenever(combinedShadeHeadersConstraintManager.privacyChipVisibilityConstraints(true))
+            .thenReturn(chipVisibleChanges)
+        whenever(combinedShadeHeadersConstraintManager.privacyChipVisibilityConstraints(false))
+            .thenReturn(chipNotVisibleChanges)
+
+        val captor = ArgumentCaptor.forClass(ChipVisibilityListener::class.java)
+        verify(privacyIconsController).chipVisibilityListener = capture(captor)
+
+        captor.value.onChipVisibilityRefreshed(false)
+
+        verify(chipVisibleChanges.qqsConstraintsChanges, never())!!.invoke(qqsConstraints)
+        verify(chipVisibleChanges.qsConstraintsChanges, never())!!.invoke(qsConstraints)
+        verify(chipVisibleChanges.largeScreenConstraintsChanges, never())!!
+            .invoke(largeScreenConstraints)
+
+        verify(chipNotVisibleChanges.qqsConstraintsChanges)!!.invoke(any())
+        verify(chipNotVisibleChanges.qsConstraintsChanges)!!.invoke(any())
+        verify(chipNotVisibleChanges.largeScreenConstraintsChanges)!!.invoke(any())
+    }
+
+    @Test
+    fun testInsetsGuides_ltr() {
+        whenever(view.isLayoutRtl).thenReturn(false)
+        val captor = ArgumentCaptor.forClass(View.OnApplyWindowInsetsListener::class.java)
+        verify(view).setOnApplyWindowInsetsListener(capture(captor))
+        val mockConstraintsChanges = createMockConstraintChanges()
+
+        val (insetLeft, insetRight) = 30 to 40
+        val (paddingStart, paddingEnd) = 10 to 20
+        whenever(view.paddingStart).thenReturn(paddingStart)
+        whenever(view.paddingEnd).thenReturn(paddingEnd)
+
+        mockInsetsProvider(insetLeft to insetRight, false)
+
+        whenever(combinedShadeHeadersConstraintManager
+            .edgesGuidelinesConstraints(anyInt(), anyInt(), anyInt(), anyInt())
+        ).thenReturn(mockConstraintsChanges)
+
+        captor.value.onApplyWindowInsets(view, createWindowInsets())
+
+        verify(combinedShadeHeadersConstraintManager)
+            .edgesGuidelinesConstraints(insetLeft, paddingStart, insetRight, paddingEnd)
+
+        verify(mockConstraintsChanges.qqsConstraintsChanges)!!.invoke(any())
+        verify(mockConstraintsChanges.qsConstraintsChanges)!!.invoke(any())
+        verify(mockConstraintsChanges.largeScreenConstraintsChanges)!!.invoke(any())
+    }
+
+    @Test
+    fun testInsetsGuides_rtl() {
+        whenever(view.isLayoutRtl).thenReturn(true)
+        val captor = ArgumentCaptor.forClass(View.OnApplyWindowInsetsListener::class.java)
+        verify(view).setOnApplyWindowInsetsListener(capture(captor))
+        val mockConstraintsChanges = createMockConstraintChanges()
+
+        val (insetLeft, insetRight) = 30 to 40
+        val (paddingStart, paddingEnd) = 10 to 20
+        whenever(view.paddingStart).thenReturn(paddingStart)
+        whenever(view.paddingEnd).thenReturn(paddingEnd)
+
+        mockInsetsProvider(insetLeft to insetRight, false)
+
+        whenever(combinedShadeHeadersConstraintManager
+            .edgesGuidelinesConstraints(anyInt(), anyInt(), anyInt(), anyInt())
+        ).thenReturn(mockConstraintsChanges)
+
+        captor.value.onApplyWindowInsets(view, createWindowInsets())
+
+        verify(combinedShadeHeadersConstraintManager)
+            .edgesGuidelinesConstraints(insetRight, paddingStart, insetLeft, paddingEnd)
+
+        verify(mockConstraintsChanges.qqsConstraintsChanges)!!.invoke(any())
+        verify(mockConstraintsChanges.qsConstraintsChanges)!!.invoke(any())
+        verify(mockConstraintsChanges.largeScreenConstraintsChanges)!!.invoke(any())
+    }
+
+    @Test
+    fun testNullCutout() {
+        val captor = ArgumentCaptor.forClass(View.OnApplyWindowInsetsListener::class.java)
+        verify(view).setOnApplyWindowInsetsListener(capture(captor))
+        val mockConstraintsChanges = createMockConstraintChanges()
+
+        whenever(combinedShadeHeadersConstraintManager.emptyCutoutConstraints())
+            .thenReturn(mockConstraintsChanges)
+
+        captor.value.onApplyWindowInsets(view, createWindowInsets(null))
+
+        verify(combinedShadeHeadersConstraintManager).emptyCutoutConstraints()
+        verify(combinedShadeHeadersConstraintManager, never())
+            .centerCutoutConstraints(anyBoolean(), anyInt())
+
+        verify(mockConstraintsChanges.qqsConstraintsChanges)!!.invoke(any())
+        verify(mockConstraintsChanges.qsConstraintsChanges)!!.invoke(any())
+        verify(mockConstraintsChanges.largeScreenConstraintsChanges)!!.invoke(any())
+    }
+
+    @Test
+    fun testEmptyCutout() {
+        val captor = ArgumentCaptor.forClass(View.OnApplyWindowInsetsListener::class.java)
+        verify(view).setOnApplyWindowInsetsListener(capture(captor))
+        val mockConstraintsChanges = createMockConstraintChanges()
+
+        whenever(combinedShadeHeadersConstraintManager.emptyCutoutConstraints())
+            .thenReturn(mockConstraintsChanges)
+
+        captor.value.onApplyWindowInsets(view, createWindowInsets())
+
+        verify(combinedShadeHeadersConstraintManager).emptyCutoutConstraints()
+        verify(combinedShadeHeadersConstraintManager, never())
+            .centerCutoutConstraints(anyBoolean(), anyInt())
+
+        verify(mockConstraintsChanges.qqsConstraintsChanges)!!.invoke(any())
+        verify(mockConstraintsChanges.qsConstraintsChanges)!!.invoke(any())
+        verify(mockConstraintsChanges.largeScreenConstraintsChanges)!!.invoke(any())
+    }
+
+    @Test
+    fun testCornerCutout_emptyRect() {
+        val captor = ArgumentCaptor.forClass(View.OnApplyWindowInsetsListener::class.java)
+        verify(view).setOnApplyWindowInsetsListener(capture(captor))
+        val mockConstraintsChanges = createMockConstraintChanges()
+
+        mockInsetsProvider(0 to 0, true)
+
+        whenever(combinedShadeHeadersConstraintManager.emptyCutoutConstraints())
+            .thenReturn(mockConstraintsChanges)
+
+        captor.value.onApplyWindowInsets(view, createWindowInsets())
+
+        verify(combinedShadeHeadersConstraintManager).emptyCutoutConstraints()
+        verify(combinedShadeHeadersConstraintManager, never())
+            .centerCutoutConstraints(anyBoolean(), anyInt())
+
+        verify(mockConstraintsChanges.qqsConstraintsChanges)!!.invoke(any())
+        verify(mockConstraintsChanges.qsConstraintsChanges)!!.invoke(any())
+        verify(mockConstraintsChanges.largeScreenConstraintsChanges)!!.invoke(any())
+    }
+
+    @Test
+    fun testCornerCutout_nonEmptyRect() {
+        val captor = ArgumentCaptor.forClass(View.OnApplyWindowInsetsListener::class.java)
+        verify(view).setOnApplyWindowInsetsListener(capture(captor))
+        val mockConstraintsChanges = createMockConstraintChanges()
+
+        mockInsetsProvider(0 to 0, true)
+
+        whenever(combinedShadeHeadersConstraintManager.emptyCutoutConstraints())
+            .thenReturn(mockConstraintsChanges)
+
+        captor.value.onApplyWindowInsets(view, createWindowInsets(Rect(1, 2, 3, 4)))
+
+        verify(combinedShadeHeadersConstraintManager).emptyCutoutConstraints()
+        verify(combinedShadeHeadersConstraintManager, never())
+            .centerCutoutConstraints(anyBoolean(), anyInt())
+
+        verify(mockConstraintsChanges.qqsConstraintsChanges)!!.invoke(any())
+        verify(mockConstraintsChanges.qsConstraintsChanges)!!.invoke(any())
+        verify(mockConstraintsChanges.largeScreenConstraintsChanges)!!.invoke(any())
+    }
+
+    @Test
+    fun testTopCutout_ltr() {
+        val width = 100
+        val paddingLeft = 10
+        val paddingRight = 20
+        val cutoutWidth = 30
+
+        whenever(view.isLayoutRtl).thenReturn(false)
+        whenever(view.width).thenReturn(width)
+        whenever(view.paddingLeft).thenReturn(paddingLeft)
+        whenever(view.paddingRight).thenReturn(paddingRight)
+
+        val captor = ArgumentCaptor.forClass(View.OnApplyWindowInsetsListener::class.java)
+        verify(view).setOnApplyWindowInsetsListener(capture(captor))
+        val mockConstraintsChanges = createMockConstraintChanges()
+
+        mockInsetsProvider(0 to 0, false)
+
+        whenever(combinedShadeHeadersConstraintManager
+            .centerCutoutConstraints(anyBoolean(), anyInt())
+        ).thenReturn(mockConstraintsChanges)
+
+        captor.value.onApplyWindowInsets(view, createWindowInsets(Rect(0, 0, cutoutWidth, 1)))
+
+        verify(combinedShadeHeadersConstraintManager, never()).emptyCutoutConstraints()
+        val offset = (width - paddingLeft - paddingRight - cutoutWidth) / 2
+        verify(combinedShadeHeadersConstraintManager).centerCutoutConstraints(false, offset)
+
+        verify(mockConstraintsChanges.qqsConstraintsChanges)!!.invoke(any())
+        verify(mockConstraintsChanges.qsConstraintsChanges)!!.invoke(any())
+        verify(mockConstraintsChanges.largeScreenConstraintsChanges)!!.invoke(any())
+    }
+
+    @Test
+    fun testTopCutout_rtl() {
+        val width = 100
+        val paddingLeft = 10
+        val paddingRight = 20
+        val cutoutWidth = 30
+
+        whenever(view.isLayoutRtl).thenReturn(true)
+        whenever(view.width).thenReturn(width)
+        whenever(view.paddingLeft).thenReturn(paddingLeft)
+        whenever(view.paddingRight).thenReturn(paddingRight)
+
+        val captor = ArgumentCaptor.forClass(View.OnApplyWindowInsetsListener::class.java)
+        verify(view).setOnApplyWindowInsetsListener(capture(captor))
+        val mockConstraintsChanges = createMockConstraintChanges()
+
+        mockInsetsProvider(0 to 0, false)
+
+        whenever(combinedShadeHeadersConstraintManager
+            .centerCutoutConstraints(anyBoolean(), anyInt())
+        ).thenReturn(mockConstraintsChanges)
+
+        captor.value.onApplyWindowInsets(view, createWindowInsets(Rect(0, 0, cutoutWidth, 1)))
+
+        verify(combinedShadeHeadersConstraintManager, never()).emptyCutoutConstraints()
+        val offset = (width - paddingLeft - paddingRight - cutoutWidth) / 2
+        verify(combinedShadeHeadersConstraintManager).centerCutoutConstraints(true, offset)
+
+        verify(mockConstraintsChanges.qqsConstraintsChanges)!!.invoke(any())
+        verify(mockConstraintsChanges.qsConstraintsChanges)!!.invoke(any())
+        verify(mockConstraintsChanges.largeScreenConstraintsChanges)!!.invoke(any())
+    }
+
+    private fun createWindowInsets(
+        topCutout: Rect? = Rect()
+    ): WindowInsets {
+        val windowInsets: WindowInsets = mock()
+        val displayCutout: DisplayCutout = mock()
+        whenever(windowInsets.displayCutout)
+            .thenReturn(if (topCutout != null) displayCutout else null)
+        whenever(displayCutout.boundingRectTop).thenReturn(topCutout)
+
+        return windowInsets
+    }
+
+    private fun mockInsetsProvider(
+        insets: Pair<Int, Int> = 0 to 0,
+        cornerCutout: Boolean = false,
+    ) {
+        whenever(insetsProvider.getStatusBarContentInsetsForCurrentRotation())
+            .thenReturn(insets.toAndroidPair())
+        whenever(insetsProvider.currentRotationHasCornerCutout()).thenReturn(cornerCutout)
+    }
+
+    private fun createMockConstraintChanges(): ConstraintsChanges {
+        return ConstraintsChanges(mock(), mock(), mock())
+    }
+
+    private fun XmlResourceParser.getResId(): Int {
+        return Resources.getAttributeSetSourceResId(this)
+    }
+
+    private fun setUpMotionLayout(motionLayout: MotionLayout) {
+        whenever(motionLayout.getConstraintSet(QQS_HEADER_CONSTRAINT)).thenReturn(qqsConstraints)
+        whenever(motionLayout.getConstraintSet(QS_HEADER_CONSTRAINT)).thenReturn(qsConstraints)
+        whenever(motionLayout.getConstraintSet(LARGE_SCREEN_HEADER_CONSTRAINT))
+            .thenReturn(largeScreenConstraints)
+    }
+
+    private fun setUpDefaultInsets() {
+        whenever(combinedShadeHeadersConstraintManager
+            .edgesGuidelinesConstraints(anyInt(), anyInt(), anyInt(), anyInt())
+        ).thenReturn(EMPTY_CHANGES)
+        whenever(combinedShadeHeadersConstraintManager.emptyCutoutConstraints())
+            .thenReturn(EMPTY_CHANGES)
+        whenever(combinedShadeHeadersConstraintManager
+            .centerCutoutConstraints(anyBoolean(), anyInt())
+        ).thenReturn(EMPTY_CHANGES)
+        whenever(combinedShadeHeadersConstraintManager
+            .privacyChipVisibilityConstraints(anyBoolean())
+        ).thenReturn(EMPTY_CHANGES)
+        whenever(insetsProvider.getStatusBarContentInsetsForCurrentRotation())
+            .thenReturn(Pair(0, 0).toAndroidPair())
+        whenever(insetsProvider.currentRotationHasCornerCutout()).thenReturn(false)
+    }
+
+    private fun<T, U> Pair<T, U>.toAndroidPair(): android.util.Pair<T, U> {
+        return android.util.Pair(first, second)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/LargeScreenShadeHeaderControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/LargeScreenShadeHeaderControllerTest.kt
new file mode 100644
index 0000000..02b26db
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/LargeScreenShadeHeaderControllerTest.kt
@@ -0,0 +1,190 @@
+package com.android.systemui.shade
+
+import android.app.StatusBarManager
+import android.content.Context
+import android.testing.AndroidTestingRunner
+import android.view.View
+import android.widget.TextView
+import androidx.test.filters.SmallTest
+import com.android.systemui.R
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.animation.ShadeInterpolation
+import com.android.systemui.battery.BatteryMeterView
+import com.android.systemui.battery.BatteryMeterViewController
+import com.android.systemui.dump.DumpManager
+import com.android.systemui.flags.FeatureFlags
+import com.android.systemui.flags.Flags
+import com.android.systemui.qs.HeaderPrivacyIconsController
+import com.android.systemui.qs.carrier.QSCarrierGroup
+import com.android.systemui.qs.carrier.QSCarrierGroupController
+import com.android.systemui.statusbar.phone.StatusBarContentInsetsProvider
+import com.android.systemui.statusbar.phone.StatusBarIconController
+import com.android.systemui.statusbar.phone.StatusIconContainer
+import com.android.systemui.statusbar.policy.FakeConfigurationController
+import com.android.systemui.statusbar.policy.VariableDateViewController
+import com.android.systemui.util.mockito.any
+import com.google.common.truth.Truth.assertThat
+import org.junit.After
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers.anyInt
+import org.mockito.Mock
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyZeroInteractions
+import org.mockito.Mockito.`when` as whenever
+import org.mockito.junit.MockitoJUnit
+
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+class LargeScreenShadeHeaderControllerTest : SysuiTestCase() {
+
+    @Mock private lateinit var view: View
+    @Mock private lateinit var statusIcons: StatusIconContainer
+    @Mock private lateinit var statusBarIconController: StatusBarIconController
+    @Mock private lateinit var qsCarrierGroupController: QSCarrierGroupController
+    @Mock private lateinit var qsCarrierGroupControllerBuilder: QSCarrierGroupController.Builder
+    @Mock private lateinit var featureFlags: FeatureFlags
+    @Mock private lateinit var clock: TextView
+    @Mock private lateinit var date: TextView
+    @Mock private lateinit var carrierGroup: QSCarrierGroup
+    @Mock private lateinit var batteryMeterView: BatteryMeterView
+    @Mock private lateinit var batteryMeterViewController: BatteryMeterViewController
+    @Mock private lateinit var privacyIconsController: HeaderPrivacyIconsController
+    @Mock private lateinit var insetsProvider: StatusBarContentInsetsProvider
+    @Mock private lateinit var variableDateViewControllerFactory: VariableDateViewController.Factory
+    @Mock private lateinit var variableDateViewController: VariableDateViewController
+    @Mock private lateinit var dumpManager: DumpManager
+    @Mock private lateinit var combinedShadeHeadersConstraintManager:
+        CombinedShadeHeadersConstraintManager
+
+    @Mock private lateinit var mockedContext: Context
+
+    @JvmField @Rule val mockitoRule = MockitoJUnit.rule()
+    var viewVisibility = View.GONE
+
+    private lateinit var mLargeScreenShadeHeaderController: LargeScreenShadeHeaderController
+    private lateinit var carrierIconSlots: List<String>
+    private val configurationController = FakeConfigurationController()
+
+    @Before
+    fun setup() {
+        whenever<TextView>(view.findViewById(R.id.clock)).thenReturn(clock)
+        whenever(clock.context).thenReturn(mockedContext)
+        whenever<TextView>(view.findViewById(R.id.date)).thenReturn(date)
+        whenever(date.context).thenReturn(mockedContext)
+        whenever<QSCarrierGroup>(view.findViewById(R.id.carrier_group)).thenReturn(carrierGroup)
+        whenever<BatteryMeterView>(view.findViewById(R.id.batteryRemainingIcon))
+                .thenReturn(batteryMeterView)
+        whenever<StatusIconContainer>(view.findViewById(R.id.statusIcons)).thenReturn(statusIcons)
+        whenever(view.context).thenReturn(context)
+        whenever(view.resources).thenReturn(context.resources)
+        whenever(statusIcons.context).thenReturn(context)
+        whenever(qsCarrierGroupControllerBuilder.setQSCarrierGroup(any()))
+                .thenReturn(qsCarrierGroupControllerBuilder)
+        whenever(qsCarrierGroupControllerBuilder.build()).thenReturn(qsCarrierGroupController)
+        whenever(view.setVisibility(anyInt())).then {
+            viewVisibility = it.arguments[0] as Int
+            null
+        }
+        whenever(view.visibility).thenAnswer { _ -> viewVisibility }
+        whenever(variableDateViewControllerFactory.create(any()))
+            .thenReturn(variableDateViewController)
+        whenever(featureFlags.isEnabled(Flags.COMBINED_QS_HEADERS)).thenReturn(false)
+        mLargeScreenShadeHeaderController = LargeScreenShadeHeaderController(
+                view,
+                statusBarIconController,
+                privacyIconsController,
+                insetsProvider,
+                configurationController,
+                variableDateViewControllerFactory,
+                batteryMeterViewController,
+                dumpManager,
+                featureFlags,
+                qsCarrierGroupControllerBuilder,
+                combinedShadeHeadersConstraintManager
+        )
+        whenever(view.isAttachedToWindow).thenReturn(true)
+        mLargeScreenShadeHeaderController.init()
+        carrierIconSlots = listOf(
+                context.getString(com.android.internal.R.string.status_bar_mobile))
+    }
+
+    @After
+    fun verifyEveryTest() {
+        verifyZeroInteractions(combinedShadeHeadersConstraintManager)
+    }
+
+    @Test
+    fun setVisible_onlyWhenActive() {
+        makeShadeVisible()
+        assertThat(viewVisibility).isEqualTo(View.VISIBLE)
+
+        mLargeScreenShadeHeaderController.largeScreenActive = false
+        assertThat(viewVisibility).isEqualTo(View.GONE)
+    }
+
+    @Test
+    fun updateListeners_registersWhenVisible() {
+        makeShadeVisible()
+        verify(qsCarrierGroupController).setListening(true)
+        verify(statusBarIconController).addIconGroup(any())
+    }
+
+    @Test
+    fun shadeExpandedFraction_updatesAlpha() {
+        makeShadeVisible()
+        mLargeScreenShadeHeaderController.shadeExpandedFraction = 0.5f
+        verify(view).setAlpha(ShadeInterpolation.getContentAlpha(0.5f))
+    }
+
+    @Test
+    fun singleCarrier_enablesCarrierIconsInStatusIcons() {
+        whenever(qsCarrierGroupController.isSingleCarrier).thenReturn(true)
+
+        makeShadeVisible()
+
+        verify(statusIcons).removeIgnoredSlots(carrierIconSlots)
+    }
+
+    @Test
+    fun dualCarrier_disablesCarrierIconsInStatusIcons() {
+        whenever(qsCarrierGroupController.isSingleCarrier).thenReturn(false)
+
+        makeShadeVisible()
+
+        verify(statusIcons).addIgnoredSlots(carrierIconSlots)
+    }
+
+    @Test
+    fun disableQS_notDisabled_visible() {
+        makeShadeVisible()
+        mLargeScreenShadeHeaderController.disable(0, 0, false)
+
+        assertThat(viewVisibility).isEqualTo(View.VISIBLE)
+    }
+
+    @Test
+    fun disableQS_disabled_gone() {
+        makeShadeVisible()
+        mLargeScreenShadeHeaderController.disable(0, StatusBarManager.DISABLE2_QUICK_SETTINGS,
+            false)
+
+        assertThat(viewVisibility).isEqualTo(View.GONE)
+    }
+
+    private fun makeShadeVisible() {
+        mLargeScreenShadeHeaderController.largeScreenActive = true
+        mLargeScreenShadeHeaderController.qsVisible = true
+    }
+
+    @Test
+    fun updateConfig_changesFontStyle() {
+        configurationController.notifyDensityOrFontScaleChanged()
+
+        verify(clock).setTextAppearance(R.style.TextAppearance_QS_Status)
+        verify(date).setTextAppearance(R.style.TextAppearance_QS_Status)
+        verify(carrierGroup).updateTextAppearance(R.style.TextAppearance_QS_Status_Carriers)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java
new file mode 100644
index 0000000..fc28349
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerTest.java
@@ -0,0 +1,1563 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.shade;
+
+import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
+
+import static com.android.keyguard.KeyguardClockSwitch.LARGE;
+import static com.android.keyguard.KeyguardClockSwitch.SMALL;
+import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
+import static com.android.systemui.statusbar.StatusBarState.SHADE;
+import static com.android.systemui.statusbar.StatusBarState.SHADE_LOCKED;
+
+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.anyFloat;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.atLeast;
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.clearInvocations;
+import static org.mockito.Mockito.doAnswer;
+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.when;
+
+import android.annotation.IdRes;
+import android.app.ActivityManager;
+import android.content.ContentResolver;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.database.ContentObserver;
+import android.graphics.PointF;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.PowerManager;
+import android.os.UserManager;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+import android.util.DisplayMetrics;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewParent;
+import android.view.ViewPropertyAnimator;
+import android.view.ViewStub;
+import android.view.ViewTreeObserver;
+import android.view.accessibility.AccessibilityManager;
+import android.view.accessibility.AccessibilityNodeInfo;
+
+import androidx.constraintlayout.widget.ConstraintSet;
+import androidx.test.filters.SmallTest;
+
+import com.android.internal.jank.InteractionJankMonitor;
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.UiEventLogger;
+import com.android.internal.logging.testing.UiEventLoggerFake;
+import com.android.internal.util.CollectionUtils;
+import com.android.internal.util.LatencyTracker;
+import com.android.keyguard.KeyguardClockSwitch;
+import com.android.keyguard.KeyguardClockSwitchController;
+import com.android.keyguard.KeyguardStatusView;
+import com.android.keyguard.KeyguardStatusViewController;
+import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.keyguard.LockIconViewController;
+import com.android.keyguard.dagger.KeyguardQsUserSwitchComponent;
+import com.android.keyguard.dagger.KeyguardStatusBarViewComponent;
+import com.android.keyguard.dagger.KeyguardStatusViewComponent;
+import com.android.keyguard.dagger.KeyguardUserSwitcherComponent;
+import com.android.systemui.DejankUtils;
+import com.android.systemui.R;
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.biometrics.AuthController;
+import com.android.systemui.camera.CameraGestureHelper;
+import com.android.systemui.classifier.FalsingCollectorFake;
+import com.android.systemui.classifier.FalsingManagerFake;
+import com.android.systemui.controls.dagger.ControlsComponent;
+import com.android.systemui.doze.DozeLog;
+import com.android.systemui.dump.DumpManager;
+import com.android.systemui.flags.FeatureFlags;
+import com.android.systemui.fragments.FragmentHostManager;
+import com.android.systemui.fragments.FragmentService;
+import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
+import com.android.systemui.keyguard.domain.usecase.SetClockPositionUseCase;
+import com.android.systemui.keyguard.domain.usecase.SetKeyguardBottomAreaAlphaUseCase;
+import com.android.systemui.keyguard.domain.usecase.SetKeyguardBottomAreaAnimateDozingTransitionsUseCase;
+import com.android.systemui.keyguard.ui.viewmodel.KeyguardBottomAreaViewModel;
+import com.android.systemui.media.KeyguardMediaController;
+import com.android.systemui.media.MediaDataManager;
+import com.android.systemui.media.MediaHierarchyManager;
+import com.android.systemui.model.SysUiState;
+import com.android.systemui.navigationbar.NavigationModeController;
+import com.android.systemui.plugins.FalsingManager;
+import com.android.systemui.plugins.qs.QS;
+import com.android.systemui.qrcodescanner.controller.QRCodeScannerController;
+import com.android.systemui.screenrecord.RecordingController;
+import com.android.systemui.shade.transition.ShadeTransitionController;
+import com.android.systemui.statusbar.CommandQueue;
+import com.android.systemui.statusbar.KeyguardIndicationController;
+import com.android.systemui.statusbar.LockscreenShadeTransitionController;
+import com.android.systemui.statusbar.NotificationRemoteInputManager;
+import com.android.systemui.statusbar.NotificationShadeDepthController;
+import com.android.systemui.statusbar.NotificationShadeWindowController;
+import com.android.systemui.statusbar.NotificationShelfController;
+import com.android.systemui.statusbar.PulseExpansionHandler;
+import com.android.systemui.statusbar.QsFrameTranslateController;
+import com.android.systemui.statusbar.StatusBarStateControllerImpl;
+import com.android.systemui.statusbar.SysuiStatusBarStateController;
+import com.android.systemui.statusbar.VibratorHelper;
+import com.android.systemui.statusbar.events.PrivacyDotViewController;
+import com.android.systemui.statusbar.notification.ConversationNotificationManager;
+import com.android.systemui.statusbar.notification.DynamicPrivacyController;
+import com.android.systemui.statusbar.notification.NotificationEntryManager;
+import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
+import com.android.systemui.statusbar.notification.row.ExpandableView;
+import com.android.systemui.statusbar.notification.row.ExpandableView.OnHeightChangedListener;
+import com.android.systemui.statusbar.notification.stack.AmbientState;
+import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
+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.NotificationStackSizeCalculator;
+import com.android.systemui.statusbar.phone.CentralSurfaces;
+import com.android.systemui.statusbar.phone.ConfigurationControllerImpl;
+import com.android.systemui.statusbar.phone.DozeParameters;
+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.KeyguardBottomAreaView;
+import com.android.systemui.statusbar.phone.KeyguardBottomAreaViewController;
+import com.android.systemui.statusbar.phone.KeyguardBypassController;
+import com.android.systemui.statusbar.phone.KeyguardStatusBarView;
+import com.android.systemui.statusbar.phone.KeyguardStatusBarViewController;
+import com.android.systemui.statusbar.phone.LockscreenGestureLogger;
+import com.android.systemui.statusbar.phone.NotificationIconAreaController;
+import com.android.systemui.statusbar.phone.ScreenOffAnimationController;
+import com.android.systemui.statusbar.phone.ScrimController;
+import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
+import com.android.systemui.statusbar.phone.StatusBarTouchableRegionManager;
+import com.android.systemui.statusbar.phone.TapAgainViewController;
+import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController;
+import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
+import com.android.systemui.statusbar.policy.ConfigurationController;
+import com.android.systemui.statusbar.policy.KeyguardQsUserSwitchController;
+import com.android.systemui.statusbar.policy.KeyguardStateController;
+import com.android.systemui.statusbar.policy.KeyguardUserSwitcherController;
+import com.android.systemui.statusbar.policy.KeyguardUserSwitcherView;
+import com.android.systemui.statusbar.window.StatusBarWindowStateController;
+import com.android.systemui.unfold.SysUIUnfoldComponent;
+import com.android.systemui.util.concurrency.FakeExecutor;
+import com.android.systemui.util.settings.SecureSettings;
+import com.android.systemui.util.time.FakeSystemClock;
+import com.android.systemui.util.time.SystemClock;
+import com.android.systemui.wallet.controller.QuickAccessWalletController;
+import com.android.wm.shell.animation.FlingAnimationUtils;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.stubbing.Answer;
+
+import java.util.List;
+import java.util.Optional;
+
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper
+public class NotificationPanelViewControllerTest extends SysuiTestCase {
+
+    private static final int NOTIFICATION_SCRIM_TOP_PADDING_IN_SPLIT_SHADE = 50;
+
+    @Mock
+    private CentralSurfaces mCentralSurfaces;
+    @Mock
+    private NotificationStackScrollLayout mNotificationStackScrollLayout;
+    @Mock
+    private KeyguardBottomAreaView mKeyguardBottomArea;
+    @Mock
+    private KeyguardBottomAreaViewController mKeyguardBottomAreaViewController;
+    @Mock
+    private KeyguardBottomAreaView mQsFrame;
+    private KeyguardStatusView mKeyguardStatusView;
+    @Mock
+    private NotificationIconAreaController mNotificationAreaController;
+    @Mock
+    private HeadsUpManagerPhone mHeadsUpManager;
+    @Mock
+    private NotificationShelfController mNotificationShelfController;
+    @Mock
+    private KeyguardStatusBarView mKeyguardStatusBar;
+    @Mock
+    private KeyguardUserSwitcherView mUserSwitcherView;
+    @Mock
+    private ViewStub mUserSwitcherStubView;
+    @Mock
+    private HeadsUpTouchHelper.Callback mHeadsUpCallback;
+    @Mock
+    private KeyguardUpdateMonitor mUpdateMonitor;
+    @Mock
+    private KeyguardBypassController mKeyguardBypassController;
+    @Mock
+    private DozeParameters mDozeParameters;
+    @Mock
+    private ScreenOffAnimationController mScreenOffAnimationController;
+    @Mock
+    private NotificationPanelView mView;
+    @Mock
+    private LayoutInflater mLayoutInflater;
+    @Mock
+    private FeatureFlags mFeatureFlags;
+    @Mock
+    private DynamicPrivacyController mDynamicPrivacyController;
+    @Mock
+    private NotificationEntryManager mNotificationEntryManager;
+    @Mock
+    private StatusBarTouchableRegionManager mStatusBarTouchableRegionManager;
+    @Mock
+    private KeyguardStateController mKeyguardStateController;
+    @Mock
+    private DozeLog mDozeLog;
+    @Mock
+    private CommandQueue mCommandQueue;
+    @Mock
+    private VibratorHelper mVibratorHelper;
+    @Mock
+    private LatencyTracker mLatencyTracker;
+    @Mock
+    private PowerManager mPowerManager;
+    @Mock
+    private AccessibilityManager mAccessibilityManager;
+    @Mock
+    private MetricsLogger mMetricsLogger;
+    @Mock
+    private ActivityManager mActivityManager;
+    @Mock
+    private Resources mResources;
+    @Mock
+    private Configuration mConfiguration;
+    private DisplayMetrics mDisplayMetrics = new DisplayMetrics();
+    @Mock
+    private KeyguardClockSwitch mKeyguardClockSwitch;
+    private PanelViewController.TouchHandler mTouchHandler;
+    private ConfigurationController mConfigurationController;
+    @Mock
+    private MediaHierarchyManager mMediaHiearchyManager;
+    @Mock
+    private ConversationNotificationManager mConversationNotificationManager;
+    @Mock
+    private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
+    @Mock
+    private KeyguardStatusViewComponent.Factory mKeyguardStatusViewComponentFactory;
+    @Mock
+    private KeyguardQsUserSwitchComponent.Factory mKeyguardQsUserSwitchComponentFactory;
+    @Mock
+    private KeyguardQsUserSwitchComponent mKeyguardQsUserSwitchComponent;
+    @Mock
+    private KeyguardQsUserSwitchController mKeyguardQsUserSwitchController;
+    @Mock
+    private KeyguardUserSwitcherComponent.Factory mKeyguardUserSwitcherComponentFactory;
+    @Mock
+    private KeyguardUserSwitcherComponent mKeyguardUserSwitcherComponent;
+    @Mock
+    private KeyguardUserSwitcherController mKeyguardUserSwitcherController;
+    @Mock
+    private KeyguardStatusViewComponent mKeyguardStatusViewComponent;
+    @Mock
+    private KeyguardStatusBarViewComponent.Factory mKeyguardStatusBarViewComponentFactory;
+    @Mock
+    private KeyguardStatusBarViewComponent mKeyguardStatusBarViewComponent;
+    @Mock
+    private KeyguardClockSwitchController mKeyguardClockSwitchController;
+    @Mock
+    private KeyguardStatusViewController mKeyguardStatusViewController;
+    @Mock
+    private KeyguardStatusBarViewController mKeyguardStatusBarViewController;
+    @Mock
+    private NotificationStackScrollLayoutController mNotificationStackScrollLayoutController;
+    @Mock
+    private NotificationShadeDepthController mNotificationShadeDepthController;
+    @Mock
+    private LockscreenShadeTransitionController mLockscreenShadeTransitionController;
+    @Mock
+    private AuthController mAuthController;
+    @Mock
+    private ScrimController mScrimController;
+    @Mock
+    private MediaDataManager mMediaDataManager;
+    @Mock
+    private AmbientState mAmbientState;
+    @Mock
+    private UserManager mUserManager;
+    @Mock
+    private UiEventLogger mUiEventLogger;
+    @Mock
+    private LockIconViewController mLockIconViewController;
+    @Mock
+    private KeyguardMediaController mKeyguardMediaController;
+    @Mock
+    private PrivacyDotViewController mPrivacyDotViewController;
+    @Mock
+    private NavigationModeController mNavigationModeController;
+    @Mock
+    private SecureSettings mSecureSettings;
+    @Mock
+    private LargeScreenShadeHeaderController mLargeScreenShadeHeaderController;
+    @Mock
+    private ContentResolver mContentResolver;
+    @Mock
+    private TapAgainViewController mTapAgainViewController;
+    @Mock
+    private KeyguardIndicationController mKeyguardIndicationController;
+    @Mock
+    private FragmentService mFragmentService;
+    @Mock
+    private FragmentHostManager mFragmentHostManager;
+    @Mock
+    private QuickAccessWalletController mQuickAccessWalletController;
+    @Mock
+    private QRCodeScannerController mQrCodeScannerController;
+    @Mock
+    private NotificationRemoteInputManager mNotificationRemoteInputManager;
+    @Mock
+    private RecordingController mRecordingController;
+    @Mock
+    private ControlsComponent mControlsComponent;
+    @Mock
+    private LockscreenGestureLogger mLockscreenGestureLogger;
+    @Mock
+    private DumpManager mDumpManager;
+    @Mock
+    private InteractionJankMonitor mInteractionJankMonitor;
+    @Mock
+    private NotificationsQSContainerController mNotificationsQSContainerController;
+    @Mock
+    private QsFrameTranslateController mQsFrameTranslateController;
+    @Mock
+    private StatusBarWindowStateController mStatusBarWindowStateController;
+    @Mock
+    private KeyguardUnlockAnimationController mKeyguardUnlockAnimationController;
+    @Mock
+    private NotificationShadeWindowController mNotificationShadeWindowController;
+    @Mock
+    private SysUiState mSysUiState;
+    @Mock
+    private NotificationListContainer mNotificationListContainer;
+    @Mock
+    private NotificationStackSizeCalculator mNotificationStackSizeCalculator;
+    @Mock
+    private UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController;
+    @Mock
+    private ShadeTransitionController mShadeTransitionController;
+    @Mock
+    private QS mQs;
+    @Mock
+    private View mQsHeader;
+    @Mock
+    private ViewParent mViewParent;
+    @Mock
+    private ViewTreeObserver mViewTreeObserver;
+    @Mock private KeyguardBottomAreaViewModel mKeyguardBottomAreaViewModel;
+    @Mock private SetClockPositionUseCase mSetClockPositionUseCase;
+    @Mock private SetKeyguardBottomAreaAlphaUseCase mSetKeyguardBottomAreaAlphaUseCase;
+    @Mock private SetKeyguardBottomAreaAnimateDozingTransitionsUseCase
+            mSetKeyguardBottomAreaAnimateDozingTransitionsUseCase;
+    private NotificationPanelViewController.PanelEventsEmitter mPanelEventsEmitter;
+    private Optional<SysUIUnfoldComponent> mSysUIUnfoldComponent = Optional.empty();
+    private SysuiStatusBarStateController mStatusBarStateController;
+    private NotificationPanelViewController mNotificationPanelViewController;
+    private View.AccessibilityDelegate mAccessibiltyDelegate;
+    private NotificationsQuickSettingsContainer mNotificationContainerParent;
+    private List<View.OnAttachStateChangeListener> mOnAttachStateChangeListeners;
+    private FalsingManagerFake mFalsingManager = new FalsingManagerFake();
+    private FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock());
+    private Handler mMainHandler;
+    private final PanelExpansionStateManager mPanelExpansionStateManager =
+            new PanelExpansionStateManager();
+    private SystemClock mSystemClock;
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+        mSystemClock = new FakeSystemClock();
+        mStatusBarStateController = new StatusBarStateControllerImpl(mUiEventLogger, mDumpManager,
+                mInteractionJankMonitor);
+
+        mKeyguardStatusView = new KeyguardStatusView(mContext);
+        mKeyguardStatusView.setId(R.id.keyguard_status_view);
+        DejankUtils.setImmediate(true);
+
+        when(mAuthController.isUdfpsEnrolled(anyInt())).thenReturn(false);
+        when(mHeadsUpCallback.getContext()).thenReturn(mContext);
+        when(mView.getResources()).thenReturn(mResources);
+        when(mResources.getConfiguration()).thenReturn(mConfiguration);
+        mConfiguration.orientation = ORIENTATION_PORTRAIT;
+        when(mResources.getDisplayMetrics()).thenReturn(mDisplayMetrics);
+        mDisplayMetrics.density = 100;
+        when(mResources.getBoolean(R.bool.config_enableNotificationShadeDrag)).thenReturn(true);
+        when(mResources.getDimensionPixelSize(R.dimen.notifications_top_padding_split_shade))
+                .thenReturn(NOTIFICATION_SCRIM_TOP_PADDING_IN_SPLIT_SHADE);
+        when(mResources.getDimensionPixelSize(R.dimen.notification_panel_margin_horizontal))
+                .thenReturn(10);
+        when(mView.getContext()).thenReturn(getContext());
+        when(mView.findViewById(R.id.keyguard_header)).thenReturn(mKeyguardStatusBar);
+        when(mView.findViewById(R.id.keyguard_user_switcher_view)).thenReturn(mUserSwitcherView);
+        when(mView.findViewById(R.id.keyguard_user_switcher_stub)).thenReturn(
+                mUserSwitcherStubView);
+        when(mView.findViewById(R.id.keyguard_clock_container)).thenReturn(mKeyguardClockSwitch);
+        when(mView.findViewById(R.id.notification_stack_scroller))
+                .thenReturn(mNotificationStackScrollLayout);
+        when(mNotificationStackScrollLayoutController.getHeight()).thenReturn(1000);
+        when(mNotificationStackScrollLayoutController.getHeadsUpCallback())
+                .thenReturn(mHeadsUpCallback);
+        when(mKeyguardBottomAreaViewController.getView()).thenReturn(mKeyguardBottomArea);
+        when(mView.findViewById(R.id.keyguard_bottom_area)).thenReturn(mKeyguardBottomArea);
+        when(mKeyguardBottomArea.animate()).thenReturn(mock(ViewPropertyAnimator.class));
+        when(mView.findViewById(R.id.qs_frame)).thenReturn(mQsFrame);
+        when(mView.findViewById(R.id.keyguard_status_view))
+                .thenReturn(mock(KeyguardStatusView.class));
+        mNotificationContainerParent = new NotificationsQuickSettingsContainer(getContext(), null);
+        mNotificationContainerParent.addView(mKeyguardStatusView);
+        mNotificationContainerParent.onFinishInflate();
+        when(mView.findViewById(R.id.notification_container_parent))
+                .thenReturn(mNotificationContainerParent);
+        when(mFragmentService.getFragmentHostManager(mView)).thenReturn(mFragmentHostManager);
+        FlingAnimationUtils.Builder flingAnimationUtilsBuilder = new FlingAnimationUtils.Builder(
+                mDisplayMetrics);
+        when(mKeyguardQsUserSwitchComponentFactory.build(any()))
+                .thenReturn(mKeyguardQsUserSwitchComponent);
+        when(mKeyguardQsUserSwitchComponent.getKeyguardQsUserSwitchController())
+                .thenReturn(mKeyguardQsUserSwitchController);
+        when(mKeyguardUserSwitcherComponentFactory.build(any()))
+                .thenReturn(mKeyguardUserSwitcherComponent);
+        when(mKeyguardUserSwitcherComponent.getKeyguardUserSwitcherController())
+                .thenReturn(mKeyguardUserSwitcherController);
+        when(mScreenOffAnimationController.shouldAnimateClockChange()).thenReturn(true);
+
+        doAnswer((Answer<Void>) invocation -> {
+            mTouchHandler = invocation.getArgument(0);
+            return null;
+        }).when(mView).setOnTouchListener(any(PanelViewController.TouchHandler.class));
+
+        NotificationWakeUpCoordinator coordinator =
+                new NotificationWakeUpCoordinator(
+                        mDumpManager,
+                        mock(HeadsUpManagerPhone.class),
+                        new StatusBarStateControllerImpl(new UiEventLoggerFake(), mDumpManager,
+                                mInteractionJankMonitor),
+                        mKeyguardBypassController,
+                        mDozeParameters,
+                        mScreenOffAnimationController);
+        mConfigurationController = new ConfigurationControllerImpl(mContext);
+        PulseExpansionHandler expansionHandler = new PulseExpansionHandler(
+                mContext,
+                coordinator,
+                mKeyguardBypassController, mHeadsUpManager,
+                mock(NotificationRoundnessManager.class),
+                mConfigurationController,
+                mStatusBarStateController,
+                mFalsingManager,
+                mLockscreenShadeTransitionController,
+                new FalsingCollectorFake(),
+                mDumpManager);
+        when(mKeyguardStatusViewComponentFactory.build(any()))
+                .thenReturn(mKeyguardStatusViewComponent);
+        when(mKeyguardStatusViewComponent.getKeyguardClockSwitchController())
+                .thenReturn(mKeyguardClockSwitchController);
+        when(mKeyguardStatusViewComponent.getKeyguardStatusViewController())
+                .thenReturn(mKeyguardStatusViewController);
+        when(mKeyguardStatusBarViewComponentFactory.build(any(), any()))
+                .thenReturn(mKeyguardStatusBarViewComponent);
+        when(mKeyguardStatusBarViewComponent.getKeyguardStatusBarViewController())
+                .thenReturn(mKeyguardStatusBarViewController);
+        when(mLayoutInflater.inflate(eq(R.layout.keyguard_status_view), any(), anyBoolean()))
+                .thenReturn(mKeyguardStatusView);
+        when(mLayoutInflater.inflate(eq(R.layout.keyguard_user_switcher), any(), anyBoolean()))
+                .thenReturn(mUserSwitcherView);
+        when(mLayoutInflater.inflate(eq(R.layout.keyguard_bottom_area), any(), anyBoolean()))
+                .thenReturn(mKeyguardBottomArea);
+        when(mNotificationRemoteInputManager.isRemoteInputActive())
+                .thenReturn(false);
+        when(mInteractionJankMonitor.begin(any(), anyInt()))
+                .thenReturn(true);
+        when(mInteractionJankMonitor.end(anyInt()))
+                .thenReturn(true);
+        doAnswer(invocation -> {
+            ((Runnable) invocation.getArgument(0)).run();
+            return null;
+        }).when(mNotificationShadeWindowController).batchApplyWindowLayoutParams(any());
+
+        when(mView.getViewTreeObserver()).thenReturn(mViewTreeObserver);
+        when(mView.getParent()).thenReturn(mViewParent);
+        when(mQs.getHeader()).thenReturn(mQsHeader);
+
+        mMainHandler = new Handler(Looper.getMainLooper());
+        mPanelEventsEmitter = new NotificationPanelViewController.PanelEventsEmitter();
+
+        mNotificationPanelViewController = new NotificationPanelViewController(
+                mView,
+                mMainHandler,
+                mLayoutInflater,
+                mFeatureFlags,
+                coordinator, expansionHandler, mDynamicPrivacyController, mKeyguardBypassController,
+                mFalsingManager, new FalsingCollectorFake(),
+                mNotificationEntryManager,
+                mKeyguardStateController,
+                mStatusBarStateController,
+                mStatusBarWindowStateController,
+                mNotificationShadeWindowController,
+                mDozeLog, mDozeParameters, mCommandQueue, mVibratorHelper,
+                mLatencyTracker, mPowerManager, mAccessibilityManager, 0, mUpdateMonitor,
+                mMetricsLogger, mConfigurationController,
+                () -> flingAnimationUtilsBuilder, mStatusBarTouchableRegionManager,
+                mConversationNotificationManager, mMediaHiearchyManager,
+                mStatusBarKeyguardViewManager,
+                mNotificationsQSContainerController,
+                mNotificationStackScrollLayoutController,
+                mKeyguardStatusViewComponentFactory,
+                mKeyguardQsUserSwitchComponentFactory,
+                mKeyguardUserSwitcherComponentFactory,
+                mKeyguardStatusBarViewComponentFactory,
+                mLockscreenShadeTransitionController,
+                mNotificationAreaController,
+                mAuthController,
+                mScrimController,
+                mUserManager,
+                mMediaDataManager,
+                mNotificationShadeDepthController,
+                mAmbientState,
+                mLockIconViewController,
+                mKeyguardMediaController,
+                mPrivacyDotViewController,
+                mTapAgainViewController,
+                mNavigationModeController,
+                mFragmentService,
+                mContentResolver,
+                mQuickAccessWalletController,
+                mQrCodeScannerController,
+                mRecordingController,
+                mLargeScreenShadeHeaderController,
+                mScreenOffAnimationController,
+                mLockscreenGestureLogger,
+                mPanelExpansionStateManager,
+                mNotificationRemoteInputManager,
+                mSysUIUnfoldComponent,
+                mControlsComponent,
+                mInteractionJankMonitor,
+                mQsFrameTranslateController,
+                mSysUiState,
+                () -> mKeyguardBottomAreaViewController,
+                mKeyguardUnlockAnimationController,
+                mNotificationListContainer,
+                mPanelEventsEmitter,
+                mNotificationStackSizeCalculator,
+                mUnlockedScreenOffAnimationController,
+                mShadeTransitionController,
+                mSystemClock,
+                mock(CameraGestureHelper.class),
+                () -> mKeyguardBottomAreaViewModel,
+                () -> mSetClockPositionUseCase,
+                () -> mSetKeyguardBottomAreaAlphaUseCase,
+                () -> mSetKeyguardBottomAreaAnimateDozingTransitionsUseCase);
+        mNotificationPanelViewController.initDependencies(
+                mCentralSurfaces,
+                () -> {},
+                mNotificationShelfController);
+        mNotificationPanelViewController.setHeadsUpManager(mHeadsUpManager);
+        mNotificationPanelViewController.setKeyguardIndicationController(
+                mKeyguardIndicationController);
+        ArgumentCaptor<View.OnAttachStateChangeListener> onAttachStateChangeListenerArgumentCaptor =
+                ArgumentCaptor.forClass(View.OnAttachStateChangeListener.class);
+        verify(mView, atLeast(1)).addOnAttachStateChangeListener(
+                onAttachStateChangeListenerArgumentCaptor.capture());
+        mOnAttachStateChangeListeners = onAttachStateChangeListenerArgumentCaptor.getAllValues();
+
+        ArgumentCaptor<View.AccessibilityDelegate> accessibilityDelegateArgumentCaptor =
+                ArgumentCaptor.forClass(View.AccessibilityDelegate.class);
+        verify(mView).setAccessibilityDelegate(accessibilityDelegateArgumentCaptor.capture());
+        mAccessibiltyDelegate = accessibilityDelegateArgumentCaptor.getValue();
+        mNotificationPanelViewController.getStatusBarStateController()
+                .addCallback(mNotificationPanelViewController.mStatusBarStateListener);
+        mNotificationPanelViewController
+                .setHeadsUpAppearanceController(mock(HeadsUpAppearanceController.class));
+    }
+
+    @After
+    public void tearDown() {
+        mNotificationPanelViewController.cancelHeightAnimator();
+        mMainHandler.removeCallbacksAndMessages(null);
+    }
+
+    @Test
+    public void onNotificationHeightChangeWhileOnKeyguardWillComputeMaxKeyguardNotifications() {
+        mStatusBarStateController.setState(KEYGUARD);
+        ArgumentCaptor<OnHeightChangedListener> captor =
+                ArgumentCaptor.forClass(OnHeightChangedListener.class);
+        verify(mNotificationStackScrollLayoutController)
+                .setOnHeightChangedListener(captor.capture());
+        OnHeightChangedListener listener = captor.getValue();
+
+        clearInvocations(mNotificationStackSizeCalculator);
+        listener.onHeightChanged(mock(ExpandableView.class), false);
+
+        verify(mNotificationStackSizeCalculator)
+                .computeMaxKeyguardNotifications(any(), anyFloat(), anyFloat(), anyFloat());
+    }
+
+    @Test
+    public void onNotificationHeightChangeWhileInShadeWillNotComputeMaxKeyguardNotifications() {
+        mStatusBarStateController.setState(SHADE);
+        ArgumentCaptor<OnHeightChangedListener> captor =
+                ArgumentCaptor.forClass(OnHeightChangedListener.class);
+        verify(mNotificationStackScrollLayoutController)
+                .setOnHeightChangedListener(captor.capture());
+        OnHeightChangedListener listener = captor.getValue();
+
+        clearInvocations(mNotificationStackSizeCalculator);
+        listener.onHeightChanged(mock(ExpandableView.class), false);
+
+        verify(mNotificationStackSizeCalculator, never())
+                .computeMaxKeyguardNotifications(any(), anyFloat(), anyFloat(), anyFloat());
+    }
+
+    @Test
+    public void computeMaxKeyguardNotifications_lockscreenToShade_returnsExistingMax() {
+        when(mAmbientState.getFractionToShade()).thenReturn(0.5f);
+        mNotificationPanelViewController.setMaxDisplayedNotifications(-1);
+
+        // computeMaxKeyguardNotifications sets maxAllowed to 0 at minimum if it updates the value
+        assertThat(mNotificationPanelViewController.computeMaxKeyguardNotifications())
+                .isEqualTo(-1);
+    }
+
+    @Test
+    public void computeMaxKeyguardNotifications_noTransition_updatesMax() {
+        when(mAmbientState.getFractionToShade()).thenReturn(0f);
+        mNotificationPanelViewController.setMaxDisplayedNotifications(-1);
+
+        // computeMaxKeyguardNotifications sets maxAllowed to 0 at minimum if it updates the value
+        assertThat(mNotificationPanelViewController.computeMaxKeyguardNotifications())
+                .isNotEqualTo(-1);
+    }
+
+    private void setBottomPadding(int stackBottom, int lockIconPadding, int indicationPadding,
+            int ambientPadding) {
+
+        when(mNotificationStackScrollLayoutController.getTop()).thenReturn(0);
+        when(mNotificationStackScrollLayoutController.getHeight()).thenReturn(stackBottom);
+        when(mNotificationStackScrollLayoutController.getBottom()).thenReturn(stackBottom);
+        when(mLockIconViewController.getTop()).thenReturn((float) (stackBottom - lockIconPadding));
+
+        when(mResources.getDimensionPixelSize(R.dimen.keyguard_indication_bottom_padding))
+                .thenReturn(indicationPadding);
+        mNotificationPanelViewController.loadDimens();
+
+        mNotificationPanelViewController.setAmbientIndicationTop(
+                /* ambientIndicationTop= */ stackBottom - ambientPadding,
+                /* ambientTextVisible= */ true);
+    }
+
+    @Test
+    public void getVerticalSpaceForLockscreenNotifications_useLockIconBottomPadding_returnsSpaceAvailable() {
+        setBottomPadding(/* stackScrollLayoutBottom= */ 100,
+                /* lockIconPadding= */ 20,
+                /* indicationPadding= */ 0,
+                /* ambientPadding= */ 0);
+
+        assertThat(mNotificationPanelViewController.getVerticalSpaceForLockscreenNotifications())
+                .isEqualTo(80);
+    }
+
+    @Test
+    public void getVerticalSpaceForLockscreenNotifications_useIndicationBottomPadding_returnsSpaceAvailable() {
+        setBottomPadding(/* stackScrollLayoutBottom= */ 100,
+                /* lockIconPadding= */ 0,
+                /* indicationPadding= */ 30,
+                /* ambientPadding= */ 0);
+
+        assertThat(mNotificationPanelViewController.getVerticalSpaceForLockscreenNotifications())
+                .isEqualTo(70);
+    }
+
+    @Test
+    public void getVerticalSpaceForLockscreenNotifications_useAmbientBottomPadding_returnsSpaceAvailable() {
+        setBottomPadding(/* stackScrollLayoutBottom= */ 100,
+                /* lockIconPadding= */ 0,
+                /* indicationPadding= */ 0,
+                /* ambientPadding= */ 40);
+
+        assertThat(mNotificationPanelViewController.getVerticalSpaceForLockscreenNotifications())
+                .isEqualTo(60);
+    }
+
+    @Test
+    public void getVerticalSpaceForLockscreenShelf_useLockIconBottomPadding_returnsShelfHeight() {
+        setBottomPadding(/* stackScrollLayoutBottom= */ 100,
+                /* lockIconPadding= */ 20,
+                /* indicationPadding= */ 0,
+                /* ambientPadding= */ 0);
+
+        when(mNotificationShelfController.getIntrinsicHeight()).thenReturn(5);
+        assertThat(mNotificationPanelViewController.getVerticalSpaceForLockscreenShelf())
+                .isEqualTo(5);
+    }
+
+    @Test
+    public void getVerticalSpaceForLockscreenShelf_useIndicationBottomPadding_returnsZero() {
+        setBottomPadding(/* stackScrollLayoutBottom= */ 100,
+                /* lockIconPadding= */ 0,
+                /* indicationPadding= */ 30,
+                /* ambientPadding= */ 0);
+
+        when(mNotificationShelfController.getIntrinsicHeight()).thenReturn(5);
+        assertThat(mNotificationPanelViewController.getVerticalSpaceForLockscreenShelf())
+                .isEqualTo(0);
+    }
+
+    @Test
+    public void getVerticalSpaceForLockscreenShelf_useAmbientBottomPadding_returnsZero() {
+        setBottomPadding(/* stackScrollLayoutBottom= */ 100,
+                /* lockIconPadding= */ 0,
+                /* indicationPadding= */ 0,
+                /* ambientPadding= */ 40);
+
+        when(mNotificationShelfController.getIntrinsicHeight()).thenReturn(5);
+        assertThat(mNotificationPanelViewController.getVerticalSpaceForLockscreenShelf())
+                .isEqualTo(0);
+    }
+
+    @Test
+    public void getVerticalSpaceForLockscreenShelf_useLockIconPadding_returnsLessThanShelfHeight() {
+        setBottomPadding(/* stackScrollLayoutBottom= */ 100,
+                /* lockIconPadding= */ 10,
+                /* indicationPadding= */ 8,
+                /* ambientPadding= */ 0);
+
+        when(mNotificationShelfController.getIntrinsicHeight()).thenReturn(5);
+        assertThat(mNotificationPanelViewController.getVerticalSpaceForLockscreenShelf())
+                .isEqualTo(2);
+    }
+
+    @Test
+    public void testSetPanelScrimMinFraction() {
+        mNotificationPanelViewController.setPanelScrimMinFraction(0.5f);
+        verify(mNotificationShadeDepthController).setPanelPullDownMinFraction(eq(0.5f));
+    }
+
+    @Test
+    public void testSetDozing_notifiesNsslAndStateController() {
+        mNotificationPanelViewController.setDozing(true /* dozing */, false /* animate */,
+                null /* touch */);
+        verify(mNotificationStackScrollLayoutController)
+                .setDozing(eq(true), eq(false), eq(null));
+        assertThat(mStatusBarStateController.getDozeAmount()).isEqualTo(1f);
+    }
+
+    @Test
+    public void testSetExpandedHeight() {
+        mNotificationPanelViewController.setExpandedHeight(200);
+        assertThat((int) mNotificationPanelViewController.getExpandedHeight()).isEqualTo(200);
+    }
+
+    @Test
+    public void testOnTouchEvent_expansionCanBeBlocked() {
+        onTouchEvent(MotionEvent.obtain(0L /* downTime */,
+                0L /* eventTime */, MotionEvent.ACTION_DOWN, 0f /* x */, 0f /* y */,
+                0 /* metaState */));
+        onTouchEvent(MotionEvent.obtain(0L /* downTime */,
+                0L /* eventTime */, MotionEvent.ACTION_MOVE, 0f /* x */, 200f /* y */,
+                0 /* metaState */));
+        assertThat((int) mNotificationPanelViewController.getExpandedHeight()).isEqualTo(200);
+        assertThat(mNotificationPanelViewController.isTrackingBlocked()).isFalse();
+
+        mNotificationPanelViewController.blockExpansionForCurrentTouch();
+        onTouchEvent(MotionEvent.obtain(0L /* downTime */,
+                0L /* eventTime */, MotionEvent.ACTION_MOVE, 0f /* x */, 300f /* y */,
+                0 /* metaState */));
+        // Expansion should not have changed because it was blocked
+        assertThat((int) mNotificationPanelViewController.getExpandedHeight()).isEqualTo(200);
+        assertThat(mNotificationPanelViewController.isTrackingBlocked()).isTrue();
+
+        onTouchEvent(MotionEvent.obtain(0L /* downTime */,
+                0L /* eventTime */, MotionEvent.ACTION_UP, 0f /* x */, 300f /* y */,
+                0 /* metaState */));
+        assertThat(mNotificationPanelViewController.isTrackingBlocked()).isFalse();
+    }
+
+    @Test
+    public void handleTouchEventFromStatusBar_panelsNotEnabled_returnsFalseAndNoViewEvent() {
+        when(mCommandQueue.panelsEnabled()).thenReturn(false);
+
+        boolean returnVal = mNotificationPanelViewController
+                .getStatusBarTouchEventHandler()
+                .handleTouchEvent(
+                        MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, 0f, 0f, 0));
+
+        assertThat(returnVal).isFalse();
+        verify(mView, never()).dispatchTouchEvent(any());
+    }
+
+    @Test
+    public void handleTouchEventFromStatusBar_viewNotEnabled_returnsTrueAndNoViewEvent() {
+        when(mCommandQueue.panelsEnabled()).thenReturn(true);
+        when(mView.isEnabled()).thenReturn(false);
+
+        boolean returnVal = mNotificationPanelViewController
+                .getStatusBarTouchEventHandler()
+                .handleTouchEvent(
+                        MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, 0f, 0f, 0));
+
+        assertThat(returnVal).isTrue();
+        verify(mView, never()).dispatchTouchEvent(any());
+    }
+
+    @Test
+    public void handleTouchEventFromStatusBar_viewNotEnabledButIsMoveEvent_viewReceivesEvent() {
+        when(mCommandQueue.panelsEnabled()).thenReturn(true);
+        when(mView.isEnabled()).thenReturn(false);
+        MotionEvent event = MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_MOVE, 0f, 0f, 0);
+
+        mNotificationPanelViewController.getStatusBarTouchEventHandler().handleTouchEvent(event);
+
+        verify(mView).dispatchTouchEvent(event);
+    }
+
+    @Test
+    public void handleTouchEventFromStatusBar_panelAndViewEnabled_viewReceivesEvent() {
+        when(mCommandQueue.panelsEnabled()).thenReturn(true);
+        when(mView.isEnabled()).thenReturn(true);
+        MotionEvent event = MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, 0f, 0f, 0);
+
+        mNotificationPanelViewController.getStatusBarTouchEventHandler().handleTouchEvent(event);
+
+        verify(mView).dispatchTouchEvent(event);
+    }
+
+    @Test
+    public void testA11y_initializeNode() {
+        AccessibilityNodeInfo nodeInfo = new AccessibilityNodeInfo();
+        mAccessibiltyDelegate.onInitializeAccessibilityNodeInfo(mView, nodeInfo);
+
+        List<AccessibilityNodeInfo.AccessibilityAction> actionList = nodeInfo.getActionList();
+        assertThat(actionList).containsAtLeastElementsIn(
+                new AccessibilityNodeInfo.AccessibilityAction[] {
+                        AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD,
+                        AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_UP}
+        );
+    }
+
+    @Test
+    public void testA11y_scrollForward() {
+        mAccessibiltyDelegate.performAccessibilityAction(
+                mView,
+                AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD.getId(),
+                null);
+
+        verify(mStatusBarKeyguardViewManager).showBouncer(true);
+    }
+
+    @Test
+    public void testA11y_scrollUp() {
+        mAccessibiltyDelegate.performAccessibilityAction(
+                mView,
+                AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_UP.getId(),
+                null);
+
+        verify(mStatusBarKeyguardViewManager).showBouncer(true);
+    }
+
+    @Test
+    public void testKeyguardStatusViewInSplitShade_changesConstraintsDependingOnNotifications() {
+        mStatusBarStateController.setState(KEYGUARD);
+        enableSplitShade(/* enabled= */ true);
+
+        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(2);
+        mNotificationPanelViewController.updateResources();
+        assertThat(getConstraintSetLayout(R.id.keyguard_status_view).endToEnd)
+                .isEqualTo(R.id.qs_edge_guideline);
+
+        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(0);
+        mNotificationPanelViewController.updateResources();
+        assertThat(getConstraintSetLayout(R.id.keyguard_status_view).endToEnd)
+                .isEqualTo(ConstraintSet.PARENT_ID);
+    }
+
+    @Test
+    public void keyguardStatusView_splitShade_dozing_alwaysDozingOn_isCentered() {
+        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(2);
+        mStatusBarStateController.setState(KEYGUARD);
+        enableSplitShade(/* enabled= */ true);
+
+        setDozing(/* dozing= */ true, /* dozingAlwaysOn= */ true);
+
+        assertThat(isKeyguardStatusViewCentered()).isTrue();
+    }
+
+    @Test
+    public void keyguardStatusView_splitShade_dozing_alwaysDozingOff_isNotCentered() {
+        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(2);
+        mStatusBarStateController.setState(KEYGUARD);
+        enableSplitShade(/* enabled= */ true);
+
+        setDozing(/* dozing= */ true, /* dozingAlwaysOn= */ false);
+
+        assertThat(isKeyguardStatusViewCentered()).isFalse();
+    }
+
+    @Test
+    public void keyguardStatusView_splitShade_notDozing_alwaysDozingOn_isNotCentered() {
+        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(2);
+        mStatusBarStateController.setState(KEYGUARD);
+        enableSplitShade(/* enabled= */ true);
+
+        setDozing(/* dozing= */ false, /* dozingAlwaysOn= */ true);
+
+        assertThat(isKeyguardStatusViewCentered()).isFalse();
+    }
+
+    @Test
+    public void keyguardStatusView_splitShade_pulsing_isCentered() {
+        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(2);
+        when(mNotificationListContainer.hasPulsingNotifications()).thenReturn(true);
+        mStatusBarStateController.setState(KEYGUARD);
+        enableSplitShade(/* enabled= */ true);
+
+        setDozing(/* dozing= */ false, /* dozingAlwaysOn= */ true);
+
+        assertThat(isKeyguardStatusViewCentered()).isFalse();
+    }
+
+    @Test
+    public void keyguardStatusView_splitShade_notPulsing_isNotCentered() {
+        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(2);
+        when(mNotificationListContainer.hasPulsingNotifications()).thenReturn(false);
+        mStatusBarStateController.setState(KEYGUARD);
+        enableSplitShade(/* enabled= */ true);
+
+        setDozing(/* dozing= */ false, /* dozingAlwaysOn= */ true);
+
+        assertThat(isKeyguardStatusViewCentered()).isFalse();
+    }
+
+    @Test
+    public void keyguardStatusView_singleShade_isCentered() {
+        enableSplitShade(/* enabled= */ false);
+        // The conditions below would make the clock NOT be centered on split shade.
+        // On single shade it should always be centered though.
+        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(2);
+        when(mNotificationListContainer.hasPulsingNotifications()).thenReturn(false);
+        mStatusBarStateController.setState(KEYGUARD);
+        setDozing(/* dozing= */ false, /* dozingAlwaysOn= */ false);
+
+        assertThat(isKeyguardStatusViewCentered()).isFalse();
+    }
+
+    @Test
+    public void testDisableUserSwitcherAfterEnabling_returnsViewStubToTheViewHierarchy() {
+        givenViewAttached();
+        when(mResources.getBoolean(
+                com.android.internal.R.bool.config_keyguardUserSwitcher)).thenReturn(true);
+        updateMultiUserSetting(true);
+        clearInvocations(mView);
+
+        updateMultiUserSetting(false);
+
+        ArgumentCaptor<View> captor = ArgumentCaptor.forClass(View.class);
+        verify(mView, atLeastOnce()).addView(captor.capture(), anyInt());
+        final View userSwitcherStub = CollectionUtils.find(captor.getAllValues(),
+                view -> view.getId() == R.id.keyguard_user_switcher_stub);
+        assertThat(userSwitcherStub).isNotNull();
+        assertThat(userSwitcherStub).isInstanceOf(ViewStub.class);
+    }
+
+    @Test
+    public void testChangeSmallestScreenWidthAndUserSwitchEnabled_inflatesUserSwitchView() {
+        givenViewAttached();
+        when(mView.findViewById(R.id.keyguard_user_switcher_view)).thenReturn(null);
+        updateSmallestScreenWidth(300);
+        when(mResources.getBoolean(
+                com.android.internal.R.bool.config_keyguardUserSwitcher)).thenReturn(true);
+        when(mResources.getBoolean(R.bool.qs_show_user_switcher_for_single_user)).thenReturn(false);
+        when(mUserManager.isUserSwitcherEnabled(false)).thenReturn(true);
+
+        updateSmallestScreenWidth(800);
+
+        verify(mUserSwitcherStubView).inflate();
+    }
+
+    @Test
+    public void testFinishInflate_userSwitcherDisabled_doNotInflateUserSwitchView() {
+        givenViewAttached();
+        when(mResources.getBoolean(
+                com.android.internal.R.bool.config_keyguardUserSwitcher)).thenReturn(true);
+        when(mResources.getBoolean(R.bool.qs_show_user_switcher_for_single_user)).thenReturn(false);
+        when(mUserManager.isUserSwitcherEnabled(false /* showEvenIfNotActionable */))
+                .thenReturn(false);
+
+        mNotificationPanelViewController.onFinishInflate();
+
+        verify(mUserSwitcherStubView, never()).inflate();
+    }
+
+    @Test
+    public void testReInflateViews_userSwitcherDisabled_doNotInflateUserSwitchView() {
+        givenViewAttached();
+        when(mResources.getBoolean(
+                com.android.internal.R.bool.config_keyguardUserSwitcher)).thenReturn(true);
+        when(mResources.getBoolean(R.bool.qs_show_user_switcher_for_single_user)).thenReturn(false);
+        when(mUserManager.isUserSwitcherEnabled(false /* showEvenIfNotActionable */))
+                .thenReturn(false);
+
+        mNotificationPanelViewController.reInflateViews();
+
+        verify(mUserSwitcherStubView, never()).inflate();
+    }
+
+    @Test
+    public void testCanCollapsePanelOnTouch_trueForKeyGuard() {
+        mStatusBarStateController.setState(KEYGUARD);
+
+        assertThat(mNotificationPanelViewController.canCollapsePanelOnTouch()).isTrue();
+    }
+
+    @Test
+    public void testCanCollapsePanelOnTouch_trueWhenScrolledToBottom() {
+        mStatusBarStateController.setState(SHADE);
+        when(mNotificationStackScrollLayoutController.isScrolledToBottom()).thenReturn(true);
+
+        assertThat(mNotificationPanelViewController.canCollapsePanelOnTouch()).isTrue();
+    }
+
+    @Test
+    public void testCanCollapsePanelOnTouch_trueWhenInSettings() {
+        mStatusBarStateController.setState(SHADE);
+        mNotificationPanelViewController.setQsExpanded(true);
+
+        assertThat(mNotificationPanelViewController.canCollapsePanelOnTouch()).isTrue();
+    }
+
+    @Test
+    public void testCanCollapsePanelOnTouch_falseInDualPaneShade() {
+        mStatusBarStateController.setState(SHADE);
+        enableSplitShade(/* enabled= */ true);
+        mNotificationPanelViewController.setQsExpanded(true);
+
+        assertThat(mNotificationPanelViewController.canCollapsePanelOnTouch()).isFalse();
+    }
+
+    @Test
+    public void testSwipeWhileLocked_notifiesKeyguardState() {
+        mStatusBarStateController.setState(KEYGUARD);
+
+        // Fling expanded (cancelling the keyguard exit swipe). We should notify keyguard state that
+        // the fling occurred and did not dismiss the keyguard.
+        mNotificationPanelViewController.flingToHeight(
+                0f, true /* expand */, 1000f, 1f, false);
+        verify(mKeyguardStateController).notifyPanelFlingStart(false /* dismissKeyguard */);
+
+        // Fling un-expanded, which is a keyguard exit fling when we're in KEYGUARD state.
+        mNotificationPanelViewController.flingToHeight(
+                0f, false /* expand */, 1000f, 1f, false);
+        verify(mKeyguardStateController).notifyPanelFlingStart(true /* dismissKeyguard */);
+    }
+
+    @Test
+    public void testCancelSwipeWhileLocked_notifiesKeyguardState() {
+        mStatusBarStateController.setState(KEYGUARD);
+
+        // Fling expanded (cancelling the keyguard exit swipe). We should notify keyguard state that
+        // the fling occurred and did not dismiss the keyguard.
+        mNotificationPanelViewController.flingToHeight(
+                0f, true /* expand */, 1000f, 1f, false);
+        mNotificationPanelViewController.cancelHeightAnimator();
+        verify(mKeyguardStateController).notifyPanelFlingEnd();
+    }
+
+    @Test
+    public void testSwipe_exactlyToTarget_notifiesNssl() {
+        // No over-expansion
+        mNotificationPanelViewController.setOverExpansion(0f);
+        // Fling to a target that is equal to the current position (i.e. a no-op fling).
+        mNotificationPanelViewController.flingToHeight(
+                0f,
+                true,
+                mNotificationPanelViewController.getExpandedHeight(),
+                1f,
+                false);
+        // Verify that the NSSL is notified that the panel is *not* flinging.
+        verify(mNotificationStackScrollLayoutController).setPanelFlinging(false);
+    }
+
+    @Test
+    public void testDoubleTapRequired_Keyguard() {
+        FalsingManager.FalsingTapListener listener = getFalsingTapListener();
+        mStatusBarStateController.setState(KEYGUARD);
+
+        listener.onDoubleTapRequired();
+
+        verify(mKeyguardIndicationController).showTransientIndication(anyInt());
+    }
+
+    @Test
+    public void testDoubleTapRequired_ShadeLocked() {
+        FalsingManager.FalsingTapListener listener = getFalsingTapListener();
+        mStatusBarStateController.setState(SHADE_LOCKED);
+
+        listener.onDoubleTapRequired();
+
+        verify(mTapAgainViewController).show();
+    }
+
+    @Test
+    public void testRotatingToSplitShadeWithQsExpanded_transitionsToShadeLocked() {
+        mStatusBarStateController.setState(KEYGUARD);
+        mNotificationPanelViewController.setQsExpanded(true);
+
+        enableSplitShade(true);
+
+        assertThat(mStatusBarStateController.getState()).isEqualTo(SHADE_LOCKED);
+    }
+
+    @Test
+    public void testSwitchesToCorrectClockInSinglePaneShade() {
+        mStatusBarStateController.setState(KEYGUARD);
+
+        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(0);
+        triggerPositionClockAndNotifications();
+        verify(mKeyguardStatusViewController).displayClock(LARGE, /* animate */ true);
+
+        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(1);
+        mNotificationPanelViewController.closeQs();
+        verify(mKeyguardStatusViewController).displayClock(SMALL, /* animate */ true);
+    }
+
+    @Test
+    public void testSwitchesToCorrectClockInSplitShade() {
+        mStatusBarStateController.setState(KEYGUARD);
+        enableSplitShade(/* enabled= */ true);
+        clearInvocations(mKeyguardStatusViewController);
+
+        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(0);
+        triggerPositionClockAndNotifications();
+        verify(mKeyguardStatusViewController).displayClock(LARGE, /* animate */ true);
+
+        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(1);
+        triggerPositionClockAndNotifications();
+        verify(mKeyguardStatusViewController, times(2))
+                .displayClock(LARGE, /* animate */ true);
+        verify(mKeyguardStatusViewController, never())
+                .displayClock(SMALL, /* animate */ true);
+    }
+
+    @Test
+    public void testHasNotifications_switchesToLargeClockWhenEnteringSplitShade() {
+        mStatusBarStateController.setState(KEYGUARD);
+        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(1);
+
+        enableSplitShade(/* enabled= */ true);
+
+        verify(mKeyguardStatusViewController).displayClock(LARGE, /* animate */ true);
+    }
+
+    @Test
+    public void testNoNotifications_switchesToLargeClockWhenEnteringSplitShade() {
+        mStatusBarStateController.setState(KEYGUARD);
+        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(0);
+
+        enableSplitShade(/* enabled= */ true);
+
+        verify(mKeyguardStatusViewController).displayClock(LARGE, /* animate */ true);
+    }
+
+    @Test
+    public void testHasNotifications_switchesToSmallClockWhenExitingSplitShade() {
+        mStatusBarStateController.setState(KEYGUARD);
+        enableSplitShade(/* enabled= */ true);
+        clearInvocations(mKeyguardStatusViewController);
+        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(1);
+
+        enableSplitShade(/* enabled= */ false);
+
+        verify(mKeyguardStatusViewController).displayClock(SMALL, /* animate */ true);
+    }
+
+    @Test
+    public void testNoNotifications_switchesToLargeClockWhenExitingSplitShade() {
+        mStatusBarStateController.setState(KEYGUARD);
+        enableSplitShade(/* enabled= */ true);
+        clearInvocations(mKeyguardStatusViewController);
+        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(0);
+
+        enableSplitShade(/* enabled= */ false);
+
+        verify(mKeyguardStatusViewController).displayClock(LARGE, /* animate */ true);
+    }
+
+    @Test
+    public void testSwitchesToBigClockInSplitShadeOnAod() {
+        mStatusBarStateController.setState(KEYGUARD);
+        enableSplitShade(/* enabled= */ true);
+        when(mMediaDataManager.hasActiveMediaOrRecommendation()).thenReturn(true);
+        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(2);
+        clearInvocations(mKeyguardStatusViewController);
+
+        mNotificationPanelViewController.setDozing(true, false, null);
+
+        verify(mKeyguardStatusViewController).displayClock(LARGE, /* animate */ true);
+    }
+
+    @Test
+    public void testSwitchesToBigClockInSplitShadeOnAodAnimateDisabled() {
+        when(mScreenOffAnimationController.shouldAnimateClockChange()).thenReturn(false);
+        mStatusBarStateController.setState(KEYGUARD);
+        enableSplitShade(/* enabled= */ true);
+        clearInvocations(mKeyguardStatusViewController);
+        when(mMediaDataManager.hasActiveMedia()).thenReturn(true);
+        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(2);
+
+        mNotificationPanelViewController.setDozing(true, false, null);
+
+        verify(mKeyguardStatusViewController).displayClock(LARGE, /* animate */ false);
+    }
+
+    @Test
+    public void testDisplaysSmallClockOnLockscreenInSplitShadeWhenMediaIsPlaying() {
+        mStatusBarStateController.setState(KEYGUARD);
+        enableSplitShade(/* enabled= */ true);
+        clearInvocations(mKeyguardStatusViewController);
+        when(mMediaDataManager.hasActiveMediaOrRecommendation()).thenReturn(true);
+
+        // one notification + media player visible
+        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(1);
+        triggerPositionClockAndNotifications();
+        verify(mKeyguardStatusViewController).displayClock(SMALL, /* animate */ true);
+
+        // only media player visible
+        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(0);
+        triggerPositionClockAndNotifications();
+        verify(mKeyguardStatusViewController, times(2)).displayClock(SMALL, true);
+        verify(mKeyguardStatusViewController, never()).displayClock(LARGE, /* animate */ true);
+    }
+
+    @Test
+    public void testLargeScreenHeaderMadeActiveForLargeScreen() {
+        mStatusBarStateController.setState(SHADE);
+        when(mResources.getBoolean(R.bool.config_use_large_screen_shade_header)).thenReturn(true);
+        mNotificationPanelViewController.updateResources();
+        verify(mLargeScreenShadeHeaderController).setLargeScreenActive(true);
+
+        when(mResources.getBoolean(R.bool.config_use_large_screen_shade_header)).thenReturn(false);
+        mNotificationPanelViewController.updateResources();
+        verify(mLargeScreenShadeHeaderController).setLargeScreenActive(false);
+    }
+
+    @Test
+    public void testExpandWithQsMethodIsUsingLockscreenTransitionController() {
+        enableSplitShade(/* enabled= */ true);
+        mStatusBarStateController.setState(KEYGUARD);
+
+        mNotificationPanelViewController.expandWithQs();
+
+        verify(mLockscreenShadeTransitionController).goToLockedShade(
+                /* expandedView= */null, /* needsQSAnimation= */false);
+    }
+
+    @Test
+    public void testUnlockAnimationDoesNotAffectScrim() {
+        mNotificationPanelViewController.onUnlockHintStarted();
+        verify(mScrimController).setExpansionAffectsAlpha(false);
+        mNotificationPanelViewController.onUnlockHintFinished();
+        verify(mScrimController).setExpansionAffectsAlpha(true);
+    }
+
+    @Test
+    public void testUnlockHintAnimation_runs_whenNotInPowerSaveMode_andDozeAmountIsZero() {
+        when(mPowerManager.isPowerSaveMode()).thenReturn(false);
+        when(mAmbientState.getDozeAmount()).thenReturn(0f);
+        mNotificationPanelViewController.startUnlockHintAnimation();
+        assertThat(mNotificationPanelViewController.isHintAnimationRunning()).isTrue();
+    }
+
+    @Test
+    public void testUnlockHintAnimation_doesNotRun_inPowerSaveMode() {
+        when(mPowerManager.isPowerSaveMode()).thenReturn(true);
+        mNotificationPanelViewController.startUnlockHintAnimation();
+        assertThat(mNotificationPanelViewController.isHintAnimationRunning()).isFalse();
+    }
+
+    @Test
+    public void testUnlockHintAnimation_doesNotRun_whenDozeAmountNotZero() {
+        when(mPowerManager.isPowerSaveMode()).thenReturn(false);
+        when(mAmbientState.getDozeAmount()).thenReturn(0.5f);
+        mNotificationPanelViewController.startUnlockHintAnimation();
+        assertThat(mNotificationPanelViewController.isHintAnimationRunning()).isFalse();
+    }
+
+    @Test
+    public void setKeyguardStatusBarAlpha_setsAlphaOnKeyguardStatusBarController() {
+        float statusBarAlpha = 0.5f;
+
+        mNotificationPanelViewController.setKeyguardStatusBarAlpha(statusBarAlpha);
+
+        verify(mKeyguardStatusBarViewController).setAlpha(statusBarAlpha);
+    }
+
+    @Test
+    public void testQsToBeImmediatelyExpandedWhenOpeningPanelInSplitShade() {
+        enableSplitShade(/* enabled= */ true);
+        // set panel state to CLOSED
+        mPanelExpansionStateManager.onPanelExpansionChanged(/* fraction= */ 0,
+                /* expanded= */ false, /* tracking= */ false, /* dragDownPxAmount= */ 0);
+        assertThat(mNotificationPanelViewController.mQsExpandImmediate).isFalse();
+
+        // change panel state to OPENING
+        mPanelExpansionStateManager.onPanelExpansionChanged(/* fraction= */ 0.5f,
+                /* expanded= */ true, /* tracking= */ true, /* dragDownPxAmount= */ 100);
+
+        assertThat(mNotificationPanelViewController.mQsExpandImmediate).isTrue();
+    }
+
+    @Test
+    public void testQsNotToBeImmediatelyExpandedWhenGoingFromUnlockedToLocked() {
+        enableSplitShade(/* enabled= */ true);
+        // set panel state to CLOSED
+        mPanelExpansionStateManager.onPanelExpansionChanged(/* fraction= */ 0,
+                /* expanded= */ false, /* tracking= */ false, /* dragDownPxAmount= */ 0);
+
+        // go to lockscreen, which also sets fraction to 1.0f and makes shade "expanded"
+        mStatusBarStateController.setState(KEYGUARD);
+        mPanelExpansionStateManager.onPanelExpansionChanged(/* fraction= */ 1,
+                /* expanded= */ true, /* tracking= */ true, /* dragDownPxAmount= */ 0);
+
+        assertThat(mNotificationPanelViewController.mQsExpandImmediate).isFalse();
+    }
+
+    @Test
+    public void testQsExpansionChangedToDefaultWhenRotatingFromOrToSplitShade() {
+        // to make sure shade is in expanded state
+        mNotificationPanelViewController.startWaitingForOpenPanelGesture();
+        assertThat(mNotificationPanelViewController.isQsExpanded()).isFalse();
+
+        // switch to split shade from portrait (default state)
+        enableSplitShade(/* enabled= */ true);
+        assertThat(mNotificationPanelViewController.isQsExpanded()).isTrue();
+
+        // switch to portrait from split shade
+        enableSplitShade(/* enabled= */ false);
+        assertThat(mNotificationPanelViewController.isQsExpanded()).isFalse();
+    }
+
+    @Test
+    public void testPanelClosedWhenClosingQsInSplitShade() {
+        mPanelExpansionStateManager.onPanelExpansionChanged(/* fraction= */ 1,
+                /* expanded= */ true, /* tracking= */ false, /* dragDownPxAmount= */ 0);
+        enableSplitShade(/* enabled= */ true);
+        mNotificationPanelViewController.setExpandedFraction(1f);
+
+        assertThat(mNotificationPanelViewController.isClosing()).isFalse();
+        mNotificationPanelViewController.animateCloseQs(false);
+        assertThat(mNotificationPanelViewController.isClosing()).isTrue();
+    }
+
+    @Test
+    public void testPanelStaysOpenWhenClosingQs() {
+        mPanelExpansionStateManager.onPanelExpansionChanged(/* fraction= */ 1,
+                /* expanded= */ true, /* tracking= */ false, /* dragDownPxAmount= */ 0);
+        mNotificationPanelViewController.setExpandedFraction(1f);
+
+        assertThat(mNotificationPanelViewController.isClosing()).isFalse();
+        mNotificationPanelViewController.animateCloseQs(false);
+        assertThat(mNotificationPanelViewController.isClosing()).isFalse();
+    }
+
+    @Test
+    public void interceptTouchEvent_withinQs_shadeExpanded_startsQsTracking() {
+        mNotificationPanelViewController.mQs = mQs;
+        when(mQsFrame.getX()).thenReturn(0f);
+        when(mQsFrame.getWidth()).thenReturn(1000);
+        when(mQsHeader.getTop()).thenReturn(0);
+        when(mQsHeader.getBottom()).thenReturn(1000);
+        PanelViewController.TouchHandler touchHandler =
+                mNotificationPanelViewController.createTouchHandler();
+
+        mNotificationPanelViewController.setExpandedFraction(1f);
+        touchHandler.onInterceptTouchEvent(
+                createMotionEvent(/* x= */ 0, /* y= */ 0, MotionEvent.ACTION_DOWN));
+        touchHandler.onInterceptTouchEvent(
+                createMotionEvent(/* x= */ 0, /* y= */ 500, MotionEvent.ACTION_MOVE));
+
+        assertThat(mNotificationPanelViewController.isQsTracking()).isTrue();
+    }
+
+    @Test
+    public void interceptTouchEvent_withinQs_shadeExpanded_inSplitShade_doesNotStartQsTracking() {
+        enableSplitShade(true);
+        mNotificationPanelViewController.mQs = mQs;
+        when(mQsFrame.getX()).thenReturn(0f);
+        when(mQsFrame.getWidth()).thenReturn(1000);
+        when(mQsHeader.getTop()).thenReturn(0);
+        when(mQsHeader.getBottom()).thenReturn(1000);
+        PanelViewController.TouchHandler touchHandler =
+                mNotificationPanelViewController.createTouchHandler();
+
+        mNotificationPanelViewController.setExpandedFraction(1f);
+        touchHandler.onInterceptTouchEvent(
+                createMotionEvent(/* x= */ 0, /* y= */ 0, MotionEvent.ACTION_DOWN));
+        touchHandler.onInterceptTouchEvent(
+                createMotionEvent(/* x= */ 0, /* y= */ 500, MotionEvent.ACTION_MOVE));
+
+        assertThat(mNotificationPanelViewController.isQsTracking()).isFalse();
+    }
+
+    @Test
+    public void testOnAttachRefreshStatusBarState() {
+        mStatusBarStateController.setState(KEYGUARD);
+        when(mKeyguardStateController.isKeyguardFadingAway()).thenReturn(false);
+        for (View.OnAttachStateChangeListener listener : mOnAttachStateChangeListeners) {
+            listener.onViewAttachedToWindow(mView);
+        }
+        verify(mKeyguardStatusViewController).setKeyguardStatusViewVisibility(
+                KEYGUARD/*statusBarState*/,
+                false/*keyguardFadingAway*/,
+                false/*goingToFullShade*/, SHADE/*oldStatusBarState*/);
+    }
+
+    @Test
+    public void getMaxPanelHeight_expanding_inSplitShade_returnsSplitShadeFullTransitionDistance() {
+        int splitShadeFullTransitionDistance = 123456;
+        enableSplitShade(true);
+        setSplitShadeFullTransitionDistance(splitShadeFullTransitionDistance);
+        mNotificationPanelViewController.expandWithQs();
+
+        int maxPanelHeight = mNotificationPanelViewController.getMaxPanelHeight();
+
+        assertThat(maxPanelHeight).isEqualTo(splitShadeFullTransitionDistance);
+    }
+
+    @Test
+    public void getMaxPanelHeight_expandingSplitShade_keyguard_returnsNonSplitShadeValue() {
+        mStatusBarStateController.setState(KEYGUARD);
+        int splitShadeFullTransitionDistance = 123456;
+        enableSplitShade(true);
+        setSplitShadeFullTransitionDistance(splitShadeFullTransitionDistance);
+        mNotificationPanelViewController.expandWithQs();
+
+        int maxPanelHeight = mNotificationPanelViewController.getMaxPanelHeight();
+
+        assertThat(maxPanelHeight).isNotEqualTo(splitShadeFullTransitionDistance);
+    }
+
+    @Test
+    public void getMaxPanelHeight_expanding_notSplitShade_returnsNonSplitShadeValue() {
+        int splitShadeFullTransitionDistance = 123456;
+        enableSplitShade(false);
+        setSplitShadeFullTransitionDistance(splitShadeFullTransitionDistance);
+        mNotificationPanelViewController.expandWithQs();
+
+        int maxPanelHeight = mNotificationPanelViewController.getMaxPanelHeight();
+
+        assertThat(maxPanelHeight).isNotEqualTo(splitShadeFullTransitionDistance);
+    }
+
+    private static MotionEvent createMotionEvent(int x, int y, int action) {
+        return MotionEvent.obtain(
+                /* downTime= */ 0, /* eventTime= */ 0, action, x, y, /* metaState= */ 0);
+    }
+
+    private void triggerPositionClockAndNotifications() {
+        mNotificationPanelViewController.closeQs();
+    }
+
+    private FalsingManager.FalsingTapListener getFalsingTapListener() {
+        for (View.OnAttachStateChangeListener listener : mOnAttachStateChangeListeners) {
+            listener.onViewAttachedToWindow(mView);
+        }
+        assertThat(mFalsingManager.getTapListeners().size()).isEqualTo(1);
+        return mFalsingManager.getTapListeners().get(0);
+    }
+
+    private void givenViewAttached() {
+        for (View.OnAttachStateChangeListener listener : mOnAttachStateChangeListeners) {
+            listener.onViewAttachedToWindow(mView);
+        }
+    }
+
+    private void givenViewDetached() {
+        for (View.OnAttachStateChangeListener listener : mOnAttachStateChangeListeners) {
+            listener.onViewDetachedFromWindow(mView);
+        }
+    }
+
+    private ConstraintSet.Layout getConstraintSetLayout(@IdRes int id) {
+        ConstraintSet constraintSet = new ConstraintSet();
+        constraintSet.clone(mNotificationContainerParent);
+        return constraintSet.getConstraint(id).layout;
+    }
+
+    private void enableSplitShade(boolean enabled) {
+        when(mResources.getBoolean(R.bool.config_use_split_notification_shade)).thenReturn(enabled);
+        mNotificationPanelViewController.updateResources();
+    }
+
+    private void updateMultiUserSetting(boolean enabled) {
+        when(mResources.getBoolean(R.bool.qs_show_user_switcher_for_single_user)).thenReturn(false);
+        when(mUserManager.isUserSwitcherEnabled(false)).thenReturn(enabled);
+        final ArgumentCaptor<ContentObserver> observerCaptor =
+                ArgumentCaptor.forClass(ContentObserver.class);
+        verify(mContentResolver)
+                .registerContentObserver(any(), anyBoolean(), observerCaptor.capture());
+        observerCaptor.getValue().onChange(/* selfChange */ false);
+    }
+
+    private void updateSmallestScreenWidth(int smallestScreenWidthDp) {
+        Configuration configuration = new Configuration();
+        configuration.smallestScreenWidthDp = smallestScreenWidthDp;
+        mConfigurationController.onConfigurationChanged(configuration);
+    }
+
+    private void onTouchEvent(MotionEvent ev) {
+        mTouchHandler.onTouch(mView, ev);
+    }
+
+    private void setSplitShadeFullTransitionDistance(int splitShadeFullTransitionDistance) {
+        when(mResources.getDimensionPixelSize(R.dimen.split_shade_full_transition_distance))
+                .thenReturn(splitShadeFullTransitionDistance);
+        mNotificationPanelViewController.updateResources();
+    }
+
+    private void setDozing(boolean dozing, boolean dozingAlwaysOn) {
+        when(mDozeParameters.getAlwaysOn()).thenReturn(dozingAlwaysOn);
+        mNotificationPanelViewController.setDozing(
+                /* dozing= */ dozing,
+                /* animate= */ false,
+                /* wakeUpTouchLocation= */ new PointF()
+        );
+    }
+
+    private boolean isKeyguardStatusViewCentered() {
+        mNotificationPanelViewController.updateResources();
+        return getConstraintSetLayout(R.id.keyguard_status_view).endToEnd
+                == ConstraintSet.PARENT_ID;
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationQSContainerControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationQSContainerControllerTest.kt
new file mode 100644
index 0000000..0c6a6a9
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationQSContainerControllerTest.kt
@@ -0,0 +1,481 @@
+package com.android.systemui.shade
+
+import android.testing.AndroidTestingRunner
+import android.testing.TestableLooper
+import android.view.View
+import android.view.ViewGroup
+import android.view.WindowInsets
+import android.view.WindowManagerPolicyConstants
+import androidx.annotation.IdRes
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.constraintlayout.widget.ConstraintSet
+import androidx.test.filters.SmallTest
+import com.android.systemui.R
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.flags.FeatureFlags
+import com.android.systemui.navigationbar.NavigationModeController
+import com.android.systemui.navigationbar.NavigationModeController.ModeChangedListener
+import com.android.systemui.recents.OverviewProxyService
+import com.android.systemui.recents.OverviewProxyService.OverviewProxyListener
+import com.android.systemui.util.concurrency.FakeExecutor
+import com.android.systemui.util.time.FakeSystemClock
+import com.google.common.truth.Truth.assertThat
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentCaptor
+import org.mockito.Captor
+import org.mockito.Mock
+import org.mockito.Mockito
+import org.mockito.Mockito.RETURNS_DEEP_STUBS
+import org.mockito.Mockito.anyInt
+import org.mockito.Mockito.doNothing
+import org.mockito.Mockito.eq
+import org.mockito.Mockito.mock
+import org.mockito.Mockito.never
+import org.mockito.Mockito.verify
+import org.mockito.MockitoAnnotations
+import java.util.function.Consumer
+import org.mockito.Mockito.`when` as whenever
+
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+@TestableLooper.RunWithLooper
+class NotificationQSContainerControllerTest : SysuiTestCase() {
+
+    companion object {
+        const val STABLE_INSET_BOTTOM = 100
+        const val CUTOUT_HEIGHT = 50
+        const val GESTURES_NAVIGATION = WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL
+        const val BUTTONS_NAVIGATION = WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON
+        const val NOTIFICATIONS_MARGIN = 50
+        const val SCRIM_MARGIN = 10
+        const val FOOTER_ACTIONS_INSET = 2
+        const val FOOTER_ACTIONS_PADDING = 2
+        const val FOOTER_ACTIONS_OFFSET = FOOTER_ACTIONS_INSET + FOOTER_ACTIONS_PADDING
+        const val QS_PADDING_OFFSET = SCRIM_MARGIN + FOOTER_ACTIONS_OFFSET
+    }
+
+    @Mock
+    private lateinit var navigationModeController: NavigationModeController
+    @Mock
+    private lateinit var overviewProxyService: OverviewProxyService
+    @Mock
+    private lateinit var notificationsQSContainer: NotificationsQuickSettingsContainer
+    @Mock
+    private lateinit var featureFlags: FeatureFlags
+    @Captor
+    lateinit var navigationModeCaptor: ArgumentCaptor<ModeChangedListener>
+    @Captor
+    lateinit var taskbarVisibilityCaptor: ArgumentCaptor<OverviewProxyListener>
+    @Captor
+    lateinit var windowInsetsCallbackCaptor: ArgumentCaptor<Consumer<WindowInsets>>
+    @Captor
+    lateinit var constraintSetCaptor: ArgumentCaptor<ConstraintSet>
+
+    private lateinit var controller: NotificationsQSContainerController
+    private lateinit var navigationModeCallback: ModeChangedListener
+    private lateinit var taskbarVisibilityCallback: OverviewProxyListener
+    private lateinit var windowInsetsCallback: Consumer<WindowInsets>
+    private lateinit var delayableExecutor: FakeExecutor
+    private lateinit var fakeSystemClock: FakeSystemClock
+
+    @Before
+    fun setup() {
+        MockitoAnnotations.initMocks(this)
+        mContext.ensureTestableResources()
+        whenever(notificationsQSContainer.context).thenReturn(mContext)
+        whenever(notificationsQSContainer.resources).thenReturn(mContext.resources)
+        fakeSystemClock = FakeSystemClock()
+        delayableExecutor = FakeExecutor(fakeSystemClock)
+        controller = NotificationsQSContainerController(
+                notificationsQSContainer,
+                navigationModeController,
+                overviewProxyService,
+                featureFlags,
+                delayableExecutor
+        )
+
+        overrideResource(R.dimen.split_shade_notifications_scrim_margin_bottom, SCRIM_MARGIN)
+        overrideResource(R.dimen.notification_panel_margin_bottom, NOTIFICATIONS_MARGIN)
+        overrideResource(R.bool.config_use_split_notification_shade, false)
+        overrideResource(R.dimen.qs_footer_actions_bottom_padding, FOOTER_ACTIONS_PADDING)
+        overrideResource(R.dimen.qs_footer_action_inset, FOOTER_ACTIONS_INSET)
+        whenever(navigationModeController.addListener(navigationModeCaptor.capture()))
+                .thenReturn(GESTURES_NAVIGATION)
+        doNothing().`when`(overviewProxyService).addCallback(taskbarVisibilityCaptor.capture())
+        doNothing().`when`(notificationsQSContainer)
+                .setInsetsChangedListener(windowInsetsCallbackCaptor.capture())
+        doNothing().`when`(notificationsQSContainer).applyConstraints(constraintSetCaptor.capture())
+
+        controller.init()
+        controller.onViewAttached()
+
+        navigationModeCallback = navigationModeCaptor.value
+        taskbarVisibilityCallback = taskbarVisibilityCaptor.value
+        windowInsetsCallback = windowInsetsCallbackCaptor.value
+    }
+
+    @Test
+    fun testTaskbarVisibleInSplitShade() {
+        enableSplitShade()
+
+        given(taskbarVisible = true,
+                navigationMode = GESTURES_NAVIGATION,
+                insets = windowInsets().withStableBottom())
+        then(expectedContainerPadding = 0, // taskbar should disappear when shade is expanded
+                expectedNotificationsMargin = NOTIFICATIONS_MARGIN,
+                expectedQsPadding = NOTIFICATIONS_MARGIN - QS_PADDING_OFFSET)
+
+        given(taskbarVisible = true,
+                navigationMode = BUTTONS_NAVIGATION,
+                insets = windowInsets().withStableBottom())
+        then(expectedContainerPadding = STABLE_INSET_BOTTOM,
+                expectedNotificationsMargin = NOTIFICATIONS_MARGIN,
+                expectedQsPadding = NOTIFICATIONS_MARGIN - QS_PADDING_OFFSET)
+    }
+
+    @Test
+    fun testTaskbarNotVisibleInSplitShade() {
+        // when taskbar is not visible, it means we're on the home screen
+        enableSplitShade()
+
+        given(taskbarVisible = false,
+                navigationMode = GESTURES_NAVIGATION,
+                insets = windowInsets().withStableBottom())
+        then(expectedContainerPadding = 0,
+                expectedQsPadding = NOTIFICATIONS_MARGIN - QS_PADDING_OFFSET)
+
+        given(taskbarVisible = false,
+                navigationMode = BUTTONS_NAVIGATION,
+                insets = windowInsets().withStableBottom())
+        then(expectedContainerPadding = 0, // qs goes full height as it's not obscuring nav buttons
+                expectedNotificationsMargin = STABLE_INSET_BOTTOM + NOTIFICATIONS_MARGIN,
+                expectedQsPadding = STABLE_INSET_BOTTOM + NOTIFICATIONS_MARGIN - QS_PADDING_OFFSET)
+    }
+
+    @Test
+    fun testTaskbarNotVisibleInSplitShadeWithCutout() {
+        enableSplitShade()
+
+        given(taskbarVisible = false,
+                navigationMode = GESTURES_NAVIGATION,
+                insets = windowInsets().withCutout())
+        then(expectedContainerPadding = CUTOUT_HEIGHT,
+            expectedQsPadding = NOTIFICATIONS_MARGIN - QS_PADDING_OFFSET)
+
+        given(taskbarVisible = false,
+                navigationMode = BUTTONS_NAVIGATION,
+                insets = windowInsets().withCutout().withStableBottom())
+        then(expectedContainerPadding = 0,
+                expectedNotificationsMargin = STABLE_INSET_BOTTOM + NOTIFICATIONS_MARGIN,
+                expectedQsPadding = STABLE_INSET_BOTTOM + NOTIFICATIONS_MARGIN - QS_PADDING_OFFSET)
+    }
+
+    @Test
+    fun testTaskbarVisibleInSinglePaneShade() {
+        disableSplitShade()
+
+        given(taskbarVisible = true,
+                navigationMode = GESTURES_NAVIGATION,
+                insets = windowInsets().withStableBottom())
+        then(expectedContainerPadding = 0,
+                expectedQsPadding = STABLE_INSET_BOTTOM)
+
+        given(taskbarVisible = true,
+                navigationMode = BUTTONS_NAVIGATION,
+                insets = windowInsets().withStableBottom())
+        then(expectedContainerPadding = STABLE_INSET_BOTTOM,
+                expectedQsPadding = STABLE_INSET_BOTTOM)
+    }
+
+    @Test
+    fun testTaskbarNotVisibleInSinglePaneShade() {
+        disableSplitShade()
+
+        given(taskbarVisible = false,
+                navigationMode = GESTURES_NAVIGATION,
+                insets = emptyInsets())
+        then(expectedContainerPadding = 0)
+
+        given(taskbarVisible = false,
+                navigationMode = GESTURES_NAVIGATION,
+                insets = windowInsets().withCutout().withStableBottom())
+        then(expectedContainerPadding = CUTOUT_HEIGHT, expectedQsPadding = STABLE_INSET_BOTTOM)
+
+        given(taskbarVisible = false,
+                navigationMode = BUTTONS_NAVIGATION,
+                insets = windowInsets().withStableBottom())
+        then(expectedContainerPadding = 0,
+                expectedNotificationsMargin = STABLE_INSET_BOTTOM + NOTIFICATIONS_MARGIN,
+                expectedQsPadding = STABLE_INSET_BOTTOM)
+    }
+
+    @Test
+    fun testCustomizingInSinglePaneShade() {
+        disableSplitShade()
+        controller.setCustomizerShowing(true)
+
+        // always sets spacings to 0
+        given(taskbarVisible = false,
+                navigationMode = GESTURES_NAVIGATION,
+                insets = windowInsets().withStableBottom())
+        then(expectedContainerPadding = 0,
+                expectedNotificationsMargin = 0)
+
+        given(taskbarVisible = false,
+                navigationMode = BUTTONS_NAVIGATION,
+                insets = emptyInsets())
+        then(expectedContainerPadding = 0,
+                expectedNotificationsMargin = 0)
+    }
+
+    @Test
+    fun testDetailShowingInSinglePaneShade() {
+        disableSplitShade()
+        controller.setDetailShowing(true)
+
+        // always sets spacings to 0
+        given(taskbarVisible = false,
+                navigationMode = GESTURES_NAVIGATION,
+                insets = windowInsets().withStableBottom())
+        then(expectedContainerPadding = 0,
+                expectedNotificationsMargin = 0)
+
+        given(taskbarVisible = false,
+                navigationMode = BUTTONS_NAVIGATION,
+                insets = emptyInsets())
+        then(expectedContainerPadding = 0,
+                expectedNotificationsMargin = 0)
+    }
+
+    @Test
+    fun testDetailShowingInSplitShade() {
+        enableSplitShade()
+        controller.setDetailShowing(true)
+
+        given(taskbarVisible = false,
+                navigationMode = GESTURES_NAVIGATION,
+                insets = windowInsets().withStableBottom())
+        then(expectedContainerPadding = 0)
+
+        // should not influence spacing
+        given(taskbarVisible = false,
+                navigationMode = BUTTONS_NAVIGATION,
+                insets = emptyInsets())
+        then(expectedContainerPadding = 0)
+    }
+
+    @Test
+    fun testNotificationsMarginBottomIsUpdated() {
+        Mockito.clearInvocations(notificationsQSContainer)
+        enableSplitShade()
+        verify(notificationsQSContainer).setNotificationsMarginBottom(NOTIFICATIONS_MARGIN)
+
+        overrideResource(R.dimen.notification_panel_margin_bottom, 100)
+        disableSplitShade()
+        verify(notificationsQSContainer).setNotificationsMarginBottom(100)
+    }
+
+    @Test
+    fun testSplitShadeLayout_isAlignedToGuideline() {
+        enableSplitShade()
+        controller.updateResources()
+        assertThat(getConstraintSetLayout(R.id.qs_frame).endToEnd)
+                .isEqualTo(R.id.qs_edge_guideline)
+        assertThat(getConstraintSetLayout(R.id.notification_stack_scroller).startToStart)
+                .isEqualTo(R.id.qs_edge_guideline)
+    }
+
+    @Test
+    fun testSinglePaneLayout_childrenHaveEqualMargins() {
+        disableSplitShade()
+        controller.updateResources()
+        val qsStartMargin = getConstraintSetLayout(R.id.qs_frame).startMargin
+        val qsEndMargin = getConstraintSetLayout(R.id.qs_frame).endMargin
+        val notifStartMargin = getConstraintSetLayout(R.id.notification_stack_scroller).startMargin
+        val notifEndMargin = getConstraintSetLayout(R.id.notification_stack_scroller).endMargin
+        assertThat(qsStartMargin == qsEndMargin &&
+                notifStartMargin == notifEndMargin &&
+                qsStartMargin == notifStartMargin
+        ).isTrue()
+    }
+
+    @Test
+    fun testSplitShadeLayout_childrenHaveInsideMarginsOfZero() {
+        enableSplitShade()
+        controller.updateResources()
+        assertThat(getConstraintSetLayout(R.id.qs_frame).endMargin).isEqualTo(0)
+        assertThat(getConstraintSetLayout(R.id.notification_stack_scroller).startMargin)
+                .isEqualTo(0)
+    }
+
+    @Test
+    fun testSplitShadeLayout_qsFrameHasHorizontalMarginsOfZero() {
+        enableSplitShade()
+        controller.updateResources()
+        assertThat(getConstraintSetLayout(R.id.qs_frame).endMargin).isEqualTo(0)
+        assertThat(getConstraintSetLayout(R.id.qs_frame).startMargin).isEqualTo(0)
+    }
+
+    @Test
+    fun testLargeScreenLayout_qsAndNotifsTopMarginIsOfHeaderHeight() {
+        setLargeScreen()
+        val largeScreenHeaderHeight = 100
+        overrideResource(R.dimen.large_screen_shade_header_height, largeScreenHeaderHeight)
+
+        controller.updateResources()
+
+        assertThat(getConstraintSetLayout(R.id.qs_frame).topMargin)
+                .isEqualTo(largeScreenHeaderHeight)
+        assertThat(getConstraintSetLayout(R.id.notification_stack_scroller).topMargin)
+                .isEqualTo(largeScreenHeaderHeight)
+    }
+
+    @Test
+    fun testSmallScreenLayout_qsAndNotifsTopMarginIsZero() {
+        setSmallScreen()
+        controller.updateResources()
+        assertThat(getConstraintSetLayout(R.id.qs_frame).topMargin).isEqualTo(0)
+        assertThat(getConstraintSetLayout(R.id.notification_stack_scroller).topMargin)
+                .isEqualTo(0)
+    }
+
+    @Test
+    fun testSinglePaneShadeLayout_qsFrameHasHorizontalMarginsSetToCorrectValue() {
+        disableSplitShade()
+        controller.updateResources()
+        val notificationPanelMarginHorizontal = context.resources
+                .getDimensionPixelSize(R.dimen.notification_panel_margin_horizontal)
+        assertThat(getConstraintSetLayout(R.id.qs_frame).endMargin)
+                .isEqualTo(notificationPanelMarginHorizontal)
+        assertThat(getConstraintSetLayout(R.id.qs_frame).startMargin)
+                .isEqualTo(notificationPanelMarginHorizontal)
+    }
+
+    @Test
+    fun testSinglePaneShadeLayout_isAlignedToParent() {
+        disableSplitShade()
+        controller.updateResources()
+        assertThat(getConstraintSetLayout(R.id.qs_frame).endToEnd)
+                .isEqualTo(ConstraintSet.PARENT_ID)
+        assertThat(getConstraintSetLayout(R.id.notification_stack_scroller).startToStart)
+                .isEqualTo(ConstraintSet.PARENT_ID)
+    }
+
+    @Test
+    fun testAllChildrenOfNotificationContainer_haveIds() {
+        // set dimen to 0 to avoid triggering updating bottom spacing
+        overrideResource(R.dimen.split_shade_notifications_scrim_margin_bottom, 0)
+        val container = NotificationsQuickSettingsContainer(context, null)
+        container.removeAllViews()
+        container.addView(newViewWithId(1))
+        container.addView(newViewWithId(View.NO_ID))
+        val controller = NotificationsQSContainerController(container, navigationModeController,
+                overviewProxyService, featureFlags, delayableExecutor)
+        controller.updateConstraints()
+
+        assertThat(container.getChildAt(0).id).isEqualTo(1)
+        assertThat(container.getChildAt(1).id).isNotEqualTo(View.NO_ID)
+    }
+
+    @Test
+    fun testWindowInsetDebounce() {
+        disableSplitShade()
+
+        given(taskbarVisible = false,
+            navigationMode = GESTURES_NAVIGATION,
+            insets = emptyInsets(),
+            applyImmediately = false)
+        fakeSystemClock.advanceTime(INSET_DEBOUNCE_MILLIS / 2)
+        windowInsetsCallback.accept(windowInsets().withStableBottom())
+
+        delayableExecutor.advanceClockToLast()
+        delayableExecutor.runAllReady()
+
+        verify(notificationsQSContainer, never()).setQSContainerPaddingBottom(0)
+        verify(notificationsQSContainer).setQSContainerPaddingBottom(STABLE_INSET_BOTTOM)
+    }
+
+    private fun disableSplitShade() {
+        setSplitShadeEnabled(false)
+    }
+
+    private fun enableSplitShade() {
+        setSplitShadeEnabled(true)
+    }
+
+    private fun setSplitShadeEnabled(enabled: Boolean) {
+        overrideResource(R.bool.config_use_split_notification_shade, enabled)
+        controller.updateResources()
+    }
+
+    private fun setSmallScreen() {
+        setLargeScreenEnabled(false)
+    }
+
+    private fun setLargeScreen() {
+        setLargeScreenEnabled(true)
+    }
+
+    private fun setLargeScreenEnabled(enabled: Boolean) {
+        overrideResource(R.bool.config_use_large_screen_shade_header, enabled)
+    }
+
+    private fun given(
+        taskbarVisible: Boolean,
+        navigationMode: Int,
+        insets: WindowInsets,
+        applyImmediately: Boolean = true
+    ) {
+        Mockito.clearInvocations(notificationsQSContainer)
+        taskbarVisibilityCallback.onTaskbarStatusUpdated(taskbarVisible, false)
+        navigationModeCallback.onNavigationModeChanged(navigationMode)
+        windowInsetsCallback.accept(insets)
+        if (applyImmediately) {
+            delayableExecutor.advanceClockToLast()
+            delayableExecutor.runAllReady()
+        }
+    }
+
+    fun then(
+        expectedContainerPadding: Int,
+        expectedNotificationsMargin: Int = NOTIFICATIONS_MARGIN,
+        expectedQsPadding: Int = 0
+    ) {
+        verify(notificationsQSContainer)
+                .setPadding(anyInt(), anyInt(), anyInt(), eq(expectedContainerPadding))
+        verify(notificationsQSContainer).setNotificationsMarginBottom(expectedNotificationsMargin)
+        verify(notificationsQSContainer)
+                    .setQSContainerPaddingBottom(expectedQsPadding)
+        Mockito.clearInvocations(notificationsQSContainer)
+    }
+
+    private fun windowInsets() = mock(WindowInsets::class.java, RETURNS_DEEP_STUBS)
+
+    private fun emptyInsets() = mock(WindowInsets::class.java)
+
+    private fun WindowInsets.withCutout(): WindowInsets {
+        whenever(displayCutout.safeInsetBottom).thenReturn(CUTOUT_HEIGHT)
+        return this
+    }
+
+    private fun WindowInsets.withStableBottom(): WindowInsets {
+        whenever(stableInsetBottom).thenReturn(STABLE_INSET_BOTTOM)
+        return this
+    }
+
+    private fun getConstraintSetLayout(@IdRes id: Int): ConstraintSet.Layout {
+        return constraintSetCaptor.value.getConstraint(id).layout
+    }
+
+    private fun newViewWithId(id: Int): View {
+        val view = View(mContext)
+        view.id = id
+        val layoutParams = ConstraintLayout.LayoutParams(
+                ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
+        // required as cloning ConstraintSet fails if view doesn't have layout params
+        view.layoutParams = layoutParams
+        return view
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java
new file mode 100644
index 0000000..ad3d3d2
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java
@@ -0,0 +1,334 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.shade;
+
+import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
+import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
+import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
+import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
+
+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.eq;
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.clearInvocations;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
+import android.app.IActivityManager;
+import android.content.pm.ActivityInfo;
+import android.content.res.Configuration;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper.RunWithLooper;
+import android.view.View;
+import android.view.WindowManager;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.internal.colorextraction.ColorExtractor;
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.biometrics.AuthController;
+import com.android.systemui.colorextraction.SysuiColorExtractor;
+import com.android.systemui.dump.DumpManager;
+import com.android.systemui.keyguard.KeyguardViewMediator;
+import com.android.systemui.statusbar.SysuiStatusBarStateController;
+import com.android.systemui.statusbar.phone.DozeParameters;
+import com.android.systemui.statusbar.phone.KeyguardBypassController;
+import com.android.systemui.statusbar.phone.ScreenOffAnimationController;
+import com.android.systemui.statusbar.phone.ScrimController;
+import com.android.systemui.statusbar.policy.ConfigurationController;
+import com.android.systemui.statusbar.policy.KeyguardStateController;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.Spy;
+
+@RunWith(AndroidTestingRunner.class)
+@RunWithLooper
+@SmallTest
+public class NotificationShadeWindowControllerImplTest extends SysuiTestCase {
+
+    @Mock private WindowManager mWindowManager;
+    @Mock private DozeParameters mDozeParameters;
+    @Spy private final NotificationShadeWindowView mNotificationShadeWindowView = spy(
+            new NotificationShadeWindowView(mContext, null));
+    @Mock private IActivityManager mActivityManager;
+    @Mock private SysuiStatusBarStateController mStatusBarStateController;
+    @Mock private ConfigurationController mConfigurationController;
+    @Mock private KeyguardViewMediator mKeyguardViewMediator;
+    @Mock private KeyguardBypassController mKeyguardBypassController;
+    @Mock private SysuiColorExtractor mColorExtractor;
+    @Mock ColorExtractor.GradientColors mGradientColors;
+    @Mock private DumpManager mDumpManager;
+    @Mock private KeyguardStateController mKeyguardStateController;
+    @Mock private ScreenOffAnimationController mScreenOffAnimationController;
+    @Mock private AuthController mAuthController;
+    @Captor private ArgumentCaptor<WindowManager.LayoutParams> mLayoutParameters;
+
+    private NotificationShadeWindowControllerImpl mNotificationShadeWindowController;
+
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        when(mDozeParameters.getAlwaysOn()).thenReturn(true);
+        when(mColorExtractor.getNeutralColors()).thenReturn(mGradientColors);
+
+        mNotificationShadeWindowController = new NotificationShadeWindowControllerImpl(mContext,
+                mWindowManager, mActivityManager, mDozeParameters, mStatusBarStateController,
+                mConfigurationController, mKeyguardViewMediator, mKeyguardBypassController,
+                mColorExtractor, mDumpManager, mKeyguardStateController,
+                mScreenOffAnimationController, mAuthController) {
+                    @Override
+                    protected boolean isDebuggable() {
+                        return false;
+                    }
+            };
+        mNotificationShadeWindowController.setScrimsVisibilityListener((visibility) -> {});
+        mNotificationShadeWindowController.setNotificationShadeView(mNotificationShadeWindowView);
+
+        mNotificationShadeWindowController.attach();
+        verify(mWindowManager).addView(eq(mNotificationShadeWindowView), any());
+    }
+
+    @Test
+    public void testSetDozing_hidesSystemOverlays() {
+        mNotificationShadeWindowController.setDozing(true);
+        ArgumentCaptor<WindowManager.LayoutParams> captor =
+                ArgumentCaptor.forClass(WindowManager.LayoutParams.class);
+        verify(mWindowManager).updateViewLayout(any(), captor.capture());
+        int flag = captor.getValue().privateFlags
+                & WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
+        assertThat(flag).isNotEqualTo(0);
+
+        reset(mWindowManager);
+        mNotificationShadeWindowController.setDozing(false);
+        verify(mWindowManager).updateViewLayout(any(), captor.capture());
+        flag = captor.getValue().privateFlags
+                & WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
+        assertThat(flag).isEqualTo(0);
+    }
+
+    @Test
+    public void testOnThemeChanged_doesntCrash() {
+        mNotificationShadeWindowController.onThemeChanged();
+    }
+
+    @Test
+    public void testAdd_updatesVisibilityFlags() {
+        verify(mNotificationShadeWindowView).setSystemUiVisibility(anyInt());
+    }
+
+    @Test
+    public void testSetForcePluginOpen_beforeStatusBarInitialization() {
+        mNotificationShadeWindowController.setForcePluginOpen(true, this);
+    }
+
+    @Test
+    public void attach_visibleWithWallpaper() {
+        clearInvocations(mWindowManager);
+        when(mKeyguardViewMediator.isShowingAndNotOccluded()).thenReturn(true);
+        mNotificationShadeWindowController.attach();
+
+        verify(mNotificationShadeWindowView).setVisibility(eq(View.VISIBLE));
+        verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
+        assertThat((mLayoutParameters.getValue().flags & FLAG_SHOW_WALLPAPER) != 0).isTrue();
+    }
+
+    @Test
+    public void attach_lightScrimHidesWallpaper() {
+        when(mKeyguardViewMediator.isShowingAndNotOccluded()).thenReturn(true);
+        mNotificationShadeWindowController.attach();
+
+        clearInvocations(mWindowManager);
+        mNotificationShadeWindowController.setLightRevealScrimOpaque(true);
+        verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
+        assertThat((mLayoutParameters.getValue().flags & FLAG_SHOW_WALLPAPER) == 0).isTrue();
+    }
+
+    @Test
+    public void attach_scrimDoesntHideWallpaper() {
+        when(mKeyguardViewMediator.isShowingAndNotOccluded()).thenReturn(true);
+        mNotificationShadeWindowController.attach();
+
+        clearInvocations(mWindowManager);
+        mNotificationShadeWindowController.setScrimsVisibility(ScrimController.OPAQUE);
+        // The scrim used to remove the wallpaper flag, but this causes a relayout.
+        // Instead, we're not relying on SurfaceControl#setOpaque on
+        // NotificationShadeDepthController.
+        verify(mWindowManager, never()).updateViewLayout(any(), mLayoutParameters.capture());
+    }
+
+    @Test
+    public void setScrimsVisibility_earlyReturn() {
+        clearInvocations(mWindowManager);
+        mNotificationShadeWindowController.setScrimsVisibility(ScrimController.TRANSPARENT);
+        // Abort early if value didn't change
+        verify(mWindowManager, never()).updateViewLayout(any(), mLayoutParameters.capture());
+    }
+
+    @Test
+    public void attach_animatingKeyguardAndSurface_wallpaperVisible() {
+        clearInvocations(mWindowManager);
+        when(mKeyguardViewMediator.isShowingAndNotOccluded()).thenReturn(true);
+        when(mKeyguardViewMediator
+                .isAnimatingBetweenKeyguardAndSurfaceBehindOrWillBe())
+                .thenReturn(true);
+        mNotificationShadeWindowController.attach();
+
+        verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
+        assertThat((mLayoutParameters.getValue().flags & FLAG_SHOW_WALLPAPER) != 0).isTrue();
+    }
+
+    @Test
+    public void setBackgroundBlurRadius_expandedWithBlurs() {
+        mNotificationShadeWindowController.setBackgroundBlurRadius(10);
+        verify(mNotificationShadeWindowView).setVisibility(eq(View.VISIBLE));
+
+        mNotificationShadeWindowController.setBackgroundBlurRadius(0);
+        verify(mNotificationShadeWindowView).setVisibility(eq(View.INVISIBLE));
+    }
+
+    @Test
+    public void setBouncerShowing_isFocusable_whenNeedsInput() {
+        mNotificationShadeWindowController.setKeyguardNeedsInput(true);
+        clearInvocations(mWindowManager);
+        mNotificationShadeWindowController.setBouncerShowing(true);
+
+        verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
+        assertThat((mLayoutParameters.getValue().flags & FLAG_NOT_FOCUSABLE) == 0).isTrue();
+        assertThat((mLayoutParameters.getValue().flags & FLAG_ALT_FOCUSABLE_IM) == 0).isTrue();
+    }
+
+    @Test
+    public void setKeyguardShowing_focusable_notAltFocusable_whenNeedsInput() {
+        mNotificationShadeWindowController.setKeyguardShowing(true);
+        clearInvocations(mWindowManager);
+        mNotificationShadeWindowController.setKeyguardNeedsInput(true);
+
+        verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
+        assertThat((mLayoutParameters.getValue().flags & FLAG_NOT_FOCUSABLE) == 0).isTrue();
+        assertThat((mLayoutParameters.getValue().flags & FLAG_ALT_FOCUSABLE_IM) == 0).isTrue();
+    }
+
+    @Test
+    public void setPanelExpanded_notFocusable_altFocusable_whenPanelIsOpen() {
+        mNotificationShadeWindowController.setPanelExpanded(true);
+        clearInvocations(mWindowManager);
+        mNotificationShadeWindowController.setPanelExpanded(true);
+        verifyNoMoreInteractions(mWindowManager);
+        mNotificationShadeWindowController.setNotificationShadeFocusable(true);
+
+        verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
+        assertThat((mLayoutParameters.getValue().flags & FLAG_NOT_FOCUSABLE) == 0).isTrue();
+        assertThat((mLayoutParameters.getValue().flags & FLAG_ALT_FOCUSABLE_IM) != 0).isTrue();
+    }
+
+    @Test
+    public void setKeyguardShowing_notFocusable_byDefault() {
+        mNotificationShadeWindowController.setKeyguardShowing(false);
+
+        verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
+        assertThat((mLayoutParameters.getValue().flags & FLAG_NOT_FOCUSABLE) != 0).isTrue();
+        assertThat((mLayoutParameters.getValue().flags & FLAG_ALT_FOCUSABLE_IM) == 0).isTrue();
+    }
+
+    @Test
+    public void setKeyguardShowing_enablesSecureFlag() {
+        mNotificationShadeWindowController.setBouncerShowing(true);
+
+        verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
+        assertThat((mLayoutParameters.getValue().flags & FLAG_SECURE) != 0).isTrue();
+    }
+
+    @Test
+    public void setKeyguardNotShowing_disablesSecureFlag() {
+        mNotificationShadeWindowController.setBouncerShowing(false);
+
+        verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
+        assertThat((mLayoutParameters.getValue().flags & FLAG_SECURE) == 0).isTrue();
+    }
+
+    @Test
+    public void rotationBecameAllowed_layoutParamsUpdated() {
+        mNotificationShadeWindowController.setKeyguardShowing(true);
+        when(mKeyguardStateController.isKeyguardScreenRotationAllowed()).thenReturn(false);
+        mNotificationShadeWindowController.onConfigChanged(new Configuration());
+        clearInvocations(mWindowManager);
+
+        when(mKeyguardStateController.isKeyguardScreenRotationAllowed()).thenReturn(true);
+        mNotificationShadeWindowController.onConfigChanged(new Configuration());
+
+        verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
+        assertThat(mLayoutParameters.getValue().screenOrientation)
+                .isEqualTo(ActivityInfo.SCREEN_ORIENTATION_USER);
+    }
+
+    @Test
+    public void rotationBecameNotAllowed_layoutParamsUpdated() {
+        mNotificationShadeWindowController.setKeyguardShowing(true);
+        when(mKeyguardStateController.isKeyguardScreenRotationAllowed()).thenReturn(true);
+        mNotificationShadeWindowController.onConfigChanged(new Configuration());
+        clearInvocations(mWindowManager);
+
+        when(mKeyguardStateController.isKeyguardScreenRotationAllowed()).thenReturn(false);
+        mNotificationShadeWindowController.onConfigChanged(new Configuration());
+
+        verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
+        assertThat(mLayoutParameters.getValue().screenOrientation)
+                .isEqualTo(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
+    }
+
+    @Test
+    public void batchApplyWindowLayoutParams_doesNotDispatchEvents() {
+        mNotificationShadeWindowController.setForceDozeBrightness(true);
+        verify(mWindowManager).updateViewLayout(any(), any());
+        mNotificationShadeWindowController.setForceDozeBrightness(true);
+        verifyNoMoreInteractions(mWindowManager);
+
+        clearInvocations(mWindowManager);
+        mNotificationShadeWindowController.batchApplyWindowLayoutParams(()-> {
+            mNotificationShadeWindowController.setForceDozeBrightness(false);
+            verify(mWindowManager, never()).updateViewLayout(any(), any());
+        });
+        verify(mWindowManager).updateViewLayout(any(), any());
+    }
+
+    @Test
+    public void bouncerShowing_OrientationNoSensor() {
+        mNotificationShadeWindowController.setKeyguardShowing(true);
+        mNotificationShadeWindowController.setKeyguardOccluded(true);
+        mNotificationShadeWindowController.setBouncerShowing(true);
+        when(mKeyguardStateController.isKeyguardScreenRotationAllowed()).thenReturn(false);
+        mNotificationShadeWindowController.onConfigChanged(new Configuration());
+
+        verify(mWindowManager, atLeastOnce()).updateViewLayout(any(), mLayoutParameters.capture());
+        assertThat(mLayoutParameters.getValue().screenOrientation)
+                .isEqualTo(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewControllerTest.kt
new file mode 100644
index 0000000..471918c
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewControllerTest.kt
@@ -0,0 +1,284 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.shade
+
+import android.testing.AndroidTestingRunner
+import android.testing.TestableLooper.RunWithLooper
+import android.view.MotionEvent
+import androidx.test.filters.SmallTest
+import com.android.keyguard.LockIconViewController
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.classifier.FalsingCollectorFake
+import com.android.systemui.dock.DockManager
+import com.android.systemui.keyguard.KeyguardUnlockAnimationController
+import com.android.systemui.lowlightclock.LowLightClockController
+import com.android.systemui.statusbar.LockscreenShadeTransitionController
+import com.android.systemui.statusbar.NotificationShadeDepthController
+import com.android.systemui.statusbar.NotificationShadeWindowController
+import com.android.systemui.statusbar.SysuiStatusBarStateController
+import com.android.systemui.statusbar.notification.stack.AmbientState
+import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
+import com.android.systemui.shade.NotificationShadeWindowView.InteractionEventHandler
+import com.android.systemui.statusbar.phone.CentralSurfaces
+import com.android.systemui.statusbar.phone.PhoneStatusBarViewController
+import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager
+import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager
+import com.android.systemui.statusbar.window.StatusBarWindowStateController
+import com.android.systemui.tuner.TunerService
+import com.google.common.truth.Truth.assertThat
+import java.util.Optional
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentCaptor
+import org.mockito.ArgumentMatchers
+import org.mockito.Mock
+import org.mockito.Mockito.anyFloat
+import org.mockito.Mockito.never
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when` as whenever
+import org.mockito.MockitoAnnotations
+
+@RunWith(AndroidTestingRunner::class)
+@RunWithLooper(setAsMainLooper = true)
+@SmallTest
+class NotificationShadeWindowViewControllerTest : SysuiTestCase() {
+    @Mock
+    private lateinit var view: NotificationShadeWindowView
+    @Mock
+    private lateinit var tunserService: TunerService
+    @Mock
+    private lateinit var sysuiStatusBarStateController: SysuiStatusBarStateController
+    @Mock
+    private lateinit var centralSurfaces: CentralSurfaces
+    @Mock
+    private lateinit var dockManager: DockManager
+    @Mock
+    private lateinit var notificationPanelViewController: NotificationPanelViewController
+    @Mock
+    private lateinit var notificationShadeDepthController: NotificationShadeDepthController
+    @Mock
+    private lateinit var notificationShadeWindowController: NotificationShadeWindowController
+    @Mock
+    private lateinit var keyguardUnlockAnimationController: KeyguardUnlockAnimationController
+    @Mock
+    private lateinit var ambientState: AmbientState
+    @Mock
+    private lateinit var stackScrollLayoutController: NotificationStackScrollLayoutController
+    @Mock
+    private lateinit var statusBarKeyguardViewManager: StatusBarKeyguardViewManager
+    @Mock
+    private lateinit var statusBarWindowStateController: StatusBarWindowStateController
+    @Mock
+    private lateinit var lockscreenShadeTransitionController: LockscreenShadeTransitionController
+    @Mock
+    private lateinit var lockIconViewController: LockIconViewController
+    @Mock
+    private lateinit var phoneStatusBarViewController: PhoneStatusBarViewController
+    @Mock
+    private lateinit var lowLightClockController: LowLightClockController
+
+    private lateinit var interactionEventHandlerCaptor: ArgumentCaptor<InteractionEventHandler>
+    private lateinit var interactionEventHandler: InteractionEventHandler
+
+    private lateinit var underTest: NotificationShadeWindowViewController
+
+    @Before
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+        whenever(view.bottom).thenReturn(VIEW_BOTTOM)
+
+        underTest = NotificationShadeWindowViewController(
+            lockscreenShadeTransitionController,
+            FalsingCollectorFake(),
+            tunserService,
+            sysuiStatusBarStateController,
+            dockManager,
+            notificationShadeDepthController,
+            view,
+            notificationPanelViewController,
+            PanelExpansionStateManager(),
+            stackScrollLayoutController,
+            statusBarKeyguardViewManager,
+            statusBarWindowStateController,
+            lockIconViewController,
+            Optional.of(lowLightClockController),
+            centralSurfaces,
+            notificationShadeWindowController,
+            keyguardUnlockAnimationController,
+            ambientState
+        )
+        underTest.setupExpandedStatusBar()
+
+        interactionEventHandlerCaptor =
+            ArgumentCaptor.forClass(InteractionEventHandler::class.java)
+        verify(view).setInteractionEventHandler(interactionEventHandlerCaptor.capture())
+            interactionEventHandler = interactionEventHandlerCaptor.value
+    }
+
+    // Note: So far, these tests only cover interactions with the status bar view controller. More
+    // tests need to be added to test the rest of handleDispatchTouchEvent.
+
+    @Test
+    fun handleDispatchTouchEvent_nullStatusBarViewController_returnsFalse() {
+        underTest.setStatusBarViewController(null)
+
+        val returnVal = interactionEventHandler.handleDispatchTouchEvent(downEv)
+
+        assertThat(returnVal).isFalse()
+    }
+
+    @Test
+    fun handleDispatchTouchEvent_downTouchBelowView_sendsTouchToSb() {
+        underTest.setStatusBarViewController(phoneStatusBarViewController)
+        val ev = MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, 0f, VIEW_BOTTOM + 4f, 0)
+        whenever(phoneStatusBarViewController.sendTouchToView(ev)).thenReturn(true)
+
+        val returnVal = interactionEventHandler.handleDispatchTouchEvent(ev)
+
+        verify(phoneStatusBarViewController).sendTouchToView(ev)
+        assertThat(returnVal).isTrue()
+    }
+
+    @Test
+    fun handleDispatchTouchEvent_downTouchBelowViewThenAnotherTouch_sendsTouchToSb() {
+        underTest.setStatusBarViewController(phoneStatusBarViewController)
+        val downEvBelow = MotionEvent.obtain(
+            0L, 0L, MotionEvent.ACTION_DOWN, 0f, VIEW_BOTTOM + 4f, 0
+        )
+        interactionEventHandler.handleDispatchTouchEvent(downEvBelow)
+
+        val nextEvent = MotionEvent.obtain(
+            0L, 0L, MotionEvent.ACTION_MOVE, 0f, VIEW_BOTTOM + 5f, 0
+        )
+        whenever(phoneStatusBarViewController.sendTouchToView(nextEvent)).thenReturn(true)
+
+        val returnVal = interactionEventHandler.handleDispatchTouchEvent(nextEvent)
+
+        verify(phoneStatusBarViewController).sendTouchToView(nextEvent)
+        assertThat(returnVal).isTrue()
+    }
+
+    @Test
+    fun handleDispatchTouchEvent_downAndPanelCollapsedAndInSbBoundAndSbWindowShow_sendsTouchToSb() {
+        underTest.setStatusBarViewController(phoneStatusBarViewController)
+        whenever(statusBarWindowStateController.windowIsShowing()).thenReturn(true)
+        whenever(notificationPanelViewController.isFullyCollapsed).thenReturn(true)
+        whenever(phoneStatusBarViewController.touchIsWithinView(anyFloat(), anyFloat()))
+            .thenReturn(true)
+        whenever(phoneStatusBarViewController.sendTouchToView(downEv)).thenReturn(true)
+
+        val returnVal = interactionEventHandler.handleDispatchTouchEvent(downEv)
+
+        verify(phoneStatusBarViewController).sendTouchToView(downEv)
+        assertThat(returnVal).isTrue()
+    }
+
+    @Test
+    fun handleDispatchTouchEvent_panelNotCollapsed_returnsNull() {
+        underTest.setStatusBarViewController(phoneStatusBarViewController)
+        whenever(statusBarWindowStateController.windowIsShowing()).thenReturn(true)
+        whenever(phoneStatusBarViewController.touchIsWithinView(anyFloat(), anyFloat()))
+            .thenReturn(true)
+        // Item we're testing
+        whenever(notificationPanelViewController.isFullyCollapsed).thenReturn(false)
+
+        val returnVal = interactionEventHandler.handleDispatchTouchEvent(downEv)
+
+        verify(phoneStatusBarViewController, never()).sendTouchToView(downEv)
+        assertThat(returnVal).isNull()
+    }
+
+    @Test
+    fun handleDispatchTouchEvent_touchNotInSbBounds_returnsNull() {
+        underTest.setStatusBarViewController(phoneStatusBarViewController)
+        whenever(statusBarWindowStateController.windowIsShowing()).thenReturn(true)
+        whenever(notificationPanelViewController.isFullyCollapsed).thenReturn(true)
+        // Item we're testing
+        whenever(phoneStatusBarViewController.touchIsWithinView(anyFloat(), anyFloat()))
+            .thenReturn(false)
+
+        val returnVal = interactionEventHandler.handleDispatchTouchEvent(downEv)
+
+        verify(phoneStatusBarViewController, never()).sendTouchToView(downEv)
+        assertThat(returnVal).isNull()
+    }
+
+    @Test
+    fun handleDispatchTouchEvent_sbWindowNotShowing_noSendTouchToSbAndReturnsTrue() {
+        underTest.setStatusBarViewController(phoneStatusBarViewController)
+        whenever(notificationPanelViewController.isFullyCollapsed).thenReturn(true)
+        whenever(phoneStatusBarViewController.touchIsWithinView(anyFloat(), anyFloat()))
+            .thenReturn(true)
+        // Item we're testing
+        whenever(statusBarWindowStateController.windowIsShowing()).thenReturn(false)
+
+        val returnVal = interactionEventHandler.handleDispatchTouchEvent(downEv)
+
+        verify(phoneStatusBarViewController, never()).sendTouchToView(downEv)
+        assertThat(returnVal).isTrue()
+    }
+
+    @Test
+    fun handleDispatchTouchEvent_downEventSentToSbThenAnotherEvent_sendsTouchToSb() {
+        underTest.setStatusBarViewController(phoneStatusBarViewController)
+        whenever(statusBarWindowStateController.windowIsShowing()).thenReturn(true)
+        whenever(notificationPanelViewController.isFullyCollapsed).thenReturn(true)
+        whenever(phoneStatusBarViewController.touchIsWithinView(anyFloat(), anyFloat()))
+            .thenReturn(true)
+
+        // Down event first
+        interactionEventHandler.handleDispatchTouchEvent(downEv)
+
+        // Then another event
+        val nextEvent = MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_MOVE, 0f, 0f, 0)
+        whenever(phoneStatusBarViewController.sendTouchToView(nextEvent)).thenReturn(true)
+
+        val returnVal = interactionEventHandler.handleDispatchTouchEvent(nextEvent)
+
+        verify(phoneStatusBarViewController).sendTouchToView(nextEvent)
+        assertThat(returnVal).isTrue()
+    }
+
+    @Test
+    fun testLowLightClockAttachedWhenExpandedStatusBarSetup() {
+        verify(lowLightClockController).attachLowLightClockView(ArgumentMatchers.any())
+    }
+
+    @Test
+    fun testLowLightClockShownWhenDozing() {
+        underTest.setDozing(true)
+        verify(lowLightClockController).showLowLightClock(true)
+    }
+
+    @Test
+    fun testLowLightClockDozeTimeTickCalled() {
+        underTest.dozeTimeTick()
+        verify(lowLightClockController).dozeTimeTick()
+    }
+
+    @Test
+    fun testLowLightClockHiddenWhenNotDozing() {
+        underTest.setDozing(true)
+        verify(lowLightClockController).showLowLightClock(true)
+        underTest.setDozing(false)
+        verify(lowLightClockController).showLowLightClock(false)
+    }
+}
+
+private val downEv = MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, 0f, 0f, 0)
+private const val VIEW_BOTTOM = 100
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewTest.java
new file mode 100644
index 0000000..fa16fef
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewTest.java
@@ -0,0 +1,188 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.shade;
+
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.os.SystemClock;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+import android.view.MotionEvent;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.keyguard.LockIconViewController;
+import com.android.systemui.R;
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.classifier.FalsingCollectorFake;
+import com.android.systemui.dock.DockManager;
+import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
+import com.android.systemui.lowlightclock.LowLightClockController;
+import com.android.systemui.statusbar.DragDownHelper;
+import com.android.systemui.statusbar.LockscreenShadeTransitionController;
+import com.android.systemui.statusbar.NotificationShadeDepthController;
+import com.android.systemui.statusbar.NotificationShadeWindowController;
+import com.android.systemui.statusbar.SysuiStatusBarStateController;
+import com.android.systemui.statusbar.notification.stack.AmbientState;
+import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
+import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
+import com.android.systemui.statusbar.phone.CentralSurfaces;
+import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
+import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
+import com.android.systemui.statusbar.window.StatusBarWindowStateController;
+import com.android.systemui.tuner.TunerService;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.Optional;
+
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper(setAsMainLooper = true)
+@SmallTest
+public class NotificationShadeWindowViewTest extends SysuiTestCase {
+
+    private NotificationShadeWindowView mView;
+    private NotificationShadeWindowViewController mController;
+
+    @Mock private TunerService mTunerService;
+    @Mock private DragDownHelper mDragDownHelper;
+    @Mock private SysuiStatusBarStateController mStatusBarStateController;
+    @Mock private ShadeController mShadeController;
+    @Mock private CentralSurfaces mCentralSurfaces;
+    @Mock private DockManager mDockManager;
+    @Mock private NotificationPanelViewController mNotificationPanelViewController;
+    @Mock private NotificationStackScrollLayout mNotificationStackScrollLayout;
+    @Mock private NotificationShadeDepthController mNotificationShadeDepthController;
+    @Mock private NotificationShadeWindowController mNotificationShadeWindowController;
+    @Mock private NotificationStackScrollLayoutController mNotificationStackScrollLayoutController;
+    @Mock private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
+    @Mock private StatusBarWindowStateController mStatusBarWindowStateController;
+    @Mock private LockscreenShadeTransitionController mLockscreenShadeTransitionController;
+    @Mock private LockIconViewController mLockIconViewController;
+    @Mock private LowLightClockController mLowLightClockController;
+    @Mock private KeyguardUnlockAnimationController mKeyguardUnlockAnimationController;
+    @Mock private AmbientState mAmbientState;
+
+    @Captor private ArgumentCaptor<NotificationShadeWindowView.InteractionEventHandler>
+            mInteractionEventHandlerCaptor;
+    private NotificationShadeWindowView.InteractionEventHandler mInteractionEventHandler;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        mView = spy(new NotificationShadeWindowView(getContext(), null));
+        when(mView.findViewById(R.id.notification_stack_scroller))
+                .thenReturn(mNotificationStackScrollLayout);
+
+        when(mStatusBarStateController.isDozing()).thenReturn(false);
+        mDependency.injectTestDependency(ShadeController.class, mShadeController);
+
+        when(mDockManager.isDocked()).thenReturn(false);
+
+        mController = new NotificationShadeWindowViewController(
+                mLockscreenShadeTransitionController,
+                new FalsingCollectorFake(),
+                mTunerService,
+                mStatusBarStateController,
+                mDockManager,
+                mNotificationShadeDepthController,
+                mView,
+                mNotificationPanelViewController,
+                new PanelExpansionStateManager(),
+                mNotificationStackScrollLayoutController,
+                mStatusBarKeyguardViewManager,
+                mStatusBarWindowStateController,
+                mLockIconViewController,
+                Optional.of(mLowLightClockController),
+                mCentralSurfaces,
+                mNotificationShadeWindowController,
+                mKeyguardUnlockAnimationController,
+                mAmbientState);
+        mController.setupExpandedStatusBar();
+        mController.setDragDownHelper(mDragDownHelper);
+    }
+
+    @Test
+    public void testDragDownHelperCalledWhenDraggingDown() {
+        when(mDragDownHelper.isDraggingDown()).thenReturn(true);
+        long now = SystemClock.elapsedRealtime();
+        MotionEvent ev = MotionEvent.obtain(now, now, MotionEvent.ACTION_UP, 0 /* x */, 0 /* y */,
+                0 /* meta */);
+        mView.onTouchEvent(ev);
+        verify(mDragDownHelper).onTouchEvent(ev);
+        ev.recycle();
+    }
+
+    @Test
+    public void testInterceptTouchWhenShowingAltAuth() {
+        captureInteractionEventHandler();
+
+        // WHEN showing alt auth, not dozing, drag down helper doesn't want to intercept
+        when(mStatusBarStateController.isDozing()).thenReturn(false);
+        when(mStatusBarKeyguardViewManager.isShowingAlternateAuthOrAnimating()).thenReturn(true);
+        when(mDragDownHelper.onInterceptTouchEvent(any())).thenReturn(false);
+
+        // THEN we should intercept touch
+        assertTrue(mInteractionEventHandler.shouldInterceptTouchEvent(mock(MotionEvent.class)));
+    }
+
+    @Test
+    public void testNoInterceptTouch() {
+        captureInteractionEventHandler();
+
+        // WHEN not showing alt auth, not dozing, drag down helper doesn't want to intercept
+        when(mStatusBarStateController.isDozing()).thenReturn(false);
+        when(mStatusBarKeyguardViewManager.isShowingAlternateAuthOrAnimating()).thenReturn(false);
+        when(mDragDownHelper.onInterceptTouchEvent(any())).thenReturn(false);
+
+        // THEN we shouldn't intercept touch
+        assertFalse(mInteractionEventHandler.shouldInterceptTouchEvent(mock(MotionEvent.class)));
+    }
+
+    @Test
+    public void testHandleTouchEventWhenShowingAltAuth() {
+        captureInteractionEventHandler();
+
+        // WHEN showing alt auth, not dozing, drag down helper doesn't want to intercept
+        when(mStatusBarStateController.isDozing()).thenReturn(false);
+        when(mStatusBarKeyguardViewManager.isShowingAlternateAuthOrAnimating()).thenReturn(true);
+        when(mDragDownHelper.onInterceptTouchEvent(any())).thenReturn(false);
+
+        // THEN we should handle the touch
+        assertTrue(mInteractionEventHandler.handleTouchEvent(mock(MotionEvent.class)));
+    }
+
+    private void captureInteractionEventHandler() {
+        verify(mView).setInteractionEventHandler(mInteractionEventHandlerCaptor.capture());
+        mInteractionEventHandler = mInteractionEventHandlerCaptor.getValue();
+
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/transition/ScrimShadeTransitionControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/transition/ScrimShadeTransitionControllerTest.kt
new file mode 100644
index 0000000..baaa447
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/transition/ScrimShadeTransitionControllerTest.kt
@@ -0,0 +1,151 @@
+package com.android.systemui.shade.transition
+
+import android.testing.AndroidTestingRunner
+import androidx.test.filters.SmallTest
+import com.android.systemui.R
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.dump.DumpManager
+import com.android.systemui.statusbar.StatusBarState
+import com.android.systemui.statusbar.SysuiStatusBarStateController
+import com.android.systemui.statusbar.phone.ScrimController
+import com.android.systemui.statusbar.phone.panelstate.PanelExpansionChangeEvent
+import com.android.systemui.statusbar.phone.panelstate.STATE_CLOSED
+import com.android.systemui.statusbar.phone.panelstate.STATE_OPEN
+import com.android.systemui.statusbar.phone.panelstate.STATE_OPENING
+import com.android.systemui.statusbar.policy.FakeConfigurationController
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when` as whenever
+import org.mockito.MockitoAnnotations
+
+@RunWith(AndroidTestingRunner::class)
+@SmallTest
+class ScrimShadeTransitionControllerTest : SysuiTestCase() {
+
+    @Mock private lateinit var scrimController: ScrimController
+    @Mock private lateinit var dumpManager: DumpManager
+    @Mock private lateinit var statusBarStateController: SysuiStatusBarStateController
+    private val configurationController = FakeConfigurationController()
+
+    private lateinit var controller: ScrimShadeTransitionController
+
+    @Before
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+        context.ensureTestableResources()
+        controller =
+            ScrimShadeTransitionController(
+                configurationController,
+                dumpManager,
+                scrimController,
+                context.resources,
+                statusBarStateController)
+
+        controller.onPanelStateChanged(STATE_OPENING)
+    }
+
+    @Test
+    fun onPanelExpansionChanged_inSingleShade_setsFractionEqualToEventFraction() {
+        setSplitShadeEnabled(false)
+
+        controller.onPanelExpansionChanged(EXPANSION_EVENT)
+
+        verify(scrimController).setRawPanelExpansionFraction(EXPANSION_EVENT.fraction)
+    }
+
+    @Test
+    fun onPanelExpansionChanged_inSplitShade_unlockedShade_setsFractionBasedOnDragDownAmount() {
+        whenever(statusBarStateController.currentOrUpcomingState).thenReturn(StatusBarState.SHADE)
+        val scrimShadeTransitionDistance =
+            context.resources.getDimensionPixelSize(R.dimen.split_shade_scrim_transition_distance)
+        setSplitShadeEnabled(true)
+
+        controller.onPanelExpansionChanged(EXPANSION_EVENT)
+
+        val expectedFraction = EXPANSION_EVENT.dragDownPxAmount / scrimShadeTransitionDistance
+        verify(scrimController).setRawPanelExpansionFraction(expectedFraction)
+    }
+
+    @Test
+    fun onPanelExpansionChanged_inSplitShade_largeDragDownAmount_fractionIsNotGreaterThan1() {
+        whenever(statusBarStateController.currentOrUpcomingState).thenReturn(StatusBarState.SHADE)
+        val scrimShadeTransitionDistance =
+            context.resources.getDimensionPixelSize(R.dimen.split_shade_scrim_transition_distance)
+        setSplitShadeEnabled(true)
+
+        controller.onPanelExpansionChanged(
+            EXPANSION_EVENT.copy(dragDownPxAmount = 100f * scrimShadeTransitionDistance))
+
+        verify(scrimController).setRawPanelExpansionFraction(1f)
+    }
+
+    @Test
+    fun onPanelExpansionChanged_inSplitShade_negativeDragDownAmount_fractionIsNotLessThan0() {
+        whenever(statusBarStateController.currentOrUpcomingState).thenReturn(StatusBarState.SHADE)
+        setSplitShadeEnabled(true)
+
+        controller.onPanelExpansionChanged(EXPANSION_EVENT.copy(dragDownPxAmount = -100f))
+
+        verify(scrimController).setRawPanelExpansionFraction(0f)
+    }
+
+    @Test
+    fun onPanelExpansionChanged_inSplitShade_onLockedShade_setsFractionEqualToEventFraction() {
+        whenever(statusBarStateController.currentOrUpcomingState)
+            .thenReturn(StatusBarState.SHADE_LOCKED)
+        setSplitShadeEnabled(true)
+
+        controller.onPanelExpansionChanged(EXPANSION_EVENT)
+
+        verify(scrimController).setRawPanelExpansionFraction(EXPANSION_EVENT.fraction)
+    }
+
+    @Test
+    fun onPanelExpansionChanged_inSplitShade_onKeyguard_setsFractionEqualToEventFraction() {
+        whenever(statusBarStateController.currentOrUpcomingState)
+            .thenReturn(StatusBarState.KEYGUARD)
+        setSplitShadeEnabled(true)
+
+        controller.onPanelExpansionChanged(EXPANSION_EVENT)
+
+        verify(scrimController).setRawPanelExpansionFraction(EXPANSION_EVENT.fraction)
+    }
+
+    @Test
+    fun onPanelExpansionChanged_inSplitShade_panelOpen_setsFractionEqualToEventFraction() {
+        controller.onPanelStateChanged(STATE_OPEN)
+        whenever(statusBarStateController.currentOrUpcomingState)
+            .thenReturn(StatusBarState.KEYGUARD)
+        setSplitShadeEnabled(true)
+
+        controller.onPanelExpansionChanged(EXPANSION_EVENT)
+
+        verify(scrimController).setRawPanelExpansionFraction(EXPANSION_EVENT.fraction)
+    }
+
+    @Test
+    fun onPanelExpansionChanged_inSplitShade_panelClosed_setsFractionEqualToEventFraction() {
+        controller.onPanelStateChanged(STATE_CLOSED)
+        whenever(statusBarStateController.currentOrUpcomingState)
+            .thenReturn(StatusBarState.KEYGUARD)
+        setSplitShadeEnabled(true)
+
+        controller.onPanelExpansionChanged(EXPANSION_EVENT)
+
+        verify(scrimController).setRawPanelExpansionFraction(EXPANSION_EVENT.fraction)
+    }
+
+    private fun setSplitShadeEnabled(enabled: Boolean) {
+        overrideResource(R.bool.config_use_split_notification_shade, enabled)
+        configurationController.notifyConfigurationChanged()
+    }
+
+    companion object {
+        val EXPANSION_EVENT =
+            PanelExpansionChangeEvent(
+                fraction = 0.5f, expanded = true, tracking = true, dragDownPxAmount = 10f)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/transition/ShadeTransitionControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/transition/ShadeTransitionControllerTest.kt
new file mode 100644
index 0000000..b6f8326
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/transition/ShadeTransitionControllerTest.kt
@@ -0,0 +1,203 @@
+package com.android.systemui.shade.transition
+
+import android.testing.AndroidTestingRunner
+import androidx.test.filters.SmallTest
+import com.android.systemui.R
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.dump.DumpManager
+import com.android.systemui.plugins.qs.QS
+import com.android.systemui.shade.NotificationPanelViewController
+import com.android.systemui.statusbar.StatusBarState
+import com.android.systemui.statusbar.SysuiStatusBarStateController
+import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
+import com.android.systemui.statusbar.phone.panelstate.PanelExpansionChangeEvent
+import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager
+import com.android.systemui.statusbar.phone.panelstate.STATE_OPENING
+import com.android.systemui.statusbar.policy.FakeConfigurationController
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.reset
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyZeroInteractions
+import org.mockito.Mockito.`when` as whenever
+import org.mockito.MockitoAnnotations
+
+@RunWith(AndroidTestingRunner::class)
+@SmallTest
+class ShadeTransitionControllerTest : SysuiTestCase() {
+
+    @Mock private lateinit var npvc: NotificationPanelViewController
+    @Mock private lateinit var nsslController: NotificationStackScrollLayoutController
+    @Mock private lateinit var qs: QS
+    @Mock private lateinit var noOpOverScroller: NoOpOverScroller
+    @Mock private lateinit var splitShadeOverScroller: SplitShadeOverScroller
+    @Mock private lateinit var scrimShadeTransitionController: ScrimShadeTransitionController
+    @Mock private lateinit var dumpManager: DumpManager
+    @Mock private lateinit var statusBarStateController: SysuiStatusBarStateController
+
+    private lateinit var controller: ShadeTransitionController
+
+    private val configurationController = FakeConfigurationController()
+    private val panelExpansionStateManager = PanelExpansionStateManager()
+
+    @Before
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+
+        controller =
+            ShadeTransitionController(
+                configurationController,
+                panelExpansionStateManager,
+                dumpManager,
+                context,
+                splitShadeOverScrollerFactory = { _, _ -> splitShadeOverScroller },
+                noOpOverScroller,
+                scrimShadeTransitionController,
+                statusBarStateController,
+            )
+
+        // Resetting as they are notified upon initialization.
+        reset(noOpOverScroller, splitShadeOverScroller)
+    }
+
+    @Test
+    fun onPanelExpansionChanged_inSplitShade_forwardsToSplitShadeOverScroller() {
+        initLateProperties()
+        enableSplitShade()
+
+        startPanelExpansion()
+
+        verify(splitShadeOverScroller).onPanelStateChanged(STATE_OPENING)
+        verify(splitShadeOverScroller).onDragDownAmountChanged(DEFAULT_DRAG_DOWN_AMOUNT)
+        verifyZeroInteractions(noOpOverScroller)
+    }
+
+    @Test
+    fun onPanelStateChanged_inSplitShade_propertiesNotInitialized_forwardsToNoOpOverScroller() {
+        enableSplitShade()
+
+        startPanelExpansion()
+
+        verify(noOpOverScroller).onPanelStateChanged(STATE_OPENING)
+        verify(noOpOverScroller).onDragDownAmountChanged(DEFAULT_DRAG_DOWN_AMOUNT)
+        verifyZeroInteractions(splitShadeOverScroller)
+    }
+
+    @Test
+    fun onPanelStateChanged_inSplitShade_onKeyguard_forwardsToNoOpOverScroller() {
+        initLateProperties()
+        enableSplitShade()
+        setOnKeyguard()
+
+        startPanelExpansion()
+
+        verify(noOpOverScroller).onPanelStateChanged(STATE_OPENING)
+        verify(noOpOverScroller).onDragDownAmountChanged(DEFAULT_DRAG_DOWN_AMOUNT)
+        verifyZeroInteractions(splitShadeOverScroller)
+    }
+
+    @Test
+    fun onPanelStateChanged_inSplitShade_onLockedShade_forwardsToNoOpOverScroller() {
+        initLateProperties()
+        enableSplitShade()
+        setOnLockedShade()
+
+        startPanelExpansion()
+
+        verify(noOpOverScroller).onPanelStateChanged(STATE_OPENING)
+        verify(noOpOverScroller).onDragDownAmountChanged(DEFAULT_DRAG_DOWN_AMOUNT)
+        verifyZeroInteractions(splitShadeOverScroller)
+    }
+
+    @Test
+    fun onPanelExpansionChanged_inSplitShade_onUnlockedShade_forwardsToSplitShadeOverScroller() {
+        initLateProperties()
+        enableSplitShade()
+        setOnUnlockedShade()
+
+        startPanelExpansion()
+
+        verify(splitShadeOverScroller).onPanelStateChanged(STATE_OPENING)
+        verify(splitShadeOverScroller).onDragDownAmountChanged(DEFAULT_DRAG_DOWN_AMOUNT)
+        verifyZeroInteractions(noOpOverScroller)
+    }
+
+    @Test
+    fun onPanelStateChanged_notInSplitShade_forwardsToNoOpOverScroller() {
+        initLateProperties()
+        disableSplitShade()
+
+        startPanelExpansion()
+
+        verify(noOpOverScroller).onPanelStateChanged(STATE_OPENING)
+        verify(noOpOverScroller).onDragDownAmountChanged(DEFAULT_DRAG_DOWN_AMOUNT)
+        verifyZeroInteractions(splitShadeOverScroller)
+    }
+
+    @Test
+    fun onPanelStateChanged_forwardsToScrimTransitionController() {
+        initLateProperties()
+
+        startPanelExpansion()
+
+        verify(scrimShadeTransitionController).onPanelStateChanged(STATE_OPENING)
+        verify(scrimShadeTransitionController).onPanelExpansionChanged(DEFAULT_EXPANSION_EVENT)
+    }
+
+    private fun initLateProperties() {
+        controller.qs = qs
+        controller.notificationStackScrollLayoutController = nsslController
+        controller.notificationPanelViewController = npvc
+    }
+
+    private fun disableSplitShade() {
+        setSplitShadeEnabled(false)
+    }
+
+    private fun enableSplitShade() {
+        setSplitShadeEnabled(true)
+    }
+
+    private fun setSplitShadeEnabled(enabled: Boolean) {
+        overrideResource(R.bool.config_use_split_notification_shade, enabled)
+        configurationController.notifyConfigurationChanged()
+    }
+
+    private fun startPanelExpansion() {
+        panelExpansionStateManager.onPanelExpansionChanged(
+            DEFAULT_EXPANSION_EVENT.fraction,
+            DEFAULT_EXPANSION_EVENT.expanded,
+            DEFAULT_EXPANSION_EVENT.tracking,
+            DEFAULT_EXPANSION_EVENT.dragDownPxAmount,
+        )
+    }
+
+    private fun setOnKeyguard() {
+        setShadeState(StatusBarState.KEYGUARD)
+    }
+
+    private fun setOnLockedShade() {
+        setShadeState(StatusBarState.SHADE_LOCKED)
+    }
+
+    private fun setOnUnlockedShade() {
+        setShadeState(StatusBarState.SHADE)
+    }
+
+    private fun setShadeState(state: Int) {
+        whenever(statusBarStateController.state).thenReturn(state)
+        whenever(statusBarStateController.currentOrUpcomingState).thenReturn(state)
+    }
+
+    companion object {
+        private const val DEFAULT_DRAG_DOWN_AMOUNT = 123f
+        private val DEFAULT_EXPANSION_EVENT =
+            PanelExpansionChangeEvent(
+                fraction = 0.5f,
+                expanded = true,
+                tracking = true,
+                dragDownPxAmount = DEFAULT_DRAG_DOWN_AMOUNT)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/transition/SplitShadeOverScrollerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/transition/SplitShadeOverScrollerTest.kt
new file mode 100644
index 0000000..aafd871
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/transition/SplitShadeOverScrollerTest.kt
@@ -0,0 +1,112 @@
+package com.android.systemui.shade.transition
+
+import android.testing.AndroidTestingRunner
+import android.testing.TestableLooper
+import androidx.test.filters.SmallTest
+import com.android.systemui.R
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.dump.DumpManager
+import com.android.systemui.plugins.qs.QS
+import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
+import com.android.systemui.statusbar.phone.ScrimController
+import com.android.systemui.statusbar.phone.panelstate.STATE_CLOSED
+import com.android.systemui.statusbar.phone.panelstate.STATE_OPEN
+import com.android.systemui.statusbar.phone.panelstate.STATE_OPENING
+import com.android.systemui.statusbar.policy.FakeConfigurationController
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.atLeastOnce
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyZeroInteractions
+import org.mockito.Mockito.`when` as whenever
+import org.mockito.MockitoAnnotations
+
+@RunWith(AndroidTestingRunner::class)
+@TestableLooper.RunWithLooper(setAsMainLooper = true)
+@SmallTest
+class SplitShadeOverScrollerTest : SysuiTestCase() {
+
+    @Mock private lateinit var dumpManager: DumpManager
+    @Mock private lateinit var scrimController: ScrimController
+    @Mock private lateinit var qs: QS
+    @Mock private lateinit var nsslController: NotificationStackScrollLayoutController
+
+    private val configurationController = FakeConfigurationController()
+    private lateinit var overScroller: SplitShadeOverScroller
+
+    @Before
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+
+        whenever(nsslController.height).thenReturn(1000)
+        overScroller =
+            SplitShadeOverScroller(
+                configurationController,
+                dumpManager,
+                context,
+                scrimController,
+                { qs },
+                { nsslController })
+    }
+
+    @Test
+    fun onDragDownAmountChanged_panelOpening_overScrolls_basedOnHeightAndMaxAmount() {
+        val maxOverScrollAmount = 50
+        val dragDownAmount = 100f
+        overrideResource(R.dimen.shade_max_over_scroll_amount, maxOverScrollAmount)
+        configurationController.notifyConfigurationChanged()
+
+        overScroller.onPanelStateChanged(STATE_OPENING)
+        overScroller.onDragDownAmountChanged(dragDownAmount)
+
+        val expectedOverScrollAmount =
+            (dragDownAmount / nsslController.height * maxOverScrollAmount).toInt()
+        verify(qs).setOverScrollAmount(expectedOverScrollAmount)
+        verify(nsslController).setOverScrollAmount(expectedOverScrollAmount)
+        verify(scrimController).setNotificationsOverScrollAmount(expectedOverScrollAmount)
+    }
+
+    @Test
+    fun onDragDownAmountChanged_panelClosed_doesNotOverScroll() {
+        overScroller.onPanelStateChanged(STATE_CLOSED)
+        overScroller.onDragDownAmountChanged(100f)
+
+        verifyZeroInteractions(qs, scrimController, nsslController)
+    }
+
+    @Test
+    fun onDragDownAmountChanged_panelOpen_doesNotOverScroll() {
+        overScroller.onPanelStateChanged(STATE_OPEN)
+        overScroller.onDragDownAmountChanged(100f)
+
+        verifyZeroInteractions(qs, scrimController, nsslController)
+    }
+
+    @Test
+    fun onPanelStateChanged_opening_thenOpen_releasesOverScroll() {
+        overScroller.onPanelStateChanged(STATE_OPENING)
+        overScroller.onDragDownAmountChanged(100f)
+
+        overScroller.onPanelStateChanged(STATE_OPEN)
+        overScroller.finishAnimations()
+
+        verify(qs, atLeastOnce()).setOverScrollAmount(0)
+        verify(scrimController, atLeastOnce()).setNotificationsOverScrollAmount(0)
+        verify(nsslController, atLeastOnce()).setOverScrollAmount(0)
+    }
+
+    @Test
+    fun onPanelStateChanged_opening_thenClosed_releasesOverScroll() {
+        overScroller.onPanelStateChanged(STATE_OPENING)
+        overScroller.onDragDownAmountChanged(100f)
+
+        overScroller.onPanelStateChanged(STATE_CLOSED)
+        overScroller.finishAnimations()
+
+        verify(qs, atLeastOnce()).setOverScrollAmount(0)
+        verify(scrimController, atLeastOnce()).setNotificationsOverScrollAmount(0)
+        verify(nsslController, atLeastOnce()).setOverScrollAmount(0)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shared/animation/UnfoldConstantTranslateAnimatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shared/animation/UnfoldConstantTranslateAnimatorTest.kt
index 3231415..a4a89a4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shared/animation/UnfoldConstantTranslateAnimatorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/shared/animation/UnfoldConstantTranslateAnimatorTest.kt
@@ -1,3 +1,17 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT 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.shared.animation
 
 import android.testing.AndroidTestingRunner
@@ -7,31 +21,24 @@
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.shared.animation.UnfoldConstantTranslateAnimator.Direction
 import com.android.systemui.shared.animation.UnfoldConstantTranslateAnimator.ViewIdToTranslate
-import com.android.systemui.unfold.UnfoldTransitionProgressProvider
-import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener
+import com.android.systemui.unfold.TestUnfoldTransitionProvider
 import org.junit.Assert.assertEquals
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
-import org.mockito.ArgumentCaptor
-import org.mockito.Captor
 import org.mockito.Mock
-import org.mockito.Mockito.verify
-import org.mockito.Mockito.`when` as whenever
 import org.mockito.MockitoAnnotations
+import org.mockito.Mockito.`when` as whenever
 
 @SmallTest
 @RunWith(AndroidTestingRunner::class)
 class UnfoldConstantTranslateAnimatorTest : SysuiTestCase() {
 
-    @Mock private lateinit var progressProvider: UnfoldTransitionProgressProvider
+    private val progressProvider = TestUnfoldTransitionProvider()
 
     @Mock private lateinit var parent: ViewGroup
 
-    @Captor private lateinit var progressListenerCaptor: ArgumentCaptor<TransitionProgressListener>
-
     private lateinit var animator: UnfoldConstantTranslateAnimator
-    private lateinit var progressListener: TransitionProgressListener
 
     private val viewsIdToRegister =
         setOf(
@@ -46,17 +53,14 @@
             UnfoldConstantTranslateAnimator(viewsIdToRegister, progressProvider)
 
         animator.init(parent, MAX_TRANSLATION)
-
-        verify(progressProvider).addCallback(progressListenerCaptor.capture())
-        progressListener = progressListenerCaptor.value
     }
 
     @Test
     fun onTransition_noMatchingIds() {
         // GIVEN no views matching any ids
         // WHEN the transition starts
-        progressListener.onTransitionStarted()
-        progressListener.onTransitionProgress(.1f)
+        progressProvider.onTransitionStarted()
+        progressProvider.onTransitionProgress(.1f)
 
         // THEN nothing... no exceptions
     }
@@ -86,22 +90,22 @@
         // Compare values as ints because -0f != 0f
 
         // WHEN the transition starts
-        progressListener.onTransitionStarted()
-        progressListener.onTransitionProgress(0f)
+        progressProvider.onTransitionStarted()
+        progressProvider.onTransitionProgress(0f)
 
         list.forEach { (view, direction) ->
             assertEquals((-MAX_TRANSLATION * direction).toInt(), view.translationX.toInt())
         }
 
         // WHEN the transition progresses, translation is updated
-        progressListener.onTransitionProgress(.5f)
+        progressProvider.onTransitionProgress(.5f)
         list.forEach { (view, direction) ->
             assertEquals((-MAX_TRANSLATION / 2f * direction).toInt(), view.translationX.toInt())
         }
 
         // WHEN the transition ends, translation is completed
-        progressListener.onTransitionProgress(1f)
-        progressListener.onTransitionFinished()
+        progressProvider.onTransitionProgress(1f)
+        progressProvider.onTransitionFinished()
         list.forEach { (view, _) -> assertEquals(0, view.translationX.toInt()) }
     }
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/ClockRegistryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/ClockRegistryTest.kt
new file mode 100644
index 0000000..1cbb8d0
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/ClockRegistryTest.kt
@@ -0,0 +1,233 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.shared.clocks
+
+import android.content.ContentResolver
+import android.content.Context
+import android.graphics.drawable.Drawable
+import android.os.Handler
+import android.testing.AndroidTestingRunner
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.plugins.Clock
+import com.android.systemui.plugins.ClockId
+import com.android.systemui.plugins.ClockMetadata
+import com.android.systemui.plugins.ClockProviderPlugin
+import com.android.systemui.plugins.PluginListener
+import com.android.systemui.shared.plugins.PluginManager
+import com.android.systemui.util.mockito.argumentCaptor
+import com.android.systemui.util.mockito.eq
+import junit.framework.Assert.assertEquals
+import junit.framework.Assert.fail
+import org.junit.Before
+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.Mockito.`when` as whenever
+import org.mockito.junit.MockitoJUnit
+
+@RunWith(AndroidTestingRunner::class)
+@SmallTest
+class ClockRegistryTest : SysuiTestCase() {
+
+    @JvmField @Rule val mockito = MockitoJUnit.rule()
+    @Mock private lateinit var mockContext: Context
+    @Mock private lateinit var mockPluginManager: PluginManager
+    @Mock private lateinit var mockClock: Clock
+    @Mock private lateinit var mockDefaultClock: Clock
+    @Mock private lateinit var mockThumbnail: Drawable
+    @Mock private lateinit var mockHandler: Handler
+    @Mock private lateinit var mockContentResolver: ContentResolver
+    private lateinit var fakeDefaultProvider: FakeClockPlugin
+    private lateinit var pluginListener: PluginListener<ClockProviderPlugin>
+    private lateinit var registry: ClockRegistry
+
+    private var settingValue: String = ""
+
+    companion object {
+        private fun failFactory(): Clock {
+            fail("Unexpected call to createClock")
+            return null!!
+        }
+
+        private fun failThumbnail(): Drawable? {
+            fail("Unexpected call to getThumbnail")
+            return null
+        }
+    }
+
+    private class FakeClockPlugin : ClockProviderPlugin {
+        private val metadata = mutableListOf<ClockMetadata>()
+        private val createCallbacks = mutableMapOf<ClockId, () -> Clock>()
+        private val thumbnailCallbacks = mutableMapOf<ClockId, () -> Drawable?>()
+
+        override fun getClocks() = metadata
+        override fun createClock(id: ClockId): Clock = createCallbacks[id]!!()
+        override fun getClockThumbnail(id: ClockId): Drawable? = thumbnailCallbacks[id]!!()
+
+        fun addClock(
+            id: ClockId,
+            name: String,
+            create: () -> Clock = ::failFactory,
+            getThumbnail: () -> Drawable? = ::failThumbnail
+        ): FakeClockPlugin {
+            metadata.add(ClockMetadata(id, name))
+            createCallbacks[id] = create
+            thumbnailCallbacks[id] = getThumbnail
+            return this
+        }
+    }
+
+    @Before
+    fun setUp() {
+        fakeDefaultProvider = FakeClockPlugin()
+            .addClock(DEFAULT_CLOCK_ID, DEFAULT_CLOCK_NAME, { mockDefaultClock }, { mockThumbnail })
+        whenever(mockContext.contentResolver).thenReturn(mockContentResolver)
+
+        val captor = argumentCaptor<PluginListener<ClockProviderPlugin>>()
+        registry = object : ClockRegistry(
+            mockContext,
+            mockPluginManager,
+            mockHandler,
+            fakeDefaultProvider
+        ) {
+            override var currentClockId: ClockId
+                get() = settingValue
+                set(value) { settingValue = value }
+        }
+        registry.isEnabled = true
+
+        verify(mockPluginManager)
+            .addPluginListener(captor.capture(), eq(ClockProviderPlugin::class.java))
+        pluginListener = captor.value
+    }
+
+    @Test
+    fun pluginRegistration_CorrectState() {
+        val plugin1 = FakeClockPlugin()
+            .addClock("clock_1", "clock 1")
+            .addClock("clock_2", "clock 2")
+
+        val plugin2 = FakeClockPlugin()
+            .addClock("clock_3", "clock 3")
+            .addClock("clock_4", "clock 4")
+
+        pluginListener.onPluginConnected(plugin1, mockContext)
+        pluginListener.onPluginConnected(plugin2, mockContext)
+        val list = registry.getClocks()
+        assertEquals(list, listOf(
+            ClockMetadata(DEFAULT_CLOCK_ID, DEFAULT_CLOCK_NAME),
+            ClockMetadata("clock_1", "clock 1"),
+            ClockMetadata("clock_2", "clock 2"),
+            ClockMetadata("clock_3", "clock 3"),
+            ClockMetadata("clock_4", "clock 4")
+        ))
+    }
+
+    @Test
+    fun noPlugins_createDefaultClock() {
+        val clock = registry.createCurrentClock()
+        assertEquals(clock, mockDefaultClock)
+    }
+
+    @Test
+    fun clockIdConflict_ErrorWithoutCrash() {
+        val plugin1 = FakeClockPlugin()
+            .addClock("clock_1", "clock 1", { mockClock }, { mockThumbnail })
+            .addClock("clock_2", "clock 2", { mockClock }, { mockThumbnail })
+
+        val plugin2 = FakeClockPlugin()
+            .addClock("clock_1", "clock 1")
+            .addClock("clock_2", "clock 2")
+
+        pluginListener.onPluginConnected(plugin1, mockContext)
+        pluginListener.onPluginConnected(plugin2, mockContext)
+        val list = registry.getClocks()
+        assertEquals(list, listOf(
+            ClockMetadata(DEFAULT_CLOCK_ID, DEFAULT_CLOCK_NAME),
+            ClockMetadata("clock_1", "clock 1"),
+            ClockMetadata("clock_2", "clock 2")
+        ))
+
+        assertEquals(registry.createExampleClock("clock_1"), mockClock)
+        assertEquals(registry.createExampleClock("clock_2"), mockClock)
+        assertEquals(registry.getClockThumbnail("clock_1"), mockThumbnail)
+        assertEquals(registry.getClockThumbnail("clock_2"), mockThumbnail)
+    }
+
+    @Test
+    fun createCurrentClock_pluginConnected() {
+        val plugin1 = FakeClockPlugin()
+            .addClock("clock_1", "clock 1")
+            .addClock("clock_2", "clock 2")
+
+        settingValue = "clock_3"
+        val plugin2 = FakeClockPlugin()
+            .addClock("clock_3", "clock 3", { mockClock })
+            .addClock("clock_4", "clock 4")
+
+        pluginListener.onPluginConnected(plugin1, mockContext)
+        pluginListener.onPluginConnected(plugin2, mockContext)
+
+        val clock = registry.createCurrentClock()
+        assertEquals(clock, mockClock)
+    }
+
+    @Test
+    fun createDefaultClock_pluginDisconnected() {
+        val plugin1 = FakeClockPlugin()
+            .addClock("clock_1", "clock 1")
+            .addClock("clock_2", "clock 2")
+
+        settingValue = "clock_3"
+        val plugin2 = FakeClockPlugin()
+            .addClock("clock_3", "clock 3")
+            .addClock("clock_4", "clock 4")
+
+        pluginListener.onPluginConnected(plugin1, mockContext)
+        pluginListener.onPluginConnected(plugin2, mockContext)
+        pluginListener.onPluginDisconnected(plugin2)
+
+        val clock = registry.createCurrentClock()
+        assertEquals(clock, mockDefaultClock)
+    }
+
+    @Test
+    fun pluginRemoved_clockChanged() {
+        val plugin1 = FakeClockPlugin()
+            .addClock("clock_1", "clock 1")
+            .addClock("clock_2", "clock 2")
+
+        settingValue = "clock_3"
+        val plugin2 = FakeClockPlugin()
+            .addClock("clock_3", "clock 3", { mockClock })
+            .addClock("clock_4", "clock 4")
+
+        pluginListener.onPluginConnected(plugin1, mockContext)
+        pluginListener.onPluginConnected(plugin2, mockContext)
+
+        var changeCallCount = 0
+        registry.registerClockChangeListener({ changeCallCount++ })
+
+        pluginListener.onPluginDisconnected(plugin1)
+        assertEquals(0, changeCallCount)
+
+        pluginListener.onPluginDisconnected(plugin2)
+        assertEquals(1, changeCallCount)
+    }
+}
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
new file mode 100644
index 0000000..7869448
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/DefaultClockProviderTest.kt
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.shared.clocks
+
+import android.content.res.Resources
+import android.graphics.drawable.Drawable
+import android.testing.AndroidTestingRunner
+import android.view.LayoutInflater
+import androidx.test.filters.SmallTest
+import com.android.systemui.R
+import com.android.systemui.SysuiTestCase
+import junit.framework.Assert.assertEquals
+import junit.framework.Assert.assertNotNull
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.`when` as whenever
+import org.mockito.junit.MockitoJUnit
+
+@RunWith(AndroidTestingRunner::class)
+@SmallTest
+class DefaultClockProviderTest : SysuiTestCase() {
+
+    @JvmField @Rule val mockito = MockitoJUnit.rule()
+
+    @Mock private lateinit var mockClockView: AnimatableClockView
+    @Mock private lateinit var layoutInflater: LayoutInflater
+    @Mock private lateinit var mockClockThumbnail: Drawable
+    @Mock private lateinit var resources: Resources
+    private lateinit var provider: DefaultClockProvider
+
+    @Before
+    fun setUp() {
+        whenever(layoutInflater.inflate(R.layout.clock_default_small, null))
+            .thenReturn(mockClockView)
+        whenever(layoutInflater.inflate(R.layout.clock_default_large, null))
+            .thenReturn(mockClockView)
+        whenever(resources.getDrawable(R.drawable.clock_default_thumbnail, null))
+            .thenReturn(mockClockThumbnail)
+
+        provider = DefaultClockProvider(layoutInflater, resources)
+    }
+
+    @Test
+    fun providedClocks_matchesFactory() {
+        // All providers need to provide clocks & thumbnails for exposed clocks
+        for (metadata in provider.getClocks()) {
+            assertNotNull(provider.createClock(metadata.clockId))
+            assertNotNull(provider.getClockThumbnail(metadata.clockId))
+        }
+    }
+
+    @Test
+    fun defaultClock_alwaysProvided() {
+        // Default clock provider must always provide the default clock
+        val clock = provider.createClock(DEFAULT_CLOCK_ID)
+        assertNotNull(clock)
+        assertEquals(clock.smallClock, mockClockView)
+        assertEquals(clock.largeClock, mockClockView)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/smartspace/DreamSmartspaceControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/smartspace/DreamSmartspaceControllerTest.kt
index 2cfe6be..37f96c8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/smartspace/DreamSmartspaceControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/smartspace/DreamSmartspaceControllerTest.kt
@@ -26,8 +26,9 @@
 import android.view.ViewGroup
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
-import com.android.systemui.dreams.smartspace.DreamsSmartspaceController
+import com.android.systemui.dreams.smartspace.DreamSmartspaceController
 import com.android.systemui.plugins.BcSmartspaceDataPlugin
+import com.android.systemui.plugins.BcSmartspaceDataPlugin.SmartspaceView
 import com.android.systemui.plugins.FalsingManager
 import com.android.systemui.smartspace.dagger.SmartspaceViewComponent
 import com.android.systemui.util.concurrency.Execution
@@ -35,16 +36,17 @@
 import com.android.systemui.util.mockito.eq
 import com.android.systemui.util.mockito.withArgCaptor
 import com.google.common.truth.Truth.assertThat
+import java.util.Optional
+import java.util.concurrent.Executor
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.mockito.Mock
 import org.mockito.Mockito
-import org.mockito.Mockito.`when`
 import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when`
 import org.mockito.MockitoAnnotations
-import java.util.Optional
-import java.util.concurrent.Executor
+import org.mockito.Spy
 
 @SmallTest
 @RunWith(AndroidTestingRunner::class)
@@ -74,8 +76,8 @@
     @Mock
     private lateinit var precondition: SmartspacePrecondition
 
-    @Mock
-    private lateinit var smartspaceView: BcSmartspaceDataPlugin.SmartspaceView
+    @Spy
+    private var smartspaceView: SmartspaceView = TestView(context)
 
     @Mock
     private lateinit var listener: BcSmartspaceDataPlugin.SmartspaceTargetListener
@@ -83,6 +85,36 @@
     @Mock
     private lateinit var session: SmartspaceSession
 
+    private lateinit var controller: DreamSmartspaceController
+
+    /**
+     * A class which implements SmartspaceView and extends View. This is mocked to provide the right
+     * object inheritance and interface implementation used in DreamSmartspaceController
+     */
+    private class TestView(context: Context?) : View(context), SmartspaceView {
+        override fun registerDataProvider(plugin: BcSmartspaceDataPlugin?) {}
+
+        override fun setPrimaryTextColor(color: Int) {}
+
+        override fun setIsDreaming(isDreaming: Boolean) {}
+
+        override fun setDozeAmount(amount: Float) {}
+
+        override fun setIntentStarter(intentStarter: BcSmartspaceDataPlugin.IntentStarter?) {}
+
+        override fun setFalsingManager(falsingManager: FalsingManager?) {}
+
+        override fun setDnd(image: Drawable?, description: String?) {}
+
+        override fun setNextAlarm(image: Drawable?, description: String?) {}
+
+        override fun setMediaTarget(target: SmartspaceTarget?) {}
+
+        override fun getSelectedPage(): Int { return 0; }
+
+        override fun getCurrentCardTopPadding(): Int { return 0; }
+    }
+
     @Before
     fun setup() {
         MockitoAnnotations.initMocks(this)
@@ -90,6 +122,9 @@
                 .thenReturn(viewComponent)
         `when`(viewComponent.getView()).thenReturn(smartspaceView)
         `when`(smartspaceManager.createSmartspaceSession(any())).thenReturn(session)
+
+        controller = DreamSmartspaceController(context, smartspaceManager, execution, uiExecutor,
+                viewComponentFactory, precondition, Optional.of(targetFilter), Optional.of(plugin))
     }
 
     /**
@@ -97,10 +132,6 @@
      */
     @Test
     fun testConnectOnListen() {
-        val controller = DreamsSmartspaceController(context,
-        smartspaceManager, execution, uiExecutor, viewComponentFactory, precondition,
-                Optional.of(targetFilter), Optional.of(plugin))
-
         `when`(precondition.conditionsMet()).thenReturn(true)
         controller.addListener(listener)
 
@@ -127,44 +158,10 @@
     }
 
     /**
-     * A class which implements SmartspaceView and extends View. This is mocked to provide the right
-     * object inheritance and interface implementation used in DreamSmartspaceController
-     */
-    private class TestView(context: Context?) : View(context),
-            BcSmartspaceDataPlugin.SmartspaceView {
-        override fun registerDataProvider(plugin: BcSmartspaceDataPlugin?) {}
-
-        override fun setPrimaryTextColor(color: Int) {}
-
-        override fun setIsDreaming(isDreaming: Boolean) {}
-
-        override fun setDozeAmount(amount: Float) {}
-
-        override fun setIntentStarter(intentStarter: BcSmartspaceDataPlugin.IntentStarter?) {}
-
-        override fun setFalsingManager(falsingManager: FalsingManager?) {}
-
-        override fun setDnd(image: Drawable?, description: String?) {}
-
-        override fun setNextAlarm(image: Drawable?, description: String?) {}
-
-        override fun setMediaTarget(target: SmartspaceTarget?) {}
-
-        override fun getSelectedPage(): Int { return 0; }
-
-        override fun getCurrentCardTopPadding(): Int { return 0; }
-    }
-
-    /**
      * Ensures session begins when a view is attached.
      */
     @Test
     fun testConnectOnViewCreate() {
-        val controller = DreamsSmartspaceController(context,
-                smartspaceManager, execution, uiExecutor, viewComponentFactory, precondition,
-                Optional.of(targetFilter),
-                Optional.of(plugin))
-
         `when`(precondition.conditionsMet()).thenReturn(true)
         controller.buildAndConnectView(Mockito.mock(ViewGroup::class.java))
 
@@ -183,4 +180,4 @@
 
         verify(session).close()
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/smartspace/LockscreenAndDreamTargetFilterTest.kt b/packages/SystemUI/tests/src/com/android/systemui/smartspace/LockscreenAndDreamTargetFilterTest.kt
new file mode 100644
index 0000000..6b34ca7
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/smartspace/LockscreenAndDreamTargetFilterTest.kt
@@ -0,0 +1,149 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.smartspace
+
+import android.app.smartspace.SmartspaceTarget
+import android.content.ContentResolver
+import android.database.ContentObserver
+import android.net.Uri
+import android.os.Handler
+import android.os.UserHandle
+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.settings.UserTracker
+import com.android.systemui.smartspace.filters.LockscreenAndDreamTargetFilter
+import com.android.systemui.util.concurrency.Execution
+import com.android.systemui.util.mockito.any
+import com.android.systemui.util.mockito.eq
+import com.android.systemui.util.mockito.withArgCaptor
+import com.android.systemui.util.settings.SecureSettings
+import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.Executor
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentCaptor
+import org.mockito.ArgumentMatchers.anyBoolean
+import org.mockito.ArgumentMatchers.anyInt
+import org.mockito.Mock
+import org.mockito.Mockito.atLeast
+import org.mockito.Mockito.clearInvocations
+import org.mockito.Mockito.mock
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when`
+import org.mockito.MockitoAnnotations
+
+@SmallTest
+@TestableLooper.RunWithLooper
+@RunWith(AndroidTestingRunner::class)
+class LockscreenAndDreamTargetFilterTest : SysuiTestCase() {
+    @Mock
+    private lateinit var secureSettings: SecureSettings
+
+    @Mock
+    private lateinit var userTracker: UserTracker
+
+    @Mock
+    private lateinit var execution: Execution
+
+    @Mock
+    private lateinit var handler: Handler
+
+    @Mock
+    private lateinit var contentResolver: ContentResolver
+
+    @Mock
+    private lateinit var uiExecution: Executor
+
+    @Mock
+    private lateinit var userHandle: UserHandle
+
+    @Mock
+    private lateinit var listener: SmartspaceTargetFilter.Listener
+
+    @Mock
+    private lateinit var lockScreenAllowPrivateNotificationsUri: Uri
+
+    @Before
+    fun setup() {
+        MockitoAnnotations.initMocks(this)
+        `when`(userTracker.userHandle).thenReturn(userHandle)
+        `when`(secureSettings
+                .getUriFor(eq(Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS)))
+                .thenReturn(lockScreenAllowPrivateNotificationsUri)
+    }
+
+    /**
+     * Ensures {@link Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS} is
+     * tracked.
+     */
+    @Test
+    fun testLockscreenAllowPrivateNotifications() {
+        var setting = Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS
+        `when`(secureSettings
+                .getIntForUser(eq(setting) ?: setting, anyInt(), anyInt()))
+                .thenReturn(0)
+        var filter = LockscreenAndDreamTargetFilter(secureSettings, userTracker, execution, handler,
+                contentResolver, uiExecution)
+
+        filter.addListener(listener)
+        var smartspaceTarget = mock(SmartspaceTarget::class.java)
+        `when`(smartspaceTarget.userHandle).thenReturn(userHandle)
+        `when`(smartspaceTarget.isSensitive).thenReturn(true)
+        assertThat(filter.filterSmartspaceTarget(smartspaceTarget)).isFalse()
+
+        var settingCaptor = ArgumentCaptor.forClass(ContentObserver::class.java)
+
+        verify(contentResolver).registerContentObserver(eq(lockScreenAllowPrivateNotificationsUri),
+                anyBoolean(), settingCaptor.capture(), anyInt())
+
+        `when`(secureSettings
+                .getIntForUser(eq(setting) ?: setting, anyInt(), anyInt()))
+                .thenReturn(1)
+
+        clearInvocations(listener)
+        settingCaptor.value.onChange(false, mock(Uri::class.java))
+        verify(listener, atLeast(1)).onCriteriaChanged()
+        assertThat(filter.filterSmartspaceTarget(smartspaceTarget)).isTrue()
+    }
+
+    /**
+     * Ensures user switches are tracked.
+     */
+    @Test
+    fun testUserSwitchCallback() {
+        var setting = Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS
+        `when`(secureSettings
+                .getIntForUser(eq(setting) ?: setting, anyInt(), anyInt()))
+                .thenReturn(0)
+        var filter = LockscreenAndDreamTargetFilter(secureSettings, userTracker, execution, handler,
+                contentResolver, uiExecution)
+
+        filter.addListener(listener)
+
+        var userTrackerCallback = withArgCaptor<UserTracker.Callback> {
+            verify(userTracker).addCallback(capture(), any())
+        }
+
+        clearInvocations(listener)
+        userTrackerCallback.onUserChanged(0, context)
+
+        verify(listener).onCriteriaChanged()
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/smartspace/LockscreenTargetFilterTest.kt b/packages/SystemUI/tests/src/com/android/systemui/smartspace/LockscreenTargetFilterTest.kt
deleted file mode 100644
index 185a838..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/smartspace/LockscreenTargetFilterTest.kt
+++ /dev/null
@@ -1,149 +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.systemui.smartspace
-
-import android.app.smartspace.SmartspaceTarget
-import android.content.ContentResolver
-import android.database.ContentObserver
-import android.net.Uri
-import android.os.Handler
-import android.os.UserHandle
-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.settings.UserTracker
-import com.android.systemui.smartspace.filters.LockscreenTargetFilter
-import com.android.systemui.util.concurrency.Execution
-import com.android.systemui.util.mockito.any
-import com.android.systemui.util.mockito.eq
-import com.android.systemui.util.mockito.withArgCaptor
-import com.android.systemui.util.settings.SecureSettings
-import com.google.common.truth.Truth.assertThat
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.mockito.ArgumentCaptor
-import org.mockito.ArgumentMatchers.anyBoolean
-import org.mockito.ArgumentMatchers.anyInt
-import org.mockito.Mock
-import org.mockito.Mockito.`when`
-import org.mockito.Mockito.atLeast
-import org.mockito.Mockito.clearInvocations
-import org.mockito.Mockito.mock
-import org.mockito.Mockito.verify
-import org.mockito.MockitoAnnotations
-import java.util.concurrent.Executor
-
-@SmallTest
-@TestableLooper.RunWithLooper
-@RunWith(AndroidTestingRunner::class)
-class LockscreenTargetFilterTest : SysuiTestCase() {
-    @Mock
-    private lateinit var secureSettings: SecureSettings
-
-    @Mock
-    private lateinit var userTracker: UserTracker
-
-    @Mock
-    private lateinit var execution: Execution
-
-    @Mock
-    private lateinit var handler: Handler
-
-    @Mock
-    private lateinit var contentResolver: ContentResolver
-
-    @Mock
-    private lateinit var uiExecution: Executor
-
-    @Mock
-    private lateinit var userHandle: UserHandle
-
-    @Mock
-    private lateinit var listener: SmartspaceTargetFilter.Listener
-
-    @Mock
-    private lateinit var lockScreenAllowPrivateNotificationsUri: Uri
-
-    @Before
-    fun setup() {
-        MockitoAnnotations.initMocks(this)
-        `when`(userTracker.userHandle).thenReturn(userHandle)
-        `when`(secureSettings
-                .getUriFor(eq(Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS)))
-                .thenReturn(lockScreenAllowPrivateNotificationsUri)
-    }
-
-    /**
-     * Ensures {@link Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS} is
-     * tracked.
-     */
-    @Test
-    fun testLockscreenAllowPrivateNotifications() {
-        var setting = Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS
-        `when`(secureSettings
-                .getIntForUser(eq(setting) ?: setting, anyInt(), anyInt()))
-                .thenReturn(0)
-        var filter = LockscreenTargetFilter(secureSettings, userTracker, execution, handler,
-                contentResolver, uiExecution)
-
-        filter.addListener(listener)
-        var smartspaceTarget = mock(SmartspaceTarget::class.java)
-        `when`(smartspaceTarget.userHandle).thenReturn(userHandle)
-        `when`(smartspaceTarget.isSensitive).thenReturn(true)
-        assertThat(filter.filterSmartspaceTarget(smartspaceTarget)).isFalse()
-
-        var settingCaptor = ArgumentCaptor.forClass(ContentObserver::class.java)
-
-        verify(contentResolver).registerContentObserver(eq(lockScreenAllowPrivateNotificationsUri),
-                anyBoolean(), settingCaptor.capture(), anyInt())
-
-        `when`(secureSettings
-                .getIntForUser(eq(setting) ?: setting, anyInt(), anyInt()))
-                .thenReturn(1)
-
-        clearInvocations(listener)
-        settingCaptor.value.onChange(false, mock(Uri::class.java))
-        verify(listener, atLeast(1)).onCriteriaChanged()
-        assertThat(filter.filterSmartspaceTarget(smartspaceTarget)).isTrue()
-    }
-
-    /**
-     * Ensures user switches are tracked.
-     */
-    @Test
-    fun testUserSwitchCallback() {
-        var setting = Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS
-        `when`(secureSettings
-                .getIntForUser(eq(setting) ?: setting, anyInt(), anyInt()))
-                .thenReturn(0)
-        var filter = LockscreenTargetFilter(secureSettings, userTracker, execution, handler,
-                contentResolver, uiExecution)
-
-        filter.addListener(listener)
-
-        var userTrackerCallback = withArgCaptor<UserTracker.Callback> {
-            verify(userTracker).addCallback(capture(), any())
-        }
-
-        clearInvocations(listener)
-        userTrackerCallback.onUserChanged(0, context)
-
-        verify(listener).onCriteriaChanged()
-    }
-}
\ No newline at end of file
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java
index fc4d9c4..cf7f8dd 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java
@@ -41,6 +41,7 @@
 
 import androidx.test.filters.SmallTest;
 
+import com.android.internal.statusbar.LetterboxDetails;
 import com.android.internal.statusbar.StatusBarIcon;
 import com.android.internal.view.AppearanceRegion;
 import com.android.systemui.SysuiTestCase;
@@ -53,6 +54,13 @@
 @SmallTest
 public class CommandQueueTest extends SysuiTestCase {
 
+    private static final LetterboxDetails[] TEST_LETTERBOX_DETAILS = new LetterboxDetails[] {
+            new LetterboxDetails(
+                    /* letterboxInnerBounds= */ new Rect(100, 0, 200, 500),
+                    /* letterboxFullBounds= */ new Rect(0, 0, 500, 100),
+                    /* appAppearance= */ 123)
+    };
+
     private CommandQueue mCommandQueue;
     private Callbacks mCallbacks;
     private static final int SECONDARY_DISPLAY = 1;
@@ -127,25 +135,27 @@
     public void testOnSystemBarAttributesChanged() {
         doTestOnSystemBarAttributesChanged(DEFAULT_DISPLAY, 1,
                 new AppearanceRegion[]{new AppearanceRegion(2, new Rect())}, false,
-                BEHAVIOR_DEFAULT, new InsetsVisibilities(), "test");
+                BEHAVIOR_DEFAULT, new InsetsVisibilities(), "test", TEST_LETTERBOX_DETAILS);
     }
 
     @Test
     public void testOnSystemBarAttributesChangedForSecondaryDisplay() {
         doTestOnSystemBarAttributesChanged(SECONDARY_DISPLAY, 1,
                 new AppearanceRegion[]{new AppearanceRegion(2, new Rect())}, false,
-                BEHAVIOR_DEFAULT, new InsetsVisibilities(), "test");
+                BEHAVIOR_DEFAULT, new InsetsVisibilities(), "test", TEST_LETTERBOX_DETAILS);
     }
 
     private void doTestOnSystemBarAttributesChanged(int displayId, @Appearance int appearance,
             AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
-            @Behavior int behavior, InsetsVisibilities requestedVisibilities, String packageName) {
+            @Behavior int behavior, InsetsVisibilities requestedVisibilities, String packageName,
+            LetterboxDetails[] letterboxDetails) {
         mCommandQueue.onSystemBarAttributesChanged(displayId, appearance, appearanceRegions,
-                navbarColorManagedByIme, behavior, requestedVisibilities, packageName);
+                navbarColorManagedByIme, behavior, requestedVisibilities, packageName,
+                letterboxDetails);
         waitForIdleSync();
         verify(mCallbacks).onSystemBarAttributesChanged(eq(displayId), eq(appearance),
                 eq(appearanceRegions), eq(navbarColorManagedByIme), eq(behavior),
-                eq(requestedVisibilities), eq(packageName));
+                eq(requestedVisibilities), eq(packageName), eq(letterboxDetails));
     }
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java
index d67e26f..9c25462 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java
@@ -30,6 +30,7 @@
 import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_TRANSIENT;
 import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_TRUST;
 import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_USER_LOCKED;
+import static com.android.systemui.keyguard.ScreenLifecycle.SCREEN_ON;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -212,7 +213,7 @@
                 R.string.do_financed_disclosure_with_name, ORGANIZATION_NAME);
 
         when(mKeyguardUpdateMonitor.isUnlockingWithBiometricAllowed(anyBoolean())).thenReturn(true);
-        when(mScreenLifecycle.getScreenState()).thenReturn(ScreenLifecycle.SCREEN_ON);
+        when(mScreenLifecycle.getScreenState()).thenReturn(SCREEN_ON);
         when(mKeyguardUpdateMonitor.isUserUnlocked(anyInt())).thenReturn(true);
 
         when(mIndicationArea.findViewById(R.id.keyguard_indication_text_bottom))
@@ -954,64 +955,170 @@
     }
 
     @Test
-    public void nonBypassFaceSuccess_touchExplorationEnabled_showsSwipeToOpen() {
-        // GIVEN non bypass face auth and touch exploration is enabled
-        when(mKeyguardBypassController.canBypass()).thenReturn(false);
-        when(mAccessibilityManager.isTouchExplorationEnabled()).thenReturn(true);
-        when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
-        createController();
-        String swipeToOpen = mContext.getString(R.string.keyguard_unlock);
-        mController.setVisible(true);
-
-        // WHEN face authenticated
-        mController.getKeyguardCallback().onBiometricAuthenticated(0,
-                BiometricSourceType.FACE, false);
-
-        // THEN show 'swipe up to open' message
-        verifyIndicationMessage(INDICATION_TYPE_BIOMETRIC_MESSAGE, swipeToOpen);
-    }
-
-    @Test
-    public void nonBypassFaceSuccess_a11yEnabled_showsSwipeToOpen() {
-        // GIVEN non bypass face auth and a11y is enabled
-        when(mKeyguardBypassController.canBypass()).thenReturn(false);
-        when(mAccessibilityManager.isEnabled()).thenReturn(true);
-        when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
-        createController();
-        String swipeToOpen = mContext.getString(R.string.keyguard_unlock);
-        mController.setVisible(true);
-
-        // WHEN face auth is successful
-        mController.getKeyguardCallback().onBiometricAuthenticated(0,
-                BiometricSourceType.FACE, false);
-
-        // THEN show 'swipe up to open' message
-        verifyIndicationMessage(INDICATION_TYPE_BIOMETRIC_MESSAGE, swipeToOpen);
-    }
-
-    @Test
-    public void coEx_nonBypassFaceSuccess_showsPressLockIcon() {
-        // GIVEN udfps is supported, non-bypass face auth, and no a11y enabled
-        when(mKeyguardUpdateMonitor.isUdfpsSupported()).thenReturn(true);
-        when(mKeyguardBypassController.canBypass()).thenReturn(false);
-        when(mKeyguardUpdateMonitor.getIsFaceAuthenticated()).thenReturn(true);
-        when(mAccessibilityManager.isEnabled()).thenReturn(false);
-        when(mAccessibilityManager.isTouchExplorationEnabled()).thenReturn(false);
+    public void coEx_faceSuccess_showsPressToOpen() {
+        // GIVEN bouncer isn't showing, can skip bouncer, udfps is supported, no a11y enabled
         when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
         when(mKeyguardUpdateMonitor.getUserCanSkipBouncer(KeyguardUpdateMonitor.getCurrentUser()))
                 .thenReturn(true);
+        when(mKeyguardUpdateMonitor.isUdfpsSupported()).thenReturn(true);
+        when(mAccessibilityManager.isEnabled()).thenReturn(false);
+        when(mAccessibilityManager.isTouchExplorationEnabled()).thenReturn(false);
         createController();
         mController.setVisible(true);
 
         // WHEN face auth succeeds
+        when(mKeyguardUpdateMonitor.getIsFaceAuthenticated()).thenReturn(true);
         mController.getKeyguardCallback().onBiometricAuthenticated(0,
                 BiometricSourceType.FACE, false);
 
-        // THEN press unlock icon to open message shows
-        String pressLockIcon = mContext.getString(R.string.keyguard_face_successful_unlock_press);
-        verifyIndicationMessage(INDICATION_TYPE_BIOMETRIC_MESSAGE, pressLockIcon);
+        // THEN 'face unlocked. press unlock icon to open' message shows
+        String pressToOpen = mContext.getString(R.string.keyguard_face_successful_unlock_press);
+        verifyIndicationMessage(INDICATION_TYPE_BIOMETRIC_MESSAGE, pressToOpen);
 
-        assertThat(mTextView.getText()).isNotEqualTo(pressLockIcon);
+        assertThat(mTextView.getText()).isNotEqualTo(pressToOpen);
+    }
+
+
+    @Test
+    public void coEx_faceSuccess_touchExplorationEnabled_showsFaceUnlockedSwipeToOpen() {
+        // GIVEN bouncer isn't showing, can skip bouncer, udfps is supported, a11y enabled
+        when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
+        when(mKeyguardUpdateMonitor.getUserCanSkipBouncer(KeyguardUpdateMonitor.getCurrentUser()))
+                .thenReturn(true);
+        when(mKeyguardUpdateMonitor.isUdfpsSupported()).thenReturn(true);
+        when(mAccessibilityManager.isEnabled()).thenReturn(true);
+        when(mAccessibilityManager.isTouchExplorationEnabled()).thenReturn(true);
+        createController();
+        mController.setVisible(true);
+
+        // WHEN face authenticated
+        when(mKeyguardUpdateMonitor.getIsFaceAuthenticated()).thenReturn(true);
+        mController.getKeyguardCallback().onBiometricAuthenticated(0,
+                BiometricSourceType.FACE, false);
+
+        // THEN show 'face unlocked. swipe up to open' message
+        String faceUnlockedSwipeToOpen =
+                mContext.getString(R.string.keyguard_face_successful_unlock_swipe);
+        verifyIndicationMessage(INDICATION_TYPE_BIOMETRIC_MESSAGE, faceUnlockedSwipeToOpen);
+    }
+
+    @Test
+    public void coEx_faceSuccess_a11yEnabled_showsFaceUnlockedSwipeToOpen() {
+        // GIVEN bouncer isn't showing, can skip bouncer, udfps is supported, a11y is enabled
+        when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
+        when(mKeyguardUpdateMonitor.getUserCanSkipBouncer(KeyguardUpdateMonitor.getCurrentUser()))
+                .thenReturn(true);
+        when(mKeyguardUpdateMonitor.isUdfpsSupported()).thenReturn(true);
+        when(mAccessibilityManager.isEnabled()).thenReturn(true);
+        createController();
+        mController.setVisible(true);
+
+        // WHEN face auth is successful
+        when(mKeyguardUpdateMonitor.getIsFaceAuthenticated()).thenReturn(true);
+        mController.getKeyguardCallback().onBiometricAuthenticated(0,
+                BiometricSourceType.FACE, false);
+
+        // THEN show 'swipe up to open' message
+        String faceUnlockedSwipeToOpen =
+                mContext.getString(R.string.keyguard_face_successful_unlock_swipe);
+        verifyIndicationMessage(INDICATION_TYPE_BIOMETRIC_MESSAGE, faceUnlockedSwipeToOpen);
+    }
+
+    @Test
+    public void faceOnly_faceSuccess_showsFaceUnlockedSwipeToOpen() {
+        // GIVEN bouncer isn't showing, can skip bouncer, no udfps supported
+        when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
+        when(mKeyguardUpdateMonitor.getUserCanSkipBouncer(KeyguardUpdateMonitor.getCurrentUser()))
+                .thenReturn(true);
+        when(mKeyguardUpdateMonitor.isUdfpsSupported()).thenReturn(false);
+        createController();
+        mController.setVisible(true);
+
+        // WHEN face auth is successful
+        when(mKeyguardUpdateMonitor.getIsFaceAuthenticated()).thenReturn(true);
+        mController.getKeyguardCallback().onBiometricAuthenticated(0,
+                BiometricSourceType.FACE, false);
+
+        // THEN show 'swipe up to open' message
+        String faceUnlockedSwipeToOpen =
+                mContext.getString(R.string.keyguard_face_successful_unlock_swipe);
+        verifyIndicationMessage(INDICATION_TYPE_BIOMETRIC_MESSAGE, faceUnlockedSwipeToOpen);
+    }
+
+    @Test
+    public void udfpsOnly_a11yEnabled_showsSwipeToOpen() {
+        // GIVEN bouncer isn't showing, can skip bouncer, udfps is supported, a11y is enabled
+        when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
+        when(mKeyguardUpdateMonitor.getUserCanSkipBouncer(KeyguardUpdateMonitor.getCurrentUser()))
+                .thenReturn(true);
+        when(mKeyguardUpdateMonitor.isUdfpsSupported()).thenReturn(true);
+        when(mAccessibilityManager.isEnabled()).thenReturn(true);
+        when(mAccessibilityManager.isTouchExplorationEnabled()).thenReturn(true);
+        createController();
+        mController.setVisible(true);
+
+        // WHEN showActionToUnlock
+        mController.showActionToUnlock();
+
+        // THEN show 'swipe up to open' message
+        String swipeToOpen = mContext.getString(R.string.keyguard_unlock);
+        verifyIndicationMessage(INDICATION_TYPE_BIOMETRIC_MESSAGE, swipeToOpen);
+    }
+
+    @Test
+    public void udfpsOnly_showsPressToOpen() {
+        // GIVEN bouncer isn't showing, udfps is supported, a11y is NOT enabled, can skip bouncer
+        when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
+        when(mKeyguardUpdateMonitor.getUserCanSkipBouncer(KeyguardUpdateMonitor.getCurrentUser()))
+                .thenReturn(true);
+        when(mKeyguardUpdateMonitor.isUdfpsSupported()).thenReturn(true);
+        when(mAccessibilityManager.isEnabled()).thenReturn(false);
+        when(mAccessibilityManager.isTouchExplorationEnabled()).thenReturn(false);
+        createController();
+        mController.setVisible(true);
+
+        // WHEN showActionToUnlock
+        mController.showActionToUnlock();
+
+        // THEN show 'press unlock icon to open' message
+        String pressToOpen = mContext.getString(R.string.keyguard_unlock_press);
+        verifyIndicationMessage(INDICATION_TYPE_BIOMETRIC_MESSAGE, pressToOpen);
+    }
+
+    @Test
+    public void canSkipBouncer_noSecurity_showSwipeToUnlockHint() {
+        // GIVEN bouncer isn't showing, can skip bouncer, no security (udfps isn't supported,
+        // face wasn't authenticated)
+        when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
+        when(mKeyguardUpdateMonitor.getUserCanSkipBouncer(KeyguardUpdateMonitor.getCurrentUser()))
+                .thenReturn(true);
+        when(mKeyguardUpdateMonitor.isUdfpsSupported()).thenReturn(false);
+        createController();
+        mController.setVisible(true);
+
+        // WHEN showActionToUnlock
+        mController.showActionToUnlock();
+
+        // THEN show 'swipe up to open' message
+        String swipeToOpen = mContext.getString(R.string.keyguard_unlock);
+        verifyIndicationMessage(INDICATION_TYPE_BIOMETRIC_MESSAGE, swipeToOpen);
+    }
+
+    @Test
+    public void cannotSkipBouncer_showSwipeToUnlockHint() {
+        // GIVEN bouncer isn't showing and cannot skip bouncer
+        when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(false);
+        when(mKeyguardUpdateMonitor.getUserCanSkipBouncer(KeyguardUpdateMonitor.getCurrentUser()))
+                .thenReturn(false);
+        createController();
+        mController.setVisible(true);
+
+        // WHEN showActionToUnlock
+        mController.showActionToUnlock();
+
+        // THEN show 'swipe up to open' message
+        String swipeToOpen = mContext.getString(R.string.keyguard_unlock);
+        verifyIndicationMessage(INDICATION_TYPE_BIOMETRIC_MESSAGE, swipeToOpen);
     }
 
     private void sendUpdateDisclosureBroadcast() {
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 562c970..fe1cd97 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt
@@ -1,6 +1,5 @@
 package com.android.systemui.statusbar
 
-import org.mockito.Mockito.`when` as whenever
 import android.test.suitebuilder.annotation.SmallTest
 import android.testing.AndroidTestingRunner
 import android.testing.TestableLooper
@@ -14,6 +13,7 @@
 import com.android.systemui.media.MediaHierarchyManager
 import com.android.systemui.plugins.FalsingManager
 import com.android.systemui.plugins.qs.QS
+import com.android.systemui.shade.NotificationPanelViewController
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
 import com.android.systemui.statusbar.notification.row.NotificationTestHelper
 import com.android.systemui.statusbar.notification.stack.AmbientState
@@ -22,7 +22,6 @@
 import com.android.systemui.statusbar.phone.CentralSurfaces
 import com.android.systemui.statusbar.phone.KeyguardBypassController
 import com.android.systemui.statusbar.phone.LSShadeTransitionLogger
-import com.android.systemui.statusbar.phone.NotificationPanelViewController
 import com.android.systemui.statusbar.phone.ScrimController
 import com.android.systemui.statusbar.policy.FakeConfigurationController
 import org.junit.After
@@ -45,6 +44,7 @@
 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
 
 private fun <T> anyObject(): T {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NonPhoneDependencyTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NonPhoneDependencyTest.java
index a4ce9cd..0fd2e38 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NonPhoneDependencyTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NonPhoneDependencyTest.java
@@ -27,16 +27,14 @@
 import com.android.keyguard.KeyguardUpdateMonitor;
 import com.android.systemui.Dependency;
 import com.android.systemui.SysuiTestCase;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.statusbar.notification.NotificationEntryListener;
 import com.android.systemui.statusbar.notification.NotificationEntryManager;
-import com.android.systemui.statusbar.notification.collection.render.NotifStackController;
 import com.android.systemui.statusbar.notification.logging.NotificationLogger;
 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.phone.ShadeController;
-import com.android.systemui.statusbar.policy.HeadsUpManager;
 
 import org.junit.Before;
 import org.junit.Ignore;
@@ -55,11 +53,8 @@
 @TestableLooper.RunWithLooper(setAsMainLooper = true)
 public class NonPhoneDependencyTest extends SysuiTestCase {
     @Mock private NotificationPresenter mPresenter;
-    @Mock private NotifStackController mStackController;
     @Mock private NotificationListContainer mListContainer;
-    @Mock
-    private NotificationEntryListener mEntryListener;
-    @Mock private HeadsUpManager mHeadsUpManager;
+    @Mock private NotificationEntryListener mEntryListener;
     @Mock private RemoteInputController.Delegate mDelegate;
     @Mock private NotificationRemoteInputManager.Callback mRemoteInputManagerCallback;
     @Mock private CheckSaveListener mCheckSaveListener;
@@ -79,25 +74,20 @@
         mDependency.injectMockDependency(ShadeController.class);
         NotificationEntryManager entryManager = Dependency.get(NotificationEntryManager.class);
         NotificationGutsManager gutsManager = Dependency.get(NotificationGutsManager.class);
-        NotificationListener notificationListener = Dependency.get(NotificationListener.class);
         NotificationLogger notificationLogger = Dependency.get(NotificationLogger.class);
         NotificationMediaManager mediaManager = Dependency.get(NotificationMediaManager.class);
         NotificationRemoteInputManager remoteInputManager =
                 Dependency.get(NotificationRemoteInputManager.class);
         NotificationLockscreenUserManager lockscreenUserManager =
                 Dependency.get(NotificationLockscreenUserManager.class);
-        NotificationViewHierarchyManager viewHierarchyManager =
-                Dependency.get(NotificationViewHierarchyManager.class);
-        entryManager.setUpWithPresenter(mPresenter);
         entryManager.addNotificationEntryListener(mEntryListener);
         gutsManager.setUpWithPresenter(mPresenter, mListContainer,
-                mCheckSaveListener, mOnSettingsClickListener);
+                mOnSettingsClickListener);
         notificationLogger.setUpWithContainer(mListContainer);
         mediaManager.setUpWithPresenter(mPresenter);
         remoteInputManager.setUpWithCallback(mRemoteInputManagerCallback,
                 mDelegate);
         lockscreenUserManager.setUpWithPresenter(mPresenter);
-        viewHierarchyManager.setUpWithPresenter(mPresenter, mStackController, mListContainer);
 
         TestableLooper.get(this).processAllMessages();
         assertFalse(mDependency.hasInstantiatedDependency(NotificationShadeWindowController.class));
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationRemoteInputManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationRemoteInputManagerTest.java
index 2691ff9..34d13c7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationRemoteInputManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationRemoteInputManagerTest.java
@@ -16,12 +16,9 @@
 
 package com.android.systemui.statusbar;
 
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertFalse;
 import static junit.framework.Assert.assertTrue;
 
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import android.app.Notification;
@@ -30,19 +27,14 @@
 import android.os.Looper;
 import android.os.SystemClock;
 import android.os.UserHandle;
-import android.service.notification.NotificationListenerService;
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
 
-import androidx.annotation.NonNull;
 import androidx.test.filters.SmallTest;
 
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.dump.DumpManager;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.statusbar.NotificationRemoteInputManager.LegacyRemoteInputLifetimeExtender.RemoteInputActiveExtender;
-import com.android.systemui.statusbar.NotificationRemoteInputManager.LegacyRemoteInputLifetimeExtender.RemoteInputHistoryExtender;
-import com.android.systemui.statusbar.NotificationRemoteInputManager.LegacyRemoteInputLifetimeExtender.SmartReplyHistoryExtender;
 import com.android.systemui.statusbar.notification.NotifPipelineFlags;
 import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
@@ -52,8 +44,6 @@
 import com.android.systemui.statusbar.phone.CentralSurfaces;
 import com.android.systemui.statusbar.policy.RemoteInputUriController;
 
-import com.google.android.collect.Sets;
-
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -76,23 +66,15 @@
     @Mock private NotificationRemoteInputManager.Callback mCallback;
     @Mock private RemoteInputController mController;
     @Mock private SmartReplyController mSmartReplyController;
-    @Mock private NotificationListenerService.RankingMap mRanking;
     @Mock private ExpandableNotificationRow mRow;
     @Mock private StatusBarStateController mStateController;
     @Mock private RemoteInputUriController mRemoteInputUriController;
     @Mock private NotificationClickNotifier mClickNotifier;
-
-    // Dependency mocks:
     @Mock private NotificationEntryManager mEntryManager;
     @Mock private NotificationLockscreenUserManager mLockscreenUserManager;
 
     private TestableNotificationRemoteInputManager mRemoteInputManager;
     private NotificationEntry mEntry;
-    private RemoteInputHistoryExtender mRemoteInputHistoryExtender;
-    private SmartReplyHistoryExtender mSmartReplyHistoryExtender;
-    private RemoteInputActiveExtender mRemoteInputActiveExtender;
-    private TestableNotificationRemoteInputManager.FakeLegacyRemoteInputLifetimeExtender
-            mLegacyRemoteInputLifetimeExtender;
 
     @Before
     public void setUp() {
@@ -121,21 +103,7 @@
                 .build();
         mEntry.setRow(mRow);
 
-        mRemoteInputManager.setUpWithPresenterForTest(mCallback,
-                mDelegate, mController);
-        for (NotificationLifetimeExtender extender : mRemoteInputManager.getLifetimeExtenders()) {
-            extender.setCallback(
-                    mock(NotificationLifetimeExtender.NotificationSafeToRemoveCallback.class));
-        }
-    }
-
-    @Test
-    public void testPerformOnRemoveNotification() {
-        when(mController.isRemoteInputActive(mEntry)).thenReturn(true);
-        mRemoteInputManager.onPerformRemoveNotification(mEntry, mEntry.getKey());
-
-        assertFalse(mEntry.mRemoteEditImeVisible);
-        verify(mController).removeRemoteInput(mEntry, null);
+        mRemoteInputManager.setUpWithPresenterForTest(mCallback, mDelegate, mController);
     }
 
     @Test
@@ -143,7 +111,6 @@
         when(mController.isRemoteInputActive(mEntry)).thenReturn(true);
 
         assertTrue(mRemoteInputManager.isRemoteInputActive(mEntry));
-        assertTrue(mRemoteInputActiveExtender.shouldExtendLifetime(mEntry));
     }
 
     @Test
@@ -152,7 +119,6 @@
         when(mController.isSpinning(mEntry.getKey())).thenReturn(true);
 
         assertTrue(mRemoteInputManager.shouldKeepForRemoteInputHistory(mEntry));
-        assertTrue(mRemoteInputHistoryExtender.shouldExtendLifetime(mEntry));
     }
 
     @Test
@@ -161,7 +127,6 @@
         mEntry.lastRemoteInputSent = SystemClock.elapsedRealtime();
 
         assertTrue(mRemoteInputManager.shouldKeepForRemoteInputHistory(mEntry));
-        assertTrue(mRemoteInputHistoryExtender.shouldExtendLifetime(mEntry));
     }
 
     @Test
@@ -170,20 +135,6 @@
         when(mSmartReplyController.isSendingSmartReply(mEntry.getKey())).thenReturn(true);
 
         assertTrue(mRemoteInputManager.shouldKeepForSmartReplyHistory(mEntry));
-        assertTrue(mSmartReplyHistoryExtender.shouldExtendLifetime(mEntry));
-    }
-
-    @Test
-    public void testNotificationWithRemoteInputActiveIsRemovedOnCollapse() {
-        mRemoteInputActiveExtender.setShouldManageLifetime(mEntry, true /* shouldManage */);
-
-        assertEquals(mLegacyRemoteInputLifetimeExtender.getEntriesKeptForRemoteInputActive(),
-                Sets.newArraySet(mEntry));
-
-        mRemoteInputManager.onPanelCollapsed();
-
-        assertTrue(
-                mLegacyRemoteInputLifetimeExtender.getEntriesKeptForRemoteInputActive().isEmpty());
     }
 
     private class TestableNotificationRemoteInputManager extends NotificationRemoteInputManager {
@@ -227,28 +178,5 @@
             mRemoteInputController = controller;
         }
 
-        @NonNull
-        @Override
-        protected LegacyRemoteInputLifetimeExtender createLegacyRemoteInputLifetimeExtender(
-                Handler mainHandler,
-                NotificationEntryManager notificationEntryManager,
-                SmartReplyController smartReplyController) {
-            mLegacyRemoteInputLifetimeExtender = new FakeLegacyRemoteInputLifetimeExtender();
-            return mLegacyRemoteInputLifetimeExtender;
-        }
-
-        class FakeLegacyRemoteInputLifetimeExtender extends LegacyRemoteInputLifetimeExtender {
-
-            @Override
-            protected void addLifetimeExtenders() {
-                mRemoteInputActiveExtender = new RemoteInputActiveExtender();
-                mRemoteInputHistoryExtender = new RemoteInputHistoryExtender();
-                mSmartReplyHistoryExtender = new SmartReplyHistoryExtender();
-                mLifetimeExtenders.add(mRemoteInputHistoryExtender);
-                mLifetimeExtenders.add(mSmartReplyHistoryExtender);
-                mLifetimeExtenders.add(mRemoteInputActiveExtender);
-            }
-        }
-
     }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationViewHierarchyManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationViewHierarchyManagerTest.java
deleted file mode 100644
index 407044b..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationViewHierarchyManagerTest.java
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.statusbar;
-
-import static junit.framework.Assert.assertTrue;
-
-import static org.junit.Assert.assertEquals;
-import static org.mockito.Mockito.clearInvocations;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.os.Handler;
-import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.LinearLayout;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.keyguard.KeyguardUpdateMonitor;
-import com.android.systemui.SysuiTestCase;
-import com.android.systemui.flags.FeatureFlags;
-import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper;
-import com.android.systemui.statusbar.notification.AssistantFeedbackController;
-import com.android.systemui.statusbar.notification.DynamicChildBindController;
-import com.android.systemui.statusbar.notification.DynamicPrivacyController;
-import com.android.systemui.statusbar.notification.NotifPipelineFlags;
-import com.android.systemui.statusbar.notification.NotificationActivityStarter;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
-import com.android.systemui.statusbar.notification.collection.NotificationEntry;
-import com.android.systemui.statusbar.notification.collection.legacy.LowPriorityInflationHelper;
-import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy;
-import com.android.systemui.statusbar.notification.collection.legacy.VisualStabilityManager;
-import com.android.systemui.statusbar.notification.collection.render.NotifStackController;
-import com.android.systemui.statusbar.notification.logging.NotificationLogger;
-import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
-import com.android.systemui.statusbar.notification.row.ExpandableView;
-import com.android.systemui.statusbar.notification.row.NotificationTestHelper;
-import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
-import com.android.systemui.statusbar.phone.KeyguardBypassController;
-import com.android.systemui.statusbar.policy.KeyguardStateController;
-import com.android.wm.shell.bubbles.Bubbles;
-
-import com.google.android.collect.Lists;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.mockito.Spy;
-
-import java.util.List;
-import java.util.Optional;
-
-@SmallTest
-@RunWith(AndroidTestingRunner.class)
-@TestableLooper.RunWithLooper
-public class NotificationViewHierarchyManagerTest extends SysuiTestCase {
-    @Mock private NotificationPresenter mPresenter;
-    @Mock private NotifStackController mStackController;
-    @Spy private FakeListContainer mListContainer = new FakeListContainer();
-
-    // Dependency mocks:
-    @Mock private FeatureFlags mFeatureFlags;
-    @Mock private NotifPipelineFlags mNotifPipelineFlags;
-    @Mock private NotificationEntryManager mEntryManager;
-    @Mock private NotificationLockscreenUserManager mLockscreenUserManager;
-    @Mock private NotificationGroupManagerLegacy mGroupManager;
-    @Mock private VisualStabilityManager mVisualStabilityManager;
-
-    private TestableLooper mTestableLooper;
-    private Handler mHandler;
-    private NotificationViewHierarchyManager mViewHierarchyManager;
-    private NotificationTestHelper mHelper;
-    private boolean mMadeReentrantCall = false;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        mTestableLooper = TestableLooper.get(this);
-        allowTestableLooperAsMainThread();
-        mHandler = Handler.createAsync(mTestableLooper.getLooper());
-
-        mDependency.injectTestDependency(NotificationEntryManager.class, mEntryManager);
-        mDependency.injectTestDependency(NotificationLockscreenUserManager.class,
-                mLockscreenUserManager);
-        mDependency.injectTestDependency(NotificationGroupManagerLegacy.class, mGroupManager);
-        mDependency.injectTestDependency(VisualStabilityManager.class, mVisualStabilityManager);
-        when(mVisualStabilityManager.areGroupChangesAllowed()).thenReturn(true);
-        when(mVisualStabilityManager.isReorderingAllowed()).thenReturn(true);
-
-        when(mNotifPipelineFlags.checkLegacyPipelineEnabled()).thenReturn(true);
-        when(mNotifPipelineFlags.isNewPipelineEnabled()).thenReturn(false);
-
-        mHelper = new NotificationTestHelper(mContext, mDependency, TestableLooper.get(this));
-
-        mViewHierarchyManager = new NotificationViewHierarchyManager(mContext,
-                mHandler, mFeatureFlags, mLockscreenUserManager, mGroupManager,
-                mVisualStabilityManager,
-                mock(StatusBarStateControllerImpl.class), mEntryManager,
-                mock(KeyguardBypassController.class),
-                Optional.of(mock(Bubbles.class)),
-                mock(DynamicPrivacyController.class),
-                mock(DynamicChildBindController.class),
-                mock(LowPriorityInflationHelper.class),
-                mock(AssistantFeedbackController.class),
-                mNotifPipelineFlags,
-                mock(KeyguardUpdateMonitor.class),
-                mock(KeyguardStateController.class));
-        mViewHierarchyManager.setUpWithPresenter(mPresenter, mStackController, mListContainer);
-    }
-
-    private NotificationEntry createEntry() throws Exception {
-        ExpandableNotificationRow row = mHelper.createRow();
-        return row.getEntry();
-    }
-
-    @Test
-    public void testNotificationsBecomingBundled() throws Exception {
-        // Tests 3 top level notifications becoming a single bundled notification with |entry0| as
-        // the summary.
-        NotificationEntry entry0 = createEntry();
-        NotificationEntry entry1 = createEntry();
-        NotificationEntry entry2 = createEntry();
-
-        // Set up the prior state to look like three top level notifications.
-        mListContainer.addContainerView(entry0.getRow());
-        mListContainer.addContainerView(entry1.getRow());
-        mListContainer.addContainerView(entry2.getRow());
-        when(mEntryManager.getVisibleNotifications()).thenReturn(
-                Lists.newArrayList(entry0, entry1, entry2));
-
-        // Set up group manager to report that they should be bundled now.
-        when(mGroupManager.isChildInGroup(entry0)).thenReturn(false);
-        when(mGroupManager.isChildInGroup(entry1)).thenReturn(true);
-        when(mGroupManager.isChildInGroup(entry2)).thenReturn(true);
-        when(mGroupManager.getGroupSummary(entry1)).thenReturn(entry0);
-        when(mGroupManager.getGroupSummary(entry2)).thenReturn(entry0);
-
-        // Run updateNotifications - the view hierarchy should be reorganized.
-        mViewHierarchyManager.updateNotificationViews();
-
-        verify(mListContainer).notifyGroupChildAdded(entry1.getRow());
-        verify(mListContainer).notifyGroupChildAdded(entry2.getRow());
-        assertTrue(Lists.newArrayList(entry0.getRow()).equals(mListContainer.mRows));
-    }
-
-    @Test
-    public void testNotificationsBecomingUnbundled() throws Exception {
-        // Tests a bundled notification becoming three top level notifications.
-        NotificationEntry entry0 = createEntry();
-        NotificationEntry entry1 = createEntry();
-        NotificationEntry entry2 = createEntry();
-        entry0.getRow().addChildNotification(entry1.getRow());
-        entry0.getRow().addChildNotification(entry2.getRow());
-
-        // Set up the prior state to look like one top level notification.
-        mListContainer.addContainerView(entry0.getRow());
-        when(mEntryManager.getVisibleNotifications()).thenReturn(
-                Lists.newArrayList(entry0, entry1, entry2));
-
-        // Set up group manager to report that they should not be bundled now.
-        when(mGroupManager.isChildInGroup(entry0)).thenReturn(false);
-        when(mGroupManager.isChildInGroup(entry1)).thenReturn(false);
-        when(mGroupManager.isChildInGroup(entry2)).thenReturn(false);
-
-        // Run updateNotifications - the view hierarchy should be reorganized.
-        mViewHierarchyManager.updateNotificationViews();
-
-        verify(mListContainer).notifyGroupChildRemoved(
-                entry1.getRow(), entry0.getRow().getChildrenContainer());
-        verify(mListContainer).notifyGroupChildRemoved(
-                entry2.getRow(), entry0.getRow().getChildrenContainer());
-        assertTrue(
-                Lists.newArrayList(entry0.getRow(), entry1.getRow(), entry2.getRow())
-                        .equals(mListContainer.mRows));
-    }
-
-    @Test
-    public void testNotificationsBecomingSuppressed() throws Exception {
-        // Tests two top level notifications becoming a suppressed summary and a child.
-        NotificationEntry entry0 = createEntry();
-        NotificationEntry entry1 = createEntry();
-        entry0.getRow().addChildNotification(entry1.getRow());
-
-        // Set up the prior state to look like a top level notification.
-        mListContainer.addContainerView(entry0.getRow());
-        when(mEntryManager.getVisibleNotifications()).thenReturn(
-                Lists.newArrayList(entry0, entry1));
-
-        // Set up group manager to report a suppressed summary now.
-        when(mGroupManager.isChildInGroup(entry0)).thenReturn(false);
-        when(mGroupManager.isChildInGroup(entry1)).thenReturn(false);
-        when(mGroupManager.isSummaryOfSuppressedGroup(entry0.getSbn())).thenReturn(true);
-
-        // Run updateNotifications - the view hierarchy should be reorganized.
-        mViewHierarchyManager.updateNotificationViews();
-
-        verify(mListContainer).notifyGroupChildRemoved(
-                entry1.getRow(), entry0.getRow().getChildrenContainer());
-        assertTrue(Lists.newArrayList(entry0.getRow(), entry1.getRow()).equals(mListContainer.mRows));
-        assertEquals(View.GONE, entry0.getRow().getVisibility());
-        assertEquals(View.VISIBLE, entry1.getRow().getVisibility());
-    }
-
-    @Test
-    public void testReentrantCallsToOnDynamicPrivacyChangedPostForLater() {
-        // GIVEN a ListContainer that will make a re-entrant call to updateNotificationViews()
-        mMadeReentrantCall = false;
-        doAnswer((invocation) -> {
-            if (!mMadeReentrantCall) {
-                mMadeReentrantCall = true;
-                mViewHierarchyManager.onDynamicPrivacyChanged();
-            }
-            return null;
-        }).when(mListContainer).onNotificationViewUpdateFinished();
-
-        // WHEN we call updateNotificationViews()
-        mViewHierarchyManager.updateNotificationViews();
-
-        // THEN onNotificationViewUpdateFinished() is only called once
-        verify(mListContainer).onNotificationViewUpdateFinished();
-
-        // WHEN we drain the looper
-        mTestableLooper.processAllMessages();
-
-        // THEN updateNotificationViews() is called a second time (for the reentrant call)
-        verify(mListContainer, times(2)).onNotificationViewUpdateFinished();
-    }
-
-    @Test
-    public void testMultipleReentrantCallsToOnDynamicPrivacyChangedOnlyPostOnce() {
-        // GIVEN a ListContainer that will make many re-entrant calls to updateNotificationViews()
-        mMadeReentrantCall = false;
-        doAnswer((invocation) -> {
-            if (!mMadeReentrantCall) {
-                mMadeReentrantCall = true;
-                mViewHierarchyManager.onDynamicPrivacyChanged();
-                mViewHierarchyManager.onDynamicPrivacyChanged();
-                mViewHierarchyManager.onDynamicPrivacyChanged();
-                mViewHierarchyManager.onDynamicPrivacyChanged();
-            }
-            return null;
-        }).when(mListContainer).onNotificationViewUpdateFinished();
-
-        // WHEN we call updateNotificationViews() and drain the looper
-        mViewHierarchyManager.updateNotificationViews();
-        verify(mListContainer).onNotificationViewUpdateFinished();
-        clearInvocations(mListContainer);
-        mTestableLooper.processAllMessages();
-
-        // THEN updateNotificationViews() is called only one more time
-        verify(mListContainer).onNotificationViewUpdateFinished();
-    }
-
-    private class FakeListContainer implements NotificationListContainer {
-        final LinearLayout mLayout = new LinearLayout(mContext);
-        final List<View> mRows = Lists.newArrayList();
-
-        @Override
-        public void setChildTransferInProgress(boolean childTransferInProgress) {}
-
-        @Override
-        public void changeViewPosition(ExpandableView child, int newIndex) {
-            mRows.remove(child);
-            mRows.add(newIndex, child);
-        }
-
-        @Override
-        public void notifyGroupChildAdded(ExpandableView row) {}
-
-        @Override
-        public void notifyGroupChildRemoved(ExpandableView row, ViewGroup childrenContainer) {}
-
-        @Override
-        public void generateAddAnimation(ExpandableView child, boolean fromMoreCard) {}
-
-        @Override
-        public void generateChildOrderChangedEvent() {}
-
-        @Override
-        public void onReset(ExpandableView view) {}
-
-        @Override
-        public int getContainerChildCount() {
-            return mRows.size();
-        }
-
-        @Override
-        public View getContainerChildAt(int i) {
-            return mRows.get(i);
-        }
-
-        @Override
-        public void removeContainerView(View v) {
-            mLayout.removeView(v);
-            mRows.remove(v);
-        }
-
-        @Override
-        public void setNotificationActivityStarter(
-                NotificationActivityStarter notificationActivityStarter) {}
-
-        @Override
-        public void addContainerView(View v) {
-            mLayout.addView(v);
-            mRows.add(v);
-        }
-
-        @Override
-        public void addContainerViewAt(View v, int index) {
-            mLayout.addView(v, index);
-            mRows.add(index, v);
-        }
-
-        @Override
-        public void setMaxDisplayedNotifications(int maxNotifications) {
-        }
-
-        @Override
-        public ViewGroup getViewParentForNotification(NotificationEntry entry) {
-            return null;
-        }
-
-        @Override
-        public void onHeightChanged(ExpandableView view, boolean animate) {}
-
-        @Override
-        public void resetExposedMenuView(boolean animate, boolean force) {}
-
-        @Override
-        public NotificationSwipeActionHelper getSwipeActionHelper() {
-            return null;
-        }
-
-        @Override
-        public void cleanUpViewStateForEntry(NotificationEntry entry) { }
-
-        @Override
-        public boolean isInVisibleLocation(NotificationEntry entry) {
-            return true;
-        }
-
-        @Override
-        public void setChildLocationsChangedListener(
-                NotificationLogger.OnChildLocationsChangedListener listener) {}
-
-        @Override
-        public boolean hasPulsingNotifications() {
-            return false;
-        }
-
-        @Override
-        public void onNotificationViewUpdateFinished() { }
-    }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/SmartReplyControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/SmartReplyControllerTest.java
index 3500e4d..c75aa81 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/SmartReplyControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/SmartReplyControllerTest.java
@@ -17,15 +17,15 @@
 import static junit.framework.Assert.assertFalse;
 import static junit.framework.Assert.assertTrue;
 
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.argThat;
-import static org.mockito.ArgumentMatchers.isNull;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 import android.app.ActivityManager;
 import android.app.Notification;
 import android.os.Handler;
-import android.os.Looper;
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.service.notification.StatusBarNotification;
@@ -39,14 +39,12 @@
 import com.android.systemui.R;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.dump.DumpManager;
-import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.statusbar.notification.NotifPipelineFlags;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
+import com.android.systemui.statusbar.notification.collection.NotifPipeline;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
+import com.android.systemui.statusbar.notification.collection.coordinator.RemoteInputCoordinator;
+import com.android.systemui.statusbar.notification.collection.notifcollection.InternalNotifUpdater;
 import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider;
-import com.android.systemui.statusbar.phone.CentralSurfaces;
-import com.android.systemui.statusbar.policy.RemoteInputUriController;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -54,8 +52,6 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
-import java.util.Optional;
-
 @RunWith(AndroidTestingRunner.class)
 @TestableLooper.RunWithLooper
 @SmallTest
@@ -67,57 +63,50 @@
     private static final int TEST_CHOICE_COUNT = 4;
     private static final int TEST_ACTION_COUNT = 3;
 
-    private Notification mNotification;
     private NotificationEntry mEntry;
     private SmartReplyController mSmartReplyController;
-    private NotificationRemoteInputManager mRemoteInputManager;
 
     @Mock private NotificationVisibilityProvider mVisibilityProvider;
-    @Mock private RemoteInputController.Delegate mDelegate;
-    @Mock private NotificationRemoteInputManager.Callback mCallback;
     @Mock private StatusBarNotification mSbn;
-    @Mock private NotificationEntryManager mNotificationEntryManager;
     @Mock private IStatusBarService mIStatusBarService;
-    @Mock private StatusBarStateController mStatusBarStateController;
-    @Mock private RemoteInputUriController mRemoteInputUriController;
     @Mock private NotificationClickNotifier mClickNotifier;
+    @Mock private InternalNotifUpdater mInternalNotifUpdater;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        mDependency.injectTestDependency(NotificationEntryManager.class,
-                mNotificationEntryManager);
 
         mSmartReplyController = new SmartReplyController(
                 mock(DumpManager.class),
                 mVisibilityProvider,
                 mIStatusBarService,
                 mClickNotifier);
-        mDependency.injectTestDependency(SmartReplyController.class,
-                mSmartReplyController);
-
-        mRemoteInputManager = new NotificationRemoteInputManager(mContext,
-                mock(NotifPipelineFlags.class),
-                mock(NotificationLockscreenUserManager.class),
-                mSmartReplyController,
-                mVisibilityProvider,
-                mNotificationEntryManager,
+        RemoteInputCoordinator remoteInputCoordinator = new RemoteInputCoordinator(
+                mock(DumpManager.class),
                 new RemoteInputNotificationRebuilder(mContext),
-                () -> Optional.of(mock(CentralSurfaces.class)),
-                mStatusBarStateController,
-                Handler.createAsync(Looper.myLooper()),
-                mRemoteInputUriController,
-                mClickNotifier,
-                mock(ActionClickLogger.class),
-                mock(DumpManager.class));
-        mRemoteInputManager.setUpWithCallback(mCallback, mDelegate);
-        mNotification = new Notification.Builder(mContext, "")
+                mock(NotificationRemoteInputManager.class),
+                mock(Handler.class),
+                mSmartReplyController);
+        remoteInputCoordinator.setRemoteInputController(mock(RemoteInputController.class));
+        NotifPipeline notifPipeline = mock(NotifPipeline.class);
+        when(notifPipeline.getInternalNotifUpdater(anyString())).thenReturn(mInternalNotifUpdater);
+        remoteInputCoordinator.attach(notifPipeline);
+
+        Notification notification = new Notification.Builder(mContext, "")
                 .setSmallIcon(R.drawable.ic_person)
                 .setContentTitle("Title")
                 .setContentText("Text").build();
-
-        mSbn = new StatusBarNotification(TEST_PACKAGE_NAME, TEST_PACKAGE_NAME, 0, null, TEST_UID,
-                0, mNotification, new UserHandle(ActivityManager.getCurrentUser()), null, 0);
+        mSbn = new StatusBarNotification(
+                TEST_PACKAGE_NAME,
+                TEST_PACKAGE_NAME,
+                0,
+                null,
+                TEST_UID,
+                0,
+                notification,
+                new UserHandle(ActivityManager.getCurrentUser()),
+                null,
+                0);
         mEntry = new NotificationEntryBuilder()
                 .setSbn(mSbn)
                 .build();
@@ -128,10 +117,9 @@
         mSmartReplyController.smartReplySent(mEntry, TEST_CHOICE_INDEX, TEST_CHOICE_TEXT,
                 MetricsEvent.LOCATION_UNKNOWN, false /* modifiedBeforeSending */);
 
-        // Sending smart reply should make calls to NotificationEntryManager
-        // to update the notification with reply and spinner.
-        verify(mNotificationEntryManager).updateNotification(
-                argThat(sbn -> sbn.getKey().equals(mSbn.getKey())), isNull());
+        // Sending smart reply should update the notification with reply and spinner.
+        verify(mInternalNotifUpdater).onInternalNotificationUpdate(
+                argThat(sbn -> sbn.getKey().equals(mSbn.getKey())), anyString());
     }
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/SplitShadeLockScreenOverScrollerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/SplitShadeLockScreenOverScrollerTest.kt
index 9d5099c..81d5c4d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/SplitShadeLockScreenOverScrollerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/SplitShadeLockScreenOverScrollerTest.kt
@@ -1,10 +1,10 @@
 package com.android.systemui.statusbar
 
-import org.mockito.Mockito.`when` as whenever
 import android.testing.AndroidTestingRunner
 import android.testing.TestableLooper
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
+import com.android.systemui.dump.DumpManager
 import com.android.systemui.plugins.qs.QS
 import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
 import com.android.systemui.statusbar.phone.ScrimController
@@ -19,6 +19,7 @@
 import org.mockito.Mockito.verify
 import org.mockito.Mockito.verifyNoMoreInteractions
 import org.mockito.Mockito.verifyZeroInteractions
+import org.mockito.Mockito.`when` as whenever
 import org.mockito.MockitoAnnotations
 
 @RunWith(AndroidTestingRunner::class)
@@ -32,6 +33,7 @@
     @Mock private lateinit var statusBarStateController: SysuiStatusBarStateController
     @Mock private lateinit var qS: QS
     @Mock private lateinit var nsslController: NotificationStackScrollLayoutController
+    @Mock private lateinit var dumpManager: DumpManager
 
     private lateinit var overScroller: SplitShadeLockScreenOverScroller
 
@@ -44,11 +46,12 @@
         overScroller =
             SplitShadeLockScreenOverScroller(
                 configurationController,
+                dumpManager,
                 context,
                 scrimController,
                 statusBarStateController,
-                qS,
-                nsslController)
+                { qS },
+                { nsslController })
     }
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconListTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconListTest.java
deleted file mode 100644
index 4c20b61..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconListTest.java
+++ /dev/null
@@ -1,175 +0,0 @@
-package com.android.systemui.statusbar;
-
-import static com.android.systemui.statusbar.phone.StatusBarIconController.TAG_PRIMARY;
-
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertNull;
-import static junit.framework.Assert.assertTrue;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import android.test.suitebuilder.annotation.SmallTest;
-
-import androidx.test.runner.AndroidJUnit4;
-
-import com.android.systemui.SysuiTestCase;
-import com.android.systemui.statusbar.phone.StatusBarIconHolder;
-import com.android.systemui.statusbar.phone.StatusBarIconList;
-import com.android.systemui.statusbar.phone.StatusBarIconList.Slot;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class StatusBarIconListTest extends SysuiTestCase {
-
-    private final static String[] STATUS_BAR_SLOTS = {"aaa", "bbb", "ccc"};
-
-    @Test
-    public void testGetExistingSlot() {
-        StatusBarIconList statusBarIconList = new StatusBarIconList(STATUS_BAR_SLOTS);
-        assertEquals(1, statusBarIconList.getSlotIndex("bbb"));
-        assertEquals(2, statusBarIconList.getSlotIndex("ccc"));
-    }
-
-    @Test
-    public void testGetNonexistingSlot() {
-        StatusBarIconList statusBarIconList = new StatusBarIconList(STATUS_BAR_SLOTS);
-        assertEquals(0, statusBarIconList.getSlotIndex("aaa"));
-        assertEquals(3, statusBarIconList.size());
-        assertEquals(0, statusBarIconList.getSlotIndex("zzz")); // new content added in front
-        assertEquals(1, statusBarIconList.getSlotIndex("aaa")); // slid back
-        assertEquals(4, statusBarIconList.size());
-    }
-
-    @Test
-    public void testAddSlotSlidesIcons() {
-        StatusBarIconList statusBarIconList = new StatusBarIconList(STATUS_BAR_SLOTS);
-        StatusBarIconHolder sbHolder = mock(StatusBarIconHolder.class);
-        statusBarIconList.setIcon(0, sbHolder);
-        statusBarIconList.getSlotIndex("zzz"); // new content added in front
-        assertNull(statusBarIconList.getIcon(0, TAG_PRIMARY));
-        assertEquals(sbHolder, statusBarIconList.getIcon(1, TAG_PRIMARY));
-    }
-
-    @Test
-    public void testGetAndSetIcon() {
-        StatusBarIconList statusBarIconList = new StatusBarIconList(STATUS_BAR_SLOTS);
-        StatusBarIconHolder sbHolderA = mock(StatusBarIconHolder.class);
-        StatusBarIconHolder sbHolderB = mock(StatusBarIconHolder.class);
-        statusBarIconList.setIcon(0, sbHolderA);
-        statusBarIconList.setIcon(1, sbHolderB);
-        assertEquals(sbHolderA, statusBarIconList.getIcon(0, TAG_PRIMARY));
-        assertEquals(sbHolderB, statusBarIconList.getIcon(1, TAG_PRIMARY));
-        assertNull(statusBarIconList.getIcon(2, TAG_PRIMARY)); // icon not set
-    }
-
-    @Test
-    public void testRemoveIcon() {
-        StatusBarIconList statusBarIconList = new StatusBarIconList(STATUS_BAR_SLOTS);
-        StatusBarIconHolder sbHolderA = mock(StatusBarIconHolder.class);
-        StatusBarIconHolder sbHolderB = mock(StatusBarIconHolder.class);
-        statusBarIconList.setIcon(0, sbHolderA);
-        statusBarIconList.setIcon(1, sbHolderB);
-        statusBarIconList.removeIcon(0, TAG_PRIMARY);
-        assertNull(statusBarIconList.getIcon(0, TAG_PRIMARY)); // icon not set
-    }
-
-    @Test
-    public void testGetViewIndex_NoMultiples() {
-        StatusBarIconList statusBarIconList = new StatusBarIconList(STATUS_BAR_SLOTS);
-        StatusBarIconHolder sbHolder = mock(StatusBarIconHolder.class);
-        statusBarIconList.setIcon(2, sbHolder);
-        // Icon for item 2 is 0th child view.
-        assertEquals(0, statusBarIconList.getViewIndex(2, TAG_PRIMARY));
-        statusBarIconList.setIcon(0, sbHolder);
-        // Icon for item 0 is 0th child view,
-        assertEquals(0, statusBarIconList.getViewIndex(0, TAG_PRIMARY));
-        // and item 2 is now 1st child view.
-        assertEquals(1, statusBarIconList.getViewIndex(2, TAG_PRIMARY));
-    }
-
-    @Test
-    public void testGetViewIndex_MultipleIconsPerSlot() {
-        StatusBarIconList statusBarIconList = new StatusBarIconList(STATUS_BAR_SLOTS);
-        StatusBarIconHolder sbHolder = mock(StatusBarIconHolder.class);
-
-        statusBarIconList.setIcon(2, sbHolder); // item 2, one icon 0th child
-
-        // All of these can be added to the same slot
-        // no tag bc it defaults to 0
-        StatusBarIconHolder sbHolder2 = mock(StatusBarIconHolder.class);
-        StatusBarIconHolder sbHolder3 = mock(StatusBarIconHolder.class);
-        int sb3Tag = 1;
-        when(sbHolder3.getTag()).thenReturn(sb3Tag);
-        StatusBarIconHolder sbHolder4 = mock(StatusBarIconHolder.class);
-        int sb4Tag = 2;
-        when(sbHolder4.getTag()).thenReturn(sb4Tag);
-
-        // Put a holder at slot 1, verify that it is first
-        statusBarIconList.setIcon(1, sbHolder2);
-        assertEquals(0, statusBarIconList.getViewIndex(1, TAG_PRIMARY));
-
-        // Put another holder at slot 1, verify it's index 0 and the rest come after
-        statusBarIconList.setIcon(1, sbHolder3);
-        assertEquals(0, statusBarIconList.getViewIndex(1, sb3Tag));
-        assertEquals(1, statusBarIconList.getViewIndex(1, TAG_PRIMARY));
-        // First icon should be at the end
-        assertEquals(2, statusBarIconList.getViewIndex(2, TAG_PRIMARY));
-
-        // Put another one in there just for good measure
-        statusBarIconList.setIcon(1, sbHolder4);
-        assertEquals(0, statusBarIconList.getViewIndex(1, sb4Tag));
-        assertEquals(1, statusBarIconList.getViewIndex(1, sb3Tag));
-        assertEquals(2, statusBarIconList.getViewIndex(1, TAG_PRIMARY));
-        assertEquals(3, statusBarIconList.getViewIndex(2, TAG_PRIMARY));
-    }
-
-    /**
-     * StatusBarIconList.Slot tests
-     */
-
-    @Test
-    public void testSlot_ViewOrder() {
-        Slot testSlot = new Slot("test_name", null);
-
-        // no tag bc it defaults to 0
-        StatusBarIconHolder sbHolder1 = mock(StatusBarIconHolder.class);
-        StatusBarIconHolder sbHolder2 = mock(StatusBarIconHolder.class);
-        int sb2Tag = 1;
-        when(sbHolder2.getTag()).thenReturn(sb2Tag);
-        StatusBarIconHolder sbHolder3 = mock(StatusBarIconHolder.class);
-        int sb3Tag = 2;
-        when(sbHolder3.getTag()).thenReturn(sb3Tag);
-
-        // Add 3 icons in the same slot, and verify that the list we get is equal to what we gave
-        testSlot.addHolder(sbHolder1);
-        testSlot.addHolder(sbHolder2);
-        testSlot.addHolder(sbHolder3);
-
-        // View order is reverse of the order added
-        ArrayList<StatusBarIconHolder> expected = new ArrayList<>();
-        expected.add(sbHolder3);
-        expected.add(sbHolder2);
-        expected.add(sbHolder1);
-
-        assertTrue(listsEqual(expected, testSlot.getHolderListInViewOrder()));
-    }
-
-    private boolean listsEqual(List<StatusBarIconHolder> list1, List<StatusBarIconHolder> list2) {
-        if (list1.size() != list2.size())  return false;
-
-        for (int i = 0; i < list1.size(); i++) {
-            if (!list1.get(i).equals(list2.get(i))) {
-                return false;
-            }
-        }
-
-        return true;
-    }
-}
\ No newline at end of file
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/charging/WiredChargingRippleControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/charging/WiredChargingRippleControllerTest.kt
deleted file mode 100644
index b4cae38..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/charging/WiredChargingRippleControllerTest.kt
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.statusbar.charging
-
-import android.testing.AndroidTestingRunner
-import android.view.View
-import android.view.WindowManager
-import androidx.test.filters.SmallTest
-import com.android.internal.logging.UiEventLogger
-import com.android.systemui.SysuiTestCase
-import com.android.systemui.flags.FeatureFlags
-import com.android.systemui.flags.Flags
-import com.android.systemui.statusbar.commandline.CommandRegistry
-import com.android.systemui.statusbar.policy.BatteryController
-import com.android.systemui.statusbar.policy.ConfigurationController
-import com.android.systemui.util.time.FakeSystemClock
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.mockito.ArgumentCaptor
-import org.mockito.ArgumentMatchers
-import org.mockito.Mock
-import org.mockito.Mockito.`when`
-import org.mockito.Mockito.any
-import org.mockito.Mockito.eq
-import org.mockito.Mockito.reset
-import org.mockito.Mockito.never
-import org.mockito.Mockito.verify
-import org.mockito.MockitoAnnotations
-
-@SmallTest
-@RunWith(AndroidTestingRunner::class)
-class WiredChargingRippleControllerTest : SysuiTestCase() {
-    private lateinit var controller: WiredChargingRippleController
-    @Mock private lateinit var commandRegistry: CommandRegistry
-    @Mock private lateinit var batteryController: BatteryController
-    @Mock private lateinit var featureFlags: FeatureFlags
-    @Mock private lateinit var configurationController: ConfigurationController
-    @Mock private lateinit var rippleView: ChargingRippleView
-    @Mock private lateinit var windowManager: WindowManager
-    @Mock private lateinit var uiEventLogger: UiEventLogger
-    private val systemClock = FakeSystemClock()
-
-    @Before
-    fun setUp() {
-        MockitoAnnotations.initMocks(this)
-        `when`(featureFlags.isEnabled(Flags.CHARGING_RIPPLE)).thenReturn(true)
-        controller = WiredChargingRippleController(
-                commandRegistry, batteryController, configurationController,
-                featureFlags, context, windowManager, systemClock, uiEventLogger)
-        controller.rippleView = rippleView // Replace the real ripple view with a mock instance
-        controller.registerCallbacks()
-    }
-
-    @Test
-    fun testTriggerRipple_UnlockedState() {
-        val captor = ArgumentCaptor
-                .forClass(BatteryController.BatteryStateChangeCallback::class.java)
-        verify(batteryController).addCallback(captor.capture())
-
-        // Verify ripple added to window manager.
-        captor.value.onBatteryLevelChanged(
-                0 /* unusedBatteryLevel */,
-                true /* plugged in */,
-                false /* charging */)
-        val attachListenerCaptor =
-                ArgumentCaptor.forClass(View.OnAttachStateChangeListener::class.java)
-        verify(rippleView).addOnAttachStateChangeListener(attachListenerCaptor.capture())
-        verify(windowManager).addView(eq(rippleView), any<WindowManager.LayoutParams>())
-
-        // Verify ripple started
-        val runnableCaptor =
-                ArgumentCaptor.forClass(Runnable::class.java)
-        attachListenerCaptor.value.onViewAttachedToWindow(rippleView)
-        verify(rippleView).startRipple(runnableCaptor.capture())
-
-        // Verify ripple removed
-        runnableCaptor.value.run()
-        verify(windowManager).removeView(rippleView)
-
-        // Verify event logged
-        verify(uiEventLogger).log(
-                WiredChargingRippleController.WiredChargingRippleEvent.CHARGING_RIPPLE_PLAYED)
-    }
-
-    @Test
-    fun testUpdateRippleColor() {
-        val captor = ArgumentCaptor
-                .forClass(ConfigurationController.ConfigurationListener::class.java)
-        verify(configurationController).addCallback(captor.capture())
-
-        reset(rippleView)
-        captor.value.onThemeChanged()
-        verify(rippleView).setColor(ArgumentMatchers.anyInt())
-
-        reset(rippleView)
-        captor.value.onUiModeChanged()
-        verify(rippleView).setColor(ArgumentMatchers.anyInt())
-    }
-
-    @Test
-    fun testDebounceRipple() {
-        var time: Long = 0
-        systemClock.setElapsedRealtime(time)
-
-        controller.startRippleWithDebounce()
-        verify(rippleView).addOnAttachStateChangeListener(ArgumentMatchers.any())
-
-        reset(rippleView)
-        // Wait a short while and trigger.
-        time += 100
-        systemClock.setElapsedRealtime(time)
-        controller.startRippleWithDebounce()
-
-        // Verify the ripple is debounced.
-        verify(rippleView, never()).addOnAttachStateChangeListener(ArgumentMatchers.any())
-
-        // Trigger many times.
-        for (i in 0..100) {
-            time += 100
-            systemClock.setElapsedRealtime(time)
-            controller.startRippleWithDebounce()
-        }
-        // Verify all attempts are debounced.
-        verify(rippleView, never()).addOnAttachStateChangeListener(ArgumentMatchers.any())
-
-        // Wait a long while and trigger.
-        systemClock.setElapsedRealtime(time + 500000)
-        controller.startRippleWithDebounce()
-        // Verify that ripple is triggered.
-        verify(rippleView).addOnAttachStateChangeListener(ArgumentMatchers.any())
-    }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerBaseTest.java
index e01ebbd..f8a0d2f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerBaseTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerBaseTest.java
@@ -70,8 +70,7 @@
 import com.android.systemui.broadcast.BroadcastDispatcher;
 import com.android.systemui.demomode.DemoModeController;
 import com.android.systemui.dump.DumpManager;
-import com.android.systemui.flags.FeatureFlags;
-import com.android.systemui.flags.Flags;
+import com.android.systemui.log.LogBuffer;
 import com.android.systemui.statusbar.policy.DeviceProvisionedController;
 import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener;
 import com.android.systemui.telephony.TelephonyListenerManager;
@@ -126,8 +125,8 @@
     protected CarrierConfigTracker mCarrierConfigTracker;
     protected FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock());
     protected Handler mMainHandler;
-    protected FeatureFlags mFeatureFlags;
     protected WifiStatusTrackerFactory mWifiStatusTrackerFactory;
+    protected MobileSignalControllerFactory mMobileFactory;
 
     protected int mSubId;
 
@@ -157,9 +156,6 @@
 
     @Before
     public void setUp() throws Exception {
-        mFeatureFlags = mock(FeatureFlags.class);
-        when(mFeatureFlags.isEnabled(Flags.COMBINED_STATUS_BAR_SIGNAL_ICONS)).thenReturn(false);
-
         mInstrumentation = InstrumentationRegistry.getInstrumentation();
         Settings.Global.putInt(mContext.getContentResolver(), Global.AIRPLANE_MODE_ON, 0);
         TestableResources res = mContext.getOrCreateTestableResources();
@@ -223,6 +219,11 @@
 
         mWifiStatusTrackerFactory = new WifiStatusTrackerFactory(
                 mContext, mMockWm, mMockNsm, mMockCm, mMainHandler);
+        mMobileFactory = new MobileSignalControllerFactory(
+                mContext,
+                mCallbackHandler,
+                mCarrierConfigTracker
+        );
 
         mNetworkController = new NetworkControllerImpl(mContext,
                 mMockCm,
@@ -242,9 +243,10 @@
                 mDemoModeController,
                 mCarrierConfigTracker,
                 mWifiStatusTrackerFactory,
+                mMobileFactory,
                 mMainHandler,
-                mFeatureFlags,
-                mock(DumpManager.class)
+                mock(DumpManager.class),
+                mock(LogBuffer.class)
         );
         setupNetworkController();
 
@@ -436,10 +438,6 @@
         updateSignalStrength();
     }
 
-    public void setImsType(int imsType) {
-        mMobileSignalController.setImsType(imsType);
-    }
-
     public void setIsGsm(boolean gsm) {
         when(mSignalStrength.isGsm()).thenReturn(gsm);
         updateSignalStrength();
@@ -635,5 +633,4 @@
     protected void assertDataNetworkNameEquals(String expected) {
         assertEquals("Data network name", expected, mNetworkController.getMobileDataNetworkName());
     }
-
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerDataTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerDataTest.java
index 3a0c203..ed8a3e1 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerDataTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerDataTest.java
@@ -38,6 +38,7 @@
 import com.android.settingslib.mobile.TelephonyIcons;
 import com.android.settingslib.net.DataUsageController;
 import com.android.systemui.dump.DumpManager;
+import com.android.systemui.log.LogBuffer;
 import com.android.systemui.statusbar.policy.DeviceProvisionedController;
 import com.android.systemui.util.CarrierConfigTracker;
 
@@ -125,16 +126,29 @@
     public void test4gDataIcon() {
         // Switch to showing 4g icon and re-initialize the NetworkController.
         mConfig.show4gForLte = true;
-        mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm,
-                mTelephonyListenerManager, mMockWm,
-                mMockSm, mConfig, Looper.getMainLooper(), mFakeExecutor, mCallbackHandler,
+        mNetworkController = new NetworkControllerImpl(
+                mContext,
+                mMockCm,
+                mMockTm,
+                mTelephonyListenerManager,
+                mMockWm,
+                mMockSm,
+                mConfig,
+                Looper.getMainLooper(),
+                mFakeExecutor,
+                mCallbackHandler,
                 mock(AccessPointControllerImpl.class),
-                mock(DataUsageController.class), mMockSubDefaults,
-                mock(DeviceProvisionedController.class), mMockBd, mDemoModeController,
+                mock(DataUsageController.class),
+                mMockSubDefaults,
+                mock(DeviceProvisionedController.class),
+                mMockBd,
+                mDemoModeController,
                 mock(CarrierConfigTracker.class),
                 mWifiStatusTrackerFactory,
+                mMobileFactory,
                 new Handler(TestableLooper.get(this).getLooper()),
-                mFeatureFlags, mock(DumpManager.class));
+                mock(DumpManager.class),
+                mock(LogBuffer.class));
         setupNetworkController();
 
         setupDefaultSignal();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerSignalTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerSignalTest.java
index ae1b3d1..a76676e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerSignalTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerSignalTest.java
@@ -43,6 +43,7 @@
 import com.android.settingslib.net.DataUsageController;
 import com.android.systemui.R;
 import com.android.systemui.dump.DumpManager;
+import com.android.systemui.log.LogBuffer;
 import com.android.systemui.statusbar.policy.DeviceProvisionedController;
 import com.android.systemui.util.CarrierConfigTracker;
 
@@ -84,9 +85,10 @@
                 mDemoModeController,
                 mCarrierConfigTracker,
                 mWifiStatusTrackerFactory,
+                mMobileFactory,
                 mMainHandler,
-                mFeatureFlags,
-                mock(DumpManager.class)
+                mock(DumpManager.class),
+                mock(LogBuffer.class)
         );
         TestableLooper.get(this).processAllMessages();
 
@@ -100,7 +102,8 @@
         when(mMockProvisionController.isCurrentUserSetup()).thenReturn(true);
 
         // WHEN - a NetworkController is created
-        mNetworkController = new NetworkControllerImpl(mContext,
+        mNetworkController = new NetworkControllerImpl(
+                mContext,
                 mMockCm,
                 mMockTm,
                 mTelephonyListenerManager,
@@ -118,10 +121,10 @@
                 mDemoModeController,
                 mCarrierConfigTracker,
                 mWifiStatusTrackerFactory,
+                mMobileFactory,
                 mMainHandler,
-                mFeatureFlags,
-                mock(DumpManager.class)
-        );
+                mock(DumpManager.class),
+                mock(LogBuffer.class));
         TestableLooper.get(this).processAllMessages();
 
         // THEN - NetworkController claims the user is not setup
@@ -133,15 +136,29 @@
         // Turn off mobile network support.
         when(mMockTm.isDataCapable()).thenReturn(false);
         // Create a new NetworkController as this is currently handled in constructor.
-        mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm,
-                mTelephonyListenerManager, mMockWm, mMockSm, mConfig,
-                Looper.getMainLooper(), mFakeExecutor, mCallbackHandler,
-                mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
-                mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd,
-                mDemoModeController, mock(CarrierConfigTracker.class),
+        mNetworkController = new NetworkControllerImpl(
+                mContext,
+                mMockCm,
+                mMockTm,
+                mTelephonyListenerManager,
+                mMockWm,
+                mMockSm,
+                mConfig,
+                Looper.getMainLooper(),
+                mFakeExecutor,
+                mCallbackHandler,
+                mock(AccessPointControllerImpl.class),
+                mock(DataUsageController.class),
+                mMockSubDefaults,
+                mock(DeviceProvisionedController.class),
+                mMockBd,
+                mDemoModeController,
+                mock(CarrierConfigTracker.class),
                 mWifiStatusTrackerFactory,
-                mMainHandler, mFeatureFlags,
-                mock(DumpManager.class));
+                mMobileFactory,
+                mMainHandler,
+                mock(DumpManager.class),
+                mock(LogBuffer.class));
         setupNetworkController();
 
         verifyLastMobileDataIndicators(false, -1, 0);
@@ -156,14 +173,29 @@
         when(mMockTm.getServiceState()).thenReturn(mServiceState);
         when(mMockSm.getCompleteActiveSubscriptionInfoList()).thenReturn(Collections.emptyList());
 
-        mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm,
-                mTelephonyListenerManager, mMockWm, mMockSm, mConfig,
-                Looper.getMainLooper(), mFakeExecutor, mCallbackHandler,
-                mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
-                mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd,
-                mDemoModeController, mock(CarrierConfigTracker.class),
+        mNetworkController = new NetworkControllerImpl(
+                mContext,
+                mMockCm,
+                mMockTm,
+                mTelephonyListenerManager,
+                mMockWm,
+                mMockSm,
+                mConfig,
+                Looper.getMainLooper(),
+                mFakeExecutor,
+                mCallbackHandler,
+                mock(AccessPointControllerImpl.class),
+                mock(DataUsageController.class),
+                mMockSubDefaults,
+                mock(DeviceProvisionedController.class),
+                mMockBd,
+                mDemoModeController,
+                mock(CarrierConfigTracker.class),
                 mWifiStatusTrackerFactory,
-                mMainHandler, mFeatureFlags, mock(DumpManager.class));
+                mMobileFactory,
+                mMainHandler,
+                mock(DumpManager.class),
+                mock(LogBuffer.class));
         mNetworkController.registerListeners();
 
         // Wait for the main looper to execute the previous command
@@ -226,14 +258,29 @@
         // Turn off mobile network support.
         when(mMockTm.isDataCapable()).thenReturn(false);
         // Create a new NetworkController as this is currently handled in constructor.
-        mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm,
-                mTelephonyListenerManager, mMockWm, mMockSm, mConfig,
-                Looper.getMainLooper(), mFakeExecutor, mCallbackHandler,
-                mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
-                mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd,
-                mDemoModeController, mock(CarrierConfigTracker.class),
+        mNetworkController = new NetworkControllerImpl(
+                mContext,
+                mMockCm,
+                mMockTm,
+                mTelephonyListenerManager,
+                mMockWm,
+                mMockSm,
+                mConfig,
+                Looper.getMainLooper(),
+                mFakeExecutor,
+                mCallbackHandler,
+                mock(AccessPointControllerImpl.class),
+                mock(DataUsageController.class),
+                mMockSubDefaults,
+                mock(DeviceProvisionedController.class),
+                mMockBd,
+                mDemoModeController,
+                mock(CarrierConfigTracker.class),
                 mWifiStatusTrackerFactory,
-                mMainHandler, mFeatureFlags, mock(DumpManager.class));
+                mMobileFactory,
+                mMainHandler,
+                mock(DumpManager.class),
+                mock(LogBuffer.class));
         setupNetworkController();
 
         // No Subscriptions.
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerWifiTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerWifiTest.java
index 3f71491..68170ea 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerWifiTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/connectivity/NetworkControllerWifiTest.java
@@ -30,7 +30,6 @@
 import android.net.vcn.VcnTransportInfo;
 import android.net.wifi.WifiInfo;
 import android.net.wifi.WifiManager;
-import android.telephony.CellSignalStrength;
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper.RunWithLooper;
 
@@ -285,44 +284,6 @@
         verifyLastMobileDataIndicatorsForVcn(false, 1, 0, false);
     }
 
-    @Test
-    public void testCallStrengh() {
-        if (true) return;
-        String testSsid = "Test SSID";
-        setWifiEnabled(true);
-        setWifiState(true, testSsid);
-        // Set the ImsType to be IMS_TYPE_WLAN
-        setImsType(2);
-        setWifiLevel(1);
-        for (int testLevel = 0; testLevel < WifiIcons.WIFI_LEVEL_COUNT; testLevel++) {
-            setWifiLevel(testLevel);
-            verifyLastCallStrength(TelephonyIcons.WIFI_CALL_STRENGTH_ICONS[testLevel]);
-        }
-        // Set the ImsType to be IMS_TYPE_WWAN
-        setImsType(1);
-        setupDefaultSignal();
-        for (int testStrength = 0;
-                testStrength < CellSignalStrength.getNumSignalStrengthLevels(); testStrength++) {
-            setLevel(testStrength);
-            verifyLastCallStrength(TelephonyIcons.MOBILE_CALL_STRENGTH_ICONS[testStrength]);
-        }
-    }
-
-    @Test
-    public void testNonPrimaryWiFi() {
-        if (true) return;
-        String testSsid = "Test SSID";
-        setWifiEnabled(true);
-        setWifiState(true, testSsid);
-        // Set the ImsType to be IMS_TYPE_WLAN
-        setImsType(2);
-        setWifiLevel(1);
-        verifyLastCallStrength(TelephonyIcons.WIFI_CALL_STRENGTH_ICONS[1]);
-        when(mWifiInfo.isPrimary()).thenReturn(false);
-        setWifiLevel(3);
-        verifyLastCallStrength(TelephonyIcons.WIFI_CALL_STRENGTH_ICONS[1]);
-    }
-
     protected void setWifiActivity(int activity) {
         // TODO: Not this, because this variable probably isn't sticking around.
         mNetworkController.mWifiSignalController.setActivity(activity);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceControllerTest.kt
index b44f53c..20747a0 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceControllerTest.kt
@@ -33,6 +33,8 @@
 import android.widget.FrameLayout
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
+import com.android.systemui.flags.FeatureFlags
+import com.android.systemui.flags.Flags
 import com.android.systemui.plugins.ActivityStarter
 import com.android.systemui.plugins.BcSmartspaceDataPlugin
 import com.android.systemui.plugins.BcSmartspaceDataPlugin.SmartspaceTargetListener
@@ -41,8 +43,7 @@
 import com.android.systemui.plugins.statusbar.StatusBarStateController
 import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener
 import com.android.systemui.settings.UserTracker
-import com.android.systemui.flags.FeatureFlags
-import com.android.systemui.flags.Flags
+import com.android.systemui.statusbar.phone.KeyguardBypassController
 import com.android.systemui.statusbar.policy.ConfigurationController
 import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener
 import com.android.systemui.statusbar.policy.DeviceProvisionedController
@@ -54,20 +55,20 @@
 import com.android.systemui.util.mockito.eq
 import com.android.systemui.util.settings.SecureSettings
 import com.android.systemui.util.time.FakeSystemClock
+import java.util.Optional
 import org.junit.Before
 import org.junit.Test
 import org.mockito.ArgumentCaptor
 import org.mockito.Captor
 import org.mockito.Mock
-import org.mockito.Mockito.`when`
 import org.mockito.Mockito.anyInt
 import org.mockito.Mockito.clearInvocations
 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
 
 @SmallTest
 class LockscreenSmartspaceControllerTest : SysuiTestCase() {
@@ -81,36 +82,56 @@
     private lateinit var activityStarter: ActivityStarter
     @Mock
     private lateinit var falsingManager: FalsingManager
+
     @Mock
     private lateinit var secureSettings: SecureSettings
+
     @Mock
     private lateinit var userTracker: UserTracker
+
     @Mock
     private lateinit var contentResolver: ContentResolver
+
     @Mock
     private lateinit var configurationController: ConfigurationController
+
     @Mock
     private lateinit var statusBarStateController: StatusBarStateController
+
+    @Mock
+    private lateinit var keyguardBypassController: KeyguardBypassController
+
     @Mock
     private lateinit var deviceProvisionedController: DeviceProvisionedController
+
     @Mock
     private lateinit var handler: Handler
 
     @Mock
     private lateinit var plugin: BcSmartspaceDataPlugin
+
     @Mock
     private lateinit var controllerListener: SmartspaceTargetListener
 
     @Captor
     private lateinit var sessionListenerCaptor: ArgumentCaptor<OnTargetsAvailableListener>
+
     @Captor
     private lateinit var userTrackerCaptor: ArgumentCaptor<UserTracker.Callback>
+
     @Captor
     private lateinit var settingsObserverCaptor: ArgumentCaptor<ContentObserver>
+
     @Captor
     private lateinit var configChangeListenerCaptor: ArgumentCaptor<ConfigurationListener>
+
     @Captor
     private lateinit var statusBarStateListenerCaptor: ArgumentCaptor<StateListener>
+
+    @Captor
+    private lateinit var bypassStateChangedListenerCaptor:
+        ArgumentCaptor<KeyguardBypassController.OnBypassStateChangedListener>
+
     @Captor
     private lateinit var deviceProvisionedCaptor: ArgumentCaptor<DeviceProvisionedListener>
 
@@ -119,6 +140,8 @@
     private lateinit var settingsObserver: ContentObserver
     private lateinit var configChangeListener: ConfigurationListener
     private lateinit var statusBarStateListener: StateListener
+    private lateinit var bypassStateChangeListener:
+        KeyguardBypassController.OnBypassStateChangedListener
     private lateinit var deviceProvisionedListener: DeviceProvisionedListener
 
     private lateinit var smartspaceView: SmartspaceView
@@ -177,11 +200,12 @@
                 configurationController,
                 statusBarStateController,
                 deviceProvisionedController,
+                keyguardBypassController,
                 execution,
                 executor,
                 handler,
                 Optional.of(plugin)
-                )
+        )
 
         verify(deviceProvisionedController).addCallback(capture(deviceProvisionedCaptor))
         deviceProvisionedListener = deviceProvisionedCaptor.value
@@ -310,6 +334,19 @@
     }
 
     @Test
+    fun testKeyguardBypassEnabledUpdatesView() {
+        // GIVEN a connected smartspace session
+        connectSession()
+        `when`(keyguardBypassController.bypassEnabled).thenReturn(true)
+
+        // WHEN the doze amount changes
+        bypassStateChangeListener.onBypassStateChanged(true)
+
+        // We pass that along to the view
+        verify(smartspaceView).setKeyguardBypassEnabled(true)
+    }
+
+    @Test
     fun testSensitiveTargetsAreNotFilteredIfAllowed() {
         // GIVEN the active and managed users allow sensitive content
         connectSession()
@@ -457,6 +494,8 @@
         verify(contentResolver).unregisterContentObserver(settingsObserver)
         verify(configurationController).removeCallback(configChangeListener)
         verify(statusBarStateController).removeCallback(statusBarStateListener)
+        verify(keyguardBypassController)
+                .unregisterOnBypassStateChangedListener(bypassStateChangeListener)
     }
 
     @Test
@@ -478,6 +517,19 @@
     }
 
     @Test
+    fun testViewGetInitializedWithBypassEnabledState() {
+        // GIVEN keyguard bypass is enabled.
+        `when`(keyguardBypassController.bypassEnabled).thenReturn(true)
+
+        // WHEN the view is being built
+        val view = controller.buildAndConnectView(fakeParent)
+        smartspaceView = view as SmartspaceView
+
+        // THEN the view is initialized with the keyguard bypass enabled state.
+        verify(smartspaceView).setKeyguardBypassEnabled(true)
+    }
+
+    @Test
     fun testConnectAttemptBeforeInitializationShouldNotCreateSession() {
         // GIVEN an uninitalized smartspaceView
         // WHEN the device is provisioned
@@ -517,6 +569,9 @@
 
         verify(statusBarStateController).addCallback(statusBarStateListenerCaptor.capture())
         statusBarStateListener = statusBarStateListenerCaptor.value
+        verify(keyguardBypassController)
+            .registerOnBypassStateChangedListener(capture(bypassStateChangedListenerCaptor))
+        bypassStateChangeListener = bypassStateChangedListenerCaptor.value
 
         verify(smartspaceSession).requestSmartspaceUpdate()
         clearInvocations(smartspaceSession)
@@ -585,6 +640,9 @@
             override fun setDozeAmount(amount: Float) {
             }
 
+            override fun setKeyguardBypassEnabled(enabled: Boolean) {
+            }
+
             override fun setIntentStarter(intentStarter: BcSmartspaceDataPlugin.IntentStarter?) {
             }
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicPrivacyControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicPrivacyControllerTest.java
index 7d06abf..3fc0c81 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicPrivacyControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/DynamicPrivacyControllerTest.java
@@ -63,7 +63,7 @@
                 mock(StatusBarKeyguardViewManager.class));
         mDynamicPrivacyController.addListener(mListener);
         // Disable dynamic privacy by default
-        allowPrivateNotificationsInPublic(true);
+        allowNotificationsInPublic(false);
     }
 
     @Test
@@ -108,24 +108,21 @@
 
     @Test
     public void dynamicPrivacyOnlyWhenHidingPrivate() {
-        // Verify that when only hiding notifications, this isn't enabled
-        allowPrivateNotificationsInPublic(true);
-        when(mLockScreenUserManager.shouldHideNotifications(any())).thenReturn(
-                false);
-        assertFalse("Dynamic privacy shouldn't be enabled when only hiding notifications",
+        // Verify that when hiding notifications, this isn't enabled
+        allowNotificationsInPublic(false);
+        assertFalse("Dynamic privacy shouldn't be enabled when hiding notifications",
                 mDynamicPrivacyController.isDynamicPrivacyEnabled());
-        allowPrivateNotificationsInPublic(false);
-        assertTrue("Should be enabled when hiding notification contents",
+        allowNotificationsInPublic(true);
+        assertTrue("Should be enabled whenever notifications are visible",
                 mDynamicPrivacyController.isDynamicPrivacyEnabled());
     }
 
     private void enableDynamicPrivacy() {
-        allowPrivateNotificationsInPublic(false);
+        allowNotificationsInPublic(true);
     }
 
-    private void allowPrivateNotificationsInPublic(boolean allow) {
-        when(mLockScreenUserManager.userAllowsPrivateNotificationsInPublic(anyInt())).thenReturn(
-                allow);
+    private void allowNotificationsInPublic(boolean allow) {
+        when(mLockScreenUserManager.userAllowsNotificationsInPublic(anyInt())).thenReturn(allow);
     }
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java
index 16b0376..842f057 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java
@@ -19,6 +19,8 @@
 import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
 import static android.service.notification.NotificationListenerService.NOTIFICATION_CHANNEL_OR_GROUP_UPDATED;
 import static android.service.notification.NotificationListenerService.REASON_CANCEL;
+import static android.service.notification.NotificationStats.DISMISSAL_SHADE;
+import static android.service.notification.NotificationStats.DISMISS_SENTIMENT_NEUTRAL;
 
 import static com.android.systemui.statusbar.notification.NotificationEntryManager.UNDEFINED_DISMISS_REASON;
 
@@ -41,6 +43,7 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
 import android.app.ActivityManager;
@@ -50,6 +53,7 @@
 import android.content.Intent;
 import android.graphics.drawable.Icon;
 import android.os.Handler;
+import android.os.RemoteException;
 import android.os.UserHandle;
 import android.service.notification.NotificationListenerService.Ranking;
 import android.service.notification.NotificationListenerService.RankingMap;
@@ -73,10 +77,8 @@
 import com.android.systemui.statusbar.NotificationPresenter;
 import com.android.systemui.statusbar.NotificationRemoteInputManager;
 import com.android.systemui.statusbar.NotificationRemoveInterceptor;
-import com.android.systemui.statusbar.RankingBuilder;
 import com.android.systemui.statusbar.SmartReplyController;
 import com.android.systemui.statusbar.notification.NotificationEntryManager.KeyguardEnvironment;
-import com.android.systemui.statusbar.notification.collection.NotifLiveDataStoreMocksKt;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
 import com.android.systemui.statusbar.notification.collection.NotificationRankingManager;
@@ -87,11 +89,12 @@
 import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
 import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier;
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
-import com.android.systemui.statusbar.notification.row.NotificationEntryManagerInflationTest;
 import com.android.systemui.statusbar.notification.row.RowInflaterTask;
 import com.android.systemui.statusbar.policy.DeviceProvisionedController;
 import com.android.systemui.statusbar.policy.HeadsUpManager;
+import com.android.systemui.util.concurrency.FakeExecutor;
 import com.android.systemui.util.leak.LeakDetector;
+import com.android.systemui.util.time.FakeSystemClock;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -109,9 +112,7 @@
 import java.util.Set;
 
 /**
- * Unit tests for {@link NotificationEntryManager}. This test will not test any interactions with
- * inflation. Instead, for functional inflation tests, see
- * {@link NotificationEntryManagerInflationTest}.
+ * Unit tests for {@link NotificationEntryManager}.
  */
 @SmallTest
 @RunWith(AndroidTestingRunner.class)
@@ -138,9 +139,14 @@
     @Mock private NotificationMediaManager mNotificationMediaManager;
     @Mock private NotificationRowBinder mNotificationRowBinder;
     @Mock private NotificationListener mNotificationListener;
+    @Mock private IStatusBarService mStatusBarService;
+
+    private FakeSystemClock mFakeSystemClock = new FakeSystemClock();
+    private FakeExecutor mBgExecutor = new FakeExecutor(mFakeSystemClock);
 
     private int mId;
     private NotificationEntry mEntry;
+    private DismissedByUserStats mStats;
     private StatusBarNotification mSbn;
     private NotificationEntryManager mEntryManager;
 
@@ -191,9 +197,9 @@
                 Handler.createAsync(TestableLooper.get(this).getLooper()));
 
         mEntry = createNotification();
+        mStats = defaultStats(mEntry);
         mSbn = mEntry.getSbn();
 
-        when(mNotifPipelineFlags.isNewPipelineEnabled()).thenReturn(false);
         mEntryManager = new NotificationEntryManager(
                 mLogger,
                 mGroupManager,
@@ -201,9 +207,9 @@
                 () -> mNotificationRowBinder,
                 () -> mRemoteInputManager,
                 mLeakDetector,
-                mock(IStatusBarService.class),
-                NotifLiveDataStoreMocksKt.createNotifLiveDataStoreImplMock(),
-                mock(DumpManager.class)
+                mStatusBarService,
+                mock(DumpManager.class),
+                mBgExecutor
         );
         mEntryManager.initialize(
                 mNotificationListener,
@@ -217,7 +223,6 @@
                         mock(PeopleNotificationIdentifier.class),
                         mock(HighPriorityProvider.class),
                         mEnvironment));
-        mEntryManager.setUpWithPresenter(mPresenter);
         mEntryManager.addNotificationEntryListener(mEntryListener);
         mEntryManager.addCollectionListener(mNotifCollectionListener);
         mEntryManager.addNotificationRemoveInterceptor(mRemoveInterceptor);
@@ -260,17 +265,6 @@
     }
 
     @Test
-    public void testUpdateNotification_updatesUserSentiment() {
-        mEntryManager.addActiveNotificationForTest(mEntry);
-        setUserSentiment(
-                mEntry.getKey(), Ranking.USER_SENTIMENT_NEGATIVE);
-
-        mEntryManager.updateNotification(mSbn, mRankingMap);
-
-        assertEquals(Ranking.USER_SENTIMENT_NEGATIVE, mEntry.getUserSentiment());
-    }
-
-    @Test
     public void testUpdateNotification_prePostEntryOrder() throws Exception {
         TestableLooper.get(this).processAllMessages();
 
@@ -281,7 +275,6 @@
         // Ensure that update callbacks happen in correct order
         InOrder order = inOrder(mEntryListener, mPresenter, mEntryListener);
         order.verify(mEntryListener).onPreEntryUpdated(mEntry);
-        order.verify(mPresenter).updateNotificationViews(any());
         order.verify(mEntryListener).onPostEntryUpdated(mEntry);
     }
 
@@ -292,7 +285,6 @@
 
         mEntryManager.removeNotification(mSbn.getKey(), mRankingMap, UNDEFINED_DISMISS_REASON);
 
-        verify(mPresenter).updateNotificationViews(any());
         verify(mEntryListener).onEntryRemoved(
                 argThat(matchEntryOnKey()), any(),
                 eq(false) /* removedByUser */, eq(UNDEFINED_DISMISS_REASON));
@@ -316,6 +308,31 @@
     }
 
     @Test
+    public void testPerformRemoveNotification_sendRemovalToServer() throws RemoteException {
+        // GIVEN an entry manager with a notification
+        mEntryManager.addActiveNotificationForTest(mEntry);
+
+        // GIVEN interceptor that doesn't intercept
+        when(mRemoveInterceptor.onNotificationRemoveRequested(
+                eq(mEntry.getKey()), argThat(matchEntryOnKey()), anyInt()))
+                .thenReturn(false);
+
+        // WHEN the notification entry is removed
+        mEntryManager.performRemoveNotification(mSbn, mStats, REASON_CANCEL);
+
+        // THEN notification removal is sent to the server
+        FakeExecutor.exhaustExecutors(mBgExecutor);
+        verify(mStatusBarService).onNotificationClear(
+                mSbn.getPackageName(),
+                mSbn.getUser().getIdentifier(),
+                mSbn.getKey(),
+                mStats.dismissalSurface,
+                mStats.dismissalSentiment,
+                mStats.notificationVisibility);
+        verifyNoMoreInteractions(mStatusBarService);
+    }
+
+    @Test
     public void testRemoveNotification_onEntryRemoveNotFiredIfEntryDoesntExist() {
 
         mEntryManager.removeNotification("not_a_real_key", mRankingMap, UNDEFINED_DISMISS_REASON);
@@ -341,23 +358,6 @@
     }
 
     @Test
-    public void testUpdateNotificationRanking() {
-        when(mDeviceProvisionedController.isDeviceProvisioned()).thenReturn(true);
-        when(mEnvironment.isDeviceProvisioned()).thenReturn(true);
-        when(mEnvironment.isNotificationForCurrentProfiles(any())).thenReturn(true);
-
-        mEntry.setRow(mRow);
-        mEntry.setInflationTask(mAsyncInflationTask);
-        mEntryManager.addActiveNotificationForTest(mEntry);
-        setSmartActions(mEntry.getKey(), new ArrayList<>(Arrays.asList(createAction())));
-
-        mEntryManager.updateNotificationRanking(mRankingMap);
-        assertEquals(1, mEntry.getSmartActions().size());
-        assertEquals("action", mEntry.getSmartActions().get(0).title);
-        verify(mEntryListener).onNotificationRankingUpdated(mRankingMap);
-    }
-
-    @Test
     public void testUpdateNotificationRanking_noChange() {
         when(mDeviceProvisionedController.isDeviceProvisioned()).thenReturn(true);
         when(mEnvironment.isNotificationForCurrentProfiles(any())).thenReturn(true);
@@ -371,20 +371,6 @@
     }
 
     @Test
-    public void testUpdateNotificationRanking_rowNotInflatedYet() {
-        when(mDeviceProvisionedController.isDeviceProvisioned()).thenReturn(true);
-        when(mEnvironment.isNotificationForCurrentProfiles(any())).thenReturn(true);
-
-        mEntry.setRow(null);
-        mEntryManager.addActiveNotificationForTest(mEntry);
-        setSmartActions(mEntry.getKey(), new ArrayList<>(Arrays.asList(createAction())));
-
-        mEntryManager.updateNotificationRanking(mRankingMap);
-        assertEquals(1, mEntry.getSmartActions().size());
-        assertEquals("action", mEntry.getSmartActions().get(0).title);
-    }
-
-    @Test
     public void testUpdateNotificationRanking_pendingNotification() {
         when(mDeviceProvisionedController.isDeviceProvisioned()).thenReturn(true);
         when(mEnvironment.isNotificationForCurrentProfiles(any())).thenReturn(true);
@@ -573,51 +559,9 @@
                 any(NotificationVisibility.class), anyBoolean(), eq(UNDEFINED_DISMISS_REASON));
     }
 
-    private NotificationEntry createNotification() {
-        Notification.Builder n = new Notification.Builder(mContext, "id")
-                .setSmallIcon(R.drawable.ic_person)
-                .setContentTitle("Title")
-                .setContentText("Text");
-
-        return new NotificationEntryBuilder()
-                .setPkg(TEST_PACKAGE_NAME)
-                .setOpPkg(TEST_PACKAGE_NAME)
-                .setUid(TEST_UID)
-                .setId(mId++)
-                .setNotification(n.build())
-                .setChannel(new NotificationChannel("id", "", IMPORTANCE_DEFAULT))
-                .setUser(new UserHandle(ActivityManager.getCurrentUser()))
-                .build();
-    }
-
     /* Tests annexed from NotificationDataTest go here */
 
     @Test
-    public void testChannelIsSetWhenAdded() {
-        NotificationChannel nc = new NotificationChannel(
-                "testId",
-                "testName",
-                IMPORTANCE_DEFAULT);
-
-        Ranking r = new RankingBuilder()
-                .setKey(mEntry.getKey())
-                .setChannel(nc)
-                .build();
-
-        RankingMap rm = new RankingMap(new Ranking[] { r });
-
-        // GIVEN: a notification is added, and the ranking updated
-        mEntryManager.addActiveNotificationForTest(mEntry);
-        mEntryManager.updateRanking(rm, "testReason");
-
-        // THEN the notification entry better have a channel on it
-        assertEquals(
-                "Channel must be set when adding a notification",
-                nc.getName(),
-                mEntry.getChannel().getName());
-    }
-
-    @Test
     public void testGetNotificationsForCurrentUser_shouldFilterNonCurrentUserNotifications() {
         Notification.Builder n = new Notification.Builder(mContext, "di")
                 .setSmallIcon(R.drawable.ic_person)
@@ -713,4 +657,28 @@
             return mManagedNotifs.contains(notificationKey);
         }
     }
+
+    private NotificationEntry createNotification() {
+        Notification.Builder n = new Notification.Builder(mContext, "id")
+                .setSmallIcon(R.drawable.ic_person)
+                .setContentTitle("Title")
+                .setContentText("Text");
+
+        return new NotificationEntryBuilder()
+                .setPkg(TEST_PACKAGE_NAME)
+                .setOpPkg(TEST_PACKAGE_NAME)
+                .setUid(TEST_UID)
+                .setId(mId++)
+                .setNotification(n.build())
+                .setChannel(new NotificationChannel("id", "", IMPORTANCE_DEFAULT))
+                .setUser(new UserHandle(ActivityManager.getCurrentUser()))
+                .build();
+    }
+
+    private static DismissedByUserStats defaultStats(NotificationEntry entry) {
+        return new DismissedByUserStats(
+                DISMISSAL_SHADE,
+                DISMISS_SENTIMENT_NEUTRAL,
+                NotificationVisibility.obtain(entry.getKey(), 7, 2, true));
+    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationFilterTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationFilterTest.java
index ed8b532..2cacaf7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationFilterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationFilterTest.java
@@ -46,6 +46,7 @@
 import com.android.systemui.dump.DumpManager;
 import com.android.systemui.media.MediaFeatureFlag;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
 import com.android.systemui.statusbar.notification.NotificationEntryManager.KeyguardEnvironment;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
@@ -55,7 +56,6 @@
 import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier;
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
 import com.android.systemui.statusbar.notification.row.NotificationTestHelper;
-import com.android.systemui.statusbar.phone.ShadeController;
 import com.android.wm.shell.bubbles.Bubbles;
 
 import org.junit.After;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationLaunchAnimatorControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationLaunchAnimatorControllerTest.kt
index 9f82a567..f4458bb 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationLaunchAnimatorControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationLaunchAnimatorControllerTest.kt
@@ -6,11 +6,11 @@
 import androidx.test.filters.SmallTest
 import com.android.internal.jank.InteractionJankMonitor
 import com.android.systemui.SysuiTestCase
+import com.android.systemui.shade.NotificationShadeWindowViewController
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
 import com.android.systemui.statusbar.notification.row.NotificationTestHelper
 import com.android.systemui.statusbar.notification.stack.NotificationListContainer
 import com.android.systemui.statusbar.phone.HeadsUpManagerPhone
-import com.android.systemui.statusbar.phone.NotificationShadeWindowViewController
 import com.android.systemui.statusbar.policy.HeadsUpUtil
 import junit.framework.Assert.assertFalse
 import junit.framework.Assert.assertTrue
@@ -19,8 +19,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.junit.MockitoJUnit
 
 @SmallTest
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NoManSimulator.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NoManSimulator.java
index 4507366..ee7d558 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NoManSimulator.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NoManSimulator.java
@@ -85,6 +85,11 @@
         mRankings.put(key, ranking);
     }
 
+    /** This is for testing error cases: b/216384850 */
+    public Ranking removeRankingWithoutEvent(String key) {
+        return mRankings.remove(key);
+    }
+
     private RankingMap buildRankingMap() {
         return new RankingMap(mRankings.values().toArray(new Ranking[0]));
     }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotifCollectionTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotifCollectionTest.java
index 958d542..4df99be 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotifCollectionTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotifCollectionTest.java
@@ -92,6 +92,7 @@
 import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionLogger;
 import com.android.systemui.statusbar.notification.collection.notifcollection.NotifDismissInterceptor;
 import com.android.systemui.statusbar.notification.collection.notifcollection.NotifLifetimeExtender;
+import com.android.systemui.util.concurrency.FakeExecutor;
 import com.android.systemui.util.time.FakeSystemClock;
 
 import org.junit.Before;
@@ -146,14 +147,13 @@
 
     private NoManSimulator mNoMan;
     private FakeSystemClock mClock = new FakeSystemClock();
+    private FakeExecutor mBgExecutor = new FakeExecutor(mClock);
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         allowTestableLooperAsMainThread();
 
-        when(mNotifPipelineFlags.isNewPipelineEnabled()).thenReturn(true);
-
         when(mEulogizer.record(any(Exception.class))).thenAnswer(i -> i.getArguments()[0]);
 
         mListenerInOrder = inOrder(mCollectionListener);
@@ -164,6 +164,7 @@
                 mNotifPipelineFlags,
                 mLogger,
                 mMainHandler,
+                mBgExecutor,
                 mEulogizer,
                 mock(DumpManager.class));
         mCollection.attach(mGroupCoalescer);
@@ -463,6 +464,8 @@
         DismissedByUserStats stats = defaultStats(entry2);
         mCollection.dismissNotification(entry2, defaultStats(entry2));
 
+        FakeExecutor.exhaustExecutors(mBgExecutor);
+
         // THEN we send the dismissal to system server
         verify(mStatusBarService).onNotificationClear(
                 notif2.sbn.getPackageName(),
@@ -676,6 +679,8 @@
         mInterceptor1.onEndInterceptionCallback.onEndDismissInterception(mInterceptor1, entry,
                 stats);
 
+        FakeExecutor.exhaustExecutors(mBgExecutor);
+
         // THEN we send the dismissal to system server
         verify(mStatusBarService).onNotificationClear(
                 eq(notif.sbn.getPackageName()),
@@ -1213,6 +1218,7 @@
                         new Pair<>(entry2, defaultStats(entry2))));
 
         // THEN we send the dismissals to system server
+        FakeExecutor.exhaustExecutors(mBgExecutor);
         verify(mStatusBarService).onNotificationClear(
                 notif1.sbn.getPackageName(),
                 notif1.sbn.getUser().getIdentifier(),
@@ -1492,6 +1498,80 @@
     }
 
     @Test
+    public void testMissingRankingWhenRemovalFeatureIsDisabled() {
+        // GIVEN a pipeline with one two notifications
+        when(mNotifPipelineFlags.removeUnrankedNotifs()).thenReturn(false);
+        String key1 = mNoMan.postNotif(buildNotif(TEST_PACKAGE, 1, "myTag")).key;
+        String key2 = mNoMan.postNotif(buildNotif(TEST_PACKAGE, 2, "myTag")).key;
+        NotificationEntry entry1 = mCollectionListener.getEntry(key1);
+        NotificationEntry entry2 = mCollectionListener.getEntry(key2);
+        clearInvocations(mCollectionListener);
+
+        // GIVEN the message for removing key1 gets does not reach NotifCollection
+        Ranking ranking1 = mNoMan.removeRankingWithoutEvent(key1);
+        // WHEN the message for removing key2 arrives
+        mNoMan.retractNotif(entry2.getSbn(), REASON_APP_CANCEL);
+
+        // THEN only entry2 gets removed
+        verify(mCollectionListener).onEntryRemoved(eq(entry2), eq(REASON_APP_CANCEL));
+        verify(mCollectionListener).onEntryCleanUp(eq(entry2));
+        verify(mCollectionListener).onRankingApplied();
+        verifyNoMoreInteractions(mCollectionListener);
+        verify(mLogger).logMissingRankings(eq(List.of(entry1)), eq(1), any());
+        verify(mLogger, never()).logRecoveredRankings(any());
+        clearInvocations(mCollectionListener, mLogger);
+
+        // WHEN a ranking update includes key1 again
+        mNoMan.setRanking(key1, ranking1);
+        mNoMan.issueRankingUpdate();
+
+        // VERIFY that we do nothing but log the 'recovery'
+        verify(mCollectionListener).onRankingUpdate(any());
+        verify(mCollectionListener).onRankingApplied();
+        verifyNoMoreInteractions(mCollectionListener);
+        verify(mLogger, never()).logMissingRankings(any(), anyInt(), any());
+        verify(mLogger).logRecoveredRankings(eq(List.of(key1)));
+    }
+
+    @Test
+    public void testMissingRankingWhenRemovalFeatureIsEnabled() {
+        // GIVEN a pipeline with one two notifications
+        when(mNotifPipelineFlags.removeUnrankedNotifs()).thenReturn(true);
+        String key1 = mNoMan.postNotif(buildNotif(TEST_PACKAGE, 1, "myTag")).key;
+        String key2 = mNoMan.postNotif(buildNotif(TEST_PACKAGE, 2, "myTag")).key;
+        NotificationEntry entry1 = mCollectionListener.getEntry(key1);
+        NotificationEntry entry2 = mCollectionListener.getEntry(key2);
+        clearInvocations(mCollectionListener);
+
+        // GIVEN the message for removing key1 gets does not reach NotifCollection
+        Ranking ranking1 = mNoMan.removeRankingWithoutEvent(key1);
+        // WHEN the message for removing key2 arrives
+        mNoMan.retractNotif(entry2.getSbn(), REASON_APP_CANCEL);
+
+        // THEN both entry1 and entry2 get removed
+        verify(mCollectionListener).onEntryRemoved(eq(entry2), eq(REASON_APP_CANCEL));
+        verify(mCollectionListener).onEntryRemoved(eq(entry1), eq(REASON_UNKNOWN));
+        verify(mCollectionListener).onEntryCleanUp(eq(entry2));
+        verify(mCollectionListener).onEntryCleanUp(eq(entry1));
+        verify(mCollectionListener).onRankingApplied();
+        verifyNoMoreInteractions(mCollectionListener);
+        verify(mLogger).logMissingRankings(eq(List.of(entry1)), eq(1), any());
+        verify(mLogger, never()).logRecoveredRankings(any());
+        clearInvocations(mCollectionListener, mLogger);
+
+        // WHEN a ranking update includes key1 again
+        mNoMan.setRanking(key1, ranking1);
+        mNoMan.issueRankingUpdate();
+
+        // VERIFY that we do nothing but log the 'recovery'
+        verify(mCollectionListener).onRankingUpdate(any());
+        verify(mCollectionListener).onRankingApplied();
+        verifyNoMoreInteractions(mCollectionListener);
+        verify(mLogger, never()).logMissingRankings(any(), anyInt(), any());
+        verify(mLogger).logRecoveredRankings(eq(List.of(key1)));
+    }
+
+    @Test
     public void testRegisterFutureDismissal() throws RemoteException {
         // GIVEN a pipeline with one notification
         NotifEvent notifEvent = mNoMan.postNotif(buildNotif(TEST_PACKAGE, 47, "myTag"));
@@ -1505,6 +1585,7 @@
 
         // WHEN finally dismissing
         onDismiss.run();
+        FakeExecutor.exhaustExecutors(mBgExecutor);
         verify(mStatusBarService).onNotificationClear(any(), anyInt(), eq(notifEvent.key),
                 anyInt(), anyInt(), any());
         verifyNoMoreInteractions(mStatusBarService);
@@ -1610,9 +1691,9 @@
         return new CollectionEvent(rawEvent, requireNonNull(mEntryCaptor.getValue()));
     }
 
-    private void verifyBuiltList(Collection<NotificationEntry> list) {
-        verify(mBuildListener).onBuildList(mBuildListCaptor.capture());
-        assertEquals(new ArraySet<>(list), new ArraySet<>(mBuildListCaptor.getValue()));
+    private void verifyBuiltList(Collection<NotificationEntry> expectedList) {
+        verify(mBuildListener).onBuildList(mBuildListCaptor.capture(), any());
+        assertThat(mBuildListCaptor.getValue()).containsExactly(expectedList.toArray());
     }
 
     private static class RecordingCollectionListener implements NotifCollectionListener {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryTest.java
index 769143d..d4add75 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryTest.java
@@ -108,6 +108,7 @@
     @Test
     public void testBlockableEntryWhenCritical() {
         doReturn(true).when(mChannel).isBlockable();
+        mEntry.setRanking(mEntry.getRanking());
 
         assertTrue(mEntry.isBlockable());
     }
@@ -117,6 +118,7 @@
     public void testBlockableEntryWhenCriticalAndChannelNotBlockable() {
         doReturn(true).when(mChannel).isBlockable();
         doReturn(true).when(mChannel).isImportanceLockedByCriticalDeviceFunction();
+        mEntry.setRanking(mEntry.getRanking());
 
         assertTrue(mEntry.isBlockable());
     }
@@ -125,6 +127,7 @@
     public void testNonBlockableEntryWhenCriticalAndChannelNotBlockable() {
         doReturn(false).when(mChannel).isBlockable();
         doReturn(true).when(mChannel).isImportanceLockedByCriticalDeviceFunction();
+        mEntry.setRanking(mEntry.getRanking());
 
         assertFalse(mEntry.isBlockable());
     }
@@ -164,6 +167,9 @@
         doReturn(true).when(mChannel).isImportanceLockedByCriticalDeviceFunction();
         doReturn(false).when(mChannel).isBlockable();
 
+        mEntry.setRanking(mEntry.getRanking());
+
+        assertFalse(mEntry.isBlockable());
         assertTrue(mEntry.isExemptFromDndVisualSuppression());
         assertFalse(mEntry.shouldSuppressAmbient());
     }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilderTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilderTest.java
index 4e7e79f..dfa38ab 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilderTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilderTest.java
@@ -53,6 +53,7 @@
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.dump.DumpManager;
 import com.android.systemui.statusbar.NotificationInteractionTracker;
+import com.android.systemui.statusbar.RankingBuilder;
 import com.android.systemui.statusbar.notification.NotifPipelineFlags;
 import com.android.systemui.statusbar.notification.collection.ShadeListBuilder.OnRenderListListener;
 import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection;
@@ -569,7 +570,7 @@
         assertTrue(entry.hasFinishedInitialization());
 
         // WHEN the pipeline is kicked off
-        mReadyForBuildListener.onBuildList(singletonList(entry));
+        mReadyForBuildListener.onBuildList(singletonList(entry), "test");
         mPipelineChoreographer.runIfScheduled();
 
         // THEN the entry's initialization time is reset
@@ -1027,37 +1028,37 @@
         // WHEN each pluggable is invalidated THEN the list is re-rendered
 
         clearInvocations(mOnRenderListListener);
-        packageFilter.invalidateList();
+        packageFilter.invalidateList(null);
         assertTrue(mPipelineChoreographer.isScheduled());
         mPipelineChoreographer.runIfScheduled();
         verify(mOnRenderListListener).onRenderList(anyList());
 
         clearInvocations(mOnRenderListListener);
-        idPromoter.invalidateList();
+        idPromoter.invalidateList(null);
         assertTrue(mPipelineChoreographer.isScheduled());
         mPipelineChoreographer.runIfScheduled();
         verify(mOnRenderListListener).onRenderList(anyList());
 
         clearInvocations(mOnRenderListListener);
-        section.invalidateList();
+        section.invalidateList(null);
         assertTrue(mPipelineChoreographer.isScheduled());
         mPipelineChoreographer.runIfScheduled();
         verify(mOnRenderListListener).onRenderList(anyList());
 
         clearInvocations(mOnRenderListListener);
-        hypeComparator.invalidateList();
+        hypeComparator.invalidateList(null);
         assertTrue(mPipelineChoreographer.isScheduled());
         mPipelineChoreographer.runIfScheduled();
         verify(mOnRenderListListener).onRenderList(anyList());
 
         clearInvocations(mOnRenderListListener);
-        sectionComparator.invalidateList();
+        sectionComparator.invalidateList(null);
         assertTrue(mPipelineChoreographer.isScheduled());
         mPipelineChoreographer.runIfScheduled();
         verify(mOnRenderListListener).onRenderList(anyList());
 
         clearInvocations(mOnRenderListListener);
-        preRenderInvalidator.invalidateList();
+        preRenderInvalidator.invalidateList(null);
         assertTrue(mPipelineChoreographer.isScheduled());
         mPipelineChoreographer.runIfScheduled();
         verify(mOnRenderListListener).onRenderList(anyList());
@@ -1583,7 +1584,7 @@
 
         // WHEN visual stability manager allows group changes again
         mStabilityManager.setAllowGroupChanges(true);
-        mStabilityManager.invalidateList();
+        mStabilityManager.invalidateList(null);
         mPipelineChoreographer.runIfScheduled();
 
         // THEN entries are grouped
@@ -1622,7 +1623,7 @@
 
         // WHEN section changes are allowed again
         mStabilityManager.setAllowSectionChanges(true);
-        mStabilityManager.invalidateList();
+        mStabilityManager.invalidateList(null);
         mPipelineChoreographer.runIfScheduled();
 
         // THEN the section updates
@@ -1718,7 +1719,7 @@
     public void testOutOfOrderPreGroupFilterInvalidationThrows() {
         // GIVEN a PreGroupNotifFilter that gets invalidated during the grouping stage
         NotifFilter filter = new PackageFilter(PACKAGE_5);
-        OnBeforeTransformGroupsListener listener = (list) -> filter.invalidateList();
+        OnBeforeTransformGroupsListener listener = (list) -> filter.invalidateList(null);
         mListBuilder.addPreGroupFilter(filter);
         mListBuilder.addOnBeforeTransformGroupsListener(listener);
 
@@ -1734,7 +1735,7 @@
         // GIVEN a NotifPromoter that gets invalidated during the sorting stage
         NotifPromoter promoter = new IdPromoter(47);
         OnBeforeSortListener listener =
-                (list) -> promoter.invalidateList();
+                (list) -> promoter.invalidateList(null);
         mListBuilder.addPromoter(promoter);
         mListBuilder.addOnBeforeSortListener(listener);
 
@@ -1750,7 +1751,7 @@
         // GIVEN a NotifComparator that gets invalidated during the finalizing stage
         NotifComparator comparator = new HypeComparator(PACKAGE_5);
         OnBeforeRenderListListener listener =
-                (list) -> comparator.invalidateList();
+                (list) -> comparator.invalidateList(null);
         mListBuilder.setComparators(singletonList(comparator));
         mListBuilder.addOnBeforeRenderListListener(listener);
 
@@ -1765,7 +1766,7 @@
     public void testOutOfOrderPreRenderFilterInvalidationThrows() {
         // GIVEN a PreRenderNotifFilter that gets invalidated during the finalizing stage
         NotifFilter filter = new PackageFilter(PACKAGE_5);
-        OnBeforeRenderListListener listener = (list) -> filter.invalidateList();
+        OnBeforeRenderListListener listener = (list) -> filter.invalidateList(null);
         mListBuilder.addFinalizeFilter(filter);
         mListBuilder.addOnBeforeRenderListListener(listener);
 
@@ -1797,6 +1798,7 @@
 
     @Test
     public void testStableMultipleSectionOrdering() {
+        // WHEN the list is originally built with reordering disabled
         mListBuilder.setSectioners(asList(
                 new PackageSectioner(PACKAGE_1), new PackageSectioner(PACKAGE_2)));
         mStabilityManager.setAllowEntryReordering(false);
@@ -1807,19 +1809,101 @@
         addNotif(3, PACKAGE_1).setRank(3);
         dispatchBuild();
 
+        // VERIFY the order and that entry reordering has not been suppressed
         verifyBuiltList(
                 notif(0),
                 notif(1),
                 notif(3),
                 notif(2)
         );
+        verify(mStabilityManager, never()).onEntryReorderSuppressed();
+
+        // WHEN the ranks change
+        setNewRank(notif(0).entry, 4);
+        dispatchBuild();
+
+        // VERIFY the order does not change that entry reordering has been suppressed
+        verifyBuiltList(
+                notif(0),
+                notif(1),
+                notif(3),
+                notif(2)
+        );
+        verify(mStabilityManager).onEntryReorderSuppressed();
+
+        // WHEN reordering is now allowed again
+        mStabilityManager.setAllowEntryReordering(true);
+        dispatchBuild();
+
+        // VERIFY that list order changes
+        verifyBuiltList(
+                notif(1),
+                notif(3),
+                notif(0),
+                notif(2)
+        );
+    }
+
+    @Test
+    public void testStableChildOrdering() {
+        // WHEN the list is originally built with reordering disabled
+        mStabilityManager.setAllowEntryReordering(false);
+        addGroupSummary(0, PACKAGE_1, GROUP_1).setRank(0);
+        addGroupChild(1, PACKAGE_1, GROUP_1).setRank(1);
+        addGroupChild(2, PACKAGE_1, GROUP_1).setRank(2);
+        addGroupChild(3, PACKAGE_1, GROUP_1).setRank(3);
+        dispatchBuild();
+
+        // VERIFY the order and that entry reordering has not been suppressed
+        verifyBuiltList(
+                group(
+                        summary(0),
+                        child(1),
+                        child(2),
+                        child(3)
+                )
+        );
+        verify(mStabilityManager, never()).onEntryReorderSuppressed();
+
+        // WHEN the ranks change
+        setNewRank(notif(2).entry, 5);
+        dispatchBuild();
+
+        // VERIFY the order does not change that entry reordering has been suppressed
+        verifyBuiltList(
+                group(
+                        summary(0),
+                        child(1),
+                        child(2),
+                        child(3)
+                )
+        );
+        verify(mStabilityManager).onEntryReorderSuppressed();
+
+        // WHEN reordering is now allowed again
+        mStabilityManager.setAllowEntryReordering(true);
+        dispatchBuild();
+
+        // VERIFY that list order changes
+        verifyBuiltList(
+                group(
+                        summary(0),
+                        child(1),
+                        child(3),
+                        child(2)
+                )
+        );
+    }
+
+    private static void setNewRank(NotificationEntry entry, int rank) {
+        entry.setRanking(new RankingBuilder(entry.getRanking()).setRank(rank).build());
     }
 
     @Test
     public void testInOrderPreRenderFilter() {
         // GIVEN a PreRenderFilter that gets invalidated during the grouping stage
         NotifFilter filter = new PackageFilter(PACKAGE_5);
-        OnBeforeTransformGroupsListener listener = (list) -> filter.invalidateList();
+        OnBeforeTransformGroupsListener listener = (list) -> filter.invalidateList(null);
         mListBuilder.addFinalizeFilter(filter);
         mListBuilder.addOnBeforeTransformGroupsListener(listener);
 
@@ -1852,8 +1936,8 @@
         mListBuilder.addFinalizeFilter(filter2);
 
         // WHEN both filters invalidate
-        filter1.invalidateList();
-        filter2.invalidateList();
+        filter1.invalidateList(null);
+        filter2.invalidateList(null);
 
         // THEN the pipeline choreographer is scheduled to evaluate, AND the pipeline hasn't
         // actually run.
@@ -2008,7 +2092,7 @@
             mPendingSet.clear();
         }
 
-        mReadyForBuildListener.onBuildList(mEntrySet);
+        mReadyForBuildListener.onBuildList(mEntrySet, "test");
         mPipelineChoreographer.runIfScheduled();
     }
 
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 699f77f..2ee3126 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
@@ -59,6 +59,7 @@
 import org.mockito.Mockito.verify
 import org.mockito.MockitoAnnotations
 import java.util.ArrayList
+import java.util.function.Consumer
 import org.mockito.Mockito.`when` as whenever
 
 @SmallTest
@@ -75,6 +76,7 @@
     private lateinit var mBeforeFinalizeFilterListener: OnBeforeFinalizeFilterListener
     private lateinit var mOnHeadsUpChangedListener: OnHeadsUpChangedListener
     private lateinit var mNotifSectioner: NotifSectioner
+    private lateinit var mActionPressListener: Consumer<NotificationEntry>
 
     private val mNotifPipeline: NotifPipeline = mock()
     private val mLogger = HeadsUpCoordinatorLogger(logcatLogBuffer(), verbose = true)
@@ -131,6 +133,9 @@
         mOnHeadsUpChangedListener = withArgCaptor {
             verify(mHeadsUpManager).addListener(capture())
         }
+        mActionPressListener = withArgCaptor {
+            verify(mRemoteInputManager).addActionPressListener(capture())
+        }
         given(mHeadsUpManager.allEntries).willAnswer { mHuns.stream() }
         given(mHeadsUpManager.isAlerting(anyString())).willAnswer { invocation ->
             val key = invocation.getArgument<String>(0)
@@ -199,6 +204,19 @@
     }
 
     @Test
+    fun hunExtensionCancelledWhenHunActionPressed() {
+        whenever(mHeadsUpManager.isSticky(anyString())).thenReturn(true)
+        addHUN(mEntry)
+        whenever(mHeadsUpManager.canRemoveImmediately(anyString())).thenReturn(false)
+        whenever(mHeadsUpManager.getEarliestRemovalTime(anyString())).thenReturn(1000L)
+        assertTrue(mNotifLifetimeExtender.maybeExtendLifetime(mEntry, 0))
+        mActionPressListener.accept(mEntry)
+        mExecutor.advanceClockToLast()
+        mExecutor.runAllReady()
+        verify(mHeadsUpManager, times(1)).removeNotification(eq(mEntry.key), eq(true))
+    }
+
+    @Test
     fun testCancelUpdatedStickyNotification() {
         whenever(mHeadsUpManager.isSticky(anyString())).thenReturn(true)
         addHUN(mEntry)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/HideNotifsForOtherUsersCoordinatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/HideNotifsForOtherUsersCoordinatorTest.java
index d21053b..27542a4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/HideNotifsForOtherUsersCoordinatorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/HideNotifsForOtherUsersCoordinatorTest.java
@@ -18,7 +18,9 @@
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -51,7 +53,6 @@
     @Mock private NotificationLockscreenUserManager mLockscreenUserManager;
     @Mock private NotifPipeline mNotifPipeline;
     @Mock private PluggableListener<NotifFilter> mInvalidationListener;
-    @Mock private SharedCoordinatorLogger mLogger;
 
     @Captor private ArgumentCaptor<UserChangedListener> mUserChangedListenerCaptor;
     @Captor private ArgumentCaptor<NotifFilter> mNotifFilterCaptor;
@@ -66,7 +67,7 @@
         MockitoAnnotations.initMocks(this);
 
         HideNotifsForOtherUsersCoordinator coordinator =
-                new HideNotifsForOtherUsersCoordinator(mLockscreenUserManager, mLogger);
+                new HideNotifsForOtherUsersCoordinator(mLockscreenUserManager);
         coordinator.attach(mNotifPipeline);
 
         verify(mLockscreenUserManager).addUserChangedListener(mUserChangedListenerCaptor.capture());
@@ -102,6 +103,6 @@
         mCapturedUserChangeListener.onCurrentProfilesChanged(new SparseArray<>());
 
         // THEN the filter is invalidated
-        verify(mInvalidationListener).onPluggableInvalidated(mCapturedNotifFilter);
+        verify(mInvalidationListener).onPluggableInvalidated(eq(mCapturedNotifFilter), any());
     }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorTest.java
deleted file mode 100644
index d082d74..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorTest.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.systemui.statusbar.notification.collection.coordinator;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-
-import android.os.Handler;
-import android.os.UserHandle;
-import android.testing.AndroidTestingRunner;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.keyguard.KeyguardUpdateMonitor;
-import com.android.systemui.SysuiTestCase;
-import com.android.systemui.broadcast.BroadcastDispatcher;
-import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.statusbar.notification.SectionHeaderVisibilityProvider;
-import com.android.systemui.statusbar.notification.collection.NotifPipeline;
-import com.android.systemui.statusbar.notification.collection.NotificationEntry;
-import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
-import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
-import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
-import com.android.systemui.statusbar.notification.interruption.KeyguardNotificationVisibilityProvider;
-import com.android.systemui.statusbar.policy.KeyguardStateController;
-
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-/**
- * TODO(b/224771204) Create test cases
- */
-@SmallTest
-@RunWith(AndroidTestingRunner.class)
-@Ignore
-public class KeyguardCoordinatorTest extends SysuiTestCase {
-    private static final int NOTIF_USER_ID = 0;
-    private static final int CURR_USER_ID = 1;
-
-    @Mock private Handler mMainHandler;
-    @Mock private KeyguardStateController mKeyguardStateController;
-    @Mock private BroadcastDispatcher mBroadcastDispatcher;
-    @Mock private StatusBarStateController mStatusBarStateController;
-    @Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
-    @Mock private HighPriorityProvider mHighPriorityProvider;
-    @Mock private SectionHeaderVisibilityProvider mSectionHeaderVisibilityProvider;
-    @Mock private NotifPipeline mNotifPipeline;
-    @Mock private KeyguardNotificationVisibilityProvider mKeyguardNotificationVisibilityProvider;
-
-    private NotificationEntry mEntry;
-    private NotifFilter mKeyguardFilter;
-
-    @Before
-    public void setup() {
-        MockitoAnnotations.initMocks(this);
-        KeyguardCoordinator keyguardCoordinator = new KeyguardCoordinator(
-                mStatusBarStateController,
-                mKeyguardUpdateMonitor, mHighPriorityProvider, mSectionHeaderVisibilityProvider,
-                mKeyguardNotificationVisibilityProvider, mock(SharedCoordinatorLogger.class));
-
-        mEntry = new NotificationEntryBuilder()
-                .setUser(new UserHandle(NOTIF_USER_ID))
-                .build();
-
-        ArgumentCaptor<NotifFilter> filterCaptor = ArgumentCaptor.forClass(NotifFilter.class);
-        keyguardCoordinator.attach(mNotifPipeline);
-        verify(mNotifPipeline, times(1)).addFinalizeFilter(filterCaptor.capture());
-        mKeyguardFilter = filterCaptor.getValue();
-    }
-}
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
new file mode 100644
index 0000000..7e2e6f6
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/KeyguardCoordinatorTest.kt
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 android.testing.AndroidTestingRunner
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.plugins.statusbar.StatusBarStateController
+import com.android.systemui.statusbar.StatusBarState
+import com.android.systemui.statusbar.notification.collection.NotifPipeline
+import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter
+import com.android.systemui.statusbar.notification.collection.provider.SectionHeaderVisibilityProvider
+import com.android.systemui.statusbar.notification.interruption.KeyguardNotificationVisibilityProvider
+import com.android.systemui.util.mockito.eq
+import com.android.systemui.util.mockito.mock
+import com.android.systemui.util.mockito.withArgCaptor
+import java.util.function.Consumer
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito.clearInvocations
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when` as whenever
+
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+class KeyguardCoordinatorTest : SysuiTestCase() {
+    private val notifPipeline: NotifPipeline = mock()
+    private val keyguardNotifVisibilityProvider: KeyguardNotificationVisibilityProvider = mock()
+    private val sectionHeaderVisibilityProvider: SectionHeaderVisibilityProvider = mock()
+    private val statusBarStateController: StatusBarStateController = mock()
+
+    private lateinit var onStateChangeListener: Consumer<String>
+    private lateinit var keyguardFilter: NotifFilter
+
+    @Before
+    fun setup() {
+        val keyguardCoordinator = KeyguardCoordinator(
+            keyguardNotifVisibilityProvider,
+            sectionHeaderVisibilityProvider,
+            statusBarStateController
+        )
+        keyguardCoordinator.attach(notifPipeline)
+        onStateChangeListener = withArgCaptor {
+            verify(keyguardNotifVisibilityProvider).addOnStateChangedListener(capture())
+        }
+        keyguardFilter = withArgCaptor {
+            verify(notifPipeline).addFinalizeFilter(capture())
+        }
+    }
+
+    @Test
+    fun testSetSectionHeadersVisibleInShade() {
+        clearInvocations(sectionHeaderVisibilityProvider)
+        whenever(statusBarStateController.state).thenReturn(StatusBarState.SHADE)
+        onStateChangeListener.accept("state change")
+        verify(sectionHeaderVisibilityProvider).sectionHeadersVisible = eq(true)
+    }
+
+    @Test
+    fun testSetSectionHeadersNotVisibleOnKeyguard() {
+        clearInvocations(sectionHeaderVisibilityProvider)
+        whenever(statusBarStateController.state).thenReturn(StatusBarState.KEYGUARD)
+        onStateChangeListener.accept("state change")
+        verify(sectionHeaderVisibilityProvider).sectionHeadersVisible = eq(false)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinatorTest.java
index d327be4..f4adf69 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinatorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinatorTest.java
@@ -31,6 +31,7 @@
 
 import static java.util.Objects.requireNonNull;
 
+import android.os.Handler;
 import android.os.RemoteException;
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
@@ -42,7 +43,6 @@
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
 import com.android.systemui.statusbar.RankingBuilder;
-import com.android.systemui.statusbar.notification.SectionClassifier;
 import com.android.systemui.statusbar.notification.collection.GroupEntry;
 import com.android.systemui.statusbar.notification.collection.GroupEntryBuilder;
 import com.android.systemui.statusbar.notification.collection.ListEntry;
@@ -57,8 +57,10 @@
 import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
 import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner;
 import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
+import com.android.systemui.statusbar.notification.collection.provider.SectionStyleProvider;
 import com.android.systemui.statusbar.notification.collection.render.NotifViewBarn;
 import com.android.systemui.statusbar.notification.row.NotifInflationErrorManager;
+import com.android.systemui.util.settings.SecureSettings;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -97,8 +99,10 @@
     @Mock private IStatusBarService mService;
     @Mock private BindEventManagerImpl mBindEventManagerImpl;
     @Mock private NotificationLockscreenUserManager mLockscreenUserManager;
+    @Mock private Handler mHandler;
+    @Mock private SecureSettings mSecureSettings;
     @Spy private FakeNotifInflater mNotifInflater = new FakeNotifInflater();
-    private final SectionClassifier mSectionClassifier = new SectionClassifier();
+    private final SectionStyleProvider mSectionStyleProvider = new SectionStyleProvider();
 
     private NotifUiAdjustmentProvider mAdjustmentProvider;
 
@@ -110,8 +114,11 @@
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        mAdjustmentProvider =
-            new NotifUiAdjustmentProvider(mLockscreenUserManager, mSectionClassifier);
+        mAdjustmentProvider = new NotifUiAdjustmentProvider(
+                mHandler,
+                mSecureSettings,
+                mLockscreenUserManager,
+                mSectionStyleProvider);
         mEntry = getNotificationEntryBuilder().setParent(ROOT_ENTRY).build();
         mInflationError = new Exception(TEST_MESSAGE);
         mErrorManager = new NotifInflationErrorManager();
@@ -449,13 +456,15 @@
             mInflateCallbacks.put(entry, callback);
         }
 
+
         @Override
         public void rebindViews(@NonNull NotificationEntry entry, @NonNull Params params,
                 @NonNull InflationCallback callback) {
         }
 
         @Override
-        public void abortInflation(@NonNull NotificationEntry entry) {
+        public boolean abortInflation(@NonNull NotificationEntry entry) {
+            return false;
         }
 
         public InflationCallback getInflateCallback(NotificationEntry entry) {
@@ -465,6 +474,10 @@
         public void invokeInflateCallbackForEntry(NotificationEntry entry) {
             getInflateCallback(entry).onInflationFinished(entry, entry.getRowController());
         }
+
+        @Override
+        public void releaseViews(@NonNull NotificationEntry entry) {
+        }
     }
 
     private void fireAddEvents(List<? extends ListEntry> entries) {
@@ -490,7 +503,7 @@
     private static final int TEST_MAX_GROUP_DELAY = 100;
 
     private void setSectionIsLowPriority(boolean minimized) {
-        mSectionClassifier.setMinimizedSections(minimized
+        mSectionStyleProvider.setMinimizedSections(minimized
                 ? Collections.singleton(mNotifSection.getSectioner())
                 : Collections.emptyList());
     }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinatorTest.java
index 15c1cb7..50b3fc7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinatorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinatorTest.java
@@ -42,7 +42,6 @@
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.statusbar.RankingBuilder;
 import com.android.systemui.statusbar.SbnBuilder;
-import com.android.systemui.statusbar.notification.SectionClassifier;
 import com.android.systemui.statusbar.notification.collection.ListEntry;
 import com.android.systemui.statusbar.notification.collection.NotifPipeline;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
@@ -50,6 +49,7 @@
 import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter;
 import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner;
 import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
+import com.android.systemui.statusbar.notification.collection.provider.SectionStyleProvider;
 import com.android.systemui.statusbar.notification.collection.render.NodeController;
 import com.android.systemui.statusbar.notification.collection.render.SectionHeaderController;
 
@@ -70,7 +70,7 @@
 
     @Mock private StatusBarStateController mStatusBarStateController;
     @Mock private HighPriorityProvider mHighPriorityProvider;
-    @Mock private SectionClassifier mSectionClassifier;
+    @Mock private SectionStyleProvider mSectionStyleProvider;
     @Mock private NotifPipeline mNotifPipeline;
     @Mock private NodeController mAlertingHeaderController;
     @Mock private NodeController mSilentNodeController;
@@ -94,7 +94,7 @@
         mRankingCoordinator = new RankingCoordinator(
                 mStatusBarStateController,
                 mHighPriorityProvider,
-                mSectionClassifier,
+                mSectionStyleProvider,
                 mAlertingHeaderController,
                 mSilentHeaderController,
                 mSilentNodeController);
@@ -102,7 +102,7 @@
         mEntry.setRanking(getRankingForUnfilteredNotif().build());
 
         mRankingCoordinator.attach(mNotifPipeline);
-        verify(mSectionClassifier).setMinimizedSections(any());
+        verify(mSectionStyleProvider).setMinimizedSections(any());
         verify(mNotifPipeline, times(2)).addPreGroupFilter(mNotifFilterCaptor.capture());
         mCapturedSuspendedFilter = mNotifFilterCaptor.getAllValues().get(0);
         mCapturedDozingFilter = mNotifFilterCaptor.getAllValues().get(1);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/RowAppearanceCoordinatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/RowAppearanceCoordinatorTest.kt
index 447ba15..3f3de00 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/RowAppearanceCoordinatorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/RowAppearanceCoordinatorTest.kt
@@ -21,13 +21,13 @@
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.statusbar.notification.AssistantFeedbackController
 import com.android.systemui.statusbar.notification.FeedbackIcon
-import com.android.systemui.statusbar.notification.SectionClassifier
 import com.android.systemui.statusbar.notification.collection.NotifPipeline
 import com.android.systemui.statusbar.notification.collection.NotificationEntry
 import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder
 import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection
 import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderEntryListener
 import com.android.systemui.statusbar.notification.collection.listbuilder.OnBeforeRenderListListener
+import com.android.systemui.statusbar.notification.collection.provider.SectionStyleProvider
 import com.android.systemui.statusbar.notification.collection.render.NotifRowController
 import com.android.systemui.util.mockito.any
 import com.android.systemui.util.mockito.eq
@@ -37,8 +37,8 @@
 import org.junit.runner.RunWith
 import org.mockito.Mock
 import org.mockito.Mockito.verify
-import org.mockito.MockitoAnnotations.initMocks
 import org.mockito.Mockito.`when` as whenever
+import org.mockito.MockitoAnnotations.initMocks
 
 @SmallTest
 @RunWith(AndroidTestingRunner::class)
@@ -53,7 +53,7 @@
 
     @Mock private lateinit var pipeline: NotifPipeline
     @Mock private lateinit var assistantFeedbackController: AssistantFeedbackController
-    @Mock private lateinit var sectionClassifier: SectionClassifier
+    @Mock private lateinit var sectionStyleProvider: SectionStyleProvider
 
     @Mock private lateinit var section1: NotifSection
     @Mock private lateinit var section2: NotifSection
@@ -66,7 +66,7 @@
         coordinator = RowAppearanceCoordinator(
             mContext,
             assistantFeedbackController,
-            sectionClassifier
+            sectionStyleProvider
         )
         coordinator.attach(pipeline)
         beforeRenderListListener = withArgCaptor {
@@ -82,8 +82,8 @@
 
     @Test
     fun testSetSystemExpandedOnlyOnFirst() {
-        whenever(sectionClassifier.isMinimizedSection(eq(section1))).thenReturn(false)
-        whenever(sectionClassifier.isMinimizedSection(eq(section1))).thenReturn(false)
+        whenever(sectionStyleProvider.isMinimizedSection(eq(section1))).thenReturn(false)
+        whenever(sectionStyleProvider.isMinimizedSection(eq(section1))).thenReturn(false)
         beforeRenderListListener.onBeforeRenderList(listOf(entry1, entry2))
         afterRenderEntryListener.onAfterRenderEntry(entry1, controller1)
         verify(controller1).setSystemExpanded(eq(true))
@@ -93,8 +93,8 @@
 
     @Test
     fun testSetSystemExpandedNeverIfMinimized() {
-        whenever(sectionClassifier.isMinimizedSection(eq(section1))).thenReturn(true)
-        whenever(sectionClassifier.isMinimizedSection(eq(section1))).thenReturn(true)
+        whenever(sectionStyleProvider.isMinimizedSection(eq(section1))).thenReturn(true)
+        whenever(sectionStyleProvider.isMinimizedSection(eq(section1))).thenReturn(true)
         beforeRenderListListener.onBeforeRenderList(listOf(entry1, entry2))
         afterRenderEntryListener.onAfterRenderEntry(entry1, controller1)
         verify(controller1).setSystemExpanded(eq(false))
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/SensitiveContentCoordinatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/SensitiveContentCoordinatorTest.kt
index a2d8e3d..27be4c8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/SensitiveContentCoordinatorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/SensitiveContentCoordinatorTest.kt
@@ -34,6 +34,7 @@
 import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Pluggable
 import com.android.systemui.statusbar.policy.KeyguardStateController
 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.mockito.withArgCaptor
 import dagger.BindsInstance
@@ -79,7 +80,7 @@
 
         dynamicPrivacyListener.onDynamicPrivacyChanged()
 
-        verify(invalidationListener).onPluggableInvalidated(invalidator)
+        verify(invalidationListener).onPluggableInvalidated(eq(invalidator), any())
     }
 
     @Test
@@ -265,4 +266,4 @@
             @BindsInstance keyguardStateController: KeyguardStateController
         ): TestSensitiveContentCoordinatorComponent
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/SmartspaceDedupingCoordinatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/SmartspaceDedupingCoordinatorTest.kt
index fdff6e9..d4f0505 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/SmartspaceDedupingCoordinatorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/SmartspaceDedupingCoordinatorTest.kt
@@ -35,21 +35,23 @@
 import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Pluggable
 import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener
 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.mockito.withArgCaptor
 import com.android.systemui.util.time.FakeSystemClock
+import java.util.concurrent.TimeUnit
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
 import org.junit.Assert.assertTrue
 import org.junit.Before
 import org.junit.Test
 import org.mockito.Mock
-import org.mockito.Mockito.`when`
 import org.mockito.Mockito.anyString
 import org.mockito.Mockito.clearInvocations
 import org.mockito.Mockito.never
 import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when`
 import org.mockito.MockitoAnnotations
-import java.util.concurrent.TimeUnit
 
 @SmallTest
 class SmartspaceDedupingCoordinatorTest : SysuiTestCase() {
@@ -349,7 +351,7 @@
 
         // THEN the new pipeline is invalidated (but the old one isn't because it's not
         // necessary) because the notif should no longer be filtered out
-        verify(pluggableListener).onPluggableInvalidated(filter)
+        verify(pluggableListener).onPluggableInvalidated(eq(filter), any())
         verify(notificationEntryManager, never()).updateNotifications(anyString())
         assertFalse(filter.shouldFilterOut(entry2HasNotRecentlyAlerted, now))
     }
@@ -387,7 +389,7 @@
     }
 
     private fun verifyPipelinesInvalidated() {
-        verify(pluggableListener).onPluggableInvalidated(filter)
+        verify(pluggableListener).onPluggableInvalidated(eq(filter), any())
         verify(notificationEntryManager).updateNotifications(anyString())
     }
 
@@ -396,7 +398,7 @@
     }
 
     private fun verifyPipelinesNotInvalidated() {
-        verify(pluggableListener, never()).onPluggableInvalidated(filter)
+        verify(pluggableListener, never()).onPluggableInvalidated(eq(filter), any())
         verify(notificationEntryManager, never()).updateNotifications(anyString())
     }
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/ViewConfigCoordinatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/ViewConfigCoordinatorTest.kt
new file mode 100644
index 0000000..0830191
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/ViewConfigCoordinatorTest.kt
@@ -0,0 +1,197 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 android.testing.AndroidTestingRunner
+import android.testing.TestableLooper.RunWithLooper
+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.NotificationLockscreenUserManager
+import com.android.systemui.statusbar.NotificationLockscreenUserManager.UserChangedListener
+import com.android.systemui.statusbar.notification.collection.NotifPipeline
+import com.android.systemui.statusbar.notification.collection.NotificationEntry
+import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
+import com.android.systemui.statusbar.notification.row.NotificationGutsManager
+import com.android.systemui.statusbar.policy.ConfigurationController
+import com.android.systemui.util.mockito.mock
+import com.android.systemui.util.mockito.withArgCaptor
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito.clearInvocations
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyNoMoreInteractions
+import org.mockito.Mockito.`when` as whenever
+
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+@RunWithLooper
+class ViewConfigCoordinatorTest : SysuiTestCase() {
+    private lateinit var coordinator: ViewConfigCoordinator
+
+    // Captured
+    private lateinit var userChangedListener: UserChangedListener
+    private lateinit var configurationListener: ConfigurationController.ConfigurationListener
+    private lateinit var keyguardUpdateMonitorCallback: KeyguardUpdateMonitorCallback
+
+    // Mocks
+    private val entry: NotificationEntry = mock()
+    private val row: ExpandableNotificationRow = mock()
+    private val pipeline: NotifPipeline = mock()
+    private val configurationController: ConfigurationController = mock()
+    private val lockscreenUserManager: NotificationLockscreenUserManager = mock()
+    private val gutsManager: NotificationGutsManager = mock()
+    private val keyguardUpdateMonitor: KeyguardUpdateMonitor = mock()
+
+    @Before
+    fun setUp() {
+        whenever(pipeline.allNotifs).thenReturn(listOf(entry))
+        whenever(entry.row).thenReturn(row)
+        coordinator = ViewConfigCoordinator(
+            configurationController,
+            lockscreenUserManager,
+            gutsManager,
+            keyguardUpdateMonitor)
+        coordinator.attach(pipeline)
+        userChangedListener = withArgCaptor {
+            verify(lockscreenUserManager).addUserChangedListener(capture())
+        }
+        configurationListener = withArgCaptor {
+            verify(configurationController).addCallback(capture())
+        }
+        keyguardUpdateMonitorCallback = withArgCaptor {
+            verify(keyguardUpdateMonitor).registerCallback(capture())
+        }
+    }
+
+    @Test
+    fun uiModeChangePropagatesToRow() {
+        configurationListener.onUiModeChanged()
+        verify(entry).row
+        verify(row).onUiModeChanged()
+        verifyNoMoreInteractions(entry, row)
+    }
+
+    @Test
+    fun themeChangePropagatesToEntry() {
+        configurationListener.onThemeChanged()
+        verify(entry).onDensityOrFontScaleChanged()
+        verify(entry).areGutsExposed()
+        verifyNoMoreInteractions(entry, row)
+    }
+
+    @Test
+    fun densityChangePropagatesToEntry() {
+        configurationListener.onDensityOrFontScaleChanged()
+        verify(entry).onDensityOrFontScaleChanged()
+        verify(entry).areGutsExposed()
+        verifyNoMoreInteractions(entry, row)
+    }
+
+    @Test
+    fun switchingUserDefersChangesWithUserChangedEventAfter() {
+        // GIVEN switching users
+        keyguardUpdateMonitorCallback.onUserSwitching(10)
+
+        // WHEN configuration changes happen
+        configurationListener.onUiModeChanged()
+        configurationListener.onDensityOrFontScaleChanged()
+        configurationListener.onThemeChanged()
+
+        // VERIFY no changes are propagated
+        verifyNoMoreInteractions(entry, row)
+
+        // WHEN user switch completes
+        keyguardUpdateMonitorCallback.onUserSwitchComplete(10)
+
+        // VERIFY the changes propagate
+        verify(entry).row
+        verify(row).onUiModeChanged()
+        verify(entry).onDensityOrFontScaleChanged()
+        verify(entry).areGutsExposed()
+        verifyNoMoreInteractions(entry, row)
+        clearInvocations(entry, row)
+
+        // WHEN user change happens after the switching window
+        userChangedListener.onUserChanged(10)
+
+        // VERIFY user change itself does not re-trigger updates
+        verifyNoMoreInteractions(entry, row)
+    }
+
+    @Test
+    fun switchingUserDefersChangesWithUserChangedEventDuring() {
+        // GIVEN switching users
+        keyguardUpdateMonitorCallback.onUserSwitching(10)
+
+        // WHEN configuration changes happen
+        configurationListener.onUiModeChanged()
+        configurationListener.onDensityOrFontScaleChanged()
+        configurationListener.onThemeChanged()
+
+        // VERIFY no changes are propagated
+        verifyNoMoreInteractions(entry, row)
+
+        // WHEN user change happens during the switching window
+        userChangedListener.onUserChanged(10)
+
+        // VERIFY the changes propagate
+        verify(entry).row
+        verify(row).onUiModeChanged()
+        verify(entry).onDensityOrFontScaleChanged()
+        verify(entry).areGutsExposed()
+        verifyNoMoreInteractions(entry, row)
+        clearInvocations(entry, row)
+
+        // WHEN user switch completes
+        keyguardUpdateMonitorCallback.onUserSwitchComplete(10)
+
+        // VERIFY the switching window closing does not re-propagate
+        verifyNoMoreInteractions(entry, row)
+    }
+
+    @Test
+    fun switchingUserDefersChangesWithUserChangedEventBefore() {
+        // WHEN user change happens before configuration changes or switching window
+        userChangedListener.onUserChanged(10)
+
+        // VERIFY no changes happen
+        verifyNoMoreInteractions(entry, row)
+
+        // WHEN switching users then configuration changes happen
+        keyguardUpdateMonitorCallback.onUserSwitching(10)
+
+        configurationListener.onUiModeChanged()
+        configurationListener.onDensityOrFontScaleChanged()
+        configurationListener.onThemeChanged()
+
+        // VERIFY no changes happen
+        verifyNoMoreInteractions(entry, row)
+
+        // WHEN user switch completes
+        keyguardUpdateMonitorCallback.onUserSwitchComplete(10)
+
+        // VERIFY the changes propagate
+        verify(entry).row
+        verify(row).onUiModeChanged()
+        verify(entry).onDensityOrFontScaleChanged()
+        verify(entry).areGutsExposed()
+        verifyNoMoreInteractions(entry, row)
+        clearInvocations(entry, row)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorTest.java
index f3aa20b..c961cec 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorTest.java
@@ -19,6 +19,7 @@
 import static junit.framework.Assert.assertFalse;
 
 import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.never;
@@ -35,6 +36,7 @@
 import com.android.systemui.dump.DumpManager;
 import com.android.systemui.keyguard.WakefulnessLifecycle;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.shade.NotifPanelEvents;
 import com.android.systemui.statusbar.notification.collection.GroupEntry;
 import com.android.systemui.statusbar.notification.collection.GroupEntryBuilder;
 import com.android.systemui.statusbar.notification.collection.NotifPipeline;
@@ -43,7 +45,6 @@
 import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifStabilityManager;
 import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Pluggable;
 import com.android.systemui.statusbar.notification.collection.provider.VisualStabilityProvider;
-import com.android.systemui.statusbar.phone.NotifPanelEvents;
 import com.android.systemui.statusbar.policy.HeadsUpManager;
 import com.android.systemui.util.concurrency.FakeExecutor;
 import com.android.systemui.util.time.FakeSystemClock;
@@ -55,6 +56,7 @@
 import org.mockito.Captor;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.mockito.verification.VerificationMode;
 
 @SmallTest
 @RunWith(AndroidTestingRunner.class)
@@ -130,13 +132,14 @@
         doAnswer(i -> {
             mNotifStabilityManager.onBeginRun();
             return null;
-        }).when(mInvalidateListener).onPluggableInvalidated(eq(mNotifStabilityManager));
+        }).when(mInvalidateListener).onPluggableInvalidated(eq(mNotifStabilityManager), any());
     }
 
     @Test
     public void testScreenOff_groupAndSectionChangesAllowed() {
         // GIVEN screen is off, panel isn't expanded and device isn't pulsing
-        setScreenOn(false);
+        setFullyDozed(true);
+        setSleepy(true);
         setPanelExpanded(false);
         setPulsing(false);
 
@@ -149,9 +152,42 @@
     }
 
     @Test
+    public void testScreenTurningOff_groupAndSectionChangesNotAllowed() {
+        // GIVEN the screen is turning off (sleepy but partially dozed)
+        setFullyDozed(false);
+        setSleepy(true);
+        setPanelExpanded(true);
+        setPulsing(false);
+
+        // THEN group changes are NOT allowed
+        assertFalse(mNotifStabilityManager.isGroupChangeAllowed(mEntry));
+        assertFalse(mNotifStabilityManager.isGroupPruneAllowed(mGroupEntry));
+
+        // THEN section changes are NOT allowed
+        assertFalse(mNotifStabilityManager.isSectionChangeAllowed(mEntry));
+    }
+
+    @Test
+    public void testScreenTurningOn_groupAndSectionChangesNotAllowed() {
+        // GIVEN the screen is turning on (still fully dozed, not sleepy)
+        setFullyDozed(true);
+        setSleepy(false);
+        setPanelExpanded(true);
+        setPulsing(false);
+
+        // THEN group changes are NOT allowed
+        assertFalse(mNotifStabilityManager.isGroupChangeAllowed(mEntry));
+        assertFalse(mNotifStabilityManager.isGroupPruneAllowed(mGroupEntry));
+
+        // THEN section changes are NOT allowed
+        assertFalse(mNotifStabilityManager.isSectionChangeAllowed(mEntry));
+    }
+
+    @Test
     public void testPanelNotExpanded_groupAndSectionChangesAllowed() {
         // GIVEN screen is on but the panel isn't expanded and device isn't pulsing
-        setScreenOn(true);
+        setFullyDozed(false);
+        setSleepy(false);
         setPanelExpanded(false);
         setPulsing(false);
 
@@ -166,7 +202,8 @@
     @Test
     public void testPanelExpanded_groupAndSectionChangesNotAllowed() {
         // GIVEN the panel true expanded and device isn't pulsing
-        setScreenOn(true);
+        setFullyDozed(false);
+        setSleepy(false);
         setPanelExpanded(true);
         setPulsing(false);
 
@@ -181,7 +218,8 @@
     @Test
     public void testPulsing_screenOff_groupAndSectionChangesNotAllowed() {
         // GIVEN the device is pulsing and screen is off
-        setScreenOn(false);
+        setFullyDozed(true);
+        setSleepy(true);
         setPulsing(true);
 
         // THEN group changes are NOT allowed
@@ -195,7 +233,8 @@
     @Test
     public void testPulsing_panelNotExpanded_groupAndSectionChangesNotAllowed() {
         // GIVEN the device is pulsing and screen is off with the panel not expanded
-        setScreenOn(false);
+        setFullyDozed(true);
+        setSleepy(true);
         setPanelExpanded(false);
         setPulsing(true);
 
@@ -211,7 +250,8 @@
     public void testOverrideReorderingSuppression_onlySectionChangesAllowed() {
         // GIVEN section changes typically wouldn't be allowed because the panel is expanded and
         // we're not pulsing
-        setScreenOn(true);
+        setFullyDozed(false);
+        setSleepy(false);
         setPanelExpanded(true);
         setPulsing(true);
 
@@ -233,7 +273,8 @@
     @Test
     public void testTemporarilyAllowSectionChanges_callsInvalidate() {
         // GIVEN section changes typically wouldn't be allowed because the panel is expanded
-        setScreenOn(true);
+        setFullyDozed(false);
+        setSleepy(false);
         setPanelExpanded(true);
         setPulsing(false);
 
@@ -241,13 +282,14 @@
         mCoordinator.temporarilyAllowSectionChanges(mEntry, mFakeSystemClock.uptimeMillis());
 
         // THEN the notification list is invalidated
-        verify(mInvalidateListener, times(1)).onPluggableInvalidated(mNotifStabilityManager);
+        verifyStabilityManagerWasInvalidated(times(1));
     }
 
     @Test
     public void testTemporarilyAllowSectionChanges_noInvalidationCalled() {
         // GIVEN section changes typically WOULD be allowed
-        setScreenOn(false);
+        setFullyDozed(true);
+        setSleepy(true);
         setPanelExpanded(false);
         setPulsing(false);
 
@@ -255,13 +297,14 @@
         mCoordinator.temporarilyAllowSectionChanges(mEntry, mFakeSystemClock.currentTimeMillis());
 
         // THEN invalidate is not called because this entry was never suppressed from reordering
-        verify(mInvalidateListener, never()).onPluggableInvalidated(mNotifStabilityManager);
+        verifyStabilityManagerWasInvalidated(never());
     }
 
     @Test
     public void testTemporarilyAllowSectionChangesTimeout() {
         // GIVEN section changes typically WOULD be allowed
-        setScreenOn(false);
+        setFullyDozed(true);
+        setSleepy(true);
         setPanelExpanded(false);
         setPulsing(false);
         assertTrue(mNotifStabilityManager.isSectionChangeAllowed(mEntry));
@@ -271,7 +314,7 @@
 
         // THEN invalidate is not called because this entry was never suppressed from reordering;
         // THEN section changes are allowed for this notification
-        verify(mInvalidateListener, never()).onPluggableInvalidated(mNotifStabilityManager);
+        verifyStabilityManagerWasInvalidated(never());
         assertTrue(mNotifStabilityManager.isSectionChangeAllowed(mEntry));
 
         // WHEN we're pulsing (now disallowing reordering)
@@ -292,20 +335,21 @@
     @Test
     public void testTemporarilyAllowSectionChanges_isPulsingChangeBeforeTimeout() {
         // GIVEN section changes typically wouldn't be allowed because the device is pulsing
-        setScreenOn(false);
+        setFullyDozed(true);
+        setSleepy(true);
         setPanelExpanded(false);
         setPulsing(true);
 
         // WHEN we temporarily allow section changes for this notification entry
         mCoordinator.temporarilyAllowSectionChanges(mEntry, mFakeSystemClock.currentTimeMillis());
         // can now reorder, so invalidates
-        verify(mInvalidateListener, times(1)).onPluggableInvalidated(mNotifStabilityManager);
+        verifyStabilityManagerWasInvalidated(times(1));
 
         // WHEN reordering is now allowed because device isn't pulsing anymore
         setPulsing(false);
 
         // THEN invalidate isn't called a second time since reordering was already allowed
-        verify(mInvalidateListener, times(1)).onPluggableInvalidated(mNotifStabilityManager);
+        verifyStabilityManagerWasInvalidated(times(1));
     }
 
     @Test
@@ -315,22 +359,26 @@
         // WHEN device isn't pulsing anymore
         setPulsing(false);
 
-        // WHEN screen isn't on
-        setScreenOn(false);
+        // WHEN fully dozed
+        setFullyDozed(true);
+
+        // WHEN sleepy
+        setSleepy(true);
 
         // WHEN panel isn't expanded
         setPanelExpanded(false);
 
         // THEN we never see any calls to invalidate since there weren't any notifications that
         // were being suppressed from grouping or section changes
-        verify(mInvalidateListener, never()).onPluggableInvalidated(mNotifStabilityManager);
+        verifyStabilityManagerWasInvalidated(never());
     }
 
     @Test
     public void testNotSuppressingGroupChangesAnymore_invalidationCalled() {
         // GIVEN visual stability is being maintained b/c panel is expanded
         setPulsing(false);
-        setScreenOn(true);
+        setFullyDozed(false);
+        setSleepy(false);
         setPanelExpanded(true);
 
         assertFalse(mNotifStabilityManager.isGroupChangeAllowed(mEntry));
@@ -340,7 +388,7 @@
         setPanelExpanded(false);
 
         //  invalidate is called because we were previously suppressing a group change
-        verify(mInvalidateListener, times(1)).onPluggableInvalidated(mNotifStabilityManager);
+        verifyStabilityManagerWasInvalidated(times(1));
     }
 
     @Test
@@ -354,7 +402,7 @@
         setActivityLaunching(false);
 
         // invalidate is called, b/c we were previously suppressing the pipeline from running
-        verify(mInvalidateListener, times(1)).onPluggableInvalidated(mNotifStabilityManager);
+        verifyStabilityManagerWasInvalidated(times(1));
     }
 
     @Test
@@ -368,7 +416,7 @@
         setPanelCollapsing(false);
 
         // invalidate is called, b/c we were previously suppressing the pipeline from running
-        verify(mInvalidateListener, times(1)).onPluggableInvalidated(mNotifStabilityManager);
+        verifyStabilityManagerWasInvalidated(times(1));
     }
 
     @Test
@@ -380,7 +428,7 @@
         setPanelCollapsing(false);
 
         // THEN invalidate is not called, b/c nothing has been suppressed
-        verify(mInvalidateListener, never()).onPluggableInvalidated(mNotifStabilityManager);
+        verifyStabilityManagerWasInvalidated(never());
     }
 
     @Test
@@ -392,14 +440,15 @@
         setActivityLaunching(false);
 
         // THEN invalidate is not called, b/c nothing has been suppressed
-        verify(mInvalidateListener, never()).onPluggableInvalidated(mNotifStabilityManager);
+        verifyStabilityManagerWasInvalidated(never());
     }
 
     @Test
     public void testNotSuppressingEntryReorderingAnymoreWillInvalidate() {
         // GIVEN visual stability is being maintained b/c panel is expanded
         setPulsing(false);
-        setScreenOn(true);
+        setFullyDozed(false);
+        setSleepy(false);
         setPanelExpanded(true);
 
         assertFalse(mNotifStabilityManager.isEntryReorderingAllowed(mEntry));
@@ -410,14 +459,15 @@
         setPanelExpanded(false);
 
         //  invalidate is called because we were previously suppressing an entry reorder
-        verify(mInvalidateListener, times(1)).onPluggableInvalidated(mNotifStabilityManager);
+        verifyStabilityManagerWasInvalidated(times(1));
     }
 
     @Test
     public void testQueryingEntryReorderingButNotReportingReorderSuppressedDoesNotInvalidate() {
         // GIVEN visual stability is being maintained b/c panel is expanded
         setPulsing(false);
-        setScreenOn(true);
+        setFullyDozed(false);
+        setSleepy(false);
         setPanelExpanded(true);
 
         assertFalse(mNotifStabilityManager.isEntryReorderingAllowed(mEntry));
@@ -426,13 +476,14 @@
         setPanelExpanded(false);
 
         // invalidate is not called because we were not told that an entry reorder was suppressed
-        verify(mInvalidateListener, never()).onPluggableInvalidated(mNotifStabilityManager);
+        verifyStabilityManagerWasInvalidated(never());
     }
 
     @Test
     public void testHeadsUp_allowedToChangeGroupAndSection() {
         // GIVEN group + section changes disallowed
-        setScreenOn(true);
+        setFullyDozed(false);
+        setSleepy(false);
         setPanelExpanded(true);
         setPulsing(true);
         assertFalse(mNotifStabilityManager.isGroupChangeAllowed(mEntry));
@@ -450,6 +501,10 @@
         assertFalse(mNotifStabilityManager.isGroupPruneAllowed(mGroupEntry));
     }
 
+    private void verifyStabilityManagerWasInvalidated(VerificationMode mode) {
+        verify(mInvalidateListener, mode).onPluggableInvalidated(eq(mNotifStabilityManager), any());
+    }
+
     private void setActivityLaunching(boolean activityLaunching) {
         mNotifPanelEventsCallback.onLaunchingActivityChanged(activityLaunching);
     }
@@ -462,11 +517,16 @@
         mStatusBarStateListener.onPulsingChanged(pulsing);
     }
 
-    private void setScreenOn(boolean screenOn) {
-        if (screenOn) {
-            mWakefulnessObserver.onStartedWakingUp();
-        } else {
+    private void setFullyDozed(boolean fullyDozed) {
+        float dozeAmount = fullyDozed ? 1 : 0;
+        mStatusBarStateListener.onDozeAmountChanged(dozeAmount, dozeAmount);
+    }
+
+    private void setSleepy(boolean sleepy) {
+        if (sleepy) {
             mWakefulnessObserver.onFinishedGoingToSleep();
+        } else {
+            mWakefulnessObserver.onStartedWakingUp();
         }
     }
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/inflation/NotifUiAdjustmentProviderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/inflation/NotifUiAdjustmentProviderTest.kt
index dd15cae..246943e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/inflation/NotifUiAdjustmentProviderTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/inflation/NotifUiAdjustmentProviderTest.kt
@@ -1,29 +1,87 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.inflation
 
+import android.database.ContentObserver
+import android.os.Handler
+import android.provider.Settings.Secure.SHOW_NOTIFICATION_SNOOZE
 import android.testing.AndroidTestingRunner
 import android.testing.TestableLooper.RunWithLooper
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.statusbar.NotificationLockscreenUserManager
-import com.android.systemui.statusbar.notification.SectionClassifier
+import com.android.systemui.statusbar.notification.collection.GroupEntry
+import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder
+import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection
+import com.android.systemui.statusbar.notification.collection.provider.SectionStyleProvider
+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.mockito.withArgCaptor
+import com.android.systemui.util.settings.FakeSettings
+import com.android.systemui.util.settings.SecureSettings
+import com.google.common.truth.Truth.assertThat
+import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
+import org.mockito.Mockito.clearInvocations
+import org.mockito.Mockito.inOrder
 import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyNoMoreInteractions
+import org.mockito.Mockito.`when` as whenever
 
 @SmallTest
 @RunWith(AndroidTestingRunner::class)
 @RunWithLooper
 class NotifUiAdjustmentProviderTest : SysuiTestCase() {
     private val lockscreenUserManager: NotificationLockscreenUserManager = mock()
-    private val sectionClassifier: SectionClassifier = mock()
+    private val sectionStyleProvider: SectionStyleProvider = mock()
+    private val handler: Handler = mock()
+    private val secureSettings: SecureSettings = mock()
+    private val uri = FakeSettings().getUriFor(SHOW_NOTIFICATION_SNOOZE)
+    private val dirtyListener: Runnable = mock()
+
+    private val section = NotifSection(mock(), 0)
+    private val entry = NotificationEntryBuilder()
+        .setSection(section)
+        .setParent(GroupEntry.ROOT_ENTRY)
+        .build()
+
+    private lateinit var contentObserver: ContentObserver
 
     private val adjustmentProvider = NotifUiAdjustmentProvider(
+        handler,
+        secureSettings,
         lockscreenUserManager,
-        sectionClassifier,
+        sectionStyleProvider,
     )
 
+    @Before
+    fun setup() {
+        verifyNoMoreInteractions(secureSettings)
+        adjustmentProvider.addDirtyListener(dirtyListener)
+        verify(secureSettings).getInt(eq(SHOW_NOTIFICATION_SNOOZE), any())
+        contentObserver = withArgCaptor {
+            verify(secureSettings).registerContentObserverForUser(
+                eq(SHOW_NOTIFICATION_SNOOZE), capture(), any()
+            )
+        }
+        verifyNoMoreInteractions(secureSettings, dirtyListener)
+    }
+
     @Test
     fun notifLockscreenStateChangeWillNotifDirty() {
         val dirtyListener = mock<Runnable>()
@@ -33,6 +91,35 @@
                 verify(lockscreenUserManager).addNotificationStateChangedListener(capture())
             }
         notifLocksreenStateChangeListener.onNotificationStateChanged()
-        verify(dirtyListener).run();
+        verify(dirtyListener).run()
+    }
+
+    @Test
+    fun additionalAddDoesNotRegisterAgain() {
+        clearInvocations(secureSettings)
+        adjustmentProvider.addDirtyListener(mock())
+        verifyNoMoreInteractions(secureSettings)
+    }
+
+    @Test
+    fun onChangeWillQueryThenNotifyDirty() {
+        contentObserver.onChange(false, listOf(uri), 0, 0)
+        with(inOrder(secureSettings, dirtyListener)) {
+            verify(secureSettings).getInt(eq(SHOW_NOTIFICATION_SNOOZE), any())
+            verify(dirtyListener).run()
+        }
+    }
+
+    @Test
+    fun changingSnoozeChangesProvidedAdjustment() {
+        whenever(secureSettings.getInt(eq(SHOW_NOTIFICATION_SNOOZE), any())).thenReturn(0)
+        val original = adjustmentProvider.calculateAdjustment(entry)
+        assertThat(original.isSnoozeEnabled).isFalse()
+
+        whenever(secureSettings.getInt(eq(SHOW_NOTIFICATION_SNOOZE), any())).thenReturn(1)
+        contentObserver.onChange(false, listOf(uri), 0, 0)
+        val withSnoozing = adjustmentProvider.calculateAdjustment(entry)
+        assertThat(withSnoozing.isSnoozeEnabled).isTrue()
+        assertThat(withSnoozing).isNotEqualTo(original)
     }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionLoggerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionLoggerTest.kt
new file mode 100644
index 0000000..6c07174
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionLoggerTest.kt
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.notifcollection
+
+import android.service.notification.NotificationListenerService.RankingMap
+import android.testing.AndroidTestingRunner
+import android.testing.TestableLooper.RunWithLooper
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.statusbar.notification.collection.NotificationEntry
+import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder
+import com.android.systemui.util.mockito.eq
+import com.android.systemui.util.mockito.mock
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyNoMoreInteractions
+
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+@RunWithLooper
+class NotifCollectionLoggerTest : SysuiTestCase() {
+    private val logger: NotifCollectionLogger = mock()
+    private val entry1: NotificationEntry = NotificationEntryBuilder().setId(1).build()
+    private val entry2: NotificationEntry = NotificationEntryBuilder().setId(2).build()
+
+    private fun mapOfEntries(vararg entries: NotificationEntry): Map<String, NotificationEntry> =
+        entries.associateBy { it.key }
+
+    private fun rankingMapOf(vararg entries: NotificationEntry): RankingMap =
+        RankingMap(entries.map { it.ranking }.toTypedArray())
+
+    @Test
+    fun testMaybeLogInconsistentRankings_logsNewlyInconsistentRanking() {
+        val rankingMap = rankingMapOf(entry1)
+        maybeLogInconsistentRankings(
+            logger = logger,
+            oldKeysWithoutRankings = emptySet(),
+            newEntriesWithoutRankings = mapOfEntries(entry2),
+            rankingMap = rankingMap
+        )
+        verify(logger).logMissingRankings(
+            newlyInconsistentEntries = eq(listOf(entry2)),
+            totalInconsistent = eq(1),
+            rankingMap = eq(rankingMap),
+        )
+        verifyNoMoreInteractions(logger)
+    }
+
+    @Test
+    fun testMaybeLogInconsistentRankings_doesNotLogAlreadyInconsistentRanking() {
+        maybeLogInconsistentRankings(
+            logger = logger,
+            oldKeysWithoutRankings = setOf(entry2.key),
+            newEntriesWithoutRankings = mapOfEntries(entry2),
+            rankingMap = rankingMapOf(entry1)
+        )
+        verifyNoMoreInteractions(logger)
+    }
+
+    @Test
+    fun testMaybeLogInconsistentRankings_logsWhenRankingIsAdded() {
+        maybeLogInconsistentRankings(
+            logger = logger,
+            oldKeysWithoutRankings = setOf(entry2.key),
+            newEntriesWithoutRankings = mapOfEntries(),
+            rankingMap = rankingMapOf(entry1, entry2)
+        )
+        verify(logger).logRecoveredRankings(
+            newlyConsistentKeys = eq(listOf(entry2.key)),
+        )
+        verifyNoMoreInteractions(logger)
+    }
+
+    @Test
+    fun testMaybeLogInconsistentRankings_doesNotLogsWhenEntryIsRemoved() {
+        maybeLogInconsistentRankings(
+            logger = logger,
+            oldKeysWithoutRankings = setOf(entry2.key),
+            newEntriesWithoutRankings = mapOfEntries(),
+            rankingMap = rankingMapOf(entry1)
+        )
+        verifyNoMoreInteractions(logger)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilderTest.kt
index 0e18658..ac254ab 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilderTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilderTest.kt
@@ -19,7 +19,6 @@
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.statusbar.notification.NotificationSectionsFeatureManager
-import com.android.systemui.statusbar.notification.SectionHeaderVisibilityProvider
 import com.android.systemui.statusbar.notification.collection.GroupEntry
 import com.android.systemui.statusbar.notification.collection.GroupEntryBuilder
 import com.android.systemui.statusbar.notification.collection.ListEntry
@@ -28,6 +27,7 @@
 import com.android.systemui.statusbar.notification.collection.getAttachState
 import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection
 import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner
+import com.android.systemui.statusbar.notification.collection.provider.SectionHeaderVisibilityProvider
 import com.android.systemui.statusbar.notification.stack.BUCKET_ALERTING
 import com.android.systemui.statusbar.notification.stack.BUCKET_PEOPLE
 import com.android.systemui.statusbar.notification.stack.BUCKET_SILENT
@@ -413,4 +413,4 @@
             return nodeController
         }
     }, index)
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/interruption/HeadsUpViewBinderTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/interruption/HeadsUpViewBinderTest.java
index 0d5a5fe..3f641df 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/interruption/HeadsUpViewBinderTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/interruption/HeadsUpViewBinderTest.java
@@ -72,32 +72,32 @@
         });
 
         mViewBinder.bindHeadsUpView(mEntry, null);
-        verify(mLogger).startBindingHun(eq("key"));
+        verify(mLogger).startBindingHun(eq(mEntry));
         verifyNoMoreInteractions(mLogger);
         clearInvocations(mLogger);
 
         callback.get().onBindFinished(mEntry);
-        verify(mLogger).entryBoundSuccessfully(eq("key"));
+        verify(mLogger).entryBoundSuccessfully(eq(mEntry));
         verifyNoMoreInteractions(mLogger);
         clearInvocations(mLogger);
 
         mViewBinder.bindHeadsUpView(mEntry, null);
-        verify(mLogger).startBindingHun(eq("key"));
+        verify(mLogger).startBindingHun(eq(mEntry));
         verifyNoMoreInteractions(mLogger);
         clearInvocations(mLogger);
 
         callback.get().onBindFinished(mEntry);
-        verify(mLogger).entryBoundSuccessfully(eq("key"));
+        verify(mLogger).entryBoundSuccessfully(eq(mEntry));
         verifyNoMoreInteractions(mLogger);
         clearInvocations(mLogger);
 
         mViewBinder.unbindHeadsUpView(mEntry);
-        verify(mLogger).entryContentViewMarkedFreeable(eq("key"));
+        verify(mLogger).entryContentViewMarkedFreeable(eq(mEntry));
         verifyNoMoreInteractions(mLogger);
         clearInvocations(mLogger);
 
         callback.get().onBindFinished(mEntry);
-        verify(mLogger).entryUnbound(eq("key"));
+        verify(mLogger).entryUnbound(eq(mEntry));
         verifyNoMoreInteractions(mLogger);
         clearInvocations(mLogger);
     }
@@ -111,12 +111,12 @@
         });
 
         mViewBinder.bindHeadsUpView(mEntry, null);
-        verify(mLogger).startBindingHun(eq("key"));
+        verify(mLogger).startBindingHun(eq(mEntry));
         verifyNoMoreInteractions(mLogger);
         clearInvocations(mLogger);
 
         mViewBinder.abortBindCallback(mEntry);
-        verify(mLogger).currentOngoingBindingAborted(eq("key"));
+        verify(mLogger).currentOngoingBindingAborted(eq(mEntry));
         verifyNoMoreInteractions(mLogger);
         clearInvocations(mLogger);
 
@@ -135,18 +135,18 @@
         });
 
         mViewBinder.bindHeadsUpView(mEntry, null);
-        verify(mLogger).startBindingHun(eq("key"));
+        verify(mLogger).startBindingHun(eq(mEntry));
         verifyNoMoreInteractions(mLogger);
         clearInvocations(mLogger);
 
         mViewBinder.unbindHeadsUpView(mEntry);
-        verify(mLogger).currentOngoingBindingAborted(eq("key"));
-        verify(mLogger).entryContentViewMarkedFreeable(eq("key"));
+        verify(mLogger).currentOngoingBindingAborted(eq(mEntry));
+        verify(mLogger).entryContentViewMarkedFreeable(eq(mEntry));
         verifyNoMoreInteractions(mLogger);
         clearInvocations(mLogger);
 
         callback.get().onBindFinished(mEntry);
-        verify(mLogger).entryUnbound(eq("key"));
+        verify(mLogger).entryUnbound(eq(mEntry));
         verifyNoMoreInteractions(mLogger);
         clearInvocations(mLogger);
     }
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 25add0d..e00e20f 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
@@ -17,6 +17,7 @@
 
 
 import static android.app.Notification.FLAG_BUBBLE;
+import static android.app.Notification.GROUP_ALERT_SUMMARY;
 import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
 import static android.app.NotificationManager.IMPORTANCE_HIGH;
 import static android.app.NotificationManager.IMPORTANCE_LOW;
@@ -26,6 +27,7 @@
 import static com.android.systemui.statusbar.NotificationEntryHelper.modifyRanking;
 import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
 import static com.android.systemui.statusbar.StatusBarState.SHADE;
+import static com.android.systemui.statusbar.StatusBarState.SHADE_LOCKED;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -60,6 +62,7 @@
 import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
 import com.android.systemui.statusbar.policy.BatteryController;
 import com.android.systemui.statusbar.policy.HeadsUpManager;
+import com.android.systemui.statusbar.policy.KeyguardStateController;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -86,6 +89,8 @@
     @Mock
     StatusBarStateController mStatusBarStateController;
     @Mock
+    KeyguardStateController mKeyguardStateController;
+    @Mock
     HeadsUpManager mHeadsUpManager;
     @Mock
     NotificationInterruptLogger mLogger;
@@ -105,6 +110,7 @@
     @Before
     public void setup() {
         MockitoAnnotations.initMocks(this);
+        when(mFlags.fullScreenIntentRequiresKeyguard()).thenReturn(false);
 
         mNotifInterruptionStateProvider =
                 new NotificationInterruptStateProviderImpl(
@@ -112,9 +118,9 @@
                         mPowerManager,
                         mDreamManager,
                         mAmbientDisplayConfiguration,
-                        mNotificationFilter,
                         mBatteryController,
                         mStatusBarStateController,
+                        mKeyguardStateController,
                         mHeadsUpManager,
                         mLogger,
                         mMockHandler,
@@ -200,7 +206,7 @@
         ensureStateForHeadsUpWhenAwake();
 
         // WHEN this entry should be filtered out
-        NotificationEntry entry  = createNotification(IMPORTANCE_DEFAULT);
+        NotificationEntry entry = createNotification(IMPORTANCE_DEFAULT);
         when(mNotificationFilter.shouldFilterOut(entry)).thenReturn(true);
 
         // THEN we shouldn't heads up this entry
@@ -209,11 +215,9 @@
 
     @Test
     public void testDoNotRunFilterOnNewPipeline() {
-        when(mFlags.isNewPipelineEnabled()).thenReturn(true);
         // WHEN this entry should be filtered out
-        NotificationEntry entry  = createNotification(IMPORTANCE_DEFAULT);
+        NotificationEntry entry = createNotification(IMPORTANCE_DEFAULT);
         mNotifInterruptionStateProvider.shouldHeadsUp(entry);
-        verify(mFlags, times(1)).isNewPipelineEnabled();
         verify(mNotificationFilter, times(0)).shouldFilterOut(eq(entry));
     }
 
@@ -329,7 +333,8 @@
     public void testShouldNotHeadsUp_filtered() throws RemoteException {
         ensureStateForHeadsUpWhenAwake();
         // Make canAlertCommon false by saying it's filtered out
-        when(mNotificationFilter.shouldFilterOut(any())).thenReturn(true);
+        when(mKeyguardNotificationVisibilityProvider.shouldHideNotification(any()))
+                .thenReturn(true);
 
         NotificationEntry entry = createNotification(IMPORTANCE_HIGH);
         assertThat(mNotifInterruptionStateProvider.shouldHeadsUp(entry)).isFalse();
@@ -427,6 +432,12 @@
     }
 
     @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);
@@ -441,6 +452,12 @@
     }
 
     @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);
@@ -455,6 +472,12 @@
     }
 
     @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);
@@ -469,6 +492,12 @@
     }
 
     @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);
         when(mPowerManager.isInteractive()).thenReturn(false);
@@ -483,6 +512,12 @@
     }
 
     @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);
@@ -497,6 +532,12 @@
     }
 
     @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);
@@ -511,6 +552,12 @@
     }
 
     @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);
@@ -536,12 +583,72 @@
 
         assertThat(mNotifInterruptionStateProvider.shouldLaunchFullScreenIntentWhenAdded(entry))
                 .isTrue();
-        verify(mLogger).logNoHeadsUpPackageSnoozed(entry.getSbn());
+        verify(mLogger).logNoHeadsUpPackageSnoozed(entry);
         verify(mLogger, never()).logNoFullscreen(any(), any());
         verify(mLogger, never()).logNoFullscreenWarning(any(), any());
         verify(mLogger).logFullscreen(entry, "Expected not to HUN");
     }
 
+    @Test
+    public void testShouldFullScreen_snoozed_occluding_withStrictRules() throws Exception {
+        when(mFlags.fullScreenIntentRequiresKeyguard()).thenReturn(true);
+        NotificationEntry entry = createFsiNotification(IMPORTANCE_HIGH, /* silenced */ false);
+        when(mPowerManager.isInteractive()).thenReturn(true);
+        when(mPowerManager.isScreenOn()).thenReturn(true);
+        when(mDreamManager.isDreaming()).thenReturn(false);
+        when(mStatusBarStateController.getState()).thenReturn(SHADE);
+        when(mHeadsUpManager.isSnoozed("a")).thenReturn(true);
+        when(mKeyguardStateController.isShowing()).thenReturn(true);
+        when(mKeyguardStateController.isOccluded()).thenReturn(true);
+
+        assertThat(mNotifInterruptionStateProvider.shouldLaunchFullScreenIntentWhenAdded(entry))
+                .isTrue();
+        verify(mLogger).logNoHeadsUpPackageSnoozed(entry);
+        verify(mLogger, never()).logNoFullscreen(any(), any());
+        verify(mLogger, never()).logNoFullscreenWarning(any(), any());
+        verify(mLogger).logFullscreen(entry, "Expected not to HUN while keyguard occluded");
+    }
+
+    @Test
+    public void testShouldFullScreen_snoozed_lockedShade_withStrictRules() throws Exception {
+        when(mFlags.fullScreenIntentRequiresKeyguard()).thenReturn(true);
+        NotificationEntry entry = createFsiNotification(IMPORTANCE_HIGH, /* silenced */ false);
+        when(mPowerManager.isInteractive()).thenReturn(true);
+        when(mPowerManager.isScreenOn()).thenReturn(true);
+        when(mDreamManager.isDreaming()).thenReturn(false);
+        when(mStatusBarStateController.getState()).thenReturn(SHADE_LOCKED);
+        when(mHeadsUpManager.isSnoozed("a")).thenReturn(true);
+        when(mKeyguardStateController.isShowing()).thenReturn(true);
+        when(mKeyguardStateController.isOccluded()).thenReturn(false);
+
+        assertThat(mNotifInterruptionStateProvider.shouldLaunchFullScreenIntentWhenAdded(entry))
+                .isTrue();
+        verify(mLogger).logNoHeadsUpPackageSnoozed(entry);
+        verify(mLogger, never()).logNoFullscreen(any(), any());
+        verify(mLogger, never()).logNoFullscreenWarning(any(), any());
+        verify(mLogger).logFullscreen(entry, "Keyguard is showing and not occluded");
+    }
+
+    @Test
+    public void testShouldNotFullScreen_snoozed_unlocked_withStrictRules() throws Exception {
+        when(mFlags.fullScreenIntentRequiresKeyguard()).thenReturn(true);
+        NotificationEntry entry = createFsiNotification(IMPORTANCE_HIGH, /* silenced */ false);
+        when(mPowerManager.isInteractive()).thenReturn(true);
+        when(mPowerManager.isScreenOn()).thenReturn(true);
+        when(mDreamManager.isDreaming()).thenReturn(false);
+        when(mStatusBarStateController.getState()).thenReturn(SHADE);
+        when(mHeadsUpManager.isSnoozed("a")).thenReturn(true);
+        when(mKeyguardStateController.isShowing()).thenReturn(false);
+        when(mKeyguardStateController.isOccluded()).thenReturn(false);
+
+        assertThat(mNotifInterruptionStateProvider.shouldLaunchFullScreenIntentWhenAdded(entry))
+                .isFalse();
+        verify(mLogger).logNoHeadsUpPackageSnoozed(entry);
+        verify(mLogger, never()).logNoFullscreen(any(), any());
+        verify(mLogger).logNoFullscreenWarning(entry, "Expected not to HUN while not on keyguard");
+        verify(mLogger, never()).logFullscreen(any(), any());
+    }
+
     /**
      * Bubbles can happen.
      */
@@ -552,6 +659,17 @@
     }
 
     /**
+     * Test that notification can bubble even if it is a child in a group and group settings are
+     * set to alert only for summary notifications.
+     */
+    @Test
+    public void testShouldBubbleUp_notifInGroupWithOnlySummaryAlerts() {
+        ensureStateForBubbleUp();
+        NotificationEntry bubble = createBubble("testgroup", GROUP_ALERT_SUMMARY);
+        assertThat(mNotifInterruptionStateProvider.shouldBubbleUp(bubble)).isTrue();
+    }
+
+    /**
      * If the notification doesn't have permission to bubble, it shouldn't bubble.
      */
     @Test
@@ -612,22 +730,34 @@
         ensureStateForBubbleUp();
 
         // Make canAlertCommon false by saying it's filtered out
-        when(mNotificationFilter.shouldFilterOut(any())).thenReturn(true);
+        when(mKeyguardNotificationVisibilityProvider.shouldHideNotification(any()))
+                .thenReturn(true);
 
         assertThat(mNotifInterruptionStateProvider.shouldBubbleUp(createBubble())).isFalse();
     }
 
     private NotificationEntry createBubble() {
+        return createBubble(null, null);
+    }
+
+    private NotificationEntry createBubble(String groupKey, Integer groupAlert) {
         Notification.BubbleMetadata data = new Notification.BubbleMetadata.Builder(
                 PendingIntent.getActivity(mContext, 0, new Intent(),
-                    PendingIntent.FLAG_MUTABLE),
-                        Icon.createWithResource(mContext.getResources(), R.drawable.android))
+                        PendingIntent.FLAG_MUTABLE),
+                Icon.createWithResource(mContext.getResources(), R.drawable.android))
                 .build();
-        Notification n = new Notification.Builder(getContext(), "a")
+        Notification.Builder nb = new Notification.Builder(getContext(), "a")
                 .setContentTitle("title")
                 .setContentText("content text")
-                .setBubbleMetadata(data)
-                .build();
+                .setBubbleMetadata(data);
+        if (groupKey != null) {
+            nb.setGroup(groupKey);
+            nb.setGroupSummary(false);
+        }
+        if (groupAlert != null) {
+            nb.setGroupAlertBehavior(groupAlert);
+        }
+        Notification n = nb.build();
         n.flags |= FLAG_BUBBLE;
 
         return new NotificationEntryBuilder()
@@ -666,9 +796,7 @@
                 .setContentText("content text")
                 .setFullScreenIntent(mPendingIntent, true)
                 .setGroup("fsi")
-                .setGroupAlertBehavior(silent
-                        ? Notification.GROUP_ALERT_SUMMARY
-                        : Notification.GROUP_ALERT_ALL)
+                .setGroupAlertBehavior(silent ? GROUP_ALERT_SUMMARY : Notification.GROUP_ALERT_ALL)
                 .build();
 
         return createNotification(importance, n);
@@ -677,42 +805,42 @@
     private final NotificationInterruptSuppressor
             mSuppressAwakeHeadsUp =
             new NotificationInterruptSuppressor() {
-        @Override
-        public String getName() {
-            return "suppressAwakeHeadsUp";
-        }
+                @Override
+                public String getName() {
+                    return "suppressAwakeHeadsUp";
+                }
 
-        @Override
-        public boolean suppressAwakeHeadsUp(NotificationEntry entry) {
-            return true;
-        }
-    };
+                @Override
+                public boolean suppressAwakeHeadsUp(NotificationEntry entry) {
+                    return true;
+                }
+            };
 
     private final NotificationInterruptSuppressor
             mSuppressAwakeInterruptions =
             new NotificationInterruptSuppressor() {
-        @Override
-        public String getName() {
-            return "suppressAwakeInterruptions";
-        }
+                @Override
+                public String getName() {
+                    return "suppressAwakeInterruptions";
+                }
 
-        @Override
-        public boolean suppressAwakeInterruptions(NotificationEntry entry) {
-            return true;
-        }
-    };
+                @Override
+                public boolean suppressAwakeInterruptions(NotificationEntry entry) {
+                    return true;
+                }
+            };
 
     private final NotificationInterruptSuppressor
             mSuppressInterruptions =
             new NotificationInterruptSuppressor() {
-        @Override
-        public String getName() {
-            return "suppressInterruptions";
-        }
+                @Override
+                public String getName() {
+                    return "suppressInterruptions";
+                }
 
-        @Override
-        public boolean suppressInterruptions(NotificationEntry entry) {
-            return true;
-        }
-    };
+                @Override
+                public boolean suppressInterruptions(NotificationEntry entry) {
+                    return true;
+                }
+            };
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/NotificationLoggerLegacyTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/NotificationLoggerLegacyTest.java
deleted file mode 100644
index 429d2ed..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/NotificationLoggerLegacyTest.java
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.statusbar.notification.logging;
-
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.doAnswer;
-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.when;
-
-import android.app.Notification;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.UserHandle;
-import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.internal.logging.InstanceId;
-import com.android.internal.statusbar.IStatusBarService;
-import com.android.internal.statusbar.NotificationVisibility;
-import com.android.systemui.SysuiTestCase;
-import com.android.systemui.statusbar.NotificationListener;
-import com.android.systemui.statusbar.StatusBarState;
-import com.android.systemui.statusbar.StatusBarStateControllerImpl;
-import com.android.systemui.statusbar.notification.NotifPipelineFlags;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
-import com.android.systemui.statusbar.notification.collection.NotifLiveData;
-import com.android.systemui.statusbar.notification.collection.NotifLiveDataStore;
-import com.android.systemui.statusbar.notification.collection.NotifPipeline;
-import com.android.systemui.statusbar.notification.collection.NotificationEntry;
-import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
-import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider;
-import com.android.systemui.statusbar.notification.logging.nano.Notifications;
-import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
-import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
-import com.android.systemui.util.concurrency.FakeExecutor;
-import com.android.systemui.util.time.FakeSystemClock;
-
-import com.google.android.collect.Lists;
-
-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;
-import org.mockito.MockitoAnnotations;
-
-import java.util.List;
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.Executor;
-
-@SmallTest
-@RunWith(AndroidTestingRunner.class)
-@TestableLooper.RunWithLooper
-public class NotificationLoggerLegacyTest extends SysuiTestCase {
-    private static final String TEST_PACKAGE_NAME = "test";
-    private static final int TEST_UID = 0;
-
-    @Mock private NotificationListContainer mListContainer;
-    @Mock private IStatusBarService mBarService;
-    @Mock private ExpandableNotificationRow mRow;
-    @Mock private NotificationLogger.ExpansionStateLogger mExpansionStateLogger;
-
-    // Dependency mocks:
-    @Mock private NotifPipelineFlags mNotifPipelineFlags;
-    @Mock private NotifLiveDataStore mNotifLiveDataStore;
-    @Mock private NotifLiveData<List<NotificationEntry>> mActiveNotifList;
-    @Mock private NotificationVisibilityProvider mVisibilityProvider;
-    @Mock private NotificationEntryManager mEntryManager;
-    @Mock private NotifPipeline mNotifPipeline;
-    @Mock private NotificationListener mListener;
-
-    private NotificationEntry mEntry;
-    private TestableNotificationLogger mLogger;
-    private ConcurrentLinkedQueue<AssertionError> mErrorQueue = new ConcurrentLinkedQueue<>();
-    private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock());
-    private NotificationPanelLoggerFake mNotificationPanelLoggerFake =
-            new NotificationPanelLoggerFake();
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        when(mNotifLiveDataStore.getActiveNotifList()).thenReturn(mActiveNotifList);
-
-        mEntry = new NotificationEntryBuilder()
-                .setPkg(TEST_PACKAGE_NAME)
-                .setOpPkg(TEST_PACKAGE_NAME)
-                .setUid(TEST_UID)
-                .setNotification(new Notification())
-                .setUser(UserHandle.CURRENT)
-                .setInstanceId(InstanceId.fakeInstanceId(1))
-                .build();
-        mEntry.setRow(mRow);
-
-        mLogger = new TestableNotificationLogger(
-                mListener,
-                mUiBgExecutor,
-                mNotifPipelineFlags,
-                mNotifLiveDataStore,
-                mVisibilityProvider,
-                mEntryManager,
-                mNotifPipeline,
-                mock(StatusBarStateControllerImpl.class),
-                mBarService,
-                mExpansionStateLogger
-        );
-        mLogger.setUpWithContainer(mListContainer);
-        verify(mEntryManager).addNotificationEntryListener(any());
-        verify(mNotifPipeline, never()).addCollectionListener(any());
-    }
-
-    @After
-    public void tearDown() {
-        mLogger.mHandler.removeCallbacksAndMessages(null);
-    }
-
-    @Test
-    public void testOnChildLocationsChangedReportsVisibilityChanged() throws Exception {
-        NotificationVisibility[] newlyVisibleKeys = {
-                NotificationVisibility.obtain(mEntry.getKey(), 0, 1, true)
-        };
-        NotificationVisibility[] noLongerVisibleKeys = {};
-        doAnswer(invocation -> {
-                    try {
-                        assertArrayEquals(newlyVisibleKeys,
-                                (NotificationVisibility[]) invocation.getArguments()[0]);
-                        assertArrayEquals(noLongerVisibleKeys,
-                                (NotificationVisibility[]) invocation.getArguments()[1]);
-                    } catch (AssertionError error) {
-                        mErrorQueue.offer(error);
-                    }
-                    return null;
-                }
-        ).when(mBarService).onNotificationVisibilityChanged(any(NotificationVisibility[].class),
-                any(NotificationVisibility[].class));
-
-        when(mListContainer.isInVisibleLocation(any())).thenReturn(true);
-        when(mActiveNotifList.getValue()).thenReturn(Lists.newArrayList(mEntry));
-        mLogger.getChildLocationsChangedListenerForTest().onChildLocationsChanged();
-        TestableLooper.get(this).processAllMessages();
-        mUiBgExecutor.runAllReady();
-
-        if (!mErrorQueue.isEmpty()) {
-            throw mErrorQueue.poll();
-        }
-
-        // |mEntry| won't change visibility, so it shouldn't be reported again:
-        Mockito.reset(mBarService);
-        mLogger.getChildLocationsChangedListenerForTest().onChildLocationsChanged();
-        TestableLooper.get(this).processAllMessages();
-        mUiBgExecutor.runAllReady();
-
-        verify(mBarService, never()).onNotificationVisibilityChanged(any(), any());
-    }
-
-    @Test
-    public void testStoppingNotificationLoggingReportsCurrentNotifications()
-            throws Exception {
-        when(mListContainer.isInVisibleLocation(any())).thenReturn(true);
-        when(mActiveNotifList.getValue()).thenReturn(Lists.newArrayList(mEntry));
-        mLogger.getChildLocationsChangedListenerForTest().onChildLocationsChanged();
-        TestableLooper.get(this).processAllMessages();
-        mUiBgExecutor.runAllReady();
-        Mockito.reset(mBarService);
-
-        setStateAsleep();
-        mLogger.onDozingChanged(false);  // Wake to lockscreen
-        mLogger.onDozingChanged(true);  // And go back to sleep, turning off logging
-        mUiBgExecutor.runAllReady();
-        // The visibility objects are recycled by NotificationLogger, so we can't use specific
-        // matchers here.
-        verify(mBarService, times(1)).onNotificationVisibilityChanged(any(), any());
-    }
-
-    private void setStateAsleep() {
-        mLogger.onPanelExpandedChanged(true);
-        mLogger.onDozingChanged(true);
-        mLogger.onStateChanged(StatusBarState.KEYGUARD);
-    }
-
-    private void setStateAwake() {
-        mLogger.onPanelExpandedChanged(false);
-        mLogger.onDozingChanged(false);
-        mLogger.onStateChanged(StatusBarState.SHADE);
-    }
-
-    @Test
-    public void testLogPanelShownOnWake() {
-        when(mActiveNotifList.getValue()).thenReturn(Lists.newArrayList(mEntry));
-        setStateAsleep();
-        mLogger.onDozingChanged(false);  // Wake to lockscreen
-        assertEquals(1, mNotificationPanelLoggerFake.getCalls().size());
-        assertTrue(mNotificationPanelLoggerFake.get(0).isLockscreen);
-        assertEquals(1, mNotificationPanelLoggerFake.get(0).list.notifications.length);
-        Notifications.Notification n = mNotificationPanelLoggerFake.get(0).list.notifications[0];
-        assertEquals(TEST_PACKAGE_NAME, n.packageName);
-        assertEquals(TEST_UID, n.uid);
-        assertEquals(1, n.instanceId);
-        assertFalse(n.isGroupSummary);
-        assertEquals(Notifications.Notification.SECTION_ALERTING, n.section);
-    }
-
-    @Test
-    public void testLogPanelShownOnShadePull() {
-        when(mActiveNotifList.getValue()).thenReturn(Lists.newArrayList(mEntry));
-        setStateAwake();
-        // Now expand panel
-        mLogger.onPanelExpandedChanged(true);
-        assertEquals(1, mNotificationPanelLoggerFake.getCalls().size());
-        assertFalse(mNotificationPanelLoggerFake.get(0).isLockscreen);
-        assertEquals(1, mNotificationPanelLoggerFake.get(0).list.notifications.length);
-        Notifications.Notification n = mNotificationPanelLoggerFake.get(0).list.notifications[0];
-        assertEquals(TEST_PACKAGE_NAME, n.packageName);
-        assertEquals(TEST_UID, n.uid);
-        assertEquals(1, n.instanceId);
-        assertFalse(n.isGroupSummary);
-        assertEquals(Notifications.Notification.SECTION_ALERTING, n.section);
-    }
-
-
-    @Test
-    public void testLogPanelShownHandlesNullInstanceIds() {
-        // Construct a NotificationEntry like mEntry, but with a null instance id.
-        NotificationEntry entry = new NotificationEntryBuilder()
-                .setPkg(TEST_PACKAGE_NAME)
-                .setOpPkg(TEST_PACKAGE_NAME)
-                .setUid(TEST_UID)
-                .setNotification(new Notification())
-                .setUser(UserHandle.CURRENT)
-                .build();
-        entry.setRow(mRow);
-
-        when(mActiveNotifList.getValue()).thenReturn(Lists.newArrayList(entry));
-        setStateAsleep();
-        mLogger.onDozingChanged(false);  // Wake to lockscreen
-        assertEquals(1, mNotificationPanelLoggerFake.getCalls().size());
-        assertEquals(1, mNotificationPanelLoggerFake.get(0).list.notifications.length);
-        Notifications.Notification n = mNotificationPanelLoggerFake.get(0).list.notifications[0];
-        assertEquals(0, n.instanceId);
-    }
-
-    private class TestableNotificationLogger extends NotificationLogger {
-
-        TestableNotificationLogger(NotificationListener notificationListener,
-                Executor uiBgExecutor,
-                NotifPipelineFlags notifPipelineFlags,
-                NotifLiveDataStore notifLiveDataStore,
-                NotificationVisibilityProvider visibilityProvider,
-                NotificationEntryManager entryManager,
-                NotifPipeline notifPipeline,
-                StatusBarStateControllerImpl statusBarStateController,
-                IStatusBarService barService,
-                ExpansionStateLogger expansionStateLogger) {
-            super(
-                    notificationListener,
-                    uiBgExecutor,
-                    notifPipelineFlags,
-                    notifLiveDataStore,
-                    visibilityProvider,
-                    entryManager,
-                    notifPipeline,
-                    statusBarStateController,
-                    expansionStateLogger,
-                    mNotificationPanelLoggerFake
-            );
-            mBarService = barService;
-            mHandler.removeCallbacksAndMessages(null);
-            // Make this on the current thread so we can wait for it during tests.
-            mHandler = Handler.createAsync(Looper.myLooper());
-        }
-
-        OnChildLocationsChangedListener getChildLocationsChangedListenerForTest() {
-            return mNotificationLocationsChangedListener;
-        }
-    }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/NotificationLoggerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/NotificationLoggerTest.java
index b69bd8d..8a7b9d3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/NotificationLoggerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/logging/NotificationLoggerTest.java
@@ -103,7 +103,6 @@
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        when(mNotifPipelineFlags.isNewPipelineEnabled()).thenReturn(true);
         when(mNotifLiveDataStore.getActiveNotifList()).thenReturn(mActiveNotifEntries);
 
         mEntry = new NotificationEntryBuilder()
@@ -278,10 +277,8 @@
             super(
                     notificationListener,
                     uiBgExecutor,
-                    notifPipelineFlags,
                     notifLiveDataStore,
                     visibilityProvider,
-                    entryManager,
                     notifPipeline,
                     statusBarStateController,
                     expansionStateLogger,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowDragControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowDragControllerTest.java
index bc54bf8..922e93d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowDragControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowDragControllerTest.java
@@ -16,27 +16,6 @@
 
 package com.android.systemui.statusbar.notification.row;
 
-import static android.view.DragEvent.ACTION_DRAG_STARTED;
-
-import android.app.Notification;
-import android.app.PendingIntent;
-import android.content.Context;
-import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
-import android.testing.TestableLooper.RunWithLooper;
-import android.view.DragEvent;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.systemui.SysuiTestCase;
-import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
-import com.android.systemui.statusbar.phone.ShadeController;
-import com.android.systemui.statusbar.policy.HeadsUpManager;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyFloat;
 import static org.mockito.ArgumentMatchers.anyInt;
@@ -49,6 +28,24 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import android.app.Notification;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+import android.testing.TestableLooper.RunWithLooper;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
+import com.android.systemui.shade.ShadeController;
+import com.android.systemui.statusbar.policy.HeadsUpManager;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
 
 @SmallTest
 @RunWith(AndroidTestingRunner.class)
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 b1bf971..f8b39e8 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
@@ -43,6 +43,7 @@
 
 import android.app.Notification;
 import android.app.NotificationChannel;
+import android.graphics.Color;
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
 import android.testing.TestableLooper.RunWithLooper;
@@ -110,6 +111,28 @@
     }
 
     @Test
+    public void testUpdateBackgroundColors_isRecursive() {
+        mGroupRow.setTintColor(Color.RED);
+        mGroupRow.getChildNotificationAt(0).setTintColor(Color.GREEN);
+        mGroupRow.getChildNotificationAt(1).setTintColor(Color.BLUE);
+
+        assertThat(mGroupRow.getCurrentBackgroundTint()).isEqualTo(Color.RED);
+        assertThat(mGroupRow.getChildNotificationAt(0).getCurrentBackgroundTint())
+                .isEqualTo(Color.GREEN);
+        assertThat(mGroupRow.getChildNotificationAt(1).getCurrentBackgroundTint())
+                .isEqualTo(Color.BLUE);
+
+        mGroupRow.updateBackgroundColors();
+
+        int resetTint = mGroupRow.getCurrentBackgroundTint();
+        assertThat(resetTint).isNotEqualTo(Color.RED);
+        assertThat(mGroupRow.getChildNotificationAt(0).getCurrentBackgroundTint())
+                .isEqualTo(resetTint);
+        assertThat(mGroupRow.getChildNotificationAt(1).getCurrentBackgroundTint())
+                .isEqualTo(resetTint);
+    }
+
+    @Test
     public void testSetSensitiveOnNotifRowNotifiesOfHeightChange() throws InterruptedException {
         // GIVEN a sensitive notification row that's currently redacted
         measureAndLayout(mNotifRow);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfoTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfoTest.java
index dc6d744..381d72f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfoTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationConversationInfoTest.java
@@ -76,10 +76,10 @@
 import com.android.systemui.R;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.people.widget.PeopleSpaceWidgetManager;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.statusbar.SbnBuilder;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
-import com.android.systemui.statusbar.phone.ShadeController;
 import com.android.systemui.wmshell.BubblesManager;
 import com.android.systemui.wmshell.BubblesTestActivity;
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationEntryManagerInflationTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationEntryManagerInflationTest.java
deleted file mode 100644
index 251ac7d..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationEntryManagerInflationTest.java
+++ /dev/null
@@ -1,466 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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;
-
-import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
-
-import static com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.FLAG_CONTENT_VIEW_HEADS_UP;
-
-import static junit.framework.Assert.assertNotNull;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.app.Notification;
-import android.content.Context;
-import android.content.pm.LauncherApps;
-import android.os.Handler;
-import android.service.notification.NotificationListenerService;
-import android.service.notification.NotificationListenerService.Ranking;
-import android.service.notification.StatusBarNotification;
-import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
-
-import androidx.asynclayoutinflater.view.AsyncLayoutInflater;
-import androidx.test.filters.SmallTest;
-
-import com.android.internal.logging.MetricsLogger;
-import com.android.internal.statusbar.IStatusBarService;
-import com.android.internal.util.NotificationMessagingUtil;
-import com.android.systemui.R;
-import com.android.systemui.SysuiTestCase;
-import com.android.systemui.classifier.FalsingCollectorFake;
-import com.android.systemui.classifier.FalsingManagerFake;
-import com.android.systemui.dump.DumpManager;
-import com.android.systemui.flags.FeatureFlags;
-import com.android.systemui.media.MediaFeatureFlag;
-import com.android.systemui.media.dialog.MediaOutputDialogFactory;
-import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.shared.plugins.PluginManager;
-import com.android.systemui.statusbar.NotificationListener;
-import com.android.systemui.statusbar.NotificationLockscreenUserManager;
-import com.android.systemui.statusbar.NotificationMediaManager;
-import com.android.systemui.statusbar.NotificationPresenter;
-import com.android.systemui.statusbar.NotificationRemoteInputManager;
-import com.android.systemui.statusbar.SbnBuilder;
-import com.android.systemui.statusbar.SmartReplyController;
-import com.android.systemui.statusbar.notification.ConversationNotificationProcessor;
-import com.android.systemui.statusbar.notification.NotifPipelineFlags;
-import com.android.systemui.statusbar.notification.NotificationClicker;
-import com.android.systemui.statusbar.notification.NotificationEntryListener;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
-import com.android.systemui.statusbar.notification.NotificationEntryManagerLogger;
-import com.android.systemui.statusbar.notification.NotificationFilter;
-import com.android.systemui.statusbar.notification.NotificationSectionsFeatureManager;
-import com.android.systemui.statusbar.notification.collection.NotifLiveDataStoreMocksKt;
-import com.android.systemui.statusbar.notification.collection.NotificationEntry;
-import com.android.systemui.statusbar.notification.collection.NotificationRankingManager;
-import com.android.systemui.statusbar.notification.collection.inflation.NotificationRowBinderImpl;
-import com.android.systemui.statusbar.notification.collection.legacy.LowPriorityInflationHelper;
-import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy;
-import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider;
-import com.android.systemui.statusbar.notification.icon.IconBuilder;
-import com.android.systemui.statusbar.notification.icon.IconManager;
-import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider;
-import com.android.systemui.statusbar.notification.logging.NotificationLogger;
-import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier;
-import com.android.systemui.statusbar.notification.row.dagger.ExpandableNotificationRowComponent;
-import com.android.systemui.statusbar.notification.row.dagger.NotificationRowComponent;
-import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
-import com.android.systemui.statusbar.phone.KeyguardBypassController;
-import com.android.systemui.statusbar.policy.HeadsUpManager;
-import com.android.systemui.statusbar.policy.InflatedSmartReplyState;
-import com.android.systemui.statusbar.policy.InflatedSmartReplyViewHolder;
-import com.android.systemui.statusbar.policy.SmartReplyConstants;
-import com.android.systemui.statusbar.policy.SmartReplyStateInflater;
-import com.android.systemui.statusbar.policy.dagger.RemoteInputViewSubcomponent;
-import com.android.systemui.util.concurrency.FakeExecutor;
-import com.android.systemui.util.leak.LeakDetector;
-import com.android.systemui.util.time.FakeSystemClock;
-import com.android.systemui.wmshell.BubblesManager;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Answers;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
-import org.mockito.stubbing.Answer;
-
-import java.util.Optional;
-import java.util.concurrent.CountDownLatch;
-
-/**
- * Functional tests for notification inflation from {@link NotificationEntryManager}.
- */
-@SmallTest
-@RunWith(AndroidTestingRunner.class)
-@TestableLooper.RunWithLooper(setAsMainLooper = true)
-public class NotificationEntryManagerInflationTest extends SysuiTestCase {
-
-    private static final String TEST_TITLE = "Title";
-    private static final String TEST_TEXT = "Text";
-    private static final long TIMEOUT_TIME = 10000;
-    private static final Runnable TIMEOUT_RUNNABLE = () -> {
-        throw new RuntimeException("Timed out waiting to inflate");
-    };
-
-    @Mock private NotificationListener mNotificationListener;
-    @Mock private NotificationPresenter mPresenter;
-    @Mock private NotificationEntryManager.KeyguardEnvironment mEnvironment;
-    @Mock private NotificationListContainer mListContainer;
-    @Mock private NotificationEntryListener mEntryListener;
-    @Mock private NotificationRowBinderImpl.BindRowCallback mBindCallback;
-    @Mock private HeadsUpManager mHeadsUpManager;
-    @Mock private NotificationInterruptStateProvider mNotificationInterruptionStateProvider;
-    @Mock private NotificationLockscreenUserManager mLockscreenUserManager;
-    @Mock private NotificationGutsManager mGutsManager;
-    @Mock private NotificationRemoteInputManager mRemoteInputManager;
-    @Mock private NotificationMediaManager mNotificationMediaManager;
-    @Mock(answer = Answers.RETURNS_SELF)
-    private ExpandableNotificationRowComponent.Builder mExpandableNotificationRowComponentBuilder;
-    @Mock private ExpandableNotificationRowComponent mExpandableNotificationRowComponent;
-    @Mock private KeyguardBypassController mKeyguardBypassController;
-    @Mock private StatusBarStateController mStatusBarStateController;
-
-    @Mock private NotificationGroupManagerLegacy mGroupMembershipManager;
-    @Mock private NotificationGroupManagerLegacy mGroupExpansionManager;
-    @Mock private NotifPipelineFlags mNotifPipelineFlags;
-    @Mock private LeakDetector mLeakDetector;
-
-    @Mock private ActivatableNotificationViewController mActivatableNotificationViewController;
-    @Mock private NotificationRowComponent.Builder mNotificationRowComponentBuilder;
-    @Mock private PeopleNotificationIdentifier mPeopleNotificationIdentifier;
-    @Mock private InflatedSmartReplyState mInflatedSmartReplyState;
-    @Mock private InflatedSmartReplyViewHolder mInflatedSmartReplies;
-
-    private StatusBarNotification mSbn;
-    private NotificationListenerService.RankingMap mRankingMap;
-    private NotificationEntryManager mEntryManager;
-    private NotificationRowBinderImpl mRowBinder;
-    private Handler mHandler;
-    private FakeExecutor mBgExecutor;
-    private RowContentBindStage mRowContentBindStage;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        mDependency.injectMockDependency(SmartReplyController.class);
-        mDependency.injectMockDependency(MediaOutputDialogFactory.class);
-
-        mHandler = Handler.createAsync(TestableLooper.get(this).getLooper());
-
-        // Add an action so heads up content views are made
-        Notification.Action action = new Notification.Action.Builder(null, null, null).build();
-        Notification notification = new Notification.Builder(mContext)
-                .setSmallIcon(R.drawable.ic_person)
-                .setContentTitle(TEST_TITLE)
-                .setContentText(TEST_TEXT)
-                .setActions(action)
-                .build();
-        mSbn = new SbnBuilder()
-                .setNotification(notification)
-                .build();
-
-        when(mNotifPipelineFlags.checkLegacyPipelineEnabled()).thenReturn(true);
-        when(mNotifPipelineFlags.isNewPipelineEnabled()).thenReturn(false);
-
-        mEntryManager = new NotificationEntryManager(
-                mock(NotificationEntryManagerLogger.class),
-                mGroupMembershipManager,
-                mNotifPipelineFlags,
-                () -> mRowBinder,
-                () -> mRemoteInputManager,
-                mLeakDetector,
-                mock(IStatusBarService.class),
-                NotifLiveDataStoreMocksKt.createNotifLiveDataStoreImplMock(),
-                mock(DumpManager.class)
-        );
-        mEntryManager.initialize(
-                mNotificationListener,
-                new NotificationRankingManager(
-                        () -> mock(NotificationMediaManager.class),
-                        mGroupMembershipManager,
-                        mHeadsUpManager,
-                        mock(NotificationFilter.class),
-                        mock(NotificationEntryManagerLogger.class),
-                        mock(NotificationSectionsFeatureManager.class),
-                        mock(PeopleNotificationIdentifier.class),
-                        mock(HighPriorityProvider.class),
-                        mEnvironment));
-
-        NotifRemoteViewCache cache = new NotifRemoteViewCacheImpl(mEntryManager);
-        NotifBindPipeline pipeline = new NotifBindPipeline(
-                mEntryManager,
-                mock(NotifBindPipelineLogger.class),
-                TestableLooper.get(this).getLooper());
-        mBgExecutor = new FakeExecutor(new FakeSystemClock());
-        NotificationContentInflater binder = new NotificationContentInflater(
-                cache,
-                mRemoteInputManager,
-                mock(ConversationNotificationProcessor.class),
-                mock(MediaFeatureFlag.class),
-                mBgExecutor,
-                new SmartReplyStateInflater() {
-                    @Override
-                    public InflatedSmartReplyState inflateSmartReplyState(NotificationEntry entry) {
-                        return mInflatedSmartReplyState;
-                    }
-
-                    @Override
-                    public InflatedSmartReplyViewHolder inflateSmartReplyViewHolder(
-                            Context sysuiContext, Context notifPackageContext,
-                            NotificationEntry entry,
-                            InflatedSmartReplyState existingSmartReplyState,
-                            InflatedSmartReplyState newSmartReplyState) {
-                        return mInflatedSmartReplies;
-                    }
-                });
-        mRowContentBindStage = new RowContentBindStage(
-                binder,
-                mock(NotifInflationErrorManager.class),
-                mock(RowContentBindStageLogger.class));
-        pipeline.setStage(mRowContentBindStage);
-
-        ArgumentCaptor<ExpandableNotificationRow> viewCaptor =
-                ArgumentCaptor.forClass(ExpandableNotificationRow.class);
-        when(mExpandableNotificationRowComponentBuilder
-                .expandableNotificationRow(viewCaptor.capture()))
-                .thenReturn(mExpandableNotificationRowComponentBuilder);
-        when(mExpandableNotificationRowComponentBuilder.build())
-                .thenReturn(mExpandableNotificationRowComponent);
-
-        when(mExpandableNotificationRowComponent.getExpandableNotificationRowController())
-                .thenAnswer((Answer<ExpandableNotificationRowController>) invocation ->
-                        new ExpandableNotificationRowController(
-                                viewCaptor.getValue(),
-                                mock(ActivatableNotificationViewController.class),
-                                mock(RemoteInputViewSubcomponent.Factory.class),
-                                mock(MetricsLogger.class),
-                                mListContainer,
-                                mNotificationMediaManager,
-                                mock(SmartReplyConstants.class),
-                                mock(SmartReplyController.class),
-                                mock(PluginManager.class),
-                                new FakeSystemClock(),
-                                "FOOBAR",
-                                "FOOBAR",
-                                mKeyguardBypassController,
-                                mGroupMembershipManager,
-                                mGroupExpansionManager,
-                                mRowContentBindStage,
-                                mock(NotificationLogger.class),
-                                mHeadsUpManager,
-                                mPresenter,
-                                mStatusBarStateController,
-                                mGutsManager,
-                                true,
-                                null,
-                                new FalsingManagerFake(),
-                                new FalsingCollectorFake(),
-                                mock(FeatureFlags.class),
-                                mPeopleNotificationIdentifier,
-                                Optional.of(mock(BubblesManager.class)),
-                                mock(ExpandableNotificationRowDragController.class)));
-
-        when(mNotificationRowComponentBuilder.activatableNotificationView(any()))
-                .thenReturn(mNotificationRowComponentBuilder);
-        when(mNotificationRowComponentBuilder.build()).thenReturn(
-                () -> mActivatableNotificationViewController);
-
-        mRowBinder = new NotificationRowBinderImpl(
-                mContext,
-                new NotificationMessagingUtil(mContext),
-                mRemoteInputManager,
-                mLockscreenUserManager,
-                pipeline,
-                mRowContentBindStage,
-                RowInflaterTask::new,
-                mExpandableNotificationRowComponentBuilder,
-                new IconManager(
-                        mEntryManager,
-                        mock(LauncherApps.class),
-                        new IconBuilder(mContext)),
-                mock(LowPriorityInflationHelper.class),
-                mNotifPipelineFlags);
-
-        mEntryManager.setUpWithPresenter(mPresenter);
-        mEntryManager.addNotificationEntryListener(mEntryListener);
-
-        mRowBinder.setUpWithPresenter(mPresenter, mListContainer, mBindCallback);
-        mRowBinder.setNotificationClicker(mock(NotificationClicker.class));
-
-        Ranking ranking = new Ranking();
-        ranking.populate(
-                mSbn.getKey(),
-                0,
-                false,
-                0,
-                0,
-                IMPORTANCE_DEFAULT,
-                null,
-                null,
-                null,
-                null,
-                null,
-                true,
-                Ranking.USER_SENTIMENT_NEUTRAL,
-                false,
-                -1,
-                false,
-                null,
-                null,
-                false,
-                false,
-                false,
-                null,
-                0,
-                false
-            );
-        mRankingMap = new NotificationListenerService.RankingMap(new Ranking[] {ranking});
-
-        TestableLooper.get(this).processAllMessages();
-    }
-
-    @After
-    public void cleanUp() {
-        // Don't leave anything on main thread
-        TestableLooper.get(this).processAllMessages();
-    }
-
-    @Test
-    public void testAddNotification() {
-        // WHEN a notification is added
-        mEntryManager.addNotification(mSbn, mRankingMap);
-        ArgumentCaptor<NotificationEntry> entryCaptor = ArgumentCaptor.forClass(
-                NotificationEntry.class);
-        verify(mEntryListener).onPendingEntryAdded(entryCaptor.capture());
-        NotificationEntry entry = entryCaptor.getValue();
-
-        waitForInflation();
-
-        // THEN the notification has its row inflated
-        assertNotNull(entry.getRow());
-        assertNotNull(entry.getRow().getPrivateLayout().getContractedChild());
-
-        // THEN inflation callbacks are called
-        verify(mBindCallback).onBindRow(entry.getRow());
-        verify(mEntryListener, never()).onInflationError(any(), any());
-        verify(mEntryListener).onEntryInflated(entry);
-        verify(mEntryListener).onNotificationAdded(entry);
-
-        // THEN the notification is active
-        assertNotNull(mEntryManager.getActiveNotificationUnfiltered(mSbn.getKey()));
-
-        // THEN we update the presenter
-        verify(mPresenter).updateNotificationViews(any());
-    }
-
-    @Test
-    public void testUpdateNotification() {
-        // GIVEN a notification already added
-        mEntryManager.addNotification(mSbn, mRankingMap);
-        ArgumentCaptor<NotificationEntry> entryCaptor = ArgumentCaptor.forClass(
-                NotificationEntry.class);
-        verify(mEntryListener).onPendingEntryAdded(entryCaptor.capture());
-        NotificationEntry entry = entryCaptor.getValue();
-        waitForInflation();
-
-        Mockito.reset(mEntryListener);
-        Mockito.reset(mPresenter);
-
-        // WHEN the notification is updated
-        mEntryManager.updateNotification(mSbn, mRankingMap);
-
-        waitForInflation();
-
-        // THEN the notification has its row and inflated
-        assertNotNull(entry.getRow());
-
-        // THEN inflation callbacks are called
-        verify(mEntryListener, never()).onInflationError(any(), any());
-        verify(mEntryListener).onEntryReinflated(entry);
-
-        // THEN we update the presenter
-        verify(mPresenter).updateNotificationViews(any());
-    }
-
-    @Test
-    public void testContentViewInflationDuringRowInflationInflatesCorrectViews() {
-        // GIVEN a notification is added and the row is inflating
-        mEntryManager.addNotification(mSbn, mRankingMap);
-        ArgumentCaptor<NotificationEntry> entryCaptor = ArgumentCaptor.forClass(
-                NotificationEntry.class);
-        verify(mEntryListener).onPendingEntryAdded(entryCaptor.capture());
-        NotificationEntry entry = entryCaptor.getValue();
-
-        // WHEN we try to bind a content view
-        mRowContentBindStage.getStageParams(entry).requireContentViews(FLAG_CONTENT_VIEW_HEADS_UP);
-        mRowContentBindStage.requestRebind(entry, null);
-
-        waitForInflation();
-
-        // THEN the notification has its row and all relevant content views inflated
-        assertNotNull(entry.getRow());
-        assertNotNull(entry.getRow().getPrivateLayout().getContractedChild());
-        assertNotNull(entry.getRow().getPrivateLayout().getHeadsUpChild());
-    }
-
-    /**
-     * Wait for inflation to finish.
-     *
-     * A few things to note
-     * 1) Row inflation is done via {@link AsyncLayoutInflater} on its own background thread that
-     * calls back to main thread which is why we wait on main thread.
-     * 2) Row *content* inflation is done on the {@link FakeExecutor} we pass in in this test class
-     * so we control when that work is done. The callback is still always on the main thread.
-     */
-    private void waitForInflation() {
-        mHandler.postDelayed(TIMEOUT_RUNNABLE, TIMEOUT_TIME);
-        final CountDownLatch latch = new CountDownLatch(1);
-        NotificationEntryListener inflationListener = new NotificationEntryListener() {
-            @Override
-            public void onEntryInflated(NotificationEntry entry) {
-                latch.countDown();
-            }
-
-            @Override
-            public void onEntryReinflated(NotificationEntry entry) {
-                latch.countDown();
-            }
-
-            @Override
-            public void onInflationError(StatusBarNotification notification, Exception exception) {
-                latch.countDown();
-            }
-        };
-        mEntryManager.addNotificationEntryListener(inflationListener);
-        while (latch.getCount() != 0) {
-            mBgExecutor.runAllReady();
-            TestableLooper.get(this).processMessages(1);
-        }
-        mHandler.removeCallbacks(TIMEOUT_RUNNABLE);
-        mEntryManager.removeNotificationEntryListener(inflationListener);
-    }
-
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.java
index e9d8f58..f57c409 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.java
@@ -72,6 +72,7 @@
 import com.android.systemui.people.widget.PeopleSpaceWidgetManager;
 import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
 import com.android.systemui.settings.UserContextProvider;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
 import com.android.systemui.statusbar.NotificationPresenter;
 import com.android.systemui.statusbar.notification.AssistantFeedbackController;
@@ -83,7 +84,6 @@
 import com.android.systemui.statusbar.notification.row.NotificationGutsManager.OnSettingsClickListener;
 import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
 import com.android.systemui.statusbar.phone.CentralSurfaces;
-import com.android.systemui.statusbar.phone.ShadeController;
 import com.android.systemui.statusbar.policy.DeviceProvisionedController;
 import com.android.systemui.wmshell.BubblesManager;
 
@@ -156,13 +156,13 @@
 
         mGutsManager = new NotificationGutsManager(mContext,
                 () -> Optional.of(mCentralSurfaces), mHandler, mHandler, mAccessibilityManager,
-                mHighPriorityProvider, mINotificationManager, mNotificationEntryManager,
+                mHighPriorityProvider, mINotificationManager,
                 mPeopleSpaceWidgetManager, mLauncherApps, mShortcutManager,
                 mChannelEditorDialogController, mContextTracker, mAssistantFeedbackController,
                 Optional.of(mBubblesManager), new UiEventLoggerFake(), mOnUserInteractionCallback,
                 mShadeController, mock(DumpManager.class));
         mGutsManager.setUpWithPresenter(mPresenter, mNotificationListContainer,
-                mCheckSaveListener, mOnSettingsClickListener);
+                mOnSettingsClickListener);
         mGutsManager.setNotificationActivityStarter(mNotificationActivityStarter);
     }
 
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 94a93ad..9bcea10 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
@@ -47,10 +47,13 @@
 import com.android.systemui.classifier.FalsingCollectorFake;
 import com.android.systemui.classifier.FalsingManagerFake;
 import com.android.systemui.colorextraction.SysuiColorExtractor;
+import com.android.systemui.dump.DumpManager;
 import com.android.systemui.media.KeyguardMediaController;
 import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin;
 import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin.OnMenuEventListener;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.shade.ShadeController;
+import com.android.systemui.shade.transition.ShadeTransitionController;
 import com.android.systemui.statusbar.LockscreenShadeTransitionController;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager.UserChangedListener;
@@ -73,8 +76,6 @@
 import com.android.systemui.statusbar.phone.HeadsUpManagerPhone;
 import com.android.systemui.statusbar.phone.KeyguardBypassController;
 import com.android.systemui.statusbar.phone.ScrimController;
-import com.android.systemui.statusbar.phone.ShadeController;
-import com.android.systemui.statusbar.phone.shade.transition.ShadeTransitionController;
 import com.android.systemui.statusbar.policy.ConfigurationController;
 import com.android.systemui.statusbar.policy.DeviceProvisionedController;
 import com.android.systemui.statusbar.policy.ZenModeController;
@@ -113,6 +114,7 @@
     @Mock private SysuiColorExtractor mColorExtractor;
     @Mock private NotificationLockscreenUserManager mNotificationLockscreenUserManager;
     @Mock private MetricsLogger mMetricsLogger;
+    @Mock private DumpManager mDumpManager;
     @Mock private Resources mResources;
     @Mock(answer = Answers.RETURNS_SELF)
     private NotificationSwipeHelper.Builder mNotificationSwipeHelperBuilder;
@@ -148,7 +150,6 @@
         MockitoAnnotations.initMocks(this);
 
         when(mNotificationSwipeHelperBuilder.build()).thenReturn(mNotificationSwipeHelper);
-        when(mNotifPipelineFlags.isNewPipelineEnabled()).thenReturn(false);
 
         mController = new NotificationStackScrollLayoutController(
                 true,
@@ -164,9 +165,9 @@
                 mKeyguardMediaController,
                 mKeyguardBypassController,
                 mZenModeController,
-                mColorExtractor,
                 mNotificationLockscreenUserManager,
                 mMetricsLogger,
+                mDumpManager,
                 new FalsingCollectorFake(),
                 new FalsingManagerFake(),
                 mResources,
@@ -176,15 +177,12 @@
                 mLegacyGroupManager,
                 mLegacyGroupManager,
                 mSilentHeaderController,
-                mNotifPipelineFlags,
                 mNotifPipeline,
                 mNotifCollection,
                 mEntryManager,
                 mLockscreenShadeTransitionController,
                 mShadeTransitionController,
-                mIStatusBarService,
                 mUiEventLogger,
-                mLayoutInflater,
                 mRemoteInputManager,
                 mVisualStabilityManager,
                 mShadeController,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java
index b83743c..37a48937 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java
@@ -59,6 +59,7 @@
 import com.android.systemui.R;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.dump.DumpManager;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.statusbar.EmptyShadeView;
 import com.android.systemui.statusbar.NotificationShelf;
 import com.android.systemui.statusbar.NotificationShelfController;
@@ -72,7 +73,6 @@
 import com.android.systemui.statusbar.notification.row.FooterView;
 import com.android.systemui.statusbar.phone.CentralSurfaces;
 import com.android.systemui.statusbar.phone.KeyguardBypassController;
-import com.android.systemui.statusbar.phone.ShadeController;
 import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
 import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController;
 
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt
index 275dbfd..8fd6842 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/StackScrollAlgorithmTest.kt
@@ -15,6 +15,7 @@
 import com.google.common.truth.Truth.assertThat
 import junit.framework.Assert.assertFalse
 import junit.framework.Assert.assertTrue
+import junit.framework.Assert.assertEquals
 import org.junit.Before
 import org.junit.Test
 import org.mockito.Mockito.mock
@@ -164,4 +165,178 @@
         stackScrollAlgorithm.updateViewWithShelf(expandableView, expandableViewState, shelfStart)
         assertFalse(expandableViewState.hidden)
     }
+
+    @Test
+    fun maybeUpdateHeadsUpIsVisible_endVisible_true() {
+        val expandableViewState = ExpandableViewState()
+        expandableViewState.headsUpIsVisible = false
+
+        stackScrollAlgorithm.maybeUpdateHeadsUpIsVisible(expandableViewState,
+                /* isShadeExpanded= */ true,
+                /* mustStayOnScreen= */ true,
+                /* isViewEndVisible= */ true,
+                /* viewEnd= */ 0f,
+                /* maxHunY= */ 10f)
+
+        assertTrue(expandableViewState.headsUpIsVisible)
+    }
+
+    @Test
+    fun maybeUpdateHeadsUpIsVisible_endHidden_false() {
+        val expandableViewState = ExpandableViewState()
+        expandableViewState.headsUpIsVisible = true
+
+        stackScrollAlgorithm.maybeUpdateHeadsUpIsVisible(expandableViewState,
+                /* isShadeExpanded= */ true,
+                /* mustStayOnScreen= */ true,
+                /* isViewEndVisible= */ true,
+                /* viewEnd= */ 10f,
+                /* maxHunY= */ 0f)
+
+        assertFalse(expandableViewState.headsUpIsVisible)
+    }
+
+    @Test
+    fun maybeUpdateHeadsUpIsVisible_shadeClosed_noUpdate() {
+        val expandableViewState = ExpandableViewState()
+        expandableViewState.headsUpIsVisible = true
+
+        stackScrollAlgorithm.maybeUpdateHeadsUpIsVisible(expandableViewState,
+                /* isShadeExpanded= */ false,
+                /* mustStayOnScreen= */ true,
+                /* isViewEndVisible= */ true,
+                /* viewEnd= */ 10f,
+                /* maxHunY= */ 1f)
+
+        assertTrue(expandableViewState.headsUpIsVisible)
+    }
+
+    @Test
+    fun maybeUpdateHeadsUpIsVisible_notHUN_noUpdate() {
+        val expandableViewState = ExpandableViewState()
+        expandableViewState.headsUpIsVisible = true
+
+        stackScrollAlgorithm.maybeUpdateHeadsUpIsVisible(expandableViewState,
+                /* isShadeExpanded= */ true,
+                /* mustStayOnScreen= */ false,
+                /* isViewEndVisible= */ true,
+                /* viewEnd= */ 10f,
+                /* maxHunY= */ 1f)
+
+        assertTrue(expandableViewState.headsUpIsVisible)
+    }
+
+    @Test
+    fun maybeUpdateHeadsUpIsVisible_topHidden_noUpdate() {
+        val expandableViewState = ExpandableViewState()
+        expandableViewState.headsUpIsVisible = true
+
+        stackScrollAlgorithm.maybeUpdateHeadsUpIsVisible(expandableViewState,
+                /* isShadeExpanded= */ true,
+                /* mustStayOnScreen= */ true,
+                /* isViewEndVisible= */ false,
+                /* viewEnd= */ 10f,
+                /* maxHunY= */ 1f)
+
+        assertTrue(expandableViewState.headsUpIsVisible)
+    }
+
+    @Test
+    fun clampHunToTop_viewYGreaterThanQqs_viewYUnchanged() {
+        val expandableViewState = ExpandableViewState()
+        expandableViewState.yTranslation = 50f
+
+        stackScrollAlgorithm.clampHunToTop(/* quickQsOffsetHeight= */ 10f,
+                /* stackTranslation= */ 0f,
+                /* collapsedHeight= */ 1f, expandableViewState)
+
+        // qqs (10 + 0) < viewY (50)
+        assertEquals(50f, expandableViewState.yTranslation)
+    }
+
+    @Test
+    fun clampHunToTop_viewYLessThanQqs_viewYChanged() {
+        val expandableViewState = ExpandableViewState()
+        expandableViewState.yTranslation = -10f
+
+        stackScrollAlgorithm.clampHunToTop(/* quickQsOffsetHeight= */ 10f,
+                /* stackTranslation= */ 0f,
+                /* collapsedHeight= */ 1f, expandableViewState)
+
+        // qqs (10 + 0) > viewY (-10)
+        assertEquals(10f, expandableViewState.yTranslation)
+    }
+
+
+    @Test
+    fun clampHunToTop_viewYFarAboveVisibleStack_heightCollapsed() {
+        val expandableViewState = ExpandableViewState()
+        expandableViewState.height = 20
+        expandableViewState.yTranslation = -100f
+
+        stackScrollAlgorithm.clampHunToTop(/* quickQsOffsetHeight= */ 10f,
+                /* stackTranslation= */ 0f,
+                /* collapsedHeight= */ 10f, expandableViewState)
+
+        // newTranslation = max(10, -100) = 10
+        // distToRealY = 10 - (-100f) = 110
+        // height = max(20 - 110, 10f)
+        assertEquals(10, expandableViewState.height)
+    }
+
+    @Test
+    fun clampHunToTop_viewYNearVisibleStack_heightTallerThanCollapsed() {
+        val expandableViewState = ExpandableViewState()
+        expandableViewState.height = 20
+        expandableViewState.yTranslation = 5f
+
+        stackScrollAlgorithm.clampHunToTop(/* quickQsOffsetHeight= */ 10f,
+                /* stackTranslation= */ 0f,
+                /* collapsedHeight= */ 10f, expandableViewState)
+
+        // newTranslation = max(10, 5) = 10
+        // distToRealY = 10 - 5 = 5
+        // height = max(20 - 5, 10) = 15
+        assertEquals(15, expandableViewState.height)
+    }
+
+    @Test
+    fun computeCornerRoundnessForPinnedHun_stackBelowScreen_round() {
+        val currentRoundness = stackScrollAlgorithm.computeCornerRoundnessForPinnedHun(
+                /* hostViewHeight= */ 100f,
+                /* stackY= */ 110f,
+                /* viewMaxHeight= */ 20f,
+                /* originalCornerRoundness= */ 0f)
+        assertEquals(1f, currentRoundness)
+    }
+
+    @Test
+    fun computeCornerRoundnessForPinnedHun_stackAboveScreenBelowPinPoint_halfRound() {
+        val currentRoundness = stackScrollAlgorithm.computeCornerRoundnessForPinnedHun(
+                /* hostViewHeight= */ 100f,
+                /* stackY= */ 90f,
+                /* viewMaxHeight= */ 20f,
+                /* originalCornerRoundness= */ 0f)
+        assertEquals(0.5f, currentRoundness)
+    }
+
+    @Test
+    fun computeCornerRoundnessForPinnedHun_stackAbovePinPoint_notRound() {
+        val currentRoundness = stackScrollAlgorithm.computeCornerRoundnessForPinnedHun(
+                /* hostViewHeight= */ 100f,
+                /* stackY= */ 0f,
+                /* viewMaxHeight= */ 20f,
+                /* originalCornerRoundness= */ 0f)
+        assertEquals(0f, currentRoundness)
+    }
+
+    @Test
+    fun computeCornerRoundnessForPinnedHun_originallyRoundAndStackAbovePinPoint_round() {
+        val currentRoundness = stackScrollAlgorithm.computeCornerRoundnessForPinnedHun(
+                /* hostViewHeight= */ 100f,
+                /* stackY= */ 0f,
+                /* viewMaxHeight= */ 20f,
+                /* originalCornerRoundness= */ 1f)
+        assertEquals(1f, currentRoundness)
+    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java
index 371119c..4ccbc6d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java
@@ -490,7 +490,7 @@
         mAutoTileManager.init();
         when(mAutoAddTracker.isAdded(TEST_CUSTOM_SAFETY_SPEC)).thenReturn(true);
         mAutoTileManager.mSafetyCallback.onSafetyCenterEnableChanged(false);
-        verify(mQsTileHost, times(1)).removeTile(safetyComponent);
+        verify(mQsTileHost, times(1)).removeTile(TEST_CUSTOM_SAFETY_SPEC);
     }
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/BiometricsUnlockControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/BiometricsUnlockControllerTest.java
index e5b6286..d2680eb5 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/BiometricsUnlockControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/BiometricsUnlockControllerTest.java
@@ -49,6 +49,7 @@
 import com.android.systemui.keyguard.WakefulnessLifecycle;
 import com.android.systemui.log.SessionTracker;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.statusbar.NotificationMediaManager;
 import com.android.systemui.statusbar.NotificationShadeWindowController;
 import com.android.systemui.statusbar.VibratorHelper;
@@ -131,6 +132,7 @@
         when(mKeyguardBypassController.onBiometricAuthenticated(any(), anyBoolean()))
                 .thenReturn(true);
         when(mAuthController.isUdfpsFingerDown()).thenReturn(false);
+        when(mVibratorHelper.hasVibrator()).thenReturn(true);
         mDependency.injectTestDependency(NotificationMediaManager.class, mMediaManager);
         mBiometricUnlockController = new BiometricUnlockController(mDozeScrimController,
                 mKeyguardViewMediator, mScrimController, mShadeController,
@@ -423,4 +425,35 @@
         verify(mHandler).post(captor.capture());
         captor.getValue().run();
     }
+
+    @Test
+    public void onFPFailureNoHaptics_notDeviceInteractive_showBouncer() {
+        // GIVEN no vibrator and the screen is off
+        when(mVibratorHelper.hasVibrator()).thenReturn(false);
+        when(mUpdateMonitor.isDeviceInteractive()).thenReturn(false);
+        when(mUpdateMonitor.isDreaming()).thenReturn(false);
+
+        // WHEN FP fails
+        mBiometricUnlockController.onBiometricAuthFailed(BiometricSourceType.FINGERPRINT);
+
+        // after device is finished waking up
+        mBiometricUnlockController.mWakefulnessObserver.onFinishedWakingUp();
+
+        // THEN show the bouncer
+        verify(mStatusBarKeyguardViewManager).showBouncer(true);
+    }
+
+    @Test
+    public void onFPFailureNoHaptics_dreaming_showBouncer() {
+        // GIVEN no vibrator and device is dreaming
+        when(mVibratorHelper.hasVibrator()).thenReturn(false);
+        when(mUpdateMonitor.isDeviceInteractive()).thenReturn(true);
+        when(mUpdateMonitor.isDreaming()).thenReturn(true);
+
+        // WHEN FP fails
+        mBiometricUnlockController.onBiometricAuthFailed(BiometricSourceType.FINGERPRINT);
+
+        // THEN show the bouncer
+        verify(mStatusBarKeyguardViewManager).showBouncer(true);
+    }
 }
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 9bfb2c4..57fb976 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
@@ -22,24 +22,29 @@
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
 import static org.mockito.Mockito.when;
 
 import android.app.StatusBarManager;
 import android.os.PowerManager;
 import android.os.Vibrator;
 import android.testing.AndroidTestingRunner;
+import android.view.InsetsVisibilities;
 
 import androidx.test.filters.SmallTest;
 
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.testing.FakeMetricsLogger;
+import com.android.internal.statusbar.LetterboxDetails;
+import com.android.internal.view.AppearanceRegion;
 import com.android.keyguard.KeyguardUpdateMonitor;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.assist.AssistManager;
 import com.android.systemui.keyguard.WakefulnessLifecycle;
+import com.android.systemui.shade.NotificationPanelViewController;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.DisableFlagsLogger;
-import com.android.systemui.statusbar.StatusBarStateControllerImpl;
 import com.android.systemui.statusbar.VibratorHelper;
 import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
 import com.android.systemui.statusbar.policy.DeviceProvisionedController;
@@ -58,6 +63,7 @@
 @SmallTest
 @RunWith(AndroidTestingRunner.class)
 public class CentralSurfacesCommandQueueCallbacksTest extends SysuiTestCase {
+
     @Mock private CentralSurfaces mCentralSurfaces;
     @Mock private ShadeController mShadeController;
     @Mock private CommandQueue mCommandQueue;
@@ -72,14 +78,12 @@
     @Mock private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
     @Mock private AssistManager mAssistManager;
     @Mock private DozeServiceHost mDozeServiceHost;
-    @Mock private StatusBarStateControllerImpl mStatusBarStateController;
-    @Mock private NotificationShadeWindowView mNotificationShadeWindowView;
     @Mock private NotificationStackScrollLayoutController mNotificationStackScrollLayoutController;
     @Mock private PowerManager mPowerManager;
     @Mock private VibratorHelper mVibratorHelper;
     @Mock private Vibrator mVibrator;
-    @Mock private LightBarController mLightBarController;
     @Mock private StatusBarHideIconsForBouncerManager mStatusBarHideIconsForBouncerManager;
+    @Mock private SystemBarAttributesListener mSystemBarAttributesListener;
 
     CentralSurfacesCommandQueueCallbacks mSbcqCallbacks;
 
@@ -104,16 +108,14 @@
                 mStatusBarKeyguardViewManager,
                 mAssistManager,
                 mDozeServiceHost,
-                mStatusBarStateController,
-                mNotificationShadeWindowView,
                 mNotificationStackScrollLayoutController,
                 mStatusBarHideIconsForBouncerManager,
                 mPowerManager,
                 mVibratorHelper,
                 Optional.of(mVibrator),
-                mLightBarController,
                 new DisableFlagsLogger(),
-                DEFAULT_DISPLAY);
+                DEFAULT_DISPLAY,
+                mSystemBarAttributesListener);
 
         when(mDeviceProvisionedController.isCurrentUserSetup()).thenReturn(true);
         when(mRemoteInputQuickSettingsDisabler.adjustDisableFlags(anyInt()))
@@ -168,5 +170,59 @@
         verify(mDozeServiceHost).setAlwaysOnSuppressed(false);
     }
 
+    @Test
+    public void onSystemBarAttributesChanged_forwardsToSysBarAttrsListener() {
+        int displayId = DEFAULT_DISPLAY;
+        int appearance = 123;
+        AppearanceRegion[] appearanceRegions = new AppearanceRegion[]{};
+        boolean navbarColorManagedByIme = true;
+        int behavior = 456;
+        InsetsVisibilities requestedVisibilities = new InsetsVisibilities();
+        String packageName = "test package name";
+        LetterboxDetails[] letterboxDetails = new LetterboxDetails[]{};
 
+        mSbcqCallbacks.onSystemBarAttributesChanged(
+                displayId,
+                appearance,
+                appearanceRegions,
+                navbarColorManagedByIme,
+                behavior,
+                requestedVisibilities,
+                packageName,
+                letterboxDetails);
+
+        verify(mSystemBarAttributesListener).onSystemBarAttributesChanged(
+                displayId,
+                appearance,
+                appearanceRegions,
+                navbarColorManagedByIme,
+                behavior,
+                requestedVisibilities,
+                packageName,
+                letterboxDetails
+        );
+    }
+
+    @Test
+    public void onSystemBarAttributesChanged_differentDisplayId_doesNotForwardToAttrsListener() {
+        int appearance = 123;
+        AppearanceRegion[] appearanceRegions = new AppearanceRegion[]{};
+        boolean navbarColorManagedByIme = true;
+        int behavior = 456;
+        InsetsVisibilities requestedVisibilities = new InsetsVisibilities();
+        String packageName = "test package name";
+        LetterboxDetails[] letterboxDetails = new LetterboxDetails[]{};
+
+        mSbcqCallbacks.onSystemBarAttributesChanged(
+                DEFAULT_DISPLAY + 1,
+                appearance,
+                appearanceRegions,
+                navbarColorManagedByIme,
+                behavior,
+                requestedVisibilities,
+                packageName,
+                letterboxDetails);
+
+        verifyZeroInteractions(mSystemBarAttributesListener);
+    }
 }
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 ef681a5..7b7f45a 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
@@ -19,6 +19,8 @@
 import static android.app.NotificationManager.IMPORTANCE_HIGH;
 import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_PEEK;
 
+import static com.google.common.truth.Truth.assertThat;
+
 import static junit.framework.Assert.assertFalse;
 import static junit.framework.Assert.assertTrue;
 import static junit.framework.TestCase.fail;
@@ -44,6 +46,7 @@
 import android.app.trust.TrustManager;
 import android.content.BroadcastReceiver;
 import android.content.ContentResolver;
+import android.content.Intent;
 import android.content.IntentFilter;
 import android.hardware.devicestate.DeviceStateManager;
 import android.hardware.display.AmbientDisplayConfiguration;
@@ -84,11 +87,11 @@
 import com.android.systemui.animation.ActivityLaunchAnimator;
 import com.android.systemui.assist.AssistManager;
 import com.android.systemui.broadcast.BroadcastDispatcher;
+import com.android.systemui.charging.WiredChargingRippleController;
 import com.android.systemui.classifier.FalsingCollectorFake;
 import com.android.systemui.classifier.FalsingManagerFake;
 import com.android.systemui.colorextraction.SysuiColorExtractor;
 import com.android.systemui.demomode.DemoModeController;
-import com.android.systemui.dreams.DreamOverlayStateController;
 import com.android.systemui.dump.DumpManager;
 import com.android.systemui.flags.FeatureFlags;
 import com.android.systemui.fragments.FragmentService;
@@ -102,6 +105,12 @@
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.recents.ScreenPinningRequest;
 import com.android.systemui.settings.brightness.BrightnessSliderController;
+import com.android.systemui.shade.NotificationPanelView;
+import com.android.systemui.shade.NotificationPanelViewController;
+import com.android.systemui.shade.NotificationShadeWindowView;
+import com.android.systemui.shade.NotificationShadeWindowViewController;
+import com.android.systemui.shade.ShadeController;
+import com.android.systemui.shade.ShadeControllerImpl;
 import com.android.systemui.shared.plugins.PluginManager;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.KeyguardIndicationController;
@@ -112,17 +121,13 @@
 import com.android.systemui.statusbar.NotificationRemoteInputManager;
 import com.android.systemui.statusbar.NotificationShadeDepthController;
 import com.android.systemui.statusbar.NotificationShadeWindowController;
-import com.android.systemui.statusbar.NotificationViewHierarchyManager;
 import com.android.systemui.statusbar.OperatorNameViewController;
 import com.android.systemui.statusbar.PulseExpansionHandler;
 import com.android.systemui.statusbar.StatusBarState;
 import com.android.systemui.statusbar.StatusBarStateControllerImpl;
-import com.android.systemui.statusbar.charging.WiredChargingRippleController;
-import com.android.systemui.statusbar.connectivity.NetworkController;
 import com.android.systemui.statusbar.notification.DynamicPrivacyController;
 import com.android.systemui.statusbar.notification.NotifPipelineFlags;
 import com.android.systemui.statusbar.notification.NotificationEntryManager;
-import com.android.systemui.statusbar.notification.NotificationFilter;
 import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
 import com.android.systemui.statusbar.notification.collection.NotifLiveDataStore;
 import com.android.systemui.statusbar.notification.collection.NotifPipeline;
@@ -213,7 +218,6 @@
     @Mock private BatteryController mBatteryController;
     @Mock private DeviceProvisionedController mDeviceProvisionedController;
     @Mock private StatusBarNotificationPresenter mNotificationPresenter;
-    @Mock private NotificationFilter mNotificationFilter;
     @Mock private AmbientDisplayConfiguration mAmbientDisplayConfiguration;
     @Mock private NotificationLogger.ExpansionStateLogger mExpansionStateLogger;
     @Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@@ -235,7 +239,6 @@
     @Mock private AutoHideController mAutoHideController;
     @Mock private StatusBarWindowController mStatusBarWindowController;
     @Mock private StatusBarWindowStateController mStatusBarWindowStateController;
-    @Mock private NotificationViewHierarchyManager mNotificationViewHierarchyManager;
     @Mock private UserSwitcherController mUserSwitcherController;
     @Mock private Bubbles mBubbles;
     @Mock private NotificationShadeWindowController mNotificationShadeWindowController;
@@ -276,11 +279,9 @@
     @Mock private OperatorNameViewController mOperatorNameViewController;
     @Mock private OperatorNameViewController.Factory mOperatorNameViewControllerFactory;
     @Mock private ActivityLaunchAnimator mActivityLaunchAnimator;
-    @Mock private NotifPipelineFlags mNotifPipelineFlags;
     @Mock private NotifLiveDataStore mNotifLiveDataStore;
     @Mock private InteractionJankMonitor mJankMonitor;
     @Mock private DeviceStateManager mDeviceStateManager;
-    @Mock private DreamOverlayStateController mDreamOverlayStateController;
     @Mock private WiredChargingRippleController mWiredChargingRippleController;
     private ShadeController mShadeController;
     private final FakeSystemClock mFakeSystemClock = new FakeSystemClock();
@@ -292,7 +293,6 @@
     @Before
     public void setup() throws Exception {
         MockitoAnnotations.initMocks(this);
-        mDependency.injectTestDependency(NotificationFilter.class, mNotificationFilter);
 
         IPowerManager powerManagerService = mock(IPowerManager.class);
         IThermalService thermalService = mock(IThermalService.class);
@@ -302,8 +302,12 @@
         mNotificationInterruptStateProvider =
                 new TestableNotificationInterruptStateProviderImpl(mContext.getContentResolver(),
                         mPowerManager,
-                        mDreamManager, mAmbientDisplayConfiguration, mNotificationFilter,
-                        mStatusBarStateController, mBatteryController, mHeadsUpManager,
+                        mDreamManager,
+                        mAmbientDisplayConfiguration,
+                        mStatusBarStateController,
+                        mKeyguardStateController,
+                        mBatteryController,
+                        mHeadsUpManager,
                         mock(NotificationInterruptLogger.class),
                         new Handler(TestableLooper.get(this).getLooper()),
                         mock(NotifPipelineFlags.class),
@@ -316,10 +320,8 @@
         NotificationLogger notificationLogger = new NotificationLogger(
                 mNotificationListener,
                 mUiBgExecutor,
-                mNotifPipelineFlags,
                 mNotifLiveDataStore,
                 mVisibilityProvider,
-                mock(NotificationEntryManager.class),
                 mock(NotifPipeline.class),
                 mStatusBarStateController,
                 mExpansionStateLogger,
@@ -401,7 +403,6 @@
                 mNotificationGutsManager,
                 notificationLogger,
                 mNotificationInterruptStateProvider,
-                mNotificationViewHierarchyManager,
                 new PanelExpansionStateManager(),
                 mKeyguardViewMediator,
                 new DisplayMetrics(),
@@ -463,10 +464,8 @@
                 mWallpaperManager,
                 Optional.of(mStartingSurface),
                 mActivityLaunchAnimator,
-                mNotifPipelineFlags,
                 mJankMonitor,
                 mDeviceStateManager,
-                mDreamOverlayStateController,
                 mWiredChargingRippleController, mDreamManager);
         when(mKeyguardViewMediator.registerCentralSurfaces(
                 any(CentralSurfacesImpl.class),
@@ -651,7 +650,6 @@
     public void testShouldHeadsUp_nonSuppressedGroupSummary() throws Exception {
         when(mPowerManager.isScreenOn()).thenReturn(true);
         when(mHeadsUpManager.isSnoozed(anyString())).thenReturn(false);
-        when(mNotificationFilter.shouldFilterOut(any())).thenReturn(false);
         when(mDreamManager.isDreaming()).thenReturn(false);
 
         Notification n = new Notification.Builder(getContext(), "a")
@@ -675,7 +673,6 @@
     public void testShouldHeadsUp_suppressedGroupSummary() throws Exception {
         when(mPowerManager.isScreenOn()).thenReturn(true);
         when(mHeadsUpManager.isSnoozed(anyString())).thenReturn(false);
-        when(mNotificationFilter.shouldFilterOut(any())).thenReturn(false);
         when(mDreamManager.isDreaming()).thenReturn(false);
 
         Notification n = new Notification.Builder(getContext(), "a")
@@ -699,7 +696,6 @@
     public void testShouldHeadsUp_suppressedHeadsUp() throws Exception {
         when(mPowerManager.isScreenOn()).thenReturn(true);
         when(mHeadsUpManager.isSnoozed(anyString())).thenReturn(false);
-        when(mNotificationFilter.shouldFilterOut(any())).thenReturn(false);
         when(mDreamManager.isDreaming()).thenReturn(false);
 
         Notification n = new Notification.Builder(getContext(), "a").build();
@@ -721,7 +717,6 @@
     public void testShouldHeadsUp_noSuppressedHeadsUp() throws Exception {
         when(mPowerManager.isScreenOn()).thenReturn(true);
         when(mHeadsUpManager.isSnoozed(anyString())).thenReturn(false);
-        when(mNotificationFilter.shouldFilterOut(any())).thenReturn(false);
         when(mDreamManager.isDreaming()).thenReturn(false);
 
         Notification n = new Notification.Builder(getContext(), "a").build();
@@ -837,7 +832,6 @@
         mCentralSurfaces.showKeyguardImpl();
 
         // Starting a pulse should change the scrim controller to the pulsing state
-        when(mNotificationPanelViewController.isLaunchTransitionRunning()).thenReturn(true);
         when(mNotificationPanelViewController.isLaunchingAffordanceWithPreview()).thenReturn(true);
         mCentralSurfaces.updateScrimController();
         verify(mScrimController).transitionTo(eq(ScrimState.UNLOCKED), any());
@@ -874,7 +868,6 @@
         mCentralSurfaces.showKeyguardImpl();
 
         // Starting a pulse should change the scrim controller to the pulsing state
-        when(mNotificationPanelViewController.isLaunchTransitionRunning()).thenReturn(true);
         when(mNotificationPanelViewController.isLaunchingAffordanceWithPreview()).thenReturn(false);
         mCentralSurfaces.updateScrimController();
         verify(mScrimController).transitionTo(eq(ScrimState.KEYGUARD));
@@ -972,6 +965,7 @@
 
     @Test
     public void deviceStateChange_unfolded_shadeOpen_setsLeaveOpenOnKeyguardHide() {
+        when(mKeyguardStateController.isShowing()).thenReturn(false);
         setFoldedStates(FOLD_STATE_FOLDED);
         setGoToSleepStates(FOLD_STATE_FOLDED);
         when(mNotificationPanelViewController.isFullyExpanded()).thenReturn(true);
@@ -982,6 +976,19 @@
     }
 
     @Test
+    public void deviceStateChange_unfolded_shadeOpen_onKeyguard_doesNotSetLeaveOpenOnKeyguardHide() {
+        when(mKeyguardStateController.isShowing()).thenReturn(true);
+        setFoldedStates(FOLD_STATE_FOLDED);
+        setGoToSleepStates(FOLD_STATE_FOLDED);
+        when(mNotificationPanelViewController.isFullyExpanded()).thenReturn(true);
+
+        setDeviceState(FOLD_STATE_UNFOLDED);
+
+        verify(mStatusBarStateController, never()).setLeaveOpenOnKeyguardHide(true);
+    }
+
+
+    @Test
     public void deviceStateChange_unfolded_shadeClose_doesNotSetLeaveOpenOnKeyguardHide() {
         setFoldedStates(FOLD_STATE_FOLDED);
         setGoToSleepStates(FOLD_STATE_FOLDED);
@@ -992,6 +999,22 @@
         verify(mStatusBarStateController, never()).setLeaveOpenOnKeyguardHide(true);
     }
 
+    @Test
+    public void startActivityDismissingKeyguard_isShowingandIsOccluded() {
+        when(mStatusBarKeyguardViewManager.isShowing()).thenReturn(true);
+        when(mStatusBarKeyguardViewManager.isOccluded()).thenReturn(true);
+        mCentralSurfaces.startActivityDismissingKeyguard(
+                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));
+        assertThat(onDismissActionCaptor.getValue().onDismiss()).isFalse();
+    }
+
     private void setDeviceState(int state) {
         ArgumentCaptor<DeviceStateManager.DeviceStateCallback> callbackCaptor =
                 ArgumentCaptor.forClass(DeviceStateManager.DeviceStateCallback.class);
@@ -1019,17 +1042,28 @@
                 PowerManager powerManager,
                 IDreamManager dreamManager,
                 AmbientDisplayConfiguration ambientDisplayConfiguration,
-                NotificationFilter filter,
                 StatusBarStateController controller,
+                KeyguardStateController keyguardStateController,
                 BatteryController batteryController,
                 HeadsUpManager headsUpManager,
                 NotificationInterruptLogger logger,
                 Handler mainHandler,
                 NotifPipelineFlags flags,
                 KeyguardNotificationVisibilityProvider keyguardNotificationVisibilityProvider) {
-            super(contentResolver, powerManager, dreamManager, ambientDisplayConfiguration, filter,
-                    batteryController, controller, headsUpManager, logger, mainHandler,
-                    flags, keyguardNotificationVisibilityProvider);
+            super(
+                    contentResolver,
+                    powerManager,
+                    dreamManager,
+                    ambientDisplayConfiguration,
+                    batteryController,
+                    controller,
+                    keyguardStateController,
+                    headsUpManager,
+                    logger,
+                    mainHandler,
+                    flags,
+                    keyguardNotificationVisibilityProvider
+            );
             mUseHeadsUp = true;
         }
     }
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 26ac70c..5c9871a 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,6 +41,8 @@
 import com.android.systemui.doze.DozeLog;
 import com.android.systemui.keyguard.KeyguardViewMediator;
 import com.android.systemui.keyguard.WakefulnessLifecycle;
+import com.android.systemui.shade.NotificationPanelViewController;
+import com.android.systemui.shade.NotificationShadeWindowViewController;
 import com.android.systemui.statusbar.NotificationShadeWindowController;
 import com.android.systemui.statusbar.PulseExpansionHandler;
 import com.android.systemui.statusbar.StatusBarState;
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 ed22cd3..103b7b42 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
@@ -34,6 +34,7 @@
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.plugins.DarkIconDispatcher;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.shade.NotificationPanelViewController;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.HeadsUpStatusBarView;
 import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaTest.kt
index 31465f4..3440fa5 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaTest.kt
@@ -12,12 +12,12 @@
 import com.android.systemui.statusbar.policy.FlashlightController
 import com.android.systemui.statusbar.policy.KeyguardStateController
 import com.android.systemui.tuner.TunerService
+import java.util.concurrent.Executor
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.mockito.Mock
 import org.mockito.MockitoAnnotations
-import java.util.concurrent.Executor
 
 @SmallTest
 @RunWith(AndroidTestingRunner::class)
@@ -42,7 +42,6 @@
 
         mKeyguardBottomArea = LayoutInflater.from(mContext).inflate(
                 R.layout.keyguard_bottom_area, null, false) as KeyguardBottomAreaView
-        mKeyguardBottomArea.setCentralSurfaces(mCentralSurfaces)
     }
 
     @Test
@@ -51,6 +50,5 @@
                 null, false) as KeyguardBottomAreaView
 
         other.initFrom(mKeyguardBottomArea)
-        other.launchVoiceAssist()
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java
index 39021d8..60a3d95 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java
@@ -230,6 +230,15 @@
     }
 
     @Test
+    public void show_notifiesKeyguardViewController() {
+        mBouncer.ensureView();
+
+        mBouncer.show(/* resetSecuritySelection= */ false);
+
+        verify(mKeyguardHostViewController).onBouncerVisibilityChanged(View.VISIBLE);
+    }
+
+    @Test
     public void testHide_notifiesFalsingManager() {
         mBouncer.hide(false);
         verify(mFalsingCollector).onBouncerHidden();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java
index ec20271..ed3f710 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java
@@ -266,7 +266,6 @@
     @Test
     public void clockPositionedDependingOnMarginInSplitShade() {
         setSplitShadeTopMargin(400);
-        mClockPositionAlgorithm.loadDimens(mResources);
         givenLockScreen();
         mIsSplitShade = true;
         // WHEN the position algorithm is run
@@ -294,7 +293,6 @@
     public void notifPaddingAccountsForMultiUserSwitcherInSplitShade() {
         setSplitShadeTopMargin(100);
         mUserSwitchHeight = 150;
-        mClockPositionAlgorithm.loadDimens(mResources);
         givenLockScreen();
         mIsSplitShade = true;
         // WHEN the position algorithm is run
@@ -307,7 +305,6 @@
     public void clockDoesntAccountForMultiUserSwitcherInSplitShade() {
         setSplitShadeTopMargin(100);
         mUserSwitchHeight = 150;
-        mClockPositionAlgorithm.loadDimens(mResources);
         givenLockScreen();
         mIsSplitShade = true;
         // WHEN the position algorithm is run
@@ -382,11 +379,25 @@
         mQsExpansion = 1;
         // WHEN the clock position algorithm is run
         positionClock();
-        // THEN the clock Y position is the middle of the screen (SCREEN_HEIGHT / 2).
+        // THEN the clock is transparent.
         assertThat(mClockPosition.clockAlpha).isEqualTo(TRANSPARENT);
     }
 
     @Test
+    public void clockNotHiddenWhenQsIsExpandedInSplitShade() {
+        // GIVEN on the split lock screen with QS expansion
+        givenLockScreen();
+        mIsSplitShade = true;
+        setSplitShadeTopMargin(100);
+        mQsExpansion = 1;
+
+        // WHEN the clock position algorithm is run
+        positionClock();
+
+        assertThat(mClockPosition.clockAlpha).isEqualTo(1);
+    }
+
+    @Test
     public void clockPositionMinimizesBurnInMovementToAvoidUdfpsOnAOD() {
         // GIVEN a center aligned clock
         mClockTopAligned = false;
@@ -524,6 +535,7 @@
     private void setSplitShadeTopMargin(int value) {
         when(mResources.getDimensionPixelSize(R.dimen.keyguard_split_shade_top_margin))
                 .thenReturn(value);
+        mClockPositionAlgorithm.loadDimens(mResources);
     }
 
     private void givenHighestBurnInOffset() {
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 4e1a708..11e502f 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
@@ -49,6 +49,7 @@
 import com.android.systemui.battery.BatteryMeterViewController;
 import com.android.systemui.flags.FeatureFlags;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.shade.NotificationPanelViewController;
 import com.android.systemui.statusbar.SysuiStatusBarStateController;
 import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler;
 import com.android.systemui.statusbar.phone.userswitcher.StatusBarUserInfoTracker;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LargeScreenShadeHeaderControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LargeScreenShadeHeaderControllerTest.kt
deleted file mode 100644
index 8066401..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LargeScreenShadeHeaderControllerTest.kt
+++ /dev/null
@@ -1,196 +0,0 @@
-package com.android.systemui.statusbar.phone
-
-import android.app.StatusBarManager
-import android.content.Context
-import android.content.res.TypedArray
-import android.testing.AndroidTestingRunner
-import android.util.TypedValue.COMPLEX_UNIT_PX
-import android.view.View
-import android.widget.TextView
-import androidx.test.filters.SmallTest
-import com.android.systemui.R
-import com.android.systemui.SysuiTestCase
-import com.android.systemui.animation.ShadeInterpolation
-import com.android.systemui.battery.BatteryMeterView
-import com.android.systemui.battery.BatteryMeterViewController
-import com.android.systemui.dump.DumpManager
-import com.android.systemui.flags.FeatureFlags
-import com.android.systemui.flags.Flags
-import com.android.systemui.qs.HeaderPrivacyIconsController
-import com.android.systemui.qs.carrier.QSCarrierGroup
-import com.android.systemui.qs.carrier.QSCarrierGroupController
-import com.android.systemui.statusbar.policy.FakeConfigurationController
-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.ArgumentMatchers.any
-import org.mockito.ArgumentMatchers.anyInt
-import org.mockito.Mock
-import org.mockito.Mockito.clearInvocations
-import org.mockito.Mockito.verify
-import org.mockito.junit.MockitoJUnit
-import org.mockito.Mockito.`when` as whenever
-
-@SmallTest
-@RunWith(AndroidTestingRunner::class)
-class LargeScreenShadeHeaderControllerTest : SysuiTestCase() {
-
-    @Mock private lateinit var view: View
-    @Mock private lateinit var statusIcons: StatusIconContainer
-    @Mock private lateinit var statusBarIconController: StatusBarIconController
-    @Mock private lateinit var qsCarrierGroupController: QSCarrierGroupController
-    @Mock private lateinit var qsCarrierGroupControllerBuilder: QSCarrierGroupController.Builder
-    @Mock private lateinit var featureFlags: FeatureFlags
-    @Mock private lateinit var clock: TextView
-    @Mock private lateinit var date: TextView
-    @Mock private lateinit var carrierGroup: QSCarrierGroup
-    @Mock private lateinit var batteryMeterView: BatteryMeterView
-    @Mock private lateinit var batteryMeterViewController: BatteryMeterViewController
-    @Mock private lateinit var privacyIconsController: HeaderPrivacyIconsController
-    @Mock private lateinit var dumpManager: DumpManager
-
-    @Mock private lateinit var mockedContext: Context
-    @Mock private lateinit var typedArray: TypedArray
-
-    @JvmField @Rule val mockitoRule = MockitoJUnit.rule()
-    var viewVisibility = View.GONE
-
-    private lateinit var mLargeScreenShadeHeaderController: LargeScreenShadeHeaderController
-    private lateinit var carrierIconSlots: List<String>
-    private val configurationController = FakeConfigurationController()
-
-    @Before
-    fun setup() {
-        whenever<TextView>(view.findViewById(R.id.clock)).thenReturn(clock)
-        whenever(clock.context).thenReturn(mockedContext)
-        whenever(mockedContext.obtainStyledAttributes(anyInt(), any())).thenReturn(typedArray)
-        whenever<TextView>(view.findViewById(R.id.date)).thenReturn(date)
-        whenever(date.context).thenReturn(mockedContext)
-        whenever<QSCarrierGroup>(view.findViewById(R.id.carrier_group)).thenReturn(carrierGroup)
-        whenever<BatteryMeterView>(view.findViewById(R.id.batteryRemainingIcon))
-                .thenReturn(batteryMeterView)
-        whenever<StatusIconContainer>(view.findViewById(R.id.statusIcons)).thenReturn(statusIcons)
-        whenever(view.context).thenReturn(context)
-        whenever(statusIcons.context).thenReturn(context)
-        whenever(qsCarrierGroupControllerBuilder.setQSCarrierGroup(any()))
-                .thenReturn(qsCarrierGroupControllerBuilder)
-        whenever(qsCarrierGroupControllerBuilder.build()).thenReturn(qsCarrierGroupController)
-        whenever(view.setVisibility(anyInt())).then {
-            viewVisibility = it.arguments[0] as Int
-            null
-        }
-        whenever(view.visibility).thenAnswer { _ -> viewVisibility }
-        whenever(featureFlags.isEnabled(Flags.COMBINED_QS_HEADERS)).thenReturn(false)
-        mLargeScreenShadeHeaderController = LargeScreenShadeHeaderController(
-                view,
-                statusBarIconController,
-                privacyIconsController,
-                configurationController,
-                qsCarrierGroupControllerBuilder,
-                featureFlags,
-                batteryMeterViewController,
-                dumpManager
-        )
-        carrierIconSlots = listOf(
-                context.getString(com.android.internal.R.string.status_bar_mobile))
-    }
-
-    @Test
-    fun setVisible_onlyWhenActive() {
-        makeShadeVisible()
-        assertThat(viewVisibility).isEqualTo(View.VISIBLE)
-
-        mLargeScreenShadeHeaderController.active = false
-        assertThat(viewVisibility).isEqualTo(View.GONE)
-    }
-
-    @Test
-    fun updateListeners_registersWhenVisible() {
-        makeShadeVisible()
-        verify(qsCarrierGroupController).setListening(true)
-        verify(statusBarIconController).addIconGroup(any())
-    }
-
-    @Test
-    fun shadeExpandedFraction_updatesAlpha() {
-        makeShadeVisible()
-        mLargeScreenShadeHeaderController.shadeExpandedFraction = 0.5f
-        verify(view).setAlpha(ShadeInterpolation.getContentAlpha(0.5f))
-    }
-
-    @Test
-    fun singleCarrier_enablesCarrierIconsInStatusIcons() {
-        whenever(qsCarrierGroupController.isSingleCarrier).thenReturn(true)
-
-        makeShadeVisible()
-
-        verify(statusIcons).removeIgnoredSlots(carrierIconSlots)
-    }
-
-    @Test
-    fun dualCarrier_disablesCarrierIconsInStatusIcons() {
-        whenever(qsCarrierGroupController.isSingleCarrier).thenReturn(false)
-
-        makeShadeVisible()
-
-        verify(statusIcons).addIgnoredSlots(carrierIconSlots)
-    }
-
-    @Test
-    fun disableQS_notDisabled_visible() {
-        makeShadeVisible()
-        mLargeScreenShadeHeaderController.disable(0, 0, false)
-
-        assertThat(viewVisibility).isEqualTo(View.VISIBLE)
-    }
-
-    @Test
-    fun disableQS_disabled_gone() {
-        makeShadeVisible()
-        mLargeScreenShadeHeaderController.disable(0, StatusBarManager.DISABLE2_QUICK_SETTINGS,
-            false)
-
-        assertThat(viewVisibility).isEqualTo(View.GONE)
-    }
-
-    private fun makeShadeVisible() {
-        mLargeScreenShadeHeaderController.active = true
-        mLargeScreenShadeHeaderController.shadeExpanded = true
-    }
-
-    @Test
-    fun updateConfig_changesFontSize() {
-        val updatedTextPixelSize = 32
-        setReturnTextSize(updatedTextPixelSize)
-
-        configurationController.notifyDensityOrFontScaleChanged()
-
-        verify(clock).setTextSize(COMPLEX_UNIT_PX, updatedTextPixelSize.toFloat())
-        verify(date).setTextSize(COMPLEX_UNIT_PX, updatedTextPixelSize.toFloat())
-        verify(carrierGroup).updateTextAppearance(R.style.TextAppearance_QS_Status)
-    }
-
-    @Test
-    fun updateConfig_changesFontSizeMultipleTimes() {
-        val updatedTextPixelSize1 = 32
-        setReturnTextSize(updatedTextPixelSize1)
-        configurationController.notifyDensityOrFontScaleChanged()
-        verify(clock).setTextSize(COMPLEX_UNIT_PX, updatedTextPixelSize1.toFloat())
-        verify(date).setTextSize(COMPLEX_UNIT_PX, updatedTextPixelSize1.toFloat())
-        verify(carrierGroup).updateTextAppearance(R.style.TextAppearance_QS_Status)
-        clearInvocations(carrierGroup)
-
-        val updatedTextPixelSize2 = 42
-        setReturnTextSize(updatedTextPixelSize2)
-        configurationController.notifyDensityOrFontScaleChanged()
-        verify(clock).setTextSize(COMPLEX_UNIT_PX, updatedTextPixelSize2.toFloat())
-        verify(date).setTextSize(COMPLEX_UNIT_PX, updatedTextPixelSize2.toFloat())
-        verify(carrierGroup).updateTextAppearance(R.style.TextAppearance_QS_Status)
-    }
-
-    private fun setReturnTextSize(resultTextSize: Int) {
-        whenever(typedArray.getDimensionPixelSize(anyInt(), anyInt())).thenReturn(resultTextSize)
-    }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LetterboxAppearanceCalculatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LetterboxAppearanceCalculatorTest.kt
new file mode 100644
index 0000000..c0243dc
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LetterboxAppearanceCalculatorTest.kt
@@ -0,0 +1,228 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 android.graphics.Color
+import android.graphics.Rect
+import android.testing.AndroidTestingRunner
+import android.view.WindowInsetsController
+import android.view.WindowInsetsController.APPEARANCE_SEMI_TRANSPARENT_STATUS_BARS
+import androidx.test.filters.SmallTest
+import com.android.internal.statusbar.LetterboxDetails
+import com.android.internal.view.AppearanceRegion
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.dump.DumpManager
+import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentComponent
+import com.google.common.truth.Expect
+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.Mock
+import org.mockito.Mockito.`when` as whenever
+import org.mockito.MockitoAnnotations
+
+@RunWith(AndroidTestingRunner::class)
+@SmallTest
+class LetterboxAppearanceCalculatorTest : SysuiTestCase() {
+
+    companion object {
+        private const val DEFAULT_APPEARANCE = 0
+        private const val TEST_APPEARANCE = WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
+        private val TEST_APPEARANCE_REGION_BOUNDS = Rect(0, 0, 20, 100)
+        private val TEST_APPEARANCE_REGION =
+            AppearanceRegion(TEST_APPEARANCE, TEST_APPEARANCE_REGION_BOUNDS)
+        private val TEST_APPEARANCE_REGIONS = arrayOf(TEST_APPEARANCE_REGION)
+        private val TEST_WINDOW_BOUNDS = Rect(0, 0, 500, 500)
+    }
+
+    @get:Rule var expect = Expect.create()
+
+    @Mock private lateinit var lightBarController: LightBarController
+    @Mock private lateinit var statusBarBoundsProvider: StatusBarBoundsProvider
+    @Mock private lateinit var statusBarFragmentComponent: StatusBarFragmentComponent
+    @Mock private lateinit var dumpManager: DumpManager
+    @Mock private lateinit var letterboxBackgroundProvider: LetterboxBackgroundProvider
+
+    private lateinit var calculator: LetterboxAppearanceCalculator
+
+    @Before
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+        whenever(statusBarFragmentComponent.boundsProvider).thenReturn(statusBarBoundsProvider)
+        calculator =
+            LetterboxAppearanceCalculator(
+                lightBarController, dumpManager, letterboxBackgroundProvider)
+        calculator.onStatusBarViewInitialized(statusBarFragmentComponent)
+        whenever(letterboxBackgroundProvider.letterboxBackgroundColor).thenReturn(Color.BLACK)
+        whenever(letterboxBackgroundProvider.isLetterboxBackgroundMultiColored).thenReturn(false)
+    }
+
+    @Test
+    fun getLetterboxAppearance_overlapStartSide_returnsOriginalWithScrim() {
+        whenever(statusBarBoundsProvider.visibleStartSideBounds).thenReturn(Rect(0, 0, 100, 100))
+        whenever(statusBarBoundsProvider.visibleEndSideBounds).thenReturn(Rect(200, 0, 300, 100))
+        val letterbox = letterboxWithInnerBounds(Rect(50, 50, 150, 150))
+
+        val letterboxAppearance =
+            calculator.getLetterboxAppearance(
+                TEST_APPEARANCE, TEST_APPEARANCE_REGIONS, arrayOf(letterbox))
+
+        expect
+            .that(letterboxAppearance.appearance)
+            .isEqualTo(TEST_APPEARANCE or APPEARANCE_SEMI_TRANSPARENT_STATUS_BARS)
+        expect.that(letterboxAppearance.appearanceRegions).isEqualTo(TEST_APPEARANCE_REGIONS)
+    }
+
+    @Test
+    fun getLetterboxAppearance_overlapEndSide_returnsOriginalWithScrim() {
+        whenever(statusBarBoundsProvider.visibleStartSideBounds).thenReturn(Rect(0, 0, 100, 100))
+        whenever(statusBarBoundsProvider.visibleEndSideBounds).thenReturn(Rect(200, 0, 300, 100))
+        val letterbox = letterboxWithInnerBounds(Rect(150, 50, 250, 150))
+
+        val letterboxAppearance =
+            calculator.getLetterboxAppearance(
+                TEST_APPEARANCE, TEST_APPEARANCE_REGIONS, arrayOf(letterbox))
+
+        expect
+            .that(letterboxAppearance.appearance)
+            .isEqualTo(TEST_APPEARANCE or APPEARANCE_SEMI_TRANSPARENT_STATUS_BARS)
+        expect.that(letterboxAppearance.appearanceRegions).isEqualTo(TEST_APPEARANCE_REGIONS)
+    }
+
+    @Test
+    fun getLetterboxAppearance_noOverlap_BackgroundMultiColor_returnsAppearanceWithScrim() {
+        whenever(letterboxBackgroundProvider.isLetterboxBackgroundMultiColored).thenReturn(true)
+        whenever(statusBarBoundsProvider.visibleStartSideBounds).thenReturn(Rect(0, 0, 100, 100))
+        whenever(statusBarBoundsProvider.visibleEndSideBounds).thenReturn(Rect(200, 0, 300, 100))
+        val letterbox = letterboxWithInnerBounds(Rect(101, 0, 199, 100))
+
+        val letterboxAppearance =
+            calculator.getLetterboxAppearance(
+                TEST_APPEARANCE, TEST_APPEARANCE_REGIONS, arrayOf(letterbox))
+
+        expect
+                .that(letterboxAppearance.appearance)
+                .isEqualTo(TEST_APPEARANCE or APPEARANCE_SEMI_TRANSPARENT_STATUS_BARS)
+        expect.that(letterboxAppearance.appearanceRegions).isEqualTo(TEST_APPEARANCE_REGIONS)
+    }
+
+    @Test
+    fun getLetterboxAppearance_noOverlap_returnsAppearanceWithoutScrim() {
+        whenever(statusBarBoundsProvider.visibleStartSideBounds).thenReturn(Rect(0, 0, 100, 100))
+        whenever(statusBarBoundsProvider.visibleEndSideBounds).thenReturn(Rect(200, 0, 300, 100))
+        val letterbox = letterboxWithInnerBounds(Rect(101, 0, 199, 100))
+
+        val letterboxAppearance =
+            calculator.getLetterboxAppearance(
+                TEST_APPEARANCE, TEST_APPEARANCE_REGIONS, arrayOf(letterbox))
+
+        assertThat(letterboxAppearance.appearance).isEqualTo(TEST_APPEARANCE)
+    }
+
+    @Test
+    fun getLetterboxAppearance_letterboxContainsStartSide_returnsAppearanceWithoutScrim() {
+        whenever(statusBarBoundsProvider.visibleStartSideBounds).thenReturn(Rect(0, 0, 100, 100))
+        whenever(statusBarBoundsProvider.visibleEndSideBounds).thenReturn(Rect(200, 0, 300, 100))
+        val letterbox = letterboxWithInnerBounds(Rect(0, 0, 101, 101))
+
+        val letterboxAppearance =
+            calculator.getLetterboxAppearance(
+                TEST_APPEARANCE, TEST_APPEARANCE_REGIONS, arrayOf(letterbox))
+
+        assertThat(letterboxAppearance.appearance).isEqualTo(TEST_APPEARANCE)
+    }
+
+    @Test
+    fun getLetterboxAppearance_letterboxContainsEndSide_returnsAppearanceWithoutScrim() {
+        whenever(statusBarBoundsProvider.visibleStartSideBounds).thenReturn(Rect(0, 0, 100, 100))
+        whenever(statusBarBoundsProvider.visibleEndSideBounds).thenReturn(Rect(200, 0, 300, 100))
+        val letterbox = letterboxWithInnerBounds(Rect(199, 0, 301, 101))
+
+        val letterboxAppearance =
+            calculator.getLetterboxAppearance(
+                TEST_APPEARANCE, TEST_APPEARANCE_REGIONS, arrayOf(letterbox))
+
+        assertThat(letterboxAppearance.appearance).isEqualTo(TEST_APPEARANCE)
+    }
+
+    @Test
+    fun getLetterboxAppearance_letterboxContainsEntireStatusBar_returnsAppearanceWithoutScrim() {
+        whenever(statusBarBoundsProvider.visibleStartSideBounds).thenReturn(Rect(0, 0, 100, 100))
+        whenever(statusBarBoundsProvider.visibleEndSideBounds).thenReturn(Rect(200, 0, 300, 100))
+        val letterbox = letterboxWithInnerBounds(Rect(0, 0, 300, 100))
+
+        val letterboxAppearance =
+            calculator.getLetterboxAppearance(
+                TEST_APPEARANCE, TEST_APPEARANCE_REGIONS, arrayOf(letterbox))
+
+        assertThat(letterboxAppearance.appearance).isEqualTo(TEST_APPEARANCE)
+    }
+
+    @Test
+    fun getLetterboxAppearance_returnsAdaptedAppearanceRegions_basedOnLetterboxInnerBounds() {
+        whenever(statusBarBoundsProvider.visibleStartSideBounds).thenReturn(Rect(0, 0, 0, 0))
+        whenever(statusBarBoundsProvider.visibleEndSideBounds).thenReturn(Rect(0, 0, 0, 0))
+        val letterbox = letterboxWithInnerBounds(Rect(150, 0, 300, 800))
+        val letterboxRegion = TEST_APPEARANCE_REGION.copy(bounds = letterbox.letterboxFullBounds)
+
+        val letterboxAppearance =
+            calculator.getLetterboxAppearance(
+                TEST_APPEARANCE, arrayOf(letterboxRegion), arrayOf(letterbox))
+
+        val letterboxAdaptedRegion = letterboxRegion.copy(bounds = letterbox.letterboxInnerBounds)
+        assertThat(letterboxAppearance.appearanceRegions.toList()).contains(letterboxAdaptedRegion)
+        assertThat(letterboxAppearance.appearanceRegions.toList()).doesNotContain(letterboxRegion)
+    }
+
+    @Test
+    fun getLetterboxAppearance_returnsDefaultAppearanceRegions_basedOnLetterboxOuterBounds() {
+        whenever(statusBarBoundsProvider.visibleStartSideBounds).thenReturn(Rect(0, 0, 0, 0))
+        whenever(statusBarBoundsProvider.visibleEndSideBounds).thenReturn(Rect(0, 0, 0, 0))
+        val letterbox =
+            letterboxWithBounds(
+                innerBounds = Rect(left = 25, top = 0, right = 75, bottom = 100),
+                fullBounds = Rect(left = 0, top = 0, right = 100, bottom = 100))
+        val letterboxRegion = TEST_APPEARANCE_REGION.copy(bounds = letterbox.letterboxFullBounds)
+
+        val letterboxAppearance =
+            calculator.getLetterboxAppearance(
+                TEST_APPEARANCE, arrayOf(letterboxRegion), arrayOf(letterbox))
+
+        val outerRegions =
+            listOf(
+                AppearanceRegion(
+                    DEFAULT_APPEARANCE, Rect(left = 0, top = 0, right = 25, bottom = 100)),
+                AppearanceRegion(
+                    DEFAULT_APPEARANCE, Rect(left = 75, top = 0, right = 100, bottom = 100)),
+            )
+        assertThat(letterboxAppearance.appearanceRegions.toList())
+            .containsAtLeastElementsIn(outerRegions)
+    }
+
+    private fun letterboxWithBounds(innerBounds: Rect, fullBounds: Rect) =
+        LetterboxDetails(innerBounds, fullBounds, TEST_APPEARANCE)
+
+    private fun letterboxWithInnerBounds(innerBounds: Rect) =
+        letterboxWithBounds(innerBounds, fullBounds = TEST_WINDOW_BOUNDS)
+}
+
+private fun AppearanceRegion.copy(appearance: Int = this.appearance, bounds: Rect = this.bounds) =
+    AppearanceRegion(appearance, bounds)
+
+private fun Rect(left: Int, top: Int, right: Int, bottom: Int) = Rect(left, top, right, bottom)
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
new file mode 100644
index 0000000..44325dd
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LetterboxBackgroundProviderTest.kt
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 android.graphics.Color
+import android.testing.AndroidTestingRunner
+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.time.FakeSystemClock
+import com.google.common.truth.Truth.assertThat
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.`when` as whenever
+import org.mockito.MockitoAnnotations
+
+@RunWith(AndroidTestingRunner::class)
+@SmallTest
+class LetterboxBackgroundProviderTest : SysuiTestCase() {
+
+    private val fakeSystemClock = FakeSystemClock()
+    private val fakeExecutor = FakeExecutor(fakeSystemClock)
+
+    @Mock private lateinit var windowManager: IWindowManager
+    @Mock private lateinit var dumpManager: DumpManager
+
+    private lateinit var provider: LetterboxBackgroundProvider
+
+    @Before
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+
+        provider = LetterboxBackgroundProvider(windowManager, fakeExecutor, dumpManager)
+    }
+
+    @Test
+    fun letterboxBackgroundColor_defaultValue_returnsBlack() {
+        assertThat(provider.letterboxBackgroundColor).isEqualTo(Color.BLACK)
+    }
+
+    @Test
+    fun letterboxBackgroundColor_afterOnStart_executorNotDone_returnsDefaultValue() {
+        whenever(windowManager.letterboxBackgroundColorInArgb).thenReturn(Color.RED)
+
+        provider.start()
+
+        assertThat(provider.letterboxBackgroundColor).isEqualTo(Color.BLACK)
+    }
+
+    @Test
+    fun letterboxBackgroundColor_afterOnStart_executorDone_returnsValueFromWindowManager() {
+        whenever(windowManager.letterboxBackgroundColorInArgb).thenReturn(Color.RED)
+
+        provider.start()
+        fakeExecutor.runAllReady()
+
+        assertThat(provider.letterboxBackgroundColor).isEqualTo(Color.RED)
+    }
+
+    @Test
+    fun isLetterboxBackgroundMultiColored_defaultValue_returnsFalse() {
+        assertThat(provider.isLetterboxBackgroundMultiColored).isEqualTo(false)
+    }
+    @Test
+    fun isLetterboxBackgroundMultiColored_afterOnStart_executorNotDone_returnsDefaultValue() {
+        whenever(windowManager.isLetterboxBackgroundMultiColored).thenReturn(true)
+
+        provider.start()
+
+        assertThat(provider.isLetterboxBackgroundMultiColored).isFalse()
+    }
+
+    @Test
+    fun isBackgroundMultiColored_afterOnStart_executorDone_returnsValueFromWindowManager() {
+        whenever(windowManager.isLetterboxBackgroundMultiColored).thenReturn(true)
+
+        provider.start()
+        fakeExecutor.runAllReady()
+
+        assertThat(provider.isLetterboxBackgroundMultiColored).isTrue()
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LightsOutNotifControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LightsOutNotifControllerTest.java
index 9664035..fca9771 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LightsOutNotifControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/LightsOutNotifControllerTest.java
@@ -108,7 +108,8 @@
                 false /* navbarColorManagedByIme */,
                 BEHAVIOR_DEFAULT,
                 null /* requestedVisibilities */,
-                null /* packageName */);
+                null /* packageName */,
+                null /* letterboxDetails */);
         assertTrue(mLightsOutNotifController.areLightsOut());
     }
 
@@ -121,7 +122,8 @@
                 false /* navbarColorManagedByIme */,
                 BEHAVIOR_DEFAULT,
                 null /* requestedVisibilities */,
-                null /* packageName */);
+                null /* packageName */,
+                null /* letterboxDetails */);
         assertFalse(mLightsOutNotifController.areLightsOut());
     }
 
@@ -152,7 +154,8 @@
                 false /* navbarColorManagedByIme */,
                 BEHAVIOR_DEFAULT,
                 null /* requestedVisibilities */,
-                null /* packageName */);
+                null /* packageName */,
+                null /* letterboxDetails */);
 
         // THEN we should show dot
         assertTrue(mLightsOutNotifController.shouldShowDot());
@@ -172,7 +175,8 @@
                 false /* navbarColorManagedByIme */,
                 BEHAVIOR_DEFAULT,
                 null /* requestedVisibilities */,
-                null /* packageName */);
+                null /* packageName */,
+                null /* letterboxDetails */);
 
         // THEN we shouldn't show the dot
         assertFalse(mLightsOutNotifController.shouldShowDot());
@@ -192,7 +196,8 @@
                 false /* navbarColorManagedByIme */,
                 BEHAVIOR_DEFAULT,
                 null /* requestedVisibilities */,
-                null /* packageName */);
+                null /* packageName */,
+                null /* letterboxDetails */);
 
         // THEN we shouldn't show the dot
         assertFalse(mLightsOutNotifController.shouldShowDot());
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationIconContainerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationIconContainerTest.kt
index 2ff6dd4..086e5df 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationIconContainerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationIconContainerTest.kt
@@ -153,6 +153,106 @@
         assertTrue(iconContainer.hasOverflow())
     }
 
+    @Test
+    fun shouldForceOverflow_appearingAboveSpeedBump_true() {
+        val forceOverflow = iconContainer.shouldForceOverflow(
+                /* i= */ 1,
+                /* speedBumpIndex= */ 0,
+                /* iconAppearAmount= */ 1f,
+                /* maxVisibleIcons= */ 5
+        )
+        assertTrue(forceOverflow);
+    }
+
+    @Test
+    fun shouldForceOverflow_moreThanMaxVisible_true() {
+        val forceOverflow = iconContainer.shouldForceOverflow(
+                /* i= */ 10,
+                /* speedBumpIndex= */ 11,
+                /* iconAppearAmount= */ 0f,
+                /* maxVisibleIcons= */ 5
+        )
+        assertTrue(forceOverflow);
+    }
+
+    @Test
+    fun shouldForceOverflow_belowSpeedBumpAndLessThanMaxVisible_false() {
+        val forceOverflow = iconContainer.shouldForceOverflow(
+                /* i= */ 0,
+                /* speedBumpIndex= */ 11,
+                /* iconAppearAmount= */ 0f,
+                /* maxVisibleIcons= */ 5
+        )
+        assertFalse(forceOverflow);
+    }
+
+    @Test
+    fun isOverflowing_lastChildXLessThanLayoutEnd_false() {
+        val isOverflowing = iconContainer.isOverflowing(
+                /* isLastChild= */ true,
+                /* translationX= */ 0f,
+                /* layoutEnd= */ 10f,
+                /* iconSize= */ 2f,
+        )
+        assertFalse(isOverflowing)
+    }
+
+
+    @Test
+    fun isOverflowing_lastChildXEqualToLayoutEnd_true() {
+        val isOverflowing = iconContainer.isOverflowing(
+                /* isLastChild= */ true,
+                /* translationX= */ 10f,
+                /* layoutEnd= */ 10f,
+                /* iconSize= */ 2f,
+        )
+        assertTrue(isOverflowing)
+    }
+
+    @Test
+    fun isOverflowing_lastChildXGreaterThanLayoutEnd_true() {
+        val isOverflowing = iconContainer.isOverflowing(
+                /* isLastChild= */ true,
+                /* translationX= */ 20f,
+                /* layoutEnd= */ 10f,
+                /* iconSize= */ 2f,
+        )
+        assertTrue(isOverflowing)
+    }
+
+    @Test
+    fun isOverflowing_notLastChildXLessThanDotX_false() {
+        val isOverflowing = iconContainer.isOverflowing(
+                /* isLastChild= */ false,
+                /* translationX= */ 0f,
+                /* layoutEnd= */ 10f,
+                /* iconSize= */ 2f,
+        )
+        assertFalse(isOverflowing)
+    }
+
+    @Test
+    fun isOverflowing_notLastChildXGreaterThanDotX_true() {
+        val isOverflowing = iconContainer.isOverflowing(
+                /* isLastChild= */ false,
+                /* translationX= */ 20f,
+                /* layoutEnd= */ 10f,
+                /* iconSize= */ 2f,
+        )
+        assertTrue(isOverflowing)
+    }
+
+    @Test
+    fun isOverflowing_notLastChildXEqualToDotX_true() {
+        val isOverflowing = iconContainer.isOverflowing(
+                /* isLastChild= */ false,
+                /* translationX= */ 8f,
+                /* layoutEnd= */ 10f,
+                /* iconSize= */ 2f,
+        )
+        assertTrue(isOverflowing)
+    }
+
     private fun mockStatusBarIcon() : StatusBarIconView {
         val iconView = mock(StatusBarIconView::class.java)
         whenever(iconView.width).thenReturn(10)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewControllerTest.java
deleted file mode 100644
index 8900d8f..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewControllerTest.java
+++ /dev/null
@@ -1,1363 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.statusbar.phone;
-
-import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
-
-import static com.android.keyguard.KeyguardClockSwitch.LARGE;
-import static com.android.keyguard.KeyguardClockSwitch.SMALL;
-import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
-import static com.android.systemui.statusbar.StatusBarState.SHADE;
-import static com.android.systemui.statusbar.StatusBarState.SHADE_LOCKED;
-
-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.anyFloat;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.atLeast;
-import static org.mockito.Mockito.atLeastOnce;
-import static org.mockito.Mockito.clearInvocations;
-import static org.mockito.Mockito.doAnswer;
-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.when;
-
-import android.annotation.IdRes;
-import android.app.ActivityManager;
-import android.content.ContentResolver;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.database.ContentObserver;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.PowerManager;
-import android.os.UserManager;
-import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
-import android.util.DisplayMetrics;
-import android.view.LayoutInflater;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewParent;
-import android.view.ViewPropertyAnimator;
-import android.view.ViewStub;
-import android.view.accessibility.AccessibilityManager;
-import android.view.accessibility.AccessibilityNodeInfo;
-
-import androidx.constraintlayout.widget.ConstraintSet;
-import androidx.test.filters.SmallTest;
-
-import com.android.internal.jank.InteractionJankMonitor;
-import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.UiEventLogger;
-import com.android.internal.logging.testing.UiEventLoggerFake;
-import com.android.internal.util.CollectionUtils;
-import com.android.internal.util.LatencyTracker;
-import com.android.keyguard.KeyguardClockSwitch;
-import com.android.keyguard.KeyguardClockSwitchController;
-import com.android.keyguard.KeyguardStatusView;
-import com.android.keyguard.KeyguardStatusViewController;
-import com.android.keyguard.KeyguardUpdateMonitor;
-import com.android.keyguard.LockIconViewController;
-import com.android.keyguard.dagger.KeyguardQsUserSwitchComponent;
-import com.android.keyguard.dagger.KeyguardStatusBarViewComponent;
-import com.android.keyguard.dagger.KeyguardStatusViewComponent;
-import com.android.keyguard.dagger.KeyguardUserSwitcherComponent;
-import com.android.systemui.DejankUtils;
-import com.android.systemui.R;
-import com.android.systemui.SysuiTestCase;
-import com.android.systemui.biometrics.AuthController;
-import com.android.systemui.classifier.FalsingCollectorFake;
-import com.android.systemui.classifier.FalsingManagerFake;
-import com.android.systemui.controls.dagger.ControlsComponent;
-import com.android.systemui.doze.DozeLog;
-import com.android.systemui.dump.DumpManager;
-import com.android.systemui.flags.FeatureFlags;
-import com.android.systemui.fragments.FragmentHostManager;
-import com.android.systemui.fragments.FragmentService;
-import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
-import com.android.systemui.media.KeyguardMediaController;
-import com.android.systemui.media.MediaDataManager;
-import com.android.systemui.media.MediaHierarchyManager;
-import com.android.systemui.model.SysUiState;
-import com.android.systemui.navigationbar.NavigationModeController;
-import com.android.systemui.plugins.FalsingManager;
-import com.android.systemui.plugins.qs.QS;
-import com.android.systemui.qrcodescanner.controller.QRCodeScannerController;
-import com.android.systemui.screenrecord.RecordingController;
-import com.android.systemui.statusbar.CommandQueue;
-import com.android.systemui.statusbar.KeyguardAffordanceView;
-import com.android.systemui.statusbar.KeyguardIndicationController;
-import com.android.systemui.statusbar.LockscreenShadeTransitionController;
-import com.android.systemui.statusbar.NotificationRemoteInputManager;
-import com.android.systemui.statusbar.NotificationShadeDepthController;
-import com.android.systemui.statusbar.NotificationShadeWindowController;
-import com.android.systemui.statusbar.NotificationShelfController;
-import com.android.systemui.statusbar.PulseExpansionHandler;
-import com.android.systemui.statusbar.QsFrameTranslateController;
-import com.android.systemui.statusbar.StatusBarStateControllerImpl;
-import com.android.systemui.statusbar.SysuiStatusBarStateController;
-import com.android.systemui.statusbar.VibratorHelper;
-import com.android.systemui.statusbar.events.PrivacyDotViewController;
-import com.android.systemui.statusbar.notification.ConversationNotificationManager;
-import com.android.systemui.statusbar.notification.DynamicPrivacyController;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
-import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
-import com.android.systemui.statusbar.notification.row.ExpandableView;
-import com.android.systemui.statusbar.notification.row.ExpandableView.OnHeightChangedListener;
-import com.android.systemui.statusbar.notification.stack.AmbientState;
-import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
-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.NotificationStackSizeCalculator;
-import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
-import com.android.systemui.statusbar.phone.shade.transition.ShadeTransitionController;
-import com.android.systemui.statusbar.policy.ConfigurationController;
-import com.android.systemui.statusbar.policy.KeyguardQsUserSwitchController;
-import com.android.systemui.statusbar.policy.KeyguardStateController;
-import com.android.systemui.statusbar.policy.KeyguardUserSwitcherController;
-import com.android.systemui.statusbar.policy.KeyguardUserSwitcherView;
-import com.android.systemui.statusbar.window.StatusBarWindowStateController;
-import com.android.systemui.unfold.SysUIUnfoldComponent;
-import com.android.systemui.util.concurrency.FakeExecutor;
-import com.android.systemui.util.settings.SecureSettings;
-import com.android.systemui.util.time.FakeSystemClock;
-import com.android.systemui.util.time.SystemClock;
-import com.android.systemui.wallet.controller.QuickAccessWalletController;
-import com.android.wm.shell.animation.FlingAnimationUtils;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.mockito.stubbing.Answer;
-
-import java.util.List;
-import java.util.Optional;
-
-@SmallTest
-@RunWith(AndroidTestingRunner.class)
-@TestableLooper.RunWithLooper
-public class NotificationPanelViewControllerTest extends SysuiTestCase {
-
-    private static final int NOTIFICATION_SCRIM_TOP_PADDING_IN_SPLIT_SHADE = 50;
-
-    @Mock
-    private CentralSurfaces mCentralSurfaces;
-    @Mock
-    private NotificationStackScrollLayout mNotificationStackScrollLayout;
-    @Mock
-    private KeyguardBottomAreaView mKeyguardBottomArea;
-    @Mock
-    private KeyguardBottomAreaView mQsFrame;
-    private KeyguardStatusView mKeyguardStatusView;
-    @Mock
-    private NotificationIconAreaController mNotificationAreaController;
-    @Mock
-    private HeadsUpManagerPhone mHeadsUpManager;
-    @Mock
-    private NotificationShelfController mNotificationShelfController;
-    @Mock
-    private KeyguardStatusBarView mKeyguardStatusBar;
-    @Mock
-    private KeyguardUserSwitcherView mUserSwitcherView;
-    @Mock
-    private ViewStub mUserSwitcherStubView;
-    @Mock
-    private HeadsUpTouchHelper.Callback mHeadsUpCallback;
-    @Mock
-    private KeyguardUpdateMonitor mUpdateMonitor;
-    @Mock
-    private KeyguardBypassController mKeyguardBypassController;
-    @Mock
-    private DozeParameters mDozeParameters;
-    @Mock
-    private ScreenOffAnimationController mScreenOffAnimationController;
-    @Mock
-    private NotificationPanelView mView;
-    @Mock
-    private LayoutInflater mLayoutInflater;
-    @Mock
-    private FeatureFlags mFeatureFlags;
-    @Mock
-    private DynamicPrivacyController mDynamicPrivacyController;
-    @Mock
-    private NotificationEntryManager mNotificationEntryManager;
-    @Mock
-    private StatusBarTouchableRegionManager mStatusBarTouchableRegionManager;
-    @Mock
-    private KeyguardStateController mKeyguardStateController;
-    @Mock
-    private DozeLog mDozeLog;
-    @Mock
-    private CommandQueue mCommandQueue;
-    @Mock
-    private VibratorHelper mVibratorHelper;
-    @Mock
-    private LatencyTracker mLatencyTracker;
-    @Mock
-    private PowerManager mPowerManager;
-    @Mock
-    private AccessibilityManager mAccessibilityManager;
-    @Mock
-    private MetricsLogger mMetricsLogger;
-    @Mock
-    private ActivityManager mActivityManager;
-    @Mock
-    private Resources mResources;
-    @Mock
-    private Configuration mConfiguration;
-    private DisplayMetrics mDisplayMetrics = new DisplayMetrics();
-    @Mock
-    private KeyguardClockSwitch mKeyguardClockSwitch;
-    private PanelViewController.TouchHandler mTouchHandler;
-    private ConfigurationController mConfigurationController;
-    @Mock
-    private MediaHierarchyManager mMediaHiearchyManager;
-    @Mock
-    private ConversationNotificationManager mConversationNotificationManager;
-    @Mock
-    private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
-    @Mock
-    private KeyguardStatusViewComponent.Factory mKeyguardStatusViewComponentFactory;
-    @Mock
-    private KeyguardQsUserSwitchComponent.Factory mKeyguardQsUserSwitchComponentFactory;
-    @Mock
-    private KeyguardQsUserSwitchComponent mKeyguardQsUserSwitchComponent;
-    @Mock
-    private KeyguardQsUserSwitchController mKeyguardQsUserSwitchController;
-    @Mock
-    private KeyguardUserSwitcherComponent.Factory mKeyguardUserSwitcherComponentFactory;
-    @Mock
-    private KeyguardUserSwitcherComponent mKeyguardUserSwitcherComponent;
-    @Mock
-    private KeyguardUserSwitcherController mKeyguardUserSwitcherController;
-    @Mock
-    private KeyguardStatusViewComponent mKeyguardStatusViewComponent;
-    @Mock
-    private KeyguardStatusBarViewComponent.Factory mKeyguardStatusBarViewComponentFactory;
-    @Mock
-    private KeyguardStatusBarViewComponent mKeyguardStatusBarViewComponent;
-    @Mock
-    private KeyguardClockSwitchController mKeyguardClockSwitchController;
-    @Mock
-    private KeyguardStatusViewController mKeyguardStatusViewController;
-    @Mock
-    private KeyguardStatusBarViewController mKeyguardStatusBarViewController;
-    @Mock
-    private NotificationStackScrollLayoutController mNotificationStackScrollLayoutController;
-    @Mock
-    private NotificationShadeDepthController mNotificationShadeDepthController;
-    @Mock
-    private LockscreenShadeTransitionController mLockscreenShadeTransitionController;
-    @Mock
-    private AuthController mAuthController;
-    @Mock
-    private ScrimController mScrimController;
-    @Mock
-    private MediaDataManager mMediaDataManager;
-    @Mock
-    private AmbientState mAmbientState;
-    @Mock
-    private UserManager mUserManager;
-    @Mock
-    private UiEventLogger mUiEventLogger;
-    @Mock
-    private LockIconViewController mLockIconViewController;
-    @Mock
-    private KeyguardMediaController mKeyguardMediaController;
-    @Mock
-    private PrivacyDotViewController mPrivacyDotViewController;
-    @Mock
-    private NavigationModeController mNavigationModeController;
-    @Mock
-    private SecureSettings mSecureSettings;
-    @Mock
-    private LargeScreenShadeHeaderController mLargeScreenShadeHeaderController;
-    @Mock
-    private ContentResolver mContentResolver;
-    @Mock
-    private TapAgainViewController mTapAgainViewController;
-    @Mock
-    private KeyguardIndicationController mKeyguardIndicationController;
-    @Mock
-    private FragmentService mFragmentService;
-    @Mock
-    private FragmentHostManager mFragmentHostManager;
-    @Mock
-    private QuickAccessWalletController mQuickAccessWalletController;
-    @Mock
-    private QRCodeScannerController mQrCodeScannerController;
-    @Mock
-    private NotificationRemoteInputManager mNotificationRemoteInputManager;
-    @Mock
-    private RecordingController mRecordingController;
-    @Mock
-    private ControlsComponent mControlsComponent;
-    @Mock
-    private LockscreenGestureLogger mLockscreenGestureLogger;
-    @Mock
-    private DumpManager mDumpManager;
-    @Mock
-    private InteractionJankMonitor mInteractionJankMonitor;
-    @Mock
-    private NotificationsQSContainerController mNotificationsQSContainerController;
-    @Mock
-    private QsFrameTranslateController mQsFrameTranslateController;
-    @Mock
-    private StatusBarWindowStateController mStatusBarWindowStateController;
-    @Mock
-    private KeyguardUnlockAnimationController mKeyguardUnlockAnimationController;
-    @Mock
-    private NotificationShadeWindowController mNotificationShadeWindowController;
-    @Mock
-    private SysUiState mSysUiState;
-    @Mock
-    private NotificationListContainer mNotificationListContainer;
-    @Mock
-    private NotificationStackSizeCalculator mNotificationStackSizeCalculator;
-    @Mock
-    private UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController;
-    @Mock
-    private ShadeTransitionController mShadeTransitionController;
-    @Mock
-    private QS mQs;
-    @Mock
-    private View mQsHeader;
-    @Mock
-    private ViewParent mViewParent;
-    private NotificationPanelViewController.PanelEventsEmitter mPanelEventsEmitter;
-    private Optional<SysUIUnfoldComponent> mSysUIUnfoldComponent = Optional.empty();
-    private SysuiStatusBarStateController mStatusBarStateController;
-    private NotificationPanelViewController mNotificationPanelViewController;
-    private View.AccessibilityDelegate mAccessibiltyDelegate;
-    private NotificationsQuickSettingsContainer mNotificationContainerParent;
-    private List<View.OnAttachStateChangeListener> mOnAttachStateChangeListeners;
-    private FalsingManagerFake mFalsingManager = new FalsingManagerFake();
-    private FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock());
-    private Handler mMainHandler;
-    private final PanelExpansionStateManager mPanelExpansionStateManager =
-            new PanelExpansionStateManager();
-    private SystemClock mSystemClock;
-
-    @Before
-    public void setup() {
-        MockitoAnnotations.initMocks(this);
-        mSystemClock = new FakeSystemClock();
-        mStatusBarStateController = new StatusBarStateControllerImpl(mUiEventLogger, mDumpManager,
-                mInteractionJankMonitor);
-
-        mKeyguardStatusView = new KeyguardStatusView(mContext);
-        mKeyguardStatusView.setId(R.id.keyguard_status_view);
-        DejankUtils.setImmediate(true);
-
-        when(mAuthController.isUdfpsEnrolled(anyInt())).thenReturn(false);
-        when(mHeadsUpCallback.getContext()).thenReturn(mContext);
-        when(mView.getResources()).thenReturn(mResources);
-        when(mResources.getConfiguration()).thenReturn(mConfiguration);
-        mConfiguration.orientation = ORIENTATION_PORTRAIT;
-        when(mResources.getDisplayMetrics()).thenReturn(mDisplayMetrics);
-        mDisplayMetrics.density = 100;
-        when(mResources.getBoolean(R.bool.config_enableNotificationShadeDrag)).thenReturn(true);
-        when(mResources.getDimensionPixelSize(R.dimen.notifications_top_padding_split_shade))
-                .thenReturn(NOTIFICATION_SCRIM_TOP_PADDING_IN_SPLIT_SHADE);
-        when(mResources.getDimensionPixelSize(R.dimen.notification_panel_margin_horizontal))
-                .thenReturn(10);
-        when(mView.getContext()).thenReturn(getContext());
-        when(mView.findViewById(R.id.keyguard_header)).thenReturn(mKeyguardStatusBar);
-        when(mView.findViewById(R.id.keyguard_user_switcher_view)).thenReturn(mUserSwitcherView);
-        when(mView.findViewById(R.id.keyguard_user_switcher_stub)).thenReturn(
-                mUserSwitcherStubView);
-        when(mView.findViewById(R.id.keyguard_clock_container)).thenReturn(mKeyguardClockSwitch);
-        when(mView.findViewById(R.id.notification_stack_scroller))
-                .thenReturn(mNotificationStackScrollLayout);
-        when(mNotificationStackScrollLayoutController.getHeight()).thenReturn(1000);
-        when(mNotificationStackScrollLayoutController.getHeadsUpCallback())
-                .thenReturn(mHeadsUpCallback);
-        when(mView.findViewById(R.id.keyguard_bottom_area)).thenReturn(mKeyguardBottomArea);
-        when(mKeyguardBottomArea.getLeftView()).thenReturn(mock(KeyguardAffordanceView.class));
-        when(mKeyguardBottomArea.getRightView()).thenReturn(mock(KeyguardAffordanceView.class));
-        when(mKeyguardBottomArea.animate()).thenReturn(mock(ViewPropertyAnimator.class));
-        when(mView.findViewById(R.id.qs_frame)).thenReturn(mQsFrame);
-        when(mView.findViewById(R.id.keyguard_status_view))
-                .thenReturn(mock(KeyguardStatusView.class));
-        mNotificationContainerParent = new NotificationsQuickSettingsContainer(getContext(), null);
-        mNotificationContainerParent.addView(mKeyguardStatusView);
-        mNotificationContainerParent.onFinishInflate();
-        when(mView.findViewById(R.id.notification_container_parent))
-                .thenReturn(mNotificationContainerParent);
-        when(mFragmentService.getFragmentHostManager(mView)).thenReturn(mFragmentHostManager);
-        FlingAnimationUtils.Builder flingAnimationUtilsBuilder = new FlingAnimationUtils.Builder(
-                mDisplayMetrics);
-        when(mKeyguardQsUserSwitchComponentFactory.build(any()))
-                .thenReturn(mKeyguardQsUserSwitchComponent);
-        when(mKeyguardQsUserSwitchComponent.getKeyguardQsUserSwitchController())
-                .thenReturn(mKeyguardQsUserSwitchController);
-        when(mKeyguardUserSwitcherComponentFactory.build(any()))
-                .thenReturn(mKeyguardUserSwitcherComponent);
-        when(mKeyguardUserSwitcherComponent.getKeyguardUserSwitcherController())
-                .thenReturn(mKeyguardUserSwitcherController);
-        when(mScreenOffAnimationController.shouldAnimateClockChange()).thenReturn(true);
-
-        doAnswer((Answer<Void>) invocation -> {
-            mTouchHandler = invocation.getArgument(0);
-            return null;
-        }).when(mView).setOnTouchListener(any(PanelViewController.TouchHandler.class));
-
-        NotificationWakeUpCoordinator coordinator =
-                new NotificationWakeUpCoordinator(
-                        mock(HeadsUpManagerPhone.class),
-                        new StatusBarStateControllerImpl(new UiEventLoggerFake(), mDumpManager,
-                                mInteractionJankMonitor),
-                        mKeyguardBypassController,
-                        mDozeParameters,
-                        mScreenOffAnimationController);
-        mConfigurationController = new ConfigurationControllerImpl(mContext);
-        PulseExpansionHandler expansionHandler = new PulseExpansionHandler(
-                mContext,
-                coordinator,
-                mKeyguardBypassController, mHeadsUpManager,
-                mock(NotificationRoundnessManager.class),
-                mConfigurationController,
-                mStatusBarStateController,
-                mFalsingManager,
-                mLockscreenShadeTransitionController,
-                new FalsingCollectorFake(),
-                mDumpManager);
-        when(mKeyguardStatusViewComponentFactory.build(any()))
-                .thenReturn(mKeyguardStatusViewComponent);
-        when(mKeyguardStatusViewComponent.getKeyguardClockSwitchController())
-                .thenReturn(mKeyguardClockSwitchController);
-        when(mKeyguardStatusViewComponent.getKeyguardStatusViewController())
-                .thenReturn(mKeyguardStatusViewController);
-        when(mKeyguardStatusBarViewComponentFactory.build(any(), any()))
-                .thenReturn(mKeyguardStatusBarViewComponent);
-        when(mKeyguardStatusBarViewComponent.getKeyguardStatusBarViewController())
-                .thenReturn(mKeyguardStatusBarViewController);
-        when(mLayoutInflater.inflate(eq(R.layout.keyguard_status_view), any(), anyBoolean()))
-                .thenReturn(mKeyguardStatusView);
-        when(mLayoutInflater.inflate(eq(R.layout.keyguard_user_switcher), any(), anyBoolean()))
-                .thenReturn(mUserSwitcherView);
-        when(mLayoutInflater.inflate(eq(R.layout.keyguard_bottom_area), any(), anyBoolean()))
-                .thenReturn(mKeyguardBottomArea);
-        when(mNotificationRemoteInputManager.isRemoteInputActive())
-                .thenReturn(false);
-        when(mInteractionJankMonitor.begin(any(), anyInt()))
-                .thenReturn(true);
-        when(mInteractionJankMonitor.end(anyInt()))
-                .thenReturn(true);
-        doAnswer(invocation -> {
-            ((Runnable) invocation.getArgument(0)).run();
-            return null;
-        }).when(mNotificationShadeWindowController).batchApplyWindowLayoutParams(any());
-
-        when(mView.getParent()).thenReturn(mViewParent);
-        when(mQs.getHeader()).thenReturn(mQsHeader);
-
-        mMainHandler = new Handler(Looper.getMainLooper());
-        mPanelEventsEmitter = new NotificationPanelViewController.PanelEventsEmitter();
-
-        mNotificationPanelViewController = new NotificationPanelViewController(mView,
-                mResources,
-                mMainHandler,
-                mLayoutInflater,
-                mFeatureFlags,
-                coordinator, expansionHandler, mDynamicPrivacyController, mKeyguardBypassController,
-                mFalsingManager, new FalsingCollectorFake(),
-                mNotificationEntryManager,
-                mKeyguardStateController,
-                mStatusBarStateController,
-                mStatusBarWindowStateController,
-                mNotificationShadeWindowController,
-                mDozeLog, mDozeParameters, mCommandQueue, mVibratorHelper,
-                mLatencyTracker, mPowerManager, mAccessibilityManager, 0, mUpdateMonitor,
-                mMetricsLogger, mActivityManager, mConfigurationController,
-                () -> flingAnimationUtilsBuilder, mStatusBarTouchableRegionManager,
-                mConversationNotificationManager, mMediaHiearchyManager,
-                mStatusBarKeyguardViewManager,
-                mNotificationsQSContainerController,
-                mNotificationStackScrollLayoutController,
-                mKeyguardStatusViewComponentFactory,
-                mKeyguardQsUserSwitchComponentFactory,
-                mKeyguardUserSwitcherComponentFactory,
-                mKeyguardStatusBarViewComponentFactory,
-                mLockscreenShadeTransitionController,
-                mNotificationAreaController,
-                mAuthController,
-                mScrimController,
-                mUserManager,
-                mMediaDataManager,
-                mNotificationShadeDepthController,
-                mAmbientState,
-                mLockIconViewController,
-                mKeyguardMediaController,
-                mPrivacyDotViewController,
-                mTapAgainViewController,
-                mNavigationModeController,
-                mFragmentService,
-                mContentResolver,
-                mQuickAccessWalletController,
-                mQrCodeScannerController,
-                mRecordingController,
-                mExecutor,
-                mSecureSettings,
-                mLargeScreenShadeHeaderController,
-                mScreenOffAnimationController,
-                mLockscreenGestureLogger,
-                mPanelExpansionStateManager,
-                mNotificationRemoteInputManager,
-                mSysUIUnfoldComponent,
-                mControlsComponent,
-                mInteractionJankMonitor,
-                mQsFrameTranslateController,
-                mSysUiState,
-                mKeyguardUnlockAnimationController,
-                mNotificationListContainer,
-                mPanelEventsEmitter,
-                mNotificationStackSizeCalculator,
-                mUnlockedScreenOffAnimationController,
-                mShadeTransitionController,
-                mSystemClock);
-        mNotificationPanelViewController.initDependencies(
-                mCentralSurfaces,
-                () -> {},
-                mNotificationShelfController);
-        mNotificationPanelViewController.setHeadsUpManager(mHeadsUpManager);
-        mNotificationPanelViewController.setKeyguardIndicationController(
-                mKeyguardIndicationController);
-        ArgumentCaptor<View.OnAttachStateChangeListener> onAttachStateChangeListenerArgumentCaptor =
-                ArgumentCaptor.forClass(View.OnAttachStateChangeListener.class);
-        verify(mView, atLeast(1)).addOnAttachStateChangeListener(
-                onAttachStateChangeListenerArgumentCaptor.capture());
-        mOnAttachStateChangeListeners = onAttachStateChangeListenerArgumentCaptor.getAllValues();
-
-        ArgumentCaptor<View.AccessibilityDelegate> accessibilityDelegateArgumentCaptor =
-                ArgumentCaptor.forClass(View.AccessibilityDelegate.class);
-        verify(mView).setAccessibilityDelegate(accessibilityDelegateArgumentCaptor.capture());
-        mAccessibiltyDelegate = accessibilityDelegateArgumentCaptor.getValue();
-        mNotificationPanelViewController.mStatusBarStateController
-                .addCallback(mNotificationPanelViewController.mStatusBarStateListener);
-        mNotificationPanelViewController
-                .setHeadsUpAppearanceController(mock(HeadsUpAppearanceController.class));
-    }
-
-    @After
-    public void tearDown() {
-        mNotificationPanelViewController.cancelHeightAnimator();
-        mMainHandler.removeCallbacksAndMessages(null);
-    }
-
-    @Test
-    public void onNotificationHeightChangeWhileOnKeyguardWillComputeMaxKeyguardNotifications() {
-        mStatusBarStateController.setState(KEYGUARD);
-        ArgumentCaptor<OnHeightChangedListener> captor =
-                ArgumentCaptor.forClass(OnHeightChangedListener.class);
-        verify(mNotificationStackScrollLayoutController)
-                .setOnHeightChangedListener(captor.capture());
-        OnHeightChangedListener listener = captor.getValue();
-
-        clearInvocations(mNotificationStackSizeCalculator);
-        listener.onHeightChanged(mock(ExpandableView.class), false);
-
-        verify(mNotificationStackSizeCalculator)
-                .computeMaxKeyguardNotifications(any(), anyFloat(), anyFloat(), anyFloat());
-    }
-
-    @Test
-    public void onNotificationHeightChangeWhileInShadeWillNotComputeMaxKeyguardNotifications() {
-        mStatusBarStateController.setState(SHADE);
-        ArgumentCaptor<OnHeightChangedListener> captor =
-                ArgumentCaptor.forClass(OnHeightChangedListener.class);
-        verify(mNotificationStackScrollLayoutController)
-                .setOnHeightChangedListener(captor.capture());
-        OnHeightChangedListener listener = captor.getValue();
-
-        clearInvocations(mNotificationStackSizeCalculator);
-        listener.onHeightChanged(mock(ExpandableView.class), false);
-
-        verify(mNotificationStackSizeCalculator, never())
-                .computeMaxKeyguardNotifications(any(), anyFloat(), anyFloat(), anyFloat());
-    }
-
-    @Test
-    public void computeMaxKeyguardNotifications_lockscreenToShade_returnsExistingMax() {
-        when(mAmbientState.getFractionToShade()).thenReturn(0.5f);
-        mNotificationPanelViewController.setMaxDisplayedNotifications(-1);
-
-        // computeMaxKeyguardNotifications sets maxAllowed to 0 at minimum if it updates the value
-        assertThat(mNotificationPanelViewController.computeMaxKeyguardNotifications())
-                .isEqualTo(-1);
-    }
-
-    @Test
-    public void computeMaxKeyguardNotifications_noTransition_updatesMax() {
-        when(mAmbientState.getFractionToShade()).thenReturn(0f);
-        mNotificationPanelViewController.setMaxDisplayedNotifications(-1);
-
-        // computeMaxKeyguardNotifications sets maxAllowed to 0 at minimum if it updates the value
-        assertThat(mNotificationPanelViewController.computeMaxKeyguardNotifications())
-                .isNotEqualTo(-1);
-    }
-
-    private void setBottomPadding(int stackBottom, int lockIconPadding, int indicationPadding,
-            int ambientPadding) {
-
-        when(mNotificationStackScrollLayoutController.getTop()).thenReturn(0);
-        when(mNotificationStackScrollLayoutController.getHeight()).thenReturn(stackBottom);
-        when(mNotificationStackScrollLayoutController.getBottom()).thenReturn(stackBottom);
-        when(mLockIconViewController.getTop()).thenReturn((float) (stackBottom - lockIconPadding));
-
-        when(mResources.getDimensionPixelSize(R.dimen.keyguard_indication_bottom_padding))
-                .thenReturn(indicationPadding);
-        mNotificationPanelViewController.loadDimens();
-
-        mNotificationPanelViewController.setAmbientIndicationTop(
-                /* ambientIndicationTop= */ stackBottom - ambientPadding,
-                /* ambientTextVisible= */ true);
-    }
-
-    @Test
-    public void getVerticalSpaceForLockscreenNotifications_useLockIconBottomPadding_returnsSpaceAvailable() {
-        setBottomPadding(/* stackScrollLayoutBottom= */ 100,
-                /* lockIconPadding= */ 20,
-                /* indicationPadding= */ 0,
-                /* ambientPadding= */ 0);
-
-        assertThat(mNotificationPanelViewController.getVerticalSpaceForLockscreenNotifications())
-                .isEqualTo(80);
-    }
-
-    @Test
-    public void getVerticalSpaceForLockscreenNotifications_useIndicationBottomPadding_returnsSpaceAvailable() {
-        setBottomPadding(/* stackScrollLayoutBottom= */ 100,
-                /* lockIconPadding= */ 0,
-                /* indicationPadding= */ 30,
-                /* ambientPadding= */ 0);
-
-        assertThat(mNotificationPanelViewController.getVerticalSpaceForLockscreenNotifications())
-                .isEqualTo(70);
-    }
-
-    @Test
-    public void getVerticalSpaceForLockscreenNotifications_useAmbientBottomPadding_returnsSpaceAvailable() {
-        setBottomPadding(/* stackScrollLayoutBottom= */ 100,
-                /* lockIconPadding= */ 0,
-                /* indicationPadding= */ 0,
-                /* ambientPadding= */ 40);
-
-        assertThat(mNotificationPanelViewController.getVerticalSpaceForLockscreenNotifications())
-                .isEqualTo(60);
-    }
-
-    @Test
-    public void getVerticalSpaceForLockscreenShelf_useLockIconBottomPadding_returnsShelfHeight() {
-        setBottomPadding(/* stackScrollLayoutBottom= */ 100,
-                /* lockIconPadding= */ 20,
-                /* indicationPadding= */ 0,
-                /* ambientPadding= */ 0);
-
-        when(mNotificationShelfController.getIntrinsicHeight()).thenReturn(5);
-        assertThat(mNotificationPanelViewController.getVerticalSpaceForLockscreenShelf())
-                .isEqualTo(5);
-    }
-
-    @Test
-    public void getVerticalSpaceForLockscreenShelf_useIndicationBottomPadding_returnsZero() {
-        setBottomPadding(/* stackScrollLayoutBottom= */ 100,
-                /* lockIconPadding= */ 0,
-                /* indicationPadding= */ 30,
-                /* ambientPadding= */ 0);
-
-        when(mNotificationShelfController.getIntrinsicHeight()).thenReturn(5);
-        assertThat(mNotificationPanelViewController.getVerticalSpaceForLockscreenShelf())
-                .isEqualTo(0);
-    }
-
-    @Test
-    public void getVerticalSpaceForLockscreenShelf_useAmbientBottomPadding_returnsZero() {
-        setBottomPadding(/* stackScrollLayoutBottom= */ 100,
-                /* lockIconPadding= */ 0,
-                /* indicationPadding= */ 0,
-                /* ambientPadding= */ 40);
-
-        when(mNotificationShelfController.getIntrinsicHeight()).thenReturn(5);
-        assertThat(mNotificationPanelViewController.getVerticalSpaceForLockscreenShelf())
-                .isEqualTo(0);
-    }
-
-    @Test
-    public void getVerticalSpaceForLockscreenShelf_useLockIconPadding_returnsLessThanShelfHeight() {
-        setBottomPadding(/* stackScrollLayoutBottom= */ 100,
-                /* lockIconPadding= */ 10,
-                /* indicationPadding= */ 8,
-                /* ambientPadding= */ 0);
-
-        when(mNotificationShelfController.getIntrinsicHeight()).thenReturn(5);
-        assertThat(mNotificationPanelViewController.getVerticalSpaceForLockscreenShelf())
-                .isEqualTo(2);
-    }
-
-    @Test
-    public void testSetPanelScrimMinFraction() {
-        mNotificationPanelViewController.setPanelScrimMinFraction(0.5f);
-        verify(mNotificationShadeDepthController).setPanelPullDownMinFraction(eq(0.5f));
-    }
-
-    @Test
-    public void testSetDozing_notifiesNsslAndStateController() {
-        mNotificationPanelViewController.setDozing(true /* dozing */, false /* animate */,
-                null /* touch */);
-        verify(mNotificationStackScrollLayoutController)
-                .setDozing(eq(true), eq(false), eq(null));
-        assertThat(mStatusBarStateController.getDozeAmount()).isEqualTo(1f);
-    }
-
-    @Test
-    public void testSetExpandedHeight() {
-        mNotificationPanelViewController.setExpandedHeight(200);
-        assertThat((int) mNotificationPanelViewController.getExpandedHeight()).isEqualTo(200);
-    }
-
-    @Test
-    public void testOnTouchEvent_expansionCanBeBlocked() {
-        onTouchEvent(MotionEvent.obtain(0L /* downTime */,
-                0L /* eventTime */, MotionEvent.ACTION_DOWN, 0f /* x */, 0f /* y */,
-                0 /* metaState */));
-        onTouchEvent(MotionEvent.obtain(0L /* downTime */,
-                0L /* eventTime */, MotionEvent.ACTION_MOVE, 0f /* x */, 200f /* y */,
-                0 /* metaState */));
-        assertThat((int) mNotificationPanelViewController.getExpandedHeight()).isEqualTo(200);
-        assertThat(mNotificationPanelViewController.isTrackingBlocked()).isFalse();
-
-        mNotificationPanelViewController.blockExpansionForCurrentTouch();
-        onTouchEvent(MotionEvent.obtain(0L /* downTime */,
-                0L /* eventTime */, MotionEvent.ACTION_MOVE, 0f /* x */, 300f /* y */,
-                0 /* metaState */));
-        // Expansion should not have changed because it was blocked
-        assertThat((int) mNotificationPanelViewController.getExpandedHeight()).isEqualTo(200);
-        assertThat(mNotificationPanelViewController.isTrackingBlocked()).isTrue();
-
-        onTouchEvent(MotionEvent.obtain(0L /* downTime */,
-                0L /* eventTime */, MotionEvent.ACTION_UP, 0f /* x */, 300f /* y */,
-                0 /* metaState */));
-        assertThat(mNotificationPanelViewController.isTrackingBlocked()).isFalse();
-    }
-
-    @Test
-    public void handleTouchEventFromStatusBar_panelsNotEnabled_returnsFalseAndNoViewEvent() {
-        when(mCommandQueue.panelsEnabled()).thenReturn(false);
-
-        boolean returnVal = mNotificationPanelViewController
-                .getStatusBarTouchEventHandler()
-                .handleTouchEvent(
-                        MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, 0f, 0f, 0));
-
-        assertThat(returnVal).isFalse();
-        verify(mView, never()).dispatchTouchEvent(any());
-    }
-
-    @Test
-    public void handleTouchEventFromStatusBar_viewNotEnabled_returnsTrueAndNoViewEvent() {
-        when(mCommandQueue.panelsEnabled()).thenReturn(true);
-        when(mView.isEnabled()).thenReturn(false);
-
-        boolean returnVal = mNotificationPanelViewController
-                .getStatusBarTouchEventHandler()
-                .handleTouchEvent(
-                        MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, 0f, 0f, 0));
-
-        assertThat(returnVal).isTrue();
-        verify(mView, never()).dispatchTouchEvent(any());
-    }
-
-    @Test
-    public void handleTouchEventFromStatusBar_viewNotEnabledButIsMoveEvent_viewReceivesEvent() {
-        when(mCommandQueue.panelsEnabled()).thenReturn(true);
-        when(mView.isEnabled()).thenReturn(false);
-        MotionEvent event = MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_MOVE, 0f, 0f, 0);
-
-        mNotificationPanelViewController.getStatusBarTouchEventHandler().handleTouchEvent(event);
-
-        verify(mView).dispatchTouchEvent(event);
-    }
-
-    @Test
-    public void handleTouchEventFromStatusBar_panelAndViewEnabled_viewReceivesEvent() {
-        when(mCommandQueue.panelsEnabled()).thenReturn(true);
-        when(mView.isEnabled()).thenReturn(true);
-        MotionEvent event = MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, 0f, 0f, 0);
-
-        mNotificationPanelViewController.getStatusBarTouchEventHandler().handleTouchEvent(event);
-
-        verify(mView).dispatchTouchEvent(event);
-    }
-
-    @Test
-    public void testA11y_initializeNode() {
-        AccessibilityNodeInfo nodeInfo = new AccessibilityNodeInfo();
-        mAccessibiltyDelegate.onInitializeAccessibilityNodeInfo(mView, nodeInfo);
-
-        List<AccessibilityNodeInfo.AccessibilityAction> actionList = nodeInfo.getActionList();
-        assertThat(actionList).containsAtLeastElementsIn(
-                new AccessibilityNodeInfo.AccessibilityAction[] {
-                        AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD,
-                        AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_UP}
-        );
-    }
-
-    @Test
-    public void testA11y_scrollForward() {
-        mAccessibiltyDelegate.performAccessibilityAction(
-                mView,
-                AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_FORWARD.getId(),
-                null);
-
-        verify(mStatusBarKeyguardViewManager).showBouncer(true);
-    }
-
-    @Test
-    public void testA11y_scrollUp() {
-        mAccessibiltyDelegate.performAccessibilityAction(
-                mView,
-                AccessibilityNodeInfo.AccessibilityAction.ACTION_SCROLL_UP.getId(),
-                null);
-
-        verify(mStatusBarKeyguardViewManager).showBouncer(true);
-    }
-
-    @Test
-    public void testKeyguardStatusViewInSplitShade_changesConstraintsDependingOnNotifications() {
-        mStatusBarStateController.setState(KEYGUARD);
-        enableSplitShade(/* enabled= */ true);
-
-        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(2);
-        mNotificationPanelViewController.updateResources();
-        assertThat(getConstraintSetLayout(R.id.keyguard_status_view).endToEnd)
-                .isEqualTo(R.id.qs_edge_guideline);
-
-        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(0);
-        mNotificationPanelViewController.updateResources();
-        assertThat(getConstraintSetLayout(R.id.keyguard_status_view).endToEnd)
-                .isEqualTo(ConstraintSet.PARENT_ID);
-    }
-
-    @Test
-    public void testDisableUserSwitcherAfterEnabling_returnsViewStubToTheViewHierarchy() {
-        givenViewAttached();
-        when(mResources.getBoolean(
-                com.android.internal.R.bool.config_keyguardUserSwitcher)).thenReturn(true);
-        updateMultiUserSetting(true);
-        clearInvocations(mView);
-
-        updateMultiUserSetting(false);
-
-        ArgumentCaptor<View> captor = ArgumentCaptor.forClass(View.class);
-        verify(mView, atLeastOnce()).addView(captor.capture(), anyInt());
-        final View userSwitcherStub = CollectionUtils.find(captor.getAllValues(),
-                view -> view.getId() == R.id.keyguard_user_switcher_stub);
-        assertThat(userSwitcherStub).isNotNull();
-        assertThat(userSwitcherStub).isInstanceOf(ViewStub.class);
-    }
-
-    @Test
-    public void testChangeSmallestScreenWidthAndUserSwitchEnabled_inflatesUserSwitchView() {
-        givenViewAttached();
-        when(mView.findViewById(R.id.keyguard_user_switcher_view)).thenReturn(null);
-        updateSmallestScreenWidth(300);
-        when(mResources.getBoolean(
-                com.android.internal.R.bool.config_keyguardUserSwitcher)).thenReturn(true);
-        when(mResources.getBoolean(R.bool.qs_show_user_switcher_for_single_user)).thenReturn(false);
-        when(mUserManager.isUserSwitcherEnabled(false)).thenReturn(true);
-
-        updateSmallestScreenWidth(800);
-
-        verify(mUserSwitcherStubView).inflate();
-    }
-
-    @Test
-    public void testFinishInflate_userSwitcherDisabled_doNotInflateUserSwitchView() {
-        givenViewAttached();
-        when(mResources.getBoolean(
-                com.android.internal.R.bool.config_keyguardUserSwitcher)).thenReturn(true);
-        when(mResources.getBoolean(R.bool.qs_show_user_switcher_for_single_user)).thenReturn(false);
-        when(mUserManager.isUserSwitcherEnabled(false /* showEvenIfNotActionable */))
-                .thenReturn(false);
-
-        mNotificationPanelViewController.onFinishInflate();
-
-        verify(mUserSwitcherStubView, never()).inflate();
-    }
-
-    @Test
-    public void testReInflateViews_userSwitcherDisabled_doNotInflateUserSwitchView() {
-        givenViewAttached();
-        when(mResources.getBoolean(
-                com.android.internal.R.bool.config_keyguardUserSwitcher)).thenReturn(true);
-        when(mResources.getBoolean(R.bool.qs_show_user_switcher_for_single_user)).thenReturn(false);
-        when(mUserManager.isUserSwitcherEnabled(false /* showEvenIfNotActionable */))
-                .thenReturn(false);
-
-        mNotificationPanelViewController.reInflateViews();
-
-        verify(mUserSwitcherStubView, never()).inflate();
-    }
-
-    @Test
-    public void testCanCollapsePanelOnTouch_trueForKeyGuard() {
-        mStatusBarStateController.setState(KEYGUARD);
-
-        assertThat(mNotificationPanelViewController.canCollapsePanelOnTouch()).isTrue();
-    }
-
-    @Test
-    public void testCanCollapsePanelOnTouch_trueWhenScrolledToBottom() {
-        mStatusBarStateController.setState(SHADE);
-        when(mNotificationStackScrollLayoutController.isScrolledToBottom()).thenReturn(true);
-
-        assertThat(mNotificationPanelViewController.canCollapsePanelOnTouch()).isTrue();
-    }
-
-    @Test
-    public void testCanCollapsePanelOnTouch_trueWhenInSettings() {
-        mStatusBarStateController.setState(SHADE);
-        mNotificationPanelViewController.setQsExpanded(true);
-
-        assertThat(mNotificationPanelViewController.canCollapsePanelOnTouch()).isTrue();
-    }
-
-    @Test
-    public void testCanCollapsePanelOnTouch_falseInDualPaneShade() {
-        mStatusBarStateController.setState(SHADE);
-        enableSplitShade(/* enabled= */ true);
-        mNotificationPanelViewController.setQsExpanded(true);
-
-        assertThat(mNotificationPanelViewController.canCollapsePanelOnTouch()).isFalse();
-    }
-
-    @Test
-    public void testSwipeWhileLocked_notifiesKeyguardState() {
-        mStatusBarStateController.setState(KEYGUARD);
-
-        // Fling expanded (cancelling the keyguard exit swipe). We should notify keyguard state that
-        // the fling occurred and did not dismiss the keyguard.
-        mNotificationPanelViewController.flingToHeight(
-                0f, true /* expand */, 1000f, 1f, false);
-        verify(mKeyguardStateController).notifyPanelFlingStart(false /* dismissKeyguard */);
-
-        // Fling un-expanded, which is a keyguard exit fling when we're in KEYGUARD state.
-        mNotificationPanelViewController.flingToHeight(
-                0f, false /* expand */, 1000f, 1f, false);
-        verify(mKeyguardStateController).notifyPanelFlingStart(true /* dismissKeyguard */);
-    }
-
-    @Test
-    public void testCancelSwipeWhileLocked_notifiesKeyguardState() {
-        mStatusBarStateController.setState(KEYGUARD);
-
-        // Fling expanded (cancelling the keyguard exit swipe). We should notify keyguard state that
-        // the fling occurred and did not dismiss the keyguard.
-        mNotificationPanelViewController.flingToHeight(
-                0f, true /* expand */, 1000f, 1f, false);
-        mNotificationPanelViewController.cancelHeightAnimator();
-        verify(mKeyguardStateController).notifyPanelFlingEnd();
-    }
-
-    @Test
-    public void testSwipe_exactlyToTarget_notifiesNssl() {
-        // No over-expansion
-        mNotificationPanelViewController.setOverExpansion(0f);
-        // Fling to a target that is equal to the current position (i.e. a no-op fling).
-        mNotificationPanelViewController.flingToHeight(
-                0f,
-                true,
-                mNotificationPanelViewController.mExpandedHeight,
-                1f,
-                false);
-        // Verify that the NSSL is notified that the panel is *not* flinging.
-        verify(mNotificationStackScrollLayoutController).setPanelFlinging(false);
-    }
-
-    @Test
-    public void testDoubleTapRequired_Keyguard() {
-        FalsingManager.FalsingTapListener listener = getFalsingTapListener();
-        mStatusBarStateController.setState(KEYGUARD);
-
-        listener.onDoubleTapRequired();
-
-        verify(mKeyguardIndicationController).showTransientIndication(anyInt());
-    }
-
-    @Test
-    public void testDoubleTapRequired_ShadeLocked() {
-        FalsingManager.FalsingTapListener listener = getFalsingTapListener();
-        mStatusBarStateController.setState(SHADE_LOCKED);
-
-        listener.onDoubleTapRequired();
-
-        verify(mTapAgainViewController).show();
-    }
-
-    @Test
-    public void testSwitchesToCorrectClockInSinglePaneShade() {
-        mStatusBarStateController.setState(KEYGUARD);
-
-        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(0);
-        triggerPositionClockAndNotifications();
-        verify(mKeyguardStatusViewController).displayClock(LARGE, /* animate */ true);
-
-        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(1);
-        mNotificationPanelViewController.closeQs();
-        verify(mKeyguardStatusViewController).displayClock(SMALL, /* animate */ true);
-    }
-
-    @Test
-    public void testSwitchesToCorrectClockInSplitShade() {
-        mStatusBarStateController.setState(KEYGUARD);
-        enableSplitShade(/* enabled= */ true);
-        clearInvocations(mKeyguardStatusViewController);
-
-        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(0);
-        triggerPositionClockAndNotifications();
-        verify(mKeyguardStatusViewController).displayClock(LARGE, /* animate */ true);
-
-        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(1);
-        triggerPositionClockAndNotifications();
-        verify(mKeyguardStatusViewController, times(2))
-                .displayClock(LARGE, /* animate */ true);
-        verify(mKeyguardStatusViewController, never())
-                .displayClock(SMALL, /* animate */ true);
-    }
-
-    @Test
-    public void testHasNotifications_switchesToLargeClockWhenEnteringSplitShade() {
-        mStatusBarStateController.setState(KEYGUARD);
-        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(1);
-
-        enableSplitShade(/* enabled= */ true);
-
-        verify(mKeyguardStatusViewController).displayClock(LARGE, /* animate */ true);
-    }
-
-    @Test
-    public void testNoNotifications_switchesToLargeClockWhenEnteringSplitShade() {
-        mStatusBarStateController.setState(KEYGUARD);
-        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(0);
-
-        enableSplitShade(/* enabled= */ true);
-
-        verify(mKeyguardStatusViewController).displayClock(LARGE, /* animate */ true);
-    }
-
-    @Test
-    public void testHasNotifications_switchesToSmallClockWhenExitingSplitShade() {
-        mStatusBarStateController.setState(KEYGUARD);
-        enableSplitShade(/* enabled= */ true);
-        clearInvocations(mKeyguardStatusViewController);
-        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(1);
-
-        enableSplitShade(/* enabled= */ false);
-
-        verify(mKeyguardStatusViewController).displayClock(SMALL, /* animate */ true);
-    }
-
-    @Test
-    public void testNoNotifications_switchesToLargeClockWhenExitingSplitShade() {
-        mStatusBarStateController.setState(KEYGUARD);
-        enableSplitShade(/* enabled= */ true);
-        clearInvocations(mKeyguardStatusViewController);
-        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(0);
-
-        enableSplitShade(/* enabled= */ false);
-
-        verify(mKeyguardStatusViewController).displayClock(LARGE, /* animate */ true);
-    }
-
-    @Test
-    public void testSwitchesToBigClockInSplitShadeOnAod() {
-        mStatusBarStateController.setState(KEYGUARD);
-        enableSplitShade(/* enabled= */ true);
-        when(mMediaDataManager.hasActiveMediaOrRecommendation()).thenReturn(true);
-        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(2);
-        clearInvocations(mKeyguardStatusViewController);
-
-        mNotificationPanelViewController.setDozing(true, false, null);
-
-        verify(mKeyguardStatusViewController).displayClock(LARGE, /* animate */ true);
-    }
-
-    @Test
-    public void testSwitchesToBigClockInSplitShadeOnAodAnimateDisabled() {
-        when(mScreenOffAnimationController.shouldAnimateClockChange()).thenReturn(false);
-        mStatusBarStateController.setState(KEYGUARD);
-        enableSplitShade(/* enabled= */ true);
-        clearInvocations(mKeyguardStatusViewController);
-        when(mMediaDataManager.hasActiveMedia()).thenReturn(true);
-        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(2);
-
-        mNotificationPanelViewController.setDozing(true, false, null);
-
-        verify(mKeyguardStatusViewController).displayClock(LARGE, /* animate */ false);
-    }
-
-    @Test
-    public void testDisplaysSmallClockOnLockscreenInSplitShadeWhenMediaIsPlaying() {
-        mStatusBarStateController.setState(KEYGUARD);
-        enableSplitShade(/* enabled= */ true);
-        clearInvocations(mKeyguardStatusViewController);
-        when(mMediaDataManager.hasActiveMediaOrRecommendation()).thenReturn(true);
-
-        // one notification + media player visible
-        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(1);
-        triggerPositionClockAndNotifications();
-        verify(mKeyguardStatusViewController).displayClock(SMALL, /* animate */ true);
-
-        // only media player visible
-        when(mNotificationStackScrollLayoutController.getVisibleNotificationCount()).thenReturn(0);
-        triggerPositionClockAndNotifications();
-        verify(mKeyguardStatusViewController, times(2)).displayClock(SMALL, true);
-        verify(mKeyguardStatusViewController, never()).displayClock(LARGE, /* animate */ true);
-    }
-
-    @Test
-    public void testLargeScreenHeaderMadeActiveForLargeScreen() {
-        mStatusBarStateController.setState(SHADE);
-        when(mResources.getBoolean(R.bool.config_use_large_screen_shade_header)).thenReturn(true);
-        mNotificationPanelViewController.updateResources();
-        verify(mLargeScreenShadeHeaderController).setActive(true);
-
-        when(mResources.getBoolean(R.bool.config_use_large_screen_shade_header)).thenReturn(false);
-        mNotificationPanelViewController.updateResources();
-        verify(mLargeScreenShadeHeaderController).setActive(false);
-    }
-
-    @Test
-    public void testExpandWithQsMethodIsUsingLockscreenTransitionController() {
-        enableSplitShade(/* enabled= */ true);
-        mStatusBarStateController.setState(KEYGUARD);
-
-        mNotificationPanelViewController.expandWithQs();
-
-        verify(mLockscreenShadeTransitionController).goToLockedShade(
-                /* expandedView= */null, /* needsQSAnimation= */false);
-    }
-
-    @Test
-    public void testUnlockAnimationDoesNotAffectScrim() {
-        mNotificationPanelViewController.onUnlockHintStarted();
-        verify(mScrimController).setExpansionAffectsAlpha(false);
-        mNotificationPanelViewController.onUnlockHintFinished();
-        verify(mScrimController).setExpansionAffectsAlpha(true);
-    }
-
-    @Test
-    public void testUnlockHintAnimation_runs_whenNotInPowerSaveMode_andDozeAmountIsZero() {
-        when(mPowerManager.isPowerSaveMode()).thenReturn(false);
-        when(mAmbientState.getDozeAmount()).thenReturn(0f);
-        mNotificationPanelViewController.startUnlockHintAnimation();
-        assertThat(mNotificationPanelViewController.mHintAnimationRunning).isTrue();
-    }
-
-    @Test
-    public void testUnlockHintAnimation_doesNotRun_inPowerSaveMode() {
-        when(mPowerManager.isPowerSaveMode()).thenReturn(true);
-        mNotificationPanelViewController.startUnlockHintAnimation();
-        assertThat(mNotificationPanelViewController.mHintAnimationRunning).isFalse();
-    }
-
-    @Test
-    public void testUnlockHintAnimation_doesNotRun_whenDozeAmountNotZero() {
-        when(mPowerManager.isPowerSaveMode()).thenReturn(false);
-        when(mAmbientState.getDozeAmount()).thenReturn(0.5f);
-        mNotificationPanelViewController.startUnlockHintAnimation();
-        assertThat(mNotificationPanelViewController.mHintAnimationRunning).isFalse();
-    }
-
-    @Test
-    public void setKeyguardStatusBarAlpha_setsAlphaOnKeyguardStatusBarController() {
-        float statusBarAlpha = 0.5f;
-
-        mNotificationPanelViewController.setKeyguardStatusBarAlpha(statusBarAlpha);
-
-        verify(mKeyguardStatusBarViewController).setAlpha(statusBarAlpha);
-    }
-
-    @Test
-    public void testQsToBeImmediatelyExpandedWhenOpeningPanelInSplitShade() {
-        enableSplitShade(/* enabled= */ true);
-        // set panel state to CLOSED
-        mPanelExpansionStateManager.onPanelExpansionChanged(/* fraction= */ 0,
-                /* expanded= */ false, /* tracking= */ false, /* dragDownPxAmount= */ 0);
-        assertThat(mNotificationPanelViewController.mQsExpandImmediate).isFalse();
-
-        // change panel state to OPENING
-        mPanelExpansionStateManager.onPanelExpansionChanged(/* fraction= */ 0.5f,
-                /* expanded= */ true, /* tracking= */ true, /* dragDownPxAmount= */ 100);
-
-        assertThat(mNotificationPanelViewController.mQsExpandImmediate).isTrue();
-    }
-
-    @Test
-    public void testQsNotToBeImmediatelyExpandedWhenGoingFromUnlockedToLocked() {
-        enableSplitShade(/* enabled= */ true);
-        // set panel state to CLOSED
-        mPanelExpansionStateManager.onPanelExpansionChanged(/* fraction= */ 0,
-                /* expanded= */ false, /* tracking= */ false, /* dragDownPxAmount= */ 0);
-
-        // go to lockscreen, which also sets fraction to 1.0f and makes shade "expanded"
-        mStatusBarStateController.setState(KEYGUARD);
-        mPanelExpansionStateManager.onPanelExpansionChanged(/* fraction= */ 1,
-                /* expanded= */ true, /* tracking= */ true, /* dragDownPxAmount= */ 0);
-
-        assertThat(mNotificationPanelViewController.mQsExpandImmediate).isFalse();
-    }
-
-    @Test
-    public void testQsExpansionChangedToDefaultWhenRotatingFromOrToSplitShade() {
-        // to make sure shade is in expanded state
-        mNotificationPanelViewController.startWaitingForOpenPanelGesture();
-        assertThat(mNotificationPanelViewController.isQsExpanded()).isFalse();
-
-        // switch to split shade from portrait (default state)
-        enableSplitShade(/* enabled= */ true);
-        assertThat(mNotificationPanelViewController.isQsExpanded()).isTrue();
-
-        // switch to portrait from split shade
-        enableSplitShade(/* enabled= */ false);
-        assertThat(mNotificationPanelViewController.isQsExpanded()).isFalse();
-    }
-
-    @Test
-    public void interceptTouchEvent_withinQs_shadeExpanded_startsQsTracking() {
-        mNotificationPanelViewController.mQs = mQs;
-        when(mQsFrame.getX()).thenReturn(0f);
-        when(mQsFrame.getWidth()).thenReturn(1000);
-        when(mQsHeader.getTop()).thenReturn(0);
-        when(mQsHeader.getBottom()).thenReturn(1000);
-        PanelViewController.TouchHandler touchHandler =
-                mNotificationPanelViewController.createTouchHandler();
-
-        mNotificationPanelViewController.setExpandedFraction(1f);
-        touchHandler.onInterceptTouchEvent(
-                createMotionEvent(/* x= */ 0, /* y= */ 0, MotionEvent.ACTION_DOWN));
-        touchHandler.onInterceptTouchEvent(
-                createMotionEvent(/* x= */ 0, /* y= */ 500, MotionEvent.ACTION_MOVE));
-
-        assertThat(mNotificationPanelViewController.isQsTracking()).isTrue();
-    }
-
-    @Test
-    public void interceptTouchEvent_withinQs_shadeExpanded_inSplitShade_doesNotStartQsTracking() {
-        enableSplitShade(true);
-        mNotificationPanelViewController.mQs = mQs;
-        when(mQsFrame.getX()).thenReturn(0f);
-        when(mQsFrame.getWidth()).thenReturn(1000);
-        when(mQsHeader.getTop()).thenReturn(0);
-        when(mQsHeader.getBottom()).thenReturn(1000);
-        PanelViewController.TouchHandler touchHandler =
-                mNotificationPanelViewController.createTouchHandler();
-
-        mNotificationPanelViewController.setExpandedFraction(1f);
-        touchHandler.onInterceptTouchEvent(
-                createMotionEvent(/* x= */ 0, /* y= */ 0, MotionEvent.ACTION_DOWN));
-        touchHandler.onInterceptTouchEvent(
-                createMotionEvent(/* x= */ 0, /* y= */ 500, MotionEvent.ACTION_MOVE));
-
-        assertThat(mNotificationPanelViewController.isQsTracking()).isFalse();
-    }
-
-    @Test
-    public void testOnAttachRefreshStatusBarState() {
-        mStatusBarStateController.setState(KEYGUARD);
-        when(mKeyguardStateController.isKeyguardFadingAway()).thenReturn(false);
-        for (View.OnAttachStateChangeListener listener : mOnAttachStateChangeListeners) {
-            listener.onViewAttachedToWindow(mView);
-        }
-        verify(mKeyguardStatusViewController).setKeyguardStatusViewVisibility(
-                KEYGUARD/*statusBarState*/,
-                false/*keyguardFadingAway*/,
-                false/*goingToFullShade*/, SHADE/*oldStatusBarState*/);
-    }
-
-    private static MotionEvent createMotionEvent(int x, int y, int action) {
-        return MotionEvent.obtain(
-                /* downTime= */ 0, /* eventTime= */ 0, action, x, y, /* metaState= */ 0);
-    }
-
-    private void triggerPositionClockAndNotifications() {
-        mNotificationPanelViewController.closeQs();
-    }
-
-    private FalsingManager.FalsingTapListener getFalsingTapListener() {
-        for (View.OnAttachStateChangeListener listener : mOnAttachStateChangeListeners) {
-            listener.onViewAttachedToWindow(mView);
-        }
-        assertThat(mFalsingManager.getTapListeners().size()).isEqualTo(1);
-        return mFalsingManager.getTapListeners().get(0);
-    }
-
-    private void givenViewAttached() {
-        for (View.OnAttachStateChangeListener listener : mOnAttachStateChangeListeners) {
-            listener.onViewAttachedToWindow(mView);
-        }
-    }
-
-    private void givenViewDetached() {
-        for (View.OnAttachStateChangeListener listener : mOnAttachStateChangeListeners) {
-            listener.onViewDetachedFromWindow(mView);
-        }
-    }
-
-    private ConstraintSet.Layout getConstraintSetLayout(@IdRes int id) {
-        ConstraintSet constraintSet = new ConstraintSet();
-        constraintSet.clone(mNotificationContainerParent);
-        return constraintSet.getConstraint(id).layout;
-    }
-
-    private void enableSplitShade(boolean enabled) {
-        when(mResources.getBoolean(R.bool.config_use_split_notification_shade)).thenReturn(enabled);
-        mNotificationPanelViewController.updateResources();
-    }
-
-    private void updateMultiUserSetting(boolean enabled) {
-        when(mResources.getBoolean(R.bool.qs_show_user_switcher_for_single_user)).thenReturn(false);
-        when(mUserManager.isUserSwitcherEnabled(false)).thenReturn(enabled);
-        final ArgumentCaptor<ContentObserver> observerCaptor =
-                ArgumentCaptor.forClass(ContentObserver.class);
-        verify(mContentResolver)
-                .registerContentObserver(any(), anyBoolean(), observerCaptor.capture());
-        observerCaptor.getValue().onChange(/* selfChange */ false);
-    }
-
-    private void updateSmallestScreenWidth(int smallestScreenWidthDp) {
-        Configuration configuration = new Configuration();
-        configuration.smallestScreenWidthDp = smallestScreenWidthDp;
-        mConfigurationController.onConfigurationChanged(configuration);
-    }
-
-    private void onTouchEvent(MotionEvent ev) {
-        mTouchHandler.onTouch(mView, ev);
-    }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationQSContainerControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationQSContainerControllerTest.kt
deleted file mode 100644
index de40b7f..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationQSContainerControllerTest.kt
+++ /dev/null
@@ -1,481 +0,0 @@
-package com.android.systemui.statusbar.phone
-
-import android.testing.AndroidTestingRunner
-import android.testing.TestableLooper
-import android.view.View
-import android.view.ViewGroup
-import android.view.WindowInsets
-import android.view.WindowManagerPolicyConstants
-import androidx.annotation.IdRes
-import androidx.constraintlayout.widget.ConstraintLayout
-import androidx.constraintlayout.widget.ConstraintSet
-import androidx.test.filters.SmallTest
-import com.android.systemui.R
-import com.android.systemui.SysuiTestCase
-import com.android.systemui.flags.FeatureFlags
-import com.android.systemui.navigationbar.NavigationModeController
-import com.android.systemui.navigationbar.NavigationModeController.ModeChangedListener
-import com.android.systemui.recents.OverviewProxyService
-import com.android.systemui.recents.OverviewProxyService.OverviewProxyListener
-import com.android.systemui.util.concurrency.FakeExecutor
-import com.android.systemui.util.time.FakeSystemClock
-import com.google.common.truth.Truth.assertThat
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.mockito.ArgumentCaptor
-import org.mockito.Captor
-import org.mockito.Mock
-import org.mockito.Mockito
-import org.mockito.Mockito.RETURNS_DEEP_STUBS
-import org.mockito.Mockito.anyInt
-import org.mockito.Mockito.doNothing
-import org.mockito.Mockito.eq
-import org.mockito.Mockito.mock
-import org.mockito.Mockito.never
-import org.mockito.Mockito.verify
-import org.mockito.MockitoAnnotations
-import java.util.function.Consumer
-import org.mockito.Mockito.`when` as whenever
-
-@SmallTest
-@RunWith(AndroidTestingRunner::class)
-@TestableLooper.RunWithLooper
-class NotificationQSContainerControllerTest : SysuiTestCase() {
-
-    companion object {
-        const val STABLE_INSET_BOTTOM = 100
-        const val CUTOUT_HEIGHT = 50
-        const val GESTURES_NAVIGATION = WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL
-        const val BUTTONS_NAVIGATION = WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON
-        const val NOTIFICATIONS_MARGIN = 50
-        const val SCRIM_MARGIN = 10
-        const val FOOTER_ACTIONS_INSET = 2
-        const val FOOTER_ACTIONS_PADDING = 2
-        const val FOOTER_ACTIONS_OFFSET = FOOTER_ACTIONS_INSET + FOOTER_ACTIONS_PADDING
-        const val QS_PADDING_OFFSET = SCRIM_MARGIN + FOOTER_ACTIONS_OFFSET
-    }
-
-    @Mock
-    private lateinit var navigationModeController: NavigationModeController
-    @Mock
-    private lateinit var overviewProxyService: OverviewProxyService
-    @Mock
-    private lateinit var notificationsQSContainer: NotificationsQuickSettingsContainer
-    @Mock
-    private lateinit var featureFlags: FeatureFlags
-    @Captor
-    lateinit var navigationModeCaptor: ArgumentCaptor<ModeChangedListener>
-    @Captor
-    lateinit var taskbarVisibilityCaptor: ArgumentCaptor<OverviewProxyListener>
-    @Captor
-    lateinit var windowInsetsCallbackCaptor: ArgumentCaptor<Consumer<WindowInsets>>
-    @Captor
-    lateinit var constraintSetCaptor: ArgumentCaptor<ConstraintSet>
-
-    private lateinit var controller: NotificationsQSContainerController
-    private lateinit var navigationModeCallback: ModeChangedListener
-    private lateinit var taskbarVisibilityCallback: OverviewProxyListener
-    private lateinit var windowInsetsCallback: Consumer<WindowInsets>
-    private lateinit var delayableExecutor: FakeExecutor
-    private lateinit var fakeSystemClock: FakeSystemClock
-
-    @Before
-    fun setup() {
-        MockitoAnnotations.initMocks(this)
-        mContext.ensureTestableResources()
-        whenever(notificationsQSContainer.context).thenReturn(mContext)
-        whenever(notificationsQSContainer.resources).thenReturn(mContext.resources)
-        fakeSystemClock = FakeSystemClock()
-        delayableExecutor = FakeExecutor(fakeSystemClock)
-        controller = NotificationsQSContainerController(
-                notificationsQSContainer,
-                navigationModeController,
-                overviewProxyService,
-                featureFlags,
-                delayableExecutor
-        )
-
-        overrideResource(R.dimen.split_shade_notifications_scrim_margin_bottom, SCRIM_MARGIN)
-        overrideResource(R.dimen.notification_panel_margin_bottom, NOTIFICATIONS_MARGIN)
-        overrideResource(R.bool.config_use_split_notification_shade, false)
-        overrideResource(R.dimen.qs_footer_actions_bottom_padding, FOOTER_ACTIONS_PADDING)
-        overrideResource(R.dimen.qs_footer_action_inset, FOOTER_ACTIONS_INSET)
-        whenever(navigationModeController.addListener(navigationModeCaptor.capture()))
-                .thenReturn(GESTURES_NAVIGATION)
-        doNothing().`when`(overviewProxyService).addCallback(taskbarVisibilityCaptor.capture())
-        doNothing().`when`(notificationsQSContainer)
-                .setInsetsChangedListener(windowInsetsCallbackCaptor.capture())
-        doNothing().`when`(notificationsQSContainer).applyConstraints(constraintSetCaptor.capture())
-
-        controller.init()
-        controller.onViewAttached()
-
-        navigationModeCallback = navigationModeCaptor.value
-        taskbarVisibilityCallback = taskbarVisibilityCaptor.value
-        windowInsetsCallback = windowInsetsCallbackCaptor.value
-    }
-
-    @Test
-    fun testTaskbarVisibleInSplitShade() {
-        enableSplitShade()
-
-        given(taskbarVisible = true,
-                navigationMode = GESTURES_NAVIGATION,
-                insets = windowInsets().withStableBottom())
-        then(expectedContainerPadding = 0, // taskbar should disappear when shade is expanded
-                expectedNotificationsMargin = NOTIFICATIONS_MARGIN,
-                expectedQsPadding = NOTIFICATIONS_MARGIN - QS_PADDING_OFFSET)
-
-        given(taskbarVisible = true,
-                navigationMode = BUTTONS_NAVIGATION,
-                insets = windowInsets().withStableBottom())
-        then(expectedContainerPadding = STABLE_INSET_BOTTOM,
-                expectedNotificationsMargin = NOTIFICATIONS_MARGIN,
-                expectedQsPadding = NOTIFICATIONS_MARGIN - QS_PADDING_OFFSET)
-    }
-
-    @Test
-    fun testTaskbarNotVisibleInSplitShade() {
-        // when taskbar is not visible, it means we're on the home screen
-        enableSplitShade()
-
-        given(taskbarVisible = false,
-                navigationMode = GESTURES_NAVIGATION,
-                insets = windowInsets().withStableBottom())
-        then(expectedContainerPadding = 0,
-                expectedQsPadding = NOTIFICATIONS_MARGIN - QS_PADDING_OFFSET)
-
-        given(taskbarVisible = false,
-                navigationMode = BUTTONS_NAVIGATION,
-                insets = windowInsets().withStableBottom())
-        then(expectedContainerPadding = 0, // qs goes full height as it's not obscuring nav buttons
-                expectedNotificationsMargin = STABLE_INSET_BOTTOM + NOTIFICATIONS_MARGIN,
-                expectedQsPadding = STABLE_INSET_BOTTOM + NOTIFICATIONS_MARGIN - QS_PADDING_OFFSET)
-    }
-
-    @Test
-    fun testTaskbarNotVisibleInSplitShadeWithCutout() {
-        enableSplitShade()
-
-        given(taskbarVisible = false,
-                navigationMode = GESTURES_NAVIGATION,
-                insets = windowInsets().withCutout())
-        then(expectedContainerPadding = CUTOUT_HEIGHT,
-            expectedQsPadding = NOTIFICATIONS_MARGIN - QS_PADDING_OFFSET)
-
-        given(taskbarVisible = false,
-                navigationMode = BUTTONS_NAVIGATION,
-                insets = windowInsets().withCutout().withStableBottom())
-        then(expectedContainerPadding = 0,
-                expectedNotificationsMargin = STABLE_INSET_BOTTOM + NOTIFICATIONS_MARGIN,
-                expectedQsPadding = STABLE_INSET_BOTTOM + NOTIFICATIONS_MARGIN - QS_PADDING_OFFSET)
-    }
-
-    @Test
-    fun testTaskbarVisibleInSinglePaneShade() {
-        disableSplitShade()
-
-        given(taskbarVisible = true,
-                navigationMode = GESTURES_NAVIGATION,
-                insets = windowInsets().withStableBottom())
-        then(expectedContainerPadding = 0,
-                expectedQsPadding = STABLE_INSET_BOTTOM)
-
-        given(taskbarVisible = true,
-                navigationMode = BUTTONS_NAVIGATION,
-                insets = windowInsets().withStableBottom())
-        then(expectedContainerPadding = STABLE_INSET_BOTTOM,
-                expectedQsPadding = STABLE_INSET_BOTTOM)
-    }
-
-    @Test
-    fun testTaskbarNotVisibleInSinglePaneShade() {
-        disableSplitShade()
-
-        given(taskbarVisible = false,
-                navigationMode = GESTURES_NAVIGATION,
-                insets = emptyInsets())
-        then(expectedContainerPadding = 0)
-
-        given(taskbarVisible = false,
-                navigationMode = GESTURES_NAVIGATION,
-                insets = windowInsets().withCutout().withStableBottom())
-        then(expectedContainerPadding = CUTOUT_HEIGHT, expectedQsPadding = STABLE_INSET_BOTTOM)
-
-        given(taskbarVisible = false,
-                navigationMode = BUTTONS_NAVIGATION,
-                insets = windowInsets().withStableBottom())
-        then(expectedContainerPadding = 0,
-                expectedNotificationsMargin = STABLE_INSET_BOTTOM + NOTIFICATIONS_MARGIN,
-                expectedQsPadding = STABLE_INSET_BOTTOM)
-    }
-
-    @Test
-    fun testCustomizingInSinglePaneShade() {
-        disableSplitShade()
-        controller.setCustomizerShowing(true)
-
-        // always sets spacings to 0
-        given(taskbarVisible = false,
-                navigationMode = GESTURES_NAVIGATION,
-                insets = windowInsets().withStableBottom())
-        then(expectedContainerPadding = 0,
-                expectedNotificationsMargin = 0)
-
-        given(taskbarVisible = false,
-                navigationMode = BUTTONS_NAVIGATION,
-                insets = emptyInsets())
-        then(expectedContainerPadding = 0,
-                expectedNotificationsMargin = 0)
-    }
-
-    @Test
-    fun testDetailShowingInSinglePaneShade() {
-        disableSplitShade()
-        controller.setDetailShowing(true)
-
-        // always sets spacings to 0
-        given(taskbarVisible = false,
-                navigationMode = GESTURES_NAVIGATION,
-                insets = windowInsets().withStableBottom())
-        then(expectedContainerPadding = 0,
-                expectedNotificationsMargin = 0)
-
-        given(taskbarVisible = false,
-                navigationMode = BUTTONS_NAVIGATION,
-                insets = emptyInsets())
-        then(expectedContainerPadding = 0,
-                expectedNotificationsMargin = 0)
-    }
-
-    @Test
-    fun testDetailShowingInSplitShade() {
-        enableSplitShade()
-        controller.setDetailShowing(true)
-
-        given(taskbarVisible = false,
-                navigationMode = GESTURES_NAVIGATION,
-                insets = windowInsets().withStableBottom())
-        then(expectedContainerPadding = 0)
-
-        // should not influence spacing
-        given(taskbarVisible = false,
-                navigationMode = BUTTONS_NAVIGATION,
-                insets = emptyInsets())
-        then(expectedContainerPadding = 0)
-    }
-
-    @Test
-    fun testNotificationsMarginBottomIsUpdated() {
-        Mockito.clearInvocations(notificationsQSContainer)
-        enableSplitShade()
-        verify(notificationsQSContainer).setNotificationsMarginBottom(NOTIFICATIONS_MARGIN)
-
-        overrideResource(R.dimen.notification_panel_margin_bottom, 100)
-        disableSplitShade()
-        verify(notificationsQSContainer).setNotificationsMarginBottom(100)
-    }
-
-    @Test
-    fun testSplitShadeLayout_isAlignedToGuideline() {
-        enableSplitShade()
-        controller.updateResources()
-        assertThat(getConstraintSetLayout(R.id.qs_frame).endToEnd)
-                .isEqualTo(R.id.qs_edge_guideline)
-        assertThat(getConstraintSetLayout(R.id.notification_stack_scroller).startToStart)
-                .isEqualTo(R.id.qs_edge_guideline)
-    }
-
-    @Test
-    fun testSinglePaneLayout_childrenHaveEqualMargins() {
-        disableSplitShade()
-        controller.updateResources()
-        val qsStartMargin = getConstraintSetLayout(R.id.qs_frame).startMargin
-        val qsEndMargin = getConstraintSetLayout(R.id.qs_frame).endMargin
-        val notifStartMargin = getConstraintSetLayout(R.id.notification_stack_scroller).startMargin
-        val notifEndMargin = getConstraintSetLayout(R.id.notification_stack_scroller).endMargin
-        assertThat(qsStartMargin == qsEndMargin &&
-                notifStartMargin == notifEndMargin &&
-                qsStartMargin == notifStartMargin
-        ).isTrue()
-    }
-
-    @Test
-    fun testSplitShadeLayout_childrenHaveInsideMarginsOfZero() {
-        enableSplitShade()
-        controller.updateResources()
-        assertThat(getConstraintSetLayout(R.id.qs_frame).endMargin).isEqualTo(0)
-        assertThat(getConstraintSetLayout(R.id.notification_stack_scroller).startMargin)
-                .isEqualTo(0)
-    }
-
-    @Test
-    fun testSplitShadeLayout_qsFrameHasHorizontalMarginsOfZero() {
-        enableSplitShade()
-        controller.updateResources()
-        assertThat(getConstraintSetLayout(R.id.qs_frame).endMargin).isEqualTo(0)
-        assertThat(getConstraintSetLayout(R.id.qs_frame).startMargin).isEqualTo(0)
-    }
-
-    @Test
-    fun testLargeScreenLayout_qsAndNotifsTopMarginIsOfHeaderHeight() {
-        setLargeScreen()
-        val largeScreenHeaderHeight = 100
-        overrideResource(R.dimen.large_screen_shade_header_height, largeScreenHeaderHeight)
-
-        controller.updateResources()
-
-        assertThat(getConstraintSetLayout(R.id.qs_frame).topMargin)
-                .isEqualTo(largeScreenHeaderHeight)
-        assertThat(getConstraintSetLayout(R.id.notification_stack_scroller).topMargin)
-                .isEqualTo(largeScreenHeaderHeight)
-    }
-
-    @Test
-    fun testSmallScreenLayout_qsAndNotifsTopMarginIsZero() {
-        setSmallScreen()
-        controller.updateResources()
-        assertThat(getConstraintSetLayout(R.id.qs_frame).topMargin).isEqualTo(0)
-        assertThat(getConstraintSetLayout(R.id.notification_stack_scroller).topMargin)
-                .isEqualTo(0)
-    }
-
-    @Test
-    fun testSinglePaneShadeLayout_qsFrameHasHorizontalMarginsSetToCorrectValue() {
-        disableSplitShade()
-        controller.updateResources()
-        val notificationPanelMarginHorizontal = context.resources
-                .getDimensionPixelSize(R.dimen.notification_panel_margin_horizontal)
-        assertThat(getConstraintSetLayout(R.id.qs_frame).endMargin)
-                .isEqualTo(notificationPanelMarginHorizontal)
-        assertThat(getConstraintSetLayout(R.id.qs_frame).startMargin)
-                .isEqualTo(notificationPanelMarginHorizontal)
-    }
-
-    @Test
-    fun testSinglePaneShadeLayout_isAlignedToParent() {
-        disableSplitShade()
-        controller.updateResources()
-        assertThat(getConstraintSetLayout(R.id.qs_frame).endToEnd)
-                .isEqualTo(ConstraintSet.PARENT_ID)
-        assertThat(getConstraintSetLayout(R.id.notification_stack_scroller).startToStart)
-                .isEqualTo(ConstraintSet.PARENT_ID)
-    }
-
-    @Test
-    fun testAllChildrenOfNotificationContainer_haveIds() {
-        // set dimen to 0 to avoid triggering updating bottom spacing
-        overrideResource(R.dimen.split_shade_notifications_scrim_margin_bottom, 0)
-        val container = NotificationsQuickSettingsContainer(context, null)
-        container.removeAllViews()
-        container.addView(newViewWithId(1))
-        container.addView(newViewWithId(View.NO_ID))
-        val controller = NotificationsQSContainerController(container, navigationModeController,
-                overviewProxyService, featureFlags, delayableExecutor)
-        controller.updateConstraints()
-
-        assertThat(container.getChildAt(0).id).isEqualTo(1)
-        assertThat(container.getChildAt(1).id).isNotEqualTo(View.NO_ID)
-    }
-
-    @Test
-    fun testWindowInsetDebounce() {
-        disableSplitShade()
-
-        given(taskbarVisible = false,
-            navigationMode = GESTURES_NAVIGATION,
-            insets = emptyInsets(),
-            applyImmediately = false)
-        fakeSystemClock.advanceTime(INSET_DEBOUNCE_MILLIS / 2)
-        windowInsetsCallback.accept(windowInsets().withStableBottom())
-
-        delayableExecutor.advanceClockToLast()
-        delayableExecutor.runAllReady()
-
-        verify(notificationsQSContainer, never()).setQSContainerPaddingBottom(0)
-        verify(notificationsQSContainer).setQSContainerPaddingBottom(STABLE_INSET_BOTTOM)
-    }
-
-    private fun disableSplitShade() {
-        setSplitShadeEnabled(false)
-    }
-
-    private fun enableSplitShade() {
-        setSplitShadeEnabled(true)
-    }
-
-    private fun setSplitShadeEnabled(enabled: Boolean) {
-        overrideResource(R.bool.config_use_split_notification_shade, enabled)
-        controller.updateResources()
-    }
-
-    private fun setSmallScreen() {
-        setLargeScreenEnabled(false)
-    }
-
-    private fun setLargeScreen() {
-        setLargeScreenEnabled(true)
-    }
-
-    private fun setLargeScreenEnabled(enabled: Boolean) {
-        overrideResource(R.bool.config_use_large_screen_shade_header, enabled)
-    }
-
-    private fun given(
-        taskbarVisible: Boolean,
-        navigationMode: Int,
-        insets: WindowInsets,
-        applyImmediately: Boolean = true
-    ) {
-        Mockito.clearInvocations(notificationsQSContainer)
-        taskbarVisibilityCallback.onTaskbarStatusUpdated(taskbarVisible, false)
-        navigationModeCallback.onNavigationModeChanged(navigationMode)
-        windowInsetsCallback.accept(insets)
-        if (applyImmediately) {
-            delayableExecutor.advanceClockToLast()
-            delayableExecutor.runAllReady()
-        }
-    }
-
-    fun then(
-        expectedContainerPadding: Int,
-        expectedNotificationsMargin: Int = NOTIFICATIONS_MARGIN,
-        expectedQsPadding: Int = 0
-    ) {
-        verify(notificationsQSContainer)
-                .setPadding(anyInt(), anyInt(), anyInt(), eq(expectedContainerPadding))
-        verify(notificationsQSContainer).setNotificationsMarginBottom(expectedNotificationsMargin)
-        verify(notificationsQSContainer)
-                    .setQSContainerPaddingBottom(expectedQsPadding)
-        Mockito.clearInvocations(notificationsQSContainer)
-    }
-
-    private fun windowInsets() = mock(WindowInsets::class.java, RETURNS_DEEP_STUBS)
-
-    private fun emptyInsets() = mock(WindowInsets::class.java)
-
-    private fun WindowInsets.withCutout(): WindowInsets {
-        whenever(displayCutout.safeInsetBottom).thenReturn(CUTOUT_HEIGHT)
-        return this
-    }
-
-    private fun WindowInsets.withStableBottom(): WindowInsets {
-        whenever(stableInsetBottom).thenReturn(STABLE_INSET_BOTTOM)
-        return this
-    }
-
-    private fun getConstraintSetLayout(@IdRes id: Int): ConstraintSet.Layout {
-        return constraintSetCaptor.value.getConstraint(id).layout
-    }
-
-    private fun newViewWithId(id: Int): View {
-        val view = View(mContext)
-        view.id = id
-        val layoutParams = ConstraintLayout.LayoutParams(
-                ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
-        // required as cloning ConstraintSet fails if view doesn't have layout params
-        view.layoutParams = layoutParams
-        return view
-    }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowControllerImplTest.java
deleted file mode 100644
index c402d2e..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowControllerImplTest.java
+++ /dev/null
@@ -1,326 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.statusbar.phone;
-
-import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
-import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
-import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
-import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
-
-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.eq;
-import static org.mockito.Mockito.atLeastOnce;
-import static org.mockito.Mockito.clearInvocations;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.reset;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.Mockito.when;
-
-import android.app.IActivityManager;
-import android.content.pm.ActivityInfo;
-import android.content.res.Configuration;
-import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper.RunWithLooper;
-import android.view.View;
-import android.view.WindowManager;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.internal.colorextraction.ColorExtractor;
-import com.android.systemui.SysuiTestCase;
-import com.android.systemui.biometrics.AuthController;
-import com.android.systemui.colorextraction.SysuiColorExtractor;
-import com.android.systemui.dump.DumpManager;
-import com.android.systemui.keyguard.KeyguardViewMediator;
-import com.android.systemui.statusbar.SysuiStatusBarStateController;
-import com.android.systemui.statusbar.policy.ConfigurationController;
-import com.android.systemui.statusbar.policy.KeyguardStateController;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-@RunWith(AndroidTestingRunner.class)
-@RunWithLooper
-@SmallTest
-public class NotificationShadeWindowControllerImplTest extends SysuiTestCase {
-
-    @Mock private WindowManager mWindowManager;
-    @Mock private DozeParameters mDozeParameters;
-    @Mock private NotificationShadeWindowView mNotificationShadeWindowView;
-    @Mock private IActivityManager mActivityManager;
-    @Mock private SysuiStatusBarStateController mStatusBarStateController;
-    @Mock private ConfigurationController mConfigurationController;
-    @Mock private KeyguardViewMediator mKeyguardViewMediator;
-    @Mock private KeyguardBypassController mKeyguardBypassController;
-    @Mock private SysuiColorExtractor mColorExtractor;
-    @Mock ColorExtractor.GradientColors mGradientColors;
-    @Mock private DumpManager mDumpManager;
-    @Mock private KeyguardStateController mKeyguardStateController;
-    @Mock private ScreenOffAnimationController mScreenOffAnimationController;
-    @Mock private AuthController mAuthController;
-    @Captor private ArgumentCaptor<WindowManager.LayoutParams> mLayoutParameters;
-
-    private NotificationShadeWindowControllerImpl mNotificationShadeWindowController;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        when(mDozeParameters.getAlwaysOn()).thenReturn(true);
-        when(mColorExtractor.getNeutralColors()).thenReturn(mGradientColors);
-
-        mNotificationShadeWindowController = new NotificationShadeWindowControllerImpl(mContext,
-                mWindowManager, mActivityManager, mDozeParameters, mStatusBarStateController,
-                mConfigurationController, mKeyguardViewMediator, mKeyguardBypassController,
-                mColorExtractor, mDumpManager, mKeyguardStateController,
-                mScreenOffAnimationController, mAuthController) {
-                    @Override
-                    protected boolean isDebuggable() {
-                        return false;
-                    }
-            };
-        mNotificationShadeWindowController.setScrimsVisibilityListener((visibility) -> {});
-        mNotificationShadeWindowController.setNotificationShadeView(mNotificationShadeWindowView);
-
-        mNotificationShadeWindowController.attach();
-        verify(mWindowManager).addView(eq(mNotificationShadeWindowView), any());
-    }
-
-    @Test
-    public void testSetDozing_hidesSystemOverlays() {
-        mNotificationShadeWindowController.setDozing(true);
-        ArgumentCaptor<WindowManager.LayoutParams> captor =
-                ArgumentCaptor.forClass(WindowManager.LayoutParams.class);
-        verify(mWindowManager).updateViewLayout(any(), captor.capture());
-        int flag = captor.getValue().privateFlags
-                & WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
-        assertThat(flag).isNotEqualTo(0);
-
-        reset(mWindowManager);
-        mNotificationShadeWindowController.setDozing(false);
-        verify(mWindowManager).updateViewLayout(any(), captor.capture());
-        flag = captor.getValue().privateFlags
-                & WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
-        assertThat(flag).isEqualTo(0);
-    }
-
-    @Test
-    public void testOnThemeChanged_doesntCrash() {
-        mNotificationShadeWindowController.onThemeChanged();
-    }
-
-    @Test
-    public void testAdd_updatesVisibilityFlags() {
-        verify(mNotificationShadeWindowView).setSystemUiVisibility(anyInt());
-    }
-
-    @Test
-    public void testSetForcePluginOpen_beforeStatusBarInitialization() {
-        mNotificationShadeWindowController.setForcePluginOpen(true, this);
-    }
-
-    @Test
-    public void attach_visibleWithWallpaper() {
-        clearInvocations(mWindowManager);
-        when(mKeyguardViewMediator.isShowingAndNotOccluded()).thenReturn(true);
-        mNotificationShadeWindowController.attach();
-
-        verify(mNotificationShadeWindowView).setVisibility(eq(View.VISIBLE));
-        verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
-        assertThat((mLayoutParameters.getValue().flags & FLAG_SHOW_WALLPAPER) != 0).isTrue();
-    }
-
-    @Test
-    public void attach_lightScrimHidesWallpaper() {
-        when(mKeyguardViewMediator.isShowingAndNotOccluded()).thenReturn(true);
-        mNotificationShadeWindowController.attach();
-
-        clearInvocations(mWindowManager);
-        mNotificationShadeWindowController.setLightRevealScrimOpaque(true);
-        verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
-        assertThat((mLayoutParameters.getValue().flags & FLAG_SHOW_WALLPAPER) == 0).isTrue();
-    }
-
-    @Test
-    public void attach_scrimDoesntHideWallpaper() {
-        when(mKeyguardViewMediator.isShowingAndNotOccluded()).thenReturn(true);
-        mNotificationShadeWindowController.attach();
-
-        clearInvocations(mWindowManager);
-        mNotificationShadeWindowController.setScrimsVisibility(ScrimController.OPAQUE);
-        // The scrim used to remove the wallpaper flag, but this causes a relayout.
-        // Instead, we're not relying on SurfaceControl#setOpaque on
-        // NotificationShadeDepthController.
-        verify(mWindowManager, never()).updateViewLayout(any(), mLayoutParameters.capture());
-    }
-
-    @Test
-    public void setScrimsVisibility_earlyReturn() {
-        clearInvocations(mWindowManager);
-        mNotificationShadeWindowController.setScrimsVisibility(ScrimController.TRANSPARENT);
-        // Abort early if value didn't change
-        verify(mWindowManager, never()).updateViewLayout(any(), mLayoutParameters.capture());
-    }
-
-    @Test
-    public void attach_animatingKeyguardAndSurface_wallpaperVisible() {
-        clearInvocations(mWindowManager);
-        when(mKeyguardViewMediator.isShowingAndNotOccluded()).thenReturn(true);
-        when(mKeyguardViewMediator
-                .isAnimatingBetweenKeyguardAndSurfaceBehindOrWillBe())
-                .thenReturn(true);
-        mNotificationShadeWindowController.attach();
-
-        verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
-        assertThat((mLayoutParameters.getValue().flags & FLAG_SHOW_WALLPAPER) != 0).isTrue();
-    }
-
-    @Test
-    public void setBackgroundBlurRadius_expandedWithBlurs() {
-        mNotificationShadeWindowController.setBackgroundBlurRadius(10);
-        verify(mNotificationShadeWindowView).setVisibility(eq(View.VISIBLE));
-
-        mNotificationShadeWindowController.setBackgroundBlurRadius(0);
-        verify(mNotificationShadeWindowView).setVisibility(eq(View.INVISIBLE));
-    }
-
-    @Test
-    public void setBouncerShowing_isFocusable_whenNeedsInput() {
-        mNotificationShadeWindowController.setKeyguardNeedsInput(true);
-        clearInvocations(mWindowManager);
-        mNotificationShadeWindowController.setBouncerShowing(true);
-
-        verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
-        assertThat((mLayoutParameters.getValue().flags & FLAG_NOT_FOCUSABLE) == 0).isTrue();
-        assertThat((mLayoutParameters.getValue().flags & FLAG_ALT_FOCUSABLE_IM) == 0).isTrue();
-    }
-
-    @Test
-    public void setKeyguardShowing_focusable_notAltFocusable_whenNeedsInput() {
-        mNotificationShadeWindowController.setKeyguardShowing(true);
-        clearInvocations(mWindowManager);
-        mNotificationShadeWindowController.setKeyguardNeedsInput(true);
-
-        verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
-        assertThat((mLayoutParameters.getValue().flags & FLAG_NOT_FOCUSABLE) == 0).isTrue();
-        assertThat((mLayoutParameters.getValue().flags & FLAG_ALT_FOCUSABLE_IM) == 0).isTrue();
-    }
-
-    @Test
-    public void setPanelExpanded_notFocusable_altFocusable_whenPanelIsOpen() {
-        mNotificationShadeWindowController.setPanelExpanded(true);
-        clearInvocations(mWindowManager);
-        mNotificationShadeWindowController.setPanelExpanded(true);
-        verifyNoMoreInteractions(mWindowManager);
-        mNotificationShadeWindowController.setNotificationShadeFocusable(true);
-
-        verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
-        assertThat((mLayoutParameters.getValue().flags & FLAG_NOT_FOCUSABLE) == 0).isTrue();
-        assertThat((mLayoutParameters.getValue().flags & FLAG_ALT_FOCUSABLE_IM) != 0).isTrue();
-    }
-
-    @Test
-    public void setKeyguardShowing_notFocusable_byDefault() {
-        mNotificationShadeWindowController.setKeyguardShowing(false);
-
-        verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
-        assertThat((mLayoutParameters.getValue().flags & FLAG_NOT_FOCUSABLE) != 0).isTrue();
-        assertThat((mLayoutParameters.getValue().flags & FLAG_ALT_FOCUSABLE_IM) == 0).isTrue();
-    }
-
-    @Test
-    public void setKeyguardShowing_enablesSecureFlag() {
-        mNotificationShadeWindowController.setBouncerShowing(true);
-
-        verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
-        assertThat((mLayoutParameters.getValue().flags & FLAG_SECURE) != 0).isTrue();
-    }
-
-    @Test
-    public void setKeyguardNotShowing_disablesSecureFlag() {
-        mNotificationShadeWindowController.setBouncerShowing(false);
-
-        verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
-        assertThat((mLayoutParameters.getValue().flags & FLAG_SECURE) == 0).isTrue();
-    }
-
-    @Test
-    public void rotationBecameAllowed_layoutParamsUpdated() {
-        mNotificationShadeWindowController.setKeyguardShowing(true);
-        when(mKeyguardStateController.isKeyguardScreenRotationAllowed()).thenReturn(false);
-        mNotificationShadeWindowController.onConfigChanged(new Configuration());
-        clearInvocations(mWindowManager);
-
-        when(mKeyguardStateController.isKeyguardScreenRotationAllowed()).thenReturn(true);
-        mNotificationShadeWindowController.onConfigChanged(new Configuration());
-
-        verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
-        assertThat(mLayoutParameters.getValue().screenOrientation)
-                .isEqualTo(ActivityInfo.SCREEN_ORIENTATION_USER);
-    }
-
-    @Test
-    public void rotationBecameNotAllowed_layoutParamsUpdated() {
-        mNotificationShadeWindowController.setKeyguardShowing(true);
-        when(mKeyguardStateController.isKeyguardScreenRotationAllowed()).thenReturn(true);
-        mNotificationShadeWindowController.onConfigChanged(new Configuration());
-        clearInvocations(mWindowManager);
-
-        when(mKeyguardStateController.isKeyguardScreenRotationAllowed()).thenReturn(false);
-        mNotificationShadeWindowController.onConfigChanged(new Configuration());
-
-        verify(mWindowManager).updateViewLayout(any(), mLayoutParameters.capture());
-        assertThat(mLayoutParameters.getValue().screenOrientation)
-                .isEqualTo(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
-    }
-
-    @Test
-    public void batchApplyWindowLayoutParams_doesNotDispatchEvents() {
-        mNotificationShadeWindowController.setForceDozeBrightness(true);
-        verify(mWindowManager).updateViewLayout(any(), any());
-        mNotificationShadeWindowController.setForceDozeBrightness(true);
-        verifyNoMoreInteractions(mWindowManager);
-
-        clearInvocations(mWindowManager);
-        mNotificationShadeWindowController.batchApplyWindowLayoutParams(()-> {
-            mNotificationShadeWindowController.setForceDozeBrightness(false);
-            verify(mWindowManager, never()).updateViewLayout(any(), any());
-        });
-        verify(mWindowManager).updateViewLayout(any(), any());
-    }
-
-    @Test
-    public void bouncerShowing_OrientationNoSensor() {
-        mNotificationShadeWindowController.setKeyguardShowing(true);
-        mNotificationShadeWindowController.setKeyguardOccluded(true);
-        mNotificationShadeWindowController.setBouncerShowing(true);
-        when(mKeyguardStateController.isKeyguardScreenRotationAllowed()).thenReturn(false);
-        mNotificationShadeWindowController.onConfigChanged(new Configuration());
-
-        verify(mWindowManager, atLeastOnce()).updateViewLayout(any(), mLayoutParameters.capture());
-        assertThat(mLayoutParameters.getValue().screenOrientation)
-                .isEqualTo(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
-    }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewControllerTest.kt
deleted file mode 100644
index 7e245fc..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewControllerTest.kt
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.statusbar.phone
-
-import android.testing.AndroidTestingRunner
-import android.testing.TestableLooper.RunWithLooper
-import android.view.MotionEvent
-import androidx.test.filters.SmallTest
-import com.android.keyguard.LockIconViewController
-import com.android.systemui.SysuiTestCase
-import com.android.systemui.classifier.FalsingCollectorFake
-import com.android.systemui.dock.DockManager
-import com.android.systemui.keyguard.KeyguardUnlockAnimationController
-import com.android.systemui.lowlightclock.LowLightClockController
-import com.android.systemui.statusbar.LockscreenShadeTransitionController
-import com.android.systemui.statusbar.NotificationShadeDepthController
-import com.android.systemui.statusbar.NotificationShadeWindowController
-import com.android.systemui.statusbar.SysuiStatusBarStateController
-import com.android.systemui.statusbar.notification.stack.AmbientState
-import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
-import com.android.systemui.statusbar.phone.NotificationShadeWindowView.InteractionEventHandler
-import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager
-import com.android.systemui.statusbar.window.StatusBarWindowStateController
-import com.android.systemui.tuner.TunerService
-import com.google.common.truth.Truth.assertThat
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.mockito.ArgumentCaptor
-import org.mockito.ArgumentMatchers
-import org.mockito.Mock
-import org.mockito.MockitoAnnotations
-import org.mockito.Mockito.anyFloat
-import org.mockito.Mockito.never
-import org.mockito.Mockito.verify
-import java.util.Optional
-import org.mockito.Mockito.`when` as whenever
-
-@RunWith(AndroidTestingRunner::class)
-@RunWithLooper(setAsMainLooper = true)
-@SmallTest
-class NotificationShadeWindowViewControllerTest : SysuiTestCase() {
-    private lateinit var mController: NotificationShadeWindowViewController
-
-    @Mock
-    private lateinit var mView: NotificationShadeWindowView
-    @Mock
-    private lateinit var mTunerService: TunerService
-    @Mock
-    private lateinit var mStatusBarStateController: SysuiStatusBarStateController
-    @Mock
-    private lateinit var mCentralSurfaces: CentralSurfaces
-    @Mock
-    private lateinit var mDockManager: DockManager
-    @Mock
-    private lateinit var mNotificationPanelViewController: NotificationPanelViewController
-    @Mock
-    private lateinit var mNotificationShadeDepthController: NotificationShadeDepthController
-    @Mock
-    private lateinit var mNotificationShadeWindowController: NotificationShadeWindowController
-    @Mock
-    private lateinit var mKeyguardUnlockAnimationController: KeyguardUnlockAnimationController
-    @Mock
-    private lateinit var mAmbientState: AmbientState
-    @Mock
-    private lateinit var stackScrollLayoutController: NotificationStackScrollLayoutController
-    @Mock
-    private lateinit var mStatusBarKeyguardViewManager: StatusBarKeyguardViewManager
-    @Mock
-    private lateinit var mStatusBarWindowStateController: StatusBarWindowStateController
-    @Mock
-    private lateinit var mLockscreenShadeTransitionController: LockscreenShadeTransitionController
-    @Mock
-    private lateinit var mLockIconViewController: LockIconViewController
-    @Mock
-    private lateinit var mPhoneStatusBarViewController: PhoneStatusBarViewController
-    @Mock
-    private lateinit var mLowLightClockController: LowLightClockController
-
-    private lateinit var mInteractionEventHandlerCaptor: ArgumentCaptor<InteractionEventHandler>
-    private lateinit var mInteractionEventHandler: InteractionEventHandler
-
-    @Before
-    fun setUp() {
-        MockitoAnnotations.initMocks(this)
-        whenever(mView.bottom).thenReturn(VIEW_BOTTOM)
-
-        mController = NotificationShadeWindowViewController(
-            mLockscreenShadeTransitionController,
-            FalsingCollectorFake(),
-            mTunerService,
-            mStatusBarStateController,
-            mDockManager,
-            mNotificationShadeDepthController,
-            mView,
-            mNotificationPanelViewController,
-            PanelExpansionStateManager(),
-            stackScrollLayoutController,
-            mStatusBarKeyguardViewManager,
-            mStatusBarWindowStateController,
-            mLockIconViewController,
-            Optional.of(mLowLightClockController),
-            mCentralSurfaces,
-            mNotificationShadeWindowController,
-            mKeyguardUnlockAnimationController,
-            mAmbientState
-        )
-        mController.setupExpandedStatusBar()
-
-        mInteractionEventHandlerCaptor =
-            ArgumentCaptor.forClass(InteractionEventHandler::class.java)
-        verify(mView).setInteractionEventHandler(mInteractionEventHandlerCaptor.capture())
-            mInteractionEventHandler = mInteractionEventHandlerCaptor.value
-    }
-
-    // Note: So far, these tests only cover interactions with the status bar view controller. More
-    // tests need to be added to test the rest of handleDispatchTouchEvent.
-
-    @Test
-    fun handleDispatchTouchEvent_nullStatusBarViewController_returnsFalse() {
-        mController.setStatusBarViewController(null)
-
-        val returnVal = mInteractionEventHandler.handleDispatchTouchEvent(downEv)
-
-        assertThat(returnVal).isFalse()
-    }
-
-    @Test
-    fun handleDispatchTouchEvent_downTouchBelowView_sendsTouchToSb() {
-        mController.setStatusBarViewController(mPhoneStatusBarViewController)
-        val ev = MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, 0f, VIEW_BOTTOM + 4f, 0)
-        whenever(mPhoneStatusBarViewController.sendTouchToView(ev)).thenReturn(true)
-
-        val returnVal = mInteractionEventHandler.handleDispatchTouchEvent(ev)
-
-        verify(mPhoneStatusBarViewController).sendTouchToView(ev)
-        assertThat(returnVal).isTrue()
-    }
-
-    @Test
-    fun handleDispatchTouchEvent_downTouchBelowViewThenAnotherTouch_sendsTouchToSb() {
-        mController.setStatusBarViewController(mPhoneStatusBarViewController)
-        val downEvBelow = MotionEvent.obtain(
-            0L, 0L, MotionEvent.ACTION_DOWN, 0f, VIEW_BOTTOM + 4f, 0
-        )
-        mInteractionEventHandler.handleDispatchTouchEvent(downEvBelow)
-
-        val nextEvent = MotionEvent.obtain(
-            0L, 0L, MotionEvent.ACTION_MOVE, 0f, VIEW_BOTTOM + 5f, 0
-        )
-        whenever(mPhoneStatusBarViewController.sendTouchToView(nextEvent)).thenReturn(true)
-
-        val returnVal = mInteractionEventHandler.handleDispatchTouchEvent(nextEvent)
-
-        verify(mPhoneStatusBarViewController).sendTouchToView(nextEvent)
-        assertThat(returnVal).isTrue()
-    }
-
-    @Test
-    fun handleDispatchTouchEvent_downAndPanelCollapsedAndInSbBoundAndSbWindowShow_sendsTouchToSb() {
-        mController.setStatusBarViewController(mPhoneStatusBarViewController)
-        whenever(mStatusBarWindowStateController.windowIsShowing()).thenReturn(true)
-        whenever(mNotificationPanelViewController.isFullyCollapsed).thenReturn(true)
-        whenever(mPhoneStatusBarViewController.touchIsWithinView(anyFloat(), anyFloat()))
-            .thenReturn(true)
-        whenever(mPhoneStatusBarViewController.sendTouchToView(downEv)).thenReturn(true)
-
-        val returnVal = mInteractionEventHandler.handleDispatchTouchEvent(downEv)
-
-        verify(mPhoneStatusBarViewController).sendTouchToView(downEv)
-        assertThat(returnVal).isTrue()
-    }
-
-    @Test
-    fun handleDispatchTouchEvent_panelNotCollapsed_returnsNull() {
-        mController.setStatusBarViewController(mPhoneStatusBarViewController)
-        whenever(mStatusBarWindowStateController.windowIsShowing()).thenReturn(true)
-        whenever(mPhoneStatusBarViewController.touchIsWithinView(anyFloat(), anyFloat()))
-            .thenReturn(true)
-        // Item we're testing
-        whenever(mNotificationPanelViewController.isFullyCollapsed).thenReturn(false)
-
-        val returnVal = mInteractionEventHandler.handleDispatchTouchEvent(downEv)
-
-        verify(mPhoneStatusBarViewController, never()).sendTouchToView(downEv)
-        assertThat(returnVal).isNull()
-    }
-
-    @Test
-    fun handleDispatchTouchEvent_touchNotInSbBounds_returnsNull() {
-        mController.setStatusBarViewController(mPhoneStatusBarViewController)
-        whenever(mStatusBarWindowStateController.windowIsShowing()).thenReturn(true)
-        whenever(mNotificationPanelViewController.isFullyCollapsed).thenReturn(true)
-        // Item we're testing
-        whenever(mPhoneStatusBarViewController.touchIsWithinView(anyFloat(), anyFloat()))
-            .thenReturn(false)
-
-        val returnVal = mInteractionEventHandler.handleDispatchTouchEvent(downEv)
-
-        verify(mPhoneStatusBarViewController, never()).sendTouchToView(downEv)
-        assertThat(returnVal).isNull()
-    }
-
-    @Test
-    fun handleDispatchTouchEvent_sbWindowNotShowing_noSendTouchToSbAndReturnsTrue() {
-        mController.setStatusBarViewController(mPhoneStatusBarViewController)
-        whenever(mNotificationPanelViewController.isFullyCollapsed).thenReturn(true)
-        whenever(mPhoneStatusBarViewController.touchIsWithinView(anyFloat(), anyFloat()))
-            .thenReturn(true)
-        // Item we're testing
-        whenever(mStatusBarWindowStateController.windowIsShowing()).thenReturn(false)
-
-        val returnVal = mInteractionEventHandler.handleDispatchTouchEvent(downEv)
-
-        verify(mPhoneStatusBarViewController, never()).sendTouchToView(downEv)
-        assertThat(returnVal).isTrue()
-    }
-
-    @Test
-    fun handleDispatchTouchEvent_downEventSentToSbThenAnotherEvent_sendsTouchToSb() {
-        mController.setStatusBarViewController(mPhoneStatusBarViewController)
-        whenever(mStatusBarWindowStateController.windowIsShowing()).thenReturn(true)
-        whenever(mNotificationPanelViewController.isFullyCollapsed).thenReturn(true)
-        whenever(mPhoneStatusBarViewController.touchIsWithinView(anyFloat(), anyFloat()))
-            .thenReturn(true)
-
-        // Down event first
-        mInteractionEventHandler.handleDispatchTouchEvent(downEv)
-
-        // Then another event
-        val nextEvent = MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_MOVE, 0f, 0f, 0)
-        whenever(mPhoneStatusBarViewController.sendTouchToView(nextEvent)).thenReturn(true)
-
-        val returnVal = mInteractionEventHandler.handleDispatchTouchEvent(nextEvent)
-
-        verify(mPhoneStatusBarViewController).sendTouchToView(nextEvent)
-        assertThat(returnVal).isTrue()
-    }
-
-    @Test
-    fun testLowLightClockAttachedWhenExpandedStatusBarSetup() {
-        verify(mLowLightClockController).attachLowLightClockView(ArgumentMatchers.any())
-    }
-
-    @Test
-    fun testLowLightClockShownWhenDozing() {
-        mController.setDozing(true)
-        verify(mLowLightClockController).showLowLightClock(true)
-    }
-
-    @Test
-    fun testLowLightClockDozeTimeTickCalled() {
-        mController.dozeTimeTick()
-        verify(mLowLightClockController).dozeTimeTick()
-    }
-
-    @Test
-    fun testLowLightClockHiddenWhenNotDozing() {
-        mController.setDozing(true)
-        verify(mLowLightClockController).showLowLightClock(true)
-        mController.setDozing(false)
-        verify(mLowLightClockController).showLowLightClock(false)
-    }
-}
-
-private val downEv = MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, 0f, 0f, 0)
-private const val VIEW_BOTTOM = 100
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewTest.java
deleted file mode 100644
index 1d86fb1..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewTest.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.statusbar.phone;
-
-import static junit.framework.Assert.assertFalse;
-import static junit.framework.Assert.assertTrue;
-
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.os.SystemClock;
-import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
-import android.view.MotionEvent;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.keyguard.LockIconViewController;
-import com.android.systemui.R;
-import com.android.systemui.SysuiTestCase;
-import com.android.systemui.classifier.FalsingCollectorFake;
-import com.android.systemui.dock.DockManager;
-import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
-import com.android.systemui.lowlightclock.LowLightClockController;
-import com.android.systemui.statusbar.DragDownHelper;
-import com.android.systemui.statusbar.LockscreenShadeTransitionController;
-import com.android.systemui.statusbar.NotificationShadeDepthController;
-import com.android.systemui.statusbar.NotificationShadeWindowController;
-import com.android.systemui.statusbar.SysuiStatusBarStateController;
-import com.android.systemui.statusbar.notification.stack.AmbientState;
-import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
-import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
-import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
-import com.android.systemui.statusbar.window.StatusBarWindowStateController;
-import com.android.systemui.tuner.TunerService;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-import java.util.Optional;
-
-@RunWith(AndroidTestingRunner.class)
-@TestableLooper.RunWithLooper(setAsMainLooper = true)
-@SmallTest
-public class NotificationShadeWindowViewTest extends SysuiTestCase {
-
-    private NotificationShadeWindowView mView;
-    private NotificationShadeWindowViewController mController;
-
-    @Mock private TunerService mTunerService;
-    @Mock private DragDownHelper mDragDownHelper;
-    @Mock private SysuiStatusBarStateController mStatusBarStateController;
-    @Mock private ShadeController mShadeController;
-    @Mock private CentralSurfaces mCentralSurfaces;
-    @Mock private DockManager mDockManager;
-    @Mock private NotificationPanelViewController mNotificationPanelViewController;
-    @Mock private NotificationStackScrollLayout mNotificationStackScrollLayout;
-    @Mock private NotificationShadeDepthController mNotificationShadeDepthController;
-    @Mock private NotificationShadeWindowController mNotificationShadeWindowController;
-    @Mock private NotificationStackScrollLayoutController mNotificationStackScrollLayoutController;
-    @Mock private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
-    @Mock private StatusBarWindowStateController mStatusBarWindowStateController;
-    @Mock private LockscreenShadeTransitionController mLockscreenShadeTransitionController;
-    @Mock private LockIconViewController mLockIconViewController;
-    @Mock private LowLightClockController mLowLightClockController;
-    @Mock private KeyguardUnlockAnimationController mKeyguardUnlockAnimationController;
-    @Mock private AmbientState mAmbientState;
-
-    @Captor private ArgumentCaptor<NotificationShadeWindowView.InteractionEventHandler>
-            mInteractionEventHandlerCaptor;
-    private NotificationShadeWindowView.InteractionEventHandler mInteractionEventHandler;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-
-        mView = spy(new NotificationShadeWindowView(getContext(), null));
-        when(mView.findViewById(R.id.notification_stack_scroller))
-                .thenReturn(mNotificationStackScrollLayout);
-
-        when(mStatusBarStateController.isDozing()).thenReturn(false);
-        mDependency.injectTestDependency(ShadeController.class, mShadeController);
-
-        when(mDockManager.isDocked()).thenReturn(false);
-
-        mController = new NotificationShadeWindowViewController(
-                mLockscreenShadeTransitionController,
-                new FalsingCollectorFake(),
-                mTunerService,
-                mStatusBarStateController,
-                mDockManager,
-                mNotificationShadeDepthController,
-                mView,
-                mNotificationPanelViewController,
-                new PanelExpansionStateManager(),
-                mNotificationStackScrollLayoutController,
-                mStatusBarKeyguardViewManager,
-                mStatusBarWindowStateController,
-                mLockIconViewController,
-                Optional.of(mLowLightClockController),
-                mCentralSurfaces,
-                mNotificationShadeWindowController,
-                mKeyguardUnlockAnimationController,
-                mAmbientState);
-        mController.setupExpandedStatusBar();
-        mController.setDragDownHelper(mDragDownHelper);
-    }
-
-    @Test
-    public void testDragDownHelperCalledWhenDraggingDown() {
-        when(mDragDownHelper.isDraggingDown()).thenReturn(true);
-        long now = SystemClock.elapsedRealtime();
-        MotionEvent ev = MotionEvent.obtain(now, now, MotionEvent.ACTION_UP, 0 /* x */, 0 /* y */,
-                0 /* meta */);
-        mView.onTouchEvent(ev);
-        verify(mDragDownHelper).onTouchEvent(ev);
-        ev.recycle();
-    }
-
-    @Test
-    public void testInterceptTouchWhenShowingAltAuth() {
-        captureInteractionEventHandler();
-
-        // WHEN showing alt auth, not dozing, drag down helper doesn't want to intercept
-        when(mStatusBarStateController.isDozing()).thenReturn(false);
-        when(mStatusBarKeyguardViewManager.isShowingAlternateAuthOrAnimating()).thenReturn(true);
-        when(mDragDownHelper.onInterceptTouchEvent(any())).thenReturn(false);
-
-        // THEN we should intercept touch
-        assertTrue(mInteractionEventHandler.shouldInterceptTouchEvent(mock(MotionEvent.class)));
-    }
-
-    @Test
-    public void testNoInterceptTouch() {
-        captureInteractionEventHandler();
-
-        // WHEN not showing alt auth, not dozing, drag down helper doesn't want to intercept
-        when(mStatusBarStateController.isDozing()).thenReturn(false);
-        when(mStatusBarKeyguardViewManager.isShowingAlternateAuthOrAnimating()).thenReturn(false);
-        when(mDragDownHelper.onInterceptTouchEvent(any())).thenReturn(false);
-
-        // THEN we shouldn't intercept touch
-        assertFalse(mInteractionEventHandler.shouldInterceptTouchEvent(mock(MotionEvent.class)));
-    }
-
-    @Test
-    public void testHandleTouchEventWhenShowingAltAuth() {
-        captureInteractionEventHandler();
-
-        // WHEN showing alt auth, not dozing, drag down helper doesn't want to intercept
-        when(mStatusBarStateController.isDozing()).thenReturn(false);
-        when(mStatusBarKeyguardViewManager.isShowingAlternateAuthOrAnimating()).thenReturn(true);
-        when(mDragDownHelper.onInterceptTouchEvent(any())).thenReturn(false);
-
-        // THEN we should handle the touch
-        assertTrue(mInteractionEventHandler.handleTouchEvent(mock(MotionEvent.class)));
-    }
-
-    private void captureInteractionEventHandler() {
-        verify(mView).setInteractionEventHandler(mInteractionEventHandlerCaptor.capture());
-        mInteractionEventHandler = mInteractionEventHandlerCaptor.getValue();
-
-    }
-}
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 9ab88dc..9892448 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
@@ -26,6 +26,7 @@
 import androidx.test.platform.app.InstrumentationRegistry
 import com.android.systemui.R
 import com.android.systemui.SysuiTestCase
+import com.android.systemui.shade.PanelViewController
 import com.android.systemui.statusbar.phone.userswitcher.StatusBarUserSwitcherController
 import com.android.systemui.statusbar.policy.ConfigurationController
 import com.android.systemui.unfold.SysUIUnfoldComponent
@@ -136,6 +137,7 @@
     private class UnfoldConfig : UnfoldTransitionConfig {
         override var isEnabled: Boolean = false
         override var isHingeAngleEnabled: Boolean = false
+        override val halfFoldedTimeoutMillis: Int = 0
     }
 
     private class TestTouchEventHandler : PhoneStatusBarView.TouchEventHandler {
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 8d686ae..d6c995b 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
@@ -20,6 +20,7 @@
 import android.view.ViewGroup
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
+import com.android.systemui.shade.PanelViewController
 import com.google.common.truth.Truth.assertThat
 import org.junit.Before
 import org.junit.Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
index 32df2d7..7cd275d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
@@ -59,7 +59,6 @@
 import com.android.systemui.dock.DockManager;
 import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
 import com.android.systemui.scrim.ScrimView;
-import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
 import com.android.systemui.statusbar.policy.ConfigurationController;
 import com.android.systemui.statusbar.policy.KeyguardStateController;
 import com.android.systemui.util.concurrency.FakeExecutor;
@@ -122,8 +121,6 @@
     // TODO(b/204991468): Use a real PanelExpansionStateManager object once this bug is fixed. (The
     //   event-dispatch-on-registration pattern caused some of these unit tests to fail.)
     @Mock
-    private PanelExpansionStateManager mPanelExpansionStateManager;
-    @Mock
     private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
 
     private static class AnimatorListener implements Animator.AnimatorListener {
@@ -237,7 +234,6 @@
                 new FakeHandler(mLooper.getLooper()), mKeyguardUpdateMonitor,
                 mDockManager, mConfigurationController, new FakeExecutor(new FakeSystemClock()),
                 mScreenOffAnimationController,
-                mPanelExpansionStateManager,
                 mKeyguardUnlockAnimationController,
                 mStatusBarKeyguardViewManager);
         mScrimController.setScrimVisibleListener(visible -> mScrimVisibility = visible);
@@ -860,7 +856,6 @@
                 new FakeHandler(mLooper.getLooper()), mKeyguardUpdateMonitor,
                 mDockManager, mConfigurationController, new FakeExecutor(new FakeSystemClock()),
                 mScreenOffAnimationController,
-                mPanelExpansionStateManager,
                 mKeyguardUnlockAnimationController,
                 mStatusBarKeyguardViewManager);
         mScrimController.setScrimVisibleListener(visible -> mScrimVisibility = visible);
@@ -1558,6 +1553,15 @@
                 mScrimInFront.shouldBlendWithMainColor());
     }
 
+    @Test
+    public void applyState_unlocked_bouncerShowing() {
+        mScrimController.transitionTo(ScrimState.UNLOCKED);
+        mScrimController.setBouncerHiddenFraction(0.99f);
+        mScrimController.setRawPanelExpansionFraction(0f);
+        finishAnimationsImmediately();
+        assertScrimAlpha(mScrimBehind, 0);
+    }
+
     private void assertAlphaAfterExpansion(ScrimView scrim, float expectedAlpha, float expansion) {
         mScrimController.setRawPanelExpansionFraction(expansion);
         finishAnimationsImmediately();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarBoundsProviderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarBoundsProviderTest.kt
new file mode 100644
index 0000000..d84010d
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarBoundsProviderTest.kt
@@ -0,0 +1,171 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 android.graphics.Rect
+import android.testing.AndroidTestingRunner
+import android.testing.TestableLooper.RunWithLooper
+import android.view.View
+import android.widget.FrameLayout
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.statusbar.phone.StatusBarBoundsProvider.BoundsChangeListener
+import com.google.common.truth.Truth.assertThat
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.any
+import org.mockito.Mockito.doAnswer
+import org.mockito.Mockito.never
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.verify
+import org.mockito.MockitoAnnotations
+
+@RunWith(AndroidTestingRunner::class)
+@RunWithLooper(setAsMainLooper = true)
+@SmallTest
+class StatusBarBoundsProviderTest : SysuiTestCase() {
+
+    companion object {
+        private val START_SIDE_BOUNDS = Rect(50, 100, 150, 200)
+        private val END_SIDE_BOUNDS = Rect(250, 300, 350, 400)
+    }
+
+    @Mock private lateinit var boundsChangeListener: BoundsChangeListener
+
+    private lateinit var boundsProvider: StatusBarBoundsProvider
+
+    private lateinit var startSideContent: View
+    private lateinit var endSideContent: View
+
+    @Before
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+
+        startSideContent = spy(FrameLayout(context)).apply { setBoundsOnScreen(START_SIDE_BOUNDS) }
+        endSideContent = spy(FrameLayout(context)).apply { setBoundsOnScreen(END_SIDE_BOUNDS) }
+
+        boundsProvider =
+            StatusBarBoundsProvider(setOf(boundsChangeListener), startSideContent, endSideContent)
+    }
+
+    @Test
+    fun visibleStartSideBounds_returnsBoundsFromStartSideContentView() {
+        assertThat(boundsProvider.visibleStartSideBounds).isEqualTo(START_SIDE_BOUNDS)
+    }
+
+    @Test
+    fun visibleEndSideBounds_returnsBoundsFromEndSideContentView() {
+        assertThat(boundsProvider.visibleEndSideBounds).isEqualTo(END_SIDE_BOUNDS)
+    }
+
+    @Test
+    fun startBoundsChange_afterStart_notifiesListener() {
+        boundsProvider.start()
+        val newBounds = Rect(START_SIDE_BOUNDS).apply { left += 1 }
+
+        startSideContent.setBoundsOnScreen(newBounds)
+
+        verify(boundsChangeListener).onStatusBarBoundsChanged()
+    }
+
+    @Test
+    fun startBoundsChange_beforeStart_doesNotNotifyListener() {
+        val newBounds = Rect(START_SIDE_BOUNDS).apply { left += 1 }
+
+        startSideContent.setBoundsOnScreen(newBounds)
+
+        verify(boundsChangeListener, never()).onStatusBarBoundsChanged()
+    }
+
+    @Test
+    fun startBoundsChange_afterStop_doesNotNotifyListener() {
+        boundsProvider.start()
+        boundsProvider.stop()
+        val newBounds = Rect(START_SIDE_BOUNDS).apply { left += 1 }
+
+        startSideContent.setBoundsOnScreen(newBounds)
+
+        verify(boundsChangeListener, never()).onStatusBarBoundsChanged()
+    }
+
+    @Test
+    fun startLayoutChange_afterStart_boundsOnScreenSame_doesNotNotifyListener() {
+        boundsProvider.start()
+        val newBounds = Rect(START_SIDE_BOUNDS).apply { left += 1 }
+
+        startSideContent.layout(newBounds)
+
+        verify(boundsChangeListener, never()).onStatusBarBoundsChanged()
+    }
+
+    @Test
+    fun endBoundsChange_afterStart_notifiesListener() {
+        boundsProvider.start()
+        val newBounds = Rect(START_SIDE_BOUNDS).apply { right += 1 }
+
+        endSideContent.setBoundsOnScreen(newBounds)
+
+        verify(boundsChangeListener).onStatusBarBoundsChanged()
+    }
+
+    @Test
+    fun endBoundsChange_beforeStart_doesNotNotifyListener() {
+        val newBounds = Rect(START_SIDE_BOUNDS).apply { right += 1 }
+
+        endSideContent.setBoundsOnScreen(newBounds)
+
+        verify(boundsChangeListener, never()).onStatusBarBoundsChanged()
+    }
+
+    @Test
+    fun endBoundsChange_afterStop_doesNotNotifyListener() {
+        boundsProvider.start()
+        boundsProvider.stop()
+        val newBounds = Rect(START_SIDE_BOUNDS).apply { right += 1 }
+
+        endSideContent.setBoundsOnScreen(newBounds)
+
+        verify(boundsChangeListener, never()).onStatusBarBoundsChanged()
+    }
+
+    @Test
+    fun endLayoutChange_afterStart_boundsOnScreenSame_doesNotNotifyListener() {
+        boundsProvider.start()
+        val newBounds = Rect(START_SIDE_BOUNDS).apply { right += 1 }
+
+        endSideContent.layout(newBounds)
+
+        verify(boundsChangeListener, never()).onStatusBarBoundsChanged()
+    }
+}
+
+private fun View.setBoundsOnScreen(bounds: Rect) {
+    doAnswer { invocation ->
+            val boundsOutput = invocation.arguments[0] as Rect
+            boundsOutput.set(bounds)
+            return@doAnswer Unit
+        }
+        .`when`(this)
+        .getBoundsOnScreen(any())
+    layout(bounds.left, bounds.top, bounds.right, bounds.bottom)
+}
+
+private fun View.layout(rect: Rect) {
+    layout(rect.left, rect.top, rect.right, rect.bottom)
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconListTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconListTest.java
new file mode 100644
index 0000000..f0a4f3f
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconListTest.java
@@ -0,0 +1,208 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 static com.android.systemui.statusbar.phone.StatusBarIconController.TAG_PRIMARY;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertNull;
+import static junit.framework.Assert.assertTrue;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.statusbar.phone.StatusBarIconList.Slot;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class StatusBarIconListTest extends SysuiTestCase {
+
+    private final static String[] STATUS_BAR_SLOTS = {"aaa", "bbb", "ccc"};
+
+    @Test
+    public void testGetExistingSlot() {
+        StatusBarIconList statusBarIconList = new StatusBarIconList(STATUS_BAR_SLOTS);
+
+        List<Slot> slots = statusBarIconList.getSlots();
+        assertEquals(3, slots.size());
+        assertEquals("aaa", slots.get(0).getName());
+        assertEquals("bbb", slots.get(1).getName());
+        assertEquals("ccc", slots.get(2).getName());
+    }
+
+    @Test
+    public void testGetNonexistingSlot() {
+        StatusBarIconList statusBarIconList = new StatusBarIconList(STATUS_BAR_SLOTS);
+
+        statusBarIconList.getSlot("zzz");
+
+        List<Slot> slots = statusBarIconList.getSlots();
+        assertEquals(4, slots.size());
+        // new content added in front, so zzz should be first and aaa should slide back to second
+        assertEquals("zzz", slots.get(0).getName());
+        assertEquals("aaa", slots.get(1).getName());
+    }
+
+    @Test
+    public void testAddSlotSlidesIcons() {
+        StatusBarIconList statusBarIconList = new StatusBarIconList(STATUS_BAR_SLOTS);
+        StatusBarIconHolder sbHolder = mock(StatusBarIconHolder.class);
+        statusBarIconList.setIcon("aaa", sbHolder);
+
+        statusBarIconList.getSlot("zzz");
+
+        List<Slot> slots = statusBarIconList.getSlots();
+        // new content added in front, so the holder we set on "aaa" should show up at index 1
+        assertNull(slots.get(0).getHolderForTag(TAG_PRIMARY));
+        assertEquals(sbHolder, slots.get(1).getHolderForTag(TAG_PRIMARY));
+    }
+
+    @Test
+    public void testGetAndSetIcon() {
+        StatusBarIconList statusBarIconList = new StatusBarIconList(STATUS_BAR_SLOTS);
+        StatusBarIconHolder sbHolderA = mock(StatusBarIconHolder.class);
+        StatusBarIconHolder sbHolderB = mock(StatusBarIconHolder.class);
+
+        statusBarIconList.setIcon("aaa", sbHolderA);
+        statusBarIconList.setIcon("bbb", sbHolderB);
+
+        assertEquals(sbHolderA, statusBarIconList.getIconHolder("aaa", TAG_PRIMARY));
+        assertEquals(sbHolderB, statusBarIconList.getIconHolder("bbb", TAG_PRIMARY));
+        assertNull(statusBarIconList.getIconHolder("ccc", TAG_PRIMARY)); // icon not set
+    }
+
+    @Test
+    public void testRemoveIcon() {
+        StatusBarIconList statusBarIconList = new StatusBarIconList(STATUS_BAR_SLOTS);
+        StatusBarIconHolder sbHolderA = mock(StatusBarIconHolder.class);
+        StatusBarIconHolder sbHolderB = mock(StatusBarIconHolder.class);
+
+        statusBarIconList.setIcon("aaa", sbHolderA);
+        statusBarIconList.setIcon("bbb", sbHolderB);
+
+        statusBarIconList.removeIcon("aaa", TAG_PRIMARY);
+
+        assertNull(statusBarIconList.getIconHolder("aaa", TAG_PRIMARY)); // icon not set
+    }
+
+    @Test
+    public void testGetViewIndex_NoMultiples() {
+        StatusBarIconList statusBarIconList = new StatusBarIconList(STATUS_BAR_SLOTS);
+        StatusBarIconHolder sbHolder = mock(StatusBarIconHolder.class);
+
+        statusBarIconList.setIcon("ccc", sbHolder);
+
+        // Since only "ccc" has a holder set, it should be first
+        assertEquals(0, statusBarIconList.getViewIndex("ccc", TAG_PRIMARY));
+
+        // Now, also set a holder for "aaa"
+        statusBarIconList.setIcon("aaa", sbHolder);
+
+        // Then "aaa" gets the first view index and "ccc" gets the second
+        assertEquals(0, statusBarIconList.getViewIndex("aaa", TAG_PRIMARY));
+        assertEquals(1, statusBarIconList.getViewIndex("ccc", TAG_PRIMARY));
+    }
+
+    @Test
+    public void testGetViewIndex_MultipleIconsPerSlot() {
+        StatusBarIconList statusBarIconList = new StatusBarIconList(STATUS_BAR_SLOTS);
+        StatusBarIconHolder sbHolder = mock(StatusBarIconHolder.class);
+
+        statusBarIconList.setIcon("ccc", sbHolder);
+
+        // All of these can be added to the same slot
+        // no tag bc it defaults to 0
+        StatusBarIconHolder sbHolder2 = mock(StatusBarIconHolder.class);
+        StatusBarIconHolder sbHolder3 = mock(StatusBarIconHolder.class);
+        int sb3Tag = 1;
+        when(sbHolder3.getTag()).thenReturn(sb3Tag);
+        StatusBarIconHolder sbHolder4 = mock(StatusBarIconHolder.class);
+        int sb4Tag = 2;
+        when(sbHolder4.getTag()).thenReturn(sb4Tag);
+
+        // Put a holder for "bbb", verify that it is first
+        statusBarIconList.setIcon("bbb", sbHolder2);
+        assertEquals(0, statusBarIconList.getViewIndex("bbb", TAG_PRIMARY));
+
+        // Put another holder for "bbb" at slot 1, verify its index 0 and the rest come after
+        statusBarIconList.setIcon("bbb", sbHolder3);
+        assertEquals(0, statusBarIconList.getViewIndex("bbb", sb3Tag));
+        assertEquals(1, statusBarIconList.getViewIndex("bbb", TAG_PRIMARY));
+        // "ccc" should appear at the end
+        assertEquals(2, statusBarIconList.getViewIndex("ccc", TAG_PRIMARY));
+
+        // Put another one in "bbb" just for good measure
+        statusBarIconList.setIcon("bbb", sbHolder4);
+        assertEquals(0, statusBarIconList.getViewIndex("bbb", sb4Tag));
+        assertEquals(1, statusBarIconList.getViewIndex("bbb", sb3Tag));
+        assertEquals(2, statusBarIconList.getViewIndex("bbb", TAG_PRIMARY));
+        assertEquals(3, statusBarIconList.getViewIndex("ccc", TAG_PRIMARY));
+    }
+
+    /**
+     * StatusBarIconList.Slot tests
+     */
+
+    @Test
+    public void testSlot_ViewOrder() {
+        Slot testSlot = new Slot("test_name", null);
+
+        // no tag bc it defaults to 0
+        StatusBarIconHolder sbHolder1 = mock(StatusBarIconHolder.class);
+        StatusBarIconHolder sbHolder2 = mock(StatusBarIconHolder.class);
+        int sb2Tag = 1;
+        when(sbHolder2.getTag()).thenReturn(sb2Tag);
+        StatusBarIconHolder sbHolder3 = mock(StatusBarIconHolder.class);
+        int sb3Tag = 2;
+        when(sbHolder3.getTag()).thenReturn(sb3Tag);
+
+        // Add 3 icons in the same slot, and verify that the list we get is equal to what we gave
+        testSlot.addHolder(sbHolder1);
+        testSlot.addHolder(sbHolder2);
+        testSlot.addHolder(sbHolder3);
+
+        // View order is reverse of the order added
+        ArrayList<StatusBarIconHolder> expected = new ArrayList<>();
+        expected.add(sbHolder3);
+        expected.add(sbHolder2);
+        expected.add(sbHolder1);
+
+        assertTrue(listsEqual(expected, testSlot.getHolderListInViewOrder()));
+    }
+
+    private boolean listsEqual(List<StatusBarIconHolder> list1, List<StatusBarIconHolder> list2) {
+        if (list1.size() != list2.size())  return false;
+
+        for (int i = 0; i < list1.size(); i++) {
+            if (!list1.get(i).equals(list2.get(i))) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+}
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 2dcb2f4..2dcdcfc 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
@@ -47,6 +47,8 @@
 import com.android.systemui.dreams.DreamOverlayStateController;
 import com.android.systemui.navigationbar.NavigationModeController;
 import com.android.systemui.plugins.ActivityStarter.OnDismissAction;
+import com.android.systemui.shade.NotificationPanelViewController;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.statusbar.NotificationMediaManager;
 import com.android.systemui.statusbar.NotificationShadeWindowController;
 import com.android.systemui.statusbar.SysuiStatusBarStateController;
@@ -61,7 +63,9 @@
 import org.junit.Before;
 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 java.util.Optional;
@@ -97,6 +101,7 @@
     @Mock private LatencyTracker mLatencyTracker;
 
     private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
+    private KeyguardBouncer.BouncerExpansionCallback mBouncerExpansionCallback;
 
     @Before
     public void setUp() {
@@ -136,6 +141,11 @@
                 mBypassController);
         when(mKeyguardStateController.isOccluded()).thenReturn(false);
         mStatusBarKeyguardViewManager.show(null);
+        ArgumentCaptor<KeyguardBouncer.BouncerExpansionCallback> callbackArgumentCaptor =
+                ArgumentCaptor.forClass(KeyguardBouncer.BouncerExpansionCallback.class);
+        verify(mKeyguardBouncerFactory).create(any(ViewGroup.class),
+                callbackArgumentCaptor.capture());
+        mBouncerExpansionCallback = callbackArgumentCaptor.getValue();
     }
 
     @Test
@@ -284,21 +294,18 @@
 
         // Should be false to start, so no invocations
         mStatusBarKeyguardViewManager.setOccluded(false /* occluded */, false /* animated */);
-        verify(mKeyguardUpdateMonitor, never()).onKeyguardOccludedChanged(anyBoolean());
         verify(mKeyguardStateController, never()).notifyKeyguardState(anyBoolean(), anyBoolean());
 
         clearInvocations(mKeyguardUpdateMonitor);
         clearInvocations(mKeyguardStateController);
 
         mStatusBarKeyguardViewManager.setOccluded(true /* occluded */, false /* animated */);
-        verify(mKeyguardUpdateMonitor).onKeyguardOccludedChanged(true);
         verify(mKeyguardStateController).notifyKeyguardState(true, true);
 
         clearInvocations(mKeyguardUpdateMonitor);
         clearInvocations(mKeyguardStateController);
 
         mStatusBarKeyguardViewManager.setOccluded(true /* occluded */, false /* animated */);
-        verify(mKeyguardUpdateMonitor, never()).onKeyguardOccludedChanged(anyBoolean());
         verify(mKeyguardStateController, never()).notifyKeyguardState(anyBoolean(), anyBoolean());
     }
 
@@ -308,7 +315,6 @@
         mStatusBarKeyguardViewManager.show(null);
 
         mStatusBarKeyguardViewManager.setOccluded(true /* occluded */, false /* animated */);
-        verify(mKeyguardUpdateMonitor).onKeyguardOccludedChanged(true);
         verify(mKeyguardStateController).notifyKeyguardState(true, true);
     }
 
@@ -318,7 +324,6 @@
         mStatusBarKeyguardViewManager.show(null);
 
         mStatusBarKeyguardViewManager.setOccluded(true /* occluded */, false /* animated */);
-        verify(mKeyguardUpdateMonitor).onKeyguardOccludedChanged(true);
         verify(mKeyguardStateController).notifyKeyguardState(true, true);
     }
 
@@ -468,4 +473,24 @@
         return new PanelExpansionChangeEvent(
                 fraction, expanded, tracking, /* dragDownPxAmount= */ 0f);
     }
+
+    @Test
+    public void testReportBouncerOnDreamWhenVisible() {
+        mBouncerExpansionCallback.onVisibilityChanged(true);
+        verify(mCentralSurfaces).setBouncerShowingOverDream(false);
+        Mockito.clearInvocations(mCentralSurfaces);
+        when(mDreamOverlayStateController.isOverlayActive()).thenReturn(true);
+        mBouncerExpansionCallback.onVisibilityChanged(true);
+        verify(mCentralSurfaces).setBouncerShowingOverDream(true);
+    }
+
+    @Test
+    public void testReportBouncerOnDreamWhenNotVisible() {
+        mBouncerExpansionCallback.onVisibilityChanged(false);
+        verify(mCentralSurfaces).setBouncerShowingOverDream(false);
+        Mockito.clearInvocations(mCentralSurfaces);
+        when(mDreamOverlayStateController.isOverlayActive()).thenReturn(true);
+        mBouncerExpansionCallback.onVisibilityChanged(false);
+        verify(mCentralSurfaces).setBouncerShowingOverDream(false);
+    }
 }
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 ecea14c..c896c0a 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
@@ -59,18 +59,18 @@
 import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.plugins.ActivityStarter.OnDismissAction;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.statusbar.CommandQueue;
+import com.android.systemui.shade.NotificationPanelViewController;
+import com.android.systemui.shade.NotificationShadeWindowViewController;
+import com.android.systemui.shade.ShadeControllerImpl;
 import com.android.systemui.statusbar.NotificationClickNotifier;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
 import com.android.systemui.statusbar.NotificationPresenter;
 import com.android.systemui.statusbar.NotificationRemoteInputManager;
 import com.android.systemui.statusbar.StatusBarState;
-import com.android.systemui.statusbar.notification.NotifPipelineFlags;
 import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.NotificationLaunchAnimatorControllerProvider;
 import com.android.systemui.statusbar.notification.collection.NotifPipeline;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
-import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy;
 import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider;
 import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProvider;
 import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
@@ -127,8 +127,6 @@
     @Mock
     private ShadeControllerImpl mShadeController;
     @Mock
-    private NotifPipelineFlags mNotifPipelineFlags;
-    @Mock
     private NotifPipeline mNotifPipeline;
     @Mock
     private NotificationVisibilityProvider mVisibilityProvider;
@@ -148,15 +146,13 @@
     private ActivityLaunchAnimator mActivityLaunchAnimator;
     @Mock
     private InteractionJankMonitor mJankMonitor;
-    private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock());
-    private NotificationTestHelper mNotificationTestHelper;
+    private final FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock());
     private ExpandableNotificationRow mNotificationRow;
     private ExpandableNotificationRow mBubbleNotificationRow;
 
     private final Answer<Void> mCallOnDismiss = answerVoid(
             (OnDismissAction dismissAction, Runnable cancel,
                     Boolean afterKeyguardGone) -> dismissAction.onDismiss());
-    private ArrayList<NotificationEntry> mActiveNotifications;
 
     @Before
     public void setUp() throws Exception {
@@ -165,29 +161,28 @@
         when(mContentIntent.getCreatorUserHandle()).thenReturn(UserHandle.of(1));
         when(mContentIntent.getIntent()).thenReturn(mContentIntentInner);
 
-        mNotificationTestHelper = new NotificationTestHelper(
+        NotificationTestHelper notificationTestHelper = new NotificationTestHelper(
                 mContext,
                 mDependency,
                 TestableLooper.get(this));
 
         // Create standard notification with contentIntent
-        mNotificationRow = mNotificationTestHelper.createRow();
+        mNotificationRow = notificationTestHelper.createRow();
         StatusBarNotification sbn = mNotificationRow.getEntry().getSbn();
         sbn.getNotification().contentIntent = mContentIntent;
         sbn.getNotification().flags |= Notification.FLAG_AUTO_CANCEL;
 
         // Create bubble notification row with contentIntent
-        mBubbleNotificationRow = mNotificationTestHelper.createBubble();
+        mBubbleNotificationRow = notificationTestHelper.createBubble();
         StatusBarNotification bubbleSbn = mBubbleNotificationRow.getEntry().getSbn();
         bubbleSbn.getNotification().contentIntent = mContentIntent;
         bubbleSbn.getNotification().flags |= Notification.FLAG_AUTO_CANCEL;
 
-        mActiveNotifications = new ArrayList<>();
-        mActiveNotifications.add(mNotificationRow.getEntry());
-        mActiveNotifications.add(mBubbleNotificationRow.getEntry());
-        when(mEntryManager.getVisibleNotifications()).thenReturn(mActiveNotifications);
+        ArrayList<NotificationEntry> activeNotifications = new ArrayList<>();
+        activeNotifications.add(mNotificationRow.getEntry());
+        activeNotifications.add(mBubbleNotificationRow.getEntry());
+        when(mEntryManager.getVisibleNotifications()).thenReturn(activeNotifications);
         when(mStatusBarStateController.getState()).thenReturn(StatusBarState.SHADE);
-        when(mNotifPipelineFlags.isNewPipelineEnabled()).thenReturn(false);
         when(mOnUserInteractionCallback.registerFutureDismissal(eq(mNotificationRow.getEntry()),
                 anyInt())).thenReturn(mFutureDismissalRunnable);
         when(mVisibilityProvider.obtain(anyString(), anyBoolean()))
@@ -207,23 +202,19 @@
         mNotificationActivityStarter =
                 new StatusBarNotificationActivityStarter(
                         getContext(),
-                        mock(CommandQueue.class),
                         mHandler,
                         mUiBgExecutor,
-                        mEntryManager,
                         mNotifPipeline,
                         mVisibilityProvider,
                         headsUpManager,
                         mActivityStarter,
                         mClickNotifier,
-                        mock(StatusBarStateController.class),
                         mStatusBarKeyguardViewManager,
                         mock(KeyguardManager.class),
                         mock(IDreamManager.class),
                         Optional.of(mBubblesManager),
                         () -> mAssistManager,
                         mRemoteInputManager,
-                        mock(NotificationGroupManagerLegacy.class),
                         mock(NotificationLockscreenUserManager.class),
                         mShadeController,
                         mKeyguardStateController,
@@ -231,7 +222,6 @@
                         mock(LockPatternUtils.class),
                         mock(StatusBarRemoteInputCallback.class),
                         mActivityIntentHelper,
-                        mNotifPipelineFlags,
                         mock(MetricsLogger.class),
                         mock(StatusBarNotificationActivityStarterLogger.class),
                         mOnUserInteractionCallback,
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 1a3dd3a..eef43bd 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
@@ -16,12 +16,14 @@
 
 import static android.view.Display.DEFAULT_DISPLAY;
 
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import android.app.Notification;
+import android.app.PendingIntent;
 import android.app.StatusBarManager;
 import android.metrics.LogMaker;
 import android.support.test.metricshelper.MetricsAsserts;
@@ -33,12 +35,14 @@
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.internal.logging.testing.FakeMetricsLogger;
-import com.android.keyguard.KeyguardUpdateMonitor;
 import com.android.systemui.ForegroundServiceNotificationListener;
 import com.android.systemui.InitController;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.shade.NotificationPanelViewController;
+import com.android.systemui.shade.NotificationShadeWindowView;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.KeyguardIndicationController;
 import com.android.systemui.statusbar.LockscreenShadeTransitionController;
@@ -46,11 +50,9 @@
 import com.android.systemui.statusbar.NotificationMediaManager;
 import com.android.systemui.statusbar.NotificationRemoteInputManager;
 import com.android.systemui.statusbar.NotificationShadeWindowController;
-import com.android.systemui.statusbar.NotificationViewHierarchyManager;
 import com.android.systemui.statusbar.SysuiStatusBarStateController;
 import com.android.systemui.statusbar.notification.DynamicPrivacyController;
 import com.android.systemui.statusbar.notification.NotifPipelineFlags;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
 import com.android.systemui.statusbar.notification.collection.render.NotifShadeEventSource;
@@ -61,7 +63,6 @@
 import com.android.systemui.statusbar.notification.stack.NotificationListContainer;
 import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
 import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
-import com.android.systemui.statusbar.policy.ConfigurationController;
 import com.android.systemui.statusbar.policy.KeyguardStateController;
 
 import org.junit.Before;
@@ -74,14 +75,17 @@
 @RunWithLooper()
 public class StatusBarNotificationPresenterTest extends SysuiTestCase {
     private StatusBarNotificationPresenter mStatusBarNotificationPresenter;
-    private NotificationInterruptStateProvider mNotificationInterruptStateProvider =
+    private final NotificationInterruptStateProvider mNotificationInterruptStateProvider =
             mock(NotificationInterruptStateProvider.class);
     private NotificationInterruptSuppressor mInterruptSuppressor;
     private CommandQueue mCommandQueue;
     private FakeMetricsLogger mMetricsLogger;
-    private ShadeController mShadeController = mock(ShadeController.class);
-    private CentralSurfaces mCentralSurfaces = mock(CentralSurfaces.class);
-    private InitController mInitController = new InitController();
+    private final ShadeController mShadeController = mock(ShadeController.class);
+    private final CentralSurfaces mCentralSurfaces = mock(CentralSurfaces.class);
+    private final KeyguardStateController mKeyguardStateController =
+            mock(KeyguardStateController.class);
+    private final NotifPipelineFlags mNotifPipelineFlags = mock(NotifPipelineFlags.class);
+    private final InitController mInitController = new InitController();
 
     @Before
     public void setup() {
@@ -112,29 +116,23 @@
                 mock(ActivityStarter.class),
                 stackScrollLayoutController,
                 mock(DozeScrimController.class),
-                mock(ScrimController.class),
                 mock(NotificationShadeWindowController.class),
                 mock(DynamicPrivacyController.class),
-                mock(KeyguardStateController.class),
+                mKeyguardStateController,
                 mock(KeyguardIndicationController.class),
                 mCentralSurfaces,
-                mock(ShadeControllerImpl.class),
                 mock(LockscreenShadeTransitionController.class),
                 mCommandQueue,
-                mock(NotificationViewHierarchyManager.class),
                 mock(NotificationLockscreenUserManager.class),
                 mock(SysuiStatusBarStateController.class),
                 mock(NotifShadeEventSource.class),
-                mock(NotificationEntryManager.class),
                 mock(NotificationMediaManager.class),
                 mock(NotificationGutsManager.class),
-                mock(KeyguardUpdateMonitor.class),
                 lockscreenGestureLogger,
                 mInitController,
                 mNotificationInterruptStateProvider,
                 mock(NotificationRemoteInputManager.class),
-                mock(ConfigurationController.class),
-                mock(NotifPipelineFlags.class),
+                mNotifPipelineFlags,
                 mock(NotificationRemoteInputManager.Callback.class),
                 mock(NotificationListContainer.class));
         mInitController.executePostInitTasks();
@@ -145,6 +143,19 @@
     }
 
     @Test
+    public void testNoSuppressHeadsUp_default() {
+        Notification n = new Notification.Builder(getContext(), "a").build();
+        NotificationEntry entry = new NotificationEntryBuilder()
+                .setPkg("a")
+                .setOpPkg("a")
+                .setTag("a")
+                .setNotification(n)
+                .build();
+
+        assertFalse(mInterruptSuppressor.suppressAwakeHeadsUp(entry));
+    }
+
+    @Test
     public void testSuppressHeadsUp_disabledStatusBar() {
         Notification n = new Notification.Builder(getContext(), "a").build();
         NotificationEntry entry = new NotificationEntryBuilder()
@@ -180,6 +191,63 @@
     }
 
     @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);
+        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);
+        assertFalse(mInterruptSuppressor.suppressAwakeHeadsUp(entry));
+    }
+
+    @Test
     public void testSuppressInterruptions_vrMode() {
         Notification n = new Notification.Builder(getContext(), "a").build();
         NotificationEntry entry = new NotificationEntryBuilder()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java
index 1fc1473..23b1404 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarRemoteInputCallbackTest.java
@@ -32,6 +32,7 @@
 
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.plugins.ActivityStarter;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.statusbar.ActionClickLogger;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
@@ -56,7 +57,7 @@
 public class StatusBarRemoteInputCallbackTest extends SysuiTestCase {
     @Mock private NotificationEntryManager mEntryManager;
     @Mock private DeviceProvisionedController mDeviceProvisionedController;
-    @Mock private ShadeController mShadeController;
+    @Mock private com.android.systemui.shade.ShadeController mShadeController;
     @Mock private NotificationLockscreenUserManager mNotificationLockscreenUserManager;
     @Mock private KeyguardStateController mKeyguardStateController;
     @Mock private SysuiStatusBarStateController mStatusBarStateController;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SystemBarAttributesListenerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SystemBarAttributesListenerTest.kt
new file mode 100644
index 0000000..fa7b259
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SystemBarAttributesListenerTest.kt
@@ -0,0 +1,250 @@
+package com.android.systemui.statusbar.phone
+
+import android.graphics.Rect
+import android.testing.AndroidTestingRunner
+import android.view.Display
+import android.view.InsetsVisibilities
+import android.view.WindowInsetsController
+import android.view.WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS
+import android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
+import android.view.WindowInsetsController.APPEARANCE_LOW_PROFILE_BARS
+import android.view.WindowInsetsController.Appearance
+import androidx.test.filters.SmallTest
+import com.android.internal.statusbar.LetterboxDetails
+import com.android.internal.view.AppearanceRegion
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.dump.DumpManager
+import com.android.systemui.flags.FeatureFlags
+import com.android.systemui.flags.Flags
+import com.android.systemui.statusbar.SysuiStatusBarStateController
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers.any
+import org.mockito.ArgumentMatchers.anyBoolean
+import org.mockito.ArgumentMatchers.anyInt
+import org.mockito.ArgumentMatchers.eq
+import org.mockito.Mock
+import org.mockito.Mockito
+import org.mockito.Mockito.reset
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyZeroInteractions
+import org.mockito.Mockito.`when` as whenever
+import org.mockito.MockitoAnnotations
+
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+class SystemBarAttributesListenerTest : SysuiTestCase() {
+
+    @Mock private lateinit var dumpManager: DumpManager
+    @Mock private lateinit var lightBarController: LightBarController
+    @Mock private lateinit var statusBarStateController: SysuiStatusBarStateController
+    @Mock private lateinit var letterboxAppearanceCalculator: LetterboxAppearanceCalculator
+    @Mock private lateinit var featureFlags: FeatureFlags
+    @Mock private lateinit var centralSurfaces: CentralSurfaces
+
+    private lateinit var sysBarAttrsListener: SystemBarAttributesListener
+
+    @Before
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+
+        whenever(
+                letterboxAppearanceCalculator.getLetterboxAppearance(
+                    anyInt(), anyObject(), anyObject()))
+            .thenReturn(TEST_LETTERBOX_APPEARANCE)
+
+        sysBarAttrsListener =
+            SystemBarAttributesListener(
+                centralSurfaces,
+                featureFlags,
+                letterboxAppearanceCalculator,
+                statusBarStateController,
+                lightBarController,
+                dumpManager)
+    }
+
+    @Test
+    fun onSysBarAttrsChanged_forwardsAppearanceToCentralSurfaces() {
+        val appearance = APPEARANCE_LIGHT_STATUS_BARS or APPEARANCE_LIGHT_NAVIGATION_BARS
+
+        changeSysBarAttrs(appearance)
+
+        verify(centralSurfaces).setAppearance(appearance)
+    }
+
+    @Test
+    fun onSysBarAttrsChanged_flagTrue_forwardsLetterboxAppearanceToCentralSurfaces() {
+        whenever(featureFlags.isEnabled(Flags.STATUS_BAR_LETTERBOX_APPEARANCE)).thenReturn(true)
+
+        changeSysBarAttrs(TEST_APPEARANCE, TEST_LETTERBOX_DETAILS)
+
+        verify(centralSurfaces).setAppearance(TEST_LETTERBOX_APPEARANCE.appearance)
+    }
+
+    @Test
+    fun onSysBarAttrsChanged_flagTrue_noLetterbox_forwardsOriginalAppearanceToCtrlSrfcs() {
+        whenever(featureFlags.isEnabled(Flags.STATUS_BAR_LETTERBOX_APPEARANCE)).thenReturn(true)
+
+        changeSysBarAttrs(TEST_APPEARANCE, arrayOf<LetterboxDetails>())
+
+        verify(centralSurfaces).setAppearance(TEST_APPEARANCE)
+    }
+
+    @Test
+    fun onSysBarAttrsChanged_forwardsAppearanceToStatusBarStateController() {
+        changeSysBarAttrs(TEST_APPEARANCE)
+
+        verify(statusBarStateController)
+            .setSystemBarAttributes(eq(TEST_APPEARANCE), anyInt(), any(), any())
+    }
+
+    @Test
+    fun onSysBarAttrsChanged_flagTrue_forwardsLetterboxAppearanceToStatusBarStateCtrl() {
+        whenever(featureFlags.isEnabled(Flags.STATUS_BAR_LETTERBOX_APPEARANCE)).thenReturn(true)
+
+        changeSysBarAttrs(TEST_APPEARANCE, TEST_LETTERBOX_DETAILS)
+
+        verify(statusBarStateController)
+            .setSystemBarAttributes(
+                eq(TEST_LETTERBOX_APPEARANCE.appearance), anyInt(), any(), any())
+    }
+
+    @Test
+    fun onSysBarAttrsChanged_forwardsAppearanceToLightBarController() {
+        changeSysBarAttrs(TEST_APPEARANCE, TEST_APPEARANCE_REGIONS)
+
+        verify(lightBarController)
+            .onStatusBarAppearanceChanged(
+                eq(TEST_APPEARANCE_REGIONS), anyBoolean(), anyInt(), anyBoolean())
+    }
+
+    @Test
+    fun onSysBarAttrsChanged_flagTrue_forwardsLetterboxAppearanceToLightBarController() {
+        whenever(featureFlags.isEnabled(Flags.STATUS_BAR_LETTERBOX_APPEARANCE)).thenReturn(true)
+
+        changeSysBarAttrs(TEST_APPEARANCE, TEST_APPEARANCE_REGIONS, TEST_LETTERBOX_DETAILS)
+
+        verify(lightBarController)
+            .onStatusBarAppearanceChanged(
+                eq(TEST_LETTERBOX_APPEARANCE.appearanceRegions),
+                anyBoolean(),
+                anyInt(),
+                anyBoolean())
+    }
+
+    @Test
+    fun onStatusBarBoundsChanged_forwardsLetterboxAppearanceToStatusBarStateController() {
+        whenever(featureFlags.isEnabled(Flags.STATUS_BAR_LETTERBOX_APPEARANCE)).thenReturn(true)
+        changeSysBarAttrs(TEST_APPEARANCE, TEST_APPEARANCE_REGIONS, TEST_LETTERBOX_DETAILS)
+        reset(centralSurfaces, lightBarController, statusBarStateController)
+
+        sysBarAttrsListener.onStatusBarBoundsChanged()
+
+        verify(statusBarStateController)
+            .setSystemBarAttributes(
+                eq(TEST_LETTERBOX_APPEARANCE.appearance), anyInt(), any(), any())
+    }
+
+    @Test
+    fun onStatusBarBoundsChanged_forwardsLetterboxAppearanceToLightBarController() {
+        whenever(featureFlags.isEnabled(Flags.STATUS_BAR_LETTERBOX_APPEARANCE)).thenReturn(true)
+        changeSysBarAttrs(TEST_APPEARANCE, TEST_APPEARANCE_REGIONS, TEST_LETTERBOX_DETAILS)
+        reset(centralSurfaces, lightBarController, statusBarStateController)
+
+        sysBarAttrsListener.onStatusBarBoundsChanged()
+
+        verify(lightBarController)
+            .onStatusBarAppearanceChanged(
+                eq(TEST_LETTERBOX_APPEARANCE.appearanceRegions),
+                anyBoolean(),
+                anyInt(),
+                anyBoolean())
+    }
+
+    @Test
+    fun onStatusBarBoundsChanged_forwardsLetterboxAppearanceToCentralSurfaces() {
+        whenever(featureFlags.isEnabled(Flags.STATUS_BAR_LETTERBOX_APPEARANCE)).thenReturn(true)
+        changeSysBarAttrs(TEST_APPEARANCE, TEST_APPEARANCE_REGIONS, TEST_LETTERBOX_DETAILS)
+        reset(centralSurfaces, lightBarController, statusBarStateController)
+
+        sysBarAttrsListener.onStatusBarBoundsChanged()
+
+        verify(centralSurfaces).setAppearance(TEST_LETTERBOX_APPEARANCE.appearance)
+    }
+
+    @Test
+    fun onStatusBarBoundsChanged_previousCallEmptyLetterbox_doesNothing() {
+        whenever(featureFlags.isEnabled(Flags.STATUS_BAR_LETTERBOX_APPEARANCE)).thenReturn(true)
+        changeSysBarAttrs(TEST_APPEARANCE, TEST_APPEARANCE_REGIONS, arrayOf())
+        reset(centralSurfaces, lightBarController, statusBarStateController)
+
+        sysBarAttrsListener.onStatusBarBoundsChanged()
+
+        verifyZeroInteractions(centralSurfaces, lightBarController, statusBarStateController)
+    }
+
+    @Test
+    fun onStatusBarBoundsChanged_flagFalse_doesNothing() {
+        whenever(featureFlags.isEnabled(Flags.STATUS_BAR_LETTERBOX_APPEARANCE)).thenReturn(false)
+        changeSysBarAttrs(TEST_APPEARANCE, TEST_APPEARANCE_REGIONS, TEST_LETTERBOX_DETAILS)
+        reset(centralSurfaces, lightBarController, statusBarStateController)
+
+        sysBarAttrsListener.onStatusBarBoundsChanged()
+
+        verifyZeroInteractions(centralSurfaces, lightBarController, statusBarStateController)
+    }
+
+    private fun changeSysBarAttrs(@Appearance appearance: Int) {
+        changeSysBarAttrs(appearance, arrayOf<LetterboxDetails>())
+    }
+
+    private fun changeSysBarAttrs(
+        @Appearance appearance: Int,
+        letterboxDetails: Array<LetterboxDetails>
+    ) {
+        changeSysBarAttrs(appearance, arrayOf(), letterboxDetails)
+    }
+
+    private fun changeSysBarAttrs(
+        @Appearance appearance: Int,
+        appearanceRegions: Array<AppearanceRegion>
+    ) {
+        changeSysBarAttrs(appearance, appearanceRegions, arrayOf())
+    }
+
+    private fun changeSysBarAttrs(
+        @Appearance appearance: Int,
+        appearanceRegions: Array<AppearanceRegion>,
+        letterboxDetails: Array<LetterboxDetails>
+    ) {
+        sysBarAttrsListener.onSystemBarAttributesChanged(
+            Display.DEFAULT_DISPLAY,
+            appearance,
+            appearanceRegions,
+            /* navbarColorManagedByIme= */ false,
+            WindowInsetsController.BEHAVIOR_DEFAULT,
+            InsetsVisibilities(),
+            "package name",
+            letterboxDetails)
+    }
+
+    companion object {
+        private const val TEST_APPEARANCE =
+            APPEARANCE_LIGHT_STATUS_BARS or APPEARANCE_LIGHT_NAVIGATION_BARS
+        private val TEST_APPEARANCE_REGION = AppearanceRegion(TEST_APPEARANCE, Rect(0, 0, 150, 300))
+        private val TEST_APPEARANCE_REGIONS = arrayOf(TEST_APPEARANCE_REGION)
+        private val TEST_LETTERBOX_DETAILS =
+            arrayOf(
+                LetterboxDetails(
+                    /* letterboxInnerBounds= */ Rect(0, 0, 0, 0),
+                    /* letterboxFullBounds= */ Rect(0, 0, 0, 0),
+                    /* appAppearance= */ 0))
+        private val TEST_LETTERBOX_APPEARANCE =
+            LetterboxAppearance(/* appearance= */ APPEARANCE_LOW_PROFILE_BARS, arrayOf())
+    }
+}
+
+private fun <T> anyObject(): T {
+    return Mockito.anyObject<T>()
+}
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 0112797..746c92e 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
@@ -27,6 +27,7 @@
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.keyguard.KeyguardViewMediator
 import com.android.systemui.keyguard.WakefulnessLifecycle
+import com.android.systemui.shade.NotificationPanelViewController
 import com.android.systemui.statusbar.LightRevealScrim
 import com.android.systemui.statusbar.StatusBarStateControllerImpl
 import com.android.systemui.statusbar.policy.KeyguardStateController
@@ -39,12 +40,12 @@
 import org.mockito.ArgumentCaptor
 import org.mockito.Mock
 import org.mockito.Mockito
-import org.mockito.Mockito.`when`
 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`
 import org.mockito.MockitoAnnotations
 
 @SmallTest
@@ -184,4 +185,4 @@
         controller.startAnimation()
         assertFalse(controller.isAnimationPlaying())
     }
-}
\ No newline at end of file
+}
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 034e06d..52a573f 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
@@ -47,10 +47,13 @@
 
 import com.android.systemui.R;
 import com.android.systemui.SysuiBaseFragmentTest;
+import com.android.systemui.dump.DumpManager;
 import com.android.systemui.flags.FeatureFlags;
 import com.android.systemui.log.LogBuffer;
 import com.android.systemui.log.LogcatEchoTracker;
+import com.android.systemui.plugins.DarkIconDispatcher;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.shade.NotificationPanelViewController;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.DisableFlagsLogger;
 import com.android.systemui.statusbar.OperatorNameViewController;
@@ -58,7 +61,6 @@
 import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler;
 import com.android.systemui.statusbar.phone.HeadsUpAppearanceController;
 import com.android.systemui.statusbar.phone.NotificationIconAreaController;
-import com.android.systemui.statusbar.phone.NotificationPanelViewController;
 import com.android.systemui.statusbar.phone.StatusBarHideIconsForBouncerManager;
 import com.android.systemui.statusbar.phone.StatusBarIconController;
 import com.android.systemui.statusbar.phone.StatusBarLocationPublisher;
@@ -112,6 +114,8 @@
     private NotificationPanelViewController mNotificationPanelViewController;
     @Mock
     private StatusBarHideIconsForBouncerManager mStatusBarHideIconsForBouncerManager;
+    @Mock
+    private DumpManager mDumpManager;
 
     public CollapsedStatusBarFragmentTest() {
         super(CollapsedStatusBarFragment.class);
@@ -120,6 +124,7 @@
     @Before
     public void setup() {
         injectLeakCheckedDependencies(ALL_SUPPORTED_CLASSES);
+        mDependency.injectMockDependency(DarkIconDispatcher.class);
     }
 
     @Test
@@ -128,7 +133,7 @@
 
         fragment.disable(DEFAULT_DISPLAY, 0, 0, false);
 
-        assertEquals(View.VISIBLE, getSystemIconAreaView().getVisibility());
+        assertEquals(View.VISIBLE, getEndSideContentView().getVisibility());
         assertEquals(View.VISIBLE, getClockView().getVisibility());
     }
 
@@ -139,11 +144,11 @@
 
         fragment.disable(DEFAULT_DISPLAY, StatusBarManager.DISABLE_SYSTEM_INFO, 0, false);
 
-        assertEquals(View.INVISIBLE, getSystemIconAreaView().getVisibility());
+        assertEquals(View.INVISIBLE, getEndSideContentView().getVisibility());
 
         fragment.disable(DEFAULT_DISPLAY, 0, 0, false);
 
-        assertEquals(View.VISIBLE, getSystemIconAreaView().getVisibility());
+        assertEquals(View.VISIBLE, getEndSideContentView().getVisibility());
     }
 
     @Test
@@ -152,15 +157,15 @@
         CollapsedStatusBarFragment fragment = resumeAndGetFragment();
         when(mAnimationScheduler.getAnimationState()).thenReturn(IDLE);
         fragment.disable(DEFAULT_DISPLAY, StatusBarManager.DISABLE_SYSTEM_INFO, 0, false);
-        assertEquals(View.INVISIBLE, getSystemIconAreaView().getVisibility());
+        assertEquals(View.INVISIBLE, getEndSideContentView().getVisibility());
 
         // WHEN the disable flags are cleared during a system event animation
         when(mAnimationScheduler.getAnimationState()).thenReturn(RUNNING_CHIP_ANIM);
         fragment.disable(DEFAULT_DISPLAY, 0, 0, false);
 
         // THEN the view is made visible again, but still low alpha
-        assertEquals(View.VISIBLE, getSystemIconAreaView().getVisibility());
-        assertEquals(0, getSystemIconAreaView().getAlpha(), 0.01);
+        assertEquals(View.VISIBLE, getEndSideContentView().getVisibility());
+        assertEquals(0, getEndSideContentView().getAlpha(), 0.01);
 
         // WHEN the system event animation finishes
         when(mAnimationScheduler.getAnimationState()).thenReturn(ANIMATING_OUT);
@@ -170,7 +175,7 @@
         anim.end();
 
         // THEN the system info is full alpha
-        assertEquals(1, getSystemIconAreaView().getAlpha(), 0.01);
+        assertEquals(1, getEndSideContentView().getAlpha(), 0.01);
     }
 
     @Test
@@ -179,7 +184,7 @@
         CollapsedStatusBarFragment fragment = resumeAndGetFragment();
         when(mAnimationScheduler.getAnimationState()).thenReturn(IDLE);
         fragment.disable(DEFAULT_DISPLAY, StatusBarManager.DISABLE_SYSTEM_INFO, 0, false);
-        assertEquals(View.INVISIBLE, getSystemIconAreaView().getVisibility());
+        assertEquals(View.INVISIBLE, getEndSideContentView().getVisibility());
 
         // WHEN the system event animation finishes
         when(mAnimationScheduler.getAnimationState()).thenReturn(ANIMATING_OUT);
@@ -190,8 +195,8 @@
 
         // THEN the system info is at full alpha, but still INVISIBLE (since the disable flag is
         // still set)
-        assertEquals(1, getSystemIconAreaView().getAlpha(), 0.01);
-        assertEquals(View.INVISIBLE, getSystemIconAreaView().getVisibility());
+        assertEquals(1, getEndSideContentView().getAlpha(), 0.01);
+        assertEquals(View.INVISIBLE, getEndSideContentView().getVisibility());
     }
 
 
@@ -207,8 +212,8 @@
         anim.end();
 
         // THEN the system info is visible but alpha 0
-        assertEquals(View.VISIBLE, getSystemIconAreaView().getVisibility());
-        assertEquals(0, getSystemIconAreaView().getAlpha(), 0.01);
+        assertEquals(View.VISIBLE, getEndSideContentView().getVisibility());
+        assertEquals(0, getEndSideContentView().getAlpha(), 0.01);
     }
 
     @Test
@@ -223,8 +228,8 @@
         anim.end();
 
         // THEN the system info is visible but alpha 0
-        assertEquals(View.VISIBLE, getSystemIconAreaView().getVisibility());
-        assertEquals(0, getSystemIconAreaView().getAlpha(), 0.01);
+        assertEquals(View.VISIBLE, getEndSideContentView().getVisibility());
+        assertEquals(0, getEndSideContentView().getAlpha(), 0.01);
 
         // WHEN the system event animation finishes
         when(mAnimationScheduler.getAnimationState()).thenReturn(ANIMATING_OUT);
@@ -234,8 +239,8 @@
         anim.end();
 
         // THEN the syste info is full alpha and VISIBLE
-        assertEquals(View.VISIBLE, getSystemIconAreaView().getVisibility());
-        assertEquals(1, getSystemIconAreaView().getAlpha(), 0.01);
+        assertEquals(View.VISIBLE, getEndSideContentView().getVisibility());
+        assertEquals(1, getEndSideContentView().getAlpha(), 0.01);
     }
 
     @Test
@@ -331,7 +336,7 @@
 
         fragment.disable(DEFAULT_DISPLAY, 0, 0, false);
 
-        assertEquals(View.VISIBLE, getSystemIconAreaView().getVisibility());
+        assertEquals(View.VISIBLE, getEndSideContentView().getVisibility());
         assertEquals(View.VISIBLE, getClockView().getVisibility());
     }
 
@@ -343,7 +348,7 @@
 
         fragment.disable(DEFAULT_DISPLAY, 0, 0, false);
 
-        assertEquals(View.VISIBLE, getSystemIconAreaView().getVisibility());
+        assertEquals(View.VISIBLE, getEndSideContentView().getVisibility());
         assertEquals(View.VISIBLE, getClockView().getVisibility());
     }
 
@@ -354,12 +359,12 @@
         when(mNotificationPanelViewController.hasCustomClock()).thenReturn(true);
 
         // Make sure they start out as visible
-        assertEquals(View.VISIBLE, getSystemIconAreaView().getVisibility());
+        assertEquals(View.VISIBLE, getEndSideContentView().getVisibility());
         assertEquals(View.VISIBLE, getClockView().getVisibility());
 
         fragment.disable(DEFAULT_DISPLAY, 0, 0, false);
 
-        assertEquals(View.INVISIBLE, getSystemIconAreaView().getVisibility());
+        assertEquals(View.INVISIBLE, getEndSideContentView().getVisibility());
         assertEquals(View.GONE, getClockView().getVisibility());
     }
 
@@ -370,14 +375,14 @@
         when(mNotificationPanelViewController.hasCustomClock()).thenReturn(true);
 
         // Make sure they start out as visible
-        assertEquals(View.VISIBLE, getSystemIconAreaView().getVisibility());
+        assertEquals(View.VISIBLE, getEndSideContentView().getVisibility());
         assertEquals(View.VISIBLE, getClockView().getVisibility());
 
         fragment.onDozingChanged(true);
 
         // When this callback is triggered, we want to make sure the clock and system info
         // visibilities are recalculated. Since dozing=true, they shouldn't be visible.
-        assertEquals(View.INVISIBLE, getSystemIconAreaView().getVisibility());
+        assertEquals(View.INVISIBLE, getEndSideContentView().getVisibility());
         assertEquals(View.GONE, getClockView().getVisibility());
     }
 
@@ -483,7 +488,8 @@
                         ),
                 mOperatorNameViewControllerFactory,
                 mSecureSettings,
-                mExecutor);
+                mExecutor,
+                mDumpManager);
     }
 
     private void setUpDaggerComponent() {
@@ -516,7 +522,7 @@
         return mFragment.getView().findViewById(R.id.clock);
     }
 
-    private View getSystemIconAreaView() {
-        return mFragment.getView().findViewById(R.id.system_icon_area);
+    private View getEndSideContentView() {
+        return mFragment.getView().findViewById(R.id.status_bar_end_side_content);
     }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/shade/transition/ShadeTransitionControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/shade/transition/ShadeTransitionControllerTest.kt
deleted file mode 100644
index 39d33e8..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/shade/transition/ShadeTransitionControllerTest.kt
+++ /dev/null
@@ -1,118 +0,0 @@
-package com.android.systemui.statusbar.phone.shade.transition
-
-import android.testing.AndroidTestingRunner
-import androidx.test.filters.SmallTest
-import com.android.systemui.R
-import com.android.systemui.SysuiTestCase
-import com.android.systemui.plugins.qs.QS
-import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
-import com.android.systemui.statusbar.phone.NotificationPanelViewController
-import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager
-import com.android.systemui.statusbar.phone.panelstate.STATE_OPENING
-import com.android.systemui.statusbar.policy.FakeConfigurationController
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.mockito.Mock
-import org.mockito.Mockito.reset
-import org.mockito.Mockito.verify
-import org.mockito.Mockito.verifyZeroInteractions
-import org.mockito.MockitoAnnotations
-
-@RunWith(AndroidTestingRunner::class)
-@SmallTest
-class ShadeTransitionControllerTest : SysuiTestCase() {
-
-    @Mock private lateinit var npvc: NotificationPanelViewController
-    @Mock private lateinit var nsslController: NotificationStackScrollLayoutController
-    @Mock private lateinit var qs: QS
-    @Mock private lateinit var noOpOverScroller: NoOpOverScroller
-    @Mock private lateinit var splitShadeOverScroller: SplitShadeOverScroller
-
-    private lateinit var controller: ShadeTransitionController
-
-    private val configurationController = FakeConfigurationController()
-    private val panelExpansionStateManager = PanelExpansionStateManager()
-
-    @Before
-    fun setUp() {
-        MockitoAnnotations.initMocks(this)
-
-        controller =
-            ShadeTransitionController(
-                configurationController,
-                panelExpansionStateManager,
-                context,
-                splitShadeOverScrollerFactory = { _, _ -> splitShadeOverScroller },
-                noOpOverScroller)
-
-        // Resetting as they are notified upon initialization.
-        reset(noOpOverScroller, splitShadeOverScroller)
-    }
-
-    @Test
-    fun onPanelExpansionChanged_inSplitShade_forwardsToSplitShadeOverScroller() {
-        initLateProperties()
-        enableSplitShade()
-
-        startPanelExpansion()
-
-        verify(splitShadeOverScroller).onPanelStateChanged(STATE_OPENING)
-        verify(splitShadeOverScroller).onDragDownAmountChanged(DEFAULT_DRAG_DOWN_AMOUNT)
-        verifyZeroInteractions(noOpOverScroller)
-    }
-
-    @Test
-    fun onPanelStateChanged_inSplitShade_propertiesNotInitialized_forwardsToNoOpOverScroller() {
-        enableSplitShade()
-
-        startPanelExpansion()
-
-        verify(noOpOverScroller).onPanelStateChanged(STATE_OPENING)
-        verify(noOpOverScroller).onDragDownAmountChanged(DEFAULT_DRAG_DOWN_AMOUNT)
-        verifyZeroInteractions(splitShadeOverScroller)
-    }
-
-    @Test
-    fun onPanelStateChanged_notInSplitShade_forwardsToNoOpOverScroller() {
-        initLateProperties()
-        disableSplitShade()
-
-        startPanelExpansion()
-
-        verify(noOpOverScroller).onPanelStateChanged(STATE_OPENING)
-        verify(noOpOverScroller).onDragDownAmountChanged(DEFAULT_DRAG_DOWN_AMOUNT)
-        verifyZeroInteractions(splitShadeOverScroller)
-    }
-
-    private fun initLateProperties() {
-        controller.qs = qs
-        controller.notificationStackScrollLayoutController = nsslController
-        controller.notificationPanelViewController = npvc
-    }
-
-    private fun disableSplitShade() {
-        setSplitShadeEnabled(false)
-    }
-
-    private fun enableSplitShade() {
-        setSplitShadeEnabled(true)
-    }
-
-    private fun setSplitShadeEnabled(enabled: Boolean) {
-        overrideResource(R.bool.config_use_split_notification_shade, enabled)
-        configurationController.notifyConfigurationChanged()
-    }
-
-    private fun startPanelExpansion() {
-        panelExpansionStateManager.onPanelExpansionChanged(
-            fraction = 0.5f,
-            expanded = true,
-            tracking = true,
-            dragDownPxAmount = DEFAULT_DRAG_DOWN_AMOUNT)
-    }
-
-    companion object {
-        private const val DEFAULT_DRAG_DOWN_AMOUNT = 123f
-    }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/shade/transition/SplitShadeOverScrollerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/shade/transition/SplitShadeOverScrollerTest.kt
deleted file mode 100644
index 219737d..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/shade/transition/SplitShadeOverScrollerTest.kt
+++ /dev/null
@@ -1,107 +0,0 @@
-package com.android.systemui.statusbar.phone.shade.transition
-
-import org.mockito.Mockito.`when` as whenever
-import android.testing.AndroidTestingRunner
-import android.testing.TestableLooper
-import androidx.test.filters.SmallTest
-import com.android.systemui.R
-import com.android.systemui.SysuiTestCase
-import com.android.systemui.dump.DumpManager
-import com.android.systemui.plugins.qs.QS
-import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
-import com.android.systemui.statusbar.phone.ScrimController
-import com.android.systemui.statusbar.phone.panelstate.STATE_CLOSED
-import com.android.systemui.statusbar.phone.panelstate.STATE_OPEN
-import com.android.systemui.statusbar.phone.panelstate.STATE_OPENING
-import com.android.systemui.statusbar.policy.FakeConfigurationController
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.mockito.Mock
-import org.mockito.Mockito.atLeastOnce
-import org.mockito.Mockito.verify
-import org.mockito.Mockito.verifyZeroInteractions
-import org.mockito.MockitoAnnotations
-
-@RunWith(AndroidTestingRunner::class)
-@TestableLooper.RunWithLooper(setAsMainLooper = true)
-@SmallTest
-class SplitShadeOverScrollerTest : SysuiTestCase() {
-
-    @Mock private lateinit var dumpManager: DumpManager
-    @Mock private lateinit var scrimController: ScrimController
-    @Mock private lateinit var qs: QS
-    @Mock private lateinit var nsslController: NotificationStackScrollLayoutController
-
-    private val configurationController = FakeConfigurationController()
-    private lateinit var overScroller: SplitShadeOverScroller
-
-    @Before
-    fun setUp() {
-        MockitoAnnotations.initMocks(this)
-
-        whenever(nsslController.height).thenReturn(1000)
-        overScroller =
-            SplitShadeOverScroller(
-                configurationController, dumpManager, context, scrimController, qs, nsslController)
-    }
-
-    @Test
-    fun onDragDownAmountChanged_panelOpening_overScrolls_basedOnHeightAndMaxAmount() {
-        val maxOverScrollAmount = 50
-        val dragDownAmount = 100f
-        overrideResource(R.dimen.shade_max_over_scroll_amount, maxOverScrollAmount)
-        configurationController.notifyConfigurationChanged()
-
-        overScroller.onPanelStateChanged(STATE_OPENING)
-        overScroller.onDragDownAmountChanged(dragDownAmount)
-
-        val expectedOverScrollAmount =
-            (dragDownAmount / nsslController.height * maxOverScrollAmount).toInt()
-        verify(qs).setOverScrollAmount(expectedOverScrollAmount)
-        verify(nsslController).setOverScrollAmount(expectedOverScrollAmount)
-        verify(scrimController).setNotificationsOverScrollAmount(expectedOverScrollAmount)
-    }
-
-    @Test
-    fun onDragDownAmountChanged_panelClosed_doesNotOverScroll() {
-        overScroller.onPanelStateChanged(STATE_CLOSED)
-        overScroller.onDragDownAmountChanged(100f)
-
-        verifyZeroInteractions(qs, scrimController, nsslController)
-    }
-
-    @Test
-    fun onDragDownAmountChanged_panelOpen_doesNotOverScroll() {
-        overScroller.onPanelStateChanged(STATE_OPEN)
-        overScroller.onDragDownAmountChanged(100f)
-
-        verifyZeroInteractions(qs, scrimController, nsslController)
-    }
-
-    @Test
-    fun onPanelStateChanged_opening_thenOpen_releasesOverScroll() {
-        overScroller.onPanelStateChanged(STATE_OPENING)
-        overScroller.onDragDownAmountChanged(100f)
-
-        overScroller.onPanelStateChanged(STATE_OPEN)
-        overScroller.finishAnimations()
-
-        verify(qs, atLeastOnce()).setOverScrollAmount(0)
-        verify(scrimController, atLeastOnce()).setNotificationsOverScrollAmount(0)
-        verify(nsslController, atLeastOnce()).setOverScrollAmount(0)
-    }
-
-    @Test
-    fun onPanelStateChanged_opening_thenClosed_releasesOverScroll() {
-        overScroller.onPanelStateChanged(STATE_OPENING)
-        overScroller.onDragDownAmountChanged(100f)
-
-        overScroller.onPanelStateChanged(STATE_CLOSED)
-        overScroller.finishAnimations()
-
-        verify(qs, atLeastOnce()).setOverScrollAmount(0)
-        verify(scrimController, atLeastOnce()).setNotificationsOverScrollAmount(0)
-        verify(nsslController, atLeastOnce()).setOverScrollAmount(0)
-    }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/ConnectivityInfoProcessorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/ConnectivityInfoProcessorTest.kt
new file mode 100644
index 0000000..515a7c9
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/ConnectivityInfoProcessorTest.kt
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.pipeline
+
+import android.net.NetworkCapabilities
+import android.testing.AndroidTestingRunner
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.statusbar.pipeline.repository.NetworkCapabilityInfo
+import com.android.systemui.util.mockito.mock
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.CoroutineStart
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.InternalCoroutinesApi
+import kotlinx.coroutines.cancel
+import kotlinx.coroutines.flow.collect
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.runBlocking
+import kotlinx.coroutines.yield
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito.`when` as whenever
+
+@OptIn(InternalCoroutinesApi::class)
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+class ConnectivityInfoProcessorTest : SysuiTestCase() {
+
+    private val statusBarPipelineFlags = mock<StatusBarPipelineFlags>()
+
+    @Before
+    fun setUp() {
+        whenever(statusBarPipelineFlags.isNewPipelineEnabled()).thenReturn(true)
+    }
+
+    @Test
+    fun collectorInfoUpdated_processedInfoAlsoUpdated() = runBlocking {
+        // GIVEN a processor hooked up to a collector
+        val scope = CoroutineScope(Dispatchers.Unconfined)
+        val collector = FakeConnectivityInfoCollector()
+        val processor = ConnectivityInfoProcessor(
+                collector,
+                context,
+                scope,
+                statusBarPipelineFlags,
+        )
+
+        var mostRecentValue: ProcessedConnectivityInfo? = null
+        val job = launch(start = CoroutineStart.UNDISPATCHED) {
+            processor.processedInfoFlow.collect {
+                mostRecentValue = it
+            }
+        }
+
+        // WHEN the collector emits a value
+        val networkCapabilityInfo = mapOf(
+                10 to NetworkCapabilityInfo(mock(), NetworkCapabilities.Builder().build())
+        )
+        collector.emitValue(RawConnectivityInfo(networkCapabilityInfo))
+        // Because our job uses [CoroutineStart.UNDISPATCHED], it executes in the same thread as
+        // this test. So, our test needs to yield to let the job run.
+        // Note: Once we upgrade our Kotlin coroutines testing library, we won't need this.
+        yield()
+
+        // THEN the processor receives it
+        assertThat(mostRecentValue?.networkCapabilityInfo).isEqualTo(networkCapabilityInfo)
+
+        job.cancel()
+        scope.cancel()
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/ConnectivityPipelineLoggerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/ConnectivityPipelineLoggerTest.kt
new file mode 100644
index 0000000..2915ae8
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/ConnectivityPipelineLoggerTest.kt
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.pipeline
+
+import android.net.Network
+import android.net.NetworkCapabilities
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.dump.DumpManager
+import com.android.systemui.log.LogBufferFactory
+import com.android.systemui.log.LogcatEchoTracker
+import com.google.common.truth.Truth.assertThat
+import java.io.PrintWriter
+import java.io.StringWriter
+import org.junit.Test
+import org.mockito.Mockito
+import org.mockito.Mockito.mock
+
+@SmallTest
+class ConnectivityPipelineLoggerTest : SysuiTestCase() {
+    private val buffer = LogBufferFactory(DumpManager(), mock(LogcatEchoTracker::class.java))
+        .create("buffer", 10)
+    private val logger = ConnectivityPipelineLogger(buffer)
+
+    @Test
+    fun testLogNetworkCapsChange_bufferHasInfo() {
+        logger.logOnCapabilitiesChanged(NET_1, NET_1_CAPS)
+
+        val stringWriter = StringWriter()
+        buffer.dump(PrintWriter(stringWriter), tailLength = 0)
+        val actualString = stringWriter.toString()
+
+        val expectedNetId = NET_1_ID.toString()
+        val expectedCaps = NET_1_CAPS.toString()
+
+        assertThat(actualString).contains(expectedNetId)
+        assertThat(actualString).contains(expectedCaps)
+    }
+
+    @Test
+    fun testLogOnLost_bufferHasNetIdOfLostNetwork() {
+        logger.logOnLost(NET_1)
+
+        val stringWriter = StringWriter()
+        buffer.dump(PrintWriter(stringWriter), tailLength = 0)
+        val actualString = stringWriter.toString()
+
+        val expectedNetId = NET_1_ID.toString()
+
+        assertThat(actualString).contains(expectedNetId)
+    }
+
+    private val NET_1_ID = 100
+    private val NET_1 = com.android.systemui.util.mockito.mock<Network>().also {
+        Mockito.`when`(it.getNetId()).thenReturn(NET_1_ID)
+    }
+    private val NET_1_CAPS = NetworkCapabilities.Builder()
+        .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
+        .addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
+        .build()
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/FakeConnectivityInfoCollector.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/FakeConnectivityInfoCollector.kt
new file mode 100644
index 0000000..710e5f6
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/FakeConnectivityInfoCollector.kt
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.pipeline
+
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.asStateFlow
+
+/**
+ * A test-friendly implementation of [ConnectivityInfoCollector] that just emits whatever value it
+ * receives in [emitValue].
+ */
+class FakeConnectivityInfoCollector : ConnectivityInfoCollector {
+    private val _rawConnectivityInfoFlow = MutableStateFlow(RawConnectivityInfo())
+    override val rawConnectivityInfoFlow = _rawConnectivityInfoFlow.asStateFlow()
+
+    suspend fun emitValue(value: RawConnectivityInfo) {
+        _rawConnectivityInfoFlow.emit(value)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/repository/NetworkCapabilitiesRepoTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/repository/NetworkCapabilitiesRepoTest.kt
new file mode 100644
index 0000000..40f8fbf
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/repository/NetworkCapabilitiesRepoTest.kt
@@ -0,0 +1,252 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.pipeline.repository
+
+import android.net.ConnectivityManager
+import android.net.ConnectivityManager.NetworkCallback
+import android.net.Network
+import android.net.NetworkCapabilities
+import android.net.NetworkCapabilities.NET_CAPABILITY_NOT_METERED
+import android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED
+import android.net.NetworkCapabilities.TRANSPORT_CELLULAR
+import android.net.NetworkCapabilities.TRANSPORT_WIFI
+import android.net.NetworkRequest
+import android.test.suitebuilder.annotation.SmallTest
+import android.testing.AndroidTestingRunner
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.statusbar.pipeline.ConnectivityPipelineLogger
+import com.android.systemui.util.mockito.mock
+import com.android.systemui.util.mockito.withArgCaptor
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.CoroutineStart
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.cancel
+import kotlinx.coroutines.flow.collect
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.runBlocking
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers.any
+import org.mockito.Mock
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when` as whenever
+import org.mockito.MockitoAnnotations
+
+// TODO(b/240619365): Update this test to use `runTest` when we update the testing library
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+class NetworkCapabilitiesRepoTest : SysuiTestCase() {
+    @Mock private lateinit var connectivityManager: ConnectivityManager
+    @Mock private lateinit var logger: ConnectivityPipelineLogger
+
+    @Before
+    fun setup() {
+        MockitoAnnotations.initMocks(this)
+    }
+
+    @Test
+    fun testOnCapabilitiesChanged_oneNewNetwork_networkStored() = runBlocking {
+        // GIVEN a repo hooked up to [ConnectivityManager]
+        val scope = CoroutineScope(Dispatchers.Unconfined)
+        val repo = NetworkCapabilitiesRepo(
+            connectivityManager = connectivityManager,
+            scope = scope,
+            logger = logger,
+        )
+
+        val job = launch(start = CoroutineStart.UNDISPATCHED) {
+            repo.dataStream.collect {
+            }
+        }
+
+        val callback: NetworkCallback = withArgCaptor {
+            verify(connectivityManager)
+                .registerNetworkCallback(any(NetworkRequest::class.java), capture())
+        }
+
+        // WHEN a new network is added
+        callback.onCapabilitiesChanged(NET_1, NET_1_CAPS)
+
+        val currentMap = repo.dataStream.value
+
+        // THEN it is emitted from the flow
+        assertThat(currentMap[NET_1_ID]?.network).isEqualTo(NET_1)
+        assertThat(currentMap[NET_1_ID]?.capabilities).isEqualTo(NET_1_CAPS)
+
+        job.cancel()
+        scope.cancel()
+    }
+
+    @Test
+    fun testOnCapabilitiesChanged_twoNewNetworks_bothStored() = runBlocking {
+        // GIVEN a repo hooked up to [ConnectivityManager]
+        val scope = CoroutineScope(Dispatchers.Unconfined)
+        val repo = NetworkCapabilitiesRepo(
+            connectivityManager = connectivityManager,
+            scope = scope,
+            logger = logger,
+        )
+
+        val job = launch(start = CoroutineStart.UNDISPATCHED) {
+            repo.dataStream.collect {
+            }
+        }
+
+        val callback: NetworkCallback = withArgCaptor {
+            verify(connectivityManager)
+                .registerNetworkCallback(any(NetworkRequest::class.java), capture())
+        }
+
+        // WHEN two new networks are added
+        callback.onCapabilitiesChanged(NET_1, NET_1_CAPS)
+        callback.onCapabilitiesChanged(NET_2, NET_2_CAPS)
+
+        val currentMap = repo.dataStream.value
+
+        // THEN the current state of the flow reflects 2 networks
+        assertThat(currentMap[NET_1_ID]?.network).isEqualTo(NET_1)
+        assertThat(currentMap[NET_1_ID]?.capabilities).isEqualTo(NET_1_CAPS)
+        assertThat(currentMap[NET_2_ID]?.network).isEqualTo(NET_2)
+        assertThat(currentMap[NET_2_ID]?.capabilities).isEqualTo(NET_2_CAPS)
+
+        job.cancel()
+        scope.cancel()
+    }
+
+    @Test
+    fun testOnCapabilitesChanged_newCapabilitiesForExistingNetwork_areCaptured() = runBlocking {
+        // GIVEN a repo hooked up to [ConnectivityManager]
+        val scope = CoroutineScope(Dispatchers.Unconfined)
+        val repo = NetworkCapabilitiesRepo(
+            connectivityManager = connectivityManager,
+            scope = scope,
+            logger = logger,
+        )
+
+        val job = launch(start = CoroutineStart.UNDISPATCHED) {
+            repo.dataStream.collect {
+            }
+        }
+
+        val callback: NetworkCallback = withArgCaptor {
+            verify(connectivityManager)
+                .registerNetworkCallback(any(NetworkRequest::class.java), capture())
+        }
+
+        // WHEN a network is added, and then its capabilities are changed
+        callback.onCapabilitiesChanged(NET_1, NET_1_CAPS)
+        callback.onCapabilitiesChanged(NET_1, NET_2_CAPS)
+
+        val currentMap = repo.dataStream.value
+
+        // THEN the current state of the flow reflects the new capabilities
+        assertThat(currentMap[NET_1_ID]?.capabilities).isEqualTo(NET_2_CAPS)
+
+        job.cancel()
+        scope.cancel()
+    }
+
+    @Test
+    fun testOnLost_networkIsRemoved() = runBlocking {
+        // GIVEN a repo hooked up to [ConnectivityManager]
+        val scope = CoroutineScope(Dispatchers.Unconfined)
+        val repo = NetworkCapabilitiesRepo(
+            connectivityManager = connectivityManager,
+            scope = scope,
+            logger = logger,
+        )
+
+        val job = launch(start = CoroutineStart.UNDISPATCHED) {
+            repo.dataStream.collect {
+            }
+        }
+
+        val callback: NetworkCallback = withArgCaptor {
+            verify(connectivityManager)
+                .registerNetworkCallback(any(NetworkRequest::class.java), capture())
+        }
+
+        // WHEN two new networks are added, and one is removed
+        callback.onCapabilitiesChanged(NET_1, NET_1_CAPS)
+        callback.onCapabilitiesChanged(NET_2, NET_2_CAPS)
+        callback.onLost(NET_1)
+
+        val currentMap = repo.dataStream.value
+
+        // THEN the current state of the flow reflects only the remaining network
+        assertThat(currentMap[NET_1_ID]).isNull()
+        assertThat(currentMap[NET_2_ID]?.network).isEqualTo(NET_2)
+        assertThat(currentMap[NET_2_ID]?.capabilities).isEqualTo(NET_2_CAPS)
+
+        job.cancel()
+        scope.cancel()
+    }
+
+    @Test
+    fun testOnLost_noNetworks_doesNotCrash() = runBlocking {
+        // GIVEN a repo hooked up to [ConnectivityManager]
+        val scope = CoroutineScope(Dispatchers.Unconfined)
+        val repo = NetworkCapabilitiesRepo(
+            connectivityManager = connectivityManager,
+            scope = scope,
+            logger = logger,
+        )
+
+        val job = launch(start = CoroutineStart.UNDISPATCHED) {
+            repo.dataStream.collect {
+            }
+        }
+
+        val callback: NetworkCallback = withArgCaptor {
+            verify(connectivityManager)
+                .registerNetworkCallback(any(NetworkRequest::class.java), capture())
+        }
+
+        // WHEN no networks are added, and one is removed
+        callback.onLost(NET_1)
+
+        val currentMap = repo.dataStream.value
+
+        // THEN the current state of the flow shows no networks
+        assertThat(currentMap).isEmpty()
+
+        job.cancel()
+        scope.cancel()
+    }
+
+    private val NET_1_ID = 100
+    private val NET_1 = mock<Network>().also {
+        whenever(it.getNetId()).thenReturn(NET_1_ID)
+    }
+    private val NET_2_ID = 200
+    private val NET_2 = mock<Network>().also {
+        whenever(it.getNetId()).thenReturn(NET_2_ID)
+    }
+
+    private val NET_1_CAPS = NetworkCapabilities.Builder()
+        .addTransportType(TRANSPORT_CELLULAR)
+        .addCapability(NET_CAPABILITY_VALIDATED)
+        .build()
+
+    private val NET_2_CAPS = NetworkCapabilities.Builder()
+        .addTransportType(TRANSPORT_WIFI)
+        .addCapability(NET_CAPABILITY_NOT_METERED)
+        .addCapability(NET_CAPABILITY_VALIDATED)
+        .build()
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java
index fec2123..fda80a2 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java
@@ -28,6 +28,7 @@
 import static org.mockito.Mockito.when;
 
 import android.content.Intent;
+import android.os.BatteryManager;
 import android.os.Handler;
 import android.os.PowerManager;
 import android.os.PowerSaveState;
@@ -196,4 +197,26 @@
         TestableLooper.get(this).processAllMessages();
         // Should not throw an exception
     }
+
+    @Test
+    public void batteryStateChanged_withChargingSourceDock_isChargingSourceDockTrue() {
+        Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
+        intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_CHARGING);
+        intent.putExtra(BatteryManager.EXTRA_PLUGGED, BatteryManager.BATTERY_PLUGGED_DOCK);
+
+        mBatteryController.onReceive(getContext(), intent);
+
+        Assert.assertTrue(mBatteryController.isChargingSourceDock());
+    }
+
+    @Test
+    public void batteryStateChanged_withChargingSourceNotDock_isChargingSourceDockFalse() {
+        Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
+        intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_DISCHARGING);
+        intent.putExtra(BatteryManager.EXTRA_PLUGGED, BatteryManager.BATTERY_PLUGGED_WIRELESS);
+
+        mBatteryController.onReceive(getContext(), intent);
+
+        Assert.assertFalse(mBatteryController.isChargingSourceDock());
+    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/FlashlightControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/FlashlightControllerImplTest.kt
new file mode 100644
index 0000000..db0029a
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/FlashlightControllerImplTest.kt
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.policy
+
+import android.content.pm.PackageManager
+import android.hardware.camera2.CameraCharacteristics
+import android.hardware.camera2.CameraManager
+import android.hardware.camera2.impl.CameraMetadataNative
+import android.test.suitebuilder.annotation.SmallTest
+import android.testing.AndroidTestingRunner
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.broadcast.BroadcastSender
+import com.android.systemui.dump.DumpManager
+import com.android.systemui.util.concurrency.FakeExecutor
+import com.android.systemui.util.settings.FakeSettings
+import com.android.systemui.util.time.FakeSystemClock
+import java.util.concurrent.Executor
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.any
+import org.mockito.Mockito.clearInvocations
+import org.mockito.Mockito.eq
+import org.mockito.Mockito.never
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyNoMoreInteractions
+import org.mockito.Mockito.verifyZeroInteractions
+import org.mockito.Mockito.`when`
+import org.mockito.MockitoAnnotations
+
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+class FlashlightControllerImplTest : SysuiTestCase() {
+
+    @Mock
+    private lateinit var dumpManager: DumpManager
+
+    @Mock
+    private lateinit var cameraManager: CameraManager
+
+    @Mock
+    private lateinit var broadcastSender: BroadcastSender
+
+    @Mock
+    private lateinit var packageManager: PackageManager
+
+    private lateinit var fakeSettings: FakeSettings
+    private lateinit var fakeSystemClock: FakeSystemClock
+    private lateinit var backgroundExecutor: FakeExecutor
+    private lateinit var controller: FlashlightControllerImpl
+
+    @Before
+    fun setup() {
+        MockitoAnnotations.initMocks(this)
+
+        fakeSystemClock = FakeSystemClock()
+        backgroundExecutor = FakeExecutor(fakeSystemClock)
+        fakeSettings = FakeSettings()
+
+        `when`(packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH))
+                .thenReturn(true)
+
+        controller = FlashlightControllerImpl(
+                dumpManager,
+                cameraManager,
+                backgroundExecutor,
+                fakeSettings,
+                broadcastSender,
+                packageManager
+        )
+    }
+
+    @Test
+    fun testNoCameraManagerInteractionDirectlyOnConstructor() {
+        verifyZeroInteractions(cameraManager)
+    }
+
+    @Test
+    fun testCameraManagerInitAfterConstructionOnExecutor() {
+        injectCamera()
+        backgroundExecutor.runAllReady()
+
+        verify(cameraManager).registerTorchCallback(eq(backgroundExecutor), any())
+    }
+
+    @Test
+    fun testNoCallbackIfNoFlashCamera() {
+        injectCamera(flash = false)
+        backgroundExecutor.runAllReady()
+
+        verify(cameraManager, never()).registerTorchCallback(any<Executor>(), any())
+    }
+
+    @Test
+    fun testNoCallbackIfNoBackCamera() {
+        injectCamera(facing = CameraCharacteristics.LENS_FACING_FRONT)
+        backgroundExecutor.runAllReady()
+
+        verify(cameraManager, never()).registerTorchCallback(any<Executor>(), any())
+    }
+
+    @Test
+    fun testSetFlashlightInBackgroundExecutor() {
+        val id = injectCamera()
+        backgroundExecutor.runAllReady()
+
+        clearInvocations(cameraManager)
+        val enable = !controller.isEnabled
+        controller.setFlashlight(enable)
+        verifyNoMoreInteractions(cameraManager)
+
+        backgroundExecutor.runAllReady()
+        verify(cameraManager).setTorchMode(id, enable)
+    }
+
+    private fun injectCamera(
+        flash: Boolean = true,
+        facing: Int = CameraCharacteristics.LENS_FACING_BACK
+    ): String {
+        val cameraID = "ID"
+        val camera = CameraCharacteristics(CameraMetadataNative().apply {
+            set(CameraCharacteristics.FLASH_INFO_AVAILABLE, flash)
+            set(CameraCharacteristics.LENS_FACING, facing)
+        })
+        `when`(cameraManager.cameraIdList).thenReturn(arrayOf(cameraID))
+        `when`(cameraManager.getCameraCharacteristics(cameraID)).thenReturn(camera)
+        return cameraID
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HeadsUpManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HeadsUpManagerTest.java
index 424a40058..b8e25ab 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HeadsUpManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HeadsUpManagerTest.java
@@ -106,7 +106,7 @@
     public void testHunRemovedLogging() {
         mAlertEntry.mEntry = mEntry;
         mHeadsUpManager.onAlertEntryRemoved(mAlertEntry);
-        verify(mLogger, times(1)).logNotificationActuallyRemoved(eq(mEntry.getKey()));
+        verify(mLogger, times(1)).logNotificationActuallyRemoved(eq(mEntry));
     }
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java
index 0e25d24..a7ff59c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SmartReplyViewTest.java
@@ -51,12 +51,12 @@
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.plugins.ActivityStarter;
 import com.android.systemui.plugins.ActivityStarter.OnDismissAction;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.statusbar.NotificationRemoteInputManager;
 import com.android.systemui.statusbar.SmartReplyController;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
 import com.android.systemui.statusbar.phone.KeyguardDismissUtil;
-import com.android.systemui.statusbar.phone.ShadeController;
 
 import org.junit.After;
 import org.junit.Before;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/UserSwitcherControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/UserSwitcherControllerTest.kt
index 6bd8b98..359a780 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/UserSwitcherControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/UserSwitcherControllerTest.kt
@@ -17,6 +17,7 @@
 package com.android.systemui.statusbar.policy
 
 import android.app.IActivityManager
+import android.app.NotificationManager
 import android.app.admin.DevicePolicyManager
 import android.content.BroadcastReceiver
 import android.content.Context
@@ -38,9 +39,12 @@
 import com.android.internal.logging.testing.UiEventLoggerFake
 import com.android.internal.util.LatencyTracker
 import com.android.internal.util.UserIcons
+import com.android.systemui.GuestResetOrExitSessionReceiver
 import com.android.systemui.GuestResumeSessionReceiver
+import com.android.systemui.GuestSessionNotification
 import com.android.systemui.R
 import com.android.systemui.SysuiTestCase
+import com.android.systemui.animation.DialogCuj
 import com.android.systemui.animation.DialogLaunchAnimator
 import com.android.systemui.broadcast.BroadcastDispatcher
 import com.android.systemui.broadcast.BroadcastSender
@@ -50,7 +54,7 @@
 import com.android.systemui.qs.QSUserSwitcherEvent
 import com.android.systemui.qs.user.UserSwitchDialogController
 import com.android.systemui.settings.UserTracker
-import com.android.systemui.statusbar.phone.NotificationShadeWindowView
+import com.android.systemui.shade.NotificationShadeWindowView
 import com.android.systemui.telephony.TelephonyListenerManager
 import com.android.systemui.util.concurrency.FakeExecutor
 import com.android.systemui.util.mockito.any
@@ -69,12 +73,13 @@
 import org.junit.runner.RunWith
 import org.mockito.ArgumentMatchers.anyInt
 import org.mockito.Mock
-import org.mockito.Mockito.`when`
 import org.mockito.Mockito.doNothing
 import org.mockito.Mockito.doReturn
 import org.mockito.Mockito.eq
 import org.mockito.Mockito.mock
+import org.mockito.Mockito.never
 import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when`
 import org.mockito.MockitoAnnotations
 
 @RunWith(AndroidTestingRunner::class)
@@ -102,6 +107,11 @@
     @Mock private lateinit var threadedRenderer: ThreadedRenderer
     @Mock private lateinit var dialogLaunchAnimator: DialogLaunchAnimator
     @Mock private lateinit var globalSettings: GlobalSettings
+    @Mock private lateinit var guestSessionNotification: GuestSessionNotification
+    @Mock private lateinit var guestResetOrExitSessionReceiver: GuestResetOrExitSessionReceiver
+    private lateinit var resetSessionDialogFactory:
+                            GuestResumeSessionReceiver.ResetSessionDialog.Factory
+    private lateinit var guestResumeSessionReceiver: GuestResumeSessionReceiver
     private lateinit var testableLooper: TestableLooper
     private lateinit var bgExecutor: FakeExecutor
     private lateinit var longRunningExecutor: FakeExecutor
@@ -133,9 +143,28 @@
                 com.android.internal.R.bool.config_guestUserAutoCreated, false)
 
         mContext.addMockSystemService(Context.FACE_SERVICE, mock(FaceManager::class.java))
+        mContext.addMockSystemService(Context.NOTIFICATION_SERVICE,
+                mock(NotificationManager::class.java))
         mContext.addMockSystemService(Context.FINGERPRINT_SERVICE,
                 mock(FingerprintManager::class.java))
 
+        resetSessionDialogFactory = object : GuestResumeSessionReceiver.ResetSessionDialog.Factory {
+                override fun create(userId: Int): GuestResumeSessionReceiver.ResetSessionDialog {
+                    return GuestResumeSessionReceiver.ResetSessionDialog(
+                                mContext,
+                                mock(UserSwitcherController::class.java),
+                                uiEventLogger,
+                                userId
+                            )
+                }
+            }
+
+        guestResumeSessionReceiver = GuestResumeSessionReceiver(userTracker,
+                                        secureSettings,
+                                        broadcastDispatcher,
+                                        guestSessionNotification,
+                                        resetSessionDialogFactory)
+
         `when`(userManager.canAddMoreUsers(eq(UserManager.USER_TYPE_FULL_SECONDARY)))
                 .thenReturn(true)
         `when`(notificationShadeWindowView.context).thenReturn(context)
@@ -198,7 +227,9 @@
                 interactionJankMonitor,
                 latencyTracker,
                 dumpManager,
-                dialogLaunchAnimator)
+                dialogLaunchAnimator,
+                guestResumeSessionReceiver,
+                guestResetOrExitSessionReceiver)
         userSwitcherController.init(notificationShadeWindowView)
     }
 
@@ -239,6 +270,8 @@
         `when`(userManager.createGuest(any())).thenReturn(guestInfo)
 
         userSwitcherController.onUserListItemClicked(emptyGuestUserRecord, null)
+        bgExecutor.runAllReady()
+        uiExecutor.runAllReady()
         testableLooper.processAllMessages()
         verify(interactionJankMonitor).begin(any())
         verify(latencyTracker).onActionStart(LatencyTracker.ACTION_USER_SWITCH)
@@ -264,6 +297,8 @@
         `when`(userManager.createGuest(any())).thenReturn(guestInfo)
 
         userSwitcherController.onUserListItemClicked(emptyGuestUserRecord, dialogShower)
+        bgExecutor.runAllReady()
+        uiExecutor.runAllReady()
         testableLooper.processAllMessages()
         verify(dialogShower).dismiss()
     }
@@ -288,7 +323,10 @@
                 .getButton(DialogInterface.BUTTON_POSITIVE).performClick()
         testableLooper.processAllMessages()
         assertEquals(1, uiEventLogger.numLogs())
-        assertEquals(QSUserSwitcherEvent.QS_USER_GUEST_REMOVE.id, uiEventLogger.eventId(0))
+        assertTrue(
+            QSUserSwitcherEvent.QS_USER_GUEST_REMOVE.id == uiEventLogger.eventId(0) ||
+            QSUserSwitcherEvent.QS_USER_SWITCH.id == uiEventLogger.eventId(0)
+        )
     }
 
     @Test
@@ -330,7 +368,10 @@
         userSwitcherController.onUserListItemClicked(currentGuestUserRecord, dialogShower)
         assertNotNull(userSwitcherController.mExitGuestDialog)
         testableLooper.processAllMessages()
-        verify(dialogShower).showDialog(userSwitcherController.mExitGuestDialog)
+        verify(dialogShower)
+            .showDialog(
+                userSwitcherController.mExitGuestDialog,
+                DialogCuj(InteractionJankMonitor.CUJ_USER_DIALOG_OPEN, "exit_guest_mode"))
     }
 
     @Test
@@ -350,7 +391,7 @@
         userSwitcherController.onUserListItemClicked(currentGuestUserRecord, null)
         assertNotNull(userSwitcherController.mExitGuestDialog)
         userSwitcherController.mExitGuestDialog
-                .getButton(DialogInterface.BUTTON_NEGATIVE).performClick()
+                .getButton(DialogInterface.BUTTON_NEUTRAL).performClick()
         testableLooper.processAllMessages()
         assertEquals(0, uiEventLogger.numLogs())
     }
@@ -548,4 +589,24 @@
         broadcastReceiverCaptor.value.onReceive(context, intent)
         verify(cb).onUserSwitched()
     }
+
+    @Test
+    fun onUserItemClicked_guest_runsOnBgThread() {
+        val dialogShower = mock(UserSwitchDialogController.DialogShower::class.java)
+        val guestUserRecord = UserSwitcherController.UserRecord(
+            null,
+            picture,
+            true /* guest */,
+            false /* current */,
+            false /* isAddUser */,
+            false /* isRestricted */,
+            true /* isSwitchToEnabled */,
+            false /* isAddSupervisedUser */)
+
+        userSwitcherController.onUserListItemClicked(guestUserRecord, dialogShower)
+        assertTrue(bgExecutor.numPending() > 0)
+        verify(userManager, never()).createGuest(context)
+        bgExecutor.runAllReady()
+        verify(userManager).createGuest(context)
+    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/unfold/FoldAodAnimationControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/unfold/FoldAodAnimationControllerTest.kt
new file mode 100644
index 0000000..f51f783
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/unfold/FoldAodAnimationControllerTest.kt
@@ -0,0 +1,166 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.unfold
+
+import android.hardware.devicestate.DeviceStateManager
+import android.hardware.devicestate.DeviceStateManager.FoldStateListener
+import android.os.Handler
+import android.os.PowerManager
+import android.testing.AndroidTestingRunner
+import android.testing.TestableLooper
+import android.testing.TestableLooper.RunWithLooper
+import android.view.ViewGroup
+import android.view.ViewTreeObserver
+import androidx.test.filters.SmallTest
+import com.android.internal.util.LatencyTracker
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.keyguard.WakefulnessLifecycle
+import com.android.systemui.shade.NotificationPanelViewController
+import com.android.systemui.statusbar.LightRevealScrim
+import com.android.systemui.statusbar.phone.CentralSurfaces
+import com.android.systemui.unfold.util.FoldableDeviceStates
+import com.android.systemui.unfold.util.FoldableTestUtils
+import com.android.systemui.util.mockito.any
+import com.android.systemui.util.settings.GlobalSettings
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentCaptor
+import org.mockito.Captor
+import org.mockito.Mock
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyNoMoreInteractions
+import org.mockito.Mockito.`when` as whenever
+import org.mockito.MockitoAnnotations
+
+@RunWith(AndroidTestingRunner::class)
+@SmallTest
+@RunWithLooper
+class FoldAodAnimationControllerTest : SysuiTestCase() {
+
+    @Mock lateinit var deviceStateManager: DeviceStateManager
+
+    @Mock lateinit var wakefulnessLifecycle: WakefulnessLifecycle
+
+    @Mock lateinit var globalSettings: GlobalSettings
+
+    @Mock lateinit var latencyTracker: LatencyTracker
+
+    @Mock lateinit var centralSurfaces: CentralSurfaces
+
+    @Mock lateinit var lightRevealScrim: LightRevealScrim
+
+    @Mock lateinit var notificationPanelViewController: NotificationPanelViewController
+
+    @Mock lateinit var viewGroup: ViewGroup
+
+    @Mock lateinit var viewTreeObserver: ViewTreeObserver
+
+    @Captor private lateinit var foldStateListenerCaptor: ArgumentCaptor<FoldStateListener>
+
+    private lateinit var deviceStates: FoldableDeviceStates
+
+    private lateinit var testableLooper: TestableLooper
+
+    lateinit var foldAodAnimationController: FoldAodAnimationController
+
+    @Before
+    fun setup() {
+        MockitoAnnotations.initMocks(this)
+        testableLooper = TestableLooper.get(this)
+
+        foldAodAnimationController =
+            FoldAodAnimationController(
+                    Handler(testableLooper.looper),
+                    context.mainExecutor,
+                    context,
+                    deviceStateManager,
+                    wakefulnessLifecycle,
+                    globalSettings,
+                    latencyTracker,
+                )
+                .apply { initialize(centralSurfaces, lightRevealScrim) }
+        deviceStates = FoldableTestUtils.findDeviceStates(context)
+
+        whenever(notificationPanelViewController.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(notificationPanelViewController.startFoldToAodAnimation(any(), any(), any()))
+            .then {
+                val onActionStarted = it.arguments[0] as Runnable
+                onActionStarted.run()
+            }
+        verify(deviceStateManager).registerCallback(any(), foldStateListenerCaptor.capture())
+
+        foldAodAnimationController.setIsDozing(dozing = true)
+        setAodEnabled(enabled = true)
+        sendFoldEvent(folded = false)
+    }
+
+    @Test
+    fun onFolded_aodDisabled_doesNotLogLatency() {
+        setAodEnabled(enabled = false)
+
+        fold()
+        simulateScreenTurningOn()
+
+        verifyNoMoreInteractions(latencyTracker)
+    }
+
+    @Test
+    fun onFolded_aodEnabled_logsLatency() {
+        setAodEnabled(enabled = true)
+
+        fold()
+        simulateScreenTurningOn()
+
+        verify(latencyTracker).onActionStart(any())
+        verify(latencyTracker).onActionEnd(any())
+    }
+
+    @Test
+    fun onFolded_animationCancelled_doesNotLogLatency() {
+        setAodEnabled(enabled = true)
+
+        fold()
+        foldAodAnimationController.onScreenTurningOn({})
+        foldAodAnimationController.onStartedWakingUp()
+        testableLooper.processAllMessages()
+
+        verify(latencyTracker).onActionStart(any())
+        verify(latencyTracker).onActionCancel(any())
+    }
+
+    private fun simulateScreenTurningOn() {
+        foldAodAnimationController.onScreenTurningOn({})
+        foldAodAnimationController.onScreenTurnedOn()
+        testableLooper.processAllMessages()
+    }
+
+    private fun fold() = sendFoldEvent(folded = true)
+
+    private fun setAodEnabled(enabled: Boolean) =
+        foldAodAnimationController.onAlwaysOnChanged(alwaysOn = enabled)
+
+    private fun sendFoldEvent(folded: Boolean) {
+        val state = if (folded) deviceStates.folded else deviceStates.unfolded
+        foldStateListenerCaptor.value.onStateChanged(state)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/unfold/FoldStateLoggingProviderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/unfold/FoldStateLoggingProviderTest.kt
index 8076b4e..39e4e64 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/unfold/FoldStateLoggingProviderTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/unfold/FoldStateLoggingProviderTest.kt
@@ -25,28 +25,20 @@
 import com.android.systemui.unfold.updates.FOLD_UPDATE_FINISH_HALF_OPEN
 import com.android.systemui.unfold.updates.FOLD_UPDATE_START_CLOSING
 import com.android.systemui.unfold.updates.FOLD_UPDATE_START_OPENING
-import com.android.systemui.unfold.updates.FoldStateProvider
 import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdate
+import com.android.systemui.unfold.util.TestFoldStateProvider
 import com.android.systemui.util.time.FakeSystemClock
 import com.google.common.truth.Truth.assertThat
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
-import org.mockito.ArgumentCaptor
-import org.mockito.Captor
-import org.mockito.Mock
-import org.mockito.Mockito.verify
 import org.mockito.MockitoAnnotations
 
 @RunWith(AndroidTestingRunner::class)
 @SmallTest
 class FoldStateLoggingProviderTest : SysuiTestCase() {
 
-    @Captor
-    private lateinit var foldUpdatesListener: ArgumentCaptor<FoldStateProvider.FoldUpdatesListener>
-
-    @Mock private lateinit var foldStateProvider: FoldStateProvider
-
+    private val testFoldStateProvider = TestFoldStateProvider()
     private val fakeClock = FakeSystemClock()
 
     private lateinit var foldStateLoggingProvider: FoldStateLoggingProvider
@@ -65,12 +57,10 @@
         MockitoAnnotations.initMocks(this)
 
         foldStateLoggingProvider =
-            FoldStateLoggingProviderImpl(foldStateProvider, fakeClock).apply {
+            FoldStateLoggingProviderImpl(testFoldStateProvider, fakeClock).apply {
                 addCallback(foldStateLoggingListener)
                 init()
             }
-
-        verify(foldStateProvider).addCallback(foldUpdatesListener.capture())
     }
 
     @Test
@@ -183,10 +173,10 @@
     fun uninit_removesCallback() {
         foldStateLoggingProvider.uninit()
 
-        verify(foldStateProvider).removeCallback(foldUpdatesListener.value)
+        assertThat(testFoldStateProvider.hasListeners).isFalse()
     }
 
     private fun sendFoldUpdate(@FoldUpdate foldUpdate: Int) {
-        foldUpdatesListener.value.onFoldUpdate(foldUpdate)
+        testFoldStateProvider.sendFoldUpdate(foldUpdate)
     }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/unfold/config/ResourceUnfoldTransitionConfigTest.kt b/packages/SystemUI/tests/src/com/android/systemui/unfold/config/ResourceUnfoldTransitionConfigTest.kt
new file mode 100644
index 0000000..ab450e2
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/unfold/config/ResourceUnfoldTransitionConfigTest.kt
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT 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.unfold.config
+
+import android.testing.AndroidTestingRunner
+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
+
+
+/**
+ * A test that checks that we load correct resources in
+ * ResourceUnfoldTransitionConfig as we use strings there instead of R constants.
+ * Internal Android resource constants are not available in public APIs,
+ * so we can't use them there directly.
+ */
+@RunWith(AndroidTestingRunner::class)
+@SmallTest
+class ResourceUnfoldTransitionConfigTest : SysuiTestCase() {
+
+    private val config = ResourceUnfoldTransitionConfig()
+
+    @Test
+    fun testIsEnabled() {
+        assertThat(config.isEnabled).isEqualTo(mContext.resources
+            .getBoolean(com.android.internal.R.bool.config_unfoldTransitionEnabled))
+    }
+
+    @Test
+    fun testHingeAngleEnabled() {
+        assertThat(config.isHingeAngleEnabled).isEqualTo(mContext.resources
+            .getBoolean(com.android.internal.R.bool.config_unfoldTransitionHingeAngle))
+    }
+
+    @Test
+    fun testHalfFoldedTimeout() {
+        assertThat(config.halfFoldedTimeoutMillis).isEqualTo(mContext.resources
+            .getInteger(com.android.internal.R.integer.config_unfoldTransitionHalfFoldedTimeout))
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/unfold/updates/DeviceFoldStateProviderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/unfold/updates/DeviceFoldStateProviderTest.kt
index 1f1f88b..87fca1f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/unfold/updates/DeviceFoldStateProviderTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/unfold/updates/DeviceFoldStateProviderTest.kt
@@ -16,82 +16,69 @@
 
 package com.android.systemui.unfold.updates
 
-import android.app.ActivityManager
-import android.app.ActivityManager.RunningTaskInfo
-import android.app.WindowConfiguration.ACTIVITY_TYPE_HOME
-import android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD
-import android.app.WindowConfiguration.ActivityType
-import android.hardware.devicestate.DeviceStateManager
-import android.hardware.devicestate.DeviceStateManager.FoldStateListener
 import android.os.Handler
 import android.testing.AndroidTestingRunner
 import androidx.core.util.Consumer
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
+import com.android.systemui.unfold.config.ResourceUnfoldTransitionConfig
+import com.android.systemui.unfold.config.UnfoldTransitionConfig
+import com.android.systemui.unfold.system.ActivityManagerActivityTypeProvider
+import com.android.systemui.unfold.updates.FoldProvider.FoldCallback
 import com.android.systemui.unfold.updates.hinge.HingeAngleProvider
 import com.android.systemui.unfold.updates.screen.ScreenStatusProvider
 import com.android.systemui.unfold.updates.screen.ScreenStatusProvider.ScreenListener
-import com.android.systemui.unfold.util.FoldableDeviceStates
-import com.android.systemui.unfold.util.FoldableTestUtils
 import com.android.systemui.util.mockito.any
 import com.google.common.truth.Truth.assertThat
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
-import org.mockito.ArgumentCaptor
-import org.mockito.Captor
 import org.mockito.Mock
-import org.mockito.Mockito.verify
-import org.mockito.Mockito.`when` as whenever
 import org.mockito.MockitoAnnotations
+import java.util.concurrent.Executor
+import org.mockito.Mockito.`when` as whenever
 
 @RunWith(AndroidTestingRunner::class)
 @SmallTest
 class DeviceFoldStateProviderTest : SysuiTestCase() {
 
-    @Mock private lateinit var hingeAngleProvider: HingeAngleProvider
+    @Mock
+    private lateinit var activityTypeProvider: ActivityManagerActivityTypeProvider
 
-    @Mock private lateinit var screenStatusProvider: ScreenStatusProvider
+    @Mock
+    private lateinit var handler: Handler
 
-    @Mock private lateinit var deviceStateManager: DeviceStateManager
-
-    @Mock private lateinit var activityManager: ActivityManager
-
-    @Mock private lateinit var handler: Handler
-
-    @Captor private lateinit var foldStateListenerCaptor: ArgumentCaptor<FoldStateListener>
-
-    @Captor private lateinit var screenOnListenerCaptor: ArgumentCaptor<ScreenListener>
-
-    @Captor private lateinit var hingeAngleCaptor: ArgumentCaptor<Consumer<Float>>
+    private val foldProvider = TestFoldProvider()
+    private val screenOnStatusProvider = TestScreenOnStatusProvider()
+    private val testHingeAngleProvider = TestHingeAngleProvider()
 
     private lateinit var foldStateProvider: DeviceFoldStateProvider
 
     private val foldUpdates: MutableList<Int> = arrayListOf()
     private val hingeAngleUpdates: MutableList<Float> = arrayListOf()
 
-    private lateinit var deviceStates: FoldableDeviceStates
-
     private var scheduledRunnable: Runnable? = null
     private var scheduledRunnableDelay: Long? = null
 
     @Before
     fun setUp() {
         MockitoAnnotations.initMocks(this)
-        overrideResource(
-            com.android.internal.R.integer.config_unfoldTransitionHalfFoldedTimeout,
-            HALF_OPENED_TIMEOUT_MILLIS.toInt())
-        deviceStates = FoldableTestUtils.findDeviceStates(context)
+
+        val config = object : UnfoldTransitionConfig by ResourceUnfoldTransitionConfig() {
+            override val halfFoldedTimeoutMillis: Int
+                get() = HALF_OPENED_TIMEOUT_MILLIS.toInt()
+        }
 
         foldStateProvider =
             DeviceFoldStateProvider(
-                context,
-                hingeAngleProvider,
-                screenStatusProvider,
-                deviceStateManager,
-                activityManager,
+                config,
+                testHingeAngleProvider,
+                screenOnStatusProvider,
+                foldProvider,
+                activityTypeProvider,
                 context.mainExecutor,
-                handler)
+                handler
+            )
 
         foldStateProvider.addCallback(
             object : FoldStateProvider.FoldUpdatesListener {
@@ -105,10 +92,6 @@
             })
         foldStateProvider.start()
 
-        verify(deviceStateManager).registerCallback(any(), foldStateListenerCaptor.capture())
-        verify(screenStatusProvider).addCallback(screenOnListenerCaptor.capture())
-        verify(hingeAngleProvider).addCallback(hingeAngleCaptor.capture())
-
         whenever(handler.postDelayed(any<Runnable>(), any())).then { invocationOnMock ->
             scheduledRunnable = invocationOnMock.getArgument<Runnable>(0)
             scheduledRunnableDelay = invocationOnMock.getArgument<Long>(1)
@@ -125,7 +108,7 @@
         }
 
         // By default, we're on launcher.
-        setupForegroundActivityType(ACTIVITY_TYPE_HOME)
+        setupForegroundActivityType(isHomeActivity = true)
     }
 
     @Test
@@ -146,14 +129,14 @@
     fun testOnFolded_stopsHingeAngleProvider() {
         setFoldState(folded = true)
 
-        verify(hingeAngleProvider).stop()
+        assertThat(testHingeAngleProvider.isStarted).isFalse()
     }
 
     @Test
     fun testOnUnfolded_startsHingeAngleProvider() {
         setFoldState(folded = false)
 
-        verify(hingeAngleProvider).start()
+        assertThat(testHingeAngleProvider.isStarted).isTrue()
     }
 
     @Test
@@ -310,7 +293,7 @@
 
     @Test
     fun startClosingEvent_whileNotOnLauncher_doesNotTriggerBeforeThreshold() {
-        setupForegroundActivityType(ACTIVITY_TYPE_STANDARD)
+        setupForegroundActivityType(isHomeActivity = false)
         sendHingeAngleEvent(180)
 
         sendHingeAngleEvent(START_CLOSING_ON_APPS_THRESHOLD_DEGREES + 1)
@@ -319,8 +302,28 @@
     }
 
     @Test
+    fun startClosingEvent_whileActivityTypeNotAvailable_triggerBeforeThreshold() {
+        setupForegroundActivityType(isHomeActivity = null)
+        sendHingeAngleEvent(180)
+
+        sendHingeAngleEvent(START_CLOSING_ON_APPS_THRESHOLD_DEGREES + 1)
+
+        assertThat(foldUpdates).containsExactly(FOLD_UPDATE_START_CLOSING)
+    }
+
+    @Test
+    fun startClosingEvent_whileOnLauncher_doesTriggerBeforeThreshold() {
+        setupForegroundActivityType(isHomeActivity = true)
+        sendHingeAngleEvent(180)
+
+        sendHingeAngleEvent(START_CLOSING_ON_APPS_THRESHOLD_DEGREES + 1)
+
+        assertThat(foldUpdates).containsExactly(FOLD_UPDATE_START_CLOSING)
+    }
+
+    @Test
     fun startClosingEvent_whileNotOnLauncher_triggersAfterThreshold() {
-        setupForegroundActivityType(ACTIVITY_TYPE_STANDARD)
+        setupForegroundActivityType(isHomeActivity = false)
         sendHingeAngleEvent(START_CLOSING_ON_APPS_THRESHOLD_DEGREES)
 
         sendHingeAngleEvent(START_CLOSING_ON_APPS_THRESHOLD_DEGREES - 1)
@@ -328,9 +331,8 @@
         assertThat(foldUpdates).containsExactly(FOLD_UPDATE_START_CLOSING)
     }
 
-    private fun setupForegroundActivityType(@ActivityType type: Int) {
-        val taskInfo = RunningTaskInfo().apply { topActivityType = type }
-        whenever(activityManager.getRunningTasks(1)).thenReturn(listOf(taskInfo))
+    private fun setupForegroundActivityType(isHomeActivity: Boolean?) {
+        whenever(activityTypeProvider.isHomeActivity).thenReturn(isHomeActivity)
     }
 
     private fun simulateTimeout(waitTime: Long = HALF_OPENED_TIMEOUT_MILLIS) {
@@ -348,16 +350,72 @@
     }
 
     private fun setFoldState(folded: Boolean) {
-        val state = if (folded) deviceStates.folded else deviceStates.unfolded
-        foldStateListenerCaptor.value.onStateChanged(state)
+        foldProvider.notifyFolded(folded)
     }
 
     private fun fireScreenOnEvent() {
-        screenOnListenerCaptor.value.onScreenTurnedOn()
+        screenOnStatusProvider.notifyScreenTurnedOn()
     }
 
     private fun sendHingeAngleEvent(angle: Int) {
-        hingeAngleCaptor.value.accept(angle.toFloat())
+        testHingeAngleProvider.notifyAngle(angle.toFloat())
+    }
+
+    private class TestFoldProvider : FoldProvider {
+        private val callbacks = arrayListOf<FoldCallback>()
+
+        override fun registerCallback(callback: FoldCallback, executor: Executor) {
+            callbacks += callback
+        }
+
+        override fun unregisterCallback(callback: FoldCallback) {
+            callbacks -= callback
+        }
+
+        fun notifyFolded(isFolded: Boolean) {
+            callbacks.forEach { it.onFoldUpdated(isFolded) }
+        }
+    }
+
+    private class TestScreenOnStatusProvider : ScreenStatusProvider {
+        private val callbacks = arrayListOf<ScreenListener>()
+
+        override fun addCallback(listener: ScreenListener) {
+            callbacks += listener
+        }
+
+        override fun removeCallback(listener: ScreenListener) {
+            callbacks -= listener
+        }
+
+        fun notifyScreenTurnedOn() {
+            callbacks.forEach { it.onScreenTurnedOn() }
+        }
+    }
+
+    private class TestHingeAngleProvider : HingeAngleProvider {
+        private val callbacks = arrayListOf<Consumer<Float>>()
+        var isStarted: Boolean = false
+
+        override fun start() {
+            isStarted = true;
+        }
+
+        override fun stop() {
+            isStarted = false;
+        }
+
+        override fun addCallback(listener: Consumer<Float>) {
+            callbacks += listener
+        }
+
+        override fun removeCallback(listener: Consumer<Float>) {
+            callbacks -= listener
+        }
+
+        fun notifyAngle(angle: Float) {
+            callbacks.forEach { it.accept(angle) }
+        }
     }
 
     companion object {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/unfold/util/NaturalRotationUnfoldProgressProviderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/unfold/util/NaturalRotationUnfoldProgressProviderTest.kt
index a3f17aa..b2cedbf 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/unfold/util/NaturalRotationUnfoldProgressProviderTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/unfold/util/NaturalRotationUnfoldProgressProviderTest.kt
@@ -20,18 +20,18 @@
 import android.view.IWindowManager
 import android.view.Surface
 import androidx.test.filters.SmallTest
-import com.android.systemui.unfold.UnfoldTransitionProgressProvider
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.unfold.TestUnfoldTransitionProvider
 import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener
 import com.android.systemui.util.mockito.any
-import com.android.systemui.SysuiTestCase
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.mockito.ArgumentCaptor
 import org.mockito.Mock
-import org.mockito.Mockito.verify
 import org.mockito.Mockito.clearInvocations
 import org.mockito.Mockito.never
+import org.mockito.Mockito.verify
 import org.mockito.MockitoAnnotations
 
 @RunWith(AndroidTestingRunner::class)
@@ -41,16 +41,13 @@
     @Mock
     lateinit var windowManager: IWindowManager
 
-    @Mock
-    lateinit var sourceProvider: UnfoldTransitionProgressProvider
+    private val sourceProvider = TestUnfoldTransitionProvider()
 
     @Mock
     lateinit var transitionListener: TransitionProgressListener
 
     lateinit var progressProvider: NaturalRotationUnfoldProgressProvider
 
-    private val sourceProviderListenerCaptor =
-        ArgumentCaptor.forClass(TransitionProgressListener::class.java)
     private val rotationWatcherCaptor =
         ArgumentCaptor.forClass(IRotationWatcher.Stub::class.java)
 
@@ -66,7 +63,6 @@
 
         progressProvider.init()
 
-        verify(sourceProvider).addCallback(sourceProviderListenerCaptor.capture())
         verify(windowManager).watchRotation(rotationWatcherCaptor.capture(), any())
 
         progressProvider.addCallback(transitionListener)
@@ -76,7 +72,7 @@
     fun testNaturalRotation0_sendTransitionStartedEvent_eventReceived() {
         onRotationChanged(Surface.ROTATION_0)
 
-        source.onTransitionStarted()
+        sourceProvider.onTransitionStarted()
 
         verify(transitionListener).onTransitionStarted()
     }
@@ -85,7 +81,7 @@
     fun testNaturalRotation0_sendTransitionProgressEvent_eventReceived() {
         onRotationChanged(Surface.ROTATION_0)
 
-        source.onTransitionProgress(0.5f)
+        sourceProvider.onTransitionProgress(0.5f)
 
         verify(transitionListener).onTransitionProgress(0.5f)
     }
@@ -94,7 +90,7 @@
     fun testNotNaturalRotation90_sendTransitionStartedEvent_eventNotReceived() {
         onRotationChanged(Surface.ROTATION_90)
 
-        source.onTransitionStarted()
+        sourceProvider.onTransitionStarted()
 
         verify(transitionListener, never()).onTransitionStarted()
     }
@@ -103,7 +99,7 @@
     fun testNaturalRotation90_sendTransitionProgressEvent_eventNotReceived() {
         onRotationChanged(Surface.ROTATION_90)
 
-        source.onTransitionProgress(0.5f)
+        sourceProvider.onTransitionProgress(0.5f)
 
         verify(transitionListener, never()).onTransitionProgress(0.5f)
     }
@@ -111,7 +107,7 @@
     @Test
     fun testRotationBecameUnnaturalDuringTransition_sendsTransitionFinishedEvent() {
         onRotationChanged(Surface.ROTATION_0)
-        source.onTransitionStarted()
+        sourceProvider.onTransitionStarted()
         clearInvocations(transitionListener)
 
         onRotationChanged(Surface.ROTATION_90)
@@ -122,7 +118,7 @@
     @Test
     fun testRotationBecameNaturalDuringTransition_sendsTransitionStartedEvent() {
         onRotationChanged(Surface.ROTATION_90)
-        source.onTransitionStarted()
+        sourceProvider.onTransitionStarted()
         clearInvocations(transitionListener)
 
         onRotationChanged(Surface.ROTATION_0)
@@ -133,7 +129,4 @@
     private fun onRotationChanged(rotation: Int) {
         rotationWatcherCaptor.value.onRotationChanged(rotation)
     }
-
-    private val source: TransitionProgressListener
-        get() = sourceProviderListenerCaptor.value
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/unfold/util/ScaleAwareUnfoldProgressProviderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/unfold/util/ScaleAwareUnfoldProgressProviderTest.kt
index db7a8516..fc2a78a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/unfold/util/ScaleAwareUnfoldProgressProviderTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/unfold/util/ScaleAwareUnfoldProgressProviderTest.kt
@@ -21,6 +21,7 @@
 import android.testing.AndroidTestingRunner
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
+import com.android.systemui.unfold.TestUnfoldTransitionProvider
 import com.android.systemui.unfold.UnfoldTransitionProgressProvider
 import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener
 import com.android.systemui.util.mockito.any
@@ -41,15 +42,11 @@
     lateinit var contentResolver: ContentResolver
 
     @Mock
-    lateinit var sourceProvider: UnfoldTransitionProgressProvider
-
-    @Mock
     lateinit var sinkProvider: TransitionProgressListener
 
-    lateinit var progressProvider: ScaleAwareTransitionProgressProvider
+    private val sourceProvider = TestUnfoldTransitionProvider()
 
-    private val sourceProviderListenerCaptor =
-            ArgumentCaptor.forClass(TransitionProgressListener::class.java)
+    lateinit var progressProvider: ScaleAwareTransitionProgressProvider
 
     private val animatorDurationScaleListenerCaptor =
             ArgumentCaptor.forClass(ContentObserver::class.java)
@@ -63,7 +60,6 @@
                 contentResolver
         )
 
-        verify(sourceProvider).addCallback(sourceProviderListenerCaptor.capture())
         verify(contentResolver).registerContentObserver(any(), any(),
                 animatorDurationScaleListenerCaptor.capture())
 
@@ -74,7 +70,7 @@
     fun onTransitionStarted_animationsEnabled_eventReceived() {
         setAnimationsEnabled(true)
 
-        source.onTransitionStarted()
+        sourceProvider.onTransitionStarted()
 
         verify(sinkProvider).onTransitionStarted()
     }
@@ -83,7 +79,7 @@
     fun onTransitionStarted_animationsNotEnabled_eventNotReceived() {
         setAnimationsEnabled(false)
 
-        source.onTransitionStarted()
+        sourceProvider.onTransitionStarted()
 
         verifyNoMoreInteractions(sinkProvider)
     }
@@ -92,7 +88,7 @@
     fun onTransitionEnd_animationsEnabled_eventReceived() {
         setAnimationsEnabled(true)
 
-        source.onTransitionFinished()
+        sourceProvider.onTransitionFinished()
 
         verify(sinkProvider).onTransitionFinished()
     }
@@ -101,7 +97,7 @@
     fun onTransitionEnd_animationsNotEnabled_eventNotReceived() {
         setAnimationsEnabled(false)
 
-        source.onTransitionFinished()
+        sourceProvider.onTransitionFinished()
 
         verifyNoMoreInteractions(sinkProvider)
     }
@@ -110,7 +106,7 @@
     fun onTransitionProgress_animationsEnabled_eventReceived() {
         setAnimationsEnabled(true)
 
-        source.onTransitionProgress(42f)
+        sourceProvider.onTransitionProgress(42f)
 
         verify(sinkProvider).onTransitionProgress(42f)
     }
@@ -119,7 +115,7 @@
     fun onTransitionProgress_animationsNotEnabled_eventNotReceived() {
         setAnimationsEnabled(false)
 
-        source.onTransitionProgress(42f)
+        sourceProvider.onTransitionProgress(42f)
 
         verifyNoMoreInteractions(sinkProvider)
     }
@@ -133,7 +129,4 @@
         ValueAnimator.setDurationScale(durationScale)
         animatorDurationScaleListenerCaptor.value.dispatchChange(/* selfChange= */false)
     }
-
-    private val source: TransitionProgressListener
-        get() = sourceProviderListenerCaptor.value
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/unfold/util/TestFoldStateProvider.kt b/packages/SystemUI/tests/src/com/android/systemui/unfold/util/TestFoldStateProvider.kt
index 8f851ec..a064e8c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/unfold/util/TestFoldStateProvider.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/unfold/util/TestFoldStateProvider.kt
@@ -24,6 +24,8 @@
 class TestFoldStateProvider : FoldStateProvider {
 
     private val listeners: MutableList<FoldUpdatesListener> = arrayListOf()
+    val hasListeners: Boolean
+        get() = listeners.isNotEmpty()
 
     override fun start() {
     }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/user/UserCreatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/user/UserCreatorTest.kt
new file mode 100644
index 0000000..a85ae7df
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/user/UserCreatorTest.kt
@@ -0,0 +1,73 @@
+package com.android.systemui.user
+
+import android.content.pm.UserInfo
+import android.graphics.Bitmap
+import android.os.UserManager
+import android.test.suitebuilder.annotation.SmallTest
+import android.testing.AndroidTestingRunner
+import android.testing.TestableLooper
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.util.concurrency.FakeExecutor
+import com.android.systemui.util.mockito.any
+import com.android.systemui.util.time.FakeSystemClock
+import java.util.function.Consumer
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers.anyInt
+import org.mockito.Mock
+import org.mockito.Mockito
+import org.mockito.Mockito.never
+import org.mockito.Mockito.verify
+import org.mockito.MockitoAnnotations
+
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+@TestableLooper.RunWithLooper(setAsMainLooper = true)
+class UserCreatorTest : SysuiTestCase() {
+    companion object {
+        const val USER_NAME = "abc"
+    }
+
+    @Mock
+    private lateinit var userCreator: UserCreator
+    @Mock
+    private lateinit var userManager: UserManager
+    private lateinit var mainExecutor: FakeExecutor
+    private lateinit var bgExecutor: FakeExecutor
+    private lateinit var user: UserInfo
+
+    @Before
+    fun setUp() {
+        MockitoAnnotations.initMocks(this)
+        mainExecutor = FakeExecutor(FakeSystemClock())
+        bgExecutor = FakeExecutor(FakeSystemClock())
+        userCreator = UserCreator(context, userManager, mainExecutor, bgExecutor)
+        user = Mockito.mock(UserInfo::class.java)
+        Mockito.`when`(userManager.createUser(USER_NAME, UserManager.USER_TYPE_FULL_SECONDARY, 0))
+            .thenReturn(user)
+    }
+
+    @Test
+    fun testCreateUser_threadingOrder() {
+        val successCallback = Mockito.mock(Consumer::class.java)
+        val errorCallback = Mockito.mock(Runnable::class.java)
+
+        userCreator.createUser(
+            USER_NAME,
+            null,
+            successCallback as Consumer<UserInfo?>,
+            errorCallback)
+
+        verify(userManager, never()).createUser(USER_NAME, UserManager.USER_TYPE_FULL_SECONDARY, 0)
+        bgExecutor.runAllReady()
+        verify(successCallback, never()).accept(user)
+        mainExecutor.runAllReady()
+        verify(userManager, never()).setUserIcon(anyInt(), any(Bitmap::class.java))
+        bgExecutor.runAllReady()
+
+        verify(userManager).createUser(USER_NAME, UserManager.USER_TYPE_FULL_SECONDARY, 0)
+        verify(userManager).setUserIcon(anyInt(), any(Bitmap::class.java))
+        verify(successCallback).accept(user)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/user/UserSwitcherActivityTest.kt b/packages/SystemUI/tests/src/com/android/systemui/user/UserSwitcherActivityTest.kt
index eaad69c..66367ec 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/user/UserSwitcherActivityTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/user/UserSwitcherActivityTest.kt
@@ -23,6 +23,7 @@
 import androidx.test.filters.SmallTest
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.broadcast.BroadcastDispatcher
+import com.android.systemui.classifier.FalsingCollector
 import com.android.systemui.plugins.FalsingManager
 import com.android.systemui.settings.UserTracker
 import com.android.systemui.statusbar.policy.UserSwitcherController
@@ -46,6 +47,8 @@
     @Mock
     private lateinit var layoutInflater: LayoutInflater
     @Mock
+    private lateinit var falsingCollector: FalsingCollector
+    @Mock
     private lateinit var falsingManager: FalsingManager
     @Mock
     private lateinit var userManager: UserManager
@@ -59,6 +62,7 @@
             userSwitcherController,
             broadcastDispatcher,
             layoutInflater,
+            falsingCollector,
             falsingManager,
             userManager,
             userTracker
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/ChannelsTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/ChannelsTest.java
deleted file mode 100644
index c7bcdef..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/util/ChannelsTest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the
- * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the specific language governing
- * permissions and limitations under the License.
- */
-
-package com.android.systemui.util;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-
-import android.app.NotificationChannel;
-import android.app.NotificationManager;
-import android.content.Context;
-import android.test.suitebuilder.annotation.SmallTest;
-import android.util.ArraySet;
-
-import androidx.test.runner.AndroidJUnit4;
-
-import com.android.systemui.SysuiTestCase;
-import com.android.systemui.util.NotificationChannels;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.Set;
-
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class ChannelsTest extends SysuiTestCase {
-    private final NotificationManager mMockNotificationManager = mock(NotificationManager.class);
-
-    @Before
-    public void setup() throws Exception {
-        mContext.addMockSystemService(Context.NOTIFICATION_SERVICE, mMockNotificationManager);
-    }
-
-    @Test
-    public void testChannelSetup() {
-        Set<String> ALL_CHANNELS = new ArraySet<>(Arrays.asList(
-                NotificationChannels.ALERTS,
-                NotificationChannels.SCREENSHOTS_HEADSUP,
-                NotificationChannels.STORAGE,
-                NotificationChannels.GENERAL,
-                NotificationChannels.BATTERY,
-                NotificationChannels.HINTS
-        ));
-        NotificationChannels.createAll(mContext);
-        ArgumentCaptor<List> captor = ArgumentCaptor.forClass(List.class);
-        verify(mMockNotificationManager).createNotificationChannels(captor.capture());
-        final List<NotificationChannel> list = captor.getValue();
-        assertEquals(ALL_CHANNELS.size(), list.size());
-        list.forEach((chan) -> assertTrue(ALL_CHANNELS.contains(chan.getId())));
-    }
-
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/NotificationChannelsTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/NotificationChannelsTest.java
new file mode 100644
index 0000000..900d792
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/NotificationChannelsTest.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+package com.android.systemui.util;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.util.ArraySet;
+
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.systemui.SysuiTestCase;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class NotificationChannelsTest extends SysuiTestCase {
+    private final NotificationManager mMockNotificationManager = mock(NotificationManager.class);
+
+    @Before
+    public void setup() throws Exception {
+        mContext.addMockSystemService(Context.NOTIFICATION_SERVICE, mMockNotificationManager);
+    }
+
+    @Test
+    public void testChannelSetup() {
+        Set<String> ALL_CHANNELS = new ArraySet<>(Arrays.asList(
+                NotificationChannels.ALERTS,
+                NotificationChannels.SCREENSHOTS_HEADSUP,
+                NotificationChannels.STORAGE,
+                NotificationChannels.INSTANT,
+                NotificationChannels.BATTERY,
+                NotificationChannels.HINTS,
+                NotificationChannels.SETUP
+        ));
+        NotificationChannels.createAll(mContext);
+        ArgumentCaptor<List> captor = ArgumentCaptor.forClass(List.class);
+        verify(mMockNotificationManager).createNotificationChannels(captor.capture());
+        final List<NotificationChannel> list = captor.getValue();
+        assertEquals(ALL_CHANNELS.size(), list.size());
+        list.forEach((chan) -> assertTrue(ALL_CHANNELS.contains(chan.getId())));
+    }
+
+    @Test
+    public void testChannelCleanup() {
+        new NotificationChannels(mContext).start();
+        ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);
+        verify(mMockNotificationManager).deleteNotificationChannel(captor.capture());
+        assertEquals(NotificationChannels.GENERAL, captor.getValue());
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/condition/ConditionMonitorTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/condition/ConditionMonitorTest.java
index 5118637..125b362 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/condition/ConditionMonitorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/condition/ConditionMonitorTest.java
@@ -65,7 +65,12 @@
         mCondition3 = spy(new FakeCondition());
         mConditions = new HashSet<>(Arrays.asList(mCondition1, mCondition2, mCondition3));
 
-        mConditionMonitor = new Monitor(mExecutor, mConditions, null /*callbacks*/);
+        mConditionMonitor = new Monitor(mExecutor);
+    }
+
+    public Monitor.Subscription.Builder getDefaultBuilder(Monitor.Callback callback) {
+        return new Monitor.Subscription.Builder(callback)
+                .addConditions(mConditions);
     }
 
     @Test
@@ -74,10 +79,20 @@
         final Condition regularCondition = Mockito.mock(Condition.class);
         final Monitor.Callback callback = Mockito.mock(Monitor.Callback.class);
 
-        final Monitor monitor = new Monitor(
-                mExecutor,
-                new HashSet<>(Arrays.asList(overridingCondition, regularCondition)),
-                new HashSet<>(Arrays.asList(callback)));
+        final Monitor.Callback referenceCallback = Mockito.mock(Monitor.Callback.class);
+
+        final Monitor monitor = new Monitor(mExecutor);
+
+        monitor.addSubscription(getDefaultBuilder(callback)
+                .addCondition(overridingCondition)
+                .addCondition(regularCondition)
+                .build());
+
+        monitor.addSubscription(getDefaultBuilder(referenceCallback)
+                .addCondition(regularCondition)
+                .build());
+
+        mExecutor.runAllReady();
 
         when(overridingCondition.isOverridingCondition()).thenReturn(true);
         when(overridingCondition.isConditionMet()).thenReturn(true);
@@ -92,7 +107,9 @@
         mExecutor.runAllReady();
 
         verify(callback).onConditionsChanged(eq(true));
+        verify(referenceCallback).onConditionsChanged(eq(false));
         Mockito.clearInvocations(callback);
+        Mockito.clearInvocations(referenceCallback);
 
         when(regularCondition.isConditionMet()).thenReturn(true);
         when(overridingCondition.isConditionMet()).thenReturn(false);
@@ -101,12 +118,7 @@
         mExecutor.runAllReady();
 
         verify(callback).onConditionsChanged(eq(false));
-
-        clearInvocations(callback);
-        monitor.removeCondition(overridingCondition);
-        mExecutor.runAllReady();
-
-        verify(callback).onConditionsChanged(eq(true));
+        verify(referenceCallback, never()).onConditionsChanged(anyBoolean());
     }
 
     /**
@@ -120,11 +132,14 @@
         final Condition regularCondition = Mockito.mock(Condition.class);
         final Monitor.Callback callback = Mockito.mock(Monitor.Callback.class);
 
-        final Monitor monitor = new Monitor(
-                mExecutor,
-                new HashSet<>(Arrays.asList(overridingCondition, overridingCondition2,
-                        regularCondition)),
-                new HashSet<>(Arrays.asList(callback)));
+        final Monitor monitor = new Monitor(mExecutor);
+
+        monitor.addSubscription(getDefaultBuilder(callback)
+                .addCondition(overridingCondition)
+                .addCondition(overridingCondition2)
+                .build());
+
+        mExecutor.runAllReady();
 
         when(overridingCondition.isOverridingCondition()).thenReturn(true);
         when(overridingCondition.isConditionMet()).thenReturn(true);
@@ -144,17 +159,35 @@
         Mockito.clearInvocations(callback);
     }
 
+    // Ensure that updating a callback that is removed doesn't result in an exception due to the
+    // absence of the condition.
+    @Test
+    public void testUpdateRemovedCallback() {
+        final Monitor.Callback callback1 =
+                mock(Monitor.Callback.class);
+        final Monitor.Subscription.Token subscription1 =
+                mConditionMonitor.addSubscription(getDefaultBuilder(callback1).build());
+        ArgumentCaptor<Condition.Callback> monitorCallback =
+                ArgumentCaptor.forClass(Condition.Callback.class);
+        mExecutor.runAllReady();
+        verify(mCondition1).addCallback(monitorCallback.capture());
+        // This will execute first before the handler for onConditionChanged.
+        mConditionMonitor.removeSubscription(subscription1);
+        monitorCallback.getValue().onConditionChanged(mCondition1);
+        mExecutor.runAllReady();
+    }
+
     @Test
     public void addCallback_addFirstCallback_addCallbackToAllConditions() {
         final Monitor.Callback callback1 =
                 mock(Monitor.Callback.class);
-        mConditionMonitor.addCallback(callback1);
+        mConditionMonitor.addSubscription(getDefaultBuilder(callback1).build());
         mExecutor.runAllReady();
         mConditions.forEach(condition -> verify(condition).addCallback(any()));
 
         final Monitor.Callback callback2 =
                 mock(Monitor.Callback.class);
-        mConditionMonitor.addCallback(callback2);
+        mConditionMonitor.addSubscription(getDefaultBuilder(callback2).build());
         mExecutor.runAllReady();
         mConditions.forEach(condition -> verify(condition, times(1)).addCallback(any()));
     }
@@ -163,7 +196,7 @@
     public void addCallback_addFirstCallback_reportWithDefaultValue() {
         final Monitor.Callback callback =
                 mock(Monitor.Callback.class);
-        mConditionMonitor.addCallback(callback);
+        mConditionMonitor.addSubscription(getDefaultBuilder(callback).build());
         mExecutor.runAllReady();
         verify(callback).onConditionsChanged(false);
     }
@@ -174,67 +207,65 @@
                 mock(Monitor.Callback.class);
         final Condition condition = mock(Condition.class);
         when(condition.isConditionMet()).thenReturn(true);
-        final Monitor monitor = new Monitor(mExecutor, new HashSet<>(Arrays.asList(condition)),
-                new HashSet<>(Arrays.asList(callback1)));
+        final Monitor monitor = new Monitor(mExecutor);
+        monitor.addSubscription(new Monitor.Subscription.Builder(callback1)
+                .addCondition(condition)
+                .build());
 
         final Monitor.Callback callback2 =
                 mock(Monitor.Callback.class);
-        monitor.addCallback(callback2);
+        monitor.addSubscription(new Monitor.Subscription.Builder(callback2)
+                .addCondition(condition)
+                .build());
         mExecutor.runAllReady();
         verify(callback2).onConditionsChanged(eq(true));
     }
 
     @Test
     public void addCallback_noConditions_reportAllConditionsMet() {
-        final Monitor monitor = new Monitor(mExecutor, new HashSet<>(), null /*callbacks*/);
+        final Monitor monitor = new Monitor(mExecutor);
         final Monitor.Callback callback = mock(Monitor.Callback.class);
 
-        monitor.addCallback(callback);
+        monitor.addSubscription(new Monitor.Subscription.Builder(callback).build());
         mExecutor.runAllReady();
         verify(callback).onConditionsChanged(true);
     }
 
     @Test
-    public void addCallback_withMultipleInstancesOfTheSameCallback_registerOnlyOne() {
-        final Monitor monitor = new Monitor(mExecutor, new HashSet<>(), null /*callbacks*/);
-        final Monitor.Callback callback = mock(Monitor.Callback.class);
-
-        // Adds the same instance multiple times.
-        monitor.addCallback(callback);
-        monitor.addCallback(callback);
-        monitor.addCallback(callback);
+    public void removeCallback_noFailureOnDoubleRemove() {
+        final Condition condition = mock(Condition.class);
+        final Monitor monitor = new Monitor(mExecutor);
+        final Monitor.Callback callback =
+                mock(Monitor.Callback.class);
+        final Monitor.Subscription.Token token = monitor.addSubscription(
+                new Monitor.Subscription.Builder(callback).addCondition(condition).build()
+        );
+        monitor.removeSubscription(token);
         mExecutor.runAllReady();
-
-        // Callback should only be triggered once.
-        verify(callback, times(1)).onConditionsChanged(true);
+        // Ensure second removal doesn't cause an exception.
+        monitor.removeSubscription(token);
+        mExecutor.runAllReady();
     }
 
     @Test
     public void removeCallback_shouldNoLongerReceiveUpdate() {
         final Condition condition = mock(Condition.class);
-        final Monitor monitor = new Monitor(mExecutor, new HashSet<>(Arrays.asList(condition)),
-                null);
+        final Monitor monitor = new Monitor(mExecutor);
         final Monitor.Callback callback =
                 mock(Monitor.Callback.class);
-        monitor.addCallback(callback);
-        monitor.removeCallback(callback);
+        final Monitor.Subscription.Token token = monitor.addSubscription(
+                new Monitor.Subscription.Builder(callback).addCondition(condition).build()
+        );
+        monitor.removeSubscription(token);
         mExecutor.runAllReady();
         clearInvocations(callback);
 
         final ArgumentCaptor<Condition.Callback> conditionCallbackCaptor =
                 ArgumentCaptor.forClass(Condition.Callback.class);
         verify(condition).addCallback(conditionCallbackCaptor.capture());
+
         final Condition.Callback conditionCallback = conditionCallbackCaptor.getValue();
-
-        when(condition.isConditionMet()).thenReturn(true);
-        conditionCallback.onConditionChanged(condition);
-        mExecutor.runAllReady();
-        verify(callback, never()).onConditionsChanged(true);
-
-        when(condition.isConditionMet()).thenReturn(false);
-        conditionCallback.onConditionChanged(condition);
-        mExecutor.runAllReady();
-        verify(callback, never()).onConditionsChanged(false);
+        verify(condition).removeCallback(conditionCallback);
     }
 
     @Test
@@ -243,14 +274,16 @@
                 mock(Monitor.Callback.class);
         final Monitor.Callback callback2 =
                 mock(Monitor.Callback.class);
-        mConditionMonitor.addCallback(callback1);
-        mConditionMonitor.addCallback(callback2);
+        final Monitor.Subscription.Token subscription1 =
+                mConditionMonitor.addSubscription(getDefaultBuilder(callback1).build());
+        final Monitor.Subscription.Token subscription2 =
+                mConditionMonitor.addSubscription(getDefaultBuilder(callback2).build());
 
-        mConditionMonitor.removeCallback(callback1);
+        mConditionMonitor.removeSubscription(subscription1);
         mExecutor.runAllReady();
         mConditions.forEach(condition -> verify(condition, never()).removeCallback(any()));
 
-        mConditionMonitor.removeCallback(callback2);
+        mConditionMonitor.removeSubscription(subscription2);
         mExecutor.runAllReady();
         mConditions.forEach(condition -> verify(condition).removeCallback(any()));
     }
@@ -259,7 +292,7 @@
     public void updateCallbacks_allConditionsMet_reportTrue() {
         final Monitor.Callback callback =
                 mock(Monitor.Callback.class);
-        mConditionMonitor.addCallback(callback);
+        mConditionMonitor.addSubscription(getDefaultBuilder(callback).build());
         clearInvocations(callback);
 
         mCondition1.fakeUpdateCondition(true);
@@ -274,7 +307,7 @@
     public void updateCallbacks_oneConditionStoppedMeeting_reportFalse() {
         final Monitor.Callback callback =
                 mock(Monitor.Callback.class);
-        mConditionMonitor.addCallback(callback);
+        mConditionMonitor.addSubscription(getDefaultBuilder(callback).build());
 
         mCondition1.fakeUpdateCondition(true);
         mCondition2.fakeUpdateCondition(true);
@@ -290,7 +323,7 @@
     public void updateCallbacks_shouldOnlyUpdateWhenValueChanges() {
         final Monitor.Callback callback =
                 mock(Monitor.Callback.class);
-        mConditionMonitor.addCallback(callback);
+        mConditionMonitor.addSubscription(getDefaultBuilder(callback).build());
         mExecutor.runAllReady();
         verify(callback).onConditionsChanged(false);
         clearInvocations(callback);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/service/ObservableServiceConnectionTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/service/ObservableServiceConnectionTest.java
index 22d7273..046ad12 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/service/ObservableServiceConnectionTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/service/ObservableServiceConnectionTest.java
@@ -145,4 +145,28 @@
         connection.unbind();
         verify(mContext, never()).unbindService(eq(connection));
     }
+
+    @Test
+    public void testUnbind() {
+        ObservableServiceConnection<Foo> connection = new ObservableServiceConnection<>(mContext,
+                mIntent, mExecutor, mTransformer);
+        connection.addCallback(mCallback);
+        connection.onServiceDisconnected(mComponentName);
+
+        // Disconnects before binds should be ignored.
+        verify(mCallback, never()).onDisconnected(eq(connection), anyInt());
+
+        when(mContext.bindService(eq(mIntent), anyInt(), eq(mExecutor), eq(connection)))
+                .thenReturn(true);
+        connection.bind();
+
+        mExecutor.runAllReady();
+
+        connection.unbind();
+
+        mExecutor.runAllReady();
+
+        verify(mCallback).onDisconnected(eq(connection),
+                eq(ObservableServiceConnection.DISCONNECT_REASON_UNBIND));
+    }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/service/PersistentConnectionManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/service/PersistentConnectionManagerTest.java
index 53d4a96..db0139c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/service/PersistentConnectionManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/service/PersistentConnectionManagerTest.java
@@ -16,6 +16,7 @@
 
 package com.android.systemui.util.service;
 
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 
 import android.testing.AndroidTestingRunner;
@@ -120,6 +121,24 @@
     }
 
     /**
+     * Ensures manual unbind does not reconnect.
+     */
+    @Test
+    public void testStopDoesNotReconnect() {
+        mConnectionManager.start();
+        ArgumentCaptor<ObservableServiceConnection.Callback<Proxy>> connectionCallbackCaptor =
+                ArgumentCaptor.forClass(ObservableServiceConnection.Callback.class);
+
+        verify(mConnection).addCallback(connectionCallbackCaptor.capture());
+        verify(mConnection).bind();
+        Mockito.clearInvocations(mConnection);
+        mConnectionManager.stop();
+        mFakeExecutor.advanceClockToNext();
+        mFakeExecutor.runAllReady();
+        verify(mConnection, never()).bind();
+    }
+
+    /**
      * Ensures rebind on package change.
      */
     @Test
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 7d4e27f..18acf3f6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2020 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,12 +21,9 @@
 import static android.service.notification.NotificationListenerService.NOTIFICATION_CHANNEL_OR_GROUP_DELETED;
 import static android.service.notification.NotificationListenerService.NOTIFICATION_CHANNEL_OR_GROUP_UPDATED;
 import static android.service.notification.NotificationListenerService.REASON_APP_CANCEL;
-import static android.service.notification.NotificationListenerService.REASON_CANCEL;
-import static android.service.notification.NotificationListenerService.REASON_CANCEL_ALL;
 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.Bubbles.DISMISS_NOTIF_CANCEL;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -36,6 +33,7 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
@@ -46,6 +44,7 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import android.app.ActivityManager;
 import android.app.IActivityManager;
 import android.app.INotificationManager;
 import android.app.Notification;
@@ -62,7 +61,6 @@
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.Icon;
 import android.hardware.display.AmbientDisplayConfiguration;
-import android.hardware.face.FaceManager;
 import android.os.Handler;
 import android.os.PowerManager;
 import android.os.UserHandle;
@@ -75,6 +73,7 @@
 import android.util.Pair;
 import android.util.SparseArray;
 import android.view.View;
+import android.view.ViewTreeObserver;
 import android.view.WindowManager;
 
 import androidx.test.filters.SmallTest;
@@ -88,20 +87,20 @@
 import com.android.systemui.keyguard.KeyguardViewMediator;
 import com.android.systemui.model.SysUiState;
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.shade.NotificationShadeWindowControllerImpl;
+import com.android.systemui.shade.NotificationShadeWindowView;
+import com.android.systemui.shade.ShadeController;
 import com.android.systemui.shared.system.QuickStepContract;
 import com.android.systemui.statusbar.NotificationLockscreenUserManager;
-import com.android.systemui.statusbar.NotificationRemoveInterceptor;
 import com.android.systemui.statusbar.RankingBuilder;
 import com.android.systemui.statusbar.SysuiStatusBarStateController;
 import com.android.systemui.statusbar.notification.NotifPipelineFlags;
-import com.android.systemui.statusbar.notification.NotificationEntryListener;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
-import com.android.systemui.statusbar.notification.NotificationFilter;
 import com.android.systemui.statusbar.notification.collection.NotifPipeline;
 import com.android.systemui.statusbar.notification.collection.NotificationEntry;
 import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
 import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy;
 import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
+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.KeyguardNotificationVisibilityProvider;
 import com.android.systemui.statusbar.notification.interruption.NotificationInterruptLogger;
@@ -109,16 +108,12 @@
 import com.android.systemui.statusbar.notification.row.NotificationTestHelper;
 import com.android.systemui.statusbar.phone.DozeParameters;
 import com.android.systemui.statusbar.phone.KeyguardBypassController;
-import com.android.systemui.statusbar.phone.NotificationShadeWindowControllerImpl;
-import com.android.systemui.statusbar.phone.NotificationShadeWindowView;
 import com.android.systemui.statusbar.phone.ScreenOffAnimationController;
-import com.android.systemui.statusbar.phone.ShadeController;
 import com.android.systemui.statusbar.policy.BatteryController;
 import com.android.systemui.statusbar.policy.ConfigurationController;
 import com.android.systemui.statusbar.policy.HeadsUpManager;
 import com.android.systemui.statusbar.policy.KeyguardStateController;
 import com.android.systemui.statusbar.policy.ZenModeController;
-import com.android.wm.shell.R;
 import com.android.wm.shell.ShellTaskOrganizer;
 import com.android.wm.shell.TaskViewTransitions;
 import com.android.wm.shell.WindowManagerShellWrapper;
@@ -139,8 +134,8 @@
 import com.android.wm.shell.common.TaskStackListenerImpl;
 import com.android.wm.shell.draganddrop.DragAndDropController;
 import com.android.wm.shell.onehanded.OneHandedController;
-
-import com.google.common.collect.ImmutableList;
+import com.android.wm.shell.sysui.ShellController;
+import com.android.wm.shell.sysui.ShellInit;
 
 import org.junit.Before;
 import org.junit.Ignore;
@@ -150,27 +145,25 @@
 import org.mockito.Captor;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.mockito.stubbing.Answer;
 
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Optional;
 
-/**
- * Tests the NotificationEntryManager setup with BubbleController.
- * The {@link NotifPipeline} setup with BubbleController is tested in
- * {@link NewNotifPipelineBubblesTest}.
- */
 @SmallTest
 @RunWith(AndroidTestingRunner.class)
 @TestableLooper.RunWithLooper(setAsMainLooper = true)
 public class BubblesTest extends SysuiTestCase {
     @Mock
-    private NotificationEntryManager mNotificationEntryManager;
-    @Mock
     private CommonNotifCollection mCommonNotifCollection;
     @Mock
     private NotificationGroupManagerLegacy mNotificationGroupManager;
     @Mock
+    private BubblesManager.NotifCallback mNotifCallback;
+    @Mock
     private WindowManager mWindowManager;
     @Mock
     private IActivityManager mActivityManager;
@@ -183,8 +176,6 @@
     @Mock
     private ZenModeConfig mZenModeConfig;
     @Mock
-    private FaceManager mFaceManager;
-    @Mock
     private NotificationLockscreenUserManager mLockscreenUserManager;
     @Mock
     private SysuiStatusBarStateController mStatusBarStateController;
@@ -196,15 +187,17 @@
     private FloatingContentCoordinator mFloatingContentCoordinator;
     @Mock
     private BubbleDataRepository mDataRepository;
+    @Mock
+    private NotificationShadeWindowView mNotificationShadeWindowView;
+    @Mock
+    private AuthController mAuthController;
 
     private SysUiState mSysUiState;
     private boolean mSysUiStateBubblesExpanded;
     private boolean mSysUiStateBubblesManageMenuExpanded;
 
     @Captor
-    private ArgumentCaptor<NotificationEntryListener> mEntryListenerCaptor;
-    @Captor
-    private ArgumentCaptor<NotificationRemoveInterceptor> mRemoveInterceptorCaptor;
+    private ArgumentCaptor<NotifCollectionListener> mNotifListenerCaptor;
     @Captor
     private ArgumentCaptor<List<Bubble>> mBubbleListCaptor;
     @Captor
@@ -212,27 +205,25 @@
     @Captor
     private ArgumentCaptor<BroadcastReceiver> mBroadcastReceiverArgumentCaptor;
 
-
     private BubblesManager mBubblesManager;
-    // TODO(178618782): Move tests on the controller directly to the shell
     private TestableBubbleController mBubbleController;
     private NotificationShadeWindowControllerImpl mNotificationShadeWindowController;
-    private NotificationEntryListener mEntryListener;
-    private NotificationRemoveInterceptor mRemoveInterceptor;
-
+    private NotifCollectionListener mEntryListener;
     private NotificationTestHelper mNotificationTestHelper;
     private NotificationEntry mRow;
     private NotificationEntry mRow2;
-    private NotificationEntry mRow3;
     private ExpandableNotificationRow mNonBubbleNotifRow;
     private BubbleEntry mBubbleEntry;
     private BubbleEntry mBubbleEntry2;
-    private BubbleEntry mBubbleEntry3;
 
     private BubbleEntry mBubbleEntryUser11;
     private BubbleEntry mBubbleEntry2User11;
 
     @Mock
+    private ShellInit mShellInit;
+    @Mock
+    private ShellController mShellController;
+    @Mock
     private Bubbles.BubbleExpandListener mBubbleExpandListener;
     @Mock
     private PendingIntent mDeleteIntent;
@@ -245,12 +236,8 @@
     @Mock
     private NotifPipeline mNotifPipeline;
     @Mock
-    private NotifPipelineFlags mNotifPipelineFlags;
-    @Mock
     private DumpManager mDumpManager;
     @Mock
-    private NotificationShadeWindowView mNotificationShadeWindowView;
-    @Mock
     private IStatusBarService mStatusBarService;
     @Mock
     private NotificationVisibilityProvider mVisibilityProvider;
@@ -269,11 +256,11 @@
     @Mock
     private ScreenOffAnimationController mScreenOffAnimationController;
     @Mock
-    private AuthController mAuthController;
-    @Mock
     private TaskViewTransitions mTaskViewTransitions;
     @Mock
     private Optional<OneHandedController> mOneHandedOptional;
+    @Mock
+    private UserManager mUserManager;
 
     private TestableBubblePositioner mPositioner;
 
@@ -290,8 +277,9 @@
         // For the purposes of this test, just run everything synchronously
         ShellExecutor syncExecutor = new SyncExecutor();
 
-        mContext.addMockSystemService(FaceManager.class, mFaceManager);
         when(mColorExtractor.getNeutralColors()).thenReturn(mGradientColors);
+        when(mNotificationShadeWindowView.getViewTreeObserver())
+                .thenReturn(mock(ViewTreeObserver.class));
 
         mNotificationShadeWindowController = new NotificationShadeWindowControllerImpl(mContext,
                 mWindowManager, mActivityManager, mDozeParameters, mStatusBarStateController,
@@ -308,11 +296,9 @@
                 TestableLooper.get(this));
         mRow = mNotificationTestHelper.createBubble(mDeleteIntent);
         mRow2 = mNotificationTestHelper.createBubble(mDeleteIntent);
-        mRow3 = mNotificationTestHelper.createBubble(mDeleteIntent);
         mNonBubbleNotifRow = mNotificationTestHelper.createRow();
         mBubbleEntry = BubblesManager.notifToBubbleEntry(mRow);
         mBubbleEntry2 = BubblesManager.notifToBubbleEntry(mRow2);
-        mBubbleEntry3 = BubblesManager.notifToBubbleEntry(mRow3);
 
         UserHandle handle = mock(UserHandle.class);
         when(handle.getIdentifier()).thenReturn(11);
@@ -321,9 +307,6 @@
         mBubbleEntry2User11 = BubblesManager.notifToBubbleEntry(
                 mNotificationTestHelper.createBubble(handle));
 
-        // Return non-null notification data from the CommonNotifCollection
-        when(mCommonNotifCollection.getEntry(mRow.getKey())).thenReturn(mRow);
-
         mZenModeConfig.suppressedVisualEffects = 0;
         when(mZenModeController.getConfig()).thenReturn(mZenModeConfig);
 
@@ -336,18 +319,20 @@
                     (sysUiFlags & QuickStepContract.SYSUI_STATE_BUBBLES_EXPANDED) != 0;
         });
 
-        // TODO: Fix
         mPositioner = new TestableBubblePositioner(mContext, mWindowManager);
         mPositioner.setMaxBubbles(5);
         mBubbleData = new BubbleData(mContext, mBubbleLogger, mPositioner, syncExecutor);
 
+        when(mUserManager.getProfiles(ActivityManager.getCurrentUser())).thenReturn(
+                Collections.singletonList(mock(UserInfo.class)));
+
         TestableNotificationInterruptStateProviderImpl interruptionStateProvider =
                 new TestableNotificationInterruptStateProviderImpl(mContext.getContentResolver(),
                         mock(PowerManager.class),
                         mock(IDreamManager.class),
                         mock(AmbientDisplayConfiguration.class),
-                        mock(NotificationFilter.class),
                         mock(StatusBarStateController.class),
+                        mock(KeyguardStateController.class),
                         mock(BatteryController.class),
                         mock(HeadsUpManager.class),
                         mock(NotificationInterruptLogger.class),
@@ -355,18 +340,18 @@
                         mock(NotifPipelineFlags.class),
                         mock(KeyguardNotificationVisibilityProvider.class)
                 );
-
-        when(mNotifPipelineFlags.isNewPipelineEnabled()).thenReturn(false);
         when(mShellTaskOrganizer.getExecutor()).thenReturn(syncExecutor);
         mBubbleController = new TestableBubbleController(
                 mContext,
+                mShellInit,
+                mShellController,
                 mBubbleData,
                 mFloatingContentCoordinator,
                 mDataRepository,
                 mStatusBarService,
                 mWindowManager,
                 mWindowManagerShellWrapper,
-                mock(UserManager.class),
+                mUserManager,
                 mLauncherApps,
                 mBubbleLogger,
                 mTaskStackListener,
@@ -388,7 +373,6 @@
                 mNotificationShadeWindowController,
                 mock(KeyguardStateController.class),
                 mShadeController,
-                mConfigurationController,
                 mStatusBarService,
                 mock(INotificationManager.class),
                 mVisibilityProvider,
@@ -396,23 +380,27 @@
                 mZenModeController,
                 mLockscreenUserManager,
                 mNotificationGroupManager,
-                mNotificationEntryManager,
                 mCommonNotifCollection,
                 mNotifPipeline,
                 mSysUiState,
-                mNotifPipelineFlags,
                 mDumpManager,
                 syncExecutor);
+        mBubblesManager.addNotifCallback(mNotifCallback);
 
-        // XXX: Does *this* need to be changed?
         // Get a reference to the BubbleController's entry listener
-        verify(mNotificationEntryManager, atLeastOnce())
-                .addNotificationEntryListener(mEntryListenerCaptor.capture());
-        mEntryListener = mEntryListenerCaptor.getValue();
-        // And the remove interceptor
-        verify(mNotificationEntryManager, atLeastOnce())
-                .addNotificationRemoveInterceptor(mRemoveInterceptorCaptor.capture());
-        mRemoveInterceptor = mRemoveInterceptorCaptor.getValue();
+        verify(mNotifPipeline, atLeastOnce())
+                .addCollectionListener(mNotifListenerCaptor.capture());
+        mEntryListener = mNotifListenerCaptor.getValue();
+    }
+
+    @Test
+    public void instantiateController_addInitCallback() {
+        verify(mShellInit, times(1)).addInitCallback(any(), any());
+    }
+
+    @Test
+    public void instantiateController_registerConfigChangeListener() {
+        verify(mShellController, times(1)).addConfigurationChangeListener(any());
     }
 
     @Test
@@ -433,90 +421,75 @@
     @Test
     public void testRemoveBubble() {
         mBubbleController.updateBubble(mBubbleEntry);
-        assertNotNull(mBubbleData.getBubbleInStackWithKey(mBubbleEntry.getKey()));
+        assertNotNull(mBubbleData.getBubbleInStackWithKey(mRow.getKey()));
         assertTrue(mBubbleController.hasBubbles());
-        verify(mNotificationEntryManager).updateNotifications(any());
+        verify(mNotifCallback, times(1)).invalidateNotifications(anyString());
 
         mBubbleController.removeBubble(
                 mRow.getKey(), Bubbles.DISMISS_USER_GESTURE);
         assertNull(mBubbleData.getBubbleInStackWithKey(mRow.getKey()));
-        verify(mNotificationEntryManager, times(2)).updateNotifications(anyString());
+        verify(mNotifCallback, times(2)).invalidateNotifications(anyString());
 
         assertSysuiStates(false /* stackExpanded */, false /* mangeMenuExpanded */);
     }
 
     @Test
-    public void testPromoteBubble_autoExpand() throws Exception {
-        mBubbleController.updateBubble(mBubbleEntry2);
+    public void testRemoveBubble_withDismissedNotif_inOverflow() {
+        mEntryListener.onEntryAdded(mRow);
         mBubbleController.updateBubble(mBubbleEntry);
-        when(mCommonNotifCollection.getEntry(mRow.getKey())).thenReturn(mRow);
-        when(mCommonNotifCollection.getEntry(mRow2.getKey())).thenReturn(mRow2);
-        mBubbleController.removeBubble(
-                mRow.getKey(), Bubbles.DISMISS_USER_GESTURE);
 
-        Bubble b = mBubbleData.getOverflowBubbleWithKey(mRow.getKey());
-        assertThat(mBubbleData.getOverflowBubbles()).isEqualTo(ImmutableList.of(b));
-        verify(mNotificationEntryManager, never()).performRemoveNotification(
-                eq(mRow.getSbn()), any(),  anyInt());
-        assertThat(mRow.isBubble()).isFalse();
-
-        Bubble b2 = mBubbleData.getBubbleInStackWithKey(mRow2.getKey());
-        assertThat(mBubbleData.getSelectedBubble()).isEqualTo(b2);
-
-        mBubbleController.promoteBubbleFromOverflow(b);
-
-        assertThat(b.isBubble()).isTrue();
-        assertThat(b.shouldAutoExpand()).isTrue();
-        int flags = Notification.BubbleMetadata.FLAG_AUTO_EXPAND_BUBBLE
-                | Notification.BubbleMetadata.FLAG_SUPPRESS_NOTIFICATION;
-        verify(mStatusBarService, times(1)).onNotificationBubbleChanged(
-                eq(b.getKey()), eq(true), eq(flags));
-    }
-
-    @Test
-    public void testCancelOverflowBubble() {
-        mBubbleController.updateBubble(mBubbleEntry2);
-        mBubbleController.updateBubble(mBubbleEntry, /* suppressFlyout */
-                false, /* showInShade */ true);
-        when(mCommonNotifCollection.getEntry(mRow.getKey())).thenReturn(mRow);
-        when(mCommonNotifCollection.getEntry(mRow2.getKey())).thenReturn(mRow2);
-        mBubbleController.removeBubble(
-                mRow.getKey(), Bubbles.DISMISS_USER_GESTURE);
-
-        mBubbleController.removeBubble(
-                mRow.getKey(), DISMISS_NOTIF_CANCEL);
-        verify(mNotificationEntryManager, times(1)).performRemoveNotification(
-                eq(mRow.getSbn()), any(), anyInt());
-        assertThat(mBubbleData.getOverflowBubbles()).isEmpty();
-        assertFalse(mRow.isBubble());
-    }
-
-    @Test
-    public void testUserChange_doesNotRemoveNotif() {
-        mBubbleController.updateBubble(mBubbleEntry);
         assertTrue(mBubbleController.hasBubbles());
+        assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
 
+        // Make it look like dismissed notif
+        mBubbleData.getBubbleInStackWithKey(mRow.getKey()).setSuppressNotification(true);
+
+        // Now remove the bubble
         mBubbleController.removeBubble(
-                mRow.getKey(), Bubbles.DISMISS_USER_CHANGED);
-        verify(mNotificationEntryManager, never()).performRemoveNotification(
-                eq(mRow.getSbn()), any(), anyInt());
+                mRow.getKey(), Bubbles.DISMISS_USER_GESTURE);
+        assertTrue(mBubbleData.hasOverflowBubbleWithKey(mRow.getKey()));
+
+        // We don't remove the notification since the bubble is still in overflow.
+        verify(mNotifCallback, never()).removeNotification(eq(mRow), any(), anyInt());
         assertFalse(mBubbleController.hasBubbles());
-        assertSysuiStates(false /* stackExpanded */, false /* mangeMenuExpanded */);
-        assertTrue(mRow.isBubble());
+    }
+
+    @Test
+    public void testRemoveBubble_withDismissedNotif_notInOverflow() {
+        mEntryListener.onEntryAdded(mRow);
+        mBubbleController.updateBubble(mBubbleEntry);
+        when(mCommonNotifCollection.getEntry(mRow.getKey())).thenReturn(mRow);
+
+        assertTrue(mBubbleController.hasBubbles());
+        assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
+
+        // Make it look like dismissed notif
+        mBubbleData.getBubbleInStackWithKey(mRow.getKey()).setSuppressNotification(true);
+
+        // Now remove the bubble
+        mBubbleController.removeBubble(
+                mRow.getKey(), Bubbles.DISMISS_NOTIF_CANCEL);
+        assertFalse(mBubbleData.hasOverflowBubbleWithKey(mRow.getKey()));
+
+        // Since the notif is dismissed and not in overflow, once the bubble is removed,
+        // removeNotification gets called to really remove the notif
+        verify(mNotifCallback, times(1)).removeNotification(eq(mRow),
+                any(), anyInt());
+        assertFalse(mBubbleController.hasBubbles());
     }
 
     @Test
     public void testDismissStack() {
         mBubbleController.updateBubble(mBubbleEntry);
-        verify(mNotificationEntryManager, times(1)).updateNotifications(any());
+        verify(mNotifCallback, times(1)).invalidateNotifications(anyString());
         assertNotNull(mBubbleData.getBubbleInStackWithKey(mRow.getKey()));
         mBubbleController.updateBubble(mBubbleEntry2);
-        verify(mNotificationEntryManager, times(2)).updateNotifications(any());
+        verify(mNotifCallback, times(2)).invalidateNotifications(anyString());
         assertNotNull(mBubbleData.getBubbleInStackWithKey(mRow2.getKey()));
         assertTrue(mBubbleController.hasBubbles());
 
         mBubbleData.dismissAll(Bubbles.DISMISS_USER_GESTURE);
-        verify(mNotificationEntryManager, times(3)).updateNotifications(any());
+        verify(mNotifCallback, times(3)).invalidateNotifications(anyString());
         assertNull(mBubbleData.getBubbleInStackWithKey(mRow.getKey()));
         assertNull(mBubbleData.getBubbleInStackWithKey(mRow2.getKey()));
 
@@ -528,7 +501,7 @@
         assertStackCollapsed();
 
         // Mark it as a bubble and add it explicitly
-        mEntryListener.onPendingEntryAdded(mRow);
+        mEntryListener.onEntryAdded(mRow);
         mBubbleController.updateBubble(mBubbleEntry);
 
         // We should have bubbles & their notifs should not be suppressed
@@ -536,7 +509,6 @@
         assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
 
         // Expand the stack
-        BubbleStackView stackView = mBubbleController.getStackView();
         mBubbleData.setExpanded(true);
         assertStackExpanded();
         verify(mBubbleExpandListener).onBubbleExpandChanged(true, mRow.getKey());
@@ -556,8 +528,8 @@
     @Ignore("Currently broken.")
     public void testCollapseAfterChangingExpandedBubble() {
         // Mark it as a bubble and add it explicitly
-        mEntryListener.onPendingEntryAdded(mRow);
-        mEntryListener.onPendingEntryAdded(mRow2);
+        mEntryListener.onEntryAdded(mRow);
+        mEntryListener.onEntryAdded(mRow2);
         mBubbleController.updateBubble(mBubbleEntry);
         mBubbleController.updateBubble(mBubbleEntry2);
 
@@ -593,6 +565,7 @@
         verify(mBubbleExpandListener, atLeastOnce()).onBubbleExpandChanged(
                 true, mRow.getKey());
 
+
         // Collapse
         mBubbleController.collapseStack();
         assertStackCollapsed();
@@ -602,7 +575,7 @@
     @Test
     public void testExpansionRemovesShowInShadeAndDot() {
         // Mark it as a bubble and add it explicitly
-        mEntryListener.onPendingEntryAdded(mRow);
+        mEntryListener.onEntryAdded(mRow);
         mBubbleController.updateBubble(mBubbleEntry);
 
         // We should have bubbles & their notifs should not be suppressed
@@ -627,7 +600,7 @@
     @Test
     public void testUpdateWhileExpanded_DoesntChangeShowInShadeAndDot() {
         // Mark it as a bubble and add it explicitly
-        mEntryListener.onPendingEntryAdded(mRow);
+        mEntryListener.onEntryAdded(mRow);
         mBubbleController.updateBubble(mBubbleEntry);
 
         // We should have bubbles & their notifs should not be suppressed
@@ -649,7 +622,7 @@
         assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getKey()).showDot());
 
         // Send update
-        mEntryListener.onPreEntryUpdated(mRow);
+        mEntryListener.onEntryUpdated(mRow, /* fromSystem= */ true);
 
         // Nothing should have changed
         // Notif is suppressed after expansion
@@ -661,8 +634,8 @@
     @Test
     public void testRemoveLastExpanded_collapses() {
         // Mark it as a bubble and add it explicitly
-        mEntryListener.onPendingEntryAdded(mRow);
-        mEntryListener.onPendingEntryAdded(mRow2);
+        mEntryListener.onEntryAdded(mRow);
+        mEntryListener.onEntryAdded(mRow2);
         mBubbleController.updateBubble(mBubbleEntry);
         mBubbleController.updateBubble(mBubbleEntry2);
 
@@ -707,7 +680,7 @@
     @Test
     public void testRemoveLastExpandedEmptyOverflow_collapses() {
         // Mark it as a bubble and add it explicitly
-        mEntryListener.onPendingEntryAdded(mRow);
+        mEntryListener.onEntryAdded(mRow);
         mBubbleController.updateBubble(mBubbleEntry);
 
         // Expand
@@ -732,6 +705,7 @@
         assertSysuiStates(false /* stackExpanded */, false /* mangeMenuExpanded */);
     }
 
+
     @Test
     public void testAutoExpand_fails_noFlag() {
         assertStackCollapsed();
@@ -739,7 +713,7 @@
                 Notification.BubbleMetadata.FLAG_AUTO_EXPAND_BUBBLE, false /* enableFlag */);
 
         // Add the auto expand bubble
-        mEntryListener.onPendingEntryAdded(mRow);
+        mEntryListener.onEntryAdded(mRow);
         mBubbleController.updateBubble(mBubbleEntry);
 
         // Expansion shouldn't change
@@ -755,7 +729,7 @@
                 Notification.BubbleMetadata.FLAG_AUTO_EXPAND_BUBBLE, true /* enableFlag */);
 
         // Add the auto expand bubble
-        mEntryListener.onPendingEntryAdded(mRow);
+        mEntryListener.onEntryAdded(mRow);
         mBubbleController.updateBubble(mBubbleEntry);
 
         // Expansion should change
@@ -771,7 +745,7 @@
                 Notification.BubbleMetadata.FLAG_SUPPRESS_NOTIFICATION, true /* enableFlag */);
 
         // Add the suppress notif bubble
-        mEntryListener.onPendingEntryAdded(mRow);
+        mEntryListener.onEntryAdded(mRow);
         mBubbleController.updateBubble(mBubbleEntry);
 
         // Notif should be suppressed because we were foreground
@@ -805,22 +779,8 @@
     }
 
     @Test
-    public void testExpandStackAndSelectBubble_removedFirst() {
-        mEntryListener.onPendingEntryAdded(mRow);
-        mBubbleController.updateBubble(mBubbleEntry);
-
-        // Simulate notification cancellation.
-        mRemoveInterceptor.onNotificationRemoveRequested(
-                mRow.getKey(), mRow, REASON_APP_CANCEL);
-
-        mBubbleController.expandStackAndSelectBubble(mBubbleEntry);
-
-        assertSysuiStates(true /* stackExpanded */, false /* mangeMenuExpanded */);
-    }
-
-    @Test
     public void testMarkNewNotificationAsShowInShade() {
-        mEntryListener.onPendingEntryAdded(mRow);
+        mEntryListener.onEntryAdded(mRow);
         assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
 
         mTestableLooper.processAllMessages();
@@ -829,8 +789,8 @@
 
     @Test
     public void testAddNotif_notBubble() {
-        mEntryListener.onPendingEntryAdded(mNonBubbleNotifRow.getEntry());
-        mEntryListener.onPreEntryUpdated(mNonBubbleNotifRow.getEntry());
+        mEntryListener.onEntryAdded(mNonBubbleNotifRow.getEntry());
+        mEntryListener.onEntryUpdated(mNonBubbleNotifRow.getEntry(), /* fromSystem= */ true);
 
         assertThat(mBubbleController.hasBubbles()).isFalse();
     }
@@ -868,48 +828,33 @@
         NotificationListenerService.Ranking ranking = new RankingBuilder(
                 mRow.getRanking()).setCanBubble(false).build();
         mRow.setRanking(ranking);
-        mEntryListener.onPreEntryUpdated(mRow);
+        mEntryListener.onEntryUpdated(mRow, /* fromSystem= */ true);
 
         assertFalse(mBubbleController.hasBubbles());
         verify(mDeleteIntent, never()).send();
     }
 
     @Test
-    public void testRemoveBubble_succeeds_appCancel() {
-        mEntryListener.onPendingEntryAdded(mRow);
-        mBubbleController.updateBubble(mBubbleEntry);
-
-        assertTrue(mBubbleController.hasBubbles());
-
-        boolean intercepted = mRemoveInterceptor.onNotificationRemoveRequested(
-                mRow.getKey(), mRow, REASON_APP_CANCEL);
-
-        // Cancels always remove so no need to intercept
-        assertFalse(intercepted);
-    }
-
-    @Test
     public void testRemoveBubble_entryListenerRemove() {
-        mEntryListener.onPendingEntryAdded(mRow);
+        mEntryListener.onEntryAdded(mRow);
         mBubbleController.updateBubble(mBubbleEntry);
 
         assertTrue(mBubbleController.hasBubbles());
 
         // Removes the notification
-        mEntryListener.onEntryRemoved(mRow, null, false, REASON_APP_CANCEL);
+        mEntryListener.onEntryRemoved(mRow, REASON_APP_CANCEL);
         assertFalse(mBubbleController.hasBubbles());
     }
 
     @Test
-    public void removeBubble_clearAllIntercepted()  {
-        mEntryListener.onPendingEntryAdded(mRow);
+    public void removeBubble_intercepted() {
+        mEntryListener.onEntryAdded(mRow);
         mBubbleController.updateBubble(mBubbleEntry);
 
         assertTrue(mBubbleController.hasBubbles());
         assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
 
-        boolean intercepted = mRemoveInterceptor.onNotificationRemoveRequested(
-                mRow.getKey(), mRow, REASON_CANCEL_ALL);
+        boolean intercepted = mBubblesManager.handleDismissalInterception(mRow);
 
         // Intercept!
         assertTrue(intercepted);
@@ -918,99 +863,51 @@
     }
 
     @Test
-    public void removeBubble_userDismissNotifIntercepted() {
-        mEntryListener.onPendingEntryAdded(mRow);
+    public void removeBubble_dismissIntoOverflow_intercepted() {
+        mEntryListener.onEntryAdded(mRow);
         mBubbleController.updateBubble(mBubbleEntry);
 
         assertTrue(mBubbleController.hasBubbles());
         assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
 
-        boolean intercepted = mRemoveInterceptor.onNotificationRemoveRequested(
-                mRow.getKey(), mRow, REASON_CANCEL);
-
-        // Intercept!
-        assertTrue(intercepted);
-        // Should update show in shade state
-        assertBubbleNotificationSuppressedFromShade(mBubbleEntry);
-    }
-
-    @Test
-    public void removeNotif_inOverflow_intercepted() {
-        // Get bubble with notif in shade.
-        mEntryListener.onPendingEntryAdded(mRow);
-        mBubbleController.updateBubble(mBubbleEntry);
-        assertTrue(mBubbleController.hasBubbles());
-        assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
-
-        // Dismiss the bubble into overflow.
-        mBubbleController.removeBubble(
-                mRow.getKey(), Bubbles.DISMISS_USER_GESTURE);
+        // Dismiss the bubble
+        mBubbleController.removeBubble(mRow.getKey(), Bubbles.DISMISS_USER_GESTURE);
         assertFalse(mBubbleController.hasBubbles());
 
-        boolean intercepted = mRemoveInterceptor.onNotificationRemoveRequested(
-                mRow.getKey(), mRow, REASON_CANCEL);
+        // Dismiss the notification
+        boolean intercepted = mBubblesManager.handleDismissalInterception(mRow);
 
-        // Notif is no longer a bubble, but still in overflow, so we intercept removal.
+        // Intercept dismissal since bubble is going into overflow
         assertTrue(intercepted);
     }
 
     @Test
-    public void removeNotif_notInOverflow_notIntercepted() {
-        // Get bubble with notif in shade.
-        mEntryListener.onPendingEntryAdded(mRow);
+    public void removeBubble_notIntercepted() {
+        mEntryListener.onEntryAdded(mRow);
         mBubbleController.updateBubble(mBubbleEntry);
 
         assertTrue(mBubbleController.hasBubbles());
         assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
 
-        mBubbleController.removeBubble(
-                mRow.getKey(), Bubbles.DISMISS_NO_LONGER_BUBBLE);
+        // Dismiss the bubble
+        mBubbleController.removeBubble(mRow.getKey(), Bubbles.DISMISS_NOTIF_CANCEL);
         assertFalse(mBubbleController.hasBubbles());
 
-        boolean intercepted = mRemoveInterceptor.onNotificationRemoveRequested(
-                mRow.getKey(), mRow, REASON_CANCEL);
+        // Dismiss the notification
+        boolean intercepted = mBubblesManager.handleDismissalInterception(mRow);
 
-        // Notif is no longer a bubble, so we should not intercept removal.
+        // Not a bubble anymore so we don't intercept dismissal.
         assertFalse(intercepted);
     }
 
     @Test
-    public void testOverflowBubble_maxReached_notInShade_bubbleRemoved() {
-        mBubbleController.updateBubble(
-                mBubbleEntry, /* suppressFlyout */ false, /* showInShade */ false);
-        mBubbleController.updateBubble(
-                mBubbleEntry2, /* suppressFlyout */ false, /* showInShade */ false);
-        mBubbleController.updateBubble(
-                mBubbleEntry3, /* suppressFlyout */ false, /* showInShade */ false);
-        when(mCommonNotifCollection.getEntry(mRow.getKey())).thenReturn(mRow);
-        when(mCommonNotifCollection.getEntry(mRow2.getKey())).thenReturn(mRow2);
-        when(mCommonNotifCollection.getEntry(mRow3.getKey())).thenReturn(mRow3);
-        assertEquals(mBubbleData.getBubbles().size(), 3);
-
-        mBubbleData.setMaxOverflowBubbles(1);
-        mBubbleController.removeBubble(
-                mRow.getKey(), Bubbles.DISMISS_USER_GESTURE);
-        assertEquals(mBubbleData.getBubbles().size(), 2);
-        assertEquals(mBubbleData.getOverflowBubbles().size(), 1);
-
-        mBubbleController.removeBubble(
-                mRow2.getKey(), Bubbles.DISMISS_USER_GESTURE);
-        // Overflow max of 1 is reached; mRow is oldest, so it gets removed
-        verify(mNotificationEntryManager, times(1)).performRemoveNotification(
-                eq(mRow.getSbn()), any(), eq(REASON_CANCEL));
-        assertEquals(mBubbleData.getBubbles().size(), 1);
-        assertEquals(mBubbleData.getOverflowBubbles().size(), 1);
-    }
-
-    @Test
     public void testNotifyShadeSuppressionChange_notificationDismiss() {
-        mEntryListener.onPendingEntryAdded(mRow);
+        mEntryListener.onEntryAdded(mRow);
 
         assertTrue(mBubbleController.hasBubbles());
         assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
 
-        mRemoveInterceptor.onNotificationRemoveRequested(
-                mRow.getKey(), mRow, REASON_CANCEL);
+        mBubblesManager.handleDismissalInterception(mRow);
 
         // Should update show in shade state
         assertBubbleNotificationSuppressedFromShade(mBubbleEntry);
@@ -1022,7 +919,7 @@
 
     @Test
     public void testNotifyShadeSuppressionChange_bubbleExpanded() {
-        mEntryListener.onPendingEntryAdded(mRow);
+        mEntryListener.onEntryAdded(mRow);
 
         assertTrue(mBubbleController.hasBubbles());
         assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
@@ -1042,9 +939,9 @@
         // GIVEN a group summary with a bubble child
         ExpandableNotificationRow groupSummary = mNotificationTestHelper.createGroup(0);
         ExpandableNotificationRow groupedBubble = mNotificationTestHelper.createBubbleInGroup();
+        mEntryListener.onEntryAdded(groupedBubble.getEntry());
         when(mCommonNotifCollection.getEntry(groupedBubble.getEntry().getKey()))
                 .thenReturn(groupedBubble.getEntry());
-        mEntryListener.onPendingEntryAdded(groupedBubble.getEntry());
         groupSummary.addChildNotification(groupedBubble);
         assertTrue(mBubbleData.hasBubbleInStackWithKey(groupedBubble.getEntry().getKey()));
 
@@ -1054,10 +951,10 @@
         // THEN the summary and bubbled child are suppressed from the shade
         assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(
                 groupedBubble.getEntry().getKey(),
-                groupSummary.getEntry().getSbn().getGroupKey()));
+                groupedBubble.getEntry().getSbn().getGroupKey()));
         assertTrue(mBubbleController.getImplCachedState().isBubbleNotificationSuppressedFromShade(
                 groupedBubble.getEntry().getKey(),
-                groupSummary.getEntry().getSbn().getGroupKey()));
+                groupedBubble.getEntry().getSbn().getGroupKey()));
         assertTrue(mBubbleData.isSummarySuppressed(groupSummary.getEntry().getSbn().getGroupKey()));
     }
 
@@ -1066,7 +963,7 @@
         // GIVEN a group summary with a bubble child
         ExpandableNotificationRow groupSummary = mNotificationTestHelper.createGroup(0);
         ExpandableNotificationRow groupedBubble = mNotificationTestHelper.createBubbleInGroup();
-        mEntryListener.onPendingEntryAdded(groupedBubble.getEntry());
+        mEntryListener.onEntryAdded(groupedBubble.getEntry());
         when(mCommonNotifCollection.getEntry(groupedBubble.getEntry().getKey()))
                 .thenReturn(groupedBubble.getEntry());
         groupSummary.addChildNotification(groupedBubble);
@@ -1076,7 +973,7 @@
         mBubblesManager.handleDismissalInterception(groupSummary.getEntry());
 
         // WHEN the summary is cancelled by the app
-        mEntryListener.onEntryRemoved(groupSummary.getEntry(), null, false, REASON_APP_CANCEL);
+        mEntryListener.onEntryRemoved(groupSummary.getEntry(), REASON_APP_CANCEL);
 
         // THEN the summary and its children are removed from bubble data
         assertFalse(mBubbleData.hasBubbleInStackWithKey(groupedBubble.getEntry().getKey()));
@@ -1085,14 +982,14 @@
     }
 
     @Test
-    public void testSummaryDismissal_marksBubblesHiddenFromShadeAndDismissesNonBubbledChildren()
+    public void testSummaryDismissalMarksBubblesHiddenFromShadeAndDismissesNonBubbledChildren()
             throws Exception {
         // GIVEN a group summary with two (non-bubble) children and one bubble child
         ExpandableNotificationRow groupSummary = mNotificationTestHelper.createGroup(2);
         ExpandableNotificationRow groupedBubble = mNotificationTestHelper.createBubbleInGroup();
+        mEntryListener.onEntryAdded(groupedBubble.getEntry());
         when(mCommonNotifCollection.getEntry(groupedBubble.getEntry().getKey()))
                 .thenReturn(groupedBubble.getEntry());
-        mEntryListener.onPendingEntryAdded(groupedBubble.getEntry());
         groupSummary.addChildNotification(groupedBubble);
 
         // WHEN the summary is dismissed
@@ -1100,16 +997,15 @@
 
         // THEN only the NON-bubble children are dismissed
         List<ExpandableNotificationRow> childrenRows = groupSummary.getAttachedChildren();
-        verify(mNotificationEntryManager, times(1)).performRemoveNotification(
-                eq(childrenRows.get(0).getEntry().getSbn()), any(),
-                eq(REASON_GROUP_SUMMARY_CANCELED));
-        verify(mNotificationEntryManager, times(1)).performRemoveNotification(
-                eq(childrenRows.get(1).getEntry().getSbn()), any(),
-                eq(REASON_GROUP_SUMMARY_CANCELED));
-        verify(mNotificationEntryManager, never()).performRemoveNotification(
-                eq(groupedBubble.getEntry().getSbn()), any(), anyInt());
+        verify(mNotifCallback, times(1)).removeNotification(
+                eq(childrenRows.get(0).getEntry()), any(), eq(REASON_GROUP_SUMMARY_CANCELED));
+        verify(mNotifCallback, times(1)).removeNotification(
+                eq(childrenRows.get(1).getEntry()), any(), eq(REASON_GROUP_SUMMARY_CANCELED));
+        verify(mNotifCallback, never()).removeNotification(eq(groupedBubble.getEntry()),
+                any(), anyInt());
 
-        // THEN the bubble child is suppressed from the shade
+        // THEN the bubble child still exists as a bubble and is suppressed from the shade
+        assertTrue(mBubbleData.hasBubbleInStackWithKey(groupedBubble.getEntry().getKey()));
         assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(
                 groupedBubble.getEntry().getKey(),
                 groupedBubble.getEntry().getSbn().getGroupKey()));
@@ -1117,34 +1013,17 @@
                 groupedBubble.getEntry().getKey(),
                 groupedBubble.getEntry().getSbn().getGroupKey()));
 
-        // THEN the summary is removed from GroupManager
-        verify(mNotificationGroupManager, times(1)).onEntryRemoved(groupSummary.getEntry());
+        // THEN the summary is also suppressed from the shade
+        assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(
+                groupSummary.getEntry().getKey(),
+                groupSummary.getEntry().getSbn().getGroupKey()));
+        assertTrue(mBubbleController.getImplCachedState().isBubbleNotificationSuppressedFromShade(
+                groupSummary.getEntry().getKey(),
+                groupSummary.getEntry().getSbn().getGroupKey()));
     }
 
 
     /**
-     * Verifies that when a non visually interruptive update occurs for a bubble in the overflow,
-     * the that bubble does not get promoted from the overflow.
-     */
-    @Test
-    public void test_notVisuallyInterruptive_updateOverflowBubble_notAdded() {
-        // Setup
-        mBubbleController.updateBubble(mBubbleEntry);
-        mBubbleController.updateBubble(mBubbleEntry2);
-        assertTrue(mBubbleController.hasBubbles());
-
-        // Overflow it
-        mBubbleData.dismissBubbleWithKey(mRow.getKey(),
-                Bubbles.DISMISS_USER_GESTURE);
-        assertThat(mBubbleData.hasBubbleInStackWithKey(mRow.getKey())).isFalse();
-        assertThat(mBubbleData.hasOverflowBubbleWithKey(mRow.getKey())).isTrue();
-
-        // Test
-        mBubbleController.updateBubble(mBubbleEntry);
-        assertThat(mBubbleData.hasBubbleInStackWithKey(mRow.getKey())).isFalse();
-    }
-
-    /**
      * Verifies that when the user changes, the bubbles in the overflow list is cleared. Doesn't
      * test the loading from the repository which would be a nice thing to add.
      */
@@ -1163,7 +1042,7 @@
         assertThat(mBubbleData.getOverflowBubbleWithKey(mBubbleEntry2.getKey())).isNotNull();
 
         // Switch users
-        mBubbleController.onUserChanged(secondUserId);
+        switchUser(secondUserId);
         assertThat(mBubbleData.getOverflowBubbles()).isEmpty();
 
         // Give this user some bubbles
@@ -1180,20 +1059,57 @@
         verify(mDataRepository, times(2)).loadBubbles(anyInt(), any());
     }
 
+    @Test
+    public void testOnUserChanged_bubblesRestored() {
+        int firstUserId = mBubbleEntry.getStatusBarNotification().getUser().getIdentifier();
+        int secondUserId = mBubbleEntryUser11.getStatusBarNotification().getUser().getIdentifier();
+        // Mock current profile
+        when(mLockscreenUserManager.isCurrentProfile(firstUserId)).thenReturn(true);
+        when(mLockscreenUserManager.isCurrentProfile(secondUserId)).thenReturn(false);
+
+        mBubbleController.updateBubble(mBubbleEntry);
+        assertThat(mBubbleController.hasBubbles()).isTrue();
+        // We start with 1 bubble
+        assertThat(mBubbleData.getBubbles()).hasSize(1);
+
+        // Switch to second user
+        switchUser(secondUserId);
+
+        // Second user has no bubbles
+        assertThat(mBubbleController.hasBubbles()).isFalse();
+
+        // Send bubble update for first user, ensure it does not show up
+        mBubbleController.updateBubble(mBubbleEntry2);
+        assertThat(mBubbleController.hasBubbles()).isFalse();
+
+        // Start returning notif for first user again
+        when(mCommonNotifCollection.getAllNotifs()).thenReturn(Arrays.asList(mRow, mRow2));
+
+        // Switch back to first user
+        switchUser(firstUserId);
+
+        // Check we now have two bubbles, one previous and one new that came in
+        assertThat(mBubbleController.hasBubbles()).isTrue();
+        // Now there are 2 bubbles
+        assertThat(mBubbleData.getBubbles()).hasSize(2);
+    }
+
     /**
      * Verifies we only load the overflow data once.
      */
     @Test
     public void testOverflowLoadedOnce() {
-        mBubbleController.updateBubble(mBubbleEntry);
-        mBubbleController.updateBubble(mBubbleEntry2);
-        mBubbleData.dismissAll(Bubbles.DISMISS_USER_GESTURE);
-        assertThat(mBubbleData.getOverflowBubbles().isEmpty()).isFalse();
+        // XXX
+        when(mCommonNotifCollection.getEntry(mRow.getKey())).thenReturn(mRow);
+        when(mCommonNotifCollection.getEntry(mRow2.getKey())).thenReturn(mRow2);
 
-        mBubbleController.updateBubble(mBubbleEntry);
-        mBubbleController.updateBubble(mBubbleEntry2);
-        mBubbleController.removeBubble(mBubbleEntry.getKey(), DISMISS_NOTIF_CANCEL);
-        mBubbleController.removeBubble(mBubbleEntry2.getKey(), DISMISS_NOTIF_CANCEL);
+        mEntryListener.onEntryAdded(mRow);
+        mEntryListener.onEntryAdded(mRow2);
+        mBubbleData.dismissAll(Bubbles.DISMISS_USER_GESTURE);
+        assertThat(mBubbleData.getOverflowBubbles()).isNotEmpty();
+
+        mEntryListener.onEntryRemoved(mRow, REASON_APP_CANCEL);
+        mEntryListener.onEntryRemoved(mRow2, REASON_APP_CANCEL);
         assertThat(mBubbleData.getOverflowBubbles()).isEmpty();
 
         verify(mDataRepository, times(1)).loadBubbles(anyInt(), any());
@@ -1376,6 +1292,7 @@
         assertStackCollapsed();
     }
 
+
     @Test
     public void testRegisterUnregisterBroadcastListener() {
         spyOn(mContext);
@@ -1455,7 +1372,7 @@
 
     @Test
     public void testSetShouldAutoExpand_notifiesFlagChanged() {
-        mEntryListener.onPendingEntryAdded(mRow);
+        mBubbleController.updateBubble(mBubbleEntry);
 
         assertTrue(mBubbleController.hasBubbles());
         Bubble b = mBubbleData.getBubbleInStackWithKey(mBubbleEntry.getKey());
@@ -1516,6 +1433,100 @@
         assertThat(mBubbleData.hasBubbleInStackWithKey(mBubbleEntry.getKey())).isFalse();
     }
 
+    /**
+     * Verifies that if a bubble is in the overflow and a non-interruptive notification update
+     * comes in for it, it stays in the overflow but the entry is updated.
+     */
+    @Test
+    public void testNonInterruptiveUpdate_doesntBubbleFromOverflow() {
+        mEntryListener.onEntryAdded(mRow);
+        mEntryListener.onEntryUpdated(mRow, /* fromSystem= */ true);
+        assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
+
+        // Dismiss the bubble so it's in the overflow
+        mBubbleController.removeBubble(
+                mRow.getKey(), Bubbles.DISMISS_USER_GESTURE);
+        assertThat(mBubbleData.hasOverflowBubbleWithKey(mRow.getKey())).isTrue();
+
+        // Update the entry to not show in shade
+        setMetadataFlags(mRow,
+                Notification.BubbleMetadata.FLAG_SUPPRESS_NOTIFICATION, /* enableFlag= */ true);
+        mBubbleController.updateBubble(mBubbleEntry,
+                /* suppressFlyout= */ false, /* showInShade= */ true);
+
+        // Check that the update was applied - shouldn't be show in shade
+        assertBubbleNotificationSuppressedFromShade(mBubbleEntry);
+        // Check that it wasn't inflated (1 because it would've been inflated via onEntryAdded)
+        verify(mBubbleController, times(1)).inflateAndAdd(
+                any(Bubble.class), anyBoolean(), anyBoolean());
+    }
+
+    /**
+     * Verifies that if a bubble is active, and a non-interruptive notification update comes in for
+     * it, it doesn't trigger a new inflate and add for that bubble.
+     */
+    @Test
+    public void testNonInterruptiveUpdate_doesntTriggerInflate() {
+        mEntryListener.onEntryAdded(mRow);
+        mEntryListener.onEntryUpdated(mRow, /* fromSystem= */ true);
+        assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
+
+        // Update the entry to not show in shade
+        setMetadataFlags(mRow,
+                Notification.BubbleMetadata.FLAG_SUPPRESS_NOTIFICATION, /* enableFlag= */ true);
+        mBubbleController.updateBubble(mBubbleEntry,
+                /* suppressFlyout= */ false, /* showInShade= */ true);
+
+        // Check that the update was applied - shouldn't be show in shade
+        assertBubbleNotificationSuppressedFromShade(mBubbleEntry);
+        // Check that it wasn't inflated (1 because it would've been inflated via onEntryAdded)
+        verify(mBubbleController, times(1)).inflateAndAdd(
+                any(Bubble.class), anyBoolean(), anyBoolean());
+    }
+
+    /**
+     * Verifies that if a bubble is in the overflow and a non-interruptive notification update
+     * comes in for it with FLAG_BUBBLE that the flag is removed.
+     */
+    @Test
+    public void testNonInterruptiveUpdate_doesntOverrideOverflowFlagBubble() {
+        mEntryListener.onEntryAdded(mRow);
+        mEntryListener.onEntryUpdated(mRow, /* fromSystem= */ true);
+        assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
+
+        // Dismiss the bubble so it's in the overflow
+        mBubbleController.removeBubble(
+                mRow.getKey(), Bubbles.DISMISS_USER_GESTURE);
+        assertThat(mBubbleData.hasOverflowBubbleWithKey(mRow.getKey())).isTrue();
+        // Once it's in the overflow it's not actively a bubble (doesn't have FLAG_BUBBLE)
+        Bubble b = mBubbleData.getOverflowBubbleWithKey(mBubbleEntry.getKey());
+        assertThat(b.isBubble()).isFalse();
+
+        // Send a non-notifying update that has FLAG_BUBBLE
+        mRow.getSbn().getNotification().flags = FLAG_BUBBLE;
+        assertThat(mRow.getSbn().getNotification().isBubbleNotification()).isTrue();
+        mBubbleController.updateBubble(mBubbleEntry,
+                /* suppressFlyout= */ false, /* showInShade= */ true);
+
+        // Verify that it still doesn't have FLAG_BUBBLE because it's in the overflow.
+        b = mBubbleData.getOverflowBubbleWithKey(mBubbleEntry.getKey());
+        assertThat(b.isBubble()).isFalse();
+    }
+
+    @Test
+    public void testNonSystemUpdatesIgnored() {
+        mEntryListener.onEntryAdded(mRow);
+        assertThat(mBubbleController.hasBubbles()).isTrue();
+
+        mEntryListener.onEntryUpdated(mRow, /* fromSystem= */ false);
+        mEntryListener.onEntryUpdated(mRow, /* fromSystem= */ false);
+        mEntryListener.onEntryUpdated(mRow, /* fromSystem= */ false);
+
+        // Check that it wasn't inflated (1 because it would've been inflated via onEntryAdded)
+        verify(mBubbleController, times(1)).inflateAndAdd(
+                any(Bubble.class), anyBoolean(), anyBoolean());
+    }
+
     /** Creates a bubble using the userId and package. */
     private Bubble createBubble(int userId, String pkg) {
         final UserHandle userHandle = new UserHandle(userId);
@@ -1551,7 +1562,7 @@
     }
 
     /**
-     * Sets the bubble metadata flags for this entry. These ]flags are normally set by
+     * Sets the bubble metadata flags for this entry. These flags are normally set by
      * NotificationManagerService when the notification is sent, however, these tests do not
      * go through that path so we set them explicitly when testing.
      */
@@ -1570,12 +1581,23 @@
     private Notification.BubbleMetadata getMetadata() {
         Intent target = new Intent(mContext, BubblesTestActivity.class);
         PendingIntent bubbleIntent = PendingIntent.getActivity(mContext, 0, target, FLAG_MUTABLE);
-
-        return new Notification.BubbleMetadata.Builder(bubbleIntent,
-                Icon.createWithResource(mContext, R.drawable.bubble_ic_create_bubble))
+        return new Notification.BubbleMetadata.Builder(
+                bubbleIntent,
+                Icon.createWithResource(
+                        mContext,
+                        com.android.wm.shell.R.drawable.bubble_ic_create_bubble))
                 .build();
     }
 
+    private void switchUser(int userId) {
+        when(mLockscreenUserManager.isCurrentProfile(anyInt())).thenAnswer(
+                (Answer<Boolean>) invocation -> invocation.<Integer>getArgument(0) == userId);
+        SparseArray<UserInfo> userInfos = new SparseArray<>(1);
+        userInfos.put(userId, mock(UserInfo.class));
+        mBubbleController.onCurrentProfilesChanged(userInfos);
+        mBubbleController.onUserChanged(userId);
+    }
+
     /**
      * Asserts that the bubble stack is expanded and also validates the cached state is updated.
      */
diff --git a/packages/SystemUI/tests/src/com/android/systemui/wmshell/NewNotifPipelineBubblesTest.java b/packages/SystemUI/tests/src/com/android/systemui/wmshell/NewNotifPipelineBubblesTest.java
deleted file mode 100644
index a6327b9..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/wmshell/NewNotifPipelineBubblesTest.java
+++ /dev/null
@@ -1,1401 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.wmshell;
-
-import static android.app.Notification.FLAG_BUBBLE;
-import static android.service.notification.NotificationListenerService.NOTIFICATION_CHANNEL_OR_GROUP_DELETED;
-import static android.service.notification.NotificationListenerService.NOTIFICATION_CHANNEL_OR_GROUP_UPDATED;
-import static android.service.notification.NotificationListenerService.REASON_APP_CANCEL;
-import static android.service.notification.NotificationListenerService.REASON_GROUP_SUMMARY_CANCELED;
-
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
-
-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.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.atLeastOnce;
-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.when;
-
-import android.app.IActivityManager;
-import android.app.INotificationManager;
-import android.app.Notification;
-import android.app.PendingIntent;
-import android.content.BroadcastReceiver;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.pm.LauncherApps;
-import android.content.pm.UserInfo;
-import android.hardware.display.AmbientDisplayConfiguration;
-import android.os.Handler;
-import android.os.PowerManager;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.service.dreams.IDreamManager;
-import android.service.notification.NotificationListenerService;
-import android.service.notification.ZenModeConfig;
-import android.testing.AndroidTestingRunner;
-import android.testing.TestableLooper;
-import android.util.Pair;
-import android.util.SparseArray;
-import android.view.View;
-import android.view.WindowManager;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.internal.colorextraction.ColorExtractor;
-import com.android.internal.statusbar.IStatusBarService;
-import com.android.systemui.SysuiTestCase;
-import com.android.systemui.biometrics.AuthController;
-import com.android.systemui.colorextraction.SysuiColorExtractor;
-import com.android.systemui.dump.DumpManager;
-import com.android.systemui.keyguard.KeyguardViewMediator;
-import com.android.systemui.model.SysUiState;
-import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.shared.system.QuickStepContract;
-import com.android.systemui.statusbar.NotificationLockscreenUserManager;
-import com.android.systemui.statusbar.RankingBuilder;
-import com.android.systemui.statusbar.SysuiStatusBarStateController;
-import com.android.systemui.statusbar.notification.NotifPipelineFlags;
-import com.android.systemui.statusbar.notification.NotificationEntryManager;
-import com.android.systemui.statusbar.notification.NotificationFilter;
-import com.android.systemui.statusbar.notification.collection.NotifPipeline;
-import com.android.systemui.statusbar.notification.collection.NotificationEntry;
-import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy;
-import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
-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.KeyguardNotificationVisibilityProvider;
-import com.android.systemui.statusbar.notification.interruption.NotificationInterruptLogger;
-import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
-import com.android.systemui.statusbar.notification.row.NotificationTestHelper;
-import com.android.systemui.statusbar.phone.DozeParameters;
-import com.android.systemui.statusbar.phone.KeyguardBypassController;
-import com.android.systemui.statusbar.phone.NotificationShadeWindowControllerImpl;
-import com.android.systemui.statusbar.phone.NotificationShadeWindowView;
-import com.android.systemui.statusbar.phone.ScreenOffAnimationController;
-import com.android.systemui.statusbar.phone.ShadeController;
-import com.android.systemui.statusbar.policy.BatteryController;
-import com.android.systemui.statusbar.policy.ConfigurationController;
-import com.android.systemui.statusbar.policy.HeadsUpManager;
-import com.android.systemui.statusbar.policy.KeyguardStateController;
-import com.android.systemui.statusbar.policy.ZenModeController;
-import com.android.wm.shell.ShellTaskOrganizer;
-import com.android.wm.shell.TaskViewTransitions;
-import com.android.wm.shell.WindowManagerShellWrapper;
-import com.android.wm.shell.bubbles.Bubble;
-import com.android.wm.shell.bubbles.BubbleData;
-import com.android.wm.shell.bubbles.BubbleDataRepository;
-import com.android.wm.shell.bubbles.BubbleEntry;
-import com.android.wm.shell.bubbles.BubbleLogger;
-import com.android.wm.shell.bubbles.BubbleStackView;
-import com.android.wm.shell.bubbles.Bubbles;
-import com.android.wm.shell.common.DisplayController;
-import com.android.wm.shell.common.FloatingContentCoordinator;
-import com.android.wm.shell.common.ShellExecutor;
-import com.android.wm.shell.common.SyncTransactionQueue;
-import com.android.wm.shell.common.TaskStackListenerImpl;
-import com.android.wm.shell.draganddrop.DragAndDropController;
-import com.android.wm.shell.onehanded.OneHandedController;
-
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Optional;
-
-/**
- * Tests the NotifPipeline setup with BubbleController.
- * The NotificationEntryManager setup with BubbleController is tested in
- * {@link BubblesTest}.
- */
-@SmallTest
-@RunWith(AndroidTestingRunner.class)
-@TestableLooper.RunWithLooper(setAsMainLooper = true)
-public class NewNotifPipelineBubblesTest extends SysuiTestCase {
-    @Mock
-    private NotificationEntryManager mNotificationEntryManager;
-    @Mock
-    private CommonNotifCollection mCommonNotifCollection;
-    @Mock
-    private NotificationGroupManagerLegacy mNotificationGroupManager;
-    @Mock
-    private BubblesManager.NotifCallback mNotifCallback;
-    @Mock
-    private WindowManager mWindowManager;
-    @Mock
-    private IActivityManager mActivityManager;
-    @Mock
-    private DozeParameters mDozeParameters;
-    @Mock
-    private ConfigurationController mConfigurationController;
-    @Mock
-    private ZenModeController mZenModeController;
-    @Mock
-    private ZenModeConfig mZenModeConfig;
-    @Mock
-    private NotificationLockscreenUserManager mLockscreenUserManager;
-    @Mock
-    private SysuiStatusBarStateController mStatusBarStateController;
-    @Mock
-    private KeyguardViewMediator mKeyguardViewMediator;
-    @Mock
-    private KeyguardBypassController mKeyguardBypassController;
-    @Mock
-    private FloatingContentCoordinator mFloatingContentCoordinator;
-    @Mock
-    private BubbleDataRepository mDataRepository;
-    @Mock
-    private NotificationShadeWindowView mNotificationShadeWindowView;
-    @Mock
-    private AuthController mAuthController;
-
-    private SysUiState mSysUiState;
-    private boolean mSysUiStateBubblesExpanded;
-    private boolean mSysUiStateBubblesManageMenuExpanded;
-
-    @Captor
-    private ArgumentCaptor<NotifCollectionListener> mNotifListenerCaptor;
-    @Captor
-    private ArgumentCaptor<List<Bubble>> mBubbleListCaptor;
-    @Captor
-    private ArgumentCaptor<IntentFilter> mFilterArgumentCaptor;
-    @Captor
-    private ArgumentCaptor<BroadcastReceiver> mBroadcastReceiverArgumentCaptor;
-
-    private BubblesManager mBubblesManager;
-    private TestableBubbleController mBubbleController;
-    private NotificationShadeWindowControllerImpl mNotificationShadeWindowController;
-    private NotifCollectionListener mEntryListener;
-    private NotificationTestHelper mNotificationTestHelper;
-    private NotificationEntry mRow;
-    private NotificationEntry mRow2;
-    private ExpandableNotificationRow mNonBubbleNotifRow;
-    private BubbleEntry mBubbleEntry;
-    private BubbleEntry mBubbleEntry2;
-
-    private BubbleEntry mBubbleEntryUser11;
-    private BubbleEntry mBubbleEntry2User11;
-
-    @Mock
-    private Bubbles.BubbleExpandListener mBubbleExpandListener;
-    @Mock
-    private PendingIntent mDeleteIntent;
-    @Mock
-    private SysuiColorExtractor mColorExtractor;
-    @Mock
-    ColorExtractor.GradientColors mGradientColors;
-    @Mock
-    private ShadeController mShadeController;
-    @Mock
-    private NotifPipeline mNotifPipeline;
-    @Mock
-    private NotifPipelineFlags mNotifPipelineFlags;
-    @Mock
-    private DumpManager mDumpManager;
-    @Mock
-    private IStatusBarService mStatusBarService;
-    @Mock
-    private NotificationVisibilityProvider mVisibilityProvider;
-    @Mock
-    private LauncherApps mLauncherApps;
-    @Mock
-    private WindowManagerShellWrapper mWindowManagerShellWrapper;
-    @Mock
-    private BubbleLogger mBubbleLogger;
-    @Mock
-    private TaskStackListenerImpl mTaskStackListener;
-    @Mock
-    private ShellTaskOrganizer mShellTaskOrganizer;
-    @Mock
-    private KeyguardStateController mKeyguardStateController;
-    @Mock
-    private ScreenOffAnimationController mScreenOffAnimationController;
-    @Mock
-    private TaskViewTransitions mTaskViewTransitions;
-    @Mock
-    private Optional<OneHandedController> mOneHandedOptional;
-
-    private TestableBubblePositioner mPositioner;
-
-    private BubbleData mBubbleData;
-
-    private TestableLooper mTestableLooper;
-
-    @Before
-    public void setUp() throws Exception {
-        MockitoAnnotations.initMocks(this);
-
-        mTestableLooper = TestableLooper.get(this);
-
-        // For the purposes of this test, just run everything synchronously
-        ShellExecutor syncExecutor = new SyncExecutor();
-
-        when(mColorExtractor.getNeutralColors()).thenReturn(mGradientColors);
-
-        mNotificationShadeWindowController = new NotificationShadeWindowControllerImpl(mContext,
-                mWindowManager, mActivityManager, mDozeParameters, mStatusBarStateController,
-                mConfigurationController, mKeyguardViewMediator, mKeyguardBypassController,
-                mColorExtractor, mDumpManager, mKeyguardStateController,
-                mScreenOffAnimationController, mAuthController);
-        mNotificationShadeWindowController.setNotificationShadeView(mNotificationShadeWindowView);
-        mNotificationShadeWindowController.attach();
-
-        // Need notifications for bubbles
-        mNotificationTestHelper = new NotificationTestHelper(
-                mContext,
-                mDependency,
-                TestableLooper.get(this));
-        mRow = mNotificationTestHelper.createBubble(mDeleteIntent);
-        mRow2 = mNotificationTestHelper.createBubble(mDeleteIntent);
-        mNonBubbleNotifRow = mNotificationTestHelper.createRow();
-        mBubbleEntry = BubblesManager.notifToBubbleEntry(mRow);
-        mBubbleEntry2 = BubblesManager.notifToBubbleEntry(mRow2);
-
-        UserHandle handle = mock(UserHandle.class);
-        when(handle.getIdentifier()).thenReturn(11);
-        mBubbleEntryUser11 = BubblesManager.notifToBubbleEntry(
-                mNotificationTestHelper.createBubble(handle));
-        mBubbleEntry2User11 = BubblesManager.notifToBubbleEntry(
-                mNotificationTestHelper.createBubble(handle));
-
-        mZenModeConfig.suppressedVisualEffects = 0;
-        when(mZenModeController.getConfig()).thenReturn(mZenModeConfig);
-
-        mSysUiState = new SysUiState();
-        mSysUiState.addCallback(sysUiFlags -> {
-            mSysUiStateBubblesManageMenuExpanded =
-                    (sysUiFlags
-                            & QuickStepContract.SYSUI_STATE_BUBBLES_MANAGE_MENU_EXPANDED) != 0;
-            mSysUiStateBubblesExpanded =
-                    (sysUiFlags & QuickStepContract.SYSUI_STATE_BUBBLES_EXPANDED) != 0;
-        });
-
-        mPositioner = new TestableBubblePositioner(mContext, mWindowManager);
-        mPositioner.setMaxBubbles(5);
-        mBubbleData = new BubbleData(mContext, mBubbleLogger, mPositioner, syncExecutor);
-
-        TestableNotificationInterruptStateProviderImpl interruptionStateProvider =
-                new TestableNotificationInterruptStateProviderImpl(mContext.getContentResolver(),
-                        mock(PowerManager.class),
-                        mock(IDreamManager.class),
-                        mock(AmbientDisplayConfiguration.class),
-                        mock(NotificationFilter.class),
-                        mock(StatusBarStateController.class),
-                        mock(BatteryController.class),
-                        mock(HeadsUpManager.class),
-                        mock(NotificationInterruptLogger.class),
-                        mock(Handler.class),
-                        mock(NotifPipelineFlags.class),
-                        mock(KeyguardNotificationVisibilityProvider.class)
-                );
-        when(mNotifPipelineFlags.isNewPipelineEnabled()).thenReturn(true);
-        when(mShellTaskOrganizer.getExecutor()).thenReturn(syncExecutor);
-        mBubbleController = new TestableBubbleController(
-                mContext,
-                mBubbleData,
-                mFloatingContentCoordinator,
-                mDataRepository,
-                mStatusBarService,
-                mWindowManager,
-                mWindowManagerShellWrapper,
-                mock(UserManager.class),
-                mLauncherApps,
-                mBubbleLogger,
-                mTaskStackListener,
-                mShellTaskOrganizer,
-                mPositioner,
-                mock(DisplayController.class),
-                mOneHandedOptional,
-                mock(DragAndDropController.class),
-                syncExecutor,
-                mock(Handler.class),
-                mTaskViewTransitions,
-                mock(SyncTransactionQueue.class));
-        mBubbleController.setExpandListener(mBubbleExpandListener);
-        spyOn(mBubbleController);
-
-        mBubblesManager = new BubblesManager(
-                mContext,
-                mBubbleController.asBubbles(),
-                mNotificationShadeWindowController,
-                mock(KeyguardStateController.class),
-                mShadeController,
-                mConfigurationController,
-                mStatusBarService,
-                mock(INotificationManager.class),
-                mVisibilityProvider,
-                interruptionStateProvider,
-                mZenModeController,
-                mLockscreenUserManager,
-                mNotificationGroupManager,
-                mNotificationEntryManager,
-                mCommonNotifCollection,
-                mNotifPipeline,
-                mSysUiState,
-                mNotifPipelineFlags,
-                mDumpManager,
-                syncExecutor);
-        mBubblesManager.addNotifCallback(mNotifCallback);
-
-        // Get a reference to the BubbleController's entry listener
-        verify(mNotifPipeline, atLeastOnce())
-                .addCollectionListener(mNotifListenerCaptor.capture());
-        mEntryListener = mNotifListenerCaptor.getValue();
-    }
-
-    @Test
-    public void testAddBubble() {
-        mBubbleController.updateBubble(mBubbleEntry);
-        assertTrue(mBubbleController.hasBubbles());
-        assertSysuiStates(false /* stackExpanded */, false /* mangeMenuExpanded */);
-    }
-
-    @Test
-    public void testHasBubbles() {
-        assertFalse(mBubbleController.hasBubbles());
-        mBubbleController.updateBubble(mBubbleEntry);
-        assertTrue(mBubbleController.hasBubbles());
-        assertSysuiStates(false /* stackExpanded */, false /* mangeMenuExpanded */);
-    }
-
-    @Test
-    public void testRemoveBubble() {
-        mBubbleController.updateBubble(mBubbleEntry);
-        assertNotNull(mBubbleData.getBubbleInStackWithKey(mRow.getKey()));
-        assertTrue(mBubbleController.hasBubbles());
-        verify(mNotifCallback, times(1)).invalidateNotifications(anyString());
-
-        mBubbleController.removeBubble(
-                mRow.getKey(), Bubbles.DISMISS_USER_GESTURE);
-        assertNull(mBubbleData.getBubbleInStackWithKey(mRow.getKey()));
-        verify(mNotifCallback, times(2)).invalidateNotifications(anyString());
-
-        assertSysuiStates(false /* stackExpanded */, false /* mangeMenuExpanded */);
-    }
-
-    @Test
-    public void testRemoveBubble_withDismissedNotif_inOverflow() {
-        mEntryListener.onEntryAdded(mRow);
-        mBubbleController.updateBubble(mBubbleEntry);
-
-        assertTrue(mBubbleController.hasBubbles());
-        assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
-
-        // Make it look like dismissed notif
-        mBubbleData.getBubbleInStackWithKey(mRow.getKey()).setSuppressNotification(true);
-
-        // Now remove the bubble
-        mBubbleController.removeBubble(
-                mRow.getKey(), Bubbles.DISMISS_USER_GESTURE);
-        assertTrue(mBubbleData.hasOverflowBubbleWithKey(mRow.getKey()));
-
-        // We don't remove the notification since the bubble is still in overflow.
-        verify(mNotifCallback, never()).removeNotification(eq(mRow), any(), anyInt());
-        assertFalse(mBubbleController.hasBubbles());
-    }
-
-    @Test
-    public void testRemoveBubble_withDismissedNotif_notInOverflow() {
-        mEntryListener.onEntryAdded(mRow);
-        mBubbleController.updateBubble(mBubbleEntry);
-        when(mCommonNotifCollection.getEntry(mRow.getKey())).thenReturn(mRow);
-
-        assertTrue(mBubbleController.hasBubbles());
-        assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
-
-        // Make it look like dismissed notif
-        mBubbleData.getBubbleInStackWithKey(mRow.getKey()).setSuppressNotification(true);
-
-        // Now remove the bubble
-        mBubbleController.removeBubble(
-                mRow.getKey(), Bubbles.DISMISS_NOTIF_CANCEL);
-        assertFalse(mBubbleData.hasOverflowBubbleWithKey(mRow.getKey()));
-
-        // Since the notif is dismissed and not in overflow, once the bubble is removed,
-        // removeNotification gets called to really remove the notif
-        verify(mNotifCallback, times(1)).removeNotification(eq(mRow),
-                any(), anyInt());
-        assertFalse(mBubbleController.hasBubbles());
-    }
-
-    @Test
-    public void testDismissStack() {
-        mBubbleController.updateBubble(mBubbleEntry);
-        verify(mNotifCallback, times(1)).invalidateNotifications(anyString());
-        assertNotNull(mBubbleData.getBubbleInStackWithKey(mRow.getKey()));
-        mBubbleController.updateBubble(mBubbleEntry2);
-        verify(mNotifCallback, times(2)).invalidateNotifications(anyString());
-        assertNotNull(mBubbleData.getBubbleInStackWithKey(mRow2.getKey()));
-        assertTrue(mBubbleController.hasBubbles());
-
-        mBubbleData.dismissAll(Bubbles.DISMISS_USER_GESTURE);
-        verify(mNotifCallback, times(3)).invalidateNotifications(anyString());
-        assertNull(mBubbleData.getBubbleInStackWithKey(mRow.getKey()));
-        assertNull(mBubbleData.getBubbleInStackWithKey(mRow2.getKey()));
-
-        assertSysuiStates(false /* stackExpanded */, false /* mangeMenuExpanded */);
-    }
-
-    @Test
-    public void testExpandCollapseStack() {
-        assertStackCollapsed();
-
-        // Mark it as a bubble and add it explicitly
-        mEntryListener.onEntryAdded(mRow);
-        mBubbleController.updateBubble(mBubbleEntry);
-
-        // We should have bubbles & their notifs should not be suppressed
-        assertTrue(mBubbleController.hasBubbles());
-        assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
-
-        // Expand the stack
-        mBubbleData.setExpanded(true);
-        assertStackExpanded();
-        verify(mBubbleExpandListener).onBubbleExpandChanged(true, mRow.getKey());
-        assertSysuiStates(true /* stackExpanded */, false /* mangeMenuExpanded */);
-
-        // Make sure the notif is suppressed
-        assertBubbleNotificationSuppressedFromShade(mBubbleEntry);
-
-        // Collapse
-        mBubbleController.collapseStack();
-        verify(mBubbleExpandListener).onBubbleExpandChanged(false, mRow.getKey());
-        assertStackCollapsed();
-        assertSysuiStates(false /* stackExpanded */, false /* mangeMenuExpanded */);
-    }
-
-    @Test
-    @Ignore("Currently broken.")
-    public void testCollapseAfterChangingExpandedBubble() {
-        // Mark it as a bubble and add it explicitly
-        mEntryListener.onEntryAdded(mRow);
-        mEntryListener.onEntryAdded(mRow2);
-        mBubbleController.updateBubble(mBubbleEntry);
-        mBubbleController.updateBubble(mBubbleEntry2);
-
-        // We should have bubbles & their notifs should not be suppressed
-        assertTrue(mBubbleController.hasBubbles());
-        assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
-        assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry2);
-
-        // Expand
-        BubbleStackView stackView = mBubbleController.getStackView();
-        mBubbleData.setExpanded(true);
-        assertStackExpanded();
-        verify(mBubbleExpandListener, atLeastOnce()).onBubbleExpandChanged(
-                true, mRow2.getKey());
-        assertSysuiStates(true /* stackExpanded */, false /* mangeMenuExpanded */);
-
-        // Last added is the one that is expanded
-        assertEquals(mRow2.getKey(), mBubbleData.getSelectedBubble().getKey());
-        assertBubbleNotificationSuppressedFromShade(mBubbleEntry2);
-
-        // Switch which bubble is expanded
-        mBubbleData.setSelectedBubble(mBubbleData.getBubbleInStackWithKey(
-                mRow.getKey()));
-        mBubbleData.setExpanded(true);
-        assertEquals(mRow.getKey(), mBubbleData.getBubbleInStackWithKey(
-                stackView.getExpandedBubble().getKey()).getKey());
-        assertBubbleNotificationSuppressedFromShade(mBubbleEntry);
-
-        // collapse for previous bubble
-        verify(mBubbleExpandListener, atLeastOnce()).onBubbleExpandChanged(
-                false, mRow2.getKey());
-        // expand for selected bubble
-        verify(mBubbleExpandListener, atLeastOnce()).onBubbleExpandChanged(
-                true, mRow.getKey());
-
-
-        // Collapse
-        mBubbleController.collapseStack();
-        assertStackCollapsed();
-        assertSysuiStates(false /* stackExpanded */, false /* mangeMenuExpanded */);
-    }
-
-    @Test
-    public void testExpansionRemovesShowInShadeAndDot() {
-        // Mark it as a bubble and add it explicitly
-        mEntryListener.onEntryAdded(mRow);
-        mBubbleController.updateBubble(mBubbleEntry);
-
-        // We should have bubbles & their notifs should not be suppressed
-        assertTrue(mBubbleController.hasBubbles());
-        assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
-
-        mTestableLooper.processAllMessages();
-        assertTrue(mBubbleData.getBubbleInStackWithKey(mRow.getKey()).showDot());
-
-        // Expand
-        mBubbleData.setExpanded(true);
-        assertStackExpanded();
-        verify(mBubbleExpandListener).onBubbleExpandChanged(true, mRow.getKey());
-        assertSysuiStates(true /* stackExpanded */, false /* mangeMenuExpanded */);
-
-        // Notif is suppressed after expansion
-        assertBubbleNotificationSuppressedFromShade(mBubbleEntry);
-        // Notif shouldn't show dot after expansion
-        assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getKey()).showDot());
-    }
-
-    @Test
-    public void testUpdateWhileExpanded_DoesntChangeShowInShadeAndDot() {
-        // Mark it as a bubble and add it explicitly
-        mEntryListener.onEntryAdded(mRow);
-        mBubbleController.updateBubble(mBubbleEntry);
-
-        // We should have bubbles & their notifs should not be suppressed
-        assertTrue(mBubbleController.hasBubbles());
-        assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
-
-        mTestableLooper.processAllMessages();
-        assertTrue(mBubbleData.getBubbleInStackWithKey(mRow.getKey()).showDot());
-
-        // Expand
-        mBubbleData.setExpanded(true);
-        assertStackExpanded();
-        verify(mBubbleExpandListener).onBubbleExpandChanged(true, mRow.getKey());
-        assertSysuiStates(true /* stackExpanded */, false /* mangeMenuExpanded */);
-
-        // Notif is suppressed after expansion
-        assertBubbleNotificationSuppressedFromShade(mBubbleEntry);
-        // Notif shouldn't show dot after expansion
-        assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getKey()).showDot());
-
-        // Send update
-        mEntryListener.onEntryUpdated(mRow);
-
-        // Nothing should have changed
-        // Notif is suppressed after expansion
-        assertBubbleNotificationSuppressedFromShade(mBubbleEntry);
-        // Notif shouldn't show dot after expansion
-        assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getKey()).showDot());
-    }
-
-    @Test
-    public void testRemoveLastExpanded_collapses() {
-        // Mark it as a bubble and add it explicitly
-        mEntryListener.onEntryAdded(mRow);
-        mEntryListener.onEntryAdded(mRow2);
-        mBubbleController.updateBubble(mBubbleEntry);
-        mBubbleController.updateBubble(mBubbleEntry2);
-
-        // Expand
-        BubbleStackView stackView = mBubbleController.getStackView();
-        mBubbleData.setExpanded(true);
-
-        assertSysuiStates(true /* stackExpanded */, false /* mangeMenuExpanded */);
-
-        assertStackExpanded();
-        verify(mBubbleExpandListener).onBubbleExpandChanged(true, mRow2.getKey());
-
-        // Last added is the one that is expanded
-        assertEquals(mRow2.getKey(), mBubbleData.getBubbleInStackWithKey(
-                stackView.getExpandedBubble().getKey()).getKey());
-        assertBubbleNotificationSuppressedFromShade(mBubbleEntry2);
-
-        // Dismiss currently expanded
-        mBubbleController.removeBubble(
-                mBubbleData.getBubbleInStackWithKey(
-                        stackView.getExpandedBubble().getKey()).getKey(),
-                Bubbles.DISMISS_USER_GESTURE);
-        verify(mBubbleExpandListener).onBubbleExpandChanged(false, mRow2.getKey());
-
-        // Make sure first bubble is selected
-        assertEquals(mRow.getKey(), mBubbleData.getBubbleInStackWithKey(
-                stackView.getExpandedBubble().getKey()).getKey());
-        verify(mBubbleExpandListener).onBubbleExpandChanged(true, mRow.getKey());
-
-        // Dismiss that one
-        mBubbleController.removeBubble(
-                mBubbleData.getBubbleInStackWithKey(
-                        stackView.getExpandedBubble().getKey()).getKey(),
-                Bubbles.DISMISS_USER_GESTURE);
-
-        // We should be collapsed
-        verify(mBubbleExpandListener).onBubbleExpandChanged(false, mRow.getKey());
-        assertFalse(mBubbleController.hasBubbles());
-        assertSysuiStates(false /* stackExpanded */, false /* mangeMenuExpanded */);
-    }
-
-    @Test
-    public void testRemoveLastExpandedEmptyOverflow_collapses() {
-        // Mark it as a bubble and add it explicitly
-        mEntryListener.onEntryAdded(mRow);
-        mBubbleController.updateBubble(mBubbleEntry);
-
-        // Expand
-        BubbleStackView stackView = mBubbleController.getStackView();
-        mBubbleData.setExpanded(true);
-
-        assertSysuiStates(true /* stackExpanded */, false /* mangeMenuExpanded */);
-        assertStackExpanded();
-        verify(mBubbleExpandListener).onBubbleExpandChanged(true, mRow.getKey());
-
-        // Block the bubble so it won't be in the overflow
-        mBubbleController.removeBubble(
-                mBubbleData.getBubbleInStackWithKey(
-                        stackView.getExpandedBubble().getKey()).getKey(),
-                Bubbles.DISMISS_BLOCKED);
-
-        verify(mBubbleExpandListener).onBubbleExpandChanged(false, mRow.getKey());
-
-        // We should be collapsed
-        verify(mBubbleExpandListener).onBubbleExpandChanged(false, mRow.getKey());
-        assertFalse(mBubbleController.hasBubbles());
-        assertSysuiStates(false /* stackExpanded */, false /* mangeMenuExpanded */);
-    }
-
-
-    @Test
-    public void testAutoExpand_fails_noFlag() {
-        assertStackCollapsed();
-        setMetadataFlags(mRow,
-                Notification.BubbleMetadata.FLAG_AUTO_EXPAND_BUBBLE, false /* enableFlag */);
-
-        // Add the auto expand bubble
-        mEntryListener.onEntryAdded(mRow);
-        mBubbleController.updateBubble(mBubbleEntry);
-
-        // Expansion shouldn't change
-        verify(mBubbleExpandListener, never()).onBubbleExpandChanged(false /* expanded */,
-                mRow.getKey());
-        assertStackCollapsed();
-        assertSysuiStates(false /* stackExpanded */, false /* mangeMenuExpanded */);
-    }
-
-    @Test
-    public void testAutoExpand_succeeds_withFlag() {
-        setMetadataFlags(mRow,
-                Notification.BubbleMetadata.FLAG_AUTO_EXPAND_BUBBLE, true /* enableFlag */);
-
-        // Add the auto expand bubble
-        mEntryListener.onEntryAdded(mRow);
-        mBubbleController.updateBubble(mBubbleEntry);
-
-        // Expansion should change
-        verify(mBubbleExpandListener).onBubbleExpandChanged(true /* expanded */,
-                mRow.getKey());
-        assertStackExpanded();
-        assertSysuiStates(true /* stackExpanded */, false /* mangeMenuExpanded */);
-    }
-
-    @Test
-    public void testSuppressNotif_onInitialNotif() {
-        setMetadataFlags(mRow,
-                Notification.BubbleMetadata.FLAG_SUPPRESS_NOTIFICATION, true /* enableFlag */);
-
-        // Add the suppress notif bubble
-        mEntryListener.onEntryAdded(mRow);
-        mBubbleController.updateBubble(mBubbleEntry);
-
-        // Notif should be suppressed because we were foreground
-        assertBubbleNotificationSuppressedFromShade(mBubbleEntry);
-        // Dot + flyout is hidden because notif is suppressed
-        assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getKey()).showDot());
-        assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getKey()).showFlyout());
-        assertSysuiStates(false /* stackExpanded */, false /* mangeMenuExpanded */);
-    }
-
-    @Test
-    public void testSuppressNotif_onUpdateNotif() {
-        mBubbleController.updateBubble(mBubbleEntry);
-
-        // Should not be suppressed
-        assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
-        // Should show dot
-        assertTrue(mBubbleData.getBubbleInStackWithKey(mRow.getKey()).showDot());
-
-        // Update to suppress notif
-        setMetadataFlags(mRow,
-                Notification.BubbleMetadata.FLAG_SUPPRESS_NOTIFICATION, true /* enableFlag */);
-        mBubbleController.updateBubble(mBubbleEntry);
-
-        // Notif should be suppressed
-        assertBubbleNotificationSuppressedFromShade(mBubbleEntry);
-        // Dot + flyout is hidden because notif is suppressed
-        assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getKey()).showDot());
-        assertFalse(mBubbleData.getBubbleInStackWithKey(mRow.getKey()).showFlyout());
-        assertSysuiStates(false /* stackExpanded */, false /* mangeMenuExpanded */);
-    }
-
-    @Test
-    public void testMarkNewNotificationAsShowInShade() {
-        mEntryListener.onEntryAdded(mRow);
-        assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
-
-        mTestableLooper.processAllMessages();
-        assertTrue(mBubbleData.getBubbleInStackWithKey(mRow.getKey()).showDot());
-    }
-
-    @Test
-    public void testAddNotif_notBubble() {
-        mEntryListener.onEntryAdded(mNonBubbleNotifRow.getEntry());
-        mEntryListener.onEntryUpdated(mNonBubbleNotifRow.getEntry());
-
-        assertThat(mBubbleController.hasBubbles()).isFalse();
-    }
-
-    @Test
-    public void testDeleteIntent_removeBubble_aged() throws PendingIntent.CanceledException {
-        mBubbleController.updateBubble(mBubbleEntry);
-        mBubbleController.removeBubble(mRow.getKey(), Bubbles.DISMISS_AGED);
-        verify(mDeleteIntent, never()).send();
-    }
-
-    @Test
-    public void testDeleteIntent_removeBubble_user() throws PendingIntent.CanceledException {
-        mBubbleController.updateBubble(mBubbleEntry);
-        mBubbleController.removeBubble(
-                mRow.getKey(), Bubbles.DISMISS_USER_GESTURE);
-        verify(mDeleteIntent, times(1)).send();
-    }
-
-    @Test
-    public void testDeleteIntent_dismissStack() throws PendingIntent.CanceledException {
-        mBubbleController.updateBubble(mBubbleEntry);
-        mBubbleController.updateBubble(mBubbleEntry2);
-        mBubbleData.dismissAll(Bubbles.DISMISS_USER_GESTURE);
-        verify(mDeleteIntent, times(2)).send();
-    }
-
-    @Test
-    public void testRemoveBubble_noLongerBubbleAfterUpdate()
-            throws PendingIntent.CanceledException {
-        mBubbleController.updateBubble(mBubbleEntry);
-        assertTrue(mBubbleController.hasBubbles());
-
-        mRow.getSbn().getNotification().flags &= ~FLAG_BUBBLE;
-        NotificationListenerService.Ranking ranking = new RankingBuilder(
-                mRow.getRanking()).setCanBubble(false).build();
-        mRow.setRanking(ranking);
-        mEntryListener.onEntryUpdated(mRow);
-
-        assertFalse(mBubbleController.hasBubbles());
-        verify(mDeleteIntent, never()).send();
-    }
-
-    @Test
-    public void testRemoveBubble_entryListenerRemove() {
-        mEntryListener.onEntryAdded(mRow);
-        mBubbleController.updateBubble(mBubbleEntry);
-
-        assertTrue(mBubbleController.hasBubbles());
-
-        // Removes the notification
-        mEntryListener.onEntryRemoved(mRow, REASON_APP_CANCEL);
-        assertFalse(mBubbleController.hasBubbles());
-    }
-
-    @Test
-    public void removeBubble_intercepted() {
-        mEntryListener.onEntryAdded(mRow);
-        mBubbleController.updateBubble(mBubbleEntry);
-
-        assertTrue(mBubbleController.hasBubbles());
-        assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
-
-        boolean intercepted = mBubblesManager.handleDismissalInterception(mRow);
-
-        // Intercept!
-        assertTrue(intercepted);
-        // Should update show in shade state
-        assertBubbleNotificationSuppressedFromShade(mBubbleEntry);
-    }
-
-    @Test
-    public void removeBubble_dismissIntoOverflow_intercepted() {
-        mEntryListener.onEntryAdded(mRow);
-        mBubbleController.updateBubble(mBubbleEntry);
-
-        assertTrue(mBubbleController.hasBubbles());
-        assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
-
-        // Dismiss the bubble
-        mBubbleController.removeBubble(mRow.getKey(), Bubbles.DISMISS_USER_GESTURE);
-        assertFalse(mBubbleController.hasBubbles());
-
-        // Dismiss the notification
-        boolean intercepted = mBubblesManager.handleDismissalInterception(mRow);
-
-        // Intercept dismissal since bubble is going into overflow
-        assertTrue(intercepted);
-    }
-
-    @Test
-    public void removeBubble_notIntercepted() {
-        mEntryListener.onEntryAdded(mRow);
-        mBubbleController.updateBubble(mBubbleEntry);
-
-        assertTrue(mBubbleController.hasBubbles());
-        assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
-
-        // Dismiss the bubble
-        mBubbleController.removeBubble(mRow.getKey(), Bubbles.DISMISS_NOTIF_CANCEL);
-        assertFalse(mBubbleController.hasBubbles());
-
-        // Dismiss the notification
-        boolean intercepted = mBubblesManager.handleDismissalInterception(mRow);
-
-        // Not a bubble anymore so we don't intercept dismissal.
-        assertFalse(intercepted);
-    }
-
-    @Test
-    public void testNotifyShadeSuppressionChange_notificationDismiss() {
-        mEntryListener.onEntryAdded(mRow);
-
-        assertTrue(mBubbleController.hasBubbles());
-        assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
-
-        mBubblesManager.handleDismissalInterception(mRow);
-
-        // Should update show in shade state
-        assertBubbleNotificationSuppressedFromShade(mBubbleEntry);
-
-        // Should notify delegate that shade state changed
-        verify(mBubbleController).onBubbleMetadataFlagChanged(
-                mBubbleData.getBubbleInStackWithKey(mRow.getKey()));
-    }
-
-    @Test
-    public void testNotifyShadeSuppressionChange_bubbleExpanded() {
-        mEntryListener.onEntryAdded(mRow);
-
-        assertTrue(mBubbleController.hasBubbles());
-        assertBubbleNotificationNotSuppressedFromShade(mBubbleEntry);
-
-        mBubbleData.setExpanded(true);
-
-        // Once a bubble is expanded the notif is suppressed
-        assertBubbleNotificationSuppressedFromShade(mBubbleEntry);
-
-        // Should notify delegate that shade state changed
-        verify(mBubbleController).onBubbleMetadataFlagChanged(
-                mBubbleData.getBubbleInStackWithKey(mRow.getKey()));
-    }
-
-    @Test
-    public void testBubbleSummaryDismissal_suppressesSummaryAndBubbleFromShade() throws Exception {
-        // GIVEN a group summary with a bubble child
-        ExpandableNotificationRow groupSummary = mNotificationTestHelper.createGroup(0);
-        ExpandableNotificationRow groupedBubble = mNotificationTestHelper.createBubbleInGroup();
-        mEntryListener.onEntryAdded(groupedBubble.getEntry());
-        when(mCommonNotifCollection.getEntry(groupedBubble.getEntry().getKey()))
-                .thenReturn(groupedBubble.getEntry());
-        groupSummary.addChildNotification(groupedBubble);
-        assertTrue(mBubbleData.hasBubbleInStackWithKey(groupedBubble.getEntry().getKey()));
-
-        // WHEN the summary is dismissed
-        mBubblesManager.handleDismissalInterception(groupSummary.getEntry());
-
-        // THEN the summary and bubbled child are suppressed from the shade
-        assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(
-                groupedBubble.getEntry().getKey(),
-                groupedBubble.getEntry().getSbn().getGroupKey()));
-        assertTrue(mBubbleController.getImplCachedState().isBubbleNotificationSuppressedFromShade(
-                groupedBubble.getEntry().getKey(),
-                groupedBubble.getEntry().getSbn().getGroupKey()));
-        assertTrue(mBubbleData.isSummarySuppressed(groupSummary.getEntry().getSbn().getGroupKey()));
-    }
-
-    @Test
-    public void testAppRemovesSummary_removesAllBubbleChildren() throws Exception {
-        // GIVEN a group summary with a bubble child
-        ExpandableNotificationRow groupSummary = mNotificationTestHelper.createGroup(0);
-        ExpandableNotificationRow groupedBubble = mNotificationTestHelper.createBubbleInGroup();
-        mEntryListener.onEntryAdded(groupedBubble.getEntry());
-        when(mCommonNotifCollection.getEntry(groupedBubble.getEntry().getKey()))
-                .thenReturn(groupedBubble.getEntry());
-        groupSummary.addChildNotification(groupedBubble);
-        assertTrue(mBubbleData.hasBubbleInStackWithKey(groupedBubble.getEntry().getKey()));
-
-        // GIVEN the summary is dismissed
-        mBubblesManager.handleDismissalInterception(groupSummary.getEntry());
-
-        // WHEN the summary is cancelled by the app
-        mEntryListener.onEntryRemoved(groupSummary.getEntry(), REASON_APP_CANCEL);
-
-        // THEN the summary and its children are removed from bubble data
-        assertFalse(mBubbleData.hasBubbleInStackWithKey(groupedBubble.getEntry().getKey()));
-        assertFalse(mBubbleData.isSummarySuppressed(
-                groupSummary.getEntry().getSbn().getGroupKey()));
-    }
-
-    @Test
-    public void testSummaryDismissalMarksBubblesHiddenFromShadeAndDismissesNonBubbledChildren()
-            throws Exception {
-        // GIVEN a group summary with two (non-bubble) children and one bubble child
-        ExpandableNotificationRow groupSummary = mNotificationTestHelper.createGroup(2);
-        ExpandableNotificationRow groupedBubble = mNotificationTestHelper.createBubbleInGroup();
-        mEntryListener.onEntryAdded(groupedBubble.getEntry());
-        when(mCommonNotifCollection.getEntry(groupedBubble.getEntry().getKey()))
-                .thenReturn(groupedBubble.getEntry());
-        groupSummary.addChildNotification(groupedBubble);
-
-        // WHEN the summary is dismissed
-        mBubblesManager.handleDismissalInterception(groupSummary.getEntry());
-
-        // THEN only the NON-bubble children are dismissed
-        List<ExpandableNotificationRow> childrenRows = groupSummary.getAttachedChildren();
-        verify(mNotifCallback, times(1)).removeNotification(
-                eq(childrenRows.get(0).getEntry()), any(), eq(REASON_GROUP_SUMMARY_CANCELED));
-        verify(mNotifCallback, times(1)).removeNotification(
-                eq(childrenRows.get(1).getEntry()), any(), eq(REASON_GROUP_SUMMARY_CANCELED));
-        verify(mNotifCallback, never()).removeNotification(eq(groupedBubble.getEntry()),
-                any(), anyInt());
-
-        // THEN the bubble child still exists as a bubble and is suppressed from the shade
-        assertTrue(mBubbleData.hasBubbleInStackWithKey(groupedBubble.getEntry().getKey()));
-        assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(
-                groupedBubble.getEntry().getKey(),
-                groupedBubble.getEntry().getSbn().getGroupKey()));
-        assertTrue(mBubbleController.getImplCachedState().isBubbleNotificationSuppressedFromShade(
-                groupedBubble.getEntry().getKey(),
-                groupedBubble.getEntry().getSbn().getGroupKey()));
-
-        // THEN the summary is also suppressed from the shade
-        assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(
-                groupSummary.getEntry().getKey(),
-                groupSummary.getEntry().getSbn().getGroupKey()));
-        assertTrue(mBubbleController.getImplCachedState().isBubbleNotificationSuppressedFromShade(
-                groupSummary.getEntry().getKey(),
-                groupSummary.getEntry().getSbn().getGroupKey()));
-    }
-
-
-    /**
-     * Verifies that when the user changes, the bubbles in the overflow list is cleared. Doesn't
-     * test the loading from the repository which would be a nice thing to add.
-     */
-    @Test
-    public void testOnUserChanged_overflowState() {
-        int firstUserId = mBubbleEntry.getStatusBarNotification().getUser().getIdentifier();
-        int secondUserId = mBubbleEntryUser11.getStatusBarNotification().getUser().getIdentifier();
-
-        mBubbleController.updateBubble(mBubbleEntry);
-        mBubbleController.updateBubble(mBubbleEntry2);
-        assertTrue(mBubbleController.hasBubbles());
-        mBubbleData.dismissAll(Bubbles.DISMISS_USER_GESTURE);
-
-        // Verify these are in the overflow
-        assertThat(mBubbleData.getOverflowBubbleWithKey(mBubbleEntry.getKey())).isNotNull();
-        assertThat(mBubbleData.getOverflowBubbleWithKey(mBubbleEntry2.getKey())).isNotNull();
-
-        // Switch users
-        mBubbleController.onUserChanged(secondUserId);
-        assertThat(mBubbleData.getOverflowBubbles()).isEmpty();
-
-        // Give this user some bubbles
-        mBubbleController.updateBubble(mBubbleEntryUser11);
-        mBubbleController.updateBubble(mBubbleEntry2User11);
-        assertTrue(mBubbleController.hasBubbles());
-        mBubbleData.dismissAll(Bubbles.DISMISS_USER_GESTURE);
-
-        // Verify these are in the overflow
-        assertThat(mBubbleData.getOverflowBubbleWithKey(mBubbleEntryUser11.getKey())).isNotNull();
-        assertThat(mBubbleData.getOverflowBubbleWithKey(mBubbleEntry2User11.getKey())).isNotNull();
-
-        // Would have loaded bubbles twice because of user switch
-        verify(mDataRepository, times(2)).loadBubbles(anyInt(), any());
-    }
-
-    /**
-     * Verifies we only load the overflow data once.
-     */
-    @Test
-    public void testOverflowLoadedOnce() {
-        // XXX
-        when(mCommonNotifCollection.getEntry(mRow.getKey())).thenReturn(mRow);
-        when(mCommonNotifCollection.getEntry(mRow2.getKey())).thenReturn(mRow2);
-
-        mEntryListener.onEntryAdded(mRow);
-        mEntryListener.onEntryAdded(mRow2);
-        mBubbleData.dismissAll(Bubbles.DISMISS_USER_GESTURE);
-        assertThat(mBubbleData.getOverflowBubbles()).isNotEmpty();
-
-        mEntryListener.onEntryRemoved(mRow, REASON_APP_CANCEL);
-        mEntryListener.onEntryRemoved(mRow2, REASON_APP_CANCEL);
-        assertThat(mBubbleData.getOverflowBubbles()).isEmpty();
-
-        verify(mDataRepository, times(1)).loadBubbles(anyInt(), any());
-    }
-
-    /**
-     * Verifies that shortcut deletions triggers that bubble being removed from XML.
-     */
-    @Test
-    public void testDeleteShortcutsDeletesXml() throws Exception {
-        ExpandableNotificationRow row = mNotificationTestHelper.createShortcutBubble("shortcutId");
-        BubbleEntry shortcutBubbleEntry = BubblesManager.notifToBubbleEntry(row.getEntry());
-        mBubbleController.updateBubble(shortcutBubbleEntry);
-
-        mBubbleData.dismissBubbleWithKey(shortcutBubbleEntry.getKey(),
-                Bubbles.DISMISS_SHORTCUT_REMOVED);
-
-        verify(mDataRepository, atLeastOnce()).removeBubbles(anyInt(), mBubbleListCaptor.capture());
-        assertThat(mBubbleListCaptor.getValue().get(0).getKey()).isEqualTo(
-                shortcutBubbleEntry.getKey());
-    }
-
-    @Test
-    public void testShowManageMenuChangesSysuiState() {
-        mBubbleController.updateBubble(mBubbleEntry);
-        assertTrue(mBubbleController.hasBubbles());
-
-        // Expand the stack
-        BubbleStackView stackView = mBubbleController.getStackView();
-        mBubbleData.setExpanded(true);
-        assertStackExpanded();
-        assertSysuiStates(true /* stackExpanded */, false /* mangeMenuExpanded */);
-
-        // Show the menu
-        stackView.showManageMenu(true);
-        assertSysuiStates(true /* stackExpanded */, true /* mangeMenuExpanded */);
-    }
-
-    @Test
-    public void testHideManageMenuChangesSysuiState() {
-        mBubbleController.updateBubble(mBubbleEntry);
-        assertTrue(mBubbleController.hasBubbles());
-
-        // Expand the stack
-        BubbleStackView stackView = mBubbleController.getStackView();
-        mBubbleData.setExpanded(true);
-        assertStackExpanded();
-        assertSysuiStates(true /* stackExpanded */, false /* mangeMenuExpanded */);
-
-        // Show the menu
-        stackView.showManageMenu(true);
-        assertSysuiStates(true /* stackExpanded */, true /* mangeMenuExpanded */);
-
-        // Hide the menu
-        stackView.showManageMenu(false);
-        assertSysuiStates(true /* stackExpanded */, false /* mangeMenuExpanded */);
-    }
-
-    @Test
-    public void testCollapseBubbleManageMenuChangesSysuiState() {
-        mBubbleController.updateBubble(mBubbleEntry);
-        assertTrue(mBubbleController.hasBubbles());
-
-        // Expand the stack
-        BubbleStackView stackView = mBubbleController.getStackView();
-        mBubbleData.setExpanded(true);
-        assertStackExpanded();
-        assertSysuiStates(true /* stackExpanded */, false /* mangeMenuExpanded */);
-
-        // Show the menu
-        stackView.showManageMenu(true);
-        assertSysuiStates(true /* stackExpanded */, true /* mangeMenuExpanded */);
-
-        // Collapse the stack
-        mBubbleData.setExpanded(false);
-
-        assertSysuiStates(false /* stackExpanded */, false /* mangeMenuExpanded */);
-    }
-
-    @Test
-    public void testNotificationChannelModified_channelUpdated_removesOverflowBubble()
-            throws Exception {
-        // Setup
-        ExpandableNotificationRow row = mNotificationTestHelper.createShortcutBubble("shortcutId");
-        NotificationEntry entry = row.getEntry();
-        entry.getChannel().setConversationId(
-                row.getEntry().getChannel().getParentChannelId(),
-                "shortcutId");
-        mBubbleController.updateBubble(BubblesManager.notifToBubbleEntry(row.getEntry()));
-        assertTrue(mBubbleController.hasBubbles());
-
-        // Overflow it
-        mBubbleData.dismissBubbleWithKey(entry.getKey(),
-                Bubbles.DISMISS_USER_GESTURE);
-        assertThat(mBubbleData.hasOverflowBubbleWithKey(entry.getKey())).isTrue();
-
-        // Test
-        entry.getChannel().setDeleted(true);
-        mBubbleController.onNotificationChannelModified(entry.getSbn().getPackageName(),
-                entry.getSbn().getUser(),
-                entry.getChannel(),
-                NOTIFICATION_CHANNEL_OR_GROUP_UPDATED);
-        assertThat(mBubbleData.hasOverflowBubbleWithKey(entry.getKey())).isFalse();
-    }
-
-    @Test
-    public void testNotificationChannelModified_channelDeleted_removesOverflowBubble()
-            throws Exception {
-        // Setup
-        ExpandableNotificationRow row = mNotificationTestHelper.createShortcutBubble("shortcutId");
-        NotificationEntry entry = row.getEntry();
-        entry.getChannel().setConversationId(
-                row.getEntry().getChannel().getParentChannelId(),
-                "shortcutId");
-        mBubbleController.updateBubble(BubblesManager.notifToBubbleEntry(row.getEntry()));
-        assertTrue(mBubbleController.hasBubbles());
-
-        // Overflow it
-        mBubbleData.dismissBubbleWithKey(entry.getKey(),
-                Bubbles.DISMISS_USER_GESTURE);
-        assertThat(mBubbleData.hasOverflowBubbleWithKey(entry.getKey())).isTrue();
-
-        // Test
-        entry.getChannel().setDeleted(true);
-        mBubbleController.onNotificationChannelModified(entry.getSbn().getPackageName(),
-                entry.getSbn().getUser(),
-                entry.getChannel(),
-                NOTIFICATION_CHANNEL_OR_GROUP_DELETED);
-        assertThat(mBubbleData.hasOverflowBubbleWithKey(entry.getKey())).isFalse();
-    }
-
-    @Test
-    public void testStackViewOnBackPressed_updatesBubbleDataExpandState() {
-        mBubbleController.updateBubble(mBubbleEntry);
-
-        // Expand the stack
-        mBubbleData.setExpanded(true);
-        assertStackExpanded();
-
-        // Hit back
-        BubbleStackView stackView = mBubbleController.getStackView();
-        stackView.onBackPressed();
-
-        // Make sure we're collapsed
-        assertStackCollapsed();
-    }
-
-
-    @Test
-    public void testRegisterUnregisterBroadcastListener() {
-        spyOn(mContext);
-        mBubbleController.updateBubble(mBubbleEntry);
-        verify(mContext).registerReceiver(mBroadcastReceiverArgumentCaptor.capture(),
-                mFilterArgumentCaptor.capture());
-        assertThat(mFilterArgumentCaptor.getValue().getAction(0)).isEqualTo(
-                Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
-        assertThat(mFilterArgumentCaptor.getValue().getAction(1)).isEqualTo(
-                Intent.ACTION_SCREEN_OFF);
-
-        mBubbleData.dismissBubbleWithKey(mBubbleEntry.getKey(), REASON_APP_CANCEL);
-        // TODO: not certain why this isn't called normally when tests are run, perhaps because
-        // it's after an animation in BSV. This calls BubbleController#removeFromWindowManagerMaybe
-        mBubbleController.onAllBubblesAnimatedOut();
-
-        verify(mContext).unregisterReceiver(eq(mBroadcastReceiverArgumentCaptor.getValue()));
-    }
-
-    @Test
-    public void testBroadcastReceiverCloseDialogs_notGestureNav() {
-        spyOn(mContext);
-        mBubbleController.updateBubble(mBubbleEntry);
-        mBubbleData.setExpanded(true);
-        verify(mContext).registerReceiver(mBroadcastReceiverArgumentCaptor.capture(),
-                mFilterArgumentCaptor.capture());
-        Intent i = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
-        mBroadcastReceiverArgumentCaptor.getValue().onReceive(mContext, i);
-
-        assertStackExpanded();
-    }
-
-    @Test
-    public void testBroadcastReceiverCloseDialogs_reasonGestureNav() {
-        spyOn(mContext);
-        mBubbleController.updateBubble(mBubbleEntry);
-        mBubbleData.setExpanded(true);
-
-        verify(mContext).registerReceiver(mBroadcastReceiverArgumentCaptor.capture(),
-                mFilterArgumentCaptor.capture());
-        Intent i = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
-        i.putExtra("reason", "gestureNav");
-        mBroadcastReceiverArgumentCaptor.getValue().onReceive(mContext, i);
-        assertStackCollapsed();
-    }
-
-    @Test
-    public void testBroadcastReceiver_screenOff() {
-        spyOn(mContext);
-        mBubbleController.updateBubble(mBubbleEntry);
-        mBubbleData.setExpanded(true);
-
-        verify(mContext).registerReceiver(mBroadcastReceiverArgumentCaptor.capture(),
-                mFilterArgumentCaptor.capture());
-
-        Intent i = new Intent(Intent.ACTION_SCREEN_OFF);
-        mBroadcastReceiverArgumentCaptor.getValue().onReceive(mContext, i);
-        assertStackCollapsed();
-    }
-
-    @Test
-    public void testOnStatusBarStateChanged() {
-        mBubbleController.updateBubble(mBubbleEntry);
-        mBubbleData.setExpanded(true);
-        assertStackExpanded();
-        BubbleStackView stackView = mBubbleController.getStackView();
-        assertThat(stackView.getVisibility()).isEqualTo(View.VISIBLE);
-
-        mBubbleController.onStatusBarStateChanged(false);
-
-        assertStackCollapsed();
-        assertThat(stackView.getVisibility()).isEqualTo(View.INVISIBLE);
-
-        mBubbleController.onStatusBarStateChanged(true);
-        assertThat(stackView.getVisibility()).isEqualTo(View.VISIBLE);
-    }
-
-    @Test
-    public void testSetShouldAutoExpand_notifiesFlagChanged() {
-        mBubbleController.updateBubble(mBubbleEntry);
-
-        assertTrue(mBubbleController.hasBubbles());
-        Bubble b = mBubbleData.getBubbleInStackWithKey(mBubbleEntry.getKey());
-        assertThat(b.shouldAutoExpand()).isFalse();
-
-        // Set it to the same thing
-        b.setShouldAutoExpand(false);
-
-        // Verify it doesn't notify
-        verify(mBubbleController, never()).onBubbleMetadataFlagChanged(any());
-
-        // Set it to something different
-        b.setShouldAutoExpand(true);
-        verify(mBubbleController).onBubbleMetadataFlagChanged(b);
-    }
-
-    @Test
-    public void testUpdateBubble_skipsDndSuppressListNotifs() {
-        mBubbleEntry = new BubbleEntry(mRow.getSbn(), mRow.getRanking(), mRow.isDismissable(),
-                mRow.shouldSuppressNotificationDot(), true /* DndSuppressNotifFromList */,
-                mRow.shouldSuppressPeek());
-        mBubbleEntry.getBubbleMetadata().setFlags(
-                Notification.BubbleMetadata.FLAG_AUTO_EXPAND_BUBBLE);
-
-        mBubbleController.updateBubble(mBubbleEntry);
-
-        Bubble b = mBubbleData.getPendingBubbleWithKey(mBubbleEntry.getKey());
-        assertThat(b.shouldAutoExpand()).isFalse();
-        assertThat(mBubbleData.getBubbleInStackWithKey(mBubbleEntry.getKey())).isNull();
-    }
-
-    @Test
-    public void testOnRankingUpdate_DndSuppressListNotif() {
-        // It's in the stack
-        mBubbleController.updateBubble(mBubbleEntry);
-        assertThat(mBubbleData.hasBubbleInStackWithKey(mBubbleEntry.getKey())).isTrue();
-
-        // Set current user profile
-        SparseArray<UserInfo> userInfos = new SparseArray<>();
-        userInfos.put(mBubbleEntry.getStatusBarNotification().getUser().getIdentifier(),
-                mock(UserInfo.class));
-        mBubbleController.onCurrentProfilesChanged(userInfos);
-
-        // Send ranking update that the notif is suppressed from the list.
-        HashMap<String, Pair<BubbleEntry, Boolean>> entryDataByKey = new HashMap<>();
-        mBubbleEntry = new BubbleEntry(mRow.getSbn(), mRow.getRanking(), mRow.isDismissable(),
-                mRow.shouldSuppressNotificationDot(), true /* DndSuppressNotifFromList */,
-                mRow.shouldSuppressPeek());
-        Pair<BubbleEntry, Boolean> pair = new Pair(mBubbleEntry, true);
-        entryDataByKey.put(mBubbleEntry.getKey(), pair);
-
-        NotificationListenerService.RankingMap rankingMap =
-                mock(NotificationListenerService.RankingMap.class);
-        when(rankingMap.getOrderedKeys()).thenReturn(new String[] { mBubbleEntry.getKey() });
-        mBubbleController.onRankingUpdated(rankingMap, entryDataByKey);
-
-        // Should no longer be in the stack
-        assertThat(mBubbleData.hasBubbleInStackWithKey(mBubbleEntry.getKey())).isFalse();
-    }
-
-    /**
-     * Sets the bubble metadata flags for this entry. These flags are normally set by
-     * NotificationManagerService when the notification is sent, however, these tests do not
-     * go through that path so we set them explicitly when testing.
-     */
-    private void setMetadataFlags(NotificationEntry entry, int flag, boolean enableFlag) {
-        Notification.BubbleMetadata bubbleMetadata =
-                entry.getSbn().getNotification().getBubbleMetadata();
-        int flags = bubbleMetadata.getFlags();
-        if (enableFlag) {
-            flags |= flag;
-        } else {
-            flags &= ~flag;
-        }
-        bubbleMetadata.setFlags(flags);
-    }
-
-    /**
-     * Asserts that the bubble stack is expanded and also validates the cached state is updated.
-     */
-    private void assertStackExpanded() {
-        assertTrue(mBubbleController.isStackExpanded());
-        assertTrue(mBubbleController.getImplCachedState().isStackExpanded());
-    }
-
-    /**
-     * Asserts that the bubble stack is collapsed and also validates the cached state is updated.
-     */
-    private void assertStackCollapsed() {
-        assertFalse(mBubbleController.isStackExpanded());
-        assertFalse(mBubbleController.getImplCachedState().isStackExpanded());
-    }
-
-    /**
-     * Asserts that a bubble notification is suppressed from the shade and also validates the cached
-     * state is updated.
-     */
-    private void assertBubbleNotificationSuppressedFromShade(BubbleEntry entry) {
-        assertTrue(mBubbleController.isBubbleNotificationSuppressedFromShade(
-                entry.getKey(), entry.getGroupKey()));
-        assertTrue(mBubbleController.getImplCachedState().isBubbleNotificationSuppressedFromShade(
-                entry.getKey(), entry.getGroupKey()));
-    }
-
-    /**
-     * Asserts that a bubble notification is not suppressed from the shade and also validates the
-     * cached state is updated.
-     */
-    private void assertBubbleNotificationNotSuppressedFromShade(BubbleEntry entry) {
-        assertFalse(mBubbleController.isBubbleNotificationSuppressedFromShade(
-                entry.getKey(), entry.getGroupKey()));
-        assertFalse(mBubbleController.getImplCachedState().isBubbleNotificationSuppressedFromShade(
-                entry.getKey(), entry.getGroupKey()));
-    }
-
-    /**
-     * Asserts that the system ui states associated to bubbles are in the correct state.
-     */
-    private void assertSysuiStates(boolean stackExpanded, boolean manageMenuExpanded) {
-        assertThat(mSysUiStateBubblesExpanded).isEqualTo(stackExpanded);
-        assertThat(mSysUiStateBubblesManageMenuExpanded).isEqualTo(manageMenuExpanded);
-    }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/wmshell/TestableBubbleController.java b/packages/SystemUI/tests/src/com/android/systemui/wmshell/TestableBubbleController.java
index 17e5778..880ad187 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/wmshell/TestableBubbleController.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/wmshell/TestableBubbleController.java
@@ -38,6 +38,8 @@
 import com.android.wm.shell.common.TaskStackListenerImpl;
 import com.android.wm.shell.draganddrop.DragAndDropController;
 import com.android.wm.shell.onehanded.OneHandedController;
+import com.android.wm.shell.sysui.ShellController;
+import com.android.wm.shell.sysui.ShellInit;
 
 import java.util.Optional;
 
@@ -48,6 +50,8 @@
 
     // Let's assume surfaces can be synchronized immediately.
     TestableBubbleController(Context context,
+            ShellInit shellInit,
+            ShellController shellController,
             BubbleData data,
             FloatingContentCoordinator floatingContentCoordinator,
             BubbleDataRepository dataRepository,
@@ -67,12 +71,13 @@
             Handler shellMainHandler,
             TaskViewTransitions taskViewTransitions,
             SyncTransactionQueue syncQueue) {
-        super(context, data, Runnable::run, floatingContentCoordinator, dataRepository,
-                statusBarService, windowManager, windowManagerShellWrapper, userManager,
-                launcherApps, bubbleLogger, taskStackListener, shellTaskOrganizer, positioner,
-                displayController, oneHandedOptional, dragAndDropController, shellMainExecutor,
-                shellMainHandler, new SyncExecutor(), taskViewTransitions, syncQueue);
+        super(context, shellInit, shellController, data, Runnable::run, floatingContentCoordinator,
+                dataRepository, statusBarService, windowManager, windowManagerShellWrapper,
+                userManager, launcherApps, bubbleLogger, taskStackListener, shellTaskOrganizer,
+                positioner, displayController, oneHandedOptional, dragAndDropController,
+                shellMainExecutor, shellMainHandler, new SyncExecutor(), taskViewTransitions,
+                syncQueue);
         setInflateSynchronously(true);
-        initialize();
+        onInit();
     }
 }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/wmshell/TestableNotificationInterruptStateProviderImpl.java b/packages/SystemUI/tests/src/com/android/systemui/wmshell/TestableNotificationInterruptStateProviderImpl.java
index a7f0dc2..9635faf 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/wmshell/TestableNotificationInterruptStateProviderImpl.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/wmshell/TestableNotificationInterruptStateProviderImpl.java
@@ -24,12 +24,12 @@
 
 import com.android.systemui.plugins.statusbar.StatusBarStateController;
 import com.android.systemui.statusbar.notification.NotifPipelineFlags;
-import com.android.systemui.statusbar.notification.NotificationFilter;
 import com.android.systemui.statusbar.notification.interruption.KeyguardNotificationVisibilityProvider;
 import com.android.systemui.statusbar.notification.interruption.NotificationInterruptLogger;
 import com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProviderImpl;
 import com.android.systemui.statusbar.policy.BatteryController;
 import com.android.systemui.statusbar.policy.HeadsUpManager;
+import com.android.systemui.statusbar.policy.KeyguardStateController;
 
 public class TestableNotificationInterruptStateProviderImpl
         extends NotificationInterruptStateProviderImpl {
@@ -39,8 +39,8 @@
             PowerManager powerManager,
             IDreamManager dreamManager,
             AmbientDisplayConfiguration ambientDisplayConfiguration,
-            NotificationFilter filter,
             StatusBarStateController statusBarStateController,
+            KeyguardStateController keyguardStateController,
             BatteryController batteryController,
             HeadsUpManager headsUpManager,
             NotificationInterruptLogger logger,
@@ -51,9 +51,9 @@
                 powerManager,
                 dreamManager,
                 ambientDisplayConfiguration,
-                filter,
                 batteryController,
                 statusBarStateController,
+                keyguardStateController,
                 headsUpManager,
                 logger,
                 mainHandler,
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 185942e..9c21366 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/wmshell/WMShellTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/wmshell/WMShellTest.java
@@ -24,27 +24,22 @@
 import androidx.test.runner.AndroidJUnit4;
 
 import com.android.keyguard.KeyguardUpdateMonitor;
-import com.android.keyguard.KeyguardUpdateMonitorCallback;
 import com.android.systemui.SysuiTestCase;
 import com.android.systemui.keyguard.ScreenLifecycle;
 import com.android.systemui.keyguard.WakefulnessLifecycle;
 import com.android.systemui.model.SysUiState;
-import com.android.systemui.navigationbar.NavigationModeController;
 import com.android.systemui.statusbar.CommandQueue;
 import com.android.systemui.statusbar.policy.ConfigurationController;
 import com.android.systemui.statusbar.policy.KeyguardStateController;
 import com.android.systemui.statusbar.policy.UserInfoController;
 import com.android.systemui.tracing.ProtoTracer;
-import com.android.wm.shell.ShellCommandHandler;
 import com.android.wm.shell.common.ShellExecutor;
-import com.android.wm.shell.compatui.CompatUI;
-import com.android.wm.shell.draganddrop.DragAndDrop;
-import com.android.wm.shell.hidedisplaycutout.HideDisplayCutout;
 import com.android.wm.shell.onehanded.OneHanded;
 import com.android.wm.shell.onehanded.OneHandedEventCallback;
 import com.android.wm.shell.onehanded.OneHandedTransitionCallback;
 import com.android.wm.shell.pip.Pip;
 import com.android.wm.shell.splitscreen.SplitScreen;
+import com.android.wm.shell.sysui.ShellInterface;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -65,36 +60,30 @@
 public class WMShellTest extends SysuiTestCase {
     WMShell mWMShell;
 
+    @Mock ShellInterface mShellInterface;
     @Mock CommandQueue mCommandQueue;
     @Mock ConfigurationController mConfigurationController;
     @Mock KeyguardStateController mKeyguardStateController;
     @Mock KeyguardUpdateMonitor mKeyguardUpdateMonitor;
-    @Mock NavigationModeController mNavigationModeController;
     @Mock ScreenLifecycle mScreenLifecycle;
     @Mock SysUiState mSysUiState;
     @Mock Pip mPip;
     @Mock SplitScreen mSplitScreen;
     @Mock OneHanded mOneHanded;
-    @Mock HideDisplayCutout mHideDisplayCutout;
     @Mock WakefulnessLifecycle mWakefulnessLifecycle;
     @Mock ProtoTracer mProtoTracer;
-    @Mock ShellCommandHandler mShellCommandHandler;
-    @Mock CompatUI mCompatUI;
     @Mock UserInfoController mUserInfoController;
     @Mock ShellExecutor mSysUiMainExecutor;
-    @Mock DragAndDrop mDragAndDrop;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
 
-        mWMShell = new WMShell(mContext, Optional.of(mPip),
-                Optional.of(mSplitScreen), Optional.of(mOneHanded), Optional.of(mHideDisplayCutout),
-                Optional.of(mShellCommandHandler), Optional.of(mCompatUI),
-                Optional.of(mDragAndDrop),
-                mCommandQueue, mConfigurationController, mKeyguardStateController,
-                mKeyguardUpdateMonitor, mNavigationModeController, mScreenLifecycle, mSysUiState,
-                mProtoTracer, mWakefulnessLifecycle, mUserInfoController, mSysUiMainExecutor);
+        mWMShell = new WMShell(mContext, mShellInterface, Optional.of(mPip),
+                Optional.of(mSplitScreen), Optional.of(mOneHanded), mCommandQueue,
+                mConfigurationController, mKeyguardStateController, mKeyguardUpdateMonitor,
+                mScreenLifecycle, mSysUiState, mProtoTracer, mWakefulnessLifecycle,
+                mUserInfoController, mSysUiMainExecutor);
     }
 
     @Test
@@ -105,35 +94,12 @@
     }
 
     @Test
-    public void initSplitScreen_registersCallbacks() {
-        mWMShell.initSplitScreen(mSplitScreen);
-
-        verify(mKeyguardUpdateMonitor).registerCallback(any(KeyguardUpdateMonitorCallback.class));
-    }
-
-    @Test
     public void initOneHanded_registersCallbacks() {
         mWMShell.initOneHanded(mOneHanded);
 
-        verify(mKeyguardUpdateMonitor).registerCallback(any(KeyguardUpdateMonitorCallback.class));
         verify(mCommandQueue).addCallback(any(CommandQueue.Callbacks.class));
         verify(mScreenLifecycle).addObserver(any(ScreenLifecycle.Observer.class));
         verify(mOneHanded).registerTransitionCallback(any(OneHandedTransitionCallback.class));
         verify(mOneHanded).registerEventCallback(any(OneHandedEventCallback.class));
     }
-
-    @Test
-    public void initHideDisplayCutout_registersCallbacks() {
-        mWMShell.initHideDisplayCutout(mHideDisplayCutout);
-
-        verify(mConfigurationController).addCallback(
-                any(ConfigurationController.ConfigurationListener.class));
-    }
-
-    @Test
-    public void initCompatUI_registersCallbacks() {
-        mWMShell.initCompatUi(mCompatUI);
-
-        verify(mKeyguardStateController).addCallback(any(KeyguardStateController.Callback.class));
-    }
 }
diff --git a/packages/SystemUI/tests/utils/AndroidManifest.xml b/packages/SystemUI/tests/utils/AndroidManifest.xml
new file mode 100644
index 0000000..cbef5f6
--- /dev/null
+++ b/packages/SystemUI/tests/utils/AndroidManifest.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2022 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT 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.systemui.tests.utils">
+
+
+</manifest>
+
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiBaseFragmentTest.java b/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiBaseFragmentTest.java
new file mode 100644
index 0000000..9179efc
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiBaseFragmentTest.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+package com.android.systemui;
+
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.app.Fragment;
+import android.app.Instrumentation;
+import android.testing.BaseFragmentTest;
+import android.testing.DexmakerShareClassLoaderRule;
+
+import androidx.test.InstrumentationRegistry;
+
+import com.android.systemui.assist.AssistManager;
+import com.android.systemui.utils.leaks.LeakCheckedTest;
+import com.android.systemui.utils.leaks.LeakCheckedTest.SysuiLeakCheck;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.Rule;
+import org.mockito.Mockito;
+
+import java.util.concurrent.ExecutionException;
+
+public abstract class SysuiBaseFragmentTest extends BaseFragmentTest {
+
+    public static final Class<?>[] ALL_SUPPORTED_CLASSES = LeakCheckedTest.ALL_SUPPORTED_CLASSES;
+
+    @Rule
+    public final SysuiLeakCheck mLeakCheck = new SysuiLeakCheck();
+
+    @Rule
+    public final DexmakerShareClassLoaderRule mDexmakerShareClassLoaderRule =
+            new DexmakerShareClassLoaderRule();
+
+    protected TestableDependency mDependency;
+    protected SysuiTestableContext mSysuiContext;
+    private Instrumentation mRealInstrumentation;
+
+    public SysuiBaseFragmentTest(Class<? extends Fragment> cls) {
+        super(cls);
+    }
+
+    @Before
+    public void sysuiSetup() throws ExecutionException, InterruptedException {
+        SystemUIInitializer initializer =
+                SystemUIInitializerFactory.createFromConfigNoAssert(mContext);
+        initializer.init(true);
+        mDependency = new TestableDependency(initializer.getSysUIComponent().createDependency());
+        Dependency.setInstance(mDependency);
+
+        // TODO: Figure out another way to give reference to a SysuiTestableContext.
+        mSysuiContext = (SysuiTestableContext) mContext;
+
+        mRealInstrumentation = InstrumentationRegistry.getInstrumentation();
+        Instrumentation inst = spy(mRealInstrumentation);
+        when(inst.getContext()).thenThrow(new RuntimeException(
+                "SysUI Tests should use SysuiTestCase#getContext or SysuiTestCase#mContext"));
+        when(inst.getTargetContext()).thenThrow(new RuntimeException(
+                "SysUI Tests should use SysuiTestCase#getContext or SysuiTestCase#mContext"));
+        InstrumentationRegistry.registerInstance(inst, InstrumentationRegistry.getArguments());
+        mDependency.injectMockDependency(AssistManager.class);
+    }
+
+    @After
+    public void SysuiTeardown() {
+        InstrumentationRegistry.registerInstance(mRealInstrumentation,
+                InstrumentationRegistry.getArguments());
+    }
+
+    @AfterClass
+    public static void mockitoTeardown() {
+        Mockito.framework().clearInlineMocks();
+    }
+
+    @Override
+    protected SysuiTestableContext getContext() {
+        return new SysuiTestableContext(InstrumentationRegistry.getContext(), mLeakCheck);
+    }
+
+    public void injectLeakCheckedDependencies(Class<?>... cls) {
+        for (Class<?> c : cls) {
+            injectLeakCheckedDependency(c);
+        }
+    }
+
+    public <T> void injectLeakCheckedDependency(Class<T> c) {
+        mDependency.injectTestDependency(c, mLeakCheck.getLeakChecker(c));
+    }
+}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestCase.java b/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestCase.java
new file mode 100644
index 0000000..c83189d
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestCase.java
@@ -0,0 +1,258 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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;
+
+import static com.android.systemui.animation.FakeDialogLaunchAnimatorKt.fakeDialogLaunchAnimator;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.app.Instrumentation;
+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.TestableLooper;
+import android.util.Log;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.uiautomator.UiDevice;
+
+import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
+import com.android.systemui.animation.DialogLaunchAnimator;
+import com.android.systemui.broadcast.BroadcastDispatcher;
+import com.android.systemui.broadcast.FakeBroadcastDispatcher;
+import com.android.systemui.broadcast.logging.BroadcastDispatcherLogger;
+import com.android.systemui.classifier.FalsingManagerFake;
+import com.android.systemui.dump.DumpManager;
+import com.android.systemui.plugins.FalsingManager;
+import com.android.systemui.settings.UserTracker;
+import com.android.systemui.statusbar.SmartReplyController;
+import com.android.systemui.statusbar.phone.SystemUIDialogManager;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.Rule;
+import org.mockito.Mockito;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Future;
+
+/**
+ * Base class that does System UI specific setup.
+ */
+public abstract class SysuiTestCase {
+
+    private static final String TAG = "SysuiTestCase";
+
+    private Handler mHandler;
+    @Rule
+    public SysuiTestableContext mContext = new SysuiTestableContext(
+            InstrumentationRegistry.getContext(), getLeakCheck());
+    @Rule
+    public final DexmakerShareClassLoaderRule mDexmakerShareClassLoaderRule =
+            new DexmakerShareClassLoaderRule();
+    public TestableDependency mDependency;
+    private Instrumentation mRealInstrumentation;
+    private FakeBroadcastDispatcher mFakeBroadcastDispatcher;
+
+    @Before
+    public void SysuiSetup() throws Exception {
+        SystemUIInitializer initializer =
+                SystemUIInitializerFactory.createFromConfigNoAssert(mContext);
+        initializer.init(true);
+        mDependency = new TestableDependency(initializer.getSysUIComponent().createDependency());
+        Dependency.setInstance(mDependency);
+        mFakeBroadcastDispatcher = new FakeBroadcastDispatcher(mContext, mock(Looper.class),
+                mock(Executor.class), mock(DumpManager.class),
+                mock(BroadcastDispatcherLogger.class), mock(UserTracker.class));
+
+        mRealInstrumentation = InstrumentationRegistry.getInstrumentation();
+        Instrumentation inst = spy(mRealInstrumentation);
+        when(inst.getContext()).thenAnswer(invocation -> {
+            throw new RuntimeException(
+                    "SysUI Tests should use SysuiTestCase#getContext or SysuiTestCase#mContext");
+        });
+        when(inst.getTargetContext()).thenAnswer(invocation -> {
+            throw new RuntimeException(
+                    "SysUI Tests should use SysuiTestCase#getContext or SysuiTestCase#mContext");
+        });
+        InstrumentationRegistry.registerInstance(inst, InstrumentationRegistry.getArguments());
+        // Many tests end up creating a BroadcastDispatcher. Instead, give them a fake that will
+        // record receivers registered. They are not actually leaked as they are kept just as a weak
+        // reference and are never sent to the Context. This will also prevent a real
+        // BroadcastDispatcher from actually registering receivers.
+        mDependency.injectTestDependency(BroadcastDispatcher.class, mFakeBroadcastDispatcher);
+        // A lot of tests get the FalsingManager, often via several layers of indirection.
+        // None of them actually need it.
+        mDependency.injectTestDependency(FalsingManager.class, new FalsingManagerFake());
+        mDependency.injectMockDependency(KeyguardUpdateMonitor.class);
+
+        // A lot of tests get the LocalBluetoothManager, often via several layers of indirection.
+        // None of them actually need it.
+        mDependency.injectMockDependency(LocalBluetoothManager.class);
+
+        // Notifications tests are injecting one of these, causing many classes (including
+        // KeyguardUpdateMonitor to be created (injected).
+        // TODO(b/1531701009) Clean up NotificationContentView creation to prevent this
+        mDependency.injectMockDependency(SmartReplyController.class);
+
+        // Make sure that all tests on any SystemUIDialog does not crash because this dependency
+        // is missing (constructing the actual one would throw).
+        // TODO(b/219008720): Remove this.
+        mDependency.injectMockDependency(SystemUIDialogManager.class);
+        mDependency.injectTestDependency(DialogLaunchAnimator.class, fakeDialogLaunchAnimator());
+    }
+
+    @After
+    public void SysuiTeardown() {
+        InstrumentationRegistry.registerInstance(mRealInstrumentation,
+                InstrumentationRegistry.getArguments());
+        if (TestableLooper.get(this) != null) {
+            TestableLooper.get(this).processAllMessages();
+        }
+        disallowTestableLooperAsMainThread();
+        mContext.cleanUpReceivers(this.getClass().getSimpleName());
+        mFakeBroadcastDispatcher.cleanUpReceivers(this.getClass().getSimpleName());
+    }
+
+    @AfterClass
+    public static void mockitoTearDown() {
+        Mockito.framework().clearInlineMocks();
+    }
+
+    /**
+     * Tests are run on the TestableLooper; however, there are parts of SystemUI that assert that
+     * the code is run from the main looper. Therefore, we allow the TestableLooper to pass these
+     * assertions since in a test, the TestableLooper is essentially the MainLooper.
+     */
+    protected void allowTestableLooperAsMainThread() {
+        com.android.systemui.util.Assert.setTestableLooper(TestableLooper.get(this).getLooper());
+    }
+
+    protected void disallowTestableLooperAsMainThread() {
+        com.android.systemui.util.Assert.setTestableLooper(null);
+    }
+
+    protected LeakCheck getLeakCheck() {
+        return null;
+    }
+
+    protected FakeBroadcastDispatcher getFakeBroadcastDispatcher() {
+        return mFakeBroadcastDispatcher;
+    }
+
+    public SysuiTestableContext getContext() {
+        return mContext;
+    }
+
+    protected UiDevice getUiDevice() {
+        return UiDevice.getInstance(mRealInstrumentation);
+    }
+
+    protected void runShellCommand(String command) throws IOException {
+        ParcelFileDescriptor pfd = mRealInstrumentation.getUiAutomation()
+                .executeShellCommand(command);
+
+        // Read the input stream fully.
+        FileInputStream fis = new ParcelFileDescriptor.AutoCloseInputStream(pfd);
+        while (fis.read() != -1);
+        fis.close();
+    }
+
+    protected void waitForIdleSync() {
+        if (mHandler == null) {
+            mHandler = new Handler(Looper.getMainLooper());
+        }
+        waitForIdleSync(mHandler);
+    }
+
+    protected void waitForUiOffloadThread() {
+        Future<?> future = Dependency.get(UiOffloadThread.class).execute(() -> { });
+        try {
+            future.get();
+        } catch (InterruptedException | ExecutionException e) {
+            Log.e(TAG, "Failed to wait for ui offload thread.", e);
+        }
+    }
+
+    public static void waitForIdleSync(Handler h) {
+        validateThread(h.getLooper());
+        Idler idler = new Idler(null);
+        h.getLooper().getQueue().addIdleHandler(idler);
+        // Ensure we are non-idle, so the idle handler can run.
+        h.post(new EmptyRunnable());
+        idler.waitForIdle();
+    }
+
+    private static final void validateThread(Looper l) {
+        if (Looper.myLooper() == l) {
+            throw new RuntimeException(
+                "This method can not be called from the looper being synced");
+        }
+    }
+
+    /** Delegates to {@link android.testing.TestableResources#addOverride(int, Object)}. */
+    protected void overrideResource(int resourceId, Object value) {
+        mContext.getOrCreateTestableResources().addOverride(resourceId, value);
+    }
+
+    public static final class EmptyRunnable implements Runnable {
+        public void run() {
+        }
+    }
+
+    public static final class Idler implements MessageQueue.IdleHandler {
+        private final Runnable mCallback;
+        private boolean mIdle;
+
+        public Idler(Runnable callback) {
+            mCallback = callback;
+            mIdle = false;
+        }
+
+        @Override
+        public boolean queueIdle() {
+            if (mCallback != null) {
+                mCallback.run();
+            }
+            synchronized (this) {
+                mIdle = true;
+                notifyAll();
+            }
+            return false;
+        }
+
+        public void waitForIdle() {
+            synchronized (this) {
+                while (!mIdle) {
+                    try {
+                        wait();
+                    } catch (InterruptedException e) {
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/SysuiTestableContext.java b/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestableContext.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/SysuiTestableContext.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestableContext.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/TestableDependency.java b/packages/SystemUI/tests/utils/src/com/android/systemui/TestableDependency.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/TestableDependency.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/TestableDependency.java
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/animation/FakeDialogLaunchAnimator.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/animation/FakeDialogLaunchAnimator.kt
new file mode 100644
index 0000000..990db77
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/animation/FakeDialogLaunchAnimator.kt
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT 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.animation
+
+import com.android.internal.jank.InteractionJankMonitor
+import org.mockito.Mockito.mock
+
+/** A [DialogLaunchAnimator] to be used in tests. */
+@JvmOverloads
+fun fakeDialogLaunchAnimator(
+    isUnlocked: Boolean = true,
+    isShowingAlternateAuthOnUnlock: Boolean = false,
+    interactionJankMonitor: InteractionJankMonitor = mock(InteractionJankMonitor::class.java),
+): DialogLaunchAnimator {
+    return DialogLaunchAnimator(
+        FakeCallback(
+            isUnlocked = isUnlocked,
+            isShowingAlternateAuthOnUnlock = isShowingAlternateAuthOnUnlock,
+        ),
+        interactionJankMonitor,
+        fakeLaunchAnimator(),
+        isForTesting = true,
+    )
+}
+
+private class FakeCallback(
+    private val isDreaming: Boolean = false,
+    private val isUnlocked: Boolean = true,
+    private val isShowingAlternateAuthOnUnlock: Boolean = false,
+) : DialogLaunchAnimator.Callback {
+    override fun isDreaming(): Boolean = isDreaming
+    override fun isUnlocked(): Boolean = isUnlocked
+    override fun isShowingAlternateAuthOnUnlock() = isShowingAlternateAuthOnUnlock
+}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/animation/FakeLaunchAnimator.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/animation/FakeLaunchAnimator.kt
new file mode 100644
index 0000000..5b431e7
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/animation/FakeLaunchAnimator.kt
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT 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.animation
+
+/** A [LaunchAnimator] to be used in tests. */
+fun fakeLaunchAnimator(): LaunchAnimator {
+    return LaunchAnimator(TEST_TIMINGS, TEST_INTERPOLATORS)
+}
+
+/**
+ * A [LaunchAnimator.Timings] to be used in tests.
+ *
+ * Note that all timings except the total duration are non-zero to avoid divide-by-zero exceptions
+ * when computing the progress of a sub-animation (the contents fade in/out).
+ */
+private val TEST_TIMINGS =
+    LaunchAnimator.Timings(
+        totalDuration = 0L,
+        contentBeforeFadeOutDelay = 1L,
+        contentBeforeFadeOutDuration = 1L,
+        contentAfterFadeInDelay = 1L,
+        contentAfterFadeInDuration = 1L
+    )
+
+/** A [LaunchAnimator.Interpolators] to be used in tests. */
+private val TEST_INTERPOLATORS =
+    LaunchAnimator.Interpolators(
+        positionInterpolator = Interpolators.STANDARD,
+        positionXInterpolator = Interpolators.STANDARD,
+        contentBeforeFadeOutInterpolator = Interpolators.STANDARD,
+        contentAfterFadeInInterpolator = Interpolators.STANDARD
+    )
diff --git a/packages/SystemUI/tests/src/com/android/systemui/broadcast/FakeBroadcastDispatcher.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/broadcast/FakeBroadcastDispatcher.kt
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/broadcast/FakeBroadcastDispatcher.kt
rename to packages/SystemUI/tests/utils/src/com/android/systemui/broadcast/FakeBroadcastDispatcher.kt
diff --git a/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerFake.java b/packages/SystemUI/tests/utils/src/com/android/systemui/classifier/FalsingManagerFake.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerFake.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/classifier/FalsingManagerFake.java
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/people/FakePeopleTileRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/people/FakePeopleTileRepository.kt
new file mode 100644
index 0000000..0bde5d2
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/people/FakePeopleTileRepository.kt
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.people
+
+import com.android.systemui.people.data.model.PeopleTileModel
+import com.android.systemui.people.data.repository.PeopleTileRepository
+
+/** A fake [PeopleTileRepository] to be used in tests. */
+class FakePeopleTileRepository(
+    private val priorityTiles: List<PeopleTileModel>,
+    private val recentTiles: List<PeopleTileModel>,
+) : PeopleTileRepository {
+    override fun priorityTiles(): List<PeopleTileModel> = priorityTiles
+
+    override fun recentTiles(): List<PeopleTileModel> = recentTiles
+}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/people/FakePeopleWidgetRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/people/FakePeopleWidgetRepository.kt
new file mode 100644
index 0000000..2f81409
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/people/FakePeopleWidgetRepository.kt
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.people
+
+import com.android.systemui.people.data.repository.PeopleWidgetRepository
+import com.android.systemui.people.widget.PeopleTileKey
+
+/** A fake [PeopleWidgetRepository] to be used in tests. */
+class FakePeopleWidgetRepository(
+    private val onSetWidgetTile: (widgetId: Int, tileKey: PeopleTileKey) -> Unit = { _, _ -> },
+) : PeopleWidgetRepository {
+    override fun setWidgetTile(widgetId: Int, tileKey: PeopleTileKey) {
+        onSetWidgetTile(widgetId, tileKey)
+    }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenshot/FakeScrollCaptureConnection.java b/packages/SystemUI/tests/utils/src/com/android/systemui/screenshot/FakeScrollCaptureConnection.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/screenshot/FakeScrollCaptureConnection.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/screenshot/FakeScrollCaptureConnection.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenshot/FakeSession.java b/packages/SystemUI/tests/utils/src/com/android/systemui/screenshot/FakeSession.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/screenshot/FakeSession.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/screenshot/FakeSession.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/RankingBuilder.java b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/RankingBuilder.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/statusbar/RankingBuilder.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/RankingBuilder.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/SbnBuilder.java b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/SbnBuilder.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/statusbar/SbnBuilder.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/SbnBuilder.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryBuilder.java b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/NotificationEntryBuilder.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryBuilder.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/NotificationEntryBuilder.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/FakeConfigurationController.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/policy/FakeConfigurationController.kt
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/FakeConfigurationController.kt
rename to packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/policy/FakeConfigurationController.kt
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/DeviceConfigProxyFake.java b/packages/SystemUI/tests/utils/src/com/android/systemui/util/DeviceConfigProxyFake.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/util/DeviceConfigProxyFake.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/util/DeviceConfigProxyFake.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/concurrency/FakeExecutor.java b/packages/SystemUI/tests/utils/src/com/android/systemui/util/concurrency/FakeExecutor.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/util/concurrency/FakeExecutor.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/util/concurrency/FakeExecutor.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/concurrency/FakeRepeatableExecutor.java b/packages/SystemUI/tests/utils/src/com/android/systemui/util/concurrency/FakeRepeatableExecutor.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/util/concurrency/FakeRepeatableExecutor.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/util/concurrency/FakeRepeatableExecutor.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/concurrency/FakeThreadFactory.java b/packages/SystemUI/tests/utils/src/com/android/systemui/util/concurrency/FakeThreadFactory.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/util/concurrency/FakeThreadFactory.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/util/concurrency/FakeThreadFactory.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/condition/FakeCondition.java b/packages/SystemUI/tests/utils/src/com/android/systemui/util/condition/FakeCondition.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/util/condition/FakeCondition.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/util/condition/FakeCondition.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/io/FakeBasicFileAttributes.java b/packages/SystemUI/tests/utils/src/com/android/systemui/util/io/FakeBasicFileAttributes.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/util/io/FakeBasicFileAttributes.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/util/io/FakeBasicFileAttributes.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/mockito/KotlinMockitoHelpers.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/util/mockito/KotlinMockitoHelpers.kt
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/util/mockito/KotlinMockitoHelpers.kt
rename to packages/SystemUI/tests/utils/src/com/android/systemui/util/mockito/KotlinMockitoHelpers.kt
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/sensors/FakeProximitySensor.java b/packages/SystemUI/tests/utils/src/com/android/systemui/util/sensors/FakeProximitySensor.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/util/sensors/FakeProximitySensor.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/util/sensors/FakeProximitySensor.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/sensors/FakeSensorManager.java b/packages/SystemUI/tests/utils/src/com/android/systemui/util/sensors/FakeSensorManager.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/util/sensors/FakeSensorManager.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/util/sensors/FakeSensorManager.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/sensors/FakeThresholdSensor.java b/packages/SystemUI/tests/utils/src/com/android/systemui/util/sensors/FakeThresholdSensor.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/util/sensors/FakeThresholdSensor.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/util/sensors/FakeThresholdSensor.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/settings/FakeSettings.java b/packages/SystemUI/tests/utils/src/com/android/systemui/util/settings/FakeSettings.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/util/settings/FakeSettings.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/util/settings/FakeSettings.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/time/FakeSystemClock.java b/packages/SystemUI/tests/utils/src/com/android/systemui/util/time/FakeSystemClock.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/util/time/FakeSystemClock.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/util/time/FakeSystemClock.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/wakelock/WakeLockFake.java b/packages/SystemUI/tests/utils/src/com/android/systemui/util/wakelock/WakeLockFake.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/util/wakelock/WakeLockFake.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/util/wakelock/WakeLockFake.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/BaseLeakChecker.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/BaseLeakChecker.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/utils/leaks/BaseLeakChecker.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/BaseLeakChecker.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeBatteryController.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeBatteryController.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeBatteryController.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeBatteryController.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeBluetoothController.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeBluetoothController.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeBluetoothController.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeBluetoothController.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeCastController.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeCastController.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeCastController.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeCastController.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeConfigurationController.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeConfigurationController.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeConfigurationController.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeConfigurationController.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeDataSaverController.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeDataSaverController.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeDataSaverController.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeDataSaverController.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeExtensionController.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeExtensionController.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeExtensionController.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeExtensionController.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeFlashlightController.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeFlashlightController.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeFlashlightController.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeFlashlightController.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeHotspotController.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeHotspotController.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeHotspotController.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeHotspotController.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeKeyguardStateController.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeKeyguardStateController.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeKeyguardStateController.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeKeyguardStateController.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeLocationController.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeLocationController.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeLocationController.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeLocationController.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeManagedProfileController.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeManagedProfileController.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeManagedProfileController.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeManagedProfileController.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeNetworkController.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeNetworkController.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeNetworkController.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeNetworkController.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeNextAlarmController.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeNextAlarmController.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeNextAlarmController.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeNextAlarmController.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakePluginManager.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakePluginManager.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakePluginManager.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakePluginManager.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeRotationLockController.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeRotationLockController.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeRotationLockController.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeRotationLockController.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeSecurityController.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeSecurityController.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeSecurityController.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeSecurityController.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeStatusBarIconController.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeStatusBarIconController.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeStatusBarIconController.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeStatusBarIconController.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeTunerService.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeTunerService.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeTunerService.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeTunerService.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeUserInfoController.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeUserInfoController.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeUserInfoController.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeUserInfoController.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeZenModeController.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeZenModeController.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeZenModeController.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeZenModeController.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/LeakCheckedTest.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/LeakCheckedTest.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/utils/leaks/LeakCheckedTest.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/LeakCheckedTest.java
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/os/FakeHandler.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/os/FakeHandler.java
similarity index 100%
rename from packages/SystemUI/tests/src/com/android/systemui/utils/os/FakeHandler.java
rename to packages/SystemUI/tests/utils/src/com/android/systemui/utils/os/FakeHandler.java
diff --git a/packages/SystemUI/unfold/Android.bp b/packages/SystemUI/unfold/Android.bp
new file mode 100644
index 0000000..108295b
--- /dev/null
+++ b/packages/SystemUI/unfold/Android.bp
@@ -0,0 +1,39 @@
+// Copyright (C) 2022 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT 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
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "frameworks_base_packages_SystemUI_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: ["frameworks_base_packages_SystemUI_license"],
+}
+
+android_library {
+    name: "SystemUIUnfoldLib",
+    srcs: [
+        "src/**/*.java",
+        "src/**/*.kt",
+        "src/**/*.aidl",
+    ],
+    static_libs: [
+        "androidx.dynamicanimation_dynamicanimation",
+        "dagger2",
+        "jsr330",
+    ],
+    java_version: "1.8",
+    min_sdk_version: "current",
+    plugins: ["dagger2-compiler"],
+}
diff --git a/packages/SystemUI/unfold/AndroidManifest.xml b/packages/SystemUI/unfold/AndroidManifest.xml
new file mode 100644
index 0000000..ee8afe1
--- /dev/null
+++ b/packages/SystemUI/unfold/AndroidManifest.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.systemui.unfold">
+
+
+</manifest>
diff --git a/packages/SystemUI/unfold/lint-baseline.xml b/packages/SystemUI/unfold/lint-baseline.xml
new file mode 100644
index 0000000..449ed2e
--- /dev/null
+++ b/packages/SystemUI/unfold/lint-baseline.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-dev" type="baseline" client="" name="" variant="all" version="7.1.0-dev">
+</issues>
diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldSharedComponent.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldSharedComponent.kt
new file mode 100644
index 0000000..a5ec0a4
--- /dev/null
+++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldSharedComponent.kt
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.unfold
+
+import android.content.ContentResolver
+import android.content.Context
+import android.hardware.SensorManager
+import android.os.Handler
+import com.android.systemui.unfold.config.UnfoldTransitionConfig
+import com.android.systemui.unfold.dagger.UnfoldBackground
+import com.android.systemui.unfold.dagger.UnfoldMain
+import com.android.systemui.unfold.updates.FoldProvider
+import com.android.systemui.unfold.updates.screen.ScreenStatusProvider
+import com.android.systemui.unfold.util.CurrentActivityTypeProvider
+import com.android.systemui.unfold.util.UnfoldTransitionATracePrefix
+import dagger.BindsInstance
+import dagger.Component
+import java.util.Optional
+import java.util.concurrent.Executor
+import javax.inject.Singleton
+
+/**
+ * Provides [UnfoldTransitionProgressProvider]. The [Optional] is empty when the transition
+ * animation is disabled.
+ *
+ * This component is meant to be used for places that don't use dagger. By providing those
+ * parameters to the factory, all dagger objects are correctly instantiated. See
+ * [createUnfoldTransitionProgressProvider] for an example.
+ */
+@Singleton
+@Component(modules = [UnfoldSharedModule::class])
+internal interface UnfoldSharedComponent {
+
+    @Component.Factory
+    interface Factory {
+        fun create(
+            @BindsInstance context: Context,
+            @BindsInstance config: UnfoldTransitionConfig,
+            @BindsInstance screenStatusProvider: ScreenStatusProvider,
+            @BindsInstance foldProvider: FoldProvider,
+            @BindsInstance activityTypeProvider: CurrentActivityTypeProvider,
+            @BindsInstance sensorManager: SensorManager,
+            @BindsInstance @UnfoldMain handler: Handler,
+            @BindsInstance @UnfoldMain executor: Executor,
+            @BindsInstance @UnfoldBackground backgroundExecutor: Executor,
+            @BindsInstance @UnfoldTransitionATracePrefix tracingTagPrefix: String,
+            @BindsInstance contentResolver: ContentResolver = context.contentResolver
+        ): UnfoldSharedComponent
+    }
+
+    val unfoldTransitionProvider: Optional<UnfoldTransitionProgressProvider>
+}
diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldSharedModule.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldSharedModule.kt
new file mode 100644
index 0000000..8f4ee4d
--- /dev/null
+++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldSharedModule.kt
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.unfold
+
+import android.hardware.SensorManager
+import com.android.systemui.unfold.config.UnfoldTransitionConfig
+import com.android.systemui.unfold.dagger.UnfoldBackground
+import com.android.systemui.unfold.progress.FixedTimingTransitionProgressProvider
+import com.android.systemui.unfold.progress.PhysicsBasedUnfoldTransitionProgressProvider
+import com.android.systemui.unfold.updates.DeviceFoldStateProvider
+import com.android.systemui.unfold.updates.FoldStateProvider
+import com.android.systemui.unfold.updates.hinge.EmptyHingeAngleProvider
+import com.android.systemui.unfold.updates.hinge.HingeAngleProvider
+import com.android.systemui.unfold.updates.hinge.HingeSensorAngleProvider
+import com.android.systemui.unfold.util.ATraceLoggerTransitionProgressListener
+import com.android.systemui.unfold.util.ScaleAwareTransitionProgressProvider
+import dagger.Module
+import dagger.Provides
+import java.util.Optional
+import java.util.concurrent.Executor
+import javax.inject.Singleton
+
+@Module
+class UnfoldSharedModule {
+    @Provides
+    @Singleton
+    fun unfoldTransitionProgressProvider(
+        config: UnfoldTransitionConfig,
+        scaleAwareProviderFactory: ScaleAwareTransitionProgressProvider.Factory,
+        tracingListener: ATraceLoggerTransitionProgressListener,
+        foldStateProvider: FoldStateProvider
+    ): Optional<UnfoldTransitionProgressProvider> =
+        if (!config.isEnabled) {
+            Optional.empty()
+        } else {
+            val baseProgressProvider =
+                if (config.isHingeAngleEnabled) {
+                    PhysicsBasedUnfoldTransitionProgressProvider(foldStateProvider)
+                } else {
+                    FixedTimingTransitionProgressProvider(foldStateProvider)
+                }
+            Optional.of(
+                scaleAwareProviderFactory.wrap(baseProgressProvider).apply {
+                    // Always present callback that logs animation beginning and end.
+                    addCallback(tracingListener)
+                })
+        }
+
+    @Provides
+    @Singleton
+    fun provideFoldStateProvider(
+        deviceFoldStateProvider: DeviceFoldStateProvider
+    ): FoldStateProvider = deviceFoldStateProvider
+
+    @Provides
+    fun hingeAngleProvider(
+        config: UnfoldTransitionConfig,
+        sensorManager: SensorManager,
+        @UnfoldBackground executor: Executor
+    ): HingeAngleProvider =
+        if (config.isHingeAngleEnabled) {
+            HingeSensorAngleProvider(sensorManager, executor)
+        } else {
+            EmptyHingeAngleProvider
+        }
+}
diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldTransitionFactory.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldTransitionFactory.kt
new file mode 100644
index 0000000..402dd84
--- /dev/null
+++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldTransitionFactory.kt
@@ -0,0 +1,65 @@
+/*
+ * 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.
+ */
+@file:JvmName("UnfoldTransitionFactory")
+
+package com.android.systemui.unfold
+
+import android.content.Context
+import android.hardware.SensorManager
+import android.os.Handler
+import com.android.systemui.unfold.config.UnfoldTransitionConfig
+import com.android.systemui.unfold.updates.FoldProvider
+import com.android.systemui.unfold.updates.screen.ScreenStatusProvider
+import com.android.systemui.unfold.util.CurrentActivityTypeProvider
+import java.util.concurrent.Executor
+
+/**
+ * Factory for [UnfoldTransitionProgressProvider].
+ *
+ * This is needed as Launcher has to create the object manually. If dagger is available, this object
+ * is provided in [UnfoldSharedModule].
+ *
+ * This should **never** be called from sysui, as the object is already provided in that process.
+ */
+fun createUnfoldTransitionProgressProvider(
+    context: Context,
+    config: UnfoldTransitionConfig,
+    screenStatusProvider: ScreenStatusProvider,
+    foldProvider: FoldProvider,
+    activityTypeProvider: CurrentActivityTypeProvider,
+    sensorManager: SensorManager,
+    mainHandler: Handler,
+    mainExecutor: Executor,
+    backgroundExecutor: Executor,
+    tracingTagPrefix: String
+): UnfoldTransitionProgressProvider =
+    DaggerUnfoldSharedComponent.factory()
+        .create(
+            context,
+            config,
+            screenStatusProvider,
+            foldProvider,
+            activityTypeProvider,
+            sensorManager,
+            mainHandler,
+            mainExecutor,
+            backgroundExecutor,
+            tracingTagPrefix)
+        .unfoldTransitionProvider
+        .orElse(null)
+        ?: throw IllegalStateException(
+            "Trying to create " +
+                "UnfoldTransitionProgressProvider when the transition is disabled")
diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldTransitionProgressProvider.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldTransitionProgressProvider.kt
new file mode 100644
index 0000000..d54481c
--- /dev/null
+++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/UnfoldTransitionProgressProvider.kt
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.systemui.unfold
+
+import androidx.annotation.FloatRange
+import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener
+import com.android.systemui.unfold.util.CallbackController
+
+/**
+ * Interface that allows to receive unfold transition progress updates.
+ *
+ * It can be used to update view properties based on the current animation progress.
+ *
+ * onTransitionProgress callback could be called on each frame.
+ *
+ * Use [createUnfoldTransitionProgressProvider] to create instances of this interface
+ */
+interface UnfoldTransitionProgressProvider : CallbackController<TransitionProgressListener> {
+
+    fun destroy()
+
+    interface TransitionProgressListener {
+        fun onTransitionStarted() {}
+        fun onTransitionFinished() {}
+        fun onTransitionProgress(@FloatRange(from = 0.0, to = 1.0) progress: Float) {}
+    }
+}
diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/compat/ScreenSizeFoldProvider.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/compat/ScreenSizeFoldProvider.kt
new file mode 100644
index 0000000..2044f05
--- /dev/null
+++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/compat/ScreenSizeFoldProvider.kt
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT 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.unfold.compat
+
+import android.content.Context
+import android.content.res.Configuration
+import com.android.systemui.unfold.updates.FoldProvider
+import com.android.systemui.unfold.updates.FoldProvider.FoldCallback
+import java.util.concurrent.Executor
+
+/**
+ * Fold provider that notifies about fold state based on the screen size
+ * It could be used when no activity context is available
+ * TODO(b/232369816): use Jetpack WM library when non-activity contexts supported b/169740873
+ */
+class ScreenSizeFoldProvider(private val context: Context) : FoldProvider {
+
+    private var callbacks: MutableList<FoldCallback> = arrayListOf()
+    private var lastWidth: Int = 0
+
+    override fun registerCallback(callback: FoldCallback, executor: Executor) {
+        callbacks += callback
+        onConfigurationChange(context.resources.configuration)
+    }
+
+    override fun unregisterCallback(callback: FoldCallback) {
+        callbacks -= callback
+    }
+
+    fun onConfigurationChange(newConfig: Configuration) {
+        if (lastWidth == newConfig.smallestScreenWidthDp) {
+            return
+        }
+
+        if (newConfig.smallestScreenWidthDp > INNER_SCREEN_SMALLEST_SCREEN_WIDTH_THRESHOLD_DP) {
+            callbacks.forEach { it.onFoldUpdated(false) }
+        } else {
+            callbacks.forEach { it.onFoldUpdated(true) }
+        }
+        lastWidth = newConfig.smallestScreenWidthDp
+    }
+}
+
+private const val INNER_SCREEN_SMALLEST_SCREEN_WIDTH_THRESHOLD_DP = 600
diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/compat/SizeScreenStatusProvider.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/compat/SizeScreenStatusProvider.kt
new file mode 100644
index 0000000..c405f31
--- /dev/null
+++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/compat/SizeScreenStatusProvider.kt
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT 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.unfold.compat
+
+import com.android.systemui.unfold.updates.FoldProvider
+import com.android.systemui.unfold.updates.screen.ScreenStatusProvider
+import com.android.systemui.unfold.updates.screen.ScreenStatusProvider.ScreenListener
+import java.util.concurrent.Executor
+
+class SizeScreenStatusProvider(
+    private val foldProvider: FoldProvider,
+    private val executor: Executor
+) : ScreenStatusProvider {
+
+    private val listeners: MutableList<ScreenListener> = arrayListOf()
+    private val callback = object : FoldProvider.FoldCallback {
+        override fun onFoldUpdated(isFolded: Boolean) {
+            if (!isFolded) {
+                listeners.forEach { it.onScreenTurnedOn() }
+            }
+        }
+    }
+
+    fun start() {
+        foldProvider.registerCallback(
+            callback,
+            executor
+        )
+    }
+
+    fun stop() {
+        foldProvider.unregisterCallback(callback)
+    }
+
+    override fun addCallback(listener: ScreenListener) {
+        listeners.add(listener)
+    }
+
+    override fun removeCallback(listener: ScreenListener) {
+        listeners.remove(listener)
+    }
+}
diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/config/ResourceUnfoldTransitionConfig.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/config/ResourceUnfoldTransitionConfig.kt
new file mode 100644
index 0000000..c513729
--- /dev/null
+++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/config/ResourceUnfoldTransitionConfig.kt
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT 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.unfold.config
+
+import android.content.res.Resources
+import javax.inject.Inject
+import javax.inject.Singleton
+
+@Singleton
+class ResourceUnfoldTransitionConfig @Inject constructor() : UnfoldTransitionConfig {
+
+    override val isEnabled: Boolean by lazy {
+        val id = Resources.getSystem()
+            .getIdentifier("config_unfoldTransitionEnabled", "bool", "android")
+        Resources.getSystem().getBoolean(id)
+    }
+
+    override val isHingeAngleEnabled: Boolean by lazy {
+        val id = Resources.getSystem()
+            .getIdentifier("config_unfoldTransitionHingeAngle", "bool", "android")
+        Resources.getSystem().getBoolean(id)
+    }
+
+    override val halfFoldedTimeoutMillis: Int by lazy {
+        val id = Resources.getSystem()
+            .getIdentifier("config_unfoldTransitionHalfFoldedTimeout", "integer", "android")
+        Resources.getSystem().getInteger(id)
+    }
+}
diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/config/UnfoldTransitionConfig.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/config/UnfoldTransitionConfig.kt
new file mode 100644
index 0000000..765e862
--- /dev/null
+++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/config/UnfoldTransitionConfig.kt
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.systemui.unfold.config
+
+interface UnfoldTransitionConfig {
+    val isEnabled: Boolean
+    val isHingeAngleEnabled: Boolean
+    val halfFoldedTimeoutMillis: Int
+}
diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/dagger/UnfoldBackground.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/dagger/UnfoldBackground.kt
new file mode 100644
index 0000000..6074795
--- /dev/null
+++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/dagger/UnfoldBackground.kt
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT 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.unfold.dagger
+
+import javax.inject.Qualifier
+
+/**
+ * Alternative to [UiBackground] qualifier annotation in unfold module.
+ * It is needed as we can't depend on SystemUI code in this module.
+ */
+@Qualifier
+@Retention(AnnotationRetention.RUNTIME)
+annotation class UnfoldBackground
diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/dagger/UnfoldMain.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/dagger/UnfoldMain.kt
new file mode 100644
index 0000000..5553690f
--- /dev/null
+++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/dagger/UnfoldMain.kt
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT 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.unfold.dagger
+
+import javax.inject.Qualifier
+
+/**
+ * Alternative to [Main] qualifier annotation in unfold module.
+ * It is needed as we can't depend on SystemUI code in this module.
+ */
+@Qualifier
+@Retention(AnnotationRetention.RUNTIME)
+annotation class UnfoldMain
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/progress/FixedTimingTransitionProgressProvider.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/progress/FixedTimingTransitionProgressProvider.kt
similarity index 100%
rename from packages/SystemUI/shared/src/com/android/systemui/unfold/progress/FixedTimingTransitionProgressProvider.kt
rename to packages/SystemUI/unfold/src/com/android/systemui/unfold/progress/FixedTimingTransitionProgressProvider.kt
diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/progress/PhysicsBasedUnfoldTransitionProgressProvider.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/progress/PhysicsBasedUnfoldTransitionProgressProvider.kt
new file mode 100644
index 0000000..2ab28c6
--- /dev/null
+++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/progress/PhysicsBasedUnfoldTransitionProgressProvider.kt
@@ -0,0 +1,208 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.systemui.unfold.progress
+
+import android.util.Log
+import androidx.dynamicanimation.animation.DynamicAnimation
+import androidx.dynamicanimation.animation.FloatPropertyCompat
+import androidx.dynamicanimation.animation.SpringAnimation
+import androidx.dynamicanimation.animation.SpringForce
+import com.android.systemui.unfold.UnfoldTransitionProgressProvider
+import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener
+import com.android.systemui.unfold.updates.FOLD_UPDATE_FINISH_CLOSED
+import com.android.systemui.unfold.updates.FOLD_UPDATE_FINISH_FULL_OPEN
+import com.android.systemui.unfold.updates.FOLD_UPDATE_FINISH_HALF_OPEN
+import com.android.systemui.unfold.updates.FOLD_UPDATE_START_CLOSING
+import com.android.systemui.unfold.updates.FOLD_UPDATE_UNFOLDED_SCREEN_AVAILABLE
+import com.android.systemui.unfold.updates.FoldStateProvider
+import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdate
+import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdatesListener
+
+/** Maps fold updates to unfold transition progress using DynamicAnimation. */
+class PhysicsBasedUnfoldTransitionProgressProvider(
+    private val foldStateProvider: FoldStateProvider
+) : UnfoldTransitionProgressProvider, FoldUpdatesListener, DynamicAnimation.OnAnimationEndListener {
+
+    private val springAnimation =
+        SpringAnimation(this, AnimationProgressProperty).apply {
+            addEndListener(this@PhysicsBasedUnfoldTransitionProgressProvider)
+        }
+
+    private var isTransitionRunning = false
+    private var isAnimatedCancelRunning = false
+
+    private var transitionProgress: Float = 0.0f
+        set(value) {
+            if (isTransitionRunning) {
+                listeners.forEach { it.onTransitionProgress(value) }
+            }
+            field = value
+        }
+
+    private val listeners: MutableList<TransitionProgressListener> = mutableListOf()
+
+    init {
+        foldStateProvider.addCallback(this)
+        foldStateProvider.start()
+    }
+
+    override fun destroy() {
+        foldStateProvider.stop()
+    }
+
+    override fun onHingeAngleUpdate(angle: Float) {
+        if (!isTransitionRunning || isAnimatedCancelRunning) return
+        val progress = saturate(angle / FINAL_HINGE_ANGLE_POSITION)
+        springAnimation.animateToFinalPosition(progress)
+    }
+
+    private fun saturate(amount: Float, low: Float = 0f, high: Float = 1f): Float =
+        if (amount < low) low else if (amount > high) high else amount
+
+    override fun onFoldUpdate(@FoldUpdate update: Int) {
+        when (update) {
+            FOLD_UPDATE_UNFOLDED_SCREEN_AVAILABLE -> {
+                startTransition(startValue = 0f)
+
+                // Stop the animation if the device has already opened by the time when
+                // the display is available as we won't receive the full open event anymore
+                if (foldStateProvider.isFinishedOpening) {
+                    cancelTransition(endValue = 1f, animate = true)
+                }
+            }
+            FOLD_UPDATE_FINISH_FULL_OPEN, FOLD_UPDATE_FINISH_HALF_OPEN -> {
+                // Do not cancel if we haven't started the transition yet.
+                // This could happen when we fully unfolded the device before the screen
+                // became available. In this case we start and immediately cancel the animation
+                // in FOLD_UPDATE_UNFOLDED_SCREEN_AVAILABLE event handler, so we don't need to
+                // cancel it here.
+                if (isTransitionRunning) {
+                    cancelTransition(endValue = 1f, animate = true)
+                }
+            }
+            FOLD_UPDATE_FINISH_CLOSED -> {
+                cancelTransition(endValue = 0f, animate = false)
+            }
+            FOLD_UPDATE_START_CLOSING -> {
+                // The transition might be already running as the device might start closing several
+                // times before reaching an end state.
+                if (isTransitionRunning) {
+                    // If we are cancelling the animation, reset that so we can resume it normally.
+                    // The animation could be 'cancelled' when the user stops folding/unfolding
+                    // for some period of time or fully unfolds the device. In this case,
+                    // it is forced to run to the end ignoring all further hinge angle events.
+                    // By resetting this flag we allow reacting to hinge angle events again, so
+                    // the transition continues running.
+                    if (isAnimatedCancelRunning) {
+                        isAnimatedCancelRunning = false
+                    }
+                } else {
+                    startTransition(startValue = 1f)
+                }
+            }
+        }
+
+        if (DEBUG) {
+            Log.d(TAG, "onFoldUpdate = $update")
+        }
+    }
+
+    private fun cancelTransition(endValue: Float, animate: Boolean) {
+        if (isTransitionRunning && animate) {
+            isAnimatedCancelRunning = true
+            springAnimation.animateToFinalPosition(endValue)
+        } else {
+            transitionProgress = endValue
+            isAnimatedCancelRunning = false
+            isTransitionRunning = false
+            springAnimation.cancel()
+
+            listeners.forEach { it.onTransitionFinished() }
+
+            if (DEBUG) {
+                Log.d(TAG, "onTransitionFinished")
+            }
+        }
+    }
+
+    override fun onAnimationEnd(
+        animation: DynamicAnimation<out DynamicAnimation<*>>,
+        canceled: Boolean,
+        value: Float,
+        velocity: Float
+    ) {
+        if (isAnimatedCancelRunning) {
+            cancelTransition(value, animate = false)
+        }
+    }
+
+    private fun onStartTransition() {
+        listeners.forEach { it.onTransitionStarted() }
+        isTransitionRunning = true
+
+        if (DEBUG) {
+            Log.d(TAG, "onTransitionStarted")
+        }
+    }
+
+    private fun startTransition(startValue: Float) {
+        if (!isTransitionRunning) onStartTransition()
+
+        springAnimation.apply {
+            spring =
+                SpringForce().apply {
+                    finalPosition = startValue
+                    dampingRatio = SpringForce.DAMPING_RATIO_NO_BOUNCY
+                    stiffness = SPRING_STIFFNESS
+                }
+            minimumVisibleChange = MINIMAL_VISIBLE_CHANGE
+            setStartValue(startValue)
+            setMinValue(0f)
+            setMaxValue(1f)
+        }
+
+        springAnimation.start()
+    }
+
+    override fun addCallback(listener: TransitionProgressListener) {
+        listeners.add(listener)
+    }
+
+    override fun removeCallback(listener: TransitionProgressListener) {
+        listeners.remove(listener)
+    }
+
+    private object AnimationProgressProperty :
+        FloatPropertyCompat<PhysicsBasedUnfoldTransitionProgressProvider>("animation_progress") {
+
+        override fun setValue(
+            provider: PhysicsBasedUnfoldTransitionProgressProvider,
+            value: Float
+        ) {
+            provider.transitionProgress = value
+        }
+
+        override fun getValue(provider: PhysicsBasedUnfoldTransitionProgressProvider): Float =
+            provider.transitionProgress
+    }
+}
+
+private const val TAG = "PhysicsBasedUnfoldTransitionProgressProvider"
+private const val DEBUG = true
+
+private const val SPRING_STIFFNESS = 200.0f
+private const val MINIMAL_VISIBLE_CHANGE = 0.001f
+private const val FINAL_HINGE_ANGLE_POSITION = 165f
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
new file mode 100644
index 0000000..e8038fd
--- /dev/null
+++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/DeviceFoldStateProvider.kt
@@ -0,0 +1,237 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.systemui.unfold.updates
+
+import android.os.Handler
+import android.util.Log
+import androidx.annotation.FloatRange
+import androidx.annotation.VisibleForTesting
+import androidx.core.util.Consumer
+import com.android.systemui.unfold.config.UnfoldTransitionConfig
+import com.android.systemui.unfold.dagger.UnfoldMain
+import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdate
+import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdatesListener
+import com.android.systemui.unfold.updates.hinge.FULLY_CLOSED_DEGREES
+import com.android.systemui.unfold.updates.hinge.FULLY_OPEN_DEGREES
+import com.android.systemui.unfold.updates.hinge.HingeAngleProvider
+import com.android.systemui.unfold.updates.screen.ScreenStatusProvider
+import com.android.systemui.unfold.util.CurrentActivityTypeProvider
+import java.util.concurrent.Executor
+import javax.inject.Inject
+
+class DeviceFoldStateProvider
+@Inject
+constructor(
+    config: UnfoldTransitionConfig,
+    private val hingeAngleProvider: HingeAngleProvider,
+    private val screenStatusProvider: ScreenStatusProvider,
+    private val foldProvider: FoldProvider,
+    private val activityTypeProvider: CurrentActivityTypeProvider,
+    @UnfoldMain private val mainExecutor: Executor,
+    @UnfoldMain private val handler: Handler
+) : FoldStateProvider {
+
+    private val outputListeners: MutableList<FoldUpdatesListener> = mutableListOf()
+
+    @FoldUpdate
+    private var lastFoldUpdate: Int? = null
+
+    @FloatRange(from = 0.0, to = 180.0)
+    private var lastHingeAngle: Float = 0f
+
+    private val hingeAngleListener = HingeAngleListener()
+    private val screenListener = ScreenStatusListener()
+    private val foldStateListener = FoldStateListener()
+    private val timeoutRunnable = TimeoutRunnable()
+
+    /**
+     * Time after which [FOLD_UPDATE_FINISH_HALF_OPEN] is emitted following a
+     * [FOLD_UPDATE_START_CLOSING] or [FOLD_UPDATE_START_OPENING] event, if an end state is not
+     * reached.
+     */
+    private val halfOpenedTimeoutMillis: Int = config.halfFoldedTimeoutMillis
+
+    private var isFolded = false
+    private var isUnfoldHandled = true
+
+    override fun start() {
+        foldProvider.registerCallback(foldStateListener, mainExecutor)
+        screenStatusProvider.addCallback(screenListener)
+        hingeAngleProvider.addCallback(hingeAngleListener)
+    }
+
+    override fun stop() {
+        screenStatusProvider.removeCallback(screenListener)
+        foldProvider.unregisterCallback(foldStateListener)
+        hingeAngleProvider.removeCallback(hingeAngleListener)
+        hingeAngleProvider.stop()
+    }
+
+    override fun addCallback(listener: FoldUpdatesListener) {
+        outputListeners.add(listener)
+    }
+
+    override fun removeCallback(listener: FoldUpdatesListener) {
+        outputListeners.remove(listener)
+    }
+
+    override val isFinishedOpening: Boolean
+        get() = !isFolded &&
+                (lastFoldUpdate == FOLD_UPDATE_FINISH_FULL_OPEN ||
+                        lastFoldUpdate == FOLD_UPDATE_FINISH_HALF_OPEN)
+
+    private val isTransitionInProgress: Boolean
+        get() =
+            lastFoldUpdate == FOLD_UPDATE_START_OPENING ||
+                    lastFoldUpdate == FOLD_UPDATE_START_CLOSING
+
+    private fun onHingeAngle(angle: Float) {
+        if (DEBUG) {
+            Log.d(TAG, "Hinge angle: $angle, lastHingeAngle: $lastHingeAngle")
+        }
+
+        val isClosing = angle < lastHingeAngle
+        val closingThreshold = getClosingThreshold()
+        val closingThresholdMet = closingThreshold == null || angle < closingThreshold
+        val isFullyOpened = FULLY_OPEN_DEGREES - angle < FULLY_OPEN_THRESHOLD_DEGREES
+        val closingEventDispatched = lastFoldUpdate == FOLD_UPDATE_START_CLOSING
+
+        if (isClosing && closingThresholdMet && !closingEventDispatched && !isFullyOpened) {
+            notifyFoldUpdate(FOLD_UPDATE_START_CLOSING)
+        }
+
+        if (isTransitionInProgress) {
+            if (isFullyOpened) {
+                notifyFoldUpdate(FOLD_UPDATE_FINISH_FULL_OPEN)
+                cancelTimeout()
+            } else {
+                // The timeout will trigger some constant time after the last angle update.
+                rescheduleAbortAnimationTimeout()
+            }
+        }
+
+        lastHingeAngle = angle
+        outputListeners.forEach { it.onHingeAngleUpdate(angle) }
+    }
+
+    /**
+     * Fold animation should be started only after the threshold returned here.
+     *
+     * This has been introduced because the fold animation might be distracting/unwanted on top of
+     * apps that support table-top/HALF_FOLDED mode. Only for launcher, there is no threshold.
+     */
+    private fun getClosingThreshold(): Int? {
+        val isHomeActivity = activityTypeProvider.isHomeActivity ?: return null
+
+        if (DEBUG) {
+            Log.d(TAG, "isHomeActivity=$isHomeActivity")
+        }
+
+        return if (isHomeActivity) {
+            null
+        } else {
+            START_CLOSING_ON_APPS_THRESHOLD_DEGREES
+        }
+    }
+
+    private inner class FoldStateListener : FoldProvider.FoldCallback {
+        override fun onFoldUpdated(isFolded: Boolean) {
+            this@DeviceFoldStateProvider.isFolded = isFolded
+            lastHingeAngle = FULLY_CLOSED_DEGREES
+
+            if (isFolded) {
+                hingeAngleProvider.stop()
+                notifyFoldUpdate(FOLD_UPDATE_FINISH_CLOSED)
+                cancelTimeout()
+                isUnfoldHandled = false
+            } else {
+                notifyFoldUpdate(FOLD_UPDATE_START_OPENING)
+                rescheduleAbortAnimationTimeout()
+                hingeAngleProvider.start()
+            }
+        }
+    }
+
+    private fun notifyFoldUpdate(@FoldUpdate update: Int) {
+        if (DEBUG) {
+            Log.d(TAG, stateToString(update))
+        }
+        outputListeners.forEach { it.onFoldUpdate(update) }
+        lastFoldUpdate = update
+    }
+
+    private fun rescheduleAbortAnimationTimeout() {
+        if (isTransitionInProgress) {
+            cancelTimeout()
+        }
+        handler.postDelayed(timeoutRunnable, halfOpenedTimeoutMillis.toLong())
+    }
+
+    private fun cancelTimeout() {
+        handler.removeCallbacks(timeoutRunnable)
+    }
+
+    private inner class ScreenStatusListener : ScreenStatusProvider.ScreenListener {
+
+        override fun onScreenTurnedOn() {
+            // Trigger this event only if we are unfolded and this is the first screen
+            // turned on event since unfold started. This prevents running the animation when
+            // turning on the internal display using the power button.
+            // Initially isUnfoldHandled is true so it will be reset to false *only* when we
+            // receive 'folded' event. If SystemUI started when device is already folded it will
+            // still receive 'folded' event on startup.
+            if (!isFolded && !isUnfoldHandled) {
+                outputListeners.forEach { it.onFoldUpdate(FOLD_UPDATE_UNFOLDED_SCREEN_AVAILABLE) }
+                isUnfoldHandled = true
+            }
+        }
+    }
+
+    private inner class HingeAngleListener : Consumer<Float> {
+        override fun accept(angle: Float) {
+            onHingeAngle(angle)
+        }
+    }
+
+    private inner class TimeoutRunnable : Runnable {
+        override fun run() {
+            notifyFoldUpdate(FOLD_UPDATE_FINISH_HALF_OPEN)
+        }
+    }
+}
+
+private fun stateToString(@FoldUpdate update: Int): String {
+    return when (update) {
+        FOLD_UPDATE_START_OPENING -> "START_OPENING"
+        FOLD_UPDATE_START_CLOSING -> "START_CLOSING"
+        FOLD_UPDATE_UNFOLDED_SCREEN_AVAILABLE -> "UNFOLDED_SCREEN_AVAILABLE"
+        FOLD_UPDATE_FINISH_HALF_OPEN -> "FINISH_HALF_OPEN"
+        FOLD_UPDATE_FINISH_FULL_OPEN -> "FINISH_FULL_OPEN"
+        FOLD_UPDATE_FINISH_CLOSED -> "FINISH_CLOSED"
+        else -> "UNKNOWN"
+    }
+}
+
+private const val TAG = "DeviceFoldProvider"
+private const val DEBUG = false
+
+/** Threshold after which we consider the device fully unfolded. */
+@VisibleForTesting
+const val FULLY_OPEN_THRESHOLD_DEGREES = 15f
+
+/** Fold animation on top of apps only when the angle exceeds this threshold. */
+@VisibleForTesting
+const val START_CLOSING_ON_APPS_THRESHOLD_DEGREES = 60
diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/FoldProvider.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/FoldProvider.kt
new file mode 100644
index 0000000..6e87bee
--- /dev/null
+++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/FoldProvider.kt
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT 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.unfold.updates
+
+import java.util.concurrent.Executor
+
+interface FoldProvider {
+    fun registerCallback(callback: FoldCallback, executor: Executor)
+    fun unregisterCallback(callback: FoldCallback)
+
+    interface FoldCallback {
+        fun onFoldUpdated(isFolded: Boolean)
+    }
+}
diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/FoldStateProvider.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/FoldStateProvider.kt
new file mode 100644
index 0000000..c7a8bf3
--- /dev/null
+++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/FoldStateProvider.kt
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.systemui.unfold.updates
+
+import androidx.annotation.FloatRange
+import androidx.annotation.IntDef
+import com.android.systemui.unfold.updates.FoldStateProvider.FoldUpdatesListener
+import com.android.systemui.unfold.util.CallbackController
+
+/**
+ * Allows to subscribe to main events related to fold/unfold process such as hinge angle update,
+ * start folding/unfolding, screen availability
+ */
+interface FoldStateProvider : CallbackController<FoldUpdatesListener> {
+    fun start()
+    fun stop()
+
+    val isFinishedOpening: Boolean
+
+    interface FoldUpdatesListener {
+        fun onHingeAngleUpdate(@FloatRange(from = 0.0, to = 180.0) angle: Float)
+        fun onFoldUpdate(@FoldUpdate update: Int)
+    }
+
+    @IntDef(
+        value =
+            [
+                FOLD_UPDATE_START_OPENING,
+                FOLD_UPDATE_START_CLOSING,
+                FOLD_UPDATE_UNFOLDED_SCREEN_AVAILABLE,
+                FOLD_UPDATE_FINISH_HALF_OPEN,
+                FOLD_UPDATE_FINISH_FULL_OPEN,
+                FOLD_UPDATE_FINISH_CLOSED])
+    @Retention(AnnotationRetention.SOURCE)
+    annotation class FoldUpdate
+}
+
+const val FOLD_UPDATE_START_OPENING = 0
+const val FOLD_UPDATE_START_CLOSING = 1
+const val FOLD_UPDATE_UNFOLDED_SCREEN_AVAILABLE = 2
+const val FOLD_UPDATE_FINISH_HALF_OPEN = 3
+const val FOLD_UPDATE_FINISH_FULL_OPEN = 4
+const val FOLD_UPDATE_FINISH_CLOSED = 5
diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/hinge/EmptyHingeAngleProvider.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/hinge/EmptyHingeAngleProvider.kt
new file mode 100644
index 0000000..e985506
--- /dev/null
+++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/hinge/EmptyHingeAngleProvider.kt
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT 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.unfold.updates.hinge
+
+import androidx.core.util.Consumer
+
+internal object EmptyHingeAngleProvider : HingeAngleProvider {
+    override fun start() {}
+
+    override fun stop() {}
+
+    override fun removeCallback(listener: Consumer<Float>) {}
+
+    override fun addCallback(listener: Consumer<Float>) {}
+}
diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/hinge/HingeAngleProvider.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/hinge/HingeAngleProvider.kt
new file mode 100644
index 0000000..e464c3f
--- /dev/null
+++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/hinge/HingeAngleProvider.kt
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+package com.android.systemui.unfold.updates.hinge
+
+import androidx.core.util.Consumer
+import com.android.systemui.unfold.util.CallbackController
+
+/**
+ * Emits device hinge angle values (angle between two integral parts of the device).
+ *
+ * The hinge angle could be from 0 to 360 degrees inclusive. For foldable devices usually 0
+ * corresponds to fully closed (folded) state and 180 degrees corresponds to fully open (flat)
+ * state.
+ */
+interface HingeAngleProvider : CallbackController<Consumer<Float>> {
+    fun start()
+    fun stop()
+}
+
+const val FULLY_OPEN_DEGREES = 180f
+const val FULLY_CLOSED_DEGREES = 0f
diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/hinge/HingeSensorAngleProvider.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/hinge/HingeSensorAngleProvider.kt
new file mode 100644
index 0000000..3fc5d61
--- /dev/null
+++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/hinge/HingeSensorAngleProvider.kt
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT 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.unfold.updates.hinge
+
+import android.hardware.Sensor
+import android.hardware.SensorEvent
+import android.hardware.SensorEventListener
+import android.hardware.SensorManager
+import android.os.Trace
+import androidx.core.util.Consumer
+import java.util.concurrent.Executor
+
+internal class HingeSensorAngleProvider(
+    private val sensorManager: SensorManager,
+    private val executor: Executor
+) :
+    HingeAngleProvider {
+
+    private val sensorListener = HingeAngleSensorListener()
+    private val listeners: MutableList<Consumer<Float>> = arrayListOf()
+
+    override fun start() = executor.execute {
+        Trace.beginSection("HingeSensorAngleProvider#start")
+        val sensor = sensorManager.getDefaultSensor(Sensor.TYPE_HINGE_ANGLE)
+        sensorManager.registerListener(
+            sensorListener,
+            sensor,
+            SensorManager.SENSOR_DELAY_FASTEST
+        )
+        Trace.endSection()
+    }
+
+    override fun stop() = executor.execute {
+        sensorManager.unregisterListener(sensorListener)
+    }
+
+    override fun removeCallback(listener: Consumer<Float>) {
+        listeners.remove(listener)
+    }
+
+    override fun addCallback(listener: Consumer<Float>) {
+        listeners.add(listener)
+    }
+
+    private inner class HingeAngleSensorListener : SensorEventListener {
+
+        override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {}
+
+        override fun onSensorChanged(event: SensorEvent) {
+            listeners.forEach { it.accept(event.values[0]) }
+        }
+    }
+}
diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/screen/ScreenStatusProvider.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/screen/ScreenStatusProvider.kt
new file mode 100644
index 0000000..d95e050
--- /dev/null
+++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/screen/ScreenStatusProvider.kt
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.systemui.unfold.updates.screen
+
+import com.android.systemui.unfold.updates.screen.ScreenStatusProvider.ScreenListener
+import com.android.systemui.unfold.util.CallbackController
+
+interface ScreenStatusProvider : CallbackController<ScreenListener> {
+
+    interface ScreenListener {
+        /**
+         * Called when the screen is on and ready (windows are drawn and screen blocker is removed)
+         */
+        fun onScreenTurnedOn()
+    }
+}
diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/util/ATraceLoggerTransitionProgressListener.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/util/ATraceLoggerTransitionProgressListener.kt
new file mode 100644
index 0000000..d8bc018
--- /dev/null
+++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/util/ATraceLoggerTransitionProgressListener.kt
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT 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.unfold.util
+
+import android.os.Trace
+import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener
+import javax.inject.Inject
+import javax.inject.Qualifier
+
+/**
+ * Listener that logs start and end of the fold-unfold transition.
+ *
+ * [tracePrefix] arg helps in differentiating those. Currently, this is expected to be logged twice
+ * for each fold/unfold: in (1) systemui and (2) launcher process.
+ */
+class ATraceLoggerTransitionProgressListener
+@Inject
+internal constructor(@UnfoldTransitionATracePrefix tracePrefix: String) :
+    TransitionProgressListener {
+
+    private val traceName = "$tracePrefix#$UNFOLD_TRANSITION_TRACE_NAME"
+
+    override fun onTransitionStarted() {
+        Trace.beginAsyncSection(traceName, /* cookie= */ 0)
+    }
+
+    override fun onTransitionFinished() {
+        Trace.endAsyncSection(traceName, /* cookie= */ 0)
+    }
+
+    override fun onTransitionProgress(progress: Float) {
+        Trace.setCounter(traceName, (progress * 100).toLong())
+    }
+}
+
+private const val UNFOLD_TRANSITION_TRACE_NAME = "FoldUnfoldTransitionInProgress"
+
+@Qualifier annotation class UnfoldTransitionATracePrefix
diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/util/CallbackController.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/util/CallbackController.kt
new file mode 100644
index 0000000..46ad534
--- /dev/null
+++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/util/CallbackController.kt
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT 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.unfold.util
+
+interface CallbackController<T> {
+    fun addCallback(listener: T)
+    fun removeCallback(listener: T)
+}
diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/util/CurrentActivityTypeProvider.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/util/CurrentActivityTypeProvider.kt
new file mode 100644
index 0000000..d0e6cdc
--- /dev/null
+++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/util/CurrentActivityTypeProvider.kt
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT 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.unfold.util
+
+interface CurrentActivityTypeProvider {
+    val isHomeActivity: Boolean?
+}
+
+class EmptyCurrentActivityTypeProvider(override val isHomeActivity: Boolean? = null) :
+    CurrentActivityTypeProvider
diff --git a/packages/SystemUI/unfold/src/com/android/systemui/unfold/util/ScaleAwareTransitionProgressProvider.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/util/ScaleAwareTransitionProgressProvider.kt
new file mode 100644
index 0000000..5c92b34
--- /dev/null
+++ b/packages/SystemUI/unfold/src/com/android/systemui/unfold/util/ScaleAwareTransitionProgressProvider.kt
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the
+ * License is distributed on an "AS IS" BASIS, WITHOUT 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.unfold.util
+
+import android.animation.ValueAnimator
+import android.content.ContentResolver
+import android.database.ContentObserver
+import android.provider.Settings
+import com.android.systemui.unfold.UnfoldTransitionProgressProvider
+import com.android.systemui.unfold.UnfoldTransitionProgressProvider.TransitionProgressListener
+import dagger.assisted.Assisted
+import dagger.assisted.AssistedFactory
+import dagger.assisted.AssistedInject
+
+/** Wraps [UnfoldTransitionProgressProvider] to disable transitions when animations are disabled. */
+class ScaleAwareTransitionProgressProvider
+@AssistedInject
+constructor(
+    @Assisted progressProviderToWrap: UnfoldTransitionProgressProvider,
+    private val contentResolver: ContentResolver
+) : UnfoldTransitionProgressProvider {
+
+    private val scopedUnfoldTransitionProgressProvider =
+        ScopedUnfoldTransitionProgressProvider(progressProviderToWrap)
+
+    private val animatorDurationScaleObserver =
+        object : ContentObserver(null) {
+            override fun onChange(selfChange: Boolean) {
+                onAnimatorScaleChanged()
+            }
+        }
+
+    init {
+        contentResolver.registerContentObserver(
+            Settings.Global.getUriFor(Settings.Global.ANIMATOR_DURATION_SCALE),
+            /* notifyForDescendants= */ false,
+            animatorDurationScaleObserver)
+        onAnimatorScaleChanged()
+    }
+
+    private fun onAnimatorScaleChanged() {
+        val animationsEnabled = ValueAnimator.areAnimatorsEnabled()
+        scopedUnfoldTransitionProgressProvider.setReadyToHandleTransition(animationsEnabled)
+    }
+
+    override fun addCallback(listener: TransitionProgressListener) {
+        scopedUnfoldTransitionProgressProvider.addCallback(listener)
+    }
+
+    override fun removeCallback(listener: TransitionProgressListener) {
+        scopedUnfoldTransitionProgressProvider.removeCallback(listener)
+    }
+
+    override fun destroy() {
+        contentResolver.unregisterContentObserver(animatorDurationScaleObserver)
+        scopedUnfoldTransitionProgressProvider.destroy()
+    }
+
+    @AssistedFactory
+    interface Factory {
+        fun wrap(
+            progressProvider: UnfoldTransitionProgressProvider
+        ): ScaleAwareTransitionProgressProvider
+    }
+}
diff --git a/packages/SystemUI/shared/src/com/android/systemui/unfold/util/ScopedUnfoldTransitionProgressProvider.kt b/packages/SystemUI/unfold/src/com/android/systemui/unfold/util/ScopedUnfoldTransitionProgressProvider.kt
similarity index 100%
rename from packages/SystemUI/shared/src/com/android/systemui/unfold/util/ScopedUnfoldTransitionProgressProvider.kt
rename to packages/SystemUI/unfold/src/com/android/systemui/unfold/util/ScopedUnfoldTransitionProgressProvider.kt
diff --git a/proto/src/system_messages.proto b/proto/src/system_messages.proto
index dfa34bb..0a4ecb2 100644
--- a/proto/src/system_messages.proto
+++ b/proto/src/system_messages.proto
@@ -286,10 +286,18 @@
     // Package: android
     NOTE_MTE_OVERRIDE_ENABLED = 69;
 
+    // Notify the user that this is a guest session with information
+    // about first login and ephemeral state
+    // Package: android
+    NOTE_GUEST_SESSION = 70;
+
     // Inform the user of notification permissions changes.
     // Package: android
     NOTE_REVIEW_NOTIFICATION_PERMISSIONS = 71;
 
+    // Notify the user to setup their dock
+    NOTE_SETUP_DOCK = 72;
+
     // ADD_NEW_IDS_ABOVE_THIS_LINE
     // Legacy IDs with arbitrary values appear below
     // Legacy IDs existed as stable non-conflicting constants prior to the O release
diff --git a/services/accessibility/java/com/android/server/accessibility/SystemActionPerformer.java b/services/accessibility/java/com/android/server/accessibility/SystemActionPerformer.java
index 803177b..3fa0ab6 100644
--- a/services/accessibility/java/com/android/server/accessibility/SystemActionPerformer.java
+++ b/services/accessibility/java/com/android/server/accessibility/SystemActionPerformer.java
@@ -16,8 +16,6 @@
 
 package com.android.server.accessibility;
 
-import static android.view.WindowManager.ScreenshotSource.SCREENSHOT_ACCESSIBILITY_ACTIONS;
-
 import android.accessibilityservice.AccessibilityService;
 import android.app.PendingIntent;
 import android.app.RemoteAction;
@@ -34,6 +32,7 @@
 import android.view.InputDevice;
 import android.view.KeyCharacterMap;
 import android.view.KeyEvent;
+import android.view.WindowManager;
 import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
 
 import com.android.internal.R;
@@ -392,8 +391,8 @@
     private boolean takeScreenshot() {
         ScreenshotHelper screenshotHelper = (mScreenshotHelperSupplier != null)
                 ? mScreenshotHelperSupplier.get() : new ScreenshotHelper(mContext);
-        screenshotHelper.takeScreenshot(android.view.WindowManager.TAKE_SCREENSHOT_FULLSCREEN,
-                true, true, SCREENSHOT_ACCESSIBILITY_ACTIONS,
+        screenshotHelper.takeScreenshot(WindowManager.TAKE_SCREENSHOT_FULLSCREEN,
+                WindowManager.ScreenshotSource.SCREENSHOT_ACCESSIBILITY_ACTIONS,
                 new Handler(Looper.getMainLooper()), null);
         return true;
     }
diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler.java b/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler.java
index 966d887..dc39b01 100644
--- a/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler.java
+++ b/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler.java
@@ -184,7 +184,12 @@
         mPanningScalingState.mScrollGestureDetector.onTouchEvent(event);
         mPanningScalingState.mScaleGestureDetector.onTouchEvent(event);
 
-        stateHandler.onMotionEvent(event, rawEvent, policyFlags);
+        try {
+            stateHandler.onMotionEvent(event, rawEvent, policyFlags);
+        } catch (GestureException e) {
+            Slog.e(mLogTag, "Error processing motion event", e);
+            clearAndTransitionToStateDetecting();
+        }
     }
 
     @Override
@@ -281,7 +286,8 @@
     }
 
     interface State {
-        void onMotionEvent(MotionEvent event, MotionEvent rawEvent, int policyFlags);
+        void onMotionEvent(MotionEvent event, MotionEvent rawEvent, int policyFlags)
+                throws GestureException;
 
         default void clear() {}
 
@@ -439,7 +445,8 @@
         private boolean mLastMoveOutsideMagnifiedRegion;
 
         @Override
-        public void onMotionEvent(MotionEvent event, MotionEvent rawEvent, int policyFlags) {
+        public void onMotionEvent(MotionEvent event, MotionEvent rawEvent, int policyFlags)
+                throws GestureException {
             final int action = event.getActionMasked();
             switch (action) {
                 case ACTION_POINTER_DOWN: {
@@ -449,7 +456,7 @@
                 break;
                 case ACTION_MOVE: {
                     if (event.getPointerCount() != 1) {
-                        throw new IllegalStateException("Should have one pointer down.");
+                        throw new GestureException("Should have one pointer down.");
                     }
                     final float eventX = event.getX();
                     final float eventY = event.getY();
@@ -475,7 +482,7 @@
 
                 case ACTION_DOWN:
                 case ACTION_POINTER_UP: {
-                    throw new IllegalArgumentException(
+                    throw new GestureException(
                             "Unexpected event type: " + MotionEvent.actionToString(action));
                 }
             }
@@ -1087,4 +1094,13 @@
             mGestureHandler.mDetectingState.setShortcutTriggered(false);
         }
     }
+
+    /**
+     * Indicates an error with a gesture handler or state.
+     */
+    private static class GestureException extends Exception {
+        GestureException(String message) {
+            super(message);
+        }
+    }
 }
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
index 8fe57e18..38237fa 100644
--- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
+++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
@@ -123,6 +123,7 @@
 import com.android.internal.util.DumpUtils;
 import com.android.internal.widget.IRemoteViewsFactory;
 import com.android.server.LocalServices;
+import com.android.server.ServiceThread;
 import com.android.server.WidgetBackupProvider;
 
 import org.xmlpull.v1.XmlPullParser;
@@ -266,7 +267,10 @@
         mDevicePolicyManagerInternal = LocalServices.getService(DevicePolicyManagerInternal.class);
         mPackageManagerInternal = LocalServices.getService(PackageManagerInternal.class);
         mSaveStateHandler = BackgroundThread.getHandler();
-        mCallbackHandler = new CallbackHandler(mContext.getMainLooper());
+        final ServiceThread serviceThread = new ServiceThread(TAG,
+                android.os.Process.THREAD_PRIORITY_FOREGROUND, false /* allowIo */);
+        serviceThread.start();
+        mCallbackHandler = new CallbackHandler(serviceThread.getLooper());
         mBackupRestoreController = new BackupRestoreController();
         mSecurityPolicy = new SecurityPolicy();
         mIsProviderInfoPersisted = !ActivityManager.isLowRamDeviceStatic()
@@ -307,26 +311,26 @@
         packageFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
         packageFilter.addDataScheme("package");
         mContext.registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL,
-                packageFilter, null, null);
+                packageFilter, null, mCallbackHandler);
 
         // Register for events related to sdcard installation.
         IntentFilter sdFilter = new IntentFilter();
         sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE);
         sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE);
         mContext.registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL,
-                sdFilter, null, null);
+                sdFilter, null, mCallbackHandler);
 
         IntentFilter offModeFilter = new IntentFilter();
         offModeFilter.addAction(Intent.ACTION_MANAGED_PROFILE_AVAILABLE);
         offModeFilter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE);
         mContext.registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL,
-                offModeFilter, null, null);
+                offModeFilter, null, mCallbackHandler);
 
         IntentFilter suspendPackageFilter = new IntentFilter();
         suspendPackageFilter.addAction(Intent.ACTION_PACKAGES_SUSPENDED);
         suspendPackageFilter.addAction(Intent.ACTION_PACKAGES_UNSUSPENDED);
         mContext.registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL,
-                suspendPackageFilter, null, null);
+                suspendPackageFilter, null, mCallbackHandler);
     }
 
     private void registerOnCrossProfileProvidersChangedListener() {
@@ -1105,10 +1109,7 @@
             registerForBroadcastsLocked(provider, getWidgetIds(provider.widgets));
 
             saveGroupStateAsync(userId);
-
-            if (DEBUG) {
-                Slog.i(TAG, "Bound widget " + appWidgetId + " to provider " + provider.id);
-            }
+            Slog.i(TAG, "Bound widget " + appWidgetId + " to provider " + provider.id);
         }
 
         return true;
@@ -1218,11 +1219,12 @@
             try {
                 // Ask ActivityManager to bind it. Notice that we are binding the service with the
                 // caller app instead of DevicePolicyManagerService.
-                if(ActivityManager.getService().bindService(
+                if (ActivityManager.getService().bindService(
                         caller, activtiyToken, intent,
                         intent.resolveTypeIfNeeded(mContext.getContentResolver()),
-                        connection, flags, mContext.getOpPackageName(),
-                        widget.provider.getUserId()) != 0) {
+                        connection, flags & (Context.BIND_AUTO_CREATE
+                                | Context.BIND_FOREGROUND_SERVICE_WHILE_AWAKE),
+                        mContext.getOpPackageName(), widget.provider.getUserId()) != 0) {
 
                     // Add it to the mapping of RemoteViewsService to appWidgetIds so that we
                     // can determine when we can call back to the RemoteViewsService later to
@@ -4191,6 +4193,10 @@
         IAppWidgetHost callbacks;
         boolean zombie; // if we're in safe mode, don't prune this just because nobody references it
 
+        private static final boolean DEBUG = true;
+
+        private static final String TAG = "AppWidgetServiceHost";
+
         int tag = TAG_UNDEFINED; // for use while saving state (the index)
         // Sequence no for the last update successfully sent. This is updated whenever a
         // widget update is successfully sent to the host callbacks. As all new/undelivered updates
@@ -4261,6 +4267,11 @@
             final SparseArray<String> uids = new SparseArray<>();
             for (int i = widgets.size() - 1; i >= 0; i--) {
                 final Widget widget = widgets.get(i);
+                if (widget.provider == null) {
+                    if (DEBUG) {
+                        Slog.e(TAG, "Widget with no provider " + widget.toString());
+                    }
+                }
                 final ProviderId providerId = widget.provider.id;
                 uids.put(providerId.uid, providerId.componentName.getPackageName());
             }
diff --git a/services/art-profile b/services/art-profile
index cb9dbb5..2a8353d 100644
--- a/services/art-profile
+++ b/services/art-profile
@@ -2,9 +2,13 @@
 HPLandroid/app/usage/UsageStatsManagerInternal$AppUsageLimitData;->getTotalUsageLimit()J
 PLandroid/app/usage/UsageStatsManagerInternal$AppUsageLimitData;->getUsageRemaining()J
 HSPLandroid/app/usage/UsageStatsManagerInternal;-><init>()V
+PLandroid/content/pm/PackageManagerInternal$InstalledLoadingProgressCallback$LoadingProgressCallbackBinder$$ExternalSyntheticLambda0;-><init>()V
+PLandroid/content/pm/PackageManagerInternal$InstalledLoadingProgressCallback$LoadingProgressCallbackBinder$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLandroid/content/pm/PackageManagerInternal$InstalledLoadingProgressCallback$LoadingProgressCallbackBinder;-><init>(Landroid/content/pm/PackageManagerInternal$InstalledLoadingProgressCallback;)V
 PLandroid/content/pm/PackageManagerInternal$InstalledLoadingProgressCallback$LoadingProgressCallbackBinder;-><init>(Landroid/content/pm/PackageManagerInternal$InstalledLoadingProgressCallback;Landroid/content/pm/PackageManagerInternal$InstalledLoadingProgressCallback$LoadingProgressCallbackBinder-IA;)V
+PLandroid/content/pm/PackageManagerInternal$InstalledLoadingProgressCallback$LoadingProgressCallbackBinder;->onPackageLoadingProgressChanged(F)V
 PLandroid/content/pm/PackageManagerInternal$InstalledLoadingProgressCallback;-><init>(Landroid/os/Handler;)V
+PLandroid/content/pm/PackageManagerInternal$InstalledLoadingProgressCallback;->getBinder()Landroid/os/IBinder;
 PLandroid/content/pm/PackageManagerInternal$PackageListObserver;->onPackageChanged(Ljava/lang/String;I)V
 HSPLandroid/content/pm/PackageManagerInternal;-><init>()V
 PLandroid/content/pm/PackageManagerInternal;->getPackageList()Lcom/android/server/pm/PackageList;
@@ -14,7 +18,7 @@
 HPLandroid/hardware/audio/common/V2_0/AudioOffloadInfo;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
 HSPLandroid/hardware/audio/common/V2_0/Uuid;-><init>()V
 HSPLandroid/hardware/audio/common/V2_0/Uuid;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-PLandroid/hardware/audio/common/V2_0/Uuid;->writeEmbeddedToBlob(Landroid/os/HwBlob;J)V
+HPLandroid/hardware/audio/common/V2_0/Uuid;->writeEmbeddedToBlob(Landroid/os/HwBlob;J)V
 HSPLandroid/hardware/authsecret/V1_0/IAuthSecret$Proxy;-><init>(Landroid/os/IHwBinder;)V
 HSPLandroid/hardware/authsecret/V1_0/IAuthSecret$Proxy;->interfaceChain()Ljava/util/ArrayList;
 HPLandroid/hardware/authsecret/V1_0/IAuthSecret$Proxy;->primaryUserCredential(Ljava/util/ArrayList;)V
@@ -36,7 +40,7 @@
 HSPLandroid/hardware/biometrics/common/ComponentInfo;-><init>()V
 HSPLandroid/hardware/biometrics/common/ComponentInfo;->readFromParcel(Landroid/os/Parcel;)V
 HPLandroid/hardware/biometrics/common/ICancellationSignal$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/hardware/biometrics/common/ICancellationSignal$Stub$Proxy;->cancel()V
+HPLandroid/hardware/biometrics/common/ICancellationSignal$Stub$Proxy;->cancel()V
 HPLandroid/hardware/biometrics/common/ICancellationSignal$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/biometrics/common/ICancellationSignal;
 PLandroid/hardware/biometrics/common/ICancellationSignal;-><clinit>()V
 PLandroid/hardware/biometrics/common/OperationContext$1;-><init>()V
@@ -62,7 +66,7 @@
 PLandroid/hardware/biometrics/face/EnrollmentFrame$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 PLandroid/hardware/biometrics/face/EnrollmentFrame;-><clinit>()V
 PLandroid/hardware/biometrics/face/EnrollmentFrame;-><init>()V
-PLandroid/hardware/biometrics/face/EnrollmentFrame;->readFromParcel(Landroid/os/Parcel;)V
+HPLandroid/hardware/biometrics/face/EnrollmentFrame;->readFromParcel(Landroid/os/Parcel;)V
 HSPLandroid/hardware/biometrics/face/IFace$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 PLandroid/hardware/biometrics/face/IFace$Stub$Proxy;->asBinder()Landroid/os/IBinder;
 PLandroid/hardware/biometrics/face/IFace$Stub$Proxy;->createSession(IILandroid/hardware/biometrics/face/ISessionCallback;)Landroid/hardware/biometrics/face/ISession;
@@ -81,8 +85,9 @@
 PLandroid/hardware/biometrics/face/ISession$Stub$Proxy;->getAuthenticatorId()V
 PLandroid/hardware/biometrics/face/ISession$Stub$Proxy;->getFeatures()V
 PLandroid/hardware/biometrics/face/ISession$Stub$Proxy;->removeEnrollments([I)V
-PLandroid/hardware/biometrics/face/ISession$Stub$Proxy;->resetLockout(Landroid/hardware/keymaster/HardwareAuthToken;)V
+HPLandroid/hardware/biometrics/face/ISession$Stub$Proxy;->resetLockout(Landroid/hardware/keymaster/HardwareAuthToken;)V
 PLandroid/hardware/biometrics/face/ISession$Stub$Proxy;->revokeChallenge(J)V
+PLandroid/hardware/biometrics/face/ISession$Stub$Proxy;->setFeature(Landroid/hardware/keymaster/HardwareAuthToken;BZ)V
 PLandroid/hardware/biometrics/face/ISession$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/biometrics/face/ISession;
 PLandroid/hardware/biometrics/face/ISession;-><clinit>()V
 PLandroid/hardware/biometrics/face/ISessionCallback$Stub;-><init>()V
@@ -113,7 +118,7 @@
 PLandroid/hardware/biometrics/face/V1_0/IBiometricsFace;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/biometrics/face/V1_0/IBiometricsFace;
 PLandroid/hardware/biometrics/face/V1_0/IBiometricsFace;->getService()Landroid/hardware/biometrics/face/V1_0/IBiometricsFace;
 PLandroid/hardware/biometrics/face/V1_0/IBiometricsFace;->getService(Ljava/lang/String;)Landroid/hardware/biometrics/face/V1_0/IBiometricsFace;
-PLandroid/hardware/biometrics/face/V1_0/IBiometricsFaceClientCallback$Stub;-><init>()V
+HSPLandroid/hardware/biometrics/face/V1_0/IBiometricsFaceClientCallback$Stub;-><init>()V
 PLandroid/hardware/biometrics/face/V1_0/IBiometricsFaceClientCallback$Stub;->asBinder()Landroid/os/IHwBinder;
 PLandroid/hardware/biometrics/face/V1_0/IBiometricsFaceClientCallback$Stub;->onTransact(ILandroid/os/HwParcel;Landroid/os/HwParcel;I)V
 PLandroid/hardware/biometrics/face/V1_0/OptionalBool;-><init>()V
@@ -173,6 +178,7 @@
 PLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint$Proxy;->enumerate()I
 PLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint$Proxy;->getAuthenticatorId()J
 PLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint$Proxy;->interfaceChain()Ljava/util/ArrayList;
+PLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint$Proxy;->preEnroll()J
 PLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint$Proxy;->setActiveGroup(ILjava/lang/String;)I
 PLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint$Proxy;->setNotify(Landroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprintClientCallback;)J
 PLandroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/biometrics/fingerprint/V2_1/IBiometricsFingerprint;
@@ -211,9 +217,9 @@
 HSPLandroid/hardware/health/IHealth$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/hardware/health/IHealth$Stub$Proxy;->asBinder()Landroid/os/IBinder;
 HPLandroid/hardware/health/IHealth$Stub$Proxy;->getCapacity()I+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
-HPLandroid/hardware/health/IHealth$Stub$Proxy;->getChargeCounterUah()I
+HPLandroid/hardware/health/IHealth$Stub$Proxy;->getChargeCounterUah()I+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HPLandroid/hardware/health/IHealth$Stub$Proxy;->getChargeStatus()I
-HPLandroid/hardware/health/IHealth$Stub$Proxy;->getCurrentAverageMicroamps()I
+HPLandroid/hardware/health/IHealth$Stub$Proxy;->getCurrentAverageMicroamps()I+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HPLandroid/hardware/health/IHealth$Stub$Proxy;->getCurrentNowMicroamps()I+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/os/Parcel;Landroid/os/Parcel;
 HPLandroid/hardware/health/IHealth$Stub$Proxy;->getEnergyCounterNwh()J
 HPLandroid/hardware/health/IHealth$Stub$Proxy;->getHealthInfo()Landroid/hardware/health/HealthInfo;
@@ -239,19 +245,19 @@
 HSPLandroid/hardware/health/Translate;->h2aTranslate(Landroid/hardware/health/V2_1/HealthInfo;)Landroid/hardware/health/HealthInfo;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/hardware/health/Translate;->h2aTranslateInternal(Landroid/hardware/health/HealthInfo;Landroid/hardware/health/V1_0/HealthInfo;)V
 HSPLandroid/hardware/health/V1_0/HealthInfo;-><init>()V
-HSPLandroid/hardware/health/V1_0/HealthInfo;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HSPLandroid/hardware/health/V1_0/HealthInfo;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V+]Ljava/lang/String;Ljava/lang/String;]Landroid/os/HwBlob;Landroid/os/HwBlob;]Landroid/os/HwParcel;Landroid/os/HwParcel;
 HSPLandroid/hardware/health/V2_0/DiskStats;-><init>()V
-HSPLandroid/hardware/health/V2_0/DiskStats;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HSPLandroid/hardware/health/V2_0/DiskStats;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V+]Landroid/os/HwBlob;Landroid/os/HwBlob;]Landroid/hardware/health/V2_0/StorageAttribute;Landroid/hardware/health/V2_0/StorageAttribute;
 HSPLandroid/hardware/health/V2_0/HealthInfo;-><init>()V
 HSPLandroid/hardware/health/V2_0/HealthInfo;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V+]Landroid/os/HwBlob;Landroid/os/HwBlob;]Landroid/hardware/health/V2_0/DiskStats;Landroid/hardware/health/V2_0/DiskStats;]Landroid/hardware/health/V1_0/HealthInfo;Landroid/hardware/health/V1_0/HealthInfo;]Landroid/hardware/health/V2_0/StorageInfo;Landroid/hardware/health/V2_0/StorageInfo;]Landroid/os/HwParcel;Landroid/os/HwParcel;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLandroid/hardware/health/V2_0/HealthInfo;->readFromParcel(Landroid/os/HwParcel;)V
 HSPLandroid/hardware/health/V2_0/IHealth$Proxy;-><init>(Landroid/os/IHwBinder;)V
 HSPLandroid/hardware/health/V2_0/IHealth$Proxy;->asBinder()Landroid/os/IHwBinder;
 HSPLandroid/hardware/health/V2_0/IHealth$Proxy;->equals(Ljava/lang/Object;)Z
-HPLandroid/hardware/health/V2_0/IHealth$Proxy;->getCapacity(Landroid/hardware/health/V2_0/IHealth$getCapacityCallback;)V
-HPLandroid/hardware/health/V2_0/IHealth$Proxy;->getChargeCounter(Landroid/hardware/health/V2_0/IHealth$getChargeCounterCallback;)V
+HPLandroid/hardware/health/V2_0/IHealth$Proxy;->getCapacity(Landroid/hardware/health/V2_0/IHealth$getCapacityCallback;)V+]Landroid/hardware/health/V2_0/IHealth$getCapacityCallback;Lcom/android/server/health/HealthServiceWrapperHidl$$ExternalSyntheticLambda3;]Landroid/os/IHwBinder;Landroid/os/HwRemoteBinder;]Landroid/os/HwParcel;Landroid/os/HwParcel;
+HPLandroid/hardware/health/V2_0/IHealth$Proxy;->getChargeCounter(Landroid/hardware/health/V2_0/IHealth$getChargeCounterCallback;)V+]Landroid/hardware/health/V2_0/IHealth$getChargeCounterCallback;Lcom/android/server/health/HealthServiceWrapperHidl$$ExternalSyntheticLambda0;]Landroid/os/IHwBinder;Landroid/os/HwRemoteBinder;]Landroid/os/HwParcel;Landroid/os/HwParcel;
 HPLandroid/hardware/health/V2_0/IHealth$Proxy;->getChargeStatus(Landroid/hardware/health/V2_0/IHealth$getChargeStatusCallback;)V
-HPLandroid/hardware/health/V2_0/IHealth$Proxy;->getCurrentAverage(Landroid/hardware/health/V2_0/IHealth$getCurrentAverageCallback;)V
+HPLandroid/hardware/health/V2_0/IHealth$Proxy;->getCurrentAverage(Landroid/hardware/health/V2_0/IHealth$getCurrentAverageCallback;)V+]Landroid/hardware/health/V2_0/IHealth$getCurrentAverageCallback;Lcom/android/server/health/HealthServiceWrapperHidl$$ExternalSyntheticLambda2;]Landroid/os/IHwBinder;Landroid/os/HwRemoteBinder;]Landroid/os/HwParcel;Landroid/os/HwParcel;
 HPLandroid/hardware/health/V2_0/IHealth$Proxy;->getCurrentNow(Landroid/hardware/health/V2_0/IHealth$getCurrentNowCallback;)V
 HPLandroid/hardware/health/V2_0/IHealth$Proxy;->getEnergyCounter(Landroid/hardware/health/V2_0/IHealth$getEnergyCounterCallback;)V
 HPLandroid/hardware/health/V2_0/IHealth$Proxy;->getHealthInfo(Landroid/hardware/health/V2_0/IHealth$getHealthInfoCallback;)V
@@ -263,30 +269,30 @@
 HSPLandroid/hardware/health/V2_0/StorageAttribute;-><init>()V
 HSPLandroid/hardware/health/V2_0/StorageAttribute;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V+]Ljava/lang/String;Ljava/lang/String;]Landroid/os/HwBlob;Landroid/os/HwBlob;]Landroid/os/HwParcel;Landroid/os/HwParcel;
 HSPLandroid/hardware/health/V2_0/StorageInfo;-><init>()V
-HSPLandroid/hardware/health/V2_0/StorageInfo;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HSPLandroid/hardware/health/V2_0/StorageInfo;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V+]Ljava/lang/String;Ljava/lang/String;]Landroid/os/HwBlob;Landroid/os/HwBlob;]Landroid/hardware/health/V2_0/StorageAttribute;Landroid/hardware/health/V2_0/StorageAttribute;]Landroid/os/HwParcel;Landroid/os/HwParcel;
 HSPLandroid/hardware/health/V2_1/HealthInfo;-><init>()V
-HSPLandroid/hardware/health/V2_1/HealthInfo;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HSPLandroid/hardware/health/V2_1/HealthInfo;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V+]Landroid/os/HwBlob;Landroid/os/HwBlob;]Landroid/hardware/health/V2_0/HealthInfo;Landroid/hardware/health/V2_0/HealthInfo;
 HSPLandroid/hardware/health/V2_1/HealthInfo;->readFromParcel(Landroid/os/HwParcel;)V
 HSPLandroid/hardware/health/V2_1/IHealthInfoCallback$Stub;-><init>()V
 HSPLandroid/hardware/health/V2_1/IHealthInfoCallback$Stub;->asBinder()Landroid/os/IHwBinder;
 HSPLandroid/hardware/health/V2_1/IHealthInfoCallback$Stub;->interfaceChain()Ljava/util/ArrayList;
-HSPLandroid/hardware/health/V2_1/IHealthInfoCallback$Stub;->onTransact(ILandroid/os/HwParcel;Landroid/os/HwParcel;I)V
+HSPLandroid/hardware/health/V2_1/IHealthInfoCallback$Stub;->onTransact(ILandroid/os/HwParcel;Landroid/os/HwParcel;I)V+]Landroid/hardware/health/V2_1/IHealthInfoCallback;Lcom/android/server/health/HealthHalCallbackHidl;]Landroid/hardware/health/V2_1/HealthInfo;Landroid/hardware/health/V2_1/HealthInfo;]Landroid/os/HwParcel;Landroid/os/HwParcel;
 HSPLandroid/hardware/ir/IConsumerIr$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/ir/IConsumerIr;
 HSPLandroid/hardware/ir/IConsumerIr;-><clinit>()V
 PLandroid/hardware/keymaster/HardwareAuthToken$1;-><init>()V
-PLandroid/hardware/keymaster/HardwareAuthToken$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/keymaster/HardwareAuthToken;
+HPLandroid/hardware/keymaster/HardwareAuthToken$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/keymaster/HardwareAuthToken;
 PLandroid/hardware/keymaster/HardwareAuthToken$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 PLandroid/hardware/keymaster/HardwareAuthToken;-><clinit>()V
 HPLandroid/hardware/keymaster/HardwareAuthToken;-><init>()V
 HPLandroid/hardware/keymaster/HardwareAuthToken;->readFromParcel(Landroid/os/Parcel;)V
 HPLandroid/hardware/keymaster/HardwareAuthToken;->writeToParcel(Landroid/os/Parcel;I)V
 PLandroid/hardware/keymaster/Timestamp$1;-><init>()V
-PLandroid/hardware/keymaster/Timestamp$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/keymaster/Timestamp;
+HPLandroid/hardware/keymaster/Timestamp$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/keymaster/Timestamp;
 PLandroid/hardware/keymaster/Timestamp$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 PLandroid/hardware/keymaster/Timestamp;-><clinit>()V
 PLandroid/hardware/keymaster/Timestamp;-><init>()V
 HPLandroid/hardware/keymaster/Timestamp;->readFromParcel(Landroid/os/Parcel;)V
-PLandroid/hardware/keymaster/Timestamp;->writeToParcel(Landroid/os/Parcel;I)V
+HPLandroid/hardware/keymaster/Timestamp;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/hardware/light/HwLight$1;-><init>()V
 HSPLandroid/hardware/light/HwLight$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/light/HwLight;
 HSPLandroid/hardware/light/HwLight$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
@@ -348,7 +354,7 @@
 HSPLandroid/hardware/power/stats/EnergyMeasurement$1;-><init>()V
 HPLandroid/hardware/power/stats/EnergyMeasurement$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/power/stats/EnergyMeasurement;+]Landroid/hardware/power/stats/EnergyMeasurement;Landroid/hardware/power/stats/EnergyMeasurement;
 HPLandroid/hardware/power/stats/EnergyMeasurement$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/hardware/power/stats/EnergyMeasurement$1;Landroid/hardware/power/stats/EnergyMeasurement$1;
-PLandroid/hardware/power/stats/EnergyMeasurement$1;->newArray(I)[Landroid/hardware/power/stats/EnergyMeasurement;
+HPLandroid/hardware/power/stats/EnergyMeasurement$1;->newArray(I)[Landroid/hardware/power/stats/EnergyMeasurement;
 HPLandroid/hardware/power/stats/EnergyMeasurement$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/hardware/power/stats/EnergyMeasurement;-><clinit>()V
 HPLandroid/hardware/power/stats/EnergyMeasurement;-><init>()V
@@ -389,15 +395,15 @@
 HSPLandroid/hardware/power/stats/StateResidencyResult$1;-><init>()V
 HPLandroid/hardware/power/stats/StateResidencyResult$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/power/stats/StateResidencyResult;+]Landroid/hardware/power/stats/StateResidencyResult;Landroid/hardware/power/stats/StateResidencyResult;
 HPLandroid/hardware/power/stats/StateResidencyResult$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/hardware/power/stats/StateResidencyResult$1;Landroid/hardware/power/stats/StateResidencyResult$1;
-PLandroid/hardware/power/stats/StateResidencyResult$1;->newArray(I)[Landroid/hardware/power/stats/StateResidencyResult;
+HPLandroid/hardware/power/stats/StateResidencyResult$1;->newArray(I)[Landroid/hardware/power/stats/StateResidencyResult;
 HPLandroid/hardware/power/stats/StateResidencyResult$1;->newArray(I)[Ljava/lang/Object;
 HSPLandroid/hardware/power/stats/StateResidencyResult;-><clinit>()V
 HPLandroid/hardware/power/stats/StateResidencyResult;-><init>()V
 HPLandroid/hardware/power/stats/StateResidencyResult;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 PLandroid/hardware/soundtrigger/V2_0/ConfidenceLevel;-><init>()V
 PLandroid/hardware/soundtrigger/V2_0/ConfidenceLevel;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-PLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Phrase;-><init>()V
-PLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Phrase;->writeEmbeddedToBlob(Landroid/os/HwBlob;J)V
+HPLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Phrase;-><init>()V
+HPLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Phrase;->writeEmbeddedToBlob(Landroid/os/HwBlob;J)V
 HSPLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Properties;-><init>()V
 HSPLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Properties;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
 HSPLandroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Proxy;-><init>(Landroid/os/IHwBinder;)V
@@ -415,17 +421,17 @@
 HPLandroid/hardware/soundtrigger/V2_0/PhraseRecognitionExtra;-><init>()V
 HPLandroid/hardware/soundtrigger/V2_0/PhraseRecognitionExtra;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
 HPLandroid/hardware/soundtrigger/V2_0/PhraseRecognitionExtra;->writeEmbeddedToBlob(Landroid/os/HwBlob;J)V
-PLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$PhraseSoundModel;-><init>()V
-PLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$PhraseSoundModel;->writeEmbeddedToBlob(Landroid/os/HwBlob;J)V
-PLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$PhraseSoundModel;->writeToParcel(Landroid/os/HwParcel;)V
+HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$PhraseSoundModel;-><init>()V
+HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$PhraseSoundModel;->writeEmbeddedToBlob(Landroid/os/HwBlob;J)V
+HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$PhraseSoundModel;->writeToParcel(Landroid/os/HwParcel;)V
 HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$RecognitionConfig;-><init>()V
 HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$RecognitionConfig;->writeEmbeddedToBlob(Landroid/os/HwBlob;J)V
-PLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$SoundModel;-><init>()V
-PLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$SoundModel;->writeEmbeddedToBlob(Landroid/os/HwBlob;J)V
+HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$SoundModel;-><init>()V
+HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$SoundModel;->writeEmbeddedToBlob(Landroid/os/HwBlob;J)V
 PLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$SoundModel;->writeToParcel(Landroid/os/HwParcel;)V
 HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$PhraseRecognitionEvent;-><init>()V
 HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$PhraseRecognitionEvent;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
-PLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$PhraseRecognitionEvent;->readFromParcel(Landroid/os/HwParcel;)V
+HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$PhraseRecognitionEvent;->readFromParcel(Landroid/os/HwParcel;)V
 HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$RecognitionEvent;-><init>()V
 HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$RecognitionEvent;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
 HPLandroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$RecognitionEvent;->readFromParcel(Landroid/os/HwParcel;)V
@@ -436,7 +442,7 @@
 HPLandroid/hardware/soundtrigger/V2_3/ISoundTriggerHw$Proxy;->getModelState(I)I
 HSPLandroid/hardware/soundtrigger/V2_3/ISoundTriggerHw$Proxy;->getProperties_2_3(Landroid/hardware/soundtrigger/V2_3/ISoundTriggerHw$getProperties_2_3Callback;)V
 HSPLandroid/hardware/soundtrigger/V2_3/ISoundTriggerHw$Proxy;->interfaceChain()Ljava/util/ArrayList;
-PLandroid/hardware/soundtrigger/V2_3/ISoundTriggerHw$Proxy;->loadPhraseSoundModel_2_1(Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$PhraseSoundModel;Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback;ILandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$loadPhraseSoundModel_2_1Callback;)V
+HPLandroid/hardware/soundtrigger/V2_3/ISoundTriggerHw$Proxy;->loadPhraseSoundModel_2_1(Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$PhraseSoundModel;Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback;ILandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$loadPhraseSoundModel_2_1Callback;)V
 HPLandroid/hardware/soundtrigger/V2_3/ISoundTriggerHw$Proxy;->loadSoundModel_2_1(Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$SoundModel;Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback;ILandroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$loadSoundModel_2_1Callback;)V
 HPLandroid/hardware/soundtrigger/V2_3/ISoundTriggerHw$Proxy;->startRecognition_2_3(ILandroid/hardware/soundtrigger/V2_3/RecognitionConfig;)I
 HPLandroid/hardware/soundtrigger/V2_3/ISoundTriggerHw$Proxy;->stopRecognition(I)I
@@ -450,21 +456,41 @@
 HPLandroid/hardware/soundtrigger/V2_3/RecognitionConfig;->writeToParcel(Landroid/os/HwParcel;)V
 HSPLandroid/hardware/usb/IUsb$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLandroid/hardware/usb/IUsb$Stub$Proxy;->queryPortStatus(J)V
+PLandroid/hardware/usb/IUsb$Stub$Proxy;->resetUsbPort(Ljava/lang/String;J)V
 HSPLandroid/hardware/usb/IUsb$Stub$Proxy;->setCallback(Landroid/hardware/usb/IUsbCallback;)V
+PLandroid/hardware/usb/IUsb$Stub$Proxy;->switchRole(Ljava/lang/String;Landroid/hardware/usb/PortRole;J)V
 HSPLandroid/hardware/usb/IUsb$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/usb/IUsb;
 HSPLandroid/hardware/usb/IUsb;-><clinit>()V
 HSPLandroid/hardware/usb/IUsbCallback$Stub;-><init>()V
 HSPLandroid/hardware/usb/IUsbCallback$Stub;->asBinder()Landroid/os/IBinder;
-HSPLandroid/hardware/usb/IUsbCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLandroid/hardware/usb/IUsbCallback$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z+]Landroid/hardware/usb/IUsbCallback;Lcom/android/server/usb/hal/port/UsbPortAidl$HALCallback;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/hardware/usb/IUsbCallback;-><clinit>()V
+PLandroid/hardware/usb/PortRole$1;-><init>()V
+PLandroid/hardware/usb/PortRole$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/usb/PortRole;
+PLandroid/hardware/usb/PortRole$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+PLandroid/hardware/usb/PortRole;-><clinit>()V
+PLandroid/hardware/usb/PortRole;-><init>()V
+PLandroid/hardware/usb/PortRole;-><init>(Landroid/os/Parcel;)V
+PLandroid/hardware/usb/PortRole;-><init>(Landroid/os/Parcel;Landroid/hardware/usb/PortRole-IA;)V
+PLandroid/hardware/usb/PortRole;->_assertTag(I)V
+PLandroid/hardware/usb/PortRole;->_set(ILjava/lang/Object;)V
+PLandroid/hardware/usb/PortRole;->getDataRole()B
+PLandroid/hardware/usb/PortRole;->getMode()B
+PLandroid/hardware/usb/PortRole;->getPowerRole()B
+PLandroid/hardware/usb/PortRole;->getTag()I
+PLandroid/hardware/usb/PortRole;->readFromParcel(Landroid/os/Parcel;)V
+PLandroid/hardware/usb/PortRole;->setDataRole(B)V
+PLandroid/hardware/usb/PortRole;->setMode(B)V
+PLandroid/hardware/usb/PortRole;->setPowerRole(B)V
+PLandroid/hardware/usb/PortRole;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLandroid/hardware/usb/PortStatus$1;-><init>()V
-HSPLandroid/hardware/usb/PortStatus$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/usb/PortStatus;
-HSPLandroid/hardware/usb/PortStatus$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
+HSPLandroid/hardware/usb/PortStatus$1;->createFromParcel(Landroid/os/Parcel;)Landroid/hardware/usb/PortStatus;+]Landroid/hardware/usb/PortStatus;Landroid/hardware/usb/PortStatus;
+HSPLandroid/hardware/usb/PortStatus$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;+]Landroid/hardware/usb/PortStatus$1;Landroid/hardware/usb/PortStatus$1;
 HSPLandroid/hardware/usb/PortStatus$1;->newArray(I)[Landroid/hardware/usb/PortStatus;
-HSPLandroid/hardware/usb/PortStatus$1;->newArray(I)[Ljava/lang/Object;
+HSPLandroid/hardware/usb/PortStatus$1;->newArray(I)[Ljava/lang/Object;+]Landroid/hardware/usb/PortStatus$1;Landroid/hardware/usb/PortStatus$1;
 HSPLandroid/hardware/usb/PortStatus;-><clinit>()V
 HSPLandroid/hardware/usb/PortStatus;-><init>()V
-HSPLandroid/hardware/usb/PortStatus;->readFromParcel(Landroid/os/Parcel;)V
+HSPLandroid/hardware/usb/PortStatus;->readFromParcel(Landroid/os/Parcel;)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 PLandroid/hardware/usb/V1_0/IUsb$Proxy;-><init>(Landroid/os/IHwBinder;)V
 PLandroid/hardware/usb/V1_0/IUsb$Proxy;->asBinder()Landroid/os/IHwBinder;
 PLandroid/hardware/usb/V1_0/IUsb$Proxy;->interfaceChain()Ljava/util/ArrayList;
@@ -502,11 +528,11 @@
 HSPLandroid/hardware/weaver/V1_0/WeaverConfig;-><init>()V
 HSPLandroid/hardware/weaver/V1_0/WeaverConfig;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
 HSPLandroid/hardware/weaver/V1_0/WeaverConfig;->readFromParcel(Landroid/os/HwParcel;)V
-PLandroid/hardware/weaver/V1_0/WeaverReadResponse;-><init>()V
+HPLandroid/hardware/weaver/V1_0/WeaverReadResponse;-><init>()V
 HPLandroid/hardware/weaver/V1_0/WeaverReadResponse;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
 PLandroid/hardware/weaver/V1_0/WeaverReadResponse;->readFromParcel(Landroid/os/HwParcel;)V
 HSPLandroid/hidl/manager/V1_0/IServiceManager$InstanceDebugInfo;-><init>()V
-HSPLandroid/hidl/manager/V1_0/IServiceManager$InstanceDebugInfo;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V
+HSPLandroid/hidl/manager/V1_0/IServiceManager$InstanceDebugInfo;->readEmbeddedFromParcel(Landroid/os/HwParcel;Landroid/os/HwBlob;J)V+]Ljava/lang/String;Ljava/lang/String;]Landroid/os/HwBlob;Landroid/os/HwBlob;]Landroid/os/HwParcel;Landroid/os/HwParcel;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLandroid/hidl/manager/V1_0/IServiceManager$InstanceDebugInfo;->readVectorFromParcel(Landroid/os/HwParcel;)Ljava/util/ArrayList;
 HSPLandroid/hidl/manager/V1_0/IServiceManager$Proxy;-><init>(Landroid/os/IHwBinder;)V
 HSPLandroid/hidl/manager/V1_0/IServiceManager$Proxy;->debugDump()Ljava/util/ArrayList;
@@ -523,8 +549,8 @@
 HSPLandroid/net/ConnectivityModuleConnector$DependenciesImpl;->getModuleServiceIntent(Landroid/content/pm/PackageManager;Ljava/lang/String;Ljava/lang/String;Z)Landroid/content/Intent;
 HSPLandroid/net/ConnectivityModuleConnector$ModuleServiceConnection;-><init>(Landroid/net/ConnectivityModuleConnector;Ljava/lang/String;Landroid/net/ConnectivityModuleConnector$ModuleServiceCallback;)V
 HSPLandroid/net/ConnectivityModuleConnector$ModuleServiceConnection;-><init>(Landroid/net/ConnectivityModuleConnector;Ljava/lang/String;Landroid/net/ConnectivityModuleConnector$ModuleServiceCallback;Landroid/net/ConnectivityModuleConnector$ModuleServiceConnection-IA;)V
-PLandroid/net/ConnectivityModuleConnector$ModuleServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
-PLandroid/net/ConnectivityModuleConnector;->-$$Nest$mlogi(Landroid/net/ConnectivityModuleConnector;Ljava/lang/String;)V
+HSPLandroid/net/ConnectivityModuleConnector$ModuleServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HSPLandroid/net/ConnectivityModuleConnector;->-$$Nest$mlogi(Landroid/net/ConnectivityModuleConnector;Ljava/lang/String;)V
 HSPLandroid/net/ConnectivityModuleConnector;->-$$Nest$smcheckModuleServicePermission(Landroid/content/pm/PackageManager;Landroid/content/ComponentName;Ljava/lang/String;)V
 HSPLandroid/net/ConnectivityModuleConnector;-><clinit>()V
 HSPLandroid/net/ConnectivityModuleConnector;-><init>()V
@@ -533,7 +559,7 @@
 HSPLandroid/net/ConnectivityModuleConnector;->getInstance()Landroid/net/ConnectivityModuleConnector;
 HSPLandroid/net/ConnectivityModuleConnector;->init(Landroid/content/Context;)V
 HSPLandroid/net/ConnectivityModuleConnector;->log(Ljava/lang/String;)V
-PLandroid/net/ConnectivityModuleConnector;->logi(Ljava/lang/String;)V
+HSPLandroid/net/ConnectivityModuleConnector;->logi(Ljava/lang/String;)V
 HSPLandroid/net/ConnectivityModuleConnector;->registerHealthListener(Landroid/net/ConnectivityModuleConnector$ConnectivityModuleHealthListener;)V
 HSPLandroid/net/ConnectivityModuleConnector;->startModuleService(Ljava/lang/String;Ljava/lang/String;Landroid/net/ConnectivityModuleConnector$ModuleServiceCallback;)V
 HSPLandroid/net/INetd$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
@@ -552,31 +578,31 @@
 HSPLandroid/net/INetdUnsolicitedEventListener$Stub;->asBinder()Landroid/os/IBinder;
 HSPLandroid/net/INetdUnsolicitedEventListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z+]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/net/INetdUnsolicitedEventListener;Lcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;
 HSPLandroid/net/INetdUnsolicitedEventListener;-><clinit>()V
-PLandroid/net/INetworkStackConnector$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
-PLandroid/net/INetworkStackConnector$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetworkStackConnector;
-PLandroid/net/INetworkStackConnector;-><clinit>()V
+HSPLandroid/net/INetworkStackConnector$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
+HSPLandroid/net/INetworkStackConnector$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetworkStackConnector;
+HSPLandroid/net/INetworkStackConnector;-><clinit>()V
 HSPLandroid/net/NetworkStackClient$DependenciesImpl;-><init>()V
 HSPLandroid/net/NetworkStackClient$DependenciesImpl;-><init>(Landroid/net/NetworkStackClient$DependenciesImpl-IA;)V
-PLandroid/net/NetworkStackClient$DependenciesImpl;->addToServiceManager(Landroid/os/IBinder;)V
+HSPLandroid/net/NetworkStackClient$DependenciesImpl;->addToServiceManager(Landroid/os/IBinder;)V
 HSPLandroid/net/NetworkStackClient$DependenciesImpl;->getConnectivityModuleConnector()Landroid/net/ConnectivityModuleConnector;
 HSPLandroid/net/NetworkStackClient$NetworkStackConnection;-><init>(Landroid/net/NetworkStackClient;)V
 HSPLandroid/net/NetworkStackClient$NetworkStackConnection;-><init>(Landroid/net/NetworkStackClient;Landroid/net/NetworkStackClient$NetworkStackConnection-IA;)V
-PLandroid/net/NetworkStackClient$NetworkStackConnection;->onModuleServiceConnected(Landroid/os/IBinder;)V
-PLandroid/net/NetworkStackClient;->-$$Nest$mlogi(Landroid/net/NetworkStackClient;Ljava/lang/String;)V
-PLandroid/net/NetworkStackClient;->-$$Nest$mregisterNetworkStackService(Landroid/net/NetworkStackClient;Landroid/os/IBinder;)V
+HSPLandroid/net/NetworkStackClient$NetworkStackConnection;->onModuleServiceConnected(Landroid/os/IBinder;)V
+HSPLandroid/net/NetworkStackClient;->-$$Nest$mlogi(Landroid/net/NetworkStackClient;Ljava/lang/String;)V
+HSPLandroid/net/NetworkStackClient;->-$$Nest$mregisterNetworkStackService(Landroid/net/NetworkStackClient;Landroid/os/IBinder;)V
 HSPLandroid/net/NetworkStackClient;-><clinit>()V
 HSPLandroid/net/NetworkStackClient;-><init>()V
 HSPLandroid/net/NetworkStackClient;-><init>(Landroid/net/NetworkStackClient$Dependencies;)V
 HSPLandroid/net/NetworkStackClient;->getInstance()Landroid/net/NetworkStackClient;
 HSPLandroid/net/NetworkStackClient;->init()V
 HSPLandroid/net/NetworkStackClient;->log(Ljava/lang/String;)V
-PLandroid/net/NetworkStackClient;->logi(Ljava/lang/String;)V
-PLandroid/net/NetworkStackClient;->registerNetworkStackService(Landroid/os/IBinder;)V
+HSPLandroid/net/NetworkStackClient;->logi(Ljava/lang/String;)V
+HSPLandroid/net/NetworkStackClient;->registerNetworkStackService(Landroid/os/IBinder;)V
 HSPLandroid/net/NetworkStackClient;->start()V
 HSPLandroid/net/UidRangeParcel$1;-><init>()V
 HSPLandroid/net/UidRangeParcel;-><clinit>()V
 HSPLandroid/net/UidRangeParcel;-><init>(II)V
-HSPLandroid/net/UidRangeParcel;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLandroid/net/UidRangeParcel;->writeToParcel(Landroid/os/Parcel;I)V+]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/net/metrics/INetdEventListener$Stub;-><init>()V
 HSPLandroid/net/metrics/INetdEventListener$Stub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z+]Landroid/net/metrics/INetdEventListener;Lcom/android/server/connectivity/NetdEventListenerService;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLandroid/net/metrics/INetdEventListener;-><clinit>()V
@@ -591,7 +617,7 @@
 HSPLandroid/net/util/SharedLog;-><init>(ILjava/lang/String;)V
 HSPLandroid/net/util/SharedLog;-><init>(Landroid/net/util/SharedLog$LocalLog;Ljava/lang/String;Ljava/lang/String;)V
 HSPLandroid/net/util/SharedLog;-><init>(Ljava/lang/String;)V
-PLandroid/net/util/SharedLog;->i(Ljava/lang/String;)V
+HSPLandroid/net/util/SharedLog;->i(Ljava/lang/String;)V
 HSPLandroid/net/util/SharedLog;->isRootLogInstance()Z
 HSPLandroid/net/util/SharedLog;->log(Ljava/lang/String;)V
 HSPLandroid/net/util/SharedLog;->logLine(Landroid/net/util/SharedLog$Category;Ljava/lang/String;)Ljava/lang/String;
@@ -605,7 +631,7 @@
 PLcom/android/internal/art/ArtStatsLog;->write(IIIJJ)V
 PLcom/android/internal/art/ArtStatsLog;->write(IJI)V
 HSPLcom/android/internal/art/ArtStatsLog;->write(IJIIIJIIJIII)V
-PLcom/android/internal/art/ArtStatsLog;->write(IZZZ)V
+HSPLcom/android/internal/art/ArtStatsLog;->write(IZZZ)V
 HSPLcom/android/internal/util/jobs/ArrayUtils;-><clinit>()V
 HSPLcom/android/internal/util/jobs/ArrayUtils;->appendInt([II)[I
 HSPLcom/android/internal/util/jobs/ArrayUtils;->appendInt([IIZ)[I
@@ -645,7 +671,7 @@
 HPLcom/android/internal/util/jobs/FastXmlSerializer;->startDocument(Ljava/lang/String;Ljava/lang/Boolean;)V
 HPLcom/android/internal/util/jobs/FastXmlSerializer;->startTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;+]Lcom/android/internal/util/jobs/FastXmlSerializer;Lcom/android/internal/util/jobs/FastXmlSerializer;
 HSPLcom/android/internal/util/jobs/RingBufferIndices;-><init>(I)V
-HPLcom/android/internal/util/jobs/RingBufferIndices;->add()I
+HSPLcom/android/internal/util/jobs/RingBufferIndices;->add()I
 PLcom/android/internal/util/jobs/RingBufferIndices;->indexOf(I)I
 PLcom/android/internal/util/jobs/RingBufferIndices;->size()I
 HSPLcom/android/internal/util/jobs/StatLogger;-><init>(Ljava/lang/String;[Ljava/lang/String;)V
@@ -694,7 +720,7 @@
 PLcom/android/server/AnyMotionDetector$Vector3;->normalized()Lcom/android/server/AnyMotionDetector$Vector3;
 PLcom/android/server/AnyMotionDetector$Vector3;->plus(Lcom/android/server/AnyMotionDetector$Vector3;)Lcom/android/server/AnyMotionDetector$Vector3;
 PLcom/android/server/AnyMotionDetector$Vector3;->times(F)Lcom/android/server/AnyMotionDetector$Vector3;
-PLcom/android/server/AnyMotionDetector$Vector3;->toString()Ljava/lang/String;
+HPLcom/android/server/AnyMotionDetector$Vector3;->toString()Ljava/lang/String;
 PLcom/android/server/AnyMotionDetector;->-$$Nest$fgetmCallback(Lcom/android/server/AnyMotionDetector;)Lcom/android/server/AnyMotionDetector$DeviceIdleCallback;
 PLcom/android/server/AnyMotionDetector;->-$$Nest$fgetmHandler(Lcom/android/server/AnyMotionDetector;)Landroid/os/Handler;
 PLcom/android/server/AnyMotionDetector;->-$$Nest$fgetmLock(Lcom/android/server/AnyMotionDetector;)Ljava/lang/Object;
@@ -715,14 +741,14 @@
 PLcom/android/server/AnyMotionDetector;->hasSensor()Z
 PLcom/android/server/AnyMotionDetector;->startOrientationMeasurementLocked()V
 HPLcom/android/server/AnyMotionDetector;->stop()V
-PLcom/android/server/AnyMotionDetector;->stopOrientationMeasurementLocked()I
+HPLcom/android/server/AnyMotionDetector;->stopOrientationMeasurementLocked()I
 HSPLcom/android/server/AppStateTrackerImpl$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/AppStateTrackerImpl;)V
 PLcom/android/server/AppStateTrackerImpl$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/AppStateTrackerImpl$1;-><init>(Lcom/android/server/AppStateTrackerImpl;Lcom/android/server/AppStateTracker$BackgroundRestrictedAppListener;)V
 PLcom/android/server/AppStateTrackerImpl$1;->updateBackgroundRestrictedForUidPackage(ILjava/lang/String;Z)V
 HSPLcom/android/server/AppStateTrackerImpl$2;-><init>(Lcom/android/server/AppStateTrackerImpl;)V
 HSPLcom/android/server/AppStateTrackerImpl$3;-><init>(Lcom/android/server/AppStateTrackerImpl;)V
-HPLcom/android/server/AppStateTrackerImpl$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/AppStateTrackerImpl$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V+]Ljava/lang/String;Ljava/lang/String;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/AppStateTrackerImpl$AppOpsWatcher;-><init>(Lcom/android/server/AppStateTrackerImpl;)V
 HSPLcom/android/server/AppStateTrackerImpl$AppOpsWatcher;-><init>(Lcom/android/server/AppStateTrackerImpl;Lcom/android/server/AppStateTrackerImpl$AppOpsWatcher-IA;)V
 PLcom/android/server/AppStateTrackerImpl$AppOpsWatcher;->opChanged(IILjava/lang/String;)V
@@ -730,7 +756,7 @@
 HSPLcom/android/server/AppStateTrackerImpl$FeatureFlagsObserver;->isForcedAppStandbyEnabled()Z
 HSPLcom/android/server/AppStateTrackerImpl$FeatureFlagsObserver;->isForcedAppStandbyForSmallBatteryEnabled()Z
 HSPLcom/android/server/AppStateTrackerImpl$FeatureFlagsObserver;->register()V
-PLcom/android/server/AppStateTrackerImpl$Listener;->-$$Nest$monExemptedBucketChanged(Lcom/android/server/AppStateTrackerImpl$Listener;Lcom/android/server/AppStateTrackerImpl;)V
+HSPLcom/android/server/AppStateTrackerImpl$Listener;->-$$Nest$monExemptedBucketChanged(Lcom/android/server/AppStateTrackerImpl$Listener;Lcom/android/server/AppStateTrackerImpl;)V
 PLcom/android/server/AppStateTrackerImpl$Listener;->-$$Nest$monForceAllAppsStandbyChanged(Lcom/android/server/AppStateTrackerImpl$Listener;Lcom/android/server/AppStateTrackerImpl;)V
 PLcom/android/server/AppStateTrackerImpl$Listener;->-$$Nest$monPowerSaveExemptionListChanged(Lcom/android/server/AppStateTrackerImpl$Listener;Lcom/android/server/AppStateTrackerImpl;)V
 PLcom/android/server/AppStateTrackerImpl$Listener;->-$$Nest$monPowerSaveUnexempted(Lcom/android/server/AppStateTrackerImpl$Listener;Lcom/android/server/AppStateTrackerImpl;)V
@@ -738,7 +764,7 @@
 HSPLcom/android/server/AppStateTrackerImpl$Listener;->-$$Nest$monTempPowerSaveExemptionListChanged(Lcom/android/server/AppStateTrackerImpl$Listener;Lcom/android/server/AppStateTrackerImpl;)V
 HSPLcom/android/server/AppStateTrackerImpl$Listener;->-$$Nest$monUidActiveStateChanged(Lcom/android/server/AppStateTrackerImpl$Listener;Lcom/android/server/AppStateTrackerImpl;I)V
 HSPLcom/android/server/AppStateTrackerImpl$Listener;-><init>()V
-PLcom/android/server/AppStateTrackerImpl$Listener;->onExemptedBucketChanged(Lcom/android/server/AppStateTrackerImpl;)V
+HSPLcom/android/server/AppStateTrackerImpl$Listener;->onExemptedBucketChanged(Lcom/android/server/AppStateTrackerImpl;)V
 PLcom/android/server/AppStateTrackerImpl$Listener;->onForceAllAppsStandbyChanged(Lcom/android/server/AppStateTrackerImpl;)V
 PLcom/android/server/AppStateTrackerImpl$Listener;->onPowerSaveExemptionListChanged(Lcom/android/server/AppStateTrackerImpl;)V
 PLcom/android/server/AppStateTrackerImpl$Listener;->onPowerSaveUnexempted(Lcom/android/server/AppStateTrackerImpl;)V
@@ -749,7 +775,7 @@
 HSPLcom/android/server/AppStateTrackerImpl$Listener;->unblockAlarmsForUid(I)V
 PLcom/android/server/AppStateTrackerImpl$Listener;->unblockAllUnrestrictedAlarms()V
 HSPLcom/android/server/AppStateTrackerImpl$Listener;->updateAlarmsForUid(I)V
-PLcom/android/server/AppStateTrackerImpl$Listener;->updateAllAlarms()V
+HSPLcom/android/server/AppStateTrackerImpl$Listener;->updateAllAlarms()V
 HSPLcom/android/server/AppStateTrackerImpl$Listener;->updateAllJobs()V
 PLcom/android/server/AppStateTrackerImpl$Listener;->updateBackgroundRestrictedForUidPackage(ILjava/lang/String;Z)V
 HSPLcom/android/server/AppStateTrackerImpl$Listener;->updateJobsForUid(IZ)V
@@ -757,13 +783,13 @@
 HSPLcom/android/server/AppStateTrackerImpl$MyHandler;-><init>(Lcom/android/server/AppStateTrackerImpl;Landroid/os/Looper;)V
 PLcom/android/server/AppStateTrackerImpl$MyHandler;->doUserRemoved(I)V
 HSPLcom/android/server/AppStateTrackerImpl$MyHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/internal/util/jobs/StatLogger;Lcom/android/internal/util/jobs/StatLogger;]Lcom/android/server/AppStateTrackerImpl$MyHandler;Lcom/android/server/AppStateTrackerImpl$MyHandler;
-HSPLcom/android/server/AppStateTrackerImpl$MyHandler;->handleUidActive(I)V
+HSPLcom/android/server/AppStateTrackerImpl$MyHandler;->handleUidActive(I)V+]Lcom/android/server/AppStateTrackerImpl$MyHandler;Lcom/android/server/AppStateTrackerImpl$MyHandler;
 PLcom/android/server/AppStateTrackerImpl$MyHandler;->handleUidDisabled(I)V
-PLcom/android/server/AppStateTrackerImpl$MyHandler;->handleUidGone(I)V
+HSPLcom/android/server/AppStateTrackerImpl$MyHandler;->handleUidGone(I)V
 HSPLcom/android/server/AppStateTrackerImpl$MyHandler;->handleUidIdle(I)V
 HSPLcom/android/server/AppStateTrackerImpl$MyHandler;->notifyAllExemptionListChanged()V
 PLcom/android/server/AppStateTrackerImpl$MyHandler;->notifyAllUnexempted()V
-PLcom/android/server/AppStateTrackerImpl$MyHandler;->notifyExemptedBucketChanged()V
+HSPLcom/android/server/AppStateTrackerImpl$MyHandler;->notifyExemptedBucketChanged()V
 PLcom/android/server/AppStateTrackerImpl$MyHandler;->notifyForceAllAppsStandbyChanged()V
 PLcom/android/server/AppStateTrackerImpl$MyHandler;->notifyRunAnyAppOpsChanged(ILjava/lang/String;)V
 HSPLcom/android/server/AppStateTrackerImpl$MyHandler;->notifyTempExemptionListChanged()V
@@ -773,11 +799,11 @@
 HSPLcom/android/server/AppStateTrackerImpl$MyHandler;->onUidIdle(IZ)V
 HSPLcom/android/server/AppStateTrackerImpl$MyHandler;->removeUid(IZ)V+]Lcom/android/server/AppStateTrackerImpl$MyHandler;Lcom/android/server/AppStateTrackerImpl$MyHandler;
 HSPLcom/android/server/AppStateTrackerImpl$StandbyTracker;-><init>(Lcom/android/server/AppStateTrackerImpl;)V
-HPLcom/android/server/AppStateTrackerImpl$StandbyTracker;->onAppIdleStateChanged(Ljava/lang/String;IZII)V
+HSPLcom/android/server/AppStateTrackerImpl$StandbyTracker;->onAppIdleStateChanged(Ljava/lang/String;IZII)V
 HSPLcom/android/server/AppStateTrackerImpl$UidObserver;-><init>(Lcom/android/server/AppStateTrackerImpl;)V
 HSPLcom/android/server/AppStateTrackerImpl$UidObserver;-><init>(Lcom/android/server/AppStateTrackerImpl;Lcom/android/server/AppStateTrackerImpl$UidObserver-IA;)V
-HSPLcom/android/server/AppStateTrackerImpl$UidObserver;->onUidActive(I)V
-HSPLcom/android/server/AppStateTrackerImpl$UidObserver;->onUidGone(IZ)V
+HSPLcom/android/server/AppStateTrackerImpl$UidObserver;->onUidActive(I)V+]Lcom/android/server/AppStateTrackerImpl$MyHandler;Lcom/android/server/AppStateTrackerImpl$MyHandler;
+HSPLcom/android/server/AppStateTrackerImpl$UidObserver;->onUidGone(IZ)V+]Lcom/android/server/AppStateTrackerImpl$MyHandler;Lcom/android/server/AppStateTrackerImpl$MyHandler;
 HSPLcom/android/server/AppStateTrackerImpl$UidObserver;->onUidIdle(IZ)V
 PLcom/android/server/AppStateTrackerImpl;->$r8$lambda$cShSvuV-sPxJB9Jx10gt5TtmIsc(Lcom/android/server/AppStateTrackerImpl;Landroid/os/PowerSaveState;)V
 HSPLcom/android/server/AppStateTrackerImpl;->-$$Nest$fgetmContext(Lcom/android/server/AppStateTrackerImpl;)Landroid/content/Context;
@@ -786,7 +812,7 @@
 HSPLcom/android/server/AppStateTrackerImpl;->-$$Nest$fgetmStatLogger(Lcom/android/server/AppStateTrackerImpl;)Lcom/android/internal/util/jobs/StatLogger;
 HSPLcom/android/server/AppStateTrackerImpl;->-$$Nest$mcloneListeners(Lcom/android/server/AppStateTrackerImpl;)[Lcom/android/server/AppStateTrackerImpl$Listener;
 PLcom/android/server/AppStateTrackerImpl;->-$$Nest$mupdateBackgroundRestrictedUidPackagesLocked(Lcom/android/server/AppStateTrackerImpl;)V
-HPLcom/android/server/AppStateTrackerImpl;->-$$Nest$mupdateForceAllAppStandbyState(Lcom/android/server/AppStateTrackerImpl;)V
+HSPLcom/android/server/AppStateTrackerImpl;->-$$Nest$mupdateForceAllAppStandbyState(Lcom/android/server/AppStateTrackerImpl;)V
 HSPLcom/android/server/AppStateTrackerImpl;->-$$Nest$smaddUidToArray(Landroid/util/SparseBooleanArray;I)Z
 HSPLcom/android/server/AppStateTrackerImpl;->-$$Nest$smremoveUidFromArray(Landroid/util/SparseBooleanArray;IZ)Z
 HSPLcom/android/server/AppStateTrackerImpl;-><init>(Landroid/content/Context;Landroid/os/Looper;)V
@@ -801,7 +827,7 @@
 HPLcom/android/server/AppStateTrackerImpl;->dump(Landroid/util/IndentingPrintWriter;)V
 PLcom/android/server/AppStateTrackerImpl;->dumpProto(Landroid/util/proto/ProtoOutputStream;J)V
 PLcom/android/server/AppStateTrackerImpl;->dumpUids(Ljava/io/PrintWriter;Landroid/util/SparseBooleanArray;)V
-HSPLcom/android/server/AppStateTrackerImpl;->findForcedAppStandbyUidPackageIndexLocked(ILjava/lang/String;)I+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/lang/Integer;Ljava/lang/Integer;
+HSPLcom/android/server/AppStateTrackerImpl;->findForcedAppStandbyUidPackageIndexLocked(ILjava/lang/String;)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 PLcom/android/server/AppStateTrackerImpl;->handleUserRemoved(I)V
 HSPLcom/android/server/AppStateTrackerImpl;->injectActivityManagerInternal()Landroid/app/ActivityManagerInternal;
 HSPLcom/android/server/AppStateTrackerImpl;->injectAppOpsManager()Landroid/app/AppOpsManager;
@@ -825,40 +851,41 @@
 HSPLcom/android/server/AppStateTrackerImpl;->onSystemServicesReady()V
 HSPLcom/android/server/AppStateTrackerImpl;->refreshForcedAppStandbyUidPackagesLocked()V
 HSPLcom/android/server/AppStateTrackerImpl;->removeUidFromArray(Landroid/util/SparseBooleanArray;IZ)Z
-HSPLcom/android/server/AppStateTrackerImpl;->setPowerSaveExemptionListAppIds([I[I[I)V
+HSPLcom/android/server/AppStateTrackerImpl;->setPowerSaveExemptionListAppIds([I[I[I)V+]Lcom/android/server/AppStateTrackerImpl$MyHandler;Lcom/android/server/AppStateTrackerImpl$MyHandler;
 HSPLcom/android/server/AppStateTrackerImpl;->toggleForceAllAppsStandbyLocked(Z)V
 HSPLcom/android/server/AppStateTrackerImpl;->updateBackgroundRestrictedUidPackagesLocked()V
-HSPLcom/android/server/AppStateTrackerImpl;->updateForceAllAppStandbyState()V
+HSPLcom/android/server/AppStateTrackerImpl;->updateForceAllAppStandbyState()V+]Lcom/android/server/AppStateTrackerImpl;Lcom/android/server/AppStateTrackerImpl;
 PLcom/android/server/AppStateTrackerImpl;->updateForcedAppStandbyUidPackageLocked(ILjava/lang/String;Z)Z
 HSPLcom/android/server/BatteryService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/BatteryService;)V
 HSPLcom/android/server/BatteryService$$ExternalSyntheticLambda0;->update(Landroid/hardware/health/HealthInfo;)V
 HSPLcom/android/server/BatteryService$$ExternalSyntheticLambda5;-><init>(Landroid/content/Intent;)V
-HPLcom/android/server/BatteryService$$ExternalSyntheticLambda5;->run()V
+HSPLcom/android/server/BatteryService$$ExternalSyntheticLambda5;->run()V
 HSPLcom/android/server/BatteryService$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/BatteryService;)V
 PLcom/android/server/BatteryService$$ExternalSyntheticLambda6;->run()V
 HSPLcom/android/server/BatteryService$2;-><init>(Lcom/android/server/BatteryService;Landroid/os/Handler;)V
+PLcom/android/server/BatteryService$2;->onChange(Z)V
 PLcom/android/server/BatteryService$3;-><init>(Lcom/android/server/BatteryService;)V
-PLcom/android/server/BatteryService$3;->run()V
+HPLcom/android/server/BatteryService$3;->run()V
 HSPLcom/android/server/BatteryService$5;-><init>(Lcom/android/server/BatteryService;Landroid/content/Intent;)V
-PLcom/android/server/BatteryService$5;->run()V
+HPLcom/android/server/BatteryService$5;->run()V
 HSPLcom/android/server/BatteryService$6;-><init>(Lcom/android/server/BatteryService;Landroid/content/Intent;)V
-PLcom/android/server/BatteryService$6;->run()V
+HSPLcom/android/server/BatteryService$6;->run()V
 HSPLcom/android/server/BatteryService$7;-><init>(Lcom/android/server/BatteryService;Landroid/content/Intent;)V
 HPLcom/android/server/BatteryService$7;->run()V
 PLcom/android/server/BatteryService$8;-><init>(Lcom/android/server/BatteryService;Landroid/content/Intent;)V
 PLcom/android/server/BatteryService$8;->run()V
 HSPLcom/android/server/BatteryService$BatteryPropertiesRegistrar;-><init>(Lcom/android/server/BatteryService;)V
 HSPLcom/android/server/BatteryService$BatteryPropertiesRegistrar;-><init>(Lcom/android/server/BatteryService;Lcom/android/server/BatteryService$BatteryPropertiesRegistrar-IA;)V
-HPLcom/android/server/BatteryService$BatteryPropertiesRegistrar;->getProperty(ILandroid/os/BatteryProperty;)I+]Lcom/android/server/health/HealthServiceWrapper;Lcom/android/server/health/HealthServiceWrapperAidl;
+HPLcom/android/server/BatteryService$BatteryPropertiesRegistrar;->getProperty(ILandroid/os/BatteryProperty;)I+]Lcom/android/server/health/HealthServiceWrapper;Lcom/android/server/health/HealthServiceWrapperAidl;,Lcom/android/server/health/HealthServiceWrapperHidl;
 HSPLcom/android/server/BatteryService$BatteryPropertiesRegistrar;->scheduleUpdate()V
 HSPLcom/android/server/BatteryService$BinderService;-><init>(Lcom/android/server/BatteryService;)V
 HSPLcom/android/server/BatteryService$BinderService;-><init>(Lcom/android/server/BatteryService;Lcom/android/server/BatteryService$BinderService-IA;)V
 PLcom/android/server/BatteryService$BinderService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/BatteryService$Led;-><init>(Lcom/android/server/BatteryService;Landroid/content/Context;Lcom/android/server/lights/LightsManager;)V
-HSPLcom/android/server/BatteryService$Led;->updateLightsLocked()V
+HSPLcom/android/server/BatteryService$Led;->updateLightsLocked()V+]Lcom/android/server/lights/LogicalLight;Lcom/android/server/lights/LightsService$LightImpl;
 HSPLcom/android/server/BatteryService$LocalService;-><init>(Lcom/android/server/BatteryService;)V
 HSPLcom/android/server/BatteryService$LocalService;-><init>(Lcom/android/server/BatteryService;Lcom/android/server/BatteryService$LocalService-IA;)V
-HPLcom/android/server/BatteryService$LocalService;->getBatteryChargeCounter()I
+HSPLcom/android/server/BatteryService$LocalService;->getBatteryChargeCounter()I
 HSPLcom/android/server/BatteryService$LocalService;->getBatteryFullCharge()I
 HSPLcom/android/server/BatteryService$LocalService;->getBatteryLevel()I
 HSPLcom/android/server/BatteryService$LocalService;->getBatteryLevelLow()Z
@@ -866,10 +893,10 @@
 HSPLcom/android/server/BatteryService$LocalService;->isPowered(I)Z
 PLcom/android/server/BatteryService;->$r8$lambda$BBvTF9zr3jlUbHVZimjkg7NVAgQ(Lcom/android/server/BatteryService;)V
 HSPLcom/android/server/BatteryService;->$r8$lambda$nMM-N14QCYtvYu3I-B9f4UtoxL0(Lcom/android/server/BatteryService;Landroid/hardware/health/HealthInfo;)V
-HPLcom/android/server/BatteryService;->$r8$lambda$r64V5AVg_Okl7PnB1VjeN4oyo1I(Landroid/content/Intent;)V
+HSPLcom/android/server/BatteryService;->$r8$lambda$r64V5AVg_Okl7PnB1VjeN4oyo1I(Landroid/content/Intent;)V
 PLcom/android/server/BatteryService;->-$$Nest$fgetmActivityManagerInternal(Lcom/android/server/BatteryService;)Landroid/app/ActivityManagerInternal;
 HSPLcom/android/server/BatteryService;->-$$Nest$fgetmBatteryLevelLow(Lcom/android/server/BatteryService;)Z
-PLcom/android/server/BatteryService;->-$$Nest$fgetmContext(Lcom/android/server/BatteryService;)Landroid/content/Context;
+HSPLcom/android/server/BatteryService;->-$$Nest$fgetmContext(Lcom/android/server/BatteryService;)Landroid/content/Context;
 HSPLcom/android/server/BatteryService;->-$$Nest$fgetmHealthInfo(Lcom/android/server/BatteryService;)Landroid/hardware/health/HealthInfo;
 HSPLcom/android/server/BatteryService;->-$$Nest$fgetmHealthServiceWrapper(Lcom/android/server/BatteryService;)Lcom/android/server/health/HealthServiceWrapper;
 HSPLcom/android/server/BatteryService;->-$$Nest$fgetmLock(Lcom/android/server/BatteryService;)Ljava/lang/Object;
@@ -877,15 +904,16 @@
 HSPLcom/android/server/BatteryService;->-$$Nest$fgetmPlugType(Lcom/android/server/BatteryService;)I
 PLcom/android/server/BatteryService;->-$$Nest$mdumpInternal(Lcom/android/server/BatteryService;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/BatteryService;->-$$Nest$mdumpProto(Lcom/android/server/BatteryService;Ljava/io/FileDescriptor;)V
-HSPLcom/android/server/BatteryService;->-$$Nest$misPoweredLocked(Lcom/android/server/BatteryService;I)Z
+HSPLcom/android/server/BatteryService;->-$$Nest$misPoweredLocked(Lcom/android/server/BatteryService;I)Z+]Lcom/android/server/BatteryService;Lcom/android/server/BatteryService;
+PLcom/android/server/BatteryService;->-$$Nest$mupdateBatteryWarningLevelLocked(Lcom/android/server/BatteryService;)V
 PLcom/android/server/BatteryService;->-$$Nest$sfgetTAG()Ljava/lang/String;
 HSPLcom/android/server/BatteryService;-><clinit>()V
 HSPLcom/android/server/BatteryService;-><init>(Landroid/content/Context;)V
 PLcom/android/server/BatteryService;->dumpInternal(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/BatteryService;->dumpProto(Ljava/io/FileDescriptor;)V
-HSPLcom/android/server/BatteryService;->getIconLocked(I)I
+HSPLcom/android/server/BatteryService;->getIconLocked(I)I+]Lcom/android/server/BatteryService;Lcom/android/server/BatteryService;
 HSPLcom/android/server/BatteryService;->isPoweredLocked(I)Z
-HPLcom/android/server/BatteryService;->lambda$sendBatteryChangedIntentLocked$0(Landroid/content/Intent;)V
+HSPLcom/android/server/BatteryService;->lambda$sendBatteryChangedIntentLocked$0(Landroid/content/Intent;)V
 PLcom/android/server/BatteryService;->logBatteryStatsLocked()V
 PLcom/android/server/BatteryService;->logOutlierLocked(J)V
 HSPLcom/android/server/BatteryService;->onBootPhase(I)V
@@ -893,7 +921,7 @@
 HSPLcom/android/server/BatteryService;->plugType(Landroid/hardware/health/HealthInfo;)I
 HSPLcom/android/server/BatteryService;->processValuesLocked(Z)V+]Landroid/os/Handler;Landroid/os/Handler;]Landroid/metrics/LogMaker;Landroid/metrics/LogMaker;]Lcom/android/internal/app/IBatteryStats;Lcom/android/server/am/BatteryStatsService;]Lcom/android/server/BatteryService$Led;Lcom/android/server/BatteryService$Led;]Lcom/android/server/BatteryService;Lcom/android/server/BatteryService;]Lcom/android/internal/logging/MetricsLogger;Lcom/android/internal/logging/MetricsLogger;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/BatteryService;->registerHealthCallback()V
-HSPLcom/android/server/BatteryService;->sendBatteryChangedIntentLocked()V
+HSPLcom/android/server/BatteryService;->sendBatteryChangedIntentLocked()V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/BatteryService;Lcom/android/server/BatteryService;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/BatteryService;->sendBatteryLevelChangedIntentLocked()V
 HPLcom/android/server/BatteryService;->sendEnqueuedBatteryLevelChangedEvents()V
 HSPLcom/android/server/BatteryService;->shouldSendBatteryLowLocked()Z
@@ -965,7 +993,7 @@
 HSPLcom/android/server/BootReceiver;->addFileWithFootersToDropBox(Landroid/os/DropBoxManager;Ljava/util/HashMap;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)V
 PLcom/android/server/BootReceiver;->addFsckErrorsToDropBoxAndLogFsStat(Landroid/os/DropBoxManager;Ljava/util/HashMap;Ljava/lang/String;ILjava/lang/String;)V
 PLcom/android/server/BootReceiver;->addLastkToDropBox(Landroid/os/DropBoxManager;Ljava/util/HashMap;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)V
-PLcom/android/server/BootReceiver;->addTextToDropBox(Landroid/os/DropBoxManager;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
+HSPLcom/android/server/BootReceiver;->addTextToDropBox(Landroid/os/DropBoxManager;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
 HSPLcom/android/server/BootReceiver;->addTombstoneToDropBox(Landroid/content/Context;Ljava/io/File;ZLjava/lang/String;)V
 PLcom/android/server/BootReceiver;->fixFsckFsStat(Ljava/lang/String;I[Ljava/lang/String;II)I
 HSPLcom/android/server/BootReceiver;->getBootHeadersToLogAndUpdate()Ljava/lang/String;
@@ -986,8 +1014,8 @@
 HSPLcom/android/server/BundleUtils;->clone(Landroid/os/Bundle;)Landroid/os/Bundle;
 HSPLcom/android/server/BundleUtils;->isEmpty(Landroid/os/Bundle;)Z
 HSPLcom/android/server/CachedDeviceStateService$1;-><init>(Lcom/android/server/CachedDeviceStateService;)V
-HPLcom/android/server/CachedDeviceStateService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
-HPLcom/android/server/CachedDeviceStateService;->-$$Nest$fgetmDeviceState(Lcom/android/server/CachedDeviceStateService;)Lcom/android/internal/os/CachedDeviceState;
+HSPLcom/android/server/CachedDeviceStateService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V+]Ljava/lang/String;Ljava/lang/String;]Lcom/android/internal/os/CachedDeviceState;Lcom/android/internal/os/CachedDeviceState;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/CachedDeviceStateService;->-$$Nest$fgetmDeviceState(Lcom/android/server/CachedDeviceStateService;)Lcom/android/internal/os/CachedDeviceState;
 HSPLcom/android/server/CachedDeviceStateService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/CachedDeviceStateService;->onBootPhase(I)V
 HSPLcom/android/server/CachedDeviceStateService;->onStart()V
@@ -1014,6 +1042,7 @@
 PLcom/android/server/CircularQueue;->values()Ljava/util/Collection;
 HSPLcom/android/server/ConsumerIrService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/ConsumerIrService;->getHalService()Z
+PLcom/android/server/ConsumerIrService;->hasIrEmitter()Z
 HSPLcom/android/server/ContextHubSystemService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/ContextHubSystemService;Landroid/content/Context;)V
 HSPLcom/android/server/ContextHubSystemService$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/ContextHubSystemService;->$r8$lambda$holR3HvtZa3riYs7PkDas5SvJIU(Lcom/android/server/ContextHubSystemService;Landroid/content/Context;)V
@@ -1022,19 +1051,19 @@
 HSPLcom/android/server/ContextHubSystemService;->onBootPhase(I)V
 HSPLcom/android/server/ContextHubSystemService;->onStart()V
 PLcom/android/server/ContextHubSystemService;->onUserSwitching(Lcom/android/server/SystemService$TargetUser;Lcom/android/server/SystemService$TargetUser;)V
-PLcom/android/server/CountryDetectorService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/CountryDetectorService;)V
+HSPLcom/android/server/CountryDetectorService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/CountryDetectorService;)V
 PLcom/android/server/CountryDetectorService$$ExternalSyntheticLambda0;->onCountryDetected(Landroid/location/Country;)V
 PLcom/android/server/CountryDetectorService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/CountryDetectorService;Landroid/location/Country;)V
 PLcom/android/server/CountryDetectorService$$ExternalSyntheticLambda1;->run()V
 PLcom/android/server/CountryDetectorService$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/CountryDetectorService;Landroid/location/CountryListener;)V
 PLcom/android/server/CountryDetectorService$$ExternalSyntheticLambda2;->run()V
 HSPLcom/android/server/CountryDetectorService$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/CountryDetectorService;)V
-PLcom/android/server/CountryDetectorService$$ExternalSyntheticLambda3;->run()V
+HSPLcom/android/server/CountryDetectorService$$ExternalSyntheticLambda3;->run()V
 HPLcom/android/server/CountryDetectorService$Receiver;-><init>(Lcom/android/server/CountryDetectorService;Landroid/location/ICountryListener;)V
 HPLcom/android/server/CountryDetectorService$Receiver;->binderDied()V
 PLcom/android/server/CountryDetectorService$Receiver;->getListener()Landroid/location/ICountryListener;
 PLcom/android/server/CountryDetectorService;->$r8$lambda$GuhZH7A_aehxVbgO-4H_eNK2Ucw(Lcom/android/server/CountryDetectorService;Landroid/location/CountryListener;)V
-PLcom/android/server/CountryDetectorService;->$r8$lambda$XFPMrB8atD3SrSeh4aH5xJ7jpAE(Lcom/android/server/CountryDetectorService;)V
+HSPLcom/android/server/CountryDetectorService;->$r8$lambda$XFPMrB8atD3SrSeh4aH5xJ7jpAE(Lcom/android/server/CountryDetectorService;)V
 PLcom/android/server/CountryDetectorService;->$r8$lambda$cSY6CsDcSahJl-RhnYJdIQclGU4(Lcom/android/server/CountryDetectorService;Landroid/location/Country;)V
 PLcom/android/server/CountryDetectorService;->$r8$lambda$ovIJ1C5IPvLu1cVC9mnVGfLbHwg(Lcom/android/server/CountryDetectorService;Landroid/location/Country;)V
 PLcom/android/server/CountryDetectorService;->-$$Nest$mremoveListener(Lcom/android/server/CountryDetectorService;Landroid/os/IBinder;)V
@@ -1044,12 +1073,12 @@
 HPLcom/android/server/CountryDetectorService;->addListener(Landroid/location/ICountryListener;)V
 HPLcom/android/server/CountryDetectorService;->detectCountry()Landroid/location/Country;
 PLcom/android/server/CountryDetectorService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/CountryDetectorService;->initialize()V
+HSPLcom/android/server/CountryDetectorService;->initialize()V
 PLcom/android/server/CountryDetectorService;->lambda$initialize$1(Landroid/location/Country;)V
 PLcom/android/server/CountryDetectorService;->lambda$initialize$2(Landroid/location/Country;)V
 PLcom/android/server/CountryDetectorService;->lambda$setCountryListener$3(Landroid/location/CountryListener;)V
-PLcom/android/server/CountryDetectorService;->lambda$systemRunning$0()V
-PLcom/android/server/CountryDetectorService;->loadCustomCountryDetectorIfAvailable(Ljava/lang/String;)Lcom/android/server/location/countrydetector/CountryDetectorBase;
+HSPLcom/android/server/CountryDetectorService;->lambda$systemRunning$0()V
+HSPLcom/android/server/CountryDetectorService;->loadCustomCountryDetectorIfAvailable(Ljava/lang/String;)Lcom/android/server/location/countrydetector/CountryDetectorBase;
 PLcom/android/server/CountryDetectorService;->notifyReceivers(Landroid/location/Country;)V
 PLcom/android/server/CountryDetectorService;->removeCountryListener(Landroid/location/ICountryListener;)V
 HPLcom/android/server/CountryDetectorService;->removeListener(Landroid/os/IBinder;)V
@@ -1075,13 +1104,13 @@
 PLcom/android/server/DeviceIdleController$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/DeviceIdleController;II)V
 PLcom/android/server/DeviceIdleController$$ExternalSyntheticLambda8;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/DeviceIdleController$1;-><init>(Lcom/android/server/DeviceIdleController;)V
-HPLcom/android/server/DeviceIdleController$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/DeviceIdleController$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V+]Ljava/lang/String;Ljava/lang/String;]Lcom/android/server/DeviceIdleController;Lcom/android/server/DeviceIdleController;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/DeviceIdleController$2;-><init>(Lcom/android/server/DeviceIdleController;)V
 PLcom/android/server/DeviceIdleController$2;->onAlarm()V
 HSPLcom/android/server/DeviceIdleController$3;-><init>(Lcom/android/server/DeviceIdleController;)V
 PLcom/android/server/DeviceIdleController$3;->onAlarm()V
 HSPLcom/android/server/DeviceIdleController$4;-><init>(Lcom/android/server/DeviceIdleController;)V
-PLcom/android/server/DeviceIdleController$4;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/DeviceIdleController$4;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/DeviceIdleController$5;-><init>(Lcom/android/server/DeviceIdleController;)V
 HPLcom/android/server/DeviceIdleController$5;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/DeviceIdleController$6;-><init>(Lcom/android/server/DeviceIdleController;)V
@@ -1098,6 +1127,7 @@
 HPLcom/android/server/DeviceIdleController$BinderService;->addPowerSaveTempWhitelistApp(Ljava/lang/String;JIILjava/lang/String;)V+]Lcom/android/server/DeviceIdleController;Lcom/android/server/DeviceIdleController;
 PLcom/android/server/DeviceIdleController$BinderService;->addPowerSaveTempWhitelistAppForMms(Ljava/lang/String;IILjava/lang/String;)J
 PLcom/android/server/DeviceIdleController$BinderService;->addPowerSaveTempWhitelistAppForSms(Ljava/lang/String;IILjava/lang/String;)J
+PLcom/android/server/DeviceIdleController$BinderService;->addPowerSaveWhitelistApp(Ljava/lang/String;)V
 PLcom/android/server/DeviceIdleController$BinderService;->addPowerSaveWhitelistApps(Ljava/util/List;)I
 PLcom/android/server/DeviceIdleController$BinderService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HPLcom/android/server/DeviceIdleController$BinderService;->exitIdle(Ljava/lang/String;)V
@@ -1140,10 +1170,10 @@
 HPLcom/android/server/DeviceIdleController$LocalService;->isAppOnWhitelist(I)Z
 HSPLcom/android/server/DeviceIdleController$LocalService;->registerStationaryListener(Lcom/android/server/DeviceIdleInternal$StationaryListener;)V
 HPLcom/android/server/DeviceIdleController$LocalService;->setAlarmsActive(Z)V
-HPLcom/android/server/DeviceIdleController$LocalService;->setJobsActive(Z)V
+HSPLcom/android/server/DeviceIdleController$LocalService;->setJobsActive(Z)V
 PLcom/android/server/DeviceIdleController$LocalService;->unregisterStationaryListener(Lcom/android/server/DeviceIdleInternal$StationaryListener;)V
 HSPLcom/android/server/DeviceIdleController$MotionListener;-><init>(Lcom/android/server/DeviceIdleController;)V
-PLcom/android/server/DeviceIdleController$MotionListener;->onTrigger(Landroid/hardware/TriggerEvent;)V
+HPLcom/android/server/DeviceIdleController$MotionListener;->onTrigger(Landroid/hardware/TriggerEvent;)V
 HSPLcom/android/server/DeviceIdleController$MotionListener;->registerLocked()Z
 HSPLcom/android/server/DeviceIdleController$MyHandler;-><init>(Lcom/android/server/DeviceIdleController;Landroid/os/Looper;)V
 HSPLcom/android/server/DeviceIdleController$MyHandler;->handleMessage(Landroid/os/Message;)V+]Landroid/net/INetworkPolicyManager;Lcom/android/server/net/NetworkPolicyManagerService;]Lcom/android/server/SystemService;Lcom/android/server/DeviceIdleController;]Lcom/android/server/net/NetworkPolicyManagerInternal;Lcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;]Lcom/android/internal/app/IBatteryStats;Lcom/android/server/am/BatteryStatsService;]Lcom/android/server/PowerAllowlistInternal$TempAllowlistChangeListener;Lcom/android/server/job/controllers/QuotaController$TempAllowlistTracker;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/os/PowerManagerInternal;Lcom/android/server/power/PowerManagerService$LocalService;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/DeviceIdleController;Lcom/android/server/DeviceIdleController;]Landroid/os/PowerManager$WakeLock;Landroid/os/PowerManager$WakeLock;]Lcom/android/server/DeviceIdleInternal$StationaryListener;Lcom/android/server/location/provider/StationaryThrottlingLocationProvider;
@@ -1189,16 +1219,16 @@
 PLcom/android/server/DeviceIdleController;->addPowerSaveWhitelistAppsInternal(Ljava/util/List;)I
 HSPLcom/android/server/DeviceIdleController;->becomeActiveLocked(Ljava/lang/String;I)V
 HSPLcom/android/server/DeviceIdleController;->becomeActiveLocked(Ljava/lang/String;IJZ)V
-HPLcom/android/server/DeviceIdleController;->becomeInactiveIfAppropriateLocked()V
+HSPLcom/android/server/DeviceIdleController;->becomeInactiveIfAppropriateLocked()V
 HSPLcom/android/server/DeviceIdleController;->buildAppIdArray(Landroid/util/ArrayMap;Landroid/util/ArrayMap;Landroid/util/SparseBooleanArray;)[I
 HPLcom/android/server/DeviceIdleController;->cancelAlarmLocked()V
-PLcom/android/server/DeviceIdleController;->cancelAllLightAlarmsLocked()V
+HPLcom/android/server/DeviceIdleController;->cancelAllLightAlarmsLocked()V
 HPLcom/android/server/DeviceIdleController;->cancelLightAlarmLocked()V
 HPLcom/android/server/DeviceIdleController;->cancelLightMaintenanceAlarmLocked()V
 PLcom/android/server/DeviceIdleController;->cancelLocatingLocked()V
-PLcom/android/server/DeviceIdleController;->cancelMotionTimeoutAlarmLocked()V
-PLcom/android/server/DeviceIdleController;->cancelSensingTimeoutAlarmLocked()V
-HPLcom/android/server/DeviceIdleController;->checkTempAppWhitelistTimeout(I)V
+HPLcom/android/server/DeviceIdleController;->cancelMotionTimeoutAlarmLocked()V
+HPLcom/android/server/DeviceIdleController;->cancelSensingTimeoutAlarmLocked()V
+HPLcom/android/server/DeviceIdleController;->checkTempAppWhitelistTimeout(I)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/DeviceIdleController;Lcom/android/server/DeviceIdleController;
 PLcom/android/server/DeviceIdleController;->decActiveIdleOps()V
 HPLcom/android/server/DeviceIdleController;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/DeviceIdleController;->dumpTempWhitelistSchedule(Ljava/io/PrintWriter;Z)V
@@ -1217,7 +1247,7 @@
 PLcom/android/server/DeviceIdleController;->handleWriteConfigFile()V
 PLcom/android/server/DeviceIdleController;->incActiveIdleOps()V
 HPLcom/android/server/DeviceIdleController;->isAppOnWhitelistInternal(I)Z
-PLcom/android/server/DeviceIdleController;->isOpsInactiveLocked()Z
+HPLcom/android/server/DeviceIdleController;->isOpsInactiveLocked()Z
 HPLcom/android/server/DeviceIdleController;->isPowerSaveWhitelistAppInternal(Ljava/lang/String;)Z
 HSPLcom/android/server/DeviceIdleController;->isStationaryLocked()Z
 HPLcom/android/server/DeviceIdleController;->isUpcomingAlarmClock()Z
@@ -1232,7 +1262,7 @@
 PLcom/android/server/DeviceIdleController;->lambda$onBootPhase$4(Landroid/os/PowerSaveState;)V
 PLcom/android/server/DeviceIdleController;->lightStateToString(I)Ljava/lang/String;
 HPLcom/android/server/DeviceIdleController;->maybeStopMonitoringMotionLocked()V
-PLcom/android/server/DeviceIdleController;->motionLocked()V
+HPLcom/android/server/DeviceIdleController;->motionLocked()V
 PLcom/android/server/DeviceIdleController;->moveToStateLocked(ILjava/lang/String;)V
 PLcom/android/server/DeviceIdleController;->onAnyMotionResult(I)V
 HPLcom/android/server/DeviceIdleController;->onAppRemovedFromTempWhitelistLocked(ILjava/lang/String;)V
@@ -1250,7 +1280,7 @@
 HSPLcom/android/server/DeviceIdleController;->registerTempAllowlistChangeListener(Lcom/android/server/PowerAllowlistInternal$TempAllowlistChangeListener;)V
 PLcom/android/server/DeviceIdleController;->removePowerSaveWhitelistAppInternal(Ljava/lang/String;)Z
 PLcom/android/server/DeviceIdleController;->reportPowerSaveWhitelistChangedLocked()V
-HSPLcom/android/server/DeviceIdleController;->reportTempWhitelistChangedLocked(IZ)V
+HSPLcom/android/server/DeviceIdleController;->reportTempWhitelistChangedLocked(IZ)V+]Landroid/os/Handler;Lcom/android/server/DeviceIdleController$MyHandler;]Landroid/os/Message;Landroid/os/Message;]Lcom/android/server/SystemService;Lcom/android/server/DeviceIdleController;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/Intent;Landroid/content/Intent;
 HPLcom/android/server/DeviceIdleController;->resetIdleManagementLocked()V
 HPLcom/android/server/DeviceIdleController;->resetLightIdleManagementLocked()V
 HPLcom/android/server/DeviceIdleController;->scheduleAlarmLocked(JZ)V
@@ -1258,10 +1288,10 @@
 HPLcom/android/server/DeviceIdleController;->scheduleLightMaintenanceAlarmLocked(J)V
 HPLcom/android/server/DeviceIdleController;->scheduleMotionRegistrationAlarmLocked()V
 HSPLcom/android/server/DeviceIdleController;->scheduleMotionTimeoutAlarmLocked()V
-PLcom/android/server/DeviceIdleController;->scheduleReportActiveLocked(Ljava/lang/String;I)V
+HPLcom/android/server/DeviceIdleController;->scheduleReportActiveLocked(Ljava/lang/String;I)V
 PLcom/android/server/DeviceIdleController;->scheduleSensingTimeoutAlarmLocked(J)V
 HPLcom/android/server/DeviceIdleController;->setAlarmsActive(Z)V+]Lcom/android/server/DeviceIdleController;Lcom/android/server/DeviceIdleController;
-HPLcom/android/server/DeviceIdleController;->setJobsActive(Z)V+]Lcom/android/server/DeviceIdleController;Lcom/android/server/DeviceIdleController;
+HSPLcom/android/server/DeviceIdleController;->setJobsActive(Z)V+]Lcom/android/server/DeviceIdleController;Lcom/android/server/DeviceIdleController;
 PLcom/android/server/DeviceIdleController;->shouldUseIdleTimeoutFactorLocked()Z
 HSPLcom/android/server/DeviceIdleController;->startMonitoringMotionLocked()V
 PLcom/android/server/DeviceIdleController;->stateToString(I)Ljava/lang/String;
@@ -1270,22 +1300,22 @@
 HPLcom/android/server/DeviceIdleController;->stepLightIdleStateLocked(Ljava/lang/String;Z)V
 PLcom/android/server/DeviceIdleController;->unregisterStationaryListener(Lcom/android/server/DeviceIdleInternal$StationaryListener;)V
 HPLcom/android/server/DeviceIdleController;->updateActiveConstraintsLocked()V
-HPLcom/android/server/DeviceIdleController;->updateChargingLocked(Z)V
+HSPLcom/android/server/DeviceIdleController;->updateChargingLocked(Z)V+]Lcom/android/server/DeviceIdleController;Lcom/android/server/DeviceIdleController;
 HSPLcom/android/server/DeviceIdleController;->updateConnectivityState(Landroid/content/Intent;)V
 HSPLcom/android/server/DeviceIdleController;->updateInteractivityLocked()V
 HSPLcom/android/server/DeviceIdleController;->updateQuickDozeFlagLocked(Z)V
 HSPLcom/android/server/DeviceIdleController;->updateTempWhitelistAppIdsLocked(IZJIILjava/lang/String;I)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/PowerManagerInternal;Lcom/android/server/power/PowerManagerService$LocalService;]Lcom/android/server/DeviceIdleController;Lcom/android/server/DeviceIdleController;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;
 HSPLcom/android/server/DeviceIdleController;->updateWhitelistAppIdsLocked()V
-HPLcom/android/server/DeviceIdleController;->verifyAlarmStateLocked()V
+HSPLcom/android/server/DeviceIdleController;->verifyAlarmStateLocked()V
 PLcom/android/server/DeviceIdleController;->writeConfigFileLocked()V
 PLcom/android/server/DeviceIdleController;->writeConfigFileLocked(Lorg/xmlpull/v1/XmlSerializer;)V
 HSPLcom/android/server/DiskStatsService;-><init>(Landroid/content/Context;)V
-HPLcom/android/server/DiskStatsService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V+]Ljava/io/File;Ljava/io/File;]Ljava/io/PrintWriter;Lcom/android/internal/util/FastPrintWriter;]Lcom/android/server/DiskStatsService;Lcom/android/server/DiskStatsService;]Ljava/io/FileOutputStream;Ljava/io/FileOutputStream;]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;
-PLcom/android/server/DiskStatsService;->getRecentPerf()I
+HPLcom/android/server/DiskStatsService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V+]Ljava/io/File;Ljava/io/File;]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Ljava/io/PrintWriter;Lcom/android/internal/util/FastPrintWriter;]Lcom/android/server/DiskStatsService;Lcom/android/server/DiskStatsService;]Ljava/io/FileOutputStream;Ljava/io/FileOutputStream;
+HPLcom/android/server/DiskStatsService;->getRecentPerf()I
 PLcom/android/server/DiskStatsService;->hasOption([Ljava/lang/String;Ljava/lang/String;)Z
 HPLcom/android/server/DiskStatsService;->reportCachedValues(Ljava/io/PrintWriter;)V
 HPLcom/android/server/DiskStatsService;->reportCachedValuesProto(Landroid/util/proto/ProtoOutputStream;)V
-PLcom/android/server/DiskStatsService;->reportDiskWriteSpeed(Ljava/io/PrintWriter;)V
+HPLcom/android/server/DiskStatsService;->reportDiskWriteSpeed(Ljava/io/PrintWriter;)V
 PLcom/android/server/DiskStatsService;->reportDiskWriteSpeedProto(Landroid/util/proto/ProtoOutputStream;)V
 HPLcom/android/server/DiskStatsService;->reportFreeSpace(Ljava/io/File;Ljava/lang/String;Ljava/io/PrintWriter;Landroid/util/proto/ProtoOutputStream;I)V
 HSPLcom/android/server/DisplayThread;-><init>()V
@@ -1293,7 +1323,7 @@
 HSPLcom/android/server/DisplayThread;->get()Lcom/android/server/DisplayThread;
 HSPLcom/android/server/DisplayThread;->getHandler()Landroid/os/Handler;
 HSPLcom/android/server/DockObserver$1;-><init>(Lcom/android/server/DockObserver;Z)V
-PLcom/android/server/DockObserver$1;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/DockObserver$1;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/DockObserver$2;-><init>(Lcom/android/server/DockObserver;)V
 PLcom/android/server/DockObserver$2;->onUEvent(Lcom/android/server/ExtconUEventObserver$ExtconInfo;Landroid/os/UEventObserver$UEvent;)V
 HSPLcom/android/server/DockObserver$BinderService;-><init>(Lcom/android/server/DockObserver;)V
@@ -1310,31 +1340,33 @@
 PLcom/android/server/DockObserver;->-$$Nest$fgetmReportedDockState(Lcom/android/server/DockObserver;)I
 PLcom/android/server/DockObserver;->-$$Nest$fgetmUpdatesStopped(Lcom/android/server/DockObserver;)Z
 PLcom/android/server/DockObserver;->-$$Nest$fgetmWakeLock(Lcom/android/server/DockObserver;)Landroid/os/PowerManager$WakeLock;
-PLcom/android/server/DockObserver;->-$$Nest$mhandleDockStateChange(Lcom/android/server/DockObserver;)V
+PLcom/android/server/DockObserver;->-$$Nest$fputmUpdatesStopped(Lcom/android/server/DockObserver;Z)V
+HSPLcom/android/server/DockObserver;->-$$Nest$mhandleDockStateChange(Lcom/android/server/DockObserver;)V
 PLcom/android/server/DockObserver;->-$$Nest$msetDockStateFromProviderLocked(Lcom/android/server/DockObserver;Lcom/android/server/DockObserver$ExtconStateProvider;)V
+PLcom/android/server/DockObserver;->-$$Nest$msetDockStateLocked(Lcom/android/server/DockObserver;I)V
 HSPLcom/android/server/DockObserver;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/DockObserver;->getDockedStateExtraValue(Lcom/android/server/DockObserver$ExtconStateProvider;)I
-PLcom/android/server/DockObserver;->handleDockStateChange()V
+HSPLcom/android/server/DockObserver;->handleDockStateChange()V
 HSPLcom/android/server/DockObserver;->loadExtconStateConfigs(Landroid/content/Context;)Ljava/util/List;
 HSPLcom/android/server/DockObserver;->onBootPhase(I)V
 HSPLcom/android/server/DockObserver;->onStart()V
 HSPLcom/android/server/DockObserver;->setActualDockStateLocked(I)V
 HSPLcom/android/server/DockObserver;->setDockStateFromProviderLocked(Lcom/android/server/DockObserver$ExtconStateProvider;)V
 HSPLcom/android/server/DockObserver;->setDockStateLocked(I)V
-PLcom/android/server/DockObserver;->updateLocked()V
+HSPLcom/android/server/DockObserver;->updateLocked()V
 HSPLcom/android/server/DropBoxManagerInternal;-><init>()V
-HPLcom/android/server/DropBoxManagerService$1$1;-><init>(Lcom/android/server/DropBoxManagerService$1;)V
-HPLcom/android/server/DropBoxManagerService$1$1;->run()V
+HSPLcom/android/server/DropBoxManagerService$1$1;-><init>(Lcom/android/server/DropBoxManagerService$1;)V
+HSPLcom/android/server/DropBoxManagerService$1$1;->run()V
 HSPLcom/android/server/DropBoxManagerService$1;-><init>(Lcom/android/server/DropBoxManagerService;)V
-HPLcom/android/server/DropBoxManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/DropBoxManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/DropBoxManagerService$2;-><init>(Lcom/android/server/DropBoxManagerService;)V
 HSPLcom/android/server/DropBoxManagerService$2;->addData(Ljava/lang/String;[BI)V
 HPLcom/android/server/DropBoxManagerService$2;->addFile(Ljava/lang/String;Landroid/os/ParcelFileDescriptor;I)V
 PLcom/android/server/DropBoxManagerService$2;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HPLcom/android/server/DropBoxManagerService$2;->getNextEntryWithAttribution(Ljava/lang/String;JLjava/lang/String;Ljava/lang/String;)Landroid/os/DropBoxManager$Entry;+]Lcom/android/server/DropBoxManagerService;Lcom/android/server/DropBoxManagerService;
-HSPLcom/android/server/DropBoxManagerService$2;->isTagEnabled(Ljava/lang/String;)Z
+HSPLcom/android/server/DropBoxManagerService$2;->isTagEnabled(Ljava/lang/String;)Z+]Lcom/android/server/DropBoxManagerService;Lcom/android/server/DropBoxManagerService;
 HSPLcom/android/server/DropBoxManagerService$3;-><init>(Lcom/android/server/DropBoxManagerService;Landroid/os/Handler;)V
-HPLcom/android/server/DropBoxManagerService$3;->onChange(Z)V
+HSPLcom/android/server/DropBoxManagerService$3;->onChange(Z)V
 HSPLcom/android/server/DropBoxManagerService$DropBoxManagerBroadcastHandler;-><init>(Lcom/android/server/DropBoxManagerService;Landroid/os/Looper;)V
 HSPLcom/android/server/DropBoxManagerService$DropBoxManagerBroadcastHandler;->createIntent(Ljava/lang/String;J)Landroid/content/Intent;
 HSPLcom/android/server/DropBoxManagerService$DropBoxManagerBroadcastHandler;->handleMessage(Landroid/os/Message;)V
@@ -1364,10 +1396,10 @@
 HSPLcom/android/server/DropBoxManagerService$SimpleEntrySource;->writeTo(Ljava/io/FileDescriptor;)V
 HSPLcom/android/server/DropBoxManagerService;->-$$Nest$fgetmBooted(Lcom/android/server/DropBoxManagerService;)Z
 HSPLcom/android/server/DropBoxManagerService;->-$$Nest$fgetmLowPriorityRateLimitPeriod(Lcom/android/server/DropBoxManagerService;)J
-HPLcom/android/server/DropBoxManagerService;->-$$Nest$fgetmReceiver(Lcom/android/server/DropBoxManagerService;)Landroid/content/BroadcastReceiver;
-HPLcom/android/server/DropBoxManagerService;->-$$Nest$fputmCachedQuotaUptimeMillis(Lcom/android/server/DropBoxManagerService;J)V
-HPLcom/android/server/DropBoxManagerService;->-$$Nest$minit(Lcom/android/server/DropBoxManagerService;)V
-HPLcom/android/server/DropBoxManagerService;->-$$Nest$mtrimToFit(Lcom/android/server/DropBoxManagerService;)J
+HSPLcom/android/server/DropBoxManagerService;->-$$Nest$fgetmReceiver(Lcom/android/server/DropBoxManagerService;)Landroid/content/BroadcastReceiver;
+HSPLcom/android/server/DropBoxManagerService;->-$$Nest$fputmCachedQuotaUptimeMillis(Lcom/android/server/DropBoxManagerService;J)V
+HSPLcom/android/server/DropBoxManagerService;->-$$Nest$minit(Lcom/android/server/DropBoxManagerService;)V
+HSPLcom/android/server/DropBoxManagerService;->-$$Nest$mtrimToFit(Lcom/android/server/DropBoxManagerService;)J
 HSPLcom/android/server/DropBoxManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/DropBoxManagerService;-><init>(Landroid/content/Context;Ljava/io/File;Landroid/os/Looper;)V
 HSPLcom/android/server/DropBoxManagerService;->addData(Ljava/lang/String;[BI)V
@@ -1382,12 +1414,12 @@
 HSPLcom/android/server/DropBoxManagerService;->getLowPriorityResourceConfigs()V
 HPLcom/android/server/DropBoxManagerService;->getNextEntry(Ljava/lang/String;JLjava/lang/String;Ljava/lang/String;)Landroid/os/DropBoxManager$Entry;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/DropBoxManagerService;Lcom/android/server/DropBoxManagerService;]Ljava/util/SortedSet;Ljava/util/TreeSet;]Ljava/util/TreeSet;Ljava/util/TreeSet;]Lcom/android/server/DropBoxManagerService$EntryFile;Lcom/android/server/DropBoxManagerService$EntryFile;]Ljava/util/Iterator;Ljava/util/TreeMap$NavigableSubMap$SubMapKeyIterator;
 HSPLcom/android/server/DropBoxManagerService;->init()V
-HSPLcom/android/server/DropBoxManagerService;->isTagEnabled(Ljava/lang/String;)Z
+HSPLcom/android/server/DropBoxManagerService;->isTagEnabled(Ljava/lang/String;)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/DropBoxManagerService;->logDropboxDropped(ILjava/lang/String;J)V
 HPLcom/android/server/DropBoxManagerService;->matchEntry(Lcom/android/server/DropBoxManagerService$EntryFile;Ljava/util/ArrayList;)Z+]Ljava/lang/String;Ljava/lang/String;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/DropBoxManagerService;->onBootPhase(I)V
 HSPLcom/android/server/DropBoxManagerService;->onStart()V
-HSPLcom/android/server/DropBoxManagerService;->trimToFit()J
+HSPLcom/android/server/DropBoxManagerService;->trimToFit()J+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/DropBoxManagerService;Lcom/android/server/DropBoxManagerService;]Ljava/io/File;Ljava/io/File;]Ljava/util/TreeSet;Ljava/util/TreeSet;]Landroid/os/StatFs;Landroid/os/StatFs;]Lcom/android/server/DropBoxManagerService$EntryFile;Lcom/android/server/DropBoxManagerService$EntryFile;]Ljava/util/Iterator;Ljava/util/TreeMap$KeyIterator;
 HSPLcom/android/server/DynamicSystemService;-><init>(Landroid/content/Context;)V
 PLcom/android/server/DynamicSystemService;->isInUse()Z
 PLcom/android/server/DynamicSystemService;->isInstalled()Z
@@ -1396,7 +1428,7 @@
 HSPLcom/android/server/EntropyMixer$2;-><init>(Lcom/android/server/EntropyMixer;)V
 PLcom/android/server/EntropyMixer$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/EntropyMixer;->-$$Nest$mscheduleSeedUpdater(Lcom/android/server/EntropyMixer;)V
-PLcom/android/server/EntropyMixer;->-$$Nest$mupdateSeedFile(Lcom/android/server/EntropyMixer;)V
+HPLcom/android/server/EntropyMixer;->-$$Nest$mupdateSeedFile(Lcom/android/server/EntropyMixer;)V
 HSPLcom/android/server/EntropyMixer;-><clinit>()V
 HSPLcom/android/server/EntropyMixer;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/EntropyMixer;-><init>(Landroid/content/Context;Ljava/io/File;Ljava/io/File;Ljava/io/File;)V
@@ -1428,10 +1460,10 @@
 HPLcom/android/server/EventLogTags;->writeNotificationAlert(Ljava/lang/String;III)V
 PLcom/android/server/EventLogTags;->writeNotificationAutogrouped(Ljava/lang/String;)V
 HPLcom/android/server/EventLogTags;->writeNotificationCancel(IILjava/lang/String;ILjava/lang/String;IIIILjava/lang/String;)V
-HPLcom/android/server/EventLogTags;->writeNotificationCancelAll(IILjava/lang/String;IIIILjava/lang/String;)V
+HSPLcom/android/server/EventLogTags;->writeNotificationCancelAll(IILjava/lang/String;IIIILjava/lang/String;)V
 HPLcom/android/server/EventLogTags;->writeNotificationCanceled(Ljava/lang/String;IIIIIILjava/lang/String;)V
-PLcom/android/server/EventLogTags;->writeNotificationClicked(Ljava/lang/String;IIIII)V
-HPLcom/android/server/EventLogTags;->writeNotificationEnqueue(IILjava/lang/String;ILjava/lang/String;ILjava/lang/String;I)V
+HPLcom/android/server/EventLogTags;->writeNotificationClicked(Ljava/lang/String;IIIII)V
+HSPLcom/android/server/EventLogTags;->writeNotificationEnqueue(IILjava/lang/String;ILjava/lang/String;ILjava/lang/String;I)V
 HPLcom/android/server/EventLogTags;->writeNotificationPanelHidden()V
 HPLcom/android/server/EventLogTags;->writeNotificationPanelRevealed(I)V
 HPLcom/android/server/EventLogTags;->writeNotificationVisibility(Ljava/lang/String;IIIII)V
@@ -1446,52 +1478,52 @@
 HSPLcom/android/server/EventLogTags;->writeStreamDevicesChanged(III)V
 PLcom/android/server/EventLogTags;->writeUserActivityTimeoutOverride(J)V
 HPLcom/android/server/EventLogTags;->writeVolumeChanged(IIIILjava/lang/String;)V
-PLcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/ExplicitHealthCheckController;Ljava/util/Set;)V
-PLcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
-PLcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda1;-><init>(Ljava/util/function/Consumer;)V
-PLcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda1;->onResult(Landroid/os/Bundle;)V
-PLcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/ExplicitHealthCheckController;Ljava/util/List;Ljava/util/Set;)V
-PLcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;)V
-PLcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda3;-><init>(Ljava/util/function/Consumer;)V
-PLcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda3;->onResult(Landroid/os/Bundle;)V
-PLcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/ExplicitHealthCheckController;)V
+HSPLcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/ExplicitHealthCheckController;Ljava/util/Set;)V
+HSPLcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda1;-><init>(Ljava/util/function/Consumer;)V
+HSPLcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda1;->onResult(Landroid/os/Bundle;)V
+HSPLcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/ExplicitHealthCheckController;Ljava/util/List;Ljava/util/Set;)V
+HSPLcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda3;-><init>(Ljava/util/function/Consumer;)V
+HSPLcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda3;->onResult(Landroid/os/Bundle;)V
+HSPLcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/ExplicitHealthCheckController;)V
 PLcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;)V
-PLcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/ExplicitHealthCheckController;)V
+HSPLcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/ExplicitHealthCheckController;)V
 PLcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;)V
-PLcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/ExplicitHealthCheckController;)V
+HSPLcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/ExplicitHealthCheckController;)V
 PLcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda6;->onResult(Landroid/os/Bundle;)V
-PLcom/android/server/ExplicitHealthCheckController$1;-><init>(Lcom/android/server/ExplicitHealthCheckController;)V
-PLcom/android/server/ExplicitHealthCheckController$1;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
-PLcom/android/server/ExplicitHealthCheckController;->$r8$lambda$K3YCmiu9hM6q_LNBeGn-jHHMn_4(Ljava/util/function/Consumer;Landroid/os/Bundle;)V
-PLcom/android/server/ExplicitHealthCheckController;->$r8$lambda$SRa9fw8RTJfzefVJ1-zsa9_9yG0(Ljava/util/function/Consumer;Landroid/os/Bundle;)V
+HSPLcom/android/server/ExplicitHealthCheckController$1;-><init>(Lcom/android/server/ExplicitHealthCheckController;)V
+HSPLcom/android/server/ExplicitHealthCheckController$1;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HSPLcom/android/server/ExplicitHealthCheckController;->$r8$lambda$K3YCmiu9hM6q_LNBeGn-jHHMn_4(Ljava/util/function/Consumer;Landroid/os/Bundle;)V
+HSPLcom/android/server/ExplicitHealthCheckController;->$r8$lambda$SRa9fw8RTJfzefVJ1-zsa9_9yG0(Ljava/util/function/Consumer;Landroid/os/Bundle;)V
 PLcom/android/server/ExplicitHealthCheckController;->$r8$lambda$TbxhFlwsG0CJ5CtZofLYj-eLvBk(Lcom/android/server/ExplicitHealthCheckController;Landroid/os/Bundle;)V
 PLcom/android/server/ExplicitHealthCheckController;->$r8$lambda$VeuRsi302dMjUdvGeMsrDp9--JQ(Lcom/android/server/ExplicitHealthCheckController;Ljava/lang/String;)V
 PLcom/android/server/ExplicitHealthCheckController;->$r8$lambda$e0UdlCOLP9KZKH1FviQqhoLmwtk(Lcom/android/server/ExplicitHealthCheckController;Ljava/lang/String;)V
-PLcom/android/server/ExplicitHealthCheckController;->$r8$lambda$vl7rcaLnhYKlnupU8sH7OIKbVso(Lcom/android/server/ExplicitHealthCheckController;Ljava/util/Set;Ljava/util/List;)V
-PLcom/android/server/ExplicitHealthCheckController;->$r8$lambda$xRm5fsgHSC-0Kc3i9gQ0DmxzkGE(Lcom/android/server/ExplicitHealthCheckController;Ljava/util/List;Ljava/util/Set;Ljava/util/List;)V
-PLcom/android/server/ExplicitHealthCheckController;->-$$Nest$minitState(Lcom/android/server/ExplicitHealthCheckController;Landroid/os/IBinder;)V
+HSPLcom/android/server/ExplicitHealthCheckController;->$r8$lambda$vl7rcaLnhYKlnupU8sH7OIKbVso(Lcom/android/server/ExplicitHealthCheckController;Ljava/util/Set;Ljava/util/List;)V
+HSPLcom/android/server/ExplicitHealthCheckController;->$r8$lambda$xRm5fsgHSC-0Kc3i9gQ0DmxzkGE(Lcom/android/server/ExplicitHealthCheckController;Ljava/util/List;Ljava/util/Set;Ljava/util/List;)V
+HSPLcom/android/server/ExplicitHealthCheckController;->-$$Nest$minitState(Lcom/android/server/ExplicitHealthCheckController;Landroid/os/IBinder;)V
 HSPLcom/android/server/ExplicitHealthCheckController;-><init>(Landroid/content/Context;)V
-PLcom/android/server/ExplicitHealthCheckController;->actOnDifference(Ljava/util/Collection;Ljava/util/Collection;Ljava/util/function/Consumer;)V
-HPLcom/android/server/ExplicitHealthCheckController;->bindService()V
+HSPLcom/android/server/ExplicitHealthCheckController;->actOnDifference(Ljava/util/Collection;Ljava/util/Collection;Ljava/util/function/Consumer;)V
+HSPLcom/android/server/ExplicitHealthCheckController;->bindService()V
 PLcom/android/server/ExplicitHealthCheckController;->cancel(Ljava/lang/String;)V
-HPLcom/android/server/ExplicitHealthCheckController;->getRequestedPackages(Ljava/util/function/Consumer;)V
-PLcom/android/server/ExplicitHealthCheckController;->getServiceComponentNameLocked()Landroid/content/ComponentName;
-PLcom/android/server/ExplicitHealthCheckController;->getServiceInfoLocked()Landroid/content/pm/ServiceInfo;
-PLcom/android/server/ExplicitHealthCheckController;->getSupportedPackages(Ljava/util/function/Consumer;)V
-HPLcom/android/server/ExplicitHealthCheckController;->initState(Landroid/os/IBinder;)V
-PLcom/android/server/ExplicitHealthCheckController;->lambda$getRequestedPackages$5(Ljava/util/function/Consumer;Landroid/os/Bundle;)V
-HPLcom/android/server/ExplicitHealthCheckController;->lambda$getSupportedPackages$4(Ljava/util/function/Consumer;Landroid/os/Bundle;)V
+HSPLcom/android/server/ExplicitHealthCheckController;->getRequestedPackages(Ljava/util/function/Consumer;)V
+HSPLcom/android/server/ExplicitHealthCheckController;->getServiceComponentNameLocked()Landroid/content/ComponentName;
+HSPLcom/android/server/ExplicitHealthCheckController;->getServiceInfoLocked()Landroid/content/pm/ServiceInfo;
+HSPLcom/android/server/ExplicitHealthCheckController;->getSupportedPackages(Ljava/util/function/Consumer;)V
+HSPLcom/android/server/ExplicitHealthCheckController;->initState(Landroid/os/IBinder;)V
+HSPLcom/android/server/ExplicitHealthCheckController;->lambda$getRequestedPackages$5(Ljava/util/function/Consumer;Landroid/os/Bundle;)V
+HSPLcom/android/server/ExplicitHealthCheckController;->lambda$getSupportedPackages$4(Ljava/util/function/Consumer;Landroid/os/Bundle;)V
 PLcom/android/server/ExplicitHealthCheckController;->lambda$initState$6(Landroid/os/Bundle;)V
 PLcom/android/server/ExplicitHealthCheckController;->lambda$syncRequests$0(Ljava/lang/String;)V
 PLcom/android/server/ExplicitHealthCheckController;->lambda$syncRequests$1(Ljava/lang/String;)V
-HPLcom/android/server/ExplicitHealthCheckController;->lambda$syncRequests$2(Ljava/util/List;Ljava/util/Set;Ljava/util/List;)V
-PLcom/android/server/ExplicitHealthCheckController;->lambda$syncRequests$3(Ljava/util/Set;Ljava/util/List;)V
-HPLcom/android/server/ExplicitHealthCheckController;->prepareServiceLocked(Ljava/lang/String;)Z
+HSPLcom/android/server/ExplicitHealthCheckController;->lambda$syncRequests$2(Ljava/util/List;Ljava/util/Set;Ljava/util/List;)V
+HSPLcom/android/server/ExplicitHealthCheckController;->lambda$syncRequests$3(Ljava/util/Set;Ljava/util/List;)V
+HSPLcom/android/server/ExplicitHealthCheckController;->prepareServiceLocked(Ljava/lang/String;)Z
 PLcom/android/server/ExplicitHealthCheckController;->request(Ljava/lang/String;)V
 HSPLcom/android/server/ExplicitHealthCheckController;->setCallbacks(Ljava/util/function/Consumer;Ljava/util/function/Consumer;Ljava/lang/Runnable;)V
 HSPLcom/android/server/ExplicitHealthCheckController;->setEnabled(Z)V
-PLcom/android/server/ExplicitHealthCheckController;->syncRequests(Ljava/util/Set;)V
-HPLcom/android/server/ExplicitHealthCheckController;->unbindService()V
+HSPLcom/android/server/ExplicitHealthCheckController;->syncRequests(Ljava/util/Set;)V
+HSPLcom/android/server/ExplicitHealthCheckController;->unbindService()V
 HSPLcom/android/server/ExtconStateObserver;-><init>()V
 HSPLcom/android/server/ExtconStateObserver;->parseStateFromFile(Lcom/android/server/ExtconUEventObserver$ExtconInfo;)Ljava/lang/Object;
 HSPLcom/android/server/ExtconUEventObserver$ExtconInfo$$ExternalSyntheticLambda0;-><init>()V
@@ -1507,7 +1539,7 @@
 HSPLcom/android/server/ExtconUEventObserver$ExtconInfo;->initExtconInfos()V
 HSPLcom/android/server/ExtconUEventObserver$ExtconInfo;->lambda$new$0(Ljava/io/File;Ljava/lang/String;)Z
 HSPLcom/android/server/ExtconUEventObserver;-><init>()V
-PLcom/android/server/ExtconUEventObserver;->extconExists()Z
+HSPLcom/android/server/ExtconUEventObserver;->extconExists()Z
 PLcom/android/server/ExtconUEventObserver;->onUEvent(Landroid/os/UEventObserver$UEvent;)V
 HSPLcom/android/server/ExtconUEventObserver;->startObserving(Lcom/android/server/ExtconUEventObserver$ExtconInfo;)V
 PLcom/android/server/FactoryResetter;-><clinit>()V
@@ -1518,7 +1550,7 @@
 HSPLcom/android/server/FgThread;->getExecutor()Ljava/util/concurrent/Executor;
 HSPLcom/android/server/FgThread;->getHandler()Landroid/os/Handler;
 HSPLcom/android/server/GestureLauncherService$1;-><init>(Lcom/android/server/GestureLauncherService;)V
-PLcom/android/server/GestureLauncherService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/GestureLauncherService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/GestureLauncherService$2;-><init>(Lcom/android/server/GestureLauncherService;Landroid/os/Handler;)V
 PLcom/android/server/GestureLauncherService$2;->onChange(ZLandroid/net/Uri;I)V
 HSPLcom/android/server/GestureLauncherService$CameraLiftTriggerEventListener;-><init>(Lcom/android/server/GestureLauncherService;)V
@@ -1528,12 +1560,12 @@
 PLcom/android/server/GestureLauncherService$GestureLauncherEvent;-><clinit>()V
 PLcom/android/server/GestureLauncherService$GestureLauncherEvent;-><init>(Ljava/lang/String;II)V
 PLcom/android/server/GestureLauncherService$GestureLauncherEvent;->getId()I
-PLcom/android/server/GestureLauncherService;->-$$Nest$fgetmContext(Lcom/android/server/GestureLauncherService;)Landroid/content/Context;
-PLcom/android/server/GestureLauncherService;->-$$Nest$fgetmSettingObserver(Lcom/android/server/GestureLauncherService;)Landroid/database/ContentObserver;
+HSPLcom/android/server/GestureLauncherService;->-$$Nest$fgetmContext(Lcom/android/server/GestureLauncherService;)Landroid/content/Context;
+HSPLcom/android/server/GestureLauncherService;->-$$Nest$fgetmSettingObserver(Lcom/android/server/GestureLauncherService;)Landroid/database/ContentObserver;
 PLcom/android/server/GestureLauncherService;->-$$Nest$fgetmUserId(Lcom/android/server/GestureLauncherService;)I
-PLcom/android/server/GestureLauncherService;->-$$Nest$fputmUserId(Lcom/android/server/GestureLauncherService;I)V
-PLcom/android/server/GestureLauncherService;->-$$Nest$mregisterContentObservers(Lcom/android/server/GestureLauncherService;)V
-PLcom/android/server/GestureLauncherService;->-$$Nest$mupdateCameraRegistered(Lcom/android/server/GestureLauncherService;)V
+HSPLcom/android/server/GestureLauncherService;->-$$Nest$fputmUserId(Lcom/android/server/GestureLauncherService;I)V
+HSPLcom/android/server/GestureLauncherService;->-$$Nest$mregisterContentObservers(Lcom/android/server/GestureLauncherService;)V
+HSPLcom/android/server/GestureLauncherService;->-$$Nest$mupdateCameraRegistered(Lcom/android/server/GestureLauncherService;)V
 HSPLcom/android/server/GestureLauncherService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/GestureLauncherService;-><init>(Landroid/content/Context;Lcom/android/internal/logging/MetricsLogger;Lcom/android/internal/logging/UiEventLogger;)V
 HSPLcom/android/server/GestureLauncherService;->getEmergencyGesturePowerButtonCooldownPeriodMs(Landroid/content/Context;I)I
@@ -1592,8 +1624,8 @@
 HSPLcom/android/server/IntentResolver;->filterResults(Ljava/util/List;)V
 HSPLcom/android/server/IntentResolver;->filterSet()Ljava/util/Set;
 HSPLcom/android/server/IntentResolver;->findFilters(Landroid/content/IntentFilter;)Ljava/util/ArrayList;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Lcom/android/server/IntentResolver;Lcom/android/server/pm/PreferredIntentResolver;,Lcom/android/server/pm/CrossProfileIntentResolver;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
-HSPLcom/android/server/IntentResolver;->getFastIntentCategories(Landroid/content/Intent;)Landroid/util/FastImmutableArraySet;+]Landroid/content/Intent;Landroid/content/Intent;]Ljava/util/Set;Landroid/util/ArraySet;
-HPLcom/android/server/IntentResolver;->intentMatchesFilter(Landroid/content/IntentFilter;Landroid/content/Intent;Ljava/lang/String;)Z
+HSPLcom/android/server/IntentResolver;->getFastIntentCategories(Landroid/content/Intent;)Landroid/util/FastImmutableArraySet;+]Ljava/util/Set;Landroid/util/ArraySet;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/IntentResolver;->intentMatchesFilter(Landroid/content/IntentFilter;Landroid/content/Intent;Ljava/lang/String;)Z
 HSPLcom/android/server/IntentResolver;->isFilterStopped(Lcom/android/server/pm/pkg/PackageStateInternal;I)Z
 HSPLcom/android/server/IntentResolver;->newResult(Lcom/android/server/pm/Computer;Ljava/lang/Object;IIJ)Ljava/lang/Object;
 HSPLcom/android/server/IntentResolver;->queryIntent(Lcom/android/server/pm/snapshot/PackageDataSnapshot;Landroid/content/Intent;Ljava/lang/String;ZI)Ljava/util/List;+]Lcom/android/server/IntentResolver;megamorphic_types
@@ -1601,7 +1633,7 @@
 HSPLcom/android/server/IntentResolver;->queryIntentFromList(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;ZLjava/util/ArrayList;IJ)Ljava/util/List;+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/IntentResolver;Lcom/android/server/pm/resolution/ComponentResolver$ReceiverIntentResolver;,Lcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;,Lcom/android/server/pm/resolution/ComponentResolver$ServiceIntentResolver;,Lcom/android/server/pm/resolution/ComponentResolver$ProviderIntentResolver;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/IntentResolver;->register_intent_filter(Ljava/lang/Object;Ljava/util/Iterator;Landroid/util/ArrayMap;Ljava/lang/String;)I+]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/server/IntentResolver;megamorphic_types
 HSPLcom/android/server/IntentResolver;->register_mime_types(Ljava/lang/Object;Ljava/lang/String;)I+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/IntentFilter;Landroid/content/IntentFilter;,Lcom/android/server/am/BroadcastFilter;,Landroid/content/pm/AuxiliaryResolveInfo$AuxiliaryFilter;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/server/IntentResolver;megamorphic_types
-HSPLcom/android/server/IntentResolver;->removeFilter(Ljava/lang/Object;)V
+HSPLcom/android/server/IntentResolver;->removeFilter(Ljava/lang/Object;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/IntentResolver;megamorphic_types
 HSPLcom/android/server/IntentResolver;->removeFilterInternal(Ljava/lang/Object;)V+]Landroid/content/IntentFilter;Landroid/content/IntentFilter;,Lcom/android/server/am/BroadcastFilter;]Lcom/android/server/IntentResolver;megamorphic_types
 HSPLcom/android/server/IntentResolver;->remove_all_objects(Landroid/util/ArrayMap;Ljava/lang/String;Ljava/lang/Object;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/IntentResolver;megamorphic_types
 HSPLcom/android/server/IntentResolver;->snapshot(Ljava/lang/Object;)Ljava/lang/Object;
@@ -1666,12 +1698,14 @@
 PLcom/android/server/MmsServiceBroker$1;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/MmsServiceBroker$2;-><init>(Lcom/android/server/MmsServiceBroker;)V
 PLcom/android/server/MmsServiceBroker$2;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/MmsServiceBroker$2;->onServiceDisconnected(Landroid/content/ComponentName;)V
 HSPLcom/android/server/MmsServiceBroker$3;-><init>(Lcom/android/server/MmsServiceBroker;)V
 HSPLcom/android/server/MmsServiceBroker$BinderService;-><init>(Lcom/android/server/MmsServiceBroker;)V
 HSPLcom/android/server/MmsServiceBroker$BinderService;-><init>(Lcom/android/server/MmsServiceBroker;Lcom/android/server/MmsServiceBroker$BinderService-IA;)V
 HPLcom/android/server/MmsServiceBroker$BinderService;->adjustUriForUserAndGrantPermission(Landroid/net/Uri;Ljava/lang/String;II)Landroid/net/Uri;
 PLcom/android/server/MmsServiceBroker$BinderService;->downloadMessage(ILjava/lang/String;Ljava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;Landroid/app/PendingIntent;JLjava/lang/String;)V
-PLcom/android/server/MmsServiceBroker$BinderService;->sendMessage(ILjava/lang/String;Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/app/PendingIntent;JLjava/lang/String;)V
+HPLcom/android/server/MmsServiceBroker$BinderService;->sendMessage(ILjava/lang/String;Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/app/PendingIntent;JLjava/lang/String;)V
+PLcom/android/server/MmsServiceBroker;->-$$Nest$fgetmConnectionHandler(Lcom/android/server/MmsServiceBroker;)Landroid/os/Handler;
 PLcom/android/server/MmsServiceBroker;->-$$Nest$fgetmContext(Lcom/android/server/MmsServiceBroker;)Landroid/content/Context;
 PLcom/android/server/MmsServiceBroker;->-$$Nest$fputmService(Lcom/android/server/MmsServiceBroker;Lcom/android/internal/telephony/IMms;)V
 PLcom/android/server/MmsServiceBroker;->-$$Nest$mgetAppOpsManager(Lcom/android/server/MmsServiceBroker;)Landroid/app/AppOpsManager;
@@ -1696,7 +1730,7 @@
 HSPLcom/android/server/MountServiceIdler;-><clinit>()V
 PLcom/android/server/MountServiceIdler;-><init>()V
 HSPLcom/android/server/MountServiceIdler;->offsetFromTodayMidnight(II)Ljava/util/Calendar;
-PLcom/android/server/MountServiceIdler;->onStartJob(Landroid/app/job/JobParameters;)Z
+HPLcom/android/server/MountServiceIdler;->onStartJob(Landroid/app/job/JobParameters;)Z
 PLcom/android/server/MountServiceIdler;->onStopJob(Landroid/app/job/JobParameters;)Z
 HSPLcom/android/server/MountServiceIdler;->scheduleIdlePass(Landroid/content/Context;)V
 HSPLcom/android/server/NetworkManagementInternal;-><init>()V
@@ -1756,7 +1790,7 @@
 HSPLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->$r8$lambda$I_hemd029I9KolzyJR8kIoaKWlY(Lcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;Ljava/lang/String;Z)V
 HSPLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->$r8$lambda$V9FbTzn3VSOAMWQ5cb-0VUdypE0(Lcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;Ljava/lang/String;)V
 PLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->$r8$lambda$akLnwDjVGOd9ClkpqpY-9G3iDx0(Lcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->$r8$lambda$us6RK6Ujt_2jFHX5obOq3R4BfC4(Lcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;Ljava/lang/String;J[Ljava/lang/String;)V
+HPLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->$r8$lambda$us6RK6Ujt_2jFHX5obOq3R4BfC4(Lcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;Ljava/lang/String;J[Ljava/lang/String;)V
 HSPLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;->$r8$lambda$zhD0mBEJk3DXHzbnf2shIuKoCf0(Lcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;Ljava/lang/String;)V
 HSPLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;-><init>(Lcom/android/server/NetworkManagementService;)V
 HSPLcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener;-><init>(Lcom/android/server/NetworkManagementService;Lcom/android/server/NetworkManagementService$NetdUnsolicitedEventListener-IA;)V
@@ -1791,10 +1825,10 @@
 HSPLcom/android/server/NetworkManagementService;->-$$Nest$fgetmDaemonHandler(Lcom/android/server/NetworkManagementService;)Landroid/os/Handler;
 HSPLcom/android/server/NetworkManagementService;->-$$Nest$misNetworkRestrictedInternal(Lcom/android/server/NetworkManagementService;I)Z
 HSPLcom/android/server/NetworkManagementService;->-$$Nest$mnotifyAddressRemoved(Lcom/android/server/NetworkManagementService;Ljava/lang/String;Landroid/net/LinkAddress;)V
-HSPLcom/android/server/NetworkManagementService;->-$$Nest$mnotifyAddressUpdated(Lcom/android/server/NetworkManagementService;Ljava/lang/String;Landroid/net/LinkAddress;)V
+HSPLcom/android/server/NetworkManagementService;->-$$Nest$mnotifyAddressUpdated(Lcom/android/server/NetworkManagementService;Ljava/lang/String;Landroid/net/LinkAddress;)V+]Lcom/android/server/NetworkManagementService;Lcom/android/server/NetworkManagementService;
 HSPLcom/android/server/NetworkManagementService;->-$$Nest$mnotifyInterfaceAdded(Lcom/android/server/NetworkManagementService;Ljava/lang/String;)V
 HPLcom/android/server/NetworkManagementService;->-$$Nest$mnotifyInterfaceClassActivity(Lcom/android/server/NetworkManagementService;IZJI)V
-PLcom/android/server/NetworkManagementService;->-$$Nest$mnotifyInterfaceDnsServerInfo(Lcom/android/server/NetworkManagementService;Ljava/lang/String;J[Ljava/lang/String;)V
+HPLcom/android/server/NetworkManagementService;->-$$Nest$mnotifyInterfaceDnsServerInfo(Lcom/android/server/NetworkManagementService;Ljava/lang/String;J[Ljava/lang/String;)V
 HSPLcom/android/server/NetworkManagementService;->-$$Nest$mnotifyInterfaceLinkStateChanged(Lcom/android/server/NetworkManagementService;Ljava/lang/String;Z)V
 HSPLcom/android/server/NetworkManagementService;->-$$Nest$mnotifyInterfaceRemoved(Lcom/android/server/NetworkManagementService;Ljava/lang/String;)V
 PLcom/android/server/NetworkManagementService;->-$$Nest$mnotifyLimitReached(Lcom/android/server/NetworkManagementService;Ljava/lang/String;Ljava/lang/String;)V
@@ -1833,7 +1867,7 @@
 HSPLcom/android/server/NetworkManagementService;->notifyAddressRemoved(Ljava/lang/String;Landroid/net/LinkAddress;)V
 HSPLcom/android/server/NetworkManagementService;->notifyAddressUpdated(Ljava/lang/String;Landroid/net/LinkAddress;)V
 HSPLcom/android/server/NetworkManagementService;->notifyInterfaceAdded(Ljava/lang/String;)V
-HPLcom/android/server/NetworkManagementService;->notifyInterfaceClassActivity(IZJI)V
+HPLcom/android/server/NetworkManagementService;->notifyInterfaceClassActivity(IZJI)V+]Lcom/android/server/NetworkManagementService;Lcom/android/server/NetworkManagementService;
 HPLcom/android/server/NetworkManagementService;->notifyInterfaceDnsServerInfo(Ljava/lang/String;J[Ljava/lang/String;)V
 HSPLcom/android/server/NetworkManagementService;->notifyInterfaceLinkStateChanged(Ljava/lang/String;Z)V
 HSPLcom/android/server/NetworkManagementService;->notifyInterfaceRemoved(Ljava/lang/String;)V
@@ -1846,19 +1880,19 @@
 HSPLcom/android/server/NetworkManagementService;->setFirewallChainEnabled(IZ)V
 HSPLcom/android/server/NetworkManagementService;->setFirewallChainState(IZ)V
 HSPLcom/android/server/NetworkManagementService;->setFirewallEnabled(Z)V
-HPLcom/android/server/NetworkManagementService;->setFirewallUidRule(III)V+]Lcom/android/server/NetworkManagementService;Lcom/android/server/NetworkManagementService;
-HPLcom/android/server/NetworkManagementService;->setFirewallUidRuleLocked(III)V+]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/NetworkManagementService;Lcom/android/server/NetworkManagementService;]Landroid/net/ConnectivityManager;Landroid/net/ConnectivityManager;
+HSPLcom/android/server/NetworkManagementService;->setFirewallUidRule(III)V+]Lcom/android/server/NetworkManagementService;Lcom/android/server/NetworkManagementService;
+HSPLcom/android/server/NetworkManagementService;->setFirewallUidRuleLocked(III)V+]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/NetworkManagementService;Lcom/android/server/NetworkManagementService;]Landroid/net/ConnectivityManager;Landroid/net/ConnectivityManager;
 HSPLcom/android/server/NetworkManagementService;->setFirewallUidRules(I[I[I)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/NetworkManagementService;Lcom/android/server/NetworkManagementService;]Landroid/net/ConnectivityManager;Landroid/net/ConnectivityManager;
 HPLcom/android/server/NetworkManagementService;->setInterfaceQuota(Ljava/lang/String;J)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/net/INetd;Landroid/net/INetd$Stub$Proxy;]Landroid/net/ITetheringStatsProvider;Lcom/android/server/NetworkManagementService$NetdTetheringStatsProvider;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;]Ljava/util/Set;Ljava/util/HashMap$KeySet;
 HSPLcom/android/server/NetworkManagementService;->setUidCleartextNetworkPolicy(II)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/NetworkManagementService$Dependencies;Lcom/android/server/NetworkManagementService$Dependencies;
-HSPLcom/android/server/NetworkManagementService;->setUidOnMeteredNetworkAllowlist(IZ)V
+HSPLcom/android/server/NetworkManagementService;->setUidOnMeteredNetworkAllowlist(IZ)V+]Lcom/android/server/NetworkManagementService;Lcom/android/server/NetworkManagementService;
 PLcom/android/server/NetworkManagementService;->setUidOnMeteredNetworkDenylist(IZ)V
 HSPLcom/android/server/NetworkManagementService;->setUidOnMeteredNetworkList(IZZ)V+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/net/ConnectivityManager;Landroid/net/ConnectivityManager;
 HSPLcom/android/server/NetworkManagementService;->syncFirewallChainLocked(ILjava/lang/String;)V
 HSPLcom/android/server/NetworkManagementService;->systemReady()V
 HSPLcom/android/server/NetworkManagementService;->updateFirewallUidRuleLocked(III)Z+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/NetworkManagementService;Lcom/android/server/NetworkManagementService;
 HSPLcom/android/server/NetworkScoreService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/NetworkScoreService;)V
-PLcom/android/server/NetworkScoreService$$ExternalSyntheticLambda0;->getPackages(I)[Ljava/lang/String;
+HSPLcom/android/server/NetworkScoreService$$ExternalSyntheticLambda0;->getPackages(I)[Ljava/lang/String;
 HSPLcom/android/server/NetworkScoreService$$ExternalSyntheticLambda1;-><init>()V
 PLcom/android/server/NetworkScoreService$$ExternalSyntheticLambda1;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/NetworkScoreService$1;-><init>(Lcom/android/server/NetworkScoreService;)V
@@ -1893,7 +1927,7 @@
 PLcom/android/server/NetworkScoreService$ScoringServiceConnection;->unbind(Landroid/content/Context;)V
 HSPLcom/android/server/NetworkScoreService$ServiceHandler;-><init>(Lcom/android/server/NetworkScoreService;Landroid/os/Looper;)V
 PLcom/android/server/NetworkScoreService$ServiceHandler;->handleMessage(Landroid/os/Message;)V
-PLcom/android/server/NetworkScoreService;->$r8$lambda$_c6Oc0XDUETS7rKJh93oRJuo5C0(Lcom/android/server/NetworkScoreService;I)[Ljava/lang/String;
+HSPLcom/android/server/NetworkScoreService;->$r8$lambda$_c6Oc0XDUETS7rKJh93oRJuo5C0(Lcom/android/server/NetworkScoreService;I)[Ljava/lang/String;
 PLcom/android/server/NetworkScoreService;->-$$Nest$fgetmNetworkScorerAppManager(Lcom/android/server/NetworkScoreService;)Lcom/android/server/NetworkScorerAppManager;
 PLcom/android/server/NetworkScoreService;->-$$Nest$mbindToScoringServiceIfNeeded(Lcom/android/server/NetworkScoreService;Landroid/net/NetworkScorerAppData;)V
 PLcom/android/server/NetworkScoreService;->-$$Nest$mrefreshBinding(Lcom/android/server/NetworkScoreService;)V
@@ -1906,15 +1940,15 @@
 PLcom/android/server/NetworkScoreService;->bindToScoringServiceIfNeeded(Landroid/net/NetworkScorerAppData;)V
 PLcom/android/server/NetworkScoreService;->clearInternal()V
 PLcom/android/server/NetworkScoreService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-HPLcom/android/server/NetworkScoreService;->enforceSystemOnly()V
+HSPLcom/android/server/NetworkScoreService;->enforceSystemOnly()V
 HSPLcom/android/server/NetworkScoreService;->enforceSystemOrHasScoreNetworks()V+]Landroid/content/Context;Landroid/app/ContextImpl;
-HSPLcom/android/server/NetworkScoreService;->getActiveScorerPackage()Ljava/lang/String;+]Lcom/android/server/NetworkScoreService;Lcom/android/server/NetworkScoreService;]Lcom/android/server/NetworkScorerAppManager;Lcom/android/server/NetworkScorerAppManager;
+HSPLcom/android/server/NetworkScoreService;->getActiveScorerPackage()Ljava/lang/String;+]Lcom/android/server/NetworkScoreService;Lcom/android/server/NetworkScoreService;]Lcom/android/server/NetworkScorerAppManager;Lcom/android/server/NetworkScorerAppManager;]Landroid/net/NetworkScorerAppData;Landroid/net/NetworkScorerAppData;
 HPLcom/android/server/NetworkScoreService;->getRecommendationProvider()Landroid/net/INetworkRecommendationProvider;
 PLcom/android/server/NetworkScoreService;->getScoreCacheLists()Ljava/util/Collection;
-PLcom/android/server/NetworkScoreService;->lambda$new$0(I)[Ljava/lang/String;
+HSPLcom/android/server/NetworkScoreService;->lambda$new$0(I)[Ljava/lang/String;
 PLcom/android/server/NetworkScoreService;->onUserUnlocked(I)V
 PLcom/android/server/NetworkScoreService;->refreshBinding()V
-PLcom/android/server/NetworkScoreService;->registerNetworkScoreCache(ILandroid/net/INetworkScoreCache;I)V
+HSPLcom/android/server/NetworkScoreService;->registerNetworkScoreCache(ILandroid/net/INetworkScoreCache;I)V
 PLcom/android/server/NetworkScoreService;->registerPackageMonitorIfNeeded()V
 HSPLcom/android/server/NetworkScoreService;->registerRecommendationSettingsObserver()V
 HPLcom/android/server/NetworkScoreService;->requestScores([Landroid/net/NetworkKey;)Z
@@ -1932,15 +1966,15 @@
 HSPLcom/android/server/NetworkScorerAppManager;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/NetworkScorerAppManager;-><init>(Landroid/content/Context;Lcom/android/server/NetworkScorerAppManager$SettingsFacade;)V
 HPLcom/android/server/NetworkScorerAppManager;->canAccessLocation(ILjava/lang/String;)Z
-HPLcom/android/server/NetworkScorerAppManager;->findUseOpenWifiNetworksActivity(Landroid/content/pm/ServiceInfo;)Landroid/content/ComponentName;
-HSPLcom/android/server/NetworkScorerAppManager;->getActiveScorer()Landroid/net/NetworkScorerAppData;
+HPLcom/android/server/NetworkScorerAppManager;->findUseOpenWifiNetworksActivity(Landroid/content/pm/ServiceInfo;)Landroid/content/ComponentName;+]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/NetworkScorerAppManager;->getActiveScorer()Landroid/net/NetworkScorerAppData;+]Lcom/android/server/NetworkScorerAppManager;Lcom/android/server/NetworkScorerAppManager;
 HSPLcom/android/server/NetworkScorerAppManager;->getAllValidScorers()Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/NetworkScorerAppManager;Lcom/android/server/NetworkScorerAppManager;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
 PLcom/android/server/NetworkScorerAppManager;->getDefaultPackageSetting()Ljava/lang/String;
 HPLcom/android/server/NetworkScorerAppManager;->getNetworkAvailableNotificationChannelId(Landroid/content/pm/ServiceInfo;)Ljava/lang/String;
 HSPLcom/android/server/NetworkScorerAppManager;->getNetworkRecommendationsEnabledSetting()I+]Lcom/android/server/NetworkScorerAppManager$SettingsFacade;Lcom/android/server/NetworkScorerAppManager$SettingsFacade;
-HSPLcom/android/server/NetworkScorerAppManager;->getNetworkRecommendationsPackage()Ljava/lang/String;
+HSPLcom/android/server/NetworkScorerAppManager;->getNetworkRecommendationsPackage()Ljava/lang/String;+]Lcom/android/server/NetworkScorerAppManager$SettingsFacade;Lcom/android/server/NetworkScorerAppManager$SettingsFacade;
 HPLcom/android/server/NetworkScorerAppManager;->getRecommendationServiceLabel(Landroid/content/pm/ServiceInfo;Landroid/content/pm/PackageManager;)Ljava/lang/String;
-HSPLcom/android/server/NetworkScorerAppManager;->getScorer(Ljava/lang/String;)Landroid/net/NetworkScorerAppData;
+HSPLcom/android/server/NetworkScorerAppManager;->getScorer(Ljava/lang/String;)Landroid/net/NetworkScorerAppData;+]Landroid/net/NetworkScorerAppData;Landroid/net/NetworkScorerAppData;]Ljava/util/List;Ljava/util/ArrayList;,Ljava/util/Collections$EmptyList;]Lcom/android/server/NetworkScorerAppManager;Lcom/android/server/NetworkScorerAppManager;
 HPLcom/android/server/NetworkScorerAppManager;->hasPermissions(ILjava/lang/String;)Z
 HPLcom/android/server/NetworkScorerAppManager;->hasScoreNetworksPermission(Ljava/lang/String;)Z
 HPLcom/android/server/NetworkScorerAppManager;->isLocationModeEnabled()Z
@@ -1957,7 +1991,7 @@
 PLcom/android/server/NetworkTimeUpdateService$MyHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/NetworkTimeUpdateService$NetworkTimeUpdateCallback;-><init>(Lcom/android/server/NetworkTimeUpdateService;)V
 HSPLcom/android/server/NetworkTimeUpdateService$NetworkTimeUpdateCallback;-><init>(Lcom/android/server/NetworkTimeUpdateService;Lcom/android/server/NetworkTimeUpdateService$NetworkTimeUpdateCallback-IA;)V
-PLcom/android/server/NetworkTimeUpdateService$NetworkTimeUpdateCallback;->onAvailable(Landroid/net/Network;)V
+HPLcom/android/server/NetworkTimeUpdateService$NetworkTimeUpdateCallback;->onAvailable(Landroid/net/Network;)V
 PLcom/android/server/NetworkTimeUpdateService$NetworkTimeUpdateCallback;->onLost(Landroid/net/Network;)V
 PLcom/android/server/NetworkTimeUpdateService;->-$$Nest$fgetmDefaultNetwork(Lcom/android/server/NetworkTimeUpdateService;)Landroid/net/Network;
 PLcom/android/server/NetworkTimeUpdateService;->-$$Nest$fgetmHandler(Lcom/android/server/NetworkTimeUpdateService;)Landroid/os/Handler;
@@ -1967,7 +2001,7 @@
 PLcom/android/server/NetworkTimeUpdateService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/NetworkTimeUpdateService;->makeNetworkTimeSuggestion(Landroid/util/NtpTrustedTime$TimeResult;Ljava/lang/String;)V
 PLcom/android/server/NetworkTimeUpdateService;->onPollNetworkTime(I)V
-PLcom/android/server/NetworkTimeUpdateService;->onPollNetworkTimeUnderWakeLock(I)V
+HPLcom/android/server/NetworkTimeUpdateService;->onPollNetworkTimeUnderWakeLock(I)V
 HSPLcom/android/server/NetworkTimeUpdateService;->registerForAlarms()V
 PLcom/android/server/NetworkTimeUpdateService;->resetAlarm(J)V
 HSPLcom/android/server/NetworkTimeUpdateService;->systemRunning()V
@@ -1982,7 +2016,7 @@
 HSPLcom/android/server/PackageWatchdog$$ExternalSyntheticLambda1;-><init>()V
 HSPLcom/android/server/PackageWatchdog$$ExternalSyntheticLambda1;->uptimeMillis()J
 HSPLcom/android/server/PackageWatchdog$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/PackageWatchdog;)V
-PLcom/android/server/PackageWatchdog$$ExternalSyntheticLambda2;->run()V
+HSPLcom/android/server/PackageWatchdog$$ExternalSyntheticLambda2;->run()V
 HSPLcom/android/server/PackageWatchdog$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/PackageWatchdog;)V
 PLcom/android/server/PackageWatchdog$$ExternalSyntheticLambda3;->run()V
 HSPLcom/android/server/PackageWatchdog$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/PackageWatchdog;)V
@@ -1991,9 +2025,9 @@
 HSPLcom/android/server/PackageWatchdog$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/PackageWatchdog;)V
 PLcom/android/server/PackageWatchdog$$ExternalSyntheticLambda6;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/PackageWatchdog$$ExternalSyntheticLambda7;-><init>(Lcom/android/server/PackageWatchdog;)V
-PLcom/android/server/PackageWatchdog$$ExternalSyntheticLambda7;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/PackageWatchdog$$ExternalSyntheticLambda7;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/PackageWatchdog$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/PackageWatchdog;)V
-PLcom/android/server/PackageWatchdog$$ExternalSyntheticLambda8;->run()V
+HSPLcom/android/server/PackageWatchdog$$ExternalSyntheticLambda8;->run()V
 HSPLcom/android/server/PackageWatchdog$$ExternalSyntheticLambda9;-><init>(Lcom/android/server/PackageWatchdog;)V
 HSPLcom/android/server/PackageWatchdog$BootThreshold;-><init>(Lcom/android/server/PackageWatchdog;IJ)V
 HSPLcom/android/server/PackageWatchdog$BootThreshold;->getCount()I
@@ -2013,51 +2047,51 @@
 PLcom/android/server/PackageWatchdog$MonitoredPackage;->-$$Nest$fgetmFailureHistory(Lcom/android/server/PackageWatchdog$MonitoredPackage;)Landroid/util/LongArrayQueue;
 PLcom/android/server/PackageWatchdog$MonitoredPackage;->-$$Nest$fgetmHealthCheckDurationMs(Lcom/android/server/PackageWatchdog$MonitoredPackage;)J
 PLcom/android/server/PackageWatchdog$MonitoredPackage;->-$$Nest$fgetmHealthCheckState(Lcom/android/server/PackageWatchdog$MonitoredPackage;)I
-HSPLcom/android/server/PackageWatchdog$MonitoredPackage;->-$$Nest$mgetName(Lcom/android/server/PackageWatchdog$MonitoredPackage;)Ljava/lang/String;
+HSPLcom/android/server/PackageWatchdog$MonitoredPackage;->-$$Nest$mgetName(Lcom/android/server/PackageWatchdog$MonitoredPackage;)Ljava/lang/String;+]Lcom/android/server/PackageWatchdog$MonitoredPackage;Lcom/android/server/PackageWatchdog$MonitoredPackage;
 PLcom/android/server/PackageWatchdog$MonitoredPackage;->-$$Nest$mtoString(Lcom/android/server/PackageWatchdog$MonitoredPackage;I)Ljava/lang/String;
 HSPLcom/android/server/PackageWatchdog$MonitoredPackage;-><init>(Lcom/android/server/PackageWatchdog;Ljava/lang/String;JJZLandroid/util/LongArrayQueue;)V
-HPLcom/android/server/PackageWatchdog$MonitoredPackage;->getHealthCheckStateLocked()I
-PLcom/android/server/PackageWatchdog$MonitoredPackage;->getMitigationCountLocked()I
+HSPLcom/android/server/PackageWatchdog$MonitoredPackage;->getHealthCheckStateLocked()I
+HPLcom/android/server/PackageWatchdog$MonitoredPackage;->getMitigationCountLocked()I+]Lcom/android/server/PackageWatchdog$SystemClock;Lcom/android/server/PackageWatchdog$$ExternalSyntheticLambda1;]Landroid/util/LongArrayQueue;Landroid/util/LongArrayQueue;
 HSPLcom/android/server/PackageWatchdog$MonitoredPackage;->getName()Ljava/lang/String;
 HSPLcom/android/server/PackageWatchdog$MonitoredPackage;->getShortestScheduleDurationMsLocked()J
-PLcom/android/server/PackageWatchdog$MonitoredPackage;->handleElapsedTimeLocked(J)I
-PLcom/android/server/PackageWatchdog$MonitoredPackage;->isExpiredLocked()Z
+HPLcom/android/server/PackageWatchdog$MonitoredPackage;->handleElapsedTimeLocked(J)I
+HPLcom/android/server/PackageWatchdog$MonitoredPackage;->isExpiredLocked()Z
 HSPLcom/android/server/PackageWatchdog$MonitoredPackage;->isPendingHealthChecksLocked()Z
 HSPLcom/android/server/PackageWatchdog$MonitoredPackage;->normalizeMitigationCalls()Landroid/util/LongArrayQueue;+]Lcom/android/server/PackageWatchdog$SystemClock;Lcom/android/server/PackageWatchdog$$ExternalSyntheticLambda1;]Landroid/util/LongArrayQueue;Landroid/util/LongArrayQueue;
 PLcom/android/server/PackageWatchdog$MonitoredPackage;->noteMitigationCallLocked()V
-HPLcom/android/server/PackageWatchdog$MonitoredPackage;->onFailureLocked()Z
-PLcom/android/server/PackageWatchdog$MonitoredPackage;->setHealthCheckActiveLocked(J)I
+HPLcom/android/server/PackageWatchdog$MonitoredPackage;->onFailureLocked()Z+]Lcom/android/server/PackageWatchdog$SystemClock;Lcom/android/server/PackageWatchdog$$ExternalSyntheticLambda1;]Landroid/util/LongArrayQueue;Landroid/util/LongArrayQueue;
+HSPLcom/android/server/PackageWatchdog$MonitoredPackage;->setHealthCheckActiveLocked(J)I
 HSPLcom/android/server/PackageWatchdog$MonitoredPackage;->toPositive(J)J
 HSPLcom/android/server/PackageWatchdog$MonitoredPackage;->toString(I)Ljava/lang/String;
-PLcom/android/server/PackageWatchdog$MonitoredPackage;->tryPassHealthCheckLocked()I
+HSPLcom/android/server/PackageWatchdog$MonitoredPackage;->tryPassHealthCheckLocked()I
 PLcom/android/server/PackageWatchdog$MonitoredPackage;->updateHealthCheckDuration(J)V
-HSPLcom/android/server/PackageWatchdog$MonitoredPackage;->updateHealthCheckStateLocked()I
+HSPLcom/android/server/PackageWatchdog$MonitoredPackage;->updateHealthCheckStateLocked()I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/PackageWatchdog$MonitoredPackage;Lcom/android/server/PackageWatchdog$MonitoredPackage;
 HSPLcom/android/server/PackageWatchdog$MonitoredPackage;->writeLocked(Landroid/util/TypedXmlSerializer;)V
 PLcom/android/server/PackageWatchdog$ObserverInternal;->-$$Nest$mprunePackagesLocked(Lcom/android/server/PackageWatchdog$ObserverInternal;J)Ljava/util/Set;
 HSPLcom/android/server/PackageWatchdog$ObserverInternal;-><init>(Ljava/lang/String;Ljava/util/List;)V
 PLcom/android/server/PackageWatchdog$ObserverInternal;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
-HSPLcom/android/server/PackageWatchdog$ObserverInternal;->getMonitoredPackage(Ljava/lang/String;)Lcom/android/server/PackageWatchdog$MonitoredPackage;
+HSPLcom/android/server/PackageWatchdog$ObserverInternal;->getMonitoredPackage(Ljava/lang/String;)Lcom/android/server/PackageWatchdog$MonitoredPackage;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/PackageWatchdog$ObserverInternal;->getMonitoredPackages()Landroid/util/ArrayMap;
-HPLcom/android/server/PackageWatchdog$ObserverInternal;->onPackageFailureLocked(Ljava/lang/String;)Z
+HPLcom/android/server/PackageWatchdog$ObserverInternal;->onPackageFailureLocked(Ljava/lang/String;)Z+]Lcom/android/server/PackageWatchdog$PackageHealthObserver;Lcom/android/server/rollback/RollbackPackageHealthObserver;,Lcom/android/server/RescueParty$RescuePartyObserver;]Lcom/android/server/PackageWatchdog$ObserverInternal;Lcom/android/server/PackageWatchdog$ObserverInternal;]Lcom/android/server/PackageWatchdog$MonitoredPackage;Lcom/android/server/PackageWatchdog$MonitoredPackage;]Lcom/android/server/PackageWatchdog;Lcom/android/server/PackageWatchdog;
 HPLcom/android/server/PackageWatchdog$ObserverInternal;->prunePackagesLocked(J)Ljava/util/Set;
 HSPLcom/android/server/PackageWatchdog$ObserverInternal;->putMonitoredPackage(Lcom/android/server/PackageWatchdog$MonitoredPackage;)V
 HSPLcom/android/server/PackageWatchdog$ObserverInternal;->read(Landroid/util/TypedXmlPullParser;Lcom/android/server/PackageWatchdog;)Lcom/android/server/PackageWatchdog$ObserverInternal;
 HSPLcom/android/server/PackageWatchdog$ObserverInternal;->updatePackagesLocked(Ljava/util/List;)V
 HSPLcom/android/server/PackageWatchdog$ObserverInternal;->writeLocked(Landroid/util/TypedXmlSerializer;)Z
-PLcom/android/server/PackageWatchdog$PackageHealthObserver;->isPersistent()Z
+HPLcom/android/server/PackageWatchdog$PackageHealthObserver;->isPersistent()Z
 PLcom/android/server/PackageWatchdog;->$r8$lambda$0Q0c8nlYY4DeIw299JfADBzIUqU(Lcom/android/server/PackageWatchdog;Lcom/android/server/PackageWatchdog$PackageHealthObserver;Ljava/util/List;Ljava/util/List;)V
-PLcom/android/server/PackageWatchdog;->$r8$lambda$AMVDPZHVujkiZUWfDH32AfGzgt8(Lcom/android/server/PackageWatchdog;)V
+HSPLcom/android/server/PackageWatchdog;->$r8$lambda$AMVDPZHVujkiZUWfDH32AfGzgt8(Lcom/android/server/PackageWatchdog;)V
 PLcom/android/server/PackageWatchdog;->$r8$lambda$Mx_Y1uqlcwGnBszKo_ph_MI-E0g(Lcom/android/server/PackageWatchdog;)V
 PLcom/android/server/PackageWatchdog;->$r8$lambda$QLAW8O0nzCm0mV3t0kSm44xmdUU(Lcom/android/server/PackageWatchdog;Ljava/lang/String;)V
 PLcom/android/server/PackageWatchdog;->$r8$lambda$YtLdQKqgtoBcorg91OTPJeOL6CM(Lcom/android/server/PackageWatchdog;)V
-PLcom/android/server/PackageWatchdog;->$r8$lambda$fYKatkyIvh8TGD9Az3K71owtuP4(Lcom/android/server/PackageWatchdog;ILjava/util/List;)V
-PLcom/android/server/PackageWatchdog;->$r8$lambda$gZWs-TyzQqbLM3R81XiXAOEkCKo(Lcom/android/server/PackageWatchdog;Ljava/util/List;)V
+HPLcom/android/server/PackageWatchdog;->$r8$lambda$fYKatkyIvh8TGD9Az3K71owtuP4(Lcom/android/server/PackageWatchdog;ILjava/util/List;)V
+HSPLcom/android/server/PackageWatchdog;->$r8$lambda$gZWs-TyzQqbLM3R81XiXAOEkCKo(Lcom/android/server/PackageWatchdog;Ljava/util/List;)V
 PLcom/android/server/PackageWatchdog;->$r8$lambda$q9WB4fFJwYjeA4BAsHoz0Yt6pgw(Lcom/android/server/PackageWatchdog;)V
 HSPLcom/android/server/PackageWatchdog;->$r8$lambda$sB1AaENOScp2w-CsmK3S4QVgWFE(Lcom/android/server/PackageWatchdog;)Z
-PLcom/android/server/PackageWatchdog;->$r8$lambda$ynWNQmq6XL4jo-iPgeNDgXz9iyk(Lcom/android/server/PackageWatchdog;)V
+HSPLcom/android/server/PackageWatchdog;->$r8$lambda$ynWNQmq6XL4jo-iPgeNDgXz9iyk(Lcom/android/server/PackageWatchdog;)V
 HSPLcom/android/server/PackageWatchdog;->-$$Nest$fgetmSystemClock(Lcom/android/server/PackageWatchdog;)Lcom/android/server/PackageWatchdog$SystemClock;
-PLcom/android/server/PackageWatchdog;->-$$Nest$fgetmTriggerFailureCount(Lcom/android/server/PackageWatchdog;)I
-PLcom/android/server/PackageWatchdog;->-$$Nest$fgetmTriggerFailureDurationMs(Lcom/android/server/PackageWatchdog;)I
+HPLcom/android/server/PackageWatchdog;->-$$Nest$fgetmTriggerFailureCount(Lcom/android/server/PackageWatchdog;)I
+HPLcom/android/server/PackageWatchdog;->-$$Nest$fgetmTriggerFailureDurationMs(Lcom/android/server/PackageWatchdog;)I
 PLcom/android/server/PackageWatchdog;->-$$Nest$sfgetsPackageWatchdog()Lcom/android/server/PackageWatchdog;
 HSPLcom/android/server/PackageWatchdog;-><clinit>()V
 HSPLcom/android/server/PackageWatchdog;-><init>(Landroid/content/Context;)V
@@ -2065,12 +2099,13 @@
 PLcom/android/server/PackageWatchdog;->checkAndMitigateNativeCrashes()V
 PLcom/android/server/PackageWatchdog;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
 HSPLcom/android/server/PackageWatchdog;->getInstance(Landroid/content/Context;)Lcom/android/server/PackageWatchdog;
-HSPLcom/android/server/PackageWatchdog;->getNextStateSyncMillisLocked()J
-HPLcom/android/server/PackageWatchdog;->getPackagesPendingHealthChecksLocked()Ljava/util/Set;
+HSPLcom/android/server/PackageWatchdog;->getNextStateSyncMillisLocked()J+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/PackageWatchdog$ObserverInternal;Lcom/android/server/PackageWatchdog$ObserverInternal;]Lcom/android/server/PackageWatchdog$MonitoredPackage;Lcom/android/server/PackageWatchdog$MonitoredPackage;
+HSPLcom/android/server/PackageWatchdog;->getPackagesPendingHealthChecksLocked()Ljava/util/Set;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/PackageWatchdog$ObserverInternal;Lcom/android/server/PackageWatchdog$ObserverInternal;]Lcom/android/server/PackageWatchdog$MonitoredPackage;Lcom/android/server/PackageWatchdog$MonitoredPackage;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/ArraySet;
+PLcom/android/server/PackageWatchdog;->handleFailureImmediately(Ljava/util/List;I)V
 PLcom/android/server/PackageWatchdog;->lambda$checkAndMitigateNativeCrashes$5()V
-HPLcom/android/server/PackageWatchdog;->lambda$onPackageFailure$4(ILjava/util/List;)V
+HPLcom/android/server/PackageWatchdog;->lambda$onPackageFailure$4(ILjava/util/List;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/PackageWatchdog$ObserverInternal;Lcom/android/server/PackageWatchdog$ObserverInternal;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/pm/VersionedPackage;Landroid/content/pm/VersionedPackage;]Lcom/android/server/PackageWatchdog$PackageHealthObserver;Lcom/android/server/RescueParty$RescuePartyObserver;]Lcom/android/server/PackageWatchdog$MonitoredPackage;Lcom/android/server/PackageWatchdog$MonitoredPackage;
 PLcom/android/server/PackageWatchdog;->lambda$onPackagesReady$0(Ljava/lang/String;)V
-PLcom/android/server/PackageWatchdog;->lambda$onPackagesReady$1(Ljava/util/List;)V
+HSPLcom/android/server/PackageWatchdog;->lambda$onPackagesReady$1(Ljava/util/List;)V
 PLcom/android/server/PackageWatchdog;->lambda$scheduleCheckAndMitigateNativeCrashes$6()V
 HPLcom/android/server/PackageWatchdog;->lambda$startObservingHealth$2(Lcom/android/server/PackageWatchdog$PackageHealthObserver;Ljava/util/List;Ljava/util/List;)V
 HSPLcom/android/server/PackageWatchdog;->loadFromFile()V
@@ -2081,8 +2116,8 @@
 PLcom/android/server/PackageWatchdog;->onHealthCheckPassed(Ljava/lang/String;)V
 HPLcom/android/server/PackageWatchdog;->onPackageFailure(Ljava/util/List;I)V
 HSPLcom/android/server/PackageWatchdog;->onPackagesReady()V
-HPLcom/android/server/PackageWatchdog;->onSupportedPackages(Ljava/util/List;)V
-PLcom/android/server/PackageWatchdog;->onSyncRequestNotified()V
+HSPLcom/android/server/PackageWatchdog;->onSupportedPackages(Ljava/util/List;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/PackageWatchdog$ObserverInternal;Lcom/android/server/PackageWatchdog$ObserverInternal;]Landroid/service/watchdog/ExplicitHealthCheckService$PackageConfig;Landroid/service/watchdog/ExplicitHealthCheckService$PackageConfig;]Lcom/android/server/PackageWatchdog$MonitoredPackage;Lcom/android/server/PackageWatchdog$MonitoredPackage;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Ljava/lang/Long;Ljava/lang/Long;]Lcom/android/server/PackageWatchdog;Lcom/android/server/PackageWatchdog;]Ljava/util/Map;Landroid/util/ArrayMap;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;,Ljava/util/ArrayList$Itr;
+HSPLcom/android/server/PackageWatchdog;->onSyncRequestNotified()V
 HSPLcom/android/server/PackageWatchdog;->parseLongArrayQueue(Ljava/lang/String;)Landroid/util/LongArrayQueue;
 HSPLcom/android/server/PackageWatchdog;->parseMonitoredPackage(Landroid/util/TypedXmlPullParser;)Lcom/android/server/PackageWatchdog$MonitoredPackage;
 HSPLcom/android/server/PackageWatchdog;->pruneObserversLocked()V
@@ -2095,7 +2130,7 @@
 HSPLcom/android/server/PackageWatchdog;->setExplicitHealthCheckEnabled(Z)V
 HSPLcom/android/server/PackageWatchdog;->setPropertyChangedListenerLocked()V
 HPLcom/android/server/PackageWatchdog;->startObservingHealth(Lcom/android/server/PackageWatchdog$PackageHealthObserver;Ljava/util/List;J)V
-HPLcom/android/server/PackageWatchdog;->syncRequests()V
+HSPLcom/android/server/PackageWatchdog;->syncRequests()V
 HSPLcom/android/server/PackageWatchdog;->syncRequestsAsync()V
 HSPLcom/android/server/PackageWatchdog;->syncState(Ljava/lang/String;)V
 PLcom/android/server/PackageWatchdog;->syncStateWithScheduledReason()V
@@ -2140,7 +2175,7 @@
 HSPLcom/android/server/PersistentDataBlockService;->doGetOemUnlockEnabled()Z
 HSPLcom/android/server/PersistentDataBlockService;->doSetOemUnlockEnabledLocked(Z)V
 HSPLcom/android/server/PersistentDataBlockService;->enforceChecksumValidity()Z
-PLcom/android/server/PersistentDataBlockService;->enforceOemUnlockReadPermission()V
+HPLcom/android/server/PersistentDataBlockService;->enforceOemUnlockReadPermission()V
 PLcom/android/server/PersistentDataBlockService;->enforceUid(I)V
 HSPLcom/android/server/PersistentDataBlockService;->formatIfOemUnlockEnabled()V
 HSPLcom/android/server/PersistentDataBlockService;->formatPartitionLocked(Z)V
@@ -2162,16 +2197,16 @@
 HSPLcom/android/server/PinnerService$2;-><init>(Lcom/android/server/PinnerService;Landroid/os/Handler;Landroid/net/Uri;)V
 PLcom/android/server/PinnerService$2;->onChange(ZLandroid/net/Uri;)V
 HSPLcom/android/server/PinnerService$3$$ExternalSyntheticLambda0;-><init>()V
-HPLcom/android/server/PinnerService$3$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/PinnerService$3$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;)V+]Ljava/lang/Integer;Ljava/lang/Integer;
 HSPLcom/android/server/PinnerService$3$$ExternalSyntheticLambda1;-><init>()V
-HSPLcom/android/server/PinnerService$3$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-HPLcom/android/server/PinnerService$3;->$r8$lambda$Tp6HB4WyhvtduyXyBIyJU2adIZg(Ljava/lang/Object;I)V
+HSPLcom/android/server/PinnerService$3$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;Ljava/lang/Object;)V+]Ljava/lang/Integer;Ljava/lang/Integer;
+HSPLcom/android/server/PinnerService$3;->$r8$lambda$Tp6HB4WyhvtduyXyBIyJU2adIZg(Ljava/lang/Object;I)V
 HSPLcom/android/server/PinnerService$3;->$r8$lambda$y6AZqKmbHbl3hKG9hTeTnKfTvg4(Ljava/lang/Object;I)V
 HSPLcom/android/server/PinnerService$3;-><init>(Lcom/android/server/PinnerService;)V
 HSPLcom/android/server/PinnerService$3;->lambda$onUidActive$1(Ljava/lang/Object;I)V
-HPLcom/android/server/PinnerService$3;->lambda$onUidGone$0(Ljava/lang/Object;I)V
-HSPLcom/android/server/PinnerService$3;->onUidActive(I)V
-HSPLcom/android/server/PinnerService$3;->onUidGone(IZ)V
+HSPLcom/android/server/PinnerService$3;->lambda$onUidGone$0(Ljava/lang/Object;I)V
+HSPLcom/android/server/PinnerService$3;->onUidActive(I)V+]Landroid/os/Handler;Lcom/android/server/PinnerService$PinnerHandler;
+HSPLcom/android/server/PinnerService$3;->onUidGone(IZ)V+]Landroid/os/Handler;Lcom/android/server/PinnerService$PinnerHandler;
 HSPLcom/android/server/PinnerService$BinderService;-><init>(Lcom/android/server/PinnerService;)V
 HSPLcom/android/server/PinnerService$BinderService;-><init>(Lcom/android/server/PinnerService;Lcom/android/server/PinnerService$BinderService-IA;)V
 PLcom/android/server/PinnerService$BinderService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
@@ -2201,7 +2236,7 @@
 PLcom/android/server/PinnerService;->-$$Nest$mgetNameForKey(Lcom/android/server/PinnerService;I)Ljava/lang/String;
 HSPLcom/android/server/PinnerService;->-$$Nest$mhandlePinOnStart(Lcom/android/server/PinnerService;)V
 HSPLcom/android/server/PinnerService;->-$$Nest$mhandleUidActive(Lcom/android/server/PinnerService;I)V
-HPLcom/android/server/PinnerService;->-$$Nest$mhandleUidGone(Lcom/android/server/PinnerService;I)V
+HSPLcom/android/server/PinnerService;->-$$Nest$mhandleUidGone(Lcom/android/server/PinnerService;I)V
 PLcom/android/server/PinnerService;->-$$Nest$msendPinAppMessage(Lcom/android/server/PinnerService;IIZ)V
 HSPLcom/android/server/PinnerService;->-$$Nest$smsafeMunmap(JJ)V
 HSPLcom/android/server/PinnerService;-><clinit>()V
@@ -2219,7 +2254,7 @@
 HSPLcom/android/server/PinnerService;->getUidForKey(I)I
 HSPLcom/android/server/PinnerService;->handlePinOnStart()V
 HSPLcom/android/server/PinnerService;->handleUidActive(I)V
-HPLcom/android/server/PinnerService;->handleUidGone(I)V
+HSPLcom/android/server/PinnerService;->handleUidGone(I)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/PinnerService;Lcom/android/server/PinnerService;
 HSPLcom/android/server/PinnerService;->isResolverActivity(Landroid/content/pm/ActivityInfo;)Z
 HSPLcom/android/server/PinnerService;->maybeOpenPinMetaInZip(Ljava/util/zip/ZipFile;Ljava/lang/String;)Ljava/io/InputStream;
 HSPLcom/android/server/PinnerService;->maybeOpenZip(Ljava/lang/String;)Ljava/util/zip/ZipFile;
@@ -2267,6 +2302,7 @@
 HSPLcom/android/server/RescueParty$RescuePartyObserver;->getAllAffectedNamespaceSet()Ljava/util/Set;
 PLcom/android/server/RescueParty$RescuePartyObserver;->getCallingPackagesSet(Ljava/lang/String;)Ljava/util/Set;
 HSPLcom/android/server/RescueParty$RescuePartyObserver;->getInstance(Landroid/content/Context;)Lcom/android/server/RescueParty$RescuePartyObserver;
+PLcom/android/server/RescueParty$RescuePartyObserver;->getInstanceIfCreated()Lcom/android/server/RescueParty$RescuePartyObserver;
 HSPLcom/android/server/RescueParty$RescuePartyObserver;->getName()Ljava/lang/String;
 PLcom/android/server/RescueParty$RescuePartyObserver;->isPersistent()Z
 HPLcom/android/server/RescueParty$RescuePartyObserver;->isPersistentSystemApp(Ljava/lang/String;)Z
@@ -2274,7 +2310,7 @@
 PLcom/android/server/RescueParty$RescuePartyObserver;->mayPerformFactoryReset(Landroid/content/pm/VersionedPackage;)Z
 HSPLcom/android/server/RescueParty$RescuePartyObserver;->onBootLoop(I)I
 PLcom/android/server/RescueParty$RescuePartyObserver;->onHealthCheckFailed(Landroid/content/pm/VersionedPackage;II)I
-HSPLcom/android/server/RescueParty$RescuePartyObserver;->recordDeviceConfigAccess(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/RescueParty$RescuePartyObserver;->recordDeviceConfigAccess(Ljava/lang/String;Ljava/lang/String;)V+]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Set;Landroid/util/ArraySet;
 HSPLcom/android/server/RescueParty;->$r8$lambda$22pAfMJucaCFFM4DEPjPoCmmWfQ(Landroid/content/Context;Landroid/os/Bundle;)V
 PLcom/android/server/RescueParty;->$r8$lambda$PPlHnBwr0eX637vnBjHSqmd8EMo(Landroid/content/Context;ILjava/lang/String;)V
 HSPLcom/android/server/RescueParty;->-$$Nest$smexecuteRescueLevel(Landroid/content/Context;Ljava/lang/String;I)V
@@ -2286,11 +2322,12 @@
 HSPLcom/android/server/RescueParty;->executeRescueLevelInternal(Landroid/content/Context;ILjava/lang/String;)V
 HSPLcom/android/server/RescueParty;->getAllUserIds()[I
 PLcom/android/server/RescueParty;->getMaxRescueLevel(Z)I
+PLcom/android/server/RescueParty;->getPresetNamespacesForPackages(Ljava/util/List;)Ljava/util/Set;
 HSPLcom/android/server/RescueParty;->getRescueLevel(IZ)I
-HSPLcom/android/server/RescueParty;->handleMonitorCallback(Landroid/content/Context;Landroid/os/Bundle;)V
+HSPLcom/android/server/RescueParty;->handleMonitorCallback(Landroid/content/Context;Landroid/os/Bundle;)V+]Ljava/lang/String;Ljava/lang/String;]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLcom/android/server/RescueParty;->handleNativeRescuePartyResets()V
 HSPLcom/android/server/RescueParty;->isDisabled()Z
-HSPLcom/android/server/RescueParty;->isUsbActive()Z
+HSPLcom/android/server/RescueParty;->isUsbActive()Z+]Ljava/lang/String;Ljava/lang/String;
 PLcom/android/server/RescueParty;->lambda$executeRescueLevelInternal$1(Landroid/content/Context;ILjava/lang/String;)V
 HSPLcom/android/server/RescueParty;->lambda$onSettingsProviderPublished$0(Landroid/content/Context;Landroid/os/Bundle;)V
 HSPLcom/android/server/RescueParty;->levelToString(I)Ljava/lang/String;
@@ -2302,6 +2339,7 @@
 HSPLcom/android/server/RescueParty;->resetAllAffectedNamespaces(Landroid/content/Context;)V
 HSPLcom/android/server/RescueParty;->resetAllSettingsIfNecessary(Landroid/content/Context;II)V
 HSPLcom/android/server/RescueParty;->resetDeviceConfig(Landroid/content/Context;ZLjava/lang/String;)V
+PLcom/android/server/RescueParty;->resetDeviceConfigForPackages(Ljava/util/List;)V
 HPLcom/android/server/RescueParty;->startObservingPackages(Landroid/content/Context;Ljava/lang/String;)V
 HSPLcom/android/server/RuntimeService;-><init>(Landroid/content/Context;)V
 PLcom/android/server/RuntimeService;->addDistroVersionDebugInfo(Ljava/lang/String;Ljava/lang/String;Lcom/android/i18n/timezone/DebugInfo;)V
@@ -2320,15 +2358,15 @@
 HSPLcom/android/server/ServiceThread;-><init>(Ljava/lang/String;IZ)V
 HSPLcom/android/server/ServiceThread;->run()V
 PLcom/android/server/SmartStorageMaintIdler$1;-><init>(Lcom/android/server/SmartStorageMaintIdler;)V
-PLcom/android/server/SmartStorageMaintIdler$1;->run()V
+HPLcom/android/server/SmartStorageMaintIdler$1;->run()V
 PLcom/android/server/SmartStorageMaintIdler;->-$$Nest$fgetmJobParams(Lcom/android/server/SmartStorageMaintIdler;)Landroid/app/job/JobParameters;
 PLcom/android/server/SmartStorageMaintIdler;->-$$Nest$fgetmStarted(Lcom/android/server/SmartStorageMaintIdler;)Z
 PLcom/android/server/SmartStorageMaintIdler;->-$$Nest$fputmStarted(Lcom/android/server/SmartStorageMaintIdler;Z)V
-PLcom/android/server/SmartStorageMaintIdler;-><clinit>()V
+HSPLcom/android/server/SmartStorageMaintIdler;-><clinit>()V
 PLcom/android/server/SmartStorageMaintIdler;-><init>()V
 PLcom/android/server/SmartStorageMaintIdler;->onStartJob(Landroid/app/job/JobParameters;)Z
 PLcom/android/server/SmartStorageMaintIdler;->onStopJob(Landroid/app/job/JobParameters;)Z
-PLcom/android/server/SmartStorageMaintIdler;->scheduleSmartIdlePass(Landroid/content/Context;I)V
+HSPLcom/android/server/SmartStorageMaintIdler;->scheduleSmartIdlePass(Landroid/content/Context;I)V
 PLcom/android/server/StorageManagerService$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/StorageManagerService;)V
 PLcom/android/server/StorageManagerService$$ExternalSyntheticLambda3;->run()V
 PLcom/android/server/StorageManagerService$10;-><init>(Lcom/android/server/StorageManagerService;Ljava/lang/Runnable;)V
@@ -2340,9 +2378,14 @@
 HSPLcom/android/server/StorageManagerService$2;-><init>(Lcom/android/server/StorageManagerService;Landroid/os/Handler;)V
 PLcom/android/server/StorageManagerService$2;->onChange(Z)V
 HSPLcom/android/server/StorageManagerService$3;-><init>(Lcom/android/server/StorageManagerService;)V
+PLcom/android/server/StorageManagerService$3;->onDiskCreated(Ljava/lang/String;I)V
+PLcom/android/server/StorageManagerService$3;->onDiskDestroyed(Ljava/lang/String;)V
+PLcom/android/server/StorageManagerService$3;->onDiskMetadataChanged(Ljava/lang/String;JLjava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/StorageManagerService$3;->onDiskScanned(Ljava/lang/String;)V
 PLcom/android/server/StorageManagerService$3;->onVolumeCreated(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;I)V
 PLcom/android/server/StorageManagerService$3;->onVolumeDestroyed(Ljava/lang/String;)V
 PLcom/android/server/StorageManagerService$3;->onVolumeInternalPathChanged(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/StorageManagerService$3;->onVolumeMetadataChanged(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/StorageManagerService$3;->onVolumePathChanged(Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/StorageManagerService$3;->onVolumeStateChanged(Ljava/lang/String;I)V
 HSPLcom/android/server/StorageManagerService$4;-><init>(Lcom/android/server/StorageManagerService;)V
@@ -2358,11 +2401,15 @@
 PLcom/android/server/StorageManagerService$AppFuseMountScope;->close()V
 PLcom/android/server/StorageManagerService$AppFuseMountScope;->open()Landroid/os/ParcelFileDescriptor;
 PLcom/android/server/StorageManagerService$AppFuseMountScope;->openFile(III)Landroid/os/ParcelFileDescriptor;
+PLcom/android/server/StorageManagerService$Callbacks;->-$$Nest$mnotifyDiskDestroyed(Lcom/android/server/StorageManagerService$Callbacks;Landroid/os/storage/DiskInfo;)V
+PLcom/android/server/StorageManagerService$Callbacks;->-$$Nest$mnotifyDiskScanned(Lcom/android/server/StorageManagerService$Callbacks;Landroid/os/storage/DiskInfo;I)V
 PLcom/android/server/StorageManagerService$Callbacks;->-$$Nest$mnotifyStorageStateChanged(Lcom/android/server/StorageManagerService$Callbacks;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/StorageManagerService$Callbacks;->-$$Nest$mnotifyVolumeStateChanged(Lcom/android/server/StorageManagerService$Callbacks;Landroid/os/storage/VolumeInfo;II)V
 HSPLcom/android/server/StorageManagerService$Callbacks;-><init>(Landroid/os/Looper;)V
 PLcom/android/server/StorageManagerService$Callbacks;->handleMessage(Landroid/os/Message;)V
 PLcom/android/server/StorageManagerService$Callbacks;->invokeCallback(Landroid/os/storage/IStorageEventListener;ILcom/android/internal/os/SomeArgs;)V
+PLcom/android/server/StorageManagerService$Callbacks;->notifyDiskDestroyed(Landroid/os/storage/DiskInfo;)V
+PLcom/android/server/StorageManagerService$Callbacks;->notifyDiskScanned(Landroid/os/storage/DiskInfo;I)V
 PLcom/android/server/StorageManagerService$Callbacks;->notifyStorageStateChanged(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/StorageManagerService$Callbacks;->notifyVolumeStateChanged(Landroid/os/storage/VolumeInfo;II)V
 HSPLcom/android/server/StorageManagerService$Callbacks;->register(Landroid/os/storage/IStorageEventListener;)V
@@ -2378,25 +2425,39 @@
 PLcom/android/server/StorageManagerService$Lifecycle;->onUserStopping(Lcom/android/server/SystemService$TargetUser;)V
 PLcom/android/server/StorageManagerService$Lifecycle;->onUserSwitching(Lcom/android/server/SystemService$TargetUser;Lcom/android/server/SystemService$TargetUser;)V
 PLcom/android/server/StorageManagerService$Lifecycle;->onUserUnlocking(Lcom/android/server/SystemService$TargetUser;)V
+PLcom/android/server/StorageManagerService$MountObbAction;-><init>(Lcom/android/server/StorageManagerService;Lcom/android/server/StorageManagerService$ObbState;ILandroid/content/res/ObbInfo;)V
+PLcom/android/server/StorageManagerService$MountObbAction;->handleExecute()V
+PLcom/android/server/StorageManagerService$ObbAction;-><init>(Lcom/android/server/StorageManagerService;Lcom/android/server/StorageManagerService$ObbState;)V
+PLcom/android/server/StorageManagerService$ObbAction;->execute(Lcom/android/server/StorageManagerService$ObbActionHandler;)V
+PLcom/android/server/StorageManagerService$ObbAction;->notifyObbStateChange(I)V
 HSPLcom/android/server/StorageManagerService$ObbActionHandler;-><init>(Lcom/android/server/StorageManagerService;Landroid/os/Looper;)V
+PLcom/android/server/StorageManagerService$ObbActionHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/StorageManagerService$ObbState;-><init>(Lcom/android/server/StorageManagerService;Ljava/lang/String;Ljava/lang/String;ILandroid/os/storage/IObbActionListener;ILjava/lang/String;)V
+PLcom/android/server/StorageManagerService$ObbState;->binderDied()V
+PLcom/android/server/StorageManagerService$ObbState;->getBinder()Landroid/os/IBinder;
+PLcom/android/server/StorageManagerService$ObbState;->link()V
+PLcom/android/server/StorageManagerService$ObbState;->unlink()V
 PLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->-$$Nest$fgetmCloudProviderChangeListeners(Lcom/android/server/StorageManagerService$StorageManagerInternalImpl;)Ljava/util/concurrent/CopyOnWriteArraySet;
 HSPLcom/android/server/StorageManagerService$StorageManagerInternalImpl;-><init>(Lcom/android/server/StorageManagerService;)V
 HSPLcom/android/server/StorageManagerService$StorageManagerInternalImpl;-><init>(Lcom/android/server/StorageManagerService;Lcom/android/server/StorageManagerService$StorageManagerInternalImpl-IA;)V
 PLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->freeCache(Ljava/lang/String;J)V
 HSPLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->getExternalStorageMountMode(ILjava/lang/String;)I
 HSPLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->hasExternalStorage(ILjava/lang/String;)Z+]Lcom/android/server/StorageManagerService$StorageManagerInternalImpl;Lcom/android/server/StorageManagerService$StorageManagerInternalImpl;
-HSPLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->hasExternalStorageAccess(ILjava/lang/String;)Z
+HSPLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->hasExternalStorageAccess(ILjava/lang/String;)Z+]Lcom/android/internal/app/IAppOpsService;Lcom/android/server/appop/AppOpsService;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;
 HSPLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->hasLegacyExternalStorage(I)Z+]Ljava/util/Set;Landroid/util/ArraySet;
 PLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->isCeStoragePrepared(I)Z
 HSPLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->isExternalStorageService(I)Z
+PLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->killAppForOpChange(II)V
 PLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->markCeStoragePrepared(I)V
 HSPLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->onAppOpsChanged(IILjava/lang/String;II)V
 PLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->onReset(Landroid/os/IVold;)V
-PLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->prepareAppDataAfterInstall(Ljava/lang/String;I)V
+HPLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->prepareAppDataAfterInstall(Ljava/lang/String;I)V
 HSPLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->registerCloudProviderChangeListener(Landroid/os/storage/StorageManagerInternal$CloudProviderChangeListener;)V
 PLcom/android/server/StorageManagerService$StorageManagerInternalImpl;->resetUser(I)V
 HSPLcom/android/server/StorageManagerService$StorageManagerServiceHandler;-><init>(Lcom/android/server/StorageManagerService;Landroid/os/Looper;)V
 HSPLcom/android/server/StorageManagerService$StorageManagerServiceHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/StorageManagerService$UnmountObbAction;-><init>(Lcom/android/server/StorageManagerService;Lcom/android/server/StorageManagerService$ObbState;Z)V
+PLcom/android/server/StorageManagerService$UnmountObbAction;->handleExecute()V
 HSPLcom/android/server/StorageManagerService$WatchedLockedUsers;-><init>(Lcom/android/server/StorageManagerService;)V
 PLcom/android/server/StorageManagerService$WatchedLockedUsers;->append(I)V
 HSPLcom/android/server/StorageManagerService$WatchedLockedUsers;->appendAll([I)V
@@ -2405,6 +2466,7 @@
 PLcom/android/server/StorageManagerService$WatchedLockedUsers;->remove(I)V
 PLcom/android/server/StorageManagerService$WatchedLockedUsers;->toString()Ljava/lang/String;
 PLcom/android/server/StorageManagerService;->$r8$lambda$PsncAamugJUjaCupcZOytmohbT0(Lcom/android/server/StorageManagerService;)V
+PLcom/android/server/StorageManagerService;->-$$Nest$fgetmCallbacks(Lcom/android/server/StorageManagerService;)Lcom/android/server/StorageManagerService$Callbacks;
 PLcom/android/server/StorageManagerService;->-$$Nest$fgetmCeStoragePreparedUsers(Lcom/android/server/StorageManagerService;)Ljava/util/Set;
 HSPLcom/android/server/StorageManagerService;->-$$Nest$fgetmContext(Lcom/android/server/StorageManagerService;)Landroid/content/Context;
 PLcom/android/server/StorageManagerService;->-$$Nest$fgetmDisks(Lcom/android/server/StorageManagerService;)Landroid/util/ArrayMap;
@@ -2415,6 +2477,9 @@
 HSPLcom/android/server/StorageManagerService;->-$$Nest$fgetmLastMaintenanceFile(Lcom/android/server/StorageManagerService;)Ljava/io/File;
 HSPLcom/android/server/StorageManagerService;->-$$Nest$fgetmLock(Lcom/android/server/StorageManagerService;)Ljava/lang/Object;
 HSPLcom/android/server/StorageManagerService;->-$$Nest$fgetmMediaStoreAuthorityAppId(Lcom/android/server/StorageManagerService;)I
+PLcom/android/server/StorageManagerService;->-$$Nest$fgetmObbActionHandler(Lcom/android/server/StorageManagerService;)Lcom/android/server/StorageManagerService$ObbActionHandler;
+PLcom/android/server/StorageManagerService;->-$$Nest$fgetmObbMounts(Lcom/android/server/StorageManagerService;)Ljava/util/Map;
+PLcom/android/server/StorageManagerService;->-$$Nest$fgetmObbPathToStateMap(Lcom/android/server/StorageManagerService;)Ljava/util/Map;
 PLcom/android/server/StorageManagerService;->-$$Nest$fgetmStorageSessionController(Lcom/android/server/StorageManagerService;)Lcom/android/server/storage/StorageSessionController;
 HSPLcom/android/server/StorageManagerService;->-$$Nest$fgetmUidsWithLegacyExternalStorage(Lcom/android/server/StorageManagerService;)Ljava/util/Set;
 PLcom/android/server/StorageManagerService;->-$$Nest$fgetmVold(Lcom/android/server/StorageManagerService;)Landroid/os/IVold;
@@ -2422,44 +2487,50 @@
 PLcom/android/server/StorageManagerService;->-$$Nest$fputmCurrentUserId(Lcom/android/server/StorageManagerService;I)V
 HSPLcom/android/server/StorageManagerService;->-$$Nest$fputmLastMaintenance(Lcom/android/server/StorageManagerService;J)V
 PLcom/android/server/StorageManagerService;->-$$Nest$fputmRemountCurrentUserVolumesOnUnlock(Lcom/android/server/StorageManagerService;Z)V
+PLcom/android/server/StorageManagerService;->-$$Nest$maddObbStateLocked(Lcom/android/server/StorageManagerService;Lcom/android/server/StorageManagerService$ObbState;)V
 PLcom/android/server/StorageManagerService;->-$$Nest$mbootCompleted(Lcom/android/server/StorageManagerService;)V
 PLcom/android/server/StorageManagerService;->-$$Nest$mcompleteUnlockUser(Lcom/android/server/StorageManagerService;I)V
 HSPLcom/android/server/StorageManagerService;->-$$Nest$mdispatchOnFinished(Lcom/android/server/StorageManagerService;Landroid/os/IVoldTaskListener;ILandroid/os/PersistableBundle;)V
 HSPLcom/android/server/StorageManagerService;->-$$Nest$mdispatchOnStatus(Lcom/android/server/StorageManagerService;Landroid/os/IVoldTaskListener;ILandroid/os/PersistableBundle;)V
 HSPLcom/android/server/StorageManagerService;->-$$Nest$mfindRecordForPath(Lcom/android/server/StorageManagerService;Ljava/lang/String;)Landroid/os/storage/VolumeRecord;
-HSPLcom/android/server/StorageManagerService;->-$$Nest$mgetMountModeInternal(Lcom/android/server/StorageManagerService;ILjava/lang/String;)I
+HSPLcom/android/server/StorageManagerService;->-$$Nest$mgetMountModeInternal(Lcom/android/server/StorageManagerService;ILjava/lang/String;)I+]Lcom/android/server/StorageManagerService;Lcom/android/server/StorageManagerService;
 PLcom/android/server/StorageManagerService;->-$$Nest$mhandleBootCompleted(Lcom/android/server/StorageManagerService;)V
 HSPLcom/android/server/StorageManagerService;->-$$Nest$mhandleDaemonConnected(Lcom/android/server/StorageManagerService;)V
 HSPLcom/android/server/StorageManagerService;->-$$Nest$mhandleSystemReady(Lcom/android/server/StorageManagerService;)V
 PLcom/android/server/StorageManagerService;->-$$Nest$misAppIoBlocked(Lcom/android/server/StorageManagerService;I)Z
 PLcom/android/server/StorageManagerService;->-$$Nest$misMountDisallowed(Lcom/android/server/StorageManagerService;Landroid/os/storage/VolumeInfo;)Z
+PLcom/android/server/StorageManagerService;->-$$Nest$misUidOwnerOfPackageOrSystem(Lcom/android/server/StorageManagerService;Ljava/lang/String;I)Z
 PLcom/android/server/StorageManagerService;->-$$Nest$mmaybeRemountVolumes(Lcom/android/server/StorageManagerService;I)V
 PLcom/android/server/StorageManagerService;->-$$Nest$mmount(Lcom/android/server/StorageManagerService;Landroid/os/storage/VolumeInfo;)V
 PLcom/android/server/StorageManagerService;->-$$Nest$monCleanupUser(Lcom/android/server/StorageManagerService;I)V
 PLcom/android/server/StorageManagerService;->-$$Nest$monCloudMediaProviderChangedAsync(Lcom/android/server/StorageManagerService;I)V
+PLcom/android/server/StorageManagerService;->-$$Nest$monDiskScannedLocked(Lcom/android/server/StorageManagerService;Landroid/os/storage/DiskInfo;)V
 PLcom/android/server/StorageManagerService;->-$$Nest$monStopUser(Lcom/android/server/StorageManagerService;I)V
 PLcom/android/server/StorageManagerService;->-$$Nest$monUnlockUser(Lcom/android/server/StorageManagerService;I)V
 PLcom/android/server/StorageManagerService;->-$$Nest$monVolumeCreatedLocked(Lcom/android/server/StorageManagerService;Landroid/os/storage/VolumeInfo;)V
 PLcom/android/server/StorageManagerService;->-$$Nest$monVolumeStateChangedAsync(Lcom/android/server/StorageManagerService;Landroid/os/storage/VolumeInfo;II)V
 PLcom/android/server/StorageManagerService;->-$$Nest$monVolumeStateChangedLocked(Lcom/android/server/StorageManagerService;Landroid/os/storage/VolumeInfo;II)V
 PLcom/android/server/StorageManagerService;->-$$Nest$mrefreshZramSettings(Lcom/android/server/StorageManagerService;)V
+PLcom/android/server/StorageManagerService;->-$$Nest$mremoveObbStateLocked(Lcom/android/server/StorageManagerService;Lcom/android/server/StorageManagerService$ObbState;)V
 PLcom/android/server/StorageManagerService;->-$$Nest$mresetIfBootedAndConnected(Lcom/android/server/StorageManagerService;)V
 HSPLcom/android/server/StorageManagerService;->-$$Nest$mscrubPath(Lcom/android/server/StorageManagerService;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/StorageManagerService;->-$$Nest$mservicesReady(Lcom/android/server/StorageManagerService;)V
 HSPLcom/android/server/StorageManagerService;->-$$Nest$msnapshotAndMonitorLegacyStorageAppOp(Lcom/android/server/StorageManagerService;Landroid/os/UserHandle;)V
 HSPLcom/android/server/StorageManagerService;->-$$Nest$mstart(Lcom/android/server/StorageManagerService;)V
 HSPLcom/android/server/StorageManagerService;->-$$Nest$msystemReady(Lcom/android/server/StorageManagerService;)V
-PLcom/android/server/StorageManagerService;->-$$Nest$mupdateLegacyStorageApps(Lcom/android/server/StorageManagerService;Ljava/lang/String;IZ)V
+HSPLcom/android/server/StorageManagerService;->-$$Nest$mupdateLegacyStorageApps(Lcom/android/server/StorageManagerService;Ljava/lang/String;IZ)V
+PLcom/android/server/StorageManagerService;->-$$Nest$mwarnOnNotMounted(Lcom/android/server/StorageManagerService;)V
 HSPLcom/android/server/StorageManagerService;->-$$Nest$sfgetLOCAL_LOGV()Z
 HSPLcom/android/server/StorageManagerService;-><clinit>()V
 HSPLcom/android/server/StorageManagerService;-><init>(Landroid/content/Context;)V
 PLcom/android/server/StorageManagerService;->abortIdleMaint(Ljava/lang/Runnable;)V
 HSPLcom/android/server/StorageManagerService;->addInternalVolumeLocked()V
+PLcom/android/server/StorageManagerService;->addObbStateLocked(Lcom/android/server/StorageManagerService$ObbState;)V
 PLcom/android/server/StorageManagerService;->addUserKeyAuth(II[B)V
 HSPLcom/android/server/StorageManagerService;->adjustAllocateFlags(IILjava/lang/String;)I
 HPLcom/android/server/StorageManagerService;->allocateBytes(Ljava/lang/String;JILjava/lang/String;)V
 PLcom/android/server/StorageManagerService;->bootCompleted()V
-PLcom/android/server/StorageManagerService;->checkChargeStatus()Z
+HPLcom/android/server/StorageManagerService;->checkChargeStatus()Z
 PLcom/android/server/StorageManagerService;->clearUserKeyAuth(II[B)V
 PLcom/android/server/StorageManagerService;->commitChanges()V
 PLcom/android/server/StorageManagerService;->completeUnlockUser(I)V
@@ -2476,6 +2547,7 @@
 PLcom/android/server/StorageManagerService;->enforceExternalStorageService()V
 HSPLcom/android/server/StorageManagerService;->enforcePermission(Ljava/lang/String;)V
 HSPLcom/android/server/StorageManagerService;->findRecordForPath(Ljava/lang/String;)Landroid/os/storage/VolumeRecord;
+PLcom/android/server/StorageManagerService;->findVolumeByIdOrThrow(Ljava/lang/String;)Landroid/os/storage/VolumeInfo;
 PLcom/android/server/StorageManagerService;->fixateNewestUserKeyAuth(I)V
 HPLcom/android/server/StorageManagerService;->fixupAppDir(Ljava/lang/String;)V
 HSPLcom/android/server/StorageManagerService;->fstrim(ILandroid/os/IVoldTaskListener;)V
@@ -2485,11 +2557,12 @@
 PLcom/android/server/StorageManagerService;->getCacheSizeBytes(Ljava/lang/String;I)J
 HSPLcom/android/server/StorageManagerService;->getDefaultPrimaryStorageUuid()Ljava/lang/String;
 PLcom/android/server/StorageManagerService;->getDisks()[Landroid/os/storage/DiskInfo;
-HPLcom/android/server/StorageManagerService;->getExternalStorageMountMode(ILjava/lang/String;)I
+HPLcom/android/server/StorageManagerService;->getExternalStorageMountMode(ILjava/lang/String;)I+]Lcom/android/server/StorageManagerService;Lcom/android/server/StorageManagerService;]Lcom/android/server/StorageManagerService$StorageManagerInternalImpl;Lcom/android/server/StorageManagerService$StorageManagerInternalImpl;
 HSPLcom/android/server/StorageManagerService;->getMountModeInternal(ILjava/lang/String;)I+]Lcom/android/internal/app/IAppOpsService;Lcom/android/server/appop/AppOpsService;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Lcom/android/server/StorageManagerService$StorageManagerInternalImpl;Lcom/android/server/StorageManagerService$StorageManagerInternalImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
+PLcom/android/server/StorageManagerService;->getMountedObbPath(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/StorageManagerService;->getPrimaryStorageUuid()Ljava/lang/String;
 HSPLcom/android/server/StorageManagerService;->getProviderInfo(Ljava/lang/String;)Landroid/content/pm/ProviderInfo;
-HSPLcom/android/server/StorageManagerService;->getVolumeList(ILjava/lang/String;I)[Landroid/os/storage/StorageVolume;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/os/storage/VolumeInfo;Landroid/os/storage/VolumeInfo;]Lcom/android/server/StorageManagerService;Lcom/android/server/StorageManagerService;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/os/storage/StorageVolume;Landroid/os/storage/StorageVolume;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/StorageManagerService$StorageManagerInternalImpl;Lcom/android/server/StorageManagerService$StorageManagerInternalImpl;]Landroid/os/storage/VolumeRecord;Landroid/os/storage/VolumeRecord;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/StorageManagerService;->getVolumeList(ILjava/lang/String;I)[Landroid/os/storage/StorageVolume;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/os/storage/VolumeInfo;Landroid/os/storage/VolumeInfo;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/os/storage/StorageVolume;Landroid/os/storage/StorageVolume;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Landroid/os/storage/VolumeRecord;Landroid/os/storage/VolumeRecord;]Lcom/android/server/StorageManagerService;Lcom/android/server/StorageManagerService;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/StorageManagerService$StorageManagerInternalImpl;Lcom/android/server/StorageManagerService$StorageManagerInternalImpl;
 PLcom/android/server/StorageManagerService;->getVolumeRecords(I)[Landroid/os/storage/VolumeRecord;
 HSPLcom/android/server/StorageManagerService;->getVolumes(I)[Landroid/os/storage/VolumeInfo;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 PLcom/android/server/StorageManagerService;->handleBootCompleted()V
@@ -2499,25 +2572,28 @@
 PLcom/android/server/StorageManagerService;->isAppIoBlocked(I)Z
 PLcom/android/server/StorageManagerService;->isBroadcastWorthy(Landroid/os/storage/VolumeInfo;)Z
 PLcom/android/server/StorageManagerService;->isMountDisallowed(Landroid/os/storage/VolumeInfo;)Z
-PLcom/android/server/StorageManagerService;->isPassedLifetimeThresh()Z
+PLcom/android/server/StorageManagerService;->isObbMounted(Ljava/lang/String;)Z
+HSPLcom/android/server/StorageManagerService;->isPassedLifetimeThresh()Z
 HSPLcom/android/server/StorageManagerService;->isSystemUnlocked(I)Z
 HSPLcom/android/server/StorageManagerService;->isUidOwnerOfPackageOrSystem(Ljava/lang/String;I)Z+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/StorageManagerService;->isUserKeyUnlocked(I)Z+]Lcom/android/server/StorageManagerService$WatchedLockedUsers;Lcom/android/server/StorageManagerService$WatchedLockedUsers;
 PLcom/android/server/StorageManagerService;->lambda$resetIfBootedAndConnected$0()V
 HSPLcom/android/server/StorageManagerService;->lastMaintenance()J
-PLcom/android/server/StorageManagerService;->loadStorageWriteRecords()V
+HSPLcom/android/server/StorageManagerService;->loadStorageWriteRecords()V
 PLcom/android/server/StorageManagerService;->lockUserKey(I)V
 PLcom/android/server/StorageManagerService;->maybeLogMediaMount(Landroid/os/storage/VolumeInfo;I)V
 PLcom/android/server/StorageManagerService;->maybeRemountVolumes(I)V
-HPLcom/android/server/StorageManagerService;->mkdirs(Ljava/lang/String;Ljava/lang/String;)V
-HPLcom/android/server/StorageManagerService;->monitor()V
+HSPLcom/android/server/StorageManagerService;->mkdirs(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/StorageManagerService;->monitor()V+]Landroid/os/IVold;Landroid/os/IVold$Stub$Proxy;
 PLcom/android/server/StorageManagerService;->mount(Landroid/os/storage/VolumeInfo;)V
+PLcom/android/server/StorageManagerService;->mountObb(Ljava/lang/String;Ljava/lang/String;Landroid/os/storage/IObbActionListener;ILandroid/content/res/ObbInfo;)V
 PLcom/android/server/StorageManagerService;->mountProxyFileDescriptorBridge()Lcom/android/internal/os/AppFuseMount;
 HSPLcom/android/server/StorageManagerService;->needsCheckpoint()Z
 PLcom/android/server/StorageManagerService;->onAwakeStateChanged(Z)V
 PLcom/android/server/StorageManagerService;->onCleanupUser(I)V
 PLcom/android/server/StorageManagerService;->onCloudMediaProviderChangedAsync(I)V
 HSPLcom/android/server/StorageManagerService;->onDaemonConnected()V
+PLcom/android/server/StorageManagerService;->onDiskScannedLocked(Landroid/os/storage/DiskInfo;)V
 HPLcom/android/server/StorageManagerService;->onKeyguardStateChanged(Z)V
 PLcom/android/server/StorageManagerService;->onStopUser(I)V
 PLcom/android/server/StorageManagerService;->onUnlockUser(I)V
@@ -2531,16 +2607,17 @@
 PLcom/android/server/StorageManagerService;->prepareUserStorageInternal(Ljava/lang/String;III)V
 HSPLcom/android/server/StorageManagerService;->readSettingsLocked()V
 HSPLcom/android/server/StorageManagerService;->readVolumeRecord(Landroid/util/TypedXmlPullParser;)Landroid/os/storage/VolumeRecord;
-PLcom/android/server/StorageManagerService;->refreshLifetimeConstraint()Z
+HSPLcom/android/server/StorageManagerService;->refreshLifetimeConstraint()Z
 HSPLcom/android/server/StorageManagerService;->refreshZramSettings()V
 HSPLcom/android/server/StorageManagerService;->registerListener(Landroid/os/storage/IStorageEventListener;)V
+PLcom/android/server/StorageManagerService;->removeObbStateLocked(Lcom/android/server/StorageManagerService$ObbState;)V
 HSPLcom/android/server/StorageManagerService;->resetIfBootedAndConnected()V
 HSPLcom/android/server/StorageManagerService;->restoreLocalUnlockedUsers()V
 PLcom/android/server/StorageManagerService;->restoreSystemUnlockedUsers(Landroid/os/UserManager;Ljava/util/List;[I)V
 HPLcom/android/server/StorageManagerService;->runIdleMaint(Ljava/lang/Runnable;)V
 HSPLcom/android/server/StorageManagerService;->runIdleMaintenance(Ljava/lang/Runnable;)V
 HSPLcom/android/server/StorageManagerService;->runMaintenance()V
-PLcom/android/server/StorageManagerService;->runSmartIdleMaint(Ljava/lang/Runnable;)V
+HPLcom/android/server/StorageManagerService;->runSmartIdleMaint(Ljava/lang/Runnable;)V
 HSPLcom/android/server/StorageManagerService;->scrubPath(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/StorageManagerService;->servicesReady()V
 PLcom/android/server/StorageManagerService;->setCloudMediaProvider(Ljava/lang/String;)V
@@ -2553,7 +2630,10 @@
 PLcom/android/server/StorageManagerService;->unlockUserKey(II[B)V
 PLcom/android/server/StorageManagerService;->unregisterListener(Landroid/os/storage/IStorageEventListener;)V
 HSPLcom/android/server/StorageManagerService;->updateLegacyStorageApps(Ljava/lang/String;IZ)V
-PLcom/android/server/StorageManagerService;->updateStorageWriteRecords(I)V
+HPLcom/android/server/StorageManagerService;->updateStorageWriteRecords(I)V
+PLcom/android/server/StorageManagerService;->warnOnNotMounted()V
+PLcom/android/server/StorageManagerService;->writeSettingsLocked()V
+PLcom/android/server/StorageManagerService;->writeVolumeRecord(Landroid/util/TypedXmlSerializer;Landroid/os/storage/VolumeRecord;)V
 HSPLcom/android/server/SystemConfigService$1;-><init>(Lcom/android/server/SystemConfigService;)V
 HSPLcom/android/server/SystemConfigService$1;->getDisabledUntilUsedPreinstalledCarrierApps()Ljava/util/List;
 HSPLcom/android/server/SystemConfigService$1;->getDisabledUntilUsedPreinstalledCarrierAssociatedAppEntries()Ljava/util/Map;
@@ -2575,13 +2655,13 @@
 HSPLcom/android/server/SystemServer$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/SystemServer;)V
 HSPLcom/android/server/SystemServer$$ExternalSyntheticLambda6;->run()V
 HSPLcom/android/server/SystemServer$$ExternalSyntheticLambda7;-><init>()V
-PLcom/android/server/SystemServer$$ExternalSyntheticLambda7;->onModuleServiceConnected(Landroid/os/IBinder;)V
+HSPLcom/android/server/SystemServer$$ExternalSyntheticLambda7;->onModuleServiceConnected(Landroid/os/IBinder;)V
 HSPLcom/android/server/SystemServer$SystemServerDumper;->-$$Nest$maddDumpable(Lcom/android/server/SystemServer$SystemServerDumper;Landroid/util/Dumpable;)V
 HSPLcom/android/server/SystemServer$SystemServerDumper;-><init>(Lcom/android/server/SystemServer;)V
 HSPLcom/android/server/SystemServer$SystemServerDumper;-><init>(Lcom/android/server/SystemServer;Lcom/android/server/SystemServer$SystemServerDumper-IA;)V
 HSPLcom/android/server/SystemServer$SystemServerDumper;->addDumpable(Landroid/util/Dumpable;)V
 PLcom/android/server/SystemServer$SystemServerDumper;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/SystemServer;->$r8$lambda$7VyBGkQcJLZ7yagkzNfFqfz29w4(Landroid/os/IBinder;)V
+HSPLcom/android/server/SystemServer;->$r8$lambda$7VyBGkQcJLZ7yagkzNfFqfz29w4(Landroid/os/IBinder;)V
 HSPLcom/android/server/SystemServer;->$r8$lambda$C6uHt-PDp4NvE_Nxo5S0JPZAZxc()V
 HSPLcom/android/server/SystemServer;->$r8$lambda$GdFcqWB8sCTzm0hNmQqV36Q1mT8()V
 HSPLcom/android/server/SystemServer;->$r8$lambda$jmaWUpWMxP4IiPakY5L6Y7rVWik(Lcom/android/server/SystemServer;Lcom/android/server/utils/TimingsTraceAndSlog;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Lifecycle;ZLandroid/net/ConnectivityManager;Lcom/android/server/NetworkManagementService;Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/VpnManagerService;Lcom/android/server/VcnManagementService;Lcom/android/server/CountryDetectorService;Lcom/android/server/NetworkTimeUpdateService;Lcom/android/server/input/InputManagerService;Lcom/android/server/TelephonyRegistry;Lcom/android/server/media/MediaRouterService;Lcom/android/server/MmsServiceBroker;)V
@@ -2600,14 +2680,14 @@
 HSPLcom/android/server/SystemServer;->lambda$startOtherServices$1()V
 HSPLcom/android/server/SystemServer;->lambda$startOtherServices$2()V
 HSPLcom/android/server/SystemServer;->lambda$startOtherServices$3()V
-PLcom/android/server/SystemServer;->lambda$startOtherServices$4(Landroid/os/IBinder;)V
+HSPLcom/android/server/SystemServer;->lambda$startOtherServices$4(Landroid/os/IBinder;)V
 HSPLcom/android/server/SystemServer;->lambda$startOtherServices$5(Lcom/android/server/utils/TimingsTraceAndSlog;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Lifecycle;ZLandroid/net/ConnectivityManager;Lcom/android/server/NetworkManagementService;Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/VpnManagerService;Lcom/android/server/VcnManagementService;Lcom/android/server/CountryDetectorService;Lcom/android/server/NetworkTimeUpdateService;Lcom/android/server/input/InputManagerService;Lcom/android/server/TelephonyRegistry;Lcom/android/server/media/MediaRouterService;Lcom/android/server/MmsServiceBroker;)V
 HSPLcom/android/server/SystemServer;->main([Ljava/lang/String;)V
 HSPLcom/android/server/SystemServer;->performPendingShutdown()V
 HSPLcom/android/server/SystemServer;->run()V
 HSPLcom/android/server/SystemServer;->spawnFdLeakCheckThread()V
 HSPLcom/android/server/SystemServer;->startAmbientContextService(Lcom/android/server/utils/TimingsTraceAndSlog;)V
-PLcom/android/server/SystemServer;->startApexServices(Lcom/android/server/utils/TimingsTraceAndSlog;)V
+HSPLcom/android/server/SystemServer;->startApexServices(Lcom/android/server/utils/TimingsTraceAndSlog;)V
 HSPLcom/android/server/SystemServer;->startAttentionService(Landroid/content/Context;Lcom/android/server/utils/TimingsTraceAndSlog;)V
 HSPLcom/android/server/SystemServer;->startBootstrapServices(Lcom/android/server/utils/TimingsTraceAndSlog;)V
 HSPLcom/android/server/SystemServer;->startContentCaptureService(Landroid/content/Context;Lcom/android/server/utils/TimingsTraceAndSlog;)V
@@ -2615,7 +2695,7 @@
 HSPLcom/android/server/SystemServer;->startOtherServices(Lcom/android/server/utils/TimingsTraceAndSlog;)V
 HSPLcom/android/server/SystemServer;->startRotationResolverService(Landroid/content/Context;Lcom/android/server/utils/TimingsTraceAndSlog;)V
 HSPLcom/android/server/SystemServer;->startSystemCaptionsManagerService(Landroid/content/Context;Lcom/android/server/utils/TimingsTraceAndSlog;)V
-PLcom/android/server/SystemServer;->startSystemUi(Landroid/content/Context;Lcom/android/server/wm/WindowManagerService;)V
+HSPLcom/android/server/SystemServer;->startSystemUi(Landroid/content/Context;Lcom/android/server/wm/WindowManagerService;)V
 HSPLcom/android/server/SystemServer;->startTextToSpeechManagerService(Landroid/content/Context;Lcom/android/server/utils/TimingsTraceAndSlog;)V
 HSPLcom/android/server/SystemServerInitThreadPool$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/SystemServerInitThreadPool;Ljava/lang/String;Ljava/lang/Runnable;)V
 HSPLcom/android/server/SystemServerInitThreadPool$$ExternalSyntheticLambda0;->run()V
@@ -2698,7 +2778,7 @@
 PLcom/android/server/SystemServiceManager;->onUserUnlocked(I)V
 PLcom/android/server/SystemServiceManager;->onUserUnlocking(I)V
 HSPLcom/android/server/SystemServiceManager;->preSystemReady()V
-PLcom/android/server/SystemServiceManager;->sealStartedServices()V
+HSPLcom/android/server/SystemServiceManager;->sealStartedServices()V
 HSPLcom/android/server/SystemServiceManager;->setSafeMode(Z)V
 HSPLcom/android/server/SystemServiceManager;->setStartInfo(ZJJ)V
 HSPLcom/android/server/SystemServiceManager;->startBootPhase(Lcom/android/server/utils/TimingsTraceAndSlog;I)V
@@ -2708,7 +2788,7 @@
 HSPLcom/android/server/SystemServiceManager;->startServiceFromJar(Ljava/lang/String;Ljava/lang/String;)Lcom/android/server/SystemService;
 HSPLcom/android/server/SystemServiceManager;->updateOtherServicesStartIndex()V
 HSPLcom/android/server/SystemServiceManager;->useThreadPool(ILjava/lang/String;)Z
-PLcom/android/server/SystemServiceManager;->useThreadPoolForService(Ljava/lang/String;I)Z
+HPLcom/android/server/SystemServiceManager;->useThreadPoolForService(Ljava/lang/String;I)Z
 HSPLcom/android/server/SystemServiceManager;->warnIfTooLong(JLcom/android/server/SystemService;Ljava/lang/String;)V
 HSPLcom/android/server/SystemUpdateManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/SystemUpdateManagerService;->getBootCount()I
@@ -2730,9 +2810,9 @@
 HPLcom/android/server/TelephonyRegistry$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/TelephonyRegistry;Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery;)V
 HPLcom/android/server/TelephonyRegistry$$ExternalSyntheticLambda4;->getOrThrow()Ljava/lang/Object;
 HSPLcom/android/server/TelephonyRegistry$1;-><init>(Lcom/android/server/TelephonyRegistry;)V
-PLcom/android/server/TelephonyRegistry$1;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/TelephonyRegistry$1;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/TelephonyRegistry$2;-><init>(Lcom/android/server/TelephonyRegistry;)V
-PLcom/android/server/TelephonyRegistry$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/TelephonyRegistry$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/TelephonyRegistry$3;-><clinit>()V
 HSPLcom/android/server/TelephonyRegistry$ConfigurationProvider$$ExternalSyntheticLambda0;-><init>(Ljava/lang/String;Landroid/os/UserHandle;)V
 HSPLcom/android/server/TelephonyRegistry$ConfigurationProvider$$ExternalSyntheticLambda0;->getOrThrow()Ljava/lang/Object;
@@ -2740,6 +2820,8 @@
 HPLcom/android/server/TelephonyRegistry$ConfigurationProvider$$ExternalSyntheticLambda1;->getOrThrow()Ljava/lang/Object;
 HSPLcom/android/server/TelephonyRegistry$ConfigurationProvider$$ExternalSyntheticLambda2;-><init>()V
 HSPLcom/android/server/TelephonyRegistry$ConfigurationProvider$$ExternalSyntheticLambda2;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/TelephonyRegistry$ConfigurationProvider$$ExternalSyntheticLambda3;-><init>(I)V
+PLcom/android/server/TelephonyRegistry$ConfigurationProvider$$ExternalSyntheticLambda3;->getOrThrow()Ljava/lang/Object;
 PLcom/android/server/TelephonyRegistry$ConfigurationProvider$$ExternalSyntheticLambda4;-><init>(Ljava/lang/String;Landroid/os/UserHandle;)V
 PLcom/android/server/TelephonyRegistry$ConfigurationProvider$$ExternalSyntheticLambda4;->getOrThrow()Ljava/lang/Object;
 HSPLcom/android/server/TelephonyRegistry$ConfigurationProvider$$ExternalSyntheticLambda5;-><init>(Ljava/lang/String;Landroid/os/UserHandle;)V
@@ -2748,6 +2830,7 @@
 HPLcom/android/server/TelephonyRegistry$ConfigurationProvider$$ExternalSyntheticLambda6;->getOrThrow()Ljava/lang/Object;
 PLcom/android/server/TelephonyRegistry$ConfigurationProvider;->$r8$lambda$4eWR_11p6qowlxxrsk_R5zmCUQo(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/lang/Boolean;
 HSPLcom/android/server/TelephonyRegistry$ConfigurationProvider;->$r8$lambda$CoNWCNUmsZdJaeiCqIub6fY_iwk(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/lang/Boolean;
+PLcom/android/server/TelephonyRegistry$ConfigurationProvider;->$r8$lambda$L-pL6TmK4RT30eTdskn6d8dqINk(I)Ljava/lang/Boolean;
 HPLcom/android/server/TelephonyRegistry$ConfigurationProvider;->$r8$lambda$_AFTrjbPXFDexTE-UPfUPmtjhi0(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/lang/Boolean;
 HSPLcom/android/server/TelephonyRegistry$ConfigurationProvider;->$r8$lambda$_ZMr604_ruYd0mLx6NzNuPEs5Ec(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/lang/Boolean;
 PLcom/android/server/TelephonyRegistry$ConfigurationProvider;->$r8$lambda$iwYU3kZ0wEItA1RdCwOCdIjnoGI(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/lang/Boolean;
@@ -2764,14 +2847,15 @@
 HSPLcom/android/server/TelephonyRegistry$ConfigurationProvider;->lambda$isCallStateReadPhoneStateEnforcedInPlatformCompat$2(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/lang/Boolean;
 PLcom/android/server/TelephonyRegistry$ConfigurationProvider;->lambda$isCellInfoReadPhoneStateEnforcedInPlatformCompat$4(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/lang/Boolean;
 HPLcom/android/server/TelephonyRegistry$ConfigurationProvider;->lambda$isDisplayInfoNrAdvancedSupported$6(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/lang/Boolean;
-PLcom/android/server/TelephonyRegistry$ConfigurationProvider;->lambda$isDisplayInfoReadPhoneStateEnforcedInPlatformCompat$5(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/lang/Boolean;
+HPLcom/android/server/TelephonyRegistry$ConfigurationProvider;->lambda$isDisplayInfoReadPhoneStateEnforcedInPlatformCompat$5(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/lang/Boolean;
+PLcom/android/server/TelephonyRegistry$ConfigurationProvider;->lambda$isRegistrationLimitEnabledInPlatformCompat$1(I)Ljava/lang/Boolean;
 HSPLcom/android/server/TelephonyRegistry$Record;-><init>()V
 HSPLcom/android/server/TelephonyRegistry$Record;-><init>(Lcom/android/server/TelephonyRegistry$Record-IA;)V
 HPLcom/android/server/TelephonyRegistry$Record;->canReadCallLog()Z
 HSPLcom/android/server/TelephonyRegistry$Record;->matchCarrierPrivilegesCallback()Z
 HPLcom/android/server/TelephonyRegistry$Record;->matchOnOpportunisticSubscriptionsChangedListener()Z
-HPLcom/android/server/TelephonyRegistry$Record;->matchOnSubscriptionsChangedListener()Z
-HPLcom/android/server/TelephonyRegistry$Record;->matchTelephonyCallbackEvent(I)Z+]Ljava/util/Set;Ljava/util/HashSet;
+HSPLcom/android/server/TelephonyRegistry$Record;->matchOnSubscriptionsChangedListener()Z
+HSPLcom/android/server/TelephonyRegistry$Record;->matchTelephonyCallbackEvent(I)Z+]Ljava/util/Set;Ljava/util/HashSet;
 PLcom/android/server/TelephonyRegistry$Record;->toString()Ljava/lang/String;
 HSPLcom/android/server/TelephonyRegistry$TelephonyRegistryDeathRecipient;-><init>(Lcom/android/server/TelephonyRegistry;Landroid/os/IBinder;)V
 HPLcom/android/server/TelephonyRegistry$TelephonyRegistryDeathRecipient;->binderDied()V
@@ -2780,38 +2864,39 @@
 HPLcom/android/server/TelephonyRegistry;->$r8$lambda$hAM-L2ovpIkCkphlKSFZYDLERDc(Lcom/android/server/TelephonyRegistry;)Ljava/lang/Boolean;
 PLcom/android/server/TelephonyRegistry;->$r8$lambda$id9Dv4TMiRMb6Z3v-UJt9p6FFec(Lcom/android/server/TelephonyRegistry;I)Z
 HPLcom/android/server/TelephonyRegistry;->$r8$lambda$rdsDPOgFe-Fug7E05hReLgUjRik(Lcom/android/server/TelephonyRegistry;Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery;)Ljava/lang/Boolean;
-PLcom/android/server/TelephonyRegistry;->-$$Nest$fgetmCellIdentity(Lcom/android/server/TelephonyRegistry;)[Landroid/telephony/CellIdentity;
+HSPLcom/android/server/TelephonyRegistry;->-$$Nest$fgetmCellIdentity(Lcom/android/server/TelephonyRegistry;)[Landroid/telephony/CellIdentity;
 PLcom/android/server/TelephonyRegistry;->-$$Nest$fgetmDefaultPhoneId(Lcom/android/server/TelephonyRegistry;)I
 PLcom/android/server/TelephonyRegistry;->-$$Nest$fgetmDefaultSubId(Lcom/android/server/TelephonyRegistry;)I
-PLcom/android/server/TelephonyRegistry;->-$$Nest$fgetmHandler(Lcom/android/server/TelephonyRegistry;)Landroid/os/Handler;
+HSPLcom/android/server/TelephonyRegistry;->-$$Nest$fgetmHandler(Lcom/android/server/TelephonyRegistry;)Landroid/os/Handler;
 PLcom/android/server/TelephonyRegistry;->-$$Nest$fgetmLocalLog(Lcom/android/server/TelephonyRegistry;)Landroid/util/LocalLog;
 PLcom/android/server/TelephonyRegistry;->-$$Nest$fgetmRecords(Lcom/android/server/TelephonyRegistry;)Ljava/util/ArrayList;
 PLcom/android/server/TelephonyRegistry;->-$$Nest$fputmDefaultPhoneId(Lcom/android/server/TelephonyRegistry;I)V
 PLcom/android/server/TelephonyRegistry;->-$$Nest$fputmDefaultSubId(Lcom/android/server/TelephonyRegistry;I)V
 PLcom/android/server/TelephonyRegistry;->-$$Nest$mcheckPossibleMissNotify(Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry$Record;I)V
 PLcom/android/server/TelephonyRegistry;->-$$Nest$mgetPhoneIdFromSubId(Lcom/android/server/TelephonyRegistry;I)I
-PLcom/android/server/TelephonyRegistry;->-$$Nest$mgetTelephonyManager(Lcom/android/server/TelephonyRegistry;)Landroid/telephony/TelephonyManager;
+HSPLcom/android/server/TelephonyRegistry;->-$$Nest$mgetTelephonyManager(Lcom/android/server/TelephonyRegistry;)Landroid/telephony/TelephonyManager;
 PLcom/android/server/TelephonyRegistry;->-$$Nest$mhandleRemoveListLocked(Lcom/android/server/TelephonyRegistry;)V
-PLcom/android/server/TelephonyRegistry;->-$$Nest$mnotifyCellLocationForSubscriber(Lcom/android/server/TelephonyRegistry;ILandroid/telephony/CellIdentity;Z)V
+HSPLcom/android/server/TelephonyRegistry;->-$$Nest$mnotifyCellLocationForSubscriber(Lcom/android/server/TelephonyRegistry;ILandroid/telephony/CellIdentity;Z)V
+PLcom/android/server/TelephonyRegistry;->-$$Nest$monMultiSimConfigChanged(Lcom/android/server/TelephonyRegistry;)V
 HPLcom/android/server/TelephonyRegistry;->-$$Nest$mremove(Lcom/android/server/TelephonyRegistry;Landroid/os/IBinder;)V
 PLcom/android/server/TelephonyRegistry;->-$$Nest$mvalidatePhoneId(Lcom/android/server/TelephonyRegistry;I)Z
 PLcom/android/server/TelephonyRegistry;->-$$Nest$smpii(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/TelephonyRegistry;-><clinit>()V
 HSPLcom/android/server/TelephonyRegistry;-><init>(Landroid/content/Context;Lcom/android/server/TelephonyRegistry$ConfigurationProvider;)V
-HSPLcom/android/server/TelephonyRegistry;->add(Landroid/os/IBinder;IIZ)Lcom/android/server/TelephonyRegistry$Record;+]Landroid/os/IBinder;Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub;,Landroid/os/BinderProxy;,Landroid/telephony/TelephonyCallback$IPhoneStateListenerStub;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/TelephonyRegistry$ConfigurationProvider;Lcom/android/server/TelephonyRegistry$ConfigurationProvider;
+HSPLcom/android/server/TelephonyRegistry;->add(Landroid/os/IBinder;IIZ)Lcom/android/server/TelephonyRegistry$Record;+]Landroid/os/IBinder;Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub;,Landroid/os/BinderProxy;,Landroid/telephony/TelephonyCallback$IPhoneStateListenerStub;,Landroid/telephony/TelephonyRegistryManager$1;,Landroid/telephony/TelephonyRegistryManager$CarrierPrivilegesCallbackWrapper;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/TelephonyRegistry$ConfigurationProvider;Lcom/android/server/TelephonyRegistry$ConfigurationProvider;
 HSPLcom/android/server/TelephonyRegistry;->addCarrierPrivilegesCallback(ILcom/android/internal/telephony/ICarrierPrivilegesCallback;Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/TelephonyRegistry;->addOnOpportunisticSubscriptionsChangedListener(Ljava/lang/String;Ljava/lang/String;Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;)V
-HSPLcom/android/server/TelephonyRegistry;->addOnSubscriptionsChangedListener(Ljava/lang/String;Ljava/lang/String;Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;)V
+HPLcom/android/server/TelephonyRegistry;->addOnOpportunisticSubscriptionsChangedListener(Ljava/lang/String;Ljava/lang/String;Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;)V
+HSPLcom/android/server/TelephonyRegistry;->addOnSubscriptionsChangedListener(Ljava/lang/String;Ljava/lang/String;Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;)V+]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;Lcom/android/internal/telephony/IOnSubscriptionsChangedListener$Stub$Proxy;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
 HPLcom/android/server/TelephonyRegistry;->broadcastCallStateChanged(ILjava/lang/String;II)V
 HPLcom/android/server/TelephonyRegistry;->broadcastDataConnectionStateChanged(IILandroid/telephony/PreciseDataConnectionState;)V
 HPLcom/android/server/TelephonyRegistry;->broadcastServiceStateChanged(Landroid/telephony/ServiceState;II)V
-HPLcom/android/server/TelephonyRegistry;->broadcastSignalStrengthChanged(Landroid/telephony/SignalStrength;II)V
+HPLcom/android/server/TelephonyRegistry;->broadcastSignalStrengthChanged(Landroid/telephony/SignalStrength;II)V+]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Lcom/android/internal/app/IBatteryStats;Lcom/android/server/am/BatteryStatsService;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/Intent;Landroid/content/Intent;
 PLcom/android/server/TelephonyRegistry;->callStateToString(I)Ljava/lang/String;
 HPLcom/android/server/TelephonyRegistry;->checkCoarseLocationAccess(Lcom/android/server/TelephonyRegistry$Record;I)Z+]Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery$Builder;Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery$Builder;]Ljava/lang/Boolean;Ljava/lang/Boolean;
 HPLcom/android/server/TelephonyRegistry;->checkFineLocationAccess(Lcom/android/server/TelephonyRegistry$Record;I)Z+]Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery$Builder;Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery$Builder;]Ljava/lang/Boolean;Ljava/lang/Boolean;
-HSPLcom/android/server/TelephonyRegistry;->checkListenerPermission(Ljava/util/Set;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
-HPLcom/android/server/TelephonyRegistry;->checkNotifyPermission()Z
-HPLcom/android/server/TelephonyRegistry;->checkNotifyPermission(Ljava/lang/String;)Z
+HSPLcom/android/server/TelephonyRegistry;->checkListenerPermission(Ljava/util/Set;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery$Builder;Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery$Builder;]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/telephony/LocationAccessPolicy$LocationPermissionResult;Landroid/telephony/LocationAccessPolicy$LocationPermissionResult;
+HSPLcom/android/server/TelephonyRegistry;->checkNotifyPermission()Z
+HSPLcom/android/server/TelephonyRegistry;->checkNotifyPermission(Ljava/lang/String;)Z
 PLcom/android/server/TelephonyRegistry;->checkPossibleMissNotify(Lcom/android/server/TelephonyRegistry$Record;I)V
 HSPLcom/android/server/TelephonyRegistry;->createCallQuality()Landroid/telephony/CallQuality;
 HSPLcom/android/server/TelephonyRegistry;->createPreciseCallState()Landroid/telephony/PreciseCallState;
@@ -2822,37 +2907,37 @@
 PLcom/android/server/TelephonyRegistry;->getBackwardCompatibleTelephonyDisplayInfo(Landroid/telephony/TelephonyDisplayInfo;)Landroid/telephony/TelephonyDisplayInfo;
 PLcom/android/server/TelephonyRegistry;->getCallIncomingNumber(Lcom/android/server/TelephonyRegistry$Record;I)Ljava/lang/String;
 HPLcom/android/server/TelephonyRegistry;->getLocationSanitizedConfigs(Ljava/util/List;)Ljava/util/List;+]Landroid/telephony/PhysicalChannelConfig;Landroid/telephony/PhysicalChannelConfig;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
-HSPLcom/android/server/TelephonyRegistry;->getPhoneIdFromSubId(I)I
-HSPLcom/android/server/TelephonyRegistry;->getTelephonyManager()Landroid/telephony/TelephonyManager;
-HPLcom/android/server/TelephonyRegistry;->handleRemoveListLocked()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HSPLcom/android/server/TelephonyRegistry;->getPhoneIdFromSubId(I)I+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/telephony/SubscriptionInfo;Landroid/telephony/SubscriptionInfo;]Landroid/telephony/SubscriptionManager;Landroid/telephony/SubscriptionManager;
+HSPLcom/android/server/TelephonyRegistry;->getTelephonyManager()Landroid/telephony/TelephonyManager;+]Landroid/content/Context;Landroid/app/ContextImpl;
+HSPLcom/android/server/TelephonyRegistry;->handleRemoveListLocked()V+]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HPLcom/android/server/TelephonyRegistry;->idMatch(Lcom/android/server/TelephonyRegistry$Record;II)Z
 HSPLcom/android/server/TelephonyRegistry;->isActiveEmergencySessionPermissionRequired(Ljava/util/Set;)Z
-HSPLcom/android/server/TelephonyRegistry;->isLocationPermissionRequired(Ljava/util/Set;)Z
-HSPLcom/android/server/TelephonyRegistry;->isPhoneStatePermissionRequired(Ljava/util/Set;Ljava/lang/String;Landroid/os/UserHandle;)Z
+HSPLcom/android/server/TelephonyRegistry;->isLocationPermissionRequired(Ljava/util/Set;)Z+]Ljava/util/Set;Ljava/util/HashSet;
+HSPLcom/android/server/TelephonyRegistry;->isPhoneStatePermissionRequired(Ljava/util/Set;Ljava/lang/String;Landroid/os/UserHandle;)Z+]Lcom/android/server/TelephonyRegistry$ConfigurationProvider;Lcom/android/server/TelephonyRegistry$ConfigurationProvider;]Ljava/util/Set;Ljava/util/HashSet;
 HSPLcom/android/server/TelephonyRegistry;->isPrecisePhoneStatePermissionRequired(Ljava/util/Set;)Z+]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;]Ljava/util/Set;Ljava/util/HashSet;
-HSPLcom/android/server/TelephonyRegistry;->isPrivilegedPhoneStatePermissionRequired(Ljava/util/Set;)Z
+HSPLcom/android/server/TelephonyRegistry;->isPrivilegedPhoneStatePermissionRequired(Ljava/util/Set;)Z+]Ljava/util/Set;Ljava/util/HashSet;
 HPLcom/android/server/TelephonyRegistry;->lambda$broadcastServiceStateChanged$1()Ljava/lang/Boolean;
 PLcom/android/server/TelephonyRegistry;->lambda$broadcastServiceStateChanged$2()[Ljava/lang/String;
 HPLcom/android/server/TelephonyRegistry;->lambda$checkCoarseLocationAccess$4(Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery;)Ljava/lang/Boolean;
 HPLcom/android/server/TelephonyRegistry;->lambda$checkFineLocationAccess$3(Landroid/telephony/LocationAccessPolicy$LocationPermissionQuery;)Ljava/lang/Boolean;
 PLcom/android/server/TelephonyRegistry;->lambda$notifyCarrierNetworkChange$0(I)Z
-HSPLcom/android/server/TelephonyRegistry;->listen(ZZLjava/lang/String;Ljava/lang/String;Lcom/android/internal/telephony/IPhoneStateListener;Ljava/util/Set;ZI)V
-HSPLcom/android/server/TelephonyRegistry;->listenWithEventList(ZZILjava/lang/String;Ljava/lang/String;Lcom/android/internal/telephony/IPhoneStateListener;[IZ)V
+HSPLcom/android/server/TelephonyRegistry;->listen(ZZLjava/lang/String;Ljava/lang/String;Lcom/android/internal/telephony/IPhoneStateListener;Ljava/util/Set;ZI)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/internal/telephony/IPhoneStateListener;Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub;,Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;,Landroid/telephony/TelephonyCallback$IPhoneStateListenerStub;]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Map;Landroid/util/ArrayMap;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Landroid/telephony/ServiceState;Landroid/telephony/ServiceState;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Landroid/util/LocalLog;Landroid/util/LocalLog;]Ljava/util/Set;Ljava/util/HashSet;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/TelephonyRegistry;->listenWithEventList(ZZILjava/lang/String;Ljava/lang/String;Lcom/android/internal/telephony/IPhoneStateListener;[IZ)V+]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Ljava/util/stream/Stream;Ljava/util/stream/IntPipeline$4;]Ljava/util/stream/IntStream;Ljava/util/stream/IntPipeline$Head;
 HSPLcom/android/server/TelephonyRegistry;->log(Ljava/lang/String;)V
-PLcom/android/server/TelephonyRegistry;->notifyActiveDataSubIdChanged(I)V
-HPLcom/android/server/TelephonyRegistry;->notifyAllowedNetworkTypesChanged(IIIJ)V
-HPLcom/android/server/TelephonyRegistry;->notifyBarringInfoChanged(IILandroid/telephony/BarringInfo;)V+]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/telephony/BarringInfo;Landroid/telephony/BarringInfo;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/internal/telephony/IPhoneStateListener;Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;
-HPLcom/android/server/TelephonyRegistry;->notifyCallForwardingChangedForSubscriber(IZ)V
+HPLcom/android/server/TelephonyRegistry;->notifyActiveDataSubIdChanged(I)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/internal/telephony/IPhoneStateListener;Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub;,Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;,Landroid/telephony/TelephonyCallback$IPhoneStateListenerStub;]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Landroid/util/LocalLog;Landroid/util/LocalLog;
+HPLcom/android/server/TelephonyRegistry;->notifyAllowedNetworkTypesChanged(IIIJ)V+]Lcom/android/internal/telephony/IPhoneStateListener;Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HPLcom/android/server/TelephonyRegistry;->notifyBarringInfoChanged(IILandroid/telephony/BarringInfo;)V+]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Landroid/telephony/BarringInfo;Landroid/telephony/BarringInfo;]Lcom/android/internal/telephony/IPhoneStateListener;Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;
+HPLcom/android/server/TelephonyRegistry;->notifyCallForwardingChangedForSubscriber(IZ)V+]Lcom/android/internal/telephony/IPhoneStateListener;Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HPLcom/android/server/TelephonyRegistry;->notifyCallQualityChanged(Landroid/telephony/CallQuality;III)V+]Lcom/android/internal/telephony/IPhoneStateListener;Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
-PLcom/android/server/TelephonyRegistry;->notifyCallState(IIILjava/lang/String;)V
+HPLcom/android/server/TelephonyRegistry;->notifyCallState(IIILjava/lang/String;)V
 HPLcom/android/server/TelephonyRegistry;->notifyCallStateForAllSubs(ILjava/lang/String;)V
 PLcom/android/server/TelephonyRegistry;->notifyCarrierNetworkChange(Z)V
-PLcom/android/server/TelephonyRegistry;->notifyCarrierNetworkChangeWithPermission(IZ)V
-PLcom/android/server/TelephonyRegistry;->notifyCarrierPrivilegesChanged(ILjava/util/List;[I)V
-PLcom/android/server/TelephonyRegistry;->notifyCarrierServiceChanged(ILjava/lang/String;I)V
+HPLcom/android/server/TelephonyRegistry;->notifyCarrierNetworkChangeWithPermission(IZ)V+]Lcom/android/internal/telephony/IPhoneStateListener;Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HPLcom/android/server/TelephonyRegistry;->notifyCarrierPrivilegesChanged(ILjava/util/List;[I)V+]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Lcom/android/internal/telephony/ICarrierPrivilegesCallback;Landroid/telephony/TelephonyRegistryManager$CarrierPrivilegesCallbackWrapper;,Lcom/android/internal/telephony/ICarrierPrivilegesCallback$Stub$Proxy;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HPLcom/android/server/TelephonyRegistry;->notifyCarrierServiceChanged(ILjava/lang/String;I)V+]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Lcom/android/internal/telephony/ICarrierPrivilegesCallback;Landroid/telephony/TelephonyRegistryManager$CarrierPrivilegesCallbackWrapper;,Lcom/android/internal/telephony/ICarrierPrivilegesCallback$Stub$Proxy;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HPLcom/android/server/TelephonyRegistry;->notifyCellInfoForSubscriber(ILjava/util/List;)V+]Lcom/android/internal/telephony/IPhoneStateListener;Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HPLcom/android/server/TelephonyRegistry;->notifyCellLocationForSubscriber(ILandroid/telephony/CellIdentity;)V
-HPLcom/android/server/TelephonyRegistry;->notifyCellLocationForSubscriber(ILandroid/telephony/CellIdentity;Z)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/internal/telephony/IPhoneStateListener;Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;
+HSPLcom/android/server/TelephonyRegistry;->notifyCellLocationForSubscriber(ILandroid/telephony/CellIdentity;Z)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/internal/telephony/IPhoneStateListener;Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HPLcom/android/server/TelephonyRegistry;->notifyDataActivityForSubscriber(II)V+]Lcom/android/internal/telephony/IPhoneStateListener;Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub;,Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HPLcom/android/server/TelephonyRegistry;->notifyDataConnectionForSubscriber(IILandroid/telephony/PreciseDataConnectionState;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Map$Entry;Landroid/util/MapCollections$MapIterator;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;]Ljava/util/Map;Landroid/util/ArrayMap;]Ljava/util/Set;Landroid/util/MapCollections$EntrySet;]Landroid/util/LocalLog;Landroid/util/LocalLog;]Landroid/telephony/data/ApnSetting;Landroid/telephony/data/ApnSetting;]Lcom/android/internal/telephony/IPhoneStateListener;Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub;,Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/telephony/PreciseDataConnectionState;Landroid/telephony/PreciseDataConnectionState;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;,Landroid/util/MapCollections$MapIterator;
 PLcom/android/server/TelephonyRegistry;->notifyDataEnabled(IIZI)V
@@ -2860,30 +2945,31 @@
 HPLcom/android/server/TelephonyRegistry;->notifyDisplayInfoChanged(IILandroid/telephony/TelephonyDisplayInfo;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/internal/telephony/IPhoneStateListener;Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;,Landroid/telephony/TelephonyCallback$IPhoneStateListenerStub;]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/TelephonyRegistry$ConfigurationProvider;Lcom/android/server/TelephonyRegistry$ConfigurationProvider;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Landroid/util/LocalLog;Landroid/util/LocalLog;
 HPLcom/android/server/TelephonyRegistry;->notifyEmergencyNumberList(II)V+]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Landroid/telephony/TelephonyManager;Landroid/telephony/TelephonyManager;
 PLcom/android/server/TelephonyRegistry;->notifyImsDisconnectCause(ILandroid/telephony/ims/ImsReasonInfo;)V
-HPLcom/android/server/TelephonyRegistry;->notifyLinkCapacityEstimateChanged(IILjava/util/List;)V+]Lcom/android/internal/telephony/IPhoneStateListener;Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
-PLcom/android/server/TelephonyRegistry;->notifyMessageWaitingChangedForPhoneId(IIZ)V
+HPLcom/android/server/TelephonyRegistry;->notifyLinkCapacityEstimateChanged(IILjava/util/List;)V+]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/internal/telephony/IPhoneStateListener;Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;
+HPLcom/android/server/TelephonyRegistry;->notifyMessageWaitingChangedForPhoneId(IIZ)V+]Lcom/android/internal/telephony/IPhoneStateListener;Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HPLcom/android/server/TelephonyRegistry;->notifyOpportunisticSubscriptionInfoChanged()V
 PLcom/android/server/TelephonyRegistry;->notifyOutgoingEmergencyCall(IILandroid/telephony/emergency/EmergencyNumber;)V
-PLcom/android/server/TelephonyRegistry;->notifyPhoneCapabilityChanged(Landroid/telephony/PhoneCapability;)V
+HSPLcom/android/server/TelephonyRegistry;->notifyPhoneCapabilityChanged(Landroid/telephony/PhoneCapability;)V
 HPLcom/android/server/TelephonyRegistry;->notifyPhysicalChannelConfigForSubscriber(IILjava/util/List;)V+]Lcom/android/internal/telephony/IPhoneStateListener;Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;,Landroid/telephony/TelephonyCallback$IPhoneStateListenerStub;]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HPLcom/android/server/TelephonyRegistry;->notifyPreciseCallState(IIIII)V
-PLcom/android/server/TelephonyRegistry;->notifyRadioPowerStateChanged(III)V
-HPLcom/android/server/TelephonyRegistry;->notifyRegistrationFailed(IILandroid/telephony/CellIdentity;Ljava/lang/String;III)V+]Lcom/android/internal/telephony/IPhoneStateListener;Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Landroid/telephony/CellIdentity;Landroid/telephony/CellIdentityLte;]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HSPLcom/android/server/TelephonyRegistry;->notifyRadioPowerStateChanged(III)V
+HPLcom/android/server/TelephonyRegistry;->notifyRegistrationFailed(IILandroid/telephony/CellIdentity;Ljava/lang/String;III)V+]Lcom/android/internal/telephony/IPhoneStateListener;Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Landroid/telephony/CellIdentity;Landroid/telephony/CellIdentityLte;,Landroid/telephony/CellIdentityNr;]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HPLcom/android/server/TelephonyRegistry;->notifyServiceStateForPhoneId(IILandroid/telephony/ServiceState;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/internal/telephony/IPhoneStateListener;Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub;,Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/telephony/ServiceState;Landroid/telephony/ServiceState;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Landroid/util/LocalLog;Landroid/util/LocalLog;
 HPLcom/android/server/TelephonyRegistry;->notifySignalStrengthForPhoneId(IILandroid/telephony/SignalStrength;)V+]Lcom/android/internal/telephony/IPhoneStateListener;Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub;,Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;,Landroid/telephony/TelephonyCallback$IPhoneStateListenerStub;]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HPLcom/android/server/TelephonyRegistry;->notifySimActivationStateChangedForPhoneId(IIII)V
 PLcom/android/server/TelephonyRegistry;->notifySrvccStateChanged(II)V
-HPLcom/android/server/TelephonyRegistry;->notifySubscriptionInfoChanged()V+]Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;Landroid/telephony/TelephonyRegistryManager$1;,Lcom/android/internal/telephony/IOnSubscriptionsChangedListener$Stub$Proxy;]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
-PLcom/android/server/TelephonyRegistry;->notifyUserMobileDataStateChangedForPhoneId(IIZ)V
+HSPLcom/android/server/TelephonyRegistry;->notifySubscriptionInfoChanged()V+]Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;Landroid/telephony/TelephonyRegistryManager$1;,Lcom/android/internal/telephony/IOnSubscriptionsChangedListener$Stub$Proxy;]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HPLcom/android/server/TelephonyRegistry;->notifyUserMobileDataStateChangedForPhoneId(IIZ)V+]Lcom/android/internal/telephony/IPhoneStateListener;Lcom/android/internal/telephony/IPhoneStateListener$Stub$Proxy;]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLcom/android/server/TelephonyRegistry;->onMultiSimConfigChanged()V
 HSPLcom/android/server/TelephonyRegistry;->pii(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/TelephonyRegistry;->pii(Ljava/util/List;)Ljava/lang/String;
-HPLcom/android/server/TelephonyRegistry;->remove(Landroid/os/IBinder;)V+]Landroid/os/IBinder;Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub;,Landroid/os/BinderProxy;,Landroid/telephony/TelephonyCallback$IPhoneStateListenerStub;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/TelephonyRegistry;->remove(Landroid/os/IBinder;)V+]Landroid/os/IBinder;Landroid/telephony/PhoneStateListener$IPhoneStateListenerStub;,Landroid/os/BinderProxy;,Landroid/telephony/TelephonyCallback$IPhoneStateListenerStub;,Landroid/telephony/TelephonyRegistryManager$CarrierPrivilegesCallbackWrapper;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+PLcom/android/server/TelephonyRegistry;->removeCarrierPrivilegesCallback(Lcom/android/internal/telephony/ICarrierPrivilegesCallback;Ljava/lang/String;)V
 PLcom/android/server/TelephonyRegistry;->removeOnSubscriptionsChangedListener(Ljava/lang/String;Lcom/android/internal/telephony/IOnSubscriptionsChangedListener;)V
-PLcom/android/server/TelephonyRegistry;->shouldSanitizeLocationForPhysicalChannelConfig(Lcom/android/server/TelephonyRegistry$Record;)Z
+HPLcom/android/server/TelephonyRegistry;->shouldSanitizeLocationForPhysicalChannelConfig(Lcom/android/server/TelephonyRegistry$Record;)Z
 HSPLcom/android/server/TelephonyRegistry;->systemRunning()V
 HPLcom/android/server/TelephonyRegistry;->validateEventAndUserLocked(Lcom/android/server/TelephonyRegistry$Record;I)Z+]Lcom/android/server/TelephonyRegistry$Record;Lcom/android/server/TelephonyRegistry$Record;
-HSPLcom/android/server/TelephonyRegistry;->validatePhoneId(I)Z
+HSPLcom/android/server/TelephonyRegistry;->validatePhoneId(I)Z+]Lcom/android/server/TelephonyRegistry;Lcom/android/server/TelephonyRegistry;]Landroid/telephony/TelephonyManager;Landroid/telephony/TelephonyManager;
 HSPLcom/android/server/ThreadPriorityBooster$1;-><init>(Lcom/android/server/ThreadPriorityBooster;)V
 HSPLcom/android/server/ThreadPriorityBooster$1;->initialValue()Lcom/android/server/ThreadPriorityBooster$PriorityState;
 HSPLcom/android/server/ThreadPriorityBooster$1;->initialValue()Ljava/lang/Object;
@@ -2892,7 +2978,7 @@
 HSPLcom/android/server/ThreadPriorityBooster;-><init>(II)V
 HSPLcom/android/server/ThreadPriorityBooster;->boost()V+]Ljava/lang/ThreadLocal;Lcom/android/server/ThreadPriorityBooster$1;
 HSPLcom/android/server/ThreadPriorityBooster;->reset()V+]Ljava/lang/ThreadLocal;Lcom/android/server/ThreadPriorityBooster$1;
-HPLcom/android/server/ThreadPriorityBooster;->setBoostToPriority(I)V
+HSPLcom/android/server/ThreadPriorityBooster;->setBoostToPriority(I)V
 HSPLcom/android/server/UiModeManagerInternal;-><init>()V
 HSPLcom/android/server/UiModeManagerService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/UiModeManagerService;Landroid/content/Context;Landroid/content/res/Resources;)V
 HSPLcom/android/server/UiModeManagerService$$ExternalSyntheticLambda0;->run()V
@@ -2940,7 +3026,7 @@
 HSPLcom/android/server/UiModeManagerService$2;-><init>(Lcom/android/server/UiModeManagerService;)V
 PLcom/android/server/UiModeManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/UiModeManagerService$3;-><init>(Lcom/android/server/UiModeManagerService;)V
-HPLcom/android/server/UiModeManagerService$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/UiModeManagerService$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V+]Ljava/lang/String;Ljava/lang/String;]Lcom/android/server/UiModeManagerService;Lcom/android/server/UiModeManagerService;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/UiModeManagerService$4;-><init>(Lcom/android/server/UiModeManagerService;)V
 PLcom/android/server/UiModeManagerService$4;->onTwilightStateChanged(Lcom/android/server/twilight/TwilightState;)V
 HSPLcom/android/server/UiModeManagerService$5;-><init>(Lcom/android/server/UiModeManagerService;)V
@@ -2982,7 +3068,7 @@
 HSPLcom/android/server/UiModeManagerService;->-$$Nest$fgetmProjectionHolders(Lcom/android/server/UiModeManagerService;)Landroid/util/SparseArray;
 HSPLcom/android/server/UiModeManagerService;->-$$Nest$fgetmProjectionListeners(Lcom/android/server/UiModeManagerService;)Landroid/util/SparseArray;
 PLcom/android/server/UiModeManagerService;->-$$Nest$fgetmUiModeLocked(Lcom/android/server/UiModeManagerService;)Z
-HPLcom/android/server/UiModeManagerService;->-$$Nest$fputmCharging(Lcom/android/server/UiModeManagerService;Z)V
+HSPLcom/android/server/UiModeManagerService;->-$$Nest$fputmCharging(Lcom/android/server/UiModeManagerService;Z)V
 PLcom/android/server/UiModeManagerService;->-$$Nest$fputmLastBedtimeRequestedNightMode(Lcom/android/server/UiModeManagerService;Z)V
 PLcom/android/server/UiModeManagerService;->-$$Nest$fputmNightMode(Lcom/android/server/UiModeManagerService;I)V
 PLcom/android/server/UiModeManagerService;->-$$Nest$fputmNightModeCustomType(Lcom/android/server/UiModeManagerService;I)V
@@ -3051,19 +3137,19 @@
 PLcom/android/server/UiModeManagerService;->releaseProjectionUnchecked(ILjava/lang/String;)Z
 HSPLcom/android/server/UiModeManagerService;->resetNightModeOverrideLocked()Z
 HSPLcom/android/server/UiModeManagerService;->scheduleNextCustomTimeListener()V
-HPLcom/android/server/UiModeManagerService;->sendConfigurationAndStartDreamOrDockAppLocked(Ljava/lang/String;)V
+HSPLcom/android/server/UiModeManagerService;->sendConfigurationAndStartDreamOrDockAppLocked(Ljava/lang/String;)V+]Lcom/android/server/UiModeManagerService;Lcom/android/server/UiModeManagerService;
 PLcom/android/server/UiModeManagerService;->setCarModeLocked(ZIILjava/lang/String;)V
 HSPLcom/android/server/UiModeManagerService;->setupWizardCompleteForCurrentUser()Z
 PLcom/android/server/UiModeManagerService;->shouldApplyAutomaticChangesImmediately()Z
 PLcom/android/server/UiModeManagerService;->toPackageNameList(Ljava/util/Collection;)Ljava/util/List;
 PLcom/android/server/UiModeManagerService;->unregisterScreenOffEventLocked()V
-HSPLcom/android/server/UiModeManagerService;->unregisterTimeChangeEvent()V
+HSPLcom/android/server/UiModeManagerService;->unregisterTimeChangeEvent()V+]Lcom/android/server/SystemService;Lcom/android/server/UiModeManagerService;]Landroid/content/Context;Landroid/app/ContextImpl;
 PLcom/android/server/UiModeManagerService;->updateAfterBroadcastLocked(Ljava/lang/String;II)V
 HSPLcom/android/server/UiModeManagerService;->updateComputedNightModeLocked(Z)V
-HSPLcom/android/server/UiModeManagerService;->updateConfigurationLocked()V
+HSPLcom/android/server/UiModeManagerService;->updateConfigurationLocked()V+]Lcom/android/server/UiModeManagerService;Lcom/android/server/UiModeManagerService;]Lcom/android/server/twilight/TwilightManager;Lcom/android/server/twilight/TwilightService$1;
 PLcom/android/server/UiModeManagerService;->updateCustomTimeLocked()V
 PLcom/android/server/UiModeManagerService;->updateDockState(I)V
-HPLcom/android/server/UiModeManagerService;->updateLocked(II)V
+HSPLcom/android/server/UiModeManagerService;->updateLocked(II)V+]Lcom/android/server/UiModeManagerService;Lcom/android/server/UiModeManagerService;]Landroid/os/PowerManager$WakeLock;Landroid/os/PowerManager$WakeLock;
 HSPLcom/android/server/UiModeManagerService;->updateNightModeFromSettingsLocked(Landroid/content/Context;Landroid/content/res/Resources;I)V
 HSPLcom/android/server/UiModeManagerService;->updateSystemProperties()V
 HSPLcom/android/server/UiModeManagerService;->verifySetupWizardCompleted()V
@@ -3136,7 +3222,7 @@
 PLcom/android/server/VcnManagementService$VcnCallbackImpl;-><init>(Lcom/android/server/VcnManagementService;Landroid/os/ParcelUuid;)V
 PLcom/android/server/VcnManagementService$VcnCallbackImpl;-><init>(Lcom/android/server/VcnManagementService;Landroid/os/ParcelUuid;Lcom/android/server/VcnManagementService$VcnCallbackImpl-IA;)V
 PLcom/android/server/VcnManagementService$VcnCallbackImpl;->lambda$onGatewayConnectionError$0(Lcom/android/server/VcnManagementService$VcnStatusCallbackInfo;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/VcnManagementService$VcnCallbackImpl;->onGatewayConnectionError(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/VcnManagementService$VcnCallbackImpl;->onGatewayConnectionError(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/VcnManagementService$VcnCallbackImpl;->onSafeModeStatusChanged(Z)V
 PLcom/android/server/VcnManagementService$VcnStatusCallbackInfo;-><init>(Lcom/android/server/VcnManagementService;Landroid/os/ParcelUuid;Landroid/net/vcn/IVcnStatusCallback;Ljava/lang/String;I)V
 PLcom/android/server/VcnManagementService$VcnStatusCallbackInfo;-><init>(Lcom/android/server/VcnManagementService;Landroid/os/ParcelUuid;Landroid/net/vcn/IVcnStatusCallback;Ljava/lang/String;ILcom/android/server/VcnManagementService$VcnStatusCallbackInfo-IA;)V
@@ -3166,6 +3252,7 @@
 PLcom/android/server/VcnManagementService;->-$$Nest$fgetmTelephonySubscriptionTracker(Lcom/android/server/VcnManagementService;)Lcom/android/server/vcn/TelephonySubscriptionTracker;
 HSPLcom/android/server/VcnManagementService;->-$$Nest$fgetmVcns(Lcom/android/server/VcnManagementService;)Ljava/util/Map;
 HSPLcom/android/server/VcnManagementService;->-$$Nest$fputmLastSnapshot(Lcom/android/server/VcnManagementService;Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;)V
+PLcom/android/server/VcnManagementService;->-$$Nest$mgarbageCollectAndWriteVcnConfigsLocked(Lcom/android/server/VcnManagementService;)V
 HSPLcom/android/server/VcnManagementService;->-$$Nest$mgetSubGroupToSubIdMappings(Lcom/android/server/VcnManagementService;Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;)Ljava/util/Map;
 PLcom/android/server/VcnManagementService;->-$$Nest$misActiveSubGroup(Lcom/android/server/VcnManagementService;Landroid/os/ParcelUuid;Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;)Z
 PLcom/android/server/VcnManagementService;->-$$Nest$misCallbackPermissioned(Lcom/android/server/VcnManagementService;Lcom/android/server/VcnManagementService$VcnStatusCallbackInfo;Landroid/os/ParcelUuid;)Z
@@ -3173,29 +3260,33 @@
 PLcom/android/server/VcnManagementService;->-$$Nest$mnotifyAllPermissionedStatusCallbacksLocked(Lcom/android/server/VcnManagementService;Landroid/os/ParcelUuid;I)V
 PLcom/android/server/VcnManagementService;->-$$Nest$mnotifyAllPolicyListenersLocked(Lcom/android/server/VcnManagementService;)V
 PLcom/android/server/VcnManagementService;->-$$Nest$mstartVcnLocked(Lcom/android/server/VcnManagementService;Landroid/os/ParcelUuid;Landroid/net/vcn/VcnConfig;)V
+PLcom/android/server/VcnManagementService;->-$$Nest$mstopAndClearVcnConfigInternalLocked(Lcom/android/server/VcnManagementService;Landroid/os/ParcelUuid;)V
 PLcom/android/server/VcnManagementService;->-$$Nest$mstopVcnLocked(Lcom/android/server/VcnManagementService;Landroid/os/ParcelUuid;)V
+PLcom/android/server/VcnManagementService;->-$$Nest$mwriteConfigsToDiskLocked(Lcom/android/server/VcnManagementService;)V
 HSPLcom/android/server/VcnManagementService;->-$$Nest$sfgetTAG()Ljava/lang/String;
 HSPLcom/android/server/VcnManagementService;-><clinit>()V
 HSPLcom/android/server/VcnManagementService;-><init>(Landroid/content/Context;Lcom/android/server/VcnManagementService$Dependencies;)V
-PLcom/android/server/VcnManagementService;->addVcnUnderlyingNetworkPolicyListener(Landroid/net/vcn/IVcnUnderlyingNetworkPolicyListener;)V
-PLcom/android/server/VcnManagementService;->clearVcnConfig(Landroid/os/ParcelUuid;Ljava/lang/String;)V
+HPLcom/android/server/VcnManagementService;->addVcnUnderlyingNetworkPolicyListener(Landroid/net/vcn/IVcnUnderlyingNetworkPolicyListener;)V
+HPLcom/android/server/VcnManagementService;->clearVcnConfig(Landroid/os/ParcelUuid;Ljava/lang/String;)V
 HSPLcom/android/server/VcnManagementService;->create(Landroid/content/Context;)Lcom/android/server/VcnManagementService;
 PLcom/android/server/VcnManagementService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/VcnManagementService;->enforceCallingUserAndCarrierPrivilege(Landroid/os/ParcelUuid;Ljava/lang/String;)V
+HPLcom/android/server/VcnManagementService;->enforceCallingUserAndCarrierPrivilege(Landroid/os/ParcelUuid;Ljava/lang/String;)V
 PLcom/android/server/VcnManagementService;->enforceCarrierPrivilegeOrProvisioningPackage(Landroid/os/ParcelUuid;Ljava/lang/String;)V
 PLcom/android/server/VcnManagementService;->enforceManageTestNetworksForTestMode(Landroid/net/vcn/VcnConfig;)V
 PLcom/android/server/VcnManagementService;->enforcePrimaryUser()V
+PLcom/android/server/VcnManagementService;->garbageCollectAndWriteVcnConfigsLocked()V
+PLcom/android/server/VcnManagementService;->getConfiguredSubscriptionGroups(Ljava/lang/String;)Ljava/util/List;
 HPLcom/android/server/VcnManagementService;->getSubGroupForNetworkCapabilities(Landroid/net/NetworkCapabilities;)Landroid/os/ParcelUuid;+]Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/ArraySet;
 HSPLcom/android/server/VcnManagementService;->getSubGroupToSubIdMappings(Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;)Ljava/util/Map;
-HPLcom/android/server/VcnManagementService;->getUnderlyingNetworkPolicy(Landroid/net/NetworkCapabilities;Landroid/net/LinkProperties;)Landroid/net/vcn/VcnUnderlyingNetworkPolicy;
+HPLcom/android/server/VcnManagementService;->getUnderlyingNetworkPolicy(Landroid/net/NetworkCapabilities;Landroid/net/LinkProperties;)Landroid/net/vcn/VcnUnderlyingNetworkPolicy;+]Landroid/content/Context;Landroid/app/ContextImpl;
 PLcom/android/server/VcnManagementService;->isActiveSubGroup(Landroid/os/ParcelUuid;Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;)Z
 PLcom/android/server/VcnManagementService;->isCallbackPermissioned(Lcom/android/server/VcnManagementService$VcnStatusCallbackInfo;Landroid/os/ParcelUuid;)Z
 PLcom/android/server/VcnManagementService;->isProvisioningPackageForConfig(Landroid/os/ParcelUuid;Ljava/lang/String;)Z
-PLcom/android/server/VcnManagementService;->lambda$addVcnUnderlyingNetworkPolicyListener$6(Landroid/net/vcn/IVcnUnderlyingNetworkPolicyListener;)V
+HPLcom/android/server/VcnManagementService;->lambda$addVcnUnderlyingNetworkPolicyListener$6(Landroid/net/vcn/IVcnUnderlyingNetworkPolicyListener;)V
 PLcom/android/server/VcnManagementService;->lambda$clearVcnConfig$5(Landroid/os/ParcelUuid;)V
 PLcom/android/server/VcnManagementService;->lambda$dump$9(Lcom/android/internal/util/IndentingPrintWriter;)V
 PLcom/android/server/VcnManagementService;->lambda$enforceCallingUserAndCarrierPrivilege$1(Ljava/util/List;Landroid/telephony/SubscriptionManager;Landroid/os/ParcelUuid;)V
-HPLcom/android/server/VcnManagementService;->lambda$getUnderlyingNetworkPolicy$8(Landroid/net/NetworkCapabilities;Landroid/net/LinkProperties;)Landroid/net/vcn/VcnUnderlyingNetworkPolicy;
+HPLcom/android/server/VcnManagementService;->lambda$getUnderlyingNetworkPolicy$8(Landroid/net/NetworkCapabilities;Landroid/net/LinkProperties;)Landroid/net/vcn/VcnUnderlyingNetworkPolicy;+]Lcom/android/server/vcn/Vcn;Lcom/android/server/vcn/Vcn;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/net/NetworkCapabilities$Builder;Landroid/net/NetworkCapabilities$Builder;]Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;]Lcom/android/server/VcnManagementService;Lcom/android/server/VcnManagementService;]Ljava/util/Map;Landroid/util/ArrayMap;
 HSPLcom/android/server/VcnManagementService;->lambda$new$0()V
 PLcom/android/server/VcnManagementService;->lambda$notifyAllPermissionedStatusCallbacksLocked$3(Lcom/android/server/VcnManagementService$VcnStatusCallbackInfo;I)V
 PLcom/android/server/VcnManagementService;->lambda$notifyAllPolicyListenersLocked$2(Lcom/android/server/VcnManagementService$PolicyListenerBinderDeath;)V
@@ -3203,11 +3294,11 @@
 PLcom/android/server/VcnManagementService;->lambda$setVcnConfig$4(Landroid/os/ParcelUuid;Landroid/net/vcn/VcnConfig;)V
 PLcom/android/server/VcnManagementService;->logDbg(Ljava/lang/String;)V
 HSPLcom/android/server/VcnManagementService;->logInfo(Ljava/lang/String;)V
-PLcom/android/server/VcnManagementService;->logVdbg(Ljava/lang/String;)V
+HPLcom/android/server/VcnManagementService;->logVdbg(Ljava/lang/String;)V
 PLcom/android/server/VcnManagementService;->notifyAllPermissionedStatusCallbacksLocked(Landroid/os/ParcelUuid;I)V
 PLcom/android/server/VcnManagementService;->notifyAllPolicyListenersLocked()V
 PLcom/android/server/VcnManagementService;->registerVcnStatusCallback(Landroid/os/ParcelUuid;Landroid/net/vcn/IVcnStatusCallback;Ljava/lang/String;)V
-PLcom/android/server/VcnManagementService;->removeVcnUnderlyingNetworkPolicyListener(Landroid/net/vcn/IVcnUnderlyingNetworkPolicyListener;)V
+HPLcom/android/server/VcnManagementService;->removeVcnUnderlyingNetworkPolicyListener(Landroid/net/vcn/IVcnUnderlyingNetworkPolicyListener;)V
 PLcom/android/server/VcnManagementService;->setVcnConfig(Landroid/os/ParcelUuid;Landroid/net/vcn/VcnConfig;Ljava/lang/String;)V
 PLcom/android/server/VcnManagementService;->startOrUpdateVcnLocked(Landroid/os/ParcelUuid;Landroid/net/vcn/VcnConfig;)V
 PLcom/android/server/VcnManagementService;->startVcnLocked(Landroid/os/ParcelUuid;Landroid/net/vcn/VcnConfig;)V
@@ -3217,7 +3308,7 @@
 PLcom/android/server/VcnManagementService;->unregisterVcnStatusCallback(Landroid/net/vcn/IVcnStatusCallback;)V
 PLcom/android/server/VcnManagementService;->writeConfigsToDiskLocked()V
 HSPLcom/android/server/VpnManagerService$1;-><init>(Lcom/android/server/VpnManagerService;)V
-PLcom/android/server/VpnManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/VpnManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/VpnManagerService$2;-><init>(Lcom/android/server/VpnManagerService;)V
 PLcom/android/server/VpnManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/VpnManagerService$Dependencies;-><init>()V
@@ -3226,12 +3317,12 @@
 HSPLcom/android/server/VpnManagerService$Dependencies;->getNetd()Landroid/net/INetd;
 HSPLcom/android/server/VpnManagerService$Dependencies;->getVpnProfileStore()Lcom/android/server/connectivity/VpnProfileStore;
 HSPLcom/android/server/VpnManagerService$Dependencies;->makeHandlerThread()Landroid/os/HandlerThread;
-PLcom/android/server/VpnManagerService;->-$$Nest$mensureRunningOnHandlerThread(Lcom/android/server/VpnManagerService;)V
+HSPLcom/android/server/VpnManagerService;->-$$Nest$mensureRunningOnHandlerThread(Lcom/android/server/VpnManagerService;)V
 PLcom/android/server/VpnManagerService;->-$$Nest$monPackageRemoved(Lcom/android/server/VpnManagerService;Ljava/lang/String;IZ)V
 PLcom/android/server/VpnManagerService;->-$$Nest$monPackageReplaced(Lcom/android/server/VpnManagerService;Ljava/lang/String;I)V
 PLcom/android/server/VpnManagerService;->-$$Nest$monUserAdded(Lcom/android/server/VpnManagerService;I)V
 PLcom/android/server/VpnManagerService;->-$$Nest$monUserRemoved(Lcom/android/server/VpnManagerService;I)V
-PLcom/android/server/VpnManagerService;->-$$Nest$monUserStarted(Lcom/android/server/VpnManagerService;I)V
+HSPLcom/android/server/VpnManagerService;->-$$Nest$monUserStarted(Lcom/android/server/VpnManagerService;I)V
 PLcom/android/server/VpnManagerService;->-$$Nest$monUserStopped(Lcom/android/server/VpnManagerService;I)V
 PLcom/android/server/VpnManagerService;->-$$Nest$monUserUnlocked(Lcom/android/server/VpnManagerService;I)V
 HSPLcom/android/server/VpnManagerService;-><clinit>()V
@@ -3241,9 +3332,9 @@
 PLcom/android/server/VpnManagerService;->enforceControlAlwaysOnVpnPermission()V
 HPLcom/android/server/VpnManagerService;->enforceCrossUserPermission(I)V
 PLcom/android/server/VpnManagerService;->enforceSettingsPermission()V
-PLcom/android/server/VpnManagerService;->ensureRunningOnHandlerThread()V
+HSPLcom/android/server/VpnManagerService;->ensureRunningOnHandlerThread()V
 PLcom/android/server/VpnManagerService;->establishVpn(Lcom/android/internal/net/VpnConfig;)Landroid/os/ParcelFileDescriptor;
-PLcom/android/server/VpnManagerService;->getAlwaysOnVpnPackage(I)Ljava/lang/String;
+HPLcom/android/server/VpnManagerService;->getAlwaysOnVpnPackage(I)Ljava/lang/String;
 PLcom/android/server/VpnManagerService;->getLegacyVpnInfo(I)Lcom/android/internal/net/LegacyVpnInfo;
 HPLcom/android/server/VpnManagerService;->getVpnConfig(I)Lcom/android/internal/net/VpnConfig;
 PLcom/android/server/VpnManagerService;->getVpnIfOwner()Lcom/android/server/connectivity/Vpn;
@@ -3252,6 +3343,7 @@
 PLcom/android/server/VpnManagerService;->isCallerCurrentAlwaysOnVpnApp()Z
 PLcom/android/server/VpnManagerService;->isCallerCurrentAlwaysOnVpnLockdownApp()Z
 HSPLcom/android/server/VpnManagerService;->isLockdownVpnEnabled()Z
+PLcom/android/server/VpnManagerService;->isVpnLockdownEnabled(I)Z
 HSPLcom/android/server/VpnManagerService;->log(Ljava/lang/String;)V
 PLcom/android/server/VpnManagerService;->loge(Ljava/lang/String;)V
 PLcom/android/server/VpnManagerService;->logw(Ljava/lang/String;)V
@@ -3259,11 +3351,12 @@
 PLcom/android/server/VpnManagerService;->onPackageReplaced(Ljava/lang/String;I)V
 PLcom/android/server/VpnManagerService;->onUserAdded(I)V
 PLcom/android/server/VpnManagerService;->onUserRemoved(I)V
-PLcom/android/server/VpnManagerService;->onUserStarted(I)V
+HSPLcom/android/server/VpnManagerService;->onUserStarted(I)V
 PLcom/android/server/VpnManagerService;->onUserStopped(I)V
 PLcom/android/server/VpnManagerService;->onUserUnlocked(I)V
 HPLcom/android/server/VpnManagerService;->prepareVpn(Ljava/lang/String;Ljava/lang/String;I)Z
 HSPLcom/android/server/VpnManagerService;->registerReceivers()V
+PLcom/android/server/VpnManagerService;->setAlwaysOnVpnPackage(ILjava/lang/String;ZLjava/util/List;)Z
 HSPLcom/android/server/VpnManagerService;->setLockdownTracker(Lcom/android/server/net/LockdownVpnTracker;)V
 HPLcom/android/server/VpnManagerService;->setUnderlyingNetworksForVpn([Landroid/net/Network;)Z
 PLcom/android/server/VpnManagerService;->setVpnPackageAuthorization(Ljava/lang/String;II)V
@@ -3317,7 +3410,7 @@
 PLcom/android/server/Watchdog;->logWatchog(ZLjava/lang/String;Ljava/util/ArrayList;)V
 HSPLcom/android/server/Watchdog;->pauseWatchingCurrentThread(Ljava/lang/String;)V
 HSPLcom/android/server/Watchdog;->processDied(Ljava/lang/String;I)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/List;Ljava/util/ArrayList;
-HSPLcom/android/server/Watchdog;->processStarted(Ljava/lang/String;I)V
+HSPLcom/android/server/Watchdog;->processStarted(Ljava/lang/String;I)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLcom/android/server/Watchdog;->registerSettingsObserver(Landroid/content/Context;)V
 HSPLcom/android/server/Watchdog;->resumeWatchingCurrentThread(Ljava/lang/String;)V
 HSPLcom/android/server/Watchdog;->run()V
@@ -3325,10 +3418,10 @@
 HSPLcom/android/server/Watchdog;->start()V
 HSPLcom/android/server/Watchdog;->updateWatchdogTimeout(J)V
 HSPLcom/android/server/WiredAccessoryManager$1;-><init>(Lcom/android/server/WiredAccessoryManager;Landroid/os/Looper;Landroid/os/Handler$Callback;Z)V
-PLcom/android/server/WiredAccessoryManager$1;->handleMessage(Landroid/os/Message;)V
-PLcom/android/server/WiredAccessoryManager$WiredAccessoryExtconObserver;->-$$Nest$minit(Lcom/android/server/WiredAccessoryManager$WiredAccessoryExtconObserver;)V
+HSPLcom/android/server/WiredAccessoryManager$1;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/WiredAccessoryManager$WiredAccessoryExtconObserver;->-$$Nest$minit(Lcom/android/server/WiredAccessoryManager$WiredAccessoryExtconObserver;)V
 HSPLcom/android/server/WiredAccessoryManager$WiredAccessoryExtconObserver;-><init>(Lcom/android/server/WiredAccessoryManager;)V
-PLcom/android/server/WiredAccessoryManager$WiredAccessoryExtconObserver;->init()V
+HSPLcom/android/server/WiredAccessoryManager$WiredAccessoryExtconObserver;->init()V
 PLcom/android/server/WiredAccessoryManager$WiredAccessoryExtconObserver;->parseState(Lcom/android/server/ExtconUEventObserver$ExtconInfo;Ljava/lang/String;)Landroid/util/Pair;
 PLcom/android/server/WiredAccessoryManager$WiredAccessoryExtconObserver;->parseState(Lcom/android/server/ExtconUEventObserver$ExtconInfo;Ljava/lang/String;)Ljava/lang/Object;
 PLcom/android/server/WiredAccessoryManager$WiredAccessoryExtconObserver;->updateState(Lcom/android/server/ExtconUEventObserver$ExtconInfo;Ljava/lang/String;Landroid/util/Pair;)V
@@ -3340,21 +3433,21 @@
 PLcom/android/server/WiredAccessoryManager;->-$$Nest$fgetmHeadsetState(Lcom/android/server/WiredAccessoryManager;)I
 PLcom/android/server/WiredAccessoryManager;->-$$Nest$fgetmLock(Lcom/android/server/WiredAccessoryManager;)Ljava/lang/Object;
 HSPLcom/android/server/WiredAccessoryManager;->-$$Nest$fgetmUseDevInputEventForAudioJack(Lcom/android/server/WiredAccessoryManager;)Z
-PLcom/android/server/WiredAccessoryManager;->-$$Nest$fgetmWakeLock(Lcom/android/server/WiredAccessoryManager;)Landroid/os/PowerManager$WakeLock;
-PLcom/android/server/WiredAccessoryManager;->-$$Nest$monSystemReady(Lcom/android/server/WiredAccessoryManager;)V
+HSPLcom/android/server/WiredAccessoryManager;->-$$Nest$fgetmWakeLock(Lcom/android/server/WiredAccessoryManager;)Landroid/os/PowerManager$WakeLock;
+HSPLcom/android/server/WiredAccessoryManager;->-$$Nest$monSystemReady(Lcom/android/server/WiredAccessoryManager;)V
 PLcom/android/server/WiredAccessoryManager;->-$$Nest$msetDevicesState(Lcom/android/server/WiredAccessoryManager;IILjava/lang/String;)V
 PLcom/android/server/WiredAccessoryManager;->-$$Nest$mupdateLocked(Lcom/android/server/WiredAccessoryManager;Ljava/lang/String;I)V
 HSPLcom/android/server/WiredAccessoryManager;->-$$Nest$sfgetTAG()Ljava/lang/String;
 PLcom/android/server/WiredAccessoryManager;->-$$Nest$smupdateBit([IILjava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/WiredAccessoryManager;-><clinit>()V
 HSPLcom/android/server/WiredAccessoryManager;-><init>(Landroid/content/Context;Lcom/android/server/input/InputManagerService;)V
-PLcom/android/server/WiredAccessoryManager;->notifyWiredAccessoryChanged(JII)V
-PLcom/android/server/WiredAccessoryManager;->onSystemReady()V
+HSPLcom/android/server/WiredAccessoryManager;->notifyWiredAccessoryChanged(JII)V
+HSPLcom/android/server/WiredAccessoryManager;->onSystemReady()V
 PLcom/android/server/WiredAccessoryManager;->setDeviceStateLocked(IIILjava/lang/String;)V
 PLcom/android/server/WiredAccessoryManager;->setDevicesState(IILjava/lang/String;)V
 HSPLcom/android/server/WiredAccessoryManager;->systemReady()V
 PLcom/android/server/WiredAccessoryManager;->updateBit([IILjava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/WiredAccessoryManager;->updateLocked(Ljava/lang/String;I)V
+HSPLcom/android/server/WiredAccessoryManager;->updateLocked(Ljava/lang/String;I)V
 PLcom/android/server/ZramWriteback$1;-><init>(Lcom/android/server/ZramWriteback;Ljava/lang/String;Landroid/app/job/JobParameters;)V
 PLcom/android/server/ZramWriteback$1;->run()V
 PLcom/android/server/ZramWriteback;->-$$Nest$mmarkAndFlushPages(Lcom/android/server/ZramWriteback;)V
@@ -3370,6 +3463,8 @@
 PLcom/android/server/ZramWriteback;->onStopJob(Landroid/app/job/JobParameters;)Z
 PLcom/android/server/ZramWriteback;->schedNextWriteback(Landroid/content/Context;)V
 HSPLcom/android/server/ZramWriteback;->scheduleZramWriteback(Landroid/content/Context;)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;ILandroid/os/RemoteCallback;)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection$1;-><init>(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;Landroid/os/Looper;)V
 HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection$1;->handleMessage(Landroid/os/Message;)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection$InvocationHandler;-><init>(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;Landroid/os/Looper;)V
@@ -3380,10 +3475,12 @@
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection$InvocationHandler;->notifyMagnificationChangedLocked(ILandroid/graphics/Region;Landroid/accessibilityservice/MagnificationConfig;)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection$InvocationHandler;->notifySoftKeyboardShowModeChangedLocked(I)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection$InvocationHandler;->setMagnificationCallbackEnabled(IZ)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->$r8$lambda$JX9S5EsLuTAYOG8cMdfsnKjNsrA(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;ILandroid/os/RemoteCallback;Ljava/lang/Object;)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->-$$Nest$mnotifyAccessibilityButtonAvailabilityChangedInternal(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;Z)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->-$$Nest$mnotifyAccessibilityButtonClickedInternal(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;I)V
 HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->-$$Nest$mnotifyAccessibilityEventInternal(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;ILandroid/view/accessibility/AccessibilityEvent;Z)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->-$$Nest$mnotifyClearAccessibilityCacheInternal(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->-$$Nest$mnotifyGestureInternal(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;Landroid/accessibilityservice/AccessibilityGestureEvent;)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->-$$Nest$mnotifyMagnificationChangedInternal(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;ILandroid/graphics/Region;Landroid/accessibilityservice/MagnificationConfig;)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->-$$Nest$mnotifySystemActionsChangedInternal(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;-><init>(Landroid/content/Context;Landroid/content/ComponentName;Landroid/accessibilityservice/AccessibilityServiceInfo;ILandroid/os/Handler;Ljava/lang/Object;Lcom/android/server/accessibility/AccessibilitySecurityPolicy;Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection$SystemSupport;Landroid/accessibilityservice/AccessibilityTrace;Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/accessibility/SystemActionPerformer;Lcom/android/server/accessibility/AccessibilityWindowManager;)V
@@ -3391,6 +3488,7 @@
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->ensureWindowsAvailableTimedLocked(I)V
 HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->findAccessibilityNodeInfoByAccessibilityId(IJILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;IJLandroid/os/Bundle;)[Ljava/lang/String;+]Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;Lcom/android/server/accessibility/AccessibilityServiceConnection;,Lcom/android/server/accessibility/UiAutomationManager$UiAutomationService;]Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection$SystemSupport;Lcom/android/server/accessibility/AccessibilityManagerService;]Landroid/graphics/Region;Landroid/graphics/Region;]Lcom/android/server/accessibility/AccessibilitySecurityPolicy;Lcom/android/server/accessibility/AccessibilitySecurityPolicy;]Lcom/android/server/accessibility/AccessibilityWindowManager$RemoteAccessibilityConnection;Lcom/android/server/accessibility/AccessibilityWindowManager$RemoteAccessibilityConnection;]Landroid/view/accessibility/IAccessibilityInteractionConnection;Landroid/view/accessibility/IAccessibilityInteractionConnection$Stub$Proxy;,Landroid/view/ViewRootImpl$AccessibilityInteractionConnection;]Lcom/android/server/accessibility/AccessibilityWindowManager;Lcom/android/server/accessibility/AccessibilityWindowManager;
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->findAccessibilityNodeInfosByViewId(IJLjava/lang/String;ILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;J)[Ljava/lang/String;
 HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->findFocus(IJIILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;J)[Ljava/lang/String;
 HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->getAttributionTag()Ljava/lang/String;
 HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->getCapabilities()I+]Landroid/accessibilityservice/AccessibilityServiceInfo;Landroid/accessibilityservice/AccessibilityServiceInfo;
@@ -3399,18 +3497,20 @@
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->getOverlayWindowToken(I)Landroid/os/IBinder;
 HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->getRelevantEventTypes()I
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->getServiceInfo()Landroid/accessibilityservice/AccessibilityServiceInfo;
-PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->getServiceInterfaceSafely()Landroid/accessibilityservice/IAccessibilityServiceClient;
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->getServiceInterfaceSafely()Landroid/accessibilityservice/IAccessibilityServiceClient;
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->getSystemActions()Ljava/util/List;
 HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->getWindow(I)Landroid/view/accessibility/AccessibilityWindowInfo;
-HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->getWindowTransformationMatrixAndMagnificationSpec(I)Landroid/util/Pair;
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->getWindowTransformationMatrixAndMagnificationSpec(I)Landroid/util/Pair;+]Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection$SystemSupport;Lcom/android/server/accessibility/AccessibilityManagerService;
 HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->getWindows()Landroid/view/accessibility/AccessibilityWindowInfo$WindowListSparseArray;
-HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->getWindowsByDisplayLocked(I)Ljava/util/List;
-HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->intConnTracingEnabled()Z
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->getWindowsByDisplayLocked(I)Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/view/accessibility/AccessibilityWindowInfo;Landroid/view/accessibility/AccessibilityWindowInfo;]Lcom/android/server/accessibility/AccessibilityWindowManager;Lcom/android/server/accessibility/AccessibilityWindowManager;
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->intConnTracingEnabled()Z+]Landroid/accessibilityservice/AccessibilityTrace;Lcom/android/server/accessibility/AccessibilityTraceManager;
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->isConnectedLocked()Z
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->isMagnificationCallbackEnabled(I)Z
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->isMultiFingerGesturesEnabled()Z
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->isSendMotionEventsEnabled()Z
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->isServiceHandlesDoubleTapEnabled()Z
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->isTwoFingerPassthroughEnabled()Z
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->lambda$takeScreenshot$0(ILandroid/os/RemoteCallback;Ljava/lang/Object;)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->notifyAccessibilityButtonAvailabilityChangedInternal(Z)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->notifyAccessibilityButtonAvailabilityChangedLocked(Z)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->notifyAccessibilityButtonClickedInternal(I)V
@@ -3419,6 +3519,8 @@
 HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->notifyAccessibilityEventInternal(ILandroid/view/accessibility/AccessibilityEvent;Z)V+]Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;Lcom/android/server/accessibility/AccessibilityServiceConnection;]Landroid/accessibilityservice/IAccessibilityServiceClient;Landroid/accessibilityservice/IAccessibilityServiceClient$Stub$Proxy;]Landroid/view/accessibility/AccessibilityEvent;Landroid/view/accessibility/AccessibilityEvent;]Lcom/android/server/accessibility/AccessibilitySecurityPolicy;Lcom/android/server/accessibility/AccessibilitySecurityPolicy;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->notifyClearAccessibilityCacheInternal()V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->notifyClearAccessibilityNodeInfoCache()V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->notifyGesture(Landroid/accessibilityservice/AccessibilityGestureEvent;)V
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->notifyGestureInternal(Landroid/accessibilityservice/AccessibilityGestureEvent;)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->notifyMagnificationChangedInternal(ILandroid/graphics/Region;Landroid/accessibilityservice/MagnificationConfig;)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->notifyMagnificationChangedLocked(ILandroid/graphics/Region;Landroid/accessibilityservice/MagnificationConfig;)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->notifySoftKeyboardShowModeChangedLocked(I)V
@@ -3430,27 +3532,29 @@
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->onDoubleTap(I)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->onKeyEvent(Landroid/view/KeyEvent;I)Z
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->onRemoved()V
-PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->performAccessibilityAction(IJILandroid/os/Bundle;ILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;J)Z
-PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->performAccessibilityActionInternal(IIJILandroid/os/Bundle;ILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;IJ)Z
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->performAccessibilityAction(IJILandroid/os/Bundle;ILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;J)Z
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->performAccessibilityActionInternal(IIJILandroid/os/Bundle;ILandroid/view/accessibility/IAccessibilityInteractionConnectionCallback;IJ)Z
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->performGlobalAction(I)Z
 HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->replaceCallbackIfNeeded(Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback;IIIJ)Landroid/view/accessibility/IAccessibilityInteractionConnectionCallback;+]Landroid/view/accessibility/AccessibilityWindowInfo;Landroid/view/accessibility/AccessibilityWindowInfo;]Lcom/android/server/accessibility/AccessibilityWindowManager;Lcom/android/server/accessibility/AccessibilityWindowManager;
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->requestDelegating(I)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->requestDragging(II)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->requestTouchExploration(I)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->resetLocked()V
-PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->resolveAccessibilityWindowIdForFindFocusLocked(II)I
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->resolveAccessibilityWindowIdForFindFocusLocked(II)I
 HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->resolveAccessibilityWindowIdLocked(I)I
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->sendScreenshotSuccess(Landroid/view/SurfaceControl$ScreenshotHardwareBuffer;Landroid/os/RemoteCallback;)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->setAnimationScale(F)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->setAttributionTag(Ljava/lang/String;)V
-PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->setDynamicallyConfigurableProperties(Landroid/accessibilityservice/AccessibilityServiceInfo;)V
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->setDynamicallyConfigurableProperties(Landroid/accessibilityservice/AccessibilityServiceInfo;)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->setMagnificationCallbackEnabled(IZ)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->setOnKeyEventResult(ZI)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->setServiceDetectsGesturesEnabled(IZ)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->setServiceInfo(Landroid/accessibilityservice/AccessibilityServiceInfo;)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->setTouchExplorationPassthroughRegion(ILandroid/graphics/Region;)V
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->supportsFlagForNotImportantViews(Landroid/accessibilityservice/AccessibilityServiceInfo;)Z
-HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->svcClientTracingEnabled()Z
+HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->svcClientTracingEnabled()Z+]Landroid/accessibilityservice/AccessibilityTrace;Lcom/android/server/accessibility/AccessibilityTraceManager;
 HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->svcConnTracingEnabled()Z+]Landroid/accessibilityservice/AccessibilityTrace;Lcom/android/server/accessibility/AccessibilityTraceManager;
+PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->takeScreenshot(ILandroid/os/RemoteCallback;)V
 HPLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->wantsEventLocked(Landroid/view/accessibility/AccessibilityEvent;)Z+]Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;Lcom/android/server/accessibility/AccessibilityServiceConnection;]Landroid/view/accessibility/AccessibilityEvent;Landroid/view/accessibility/AccessibilityEvent;]Ljava/lang/CharSequence;Ljava/lang/String;]Ljava/util/Set;Ljava/util/HashSet;
 PLcom/android/server/accessibility/AbstractAccessibilityServiceConnection;->wmTracingEnabled()Z
 PLcom/android/server/accessibility/AccessibilityInputFilter$EventStreamState;-><init>()V
@@ -3482,7 +3586,7 @@
 PLcom/android/server/accessibility/AccessibilityInputFilter;->enableFeaturesForDisplay(Landroid/view/Display;)V
 HPLcom/android/server/accessibility/AccessibilityInputFilter;->getEventStreamState(Landroid/view/InputEvent;)Lcom/android/server/accessibility/AccessibilityInputFilter$EventStreamState;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/view/InputEvent;Landroid/view/KeyEvent;,Landroid/view/MotionEvent;
 PLcom/android/server/accessibility/AccessibilityInputFilter;->getNext()Lcom/android/server/accessibility/EventStreamTransformation;
-HPLcom/android/server/accessibility/AccessibilityInputFilter;->handleMotionEvent(Landroid/view/MotionEvent;I)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/accessibility/AccessibilityInputFilter;Lcom/android/server/accessibility/AccessibilityInputFilter;]Landroid/os/PowerManager;Landroid/os/PowerManager;]Lcom/android/server/accessibility/EventStreamTransformation;Lcom/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler;,Lcom/android/server/accessibility/magnification/WindowMagnificationGestureHandler;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
+HPLcom/android/server/accessibility/AccessibilityInputFilter;->handleMotionEvent(Landroid/view/MotionEvent;I)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/accessibility/AccessibilityInputFilter;Lcom/android/server/accessibility/AccessibilityInputFilter;]Landroid/os/PowerManager;Landroid/os/PowerManager;]Lcom/android/server/accessibility/EventStreamTransformation;Lcom/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler;,Lcom/android/server/accessibility/KeyboardInterceptor;,Lcom/android/server/accessibility/magnification/WindowMagnificationGestureHandler;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 HPLcom/android/server/accessibility/AccessibilityInputFilter;->isDisplayIdValid(I)Z
 PLcom/android/server/accessibility/AccessibilityInputFilter;->notifyAccessibilityButtonClicked(I)V
 HPLcom/android/server/accessibility/AccessibilityInputFilter;->notifyAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/accessibility/EventStreamTransformation;Lcom/android/server/accessibility/KeyboardInterceptor;
@@ -3497,7 +3601,7 @@
 PLcom/android/server/accessibility/AccessibilityInputFilter;->onUninstalled()V
 PLcom/android/server/accessibility/AccessibilityInputFilter;->processKeyEvent(Lcom/android/server/accessibility/AccessibilityInputFilter$EventStreamState;Landroid/view/KeyEvent;I)V
 HPLcom/android/server/accessibility/AccessibilityInputFilter;->processMotionEvent(Lcom/android/server/accessibility/AccessibilityInputFilter$EventStreamState;Landroid/view/MotionEvent;I)V+]Lcom/android/server/accessibility/AccessibilityInputFilter$EventStreamState;Lcom/android/server/accessibility/AccessibilityInputFilter$TouchScreenEventStreamState;]Lcom/android/server/accessibility/AccessibilityInputFilter;Lcom/android/server/accessibility/AccessibilityInputFilter;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
-PLcom/android/server/accessibility/AccessibilityInputFilter;->refreshMagnificationMode(Landroid/view/Display;)V
+HPLcom/android/server/accessibility/AccessibilityInputFilter;->refreshMagnificationMode(Landroid/view/Display;)V
 PLcom/android/server/accessibility/AccessibilityInputFilter;->requestDelegating(I)V
 PLcom/android/server/accessibility/AccessibilityInputFilter;->requestDragging(II)V
 PLcom/android/server/accessibility/AccessibilityInputFilter;->requestTouchExploration(I)V
@@ -3521,55 +3625,58 @@
 PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda21;->accept(Ljava/lang/Object;)V
 PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda22;-><init>()V
 PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda22;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda23;-><init>(Ljava/lang/String;Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda23;-><init>(Ljava/lang/String;Lcom/android/server/accessibility/AccessibilityUserState;)V
 PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda23;->test(Ljava/lang/Object;)Z
-PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda24;-><init>(Ljava/lang/String;Lcom/android/server/accessibility/AccessibilityUserState;Ljava/util/Set;Ljava/util/Set;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda24;-><init>(Ljava/lang/String;Lcom/android/server/accessibility/AccessibilityUserState;Ljava/util/Set;Ljava/util/Set;)V
 PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda24;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda26;-><init>()V
 HPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda26;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda27;-><init>(Lcom/android/server/accessibility/AccessibilityUserState;)V
 PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda27;->test(Ljava/lang/Object;)Z
 PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda28;-><init>()V
-PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda30;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;)V
-PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda30;->onResult(IZ)V
-PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda31;-><init>()V
-PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda31;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda28;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda30;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda30;->onResult(IZ)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda31;-><init>()V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda31;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda32;-><init>()V
 HPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda32;->accept(Ljava/lang/Object;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda33;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda33;->run()V
-PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda34;-><init>()V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda33;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda33;->run()V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda34;-><init>()V
 PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda34;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-HPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda35;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda35;->run()V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda35;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda35;->run()V
 PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda36;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;I)V
 PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda36;->run()V
-PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda37;-><init>()V
-PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda37;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda38;-><init>()V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda37;-><init>()V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda37;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda38;-><init>()V
 HPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda38;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda39;-><init>()V
-HPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda39;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda39;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V+]Ljava/lang/Boolean;Ljava/lang/Boolean;
 HPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda3;-><init>()V
 HPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda41;-><init>(Lcom/android/server/accessibility/AccessibilityUserState;)V
 HPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda41;->test(Ljava/lang/Object;)Z
-PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda43;-><init>()V
-PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda43;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda44;-><init>(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda44;->acceptOrThrow(Ljava/lang/Object;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda42;-><init>()V
+PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda42;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda43;-><init>()V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda43;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda44;-><init>(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda44;->acceptOrThrow(Ljava/lang/Object;)V
 HPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda45;-><init>()V
 HPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda45;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityManagerService;
 PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda46;-><init>(J)V
 PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda46;->acceptOrThrow(Ljava/lang/Object;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda49;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda49;->acceptOrThrow(Ljava/lang/Object;)V
-PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda50;-><init>(I)V
-PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda50;->acceptOrThrow(Ljava/lang/Object;)V
-PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda51;-><init>()V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda49;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda49;->acceptOrThrow(Ljava/lang/Object;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda50;-><init>(I)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda50;->acceptOrThrow(Ljava/lang/Object;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda51;-><init>()V
 PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda51;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda53;-><init>()V
-HPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda53;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda53;-><init>()V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda53;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda5;-><init>()V
 PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda5;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda6;-><init>()V
@@ -3590,29 +3697,30 @@
 HSPLcom/android/server/accessibility/AccessibilityManagerService$1;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;)V
 PLcom/android/server/accessibility/AccessibilityManagerService$1;->lambda$onPackageRemoved$2(Ljava/lang/String;Landroid/content/ComponentName;)Z
 PLcom/android/server/accessibility/AccessibilityManagerService$1;->lambda$onPackageUpdateFinished$1(Ljava/lang/String;Landroid/content/ComponentName;)Z
-PLcom/android/server/accessibility/AccessibilityManagerService$1;->onHandleForceStop(Landroid/content/Intent;[Ljava/lang/String;IZ)Z
-PLcom/android/server/accessibility/AccessibilityManagerService$1;->onPackageRemoved(Ljava/lang/String;I)V
+HPLcom/android/server/accessibility/AccessibilityManagerService$1;->onHandleForceStop(Landroid/content/Intent;[Ljava/lang/String;IZ)Z
+HPLcom/android/server/accessibility/AccessibilityManagerService$1;->onPackageRemoved(Ljava/lang/String;I)V
 HPLcom/android/server/accessibility/AccessibilityManagerService$1;->onPackageUpdateFinished(Ljava/lang/String;I)V
 HPLcom/android/server/accessibility/AccessibilityManagerService$1;->onSomePackagesChanged()V
 HSPLcom/android/server/accessibility/AccessibilityManagerService$2;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/accessibility/AccessibilityManagerService$3;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;)V
 HSPLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityContentObserver;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;Landroid/os/Handler;)V
 PLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityContentObserver;->onChange(ZLandroid/net/Uri;)V
 HSPLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityContentObserver;->register(Landroid/content/ContentResolver;)V
 HSPLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityDisplayListener;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;Landroid/content/Context;Lcom/android/server/accessibility/AccessibilityManagerService$MainHandler;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityDisplayListener;->getValidDisplayList()Ljava/util/ArrayList;
+HSPLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityDisplayListener;->getValidDisplayList()Ljava/util/ArrayList;
 HSPLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityDisplayListener;->initializeDisplayList()V
 HSPLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityDisplayListener;->isValidDisplay(Landroid/view/Display;)Z
-PLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityDisplayListener;->onDisplayAdded(I)V
-PLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityDisplayListener;->onDisplayChanged(I)V
+HPLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityDisplayListener;->onDisplayAdded(I)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityDisplayListener;->onDisplayChanged(I)V
 PLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityDisplayListener;->onDisplayRemoved(I)V
-PLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityDisplayListener;->removeDisplayFromList(I)Z
+HPLcom/android/server/accessibility/AccessibilityManagerService$AccessibilityDisplayListener;->removeDisplayFromList(I)Z
 HSPLcom/android/server/accessibility/AccessibilityManagerService$Client;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;Landroid/view/accessibility/IAccessibilityManagerClient;ILcom/android/server/accessibility/AccessibilityUserState;)V
 HSPLcom/android/server/accessibility/AccessibilityManagerService$Client;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;Landroid/view/accessibility/IAccessibilityManagerClient;ILcom/android/server/accessibility/AccessibilityUserState;Lcom/android/server/accessibility/AccessibilityManagerService$Client-IA;)V
 PLcom/android/server/accessibility/AccessibilityManagerService$InteractionBridge$1;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService$InteractionBridge;Lcom/android/server/accessibility/AccessibilityUserState;Landroid/content/Context;Landroid/content/ComponentName;Landroid/accessibilityservice/AccessibilityServiceInfo;ILandroid/os/Handler;Ljava/lang/Object;Lcom/android/server/accessibility/AccessibilitySecurityPolicy;Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection$SystemSupport;Landroid/accessibilityservice/AccessibilityTrace;Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/accessibility/SystemActionPerformer;Lcom/android/server/accessibility/AccessibilityWindowManager;Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/accessibility/AccessibilityManagerService;)V
 PLcom/android/server/accessibility/AccessibilityManagerService$InteractionBridge$1;->supportsFlagForNotImportantViews(Landroid/accessibilityservice/AccessibilityServiceInfo;)Z
 PLcom/android/server/accessibility/AccessibilityManagerService$InteractionBridge;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;)V
+PLcom/android/server/accessibility/AccessibilityManagerService$InteractionBridge;->getAccessibilityFocusClickPointInScreenNotLocked(Landroid/graphics/Point;)Z
 PLcom/android/server/accessibility/AccessibilityManagerService$InteractionBridge;->getAccessibilityFocusNotLocked()Landroid/view/accessibility/AccessibilityNodeInfo;
 PLcom/android/server/accessibility/AccessibilityManagerService$InteractionBridge;->getAccessibilityFocusNotLocked(I)Landroid/view/accessibility/AccessibilityNodeInfo;
 PLcom/android/server/accessibility/AccessibilityManagerService$InteractionBridge;->performActionOnAccessibilityFocusedItemNotLocked(Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;)Z
@@ -3625,44 +3733,46 @@
 HPLcom/android/server/accessibility/AccessibilityManagerService$LocalServiceImpl;->startInput(Lcom/android/internal/inputmethod/IRemoteAccessibilityInputConnection;Landroid/view/inputmethod/EditorInfo;Z)V
 PLcom/android/server/accessibility/AccessibilityManagerService$LocalServiceImpl;->unbindInput()V
 HSPLcom/android/server/accessibility/AccessibilityManagerService$MainHandler;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;Landroid/os/Looper;)V
-PLcom/android/server/accessibility/AccessibilityManagerService$MainHandler;->handleMessage(Landroid/os/Message;)V
-PLcom/android/server/accessibility/AccessibilityManagerService$SendWindowStateChangedEventRunnable;->-$$Nest$mgetWindowId(Lcom/android/server/accessibility/AccessibilityManagerService$SendWindowStateChangedEventRunnable;)I
-PLcom/android/server/accessibility/AccessibilityManagerService$SendWindowStateChangedEventRunnable;->-$$Nest$msendPendingEventLocked(Lcom/android/server/accessibility/AccessibilityManagerService$SendWindowStateChangedEventRunnable;)V
+HPLcom/android/server/accessibility/AccessibilityManagerService$MainHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/accessibility/AccessibilityManagerService$SendWindowStateChangedEventRunnable;->-$$Nest$mgetWindowId(Lcom/android/server/accessibility/AccessibilityManagerService$SendWindowStateChangedEventRunnable;)I
+HPLcom/android/server/accessibility/AccessibilityManagerService$SendWindowStateChangedEventRunnable;->-$$Nest$msendPendingEventLocked(Lcom/android/server/accessibility/AccessibilityManagerService$SendWindowStateChangedEventRunnable;)V
 HPLcom/android/server/accessibility/AccessibilityManagerService$SendWindowStateChangedEventRunnable;-><init>(Lcom/android/server/accessibility/AccessibilityManagerService;Landroid/view/accessibility/AccessibilityEvent;)V
-PLcom/android/server/accessibility/AccessibilityManagerService$SendWindowStateChangedEventRunnable;->getWindowId()I
+HPLcom/android/server/accessibility/AccessibilityManagerService$SendWindowStateChangedEventRunnable;->getWindowId()I
 HPLcom/android/server/accessibility/AccessibilityManagerService$SendWindowStateChangedEventRunnable;->run()V
 HPLcom/android/server/accessibility/AccessibilityManagerService$SendWindowStateChangedEventRunnable;->sendPendingEventLocked()V
+PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$-_NWSMTDWJX-NKsIxOcjS_riI90(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$3shZZuM0BAjtbqtfio98ut83Tpg(Ljava/lang/String;)Landroid/content/ComponentName;
 PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$5e-gjskGFvOKqXQT-XRFbWKaOBg(Lcom/android/server/accessibility/AccessibilityManagerService;Landroid/os/RemoteCallbackList;J)V
 HPLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$9e10GLBNMx9Pu36nGitZK9F7mt4(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/internal/inputmethod/IRemoteAccessibilityInputConnection;Landroid/view/inputmethod/EditorInfo;Z)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$AMpcEQ909mdMcrNkxda8pHd7WN8(Lcom/android/server/accessibility/AccessibilityManagerService;I)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$AVXjUInSbI3Q3J_0C4y8f60_AgU(Lcom/android/server/accessibility/AccessibilityManagerService;II)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$AtBbabX5fpi88BBUX_VynVeJhKE(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$AtBbabX5fpi88BBUX_VynVeJhKE(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$Brk8AhkiXqWvpmQvMbwmr8Ek4FM(Landroid/content/ComponentName;)Ljava/lang/String;
 HPLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$BvinDUj28r6jV35YiZTLPSNK1cs(Lcom/android/server/accessibility/AccessibilityManagerService;Landroid/util/ArraySet;)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$CzouAxSbdNW44Wfb6GE899qa4pg(Lcom/android/server/accessibility/AccessibilityManagerService;)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$DgyLfEh8JL3yTmMuHdCuN34kBUc(Lcom/android/server/accessibility/AccessibilityManagerService;ILandroid/graphics/Region;)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$FNeV_7Oj75Gd7axsHa_us2eJgac(Lcom/android/server/accessibility/AccessibilityManagerService;I)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$G0JDG4FV_I4CtKNAgl09NnY4R0E(Lcom/android/server/accessibility/AccessibilityManagerService;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$IxlC3new_x7gT3ncWLB3bT_55Rs(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$KgwNZ1LVaFhWj8dQm6GmwlaUShk(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;Lcom/android/server/accessibility/AccessibilityManagerService$Client;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$LmOxaMHc81JyAfNHmH0tBFPcCIQ(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$MxXBqadMWIuODnNNQrgTFzE-oUk(Lcom/android/server/accessibility/AccessibilityUserState;Lcom/android/server/accessibility/AccessibilityManagerService$Client;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$REko452jm6o0w2BoKEXStHdyrYw(Lcom/android/server/accessibility/AccessibilityManagerService;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$SFTjVGJHKW2KU2l6L4VxXgW2yh4(Lcom/android/server/accessibility/AccessibilityManagerService;II)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$IxlC3new_x7gT3ncWLB3bT_55Rs(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$KgwNZ1LVaFhWj8dQm6GmwlaUShk(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;Lcom/android/server/accessibility/AccessibilityManagerService$Client;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$LmOxaMHc81JyAfNHmH0tBFPcCIQ(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$MxXBqadMWIuODnNNQrgTFzE-oUk(Lcom/android/server/accessibility/AccessibilityUserState;Lcom/android/server/accessibility/AccessibilityManagerService$Client;)V
+HPLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$REko452jm6o0w2BoKEXStHdyrYw(Lcom/android/server/accessibility/AccessibilityManagerService;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$SFTjVGJHKW2KU2l6L4VxXgW2yh4(Lcom/android/server/accessibility/AccessibilityManagerService;II)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$SPmrxw0O0THbPyqdFWMkbSlq5Sw(Lcom/android/server/accessibility/AccessibilityManagerService;I)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$TZ5DQQsI53RhOzfDxhY0-dD5eKM(Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$VI0vpqFpJRKDwx4TR1lngDPXqoU(Lcom/android/server/accessibility/AccessibilityManagerService;I)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$VI0vpqFpJRKDwx4TR1lngDPXqoU(Lcom/android/server/accessibility/AccessibilityManagerService;I)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$Wq7hRcbt-c18HFdZggDsbS5b9J4(Lcom/android/server/accessibility/AccessibilityManagerService;IZ)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$Y-LrNdCKUT-JVShbmpjHlr0bVKY(Lcom/android/server/accessibility/AccessibilityManagerService;IILjava/lang/String;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$YOqZRJvSlYYVx6ce6EhSygK32bI(ILandroid/view/accessibility/IAccessibilityManagerClient;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$YOqZRJvSlYYVx6ce6EhSygK32bI(ILandroid/view/accessibility/IAccessibilityManagerClient;)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$_Jl7WksShaLjN79Mrz8QhLAEONw(Lcom/android/server/accessibility/AccessibilityUserState;Ljava/lang/String;)Z
 PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$cXUmTWGXoc6Y4Wk63o-pokcuO0A(Lcom/android/server/accessibility/AccessibilityManagerService;I)V
 HPLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$dQLjz-d1JCBiIehw-V154G8Ey8w(Lcom/android/server/accessibility/AccessibilityManagerService;Landroid/view/accessibility/AccessibilityEvent;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$exAtbmA_6HyJQZLDrLxLm49GYlM(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$exAtbmA_6HyJQZLDrLxLm49GYlM(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$fM11ynPWK0iAVedvrZkMEA7sbxI(Lcom/android/server/accessibility/AccessibilityUserState;Ljava/lang/String;)Z
 PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$g8fkizxAF21XacUqYOZi1UPIa9c(Lcom/android/server/accessibility/AccessibilityManagerService;II)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$iKD2o3dZZg4CGhkBERZd_DNdKDE(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$ikjZg2-MAt_mITh3eosEJrnnGko(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$oa4AA9cNda68-fhAssM-vplo6vU(Ljava/lang/String;Lcom/android/server/accessibility/AccessibilityUserState;Ljava/util/Set;Ljava/util/Set;Landroid/content/ComponentName;)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$prCrJr1HHTfwv4b7O9js6gkd4hw(JLandroid/view/accessibility/IAccessibilityManagerClient;)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->$r8$lambda$xwPzO_Y8yqFTndliRmMGfACCuj4(Ljava/lang/String;Lcom/android/server/accessibility/AccessibilityUserState;Ljava/lang/String;)Z
@@ -3678,7 +3788,10 @@
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->-$$Nest$fgetmPackageManager(Lcom/android/server/accessibility/AccessibilityManagerService;)Landroid/content/pm/PackageManager;
 PLcom/android/server/accessibility/AccessibilityManagerService;->-$$Nest$fgetmSecurityPolicy(Lcom/android/server/accessibility/AccessibilityManagerService;)Lcom/android/server/accessibility/AccessibilitySecurityPolicy;
 HPLcom/android/server/accessibility/AccessibilityManagerService;->-$$Nest$fgetmSendWindowStateChangedEventRunnables(Lcom/android/server/accessibility/AccessibilityManagerService;)Ljava/util/List;
-HPLcom/android/server/accessibility/AccessibilityManagerService;->-$$Nest$fgetmTraceManager(Lcom/android/server/accessibility/AccessibilityManagerService;)Lcom/android/server/accessibility/AccessibilityTraceManager;
+PLcom/android/server/accessibility/AccessibilityManagerService;->-$$Nest$fgetmTempPoint(Lcom/android/server/accessibility/AccessibilityManagerService;)Landroid/graphics/Point;
+PLcom/android/server/accessibility/AccessibilityManagerService;->-$$Nest$fgetmTempRect(Lcom/android/server/accessibility/AccessibilityManagerService;)Landroid/graphics/Rect;
+PLcom/android/server/accessibility/AccessibilityManagerService;->-$$Nest$fgetmTempRect1(Lcom/android/server/accessibility/AccessibilityManagerService;)Landroid/graphics/Rect;
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->-$$Nest$fgetmTraceManager(Lcom/android/server/accessibility/AccessibilityManagerService;)Lcom/android/server/accessibility/AccessibilityTraceManager;
 PLcom/android/server/accessibility/AccessibilityManagerService;->-$$Nest$fgetmWindowManagerService(Lcom/android/server/accessibility/AccessibilityManagerService;)Lcom/android/server/wm/WindowManagerInternal;
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->-$$Nest$mcomputeRelevantEventTypesLocked(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;Lcom/android/server/accessibility/AccessibilityManagerService$Client;)I
 HPLcom/android/server/accessibility/AccessibilityManagerService;->-$$Nest$mdispatchAccessibilityEventLocked(Lcom/android/server/accessibility/AccessibilityManagerService;Landroid/view/accessibility/AccessibilityEvent;)V
@@ -3694,11 +3807,13 @@
 PLcom/android/server/accessibility/AccessibilityManagerService;->-$$Nest$mreadConfigurationForUserStateLocked(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)Z
 PLcom/android/server/accessibility/AccessibilityManagerService;->-$$Nest$mreadEnabledAccessibilityServicesLocked(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)Z
 PLcom/android/server/accessibility/AccessibilityManagerService;->-$$Nest$mreadHighTextContrastEnabledSettingLocked(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;->-$$Nest$mreadMagnificationCapabilitiesLocked(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;->-$$Nest$mreadMagnificationEnabledSettingsLocked(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)Z
 PLcom/android/server/accessibility/AccessibilityManagerService;->-$$Nest$mreadMagnificationModeForDefaultDisplayLocked(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)Z
 PLcom/android/server/accessibility/AccessibilityManagerService;->-$$Nest$mreadTouchExplorationEnabledSettingLocked(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)Z
 PLcom/android/server/accessibility/AccessibilityManagerService;->-$$Nest$mreadTouchExplorationGrantedAccessibilityServicesLocked(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)Z
 PLcom/android/server/accessibility/AccessibilityManagerService;->-$$Nest$mremoveUser(Lcom/android/server/accessibility/AccessibilityManagerService;I)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->-$$Nest$mswitchUser(Lcom/android/server/accessibility/AccessibilityManagerService;I)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->-$$Nest$mswitchUser(Lcom/android/server/accessibility/AccessibilityManagerService;I)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->-$$Nest$munlockUser(Lcom/android/server/accessibility/AccessibilityManagerService;I)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->-$$Nest$mupdateMagnificationLocked(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->-$$Nest$mupdateMagnificationModeChangeSettingsLocked(Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityUserState;I)V
@@ -3707,29 +3822,31 @@
 PLcom/android/server/accessibility/AccessibilityManagerService;->-$$Nest$sfputsIdCounter(I)V
 HSPLcom/android/server/accessibility/AccessibilityManagerService;-><clinit>()V
 HSPLcom/android/server/accessibility/AccessibilityManagerService;-><init>(Landroid/content/Context;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->accessibilityFocusOnlyInActiveWindow()Z
 HPLcom/android/server/accessibility/AccessibilityManagerService;->addAccessibilityInteractionConnection(Landroid/view/IWindow;Landroid/os/IBinder;Landroid/view/accessibility/IAccessibilityInteractionConnection;Ljava/lang/String;I)I
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->addClient(Landroid/view/accessibility/IAccessibilityManagerClient;I)J
 PLcom/android/server/accessibility/AccessibilityManagerService;->announceNewUserIfNeeded()V
 PLcom/android/server/accessibility/AccessibilityManagerService;->associateEmbeddedHierarchy(Landroid/os/IBinder;Landroid/os/IBinder;)V
 HPLcom/android/server/accessibility/AccessibilityManagerService;->bindInput()V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->broadcastToClients(Lcom/android/server/accessibility/AccessibilityUserState;Ljava/util/function/Consumer;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->broadcastToClients(Lcom/android/server/accessibility/AccessibilityUserState;Ljava/util/function/Consumer;)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->canRequestAndRequestsTouchExplorationLocked(Lcom/android/server/accessibility/AccessibilityServiceConnection;Lcom/android/server/accessibility/AccessibilityUserState;)Z
 PLcom/android/server/accessibility/AccessibilityManagerService;->changeMagnificationMode(II)V
-HSPLcom/android/server/accessibility/AccessibilityManagerService;->computeRelevantEventTypesLocked(Lcom/android/server/accessibility/AccessibilityUserState;Lcom/android/server/accessibility/AccessibilityManagerService$Client;)I+]Lcom/android/server/accessibility/UiAutomationManager;Lcom/android/server/accessibility/UiAutomationManager;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;Lcom/android/server/accessibility/AccessibilityServiceConnection;]Lcom/android/server/accessibility/AccessibilityServiceConnection;Lcom/android/server/accessibility/AccessibilityServiceConnection;
-HPLcom/android/server/accessibility/AccessibilityManagerService;->createImeSession(Landroid/util/ArraySet;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->computeRelevantEventTypesLocked(Lcom/android/server/accessibility/AccessibilityUserState;Lcom/android/server/accessibility/AccessibilityManagerService$Client;)I+]Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;Lcom/android/server/accessibility/AccessibilityServiceConnection;]Lcom/android/server/accessibility/UiAutomationManager;Lcom/android/server/accessibility/UiAutomationManager;]Lcom/android/server/accessibility/AccessibilityServiceConnection;Lcom/android/server/accessibility/AccessibilityServiceConnection;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/accessibility/AccessibilityManagerService;->createImeSession(Landroid/util/ArraySet;)V+]Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 PLcom/android/server/accessibility/AccessibilityManagerService;->disableAccessibilityServiceLocked(Landroid/content/ComponentName;I)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->disassociateEmbeddedHierarchy(Landroid/os/IBinder;)V
 HPLcom/android/server/accessibility/AccessibilityManagerService;->dispatchAccessibilityEventLocked(Landroid/view/accessibility/AccessibilityEvent;)V+]Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityManagerService;]Lcom/android/server/accessibility/UiAutomationManager;Lcom/android/server/accessibility/UiAutomationManager;
 PLcom/android/server/accessibility/AccessibilityManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->enableAccessibilityServiceLocked(Landroid/content/ComponentName;I)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->fallBackMagnificationModeSettingsLocked(Lcom/android/server/accessibility/AccessibilityUserState;I)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->fallBackMagnificationModeSettingsLocked(Lcom/android/server/accessibility/AccessibilityUserState;I)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;->getAccessibilityFocusClickPointInScreen(Landroid/graphics/Point;)Z
 HPLcom/android/server/accessibility/AccessibilityManagerService;->getAccessibilityShortcutTargets(I)Ljava/util/List;
 HPLcom/android/server/accessibility/AccessibilityManagerService;->getAccessibilityShortcutTargetsInternal(I)Ljava/util/List;
 PLcom/android/server/accessibility/AccessibilityManagerService;->getActiveWindowId()I
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->getClientStateLocked(Lcom/android/server/accessibility/AccessibilityUserState;)I
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->getCurrentUserIdLocked()I
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->getCurrentUserStateLocked()Lcom/android/server/accessibility/AccessibilityUserState;+]Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityManagerService;
-HSPLcom/android/server/accessibility/AccessibilityManagerService;->getEnabledAccessibilityServiceList(II)Ljava/util/List;+]Lcom/android/server/accessibility/AccessibilitySecurityPolicy;Lcom/android/server/accessibility/AccessibilitySecurityPolicy;]Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityManagerService;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/accessibility/AccessibilityServiceConnection;Lcom/android/server/accessibility/AccessibilityServiceConnection;]Lcom/android/server/accessibility/UiAutomationManager;Lcom/android/server/accessibility/UiAutomationManager;]Lcom/android/server/accessibility/AccessibilityTraceManager;Lcom/android/server/accessibility/AccessibilityTraceManager;
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->getEnabledAccessibilityServiceList(II)Ljava/util/List;+]Lcom/android/server/accessibility/AccessibilitySecurityPolicy;Lcom/android/server/accessibility/AccessibilitySecurityPolicy;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityManagerService;]Lcom/android/server/accessibility/UiAutomationManager;Lcom/android/server/accessibility/UiAutomationManager;]Lcom/android/server/accessibility/AccessibilityTraceManager;Lcom/android/server/accessibility/AccessibilityTraceManager;]Lcom/android/server/accessibility/AccessibilityServiceConnection;Lcom/android/server/accessibility/AccessibilityServiceConnection;
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->getFocusColor()I
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->getFocusStrokeWidth()I
 HPLcom/android/server/accessibility/AccessibilityManagerService;->getInstalledAccessibilityServiceList(I)Ljava/util/List;+]Landroid/accessibilityservice/AccessibilityServiceInfo;Landroid/accessibilityservice/AccessibilityServiceInfo;]Lcom/android/server/accessibility/AccessibilitySecurityPolicy;Lcom/android/server/accessibility/AccessibilitySecurityPolicy;]Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityManagerService;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/accessibility/AccessibilityTraceManager;Lcom/android/server/accessibility/AccessibilityTraceManager;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
@@ -3742,12 +3859,14 @@
 PLcom/android/server/accessibility/AccessibilityManagerService;->getPendingIntentActivity(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->getRecommendedTimeoutMillis()J
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->getRecommendedTimeoutMillisLocked(Lcom/android/server/accessibility/AccessibilityUserState;)J
-HPLcom/android/server/accessibility/AccessibilityManagerService;->getSystemActionPerformer()Lcom/android/server/accessibility/SystemActionPerformer;
-HPLcom/android/server/accessibility/AccessibilityManagerService;->getTraceManager()Lcom/android/server/accessibility/AccessibilityTraceManager;
-PLcom/android/server/accessibility/AccessibilityManagerService;->getUserState(I)Lcom/android/server/accessibility/AccessibilityUserState;
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->getSystemActionPerformer()Lcom/android/server/accessibility/SystemActionPerformer;
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->getTraceManager()Lcom/android/server/accessibility/AccessibilityTraceManager;
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->getUserState(I)Lcom/android/server/accessibility/AccessibilityUserState;
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->getUserStateLocked(I)Lcom/android/server/accessibility/AccessibilityUserState;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HPLcom/android/server/accessibility/AccessibilityManagerService;->getValidDisplayList()Ljava/util/ArrayList;
-HPLcom/android/server/accessibility/AccessibilityManagerService;->getWindowMagnificationMgr()Lcom/android/server/accessibility/magnification/WindowMagnificationManager;
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->getValidDisplayList()Ljava/util/ArrayList;
+PLcom/android/server/accessibility/AccessibilityManagerService;->getWindowBounds(ILandroid/graphics/Rect;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->getWindowMagnificationMgr()Lcom/android/server/accessibility/magnification/WindowMagnificationManager;
+PLcom/android/server/accessibility/AccessibilityManagerService;->getWindowToken(II)Landroid/os/IBinder;
 HPLcom/android/server/accessibility/AccessibilityManagerService;->getWindowTransformationMatrixAndMagnificationSpec(I)Landroid/util/Pair;+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/wm/WindowManagerService$LocalService;]Lcom/android/server/accessibility/AccessibilityWindowManager;Lcom/android/server/accessibility/AccessibilityWindowManager;]Landroid/view/MagnificationSpec;Landroid/view/MagnificationSpec;
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->init()V
 PLcom/android/server/accessibility/AccessibilityManagerService;->interrupt(I)V
@@ -3762,35 +3881,39 @@
 PLcom/android/server/accessibility/AccessibilityManagerService;->lambda$readAccessibilityButtonTargetsLocked$13(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/accessibility/AccessibilityManagerService;->lambda$readAccessibilityShortcutKeySettingLocked$12(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/accessibility/AccessibilityManagerService;->lambda$readComponentNamesFromSettingLocked$7(Ljava/lang/String;)Landroid/content/ComponentName;
-PLcom/android/server/accessibility/AccessibilityManagerService;->lambda$sendStateToClients$10(ILandroid/view/accessibility/IAccessibilityManagerClient;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->lambda$sendStateToClients$10(ILandroid/view/accessibility/IAccessibilityManagerClient;)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->lambda$updateAccessibilityButtonTargetsLocked$16(Lcom/android/server/accessibility/AccessibilityUserState;Ljava/lang/String;)Z
+PLcom/android/server/accessibility/AccessibilityManagerService;->lambda$updateAccessibilityButtonTargetsLocked$17(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/accessibility/AccessibilityManagerService;->lambda$updateAccessibilityShortcutKeyTargetsLocked$14(Lcom/android/server/accessibility/AccessibilityUserState;Ljava/lang/String;)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->lambda$updateFocusAppearanceDataLocked$24(Lcom/android/server/accessibility/AccessibilityUserState;Lcom/android/server/accessibility/AccessibilityManagerService$Client;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->lambda$updateFocusAppearanceDataLocked$25(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->lambda$updateRelevantEventsLocked$5(Lcom/android/server/accessibility/AccessibilityUserState;Lcom/android/server/accessibility/AccessibilityManagerService$Client;)V+]Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityManagerService;
-HPLcom/android/server/accessibility/AccessibilityManagerService;->lambda$updateRelevantEventsLocked$6(Lcom/android/server/accessibility/AccessibilityUserState;)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->lambda$updateAccessibilityShortcutKeyTargetsLocked$15(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->lambda$updateFocusAppearanceDataLocked$24(Lcom/android/server/accessibility/AccessibilityUserState;Lcom/android/server/accessibility/AccessibilityManagerService$Client;)V+]Landroid/view/accessibility/IAccessibilityManagerClient;Landroid/view/accessibility/IAccessibilityManagerClient$Stub$Proxy;,Landroid/view/accessibility/AccessibilityManager$1;]Lcom/android/server/accessibility/AccessibilityUserState;Lcom/android/server/accessibility/AccessibilityUserState;
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->lambda$updateFocusAppearanceDataLocked$25(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->lambda$updateRelevantEventsLocked$5(Lcom/android/server/accessibility/AccessibilityUserState;Lcom/android/server/accessibility/AccessibilityManagerService$Client;)V+]Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityManagerService;
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->lambda$updateRelevantEventsLocked$6(Lcom/android/server/accessibility/AccessibilityUserState;)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->launchShortcutTargetActivity(ILandroid/content/ComponentName;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->migrateAccessibilityButtonSettingsIfNecessaryLocked(Lcom/android/server/accessibility/AccessibilityUserState;Ljava/lang/String;I)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->migrateAccessibilityButtonSettingsIfNecessaryLocked(Lcom/android/server/accessibility/AccessibilityUserState;Ljava/lang/String;I)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->notifyAccessibilityButtonClicked(ILjava/lang/String;)V
 HPLcom/android/server/accessibility/AccessibilityManagerService;->notifyAccessibilityServicesDelayedLocked(Landroid/view/accessibility/AccessibilityEvent;Z)V+]Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;Lcom/android/server/accessibility/AccessibilityServiceConnection;]Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/accessibility/AccessibilityManagerService;->notifyClearAccessibilityCacheLocked()V
 PLcom/android/server/accessibility/AccessibilityManagerService;->notifyClientsOfServicesStateChange(Landroid/os/RemoteCallbackList;J)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->notifyGestureLocked(Landroid/accessibilityservice/AccessibilityGestureEvent;Z)Z
 PLcom/android/server/accessibility/AccessibilityManagerService;->notifyKeyEvent(Landroid/view/KeyEvent;I)Z
 HPLcom/android/server/accessibility/AccessibilityManagerService;->notifyMagnificationChanged(ILandroid/graphics/Region;Landroid/accessibilityservice/MagnificationConfig;)V
 HPLcom/android/server/accessibility/AccessibilityManagerService;->notifyMagnificationChangedLocked(ILandroid/graphics/Region;Landroid/accessibilityservice/MagnificationConfig;)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->notifyRefreshMagnificationModeToInputFilter(I)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->notifySystemActionsChangedLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->notifyRefreshMagnificationModeToInputFilter(I)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->notifySystemActionsChangedLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->onBootPhase(I)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->onClientChangeLocked(Z)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->onDoubleTap(I)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->onDoubleTapInternal(I)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->onMagnificationTransitionEndedLocked(IZ)V
+PLcom/android/server/accessibility/AccessibilityManagerService;->onGesture(Landroid/accessibilityservice/AccessibilityGestureEvent;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->onMagnificationTransitionEndedLocked(IZ)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->onServiceInfoChangedLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->onSystemActionsChanged()V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->onSystemActionsChanged()V
 PLcom/android/server/accessibility/AccessibilityManagerService;->onTouchInteractionEnd()V
 PLcom/android/server/accessibility/AccessibilityManagerService;->onTouchInteractionStart()V
 PLcom/android/server/accessibility/AccessibilityManagerService;->onTouchStateChanged(II)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->onUserStateChangedLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->onUserStateChangedLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->performAccessibilityFrameworkFeature(Landroid/content/ComponentName;I)Z
 PLcom/android/server/accessibility/AccessibilityManagerService;->performAccessibilityShortcut(Ljava/lang/String;)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->performAccessibilityShortcutInternal(IILjava/lang/String;)V
@@ -3801,28 +3924,28 @@
 PLcom/android/server/accessibility/AccessibilityManagerService;->persistComponentNamesToSettingLocked(Ljava/lang/String;Ljava/util/Set;I)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->persistMagnificationModeSettingsLocked(I)V
 HPLcom/android/server/accessibility/AccessibilityManagerService;->postponeWindowStateEvent(Landroid/view/accessibility/AccessibilityEvent;)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readAccessibilityButtonTargetComponentLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readAccessibilityButtonTargetsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readAccessibilityShortcutKeySettingLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readAudioDescriptionEnabledSettingLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readAutoclickEnabledSettingLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readColonDelimitedSettingToSet(Ljava/lang/String;ILjava/util/function/Function;Ljava/util/Set;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readColonDelimitedStringToSet(Ljava/lang/String;Ljava/util/function/Function;Ljava/util/Set;Z)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readComponentNamesFromSettingLocked(Ljava/lang/String;ILjava/util/Set;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readConfigurationForUserStateLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readEnabledAccessibilityServicesLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readHighTextContrastEnabledSettingLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readInstalledAccessibilityServiceLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readInstalledAccessibilityShortcutLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readMagnificationCapabilitiesLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readMagnificationEnabledSettingsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readMagnificationFollowTypingLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readMagnificationModeForDefaultDisplayLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readTouchExplorationEnabledSettingLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readTouchExplorationGrantedAccessibilityServicesLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->readUserRecommendedUiTimeoutSettingsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readAccessibilityButtonTargetComponentLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readAccessibilityButtonTargetsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readAccessibilityShortcutKeySettingLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readAudioDescriptionEnabledSettingLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readAutoclickEnabledSettingLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readColonDelimitedSettingToSet(Ljava/lang/String;ILjava/util/function/Function;Ljava/util/Set;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readColonDelimitedStringToSet(Ljava/lang/String;Ljava/util/function/Function;Ljava/util/Set;Z)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readComponentNamesFromSettingLocked(Ljava/lang/String;ILjava/util/Set;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readConfigurationForUserStateLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readEnabledAccessibilityServicesLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readHighTextContrastEnabledSettingLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readInstalledAccessibilityServiceLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readInstalledAccessibilityShortcutLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readMagnificationCapabilitiesLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readMagnificationEnabledSettingsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readMagnificationFollowTypingLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readMagnificationModeForDefaultDisplayLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readTouchExplorationEnabledSettingLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readTouchExplorationGrantedAccessibilityServicesLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->readUserRecommendedUiTimeoutSettingsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->registerBroadcastReceivers()V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->registerSystemAction(Landroid/app/RemoteAction;I)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->registerSystemAction(Landroid/app/RemoteAction;I)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->registerUiTestAutomationService(Landroid/os/IBinder;Landroid/accessibilityservice/IAccessibilityServiceClient;Landroid/accessibilityservice/AccessibilityServiceInfo;I)V
 HPLcom/android/server/accessibility/AccessibilityManagerService;->removeAccessibilityInteractionConnection(Landroid/view/IWindow;)V
 HPLcom/android/server/accessibility/AccessibilityManagerService;->removeClient(Landroid/view/accessibility/IAccessibilityManagerClient;I)Z
@@ -3838,24 +3961,24 @@
 HPLcom/android/server/accessibility/AccessibilityManagerService;->scheduleCreateImeSession(Landroid/util/ArraySet;)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->scheduleNotifyClientsOfServicesStateChangeLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
 HPLcom/android/server/accessibility/AccessibilityManagerService;->scheduleNotifyMotionEvent(Landroid/view/MotionEvent;)Z
-PLcom/android/server/accessibility/AccessibilityManagerService;->scheduleNotifyTouchState(II)Z
+HPLcom/android/server/accessibility/AccessibilityManagerService;->scheduleNotifyTouchState(II)Z
 HPLcom/android/server/accessibility/AccessibilityManagerService;->scheduleStartInput(Lcom/android/internal/inputmethod/IRemoteAccessibilityInputConnection;Landroid/view/inputmethod/EditorInfo;Z)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->scheduleUnbindInput()V
-PLcom/android/server/accessibility/AccessibilityManagerService;->scheduleUpdateClientsIfNeededLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->scheduleUpdateFingerprintGestureHandling(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->scheduleUpdateInputFilter(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->scheduleUpdateClientsIfNeededLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->scheduleUpdateFingerprintGestureHandling(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->scheduleUpdateInputFilter(Lcom/android/server/accessibility/AccessibilityUserState;)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->sendAccessibilityButtonToInputFilter(I)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->sendAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;I)V+]Landroid/view/accessibility/AccessibilityEvent;Landroid/view/accessibility/AccessibilityEvent;]Lcom/android/server/accessibility/AccessibilitySecurityPolicy;Lcom/android/server/accessibility/AccessibilitySecurityPolicy;]Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityManagerService;]Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/wm/WindowManagerService$LocalService;]Lcom/android/server/accessibility/AccessibilityTraceManager;Lcom/android/server/accessibility/AccessibilityTraceManager;]Lcom/android/server/accessibility/AccessibilityWindowManager;Lcom/android/server/accessibility/AccessibilityWindowManager;]Landroid/os/Handler;Lcom/android/server/accessibility/AccessibilityManagerService$MainHandler;]Lcom/android/server/accessibility/UiAutomationManager;Lcom/android/server/accessibility/UiAutomationManager;
+HPLcom/android/server/accessibility/AccessibilityManagerService;->sendAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;I)V+]Landroid/os/Handler;Lcom/android/server/accessibility/AccessibilityManagerService$MainHandler;]Landroid/view/accessibility/AccessibilityEvent;Landroid/view/accessibility/AccessibilityEvent;]Lcom/android/server/accessibility/AccessibilitySecurityPolicy;Lcom/android/server/accessibility/AccessibilitySecurityPolicy;]Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityManagerService;]Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/wm/WindowManagerService$LocalService;]Lcom/android/server/accessibility/AccessibilityTraceManager;Lcom/android/server/accessibility/AccessibilityTraceManager;]Lcom/android/server/accessibility/AccessibilityWindowManager;Lcom/android/server/accessibility/AccessibilityWindowManager;]Lcom/android/server/accessibility/UiAutomationManager;Lcom/android/server/accessibility/UiAutomationManager;
 HPLcom/android/server/accessibility/AccessibilityManagerService;->sendAccessibilityEventForCurrentUserLocked(Landroid/view/accessibility/AccessibilityEvent;)V
 HPLcom/android/server/accessibility/AccessibilityManagerService;->sendAccessibilityEventLocked(Landroid/view/accessibility/AccessibilityEvent;I)V
 HPLcom/android/server/accessibility/AccessibilityManagerService;->sendAccessibilityEventToInputFilter(Landroid/view/accessibility/AccessibilityEvent;)V+]Landroid/view/accessibility/AccessibilityEvent;Landroid/view/accessibility/AccessibilityEvent;]Lcom/android/server/accessibility/AccessibilityInputFilter;Lcom/android/server/accessibility/AccessibilityInputFilter;
 PLcom/android/server/accessibility/AccessibilityManagerService;->sendFingerprintGesture(I)Z
-PLcom/android/server/accessibility/AccessibilityManagerService;->sendMotionEventToListeningServices(Landroid/view/MotionEvent;)Z
+HPLcom/android/server/accessibility/AccessibilityManagerService;->sendMotionEventToListeningServices(Landroid/view/MotionEvent;)Z
 HPLcom/android/server/accessibility/AccessibilityManagerService;->sendPendingWindowStateChangedEventsForAvailableWindowLocked(I)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->sendServicesStateChanged(Landroid/os/RemoteCallbackList;J)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->sendStateToAllClients(II)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->sendStateToClients(II)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->sendStateToClients(ILandroid/os/RemoteCallbackList;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->sendStateToAllClients(II)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->sendStateToClients(II)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->sendStateToClients(ILandroid/os/RemoteCallbackList;)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->setMotionEventInjectors(Landroid/util/SparseArray;)V
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->setNonA11yToolNotificationToMatchSafetyCenter()V
 HSPLcom/android/server/accessibility/AccessibilityManagerService;->setPictureInPictureActionReplacingConnection(Landroid/view/accessibility/IAccessibilityInteractionConnection;)V
@@ -3866,58 +3989,59 @@
 PLcom/android/server/accessibility/AccessibilityManagerService;->setTouchExplorationPassthroughRegion(ILandroid/graphics/Region;)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->setTouchExplorationPassthroughRegionInternal(ILandroid/graphics/Region;)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->setWindowMagnificationConnection(Landroid/view/accessibility/IWindowMagnificationConnection;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->startInput(Lcom/android/internal/inputmethod/IRemoteAccessibilityInputConnection;Landroid/view/inputmethod/EditorInfo;Z)V
-PLcom/android/server/accessibility/AccessibilityManagerService;->switchUser(I)V
+HPLcom/android/server/accessibility/AccessibilityManagerService;->startInput(Lcom/android/internal/inputmethod/IRemoteAccessibilityInputConnection;Landroid/view/inputmethod/EditorInfo;Z)V+]Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/AccessibilityManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->switchUser(I)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->unbindInput()V
 PLcom/android/server/accessibility/AccessibilityManagerService;->unlockUser(I)V
 HPLcom/android/server/accessibility/AccessibilityManagerService;->unregisterSystemAction(I)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->unregisterUiTestAutomationService(Landroid/accessibilityservice/IAccessibilityServiceClient;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->updateAccessibilityButtonTargetsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->updateAccessibilityEnabledSettingLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->updateAccessibilityShortcutKeyTargetsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->updateFilterKeyEventsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->updateFingerprintGestureHandling(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->updateFocusAppearanceDataLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->updateInputFilter(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->updateLegacyCapabilitiesLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->updateMagnificationCapabilitiesSettingsChangeLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->updateMagnificationLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->updateMagnificationModeChangeSettingsForAllDisplaysLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->updateMagnificationModeChangeSettingsLocked(Lcom/android/server/accessibility/AccessibilityUserState;I)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->updatePerformGesturesLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateAccessibilityButtonTargetsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateAccessibilityEnabledSettingLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateAccessibilityShortcutKeyTargetsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateFilterKeyEventsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateFingerprintGestureHandling(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateFocusAppearanceDataLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateInputFilter(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateLegacyCapabilitiesLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateMagnificationCapabilitiesSettingsChangeLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateMagnificationLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateMagnificationModeChangeSettingsForAllDisplaysLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateMagnificationModeChangeSettingsLocked(Lcom/android/server/accessibility/AccessibilityUserState;I)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updatePerformGesturesLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
 PLcom/android/server/accessibility/AccessibilityManagerService;->updateRecommendedUiTimeoutLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->updateRelevantEventsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->updateServicesLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->updateTouchExplorationLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->updateWindowMagnificationConnectionIfNeeded(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->updateWindowsForAccessibilityCallbackLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
-HPLcom/android/server/accessibility/AccessibilityManagerService;->userHasListeningMagnificationServicesLocked(Lcom/android/server/accessibility/AccessibilityUserState;I)Z
-HPLcom/android/server/accessibility/AccessibilityManagerService;->userHasMagnificationServicesLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateRelevantEventsLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateServicesLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateTouchExplorationLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateWindowMagnificationConnectionIfNeeded(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->updateWindowsForAccessibilityCallbackLocked(Lcom/android/server/accessibility/AccessibilityUserState;)V
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->userHasListeningMagnificationServicesLocked(Lcom/android/server/accessibility/AccessibilityUserState;I)Z
+HSPLcom/android/server/accessibility/AccessibilityManagerService;->userHasMagnificationServicesLocked(Lcom/android/server/accessibility/AccessibilityUserState;)Z
 HSPLcom/android/server/accessibility/AccessibilitySecurityPolicy;-><clinit>()V
 HSPLcom/android/server/accessibility/AccessibilitySecurityPolicy;-><init>(Lcom/android/server/accessibility/PolicyWarningUIController;Landroid/content/Context;Lcom/android/server/accessibility/AccessibilitySecurityPolicy$AccessibilityUserManager;)V
 PLcom/android/server/accessibility/AccessibilitySecurityPolicy;->canCaptureFingerprintGestures(Lcom/android/server/accessibility/AccessibilityServiceConnection;)Z
 PLcom/android/server/accessibility/AccessibilitySecurityPolicy;->canControlMagnification(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;)Z
 HPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->canDispatchAccessibilityEventLocked(ILandroid/view/accessibility/AccessibilityEvent;)Z+]Landroid/view/accessibility/AccessibilityEvent;Landroid/view/accessibility/AccessibilityEvent;]Lcom/android/server/accessibility/AccessibilitySecurityPolicy;Lcom/android/server/accessibility/AccessibilitySecurityPolicy;
-HPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->canGetAccessibilityNodeInfoLocked(ILcom/android/server/accessibility/AbstractAccessibilityServiceConnection;I)Z
+HPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->canGetAccessibilityNodeInfoLocked(ILcom/android/server/accessibility/AbstractAccessibilityServiceConnection;I)Z+]Lcom/android/server/accessibility/AccessibilitySecurityPolicy;Lcom/android/server/accessibility/AccessibilitySecurityPolicy;
 PLcom/android/server/accessibility/AccessibilitySecurityPolicy;->canPerformGestures(Lcom/android/server/accessibility/AccessibilityServiceConnection;)Z
-HPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->canRegisterService(Landroid/content/pm/ServiceInfo;)Z
-HPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->canRetrieveWindowContentLocked(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;)Z+]Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;Lcom/android/server/accessibility/AccessibilityServiceConnection;,Lcom/android/server/accessibility/UiAutomationManager$UiAutomationService;
+HSPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->canRegisterService(Landroid/content/pm/ServiceInfo;)Z
+HPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->canRetrieveWindowContentLocked(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;)Z+]Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;Lcom/android/server/accessibility/AccessibilityServiceConnection;,Lcom/android/server/accessibility/UiAutomationManager$UiAutomationService;,Lcom/android/server/accessibility/AccessibilityManagerService$InteractionBridge$1;
 HPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->canRetrieveWindowsLocked(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;)Z
-HPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->checkAccessibilityAccess(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;)Z+]Landroid/accessibilityservice/AccessibilityServiceInfo;Landroid/accessibilityservice/AccessibilityServiceInfo;]Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;Lcom/android/server/accessibility/AccessibilityServiceConnection;,Lcom/android/server/accessibility/UiAutomationManager$UiAutomationService;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
+PLcom/android/server/accessibility/AccessibilitySecurityPolicy;->canTakeScreenshotLocked(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;)Z
+HPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->checkAccessibilityAccess(Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;)Z+]Landroid/accessibilityservice/AccessibilityServiceInfo;Landroid/accessibilityservice/AccessibilityServiceInfo;]Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;Lcom/android/server/accessibility/AccessibilityServiceConnection;,Lcom/android/server/accessibility/UiAutomationManager$UiAutomationService;,Lcom/android/server/accessibility/AccessibilityManagerService$InteractionBridge$1;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
 HPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->computeValidReportedPackages(Ljava/lang/String;I)[Ljava/lang/String;+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/appwidget/AppWidgetManagerInternal;Lcom/android/server/appwidget/AppWidgetServiceImpl$AppWidgetManagerLocal;
-HPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->enforceCallingOrSelfPermission(Ljava/lang/String;)V
+HSPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->enforceCallingOrSelfPermission(Ljava/lang/String;)V
 HSPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->enforceCallingPermission(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->hasPermission(Ljava/lang/String;)Z
 HSPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->isCallerInteractingAcrossUsers(I)Z
-HPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->isRetrievalAllowingWindowLocked(II)Z+]Lcom/android/server/accessibility/AccessibilitySecurityPolicy;Lcom/android/server/accessibility/AccessibilitySecurityPolicy;]Lcom/android/server/accessibility/AccessibilityWindowManager;Lcom/android/server/accessibility/AccessibilityWindowManager;
+HPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->isRetrievalAllowingWindowLocked(II)Z+]Lcom/android/server/accessibility/AccessibilityWindowManager;Lcom/android/server/accessibility/AccessibilityWindowManager;]Lcom/android/server/accessibility/AccessibilitySecurityPolicy;Lcom/android/server/accessibility/AccessibilitySecurityPolicy;
 PLcom/android/server/accessibility/AccessibilitySecurityPolicy;->isShellAllowedToRetrieveWindowLocked(II)Z
 HPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->isValidPackageForUid(Ljava/lang/String;I)Z+]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
 PLcom/android/server/accessibility/AccessibilitySecurityPolicy;->onBoundServicesChangedLocked(ILjava/util/ArrayList;)V
 PLcom/android/server/accessibility/AccessibilitySecurityPolicy;->onEnabledServicesChangedLocked(ILjava/util/Set;)V
-PLcom/android/server/accessibility/AccessibilitySecurityPolicy;->onSwitchUserLocked(ILjava/util/Set;)V
+HSPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->onSwitchUserLocked(ILjava/util/Set;)V
 HSPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->resolveCallingUserIdEnforcingPermissionsLocked(I)I+]Lcom/android/server/accessibility/AccessibilitySecurityPolicy$AccessibilityUserManager;Lcom/android/server/accessibility/AccessibilityManagerService;]Lcom/android/server/accessibility/AccessibilitySecurityPolicy;Lcom/android/server/accessibility/AccessibilitySecurityPolicy;
 HSPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->resolveProfileParentLocked(I)I+]Lcom/android/server/accessibility/AccessibilitySecurityPolicy$AccessibilityUserManager;Lcom/android/server/accessibility/AccessibilityManagerService;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Landroid/os/UserManager;Landroid/os/UserManager;
-HPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->resolveValidReportedPackageLocked(Ljava/lang/CharSequence;III)Ljava/lang/String;+]Lcom/android/server/accessibility/AccessibilitySecurityPolicy;Lcom/android/server/accessibility/AccessibilitySecurityPolicy;]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/appwidget/AppWidgetManagerInternal;Lcom/android/server/appwidget/AppWidgetServiceImpl$AppWidgetManagerLocal;
+HPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->resolveValidReportedPackageLocked(Ljava/lang/CharSequence;III)Ljava/lang/String;+]Lcom/android/server/accessibility/AccessibilitySecurityPolicy;Lcom/android/server/accessibility/AccessibilitySecurityPolicy;]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/appwidget/AppWidgetManagerInternal;Lcom/android/server/appwidget/AppWidgetServiceImpl$AppWidgetManagerLocal;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
 HSPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->setAccessibilityWindowManager(Lcom/android/server/accessibility/AccessibilityWindowManager;)V
 HSPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->setAppWidgetManager(Landroid/appwidget/AppWidgetManagerInternal;)V
 HSPLcom/android/server/accessibility/AccessibilitySecurityPolicy;->setSendingNonA11yToolNotificationLocked(Z)V
@@ -3925,7 +4049,7 @@
 PLcom/android/server/accessibility/AccessibilityServiceConnection$$ExternalSyntheticLambda0;-><init>()V
 PLcom/android/server/accessibility/AccessibilityServiceConnection$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
 PLcom/android/server/accessibility/AccessibilityServiceConnection$$ExternalSyntheticLambda1;-><init>()V
-PLcom/android/server/accessibility/AccessibilityServiceConnection$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/accessibility/AccessibilityServiceConnection$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/accessibility/AccessibilityServiceConnection$$ExternalSyntheticLambda2;-><init>()V
 HPLcom/android/server/accessibility/AccessibilityServiceConnection$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/accessibility/AccessibilityServiceConnection;->$r8$lambda$S_t9lIIKpegfX2zSt7xbJPTnBMo(Lcom/android/server/accessibility/AccessibilityServiceConnection;)V
@@ -3944,8 +4068,10 @@
 PLcom/android/server/accessibility/AccessibilityServiceConnection;->isCapturingFingerprintGestures()Z
 HPLcom/android/server/accessibility/AccessibilityServiceConnection;->notifyMotionEvent(Landroid/view/MotionEvent;)V
 HPLcom/android/server/accessibility/AccessibilityServiceConnection;->notifyMotionEventInternal(Landroid/view/MotionEvent;)V
-PLcom/android/server/accessibility/AccessibilityServiceConnection;->notifyTouchState(II)V
+HPLcom/android/server/accessibility/AccessibilityServiceConnection;->notifyTouchState(II)V
 PLcom/android/server/accessibility/AccessibilityServiceConnection;->notifyTouchStateInternal(II)V
+PLcom/android/server/accessibility/AccessibilityServiceConnection;->onFingerprintGesture(I)V
+PLcom/android/server/accessibility/AccessibilityServiceConnection;->onFingerprintGestureDetectionActiveChanged(Z)V
 PLcom/android/server/accessibility/AccessibilityServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 PLcom/android/server/accessibility/AccessibilityServiceConnection;->onServiceDisconnected(Landroid/content/ComponentName;)V
 HPLcom/android/server/accessibility/AccessibilityServiceConnection;->requestImeApis()Z
@@ -3956,76 +4082,83 @@
 HSPLcom/android/server/accessibility/AccessibilityTraceManager;-><init>(Lcom/android/server/wm/WindowManagerInternal$AccessibilityControllerInternal;Lcom/android/server/accessibility/AccessibilityManagerService;Ljava/lang/Object;)V
 HSPLcom/android/server/accessibility/AccessibilityTraceManager;->getInstance(Lcom/android/server/wm/WindowManagerInternal$AccessibilityControllerInternal;Lcom/android/server/accessibility/AccessibilityManagerService;Ljava/lang/Object;)Lcom/android/server/accessibility/AccessibilityTraceManager;
 HSPLcom/android/server/accessibility/AccessibilityTraceManager;->getTraceStateForAccessibilityManagerClientState()I
-PLcom/android/server/accessibility/AccessibilityTraceManager;->isA11yTracingEnabled()Z
+HPLcom/android/server/accessibility/AccessibilityTraceManager;->isA11yTracingEnabled()Z
 HSPLcom/android/server/accessibility/AccessibilityTraceManager;->isA11yTracingEnabledForTypes(J)Z
+PLcom/android/server/accessibility/AccessibilityUserState$$ExternalSyntheticLambda0;-><init>(Landroid/content/ComponentName;)V
+PLcom/android/server/accessibility/AccessibilityUserState$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
+PLcom/android/server/accessibility/AccessibilityUserState;->$r8$lambda$_XkBoubKqkCs1YeUhOg_UPjXotM(Landroid/content/ComponentName;Ljava/lang/String;)Z
 HSPLcom/android/server/accessibility/AccessibilityUserState;-><clinit>()V
 HSPLcom/android/server/accessibility/AccessibilityUserState;-><init>(ILandroid/content/Context;Lcom/android/server/accessibility/AccessibilityUserState$ServiceInfoChangeListener;)V
 PLcom/android/server/accessibility/AccessibilityUserState;->addServiceLocked(Lcom/android/server/accessibility/AccessibilityServiceConnection;)V
 PLcom/android/server/accessibility/AccessibilityUserState;->doesShortcutTargetsStringContain(Ljava/util/Collection;Ljava/lang/String;)Z
 PLcom/android/server/accessibility/AccessibilityUserState;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/accessibility/AccessibilityUserState;->getBindInstantServiceAllowedLocked()Z
-PLcom/android/server/accessibility/AccessibilityUserState;->getBindingServicesLocked()Ljava/util/Set;
+HSPLcom/android/server/accessibility/AccessibilityUserState;->getBindInstantServiceAllowedLocked()Z
+HSPLcom/android/server/accessibility/AccessibilityUserState;->getBindingServicesLocked()Ljava/util/Set;
 HSPLcom/android/server/accessibility/AccessibilityUserState;->getClientStateLocked(ZI)I
-PLcom/android/server/accessibility/AccessibilityUserState;->getCrashedServicesLocked()Ljava/util/Set;
+HSPLcom/android/server/accessibility/AccessibilityUserState;->getCrashedServicesLocked()Ljava/util/Set;
 PLcom/android/server/accessibility/AccessibilityUserState;->getEnabledServicesLocked()Ljava/util/Set;
 HSPLcom/android/server/accessibility/AccessibilityUserState;->getFocusColorLocked()I
 HSPLcom/android/server/accessibility/AccessibilityUserState;->getFocusStrokeWidthLocked()I
 HPLcom/android/server/accessibility/AccessibilityUserState;->getInstalledServiceInfoLocked(Landroid/content/ComponentName;)Landroid/accessibilityservice/AccessibilityServiceInfo;
 HSPLcom/android/server/accessibility/AccessibilityUserState;->getInteractiveUiTimeoutLocked()I
-PLcom/android/server/accessibility/AccessibilityUserState;->getLastSentClientStateLocked()I
-PLcom/android/server/accessibility/AccessibilityUserState;->getMagnificationCapabilitiesLocked()I
-HPLcom/android/server/accessibility/AccessibilityUserState;->getMagnificationModeLocked(I)I
+HSPLcom/android/server/accessibility/AccessibilityUserState;->getLastSentClientStateLocked()I
+HSPLcom/android/server/accessibility/AccessibilityUserState;->getMagnificationCapabilitiesLocked()I
+HSPLcom/android/server/accessibility/AccessibilityUserState;->getMagnificationModeLocked(I)I
 HSPLcom/android/server/accessibility/AccessibilityUserState;->getNonInteractiveUiTimeoutLocked()I
 PLcom/android/server/accessibility/AccessibilityUserState;->getOriginalHardKeyboardValue()Z
 PLcom/android/server/accessibility/AccessibilityUserState;->getSecureIntForUser(Ljava/lang/String;II)I
 PLcom/android/server/accessibility/AccessibilityUserState;->getServiceConnectionLocked(Landroid/content/ComponentName;)Lcom/android/server/accessibility/AccessibilityServiceConnection;
-HPLcom/android/server/accessibility/AccessibilityUserState;->getShortcutTargetsLocked(I)Landroid/util/ArraySet;
+HSPLcom/android/server/accessibility/AccessibilityUserState;->getShortcutTargetsLocked(I)Landroid/util/ArraySet;
 PLcom/android/server/accessibility/AccessibilityUserState;->getSoftKeyboardValueFromSettings()I
-PLcom/android/server/accessibility/AccessibilityUserState;->getTargetAssignedToAccessibilityButton()Ljava/lang/String;
-PLcom/android/server/accessibility/AccessibilityUserState;->getUserInteractiveUiTimeoutLocked()I
-PLcom/android/server/accessibility/AccessibilityUserState;->getUserNonInteractiveUiTimeoutLocked()I
+HSPLcom/android/server/accessibility/AccessibilityUserState;->getTargetAssignedToAccessibilityButton()Ljava/lang/String;
+HSPLcom/android/server/accessibility/AccessibilityUserState;->getUserInteractiveUiTimeoutLocked()I
+HSPLcom/android/server/accessibility/AccessibilityUserState;->getUserNonInteractiveUiTimeoutLocked()I
 PLcom/android/server/accessibility/AccessibilityUserState;->hasUserOverriddenHardKeyboardSetting()Z
-PLcom/android/server/accessibility/AccessibilityUserState;->isAudioDescriptionByDefaultEnabledLocked()Z
-HPLcom/android/server/accessibility/AccessibilityUserState;->isAutoclickEnabledLocked()Z
-PLcom/android/server/accessibility/AccessibilityUserState;->isDisplayMagnificationEnabledLocked()Z
-PLcom/android/server/accessibility/AccessibilityUserState;->isFilterKeyEventsEnabledLocked()Z
+HSPLcom/android/server/accessibility/AccessibilityUserState;->isAudioDescriptionByDefaultEnabledLocked()Z
+HSPLcom/android/server/accessibility/AccessibilityUserState;->isAutoclickEnabledLocked()Z
+HSPLcom/android/server/accessibility/AccessibilityUserState;->isDisplayMagnificationEnabledLocked()Z
+HSPLcom/android/server/accessibility/AccessibilityUserState;->isFilterKeyEventsEnabledLocked()Z
 HSPLcom/android/server/accessibility/AccessibilityUserState;->isHandlingAccessibilityEventsLocked()Z
-PLcom/android/server/accessibility/AccessibilityUserState;->isMagnificationFollowTypingEnabled()Z
+HSPLcom/android/server/accessibility/AccessibilityUserState;->isMagnificationFollowTypingEnabled()Z
 PLcom/android/server/accessibility/AccessibilityUserState;->isMultiFingerGesturesEnabledLocked()Z
-PLcom/android/server/accessibility/AccessibilityUserState;->isPerformGesturesEnabledLocked()Z
-PLcom/android/server/accessibility/AccessibilityUserState;->isSendMotionEventsEnabled()Z
+HSPLcom/android/server/accessibility/AccessibilityUserState;->isPerformGesturesEnabledLocked()Z
+HSPLcom/android/server/accessibility/AccessibilityUserState;->isSendMotionEventsEnabled()Z
 PLcom/android/server/accessibility/AccessibilityUserState;->isServiceHandlesDoubleTapEnabledLocked()Z
-HPLcom/android/server/accessibility/AccessibilityUserState;->isShortcutMagnificationEnabledLocked()Z
+HSPLcom/android/server/accessibility/AccessibilityUserState;->isShortcutMagnificationEnabledLocked()Z
 HPLcom/android/server/accessibility/AccessibilityUserState;->isShortcutTargetInstalledLocked(Ljava/lang/String;)Z
-PLcom/android/server/accessibility/AccessibilityUserState;->isTextHighContrastEnabledLocked()Z
-HPLcom/android/server/accessibility/AccessibilityUserState;->isTouchExplorationEnabledLocked()Z
+HSPLcom/android/server/accessibility/AccessibilityUserState;->isTextHighContrastEnabledLocked()Z
+HSPLcom/android/server/accessibility/AccessibilityUserState;->isTouchExplorationEnabledLocked()Z
 PLcom/android/server/accessibility/AccessibilityUserState;->isTwoFingerPassthroughEnabledLocked()Z
-HPLcom/android/server/accessibility/AccessibilityUserState;->isValidMagnificationModeLocked(I)Z
-PLcom/android/server/accessibility/AccessibilityUserState;->onSwitchToAnotherUserLocked()V
+HSPLcom/android/server/accessibility/AccessibilityUserState;->isValidMagnificationModeLocked(I)Z
+PLcom/android/server/accessibility/AccessibilityUserState;->lambda$removeShortcutTargetLocked$0(Landroid/content/ComponentName;Ljava/lang/String;)Z
+HSPLcom/android/server/accessibility/AccessibilityUserState;->onSwitchToAnotherUserLocked()V
 PLcom/android/server/accessibility/AccessibilityUserState;->putSecureIntForUser(Ljava/lang/String;II)V
 PLcom/android/server/accessibility/AccessibilityUserState;->reconcileSoftKeyboardModeWithSettingsLocked()V
 PLcom/android/server/accessibility/AccessibilityUserState;->removeServiceLocked(Lcom/android/server/accessibility/AccessibilityServiceConnection;)V
+PLcom/android/server/accessibility/AccessibilityUserState;->removeShortcutTargetLocked(ILandroid/content/ComponentName;)Z
 PLcom/android/server/accessibility/AccessibilityUserState;->saveSoftKeyboardValueToSettings(I)V
 PLcom/android/server/accessibility/AccessibilityUserState;->serviceDisconnectedLocked(Lcom/android/server/accessibility/AccessibilityServiceConnection;)V
-PLcom/android/server/accessibility/AccessibilityUserState;->setAccessibilityFocusOnlyInActiveWindow(Z)V
+HSPLcom/android/server/accessibility/AccessibilityUserState;->setAccessibilityFocusOnlyInActiveWindow(Z)V
 PLcom/android/server/accessibility/AccessibilityUserState;->setDisplayMagnificationEnabledLocked(Z)V
-PLcom/android/server/accessibility/AccessibilityUserState;->setFilterKeyEventsEnabledLocked(Z)V
+HSPLcom/android/server/accessibility/AccessibilityUserState;->setFilterKeyEventsEnabledLocked(Z)V
+PLcom/android/server/accessibility/AccessibilityUserState;->setFocusAppearanceLocked(II)V
 PLcom/android/server/accessibility/AccessibilityUserState;->setInteractiveUiTimeoutLocked(I)V
-PLcom/android/server/accessibility/AccessibilityUserState;->setLastSentClientStateLocked(I)V
-PLcom/android/server/accessibility/AccessibilityUserState;->setMagnificationCapabilitiesLocked(I)V
-PLcom/android/server/accessibility/AccessibilityUserState;->setMagnificationModeLocked(II)V
-PLcom/android/server/accessibility/AccessibilityUserState;->setMultiFingerGesturesLocked(Z)V
+HSPLcom/android/server/accessibility/AccessibilityUserState;->setLastSentClientStateLocked(I)V
+HSPLcom/android/server/accessibility/AccessibilityUserState;->setMagnificationCapabilitiesLocked(I)V
+PLcom/android/server/accessibility/AccessibilityUserState;->setMagnificationFollowTypingEnabled(Z)V
+HSPLcom/android/server/accessibility/AccessibilityUserState;->setMagnificationModeLocked(II)V
+HSPLcom/android/server/accessibility/AccessibilityUserState;->setMultiFingerGesturesLocked(Z)V
 PLcom/android/server/accessibility/AccessibilityUserState;->setNonInteractiveUiTimeoutLocked(I)V
 PLcom/android/server/accessibility/AccessibilityUserState;->setOriginalHardKeyboardValue(Z)V
-PLcom/android/server/accessibility/AccessibilityUserState;->setPerformGesturesEnabledLocked(Z)V
-PLcom/android/server/accessibility/AccessibilityUserState;->setSendMotionEventsEnabled(Z)V
-PLcom/android/server/accessibility/AccessibilityUserState;->setServiceHandlesDoubleTapLocked(Z)V
+HSPLcom/android/server/accessibility/AccessibilityUserState;->setPerformGesturesEnabledLocked(Z)V
+HSPLcom/android/server/accessibility/AccessibilityUserState;->setSendMotionEventsEnabled(Z)V
+HSPLcom/android/server/accessibility/AccessibilityUserState;->setServiceHandlesDoubleTapLocked(Z)V
 PLcom/android/server/accessibility/AccessibilityUserState;->setSoftKeyboardModeLocked(ILandroid/content/ComponentName;)Z
 PLcom/android/server/accessibility/AccessibilityUserState;->setTargetAssignedToAccessibilityButton(Ljava/lang/String;)V
 PLcom/android/server/accessibility/AccessibilityUserState;->setTextHighContrastEnabledLocked(Z)V
 PLcom/android/server/accessibility/AccessibilityUserState;->setTouchExplorationEnabledLocked(Z)V
-PLcom/android/server/accessibility/AccessibilityUserState;->setTwoFingerPassthroughLocked(Z)V
-PLcom/android/server/accessibility/AccessibilityUserState;->unbindAllServicesLocked()V
+HSPLcom/android/server/accessibility/AccessibilityUserState;->setTwoFingerPassthroughLocked(Z)V
+HSPLcom/android/server/accessibility/AccessibilityUserState;->unbindAllServicesLocked()V
 PLcom/android/server/accessibility/AccessibilityUserState;->updateCrashedServicesIfNeededLocked()V
 HPLcom/android/server/accessibility/AccessibilityWindowManager$$ExternalSyntheticLambda0;-><init>()V
 HPLcom/android/server/accessibility/AccessibilityWindowManager$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
@@ -4053,7 +4186,7 @@
 HPLcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;->updateWindowsLocked(ILjava/util/List;)V+]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;Lcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;]Landroid/view/accessibility/AccessibilityWindowInfo;Landroid/view/accessibility/AccessibilityWindowInfo;]Landroid/view/WindowInfo;Landroid/view/WindowInfo;]Lcom/android/server/accessibility/AccessibilityWindowManager;Lcom/android/server/accessibility/AccessibilityWindowManager;
 HPLcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;->windowChangedNoLayer(Landroid/view/WindowInfo;Landroid/view/WindowInfo;)Z+]Landroid/graphics/Region;Landroid/graphics/Region;]Ljava/lang/Object;Lcom/android/server/wm/ActivityRecord$Token;,Landroid/os/BinderProxy;,Landroid/view/ViewRootImpl$W;]Ljava/util/List;Ljava/util/ArrayList;
 HPLcom/android/server/accessibility/AccessibilityWindowManager$RemoteAccessibilityConnection;-><init>(Lcom/android/server/accessibility/AccessibilityWindowManager;ILandroid/view/accessibility/IAccessibilityInteractionConnection;Ljava/lang/String;II)V
-PLcom/android/server/accessibility/AccessibilityWindowManager$RemoteAccessibilityConnection;->binderDied()V
+HPLcom/android/server/accessibility/AccessibilityWindowManager$RemoteAccessibilityConnection;->binderDied()V
 HPLcom/android/server/accessibility/AccessibilityWindowManager$RemoteAccessibilityConnection;->getPackageName()Ljava/lang/String;
 HPLcom/android/server/accessibility/AccessibilityWindowManager$RemoteAccessibilityConnection;->getRemote()Landroid/view/accessibility/IAccessibilityInteractionConnection;
 HPLcom/android/server/accessibility/AccessibilityWindowManager$RemoteAccessibilityConnection;->getUid()I
@@ -4071,14 +4204,14 @@
 PLcom/android/server/accessibility/AccessibilityWindowManager;->-$$Nest$fgetmTopFocusedWindowId(Lcom/android/server/accessibility/AccessibilityWindowManager;)I
 HPLcom/android/server/accessibility/AccessibilityWindowManager;->-$$Nest$fgetmTopFocusedWindowToken(Lcom/android/server/accessibility/AccessibilityWindowManager;)Landroid/os/IBinder;
 HPLcom/android/server/accessibility/AccessibilityWindowManager;->-$$Nest$fgetmTouchInteractionInProgress(Lcom/android/server/accessibility/AccessibilityWindowManager;)Z
-PLcom/android/server/accessibility/AccessibilityWindowManager;->-$$Nest$fgetmWindowIdMap(Lcom/android/server/accessibility/AccessibilityWindowManager;)Landroid/util/SparseArray;
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->-$$Nest$fgetmWindowIdMap(Lcom/android/server/accessibility/AccessibilityWindowManager;)Landroid/util/SparseArray;
 PLcom/android/server/accessibility/AccessibilityWindowManager;->-$$Nest$fgetmWindowManagerInternal(Lcom/android/server/accessibility/AccessibilityWindowManager;)Lcom/android/server/wm/WindowManagerInternal;
 PLcom/android/server/accessibility/AccessibilityWindowManager;->-$$Nest$fputmAccessibilityFocusedDisplayId(Lcom/android/server/accessibility/AccessibilityWindowManager;I)V
 HPLcom/android/server/accessibility/AccessibilityWindowManager;->-$$Nest$fputmActiveWindowId(Lcom/android/server/accessibility/AccessibilityWindowManager;I)V
 HPLcom/android/server/accessibility/AccessibilityWindowManager;->-$$Nest$fputmTopFocusedDisplayId(Lcom/android/server/accessibility/AccessibilityWindowManager;I)V
 HPLcom/android/server/accessibility/AccessibilityWindowManager;->-$$Nest$fputmTopFocusedWindowId(Lcom/android/server/accessibility/AccessibilityWindowManager;I)V
 HPLcom/android/server/accessibility/AccessibilityWindowManager;->-$$Nest$fputmTopFocusedWindowToken(Lcom/android/server/accessibility/AccessibilityWindowManager;Landroid/os/IBinder;)V
-PLcom/android/server/accessibility/AccessibilityWindowManager;->-$$Nest$mclearAccessibilityFocusLocked(Lcom/android/server/accessibility/AccessibilityWindowManager;I)V
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->-$$Nest$mclearAccessibilityFocusLocked(Lcom/android/server/accessibility/AccessibilityWindowManager;I)V
 PLcom/android/server/accessibility/AccessibilityWindowManager;->-$$Nest$mremoveAccessibilityInteractionConnectionLocked(Lcom/android/server/accessibility/AccessibilityWindowManager;II)V
 PLcom/android/server/accessibility/AccessibilityWindowManager;->-$$Nest$mtraceWMEnabled(Lcom/android/server/accessibility/AccessibilityWindowManager;)Z
 HSPLcom/android/server/accessibility/AccessibilityWindowManager;-><init>(Ljava/lang/Object;Landroid/os/Handler;Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/accessibility/AccessibilityWindowManager$AccessibilityEventSender;Lcom/android/server/accessibility/AccessibilitySecurityPolicy;Lcom/android/server/accessibility/AccessibilitySecurityPolicy$AccessibilityUserManager;Lcom/android/server/accessibility/AccessibilityTraceManager;)V
@@ -4088,7 +4221,7 @@
 PLcom/android/server/accessibility/AccessibilityWindowManager;->associateLocked(Landroid/os/IBinder;Landroid/os/IBinder;)V
 HPLcom/android/server/accessibility/AccessibilityWindowManager;->clearAccessibilityFocusLocked(I)V
 HPLcom/android/server/accessibility/AccessibilityWindowManager;->clearAccessibilityFocusMainThread(II)V
-HPLcom/android/server/accessibility/AccessibilityWindowManager;->computePartialInteractiveRegionForWindowLocked(ILandroid/graphics/Region;)Z
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->computePartialInteractiveRegionForWindowLocked(ILandroid/graphics/Region;)Z+]Lcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;Lcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;]Lcom/android/server/accessibility/AccessibilityWindowManager;Lcom/android/server/accessibility/AccessibilityWindowManager;
 PLcom/android/server/accessibility/AccessibilityWindowManager;->disassociateEmbeddedHierarchyLocked(Landroid/os/IBinder;)V
 HPLcom/android/server/accessibility/AccessibilityWindowManager;->disassociateLocked(Landroid/os/IBinder;)V
 PLcom/android/server/accessibility/AccessibilityWindowManager;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
@@ -4101,9 +4234,9 @@
 HPLcom/android/server/accessibility/AccessibilityWindowManager;->getDisplayIdByUserIdAndWindowIdLocked(II)I+]Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/wm/WindowManagerService$LocalService;]Lcom/android/server/accessibility/AccessibilityWindowManager;Lcom/android/server/accessibility/AccessibilityWindowManager;
 HPLcom/android/server/accessibility/AccessibilityWindowManager;->getDisplayListLocked()Ljava/util/ArrayList;
 HPLcom/android/server/accessibility/AccessibilityWindowManager;->getDisplayWindowObserverByWindowIdLocked(I)Lcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;Lcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;
-PLcom/android/server/accessibility/AccessibilityWindowManager;->getFocusedWindowId(I)I
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->getFocusedWindowId(I)I
 HPLcom/android/server/accessibility/AccessibilityWindowManager;->getHostTokenLocked(Landroid/os/IBinder;)Landroid/os/IBinder;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
-HPLcom/android/server/accessibility/AccessibilityWindowManager;->getInteractionConnectionsForUserLocked(I)Landroid/util/SparseArray;
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->getInteractionConnectionsForUserLocked(I)Landroid/util/SparseArray;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/accessibility/AccessibilityWindowManager;->getPictureInPictureActionReplacingConnection()Lcom/android/server/accessibility/AccessibilityWindowManager$RemoteAccessibilityConnection;
 HPLcom/android/server/accessibility/AccessibilityWindowManager;->getTokenLocked(I)Landroid/os/IBinder;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/accessibility/AccessibilityWindowManager;->getWindowIdLocked(Landroid/os/IBinder;)I+]Landroid/util/SparseArray;Landroid/util/SparseArray;
@@ -4117,7 +4250,7 @@
 HPLcom/android/server/accessibility/AccessibilityWindowManager;->isValidUserForWindowTokensLocked(I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/accessibility/AccessibilityWindowManager;->notifyOutsideTouch(II)V
 HPLcom/android/server/accessibility/AccessibilityWindowManager;->onAccessibilityInteractionConnectionRemovedLocked(ILandroid/os/IBinder;)V
-PLcom/android/server/accessibility/AccessibilityWindowManager;->onTouchInteractionEnd()V
+HPLcom/android/server/accessibility/AccessibilityWindowManager;->onTouchInteractionEnd()V
 PLcom/android/server/accessibility/AccessibilityWindowManager;->onTouchInteractionStart()V
 HPLcom/android/server/accessibility/AccessibilityWindowManager;->registerIdLocked(Landroid/os/IBinder;I)V
 HPLcom/android/server/accessibility/AccessibilityWindowManager;->removeAccessibilityInteractionConnection(Landroid/view/IWindow;)V
@@ -4129,7 +4262,7 @@
 PLcom/android/server/accessibility/AccessibilityWindowManager;->setActiveWindowLocked(I)V
 HSPLcom/android/server/accessibility/AccessibilityWindowManager;->setPictureInPictureActionReplacingConnection(Landroid/view/accessibility/IAccessibilityInteractionConnection;)V
 HPLcom/android/server/accessibility/AccessibilityWindowManager;->startTrackingWindows(I)V
-HPLcom/android/server/accessibility/AccessibilityWindowManager;->stopTrackingWindows(I)V
+HSPLcom/android/server/accessibility/AccessibilityWindowManager;->stopTrackingWindows(I)V
 HPLcom/android/server/accessibility/AccessibilityWindowManager;->traceIntConnEnabled()Z
 HPLcom/android/server/accessibility/AccessibilityWindowManager;->traceWMEnabled()Z+]Lcom/android/server/accessibility/AccessibilityTraceManager;Lcom/android/server/accessibility/AccessibilityTraceManager;
 HPLcom/android/server/accessibility/AccessibilityWindowManager;->unregisterIdLocked(I)V
@@ -4151,22 +4284,24 @@
 HPLcom/android/server/accessibility/CaptioningManagerImpl;->setSystemAudioCaptioningEnabled(ZI)V
 PLcom/android/server/accessibility/CaptioningManagerImpl;->setSystemAudioCaptioningUiEnabled(ZI)V
 PLcom/android/server/accessibility/EventStreamTransformation;->clearEvents(I)V
-HPLcom/android/server/accessibility/EventStreamTransformation;->onAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V+]Lcom/android/server/accessibility/EventStreamTransformation;Lcom/android/server/accessibility/MotionEventInjector;,Lcom/android/server/accessibility/KeyboardInterceptor;,Lcom/android/server/accessibility/AccessibilityInputFilter;,Lcom/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler;
+HPLcom/android/server/accessibility/EventStreamTransformation;->onAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V+]Lcom/android/server/accessibility/EventStreamTransformation;Lcom/android/server/accessibility/MotionEventInjector;,Lcom/android/server/accessibility/KeyboardInterceptor;,Lcom/android/server/accessibility/AccessibilityInputFilter;,Lcom/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler;,Lcom/android/server/accessibility/gestures/TouchExplorer;
 PLcom/android/server/accessibility/EventStreamTransformation;->onDestroy()V
 PLcom/android/server/accessibility/EventStreamTransformation;->onKeyEvent(Landroid/view/KeyEvent;I)V
-HPLcom/android/server/accessibility/EventStreamTransformation;->onMotionEvent(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V+]Lcom/android/server/accessibility/EventStreamTransformation;Lcom/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler;,Lcom/android/server/accessibility/AccessibilityInputFilter;,Lcom/android/server/accessibility/magnification/WindowMagnificationGestureHandler;
+HPLcom/android/server/accessibility/EventStreamTransformation;->onMotionEvent(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V+]Lcom/android/server/accessibility/EventStreamTransformation;Lcom/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler;,Lcom/android/server/accessibility/AccessibilityInputFilter;,Lcom/android/server/accessibility/MotionEventInjector;,Lcom/android/server/accessibility/magnification/WindowMagnificationGestureHandler;
 PLcom/android/server/accessibility/FingerprintGestureDispatcher;-><init>(Landroid/hardware/fingerprint/IFingerprintService;Landroid/content/res/Resources;Ljava/lang/Object;)V
 PLcom/android/server/accessibility/FingerprintGestureDispatcher;->handleMessage(Landroid/os/Message;)Z
+PLcom/android/server/accessibility/FingerprintGestureDispatcher;->onClientActiveChanged(Z)V
 PLcom/android/server/accessibility/FingerprintGestureDispatcher;->onFingerprintGesture(I)Z
 PLcom/android/server/accessibility/FingerprintGestureDispatcher;->updateClientList(Ljava/util/List;)V
 PLcom/android/server/accessibility/KeyEventDispatcher$PendingKeyEvent;-><init>()V
 PLcom/android/server/accessibility/KeyEventDispatcher$PendingKeyEvent;-><init>(Lcom/android/server/accessibility/KeyEventDispatcher$PendingKeyEvent-IA;)V
 PLcom/android/server/accessibility/KeyEventDispatcher;-><init>(Landroid/os/Handler;ILjava/lang/Object;Landroid/os/PowerManager;)V
 PLcom/android/server/accessibility/KeyEventDispatcher;->flush(Lcom/android/server/accessibility/KeyEventDispatcher$KeyEventFilter;)V
-PLcom/android/server/accessibility/KeyEventDispatcher;->notifyKeyEventLocked(Landroid/view/KeyEvent;ILjava/util/List;)Z
+PLcom/android/server/accessibility/KeyEventDispatcher;->handleMessage(Landroid/os/Message;)Z
+HPLcom/android/server/accessibility/KeyEventDispatcher;->notifyKeyEventLocked(Landroid/view/KeyEvent;ILjava/util/List;)Z
 PLcom/android/server/accessibility/KeyEventDispatcher;->obtainPendingEventLocked(Landroid/view/KeyEvent;I)Lcom/android/server/accessibility/KeyEventDispatcher$PendingKeyEvent;
 PLcom/android/server/accessibility/KeyEventDispatcher;->removeEventFromListLocked(Ljava/util/List;I)Lcom/android/server/accessibility/KeyEventDispatcher$PendingKeyEvent;
-PLcom/android/server/accessibility/KeyEventDispatcher;->removeReferenceToPendingEventLocked(Lcom/android/server/accessibility/KeyEventDispatcher$PendingKeyEvent;)Z
+HPLcom/android/server/accessibility/KeyEventDispatcher;->removeReferenceToPendingEventLocked(Lcom/android/server/accessibility/KeyEventDispatcher$PendingKeyEvent;)Z
 PLcom/android/server/accessibility/KeyEventDispatcher;->setOnKeyEventResult(Lcom/android/server/accessibility/KeyEventDispatcher$KeyEventFilter;ZI)V
 PLcom/android/server/accessibility/KeyboardInterceptor$KeyEventHolder;-><clinit>()V
 PLcom/android/server/accessibility/KeyboardInterceptor$KeyEventHolder;-><init>()V
@@ -4184,7 +4319,7 @@
 PLcom/android/server/accessibility/MotionEventInjector;->appendMoveEventIfNeeded(Ljava/util/List;[Landroid/accessibilityservice/GestureDescription$TouchPoint;IJ)V
 PLcom/android/server/accessibility/MotionEventInjector;->appendUpEvents(Ljava/util/List;[Landroid/accessibilityservice/GestureDescription$TouchPoint;IJ)V
 PLcom/android/server/accessibility/MotionEventInjector;->cancelAnyGestureInProgress(I)V
-HPLcom/android/server/accessibility/MotionEventInjector;->cancelAnyPendingInjectedEvents()V
+HPLcom/android/server/accessibility/MotionEventInjector;->cancelAnyPendingInjectedEvents()V+]Landroid/os/Handler;Landroid/os/Handler;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
 PLcom/android/server/accessibility/MotionEventInjector;->clearEvents(I)V
 PLcom/android/server/accessibility/MotionEventInjector;->findPointByStrokeId([Landroid/accessibilityservice/GestureDescription$TouchPoint;II)I
 PLcom/android/server/accessibility/MotionEventInjector;->getLastTouchPoints()[Landroid/accessibilityservice/GestureDescription$TouchPoint;
@@ -4197,36 +4332,36 @@
 PLcom/android/server/accessibility/MotionEventInjector;->notifyService(Landroid/accessibilityservice/IAccessibilityServiceClient;IZ)V
 PLcom/android/server/accessibility/MotionEventInjector;->obtainMotionEvent(JJI[Landroid/accessibilityservice/GestureDescription$TouchPoint;I)Landroid/view/MotionEvent;
 PLcom/android/server/accessibility/MotionEventInjector;->onDestroy()V
-HPLcom/android/server/accessibility/MotionEventInjector;->onMotionEvent(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
-HPLcom/android/server/accessibility/MotionEventInjector;->sendMotionEventToNext(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/MotionEventInjector;->onMotionEvent(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V+]Lcom/android/server/accessibility/MotionEventInjector;Lcom/android/server/accessibility/MotionEventInjector;]Lcom/android/server/accessibility/AccessibilityTraceManager;Lcom/android/server/accessibility/AccessibilityTraceManager;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
+HPLcom/android/server/accessibility/MotionEventInjector;->sendMotionEventToNext(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V+]Lcom/android/server/accessibility/BaseEventStreamTransformation;Lcom/android/server/accessibility/MotionEventInjector;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 PLcom/android/server/accessibility/PolicyWarningUIController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/accessibility/PolicyWarningUIController;)V
 PLcom/android/server/accessibility/PolicyWarningUIController$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/accessibility/PolicyWarningUIController$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/accessibility/PolicyWarningUIController;)V
 PLcom/android/server/accessibility/PolicyWarningUIController$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/accessibility/PolicyWarningUIController$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/accessibility/PolicyWarningUIController;)V
-PLcom/android/server/accessibility/PolicyWarningUIController$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;)V
-PLcom/android/server/accessibility/PolicyWarningUIController$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/accessibility/PolicyWarningUIController;)V
-PLcom/android/server/accessibility/PolicyWarningUIController$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/accessibility/PolicyWarningUIController$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/accessibility/PolicyWarningUIController$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/accessibility/PolicyWarningUIController;)V
+HSPLcom/android/server/accessibility/PolicyWarningUIController$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/accessibility/PolicyWarningUIController$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/accessibility/PolicyWarningUIController;)V
 PLcom/android/server/accessibility/PolicyWarningUIController$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/accessibility/PolicyWarningUIController$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/accessibility/PolicyWarningUIController$NotificationController;)V
 PLcom/android/server/accessibility/PolicyWarningUIController$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/accessibility/PolicyWarningUIController$NotificationController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/accessibility/PolicyWarningUIController$NotificationController;)V
+HSPLcom/android/server/accessibility/PolicyWarningUIController$NotificationController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/accessibility/PolicyWarningUIController$NotificationController;)V
 HSPLcom/android/server/accessibility/PolicyWarningUIController$NotificationController;-><init>(Landroid/content/Context;)V
-PLcom/android/server/accessibility/PolicyWarningUIController$NotificationController;->cancelSentNotifications()V
+HSPLcom/android/server/accessibility/PolicyWarningUIController$NotificationController;->cancelSentNotifications()V
 PLcom/android/server/accessibility/PolicyWarningUIController$NotificationController;->getEnabledServiceInfos()Ljava/util/List;
 PLcom/android/server/accessibility/PolicyWarningUIController$NotificationController;->onNotificationCanceled(ILandroid/content/ComponentName;)V
 PLcom/android/server/accessibility/PolicyWarningUIController$NotificationController;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/accessibility/PolicyWarningUIController$NotificationController;->onServicesDisabled(ILandroid/util/ArraySet;)V
-PLcom/android/server/accessibility/PolicyWarningUIController$NotificationController;->onSwitchUser(I)V
-PLcom/android/server/accessibility/PolicyWarningUIController$NotificationController;->readNotifiedServiceList(I)Landroid/util/ArraySet;
+HSPLcom/android/server/accessibility/PolicyWarningUIController$NotificationController;->onSwitchUser(I)V
+HSPLcom/android/server/accessibility/PolicyWarningUIController$NotificationController;->readNotifiedServiceList(I)Landroid/util/ArraySet;
 PLcom/android/server/accessibility/PolicyWarningUIController$NotificationController;->sendNotification(ILandroid/content/ComponentName;Ljava/lang/CharSequence;Landroid/graphics/Bitmap;)V
-PLcom/android/server/accessibility/PolicyWarningUIController$NotificationController;->setSendingNotification(Z)V
+HSPLcom/android/server/accessibility/PolicyWarningUIController$NotificationController;->setSendingNotification(Z)V
 PLcom/android/server/accessibility/PolicyWarningUIController$NotificationController;->trySendNotification(ILandroid/content/ComponentName;)Z
 PLcom/android/server/accessibility/PolicyWarningUIController$NotificationController;->writeNotifiedServiceList(ILandroid/util/ArraySet;)V
 PLcom/android/server/accessibility/PolicyWarningUIController;->$r8$lambda$BpICa1dkTGG_FPCF1geFvKAVh2o(Lcom/android/server/accessibility/PolicyWarningUIController;ILandroid/content/ComponentName;)V
-PLcom/android/server/accessibility/PolicyWarningUIController;->$r8$lambda$pOK35k5jUJWcO-X0C7oZgMcV0yU(Lcom/android/server/accessibility/PolicyWarningUIController;ILjava/util/Set;)V
-PLcom/android/server/accessibility/PolicyWarningUIController;->$r8$lambda$w2srzKpukAc_S-inuaG0FoKUkPY(Lcom/android/server/accessibility/PolicyWarningUIController;Z)V
+HSPLcom/android/server/accessibility/PolicyWarningUIController;->$r8$lambda$pOK35k5jUJWcO-X0C7oZgMcV0yU(Lcom/android/server/accessibility/PolicyWarningUIController;ILjava/util/Set;)V
+HSPLcom/android/server/accessibility/PolicyWarningUIController;->$r8$lambda$w2srzKpukAc_S-inuaG0FoKUkPY(Lcom/android/server/accessibility/PolicyWarningUIController;Z)V
 PLcom/android/server/accessibility/PolicyWarningUIController;->$r8$lambda$xcPczwbLJPTdxRqsAsiMQw01e1U(Lcom/android/server/accessibility/PolicyWarningUIController;ILandroid/content/ComponentName;)V
 HSPLcom/android/server/accessibility/PolicyWarningUIController;-><clinit>()V
 HSPLcom/android/server/accessibility/PolicyWarningUIController;-><init>(Landroid/os/Handler;Landroid/content/Context;Lcom/android/server/accessibility/PolicyWarningUIController$NotificationController;)V
@@ -4234,17 +4369,19 @@
 PLcom/android/server/accessibility/PolicyWarningUIController;->createIntent(Landroid/content/Context;ILjava/lang/String;Landroid/content/ComponentName;)Landroid/content/Intent;
 PLcom/android/server/accessibility/PolicyWarningUIController;->createPendingIntent(Landroid/content/Context;ILjava/lang/String;Landroid/content/ComponentName;)Landroid/app/PendingIntent;
 HSPLcom/android/server/accessibility/PolicyWarningUIController;->enableSendingNonA11yToolNotification(Z)V
-PLcom/android/server/accessibility/PolicyWarningUIController;->enableSendingNonA11yToolNotificationInternal(Z)V
+HSPLcom/android/server/accessibility/PolicyWarningUIController;->enableSendingNonA11yToolNotificationInternal(Z)V
 PLcom/android/server/accessibility/PolicyWarningUIController;->onEnabledServicesChanged(ILjava/util/Set;)V
 PLcom/android/server/accessibility/PolicyWarningUIController;->onEnabledServicesChangedInternal(ILjava/util/Set;)V
 PLcom/android/server/accessibility/PolicyWarningUIController;->onNonA11yCategoryServiceBound(ILandroid/content/ComponentName;)V
 PLcom/android/server/accessibility/PolicyWarningUIController;->onNonA11yCategoryServiceUnbound(ILandroid/content/ComponentName;)V
-PLcom/android/server/accessibility/PolicyWarningUIController;->onSwitchUser(ILjava/util/Set;)V
-PLcom/android/server/accessibility/PolicyWarningUIController;->onSwitchUserInternal(ILjava/util/Set;)V
+HSPLcom/android/server/accessibility/PolicyWarningUIController;->onSwitchUser(ILjava/util/Set;)V
+HSPLcom/android/server/accessibility/PolicyWarningUIController;->onSwitchUserInternal(ILjava/util/Set;)V
 PLcom/android/server/accessibility/PolicyWarningUIController;->setAlarm(ILandroid/content/ComponentName;)V
-PLcom/android/server/accessibility/SystemActionPerformer;-><init>(Landroid/content/Context;Lcom/android/server/wm/WindowManagerInternal;Ljava/util/function/Supplier;Lcom/android/server/accessibility/SystemActionPerformer$SystemActionsChangedListener;)V
+HSPLcom/android/server/accessibility/SystemActionPerformer;-><init>(Landroid/content/Context;Lcom/android/server/wm/WindowManagerInternal;Ljava/util/function/Supplier;Lcom/android/server/accessibility/SystemActionPerformer$SystemActionsChangedListener;)V
+PLcom/android/server/accessibility/SystemActionPerformer;->addLegacySystemActions(Ljava/util/List;)V
+PLcom/android/server/accessibility/SystemActionPerformer;->getSystemActions()Ljava/util/List;
 PLcom/android/server/accessibility/SystemActionPerformer;->performSystemAction(I)Z
-HPLcom/android/server/accessibility/SystemActionPerformer;->registerSystemAction(ILandroid/app/RemoteAction;)V
+HSPLcom/android/server/accessibility/SystemActionPerformer;->registerSystemAction(ILandroid/app/RemoteAction;)V
 HPLcom/android/server/accessibility/SystemActionPerformer;->unregisterSystemAction(I)V
 HSPLcom/android/server/accessibility/UiAutomationManager$1;-><init>(Lcom/android/server/accessibility/UiAutomationManager;)V
 PLcom/android/server/accessibility/UiAutomationManager$UiAutomationService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/accessibility/UiAutomationManager$UiAutomationService;)V
@@ -4258,11 +4395,11 @@
 PLcom/android/server/accessibility/UiAutomationManager;->-$$Nest$sfgetCOMPONENT_NAME()Landroid/content/ComponentName;
 HSPLcom/android/server/accessibility/UiAutomationManager;-><clinit>()V
 HSPLcom/android/server/accessibility/UiAutomationManager;-><init>(Ljava/lang/Object;)V
-PLcom/android/server/accessibility/UiAutomationManager;->canRetrieveInteractiveWindowsLocked()Z
+HSPLcom/android/server/accessibility/UiAutomationManager;->canRetrieveInteractiveWindowsLocked()Z
 PLcom/android/server/accessibility/UiAutomationManager;->destroyUiAutomationService()V
 PLcom/android/server/accessibility/UiAutomationManager;->getRelevantEventTypes()I
 HSPLcom/android/server/accessibility/UiAutomationManager;->getServiceInfo()Landroid/accessibilityservice/AccessibilityServiceInfo;
-PLcom/android/server/accessibility/UiAutomationManager;->isTouchExplorationEnabledLocked()Z
+HSPLcom/android/server/accessibility/UiAutomationManager;->isTouchExplorationEnabledLocked()Z
 HSPLcom/android/server/accessibility/UiAutomationManager;->isUiAutomationRunningLocked()Z
 PLcom/android/server/accessibility/UiAutomationManager;->registerUiTestAutomationServiceLocked(Landroid/os/IBinder;Landroid/accessibilityservice/IAccessibilityServiceClient;Landroid/content/Context;Landroid/accessibilityservice/AccessibilityServiceInfo;ILandroid/os/Handler;Lcom/android/server/accessibility/AccessibilitySecurityPolicy;Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection$SystemSupport;Landroid/accessibilityservice/AccessibilityTrace;Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/accessibility/SystemActionPerformer;Lcom/android/server/accessibility/AccessibilityWindowManager;I)V
 HPLcom/android/server/accessibility/UiAutomationManager;->sendAccessibilityEventLocked(Landroid/view/accessibility/AccessibilityEvent;)V
@@ -4271,23 +4408,33 @@
 HSPLcom/android/server/accessibility/UiAutomationManager;->useAccessibility()Z
 PLcom/android/server/accessibility/gestures/EventDispatcher;-><init>(Landroid/content/Context;Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/EventStreamTransformation;Lcom/android/server/accessibility/gestures/TouchState;)V
 PLcom/android/server/accessibility/gestures/EventDispatcher;->clear()V
+PLcom/android/server/accessibility/gestures/EventDispatcher;->clickWithTouchEvents(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/EventDispatcher;->computeClickLocation(Landroid/graphics/Point;)I
 PLcom/android/server/accessibility/gestures/EventDispatcher;->computeInjectionAction(II)I
-PLcom/android/server/accessibility/gestures/EventDispatcher;->sendAccessibilityEvent(I)V
+PLcom/android/server/accessibility/gestures/EventDispatcher;->longPressWithTouchEvents(Landroid/view/MotionEvent;I)Z
+PLcom/android/server/accessibility/gestures/EventDispatcher;->offsetEvent(Landroid/view/MotionEvent;II)Landroid/view/MotionEvent;
+HPLcom/android/server/accessibility/gestures/EventDispatcher;->sendAccessibilityEvent(I)V
+PLcom/android/server/accessibility/gestures/EventDispatcher;->sendActionDownAndUp(Landroid/view/MotionEvent;Landroid/view/MotionEvent;IZ)V
 PLcom/android/server/accessibility/gestures/EventDispatcher;->sendDownForAllNotInjectedPointers(Landroid/view/MotionEvent;I)V
 HPLcom/android/server/accessibility/gestures/EventDispatcher;->sendMotionEvent(Landroid/view/MotionEvent;ILandroid/view/MotionEvent;II)V
 PLcom/android/server/accessibility/gestures/EventDispatcher;->sendUpForInjectedDownPointers(Landroid/view/MotionEvent;I)V
 PLcom/android/server/accessibility/gestures/EventDispatcher;->setReceiver(Lcom/android/server/accessibility/EventStreamTransformation;)V
-PLcom/android/server/accessibility/gestures/GestureManifold;-><init>(Landroid/content/Context;Lcom/android/server/accessibility/gestures/GestureManifold$Listener;Lcom/android/server/accessibility/gestures/TouchState;Landroid/os/Handler;)V
+HPLcom/android/server/accessibility/gestures/GestureManifold;-><init>(Landroid/content/Context;Lcom/android/server/accessibility/gestures/GestureManifold$Listener;Lcom/android/server/accessibility/gestures/TouchState;Landroid/os/Handler;)V
 PLcom/android/server/accessibility/gestures/GestureManifold;->clear()V
 PLcom/android/server/accessibility/gestures/GestureManifold;->isMultiFingerGesturesEnabled()Z
 PLcom/android/server/accessibility/gestures/GestureManifold;->isSendMotionEventsEnabled()Z
 PLcom/android/server/accessibility/gestures/GestureManifold;->isTwoFingerPassthroughEnabled()Z
+PLcom/android/server/accessibility/gestures/GestureManifold;->onGestureCompleted(ILandroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/gestures/GestureManifold;->onMotionEvent(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)Z+]Lcom/android/server/accessibility/gestures/GestureManifold;Lcom/android/server/accessibility/gestures/GestureManifold;]Lcom/android/server/accessibility/gestures/GestureMatcher;megamorphic_types]Lcom/android/server/accessibility/gestures/TouchState;Lcom/android/server/accessibility/gestures/TouchState;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
+PLcom/android/server/accessibility/gestures/GestureManifold;->onStateChanged(IILandroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
 PLcom/android/server/accessibility/gestures/GestureManifold;->setMultiFingerGesturesEnabled(Z)V
 PLcom/android/server/accessibility/gestures/GestureManifold;->setTwoFingerPassthroughEnabled(Z)V
 PLcom/android/server/accessibility/gestures/GestureMatcher$DelayedTransition;-><init>(Lcom/android/server/accessibility/gestures/GestureMatcher;)V
-PLcom/android/server/accessibility/gestures/GestureMatcher$DelayedTransition;->cancel()V
-PLcom/android/server/accessibility/gestures/GestureMatcher$DelayedTransition;->post(IJLandroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
-PLcom/android/server/accessibility/gestures/GestureMatcher;->-$$Nest$fgetmHandler(Lcom/android/server/accessibility/gestures/GestureMatcher;)Landroid/os/Handler;
+HPLcom/android/server/accessibility/gestures/GestureMatcher$DelayedTransition;->cancel()V
+HPLcom/android/server/accessibility/gestures/GestureMatcher$DelayedTransition;->post(IJLandroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/GestureMatcher$DelayedTransition;->run()V
+HPLcom/android/server/accessibility/gestures/GestureMatcher;->-$$Nest$fgetmHandler(Lcom/android/server/accessibility/gestures/GestureMatcher;)Landroid/os/Handler;
+PLcom/android/server/accessibility/gestures/GestureMatcher;->-$$Nest$msetState(Lcom/android/server/accessibility/gestures/GestureMatcher;ILandroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
 PLcom/android/server/accessibility/gestures/GestureMatcher;-><init>(ILandroid/os/Handler;Lcom/android/server/accessibility/gestures/GestureMatcher$StateChangeListener;)V
 PLcom/android/server/accessibility/gestures/GestureMatcher;->cancelAfter(JLandroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
 PLcom/android/server/accessibility/gestures/GestureMatcher;->cancelAfterDoubleTapTimeout(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
@@ -4296,88 +4443,135 @@
 PLcom/android/server/accessibility/gestures/GestureMatcher;->cancelPendingTransitions()V
 PLcom/android/server/accessibility/gestures/GestureMatcher;->clear()V
 PLcom/android/server/accessibility/gestures/GestureMatcher;->completeAfter(JLandroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/GestureMatcher;->completeAfterDoubleTapTimeout(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
 PLcom/android/server/accessibility/gestures/GestureMatcher;->completeAfterLongPressTimeout(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
 PLcom/android/server/accessibility/gestures/GestureMatcher;->completeGesture(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
-PLcom/android/server/accessibility/gestures/GestureMatcher;->getState()I
-PLcom/android/server/accessibility/gestures/GestureMatcher;->onMotionEvent(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)I
+HPLcom/android/server/accessibility/gestures/GestureMatcher;->getState()I
+PLcom/android/server/accessibility/gestures/GestureMatcher;->onDown(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/gestures/GestureMatcher;->onMotionEvent(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)I+]Lcom/android/server/accessibility/gestures/GestureMatcher;megamorphic_types]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 PLcom/android/server/accessibility/gestures/GestureMatcher;->setListener(Lcom/android/server/accessibility/gestures/GestureMatcher$StateChangeListener;)V
-PLcom/android/server/accessibility/gestures/GestureMatcher;->setState(ILandroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/gestures/GestureMatcher;->setState(ILandroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
 PLcom/android/server/accessibility/gestures/GestureMatcher;->startGesture(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
 PLcom/android/server/accessibility/gestures/GestureUtils;-><clinit>()V
 HPLcom/android/server/accessibility/gestures/GestureUtils;->distance(Landroid/view/MotionEvent;Landroid/view/MotionEvent;)D+]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 PLcom/android/server/accessibility/gestures/GestureUtils;->distanceClosestPointerToPoint(Landroid/graphics/PointF;Landroid/view/MotionEvent;)D
 PLcom/android/server/accessibility/gestures/GestureUtils;->eventsWithinTimeAndDistanceSlop(Landroid/view/MotionEvent;Landroid/view/MotionEvent;II)Z
 PLcom/android/server/accessibility/gestures/GestureUtils;->getActionIndex(Landroid/view/MotionEvent;)I
+PLcom/android/server/accessibility/gestures/GestureUtils;->isDraggingGesture(FFFFFFFFF)Z
 PLcom/android/server/accessibility/gestures/GestureUtils;->isMultiTap(Landroid/view/MotionEvent;Landroid/view/MotionEvent;II)Z
 HPLcom/android/server/accessibility/gestures/GestureUtils;->isTimedOut(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)Z
 PLcom/android/server/accessibility/gestures/MultiFingerMultiTap;-><init>(Landroid/content/Context;IIILcom/android/server/accessibility/gestures/GestureMatcher$StateChangeListener;)V
 PLcom/android/server/accessibility/gestures/MultiFingerMultiTap;->clear()V
+HPLcom/android/server/accessibility/gestures/MultiFingerMultiTap;->findNearestPoint(Landroid/view/MotionEvent;FZ)Landroid/graphics/PointF;+]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
+HPLcom/android/server/accessibility/gestures/MultiFingerMultiTap;->initBaseLocation(Landroid/view/MotionEvent;)Landroid/graphics/PointF;
+PLcom/android/server/accessibility/gestures/MultiFingerMultiTap;->onDown(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/gestures/MultiFingerMultiTap;->onMove(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/MultiFingerMultiTap;->onPointerDown(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/MultiFingerMultiTap;->onPointerUp(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/MultiFingerMultiTap;->onUp(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
 PLcom/android/server/accessibility/gestures/MultiFingerMultiTapAndHold;-><init>(Landroid/content/Context;IIILcom/android/server/accessibility/gestures/GestureMatcher$StateChangeListener;)V
+PLcom/android/server/accessibility/gestures/MultiFingerMultiTapAndHold;->onPointerDown(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/MultiFingerMultiTapAndHold;->onUp(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
 PLcom/android/server/accessibility/gestures/MultiFingerSwipe;-><init>(Landroid/content/Context;IIILcom/android/server/accessibility/gestures/GestureMatcher$StateChangeListener;)V
-PLcom/android/server/accessibility/gestures/MultiFingerSwipe;->clear()V
+HPLcom/android/server/accessibility/gestures/MultiFingerSwipe;->clear()V
+HPLcom/android/server/accessibility/gestures/MultiFingerSwipe;->onDown(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/gestures/MultiFingerSwipe;->onMove(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V+]Lcom/android/server/accessibility/gestures/GestureMatcher;Lcom/android/server/accessibility/gestures/MultiFingerSwipe;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
+PLcom/android/server/accessibility/gestures/MultiFingerSwipe;->onPointerDown(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/MultiFingerSwipe;->onPointerUp(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/MultiFingerSwipe;->onUp(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
 PLcom/android/server/accessibility/gestures/MultiTap;-><init>(Landroid/content/Context;IILcom/android/server/accessibility/gestures/GestureMatcher$StateChangeListener;)V
 PLcom/android/server/accessibility/gestures/MultiTap;->clear()V
-PLcom/android/server/accessibility/gestures/MultiTap;->isInsideSlop(Landroid/view/MotionEvent;I)Z
-PLcom/android/server/accessibility/gestures/MultiTap;->onDown(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/gestures/MultiTap;->isInsideSlop(Landroid/view/MotionEvent;I)Z
+HPLcom/android/server/accessibility/gestures/MultiTap;->onDown(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
 PLcom/android/server/accessibility/gestures/MultiTap;->onMove(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/MultiTap;->onPointerDown(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
 PLcom/android/server/accessibility/gestures/MultiTap;->onUp(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
 PLcom/android/server/accessibility/gestures/MultiTapAndHold;-><init>(Landroid/content/Context;IILcom/android/server/accessibility/gestures/GestureMatcher$StateChangeListener;)V
 PLcom/android/server/accessibility/gestures/MultiTapAndHold;->onDown(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/MultiTapAndHold;->onUp(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
 PLcom/android/server/accessibility/gestures/SecondFingerMultiTap;-><init>(Landroid/content/Context;IILcom/android/server/accessibility/gestures/GestureMatcher$StateChangeListener;)V
 PLcom/android/server/accessibility/gestures/SecondFingerMultiTap;->clear()V
+PLcom/android/server/accessibility/gestures/SecondFingerMultiTap;->isSecondFingerInsideSlop(Landroid/view/MotionEvent;I)Z
+PLcom/android/server/accessibility/gestures/SecondFingerMultiTap;->onMove(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/SecondFingerMultiTap;->onPointerDown(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/SecondFingerMultiTap;->onUp(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
 PLcom/android/server/accessibility/gestures/Swipe;-><init>(Landroid/content/Context;IIILcom/android/server/accessibility/gestures/GestureMatcher$StateChangeListener;)V
 PLcom/android/server/accessibility/gestures/Swipe;-><init>(Landroid/content/Context;IILcom/android/server/accessibility/gestures/GestureMatcher$StateChangeListener;)V
 PLcom/android/server/accessibility/gestures/Swipe;-><init>(Landroid/content/Context;[IILcom/android/server/accessibility/gestures/GestureMatcher$StateChangeListener;)V
 PLcom/android/server/accessibility/gestures/Swipe;->clear()V
+PLcom/android/server/accessibility/gestures/Swipe;->onDown(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/gestures/Swipe;->onMove(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V+]Lcom/android/server/accessibility/gestures/GestureMatcher;Lcom/android/server/accessibility/gestures/Swipe;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
+PLcom/android/server/accessibility/gestures/Swipe;->onPointerDown(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/Swipe;->onUp(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/Swipe;->recognizeGesture(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/Swipe;->recognizeGesturePath(Landroid/view/MotionEvent;Landroid/view/MotionEvent;ILjava/util/ArrayList;)V
+PLcom/android/server/accessibility/gestures/Swipe;->toDirection(FF)I
 PLcom/android/server/accessibility/gestures/TouchExplorer$ExitGestureDetectionModeDelayed;-><init>(Lcom/android/server/accessibility/gestures/TouchExplorer;)V
 PLcom/android/server/accessibility/gestures/TouchExplorer$ExitGestureDetectionModeDelayed;-><init>(Lcom/android/server/accessibility/gestures/TouchExplorer;Lcom/android/server/accessibility/gestures/TouchExplorer$ExitGestureDetectionModeDelayed-IA;)V
 PLcom/android/server/accessibility/gestures/TouchExplorer$ExitGestureDetectionModeDelayed;->cancel()V
+PLcom/android/server/accessibility/gestures/TouchExplorer$ExitGestureDetectionModeDelayed;->post()V
 PLcom/android/server/accessibility/gestures/TouchExplorer$SendAccessibilityEventDelayed;-><init>(Lcom/android/server/accessibility/gestures/TouchExplorer;II)V
 PLcom/android/server/accessibility/gestures/TouchExplorer$SendAccessibilityEventDelayed;->cancel()V
 PLcom/android/server/accessibility/gestures/TouchExplorer$SendAccessibilityEventDelayed;->forceSendAndRemove()V
-PLcom/android/server/accessibility/gestures/TouchExplorer$SendAccessibilityEventDelayed;->isPending()Z
+HPLcom/android/server/accessibility/gestures/TouchExplorer$SendAccessibilityEventDelayed;->isPending()Z
 PLcom/android/server/accessibility/gestures/TouchExplorer$SendAccessibilityEventDelayed;->post()V
 PLcom/android/server/accessibility/gestures/TouchExplorer$SendAccessibilityEventDelayed;->run()V
 PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverEnterAndMoveDelayed;->-$$Nest$mclear(Lcom/android/server/accessibility/gestures/TouchExplorer$SendHoverEnterAndMoveDelayed;)V
 PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverEnterAndMoveDelayed;->-$$Nest$misPending(Lcom/android/server/accessibility/gestures/TouchExplorer$SendHoverEnterAndMoveDelayed;)Z
 PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverEnterAndMoveDelayed;-><init>(Lcom/android/server/accessibility/gestures/TouchExplorer;)V
-PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverEnterAndMoveDelayed;->addEvent(Landroid/view/MotionEvent;Landroid/view/MotionEvent;)V
+HPLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverEnterAndMoveDelayed;->addEvent(Landroid/view/MotionEvent;Landroid/view/MotionEvent;)V
 PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverEnterAndMoveDelayed;->cancel()V
-PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverEnterAndMoveDelayed;->clear()V
+HPLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverEnterAndMoveDelayed;->clear()V
 PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverEnterAndMoveDelayed;->isPending()Z
-PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverEnterAndMoveDelayed;->run()V
+PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverEnterAndMoveDelayed;->post(Landroid/view/MotionEvent;Landroid/view/MotionEvent;II)V
+HPLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverEnterAndMoveDelayed;->run()V
 PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverEnterAndMoveDelayed;->setPointerIdBits(I)V
 PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverEnterAndMoveDelayed;->setPolicyFlags(I)V
 PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverExitDelayed;->-$$Nest$misPending(Lcom/android/server/accessibility/gestures/TouchExplorer$SendHoverExitDelayed;)Z
 PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverExitDelayed;-><init>(Lcom/android/server/accessibility/gestures/TouchExplorer;)V
 PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverExitDelayed;->cancel()V
+PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverExitDelayed;->clear()V
 PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverExitDelayed;->isPending()Z
+PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverExitDelayed;->post(Landroid/view/MotionEvent;Landroid/view/MotionEvent;II)V
+PLcom/android/server/accessibility/gestures/TouchExplorer$SendHoverExitDelayed;->run()V
+PLcom/android/server/accessibility/gestures/TouchExplorer;->-$$Nest$fgetmDetermineUserIntentTimeout(Lcom/android/server/accessibility/gestures/TouchExplorer;)I
 PLcom/android/server/accessibility/gestures/TouchExplorer;->-$$Nest$fgetmDispatcher(Lcom/android/server/accessibility/gestures/TouchExplorer;)Lcom/android/server/accessibility/gestures/EventDispatcher;
 PLcom/android/server/accessibility/gestures/TouchExplorer;->-$$Nest$fgetmHandler(Lcom/android/server/accessibility/gestures/TouchExplorer;)Landroid/os/Handler;
 PLcom/android/server/accessibility/gestures/TouchExplorer;->-$$Nest$fgetmReceivedPointerTracker(Lcom/android/server/accessibility/gestures/TouchExplorer;)Lcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;
+PLcom/android/server/accessibility/gestures/TouchExplorer;->-$$Nest$fgetmSendTouchExplorationEndDelayed(Lcom/android/server/accessibility/gestures/TouchExplorer;)Lcom/android/server/accessibility/gestures/TouchExplorer$SendAccessibilityEventDelayed;
+PLcom/android/server/accessibility/gestures/TouchExplorer;->-$$Nest$fgetmSendTouchInteractionEndDelayed(Lcom/android/server/accessibility/gestures/TouchExplorer;)Lcom/android/server/accessibility/gestures/TouchExplorer$SendAccessibilityEventDelayed;
 PLcom/android/server/accessibility/gestures/TouchExplorer;-><init>(Landroid/content/Context;Lcom/android/server/accessibility/AccessibilityManagerService;)V
 PLcom/android/server/accessibility/gestures/TouchExplorer;-><init>(Landroid/content/Context;Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/gestures/GestureManifold;)V
 PLcom/android/server/accessibility/gestures/TouchExplorer;-><init>(Landroid/content/Context;Lcom/android/server/accessibility/AccessibilityManagerService;Lcom/android/server/accessibility/gestures/GestureManifold;Landroid/os/Handler;)V
-HPLcom/android/server/accessibility/gestures/TouchExplorer;->checkForMalformedEvent(Landroid/view/MotionEvent;)V
+PLcom/android/server/accessibility/gestures/TouchExplorer;->allPointersDownOnBottomEdge(Landroid/view/MotionEvent;)Z
+HPLcom/android/server/accessibility/gestures/TouchExplorer;->checkForMalformedEvent(Landroid/view/MotionEvent;)V+]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 PLcom/android/server/accessibility/gestures/TouchExplorer;->clear()V
 PLcom/android/server/accessibility/gestures/TouchExplorer;->clear(Landroid/view/MotionEvent;I)V
 PLcom/android/server/accessibility/gestures/TouchExplorer;->computeDownEventForDrag(Landroid/view/MotionEvent;)Landroid/view/MotionEvent;
 PLcom/android/server/accessibility/gestures/TouchExplorer;->computeDraggingPointerIdIfNeeded(Landroid/view/MotionEvent;)V
+PLcom/android/server/accessibility/gestures/TouchExplorer;->dispatchGesture(Landroid/accessibilityservice/AccessibilityGestureEvent;)V
+PLcom/android/server/accessibility/gestures/TouchExplorer;->endGestureDetection(Z)V
+PLcom/android/server/accessibility/gestures/TouchExplorer;->getDistanceToClosestEdge(FF)F
 HPLcom/android/server/accessibility/gestures/TouchExplorer;->handleActionDown(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
 PLcom/android/server/accessibility/gestures/TouchExplorer;->handleActionMoveStateTouchExploring(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
 HPLcom/android/server/accessibility/gestures/TouchExplorer;->handleActionMoveStateTouchInteracting(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
 PLcom/android/server/accessibility/gestures/TouchExplorer;->handleActionPointerDown(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
-PLcom/android/server/accessibility/gestures/TouchExplorer;->handleActionUp(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/gestures/TouchExplorer;->handleActionUp(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
 PLcom/android/server/accessibility/gestures/TouchExplorer;->handleMotionEventStateClear(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
 PLcom/android/server/accessibility/gestures/TouchExplorer;->handleMotionEventStateDelegating(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
-PLcom/android/server/accessibility/gestures/TouchExplorer;->handleMotionEventStateDragging(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/gestures/TouchExplorer;->handleMotionEventStateDragging(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
 PLcom/android/server/accessibility/gestures/TouchExplorer;->handleMotionEventStateTouchExploring(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
-PLcom/android/server/accessibility/gestures/TouchExplorer;->handleMotionEventStateTouchInteracting(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/gestures/TouchExplorer;->handleMotionEventStateTouchInteracting(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+HPLcom/android/server/accessibility/gestures/TouchExplorer;->isDraggingGesture(Landroid/view/MotionEvent;)Z
 PLcom/android/server/accessibility/gestures/TouchExplorer;->isSendMotionEventsEnabled()Z
-PLcom/android/server/accessibility/gestures/TouchExplorer;->onAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V
+HPLcom/android/server/accessibility/gestures/TouchExplorer;->onAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V
 PLcom/android/server/accessibility/gestures/TouchExplorer;->onDestroy()V
 PLcom/android/server/accessibility/gestures/TouchExplorer;->onDoubleTap()V
-PLcom/android/server/accessibility/gestures/TouchExplorer;->onDoubleTap(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)Z
+HPLcom/android/server/accessibility/gestures/TouchExplorer;->onDoubleTap(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)Z
+PLcom/android/server/accessibility/gestures/TouchExplorer;->onDoubleTapAndHold(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
+PLcom/android/server/accessibility/gestures/TouchExplorer;->onGestureCancelled(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)Z
+PLcom/android/server/accessibility/gestures/TouchExplorer;->onGestureCompleted(Landroid/accessibilityservice/AccessibilityGestureEvent;)Z
+PLcom/android/server/accessibility/gestures/TouchExplorer;->onGestureStarted()Z
 HPLcom/android/server/accessibility/gestures/TouchExplorer;->onMotionEvent(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
 PLcom/android/server/accessibility/gestures/TouchExplorer;->requestDelegating()V
 PLcom/android/server/accessibility/gestures/TouchExplorer;->requestDragging(I)V
@@ -4390,7 +4584,7 @@
 PLcom/android/server/accessibility/gestures/TouchExplorer;->setServiceDetectsGestures(Z)V
 PLcom/android/server/accessibility/gestures/TouchExplorer;->setTouchExplorationPassthroughRegion(Landroid/graphics/Region;)V
 PLcom/android/server/accessibility/gestures/TouchExplorer;->setTwoFingerPassthroughEnabled(Z)V
-PLcom/android/server/accessibility/gestures/TouchExplorer;->shouldPerformGestureDetection(Landroid/view/MotionEvent;)Z
+HPLcom/android/server/accessibility/gestures/TouchExplorer;->shouldPerformGestureDetection(Landroid/view/MotionEvent;)Z
 PLcom/android/server/accessibility/gestures/TouchState$PointerDownInfo;->-$$Nest$fgetmTime(Lcom/android/server/accessibility/gestures/TouchState$PointerDownInfo;)J
 PLcom/android/server/accessibility/gestures/TouchState$PointerDownInfo;->-$$Nest$fgetmX(Lcom/android/server/accessibility/gestures/TouchState$PointerDownInfo;)F
 PLcom/android/server/accessibility/gestures/TouchState$PointerDownInfo;->-$$Nest$fgetmY(Lcom/android/server/accessibility/gestures/TouchState$PointerDownInfo;)F
@@ -4398,34 +4592,36 @@
 PLcom/android/server/accessibility/gestures/TouchState$PointerDownInfo;->clear()V
 PLcom/android/server/accessibility/gestures/TouchState$PointerDownInfo;->set(FFJ)V
 PLcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;-><init>(Lcom/android/server/accessibility/gestures/TouchState;)V
-PLcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;->clear()V
+HPLcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;->clear()V
 PLcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;->findPrimaryPointerId()I
 PLcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;->getLastReceivedDownEdgeFlags()I
-PLcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;->getPrimaryPointerId()I
+HPLcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;->getPrimaryPointerId()I
 PLcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;->getReceivedPointerDownCount()I
 PLcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;->getReceivedPointerDownTime(I)J
 PLcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;->getReceivedPointerDownX(I)F
 PLcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;->getReceivedPointerDownY(I)F
-PLcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;->handleReceivedPointerDown(ILandroid/view/MotionEvent;)V
-PLcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;->handleReceivedPointerUp(ILandroid/view/MotionEvent;)V
+HPLcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;->handleReceivedPointerDown(ILandroid/view/MotionEvent;)V
+HPLcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;->handleReceivedPointerUp(ILandroid/view/MotionEvent;)V
 PLcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;->isReceivedPointerDown(I)Z
-PLcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;->onMotionEvent(Landroid/view/MotionEvent;)V
+HPLcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;->onMotionEvent(Landroid/view/MotionEvent;)V
 PLcom/android/server/accessibility/gestures/TouchState;-><init>(ILcom/android/server/accessibility/AccessibilityManagerService;)V
-PLcom/android/server/accessibility/gestures/TouchState;->clear()V
+HPLcom/android/server/accessibility/gestures/TouchState;->clear()V
 PLcom/android/server/accessibility/gestures/TouchState;->getInjectedPointerDownCount()I
 PLcom/android/server/accessibility/gestures/TouchState;->getLastInjectedDownEventTime()J
 PLcom/android/server/accessibility/gestures/TouchState;->getLastInjectedHoverEvent()Landroid/view/MotionEvent;
+PLcom/android/server/accessibility/gestures/TouchState;->getLastInjectedHoverEventForClick()Landroid/view/MotionEvent;
 PLcom/android/server/accessibility/gestures/TouchState;->getLastReceivedEvent()Landroid/view/MotionEvent;
 PLcom/android/server/accessibility/gestures/TouchState;->getLastReceivedPolicyFlags()I
 PLcom/android/server/accessibility/gestures/TouchState;->getLastReceivedRawEvent()Landroid/view/MotionEvent;
 PLcom/android/server/accessibility/gestures/TouchState;->getReceivedPointerTracker()Lcom/android/server/accessibility/gestures/TouchState$ReceivedPointerTracker;
 PLcom/android/server/accessibility/gestures/TouchState;->getState()I
 PLcom/android/server/accessibility/gestures/TouchState;->getStateSymbolicName(I)Ljava/lang/String;
-PLcom/android/server/accessibility/gestures/TouchState;->isClear()Z
+HPLcom/android/server/accessibility/gestures/TouchState;->isClear()Z
 PLcom/android/server/accessibility/gestures/TouchState;->isDelegating()Z
 PLcom/android/server/accessibility/gestures/TouchState;->isDragging()Z
+PLcom/android/server/accessibility/gestures/TouchState;->isGestureDetecting()Z
 PLcom/android/server/accessibility/gestures/TouchState;->isInjectedPointerDown(I)Z
-PLcom/android/server/accessibility/gestures/TouchState;->isServiceDetectingGestures()Z
+HPLcom/android/server/accessibility/gestures/TouchState;->isServiceDetectingGestures()Z
 PLcom/android/server/accessibility/gestures/TouchState;->isTouchExploring()Z
 PLcom/android/server/accessibility/gestures/TouchState;->isTouchInteracting()Z
 PLcom/android/server/accessibility/gestures/TouchState;->onInjectedAccessibilityEvent(I)V
@@ -4433,9 +4629,10 @@
 PLcom/android/server/accessibility/gestures/TouchState;->onReceivedAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V
 HPLcom/android/server/accessibility/gestures/TouchState;->onReceivedMotionEvent(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
 PLcom/android/server/accessibility/gestures/TouchState;->setServiceDetectsGestures(Z)V
-PLcom/android/server/accessibility/gestures/TouchState;->setState(I)V
+HPLcom/android/server/accessibility/gestures/TouchState;->setState(I)V
 PLcom/android/server/accessibility/gestures/TouchState;->startDelegating()V
 PLcom/android/server/accessibility/gestures/TouchState;->startDragging()V
+PLcom/android/server/accessibility/gestures/TouchState;->startGestureDetecting()V
 PLcom/android/server/accessibility/gestures/TouchState;->startTouchExploring()V
 PLcom/android/server/accessibility/gestures/TouchState;->startTouchInteracting()V
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationController$$ExternalSyntheticLambda0;-><init>()V
@@ -4451,6 +4648,8 @@
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationController$DisplayMagnification$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationController$DisplayMagnification$$ExternalSyntheticLambda1;-><init>()V
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationController$DisplayMagnification$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/accessibility/magnification/FullScreenMagnificationController$DisplayMagnification$$ExternalSyntheticLambda2;-><init>()V
+PLcom/android/server/accessibility/magnification/FullScreenMagnificationController$DisplayMagnification$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationController$DisplayMagnification$$ExternalSyntheticLambda3;-><init>()V
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationController$DisplayMagnification$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationController$DisplayMagnification$$ExternalSyntheticLambda4;-><init>()V
@@ -4478,6 +4677,7 @@
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationController$DisplayMagnification;->isRegistered()Z
 HPLcom/android/server/accessibility/magnification/FullScreenMagnificationController$DisplayMagnification;->magnificationRegionContains(FF)Z
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationController$DisplayMagnification;->offsetMagnifiedRegion(FFI)V
+PLcom/android/server/accessibility/magnification/FullScreenMagnificationController$DisplayMagnification;->onDisplaySizeChanged()V
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationController$DisplayMagnification;->onImeWindowVisibilityChanged(Z)V
 HPLcom/android/server/accessibility/magnification/FullScreenMagnificationController$DisplayMagnification;->onMagnificationChangedLocked()V
 HPLcom/android/server/accessibility/magnification/FullScreenMagnificationController$DisplayMagnification;->onMagnificationRegionChanged(Landroid/graphics/Region;)V
@@ -4537,7 +4737,7 @@
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationController;->onRectangleOnScreenRequested(IIIII)V
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationController;->onScreenTurnedOff()V
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationController;->persistScale(I)V
-PLcom/android/server/accessibility/magnification/FullScreenMagnificationController;->register(I)V
+HPLcom/android/server/accessibility/magnification/FullScreenMagnificationController;->register(I)V
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationController;->reset(ILandroid/view/accessibility/MagnificationAnimationCallback;)Z
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationController;->reset(IZ)Z
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationController;->resetAllIfNeeded(I)V
@@ -4546,6 +4746,7 @@
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationController;->resetIfNeeded(IZ)Z
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationController;->setCenter(IFFZI)Z
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationController;->setForceShowMagnifiableBounds(IZ)V
+PLcom/android/server/accessibility/magnification/FullScreenMagnificationController;->setMagnificationFollowTypingEnabled(Z)V
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationController;->setScale(IFFFZI)Z
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationController;->setScaleAndCenter(IFFFLandroid/view/accessibility/MagnificationAnimationCallback;I)Z
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationController;->setScaleAndCenter(IFFFZI)Z
@@ -4554,7 +4755,7 @@
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationController;->unregister(I)V
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationController;->unregisterAll()V
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationController;->unregisterCallbackLocked(IZ)V
-PLcom/android/server/accessibility/magnification/FullScreenMagnificationController;->unregisterLocked(IZ)V
+HPLcom/android/server/accessibility/magnification/FullScreenMagnificationController;->unregisterLocked(IZ)V
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler$DelegatingState;-><init>(Lcom/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler;)V
 HPLcom/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler$DelegatingState;->onMotionEvent(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V+]Lcom/android/server/accessibility/BaseEventStreamTransformation;Lcom/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler;]Lcom/android/server/accessibility/magnification/MagnificationGestureHandler;Lcom/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 PLcom/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler$DetectingState;-><init>(Lcom/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler;Landroid/content/Context;)V
@@ -4648,15 +4849,15 @@
 PLcom/android/server/accessibility/magnification/MagnificationController;->assignMagnificationWindowManagerDelegateByMode(II)V
 PLcom/android/server/accessibility/magnification/MagnificationController;->disableFullScreenMagnificationIfNeeded(I)V
 PLcom/android/server/accessibility/magnification/MagnificationController;->disableWindowMagnificationIfNeeded(I)V
-HPLcom/android/server/accessibility/magnification/MagnificationController;->getCurrentMagnificationCenterLocked(II)Landroid/graphics/PointF;
-HPLcom/android/server/accessibility/magnification/MagnificationController;->getDisableMagnificationEndRunnableLocked(I)Lcom/android/server/accessibility/magnification/MagnificationController$DisableMagnificationCallback;
+HSPLcom/android/server/accessibility/magnification/MagnificationController;->getCurrentMagnificationCenterLocked(II)Landroid/graphics/PointF;
+HSPLcom/android/server/accessibility/magnification/MagnificationController;->getDisableMagnificationEndRunnableLocked(I)Lcom/android/server/accessibility/magnification/MagnificationController$DisableMagnificationCallback;
 PLcom/android/server/accessibility/magnification/MagnificationController;->getFullScreenMagnificationController()Lcom/android/server/accessibility/magnification/FullScreenMagnificationController;
 PLcom/android/server/accessibility/magnification/MagnificationController;->getLastMagnificationActivatedMode(I)I
 PLcom/android/server/accessibility/magnification/MagnificationController;->getTargetModeScaleFromCurrentMagnification(II)F
-HPLcom/android/server/accessibility/magnification/MagnificationController;->getWindowMagnificationMgr()Lcom/android/server/accessibility/magnification/WindowMagnificationManager;
+HSPLcom/android/server/accessibility/magnification/MagnificationController;->getWindowMagnificationMgr()Lcom/android/server/accessibility/magnification/WindowMagnificationManager;
 PLcom/android/server/accessibility/magnification/MagnificationController;->handleUserInteractionChanged(II)V
 HPLcom/android/server/accessibility/magnification/MagnificationController;->isActivated(II)Z
-PLcom/android/server/accessibility/magnification/MagnificationController;->isFullScreenMagnificationControllerInitialized()Z
+HSPLcom/android/server/accessibility/magnification/MagnificationController;->isFullScreenMagnificationControllerInitialized()Z
 PLcom/android/server/accessibility/magnification/MagnificationController;->logMagnificationModeWithIme(I)V
 PLcom/android/server/accessibility/magnification/MagnificationController;->logMagnificationModeWithImeOnIfNeeded(I)V
 PLcom/android/server/accessibility/magnification/MagnificationController;->logMagnificationUsageState(IJ)V
@@ -4674,13 +4875,14 @@
 PLcom/android/server/accessibility/magnification/MagnificationController;->onWindowMagnificationActivationState(IZ)V
 PLcom/android/server/accessibility/magnification/MagnificationController;->setCurrentMagnificationModeAndSwitchDelegate(II)V
 PLcom/android/server/accessibility/magnification/MagnificationController;->setDisableMagnificationCallbackLocked(ILcom/android/server/accessibility/magnification/MagnificationController$DisableMagnificationCallback;)V
-PLcom/android/server/accessibility/magnification/MagnificationController;->setMagnificationCapabilities(I)V
+HSPLcom/android/server/accessibility/magnification/MagnificationController;->setMagnificationCapabilities(I)V
+PLcom/android/server/accessibility/magnification/MagnificationController;->setMagnificationFollowTypingEnabled(Z)V
 PLcom/android/server/accessibility/magnification/MagnificationController;->setTransitionState(Ljava/lang/Integer;Ljava/lang/Integer;)V
 HPLcom/android/server/accessibility/magnification/MagnificationController;->shouldNotifyMagnificationChange(II)Z
-PLcom/android/server/accessibility/magnification/MagnificationController;->supportWindowMagnification()Z
-HPLcom/android/server/accessibility/magnification/MagnificationController;->transitionMagnificationModeLocked(IILcom/android/server/accessibility/magnification/MagnificationController$TransitionCallBack;)V
+HSPLcom/android/server/accessibility/magnification/MagnificationController;->supportWindowMagnification()Z
+HSPLcom/android/server/accessibility/magnification/MagnificationController;->transitionMagnificationModeLocked(IILcom/android/server/accessibility/magnification/MagnificationController$TransitionCallBack;)V
 PLcom/android/server/accessibility/magnification/MagnificationController;->updateMagnificationButton(II)V
-PLcom/android/server/accessibility/magnification/MagnificationController;->updateUserIdIfNeeded(I)V
+HSPLcom/android/server/accessibility/magnification/MagnificationController;->updateUserIdIfNeeded(I)V
 PLcom/android/server/accessibility/magnification/MagnificationGestureHandler;-><clinit>()V
 PLcom/android/server/accessibility/magnification/MagnificationGestureHandler;-><init>(IZZLcom/android/server/accessibility/AccessibilityTraceManager;Lcom/android/server/accessibility/magnification/MagnificationGestureHandler$Callback;)V
 HPLcom/android/server/accessibility/magnification/MagnificationGestureHandler;->dispatchTransformedEvent(Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
@@ -4703,7 +4905,7 @@
 PLcom/android/server/accessibility/magnification/MagnificationProcessor;->getCurrentMagnificationRegion(ILandroid/graphics/Region;Z)V
 PLcom/android/server/accessibility/magnification/MagnificationProcessor;->getFullscreenMagnificationRegion(ILandroid/graphics/Region;Z)V
 PLcom/android/server/accessibility/magnification/MagnificationProcessor;->getIdOfLastServiceToMagnify(II)I
-PLcom/android/server/accessibility/magnification/MagnificationProcessor;->getMagnificationConfig(I)Landroid/accessibilityservice/MagnificationConfig;
+HPLcom/android/server/accessibility/magnification/MagnificationProcessor;->getMagnificationConfig(I)Landroid/accessibilityservice/MagnificationConfig;
 PLcom/android/server/accessibility/magnification/MagnificationProcessor;->isRegistered(I)Z
 PLcom/android/server/accessibility/magnification/MagnificationProcessor;->register(I)V
 PLcom/android/server/accessibility/magnification/MagnificationProcessor;->registerDisplayMagnificationIfNeeded(IZ)Z
@@ -4731,7 +4933,7 @@
 PLcom/android/server/accessibility/magnification/PanningScalingHandler;-><clinit>()V
 PLcom/android/server/accessibility/magnification/PanningScalingHandler;-><init>(Landroid/content/Context;FFZLcom/android/server/accessibility/magnification/PanningScalingHandler$MagnificationDelegate;)V
 PLcom/android/server/accessibility/magnification/PanningScalingHandler;->onScaleBegin(Landroid/view/ScaleGestureDetector;)Z
-PLcom/android/server/accessibility/magnification/PanningScalingHandler;->onScroll(Landroid/view/MotionEvent;Landroid/view/MotionEvent;FF)Z
+HPLcom/android/server/accessibility/magnification/PanningScalingHandler;->onScroll(Landroid/view/MotionEvent;Landroid/view/MotionEvent;FF)Z
 HPLcom/android/server/accessibility/magnification/PanningScalingHandler;->onTouchEvent(Landroid/view/MotionEvent;)V
 PLcom/android/server/accessibility/magnification/SimpleSwipe;-><init>(Landroid/content/Context;)V
 PLcom/android/server/accessibility/magnification/SimpleSwipe;->clear()V
@@ -4774,7 +4976,7 @@
 HPLcom/android/server/accessibility/magnification/WindowMagnificationGestureHandler;->$r8$lambda$C-j8YWNpgczPOXCikGaWStgFIMQ(Lcom/android/server/accessibility/magnification/WindowMagnificationGestureHandler;Landroid/view/MotionEvent;Landroid/view/MotionEvent;I)V
 PLcom/android/server/accessibility/magnification/WindowMagnificationGestureHandler;->-$$Nest$fgetmMotionEventDispatcherDelegate(Lcom/android/server/accessibility/magnification/WindowMagnificationGestureHandler;)Lcom/android/server/accessibility/magnification/MotionEventDispatcherDelegate;
 PLcom/android/server/accessibility/magnification/WindowMagnificationGestureHandler;->-$$Nest$fgetmWindowMagnificationMgr(Lcom/android/server/accessibility/magnification/WindowMagnificationGestureHandler;)Lcom/android/server/accessibility/magnification/WindowMagnificationManager;
-PLcom/android/server/accessibility/magnification/WindowMagnificationGestureHandler;->-$$Nest$mtransitionTo(Lcom/android/server/accessibility/magnification/WindowMagnificationGestureHandler;Lcom/android/server/accessibility/magnification/WindowMagnificationGestureHandler$State;)V
+HPLcom/android/server/accessibility/magnification/WindowMagnificationGestureHandler;->-$$Nest$mtransitionTo(Lcom/android/server/accessibility/magnification/WindowMagnificationGestureHandler;Lcom/android/server/accessibility/magnification/WindowMagnificationGestureHandler$State;)V
 PLcom/android/server/accessibility/magnification/WindowMagnificationGestureHandler;->-$$Nest$sfgetDEBUG_DETECTING()Z
 PLcom/android/server/accessibility/magnification/WindowMagnificationGestureHandler;-><clinit>()V
 PLcom/android/server/accessibility/magnification/WindowMagnificationGestureHandler;-><init>(Landroid/content/Context;Lcom/android/server/accessibility/magnification/WindowMagnificationManager;Lcom/android/server/accessibility/AccessibilityTraceManager;Lcom/android/server/accessibility/magnification/MagnificationGestureHandler$Callback;ZZI)V
@@ -4790,7 +4992,7 @@
 PLcom/android/server/accessibility/magnification/WindowMagnificationGestureHandler;->resetToDetectState()V
 PLcom/android/server/accessibility/magnification/WindowMagnificationGestureHandler;->toggleMagnification(FFI)V
 HPLcom/android/server/accessibility/magnification/WindowMagnificationGestureHandler;->transitionTo(Lcom/android/server/accessibility/magnification/WindowMagnificationGestureHandler$State;)V
-PLcom/android/server/accessibility/magnification/WindowMagnificationManager$1;-><init>(Lcom/android/server/accessibility/magnification/WindowMagnificationManager;)V
+HSPLcom/android/server/accessibility/magnification/WindowMagnificationManager$1;-><init>(Lcom/android/server/accessibility/magnification/WindowMagnificationManager;)V
 PLcom/android/server/accessibility/magnification/WindowMagnificationManager$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/accessibility/magnification/WindowMagnificationManager$ConnectionCallback;->-$$Nest$fputmExpiredDeathRecipient(Lcom/android/server/accessibility/magnification/WindowMagnificationManager$ConnectionCallback;Z)V
 PLcom/android/server/accessibility/magnification/WindowMagnificationManager$ConnectionCallback;-><init>(Lcom/android/server/accessibility/magnification/WindowMagnificationManager;)V
@@ -4819,8 +5021,8 @@
 PLcom/android/server/accessibility/magnification/WindowMagnificationManager;->-$$Nest$fgetmWindowMagnifiers(Lcom/android/server/accessibility/magnification/WindowMagnificationManager;)Landroid/util/SparseArray;
 PLcom/android/server/accessibility/magnification/WindowMagnificationManager;->-$$Nest$mdisableWindowMagnificationInternal(Lcom/android/server/accessibility/magnification/WindowMagnificationManager;ILandroid/view/accessibility/MagnificationAnimationCallback;)Z
 PLcom/android/server/accessibility/magnification/WindowMagnificationManager;->-$$Nest$menableWindowMagnificationInternal(Lcom/android/server/accessibility/magnification/WindowMagnificationManager;IFFFFFLandroid/view/accessibility/MagnificationAnimationCallback;)Z
-PLcom/android/server/accessibility/magnification/WindowMagnificationManager;-><init>(Landroid/content/Context;Ljava/lang/Object;Lcom/android/server/accessibility/magnification/WindowMagnificationManager$Callback;Lcom/android/server/accessibility/AccessibilityTraceManager;Lcom/android/server/accessibility/magnification/MagnificationScaleProvider;)V
-PLcom/android/server/accessibility/magnification/WindowMagnificationManager;->connectionStateToString(I)Ljava/lang/String;
+HSPLcom/android/server/accessibility/magnification/WindowMagnificationManager;-><init>(Landroid/content/Context;Ljava/lang/Object;Lcom/android/server/accessibility/magnification/WindowMagnificationManager$Callback;Lcom/android/server/accessibility/AccessibilityTraceManager;Lcom/android/server/accessibility/magnification/MagnificationScaleProvider;)V
+HSPLcom/android/server/accessibility/magnification/WindowMagnificationManager;->connectionStateToString(I)Ljava/lang/String;
 PLcom/android/server/accessibility/magnification/WindowMagnificationManager;->createWindowMagnifier(I)Lcom/android/server/accessibility/magnification/WindowMagnificationManager$WindowMagnifier;
 PLcom/android/server/accessibility/magnification/WindowMagnificationManager;->disableAllWindowMagnifiers()V
 PLcom/android/server/accessibility/magnification/WindowMagnificationManager;->disableWindowMagnification(IZ)Z
@@ -4839,17 +5041,18 @@
 PLcom/android/server/accessibility/magnification/WindowMagnificationManager;->isConnected()Z
 PLcom/android/server/accessibility/magnification/WindowMagnificationManager;->isPositionInSourceBounds(IFF)Z
 PLcom/android/server/accessibility/magnification/WindowMagnificationManager;->isTrackingTypingFocusEnabled(I)Z
-HPLcom/android/server/accessibility/magnification/WindowMagnificationManager;->isWindowMagnifierEnabled(I)Z
+HSPLcom/android/server/accessibility/magnification/WindowMagnificationManager;->isWindowMagnifierEnabled(I)Z
 PLcom/android/server/accessibility/magnification/WindowMagnificationManager;->moveWindowMagnifierToPositionInternal(IFFLandroid/view/accessibility/MagnificationAnimationCallback;)Z
 PLcom/android/server/accessibility/magnification/WindowMagnificationManager;->onDisplayRemoved(I)V
 PLcom/android/server/accessibility/magnification/WindowMagnificationManager;->onImeWindowVisibilityChanged(IZ)V
 PLcom/android/server/accessibility/magnification/WindowMagnificationManager;->onRectangleOnScreenRequested(IIIII)V
-PLcom/android/server/accessibility/magnification/WindowMagnificationManager;->removeMagnificationButton(I)Z
-HPLcom/android/server/accessibility/magnification/WindowMagnificationManager;->requestConnection(Z)Z
+HSPLcom/android/server/accessibility/magnification/WindowMagnificationManager;->removeMagnificationButton(I)Z
+HSPLcom/android/server/accessibility/magnification/WindowMagnificationManager;->requestConnection(Z)Z
 PLcom/android/server/accessibility/magnification/WindowMagnificationManager;->requestConnectionInternal(Z)Z
 PLcom/android/server/accessibility/magnification/WindowMagnificationManager;->resetAllIfNeeded(I)V
 PLcom/android/server/accessibility/magnification/WindowMagnificationManager;->setConnection(Landroid/view/accessibility/IWindowMagnificationConnection;)V
 PLcom/android/server/accessibility/magnification/WindowMagnificationManager;->setConnectionState(I)V
+PLcom/android/server/accessibility/magnification/WindowMagnificationManager;->setMagnificationFollowTypingEnabled(Z)V
 PLcom/android/server/accessibility/magnification/WindowMagnificationManager;->setTrackingTypingFocusEnabled(IZ)V
 PLcom/android/server/accessibility/magnification/WindowMagnificationManager;->showMagnificationButton(II)Z
 PLcom/android/server/accessibility/magnification/WindowMagnificationPromptController$1;-><init>(Lcom/android/server/accessibility/magnification/WindowMagnificationPromptController;Landroid/os/Handler;)V
@@ -4892,6 +5095,7 @@
 PLcom/android/server/accounts/AccountManagerService$12;->run()V
 PLcom/android/server/accounts/AccountManagerService$13;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;ZZLjava/lang/String;ZZLandroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)V
 PLcom/android/server/accounts/AccountManagerService$13;->run()V
+PLcom/android/server/accounts/AccountManagerService$13;->toDebugString(J)Ljava/lang/String;
 PLcom/android/server/accounts/AccountManagerService$17;-><init>(Lcom/android/server/accounts/AccountManagerService;Landroid/accounts/Account;ILandroid/os/RemoteCallback;)V
 PLcom/android/server/accounts/AccountManagerService$17;->handleAuthenticatorResponse(Z)V
 PLcom/android/server/accounts/AccountManagerService$17;->onResult(Landroid/os/Bundle;)V
@@ -4905,7 +5109,7 @@
 PLcom/android/server/accounts/AccountManagerService$3;->onPackageAdded(Ljava/lang/String;I)V
 PLcom/android/server/accounts/AccountManagerService$3;->onPackageUpdateFinished(Ljava/lang/String;I)V
 HSPLcom/android/server/accounts/AccountManagerService$4;-><init>(Lcom/android/server/accounts/AccountManagerService;)V
-PLcom/android/server/accounts/AccountManagerService$4;->onOpChanged(ILjava/lang/String;)V
+HSPLcom/android/server/accounts/AccountManagerService$4;->onOpChanged(ILjava/lang/String;)V
 PLcom/android/server/accounts/AccountManagerService$5;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;ZZLjava/lang/String;ZLandroid/accounts/Account;Landroid/accounts/IAccountManagerResponse;Lcom/android/server/accounts/AccountManagerService$UserAccounts;I)V
 PLcom/android/server/accounts/AccountManagerService$5;->onResult(Landroid/os/Bundle;)V
 PLcom/android/server/accounts/AccountManagerService$5;->run()V
@@ -4919,6 +5123,7 @@
 PLcom/android/server/accounts/AccountManagerService$8;->toDebugString(J)Ljava/lang/String;
 PLcom/android/server/accounts/AccountManagerService$9;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;ZZLjava/lang/String;ZZLjava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;Ljava/lang/String;)V
 PLcom/android/server/accounts/AccountManagerService$9;->run()V
+PLcom/android/server/accounts/AccountManagerService$9;->toDebugString(J)Ljava/lang/String;
 HSPLcom/android/server/accounts/AccountManagerService$AccountManagerInternalImpl;-><init>(Lcom/android/server/accounts/AccountManagerService;)V
 HSPLcom/android/server/accounts/AccountManagerService$AccountManagerInternalImpl;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$AccountManagerInternalImpl-IA;)V
 HSPLcom/android/server/accounts/AccountManagerService$AccountManagerInternalImpl;->addOnAppPermissionChangeListener(Landroid/accounts/AccountManagerInternal$OnAppPermissionChangeListener;)V
@@ -4926,10 +5131,10 @@
 HPLcom/android/server/accounts/AccountManagerService$AccountManagerInternalImpl;->hasAccountAccess(Landroid/accounts/Account;I)Z
 PLcom/android/server/accounts/AccountManagerService$AccountManagerInternalImpl;->requestAccountAccess(Landroid/accounts/Account;Ljava/lang/String;ILandroid/os/RemoteCallback;)V
 HPLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;[Ljava/lang/String;ILjava/lang/String;Z)V
-HPLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;->checkAccount()V
-HPLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;->onResult(Landroid/os/Bundle;)V
-HPLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;->run()V
-HPLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;->sendResult()V
+HPLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;->checkAccount()V+]Landroid/accounts/IAccountAuthenticator;Landroid/accounts/IAccountAuthenticator$Stub$Proxy;]Lcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;Lcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;
+HPLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;->onResult(Landroid/os/Bundle;)V+]Landroid/os/Bundle;Landroid/os/Bundle;]Lcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;Lcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;->run()V+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Lcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;Lcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;
+HPLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;->sendResult()V+]Lcom/android/server/accounts/AccountManagerService$Session;Lcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/accounts/IAccountManagerResponse;Landroid/accounts/IAccountManagerResponse$Stub$Proxy;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 PLcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;->toDebugString(J)Ljava/lang/String;
 HSPLcom/android/server/accounts/AccountManagerService$Injector;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/accounts/AccountManagerService$Injector;->addLocalService(Landroid/accounts/AccountManagerInternal;)V
@@ -4938,32 +5143,32 @@
 HSPLcom/android/server/accounts/AccountManagerService$Injector;->getContext()Landroid/content/Context;
 HSPLcom/android/server/accounts/AccountManagerService$Injector;->getDeDatabaseName(I)Ljava/lang/String;
 HSPLcom/android/server/accounts/AccountManagerService$Injector;->getMessageHandlerLooper()Landroid/os/Looper;
-HPLcom/android/server/accounts/AccountManagerService$Injector;->getNotificationManager()Landroid/app/INotificationManager;
+HSPLcom/android/server/accounts/AccountManagerService$Injector;->getNotificationManager()Landroid/app/INotificationManager;
 HSPLcom/android/server/accounts/AccountManagerService$Injector;->getPreNDatabaseName(I)Ljava/lang/String;
 HSPLcom/android/server/accounts/AccountManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/accounts/AccountManagerService$Lifecycle;->onStart()V
 PLcom/android/server/accounts/AccountManagerService$Lifecycle;->onUserStopping(Lcom/android/server/SystemService$TargetUser;)V
 PLcom/android/server/accounts/AccountManagerService$Lifecycle;->onUserUnlocking(Lcom/android/server/SystemService$TargetUser;)V
 HSPLcom/android/server/accounts/AccountManagerService$MessageHandler;-><init>(Lcom/android/server/accounts/AccountManagerService;Landroid/os/Looper;)V
-HPLcom/android/server/accounts/AccountManagerService$NotificationId;->-$$Nest$fgetmId(Lcom/android/server/accounts/AccountManagerService$NotificationId;)I
-PLcom/android/server/accounts/AccountManagerService$NotificationId;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/server/accounts/AccountManagerService$NotificationId;->-$$Nest$fgetmId(Lcom/android/server/accounts/AccountManagerService$NotificationId;)I
+HSPLcom/android/server/accounts/AccountManagerService$NotificationId;-><init>(Ljava/lang/String;I)V
 PLcom/android/server/accounts/AccountManagerService$RemoveAccountSession;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;Z)V
 PLcom/android/server/accounts/AccountManagerService$RemoveAccountSession;->onResult(Landroid/os/Bundle;)V
 PLcom/android/server/accounts/AccountManagerService$RemoveAccountSession;->run()V
 HPLcom/android/server/accounts/AccountManagerService$Session;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;ZZLjava/lang/String;Z)V
-HPLcom/android/server/accounts/AccountManagerService$Session;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;ZZLjava/lang/String;ZZ)V
-HPLcom/android/server/accounts/AccountManagerService$Session;->bind()V
-HPLcom/android/server/accounts/AccountManagerService$Session;->bindToAuthenticator(Ljava/lang/String;)Z
+HPLcom/android/server/accounts/AccountManagerService$Session;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;ZZLjava/lang/String;ZZ)V+]Ljava/util/LinkedHashMap;Ljava/util/LinkedHashMap;]Landroid/os/IBinder;Landroid/os/BinderProxy;]Ljava/lang/Object;megamorphic_types]Landroid/accounts/IAccountManagerResponse;Landroid/accounts/IAccountManagerResponse$Stub$Proxy;
+HPLcom/android/server/accounts/AccountManagerService$Session;->bind()V+]Lcom/android/server/accounts/AccountManagerService$Session;megamorphic_types
+HPLcom/android/server/accounts/AccountManagerService$Session;->bindToAuthenticator(Ljava/lang/String;)Z+]Lcom/android/server/accounts/IAccountAuthenticatorCache;Lcom/android/server/accounts/AccountAuthenticatorCache;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/Intent;Landroid/content/Intent;
 PLcom/android/server/accounts/AccountManagerService$Session;->binderDied()V
 HPLcom/android/server/accounts/AccountManagerService$Session;->cancelTimeout()V
 HPLcom/android/server/accounts/AccountManagerService$Session;->checkKeyIntent(ILandroid/content/Intent;)Z
-HPLcom/android/server/accounts/AccountManagerService$Session;->close()V
+HPLcom/android/server/accounts/AccountManagerService$Session;->close()V+]Lcom/android/server/accounts/AccountManagerService$Session;megamorphic_types]Ljava/util/LinkedHashMap;Ljava/util/LinkedHashMap;]Ljava/lang/Object;megamorphic_types]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/accounts/IAccountManagerResponse;Landroid/accounts/IAccountManagerResponse$Stub$Proxy;
 HPLcom/android/server/accounts/AccountManagerService$Session;->getResponseAndClose()Landroid/accounts/IAccountManagerResponse;
 HPLcom/android/server/accounts/AccountManagerService$Session;->isExportedSystemActivity(Landroid/content/pm/ActivityInfo;)Z
 PLcom/android/server/accounts/AccountManagerService$Session;->onError(ILjava/lang/String;)V
 PLcom/android/server/accounts/AccountManagerService$Session;->onRequestContinued()V
 HPLcom/android/server/accounts/AccountManagerService$Session;->onResult(Landroid/os/Bundle;)V
-HPLcom/android/server/accounts/AccountManagerService$Session;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HPLcom/android/server/accounts/AccountManagerService$Session;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V+]Lcom/android/server/accounts/AccountManagerService$Session;Lcom/android/server/accounts/AccountManagerService$RemoveAccountSession;,Lcom/android/server/accounts/AccountManagerService$TestFeaturesSession;,Lcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;,Lcom/android/server/accounts/AccountManagerService$8;
 PLcom/android/server/accounts/AccountManagerService$Session;->onServiceDisconnected(Landroid/content/ComponentName;)V
 PLcom/android/server/accounts/AccountManagerService$Session;->toDebugString()Ljava/lang/String;
 PLcom/android/server/accounts/AccountManagerService$Session;->toDebugString(J)Ljava/lang/String;
@@ -4972,11 +5177,11 @@
 PLcom/android/server/accounts/AccountManagerService$StartAccountSession;->onResult(Landroid/os/Bundle;)V
 HPLcom/android/server/accounts/AccountManagerService$TestFeaturesSession;-><init>(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;[Ljava/lang/String;)V
 HPLcom/android/server/accounts/AccountManagerService$TestFeaturesSession;->onResult(Landroid/os/Bundle;)V
-PLcom/android/server/accounts/AccountManagerService$TestFeaturesSession;->run()V
+HPLcom/android/server/accounts/AccountManagerService$TestFeaturesSession;->run()V
 PLcom/android/server/accounts/AccountManagerService$TestFeaturesSession;->toDebugString(J)Ljava/lang/String;
 HPLcom/android/server/accounts/AccountManagerService$UserAccounts;->-$$Nest$fgetaccountTokenCaches(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Lcom/android/server/accounts/TokenCache;
 HPLcom/android/server/accounts/AccountManagerService$UserAccounts;->-$$Nest$fgetauthTokenCache(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/Map;
-PLcom/android/server/accounts/AccountManagerService$UserAccounts;->-$$Nest$fgetcredentialsPermissionNotificationIds(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/HashMap;
+HSPLcom/android/server/accounts/AccountManagerService$UserAccounts;->-$$Nest$fgetcredentialsPermissionNotificationIds(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/HashMap;
 HPLcom/android/server/accounts/AccountManagerService$UserAccounts;->-$$Nest$fgetmReceiversForType(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/Map;
 PLcom/android/server/accounts/AccountManagerService$UserAccounts;->-$$Nest$fgetpreviousNameCache(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/HashMap;
 HPLcom/android/server/accounts/AccountManagerService$UserAccounts;->-$$Nest$fgetsigninRequiredNotificationIds(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/HashMap;
@@ -4988,21 +5193,21 @@
 PLcom/android/server/accounts/AccountManagerService;->$r8$lambda$Zd5rIkdqSc73-5BH_ZwCn3r8Tjk(Lcom/android/server/accounts/AccountManagerService;I)V
 PLcom/android/server/accounts/AccountManagerService;->$r8$lambda$tXc_lOb0S8tIHMjxxJbxGDQTKhQ(Lcom/android/server/accounts/AccountManagerService;I)V
 PLcom/android/server/accounts/AccountManagerService;->$r8$lambda$wwYzDkZteaaqYKajDk6nNX5cs_Q(Landroid/accounts/AccountManagerInternal$OnAppPermissionChangeListener;Landroid/accounts/Account;I)V
-PLcom/android/server/accounts/AccountManagerService;->-$$Nest$fgetmAppOpsManager(Lcom/android/server/accounts/AccountManagerService;)Landroid/app/AppOpsManager;
+HSPLcom/android/server/accounts/AccountManagerService;->-$$Nest$fgetmAppOpsManager(Lcom/android/server/accounts/AccountManagerService;)Landroid/app/AppOpsManager;
 HSPLcom/android/server/accounts/AccountManagerService;->-$$Nest$fgetmAppPermissionChangeListeners(Lcom/android/server/accounts/AccountManagerService;)Ljava/util/concurrent/CopyOnWriteArrayList;
 HPLcom/android/server/accounts/AccountManagerService;->-$$Nest$fgetmAuthenticatorCache(Lcom/android/server/accounts/AccountManagerService;)Lcom/android/server/accounts/IAccountAuthenticatorCache;
 PLcom/android/server/accounts/AccountManagerService;->-$$Nest$fgetmDateFormat(Lcom/android/server/accounts/AccountManagerService;)Ljava/text/SimpleDateFormat;
-PLcom/android/server/accounts/AccountManagerService;->-$$Nest$fgetmPackageManager(Lcom/android/server/accounts/AccountManagerService;)Landroid/content/pm/PackageManager;
+HSPLcom/android/server/accounts/AccountManagerService;->-$$Nest$fgetmPackageManager(Lcom/android/server/accounts/AccountManagerService;)Landroid/content/pm/PackageManager;
 HPLcom/android/server/accounts/AccountManagerService;->-$$Nest$fgetmSessions(Lcom/android/server/accounts/AccountManagerService;)Ljava/util/LinkedHashMap;
 PLcom/android/server/accounts/AccountManagerService;->-$$Nest$fgetmUsers(Lcom/android/server/accounts/AccountManagerService;)Landroid/util/SparseArray;
 PLcom/android/server/accounts/AccountManagerService;->-$$Nest$mcancelAccountAccessRequestNotificationIfNeeded(Lcom/android/server/accounts/AccountManagerService;IZ)V
-PLcom/android/server/accounts/AccountManagerService;->-$$Nest$mcancelAccountAccessRequestNotificationIfNeeded(Lcom/android/server/accounts/AccountManagerService;Ljava/lang/String;IZ)V
-PLcom/android/server/accounts/AccountManagerService;->-$$Nest$mcancelNotification(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$NotificationId;Landroid/os/UserHandle;)V
+HSPLcom/android/server/accounts/AccountManagerService;->-$$Nest$mcancelAccountAccessRequestNotificationIfNeeded(Lcom/android/server/accounts/AccountManagerService;Ljava/lang/String;IZ)V
+HPLcom/android/server/accounts/AccountManagerService;->-$$Nest$mcancelNotification(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$NotificationId;Landroid/os/UserHandle;)V
 PLcom/android/server/accounts/AccountManagerService;->-$$Nest$mcompleteCloningAccount(Lcom/android/server/accounts/AccountManagerService;Landroid/accounts/IAccountManagerResponse;Landroid/os/Bundle;Landroid/accounts/Account;Lcom/android/server/accounts/AccountManagerService$UserAccounts;I)V
 PLcom/android/server/accounts/AccountManagerService;->-$$Nest$mdoNotification(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/CharSequence;Landroid/content/Intent;Ljava/lang/String;I)V
 PLcom/android/server/accounts/AccountManagerService;->-$$Nest$mgetCredentialPermissionNotificationId(Lcom/android/server/accounts/AccountManagerService;Landroid/accounts/Account;Ljava/lang/String;I)Lcom/android/server/accounts/AccountManagerService$NotificationId;
-PLcom/android/server/accounts/AccountManagerService;->-$$Nest$mgetSigninRequiredNotificationId(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;)Lcom/android/server/accounts/AccountManagerService$NotificationId;
-PLcom/android/server/accounts/AccountManagerService;->-$$Nest$mhasAccountAccess(Lcom/android/server/accounts/AccountManagerService;Landroid/accounts/Account;Ljava/lang/String;I)Z
+HPLcom/android/server/accounts/AccountManagerService;->-$$Nest$mgetSigninRequiredNotificationId(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;)Lcom/android/server/accounts/AccountManagerService$NotificationId;
+HPLcom/android/server/accounts/AccountManagerService;->-$$Nest$mhasAccountAccess(Lcom/android/server/accounts/AccountManagerService;Landroid/accounts/Account;Ljava/lang/String;I)Z
 PLcom/android/server/accounts/AccountManagerService;->-$$Nest$misAccountPresentForCaller(Lcom/android/server/accounts/AccountManagerService;Ljava/lang/String;Ljava/lang/String;)Z
 HPLcom/android/server/accounts/AccountManagerService;->-$$Nest$misLocalUnlockedUser(Lcom/android/server/accounts/AccountManagerService;I)Z
 PLcom/android/server/accounts/AccountManagerService;->-$$Nest$mlogAddAccountMetrics(Lcom/android/server/accounts/AccountManagerService;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
@@ -5014,7 +5219,7 @@
 PLcom/android/server/accounts/AccountManagerService;->-$$Nest$mremoveVisibilityValuesForPackage(Lcom/android/server/accounts/AccountManagerService;Ljava/lang/String;)V
 PLcom/android/server/accounts/AccountManagerService;->-$$Nest$mresolveAccountVisibility(Lcom/android/server/accounts/AccountManagerService;Landroid/accounts/Account;Ljava/lang/String;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/lang/Integer;
 PLcom/android/server/accounts/AccountManagerService;->-$$Nest$msaveAuthTokenToDatabase(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)Z
-PLcom/android/server/accounts/AccountManagerService;->-$$Nest$msaveCachedToken(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;[BLjava/lang/String;Ljava/lang/String;J)V
+HPLcom/android/server/accounts/AccountManagerService;->-$$Nest$msaveCachedToken(Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;[BLjava/lang/String;Ljava/lang/String;J)V
 PLcom/android/server/accounts/AccountManagerService;->-$$Nest$msendResponse(Lcom/android/server/accounts/AccountManagerService;Landroid/accounts/IAccountManagerResponse;Landroid/os/Bundle;)V
 PLcom/android/server/accounts/AccountManagerService;->-$$Nest$mupdateLastAuthenticatedTime(Lcom/android/server/accounts/AccountManagerService;Landroid/accounts/Account;)Z
 HSPLcom/android/server/accounts/AccountManagerService;-><clinit>()V
@@ -5033,15 +5238,15 @@
 PLcom/android/server/accounts/AccountManagerService;->canUserModifyAccounts(II)Z
 PLcom/android/server/accounts/AccountManagerService;->canUserModifyAccountsForType(ILjava/lang/String;I)Z
 PLcom/android/server/accounts/AccountManagerService;->cancelAccountAccessRequestNotificationIfNeeded(IZ)V
-HPLcom/android/server/accounts/AccountManagerService;->cancelAccountAccessRequestNotificationIfNeeded(Landroid/accounts/Account;ILjava/lang/String;Z)V
+HSPLcom/android/server/accounts/AccountManagerService;->cancelAccountAccessRequestNotificationIfNeeded(Landroid/accounts/Account;ILjava/lang/String;Z)V
 PLcom/android/server/accounts/AccountManagerService;->cancelAccountAccessRequestNotificationIfNeeded(Landroid/accounts/Account;IZ)V
-PLcom/android/server/accounts/AccountManagerService;->cancelAccountAccessRequestNotificationIfNeeded(Ljava/lang/String;IZ)V
-HPLcom/android/server/accounts/AccountManagerService;->cancelNotification(Lcom/android/server/accounts/AccountManagerService$NotificationId;Landroid/os/UserHandle;)V
-HPLcom/android/server/accounts/AccountManagerService;->cancelNotification(Lcom/android/server/accounts/AccountManagerService$NotificationId;Ljava/lang/String;Landroid/os/UserHandle;)V
+HSPLcom/android/server/accounts/AccountManagerService;->cancelAccountAccessRequestNotificationIfNeeded(Ljava/lang/String;IZ)V
+HSPLcom/android/server/accounts/AccountManagerService;->cancelNotification(Lcom/android/server/accounts/AccountManagerService$NotificationId;Landroid/os/UserHandle;)V
+HSPLcom/android/server/accounts/AccountManagerService;->cancelNotification(Lcom/android/server/accounts/AccountManagerService$NotificationId;Ljava/lang/String;Landroid/os/UserHandle;)V
 PLcom/android/server/accounts/AccountManagerService;->checkGetAccountsPermission(Ljava/lang/String;I)Z
-HPLcom/android/server/accounts/AccountManagerService;->checkPackageSignature(Ljava/lang/String;II)I+]Lcom/android/server/accounts/IAccountAuthenticatorCache;Lcom/android/server/accounts/AccountAuthenticatorCache;]Ljava/util/Collection;Ljava/util/Collections$UnmodifiableCollection;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
+HSPLcom/android/server/accounts/AccountManagerService;->checkPackageSignature(Ljava/lang/String;II)I+]Lcom/android/server/accounts/IAccountAuthenticatorCache;Lcom/android/server/accounts/AccountAuthenticatorCache;]Ljava/util/Collection;Ljava/util/Collections$UnmodifiableCollection;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 PLcom/android/server/accounts/AccountManagerService;->checkPermissionAndNote(Ljava/lang/String;I[Ljava/lang/String;)Z
-PLcom/android/server/accounts/AccountManagerService;->checkReadAccountsPermitted(ILjava/lang/String;ILjava/lang/String;)V
+HPLcom/android/server/accounts/AccountManagerService;->checkReadAccountsPermitted(ILjava/lang/String;ILjava/lang/String;)V
 HPLcom/android/server/accounts/AccountManagerService;->checkReadContactsPermission(Ljava/lang/String;I)Z
 PLcom/android/server/accounts/AccountManagerService;->completeCloningAccount(Landroid/accounts/IAccountManagerResponse;Landroid/os/Bundle;Landroid/accounts/Account;Lcom/android/server/accounts/AccountManagerService$UserAccounts;I)V
 PLcom/android/server/accounts/AccountManagerService;->confirmCredentialsAsUser(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;Landroid/os/Bundle;ZI)V
@@ -5054,65 +5259,68 @@
 HSPLcom/android/server/accounts/AccountManagerService;->filterSharedAccounts(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Ljava/util/Map;ILjava/lang/String;)Ljava/util/Map;+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Landroid/os/UserManager;Landroid/os/UserManager;
 PLcom/android/server/accounts/AccountManagerService;->findPackagesPerVisibility(Ljava/util/Map;)[Ljava/lang/String;
 PLcom/android/server/accounts/AccountManagerService;->finishSessionAsUser(Landroid/accounts/IAccountManagerResponse;Landroid/os/Bundle;ZLandroid/os/Bundle;I)V
+PLcom/android/server/accounts/AccountManagerService;->getAccountByTypeAndFeatures(Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/accounts/AccountManagerService;->getAccountRemovedReceivers(Landroid/accounts/Account;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/List;
 PLcom/android/server/accounts/AccountManagerService;->getAccountVisibility(Landroid/accounts/Account;Ljava/lang/String;)I
-HPLcom/android/server/accounts/AccountManagerService;->getAccountVisibilityFromCache(Landroid/accounts/Account;Ljava/lang/String;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Ljava/util/Map;Ljava/util/HashMap;
-HPLcom/android/server/accounts/AccountManagerService;->getAccounts(ILjava/lang/String;)[Landroid/accounts/Account;
-HPLcom/android/server/accounts/AccountManagerService;->getAccounts([I)[Landroid/accounts/AccountAndUser;
+HSPLcom/android/server/accounts/AccountManagerService;->getAccountVisibilityFromCache(Landroid/accounts/Account;Ljava/lang/String;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Ljava/util/Map;Ljava/util/HashMap;
+HPLcom/android/server/accounts/AccountManagerService;->getAccounts(ILjava/lang/String;)[Landroid/accounts/Account;+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
+HPLcom/android/server/accounts/AccountManagerService;->getAccounts([I)[Landroid/accounts/AccountAndUser;+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/accounts/AccountManagerService;->getAccountsAndVisibilityForPackage(Ljava/lang/String;Ljava/lang/String;)Ljava/util/Map;
-HPLcom/android/server/accounts/AccountManagerService;->getAccountsAndVisibilityForPackage(Ljava/lang/String;Ljava/util/List;Ljava/lang/Integer;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/Map;
+HPLcom/android/server/accounts/AccountManagerService;->getAccountsAndVisibilityForPackage(Ljava/lang/String;Ljava/util/List;Ljava/lang/Integer;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/Map;+]Ljava/util/HashMap;Ljava/util/LinkedHashMap;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Map;Ljava/util/LinkedHashMap;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLcom/android/server/accounts/AccountManagerService;->getAccountsAsUser(Ljava/lang/String;ILjava/lang/String;)[Landroid/accounts/Account;+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
 HSPLcom/android/server/accounts/AccountManagerService;->getAccountsAsUserForPackage(Ljava/lang/String;ILjava/lang/String;ILjava/lang/String;Z)[Landroid/accounts/Account;+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;
-HPLcom/android/server/accounts/AccountManagerService;->getAccountsByFeatures(Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
-HPLcom/android/server/accounts/AccountManagerService;->getAccountsByTypeForPackage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)[Landroid/accounts/Account;+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
+HPLcom/android/server/accounts/AccountManagerService;->getAccountsByFeatures(Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V+]Lcom/android/server/accounts/AccountManagerService$Session;Lcom/android/server/accounts/AccountManagerService$GetAccountsByTypeAndFeatureSession;]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
+HPLcom/android/server/accounts/AccountManagerService;->getAccountsByTypeForPackage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)[Landroid/accounts/Account;+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+PLcom/android/server/accounts/AccountManagerService;->getAccountsForPackage(Ljava/lang/String;ILjava/lang/String;)[Landroid/accounts/Account;
 HSPLcom/android/server/accounts/AccountManagerService;->getAccountsFromCache(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Ljava/lang/String;ILjava/lang/String;Z)[Landroid/accounts/Account;+]Ljava/util/HashMap;Ljava/util/LinkedHashMap;]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Ljava/util/Collection;Ljava/util/LinkedHashMap$LinkedValues;]Ljava/util/Iterator;Ljava/util/LinkedHashMap$LinkedValueIterator;
 HSPLcom/android/server/accounts/AccountManagerService;->getAccountsInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;ILjava/lang/String;Ljava/util/List;Z)[Landroid/accounts/Account;+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
-HPLcom/android/server/accounts/AccountManagerService;->getAllAccounts()[Landroid/accounts/AccountAndUser;
+HPLcom/android/server/accounts/AccountManagerService;->getAllAccounts()[Landroid/accounts/AccountAndUser;+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/UserManager;Landroid/os/UserManager;
 PLcom/android/server/accounts/AccountManagerService;->getApplicationLabel(Ljava/lang/String;I)Ljava/lang/String;
 HPLcom/android/server/accounts/AccountManagerService;->getAuthToken(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;Ljava/lang/String;ZZLandroid/os/Bundle;)V
 HSPLcom/android/server/accounts/AccountManagerService;->getAuthenticatorTypeAndUIDForUser(Lcom/android/server/accounts/IAccountAuthenticatorCache;I)Ljava/util/HashMap;
 HPLcom/android/server/accounts/AccountManagerService;->getAuthenticatorTypes(I)[Landroid/accounts/AuthenticatorDescription;+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;
 HPLcom/android/server/accounts/AccountManagerService;->getAuthenticatorTypesInternal(I)[Landroid/accounts/AuthenticatorDescription;+]Lcom/android/server/accounts/IAccountAuthenticatorCache;Lcom/android/server/accounts/AccountAuthenticatorCache;]Ljava/util/Collection;Ljava/util/Collections$UnmodifiableCollection;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;
 PLcom/android/server/accounts/AccountManagerService;->getContextForUser(Landroid/os/UserHandle;)Landroid/content/Context;
-HPLcom/android/server/accounts/AccountManagerService;->getCredentialPermissionNotificationId(Landroid/accounts/Account;Ljava/lang/String;I)Lcom/android/server/accounts/AccountManagerService$NotificationId;
+HSPLcom/android/server/accounts/AccountManagerService;->getCredentialPermissionNotificationId(Landroid/accounts/Account;Ljava/lang/String;I)Lcom/android/server/accounts/AccountManagerService$NotificationId;
 HPLcom/android/server/accounts/AccountManagerService;->getPackageNameForUid(I)Ljava/lang/String;+]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
-HPLcom/android/server/accounts/AccountManagerService;->getPackagesAndVisibilityForAccountLocked(Landroid/accounts/Account;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/Map;+]Ljava/util/Map;Ljava/util/HashMap;
+HSPLcom/android/server/accounts/AccountManagerService;->getPackagesAndVisibilityForAccountLocked(Landroid/accounts/Account;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/Map;+]Ljava/util/Map;Ljava/util/HashMap;
 PLcom/android/server/accounts/AccountManagerService;->getPackagesForVisibilityStr(ILjava/util/Map;)Ljava/lang/String;
 HPLcom/android/server/accounts/AccountManagerService;->getPassword(Landroid/accounts/Account;)Ljava/lang/String;+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;
-PLcom/android/server/accounts/AccountManagerService;->getPreviousName(Landroid/accounts/Account;)Ljava/lang/String;
+HPLcom/android/server/accounts/AccountManagerService;->getPreviousName(Landroid/accounts/Account;)Ljava/lang/String;
 PLcom/android/server/accounts/AccountManagerService;->getRequestingPackages(Landroid/accounts/Account;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/util/Map;
-PLcom/android/server/accounts/AccountManagerService;->getRunningAccounts()[Landroid/accounts/AccountAndUser;
+HPLcom/android/server/accounts/AccountManagerService;->getRunningAccounts()[Landroid/accounts/AccountAndUser;
 PLcom/android/server/accounts/AccountManagerService;->getSharedAccountsAsUser(I)[Landroid/accounts/Account;
 HPLcom/android/server/accounts/AccountManagerService;->getSigninRequiredNotificationId(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;)Lcom/android/server/accounts/AccountManagerService$NotificationId;
 HPLcom/android/server/accounts/AccountManagerService;->getSingleton()Lcom/android/server/accounts/AccountManagerService;
 HSPLcom/android/server/accounts/AccountManagerService;->getTypesForCaller(IIZ)Ljava/util/List;+]Lcom/android/server/accounts/IAccountAuthenticatorCache;Lcom/android/server/accounts/AccountAuthenticatorCache;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Collection;Ljava/util/Collections$UnmodifiableCollection;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/accounts/AccountManagerService;->getTypesManagedByCaller(II)Ljava/util/List;+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;
 HSPLcom/android/server/accounts/AccountManagerService;->getTypesVisibleToCaller(IILjava/lang/String;)Ljava/util/List;+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;
-PLcom/android/server/accounts/AccountManagerService;->getUidsOfInstalledOrUpdatedPackagesAsUser(I)Landroid/util/SparseBooleanArray;
+HSPLcom/android/server/accounts/AccountManagerService;->getUidsOfInstalledOrUpdatedPackagesAsUser(I)Landroid/util/SparseBooleanArray;
 HSPLcom/android/server/accounts/AccountManagerService;->getUserAccounts(I)Lcom/android/server/accounts/AccountManagerService$UserAccounts;+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;
 PLcom/android/server/accounts/AccountManagerService;->getUserAccountsForCaller()Lcom/android/server/accounts/AccountManagerService$UserAccounts;
-HSPLcom/android/server/accounts/AccountManagerService;->getUserAccountsNotChecked(I)Lcom/android/server/accounts/AccountManagerService$UserAccounts;+]Lcom/android/server/accounts/AccountsDb;Lcom/android/server/accounts/AccountsDb;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/accounts/AccountManagerService$Injector;Lcom/android/server/accounts/AccountManagerService$Injector;]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
+HSPLcom/android/server/accounts/AccountManagerService;->getUserAccountsNotChecked(I)Lcom/android/server/accounts/AccountManagerService$UserAccounts;+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/accounts/AccountsDb;Lcom/android/server/accounts/AccountsDb;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/accounts/AccountManagerService$Injector;Lcom/android/server/accounts/AccountManagerService$Injector;]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;
 HPLcom/android/server/accounts/AccountManagerService;->getUserData(Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/accounts/AccountManagerService;->getUserManager()Landroid/os/UserManager;
 PLcom/android/server/accounts/AccountManagerService;->grantAppPermission(Landroid/accounts/Account;Ljava/lang/String;I)V
+PLcom/android/server/accounts/AccountManagerService;->handleGetAccountsResult(Landroid/accounts/IAccountManagerResponse;[Landroid/accounts/Account;Ljava/lang/String;)V
 PLcom/android/server/accounts/AccountManagerService;->handleIncomingUser(I)I
-HPLcom/android/server/accounts/AccountManagerService;->hasAccountAccess(Landroid/accounts/Account;Ljava/lang/String;I)Z+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Ljava/lang/Integer;Ljava/lang/Integer;
-HPLcom/android/server/accounts/AccountManagerService;->hasAccountAccess(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/UserHandle;)Z
-HPLcom/android/server/accounts/AccountManagerService;->hasExplicitlyGrantedPermission(Landroid/accounts/Account;Ljava/lang/String;I)Z
+HSPLcom/android/server/accounts/AccountManagerService;->hasAccountAccess(Landroid/accounts/Account;Ljava/lang/String;I)Z+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;
+HSPLcom/android/server/accounts/AccountManagerService;->hasAccountAccess(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/UserHandle;)Z+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
+HSPLcom/android/server/accounts/AccountManagerService;->hasExplicitlyGrantedPermission(Landroid/accounts/Account;Ljava/lang/String;I)Z
 HPLcom/android/server/accounts/AccountManagerService;->hasFeatures(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;[Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/accounts/AccountManagerService;->insertAccountIntoCacheLocked(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;)Landroid/accounts/Account;
 PLcom/android/server/accounts/AccountManagerService;->installNotification(Lcom/android/server/accounts/AccountManagerService$NotificationId;Landroid/app/Notification;Ljava/lang/String;I)V
 HPLcom/android/server/accounts/AccountManagerService;->invalidateAuthToken(Ljava/lang/String;Ljava/lang/String;)V
 HPLcom/android/server/accounts/AccountManagerService;->invalidateAuthTokenLocked(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
-HPLcom/android/server/accounts/AccountManagerService;->isAccountManagedByCaller(Ljava/lang/String;II)Z+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/accounts/AccountManagerService;->isAccountManagedByCaller(Ljava/lang/String;II)Z+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Ljava/util/List;Ljava/util/ArrayList;
 PLcom/android/server/accounts/AccountManagerService;->isAccountPresentForCaller(Ljava/lang/String;Ljava/lang/String;)Z
 HPLcom/android/server/accounts/AccountManagerService;->isAccountVisibleToCaller(Ljava/lang/String;IILjava/lang/String;)Z
 HPLcom/android/server/accounts/AccountManagerService;->isCrossUser(II)Z
 HSPLcom/android/server/accounts/AccountManagerService;->isLocalUnlockedUser(I)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
-HPLcom/android/server/accounts/AccountManagerService;->isPermittedForPackage(Ljava/lang/String;I[Ljava/lang/String;)Z+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
+HSPLcom/android/server/accounts/AccountManagerService;->isPermittedForPackage(Ljava/lang/String;I[Ljava/lang/String;)Z+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
 HPLcom/android/server/accounts/AccountManagerService;->isPreOApplication(Ljava/lang/String;)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/pm/PackageManager$NameNotFoundException;Landroid/content/pm/PackageManager$NameNotFoundException;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
-HPLcom/android/server/accounts/AccountManagerService;->isPrivileged(I)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/pm/PackageManager$NameNotFoundException;Landroid/content/pm/PackageManager$NameNotFoundException;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
-HPLcom/android/server/accounts/AccountManagerService;->isProfileOwner(I)Z
+HSPLcom/android/server/accounts/AccountManagerService;->isPrivileged(I)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/pm/PackageManager$NameNotFoundException;Landroid/content/pm/PackageManager$NameNotFoundException;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
+HSPLcom/android/server/accounts/AccountManagerService;->isProfileOwner(I)Z
 HPLcom/android/server/accounts/AccountManagerService;->isSpecialPackageKey(Ljava/lang/String;)Z
 PLcom/android/server/accounts/AccountManagerService;->isSystemUid(I)Z
 PLcom/android/server/accounts/AccountManagerService;->isVisible(I)Z
@@ -5126,6 +5334,7 @@
 PLcom/android/server/accounts/AccountManagerService;->logRecord(Ljava/lang/String;Ljava/lang/String;JLcom/android/server/accounts/AccountManagerService$UserAccounts;)V
 PLcom/android/server/accounts/AccountManagerService;->logRecord(Ljava/lang/String;Ljava/lang/String;JLcom/android/server/accounts/AccountManagerService$UserAccounts;I)V
 PLcom/android/server/accounts/AccountManagerService;->logRecordWithUid(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Ljava/lang/String;Ljava/lang/String;I)V
+PLcom/android/server/accounts/AccountManagerService;->needToStartChooseAccountActivity([Landroid/accounts/Account;Ljava/lang/String;)Z
 PLcom/android/server/accounts/AccountManagerService;->newGrantCredentialsPermissionIntent(Landroid/accounts/Account;Ljava/lang/String;ILandroid/accounts/AccountAuthenticatorResponse;Ljava/lang/String;Z)Landroid/content/Intent;
 PLcom/android/server/accounts/AccountManagerService;->newRequestAccountAccessIntent(Landroid/accounts/Account;Ljava/lang/String;ILandroid/os/RemoteCallback;)Landroid/content/Intent;
 PLcom/android/server/accounts/AccountManagerService;->notifyPackage(Ljava/lang/String;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)V
@@ -5137,14 +5346,14 @@
 PLcom/android/server/accounts/AccountManagerService;->onUnlockUser(I)V
 HPLcom/android/server/accounts/AccountManagerService;->packageExistsForUser(Ljava/lang/String;I)Z
 HPLcom/android/server/accounts/AccountManagerService;->peekAuthToken(Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;
-HPLcom/android/server/accounts/AccountManagerService;->permissionIsGranted(Landroid/accounts/Account;Ljava/lang/String;II)Z+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;
+HSPLcom/android/server/accounts/AccountManagerService;->permissionIsGranted(Landroid/accounts/Account;Ljava/lang/String;II)Z+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;
 HSPLcom/android/server/accounts/AccountManagerService;->purgeOldGrants(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)V
 PLcom/android/server/accounts/AccountManagerService;->purgeOldGrantsAll()V
 PLcom/android/server/accounts/AccountManagerService;->purgeUserData(I)V
-HPLcom/android/server/accounts/AccountManagerService;->readAuthTokenInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;+]Ljava/util/Map;Ljava/util/HashMap;
+HPLcom/android/server/accounts/AccountManagerService;->readAuthTokenInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;+]Ljava/util/Map;Ljava/util/HashMap;]Lcom/android/server/accounts/AccountsDb;Lcom/android/server/accounts/AccountsDb;
 HPLcom/android/server/accounts/AccountManagerService;->readCachedTokenInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;[B)Lcom/android/server/accounts/TokenCache$Value;
 HPLcom/android/server/accounts/AccountManagerService;->readPasswordInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;)Ljava/lang/String;+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Lcom/android/server/accounts/AccountsDb;Lcom/android/server/accounts/AccountsDb;
-PLcom/android/server/accounts/AccountManagerService;->readPreviousNameInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;)Ljava/lang/String;
+HPLcom/android/server/accounts/AccountManagerService;->readPreviousNameInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;)Ljava/lang/String;
 HPLcom/android/server/accounts/AccountManagerService;->readUserDataInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;+]Lcom/android/server/accounts/AccountsDb;Lcom/android/server/accounts/AccountsDb;]Ljava/util/Map;Ljava/util/HashMap;
 HPLcom/android/server/accounts/AccountManagerService;->registerAccountListener([Ljava/lang/String;Ljava/lang/String;)V
 HPLcom/android/server/accounts/AccountManagerService;->registerAccountListener([Ljava/lang/String;Ljava/lang/String;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)V
@@ -5155,7 +5364,7 @@
 PLcom/android/server/accounts/AccountManagerService;->removeVisibilityValuesForPackage(Ljava/lang/String;)V
 PLcom/android/server/accounts/AccountManagerService;->renameAccount(Landroid/accounts/IAccountManagerResponse;Landroid/accounts/Account;Ljava/lang/String;)V
 PLcom/android/server/accounts/AccountManagerService;->renameAccountInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;)Landroid/accounts/Account;
-HSPLcom/android/server/accounts/AccountManagerService;->resolveAccountVisibility(Landroid/accounts/Account;Ljava/lang/String;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/lang/Integer;+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/pm/PackageManager$NameNotFoundException;Landroid/content/pm/PackageManager$NameNotFoundException;
+HSPLcom/android/server/accounts/AccountManagerService;->resolveAccountVisibility(Landroid/accounts/Account;Ljava/lang/String;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Ljava/lang/Integer;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Landroid/content/pm/PackageManager$NameNotFoundException;Landroid/content/pm/PackageManager$NameNotFoundException;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
 HPLcom/android/server/accounts/AccountManagerService;->saveAuthTokenToDatabase(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)Z
 HPLcom/android/server/accounts/AccountManagerService;->saveCachedToken(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;[BLjava/lang/String;Ljava/lang/String;J)V
 PLcom/android/server/accounts/AccountManagerService;->scanArgs([Ljava/lang/String;Ljava/lang/String;)Z
@@ -5164,13 +5373,14 @@
 PLcom/android/server/accounts/AccountManagerService;->sendNotificationAccountUpdated(Landroid/accounts/Account;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)V
 PLcom/android/server/accounts/AccountManagerService;->sendResponse(Landroid/accounts/IAccountManagerResponse;Landroid/os/Bundle;)V
 HPLcom/android/server/accounts/AccountManagerService;->setAccountVisibility(Landroid/accounts/Account;Ljava/lang/String;I)Z
-HPLcom/android/server/accounts/AccountManagerService;->setAccountVisibility(Landroid/accounts/Account;Ljava/lang/String;IZLcom/android/server/accounts/AccountManagerService$UserAccounts;)Z
+HPLcom/android/server/accounts/AccountManagerService;->setAccountVisibility(Landroid/accounts/Account;Ljava/lang/String;IZLcom/android/server/accounts/AccountManagerService$UserAccounts;)Z+]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;,Ljava/util/ArrayList$Itr;]Ljava/util/Set;Ljava/util/HashMap$EntrySet;
 HPLcom/android/server/accounts/AccountManagerService;->setAuthToken(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/accounts/AccountManagerService;->setPassword(Landroid/accounts/Account;Ljava/lang/String;)V
 PLcom/android/server/accounts/AccountManagerService;->setPasswordInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;I)V
 HPLcom/android/server/accounts/AccountManagerService;->setUserData(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;
 HPLcom/android/server/accounts/AccountManagerService;->setUserdataInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Lcom/android/server/accounts/AccountsDb;Lcom/android/server/accounts/AccountsDb;
 HPLcom/android/server/accounts/AccountManagerService;->shouldNotifyPackageOnAccountRemoval(Landroid/accounts/Account;Ljava/lang/String;Lcom/android/server/accounts/AccountManagerService$UserAccounts;)Z
+PLcom/android/server/accounts/AccountManagerService;->showCantAddAccount(II)V
 PLcom/android/server/accounts/AccountManagerService;->someUserHasAccount(Landroid/accounts/Account;)Z
 PLcom/android/server/accounts/AccountManagerService;->startAddAccountSession(Landroid/accounts/IAccountManagerResponse;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;ZLandroid/os/Bundle;)V
 PLcom/android/server/accounts/AccountManagerService;->syncDeCeAccountsLocked(Lcom/android/server/accounts/AccountManagerService$UserAccounts;)V
@@ -5184,7 +5394,7 @@
 PLcom/android/server/accounts/AccountManagerService;->validateAccounts(I)V
 HSPLcom/android/server/accounts/AccountManagerService;->validateAccountsInternal(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Z)V
 HPLcom/android/server/accounts/AccountManagerService;->writeAuthTokenIntoCacheLocked(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V
-HPLcom/android/server/accounts/AccountManagerService;->writeUserDataIntoCacheLocked(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V+]Ljava/util/Map;Ljava/util/HashMap;
+HPLcom/android/server/accounts/AccountManagerService;->writeUserDataIntoCacheLocked(Lcom/android/server/accounts/AccountManagerService$UserAccounts;Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V+]Ljava/util/Map;Ljava/util/HashMap;]Lcom/android/server/accounts/AccountsDb;Lcom/android/server/accounts/AccountsDb;
 PLcom/android/server/accounts/AccountsDb$CeDatabaseHelper;-><init>(Landroid/content/Context;Ljava/lang/String;)V
 PLcom/android/server/accounts/AccountsDb$CeDatabaseHelper;->create(Landroid/content/Context;Ljava/io/File;Ljava/io/File;)Lcom/android/server/accounts/AccountsDb$CeDatabaseHelper;
 PLcom/android/server/accounts/AccountsDb$CeDatabaseHelper;->createAccountsDeletionTrigger(Landroid/database/sqlite/SQLiteDatabase;)V
@@ -5243,7 +5453,7 @@
 HPLcom/android/server/accounts/AccountsDb;->findDeAccountId(Landroid/accounts/Account;)J+]Landroid/database/Cursor;Landroid/database/sqlite/SQLiteCursor;]Landroid/database/sqlite/SQLiteOpenHelper;Lcom/android/server/accounts/AccountsDb$DeDatabaseHelper;]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
 PLcom/android/server/accounts/AccountsDb;->findDeAccountPreviousName(Landroid/accounts/Account;)Ljava/lang/String;
 HPLcom/android/server/accounts/AccountsDb;->findExtrasIdByAccountId(JLjava/lang/String;)J+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/accounts/AccountsDb$DeDatabaseHelper;Lcom/android/server/accounts/AccountsDb$DeDatabaseHelper;]Landroid/database/Cursor;Landroid/database/sqlite/SQLiteCursor;]Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteDatabase;
-HPLcom/android/server/accounts/AccountsDb;->findMatchingGrantsCountAnyToken(ILandroid/accounts/Account;)J
+HSPLcom/android/server/accounts/AccountsDb;->findMatchingGrantsCountAnyToken(ILandroid/accounts/Account;)J
 HSPLcom/android/server/accounts/AccountsDb;->findMetaAuthUid()Ljava/util/Map;
 HPLcom/android/server/accounts/AccountsDb;->findUserExtrasForAccount(Landroid/accounts/Account;)Ljava/util/Map;
 PLcom/android/server/accounts/AccountsDb;->getSharedAccounts()Ljava/util/List;
@@ -5290,77 +5500,138 @@
 HPLcom/android/server/accounts/TokenCache;->put(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[BJ)V
 PLcom/android/server/accounts/TokenCache;->remove(Landroid/accounts/Account;)V
 HPLcom/android/server/accounts/TokenCache;->remove(Ljava/lang/String;Ljava/lang/String;)V
-HSPLcom/android/server/adb/AdbDebuggingManager$AdbConnectionInfo;-><init>(Lcom/android/server/adb/AdbDebuggingManager;)V
+HSPLcom/android/server/adb/AdbDebuggingManager$$ExternalSyntheticLambda0;-><init>()V
+PLcom/android/server/adb/AdbDebuggingManager$$ExternalSyntheticLambda0;->currentTimeMillis()J
+HSPLcom/android/server/adb/AdbDebuggingManager$AdbConnectionInfo;-><init>()V
+PLcom/android/server/adb/AdbDebuggingManager$AdbConnectionInfo;-><init>(Lcom/android/server/adb/AdbDebuggingManager$AdbConnectionInfo;)V
+PLcom/android/server/adb/AdbDebuggingManager$AdbConnectionInfo;-><init>(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/adb/AdbDebuggingManager$AdbConnectionInfo;->clear()V
+PLcom/android/server/adb/AdbDebuggingManager$AdbConnectionInfo;->getBSSID()Ljava/lang/String;
+PLcom/android/server/adb/AdbDebuggingManager$AdbConnectionInfo;->getPort()I
+PLcom/android/server/adb/AdbDebuggingManager$AdbConnectionInfo;->getSSID()Ljava/lang/String;
+PLcom/android/server/adb/AdbDebuggingManager$AdbConnectionInfo;->setPort(I)V
+PLcom/android/server/adb/AdbDebuggingManager$AdbConnectionPortPoller;-><init>(Lcom/android/server/adb/AdbDebuggingManager$AdbConnectionPortListener;)V
+PLcom/android/server/adb/AdbDebuggingManager$AdbConnectionPortPoller;->cancelAndWait()V
+PLcom/android/server/adb/AdbDebuggingManager$AdbConnectionPortPoller;->run()V
 HSPLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler$1;-><init>(Lcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;)V
+PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler$2;-><init>(Lcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;Landroid/os/Handler;)V
 PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler$2;->onChange(ZLandroid/net/Uri;)V
-HSPLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;-><init>(Lcom/android/server/adb/AdbDebuggingManager;Landroid/os/Looper;)V
+HSPLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;-><init>(Lcom/android/server/adb/AdbDebuggingManager;Landroid/os/Looper;Lcom/android/server/adb/AdbDebuggingManager$AdbDebuggingThread;)V
 PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;->cancelJobToUpdateAdbKeyStore()V
+PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;->createPairingCode(I)Ljava/lang/String;
+PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;->getCurrentWifiApInfo()Lcom/android/server/adb/AdbDebuggingManager$AdbConnectionInfo;
 PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;->initKeyStore()V
+PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;->isTv()Z
 PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;->logAdbConnectionChanged(Ljava/lang/String;IZ)V
+PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;->onAdbdWifiServerConnected(I)V
+PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;->onAdbdWifiServerDisconnected(I)V
+PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;->onPairingResult(Ljava/lang/String;)V
 PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;->registerForAuthTimeChanges()V
 PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;->scheduleJobToUpdateAdbKeyStore()J
+PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;->sendPairedDevicesToUI(Ljava/util/Map;)V
+PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;->sendPairingPortToUI(I)V
+PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;->sendServerConnectionState(ZI)V
+PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;->setupNotifications()V
+PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;->showAdbConnectedNotification(Z)V
 PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;->startAdbDebuggingThread()V
 PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;->stopAdbDebuggingThread()V
-PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingThread;-><init>(Lcom/android/server/adb/AdbDebuggingManager;)V
+PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;->updateUIPairCode(Ljava/lang/String;)V
+PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingHandler;->verifyWifiNetwork(Ljava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingThread;-><init>()V
 PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingThread;->closeSocketLocked()V
 PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingThread;->listenToSocket()V
 PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingThread;->openSocketLocked()V
 PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingThread;->run()V
 PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingThread;->sendResponse(Ljava/lang/String;)V
+PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingThread;->setHandler(Landroid/os/Handler;)V
 PLcom/android/server/adb/AdbDebuggingManager$AdbDebuggingThread;->stopListening()V
 PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;-><init>(Lcom/android/server/adb/AdbDebuggingManager;)V
-PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->addUserKeysToKeyStore()V
+PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->addAdbKeyToKeyMap(Landroid/util/TypedXmlPullParser;)V
+PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->addExistingUserKeysToKeyStore()V
+PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->addTrustedNetwork(Ljava/lang/String;)V
+PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->addTrustedNetworkToTrustedNetworks(Landroid/util/TypedXmlPullParser;)V
 PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->deleteKeyStore()V
 PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->filterOutOldKeys()Z
 PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->getAllowedConnectionTime()J
-PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->getKeyMap()Ljava/util/Map;
 PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->getLastConnectionTime(Ljava/lang/String;)J
 PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->getNextExpirationTime()J
+PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->getPairedDevices()Ljava/util/Map;
 PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->getSystemKeysFromFile(Ljava/lang/String;)Ljava/util/Set;
-PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->getTrustedNetworks()Ljava/util/List;
-PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->init()V
 PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->initKeyFile()V
 PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->isEmpty()Z
-PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->persistKeyStore()V
+PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->isTrustedNetwork(Ljava/lang/String;)Z
+HPLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->persistKeyStore()V
+PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->readKeyStoreContents(Landroid/util/TypedXmlPullParser;)V
+PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->readTempKeysFile()V
 PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->setLastConnectionTime(Ljava/lang/String;J)V
 PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->setLastConnectionTime(Ljava/lang/String;JZ)V
 PLcom/android/server/adb/AdbDebuggingManager$AdbKeyStore;->updateKeyStore()V
+PLcom/android/server/adb/AdbDebuggingManager$PairingThread;-><init>(Lcom/android/server/adb/AdbDebuggingManager;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/adb/AdbDebuggingManager$PairingThread;->cancelPairing()V
+PLcom/android/server/adb/AdbDebuggingManager$PairingThread;->onServiceRegistered(Landroid/net/nsd/NsdServiceInfo;)V
+PLcom/android/server/adb/AdbDebuggingManager$PairingThread;->onServiceUnregistered(Landroid/net/nsd/NsdServiceInfo;)V
+PLcom/android/server/adb/AdbDebuggingManager$PairingThread;->run()V
 HSPLcom/android/server/adb/AdbDebuggingManager$PortListenerImpl;-><init>(Lcom/android/server/adb/AdbDebuggingManager;)V
+PLcom/android/server/adb/AdbDebuggingManager$PortListenerImpl;->onPortReceived(I)V
+PLcom/android/server/adb/AdbDebuggingManager;->$r8$lambda$gZT0pLYva4rawTPaa4Vf1_8pFm8()J
+PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$fgetmAdbConnectionInfo(Lcom/android/server/adb/AdbDebuggingManager;)Lcom/android/server/adb/AdbDebuggingManager$AdbConnectionInfo;
 PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$fgetmAdbUsbEnabled(Lcom/android/server/adb/AdbDebuggingManager;)Z
 PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$fgetmAdbWifiEnabled(Lcom/android/server/adb/AdbDebuggingManager;)Z
 PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$fgetmConnectedKeys(Lcom/android/server/adb/AdbDebuggingManager;)Ljava/util/Map;
 PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$fgetmConnectionPortPoller(Lcom/android/server/adb/AdbDebuggingManager;)Lcom/android/server/adb/AdbDebuggingManager$AdbConnectionPortPoller;
+PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$fgetmContentResolver(Lcom/android/server/adb/AdbDebuggingManager;)Landroid/content/ContentResolver;
 PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$fgetmContext(Lcom/android/server/adb/AdbDebuggingManager;)Landroid/content/Context;
 PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$fgetmFingerprints(Lcom/android/server/adb/AdbDebuggingManager;)Ljava/lang/String;
-PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$fgetmHandler(Lcom/android/server/adb/AdbDebuggingManager;)Landroid/os/Handler;
+PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$fgetmPairingThread(Lcom/android/server/adb/AdbDebuggingManager;)Lcom/android/server/adb/AdbDebuggingManager$PairingThread;
+PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$fgetmPortListener(Lcom/android/server/adb/AdbDebuggingManager;)Lcom/android/server/adb/AdbDebuggingManager$PortListenerImpl;
+PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$fgetmTempKeysFile(Lcom/android/server/adb/AdbDebuggingManager;)Ljava/io/File;
 PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$fgetmThread(Lcom/android/server/adb/AdbDebuggingManager;)Lcom/android/server/adb/AdbDebuggingManager$AdbDebuggingThread;
+PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$fgetmTicker(Lcom/android/server/adb/AdbDebuggingManager;)Lcom/android/server/adb/AdbDebuggingManager$Ticker;
+PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$fgetmUserKeyFile(Lcom/android/server/adb/AdbDebuggingManager;)Ljava/io/File;
 PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$fgetmWifiConnectedKeys(Lcom/android/server/adb/AdbDebuggingManager;)Ljava/util/Set;
 PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$fputmAdbUsbEnabled(Lcom/android/server/adb/AdbDebuggingManager;Z)V
+PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$fputmAdbWifiEnabled(Lcom/android/server/adb/AdbDebuggingManager;Z)V
+PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$fputmConnectionPortPoller(Lcom/android/server/adb/AdbDebuggingManager;Lcom/android/server/adb/AdbDebuggingManager$AdbConnectionPortPoller;)V
 PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$fputmFingerprints(Lcom/android/server/adb/AdbDebuggingManager;Ljava/lang/String;)V
-PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$fputmThread(Lcom/android/server/adb/AdbDebuggingManager;Lcom/android/server/adb/AdbDebuggingManager$AdbDebuggingThread;)V
-PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$mdeleteKeyFile(Lcom/android/server/adb/AdbDebuggingManager;)V
+PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$fputmPairingThread(Lcom/android/server/adb/AdbDebuggingManager;Lcom/android/server/adb/AdbDebuggingManager$PairingThread;)V
+HSPLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$fputmThread(Lcom/android/server/adb/AdbDebuggingManager;Lcom/android/server/adb/AdbDebuggingManager$AdbDebuggingThread;)V
 PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$mgetFingerprints(Lcom/android/server/adb/AdbDebuggingManager;Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$msendPersistKeyStoreMessage(Lcom/android/server/adb/AdbDebuggingManager;)V
+PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$msetAdbConnectionInfo(Lcom/android/server/adb/AdbDebuggingManager;Lcom/android/server/adb/AdbDebuggingManager$AdbConnectionInfo;)V
 PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$mstartConfirmationForKey(Lcom/android/server/adb/AdbDebuggingManager;Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$mwriteKey(Lcom/android/server/adb/AdbDebuggingManager;Ljava/lang/String;)V
+PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$mstartConfirmationForNetwork(Lcom/android/server/adb/AdbDebuggingManager;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$mwriteKeys(Lcom/android/server/adb/AdbDebuggingManager;Ljava/lang/Iterable;)V
+PLcom/android/server/adb/AdbDebuggingManager;->-$$Nest$sfgetTAG()Ljava/lang/String;
+HSPLcom/android/server/adb/AdbDebuggingManager;-><clinit>()V
 HSPLcom/android/server/adb/AdbDebuggingManager;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/adb/AdbDebuggingManager;-><init>(Landroid/content/Context;Ljava/lang/String;Ljava/io/File;Ljava/io/File;Lcom/android/server/adb/AdbDebuggingManager$AdbDebuggingThread;Lcom/android/server/adb/AdbDebuggingManager$Ticker;)V
 PLcom/android/server/adb/AdbDebuggingManager;->allowDebugging(ZLjava/lang/String;)V
+PLcom/android/server/adb/AdbDebuggingManager;->allowWirelessDebugging(ZLjava/lang/String;)V
 PLcom/android/server/adb/AdbDebuggingManager;->clearDebuggingKeys()V
 PLcom/android/server/adb/AdbDebuggingManager;->createConfirmationIntent(Landroid/content/ComponentName;Ljava/util/List;)Landroid/content/Intent;
-PLcom/android/server/adb/AdbDebuggingManager;->deleteKeyFile()V
 PLcom/android/server/adb/AdbDebuggingManager;->denyDebugging()V
+PLcom/android/server/adb/AdbDebuggingManager;->denyWirelessDebugging()V
+PLcom/android/server/adb/AdbDebuggingManager;->disablePairing()V
 PLcom/android/server/adb/AdbDebuggingManager;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
-PLcom/android/server/adb/AdbDebuggingManager;->getAdbFile(Ljava/lang/String;)Ljava/io/File;
+PLcom/android/server/adb/AdbDebuggingManager;->enablePairingByPairingCode()V
+PLcom/android/server/adb/AdbDebuggingManager;->enablePairingByQrCode(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/adb/AdbDebuggingManager;->getAdbConnectionInfo()Lcom/android/server/adb/AdbDebuggingManager$AdbConnectionInfo;
+HSPLcom/android/server/adb/AdbDebuggingManager;->getAdbFile(Ljava/lang/String;)Ljava/io/File;
 PLcom/android/server/adb/AdbDebuggingManager;->getAdbTempKeysFile()Ljava/io/File;
+PLcom/android/server/adb/AdbDebuggingManager;->getAdbWirelessPort()I
 PLcom/android/server/adb/AdbDebuggingManager;->getFingerprints(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/adb/AdbDebuggingManager;->getPairedDevices()Ljava/util/Map;
 PLcom/android/server/adb/AdbDebuggingManager;->getUserKeyFile()Ljava/io/File;
+PLcom/android/server/adb/AdbDebuggingManager;->lambda$static$0()J
+PLcom/android/server/adb/AdbDebuggingManager;->sendBroadcastWithDebugPermission(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V
 PLcom/android/server/adb/AdbDebuggingManager;->sendPersistKeyStoreMessage()V
+PLcom/android/server/adb/AdbDebuggingManager;->setAdbConnectionInfo(Lcom/android/server/adb/AdbDebuggingManager$AdbConnectionInfo;)V
 PLcom/android/server/adb/AdbDebuggingManager;->setAdbEnabled(ZB)V
 PLcom/android/server/adb/AdbDebuggingManager;->startConfirmationActivity(Landroid/content/ComponentName;Landroid/os/UserHandle;Ljava/util/List;)Z
 PLcom/android/server/adb/AdbDebuggingManager;->startConfirmationForKey(Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/adb/AdbDebuggingManager;->writeKey(Ljava/lang/String;)V
+PLcom/android/server/adb/AdbDebuggingManager;->startConfirmationForNetwork(Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/adb/AdbDebuggingManager;->writeKeys(Ljava/lang/Iterable;)V
 PLcom/android/server/adb/AdbService$$ExternalSyntheticLambda0;-><init>(ZB)V
 HSPLcom/android/server/adb/AdbService$AdbConnectionPortListener;-><init>(Lcom/android/server/adb/AdbService;)V
@@ -5401,13 +5672,21 @@
 HSPLcom/android/server/adb/AdbService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/adb/AdbService;-><init>(Landroid/content/Context;Lcom/android/server/adb/AdbService-IA;)V
 PLcom/android/server/adb/AdbService;->allowDebugging(ZLjava/lang/String;)V
+PLcom/android/server/adb/AdbService;->allowWirelessDebugging(ZLjava/lang/String;)V
 PLcom/android/server/adb/AdbService;->bootCompleted()V
 PLcom/android/server/adb/AdbService;->clearDebuggingKeys()V
 HSPLcom/android/server/adb/AdbService;->containsFunction(Ljava/lang/String;Ljava/lang/String;)Z
 PLcom/android/server/adb/AdbService;->denyDebugging()V
+PLcom/android/server/adb/AdbService;->denyWirelessDebugging()V
+PLcom/android/server/adb/AdbService;->disablePairing()V
 PLcom/android/server/adb/AdbService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/adb/AdbService;->enablePairingByPairingCode()V
+PLcom/android/server/adb/AdbService;->enablePairingByQrCode(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/adb/AdbService;->getAdbWirelessPort()I
+PLcom/android/server/adb/AdbService;->getPairedDevices()[Landroid/debug/FingerprintAndPairDevice;
 PLcom/android/server/adb/AdbService;->isAdbWifiQrSupported()Z
 PLcom/android/server/adb/AdbService;->isAdbWifiSupported()Z
+HSPLcom/android/server/adb/AdbService;->registerContentObservers()V
 PLcom/android/server/adb/AdbService;->setAdbEnabled(ZB)V
 HSPLcom/android/server/adb/AdbService;->setAdbdEnabledForTransport(ZB)V
 HSPLcom/android/server/adb/AdbService;->startAdbd()V
@@ -5431,7 +5710,7 @@
 HSPLcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda0;-><init>(Landroid/app/PendingIntent;Landroid/app/IAlarmListener;)V
 HSPLcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
 PLcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda10;-><init>(ILjava/lang/String;)V
-PLcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda10;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda10;->test(Ljava/lang/Object;)Z
 HPLcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda11;-><init>(Lcom/android/server/alarm/AlarmManagerService;Landroid/util/ArraySet;)V
 HPLcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda11;->updateAlarmDelivery(Lcom/android/server/alarm/Alarm;)Z
 PLcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda13;-><init>(I)V
@@ -5457,12 +5736,12 @@
 PLcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda23;->updateAlarmDelivery(Lcom/android/server/alarm/Alarm;)Z
 PLcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda24;-><init>(Lcom/android/server/alarm/AlarmManagerService;)V
 PLcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda24;->updateAlarmDelivery(Lcom/android/server/alarm/Alarm;)Z
-PLcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/alarm/AlarmManagerService;)V
+HPLcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/alarm/AlarmManagerService;)V
 PLcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda2;->run()V
 HSPLcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/alarm/AlarmManagerService;)V
 PLcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda3;->run()V
 HSPLcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/alarm/AlarmManagerService;I)V
-PLcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda4;->run()V
+HSPLcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda4;->run()V
 HSPLcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/alarm/AlarmManagerService;)V
 PLcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda5;->get()Ljava/lang/Object;
 PLcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda6;-><init>(I)V
@@ -5477,7 +5756,7 @@
 HPLcom/android/server/alarm/AlarmManagerService$1;->compare(Lcom/android/server/alarm/Alarm;Lcom/android/server/alarm/Alarm;)I+]Lcom/android/server/alarm/Alarm;Lcom/android/server/alarm/Alarm;
 HPLcom/android/server/alarm/AlarmManagerService$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I+]Lcom/android/server/alarm/AlarmManagerService$1;Lcom/android/server/alarm/AlarmManagerService$1;
 HSPLcom/android/server/alarm/AlarmManagerService$2;-><init>(Lcom/android/server/alarm/AlarmManagerService;)V
-PLcom/android/server/alarm/AlarmManagerService$2;->binderDied(Landroid/os/IBinder;)V
+HPLcom/android/server/alarm/AlarmManagerService$2;->binderDied(Landroid/os/IBinder;)V
 HSPLcom/android/server/alarm/AlarmManagerService$3$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/alarm/AlarmManagerService$3;Landroid/app/IAlarmCompleteListener;)V
 HPLcom/android/server/alarm/AlarmManagerService$3$$ExternalSyntheticLambda0;->run()V
 HPLcom/android/server/alarm/AlarmManagerService$3;->$r8$lambda$Rr3r7n2HsPKFnJ_be679IBA4-vw(Lcom/android/server/alarm/AlarmManagerService$3;Landroid/app/IAlarmCompleteListener;)V
@@ -5490,7 +5769,7 @@
 HSPLcom/android/server/alarm/AlarmManagerService$5;->currentNetworkTimeMillis()J+]Landroid/util/NtpTrustedTime;Landroid/util/NtpTrustedTime;]Lcom/android/server/SystemService;Lcom/android/server/alarm/AlarmManagerService;]Landroid/util/NtpTrustedTime$TimeResult;Landroid/util/NtpTrustedTime$TimeResult;
 PLcom/android/server/alarm/AlarmManagerService$5;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/alarm/AlarmManagerService$5;->getNextAlarmClock(I)Landroid/app/AlarmManager$AlarmClockInfo;
-PLcom/android/server/alarm/AlarmManagerService$5;->getNextWakeFromIdleTime()J
+HPLcom/android/server/alarm/AlarmManagerService$5;->getNextWakeFromIdleTime()J
 PLcom/android/server/alarm/AlarmManagerService$5;->hasScheduleExactAlarm(Ljava/lang/String;I)Z
 HSPLcom/android/server/alarm/AlarmManagerService$5;->remove(Landroid/app/PendingIntent;Landroid/app/IAlarmListener;)V+]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;
 HSPLcom/android/server/alarm/AlarmManagerService$5;->set(Ljava/lang/String;IJJJILandroid/app/PendingIntent;Landroid/app/IAlarmListener;Ljava/lang/String;Landroid/os/WorkSource;Landroid/app/AlarmManager$AlarmClockInfo;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/SystemService;Lcom/android/server/alarm/AlarmManagerService;]Lcom/android/server/alarm/AlarmManagerService$Injector;Lcom/android/server/alarm/AlarmManagerService$Injector;]Lcom/android/server/AppStateTrackerImpl;Lcom/android/server/AppStateTrackerImpl;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
@@ -5504,27 +5783,27 @@
 PLcom/android/server/alarm/AlarmManagerService$7;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLcom/android/server/alarm/AlarmManagerService$8;-><init>(Lcom/android/server/alarm/AlarmManagerService;)V
 HPLcom/android/server/alarm/AlarmManagerService$8;->onAffordabilityChanged(ILjava/lang/String;Lcom/android/server/tare/EconomyManagerInternal$ActionBill;Z)V
-PLcom/android/server/alarm/AlarmManagerService$9$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/alarm/AlarmManagerService$9;)V
-PLcom/android/server/alarm/AlarmManagerService$9$$ExternalSyntheticLambda0;->updateAlarmDelivery(Lcom/android/server/alarm/Alarm;)Z
+HSPLcom/android/server/alarm/AlarmManagerService$9$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/alarm/AlarmManagerService$9;)V
+HSPLcom/android/server/alarm/AlarmManagerService$9$$ExternalSyntheticLambda0;->updateAlarmDelivery(Lcom/android/server/alarm/Alarm;)Z
 HSPLcom/android/server/alarm/AlarmManagerService$9$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/alarm/AlarmManagerService$9;I)V
 HSPLcom/android/server/alarm/AlarmManagerService$9$$ExternalSyntheticLambda1;->updateAlarmDelivery(Lcom/android/server/alarm/Alarm;)Z
-PLcom/android/server/alarm/AlarmManagerService$9;->$r8$lambda$MemKAdPPa1cIGMIRjJaMc2sjJh8(Lcom/android/server/alarm/AlarmManagerService$9;Lcom/android/server/alarm/Alarm;)Z
+HSPLcom/android/server/alarm/AlarmManagerService$9;->$r8$lambda$MemKAdPPa1cIGMIRjJaMc2sjJh8(Lcom/android/server/alarm/AlarmManagerService$9;Lcom/android/server/alarm/Alarm;)Z
 HSPLcom/android/server/alarm/AlarmManagerService$9;->$r8$lambda$rKMqoDhGfnkrswtqMN5Pu5Sb-Hs(Lcom/android/server/alarm/AlarmManagerService$9;ILcom/android/server/alarm/Alarm;)Z
 HSPLcom/android/server/alarm/AlarmManagerService$9;-><init>(Lcom/android/server/alarm/AlarmManagerService;)V
 HSPLcom/android/server/alarm/AlarmManagerService$9;->lambda$updateAlarmsForUid$1(ILcom/android/server/alarm/Alarm;)Z
-PLcom/android/server/alarm/AlarmManagerService$9;->lambda$updateAllAlarms$0(Lcom/android/server/alarm/Alarm;)Z
+HSPLcom/android/server/alarm/AlarmManagerService$9;->lambda$updateAllAlarms$0(Lcom/android/server/alarm/Alarm;)Z
 PLcom/android/server/alarm/AlarmManagerService$9;->removeAlarmsForUid(I)V
-HSPLcom/android/server/alarm/AlarmManagerService$9;->unblockAlarmsForUid(I)V
+HSPLcom/android/server/alarm/AlarmManagerService$9;->unblockAlarmsForUid(I)V+]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;
 PLcom/android/server/alarm/AlarmManagerService$9;->unblockAllUnrestrictedAlarms()V
-HSPLcom/android/server/alarm/AlarmManagerService$9;->updateAlarmsForUid(I)V
-PLcom/android/server/alarm/AlarmManagerService$9;->updateAllAlarms()V
+HSPLcom/android/server/alarm/AlarmManagerService$9;->updateAlarmsForUid(I)V+]Lcom/android/server/alarm/AlarmStore;Lcom/android/server/alarm/LazyAlarmStore;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;
+HSPLcom/android/server/alarm/AlarmManagerService$9;->updateAllAlarms()V
 HSPLcom/android/server/alarm/AlarmManagerService$AlarmHandler;-><init>(Lcom/android/server/alarm/AlarmManagerService;)V
-HPLcom/android/server/alarm/AlarmManagerService$AlarmHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/DeviceIdleInternal;Lcom/android/server/DeviceIdleController$LocalService;]Lcom/android/server/alarm/AlarmManagerService$DeliveryTracker;Lcom/android/server/alarm/AlarmManagerService$DeliveryTracker;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;
+HSPLcom/android/server/alarm/AlarmManagerService$AlarmHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/DeviceIdleInternal;Lcom/android/server/DeviceIdleController$LocalService;]Lcom/android/server/alarm/AlarmManagerService$DeliveryTracker;Lcom/android/server/alarm/AlarmManagerService$DeliveryTracker;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;
 HSPLcom/android/server/alarm/AlarmManagerService$AlarmThread;-><init>(Lcom/android/server/alarm/AlarmManagerService;)V
 HSPLcom/android/server/alarm/AlarmManagerService$AlarmThread;->run()V
 HSPLcom/android/server/alarm/AlarmManagerService$AppStandbyTracker;-><init>(Lcom/android/server/alarm/AlarmManagerService;)V
 HSPLcom/android/server/alarm/AlarmManagerService$AppStandbyTracker;-><init>(Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService$AppStandbyTracker-IA;)V
-HPLcom/android/server/alarm/AlarmManagerService$AppStandbyTracker;->onAppIdleStateChanged(Ljava/lang/String;IZII)V
+HSPLcom/android/server/alarm/AlarmManagerService$AppStandbyTracker;->onAppIdleStateChanged(Ljava/lang/String;IZII)V
 HSPLcom/android/server/alarm/AlarmManagerService$AppWakeupHistory;-><init>(J)V
 PLcom/android/server/alarm/AlarmManagerService$AppWakeupHistory;->dump(Landroid/util/IndentingPrintWriter;J)V
 HPLcom/android/server/alarm/AlarmManagerService$AppWakeupHistory;->getNthLastWakeupForPackage(Ljava/lang/String;II)J+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/LongArrayQueue;Landroid/util/LongArrayQueue;
@@ -5537,7 +5816,7 @@
 PLcom/android/server/alarm/AlarmManagerService$BroadcastStats;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 PLcom/android/server/alarm/AlarmManagerService$BroadcastStats;->toString()Ljava/lang/String;
 HSPLcom/android/server/alarm/AlarmManagerService$ChargingReceiver;-><init>(Lcom/android/server/alarm/AlarmManagerService;)V
-PLcom/android/server/alarm/AlarmManagerService$ChargingReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/alarm/AlarmManagerService$ChargingReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/alarm/AlarmManagerService$ClockReceiver;-><init>(Lcom/android/server/alarm/AlarmManagerService;)V
 PLcom/android/server/alarm/AlarmManagerService$ClockReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/alarm/AlarmManagerService$ClockReceiver;->scheduleDateChangedEvent()V
@@ -5557,7 +5836,7 @@
 HPLcom/android/server/alarm/AlarmManagerService$DeliveryTracker$$ExternalSyntheticLambda0;->updateAlarmDelivery(Lcom/android/server/alarm/Alarm;)Z
 HPLcom/android/server/alarm/AlarmManagerService$DeliveryTracker;->$r8$lambda$zXFTmcUiLPv3Szc63Wj4c0uwOAc(Lcom/android/server/alarm/AlarmManagerService$DeliveryTracker;Lcom/android/server/alarm/Alarm;ZZLcom/android/server/alarm/Alarm;)Z
 HSPLcom/android/server/alarm/AlarmManagerService$DeliveryTracker;-><init>(Lcom/android/server/alarm/AlarmManagerService;)V
-HPLcom/android/server/alarm/AlarmManagerService$DeliveryTracker;->alarmComplete(Landroid/os/IBinder;)V
+HPLcom/android/server/alarm/AlarmManagerService$DeliveryTracker;->alarmComplete(Landroid/os/IBinder;)V+]Landroid/os/Handler;Lcom/android/server/alarm/AlarmManagerService$AlarmHandler;]Lcom/android/server/alarm/AlarmManagerService$DeliveryTracker;Lcom/android/server/alarm/AlarmManagerService$DeliveryTracker;
 PLcom/android/server/alarm/AlarmManagerService$DeliveryTracker;->alarmTimedOut(Landroid/os/IBinder;)V
 HSPLcom/android/server/alarm/AlarmManagerService$DeliveryTracker;->deliverLocked(Lcom/android/server/alarm/Alarm;J)V+]Landroid/app/IAlarmListener;Landroid/app/IAlarmListener$Stub$Proxy;,Landroid/app/AlarmManager$ListenerWrapper;,Lcom/android/server/alarm/AlarmManagerService$3;]Landroid/os/Handler;Lcom/android/server/alarm/AlarmManagerService$AlarmHandler;]Landroid/app/PendingIntent;Landroid/app/PendingIntent;]Lcom/android/server/SystemService;Lcom/android/server/alarm/AlarmManagerService;]Landroid/os/PowerManager$WakeLock;Landroid/os/PowerManager$WakeLock;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/alarm/AlarmManagerService$InFlight;Lcom/android/server/alarm/AlarmManagerService$InFlight;]Landroid/os/Message;Landroid/os/Message;]Lcom/android/server/AppStateTrackerImpl;Lcom/android/server/AppStateTrackerImpl;]Landroid/os/IBinder;Landroid/os/BinderProxy;,Landroid/app/AlarmManager$ListenerWrapper;,Lcom/android/server/alarm/AlarmManagerService$3;]Lcom/android/server/alarm/AlarmStore;Lcom/android/server/alarm/LazyAlarmStore;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;]Lcom/android/server/alarm/AlarmManagerService$AppWakeupHistory;Lcom/android/server/alarm/AlarmManagerService$AppWakeupHistory;]Landroid/content/Intent;Landroid/content/Intent;
 HPLcom/android/server/alarm/AlarmManagerService$DeliveryTracker;->lambda$deliverLocked$0(Lcom/android/server/alarm/Alarm;ZZLcom/android/server/alarm/Alarm;)Z
@@ -5594,7 +5873,7 @@
 HSPLcom/android/server/alarm/AlarmManagerService$LocalService;-><init>(Lcom/android/server/alarm/AlarmManagerService;)V
 HSPLcom/android/server/alarm/AlarmManagerService$LocalService;-><init>(Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService$LocalService-IA;)V
 HSPLcom/android/server/alarm/AlarmManagerService$LocalService;->hasExactAlarmPermission(Ljava/lang/String;I)Z
-PLcom/android/server/alarm/AlarmManagerService$LocalService;->isIdling()Z
+HSPLcom/android/server/alarm/AlarmManagerService$LocalService;->isIdling()Z
 HSPLcom/android/server/alarm/AlarmManagerService$LocalService;->registerInFlightListener(Lcom/android/server/AlarmManagerInternal$InFlightListener;)V
 HPLcom/android/server/alarm/AlarmManagerService$LocalService;->remove(Landroid/app/PendingIntent;)V
 PLcom/android/server/alarm/AlarmManagerService$LocalService;->removeAlarmsForUid(I)V
@@ -5603,9 +5882,15 @@
 PLcom/android/server/alarm/AlarmManagerService$RemovedAlarm;->dump(Landroid/util/IndentingPrintWriter;JLjava/text/SimpleDateFormat;)V
 HSPLcom/android/server/alarm/AlarmManagerService$RemovedAlarm;->isLoggable(I)Z
 PLcom/android/server/alarm/AlarmManagerService$RemovedAlarm;->removeReasonToString(I)Ljava/lang/String;
+HSPLcom/android/server/alarm/AlarmManagerService$TemporaryQuotaReserve;-><init>(J)V
+HPLcom/android/server/alarm/AlarmManagerService$TemporaryQuotaReserve;->cleanUpExpiredQuotas(J)V
+PLcom/android/server/alarm/AlarmManagerService$TemporaryQuotaReserve;->dump(Landroid/util/IndentingPrintWriter;J)V
+HPLcom/android/server/alarm/AlarmManagerService$TemporaryQuotaReserve;->hasQuota(Ljava/lang/String;IJ)Z
+PLcom/android/server/alarm/AlarmManagerService$TemporaryQuotaReserve;->removeForPackage(Ljava/lang/String;I)V
+PLcom/android/server/alarm/AlarmManagerService$TemporaryQuotaReserve;->removeForUser(I)V
 HSPLcom/android/server/alarm/AlarmManagerService$UninstallReceiver;-><init>(Lcom/android/server/alarm/AlarmManagerService;)V
 HPLcom/android/server/alarm/AlarmManagerService$UninstallReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
-PLcom/android/server/alarm/AlarmManagerService;->$r8$lambda$-eCF5r_7h4WoByav6azUFPR3a18(Lcom/android/server/alarm/AlarmManagerService;I)V
+HSPLcom/android/server/alarm/AlarmManagerService;->$r8$lambda$-eCF5r_7h4WoByav6azUFPR3a18(Lcom/android/server/alarm/AlarmManagerService;I)V
 PLcom/android/server/alarm/AlarmManagerService;->$r8$lambda$7Q8GslYSbcxIrRySdEWPEMHtNUE(Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/Alarm;)Z
 PLcom/android/server/alarm/AlarmManagerService;->$r8$lambda$88dbbCLc3usZq9uXh8HTNtss_EQ(Lcom/android/server/alarm/AlarmManagerService;)V
 PLcom/android/server/alarm/AlarmManagerService;->$r8$lambda$9io6QdeDYV2YS5pwXJoQDuKuc1I(Lcom/android/server/alarm/AlarmManagerService;)V
@@ -5628,7 +5913,7 @@
 PLcom/android/server/alarm/AlarmManagerService;->$r8$lambda$vvI2GdXs8XKS9MToEcxoAP1in2Q(ILcom/android/server/alarm/Alarm;)Z
 PLcom/android/server/alarm/AlarmManagerService;->$r8$lambda$x6vmXkQqLKftoeqBCKhhXEMcjAA(ILcom/android/server/alarm/Alarm;)Z
 HSPLcom/android/server/alarm/AlarmManagerService;->-$$Nest$fgetmActivityManagerInternal(Lcom/android/server/alarm/AlarmManagerService;)Landroid/app/ActivityManagerInternal;
-PLcom/android/server/alarm/AlarmManagerService;->-$$Nest$fgetmAffordabilityCache(Lcom/android/server/alarm/AlarmManagerService;)Landroid/util/SparseArrayMap;
+HPLcom/android/server/alarm/AlarmManagerService;->-$$Nest$fgetmAffordabilityCache(Lcom/android/server/alarm/AlarmManagerService;)Landroid/util/SparseArrayMap;
 HSPLcom/android/server/alarm/AlarmManagerService;->-$$Nest$fgetmAppStateTracker(Lcom/android/server/alarm/AlarmManagerService;)Lcom/android/server/AppStateTrackerImpl;
 HPLcom/android/server/alarm/AlarmManagerService;->-$$Nest$fgetmBackgroundIntent(Lcom/android/server/alarm/AlarmManagerService;)Landroid/content/Intent;
 HSPLcom/android/server/alarm/AlarmManagerService;->-$$Nest$fgetmInFlightListeners(Lcom/android/server/alarm/AlarmManagerService;)Ljava/util/ArrayList;
@@ -5651,14 +5936,14 @@
 HSPLcom/android/server/alarm/AlarmManagerService;->-$$Nest$fputmNextTickHistory(Lcom/android/server/alarm/AlarmManagerService;I)V
 HPLcom/android/server/alarm/AlarmManagerService;->-$$Nest$fputmSendCount(Lcom/android/server/alarm/AlarmManagerService;I)V
 HPLcom/android/server/alarm/AlarmManagerService;->-$$Nest$fputmSendFinishCount(Lcom/android/server/alarm/AlarmManagerService;I)V
-PLcom/android/server/alarm/AlarmManagerService;->-$$Nest$madjustDeliveryTimeBasedOnBatterySaver(Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/Alarm;)Z
+HSPLcom/android/server/alarm/AlarmManagerService;->-$$Nest$madjustDeliveryTimeBasedOnBatterySaver(Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/Alarm;)Z
 PLcom/android/server/alarm/AlarmManagerService;->-$$Nest$madjustDeliveryTimeBasedOnBucketLocked(Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/Alarm;)Z
 PLcom/android/server/alarm/AlarmManagerService;->-$$Nest$madjustDeliveryTimeBasedOnDeviceIdle(Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/Alarm;)Z
 PLcom/android/server/alarm/AlarmManagerService;->-$$Nest$madjustDeliveryTimeBasedOnTareLocked(Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/Alarm;)Z
 HPLcom/android/server/alarm/AlarmManagerService;->-$$Nest$mgetAlarmOperationBundle(Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/Alarm;)Landroid/os/Bundle;
 HSPLcom/android/server/alarm/AlarmManagerService;->-$$Nest$mgetStatsLocked(Lcom/android/server/alarm/AlarmManagerService;ILjava/lang/String;)Lcom/android/server/alarm/AlarmManagerService$BroadcastStats;
 HPLcom/android/server/alarm/AlarmManagerService;->-$$Nest$mgetStatsLocked(Lcom/android/server/alarm/AlarmManagerService;Landroid/app/PendingIntent;)Lcom/android/server/alarm/AlarmManagerService$BroadcastStats;
-PLcom/android/server/alarm/AlarmManagerService;->-$$Nest$misIdlingImpl(Lcom/android/server/alarm/AlarmManagerService;)Z
+HSPLcom/android/server/alarm/AlarmManagerService;->-$$Nest$misIdlingImpl(Lcom/android/server/alarm/AlarmManagerService;)Z
 HPLcom/android/server/alarm/AlarmManagerService;->-$$Nest$mnotifyBroadcastAlarmCompleteLocked(Lcom/android/server/alarm/AlarmManagerService;I)V
 PLcom/android/server/alarm/AlarmManagerService;->-$$Nest$mnotifyBroadcastAlarmPendingLocked(Lcom/android/server/alarm/AlarmManagerService;I)V
 PLcom/android/server/alarm/AlarmManagerService;->-$$Nest$mregisterTareListener(Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/Alarm;)V
@@ -5677,7 +5962,7 @@
 HSPLcom/android/server/alarm/AlarmManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/alarm/AlarmManagerService;-><init>(Landroid/content/Context;Lcom/android/server/alarm/AlarmManagerService$Injector;)V
 HSPLcom/android/server/alarm/AlarmManagerService;->adjustDeliveryTimeBasedOnBatterySaver(Lcom/android/server/alarm/Alarm;)Z+]Lcom/android/server/alarm/Alarm;Lcom/android/server/alarm/Alarm;]Lcom/android/server/alarm/AlarmManagerService$Injector;Lcom/android/server/alarm/AlarmManagerService$Injector;]Lcom/android/server/AppStateTrackerImpl;Lcom/android/server/AppStateTrackerImpl;]Lcom/android/server/alarm/AlarmManagerService$AppWakeupHistory;Lcom/android/server/alarm/AlarmManagerService$AppWakeupHistory;
-HSPLcom/android/server/alarm/AlarmManagerService;->adjustDeliveryTimeBasedOnBucketLocked(Lcom/android/server/alarm/Alarm;)Z+]Lcom/android/server/alarm/Alarm;Lcom/android/server/alarm/Alarm;]Lcom/android/server/alarm/AlarmManagerService$Injector;Lcom/android/server/alarm/AlarmManagerService$Injector;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;]Lcom/android/server/alarm/AlarmManagerService$AppWakeupHistory;Lcom/android/server/alarm/AlarmManagerService$AppWakeupHistory;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;
+HSPLcom/android/server/alarm/AlarmManagerService;->adjustDeliveryTimeBasedOnBucketLocked(Lcom/android/server/alarm/Alarm;)Z+]Lcom/android/server/alarm/Alarm;Lcom/android/server/alarm/Alarm;]Lcom/android/server/alarm/AlarmManagerService$Injector;Lcom/android/server/alarm/AlarmManagerService$Injector;]Lcom/android/server/alarm/AlarmManagerService$TemporaryQuotaReserve;Lcom/android/server/alarm/AlarmManagerService$TemporaryQuotaReserve;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;]Lcom/android/server/alarm/AlarmManagerService$AppWakeupHistory;Lcom/android/server/alarm/AlarmManagerService$AppWakeupHistory;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;
 HPLcom/android/server/alarm/AlarmManagerService;->adjustDeliveryTimeBasedOnDeviceIdle(Lcom/android/server/alarm/Alarm;)Z+]Lcom/android/server/alarm/Alarm;Lcom/android/server/alarm/Alarm;]Lcom/android/server/alarm/AlarmManagerService$Injector;Lcom/android/server/alarm/AlarmManagerService$Injector;]Lcom/android/server/alarm/AlarmManagerService$AppWakeupHistory;Lcom/android/server/alarm/AlarmManagerService$AppWakeupHistory;
 HSPLcom/android/server/alarm/AlarmManagerService;->adjustDeliveryTimeBasedOnTareLocked(Lcom/android/server/alarm/Alarm;)Z+]Lcom/android/server/alarm/Alarm;Lcom/android/server/alarm/Alarm;]Lcom/android/server/alarm/AlarmManagerService$Injector;Lcom/android/server/alarm/AlarmManagerService$Injector;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;
 PLcom/android/server/alarm/AlarmManagerService;->adjustIdleUntilTime(Lcom/android/server/alarm/Alarm;)Z
@@ -5699,7 +5984,7 @@
 HPLcom/android/server/alarm/AlarmManagerService;->getAlarmOperationBundle(Lcom/android/server/alarm/Alarm;)Landroid/os/Bundle;
 HSPLcom/android/server/alarm/AlarmManagerService;->getMinimumAllowedWindow(JJ)J
 HSPLcom/android/server/alarm/AlarmManagerService;->getNextAlarmClockImpl(I)Landroid/app/AlarmManager$AlarmClockInfo;
-PLcom/android/server/alarm/AlarmManagerService;->getNextWakeFromIdleTimeImpl()J
+HPLcom/android/server/alarm/AlarmManagerService;->getNextWakeFromIdleTimeImpl()J
 HPLcom/android/server/alarm/AlarmManagerService;->getQuotaForBucketLocked(I)I
 HSPLcom/android/server/alarm/AlarmManagerService;->getStatsLocked(ILjava/lang/String;)Lcom/android/server/alarm/AlarmManagerService$BroadcastStats;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/alarm/AlarmManagerService;->getStatsLocked(Landroid/app/PendingIntent;)Lcom/android/server/alarm/AlarmManagerService$BroadcastStats;
@@ -5714,9 +5999,9 @@
 HSPLcom/android/server/alarm/AlarmManagerService;->isExemptFromAppStandby(Lcom/android/server/alarm/Alarm;)Z
 HSPLcom/android/server/alarm/AlarmManagerService;->isExemptFromBatterySaver(Lcom/android/server/alarm/Alarm;)Z+]Landroid/app/PendingIntent;Landroid/app/PendingIntent;
 HSPLcom/android/server/alarm/AlarmManagerService;->isExemptFromExactAlarmPermissionNoLock(I)Z+]Lcom/android/server/DeviceIdleInternal;Lcom/android/server/DeviceIdleController$LocalService;
-HSPLcom/android/server/alarm/AlarmManagerService;->isExemptFromMinWindowRestrictions(I)Z
+HSPLcom/android/server/alarm/AlarmManagerService;->isExemptFromMinWindowRestrictions(I)Z+]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;
 HPLcom/android/server/alarm/AlarmManagerService;->isExemptFromTare(Lcom/android/server/alarm/Alarm;)Z
-PLcom/android/server/alarm/AlarmManagerService;->isIdlingImpl()Z
+HSPLcom/android/server/alarm/AlarmManagerService;->isIdlingImpl()Z
 HSPLcom/android/server/alarm/AlarmManagerService;->isRtc(I)Z
 HSPLcom/android/server/alarm/AlarmManagerService;->isScheduleExactAlarmAllowedByDefault(Ljava/lang/String;I)Z+]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;]Ljava/util/Set;Ljava/util/Collections$EmptySet;
 HSPLcom/android/server/alarm/AlarmManagerService;->isScheduleExactAlarmDeniedByDefault(Ljava/lang/String;I)Z
@@ -5727,7 +6012,7 @@
 HPLcom/android/server/alarm/AlarmManagerService;->lambda$maybeUnregisterTareListenerLocked$8(Lcom/android/server/alarm/Alarm;Lcom/android/server/tare/EconomyManagerInternal$ActionBill;Lcom/android/server/alarm/Alarm;)Z+]Lcom/android/server/tare/EconomyManagerInternal$ActionBill;Lcom/android/server/tare/EconomyManagerInternal$ActionBill;
 PLcom/android/server/alarm/AlarmManagerService;->lambda$new$0()V
 PLcom/android/server/alarm/AlarmManagerService;->lambda$onBootPhase$7()Lcom/android/server/alarm/AlarmStore;
-PLcom/android/server/alarm/AlarmManagerService;->lambda$onUserStarting$6(I)V
+HSPLcom/android/server/alarm/AlarmManagerService;->lambda$onUserStarting$6(I)V
 PLcom/android/server/alarm/AlarmManagerService;->lambda$reevaluateRtcAlarms$1(Lcom/android/server/alarm/Alarm;)Z
 PLcom/android/server/alarm/AlarmManagerService;->lambda$reevaluateRtcAlarms$2(Lcom/android/server/alarm/Alarm;)Z
 PLcom/android/server/alarm/AlarmManagerService;->lambda$reevaluateRtcAlarms$3(Lcom/android/server/alarm/Alarm;)Z
@@ -5755,8 +6040,8 @@
 HSPLcom/android/server/alarm/AlarmManagerService;->reevaluateRtcAlarms()V
 HSPLcom/android/server/alarm/AlarmManagerService;->refreshExactAlarmCandidates()V
 HSPLcom/android/server/alarm/AlarmManagerService;->registerTareListener(Lcom/android/server/alarm/Alarm;)V
-HSPLcom/android/server/alarm/AlarmManagerService;->removeAlarmsInternalLocked(Ljava/util/function/Predicate;I)V+]Landroid/app/IAlarmListener;Landroid/app/IAlarmListener$Stub$Proxy;,Landroid/app/AlarmManager$ListenerWrapper;,Lcom/android/server/alarm/AlarmManagerService$3;]Lcom/android/server/alarm/AlarmManagerService$Injector;Lcom/android/server/alarm/AlarmManagerService$Injector;]Landroid/os/IBinder;Landroid/os/BinderProxy;,Landroid/app/AlarmManager$ListenerWrapper;,Lcom/android/server/alarm/AlarmManagerService$3;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/util/RingBuffer;Lcom/android/internal/util/RingBuffer;]Lcom/android/server/alarm/AlarmStore;Lcom/android/server/alarm/LazyAlarmStore;]Ljava/util/function/Predicate;Lcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda10;,Lcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda0;,Lcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda13;,Lcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda6;,Lcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda20;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
-PLcom/android/server/alarm/AlarmManagerService;->removeExactAlarmsOnPermissionRevoked(ILjava/lang/String;Z)V
+HSPLcom/android/server/alarm/AlarmManagerService;->removeAlarmsInternalLocked(Ljava/util/function/Predicate;I)V+]Landroid/app/IAlarmListener;Landroid/app/IAlarmListener$Stub$Proxy;,Landroid/app/AlarmManager$ListenerWrapper;,Lcom/android/server/alarm/AlarmManagerService$3;]Lcom/android/server/alarm/AlarmManagerService$Injector;Lcom/android/server/alarm/AlarmManagerService$Injector;]Landroid/os/IBinder;Landroid/os/BinderProxy;,Landroid/app/AlarmManager$ListenerWrapper;,Lcom/android/server/alarm/AlarmManagerService$3;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/util/RingBuffer;Lcom/android/internal/util/RingBuffer;]Lcom/android/server/alarm/AlarmStore;Lcom/android/server/alarm/LazyAlarmStore;]Ljava/util/function/Predicate;Lcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda13;,Lcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda20;,Lcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda10;,Lcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda0;,Lcom/android/server/alarm/AlarmManagerService$$ExternalSyntheticLambda6;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HPLcom/android/server/alarm/AlarmManagerService;->removeExactAlarmsOnPermissionRevoked(ILjava/lang/String;Z)V
 PLcom/android/server/alarm/AlarmManagerService;->removeForStoppedLocked(I)V
 HSPLcom/android/server/alarm/AlarmManagerService;->removeImpl(Landroid/app/PendingIntent;Landroid/app/IAlarmListener;)V
 PLcom/android/server/alarm/AlarmManagerService;->removeLocked(II)V
@@ -5764,13 +6049,13 @@
 PLcom/android/server/alarm/AlarmManagerService;->removeUserLocked(I)V
 HSPLcom/android/server/alarm/AlarmManagerService;->reorderAlarmsBasedOnStandbyBuckets(Landroid/util/ArraySet;)Z+]Lcom/android/internal/util/jobs/StatLogger;Lcom/android/internal/util/jobs/StatLogger;]Lcom/android/server/alarm/AlarmStore;Lcom/android/server/alarm/LazyAlarmStore;
 HPLcom/android/server/alarm/AlarmManagerService;->reorderAlarmsBasedOnTare(Landroid/util/ArraySet;)Z
-HSPLcom/android/server/alarm/AlarmManagerService;->reportAlarmEventToTare(Lcom/android/server/alarm/Alarm;)V
+HSPLcom/android/server/alarm/AlarmManagerService;->reportAlarmEventToTare(Lcom/android/server/alarm/Alarm;)V+]Lcom/android/server/tare/EconomyManagerInternal;Lcom/android/server/tare/InternalResourceService$LocalService;
 HSPLcom/android/server/alarm/AlarmManagerService;->rescheduleKernelAlarmsLocked()V+]Lcom/android/server/alarm/AlarmManagerService$Injector;Lcom/android/server/alarm/AlarmManagerService$Injector;]Lcom/android/server/alarm/AlarmStore;Lcom/android/server/alarm/LazyAlarmStore;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;
 PLcom/android/server/alarm/AlarmManagerService;->restoreRequestedTime(Lcom/android/server/alarm/Alarm;)Z
 PLcom/android/server/alarm/AlarmManagerService;->sendAllUnrestrictedPendingBackgroundAlarmsLocked()V
 HPLcom/android/server/alarm/AlarmManagerService;->sendNextAlarmClockChanged()V
-HSPLcom/android/server/alarm/AlarmManagerService;->sendPendingBackgroundAlarmsLocked(ILjava/lang/String;)V
-HSPLcom/android/server/alarm/AlarmManagerService;->setImpl(IJJJLandroid/app/PendingIntent;Landroid/app/IAlarmListener;Ljava/lang/String;ILandroid/os/WorkSource;Landroid/app/AlarmManager$AlarmClockInfo;ILjava/lang/String;Landroid/os/Bundle;I)V+]Landroid/app/IAlarmListener;Landroid/app/IAlarmListener$Stub$Proxy;,Landroid/app/AlarmManager$ListenerWrapper;,Lcom/android/server/alarm/AlarmManagerService$3;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/alarm/AlarmManagerService$Injector;Lcom/android/server/alarm/AlarmManagerService$Injector;]Landroid/os/IBinder;Landroid/os/BinderProxy;,Landroid/app/AlarmManager$ListenerWrapper;,Lcom/android/server/alarm/AlarmManagerService$3;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/alarm/AlarmManagerService;->sendPendingBackgroundAlarmsLocked(ILjava/lang/String;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/alarm/AlarmManagerService;->setImpl(IJJJLandroid/app/PendingIntent;Landroid/app/IAlarmListener;Ljava/lang/String;ILandroid/os/WorkSource;Landroid/app/AlarmManager$AlarmClockInfo;ILjava/lang/String;Landroid/os/Bundle;I)V+]Landroid/app/IAlarmListener;Landroid/app/IAlarmListener$Stub$Proxy;,Landroid/app/AlarmManager$ListenerWrapper;,Lcom/android/server/alarm/AlarmManagerService$3;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/alarm/AlarmManagerService$Injector;Lcom/android/server/alarm/AlarmManagerService$Injector;]Landroid/os/IBinder;Landroid/os/BinderProxy;,Landroid/app/AlarmManager$ListenerWrapper;,Lcom/android/server/alarm/AlarmManagerService$3;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;
 HSPLcom/android/server/alarm/AlarmManagerService;->setImplLocked(IJJJJLandroid/app/PendingIntent;Landroid/app/IAlarmListener;Ljava/lang/String;ILandroid/os/WorkSource;Landroid/app/AlarmManager$AlarmClockInfo;ILjava/lang/String;Landroid/os/Bundle;I)V+]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;
 HSPLcom/android/server/alarm/AlarmManagerService;->setImplLocked(Lcom/android/server/alarm/Alarm;)V+]Lcom/android/server/alarm/AlarmStore;Lcom/android/server/alarm/LazyAlarmStore;]Lcom/android/server/alarm/AlarmManagerService;Lcom/android/server/alarm/AlarmManagerService;]Lcom/android/server/alarm/Alarm;Lcom/android/server/alarm/Alarm;
 HSPLcom/android/server/alarm/AlarmManagerService;->setLocked(IJ)V+]Lcom/android/server/alarm/AlarmManagerService$Injector;Lcom/android/server/alarm/AlarmManagerService$Injector;
@@ -5825,7 +6110,7 @@
 PLcom/android/server/alarm/MetricsHelper$$ExternalSyntheticLambda9;-><init>()V
 PLcom/android/server/alarm/MetricsHelper$$ExternalSyntheticLambda9;->test(Ljava/lang/Object;)Z
 PLcom/android/server/alarm/MetricsHelper;->$r8$lambda$3C8tzd-DjSGW_0qr6Lod5pR2PHY(Lcom/android/server/alarm/MetricsHelper;Ljava/util/function/Supplier;ILjava/util/List;)I
-PLcom/android/server/alarm/MetricsHelper;->$r8$lambda$5QjJJRxSSpcoVMwg7zoe5z7TZsI(Lcom/android/server/alarm/Alarm;)Z
+HPLcom/android/server/alarm/MetricsHelper;->$r8$lambda$5QjJJRxSSpcoVMwg7zoe5z7TZsI(Lcom/android/server/alarm/Alarm;)Z
 PLcom/android/server/alarm/MetricsHelper;->$r8$lambda$AfukGsVhXeCknr1_PdsGQ4ThMuc(Lcom/android/server/alarm/Alarm;)Z
 PLcom/android/server/alarm/MetricsHelper;->$r8$lambda$FmWMSOg285h_lJL-DdB_7ysaxfk(Lcom/android/server/alarm/Alarm;)Z
 PLcom/android/server/alarm/MetricsHelper;->$r8$lambda$HAJ0V_xBrkBXM9sia8YNIYprHIs(Lcom/android/server/alarm/Alarm;)Z
@@ -5842,7 +6127,7 @@
 PLcom/android/server/alarm/MetricsHelper;->lambda$registerPuller$1(Lcom/android/server/alarm/Alarm;)Z
 PLcom/android/server/alarm/MetricsHelper;->lambda$registerPuller$10(Lcom/android/server/alarm/Alarm;)Z
 PLcom/android/server/alarm/MetricsHelper;->lambda$registerPuller$11(Lcom/android/server/alarm/Alarm;)Z
-PLcom/android/server/alarm/MetricsHelper;->lambda$registerPuller$12(Ljava/util/function/Supplier;ILjava/util/List;)I
+HPLcom/android/server/alarm/MetricsHelper;->lambda$registerPuller$12(Ljava/util/function/Supplier;ILjava/util/List;)I
 PLcom/android/server/alarm/MetricsHelper;->lambda$registerPuller$2(Lcom/android/server/alarm/Alarm;)Z
 PLcom/android/server/alarm/MetricsHelper;->lambda$registerPuller$3(Lcom/android/server/alarm/Alarm;)Z
 PLcom/android/server/alarm/MetricsHelper;->lambda$registerPuller$4(Lcom/android/server/alarm/Alarm;)Z
@@ -5862,26 +6147,26 @@
 PLcom/android/server/am/ActiveInstrumentation;->removeProcess(Lcom/android/server/am/ProcessRecord;)V
 PLcom/android/server/am/ActiveServices$$ExternalSyntheticLambda0;-><init>(Ljava/util/ArrayList;)V
 PLcom/android/server/am/ActiveServices$$ExternalSyntheticLambda0;->run()V
-HPLcom/android/server/am/ActiveServices$$ExternalSyntheticLambda2;-><init>(I)V
-HPLcom/android/server/am/ActiveServices$$ExternalSyntheticLambda2;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-HPLcom/android/server/am/ActiveServices$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/am/ActiveServices;I)V
-PLcom/android/server/am/ActiveServices$$ExternalSyntheticLambda3;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/am/ActiveServices$$ExternalSyntheticLambda2;-><init>(I)V
+HSPLcom/android/server/am/ActiveServices$$ExternalSyntheticLambda2;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/am/ActiveServices$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/am/ActiveServices;I)V
+HSPLcom/android/server/am/ActiveServices$$ExternalSyntheticLambda3;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HPLcom/android/server/am/ActiveServices$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/am/ActiveServices;ILandroid/util/ArraySet;)V
 PLcom/android/server/am/ActiveServices$$ExternalSyntheticLambda4;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/am/ActiveServices$$ExternalSyntheticLambda5;-><init>()V
 PLcom/android/server/am/ActiveServices$$ExternalSyntheticLambda5;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/am/ActiveServices$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/am/ActiveServices;)V
-PLcom/android/server/am/ActiveServices$$ExternalSyntheticLambda6;->run()V
+HPLcom/android/server/am/ActiveServices$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/am/ActiveServices;)V
+HPLcom/android/server/am/ActiveServices$$ExternalSyntheticLambda6;->run()V
 HSPLcom/android/server/am/ActiveServices$1;-><init>(Lcom/android/server/am/ActiveServices;)V
 PLcom/android/server/am/ActiveServices$1;->run()V
 PLcom/android/server/am/ActiveServices$4;-><init>(Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ServiceRecord;Ljava/lang/String;Ljava/lang/String;ILandroid/content/Intent;ZIZLandroid/app/IServiceConnection;IZZLandroid/os/IBinder;)V
 PLcom/android/server/am/ActiveServices$4;->run()V
 HSPLcom/android/server/am/ActiveServices$5;-><init>(Lcom/android/server/am/ActiveServices;)V
 HPLcom/android/server/am/ActiveServices$5;->run()V
-PLcom/android/server/am/ActiveServices$ActiveForegroundApp;-><init>()V
-PLcom/android/server/am/ActiveServices$AppOpCallback$1;-><init>(Lcom/android/server/am/ActiveServices$AppOpCallback;)V
+HPLcom/android/server/am/ActiveServices$ActiveForegroundApp;-><init>()V
+HPLcom/android/server/am/ActiveServices$AppOpCallback$1;-><init>(Lcom/android/server/am/ActiveServices$AppOpCallback;)V
 HPLcom/android/server/am/ActiveServices$AppOpCallback$1;->onOpNoted(IILjava/lang/String;Ljava/lang/String;II)V
-PLcom/android/server/am/ActiveServices$AppOpCallback$2;-><init>(Lcom/android/server/am/ActiveServices$AppOpCallback;)V
+HPLcom/android/server/am/ActiveServices$AppOpCallback$2;-><init>(Lcom/android/server/am/ActiveServices$AppOpCallback;)V
 PLcom/android/server/am/ActiveServices$AppOpCallback$2;->onOpStarted(IILjava/lang/String;Ljava/lang/String;II)V
 HPLcom/android/server/am/ActiveServices$AppOpCallback;->-$$Nest$mincrementOpCountIfNeeded(Lcom/android/server/am/ActiveServices$AppOpCallback;III)V+]Lcom/android/server/am/ActiveServices$AppOpCallback;Lcom/android/server/am/ActiveServices$AppOpCallback;
 PLcom/android/server/am/ActiveServices$AppOpCallback;-><clinit>()V
@@ -5889,20 +6174,20 @@
 HPLcom/android/server/am/ActiveServices$AppOpCallback;->incrementOpCount(IZ)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
 HPLcom/android/server/am/ActiveServices$AppOpCallback;->incrementOpCountIfNeeded(III)V+]Lcom/android/server/am/ActiveServices$AppOpCallback;Lcom/android/server/am/ActiveServices$AppOpCallback;
 HPLcom/android/server/am/ActiveServices$AppOpCallback;->isNotTop()Z
-PLcom/android/server/am/ActiveServices$AppOpCallback;->isObsoleteLocked()Z
+HPLcom/android/server/am/ActiveServices$AppOpCallback;->isObsoleteLocked()Z
 HPLcom/android/server/am/ActiveServices$AppOpCallback;->logFinalValues()V
 PLcom/android/server/am/ActiveServices$AppOpCallback;->modeToEnum(I)I
 HPLcom/android/server/am/ActiveServices$AppOpCallback;->registerLocked()V
 HPLcom/android/server/am/ActiveServices$AppOpCallback;->unregisterLocked()V
 HSPLcom/android/server/am/ActiveServices$BackgroundRestrictedListener;-><init>(Lcom/android/server/am/ActiveServices;)V
 PLcom/android/server/am/ActiveServices$BackgroundRestrictedListener;->updateBackgroundRestrictedForUidPackage(ILjava/lang/String;Z)V
-HPLcom/android/server/am/ActiveServices$ServiceDumper;-><init>(Lcom/android/server/am/ActiveServices;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;)V
-PLcom/android/server/am/ActiveServices$ServiceDumper;->dumpHeaderLocked()V
-HPLcom/android/server/am/ActiveServices$ServiceDumper;->dumpLocked()V
-HPLcom/android/server/am/ActiveServices$ServiceDumper;->dumpRemainsLocked()V
-HPLcom/android/server/am/ActiveServices$ServiceDumper;->dumpServiceLocalLocked(Lcom/android/server/am/ServiceRecord;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ActiveServices$ServiceDumper;Lcom/android/server/am/ActiveServices$ServiceDumper;]Ljava/io/PrintWriter;Lcom/android/internal/util/FastPrintWriter;]Landroid/content/Intent$FilterComparison;Landroid/content/Intent$FilterComparison;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/content/Intent;Landroid/content/Intent;
-HPLcom/android/server/am/ActiveServices$ServiceDumper;->dumpUserHeaderLocked(I)V
-PLcom/android/server/am/ActiveServices$ServiceDumper;->dumpUserRemainsLocked(I)V
+HSPLcom/android/server/am/ActiveServices$ServiceDumper;-><init>(Lcom/android/server/am/ActiveServices;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;)V
+HSPLcom/android/server/am/ActiveServices$ServiceDumper;->dumpHeaderLocked()V
+HSPLcom/android/server/am/ActiveServices$ServiceDumper;->dumpLocked()V+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/am/ActiveServices$ServiceDumper;Lcom/android/server/am/ActiveServices$ServiceDumper;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/am/ActiveServices$ServiceDumper;->dumpRemainsLocked()V
+HSPLcom/android/server/am/ActiveServices$ServiceDumper;->dumpServiceLocalLocked(Lcom/android/server/am/ServiceRecord;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ActiveServices$ServiceDumper;Lcom/android/server/am/ActiveServices$ServiceDumper;]Ljava/io/PrintWriter;Lcom/android/internal/util/FastPrintWriter;]Landroid/content/Intent$FilterComparison;Landroid/content/Intent$FilterComparison;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/am/ActiveServices$ServiceDumper;->dumpUserHeaderLocked(I)V
+HSPLcom/android/server/am/ActiveServices$ServiceDumper;->dumpUserRemainsLocked(I)V
 HSPLcom/android/server/am/ActiveServices$ServiceLookupResult;-><init>(Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ServiceRecord;Landroid/content/ComponentName;)V
 PLcom/android/server/am/ActiveServices$ServiceLookupResult;-><init>(Lcom/android/server/am/ActiveServices;Ljava/lang/String;)V
 HSPLcom/android/server/am/ActiveServices$ServiceMap;-><init>(Lcom/android/server/am/ActiveServices;Landroid/os/Looper;I)V
@@ -5911,35 +6196,35 @@
 HPLcom/android/server/am/ActiveServices$ServiceMap;->rescheduleDelayedStartsLocked()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/Handler;Lcom/android/server/am/ActiveServices$ServiceMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActiveServices$ServiceRestarter;-><init>(Lcom/android/server/am/ActiveServices;)V
 HSPLcom/android/server/am/ActiveServices$ServiceRestarter;-><init>(Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices$ServiceRestarter-IA;)V
-HPLcom/android/server/am/ActiveServices$ServiceRestarter;->run()V
+HPLcom/android/server/am/ActiveServices$ServiceRestarter;->run()V+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
 HSPLcom/android/server/am/ActiveServices$ServiceRestarter;->setService(Lcom/android/server/am/ServiceRecord;)V
 PLcom/android/server/am/ActiveServices;->$r8$lambda$IMRfchIvNAjak5k9ErnDPHtaPyc(Lcom/android/server/am/ActiveServices;ILandroid/util/ArraySet;Lcom/android/server/am/ProcessRecord;)Landroid/util/Pair;
-PLcom/android/server/am/ActiveServices;->$r8$lambda$P7gXX2QkGyAA11aRhQhw_O3Ggb0(Lcom/android/server/am/ActiveServices;)V
+HPLcom/android/server/am/ActiveServices;->$r8$lambda$P7gXX2QkGyAA11aRhQhw_O3Ggb0(Lcom/android/server/am/ActiveServices;)V
 PLcom/android/server/am/ActiveServices;->$r8$lambda$UcdKUNT0BfDfplUsPw_hSdo6K8I(Ljava/util/ArrayList;)V
-HPLcom/android/server/am/ActiveServices;->$r8$lambda$ZLbHUA-lRIYE0_ZSY3WuWqoKRHM(ILcom/android/server/am/ProcessRecord;)Ljava/lang/Integer;
-PLcom/android/server/am/ActiveServices;->$r8$lambda$gidnBHasG6gJ20AYKuWDwUS8P_Y(Lcom/android/server/am/ActiveServices;ILcom/android/server/am/ProcessRecord;)Ljava/lang/Integer;
+HSPLcom/android/server/am/ActiveServices;->$r8$lambda$ZLbHUA-lRIYE0_ZSY3WuWqoKRHM(ILcom/android/server/am/ProcessRecord;)Ljava/lang/Integer;
+HSPLcom/android/server/am/ActiveServices;->$r8$lambda$gidnBHasG6gJ20AYKuWDwUS8P_Y(Lcom/android/server/am/ActiveServices;ILcom/android/server/am/ProcessRecord;)Ljava/lang/Integer;
 PLcom/android/server/am/ActiveServices;->-$$Nest$fgetmPendingBringups(Lcom/android/server/am/ActiveServices;)Landroid/util/ArrayMap;
 PLcom/android/server/am/ActiveServices;->-$$Nest$mbringUpServiceLocked(Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ServiceRecord;IZZZZZ)Ljava/lang/String;
-PLcom/android/server/am/ActiveServices;->-$$Nest$mgetServiceMapLocked(Lcom/android/server/am/ActiveServices;I)Lcom/android/server/am/ActiveServices$ServiceMap;
+HSPLcom/android/server/am/ActiveServices;->-$$Nest$mgetServiceMapLocked(Lcom/android/server/am/ActiveServices;I)Lcom/android/server/am/ActiveServices$ServiceMap;
 PLcom/android/server/am/ActiveServices;->-$$Nest$misForegroundServiceAllowedInBackgroundRestricted(Lcom/android/server/am/ActiveServices;ILjava/lang/String;)Z
 PLcom/android/server/am/ActiveServices;->-$$Nest$mrequestStartTargetPermissionsReviewIfNeededLocked(Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ServiceRecord;Ljava/lang/String;Ljava/lang/String;ILandroid/content/Intent;ZIZLandroid/app/IServiceConnection;)Z
 HSPLcom/android/server/am/ActiveServices;-><clinit>()V
 HSPLcom/android/server/am/ActiveServices;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 HSPLcom/android/server/am/ActiveServices;->appRestrictedAnyInBackground(ILjava/lang/String;)Z+]Lcom/android/server/AppStateTracker;Lcom/android/server/AppStateTrackerImpl;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
-HPLcom/android/server/am/ActiveServices;->applyForegroundServiceNotificationLocked(Landroid/app/Notification;Ljava/lang/String;ILjava/lang/String;I)Landroid/app/ActivityManagerInternal$ServiceNotificationPolicy;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
+HSPLcom/android/server/am/ActiveServices;->applyForegroundServiceNotificationLocked(Landroid/app/Notification;Ljava/lang/String;ILjava/lang/String;I)Landroid/app/ActivityManagerInternal$ServiceNotificationPolicy;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
 HSPLcom/android/server/am/ActiveServices;->attachApplicationLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;)Z+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-HSPLcom/android/server/am/ActiveServices;->bindServiceLocked(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;Landroid/app/IServiceConnection;ILjava/lang/String;ZILjava/lang/String;Ljava/lang/String;I)I+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ConnectionRecord;Lcom/android/server/am/ConnectionRecord;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/internal/app/procstats/ServiceState;Lcom/android/internal/app/procstats/ServiceState;]Lcom/android/server/am/ActiveServices$ServiceMap;Lcom/android/server/am/ActiveServices$ServiceMap;]Landroid/app/IServiceConnection;Landroid/app/LoadedApk$ServiceDispatcher$InnerConnection;,Landroid/app/IServiceConnection$Stub$Proxy;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/ActivityServiceConnectionsHolder;Lcom/android/server/wm/ActivityServiceConnectionsHolder;]Landroid/content/Intent;Landroid/content/Intent;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-PLcom/android/server/am/ActiveServices;->bringDownDisabledPackageServicesLocked(Ljava/lang/String;Ljava/util/Set;IZZZ)Z
-HPLcom/android/server/am/ActiveServices;->bringDownServiceIfNeededLocked(Lcom/android/server/am/ServiceRecord;ZZZ)V+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLcom/android/server/am/ActiveServices;->bringDownServiceLocked(Lcom/android/server/am/ServiceRecord;Z)V+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ConnectionRecord;Lcom/android/server/am/ConnectionRecord;]Landroid/content/Intent$FilterComparison;Landroid/content/Intent$FilterComparison;]Lcom/android/server/am/ActiveServices$ServiceRestarter;Lcom/android/server/am/ActiveServices$ServiceRestarter;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/internal/app/procstats/ServiceState;Lcom/android/internal/app/procstats/ServiceState;]Landroid/app/IServiceConnection;Landroid/app/LoadedApk$ServiceDispatcher$InnerConnection;,Landroid/app/IServiceConnection$Stub$Proxy;]Lcom/android/server/am/ActiveServices$ServiceMap;Lcom/android/server/am/ActiveServices$ServiceMap;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;
-HSPLcom/android/server/am/ActiveServices;->bringUpServiceLocked(Lcom/android/server/am/ServiceRecord;IZZZZZ)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/content/Intent$FilterComparison;Landroid/content/Intent$FilterComparison;
+HSPLcom/android/server/am/ActiveServices;->bindServiceLocked(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;Landroid/app/IServiceConnection;ILjava/lang/String;ZILjava/lang/String;Ljava/lang/String;I)I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Lcom/android/server/am/ConnectionRecord;Lcom/android/server/am/ConnectionRecord;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/internal/app/procstats/ServiceState;Lcom/android/internal/app/procstats/ServiceState;]Landroid/app/IServiceConnection;Landroid/app/LoadedApk$ServiceDispatcher$InnerConnection;,Landroid/app/IServiceConnection$Stub$Proxy;]Lcom/android/server/am/ActiveServices$ServiceMap;Lcom/android/server/am/ActiveServices$ServiceMap;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/ActivityServiceConnectionsHolder;Lcom/android/server/wm/ActivityServiceConnectionsHolder;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/am/ActiveServices;->bringDownDisabledPackageServicesLocked(Ljava/lang/String;Ljava/util/Set;IZZZ)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
+HSPLcom/android/server/am/ActiveServices;->bringDownServiceIfNeededLocked(Lcom/android/server/am/ServiceRecord;ZZZ)V+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/am/ActiveServices;->bringDownServiceLocked(Lcom/android/server/am/ServiceRecord;Z)V+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ConnectionRecord;Lcom/android/server/am/ConnectionRecord;]Landroid/content/Intent$FilterComparison;Landroid/content/Intent$FilterComparison;]Lcom/android/server/am/ActiveServices$ServiceRestarter;Lcom/android/server/am/ActiveServices$ServiceRestarter;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/internal/app/procstats/ServiceState;Lcom/android/internal/app/procstats/ServiceState;]Landroid/app/IServiceConnection;Landroid/app/LoadedApk$ServiceDispatcher$InnerConnection;,Landroid/app/IServiceConnection$Stub$Proxy;]Lcom/android/server/am/ActiveServices$ServiceMap;Lcom/android/server/am/ActiveServices$ServiceMap;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;
+HSPLcom/android/server/am/ActiveServices;->bringUpServiceLocked(Lcom/android/server/am/ServiceRecord;IZZZZZ)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Landroid/content/Intent$FilterComparison;Landroid/content/Intent$FilterComparison;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActiveServices;->bumpServiceExecutingLocked(Lcom/android/server/am/ServiceRecord;ZLjava/lang/String;Ljava/lang/String;)Z+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Lcom/android/internal/app/procstats/ServiceState;Lcom/android/internal/app/procstats/ServiceState;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 PLcom/android/server/am/ActiveServices;->canAllowWhileInUsePermissionInFgsLocked(IILjava/lang/String;)Z
 HPLcom/android/server/am/ActiveServices;->canBindingClientStartFgsLocked(I)Ljava/lang/String;
 PLcom/android/server/am/ActiveServices;->canStartForegroundServiceLocked(IILjava/lang/String;)Z
 HSPLcom/android/server/am/ActiveServices;->cancelForegroundNotificationLocked(Lcom/android/server/am/ServiceRecord;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
-HPLcom/android/server/am/ActiveServices;->cleanUpServices(ILandroid/content/ComponentName;Landroid/content/Intent;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/am/ActiveServices;->clearRestartingIfNeededLocked(Lcom/android/server/am/ServiceRecord;)V
+HPLcom/android/server/am/ActiveServices;->cleanUpServices(ILandroid/content/ComponentName;Landroid/content/Intent;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HPLcom/android/server/am/ActiveServices;->clearRestartingIfNeededLocked(Lcom/android/server/am/ServiceRecord;)V+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Lcom/android/internal/app/procstats/ServiceState;Lcom/android/internal/app/procstats/ServiceState;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/am/ActiveServices;->collectPackageServicesLocked(Ljava/lang/String;Ljava/util/Set;ZZLandroid/util/ArrayMap;)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Set;Landroid/util/ArraySet;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HPLcom/android/server/am/ActiveServices;->decActiveForegroundAppLocked(Lcom/android/server/am/ActiveServices$ServiceMap;Lcom/android/server/am/ServiceRecord;)V
 HSPLcom/android/server/am/ActiveServices;->deferServiceBringupIfFrozenLocked(Lcom/android/server/am/ServiceRecord;Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;IIZZIZLandroid/os/IBinder;ZLandroid/app/IServiceConnection;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
@@ -5947,15 +6232,16 @@
 PLcom/android/server/am/ActiveServices;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HPLcom/android/server/am/ActiveServices;->dumpService(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Ljava/lang/String;[I[Ljava/lang/String;IZ)Z
 HPLcom/android/server/am/ActiveServices;->dumpService(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Lcom/android/server/am/ServiceRecord;[Ljava/lang/String;Z)V
-PLcom/android/server/am/ActiveServices;->fgsStopReasonToString(I)Ljava/lang/String;
+HPLcom/android/server/am/ActiveServices;->fgsStopReasonToString(I)Ljava/lang/String;
 HPLcom/android/server/am/ActiveServices;->findServiceLocked(Landroid/content/ComponentName;Landroid/os/IBinder;I)Lcom/android/server/am/ServiceRecord;+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
 HSPLcom/android/server/am/ActiveServices;->forceStopPackageLocked(Ljava/lang/String;I)V
 HPLcom/android/server/am/ActiveServices;->foregroundAppShownEnoughLocked(Lcom/android/server/am/ActiveServices$ActiveForegroundApp;J)Z
 HPLcom/android/server/am/ActiveServices;->foregroundServiceProcStateChangedLocked(Lcom/android/server/am/UidRecord;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
 HSPLcom/android/server/am/ActiveServices;->getAllowMode(Landroid/content/Intent;Ljava/lang/String;)I+]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/am/ActiveServices;->getAppStateTracker()Lcom/android/server/AppStateTracker;
-HPLcom/android/server/am/ActiveServices;->getExtraRestartTimeInBetweenLocked()J
-HPLcom/android/server/am/ActiveServices;->getRunningServiceInfoLocked(IIIZZ)Ljava/util/List;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;
+HPLcom/android/server/am/ActiveServices;->getExtraRestartTimeInBetweenLocked()J+]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;
+PLcom/android/server/am/ActiveServices;->getForegroundServiceTypeLocked(Landroid/content/ComponentName;Landroid/os/IBinder;)I
+HPLcom/android/server/am/ActiveServices;->getRunningServiceInfoLocked(IIIZZ)Ljava/util/List;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/am/ActiveServices;->getServiceByNameLocked(Landroid/content/ComponentName;I)Lcom/android/server/am/ServiceRecord;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
 HSPLcom/android/server/am/ActiveServices;->getServiceMapLocked(I)Lcom/android/server/am/ActiveServices$ServiceMap;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;
 PLcom/android/server/am/ActiveServices;->getServicesLocked(I)Landroid/util/ArrayMap;
@@ -5969,41 +6255,42 @@
 HSPLcom/android/server/am/ActiveServices;->isServiceNeededLocked(Lcom/android/server/am/ServiceRecord;ZZ)Z+]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;
 HPLcom/android/server/am/ActiveServices;->isServiceRestartBackoffEnabledLocked(Ljava/lang/String;)Z
 HSPLcom/android/server/am/ActiveServices;->killServicesLocked(Lcom/android/server/am/ProcessRecord;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HPLcom/android/server/am/ActiveServices;->lambda$attachApplicationLocked$1()V
+HPLcom/android/server/am/ActiveServices;->lambda$attachApplicationLocked$1()V+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
 PLcom/android/server/am/ActiveServices;->lambda$bringDownDisabledPackageServicesLocked$2(Ljava/util/ArrayList;)V
 HPLcom/android/server/am/ActiveServices;->lambda$canBindingClientStartFgsLocked$4(ILandroid/util/ArraySet;Lcom/android/server/am/ProcessRecord;)Landroid/util/Pair;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/am/ActiveServices;->lambda$shouldAllowFgsStartForegroundNoBindingCheckLocked$5(ILcom/android/server/am/ProcessRecord;)Ljava/lang/Integer;+]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
-HPLcom/android/server/am/ActiveServices;->lambda$shouldAllowFgsWhileInUsePermissionLocked$3(ILcom/android/server/am/ProcessRecord;)Ljava/lang/Integer;
+HSPLcom/android/server/am/ActiveServices;->lambda$shouldAllowFgsStartForegroundNoBindingCheckLocked$5(ILcom/android/server/am/ProcessRecord;)Ljava/lang/Integer;+]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
+HSPLcom/android/server/am/ActiveServices;->lambda$shouldAllowFgsWhileInUsePermissionLocked$3(ILcom/android/server/am/ProcessRecord;)Ljava/lang/Integer;+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HPLcom/android/server/am/ActiveServices;->logFGSStateChangeLocked(Lcom/android/server/am/ServiceRecord;III)V
 HPLcom/android/server/am/ActiveServices;->logFgsBackgroundStart(Lcom/android/server/am/ServiceRecord;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HPLcom/android/server/am/ActiveServices;->makeRunningServiceInfoLocked(Lcom/android/server/am/ServiceRecord;)Landroid/app/ActivityManager$RunningServiceInfo;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/am/ActiveServices;->maybeLogBindCrossProfileService(ILjava/lang/String;I)V+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Landroid/app/admin/DevicePolicyEventLogger;Landroid/app/admin/DevicePolicyEventLogger;
-PLcom/android/server/am/ActiveServices;->newServiceDumperLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;)Lcom/android/server/am/ActiveServices$ServiceDumper;
+HSPLcom/android/server/am/ActiveServices;->newServiceDumperLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;)Lcom/android/server/am/ActiveServices$ServiceDumper;
 HSPLcom/android/server/am/ActiveServices;->notifyBindingServiceEventLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;)V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Landroid/os/Message;Landroid/os/Message;
 HPLcom/android/server/am/ActiveServices;->onForegroundServiceNotificationUpdateLocked(ZLandroid/app/Notification;ILjava/lang/String;I)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+PLcom/android/server/am/ActiveServices;->peekServiceLocked(Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;)Landroid/os/IBinder;
 HPLcom/android/server/am/ActiveServices;->performRescheduleServiceRestartOnMemoryPressureLocked(JJLjava/lang/String;J)V
-HPLcom/android/server/am/ActiveServices;->performScheduleRestartLocked(Lcom/android/server/am/ServiceRecord;Ljava/lang/String;Ljava/lang/String;J)V
-HPLcom/android/server/am/ActiveServices;->performServiceRestartLocked(Lcom/android/server/am/ServiceRecord;)V
+HPLcom/android/server/am/ActiveServices;->performScheduleRestartLocked(Lcom/android/server/am/ServiceRecord;Ljava/lang/String;Ljava/lang/String;J)V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HPLcom/android/server/am/ActiveServices;->performServiceRestartLocked(Lcom/android/server/am/ServiceRecord;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/Intent$FilterComparison;Landroid/content/Intent$FilterComparison;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/content/Intent;Landroid/content/Intent;
 PLcom/android/server/am/ActiveServices;->processStartTimedOutLocked(Lcom/android/server/am/ProcessRecord;)V
-HSPLcom/android/server/am/ActiveServices;->publishServiceLocked(Lcom/android/server/am/ServiceRecord;Landroid/content/Intent;Landroid/os/IBinder;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/Intent$FilterComparison;Landroid/content/Intent$FilterComparison;]Landroid/app/IServiceConnection;Landroid/app/LoadedApk$ServiceDispatcher$InnerConnection;,Landroid/app/IServiceConnection$Stub$Proxy;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/am/ActiveServices;->publishServiceLocked(Lcom/android/server/am/ServiceRecord;Landroid/content/Intent;Landroid/os/IBinder;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/app/IServiceConnection;Landroid/app/LoadedApk$ServiceDispatcher$InnerConnection;,Landroid/app/IServiceConnection$Stub$Proxy;]Landroid/content/Intent$FilterComparison;Landroid/content/Intent$FilterComparison;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/am/ActiveServices;->realStartServiceLocked(Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ProcessRecord;Landroid/app/IApplicationThread;ILcom/android/server/am/UidRecord;ZZ)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HPLcom/android/server/am/ActiveServices;->registerAppOpCallbackLocked(Lcom/android/server/am/ServiceRecord;)V
 PLcom/android/server/am/ActiveServices;->registerForegroundServiceObserverLocked(ILandroid/app/IForegroundServiceObserver;)Z
-HPLcom/android/server/am/ActiveServices;->removeConnectionLocked(Lcom/android/server/am/ConnectionRecord;Lcom/android/server/am/ProcessRecord;Lcom/android/server/wm/ActivityServiceConnectionsHolder;Z)V+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ConnectionRecord;Lcom/android/server/am/ConnectionRecord;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/content/Intent$FilterComparison;Landroid/content/Intent$FilterComparison;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/internal/app/procstats/ServiceState;Lcom/android/internal/app/procstats/ServiceState;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Landroid/app/IServiceConnection;Landroid/app/LoadedApk$ServiceDispatcher$InnerConnection;,Landroid/app/IServiceConnection$Stub$Proxy;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/ActivityServiceConnectionsHolder;Lcom/android/server/wm/ActivityServiceConnectionsHolder;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;
+HSPLcom/android/server/am/ActiveServices;->removeConnectionLocked(Lcom/android/server/am/ConnectionRecord;Lcom/android/server/am/ProcessRecord;Lcom/android/server/wm/ActivityServiceConnectionsHolder;Z)V+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ConnectionRecord;Lcom/android/server/am/ConnectionRecord;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/content/Intent$FilterComparison;Landroid/content/Intent$FilterComparison;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/internal/app/procstats/ServiceState;Lcom/android/internal/app/procstats/ServiceState;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Landroid/app/IServiceConnection;Landroid/app/LoadedApk$ServiceDispatcher$InnerConnection;,Landroid/app/IServiceConnection$Stub$Proxy;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/ActivityServiceConnectionsHolder;Lcom/android/server/wm/ActivityServiceConnectionsHolder;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;
 HSPLcom/android/server/am/ActiveServices;->removeServiceNotificationDeferralsLocked(Ljava/lang/String;I)V
 HSPLcom/android/server/am/ActiveServices;->removeServiceRestartBackoffEnabledLocked(Ljava/lang/String;)V
-HSPLcom/android/server/am/ActiveServices;->requestServiceBindingLocked(Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/IntentBindRecord;ZZ)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/Intent$FilterComparison;Landroid/content/Intent$FilterComparison;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/am/ActiveServices;->requestServiceBindingLocked(Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/IntentBindRecord;ZZ)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/Intent$FilterComparison;Landroid/content/Intent$FilterComparison;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;
 HSPLcom/android/server/am/ActiveServices;->requestServiceBindingsLocked(Lcom/android/server/am/ServiceRecord;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
 HSPLcom/android/server/am/ActiveServices;->requestStartTargetPermissionsReviewIfNeededLocked(Lcom/android/server/am/ServiceRecord;Ljava/lang/String;Ljava/lang/String;ILandroid/content/Intent;ZIZLandroid/app/IServiceConnection;)Z+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HPLcom/android/server/am/ActiveServices;->requestUpdateActiveForegroundAppsLocked(Lcom/android/server/am/ActiveServices$ServiceMap;J)V
-HPLcom/android/server/am/ActiveServices;->rescheduleServiceRestartIfPossibleLocked(JJLjava/lang/String;J)V
+HPLcom/android/server/am/ActiveServices;->rescheduleServiceRestartIfPossibleLocked(JJLjava/lang/String;J)V+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/am/ActiveServices;->rescheduleServiceRestartOnMemoryPressureIfNeededLocked(IILjava/lang/String;J)V
 HSPLcom/android/server/am/ActiveServices;->resetFgsRestrictionLocked(Lcom/android/server/am/ServiceRecord;)V
-HPLcom/android/server/am/ActiveServices;->retrieveServiceLocked(Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIZZZZ)Lcom/android/server/am/ActiveServices$ServiceLookupResult;+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
-HSPLcom/android/server/am/ActiveServices;->retrieveServiceLocked(Landroid/content/Intent;Ljava/lang/String;ZILjava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIZZZZ)Lcom/android/server/am/ActiveServices$ServiceLookupResult;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/am/ComponentAliasResolver;Lcom/android/server/am/ComponentAliasResolver;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/am/ActiveServices$ServiceRestarter;Lcom/android/server/am/ActiveServices$ServiceRestarter;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/am/ComponentAliasResolver$Resolution;Lcom/android/server/am/ComponentAliasResolver$Resolution;]Lcom/android/server/firewall/IntentFirewall;Lcom/android/server/firewall/IntentFirewall;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/am/ActiveServices;->retrieveServiceLocked(Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIZZZZ)Lcom/android/server/am/ActiveServices$ServiceLookupResult;+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
+HSPLcom/android/server/am/ActiveServices;->retrieveServiceLocked(Landroid/content/Intent;Ljava/lang/String;ZILjava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIZZZZ)Lcom/android/server/am/ActiveServices$ServiceLookupResult;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/am/ComponentAliasResolver;Lcom/android/server/am/ComponentAliasResolver;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/am/ActiveServices$ServiceRestarter;Lcom/android/server/am/ActiveServices$ServiceRestarter;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/am/ComponentAliasResolver$Resolution;Lcom/android/server/am/ComponentAliasResolver$Resolution;]Lcom/android/server/firewall/IntentFirewall;Lcom/android/server/firewall/IntentFirewall;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Landroid/content/Intent;Landroid/content/Intent;
 HPLcom/android/server/am/ActiveServices;->schedulePendingServiceStartLocked(Ljava/lang/String;I)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HPLcom/android/server/am/ActiveServices;->scheduleServiceForegroundTransitionTimeoutLocked(Lcom/android/server/am/ServiceRecord;)V
-HPLcom/android/server/am/ActiveServices;->scheduleServiceRestartLocked(Lcom/android/server/am/ServiceRecord;Z)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/am/ServiceRecord$StartItem;Lcom/android/server/am/ServiceRecord$StartItem;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/am/ActiveServices;->scheduleServiceRestartLocked(Lcom/android/server/am/ServiceRecord;Z)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/am/ServiceRecord$StartItem;Lcom/android/server/am/ServiceRecord$StartItem;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/am/ActiveServices;->scheduleServiceTimeoutLocked(Lcom/android/server/am/ProcessRecord;)V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ActiveServices;->sendServiceArgsLocked(Lcom/android/server/am/ServiceRecord;ZZ)V+]Landroid/content/pm/ParceledListSlice;Landroid/content/pm/ParceledListSlice;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ServiceRecord$StartItem;Lcom/android/server/am/ServiceRecord$StartItem;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/uri/UriGrantsManagerInternal;Lcom/android/server/uri/UriGrantsManagerService$LocalService;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActiveServices;->serviceDoneExecutingLocked(Lcom/android/server/am/ServiceRecord;IIIZ)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -6011,55 +6298,55 @@
 PLcom/android/server/am/ActiveServices;->serviceForegroundCrash(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Landroid/content/ComponentName;)V
 PLcom/android/server/am/ActiveServices;->serviceForegroundTimeout(Lcom/android/server/am/ServiceRecord;)V
 PLcom/android/server/am/ActiveServices;->serviceForegroundTimeoutANR(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;)V
-PLcom/android/server/am/ActiveServices;->serviceProcessGoneLocked(Lcom/android/server/am/ServiceRecord;Z)V
+HPLcom/android/server/am/ActiveServices;->serviceProcessGoneLocked(Lcom/android/server/am/ServiceRecord;Z)V
 HPLcom/android/server/am/ActiveServices;->serviceTimeout(Lcom/android/server/am/ProcessRecord;)V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ActiveServices;->setAllowListWhileInUsePermissionInFgs()V
 HSPLcom/android/server/am/ActiveServices;->setFgsRestrictionLocked(Ljava/lang/String;IILandroid/content/Intent;Lcom/android/server/am/ServiceRecord;IZ)V+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
 HPLcom/android/server/am/ActiveServices;->setServiceForegroundInnerLocked(Lcom/android/server/am/ServiceRecord;ILandroid/app/Notification;II)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/content/Intent$FilterComparison;Landroid/content/Intent$FilterComparison;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/content/pm/ServiceInfo;Landroid/content/pm/ServiceInfo;]Lcom/android/internal/app/procstats/ServiceState;Lcom/android/internal/app/procstats/ServiceState;]Lcom/android/server/am/ActiveServices$ServiceMap;Lcom/android/server/am/ActiveServices$ServiceMap;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 HPLcom/android/server/am/ActiveServices;->setServiceForegroundLocked(Landroid/content/ComponentName;Landroid/os/IBinder;ILandroid/app/Notification;II)V+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
-HSPLcom/android/server/am/ActiveServices;->shouldAllowFgsStartForegroundNoBindingCheckLocked(IIILjava/lang/String;Lcom/android/server/am/ServiceRecord;)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
+HSPLcom/android/server/am/ActiveServices;->shouldAllowFgsStartForegroundNoBindingCheckLocked(IIILjava/lang/String;Lcom/android/server/am/ServiceRecord;)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActiveServices;->shouldAllowFgsStartForegroundWithBindingCheckLocked(ILjava/lang/String;IILandroid/content/Intent;Lcom/android/server/am/ServiceRecord;I)I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-HSPLcom/android/server/am/ActiveServices;->shouldAllowFgsWhileInUsePermissionLocked(Ljava/lang/String;IILcom/android/server/am/ServiceRecord;Z)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
+HSPLcom/android/server/am/ActiveServices;->shouldAllowFgsWhileInUsePermissionLocked(Ljava/lang/String;IILcom/android/server/am/ServiceRecord;Z)I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HPLcom/android/server/am/ActiveServices;->shouldShowFgsNotificationLocked(Lcom/android/server/am/ServiceRecord;)Z+]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
 HPLcom/android/server/am/ActiveServices;->showFgsBgRestrictedNotificationLocked(Lcom/android/server/am/ServiceRecord;)V
 HPLcom/android/server/am/ActiveServices;->signalForegroundServiceObserversLocked(Lcom/android/server/am/ServiceRecord;)V+]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;]Landroid/app/IForegroundServiceObserver;Landroid/app/IForegroundServiceObserver$Stub$Proxy;
 HPLcom/android/server/am/ActiveServices;->startFgsDeferralTimerLocked(Lcom/android/server/am/ServiceRecord;)V
-HPLcom/android/server/am/ActiveServices;->startServiceInnerLocked(Lcom/android/server/am/ActiveServices$ServiceMap;Landroid/content/Intent;Lcom/android/server/am/ServiceRecord;ZZ)Landroid/content/ComponentName;+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Lcom/android/internal/app/procstats/ServiceState;Lcom/android/internal/app/procstats/ServiceState;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/am/ActiveServices$ServiceMap;Lcom/android/server/am/ActiveServices$ServiceMap;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/content/Intent;Landroid/content/Intent;
-HPLcom/android/server/am/ActiveServices;->startServiceInnerLocked(Lcom/android/server/am/ServiceRecord;Landroid/content/Intent;IIZZZLandroid/os/IBinder;)Landroid/content/ComponentName;+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/internal/app/procstats/ServiceState;Lcom/android/internal/app/procstats/ServiceState;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/uri/UriGrantsManagerInternal;Lcom/android/server/uri/UriGrantsManagerService$LocalService;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HPLcom/android/server/am/ActiveServices;->startServiceLocked(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;IIZLjava/lang/String;Ljava/lang/String;I)Landroid/content/ComponentName;
-HPLcom/android/server/am/ActiveServices;->startServiceLocked(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;IIZLjava/lang/String;Ljava/lang/String;IZLandroid/os/IBinder;)Landroid/content/ComponentName;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-HPLcom/android/server/am/ActiveServices;->stopAllForegroundServicesLocked(ILjava/lang/String;)V
+HSPLcom/android/server/am/ActiveServices;->startServiceInnerLocked(Lcom/android/server/am/ActiveServices$ServiceMap;Landroid/content/Intent;Lcom/android/server/am/ServiceRecord;ZZIZ)Landroid/content/ComponentName;+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/internal/app/procstats/ServiceState;Lcom/android/internal/app/procstats/ServiceState;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/am/ActiveServices$ServiceMap;Lcom/android/server/am/ActiveServices$ServiceMap;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/am/ActiveServices;->startServiceInnerLocked(Lcom/android/server/am/ServiceRecord;Landroid/content/Intent;IIZZZLandroid/os/IBinder;)Landroid/content/ComponentName;+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/internal/app/procstats/ServiceState;Lcom/android/internal/app/procstats/ServiceState;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/uri/UriGrantsManagerInternal;Lcom/android/server/uri/UriGrantsManagerService$LocalService;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/am/ActiveServices;->startServiceLocked(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;IIZLjava/lang/String;Ljava/lang/String;I)Landroid/content/ComponentName;
+HSPLcom/android/server/am/ActiveServices;->startServiceLocked(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;IIZLjava/lang/String;Ljava/lang/String;IZLandroid/os/IBinder;)Landroid/content/ComponentName;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HPLcom/android/server/am/ActiveServices;->stopAllForegroundServicesLocked(ILjava/lang/String;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/am/ActiveServices;->stopInBackgroundLocked(I)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ActiveServices$ServiceMap;Lcom/android/server/am/ActiveServices$ServiceMap;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-HPLcom/android/server/am/ActiveServices;->stopServiceAndUpdateAllowlistManagerLocked(Lcom/android/server/am/ServiceRecord;)V+]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;
+HSPLcom/android/server/am/ActiveServices;->stopServiceAndUpdateAllowlistManagerLocked(Lcom/android/server/am/ServiceRecord;)V+]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;
 HPLcom/android/server/am/ActiveServices;->stopServiceLocked(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;I)I+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HPLcom/android/server/am/ActiveServices;->stopServiceLocked(Lcom/android/server/am/ServiceRecord;Z)V+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Lcom/android/internal/app/procstats/ServiceState;Lcom/android/internal/app/procstats/ServiceState;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
 HPLcom/android/server/am/ActiveServices;->stopServiceTokenLocked(Landroid/content/ComponentName;Landroid/os/IBinder;I)Z+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/internal/app/procstats/ServiceState;Lcom/android/internal/app/procstats/ServiceState;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/ServiceRecord$StartItem;Lcom/android/server/am/ServiceRecord$StartItem;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/am/ActiveServices;->systemServicesReady()V
 HPLcom/android/server/am/ActiveServices;->unbindFinishedLocked(Lcom/android/server/am/ServiceRecord;Landroid/content/Intent;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/am/ActiveServices;->unbindServiceLocked(Landroid/app/IServiceConnection;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Landroid/app/IServiceConnection;Landroid/app/LoadedApk$ServiceDispatcher$InnerConnection;,Landroid/app/IServiceConnection$Stub$Proxy;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HSPLcom/android/server/am/ActiveServices;->unbindServiceLocked(Landroid/app/IServiceConnection;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Landroid/app/IServiceConnection;Landroid/app/LoadedApk$ServiceDispatcher$InnerConnection;,Landroid/app/IServiceConnection$Stub$Proxy;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HPLcom/android/server/am/ActiveServices;->unregisterAppOpCallbackLocked(Lcom/android/server/am/ServiceRecord;)V
 HSPLcom/android/server/am/ActiveServices;->unscheduleServiceRestartLocked(Lcom/android/server/am/ServiceRecord;IZ)Z+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/am/ActiveServices;->updateAllowlistManagerLocked(Lcom/android/server/am/ProcessServiceRecord;)V+]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;
 HPLcom/android/server/am/ActiveServices;->updateForegroundApps(Lcom/android/server/am/ActiveServices$ServiceMap;)V
 HPLcom/android/server/am/ActiveServices;->updateScreenStateLocked(Z)V
-HPLcom/android/server/am/ActiveServices;->updateServiceApplicationInfoLocked(Landroid/content/pm/ApplicationInfo;)V
+HPLcom/android/server/am/ActiveServices;->updateServiceApplicationInfoLocked(Landroid/content/pm/ApplicationInfo;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/am/ActiveServices;->updateServiceClientActivitiesLocked(Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ConnectionRecord;Z)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActiveServices;->updateServiceConnectionActivitiesLocked(Lcom/android/server/am/ProcessServiceRecord;)V+]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
 HSPLcom/android/server/am/ActiveServices;->updateServiceForegroundLocked(Lcom/android/server/am/ProcessServiceRecord;Z)V+]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HPLcom/android/server/am/ActiveServices;->updateServiceGroupLocked(Landroid/app/IServiceConnection;II)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Landroid/app/IServiceConnection;Landroid/app/IServiceConnection$Stub$Proxy;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/am/ActiveServices;->verifyPackage(Ljava/lang/String;I)Z
+HSPLcom/android/server/am/ActiveServices;->verifyPackage(Ljava/lang/String;I)Z
 HPLcom/android/server/am/ActiveServices;->withinFgsDeferRateLimit(Lcom/android/server/am/ServiceRecord;J)Z
-PLcom/android/server/am/ActiveUids$$ExternalSyntheticLambda0;-><init>(Ljava/io/PrintWriter;)V
-PLcom/android/server/am/ActiveUids$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
-PLcom/android/server/am/ActiveUids;->$r8$lambda$G_7-jFL0r5ri3SJ6Mg5gotLMr8Y(Ljava/io/PrintWriter;Lcom/android/server/am/ProcessRecord;)V
+HSPLcom/android/server/am/ActiveUids$$ExternalSyntheticLambda0;-><init>(Ljava/io/PrintWriter;)V
+HSPLcom/android/server/am/ActiveUids$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/am/ActiveUids;->$r8$lambda$G_7-jFL0r5ri3SJ6Mg5gotLMr8Y(Ljava/io/PrintWriter;Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ActiveUids;-><init>(Lcom/android/server/am/ActivityManagerService;Z)V
 HSPLcom/android/server/am/ActiveUids;->clear()V
-HPLcom/android/server/am/ActiveUids;->dump(Ljava/io/PrintWriter;Ljava/lang/String;ILjava/lang/String;Z)Z
+HSPLcom/android/server/am/ActiveUids;->dump(Ljava/io/PrintWriter;Ljava/lang/String;ILjava/lang/String;Z)Z
 HPLcom/android/server/am/ActiveUids;->dumpProto(Landroid/util/proto/ProtoOutputStream;Ljava/lang/String;IJ)V
 HSPLcom/android/server/am/ActiveUids;->get(I)Lcom/android/server/am/UidRecord;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/am/ActiveUids;->keyAt(I)I
-PLcom/android/server/am/ActiveUids;->lambda$dump$0(Ljava/io/PrintWriter;Lcom/android/server/am/ProcessRecord;)V
-HSPLcom/android/server/am/ActiveUids;->put(ILcom/android/server/am/UidRecord;)V
+HSPLcom/android/server/am/ActiveUids;->lambda$dump$0(Ljava/io/PrintWriter;Lcom/android/server/am/ProcessRecord;)V
+HSPLcom/android/server/am/ActiveUids;->put(ILcom/android/server/am/UidRecord;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;
 HSPLcom/android/server/am/ActiveUids;->remove(I)V
 HSPLcom/android/server/am/ActiveUids;->size()I
 HSPLcom/android/server/am/ActiveUids;->valueAt(I)Lcom/android/server/am/UidRecord;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
@@ -6096,10 +6383,10 @@
 HSPLcom/android/server/am/ActivityManagerConstants;->updateNoKillCachedProcessesUntilBootCompleted()V
 HSPLcom/android/server/am/ActivityManagerConstants;->updatePushMessagingOverQuotaBehavior()V
 HSPLcom/android/server/am/ActivityManagerProcLock;-><init>()V
-PLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/am/ProcessRecord;Landroid/os/Debug$MemoryInfo;JLcom/android/server/am/ProcessProfileRecord;)V
+HPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/am/ProcessRecord;Landroid/os/Debug$MemoryInfo;JLcom/android/server/am/ProcessProfileRecord;)V
 HPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda10;-><init>(Landroid/hardware/display/DisplayManagerInternal;)V
-PLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda10;->run()V
+HSPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda10;->run()V
 PLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda11;-><init>(Lcom/android/server/wm/WindowManagerService;)V
 PLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda11;->run()V
 HPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda12;-><init>(Lcom/android/server/am/ActivityManagerService;JJZZ)V
@@ -6110,17 +6397,17 @@
 PLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda14;->run()V
 HSPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda15;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 HSPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda15;->run()V
-HPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda16;-><init>(Ljava/lang/StringBuilder;Landroid/content/pm/IPackageManager;I)V
-HPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda16;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda16;-><init>(Ljava/lang/StringBuilder;Landroid/content/pm/IPackageManager;I)V
+HSPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda16;->accept(Ljava/lang/Object;)V
 PLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda19;-><init>()V
-PLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda19;->applyAsLong(Ljava/lang/Object;)J
+HPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda19;->applyAsLong(Ljava/lang/Object;)J
 PLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda20;-><init>(Ljava/io/PrintWriter;JJ)V
 PLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda20;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda21;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 PLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda21;->run()V
 HSPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda22;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 PLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda22;->accept(Ljava/lang/Object;)V
-PLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda23;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+HSPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda23;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 PLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda23;->onLimitReached(I)V
 PLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda24;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessRecord;JJJI)V
 PLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda24;->run()V
@@ -6136,21 +6423,23 @@
 PLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda33;->run()V
 PLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda35;-><init>(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;)V
 PLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda35;->accept(Ljava/lang/Object;)V
-PLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda37;-><init>(Lcom/android/server/am/ProcessRecord;JJJIJJ)V
-PLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda37;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda37;-><init>(Lcom/android/server/am/ProcessRecord;JJJIJJ)V
+HPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda37;->accept(Ljava/lang/Object;)V
 PLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda38;-><init>(Landroid/util/SparseArray;[Landroid/os/Debug$MemoryInfo;ZLcom/android/server/am/ActivityManagerService$MemoryUsageDumpOptions;[J[JLjava/util/ArrayList;[J[J[J[J[J[J[J[J[Ljava/util/ArrayList;[J)V
 HPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda38;->accept(Ljava/lang/Object;)V
 PLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/am/ActivityManagerService;ZJJJJ)V
 HPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;)V
-HPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda4;-><init>([ILjava/lang/String;)V
-HPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda4;-><init>([ILjava/lang/String;)V
+HSPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda6;-><init>(ZIZI[Ljava/util/List;)V
 HPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda6;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda9;-><init>(Lcom/android/server/am/ProcessRecord;J[JJLcom/android/server/am/ProcessProfileRecord;)V
+PLcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda9;->accept(Ljava/lang/Object;)V
 PLcom/android/server/am/ActivityManagerService$10;-><init>(Lcom/android/server/am/ActivityManagerService;ILandroid/os/IBinder;Ljava/lang/String;)V
-PLcom/android/server/am/ActivityManagerService$13;-><init>(Lcom/android/server/am/ActivityManagerService;)V
-PLcom/android/server/am/ActivityManagerService$13;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V
+HSPLcom/android/server/am/ActivityManagerService$13;-><init>(Lcom/android/server/am/ActivityManagerService;)V
+HSPLcom/android/server/am/ActivityManagerService$13;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V
 HSPLcom/android/server/am/ActivityManagerService$15;-><init>(Lcom/android/server/am/ActivityManagerService;IILandroid/os/IBinder;Ljava/lang/String;Landroid/app/ApplicationErrorReport$ParcelableCrashInfo;)V
-HSPLcom/android/server/am/ActivityManagerService$15;->run()V
+HSPLcom/android/server/am/ActivityManagerService$15;->run()V+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActivityManagerService$16;-><init>(Lcom/android/server/am/ActivityManagerService;Ljava/lang/String;Ljava/lang/String;Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/io/File;Landroid/app/ApplicationErrorReport$CrashInfo;Landroid/os/DropBoxManager;)V
 HSPLcom/android/server/am/ActivityManagerService$16;->run()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/io/InputStream;Ljava/lang/UNIXProcess$ProcessPipeInputStream;]Ljava/lang/Process;Ljava/lang/UNIXProcess;]Ljava/io/InputStreamReader;Ljava/io/InputStreamReader;]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/io/OutputStream;Ljava/lang/UNIXProcess$ProcessPipeOutputStream;]Landroid/os/DropBoxManager;Landroid/os/DropBoxManager;]Ljava/lang/ProcessBuilder;Ljava/lang/ProcessBuilder;
 PLcom/android/server/am/ActivityManagerService$17;-><init>(Z)V
@@ -6158,19 +6447,21 @@
 HPLcom/android/server/am/ActivityManagerService$17;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 PLcom/android/server/am/ActivityManagerService$18;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessRecord;)V
 PLcom/android/server/am/ActivityManagerService$18;->run()V
+PLcom/android/server/am/ActivityManagerService$19;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/os/RemoteCallback;)V
+PLcom/android/server/am/ActivityManagerService$19;->onResult(Landroid/os/Bundle;)V
 HSPLcom/android/server/am/ActivityManagerService$1;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 PLcom/android/server/am/ActivityManagerService$1;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
 PLcom/android/server/am/ActivityManagerService$1;->dumpCritical(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
 PLcom/android/server/am/ActivityManagerService$1;->dumpNormal(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
 HSPLcom/android/server/am/ActivityManagerService$2;-><init>(Lcom/android/server/am/ActivityManagerService;)V
-HPLcom/android/server/am/ActivityManagerService$2;->onActivityLaunched(JLandroid/content/ComponentName;I)V
+HSPLcom/android/server/am/ActivityManagerService$2;->onActivityLaunched(JLandroid/content/ComponentName;I)V
 HSPLcom/android/server/am/ActivityManagerService$3;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 HSPLcom/android/server/am/ActivityManagerService$3;->allowFilterResult(Lcom/android/server/am/BroadcastFilter;Ljava/util/List;)Z+]Landroid/content/IIntentReceiver;Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;,Landroid/content/IIntentReceiver$Stub$Proxy;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLcom/android/server/am/ActivityManagerService$3;->allowFilterResult(Ljava/lang/Object;Ljava/util/List;)Z+]Lcom/android/server/am/ActivityManagerService$3;Lcom/android/server/am/ActivityManagerService$3;
 HSPLcom/android/server/am/ActivityManagerService$3;->getIntentFilter(Lcom/android/server/am/BroadcastFilter;)Landroid/content/IntentFilter;
 HSPLcom/android/server/am/ActivityManagerService$3;->getIntentFilter(Ljava/lang/Object;)Landroid/content/IntentFilter;+]Lcom/android/server/am/ActivityManagerService$3;Lcom/android/server/am/ActivityManagerService$3;
-HPLcom/android/server/am/ActivityManagerService$3;->isPackageForFilter(Ljava/lang/String;Lcom/android/server/am/BroadcastFilter;)Z
-HPLcom/android/server/am/ActivityManagerService$3;->isPackageForFilter(Ljava/lang/String;Ljava/lang/Object;)Z+]Lcom/android/server/am/ActivityManagerService$3;Lcom/android/server/am/ActivityManagerService$3;
+HSPLcom/android/server/am/ActivityManagerService$3;->isPackageForFilter(Ljava/lang/String;Lcom/android/server/am/BroadcastFilter;)Z
+HSPLcom/android/server/am/ActivityManagerService$3;->isPackageForFilter(Ljava/lang/String;Ljava/lang/Object;)Z+]Lcom/android/server/am/ActivityManagerService$3;Lcom/android/server/am/ActivityManagerService$3;
 HSPLcom/android/server/am/ActivityManagerService$3;->newArray(I)[Lcom/android/server/am/BroadcastFilter;
 HSPLcom/android/server/am/ActivityManagerService$3;->newArray(I)[Ljava/lang/Object;+]Lcom/android/server/am/ActivityManagerService$3;Lcom/android/server/am/ActivityManagerService$3;
 HSPLcom/android/server/am/ActivityManagerService$3;->newResult(Lcom/android/server/pm/Computer;Lcom/android/server/am/BroadcastFilter;IIJ)Lcom/android/server/am/BroadcastFilter;
@@ -6180,6 +6471,8 @@
 PLcom/android/server/am/ActivityManagerService$5;->opActiveChanged(IILjava/lang/String;Ljava/lang/String;ZII)V
 PLcom/android/server/am/ActivityManagerService$6;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/content/pm/ApplicationInfo;IZIILandroid/content/pm/IPackageDataObserver;)V
 PLcom/android/server/am/ActivityManagerService$6;->onRemoveCompleted(Ljava/lang/String;Z)V
+PLcom/android/server/am/ActivityManagerService$7;-><init>(Lcom/android/server/am/ActivityManagerService;ILjava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService$7;->run()V
 PLcom/android/server/am/ActivityManagerService$8;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 PLcom/android/server/am/ActivityManagerService$8;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/am/ActivityManagerService$9;-><init>(Lcom/android/server/am/ActivityManagerService;)V
@@ -6198,6 +6491,7 @@
 HSPLcom/android/server/am/ActivityManagerService$HiddenApiSettings;->getPolicy()I
 HSPLcom/android/server/am/ActivityManagerService$HiddenApiSettings;->getValidEnforcementPolicy(Ljava/lang/String;)I
 HSPLcom/android/server/am/ActivityManagerService$HiddenApiSettings;->isDisabled()Z
+PLcom/android/server/am/ActivityManagerService$HiddenApiSettings;->onChange(Z)V
 PLcom/android/server/am/ActivityManagerService$HiddenApiSettings;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
 HSPLcom/android/server/am/ActivityManagerService$HiddenApiSettings;->registerObserver()V
 HSPLcom/android/server/am/ActivityManagerService$HiddenApiSettings;->update()V
@@ -6212,9 +6506,10 @@
 HSPLcom/android/server/am/ActivityManagerService$Injector;->isNetworkRestrictedForUid(I)Z
 HSPLcom/android/server/am/ActivityManagerService$IntentFirewallInterface;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 HSPLcom/android/server/am/ActivityManagerService$IntentFirewallInterface;->getAMSLock()Ljava/lang/Object;
-PLcom/android/server/am/ActivityManagerService$ItemMatcher;-><init>()V
-PLcom/android/server/am/ActivityManagerService$ItemMatcher;->build([Ljava/lang/String;I)I
-PLcom/android/server/am/ActivityManagerService$ItemMatcher;->match(Ljava/lang/Object;Landroid/content/ComponentName;)Z
+HSPLcom/android/server/am/ActivityManagerService$ItemMatcher;-><init>()V
+PLcom/android/server/am/ActivityManagerService$ItemMatcher;->build(Ljava/lang/String;)V
+HSPLcom/android/server/am/ActivityManagerService$ItemMatcher;->build([Ljava/lang/String;I)I
+HSPLcom/android/server/am/ActivityManagerService$ItemMatcher;->match(Ljava/lang/Object;Landroid/content/ComponentName;)Z
 HSPLcom/android/server/am/ActivityManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/am/ActivityManagerService$Lifecycle;->getService()Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActivityManagerService$Lifecycle;->onBootPhase(I)V
@@ -6232,8 +6527,8 @@
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->addBindServiceEventListener(Landroid/app/ActivityManagerInternal$BindServiceEventListener;)V
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->addBroadcastEventListener(Landroid/app/ActivityManagerInternal$BroadcastEventListener;)V
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->addForegroundServiceStateListener(Landroid/app/ActivityManagerInternal$ForegroundServiceStateListener;)V
-HPLcom/android/server/am/ActivityManagerService$LocalService;->addPendingTopUid(IILandroid/app/IApplicationThread;)V
-HPLcom/android/server/am/ActivityManagerService$LocalService;->applyForegroundServiceNotification(Landroid/app/Notification;Ljava/lang/String;ILjava/lang/String;I)Landroid/app/ActivityManagerInternal$ServiceNotificationPolicy;+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->addPendingTopUid(IILandroid/app/IApplicationThread;)V
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->applyForegroundServiceNotification(Landroid/app/Notification;Ljava/lang/String;ILjava/lang/String;I)Landroid/app/ActivityManagerInternal$ServiceNotificationPolicy;+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
 HPLcom/android/server/am/ActivityManagerService$LocalService;->broadcastCloseSystemDialogs(Ljava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->broadcastGlobalConfigurationChanged(IZ)V
 HPLcom/android/server/am/ActivityManagerService$LocalService;->broadcastIntent(Landroid/content/Intent;Landroid/content/IIntentReceiver;[Ljava/lang/String;ZI[ILandroid/os/Bundle;)I+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
@@ -6244,23 +6539,23 @@
 PLcom/android/server/am/ActivityManagerService$LocalService;->checkContentProviderUriPermission(Landroid/net/Uri;III)I
 PLcom/android/server/am/ActivityManagerService$LocalService;->cleanUpServices(ILandroid/content/ComponentName;Landroid/content/Intent;)V
 PLcom/android/server/am/ActivityManagerService$LocalService;->clearPendingBackup(I)V
-PLcom/android/server/am/ActivityManagerService$LocalService;->clearPendingIntentAllowBgActivityStarts(Landroid/content/IIntentSender;Landroid/os/IBinder;)V
+HPLcom/android/server/am/ActivityManagerService$LocalService;->clearPendingIntentAllowBgActivityStarts(Landroid/content/IIntentSender;Landroid/os/IBinder;)V
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->deletePendingTopUid(IJ)V
 PLcom/android/server/am/ActivityManagerService$LocalService;->disconnectActivityFromServices(Ljava/lang/Object;)V
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->enforceCallingPermission(Ljava/lang/String;Ljava/lang/String;)V
 HPLcom/android/server/am/ActivityManagerService$LocalService;->ensureNotSpecialUser(I)V
-PLcom/android/server/am/ActivityManagerService$LocalService;->finishBooting()V
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->finishBooting()V
 PLcom/android/server/am/ActivityManagerService$LocalService;->finishUserSwitch(Ljava/lang/Object;)V
 PLcom/android/server/am/ActivityManagerService$LocalService;->getActivityInfoForUser(Landroid/content/pm/ActivityInfo;I)Landroid/content/pm/ActivityInfo;
 HPLcom/android/server/am/ActivityManagerService$LocalService;->getActivityPresentationInfo(Landroid/os/IBinder;)Landroid/content/pm/ActivityPresentationInfo;
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->getBootTimeTempAllowListDuration()J
-PLcom/android/server/am/ActivityManagerService$LocalService;->getCurrentProfileIds()[I
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->getCurrentProfileIds()[I
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->getCurrentUserId()I+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;
 PLcom/android/server/am/ActivityManagerService$LocalService;->getInstrumentationSourceUid(I)I
 PLcom/android/server/am/ActivityManagerService$LocalService;->getIntentForIntentSender(Landroid/content/IIntentSender;)Landroid/content/Intent;
-HPLcom/android/server/am/ActivityManagerService$LocalService;->getIsolatedProcesses(I)Ljava/util/List;
-HPLcom/android/server/am/ActivityManagerService$LocalService;->getMemoryStateForProcesses()Ljava/util/List;+]Lcom/android/server/am/ActivityManagerService$PidMap;Lcom/android/server/am/ActivityManagerService$PidMap;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
-PLcom/android/server/am/ActivityManagerService$LocalService;->getPackageNameByPid(I)Ljava/lang/String;
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->getIsolatedProcesses(I)Ljava/util/List;
+HPLcom/android/server/am/ActivityManagerService$LocalService;->getMemoryStateForProcesses()Ljava/util/List;+]Lcom/android/server/am/ActivityManagerService$PidMap;Lcom/android/server/am/ActivityManagerService$PidMap;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
+HPLcom/android/server/am/ActivityManagerService$LocalService;->getPackageNameByPid(I)Ljava/lang/String;
 PLcom/android/server/am/ActivityManagerService$LocalService;->getPendingIntentActivityAsApp(ILandroid/content/Intent;ILandroid/os/Bundle;Ljava/lang/String;I)Landroid/app/PendingIntent;
 PLcom/android/server/am/ActivityManagerService$LocalService;->getPendingIntentActivityAsApp(I[Landroid/content/Intent;ILandroid/os/Bundle;Ljava/lang/String;I)Landroid/app/PendingIntent;
 HPLcom/android/server/am/ActivityManagerService$LocalService;->getPendingIntentFlags(Landroid/content/IIntentSender;)I
@@ -6268,19 +6563,19 @@
 HPLcom/android/server/am/ActivityManagerService$LocalService;->getPushMessagingOverQuotaBehavior()I
 HPLcom/android/server/am/ActivityManagerService$LocalService;->getRestrictionLevel(I)I
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->getRestrictionLevel(Ljava/lang/String;I)I
-PLcom/android/server/am/ActivityManagerService$LocalService;->getServiceStartForegroundTimeout()I
-PLcom/android/server/am/ActivityManagerService$LocalService;->getTaskIdForActivity(Landroid/os/IBinder;Z)I
+HPLcom/android/server/am/ActivityManagerService$LocalService;->getServiceStartForegroundTimeout()I
+HPLcom/android/server/am/ActivityManagerService$LocalService;->getTaskIdForActivity(Landroid/os/IBinder;Z)I
 PLcom/android/server/am/ActivityManagerService$LocalService;->getUidCapability(I)I
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->getUidProcessState(I)I+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->handleIncomingUser(IIIZILjava/lang/String;Ljava/lang/String;)I+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;
-HSPLcom/android/server/am/ActivityManagerService$LocalService;->hasForegroundServiceNotification(Ljava/lang/String;ILjava/lang/String;)Z
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->hasForegroundServiceNotification(Ljava/lang/String;ILjava/lang/String;)Z+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
 PLcom/android/server/am/ActivityManagerService$LocalService;->hasRunningForegroundService(II)Z
-HPLcom/android/server/am/ActivityManagerService$LocalService;->hasStartedUserState(I)Z
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->hasStartedUserState(I)Z
 PLcom/android/server/am/ActivityManagerService$LocalService;->inputDispatchingResumed(I)V
 PLcom/android/server/am/ActivityManagerService$LocalService;->inputDispatchingTimedOut(IZLjava/lang/String;)J
 PLcom/android/server/am/ActivityManagerService$LocalService;->inputDispatchingTimedOut(Ljava/lang/Object;Ljava/lang/String;Landroid/content/pm/ApplicationInfo;Ljava/lang/String;Ljava/lang/Object;ZLjava/lang/String;)Z
 HPLcom/android/server/am/ActivityManagerService$LocalService;->isActivityStartsLoggingEnabled()Z
-HPLcom/android/server/am/ActivityManagerService$LocalService;->isAppBad(Ljava/lang/String;I)Z
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->isAppBad(Ljava/lang/String;I)Z
 PLcom/android/server/am/ActivityManagerService$LocalService;->isAppForeground(I)Z
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->isAppStartModeDisabled(ILjava/lang/String;)Z+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->isAssociatedCompanionApp(II)Z
@@ -6294,7 +6589,7 @@
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->isProfileOwner(I)Z+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->isSplitConfigurationChange(I)Z
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->isSystemReady()Z
-HPLcom/android/server/am/ActivityManagerService$LocalService;->isTempAllowlistedForFgsWhileInUse(I)Z
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->isTempAllowlistedForFgsWhileInUse(I)Z
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->isUidActive(I)Z+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HPLcom/android/server/am/ActivityManagerService$LocalService;->isUserRunning(II)Z
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->killAllBackgroundProcessesExcept(II)V
@@ -6307,7 +6602,7 @@
 HPLcom/android/server/am/ActivityManagerService$LocalService;->noteAlarmFinish(Landroid/app/PendingIntent;Landroid/os/WorkSource;ILjava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->noteAlarmStart(Landroid/app/PendingIntent;Landroid/os/WorkSource;ILjava/lang/String;)V
 HPLcom/android/server/am/ActivityManagerService$LocalService;->noteWakeupAlarm(Landroid/app/PendingIntent;Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;)V
-HSPLcom/android/server/am/ActivityManagerService$LocalService;->notifyNetworkPolicyRulesUpdated(IJ)V+]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->notifyNetworkPolicyRulesUpdated(IJ)V+]Ljava/lang/Object;Ljava/lang/Object;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;
 HPLcom/android/server/am/ActivityManagerService$LocalService;->onForegroundServiceNotificationUpdate(ZLandroid/app/Notification;ILjava/lang/String;I)V+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->onUidBlockedReasonsChanged(II)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
 PLcom/android/server/am/ActivityManagerService$LocalService;->onUserRemoved(I)V
@@ -6317,11 +6612,11 @@
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->registerProcessObserver(Landroid/app/IProcessObserver;)V
 PLcom/android/server/am/ActivityManagerService$LocalService;->reportCurKeyguardUsageEvent(Z)V
 PLcom/android/server/am/ActivityManagerService$LocalService;->rescheduleAnrDialog(Ljava/lang/Object;)V
-HPLcom/android/server/am/ActivityManagerService$LocalService;->scheduleAppGcs()V
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->scheduleAppGcs()V
 PLcom/android/server/am/ActivityManagerService$LocalService;->sendForegroundProfileChanged(I)V
 PLcom/android/server/am/ActivityManagerService$LocalService;->sendIntentSender(Landroid/content/IIntentSender;Landroid/os/IBinder;ILandroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;Ljava/lang/String;Landroid/os/Bundle;)I
-PLcom/android/server/am/ActivityManagerService$LocalService;->setBooted(Z)V
-PLcom/android/server/am/ActivityManagerService$LocalService;->setBooting(Z)V
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->setBooted(Z)V
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->setBooting(Z)V
 PLcom/android/server/am/ActivityManagerService$LocalService;->setCompanionAppUids(ILjava/util/Set;)V
 PLcom/android/server/am/ActivityManagerService$LocalService;->setDebugFlagsForStartingActivity(Landroid/content/pm/ActivityInfo;ILandroid/app/ProfilerInfo;Ljava/lang/Object;)V
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->setDeviceIdleAllowlist([I[I)V
@@ -6334,15 +6629,15 @@
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->setSwitchingToSystemUserMessage(Ljava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->setVoiceInteractionManagerProvider(Landroid/app/ActivityManagerInternal$VoiceInteractionManagerProvider;)V
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->shouldConfirmCredentials(I)Z
-HPLcom/android/server/am/ActivityManagerService$LocalService;->shouldWaitForNetworkRulesUpdate(I)Z
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->shouldWaitForNetworkRulesUpdate(I)Z
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->startIsolatedProcess(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Runnable;)Z
-PLcom/android/server/am/ActivityManagerService$LocalService;->startProcess(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;ZZLjava/lang/String;Landroid/content/ComponentName;)V
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->startProcess(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;ZZLjava/lang/String;Landroid/content/ComponentName;)V
 HPLcom/android/server/am/ActivityManagerService$LocalService;->startServiceInPackage(ILandroid/content/Intent;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;IZLandroid/os/IBinder;)Landroid/content/ComponentName;+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
-PLcom/android/server/am/ActivityManagerService$LocalService;->tempAllowWhileInUsePermissionInFgs(IJ)V
+HPLcom/android/server/am/ActivityManagerService$LocalService;->tempAllowWhileInUsePermissionInFgs(IJ)V
 HPLcom/android/server/am/ActivityManagerService$LocalService;->tempAllowlistForPendingIntent(IIIJIILjava/lang/String;)V
-HPLcom/android/server/am/ActivityManagerService$LocalService;->trimApplications()V
-HPLcom/android/server/am/ActivityManagerService$LocalService;->updateActivityUsageStats(Landroid/content/ComponentName;IILandroid/os/IBinder;Landroid/content/ComponentName;)V
-HPLcom/android/server/am/ActivityManagerService$LocalService;->updateBatteryStats(Landroid/content/ComponentName;IIZ)V
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->trimApplications()V
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->updateActivityUsageStats(Landroid/content/ComponentName;IILandroid/os/IBinder;Landroid/content/ComponentName;)V
+HSPLcom/android/server/am/ActivityManagerService$LocalService;->updateBatteryStats(Landroid/content/ComponentName;IIZ)V
 HPLcom/android/server/am/ActivityManagerService$LocalService;->updateCpuStats()V
 HSPLcom/android/server/am/ActivityManagerService$LocalService;->updateDeviceIdleTempAllowlist([IIZJIILjava/lang/String;I)V+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/FgsTempAllowList;Lcom/android/server/am/FgsTempAllowList;
 HPLcom/android/server/am/ActivityManagerService$LocalService;->updateForegroundTimeIfOnBattery(Ljava/lang/String;IJ)V
@@ -6354,13 +6649,13 @@
 HSPLcom/android/server/am/ActivityManagerService$MainHandler$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/am/ActivityManagerService$MainHandler$$ExternalSyntheticLambda2;-><init>(Landroid/os/Message;)V
 HSPLcom/android/server/am/ActivityManagerService$MainHandler$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;)V
-PLcom/android/server/am/ActivityManagerService$MainHandler$1;-><init>(Lcom/android/server/am/ActivityManagerService$MainHandler;Ljava/util/ArrayList;)V
-PLcom/android/server/am/ActivityManagerService$MainHandler$1;->run()V
+HSPLcom/android/server/am/ActivityManagerService$MainHandler$1;-><init>(Lcom/android/server/am/ActivityManagerService$MainHandler;Ljava/util/ArrayList;)V
+HSPLcom/android/server/am/ActivityManagerService$MainHandler$1;->run()V
 PLcom/android/server/am/ActivityManagerService$MainHandler;->$r8$lambda$nQbn-iaklEykeZqYQ0Hxksxf5B8(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ActivityManagerService$MainHandler;->$r8$lambda$tnqzrvfbfhw0qbzF4Zpa6LsnUNU(Landroid/os/Message;Landroid/app/ActivityManagerInternal$BindServiceEventListener;)V
 HSPLcom/android/server/am/ActivityManagerService$MainHandler;->$r8$lambda$y3Zh24d1IG7n6Ujgxim6Oc7DVPo(Landroid/os/Message;Landroid/app/ActivityManagerInternal$BroadcastEventListener;)V
 HSPLcom/android/server/am/ActivityManagerService$MainHandler;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/os/Looper;)V
-HSPLcom/android/server/am/ActivityManagerService$MainHandler;->handleMessage(Landroid/os/Message;)V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Landroid/os/Bundle;Landroid/os/Bundle;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Lcom/android/server/am/ContentProviderRecord;Lcom/android/server/am/ContentProviderRecord;]Ljava/lang/Thread;Lcom/android/server/am/ActivityManagerService$MainHandler$1;]Lcom/android/internal/os/SomeArgs;Lcom/android/internal/os/SomeArgs;
+HSPLcom/android/server/am/ActivityManagerService$MainHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/am/ContentProviderRecord;Lcom/android/server/am/ContentProviderRecord;]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Landroid/os/Bundle;Landroid/os/Bundle;]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Ljava/lang/Thread;Lcom/android/server/am/ActivityManagerService$MainHandler$1;]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Lcom/android/internal/os/SomeArgs;Lcom/android/internal/os/SomeArgs;]Landroid/app/IUiAutomationConnection;Landroid/app/IUiAutomationConnection$Stub$Proxy;
 PLcom/android/server/am/ActivityManagerService$MainHandler;->lambda$handleMessage$0(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ActivityManagerService$MainHandler;->lambda$handleMessage$1(Landroid/os/Message;Landroid/app/ActivityManagerInternal$BroadcastEventListener;)V+]Landroid/app/ActivityManagerInternal$BroadcastEventListener;Lcom/android/server/am/AppBroadcastEventsTracker;
 HSPLcom/android/server/am/ActivityManagerService$MainHandler;->lambda$handleMessage$2(Landroid/os/Message;Landroid/app/ActivityManagerInternal$BindServiceEventListener;)V+]Landroid/app/ActivityManagerInternal$BindServiceEventListener;Lcom/android/server/am/AppBindServiceEventsTracker;
@@ -6391,7 +6686,7 @@
 PLcom/android/server/am/ActivityManagerService$PidMap;->doRemoveIfNoThreadInternal(ILcom/android/server/am/ProcessRecord;)Z
 HSPLcom/android/server/am/ActivityManagerService$PidMap;->doRemoveInternal(ILcom/android/server/am/ProcessRecord;)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ActivityManagerService$PidMap;->get(I)Lcom/android/server/am/ProcessRecord;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HPLcom/android/server/am/ActivityManagerService$PidMap;->indexOfKey(I)I
+HPLcom/android/server/am/ActivityManagerService$PidMap;->indexOfKey(I)I+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/am/ActivityManagerService$PidMap;->keyAt(I)I
 HSPLcom/android/server/am/ActivityManagerService$PidMap;->size()I
 HSPLcom/android/server/am/ActivityManagerService$PidMap;->valueAt(I)Lcom/android/server/am/ProcessRecord;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
@@ -6399,7 +6694,7 @@
 PLcom/android/server/am/ActivityManagerService$ProcStatsRunnable;->run()V
 HSPLcom/android/server/am/ActivityManagerService$ProcessChangeItem;-><init>()V
 HSPLcom/android/server/am/ActivityManagerService$ProcessInfoService;-><init>(Lcom/android/server/am/ActivityManagerService;)V
-PLcom/android/server/am/ActivityManagerService$ProcessInfoService;->getProcessStatesAndOomScoresFromPids([I[I[I)V
+HPLcom/android/server/am/ActivityManagerService$ProcessInfoService;->getProcessStatesAndOomScoresFromPids([I[I[I)V
 HSPLcom/android/server/am/ActivityManagerService$SdkSandboxSettings;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/am/ActivityManagerService$SdkSandboxSettings;->isBroadcastReceiverRestrictionsEnforced()Z
 HSPLcom/android/server/am/ActivityManagerService$SdkSandboxSettings;->registerObserver()V
@@ -6407,33 +6702,34 @@
 PLcom/android/server/am/ActivityManagerService$ShellDelegate;->checkOperation(IILjava/lang/String;Ljava/lang/String;ZLcom/android/internal/util/function/QuintFunction;)I
 PLcom/android/server/am/ActivityManagerService$ShellDelegate;->isTargetOp(I)Z
 HSPLcom/android/server/am/ActivityManagerService$UiHandler;-><init>(Lcom/android/server/am/ActivityManagerService;)V
-HSPLcom/android/server/am/ActivityManagerService$UiHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/AppErrors;Lcom/android/server/am/AppErrors;
+HSPLcom/android/server/am/ActivityManagerService$UiHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/am/AppErrors;Lcom/android/server/am/AppErrors;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ProcessErrorStateRecord;Lcom/android/server/am/ProcessErrorStateRecord;]Lcom/android/server/am/ErrorDialogController;Lcom/android/server/am/ErrorDialogController;
 HSPLcom/android/server/am/ActivityManagerService;->$r8$lambda$0MUCQPSj0khY7CSsocrnTh55H9M(Landroid/os/DropBoxManager;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/am/ActivityManagerService;->$r8$lambda$1-_59yUEsHLEQupqzZwriEyE8-M(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessRecord;JJ)V
-PLcom/android/server/am/ActivityManagerService;->$r8$lambda$2WweV4ZlzWdWugjgv4Qek4UBmVU(Lcom/android/server/am/ProcessRecord;Landroid/os/Debug$MemoryInfo;JLcom/android/server/am/ProcessProfileRecord;Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;)V
+HPLcom/android/server/am/ActivityManagerService;->$r8$lambda$2WweV4ZlzWdWugjgv4Qek4UBmVU(Lcom/android/server/am/ProcessRecord;Landroid/os/Debug$MemoryInfo;JLcom/android/server/am/ProcessProfileRecord;Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;)V
 PLcom/android/server/am/ActivityManagerService;->$r8$lambda$7ZmQvIcxyH5t0jsDMc3U06dyXyE(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;)V
 HPLcom/android/server/am/ActivityManagerService;->$r8$lambda$88DAuNh7cKCKaHJTBvZhIl7n2MQ(ZIZI[Ljava/util/List;Lcom/android/server/am/ProcessRecord;)V
 PLcom/android/server/am/ActivityManagerService;->$r8$lambda$8uNKGtJjLYZER9g6HQgTOta60OE(Lcom/android/server/am/ProcessRecord;JJJIJJLcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;)V
 PLcom/android/server/am/ActivityManagerService;->$r8$lambda$AZmFVwGrGI2AVHaE6gt2FZs-PDo(Lcom/android/server/am/ProcessRecord;JJJIJJLcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;)V
 PLcom/android/server/am/ActivityManagerService;->$r8$lambda$Ga31WwXyecgt4ngWX16sTMzR2P8(Landroid/util/SparseArray;[Landroid/os/Debug$MemoryInfo;ZLcom/android/server/am/ActivityManagerService$MemoryUsageDumpOptions;[J[J[JLjava/util/ArrayList;[J[J[J[J[J[J[J[J[Ljava/util/ArrayList;[JLcom/android/internal/os/ProcessCpuTracker$Stats;)V
+PLcom/android/server/am/ActivityManagerService;->$r8$lambda$OXl8LFlQF7fxJiNtiJM2AJp_WH0(Lcom/android/server/am/ProcessRecord;J[JJLcom/android/server/am/ProcessProfileRecord;Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;)V
 PLcom/android/server/am/ActivityManagerService;->$r8$lambda$RecKo9ooMqmTmb2Adz-oyc4T0Uo(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/PhantomProcessRecord;JJJI)V
 PLcom/android/server/am/ActivityManagerService;->$r8$lambda$T05H2k8BpuugjIbkSjXovXlHOeA(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessRecord;JJJI)V
 PLcom/android/server/am/ActivityManagerService;->$r8$lambda$UHZlULX2TOn73esZHFl1wAlGej4(Lcom/android/server/am/ActivityManagerService;Landroid/os/PowerSaveState;)V
-HPLcom/android/server/am/ActivityManagerService;->$r8$lambda$UNT86xVrKKmitFG-Yn7nLZhANMc(Ljava/lang/StringBuilder;Landroid/content/pm/IPackageManager;ILjava/lang/String;)V
+HSPLcom/android/server/am/ActivityManagerService;->$r8$lambda$UNT86xVrKKmitFG-Yn7nLZhANMc(Ljava/lang/StringBuilder;Landroid/content/pm/IPackageManager;ILjava/lang/String;)V
 PLcom/android/server/am/ActivityManagerService;->$r8$lambda$WlMFtvrq0uop4jO4VZEXmqGH32w(Ljava/io/PrintWriter;JJLjava/lang/Integer;Landroid/util/Pair;)V
 PLcom/android/server/am/ActivityManagerService;->$r8$lambda$YMdBxeT7XlJSrdnSnQiVqxI7nYI(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessRecord;)V
 PLcom/android/server/am/ActivityManagerService;->$r8$lambda$_n7MEv3uCyKbtf1M5UIqm6c8f-Y(Lcom/android/server/am/ActivityManagerService;)V
 PLcom/android/server/am/ActivityManagerService;->$r8$lambda$aIqdcBIXP6UTfQ3pNpYbxMPFUak(Lcom/android/server/am/ActivityManagerService;JZLcom/android/server/am/ProcessRecord;IJLcom/android/server/am/PhantomProcessRecord;)Ljava/lang/Boolean;
 HPLcom/android/server/am/ActivityManagerService;->$r8$lambda$jVJnC6_WHqGPyQX1dYjPUB1nDI0(Lcom/android/server/am/ActivityManagerService;ZJJJJLcom/android/server/am/ProcessRecord;)V
-HPLcom/android/server/am/ActivityManagerService;->$r8$lambda$mLSgj0_-2qvr-t2-xE8C-lAuaIg([ILjava/lang/String;Lcom/android/server/am/ProcessRecord;)V
+HSPLcom/android/server/am/ActivityManagerService;->$r8$lambda$mLSgj0_-2qvr-t2-xE8C-lAuaIg([ILjava/lang/String;Lcom/android/server/am/ProcessRecord;)V
 PLcom/android/server/am/ActivityManagerService;->$r8$lambda$qWNrbw8rQaGR_fKnUgj7VRiRzdE(Landroid/util/SparseArray;[Landroid/os/Debug$MemoryInfo;ZLcom/android/server/am/ActivityManagerService$MemoryUsageDumpOptions;[J[JLjava/util/ArrayList;[J[J[J[J[J[J[J[J[Ljava/util/ArrayList;[JLcom/android/internal/os/ProcessCpuTracker$Stats;)V
 PLcom/android/server/am/ActivityManagerService;->$r8$lambda$qq8zkAnQsAYWYuOJIDonYI9Ppc4(Lcom/android/server/am/ActivityManagerService;I)V
 HPLcom/android/server/am/ActivityManagerService;->$r8$lambda$vSwcjZLInwE40j-EAbD7kDO2Uwo(Lcom/android/server/am/ActivityManagerService;JJZZLcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ActivityManagerService;->$r8$lambda$wDruIDfR7SUpeKtEWadr5uwtyzE(Lcom/android/server/am/ActivityManagerService;)V
 HSPLcom/android/server/am/ActivityManagerService;->-$$Nest$fgetmCompanionAppUidsMap(Lcom/android/server/am/ActivityManagerService;)Ljava/util/Map;
 HSPLcom/android/server/am/ActivityManagerService;->-$$Nest$fgetmDeviceOwnerUid(Lcom/android/server/am/ActivityManagerService;)I
-HPLcom/android/server/am/ActivityManagerService;->-$$Nest$fgetmFgsWhileInUseTempAllowList(Lcom/android/server/am/ActivityManagerService;)Lcom/android/server/am/FgsTempAllowList;
-HPLcom/android/server/am/ActivityManagerService;->-$$Nest$fgetmNetworkPolicyUidObserver(Lcom/android/server/am/ActivityManagerService;)Landroid/app/IUidObserver;
+HSPLcom/android/server/am/ActivityManagerService;->-$$Nest$fgetmFgsWhileInUseTempAllowList(Lcom/android/server/am/ActivityManagerService;)Lcom/android/server/am/FgsTempAllowList;
+HSPLcom/android/server/am/ActivityManagerService;->-$$Nest$fgetmNetworkPolicyUidObserver(Lcom/android/server/am/ActivityManagerService;)Landroid/app/IUidObserver;
 HSPLcom/android/server/am/ActivityManagerService;->-$$Nest$fgetmPendingStartActivityUids(Lcom/android/server/am/ActivityManagerService;)Lcom/android/server/am/PendingStartActivityUids;
 HSPLcom/android/server/am/ActivityManagerService;->-$$Nest$fgetmProfileOwnerUids(Lcom/android/server/am/ActivityManagerService;)Landroid/util/ArraySet;
 HSPLcom/android/server/am/ActivityManagerService;->-$$Nest$fgetmUidNetworkBlockedReasons(Lcom/android/server/am/ActivityManagerService;)Landroid/util/SparseIntArray;
@@ -6445,32 +6741,34 @@
 PLcom/android/server/am/ActivityManagerService;->-$$Nest$mclearPendingBackup(Lcom/android/server/am/ActivityManagerService;I)V
 PLcom/android/server/am/ActivityManagerService;->-$$Nest$mdoDump(Lcom/android/server/am/ActivityManagerService;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
 PLcom/android/server/am/ActivityManagerService;->-$$Nest$mfinishForceStopPackageLocked(Lcom/android/server/am/ActivityManagerService;Ljava/lang/String;I)V
-HPLcom/android/server/am/ActivityManagerService;->-$$Nest$misAppBad(Lcom/android/server/am/ActivityManagerService;Ljava/lang/String;I)Z+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HSPLcom/android/server/am/ActivityManagerService;->-$$Nest$misAppBad(Lcom/android/server/am/ActivityManagerService;Ljava/lang/String;I)Z+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 PLcom/android/server/am/ActivityManagerService;->-$$Nest$misAppForeground(Lcom/android/server/am/ActivityManagerService;I)Z
 HSPLcom/android/server/am/ActivityManagerService;->-$$Nest$msetVoiceInteractionManagerProvider(Lcom/android/server/am/ActivityManagerService;Landroid/app/ActivityManagerInternal$VoiceInteractionManagerProvider;)V
 HSPLcom/android/server/am/ActivityManagerService;->-$$Nest$mstart(Lcom/android/server/am/ActivityManagerService;)V
 HSPLcom/android/server/am/ActivityManagerService;->-$$Nest$mstartBroadcastObservers(Lcom/android/server/am/ActivityManagerService;)V
-HPLcom/android/server/am/ActivityManagerService;->-$$Nest$mtrimApplications(Lcom/android/server/am/ActivityManagerService;ZLjava/lang/String;)V
+HSPLcom/android/server/am/ActivityManagerService;->-$$Nest$mtrimApplications(Lcom/android/server/am/ActivityManagerService;ZLjava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService;-><clinit>()V
 HSPLcom/android/server/am/ActivityManagerService;-><init>(Landroid/content/Context;Lcom/android/server/wm/ActivityTaskManagerService;)V
 HSPLcom/android/server/am/ActivityManagerService;->addAppLocked(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;ZLjava/lang/String;I)Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ActivityManagerService;->addAppLocked(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;ZZILjava/lang/String;ZZLjava/lang/String;I)Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ActivityManagerService;->addAppLocked(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;ZZLjava/lang/String;I)Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ActivityManagerService;->addAppLocked(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;ZZZLjava/lang/String;I)Lcom/android/server/am/ProcessRecord;
-HPLcom/android/server/am/ActivityManagerService;->addBackgroundCheckViolationLocked(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/am/ActivityManagerService;->addBackgroundCheckViolationLocked(Ljava/lang/String;Ljava/lang/String;)V+]Lcom/android/server/am/BroadcastStats;Lcom/android/server/am/BroadcastStats;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActivityManagerService;->addBroadcastStatLocked(Ljava/lang/String;Ljava/lang/String;IIJ)V+]Lcom/android/server/am/BroadcastStats;Lcom/android/server/am/BroadcastStats;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-HSPLcom/android/server/am/ActivityManagerService;->addErrorToDropBox(Ljava/lang/String;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Ljava/io/File;Landroid/app/ApplicationErrorReport$CrashInfo;Ljava/lang/Float;Landroid/os/incremental/IncrementalMetrics;Ljava/util/UUID;)V
+HSPLcom/android/server/am/ActivityManagerService;->addErrorToDropBox(Ljava/lang/String;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Ljava/io/File;Landroid/app/ApplicationErrorReport$CrashInfo;Ljava/lang/Float;Landroid/os/incremental/IncrementalMetrics;Ljava/util/UUID;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/DropboxRateLimiter$RateLimitResult;Lcom/android/server/am/DropboxRateLimiter$RateLimitResult;]Ljava/lang/Thread;Lcom/android/server/am/ActivityManagerService$16;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/lang/Float;Ljava/lang/Float;]Lcom/android/server/am/DropboxRateLimiter;Lcom/android/server/am/DropboxRateLimiter;]Landroid/os/DropBoxManager;Landroid/os/DropBoxManager;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Ljava/util/UUID;Ljava/util/UUID;
 HSPLcom/android/server/am/ActivityManagerService;->addPackageDependency(Ljava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService;->addPidLocked(Lcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/ActivityManagerService$PidMap;Lcom/android/server/am/ActivityManagerService$PidMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ActivityManagerService;->addServiceToMap(Landroid/util/ArrayMap;Ljava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService;->appDiedLocked(Lcom/android/server/am/ProcessRecord;ILandroid/app/IApplicationThread;ZLjava/lang/String;)V+]Lcom/android/server/am/ActivityManagerService$PidMap;Lcom/android/server/am/ActivityManagerService$PidMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-PLcom/android/server/am/ActivityManagerService;->appDiedLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->appDiedLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService;->appNotRespondingViaProvider(Landroid/os/IBinder;)V
 HSPLcom/android/server/am/ActivityManagerService;->appRestrictedInBackgroundLOSP(ILjava/lang/String;I)I+]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-HPLcom/android/server/am/ActivityManagerService;->appServicesRestrictedInBackgroundLOSP(ILjava/lang/String;I)I
-HPLcom/android/server/am/ActivityManagerService;->appendBasicMemEntry(Ljava/lang/StringBuilder;IIJJLjava/lang/String;)V
+HSPLcom/android/server/am/ActivityManagerService;->appServicesRestrictedInBackgroundLOSP(ILjava/lang/String;I)I
+HSPLcom/android/server/am/ActivityManagerService;->appendBasicMemEntry(Ljava/lang/StringBuilder;IIJJLjava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService;->appendDropBoxProcessHeaders(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/StringBuilder;)V
-HPLcom/android/server/am/ActivityManagerService;->appendMemBucket(Ljava/lang/StringBuilder;JLjava/lang/String;Z)V
-HPLcom/android/server/am/ActivityManagerService;->appendMemInfo(Ljava/lang/StringBuilder;Lcom/android/server/am/ProcessMemInfo;)V
+HSPLcom/android/server/am/ActivityManagerService;->appendMemBucket(Ljava/lang/StringBuilder;JLjava/lang/String;Z)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;
+HSPLcom/android/server/am/ActivityManagerService;->appendMemInfo(Ljava/lang/StringBuilder;Lcom/android/server/am/ProcessMemInfo;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+PLcom/android/server/am/ActivityManagerService;->attachAgent(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService;->attachApplication(Landroid/app/IApplicationThread;J)V+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActivityManagerService;->attachApplicationLocked(Landroid/app/IApplicationThread;IIJ)Z+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;]Lcom/android/server/contentcapture/ContentCaptureManagerInternal;Lcom/android/server/contentcapture/ContentCaptureManagerService$LocalService;]Landroid/os/IBinder;Landroid/os/BinderProxy;]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Lcom/android/server/graphics/fonts/FontManagerInternal;Lcom/android/server/graphics/fonts/FontManagerService$Lifecycle$1;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;]Lcom/android/server/compat/PlatformCompat;Lcom/android/server/compat/PlatformCompat;]Lcom/android/server/am/ActivityManagerService$PidMap;Lcom/android/server/am/ActivityManagerService$PidMap;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Lcom/android/server/am/CoreSettingsObserver;Lcom/android/server/am/CoreSettingsObserver;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/HostingRecord;Lcom/android/server/am/HostingRecord;]Landroid/view/autofill/AutofillManagerInternal;Lcom/android/server/autofill/AutofillManagerService$LocalService;]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowProcessController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/am/ActivityManagerService;->backgroundServicesFinishedLocked(I)V+]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueue;
@@ -6489,13 +6787,13 @@
 HSPLcom/android/server/am/ActivityManagerService;->broadcastIntent(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;[Ljava/lang/String;ILandroid/os/Bundle;ZZI)I
 HPLcom/android/server/am/ActivityManagerService;->broadcastIntentInPackage(Ljava/lang/String;Ljava/lang/String;IIILandroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;Ljava/lang/String;Landroid/os/Bundle;ZZIZLandroid/os/IBinder;[I)I+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActivityManagerService;->broadcastIntentLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/os/Bundle;ZZIIIII)I+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-HSPLcom/android/server/am/ActivityManagerService;->broadcastIntentLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/os/Bundle;ZZIIIIIZLandroid/os/IBinder;[I)I+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;]Lcom/android/server/IntentResolver;Lcom/android/server/am/ActivityManagerService$3;]Landroid/net/Uri;Landroid/net/Uri$OpaqueUri;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/content/IntentFilter;Lcom/android/server/am/BroadcastFilter;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Ljava/lang/String;Ljava/lang/String;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueue;]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/uri/UriGrantsManagerInternal;Lcom/android/server/uri/UriGrantsManagerService$LocalService;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HSPLcom/android/server/am/ActivityManagerService;->broadcastIntentWithFeature(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/os/Bundle;ZZI)I+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HSPLcom/android/server/am/ActivityManagerService;->broadcastIntentLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/os/Bundle;ZZIIIIIZLandroid/os/IBinder;[I)I+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;]Lcom/android/server/IntentResolver;Lcom/android/server/am/ActivityManagerService$3;]Lcom/android/server/uri/UriGrantsManagerInternal;Lcom/android/server/uri/UriGrantsManagerService$LocalService;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;]Landroid/net/Uri;Landroid/net/Uri$OpaqueUri;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/content/IntentFilter;Lcom/android/server/am/BroadcastFilter;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Ljava/lang/String;Ljava/lang/String;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueue;]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/am/ActivityManagerService;->broadcastIntentWithFeature(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/os/Bundle;ZZI)I+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLcom/android/server/am/ActivityManagerService;->broadcastQueueForIntent(Landroid/content/Intent;)Lcom/android/server/am/BroadcastQueue;+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/content/Intent;Landroid/content/Intent;
-PLcom/android/server/am/ActivityManagerService;->cameraActiveChanged(IZ)V
+HPLcom/android/server/am/ActivityManagerService;->cameraActiveChanged(IZ)V
 HPLcom/android/server/am/ActivityManagerService;->canGcNowLocked()Z
 HPLcom/android/server/am/ActivityManagerService;->cancelIntentSender(Landroid/content/IIntentSender;)V+]Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentController;
-HSPLcom/android/server/am/ActivityManagerService;->checkBroadcastFromSystem(Landroid/content/Intent;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;IZLjava/util/List;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
+HSPLcom/android/server/am/ActivityManagerService;->checkBroadcastFromSystem(Landroid/content/Intent;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;IZLjava/util/List;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/am/ActivityManagerService;->checkCallingPermission(Ljava/lang/String;)I+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActivityManagerService;->checkComponentPermission(Ljava/lang/String;IIIZ)I+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/am/ActivityManagerService;->checkExcessivePowerUsage()V
@@ -6512,14 +6810,15 @@
 PLcom/android/server/am/ActivityManagerService;->collectProcesses(Ljava/io/PrintWriter;IZ[Ljava/lang/String;)Ljava/util/ArrayList;
 HSPLcom/android/server/am/ActivityManagerService;->collectReceiverComponents(Landroid/content/Intent;Ljava/lang/String;I[I[I)Ljava/util/List;+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/am/ComponentAliasResolver$Resolution;Lcom/android/server/am/ComponentAliasResolver$Resolution;]Lcom/android/server/am/ComponentAliasResolver;Lcom/android/server/am/ComponentAliasResolver;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/am/ActivityManagerService;->compatibilityInfoForPackage(Landroid/content/pm/ApplicationInfo;)Landroid/content/res/CompatibilityInfo;+]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;
+PLcom/android/server/am/ActivityManagerService;->crashApplicationWithType(IILjava/lang/String;ILjava/lang/String;ZI)V
 PLcom/android/server/am/ActivityManagerService;->crashApplicationWithTypeWithExtras(IILjava/lang/String;ILjava/lang/String;ZILandroid/os/Bundle;)V
 PLcom/android/server/am/ActivityManagerService;->createAnrDumpFile(Ljava/io/File;)Ljava/io/File;
 HSPLcom/android/server/am/ActivityManagerService;->demoteSystemServerRenderThread(I)V
-PLcom/android/server/am/ActivityManagerService;->doDump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
+HPLcom/android/server/am/ActivityManagerService;->doDump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
 PLcom/android/server/am/ActivityManagerService;->doStopUidLocked(ILcom/android/server/am/UidRecord;)V
 PLcom/android/server/am/ActivityManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/am/ActivityManagerService;->dumpActiveInstruments(Ljava/io/PrintWriter;Ljava/lang/String;Z)Z
-PLcom/android/server/am/ActivityManagerService;->dumpAllResources(Landroid/os/ParcelFileDescriptor;Ljava/io/PrintWriter;)V
+HSPLcom/android/server/am/ActivityManagerService;->dumpActiveInstruments(Ljava/io/PrintWriter;Ljava/lang/String;Z)Z
+HPLcom/android/server/am/ActivityManagerService;->dumpAllResources(Landroid/os/ParcelFileDescriptor;Ljava/io/PrintWriter;)V
 PLcom/android/server/am/ActivityManagerService;->dumpAllowedAssociationsLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;)V
 PLcom/android/server/am/ActivityManagerService;->dumpAppRestrictionController(Ljava/io/PrintWriter;)V
 HPLcom/android/server/am/ActivityManagerService;->dumpApplicationMemoryUsage(Ljava/io/FileDescriptor;Lcom/android/server/am/ActivityManagerService$MemoryUsageDumpOptions;[Ljava/lang/String;ZLjava/util/ArrayList;)V
@@ -6532,15 +6831,16 @@
 HPLcom/android/server/am/ActivityManagerService;->dumpDbInfo(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/am/ActivityManagerService;->dumpEverything(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;ZZIZ)V
 HPLcom/android/server/am/ActivityManagerService;->dumpGraphicsHardwareUsage(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/am/ActivityManagerService;->dumpHeap(Ljava/lang/String;IZZZLjava/lang/String;Landroid/os/ParcelFileDescriptor;Landroid/os/RemoteCallback;)Z
 PLcom/android/server/am/ActivityManagerService;->dumpHeapFinished(Ljava/lang/String;)V
 PLcom/android/server/am/ActivityManagerService;->dumpJavaTracesTombstoned(ILjava/lang/String;J)J
 PLcom/android/server/am/ActivityManagerService;->dumpLmkLocked(Ljava/io/PrintWriter;)Z
 PLcom/android/server/am/ActivityManagerService;->dumpMemItems(Landroid/util/proto/ProtoOutputStream;JLjava/lang/String;Ljava/util/ArrayList;ZZZ)V
 HPLcom/android/server/am/ActivityManagerService;->dumpMemItems(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;ZZZZ)V
-HPLcom/android/server/am/ActivityManagerService;->dumpOtherProcessesInfoLSP(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;ZLjava/lang/String;IIZ)V
+HSPLcom/android/server/am/ActivityManagerService;->dumpOtherProcessesInfoLSP(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;ZLjava/lang/String;IIZ)V
 PLcom/android/server/am/ActivityManagerService;->dumpPermissions(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;)V
-PLcom/android/server/am/ActivityManagerService;->dumpProcessList(Ljava/io/PrintWriter;Lcom/android/server/am/ActivityManagerService;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
-PLcom/android/server/am/ActivityManagerService;->dumpStackTraces(Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;)Landroid/util/Pair;
+HSPLcom/android/server/am/ActivityManagerService;->dumpProcessList(Ljava/io/PrintWriter;Lcom/android/server/am/ActivityManagerService;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
+HPLcom/android/server/am/ActivityManagerService;->dumpStackTraces(Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;)Landroid/util/Pair;
 PLcom/android/server/am/ActivityManagerService;->dumpStackTraces(Ljava/util/ArrayList;Lcom/android/internal/os/ProcessCpuTracker;Landroid/util/SparseArray;Ljava/util/ArrayList;Ljava/io/StringWriter;Ljava/lang/String;Ljava/lang/String;)Ljava/io/File;
 HPLcom/android/server/am/ActivityManagerService;->dumpStackTraces(Ljava/util/ArrayList;Lcom/android/internal/os/ProcessCpuTracker;Landroid/util/SparseArray;Ljava/util/ArrayList;Ljava/io/StringWriter;[JLjava/lang/String;Ljava/lang/String;)Ljava/io/File;
 PLcom/android/server/am/ActivityManagerService;->dumpUsers(Ljava/io/PrintWriter;)V
@@ -6558,14 +6858,16 @@
 HSPLcom/android/server/am/ActivityManagerService;->enqueueUidChangeLocked(Lcom/android/server/am/UidRecord;II)V+]Lcom/android/server/am/UidObserverController;Lcom/android/server/am/UidObserverController;]Landroid/os/PowerManagerInternal;Lcom/android/server/power/PowerManagerService$LocalService;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;
 HSPLcom/android/server/am/ActivityManagerService;->ensureAllowedAssociations()V
 HPLcom/android/server/am/ActivityManagerService;->ensureBootCompleted()V
+PLcom/android/server/am/ActivityManagerService;->enterSafeMode()V
 HSPLcom/android/server/am/ActivityManagerService;->findAppProcess(Landroid/os/IBinder;Ljava/lang/String;)Lcom/android/server/am/ProcessRecord;+]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;
-PLcom/android/server/am/ActivityManagerService;->finishBooting()V
-PLcom/android/server/am/ActivityManagerService;->finishForceStopPackageLocked(Ljava/lang/String;I)V
+PLcom/android/server/am/ActivityManagerService;->findProcessLOSP(Ljava/lang/String;ILjava/lang/String;)Lcom/android/server/am/ProcessRecord;
+HSPLcom/android/server/am/ActivityManagerService;->finishBooting()V
+HPLcom/android/server/am/ActivityManagerService;->finishForceStopPackageLocked(Ljava/lang/String;I)V
 PLcom/android/server/am/ActivityManagerService;->finishInstrumentation(Landroid/app/IApplicationThread;ILandroid/os/Bundle;)V
 PLcom/android/server/am/ActivityManagerService;->finishInstrumentationLocked(Lcom/android/server/am/ProcessRecord;ILandroid/os/Bundle;)V
 HSPLcom/android/server/am/ActivityManagerService;->finishReceiver(Landroid/os/IBinder;ILjava/lang/String;Landroid/os/Bundle;ZI)V+]Landroid/os/Bundle;Landroid/os/Bundle;]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueue;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 PLcom/android/server/am/ActivityManagerService;->forceStopAppZygoteLocked(Ljava/lang/String;II)V
-PLcom/android/server/am/ActivityManagerService;->forceStopPackage(Ljava/lang/String;I)V
+HPLcom/android/server/am/ActivityManagerService;->forceStopPackage(Ljava/lang/String;I)V
 PLcom/android/server/am/ActivityManagerService;->forceStopPackageLocked(Ljava/lang/String;ILjava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService;->forceStopPackageLocked(Ljava/lang/String;IZZZZZILjava/lang/String;)Z
 PLcom/android/server/am/ActivityManagerService;->getActivityInfoForUser(Landroid/content/pm/ActivityInfo;I)Landroid/content/pm/ActivityInfo;
@@ -6579,51 +6881,55 @@
 HSPLcom/android/server/am/ActivityManagerService;->getCommonServicesLocked(Z)Landroid/util/ArrayMap;
 HPLcom/android/server/am/ActivityManagerService;->getConfiguration()Landroid/content/res/Configuration;
 HSPLcom/android/server/am/ActivityManagerService;->getContentProvider(Landroid/app/IApplicationThread;Ljava/lang/String;Ljava/lang/String;IZ)Landroid/app/ContentProviderHolder;+]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;
+PLcom/android/server/am/ActivityManagerService;->getContentProviderExternal(Ljava/lang/String;ILandroid/os/IBinder;Ljava/lang/String;)Landroid/app/ContentProviderHolder;
 HSPLcom/android/server/am/ActivityManagerService;->getContentProviderHelper()Lcom/android/server/am/ContentProviderHelper;
 HSPLcom/android/server/am/ActivityManagerService;->getCurrentUser()Landroid/content/pm/UserInfo;
 HSPLcom/android/server/am/ActivityManagerService;->getCurrentUserId()I+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;
-HPLcom/android/server/am/ActivityManagerService;->getHistoricalProcessExitReasons(Ljava/lang/String;III)Landroid/content/pm/ParceledListSlice;
+PLcom/android/server/am/ActivityManagerService;->getForegroundServiceType(Landroid/content/ComponentName;Landroid/os/IBinder;)I
+HPLcom/android/server/am/ActivityManagerService;->getHistoricalProcessExitReasons(Ljava/lang/String;III)Landroid/content/pm/ParceledListSlice;+]Lcom/android/server/os/NativeTombstoneManager;Lcom/android/server/os/NativeTombstoneManager;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/am/AppExitInfoTracker;Lcom/android/server/am/AppExitInfoTracker;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActivityManagerService;->getInfoForIntentSender(Landroid/content/IIntentSender;)Landroid/app/ActivityManager$PendingIntentInfo;+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HPLcom/android/server/am/ActivityManagerService;->getIntentForIntentSender(Landroid/content/IIntentSender;)Landroid/content/Intent;+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActivityManagerService;->getIntentSenderWithFeature(ILjava/lang/String;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;I[Landroid/content/Intent;[Ljava/lang/String;ILandroid/os/Bundle;I)Landroid/content/IIntentSender;+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-HSPLcom/android/server/am/ActivityManagerService;->getIntentSenderWithFeatureAsApp(ILjava/lang/String;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;I[Landroid/content/Intent;[Ljava/lang/String;ILandroid/os/Bundle;II)Landroid/content/IIntentSender;+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/os/Bundle;Landroid/os/Bundle;]Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentController;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;
-PLcom/android/server/am/ActivityManagerService;->getKsmInfo()[J
+HSPLcom/android/server/am/ActivityManagerService;->getIntentSenderWithFeatureAsApp(ILjava/lang/String;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;I[Landroid/content/Intent;[Ljava/lang/String;ILandroid/os/Bundle;II)Landroid/content/IIntentSender;+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/os/Bundle;Landroid/os/Bundle;]Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentController;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/am/ActivityManagerService;->getKsmInfo()[J
 PLcom/android/server/am/ActivityManagerService;->getLaunchedFromPackage(Landroid/os/IBinder;)Ljava/lang/String;
 PLcom/android/server/am/ActivityManagerService;->getLaunchedFromUid(Landroid/os/IBinder;)I
 HSPLcom/android/server/am/ActivityManagerService;->getMemoryInfo(Landroid/app/ActivityManager$MemoryInfo;)V+]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;
-HPLcom/android/server/am/ActivityManagerService;->getMemoryTrimLevel()I+]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HSPLcom/android/server/am/ActivityManagerService;->getMemoryTrimLevel()I+]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HPLcom/android/server/am/ActivityManagerService;->getMyMemoryState(Landroid/app/ActivityManager$RunningAppProcessInfo;)V+]Lcom/android/server/am/ActivityManagerService$PidMap;Lcom/android/server/am/ActivityManagerService$PidMap;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActivityManagerService;->getPackageManagerInternal()Landroid/content/pm/PackageManagerInternal;
-HPLcom/android/server/am/ActivityManagerService;->getPackageProcessState(Ljava/lang/String;Ljava/lang/String;)I+]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HSPLcom/android/server/am/ActivityManagerService;->getPackageProcessState(Ljava/lang/String;Ljava/lang/String;)I+]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 PLcom/android/server/am/ActivityManagerService;->getPermissionManagerInternal()Lcom/android/server/pm/permission/PermissionManagerServiceInternal;
 PLcom/android/server/am/ActivityManagerService;->getProcessLimit()I
 HPLcom/android/server/am/ActivityManagerService;->getProcessMemoryInfo([I)[Landroid/os/Debug$MemoryInfo;+]Lcom/android/server/am/ActivityManagerService$PidMap;Lcom/android/server/am/ActivityManagerService$PidMap;]Landroid/os/Debug$MemoryInfo;Landroid/os/Debug$MemoryInfo;]Lcom/android/server/am/PackageList;Lcom/android/server/am/PackageList;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
 PLcom/android/server/am/ActivityManagerService;->getProcessNamesLOSP()Lcom/android/internal/app/ProcessMap;
+PLcom/android/server/am/ActivityManagerService;->getProcessPss([I)[J
 HSPLcom/android/server/am/ActivityManagerService;->getProcessRecordLocked(Ljava/lang/String;I)Lcom/android/server/am/ProcessRecord;+]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;
-HPLcom/android/server/am/ActivityManagerService;->getProcessStatesAndOomScoresForPIDs([I[I[I)V
+HPLcom/android/server/am/ActivityManagerService;->getProcessStatesAndOomScoresForPIDs([I[I[I)V+]Lcom/android/server/am/ActivityManagerService$PidMap;Lcom/android/server/am/ActivityManagerService$PidMap;]Lcom/android/server/am/PendingStartActivityUids;Lcom/android/server/am/PendingStartActivityUids;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HPLcom/android/server/am/ActivityManagerService;->getProcessesInErrorState()Ljava/util/List;+]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HPLcom/android/server/am/ActivityManagerService;->getProviderMimeTypeAsync(Landroid/net/Uri;ILandroid/os/RemoteCallback;)V+]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;
-HSPLcom/android/server/am/ActivityManagerService;->getRecordForAppLOSP(Landroid/app/IApplicationThread;)Lcom/android/server/am/ProcessRecord;+]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/internal/app/ProcessMap;Lcom/android/server/am/ProcessList$MyProcessMap;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;
+HSPLcom/android/server/am/ActivityManagerService;->getRecordForAppLOSP(Landroid/app/IApplicationThread;)Lcom/android/server/am/ProcessRecord;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/internal/app/ProcessMap;Lcom/android/server/am/ProcessList$MyProcessMap;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;
 HPLcom/android/server/am/ActivityManagerService;->getRunningAppProcesses()Ljava/util/List;+]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActivityManagerService;->getRunningUserIds()[I+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HPLcom/android/server/am/ActivityManagerService;->getServices(II)Ljava/util/List;
+HSPLcom/android/server/am/ActivityManagerService;->getShortAction(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
 HSPLcom/android/server/am/ActivityManagerService;->getTagForIntentSender(Landroid/content/IIntentSender;Ljava/lang/String;)Ljava/lang/String;+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActivityManagerService;->getTagForIntentSenderLocked(Lcom/android/server/am/PendingIntentRecord;Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/content/Intent;Landroid/content/Intent;
-PLcom/android/server/am/ActivityManagerService;->getTaskForActivity(Landroid/os/IBinder;Z)I
+HPLcom/android/server/am/ActivityManagerService;->getTaskForActivity(Landroid/os/IBinder;Z)I
 HPLcom/android/server/am/ActivityManagerService;->getTasks(I)Ljava/util/List;
 HSPLcom/android/server/am/ActivityManagerService;->getTopApp()Lcom/android/server/am/ProcessRecord;+]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
 PLcom/android/server/am/ActivityManagerService;->getUidFromIntent(Landroid/content/Intent;)I
-HSPLcom/android/server/am/ActivityManagerService;->getUidProcessState(ILjava/lang/String;)I
+HSPLcom/android/server/am/ActivityManagerService;->getUidProcessState(ILjava/lang/String;)I+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/am/PendingStartActivityUids;Lcom/android/server/am/PendingStartActivityUids;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActivityManagerService;->getUidState(I)I+]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;
 HSPLcom/android/server/am/ActivityManagerService;->getUidStateLocked(I)I+]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;
 HSPLcom/android/server/am/ActivityManagerService;->grantImplicitAccess(ILandroid/content/Intent;II)V+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HPLcom/android/server/am/ActivityManagerService;->grantUriPermission(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/net/Uri;II)V
 HSPLcom/android/server/am/ActivityManagerService;->handleAppDiedLocked(Lcom/android/server/am/ProcessRecord;IZZZ)V+]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-HPLcom/android/server/am/ActivityManagerService;->handleApplicationCrash(Landroid/os/IBinder;Landroid/app/ApplicationErrorReport$ParcelableCrashInfo;)V
-HPLcom/android/server/am/ActivityManagerService;->handleApplicationCrashInner(Ljava/lang/String;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Landroid/app/ApplicationErrorReport$CrashInfo;)V
+HPLcom/android/server/am/ActivityManagerService;->handleApplicationCrash(Landroid/os/IBinder;Landroid/app/ApplicationErrorReport$ParcelableCrashInfo;)V+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HPLcom/android/server/am/ActivityManagerService;->handleApplicationCrashInner(Ljava/lang/String;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Landroid/app/ApplicationErrorReport$CrashInfo;)V+]Lcom/android/server/am/AppErrors;Lcom/android/server/am/AppErrors;]Lcom/android/server/criticalevents/CriticalEventLog;Lcom/android/server/criticalevents/CriticalEventLog;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/content/pm/IncrementalStatesInfo;Landroid/content/pm/IncrementalStatesInfo;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/am/ActivityManagerService;->handleApplicationStrictModeViolation(Landroid/os/IBinder;ILandroid/os/StrictMode$ViolationInfo;)V+]Ljava/util/HashSet;Ljava/util/HashSet;]Landroid/os/StrictMode$ViolationInfo;Landroid/os/StrictMode$ViolationInfo;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-HSPLcom/android/server/am/ActivityManagerService;->handleApplicationWtf(Landroid/os/IBinder;Ljava/lang/String;ZLandroid/app/ApplicationErrorReport$ParcelableCrashInfo;I)Z
-HSPLcom/android/server/am/ActivityManagerService;->handleApplicationWtfInner(IILandroid/os/IBinder;Ljava/lang/String;Landroid/app/ApplicationErrorReport$CrashInfo;)Lcom/android/server/am/ProcessRecord;
+HSPLcom/android/server/am/ActivityManagerService;->handleApplicationWtf(Landroid/os/IBinder;Ljava/lang/String;ZLandroid/app/ApplicationErrorReport$ParcelableCrashInfo;I)Z+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;
+HSPLcom/android/server/am/ActivityManagerService;->handleApplicationWtfInner(IILandroid/os/IBinder;Ljava/lang/String;Landroid/app/ApplicationErrorReport$CrashInfo;)Lcom/android/server/am/ProcessRecord;+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActivityManagerService;->handleIncomingUser(IIIZZLjava/lang/String;Ljava/lang/String;)I+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;
 PLcom/android/server/am/ActivityManagerService;->handleProcessStartOrKillTimeoutLocked(Lcom/android/server/am/ProcessRecord;Z)V
 HSPLcom/android/server/am/ActivityManagerService;->hasUsageStatsPermission(Ljava/lang/String;)Z+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
@@ -6634,46 +6940,47 @@
 PLcom/android/server/am/ActivityManagerService;->inputDispatchingTimedOut(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Landroid/content/pm/ApplicationInfo;Ljava/lang/String;Lcom/android/server/wm/WindowProcessController;ZLjava/lang/String;)Z
 HSPLcom/android/server/am/ActivityManagerService;->isAllowedWhileBooting(Landroid/content/pm/ApplicationInfo;)Z
 HSPLcom/android/server/am/ActivityManagerService;->isAllowlistedForFgsStartLOSP(I)Lcom/android/server/am/ActivityManagerService$FgsTempAllowListItem;+]Lcom/android/server/am/FgsTempAllowList;Lcom/android/server/am/FgsTempAllowList;
-HPLcom/android/server/am/ActivityManagerService;->isAppBad(Ljava/lang/String;I)Z+]Lcom/android/server/am/AppErrors;Lcom/android/server/am/AppErrors;
+HSPLcom/android/server/am/ActivityManagerService;->isAppBad(Ljava/lang/String;I)Z+]Lcom/android/server/am/AppErrors;Lcom/android/server/am/AppErrors;
 HPLcom/android/server/am/ActivityManagerService;->isAppForeground(I)Z
 PLcom/android/server/am/ActivityManagerService;->isAppFreezerSupported()Z
 HSPLcom/android/server/am/ActivityManagerService;->isAppStartModeDisabled(ILjava/lang/String;)Z+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-HPLcom/android/server/am/ActivityManagerService;->isBackgroundRestricted(Ljava/lang/String;)Z
-HPLcom/android/server/am/ActivityManagerService;->isBackgroundRestrictedNoCheck(ILjava/lang/String;)Z
+HPLcom/android/server/am/ActivityManagerService;->isBackgroundRestricted(Ljava/lang/String;)Z+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HPLcom/android/server/am/ActivityManagerService;->isBackgroundRestrictedNoCheck(ILjava/lang/String;)Z+]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HPLcom/android/server/am/ActivityManagerService;->isCameraActiveForUid(I)Z+]Landroid/util/IntArray;Landroid/util/IntArray;
 HSPLcom/android/server/am/ActivityManagerService;->isDeviceProvisioned(Landroid/content/Context;)Z
-PLcom/android/server/am/ActivityManagerService;->isInRestrictedBucket(ILjava/lang/String;J)Z
+HPLcom/android/server/am/ActivityManagerService;->isInRestrictedBucket(ILjava/lang/String;J)Z
 HSPLcom/android/server/am/ActivityManagerService;->isInstantApp(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;I)Z+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 HPLcom/android/server/am/ActivityManagerService;->isIntentSenderTargetedToPackage(Landroid/content/IIntentSender;)Z
 HSPLcom/android/server/am/ActivityManagerService;->isOnBgOffloadQueue(I)Z
-HPLcom/android/server/am/ActivityManagerService;->isOnDeviceIdleAllowlistLOSP(IZ)Z+]Lcom/android/server/am/PendingTempAllowlists;Lcom/android/server/am/PendingTempAllowlists;
+HSPLcom/android/server/am/ActivityManagerService;->isOnDeviceIdleAllowlistLOSP(IZ)Z+]Lcom/android/server/am/PendingTempAllowlists;Lcom/android/server/am/PendingTempAllowlists;
 HSPLcom/android/server/am/ActivityManagerService;->isOnFgOffloadQueue(I)Z
 HSPLcom/android/server/am/ActivityManagerService;->isPendingBroadcastProcessLocked(I)Z+]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueue;
 PLcom/android/server/am/ActivityManagerService;->isPendingBroadcastProcessLocked(Lcom/android/server/am/ProcessRecord;)Z
 HSPLcom/android/server/am/ActivityManagerService;->isReceivingBroadcastLocked(Lcom/android/server/am/ProcessRecord;Landroid/util/ArraySet;)Z+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/ProcessReceiverRecord;Lcom/android/server/am/ProcessReceiverRecord;
 HSPLcom/android/server/am/ActivityManagerService;->isSingleton(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;Ljava/lang/String;I)Z
-HSPLcom/android/server/am/ActivityManagerService;->isUidActive(ILjava/lang/String;)Z
+HSPLcom/android/server/am/ActivityManagerService;->isUidActive(ILjava/lang/String;)Z+]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActivityManagerService;->isUidActiveLOSP(I)Z+]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;
 HPLcom/android/server/am/ActivityManagerService;->isUserAMonkey()Z+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;
 HSPLcom/android/server/am/ActivityManagerService;->isUserRunning(II)Z+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;
-PLcom/android/server/am/ActivityManagerService;->isValidSingletonCall(II)Z
+HPLcom/android/server/am/ActivityManagerService;->isValidSingletonCall(II)Z
 HSPLcom/android/server/am/ActivityManagerService;->killAllBackgroundProcessesExcept(II)V
 PLcom/android/server/am/ActivityManagerService;->killAppAtUsersRequest(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ActivityManagerService;->killApplication(Ljava/lang/String;IILjava/lang/String;)V
 HPLcom/android/server/am/ActivityManagerService;->killApplicationProcess(Ljava/lang/String;I)V
 PLcom/android/server/am/ActivityManagerService;->killBackgroundProcesses(Ljava/lang/String;I)V
 PLcom/android/server/am/ActivityManagerService;->killUid(IILjava/lang/String;)V
-PLcom/android/server/am/ActivityManagerService;->killUidForPermissionChange(IILjava/lang/String;)V
-HPLcom/android/server/am/ActivityManagerService;->lambda$appendDropBoxProcessHeaders$11(Ljava/lang/StringBuilder;Landroid/content/pm/IPackageManager;ILjava/lang/String;)V
+HSPLcom/android/server/am/ActivityManagerService;->killUidForPermissionChange(IILjava/lang/String;)V
+HSPLcom/android/server/am/ActivityManagerService;->lambda$appendDropBoxProcessHeaders$11(Ljava/lang/StringBuilder;Landroid/content/pm/IPackageManager;ILjava/lang/String;)V
 HPLcom/android/server/am/ActivityManagerService;->lambda$checkExcessivePowerUsage$20(JJZZLcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 PLcom/android/server/am/ActivityManagerService;->lambda$checkExcessivePowerUsageLPr$24(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;)V
 HPLcom/android/server/am/ActivityManagerService;->lambda$dumpApplicationMemoryUsage$15(Lcom/android/server/am/ProcessRecord;JJJIJJLcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;)V
 HPLcom/android/server/am/ActivityManagerService;->lambda$dumpApplicationMemoryUsage$16(Landroid/util/SparseArray;[Landroid/os/Debug$MemoryInfo;ZLcom/android/server/am/ActivityManagerService$MemoryUsageDumpOptions;[J[J[JLjava/util/ArrayList;[J[J[J[J[J[J[J[J[Ljava/util/ArrayList;[JLcom/android/internal/os/ProcessCpuTracker$Stats;)V
-PLcom/android/server/am/ActivityManagerService;->lambda$dumpApplicationMemoryUsage$18(Lcom/android/server/am/ProcessRecord;JJJIJJLcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;)V
+HPLcom/android/server/am/ActivityManagerService;->lambda$dumpApplicationMemoryUsage$18(Lcom/android/server/am/ProcessRecord;JJJIJJLcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;)V
 HPLcom/android/server/am/ActivityManagerService;->lambda$dumpApplicationMemoryUsage$19(Landroid/util/SparseArray;[Landroid/os/Debug$MemoryInfo;ZLcom/android/server/am/ActivityManagerService$MemoryUsageDumpOptions;[J[JLjava/util/ArrayList;[J[J[J[J[J[J[J[J[Ljava/util/ArrayList;[JLcom/android/internal/os/ProcessCpuTracker$Stats;)V
 PLcom/android/server/am/ActivityManagerService;->lambda$dumpOtherProcessesInfoLSP$13(Ljava/io/PrintWriter;JJLjava/lang/Integer;Landroid/util/Pair;)V
-HPLcom/android/server/am/ActivityManagerService;->lambda$getPackageProcessState$0([ILjava/lang/String;Lcom/android/server/am/ProcessRecord;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/PackageList;Lcom/android/server/am/PackageList;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
-PLcom/android/server/am/ActivityManagerService;->lambda$getProcessMemoryInfo$2(Lcom/android/server/am/ProcessRecord;Landroid/os/Debug$MemoryInfo;JLcom/android/server/am/ProcessProfileRecord;Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;)V
+HSPLcom/android/server/am/ActivityManagerService;->lambda$getPackageProcessState$0([ILjava/lang/String;Lcom/android/server/am/ProcessRecord;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/PackageList;Lcom/android/server/am/PackageList;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
+HPLcom/android/server/am/ActivityManagerService;->lambda$getProcessMemoryInfo$2(Lcom/android/server/am/ProcessRecord;Landroid/os/Debug$MemoryInfo;JLcom/android/server/am/ProcessProfileRecord;Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;)V
+HPLcom/android/server/am/ActivityManagerService;->lambda$getProcessPss$3(Lcom/android/server/am/ProcessRecord;J[JJLcom/android/server/am/ProcessProfileRecord;Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;)V
 HPLcom/android/server/am/ActivityManagerService;->lambda$getProcessesInErrorState$12(ZIZI[Ljava/util/List;Lcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/ProcessErrorStateRecord;Lcom/android/server/am/ProcessErrorStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/List;Ljava/util/ArrayList;
 PLcom/android/server/am/ActivityManagerService;->lambda$handleAppDiedLocked$1(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ActivityManagerService;->lambda$logStrictModeViolationToDropBox$9(Landroid/os/DropBoxManager;Ljava/lang/String;Ljava/lang/String;)V
@@ -6683,7 +6990,7 @@
 HSPLcom/android/server/am/ActivityManagerService;->lambda$scheduleUpdateBinderHeavyHitterWatcherConfig$32()V
 PLcom/android/server/am/ActivityManagerService;->lambda$systemReady$7(Landroid/os/PowerSaveState;)V
 PLcom/android/server/am/ActivityManagerService;->lambda$systemReady$8(I)V
-PLcom/android/server/am/ActivityManagerService;->lambda$updateAppProcessCpuTimeLPr$21(Lcom/android/server/am/ProcessRecord;JJJI)V
+HPLcom/android/server/am/ActivityManagerService;->lambda$updateAppProcessCpuTimeLPr$21(Lcom/android/server/am/ProcessRecord;JJJI)V
 PLcom/android/server/am/ActivityManagerService;->lambda$updatePhantomProcessCpuTimeLPr$22(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/PhantomProcessRecord;JJJI)V
 HPLcom/android/server/am/ActivityManagerService;->lambda$updatePhantomProcessCpuTimeLPr$23(JZLcom/android/server/am/ProcessRecord;IJLcom/android/server/am/PhantomProcessRecord;)Ljava/lang/Boolean;
 PLcom/android/server/am/ActivityManagerService;->launchBugReportHandlerApp()Z
@@ -6694,36 +7001,40 @@
 HPLcom/android/server/am/ActivityManagerService;->noteAlarmFinish(Landroid/content/IIntentSender;Landroid/os/WorkSource;ILjava/lang/String;)V+]Landroid/os/WorkSource;Landroid/os/WorkSource;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
 HSPLcom/android/server/am/ActivityManagerService;->noteAlarmStart(Landroid/content/IIntentSender;Landroid/os/WorkSource;ILjava/lang/String;)V+]Landroid/os/WorkSource;Landroid/os/WorkSource;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
 HSPLcom/android/server/am/ActivityManagerService;->noteUidProcessState(III)V+]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
-HPLcom/android/server/am/ActivityManagerService;->noteWakeupAlarm(Landroid/content/IIntentSender;Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/am/ActivityManagerService;->noteWakeupAlarm(Landroid/content/IIntentSender;Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;)V+]Landroid/os/WorkSource;Landroid/os/WorkSource;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;
+PLcom/android/server/am/ActivityManagerService;->notifyLockedProfile(I)V
 HSPLcom/android/server/am/ActivityManagerService;->notifyPackageUse(Ljava/lang/String;I)V+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActivityManagerService;->onCoreSettingsChange(Landroid/os/Bundle;)V
-PLcom/android/server/am/ActivityManagerService;->onShellCommand(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;Landroid/os/ShellCallback;Landroid/os/ResultReceiver;)V
-HSPLcom/android/server/am/ActivityManagerService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/IBinder;Landroid/os/BinderProxy;,Landroid/app/ActivityThread$ApplicationThread;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/internal/app/ProcessMap;Lcom/android/server/am/ProcessList$MyProcessMap;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;
+HSPLcom/android/server/am/ActivityManagerService;->onShellCommand(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;Landroid/os/ShellCallback;Landroid/os/ResultReceiver;)V
+HSPLcom/android/server/am/ActivityManagerService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/IBinder;Landroid/os/BinderProxy;,Landroid/app/ActivityThread$ApplicationThread;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/internal/app/ProcessMap;Lcom/android/server/am/ProcessList$MyProcessMap;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/os/Parcel;Landroid/os/Parcel;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;
 HPLcom/android/server/am/ActivityManagerService;->onWakefulnessChanged(I)V
 HPLcom/android/server/am/ActivityManagerService;->openContentUri(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;
+PLcom/android/server/am/ActivityManagerService;->peekService(Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;)Landroid/os/IBinder;
 HPLcom/android/server/am/ActivityManagerService;->performIdleMaintenance()V
 HSPLcom/android/server/am/ActivityManagerService;->processClass(Lcom/android/server/am/ProcessRecord;)Ljava/lang/String;
-HSPLcom/android/server/am/ActivityManagerService;->publishContentProviders(Landroid/app/IApplicationThread;Ljava/util/List;)V
+HSPLcom/android/server/am/ActivityManagerService;->publishContentProviders(Landroid/app/IApplicationThread;Ljava/util/List;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLcom/android/server/am/ActivityManagerService;->publishService(Landroid/os/IBinder;Landroid/content/Intent;Landroid/os/IBinder;)V+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/am/ActivityManagerService;->pushTempAllowlist()V+]Lcom/android/server/DeviceIdleInternal;Lcom/android/server/DeviceIdleController$LocalService;]Lcom/android/server/am/PendingTempAllowlists;Lcom/android/server/am/PendingTempAllowlists;
 HPLcom/android/server/am/ActivityManagerService;->queryIntentComponentsForIntentSender(Landroid/content/IIntentSender;I)Landroid/content/pm/ParceledListSlice;
-HPLcom/android/server/am/ActivityManagerService;->refContentProvider(Landroid/os/IBinder;II)Z+]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;
+HSPLcom/android/server/am/ActivityManagerService;->refContentProvider(Landroid/os/IBinder;II)Z+]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;
 PLcom/android/server/am/ActivityManagerService;->registerForegroundServiceObserver(Landroid/app/IForegroundServiceObserver;)Z
 HPLcom/android/server/am/ActivityManagerService;->registerIntentSenderCancelListenerEx(Landroid/content/IIntentSender;Lcom/android/internal/os/IResultReceiver;)Z+]Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentController;
 HSPLcom/android/server/am/ActivityManagerService;->registerProcessObserver(Landroid/app/IProcessObserver;)V
-HSPLcom/android/server/am/ActivityManagerService;->registerReceiverWithFeature(Landroid/app/IApplicationThread;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/content/IIntentReceiver;Landroid/content/IntentFilter;Ljava/lang/String;II)Landroid/content/Intent;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/am/ProcessReceiverRecord;Lcom/android/server/am/ProcessReceiverRecord;]Landroid/content/IntentFilter;Landroid/content/IntentFilter;,Lcom/android/server/am/BroadcastFilter;]Lcom/android/server/am/ReceiverList;Lcom/android/server/am/ReceiverList;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Landroid/content/IIntentReceiver;Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;,Landroid/content/IIntentReceiver$Stub$Proxy;]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueue;]Lcom/android/server/am/PackageList;Lcom/android/server/am/PackageList;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Lcom/android/server/am/ReceiverList;,Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/server/IntentResolver;Lcom/android/server/am/ActivityManagerService$3;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;]Lcom/android/server/am/ActivityManagerService$SdkSandboxSettings;Lcom/android/server/am/ActivityManagerService$SdkSandboxSettings;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/am/ActivityManagerService;->registerReceiverWithFeature(Landroid/app/IApplicationThread;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/content/IIntentReceiver;Landroid/content/IntentFilter;Ljava/lang/String;II)Landroid/content/Intent;+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/am/ProcessReceiverRecord;Lcom/android/server/am/ProcessReceiverRecord;]Landroid/content/IntentFilter;Landroid/content/IntentFilter;,Lcom/android/server/am/BroadcastFilter;]Lcom/android/server/am/ActivityManagerService$SdkSandboxSettings;Lcom/android/server/am/ActivityManagerService$SdkSandboxSettings;]Lcom/android/server/am/ReceiverList;Lcom/android/server/am/ReceiverList;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Landroid/content/IIntentReceiver;Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;,Landroid/content/IIntentReceiver$Stub$Proxy;]Landroid/os/IBinder;Landroid/os/BinderProxy;]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueue;]Lcom/android/server/am/PackageList;Lcom/android/server/am/PackageList;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Lcom/android/server/am/ReceiverList;,Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/server/IntentResolver;Lcom/android/server/am/ActivityManagerService$3;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;]Landroid/content/Intent;Landroid/content/Intent;
 PLcom/android/server/am/ActivityManagerService;->registerTaskStackListener(Landroid/app/ITaskStackListener;)V
 HSPLcom/android/server/am/ActivityManagerService;->registerUidObserver(Landroid/app/IUidObserver;IILjava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService;->registerUserSwitchObserver(Landroid/app/IUserSwitchObserver;Ljava/lang/String;)V
 HPLcom/android/server/am/ActivityManagerService;->removeContentProvider(Landroid/os/IBinder;Z)V+]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;
+PLcom/android/server/am/ActivityManagerService;->removeContentProviderExternalAsUser(Ljava/lang/String;Landroid/os/IBinder;I)V
 HSPLcom/android/server/am/ActivityManagerService;->removeLruProcessLocked(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ActivityManagerService;->removeOomAdjTargetLocked(Lcom/android/server/am/ProcessRecord;Z)V
 PLcom/android/server/am/ActivityManagerService;->removePidIfNoThreadLocked(Lcom/android/server/am/ProcessRecord;)Z
 HSPLcom/android/server/am/ActivityManagerService;->removePidLocked(ILcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/ActivityManagerService$PidMap;Lcom/android/server/am/ActivityManagerService$PidMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;
-HPLcom/android/server/am/ActivityManagerService;->removeReceiverLocked(Lcom/android/server/am/ReceiverList;)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/content/IIntentReceiver;Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;,Landroid/content/IIntentReceiver$Stub$Proxy;]Ljava/util/ArrayList;Lcom/android/server/am/ReceiverList;]Lcom/android/server/IntentResolver;Lcom/android/server/am/ActivityManagerService$3;
+HSPLcom/android/server/am/ActivityManagerService;->removeReceiverLocked(Lcom/android/server/am/ReceiverList;)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/content/IIntentReceiver;Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;,Landroid/content/IIntentReceiver$Stub$Proxy;]Ljava/util/ArrayList;Lcom/android/server/am/ReceiverList;]Lcom/android/server/IntentResolver;Lcom/android/server/am/ActivityManagerService$3;
 HSPLcom/android/server/am/ActivityManagerService;->reportCurWakefulnessUsageEvent()V
 HSPLcom/android/server/am/ActivityManagerService;->reportGlobalUsageEvent(I)V
 PLcom/android/server/am/ActivityManagerService;->reportLmkKillAtOrBelow(Ljava/io/PrintWriter;I)Z
+PLcom/android/server/am/ActivityManagerService;->reportStartInstrumentationFailureLocked(Landroid/app/IInstrumentationWatcher;Landroid/content/ComponentName;Ljava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService;->reportUidInfoMessageLocked(Ljava/lang/String;Ljava/lang/String;I)V
 PLcom/android/server/am/ActivityManagerService;->requestBugReportWithDescription(Ljava/lang/String;Ljava/lang/String;I)V
 PLcom/android/server/am/ActivityManagerService;->requestBugReportWithDescription(Ljava/lang/String;Ljava/lang/String;IJ)V
@@ -6742,7 +7053,7 @@
 HSPLcom/android/server/am/ActivityManagerService;->scheduleApplicationInfoChanged(Ljava/util/List;I)V
 PLcom/android/server/am/ActivityManagerService;->scheduleBinderHeavyHitterAutoSampler()V
 HSPLcom/android/server/am/ActivityManagerService;->scheduleUpdateBinderHeavyHitterWatcherConfig()V
-HPLcom/android/server/am/ActivityManagerService;->sendIntentSender(Landroid/content/IIntentSender;Landroid/os/IBinder;ILandroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;Ljava/lang/String;Landroid/os/Bundle;)I+]Lcom/android/server/am/PendingIntentRecord;Lcom/android/server/am/PendingIntentRecord;
+HPLcom/android/server/am/ActivityManagerService;->sendIntentSender(Landroid/content/IIntentSender;Landroid/os/IBinder;ILandroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;Ljava/lang/String;Landroid/os/Bundle;)I+]Lcom/android/server/am/PendingIntentRecord;Lcom/android/server/am/PendingIntentRecord;]Landroid/content/IIntentSender;Lcom/android/server/pm/PackageManagerShellCommand$LocalIntentReceiver$1;
 PLcom/android/server/am/ActivityManagerService;->sendPackageBroadcastLocked(I[Ljava/lang/String;I)V
 HSPLcom/android/server/am/ActivityManagerService;->sendPendingBroadcastsLocked(Lcom/android/server/am/ProcessRecord;)Z+]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueue;
 HSPLcom/android/server/am/ActivityManagerService;->serviceDoneExecuting(Landroid/os/IBinder;III)V+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
@@ -6758,7 +7069,7 @@
 HSPLcom/android/server/am/ActivityManagerService;->setInstaller(Lcom/android/server/pm/Installer;)V
 HPLcom/android/server/am/ActivityManagerService;->setProcessImportant(Landroid/os/IBinder;IZLjava/lang/String;)V
 PLcom/android/server/am/ActivityManagerService;->setProcessLimit(I)V
-PLcom/android/server/am/ActivityManagerService;->setProcessStateSummary([B)V
+HPLcom/android/server/am/ActivityManagerService;->setProcessStateSummary([B)V
 HSPLcom/android/server/am/ActivityManagerService;->setProcessTrackerStateLOSP(Lcom/android/server/am/ProcessRecord;I)V+]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
 HSPLcom/android/server/am/ActivityManagerService;->setRenderThread(I)V
 HPLcom/android/server/am/ActivityManagerService;->setServiceForeground(Landroid/content/ComponentName;Landroid/os/IBinder;ILandroid/app/Notification;II)V+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
@@ -6770,6 +7081,7 @@
 HSPLcom/android/server/am/ActivityManagerService;->setWindowManager(Lcom/android/server/wm/WindowManagerService;)V
 PLcom/android/server/am/ActivityManagerService;->showConsoleNotificationIfActive()V
 PLcom/android/server/am/ActivityManagerService;->showMteOverrideNotificationIfActive()V
+PLcom/android/server/am/ActivityManagerService;->showSafeModeOverlay()V
 PLcom/android/server/am/ActivityManagerService;->showWaitingForDebugger(Landroid/app/IApplicationThread;Z)V
 PLcom/android/server/am/ActivityManagerService;->shutdown(I)Z
 HSPLcom/android/server/am/ActivityManagerService;->skipCurrentReceiverLocked(Lcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueue;
@@ -6779,49 +7091,51 @@
 PLcom/android/server/am/ActivityManagerService;->startActivityAsUserWithFeature(Landroid/app/IApplicationThread;Ljava/lang/String;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILandroid/app/ProfilerInfo;Landroid/os/Bundle;I)I
 HSPLcom/android/server/am/ActivityManagerService;->startAssociationLocked(ILjava/lang/String;IIJLandroid/content/ComponentName;Ljava/lang/String;)Lcom/android/server/am/ActivityManagerService$Association;
 HSPLcom/android/server/am/ActivityManagerService;->startBroadcastObservers()V
+PLcom/android/server/am/ActivityManagerService;->startConfirmDeviceCredentialIntent(Landroid/content/Intent;Landroid/os/Bundle;)V
 PLcom/android/server/am/ActivityManagerService;->startDelegateShellPermissionIdentity(I[Ljava/lang/String;)V
 PLcom/android/server/am/ActivityManagerService;->startInstrumentation(Landroid/content/ComponentName;Ljava/lang/String;ILandroid/os/Bundle;Landroid/app/IInstrumentationWatcher;Landroid/app/IUiAutomationConnection;ILjava/lang/String;)Z
 HSPLcom/android/server/am/ActivityManagerService;->startIsolatedProcess(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Runnable;)Z
 HSPLcom/android/server/am/ActivityManagerService;->startObservingNativeCrashes()V
 HSPLcom/android/server/am/ActivityManagerService;->startPersistentApps(I)V
 HSPLcom/android/server/am/ActivityManagerService;->startProcessLocked(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;ZILcom/android/server/am/HostingRecord;IZZ)Lcom/android/server/am/ProcessRecord;+]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;
-HPLcom/android/server/am/ActivityManagerService;->startService(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;I)Landroid/content/ComponentName;+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HSPLcom/android/server/am/ActivityManagerService;->startService(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;I)Landroid/content/ComponentName;+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 PLcom/android/server/am/ActivityManagerService;->startUserInBackground(I)Z
 PLcom/android/server/am/ActivityManagerService;->startUserInBackgroundWithListener(ILandroid/os/IProgressListener;)Z
 PLcom/android/server/am/ActivityManagerService;->stopAppForUser(Ljava/lang/String;I)V
 PLcom/android/server/am/ActivityManagerService;->stopAppForUserInternal(Ljava/lang/String;I)V
 PLcom/android/server/am/ActivityManagerService;->stopAppSwitches()V
-HPLcom/android/server/am/ActivityManagerService;->stopAssociationLocked(ILjava/lang/String;IJLandroid/content/ComponentName;Ljava/lang/String;)V
+HSPLcom/android/server/am/ActivityManagerService;->stopAssociationLocked(ILjava/lang/String;IJLandroid/content/ComponentName;Ljava/lang/String;)V
 PLcom/android/server/am/ActivityManagerService;->stopDelegateShellPermissionIdentity()V
 HPLcom/android/server/am/ActivityManagerService;->stopService(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;I)I+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HPLcom/android/server/am/ActivityManagerService;->stopServiceToken(Landroid/content/ComponentName;Landroid/os/IBinder;I)Z+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
 PLcom/android/server/am/ActivityManagerService;->stopUser(IZLandroid/app/IStopUserCallback;)I
-PLcom/android/server/am/ActivityManagerService;->stringifyKBSize(J)Ljava/lang/String;
-HPLcom/android/server/am/ActivityManagerService;->stringifySize(JI)Ljava/lang/String;
+HSPLcom/android/server/am/ActivityManagerService;->stringifyKBSize(J)Ljava/lang/String;
+HSPLcom/android/server/am/ActivityManagerService;->stringifySize(JI)Ljava/lang/String;
 PLcom/android/server/am/ActivityManagerService;->switchUser(I)Z
 HSPLcom/android/server/am/ActivityManagerService;->systemReady(Ljava/lang/Runnable;Lcom/android/server/utils/TimingsTraceAndSlog;)V
 HPLcom/android/server/am/ActivityManagerService;->tempAllowlistForPendingIntentLocked(IIIJIILjava/lang/String;)V
 HSPLcom/android/server/am/ActivityManagerService;->tempAllowlistUidLocked(IJILjava/lang/String;II)V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$UiHandler;]Lcom/android/server/DeviceIdleInternal;Lcom/android/server/DeviceIdleController$LocalService;]Landroid/os/Message;Landroid/os/Message;]Lcom/android/server/am/PendingTempAllowlists;Lcom/android/server/am/PendingTempAllowlists;]Lcom/android/server/am/FgsTempAllowList;Lcom/android/server/am/FgsTempAllowList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ActivityManagerService;->traceBegin(JLjava/lang/String;Ljava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HPLcom/android/server/am/ActivityManagerService;->trimApplications(ZLjava/lang/String;)V
-HSPLcom/android/server/am/ActivityManagerService;->trimApplicationsLocked(ZLjava/lang/String;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ProcessReceiverRecord;Lcom/android/server/am/ProcessReceiverRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
-HPLcom/android/server/am/ActivityManagerService;->uidOnBackgroundAllowlistLOSP(I)Z
+HSPLcom/android/server/am/ActivityManagerService;->trimApplications(ZLjava/lang/String;)V
+HSPLcom/android/server/am/ActivityManagerService;->trimApplicationsLocked(ZLjava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ProcessReceiverRecord;Lcom/android/server/am/ProcessReceiverRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HSPLcom/android/server/am/ActivityManagerService;->uidOnBackgroundAllowlistLOSP(I)Z
 HPLcom/android/server/am/ActivityManagerService;->unbindBackupAgent(Landroid/content/pm/ApplicationInfo;)V
 HPLcom/android/server/am/ActivityManagerService;->unbindFinished(Landroid/os/IBinder;Landroid/content/Intent;Z)V+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Landroid/content/Intent;Landroid/content/Intent;
-HPLcom/android/server/am/ActivityManagerService;->unbindService(Landroid/app/IServiceConnection;)Z+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
+HSPLcom/android/server/am/ActivityManagerService;->unbindService(Landroid/app/IServiceConnection;)Z+]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;
 PLcom/android/server/am/ActivityManagerService;->unbroadcastIntent(Landroid/app/IApplicationThread;Landroid/content/Intent;I)V
 PLcom/android/server/am/ActivityManagerService;->unlockUser(I[B[BLandroid/os/IProgressListener;)Z
 HPLcom/android/server/am/ActivityManagerService;->unregisterIntentSenderCancelListener(Landroid/content/IIntentSender;Lcom/android/internal/os/IResultReceiver;)V+]Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentController;
-HPLcom/android/server/am/ActivityManagerService;->unregisterReceiver(Landroid/content/IIntentReceiver;)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/content/IIntentReceiver;Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;,Landroid/content/IIntentReceiver$Stub$Proxy;]Lcom/android/server/am/ProcessReceiverRecord;Lcom/android/server/am/ProcessReceiverRecord;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueue;
+PLcom/android/server/am/ActivityManagerService;->unregisterProcessObserver(Landroid/app/IProcessObserver;)V
+HSPLcom/android/server/am/ActivityManagerService;->unregisterReceiver(Landroid/content/IIntentReceiver;)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/content/IIntentReceiver;Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;,Landroid/content/IIntentReceiver$Stub$Proxy;]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueue;]Lcom/android/server/am/ProcessReceiverRecord;Lcom/android/server/am/ProcessReceiverRecord;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 PLcom/android/server/am/ActivityManagerService;->unregisterTaskStackListener(Landroid/app/ITaskStackListener;)V
 PLcom/android/server/am/ActivityManagerService;->unregisterUidObserver(Landroid/app/IUidObserver;)V
 PLcom/android/server/am/ActivityManagerService;->unregisterUserSwitchObserver(Landroid/app/IUserSwitchObserver;)V
 PLcom/android/server/am/ActivityManagerService;->unstableProviderDied(Landroid/os/IBinder;)V
-HPLcom/android/server/am/ActivityManagerService;->updateActivityUsageStats(Landroid/content/ComponentName;IILandroid/os/IBinder;Landroid/content/ComponentName;)V
-HPLcom/android/server/am/ActivityManagerService;->updateAppProcessCpuTimeLPr(JZJILcom/android/server/am/ProcessRecord;)V+]Ljava/util/concurrent/atomic/AtomicLong;Ljava/util/concurrent/atomic/AtomicLong;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
+HSPLcom/android/server/am/ActivityManagerService;->updateActivityUsageStats(Landroid/content/ComponentName;IILandroid/os/IBinder;Landroid/content/ComponentName;)V
+HPLcom/android/server/am/ActivityManagerService;->updateAppProcessCpuTimeLPr(JZJILcom/android/server/am/ProcessRecord;)V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Ljava/util/concurrent/atomic/AtomicLong;Ljava/util/concurrent/atomic/AtomicLong;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
 HSPLcom/android/server/am/ActivityManagerService;->updateApplicationInfoLOSP(Ljava/util/List;ZI)V
 PLcom/android/server/am/ActivityManagerService;->updateAssociationForApp(Landroid/content/pm/ApplicationInfo;)V
-HPLcom/android/server/am/ActivityManagerService;->updateBatteryStats(Landroid/content/ComponentName;IIZ)V
+HSPLcom/android/server/am/ActivityManagerService;->updateBatteryStats(Landroid/content/ComponentName;IIZ)V
 HSPLcom/android/server/am/ActivityManagerService;->updateCpuStats()V+]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;
 HSPLcom/android/server/am/ActivityManagerService;->updateCpuStatsNow()V
 HSPLcom/android/server/am/ActivityManagerService;->updateForceBackgroundCheck(Z)V
@@ -6832,6 +7146,7 @@
 HSPLcom/android/server/am/ActivityManagerService;->updateOomAdjLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;)Z+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;
 HSPLcom/android/server/am/ActivityManagerService;->updateOomAdjLocked(Ljava/lang/String;)V+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;
 HSPLcom/android/server/am/ActivityManagerService;->updateOomAdjPendingTargetsLocked(Ljava/lang/String;)V+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;
+PLcom/android/server/am/ActivityManagerService;->updatePersistentConfiguration(Landroid/content/res/Configuration;)V
 PLcom/android/server/am/ActivityManagerService;->updatePersistentConfigurationWithAttribution(Landroid/content/res/Configuration;Ljava/lang/String;Ljava/lang/String;)V
 HPLcom/android/server/am/ActivityManagerService;->updatePhantomProcessCpuTimeLPr(JZJILcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ActivityManagerService;->updateProcessForegroundLocked(Lcom/android/server/am/ProcessRecord;ZIZ)V+]Landroid/app/ActivityManagerInternal$ForegroundServiceStateListener;Lcom/android/server/am/AppFGSTracker;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
@@ -6843,35 +7158,42 @@
 HSPLcom/android/server/am/ActivityManagerService;->watchDeviceProvisioning(Landroid/content/Context;)V
 HPLcom/android/server/am/ActivityManagerService;->writeBroadcastsToProtoLocked(Landroid/util/proto/ProtoOutputStream;)V
 PLcom/android/server/am/ActivityManagerService;->writeOtherProcessesInfoToProtoLSP(Landroid/util/proto/ProtoOutputStream;Ljava/lang/String;II)V
-PLcom/android/server/am/ActivityManagerShellCommand$1;-><init>(Lcom/android/server/am/ActivityManagerShellCommand;)V
-PLcom/android/server/am/ActivityManagerShellCommand$1;->handleOption(Ljava/lang/String;Landroid/os/ShellCommand;)Z
-PLcom/android/server/am/ActivityManagerShellCommand$IntentReceiver;-><init>(Ljava/io/PrintWriter;)V
+HSPLcom/android/server/am/ActivityManagerShellCommand$1;-><init>(Lcom/android/server/am/ActivityManagerShellCommand;)V
+HPLcom/android/server/am/ActivityManagerShellCommand$1;->handleOption(Ljava/lang/String;Landroid/os/ShellCommand;)Z
+PLcom/android/server/am/ActivityManagerShellCommand$2;-><init>(Lcom/android/server/am/ActivityManagerShellCommand;Ljava/util/concurrent/CountDownLatch;)V
+PLcom/android/server/am/ActivityManagerShellCommand$2;->onResult(Landroid/os/Bundle;)V
+HSPLcom/android/server/am/ActivityManagerShellCommand$IntentReceiver;-><init>(Ljava/io/PrintWriter;)V
 PLcom/android/server/am/ActivityManagerShellCommand$IntentReceiver;->performReceive(Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V
 PLcom/android/server/am/ActivityManagerShellCommand$IntentReceiver;->waitForFinish()V
 PLcom/android/server/am/ActivityManagerShellCommand;->-$$Nest$fgetmStartFlags(Lcom/android/server/am/ActivityManagerShellCommand;)I
 PLcom/android/server/am/ActivityManagerShellCommand;->-$$Nest$fputmReceiverPermission(Lcom/android/server/am/ActivityManagerShellCommand;Ljava/lang/String;)V
 PLcom/android/server/am/ActivityManagerShellCommand;->-$$Nest$fputmStartFlags(Lcom/android/server/am/ActivityManagerShellCommand;I)V
 PLcom/android/server/am/ActivityManagerShellCommand;->-$$Nest$fputmUserId(Lcom/android/server/am/ActivityManagerShellCommand;I)V
-PLcom/android/server/am/ActivityManagerShellCommand;-><clinit>()V
-HPLcom/android/server/am/ActivityManagerShellCommand;-><init>(Lcom/android/server/am/ActivityManagerService;Z)V
+HSPLcom/android/server/am/ActivityManagerShellCommand;-><clinit>()V
+HSPLcom/android/server/am/ActivityManagerShellCommand;-><init>(Lcom/android/server/am/ActivityManagerService;Z)V
 PLcom/android/server/am/ActivityManagerShellCommand;->dumpHelp(Ljava/io/PrintWriter;Z)V
-PLcom/android/server/am/ActivityManagerShellCommand;->makeIntent(I)Landroid/content/Intent;
-PLcom/android/server/am/ActivityManagerShellCommand;->onCommand(Ljava/lang/String;)I
+HSPLcom/android/server/am/ActivityManagerShellCommand;->makeIntent(I)Landroid/content/Intent;
+HSPLcom/android/server/am/ActivityManagerShellCommand;->onCommand(Ljava/lang/String;)I
 PLcom/android/server/am/ActivityManagerShellCommand;->onHelp()V
+PLcom/android/server/am/ActivityManagerShellCommand;->runAttachAgent(Ljava/io/PrintWriter;)I
 PLcom/android/server/am/ActivityManagerShellCommand;->runCompat(Ljava/io/PrintWriter;)I
+PLcom/android/server/am/ActivityManagerShellCommand;->runDumpHeap(Ljava/io/PrintWriter;)I
 PLcom/android/server/am/ActivityManagerShellCommand;->runForceStop(Ljava/io/PrintWriter;)I
 HPLcom/android/server/am/ActivityManagerShellCommand;->runGetConfig(Ljava/io/PrintWriter;)I
-PLcom/android/server/am/ActivityManagerShellCommand;->runSendBroadcast(Ljava/io/PrintWriter;)I
+PLcom/android/server/am/ActivityManagerShellCommand;->runGetCurrentUser(Ljava/io/PrintWriter;)I
+PLcom/android/server/am/ActivityManagerShellCommand;->runKill(Ljava/io/PrintWriter;)I
+HSPLcom/android/server/am/ActivityManagerShellCommand;->runSendBroadcast(Ljava/io/PrintWriter;)I
 PLcom/android/server/am/ActivityManagerShellCommand;->runSetDebugApp(Ljava/io/PrintWriter;)I
-PLcom/android/server/am/ActivityManagerShellCommand;->runStartActivity(Ljava/io/PrintWriter;)I
+HPLcom/android/server/am/ActivityManagerShellCommand;->runStartActivity(Ljava/io/PrintWriter;)I
 PLcom/android/server/am/ActivityManagerShellCommand;->runStopService(Ljava/io/PrintWriter;)I
+PLcom/android/server/am/ActivityManagerShellCommand;->runUpdateApplicationInfo(Ljava/io/PrintWriter;)I
 PLcom/android/server/am/ActivityManagerUtils;-><clinit>()V
 PLcom/android/server/am/ActivityManagerUtils;->extractByte([BI)I
 HPLcom/android/server/am/ActivityManagerUtils;->getAndroidIdHash()I
 HPLcom/android/server/am/ActivityManagerUtils;->getUnsignedHashCached(Ljava/lang/String;)I
 HPLcom/android/server/am/ActivityManagerUtils;->getUnsignedHashUnCached(Ljava/lang/String;)I
 HPLcom/android/server/am/ActivityManagerUtils;->hashComponentNameForAtom(Ljava/lang/String;)I
-PLcom/android/server/am/ActivityManagerUtils;->shouldSamplePackageForAtom(Ljava/lang/String;F)Z
+HPLcom/android/server/am/ActivityManagerUtils;->shouldSamplePackageForAtom(Ljava/lang/String;F)Z
 HPLcom/android/server/am/ActivityManagerUtils;->unsignedIntFromBytes([B)I
 PLcom/android/server/am/AnrHelper$AnrConsumerThread;-><init>(Lcom/android/server/am/AnrHelper;)V
 PLcom/android/server/am/AnrHelper$AnrConsumerThread;->next()Lcom/android/server/am/AnrHelper$AnrRecord;
@@ -6922,7 +7244,7 @@
 PLcom/android/server/am/AppBatteryExemptionTracker;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HPLcom/android/server/am/AppBatteryExemptionTracker;->getUidBatteryExemptedUsageSince(IJJI)Lcom/android/server/am/AppBatteryTracker$ImmutableBatteryUsage;+]Lcom/android/server/am/BaseAppStateTracker$Injector;Lcom/android/server/am/BaseAppStateTracker$Injector;]Lcom/android/server/am/AppBatteryTracker$BatteryUsage;Lcom/android/server/am/AppBatteryTracker$BatteryUsage;,Lcom/android/server/am/AppBatteryTracker$ImmutableBatteryUsage;]Lcom/android/server/am/AppBatteryExemptionTracker$UidBatteryStates;Lcom/android/server/am/AppBatteryExemptionTracker$UidBatteryStates;]Lcom/android/server/am/BaseAppStatePolicy;Lcom/android/server/am/AppBatteryExemptionTracker$AppBatteryExemptionPolicy;]Lcom/android/server/am/AppBatteryTracker$ImmutableBatteryUsage;Lcom/android/server/am/AppBatteryTracker$ImmutableBatteryUsage;]Lcom/android/server/am/AppRestrictionController;Lcom/android/server/am/AppRestrictionController;]Lcom/android/server/am/UidProcessMap;Lcom/android/server/am/UidProcessMap;
 HSPLcom/android/server/am/AppBatteryExemptionTracker;->lambda$onSystemReady$0(Lcom/android/server/am/BaseAppStateTracker;)V
-HPLcom/android/server/am/AppBatteryExemptionTracker;->onStateChange(ILjava/lang/String;ZJI)V
+HPLcom/android/server/am/AppBatteryExemptionTracker;->onStateChange(ILjava/lang/String;ZJI)V+]Lcom/android/server/am/BaseAppStateTracker$Injector;Lcom/android/server/am/BaseAppStateTracker$Injector;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/BaseAppStatePolicy;Lcom/android/server/am/AppBatteryExemptionTracker$AppBatteryExemptionPolicy;]Lcom/android/server/am/AppBatteryExemptionTracker$UidBatteryStates;Lcom/android/server/am/AppBatteryExemptionTracker$UidBatteryStates;]Lcom/android/server/am/AppBatteryExemptionTracker;Lcom/android/server/am/AppBatteryExemptionTracker;]Lcom/android/server/am/AppRestrictionController;Lcom/android/server/am/AppRestrictionController;]Lcom/android/server/am/UidProcessMap;Lcom/android/server/am/UidProcessMap;
 HSPLcom/android/server/am/AppBatteryExemptionTracker;->onSystemReady()V
 HSPLcom/android/server/am/AppBatteryExemptionTracker;->onTrackerEnabled(Z)V
 HSPLcom/android/server/am/AppBatteryExemptionTracker;->trimDurations()V
@@ -7001,7 +7323,7 @@
 HPLcom/android/server/am/AppBatteryTracker;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HPLcom/android/server/am/AppBatteryTracker;->getTrackerInfoForStatsd(I)[B
 PLcom/android/server/am/AppBatteryTracker;->getType()I
-HPLcom/android/server/am/AppBatteryTracker;->getUidBatteryUsage(I)Lcom/android/server/am/AppBatteryTracker$ImmutableBatteryUsage;
+HPLcom/android/server/am/AppBatteryTracker;->getUidBatteryUsage(I)Lcom/android/server/am/AppBatteryTracker$ImmutableBatteryUsage;+]Lcom/android/server/am/BaseAppStateTracker$Injector;Lcom/android/server/am/BaseAppStateTracker$Injector;]Lcom/android/server/am/AppBatteryTracker;Lcom/android/server/am/AppBatteryTracker;]Landroid/os/Handler;Lcom/android/server/am/AppRestrictionController$BgHandler;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/am/AppBatteryTracker;->lambda$dump$0(Ljava/util/concurrent/CountDownLatch;)Z
 HSPLcom/android/server/am/AppBatteryTracker;->logAppBatteryTrackerIfNeeded()V
 PLcom/android/server/am/AppBatteryTracker;->onBackgroundRestrictionChanged(ILjava/lang/String;Z)V
@@ -7013,13 +7335,13 @@
 HSPLcom/android/server/am/AppBatteryTracker;->scheduleBatteryUsageStatsUpdateIfNecessary(J)V
 HPLcom/android/server/am/AppBatteryTracker;->scheduleBgBatteryUsageStatsCheck()V
 PLcom/android/server/am/AppBatteryTracker;->updateBatteryUsageStatsAndCheck()V
-HSPLcom/android/server/am/AppBatteryTracker;->updateBatteryUsageStatsIfNecessary(JZ)Z
-HSPLcom/android/server/am/AppBatteryTracker;->updateBatteryUsageStatsOnce(J)V+]Lcom/android/server/am/BaseAppStateTracker$Injector;Lcom/android/server/am/BaseAppStateTracker$Injector;]Lcom/android/server/am/AppBatteryTracker;Lcom/android/server/am/AppBatteryTracker;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/AppBatteryTracker$BatteryUsage;Lcom/android/server/am/AppBatteryTracker$BatteryUsage;,Lcom/android/server/am/AppBatteryTracker$ImmutableBatteryUsage;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/os/BatteryUsageStatsQuery$Builder;Landroid/os/BatteryUsageStatsQuery$Builder;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/os/BatteryUsageStats;Landroid/os/BatteryUsageStats;
-HSPLcom/android/server/am/AppBatteryTracker;->updateBatteryUsageStatsOnceInternal(JLandroid/util/SparseArray;Landroid/os/BatteryUsageStatsQuery$Builder;Landroid/util/ArraySet;Landroid/os/BatteryStatsInternal;)Landroid/os/BatteryUsageStats;+]Lcom/android/server/am/BaseAppStateTracker$Injector;Lcom/android/server/am/BaseAppStateTracker$Injector;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/AppBatteryTracker$BatteryUsage;Lcom/android/server/am/AppBatteryTracker$BatteryUsage;,Lcom/android/server/am/AppBatteryTracker$ImmutableBatteryUsage;]Landroid/os/BatteryUsageStatsQuery$Builder;Landroid/os/BatteryUsageStatsQuery$Builder;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/os/BatteryUsageStats;Landroid/os/BatteryUsageStats;]Landroid/os/BatteryStatsInternal;Lcom/android/server/am/BatteryStatsService$LocalService;]Landroid/os/UidBatteryConsumer;Landroid/os/UidBatteryConsumer;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HSPLcom/android/server/am/AppBatteryTracker;->updateBatteryUsageStatsIfNecessary(JZ)Z+]Lcom/android/server/am/AppBatteryTracker;Lcom/android/server/am/AppBatteryTracker;]Ljava/lang/Object;Ljava/lang/Object;
+HSPLcom/android/server/am/AppBatteryTracker;->updateBatteryUsageStatsOnce(J)V+]Lcom/android/server/am/BaseAppStateTracker$Injector;Lcom/android/server/am/BaseAppStateTracker$Injector;]Lcom/android/server/am/AppBatteryTracker;Lcom/android/server/am/AppBatteryTracker;]Lcom/android/server/am/AppBatteryTracker$BatteryUsage;Lcom/android/server/am/AppBatteryTracker$BatteryUsage;,Lcom/android/server/am/AppBatteryTracker$ImmutableBatteryUsage;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/os/BatteryUsageStatsQuery$Builder;Landroid/os/BatteryUsageStatsQuery$Builder;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/os/BatteryUsageStats;Landroid/os/BatteryUsageStats;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/am/AppBatteryTracker;->updateBatteryUsageStatsOnceInternal(JLandroid/util/SparseArray;Landroid/os/BatteryUsageStatsQuery$Builder;Landroid/util/ArraySet;Landroid/os/BatteryStatsInternal;)Landroid/os/BatteryUsageStats;+]Lcom/android/server/am/BaseAppStateTracker$Injector;Lcom/android/server/am/BaseAppStateTracker$Injector;]Lcom/android/server/am/AppBatteryTracker$BatteryUsage;Lcom/android/server/am/AppBatteryTracker$BatteryUsage;,Lcom/android/server/am/AppBatteryTracker$ImmutableBatteryUsage;]Landroid/os/BatteryUsageStatsQuery$Builder;Landroid/os/BatteryUsageStatsQuery$Builder;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/os/BatteryUsageStats;Landroid/os/BatteryUsageStats;]Landroid/os/BatteryStatsInternal;Lcom/android/server/am/BatteryStatsService$LocalService;]Landroid/os/UidBatteryConsumer;Landroid/os/UidBatteryConsumer;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/am/AppBindRecord;-><init>(Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/IntentBindRecord;Lcom/android/server/am/ProcessRecord;)V
-HPLcom/android/server/am/AppBindRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-HPLcom/android/server/am/AppBindRecord;->dumpInIntentBind(Ljava/io/PrintWriter;Ljava/lang/String;)V
-HPLcom/android/server/am/AppBindRecord;->toString()Ljava/lang/String;
+HPLcom/android/server/am/AppBindRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLcom/android/server/am/AppBindRecord;->dumpInIntentBind(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/am/AppBindRecord;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/am/AppBindServiceEventsTracker$AppBindServiceEventsPolicy;-><init>(Lcom/android/server/am/BaseAppStateTracker$Injector;Lcom/android/server/am/AppBindServiceEventsTracker;)V
 PLcom/android/server/am/AppBindServiceEventsTracker$AppBindServiceEventsPolicy;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/am/AppBindServiceEventsTracker;-><init>(Landroid/content/Context;Lcom/android/server/am/AppRestrictionController;)V
@@ -7027,7 +7349,7 @@
 PLcom/android/server/am/AppBindServiceEventsTracker;->createAppStateEvents(ILjava/lang/String;)Lcom/android/server/am/BaseAppStateEvents;
 HPLcom/android/server/am/AppBindServiceEventsTracker;->createAppStateEvents(ILjava/lang/String;)Lcom/android/server/am/BaseAppStateTimeSlotEventsTracker$SimpleAppStateTimeslotEvents;
 PLcom/android/server/am/AppBindServiceEventsTracker;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/am/AppBindServiceEventsTracker;->getTrackerInfoForStatsd(I)[B
+HPLcom/android/server/am/AppBindServiceEventsTracker;->getTrackerInfoForStatsd(I)[B
 PLcom/android/server/am/AppBindServiceEventsTracker;->getType()I
 HSPLcom/android/server/am/AppBindServiceEventsTracker;->onBindingService(Ljava/lang/String;I)V+]Lcom/android/server/am/BaseAppStateTracker$Injector;Lcom/android/server/am/BaseAppStateTracker$Injector;]Lcom/android/server/am/BaseAppStateTimeSlotEventsTracker;Lcom/android/server/am/AppBindServiceEventsTracker;]Lcom/android/server/am/BaseAppStatePolicy;Lcom/android/server/am/AppBindServiceEventsTracker$AppBindServiceEventsPolicy;
 HSPLcom/android/server/am/AppBindServiceEventsTracker;->onSystemReady()V
@@ -7053,36 +7375,40 @@
 PLcom/android/server/am/AppErrorDialog;->onCreate(Landroid/os/Bundle;)V
 PLcom/android/server/am/AppErrorDialog;->setResult(I)V
 HPLcom/android/server/am/AppErrorResult;-><init>()V
-HPLcom/android/server/am/AppErrorResult;->get()I
-HPLcom/android/server/am/AppErrorResult;->set(I)V
+HPLcom/android/server/am/AppErrorResult;->get()I+]Ljava/lang/Object;Lcom/android/server/am/AppErrorResult;
+HPLcom/android/server/am/AppErrorResult;->set(I)V+]Ljava/lang/Object;Lcom/android/server/am/AppErrorResult;
+PLcom/android/server/am/AppErrors$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/am/AppErrors;Lcom/android/server/am/ProcessRecord;)V
+PLcom/android/server/am/AppErrors$$ExternalSyntheticLambda0;->run()V
 HPLcom/android/server/am/AppErrors$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/am/AppErrors;Landroid/app/ApplicationErrorReport$CrashInfo;Ljava/lang/String;ILcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
 PLcom/android/server/am/AppErrors$BadProcessInfo;-><init>(JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/am/AppErrors;->$r8$lambda$EYNvQHuzJL337LHFRG7pcYxtbUg(Lcom/android/server/am/AppErrors;Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/AppErrors;-><init>(Landroid/content/Context;Lcom/android/server/am/ActivityManagerService;Lcom/android/server/PackageWatchdog;)V
 PLcom/android/server/am/AppErrors;->clearBadProcess(Ljava/lang/String;I)V
-HPLcom/android/server/am/AppErrors;->crashApplication(Lcom/android/server/am/ProcessRecord;Landroid/app/ApplicationErrorReport$CrashInfo;)V
-HPLcom/android/server/am/AppErrors;->crashApplicationInner(Lcom/android/server/am/ProcessRecord;Landroid/app/ApplicationErrorReport$CrashInfo;II)V
+HPLcom/android/server/am/AppErrors;->crashApplication(Lcom/android/server/am/ProcessRecord;Landroid/app/ApplicationErrorReport$CrashInfo;)V+]Lcom/android/server/am/AppErrors;Lcom/android/server/am/AppErrors;
+HPLcom/android/server/am/AppErrors;->crashApplicationInner(Lcom/android/server/am/ProcessRecord;Landroid/app/ApplicationErrorReport$CrashInfo;II)V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$UiHandler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/AppErrorResult;Lcom/android/server/am/AppErrorResult;]Lcom/android/server/am/AppErrors;Lcom/android/server/am/AppErrors;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/PackageWatchdog;Lcom/android/server/PackageWatchdog;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;
 PLcom/android/server/am/AppErrors;->createAppErrorIntentLOSP(Lcom/android/server/am/ProcessRecord;JLandroid/app/ApplicationErrorReport$CrashInfo;)Landroid/content/Intent;
 PLcom/android/server/am/AppErrors;->createAppErrorReportLOSP(Lcom/android/server/am/ProcessRecord;JLandroid/app/ApplicationErrorReport$CrashInfo;)Landroid/app/ApplicationErrorReport;
 PLcom/android/server/am/AppErrors;->dumpDebugLPr(Landroid/util/proto/ProtoOutputStream;JLjava/lang/String;)V
-HPLcom/android/server/am/AppErrors;->dumpLPr(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;ZLjava/lang/String;)Z
-HPLcom/android/server/am/AppErrors;->generateProcessError(Lcom/android/server/am/ProcessRecord;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/app/ActivityManager$ProcessErrorStateInfo;
-HPLcom/android/server/am/AppErrors;->handleAppCrashInActivityController(Lcom/android/server/am/ProcessRecord;Landroid/app/ApplicationErrorReport$CrashInfo;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JII)Z
-HPLcom/android/server/am/AppErrors;->handleAppCrashLSPB(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/android/server/am/AppErrorDialog$Data;)Z
-PLcom/android/server/am/AppErrors;->handleDismissAnrDialogs(Lcom/android/server/am/ProcessRecord;)V
+HSPLcom/android/server/am/AppErrors;->dumpLPr(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;ZLjava/lang/String;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/io/PrintWriter;Lcom/android/internal/util/FastPrintWriter;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/lang/Long;Ljava/lang/Long;]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;,Lcom/android/server/am/ProcessList$MyProcessMap;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HPLcom/android/server/am/AppErrors;->generateProcessError(Lcom/android/server/am/ProcessRecord;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/app/ActivityManager$ProcessErrorStateInfo;+]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
+HPLcom/android/server/am/AppErrors;->handleAppCrashInActivityController(Lcom/android/server/am/ProcessRecord;Landroid/app/ApplicationErrorReport$CrashInfo;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JII)Z+]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
+HPLcom/android/server/am/AppErrors;->handleAppCrashLSPB(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/android/server/am/AppErrorDialog$Data;)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/am/ProcessErrorStateRecord;Lcom/android/server/am/ProcessErrorStateRecord;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/am/AppErrors;Lcom/android/server/am/AppErrors;]Lcom/android/server/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;]Ljava/lang/Long;Ljava/lang/Long;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;
+HPLcom/android/server/am/AppErrors;->handleDismissAnrDialogs(Lcom/android/server/am/ProcessRecord;)V
 PLcom/android/server/am/AppErrors;->handleShowAnrUi(Landroid/os/Message;)V
-HPLcom/android/server/am/AppErrors;->handleShowAppErrorUi(Landroid/os/Message;)V
+HPLcom/android/server/am/AppErrors;->handleShowAppErrorUi(Landroid/os/Message;)V+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/am/AppErrorResult;Lcom/android/server/am/AppErrorResult;]Lcom/android/server/am/ProcessErrorStateRecord;Lcom/android/server/am/ProcessErrorStateRecord;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/lang/Long;Ljava/lang/Long;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/am/ErrorDialogController;Lcom/android/server/am/ErrorDialogController;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/am/AppErrors;->isBadProcess(Ljava/lang/String;I)Z+]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;
 HPLcom/android/server/am/AppErrors;->isProcOverCrashLimitLBp(Lcom/android/server/am/ProcessRecord;J)Z
 PLcom/android/server/am/AppErrors;->killAppAtUserRequestLocked(Lcom/android/server/am/ProcessRecord;)V
 PLcom/android/server/am/AppErrors;->killAppImmediateLSP(Lcom/android/server/am/ProcessRecord;IILjava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/am/AppErrors;->lambda$scheduleAppCrashLocked$0(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/AppErrors;->loadAppsNotReportingCrashesFromConfig(Ljava/lang/String;)V
-HPLcom/android/server/am/AppErrors;->makeAppCrashingLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/android/server/am/AppErrorDialog$Data;)Z
+HPLcom/android/server/am/AppErrors;->makeAppCrashingLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/android/server/am/AppErrorDialog$Data;)Z+]Lcom/android/server/am/AppErrors;Lcom/android/server/am/AppErrors;]Lcom/android/server/am/ProcessErrorStateRecord;Lcom/android/server/am/ProcessErrorStateRecord;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 PLcom/android/server/am/AppErrors;->markBadProcess(Ljava/lang/String;ILcom/android/server/am/AppErrors$BadProcessInfo;)V
 PLcom/android/server/am/AppErrors;->resetProcessCrashMapLBp(Landroid/util/SparseArray;ZII)V
 HSPLcom/android/server/am/AppErrors;->resetProcessCrashTime(Ljava/lang/String;I)V
 HSPLcom/android/server/am/AppErrors;->resetProcessCrashTime(ZII)V
 PLcom/android/server/am/AppErrors;->scheduleAppCrashLocked(IILjava/lang/String;ILjava/lang/String;ZILandroid/os/Bundle;)V
-HPLcom/android/server/am/AppErrors;->updateProcessCrashCountLBp(Ljava/lang/String;IJ)V
+HPLcom/android/server/am/AppErrors;->updateProcessCrashCountLBp(Ljava/lang/String;IJ)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/lang/Long;Ljava/lang/Long;]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;
 PLcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda0;-><init>()V
 PLcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda0;->get()Ljava/lang/Object;
 PLcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda10;-><init>(I)V
@@ -7108,13 +7434,14 @@
 HSPLcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/am/AppExitInfoTracker;)V
 PLcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda4;->run()V
 PLcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda5;-><init>(Landroid/util/proto/ProtoOutputStream;)V
-PLcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda5;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda5;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda6;-><init>(Landroid/util/ArraySet;)V
 HSPLcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda6;->accept(Ljava/io/File;)Z
 HSPLcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda7;-><init>(Landroid/util/ArraySet;)V
 HSPLcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda7;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda8;-><init>(Landroid/util/ArraySet;)V
 PLcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda9;-><init>(I)V
+PLcom/android/server/am/AppExitInfoTracker$$ExternalSyntheticLambda9;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/am/AppExitInfoTracker$1;-><init>(Lcom/android/server/am/AppExitInfoTracker;)V
 PLcom/android/server/am/AppExitInfoTracker$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/am/AppExitInfoTracker$2;-><init>(Lcom/android/server/am/AppExitInfoTracker;)V
@@ -7128,9 +7455,9 @@
 PLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;->$r8$lambda$3t67QZ_iHktRg5HfUve8Fl-jj6Q(Landroid/app/ApplicationExitInfo;Landroid/app/ApplicationExitInfo;)I
 HPLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;->$r8$lambda$UFEmPr-4Q7RVTgJrOMYqKxm5muY(Landroid/app/ApplicationExitInfo;Landroid/app/ApplicationExitInfo;)I
 HPLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;->$r8$lambda$je1rirOXtchdmoslIyyOxi6GFNY(Landroid/app/ApplicationExitInfo;Landroid/app/ApplicationExitInfo;)I
-PLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;->-$$Nest$fputmUid(Lcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;I)V
+HSPLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;->-$$Nest$fputmUid(Lcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;I)V
 HSPLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;-><init>(Lcom/android/server/am/AppExitInfoTracker;I)V
-HSPLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;->addExitInfoLocked(Landroid/app/ApplicationExitInfo;)V+]Landroid/app/ApplicationExitInfo;Landroid/app/ApplicationExitInfo;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/io/File;Ljava/io/File;
+HSPLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;->addExitInfoLocked(Landroid/app/ApplicationExitInfo;)V+]Landroid/app/ApplicationExitInfo;Landroid/app/ApplicationExitInfo;]Ljava/io/File;Ljava/io/File;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;->appendTraceIfNecessaryLocked(ILjava/io/File;)Z
 PLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;->destroyLocked()V
 HPLcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;->dumpLocked(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/icu/text/SimpleDateFormat;)V
@@ -7166,6 +7493,7 @@
 PLcom/android/server/am/AppExitInfoTracker;->$r8$lambda$CnNAc-pLVY6SWJMAhiM5YW7v4dg(Landroid/util/proto/ProtoOutputStream;Ljava/lang/String;Landroid/util/SparseArray;)Ljava/lang/Integer;
 HSPLcom/android/server/am/AppExitInfoTracker;->$r8$lambda$FEPeNqrWBDulJPvvktbRa_FqKhk(Lcom/android/server/am/AppExitInfoTracker;ILjava/util/ArrayList;ILjava/lang/Integer;Ljava/lang/Integer;Ljava/lang/String;Landroid/util/SparseArray;)Ljava/lang/Integer;
 PLcom/android/server/am/AppExitInfoTracker;->$r8$lambda$Rn5VI7ZbWhrtBhGAhWXKmCTWTz8(Lcom/android/server/am/AppExitInfoTracker;Ljava/io/PrintWriter;Landroid/icu/text/SimpleDateFormat;Ljava/lang/String;Landroid/util/SparseArray;)Ljava/lang/Integer;
+PLcom/android/server/am/AppExitInfoTracker;->$r8$lambda$XwsRr44ws5OG8R7J6t3kzoxqpFw(ILjava/lang/Integer;)Z
 PLcom/android/server/am/AppExitInfoTracker;->$r8$lambda$b6PDoEzDDzcVdmJjWZI86s3pU64(Ljava/io/File;)V
 HSPLcom/android/server/am/AppExitInfoTracker;->$r8$lambda$cXoJD4H-OkxmXtIpe-oexD_HrFY(Landroid/util/ArraySet;Ljava/lang/String;Landroid/util/SparseArray;)Ljava/lang/Integer;
 HSPLcom/android/server/am/AppExitInfoTracker;->$r8$lambda$jaxc00fP7hjwM81lCjgpwTh4_mU(Landroid/util/ArraySet;Ljava/lang/Integer;Landroid/app/ApplicationExitInfo;)Ljava/lang/Integer;
@@ -7179,7 +7507,7 @@
 HSPLcom/android/server/am/AppExitInfoTracker;->-$$Nest$smfindAndRemoveFromSparse2dArray(Landroid/util/SparseArray;II)Ljava/lang/Object;
 HSPLcom/android/server/am/AppExitInfoTracker;-><clinit>()V
 HSPLcom/android/server/am/AppExitInfoTracker;-><init>()V
-HSPLcom/android/server/am/AppExitInfoTracker;->addExitInfoInnerLocked(Ljava/lang/String;ILandroid/app/ApplicationExitInfo;)V+]Landroid/app/ApplicationExitInfo;Landroid/app/ApplicationExitInfo;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;Lcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;]Lcom/android/server/am/AppExitInfoTracker$IsolatedUidRecords;Lcom/android/server/am/AppExitInfoTracker$IsolatedUidRecords;
+HSPLcom/android/server/am/AppExitInfoTracker;->addExitInfoInnerLocked(Ljava/lang/String;ILandroid/app/ApplicationExitInfo;)V+]Landroid/app/ApplicationExitInfo;Landroid/app/ApplicationExitInfo;]Lcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;Lcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;]Lcom/android/server/am/AppExitInfoTracker$IsolatedUidRecords;Lcom/android/server/am/AppExitInfoTracker$IsolatedUidRecords;]Ljava/lang/Integer;Ljava/lang/Integer;
 HSPLcom/android/server/am/AppExitInfoTracker;->addExitInfoLocked(Landroid/app/ApplicationExitInfo;)Landroid/app/ApplicationExitInfo;+]Landroid/app/ApplicationExitInfo;Landroid/app/ApplicationExitInfo;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/am/AppExitInfoTracker;Lcom/android/server/am/AppExitInfoTracker;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Lcom/android/server/am/AppExitInfoTracker$IsolatedUidRecords;Lcom/android/server/am/AppExitInfoTracker$IsolatedUidRecords;
 PLcom/android/server/am/AppExitInfoTracker;->copyToGzFile(Ljava/io/File;Ljava/io/File;JJ)Z
 PLcom/android/server/am/AppExitInfoTracker;->dumpHistoryProcessExitInfo(Ljava/io/PrintWriter;Ljava/lang/String;)V
@@ -7205,6 +7533,7 @@
 HSPLcom/android/server/am/AppExitInfoTracker;->lambda$pruneAnrTracesIfNecessaryLocked$13(Landroid/util/ArraySet;Ljava/lang/Integer;Landroid/app/ApplicationExitInfo;)Ljava/lang/Integer;
 HSPLcom/android/server/am/AppExitInfoTracker;->lambda$pruneAnrTracesIfNecessaryLocked$14(Landroid/util/ArraySet;Ljava/lang/String;Landroid/util/SparseArray;)Ljava/lang/Integer;
 PLcom/android/server/am/AppExitInfoTracker;->lambda$removeByUserIdLocked$10(ILjava/lang/String;Landroid/util/SparseArray;)Ljava/lang/Integer;
+PLcom/android/server/am/AppExitInfoTracker;->lambda$removeByUserIdLocked$7(ILjava/lang/Integer;)Z
 HSPLcom/android/server/am/AppExitInfoTracker;->lambda$updateExitInfoIfNecessaryLocked$2(ILjava/util/ArrayList;ILjava/lang/Integer;Ljava/lang/Integer;Ljava/lang/String;Landroid/util/SparseArray;)Ljava/lang/Integer;+]Landroid/app/ApplicationExitInfo;Landroid/app/ApplicationExitInfo;]Lcom/android/server/am/AppExitInfoTracker;Lcom/android/server/am/AppExitInfoTracker;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;Lcom/android/server/am/AppExitInfoTracker$AppExitInfoContainer;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/am/AppExitInfoTracker;->loadExistingProcessExitInfo()V
 HSPLcom/android/server/am/AppExitInfoTracker;->loadPackagesFromProto(Landroid/util/proto/ProtoInputStream;J)V
@@ -7212,7 +7541,7 @@
 PLcom/android/server/am/AppExitInfoTracker;->onPackageRemoved(Ljava/lang/String;IZ)V
 HSPLcom/android/server/am/AppExitInfoTracker;->onSystemReady()V
 PLcom/android/server/am/AppExitInfoTracker;->onUserRemoved(I)V
-HSPLcom/android/server/am/AppExitInfoTracker;->performLogToStatsdLocked(Landroid/app/ApplicationExitInfo;)V
+HSPLcom/android/server/am/AppExitInfoTracker;->performLogToStatsdLocked(Landroid/app/ApplicationExitInfo;)V+]Ljava/lang/String;Ljava/lang/String;]Landroid/app/ApplicationExitInfo;Landroid/app/ApplicationExitInfo;
 PLcom/android/server/am/AppExitInfoTracker;->persistProcessExitInfo()V
 HSPLcom/android/server/am/AppExitInfoTracker;->pruneAnrTracesIfNecessaryLocked()V
 HPLcom/android/server/am/AppExitInfoTracker;->putToSparse2dArray(Landroid/util/SparseArray;IILjava/lang/Object;Ljava/util/function/Supplier;Ljava/util/function/Consumer;)V
@@ -7222,20 +7551,20 @@
 PLcom/android/server/am/AppExitInfoTracker;->removeByUserIdLocked(I)V
 PLcom/android/server/am/AppExitInfoTracker;->removeFromSparse2dArray(Landroid/util/SparseArray;Ljava/util/function/Predicate;Ljava/util/function/Predicate;Ljava/util/function/Consumer;)V
 PLcom/android/server/am/AppExitInfoTracker;->removePackageLocked(Ljava/lang/String;IZI)V
-HSPLcom/android/server/am/AppExitInfoTracker;->scheduleChildProcDied(III)V
+HSPLcom/android/server/am/AppExitInfoTracker;->scheduleChildProcDied(III)V+]Landroid/os/Handler;Lcom/android/server/am/AppExitInfoTracker$KillHandler;]Landroid/os/Message;Landroid/os/Message;
 PLcom/android/server/am/AppExitInfoTracker;->scheduleLogAnrTrace(II[Ljava/lang/String;Ljava/io/File;JJ)V
 HSPLcom/android/server/am/AppExitInfoTracker;->scheduleLogToStatsdLocked(Landroid/app/ApplicationExitInfo;Z)V+]Landroid/os/Handler;Lcom/android/server/am/AppExitInfoTracker$KillHandler;]Landroid/app/ApplicationExitInfo;Landroid/app/ApplicationExitInfo;]Lcom/android/server/am/AppExitInfoTracker;Lcom/android/server/am/AppExitInfoTracker;
 HPLcom/android/server/am/AppExitInfoTracker;->scheduleNoteAppKill(Lcom/android/server/am/ProcessRecord;IILjava/lang/String;)V+]Landroid/app/ApplicationExitInfo;Landroid/app/ApplicationExitInfo;]Landroid/os/Handler;Lcom/android/server/am/AppExitInfoTracker$KillHandler;]Landroid/os/Message;Landroid/os/Message;]Lcom/android/server/am/AppExitInfoTracker;Lcom/android/server/am/AppExitInfoTracker;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;
 HPLcom/android/server/am/AppExitInfoTracker;->scheduleNoteLmkdProcKilled(II)V
 HSPLcom/android/server/am/AppExitInfoTracker;->scheduleNoteProcessDied(Lcom/android/server/am/ProcessRecord;)V+]Landroid/os/Handler;Lcom/android/server/am/AppExitInfoTracker$KillHandler;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Lcom/android/server/am/AppExitInfoTracker;Lcom/android/server/am/AppExitInfoTracker;]Landroid/os/Message;Landroid/os/Message;
-HSPLcom/android/server/am/AppExitInfoTracker;->schedulePersistProcessExitInfo(Z)V
+HSPLcom/android/server/am/AppExitInfoTracker;->schedulePersistProcessExitInfo(Z)V+]Landroid/os/Handler;Landroid/os/Handler;
 HPLcom/android/server/am/AppExitInfoTracker;->setProcessStateSummary(II[B)V
-HSPLcom/android/server/am/AppExitInfoTracker;->updateExistingExitInfoRecordLocked(Landroid/app/ApplicationExitInfo;Ljava/lang/Integer;Ljava/lang/Integer;)V
+HSPLcom/android/server/am/AppExitInfoTracker;->updateExistingExitInfoRecordLocked(Landroid/app/ApplicationExitInfo;Ljava/lang/Integer;Ljava/lang/Integer;)V+]Landroid/app/ApplicationExitInfo;Landroid/app/ApplicationExitInfo;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/am/AppExitInfoTracker;Lcom/android/server/am/AppExitInfoTracker;
 HSPLcom/android/server/am/AppExitInfoTracker;->updateExitInfoIfNecessaryLocked(IILjava/lang/Integer;Ljava/lang/Integer;)Z+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/am/AppExitInfoTracker;Lcom/android/server/am/AppExitInfoTracker;]Lcom/android/server/am/AppExitInfoTracker$IsolatedUidRecords;Lcom/android/server/am/AppExitInfoTracker$IsolatedUidRecords;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 PLcom/android/server/am/AppFGSTracker$$ExternalSyntheticLambda0;-><init>(Landroid/util/ArrayMap;)V
 PLcom/android/server/am/AppFGSTracker$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLcom/android/server/am/AppFGSTracker$1;-><init>(Lcom/android/server/am/AppFGSTracker;)V
-PLcom/android/server/am/AppFGSTracker$1;->onForegroundActivitiesChanged(IIZ)V
+HSPLcom/android/server/am/AppFGSTracker$1;->onForegroundActivitiesChanged(IIZ)V
 HPLcom/android/server/am/AppFGSTracker$1;->onForegroundServicesChanged(III)V
 HSPLcom/android/server/am/AppFGSTracker$1;->onProcessDied(II)V
 HSPLcom/android/server/am/AppFGSTracker$AppFGSPolicy;-><init>(Lcom/android/server/am/BaseAppStateTracker$Injector;Lcom/android/server/am/AppFGSTracker;)V
@@ -7257,27 +7586,27 @@
 HSPLcom/android/server/am/AppFGSTracker$AppFGSPolicy;->updateBgFgsLongRunningThreshold()V
 HSPLcom/android/server/am/AppFGSTracker$AppFGSPolicy;->updateBgFgsMediaPlaybackThreshold()V
 HSPLcom/android/server/am/AppFGSTracker$MyHandler;-><init>(Lcom/android/server/am/AppFGSTracker;)V
-HPLcom/android/server/am/AppFGSTracker$MyHandler;->handleMessage(Landroid/os/Message;)V+]Ljava/lang/Boolean;Ljava/lang/Boolean;]Lcom/android/internal/os/SomeArgs;Lcom/android/internal/os/SomeArgs;
+HSPLcom/android/server/am/AppFGSTracker$MyHandler;->handleMessage(Landroid/os/Message;)V+]Ljava/lang/Boolean;Ljava/lang/Boolean;]Lcom/android/internal/os/SomeArgs;Lcom/android/internal/os/SomeArgs;
 HSPLcom/android/server/am/AppFGSTracker$NotificationListener;-><init>(Lcom/android/server/am/AppFGSTracker;)V
-HPLcom/android/server/am/AppFGSTracker$NotificationListener;->onNotificationPosted(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;)V+]Landroid/os/Handler;Lcom/android/server/am/AppFGSTracker$MyHandler;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/os/Message;Landroid/os/Message;
+HSPLcom/android/server/am/AppFGSTracker$NotificationListener;->onNotificationPosted(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;)V+]Landroid/os/Handler;Lcom/android/server/am/AppFGSTracker$MyHandler;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/os/Message;Landroid/os/Message;
 HPLcom/android/server/am/AppFGSTracker$NotificationListener;->onNotificationRemoved(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;I)V
 PLcom/android/server/am/AppFGSTracker$PackageDurations;-><clinit>()V
 PLcom/android/server/am/AppFGSTracker$PackageDurations;-><init>(ILjava/lang/String;Lcom/android/server/am/BaseAppStateEvents$MaxTrackingDurationConfig;Lcom/android/server/am/AppFGSTracker;)V
 HPLcom/android/server/am/AppFGSTracker$PackageDurations;-><init>(Lcom/android/server/am/AppFGSTracker$PackageDurations;)V
 HPLcom/android/server/am/AppFGSTracker$PackageDurations;->addEvent(ZJ)V
 PLcom/android/server/am/AppFGSTracker$PackageDurations;->formatEventTypeLabel(I)Ljava/lang/String;
-HPLcom/android/server/am/AppFGSTracker$PackageDurations;->hasForegroundServices()Z
+HPLcom/android/server/am/AppFGSTracker$PackageDurations;->hasForegroundServices()Z+]Lcom/android/server/am/BaseAppStateDurations;Lcom/android/server/am/AppFGSTracker$PackageDurations;
 PLcom/android/server/am/AppFGSTracker$PackageDurations;->isLongRunning()Z
 PLcom/android/server/am/AppFGSTracker$PackageDurations;->notifyListenersOnStateChangeIfNecessary(ZJI)V
 HPLcom/android/server/am/AppFGSTracker$PackageDurations;->setForegroundServiceType(IJ)V
 PLcom/android/server/am/AppFGSTracker$PackageDurations;->setIsLongRunning(Z)V
 PLcom/android/server/am/AppFGSTracker;->$r8$lambda$9K0kZtuhWte1UBBGB46uRSD0WXU(Landroid/util/ArrayMap;Ljava/lang/Integer;Ljava/lang/Integer;)I
-HPLcom/android/server/am/AppFGSTracker;->-$$Nest$fgetmHandler(Lcom/android/server/am/AppFGSTracker;)Lcom/android/server/am/AppFGSTracker$MyHandler;
+HSPLcom/android/server/am/AppFGSTracker;->-$$Nest$fgetmHandler(Lcom/android/server/am/AppFGSTracker;)Lcom/android/server/am/AppFGSTracker$MyHandler;
 PLcom/android/server/am/AppFGSTracker;->-$$Nest$mcheckLongRunningFgs(Lcom/android/server/am/AppFGSTracker;)V
-PLcom/android/server/am/AppFGSTracker;->-$$Nest$mhandleForegroundServiceNotificationUpdated(Lcom/android/server/am/AppFGSTracker;Ljava/lang/String;IIZ)V
+HPLcom/android/server/am/AppFGSTracker;->-$$Nest$mhandleForegroundServiceNotificationUpdated(Lcom/android/server/am/AppFGSTracker;Ljava/lang/String;IIZ)V
 PLcom/android/server/am/AppFGSTracker;->-$$Nest$mhandleForegroundServicesChanged(Lcom/android/server/am/AppFGSTracker;Ljava/lang/String;II)V
 PLcom/android/server/am/AppFGSTracker;->-$$Nest$mhandleForegroundServicesChanged(Lcom/android/server/am/AppFGSTracker;Ljava/lang/String;IIZ)V
-PLcom/android/server/am/AppFGSTracker;->-$$Nest$mhandleNotificationPosted(Lcom/android/server/am/AppFGSTracker;Ljava/lang/String;II)V
+HSPLcom/android/server/am/AppFGSTracker;->-$$Nest$mhandleNotificationPosted(Lcom/android/server/am/AppFGSTracker;Ljava/lang/String;II)V
 PLcom/android/server/am/AppFGSTracker;->-$$Nest$mhandleNotificationRemoved(Lcom/android/server/am/AppFGSTracker;Ljava/lang/String;II)V
 HSPLcom/android/server/am/AppFGSTracker;->-$$Nest$monBgFgsLongRunningThresholdChanged(Lcom/android/server/am/AppFGSTracker;)V
 HSPLcom/android/server/am/AppFGSTracker;->-$$Nest$monBgFgsMonitorEnabled(Lcom/android/server/am/AppFGSTracker;Z)V
@@ -7294,10 +7623,10 @@
 PLcom/android/server/am/AppFGSTracker;->getTotalDurations(IJ)J
 HPLcom/android/server/am/AppFGSTracker;->getTotalDurations(Lcom/android/server/am/AppFGSTracker$PackageDurations;J)J
 PLcom/android/server/am/AppFGSTracker;->getTrackerInfoForStatsd(I)[B
-HPLcom/android/server/am/AppFGSTracker;->handleForegroundServiceNotificationUpdated(Ljava/lang/String;IIZ)V
+HPLcom/android/server/am/AppFGSTracker;->handleForegroundServiceNotificationUpdated(Ljava/lang/String;IIZ)V+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/am/BaseAppStateTracker;Lcom/android/server/am/AppFGSTracker;]Lcom/android/server/am/UidProcessMap;Lcom/android/server/am/UidProcessMap;
 HPLcom/android/server/am/AppFGSTracker;->handleForegroundServicesChanged(Ljava/lang/String;II)V
 HPLcom/android/server/am/AppFGSTracker;->handleForegroundServicesChanged(Ljava/lang/String;IIZ)V
-HPLcom/android/server/am/AppFGSTracker;->handleNotificationPosted(Ljava/lang/String;II)V+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/am/BaseAppStateTracker;Lcom/android/server/am/AppFGSTracker;]Lcom/android/server/am/UidProcessMap;Lcom/android/server/am/UidProcessMap;
+HSPLcom/android/server/am/AppFGSTracker;->handleNotificationPosted(Ljava/lang/String;II)V+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/am/BaseAppStateTracker;Lcom/android/server/am/AppFGSTracker;]Lcom/android/server/am/UidProcessMap;Lcom/android/server/am/UidProcessMap;
 HPLcom/android/server/am/AppFGSTracker;->handleNotificationRemoved(Ljava/lang/String;II)V
 PLcom/android/server/am/AppFGSTracker;->hasForegroundServiceNotifications(I)Z
 PLcom/android/server/am/AppFGSTracker;->hasForegroundServiceNotifications(Ljava/lang/String;I)Z
@@ -7312,7 +7641,7 @@
 HSPLcom/android/server/am/AppFGSTracker;->onSystemReady()V
 HSPLcom/android/server/am/AppFGSTracker;->scheduleDurationCheckLocked(J)V+]Lcom/android/server/am/BaseAppStateTracker$Injector;Lcom/android/server/am/BaseAppStateTracker$Injector;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/AppFGSTracker$PackageDurations;Lcom/android/server/am/AppFGSTracker$PackageDurations;]Landroid/os/Handler;Lcom/android/server/am/AppFGSTracker$MyHandler;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/AppFGSTracker$AppFGSPolicy;Lcom/android/server/am/AppFGSTracker$AppFGSPolicy;]Lcom/android/server/am/AppFGSTracker;Lcom/android/server/am/AppFGSTracker;]Lcom/android/server/am/UidProcessMap;Lcom/android/server/am/UidProcessMap;
 HSPLcom/android/server/am/AppMediaSessionTracker$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/am/AppMediaSessionTracker;)V
-PLcom/android/server/am/AppMediaSessionTracker$$ExternalSyntheticLambda0;->onActiveSessionsChanged(Ljava/util/List;)V
+HSPLcom/android/server/am/AppMediaSessionTracker$$ExternalSyntheticLambda0;->onActiveSessionsChanged(Ljava/util/List;)V
 HSPLcom/android/server/am/AppMediaSessionTracker$AppMediaSessionPolicy$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/am/AppMediaSessionTracker;)V
 HSPLcom/android/server/am/AppMediaSessionTracker$AppMediaSessionPolicy$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/am/AppMediaSessionTracker$AppMediaSessionPolicy;->$r8$lambda$NFCSRJxNnKE8ctx8Z19CwKFofdg(Lcom/android/server/am/AppMediaSessionTracker;)V
@@ -7322,7 +7651,7 @@
 HSPLcom/android/server/am/AppMediaSessionTracker$AppMediaSessionPolicy;->lambda$onMaxTrackingDurationChanged$0(Lcom/android/server/am/AppMediaSessionTracker;)V
 HSPLcom/android/server/am/AppMediaSessionTracker$AppMediaSessionPolicy;->onMaxTrackingDurationChanged(J)V
 HSPLcom/android/server/am/AppMediaSessionTracker$AppMediaSessionPolicy;->onTrackerEnabled(Z)V
-PLcom/android/server/am/AppMediaSessionTracker;->$r8$lambda$S5NmnIAuvvjt74bgXwXoFe71Yjc(Lcom/android/server/am/AppMediaSessionTracker;Ljava/util/List;)V
+HSPLcom/android/server/am/AppMediaSessionTracker;->$r8$lambda$S5NmnIAuvvjt74bgXwXoFe71Yjc(Lcom/android/server/am/AppMediaSessionTracker;Ljava/util/List;)V
 HSPLcom/android/server/am/AppMediaSessionTracker;->-$$Nest$monBgMediaSessionMonitorEnabled(Lcom/android/server/am/AppMediaSessionTracker;Z)V
 HSPLcom/android/server/am/AppMediaSessionTracker;->-$$Nest$mtrimDurations(Lcom/android/server/am/AppMediaSessionTracker;)V
 HSPLcom/android/server/am/AppMediaSessionTracker;-><init>(Landroid/content/Context;Lcom/android/server/am/AppRestrictionController;)V
@@ -7331,7 +7660,7 @@
 PLcom/android/server/am/AppMediaSessionTracker;->createAppStateEvents(Lcom/android/server/am/BaseAppStateDurationsTracker$SimplePackageDurations;)Lcom/android/server/am/BaseAppStateDurationsTracker$SimplePackageDurations;
 PLcom/android/server/am/AppMediaSessionTracker;->createAppStateEvents(Lcom/android/server/am/BaseAppStateEvents;)Lcom/android/server/am/BaseAppStateEvents;
 PLcom/android/server/am/AppMediaSessionTracker;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-HPLcom/android/server/am/AppMediaSessionTracker;->handleMediaSessionChanged(Ljava/util/List;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/BaseAppStateDurationsTracker$SimplePackageDurations;Lcom/android/server/am/BaseAppStateDurationsTracker$SimplePackageDurations;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/AppMediaSessionTracker;Lcom/android/server/am/AppMediaSessionTracker;]Lcom/android/server/am/BaseAppStateTracker;Lcom/android/server/am/AppMediaSessionTracker;]Landroid/media/session/MediaController;Landroid/media/session/MediaController;]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;]Landroid/media/session/MediaSession$Token;Landroid/media/session/MediaSession$Token;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/server/am/UidProcessMap;Lcom/android/server/am/UidProcessMap;
+HSPLcom/android/server/am/AppMediaSessionTracker;->handleMediaSessionChanged(Ljava/util/List;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/BaseAppStateDurationsTracker$SimplePackageDurations;Lcom/android/server/am/BaseAppStateDurationsTracker$SimplePackageDurations;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/AppMediaSessionTracker;Lcom/android/server/am/AppMediaSessionTracker;]Lcom/android/server/am/BaseAppStateTracker;Lcom/android/server/am/AppMediaSessionTracker;]Landroid/media/session/MediaController;Landroid/media/session/MediaController;]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;]Landroid/media/session/MediaSession$Token;Landroid/media/session/MediaSession$Token;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/server/am/UidProcessMap;Lcom/android/server/am/UidProcessMap;
 HSPLcom/android/server/am/AppMediaSessionTracker;->onBgMediaSessionMonitorEnabled(Z)V
 HSPLcom/android/server/am/AppMediaSessionTracker;->trimDurations()V
 PLcom/android/server/am/AppNotRespondingDialog$1;-><init>(Lcom/android/server/am/AppNotRespondingDialog;)V
@@ -7360,10 +7689,10 @@
 HPLcom/android/server/am/AppPermissionTracker$MyHandler;->handleMessage(Landroid/os/Message;)V
 HPLcom/android/server/am/AppPermissionTracker$UidGrantedPermissionState;-><init>(Lcom/android/server/am/AppPermissionTracker;ILjava/lang/String;I)V
 HPLcom/android/server/am/AppPermissionTracker$UidGrantedPermissionState;->equals(Ljava/lang/Object;)Z
-HPLcom/android/server/am/AppPermissionTracker$UidGrantedPermissionState;->hashCode()I
+HPLcom/android/server/am/AppPermissionTracker$UidGrantedPermissionState;->hashCode()I+]Ljava/lang/String;Ljava/lang/String;
 HPLcom/android/server/am/AppPermissionTracker$UidGrantedPermissionState;->isGranted()Z
 HPLcom/android/server/am/AppPermissionTracker$UidGrantedPermissionState;->updateAppOps()V+]Lcom/android/server/am/BaseAppStateTracker$Injector;Lcom/android/server/am/BaseAppStateTracker$Injector;]Lcom/android/internal/app/IAppOpsService;Lcom/android/server/appop/AppOpsService;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
-HPLcom/android/server/am/AppPermissionTracker$UidGrantedPermissionState;->updatePermissionState()V
+HPLcom/android/server/am/AppPermissionTracker$UidGrantedPermissionState;->updatePermissionState()V+]Lcom/android/server/am/BaseAppStateTracker$Injector;Lcom/android/server/am/BaseAppStateTracker$Injector;]Lcom/android/server/pm/permission/PermissionManagerServiceInternal;Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;
 HPLcom/android/server/am/AppPermissionTracker;->-$$Nest$fgetmHandler(Lcom/android/server/am/AppPermissionTracker;)Lcom/android/server/am/AppPermissionTracker$MyHandler;
 PLcom/android/server/am/AppPermissionTracker;->-$$Nest$mhandleAppOpsInit(Lcom/android/server/am/AppPermissionTracker;)V
 HPLcom/android/server/am/AppPermissionTracker;->-$$Nest$mhandleOpChanged(Lcom/android/server/am/AppPermissionTracker;IILjava/lang/String;)V
@@ -7383,16 +7712,16 @@
 PLcom/android/server/am/AppPermissionTracker;->onPermissionsChanged(I)V
 PLcom/android/server/am/AppPermissionTracker;->startWatchingMode([Ljava/lang/Integer;)V
 PLcom/android/server/am/AppPermissionTracker;->stopWatchingMode()V
-PLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/am/AppProfiler;ZZJ)V
+HPLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/am/AppProfiler;ZZJ)V
 HPLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/am/AppProfiler;Lcom/android/server/am/ProcessRecord;Ljava/util/ArrayList;J)V
 HSPLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
-PLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda2;-><init>()V
-HPLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda2;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda2;-><init>()V
+HSPLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda2;->test(Ljava/lang/Object;)Z
 PLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda3;-><init>()V
 HPLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda3;->needed(Lcom/android/internal/os/ProcessCpuTracker$Stats;)Z
-PLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda4;-><init>(Ljava/util/function/Predicate;)V
-HPLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda4;->needed(Lcom/android/internal/os/ProcessCpuTracker$Stats;)Z
+HSPLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda4;-><init>(Ljava/util/function/Predicate;)V
+HSPLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda4;->needed(Lcom/android/internal/os/ProcessCpuTracker$Stats;)Z
 HPLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/am/ProcessRecord;JJJIJLcom/android/server/am/ProcessProfileRecord;)V
 HPLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/am/AppProfiler;ZI[I[III)V
@@ -7401,9 +7730,9 @@
 HSPLcom/android/server/am/AppProfiler$$ExternalSyntheticLambda7;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/am/AppProfiler$1;-><init>(Lcom/android/server/am/AppProfiler;)V
 PLcom/android/server/am/AppProfiler$1;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
-PLcom/android/server/am/AppProfiler$2;-><init>(Lcom/android/server/am/AppProfiler;)V
-HPLcom/android/server/am/AppProfiler$2;->compare(Lcom/android/server/am/ProcessMemInfo;Lcom/android/server/am/ProcessMemInfo;)I
-HPLcom/android/server/am/AppProfiler$2;->compare(Ljava/lang/Object;Ljava/lang/Object;)I+]Lcom/android/server/am/AppProfiler$2;Lcom/android/server/am/AppProfiler$2;
+HSPLcom/android/server/am/AppProfiler$2;-><init>(Lcom/android/server/am/AppProfiler;)V
+HSPLcom/android/server/am/AppProfiler$2;->compare(Lcom/android/server/am/ProcessMemInfo;Lcom/android/server/am/ProcessMemInfo;)I
+HSPLcom/android/server/am/AppProfiler$2;->compare(Ljava/lang/Object;Ljava/lang/Object;)I+]Lcom/android/server/am/AppProfiler$2;Lcom/android/server/am/AppProfiler$2;
 HSPLcom/android/server/am/AppProfiler$BgHandler;-><init>(Lcom/android/server/am/AppProfiler;Landroid/os/Looper;)V
 HPLcom/android/server/am/AppProfiler$BgHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/am/AppProfiler$CpuBinder$1;-><init>(Lcom/android/server/am/AppProfiler$CpuBinder;)V
@@ -7416,71 +7745,71 @@
 HSPLcom/android/server/am/AppProfiler$ProfileData;-><init>(Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler$ProfileData-IA;)V
 HSPLcom/android/server/am/AppProfiler$ProfileData;->getProfileApp()Ljava/lang/String;
 HSPLcom/android/server/am/AppProfiler$ProfileData;->getProfileProc()Lcom/android/server/am/ProcessRecord;
-PLcom/android/server/am/AppProfiler$ProfileData;->getProfilerInfo()Landroid/app/ProfilerInfo;
+HSPLcom/android/server/am/AppProfiler$ProfileData;->getProfilerInfo()Landroid/app/ProfilerInfo;
 PLcom/android/server/am/AppProfiler$RecordPssRunnable;-><init>(Lcom/android/server/am/AppProfiler;Lcom/android/server/am/ProcessProfileRecord;Landroid/net/Uri;Landroid/content/ContentResolver;)V
 PLcom/android/server/am/AppProfiler$RecordPssRunnable;->run()V
 HSPLcom/android/server/am/AppProfiler;->$r8$lambda$-KoZoWW1AVtk-e_1f_VSGvLE7ac(Lcom/android/server/am/AppProfiler;Lcom/android/server/am/ProcessRecord;Ljava/util/ArrayList;JLcom/android/server/am/ProcessRecord;)V
 HPLcom/android/server/am/AppProfiler;->$r8$lambda$8A3VEf1Ljk2peGJ0VdBb6czFUUg(Lcom/android/server/am/AppProfiler;ZZJLcom/android/server/am/ProcessRecord;)V
-HPLcom/android/server/am/AppProfiler;->$r8$lambda$Q89oZ-bfXOdTdpRzSs3iityL4mw(Lcom/android/internal/os/ProcessCpuTracker$Stats;)Z
-PLcom/android/server/am/AppProfiler;->$r8$lambda$V1RhkcWpzTaE-TLhpopxhenzMOM(Lcom/android/server/am/ProcessRecord;JJJIJLcom/android/server/am/ProcessProfileRecord;Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;)V
+HSPLcom/android/server/am/AppProfiler;->$r8$lambda$Q89oZ-bfXOdTdpRzSs3iityL4mw(Lcom/android/internal/os/ProcessCpuTracker$Stats;)Z
+HPLcom/android/server/am/AppProfiler;->$r8$lambda$V1RhkcWpzTaE-TLhpopxhenzMOM(Lcom/android/server/am/ProcessRecord;JJJIJLcom/android/server/am/ProcessProfileRecord;Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;)V
 HPLcom/android/server/am/AppProfiler;->$r8$lambda$ZMxvBCdmKztKY09XkWvwH3CpFsk(Lcom/android/internal/os/ProcessCpuTracker$Stats;)Z
 HSPLcom/android/server/am/AppProfiler;->$r8$lambda$bYVlbQYS7LMv9Nraxx9n7TNsbdQ(Lcom/android/server/am/AppProfiler;ZILcom/android/server/am/ProcessRecord;)V
 HPLcom/android/server/am/AppProfiler;->$r8$lambda$vhmnkAngkDzqoWZx5VHwgoc0NdQ(Lcom/android/server/am/AppProfiler;ZI[I[IIILcom/android/server/am/ProcessRecord;)V
-HPLcom/android/server/am/AppProfiler;->$r8$lambda$yGYF27QwdpoQJWSdBkqjKGIRCOA(Ljava/util/function/Predicate;Lcom/android/internal/os/ProcessCpuTracker$Stats;)Z
+HSPLcom/android/server/am/AppProfiler;->$r8$lambda$yGYF27QwdpoQJWSdBkqjKGIRCOA(Ljava/util/function/Predicate;Lcom/android/internal/os/ProcessCpuTracker$Stats;)Z
 HSPLcom/android/server/am/AppProfiler;->-$$Nest$fgetmLastCpuTime(Lcom/android/server/am/AppProfiler;)Ljava/util/concurrent/atomic/AtomicLong;
 HSPLcom/android/server/am/AppProfiler;->-$$Nest$fgetmLastWriteTime(Lcom/android/server/am/AppProfiler;)J
 HSPLcom/android/server/am/AppProfiler;->-$$Nest$fgetmProcessCpuInitLatch(Lcom/android/server/am/AppProfiler;)Ljava/util/concurrent/CountDownLatch;
 HSPLcom/android/server/am/AppProfiler;->-$$Nest$fgetmProcessCpuMutexFree(Lcom/android/server/am/AppProfiler;)Ljava/util/concurrent/atomic/AtomicBoolean;
 HSPLcom/android/server/am/AppProfiler;->-$$Nest$fgetmProcessCpuTracker(Lcom/android/server/am/AppProfiler;)Lcom/android/internal/os/ProcessCpuTracker;
-PLcom/android/server/am/AppProfiler;->-$$Nest$fgetmService(Lcom/android/server/am/AppProfiler;)Lcom/android/server/am/ActivityManagerService;
+HPLcom/android/server/am/AppProfiler;->-$$Nest$fgetmService(Lcom/android/server/am/AppProfiler;)Lcom/android/server/am/ActivityManagerService;
 HPLcom/android/server/am/AppProfiler;->-$$Nest$mcollectPssInBackground(Lcom/android/server/am/AppProfiler;)V
 HPLcom/android/server/am/AppProfiler;->-$$Nest$mhandleMemoryPressureChangedLocked(Lcom/android/server/am/AppProfiler;II)V
 HSPLcom/android/server/am/AppProfiler;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/os/Looper;Lcom/android/server/am/LowMemDetector;)V
-HPLcom/android/server/am/AppProfiler;->addProcessToGcListLPf(Lcom/android/server/am/ProcessRecord;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
+HSPLcom/android/server/am/AppProfiler;->addProcessToGcListLPf(Lcom/android/server/am/ProcessRecord;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
 HPLcom/android/server/am/AppProfiler;->collectPssInBackground()V+]Lcom/android/internal/os/ProcessCpuTracker;Lcom/android/internal/os/ProcessCpuTracker;]Lcom/android/server/am/ActivityManagerService$PidMap;Lcom/android/server/am/ActivityManagerService$PidMap;]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Lcom/android/internal/util/MemInfoReader;Lcom/android/internal/util/MemInfoReader;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
-HSPLcom/android/server/am/AppProfiler;->doLowMemReportIfNeededLocked(Lcom/android/server/am/ProcessRecord;)V
+HSPLcom/android/server/am/AppProfiler;->doLowMemReportIfNeededLocked(Lcom/android/server/am/ProcessRecord;)V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;
 PLcom/android/server/am/AppProfiler;->dumpHeapFinished(Ljava/lang/String;I)V
 PLcom/android/server/am/AppProfiler;->dumpLastMemoryLevelLocked(Ljava/io/PrintWriter;)V
-PLcom/android/server/am/AppProfiler;->dumpMemWatchProcessesLPf(Ljava/io/PrintWriter;Z)Z
+HSPLcom/android/server/am/AppProfiler;->dumpMemWatchProcessesLPf(Ljava/io/PrintWriter;Z)Z
 PLcom/android/server/am/AppProfiler;->dumpMemoryLevelsLocked(Ljava/io/PrintWriter;)V
-HPLcom/android/server/am/AppProfiler;->dumpProcessesToGc(Ljava/io/PrintWriter;ZLjava/lang/String;)Z
-PLcom/android/server/am/AppProfiler;->dumpProfileDataLocked(Ljava/io/PrintWriter;Ljava/lang/String;Z)Z
+HSPLcom/android/server/am/AppProfiler;->dumpProcessesToGc(Ljava/io/PrintWriter;ZLjava/lang/String;)Z
+HSPLcom/android/server/am/AppProfiler;->dumpProfileDataLocked(Ljava/io/PrintWriter;Ljava/lang/String;Z)Z
 PLcom/android/server/am/AppProfiler;->forAllCpuStats(Ljava/util/function/Consumer;)V
-PLcom/android/server/am/AppProfiler;->getCpuStats(Ljava/util/function/Predicate;)Ljava/util/List;
-HPLcom/android/server/am/AppProfiler;->getCpuTimeForPid(I)J
-HPLcom/android/server/am/AppProfiler;->getLastMemoryLevelLocked()I
+HSPLcom/android/server/am/AppProfiler;->getCpuStats(Ljava/util/function/Predicate;)Ljava/util/List;
+HSPLcom/android/server/am/AppProfiler;->getCpuTimeForPid(I)J
+HSPLcom/android/server/am/AppProfiler;->getLastMemoryLevelLocked()I
 PLcom/android/server/am/AppProfiler;->getLowRamTimeSinceIdleLPr(J)J
-PLcom/android/server/am/AppProfiler;->getTestPssMode()Z
+HSPLcom/android/server/am/AppProfiler;->getTestPssMode()Z
 HPLcom/android/server/am/AppProfiler;->handleMemoryPressureChangedLocked(II)V
 PLcom/android/server/am/AppProfiler;->handlePostDumpHeapNotification()V
-HPLcom/android/server/am/AppProfiler;->isLastMemoryLevelNormal()Z
+HSPLcom/android/server/am/AppProfiler;->isLastMemoryLevelNormal()Z
 HPLcom/android/server/am/AppProfiler;->lambda$collectPssInBackground$0(Lcom/android/internal/os/ProcessCpuTracker$Stats;)Z
 HSPLcom/android/server/am/AppProfiler;->lambda$doLowMemReportIfNeededLocked$5(Lcom/android/server/am/ProcessRecord;Ljava/util/ArrayList;JLcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
-HPLcom/android/server/am/AppProfiler;->lambda$getCpuStats$7(Ljava/util/function/Predicate;Lcom/android/internal/os/ProcessCpuTracker$Stats;)Z
-HPLcom/android/server/am/AppProfiler;->lambda$recordPssSampleLPf$1(Lcom/android/server/am/ProcessRecord;JJJIJLcom/android/server/am/ProcessProfileRecord;Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;)V
-HPLcom/android/server/am/AppProfiler;->lambda$reportMemUsage$6(Lcom/android/internal/os/ProcessCpuTracker$Stats;)Z
-HPLcom/android/server/am/AppProfiler;->lambda$requestPssAllProcsLPr$2(ZZJLcom/android/server/am/ProcessRecord;)V
+HSPLcom/android/server/am/AppProfiler;->lambda$getCpuStats$7(Ljava/util/function/Predicate;Lcom/android/internal/os/ProcessCpuTracker$Stats;)Z
+HPLcom/android/server/am/AppProfiler;->lambda$recordPssSampleLPf$1(Lcom/android/server/am/ProcessRecord;JJJIJLcom/android/server/am/ProcessProfileRecord;Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;)V+]Lcom/android/internal/app/procstats/ProcessState;Lcom/android/internal/app/procstats/ProcessState;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
+HSPLcom/android/server/am/AppProfiler;->lambda$reportMemUsage$6(Lcom/android/internal/os/ProcessCpuTracker$Stats;)Z
+HPLcom/android/server/am/AppProfiler;->lambda$requestPssAllProcsLPr$2(ZZJLcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
 HPLcom/android/server/am/AppProfiler;->lambda$updateLowMemStateLSP$3(ZI[I[IIILcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
 HSPLcom/android/server/am/AppProfiler;->lambda$updateLowMemStateLSP$4(ZILcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
 PLcom/android/server/am/AppProfiler;->makeHeapDumpUri(Ljava/lang/String;)Landroid/net/Uri;
-PLcom/android/server/am/AppProfiler;->onActivityLaunched()V
+HSPLcom/android/server/am/AppProfiler;->onActivityLaunched()V
 HSPLcom/android/server/am/AppProfiler;->onActivityManagerInternalAdded()V
 HSPLcom/android/server/am/AppProfiler;->onAppDiedLocked(Lcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/AppProfiler$ProfileData;Lcom/android/server/am/AppProfiler$ProfileData;
 HSPLcom/android/server/am/AppProfiler;->onCleanupApplicationRecordLocked(Lcom/android/server/am/ProcessRecord;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
 HPLcom/android/server/am/AppProfiler;->performAppGcLPf(Lcom/android/server/am/ProcessRecord;)V
-PLcom/android/server/am/AppProfiler;->performAppGcsIfAppropriateLocked()V
+HPLcom/android/server/am/AppProfiler;->performAppGcsIfAppropriateLocked()V
 HPLcom/android/server/am/AppProfiler;->performAppGcsLPf()V
 PLcom/android/server/am/AppProfiler;->printCurrentCpuState(Ljava/lang/StringBuilder;J)V
 HPLcom/android/server/am/AppProfiler;->recordPssSampleLPf(Lcom/android/server/am/ProcessProfileRecord;IJJJJIJJ)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/PackageList;Lcom/android/server/am/PackageList;]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
-HPLcom/android/server/am/AppProfiler;->reportMemUsage(Ljava/util/ArrayList;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/internal/util/MemInfoReader;Lcom/android/internal/util/MemInfoReader;]Lcom/android/server/am/ActiveServices$ServiceDumper;Lcom/android/server/am/ActiveServices$ServiceDumper;]Ljava/io/PrintWriter;Lcom/android/internal/util/FastPrintWriter;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Ljava/io/StringWriter;Ljava/io/StringWriter;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/am/AppProfiler;->reportMemUsage(Ljava/util/ArrayList;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/internal/util/MemInfoReader;Lcom/android/internal/util/MemInfoReader;]Lcom/android/server/am/ActiveServices$ServiceDumper;Lcom/android/server/am/ActiveServices$ServiceDumper;]Ljava/io/PrintWriter;Lcom/android/internal/util/FastPrintWriter;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Ljava/io/StringWriter;Ljava/io/StringWriter;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/am/AppProfiler;->requestPssAllProcsLPr(JZZ)V
-HPLcom/android/server/am/AppProfiler;->requestPssLPf(Lcom/android/server/am/ProcessProfileRecord;I)Z+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;]Landroid/os/Handler;Lcom/android/server/am/AppProfiler$BgHandler;
+HPLcom/android/server/am/AppProfiler;->requestPssLPf(Lcom/android/server/am/ProcessProfileRecord;I)Z+]Landroid/os/Handler;Lcom/android/server/am/AppProfiler$BgHandler;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
 HSPLcom/android/server/am/AppProfiler;->retrieveSettings()V
 HSPLcom/android/server/am/AppProfiler;->scheduleAppGcsLPf()V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
 HSPLcom/android/server/am/AppProfiler;->setAllowLowerMemLevelLocked(Z)V
 HSPLcom/android/server/am/AppProfiler;->setCpuInfoService()V
 HPLcom/android/server/am/AppProfiler;->setDumpHeapDebugLimit(Ljava/lang/String;IJLjava/lang/String;)V
-HSPLcom/android/server/am/AppProfiler;->setupProfilerInfoLocked(Landroid/app/IApplicationThread;Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ActiveInstrumentation;)Landroid/app/ProfilerInfo;+]Lcom/android/server/am/AppProfiler$ProfileData;Lcom/android/server/am/AppProfiler$ProfileData;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/am/AppProfiler;->setupProfilerInfoLocked(Landroid/app/IApplicationThread;Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ActiveInstrumentation;)Landroid/app/ProfilerInfo;+]Lcom/android/server/am/AppProfiler$ProfileData;Lcom/android/server/am/AppProfiler$ProfileData;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;
 PLcom/android/server/am/AppProfiler;->startHeapDumpLPf(Lcom/android/server/am/ProcessProfileRecord;Z)V
 HSPLcom/android/server/am/AppProfiler;->trimMemoryUiHiddenIfNecessaryLSP(Lcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
 HSPLcom/android/server/am/AppProfiler;->updateCpuStats()V+]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Ljava/lang/Object;Lcom/android/server/am/AppProfiler$ProcessCpuThread;]Ljava/util/concurrent/atomic/AtomicLong;Ljava/util/concurrent/atomic/AtomicLong;
@@ -7509,11 +7838,11 @@
 HSPLcom/android/server/am/AppRestrictionController$3;-><init>(Lcom/android/server/am/AppRestrictionController;)V
 PLcom/android/server/am/AppRestrictionController$3;->updateBackgroundRestrictedForUidPackage(ILjava/lang/String;Z)V
 HSPLcom/android/server/am/AppRestrictionController$4;-><init>(Lcom/android/server/am/AppRestrictionController;)V
-HPLcom/android/server/am/AppRestrictionController$4;->onAppIdleStateChanged(Ljava/lang/String;IZII)V
+HSPLcom/android/server/am/AppRestrictionController$4;->onAppIdleStateChanged(Ljava/lang/String;IZII)V
 PLcom/android/server/am/AppRestrictionController$4;->onUserInteractionStarted(Ljava/lang/String;I)V
 HSPLcom/android/server/am/AppRestrictionController$5;-><init>(Lcom/android/server/am/AppRestrictionController;)V
-HSPLcom/android/server/am/AppRestrictionController$5;->onUidActive(I)V
-HSPLcom/android/server/am/AppRestrictionController$5;->onUidGone(IZ)V
+HSPLcom/android/server/am/AppRestrictionController$5;->onUidActive(I)V+]Landroid/os/Handler;Lcom/android/server/am/AppRestrictionController$BgHandler;]Landroid/os/Message;Landroid/os/Message;
+HSPLcom/android/server/am/AppRestrictionController$5;->onUidGone(IZ)V+]Landroid/os/Handler;Lcom/android/server/am/AppRestrictionController$BgHandler;]Landroid/os/Message;Landroid/os/Message;
 HSPLcom/android/server/am/AppRestrictionController$5;->onUidIdle(IZ)V
 HSPLcom/android/server/am/AppRestrictionController$5;->onUidStateChanged(IIJI)V+]Landroid/os/Handler;Lcom/android/server/am/AppRestrictionController$BgHandler;]Landroid/os/Message;Landroid/os/Message;
 HSPLcom/android/server/am/AppRestrictionController$BgHandler;-><init>(Landroid/os/Looper;Lcom/android/server/am/AppRestrictionController$Injector;)V
@@ -7528,6 +7857,7 @@
 HSPLcom/android/server/am/AppRestrictionController$ConstantsObserver;->updateBgAutoRestrictedBucketChanged()V
 HSPLcom/android/server/am/AppRestrictionController$ConstantsObserver;->updateBgLongFgsNotificationMinimalInterval()V
 HSPLcom/android/server/am/AppRestrictionController$ConstantsObserver;->updateBgPromptAbusiveAppToBgRestricted()V
+HSPLcom/android/server/am/AppRestrictionController$ConstantsObserver;->updateBgPromptFgsOnLongRunning()V
 HSPLcom/android/server/am/AppRestrictionController$ConstantsObserver;->updateBgPromptFgsWithNotiOnLongRunning()V
 HSPLcom/android/server/am/AppRestrictionController$ConstantsObserver;->updateBgPromptFgsWithNotiToBgRestricted()V
 HSPLcom/android/server/am/AppRestrictionController$ConstantsObserver;->updateBgRestrictionExemptedPackages()V
@@ -7599,7 +7929,7 @@
 PLcom/android/server/am/AppRestrictionController$RestrictionSettings;->$r8$lambda$gDxxbRfkcs4k_MOGW2Iy-aH9_lI(Ljava/util/ArrayList;Lcom/android/server/am/AppRestrictionController$RestrictionSettings$PkgSettings;)V
 HSPLcom/android/server/am/AppRestrictionController$RestrictionSettings;-><init>(Lcom/android/server/am/AppRestrictionController;)V
 HPLcom/android/server/am/AppRestrictionController$RestrictionSettings;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-HSPLcom/android/server/am/AppRestrictionController$RestrictionSettings;->forEachPackageInUidLocked(ILcom/android/internal/util/function/TriConsumer;)V
+HSPLcom/android/server/am/AppRestrictionController$RestrictionSettings;->forEachPackageInUidLocked(ILcom/android/internal/util/function/TriConsumer;)V+]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/am/AppRestrictionController$RestrictionSettings$PkgSettings;Lcom/android/server/am/AppRestrictionController$RestrictionSettings$PkgSettings;]Lcom/android/internal/util/function/TriConsumer;Lcom/android/server/am/AppRestrictionController$$ExternalSyntheticLambda2;
 HSPLcom/android/server/am/AppRestrictionController$RestrictionSettings;->getReason(Ljava/lang/String;I)I
 HSPLcom/android/server/am/AppRestrictionController$RestrictionSettings;->getRestrictionLevel(I)I+]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/am/AppRestrictionController$RestrictionSettings$PkgSettings;Lcom/android/server/am/AppRestrictionController$RestrictionSettings$PkgSettings;
 HSPLcom/android/server/am/AppRestrictionController$RestrictionSettings;->getRestrictionLevel(ILjava/lang/String;)I+]Lcom/android/server/am/AppRestrictionController$RestrictionSettings$PkgSettings;Lcom/android/server/am/AppRestrictionController$RestrictionSettings$PkgSettings;]Lcom/android/server/am/AppRestrictionController$RestrictionSettings;Lcom/android/server/am/AppRestrictionController$RestrictionSettings;
@@ -7618,10 +7948,10 @@
 PLcom/android/server/am/AppRestrictionController$RestrictionSettings;->removeUser(I)V
 HSPLcom/android/server/am/AppRestrictionController$RestrictionSettings;->scheduleLoadFromXml()V
 HSPLcom/android/server/am/AppRestrictionController$RestrictionSettings;->schedulePersistToXml(I)V
-HSPLcom/android/server/am/AppRestrictionController$RestrictionSettings;->toXmlByteArray(I)[B
+HSPLcom/android/server/am/AppRestrictionController$RestrictionSettings;->toXmlByteArray(I)[B+]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/am/AppRestrictionController$RestrictionSettings$PkgSettings;Lcom/android/server/am/AppRestrictionController$RestrictionSettings$PkgSettings;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Ljava/io/ByteArrayOutputStream;Ljava/io/ByteArrayOutputStream;
 HSPLcom/android/server/am/AppRestrictionController$RestrictionSettings;->update(Ljava/lang/String;IIII)I
 HSPLcom/android/server/am/AppRestrictionController$TrackerInfo;-><init>(Lcom/android/server/am/AppRestrictionController;)V
-PLcom/android/server/am/AppRestrictionController$TrackerInfo;-><init>(Lcom/android/server/am/AppRestrictionController;I[B)V
+HPLcom/android/server/am/AppRestrictionController$TrackerInfo;-><init>(Lcom/android/server/am/AppRestrictionController;I[B)V
 PLcom/android/server/am/AppRestrictionController;->$r8$lambda$FCQknS-rln1NbsfrSCwNo3WyQeM(Lcom/android/server/am/AppRestrictionController;Lcom/android/server/usage/AppStandbyInternal;Ljava/lang/String;IIIIILcom/android/server/am/AppRestrictionController$TrackerInfo;)V
 HSPLcom/android/server/am/AppRestrictionController;->$r8$lambda$JBVI1E3t3qyr4dgfGmeoosSYr5k(ILjava/lang/String;ILandroid/app/ActivityManagerInternal$AppBackgroundRestrictionListener;)V
 HSPLcom/android/server/am/AppRestrictionController;->$r8$lambda$l6R_w00NarVifoQOJzN2AbO6woc(Lcom/android/server/am/AppRestrictionController;ILcom/android/server/usage/AppStandbyInternal;ILjava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)V
@@ -7640,7 +7970,7 @@
 HSPLcom/android/server/am/AppRestrictionController;->-$$Nest$mapplyRestrictionLevel(Lcom/android/server/am/AppRestrictionController;Ljava/lang/String;IILcom/android/server/am/AppRestrictionController$TrackerInfo;IZII)V
 PLcom/android/server/am/AppRestrictionController;->-$$Nest$mclearCarrierPrivilegedApps(Lcom/android/server/am/AppRestrictionController;)V
 HSPLcom/android/server/am/AppRestrictionController;->-$$Nest$mdispatchAppRestrictionLevelChanges(Lcom/android/server/am/AppRestrictionController;ILjava/lang/String;I)V
-PLcom/android/server/am/AppRestrictionController;->-$$Nest$mhandleAppStandbyBucketChanged(Lcom/android/server/am/AppRestrictionController;ILjava/lang/String;I)V
+HSPLcom/android/server/am/AppRestrictionController;->-$$Nest$mhandleAppStandbyBucketChanged(Lcom/android/server/am/AppRestrictionController;ILjava/lang/String;I)V
 PLcom/android/server/am/AppRestrictionController;->-$$Nest$mhandleBackgroundRestrictionChanged(Lcom/android/server/am/AppRestrictionController;ILjava/lang/String;Z)V
 PLcom/android/server/am/AppRestrictionController;->-$$Nest$monLockedBootCompleted(Lcom/android/server/am/AppRestrictionController;)V
 PLcom/android/server/am/AppRestrictionController;->-$$Nest$monPackageRemoved(Lcom/android/server/am/AppRestrictionController;Ljava/lang/String;I)V
@@ -7664,14 +7994,14 @@
 PLcom/android/server/am/AppRestrictionController;->fetchCarrierPrivilegedAppsCPL()V
 HSPLcom/android/server/am/AppRestrictionController;->forEachTracker(Ljava/util/function/Consumer;)V
 HSPLcom/android/server/am/AppRestrictionController;->getBackgroundHandler()Landroid/os/Handler;
-HSPLcom/android/server/am/AppRestrictionController;->getBackgroundRestrictionExemptionReason(I)I+]Lcom/android/server/am/AppRestrictionController$Injector;Lcom/android/server/am/AppRestrictionController$Injector;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Ljava/util/Set;Ljava/util/Collections$EmptySet;]Lcom/android/server/am/AppRestrictionController;Lcom/android/server/am/AppRestrictionController;]Lcom/android/server/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;
+HSPLcom/android/server/am/AppRestrictionController;->getBackgroundRestrictionExemptionReason(I)I+]Lcom/android/server/am/AppRestrictionController$Injector;Lcom/android/server/am/AppRestrictionController$Injector;]Lcom/android/server/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Ljava/util/Set;Ljava/util/Collections$EmptySet;]Lcom/android/server/am/AppRestrictionController;Lcom/android/server/am/AppRestrictionController;
 PLcom/android/server/am/AppRestrictionController;->getCompositeMediaPlaybackDurations(Ljava/lang/String;IJJ)J
 HSPLcom/android/server/am/AppRestrictionController;->getExemptionReasonStatsd(II)I
 PLcom/android/server/am/AppRestrictionController;->getForegroundServiceTotalDurationsSince(Ljava/lang/String;IJJI)J
 HSPLcom/android/server/am/AppRestrictionController;->getLock()Ljava/lang/Object;
 PLcom/android/server/am/AppRestrictionController;->getMediaSessionTotalDurationsSince(Ljava/lang/String;IJJ)J
 HSPLcom/android/server/am/AppRestrictionController;->getOptimizationLevelStatsd(I)I
-PLcom/android/server/am/AppRestrictionController;->getPackageName(I)Ljava/lang/String;
+HPLcom/android/server/am/AppRestrictionController;->getPackageName(I)Ljava/lang/String;
 HPLcom/android/server/am/AppRestrictionController;->getRestrictionLevel(I)I+]Lcom/android/server/am/AppRestrictionController$RestrictionSettings;Lcom/android/server/am/AppRestrictionController$RestrictionSettings;
 HSPLcom/android/server/am/AppRestrictionController;->getRestrictionLevel(ILjava/lang/String;)I
 HSPLcom/android/server/am/AppRestrictionController;->getRestrictionLevel(Ljava/lang/String;I)I
@@ -7681,23 +8011,23 @@
 HSPLcom/android/server/am/AppRestrictionController;->getTrackerTypeStatsd(I)I
 HPLcom/android/server/am/AppRestrictionController;->getUidBatteryExemptedUsageSince(IJJI)Lcom/android/server/am/AppBatteryTracker$ImmutableBatteryUsage;
 HPLcom/android/server/am/AppRestrictionController;->getUidBatteryUsage(I)Lcom/android/server/am/AppBatteryTracker$ImmutableBatteryUsage;
-HPLcom/android/server/am/AppRestrictionController;->handleAppStandbyBucketChanged(ILjava/lang/String;I)V
+HSPLcom/android/server/am/AppRestrictionController;->handleAppStandbyBucketChanged(ILjava/lang/String;I)V
 PLcom/android/server/am/AppRestrictionController;->handleBackgroundRestrictionChanged(ILjava/lang/String;Z)V
 PLcom/android/server/am/AppRestrictionController;->handleCancelRequestBgRestricted(Ljava/lang/String;I)V
 PLcom/android/server/am/AppRestrictionController;->handleRequestBgRestricted(Ljava/lang/String;I)V
-HSPLcom/android/server/am/AppRestrictionController;->handleUidActive(I)V
+HSPLcom/android/server/am/AppRestrictionController;->handleUidActive(I)V+]Lcom/android/server/am/AppRestrictionController$Injector;Lcom/android/server/am/AppRestrictionController$Injector;]Lcom/android/server/am/AppRestrictionController$RestrictionSettings;Lcom/android/server/am/AppRestrictionController$RestrictionSettings;
 HSPLcom/android/server/am/AppRestrictionController;->handleUidGone(I)V+]Lcom/android/server/am/BaseAppStateTracker;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/am/AppRestrictionController;->handleUidInactive(IZ)V+]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/lang/Runnable;Lcom/android/server/am/AppRestrictionController$$ExternalSyntheticLambda3;
 HSPLcom/android/server/am/AppRestrictionController;->handleUidProcStateChanged(II)V+]Lcom/android/server/am/BaseAppStateTracker;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
 PLcom/android/server/am/AppRestrictionController;->hasForegroundServiceNotifications(Ljava/lang/String;I)Z
-HSPLcom/android/server/am/AppRestrictionController;->hasForegroundServices(Ljava/lang/String;I)Z
+HSPLcom/android/server/am/AppRestrictionController;->hasForegroundServices(Ljava/lang/String;I)Z+]Lcom/android/server/am/AppRestrictionController$Injector;Lcom/android/server/am/AppRestrictionController$Injector;]Lcom/android/server/am/AppFGSTracker;Lcom/android/server/am/AppFGSTracker;
 HSPLcom/android/server/am/AppRestrictionController;->initBgRestrictionExemptioFromSysConfig()V
 HSPLcom/android/server/am/AppRestrictionController;->initRestrictionStates()V
 HSPLcom/android/server/am/AppRestrictionController;->initRolesInInterest()V
 HSPLcom/android/server/am/AppRestrictionController;->initSystemModuleNames()V
 PLcom/android/server/am/AppRestrictionController;->isAutoRestrictAbusiveAppEnabled()Z
 HSPLcom/android/server/am/AppRestrictionController;->isBgAutoRestrictedBucketFeatureFlagEnabled()Z
-HPLcom/android/server/am/AppRestrictionController;->isCarrierApp(Ljava/lang/String;)Z+]Ljava/util/List;Ljava/util/ArrayList;,Ljava/util/Collections$EmptyList;]Lcom/android/server/am/AppRestrictionController;Lcom/android/server/am/AppRestrictionController;
+HPLcom/android/server/am/AppRestrictionController;->isCarrierApp(Ljava/lang/String;)Z+]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Lcom/android/server/am/AppRestrictionController;Lcom/android/server/am/AppRestrictionController;
 HPLcom/android/server/am/AppRestrictionController;->isExemptedFromSysConfig(Ljava/lang/String;)Z
 HSPLcom/android/server/am/AppRestrictionController;->isOnDeviceIdleAllowlist(I)Z
 HSPLcom/android/server/am/AppRestrictionController;->isOnSystemDeviceIdleAllowlist(I)Z+]Landroid/util/ArraySet;Landroid/util/ArraySet;
@@ -7728,7 +8058,7 @@
 HSPLcom/android/server/am/AppRestrictionController;->standbyBucketToRestrictionLevel(I)I
 PLcom/android/server/am/AppWaitingForDebuggerDialog$1;-><init>(Lcom/android/server/am/AppWaitingForDebuggerDialog;)V
 PLcom/android/server/am/AppWaitingForDebuggerDialog$1;->handleMessage(Landroid/os/Message;)V
-PLcom/android/server/am/AppWaitingForDebuggerDialog;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/content/Context;Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/AppWaitingForDebuggerDialog;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/content/Context;Lcom/android/server/am/ProcessRecord;)V
 PLcom/android/server/am/AppWaitingForDebuggerDialog;->closeDialog()V
 PLcom/android/server/am/AssistDataRequester$AssistDataRequesterCallbacks;->onAssistRequestCompleted()V
 HPLcom/android/server/am/AssistDataRequester;-><init>(Landroid/content/Context;Landroid/view/IWindowManager;Landroid/app/AppOpsManager;Lcom/android/server/am/AssistDataRequester$AssistDataRequesterCallbacks;Ljava/lang/Object;II)V
@@ -7751,7 +8081,7 @@
 PLcom/android/server/am/BaseAppStateDurations;-><init>(ILjava/lang/String;ILjava/lang/String;Lcom/android/server/am/BaseAppStateEvents$MaxTrackingDurationConfig;)V
 PLcom/android/server/am/BaseAppStateDurations;-><init>(Lcom/android/server/am/BaseAppStateDurations;)V
 PLcom/android/server/am/BaseAppStateDurations;->add(Ljava/util/LinkedList;Ljava/util/LinkedList;)Ljava/util/LinkedList;
-HPLcom/android/server/am/BaseAppStateDurations;->addEvent(ZLcom/android/server/am/BaseAppStateTimeEvents$BaseTimeEvent;I)V+]Lcom/android/server/am/BaseAppStateTimeEvents$BaseTimeEvent;Lcom/android/server/am/BaseAppStateTimeEvents$BaseTimeEvent;,Lcom/android/server/am/AppBatteryExemptionTracker$UidStateEventWithBattery;]Lcom/android/server/am/BaseAppStateEvents;Lcom/android/server/am/AppFGSTracker$PackageDurations;,Lcom/android/server/am/BaseAppStateDurationsTracker$SimplePackageDurations;,Lcom/android/server/am/BaseAppStateDurationsTracker$UidStateDurations;,Lcom/android/server/am/AppBatteryExemptionTracker$UidBatteryStates;]Ljava/util/LinkedList;Ljava/util/LinkedList;]Lcom/android/server/am/BaseAppStateDurations;Lcom/android/server/am/AppFGSTracker$PackageDurations;,Lcom/android/server/am/BaseAppStateDurationsTracker$SimplePackageDurations;,Lcom/android/server/am/BaseAppStateDurationsTracker$UidStateDurations;,Lcom/android/server/am/AppBatteryExemptionTracker$UidBatteryStates;
+HPLcom/android/server/am/BaseAppStateDurations;->addEvent(ZLcom/android/server/am/BaseAppStateTimeEvents$BaseTimeEvent;I)V+]Lcom/android/server/am/BaseAppStateTimeEvents$BaseTimeEvent;Lcom/android/server/am/BaseAppStateTimeEvents$BaseTimeEvent;,Lcom/android/server/am/AppBatteryExemptionTracker$UidStateEventWithBattery;]Lcom/android/server/am/BaseAppStateEvents;Lcom/android/server/am/BaseAppStateDurationsTracker$SimplePackageDurations;,Lcom/android/server/am/AppFGSTracker$PackageDurations;,Lcom/android/server/am/BaseAppStateDurationsTracker$UidStateDurations;,Lcom/android/server/am/AppBatteryExemptionTracker$UidBatteryStates;]Ljava/util/LinkedList;Ljava/util/LinkedList;]Lcom/android/server/am/BaseAppStateDurations;Lcom/android/server/am/BaseAppStateDurationsTracker$SimplePackageDurations;,Lcom/android/server/am/AppFGSTracker$PackageDurations;,Lcom/android/server/am/BaseAppStateDurationsTracker$UidStateDurations;,Lcom/android/server/am/AppBatteryExemptionTracker$UidBatteryStates;
 PLcom/android/server/am/BaseAppStateDurations;->formatEventSummary(JI)Ljava/lang/String;
 PLcom/android/server/am/BaseAppStateDurations;->getTotalDurations(JI)J
 HPLcom/android/server/am/BaseAppStateDurations;->getTotalDurationsSince(JJI)J+]Lcom/android/server/am/BaseAppStateTimeEvents$BaseTimeEvent;Lcom/android/server/am/BaseAppStateTimeEvents$BaseTimeEvent;]Ljava/util/LinkedList;Ljava/util/LinkedList;]Ljava/util/Iterator;Ljava/util/LinkedList$ListItr;
@@ -7826,7 +8156,7 @@
 PLcom/android/server/am/BaseAppStateTimeEvents$BaseTimeEvent;->trimTo(J)V
 PLcom/android/server/am/BaseAppStateTimeEvents;-><init>(ILjava/lang/String;ILjava/lang/String;Lcom/android/server/am/BaseAppStateEvents$MaxTrackingDurationConfig;)V
 PLcom/android/server/am/BaseAppStateTimeEvents;-><init>(Lcom/android/server/am/BaseAppStateTimeEvents;)V
-PLcom/android/server/am/BaseAppStateTimeSlotEvents;-><init>(ILjava/lang/String;IJLjava/lang/String;Lcom/android/server/am/BaseAppStateEvents$MaxTrackingDurationConfig;)V
+HPLcom/android/server/am/BaseAppStateTimeSlotEvents;-><init>(ILjava/lang/String;IJLjava/lang/String;Lcom/android/server/am/BaseAppStateEvents$MaxTrackingDurationConfig;)V
 HPLcom/android/server/am/BaseAppStateTimeSlotEvents;->add(Lcom/android/server/am/BaseAppStateEvents;)V
 HPLcom/android/server/am/BaseAppStateTimeSlotEvents;->addEvent(JI)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/am/BaseAppStateEvents;Lcom/android/server/am/BaseAppStateTimeSlotEventsTracker$SimpleAppStateTimeslotEvents;]Ljava/util/LinkedList;Ljava/util/LinkedList;]Lcom/android/server/am/BaseAppStateTimeSlotEvents;Lcom/android/server/am/BaseAppStateTimeSlotEventsTracker$SimpleAppStateTimeslotEvents;
 HPLcom/android/server/am/BaseAppStateTimeSlotEvents;->getSlotStartTime(J)J
@@ -7838,7 +8168,7 @@
 HSPLcom/android/server/am/BaseAppStateTimeSlotEventsTracker$BaseAppStateTimeSlotEventsPolicy;-><init>(Lcom/android/server/am/BaseAppStateTracker$Injector;Lcom/android/server/am/BaseAppStateTimeSlotEventsTracker;Ljava/lang/String;ZLjava/lang/String;JLjava/lang/String;I)V
 PLcom/android/server/am/BaseAppStateTimeSlotEventsTracker$BaseAppStateTimeSlotEventsPolicy;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HPLcom/android/server/am/BaseAppStateTimeSlotEventsTracker$BaseAppStateTimeSlotEventsPolicy;->getNumOfEventsThreshold()I
-PLcom/android/server/am/BaseAppStateTimeSlotEventsTracker$BaseAppStateTimeSlotEventsPolicy;->getProposedRestrictionLevel(Ljava/lang/String;II)I
+HPLcom/android/server/am/BaseAppStateTimeSlotEventsTracker$BaseAppStateTimeSlotEventsPolicy;->getProposedRestrictionLevel(Ljava/lang/String;II)I
 PLcom/android/server/am/BaseAppStateTimeSlotEventsTracker$BaseAppStateTimeSlotEventsPolicy;->getTimeSlotSize()J
 HSPLcom/android/server/am/BaseAppStateTimeSlotEventsTracker$BaseAppStateTimeSlotEventsPolicy;->lambda$onMaxTrackingDurationChanged$0(Lcom/android/server/am/BaseAppStateTimeSlotEventsTracker;)V
 HPLcom/android/server/am/BaseAppStateTimeSlotEventsTracker$BaseAppStateTimeSlotEventsPolicy;->onExcessiveEvents(Ljava/lang/String;IIJ)V+]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;]Lcom/android/server/am/AppRestrictionController;Lcom/android/server/am/AppRestrictionController;
@@ -7861,14 +8191,14 @@
 HSPLcom/android/server/am/BaseAppStateTimeSlotEventsTracker;->onMonitorEnabled(Z)V
 HSPLcom/android/server/am/BaseAppStateTimeSlotEventsTracker;->onNewEvent(Ljava/lang/String;I)V+]Landroid/os/Handler;Lcom/android/server/am/BaseAppStateTimeSlotEventsTracker$H;]Landroid/os/Message;Landroid/os/Message;
 HSPLcom/android/server/am/BaseAppStateTimeSlotEventsTracker;->onNumOfEventsThresholdChanged(I)V
-PLcom/android/server/am/BaseAppStateTimeSlotEventsTracker;->onUserInteractionStarted(Ljava/lang/String;I)V
+HPLcom/android/server/am/BaseAppStateTimeSlotEventsTracker;->onUserInteractionStarted(Ljava/lang/String;I)V
 HSPLcom/android/server/am/BaseAppStateTimeSlotEventsTracker;->trimEvents()V
 HSPLcom/android/server/am/BaseAppStateTracker$Injector;-><init>()V
 HSPLcom/android/server/am/BaseAppStateTracker$Injector;->currentTimeMillis()J
 HSPLcom/android/server/am/BaseAppStateTracker$Injector;->getActivityManagerInternal()Landroid/app/ActivityManagerInternal;
 HSPLcom/android/server/am/BaseAppStateTracker$Injector;->getBatteryManagerInternal()Landroid/os/BatteryManagerInternal;
 HSPLcom/android/server/am/BaseAppStateTracker$Injector;->getBatteryStatsInternal()Landroid/os/BatteryStatsInternal;
-PLcom/android/server/am/BaseAppStateTracker$Injector;->getIAppOpsService()Lcom/android/internal/app/IAppOpsService;
+HPLcom/android/server/am/BaseAppStateTracker$Injector;->getIAppOpsService()Lcom/android/internal/app/IAppOpsService;
 HSPLcom/android/server/am/BaseAppStateTracker$Injector;->getMediaSessionManager()Landroid/media/session/MediaSessionManager;
 HPLcom/android/server/am/BaseAppStateTracker$Injector;->getPackageManager()Landroid/content/pm/PackageManager;
 PLcom/android/server/am/BaseAppStateTracker$Injector;->getPackageManagerInternal()Landroid/content/pm/PackageManagerInternal;
@@ -7924,32 +8254,32 @@
 HSPLcom/android/server/am/BatteryExternalStatsWorker$$ExternalSyntheticLambda5;->run()V
 HSPLcom/android/server/am/BatteryExternalStatsWorker$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/am/BatteryExternalStatsWorker;)V
 HSPLcom/android/server/am/BatteryExternalStatsWorker$$ExternalSyntheticLambda6;->run()V
-HPLcom/android/server/am/BatteryExternalStatsWorker$$ExternalSyntheticLambda7;-><init>(Landroid/os/SynchronousResultReceiver;)V
-HPLcom/android/server/am/BatteryExternalStatsWorker$$ExternalSyntheticLambda7;->onWifiActivityEnergyInfo(Landroid/os/connectivity/WifiActivityEnergyInfo;)V
+HSPLcom/android/server/am/BatteryExternalStatsWorker$$ExternalSyntheticLambda7;-><init>(Landroid/os/SynchronousResultReceiver;)V
+HSPLcom/android/server/am/BatteryExternalStatsWorker$$ExternalSyntheticLambda7;->onWifiActivityEnergyInfo(Landroid/os/connectivity/WifiActivityEnergyInfo;)V
 HSPLcom/android/server/am/BatteryExternalStatsWorker$$ExternalSyntheticLambda8;-><init>()V
 HSPLcom/android/server/am/BatteryExternalStatsWorker$$ExternalSyntheticLambda8;->execute(Ljava/lang/Runnable;)V
 HSPLcom/android/server/am/BatteryExternalStatsWorker$1;-><init>(Lcom/android/server/am/BatteryExternalStatsWorker;)V
-HSPLcom/android/server/am/BatteryExternalStatsWorker$1;->run()V
+HSPLcom/android/server/am/BatteryExternalStatsWorker$1;->run()V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;]Landroid/util/IntArray;Landroid/util/IntArray;]Lcom/android/server/am/BatteryExternalStatsWorker;Lcom/android/server/am/BatteryExternalStatsWorker;
 HSPLcom/android/server/am/BatteryExternalStatsWorker$2;-><init>(Lcom/android/server/am/BatteryExternalStatsWorker;)V
 HSPLcom/android/server/am/BatteryExternalStatsWorker$2;->run()V
-HPLcom/android/server/am/BatteryExternalStatsWorker$3;-><init>(Lcom/android/server/am/BatteryExternalStatsWorker;)V
-HPLcom/android/server/am/BatteryExternalStatsWorker$3;->execute(Ljava/lang/Runnable;)V
+HSPLcom/android/server/am/BatteryExternalStatsWorker$3;-><init>(Lcom/android/server/am/BatteryExternalStatsWorker;)V
+HSPLcom/android/server/am/BatteryExternalStatsWorker$3;->execute(Ljava/lang/Runnable;)V
 HPLcom/android/server/am/BatteryExternalStatsWorker$4;-><init>(Lcom/android/server/am/BatteryExternalStatsWorker;Landroid/os/SynchronousResultReceiver;)V
 HPLcom/android/server/am/BatteryExternalStatsWorker$4;->onBluetoothActivityEnergyInfoAvailable(Landroid/bluetooth/BluetoothActivityEnergyInfo;)V
 HPLcom/android/server/am/BatteryExternalStatsWorker$4;->onBluetoothActivityEnergyInfoError(I)V
-HPLcom/android/server/am/BatteryExternalStatsWorker$5;-><init>(Lcom/android/server/am/BatteryExternalStatsWorker;Ljava/util/concurrent/CompletableFuture;)V
-HPLcom/android/server/am/BatteryExternalStatsWorker$5;->onError(Landroid/telephony/TelephonyManager$ModemActivityInfoException;)V
-HPLcom/android/server/am/BatteryExternalStatsWorker$5;->onError(Ljava/lang/Throwable;)V
+HSPLcom/android/server/am/BatteryExternalStatsWorker$5;-><init>(Lcom/android/server/am/BatteryExternalStatsWorker;Ljava/util/concurrent/CompletableFuture;)V
+HSPLcom/android/server/am/BatteryExternalStatsWorker$5;->onError(Landroid/telephony/TelephonyManager$ModemActivityInfoException;)V
+HSPLcom/android/server/am/BatteryExternalStatsWorker$5;->onError(Ljava/lang/Throwable;)V
 HPLcom/android/server/am/BatteryExternalStatsWorker$5;->onResult(Landroid/telephony/ModemActivityInfo;)V
 HPLcom/android/server/am/BatteryExternalStatsWorker$5;->onResult(Ljava/lang/Object;)V
 HSPLcom/android/server/am/BatteryExternalStatsWorker$Injector;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/am/BatteryExternalStatsWorker$Injector;->getLocalService(Ljava/lang/Class;)Ljava/lang/Object;
-HSPLcom/android/server/am/BatteryExternalStatsWorker$Injector;->getSystemService(Ljava/lang/Class;)Ljava/lang/Object;
+HSPLcom/android/server/am/BatteryExternalStatsWorker$Injector;->getSystemService(Ljava/lang/Class;)Ljava/lang/Object;+]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->$r8$lambda$7BwKwincHdFF1GAUcUBhNpJVXiE(Lcom/android/server/am/BatteryExternalStatsWorker;)V
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->$r8$lambda$9yEajpDc4QcEGQgWY-3r6o8KD2E(Ljava/lang/Runnable;)Ljava/lang/Thread;
 PLcom/android/server/am/BatteryExternalStatsWorker;->$r8$lambda$BYby_a1Vn-De42t2nqNx1kF9OOw(Lcom/android/server/am/BatteryExternalStatsWorker;I)V
 PLcom/android/server/am/BatteryExternalStatsWorker;->$r8$lambda$Vziyl-NMJQeBZbHJ0ny-R1RSGyM(Lcom/android/server/am/BatteryExternalStatsWorker;)V
-HPLcom/android/server/am/BatteryExternalStatsWorker;->$r8$lambda$YJ9nGkUCFUdaLVYiaeMmbvoBMNc(Landroid/os/SynchronousResultReceiver;Landroid/os/connectivity/WifiActivityEnergyInfo;)V
+HSPLcom/android/server/am/BatteryExternalStatsWorker;->$r8$lambda$YJ9nGkUCFUdaLVYiaeMmbvoBMNc(Landroid/os/SynchronousResultReceiver;Landroid/os/connectivity/WifiActivityEnergyInfo;)V
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->$r8$lambda$bc21NyyhlZUQsWmu0R4n_IsZGSY(Lcom/android/server/am/BatteryExternalStatsWorker;)V
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->$r8$lambda$n-s_hQEo5Oy-rO_a453pBGv5CvA(Ljava/lang/Runnable;)V
 PLcom/android/server/am/BatteryExternalStatsWorker;->$r8$lambda$vD_fJMvjYEKy3gH91qLS6S4JxjU(Lcom/android/server/am/BatteryExternalStatsWorker;I)V
@@ -7977,7 +8307,7 @@
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->cancelCpuSyncDueToWakelockChange()V
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->cancelSyncDueToBatteryLevelChangeLocked()V
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->cancelSyncDueToProcessStateChange()V
-HPLcom/android/server/am/BatteryExternalStatsWorker;->extractDeltaLocked(Landroid/os/connectivity/WifiActivityEnergyInfo;)Landroid/os/connectivity/WifiActivityEnergyInfo;
+HSPLcom/android/server/am/BatteryExternalStatsWorker;->extractDeltaLocked(Landroid/os/connectivity/WifiActivityEnergyInfo;)Landroid/os/connectivity/WifiActivityEnergyInfo;
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->getEnergyConsumptionData()Ljava/util/concurrent/CompletableFuture;
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->getEnergyConsumptionData([I)Ljava/util/concurrent/CompletableFuture;
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->getLastCollectionTimeStamp()J
@@ -7989,8 +8319,8 @@
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->lambda$scheduleCpuSyncDueToWakelockChange$2()V
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->lambda$scheduleCpuSyncDueToWakelockChange$3()V
 PLcom/android/server/am/BatteryExternalStatsWorker;->lambda$scheduleSyncDueToBatteryLevelChange$4()V
-PLcom/android/server/am/BatteryExternalStatsWorker;->lambda$scheduleSyncDueToProcessStateChange$5(I)V
-HPLcom/android/server/am/BatteryExternalStatsWorker;->lambda$updateExternalStatsLocked$7(Landroid/os/SynchronousResultReceiver;Landroid/os/connectivity/WifiActivityEnergyInfo;)V
+HPLcom/android/server/am/BatteryExternalStatsWorker;->lambda$scheduleSyncDueToProcessStateChange$5(I)V
+HSPLcom/android/server/am/BatteryExternalStatsWorker;->lambda$updateExternalStatsLocked$7(Landroid/os/SynchronousResultReceiver;Landroid/os/connectivity/WifiActivityEnergyInfo;)V
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->populateEnergyConsumerSubsystemMapsLocked()Landroid/util/SparseArray;
 PLcom/android/server/am/BatteryExternalStatsWorker;->scheduleCleanupDueToRemovedUser(I)Ljava/util/concurrent/Future;
 HPLcom/android/server/am/BatteryExternalStatsWorker;->scheduleCpuSyncDueToRemovedUid(I)Ljava/util/concurrent/Future;
@@ -7998,20 +8328,20 @@
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->scheduleDelayedSyncLocked(Ljava/util/concurrent/Future;Ljava/lang/Runnable;J)Ljava/util/concurrent/Future;+]Ljava/util/concurrent/Future;Ljava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;]Ljava/util/concurrent/ScheduledExecutorService;Ljava/util/concurrent/Executors$DelegatedScheduledExecutorService;
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->scheduleRunnable(Ljava/lang/Runnable;)V+]Ljava/util/concurrent/ScheduledExecutorService;Ljava/util/concurrent/Executors$DelegatedScheduledExecutorService;
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->scheduleSync(Ljava/lang/String;I)Ljava/util/concurrent/Future;
-PLcom/android/server/am/BatteryExternalStatsWorker;->scheduleSyncDueToBatteryLevelChange(J)Ljava/util/concurrent/Future;
+HPLcom/android/server/am/BatteryExternalStatsWorker;->scheduleSyncDueToBatteryLevelChange(J)Ljava/util/concurrent/Future;
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->scheduleSyncDueToProcessStateChange(IJ)V+]Lcom/android/server/am/BatteryExternalStatsWorker;Lcom/android/server/am/BatteryExternalStatsWorker;
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->scheduleSyncDueToScreenStateChange(IZZI[I)Ljava/util/concurrent/Future;
-HSPLcom/android/server/am/BatteryExternalStatsWorker;->scheduleSyncLocked(Ljava/lang/String;I)Ljava/util/concurrent/Future;
+HSPLcom/android/server/am/BatteryExternalStatsWorker;->scheduleSyncLocked(Ljava/lang/String;I)Ljava/util/concurrent/Future;+]Ljava/util/concurrent/ScheduledExecutorService;Ljava/util/concurrent/Executors$DelegatedScheduledExecutorService;
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->scheduleWrite()Ljava/util/concurrent/Future;
 PLcom/android/server/am/BatteryExternalStatsWorker;->shutdown()V
 HSPLcom/android/server/am/BatteryExternalStatsWorker;->systemServicesReady()V
-HSPLcom/android/server/am/BatteryExternalStatsWorker;->updateExternalStatsLocked(Ljava/lang/String;IZZI[IZ)V
+HSPLcom/android/server/am/BatteryExternalStatsWorker;->updateExternalStatsLocked(Ljava/lang/String;IZZI[IZ)V+]Landroid/net/wifi/WifiManager;Landroid/net/wifi/WifiManager;]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;]Landroid/bluetooth/BluetoothAdapter;Landroid/bluetooth/BluetoothAdapter;]Lcom/android/server/am/BatteryExternalStatsWorker$Injector;Lcom/android/server/am/BatteryExternalStatsWorker$Injector;]Lcom/android/server/am/BatteryExternalStatsWorker;Lcom/android/server/am/BatteryExternalStatsWorker;]Ljava/util/concurrent/CompletableFuture;Ljava/util/concurrent/CompletableFuture;]Landroid/bluetooth/BluetoothActivityEnergyInfo;Landroid/bluetooth/BluetoothActivityEnergyInfo;]Landroid/os/connectivity/WifiActivityEnergyInfo;Landroid/os/connectivity/WifiActivityEnergyInfo;]Landroid/telephony/TelephonyManager;Landroid/telephony/TelephonyManager;
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;IIJJ)V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda0;->run()V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda100;-><init>(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;IJJ)V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda100;->run()V
-HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda101;-><init>(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;Ljava/lang/String;JJ)V
-HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda101;->run()V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda101;-><init>(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;Ljava/lang/String;JJ)V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda101;->run()V
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda102;-><init>(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;IJJ)V
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda102;->run()V
 PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda103;-><init>(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;IJJ)V
@@ -8021,15 +8351,15 @@
 PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda105;-><init>(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;JJ)V
 PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda105;->run()V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda10;-><init>(Lcom/android/server/am/BatteryStatsService;IJJ)V
-PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda10;->run()V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda10;->run()V
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda11;-><init>(Lcom/android/server/am/BatteryStatsService;IILjava/lang/String;Ljava/lang/String;IZJJ)V
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda11;->run()V
 PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda12;-><init>(Lcom/android/server/am/BatteryStatsService;JJ)V
 PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda12;->run()V
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda13;-><init>(Lcom/android/server/am/BatteryStatsService;)V
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda13;->run()V
-HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda14;-><init>(Lcom/android/server/am/BatteryStatsService;IJJJ)V
-HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda14;->run()V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda14;-><init>(Lcom/android/server/am/BatteryStatsService;IJJJ)V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda14;->run()V
 PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda15;-><init>(Lcom/android/server/am/BatteryStatsService;JJ)V
 PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda15;->run()V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda16;-><init>(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;Ljava/lang/String;IJJ)V
@@ -8038,14 +8368,14 @@
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda17;->run()V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda18;-><init>(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;ZJJ)V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda18;->run()V
-PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda19;-><init>(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;JJ)V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda19;-><init>(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;JJ)V
 PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda19;->run()V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;IJJ)V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda1;->run()V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda20;-><init>(Lcom/android/server/am/BatteryStatsService;IJIJJ)V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda20;->run()V
-HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda22;-><init>(Lcom/android/server/am/BatteryStatsService;ZIJJ)V
-HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda22;->run()V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda22;-><init>(Lcom/android/server/am/BatteryStatsService;ZIJJ)V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda22;->run()V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda23;-><init>(Lcom/android/server/am/BatteryStatsService;IJJ)V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda23;->run()V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda24;-><init>(Lcom/android/server/am/BatteryStatsService;IJJ)V
@@ -8070,8 +8400,8 @@
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda33;->run()V
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda35;-><init>(Lcom/android/server/am/BatteryStatsService;IIJJ)V
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda35;->run()V
-PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda36;-><init>(Lcom/android/server/am/BatteryStatsService;JJ)V
-PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda36;->run()V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda36;-><init>(Lcom/android/server/am/BatteryStatsService;JJ)V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda36;->run()V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda37;-><init>(Lcom/android/server/am/BatteryStatsService;IIJJ)V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda37;->run()V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda38;-><init>(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;JJ)V
@@ -8120,12 +8450,12 @@
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda5;->run()V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda60;-><init>(Lcom/android/server/am/BatteryStatsService;II)V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda60;->run()V
-PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda61;-><init>(Lcom/android/server/am/BatteryStatsService;JJ)V
-PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda61;->run()V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda61;-><init>(Lcom/android/server/am/BatteryStatsService;JJ)V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda61;->run()V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda63;-><init>(Lcom/android/server/am/BatteryStatsService;IJJ)V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda63;->run()V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda64;-><init>(Lcom/android/server/am/BatteryStatsService;IJJ)V
-PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda64;->run()V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda64;->run()V
 PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda65;-><init>(Lcom/android/server/am/BatteryStatsService;JJ)V
 PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda65;->run()V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda66;-><init>(Lcom/android/server/am/BatteryStatsService;IJJ)V
@@ -8153,11 +8483,11 @@
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda79;-><init>(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;[I)V
 PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda79;->run()V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda7;-><init>(Lcom/android/server/am/BatteryStatsService;IJJ)V
-PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda7;->run()V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda7;->run()V
 PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda80;-><init>(Lcom/android/server/am/BatteryStatsService;JJ)V
 PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda80;->run()V
-PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda81;-><init>(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;J)V
-PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda81;->run()V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda81;-><init>(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;J)V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda81;->run()V
 PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda82;-><init>(Lcom/android/server/am/BatteryStatsService;I)V
 PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda82;->run()V
 PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda83;-><init>(Lcom/android/server/am/BatteryStatsService;JJ)V
@@ -8170,8 +8500,8 @@
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda86;->run()V
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda88;-><init>(Lcom/android/server/am/BatteryStatsService;IIJJ)V
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda88;->run()V
-HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda89;-><init>(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;Ljava/lang/String;JJ)V
-HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda89;->run()V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda89;-><init>(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;Ljava/lang/String;JJ)V
+HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda89;->run()V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;JJ)V
 HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda8;->run()V
 PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda90;-><init>(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;JJ)V
@@ -8192,10 +8522,10 @@
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda97;->run()V
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda98;-><init>(Lcom/android/server/am/BatteryStatsService;IIIIIIIIJJJJ)V
 HSPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda98;->run()V
-PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda99;-><init>(Lcom/android/server/am/BatteryStatsService;IIJJJ)V
-PLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda99;->run()V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda99;-><init>(Lcom/android/server/am/BatteryStatsService;IIJJJ)V
+HPLcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda99;->run()V
 HSPLcom/android/server/am/BatteryStatsService$1;-><init>(Lcom/android/server/am/BatteryStatsService;)V
-HPLcom/android/server/am/BatteryStatsService$1;->interfaceClassDataActivityChanged(IZJI)V
+HPLcom/android/server/am/BatteryStatsService$1;->interfaceClassDataActivityChanged(IZJI)V+]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
 HSPLcom/android/server/am/BatteryStatsService$2;-><init>(Lcom/android/server/am/BatteryStatsService;)V
 HPLcom/android/server/am/BatteryStatsService$2;->onCapabilitiesChanged(Landroid/net/Network;Landroid/net/NetworkCapabilities;)V
 PLcom/android/server/am/BatteryStatsService$2;->onLost(Landroid/net/Network;)V
@@ -8216,16 +8546,16 @@
 HSPLcom/android/server/am/BatteryStatsService$WakeupReasonThread;-><init>(Lcom/android/server/am/BatteryStatsService;)V
 HSPLcom/android/server/am/BatteryStatsService$WakeupReasonThread;->run()V
 HSPLcom/android/server/am/BatteryStatsService$WakeupReasonThread;->waitWakeup()Ljava/lang/String;+]Ljava/nio/CharBuffer;Ljava/nio/HeapCharBuffer;]Ljava/nio/ByteBuffer;Ljava/nio/DirectByteBuffer;]Ljava/nio/charset/CharsetDecoder;Lcom/android/icu/charset/CharsetDecoderICU;
-HPLcom/android/server/am/BatteryStatsService;->$r8$lambda$-T3EJwdasD_2ymIpOBPlnUmSy5o(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;Ljava/lang/String;JJ)V
+HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$-T3EJwdasD_2ymIpOBPlnUmSy5o(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;Ljava/lang/String;JJ)V
 PLcom/android/server/am/BatteryStatsService;->$r8$lambda$0RcOOMx6Jjzjbm9R1Gz9w4ufaD0(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;JJ)V
-PLcom/android/server/am/BatteryStatsService;->$r8$lambda$0su1n04xZMxyOUSkDysuerEwfVY(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;ZJJ)V
-PLcom/android/server/am/BatteryStatsService;->$r8$lambda$1kKFwBf3Uwd8Mh3ycR8xZNaXiCY(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;IJJ)V
+HPLcom/android/server/am/BatteryStatsService;->$r8$lambda$0su1n04xZMxyOUSkDysuerEwfVY(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;ZJJ)V
+HPLcom/android/server/am/BatteryStatsService;->$r8$lambda$1kKFwBf3Uwd8Mh3ycR8xZNaXiCY(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;IJJ)V
 HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$1wMhiQjLdVVKvkjvHZPuGplObVg(Lcom/android/server/am/BatteryStatsService;IIIIIIIIJJJJ)V
 HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$1zFEcjd63YRM_6z1FQFAruxnm9E(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;IJJ)V
 PLcom/android/server/am/BatteryStatsService;->$r8$lambda$2I5ale1Q-xjI1bVbvLzZfJsM7xA(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;Ljava/lang/String;IJJ)V
 PLcom/android/server/am/BatteryStatsService;->$r8$lambda$30Q3-HgJVBN3e5muNYZiv_avWlU(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;ZJJ)V
 HPLcom/android/server/am/BatteryStatsService;->$r8$lambda$30ePilmOqI9lEsSdUc_9sYh_Ne8(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;ILandroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IZJJ)V
-HPLcom/android/server/am/BatteryStatsService;->$r8$lambda$39Othcq7MwtJhcWnnN-hO6Mj9ww(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;Ljava/lang/String;JJ)V
+HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$39Othcq7MwtJhcWnnN-hO6Mj9ww(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;Ljava/lang/String;JJ)V
 HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$3L7U9PW5KGLNVe5JHaVQBxQ2XTw(Lcom/android/server/am/BatteryStatsService;IIJJ)V
 PLcom/android/server/am/BatteryStatsService;->$r8$lambda$4SnNCSIvDHtxxFt3yoow7vFramc(Lcom/android/server/am/BatteryStatsService;IZJJ)V
 PLcom/android/server/am/BatteryStatsService;->$r8$lambda$52Xb71NuvGfmroUgTcvVZR9TTKA(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;IJJ)V
@@ -8236,15 +8566,15 @@
 HPLcom/android/server/am/BatteryStatsService;->$r8$lambda$966njydWLkHDlXAgfJGjDa8BQh4(Lcom/android/server/am/BatteryStatsService;IIJJ)V
 PLcom/android/server/am/BatteryStatsService;->$r8$lambda$A-TqbqVMAuCy-pcAsRoV_2vBfEg(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;JJ)V
 HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$AnKv-7z6fhXh8cAX6kzCQtP2Jzc(Lcom/android/server/am/BatteryStatsService;ZJ)V
-HPLcom/android/server/am/BatteryStatsService;->$r8$lambda$C40E5LYyJ7hTfF37JTX5ZNEtDR0(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IJJ)V
+HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$C40E5LYyJ7hTfF37JTX5ZNEtDR0(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IJJ)V
 PLcom/android/server/am/BatteryStatsService;->$r8$lambda$CNxULzV2ECJa3kKk8WfO4e2SOD4(Lcom/android/server/am/BatteryStatsService;I)V
 PLcom/android/server/am/BatteryStatsService;->$r8$lambda$Dg3gCUPfgfRrTRthwvkUY0Z8e_s(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;Landroid/os/WorkSource;JJ)V
 PLcom/android/server/am/BatteryStatsService;->$r8$lambda$EBdEYOwRMGnCkIDPvSC1mgH8UEo(Lcom/android/server/am/BatteryStatsService;JJ)V
-HPLcom/android/server/am/BatteryStatsService;->$r8$lambda$EYVSFcIFJRMlBtA26X7qjaKc_nU(Lcom/android/server/am/BatteryStatsService;IJJJ)V
+HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$EYVSFcIFJRMlBtA26X7qjaKc_nU(Lcom/android/server/am/BatteryStatsService;IJJJ)V
 HPLcom/android/server/am/BatteryStatsService;->$r8$lambda$G0RqRfWtcR9Z1vw-ukKhM-PvKcw(Lcom/android/server/am/BatteryStatsService;IJIJJ)V
 HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$G1UkbnxvkCFzOfik8AqNXuWJLkI(Lcom/android/server/am/BatteryStatsService;IJJJ)V
 PLcom/android/server/am/BatteryStatsService;->$r8$lambda$IRE2jaspd-_dd5RwbWqP9b1_Yak(Lcom/android/server/am/BatteryStatsService;IJJ)V
-HPLcom/android/server/am/BatteryStatsService;->$r8$lambda$IxriIfIq06Kjm3vpDSiohmC1N2A(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;IJJ)V
+HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$IxriIfIq06Kjm3vpDSiohmC1N2A(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;IJJ)V
 HPLcom/android/server/am/BatteryStatsService;->$r8$lambda$KC3ot6Y9IUzuKZT6FAcqtwvXpCA(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;JJ)V
 HPLcom/android/server/am/BatteryStatsService;->$r8$lambda$LO_bVPbL6YQsfBCfQNR_H-mMtaU(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;Ljava/lang/String;JJ)V
 PLcom/android/server/am/BatteryStatsService;->$r8$lambda$LZmMyUYocUYPWUUH1POkkhkrbgU(Lcom/android/server/am/BatteryStatsService;JJ)V
@@ -8262,11 +8592,11 @@
 HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$SPsQZYURQt6LsnbttcdFzU9BdmQ(Lcom/android/server/am/BatteryStatsService;IIJJ)V
 HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$TIkKaMJpHsP3p4WZjICR4yk2KNw(Lcom/android/server/am/BatteryStatsService;)V
 PLcom/android/server/am/BatteryStatsService;->$r8$lambda$TW0fn6Fwob1ftDzggTvTeL88e_U(Lcom/android/server/am/BatteryStatsService;IJJ)V
-PLcom/android/server/am/BatteryStatsService;->$r8$lambda$TaD80T0KfmTuenSo_Eb0P6C23sU(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;IJJ)V
+HPLcom/android/server/am/BatteryStatsService;->$r8$lambda$TaD80T0KfmTuenSo_Eb0P6C23sU(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;IJJ)V
 HPLcom/android/server/am/BatteryStatsService;->$r8$lambda$Uc72kaYWnB452VquAhbUH1Wc61E(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;ILandroid/os/WorkSource;Ljava/lang/String;JJ)V
 HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$WjTw-lhr-hYdByDp_KhGdjDKoao(Lcom/android/server/am/BatteryStatsService;JJJ)V
 PLcom/android/server/am/BatteryStatsService;->$r8$lambda$XUGlQUm0Lj8_UzwhHw0CuZiNcTY(Lcom/android/server/am/BatteryStatsService;IJJ)V
-PLcom/android/server/am/BatteryStatsService;->$r8$lambda$YEYQLc5bNv078ftbn6QYFhPWW5A(Lcom/android/server/am/BatteryStatsService;ZIJJ)V
+HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$YEYQLc5bNv078ftbn6QYFhPWW5A(Lcom/android/server/am/BatteryStatsService;ZIJJ)V
 HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$YGIVmASaoTlf9BiNWQ308V_nw7U(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;Ljava/lang/String;JJ)V
 HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$YXqI0xRHaN6wRAEWuYNX-KR4P3M(Lcom/android/server/am/BatteryStatsService;)V
 PLcom/android/server/am/BatteryStatsService;->$r8$lambda$_4licwsGlNI-YtV5owRphq-BHd8(Lcom/android/server/am/BatteryStatsService;JJ)V
@@ -8277,10 +8607,10 @@
 HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$cL9Ox8uD5si62LfQ-w8LmwfTNrM(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IZJJ)V
 HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$cl7wfIUoDreDuUekPzpChD740wE(Lcom/android/server/am/BatteryStatsService;IIJJ)V
 HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$eNGMlG7aMN6Sy7Ou_U2NZ4h5pi4(Lcom/android/server/am/BatteryStatsService;IIIIIIIIJJJJ)V
-PLcom/android/server/am/BatteryStatsService;->$r8$lambda$eRELWpaS9wTc0MBzKn9GxDpiBGE(Lcom/android/server/am/BatteryStatsService;JJ)V
+HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$eRELWpaS9wTc0MBzKn9GxDpiBGE(Lcom/android/server/am/BatteryStatsService;JJ)V
 PLcom/android/server/am/BatteryStatsService;->$r8$lambda$fGrJzBw_Z1xIhUxstdSebF7oUJU(Lcom/android/server/am/BatteryStatsService;JJ)V
 HPLcom/android/server/am/BatteryStatsService;->$r8$lambda$g8kGiaZDv38qQBzGzVvrn-bwRAY(Lcom/android/server/am/BatteryStatsService;Landroid/telephony/SignalStrength;JJ)V
-PLcom/android/server/am/BatteryStatsService;->$r8$lambda$gmev1-BwCGbLsnfSSb7qCbQ_OWk(Lcom/android/server/am/BatteryStatsService;IJJ)V
+HPLcom/android/server/am/BatteryStatsService;->$r8$lambda$gmev1-BwCGbLsnfSSb7qCbQ_OWk(Lcom/android/server/am/BatteryStatsService;IJJ)V
 HPLcom/android/server/am/BatteryStatsService;->$r8$lambda$gn7bIn5qOvv9XgKiAvolI3SpdvI(Lcom/android/server/am/BatteryStatsService;IJJ)V
 HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$h8x6o9upQzsAxj9qeRERGr3yyh4(Lcom/android/server/am/BatteryStatsService;IILjava/lang/String;Ljava/lang/String;IJJ)V
 PLcom/android/server/am/BatteryStatsService;->$r8$lambda$hXXk5LOMoq4wrnrjsnrbfcQ0vW8(Lcom/android/server/am/BatteryStatsService;JJ)V
@@ -8288,11 +8618,11 @@
 PLcom/android/server/am/BatteryStatsService;->$r8$lambda$i9I9AkZ7GkMCJrn_094QM2Bu5Ik(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;J)V
 PLcom/android/server/am/BatteryStatsService;->$r8$lambda$jgrpNidgVGaILuQ3hrDbWKA9Uns(Lcom/android/server/am/BatteryStatsService;IJJ)V
 HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$jlbVE-zMHOnU4QY6QebsGBUOKGM(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;IJJ)V
-PLcom/android/server/am/BatteryStatsService;->$r8$lambda$jwJ6BvtQotwPSEaygG6Wmzqb5VU(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;Ljava/lang/String;IJJ)V
+HPLcom/android/server/am/BatteryStatsService;->$r8$lambda$jwJ6BvtQotwPSEaygG6Wmzqb5VU(Lcom/android/server/am/BatteryStatsService;Ljava/lang/String;Ljava/lang/String;IJJ)V
 PLcom/android/server/am/BatteryStatsService;->$r8$lambda$k6FUiJ2TNkzCKTcCXcXVpBi1LEk(Lcom/android/server/am/BatteryStatsService;IJJ)V
 PLcom/android/server/am/BatteryStatsService;->$r8$lambda$lcU7mpQXoEmX0hBoHcxpx1OzPHY(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;JJ)V
-PLcom/android/server/am/BatteryStatsService;->$r8$lambda$mSCUBLqMc2F6EiDgzye-K5MyW_I(Lcom/android/server/am/BatteryStatsService;IJJ)V
-PLcom/android/server/am/BatteryStatsService;->$r8$lambda$mWaVQuiD3GwATFd-cDqHHLNUycs(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;JJ)V
+HPLcom/android/server/am/BatteryStatsService;->$r8$lambda$mSCUBLqMc2F6EiDgzye-K5MyW_I(Lcom/android/server/am/BatteryStatsService;IJJ)V
+HPLcom/android/server/am/BatteryStatsService;->$r8$lambda$mWaVQuiD3GwATFd-cDqHHLNUycs(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;JJ)V
 HPLcom/android/server/am/BatteryStatsService;->$r8$lambda$mmpRGnXK8jWSSrB6SMukIE5f5DE(Lcom/android/server/am/BatteryStatsService;IJJ)V
 PLcom/android/server/am/BatteryStatsService;->$r8$lambda$o-MnKvBIq9KZpG89sf-JlL8Ptuw(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;JJ)V
 HPLcom/android/server/am/BatteryStatsService;->$r8$lambda$o4RUtaKs87yMpDyCqArFKGIOve4(Lcom/android/server/am/BatteryStatsService;IJIJJ)V
@@ -8302,7 +8632,7 @@
 HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$rxJcXKcLKUo1mwqltjxWkOzCL0o(Ljava/util/concurrent/CountDownLatch;)V
 PLcom/android/server/am/BatteryStatsService;->$r8$lambda$sZCxKMxld9D2UuriKApZ1vpBGVw(Lcom/android/server/am/BatteryStatsService;Landroid/os/PowerSaveState;JJ)V
 HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$tLPDT4zZxvj4PzduZLpUGCICcvA(Lcom/android/server/am/BatteryStatsService;ILjava/lang/String;IJJ)V
-PLcom/android/server/am/BatteryStatsService;->$r8$lambda$uJFr6XcmtxSfCUG-ZKk9Ci0qRZA(Lcom/android/server/am/BatteryStatsService;JJ)V
+HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$uJFr6XcmtxSfCUG-ZKk9Ci0qRZA(Lcom/android/server/am/BatteryStatsService;JJ)V
 PLcom/android/server/am/BatteryStatsService;->$r8$lambda$uaLBfqbajcwG0ca2r0iWE2ywHeo(Lcom/android/server/am/BatteryStatsService;Landroid/os/WorkSource;JJ)V
 PLcom/android/server/am/BatteryStatsService;->$r8$lambda$vAxdUaeCtbZe0kwB5XV_7MKDaTQ(Lcom/android/server/am/BatteryStatsService;IJJ)V
 HSPLcom/android/server/am/BatteryStatsService;->$r8$lambda$vZCB3Ac5B5pl5U9woEiULxskz1M(Lcom/android/server/am/BatteryStatsService;IJJ)V
@@ -8313,7 +8643,7 @@
 PLcom/android/server/am/BatteryStatsService;->-$$Nest$fgetmBatteryUsageStatsStore(Lcom/android/server/am/BatteryStatsService;)Lcom/android/internal/os/BatteryUsageStatsStore;
 HPLcom/android/server/am/BatteryStatsService;->-$$Nest$fgetmHandler(Lcom/android/server/am/BatteryStatsService;)Landroid/os/Handler;
 HSPLcom/android/server/am/BatteryStatsService;->-$$Nest$fgetmLock(Lcom/android/server/am/BatteryStatsService;)Ljava/lang/Object;
-HPLcom/android/server/am/BatteryStatsService;->-$$Nest$mawaitCompletion(Lcom/android/server/am/BatteryStatsService;)V
+HPLcom/android/server/am/BatteryStatsService;->-$$Nest$mawaitCompletion(Lcom/android/server/am/BatteryStatsService;)V+]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
 HSPLcom/android/server/am/BatteryStatsService;->-$$Nest$smnativeWaitWakeup(Ljava/nio/ByteBuffer;)I
 HSPLcom/android/server/am/BatteryStatsService;-><init>(Landroid/content/Context;Ljava/io/File;Landroid/os/Handler;)V
 HSPLcom/android/server/am/BatteryStatsService;->addIsolatedUid(II)V
@@ -8337,13 +8667,13 @@
 HSPLcom/android/server/am/BatteryStatsService;->getSubsystemLowPowerStats()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/concurrent/CompletableFuture;Ljava/util/concurrent/CompletableFuture;]Landroid/power/PowerStatsInternal;Lcom/android/server/powerstats/PowerStatsService$LocalService;]Ljava/util/Map;Ljava/util/HashMap;
 HPLcom/android/server/am/BatteryStatsService;->getWifiBatteryStats()Landroid/os/connectivity/WifiBatteryStats;
 HSPLcom/android/server/am/BatteryStatsService;->initPowerManagement()V
-HSPLcom/android/server/am/BatteryStatsService;->isCharging()Z
-PLcom/android/server/am/BatteryStatsService;->isOnBattery()Z
+HSPLcom/android/server/am/BatteryStatsService;->isCharging()Z+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
+HPLcom/android/server/am/BatteryStatsService;->isOnBattery()Z
 HSPLcom/android/server/am/BatteryStatsService;->lambda$addIsolatedUid$6(IIJJ)V
 HSPLcom/android/server/am/BatteryStatsService;->lambda$awaitCompletion$0(Ljava/util/concurrent/CountDownLatch;)V
 HPLcom/android/server/am/BatteryStatsService;->lambda$noteAlarmFinish$21(Ljava/lang/String;Landroid/os/WorkSource;IJJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
 HSPLcom/android/server/am/BatteryStatsService;->lambda$noteAlarmStart$20(Ljava/lang/String;Landroid/os/WorkSource;IJJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
-PLcom/android/server/am/BatteryStatsService;->lambda$noteBleScanReset$89(JJ)V
+HSPLcom/android/server/am/BatteryStatsService;->lambda$noteBleScanReset$89(JJ)V
 HPLcom/android/server/am/BatteryStatsService;->lambda$noteBleScanResults$90(Landroid/os/WorkSource;IJJ)V
 HPLcom/android/server/am/BatteryStatsService;->lambda$noteBleScanStarted$87(Landroid/os/WorkSource;ZJJ)V
 HPLcom/android/server/am/BatteryStatsService;->lambda$noteBleScanStopped$88(Landroid/os/WorkSource;ZJJ)V
@@ -8351,20 +8681,20 @@
 HPLcom/android/server/am/BatteryStatsService;->lambda$noteConnectivityChanged$42(ILjava/lang/String;JJ)V
 HSPLcom/android/server/am/BatteryStatsService;->lambda$noteCurrentTimeChanged$98(JJJ)V
 HPLcom/android/server/am/BatteryStatsService;->lambda$noteDeviceIdleMode$84(ILjava/lang/String;IJJ)V
-HSPLcom/android/server/am/BatteryStatsService;->lambda$noteEvent$13(ILjava/lang/String;IJJ)V
+HSPLcom/android/server/am/BatteryStatsService;->lambda$noteEvent$13(ILjava/lang/String;IJJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
 PLcom/android/server/am/BatteryStatsService;->lambda$noteFlashlightOff$58(IJJ)V
 PLcom/android/server/am/BatteryStatsService;->lambda$noteFlashlightOn$57(IJJ)V
 HPLcom/android/server/am/BatteryStatsService;->lambda$noteFullWifiLockAcquiredFromSource$76(Landroid/os/WorkSource;JJ)V
 PLcom/android/server/am/BatteryStatsService;->lambda$noteFullWifiLockReleasedFromSource$77(Landroid/os/WorkSource;JJ)V
 PLcom/android/server/am/BatteryStatsService;->lambda$noteGpsChanged$35(Landroid/os/WorkSource;Landroid/os/WorkSource;JJ)V
-PLcom/android/server/am/BatteryStatsService;->lambda$noteGpsSignalQuality$36(IJJ)V
+HPLcom/android/server/am/BatteryStatsService;->lambda$noteGpsSignalQuality$36(IJJ)V
 HSPLcom/android/server/am/BatteryStatsService;->lambda$noteInteractive$41(ZJ)V
 HPLcom/android/server/am/BatteryStatsService;->lambda$noteJobFinish$17(Ljava/lang/String;IIJJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
-HPLcom/android/server/am/BatteryStatsService;->lambda$noteJobStart$16(Ljava/lang/String;IJJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
+HSPLcom/android/server/am/BatteryStatsService;->lambda$noteJobStart$16(Ljava/lang/String;IJJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
 PLcom/android/server/am/BatteryStatsService;->lambda$noteJobsDeferred$18(IIJJJ)V
 HPLcom/android/server/am/BatteryStatsService;->lambda$noteLongPartialWakelockFinish$29(Ljava/lang/String;Ljava/lang/String;IJJ)V
 HPLcom/android/server/am/BatteryStatsService;->lambda$noteLongPartialWakelockFinishFromSource$30(Ljava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;JJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
-PLcom/android/server/am/BatteryStatsService;->lambda$noteLongPartialWakelockStart$27(Ljava/lang/String;Ljava/lang/String;IJJ)V
+HPLcom/android/server/am/BatteryStatsService;->lambda$noteLongPartialWakelockStart$27(Ljava/lang/String;Ljava/lang/String;IJJ)V
 HPLcom/android/server/am/BatteryStatsService;->lambda$noteLongPartialWakelockStartFromSource$28(Ljava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;JJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
 HPLcom/android/server/am/BatteryStatsService;->lambda$noteMobileRadioPowerState$43(IJIJJ)V
 PLcom/android/server/am/BatteryStatsService;->lambda$noteNetworkInterfaceForTransports$82(Ljava/lang/String;[I)V
@@ -8374,11 +8704,11 @@
 HPLcom/android/server/am/BatteryStatsService;->lambda$notePhoneDataConnectionState$47(IZIIJJ)V
 PLcom/android/server/am/BatteryStatsService;->lambda$notePhoneOff$45(JJ)V
 PLcom/android/server/am/BatteryStatsService;->lambda$notePhoneOn$44(JJ)V
-HPLcom/android/server/am/BatteryStatsService;->lambda$notePhoneSignalStrength$46(Landroid/telephony/SignalStrength;JJ)V
+HPLcom/android/server/am/BatteryStatsService;->lambda$notePhoneSignalStrength$46(Landroid/telephony/SignalStrength;JJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
 HPLcom/android/server/am/BatteryStatsService;->lambda$notePhoneState$48(IJJ)V
 PLcom/android/server/am/BatteryStatsService;->lambda$noteProcessAnr$10(Ljava/lang/String;IJJ)V
-PLcom/android/server/am/BatteryStatsService;->lambda$noteProcessCrash$9(Ljava/lang/String;IJJ)V
-HSPLcom/android/server/am/BatteryStatsService;->lambda$noteProcessDied$100(II)V
+HPLcom/android/server/am/BatteryStatsService;->lambda$noteProcessCrash$9(Ljava/lang/String;IJJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
+HSPLcom/android/server/am/BatteryStatsService;->lambda$noteProcessDied$100(II)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
 HSPLcom/android/server/am/BatteryStatsService;->lambda$noteProcessFinish$11(Ljava/lang/String;IJJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
 HSPLcom/android/server/am/BatteryStatsService;->lambda$noteProcessStart$8(Ljava/lang/String;IJJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
 PLcom/android/server/am/BatteryStatsService;->lambda$noteResetAudio$55(JJ)V
@@ -8388,39 +8718,39 @@
 HSPLcom/android/server/am/BatteryStatsService;->lambda$noteScreenBrightness$38(IJJ)V
 HSPLcom/android/server/am/BatteryStatsService;->lambda$noteScreenState$37(IJJJ)V
 HSPLcom/android/server/am/BatteryStatsService;->lambda$noteServiceStartLaunch$104(ILjava/lang/String;Ljava/lang/String;JJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;]Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;
-HPLcom/android/server/am/BatteryStatsService;->lambda$noteServiceStartRunning$102(ILjava/lang/String;Ljava/lang/String;JJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;]Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;
-HPLcom/android/server/am/BatteryStatsService;->lambda$noteServiceStopLaunch$105(ILjava/lang/String;Ljava/lang/String;JJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;]Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;
+HSPLcom/android/server/am/BatteryStatsService;->lambda$noteServiceStartRunning$102(ILjava/lang/String;Ljava/lang/String;JJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;]Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;
+HSPLcom/android/server/am/BatteryStatsService;->lambda$noteServiceStopLaunch$105(ILjava/lang/String;Ljava/lang/String;JJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;]Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;
 HPLcom/android/server/am/BatteryStatsService;->lambda$noteServiceStopRunning$103(ILjava/lang/String;Ljava/lang/String;JJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;]Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg$Serv;
 HPLcom/android/server/am/BatteryStatsService;->lambda$noteStartAudio$51(IJJ)V
-PLcom/android/server/am/BatteryStatsService;->lambda$noteStartCamera$59(IJJ)V
-HSPLcom/android/server/am/BatteryStatsService;->lambda$noteStartSensor$31(IIJJ)V
-PLcom/android/server/am/BatteryStatsService;->lambda$noteStartVideo$53(IJJ)V
+HPLcom/android/server/am/BatteryStatsService;->lambda$noteStartCamera$59(IJJ)V
+HSPLcom/android/server/am/BatteryStatsService;->lambda$noteStartSensor$31(IIJJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
+HPLcom/android/server/am/BatteryStatsService;->lambda$noteStartVideo$53(IJJ)V
 HSPLcom/android/server/am/BatteryStatsService;->lambda$noteStartWakelock$22(IILjava/lang/String;Ljava/lang/String;IZJJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
 HSPLcom/android/server/am/BatteryStatsService;->lambda$noteStartWakelockFromSource$24(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IZJJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
 HPLcom/android/server/am/BatteryStatsService;->lambda$noteStopAudio$52(IJJ)V
-PLcom/android/server/am/BatteryStatsService;->lambda$noteStopCamera$60(IJJ)V
-HPLcom/android/server/am/BatteryStatsService;->lambda$noteStopSensor$32(IIJJ)V
+HPLcom/android/server/am/BatteryStatsService;->lambda$noteStopCamera$60(IJJ)V
+HPLcom/android/server/am/BatteryStatsService;->lambda$noteStopSensor$32(IIJJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
 HPLcom/android/server/am/BatteryStatsService;->lambda$noteStopVideo$54(IJJ)V
 HSPLcom/android/server/am/BatteryStatsService;->lambda$noteStopWakelock$23(IILjava/lang/String;Ljava/lang/String;IJJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
-HPLcom/android/server/am/BatteryStatsService;->lambda$noteStopWakelockFromSource$26(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IJJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
+HSPLcom/android/server/am/BatteryStatsService;->lambda$noteStopWakelockFromSource$26(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IJJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
 HPLcom/android/server/am/BatteryStatsService;->lambda$noteSyncFinish$15(Ljava/lang/String;IJJ)V
 HPLcom/android/server/am/BatteryStatsService;->lambda$noteSyncStart$14(Ljava/lang/String;IJJ)V
 HSPLcom/android/server/am/BatteryStatsService;->lambda$noteUidProcessState$12(IIJJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
 HSPLcom/android/server/am/BatteryStatsService;->lambda$noteUserActivity$39(IIJJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
-HPLcom/android/server/am/BatteryStatsService;->lambda$noteVibratorOff$34(IJJ)V
-HPLcom/android/server/am/BatteryStatsService;->lambda$noteVibratorOn$33(IJJJ)V
-PLcom/android/server/am/BatteryStatsService;->lambda$noteWakeUp$40(Ljava/lang/String;IJJ)V
-HPLcom/android/server/am/BatteryStatsService;->lambda$noteWakupAlarm$19(Ljava/lang/String;ILandroid/os/WorkSource;Ljava/lang/String;JJ)V
+HPLcom/android/server/am/BatteryStatsService;->lambda$noteVibratorOff$34(IJJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
+HSPLcom/android/server/am/BatteryStatsService;->lambda$noteVibratorOn$33(IJJJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
+HPLcom/android/server/am/BatteryStatsService;->lambda$noteWakeUp$40(Ljava/lang/String;IJJ)V
+HPLcom/android/server/am/BatteryStatsService;->lambda$noteWakupAlarm$19(Ljava/lang/String;ILandroid/os/WorkSource;Ljava/lang/String;JJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
 PLcom/android/server/am/BatteryStatsService;->lambda$noteWifiMulticastDisabled$75(IJJ)V
 PLcom/android/server/am/BatteryStatsService;->lambda$noteWifiMulticastEnabled$74(IJJ)V
 PLcom/android/server/am/BatteryStatsService;->lambda$noteWifiOff$50(JJ)V
-PLcom/android/server/am/BatteryStatsService;->lambda$noteWifiOn$49(JJ)V
-HPLcom/android/server/am/BatteryStatsService;->lambda$noteWifiRadioPowerState$63(IJIJJ)V
+HSPLcom/android/server/am/BatteryStatsService;->lambda$noteWifiOn$49(JJ)V
+HPLcom/android/server/am/BatteryStatsService;->lambda$noteWifiRadioPowerState$63(IJIJJ)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;]Lcom/android/server/am/BatteryExternalStatsWorker;Lcom/android/server/am/BatteryExternalStatsWorker;
 HPLcom/android/server/am/BatteryStatsService;->lambda$noteWifiRssiChanged$69(IJJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;
 HPLcom/android/server/am/BatteryStatsService;->lambda$noteWifiScanStartedFromSource$78(Landroid/os/WorkSource;JJ)V
 HPLcom/android/server/am/BatteryStatsService;->lambda$noteWifiScanStoppedFromSource$79(Landroid/os/WorkSource;JJ)V
 PLcom/android/server/am/BatteryStatsService;->lambda$noteWifiState$67(ILjava/lang/String;J)V
-PLcom/android/server/am/BatteryStatsService;->lambda$noteWifiSupplicantStateChanged$68(IZJJ)V
+HPLcom/android/server/am/BatteryStatsService;->lambda$noteWifiSupplicantStateChanged$68(IZJJ)V
 PLcom/android/server/am/BatteryStatsService;->lambda$onCleanupUser$4(IJ)V
 PLcom/android/server/am/BatteryStatsService;->lambda$onLowPowerModeChanged$1(Landroid/os/PowerSaveState;JJ)V
 PLcom/android/server/am/BatteryStatsService;->lambda$onUserRemoved$5(I)V
@@ -8431,12 +8761,12 @@
 HSPLcom/android/server/am/BatteryStatsService;->lambda$setBatteryState$94(IIIIIIIIJJJJ)V
 HSPLcom/android/server/am/BatteryStatsService;->lambda$setBatteryState$95(IIIIIIIIJJJJ)V+]Lcom/android/internal/os/BatteryStatsImpl;Lcom/android/internal/os/BatteryStatsImpl;]Lcom/android/server/am/BatteryExternalStatsWorker;Lcom/android/server/am/BatteryExternalStatsWorker;
 HSPLcom/android/server/am/BatteryStatsService;->lambda$setBatteryState$96(IIIIIIIIJJJJ)V+]Lcom/android/server/am/BatteryExternalStatsWorker;Lcom/android/server/am/BatteryExternalStatsWorker;
-HPLcom/android/server/am/BatteryStatsService;->lambda$updateBatteryStatsOnActivityUsage$99(ZIJJ)V
+HSPLcom/android/server/am/BatteryStatsService;->lambda$updateBatteryStatsOnActivityUsage$99(ZIJJ)V
 HPLcom/android/server/am/BatteryStatsService;->lambda$updateForegroundTimeIfOnBattery$97(ILjava/lang/String;JJJ)V
 HPLcom/android/server/am/BatteryStatsService;->monitor()V
 HPLcom/android/server/am/BatteryStatsService;->noteAlarmFinish(Ljava/lang/String;Landroid/os/WorkSource;I)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
 HSPLcom/android/server/am/BatteryStatsService;->noteAlarmStart(Ljava/lang/String;Landroid/os/WorkSource;I)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
-PLcom/android/server/am/BatteryStatsService;->noteBleScanReset()V
+HSPLcom/android/server/am/BatteryStatsService;->noteBleScanReset()V
 HPLcom/android/server/am/BatteryStatsService;->noteBleScanResults(Landroid/os/WorkSource;I)V
 HPLcom/android/server/am/BatteryStatsService;->noteBleScanStarted(Landroid/os/WorkSource;Z)V
 HPLcom/android/server/am/BatteryStatsService;->noteBleScanStopped(Landroid/os/WorkSource;Z)V
@@ -8455,7 +8785,7 @@
 HPLcom/android/server/am/BatteryStatsService;->noteGpsSignalQuality(I)V
 HSPLcom/android/server/am/BatteryStatsService;->noteInteractive(Z)V
 HPLcom/android/server/am/BatteryStatsService;->noteJobFinish(Ljava/lang/String;II)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
-HPLcom/android/server/am/BatteryStatsService;->noteJobStart(Ljava/lang/String;I)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
+HSPLcom/android/server/am/BatteryStatsService;->noteJobStart(Ljava/lang/String;I)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
 HPLcom/android/server/am/BatteryStatsService;->noteJobsDeferred(IIJ)V
 HPLcom/android/server/am/BatteryStatsService;->noteLongPartialWakelockFinish(Ljava/lang/String;Ljava/lang/String;I)V
 HPLcom/android/server/am/BatteryStatsService;->noteLongPartialWakelockFinishFromSource(Ljava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
@@ -8469,48 +8799,48 @@
 HPLcom/android/server/am/BatteryStatsService;->notePhoneDataConnectionState(IZII)V
 PLcom/android/server/am/BatteryStatsService;->notePhoneOff()V
 PLcom/android/server/am/BatteryStatsService;->notePhoneOn()V
-HPLcom/android/server/am/BatteryStatsService;->notePhoneSignalStrength(Landroid/telephony/SignalStrength;)V
+HPLcom/android/server/am/BatteryStatsService;->notePhoneSignalStrength(Landroid/telephony/SignalStrength;)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
 HPLcom/android/server/am/BatteryStatsService;->notePhoneState(I)V
 PLcom/android/server/am/BatteryStatsService;->noteProcessAnr(Ljava/lang/String;I)V
-HPLcom/android/server/am/BatteryStatsService;->noteProcessCrash(Ljava/lang/String;I)V
+HPLcom/android/server/am/BatteryStatsService;->noteProcessCrash(Ljava/lang/String;I)V+]Landroid/os/Handler;Landroid/os/Handler;
 HSPLcom/android/server/am/BatteryStatsService;->noteProcessDied(II)V+]Landroid/os/Handler;Landroid/os/Handler;
 HSPLcom/android/server/am/BatteryStatsService;->noteProcessFinish(Ljava/lang/String;I)V+]Landroid/os/Handler;Landroid/os/Handler;
 HSPLcom/android/server/am/BatteryStatsService;->noteProcessStart(Ljava/lang/String;I)V+]Landroid/os/Handler;Landroid/os/Handler;
-PLcom/android/server/am/BatteryStatsService;->noteResetAudio()V
+HPLcom/android/server/am/BatteryStatsService;->noteResetAudio()V
 PLcom/android/server/am/BatteryStatsService;->noteResetCamera()V
 PLcom/android/server/am/BatteryStatsService;->noteResetFlashlight()V
 PLcom/android/server/am/BatteryStatsService;->noteResetVideo()V
 HSPLcom/android/server/am/BatteryStatsService;->noteScreenBrightness(I)V
 HSPLcom/android/server/am/BatteryStatsService;->noteScreenState(I)V
 HSPLcom/android/server/am/BatteryStatsService;->noteServiceStartLaunch(ILjava/lang/String;Ljava/lang/String;)V+]Landroid/os/Handler;Landroid/os/Handler;
-HPLcom/android/server/am/BatteryStatsService;->noteServiceStartRunning(ILjava/lang/String;Ljava/lang/String;)V+]Landroid/os/Handler;Landroid/os/Handler;
-HPLcom/android/server/am/BatteryStatsService;->noteServiceStopLaunch(ILjava/lang/String;Ljava/lang/String;)V+]Landroid/os/Handler;Landroid/os/Handler;
+HSPLcom/android/server/am/BatteryStatsService;->noteServiceStartRunning(ILjava/lang/String;Ljava/lang/String;)V+]Landroid/os/Handler;Landroid/os/Handler;
+HSPLcom/android/server/am/BatteryStatsService;->noteServiceStopLaunch(ILjava/lang/String;Ljava/lang/String;)V+]Landroid/os/Handler;Landroid/os/Handler;
 HPLcom/android/server/am/BatteryStatsService;->noteServiceStopRunning(ILjava/lang/String;Ljava/lang/String;)V+]Landroid/os/Handler;Landroid/os/Handler;
 HPLcom/android/server/am/BatteryStatsService;->noteStartAudio(I)V
 HPLcom/android/server/am/BatteryStatsService;->noteStartCamera(I)V
-HSPLcom/android/server/am/BatteryStatsService;->noteStartSensor(II)V
+HSPLcom/android/server/am/BatteryStatsService;->noteStartSensor(II)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
 HPLcom/android/server/am/BatteryStatsService;->noteStartVideo(I)V
 HSPLcom/android/server/am/BatteryStatsService;->noteStartWakelock(IILjava/lang/String;Ljava/lang/String;IZ)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
 HSPLcom/android/server/am/BatteryStatsService;->noteStartWakelockFromSource(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;IZ)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
 HPLcom/android/server/am/BatteryStatsService;->noteStopAudio(I)V
 HPLcom/android/server/am/BatteryStatsService;->noteStopCamera(I)V
-HPLcom/android/server/am/BatteryStatsService;->noteStopSensor(II)V
+HPLcom/android/server/am/BatteryStatsService;->noteStopSensor(II)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
 HPLcom/android/server/am/BatteryStatsService;->noteStopVideo(I)V
 HSPLcom/android/server/am/BatteryStatsService;->noteStopWakelock(IILjava/lang/String;Ljava/lang/String;I)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
-HPLcom/android/server/am/BatteryStatsService;->noteStopWakelockFromSource(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;I)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
+HSPLcom/android/server/am/BatteryStatsService;->noteStopWakelockFromSource(Landroid/os/WorkSource;ILjava/lang/String;Ljava/lang/String;I)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
 HPLcom/android/server/am/BatteryStatsService;->noteSyncFinish(Ljava/lang/String;I)V
 HPLcom/android/server/am/BatteryStatsService;->noteSyncStart(Ljava/lang/String;I)V
 HSPLcom/android/server/am/BatteryStatsService;->noteUidProcessState(II)V+]Landroid/os/Handler;Landroid/os/Handler;
 HSPLcom/android/server/am/BatteryStatsService;->noteUserActivity(II)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
-HPLcom/android/server/am/BatteryStatsService;->noteVibratorOff(I)V
-HPLcom/android/server/am/BatteryStatsService;->noteVibratorOn(IJ)V
+HPLcom/android/server/am/BatteryStatsService;->noteVibratorOff(I)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
+HSPLcom/android/server/am/BatteryStatsService;->noteVibratorOn(IJ)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
 HPLcom/android/server/am/BatteryStatsService;->noteWakeUp(Ljava/lang/String;I)V
-HPLcom/android/server/am/BatteryStatsService;->noteWakupAlarm(Ljava/lang/String;ILandroid/os/WorkSource;Ljava/lang/String;)V
+HPLcom/android/server/am/BatteryStatsService;->noteWakupAlarm(Ljava/lang/String;ILandroid/os/WorkSource;Ljava/lang/String;)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
 HPLcom/android/server/am/BatteryStatsService;->noteWifiMulticastDisabled(I)V
 HPLcom/android/server/am/BatteryStatsService;->noteWifiMulticastEnabled(I)V
 PLcom/android/server/am/BatteryStatsService;->noteWifiOff()V
-PLcom/android/server/am/BatteryStatsService;->noteWifiOn()V
-HPLcom/android/server/am/BatteryStatsService;->noteWifiRadioPowerState(IJI)V
+HSPLcom/android/server/am/BatteryStatsService;->noteWifiOn()V
+HPLcom/android/server/am/BatteryStatsService;->noteWifiRadioPowerState(IJI)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
 HPLcom/android/server/am/BatteryStatsService;->noteWifiRssiChanged(I)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;
 HPLcom/android/server/am/BatteryStatsService;->noteWifiScanStartedFromSource(Landroid/os/WorkSource;)V
 HPLcom/android/server/am/BatteryStatsService;->noteWifiScanStoppedFromSource(Landroid/os/WorkSource;)V
@@ -8534,7 +8864,7 @@
 HSPLcom/android/server/am/BatteryStatsService;->syncStats(Ljava/lang/String;I)V
 HSPLcom/android/server/am/BatteryStatsService;->systemServicesReady()V
 HPLcom/android/server/am/BatteryStatsService;->takeUidSnapshot(I)Landroid/os/health/HealthStatsParceler;
-HPLcom/android/server/am/BatteryStatsService;->updateBatteryStatsOnActivityUsage(Ljava/lang/String;Ljava/lang/String;IIZ)V
+HSPLcom/android/server/am/BatteryStatsService;->updateBatteryStatsOnActivityUsage(Ljava/lang/String;Ljava/lang/String;IIZ)V
 HPLcom/android/server/am/BatteryStatsService;->updateForegroundTimeIfOnBattery(Ljava/lang/String;IJ)V
 HSPLcom/android/server/am/BroadcastConstants$SettingsObserver;-><init>(Lcom/android/server/am/BroadcastConstants;Landroid/os/Handler;)V
 HSPLcom/android/server/am/BroadcastConstants;-><clinit>()V
@@ -8554,7 +8884,7 @@
 PLcom/android/server/am/BroadcastDispatcher$Deferrals;->size()I
 PLcom/android/server/am/BroadcastDispatcher$DeferredBootCompletedBroadcastPerUser;->-$$Nest$mgetBootCompletedBroadcastsUidsSize(Lcom/android/server/am/BroadcastDispatcher$DeferredBootCompletedBroadcastPerUser;Ljava/lang/String;)I
 HSPLcom/android/server/am/BroadcastDispatcher$DeferredBootCompletedBroadcastPerUser;-><init>(I)V
-HSPLcom/android/server/am/BroadcastDispatcher$DeferredBootCompletedBroadcastPerUser;->dequeueDeferredBootCompletedBroadcast(Landroid/util/SparseArray;Landroid/util/SparseBooleanArray;Z)Lcom/android/server/am/BroadcastRecord;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
+HSPLcom/android/server/am/BroadcastDispatcher$DeferredBootCompletedBroadcastPerUser;->dequeueDeferredBootCompletedBroadcast(Landroid/util/SparseArray;Landroid/util/SparseBooleanArray;Z)Lcom/android/server/am/BroadcastRecord;+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/am/BroadcastDispatcher$DeferredBootCompletedBroadcastPerUser;->dequeueDeferredBootCompletedBroadcast(Z)Lcom/android/server/am/BroadcastRecord;
 PLcom/android/server/am/BroadcastDispatcher$DeferredBootCompletedBroadcastPerUser;->dump(Lcom/android/server/am/BroadcastDispatcher$Dumper;Ljava/lang/String;)V
 PLcom/android/server/am/BroadcastDispatcher$DeferredBootCompletedBroadcastPerUser;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
@@ -8575,11 +8905,11 @@
 PLcom/android/server/am/BroadcastDispatcher;->-$$Nest$fputmRecheckScheduled(Lcom/android/server/am/BroadcastDispatcher;Z)V
 PLcom/android/server/am/BroadcastDispatcher;->-$$Nest$sminsertLocked(Ljava/util/ArrayList;Lcom/android/server/am/BroadcastDispatcher$Deferrals;)V
 HSPLcom/android/server/am/BroadcastDispatcher;-><init>(Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastConstants;Landroid/os/Handler;Ljava/lang/Object;)V
-PLcom/android/server/am/BroadcastDispatcher;->addDeferredBroadcast(ILcom/android/server/am/BroadcastRecord;)V
+HPLcom/android/server/am/BroadcastDispatcher;->addDeferredBroadcast(ILcom/android/server/am/BroadcastRecord;)V
 PLcom/android/server/am/BroadcastDispatcher;->calculateDeferral(J)J
 HSPLcom/android/server/am/BroadcastDispatcher;->cleanupBroadcastListDisabledReceiversLocked(Ljava/util/ArrayList;Ljava/lang/String;Ljava/util/Set;IZ)Z+]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
-HSPLcom/android/server/am/BroadcastDispatcher;->cleanupDeferralsListDisabledReceiversLocked(Ljava/util/ArrayList;Ljava/lang/String;Ljava/util/Set;IZ)Z+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
-HSPLcom/android/server/am/BroadcastDispatcher;->cleanupDisabledPackageReceiversLocked(Ljava/lang/String;Ljava/util/Set;IZ)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;]Lcom/android/server/am/BroadcastDispatcher;Lcom/android/server/am/BroadcastDispatcher;
+HSPLcom/android/server/am/BroadcastDispatcher;->cleanupDeferralsListDisabledReceiversLocked(Ljava/util/ArrayList;Ljava/lang/String;Ljava/util/Set;IZ)Z+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/server/am/BroadcastDispatcher;Lcom/android/server/am/BroadcastDispatcher;
+HSPLcom/android/server/am/BroadcastDispatcher;->cleanupDisabledPackageReceiversLocked(Ljava/lang/String;Ljava/util/Set;IZ)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;]Lcom/android/server/am/BroadcastDispatcher;Lcom/android/server/am/BroadcastDispatcher;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/am/BroadcastDispatcher;->dequeueDeferredBootCompletedBroadcast()Lcom/android/server/am/BroadcastRecord;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/BroadcastDispatcher$DeferredBootCompletedBroadcastPerUser;Lcom/android/server/am/BroadcastDispatcher$DeferredBootCompletedBroadcastPerUser;
 PLcom/android/server/am/BroadcastDispatcher;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 PLcom/android/server/am/BroadcastDispatcher;->dumpLocked(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Ljava/text/SimpleDateFormat;)Z
@@ -8590,8 +8920,8 @@
 PLcom/android/server/am/BroadcastDispatcher;->getBootCompletedBroadcastsUidsSize(Ljava/lang/String;)I
 HSPLcom/android/server/am/BroadcastDispatcher;->getDeferredPerUser(I)Lcom/android/server/am/BroadcastDispatcher$DeferredBootCompletedBroadcastPerUser;
 HSPLcom/android/server/am/BroadcastDispatcher;->getNextBroadcastLocked(J)Lcom/android/server/am/BroadcastRecord;+]Lcom/android/server/am/BroadcastDispatcher;Lcom/android/server/am/BroadcastDispatcher;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-PLcom/android/server/am/BroadcastDispatcher;->insertLocked(Ljava/util/ArrayList;Lcom/android/server/am/BroadcastDispatcher$Deferrals;)V
-PLcom/android/server/am/BroadcastDispatcher;->isDeferralsListEmpty(Ljava/util/ArrayList;)Z
+HPLcom/android/server/am/BroadcastDispatcher;->insertLocked(Ljava/util/ArrayList;Lcom/android/server/am/BroadcastDispatcher$Deferrals;)V
+HPLcom/android/server/am/BroadcastDispatcher;->isDeferralsListEmpty(Ljava/util/ArrayList;)Z
 HSPLcom/android/server/am/BroadcastDispatcher;->isDeferringLocked(I)Z+]Lcom/android/server/am/BroadcastDispatcher;Lcom/android/server/am/BroadcastDispatcher;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 PLcom/android/server/am/BroadcastDispatcher;->isEmpty()Z
 HPLcom/android/server/am/BroadcastDispatcher;->isIdle()Z
@@ -8599,19 +8929,19 @@
 PLcom/android/server/am/BroadcastDispatcher;->popLocked(Ljava/util/ArrayList;)Lcom/android/server/am/BroadcastRecord;
 PLcom/android/server/am/BroadcastDispatcher;->removeDeferral(Lcom/android/server/am/BroadcastDispatcher$Deferrals;)Z
 HPLcom/android/server/am/BroadcastDispatcher;->replaceBroadcastLocked(Lcom/android/server/am/BroadcastRecord;Ljava/lang/String;)Lcom/android/server/am/BroadcastRecord;
-HPLcom/android/server/am/BroadcastDispatcher;->replaceBroadcastLocked(Ljava/util/ArrayList;Lcom/android/server/am/BroadcastRecord;Ljava/lang/String;)Lcom/android/server/am/BroadcastRecord;
+HPLcom/android/server/am/BroadcastDispatcher;->replaceBroadcastLocked(Ljava/util/ArrayList;Lcom/android/server/am/BroadcastRecord;Ljava/lang/String;)Lcom/android/server/am/BroadcastRecord;+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/content/Intent;Landroid/content/Intent;
 HPLcom/android/server/am/BroadcastDispatcher;->replaceDeferredBroadcastLocked(Ljava/util/ArrayList;Lcom/android/server/am/BroadcastRecord;Ljava/lang/String;)Lcom/android/server/am/BroadcastRecord;
 HSPLcom/android/server/am/BroadcastDispatcher;->retireBroadcastLocked(Lcom/android/server/am/BroadcastRecord;)V
-HSPLcom/android/server/am/BroadcastDispatcher;->scheduleDeferralCheckLocked(Z)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/os/Handler;Lcom/android/server/am/BroadcastQueue$BroadcastHandler;
+HSPLcom/android/server/am/BroadcastDispatcher;->scheduleDeferralCheckLocked(Z)V+]Landroid/os/Handler;Lcom/android/server/am/BroadcastQueue$BroadcastHandler;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/am/BroadcastDispatcher;->start()V
 HPLcom/android/server/am/BroadcastDispatcher;->startDeferring(I)V
 HSPLcom/android/server/am/BroadcastDispatcher;->updateUidReadyForBootCompletedBroadcastLocked(I)V
 HSPLcom/android/server/am/BroadcastFilter;-><init>(Landroid/content/IntentFilter;Lcom/android/server/am/ReceiverList;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIZZZ)V
 PLcom/android/server/am/BroadcastFilter;->dumpBrief(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/am/BroadcastFilter;->dumpBroadcastFilterState(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/am/BroadcastFilter;->dumpBroadcastFilterState(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HPLcom/android/server/am/BroadcastFilter;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HPLcom/android/server/am/BroadcastFilter;->dumpInReceiverList(Ljava/io/PrintWriter;Landroid/util/Printer;Ljava/lang/String;)V
-HPLcom/android/server/am/BroadcastFilter;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/am/BroadcastFilter;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HPLcom/android/server/am/BroadcastQueue$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/BroadcastRecord;)V
 PLcom/android/server/am/BroadcastQueue$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/am/BroadcastQueue$BroadcastHandler;-><init>(Lcom/android/server/am/BroadcastQueue;Landroid/os/Looper;)V
@@ -8627,7 +8957,7 @@
 HSPLcom/android/server/am/BroadcastQueue;->cancelBroadcastTimeoutLocked()V+]Landroid/os/Handler;Lcom/android/server/am/BroadcastQueue$BroadcastHandler;
 HSPLcom/android/server/am/BroadcastQueue;->cleanupDisabledPackageReceiversLocked(Ljava/lang/String;Ljava/util/Set;IZ)Z+]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;]Lcom/android/server/am/BroadcastDispatcher;Lcom/android/server/am/BroadcastDispatcher;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/am/BroadcastQueue;->createBroadcastTraceTitle(Lcom/android/server/am/BroadcastRecord;I)Ljava/lang/String;+]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Landroid/content/Intent;Landroid/content/Intent;
-HSPLcom/android/server/am/BroadcastQueue;->deliverToRegisteredReceiverLocked(Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastFilter;ZI)V+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/IIntentReceiver;Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;,Landroid/content/IIntentReceiver$Stub$Proxy;]Lcom/android/server/firewall/IntentFirewall;Lcom/android/server/firewall/IntentFirewall;]Lcom/android/server/am/ProcessErrorStateRecord;Lcom/android/server/am/ProcessErrorStateRecord;]Lcom/android/server/am/ProcessReceiverRecord;Lcom/android/server/am/ProcessReceiverRecord;]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueue;]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/am/BroadcastQueue;->deliverToRegisteredReceiverLocked(Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastFilter;ZI)V+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/IIntentReceiver;Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;,Landroid/content/IIntentReceiver$Stub$Proxy;]Lcom/android/server/firewall/IntentFirewall;Lcom/android/server/firewall/IntentFirewall;]Lcom/android/server/am/ProcessErrorStateRecord;Lcom/android/server/am/ProcessErrorStateRecord;]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueue;]Lcom/android/server/am/ProcessReceiverRecord;Lcom/android/server/am/ProcessReceiverRecord;]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/content/Intent;Landroid/content/Intent;
 HPLcom/android/server/am/BroadcastQueue;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HPLcom/android/server/am/BroadcastQueue;->dumpLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;Z)Z
 HSPLcom/android/server/am/BroadcastQueue;->enqueueBroadcastHelper(Lcom/android/server/am/BroadcastRecord;)V+]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueue;
@@ -8636,27 +8966,27 @@
 HSPLcom/android/server/am/BroadcastQueue;->finishReceiverLocked(Lcom/android/server/am/BroadcastRecord;ILjava/lang/String;Landroid/os/Bundle;ZZ)Z+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueue;]Lcom/android/server/am/ProcessReceiverRecord;Lcom/android/server/am/ProcessReceiverRecord;]Lcom/android/server/am/BroadcastDispatcher;Lcom/android/server/am/BroadcastDispatcher;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/BroadcastQueue;->getMatchingOrderedReceiver(Landroid/os/IBinder;)Lcom/android/server/am/BroadcastRecord;+]Lcom/android/server/am/BroadcastDispatcher;Lcom/android/server/am/BroadcastDispatcher;
 HPLcom/android/server/am/BroadcastQueue;->getTargetPackage(Lcom/android/server/am/BroadcastRecord;)Ljava/lang/String;
-PLcom/android/server/am/BroadcastQueue;->getUsageStatsManagerInternal()Landroid/app/usage/UsageStatsManagerInternal;
+HPLcom/android/server/am/BroadcastQueue;->getUsageStatsManagerInternal()Landroid/app/usage/UsageStatsManagerInternal;
 HSPLcom/android/server/am/BroadcastQueue;->isPendingBroadcastProcessLocked(I)Z+]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 PLcom/android/server/am/BroadcastQueue;->isPendingBroadcastProcessLocked(Lcom/android/server/am/ProcessRecord;)Z
-HPLcom/android/server/am/BroadcastQueue;->isSignaturePerm([Ljava/lang/String;)Z+]Landroid/permission/IPermissionManager;Lcom/android/server/pm/permission/PermissionManagerService;
+HSPLcom/android/server/am/BroadcastQueue;->isSignaturePerm([Ljava/lang/String;)Z+]Landroid/permission/IPermissionManager;Lcom/android/server/pm/permission/PermissionManagerService;
 PLcom/android/server/am/BroadcastQueue;->lambda$postActivityStartTokenRemoval$0(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/BroadcastRecord;)V
-HPLcom/android/server/am/BroadcastQueue;->logBootCompletedBroadcastCompletionLatencyIfPossible(Lcom/android/server/am/BroadcastRecord;)V+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Intent;Landroid/content/Intent;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;
+HSPLcom/android/server/am/BroadcastQueue;->logBootCompletedBroadcastCompletionLatencyIfPossible(Lcom/android/server/am/BroadcastRecord;)V+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Intent;Landroid/content/Intent;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;
 HPLcom/android/server/am/BroadcastQueue;->logBroadcastReceiverDiscardLocked(Lcom/android/server/am/BroadcastRecord;)V
 HSPLcom/android/server/am/BroadcastQueue;->maybeAddAllowBackgroundActivityStartsToken(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/BroadcastRecord;)V+]Landroid/os/Handler;Lcom/android/server/am/BroadcastQueue$BroadcastHandler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/BroadcastQueue;->maybeReportBroadcastDispatchedEventLocked(Lcom/android/server/am/BroadcastRecord;I)V+]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueue;]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;
 HSPLcom/android/server/am/BroadcastQueue;->maybeScheduleTempAllowlistLocked(ILcom/android/server/am/BroadcastRecord;Landroid/app/BroadcastOptions;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 PLcom/android/server/am/BroadcastQueue;->nextSplitTokenLocked()I
-HPLcom/android/server/am/BroadcastQueue;->noteOpForManifestReceiver(ILcom/android/server/am/BroadcastRecord;Landroid/content/pm/ResolveInfo;Landroid/content/ComponentName;)Z
-HPLcom/android/server/am/BroadcastQueue;->noteOpForManifestReceiverInner(ILcom/android/server/am/BroadcastRecord;Landroid/content/pm/ResolveInfo;Landroid/content/ComponentName;Ljava/lang/String;)Z
-HSPLcom/android/server/am/BroadcastQueue;->performReceiveLocked(Lcom/android/server/am/ProcessRecord;Landroid/content/IIntentReceiver;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZI)V+]Landroid/content/IIntentReceiver;megamorphic_types]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HPLcom/android/server/am/BroadcastQueue;->noteOpForManifestReceiver(ILcom/android/server/am/BroadcastRecord;Landroid/content/pm/ResolveInfo;Landroid/content/ComponentName;)Z+]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueue;
+HPLcom/android/server/am/BroadcastQueue;->noteOpForManifestReceiverInner(ILcom/android/server/am/BroadcastRecord;Landroid/content/pm/ResolveInfo;Landroid/content/ComponentName;Ljava/lang/String;)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HSPLcom/android/server/am/BroadcastQueue;->performReceiveLocked(Lcom/android/server/am/ProcessRecord;Landroid/content/IIntentReceiver;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;ZZIII)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/IIntentReceiver;megamorphic_types]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;
 HPLcom/android/server/am/BroadcastQueue;->postActivityStartTokenRemoval(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/BroadcastRecord;)V
-HSPLcom/android/server/am/BroadcastQueue;->processCurBroadcastLocked(Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/ProcessReceiverRecord;Lcom/android/server/am/ProcessReceiverRecord;]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueue;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HSPLcom/android/server/am/BroadcastQueue;->processCurBroadcastLocked(Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/ProcessRecord;II)V+]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueue;]Lcom/android/server/am/ProcessReceiverRecord;Lcom/android/server/am/ProcessReceiverRecord;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/BroadcastQueue;->processNextBroadcast(Z)V+]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueue;
-HSPLcom/android/server/am/BroadcastQueue;->processNextBroadcastLocked(ZZ)V+]Lcom/android/server/am/ActivityManagerService$PidMap;Lcom/android/server/am/ActivityManagerService$PidMap;]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Lcom/android/server/am/ProcessErrorStateRecord;Lcom/android/server/am/ProcessErrorStateRecord;]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Lcom/android/server/am/BroadcastDispatcher;Lcom/android/server/am/BroadcastDispatcher;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/firewall/IntentFirewall;Lcom/android/server/firewall/IntentFirewall;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueue;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/internal/app/ProcessMap;Lcom/android/server/am/ProcessList$MyProcessMap;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
-HSPLcom/android/server/am/BroadcastQueue;->replaceBroadcastLocked(Ljava/util/ArrayList;Lcom/android/server/am/BroadcastRecord;Ljava/lang/String;)Lcom/android/server/am/BroadcastRecord;
+HSPLcom/android/server/am/BroadcastQueue;->processNextBroadcastLocked(ZZ)V+]Lcom/android/server/am/ActivityManagerService$PidMap;Lcom/android/server/am/ActivityManagerService$PidMap;]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Lcom/android/server/am/ProcessErrorStateRecord;Lcom/android/server/am/ProcessErrorStateRecord;]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Lcom/android/server/am/BroadcastDispatcher;Lcom/android/server/am/BroadcastDispatcher;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/firewall/IntentFirewall;Lcom/android/server/firewall/IntentFirewall;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueue;]Lcom/android/server/am/BroadcastRecord;Lcom/android/server/am/BroadcastRecord;]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/internal/app/ProcessMap;Lcom/android/server/am/ProcessList$MyProcessMap;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/am/BroadcastQueue;->replaceBroadcastLocked(Ljava/util/ArrayList;Lcom/android/server/am/BroadcastRecord;Ljava/lang/String;)Lcom/android/server/am/BroadcastRecord;+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/content/Intent;Landroid/content/Intent;
 HPLcom/android/server/am/BroadcastQueue;->replaceOrderedBroadcastLocked(Lcom/android/server/am/BroadcastRecord;)Lcom/android/server/am/BroadcastRecord;
-HSPLcom/android/server/am/BroadcastQueue;->replaceParallelBroadcastLocked(Lcom/android/server/am/BroadcastRecord;)Lcom/android/server/am/BroadcastRecord;
+HSPLcom/android/server/am/BroadcastQueue;->replaceParallelBroadcastLocked(Lcom/android/server/am/BroadcastRecord;)Lcom/android/server/am/BroadcastRecord;+]Lcom/android/server/am/BroadcastQueue;Lcom/android/server/am/BroadcastQueue;
 HSPLcom/android/server/am/BroadcastQueue;->requestStartTargetPermissionsReviewIfNeededLocked(Lcom/android/server/am/BroadcastRecord;Ljava/lang/String;I)Z+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/BroadcastQueue;->ringAdvance(III)I
 HSPLcom/android/server/am/BroadcastQueue;->scheduleBroadcastsLocked()V+]Landroid/os/Handler;Lcom/android/server/am/BroadcastQueue$BroadcastHandler;
@@ -8664,13 +8994,13 @@
 HSPLcom/android/server/am/BroadcastQueue;->setBroadcastTimeoutLocked(J)V+]Landroid/os/Handler;Lcom/android/server/am/BroadcastQueue$BroadcastHandler;
 HSPLcom/android/server/am/BroadcastQueue;->skipCurrentReceiverLocked(Lcom/android/server/am/ProcessRecord;)V
 PLcom/android/server/am/BroadcastQueue;->skipPendingBroadcastLocked(I)V
-PLcom/android/server/am/BroadcastQueue;->skipReceiverLocked(Lcom/android/server/am/BroadcastRecord;)V
+HPLcom/android/server/am/BroadcastQueue;->skipReceiverLocked(Lcom/android/server/am/BroadcastRecord;)V
 HSPLcom/android/server/am/BroadcastQueue;->start(Landroid/content/ContentResolver;)V
 PLcom/android/server/am/BroadcastQueue;->toString()Ljava/lang/String;
 HSPLcom/android/server/am/BroadcastQueue;->updateUidReadyForBootCompletedBroadcastLocked(I)V
 HSPLcom/android/server/am/BroadcastRecord;-><clinit>()V
 HSPLcom/android/server/am/BroadcastRecord;-><init>(Lcom/android/server/am/BroadcastQueue;Landroid/content/Intent;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;IIZLjava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ILandroid/app/BroadcastOptions;Ljava/util/List;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;ZZZIZLandroid/os/IBinder;Z)V+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Intent;Landroid/content/Intent;
-HPLcom/android/server/am/BroadcastRecord;-><init>(Lcom/android/server/am/BroadcastRecord;Landroid/content/Intent;)V+]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/am/BroadcastRecord;-><init>(Lcom/android/server/am/BroadcastRecord;Landroid/content/Intent;)V+]Landroid/content/Intent;Landroid/content/Intent;
 HPLcom/android/server/am/BroadcastRecord;->cleanupDisabledPackageReceiversLocked(Ljava/lang/String;Ljava/util/Set;IZ)Z+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Set;Landroid/util/ArraySet;
 HPLcom/android/server/am/BroadcastRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/text/SimpleDateFormat;)V
 PLcom/android/server/am/BroadcastRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
@@ -8684,10 +9014,10 @@
 PLcom/android/server/am/BroadcastStats$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLcom/android/server/am/BroadcastStats$ActionEntry;-><init>(Ljava/lang/String;)V
 HSPLcom/android/server/am/BroadcastStats$PackageEntry;-><init>()V
-PLcom/android/server/am/BroadcastStats$ViolationEntry;-><init>()V
+HSPLcom/android/server/am/BroadcastStats$ViolationEntry;-><init>()V
 HSPLcom/android/server/am/BroadcastStats;-><clinit>()V
 HSPLcom/android/server/am/BroadcastStats;-><init>()V
-HPLcom/android/server/am/BroadcastStats;->addBackgroundCheckViolation(Ljava/lang/String;Ljava/lang/String;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HSPLcom/android/server/am/BroadcastStats;->addBackgroundCheckViolation(Ljava/lang/String;Ljava/lang/String;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/am/BroadcastStats;->addBroadcast(Ljava/lang/String;Ljava/lang/String;IIJ)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 PLcom/android/server/am/BroadcastStats;->dumpStats(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;)Z
 PLcom/android/server/am/BugReportHandlerUtil$BugreportHandlerResponseBroadcastReceiver;-><init>(Ljava/lang/String;I)V
@@ -8773,7 +9103,7 @@
 HPLcom/android/server/am/CachedAppOptimizer$LastCompactionStats;->getRssAfterCompaction()[J
 HSPLcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;-><init>(Lcom/android/server/am/CachedAppOptimizer;)V
 HSPLcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;-><init>(Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer$MemCompactionHandler-IA;)V
-HPLcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Random;Ljava/util/Random;]Ljava/util/LinkedHashMap;Lcom/android/server/am/CachedAppOptimizer$3;]Lcom/android/server/am/CachedAppOptimizer$ProcessDependencies;Lcom/android/server/am/CachedAppOptimizer$DefaultProcessDependencies;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]Lcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;Lcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/CachedAppOptimizer$LastCompactionStats;Lcom/android/server/am/CachedAppOptimizer$LastCompactionStats;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Ljava/util/Set;Ljava/util/HashSet;
+HPLcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Random;Ljava/util/Random;]Ljava/util/LinkedHashMap;Lcom/android/server/am/CachedAppOptimizer$3;]Lcom/android/server/am/CachedAppOptimizer$ProcessDependencies;Lcom/android/server/am/CachedAppOptimizer$DefaultProcessDependencies;]Lcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;Lcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/CachedAppOptimizer$LastCompactionStats;Lcom/android/server/am/CachedAppOptimizer$LastCompactionStats;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Ljava/util/Set;Ljava/util/HashSet;
 HPLcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;->shouldOomAdjThrottleCompaction(Lcom/android/server/am/ProcessRecord;I)Z+]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;
 HPLcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;->shouldRssThrottleCompaction(IILjava/lang/String;[J)Z+]Lcom/android/server/am/CachedAppOptimizer$LastCompactionStats;Lcom/android/server/am/CachedAppOptimizer$LastCompactionStats;]Ljava/util/LinkedHashMap;Lcom/android/server/am/CachedAppOptimizer$3;
 HPLcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;->shouldThrottleMiscCompaction(Lcom/android/server/am/ProcessRecord;II)Z+]Ljava/util/Set;Ljava/util/HashSet;
@@ -8783,7 +9113,7 @@
 HSPLcom/android/server/am/CachedAppOptimizer;->$r8$lambda$3a50SP4bOWEikd4_qR_bOwkAI3c(Lcom/android/server/am/CachedAppOptimizer;Z)V
 HSPLcom/android/server/am/CachedAppOptimizer;->$r8$lambda$b_Fsd67l4yWRrHGFXnVZn4jrGi8(Lcom/android/server/am/CachedAppOptimizer;ZLcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/CachedAppOptimizer;->-$$Nest$fgetmAm(Lcom/android/server/am/CachedAppOptimizer;)Lcom/android/server/am/ActivityManagerService;
-PLcom/android/server/am/CachedAppOptimizer;->-$$Nest$fgetmBfgsCompactionCount(Lcom/android/server/am/CachedAppOptimizer;)I
+HPLcom/android/server/am/CachedAppOptimizer;->-$$Nest$fgetmBfgsCompactionCount(Lcom/android/server/am/CachedAppOptimizer;)I
 PLcom/android/server/am/CachedAppOptimizer;->-$$Nest$fgetmFreezeHandler(Lcom/android/server/am/CachedAppOptimizer;)Landroid/os/Handler;
 HPLcom/android/server/am/CachedAppOptimizer;->-$$Nest$fgetmFreezerOverride(Lcom/android/server/am/CachedAppOptimizer;)Z
 HPLcom/android/server/am/CachedAppOptimizer;->-$$Nest$fgetmFrozenProcesses(Lcom/android/server/am/CachedAppOptimizer;)Landroid/util/SparseArray;
@@ -8805,7 +9135,7 @@
 HPLcom/android/server/am/CachedAppOptimizer;->-$$Nest$fgetmSomeCompactionCount(Lcom/android/server/am/CachedAppOptimizer;)I
 PLcom/android/server/am/CachedAppOptimizer;->-$$Nest$fgetmSystemCompactionsPerformed(Lcom/android/server/am/CachedAppOptimizer;)J
 PLcom/android/server/am/CachedAppOptimizer;->-$$Nest$fgetmTestCallback(Lcom/android/server/am/CachedAppOptimizer;)Lcom/android/server/am/CachedAppOptimizer$PropertyChangedCallbackForTest;
-PLcom/android/server/am/CachedAppOptimizer;->-$$Nest$fputmBfgsCompactionCount(Lcom/android/server/am/CachedAppOptimizer;I)V
+HPLcom/android/server/am/CachedAppOptimizer;->-$$Nest$fputmBfgsCompactionCount(Lcom/android/server/am/CachedAppOptimizer;I)V
 HPLcom/android/server/am/CachedAppOptimizer;->-$$Nest$fputmFullCompactionCount(Lcom/android/server/am/CachedAppOptimizer;I)V
 PLcom/android/server/am/CachedAppOptimizer;->-$$Nest$fputmPersistentCompactionCount(Lcom/android/server/am/CachedAppOptimizer;I)V
 HPLcom/android/server/am/CachedAppOptimizer;->-$$Nest$fputmProcCompactionsMiscThrottled(Lcom/android/server/am/CachedAppOptimizer;J)V
@@ -8837,7 +9167,7 @@
 PLcom/android/server/am/CachedAppOptimizer;->compactAllSystem()V
 HPLcom/android/server/am/CachedAppOptimizer;->compactApp(Lcom/android/server/am/ProcessRecord;ZLjava/lang/String;)Z+]Landroid/os/Handler;Lcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/am/CachedAppOptimizer;->compactAppBfgs(Lcom/android/server/am/ProcessRecord;)V+]Landroid/os/Handler;Lcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/am/CachedAppOptimizer;->compactAppFull(Lcom/android/server/am/ProcessRecord;Z)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/Handler;Lcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;
+HPLcom/android/server/am/CachedAppOptimizer;->compactAppFull(Lcom/android/server/am/ProcessRecord;Z)V+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/Handler;Lcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/am/CachedAppOptimizer;->compactAppPersistent(Lcom/android/server/am/ProcessRecord;)V+]Landroid/os/Handler;Lcom/android/server/am/CachedAppOptimizer$MemCompactionHandler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/am/CachedAppOptimizer;->compactAppSome(Lcom/android/server/am/ProcessRecord;Z)V
 PLcom/android/server/am/CachedAppOptimizer;->dump(Ljava/io/PrintWriter;)V
@@ -8849,15 +9179,15 @@
 HSPLcom/android/server/am/CachedAppOptimizer;->lambda$updateUseFreezer$1(Z)V
 HPLcom/android/server/am/CachedAppOptimizer;->meetsCompactionRequirements(Lcom/android/server/am/ProcessRecord;)Z
 HSPLcom/android/server/am/CachedAppOptimizer;->onCleanupApplicationRecordLocked(Lcom/android/server/am/ProcessRecord;)V
-HPLcom/android/server/am/CachedAppOptimizer;->onOomAdjustChanged(IILcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;
+HSPLcom/android/server/am/CachedAppOptimizer;->onOomAdjustChanged(IILcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;
 HPLcom/android/server/am/CachedAppOptimizer;->onWakefulnessChanged(I)V
 HSPLcom/android/server/am/CachedAppOptimizer;->parseProcStateThrottle(Ljava/lang/String;)Z
 HPLcom/android/server/am/CachedAppOptimizer;->resolveCompactionAction(I)I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HPLcom/android/server/am/CachedAppOptimizer;->shouldCompactBFGS(Lcom/android/server/am/ProcessRecord;J)Z
 HPLcom/android/server/am/CachedAppOptimizer;->shouldCompactPersistent(Lcom/android/server/am/ProcessRecord;J)Z
-HSPLcom/android/server/am/CachedAppOptimizer;->unfreezeAppInternalLSP(Lcom/android/server/am/ProcessRecord;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/Handler;Lcom/android/server/am/CachedAppOptimizer$FreezeHandler;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
+HSPLcom/android/server/am/CachedAppOptimizer;->unfreezeAppInternalLSP(Lcom/android/server/am/ProcessRecord;)V+]Landroid/os/Handler;Lcom/android/server/am/CachedAppOptimizer$FreezeHandler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/CachedAppOptimizer;->unfreezeAppLSP(Lcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;
-HPLcom/android/server/am/CachedAppOptimizer;->unfreezeProcess(I)V
+HSPLcom/android/server/am/CachedAppOptimizer;->unfreezeProcess(I)V
 HSPLcom/android/server/am/CachedAppOptimizer;->unfreezeTemporarily(Lcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;
 HSPLcom/android/server/am/CachedAppOptimizer;->updateCompactStatsdSampleRate()V
 HSPLcom/android/server/am/CachedAppOptimizer;->updateCompactionActions()V
@@ -8883,7 +9213,7 @@
 HSPLcom/android/server/am/ComponentAliasResolver$Resolution;->isAlias()Z
 HSPLcom/android/server/am/ComponentAliasResolver;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 PLcom/android/server/am/ComponentAliasResolver;->dump(Ljava/io/PrintWriter;)V
-PLcom/android/server/am/ComponentAliasResolver;->onSystemReady(ZLjava/lang/String;)V
+HSPLcom/android/server/am/ComponentAliasResolver;->onSystemReady(ZLjava/lang/String;)V
 HSPLcom/android/server/am/ComponentAliasResolver;->resolveComponentAlias(Ljava/util/function/Supplier;)Lcom/android/server/am/ComponentAliasResolver$Resolution;
 HSPLcom/android/server/am/ComponentAliasResolver;->resolveReceiver(Landroid/content/Intent;Landroid/content/pm/ResolveInfo;Ljava/lang/String;IIIZ)Lcom/android/server/am/ComponentAliasResolver$Resolution;+]Lcom/android/server/am/ComponentAliasResolver$Resolution;Lcom/android/server/am/ComponentAliasResolver$Resolution;]Lcom/android/server/am/ComponentAliasResolver;Lcom/android/server/am/ComponentAliasResolver;
 HSPLcom/android/server/am/ComponentAliasResolver;->resolveService(Landroid/content/Intent;Ljava/lang/String;III)Lcom/android/server/am/ComponentAliasResolver$Resolution;+]Lcom/android/server/am/ComponentAliasResolver$Resolution;Lcom/android/server/am/ComponentAliasResolver$Resolution;]Lcom/android/server/am/ComponentAliasResolver;Lcom/android/server/am/ComponentAliasResolver;
@@ -8891,16 +9221,16 @@
 HSPLcom/android/server/am/ConnectionRecord;-><clinit>()V
 HSPLcom/android/server/am/ConnectionRecord;-><init>(Lcom/android/server/am/AppBindRecord;Lcom/android/server/wm/ActivityServiceConnectionsHolder;Landroid/app/IServiceConnection;IILandroid/app/PendingIntent;ILjava/lang/String;Ljava/lang/String;Landroid/content/ComponentName;)V
 HPLcom/android/server/am/ConnectionRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-HPLcom/android/server/am/ConnectionRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+HPLcom/android/server/am/ConnectionRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;
 HSPLcom/android/server/am/ConnectionRecord;->hasFlag(I)Z
 HSPLcom/android/server/am/ConnectionRecord;->startAssociationIfNeeded()V+]Lcom/android/internal/app/procstats/ProcessStats$PackageState;Lcom/android/internal/app/procstats/ProcessStats$PackageState;]Lcom/android/internal/app/procstats/AssociationState;Lcom/android/internal/app/procstats/AssociationState;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/am/PackageList;Lcom/android/server/am/PackageList;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ConnectionRecord;->stopAssociation()V+]Lcom/android/internal/app/procstats/AssociationState$SourceState;Lcom/android/internal/app/procstats/AssociationState$SourceState;
-HPLcom/android/server/am/ConnectionRecord;->toString()Ljava/lang/String;
+HSPLcom/android/server/am/ConnectionRecord;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/app/IServiceConnection;Landroid/app/LoadedApk$ServiceDispatcher$InnerConnection;,Landroid/app/IServiceConnection$Stub$Proxy;
 HSPLcom/android/server/am/ConnectionRecord;->trackProcState(II)V+]Lcom/android/internal/app/procstats/AssociationState$SourceState;Lcom/android/internal/app/procstats/AssociationState$SourceState;
 HSPLcom/android/server/am/ContentProviderConnection;-><init>(Lcom/android/server/am/ContentProviderRecord;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;I)V
-HPLcom/android/server/am/ContentProviderConnection;->adjustCounts(II)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/am/ContentProviderConnection;->adjustCounts(II)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HPLcom/android/server/am/ContentProviderConnection;->decrementCount(Z)I
-HPLcom/android/server/am/ContentProviderConnection;->incrementCount(Z)I
+HSPLcom/android/server/am/ContentProviderConnection;->incrementCount(Z)I
 HSPLcom/android/server/am/ContentProviderConnection;->initializeCount(Z)V
 PLcom/android/server/am/ContentProviderConnection;->stableCount()I
 HSPLcom/android/server/am/ContentProviderConnection;->startAssociationIfNeeded()V+]Lcom/android/internal/app/procstats/ProcessStats$PackageState;Lcom/android/internal/app/procstats/ProcessStats$PackageState;]Lcom/android/internal/app/procstats/AssociationState;Lcom/android/internal/app/procstats/AssociationState;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/am/PackageList;Lcom/android/server/am/PackageList;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
@@ -8911,7 +9241,7 @@
 PLcom/android/server/am/ContentProviderConnection;->toShortString(Ljava/lang/StringBuilder;)V
 PLcom/android/server/am/ContentProviderConnection;->toString()Ljava/lang/String;
 HPLcom/android/server/am/ContentProviderConnection;->totalRefCount()I
-HPLcom/android/server/am/ContentProviderConnection;->trackProcState(II)V+]Lcom/android/internal/app/procstats/AssociationState$SourceState;Lcom/android/internal/app/procstats/AssociationState$SourceState;
+HSPLcom/android/server/am/ContentProviderConnection;->trackProcState(II)V+]Lcom/android/internal/app/procstats/AssociationState$SourceState;Lcom/android/internal/app/procstats/AssociationState$SourceState;
 HPLcom/android/server/am/ContentProviderHelper$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/am/ContentProviderHelper;Ljava/lang/String;ILandroid/os/RemoteCallback;)V
 HPLcom/android/server/am/ContentProviderHelper$$ExternalSyntheticLambda0;->onResult(Landroid/os/Bundle;)V
 HPLcom/android/server/am/ContentProviderHelper$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderConnection;ZZ)V
@@ -8930,12 +9260,13 @@
 HSPLcom/android/server/am/ContentProviderHelper;->-$$Nest$fgetmService(Lcom/android/server/am/ContentProviderHelper;)Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ContentProviderHelper;-><clinit>()V
 HSPLcom/android/server/am/ContentProviderHelper;-><init>(Lcom/android/server/am/ActivityManagerService;Z)V
+PLcom/android/server/am/ContentProviderHelper;->appNotRespondingViaProvider(Landroid/os/IBinder;)V
 HPLcom/android/server/am/ContentProviderHelper;->canClearIdentity(III)Z
 HSPLcom/android/server/am/ContentProviderHelper;->checkAppInLaunchingProvidersLocked(Lcom/android/server/am/ProcessRecord;)Z
 HSPLcom/android/server/am/ContentProviderHelper;->checkAssociationAndPermissionLocked(Lcom/android/server/am/ProcessRecord;Landroid/content/pm/ProviderInfo;IIZLjava/lang/String;J)V+]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ContentProviderHelper;->checkContentProviderAccess(Ljava/lang/String;I)Ljava/lang/String;+]Lcom/android/server/am/ActivityManagerService$PidMap;Lcom/android/server/am/ActivityManagerService$PidMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ContentProviderHelper;->checkContentProviderAssociation(Lcom/android/server/am/ProcessRecord;ILandroid/content/pm/ProviderInfo;)Ljava/lang/String;+]Lcom/android/server/am/PackageList;Lcom/android/server/am/PackageList;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-HSPLcom/android/server/am/ContentProviderHelper;->checkContentProviderPermission(Landroid/content/pm/ProviderInfo;IIIZLjava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/uri/UriGrantsManagerInternal;Lcom/android/server/uri/UriGrantsManagerService$LocalService;]Landroid/content/pm/PathPermission;Landroid/content/pm/PathPermission;
+HSPLcom/android/server/am/ContentProviderHelper;->checkContentProviderPermission(Landroid/content/pm/ProviderInfo;IIIZLjava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Landroid/content/pm/PathPermission;Landroid/content/pm/PathPermission;]Lcom/android/server/uri/UriGrantsManagerInternal;Lcom/android/server/uri/UriGrantsManagerService$LocalService;
 HPLcom/android/server/am/ContentProviderHelper;->checkContentProviderUriPermission(Landroid/net/Uri;III)I
 HSPLcom/android/server/am/ContentProviderHelper;->checkTime(JLjava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/am/ContentProviderHelper;->cleanupAppInLaunchingProvidersLocked(Lcom/android/server/am/ProcessRecord;Z)Z+]Lcom/android/server/am/ContentProviderRecord;Lcom/android/server/am/ContentProviderRecord;]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Lcom/android/server/am/ProcessErrorStateRecord;Lcom/android/server/am/ProcessErrorStateRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -8943,15 +9274,16 @@
 PLcom/android/server/am/ContentProviderHelper;->dumpProvider(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Ljava/lang/String;[Ljava/lang/String;IZ)Z
 PLcom/android/server/am/ContentProviderHelper;->dumpProvidersLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;)V
 HSPLcom/android/server/am/ContentProviderHelper;->generateApplicationProvidersLocked(Lcom/android/server/am/ProcessRecord;)Ljava/util/List;+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Lcom/android/server/am/ProviderMap;Lcom/android/server/am/ProviderMap;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Landroid/content/pm/ParceledListSlice;Landroid/content/pm/ParceledListSlice;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ProcessProviderRecord;Lcom/android/server/am/ProcessProviderRecord;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-HSPLcom/android/server/am/ContentProviderHelper;->getContentProvider(Landroid/app/IApplicationThread;Ljava/lang/String;Ljava/lang/String;IZ)Landroid/app/ContentProviderHolder;+]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/am/ContentProviderHelper;->getContentProvider(Landroid/app/IApplicationThread;Ljava/lang/String;Ljava/lang/String;IZ)Landroid/app/ContentProviderHolder;+]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+PLcom/android/server/am/ContentProviderHelper;->getContentProviderExternal(Ljava/lang/String;ILandroid/os/IBinder;Ljava/lang/String;)Landroid/app/ContentProviderHolder;
 HPLcom/android/server/am/ContentProviderHelper;->getContentProviderExternalUnchecked(Ljava/lang/String;Landroid/os/IBinder;ILjava/lang/String;I)Landroid/app/ContentProviderHolder;
-HSPLcom/android/server/am/ContentProviderHelper;->getContentProviderImpl(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;ZI)Landroid/app/ContentProviderHolder;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Ljava/lang/Object;Lcom/android/server/am/ContentProviderRecord;]Lcom/android/server/am/ProviderMap;Lcom/android/server/am/ProviderMap;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ContentProviderRecord;Lcom/android/server/am/ContentProviderRecord;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessProviderRecord;Lcom/android/server/am/ProcessProviderRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;
+HSPLcom/android/server/am/ContentProviderHelper;->getContentProviderImpl(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;ZI)Landroid/app/ContentProviderHolder;+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Ljava/lang/Object;Lcom/android/server/am/ContentProviderRecord;]Lcom/android/server/am/ProviderMap;Lcom/android/server/am/ProviderMap;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ContentProviderRecord;Lcom/android/server/am/ContentProviderRecord;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessProviderRecord;Lcom/android/server/am/ProcessProviderRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;
 HPLcom/android/server/am/ContentProviderHelper;->getProviderInfoLocked(Ljava/lang/String;II)Landroid/content/pm/ProviderInfo;
 HSPLcom/android/server/am/ContentProviderHelper;->getProviderMap()Lcom/android/server/am/ProviderMap;
 HPLcom/android/server/am/ContentProviderHelper;->getProviderMimeTypeAsync(Landroid/net/Uri;ILandroid/os/RemoteCallback;)V+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Landroid/content/IContentProvider;Landroid/content/ContentProviderProxy;]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Landroid/os/RemoteCallback;Landroid/os/RemoteCallback;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-HPLcom/android/server/am/ContentProviderHelper;->handleProviderRemoval(Lcom/android/server/am/ContentProviderConnection;ZZ)V+]Lcom/android/server/am/ContentProviderConnection;Lcom/android/server/am/ContentProviderConnection;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessProviderRecord;Lcom/android/server/am/ProcessProviderRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-HPLcom/android/server/am/ContentProviderHelper;->hasProviderConnectionLocked(Lcom/android/server/am/ProcessRecord;)Z+]Lcom/android/server/am/ProcessProviderRecord;Lcom/android/server/am/ProcessProviderRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLcom/android/server/am/ContentProviderHelper;->incProviderCountLocked(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ContentProviderRecord;Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;ZZJLcom/android/server/am/ProcessList;I)Lcom/android/server/am/ContentProviderConnection;+]Lcom/android/server/am/ContentProviderRecord;Lcom/android/server/am/ContentProviderRecord;]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Lcom/android/server/am/ContentProviderConnection;Lcom/android/server/am/ContentProviderConnection;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ProcessProviderRecord;Lcom/android/server/am/ProcessProviderRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HPLcom/android/server/am/ContentProviderHelper;->handleProviderRemoval(Lcom/android/server/am/ContentProviderConnection;ZZ)V+]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Lcom/android/server/am/ContentProviderConnection;Lcom/android/server/am/ContentProviderConnection;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessProviderRecord;Lcom/android/server/am/ProcessProviderRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HSPLcom/android/server/am/ContentProviderHelper;->hasProviderConnectionLocked(Lcom/android/server/am/ProcessRecord;)Z+]Lcom/android/server/am/ProcessProviderRecord;Lcom/android/server/am/ProcessProviderRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/am/ContentProviderHelper;->incProviderCountLocked(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ContentProviderRecord;Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;ZZJLcom/android/server/am/ProcessList;I)Lcom/android/server/am/ContentProviderConnection;+]Lcom/android/server/am/ContentProviderRecord;Lcom/android/server/am/ContentProviderRecord;]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Lcom/android/server/am/ContentProviderConnection;Lcom/android/server/am/ContentProviderConnection;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ProcessProviderRecord;Lcom/android/server/am/ProcessProviderRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
 PLcom/android/server/am/ContentProviderHelper;->installEncryptionUnawareProviders(I)V
 HSPLcom/android/server/am/ContentProviderHelper;->installSystemProviders()V
 HSPLcom/android/server/am/ContentProviderHelper;->isProcessAliveLocked(Lcom/android/server/am/ProcessRecord;)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
@@ -8961,22 +9293,28 @@
 PLcom/android/server/am/ContentProviderHelper;->lambda$installEncryptionUnawareProviders$1(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;)V
 HSPLcom/android/server/am/ContentProviderHelper;->maybeUpdateProviderUsageStatsLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Ljava/lang/String;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Ljava/lang/Long;Ljava/lang/Long;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;
 PLcom/android/server/am/ContentProviderHelper;->processContentProviderPublishTimedOutLocked(Lcom/android/server/am/ProcessRecord;)V
-HSPLcom/android/server/am/ContentProviderHelper;->publishContentProviders(Landroid/app/IApplicationThread;Ljava/util/List;)V+]Lcom/android/server/am/ContentProviderRecord;Lcom/android/server/am/ContentProviderRecord;]Ljava/lang/String;Ljava/lang/String;]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Ljava/lang/Object;Lcom/android/server/am/ContentProviderRecord;]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Lcom/android/server/am/ProviderMap;Lcom/android/server/am/ProviderMap;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/ProcessProviderRecord;Lcom/android/server/am/ProcessProviderRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HPLcom/android/server/am/ContentProviderHelper;->refContentProvider(Landroid/os/IBinder;II)Z+]Lcom/android/server/am/ContentProviderConnection;Lcom/android/server/am/ContentProviderConnection;
+HSPLcom/android/server/am/ContentProviderHelper;->publishContentProviders(Landroid/app/IApplicationThread;Ljava/util/List;)V+]Lcom/android/server/am/ContentProviderRecord;Lcom/android/server/am/ContentProviderRecord;]Ljava/lang/String;Ljava/lang/String;]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Ljava/lang/Object;Lcom/android/server/am/ContentProviderRecord;]Lcom/android/server/am/ProviderMap;Lcom/android/server/am/ProviderMap;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/am/ProcessProviderRecord;Lcom/android/server/am/ProcessProviderRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/am/ContentProviderHelper;->refContentProvider(Landroid/os/IBinder;II)Z+]Lcom/android/server/am/ContentProviderConnection;Lcom/android/server/am/ContentProviderConnection;
 HPLcom/android/server/am/ContentProviderHelper;->removeContentProvider(Landroid/os/IBinder;Z)V+]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+PLcom/android/server/am/ContentProviderHelper;->removeContentProviderExternalAsUser(Ljava/lang/String;Landroid/os/IBinder;I)V
 HPLcom/android/server/am/ContentProviderHelper;->removeContentProviderExternalUnchecked(Ljava/lang/String;Landroid/os/IBinder;I)V
-HPLcom/android/server/am/ContentProviderHelper;->removeDyingProviderLocked(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ContentProviderRecord;Z)Z+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Object;Lcom/android/server/am/ContentProviderRecord;]Lcom/android/server/am/ProviderMap;Lcom/android/server/am/ProviderMap;]Lcom/android/server/am/ContentProviderConnection;Lcom/android/server/am/ContentProviderConnection;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ContentProviderRecord;Lcom/android/server/am/ContentProviderRecord;]Ljava/lang/String;Ljava/lang/String;]Landroid/content/IContentProvider;Landroid/content/ContentProviderProxy;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ProcessProviderRecord;Lcom/android/server/am/ProcessProviderRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;
-HPLcom/android/server/am/ContentProviderHelper;->requestTargetProviderPermissionsReviewIfNeededLocked(Landroid/content/pm/ProviderInfo;Lcom/android/server/am/ProcessRecord;ILandroid/content/Context;)Z
+HPLcom/android/server/am/ContentProviderHelper;->removeDyingProviderLocked(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ContentProviderRecord;Z)Z+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Object;Lcom/android/server/am/ContentProviderRecord;]Lcom/android/server/am/ProviderMap;Lcom/android/server/am/ProviderMap;]Lcom/android/server/am/ContentProviderConnection;Lcom/android/server/am/ContentProviderConnection;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;]Lcom/android/server/am/ContentProviderRecord;Lcom/android/server/am/ContentProviderRecord;]Ljava/lang/String;Ljava/lang/String;]Landroid/content/IContentProvider;Landroid/content/ContentProviderProxy;]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessProviderRecord;Lcom/android/server/am/ProcessProviderRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;
+HSPLcom/android/server/am/ContentProviderHelper;->requestTargetProviderPermissionsReviewIfNeededLocked(Landroid/content/pm/ProviderInfo;Lcom/android/server/am/ProcessRecord;ILandroid/content/Context;)Z
 HPLcom/android/server/am/ContentProviderHelper;->unstableProviderDied(Landroid/os/IBinder;)V
+PLcom/android/server/am/ContentProviderRecord$ExternalProcessHandle;-><init>(Lcom/android/server/am/ContentProviderRecord;Landroid/os/IBinder;ILjava/lang/String;)V
+PLcom/android/server/am/ContentProviderRecord$ExternalProcessHandle;->startAssociationIfNeeded(Lcom/android/server/am/ContentProviderRecord;)V
+PLcom/android/server/am/ContentProviderRecord$ExternalProcessHandle;->stopAssociation()V
+PLcom/android/server/am/ContentProviderRecord$ExternalProcessHandle;->unlinkFromOwnDeathLocked()V
 HSPLcom/android/server/am/ContentProviderRecord;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/content/pm/ProviderInfo;Landroid/content/pm/ApplicationInfo;Landroid/content/ComponentName;Z)V+]Landroid/content/ComponentName;Landroid/content/ComponentName;
 HPLcom/android/server/am/ContentProviderRecord;->addExternalProcessHandleLocked(Landroid/os/IBinder;ILjava/lang/String;)V
 HSPLcom/android/server/am/ContentProviderRecord;->canRunHere(Lcom/android/server/am/ProcessRecord;)Z
 HPLcom/android/server/am/ContentProviderRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
 HPLcom/android/server/am/ContentProviderRecord;->getComponentName()Landroid/content/ComponentName;
 PLcom/android/server/am/ContentProviderRecord;->hasConnectionOrHandle()Z
-HPLcom/android/server/am/ContentProviderRecord;->hasExternalProcessHandles()Z
+HSPLcom/android/server/am/ContentProviderRecord;->hasExternalProcessHandles()Z
 HSPLcom/android/server/am/ContentProviderRecord;->newHolder(Lcom/android/server/am/ContentProviderConnection;Z)Landroid/app/ContentProviderHolder;
 HSPLcom/android/server/am/ContentProviderRecord;->onProviderPublishStatusLocked(Z)V+]Lcom/android/server/am/ContentProviderRecord;Lcom/android/server/am/ContentProviderRecord;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;
+PLcom/android/server/am/ContentProviderRecord;->removeExternalProcessHandleInternalLocked(Landroid/os/IBinder;)V
 HPLcom/android/server/am/ContentProviderRecord;->removeExternalProcessHandleLocked(Landroid/os/IBinder;)Z
 HSPLcom/android/server/am/ContentProviderRecord;->setProcess(Lcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/ContentProviderConnection;Lcom/android/server/am/ContentProviderConnection;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/am/ContentProviderRecord;->toShortString()Ljava/lang/String;
@@ -8993,15 +9331,15 @@
 HSPLcom/android/server/am/CoreSettingsObserver;->populateSettingsFromDeviceConfig()V
 HSPLcom/android/server/am/CoreSettingsObserver;->sendCoreSettings()V
 HSPLcom/android/server/am/DataConnectionStats$PhoneStateListenerExecutor;-><init>(Landroid/os/Handler;)V
-HPLcom/android/server/am/DataConnectionStats$PhoneStateListenerExecutor;->execute(Ljava/lang/Runnable;)V
+HPLcom/android/server/am/DataConnectionStats$PhoneStateListenerExecutor;->execute(Ljava/lang/Runnable;)V+]Landroid/os/Handler;Landroid/os/Handler;
 HSPLcom/android/server/am/DataConnectionStats$PhoneStateListenerImpl;-><init>(Lcom/android/server/am/DataConnectionStats;Ljava/util/concurrent/Executor;)V
 HPLcom/android/server/am/DataConnectionStats$PhoneStateListenerImpl;->onDataActivity(I)V
 PLcom/android/server/am/DataConnectionStats$PhoneStateListenerImpl;->onDataConnectionStateChanged(II)V
 HPLcom/android/server/am/DataConnectionStats$PhoneStateListenerImpl;->onServiceStateChanged(Landroid/telephony/ServiceState;)V
 HPLcom/android/server/am/DataConnectionStats$PhoneStateListenerImpl;->onSignalStrengthsChanged(Landroid/telephony/SignalStrength;)V
 PLcom/android/server/am/DataConnectionStats;->-$$Nest$fputmDataState(Lcom/android/server/am/DataConnectionStats;I)V
-PLcom/android/server/am/DataConnectionStats;->-$$Nest$fputmNrState(Lcom/android/server/am/DataConnectionStats;I)V
-PLcom/android/server/am/DataConnectionStats;->-$$Nest$fputmServiceState(Lcom/android/server/am/DataConnectionStats;Landroid/telephony/ServiceState;)V
+HPLcom/android/server/am/DataConnectionStats;->-$$Nest$fputmNrState(Lcom/android/server/am/DataConnectionStats;I)V
+HPLcom/android/server/am/DataConnectionStats;->-$$Nest$fputmServiceState(Lcom/android/server/am/DataConnectionStats;Landroid/telephony/ServiceState;)V
 HPLcom/android/server/am/DataConnectionStats;->-$$Nest$fputmSignalStrength(Lcom/android/server/am/DataConnectionStats;Landroid/telephony/SignalStrength;)V
 HPLcom/android/server/am/DataConnectionStats;->-$$Nest$mnotePhoneDataConnectionState(Lcom/android/server/am/DataConnectionStats;)V
 HSPLcom/android/server/am/DataConnectionStats;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
@@ -9026,9 +9364,9 @@
 HSPLcom/android/server/am/DropboxRateLimiter;-><init>()V
 HSPLcom/android/server/am/DropboxRateLimiter;-><init>(Lcom/android/server/am/DropboxRateLimiter$Clock;)V
 HSPLcom/android/server/am/DropboxRateLimiter;->errorKey(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HSPLcom/android/server/am/DropboxRateLimiter;->maybeRemoveExpiredRecords(J)V
+HSPLcom/android/server/am/DropboxRateLimiter;->maybeRemoveExpiredRecords(J)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/DropboxRateLimiter$ErrorRecord;Lcom/android/server/am/DropboxRateLimiter$ErrorRecord;
 HSPLcom/android/server/am/DropboxRateLimiter;->recentlyDroppedCount(Lcom/android/server/am/DropboxRateLimiter$ErrorRecord;)I
-HSPLcom/android/server/am/DropboxRateLimiter;->shouldRateLimit(Ljava/lang/String;Ljava/lang/String;)Lcom/android/server/am/DropboxRateLimiter$RateLimitResult;
+HSPLcom/android/server/am/DropboxRateLimiter;->shouldRateLimit(Ljava/lang/String;Ljava/lang/String;)Lcom/android/server/am/DropboxRateLimiter$RateLimitResult;+]Lcom/android/server/am/DropboxRateLimiter$Clock;Lcom/android/server/am/DropboxRateLimiter$DefaultClock;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/DropboxRateLimiter;Lcom/android/server/am/DropboxRateLimiter;]Lcom/android/server/am/DropboxRateLimiter$ErrorRecord;Lcom/android/server/am/DropboxRateLimiter$ErrorRecord;
 PLcom/android/server/am/ErrorDialogController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/am/BaseErrorDialog;)V
 PLcom/android/server/am/ErrorDialogController$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/am/ErrorDialogController$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/am/ErrorDialogController;)V
@@ -9053,9 +9391,11 @@
 HSPLcom/android/server/am/ErrorDialogController;->clearWaitingDialog()V
 PLcom/android/server/am/ErrorDialogController;->forAllDialogs(Ljava/util/List;Ljava/util/function/Consumer;)V
 PLcom/android/server/am/ErrorDialogController;->getAnrController()Landroid/app/AnrController;
+PLcom/android/server/am/ErrorDialogController;->getAnrDialogs()Ljava/util/List;
+PLcom/android/server/am/ErrorDialogController;->getCrashDialogs()Ljava/util/List;
 PLcom/android/server/am/ErrorDialogController;->getDisplayContexts(Z)Ljava/util/List;
 PLcom/android/server/am/ErrorDialogController;->hasAnrDialogs()Z
-PLcom/android/server/am/ErrorDialogController;->hasCrashDialogs()Z
+HPLcom/android/server/am/ErrorDialogController;->hasCrashDialogs()Z
 PLcom/android/server/am/ErrorDialogController;->hasDebugWaitingDialog()Z
 PLcom/android/server/am/ErrorDialogController;->lambda$scheduleForAllDialogs$0(Ljava/util/List;Ljava/util/function/Consumer;)V
 PLcom/android/server/am/ErrorDialogController;->lambda$showCrashDialogs$1()V
@@ -9085,38 +9425,38 @@
 PLcom/android/server/am/EventLogTags;->writeAmUserStateChanged(II)V
 HSPLcom/android/server/am/EventLogTags;->writeAmWtf(IILjava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/am/EventLogTags;->writeBootProgressAmsReady(J)V
-PLcom/android/server/am/EventLogTags;->writeBootProgressEnableScreen(J)V
+HSPLcom/android/server/am/EventLogTags;->writeBootProgressEnableScreen(J)V
 HSPLcom/android/server/am/EventLogTags;->writeConfigurationChanged(I)V
 HSPLcom/android/server/am/FgsTempAllowList;-><init>()V
 HSPLcom/android/server/am/FgsTempAllowList;->add(IJLjava/lang/Object;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/lang/Long;Ljava/lang/Long;
 PLcom/android/server/am/FgsTempAllowList;->forEach(Ljava/util/function/BiConsumer;)V
 HSPLcom/android/server/am/FgsTempAllowList;->get(I)Landroid/util/Pair;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/lang/Long;Ljava/lang/Long;
-HPLcom/android/server/am/FgsTempAllowList;->isAllowed(I)Z
+HSPLcom/android/server/am/FgsTempAllowList;->isAllowed(I)Z
 HSPLcom/android/server/am/FgsTempAllowList;->removeUid(I)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/am/HealthStatsBatteryStatsWriter;-><init>()V
-HPLcom/android/server/am/HealthStatsBatteryStatsWriter;->addTimer(Landroid/os/health/HealthStatsWriter;ILandroid/os/BatteryStats$Timer;)V
+HPLcom/android/server/am/HealthStatsBatteryStatsWriter;->addTimer(Landroid/os/health/HealthStatsWriter;ILandroid/os/BatteryStats$Timer;)V+]Landroid/os/health/HealthStatsWriter;Landroid/os/health/HealthStatsWriter;]Landroid/os/BatteryStats$Timer;Lcom/android/internal/os/BatteryStatsImpl$DualTimer;,Lcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;,Lcom/android/internal/os/BatteryStatsImpl$BatchTimer;
 HPLcom/android/server/am/HealthStatsBatteryStatsWriter;->addTimers(Landroid/os/health/HealthStatsWriter;ILjava/lang/String;Landroid/os/BatteryStats$Timer;)V+]Landroid/os/health/HealthStatsWriter;Landroid/os/health/HealthStatsWriter;]Landroid/os/BatteryStats$Timer;Lcom/android/internal/os/BatteryStatsImpl$DualTimer;,Lcom/android/internal/os/BatteryStatsImpl$StopwatchTimer;
 HPLcom/android/server/am/HealthStatsBatteryStatsWriter;->writePid(Landroid/os/health/HealthStatsWriter;Landroid/os/BatteryStats$Uid$Pid;)V
-HPLcom/android/server/am/HealthStatsBatteryStatsWriter;->writePkg(Landroid/os/health/HealthStatsWriter;Landroid/os/BatteryStats$Uid$Pkg;)V
-HPLcom/android/server/am/HealthStatsBatteryStatsWriter;->writeProc(Landroid/os/health/HealthStatsWriter;Landroid/os/BatteryStats$Uid$Proc;)V
+HPLcom/android/server/am/HealthStatsBatteryStatsWriter;->writePkg(Landroid/os/health/HealthStatsWriter;Landroid/os/BatteryStats$Uid$Pkg;)V+]Ljava/util/Map$Entry;Landroid/util/MapCollections$MapIterator;]Lcom/android/server/am/HealthStatsBatteryStatsWriter;Lcom/android/server/am/HealthStatsBatteryStatsWriter;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/health/HealthStatsWriter;Landroid/os/health/HealthStatsWriter;]Landroid/os/BatteryStats$Uid$Pkg;Lcom/android/internal/os/BatteryStatsImpl$Uid$Pkg;]Landroid/os/BatteryStats$Counter;Lcom/android/internal/os/BatteryStatsImpl$Counter;]Ljava/util/Iterator;Landroid/util/MapCollections$MapIterator;]Ljava/util/Set;Landroid/util/MapCollections$EntrySet;
+HPLcom/android/server/am/HealthStatsBatteryStatsWriter;->writeProc(Landroid/os/health/HealthStatsWriter;Landroid/os/BatteryStats$Uid$Proc;)V+]Landroid/os/BatteryStats$Uid$Proc;Lcom/android/internal/os/BatteryStatsImpl$Uid$Proc;]Landroid/os/health/HealthStatsWriter;Landroid/os/health/HealthStatsWriter;
 HPLcom/android/server/am/HealthStatsBatteryStatsWriter;->writeServ(Landroid/os/health/HealthStatsWriter;Landroid/os/BatteryStats$Uid$Pkg$Serv;)V
-HPLcom/android/server/am/HealthStatsBatteryStatsWriter;->writeUid(Landroid/os/health/HealthStatsWriter;Landroid/os/BatteryStats;Landroid/os/BatteryStats$Uid;)V+]Ljava/util/Map$Entry;Landroid/util/MapCollections$MapIterator;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/HealthStatsBatteryStatsWriter;Lcom/android/server/am/HealthStatsBatteryStatsWriter;]Landroid/os/health/HealthStatsWriter;Landroid/os/health/HealthStatsWriter;]Landroid/os/BatteryStats$Uid$Wakelock;Lcom/android/internal/os/BatteryStatsImpl$Uid$Wakelock;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/BatteryStats$Uid;Lcom/android/internal/os/BatteryStatsImpl$Uid;]Landroid/os/BatteryStats$ControllerActivityCounter;Lcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;]Landroid/os/BatteryStats;Lcom/android/internal/os/BatteryStatsImpl;]Ljava/util/Set;Landroid/util/MapCollections$EntrySet;]Landroid/os/BatteryStats$LongCounter;Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;,Lcom/android/internal/os/BatteryStatsImpl$TimeMultiStateCounter;,Lcom/android/internal/os/BatteryStatsImpl$1;]Landroid/os/BatteryStats$Uid$Sensor;Lcom/android/internal/os/BatteryStatsImpl$Uid$Sensor;]Ljava/util/Iterator;Landroid/util/MapCollections$MapIterator;
+HPLcom/android/server/am/HealthStatsBatteryStatsWriter;->writeUid(Landroid/os/health/HealthStatsWriter;Landroid/os/BatteryStats;Landroid/os/BatteryStats$Uid;)V+]Ljava/util/Map$Entry;Landroid/util/MapCollections$MapIterator;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/HealthStatsBatteryStatsWriter;Lcom/android/server/am/HealthStatsBatteryStatsWriter;]Landroid/os/health/HealthStatsWriter;Landroid/os/health/HealthStatsWriter;]Landroid/os/BatteryStats$Uid$Wakelock;Lcom/android/internal/os/BatteryStatsImpl$Uid$Wakelock;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/BatteryStats$Uid;Lcom/android/internal/os/BatteryStatsImpl$Uid;]Landroid/os/BatteryStats;Lcom/android/internal/os/BatteryStatsImpl;]Landroid/os/BatteryStats$ControllerActivityCounter;Lcom/android/internal/os/BatteryStatsImpl$ControllerActivityCounterImpl;]Ljava/util/Set;Landroid/util/MapCollections$EntrySet;]Landroid/os/BatteryStats$LongCounter;Lcom/android/internal/os/BatteryStatsImpl$LongSamplingCounter;,Lcom/android/internal/os/BatteryStatsImpl$TimeMultiStateCounter;,Lcom/android/internal/os/BatteryStatsImpl$1;]Landroid/os/BatteryStats$Uid$Sensor;Lcom/android/internal/os/BatteryStatsImpl$Uid$Sensor;]Ljava/util/Iterator;Landroid/util/MapCollections$MapIterator;
 HSPLcom/android/server/am/HostingRecord;-><init>(Ljava/lang/String;)V
 HSPLcom/android/server/am/HostingRecord;-><init>(Ljava/lang/String;Landroid/content/ComponentName;)V
 HSPLcom/android/server/am/HostingRecord;-><init>(Ljava/lang/String;Landroid/content/ComponentName;I)V
-HPLcom/android/server/am/HostingRecord;-><init>(Ljava/lang/String;Landroid/content/ComponentName;Ljava/lang/String;)V
+HSPLcom/android/server/am/HostingRecord;-><init>(Ljava/lang/String;Landroid/content/ComponentName;Ljava/lang/String;)V
 HSPLcom/android/server/am/HostingRecord;-><init>(Ljava/lang/String;Landroid/content/ComponentName;Ljava/lang/String;ILjava/lang/String;)V+]Landroid/content/ComponentName;Landroid/content/ComponentName;
-PLcom/android/server/am/HostingRecord;-><init>(Ljava/lang/String;Landroid/content/ComponentName;Z)V
+HSPLcom/android/server/am/HostingRecord;-><init>(Ljava/lang/String;Landroid/content/ComponentName;Z)V
 HSPLcom/android/server/am/HostingRecord;-><init>(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/am/HostingRecord;-><init>(Ljava/lang/String;Ljava/lang/String;I)V
 HSPLcom/android/server/am/HostingRecord;-><init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;IZLjava/lang/String;Ljava/lang/String;)V
 HPLcom/android/server/am/HostingRecord;->byAppZygote(Landroid/content/ComponentName;Ljava/lang/String;ILjava/lang/String;)Lcom/android/server/am/HostingRecord;
 HPLcom/android/server/am/HostingRecord;->byWebviewZygote(Landroid/content/ComponentName;Ljava/lang/String;ILjava/lang/String;)Lcom/android/server/am/HostingRecord;
-HPLcom/android/server/am/HostingRecord;->getAction()Ljava/lang/String;
+HSPLcom/android/server/am/HostingRecord;->getAction()Ljava/lang/String;
 HSPLcom/android/server/am/HostingRecord;->getDefiningPackageName()Ljava/lang/String;
 HSPLcom/android/server/am/HostingRecord;->getDefiningProcessName()Ljava/lang/String;
 HSPLcom/android/server/am/HostingRecord;->getDefiningUid()I
-HPLcom/android/server/am/HostingRecord;->getHostingTypeIdStatsd(Ljava/lang/String;)I
+HSPLcom/android/server/am/HostingRecord;->getHostingTypeIdStatsd(Ljava/lang/String;)I+]Ljava/lang/String;Ljava/lang/String;
 HSPLcom/android/server/am/HostingRecord;->getName()Ljava/lang/String;
 HSPLcom/android/server/am/HostingRecord;->getType()Ljava/lang/String;
 HSPLcom/android/server/am/HostingRecord;->isTopApp()Z
@@ -9128,25 +9468,26 @@
 HSPLcom/android/server/am/InstrumentationReporter;-><init>()V
 PLcom/android/server/am/InstrumentationReporter;->report(Lcom/android/server/am/InstrumentationReporter$Report;)V
 PLcom/android/server/am/InstrumentationReporter;->reportFinished(Landroid/app/IInstrumentationWatcher;Landroid/content/ComponentName;ILandroid/os/Bundle;)V
+PLcom/android/server/am/InstrumentationReporter;->reportStatus(Landroid/app/IInstrumentationWatcher;Landroid/content/ComponentName;ILandroid/os/Bundle;)V
 HSPLcom/android/server/am/IntentBindRecord;-><init>(Lcom/android/server/am/ServiceRecord;Landroid/content/Intent$FilterComparison;)V
-HPLcom/android/server/am/IntentBindRecord;->collectFlags()I
+HSPLcom/android/server/am/IntentBindRecord;->collectFlags()I+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/am/IntentBindRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-HPLcom/android/server/am/IntentBindRecord;->dumpInService(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HSPLcom/android/server/am/IntentBindRecord;->dumpInService(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/am/LmkdConnection$1;-><init>(Lcom/android/server/am/LmkdConnection;)V
 HPLcom/android/server/am/LmkdConnection$1;->onFileDescriptorEvents(Ljava/io/FileDescriptor;I)I
 HPLcom/android/server/am/LmkdConnection;->-$$Nest$mfileDescriptorEventHandler(Lcom/android/server/am/LmkdConnection;Ljava/io/FileDescriptor;I)I
 HSPLcom/android/server/am/LmkdConnection;-><init>(Landroid/os/MessageQueue;Lcom/android/server/am/LmkdConnection$LmkdConnectionListener;)V
 HSPLcom/android/server/am/LmkdConnection;->connect()Z
 HSPLcom/android/server/am/LmkdConnection;->exchange(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)Z+]Lcom/android/server/am/LmkdConnection;Lcom/android/server/am/LmkdConnection;]Ljava/lang/Object;Ljava/lang/Object;
-HPLcom/android/server/am/LmkdConnection;->fileDescriptorEventHandler(Ljava/io/FileDescriptor;I)I
+HPLcom/android/server/am/LmkdConnection;->fileDescriptorEventHandler(Ljava/io/FileDescriptor;I)I+]Lcom/android/server/am/LmkdConnection;Lcom/android/server/am/LmkdConnection;
 HSPLcom/android/server/am/LmkdConnection;->isConnected()Z
 HSPLcom/android/server/am/LmkdConnection;->openSocket()Landroid/net/LocalSocket;
-HPLcom/android/server/am/LmkdConnection;->processIncomingData()V
+HPLcom/android/server/am/LmkdConnection;->processIncomingData()V+]Lcom/android/server/am/LmkdConnection;Lcom/android/server/am/LmkdConnection;]Lcom/android/server/am/LmkdConnection$LmkdConnectionListener;Lcom/android/server/am/ProcessList$1;]Ljava/io/DataInputStream;Ljava/io/DataInputStream;
 HPLcom/android/server/am/LmkdConnection;->read(Ljava/nio/ByteBuffer;)I+]Ljava/io/InputStream;Landroid/net/LocalSocketImpl$SocketInputStream;]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
 HSPLcom/android/server/am/LmkdConnection;->waitForConnection(J)Z
 HSPLcom/android/server/am/LmkdConnection;->write(Ljava/nio/ByteBuffer;)Z+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;]Ljava/io/OutputStream;Landroid/net/LocalSocketImpl$SocketOutputStream;
 HPLcom/android/server/am/LmkdStatsReporter;->logKillOccurred(Ljava/io/DataInputStream;)V
-PLcom/android/server/am/LmkdStatsReporter;->logStateChanged(I)V
+HPLcom/android/server/am/LmkdStatsReporter;->logStateChanged(I)V
 PLcom/android/server/am/LmkdStatsReporter;->mapKillReason(I)I
 HSPLcom/android/server/am/LowMemDetector$LowMemThread;-><init>(Lcom/android/server/am/LowMemDetector;)V
 HSPLcom/android/server/am/LowMemDetector$LowMemThread;-><init>(Lcom/android/server/am/LowMemDetector;Lcom/android/server/am/LowMemDetector$LowMemThread-IA;)V
@@ -9164,7 +9505,7 @@
 HSPLcom/android/server/am/MeasuredEnergySnapshot;->getOtherOrdinalNames()[Ljava/lang/String;
 HSPLcom/android/server/am/MeasuredEnergySnapshot;->sanitizeCustomBucketName(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/am/MeasuredEnergySnapshot;->updateAndGetDelta([Landroid/hardware/power/stats/EnergyConsumerResult;I)Lcom/android/server/am/MeasuredEnergySnapshot$MeasuredEnergyDeltaData;+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/am/MeasuredEnergySnapshot;Lcom/android/server/am/MeasuredEnergySnapshot;]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/am/MeasuredEnergySnapshot;->updateAndGetDeltaForTypeOther(Landroid/hardware/power/stats/EnergyConsumer;[Landroid/hardware/power/stats/EnergyConsumerAttribution;I)Landroid/util/SparseLongArray;+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Lcom/android/server/am/MeasuredEnergySnapshot;Lcom/android/server/am/MeasuredEnergySnapshot;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/am/MeasuredEnergySnapshot;->updateAndGetDeltaForTypeOther(Landroid/hardware/power/stats/EnergyConsumer;[Landroid/hardware/power/stats/EnergyConsumerAttribution;I)Landroid/util/SparseLongArray;+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/MeasuredEnergySnapshot;Lcom/android/server/am/MeasuredEnergySnapshot;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/am/MemoryStatUtil$MemoryStat;-><init>()V
 HSPLcom/android/server/am/MemoryStatUtil;-><clinit>()V
 HSPLcom/android/server/am/MemoryStatUtil;->hasMemcg()Z
@@ -9202,14 +9543,14 @@
 HSPLcom/android/server/am/OomAdjProfiler;->updateSystemServerCpuTime(ZZZ)V
 HSPLcom/android/server/am/OomAdjuster$$ExternalSyntheticLambda0;-><init>()V
 HSPLcom/android/server/am/OomAdjuster$$ExternalSyntheticLambda0;->handleMessage(Landroid/os/Message;)Z
-PLcom/android/server/am/OomAdjuster$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/am/OomAdjuster;)V
-PLcom/android/server/am/OomAdjuster$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/am/OomAdjuster$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/am/OomAdjuster;)V
+HSPLcom/android/server/am/OomAdjuster$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
 PLcom/android/server/am/OomAdjuster$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/ProcessRecord;)V
 PLcom/android/server/am/OomAdjuster$$ExternalSyntheticLambda2;->run()V
 HSPLcom/android/server/am/OomAdjuster$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/am/OomAdjuster;)V
 HSPLcom/android/server/am/OomAdjuster$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/am/OomAdjuster$1;-><init>(Lcom/android/server/am/OomAdjuster;)V
-PLcom/android/server/am/OomAdjuster$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/am/OomAdjuster$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/am/OomAdjuster$ComputeOomAdjWindowCallback;-><init>(Lcom/android/server/am/OomAdjuster;)V
 HPLcom/android/server/am/OomAdjuster$ComputeOomAdjWindowCallback;->initialize(Lcom/android/server/am/ProcessRecord;IZZIIIII)V
 HPLcom/android/server/am/OomAdjuster$ComputeOomAdjWindowCallback;->onOtherActivity()V+]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;
@@ -9219,15 +9560,15 @@
 HSPLcom/android/server/am/OomAdjuster;->$r8$lambda$4pnHIE50TnOcNgt4SOu10KtoinY(Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/OomAdjuster;->$r8$lambda$G9qaeCQ1bE6cG3uK32c_XCnZvYk(Landroid/os/Message;)Z
 PLcom/android/server/am/OomAdjuster;->$r8$lambda$id8pSS0hq-uUB5PWVAgNdLbirVc(Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/ProcessRecord;)V
-PLcom/android/server/am/OomAdjuster;->$r8$lambda$ihQaI4mSYofPBYBnyj-KozGpFJs(Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/ProcessRecord;)V
-PLcom/android/server/am/OomAdjuster;->-$$Nest$fgetmService(Lcom/android/server/am/OomAdjuster;)Lcom/android/server/am/ActivityManagerService;
+HSPLcom/android/server/am/OomAdjuster;->$r8$lambda$ihQaI4mSYofPBYBnyj-KozGpFJs(Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/ProcessRecord;)V
+HSPLcom/android/server/am/OomAdjuster;->-$$Nest$fgetmService(Lcom/android/server/am/OomAdjuster;)Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/OomAdjuster;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessList;Lcom/android/server/am/ActiveUids;)V
 HSPLcom/android/server/am/OomAdjuster;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessList;Lcom/android/server/am/ActiveUids;Lcom/android/server/ServiceThread;)V
 HSPLcom/android/server/am/OomAdjuster;->applyOomAdjLSP(Lcom/android/server/am/ProcessRecord;ZJJ)Z+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;]Landroid/os/Handler;Landroid/os/Handler;,Lcom/android/server/am/ActivityManagerService$MainHandler;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Ljava/util/concurrent/atomic/AtomicLong;Ljava/util/concurrent/atomic/AtomicLong;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;]Lcom/android/server/am/ProcessReceiverRecord;Lcom/android/server/am/ProcessReceiverRecord;
 HSPLcom/android/server/am/OomAdjuster;->assignCachedAdjIfNecessary(Ljava/util/ArrayList;)V+]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/am/OomAdjuster;->checkAndEnqueueOomAdjTargetLocked(Lcom/android/server/am/ProcessRecord;)Z
 HSPLcom/android/server/am/OomAdjuster;->collectReachableProcessesLocked(Landroid/util/ArraySet;Ljava/util/ArrayList;Lcom/android/server/am/ActiveUids;)Z+]Lcom/android/server/am/ActiveUids;Lcom/android/server/am/ActiveUids;]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ProcessProviderRecord;Lcom/android/server/am/ProcessProviderRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HSPLcom/android/server/am/OomAdjuster;->computeOomAdjLSP(Lcom/android/server/am/ProcessRecord;ILcom/android/server/am/ProcessRecord;ZJZZ)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ConnectionRecord;Lcom/android/server/am/ConnectionRecord;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ContentProviderConnection;Lcom/android/server/am/ContentProviderConnection;]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Lcom/android/server/am/ContentProviderRecord;Lcom/android/server/am/ContentProviderRecord;]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessProviderRecord;Lcom/android/server/am/ProcessProviderRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;
+HSPLcom/android/server/am/OomAdjuster;->computeOomAdjLSP(Lcom/android/server/am/ProcessRecord;ILcom/android/server/am/ProcessRecord;ZJZZ)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ConnectionRecord;Lcom/android/server/am/ConnectionRecord;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ContentProviderConnection;Lcom/android/server/am/ContentProviderConnection;]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Lcom/android/server/am/ContentProviderRecord;Lcom/android/server/am/ContentProviderRecord;]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ProcessProviderRecord;Lcom/android/server/am/ProcessProviderRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;
 HSPLcom/android/server/am/OomAdjuster;->createAdjusterThread()Lcom/android/server/ServiceThread;
 PLcom/android/server/am/OomAdjuster;->dumpCacheOomRankerSettings(Ljava/io/PrintWriter;)V
 PLcom/android/server/am/OomAdjuster;->dumpCachedAppOptimizerSettings(Ljava/io/PrintWriter;)V
@@ -9236,11 +9577,11 @@
 PLcom/android/server/am/OomAdjuster;->dumpSequenceNumbersLocked(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/am/OomAdjuster;->enqueueOomAdjTargetLocked(Lcom/android/server/am/ProcessRecord;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/am/OomAdjuster;->getDefaultCapability(Lcom/android/server/am/ProcessServiceRecord;I)I+]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;
-PLcom/android/server/am/OomAdjuster;->handleUserSwitchedLocked()V
-HPLcom/android/server/am/OomAdjuster;->idleUidsLocked()V+]Lcom/android/server/am/ActiveUids;Lcom/android/server/am/ActiveUids;]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;
+HSPLcom/android/server/am/OomAdjuster;->handleUserSwitchedLocked()V
+HPLcom/android/server/am/OomAdjuster;->idleUidsLocked()V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Lcom/android/server/am/ActiveUids;Lcom/android/server/am/ActiveUids;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/OomAdjuster;->initSettings()V
 HSPLcom/android/server/am/OomAdjuster;->isChangeEnabled(ILandroid/content/pm/ApplicationInfo;Z)Z
-PLcom/android/server/am/OomAdjuster;->lambda$applyOomAdjLSP$1(Lcom/android/server/am/ProcessRecord;)V
+HPLcom/android/server/am/OomAdjuster;->lambda$applyOomAdjLSP$1(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/OomAdjuster;->lambda$new$0(Landroid/os/Message;)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/am/OomAdjuster;->maybeUpdateLastTopTime(Lcom/android/server/am/ProcessStateRecord;J)V+]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;
 HSPLcom/android/server/am/OomAdjuster;->maybeUpdateUsageStatsLSP(Lcom/android/server/am/ProcessRecord;J)V+]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;
@@ -9255,18 +9596,18 @@
 HSPLcom/android/server/am/OomAdjuster;->setUidTempAllowlistStateLSP(IZ)V
 HSPLcom/android/server/am/OomAdjuster;->shouldKillExcessiveProcesses(J)Z+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;
 HSPLcom/android/server/am/OomAdjuster;->shouldSkipDueToCycle(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessStateRecord;IIZ)Z+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;
-HSPLcom/android/server/am/OomAdjuster;->updateAndTrimProcessLSP(JJJLcom/android/server/am/ActiveUids;)Z+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/am/OomAdjuster;->updateAndTrimProcessLSP(JJJLcom/android/server/am/ActiveUids;)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/am/OomAdjuster;->updateAppFreezeStateLSP(Lcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/CachedAppOptimizer;Lcom/android/server/am/CachedAppOptimizer;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;
 HSPLcom/android/server/am/OomAdjuster;->updateAppUidRecIfNecessaryLSP(Lcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/OomAdjuster;->updateAppUidRecLSP(Lcom/android/server/am/ProcessRecord;)V+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
-PLcom/android/server/am/OomAdjuster;->updateKeepWarmIfNecessaryForProcessLocked(Lcom/android/server/am/ProcessRecord;)V
-HSPLcom/android/server/am/OomAdjuster;->updateOomAdjInnerLSP(Ljava/lang/String;Lcom/android/server/am/ProcessRecord;Ljava/util/ArrayList;Lcom/android/server/am/ActiveUids;ZZ)V+]Lcom/android/server/am/ActiveUids;Lcom/android/server/am/ActiveUids;]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Lcom/android/server/am/CacheOomRanker;Lcom/android/server/am/CacheOomRanker;]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/OomAdjProfiler;Lcom/android/server/am/OomAdjProfiler;]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;
+HSPLcom/android/server/am/OomAdjuster;->updateKeepWarmIfNecessaryForProcessLocked(Lcom/android/server/am/ProcessRecord;)V
+HSPLcom/android/server/am/OomAdjuster;->updateOomAdjInnerLSP(Ljava/lang/String;Lcom/android/server/am/ProcessRecord;Ljava/util/ArrayList;Lcom/android/server/am/ActiveUids;ZZ)V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/AppProfiler;Lcom/android/server/am/AppProfiler;]Lcom/android/server/am/ActiveUids;Lcom/android/server/am/ActiveUids;]Lcom/android/server/am/CacheOomRanker;Lcom/android/server/am/CacheOomRanker;]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/OomAdjProfiler;Lcom/android/server/am/OomAdjProfiler;
 HSPLcom/android/server/am/OomAdjuster;->updateOomAdjLSP(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;)Z+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;
 HSPLcom/android/server/am/OomAdjuster;->updateOomAdjLSP(Ljava/lang/String;)V+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;
 HSPLcom/android/server/am/OomAdjuster;->updateOomAdjLocked(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;)Z+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;
 HSPLcom/android/server/am/OomAdjuster;->updateOomAdjLocked(Ljava/lang/String;)V+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;
 HSPLcom/android/server/am/OomAdjuster;->updateOomAdjPendingTargetsLocked(Ljava/lang/String;)V+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;]Landroid/util/ArraySet;Landroid/util/ArraySet;
-HSPLcom/android/server/am/OomAdjuster;->updateUidsLSP(Lcom/android/server/am/ActiveUids;J)V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Lcom/android/server/am/ActiveUids;Lcom/android/server/am/ActiveUids;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HSPLcom/android/server/am/OomAdjuster;->updateUidsLSP(Lcom/android/server/am/ActiveUids;J)V+]Lcom/android/server/am/ActiveUids;Lcom/android/server/am/ActiveUids;]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/am/ActiveServices;Lcom/android/server/am/ActiveServices;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/PackageList;-><init>(Lcom/android/server/am/ProcessRecord;)V
 HPLcom/android/server/am/PackageList;->clear()V
 HSPLcom/android/server/am/PackageList;->containsKey(Ljava/lang/Object;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
@@ -9277,7 +9618,7 @@
 HSPLcom/android/server/am/PackageList;->get(Ljava/lang/String;)Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/am/PackageList;->getPackageList()[Ljava/lang/String;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/am/PackageList;->getPackageListLocked()Landroid/util/ArrayMap;
-HPLcom/android/server/am/PackageList;->getPackageListWithVersionCode()Ljava/util/List;
+HPLcom/android/server/am/PackageList;->getPackageListWithVersionCode()Ljava/util/List;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLcom/android/server/am/PackageList;->put(Ljava/lang/String;Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;)Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/PackageList;->searchEachPackage(Ljava/util/function/Function;)Ljava/lang/Object;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/function/Function;Lcom/android/server/am/ContentProviderHelper$$ExternalSyntheticLambda3;
 HSPLcom/android/server/am/PackageList;->size()I+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
@@ -9291,48 +9632,48 @@
 HPLcom/android/server/am/PendingIntentController;->cancelIntentSender(Landroid/content/IIntentSender;)V+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentController;
 HPLcom/android/server/am/PendingIntentController;->cancelIntentSender(Lcom/android/server/am/PendingIntentRecord;Z)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentController;]Landroid/os/Handler;Landroid/os/Handler;
 PLcom/android/server/am/PendingIntentController;->clearPendingResultForActivity(Landroid/os/IBinder;Ljava/lang/ref/WeakReference;)V
-HPLcom/android/server/am/PendingIntentController;->decrementUidStatLocked(Lcom/android/server/am/PendingIntentRecord;)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/am/PendingIntentController;->decrementUidStatLocked(Lcom/android/server/am/PendingIntentRecord;)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/am/PendingIntentController;->dumpPendingIntentStatsForStatsd()Ljava/util/List;+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Collection;Ljava/util/HashMap$Values;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Ljava/util/Iterator;Ljava/util/HashMap$ValueIterator;]Landroid/content/Intent;Landroid/content/Intent;
 HPLcom/android/server/am/PendingIntentController;->dumpPendingIntents(Ljava/io/PrintWriter;ZLjava/lang/String;)V
 HSPLcom/android/server/am/PendingIntentController;->getIntentSender(ILjava/lang/String;Ljava/lang/String;IILandroid/os/IBinder;Ljava/lang/String;I[Landroid/content/Intent;[Ljava/lang/String;ILandroid/os/Bundle;)Lcom/android/server/am/PendingIntentRecord;+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentController;]Landroid/content/Intent;Landroid/content/Intent;
 HPLcom/android/server/am/PendingIntentController;->getPendingIntentFlags(Landroid/content/IIntentSender;)I
 PLcom/android/server/am/PendingIntentController;->handlePendingIntentCancelled(Landroid/os/RemoteCallbackList;)V
-HSPLcom/android/server/am/PendingIntentController;->incrementUidStatLocked(Lcom/android/server/am/PendingIntentRecord;)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/PendingIntentRecord$Key;Lcom/android/server/am/PendingIntentRecord$Key;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/util/RingBuffer;Lcom/android/internal/util/RingBuffer;
+HSPLcom/android/server/am/PendingIntentController;->incrementUidStatLocked(Lcom/android/server/am/PendingIntentRecord;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/am/PendingIntentRecord$Key;Lcom/android/server/am/PendingIntentRecord$Key;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/util/RingBuffer;Lcom/android/internal/util/RingBuffer;
 HPLcom/android/server/am/PendingIntentController;->makeIntentSenderCanceled(Lcom/android/server/am/PendingIntentRecord;)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/AlarmManagerInternal;Lcom/android/server/alarm/AlarmManagerService$LocalService;]Lcom/android/server/am/PendingIntentRecord;Lcom/android/server/am/PendingIntentRecord;
 HSPLcom/android/server/am/PendingIntentController;->onActivityManagerInternalAdded()V
 HPLcom/android/server/am/PendingIntentController;->registerIntentSenderCancelListener(Landroid/content/IIntentSender;Lcom/android/internal/os/IResultReceiver;)Z+]Lcom/android/server/am/PendingIntentRecord;Lcom/android/server/am/PendingIntentRecord;
-PLcom/android/server/am/PendingIntentController;->removePendingIntentsForPackage(Ljava/lang/String;IIZ)Z
+HPLcom/android/server/am/PendingIntentController;->removePendingIntentsForPackage(Ljava/lang/String;IIZ)Z+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/Collection;Ljava/util/HashMap$Values;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentController;]Ljava/util/Iterator;Ljava/util/HashMap$ValueIterator;
 HPLcom/android/server/am/PendingIntentController;->setPendingIntentAllowlistDuration(Landroid/content/IIntentSender;Landroid/os/IBinder;JIILjava/lang/String;)V+]Lcom/android/server/am/PendingIntentRecord;Lcom/android/server/am/PendingIntentRecord;
 HPLcom/android/server/am/PendingIntentController;->unregisterIntentSenderCancelListener(Landroid/content/IIntentSender;Lcom/android/internal/os/IResultReceiver;)V+]Lcom/android/server/am/PendingIntentRecord;Lcom/android/server/am/PendingIntentRecord;
-HPLcom/android/server/am/PendingIntentRecord$$ExternalSyntheticLambda0;-><init>()V
-HPLcom/android/server/am/PendingIntentRecord$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
-HSPLcom/android/server/am/PendingIntentRecord$Key;-><init>(ILjava/lang/String;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;I[Landroid/content/Intent;[Ljava/lang/String;ILcom/android/server/wm/SafeActivityOptions;I)V+]Ljava/lang/String;Ljava/lang/String;]Landroid/content/Intent;Landroid/content/Intent;]Ljava/lang/Object;Lcom/android/server/wm/ActivityRecord$Token;
+HSPLcom/android/server/am/PendingIntentRecord$$ExternalSyntheticLambda0;-><init>()V
+HSPLcom/android/server/am/PendingIntentRecord$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/am/PendingIntentRecord$Key;-><init>(ILjava/lang/String;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;I[Landroid/content/Intent;[Ljava/lang/String;ILcom/android/server/wm/SafeActivityOptions;I)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/Object;Lcom/android/server/wm/ActivityRecord$Token;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/am/PendingIntentRecord$Key;->equals(Ljava/lang/Object;)Z+]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/am/PendingIntentRecord$Key;->hashCode()I
 HPLcom/android/server/am/PendingIntentRecord$Key;->toString()Ljava/lang/String;
 PLcom/android/server/am/PendingIntentRecord$Key;->typeName()Ljava/lang/String;
 HPLcom/android/server/am/PendingIntentRecord$TempAllowListDuration;-><init>(JIILjava/lang/String;)V
-HPLcom/android/server/am/PendingIntentRecord;->$r8$lambda$0acvBWvihzGS4yw0LCNL-NJDvhU(Lcom/android/server/am/PendingIntentRecord;)V
+HSPLcom/android/server/am/PendingIntentRecord;->$r8$lambda$0acvBWvihzGS4yw0LCNL-NJDvhU(Lcom/android/server/am/PendingIntentRecord;)V+]Lcom/android/server/am/PendingIntentRecord;Lcom/android/server/am/PendingIntentRecord;
 HSPLcom/android/server/am/PendingIntentRecord;-><init>(Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentRecord$Key;I)V
-PLcom/android/server/am/PendingIntentRecord;->clearAllowBgActivityStarts(Landroid/os/IBinder;)V
-HPLcom/android/server/am/PendingIntentRecord;->completeFinalize()V+]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentController;
+HPLcom/android/server/am/PendingIntentRecord;->clearAllowBgActivityStarts(Landroid/os/IBinder;)V
+HSPLcom/android/server/am/PendingIntentRecord;->completeFinalize()V+]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentController;
 HPLcom/android/server/am/PendingIntentRecord;->detachCancelListenersLocked()Landroid/os/RemoteCallbackList;
 HPLcom/android/server/am/PendingIntentRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-HPLcom/android/server/am/PendingIntentRecord;->finalize()V+]Landroid/os/Handler;Landroid/os/Handler;
+HSPLcom/android/server/am/PendingIntentRecord;->finalize()V+]Landroid/os/Handler;Landroid/os/Handler;
 PLcom/android/server/am/PendingIntentRecord;->isPendingIntentBalAllowedByCaller(Landroid/app/ActivityOptions;)Z
 HPLcom/android/server/am/PendingIntentRecord;->isPendingIntentBalAllowedByCaller(Landroid/os/Bundle;)Z
 PLcom/android/server/am/PendingIntentRecord;->isPendingIntentBalAllowedByPermission(Landroid/app/ActivityOptions;)Z
 HPLcom/android/server/am/PendingIntentRecord;->registerCancelListenerLocked(Lcom/android/internal/os/IResultReceiver;)V+]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;
-HPLcom/android/server/am/PendingIntentRecord;->sendInner(ILandroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Landroid/content/IIntentReceiver;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IIILandroid/os/Bundle;)I+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/IIntentReceiver;Landroid/app/PendingIntent$FinishedDispatcher;,Landroid/content/IIntentReceiver$Stub$Proxy;]Landroid/app/ActivityOptions;Landroid/app/ActivityOptions;]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentController;]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/wm/SafeActivityOptions;Lcom/android/server/wm/SafeActivityOptions;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;
+HPLcom/android/server/am/PendingIntentRecord;->sendInner(ILandroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Landroid/content/IIntentReceiver;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IIILandroid/os/Bundle;)I+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/wm/SafeActivityOptions;Lcom/android/server/wm/SafeActivityOptions;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Landroid/content/IIntentReceiver;Landroid/app/PendingIntent$FinishedDispatcher;,Landroid/content/IIntentReceiver$Stub$Proxy;]Landroid/app/ActivityOptions;Landroid/app/ActivityOptions;]Lcom/android/server/am/PendingIntentController;Lcom/android/server/am/PendingIntentController;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;
 HPLcom/android/server/am/PendingIntentRecord;->sendWithResult(ILandroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Landroid/content/IIntentReceiver;Ljava/lang/String;Landroid/os/Bundle;)I+]Lcom/android/server/am/PendingIntentRecord;Lcom/android/server/am/PendingIntentRecord;
 HPLcom/android/server/am/PendingIntentRecord;->setAllowBgActivityStarts(Landroid/os/IBinder;I)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/am/PendingIntentRecord;->setAllowlistDurationLocked(Landroid/os/IBinder;JIILjava/lang/String;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HPLcom/android/server/am/PendingIntentRecord;->toString()Ljava/lang/String;
 HPLcom/android/server/am/PendingIntentRecord;->unregisterCancelListenerLocked(Lcom/android/internal/os/IResultReceiver;)V+]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;
 HSPLcom/android/server/am/PendingStartActivityUids;-><init>(Landroid/content/Context;)V
-HPLcom/android/server/am/PendingStartActivityUids;->add(II)Z
-HSPLcom/android/server/am/PendingStartActivityUids;->delete(IJ)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/lang/Long;Ljava/lang/Long;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-PLcom/android/server/am/PendingStartActivityUids;->getPendingTopPidTime(II)J
+HSPLcom/android/server/am/PendingStartActivityUids;->add(II)Z
+HSPLcom/android/server/am/PendingStartActivityUids;->delete(IJ)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/lang/Long;Ljava/lang/Long;
+HPLcom/android/server/am/PendingStartActivityUids;->getPendingTopPidTime(II)J
 HSPLcom/android/server/am/PendingStartActivityUids;->isPendingTopUid(I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/am/PendingTempAllowlists;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 HPLcom/android/server/am/PendingTempAllowlists;->get(I)Lcom/android/server/am/ActivityManagerService$PendingTempAllowlist;
@@ -9346,9 +9687,9 @@
 PLcom/android/server/am/PersistentConnection$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/am/PersistentConnection;)V
 PLcom/android/server/am/PersistentConnection$$ExternalSyntheticLambda1;->run()V
 PLcom/android/server/am/PersistentConnection$1;-><init>(Lcom/android/server/am/PersistentConnection;)V
-PLcom/android/server/am/PersistentConnection$1;->onBindingDied(Landroid/content/ComponentName;)V
-PLcom/android/server/am/PersistentConnection$1;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
-PLcom/android/server/am/PersistentConnection$1;->onServiceDisconnected(Landroid/content/ComponentName;)V
+HPLcom/android/server/am/PersistentConnection$1;->onBindingDied(Landroid/content/ComponentName;)V
+HPLcom/android/server/am/PersistentConnection$1;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HPLcom/android/server/am/PersistentConnection$1;->onServiceDisconnected(Landroid/content/ComponentName;)V
 PLcom/android/server/am/PersistentConnection;->$r8$lambda$0Uc1BLpcIBcXfSfpGEj9PLYt4UA(Lcom/android/server/am/PersistentConnection;)V
 PLcom/android/server/am/PersistentConnection;->$r8$lambda$NDr0QkTwLudk3QjjkXGtybRrWsM(Lcom/android/server/am/PersistentConnection;)V
 PLcom/android/server/am/PersistentConnection;->-$$Nest$fgetmBound(Lcom/android/server/am/PersistentConnection;)Z
@@ -9370,7 +9711,7 @@
 PLcom/android/server/am/PersistentConnection;-><init>(Ljava/lang/String;Landroid/content/Context;Landroid/os/Handler;ILandroid/content/ComponentName;JDJJ)V
 PLcom/android/server/am/PersistentConnection;->bind()V
 PLcom/android/server/am/PersistentConnection;->bindForBackoff()V
-PLcom/android/server/am/PersistentConnection;->bindInnerLocked(Z)V
+HPLcom/android/server/am/PersistentConnection;->bindInnerLocked(Z)V
 PLcom/android/server/am/PersistentConnection;->cleanUpConnectionLocked()V
 PLcom/android/server/am/PersistentConnection;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
 PLcom/android/server/am/PersistentConnection;->getUserId()I
@@ -9379,11 +9720,11 @@
 PLcom/android/server/am/PersistentConnection;->injectUptimeMillis()J
 PLcom/android/server/am/PersistentConnection;->lambda$new$0()V
 PLcom/android/server/am/PersistentConnection;->resetBackoffLocked()V
-PLcom/android/server/am/PersistentConnection;->scheduleRebindLocked()V
+HPLcom/android/server/am/PersistentConnection;->scheduleRebindLocked()V
 PLcom/android/server/am/PersistentConnection;->scheduleStableCheckLocked()V
 PLcom/android/server/am/PersistentConnection;->stableConnectionCheck()V
 PLcom/android/server/am/PersistentConnection;->unbind()V
-PLcom/android/server/am/PersistentConnection;->unbindLocked()V
+HPLcom/android/server/am/PersistentConnection;->unbindLocked()V
 PLcom/android/server/am/PersistentConnection;->unscheduleRebindLocked()V
 PLcom/android/server/am/PersistentConnection;->unscheduleStableCheckLocked()V
 PLcom/android/server/am/PhantomProcessList$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/am/PhantomProcessList;)V
@@ -9401,9 +9742,9 @@
 HPLcom/android/server/am/PhantomProcessList;->addChildPidLocked(Lcom/android/server/am/ProcessRecord;II)V+]Lcom/android/server/am/ActivityManagerService$PidMap;Lcom/android/server/am/ActivityManagerService$PidMap;]Lcom/android/server/am/PhantomProcessList;Lcom/android/server/am/PhantomProcessList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/PhantomProcessList$Injector;Lcom/android/server/am/PhantomProcessList$Injector;
 PLcom/android/server/am/PhantomProcessList;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/am/PhantomProcessList;->dumpPhantomeProcessLocked(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Landroid/util/SparseArray;)V
-HPLcom/android/server/am/PhantomProcessList;->forEachPhantomProcessOfApp(Lcom/android/server/am/ProcessRecord;Ljava/util/function/Function;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/function/Function;Lcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda29;]Ljava/lang/Boolean;Ljava/lang/Boolean;
+HPLcom/android/server/am/PhantomProcessList;->forEachPhantomProcessOfApp(Lcom/android/server/am/ProcessRecord;Ljava/util/function/Function;)V+]Ljava/util/function/Function;Lcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda29;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HPLcom/android/server/am/PhantomProcessList;->getCgroupFilePath(II)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HPLcom/android/server/am/PhantomProcessList;->getOrCreatePhantomProcessIfNeededLocked(Ljava/lang/String;IIZ)Lcom/android/server/am/PhantomProcessRecord;+]Lcom/android/server/am/PhantomProcessList;Lcom/android/server/am/PhantomProcessList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/Handler;Lcom/android/server/am/ProcessList$KillHandler;]Lcom/android/server/am/PhantomProcessRecord;Lcom/android/server/am/PhantomProcessRecord;]Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;]Landroid/os/Looper;Landroid/os/Looper;]Landroid/os/MessageQueue;Landroid/os/MessageQueue;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HPLcom/android/server/am/PhantomProcessList;->getOrCreatePhantomProcessIfNeededLocked(Ljava/lang/String;IIZ)Lcom/android/server/am/PhantomProcessRecord;+]Landroid/os/Handler;Lcom/android/server/am/ProcessList$KillHandler;]Lcom/android/server/am/PhantomProcessList;Lcom/android/server/am/PhantomProcessList;]Lcom/android/server/am/PhantomProcessRecord;Lcom/android/server/am/PhantomProcessRecord;]Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/Looper;Landroid/os/Looper;]Landroid/os/MessageQueue;Landroid/os/MessageQueue;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HPLcom/android/server/am/PhantomProcessList;->getProcessName(I)Ljava/lang/String;
 HPLcom/android/server/am/PhantomProcessList;->isAppProcess(I)Z+]Lcom/android/server/am/ActivityManagerService$PidMap;Lcom/android/server/am/ActivityManagerService$PidMap;
 PLcom/android/server/am/PhantomProcessList;->killPhantomProcessGroupLocked(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/PhantomProcessRecord;IILjava/lang/String;)V
@@ -9421,7 +9762,7 @@
 PLcom/android/server/am/PhantomProcessRecord;-><clinit>()V
 HPLcom/android/server/am/PhantomProcessRecord;-><init>(Ljava/lang/String;IIILcom/android/server/am/ActivityManagerService;Ljava/util/function/Consumer;)V
 PLcom/android/server/am/PhantomProcessRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/am/PhantomProcessRecord;->equals(Ljava/lang/String;II)Z
+HPLcom/android/server/am/PhantomProcessRecord;->equals(Ljava/lang/String;II)Z
 PLcom/android/server/am/PhantomProcessRecord;->killLocked(Ljava/lang/String;Z)V
 PLcom/android/server/am/PhantomProcessRecord;->onProcDied(Z)V
 HPLcom/android/server/am/PhantomProcessRecord;->toString()Ljava/lang/String;
@@ -9429,7 +9770,7 @@
 HSPLcom/android/server/am/PlatformCompatCache$CacheItem;-><init>(Lcom/android/server/compat/PlatformCompat;J)V
 HSPLcom/android/server/am/PlatformCompatCache$CacheItem;->fetchLocked(Landroid/content/pm/ApplicationInfo;I)Z+]Lcom/android/server/compat/PlatformCompat;Lcom/android/server/compat/PlatformCompat;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Boolean;Ljava/lang/Boolean;
 HSPLcom/android/server/am/PlatformCompatCache$CacheItem;->invalidate(Landroid/content/pm/ApplicationInfo;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
-HSPLcom/android/server/am/PlatformCompatCache$CacheItem;->isChangeEnabled(Landroid/content/pm/ApplicationInfo;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Lcom/android/server/am/PlatformCompatCache$CacheItem;Lcom/android/server/am/PlatformCompatCache$CacheItem;
+HSPLcom/android/server/am/PlatformCompatCache$CacheItem;->isChangeEnabled(Landroid/content/pm/ApplicationInfo;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Lcom/android/server/am/PlatformCompatCache$CacheItem;Lcom/android/server/am/PlatformCompatCache$CacheItem;
 HSPLcom/android/server/am/PlatformCompatCache$CacheItem;->onApplicationInfoChanged(Landroid/content/pm/ApplicationInfo;)V
 HSPLcom/android/server/am/PlatformCompatCache;-><clinit>()V
 HSPLcom/android/server/am/PlatformCompatCache;-><init>([J)V
@@ -9459,7 +9800,7 @@
 HSPLcom/android/server/am/ProcessCachedOptimizerRecord;->isFrozen()Z
 HSPLcom/android/server/am/ProcessCachedOptimizerRecord;->isPendingFreeze()Z
 HPLcom/android/server/am/ProcessCachedOptimizerRecord;->setForceCompact(Z)V
-PLcom/android/server/am/ProcessCachedOptimizerRecord;->setFreezeExempt(Z)V
+HPLcom/android/server/am/ProcessCachedOptimizerRecord;->setFreezeExempt(Z)V
 HPLcom/android/server/am/ProcessCachedOptimizerRecord;->setFreezeUnfreezeTime(J)V
 HSPLcom/android/server/am/ProcessCachedOptimizerRecord;->setFreezerOverride(Z)V
 HPLcom/android/server/am/ProcessCachedOptimizerRecord;->setFrozen(Z)V
@@ -9488,7 +9829,8 @@
 PLcom/android/server/am/ProcessErrorStateRecord;->getShowBackground()Z
 HPLcom/android/server/am/ProcessErrorStateRecord;->isBad()Z
 HSPLcom/android/server/am/ProcessErrorStateRecord;->isCrashing()Z
-PLcom/android/server/am/ProcessErrorStateRecord;->isInterestingForBackgroundTraces()Z
+PLcom/android/server/am/ProcessErrorStateRecord;->isForceCrashReport()Z
+HPLcom/android/server/am/ProcessErrorStateRecord;->isInterestingForBackgroundTraces()Z
 PLcom/android/server/am/ProcessErrorStateRecord;->isMonitorCpuUsage()Z
 HPLcom/android/server/am/ProcessErrorStateRecord;->isNotResponding()Z
 PLcom/android/server/am/ProcessErrorStateRecord;->isSilentAnr()Z
@@ -9504,7 +9846,7 @@
 PLcom/android/server/am/ProcessErrorStateRecord;->setForceCrashReport(Z)V
 HSPLcom/android/server/am/ProcessErrorStateRecord;->setNotResponding(Z)V
 PLcom/android/server/am/ProcessErrorStateRecord;->setNotRespondingReport(Landroid/app/ActivityManager$ProcessErrorStateInfo;)V
-HPLcom/android/server/am/ProcessErrorStateRecord;->startAppProblemLSP()V
+HPLcom/android/server/am/ProcessErrorStateRecord;->startAppProblemLSP()V+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ProcessList$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/am/ProcessList;)V
 HSPLcom/android/server/am/ProcessList$$ExternalSyntheticLambda0;->onFileDescriptorEvents(Ljava/io/FileDescriptor;I)I
 HSPLcom/android/server/am/ProcessList$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/am/ProcessList;J)V
@@ -9521,14 +9863,14 @@
 HPLcom/android/server/am/ProcessList$1;->handleUnsolicitedMessage(Ljava/io/DataInputStream;I)Z+]Lcom/android/server/am/AppExitInfoTracker;Lcom/android/server/am/AppExitInfoTracker;]Ljava/io/DataInputStream;Ljava/io/DataInputStream;
 PLcom/android/server/am/ProcessList$1;->isReplyExpected(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;I)Z
 HSPLcom/android/server/am/ProcessList$1;->onConnect(Ljava/io/OutputStream;)Z
-PLcom/android/server/am/ProcessList$2;-><init>()V
-HPLcom/android/server/am/ProcessList$2;->compare(Landroid/util/Pair;Landroid/util/Pair;)I
-HPLcom/android/server/am/ProcessList$2;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+HSPLcom/android/server/am/ProcessList$2;-><init>()V
+HSPLcom/android/server/am/ProcessList$2;->compare(Landroid/util/Pair;Landroid/util/Pair;)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;
+HSPLcom/android/server/am/ProcessList$2;->compare(Ljava/lang/Object;Ljava/lang/Object;)I+]Lcom/android/server/am/ProcessList$2;Lcom/android/server/am/ProcessList$2;
 HSPLcom/android/server/am/ProcessList$ImperceptibleKillRunner$H;-><init>(Lcom/android/server/am/ProcessList$ImperceptibleKillRunner;Landroid/os/Looper;)V
 HSPLcom/android/server/am/ProcessList$ImperceptibleKillRunner;-><init>(Lcom/android/server/am/ProcessList;Landroid/os/Looper;)V
 HSPLcom/android/server/am/ProcessList$IsolatedUidRange;-><init>(Lcom/android/server/am/ProcessList;II)V
 HPLcom/android/server/am/ProcessList$IsolatedUidRange;->allocateIsolatedUidLocked(I)I
-HSPLcom/android/server/am/ProcessList$IsolatedUidRange;->freeIsolatedUidLocked(I)V
+HSPLcom/android/server/am/ProcessList$IsolatedUidRange;->freeIsolatedUidLocked(I)V+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
 HSPLcom/android/server/am/ProcessList$IsolatedUidRangeAllocator;-><init>(Lcom/android/server/am/ProcessList;III)V
 HPLcom/android/server/am/ProcessList$IsolatedUidRangeAllocator;->freeUidRangeLocked(Landroid/content/pm/ApplicationInfo;)V
 HPLcom/android/server/am/ProcessList$IsolatedUidRangeAllocator;->getIsolatedUidRangeLocked(Ljava/lang/String;I)Lcom/android/server/am/ProcessList$IsolatedUidRange;
@@ -9545,15 +9887,15 @@
 HSPLcom/android/server/am/ProcessList;->$r8$lambda$HTKYW1oYWbA5nRBREe58yytwlAQ(Lcom/android/server/am/ProcessList;JLcom/android/server/am/ProcessRecord;)V
 PLcom/android/server/am/ProcessList;->$r8$lambda$NhPjD016KPllRJkIof0o79yYLVc(Lcom/android/server/am/ProcessList;Ljava/lang/String;ZJLcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ProcessList;->$r8$lambda$Yx7qOPOwpHNPdaQI_3F9XOqeTBg(ZLjava/util/List;Lcom/android/server/am/ProcessRecord;Ljava/util/ArrayList;Ljava/lang/String;)V
-HSPLcom/android/server/am/ProcessList;->$r8$lambda$eEVoHjWPClUsVDRm3xBMVJVcgcw(Lcom/android/server/am/ProcessList;Ljava/io/FileDescriptor;I)I
+HSPLcom/android/server/am/ProcessList;->$r8$lambda$eEVoHjWPClUsVDRm3xBMVJVcgcw(Lcom/android/server/am/ProcessList;Ljava/io/FileDescriptor;I)I+]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;
 HSPLcom/android/server/am/ProcessList;->$r8$lambda$oBmDYaH718rbQmtZhkdQqDR_vGQ(Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;[IIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;J)V
 HSPLcom/android/server/am/ProcessList;->$r8$lambda$yAUAM7lp-U4rR1kIWsGK9Z-eFWc(Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessRecord;Ljava/lang/String;[IIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;J)V
 PLcom/android/server/am/ProcessList;->-$$Nest$mhandlePredecessorProcDied(Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ProcessList;->-$$Nest$sfgetsLmkdConnection()Lcom/android/server/am/LmkdConnection;
 HSPLcom/android/server/am/ProcessList;-><clinit>()V
 HSPLcom/android/server/am/ProcessList;-><init>()V
-HSPLcom/android/server/am/ProcessList;->addProcessNameLocked(Lcom/android/server/am/ProcessRecord;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/ActiveUids;Lcom/android/server/am/ActiveUids;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/PendingTempAllowlists;Lcom/android/server/am/PendingTempAllowlists;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ProcessList$MyProcessMap;Lcom/android/server/am/ProcessList$MyProcessMap;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-HPLcom/android/server/am/ProcessList;->appendRamKb(Ljava/lang/StringBuilder;J)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/am/ProcessList;->addProcessNameLocked(Lcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/am/ActiveUids;Lcom/android/server/am/ActiveUids;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/PendingTempAllowlists;Lcom/android/server/am/PendingTempAllowlists;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ProcessList$MyProcessMap;Lcom/android/server/am/ProcessList$MyProcessMap;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HSPLcom/android/server/am/ProcessList;->appendRamKb(Ljava/lang/StringBuilder;J)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/am/ProcessList;->applyDisplaySize(Lcom/android/server/wm/WindowManagerService;)V
 HSPLcom/android/server/am/ProcessList;->buildOomTag(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIZ)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/am/ProcessList;->checkSlow(JLjava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
@@ -9563,22 +9905,22 @@
 HSPLcom/android/server/am/ProcessList;->computeNextPssTime(ILcom/android/server/am/ProcessList$ProcStateMemTracker;ZZJ)J
 HPLcom/android/server/am/ProcessList;->createAppZygoteForProcessIfNeeded(Lcom/android/server/am/ProcessRecord;)Landroid/os/AppZygote;
 HSPLcom/android/server/am/ProcessList;->createSystemServerSocketForZygote()Landroid/net/LocalSocket;
-HSPLcom/android/server/am/ProcessList;->dispatchProcessDied(II)V+]Landroid/app/IProcessObserver;Landroid/app/IProcessObserver$Stub$Proxy;,Lcom/android/server/am/AppFGSTracker$1;,Lcom/android/server/media/projection/MediaProjectionManagerService$1;]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;
-HSPLcom/android/server/am/ProcessList;->dispatchProcessesChanged()V+]Landroid/app/IProcessObserver;Lcom/android/server/am/AppFGSTracker$1;,Lcom/android/server/media/projection/MediaProjectionManagerService$1;,Landroid/app/IProcessObserver$Stub$Proxy;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;
+HSPLcom/android/server/am/ProcessList;->dispatchProcessDied(II)V+]Landroid/app/IProcessObserver;Lcom/android/server/app/GameServiceProviderInstanceImpl$5;,Landroid/app/IProcessObserver$Stub$Proxy;,Lcom/android/server/am/AppFGSTracker$1;,Lcom/android/server/media/projection/MediaProjectionManagerService$1;]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;
+HSPLcom/android/server/am/ProcessList;->dispatchProcessesChanged()V+]Landroid/app/IProcessObserver;Lcom/android/server/app/GameServiceProviderInstanceImpl$5;,Landroid/app/IProcessObserver$Stub$Proxy;,Lcom/android/server/am/AppFGSTracker$1;,Lcom/android/server/media/projection/MediaProjectionManagerService$1;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;
 PLcom/android/server/am/ProcessList;->doStopUidForIdleUidsLocked()V
-HPLcom/android/server/am/ProcessList;->dumpLruEntryLocked(Ljava/io/PrintWriter;ILcom/android/server/am/ProcessRecord;Ljava/lang/String;)V
-PLcom/android/server/am/ProcessList;->dumpLruListHeaderLocked(Ljava/io/PrintWriter;)V
-HPLcom/android/server/am/ProcessList;->dumpLruLocked(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;)Z
-HPLcom/android/server/am/ProcessList;->dumpOomLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Z[Ljava/lang/String;IZLjava/lang/String;Z)Z
-HPLcom/android/server/am/ProcessList;->dumpProcessOomList(Ljava/io/PrintWriter;Lcom/android/server/am/ActivityManagerService;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;)Z
-HPLcom/android/server/am/ProcessList;->dumpProcessesLSP(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;I)V
+HSPLcom/android/server/am/ProcessList;->dumpLruEntryLocked(Ljava/io/PrintWriter;ILcom/android/server/am/ProcessRecord;Ljava/lang/String;)V
+HSPLcom/android/server/am/ProcessList;->dumpLruListHeaderLocked(Ljava/io/PrintWriter;)V
+HSPLcom/android/server/am/ProcessList;->dumpLruLocked(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;)Z
+HSPLcom/android/server/am/ProcessList;->dumpOomLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Z[Ljava/lang/String;IZLjava/lang/String;Z)Z
+HSPLcom/android/server/am/ProcessList;->dumpProcessOomList(Ljava/io/PrintWriter;Lcom/android/server/am/ActivityManagerService;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;)Z
+HSPLcom/android/server/am/ProcessList;->dumpProcessesLSP(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZLjava/lang/String;I)V
 HSPLcom/android/server/am/ProcessList;->enqueueProcessChangeItemLocked(II)Lcom/android/server/am/ActivityManagerService$ProcessChangeItem;+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$UiHandler;]Landroid/os/Message;Landroid/os/Message;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/am/ProcessList;->fillInProcMemInfoLOSP(Lcom/android/server/am/ProcessRecord;Landroid/app/ActivityManager$RunningAppProcessInfo;I)V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
-HPLcom/android/server/am/ProcessList;->findAppProcessLOSP(Landroid/os/IBinder;Ljava/lang/String;)Lcom/android/server/am/ProcessRecord;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/internal/app/ProcessMap;Lcom/android/server/am/ProcessList$MyProcessMap;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;
+HPLcom/android/server/am/ProcessList;->fillInProcMemInfoLOSP(Lcom/android/server/am/ProcessRecord;Landroid/app/ActivityManager$RunningAppProcessInfo;I)V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
+HSPLcom/android/server/am/ProcessList;->findAppProcessLOSP(Landroid/os/IBinder;Ljava/lang/String;)Lcom/android/server/am/ProcessRecord;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/internal/app/ProcessMap;Lcom/android/server/am/ProcessList$MyProcessMap;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;
 HSPLcom/android/server/am/ProcessList;->forEachLruProcessesLOSP(ZLjava/util/function/Consumer;)V+]Ljava/util/function/Consumer;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/am/ProcessList;->getBlockStateForUid(Lcom/android/server/am/UidRecord;)I
+HSPLcom/android/server/am/ProcessList;->getBlockStateForUid(Lcom/android/server/am/UidRecord;)I+]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;
 PLcom/android/server/am/ProcessList;->getCachedRestoreThresholdKb()J
-HPLcom/android/server/am/ProcessList;->getIsolatedProcessesLocked(I)Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
+HSPLcom/android/server/am/ProcessList;->getIsolatedProcessesLocked(I)Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ProcessList;->getLRURecordForAppLOSP(Landroid/app/IApplicationThread;)Lcom/android/server/am/ProcessRecord;+]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;
 PLcom/android/server/am/ProcessList;->getLmkdKillCount(II)Ljava/lang/Integer;
 HSPLcom/android/server/am/ProcessList;->getLruProcessesLOSP()Ljava/util/ArrayList;
@@ -9601,8 +9943,8 @@
 HPLcom/android/server/am/ProcessList;->handleProcessStartWithPredecessor(Lcom/android/server/am/ProcessRecord;Ljava/lang/Runnable;)V
 HSPLcom/android/server/am/ProcessList;->handleProcessStartedLocked(Lcom/android/server/am/ProcessRecord;IZJZ)Z+]Lcom/android/server/am/ActivityManagerService$PidMap;Lcom/android/server/am/ActivityManagerService$PidMap;]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/HostingRecord;Lcom/android/server/am/HostingRecord;]Lcom/android/server/Watchdog;Lcom/android/server/Watchdog;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/BatteryStatsService;Lcom/android/server/am/BatteryStatsService;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ProcessList;->handleProcessStartedLocked(Lcom/android/server/am/ProcessRecord;Landroid/os/Process$ProcessStartResult;J)Z+]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
-HSPLcom/android/server/am/ProcessList;->handleZygoteMessages(Ljava/io/FileDescriptor;I)I
-HSPLcom/android/server/am/ProcessList;->hasAppStorage(Landroid/content/pm/PackageManagerInternal;Ljava/lang/String;)Z+]Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/Map;Landroid/util/ArrayMap;,Ljava/util/HashMap;,Ljava/util/Collections$EmptyMap;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
+HSPLcom/android/server/am/ProcessList;->handleZygoteMessages(Ljava/io/FileDescriptor;I)I+]Lcom/android/server/am/AppExitInfoTracker;Lcom/android/server/am/AppExitInfoTracker;]Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;
+HSPLcom/android/server/am/ProcessList;->hasAppStorage(Landroid/content/pm/PackageManagerInternal;Ljava/lang/String;)Z+]Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/Map;Ljava/util/HashMap;,Landroid/util/ArrayMap;,Ljava/util/Collections$EmptyMap;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/am/ProcessList;->haveBackgroundProcessLOSP()Z+]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/am/ProcessList;->incrementProcStateSeqAndNotifyAppsLOSP(Lcom/android/server/am/ActiveUids;)V+]Lcom/android/server/am/ActiveUids;Lcom/android/server/am/ActiveUids;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;]Lcom/android/server/am/ActivityManagerService$Injector;Lcom/android/server/am/ActivityManagerService$Injector;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;
 HSPLcom/android/server/am/ProcessList;->init(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActiveUids;Lcom/android/server/compat/PlatformCompat;)V
@@ -9614,7 +9956,7 @@
 HPLcom/android/server/am/ProcessList;->killAppZygoteIfNeededLocked(Landroid/os/AppZygote;Z)V
 HSPLcom/android/server/am/ProcessList;->killAppZygotesLocked(Ljava/lang/String;IIZ)V
 PLcom/android/server/am/ProcessList;->killPackageProcessesLSP(Ljava/lang/String;IIIIILjava/lang/String;)Z
-HSPLcom/android/server/am/ProcessList;->killPackageProcessesLSP(Ljava/lang/String;IIIZZZZZZIILjava/lang/String;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/PackageList;Lcom/android/server/am/PackageList;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/internal/app/ProcessMap;Lcom/android/server/am/ProcessList$MyProcessMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
+HSPLcom/android/server/am/ProcessList;->killPackageProcessesLSP(Ljava/lang/String;IIIZZZZZZIILjava/lang/String;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/PackageList;Lcom/android/server/am/PackageList;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/internal/app/ProcessMap;Lcom/android/server/am/ProcessList$MyProcessMap;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ProcessList;->killProcessGroup(II)V+]Landroid/os/Handler;Lcom/android/server/am/ProcessList$KillHandler;
 HSPLcom/android/server/am/ProcessList;->lambda$handleProcessStart$1(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;[IIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;J)V+]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ProcessList;->lambda$killAppIfBgRestrictedAndCachedIdleLocked$4(JLcom/android/server/am/ProcessRecord;)V
@@ -9631,7 +9973,7 @@
 HSPLcom/android/server/am/ProcessList;->noteProcessDiedLocked(Lcom/android/server/am/ProcessRecord;)V+]Lcom/android/server/Watchdog;Lcom/android/server/Watchdog;]Lcom/android/server/am/AppExitInfoTracker;Lcom/android/server/am/AppExitInfoTracker;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;
 HSPLcom/android/server/am/ProcessList;->onLmkdConnect(Ljava/io/OutputStream;)Z
 HSPLcom/android/server/am/ProcessList;->onSystemReady()V
-PLcom/android/server/am/ProcessList;->printOomLevel(Ljava/io/PrintWriter;Ljava/lang/String;I)V
+HSPLcom/android/server/am/ProcessList;->printOomLevel(Ljava/io/PrintWriter;Ljava/lang/String;I)V
 HPLcom/android/server/am/ProcessList;->procStateToImportance(IILandroid/app/ActivityManager$RunningAppProcessInfo;I)I
 HSPLcom/android/server/am/ProcessList;->procStatesDifferForMem(II)Z
 HSPLcom/android/server/am/ProcessList;->registerProcessObserver(Landroid/app/IProcessObserver;)V
@@ -9643,17 +9985,19 @@
 HSPLcom/android/server/am/ProcessList;->removeProcessNameLocked(Ljava/lang/String;I)Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ProcessList;->removeProcessNameLocked(Ljava/lang/String;ILcom/android/server/am/ProcessRecord;)Lcom/android/server/am/ProcessRecord;+]Lcom/android/server/am/ActiveUids;Lcom/android/server/am/ActiveUids;]Lcom/android/server/am/ProcessList$IsolatedUidRange;Lcom/android/server/am/ProcessList$IsolatedUidRange;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/internal/app/ProcessMap;Lcom/android/server/am/ProcessList$MyProcessMap;]Lcom/android/server/am/ProcessList$MyProcessMap;Lcom/android/server/am/ProcessList$MyProcessMap;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/FgsTempAllowList;Lcom/android/server/am/FgsTempAllowList;
 HSPLcom/android/server/am/ProcessList;->scheduleDispatchProcessDiedLocked(II)V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$UiHandler;]Landroid/os/Message;Landroid/os/Message;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/am/ProcessList;->searchEachLruProcessesLOSP(ZLjava/util/function/Function;)Ljava/lang/Object;+]Ljava/util/function/Function;Lcom/android/server/am/ActiveServices$$ExternalSyntheticLambda1;,Lcom/android/server/am/ActiveServices$$ExternalSyntheticLambda3;,Lcom/android/server/am/ActiveServices$$ExternalSyntheticLambda2;,Lcom/android/server/am/ActiveServices$$ExternalSyntheticLambda4;,Lcom/android/server/am/ActivityManagerService$LocalService$$ExternalSyntheticLambda2;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/am/ProcessList;->searchEachLruProcessesLOSP(ZLjava/util/function/Function;)Ljava/lang/Object;+]Ljava/util/function/Function;Lcom/android/server/am/ActiveServices$$ExternalSyntheticLambda4;,Lcom/android/server/am/ActiveServices$$ExternalSyntheticLambda3;,Lcom/android/server/am/ActiveServices$$ExternalSyntheticLambda2;,Lcom/android/server/am/ActiveServices$$ExternalSyntheticLambda1;,Lcom/android/server/am/ActivityManagerService$LocalService$$ExternalSyntheticLambda2;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/am/ProcessList;->sendPackageBroadcastLocked(I[Ljava/lang/String;I)V+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;,Landroid/app/ActivityThread$ApplicationThread;
-PLcom/android/server/am/ProcessList;->setAllHttpProxy()V
-HSPLcom/android/server/am/ProcessList;->setOomAdj(III)V+]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HPLcom/android/server/am/ProcessList;->sortProcessOomList(Ljava/util/List;Ljava/lang/String;)Ljava/util/ArrayList;
+HPLcom/android/server/am/ProcessList;->setAllHttpProxy()V
+HSPLcom/android/server/am/ProcessList;->setOomAdj(III)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;
+HSPLcom/android/server/am/ProcessList;->sortProcessOomList(Ljava/util/List;Ljava/lang/String;)Ljava/util/ArrayList;
 HSPLcom/android/server/am/ProcessList;->startProcess(Lcom/android/server/am/HostingRecord;Ljava/lang/String;Lcom/android/server/am/ProcessRecord;I[IIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;J)Landroid/os/Process$ProcessStartResult;+]Lcom/android/server/compat/PlatformCompat;Lcom/android/server/compat/PlatformCompat;]Lcom/android/server/am/HostingRecord;Lcom/android/server/am/HostingRecord;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/AppStateTracker;Lcom/android/server/AppStateTrackerImpl;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Landroid/os/ChildZygoteProcess;Landroid/os/ChildZygoteProcess;]Landroid/os/AppZygote;Landroid/os/AppZygote;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Ljava/util/Set;Landroid/util/ArraySet;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/am/ProcessList;->startProcessLocked(Lcom/android/server/am/HostingRecord;Ljava/lang/String;Lcom/android/server/am/ProcessRecord;I[IIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JJ)Z+]Lcom/android/server/compat/PlatformCompat;Lcom/android/server/compat/PlatformCompat;]Landroid/os/Handler;Lcom/android/server/am/ProcessList$ProcStartHandler;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
-PLcom/android/server/am/ProcessList;->startProcessLocked(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/HostingRecord;I)V
+HPLcom/android/server/am/ProcessList;->startProcessLocked(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/HostingRecord;I)V
 HSPLcom/android/server/am/ProcessList;->startProcessLocked(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/HostingRecord;ILjava/lang/String;)Z+]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;
-HSPLcom/android/server/am/ProcessList;->startProcessLocked(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/HostingRecord;IZZLjava/lang/String;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/os/storage/StorageManagerInternal;Lcom/android/server/StorageManagerService$StorageManagerInternalImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/HostingRecord;Lcom/android/server/am/HostingRecord;]Lcom/android/server/am/ActivityManagerService$HiddenApiSettings;Lcom/android/server/am/ActivityManagerService$HiddenApiSettings;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]Lcom/android/server/am/PackageList;Lcom/android/server/am/PackageList;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/am/ProcessList;->startProcessLocked(Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/HostingRecord;IZZLjava/lang/String;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/os/storage/StorageManagerInternal;Lcom/android/server/StorageManagerService$StorageManagerInternalImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/am/HostingRecord;Lcom/android/server/am/HostingRecord;]Lcom/android/server/am/ActivityManagerService$HiddenApiSettings;Lcom/android/server/am/ActivityManagerService$HiddenApiSettings;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]Lcom/android/server/am/PackageList;Lcom/android/server/am/PackageList;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/io/File;Ljava/io/File;
 HSPLcom/android/server/am/ProcessList;->startProcessLocked(Ljava/lang/String;Landroid/content/pm/ApplicationInfo;ZILcom/android/server/am/HostingRecord;IZZIZILjava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/Runnable;)Lcom/android/server/am/ProcessRecord;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/AppErrors;Lcom/android/server/am/AppErrors;]Lcom/android/server/am/ProcessErrorStateRecord;Lcom/android/server/am/ProcessErrorStateRecord;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
+PLcom/android/server/am/ProcessList;->unregisterProcessObserver(Landroid/app/IProcessObserver;)V
+PLcom/android/server/am/ProcessList;->updateAllTimePrefsLOSP(I)V
 HSPLcom/android/server/am/ProcessList;->updateApplicationInfoLOSP(Ljava/util/List;IZ)V
 PLcom/android/server/am/ProcessList;->updateBackgroundRestrictedForUidPackageLocked(ILjava/lang/String;Z)V
 HSPLcom/android/server/am/ProcessList;->updateClientActivitiesOrderingLSP(Lcom/android/server/am/ProcessRecord;III)V+]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -9665,7 +10009,7 @@
 HSPLcom/android/server/am/ProcessList;->writeLmkd(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)Z+]Lcom/android/server/am/LmkdConnection;Lcom/android/server/am/LmkdConnection;
 HPLcom/android/server/am/ProcessList;->writeProcessOomListToProto(Landroid/util/proto/ProtoOutputStream;JLcom/android/server/am/ActivityManagerService;Ljava/util/List;ZLjava/lang/String;)Z
 PLcom/android/server/am/ProcessList;->writeProcessesToProtoLSP(Landroid/util/proto/ProtoOutputStream;Ljava/lang/String;)V
-HPLcom/android/server/am/ProcessMemInfo;-><init>(Ljava/lang/String;IIILjava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/am/ProcessMemInfo;-><init>(Ljava/lang/String;IIILjava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/am/ProcessProfileRecord$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/am/ProcessProfileRecord;)V
 HSPLcom/android/server/am/ProcessProfileRecord$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/am/ProcessProfileRecord$$ExternalSyntheticLambda1;-><init>(Lcom/android/internal/app/procstats/ProcessState;)V
@@ -9680,7 +10024,7 @@
 HSPLcom/android/server/am/ProcessProfileRecord;->abortNextPssTime(Lcom/android/server/am/ProcessList$ProcStateMemTracker;)V
 HSPLcom/android/server/am/ProcessProfileRecord;->addHostingComponentType(I)V+]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
 HPLcom/android/server/am/ProcessProfileRecord;->addPss(JJJZIJ)V+]Lcom/android/internal/app/procstats/ProcessState;Lcom/android/internal/app/procstats/ProcessState;]Lcom/android/server/am/PackageList;Lcom/android/server/am/PackageList;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
-HPLcom/android/server/am/ProcessProfileRecord;->clearHostingComponentType(I)V+]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
+HSPLcom/android/server/am/ProcessProfileRecord;->clearHostingComponentType(I)V+]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
 HPLcom/android/server/am/ProcessProfileRecord;->commitNextPssTime()V
 HPLcom/android/server/am/ProcessProfileRecord;->commitNextPssTime(Lcom/android/server/am/ProcessList$ProcStateMemTracker;)V
 HSPLcom/android/server/am/ProcessProfileRecord;->computeNextPssTime(IZZJ)J
@@ -9689,35 +10033,35 @@
 HSPLcom/android/server/am/ProcessProfileRecord;->getBaseProcessTracker()Lcom/android/internal/app/procstats/ProcessState;
 HSPLcom/android/server/am/ProcessProfileRecord;->getCurProcBatteryStats()Lcom/android/internal/os/BatteryStatsImpl$Uid$Proc;
 PLcom/android/server/am/ProcessProfileRecord;->getCurRawAdj()I
-HPLcom/android/server/am/ProcessProfileRecord;->getCurrentHostingComponentTypes()I
-PLcom/android/server/am/ProcessProfileRecord;->getHistoricalHostingComponentTypes()I
+HPLcom/android/server/am/ProcessProfileRecord;->getCurrentHostingComponentTypes()I+]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
+HPLcom/android/server/am/ProcessProfileRecord;->getHistoricalHostingComponentTypes()I+]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
 HPLcom/android/server/am/ProcessProfileRecord;->getInitialIdlePss()J
-PLcom/android/server/am/ProcessProfileRecord;->getLastCachedPss()J
+HSPLcom/android/server/am/ProcessProfileRecord;->getLastCachedPss()J
 HSPLcom/android/server/am/ProcessProfileRecord;->getLastLowMemory()J
 HPLcom/android/server/am/ProcessProfileRecord;->getLastMemInfo()Landroid/os/Debug$MemoryInfo;
 HPLcom/android/server/am/ProcessProfileRecord;->getLastMemInfoTime()J
 HSPLcom/android/server/am/ProcessProfileRecord;->getLastPss()J
 HSPLcom/android/server/am/ProcessProfileRecord;->getLastPssTime()J
-HPLcom/android/server/am/ProcessProfileRecord;->getLastRequestedGc()J
+HSPLcom/android/server/am/ProcessProfileRecord;->getLastRequestedGc()J
 HSPLcom/android/server/am/ProcessProfileRecord;->getLastRss()J
 HSPLcom/android/server/am/ProcessProfileRecord;->getLastStateTime()J
-PLcom/android/server/am/ProcessProfileRecord;->getLastSwapPss()J
+HSPLcom/android/server/am/ProcessProfileRecord;->getLastSwapPss()J
 HSPLcom/android/server/am/ProcessProfileRecord;->getNextPssTime()J
 HPLcom/android/server/am/ProcessProfileRecord;->getPid()I
 HPLcom/android/server/am/ProcessProfileRecord;->getPssProcState()I
 HPLcom/android/server/am/ProcessProfileRecord;->getPssStatType()I
-PLcom/android/server/am/ProcessProfileRecord;->getReportLowMemory()Z
+HSPLcom/android/server/am/ProcessProfileRecord;->getReportLowMemory()Z
 HPLcom/android/server/am/ProcessProfileRecord;->getSetAdj()I
 HPLcom/android/server/am/ProcessProfileRecord;->getSetProcState()I
 HPLcom/android/server/am/ProcessProfileRecord;->getThread()Landroid/app/IApplicationThread;
-HPLcom/android/server/am/ProcessProfileRecord;->getTrimMemoryLevel()I
+HSPLcom/android/server/am/ProcessProfileRecord;->getTrimMemoryLevel()I
 HSPLcom/android/server/am/ProcessProfileRecord;->hasPendingUiClean()Z
 HSPLcom/android/server/am/ProcessProfileRecord;->init(J)V
 HSPLcom/android/server/am/ProcessProfileRecord;->lambda$onProcessActive$1(Lcom/android/internal/app/procstats/ProcessState;Lcom/android/server/am/ProcessStatsService;Lcom/android/internal/app/procstats/ProcessState;Ljava/lang/String;Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;)V+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Lcom/android/internal/app/procstats/ProcessState;Lcom/android/internal/app/procstats/ProcessState;
 HSPLcom/android/server/am/ProcessProfileRecord;->lambda$onProcessInactive$2(Ljava/lang/String;Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;)V
 HSPLcom/android/server/am/ProcessProfileRecord;->lambda$onProcessInactive$3(Lcom/android/internal/app/procstats/ProcessState;Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;)V+]Lcom/android/internal/app/procstats/ProcessState;Lcom/android/internal/app/procstats/ProcessState;
 HSPLcom/android/server/am/ProcessProfileRecord;->onProcessActive(Landroid/app/IApplicationThread;Lcom/android/server/am/ProcessStatsService;)V+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Lcom/android/internal/app/procstats/ProcessState;Lcom/android/internal/app/procstats/ProcessState;]Lcom/android/server/am/PackageList;Lcom/android/server/am/PackageList;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
-HSPLcom/android/server/am/ProcessProfileRecord;->onProcessInactive(Lcom/android/server/am/ProcessStatsService;)V+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Lcom/android/internal/app/procstats/ProcessState;Lcom/android/internal/app/procstats/ProcessState;]Lcom/android/server/am/PackageList;Lcom/android/server/am/PackageList;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
+HSPLcom/android/server/am/ProcessProfileRecord;->onProcessInactive(Lcom/android/server/am/ProcessStatsService;)V+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Lcom/android/internal/app/procstats/ProcessState;Lcom/android/internal/app/procstats/ProcessState;]Lcom/android/server/am/PackageList;Lcom/android/server/am/PackageList;]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
 PLcom/android/server/am/ProcessProfileRecord;->reportExcessiveCpu()V
 HSPLcom/android/server/am/ProcessProfileRecord;->setBaseProcessTracker(Lcom/android/internal/app/procstats/ProcessState;)V
 HSPLcom/android/server/am/ProcessProfileRecord;->setCurProcBatteryStats(Lcom/android/internal/os/BatteryStatsImpl$Uid$Proc;)V
@@ -9733,25 +10077,25 @@
 HPLcom/android/server/am/ProcessProfileRecord;->setLastRss(J)V
 HPLcom/android/server/am/ProcessProfileRecord;->setLastSwapPss(J)V
 HSPLcom/android/server/am/ProcessProfileRecord;->setNextPssTime(J)V
-HPLcom/android/server/am/ProcessProfileRecord;->setPendingUiClean(Z)V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
+HSPLcom/android/server/am/ProcessProfileRecord;->setPendingUiClean(Z)V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ProcessProfileRecord;->setPid(I)V
 HSPLcom/android/server/am/ProcessProfileRecord;->setProcessTrackerState(II)V+]Lcom/android/internal/app/procstats/ProcessState;Lcom/android/internal/app/procstats/ProcessState;]Lcom/android/server/am/PackageList;Lcom/android/server/am/PackageList;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HPLcom/android/server/am/ProcessProfileRecord;->setPssProcState(I)V
 HPLcom/android/server/am/ProcessProfileRecord;->setPssStatType(I)V
-PLcom/android/server/am/ProcessProfileRecord;->setReportLowMemory(Z)V
+HSPLcom/android/server/am/ProcessProfileRecord;->setReportLowMemory(Z)V
 HSPLcom/android/server/am/ProcessProfileRecord;->setTrimMemoryLevel(I)V
 HSPLcom/android/server/am/ProcessProfileRecord;->updateProcState(Lcom/android/server/am/ProcessStateRecord;)V+]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;
 HSPLcom/android/server/am/ProcessProviderRecord;-><init>(Lcom/android/server/am/ProcessRecord;)V
-HSPLcom/android/server/am/ProcessProviderRecord;->addProviderConnection(Lcom/android/server/am/ContentProviderConnection;)V
+HSPLcom/android/server/am/ProcessProviderRecord;->addProviderConnection(Lcom/android/server/am/ContentProviderConnection;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/am/ProcessProviderRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;J)V
 HSPLcom/android/server/am/ProcessProviderRecord;->ensureProviderCapacity(I)V
 HSPLcom/android/server/am/ProcessProviderRecord;->getLastProviderTime()J
 HSPLcom/android/server/am/ProcessProviderRecord;->getProvider(Ljava/lang/String;)Lcom/android/server/am/ContentProviderRecord;
-HPLcom/android/server/am/ProcessProviderRecord;->getProviderAt(I)Lcom/android/server/am/ContentProviderRecord;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HSPLcom/android/server/am/ProcessProviderRecord;->getProviderAt(I)Lcom/android/server/am/ContentProviderRecord;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/am/ProcessProviderRecord;->getProviderConnectionAt(I)Lcom/android/server/am/ContentProviderConnection;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 PLcom/android/server/am/ProcessProviderRecord;->hasProvider(Ljava/lang/String;)Z
 HSPLcom/android/server/am/ProcessProviderRecord;->installProvider(Ljava/lang/String;Lcom/android/server/am/ContentProviderRecord;)V
-HSPLcom/android/server/am/ProcessProviderRecord;->numberOfProviderConnections()I
+HSPLcom/android/server/am/ProcessProviderRecord;->numberOfProviderConnections()I+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/am/ProcessProviderRecord;->numberOfProviders()I+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/am/ProcessProviderRecord;->onCleanupApplicationRecordLocked(Z)Z+]Lcom/android/server/am/ContentProviderRecord;Lcom/android/server/am/ContentProviderRecord;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ContentProviderHelper;Lcom/android/server/am/ContentProviderHelper;]Lcom/android/server/am/ProcessErrorStateRecord;Lcom/android/server/am/ProcessErrorStateRecord;]Lcom/android/server/am/ProcessList;Lcom/android/server/am/ProcessList;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HPLcom/android/server/am/ProcessProviderRecord;->removeProviderConnection(Lcom/android/server/am/ContentProviderConnection;)Z
@@ -9766,14 +10110,14 @@
 HSPLcom/android/server/am/ProcessReceiverRecord;->numberOfReceivers()I+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/am/ProcessReceiverRecord;->onCleanupApplicationRecordLocked()V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/ProcessReceiverRecord;->removeCurReceiver(Lcom/android/server/am/BroadcastRecord;)V
-HPLcom/android/server/am/ProcessReceiverRecord;->removeReceiver(Lcom/android/server/am/ReceiverList;)V
+HSPLcom/android/server/am/ProcessReceiverRecord;->removeReceiver(Lcom/android/server/am/ReceiverList;)V
 HSPLcom/android/server/am/ProcessRecord$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ProcessRecord$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/am/ProcessRecord$$ExternalSyntheticLambda1;-><init>(Lcom/android/internal/app/procstats/ProcessState;)V
 HPLcom/android/server/am/ProcessRecord$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/am/ProcessRecord;->$r8$lambda$Kcg4f0baD8658a29tuG29Pg05l0(Lcom/android/server/am/ProcessRecord;Ljava/lang/String;Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;)V
 PLcom/android/server/am/ProcessRecord;->$r8$lambda$gOjZktupKcGseVKoseUJD543GZQ(Lcom/android/internal/app/procstats/ProcessState;Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;)V
-HSPLcom/android/server/am/ProcessRecord;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/content/pm/ApplicationInfo;Ljava/lang/String;ILjava/lang/String;ILjava/lang/String;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/PackageList;Lcom/android/server/am/PackageList;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
+HSPLcom/android/server/am/ProcessRecord;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/content/pm/ApplicationInfo;Ljava/lang/String;ILjava/lang/String;ILjava/lang/String;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ProcessCachedOptimizerRecord;Lcom/android/server/am/ProcessCachedOptimizerRecord;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/PackageList;Lcom/android/server/am/PackageList;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HPLcom/android/server/am/ProcessRecord;->addOrUpdateAllowBackgroundActivityStartsToken(Landroid/os/Binder;Landroid/os/IBinder;)V
 HSPLcom/android/server/am/ProcessRecord;->addPackage(Ljava/lang/String;JLcom/android/server/am/ProcessStatsService;)Z+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Lcom/android/internal/app/procstats/ProcessState;Lcom/android/internal/app/procstats/ProcessState;]Lcom/android/server/am/PackageList;Lcom/android/server/am/PackageList;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
 HPLcom/android/server/am/ProcessRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
@@ -9781,7 +10125,7 @@
 HPLcom/android/server/am/ProcessRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
 HSPLcom/android/server/am/ProcessRecord;->getActiveInstrumentation()Lcom/android/server/am/ActiveInstrumentation;
 HSPLcom/android/server/am/ProcessRecord;->getCompat()Landroid/content/res/CompatibilityInfo;
-HPLcom/android/server/am/ProcessRecord;->getCpuTime()J
+HSPLcom/android/server/am/ProcessRecord;->getCpuTime()J
 HSPLcom/android/server/am/ProcessRecord;->getDeathRecipient()Landroid/os/IBinder$DeathRecipient;
 HSPLcom/android/server/am/ProcessRecord;->getDisabledCompatChanges()[J
 PLcom/android/server/am/ProcessRecord;->getDyingPid()I
@@ -9791,9 +10135,9 @@
 HSPLcom/android/server/am/ProcessRecord;->getIsolatedEntryPointArgs()[Ljava/lang/String;
 PLcom/android/server/am/ProcessRecord;->getKillTime()J
 HPLcom/android/server/am/ProcessRecord;->getLastActivityTime()J
-HPLcom/android/server/am/ProcessRecord;->getLruSeq()I
+HSPLcom/android/server/am/ProcessRecord;->getLruSeq()I
 HSPLcom/android/server/am/ProcessRecord;->getMountMode()I
-HSPLcom/android/server/am/ProcessRecord;->getPackageList()[Ljava/lang/String;
+HSPLcom/android/server/am/ProcessRecord;->getPackageList()[Ljava/lang/String;+]Lcom/android/server/am/PackageList;Lcom/android/server/am/PackageList;
 HPLcom/android/server/am/ProcessRecord;->getPackageListWithVersionCode()Ljava/util/List;
 HSPLcom/android/server/am/ProcessRecord;->getPid()I
 HSPLcom/android/server/am/ProcessRecord;->getPkgDeps()Landroid/util/ArraySet;
@@ -9813,11 +10157,12 @@
 HSPLcom/android/server/am/ProcessRecord;->hasActivities()Z+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
 HSPLcom/android/server/am/ProcessRecord;->hasActivitiesOrRecentTasks()Z+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
 PLcom/android/server/am/ProcessRecord;->hasRecentTasks()Z
+PLcom/android/server/am/ProcessRecord;->hasWaitedForDebugger()Z
 HSPLcom/android/server/am/ProcessRecord;->isCached()Z
 HSPLcom/android/server/am/ProcessRecord;->isDebuggable()Z
-PLcom/android/server/am/ProcessRecord;->isDebugging()Z
+HPLcom/android/server/am/ProcessRecord;->isDebugging()Z
 HSPLcom/android/server/am/ProcessRecord;->isInFullBackup()Z
-HPLcom/android/server/am/ProcessRecord;->isInterestingToUserLocked()Z
+HPLcom/android/server/am/ProcessRecord;->isInterestingToUserLocked()Z+]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
 HSPLcom/android/server/am/ProcessRecord;->isKilled()Z
 HSPLcom/android/server/am/ProcessRecord;->isKilledByAm()Z
 HSPLcom/android/server/am/ProcessRecord;->isPendingStart()Z
@@ -9833,12 +10178,12 @@
 HSPLcom/android/server/am/ProcessRecord;->makeActive(Landroid/app/IApplicationThread;Lcom/android/server/am/ProcessStatsService;)V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
 HSPLcom/android/server/am/ProcessRecord;->makeInactive(Lcom/android/server/am/ProcessStatsService;)V
 HSPLcom/android/server/am/ProcessRecord;->onCleanupApplicationRecordLSP(Lcom/android/server/am/ProcessStatsService;ZZ)Z+]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ProcessErrorStateRecord;Lcom/android/server/am/ProcessErrorStateRecord;]Lcom/android/server/am/ProcessReceiverRecord;Lcom/android/server/am/ProcessReceiverRecord;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessProviderRecord;Lcom/android/server/am/ProcessProviderRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
-HPLcom/android/server/am/ProcessRecord;->onStartActivity(IZLjava/lang/String;J)V
-HSPLcom/android/server/am/ProcessRecord;->removeAllowBackgroundActivityStartsToken(Landroid/os/Binder;)V
+HSPLcom/android/server/am/ProcessRecord;->onStartActivity(IZLjava/lang/String;J)V
+HSPLcom/android/server/am/ProcessRecord;->removeAllowBackgroundActivityStartsToken(Landroid/os/Binder;)V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
 HSPLcom/android/server/am/ProcessRecord;->resetPackageList(Lcom/android/server/am/ProcessStatsService;)V+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Lcom/android/internal/app/procstats/ProcessState;Lcom/android/internal/app/procstats/ProcessState;]Lcom/android/server/am/PackageList;Lcom/android/server/am/PackageList;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
 PLcom/android/server/am/ProcessRecord;->scheduleCrashLocked(Ljava/lang/String;ILandroid/os/Bundle;)V
 PLcom/android/server/am/ProcessRecord;->setActiveInstrumentation(Lcom/android/server/am/ActiveInstrumentation;)V
-PLcom/android/server/am/ProcessRecord;->setBindMountPending(Z)V
+HPLcom/android/server/am/ProcessRecord;->setBindMountPending(Z)V
 HSPLcom/android/server/am/ProcessRecord;->setCompat(Landroid/content/res/CompatibilityInfo;)V
 HSPLcom/android/server/am/ProcessRecord;->setDeathRecipient(Landroid/os/IBinder$DeathRecipient;)V
 HSPLcom/android/server/am/ProcessRecord;->setDebugging(Z)V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
@@ -9855,7 +10200,7 @@
 HSPLcom/android/server/am/ProcessRecord;->setLruSeq(I)V
 HSPLcom/android/server/am/ProcessRecord;->setMountMode(I)V
 HSPLcom/android/server/am/ProcessRecord;->setPendingStart(Z)V
-HPLcom/android/server/am/ProcessRecord;->setPendingUiClean(Z)V+]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
+HSPLcom/android/server/am/ProcessRecord;->setPendingUiClean(Z)V+]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
 HPLcom/android/server/am/ProcessRecord;->setPendingUiCleanAndForceProcessStateUpTo(I)V
 HSPLcom/android/server/am/ProcessRecord;->setPersistent(Z)V
 HSPLcom/android/server/am/ProcessRecord;->setPid(I)V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
@@ -9869,13 +10214,14 @@
 HSPLcom/android/server/am/ProcessRecord;->setUidRecord(Lcom/android/server/am/UidRecord;)V
 HSPLcom/android/server/am/ProcessRecord;->setUnlocked(Z)V
 HSPLcom/android/server/am/ProcessRecord;->setUsingWrapper(Z)V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
+PLcom/android/server/am/ProcessRecord;->setWaitedForDebugger(Z)V
 HSPLcom/android/server/am/ProcessRecord;->setWaitingToKill(Ljava/lang/String;)V
-HPLcom/android/server/am/ProcessRecord;->toShortString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
+HSPLcom/android/server/am/ProcessRecord;->toShortString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ProcessRecord;->toShortString(Ljava/lang/StringBuilder;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/am/ProcessRecord;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ProcessRecord;->unlinkDeathRecipient()V+]Landroid/os/IBinder;Landroid/os/BinderProxy;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;
-HPLcom/android/server/am/ProcessRecord;->updateProcessInfo(ZZZ)V
-HPLcom/android/server/am/ProcessRecord;->updateServiceConnectionActivities()V
+HSPLcom/android/server/am/ProcessRecord;->updateProcessInfo(ZZZ)V
+HSPLcom/android/server/am/ProcessRecord;->updateServiceConnectionActivities()V
 HSPLcom/android/server/am/ProcessServiceRecord;-><init>(Lcom/android/server/am/ProcessRecord;)V
 HSPLcom/android/server/am/ProcessServiceRecord;->addBoundClientUid(I)V
 HSPLcom/android/server/am/ProcessServiceRecord;->addBoundClientUidsOfNewService(Lcom/android/server/am/ServiceRecord;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -9885,14 +10231,15 @@
 HSPLcom/android/server/am/ProcessServiceRecord;->getConnectionAt(I)Lcom/android/server/am/ConnectionRecord;+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/am/ProcessServiceRecord;->getConnectionGroup()I
 HPLcom/android/server/am/ProcessServiceRecord;->getConnectionImportance()I
-HPLcom/android/server/am/ProcessServiceRecord;->getExecutingServiceAt(I)Lcom/android/server/am/ServiceRecord;+]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLcom/android/server/am/ProcessServiceRecord;->getExecutingServiceAt(I)Lcom/android/server/am/ServiceRecord;+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/am/ProcessServiceRecord;->getForegroundServiceTypes()I
 HSPLcom/android/server/am/ProcessServiceRecord;->getRunningServiceAt(I)Lcom/android/server/am/ServiceRecord;+]Landroid/util/ArraySet;Landroid/util/ArraySet;
-PLcom/android/server/am/ProcessServiceRecord;->hasAboveClient()Z
+HSPLcom/android/server/am/ProcessServiceRecord;->hasAboveClient()Z
 HSPLcom/android/server/am/ProcessServiceRecord;->hasClientActivities()Z
 HSPLcom/android/server/am/ProcessServiceRecord;->hasForegroundServices()Z
+HSPLcom/android/server/am/ProcessServiceRecord;->hasReportedForegroundServices()Z
 HSPLcom/android/server/am/ProcessServiceRecord;->hasTopStartedAlmostPerceptibleServices()Z
-HPLcom/android/server/am/ProcessServiceRecord;->incServiceCrashCountLocked(J)Z
+HPLcom/android/server/am/ProcessServiceRecord;->incServiceCrashCountLocked(J)Z+]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;
 HPLcom/android/server/am/ProcessServiceRecord;->isAlmostPerceptible(Lcom/android/server/am/ServiceRecord;)Z
 HSPLcom/android/server/am/ProcessServiceRecord;->isTreatedLikeActivity()Z
 HSPLcom/android/server/am/ProcessServiceRecord;->modifyRawOomAdj(I)I
@@ -9901,7 +10248,7 @@
 HSPLcom/android/server/am/ProcessServiceRecord;->numberOfRunningServices()I+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/am/ProcessServiceRecord;->onCleanupApplicationRecordLocked()V
 HSPLcom/android/server/am/ProcessServiceRecord;->removeAllConnections()V
-HPLcom/android/server/am/ProcessServiceRecord;->removeConnection(Lcom/android/server/am/ConnectionRecord;)V
+HSPLcom/android/server/am/ProcessServiceRecord;->removeConnection(Lcom/android/server/am/ConnectionRecord;)V
 HPLcom/android/server/am/ProcessServiceRecord;->setConnectionGroup(I)V
 HPLcom/android/server/am/ProcessServiceRecord;->setConnectionImportance(I)V
 HPLcom/android/server/am/ProcessServiceRecord;->setConnectionService(Lcom/android/server/am/ServiceRecord;)V
@@ -9909,19 +10256,20 @@
 PLcom/android/server/am/ProcessServiceRecord;->setHasAboveClient(Z)V
 HSPLcom/android/server/am/ProcessServiceRecord;->setHasClientActivities(Z)V
 HPLcom/android/server/am/ProcessServiceRecord;->setHasForegroundServices(ZI)V
+HSPLcom/android/server/am/ProcessServiceRecord;->setHasReportedForegroundServices(Z)V
 PLcom/android/server/am/ProcessServiceRecord;->setReportedForegroundServiceTypes(I)V
 PLcom/android/server/am/ProcessServiceRecord;->setTreatLikeActivity(Z)V
 HSPLcom/android/server/am/ProcessServiceRecord;->shouldExecServicesFg()Z
 HSPLcom/android/server/am/ProcessServiceRecord;->startExecutingService(Lcom/android/server/am/ServiceRecord;)V
-HSPLcom/android/server/am/ProcessServiceRecord;->startService(Lcom/android/server/am/ServiceRecord;)Z+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
+HSPLcom/android/server/am/ProcessServiceRecord;->startService(Lcom/android/server/am/ServiceRecord;)Z+]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ProcessServiceRecord;->stopAllExecutingServices()V
 PLcom/android/server/am/ProcessServiceRecord;->stopAllServices()V
 HSPLcom/android/server/am/ProcessServiceRecord;->stopExecutingService(Lcom/android/server/am/ServiceRecord;)V
-HPLcom/android/server/am/ProcessServiceRecord;->stopService(Lcom/android/server/am/ServiceRecord;)Z+]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLcom/android/server/am/ProcessServiceRecord;->stopService(Lcom/android/server/am/ServiceRecord;)Z+]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/am/ProcessServiceRecord;->updateBoundClientUids()V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-PLcom/android/server/am/ProcessServiceRecord;->updateHasAboveClientLocked()V
+HPLcom/android/server/am/ProcessServiceRecord;->updateHasAboveClientLocked()V
 HPLcom/android/server/am/ProcessServiceRecord;->updateHasTopStartedAlmostPerceptibleServices()V
-HPLcom/android/server/am/ProcessServiceRecord;->updateHostingComonentTypeForBindingsLocked()V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
+HSPLcom/android/server/am/ProcessServiceRecord;->updateHostingComonentTypeForBindingsLocked()V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
 HSPLcom/android/server/am/ProcessStateRecord$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/am/ProcessStateRecord;)V
 HSPLcom/android/server/am/ProcessStateRecord$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/am/ProcessStateRecord$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/am/ProcessStateRecord;)V
@@ -9932,14 +10280,14 @@
 HPLcom/android/server/am/ProcessStateRecord;->computeOomAdjFromActivitiesIfNecessary(Lcom/android/server/am/OomAdjuster$ComputeOomAdjWindowCallback;IZZIIIII)V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Lcom/android/server/am/OomAdjuster$ComputeOomAdjWindowCallback;Lcom/android/server/am/OomAdjuster$ComputeOomAdjWindowCallback;
 HSPLcom/android/server/am/ProcessStateRecord;->containsCycle()Z
 PLcom/android/server/am/ProcessStateRecord;->decAdjSeq()V
-PLcom/android/server/am/ProcessStateRecord;->decCompletedAdjSeq()V
+HPLcom/android/server/am/ProcessStateRecord;->decCompletedAdjSeq()V
 HPLcom/android/server/am/ProcessStateRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;J)V
 HSPLcom/android/server/am/ProcessStateRecord;->forceProcessStateUpTo(I)V+]Lcom/android/server/am/PackageList;Lcom/android/server/am/PackageList;]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/ProcessStateRecord;->getAdjSeq()I
-HPLcom/android/server/am/ProcessStateRecord;->getAdjSource()Ljava/lang/Object;
+HSPLcom/android/server/am/ProcessStateRecord;->getAdjSource()Ljava/lang/Object;
 PLcom/android/server/am/ProcessStateRecord;->getAdjSourceProcState()I
-HPLcom/android/server/am/ProcessStateRecord;->getAdjTarget()Ljava/lang/Object;
-PLcom/android/server/am/ProcessStateRecord;->getAdjType()Ljava/lang/String;
+HSPLcom/android/server/am/ProcessStateRecord;->getAdjTarget()Ljava/lang/Object;
+HSPLcom/android/server/am/ProcessStateRecord;->getAdjType()Ljava/lang/String;
 HPLcom/android/server/am/ProcessStateRecord;->getAdjTypeCode()I
 PLcom/android/server/am/ProcessStateRecord;->getCachedAdj()I
 HSPLcom/android/server/am/ProcessStateRecord;->getCachedCompatChange(I)Z+]Lcom/android/server/am/OomAdjuster;Lcom/android/server/am/OomAdjuster;
@@ -9964,19 +10312,19 @@
 HSPLcom/android/server/am/ProcessStateRecord;->getForcingToImportant()Ljava/lang/Object;
 HSPLcom/android/server/am/ProcessStateRecord;->getInteractionEventTime()J
 HSPLcom/android/server/am/ProcessStateRecord;->getLastCanKillOnBgRestrictedAndIdleTime()J
-PLcom/android/server/am/ProcessStateRecord;->getLastInvisibleTime()J
+HSPLcom/android/server/am/ProcessStateRecord;->getLastInvisibleTime()J
 HSPLcom/android/server/am/ProcessStateRecord;->getLastStateTime()J
 PLcom/android/server/am/ProcessStateRecord;->getLastTopTime()J
 HSPLcom/android/server/am/ProcessStateRecord;->getMaxAdj()I
 HSPLcom/android/server/am/ProcessStateRecord;->getReportedProcState()I
 HSPLcom/android/server/am/ProcessStateRecord;->getSetAdj()I
-PLcom/android/server/am/ProcessStateRecord;->getSetAdjWithServices()I
+HPLcom/android/server/am/ProcessStateRecord;->getSetAdjWithServices()I
 HSPLcom/android/server/am/ProcessStateRecord;->getSetCapability()I
 HSPLcom/android/server/am/ProcessStateRecord;->getSetProcState()I
 HSPLcom/android/server/am/ProcessStateRecord;->getSetRawAdj()I
 HSPLcom/android/server/am/ProcessStateRecord;->getSetSchedGroup()I
 HSPLcom/android/server/am/ProcessStateRecord;->getVerifiedAdj()I
-PLcom/android/server/am/ProcessStateRecord;->getWhenUnimportant()J
+HPLcom/android/server/am/ProcessStateRecord;->getWhenUnimportant()J
 HSPLcom/android/server/am/ProcessStateRecord;->hasForegroundActivities()Z
 HSPLcom/android/server/am/ProcessStateRecord;->hasOverlayUi()Z
 HSPLcom/android/server/am/ProcessStateRecord;->hasProcStateChanged()Z
@@ -9985,22 +10333,22 @@
 HSPLcom/android/server/am/ProcessStateRecord;->hasShownUi()Z
 HSPLcom/android/server/am/ProcessStateRecord;->hasTopUi()Z
 HSPLcom/android/server/am/ProcessStateRecord;->init(J)V
-PLcom/android/server/am/ProcessStateRecord;->isAllowedStartFgs()Z
+HSPLcom/android/server/am/ProcessStateRecord;->isAllowedStartFgs()Z
 HPLcom/android/server/am/ProcessStateRecord;->isBackgroundRestricted()Z
 HSPLcom/android/server/am/ProcessStateRecord;->isCached()Z
 HSPLcom/android/server/am/ProcessStateRecord;->isCurBoundByNonBgRestrictedApp()Z
-PLcom/android/server/am/ProcessStateRecord;->isEmpty()Z
+HSPLcom/android/server/am/ProcessStateRecord;->isEmpty()Z
 HPLcom/android/server/am/ProcessStateRecord;->isNotCachedSinceIdle()Z
 HSPLcom/android/server/am/ProcessStateRecord;->isReachable()Z
 HSPLcom/android/server/am/ProcessStateRecord;->isRunningRemoteAnimation()Z
-PLcom/android/server/am/ProcessStateRecord;->isServiceB()Z
+HSPLcom/android/server/am/ProcessStateRecord;->isServiceB()Z
 HSPLcom/android/server/am/ProcessStateRecord;->isSetBoundByNonBgRestrictedApp()Z
 HSPLcom/android/server/am/ProcessStateRecord;->isSetCached()Z
-HPLcom/android/server/am/ProcessStateRecord;->isSetNoKillOnBgRestrictedAndIdle()Z
+HSPLcom/android/server/am/ProcessStateRecord;->isSetNoKillOnBgRestrictedAndIdle()Z
 HSPLcom/android/server/am/ProcessStateRecord;->isSystemNoUi()Z
 HSPLcom/android/server/am/ProcessStateRecord;->lambda$forceProcessStateUpTo$1(Ljava/lang/String;Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;)V
 HSPLcom/android/server/am/ProcessStateRecord;->lambda$setReportedProcState$0(Ljava/lang/String;Lcom/android/internal/app/procstats/ProcessStats$ProcessStateHolder;)V
-HPLcom/android/server/am/ProcessStateRecord;->makeAdjReason()Ljava/lang/String;
+HSPLcom/android/server/am/ProcessStateRecord;->makeAdjReason()Ljava/lang/String;
 HSPLcom/android/server/am/ProcessStateRecord;->onCleanupApplicationRecordLSP()V+]Lcom/android/server/am/ProcessStateRecord;Lcom/android/server/am/ProcessStateRecord;
 HSPLcom/android/server/am/ProcessStateRecord;->resetCachedInfo()V
 HSPLcom/android/server/am/ProcessStateRecord;->setAdjSeq(I)V
@@ -10037,11 +10385,11 @@
 HSPLcom/android/server/am/ProcessStateRecord;->setNotCachedSinceIdle(Z)V
 HSPLcom/android/server/am/ProcessStateRecord;->setProcStateChanged(Z)V
 HSPLcom/android/server/am/ProcessStateRecord;->setReachable(Z)V
-PLcom/android/server/am/ProcessStateRecord;->setRepForegroundActivities(Z)V
+HSPLcom/android/server/am/ProcessStateRecord;->setRepForegroundActivities(Z)V
 HSPLcom/android/server/am/ProcessStateRecord;->setReportedInteraction(Z)V
 HSPLcom/android/server/am/ProcessStateRecord;->setReportedProcState(I)V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/am/PackageList;Lcom/android/server/am/PackageList;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HPLcom/android/server/am/ProcessStateRecord;->setRunningRemoteAnimation(Z)V
-PLcom/android/server/am/ProcessStateRecord;->setServiceB(Z)V
+HSPLcom/android/server/am/ProcessStateRecord;->setServiceB(Z)V
 PLcom/android/server/am/ProcessStateRecord;->setServiceHighRam(Z)V
 HSPLcom/android/server/am/ProcessStateRecord;->setSetAdj(I)V
 HSPLcom/android/server/am/ProcessStateRecord;->setSetBoundByNonBgRestrictedApp(Z)V
@@ -10080,7 +10428,7 @@
 PLcom/android/server/am/ProcessStatsService;->getCommittedStatsMerged(JIZLjava/util/List;Lcom/android/internal/app/procstats/ProcessStats;)J
 PLcom/android/server/am/ProcessStatsService;->getCurrentFile()Ljava/io/File;
 HSPLcom/android/server/am/ProcessStatsService;->getMemFactorLocked()I
-PLcom/android/server/am/ProcessStatsService;->getMinAssociationDumpDuration()J
+HPLcom/android/server/am/ProcessStatsService;->getMinAssociationDumpDuration()J
 HSPLcom/android/server/am/ProcessStatsService;->getProcessStateLocked(Ljava/lang/String;IJLjava/lang/String;)Lcom/android/internal/app/procstats/ProcessState;
 HSPLcom/android/server/am/ProcessStatsService;->getServiceState(Ljava/lang/String;IJLjava/lang/String;Ljava/lang/String;)Lcom/android/internal/app/procstats/ServiceState;+]Lcom/android/internal/app/procstats/ProcessStats;Lcom/android/internal/app/procstats/ProcessStats;
 HPLcom/android/server/am/ProcessStatsService;->getStatsOverTime(J)Landroid/os/ParcelFileDescriptor;
@@ -10103,10 +10451,10 @@
 HPLcom/android/server/am/ProcessStatsService;->writeStateLocked(ZZ)V
 PLcom/android/server/am/ProcessStatsService;->writeStateSyncLocked()V
 PLcom/android/server/am/ProviderMap$$ExternalSyntheticLambda0;-><init>()V
-PLcom/android/server/am/ProviderMap$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/am/ProviderMap$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/am/ProviderMap;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 HSPLcom/android/server/am/ProviderMap;->collectPackageProvidersLocked(Ljava/lang/String;Ljava/util/Set;ZZILjava/util/ArrayList;)Z+]Lcom/android/server/am/ProviderMap;Lcom/android/server/am/ProviderMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/am/ProviderMap;->collectPackageProvidersLocked(Ljava/lang/String;Ljava/util/Set;ZZLjava/util/HashMap;Ljava/util/ArrayList;)Z+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/Collection;Ljava/util/HashMap$Values;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/util/Iterator;Ljava/util/HashMap$ValueIterator;]Ljava/util/Set;Landroid/util/ArraySet;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/am/ProviderMap;->collectPackageProvidersLocked(Ljava/lang/String;Ljava/util/Set;ZZLjava/util/HashMap;Ljava/util/ArrayList;)Z+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/Collection;Ljava/util/HashMap$Values;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/HashMap$ValueIterator;]Ljava/util/Set;Landroid/util/ArraySet;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 PLcom/android/server/am/ProviderMap;->dumpProvider(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Ljava/lang/String;[Ljava/lang/String;IZ)Z
 HPLcom/android/server/am/ProviderMap;->dumpProvider(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Lcom/android/server/am/ContentProviderRecord;[Ljava/lang/String;Z)V
 HPLcom/android/server/am/ProviderMap;->dumpProvidersByClassLocked(Ljava/io/PrintWriter;ZLjava/lang/String;Ljava/lang/String;ZLjava/util/HashMap;)Z
@@ -10120,16 +10468,17 @@
 PLcom/android/server/am/ProviderMap;->getProvidersForName(Ljava/lang/String;)Ljava/util/ArrayList;
 HSPLcom/android/server/am/ProviderMap;->putProviderByClass(Landroid/content/ComponentName;Lcom/android/server/am/ContentProviderRecord;)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/server/am/ProviderMap;Lcom/android/server/am/ProviderMap;
 HSPLcom/android/server/am/ProviderMap;->putProviderByName(Ljava/lang/String;Lcom/android/server/am/ContentProviderRecord;)V
-HPLcom/android/server/am/ProviderMap;->removeProviderByClass(Landroid/content/ComponentName;I)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/server/am/ProviderMap;Lcom/android/server/am/ProviderMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HPLcom/android/server/am/ProviderMap;->removeProviderByName(Ljava/lang/String;I)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/server/am/ProviderMap;Lcom/android/server/am/ProviderMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HPLcom/android/server/am/ProviderMap;->removeProviderByClass(Landroid/content/ComponentName;I)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ProviderMap;Lcom/android/server/am/ProviderMap;
+HPLcom/android/server/am/ProviderMap;->removeProviderByName(Ljava/lang/String;I)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/am/ProviderMap;Lcom/android/server/am/ProviderMap;
 HSPLcom/android/server/am/ReceiverList;-><init>(Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ProcessRecord;IIILandroid/content/IIntentReceiver;)V
+PLcom/android/server/am/ReceiverList;->binderDied()V
 HSPLcom/android/server/am/ReceiverList;->containsFilter(Landroid/content/IntentFilter;)Z+]Ljava/util/ArrayList;Lcom/android/server/am/ReceiverList;
 HPLcom/android/server/am/ReceiverList;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HPLcom/android/server/am/ReceiverList;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HPLcom/android/server/am/ReceiverList;->dumpLocal(Ljava/io/PrintWriter;Ljava/lang/String;)V
-HPLcom/android/server/am/ReceiverList;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/server/am/ReceiverList;->equals(Ljava/lang/Object;)Z
 HSPLcom/android/server/am/ReceiverList;->hashCode()I
-HPLcom/android/server/am/ReceiverList;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/IIntentReceiver;Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;,Landroid/content/IIntentReceiver$Stub$Proxy;
+HSPLcom/android/server/am/ReceiverList;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/IIntentReceiver;Landroid/app/LoadedApk$ReceiverDispatcher$InnerReceiver;,Landroid/content/IIntentReceiver$Stub$Proxy;
 PLcom/android/server/am/ServiceRecord$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/am/ServiceRecord;)V
 PLcom/android/server/am/ServiceRecord$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/am/ServiceRecord$1;-><init>(Lcom/android/server/am/ServiceRecord;Ljava/lang/String;I)V
@@ -10140,48 +10489,48 @@
 HPLcom/android/server/am/ServiceRecord$3;->run()V
 PLcom/android/server/am/ServiceRecord$4;-><init>(Lcom/android/server/am/ServiceRecord;Ljava/lang/String;II)V
 HPLcom/android/server/am/ServiceRecord$4;->run()V
-HPLcom/android/server/am/ServiceRecord$StartItem;-><init>(Lcom/android/server/am/ServiceRecord;ZILandroid/content/Intent;Lcom/android/server/uri/NeededUriGrants;I)V
-PLcom/android/server/am/ServiceRecord$StartItem;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JJ)V
-PLcom/android/server/am/ServiceRecord$StartItem;->getUriPermissionsLocked()Lcom/android/server/uri/UriPermissionOwner;
+HSPLcom/android/server/am/ServiceRecord$StartItem;-><init>(Lcom/android/server/am/ServiceRecord;ZILandroid/content/Intent;Lcom/android/server/uri/NeededUriGrants;I)V
+HPLcom/android/server/am/ServiceRecord$StartItem;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JJ)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Landroid/content/Intent;Landroid/content/Intent;
+HPLcom/android/server/am/ServiceRecord$StartItem;->getUriPermissionsLocked()Lcom/android/server/uri/UriPermissionOwner;
 HPLcom/android/server/am/ServiceRecord$StartItem;->removeUriPermissionsLocked()V
 PLcom/android/server/am/ServiceRecord$StartItem;->toString()Ljava/lang/String;
 PLcom/android/server/am/ServiceRecord;->$r8$lambda$nAQIb51kQiu1uSwcVuTz7LaRGa8(Lcom/android/server/am/ServiceRecord;)V
 HPLcom/android/server/am/ServiceRecord;->-$$Nest$msignalForegroundServiceNotification(Lcom/android/server/am/ServiceRecord;Ljava/lang/String;IIZ)V
 HSPLcom/android/server/am/ServiceRecord;-><init>(Lcom/android/server/am/ActivityManagerService;Landroid/content/ComponentName;Landroid/content/ComponentName;Ljava/lang/String;ILandroid/content/Intent$FilterComparison;Landroid/content/pm/ServiceInfo;ZLjava/lang/Runnable;Ljava/lang/String;ILjava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Landroid/content/ComponentName;Landroid/content/ComponentName;
-HSPLcom/android/server/am/ServiceRecord;->addConnection(Landroid/os/IBinder;Lcom/android/server/am/ConnectionRecord;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-PLcom/android/server/am/ServiceRecord;->allowBgActivityStartsOnServiceStart(Landroid/os/IBinder;)V
+HSPLcom/android/server/am/ServiceRecord;->addConnection(Landroid/os/IBinder;Lcom/android/server/am/ConnectionRecord;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/am/ProcessProfileRecord;Lcom/android/server/am/ProcessProfileRecord;
+HPLcom/android/server/am/ServiceRecord;->allowBgActivityStartsOnServiceStart(Landroid/os/IBinder;)V
 HPLcom/android/server/am/ServiceRecord;->canStopIfKilled(Z)Z
 HPLcom/android/server/am/ServiceRecord;->cancelNotification()V
 HSPLcom/android/server/am/ServiceRecord;->clearDeliveredStartsLocked()V+]Lcom/android/server/am/ServiceRecord$StartItem;Lcom/android/server/am/ServiceRecord$StartItem;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/am/ServiceRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-HPLcom/android/server/am/ServiceRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-PLcom/android/server/am/ServiceRecord;->dumpStartList(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/util/List;J)V
-HPLcom/android/server/am/ServiceRecord;->findDeliveredStart(IZZ)Lcom/android/server/am/ServiceRecord$StartItem;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/am/ServiceRecord;->forceClearTracker()V
+HSPLcom/android/server/am/ServiceRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/io/PrintWriter;Lcom/android/internal/util/FastPrintWriter;]Landroid/content/Intent$FilterComparison;Landroid/content/Intent$FilterComparison;]Lcom/android/server/am/IntentBindRecord;Lcom/android/server/am/IntentBindRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/content/Intent;Landroid/content/Intent;
+HPLcom/android/server/am/ServiceRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Lcom/android/server/am/ConnectionRecord;Lcom/android/server/am/ConnectionRecord;]Landroid/app/Notification;Landroid/app/Notification;]Landroid/content/Intent$FilterComparison;Landroid/content/Intent$FilterComparison;]Lcom/android/server/am/IntentBindRecord;Lcom/android/server/am/IntentBindRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/am/ServiceRecord$StartItem;Lcom/android/server/am/ServiceRecord$StartItem;
+HPLcom/android/server/am/ServiceRecord;->dumpStartList(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/util/List;J)V+]Lcom/android/server/uri/UriPermissionOwner;Lcom/android/server/uri/UriPermissionOwner;]Ljava/io/PrintWriter;Lcom/android/internal/util/FastPrintWriter;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/am/ServiceRecord;->findDeliveredStart(IZZ)Lcom/android/server/am/ServiceRecord$StartItem;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/am/ServiceRecord;->forceClearTracker()V+]Lcom/android/internal/app/procstats/ServiceState;Lcom/android/internal/app/procstats/ServiceState;
 HSPLcom/android/server/am/ServiceRecord;->getComponentName()Landroid/content/ComponentName;
 HSPLcom/android/server/am/ServiceRecord;->getConnections()Landroid/util/ArrayMap;
 HPLcom/android/server/am/ServiceRecord;->getExclusiveOriginatingToken()Landroid/os/IBinder;
-HPLcom/android/server/am/ServiceRecord;->getLastStartId()I
+HSPLcom/android/server/am/ServiceRecord;->getLastStartId()I
 HSPLcom/android/server/am/ServiceRecord;->getTracker()Lcom/android/internal/app/procstats/ServiceState;+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Lcom/android/internal/app/procstats/ServiceState;Lcom/android/internal/app/procstats/ServiceState;
 HSPLcom/android/server/am/ServiceRecord;->hasAutoCreateConnections()Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/am/ServiceRecord;->lambda$allowBgActivityStartsOnServiceStart$0()V
-HPLcom/android/server/am/ServiceRecord;->makeNextStartId()I
-HPLcom/android/server/am/ServiceRecord;->makeRestarting(IJ)V
+HSPLcom/android/server/am/ServiceRecord;->makeNextStartId()I
+HPLcom/android/server/am/ServiceRecord;->makeRestarting(IJ)V+]Lcom/android/server/am/ProcessStatsService;Lcom/android/server/am/ProcessStatsService;]Lcom/android/internal/app/procstats/ServiceState;Lcom/android/internal/app/procstats/ServiceState;
 HSPLcom/android/server/am/ServiceRecord;->postNotification()V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
-HPLcom/android/server/am/ServiceRecord;->removeConnection(Landroid/os/IBinder;)V
+HSPLcom/android/server/am/ServiceRecord;->removeConnection(Landroid/os/IBinder;)V
 HSPLcom/android/server/am/ServiceRecord;->resetRestartCounter()V
 HSPLcom/android/server/am/ServiceRecord;->retrieveAppBindingLocked(Landroid/content/Intent;Lcom/android/server/am/ProcessRecord;)Lcom/android/server/am/AppBindRecord;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
-HPLcom/android/server/am/ServiceRecord;->setAllowedBgActivityStartsByBinding(Z)V
+HPLcom/android/server/am/ServiceRecord;->setAllowedBgActivityStartsByBinding(Z)V+]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;
 PLcom/android/server/am/ServiceRecord;->setAllowedBgActivityStartsByStart(Z)V
 HSPLcom/android/server/am/ServiceRecord;->setProcess(Lcom/android/server/am/ProcessRecord;Landroid/app/IApplicationThread;ILcom/android/server/am/UidRecord;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/am/ConnectionRecord;Lcom/android/server/am/ConnectionRecord;]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/am/ProcessServiceRecord;Lcom/android/server/am/ProcessServiceRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;
 HPLcom/android/server/am/ServiceRecord;->signalForegroundServiceNotification(Ljava/lang/String;IIZ)V+]Landroid/app/ActivityManagerInternal$ForegroundServiceStateListener;Lcom/android/server/am/AppFGSTracker;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-PLcom/android/server/am/ServiceRecord;->stripForegroundServiceFlagFromNotification()V
-HPLcom/android/server/am/ServiceRecord;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HPLcom/android/server/am/ServiceRecord;->stripForegroundServiceFlagFromNotification()V
+HSPLcom/android/server/am/ServiceRecord;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 PLcom/android/server/am/ServiceRecord;->updateAllowlistManager()V
 HSPLcom/android/server/am/ServiceRecord;->updateFgsHasNotificationPermission()V
 HPLcom/android/server/am/ServiceRecord;->updateIsAllowedBgActivityStartsByBinding()V
-HSPLcom/android/server/am/ServiceRecord;->updateKeepWarmLocked()V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;
-HPLcom/android/server/am/ServiceRecord;->updateParentProcessBgActivityStartsToken()V
+HSPLcom/android/server/am/ServiceRecord;->updateKeepWarmLocked()V+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
+HPLcom/android/server/am/ServiceRecord;->updateParentProcessBgActivityStartsToken()V+]Lcom/android/server/am/ServiceRecord;Lcom/android/server/am/ServiceRecord;]Lcom/android/server/am/ProcessRecord;Lcom/android/server/am/ProcessRecord;
 HSPLcom/android/server/am/SettingsToPropertiesMapper$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/am/SettingsToPropertiesMapper;)V
 PLcom/android/server/am/SettingsToPropertiesMapper$$ExternalSyntheticLambda0;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
 HSPLcom/android/server/am/SettingsToPropertiesMapper$1;-><init>(Lcom/android/server/am/SettingsToPropertiesMapper;Landroid/os/Handler;Ljava/lang/String;Ljava/lang/String;)V
@@ -10206,10 +10555,11 @@
 HSPLcom/android/server/am/UidObserverController$ChangeRecord;-><init>()V
 HSPLcom/android/server/am/UidObserverController$ChangeRecord;->copyTo(Lcom/android/server/am/UidObserverController$ChangeRecord;)V
 HSPLcom/android/server/am/UidObserverController$UidObserverRegistration;->-$$Nest$fgetmCutpoint(Lcom/android/server/am/UidObserverController$UidObserverRegistration;)I
+PLcom/android/server/am/UidObserverController$UidObserverRegistration;->-$$Nest$fgetmPkg(Lcom/android/server/am/UidObserverController$UidObserverRegistration;)Ljava/lang/String;
 HSPLcom/android/server/am/UidObserverController$UidObserverRegistration;->-$$Nest$fgetmWhich(Lcom/android/server/am/UidObserverController$UidObserverRegistration;)I
 HSPLcom/android/server/am/UidObserverController$UidObserverRegistration;-><clinit>()V
 HSPLcom/android/server/am/UidObserverController$UidObserverRegistration;-><init>(ILjava/lang/String;II)V
-PLcom/android/server/am/UidObserverController$UidObserverRegistration;->dump(Ljava/io/PrintWriter;Landroid/app/IUidObserver;)V
+HPLcom/android/server/am/UidObserverController$UidObserverRegistration;->dump(Ljava/io/PrintWriter;Landroid/app/IUidObserver;)V
 HPLcom/android/server/am/UidObserverController$UidObserverRegistration;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLcom/android/server/am/UidObserverController;-><init>(Landroid/os/Handler;)V
 HSPLcom/android/server/am/UidObserverController;->dispatchUidsChanged()V+]Lcom/android/server/am/UidObserverController;Lcom/android/server/am/UidObserverController;]Lcom/android/server/am/ActiveUids;Lcom/android/server/am/ActiveUids;]Lcom/android/server/am/UidObserverController$ChangeRecord;Lcom/android/server/am/UidObserverController$ChangeRecord;]Lcom/android/server/am/UidRecord;Lcom/android/server/am/UidRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;
@@ -10265,7 +10615,7 @@
 HSPLcom/android/server/am/UidRecord;->setSetCapability(I)V
 HSPLcom/android/server/am/UidRecord;->setSetIdle(Z)V
 HSPLcom/android/server/am/UidRecord;->setSetProcState(I)V
-HPLcom/android/server/am/UidRecord;->toString()Ljava/lang/String;
+HSPLcom/android/server/am/UidRecord;->toString()Ljava/lang/String;
 HSPLcom/android/server/am/UidRecord;->updateHasInternetPermission()V
 PLcom/android/server/am/UserController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/am/UserController;I)V
 PLcom/android/server/am/UserController$$ExternalSyntheticLambda0;->run()V
@@ -10321,7 +10671,7 @@
 PLcom/android/server/am/UserController$Injector;->activityManagerForceStopPackage(ILjava/lang/String;)V
 PLcom/android/server/am/UserController$Injector;->activityManagerOnUserStopped(I)V
 PLcom/android/server/am/UserController$Injector;->batteryStatsServiceNoteEvent(ILjava/lang/String;I)V
-PLcom/android/server/am/UserController$Injector;->broadcastIntent(Landroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;[Ljava/lang/String;ILandroid/os/Bundle;ZZIIIII)I
+HSPLcom/android/server/am/UserController$Injector;->broadcastIntent(Landroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;[Ljava/lang/String;ILandroid/os/Bundle;ZZIIIII)I
 HSPLcom/android/server/am/UserController$Injector;->checkCallingPermission(Ljava/lang/String;)I+]Lcom/android/server/am/ActivityManagerService;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/am/UserController$Injector;->checkComponentPermission(Ljava/lang/String;IIIZ)I
 HPLcom/android/server/am/UserController$Injector;->checkPermissionForPreflight(Ljava/lang/String;IILjava/lang/String;)Z
@@ -10383,7 +10733,7 @@
 HSPLcom/android/server/am/UserController;-><init>(Lcom/android/server/am/ActivityManagerService;)V
 HSPLcom/android/server/am/UserController;-><init>(Lcom/android/server/am/UserController$Injector;)V
 PLcom/android/server/am/UserController;->broadcastProfileAccessibleStateChanged(IILjava/lang/String;)V
-PLcom/android/server/am/UserController;->canInteractWithAcrossProfilesPermission(IZIILjava/lang/String;)Z
+HSPLcom/android/server/am/UserController;->canInteractWithAcrossProfilesPermission(IZIILjava/lang/String;)Z
 HSPLcom/android/server/am/UserController;->checkCallingPermission(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/am/UserController;->checkGetCurrentUserPermissions()V+]Lcom/android/server/am/UserController$Injector;Lcom/android/server/am/UserController$Injector;
 PLcom/android/server/am/UserController;->clearSessionId(I)V
@@ -10399,7 +10749,7 @@
 PLcom/android/server/am/UserController;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 PLcom/android/server/am/UserController;->enforceShellRestriction(Ljava/lang/String;I)V
 HSPLcom/android/server/am/UserController;->ensureNotSpecialUser(I)V
-HPLcom/android/server/am/UserController;->exists(I)Z+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/am/UserController$Injector;Lcom/android/server/am/UserController$Injector;
+HSPLcom/android/server/am/UserController;->exists(I)Z+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/am/UserController$Injector;Lcom/android/server/am/UserController$Injector;
 PLcom/android/server/am/UserController;->expandUserId(I)[I
 PLcom/android/server/am/UserController;->finishUserBoot(Lcom/android/server/am/UserState;)V
 PLcom/android/server/am/UserController;->finishUserBoot(Lcom/android/server/am/UserState;Landroid/content/IIntentReceiver;)V
@@ -10413,7 +10763,7 @@
 PLcom/android/server/am/UserController;->getCurrentOrTargetUserId()I
 PLcom/android/server/am/UserController;->getCurrentOrTargetUserIdLU()I
 HSPLcom/android/server/am/UserController;->getCurrentProfileIds()[I
-HSPLcom/android/server/am/UserController;->getCurrentUser()Landroid/content/pm/UserInfo;
+HSPLcom/android/server/am/UserController;->getCurrentUser()Landroid/content/pm/UserInfo;+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;
 HSPLcom/android/server/am/UserController;->getCurrentUserId()I
 HSPLcom/android/server/am/UserController;->getCurrentUserIdChecked()I+]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;
 HSPLcom/android/server/am/UserController;->getLastUserUnlockingUptime()J
@@ -10425,9 +10775,9 @@
 PLcom/android/server/am/UserController;->getSwitchingToSystemUserMessageUnchecked()Ljava/lang/String;
 PLcom/android/server/am/UserController;->getTemporaryAppAllowlistBroadcastOptions(I)Landroid/app/BroadcastOptions;
 HSPLcom/android/server/am/UserController;->getUserInfo(I)Landroid/content/pm/UserInfo;
-PLcom/android/server/am/UserController;->getUsers()[I
+HSPLcom/android/server/am/UserController;->getUsers()[I
 PLcom/android/server/am/UserController;->getUsersToStopLU(I)[I
-HSPLcom/android/server/am/UserController;->handleIncomingUser(IIIZILjava/lang/String;Ljava/lang/String;)I+]Lcom/android/server/am/UserController$Injector;Lcom/android/server/am/UserController$Injector;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/am/UserController;->handleIncomingUser(IIIZILjava/lang/String;Ljava/lang/String;)I+]Lcom/android/server/am/UserController$Injector;Lcom/android/server/am/UserController$Injector;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/am/UserController;Lcom/android/server/am/UserController;
 PLcom/android/server/am/UserController;->handleMessage(Landroid/os/Message;)Z
 HSPLcom/android/server/am/UserController;->hasStartedUserState(I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/am/UserController;->hasUserRestriction(Ljava/lang/String;I)Z
@@ -10466,9 +10816,9 @@
 PLcom/android/server/am/UserController;->scheduleStartProfiles()V
 PLcom/android/server/am/UserController;->sendBootCompleted(Landroid/content/IIntentReceiver;)V
 PLcom/android/server/am/UserController;->sendContinueUserSwitchLU(Lcom/android/server/am/UserState;II)V
-PLcom/android/server/am/UserController;->sendForegroundProfileChanged(I)V
+HPLcom/android/server/am/UserController;->sendForegroundProfileChanged(I)V
 PLcom/android/server/am/UserController;->sendLockedBootCompletedBroadcast(Landroid/content/IIntentReceiver;I)V
-PLcom/android/server/am/UserController;->sendUserSwitchBroadcasts(II)V
+HSPLcom/android/server/am/UserController;->sendUserSwitchBroadcasts(II)V
 HSPLcom/android/server/am/UserController;->setInitialConfig(ZIZ)V
 HSPLcom/android/server/am/UserController;->setSwitchingFromSystemUserMessage(Ljava/lang/String;)V
 HSPLcom/android/server/am/UserController;->setSwitchingToSystemUserMessage(Ljava/lang/String;)V
@@ -10488,6 +10838,8 @@
 PLcom/android/server/am/UserController;->stopUserOnSwitchIfEnforced(I)V
 PLcom/android/server/am/UserController;->stopUsersLU(IZZLandroid/app/IStopUserCallback;Lcom/android/server/am/UserState$KeyEvictedCallback;)I
 PLcom/android/server/am/UserController;->switchUser(I)Z
+PLcom/android/server/am/UserController;->timeoutUserSwitch(Lcom/android/server/am/UserState;II)V
+PLcom/android/server/am/UserController;->timeoutUserSwitchCallbacks(II)V
 PLcom/android/server/am/UserController;->unfreezeScreen()V
 HPLcom/android/server/am/UserController;->unlockUser(I[BLandroid/os/IProgressListener;)Z
 HPLcom/android/server/am/UserController;->unlockUserCleared(I[BLandroid/os/IProgressListener;)Z
@@ -10524,14 +10876,15 @@
 PLcom/android/server/ambientcontext/AmbientContextManagerPerUserService;->ensureRemoteServiceInitiated()V
 PLcom/android/server/ambientcontext/AmbientContextManagerPerUserService;->getConsentComponent()Landroid/content/ComponentName;
 PLcom/android/server/ambientcontext/AmbientContextManagerPerUserService;->getServerStatusCallback(Landroid/os/RemoteCallback;)Landroid/os/RemoteCallback;
-PLcom/android/server/ambientcontext/AmbientContextManagerPerUserService;->lambda$createDetectionResultRemoteCallback$1(Landroid/os/Bundle;)V
-PLcom/android/server/ambientcontext/AmbientContextManagerPerUserService;->lambda$getServerStatusCallback$0(Landroid/os/RemoteCallback;Landroid/os/Bundle;)V
+HPLcom/android/server/ambientcontext/AmbientContextManagerPerUserService;->lambda$createDetectionResultRemoteCallback$1(Landroid/os/Bundle;)V
+HPLcom/android/server/ambientcontext/AmbientContextManagerPerUserService;->lambda$getServerStatusCallback$0(Landroid/os/RemoteCallback;Landroid/os/Bundle;)V
 PLcom/android/server/ambientcontext/AmbientContextManagerPerUserService;->newServiceInfoLocked(Landroid/content/ComponentName;)Landroid/content/pm/ServiceInfo;
-PLcom/android/server/ambientcontext/AmbientContextManagerPerUserService;->onQueryServiceStatus([ILjava/lang/String;Landroid/os/RemoteCallback;)V
+HPLcom/android/server/ambientcontext/AmbientContextManagerPerUserService;->onQueryServiceStatus([ILjava/lang/String;Landroid/os/RemoteCallback;)V
 PLcom/android/server/ambientcontext/AmbientContextManagerPerUserService;->onRegisterObserver(Landroid/app/ambientcontext/AmbientContextEventRequest;Landroid/app/PendingIntent;Landroid/os/RemoteCallback;)V
 PLcom/android/server/ambientcontext/AmbientContextManagerPerUserService;->onStartConsentActivity([ILjava/lang/String;)V
 PLcom/android/server/ambientcontext/AmbientContextManagerPerUserService;->onUnregisterObserver(Ljava/lang/String;)V
 PLcom/android/server/ambientcontext/AmbientContextManagerPerUserService;->sendDetectionResultIntent(Landroid/app/PendingIntent;Landroid/service/ambientcontext/AmbientContextDetectionResult;)V
+PLcom/android/server/ambientcontext/AmbientContextManagerPerUserService;->sendStatusCallback(Landroid/os/RemoteCallback;I)V
 PLcom/android/server/ambientcontext/AmbientContextManagerPerUserService;->sendStatusToCallback(Landroid/os/RemoteCallback;I)V
 PLcom/android/server/ambientcontext/AmbientContextManagerPerUserService;->setUpServiceIfNeeded()Z
 PLcom/android/server/ambientcontext/AmbientContextManagerPerUserService;->startDetection(Landroid/app/ambientcontext/AmbientContextEventRequest;Ljava/lang/String;Landroid/os/RemoteCallback;Landroid/os/RemoteCallback;)V
@@ -10540,7 +10893,7 @@
 HSPLcom/android/server/ambientcontext/AmbientContextManagerService$AmbientContextManagerInternal;-><init>(Lcom/android/server/ambientcontext/AmbientContextManagerService;)V
 HSPLcom/android/server/ambientcontext/AmbientContextManagerService$AmbientContextManagerInternal;-><init>(Lcom/android/server/ambientcontext/AmbientContextManagerService;Lcom/android/server/ambientcontext/AmbientContextManagerService$AmbientContextManagerInternal-IA;)V
 PLcom/android/server/ambientcontext/AmbientContextManagerService$AmbientContextManagerInternal;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/ambientcontext/AmbientContextManagerService$AmbientContextManagerInternal;->queryServiceStatus([ILjava/lang/String;Landroid/os/RemoteCallback;)V
+HPLcom/android/server/ambientcontext/AmbientContextManagerService$AmbientContextManagerInternal;->queryServiceStatus([ILjava/lang/String;Landroid/os/RemoteCallback;)V
 PLcom/android/server/ambientcontext/AmbientContextManagerService$AmbientContextManagerInternal;->registerObserver(Landroid/app/ambientcontext/AmbientContextEventRequest;Landroid/app/PendingIntent;Landroid/os/RemoteCallback;)V
 PLcom/android/server/ambientcontext/AmbientContextManagerService$AmbientContextManagerInternal;->startConsentActivity([ILjava/lang/String;)V
 PLcom/android/server/ambientcontext/AmbientContextManagerService$AmbientContextManagerInternal;->unregisterObserver(Ljava/lang/String;)V
@@ -10569,6 +10922,7 @@
 HSPLcom/android/server/ambientcontext/AmbientContextManagerService;->newServiceLocked(IZ)Lcom/android/server/ambientcontext/AmbientContextManagerPerUserService;
 HSPLcom/android/server/ambientcontext/AmbientContextManagerService;->newServiceLocked(IZ)Lcom/android/server/infra/AbstractPerUserSystemService;
 HSPLcom/android/server/ambientcontext/AmbientContextManagerService;->onBootPhase(I)V
+PLcom/android/server/ambientcontext/AmbientContextManagerService;->onServicePackageRestartedLocked(I)V
 PLcom/android/server/ambientcontext/AmbientContextManagerService;->onServicePackageUpdatedLocked(I)V
 PLcom/android/server/ambientcontext/AmbientContextManagerService;->onServiceRemoved(Lcom/android/server/ambientcontext/AmbientContextManagerPerUserService;I)V
 PLcom/android/server/ambientcontext/AmbientContextManagerService;->onServiceRemoved(Lcom/android/server/infra/AbstractPerUserSystemService;I)V
@@ -10591,9 +10945,11 @@
 PLcom/android/server/ambientcontext/RemoteAmbientContextDetectionService;->lambda$queryServiceStatus$2([ILjava/lang/String;Landroid/os/RemoteCallback;Landroid/service/ambientcontext/IAmbientContextDetectionService;)V
 PLcom/android/server/ambientcontext/RemoteAmbientContextDetectionService;->lambda$startDetection$0(Landroid/app/ambientcontext/AmbientContextEventRequest;Ljava/lang/String;Landroid/os/RemoteCallback;Landroid/os/RemoteCallback;Landroid/service/ambientcontext/IAmbientContextDetectionService;)V
 PLcom/android/server/ambientcontext/RemoteAmbientContextDetectionService;->lambda$stopDetection$1(Ljava/lang/String;Landroid/service/ambientcontext/IAmbientContextDetectionService;)V
-PLcom/android/server/ambientcontext/RemoteAmbientContextDetectionService;->queryServiceStatus([ILjava/lang/String;Landroid/os/RemoteCallback;)V
+HPLcom/android/server/ambientcontext/RemoteAmbientContextDetectionService;->queryServiceStatus([ILjava/lang/String;Landroid/os/RemoteCallback;)V
 PLcom/android/server/ambientcontext/RemoteAmbientContextDetectionService;->startDetection(Landroid/app/ambientcontext/AmbientContextEventRequest;Ljava/lang/String;Landroid/os/RemoteCallback;Landroid/os/RemoteCallback;)V
 PLcom/android/server/ambientcontext/RemoteAmbientContextDetectionService;->stopDetection(Ljava/lang/String;)V
+PLcom/android/server/app/GameClassifierImpl;-><init>(Landroid/content/pm/PackageManager;)V
+HPLcom/android/server/app/GameClassifierImpl;->isGame(Ljava/lang/String;Landroid/os/UserHandle;)Z
 HSPLcom/android/server/app/GameManagerService$$ExternalSyntheticLambda0;-><init>()V
 HSPLcom/android/server/app/GameManagerService$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/app/GameManagerService$$ExternalSyntheticLambda1;-><init>()V
@@ -10601,11 +10957,17 @@
 HSPLcom/android/server/app/GameManagerService$$ExternalSyntheticLambda2;-><init>()V
 HSPLcom/android/server/app/GameManagerService$$ExternalSyntheticLambda2;->apply(I)Ljava/lang/Object;
 HSPLcom/android/server/app/GameManagerService$1;-><init>(Lcom/android/server/app/GameManagerService;)V
-PLcom/android/server/app/GameManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/app/GameManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/app/GameManagerService$DeviceConfigListener;-><init>(Lcom/android/server/app/GameManagerService;)V
 PLcom/android/server/app/GameManagerService$DeviceConfigListener;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
+PLcom/android/server/app/GameManagerService$FrameRate;-><clinit>()V
+PLcom/android/server/app/GameManagerService$FrameRate;-><init>(Ljava/lang/String;II)V
 HSPLcom/android/server/app/GameManagerService$GamePackageConfiguration$GameModeConfiguration;-><init>(Lcom/android/server/app/GameManagerService$GamePackageConfiguration;Landroid/util/KeyValueListParser;)V
+PLcom/android/server/app/GameManagerService$GamePackageConfiguration$GameModeConfiguration;->getFps()I
 HSPLcom/android/server/app/GameManagerService$GamePackageConfiguration$GameModeConfiguration;->getGameMode()I
+PLcom/android/server/app/GameManagerService$GamePackageConfiguration$GameModeConfiguration;->getLoadingBoostDuration()I
+PLcom/android/server/app/GameManagerService$GamePackageConfiguration$GameModeConfiguration;->getScaling()Ljava/lang/String;
+PLcom/android/server/app/GameManagerService$GamePackageConfiguration$GameModeConfiguration;->getUseAngle()Z
 HSPLcom/android/server/app/GameManagerService$GamePackageConfiguration$GameModeConfiguration;->isValid()Z
 PLcom/android/server/app/GameManagerService$GamePackageConfiguration$GameModeConfiguration;->toString()Ljava/lang/String;
 HSPLcom/android/server/app/GameManagerService$GamePackageConfiguration;->-$$Nest$fgetmAllowAngle(Lcom/android/server/app/GameManagerService$GamePackageConfiguration;)Z
@@ -10614,6 +10976,7 @@
 HSPLcom/android/server/app/GameManagerService$GamePackageConfiguration;->-$$Nest$mgetAvailableGameModesBitfield(Lcom/android/server/app/GameManagerService$GamePackageConfiguration;)I
 HSPLcom/android/server/app/GameManagerService$GamePackageConfiguration;-><init>(Lcom/android/server/app/GameManagerService;Ljava/lang/String;I)V
 HSPLcom/android/server/app/GameManagerService$GamePackageConfiguration;->addModeConfig(Lcom/android/server/app/GameManagerService$GamePackageConfiguration$GameModeConfiguration;)V
+PLcom/android/server/app/GameManagerService$GamePackageConfiguration;->getAvailableGameModes()[I
 HSPLcom/android/server/app/GameManagerService$GamePackageConfiguration;->getAvailableGameModesBitfield()I
 PLcom/android/server/app/GameManagerService$GamePackageConfiguration;->getGameModeConfiguration(I)Lcom/android/server/app/GameManagerService$GamePackageConfiguration$GameModeConfiguration;
 HSPLcom/android/server/app/GameManagerService$GamePackageConfiguration;->getPackageName()Ljava/lang/String;
@@ -10654,19 +11017,23 @@
 HSPLcom/android/server/app/GameManagerService;->createServiceThread()Lcom/android/server/ServiceThread;
 HSPLcom/android/server/app/GameManagerService;->disableCompatScale(Ljava/lang/String;)V
 PLcom/android/server/app/GameManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-HSPLcom/android/server/app/GameManagerService;->getGameMode(Ljava/lang/String;I)I
+PLcom/android/server/app/GameManagerService;->getAvailableGameModesUnchecked(Ljava/lang/String;)[I
+PLcom/android/server/app/GameManagerService;->getConfig(Ljava/lang/String;)Lcom/android/server/app/GameManagerService$GamePackageConfiguration;
+PLcom/android/server/app/GameManagerService;->getFpsInt(Ljava/lang/String;)I
+HSPLcom/android/server/app/GameManagerService;->getGameMode(Ljava/lang/String;I)I+]Lcom/android/server/app/GameManagerService;Lcom/android/server/app/GameManagerService;
 HSPLcom/android/server/app/GameManagerService;->getGameModeFromSettings(Ljava/lang/String;I)I
+PLcom/android/server/app/GameManagerService;->getGameModeInfo(Ljava/lang/String;I)Landroid/app/GameModeInfo;
 HSPLcom/android/server/app/GameManagerService;->getInstalledGamePackageNames(I)[Ljava/lang/String;
 PLcom/android/server/app/GameManagerService;->getLoadingBoostDuration(Ljava/lang/String;I)I
 HSPLcom/android/server/app/GameManagerService;->getNewGameMode(ILcom/android/server/app/GameManagerService$GamePackageConfiguration;)I
-HSPLcom/android/server/app/GameManagerService;->isAngleEnabled(Ljava/lang/String;I)Z
-HSPLcom/android/server/app/GameManagerService;->isPackageGame(Ljava/lang/String;I)Z
+HSPLcom/android/server/app/GameManagerService;->isAngleEnabled(Ljava/lang/String;I)Z+]Lcom/android/server/app/GameManagerService;Lcom/android/server/app/GameManagerService;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/app/GameManagerService$GamePackageConfiguration;Lcom/android/server/app/GameManagerService$GamePackageConfiguration;
+HSPLcom/android/server/app/GameManagerService;->isPackageGame(Ljava/lang/String;I)Z+]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
 HSPLcom/android/server/app/GameManagerService;->isValidPackageName(Ljava/lang/String;I)Z
 HSPLcom/android/server/app/GameManagerService;->lambda$getInstalledGamePackageNames$0(Landroid/content/pm/PackageInfo;)Z
 HSPLcom/android/server/app/GameManagerService;->lambda$getInstalledGamePackageNames$1(Landroid/content/pm/PackageInfo;)Ljava/lang/String;
 HSPLcom/android/server/app/GameManagerService;->lambda$getInstalledGamePackageNames$2(I)[Ljava/lang/String;
 HSPLcom/android/server/app/GameManagerService;->modeToBitmask(I)I
-PLcom/android/server/app/GameManagerService;->notifyGraphicsEnvironmentSetup(Ljava/lang/String;I)V
+HPLcom/android/server/app/GameManagerService;->notifyGraphicsEnvironmentSetup(Ljava/lang/String;I)V
 PLcom/android/server/app/GameManagerService;->onBootCompleted()V
 HSPLcom/android/server/app/GameManagerService;->onUserStarting(Lcom/android/server/SystemService$TargetUser;)V
 PLcom/android/server/app/GameManagerService;->onUserStopping(Lcom/android/server/SystemService$TargetUser;)V
@@ -10685,22 +11052,28 @@
 PLcom/android/server/app/GameManagerSettings;->removeGame(Ljava/lang/String;)V
 PLcom/android/server/app/GameManagerSettings;->setGameModeLocked(Ljava/lang/String;I)V
 PLcom/android/server/app/GameManagerSettings;->writePersistentDataLocked()V
+PLcom/android/server/app/GameServiceConfiguration$GameServiceComponentConfiguration;-><init>(Landroid/os/UserHandle;Landroid/content/ComponentName;Landroid/content/ComponentName;)V
+PLcom/android/server/app/GameServiceConfiguration$GameServiceComponentConfiguration;->equals(Ljava/lang/Object;)Z
+PLcom/android/server/app/GameServiceConfiguration$GameServiceComponentConfiguration;->getGameServiceComponentName()Landroid/content/ComponentName;
+PLcom/android/server/app/GameServiceConfiguration$GameServiceComponentConfiguration;->getGameSessionServiceComponentName()Landroid/content/ComponentName;
+PLcom/android/server/app/GameServiceConfiguration$GameServiceComponentConfiguration;->getUserHandle()Landroid/os/UserHandle;
+PLcom/android/server/app/GameServiceConfiguration$GameServiceComponentConfiguration;->toString()Ljava/lang/String;
 PLcom/android/server/app/GameServiceConfiguration;-><init>(Ljava/lang/String;Lcom/android/server/app/GameServiceConfiguration$GameServiceComponentConfiguration;)V
 PLcom/android/server/app/GameServiceConfiguration;->getGameServiceComponentConfiguration()Lcom/android/server/app/GameServiceConfiguration$GameServiceComponentConfiguration;
 PLcom/android/server/app/GameServiceConfiguration;->getPackageName()Ljava/lang/String;
 HSPLcom/android/server/app/GameServiceController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/app/GameServiceController;)V
-PLcom/android/server/app/GameServiceController$$ExternalSyntheticLambda0;->run()V
+HSPLcom/android/server/app/GameServiceController$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/app/GameServiceController$PackageChangedBroadcastReceiver$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/app/GameServiceController;)V
 PLcom/android/server/app/GameServiceController$PackageChangedBroadcastReceiver$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/app/GameServiceController$PackageChangedBroadcastReceiver;->$r8$lambda$a1V1MVskI1DHpcudK_bn1cLnRSs(Lcom/android/server/app/GameServiceController;)V
 PLcom/android/server/app/GameServiceController$PackageChangedBroadcastReceiver;-><init>(Lcom/android/server/app/GameServiceController;Ljava/lang/String;)V
 PLcom/android/server/app/GameServiceController$PackageChangedBroadcastReceiver;->lambda$onReceive$0(Lcom/android/server/app/GameServiceController;)V
 PLcom/android/server/app/GameServiceController$PackageChangedBroadcastReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
-PLcom/android/server/app/GameServiceController;->$r8$lambda$a3O72hiYpbFn47wdnz-HC0iXPMA(Lcom/android/server/app/GameServiceController;)V
+HSPLcom/android/server/app/GameServiceController;->$r8$lambda$a3O72hiYpbFn47wdnz-HC0iXPMA(Lcom/android/server/app/GameServiceController;)V
 PLcom/android/server/app/GameServiceController;->-$$Nest$fgetmBackgroundExecutor(Lcom/android/server/app/GameServiceController;)Ljava/util/concurrent/Executor;
 PLcom/android/server/app/GameServiceController;->-$$Nest$mevaluateActiveGameServiceProvider(Lcom/android/server/app/GameServiceController;)V
 HSPLcom/android/server/app/GameServiceController;-><init>(Landroid/content/Context;Ljava/util/concurrent/Executor;Lcom/android/server/app/GameServiceProviderSelector;Lcom/android/server/app/GameServiceProviderInstanceFactory;)V
-PLcom/android/server/app/GameServiceController;->evaluateActiveGameServiceProvider()V
+HSPLcom/android/server/app/GameServiceController;->evaluateActiveGameServiceProvider()V
 PLcom/android/server/app/GameServiceController;->evaluateGameServiceProviderPackageChangedListenerLocked(Ljava/lang/String;)V
 PLcom/android/server/app/GameServiceController;->notifyNewForegroundUser(Lcom/android/server/SystemService$TargetUser;)V
 HSPLcom/android/server/app/GameServiceController;->notifyUserStarted(Lcom/android/server/SystemService$TargetUser;)V
@@ -10708,9 +11081,143 @@
 PLcom/android/server/app/GameServiceController;->notifyUserUnlocking(Lcom/android/server/SystemService$TargetUser;)V
 PLcom/android/server/app/GameServiceController;->onBootComplete()V
 HSPLcom/android/server/app/GameServiceController;->setCurrentForegroundUserAndEvaluateProvider(Lcom/android/server/SystemService$TargetUser;)V
+PLcom/android/server/app/GameServiceProviderInstanceFactoryImpl$GameServiceConnector$$ExternalSyntheticLambda0;-><init>()V
+PLcom/android/server/app/GameServiceProviderInstanceFactoryImpl$GameServiceConnector$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/app/GameServiceProviderInstanceFactoryImpl$GameServiceConnector;-><init>(Landroid/content/Context;Lcom/android/server/app/GameServiceConfiguration$GameServiceComponentConfiguration;)V
+PLcom/android/server/app/GameServiceProviderInstanceFactoryImpl$GameServiceConnector;->getAutoDisconnectTimeoutMs()J
+PLcom/android/server/app/GameServiceProviderInstanceFactoryImpl$GameSessionServiceConnector$$ExternalSyntheticLambda0;-><init>()V
+PLcom/android/server/app/GameServiceProviderInstanceFactoryImpl$GameSessionServiceConnector$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/app/GameServiceProviderInstanceFactoryImpl$GameSessionServiceConnector;-><init>(Landroid/content/Context;Lcom/android/server/app/GameServiceConfiguration$GameServiceComponentConfiguration;)V
+PLcom/android/server/app/GameServiceProviderInstanceFactoryImpl$GameSessionServiceConnector;->getAutoDisconnectTimeoutMs()J
 HSPLcom/android/server/app/GameServiceProviderInstanceFactoryImpl;-><init>(Landroid/content/Context;)V
+PLcom/android/server/app/GameServiceProviderInstanceFactoryImpl;->create(Lcom/android/server/app/GameServiceConfiguration$GameServiceComponentConfiguration;)Lcom/android/server/app/GameServiceProviderInstance;
+PLcom/android/server/app/GameServiceProviderInstanceImpl$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/app/GameServiceProviderInstanceImpl;Lcom/android/server/app/GameSessionRecord;I)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/app/GameServiceProviderInstanceImpl;ILcom/android/server/app/GameSessionRecord;Landroid/service/games/GameSessionViewHostConfiguration;Lcom/android/internal/infra/AndroidFuture;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$$ExternalSyntheticLambda3;->runNoResult(Ljava/lang/Object;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/app/GameTaskInfo;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$$ExternalSyntheticLambda4;->runNoResult(Ljava/lang/Object;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$$ExternalSyntheticLambda5;-><init>()V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$$ExternalSyntheticLambda5;->runNoResult(Ljava/lang/Object;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/app/GameServiceProviderInstanceImpl;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$$ExternalSyntheticLambda6;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$1;-><init>(Lcom/android/server/app/GameServiceProviderInstanceImpl;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$1;->onConnected(Landroid/os/IInterface;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$1;->onConnected(Landroid/service/games/IGameService;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$2$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/app/GameServiceProviderInstanceImpl$2;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$2$$ExternalSyntheticLambda0;->run()V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$2;->$r8$lambda$GoVlki2XvNlE5mcXginIklyRsLY(Lcom/android/server/app/GameServiceProviderInstanceImpl$2;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$2;-><init>(Lcom/android/server/app/GameServiceProviderInstanceImpl;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$2;->lambda$onBinderDied$0()V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$2;->onBinderDied()V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$3;-><init>(Lcom/android/server/app/GameServiceProviderInstanceImpl;)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl$3;->onTransientSystemBarsVisibilityChanged(IZZ)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl$4$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/app/GameServiceProviderInstanceImpl$4;ILandroid/content/ComponentName;)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl$4$$ExternalSyntheticLambda0;->run()V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl$4$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/app/GameServiceProviderInstanceImpl$4;IZ)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl$4$$ExternalSyntheticLambda1;->run()V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl$4$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/app/GameServiceProviderInstanceImpl$4;I)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$4$$ExternalSyntheticLambda2;->run()V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$4;->$r8$lambda$0t6Kgs1ByUu0wDpyHKGLU_wI5Co(Lcom/android/server/app/GameServiceProviderInstanceImpl$4;ILandroid/content/ComponentName;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$4;->$r8$lambda$6XmnJ7oTTOBwGj1CDnz7F43Px0U(Lcom/android/server/app/GameServiceProviderInstanceImpl$4;I)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$4;->$r8$lambda$qNRV5gJTiaI_GuBnFZm9Got31io(Lcom/android/server/app/GameServiceProviderInstanceImpl$4;IZ)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$4;-><init>(Lcom/android/server/app/GameServiceProviderInstanceImpl;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$4;->lambda$onTaskCreated$0(ILandroid/content/ComponentName;)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl$4;->lambda$onTaskFocusChanged$2(IZ)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$4;->lambda$onTaskRemoved$1(I)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl$4;->onTaskCreated(ILandroid/content/ComponentName;)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl$4;->onTaskFocusChanged(IZ)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl$4;->onTaskRemoved(I)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl$5$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/app/GameServiceProviderInstanceImpl$5;I)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl$5$$ExternalSyntheticLambda0;->run()V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl$5$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/app/GameServiceProviderInstanceImpl$5;I)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl$5$$ExternalSyntheticLambda1;->run()V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl$5;->$r8$lambda$9vG8JPx5HYUBB-Ah2s8lLCf6ITM(Lcom/android/server/app/GameServiceProviderInstanceImpl$5;I)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl$5;->$r8$lambda$Oou4iKkqIwcbeVRJV0UpHAwiEqw(Lcom/android/server/app/GameServiceProviderInstanceImpl$5;I)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$5;-><init>(Lcom/android/server/app/GameServiceProviderInstanceImpl;)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl$5;->lambda$onForegroundActivitiesChanged$0(I)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl$5;->lambda$onProcessDied$1(I)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl$5;->onForegroundActivitiesChanged(IIZ)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$5;->onForegroundServicesChanged(III)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl$5;->onProcessDied(II)V+]Ljava/util/concurrent/Executor;Landroid/os/HandlerExecutor;
+PLcom/android/server/app/GameServiceProviderInstanceImpl$6$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/app/GameServiceProviderInstanceImpl$6;I)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$6$$ExternalSyntheticLambda0;->run()V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$6;->$r8$lambda$WIDqRyEdcRifogwX4TIvY2UzmFI(Lcom/android/server/app/GameServiceProviderInstanceImpl$6;I)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$6;-><init>(Lcom/android/server/app/GameServiceProviderInstanceImpl;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$6;->createGameSession(I)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$6;->lambda$createGameSession$0(I)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl$7;-><init>(Lcom/android/server/app/GameServiceProviderInstanceImpl;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->$r8$lambda$1C0CJwZV84ZNaw4OJbOVwpN279k(Lcom/android/server/app/GameTaskInfo;Landroid/service/games/IGameService;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->$r8$lambda$475ZuF2CizfzaYT4oTaY6VimgG0(Lcom/android/server/app/GameServiceProviderInstanceImpl;ILcom/android/server/app/GameSessionRecord;Landroid/service/games/GameSessionViewHostConfiguration;Lcom/android/internal/infra/AndroidFuture;Landroid/service/games/IGameSessionService;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->$r8$lambda$T4B-KHB6KrYxVyjX2LYnCUR1IuE(Lcom/android/server/app/GameServiceProviderInstanceImpl;Lcom/android/server/app/GameSessionRecord;ILandroid/service/games/CreateGameSessionResult;Ljava/lang/Throwable;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->$r8$lambda$a_V3vRos4_WB0TKLR0mfmsSrNew(Lcom/android/server/app/GameServiceProviderInstanceImpl;Ljava/lang/Void;Ljava/lang/Throwable;)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl;->-$$Nest$fgetmBackgroundExecutor(Lcom/android/server/app/GameServiceProviderInstanceImpl;)Ljava/util/concurrent/Executor;
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->-$$Nest$fgetmContext(Lcom/android/server/app/GameServiceProviderInstanceImpl;)Landroid/content/Context;
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->-$$Nest$fgetmGameServiceController(Lcom/android/server/app/GameServiceProviderInstanceImpl;)Landroid/service/games/IGameServiceController;
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->-$$Nest$fgetmLock(Lcom/android/server/app/GameServiceProviderInstanceImpl;)Ljava/lang/Object;
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->-$$Nest$mcreateGameSession(Lcom/android/server/app/GameServiceProviderInstanceImpl;I)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->-$$Nest$mdestroyAndClearAllGameSessionsLocked(Lcom/android/server/app/GameServiceProviderInstanceImpl;)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl;->-$$Nest$monForegroundActivitiesChanged(Lcom/android/server/app/GameServiceProviderInstanceImpl;I)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl;->-$$Nest$monProcessDied(Lcom/android/server/app/GameServiceProviderInstanceImpl;I)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->-$$Nest$monTaskCreated(Lcom/android/server/app/GameServiceProviderInstanceImpl;ILandroid/content/ComponentName;)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl;->-$$Nest$monTaskFocusChanged(Lcom/android/server/app/GameServiceProviderInstanceImpl;IZ)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->-$$Nest$monTaskRemoved(Lcom/android/server/app/GameServiceProviderInstanceImpl;I)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->-$$Nest$monTransientSystemBarsVisibilityChanged(Lcom/android/server/app/GameServiceProviderInstanceImpl;IZZ)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl;-><init>(Landroid/os/UserHandle;Ljava/util/concurrent/Executor;Landroid/content/Context;Lcom/android/server/app/GameTaskInfoProvider;Landroid/app/IActivityManager;Landroid/app/ActivityManagerInternal;Landroid/app/IActivityTaskManager;Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/internal/infra/ServiceConnector;Lcom/android/internal/infra/ServiceConnector;Lcom/android/internal/util/ScreenshotHelper;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->attachGameSessionLocked(ILandroid/service/games/CreateGameSessionResult;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->createGameSession(I)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->createGameSessionLocked(I)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->createViewHostConfigurationForTask(I)Landroid/service/games/GameSessionViewHostConfiguration;
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->destroyAndClearAllGameSessionsLocked()V
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->destroyGameSessionFromRecordLocked(Lcom/android/server/app/GameSessionRecord;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->endGameSessionsForPackageLocked(Ljava/lang/String;)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl;->gameSessionExistsForPackageNameLocked(Ljava/lang/String;)Z
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->gameTaskStartedLocked(Lcom/android/server/app/GameTaskInfo;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->lambda$createGameSessionLocked$2(Lcom/android/server/app/GameSessionRecord;ILandroid/service/games/CreateGameSessionResult;Ljava/lang/Throwable;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->lambda$createGameSessionLocked$3(ILcom/android/server/app/GameSessionRecord;Landroid/service/games/GameSessionViewHostConfiguration;Lcom/android/internal/infra/AndroidFuture;Landroid/service/games/IGameSessionService;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->lambda$gameTaskStartedLocked$1(Lcom/android/server/app/GameTaskInfo;Landroid/service/games/IGameService;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->lambda$stopLocked$0(Ljava/lang/Void;Ljava/lang/Throwable;)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl;->maybeCreateGameSessionForFocusedTaskLocked(I)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl;->onForegroundActivitiesChanged(I)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl;->onForegroundActivitiesChangedLocked(I)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl;->onProcessDied(I)V+]Lcom/android/server/app/GameServiceProviderInstanceImpl;Lcom/android/server/app/GameServiceProviderInstanceImpl;
+HPLcom/android/server/app/GameServiceProviderInstanceImpl;->onProcessDiedLocked(I)V+]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/app/GameServiceProviderInstanceImpl;Lcom/android/server/app/GameServiceProviderInstanceImpl;
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->onTaskCreated(ILandroid/content/ComponentName;)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl;->onTaskFocusChanged(IZ)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl;->onTaskFocusChangedLocked(IZ)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl;->onTaskRemoved(I)V
+HPLcom/android/server/app/GameServiceProviderInstanceImpl;->onTransientSystemBarsVisibilityChanged(IZZ)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->recreateEndedGameSessionsLocked(Ljava/lang/String;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->removeAndDestroyGameSessionIfNecessaryLocked(I)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->setGameSessionFocusedIfNecessary(ILandroid/service/games/IGameSession;)V
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->start()V
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->startLocked()V
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->stop()V
+PLcom/android/server/app/GameServiceProviderInstanceImpl;->stopLocked()V
 HSPLcom/android/server/app/GameServiceProviderSelectorImpl;-><init>(Landroid/content/res/Resources;Landroid/content/pm/PackageManager;)V
+PLcom/android/server/app/GameServiceProviderSelectorImpl;->determineGameSessionServiceFromGameService(Landroid/content/pm/ServiceInfo;)Landroid/content/ComponentName;
 PLcom/android/server/app/GameServiceProviderSelectorImpl;->get(Lcom/android/server/SystemService$TargetUser;Ljava/lang/String;)Lcom/android/server/app/GameServiceConfiguration;
+PLcom/android/server/app/GameSessionRecord$State;-><clinit>()V
+PLcom/android/server/app/GameSessionRecord$State;-><init>(Ljava/lang/String;I)V
+PLcom/android/server/app/GameSessionRecord;-><init>(ILcom/android/server/app/GameSessionRecord$State;Landroid/content/ComponentName;Landroid/service/games/IGameSession;Landroid/view/SurfaceControlViewHost$SurfacePackage;)V
+PLcom/android/server/app/GameSessionRecord;->awaitingGameSessionRequest(ILandroid/content/ComponentName;)Lcom/android/server/app/GameSessionRecord;
+PLcom/android/server/app/GameSessionRecord;->getComponentName()Landroid/content/ComponentName;
+PLcom/android/server/app/GameSessionRecord;->getGameSession()Landroid/service/games/IGameSession;
+PLcom/android/server/app/GameSessionRecord;->getSurfacePackage()Landroid/view/SurfaceControlViewHost$SurfacePackage;
+PLcom/android/server/app/GameSessionRecord;->getTaskId()I
+PLcom/android/server/app/GameSessionRecord;->isAwaitingGameSessionRequest()Z
+PLcom/android/server/app/GameSessionRecord;->isGameSessionEndedForProcessDeath()Z
+PLcom/android/server/app/GameSessionRecord;->isGameSessionRequested()Z
+PLcom/android/server/app/GameSessionRecord;->toString()Ljava/lang/String;
+PLcom/android/server/app/GameSessionRecord;->withGameSession(Landroid/service/games/IGameSession;Landroid/view/SurfaceControlViewHost$SurfacePackage;)Lcom/android/server/app/GameSessionRecord;
+PLcom/android/server/app/GameSessionRecord;->withGameSessionEndedOnProcessDeath()Lcom/android/server/app/GameSessionRecord;
+PLcom/android/server/app/GameSessionRecord;->withGameSessionRequested()Lcom/android/server/app/GameSessionRecord;
+HPLcom/android/server/app/GameTaskInfo;-><init>(IZLandroid/content/ComponentName;)V
+PLcom/android/server/app/GameTaskInfoProvider;-><init>(Landroid/os/UserHandle;Landroid/app/IActivityTaskManager;Lcom/android/server/app/GameClassifier;)V
+HPLcom/android/server/app/GameTaskInfoProvider;->generateGameInfo(ILandroid/content/ComponentName;)Lcom/android/server/app/GameTaskInfo;
+HPLcom/android/server/app/GameTaskInfoProvider;->get(I)Lcom/android/server/app/GameTaskInfo;
+HPLcom/android/server/app/GameTaskInfoProvider;->get(ILandroid/content/ComponentName;)Lcom/android/server/app/GameTaskInfo;
+PLcom/android/server/app/GameTaskInfoProvider;->getRunningTaskInfo(I)Landroid/app/ActivityManager$RunningTaskInfo;
 HSPLcom/android/server/appbinding/AppBindingConstants;-><init>(Ljava/lang/String;)V
 PLcom/android/server/appbinding/AppBindingConstants;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
 HSPLcom/android/server/appbinding/AppBindingConstants;->initializeFromString(Ljava/lang/String;)Lcom/android/server/appbinding/AppBindingConstants;
@@ -10830,7 +11337,7 @@
 HSPLcom/android/server/apphibernation/AppHibernationService$InjectorImpl;->isOatArtifactDeletionEnabled()Z
 HSPLcom/android/server/apphibernation/AppHibernationService$LocalService;-><init>(Lcom/android/server/apphibernation/AppHibernationService;)V
 HSPLcom/android/server/apphibernation/AppHibernationService$LocalService;->isHibernatingForUser(Ljava/lang/String;I)Z+]Lcom/android/server/apphibernation/AppHibernationService;Lcom/android/server/apphibernation/AppHibernationService;
-HPLcom/android/server/apphibernation/AppHibernationService$LocalService;->isHibernatingGlobally(Ljava/lang/String;)Z
+HSPLcom/android/server/apphibernation/AppHibernationService$LocalService;->isHibernatingGlobally(Ljava/lang/String;)Z
 PLcom/android/server/apphibernation/AppHibernationService$LocalService;->isOatArtifactDeletionEnabled()Z
 PLcom/android/server/apphibernation/AppHibernationService$LocalService;->setHibernatingForUser(Ljava/lang/String;IZ)V
 PLcom/android/server/apphibernation/AppHibernationService$LocalService;->setHibernatingGlobally(Ljava/lang/String;Z)V
@@ -10856,17 +11363,17 @@
 HSPLcom/android/server/apphibernation/AppHibernationService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/apphibernation/AppHibernationService;-><init>(Lcom/android/server/apphibernation/AppHibernationService$Injector;)V
 HSPLcom/android/server/apphibernation/AppHibernationService;->checkUserStatesExist(ILjava/lang/String;Z)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/UserManager;Landroid/os/UserManager;
-PLcom/android/server/apphibernation/AppHibernationService;->dump(Ljava/io/PrintWriter;)V
+HPLcom/android/server/apphibernation/AppHibernationService;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/apphibernation/AppHibernationService;->getHibernatingPackagesForUser(I)Ljava/util/List;
 HSPLcom/android/server/apphibernation/AppHibernationService;->handleIncomingUser(ILjava/lang/String;)I+]Landroid/app/IActivityManager;Lcom/android/server/am/ActivityManagerService;
 PLcom/android/server/apphibernation/AppHibernationService;->hibernatePackageForUser(Ljava/lang/String;ILcom/android/server/apphibernation/UserLevelState;)V
 PLcom/android/server/apphibernation/AppHibernationService;->hibernatePackageGlobally(Ljava/lang/String;Lcom/android/server/apphibernation/GlobalLevelState;)V
-PLcom/android/server/apphibernation/AppHibernationService;->initializeGlobalHibernationStates(Ljava/util/List;)V
+HPLcom/android/server/apphibernation/AppHibernationService;->initializeGlobalHibernationStates(Ljava/util/List;)V
 HPLcom/android/server/apphibernation/AppHibernationService;->initializeUserHibernationStates(ILjava/util/List;)V
-HPLcom/android/server/apphibernation/AppHibernationService;->isAppHibernationEnabled()Z
+HSPLcom/android/server/apphibernation/AppHibernationService;->isAppHibernationEnabled()Z
 HSPLcom/android/server/apphibernation/AppHibernationService;->isDeviceConfigAppHibernationEnabled()Z
 HSPLcom/android/server/apphibernation/AppHibernationService;->isHibernatingForUser(Ljava/lang/String;I)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/SystemService;Lcom/android/server/apphibernation/AppHibernationService;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/apphibernation/AppHibernationService;Lcom/android/server/apphibernation/AppHibernationService;]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/util/Map;Landroid/util/ArrayMap;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
-HPLcom/android/server/apphibernation/AppHibernationService;->isHibernatingGlobally(Ljava/lang/String;)Z
+HSPLcom/android/server/apphibernation/AppHibernationService;->isHibernatingGlobally(Ljava/lang/String;)Z
 PLcom/android/server/apphibernation/AppHibernationService;->isOatArtifactDeletionEnabled()Z
 HPLcom/android/server/apphibernation/AppHibernationService;->lambda$new$6(ILandroid/app/usage/UsageEvents$Event;)V+]Lcom/android/server/apphibernation/AppHibernationService;Lcom/android/server/apphibernation/AppHibernationService;
 PLcom/android/server/apphibernation/AppHibernationService;->lambda$onBootPhase$0()V
@@ -10911,11 +11418,11 @@
 PLcom/android/server/apphibernation/UserLevelState;-><clinit>()V
 PLcom/android/server/apphibernation/UserLevelState;-><init>()V
 PLcom/android/server/apphibernation/UserLevelState;-><init>(Lcom/android/server/apphibernation/UserLevelState;)V
-PLcom/android/server/apphibernation/UserLevelState;->toString()Ljava/lang/String;
+HPLcom/android/server/apphibernation/UserLevelState;->toString()Ljava/lang/String;
 HSPLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda0;-><init>()V
 HSPLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda10;-><init>()V
-HSPLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda10;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda10;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/lang/Boolean;Ljava/lang/Boolean;
 PLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda11;-><init>()V
 HPLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda11;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HPLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda12;-><init>(Landroid/app/AsyncNotedAppOp;[ZILjava/lang/String;ILjava/lang/String;)V
@@ -10927,24 +11434,24 @@
 HSPLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda15;-><init>()V
 HSPLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda15;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V+]Ljava/lang/Integer;Ljava/lang/Integer;
 PLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda2;-><init>()V
-PLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda3;-><init>()V
 HSPLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V+]Ljava/lang/Integer;Ljava/lang/Integer;
 PLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda5;-><init>()V
 PLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda6;-><init>()V
-HPLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda6;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/lang/Long;Ljava/lang/Long;
+HSPLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda6;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/lang/Long;Ljava/lang/Long;
 HSPLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda7;-><init>()V
 HSPLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda7;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda8;-><init>()V
 PLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda8;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda9;-><init>()V
-PLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda9;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda9;-><init>()V
+HSPLcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda9;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/appop/AppOpsService$1$1;-><init>(Lcom/android/server/appop/AppOpsService$1;)V
 PLcom/android/server/appop/AppOpsService$1$1;->doInBackground([Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/appop/AppOpsService$1$1;->doInBackground([Ljava/lang/Void;)Ljava/lang/Void;
 HSPLcom/android/server/appop/AppOpsService$1;-><init>(Lcom/android/server/appop/AppOpsService;)V
-PLcom/android/server/appop/AppOpsService$1;->run()V
+HPLcom/android/server/appop/AppOpsService$1;->run()V
 HSPLcom/android/server/appop/AppOpsService$2;-><init>(Lcom/android/server/appop/AppOpsService;)V
 HSPLcom/android/server/appop/AppOpsService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/appop/AppOpsService$3;-><init>(Lcom/android/server/appop/AppOpsService;)V
@@ -10954,7 +11461,8 @@
 HSPLcom/android/server/appop/AppOpsService$5;-><init>(Lcom/android/server/appop/AppOpsService;)V
 PLcom/android/server/appop/AppOpsService$5;->run()V
 HSPLcom/android/server/appop/AppOpsService$6;-><init>(Lcom/android/server/appop/AppOpsService;)V
-PLcom/android/server/appop/AppOpsService$7;-><init>(Lcom/android/server/appop/AppOpsService;Landroid/util/Pair;)V
+PLcom/android/server/appop/AppOpsService$6;->getPackageTrustedToInstallApps(Ljava/lang/String;I)I
+HPLcom/android/server/appop/AppOpsService$7;-><init>(Lcom/android/server/appop/AppOpsService;Landroid/util/Pair;)V
 HPLcom/android/server/appop/AppOpsService$7;->onCallbackDied(Landroid/os/IInterface;)V
 HPLcom/android/server/appop/AppOpsService$7;->onCallbackDied(Lcom/android/internal/app/IAppOpsAsyncNotedCallback;)V
 PLcom/android/server/appop/AppOpsService$8;-><init>(Lcom/android/server/appop/AppOpsService;Landroid/util/ArraySet;)V
@@ -10968,19 +11476,19 @@
 PLcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl$$ExternalSyntheticLambda1;-><init>()V
 PLcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl;->$r8$lambda$LtIyNEvQWBWoYz8vvrW2aXx9D9M(Ljava/lang/Object;IZI)V
-PLcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl;->$r8$lambda$mtHcSRMP4nX6ksf9z8MOakoroG0(Ljava/lang/Object;II)V
+HSPLcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl;->$r8$lambda$LtIyNEvQWBWoYz8vvrW2aXx9D9M(Ljava/lang/Object;IZI)V
+HSPLcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl;->$r8$lambda$mtHcSRMP4nX6ksf9z8MOakoroG0(Ljava/lang/Object;II)V
 HSPLcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl;-><init>(Lcom/android/server/appop/AppOpsService;)V
 HSPLcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl;-><init>(Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl-IA;)V
-PLcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl;->lambda$setGlobalRestriction$0(Ljava/lang/Object;II)V
-PLcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl;->lambda$setGlobalRestriction$1(Ljava/lang/Object;IZI)V
+HSPLcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl;->lambda$setGlobalRestriction$0(Ljava/lang/Object;II)V
+HSPLcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl;->lambda$setGlobalRestriction$1(Ljava/lang/Object;IZI)V
 HSPLcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl;->setDeviceAndProfileOwners(Landroid/util/SparseIntArray;)V
 HSPLcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl;->setGlobalRestriction(IZLandroid/os/IBinder;)V
-HPLcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl;->setModeFromPermissionPolicy(IILjava/lang/String;ILcom/android/internal/app/IAppOpsCallback;)V
+HSPLcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl;->setModeFromPermissionPolicy(IILjava/lang/String;ILcom/android/internal/app/IAppOpsCallback;)V
 HSPLcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl;->setUidModeFromPermissionPolicy(IIILcom/android/internal/app/IAppOpsCallback;)V
 HPLcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl;->updateAppWidgetVisibility(Landroid/util/SparseArray;Z)V
 HSPLcom/android/server/appop/AppOpsService$AttributedOp$$ExternalSyntheticLambda0;-><init>()V
-PLcom/android/server/appop/AppOpsService$AttributedOp$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/appop/AppOpsService$AttributedOp$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/appop/AppOpsService$AttributedOp;->$r8$lambda$ZGA_7NvYHWnZdMHS8yC9scCLWa4(Lcom/android/server/appop/AppOpsService$AttributedOp;Landroid/os/IBinder;)V
 PLcom/android/server/appop/AppOpsService$AttributedOp;->-$$Nest$fgetmInProgressEvents(Lcom/android/server/appop/AppOpsService$AttributedOp;)Landroid/util/ArrayMap;
 HSPLcom/android/server/appop/AppOpsService$AttributedOp;-><init>(Lcom/android/server/appop/AppOpsService;Ljava/lang/String;Lcom/android/server/appop/AppOpsService$Op;)V
@@ -10993,12 +11501,13 @@
 HPLcom/android/server/appop/AppOpsService$AttributedOp;->deepClone(Landroid/util/LongSparseArray;)Landroid/util/LongSparseArray;+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
 HSPLcom/android/server/appop/AppOpsService$AttributedOp;->finishOrPause(Landroid/os/IBinder;ZZ)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/appop/AppOpsService$Op;Lcom/android/server/appop/AppOpsService$Op;]Landroid/util/Pools$SimplePool;Lcom/android/server/appop/AppOpsService$InProgressStartOpEventPool;]Lcom/android/server/appop/AppOpsService$AttributedOp;Lcom/android/server/appop/AppOpsService$AttributedOp;]Lcom/android/server/appop/HistoricalRegistry;Lcom/android/server/appop/HistoricalRegistry;]Landroid/app/AppOpsManager$NoteOpEvent;Landroid/app/AppOpsManager$NoteOpEvent;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Lcom/android/server/appop/AppOpsService$InProgressStartOpEvent;Lcom/android/server/appop/AppOpsService$InProgressStartOpEvent;
 PLcom/android/server/appop/AppOpsService$AttributedOp;->finishPossiblyPaused(Landroid/os/IBinder;Z)V
-HSPLcom/android/server/appop/AppOpsService$AttributedOp;->finished(Landroid/os/IBinder;)V
+HSPLcom/android/server/appop/AppOpsService$AttributedOp;->finished(Landroid/os/IBinder;)V+]Lcom/android/server/appop/AppOpsService$AttributedOp;Lcom/android/server/appop/AppOpsService$AttributedOp;
 HSPLcom/android/server/appop/AppOpsService$AttributedOp;->finished(Landroid/os/IBinder;Z)V+]Lcom/android/server/appop/AppOpsService$AttributedOp;Lcom/android/server/appop/AppOpsService$AttributedOp;
+PLcom/android/server/appop/AppOpsService$AttributedOp;->hasAnyTime()Z
 HSPLcom/android/server/appop/AppOpsService$AttributedOp;->isPaused()Z
 HSPLcom/android/server/appop/AppOpsService$AttributedOp;->isRunning()Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 PLcom/android/server/appop/AppOpsService$AttributedOp;->lambda$startedOrPaused$0(Lcom/android/server/appop/AppOpsService$AttributedOp;Landroid/os/IBinder;)V
-PLcom/android/server/appop/AppOpsService$AttributedOp;->onClientDeath(Landroid/os/IBinder;)V
+HPLcom/android/server/appop/AppOpsService$AttributedOp;->onClientDeath(Landroid/os/IBinder;)V
 HSPLcom/android/server/appop/AppOpsService$AttributedOp;->onUidStateChanged(I)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/appop/AppOpsService$AttributedOp;Lcom/android/server/appop/AppOpsService$AttributedOp;]Lcom/android/server/appop/AppOpsService$InProgressStartOpEvent;Lcom/android/server/appop/AppOpsService$InProgressStartOpEvent;]Landroid/app/AppOpsManager$OpEventProxyInfo;Landroid/app/AppOpsManager$OpEventProxyInfo;
 PLcom/android/server/appop/AppOpsService$AttributedOp;->pause()V
 HSPLcom/android/server/appop/AppOpsService$AttributedOp;->rejected(II)V
@@ -11041,7 +11550,7 @@
 HSPLcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;->-$$Nest$fgetmCheckOpsDelegate(Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;)Landroid/app/AppOpsManagerInternal$CheckOpsDelegate;
 PLcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;->-$$Nest$fgetmPolicy(Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;)Landroid/app/AppOpsManagerInternal$CheckOpsDelegate;
 HSPLcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;-><init>(Lcom/android/server/appop/AppOpsService;Landroid/app/AppOpsManagerInternal$CheckOpsDelegate;Landroid/app/AppOpsManagerInternal$CheckOpsDelegate;)V
-HPLcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;->checkAudioOperation(IIILjava/lang/String;)I+]Landroid/app/AppOpsManagerInternal$CheckOpsDelegate;Lcom/android/server/policy/AppOpsPolicy;
+HSPLcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;->checkAudioOperation(IIILjava/lang/String;)I+]Landroid/app/AppOpsManagerInternal$CheckOpsDelegate;Lcom/android/server/policy/AppOpsPolicy;
 PLcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;->checkDelegateOperationImpl(IILjava/lang/String;Ljava/lang/String;Z)I
 HSPLcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;->checkOperation(IILjava/lang/String;Ljava/lang/String;Z)I+]Landroid/app/AppOpsManagerInternal$CheckOpsDelegate;Lcom/android/server/policy/AppOpsPolicy;
 HSPLcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;->finishOperation(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;)V+]Landroid/app/AppOpsManagerInternal$CheckOpsDelegate;Lcom/android/server/policy/AppOpsPolicy;
@@ -11083,7 +11592,7 @@
 PLcom/android/server/appop/AppOpsService$InProgressStartOpEvent;->-$$Nest$fputmStartTime(Lcom/android/server/appop/AppOpsService$InProgressStartOpEvent;J)V
 HSPLcom/android/server/appop/AppOpsService$InProgressStartOpEvent;-><init>(JJLandroid/os/IBinder;Ljava/lang/String;Ljava/lang/Runnable;ILandroid/app/AppOpsManager$OpEventProxyInfo;III)V
 HSPLcom/android/server/appop/AppOpsService$InProgressStartOpEvent;-><init>(JJLandroid/os/IBinder;Ljava/lang/String;Ljava/lang/Runnable;ILandroid/app/AppOpsManager$OpEventProxyInfo;IIILcom/android/server/appop/AppOpsService$InProgressStartOpEvent-IA;)V
-PLcom/android/server/appop/AppOpsService$InProgressStartOpEvent;->binderDied()V
+HPLcom/android/server/appop/AppOpsService$InProgressStartOpEvent;->binderDied()V
 HSPLcom/android/server/appop/AppOpsService$InProgressStartOpEvent;->finish()V+]Landroid/os/IBinder;Landroid/os/BinderProxy;,Landroid/os/Binder;
 HSPLcom/android/server/appop/AppOpsService$InProgressStartOpEvent;->getAttributionChainId()I
 HSPLcom/android/server/appop/AppOpsService$InProgressStartOpEvent;->getAttributionFlags()I
@@ -11093,16 +11602,17 @@
 HSPLcom/android/server/appop/AppOpsService$InProgressStartOpEvent;->getStartElapsedTime()J
 HSPLcom/android/server/appop/AppOpsService$InProgressStartOpEvent;->getStartTime()J
 HSPLcom/android/server/appop/AppOpsService$InProgressStartOpEvent;->getUidState()I
-HSPLcom/android/server/appop/AppOpsService$InProgressStartOpEvent;->reinit(JJLandroid/os/IBinder;Ljava/lang/String;Ljava/lang/Runnable;IILandroid/app/AppOpsManager$OpEventProxyInfo;IILandroid/util/Pools$Pool;)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;,Landroid/os/Binder;
+HSPLcom/android/server/appop/AppOpsService$InProgressStartOpEvent;->reinit(JJLandroid/os/IBinder;Ljava/lang/String;Ljava/lang/Runnable;IILandroid/app/AppOpsManager$OpEventProxyInfo;IILandroid/util/Pools$Pool;)V+]Landroid/os/IBinder;Landroid/os/BinderProxy;,Landroid/os/Binder;]Landroid/util/Pools$Pool;Lcom/android/server/appop/AppOpsService$OpEventProxyInfoPool;
 HSPLcom/android/server/appop/AppOpsService$InProgressStartOpEventPool;-><init>(Lcom/android/server/appop/AppOpsService;)V
 HSPLcom/android/server/appop/AppOpsService$InProgressStartOpEventPool;->acquire(JJLandroid/os/IBinder;Ljava/lang/String;Ljava/lang/Runnable;ILjava/lang/String;Ljava/lang/String;IIII)Lcom/android/server/appop/AppOpsService$InProgressStartOpEvent;+]Lcom/android/server/appop/AppOpsService$OpEventProxyInfoPool;Lcom/android/server/appop/AppOpsService$OpEventProxyInfoPool;]Landroid/util/Pools$SimplePool;Lcom/android/server/appop/AppOpsService$InProgressStartOpEventPool;]Lcom/android/server/appop/AppOpsService$InProgressStartOpEvent;Lcom/android/server/appop/AppOpsService$InProgressStartOpEvent;
 HSPLcom/android/server/appop/AppOpsService$ModeCallback;-><init>(Lcom/android/server/appop/AppOpsService;Lcom/android/internal/app/IAppOpsCallback;IIIII)V
-PLcom/android/server/appop/AppOpsService$ModeCallback;->binderDied()V
+HPLcom/android/server/appop/AppOpsService$ModeCallback;->binderDied()V
+PLcom/android/server/appop/AppOpsService$ModeCallback;->isWatchingUid(I)Z
 HPLcom/android/server/appop/AppOpsService$ModeCallback;->toString()Ljava/lang/String;
 PLcom/android/server/appop/AppOpsService$ModeCallback;->unlinkToDeath()V
 HSPLcom/android/server/appop/AppOpsService$NotedCallback;-><init>(Lcom/android/server/appop/AppOpsService;Lcom/android/internal/app/IAppOpsNotedCallback;III)V
 PLcom/android/server/appop/AppOpsService$NotedCallback;->binderDied()V
-PLcom/android/server/appop/AppOpsService$NotedCallback;->destroy()V
+HPLcom/android/server/appop/AppOpsService$NotedCallback;->destroy()V
 PLcom/android/server/appop/AppOpsService$NotedCallback;->toString()Ljava/lang/String;
 HSPLcom/android/server/appop/AppOpsService$Op;->-$$Nest$fgetmode(Lcom/android/server/appop/AppOpsService$Op;)I
 HSPLcom/android/server/appop/AppOpsService$Op;->-$$Nest$fputmode(Lcom/android/server/appop/AppOpsService$Op;I)V
@@ -11123,7 +11633,7 @@
 PLcom/android/server/appop/AppOpsService$Shell;->onCommand(Ljava/lang/String;)I
 HSPLcom/android/server/appop/AppOpsService$StartedCallback;-><init>(Lcom/android/server/appop/AppOpsService;Lcom/android/internal/app/IAppOpsStartedCallback;III)V
 PLcom/android/server/appop/AppOpsService$StartedCallback;->binderDied()V
-PLcom/android/server/appop/AppOpsService$StartedCallback;->destroy()V
+HPLcom/android/server/appop/AppOpsService$StartedCallback;->destroy()V
 PLcom/android/server/appop/AppOpsService$StartedCallback;->toString()Ljava/lang/String;
 HSPLcom/android/server/appop/AppOpsService$UidState;-><init>(Lcom/android/server/appop/AppOpsService;I)V
 HSPLcom/android/server/appop/AppOpsService$UidState;->clear()V
@@ -11135,14 +11645,14 @@
 PLcom/android/server/appop/AppOpsService;->$r8$lambda$CkC7NFGAXqPtWmw4hPZid_o7wF8(Lcom/android/server/appop/AppOpsService;)Ljava/util/List;
 HSPLcom/android/server/appop/AppOpsService;->$r8$lambda$GbnVL7FStoP-5ugbMrKPtxPc-7Q(Lcom/android/server/appop/AppOpsService;IIZLcom/android/internal/app/IAppOpsCallback;)V
 HPLcom/android/server/appop/AppOpsService;->$r8$lambda$LRr7STrkYtPwp1nW5np6fZk1AUQ(Landroid/app/AsyncNotedAppOp;[ZILjava/lang/String;ILjava/lang/String;Lcom/android/internal/app/IAppOpsAsyncNotedCallback;)V
-PLcom/android/server/appop/AppOpsService;->$r8$lambda$PKLfueNQM1N0Jpnmxcaqqma0eNY(Lcom/android/server/appop/AppOpsService;Landroid/util/ArraySet;IILjava/lang/String;)V
+HSPLcom/android/server/appop/AppOpsService;->$r8$lambda$PKLfueNQM1N0Jpnmxcaqqma0eNY(Lcom/android/server/appop/AppOpsService;Landroid/util/ArraySet;IILjava/lang/String;)V
 HSPLcom/android/server/appop/AppOpsService;->$r8$lambda$PZVYmZF9I2wMooN5sdolUJHCO-4(Lcom/android/server/appop/AppOpsService;Ljava/lang/String;Ljava/lang/String;I)V
 HSPLcom/android/server/appop/AppOpsService;->$r8$lambda$UhW7SeBkHHHfuwTQAOdyrxrpRvA(Lcom/android/server/appop/AppOpsService;II)V
 HSPLcom/android/server/appop/AppOpsService;->$r8$lambda$Zyngadgl87QMxYI929vq0ZyGXcM(Lcom/android/server/appop/AppOpsService;IZI)V
-HSPLcom/android/server/appop/AppOpsService;->$r8$lambda$cQF62lZT2B382dOHCevnBWdZGys(Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService$ModeCallback;IILjava/lang/String;)V
+HSPLcom/android/server/appop/AppOpsService;->$r8$lambda$cQF62lZT2B382dOHCevnBWdZGys(Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService$ModeCallback;IILjava/lang/String;)V+]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 HPLcom/android/server/appop/AppOpsService;->$r8$lambda$ueiy_QOdjs5waSxjG-x7aX5-gP4(Lcom/android/server/appop/AppOpsService;Landroid/util/ArraySet;IILjava/lang/String;Ljava/lang/String;ZII)V
 PLcom/android/server/appop/AppOpsService;->$r8$lambda$y2H8_9L2D3J-gli7MqsLRngTgtU(Lcom/android/server/appop/AppOpsService;Landroid/util/ArraySet;IILjava/lang/String;Ljava/lang/String;IIIII)V
-HPLcom/android/server/appop/AppOpsService;->$r8$lambda$zNYjiRegD7DR2rGVXmVvy9TP0eI(Lcom/android/server/appop/AppOpsService;JI)V
+HSPLcom/android/server/appop/AppOpsService;->$r8$lambda$zNYjiRegD7DR2rGVXmVvy9TP0eI(Lcom/android/server/appop/AppOpsService;JI)V
 HPLcom/android/server/appop/AppOpsService;->-$$Nest$fgetmActivityManagerInternal(Lcom/android/server/appop/AppOpsService;)Landroid/app/ActivityManagerInternal;
 PLcom/android/server/appop/AppOpsService;->-$$Nest$fgetmAsyncOpWatchers(Lcom/android/server/appop/AppOpsService;)Landroid/util/ArrayMap;
 HSPLcom/android/server/appop/AppOpsService;->-$$Nest$fgetmInProgressStartOpEventPool(Lcom/android/server/appop/AppOpsService;)Lcom/android/server/appop/AppOpsService$InProgressStartOpEventPool;
@@ -11150,7 +11660,7 @@
 HSPLcom/android/server/appop/AppOpsService;->-$$Nest$fgetmOpGlobalRestrictions(Lcom/android/server/appop/AppOpsService;)Landroid/util/ArrayMap;
 PLcom/android/server/appop/AppOpsService;->-$$Nest$fgetmRarelyUsedPackages(Lcom/android/server/appop/AppOpsService;)Landroid/util/ArraySet;
 PLcom/android/server/appop/AppOpsService;->-$$Nest$fputmRarelyUsedPackages(Lcom/android/server/appop/AppOpsService;Landroid/util/ArraySet;)V
-HPLcom/android/server/appop/AppOpsService;->-$$Nest$mcheckAudioOperationImpl(Lcom/android/server/appop/AppOpsService;IIILjava/lang/String;)I
+HSPLcom/android/server/appop/AppOpsService;->-$$Nest$mcheckAudioOperationImpl(Lcom/android/server/appop/AppOpsService;IIILjava/lang/String;)I
 HSPLcom/android/server/appop/AppOpsService;->-$$Nest$mcheckOperationImpl(Lcom/android/server/appop/AppOpsService;IILjava/lang/String;Ljava/lang/String;Z)I+]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 HSPLcom/android/server/appop/AppOpsService;->-$$Nest$mfinishOperationImpl(Lcom/android/server/appop/AppOpsService;Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;)V+]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 PLcom/android/server/appop/AppOpsService;->-$$Nest$mfinishProxyOperationImpl(Lcom/android/server/appop/AppOpsService;ILandroid/content/AttributionSource;Z)Ljava/lang/Void;
@@ -11161,31 +11671,31 @@
 HSPLcom/android/server/appop/AppOpsService;->-$$Nest$mnoteOperationImpl(Lcom/android/server/appop/AppOpsService;IILjava/lang/String;Ljava/lang/String;ZLjava/lang/String;Z)Landroid/app/SyncNotedAppOp;
 HPLcom/android/server/appop/AppOpsService;->-$$Nest$mnoteProxyOperationImpl(Lcom/android/server/appop/AppOpsService;ILandroid/content/AttributionSource;ZLjava/lang/String;ZZ)Landroid/app/SyncNotedAppOp;
 PLcom/android/server/appop/AppOpsService;->-$$Nest$mnotifyOpChanged(Lcom/android/server/appop/AppOpsService;Landroid/util/ArraySet;IILjava/lang/String;)V
-PLcom/android/server/appop/AppOpsService;->-$$Nest$mnotifyWatchersOfChange(Lcom/android/server/appop/AppOpsService;II)V
+HSPLcom/android/server/appop/AppOpsService;->-$$Nest$mnotifyWatchersOfChange(Lcom/android/server/appop/AppOpsService;II)V
 HSPLcom/android/server/appop/AppOpsService;->-$$Nest$mscheduleFastWriteLocked(Lcom/android/server/appop/AppOpsService;)V
 HSPLcom/android/server/appop/AppOpsService;->-$$Nest$mscheduleOpActiveChangedIfNeededLocked(Lcom/android/server/appop/AppOpsService;IILjava/lang/String;Ljava/lang/String;ZII)V+]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 PLcom/android/server/appop/AppOpsService;->-$$Nest$mscheduleOpStartedIfNeededLocked(Lcom/android/server/appop/AppOpsService;IILjava/lang/String;Ljava/lang/String;IIIII)V
-PLcom/android/server/appop/AppOpsService;->-$$Nest$msetMode(Lcom/android/server/appop/AppOpsService;IILjava/lang/String;ILcom/android/internal/app/IAppOpsCallback;)V
+HSPLcom/android/server/appop/AppOpsService;->-$$Nest$msetMode(Lcom/android/server/appop/AppOpsService;IILjava/lang/String;ILcom/android/internal/app/IAppOpsCallback;)V
 HSPLcom/android/server/appop/AppOpsService;->-$$Nest$msetUidMode(Lcom/android/server/appop/AppOpsService;IIILcom/android/internal/app/IAppOpsCallback;)V
 HSPLcom/android/server/appop/AppOpsService;->-$$Nest$mstartOperationImpl(Lcom/android/server/appop/AppOpsService;Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;ZZLjava/lang/String;ZII)Landroid/app/SyncNotedAppOp;+]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 PLcom/android/server/appop/AppOpsService;->-$$Nest$mstartProxyOperationImpl(Lcom/android/server/appop/AppOpsService;ILandroid/content/AttributionSource;ZZLjava/lang/String;ZZIII)Landroid/app/SyncNotedAppOp;
 PLcom/android/server/appop/AppOpsService;->-$$Nest$mupdateAppWidgetVisibility(Lcom/android/server/appop/AppOpsService;Landroid/util/SparseArray;Z)V
-PLcom/android/server/appop/AppOpsService;->-$$Nest$mupdateStartedOpModeForUser(Lcom/android/server/appop/AppOpsService;IZI)V
+HSPLcom/android/server/appop/AppOpsService;->-$$Nest$mupdateStartedOpModeForUser(Lcom/android/server/appop/AppOpsService;IZI)V
 PLcom/android/server/appop/AppOpsService;->-$$Nest$sfgetOPS_RESTRICTED_ON_SUSPEND()[I
 PLcom/android/server/appop/AppOpsService;->-$$Nest$smonClientDeath(Lcom/android/server/appop/AppOpsService$AttributedOp;Landroid/os/IBinder;)V
 HSPLcom/android/server/appop/AppOpsService;-><clinit>()V
 HSPLcom/android/server/appop/AppOpsService;-><init>(Ljava/io/File;Landroid/os/Handler;Landroid/content/Context;)V
 PLcom/android/server/appop/AppOpsService;->addCallbacks(Ljava/util/HashMap;IILjava/lang/String;ILandroid/util/ArraySet;)Ljava/util/HashMap;
 PLcom/android/server/appop/AppOpsService;->addChange(Ljava/util/ArrayList;IILjava/lang/String;I)Ljava/util/ArrayList;
-HPLcom/android/server/appop/AppOpsService;->checkAudioOperation(IIILjava/lang/String;)I+]Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;
-HPLcom/android/server/appop/AppOpsService;->checkAudioOperationImpl(IIILjava/lang/String;)I+]Lcom/android/server/appop/AudioRestrictionManager;Lcom/android/server/appop/AudioRestrictionManager;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
+HSPLcom/android/server/appop/AppOpsService;->checkAudioOperation(IIILjava/lang/String;)I+]Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;
+HSPLcom/android/server/appop/AppOpsService;->checkAudioOperationImpl(IIILjava/lang/String;)I+]Lcom/android/server/appop/AudioRestrictionManager;Lcom/android/server/appop/AudioRestrictionManager;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 HSPLcom/android/server/appop/AppOpsService;->checkOperation(IILjava/lang/String;)I+]Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;
 HSPLcom/android/server/appop/AppOpsService;->checkOperationImpl(IILjava/lang/String;Ljava/lang/String;Z)I+]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 HSPLcom/android/server/appop/AppOpsService;->checkOperationRaw(IILjava/lang/String;Ljava/lang/String;)I+]Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;
 HSPLcom/android/server/appop/AppOpsService;->checkOperationUnchecked(IILjava/lang/String;Ljava/lang/String;Z)I+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/appop/AppOpsService$Op;Lcom/android/server/appop/AppOpsService$Op;]Lcom/android/server/appop/AppOpsService$UidState;Lcom/android/server/appop/AppOpsService$UidState;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 HSPLcom/android/server/appop/AppOpsService;->checkPackage(ILjava/lang/String;)I+]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
-PLcom/android/server/appop/AppOpsService;->checkSystemUid(Ljava/lang/String;)V
-HPLcom/android/server/appop/AppOpsService;->collectAsyncNotedOp(ILjava/lang/String;ILjava/lang/String;ILjava/lang/String;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/os/RemoteCallbackList;Lcom/android/server/appop/AppOpsService$7;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
+HSPLcom/android/server/appop/AppOpsService;->checkSystemUid(Ljava/lang/String;)V
+HSPLcom/android/server/appop/AppOpsService;->collectAsyncNotedOp(ILjava/lang/String;ILjava/lang/String;ILjava/lang/String;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/os/RemoteCallbackList;Lcom/android/server/appop/AppOpsService$7;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 HSPLcom/android/server/appop/AppOpsService;->collectOps(Lcom/android/server/appop/AppOpsService$Ops;[I)Ljava/util/ArrayList;+]Landroid/util/SparseArray;Lcom/android/server/appop/AppOpsService$Ops;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/appop/AppOpsService;->collectRuntimeAppOpAccessMessage()Landroid/app/RuntimeAppOpAccessMessage;
 HSPLcom/android/server/appop/AppOpsService;->commitUidPendingStateLocked(Lcom/android/server/appop/AppOpsService$UidState;)V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
@@ -11202,9 +11712,9 @@
 HSPLcom/android/server/appop/AppOpsService;->finishOperationImpl(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;)V+]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 HSPLcom/android/server/appop/AppOpsService;->finishOperationUnchecked(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/appop/AppOpsService$AttributedOp;Lcom/android/server/appop/AppOpsService$AttributedOp;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 PLcom/android/server/appop/AppOpsService;->finishProxyOperation(ILandroid/content/AttributionSource;Z)V
-PLcom/android/server/appop/AppOpsService;->finishProxyOperationImpl(ILandroid/content/AttributionSource;Z)Ljava/lang/Void;
+HPLcom/android/server/appop/AppOpsService;->finishProxyOperationImpl(ILandroid/content/AttributionSource;Z)Ljava/lang/Void;
 PLcom/android/server/appop/AppOpsService;->getAppOpsServiceDelegate()Landroid/app/AppOpsManagerInternal$CheckOpsDelegate;
-HPLcom/android/server/appop/AppOpsService;->getAsyncNotedOpsKey(Ljava/lang/String;I)Landroid/util/Pair;
+HSPLcom/android/server/appop/AppOpsService;->getAsyncNotedOpsKey(Ljava/lang/String;I)Landroid/util/Pair;
 HSPLcom/android/server/appop/AppOpsService;->getBypassforPackage(Lcom/android/server/pm/parsing/pkg/AndroidPackage;)Landroid/app/AppOpsManager$RestrictionBypass;+]Lcom/android/server/pm/pkg/AndroidPackageApi;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/Context;Landroid/app/ContextImpl;
 HPLcom/android/server/appop/AppOpsService;->getHistoricalOps(ILjava/lang/String;Ljava/lang/String;Ljava/util/List;IIJJILandroid/os/RemoteCallback;)V
 HSPLcom/android/server/appop/AppOpsService;->getOpEntryForResult(Lcom/android/server/appop/AppOpsService$Op;J)Landroid/app/AppOpsManager$OpEntry;
@@ -11220,7 +11730,7 @@
 PLcom/android/server/appop/AppOpsService;->getRuntimeAppOpsList()Ljava/util/List;
 HSPLcom/android/server/appop/AppOpsService;->getUidStateLocked(IZ)Lcom/android/server/appop/AppOpsService$UidState;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 PLcom/android/server/appop/AppOpsService;->initializeRarelyUsedPackagesList(Landroid/util/ArraySet;)V
-HSPLcom/android/server/appop/AppOpsService;->isAttributionInPackage(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Ljava/lang/String;)Z+]Lcom/android/server/pm/pkg/component/ParsedAttribution;Lcom/android/server/pm/pkg/component/ParsedAttributionImpl;]Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/List;Ljava/util/ArrayList;,Ljava/util/Collections$EmptyList;
+HSPLcom/android/server/appop/AppOpsService;->isAttributionInPackage(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Ljava/lang/String;)Z+]Lcom/android/server/pm/pkg/component/ParsedAttribution;Lcom/android/server/pm/pkg/component/ParsedAttributionImpl;]Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;
 HPLcom/android/server/appop/AppOpsService;->isCallerAndAttributionTrusted(Landroid/content/AttributionSource;)Z
 HSPLcom/android/server/appop/AppOpsService;->isOpRestrictedDueToSuspend(ILjava/lang/String;I)Z+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/appop/AppOpsService;->isOpRestrictedLocked(IILjava/lang/String;Ljava/lang/String;Landroid/app/AppOpsManager$RestrictionBypass;Z)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/appop/AppOpsService$ClientUserRestrictionState;Lcom/android/server/appop/AppOpsService$ClientUserRestrictionState;]Lcom/android/server/appop/AppOpsService$ClientGlobalRestrictionState;Lcom/android/server/appop/AppOpsService$ClientGlobalRestrictionState;
@@ -11234,9 +11744,9 @@
 HSPLcom/android/server/appop/AppOpsService;->noteOperationUnchecked(IILjava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;IZLjava/lang/String;Z)Landroid/app/SyncNotedAppOp;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/appop/AppOpsService$Op;Lcom/android/server/appop/AppOpsService$Op;]Lcom/android/server/appop/AppOpsService$AttributedOp;Lcom/android/server/appop/AppOpsService$AttributedOp;]Lcom/android/server/appop/AppOpsService$InProgressStartOpEvent;Lcom/android/server/appop/AppOpsService$InProgressStartOpEvent;]Lcom/android/server/appop/AppOpsService$UidState;Lcom/android/server/appop/AppOpsService$UidState;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 HPLcom/android/server/appop/AppOpsService;->noteProxyOperation(ILandroid/content/AttributionSource;ZLjava/lang/String;ZZ)Landroid/app/SyncNotedAppOp;+]Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher;
 HPLcom/android/server/appop/AppOpsService;->noteProxyOperationImpl(ILandroid/content/AttributionSource;ZLjava/lang/String;ZZ)Landroid/app/SyncNotedAppOp;+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/app/SyncNotedAppOp;Landroid/app/SyncNotedAppOp;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
-HPLcom/android/server/appop/AppOpsService;->notifyOpActiveChanged(Landroid/util/ArraySet;IILjava/lang/String;Ljava/lang/String;ZII)V
-HPLcom/android/server/appop/AppOpsService;->notifyOpChanged(Landroid/util/ArraySet;IILjava/lang/String;)V
-HSPLcom/android/server/appop/AppOpsService;->notifyOpChanged(Lcom/android/server/appop/AppOpsService$ModeCallback;IILjava/lang/String;)V+]Lcom/android/internal/app/IAppOpsCallback;Landroid/app/AppOpsManager$2;,Lcom/android/internal/app/IAppOpsCallback$Stub$Proxy;,Lcom/android/server/policy/PermissionPolicyService$2;,Lcom/android/server/am/AppPermissionTracker$MyAppOpsCallback;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HPLcom/android/server/appop/AppOpsService;->notifyOpActiveChanged(Landroid/util/ArraySet;IILjava/lang/String;Ljava/lang/String;ZII)V+]Lcom/android/internal/app/IAppOpsActiveCallback;Lcom/android/server/am/ActivityManagerService$5;,Lcom/android/internal/app/IAppOpsActiveCallback$Stub$Proxy;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
+HSPLcom/android/server/appop/AppOpsService;->notifyOpChanged(Landroid/util/ArraySet;IILjava/lang/String;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
+HSPLcom/android/server/appop/AppOpsService;->notifyOpChanged(Lcom/android/server/appop/AppOpsService$ModeCallback;IILjava/lang/String;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/app/IAppOpsCallback;Landroid/app/AppOpsManager$2;,Lcom/android/internal/app/IAppOpsCallback$Stub$Proxy;,Lcom/android/server/policy/PermissionPolicyService$2;,Lcom/android/server/am/AppPermissionTracker$MyAppOpsCallback;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 HSPLcom/android/server/appop/AppOpsService;->notifyOpChangedForAllPkgsInUid(IIZLcom/android/internal/app/IAppOpsCallback;)V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/internal/app/IAppOpsCallback;Lcom/android/server/policy/PermissionPolicyService$2;
 HSPLcom/android/server/appop/AppOpsService;->notifyOpChangedSync(IILjava/lang/String;II)V
 HSPLcom/android/server/appop/AppOpsService;->notifyOpChecked(Landroid/util/ArraySet;IILjava/lang/String;Ljava/lang/String;II)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;]Lcom/android/internal/app/IAppOpsNotedCallback;Landroid/app/AppOpsManager$5;,Lcom/android/internal/app/IAppOpsNotedCallback$Stub$Proxy;
@@ -11245,7 +11755,7 @@
 PLcom/android/server/appop/AppOpsService;->onClientDeath(Lcom/android/server/appop/AppOpsService$AttributedOp;Landroid/os/IBinder;)V
 PLcom/android/server/appop/AppOpsService;->onShellCommand(Lcom/android/server/appop/AppOpsService$Shell;Ljava/lang/String;)I
 PLcom/android/server/appop/AppOpsService;->onShellCommand(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;Landroid/os/ShellCallback;Landroid/os/ResultReceiver;)V
-PLcom/android/server/appop/AppOpsService;->packageRemoved(ILjava/lang/String;)V
+HPLcom/android/server/appop/AppOpsService;->packageRemoved(ILjava/lang/String;)V
 HSPLcom/android/server/appop/AppOpsService;->permissionToOpCode(Ljava/lang/String;)I
 PLcom/android/server/appop/AppOpsService;->pruneOpLocked(Lcom/android/server/appop/AppOpsService$Op;ILjava/lang/String;)V
 HSPLcom/android/server/appop/AppOpsService;->publish()V
@@ -11257,8 +11767,8 @@
 HSPLcom/android/server/appop/AppOpsService;->readUidOps(Landroid/util/TypedXmlPullParser;)V
 PLcom/android/server/appop/AppOpsService;->removeUidsForUserLocked(I)V
 PLcom/android/server/appop/AppOpsService;->removeUser(I)V
-HSPLcom/android/server/appop/AppOpsService;->reportRuntimeAppOpAccessMessageAndGetConfig(Ljava/lang/String;Landroid/app/SyncNotedAppOp;Ljava/lang/String;)Lcom/android/internal/app/MessageSamplingConfig;
-HPLcom/android/server/appop/AppOpsService;->reportRuntimeAppOpAccessMessageAsyncLocked(ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/appop/AppOpsService;->reportRuntimeAppOpAccessMessageAndGetConfig(Ljava/lang/String;Landroid/app/SyncNotedAppOp;Ljava/lang/String;)Lcom/android/internal/app/MessageSamplingConfig;+]Ljava/time/Instant;Ljava/time/Instant;]Landroid/app/SyncNotedAppOp;Landroid/app/SyncNotedAppOp;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
+HSPLcom/android/server/appop/AppOpsService;->reportRuntimeAppOpAccessMessageAsyncLocked(ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/appop/AppOpsService;->reportRuntimeAppOpAccessMessageInternalLocked(ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;)V+]Ljava/util/concurrent/ThreadLocalRandom;Ljava/util/concurrent/ThreadLocalRandom;
 HSPLcom/android/server/appop/AppOpsService;->resampleAppOpForPackageLocked(Ljava/lang/String;Z)V
 PLcom/android/server/appop/AppOpsService;->resamplePackageAndAppOpLocked(Ljava/util/List;)V
@@ -11268,18 +11778,18 @@
 HSPLcom/android/server/appop/AppOpsService;->scheduleOpActiveChangedIfNeededLocked(IILjava/lang/String;Ljava/lang/String;ZII)V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/appop/AppOpsService;->scheduleOpNotedIfNeededLocked(IILjava/lang/String;Ljava/lang/String;II)V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/appop/AppOpsService;->scheduleOpStartedIfNeededLocked(IILjava/lang/String;Ljava/lang/String;IIIII)V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;
-HSPLcom/android/server/appop/AppOpsService;->scheduleWriteLocked()V
+HSPLcom/android/server/appop/AppOpsService;->scheduleWriteLocked()V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;
 HSPLcom/android/server/appop/AppOpsService;->setAppOpsPolicy(Landroid/app/AppOpsManagerInternal$CheckOpsDelegate;)V
 PLcom/android/server/appop/AppOpsService;->setAppOpsServiceDelegate(Landroid/app/AppOpsManagerInternal$CheckOpsDelegate;)V
 HSPLcom/android/server/appop/AppOpsService;->setAudioRestriction(IIII[Ljava/lang/String;)V
 HSPLcom/android/server/appop/AppOpsService;->setCameraAudioRestriction(I)V
-PLcom/android/server/appop/AppOpsService;->setMode(IILjava/lang/String;I)V
-HPLcom/android/server/appop/AppOpsService;->setMode(IILjava/lang/String;ILcom/android/internal/app/IAppOpsCallback;)V
+HSPLcom/android/server/appop/AppOpsService;->setMode(IILjava/lang/String;I)V
+HSPLcom/android/server/appop/AppOpsService;->setMode(IILjava/lang/String;ILcom/android/internal/app/IAppOpsCallback;)V
 HSPLcom/android/server/appop/AppOpsService;->setUidMode(III)V+]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 HSPLcom/android/server/appop/AppOpsService;->setUidMode(IIILcom/android/internal/app/IAppOpsCallback;)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/appop/AppOpsService$UidState;Lcom/android/server/appop/AppOpsService$UidState;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 HSPLcom/android/server/appop/AppOpsService;->setUserRestriction(IZLandroid/os/IBinder;ILandroid/os/PackageTagsList;)V
 HSPLcom/android/server/appop/AppOpsService;->setUserRestrictionNoCheck(IZLandroid/os/IBinder;ILandroid/os/PackageTagsList;)V
-PLcom/android/server/appop/AppOpsService;->setUserRestrictions(Landroid/os/Bundle;Landroid/os/IBinder;I)V
+HSPLcom/android/server/appop/AppOpsService;->setUserRestrictions(Landroid/os/Bundle;Landroid/os/IBinder;I)V
 HSPLcom/android/server/appop/AppOpsService;->shouldCollectNotes(I)Z
 PLcom/android/server/appop/AppOpsService;->shouldDeferResetOpToDpm(I)Z
 HSPLcom/android/server/appop/AppOpsService;->shouldIgnoreCallback(III)Z
@@ -11289,7 +11799,7 @@
 HSPLcom/android/server/appop/AppOpsService;->startOperationImpl(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;ZZLjava/lang/String;ZII)Landroid/app/SyncNotedAppOp;+]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 HSPLcom/android/server/appop/AppOpsService;->startOperationUnchecked(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;IZZLjava/lang/String;ZIIZ)Landroid/app/SyncNotedAppOp;+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/appop/AppOpsService$Op;Lcom/android/server/appop/AppOpsService$Op;]Lcom/android/server/appop/AppOpsService$AttributedOp;Lcom/android/server/appop/AppOpsService$AttributedOp;]Lcom/android/server/appop/AppOpsService$UidState;Lcom/android/server/appop/AppOpsService$UidState;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 PLcom/android/server/appop/AppOpsService;->startProxyOperation(ILandroid/content/AttributionSource;ZZLjava/lang/String;ZZIII)Landroid/app/SyncNotedAppOp;
-PLcom/android/server/appop/AppOpsService;->startProxyOperationImpl(ILandroid/content/AttributionSource;ZZLjava/lang/String;ZZIII)Landroid/app/SyncNotedAppOp;
+HPLcom/android/server/appop/AppOpsService;->startProxyOperationImpl(ILandroid/content/AttributionSource;ZZLjava/lang/String;ZZIII)Landroid/app/SyncNotedAppOp;
 HSPLcom/android/server/appop/AppOpsService;->startWatchingActive([ILcom/android/internal/app/IAppOpsActiveCallback;)V
 HPLcom/android/server/appop/AppOpsService;->startWatchingAsyncNoted(Ljava/lang/String;Lcom/android/internal/app/IAppOpsAsyncNotedCallback;)V
 HSPLcom/android/server/appop/AppOpsService;->startWatchingMode(ILjava/lang/String;Lcom/android/internal/app/IAppOpsCallback;)V
@@ -11304,7 +11814,7 @@
 HSPLcom/android/server/appop/AppOpsService;->systemReady()V
 PLcom/android/server/appop/AppOpsService;->uidRemoved(I)V
 HPLcom/android/server/appop/AppOpsService;->updateAppWidgetVisibility(Landroid/util/SparseArray;Z)V
-HPLcom/android/server/appop/AppOpsService;->updatePendingState(JI)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
+HSPLcom/android/server/appop/AppOpsService;->updatePendingState(JI)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 HSPLcom/android/server/appop/AppOpsService;->updatePendingStateIfNeededLocked(Lcom/android/server/appop/AppOpsService$UidState;)V+]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 HSPLcom/android/server/appop/AppOpsService;->updatePermissionRevokedCompat(III)V+]Landroid/content/pm/PermissionInfo;Landroid/content/pm/PermissionInfo;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 HSPLcom/android/server/appop/AppOpsService;->updateStartedOpModeForUidLocked(IZI)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;,Lcom/android/server/appop/AppOpsService$Ops;]Lcom/android/server/appop/AppOpsService$AttributedOp;Lcom/android/server/appop/AppOpsService$AttributedOp;
@@ -11312,8 +11822,8 @@
 HSPLcom/android/server/appop/AppOpsService;->updateUidProcState(III)V+]Landroid/os/Handler;Lcom/android/server/am/ActivityManagerService$MainHandler;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Lcom/android/server/appop/AppOpsService$Ops;]Lcom/android/server/appop/AppOpsService$AttributedOp;Lcom/android/server/appop/AppOpsService$AttributedOp;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 HSPLcom/android/server/appop/AppOpsService;->upgradeLocked(I)V
 HSPLcom/android/server/appop/AppOpsService;->verifyAndGetBypass(ILjava/lang/String;Ljava/lang/String;)Lcom/android/server/appop/AppOpsService$PackageVerificationResult;+]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
-HSPLcom/android/server/appop/AppOpsService;->verifyAndGetBypass(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lcom/android/server/appop/AppOpsService$PackageVerificationResult;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/pm/pkg/AndroidPackageApi;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/internal/compat/IPlatformCompat;Lcom/android/server/compat/PlatformCompat;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
-HSPLcom/android/server/appop/AppOpsService;->verifyIncomingOp(I)V+]Landroid/content/Context;Landroid/app/ContextImpl;
+HSPLcom/android/server/appop/AppOpsService;->verifyAndGetBypass(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lcom/android/server/appop/AppOpsService$PackageVerificationResult;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/pm/pkg/AndroidPackageApi;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/internal/compat/IPlatformCompat;Lcom/android/server/compat/PlatformCompat;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
+HSPLcom/android/server/appop/AppOpsService;->verifyIncomingOp(I)V+]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/appop/AppOpsService;->verifyIncomingPackage(Ljava/lang/String;I)V+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/appop/AppOpsService;Lcom/android/server/appop/AppOpsService;
 HPLcom/android/server/appop/AppOpsService;->verifyIncomingProxyUid(Landroid/content/AttributionSource;)V+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;
 HSPLcom/android/server/appop/AppOpsService;->verifyIncomingUid(I)V+]Landroid/content/Context;Landroid/app/ContextImpl;
@@ -11323,14 +11833,14 @@
 HSPLcom/android/server/appop/AudioRestrictionManager$Restriction;-><init>(Lcom/android/server/appop/AudioRestrictionManager$Restriction-IA;)V
 HSPLcom/android/server/appop/AudioRestrictionManager;-><clinit>()V
 HSPLcom/android/server/appop/AudioRestrictionManager;-><init>()V
-HPLcom/android/server/appop/AudioRestrictionManager;->checkAudioOperation(IIILjava/lang/String;)I+]Lcom/android/server/appop/AudioRestrictionManager;Lcom/android/server/appop/AudioRestrictionManager;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HPLcom/android/server/appop/AudioRestrictionManager;->checkZenModeRestrictionLocked(IIILjava/lang/String;)I+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLcom/android/server/appop/AudioRestrictionManager;->checkAudioOperation(IIILjava/lang/String;)I+]Lcom/android/server/appop/AudioRestrictionManager;Lcom/android/server/appop/AudioRestrictionManager;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/appop/AudioRestrictionManager;->checkZenModeRestrictionLocked(IIILjava/lang/String;)I+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 PLcom/android/server/appop/AudioRestrictionManager;->hasActiveRestrictions()Z
 HSPLcom/android/server/appop/AudioRestrictionManager;->setCameraAudioRestriction(I)V
-HSPLcom/android/server/appop/AudioRestrictionManager;->setZenModeAudioRestriction(IIII[Ljava/lang/String;)V
+HSPLcom/android/server/appop/AudioRestrictionManager;->setZenModeAudioRestriction(IIII[Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/appop/DiscreteRegistry$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/appop/DiscreteRegistry;)V
 PLcom/android/server/appop/DiscreteRegistry$$ExternalSyntheticLambda0;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
-PLcom/android/server/appop/DiscreteRegistry$DiscreteOp$$ExternalSyntheticLambda0;-><init>()V
+HPLcom/android/server/appop/DiscreteRegistry$DiscreteOp$$ExternalSyntheticLambda0;-><init>()V
 HPLcom/android/server/appop/DiscreteRegistry$DiscreteOp$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HPLcom/android/server/appop/DiscreteRegistry$DiscreteOp;->$r8$lambda$VYbETqW-WT_cFnhptZZQXxd7GD8(Lcom/android/server/appop/DiscreteRegistry$DiscreteOpEvent;Lcom/android/server/appop/DiscreteRegistry$DiscreteOpEvent;)I
 PLcom/android/server/appop/DiscreteRegistry$DiscreteOp;->-$$Nest$mapplyToHistory(Lcom/android/server/appop/DiscreteRegistry$DiscreteOp;Landroid/app/AppOpsManager$HistoricalOps;ILjava/lang/String;ILandroid/util/ArrayMap;)V
@@ -11343,7 +11853,7 @@
 HPLcom/android/server/appop/DiscreteRegistry$DiscreteOp;->getOrCreateDiscreteOpEventsList(Ljava/lang/String;)Ljava/util/List;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 PLcom/android/server/appop/DiscreteRegistry$DiscreteOp;->isEmpty()Z
 HPLcom/android/server/appop/DiscreteRegistry$DiscreteOp;->lambda$deserialize$0(Lcom/android/server/appop/DiscreteRegistry$DiscreteOpEvent;Lcom/android/server/appop/DiscreteRegistry$DiscreteOpEvent;)I
-PLcom/android/server/appop/DiscreteRegistry$DiscreteOp;->merge(Lcom/android/server/appop/DiscreteRegistry$DiscreteOp;)V
+HPLcom/android/server/appop/DiscreteRegistry$DiscreteOp;->merge(Lcom/android/server/appop/DiscreteRegistry$DiscreteOp;)V
 HPLcom/android/server/appop/DiscreteRegistry$DiscreteOp;->serialize(Landroid/util/TypedXmlSerializer;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;
 HPLcom/android/server/appop/DiscreteRegistry$DiscreteOpEvent;->-$$Nest$mserialize(Lcom/android/server/appop/DiscreteRegistry$DiscreteOpEvent;Landroid/util/TypedXmlSerializer;)V+]Lcom/android/server/appop/DiscreteRegistry$DiscreteOpEvent;Lcom/android/server/appop/DiscreteRegistry$DiscreteOpEvent;
 HPLcom/android/server/appop/DiscreteRegistry$DiscreteOpEvent;-><init>(Lcom/android/server/appop/DiscreteRegistry;JJIIII)V
@@ -11359,8 +11869,8 @@
 PLcom/android/server/appop/DiscreteRegistry$DiscreteOps;->clearHistory(ILjava/lang/String;)V
 PLcom/android/server/appop/DiscreteRegistry$DiscreteOps;->filter(JJIILjava/lang/String;[Ljava/lang/String;Ljava/lang/String;ILandroid/util/ArrayMap;)V
 HPLcom/android/server/appop/DiscreteRegistry$DiscreteOps;->getOrCreateDiscreteUidOps(I)Lcom/android/server/appop/DiscreteRegistry$DiscreteUidOps;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
-PLcom/android/server/appop/DiscreteRegistry$DiscreteOps;->isEmpty()Z
-PLcom/android/server/appop/DiscreteRegistry$DiscreteOps;->merge(Lcom/android/server/appop/DiscreteRegistry$DiscreteOps;)V
+HPLcom/android/server/appop/DiscreteRegistry$DiscreteOps;->isEmpty()Z
+HPLcom/android/server/appop/DiscreteRegistry$DiscreteOps;->merge(Lcom/android/server/appop/DiscreteRegistry$DiscreteOps;)V
 HPLcom/android/server/appop/DiscreteRegistry$DiscreteOps;->readFromFile(Ljava/io/File;J)V
 HPLcom/android/server/appop/DiscreteRegistry$DiscreteOps;->writeToStream(Ljava/io/FileOutputStream;)V
 PLcom/android/server/appop/DiscreteRegistry$DiscretePackageOps;->-$$Nest$mapplyToHistory(Lcom/android/server/appop/DiscreteRegistry$DiscretePackageOps;Landroid/app/AppOpsManager$HistoricalOps;ILjava/lang/String;Landroid/util/ArrayMap;)V
@@ -11372,7 +11882,7 @@
 PLcom/android/server/appop/DiscreteRegistry$DiscretePackageOps;->filter(JJI[Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;Landroid/util/ArrayMap;)V
 HPLcom/android/server/appop/DiscreteRegistry$DiscretePackageOps;->getOrCreateDiscreteOp(I)Lcom/android/server/appop/DiscreteRegistry$DiscreteOp;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 PLcom/android/server/appop/DiscreteRegistry$DiscretePackageOps;->isEmpty()Z
-PLcom/android/server/appop/DiscreteRegistry$DiscretePackageOps;->merge(Lcom/android/server/appop/DiscreteRegistry$DiscretePackageOps;)V
+HPLcom/android/server/appop/DiscreteRegistry$DiscretePackageOps;->merge(Lcom/android/server/appop/DiscreteRegistry$DiscretePackageOps;)V
 HPLcom/android/server/appop/DiscreteRegistry$DiscretePackageOps;->serialize(Landroid/util/TypedXmlSerializer;)V
 PLcom/android/server/appop/DiscreteRegistry$DiscreteUidOps;->-$$Nest$mapplyToHistory(Lcom/android/server/appop/DiscreteRegistry$DiscreteUidOps;Landroid/app/AppOpsManager$HistoricalOps;ILandroid/util/ArrayMap;)V
 PLcom/android/server/appop/DiscreteRegistry$DiscreteUidOps;->-$$Nest$mclearPackage(Lcom/android/server/appop/DiscreteRegistry$DiscreteUidOps;Ljava/lang/String;)V
@@ -11385,7 +11895,7 @@
 PLcom/android/server/appop/DiscreteRegistry$DiscreteUidOps;->filter(JJILjava/lang/String;[Ljava/lang/String;Ljava/lang/String;IILandroid/util/ArrayMap;)V
 HPLcom/android/server/appop/DiscreteRegistry$DiscreteUidOps;->getOrCreateDiscretePackageOps(Ljava/lang/String;)Lcom/android/server/appop/DiscreteRegistry$DiscretePackageOps;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 PLcom/android/server/appop/DiscreteRegistry$DiscreteUidOps;->isEmpty()Z
-PLcom/android/server/appop/DiscreteRegistry$DiscreteUidOps;->merge(Lcom/android/server/appop/DiscreteRegistry$DiscreteUidOps;)V
+HPLcom/android/server/appop/DiscreteRegistry$DiscreteUidOps;->merge(Lcom/android/server/appop/DiscreteRegistry$DiscreteUidOps;)V
 HPLcom/android/server/appop/DiscreteRegistry$DiscreteUidOps;->serialize(Landroid/util/TypedXmlSerializer;)V
 PLcom/android/server/appop/DiscreteRegistry;->$r8$lambda$SjeSeQ_a7HiztqnB4BFEGNosG2g(Lcom/android/server/appop/DiscreteRegistry;Landroid/provider/DeviceConfig$Properties;)V
 HPLcom/android/server/appop/DiscreteRegistry;->-$$Nest$smdiscretizeDuration(J)J
@@ -11405,12 +11915,12 @@
 HPLcom/android/server/appop/DiscreteRegistry;->discretizeDuration(J)J
 HPLcom/android/server/appop/DiscreteRegistry;->discretizeTimeStamp(J)J
 PLcom/android/server/appop/DiscreteRegistry;->filterEventsList(Ljava/util/List;JJIILjava/lang/String;ILjava/lang/String;Landroid/util/ArrayMap;)Ljava/util/List;
-PLcom/android/server/appop/DiscreteRegistry;->getAllDiscreteOps()Lcom/android/server/appop/DiscreteRegistry$DiscreteOps;
+HPLcom/android/server/appop/DiscreteRegistry;->getAllDiscreteOps()Lcom/android/server/appop/DiscreteRegistry$DiscreteOps;
 HSPLcom/android/server/appop/DiscreteRegistry;->isDiscreteOp(II)Z
 PLcom/android/server/appop/DiscreteRegistry;->lambda$systemReady$0(Landroid/provider/DeviceConfig$Properties;)V
 HSPLcom/android/server/appop/DiscreteRegistry;->parseOpsList(Ljava/lang/String;)[I
 HPLcom/android/server/appop/DiscreteRegistry;->persistDiscreteOpsLocked(Lcom/android/server/appop/DiscreteRegistry$DiscreteOps;)V
-PLcom/android/server/appop/DiscreteRegistry;->readDiscreteOpsFromDisk(Lcom/android/server/appop/DiscreteRegistry$DiscreteOps;)V
+HPLcom/android/server/appop/DiscreteRegistry;->readDiscreteOpsFromDisk(Lcom/android/server/appop/DiscreteRegistry$DiscreteOps;)V
 HSPLcom/android/server/appop/DiscreteRegistry;->readLargestChainIdFromDiskLocked()I
 HSPLcom/android/server/appop/DiscreteRegistry;->recordDiscreteAccess(ILjava/lang/String;ILjava/lang/String;IIJJII)V+]Lcom/android/server/appop/DiscreteRegistry$DiscreteOps;Lcom/android/server/appop/DiscreteRegistry$DiscreteOps;
 HSPLcom/android/server/appop/DiscreteRegistry;->setDiscreteHistoryParameters(Landroid/provider/DeviceConfig$Properties;)V
@@ -11418,14 +11928,14 @@
 HSPLcom/android/server/appop/DiscreteRegistry;->systemReady()V
 HPLcom/android/server/appop/DiscreteRegistry;->writeAndClearAccessHistory()V
 PLcom/android/server/appop/HistoricalRegistry$$ExternalSyntheticLambda0;-><init>()V
-PLcom/android/server/appop/HistoricalRegistry$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/appop/HistoricalRegistry$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/appop/HistoricalRegistry$1;-><init>(Lcom/android/server/appop/HistoricalRegistry;Landroid/os/Handler;Landroid/content/ContentResolver;)V
 PLcom/android/server/appop/HistoricalRegistry$Persistence;->-$$Nest$mcollectHistoricalOpsDLocked(Lcom/android/server/appop/HistoricalRegistry$Persistence;Landroid/app/AppOpsManager$HistoricalOps;ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;IJJI)V
 PLcom/android/server/appop/HistoricalRegistry$Persistence;->-$$Nest$smspliceFromBeginning(Landroid/app/AppOpsManager$HistoricalOps;D)Landroid/app/AppOpsManager$HistoricalOps;
 HSPLcom/android/server/appop/HistoricalRegistry$Persistence;-><clinit>()V
 HSPLcom/android/server/appop/HistoricalRegistry$Persistence;-><init>(JJ)V
 PLcom/android/server/appop/HistoricalRegistry$Persistence;->clearHistoryDLocked()V
-PLcom/android/server/appop/HistoricalRegistry$Persistence;->clearHistoryDLocked(ILjava/lang/String;)V
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->clearHistoryDLocked(ILjava/lang/String;)V
 PLcom/android/server/appop/HistoricalRegistry$Persistence;->collectHistoricalOpsBaseDLocked(ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;IJJI)Ljava/util/LinkedList;
 PLcom/android/server/appop/HistoricalRegistry$Persistence;->collectHistoricalOpsDLocked(Landroid/app/AppOpsManager$HistoricalOps;ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;IJJI)V
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->collectHistoricalOpsRecursiveDLocked(Ljava/io/File;ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;IJJI[JLjava/util/LinkedList;ILjava/util/Set;)Ljava/util/LinkedList;
@@ -11433,12 +11943,12 @@
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->generateFile(Ljava/io/File;I)Ljava/io/File;
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->getHistoricalFileNames(Ljava/io/File;)Ljava/util/Set;
 HSPLcom/android/server/appop/HistoricalRegistry$Persistence;->getLastPersistTimeMillisDLocked()J
-HPLcom/android/server/appop/HistoricalRegistry$Persistence;->handlePersistHistoricalOpsRecursiveDLocked(Ljava/io/File;Ljava/io/File;Ljava/util/List;Ljava/util/Set;I)V+]Landroid/app/AppOpsManager$HistoricalOps;Landroid/app/AppOpsManager$HistoricalOps;]Ljava/io/File;Ljava/io/File;]Ljava/util/List;Ljava/util/LinkedList;,Ljava/util/ArrayList;]Lcom/android/server/appop/HistoricalRegistry$Persistence;Lcom/android/server/appop/HistoricalRegistry$Persistence;]Ljava/util/Set;Landroid/util/ArraySet;
-HPLcom/android/server/appop/HistoricalRegistry$Persistence;->normalizeSnapshotForSlotDuration(Ljava/util/List;J)V
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->handlePersistHistoricalOpsRecursiveDLocked(Ljava/io/File;Ljava/io/File;Ljava/util/List;Ljava/util/Set;I)V+]Landroid/app/AppOpsManager$HistoricalOps;Landroid/app/AppOpsManager$HistoricalOps;]Ljava/io/File;Ljava/io/File;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/LinkedList;,Ljava/util/ArrayList;]Lcom/android/server/appop/HistoricalRegistry$Persistence;Lcom/android/server/appop/HistoricalRegistry$Persistence;]Ljava/util/Set;Landroid/util/ArraySet;,Ljava/util/Collections$EmptySet;
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->normalizeSnapshotForSlotDuration(Ljava/util/List;J)V+]Landroid/app/AppOpsManager$HistoricalOps;Landroid/app/AppOpsManager$HistoricalOps;]Ljava/util/List;Ljava/util/ArrayList;
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->persistHistoricalOpsDLocked(Ljava/util/List;)V
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoricalAttributionOpsDLocked(Landroid/app/AppOpsManager$HistoricalOps;ILjava/lang/String;Landroid/util/TypedXmlPullParser;Ljava/lang/String;[Ljava/lang/String;IID)Landroid/app/AppOpsManager$HistoricalOps;+]Landroid/util/TypedXmlPullParser;Lcom/android/internal/util/BinaryXmlPullParser;]Lcom/android/server/appop/HistoricalRegistry$Persistence;Lcom/android/server/appop/HistoricalRegistry$Persistence;
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoricalOpDLocked(Landroid/app/AppOpsManager$HistoricalOps;ILjava/lang/String;Ljava/lang/String;Landroid/util/TypedXmlPullParser;[Ljava/lang/String;IID)Landroid/app/AppOpsManager$HistoricalOps;+]Landroid/util/TypedXmlPullParser;Lcom/android/internal/util/BinaryXmlPullParser;]Lcom/android/server/appop/HistoricalRegistry$Persistence;Lcom/android/server/appop/HistoricalRegistry$Persistence;
-HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoricalOpsLocked(Ljava/io/File;ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;IJJI[J)Ljava/util/List;
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoricalOpsLocked(Ljava/io/File;ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;IJJI[J)Ljava/util/List;+]Landroid/app/AppOpsManager$HistoricalOps;Landroid/app/AppOpsManager$HistoricalOps;]Ljava/io/FileInputStream;Ljava/io/FileInputStream;]Landroid/util/TypedXmlPullParser;Lcom/android/internal/util/BinaryXmlPullParser;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/appop/HistoricalRegistry$Persistence;Lcom/android/server/appop/HistoricalRegistry$Persistence;
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoricalOpsLocked(Ljava/io/File;JJILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;IJJI[JILjava/util/Set;)Ljava/util/List;
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoricalPackageOpsDLocked(Landroid/app/AppOpsManager$HistoricalOps;ILandroid/util/TypedXmlPullParser;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;IID)Landroid/app/AppOpsManager$HistoricalOps;+]Landroid/util/TypedXmlPullParser;Lcom/android/internal/util/BinaryXmlPullParser;]Lcom/android/server/appop/HistoricalRegistry$Persistence;Lcom/android/server/appop/HistoricalRegistry$Persistence;
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->readHistoricalUidOpsDLocked(Landroid/app/AppOpsManager$HistoricalOps;Landroid/util/TypedXmlPullParser;ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;IID)Landroid/app/AppOpsManager$HistoricalOps;+]Landroid/util/TypedXmlPullParser;Lcom/android/internal/util/BinaryXmlPullParser;]Lcom/android/server/appop/HistoricalRegistry$Persistence;Lcom/android/server/appop/HistoricalRegistry$Persistence;
@@ -11451,14 +11961,14 @@
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->writeHistoricalAttributionOpsDLocked(Landroid/app/AppOpsManager$AttributedHistoricalOps;Landroid/util/TypedXmlSerializer;)V+]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Lcom/android/server/appop/HistoricalRegistry$Persistence;Lcom/android/server/appop/HistoricalRegistry$Persistence;]Landroid/app/AppOpsManager$AttributedHistoricalOps;Landroid/app/AppOpsManager$AttributedHistoricalOps;
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->writeHistoricalOpDLocked(Landroid/app/AppOpsManager$HistoricalOp;Landroid/util/TypedXmlSerializer;)V+]Landroid/app/AppOpsManager$HistoricalOp;Landroid/app/AppOpsManager$HistoricalOp;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Lcom/android/server/appop/HistoricalRegistry$Persistence;Lcom/android/server/appop/HistoricalRegistry$Persistence;
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->writeHistoricalOpDLocked(Landroid/app/AppOpsManager$HistoricalOps;Landroid/util/TypedXmlSerializer;)V+]Landroid/app/AppOpsManager$HistoricalOps;Landroid/app/AppOpsManager$HistoricalOps;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Lcom/android/server/appop/HistoricalRegistry$Persistence;Lcom/android/server/appop/HistoricalRegistry$Persistence;
-HPLcom/android/server/appop/HistoricalRegistry$Persistence;->writeHistoricalOpsDLocked(Ljava/util/List;JLjava/io/File;)V
+HPLcom/android/server/appop/HistoricalRegistry$Persistence;->writeHistoricalOpsDLocked(Ljava/util/List;JLjava/io/File;)V+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Lcom/android/internal/os/AtomicDirectory;Lcom/android/internal/os/AtomicDirectory;]Lcom/android/server/appop/HistoricalRegistry$Persistence;Lcom/android/server/appop/HistoricalRegistry$Persistence;
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->writeHistoricalPackageOpsDLocked(Landroid/app/AppOpsManager$HistoricalPackageOps;Landroid/util/TypedXmlSerializer;)V+]Landroid/app/AppOpsManager$HistoricalPackageOps;Landroid/app/AppOpsManager$HistoricalPackageOps;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Lcom/android/server/appop/HistoricalRegistry$Persistence;Lcom/android/server/appop/HistoricalRegistry$Persistence;
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->writeHistoricalUidOpsDLocked(Landroid/app/AppOpsManager$HistoricalUidOps;Landroid/util/TypedXmlSerializer;)V+]Landroid/app/AppOpsManager$HistoricalUidOps;Landroid/app/AppOpsManager$HistoricalUidOps;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Lcom/android/server/appop/HistoricalRegistry$Persistence;Lcom/android/server/appop/HistoricalRegistry$Persistence;
 HPLcom/android/server/appop/HistoricalRegistry$Persistence;->writeStateOnLocked(Landroid/app/AppOpsManager$HistoricalOp;JLandroid/util/TypedXmlSerializer;)V+]Landroid/app/AppOpsManager$HistoricalOp;Landroid/app/AppOpsManager$HistoricalOp;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;
 HSPLcom/android/server/appop/HistoricalRegistry;-><clinit>()V
 HSPLcom/android/server/appop/HistoricalRegistry;-><init>(Ljava/lang/Object;)V
 PLcom/android/server/appop/HistoricalRegistry;->clearHistoricalRegistry()V
-PLcom/android/server/appop/HistoricalRegistry;->clearHistory(ILjava/lang/String;)V
+HPLcom/android/server/appop/HistoricalRegistry;->clearHistory(ILjava/lang/String;)V
 PLcom/android/server/appop/HistoricalRegistry;->clearHistoryOnDiskDLocked()V
 HPLcom/android/server/appop/HistoricalRegistry;->getHistoricalOps(ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;IIJJI[Ljava/lang/String;Landroid/os/RemoteCallback;)V
 HSPLcom/android/server/appop/HistoricalRegistry;->getUpdatedPendingHistoricalOpsMLocked(J)Landroid/app/AppOpsManager$HistoricalOps;+]Landroid/app/AppOpsManager$HistoricalOps;Landroid/app/AppOpsManager$HistoricalOps;]Lcom/android/server/appop/HistoricalRegistry;Lcom/android/server/appop/HistoricalRegistry;
@@ -11472,7 +11982,7 @@
 HPLcom/android/server/appop/HistoricalRegistry;->persistPendingHistory(Ljava/util/List;)V
 PLcom/android/server/appop/HistoricalRegistry;->pruneFutureOps(Ljava/util/List;)V
 PLcom/android/server/appop/HistoricalRegistry;->resampleHistoryOnDiskInMemoryDMLocked(J)V
-PLcom/android/server/appop/HistoricalRegistry;->schedulePersistHistoricalOpsMLocked(Landroid/app/AppOpsManager$HistoricalOps;)V
+HPLcom/android/server/appop/HistoricalRegistry;->schedulePersistHistoricalOpsMLocked(Landroid/app/AppOpsManager$HistoricalOps;)V
 PLcom/android/server/appop/HistoricalRegistry;->shutdown()V
 HSPLcom/android/server/appop/HistoricalRegistry;->systemReady(Landroid/content/ContentResolver;)V
 HSPLcom/android/server/appop/HistoricalRegistry;->updateParametersFromSetting(Landroid/content/ContentResolver;)V
@@ -11497,14 +12007,14 @@
 PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->$r8$lambda$5jsJbgVSWtaTejUm1kHnEwAbBu8(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/IPredictionCallback;Lcom/android/server/appprediction/AppPredictionPerUserService;)V
 PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->$r8$lambda$KcZB7udVPuf8sPqDCvlyhBAHY3s(Landroid/app/prediction/AppPredictionContext;Landroid/app/prediction/AppPredictionSessionId;Landroid/os/IBinder;Lcom/android/server/appprediction/AppPredictionPerUserService;)V
 PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->$r8$lambda$P8Q4BapilmYWViuI5SZgpkxiMec(Landroid/app/prediction/AppPredictionSessionId;Lcom/android/server/appprediction/AppPredictionPerUserService;)V
-PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->$r8$lambda$XbI9UDSCNg5jLGIP5TT02oyuygc(Landroid/app/prediction/AppPredictionSessionId;Lcom/android/server/appprediction/AppPredictionPerUserService;)V
+HPLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->$r8$lambda$XbI9UDSCNg5jLGIP5TT02oyuygc(Landroid/app/prediction/AppPredictionSessionId;Lcom/android/server/appprediction/AppPredictionPerUserService;)V
 PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->$r8$lambda$tOAXouYR6qhksAx7ORnQh1pmx_Y(Landroid/app/prediction/AppPredictionSessionId;Ljava/lang/String;Landroid/content/pm/ParceledListSlice;Lcom/android/server/appprediction/AppPredictionPerUserService;)V
-PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->$r8$lambda$xdfQUvFGxkqQMptRJ2CRxEz9lHs(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/IPredictionCallback;Lcom/android/server/appprediction/AppPredictionPerUserService;)V
+HPLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->$r8$lambda$xdfQUvFGxkqQMptRJ2CRxEz9lHs(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/IPredictionCallback;Lcom/android/server/appprediction/AppPredictionPerUserService;)V
 PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->$r8$lambda$zkMZx7WqHoP5bDAvbpK2mZvZxm8(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/AppTargetEvent;Lcom/android/server/appprediction/AppPredictionPerUserService;)V
 HSPLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;-><init>(Lcom/android/server/appprediction/AppPredictionManagerService;)V
 HSPLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;-><init>(Lcom/android/server/appprediction/AppPredictionManagerService;Lcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub-IA;)V
 HPLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->createPredictionSession(Landroid/app/prediction/AppPredictionContext;Landroid/app/prediction/AppPredictionSessionId;Landroid/os/IBinder;)V
-PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->lambda$createPredictionSession$0(Landroid/app/prediction/AppPredictionContext;Landroid/app/prediction/AppPredictionSessionId;Landroid/os/IBinder;Lcom/android/server/appprediction/AppPredictionPerUserService;)V
+HPLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->lambda$createPredictionSession$0(Landroid/app/prediction/AppPredictionContext;Landroid/app/prediction/AppPredictionSessionId;Landroid/os/IBinder;Lcom/android/server/appprediction/AppPredictionPerUserService;)V
 PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->lambda$notifyAppTargetEvent$1(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/AppTargetEvent;Lcom/android/server/appprediction/AppPredictionPerUserService;)V
 PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->lambda$notifyLaunchLocationShown$2(Landroid/app/prediction/AppPredictionSessionId;Ljava/lang/String;Landroid/content/pm/ParceledListSlice;Lcom/android/server/appprediction/AppPredictionPerUserService;)V
 PLcom/android/server/appprediction/AppPredictionManagerService$PredictionManagerServiceStub;->lambda$onDestroyPredictionSession$7(Landroid/app/prediction/AppPredictionSessionId;Lcom/android/server/appprediction/AppPredictionPerUserService;)V
@@ -11579,11 +12089,11 @@
 HPLcom/android/server/appprediction/AppPredictionPerUserService;->getRemoteServiceLocked()Lcom/android/server/appprediction/RemoteAppPredictionService;
 PLcom/android/server/appprediction/AppPredictionPerUserService;->lambda$notifyAppTargetEventLocked$2(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/AppTargetEvent;Landroid/service/appprediction/IPredictionService;)V
 PLcom/android/server/appprediction/AppPredictionPerUserService;->lambda$notifyLaunchLocationShownLocked$3(Landroid/app/prediction/AppPredictionSessionId;Ljava/lang/String;Landroid/content/pm/ParceledListSlice;Landroid/service/appprediction/IPredictionService;)V
-PLcom/android/server/appprediction/AppPredictionPerUserService;->lambda$onCreatePredictionSessionLocked$0(Landroid/app/prediction/AppPredictionContext;Landroid/app/prediction/AppPredictionSessionId;Landroid/service/appprediction/IPredictionService;)V
-PLcom/android/server/appprediction/AppPredictionPerUserService;->lambda$onCreatePredictionSessionLocked$1(Landroid/app/prediction/AppPredictionSessionId;)V
+HPLcom/android/server/appprediction/AppPredictionPerUserService;->lambda$onCreatePredictionSessionLocked$0(Landroid/app/prediction/AppPredictionContext;Landroid/app/prediction/AppPredictionSessionId;Landroid/service/appprediction/IPredictionService;)V
+HPLcom/android/server/appprediction/AppPredictionPerUserService;->lambda$onCreatePredictionSessionLocked$1(Landroid/app/prediction/AppPredictionSessionId;)V
 PLcom/android/server/appprediction/AppPredictionPerUserService;->lambda$onDestroyPredictionSessionLocked$8(Landroid/app/prediction/AppPredictionSessionId;Landroid/service/appprediction/IPredictionService;)V
-PLcom/android/server/appprediction/AppPredictionPerUserService;->lambda$registerPredictionUpdatesLocked$5(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/IPredictionCallback;Landroid/service/appprediction/IPredictionService;)V
-PLcom/android/server/appprediction/AppPredictionPerUserService;->lambda$requestPredictionUpdateLocked$7(Landroid/app/prediction/AppPredictionSessionId;Landroid/service/appprediction/IPredictionService;)V
+HPLcom/android/server/appprediction/AppPredictionPerUserService;->lambda$registerPredictionUpdatesLocked$5(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/IPredictionCallback;Landroid/service/appprediction/IPredictionService;)V
+HPLcom/android/server/appprediction/AppPredictionPerUserService;->lambda$requestPredictionUpdateLocked$7(Landroid/app/prediction/AppPredictionSessionId;Landroid/service/appprediction/IPredictionService;)V
 PLcom/android/server/appprediction/AppPredictionPerUserService;->lambda$sortAppTargetsLocked$4(Landroid/app/prediction/AppPredictionSessionId;Landroid/content/pm/ParceledListSlice;Landroid/app/prediction/IPredictionCallback;Landroid/service/appprediction/IPredictionService;)V
 PLcom/android/server/appprediction/AppPredictionPerUserService;->lambda$unregisterPredictionUpdatesLocked$6(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/IPredictionCallback;Landroid/service/appprediction/IPredictionService;)V
 PLcom/android/server/appprediction/AppPredictionPerUserService;->newServiceInfoLocked(Landroid/content/ComponentName;)Landroid/content/pm/ServiceInfo;
@@ -11633,9 +12143,13 @@
 PLcom/android/server/appwidget/AppWidgetServiceImpl$AppWidgetManagerLocal;->unlockUser(I)V
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl$BackupRestoreController;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl;)V
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl$BackupRestoreController;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl;Lcom/android/server/appwidget/AppWidgetServiceImpl$BackupRestoreController-IA;)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl$BackupRestoreController;->getPrunedAppsLocked(I)Ljava/util/Set;
 HPLcom/android/server/appwidget/AppWidgetServiceImpl$BackupRestoreController;->getWidgetState(Ljava/lang/String;I)[B
 HPLcom/android/server/appwidget/AppWidgetServiceImpl$BackupRestoreController;->isProviderAndHostInUser(Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;I)Z
+PLcom/android/server/appwidget/AppWidgetServiceImpl$BackupRestoreController;->maybeSendWidgetRestoreBroadcastsLocked(I)V
 HPLcom/android/server/appwidget/AppWidgetServiceImpl$BackupRestoreController;->packageNeedsWidgetBackupLocked(Ljava/lang/String;I)Z
+PLcom/android/server/appwidget/AppWidgetServiceImpl$BackupRestoreController;->systemRestoreFinished(I)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl$BackupRestoreController;->systemRestoreStarting(I)V
 HPLcom/android/server/appwidget/AppWidgetServiceImpl$BackupRestoreController;->widgetComponentsChanged(I)V
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl$CallbackHandler;-><init>(Lcom/android/server/appwidget/AppWidgetServiceImpl;Landroid/os/Looper;)V
 HPLcom/android/server/appwidget/AppWidgetServiceImpl$CallbackHandler;->handleMessage(Landroid/os/Message;)V
@@ -11687,7 +12201,7 @@
 PLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->hasCallerBindPermissionOrBindWhiteListedLocked(Ljava/lang/String;)Z
 PLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->isCallerBindAppWidgetWhiteListedLocked(Ljava/lang/String;)Z
 HPLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->isCallerInstantAppLocked()Z+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;
-PLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->isEnabledGroupProfile(I)Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->isEnabledGroupProfile(I)Z
 PLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->isHostAccessingProvider(Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;ILjava/lang/String;)Z
 HPLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->isHostInPackageForUid(Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;ILjava/lang/String;)Z
 HPLcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;->isInstantAppLocked(Ljava/lang/String;I)Z
@@ -11781,7 +12295,7 @@
 HPLcom/android/server/appwidget/AppWidgetServiceImpl;->getStateFile(I)Ljava/io/File;
 PLcom/android/server/appwidget/AppWidgetServiceImpl;->getUidForPackage(Ljava/lang/String;I)I
 HPLcom/android/server/appwidget/AppWidgetServiceImpl;->getWidgetIds(Ljava/util/ArrayList;)[I+]Ljava/util/ArrayList;Ljava/util/ArrayList;
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->getWidgetState(Ljava/lang/String;I)[B
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->getWidgetState(Ljava/lang/String;I)[B
 PLcom/android/server/appwidget/AppWidgetServiceImpl;->handleNotifyAppWidgetRemoved(Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;Lcom/android/internal/appwidget/IAppWidgetHost;IJ)V
 PLcom/android/server/appwidget/AppWidgetServiceImpl;->handleNotifyAppWidgetViewDataChanged(Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;Lcom/android/internal/appwidget/IAppWidgetHost;IIJ)V
 PLcom/android/server/appwidget/AppWidgetServiceImpl;->handleNotifyProviderChanged(Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;Lcom/android/internal/appwidget/IAppWidgetHost;ILandroid/appwidget/AppWidgetProviderInfo;J)V
@@ -11829,9 +12343,10 @@
 HPLcom/android/server/appwidget/AppWidgetServiceImpl;->reloadWidgetsMaskedState(I)V
 PLcom/android/server/appwidget/AppWidgetServiceImpl;->reloadWidgetsMaskedStateForGroup(I)V
 PLcom/android/server/appwidget/AppWidgetServiceImpl;->removeHostsAndProvidersForPackageLocked(Ljava/lang/String;I)Z
-PLcom/android/server/appwidget/AppWidgetServiceImpl;->removeProvidersForPackageLocked(Ljava/lang/String;I)Z
+HPLcom/android/server/appwidget/AppWidgetServiceImpl;->removeProvidersForPackageLocked(Ljava/lang/String;I)Z
 PLcom/android/server/appwidget/AppWidgetServiceImpl;->removeWidgetLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Widget;)V
 HPLcom/android/server/appwidget/AppWidgetServiceImpl;->removeWidgetsForPackageLocked(Ljava/lang/String;II)V+]Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->requestPinAppWidget(Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/Bundle;Landroid/content/IntentSender;)Z
 PLcom/android/server/appwidget/AppWidgetServiceImpl;->resolveHostUidLocked(Ljava/lang/String;I)V
 HPLcom/android/server/appwidget/AppWidgetServiceImpl;->saveGroupStateAsync(I)V
 HPLcom/android/server/appwidget/AppWidgetServiceImpl;->saveStateLocked(I)V+]Landroid/util/AtomicFile;Landroid/util/AtomicFile;]Lcom/android/server/appwidget/AppWidgetServiceImpl;Lcom/android/server/appwidget/AppWidgetServiceImpl;]Lcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;Lcom/android/server/appwidget/AppWidgetServiceImpl$SecurityPolicy;
@@ -11856,6 +12371,8 @@
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl;->setSafeMode(Z)V
 HPLcom/android/server/appwidget/AppWidgetServiceImpl;->startListening(Lcom/android/internal/appwidget/IAppWidgetHost;Ljava/lang/String;I[I)Landroid/content/pm/ParceledListSlice;
 HPLcom/android/server/appwidget/AppWidgetServiceImpl;->stopListening(Ljava/lang/String;I)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->systemRestoreFinished(I)V
+PLcom/android/server/appwidget/AppWidgetServiceImpl;->systemRestoreStarting(I)V
 HSPLcom/android/server/appwidget/AppWidgetServiceImpl;->systemServicesReady()V
 HPLcom/android/server/appwidget/AppWidgetServiceImpl;->tagProvidersAndHosts()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 PLcom/android/server/appwidget/AppWidgetServiceImpl;->unmaskWidgetsViewsLocked(Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;)V
@@ -11869,7 +12386,7 @@
 HPLcom/android/server/appwidget/AppWidgetServiceImpl;->updateWidgetPackageSuspensionMaskedState(Landroid/content/Intent;ZI)V+]Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;]Lcom/android/server/appwidget/AppWidgetServiceImpl;Lcom/android/server/appwidget/AppWidgetServiceImpl;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Set;Landroid/util/ArraySet;]Landroid/content/Intent;Landroid/content/Intent;
 HPLcom/android/server/appwidget/AppWidgetServiceImpl;->writeProfileStateToFileLocked(Ljava/io/FileOutputStream;I)Z+]Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;Lcom/android/server/appwidget/AppWidgetServiceImpl$Host;]Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;Lcom/android/server/appwidget/AppWidgetServiceImpl$Provider;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
 HPLcom/android/server/appwidget/AppWidgetXmlUtil;->readAppWidgetProviderInfoLocked(Landroid/util/TypedXmlPullParser;)Landroid/appwidget/AppWidgetProviderInfo;
-HPLcom/android/server/appwidget/AppWidgetXmlUtil;->writeAppWidgetProviderInfoLocked(Landroid/util/TypedXmlSerializer;Landroid/appwidget/AppWidgetProviderInfo;)V+]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;
+HPLcom/android/server/appwidget/AppWidgetXmlUtil;->writeAppWidgetProviderInfoLocked(Landroid/util/TypedXmlSerializer;Landroid/appwidget/AppWidgetProviderInfo;)V+]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/attention/AttentionManagerService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/attention/AttentionManagerService;)V
 PLcom/android/server/attention/AttentionManagerService$$ExternalSyntheticLambda0;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
 PLcom/android/server/attention/AttentionManagerService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/attention/AttentionManagerService;)V
@@ -11963,16 +12480,16 @@
 PLcom/android/server/audio/AudioDeviceBroker$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/audio/AudioDeviceBroker$BrokerHandler;-><init>(Lcom/android/server/audio/AudioDeviceBroker;)V
 HSPLcom/android/server/audio/AudioDeviceBroker$BrokerHandler;-><init>(Lcom/android/server/audio/AudioDeviceBroker;Lcom/android/server/audio/AudioDeviceBroker$BrokerHandler-IA;)V
-HSPLcom/android/server/audio/AudioDeviceBroker$BrokerHandler;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/audio/AudioDeviceBroker$BrokerHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/audio/BtHelper;Lcom/android/server/audio/BtHelper;]Lcom/android/server/audio/AudioDeviceInventory;Lcom/android/server/audio/AudioDeviceInventory;]Ljava/util/Set;Ljava/util/HashSet;
 HSPLcom/android/server/audio/AudioDeviceBroker$BrokerThread;-><init>(Lcom/android/server/audio/AudioDeviceBroker;)V
 HSPLcom/android/server/audio/AudioDeviceBroker$BrokerThread;->run()V
 PLcom/android/server/audio/AudioDeviceBroker$BtDeviceChangedData;-><init>(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothDevice;Landroid/media/BluetoothProfileConnectionInfo;Ljava/lang/String;)V
 PLcom/android/server/audio/AudioDeviceBroker$BtDeviceInfo;-><init>(Landroid/bluetooth/BluetoothDevice;I)V
 PLcom/android/server/audio/AudioDeviceBroker$BtDeviceInfo;-><init>(Lcom/android/server/audio/AudioDeviceBroker$BtDeviceChangedData;Landroid/bluetooth/BluetoothDevice;III)V
 PLcom/android/server/audio/AudioDeviceBroker$CommunicationClientInfo;-><init>(Landroid/os/IBinder;ILandroid/media/AudioDeviceAttributes;ILjava/lang/String;)V
-PLcom/android/server/audio/AudioDeviceBroker$CommunicationRouteClient;-><init>(Lcom/android/server/audio/AudioDeviceBroker;Landroid/os/IBinder;ILandroid/media/AudioDeviceAttributes;)V
+HPLcom/android/server/audio/AudioDeviceBroker$CommunicationRouteClient;-><init>(Lcom/android/server/audio/AudioDeviceBroker;Landroid/os/IBinder;ILandroid/media/AudioDeviceAttributes;)V
 PLcom/android/server/audio/AudioDeviceBroker$CommunicationRouteClient;->binderDied()V
-PLcom/android/server/audio/AudioDeviceBroker$CommunicationRouteClient;->getBinder()Landroid/os/IBinder;
+HPLcom/android/server/audio/AudioDeviceBroker$CommunicationRouteClient;->getBinder()Landroid/os/IBinder;
 HPLcom/android/server/audio/AudioDeviceBroker$CommunicationRouteClient;->getDevice()Landroid/media/AudioDeviceAttributes;
 HPLcom/android/server/audio/AudioDeviceBroker$CommunicationRouteClient;->getPid()I
 PLcom/android/server/audio/AudioDeviceBroker$CommunicationRouteClient;->registerDeathRecipient()Z
@@ -11981,7 +12498,7 @@
 PLcom/android/server/audio/AudioDeviceBroker$CommunicationRouteClient;->unregisterDeathRecipient()V
 PLcom/android/server/audio/AudioDeviceBroker;->$r8$lambda$VarJDTHGtx-e1FGP_B_yLilAfsk(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/audio/AudioDeviceBroker$CommunicationRouteClient;)V
 PLcom/android/server/audio/AudioDeviceBroker;->-$$Nest$fgetmAudioService(Lcom/android/server/audio/AudioDeviceBroker;)Lcom/android/server/audio/AudioService;
-PLcom/android/server/audio/AudioDeviceBroker;->-$$Nest$fgetmBrokerEventWakeLock(Lcom/android/server/audio/AudioDeviceBroker;)Landroid/os/PowerManager$WakeLock;
+HSPLcom/android/server/audio/AudioDeviceBroker;->-$$Nest$fgetmBrokerEventWakeLock(Lcom/android/server/audio/AudioDeviceBroker;)Landroid/os/PowerManager$WakeLock;
 HSPLcom/android/server/audio/AudioDeviceBroker;->-$$Nest$fgetmBtHelper(Lcom/android/server/audio/AudioDeviceBroker;)Lcom/android/server/audio/BtHelper;
 HSPLcom/android/server/audio/AudioDeviceBroker;->-$$Nest$fgetmDeviceInventory(Lcom/android/server/audio/AudioDeviceBroker;)Lcom/android/server/audio/AudioDeviceInventory;
 HSPLcom/android/server/audio/AudioDeviceBroker;->-$$Nest$fgetmDeviceStateLock(Lcom/android/server/audio/AudioDeviceBroker;)Ljava/lang/Object;
@@ -11999,11 +12516,11 @@
 HSPLcom/android/server/audio/AudioDeviceBroker;->-$$Nest$smisMessageHandledUnderWakelock(I)Z
 HSPLcom/android/server/audio/AudioDeviceBroker;-><clinit>()V
 HSPLcom/android/server/audio/AudioDeviceBroker;-><init>(Landroid/content/Context;Lcom/android/server/audio/AudioService;)V
-PLcom/android/server/audio/AudioDeviceBroker;->addCommunicationRouteClient(Landroid/os/IBinder;ILandroid/media/AudioDeviceAttributes;)Lcom/android/server/audio/AudioDeviceBroker$CommunicationRouteClient;
+HPLcom/android/server/audio/AudioDeviceBroker;->addCommunicationRouteClient(Landroid/os/IBinder;ILandroid/media/AudioDeviceAttributes;)Lcom/android/server/audio/AudioDeviceBroker$CommunicationRouteClient;
 PLcom/android/server/audio/AudioDeviceBroker;->broadcastStickyIntentToCurrentProfileGroup(Landroid/content/Intent;)V
 PLcom/android/server/audio/AudioDeviceBroker;->btMediaMetricRecord(Landroid/bluetooth/BluetoothDevice;Ljava/lang/String;Lcom/android/server/audio/AudioDeviceBroker$BtDeviceChangedData;)V
 PLcom/android/server/audio/AudioDeviceBroker;->checkMessagesMuteMusic(I)V
-PLcom/android/server/audio/AudioDeviceBroker;->checkMusicActive(ILjava/lang/String;)V
+HSPLcom/android/server/audio/AudioDeviceBroker;->checkMusicActive(ILjava/lang/String;)V
 PLcom/android/server/audio/AudioDeviceBroker;->clearAvrcpAbsoluteVolumeSupported()V
 PLcom/android/server/audio/AudioDeviceBroker;->createBtDeviceInfo(Lcom/android/server/audio/AudioDeviceBroker$BtDeviceChangedData;Landroid/bluetooth/BluetoothDevice;I)Lcom/android/server/audio/AudioDeviceBroker$BtDeviceInfo;
 PLcom/android/server/audio/AudioDeviceBroker;->disconnectAllBluetoothProfiles()V
@@ -12011,11 +12528,12 @@
 HPLcom/android/server/audio/AudioDeviceBroker;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/audio/AudioDeviceBroker;->getBluetoothA2dpEnabled()Z
 PLcom/android/server/audio/AudioDeviceBroker;->getCommunicationDevice()Landroid/media/AudioDeviceInfo;
-PLcom/android/server/audio/AudioDeviceBroker;->getCommunicationRouteClientForPid(I)Lcom/android/server/audio/AudioDeviceBroker$CommunicationRouteClient;
+HPLcom/android/server/audio/AudioDeviceBroker;->getCommunicationRouteClientForPid(I)Lcom/android/server/audio/AudioDeviceBroker$CommunicationRouteClient;
 PLcom/android/server/audio/AudioDeviceBroker;->getContentResolver()Landroid/content/ContentResolver;
 HSPLcom/android/server/audio/AudioDeviceBroker;->getContext()Landroid/content/Context;
 PLcom/android/server/audio/AudioDeviceBroker;->getCurAudioRoutes()Landroid/media/AudioRoutesInfo;
 PLcom/android/server/audio/AudioDeviceBroker;->getDeviceForStream(I)I
+PLcom/android/server/audio/AudioDeviceBroker;->getDeviceSensorUuid(Landroid/media/AudioDeviceAttributes;)Ljava/util/UUID;
 PLcom/android/server/audio/AudioDeviceBroker;->handleCancelFailureToConnectToBtHeadsetService()V
 PLcom/android/server/audio/AudioDeviceBroker;->handleDeviceConnection(Landroid/media/AudioDeviceAttributes;Z)Z
 HSPLcom/android/server/audio/AudioDeviceBroker;->handleFailureToConnectToBtHeadsetService(I)V
@@ -12030,8 +12548,8 @@
 HPLcom/android/server/audio/AudioDeviceBroker;->isBluetoothScoOn()Z
 PLcom/android/server/audio/AudioDeviceBroker;->isBluetoothScoRequested()Z
 HSPLcom/android/server/audio/AudioDeviceBroker;->isDeviceActiveForCommunication(I)Z
-PLcom/android/server/audio/AudioDeviceBroker;->isDeviceConnected(Landroid/media/AudioDeviceAttributes;)Z
-HPLcom/android/server/audio/AudioDeviceBroker;->isDeviceOnForCommunication(I)Z
+HPLcom/android/server/audio/AudioDeviceBroker;->isDeviceConnected(Landroid/media/AudioDeviceAttributes;)Z
+HPLcom/android/server/audio/AudioDeviceBroker;->isDeviceOnForCommunication(I)Z+]Lcom/android/server/audio/AudioDeviceBroker;Lcom/android/server/audio/AudioDeviceBroker;
 HPLcom/android/server/audio/AudioDeviceBroker;->isDeviceRequestedForCommunication(I)Z
 PLcom/android/server/audio/AudioDeviceBroker;->isInCommunication()Z
 HSPLcom/android/server/audio/AudioDeviceBroker;->isMessageHandledUnderWakelock(I)Z
@@ -12047,7 +12565,7 @@
 HSPLcom/android/server/audio/AudioDeviceBroker;->onUpdateCommunicationRoute(Ljava/lang/String;)V
 HSPLcom/android/server/audio/AudioDeviceBroker;->onUpdateCommunicationRouteClient(Ljava/lang/String;)V
 HSPLcom/android/server/audio/AudioDeviceBroker;->onUpdatePhoneStrategyDevice(Landroid/media/AudioDeviceAttributes;)V
-PLcom/android/server/audio/AudioDeviceBroker;->postAccessoryPlugMediaUnmute(I)V
+HSPLcom/android/server/audio/AudioDeviceBroker;->postAccessoryPlugMediaUnmute(I)V
 PLcom/android/server/audio/AudioDeviceBroker;->postBluetoothA2dpDeviceConfigChange(Landroid/bluetooth/BluetoothDevice;)V
 PLcom/android/server/audio/AudioDeviceBroker;->postBluetoothActiveDevice(Lcom/android/server/audio/AudioDeviceBroker$BtDeviceInfo;I)V
 PLcom/android/server/audio/AudioDeviceBroker;->postBroadcastBecomingNoisy()V
@@ -12055,8 +12573,8 @@
 PLcom/android/server/audio/AudioDeviceBroker;->postBtProfileConnected(ILandroid/bluetooth/BluetoothProfile;)V
 PLcom/android/server/audio/AudioDeviceBroker;->postBtProfileDisconnected(I)V
 PLcom/android/server/audio/AudioDeviceBroker;->postCommunicationRouteClientDied(Lcom/android/server/audio/AudioDeviceBroker$CommunicationRouteClient;)V
-PLcom/android/server/audio/AudioDeviceBroker;->postObserveDevicesForAllStreams()V
-PLcom/android/server/audio/AudioDeviceBroker;->postReportNewRoutes(Z)V
+HSPLcom/android/server/audio/AudioDeviceBroker;->postObserveDevicesForAllStreams()V
+HSPLcom/android/server/audio/AudioDeviceBroker;->postReportNewRoutes(Z)V
 HSPLcom/android/server/audio/AudioDeviceBroker;->postSaveRemovePreferredDevicesForStrategy(I)V
 PLcom/android/server/audio/AudioDeviceBroker;->postSaveSetPreferredDevicesForStrategy(ILjava/util/List;)V
 PLcom/android/server/audio/AudioDeviceBroker;->postScoAudioStateChanged(I)V
@@ -12065,28 +12583,28 @@
 PLcom/android/server/audio/AudioDeviceBroker;->postSetHearingAidVolumeIndex(II)V
 PLcom/android/server/audio/AudioDeviceBroker;->postSetModeOwnerPid(II)V
 PLcom/android/server/audio/AudioDeviceBroker;->postSetVolumeIndexOnDevice(IIILjava/lang/String;)V
-PLcom/android/server/audio/AudioDeviceBroker;->postSetWiredDeviceConnectionState(Lcom/android/server/audio/AudioDeviceInventory$WiredDeviceConnectionState;I)V
+HSPLcom/android/server/audio/AudioDeviceBroker;->postSetWiredDeviceConnectionState(Lcom/android/server/audio/AudioDeviceInventory$WiredDeviceConnectionState;I)V
 HSPLcom/android/server/audio/AudioDeviceBroker;->postUpdateCommunicationRouteClient(Ljava/lang/String;)V
-HSPLcom/android/server/audio/AudioDeviceBroker;->preferredCommunicationDevice()Landroid/media/AudioDeviceAttributes;
+HSPLcom/android/server/audio/AudioDeviceBroker;->preferredCommunicationDevice()Landroid/media/AudioDeviceAttributes;+]Lcom/android/server/audio/AudioDeviceBroker;Lcom/android/server/audio/AudioDeviceBroker;
 PLcom/android/server/audio/AudioDeviceBroker;->queueOnBluetoothActiveDeviceChanged(Lcom/android/server/audio/AudioDeviceBroker$BtDeviceChangedData;)V
 PLcom/android/server/audio/AudioDeviceBroker;->receiveBtEvent(Landroid/content/Intent;)V
 PLcom/android/server/audio/AudioDeviceBroker;->registerCommunicationDeviceDispatcher(Landroid/media/ICommunicationDeviceDispatcher;)V
-PLcom/android/server/audio/AudioDeviceBroker;->removeCommunicationRouteClient(Landroid/os/IBinder;Z)Lcom/android/server/audio/AudioDeviceBroker$CommunicationRouteClient;
+HPLcom/android/server/audio/AudioDeviceBroker;->removeCommunicationRouteClient(Landroid/os/IBinder;Z)Lcom/android/server/audio/AudioDeviceBroker$CommunicationRouteClient;
 HSPLcom/android/server/audio/AudioDeviceBroker;->removePreferredDevicesForStrategySync(I)I
 HSPLcom/android/server/audio/AudioDeviceBroker;->requestedCommunicationDevice()Landroid/media/AudioDeviceAttributes;
-HSPLcom/android/server/audio/AudioDeviceBroker;->sendIILMsg(IIIILjava/lang/Object;I)V
+HSPLcom/android/server/audio/AudioDeviceBroker;->sendIILMsg(IIIILjava/lang/Object;I)V+]Landroid/os/Handler;Lcom/android/server/audio/AudioDeviceBroker$BrokerHandler;]Ljava/util/Set;Ljava/util/HashSet;
 HSPLcom/android/server/audio/AudioDeviceBroker;->sendIILMsgNoDelay(IIIILjava/lang/Object;)V
 PLcom/android/server/audio/AudioDeviceBroker;->sendIIMsgNoDelay(IIII)V
 PLcom/android/server/audio/AudioDeviceBroker;->sendILMsg(IIILjava/lang/Object;I)V
 PLcom/android/server/audio/AudioDeviceBroker;->sendILMsgNoDelay(IIILjava/lang/Object;)V
 HSPLcom/android/server/audio/AudioDeviceBroker;->sendIMsgNoDelay(III)V
-PLcom/android/server/audio/AudioDeviceBroker;->sendLMsg(IILjava/lang/Object;I)V
+HSPLcom/android/server/audio/AudioDeviceBroker;->sendLMsg(IILjava/lang/Object;I)V
 HSPLcom/android/server/audio/AudioDeviceBroker;->sendLMsgNoDelay(IILjava/lang/Object;)V
 HSPLcom/android/server/audio/AudioDeviceBroker;->sendMsg(III)V
-PLcom/android/server/audio/AudioDeviceBroker;->sendMsgNoDelay(II)V
+HSPLcom/android/server/audio/AudioDeviceBroker;->sendMsgNoDelay(II)V
 PLcom/android/server/audio/AudioDeviceBroker;->setA2dpTimeout(Ljava/lang/String;II)V
 PLcom/android/server/audio/AudioDeviceBroker;->setAvrcpAbsoluteVolumeSupported(Z)V
-PLcom/android/server/audio/AudioDeviceBroker;->setBluetoothA2dpOnInt(ZZLjava/lang/String;)V
+HSPLcom/android/server/audio/AudioDeviceBroker;->setBluetoothA2dpOnInt(ZZLjava/lang/String;)V
 PLcom/android/server/audio/AudioDeviceBroker;->setBluetoothA2dpOn_Async(ZLjava/lang/String;)V
 HSPLcom/android/server/audio/AudioDeviceBroker;->setBluetoothScoOn(ZLjava/lang/String;)V
 PLcom/android/server/audio/AudioDeviceBroker;->setCommunicationDevice(Landroid/os/IBinder;ILandroid/media/AudioDeviceInfo;Ljava/lang/String;)Z
@@ -12094,12 +12612,12 @@
 HSPLcom/android/server/audio/AudioDeviceBroker;->setForceUse_Async(IILjava/lang/String;)V
 PLcom/android/server/audio/AudioDeviceBroker;->setPreferredDevicesForStrategySync(ILjava/util/List;)I
 PLcom/android/server/audio/AudioDeviceBroker;->setSpeakerphoneOn(Landroid/os/IBinder;IZLjava/lang/String;)V
-PLcom/android/server/audio/AudioDeviceBroker;->setWiredDeviceConnectionState(Landroid/media/AudioDeviceAttributes;ILjava/lang/String;)V
+HSPLcom/android/server/audio/AudioDeviceBroker;->setWiredDeviceConnectionState(Landroid/media/AudioDeviceAttributes;ILjava/lang/String;)V
 HSPLcom/android/server/audio/AudioDeviceBroker;->setupMessaging(Landroid/content/Context;)V
 PLcom/android/server/audio/AudioDeviceBroker;->startBluetoothScoForClient(Landroid/os/IBinder;IILjava/lang/String;)V
 HSPLcom/android/server/audio/AudioDeviceBroker;->startWatchingRoutes(Landroid/media/IAudioRoutesObserver;)Landroid/media/AudioRoutesInfo;
 PLcom/android/server/audio/AudioDeviceBroker;->stopBluetoothScoForClient(Landroid/os/IBinder;ILjava/lang/String;)V
-HSPLcom/android/server/audio/AudioDeviceBroker;->topCommunicationRouteClient()Lcom/android/server/audio/AudioDeviceBroker$CommunicationRouteClient;
+HSPLcom/android/server/audio/AudioDeviceBroker;->topCommunicationRouteClient()Lcom/android/server/audio/AudioDeviceBroker$CommunicationRouteClient;+]Ljava/util/LinkedList;Ljava/util/LinkedList;]Ljava/util/Iterator;Ljava/util/LinkedList$ListItr;]Lcom/android/server/audio/AudioDeviceBroker$CommunicationRouteClient;Lcom/android/server/audio/AudioDeviceBroker$CommunicationRouteClient;
 PLcom/android/server/audio/AudioDeviceBroker;->unregisterCommunicationDeviceDispatcher(Landroid/media/ICommunicationDeviceDispatcher;)V
 HSPLcom/android/server/audio/AudioDeviceBroker;->updateActiveCommunicationDevice()V
 HSPLcom/android/server/audio/AudioDeviceBroker;->waitForBrokerHandlerCreation()V
@@ -12128,18 +12646,18 @@
 PLcom/android/server/audio/AudioDeviceInventory$$ExternalSyntheticLambda8;-><init>(ILandroid/util/ArraySet;)V
 PLcom/android/server/audio/AudioDeviceInventory$$ExternalSyntheticLambda8;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/audio/AudioDeviceInventory$1;-><init>(Lcom/android/server/audio/AudioDeviceInventory;)V
-PLcom/android/server/audio/AudioDeviceInventory$1;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/audio/AudioDeviceInventory$1;->put(Ljava/lang/String;Lcom/android/server/audio/AudioDeviceInventory$DeviceInfo;)Lcom/android/server/audio/AudioDeviceInventory$DeviceInfo;
-HPLcom/android/server/audio/AudioDeviceInventory$1;->record(Ljava/lang/String;ZLjava/lang/String;Lcom/android/server/audio/AudioDeviceInventory$DeviceInfo;)V
+HSPLcom/android/server/audio/AudioDeviceInventory$1;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/audio/AudioDeviceInventory$1;->put(Ljava/lang/String;Lcom/android/server/audio/AudioDeviceInventory$DeviceInfo;)Lcom/android/server/audio/AudioDeviceInventory$DeviceInfo;
+HSPLcom/android/server/audio/AudioDeviceInventory$1;->record(Ljava/lang/String;ZLjava/lang/String;Lcom/android/server/audio/AudioDeviceInventory$DeviceInfo;)V
 PLcom/android/server/audio/AudioDeviceInventory$1;->remove(Ljava/lang/Object;)Lcom/android/server/audio/AudioDeviceInventory$DeviceInfo;
 PLcom/android/server/audio/AudioDeviceInventory$1;->remove(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/audio/AudioDeviceInventory$DeviceInfo;->-$$Nest$smmakeDeviceListKey(ILjava/lang/String;)Ljava/lang/String;
-PLcom/android/server/audio/AudioDeviceInventory$DeviceInfo;-><init>(ILjava/lang/String;Ljava/lang/String;I)V
-PLcom/android/server/audio/AudioDeviceInventory$DeviceInfo;-><init>(ILjava/lang/String;Ljava/lang/String;ILjava/util/UUID;)V
+HSPLcom/android/server/audio/AudioDeviceInventory$DeviceInfo;->-$$Nest$smmakeDeviceListKey(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/audio/AudioDeviceInventory$DeviceInfo;-><init>(ILjava/lang/String;Ljava/lang/String;I)V
+HSPLcom/android/server/audio/AudioDeviceInventory$DeviceInfo;-><init>(ILjava/lang/String;Ljava/lang/String;ILjava/util/UUID;)V
 PLcom/android/server/audio/AudioDeviceInventory$DeviceInfo;->getKey()Ljava/lang/String;
-HPLcom/android/server/audio/AudioDeviceInventory$DeviceInfo;->makeDeviceListKey(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/audio/AudioDeviceInventory$DeviceInfo;->makeDeviceListKey(ILjava/lang/String;)Ljava/lang/String;
 PLcom/android/server/audio/AudioDeviceInventory$DeviceInfo;->toString()Ljava/lang/String;
-PLcom/android/server/audio/AudioDeviceInventory$WiredDeviceConnectionState;-><init>(Lcom/android/server/audio/AudioDeviceInventory;Landroid/media/AudioDeviceAttributes;ILjava/lang/String;)V
+HSPLcom/android/server/audio/AudioDeviceInventory$WiredDeviceConnectionState;-><init>(Lcom/android/server/audio/AudioDeviceInventory;Landroid/media/AudioDeviceAttributes;ILjava/lang/String;)V
 PLcom/android/server/audio/AudioDeviceInventory;->$r8$lambda$1w8QKT0Yz2lok0X0rF-kJ0nfMGE(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/Integer;Ljava/util/List;)V
 PLcom/android/server/audio/AudioDeviceInventory;->$r8$lambda$3_jRHUxOMebB2lVGo2VbJbNcmc0(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Lcom/android/server/audio/AudioDeviceInventory$DeviceInfo;)V
 PLcom/android/server/audio/AudioDeviceInventory;->$r8$lambda$DdYMv6HzKOn-iN9dHx9yKJei96c(Landroid/util/ArraySet;Lcom/android/server/audio/AudioDeviceInventory$DeviceInfo;)V
@@ -12153,7 +12671,7 @@
 PLcom/android/server/audio/AudioDeviceInventory;->$r8$lambda$pyQisz62xfmMVAlzbg8G2zotHjA(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/String;)V
 HSPLcom/android/server/audio/AudioDeviceInventory;-><clinit>()V
 HSPLcom/android/server/audio/AudioDeviceInventory;-><init>(Lcom/android/server/audio/AudioDeviceBroker;)V
-PLcom/android/server/audio/AudioDeviceInventory;->checkSendBecomingNoisyIntentInt(III)I
+HSPLcom/android/server/audio/AudioDeviceInventory;->checkSendBecomingNoisyIntentInt(III)I
 PLcom/android/server/audio/AudioDeviceInventory;->disconnectA2dp()V
 PLcom/android/server/audio/AudioDeviceInventory;->disconnectA2dpSink()V
 PLcom/android/server/audio/AudioDeviceInventory;->disconnectHearingAid()V
@@ -12163,9 +12681,10 @@
 HSPLcom/android/server/audio/AudioDeviceInventory;->dispatchPreferredDevice(ILjava/util/List;)V
 PLcom/android/server/audio/AudioDeviceInventory;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/audio/AudioDeviceInventory;->getCurAudioRoutes()Landroid/media/AudioRoutesInfo;
-HPLcom/android/server/audio/AudioDeviceInventory;->handleDeviceConnection(Landroid/media/AudioDeviceAttributes;ZZ)Z
+PLcom/android/server/audio/AudioDeviceInventory;->getDeviceSensorUuid(Landroid/media/AudioDeviceAttributes;)Ljava/util/UUID;
+HSPLcom/android/server/audio/AudioDeviceInventory;->handleDeviceConnection(Landroid/media/AudioDeviceAttributes;ZZ)Z
 PLcom/android/server/audio/AudioDeviceInventory;->isCurrentDeviceConnected()Z
-PLcom/android/server/audio/AudioDeviceInventory;->isDeviceConnected(Landroid/media/AudioDeviceAttributes;)Z
+HPLcom/android/server/audio/AudioDeviceInventory;->isDeviceConnected(Landroid/media/AudioDeviceAttributes;)Z
 PLcom/android/server/audio/AudioDeviceInventory;->lambda$disconnectA2dp$6(Landroid/util/ArraySet;Lcom/android/server/audio/AudioDeviceInventory$DeviceInfo;)V
 PLcom/android/server/audio/AudioDeviceInventory;->lambda$disconnectA2dp$7(ILjava/lang/String;)V
 PLcom/android/server/audio/AudioDeviceInventory;->lambda$disconnectA2dpSink$8(Landroid/util/ArraySet;Lcom/android/server/audio/AudioDeviceInventory$DeviceInfo;)V
@@ -12183,20 +12702,20 @@
 PLcom/android/server/audio/AudioDeviceInventory;->onBluetoothA2dpDeviceConfigChange(Lcom/android/server/audio/BtHelper$BluetoothA2dpDeviceInfo;I)V
 PLcom/android/server/audio/AudioDeviceInventory;->onBtProfileDisconnected(I)V
 PLcom/android/server/audio/AudioDeviceInventory;->onMakeA2dpDeviceUnavailableNow(Ljava/lang/String;I)V
-PLcom/android/server/audio/AudioDeviceInventory;->onReportNewRoutes()V
-PLcom/android/server/audio/AudioDeviceInventory;->onRestoreDevices()V
+HSPLcom/android/server/audio/AudioDeviceInventory;->onReportNewRoutes()V
+HPLcom/android/server/audio/AudioDeviceInventory;->onRestoreDevices()V
 HSPLcom/android/server/audio/AudioDeviceInventory;->onSaveRemovePreferredDevices(I)V
 PLcom/android/server/audio/AudioDeviceInventory;->onSaveSetPreferredDevices(ILjava/util/List;)V
 HPLcom/android/server/audio/AudioDeviceInventory;->onSetBtActiveDevice(Lcom/android/server/audio/AudioDeviceBroker$BtDeviceInfo;I)V
-PLcom/android/server/audio/AudioDeviceInventory;->onSetWiredDeviceConnectionState(Lcom/android/server/audio/AudioDeviceInventory$WiredDeviceConnectionState;)V
+HSPLcom/android/server/audio/AudioDeviceInventory;->onSetWiredDeviceConnectionState(Lcom/android/server/audio/AudioDeviceInventory$WiredDeviceConnectionState;)V
 HSPLcom/android/server/audio/AudioDeviceInventory;->removePreferredDevicesForStrategySync(I)I
-PLcom/android/server/audio/AudioDeviceInventory;->sendDeviceConnectionIntent(IILjava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/audio/AudioDeviceInventory;->sendDeviceConnectionIntent(IILjava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/audio/AudioDeviceInventory;->setBluetoothActiveDevice(Lcom/android/server/audio/AudioDeviceBroker$BtDeviceInfo;)I
 PLcom/android/server/audio/AudioDeviceInventory;->setCurrentAudioRouteNameIfPossible(Ljava/lang/String;Z)V
 PLcom/android/server/audio/AudioDeviceInventory;->setPreferredDevicesForStrategySync(ILjava/util/List;)I
-PLcom/android/server/audio/AudioDeviceInventory;->setWiredDeviceConnectionState(Landroid/media/AudioDeviceAttributes;ILjava/lang/String;)I
+HSPLcom/android/server/audio/AudioDeviceInventory;->setWiredDeviceConnectionState(Landroid/media/AudioDeviceAttributes;ILjava/lang/String;)I
 HSPLcom/android/server/audio/AudioDeviceInventory;->startWatchingRoutes(Landroid/media/IAudioRoutesObserver;)Landroid/media/AudioRoutesInfo;
-PLcom/android/server/audio/AudioDeviceInventory;->updateAudioRoutes(II)V
+HSPLcom/android/server/audio/AudioDeviceInventory;->updateAudioRoutes(II)V
 HSPLcom/android/server/audio/AudioEventLogger$Event;-><clinit>()V
 HSPLcom/android/server/audio/AudioEventLogger$Event;-><init>()V
 HSPLcom/android/server/audio/AudioEventLogger$Event;->printLog(ILjava/lang/String;)Lcom/android/server/audio/AudioEventLogger$Event;
@@ -12213,7 +12732,7 @@
 PLcom/android/server/audio/AudioService$$ExternalSyntheticLambda11;-><init>(Landroid/media/AudioDeviceAttributes;[I)V
 PLcom/android/server/audio/AudioService$$ExternalSyntheticLambda11;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/audio/AudioService$$ExternalSyntheticLambda12;-><init>(Lcom/android/server/audio/AudioService;)V
-PLcom/android/server/audio/AudioService$$ExternalSyntheticLambda12;->onSensorPrivacyChanged(IZ)V
+HSPLcom/android/server/audio/AudioService$$ExternalSyntheticLambda12;->onSensorPrivacyChanged(IZ)V
 HSPLcom/android/server/audio/AudioService$$ExternalSyntheticLambda13;-><init>()V
 HSPLcom/android/server/audio/AudioService$$ExternalSyntheticLambda13;->test(Ljava/lang/Object;)Z
 PLcom/android/server/audio/AudioService$$ExternalSyntheticLambda3;-><init>(Landroid/media/AudioDeviceAttributes;[I)V
@@ -12228,7 +12747,7 @@
 HSPLcom/android/server/audio/AudioService$1;->onError(I)V
 HSPLcom/android/server/audio/AudioService$2;-><init>(Lcom/android/server/audio/AudioService;)V
 HSPLcom/android/server/audio/AudioService$3;-><init>(Lcom/android/server/audio/AudioService;)V
-HPLcom/android/server/audio/AudioService$3;->dispatchPlaybackConfigChange(Ljava/util/List;Z)V
+HSPLcom/android/server/audio/AudioService$3;->dispatchPlaybackConfigChange(Ljava/util/List;Z)V
 HSPLcom/android/server/audio/AudioService$4;-><init>(Lcom/android/server/audio/AudioService;)V
 HPLcom/android/server/audio/AudioService$4;->dispatchRecordingConfigChange(Ljava/util/List;)V
 PLcom/android/server/audio/AudioService$5;-><init>(Lcom/android/server/audio/AudioService;Landroid/media/IVolumeController;)V
@@ -12241,28 +12760,28 @@
 HSPLcom/android/server/audio/AudioService$AudioHandler;->handleMessage(Landroid/os/Message;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/audio/PlaybackActivityMonitor;Lcom/android/server/audio/PlaybackActivityMonitor;]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;]Lcom/android/server/audio/RecordingActivityMonitor;Lcom/android/server/audio/RecordingActivityMonitor;]Lcom/android/server/audio/AudioEventLogger;Lcom/android/server/audio/AudioEventLogger;]Lcom/android/server/audio/AudioService$AudioHandler;Lcom/android/server/audio/AudioService$AudioHandler;]Lcom/android/server/audio/AudioDeviceBroker;Lcom/android/server/audio/AudioDeviceBroker;]Landroid/media/MediaMetrics$Item;Landroid/media/MediaMetrics$Item;]Lcom/android/server/audio/AudioSystemAdapter;Lcom/android/server/audio/AudioSystemAdapter;]Lcom/android/server/audio/AudioService$SetModeDeathHandler;Lcom/android/server/audio/AudioService$SetModeDeathHandler;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/audio/SystemServerAdapter;Lcom/android/server/audio/SystemServerAdapter;
 PLcom/android/server/audio/AudioService$AudioHandler;->onPersistSafeVolumeState(I)V
 PLcom/android/server/audio/AudioService$AudioHandler;->persistRingerMode(I)V
-PLcom/android/server/audio/AudioService$AudioHandler;->persistVolume(Lcom/android/server/audio/AudioService$VolumeStreamState;I)V
+HPLcom/android/server/audio/AudioService$AudioHandler;->persistVolume(Lcom/android/server/audio/AudioService$VolumeStreamState;I)V
 HSPLcom/android/server/audio/AudioService$AudioHandler;->setAllVolumes(Lcom/android/server/audio/AudioService$VolumeStreamState;)V
 PLcom/android/server/audio/AudioService$AudioPolicyProxy$UnregisterOnStopCallback;-><init>(Lcom/android/server/audio/AudioService$AudioPolicyProxy;)V
 PLcom/android/server/audio/AudioService$AudioPolicyProxy$UnregisterOnStopCallback;-><init>(Lcom/android/server/audio/AudioService$AudioPolicyProxy;Lcom/android/server/audio/AudioService$AudioPolicyProxy$UnregisterOnStopCallback-IA;)V
 PLcom/android/server/audio/AudioService$AudioPolicyProxy$UnregisterOnStopCallback;->onStop()V
-PLcom/android/server/audio/AudioService$AudioPolicyProxy;-><init>(Lcom/android/server/audio/AudioService;Landroid/media/audiopolicy/AudioPolicyConfig;Landroid/media/audiopolicy/IAudioPolicyCallback;ZZZZLandroid/media/projection/IMediaProjection;)V
-PLcom/android/server/audio/AudioService$AudioPolicyProxy;->binderDied()V
-PLcom/android/server/audio/AudioService$AudioPolicyProxy;->connectMixes()I
+HPLcom/android/server/audio/AudioService$AudioPolicyProxy;-><init>(Lcom/android/server/audio/AudioService;Landroid/media/audiopolicy/AudioPolicyConfig;Landroid/media/audiopolicy/IAudioPolicyCallback;ZZZZLandroid/media/projection/IMediaProjection;)V
+HPLcom/android/server/audio/AudioService$AudioPolicyProxy;->binderDied()V
+HPLcom/android/server/audio/AudioService$AudioPolicyProxy;->connectMixes()I
 PLcom/android/server/audio/AudioService$AudioPolicyProxy;->getRegistrationId()Ljava/lang/String;
 PLcom/android/server/audio/AudioService$AudioPolicyProxy;->hasMixAffectingUsage(II)Z
 PLcom/android/server/audio/AudioService$AudioPolicyProxy;->logFriendlyAttributeDeviceArrayMap(Ljava/lang/String;Ljava/util/Map;Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/server/audio/AudioService$AudioPolicyProxy;->release()V
+HPLcom/android/server/audio/AudioService$AudioPolicyProxy;->release()V
 PLcom/android/server/audio/AudioService$AudioPolicyProxy;->setupDeviceAffinities()I
 PLcom/android/server/audio/AudioService$AudioPolicyProxy;->toLogFriendlyString()Ljava/lang/String;
 HSPLcom/android/server/audio/AudioService$AudioServiceBroadcastReceiver;-><init>(Lcom/android/server/audio/AudioService;)V
 HSPLcom/android/server/audio/AudioService$AudioServiceBroadcastReceiver;-><init>(Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService$AudioServiceBroadcastReceiver-IA;)V
-HPLcom/android/server/audio/AudioService$AudioServiceBroadcastReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/audio/AudioService$AudioServiceBroadcastReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/audio/AudioService$AudioServiceInternal;-><init>(Lcom/android/server/audio/AudioService;)V
 PLcom/android/server/audio/AudioService$AudioServiceInternal;->addAssistantServiceUid(I)V
 HSPLcom/android/server/audio/AudioService$AudioServiceInternal;->getRingerModeInternal()I
 PLcom/android/server/audio/AudioService$AudioServiceInternal;->removeAssistantServiceUid(I)V
-HPLcom/android/server/audio/AudioService$AudioServiceInternal;->setAccessibilityServiceUids(Landroid/util/IntArray;)V
+HSPLcom/android/server/audio/AudioService$AudioServiceInternal;->setAccessibilityServiceUids(Landroid/util/IntArray;)V
 HPLcom/android/server/audio/AudioService$AudioServiceInternal;->setInputMethodServiceUid(I)V
 HSPLcom/android/server/audio/AudioService$AudioServiceInternal;->setRingerModeDelegate(Landroid/media/AudioManagerInternal$RingerModeDelegate;)V
 HSPLcom/android/server/audio/AudioService$AudioServiceInternal;->setRingerModeInternal(ILjava/lang/String;)V
@@ -12270,7 +12789,7 @@
 HSPLcom/android/server/audio/AudioService$AudioServiceInternal;->updateRingerModeAffectedStreamsInternal()V
 HSPLcom/android/server/audio/AudioService$AudioServiceUserRestrictionsListener;-><init>(Lcom/android/server/audio/AudioService;)V
 HSPLcom/android/server/audio/AudioService$AudioServiceUserRestrictionsListener;-><init>(Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService$AudioServiceUserRestrictionsListener-IA;)V
-PLcom/android/server/audio/AudioService$AudioServiceUserRestrictionsListener;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
+HSPLcom/android/server/audio/AudioService$AudioServiceUserRestrictionsListener;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
 HSPLcom/android/server/audio/AudioService$AudioSystemThread;-><init>(Lcom/android/server/audio/AudioService;)V
 HSPLcom/android/server/audio/AudioService$AudioSystemThread;->run()V
 PLcom/android/server/audio/AudioService$DeviceVolumeUpdate;-><init>(IIILjava/lang/String;)V
@@ -12282,6 +12801,10 @@
 HSPLcom/android/server/audio/AudioService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/audio/AudioService$Lifecycle;->onBootPhase(I)V
 HSPLcom/android/server/audio/AudioService$Lifecycle;->onStart()V
+PLcom/android/server/audio/AudioService$LoadSoundEffectReply;-><init>()V
+PLcom/android/server/audio/AudioService$LoadSoundEffectReply;-><init>(Lcom/android/server/audio/AudioService$LoadSoundEffectReply-IA;)V
+PLcom/android/server/audio/AudioService$LoadSoundEffectReply;->run(Z)V
+PLcom/android/server/audio/AudioService$LoadSoundEffectReply;->waitForLoaded(I)Z
 HSPLcom/android/server/audio/AudioService$MyHdmiCecVolumeControlFeatureListener;-><init>(Lcom/android/server/audio/AudioService;)V
 HSPLcom/android/server/audio/AudioService$MyHdmiCecVolumeControlFeatureListener;-><init>(Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService$MyHdmiCecVolumeControlFeatureListener-IA;)V
 HSPLcom/android/server/audio/AudioService$MyHdmiControlStatusChangeListenerCallback;-><init>(Lcom/android/server/audio/AudioService;)V
@@ -12292,6 +12815,7 @@
 HSPLcom/android/server/audio/AudioService$RestorableParameters;-><init>(Lcom/android/server/audio/AudioService$RestorableParameters-IA;)V
 PLcom/android/server/audio/AudioService$RestorableParameters;->restoreAll()V
 PLcom/android/server/audio/AudioService$RmtSbmxFullVolDeathHandler;-><init>(Lcom/android/server/audio/AudioService;Landroid/os/IBinder;)V
+PLcom/android/server/audio/AudioService$RmtSbmxFullVolDeathHandler;->binderDied()V
 PLcom/android/server/audio/AudioService$RmtSbmxFullVolDeathHandler;->forget()V
 PLcom/android/server/audio/AudioService$RmtSbmxFullVolDeathHandler;->isHandlerFor(Landroid/os/IBinder;)Z
 HSPLcom/android/server/audio/AudioService$RoleObserver;-><init>(Lcom/android/server/audio/AudioService;)V
@@ -12312,21 +12836,21 @@
 PLcom/android/server/audio/AudioService$SetModeDeathHandler;->setPlaybackActive(Z)V
 PLcom/android/server/audio/AudioService$SetModeDeathHandler;->setRecordingActive(Z)V
 HSPLcom/android/server/audio/AudioService$SettingsObserver;-><init>(Lcom/android/server/audio/AudioService;)V
-HPLcom/android/server/audio/AudioService$SettingsObserver;->onChange(Z)V
-HPLcom/android/server/audio/AudioService$SettingsObserver;->updateEncodedSurroundOutput()V
+HSPLcom/android/server/audio/AudioService$SettingsObserver;->onChange(Z)V
+HSPLcom/android/server/audio/AudioService$SettingsObserver;->updateEncodedSurroundOutput()V
 HSPLcom/android/server/audio/AudioService$VolumeController;-><init>(Lcom/android/server/audio/AudioService;)V
 HPLcom/android/server/audio/AudioService$VolumeController;->asBinder()Landroid/os/IBinder;
-HPLcom/android/server/audio/AudioService$VolumeController;->binder(Landroid/media/IVolumeController;)Landroid/os/IBinder;
+HPLcom/android/server/audio/AudioService$VolumeController;->binder(Landroid/media/IVolumeController;)Landroid/os/IBinder;+]Landroid/media/IVolumeController;Landroid/media/IVolumeController$Stub$Proxy;
 HPLcom/android/server/audio/AudioService$VolumeController;->isSameBinder(Landroid/media/IVolumeController;)Z
 HSPLcom/android/server/audio/AudioService$VolumeController;->loadSettings(Landroid/content/ContentResolver;)V
 PLcom/android/server/audio/AudioService$VolumeController;->postDismiss()V
 PLcom/android/server/audio/AudioService$VolumeController;->postDisplaySafeVolumeWarning(I)V
-PLcom/android/server/audio/AudioService$VolumeController;->postVolumeChanged(II)V
+HPLcom/android/server/audio/AudioService$VolumeController;->postVolumeChanged(II)V
 PLcom/android/server/audio/AudioService$VolumeController;->setA11yMode(I)V
 PLcom/android/server/audio/AudioService$VolumeController;->setController(Landroid/media/IVolumeController;)V
-PLcom/android/server/audio/AudioService$VolumeController;->setLayoutDirection(I)V
+HSPLcom/android/server/audio/AudioService$VolumeController;->setLayoutDirection(I)V
 HPLcom/android/server/audio/AudioService$VolumeController;->setVisible(Z)V
-HPLcom/android/server/audio/AudioService$VolumeController;->suppressAdjustment(IIZ)Z
+HPLcom/android/server/audio/AudioService$VolumeController;->suppressAdjustment(IIZ)Z+]Lcom/android/server/audio/AudioSystemAdapter;Lcom/android/server/audio/AudioSystemAdapter;
 PLcom/android/server/audio/AudioService$VolumeController;->toString()Ljava/lang/String;
 PLcom/android/server/audio/AudioService$VolumeGroupState;->-$$Nest$mdump(Lcom/android/server/audio/AudioService$VolumeGroupState;Ljava/io/PrintWriter;)V
 HSPLcom/android/server/audio/AudioService$VolumeGroupState;-><init>(Lcom/android/server/audio/AudioService;Landroid/media/audiopolicy/AudioVolumeGroup;)V
@@ -12342,7 +12866,7 @@
 HSPLcom/android/server/audio/AudioService$VolumeGroupState;->setVolumeIndexInt(III)V
 HSPLcom/android/server/audio/AudioService$VolumeStreamState$1;-><init>(Lcom/android/server/audio/AudioService$VolumeStreamState;I)V
 HSPLcom/android/server/audio/AudioService$VolumeStreamState$1;->put(II)V
-HSPLcom/android/server/audio/AudioService$VolumeStreamState$1;->record(Ljava/lang/String;II)V
+HSPLcom/android/server/audio/AudioService$VolumeStreamState$1;->record(Ljava/lang/String;II)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/media/MediaMetrics$Item;Landroid/media/MediaMetrics$Item;
 PLcom/android/server/audio/AudioService$VolumeStreamState;->-$$Nest$fgetmIndexMap(Lcom/android/server/audio/AudioService$VolumeStreamState;)Landroid/util/SparseIntArray;
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->-$$Nest$fgetmIndexMax(Lcom/android/server/audio/AudioService$VolumeStreamState;)I
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->-$$Nest$fgetmIndexMin(Lcom/android/server/audio/AudioService$VolumeStreamState;)I
@@ -12353,10 +12877,10 @@
 PLcom/android/server/audio/AudioService$VolumeStreamState;->-$$Nest$mhasValidSettingsName(Lcom/android/server/audio/AudioService$VolumeStreamState;)Z
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;-><init>(Lcom/android/server/audio/AudioService;Ljava/lang/String;I)V
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;-><init>(Lcom/android/server/audio/AudioService;Ljava/lang/String;ILcom/android/server/audio/AudioService$VolumeStreamState-IA;)V
-PLcom/android/server/audio/AudioService$VolumeStreamState;->adjustIndex(IILjava/lang/String;Z)Z
+HPLcom/android/server/audio/AudioService$VolumeStreamState;->adjustIndex(IILjava/lang/String;Z)Z
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->applyAllVolumes()V
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->applyDeviceVolume_syncVSS(I)V
-HSPLcom/android/server/audio/AudioService$VolumeStreamState;->checkFixedVolumeDevices()V
+HSPLcom/android/server/audio/AudioService$VolumeStreamState;->checkFixedVolumeDevices()V+]Landroid/util/SparseIntArray;Lcom/android/server/audio/AudioService$VolumeStreamState$1;]Lcom/android/server/audio/AudioService$VolumeStreamState;Lcom/android/server/audio/AudioService$VolumeStreamState;
 HPLcom/android/server/audio/AudioService$VolumeStreamState;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/audio/AudioService$VolumeStreamState;->getAbsoluteVolumeIndex(I)I
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->getIndex(I)I+]Landroid/util/SparseIntArray;Lcom/android/server/audio/AudioService$VolumeStreamState$1;
@@ -12366,7 +12890,7 @@
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->getSettingNameForDevice(I)Ljava/lang/String;
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->getStreamType()I
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->getValidIndex(IZ)I
-HSPLcom/android/server/audio/AudioService$VolumeStreamState;->hasIndexForDevice(I)Z
+HSPLcom/android/server/audio/AudioService$VolumeStreamState;->hasIndexForDevice(I)Z+]Landroid/util/SparseIntArray;Lcom/android/server/audio/AudioService$VolumeStreamState$1;
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->hasValidSettingsName()Z
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->isFullyMuted()Z
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->mute(Z)Z
@@ -12374,18 +12898,19 @@
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->observeDevicesForStream_syncVSS(Z)Ljava/util/Set;+]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;]Ljava/util/Set;Ljava/util/TreeSet;]Lcom/android/server/audio/SystemServerAdapter;Lcom/android/server/audio/SystemServerAdapter;
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->readSettings()V
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->setAllIndexes(Lcom/android/server/audio/AudioService$VolumeStreamState;Ljava/lang/String;)V
-HSPLcom/android/server/audio/AudioService$VolumeStreamState;->setIndex(IILjava/lang/String;Z)Z+]Landroid/util/SparseIntArray;Lcom/android/server/audio/AudioService$VolumeStreamState$1;]Lcom/android/server/audio/AudioService$VolumeStreamState;Lcom/android/server/audio/AudioService$VolumeStreamState;]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;]Landroid/content/Intent;Landroid/content/Intent;
+PLcom/android/server/audio/AudioService$VolumeStreamState;->setAllIndexesToMax()V
+HSPLcom/android/server/audio/AudioService$VolumeStreamState;->setIndex(IILjava/lang/String;Z)Z+]Landroid/util/SparseIntArray;Lcom/android/server/audio/AudioService$VolumeStreamState$1;]Lcom/android/server/audio/AudioService$VolumeStreamState;Lcom/android/server/audio/AudioService$VolumeStreamState;]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;]Ljava/util/Set;Ljava/util/HashSet;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->setStreamVolumeIndex(II)V
 HSPLcom/android/server/audio/AudioService$VolumeStreamState;->updateNoPermMinIndex(I)V
 PLcom/android/server/audio/AudioService;->$r8$lambda$6zwpTwKtfV17WlF6YozYpBI1CnU(Lcom/android/server/audio/AudioService;Landroid/media/AudioDeviceAttributes;)V
 PLcom/android/server/audio/AudioService;->$r8$lambda$ABo62gMJnz51Jmjxxjg465bnC_8(Landroid/media/AudioDeviceAttributes;[ILandroid/media/IMuteAwaitConnectionCallback;)V
 PLcom/android/server/audio/AudioService;->$r8$lambda$G2ebNHzeeCIXu_MvK3RlabWpp_s(Landroid/media/AudioDeviceAttributes;[ILandroid/media/IMuteAwaitConnectionCallback;)V
-PLcom/android/server/audio/AudioService;->$r8$lambda$JCVGOAK2cL0AGdhB5tax4l3VFS8(Lcom/android/server/audio/AudioService;IZ)V
+HSPLcom/android/server/audio/AudioService;->$r8$lambda$JCVGOAK2cL0AGdhB5tax4l3VFS8(Lcom/android/server/audio/AudioService;IZ)V
 PLcom/android/server/audio/AudioService;->$r8$lambda$LCpMsvmXhW1f3aBCBrnAe_QyEjQ(Landroid/media/AudioDeviceAttributes;[ILandroid/media/IMuteAwaitConnectionCallback;)V
 HSPLcom/android/server/audio/AudioService;->$r8$lambda$fII_JcFxyUM70baG5t26lf5LoFM(Landroid/media/AudioAttributes;)Z
 PLcom/android/server/audio/AudioService;->$r8$lambda$v0OtDUv8ygI03xjYHySo1L6MBLQ(Landroid/media/AudioDeviceAttributes;[ILandroid/media/IMuteAwaitConnectionCallback;)V
 PLcom/android/server/audio/AudioService;->-$$Nest$fgetmAccessibilityServiceUids(Lcom/android/server/audio/AudioService;)[I
-HPLcom/android/server/audio/AudioService;->-$$Nest$fgetmAccessibilityServiceUidsLock(Lcom/android/server/audio/AudioService;)Ljava/lang/Object;
+HSPLcom/android/server/audio/AudioService;->-$$Nest$fgetmAccessibilityServiceUidsLock(Lcom/android/server/audio/AudioService;)Ljava/lang/Object;
 HSPLcom/android/server/audio/AudioService;->-$$Nest$fgetmAudioEventWakeLock(Lcom/android/server/audio/AudioService;)Landroid/os/PowerManager$WakeLock;
 HSPLcom/android/server/audio/AudioService;->-$$Nest$fgetmAudioHandler(Lcom/android/server/audio/AudioService;)Lcom/android/server/audio/AudioService$AudioHandler;
 PLcom/android/server/audio/AudioService;->-$$Nest$fgetmAudioPolicies(Lcom/android/server/audio/AudioService;)Ljava/util/HashMap;
@@ -12397,73 +12922,73 @@
 PLcom/android/server/audio/AudioService;->-$$Nest$fgetmDeviceBroker(Lcom/android/server/audio/AudioService;)Lcom/android/server/audio/AudioDeviceBroker;
 PLcom/android/server/audio/AudioService;->-$$Nest$fgetmDockState(Lcom/android/server/audio/AudioService;)I
 PLcom/android/server/audio/AudioService;->-$$Nest$fgetmDynPolicyLogger(Lcom/android/server/audio/AudioService;)Lcom/android/server/audio/AudioEventLogger;
-PLcom/android/server/audio/AudioService;->-$$Nest$fgetmEncodedSurroundMode(Lcom/android/server/audio/AudioService;)I
+HSPLcom/android/server/audio/AudioService;->-$$Nest$fgetmEncodedSurroundMode(Lcom/android/server/audio/AudioService;)I
 PLcom/android/server/audio/AudioService;->-$$Nest$fgetmInputMethodServiceUid(Lcom/android/server/audio/AudioService;)I
 PLcom/android/server/audio/AudioService;->-$$Nest$fgetmInputMethodServiceUidLock(Lcom/android/server/audio/AudioService;)Ljava/lang/Object;
 PLcom/android/server/audio/AudioService;->-$$Nest$fgetmIsSingleVolume(Lcom/android/server/audio/AudioService;)Z
-PLcom/android/server/audio/AudioService;->-$$Nest$fgetmMediaFocusControl(Lcom/android/server/audio/AudioService;)Lcom/android/server/audio/MediaFocusControl;
+HSPLcom/android/server/audio/AudioService;->-$$Nest$fgetmMediaFocusControl(Lcom/android/server/audio/AudioService;)Lcom/android/server/audio/MediaFocusControl;
 PLcom/android/server/audio/AudioService;->-$$Nest$fgetmMonitorRotation(Lcom/android/server/audio/AudioService;)Z
 PLcom/android/server/audio/AudioService;->-$$Nest$fgetmPlaybackMonitor(Lcom/android/server/audio/AudioService;)Lcom/android/server/audio/PlaybackActivityMonitor;
 PLcom/android/server/audio/AudioService;->-$$Nest$fgetmPrescaleAbsoluteVolume(Lcom/android/server/audio/AudioService;)[F
 PLcom/android/server/audio/AudioService;->-$$Nest$fgetmRecordMonitor(Lcom/android/server/audio/AudioService;)Lcom/android/server/audio/RecordingActivityMonitor;
 HSPLcom/android/server/audio/AudioService;->-$$Nest$fgetmRingerModeDelegate(Lcom/android/server/audio/AudioService;)Landroid/media/AudioManagerInternal$RingerModeDelegate;
-PLcom/android/server/audio/AudioService;->-$$Nest$fgetmSensorPrivacyManagerInternal(Lcom/android/server/audio/AudioService;)Landroid/hardware/SensorPrivacyManagerInternal;
+HSPLcom/android/server/audio/AudioService;->-$$Nest$fgetmSensorPrivacyManagerInternal(Lcom/android/server/audio/AudioService;)Landroid/hardware/SensorPrivacyManagerInternal;
 HSPLcom/android/server/audio/AudioService;->-$$Nest$fgetmSettings(Lcom/android/server/audio/AudioService;)Lcom/android/server/audio/SettingsAdapter;
 HSPLcom/android/server/audio/AudioService;->-$$Nest$fgetmSettingsLock(Lcom/android/server/audio/AudioService;)Ljava/lang/Object;
 HSPLcom/android/server/audio/AudioService;->-$$Nest$fgetmSfxHelper(Lcom/android/server/audio/AudioService;)Lcom/android/server/audio/SoundEffectsHelper;
 HSPLcom/android/server/audio/AudioService;->-$$Nest$fgetmSpatializerHelper(Lcom/android/server/audio/AudioService;)Lcom/android/server/audio/SpatializerHelper;
 HSPLcom/android/server/audio/AudioService;->-$$Nest$fgetmStreamStates(Lcom/android/server/audio/AudioService;)[Lcom/android/server/audio/AudioService$VolumeStreamState;
-PLcom/android/server/audio/AudioService;->-$$Nest$fgetmSupportsMicPrivacyToggle(Lcom/android/server/audio/AudioService;)Z
-PLcom/android/server/audio/AudioService;->-$$Nest$fgetmSurroundModeChanged(Lcom/android/server/audio/AudioService;)Z
+HSPLcom/android/server/audio/AudioService;->-$$Nest$fgetmSupportsMicPrivacyToggle(Lcom/android/server/audio/AudioService;)Z
+HSPLcom/android/server/audio/AudioService;->-$$Nest$fgetmSurroundModeChanged(Lcom/android/server/audio/AudioService;)Z
 HSPLcom/android/server/audio/AudioService;->-$$Nest$fgetmSystemReady(Lcom/android/server/audio/AudioService;)Z
 HSPLcom/android/server/audio/AudioService;->-$$Nest$fgetmSystemServer(Lcom/android/server/audio/AudioService;)Lcom/android/server/audio/SystemServerAdapter;
 HSPLcom/android/server/audio/AudioService;->-$$Nest$fgetmUseFixedVolume(Lcom/android/server/audio/AudioService;)Z
-PLcom/android/server/audio/AudioService;->-$$Nest$fgetmUserSwitchedReceived(Lcom/android/server/audio/AudioService;)Z
+HSPLcom/android/server/audio/AudioService;->-$$Nest$fgetmUserSwitchedReceived(Lcom/android/server/audio/AudioService;)Z
 PLcom/android/server/audio/AudioService;->-$$Nest$fgetmVolumeController(Lcom/android/server/audio/AudioService;)Lcom/android/server/audio/AudioService$VolumeController;
-PLcom/android/server/audio/AudioService;->-$$Nest$fputmAccessibilityServiceUids(Lcom/android/server/audio/AudioService;[I)V
+HSPLcom/android/server/audio/AudioService;->-$$Nest$fputmAccessibilityServiceUids(Lcom/android/server/audio/AudioService;[I)V
 HSPLcom/android/server/audio/AudioService;->-$$Nest$fputmAudioHandler(Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService$AudioHandler;)V
 PLcom/android/server/audio/AudioService;->-$$Nest$fputmAudioPolicyCounter(Lcom/android/server/audio/AudioService;I)V
 PLcom/android/server/audio/AudioService;->-$$Nest$fputmDockState(Lcom/android/server/audio/AudioService;I)V
 HSPLcom/android/server/audio/AudioService;->-$$Nest$fputmEnabledSurroundFormats(Lcom/android/server/audio/AudioService;Ljava/lang/String;)V
 HSPLcom/android/server/audio/AudioService;->-$$Nest$fputmEncodedSurroundMode(Lcom/android/server/audio/AudioService;I)V
 PLcom/android/server/audio/AudioService;->-$$Nest$fputmInputMethodServiceUid(Lcom/android/server/audio/AudioService;I)V
-PLcom/android/server/audio/AudioService;->-$$Nest$fputmMicMuteFromPrivacyToggle(Lcom/android/server/audio/AudioService;Z)V
+HSPLcom/android/server/audio/AudioService;->-$$Nest$fputmMicMuteFromPrivacyToggle(Lcom/android/server/audio/AudioService;Z)V
 HSPLcom/android/server/audio/AudioService;->-$$Nest$fputmRingerModeDelegate(Lcom/android/server/audio/AudioService;Landroid/media/AudioManagerInternal$RingerModeDelegate;)V
-PLcom/android/server/audio/AudioService;->-$$Nest$fputmSurroundModeChanged(Lcom/android/server/audio/AudioService;Z)V
-PLcom/android/server/audio/AudioService;->-$$Nest$fputmUserSwitchedReceived(Lcom/android/server/audio/AudioService;Z)V
-PLcom/android/server/audio/AudioService;->-$$Nest$mgetCurrentUserId(Lcom/android/server/audio/AudioService;)I
+HSPLcom/android/server/audio/AudioService;->-$$Nest$fputmSurroundModeChanged(Lcom/android/server/audio/AudioService;Z)V
+HSPLcom/android/server/audio/AudioService;->-$$Nest$fputmUserSwitchedReceived(Lcom/android/server/audio/AudioService;Z)V
+HSPLcom/android/server/audio/AudioService;->-$$Nest$mgetCurrentUserId(Lcom/android/server/audio/AudioService;)I
 HSPLcom/android/server/audio/AudioService;->-$$Nest$mgetDeviceSetForStreamDirect(Lcom/android/server/audio/AudioService;I)Ljava/util/Set;
 PLcom/android/server/audio/AudioService;->-$$Nest$mhandleAudioEffectBroadcast(Lcom/android/server/audio/AudioService;Landroid/content/Context;Landroid/content/Intent;)V
-PLcom/android/server/audio/AudioService;->-$$Nest$mhandleConfigurationChanged(Lcom/android/server/audio/AudioService;Landroid/content/Context;)V
+HSPLcom/android/server/audio/AudioService;->-$$Nest$mhandleConfigurationChanged(Lcom/android/server/audio/AudioService;Landroid/content/Context;)V
 HSPLcom/android/server/audio/AudioService;->-$$Nest$misA2dpAbsoluteVolumeDevice(Lcom/android/server/audio/AudioService;I)Z
 HSPLcom/android/server/audio/AudioService;->-$$Nest$misAbsoluteVolumeDevice(Lcom/android/server/audio/AudioService;I)Z
 HSPLcom/android/server/audio/AudioService;->-$$Nest$misFixedVolumeDevice(Lcom/android/server/audio/AudioService;I)Z
-HSPLcom/android/server/audio/AudioService;->-$$Nest$misFullVolumeDevice(Lcom/android/server/audio/AudioService;I)Z
+HSPLcom/android/server/audio/AudioService;->-$$Nest$misFullVolumeDevice(Lcom/android/server/audio/AudioService;I)Z+]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;
 PLcom/android/server/audio/AudioService;->-$$Nest$mkillBackgroundUserProcessesWithRecordAudioPermission(Lcom/android/server/audio/AudioService;Landroid/content/pm/UserInfo;)V
-PLcom/android/server/audio/AudioService;->-$$Nest$monAccessoryPlugMediaUnmute(Lcom/android/server/audio/AudioService;I)V
+HSPLcom/android/server/audio/AudioService;->-$$Nest$monAccessoryPlugMediaUnmute(Lcom/android/server/audio/AudioService;I)V
 PLcom/android/server/audio/AudioService;->-$$Nest$monAddAssistantServiceUids(Lcom/android/server/audio/AudioService;[I)V
 PLcom/android/server/audio/AudioService;->-$$Nest$monCheckMusicActive(Lcom/android/server/audio/AudioService;Ljava/lang/String;)V
-PLcom/android/server/audio/AudioService;->-$$Nest$monConfigureSafeVolume(Lcom/android/server/audio/AudioService;ZLjava/lang/String;)V
+HSPLcom/android/server/audio/AudioService;->-$$Nest$monConfigureSafeVolume(Lcom/android/server/audio/AudioService;ZLjava/lang/String;)V
 PLcom/android/server/audio/AudioService;->-$$Nest$monDispatchAudioServerStateChange(Lcom/android/server/audio/AudioService;Z)V
 HSPLcom/android/server/audio/AudioService;->-$$Nest$monInitStreamsAndVolumes(Lcom/android/server/audio/AudioService;)V
 HSPLcom/android/server/audio/AudioService;->-$$Nest$monObserveDevicesForAllStreams(Lcom/android/server/audio/AudioService;I)V
-HPLcom/android/server/audio/AudioService;->-$$Nest$monPlaybackConfigChange(Lcom/android/server/audio/AudioService;Ljava/util/List;)V
+HSPLcom/android/server/audio/AudioService;->-$$Nest$monPlaybackConfigChange(Lcom/android/server/audio/AudioService;Ljava/util/List;)V
 PLcom/android/server/audio/AudioService;->-$$Nest$monRecordingConfigChange(Lcom/android/server/audio/AudioService;Ljava/util/List;)V
 PLcom/android/server/audio/AudioService;->-$$Nest$monReinitVolumes(Lcom/android/server/audio/AudioService;Ljava/lang/String;)V
 PLcom/android/server/audio/AudioService;->-$$Nest$monRemoveAssistantServiceUids(Lcom/android/server/audio/AudioService;[I)V
 PLcom/android/server/audio/AudioService;->-$$Nest$monSetVolumeIndexOnDevice(Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService$DeviceVolumeUpdate;)V
-PLcom/android/server/audio/AudioService;->-$$Nest$monUpdateAccessibilityServiceUids(Lcom/android/server/audio/AudioService;)V
+HSPLcom/android/server/audio/AudioService;->-$$Nest$monUpdateAccessibilityServiceUids(Lcom/android/server/audio/AudioService;)V
 HSPLcom/android/server/audio/AudioService;->-$$Nest$monUpdateRingerModeServiceInt(Lcom/android/server/audio/AudioService;)V
-PLcom/android/server/audio/AudioService;->-$$Nest$mreadAudioSettings(Lcom/android/server/audio/AudioService;Z)V
-PLcom/android/server/audio/AudioService;->-$$Nest$mreadDockAudioSettings(Lcom/android/server/audio/AudioService;Landroid/content/ContentResolver;)V
+HSPLcom/android/server/audio/AudioService;->-$$Nest$mreadAudioSettings(Lcom/android/server/audio/AudioService;Z)V
+HSPLcom/android/server/audio/AudioService;->-$$Nest$mreadDockAudioSettings(Lcom/android/server/audio/AudioService;Landroid/content/ContentResolver;)V
 HSPLcom/android/server/audio/AudioService;->-$$Nest$mrescaleIndex(Lcom/android/server/audio/AudioService;III)I
 HSPLcom/android/server/audio/AudioService;->-$$Nest$msendBroadcastToAll(Lcom/android/server/audio/AudioService;Landroid/content/Intent;)V
-PLcom/android/server/audio/AudioService;->-$$Nest$msendEnabledSurroundFormats(Lcom/android/server/audio/AudioService;Landroid/content/ContentResolver;Z)V
-PLcom/android/server/audio/AudioService;->-$$Nest$msetMicrophoneMuteNoCallerCheck(Lcom/android/server/audio/AudioService;I)V
+HSPLcom/android/server/audio/AudioService;->-$$Nest$msendEnabledSurroundFormats(Lcom/android/server/audio/AudioService;Landroid/content/ContentResolver;Z)V
+HSPLcom/android/server/audio/AudioService;->-$$Nest$msetMicrophoneMuteNoCallerCheck(Lcom/android/server/audio/AudioService;I)V
 PLcom/android/server/audio/AudioService;->-$$Nest$msetRingerModeInt(Lcom/android/server/audio/AudioService;IZ)V
 HSPLcom/android/server/audio/AudioService;->-$$Nest$mupdateAssistantUIdLocked(Lcom/android/server/audio/AudioService;Z)V
-PLcom/android/server/audio/AudioService;->-$$Nest$mupdateMasterBalance(Lcom/android/server/audio/AudioService;Landroid/content/ContentResolver;)V
-PLcom/android/server/audio/AudioService;->-$$Nest$mupdateMasterMono(Lcom/android/server/audio/AudioService;Landroid/content/ContentResolver;)V
+HSPLcom/android/server/audio/AudioService;->-$$Nest$mupdateMasterBalance(Lcom/android/server/audio/AudioService;Landroid/content/ContentResolver;)V
+HSPLcom/android/server/audio/AudioService;->-$$Nest$mupdateMasterMono(Lcom/android/server/audio/AudioService;Landroid/content/ContentResolver;)V
 HSPLcom/android/server/audio/AudioService;->-$$Nest$mupdateRingerAndZenModeAffectedStreams(Lcom/android/server/audio/AudioService;)Z
 HSPLcom/android/server/audio/AudioService;->-$$Nest$smsendMsg(Landroid/os/Handler;IIIILjava/lang/Object;I)V
 HSPLcom/android/server/audio/AudioService;-><clinit>()V
@@ -12471,10 +12996,10 @@
 HSPLcom/android/server/audio/AudioService;-><init>(Landroid/content/Context;Lcom/android/server/audio/AudioSystemAdapter;Lcom/android/server/audio/SystemServerAdapter;Lcom/android/server/audio/SettingsAdapter;Landroid/os/Looper;)V
 HPLcom/android/server/audio/AudioService;->abandonAudioFocus(Landroid/media/IAudioFocusDispatcher;Ljava/lang/String;Landroid/media/AudioAttributes;Ljava/lang/String;)I
 HSPLcom/android/server/audio/AudioService;->addAssistantServiceUidsLocked([I)V
-HPLcom/android/server/audio/AudioService;->adjustStreamVolume(IIILjava/lang/String;Ljava/lang/String;IILjava/lang/String;ZI)V
-PLcom/android/server/audio/AudioService;->adjustStreamVolumeForUid(IIILjava/lang/String;IILandroid/os/UserHandle;I)V
+HPLcom/android/server/audio/AudioService;->adjustStreamVolume(IIILjava/lang/String;Ljava/lang/String;IILjava/lang/String;ZI)V+]Landroid/os/Handler;Lcom/android/server/audio/AudioService$AudioHandler;]Lcom/android/server/audio/AudioService$VolumeStreamState;Lcom/android/server/audio/AudioService$VolumeStreamState;]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;]Ljava/util/Set;Ljava/util/HashSet;
+HPLcom/android/server/audio/AudioService;->adjustStreamVolumeForUid(IIILjava/lang/String;IILandroid/os/UserHandle;I)V
 PLcom/android/server/audio/AudioService;->adjustStreamVolumeWithAttribution(IIILjava/lang/String;Ljava/lang/String;)V
-HPLcom/android/server/audio/AudioService;->adjustSuggestedStreamVolume(IIILjava/lang/String;Ljava/lang/String;IIZI)V
+HPLcom/android/server/audio/AudioService;->adjustSuggestedStreamVolume(IIILjava/lang/String;Ljava/lang/String;IIZI)V+]Lcom/android/server/audio/AudioEventLogger;Lcom/android/server/audio/AudioEventLogger;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/media/MediaMetrics$Item;Landroid/media/MediaMetrics$Item;]Lcom/android/server/audio/AudioSystemAdapter;Lcom/android/server/audio/AudioSystemAdapter;]Lcom/android/server/audio/AudioService$VolumeController;Lcom/android/server/audio/AudioService$VolumeController;]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;
 HPLcom/android/server/audio/AudioService;->adjustSuggestedStreamVolumeForUid(IIILjava/lang/String;IILandroid/os/UserHandle;I)V
 HSPLcom/android/server/audio/AudioService;->areNavigationRepeatSoundEffectsEnabled()Z
 PLcom/android/server/audio/AudioService;->avrcpSupportsAbsoluteVolume(Ljava/lang/String;Z)V
@@ -12482,7 +13007,7 @@
 HSPLcom/android/server/audio/AudioService;->broadcastRingerMode(Ljava/lang/String;I)V
 HSPLcom/android/server/audio/AudioService;->broadcastVibrateSetting(I)V
 PLcom/android/server/audio/AudioService;->callerHasPermission(Ljava/lang/String;)Z
-HPLcom/android/server/audio/AudioService;->callingHasAudioSettingsPermission()Z
+HPLcom/android/server/audio/AudioService;->callingHasAudioSettingsPermission()Z+]Landroid/content/Context;Landroid/app/ContextImpl;
 PLcom/android/server/audio/AudioService;->callingOrSelfHasAudioSettingsPermission()Z
 PLcom/android/server/audio/AudioService;->canChangeAccessibilityVolume()Z
 PLcom/android/server/audio/AudioService;->canProjectAudio(Landroid/media/projection/IMediaProjection;)Z
@@ -12493,18 +13018,18 @@
 PLcom/android/server/audio/AudioService;->checkAudioSettingsPermission(Ljava/lang/String;)Z
 PLcom/android/server/audio/AudioService;->checkForRingerModeChange(IIIZLjava/lang/String;I)I
 PLcom/android/server/audio/AudioService;->checkMonitorAudioServerStatePermission()V
-PLcom/android/server/audio/AudioService;->checkMusicActive(ILjava/lang/String;)V
+HSPLcom/android/server/audio/AudioService;->checkMusicActive(ILjava/lang/String;)V
 HSPLcom/android/server/audio/AudioService;->checkMuteAffectedStreams()V
-PLcom/android/server/audio/AudioService;->checkMuteAwaitConnection()V
-PLcom/android/server/audio/AudioService;->checkNoteAppOp(IILjava/lang/String;Ljava/lang/String;)Z
-PLcom/android/server/audio/AudioService;->checkSafeMediaVolume(III)Z
+HSPLcom/android/server/audio/AudioService;->checkMuteAwaitConnection()V
+HPLcom/android/server/audio/AudioService;->checkNoteAppOp(IILjava/lang/String;Ljava/lang/String;)Z+]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
+HPLcom/android/server/audio/AudioService;->checkSafeMediaVolume(III)Z
 HSPLcom/android/server/audio/AudioService;->checkVolumeRangeInitialization(Ljava/lang/String;)Z
 HSPLcom/android/server/audio/AudioService;->createAudioSystemThread()V
 HSPLcom/android/server/audio/AudioService;->createStreamStates()V
 PLcom/android/server/audio/AudioService;->disableSafeMediaVolume(Ljava/lang/String;)V
 PLcom/android/server/audio/AudioService;->discardRmtSbmxFullVolDeathHandlerFor(Landroid/os/IBinder;)Z
-PLcom/android/server/audio/AudioService;->dispatchMode(I)V
-PLcom/android/server/audio/AudioService;->dispatchMuteAwaitConnection(Ljava/util/function/Consumer;)V
+HPLcom/android/server/audio/AudioService;->dispatchMode(I)V
+HPLcom/android/server/audio/AudioService;->dispatchMuteAwaitConnection(Ljava/util/function/Consumer;)V
 HPLcom/android/server/audio/AudioService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/audio/AudioService;->dumpAccessibilityServiceUids(Ljava/io/PrintWriter;)V
 PLcom/android/server/audio/AudioService;->dumpAssistantServicesUids(Ljava/io/PrintWriter;)V
@@ -12518,22 +13043,22 @@
 PLcom/android/server/audio/AudioService;->dumpVolumeGroups(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/audio/AudioService;->enforceModifyAudioRoutingPermission()V
 PLcom/android/server/audio/AudioService;->enforceModifyDefaultAudioEffectsPermission()V
-HPLcom/android/server/audio/AudioService;->enforceQueryStateOrModifyRoutingPermission()V
+HPLcom/android/server/audio/AudioService;->enforceQueryStateOrModifyRoutingPermission()V+]Landroid/content/Context;Landroid/app/ContextImpl;
 HPLcom/android/server/audio/AudioService;->enforceQueryStatePermission()V
-PLcom/android/server/audio/AudioService;->enforceSafeMediaVolume(Ljava/lang/String;)V
-HSPLcom/android/server/audio/AudioService;->enforceVolumeController(Ljava/lang/String;)V
+HSPLcom/android/server/audio/AudioService;->enforceSafeMediaVolume(Ljava/lang/String;)V
+HSPLcom/android/server/audio/AudioService;->enforceVolumeController(Ljava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLcom/android/server/audio/AudioService;->ensureValidAttributes(Landroid/media/audiopolicy/AudioVolumeGroup;)V
-PLcom/android/server/audio/AudioService;->ensureValidDirection(I)V
+HPLcom/android/server/audio/AudioService;->ensureValidDirection(I)V
 HSPLcom/android/server/audio/AudioService;->ensureValidRingerMode(I)V
 HSPLcom/android/server/audio/AudioService;->ensureValidStreamType(I)V
 PLcom/android/server/audio/AudioService;->forceFocusDuckingForAccessibility(Landroid/media/AudioAttributes;II)Z
 PLcom/android/server/audio/AudioService;->forceRemoteSubmixFullVolume(ZLandroid/os/IBinder;)V
 HPLcom/android/server/audio/AudioService;->forceVolumeControlStream(ILandroid/os/IBinder;)V
 HPLcom/android/server/audio/AudioService;->getActivePlaybackConfigurations()Ljava/util/List;
-HPLcom/android/server/audio/AudioService;->getActiveRecordingConfigurations()Ljava/util/List;
-HPLcom/android/server/audio/AudioService;->getActiveStreamType(I)I
+HSPLcom/android/server/audio/AudioService;->getActiveRecordingConfigurations()Ljava/util/List;
+HPLcom/android/server/audio/AudioService;->getActiveStreamType(I)I+]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;
 HSPLcom/android/server/audio/AudioService;->getAudioHalPids()Ljava/util/Set;
-HSPLcom/android/server/audio/AudioService;->getAudioModeOwnerHandler()Lcom/android/server/audio/AudioService$SetModeDeathHandler;
+HSPLcom/android/server/audio/AudioService;->getAudioModeOwnerHandler()Lcom/android/server/audio/AudioService$SetModeDeathHandler;+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 PLcom/android/server/audio/AudioService;->getAudioProductStrategies()Ljava/util/List;
 HSPLcom/android/server/audio/AudioService;->getAudioVolumeGroups()Ljava/util/List;
 PLcom/android/server/audio/AudioService;->getAvailableCommunicationDeviceIds()[I
@@ -12542,9 +13067,10 @@
 PLcom/android/server/audio/AudioService;->getCommunicationDevice()I
 HPLcom/android/server/audio/AudioService;->getContentResolver()Landroid/content/ContentResolver;
 HPLcom/android/server/audio/AudioService;->getCurrentAudioFocus()I
-HSPLcom/android/server/audio/AudioService;->getCurrentUserId()I
+HSPLcom/android/server/audio/AudioService;->getCurrentUserId()I+]Landroid/app/IActivityManager;Lcom/android/server/am/ActivityManagerService;
 HSPLcom/android/server/audio/AudioService;->getDeviceForStream(I)I+]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;
-HPLcom/android/server/audio/AudioService;->getDeviceMaskForStream(I)I
+HSPLcom/android/server/audio/AudioService;->getDeviceMaskForStream(I)I+]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;
+PLcom/android/server/audio/AudioService;->getDeviceSensorUuid(Landroid/media/AudioDeviceAttributes;)Ljava/util/UUID;
 HSPLcom/android/server/audio/AudioService;->getDeviceSetForStream(I)Ljava/util/Set;+]Lcom/android/server/audio/AudioService$VolumeStreamState;Lcom/android/server/audio/AudioService$VolumeStreamState;]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;
 HSPLcom/android/server/audio/AudioService;->getDeviceSetForStreamDirect(I)Ljava/util/Set;+]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;
 HSPLcom/android/server/audio/AudioService;->getDeviceVolumeBehaviorInt(Landroid/media/AudioDeviceAttributes;)I
@@ -12552,16 +13078,16 @@
 HPLcom/android/server/audio/AudioService;->getDevicesForAttributes(Landroid/media/AudioAttributes;)Ljava/util/List;
 HSPLcom/android/server/audio/AudioService;->getDevicesForAttributesInt(Landroid/media/AudioAttributes;Z)Ljava/util/ArrayList;+]Lcom/android/server/audio/AudioSystemAdapter;Lcom/android/server/audio/AudioSystemAdapter;
 PLcom/android/server/audio/AudioService;->getFocusRampTimeMs(ILandroid/media/AudioAttributes;)I
-HPLcom/android/server/audio/AudioService;->getIndexRange(I)I
-HPLcom/android/server/audio/AudioService;->getLastAudibleStreamVolume(I)I
-HPLcom/android/server/audio/AudioService;->getMode()I
+HPLcom/android/server/audio/AudioService;->getIndexRange(I)I+]Lcom/android/server/audio/AudioService$VolumeStreamState;Lcom/android/server/audio/AudioService$VolumeStreamState;
+HPLcom/android/server/audio/AudioService;->getLastAudibleStreamVolume(I)I+]Lcom/android/server/audio/AudioService$VolumeStreamState;Lcom/android/server/audio/AudioService$VolumeStreamState;]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;
+HPLcom/android/server/audio/AudioService;->getMode()I+]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;
 HSPLcom/android/server/audio/AudioService;->getModeOwnerPid()I
 PLcom/android/server/audio/AudioService;->getMutingExpectedDevice()Landroid/media/AudioDeviceAttributes;
 PLcom/android/server/audio/AudioService;->getNewRingerMode(III)I
 PLcom/android/server/audio/AudioService;->getProjectionService()Landroid/media/projection/IMediaProjectionManager;
 HSPLcom/android/server/audio/AudioService;->getRingerModeExternal()I
 HSPLcom/android/server/audio/AudioService;->getRingerModeInternal()I
-HPLcom/android/server/audio/AudioService;->getRingtonePlayer()Landroid/media/IRingtonePlayer;
+HSPLcom/android/server/audio/AudioService;->getRingtonePlayer()Landroid/media/IRingtonePlayer;
 HSPLcom/android/server/audio/AudioService;->getSafeUsbMediaVolumeIndex()I
 HSPLcom/android/server/audio/AudioService;->getSettingsNameForDeviceVolumeBehavior(I)Ljava/lang/String;
 PLcom/android/server/audio/AudioService;->getSpatializerCompatibleAudioDevices()Ljava/util/List;
@@ -12571,12 +13097,12 @@
 HSPLcom/android/server/audio/AudioService;->getStreamVolume(I)I+]Lcom/android/server/audio/AudioService$VolumeStreamState;Lcom/android/server/audio/AudioService$VolumeStreamState;]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;
 HSPLcom/android/server/audio/AudioService;->getUiDefaultRescaledIndex(II)I
 PLcom/android/server/audio/AudioService;->getUiSoundsStreamType()I
-PLcom/android/server/audio/AudioService;->getVibrateSetting(I)I
+HSPLcom/android/server/audio/AudioService;->getVibrateSetting(I)I
 PLcom/android/server/audio/AudioService;->handleAudioEffectBroadcast(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/audio/AudioService;->handleBluetoothActiveDeviceChanged(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothDevice;Landroid/media/BluetoothProfileConnectionInfo;)V
-PLcom/android/server/audio/AudioService;->handleConfigurationChanged(Landroid/content/Context;)V
+HSPLcom/android/server/audio/AudioService;->handleConfigurationChanged(Landroid/content/Context;)V
 PLcom/android/server/audio/AudioService;->hasAudioFocusUsers()Z
-PLcom/android/server/audio/AudioService;->hasAudioSettingsPermission(II)Z
+HPLcom/android/server/audio/AudioService;->hasAudioSettingsPermission(II)Z
 PLcom/android/server/audio/AudioService;->hasHapticChannels(Landroid/net/Uri;)Z
 PLcom/android/server/audio/AudioService;->hasHeadTracker(Landroid/media/AudioDeviceAttributes;)Z
 PLcom/android/server/audio/AudioService;->hasMediaDynamicPolicy()Z
@@ -12586,30 +13112,31 @@
 HSPLcom/android/server/audio/AudioService;->initMinStreamVolumeWithoutModifyAudioSettings()V
 HSPLcom/android/server/audio/AudioService;->initVolumeGroupStates()V
 HSPLcom/android/server/audio/AudioService;->isA2dpAbsoluteVolumeDevice(I)Z
-HSPLcom/android/server/audio/AudioService;->isAbsoluteVolumeDevice(I)Z
+HSPLcom/android/server/audio/AudioService;->isAbsoluteVolumeDevice(I)Z+]Ljava/util/Map;Landroid/util/ArrayMap;
 PLcom/android/server/audio/AudioService;->isAlarm(I)Z
-PLcom/android/server/audio/AudioService;->isAndroidNPlus(Ljava/lang/String;)Z
+HPLcom/android/server/audio/AudioService;->isAndroidNPlus(Ljava/lang/String;)Z
 PLcom/android/server/audio/AudioService;->isAudioServerRunning()Z
 HSPLcom/android/server/audio/AudioService;->isBluetoothA2dpOn()Z
-HPLcom/android/server/audio/AudioService;->isBluetoothScoOn()Z
-PLcom/android/server/audio/AudioService;->isCameraSoundForced()Z
+HPLcom/android/server/audio/AudioService;->isBluetoothScoOn()Z+]Lcom/android/server/audio/AudioDeviceBroker;Lcom/android/server/audio/AudioDeviceBroker;
+HPLcom/android/server/audio/AudioService;->isCameraSoundForced()Z
 HSPLcom/android/server/audio/AudioService;->isFixedVolumeDevice(I)Z+]Ljava/util/Set;Ljava/util/HashSet;
-HSPLcom/android/server/audio/AudioService;->isFullVolumeDevice(I)Z
-HSPLcom/android/server/audio/AudioService;->isInCommunication()Z
-PLcom/android/server/audio/AudioService;->isMedia(I)Z
-PLcom/android/server/audio/AudioService;->isMicrophoneMuted()Z
+HSPLcom/android/server/audio/AudioService;->isFullVolumeDevice(I)Z+]Ljava/util/Set;Ljava/util/HashSet;
+HSPLcom/android/server/audio/AudioService;->isInCommunication()Z+]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;]Landroid/telecom/TelecomManager;Landroid/telecom/TelecomManager;
+HSPLcom/android/server/audio/AudioService;->isMedia(I)Z
+HSPLcom/android/server/audio/AudioService;->isMicrophoneMuted()Z
 HSPLcom/android/server/audio/AudioService;->isMicrophoneSupposedToBeMuted()Z
 HPLcom/android/server/audio/AudioService;->isMusicActive(Z)Z
-PLcom/android/server/audio/AudioService;->isMuteAdjust(I)Z
+HPLcom/android/server/audio/AudioService;->isMuteAdjust(I)Z
 PLcom/android/server/audio/AudioService;->isNotificationOrRinger(I)Z
+PLcom/android/server/audio/AudioService;->isPlatformAutomotive()Z
 HSPLcom/android/server/audio/AudioService;->isPlatformTelevision()Z
-PLcom/android/server/audio/AudioService;->isPolicyRegisterAllowed(Landroid/media/audiopolicy/AudioPolicyConfig;ZZLandroid/media/projection/IMediaProjection;)Z
+HPLcom/android/server/audio/AudioService;->isPolicyRegisterAllowed(Landroid/media/audiopolicy/AudioPolicyConfig;ZZLandroid/media/projection/IMediaProjection;)Z
 PLcom/android/server/audio/AudioService;->isSpatializerAvailableForDevice(Landroid/media/AudioDeviceAttributes;)Z
 PLcom/android/server/audio/AudioService;->isSpatializerEnabled()Z
 HPLcom/android/server/audio/AudioService;->isSpeakerphoneOn()Z
 PLcom/android/server/audio/AudioService;->isStreamAffectedByMute(I)Z
 HSPLcom/android/server/audio/AudioService;->isStreamAffectedByRingerMode(I)Z
-HSPLcom/android/server/audio/AudioService;->isStreamMute(I)Z
+HSPLcom/android/server/audio/AudioService;->isStreamMute(I)Z+]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;
 HSPLcom/android/server/audio/AudioService;->isStreamMutedByRingerOrZenMode(I)Z
 HSPLcom/android/server/audio/AudioService;->isSystem(I)Z
 HPLcom/android/server/audio/AudioService;->isUiSoundsStreamType(I)Z
@@ -12624,81 +13151,85 @@
 PLcom/android/server/audio/AudioService;->lambda$muteAwaitConnection$7(Landroid/media/AudioDeviceAttributes;[ILandroid/media/IMuteAwaitConnectionCallback;)V
 PLcom/android/server/audio/AudioService;->lambda$new$0(Landroid/media/AudioDeviceAttributes;)V
 PLcom/android/server/audio/AudioService;->lambda$onMuteAwaitConnectionTimeout$10(Landroid/media/AudioDeviceAttributes;[ILandroid/media/IMuteAwaitConnectionCallback;)V
-PLcom/android/server/audio/AudioService;->lambda$onSystemReady$1(IZ)V
-PLcom/android/server/audio/AudioService;->makeAlsaAddressString(II)Ljava/lang/String;
+HSPLcom/android/server/audio/AudioService;->lambda$onSystemReady$1(IZ)V
+PLcom/android/server/audio/AudioService;->loadSoundEffects()Z
+HSPLcom/android/server/audio/AudioService;->makeAlsaAddressString(II)Ljava/lang/String;
 PLcom/android/server/audio/AudioService;->maybeSendSystemAudioStatusCommand(Z)V
 PLcom/android/server/audio/AudioService;->maybeVibrate(Landroid/os/VibrationEffect;Ljava/lang/String;)Z
-PLcom/android/server/audio/AudioService;->muteAwaitConnection([ILandroid/media/AudioDeviceAttributes;J)V
-HSPLcom/android/server/audio/AudioService;->muteRingerModeStreams()V
-PLcom/android/server/audio/AudioService;->notifyExternalVolumeController(I)Z
+HPLcom/android/server/audio/AudioService;->muteAwaitConnection([ILandroid/media/AudioDeviceAttributes;J)V
+HSPLcom/android/server/audio/AudioService;->muteRingerModeStreams()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseIntArray;Lcom/android/server/audio/AudioService$VolumeStreamState$1;]Lcom/android/server/audio/AudioService$VolumeStreamState;Lcom/android/server/audio/AudioService$VolumeStreamState;]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;
+HPLcom/android/server/audio/AudioService;->notifyExternalVolumeController(I)Z
 HPLcom/android/server/audio/AudioService;->notifyVolumeControllerVisible(Landroid/media/IVolumeController;Z)V
 PLcom/android/server/audio/AudioService;->onAccessibilityServicesStateChanged(Landroid/view/accessibility/AccessibilityManager;)V
-PLcom/android/server/audio/AudioService;->onAccessoryPlugMediaUnmute(I)V
+HSPLcom/android/server/audio/AudioService;->onAccessoryPlugMediaUnmute(I)V
 PLcom/android/server/audio/AudioService;->onAddAssistantServiceUids([I)V
-PLcom/android/server/audio/AudioService;->onAudioServerDied()V
+HPLcom/android/server/audio/AudioService;->onAudioServerDied()V
 PLcom/android/server/audio/AudioService;->onCheckMusicActive(Ljava/lang/String;)V
-PLcom/android/server/audio/AudioService;->onConfigureSafeVolume(ZLjava/lang/String;)V
-PLcom/android/server/audio/AudioService;->onDispatchAudioServerStateChange(Z)V
+HSPLcom/android/server/audio/AudioService;->onConfigureSafeVolume(ZLjava/lang/String;)V
+HPLcom/android/server/audio/AudioService;->onDispatchAudioServerStateChange(Z)V
 HSPLcom/android/server/audio/AudioService;->onIndicateSystemReady()V
 HSPLcom/android/server/audio/AudioService;->onInitSpatializer()V
 HSPLcom/android/server/audio/AudioService;->onInitStreamsAndVolumes()V
 PLcom/android/server/audio/AudioService;->onMuteAwaitConnectionTimeout(Landroid/media/AudioDeviceAttributes;)V
-HSPLcom/android/server/audio/AudioService;->onObserveDevicesForAllStreams(I)V
-HPLcom/android/server/audio/AudioService;->onPlaybackConfigChange(Ljava/util/List;)V+]Landroid/media/AudioPlaybackConfiguration;Landroid/media/AudioPlaybackConfiguration;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Landroid/media/AudioAttributes;Landroid/media/AudioAttributes;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/server/audio/AudioService$SetModeDeathHandler;Lcom/android/server/audio/AudioService$SetModeDeathHandler;]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;]Landroid/content/Context;Landroid/app/ContextImpl;
+HSPLcom/android/server/audio/AudioService;->onObserveDevicesForAllStreams(I)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/audio/AudioService$VolumeStreamState;Lcom/android/server/audio/AudioService$VolumeStreamState;]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;]Ljava/util/Iterator;Ljava/util/TreeMap$KeyIterator;]Ljava/util/Set;Ljava/util/TreeSet;
+PLcom/android/server/audio/AudioService;->onPersistSpatialAudioDeviceSettings()V
+HSPLcom/android/server/audio/AudioService;->onPlaybackConfigChange(Ljava/util/List;)V+]Landroid/media/AudioPlaybackConfiguration;Landroid/media/AudioPlaybackConfiguration;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Landroid/media/AudioAttributes;Landroid/media/AudioAttributes;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/audio/AudioService$SetModeDeathHandler;Lcom/android/server/audio/AudioService$SetModeDeathHandler;]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 PLcom/android/server/audio/AudioService;->onRecordingConfigChange(Ljava/util/List;)V
-PLcom/android/server/audio/AudioService;->onReinitVolumes(Ljava/lang/String;)V
+HPLcom/android/server/audio/AudioService;->onReinitVolumes(Ljava/lang/String;)V
 PLcom/android/server/audio/AudioService;->onRemoveAssistantServiceUids([I)V
-PLcom/android/server/audio/AudioService;->onRoutingUpdatedFromAudioThread()V
-PLcom/android/server/audio/AudioService;->onRoutingUpdatedFromNative()V
-PLcom/android/server/audio/AudioService;->onSetStreamVolume(IIIILjava/lang/String;Z)V
+HSPLcom/android/server/audio/AudioService;->onRoutingUpdatedFromAudioThread()V
+HSPLcom/android/server/audio/AudioService;->onRoutingUpdatedFromNative()V
+HPLcom/android/server/audio/AudioService;->onSetStreamVolume(IIIILjava/lang/String;Z)V
 PLcom/android/server/audio/AudioService;->onSetVolumeIndexOnDevice(Lcom/android/server/audio/AudioService$DeviceVolumeUpdate;)V
 HSPLcom/android/server/audio/AudioService;->onSystemReady()V
 PLcom/android/server/audio/AudioService;->onTouchExplorationStateChanged(Z)V
-PLcom/android/server/audio/AudioService;->onUpdateAccessibilityServiceUids()V
+HSPLcom/android/server/audio/AudioService;->onUpdateAccessibilityServiceUids()V
 HPLcom/android/server/audio/AudioService;->onUpdateAudioMode(IILjava/lang/String;Z)V
 HSPLcom/android/server/audio/AudioService;->onUpdateRingerModeServiceInt()V
 PLcom/android/server/audio/AudioService;->onVolumeRangeInitRequestFromNative()V
+PLcom/android/server/audio/AudioService;->persistSpatialAudioDeviceSettings()V
 HPLcom/android/server/audio/AudioService;->playSoundEffect(II)V
 HPLcom/android/server/audio/AudioService;->playSoundEffectVolume(IF)V
-HPLcom/android/server/audio/AudioService;->playerAttributes(ILandroid/media/AudioAttributes;)V
+HSPLcom/android/server/audio/AudioService;->playerAttributes(ILandroid/media/AudioAttributes;)V
 HPLcom/android/server/audio/AudioService;->playerEvent(III)V+]Lcom/android/server/audio/PlaybackActivityMonitor;Lcom/android/server/audio/PlaybackActivityMonitor;
 PLcom/android/server/audio/AudioService;->playerSessionId(II)V
-PLcom/android/server/audio/AudioService;->postAccessoryPlugMediaUnmute(I)V
-PLcom/android/server/audio/AudioService;->postObserveDevicesForAllStreams()V
+HSPLcom/android/server/audio/AudioService;->postAccessoryPlugMediaUnmute(I)V
+PLcom/android/server/audio/AudioService;->postInitSpatializerHeadTrackingSensors()V
+HSPLcom/android/server/audio/AudioService;->postObserveDevicesForAllStreams()V
 HSPLcom/android/server/audio/AudioService;->postObserveDevicesForAllStreams(I)V
 PLcom/android/server/audio/AudioService;->postSetVolumeIndexOnDevice(IIILjava/lang/String;)V
 HSPLcom/android/server/audio/AudioService;->postUpdateRingerModeServiceInt()V
 HPLcom/android/server/audio/AudioService;->querySoundEffectsEnabled(I)Z
 HSPLcom/android/server/audio/AudioService;->queueMsgUnderWakeLock(Landroid/os/Handler;IIILjava/lang/Object;I)V
 HSPLcom/android/server/audio/AudioService;->readAndSetLowRamDevice()V
-PLcom/android/server/audio/AudioService;->readAudioSettings(Z)V
+HSPLcom/android/server/audio/AudioService;->readAudioSettings(Z)V
 HSPLcom/android/server/audio/AudioService;->readCameraSoundForced()Z
 HSPLcom/android/server/audio/AudioService;->readDockAudioSettings(Landroid/content/ContentResolver;)V
 HSPLcom/android/server/audio/AudioService;->readPersistedSettings()V
 HSPLcom/android/server/audio/AudioService;->readUserRestrictions()V
-PLcom/android/server/audio/AudioService;->readVolumeGroupsSettings()V
+HSPLcom/android/server/audio/AudioService;->readVolumeGroupsSettings()V
 HPLcom/android/server/audio/AudioService;->recorderEvent(II)V
-PLcom/android/server/audio/AudioService;->registerAudioPolicy(Landroid/media/audiopolicy/AudioPolicyConfig;Landroid/media/audiopolicy/IAudioPolicyCallback;ZZZZLandroid/media/projection/IMediaProjection;)Ljava/lang/String;
+HPLcom/android/server/audio/AudioService;->registerAudioPolicy(Landroid/media/audiopolicy/AudioPolicyConfig;Landroid/media/audiopolicy/IAudioPolicyCallback;ZZZZLandroid/media/projection/IMediaProjection;)Ljava/lang/String;
 PLcom/android/server/audio/AudioService;->registerAudioServerStateDispatcher(Landroid/media/IAudioServerStateDispatcher;)V
 PLcom/android/server/audio/AudioService;->registerCommunicationDeviceDispatcher(Landroid/media/ICommunicationDeviceDispatcher;)V
 PLcom/android/server/audio/AudioService;->registerModeDispatcher(Landroid/media/IAudioModeDispatcher;)V
 PLcom/android/server/audio/AudioService;->registerMuteAwaitConnectionDispatcher(Landroid/media/IMuteAwaitConnectionCallback;Z)V
 HSPLcom/android/server/audio/AudioService;->registerPlaybackCallback(Landroid/media/IPlaybackConfigDispatcher;)V
-PLcom/android/server/audio/AudioService;->registerRecordingCallback(Landroid/media/IRecordingConfigDispatcher;)V
+HSPLcom/android/server/audio/AudioService;->registerRecordingCallback(Landroid/media/IRecordingConfigDispatcher;)V
 PLcom/android/server/audio/AudioService;->registerSpatializerCallback(Landroid/media/ISpatializerCallback;)V
-HPLcom/android/server/audio/AudioService;->releasePlayer(I)V
+HSPLcom/android/server/audio/AudioService;->releasePlayer(I)V
 HPLcom/android/server/audio/AudioService;->releaseRecorder(I)V
 PLcom/android/server/audio/AudioService;->removeAssistantServiceUidsLocked([I)V
 HPLcom/android/server/audio/AudioService;->requestAudioFocus(Landroid/media/AudioAttributes;ILandroid/os/IBinder;Landroid/media/IAudioFocusDispatcher;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/media/audiopolicy/IAudioPolicyCallback;I)I
 HSPLcom/android/server/audio/AudioService;->rescaleIndex(III)I
 HSPLcom/android/server/audio/AudioService;->rescaleIndex(IIIII)I
-PLcom/android/server/audio/AudioService;->rescaleStep(III)I
+HPLcom/android/server/audio/AudioService;->rescaleStep(III)I
 HSPLcom/android/server/audio/AudioService;->resetActiveAssistantUidsLocked()V
 PLcom/android/server/audio/AudioService;->resetAssistantServicesUidsLocked()V
-PLcom/android/server/audio/AudioService;->restoreDeviceVolumeBehavior()V
-PLcom/android/server/audio/AudioService;->restoreVolumeGroups()V
+HSPLcom/android/server/audio/AudioService;->restoreDeviceVolumeBehavior()V
+HPLcom/android/server/audio/AudioService;->restoreVolumeGroups()V
 HSPLcom/android/server/audio/AudioService;->retrieveStoredDeviceVolumeBehavior(I)I
-PLcom/android/server/audio/AudioService;->safeMediaVolumeIndex(I)I
+HSPLcom/android/server/audio/AudioService;->safeMediaVolumeIndex(I)I
 PLcom/android/server/audio/AudioService;->safeMediaVolumeStateToString(I)Ljava/lang/String;
 PLcom/android/server/audio/AudioService;->saveMusicActiveMs()V
 HSPLcom/android/server/audio/AudioService;->scheduleLoadSoundEffects()V
@@ -12732,17 +13263,18 @@
 PLcom/android/server/audio/AudioService;->setSafeMediaVolumeEnabled(ZLjava/lang/String;)V
 HPLcom/android/server/audio/AudioService;->setSpeakerphoneOn(Landroid/os/IBinder;Z)V
 HPLcom/android/server/audio/AudioService;->setStreamVolume(IIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;IZ)V
-PLcom/android/server/audio/AudioService;->setStreamVolumeInt(IIIZLjava/lang/String;Z)V
-PLcom/android/server/audio/AudioService;->setStreamVolumeWithAttribution(IIILjava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/audio/AudioService;->setStreamVolumeForUid(IIILjava/lang/String;IILandroid/os/UserHandle;I)V
+HPLcom/android/server/audio/AudioService;->setStreamVolumeInt(IIIZLjava/lang/String;Z)V
+HPLcom/android/server/audio/AudioService;->setStreamVolumeWithAttribution(IIILjava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/audio/AudioService;->setVolumeController(Landroid/media/IVolumeController;)V
 PLcom/android/server/audio/AudioService;->setVolumePolicy(Landroid/media/VolumePolicy;)V
-PLcom/android/server/audio/AudioService;->setWiredDeviceConnectionState(Landroid/media/AudioDeviceAttributes;ILjava/lang/String;)V
-HSPLcom/android/server/audio/AudioService;->shouldZenMuteStream(I)Z+]Landroid/app/NotificationManager;Landroid/app/NotificationManager;
+HSPLcom/android/server/audio/AudioService;->setWiredDeviceConnectionState(Landroid/media/AudioDeviceAttributes;ILjava/lang/String;)V
+HSPLcom/android/server/audio/AudioService;->shouldZenMuteStream(I)Z+]Landroid/app/NotificationManager;Landroid/app/NotificationManager;]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;
 PLcom/android/server/audio/AudioService;->silenceRingerModeInternal(Ljava/lang/String;)V
 PLcom/android/server/audio/AudioService;->startBluetoothSco(Landroid/os/IBinder;I)V
 PLcom/android/server/audio/AudioService;->startBluetoothScoInt(Landroid/os/IBinder;IILjava/lang/String;)V
 HSPLcom/android/server/audio/AudioService;->startWatchingRoutes(Landroid/media/IAudioRoutesObserver;)Landroid/media/AudioRoutesInfo;
-PLcom/android/server/audio/AudioService;->stopBluetoothSco(Landroid/os/IBinder;)V
+HPLcom/android/server/audio/AudioService;->stopBluetoothSco(Landroid/os/IBinder;)V
 HSPLcom/android/server/audio/AudioService;->systemReady()V
 HSPLcom/android/server/audio/AudioService;->trackPlayer(Landroid/media/PlayerBase$PlayerIdCard;)I
 HPLcom/android/server/audio/AudioService;->trackRecorder(Landroid/os/IBinder;)I
@@ -12771,26 +13303,26 @@
 HSPLcom/android/server/audio/AudioService;->updateRingerAndZenModeAffectedStreams()Z
 HSPLcom/android/server/audio/AudioService;->updateStreamVolumeAlias(ZLjava/lang/String;)V
 HSPLcom/android/server/audio/AudioService;->updateVibratorInfos()V
-HSPLcom/android/server/audio/AudioService;->updateVolumeStates(IILjava/lang/String;)V
+HSPLcom/android/server/audio/AudioService;->updateVolumeStates(IILjava/lang/String;)V+]Landroid/media/AudioAttributes$Builder;Landroid/media/AudioAttributes$Builder;]Lcom/android/server/audio/AudioService$VolumeStreamState;Lcom/android/server/audio/AudioService$VolumeStreamState;]Landroid/media/AudioDeviceAttributes;Landroid/media/AudioDeviceAttributes;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioService;
 HSPLcom/android/server/audio/AudioService;->updateZenModeAffectedStreams()Z
 HSPLcom/android/server/audio/AudioService;->validateAudioAttributesUsage(Landroid/media/AudioAttributes;)V
 HPLcom/android/server/audio/AudioService;->volumeAdjustmentAllowedByDnd(II)Z
 HSPLcom/android/server/audio/AudioService;->waitForAudioHandlerCreation()V
-HPLcom/android/server/audio/AudioService;->wasStreamActiveRecently(II)Z
+HPLcom/android/server/audio/AudioService;->wasStreamActiveRecently(II)Z+]Lcom/android/server/audio/AudioSystemAdapter;Lcom/android/server/audio/AudioSystemAdapter;
 PLcom/android/server/audio/AudioService;->wouldToggleZenMode(I)Z
 HSPLcom/android/server/audio/AudioServiceEvents$ForceUseEvent;-><init>(IILjava/lang/String;)V
 PLcom/android/server/audio/AudioServiceEvents$ForceUseEvent;->eventToString()Ljava/lang/String;
 PLcom/android/server/audio/AudioServiceEvents$PhoneStateEvent;-><init>(Ljava/lang/String;IIII)V
 PLcom/android/server/audio/AudioServiceEvents$PhoneStateEvent;->eventToString()Ljava/lang/String;
-PLcom/android/server/audio/AudioServiceEvents$PhoneStateEvent;->logMetricEvent()V
+HPLcom/android/server/audio/AudioServiceEvents$PhoneStateEvent;->logMetricEvent()V
 PLcom/android/server/audio/AudioServiceEvents$VolumeEvent;-><init>(II)V
 PLcom/android/server/audio/AudioServiceEvents$VolumeEvent;-><init>(III)V
 HPLcom/android/server/audio/AudioServiceEvents$VolumeEvent;-><init>(IIIILjava/lang/String;)V
 PLcom/android/server/audio/AudioServiceEvents$VolumeEvent;-><init>(IIZ)V
 PLcom/android/server/audio/AudioServiceEvents$VolumeEvent;-><init>(IZII)V
 PLcom/android/server/audio/AudioServiceEvents$VolumeEvent;->eventToString()Ljava/lang/String;
-HPLcom/android/server/audio/AudioServiceEvents$VolumeEvent;->logMetricEvent()V
-PLcom/android/server/audio/AudioServiceEvents$WiredDevConnectEvent;-><init>(Lcom/android/server/audio/AudioDeviceInventory$WiredDeviceConnectionState;)V
+HPLcom/android/server/audio/AudioServiceEvents$VolumeEvent;->logMetricEvent()V+]Landroid/media/MediaMetrics$Item;Landroid/media/MediaMetrics$Item;
+HSPLcom/android/server/audio/AudioServiceEvents$WiredDevConnectEvent;-><init>(Lcom/android/server/audio/AudioDeviceInventory$WiredDeviceConnectionState;)V
 PLcom/android/server/audio/AudioServiceEvents$WiredDevConnectEvent;->eventToString()Ljava/lang/String;
 HSPLcom/android/server/audio/AudioSystemAdapter;-><clinit>()V
 HSPLcom/android/server/audio/AudioSystemAdapter;-><init>()V
@@ -12802,7 +13334,7 @@
 HSPLcom/android/server/audio/AudioSystemAdapter;->invalidateRoutingCache()V
 HSPLcom/android/server/audio/AudioSystemAdapter;->isMicrophoneMuted()Z
 HPLcom/android/server/audio/AudioSystemAdapter;->isStreamActive(II)Z
-PLcom/android/server/audio/AudioSystemAdapter;->isStreamActiveRemotely(II)Z
+HPLcom/android/server/audio/AudioSystemAdapter;->isStreamActiveRemotely(II)Z
 HSPLcom/android/server/audio/AudioSystemAdapter;->muteMicrophone(Z)I
 HSPLcom/android/server/audio/AudioSystemAdapter;->onRoutingUpdated()V
 PLcom/android/server/audio/AudioSystemAdapter;->onVolumeRangeInitializationRequested()V
@@ -12810,10 +13342,10 @@
 HSPLcom/android/server/audio/AudioSystemAdapter;->removeDevicesRoleForStrategy(II)I
 PLcom/android/server/audio/AudioSystemAdapter;->setAllowedCapturePolicy(II)I
 PLcom/android/server/audio/AudioSystemAdapter;->setCurrentImeUid(I)I
-PLcom/android/server/audio/AudioSystemAdapter;->setDeviceConnectionState(Landroid/media/AudioDeviceAttributes;II)I
+HSPLcom/android/server/audio/AudioSystemAdapter;->setDeviceConnectionState(Landroid/media/AudioDeviceAttributes;II)I
 PLcom/android/server/audio/AudioSystemAdapter;->setDevicesRoleForStrategy(IILjava/util/List;)I
 HSPLcom/android/server/audio/AudioSystemAdapter;->setForceUse(II)I
-PLcom/android/server/audio/AudioSystemAdapter;->setParameters(Ljava/lang/String;)I
+HSPLcom/android/server/audio/AudioSystemAdapter;->setParameters(Ljava/lang/String;)I
 PLcom/android/server/audio/AudioSystemAdapter;->setPhoneState(II)I
 HSPLcom/android/server/audio/AudioSystemAdapter;->setRoutingListener(Lcom/android/server/audio/AudioSystemAdapter$OnRoutingUpdatedListener;)V
 HSPLcom/android/server/audio/AudioSystemAdapter;->setVolRangeInitReqListener(Lcom/android/server/audio/AudioSystemAdapter$OnVolRangeInitRequestListener;)V
@@ -12835,13 +13367,13 @@
 PLcom/android/server/audio/BtHelper;->disconnectAllBluetoothProfiles()V
 PLcom/android/server/audio/BtHelper;->disconnectBluetoothScoAudioHelper(Landroid/bluetooth/BluetoothHeadset;Landroid/bluetooth/BluetoothDevice;I)Z
 PLcom/android/server/audio/BtHelper;->disconnectHeadset()V
-PLcom/android/server/audio/BtHelper;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/audio/BtHelper;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/audio/BtHelper;->getA2dpCodec(Landroid/bluetooth/BluetoothDevice;)I
-PLcom/android/server/audio/BtHelper;->getAnonymizedAddress(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;
+HPLcom/android/server/audio/BtHelper;->getAnonymizedAddress(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;
 HSPLcom/android/server/audio/BtHelper;->getBluetoothHeadset()Z
 HPLcom/android/server/audio/BtHelper;->getHeadsetAudioDevice()Landroid/media/AudioDeviceAttributes;
 PLcom/android/server/audio/BtHelper;->getName(Landroid/bluetooth/BluetoothDevice;)Ljava/lang/String;
-PLcom/android/server/audio/BtHelper;->handleBtScoActiveDeviceChange(Landroid/bluetooth/BluetoothDevice;Z)Z
+HPLcom/android/server/audio/BtHelper;->handleBtScoActiveDeviceChange(Landroid/bluetooth/BluetoothDevice;Z)Z
 HPLcom/android/server/audio/BtHelper;->isBluetoothScoOn()Z
 PLcom/android/server/audio/BtHelper;->onAudioServerDiedRestoreA2dp()V
 HSPLcom/android/server/audio/BtHelper;->onBroadcastScoConnectionState(I)V
@@ -12876,7 +13408,7 @@
 HPLcom/android/server/audio/FadeOutManager;->checkFade(Landroid/media/AudioPlaybackConfiguration;)V
 PLcom/android/server/audio/FadeOutManager;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/audio/FadeOutManager;->fadeOutUid(ILjava/util/ArrayList;)V
-HPLcom/android/server/audio/FadeOutManager;->removeReleased(Landroid/media/AudioPlaybackConfiguration;)V
+HSPLcom/android/server/audio/FadeOutManager;->removeReleased(Landroid/media/AudioPlaybackConfiguration;)V
 HPLcom/android/server/audio/FadeOutManager;->unfadeOutUid(ILjava/util/HashMap;)V
 HPLcom/android/server/audio/FocusRequester;-><init>(Landroid/media/AudioAttributes;IILandroid/media/IAudioFocusDispatcher;Landroid/os/IBinder;Ljava/lang/String;Lcom/android/server/audio/MediaFocusControl$AudioFocusDeathHandler;Ljava/lang/String;ILcom/android/server/audio/MediaFocusControl;I)V
 PLcom/android/server/audio/FocusRequester;->dispatchFocusChange(I)I
@@ -12887,15 +13419,15 @@
 PLcom/android/server/audio/FocusRequester;->focusGainToString()Ljava/lang/String;
 PLcom/android/server/audio/FocusRequester;->focusLossForGainRequest(I)I
 PLcom/android/server/audio/FocusRequester;->focusLossToString()Ljava/lang/String;
-PLcom/android/server/audio/FocusRequester;->frameworkHandleFocusLoss(ILcom/android/server/audio/FocusRequester;Z)Z
+HPLcom/android/server/audio/FocusRequester;->frameworkHandleFocusLoss(ILcom/android/server/audio/FocusRequester;Z)Z
 PLcom/android/server/audio/FocusRequester;->getAudioAttributes()Landroid/media/AudioAttributes;
 PLcom/android/server/audio/FocusRequester;->getClientId()Ljava/lang/String;
 PLcom/android/server/audio/FocusRequester;->getClientUid()I
-PLcom/android/server/audio/FocusRequester;->getGainRequest()I
+HPLcom/android/server/audio/FocusRequester;->getGainRequest()I
 PLcom/android/server/audio/FocusRequester;->getGrantFlags()I
 PLcom/android/server/audio/FocusRequester;->getPackageName()Ljava/lang/String;
 PLcom/android/server/audio/FocusRequester;->getSdkTarget()I
-PLcom/android/server/audio/FocusRequester;->handleFocusGain(I)V
+HPLcom/android/server/audio/FocusRequester;->handleFocusGain(I)V
 HPLcom/android/server/audio/FocusRequester;->handleFocusGainFromRequest(I)V
 HPLcom/android/server/audio/FocusRequester;->handleFocusLoss(ILcom/android/server/audio/FocusRequester;Z)V
 PLcom/android/server/audio/FocusRequester;->handleFocusLossFromGain(ILcom/android/server/audio/FocusRequester;Z)Z
@@ -12909,7 +13441,7 @@
 HPLcom/android/server/audio/FocusRequester;->release()V
 HPLcom/android/server/audio/FocusRequester;->toAudioFocusInfo()Landroid/media/AudioFocusInfo;
 PLcom/android/server/audio/MediaFocusControl$1;-><init>(Lcom/android/server/audio/MediaFocusControl;Landroid/media/audiopolicy/IAudioPolicyCallback;)V
-PLcom/android/server/audio/MediaFocusControl$1;->run()V
+HPLcom/android/server/audio/MediaFocusControl$1;->run()V
 PLcom/android/server/audio/MediaFocusControl$2;-><init>(Lcom/android/server/audio/MediaFocusControl;Z)V
 PLcom/android/server/audio/MediaFocusControl$2;->run()V
 HSPLcom/android/server/audio/MediaFocusControl$3;-><init>(Lcom/android/server/audio/MediaFocusControl;Landroid/os/Looper;)V
@@ -12931,9 +13463,9 @@
 HSPLcom/android/server/audio/MediaFocusControl;-><clinit>()V
 HSPLcom/android/server/audio/MediaFocusControl;-><init>(Landroid/content/Context;Lcom/android/server/audio/PlayerFocusEnforcer;)V
 HPLcom/android/server/audio/MediaFocusControl;->abandonAudioFocus(Landroid/media/IAudioFocusDispatcher;Ljava/lang/String;Landroid/media/AudioAttributes;Ljava/lang/String;)I
-PLcom/android/server/audio/MediaFocusControl;->addFocusFollower(Landroid/media/audiopolicy/IAudioPolicyCallback;)V
+HPLcom/android/server/audio/MediaFocusControl;->addFocusFollower(Landroid/media/audiopolicy/IAudioPolicyCallback;)V
 HPLcom/android/server/audio/MediaFocusControl;->canReassignAudioFocus()Z
-PLcom/android/server/audio/MediaFocusControl;->discardAudioFocusOwner()V
+HSPLcom/android/server/audio/MediaFocusControl;->discardAudioFocusOwner()V
 PLcom/android/server/audio/MediaFocusControl;->duckPlayers(Lcom/android/server/audio/FocusRequester;Lcom/android/server/audio/FocusRequester;Z)Z
 PLcom/android/server/audio/MediaFocusControl;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/audio/MediaFocusControl;->dumpFocusStack(Ljava/io/PrintWriter;)V
@@ -12943,7 +13475,7 @@
 HSPLcom/android/server/audio/MediaFocusControl;->getFocusRampTimeMs(ILandroid/media/AudioAttributes;)I
 PLcom/android/server/audio/MediaFocusControl;->hasAudioFocusUsers()Z
 HSPLcom/android/server/audio/MediaFocusControl;->initFocusThreading()V
-PLcom/android/server/audio/MediaFocusControl;->isLockedFocusOwner(Lcom/android/server/audio/FocusRequester;)Z
+HPLcom/android/server/audio/MediaFocusControl;->isLockedFocusOwner(Lcom/android/server/audio/FocusRequester;)Z
 PLcom/android/server/audio/MediaFocusControl;->mustNotifyFocusOwnerOnDuck()Z
 PLcom/android/server/audio/MediaFocusControl;->noFocusForSuspendedApp(Ljava/lang/String;I)V
 PLcom/android/server/audio/MediaFocusControl;->notifyExtPolicyCurrentFocusAsync(Landroid/media/audiopolicy/IAudioPolicyCallback;)V
@@ -12954,7 +13486,7 @@
 PLcom/android/server/audio/MediaFocusControl;->postForgetUidLater(I)V
 HPLcom/android/server/audio/MediaFocusControl;->propagateFocusLossFromGain_syncAf(ILcom/android/server/audio/FocusRequester;Z)V
 PLcom/android/server/audio/MediaFocusControl;->pushBelowLockedFocusOwnersAndPropagate(Lcom/android/server/audio/FocusRequester;)I
-PLcom/android/server/audio/MediaFocusControl;->removeFocusFollower(Landroid/media/audiopolicy/IAudioPolicyCallback;)V
+HPLcom/android/server/audio/MediaFocusControl;->removeFocusFollower(Landroid/media/audiopolicy/IAudioPolicyCallback;)V
 HPLcom/android/server/audio/MediaFocusControl;->removeFocusStackEntry(Ljava/lang/String;ZZ)V
 PLcom/android/server/audio/MediaFocusControl;->removeFocusStackEntryOnDeath(Landroid/os/IBinder;)V
 HPLcom/android/server/audio/MediaFocusControl;->requestAudioFocus(Landroid/media/AudioAttributes;ILandroid/os/IBinder;Landroid/media/IAudioFocusDispatcher;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIZI)I
@@ -12962,7 +13494,7 @@
 PLcom/android/server/audio/MediaFocusControl;->runAudioCheckerForRingOrCallAsync(Z)V
 HSPLcom/android/server/audio/PlaybackActivityMonitor$1;-><init>(Lcom/android/server/audio/PlaybackActivityMonitor;Landroid/os/Looper;)V
 PLcom/android/server/audio/PlaybackActivityMonitor$1;->handleMessage(Landroid/os/Message;)V
-HPLcom/android/server/audio/PlaybackActivityMonitor$AudioAttrEvent;-><init>(ILandroid/media/AudioAttributes;)V
+HSPLcom/android/server/audio/PlaybackActivityMonitor$AudioAttrEvent;-><init>(ILandroid/media/AudioAttributes;)V
 PLcom/android/server/audio/PlaybackActivityMonitor$AudioAttrEvent;->eventToString()Ljava/lang/String;
 PLcom/android/server/audio/PlaybackActivityMonitor$DuckEvent;-><init>(Landroid/media/AudioPlaybackConfiguration;Z)V
 PLcom/android/server/audio/PlaybackActivityMonitor$DuckEvent;->getVSAction()Ljava/lang/String;
@@ -12976,7 +13508,7 @@
 HPLcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;->checkDuck(Landroid/media/AudioPlaybackConfiguration;)V
 HPLcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;->duckUid(ILjava/util/ArrayList;)V
 PLcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;->dump(Ljava/io/PrintWriter;)V
-HPLcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;->removeReleased(Landroid/media/AudioPlaybackConfiguration;)V
+HSPLcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;->removeReleased(Landroid/media/AudioPlaybackConfiguration;)V
 HPLcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;->unduckUid(ILjava/util/HashMap;)V
 PLcom/android/server/audio/PlaybackActivityMonitor$FadeOutEvent;-><init>(Landroid/media/AudioPlaybackConfiguration;Z)V
 PLcom/android/server/audio/PlaybackActivityMonitor$FadeOutEvent;->getVSAction()Ljava/lang/String;
@@ -12985,7 +13517,7 @@
 HSPLcom/android/server/audio/PlaybackActivityMonitor$NewPlayerEvent;-><init>(Landroid/media/AudioPlaybackConfiguration;)V
 HPLcom/android/server/audio/PlaybackActivityMonitor$NewPlayerEvent;->eventToString()Ljava/lang/String;
 HSPLcom/android/server/audio/PlaybackActivityMonitor$PlayMonitorClient;-><init>(Landroid/media/IPlaybackConfigDispatcher;Z)V
-PLcom/android/server/audio/PlaybackActivityMonitor$PlayMonitorClient;->binderDied()V
+HPLcom/android/server/audio/PlaybackActivityMonitor$PlayMonitorClient;->binderDied()V
 HSPLcom/android/server/audio/PlaybackActivityMonitor$PlayMonitorClient;->init()Z
 PLcom/android/server/audio/PlaybackActivityMonitor$PlayMonitorClient;->release()V
 HPLcom/android/server/audio/PlaybackActivityMonitor$PlayerEvent;-><init>(III)V
@@ -13002,9 +13534,10 @@
 HSPLcom/android/server/audio/PlaybackActivityMonitor;-><clinit>()V
 HSPLcom/android/server/audio/PlaybackActivityMonitor;-><init>(Landroid/content/Context;ILjava/util/function/Consumer;)V
 HPLcom/android/server/audio/PlaybackActivityMonitor;->anonymizeForPublicConsumption(Ljava/util/List;)Ljava/util/ArrayList;+]Landroid/media/AudioPlaybackConfiguration;Landroid/media/AudioPlaybackConfiguration;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
-HPLcom/android/server/audio/PlaybackActivityMonitor;->checkConfigurationCaller(ILandroid/media/AudioPlaybackConfiguration;I)Z+]Landroid/media/AudioPlaybackConfiguration;Landroid/media/AudioPlaybackConfiguration;
-HPLcom/android/server/audio/PlaybackActivityMonitor;->checkVolumeForPrivilegedAlarm(Landroid/media/AudioPlaybackConfiguration;I)V+]Landroid/media/AudioPlaybackConfiguration;Landroid/media/AudioPlaybackConfiguration;]Landroid/media/AudioAttributes;Landroid/media/AudioAttributes;
-HPLcom/android/server/audio/PlaybackActivityMonitor;->dispatchPlaybackChange(Z)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/media/IPlaybackConfigDispatcher;Landroid/media/IPlaybackConfigDispatcher$Stub$Proxy;,Lcom/android/server/audio/AudioService$3;,Landroid/media/AudioManager$3;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/audio/PlaybackActivityMonitor;Lcom/android/server/audio/PlaybackActivityMonitor;
+PLcom/android/server/audio/PlaybackActivityMonitor;->cancelMuteAwaitConnection(Ljava/lang/String;)V
+HSPLcom/android/server/audio/PlaybackActivityMonitor;->checkConfigurationCaller(ILandroid/media/AudioPlaybackConfiguration;I)Z+]Landroid/media/AudioPlaybackConfiguration;Landroid/media/AudioPlaybackConfiguration;
+HSPLcom/android/server/audio/PlaybackActivityMonitor;->checkVolumeForPrivilegedAlarm(Landroid/media/AudioPlaybackConfiguration;I)V+]Landroid/media/AudioPlaybackConfiguration;Landroid/media/AudioPlaybackConfiguration;]Landroid/media/AudioAttributes;Landroid/media/AudioAttributes;
+HSPLcom/android/server/audio/PlaybackActivityMonitor;->dispatchPlaybackChange(Z)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/media/IPlaybackConfigDispatcher;Landroid/media/IPlaybackConfigDispatcher$Stub$Proxy;,Lcom/android/server/audio/AudioService$3;,Landroid/media/AudioManager$3;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/audio/PlaybackActivityMonitor;Lcom/android/server/audio/PlaybackActivityMonitor;
 HPLcom/android/server/audio/PlaybackActivityMonitor;->duckPlayers(Lcom/android/server/audio/FocusRequester;Lcom/android/server/audio/FocusRequester;Z)Z
 HPLcom/android/server/audio/PlaybackActivityMonitor;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/audio/PlaybackActivityMonitor;->fadeOutPlayers(Lcom/android/server/audio/FocusRequester;Lcom/android/server/audio/FocusRequester;)Z
@@ -13014,15 +13547,15 @@
 HSPLcom/android/server/audio/PlaybackActivityMonitor;->initEventHandler()V
 PLcom/android/server/audio/PlaybackActivityMonitor;->isPlaybackActiveForUid(I)Z
 HSPLcom/android/server/audio/PlaybackActivityMonitor;->maybeMutePlayerAwaitingConnection(Landroid/media/AudioPlaybackConfiguration;)V
-PLcom/android/server/audio/PlaybackActivityMonitor;->muteAwaitConnection([ILandroid/media/AudioDeviceAttributes;J)V
-PLcom/android/server/audio/PlaybackActivityMonitor;->mutePlayersExpectingDevice([I)V
+HPLcom/android/server/audio/PlaybackActivityMonitor;->muteAwaitConnection([ILandroid/media/AudioDeviceAttributes;J)V
+HPLcom/android/server/audio/PlaybackActivityMonitor;->mutePlayersExpectingDevice([I)V
 PLcom/android/server/audio/PlaybackActivityMonitor;->mutePlayersForCall([I)V
-HPLcom/android/server/audio/PlaybackActivityMonitor;->playerAttributes(ILandroid/media/AudioAttributes;I)V
+HSPLcom/android/server/audio/PlaybackActivityMonitor;->playerAttributes(ILandroid/media/AudioAttributes;I)V
 PLcom/android/server/audio/PlaybackActivityMonitor;->playerDeath(I)V
 HPLcom/android/server/audio/PlaybackActivityMonitor;->playerEvent(IIII)V+]Lcom/android/server/audio/AudioEventLogger;Lcom/android/server/audio/AudioEventLogger;]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/media/AudioPlaybackConfiguration;Landroid/media/AudioPlaybackConfiguration;]Lcom/android/server/audio/FadeOutManager;Lcom/android/server/audio/FadeOutManager;]Lcom/android/server/audio/PlaybackActivityMonitor;Lcom/android/server/audio/PlaybackActivityMonitor;]Lcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;Lcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 PLcom/android/server/audio/PlaybackActivityMonitor;->playerSessionId(III)V
 HSPLcom/android/server/audio/PlaybackActivityMonitor;->registerPlaybackCallback(Landroid/media/IPlaybackConfigDispatcher;Z)V
-HPLcom/android/server/audio/PlaybackActivityMonitor;->releasePlayer(II)V
+HSPLcom/android/server/audio/PlaybackActivityMonitor;->releasePlayer(II)V
 HPLcom/android/server/audio/PlaybackActivityMonitor;->restoreVShapedPlayers(Lcom/android/server/audio/FocusRequester;)V
 PLcom/android/server/audio/PlaybackActivityMonitor;->setAllowedCapturePolicy(II)V
 HSPLcom/android/server/audio/PlaybackActivityMonitor;->trackPlayer(Landroid/media/PlayerBase$PlayerIdCard;)I
@@ -13040,24 +13573,27 @@
 HPLcom/android/server/audio/RecordingActivityMonitor$RecorderDeathHandler;->release()V
 HPLcom/android/server/audio/RecordingActivityMonitor$RecordingEvent;-><init>(IILandroid/media/AudioRecordingConfiguration;)V
 HPLcom/android/server/audio/RecordingActivityMonitor$RecordingEvent;->eventToString()Ljava/lang/String;
-PLcom/android/server/audio/RecordingActivityMonitor$RecordingEvent;->recordEventToString(I)Ljava/lang/String;
+HPLcom/android/server/audio/RecordingActivityMonitor$RecordingEvent;->recordEventToString(I)Ljava/lang/String;
 HPLcom/android/server/audio/RecordingActivityMonitor$RecordingState;-><init>(ILcom/android/server/audio/RecordingActivityMonitor$RecorderDeathHandler;)V
+PLcom/android/server/audio/RecordingActivityMonitor$RecordingState;-><init>(Landroid/media/AudioRecordingConfiguration;)V
 PLcom/android/server/audio/RecordingActivityMonitor$RecordingState;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/audio/RecordingActivityMonitor$RecordingState;->getConfig()Landroid/media/AudioRecordingConfiguration;
+PLcom/android/server/audio/RecordingActivityMonitor$RecordingState;->getPortId()I
 HPLcom/android/server/audio/RecordingActivityMonitor$RecordingState;->getRiid()I
 PLcom/android/server/audio/RecordingActivityMonitor$RecordingState;->hasDeathHandler()Z
-PLcom/android/server/audio/RecordingActivityMonitor$RecordingState;->isActiveConfiguration()Z
+HPLcom/android/server/audio/RecordingActivityMonitor$RecordingState;->isActiveConfiguration()Z
 HPLcom/android/server/audio/RecordingActivityMonitor$RecordingState;->release()V
 HPLcom/android/server/audio/RecordingActivityMonitor$RecordingState;->setActive(Z)Z
-PLcom/android/server/audio/RecordingActivityMonitor$RecordingState;->setConfig(Landroid/media/AudioRecordingConfiguration;)Z
+HPLcom/android/server/audio/RecordingActivityMonitor$RecordingState;->setConfig(Landroid/media/AudioRecordingConfiguration;)Z
 HSPLcom/android/server/audio/RecordingActivityMonitor;-><clinit>()V
 HSPLcom/android/server/audio/RecordingActivityMonitor;-><init>(Landroid/content/Context;)V
 HPLcom/android/server/audio/RecordingActivityMonitor;->anonymizeForPublicConsumption(Ljava/util/List;)Ljava/util/ArrayList;
 HPLcom/android/server/audio/RecordingActivityMonitor;->createRecordingConfiguration(III[IIZI[Landroid/media/audiofx/AudioEffect$Descriptor;[Landroid/media/audiofx/AudioEffect$Descriptor;)Landroid/media/AudioRecordingConfiguration;
 HPLcom/android/server/audio/RecordingActivityMonitor;->dispatchCallbacks(Ljava/util/List;)V
 PLcom/android/server/audio/RecordingActivityMonitor;->dump(Ljava/io/PrintWriter;)V
+PLcom/android/server/audio/RecordingActivityMonitor;->findStateByPortId(I)I
 HPLcom/android/server/audio/RecordingActivityMonitor;->findStateByRiid(I)I
-HPLcom/android/server/audio/RecordingActivityMonitor;->getActiveRecordingConfigurations(Z)Ljava/util/List;
+HSPLcom/android/server/audio/RecordingActivityMonitor;->getActiveRecordingConfigurations(Z)Ljava/util/List;
 HSPLcom/android/server/audio/RecordingActivityMonitor;->initMonitor()V
 HSPLcom/android/server/audio/RecordingActivityMonitor;->isLegacyRemoteSubmixActive()Z
 PLcom/android/server/audio/RecordingActivityMonitor;->isRecordingActiveForUid(I)Z
@@ -13093,6 +13629,7 @@
 HSPLcom/android/server/audio/SettingsAdapter;->getSystemIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)I
 PLcom/android/server/audio/SettingsAdapter;->putGlobalInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z
 PLcom/android/server/audio/SettingsAdapter;->putSecureIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)Z
+PLcom/android/server/audio/SettingsAdapter;->putSecureStringForUser(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;I)Z
 HSPLcom/android/server/audio/SettingsAdapter;->putSystemIntForUser(Landroid/content/ContentResolver;Ljava/lang/String;II)Z
 HSPLcom/android/server/audio/SoundEffectsHelper$1;-><init>(Lcom/android/server/audio/SoundEffectsHelper;)V
 HSPLcom/android/server/audio/SoundEffectsHelper$1;->run(Z)V
@@ -13133,32 +13670,68 @@
 HSPLcom/android/server/audio/SoundEffectsHelper;->startWorker()V
 PLcom/android/server/audio/SoundEffectsHelper;->unloadSoundEffects()V
 HSPLcom/android/server/audio/SpatializerHelper$1;-><init>(I)V
+PLcom/android/server/audio/SpatializerHelper$HelperDynamicSensorCallback;-><init>(Lcom/android/server/audio/SpatializerHelper;)V
+PLcom/android/server/audio/SpatializerHelper$HelperDynamicSensorCallback;-><init>(Lcom/android/server/audio/SpatializerHelper;Lcom/android/server/audio/SpatializerHelper$HelperDynamicSensorCallback-IA;)V
+PLcom/android/server/audio/SpatializerHelper$SADeviceState;-><init>(ILjava/lang/String;)V
 HSPLcom/android/server/audio/SpatializerHelper$SADeviceState;->fromPersistedString(Ljava/lang/String;)Lcom/android/server/audio/SpatializerHelper$SADeviceState;
+PLcom/android/server/audio/SpatializerHelper$SADeviceState;->toPersistableString()Ljava/lang/String;
 PLcom/android/server/audio/SpatializerHelper$SpatializerCallback;-><init>(Lcom/android/server/audio/SpatializerHelper;)V
 PLcom/android/server/audio/SpatializerHelper$SpatializerCallback;-><init>(Lcom/android/server/audio/SpatializerHelper;Lcom/android/server/audio/SpatializerHelper$SpatializerCallback-IA;)V
+PLcom/android/server/audio/SpatializerHelper$SpatializerCallback;->onLevelChanged(B)V
+PLcom/android/server/audio/SpatializerHelper$SpatializerCallback;->onOutputChanged(I)V
 HSPLcom/android/server/audio/SpatializerHelper$SpatializerHeadTrackingCallback;-><init>(Lcom/android/server/audio/SpatializerHelper;)V
 HSPLcom/android/server/audio/SpatializerHelper$SpatializerHeadTrackingCallback;-><init>(Lcom/android/server/audio/SpatializerHelper;Lcom/android/server/audio/SpatializerHelper$SpatializerHeadTrackingCallback-IA;)V
+PLcom/android/server/audio/SpatializerHelper;->-$$Nest$fgetmSpatOutput(Lcom/android/server/audio/SpatializerHelper;)I
+PLcom/android/server/audio/SpatializerHelper;->-$$Nest$fputmSpatLevel(Lcom/android/server/audio/SpatializerHelper;I)V
+PLcom/android/server/audio/SpatializerHelper;->-$$Nest$fputmSpatOutput(Lcom/android/server/audio/SpatializerHelper;I)V
+PLcom/android/server/audio/SpatializerHelper;->-$$Nest$mdispatchOutputUpdate(Lcom/android/server/audio/SpatializerHelper;I)V
+PLcom/android/server/audio/SpatializerHelper;->-$$Nest$mpostInitSensors(Lcom/android/server/audio/SpatializerHelper;)V
+PLcom/android/server/audio/SpatializerHelper;->-$$Nest$smloglogi(Ljava/lang/String;)V
+PLcom/android/server/audio/SpatializerHelper;->-$$Nest$smspatializationLevelToSpatializerInt(B)I
 HSPLcom/android/server/audio/SpatializerHelper;-><clinit>()V
 HSPLcom/android/server/audio/SpatializerHelper;-><init>(Lcom/android/server/audio/AudioService;Lcom/android/server/audio/AudioSystemAdapter;)V
+PLcom/android/server/audio/SpatializerHelper;->addCompatibleAudioDevice(Landroid/media/AudioDeviceAttributes;Z)V
+PLcom/android/server/audio/SpatializerHelper;->addWirelessDeviceIfNew(Landroid/media/AudioDeviceAttributes;)V
+PLcom/android/server/audio/SpatializerHelper;->canBeSpatializedOnDevice(Landroid/media/AudioAttributes;Landroid/media/AudioFormat;[Landroid/media/AudioDeviceAttributes;)Z
+PLcom/android/server/audio/SpatializerHelper;->checkSpatForHeadTracking(Ljava/lang/String;)Z
+PLcom/android/server/audio/SpatializerHelper;->createSpat()V
+PLcom/android/server/audio/SpatializerHelper;->dispatchOutputUpdate(I)V
 HPLcom/android/server/audio/SpatializerHelper;->dump(Ljava/io/PrintWriter;)V
+PLcom/android/server/audio/SpatializerHelper;->evaluateState(Landroid/media/AudioDeviceAttributes;)Landroid/util/Pair;
 PLcom/android/server/audio/SpatializerHelper;->getCapableImmersiveAudioLevel()I
 PLcom/android/server/audio/SpatializerHelper;->getCompatibleAudioDevices()Ljava/util/List;
+PLcom/android/server/audio/SpatializerHelper;->getHeadSensorHandleUpdateTracker()I
+PLcom/android/server/audio/SpatializerHelper;->getSADeviceSettings()Ljava/lang/String;
+PLcom/android/server/audio/SpatializerHelper;->getScreenSensorHandle()I
 PLcom/android/server/audio/SpatializerHelper;->getSupportedHeadTrackingModes()[I
 PLcom/android/server/audio/SpatializerHelper;->hasHeadTracker(Landroid/media/AudioDeviceAttributes;)Z
+PLcom/android/server/audio/SpatializerHelper;->headTrackingModeTypeToSpatializerInt(B)I
 HSPLcom/android/server/audio/SpatializerHelper;->init(Z)V
 PLcom/android/server/audio/SpatializerHelper;->isAvailableForDevice(Landroid/media/AudioDeviceAttributes;)Z
 PLcom/android/server/audio/SpatializerHelper;->isEnabled()Z
 PLcom/android/server/audio/SpatializerHelper;->isWireless(I)Z
+PLcom/android/server/audio/SpatializerHelper;->isWirelessSpeaker(I)Z
+PLcom/android/server/audio/SpatializerHelper;->logDeviceState(Lcom/android/server/audio/SpatializerHelper$SADeviceState;Ljava/lang/String;)V
 HSPLcom/android/server/audio/SpatializerHelper;->loglogi(Ljava/lang/String;)V
+PLcom/android/server/audio/SpatializerHelper;->onInitSensors()V
+PLcom/android/server/audio/SpatializerHelper;->onRoutingUpdated()V
+PLcom/android/server/audio/SpatializerHelper;->postInitSensors()V
 PLcom/android/server/audio/SpatializerHelper;->registerStateCallback(Landroid/media/ISpatializerCallback;)V
 PLcom/android/server/audio/SpatializerHelper;->releaseSpat()V
-PLcom/android/server/audio/SpatializerHelper;->reset(Z)V
+HPLcom/android/server/audio/SpatializerHelper;->reset(Z)V
+PLcom/android/server/audio/SpatializerHelper;->resetCapabilities()V
+PLcom/android/server/audio/SpatializerHelper;->setDesiredHeadTrackingMode(I)V
+PLcom/android/server/audio/SpatializerHelper;->setDispatchAvailableState(Z)V
+PLcom/android/server/audio/SpatializerHelper;->setDispatchFeatureEnabledState(ZLjava/lang/String;)V
 HSPLcom/android/server/audio/SpatializerHelper;->setFeatureEnabled(Z)V
 HSPLcom/android/server/audio/SpatializerHelper;->setSADeviceSettings(Ljava/lang/String;)V
 PLcom/android/server/audio/SpatializerHelper;->setSpatializerEnabledInt(Z)V
+PLcom/android/server/audio/SpatializerHelper;->spatStateString(I)Ljava/lang/String;
+PLcom/android/server/audio/SpatializerHelper;->spatializationLevelToSpatializerInt(B)I
+PLcom/android/server/audio/SpatializerHelper;->spatializerIntToHeadTrackingModeType(I)B
 PLcom/android/server/audio/SpatializerHelper;->unregisterStateCallback(Landroid/media/ISpatializerCallback;)V
 HSPLcom/android/server/audio/SystemServerAdapter$1;-><init>(Lcom/android/server/audio/SystemServerAdapter;)V
-PLcom/android/server/audio/SystemServerAdapter$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/audio/SystemServerAdapter$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/audio/SystemServerAdapter;->-$$Nest$mbroadcastProfileParentStickyIntent(Lcom/android/server/audio/SystemServerAdapter;Landroid/content/Context;Ljava/lang/String;II)V
 HSPLcom/android/server/audio/SystemServerAdapter;-><init>(Landroid/content/Context;)V
 PLcom/android/server/audio/SystemServerAdapter;->broadcastProfileParentStickyIntent(Landroid/content/Context;Ljava/lang/String;II)V
@@ -13172,69 +13745,69 @@
 PLcom/android/server/audio/UuidUtils;->uuidFromAudioDeviceAttributes(Landroid/media/AudioDeviceAttributes;)Ljava/util/UUID;
 HPLcom/android/server/autofill/AutofillInlineSessionController;-><init>(Lcom/android/server/inputmethod/InputMethodManagerInternal;ILandroid/content/ComponentName;Landroid/os/Handler;Ljava/lang/Object;Lcom/android/server/autofill/ui/InlineFillUi$InlineUiEventCallback;)V
 HPLcom/android/server/autofill/AutofillInlineSessionController;->destroyLocked(Landroid/view/autofill/AutofillId;)V
-PLcom/android/server/autofill/AutofillInlineSessionController;->disableFilterMatching(Landroid/view/autofill/AutofillId;)V
-PLcom/android/server/autofill/AutofillInlineSessionController;->filterInlineFillUiLocked(Landroid/view/autofill/AutofillId;Ljava/lang/String;)Z
+HPLcom/android/server/autofill/AutofillInlineSessionController;->disableFilterMatching(Landroid/view/autofill/AutofillId;)V
+HPLcom/android/server/autofill/AutofillInlineSessionController;->filterInlineFillUiLocked(Landroid/view/autofill/AutofillId;Ljava/lang/String;)Z
 PLcom/android/server/autofill/AutofillInlineSessionController;->getInlineSuggestionsRequestLocked()Ljava/util/Optional;
 HPLcom/android/server/autofill/AutofillInlineSessionController;->hideInlineSuggestionsUiLocked(Landroid/view/autofill/AutofillId;)Z
 HPLcom/android/server/autofill/AutofillInlineSessionController;->onCreateInlineSuggestionsRequestLocked(Landroid/view/autofill/AutofillId;Ljava/util/function/Consumer;Landroid/os/Bundle;)V
 HPLcom/android/server/autofill/AutofillInlineSessionController;->requestImeToShowInlineSuggestionsLocked()Z
 PLcom/android/server/autofill/AutofillInlineSessionController;->resetInlineFillUiLocked()V
-PLcom/android/server/autofill/AutofillInlineSessionController;->setInlineFillUiLocked(Lcom/android/server/autofill/ui/InlineFillUi;)Z
-PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl$$ExternalSyntheticLambda0;-><init>()V
+HPLcom/android/server/autofill/AutofillInlineSessionController;->setInlineFillUiLocked(Lcom/android/server/autofill/ui/InlineFillUi;)Z
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl$$ExternalSyntheticLambda0;-><init>()V
 HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl$$ExternalSyntheticLambda1;-><init>()V
-HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V+]Ljava/lang/Boolean;Ljava/lang/Boolean;
 HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl$$ExternalSyntheticLambda2;-><init>()V
 HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl$$ExternalSyntheticLambda3;-><init>()V
-PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;)V
-PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl$$ExternalSyntheticLambda4;-><init>()V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl$$ExternalSyntheticLambda3;-><init>()V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl$$ExternalSyntheticLambda4;-><init>()V
 HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl$$ExternalSyntheticLambda5;-><init>()V
-HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl$$ExternalSyntheticLambda5;-><init>()V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V+]Ljava/lang/Boolean;Ljava/lang/Boolean;
 PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl$$ExternalSyntheticLambda6;-><init>()V
 PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl$$ExternalSyntheticLambda6;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->$r8$lambda$3cUMi5AwXItCfiFDVCUXCimE1C8(Ljava/lang/Object;Landroid/view/inputmethod/InlineSuggestionsRequest;Lcom/android/internal/view/IInlineSuggestionsResponseCallback;)V
 PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->$r8$lambda$4eD-NhaAQgAaWV4xWXp6fTTGpK8(Ljava/lang/Object;ZZ)V
-PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->$r8$lambda$93C0LeU2EHcI07fDOWJQBHwvRtc(Ljava/lang/Object;Landroid/view/inputmethod/InlineSuggestionsRequest;Lcom/android/internal/view/IInlineSuggestionsResponseCallback;)V
-PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->$r8$lambda$T6KGeNAHRvMAx6UVwQDBgY5g03s(Ljava/lang/Object;Landroid/view/autofill/AutofillId;ZZ)V
-PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->$r8$lambda$XS1N3pz3fznES_41qVCFW0CXwhs(Ljava/lang/Object;)V
-PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->$r8$lambda$_toALHf9LhzDDXXTVXT8BjqBe_E(Ljava/lang/Object;ZZ)V
-PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->$r8$lambda$nYWwnndWe0-hXzKg3FU2C6MB78w(Ljava/lang/Object;ZZ)V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->$r8$lambda$93C0LeU2EHcI07fDOWJQBHwvRtc(Ljava/lang/Object;Landroid/view/inputmethod/InlineSuggestionsRequest;Lcom/android/internal/view/IInlineSuggestionsResponseCallback;)V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->$r8$lambda$T6KGeNAHRvMAx6UVwQDBgY5g03s(Ljava/lang/Object;Landroid/view/autofill/AutofillId;ZZ)V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->$r8$lambda$XS1N3pz3fznES_41qVCFW0CXwhs(Ljava/lang/Object;)V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->$r8$lambda$_toALHf9LhzDDXXTVXT8BjqBe_E(Ljava/lang/Object;ZZ)V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->$r8$lambda$nYWwnndWe0-hXzKg3FU2C6MB78w(Ljava/lang/Object;ZZ)V
 HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;-><init>(Lcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;)V
-PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;-><init>(Lcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;Lcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl-IA;)V
-PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->lambda$onInlineSuggestionsRequest$1(Ljava/lang/Object;Landroid/view/inputmethod/InlineSuggestionsRequest;Lcom/android/internal/view/IInlineSuggestionsResponseCallback;)V
-PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->lambda$onInlineSuggestionsSessionInvalidated$6(Ljava/lang/Object;)V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;-><init>(Lcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;Lcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl-IA;)V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->lambda$onInlineSuggestionsRequest$1(Ljava/lang/Object;Landroid/view/inputmethod/InlineSuggestionsRequest;Lcom/android/internal/view/IInlineSuggestionsResponseCallback;)V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->lambda$onInlineSuggestionsSessionInvalidated$6(Ljava/lang/Object;)V
 PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->lambda$onInlineSuggestionsUnsupported$0(Ljava/lang/Object;Landroid/view/inputmethod/InlineSuggestionsRequest;Lcom/android/internal/view/IInlineSuggestionsResponseCallback;)V
 HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->lambda$onInputMethodFinishInput$5(Ljava/lang/Object;ZZ)V
-PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->lambda$onInputMethodFinishInputView$4(Ljava/lang/Object;ZZ)V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->lambda$onInputMethodFinishInputView$4(Ljava/lang/Object;ZZ)V
 HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->lambda$onInputMethodStartInput$2(Ljava/lang/Object;Landroid/view/autofill/AutofillId;ZZ)V
-PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->lambda$onInputMethodStartInputView$3(Ljava/lang/Object;ZZ)V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->lambda$onInputMethodStartInputView$3(Ljava/lang/Object;ZZ)V
 HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->onInlineSuggestionsRequest(Landroid/view/inputmethod/InlineSuggestionsRequest;Lcom/android/internal/view/IInlineSuggestionsResponseCallback;)V
 HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->onInlineSuggestionsSessionInvalidated()V
-PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->onInlineSuggestionsUnsupported()V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->onInlineSuggestionsUnsupported()V
 HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->onInputMethodFinishInput()V
 HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->onInputMethodFinishInputView()V
-PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->onInputMethodShowInputRequested(Z)V
-HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->onInputMethodStartInput(Landroid/view/autofill/AutofillId;)V
-HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->onInputMethodStartInputView()V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->onInputMethodShowInputRequested(Z)V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->onInputMethodStartInput(Landroid/view/autofill/AutofillId;)V+]Landroid/os/Handler;Landroid/os/Handler;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;->onInputMethodStartInputView()V+]Landroid/os/Handler;Landroid/os/Handler;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
 HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->-$$Nest$fgetmHandler(Lcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;)Landroid/os/Handler;
-PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->-$$Nest$mhandleOnReceiveImeRequest(Lcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;Landroid/view/inputmethod/InlineSuggestionsRequest;Lcom/android/internal/view/IInlineSuggestionsResponseCallback;)V
-PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->-$$Nest$mhandleOnReceiveImeSessionInvalidated(Lcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;)V
-PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->-$$Nest$mhandleOnReceiveImeStatusUpdated(Lcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;Landroid/view/autofill/AutofillId;ZZ)V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->-$$Nest$mhandleOnReceiveImeRequest(Lcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;Landroid/view/inputmethod/InlineSuggestionsRequest;Lcom/android/internal/view/IInlineSuggestionsResponseCallback;)V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->-$$Nest$mhandleOnReceiveImeSessionInvalidated(Lcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;)V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->-$$Nest$mhandleOnReceiveImeStatusUpdated(Lcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;Landroid/view/autofill/AutofillId;ZZ)V
 HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->-$$Nest$mhandleOnReceiveImeStatusUpdated(Lcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;ZZ)V
-PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->-$$Nest$sfgetTAG()Ljava/lang/String;
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->-$$Nest$sfgetTAG()Ljava/lang/String;
 PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;-><clinit>()V
 HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;-><init>(Lcom/android/server/inputmethod/InputMethodManagerInternal;ILandroid/content/ComponentName;Landroid/os/Handler;Ljava/lang/Object;Landroid/view/autofill/AutofillId;Ljava/util/function/Consumer;Landroid/os/Bundle;Lcom/android/server/autofill/ui/InlineFillUi$InlineUiEventCallback;)V
-PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->destroySessionLocked()V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->destroySessionLocked()V
 PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->getInlineSuggestionsRequestLocked()Ljava/util/Optional;
 HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->handleOnReceiveImeRequest(Landroid/view/inputmethod/InlineSuggestionsRequest;Lcom/android/internal/view/IInlineSuggestionsResponseCallback;)V
-PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->handleOnReceiveImeSessionInvalidated()V
-HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->handleOnReceiveImeStatusUpdated(Landroid/view/autofill/AutofillId;ZZ)V
-HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->handleOnReceiveImeStatusUpdated(ZZ)V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->handleOnReceiveImeSessionInvalidated()V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->handleOnReceiveImeStatusUpdated(Landroid/view/autofill/AutofillId;ZZ)V+]Lcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;Lcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->handleOnReceiveImeStatusUpdated(ZZ)V+]Lcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;Lcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;
 HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->match(Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillId;)Z
 HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->maybeNotifyFillUiEventLocked(Ljava/util/List;)V
-HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->maybeUpdateResponseToImeLocked()V
+HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->maybeUpdateResponseToImeLocked()V+]Landroid/view/inputmethod/InlineSuggestionsResponse;Landroid/view/inputmethod/InlineSuggestionsResponse;]Lcom/android/server/autofill/ui/InlineFillUi;Lcom/android/server/autofill/ui/InlineFillUi;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Ljava/util/List;Ljava/util/Collections$EmptyList;]Lcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;Lcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;
 HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->onCreateInlineSuggestionsRequestLocked()V
 HPLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->onInlineSuggestionsResponseLocked(Lcom/android/server/autofill/ui/InlineFillUi;)Z
 PLcom/android/server/autofill/AutofillInlineSuggestionsRequestSession;->resetInlineFillUiLocked()V
@@ -13259,17 +13832,20 @@
 HPLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->cancelSession(II)V
 PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->disableOwnedAutofillServices(I)V
 PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->finishSession(III)V
 HPLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->getAutofillServiceComponentName(Lcom/android/internal/os/IResultReceiver;)V
 HPLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->getFillEventHistory(Lcom/android/internal/os/IResultReceiver;)V
 HPLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->isServiceEnabled(ILjava/lang/String;Lcom/android/internal/os/IResultReceiver;)V
 HPLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->isServiceSupported(ILcom/android/internal/os/IResultReceiver;)V
-PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->removeClient(Landroid/view/autofill/IAutoFillManagerClient;I)V
+PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->onShellCommand(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;Landroid/os/ShellCallback;Landroid/os/ResultReceiver;)V
+HPLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->removeClient(Landroid/view/autofill/IAutoFillManagerClient;I)V
 PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->restoreSession(ILandroid/os/IBinder;Landroid/os/IBinder;Lcom/android/internal/os/IResultReceiver;)V
 HPLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->setAugmentedAutofillWhitelist(Ljava/util/List;Ljava/util/List;Lcom/android/internal/os/IResultReceiver;)V
 PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->setAuthenticationResult(Landroid/os/Bundle;III)V
+PLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->setAutofillFailure(ILjava/util/List;I)V
 HPLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->setHasCallback(IIZ)V
 HPLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->startSession(Landroid/os/IBinder;Landroid/os/IBinder;Landroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;IZILandroid/content/ComponentName;ZLcom/android/internal/os/IResultReceiver;)V
-HPLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->updateSession(ILandroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;III)V
+HPLcom/android/server/autofill/AutofillManagerService$AutoFillManagerServiceStub;->updateSession(ILandroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;III)V+]Lcom/android/server/autofill/AutofillManagerServiceImpl;Lcom/android/server/autofill/AutofillManagerServiceImpl;
 PLcom/android/server/autofill/AutofillManagerService$AutofillCompatState;->-$$Nest$mdump(Lcom/android/server/autofill/AutofillManagerService$AutofillCompatState;Ljava/lang/String;Ljava/io/PrintWriter;)V
 HSPLcom/android/server/autofill/AutofillManagerService$AutofillCompatState;-><init>()V
 PLcom/android/server/autofill/AutofillManagerService$AutofillCompatState;->addCompatibilityModeRequest(Ljava/lang/String;J[Ljava/lang/String;I)V
@@ -13295,7 +13871,7 @@
 PLcom/android/server/autofill/AutofillManagerService$PackageCompatState;-><init>(J[Ljava/lang/String;)V
 PLcom/android/server/autofill/AutofillManagerService$PackageCompatState;->toString()Ljava/lang/String;
 PLcom/android/server/autofill/AutofillManagerService;->$r8$lambda$9r2KDub4kKNVE7HqMZz7nk_ffgw(Lcom/android/server/autofill/AutofillManagerService;Landroid/provider/DeviceConfig$Properties;)V
-PLcom/android/server/autofill/AutofillManagerService;->-$$Nest$fgetmAm(Lcom/android/server/autofill/AutofillManagerService;)Landroid/app/ActivityManagerInternal;
+HPLcom/android/server/autofill/AutofillManagerService;->-$$Nest$fgetmAm(Lcom/android/server/autofill/AutofillManagerService;)Landroid/app/ActivityManagerInternal;
 HSPLcom/android/server/autofill/AutofillManagerService;->-$$Nest$fgetmAutofillCompatState(Lcom/android/server/autofill/AutofillManagerService;)Lcom/android/server/autofill/AutofillManagerService$AutofillCompatState;
 HSPLcom/android/server/autofill/AutofillManagerService;->-$$Nest$fgetmDisabledInfoCache(Lcom/android/server/autofill/AutofillManagerService;)Lcom/android/server/autofill/AutofillManagerService$DisabledInfoCache;
 PLcom/android/server/autofill/AutofillManagerService;->-$$Nest$fgetmRequestsHistory(Lcom/android/server/autofill/AutofillManagerService;)Landroid/util/LocalLog;
@@ -13304,7 +13880,7 @@
 PLcom/android/server/autofill/AutofillManagerService;->-$$Nest$fgetmUiLatencyHistory(Lcom/android/server/autofill/AutofillManagerService;)Landroid/util/LocalLog;
 PLcom/android/server/autofill/AutofillManagerService;->-$$Nest$fgetmWtfHistory(Lcom/android/server/autofill/AutofillManagerService;)Landroid/util/LocalLog;
 PLcom/android/server/autofill/AutofillManagerService;->-$$Nest$mgetAllowedCompatModePackagesFromDeviceConfig(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/String;
-PLcom/android/server/autofill/AutofillManagerService;->-$$Nest$msend(Lcom/android/server/autofill/AutofillManagerService;Lcom/android/internal/os/IResultReceiver;I)V
+HPLcom/android/server/autofill/AutofillManagerService;->-$$Nest$msend(Lcom/android/server/autofill/AutofillManagerService;Lcom/android/internal/os/IResultReceiver;I)V
 PLcom/android/server/autofill/AutofillManagerService;->-$$Nest$msend(Lcom/android/server/autofill/AutofillManagerService;Lcom/android/internal/os/IResultReceiver;II)V
 HPLcom/android/server/autofill/AutofillManagerService;->-$$Nest$msend(Lcom/android/server/autofill/AutofillManagerService;Lcom/android/internal/os/IResultReceiver;Landroid/os/Parcelable;)V
 HPLcom/android/server/autofill/AutofillManagerService;->-$$Nest$msend(Lcom/android/server/autofill/AutofillManagerService;Lcom/android/internal/os/IResultReceiver;Z)V
@@ -13318,9 +13894,9 @@
 PLcom/android/server/autofill/AutofillManagerService;->access$1100(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
 PLcom/android/server/autofill/AutofillManagerService;->access$1200(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
 PLcom/android/server/autofill/AutofillManagerService;->access$1300(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
-PLcom/android/server/autofill/AutofillManagerService;->access$1400(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
-PLcom/android/server/autofill/AutofillManagerService;->access$1500(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
-PLcom/android/server/autofill/AutofillManagerService;->access$1600(Lcom/android/server/autofill/AutofillManagerService;)Z
+HPLcom/android/server/autofill/AutofillManagerService;->access$1400(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
+HPLcom/android/server/autofill/AutofillManagerService;->access$1500(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+HPLcom/android/server/autofill/AutofillManagerService;->access$1600(Lcom/android/server/autofill/AutofillManagerService;)Z
 HPLcom/android/server/autofill/AutofillManagerService;->access$1700(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
 HPLcom/android/server/autofill/AutofillManagerService;->access$1800(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
 PLcom/android/server/autofill/AutofillManagerService;->access$200(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
@@ -13332,8 +13908,10 @@
 PLcom/android/server/autofill/AutofillManagerService;->access$3500(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
 PLcom/android/server/autofill/AutofillManagerService;->access$3600(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
 HPLcom/android/server/autofill/AutofillManagerService;->access$3700(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
-HPLcom/android/server/autofill/AutofillManagerService;->access$3800(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+HPLcom/android/server/autofill/AutofillManagerService;->access$3800(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;+]Lcom/android/server/infra/AbstractMasterSystemService;Lcom/android/server/autofill/AutofillManagerService;
+PLcom/android/server/autofill/AutofillManagerService;->access$3900(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
 PLcom/android/server/autofill/AutofillManagerService;->access$400(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
+PLcom/android/server/autofill/AutofillManagerService;->access$4000(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
 PLcom/android/server/autofill/AutofillManagerService;->access$4100(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
 PLcom/android/server/autofill/AutofillManagerService;->access$4200(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
 PLcom/android/server/autofill/AutofillManagerService;->access$4300(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
@@ -13352,18 +13930,19 @@
 PLcom/android/server/autofill/AutofillManagerService;->access$800(Lcom/android/server/autofill/AutofillManagerService;)Ljava/lang/Object;
 PLcom/android/server/autofill/AutofillManagerService;->access$900(Lcom/android/server/autofill/AutofillManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
 HSPLcom/android/server/autofill/AutofillManagerService;->addCompatibilityModeRequestsLocked(Lcom/android/server/autofill/AutofillManagerServiceImpl;I)V
+PLcom/android/server/autofill/AutofillManagerService;->enforceCallingPermissionForManagement()V
 PLcom/android/server/autofill/AutofillManagerService;->getAllowedCompatModePackages()Ljava/util/Map;
 PLcom/android/server/autofill/AutofillManagerService;->getAllowedCompatModePackages(Ljava/lang/String;)Ljava/util/Map;
 PLcom/android/server/autofill/AutofillManagerService;->getAllowedCompatModePackagesFromDeviceConfig()Ljava/lang/String;
 PLcom/android/server/autofill/AutofillManagerService;->getPartitionMaxCount()I
 HSPLcom/android/server/autofill/AutofillManagerService;->getServiceSettingsProperty()Ljava/lang/String;
-PLcom/android/server/autofill/AutofillManagerService;->getSupportedSmartSuggestionModesLocked()I
+HPLcom/android/server/autofill/AutofillManagerService;->getSupportedSmartSuggestionModesLocked()I
 PLcom/android/server/autofill/AutofillManagerService;->getVisibleDatasetsMaxCount()I
 PLcom/android/server/autofill/AutofillManagerService;->handleInputMethodSwitch(I)V
 PLcom/android/server/autofill/AutofillManagerService;->isInstantServiceAllowed()Z
 HSPLcom/android/server/autofill/AutofillManagerService;->isUserSupported(Lcom/android/server/SystemService$TargetUser;)Z
 PLcom/android/server/autofill/AutofillManagerService;->lambda$new$0(Landroid/provider/DeviceConfig$Properties;)V
-HPLcom/android/server/autofill/AutofillManagerService;->logRequestLocked(Ljava/lang/String;)V
+HPLcom/android/server/autofill/AutofillManagerService;->logRequestLocked(Ljava/lang/String;)V+]Landroid/util/LocalLog;Landroid/util/LocalLog;
 HSPLcom/android/server/autofill/AutofillManagerService;->newServiceLocked(IZ)Lcom/android/server/autofill/AutofillManagerServiceImpl;
 HSPLcom/android/server/autofill/AutofillManagerService;->newServiceLocked(IZ)Lcom/android/server/infra/AbstractPerUserSystemService;
 PLcom/android/server/autofill/AutofillManagerService;->onDeviceConfigChange(Ljava/util/Set;)V
@@ -13381,6 +13960,7 @@
 HPLcom/android/server/autofill/AutofillManagerService;->send(Lcom/android/internal/os/IResultReceiver;Landroid/os/Parcelable;)V
 HPLcom/android/server/autofill/AutofillManagerService;->send(Lcom/android/internal/os/IResultReceiver;Z)V
 HSPLcom/android/server/autofill/AutofillManagerService;->setDeviceConfigProperties()V
+PLcom/android/server/autofill/AutofillManagerService;->setLogLevel(I)V
 HSPLcom/android/server/autofill/AutofillManagerService;->setLogLevelFromSettings()V
 HSPLcom/android/server/autofill/AutofillManagerService;->setLoggingLevelsLocked(ZZ)V
 HSPLcom/android/server/autofill/AutofillManagerService;->setMaxPartitionsFromSettings()V
@@ -13389,27 +13969,28 @@
 PLcom/android/server/autofill/AutofillManagerServiceImpl$1;-><init>(Lcom/android/server/autofill/AutofillManagerServiceImpl;)V
 PLcom/android/server/autofill/AutofillManagerServiceImpl$1;->logAugmentedAutofillSelected(ILjava/lang/String;Landroid/os/Bundle;)V
 PLcom/android/server/autofill/AutofillManagerServiceImpl$1;->logAugmentedAutofillShown(ILandroid/os/Bundle;)V
-PLcom/android/server/autofill/AutofillManagerServiceImpl$1;->resetLastResponse()V
+HPLcom/android/server/autofill/AutofillManagerServiceImpl$1;->resetLastResponse()V
 PLcom/android/server/autofill/AutofillManagerServiceImpl$1;->setLastResponse(I)V
 HSPLcom/android/server/autofill/AutofillManagerServiceImpl$InlineSuggestionRenderCallbacksImpl;-><init>(Lcom/android/server/autofill/AutofillManagerServiceImpl;)V
 HSPLcom/android/server/autofill/AutofillManagerServiceImpl$InlineSuggestionRenderCallbacksImpl;-><init>(Lcom/android/server/autofill/AutofillManagerServiceImpl;Lcom/android/server/autofill/AutofillManagerServiceImpl$InlineSuggestionRenderCallbacksImpl-IA;)V
-PLcom/android/server/autofill/AutofillManagerServiceImpl$InlineSuggestionRenderCallbacksImpl;->onServiceDied(Lcom/android/server/autofill/RemoteInlineSuggestionRenderService;)V
-PLcom/android/server/autofill/AutofillManagerServiceImpl$InlineSuggestionRenderCallbacksImpl;->onServiceDied(Ljava/lang/Object;)V
+HSPLcom/android/server/autofill/AutofillManagerServiceImpl$InlineSuggestionRenderCallbacksImpl;->onServiceDied(Lcom/android/server/autofill/RemoteInlineSuggestionRenderService;)V
+HSPLcom/android/server/autofill/AutofillManagerServiceImpl$InlineSuggestionRenderCallbacksImpl;->onServiceDied(Ljava/lang/Object;)V
 PLcom/android/server/autofill/AutofillManagerServiceImpl$PruneTask;-><init>(Lcom/android/server/autofill/AutofillManagerServiceImpl;)V
 PLcom/android/server/autofill/AutofillManagerServiceImpl$PruneTask;-><init>(Lcom/android/server/autofill/AutofillManagerServiceImpl;Lcom/android/server/autofill/AutofillManagerServiceImpl$PruneTask-IA;)V
 PLcom/android/server/autofill/AutofillManagerServiceImpl$PruneTask;->doInBackground([Ljava/lang/Object;)Ljava/lang/Object;
 HPLcom/android/server/autofill/AutofillManagerServiceImpl$PruneTask;->doInBackground([Ljava/lang/Void;)Ljava/lang/Void;
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->-$$Nest$fgetmSessions(Lcom/android/server/autofill/AutofillManagerServiceImpl;)Landroid/util/SparseArray;
-PLcom/android/server/autofill/AutofillManagerServiceImpl;->-$$Nest$fputmRemoteInlineSuggestionRenderService(Lcom/android/server/autofill/AutofillManagerServiceImpl;Lcom/android/server/autofill/RemoteInlineSuggestionRenderService;)V
+HSPLcom/android/server/autofill/AutofillManagerServiceImpl;->-$$Nest$fputmRemoteInlineSuggestionRenderService(Lcom/android/server/autofill/AutofillManagerServiceImpl;Lcom/android/server/autofill/RemoteInlineSuggestionRenderService;)V
 HSPLcom/android/server/autofill/AutofillManagerServiceImpl;-><clinit>()V
 HSPLcom/android/server/autofill/AutofillManagerServiceImpl;-><init>(Lcom/android/server/autofill/AutofillManagerService;Ljava/lang/Object;Landroid/util/LocalLog;Landroid/util/LocalLog;ILcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/AutofillManagerService$AutofillCompatState;ZLcom/android/server/autofill/AutofillManagerService$DisabledInfoCache;)V
 HPLcom/android/server/autofill/AutofillManagerServiceImpl;->addClientLocked(Landroid/view/autofill/IAutoFillManagerClient;Landroid/content/ComponentName;)I
 HPLcom/android/server/autofill/AutofillManagerServiceImpl;->assertCallerLocked(Landroid/content/ComponentName;Z)V
-PLcom/android/server/autofill/AutofillManagerServiceImpl;->cancelSessionLocked(II)V
+HPLcom/android/server/autofill/AutofillManagerServiceImpl;->cancelSessionLocked(II)V
 HPLcom/android/server/autofill/AutofillManagerServiceImpl;->createSessionByTokenLocked(Landroid/os/IBinder;IILandroid/os/IBinder;ZLandroid/content/ComponentName;ZZZI)Lcom/android/server/autofill/Session;
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->destroyLocked()V
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->disableOwnedAutofillServicesLocked(I)V
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->dumpLocked(Ljava/lang/String;Ljava/io/PrintWriter;)V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->finishSessionLocked(III)V
 HSPLcom/android/server/autofill/AutofillManagerServiceImpl;->forceRemoveAllSessionsLocked()V
 HPLcom/android/server/autofill/AutofillManagerServiceImpl;->forceRemoveFinishedSessionsLocked()V
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->forceRemoveForAugmentedOnlySessionsLocked()V
@@ -13417,9 +13998,9 @@
 HSPLcom/android/server/autofill/AutofillManagerServiceImpl;->getCompatibilityPackagesLocked()Landroid/util/ArrayMap;
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->getFieldClassificationStrategy()Lcom/android/server/autofill/FieldClassificationStrategy;
 HPLcom/android/server/autofill/AutofillManagerServiceImpl;->getFillEventHistory(I)Landroid/service/autofill/FillEventHistory;
-HPLcom/android/server/autofill/AutofillManagerServiceImpl;->getPreviousSessionsLocked(Lcom/android/server/autofill/Session;)Ljava/util/ArrayList;
+HPLcom/android/server/autofill/AutofillManagerServiceImpl;->getPreviousSessionsLocked(Lcom/android/server/autofill/Session;)Ljava/util/ArrayList;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/autofill/AutofillManagerServiceImpl;->getRemoteAugmentedAutofillServiceLocked()Lcom/android/server/autofill/RemoteAugmentedAutofillService;
-HSPLcom/android/server/autofill/AutofillManagerServiceImpl;->getRemoteInlineSuggestionRenderServiceLocked()Lcom/android/server/autofill/RemoteInlineSuggestionRenderService;
+HSPLcom/android/server/autofill/AutofillManagerServiceImpl;->getRemoteInlineSuggestionRenderServiceLocked()Lcom/android/server/autofill/RemoteInlineSuggestionRenderService;+]Lcom/android/server/infra/AbstractMasterSystemService;Lcom/android/server/autofill/AutofillManagerService;]Lcom/android/server/infra/AbstractPerUserSystemService;Lcom/android/server/autofill/AutofillManagerServiceImpl;
 HPLcom/android/server/autofill/AutofillManagerServiceImpl;->getSupportedSmartSuggestionModesLocked()I
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->getUrlBarResourceIdsForCompatMode(Ljava/lang/String;)[Ljava/lang/String;
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->getUserData()Landroid/service/autofill/UserData;
@@ -13427,12 +14008,12 @@
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->handleSessionSave(Lcom/android/server/autofill/Session;)V
 HSPLcom/android/server/autofill/AutofillManagerServiceImpl;->isAugmentedAutofillServiceAvailableLocked()Z
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->isAugmentedAutofillServiceForUserLocked(I)Z
-PLcom/android/server/autofill/AutofillManagerServiceImpl;->isAutofillDisabledLocked(Landroid/content/ComponentName;)Z
+HPLcom/android/server/autofill/AutofillManagerServiceImpl;->isAutofillDisabledLocked(Landroid/content/ComponentName;)Z
 HPLcom/android/server/autofill/AutofillManagerServiceImpl;->isCalledByAugmentedAutofillServiceLocked(Ljava/lang/String;I)Z
 HPLcom/android/server/autofill/AutofillManagerServiceImpl;->isCalledByServiceLocked(Ljava/lang/String;I)Z
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->isClientSessionDestroyedLocked(Landroid/view/autofill/IAutoFillManagerClient;)Z
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->isFieldClassificationEnabledLocked()Z
-PLcom/android/server/autofill/AutofillManagerServiceImpl;->isInlineSuggestionsEnabledLocked()Z
+HPLcom/android/server/autofill/AutofillManagerServiceImpl;->isInlineSuggestionsEnabledLocked()Z
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->isValidEventLocked(Ljava/lang/String;I)Z
 HPLcom/android/server/autofill/AutofillManagerServiceImpl;->isWhitelistedForAugmentedAutofillLocked(Landroid/content/ComponentName;)Z
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->logAugmentedAutofillSelected(ILjava/lang/String;Landroid/os/Bundle;)V
@@ -13447,26 +14028,31 @@
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->onSwitchInputMethod()V
 HPLcom/android/server/autofill/AutofillManagerServiceImpl;->pruneAbandonedSessionsLocked()V
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->removeClientLocked(Landroid/view/autofill/IAutoFillManagerClient;)V
-PLcom/android/server/autofill/AutofillManagerServiceImpl;->removeSessionLocked(I)V
+HPLcom/android/server/autofill/AutofillManagerServiceImpl;->removeSessionLocked(I)V
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->resetAugmentedAutofillWhitelistLocked()V
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->resetExtServiceLocked()V
-PLcom/android/server/autofill/AutofillManagerServiceImpl;->resetLastAugmentedAutofillResponse()V
-PLcom/android/server/autofill/AutofillManagerServiceImpl;->resetLastResponse()V
+HPLcom/android/server/autofill/AutofillManagerServiceImpl;->resetLastAugmentedAutofillResponse()V
+HPLcom/android/server/autofill/AutofillManagerServiceImpl;->resetLastResponse()V
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->restoreSession(IILandroid/os/IBinder;Landroid/os/IBinder;)Z
-PLcom/android/server/autofill/AutofillManagerServiceImpl;->sendActivityAssistDataToContentCapture(Landroid/os/IBinder;Landroid/os/Bundle;)Z
+HPLcom/android/server/autofill/AutofillManagerServiceImpl;->sendActivityAssistDataToContentCapture(Landroid/os/IBinder;Landroid/os/Bundle;)Z
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->sendStateToClients(Z)V
 HPLcom/android/server/autofill/AutofillManagerServiceImpl;->setAugmentedAutofillWhitelistLocked(Ljava/util/List;Ljava/util/List;I)Z
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->setAuthenticationResultLocked(Landroid/os/Bundle;III)V
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->setAuthenticationSelected(ILandroid/os/Bundle;)V
-PLcom/android/server/autofill/AutofillManagerServiceImpl;->setHasCallback(IIZ)V
+PLcom/android/server/autofill/AutofillManagerServiceImpl;->setAutofillFailureLocked(IILjava/util/List;)V
+HPLcom/android/server/autofill/AutofillManagerServiceImpl;->setHasCallback(IIZ)V
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->setLastAugmentedAutofillResponse(I)V
 PLcom/android/server/autofill/AutofillManagerServiceImpl;->setLastResponse(ILandroid/service/autofill/FillResponse;)V
 HPLcom/android/server/autofill/AutofillManagerServiceImpl;->startSessionLocked(Landroid/os/IBinder;IILandroid/os/IBinder;Landroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;ZLandroid/content/ComponentName;ZZI)J
 HSPLcom/android/server/autofill/AutofillManagerServiceImpl;->updateLocked(Z)Z
 HSPLcom/android/server/autofill/AutofillManagerServiceImpl;->updateRemoteAugmentedAutofillService()V
 HSPLcom/android/server/autofill/AutofillManagerServiceImpl;->updateRemoteInlineSuggestionRenderServiceLocked()V
-HPLcom/android/server/autofill/AutofillManagerServiceImpl;->updateSessionLocked(IILandroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;II)Z
+HPLcom/android/server/autofill/AutofillManagerServiceImpl;->updateSessionLocked(IILandroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;II)Z+]Lcom/android/server/autofill/Session;Lcom/android/server/autofill/Session;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/autofill/AutofillManagerServiceImpl;->whitelistForAugmentedAutofillPackages(Ljava/util/List;Ljava/util/List;)V
+PLcom/android/server/autofill/AutofillManagerServiceShellCommand;-><init>(Lcom/android/server/autofill/AutofillManagerService;)V
+PLcom/android/server/autofill/AutofillManagerServiceShellCommand;->onCommand(Ljava/lang/String;)I
+PLcom/android/server/autofill/AutofillManagerServiceShellCommand;->requestSet(Ljava/io/PrintWriter;)I
+PLcom/android/server/autofill/AutofillManagerServiceShellCommand;->setLogLevel(Ljava/io/PrintWriter;)I
 PLcom/android/server/autofill/AutofillUriGrantsManager;-><clinit>()V
 PLcom/android/server/autofill/AutofillUriGrantsManager;-><init>(I)V
 PLcom/android/server/autofill/FieldClassificationStrategy$$ExternalSyntheticLambda0;-><init>()V
@@ -13481,7 +14067,7 @@
 PLcom/android/server/autofill/FieldClassificationStrategy;->getDefaultAlgorithm()Ljava/lang/String;
 PLcom/android/server/autofill/FieldClassificationStrategy;->getMetadataValue(Ljava/lang/String;Lcom/android/server/autofill/FieldClassificationStrategy$MetadataParser;)Ljava/lang/Object;
 PLcom/android/server/autofill/FieldClassificationStrategy;->getServiceComponentName()Landroid/content/ComponentName;
-PLcom/android/server/autofill/FieldClassificationStrategy;->getServiceInfo()Landroid/content/pm/ServiceInfo;
+HPLcom/android/server/autofill/FieldClassificationStrategy;->getServiceInfo()Landroid/content/pm/ServiceInfo;
 PLcom/android/server/autofill/FieldClassificationStrategy;->lambda$getAvailableAlgorithms$0(Landroid/content/res/Resources;I)[Ljava/lang/String;
 PLcom/android/server/autofill/FieldClassificationStrategy;->lambda$getDefaultAlgorithm$1(Landroid/content/res/Resources;I)Ljava/lang/String;
 PLcom/android/server/autofill/FieldClassificationStrategy;->reset()V
@@ -13495,17 +14081,50 @@
 HPLcom/android/server/autofill/Helper;->addAutofillableIds(Landroid/app/assist/AssistStructure$ViewNode;Ljava/util/ArrayList;Z)V+]Landroid/app/assist/AssistStructure$ViewNode;Landroid/app/assist/AssistStructure$ViewNode;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/autofill/Helper;->containsCharsInOrder(Ljava/lang/String;Ljava/lang/String;)Z+]Ljava/lang/String;Ljava/lang/String;
 PLcom/android/server/autofill/Helper;->createSanitizers(Landroid/service/autofill/SaveInfo;)Landroid/util/ArrayMap;
-PLcom/android/server/autofill/Helper;->findViewNode(Landroid/app/assist/AssistStructure;Lcom/android/server/autofill/Helper$ViewNodeFilter;)Landroid/app/assist/AssistStructure$ViewNode;
+HPLcom/android/server/autofill/Helper;->findViewNode(Landroid/app/assist/AssistStructure;Lcom/android/server/autofill/Helper$ViewNodeFilter;)Landroid/app/assist/AssistStructure$ViewNode;
 PLcom/android/server/autofill/Helper;->findViewNodeByAutofillId(Landroid/app/assist/AssistStructure;Landroid/view/autofill/AutofillId;)Landroid/app/assist/AssistStructure$ViewNode;
-HPLcom/android/server/autofill/Helper;->getAutofillIds(Landroid/app/assist/AssistStructure;Z)Ljava/util/ArrayList;
+HPLcom/android/server/autofill/Helper;->getAutofillIds(Landroid/app/assist/AssistStructure;Z)Ljava/util/ArrayList;+]Landroid/app/assist/AssistStructure;Landroid/app/assist/AssistStructure;]Landroid/app/assist/AssistStructure$WindowNode;Landroid/app/assist/AssistStructure$WindowNode;
 PLcom/android/server/autofill/Helper;->getFields(Landroid/service/autofill/Dataset;)Landroid/util/ArrayMap;
 PLcom/android/server/autofill/Helper;->getNumericValue(Landroid/metrics/LogMaker;I)I
 PLcom/android/server/autofill/Helper;->lambda$findViewNodeByAutofillId$0(Landroid/view/autofill/AutofillId;Landroid/app/assist/AssistStructure$ViewNode;)Z
 PLcom/android/server/autofill/Helper;->lambda$sanitizeUrlBar$1([Ljava/lang/String;Landroid/app/assist/AssistStructure$ViewNode;)Z
-HPLcom/android/server/autofill/Helper;->newLogMaker(ILandroid/content/ComponentName;Ljava/lang/String;IZ)Landroid/metrics/LogMaker;
-HPLcom/android/server/autofill/Helper;->newLogMaker(ILjava/lang/String;IZ)Landroid/metrics/LogMaker;
+HPLcom/android/server/autofill/Helper;->newLogMaker(ILandroid/content/ComponentName;Ljava/lang/String;IZ)Landroid/metrics/LogMaker;+]Landroid/metrics/LogMaker;Landroid/metrics/LogMaker;]Landroid/content/ComponentName;Landroid/content/ComponentName;
+HPLcom/android/server/autofill/Helper;->newLogMaker(ILjava/lang/String;IZ)Landroid/metrics/LogMaker;+]Landroid/metrics/LogMaker;Landroid/metrics/LogMaker;
 PLcom/android/server/autofill/Helper;->sanitizeUrlBar(Landroid/app/assist/AssistStructure;[Ljava/lang/String;)Landroid/app/assist/AssistStructure$ViewNode;
 PLcom/android/server/autofill/Helper;->toArray(Landroid/util/ArraySet;)[Landroid/view/autofill/AutofillId;
+PLcom/android/server/autofill/PresentationStatsEventLogger$$ExternalSyntheticLambda0;-><init>(Ljava/util/List;Landroid/view/autofill/AutofillId;)V
+PLcom/android/server/autofill/PresentationStatsEventLogger$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/autofill/PresentationStatsEventLogger$$ExternalSyntheticLambda1;-><init>(I)V
+HPLcom/android/server/autofill/PresentationStatsEventLogger$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
+PLcom/android/server/autofill/PresentationStatsEventLogger$$ExternalSyntheticLambda2;-><init>(I)V
+PLcom/android/server/autofill/PresentationStatsEventLogger$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;)V
+PLcom/android/server/autofill/PresentationStatsEventLogger$$ExternalSyntheticLambda3;-><init>(Ljava/util/List;Landroid/view/autofill/AutofillId;)V
+PLcom/android/server/autofill/PresentationStatsEventLogger$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/autofill/PresentationStatsEventLogger$$ExternalSyntheticLambda4;-><init>(I)V
+HPLcom/android/server/autofill/PresentationStatsEventLogger$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/autofill/PresentationStatsEventLogger$PresentationStatsEventInternal;-><init>(Lcom/android/server/autofill/PresentationStatsEventLogger;)V
+PLcom/android/server/autofill/PresentationStatsEventLogger;->$r8$lambda$4fZiSBDMdcT1MOvjYSMln2fbF_Q(ILcom/android/server/autofill/PresentationStatsEventLogger$PresentationStatsEventInternal;)V
+PLcom/android/server/autofill/PresentationStatsEventLogger;->$r8$lambda$MdI3AXDPShbutzuyGpRev3V58EY(Ljava/util/List;Landroid/view/autofill/AutofillId;Lcom/android/server/autofill/PresentationStatsEventLogger$PresentationStatsEventInternal;)V
+PLcom/android/server/autofill/PresentationStatsEventLogger;->$r8$lambda$elhiqBbWtCkxBK3T7KJfKicku6M(ILcom/android/server/autofill/PresentationStatsEventLogger$PresentationStatsEventInternal;)V
+PLcom/android/server/autofill/PresentationStatsEventLogger;->$r8$lambda$genV5_6jr_SwtSL3LEI4OnEjGjU(Ljava/util/List;Landroid/view/autofill/AutofillId;Lcom/android/server/autofill/PresentationStatsEventLogger$PresentationStatsEventInternal;)V
+HPLcom/android/server/autofill/PresentationStatsEventLogger;->$r8$lambda$imu690k2WhBmB39epkYWZG7iSiM(ILcom/android/server/autofill/PresentationStatsEventLogger$PresentationStatsEventInternal;)V
+HPLcom/android/server/autofill/PresentationStatsEventLogger;-><init>(I)V
+HPLcom/android/server/autofill/PresentationStatsEventLogger;->forSessionId(I)Lcom/android/server/autofill/PresentationStatsEventLogger;
+PLcom/android/server/autofill/PresentationStatsEventLogger;->getDatasetCountForAutofillId(Ljava/util/List;Landroid/view/autofill/AutofillId;)I
+PLcom/android/server/autofill/PresentationStatsEventLogger;->getDisplayPresentationType(I)I
+PLcom/android/server/autofill/PresentationStatsEventLogger;->getNoPresentationEventReason(I)I
+PLcom/android/server/autofill/PresentationStatsEventLogger;->lambda$maybeSetAvailableCount$2(Ljava/util/List;Landroid/view/autofill/AutofillId;Lcom/android/server/autofill/PresentationStatsEventLogger$PresentationStatsEventInternal;)V
+PLcom/android/server/autofill/PresentationStatsEventLogger;->lambda$maybeSetCountShown$3(Ljava/util/List;Landroid/view/autofill/AutofillId;Lcom/android/server/autofill/PresentationStatsEventLogger$PresentationStatsEventInternal;)V
+PLcom/android/server/autofill/PresentationStatsEventLogger;->lambda$maybeSetDisplayPresentationType$7(ILcom/android/server/autofill/PresentationStatsEventLogger$PresentationStatsEventInternal;)V
+PLcom/android/server/autofill/PresentationStatsEventLogger;->lambda$maybeSetNoPresentationEventReason$1(ILcom/android/server/autofill/PresentationStatsEventLogger$PresentationStatsEventInternal;)V
+HPLcom/android/server/autofill/PresentationStatsEventLogger;->lambda$maybeSetRequestId$0(ILcom/android/server/autofill/PresentationStatsEventLogger$PresentationStatsEventInternal;)V
+HPLcom/android/server/autofill/PresentationStatsEventLogger;->logAndEndEvent()V
+PLcom/android/server/autofill/PresentationStatsEventLogger;->maybeSetAvailableCount(Ljava/util/List;Landroid/view/autofill/AutofillId;)V
+PLcom/android/server/autofill/PresentationStatsEventLogger;->maybeSetCountShown(Ljava/util/List;Landroid/view/autofill/AutofillId;)V
+PLcom/android/server/autofill/PresentationStatsEventLogger;->maybeSetDisplayPresentationType(I)V
+HPLcom/android/server/autofill/PresentationStatsEventLogger;->maybeSetNoPresentationEventReason(I)V
+HPLcom/android/server/autofill/PresentationStatsEventLogger;->maybeSetRequestId(I)V
+HPLcom/android/server/autofill/PresentationStatsEventLogger;->startNewEvent()V
 PLcom/android/server/autofill/RemoteAugmentedAutofillService$$ExternalSyntheticLambda0;-><init>(Landroid/os/ICancellationSignal;)V
 PLcom/android/server/autofill/RemoteAugmentedAutofillService$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/autofill/RemoteAugmentedAutofillService$$ExternalSyntheticLambda1;-><init>()V
@@ -13516,7 +14135,7 @@
 HPLcom/android/server/autofill/RemoteAugmentedAutofillService$$ExternalSyntheticLambda3;->run(Ljava/lang/Object;)Ljava/lang/Object;
 HPLcom/android/server/autofill/RemoteAugmentedAutofillService$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/autofill/RemoteAugmentedAutofillService;Ljava/util/concurrent/atomic/AtomicReference;Landroid/content/ComponentName;I)V
 HPLcom/android/server/autofill/RemoteAugmentedAutofillService$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/autofill/RemoteAugmentedAutofillService$1$1;-><init>(Lcom/android/server/autofill/RemoteAugmentedAutofillService$1;)V
+HPLcom/android/server/autofill/RemoteAugmentedAutofillService$1$1;-><init>(Lcom/android/server/autofill/RemoteAugmentedAutofillService$1;)V
 PLcom/android/server/autofill/RemoteAugmentedAutofillService$1$1;->cancel()V
 HPLcom/android/server/autofill/RemoteAugmentedAutofillService$1$1;->isCompleted()Z
 HPLcom/android/server/autofill/RemoteAugmentedAutofillService$1$1;->onCancellable(Landroid/os/ICancellationSignal;)V
@@ -13525,6 +14144,7 @@
 HPLcom/android/server/autofill/RemoteAugmentedAutofillService$1;->send(ILandroid/os/Bundle;)V
 PLcom/android/server/autofill/RemoteAugmentedAutofillService$2;-><init>(Lcom/android/server/autofill/RemoteAugmentedAutofillService;ILandroid/os/Bundle;Landroid/view/autofill/IAutoFillManagerClient;Ljava/util/function/Function;Landroid/view/autofill/AutofillId;Landroid/content/ComponentName;Landroid/os/IBinder;ILjava/lang/Runnable;)V
 PLcom/android/server/autofill/RemoteAugmentedAutofillService$2;->autofill(Landroid/service/autofill/Dataset;I)V
+PLcom/android/server/autofill/RemoteAugmentedAutofillService$2;->onError()V
 PLcom/android/server/autofill/RemoteAugmentedAutofillService;->$r8$lambda$5gD_UHsAzB6QhvixCQgZzGyHQGQ(Landroid/os/ICancellationSignal;)V
 PLcom/android/server/autofill/RemoteAugmentedAutofillService;->$r8$lambda$7WYIPObqsiZmRUPcDjanw3e7V9E(Landroid/service/autofill/augmented/IAugmentedAutofillService;)V
 PLcom/android/server/autofill/RemoteAugmentedAutofillService;->$r8$lambda$RmBNm6m2_0Aj957GFA4umYB2d2s(Lcom/android/server/autofill/RemoteAugmentedAutofillService;Landroid/view/autofill/IAutoFillManagerClient;IILandroid/content/ComponentName;Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;JLandroid/view/inputmethod/InlineSuggestionsRequest;Ljava/util/function/Function;Ljava/lang/Runnable;Lcom/android/server/autofill/RemoteInlineSuggestionRenderService;ILandroid/os/IBinder;Ljava/util/concurrent/atomic/AtomicReference;Landroid/service/autofill/augmented/IAugmentedAutofillService;)Ljava/util/concurrent/CompletableFuture;
@@ -13536,24 +14156,24 @@
 PLcom/android/server/autofill/RemoteAugmentedAutofillService;-><init>(Landroid/content/Context;ILandroid/content/ComponentName;ILcom/android/server/autofill/RemoteAugmentedAutofillService$RemoteAugmentedAutofillServiceCallbacks;ZZII)V
 PLcom/android/server/autofill/RemoteAugmentedAutofillService;->dispatchCancellation(Landroid/os/ICancellationSignal;)V
 PLcom/android/server/autofill/RemoteAugmentedAutofillService;->getAutoDisconnectTimeoutMs()J
-PLcom/android/server/autofill/RemoteAugmentedAutofillService;->getComponentName()Landroid/content/ComponentName;
+HPLcom/android/server/autofill/RemoteAugmentedAutofillService;->getComponentName()Landroid/content/ComponentName;
 HSPLcom/android/server/autofill/RemoteAugmentedAutofillService;->getComponentName(Ljava/lang/String;IZ)Landroid/util/Pair;
 PLcom/android/server/autofill/RemoteAugmentedAutofillService;->lambda$dispatchCancellation$2(Landroid/os/ICancellationSignal;)V
 PLcom/android/server/autofill/RemoteAugmentedAutofillService;->lambda$onDestroyAutofillWindowsRequest$3(Landroid/service/autofill/augmented/IAugmentedAutofillService;)V
 HPLcom/android/server/autofill/RemoteAugmentedAutofillService;->lambda$onRequestAutofillLocked$0(Landroid/view/autofill/IAutoFillManagerClient;IILandroid/content/ComponentName;Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;JLandroid/view/inputmethod/InlineSuggestionsRequest;Ljava/util/function/Function;Ljava/lang/Runnable;Lcom/android/server/autofill/RemoteInlineSuggestionRenderService;ILandroid/os/IBinder;Ljava/util/concurrent/atomic/AtomicReference;Landroid/service/autofill/augmented/IAugmentedAutofillService;)Ljava/util/concurrent/CompletableFuture;
-PLcom/android/server/autofill/RemoteAugmentedAutofillService;->lambda$onRequestAutofillLocked$1(Ljava/util/concurrent/atomic/AtomicReference;Landroid/content/ComponentName;ILjava/lang/Void;Ljava/lang/Throwable;)V
+HPLcom/android/server/autofill/RemoteAugmentedAutofillService;->lambda$onRequestAutofillLocked$1(Ljava/util/concurrent/atomic/AtomicReference;Landroid/content/ComponentName;ILjava/lang/Void;Ljava/lang/Throwable;)V
 HPLcom/android/server/autofill/RemoteAugmentedAutofillService;->maybeRequestShowInlineSuggestions(ILandroid/view/inputmethod/InlineSuggestionsRequest;Ljava/util/List;Landroid/os/Bundle;Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;Ljava/util/function/Function;Landroid/view/autofill/IAutoFillManagerClient;Ljava/lang/Runnable;Lcom/android/server/autofill/RemoteInlineSuggestionRenderService;ILandroid/content/ComponentName;Landroid/os/IBinder;)V
 HPLcom/android/server/autofill/RemoteAugmentedAutofillService;->onDestroyAutofillWindowsRequest()V
 HPLcom/android/server/autofill/RemoteAugmentedAutofillService;->onRequestAutofillLocked(ILandroid/view/autofill/IAutoFillManagerClient;ILandroid/content/ComponentName;Landroid/os/IBinder;Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;Landroid/view/inputmethod/InlineSuggestionsRequest;Ljava/util/function/Function;Ljava/lang/Runnable;Lcom/android/server/autofill/RemoteInlineSuggestionRenderService;I)V
 PLcom/android/server/autofill/RemoteAugmentedAutofillService;->onServiceConnectionStatusChanged(Landroid/os/IInterface;Z)V
 PLcom/android/server/autofill/RemoteAugmentedAutofillService;->onServiceConnectionStatusChanged(Landroid/service/autofill/augmented/IAugmentedAutofillService;Z)V
 PLcom/android/server/autofill/RemoteAugmentedAutofillService;->toString()Ljava/lang/String;
-PLcom/android/server/autofill/RemoteFillService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/autofill/RemoteFillService;Landroid/service/autofill/FillRequest;Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/atomic/AtomicReference;)V
+HPLcom/android/server/autofill/RemoteFillService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/autofill/RemoteFillService;Landroid/service/autofill/FillRequest;Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/atomic/AtomicReference;)V
 HPLcom/android/server/autofill/RemoteFillService$$ExternalSyntheticLambda0;->run(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/autofill/RemoteFillService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/autofill/RemoteFillService;Landroid/service/autofill/FillRequest;Ljava/util/concurrent/atomic/AtomicReference;)V
+HPLcom/android/server/autofill/RemoteFillService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/autofill/RemoteFillService;Landroid/service/autofill/FillRequest;Ljava/util/concurrent/atomic/AtomicReference;)V
 HPLcom/android/server/autofill/RemoteFillService$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/autofill/RemoteFillService$$ExternalSyntheticLambda2;-><init>()V
-PLcom/android/server/autofill/RemoteFillService$$ExternalSyntheticLambda2;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/autofill/RemoteFillService$$ExternalSyntheticLambda2;-><init>()V
+HPLcom/android/server/autofill/RemoteFillService$$ExternalSyntheticLambda2;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HPLcom/android/server/autofill/RemoteFillService$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/autofill/RemoteFillService;Ljava/lang/Throwable;Landroid/service/autofill/FillRequest;Landroid/service/autofill/FillResponse;Ljava/util/concurrent/atomic/AtomicReference;)V
 HPLcom/android/server/autofill/RemoteFillService$$ExternalSyntheticLambda4;->run()V
 PLcom/android/server/autofill/RemoteFillService$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/autofill/RemoteFillService;Landroid/service/autofill/SaveRequest;)V
@@ -13562,44 +14182,44 @@
 PLcom/android/server/autofill/RemoteFillService$$ExternalSyntheticLambda6;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/autofill/RemoteFillService$$ExternalSyntheticLambda7;-><init>(Lcom/android/server/autofill/RemoteFillService;Ljava/lang/Throwable;Landroid/content/IntentSender;)V
 PLcom/android/server/autofill/RemoteFillService$$ExternalSyntheticLambda7;->run()V
-PLcom/android/server/autofill/RemoteFillService$1;-><init>(Lcom/android/server/autofill/RemoteFillService;Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/CompletableFuture;)V
+HPLcom/android/server/autofill/RemoteFillService$1;-><init>(Lcom/android/server/autofill/RemoteFillService;Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/CompletableFuture;)V
 HPLcom/android/server/autofill/RemoteFillService$1;->onCancellable(Landroid/os/ICancellationSignal;)V
 PLcom/android/server/autofill/RemoteFillService$1;->onFailure(ILjava/lang/CharSequence;)V
-PLcom/android/server/autofill/RemoteFillService$1;->onSuccess(Landroid/service/autofill/FillResponse;)V
+HPLcom/android/server/autofill/RemoteFillService$1;->onSuccess(Landroid/service/autofill/FillResponse;)V
 PLcom/android/server/autofill/RemoteFillService$2;-><init>(Lcom/android/server/autofill/RemoteFillService;Ljava/util/concurrent/CompletableFuture;)V
 PLcom/android/server/autofill/RemoteFillService$2;->onSuccess(Landroid/content/IntentSender;)V
 PLcom/android/server/autofill/RemoteFillService;->$r8$lambda$0TyWXMubfml43srdXSJGaC2a_G8(Lcom/android/server/autofill/RemoteFillService;Landroid/content/IntentSender;Ljava/lang/Throwable;)V
-PLcom/android/server/autofill/RemoteFillService;->$r8$lambda$RJPZj0Fb_BGqt_SpkpyEpzz3mE4(Lcom/android/server/autofill/RemoteFillService;Landroid/service/autofill/FillRequest;Ljava/util/concurrent/atomic/AtomicReference;Landroid/service/autofill/FillResponse;Ljava/lang/Throwable;)V
+HPLcom/android/server/autofill/RemoteFillService;->$r8$lambda$RJPZj0Fb_BGqt_SpkpyEpzz3mE4(Lcom/android/server/autofill/RemoteFillService;Landroid/service/autofill/FillRequest;Ljava/util/concurrent/atomic/AtomicReference;Landroid/service/autofill/FillResponse;Ljava/lang/Throwable;)V
 PLcom/android/server/autofill/RemoteFillService;->$r8$lambda$bIuJSWKrOrIGPTrMFsTjx7sPZ6E(Lcom/android/server/autofill/RemoteFillService;Ljava/lang/Throwable;Landroid/content/IntentSender;)V
-PLcom/android/server/autofill/RemoteFillService;->$r8$lambda$gnlMp01HzSOYQxSGAOFPCIAy6-Q(Lcom/android/server/autofill/RemoteFillService;Ljava/lang/Throwable;Landroid/service/autofill/FillRequest;Landroid/service/autofill/FillResponse;Ljava/util/concurrent/atomic/AtomicReference;)V
+HPLcom/android/server/autofill/RemoteFillService;->$r8$lambda$gnlMp01HzSOYQxSGAOFPCIAy6-Q(Lcom/android/server/autofill/RemoteFillService;Ljava/lang/Throwable;Landroid/service/autofill/FillRequest;Landroid/service/autofill/FillResponse;Ljava/util/concurrent/atomic/AtomicReference;)V
 PLcom/android/server/autofill/RemoteFillService;->$r8$lambda$kl-MGjPrX_tFnuG85fz60uEXUgw(Lcom/android/server/autofill/RemoteFillService;Landroid/service/autofill/SaveRequest;Landroid/service/autofill/IAutoFillService;)Ljava/util/concurrent/CompletableFuture;
-PLcom/android/server/autofill/RemoteFillService;->$r8$lambda$u9HVjGQc1x5sc6qU7ISdPBzaxxI(Lcom/android/server/autofill/RemoteFillService;Landroid/service/autofill/FillRequest;Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/atomic/AtomicReference;Landroid/service/autofill/IAutoFillService;)Ljava/util/concurrent/CompletableFuture;
+HPLcom/android/server/autofill/RemoteFillService;->$r8$lambda$u9HVjGQc1x5sc6qU7ISdPBzaxxI(Lcom/android/server/autofill/RemoteFillService;Landroid/service/autofill/FillRequest;Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/atomic/AtomicReference;Landroid/service/autofill/IAutoFillService;)Ljava/util/concurrent/CompletableFuture;
 PLcom/android/server/autofill/RemoteFillService;->-$$Nest$mdispatchCancellationSignal(Lcom/android/server/autofill/RemoteFillService;Landroid/os/ICancellationSignal;)V
 HPLcom/android/server/autofill/RemoteFillService;-><init>(Landroid/content/Context;Landroid/content/ComponentName;ILcom/android/server/autofill/RemoteFillService$FillServiceCallbacks;Z)V
-PLcom/android/server/autofill/RemoteFillService;->addLast(Lcom/android/internal/infra/ServiceConnector$Job;)V
-PLcom/android/server/autofill/RemoteFillService;->addLast(Ljava/lang/Object;)V
-PLcom/android/server/autofill/RemoteFillService;->cancelCurrentRequest()I
-PLcom/android/server/autofill/RemoteFillService;->destroy()V
+HPLcom/android/server/autofill/RemoteFillService;->addLast(Lcom/android/internal/infra/ServiceConnector$Job;)V
+HPLcom/android/server/autofill/RemoteFillService;->addLast(Ljava/lang/Object;)V
+HPLcom/android/server/autofill/RemoteFillService;->cancelCurrentRequest()I+]Ljava/util/concurrent/CompletableFuture;Lcom/android/internal/infra/ServiceConnector$Impl$CompletionAwareJob;
+HPLcom/android/server/autofill/RemoteFillService;->destroy()V
 PLcom/android/server/autofill/RemoteFillService;->dispatchCancellationSignal(Landroid/os/ICancellationSignal;)V
 PLcom/android/server/autofill/RemoteFillService;->getAutoDisconnectTimeoutMs()J
 HPLcom/android/server/autofill/RemoteFillService;->lambda$onFillRequest$0(Landroid/service/autofill/FillRequest;Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/atomic/AtomicReference;Landroid/service/autofill/IAutoFillService;)Ljava/util/concurrent/CompletableFuture;
 HPLcom/android/server/autofill/RemoteFillService;->lambda$onFillRequest$1(Ljava/lang/Throwable;Landroid/service/autofill/FillRequest;Landroid/service/autofill/FillResponse;Ljava/util/concurrent/atomic/AtomicReference;)V
-PLcom/android/server/autofill/RemoteFillService;->lambda$onFillRequest$2(Landroid/service/autofill/FillRequest;Ljava/util/concurrent/atomic/AtomicReference;Landroid/service/autofill/FillResponse;Ljava/lang/Throwable;)V
+HPLcom/android/server/autofill/RemoteFillService;->lambda$onFillRequest$2(Landroid/service/autofill/FillRequest;Ljava/util/concurrent/atomic/AtomicReference;Landroid/service/autofill/FillResponse;Ljava/lang/Throwable;)V
 PLcom/android/server/autofill/RemoteFillService;->lambda$onSaveRequest$3(Landroid/service/autofill/SaveRequest;Landroid/service/autofill/IAutoFillService;)Ljava/util/concurrent/CompletableFuture;
 PLcom/android/server/autofill/RemoteFillService;->lambda$onSaveRequest$4(Ljava/lang/Throwable;Landroid/content/IntentSender;)V
 PLcom/android/server/autofill/RemoteFillService;->lambda$onSaveRequest$5(Landroid/content/IntentSender;Ljava/lang/Throwable;)V
 HPLcom/android/server/autofill/RemoteFillService;->onFillRequest(Landroid/service/autofill/FillRequest;)V
 PLcom/android/server/autofill/RemoteFillService;->onSaveRequest(Landroid/service/autofill/SaveRequest;)V
-PLcom/android/server/autofill/RemoteFillService;->onServiceConnectionStatusChanged(Landroid/os/IInterface;Z)V
-PLcom/android/server/autofill/RemoteFillService;->onServiceConnectionStatusChanged(Landroid/service/autofill/IAutoFillService;Z)V
-PLcom/android/server/autofill/RemoteInlineSuggestionRenderService$$ExternalSyntheticLambda0;-><init>(Landroid/os/RemoteCallback;)V
+HPLcom/android/server/autofill/RemoteFillService;->onServiceConnectionStatusChanged(Landroid/os/IInterface;Z)V+]Lcom/android/server/autofill/RemoteFillService;Lcom/android/server/autofill/RemoteFillService;
+HPLcom/android/server/autofill/RemoteFillService;->onServiceConnectionStatusChanged(Landroid/service/autofill/IAutoFillService;Z)V
+HPLcom/android/server/autofill/RemoteInlineSuggestionRenderService$$ExternalSyntheticLambda0;-><init>(Landroid/os/RemoteCallback;)V
 HPLcom/android/server/autofill/RemoteInlineSuggestionRenderService$$ExternalSyntheticLambda0;->run(Landroid/os/IInterface;)V
-PLcom/android/server/autofill/RemoteInlineSuggestionRenderService$$ExternalSyntheticLambda1;-><init>(II)V
+HPLcom/android/server/autofill/RemoteInlineSuggestionRenderService$$ExternalSyntheticLambda1;-><init>(II)V
 HPLcom/android/server/autofill/RemoteInlineSuggestionRenderService$$ExternalSyntheticLambda1;->run(Landroid/os/IInterface;)V
 PLcom/android/server/autofill/RemoteInlineSuggestionRenderService$$ExternalSyntheticLambda2;-><init>(Landroid/service/autofill/IInlineSuggestionUiCallback;Landroid/service/autofill/InlinePresentation;IILandroid/os/IBinder;III)V
 PLcom/android/server/autofill/RemoteInlineSuggestionRenderService$$ExternalSyntheticLambda2;->run(Landroid/os/IInterface;)V
-PLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->$r8$lambda$PQTv9YU9PfBWd_46Tv-zX1TZTlQ(Landroid/os/RemoteCallback;Landroid/service/autofill/IInlineSuggestionRenderService;)V
-PLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->$r8$lambda$f8OllhrcGlehyM53OeAM4HiHSyY(IILandroid/service/autofill/IInlineSuggestionRenderService;)V
+HPLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->$r8$lambda$PQTv9YU9PfBWd_46Tv-zX1TZTlQ(Landroid/os/RemoteCallback;Landroid/service/autofill/IInlineSuggestionRenderService;)V
+HPLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->$r8$lambda$f8OllhrcGlehyM53OeAM4HiHSyY(IILandroid/service/autofill/IInlineSuggestionRenderService;)V
 PLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->$r8$lambda$nQmTpkQM9fpRS0pqARpArAY01_0(Landroid/service/autofill/IInlineSuggestionUiCallback;Landroid/service/autofill/InlinePresentation;IILandroid/os/IBinder;IIILandroid/service/autofill/IInlineSuggestionRenderService;)V
 HSPLcom/android/server/autofill/RemoteInlineSuggestionRenderService;-><init>(Landroid/content/Context;Landroid/content/ComponentName;Ljava/lang/String;ILcom/android/server/autofill/RemoteInlineSuggestionRenderService$InlineSuggestionRenderCallbacks;ZZ)V
 HPLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->destroySuggestionViews(II)V
@@ -13607,20 +14227,22 @@
 HPLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->getInlineSuggestionsRendererInfo(Landroid/os/RemoteCallback;)V
 HSPLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->getServiceComponentName(Landroid/content/Context;I)Landroid/content/ComponentName;
 HSPLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->getServiceInfo(Landroid/content/Context;I)Landroid/content/pm/ServiceInfo;
-PLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->getServiceInterface(Landroid/os/IBinder;)Landroid/os/IInterface;
-PLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->getServiceInterface(Landroid/os/IBinder;)Landroid/service/autofill/IInlineSuggestionRenderService;
-PLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->getTimeoutIdleBindMillis()J
-PLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->handleOnConnectedStateChanged(Z)V
-PLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->lambda$destroySuggestionViews$2(IILandroid/service/autofill/IInlineSuggestionRenderService;)V
-PLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->lambda$getInlineSuggestionsRendererInfo$1(Landroid/os/RemoteCallback;Landroid/service/autofill/IInlineSuggestionRenderService;)V
+HSPLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->getServiceInterface(Landroid/os/IBinder;)Landroid/os/IInterface;
+HSPLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->getServiceInterface(Landroid/os/IBinder;)Landroid/service/autofill/IInlineSuggestionRenderService;
+HSPLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->getTimeoutIdleBindMillis()J
+HSPLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->handleOnConnectedStateChanged(Z)V
+HPLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->lambda$destroySuggestionViews$2(IILandroid/service/autofill/IInlineSuggestionRenderService;)V
+HPLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->lambda$getInlineSuggestionsRendererInfo$1(Landroid/os/RemoteCallback;Landroid/service/autofill/IInlineSuggestionRenderService;)V
 PLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->lambda$renderSuggestion$0(Landroid/service/autofill/IInlineSuggestionUiCallback;Landroid/service/autofill/InlinePresentation;IILandroid/os/IBinder;IIILandroid/service/autofill/IInlineSuggestionRenderService;)V
 PLcom/android/server/autofill/RemoteInlineSuggestionRenderService;->renderSuggestion(Landroid/service/autofill/IInlineSuggestionUiCallback;Landroid/service/autofill/InlinePresentation;IILandroid/os/IBinder;III)V
 PLcom/android/server/autofill/Session$$ExternalSyntheticLambda0;-><init>()V
 PLcom/android/server/autofill/Session$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
+PLcom/android/server/autofill/Session$$ExternalSyntheticLambda10;-><init>()V
+PLcom/android/server/autofill/Session$$ExternalSyntheticLambda10;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/autofill/Session$$ExternalSyntheticLambda11;-><init>()V
 PLcom/android/server/autofill/Session$$ExternalSyntheticLambda11;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/autofill/Session$$ExternalSyntheticLambda12;-><init>(Lcom/android/server/autofill/Session;Ljava/util/function/Consumer;I)V
-PLcom/android/server/autofill/Session$$ExternalSyntheticLambda12;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/autofill/Session$$ExternalSyntheticLambda12;-><init>(Lcom/android/server/autofill/Session;Ljava/util/function/Consumer;I)V
+HPLcom/android/server/autofill/Session$$ExternalSyntheticLambda12;->accept(Ljava/lang/Object;)V
 PLcom/android/server/autofill/Session$$ExternalSyntheticLambda13;-><init>()V
 PLcom/android/server/autofill/Session$$ExternalSyntheticLambda13;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/autofill/Session$$ExternalSyntheticLambda14;-><init>()V
@@ -13628,102 +14250,111 @@
 PLcom/android/server/autofill/Session$$ExternalSyntheticLambda15;-><init>()V
 PLcom/android/server/autofill/Session$$ExternalSyntheticLambda15;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/autofill/Session$$ExternalSyntheticLambda1;-><init>()V
+PLcom/android/server/autofill/Session$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HPLcom/android/server/autofill/Session$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/autofill/Session;Landroid/view/autofill/AutofillId;Ljava/util/function/Consumer;I)V
 HPLcom/android/server/autofill/Session$$ExternalSyntheticLambda2;->onResult(Landroid/os/Bundle;)V
-PLcom/android/server/autofill/Session$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/autofill/Session;)V
+HPLcom/android/server/autofill/Session$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/autofill/Session;)V
 HPLcom/android/server/autofill/Session$$ExternalSyntheticLambda3;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HPLcom/android/server/autofill/Session$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/autofill/Session;ILcom/android/server/autofill/RemoteAugmentedAutofillService;Landroid/view/autofill/AutofillId;ZLandroid/view/autofill/AutofillValue;Ljava/util/function/Function;)V
 HPLcom/android/server/autofill/Session$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/autofill/Session$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/autofill/Session;Landroid/view/autofill/AutofillId;Ljava/util/function/Consumer;)V
 HPLcom/android/server/autofill/Session$$ExternalSyntheticLambda5;->onResult(Landroid/os/Bundle;)V
-PLcom/android/server/autofill/Session$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/autofill/RemoteAugmentedAutofillService;)V
+HPLcom/android/server/autofill/Session$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/autofill/RemoteAugmentedAutofillService;)V
 PLcom/android/server/autofill/Session$$ExternalSyntheticLambda6;->run()V
 PLcom/android/server/autofill/Session$$ExternalSyntheticLambda7;-><init>(Lcom/android/server/autofill/Session;)V
-PLcom/android/server/autofill/Session$1;-><init>(Lcom/android/server/autofill/Session;)V
-PLcom/android/server/autofill/Session$2;-><init>(Lcom/android/server/autofill/Session;)V
+PLcom/android/server/autofill/Session$$ExternalSyntheticLambda7;->run()V
+HPLcom/android/server/autofill/Session$$ExternalSyntheticLambda9;-><init>(Lcom/android/server/autofill/Session;)V
+PLcom/android/server/autofill/Session$$ExternalSyntheticLambda9;->binderDied()V
+HPLcom/android/server/autofill/Session$1;-><init>(Lcom/android/server/autofill/Session;)V
+HPLcom/android/server/autofill/Session$2;-><init>(Lcom/android/server/autofill/Session;)V
 PLcom/android/server/autofill/Session$2;->notifyInlineUiHidden(Landroid/view/autofill/AutofillId;)V
 PLcom/android/server/autofill/Session$2;->notifyInlineUiShown(Landroid/view/autofill/AutofillId;)V
 PLcom/android/server/autofill/Session$3;-><init>(Lcom/android/server/autofill/Session;Landroid/service/autofill/FillResponse;Landroid/view/autofill/AutofillId;)V
 PLcom/android/server/autofill/Session$3;->autofill(Landroid/service/autofill/Dataset;I)V
 PLcom/android/server/autofill/Session$3;->onError()V
-PLcom/android/server/autofill/Session$AssistDataReceiverImpl$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/autofill/Session$AssistDataReceiverImpl;Lcom/android/server/autofill/ViewState;)V
-PLcom/android/server/autofill/Session$AssistDataReceiverImpl$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
-PLcom/android/server/autofill/Session$AssistDataReceiverImpl;->$r8$lambda$hemAHRz_WlhwPzcRrqcP-8RtrAg(Lcom/android/server/autofill/Session$AssistDataReceiverImpl;Lcom/android/server/autofill/ViewState;Landroid/view/inputmethod/InlineSuggestionsRequest;)V
-PLcom/android/server/autofill/Session$AssistDataReceiverImpl;-><init>(Lcom/android/server/autofill/Session;)V
-PLcom/android/server/autofill/Session$AssistDataReceiverImpl;-><init>(Lcom/android/server/autofill/Session;Lcom/android/server/autofill/Session$AssistDataReceiverImpl-IA;)V
+PLcom/android/server/autofill/Session$3;->startIntentSender(Landroid/content/IntentSender;)V
+HPLcom/android/server/autofill/Session$AssistDataReceiverImpl$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/autofill/Session$AssistDataReceiverImpl;Lcom/android/server/autofill/ViewState;)V
+HPLcom/android/server/autofill/Session$AssistDataReceiverImpl$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/autofill/Session$AssistDataReceiverImpl;->$r8$lambda$hemAHRz_WlhwPzcRrqcP-8RtrAg(Lcom/android/server/autofill/Session$AssistDataReceiverImpl;Lcom/android/server/autofill/ViewState;Landroid/view/inputmethod/InlineSuggestionsRequest;)V
+HPLcom/android/server/autofill/Session$AssistDataReceiverImpl;-><init>(Lcom/android/server/autofill/Session;)V
+HPLcom/android/server/autofill/Session$AssistDataReceiverImpl;-><init>(Lcom/android/server/autofill/Session;Lcom/android/server/autofill/Session$AssistDataReceiverImpl-IA;)V
 HPLcom/android/server/autofill/Session$AssistDataReceiverImpl;->lambda$newAutofillRequestLocked$0(Lcom/android/server/autofill/ViewState;Landroid/view/inputmethod/InlineSuggestionsRequest;)V
-HPLcom/android/server/autofill/Session$AssistDataReceiverImpl;->maybeRequestFillLocked()V
+HPLcom/android/server/autofill/Session$AssistDataReceiverImpl;->maybeRequestFillLocked()V+]Landroid/service/autofill/FillRequest;Landroid/service/autofill/FillRequest;]Lcom/android/server/autofill/RemoteFillService;Lcom/android/server/autofill/RemoteFillService;
 HPLcom/android/server/autofill/Session$AssistDataReceiverImpl;->newAutofillRequestLocked(Lcom/android/server/autofill/ViewState;Z)Ljava/util/function/Consumer;
 HPLcom/android/server/autofill/Session$AssistDataReceiverImpl;->onHandleAssistData(Landroid/os/Bundle;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/app/PendingIntent;Landroid/app/PendingIntent;]Landroid/app/assist/AssistStructure$ViewNode;Landroid/app/assist/AssistStructure$ViewNode;]Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillId;]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/autofill/AutofillManagerServiceImpl;Lcom/android/server/autofill/AutofillManagerServiceImpl;]Landroid/app/assist/AssistStructure;Landroid/app/assist/AssistStructure;]Lcom/android/server/autofill/Session$AssistDataReceiverImpl;Lcom/android/server/autofill/Session$AssistDataReceiverImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 PLcom/android/server/autofill/Session$SaveResult;-><init>(ZZI)V
 PLcom/android/server/autofill/Session$SaveResult;->getNoSaveUiReason()I
 PLcom/android/server/autofill/Session$SaveResult;->isLogSaveShown()Z
 PLcom/android/server/autofill/Session$SaveResult;->isRemoveSession()Z
-PLcom/android/server/autofill/Session$SessionFlags;->-$$Nest$fgetmAugmentedAutofillOnly(Lcom/android/server/autofill/Session$SessionFlags;)Z
+HPLcom/android/server/autofill/Session$SessionFlags;->-$$Nest$fgetmAugmentedAutofillOnly(Lcom/android/server/autofill/Session$SessionFlags;)Z
 PLcom/android/server/autofill/Session$SessionFlags;->-$$Nest$fgetmExpiredResponse(Lcom/android/server/autofill/Session$SessionFlags;)Z
 PLcom/android/server/autofill/Session$SessionFlags;->-$$Nest$fgetmFillDialogDisabled(Lcom/android/server/autofill/Session$SessionFlags;)Z
-PLcom/android/server/autofill/Session$SessionFlags;->-$$Nest$fgetmInlineSupportedByService(Lcom/android/server/autofill/Session$SessionFlags;)Z
+HPLcom/android/server/autofill/Session$SessionFlags;->-$$Nest$fgetmInlineSupportedByService(Lcom/android/server/autofill/Session$SessionFlags;)Z
 PLcom/android/server/autofill/Session$SessionFlags;->-$$Nest$fgetmShowingSaveUi(Lcom/android/server/autofill/Session$SessionFlags;)Z
-PLcom/android/server/autofill/Session$SessionFlags;->-$$Nest$fputmAugmentedAutofillOnly(Lcom/android/server/autofill/Session$SessionFlags;Z)V
-PLcom/android/server/autofill/Session$SessionFlags;->-$$Nest$fputmExpiredResponse(Lcom/android/server/autofill/Session$SessionFlags;Z)V
-PLcom/android/server/autofill/Session$SessionFlags;->-$$Nest$fputmFillDialogDisabled(Lcom/android/server/autofill/Session$SessionFlags;Z)V
-PLcom/android/server/autofill/Session$SessionFlags;->-$$Nest$fputmInlineSupportedByService(Lcom/android/server/autofill/Session$SessionFlags;Z)V
+HPLcom/android/server/autofill/Session$SessionFlags;->-$$Nest$fputmAugmentedAutofillOnly(Lcom/android/server/autofill/Session$SessionFlags;Z)V
+HPLcom/android/server/autofill/Session$SessionFlags;->-$$Nest$fputmExpiredResponse(Lcom/android/server/autofill/Session$SessionFlags;Z)V
+HPLcom/android/server/autofill/Session$SessionFlags;->-$$Nest$fputmFillDialogDisabled(Lcom/android/server/autofill/Session$SessionFlags;Z)V
+HPLcom/android/server/autofill/Session$SessionFlags;->-$$Nest$fputmInlineSupportedByService(Lcom/android/server/autofill/Session$SessionFlags;Z)V
 PLcom/android/server/autofill/Session$SessionFlags;->-$$Nest$fputmShowingSaveUi(Lcom/android/server/autofill/Session$SessionFlags;Z)V
-PLcom/android/server/autofill/Session$SessionFlags;-><init>(Lcom/android/server/autofill/Session;)V
-PLcom/android/server/autofill/Session$SessionFlags;-><init>(Lcom/android/server/autofill/Session;Lcom/android/server/autofill/Session$SessionFlags-IA;)V
+HPLcom/android/server/autofill/Session$SessionFlags;-><init>(Lcom/android/server/autofill/Session;)V
+HPLcom/android/server/autofill/Session$SessionFlags;-><init>(Lcom/android/server/autofill/Session;Lcom/android/server/autofill/Session$SessionFlags-IA;)V
 PLcom/android/server/autofill/Session;->$r8$lambda$1ub_6tTUidAFQu-nf_0xBwjn5_0(Lcom/android/server/autofill/Session;ILcom/android/server/autofill/RemoteAugmentedAutofillService;Landroid/view/autofill/AutofillId;ZLandroid/view/autofill/AutofillValue;Ljava/util/function/Function;Landroid/view/inputmethod/InlineSuggestionsRequest;)V
+PLcom/android/server/autofill/Session;->$r8$lambda$48lf7EoyN57sB4ZuPC9AyWBh5FY(Lcom/android/server/autofill/Session;II)V
 PLcom/android/server/autofill/Session;->$r8$lambda$6rEBrMV-oCtdOaVAXVRHLmI-g8E(Lcom/android/server/autofill/Session;Landroid/content/IntentSender;Landroid/content/Intent;)V
 PLcom/android/server/autofill/Session;->$r8$lambda$92rc8p5ur7GxIKq_CcXalnEwHwU(Lcom/android/server/autofill/Session;ILandroid/content/IntentSender;Landroid/content/Intent;Z)V
 PLcom/android/server/autofill/Session;->$r8$lambda$F-zKv-BveSCb-AWDeFqK5sfZNUU(Lcom/android/server/autofill/Session;Lcom/android/server/autofill/ui/InlineFillUi;)Ljava/lang/Boolean;
 PLcom/android/server/autofill/Session;->$r8$lambda$IUh3HGytfl9SGQTd7DkhlqSCXKk(Lcom/android/server/autofill/Session;)V
-PLcom/android/server/autofill/Session;->$r8$lambda$Ue5kx2pknsYYXqMSwu3z_27gYqA(Lcom/android/server/autofill/Session;Ljava/util/function/Consumer;ILandroid/view/inputmethod/InlineSuggestionsRequest;)V
-PLcom/android/server/autofill/Session;->$r8$lambda$aFIOBhFnhAYcwA7zhhQoCgxcuRk(Lcom/android/server/autofill/Session;Landroid/view/autofill/AutofillId;Ljava/util/function/Consumer;ILandroid/os/Bundle;)V
+PLcom/android/server/autofill/Session;->$r8$lambda$L2m_Kn7_d5H9dLpzV4Mx9gVB_EE(Lcom/android/server/autofill/Session;)V
+HPLcom/android/server/autofill/Session;->$r8$lambda$Ue5kx2pknsYYXqMSwu3z_27gYqA(Lcom/android/server/autofill/Session;Ljava/util/function/Consumer;ILandroid/view/inputmethod/InlineSuggestionsRequest;)V
+HPLcom/android/server/autofill/Session;->$r8$lambda$aFIOBhFnhAYcwA7zhhQoCgxcuRk(Lcom/android/server/autofill/Session;Landroid/view/autofill/AutofillId;Ljava/util/function/Consumer;ILandroid/os/Bundle;)V
 PLcom/android/server/autofill/Session;->$r8$lambda$cvpKlPL1gF-ZEFRW7HO0XSOcW2Y(Lcom/android/server/autofill/Session;)V
 PLcom/android/server/autofill/Session;->$r8$lambda$hRvuLDBwox1kdWwhCMJDCY69kqs(Lcom/android/server/autofill/Session;Landroid/view/autofill/AutofillId;Ljava/util/function/Consumer;Landroid/os/Bundle;)V
 PLcom/android/server/autofill/Session;->$r8$lambda$ob2VRQBpTmucgItVbNSRhctaxxg(Lcom/android/server/autofill/Session;)V
-PLcom/android/server/autofill/Session;->-$$Nest$fgetmActivityToken(Lcom/android/server/autofill/Session;)Landroid/os/IBinder;
-PLcom/android/server/autofill/Session;->-$$Nest$fgetmClientState(Lcom/android/server/autofill/Session;)Landroid/os/Bundle;
-PLcom/android/server/autofill/Session;->-$$Nest$fgetmCompatMode(Lcom/android/server/autofill/Session;)Z
+HPLcom/android/server/autofill/Session;->-$$Nest$fgetmActivityToken(Lcom/android/server/autofill/Session;)Landroid/os/IBinder;
+HPLcom/android/server/autofill/Session;->-$$Nest$fgetmClientState(Lcom/android/server/autofill/Session;)Landroid/os/Bundle;
+HPLcom/android/server/autofill/Session;->-$$Nest$fgetmCompatMode(Lcom/android/server/autofill/Session;)Z
 PLcom/android/server/autofill/Session;->-$$Nest$fgetmComponentName(Lcom/android/server/autofill/Session;)Landroid/content/ComponentName;
-PLcom/android/server/autofill/Session;->-$$Nest$fgetmContexts(Lcom/android/server/autofill/Session;)Ljava/util/ArrayList;
-PLcom/android/server/autofill/Session;->-$$Nest$fgetmCurrentViewId(Lcom/android/server/autofill/Session;)Landroid/view/autofill/AutofillId;
-PLcom/android/server/autofill/Session;->-$$Nest$fgetmDelayedFillPendingIntent(Lcom/android/server/autofill/Session;)Landroid/app/PendingIntent;
+HPLcom/android/server/autofill/Session;->-$$Nest$fgetmContexts(Lcom/android/server/autofill/Session;)Ljava/util/ArrayList;
+HPLcom/android/server/autofill/Session;->-$$Nest$fgetmCurrentViewId(Lcom/android/server/autofill/Session;)Landroid/view/autofill/AutofillId;
+HPLcom/android/server/autofill/Session;->-$$Nest$fgetmDelayedFillPendingIntent(Lcom/android/server/autofill/Session;)Landroid/app/PendingIntent;
 PLcom/android/server/autofill/Session;->-$$Nest$fgetmInlineSessionController(Lcom/android/server/autofill/Session;)Lcom/android/server/autofill/AutofillInlineSessionController;
-PLcom/android/server/autofill/Session;->-$$Nest$fgetmRemoteFillService(Lcom/android/server/autofill/Session;)Lcom/android/server/autofill/RemoteFillService;
-PLcom/android/server/autofill/Session;->-$$Nest$fgetmService(Lcom/android/server/autofill/Session;)Lcom/android/server/autofill/AutofillManagerServiceImpl;
+HPLcom/android/server/autofill/Session;->-$$Nest$fgetmRemoteFillService(Lcom/android/server/autofill/Session;)Lcom/android/server/autofill/RemoteFillService;
+HPLcom/android/server/autofill/Session;->-$$Nest$fgetmService(Lcom/android/server/autofill/Session;)Lcom/android/server/autofill/AutofillManagerServiceImpl;
 PLcom/android/server/autofill/Session;->-$$Nest$fgetmUrlBar(Lcom/android/server/autofill/Session;)Landroid/app/assist/AssistStructure$ViewNode;
 PLcom/android/server/autofill/Session;->-$$Nest$fgetmViewStates(Lcom/android/server/autofill/Session;)Landroid/util/ArrayMap;
-PLcom/android/server/autofill/Session;->-$$Nest$fputmContexts(Lcom/android/server/autofill/Session;Ljava/util/ArrayList;)V
-PLcom/android/server/autofill/Session;->-$$Nest$fputmDelayedFillPendingIntent(Lcom/android/server/autofill/Session;Landroid/app/PendingIntent;)V
+HPLcom/android/server/autofill/Session;->-$$Nest$fputmContexts(Lcom/android/server/autofill/Session;Ljava/util/ArrayList;)V
+HPLcom/android/server/autofill/Session;->-$$Nest$fputmDelayedFillPendingIntent(Lcom/android/server/autofill/Session;Landroid/app/PendingIntent;)V
 PLcom/android/server/autofill/Session;->-$$Nest$fputmUrlBar(Lcom/android/server/autofill/Session;Landroid/app/assist/AssistStructure$ViewNode;)V
-PLcom/android/server/autofill/Session;->-$$Nest$mcancelCurrentRequestLocked(Lcom/android/server/autofill/Session;)V
-PLcom/android/server/autofill/Session;->-$$Nest$mcreatePendingIntent(Lcom/android/server/autofill/Session;I)Landroid/app/PendingIntent;
-PLcom/android/server/autofill/Session;->-$$Nest$mfillContextWithAllowedValuesLocked(Lcom/android/server/autofill/Session;Landroid/service/autofill/FillContext;I)V
-PLcom/android/server/autofill/Session;->-$$Nest$mmergePreviousSessionLocked(Lcom/android/server/autofill/Session;Z)Ljava/util/ArrayList;
+HPLcom/android/server/autofill/Session;->-$$Nest$mcancelCurrentRequestLocked(Lcom/android/server/autofill/Session;)V
+HPLcom/android/server/autofill/Session;->-$$Nest$mcreatePendingIntent(Lcom/android/server/autofill/Session;I)Landroid/app/PendingIntent;
+HPLcom/android/server/autofill/Session;->-$$Nest$mfillContextWithAllowedValuesLocked(Lcom/android/server/autofill/Session;Landroid/service/autofill/FillContext;I)V
+HPLcom/android/server/autofill/Session;->-$$Nest$mmergePreviousSessionLocked(Lcom/android/server/autofill/Session;Z)Ljava/util/ArrayList;
 PLcom/android/server/autofill/Session;->-$$Nest$mnotifyFillUiHidden(Lcom/android/server/autofill/Session;Landroid/view/autofill/AutofillId;)V
 PLcom/android/server/autofill/Session;->-$$Nest$mnotifyFillUiShown(Lcom/android/server/autofill/Session;Landroid/view/autofill/AutofillId;)V
+PLcom/android/server/autofill/Session;->-$$Nest$mwtf(Lcom/android/server/autofill/Session;Ljava/lang/Exception;Ljava/lang/String;[Ljava/lang/Object;)V
 PLcom/android/server/autofill/Session;-><clinit>()V
 HPLcom/android/server/autofill/Session;-><init>(Lcom/android/server/autofill/AutofillManagerServiceImpl;Lcom/android/server/autofill/ui/AutoFillUI;Landroid/content/Context;Landroid/os/Handler;ILjava/lang/Object;IIILandroid/os/IBinder;Landroid/os/IBinder;ZLandroid/util/LocalLog;Landroid/util/LocalLog;Landroid/content/ComponentName;Landroid/content/ComponentName;ZZZILcom/android/server/inputmethod/InputMethodManagerInternal;)V
+PLcom/android/server/autofill/Session;->actionAsString(I)Ljava/lang/String;
 PLcom/android/server/autofill/Session;->addTaggedDataToRequestLogLocked(IILjava/lang/Object;)V
 PLcom/android/server/autofill/Session;->authenticate(IILandroid/content/IntentSender;Landroid/os/Bundle;Z)V
 PLcom/android/server/autofill/Session;->autoFill(IILandroid/service/autofill/Dataset;ZI)V
 PLcom/android/server/autofill/Session;->autoFillApp(Landroid/service/autofill/Dataset;)V
 PLcom/android/server/autofill/Session;->callSaveLocked()V
 HPLcom/android/server/autofill/Session;->cancelAugmentedAutofillLocked()V
-PLcom/android/server/autofill/Session;->cancelCurrentRequestLocked()V
+HPLcom/android/server/autofill/Session;->cancelCurrentRequestLocked()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/service/autofill/FillContext;Landroid/service/autofill/FillContext;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/autofill/RemoteFillService;Lcom/android/server/autofill/RemoteFillService;
 PLcom/android/server/autofill/Session;->cancelSave()V
 HPLcom/android/server/autofill/Session;->clearPendingIntentLocked()V
 PLcom/android/server/autofill/Session;->createAuthFillInIntentLocked(ILandroid/os/Bundle;)Landroid/content/Intent;
 PLcom/android/server/autofill/Session;->createOrUpdateViewStateLocked(Landroid/view/autofill/AutofillId;ILandroid/view/autofill/AutofillValue;)Lcom/android/server/autofill/ViewState;
 HPLcom/android/server/autofill/Session;->createPendingIntent(I)Landroid/app/PendingIntent;
-PLcom/android/server/autofill/Session;->destroyAugmentedAutofillWindowsLocked()V
-HPLcom/android/server/autofill/Session;->destroyLocked()Lcom/android/server/autofill/RemoteFillService;
+HPLcom/android/server/autofill/Session;->destroyAugmentedAutofillWindowsLocked()V
+HPLcom/android/server/autofill/Session;->destroyLocked()Lcom/android/server/autofill/RemoteFillService;+]Lcom/android/server/autofill/AutofillInlineSessionController;Lcom/android/server/autofill/AutofillInlineSessionController;]Lcom/android/server/autofill/Session;Lcom/android/server/autofill/Session;]Landroid/metrics/LogMaker;Landroid/metrics/LogMaker;]Lcom/android/server/autofill/RemoteInlineSuggestionRenderService;Lcom/android/server/autofill/RemoteInlineSuggestionRenderService;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/logging/MetricsLogger;Lcom/android/internal/logging/MetricsLogger;]Lcom/android/server/autofill/AutofillManagerServiceImpl;Lcom/android/server/autofill/AutofillManagerServiceImpl;]Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI;
 PLcom/android/server/autofill/Session;->doStartIntentSender(Landroid/content/IntentSender;Landroid/content/Intent;)V
 PLcom/android/server/autofill/Session;->dumpLocked(Ljava/lang/String;Ljava/io/PrintWriter;)V
 PLcom/android/server/autofill/Session;->dumpNumericValue(Ljava/io/PrintWriter;Landroid/metrics/LogMaker;Ljava/lang/String;I)V
 PLcom/android/server/autofill/Session;->dumpRequestLog(Ljava/io/PrintWriter;Landroid/metrics/LogMaker;)V
 PLcom/android/server/autofill/Session;->fill(IILandroid/service/autofill/Dataset;I)V
-HPLcom/android/server/autofill/Session;->fillContextWithAllowedValuesLocked(Landroid/service/autofill/FillContext;I)V
+HPLcom/android/server/autofill/Session;->fillContextWithAllowedValuesLocked(Landroid/service/autofill/FillContext;I)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/autofill/Session;Lcom/android/server/autofill/Session;]Landroid/app/assist/AssistStructure$ViewNode;Landroid/app/assist/AssistStructure$ViewNode;]Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillId;]Lcom/android/server/autofill/ViewState;Lcom/android/server/autofill/ViewState;]Landroid/service/autofill/FillContext;Landroid/service/autofill/FillContext;]Landroid/view/autofill/AutofillValue;Landroid/view/autofill/AutofillValue;
 PLcom/android/server/autofill/Session;->findByAutofillId(Landroid/view/autofill/AutofillId;)Ljava/lang/String;
 PLcom/android/server/autofill/Session;->findValueFromThisSessionOnlyLocked(Landroid/view/autofill/AutofillId;)Landroid/view/autofill/AutofillValue;
 PLcom/android/server/autofill/Session;->findValueLocked(Landroid/view/autofill/AutofillId;)Landroid/view/autofill/AutofillValue;
@@ -13732,98 +14363,111 @@
 PLcom/android/server/autofill/Session;->getActivityTokenLocked()Landroid/os/IBinder;
 PLcom/android/server/autofill/Session;->getClient()Landroid/view/autofill/IAutoFillManagerClient;
 HPLcom/android/server/autofill/Session;->getFillContextByRequestIdLocked(I)Landroid/service/autofill/FillContext;
-HPLcom/android/server/autofill/Session;->getIdsOfAllViewStatesLocked()[Landroid/view/autofill/AutofillId;
+HPLcom/android/server/autofill/Session;->getIdsOfAllViewStatesLocked()[Landroid/view/autofill/AutofillId;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 PLcom/android/server/autofill/Session;->getLastResponseIndexLocked()I
 HPLcom/android/server/autofill/Session;->getLastResponseLocked(Ljava/lang/String;)Landroid/service/autofill/FillResponse;
 PLcom/android/server/autofill/Session;->getSanitizedValue(Landroid/util/ArrayMap;Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;)Landroid/view/autofill/AutofillValue;
 PLcom/android/server/autofill/Session;->getSaveInfoFlagsLocked()I
 PLcom/android/server/autofill/Session;->getSaveInfoLocked()Landroid/service/autofill/SaveInfo;
-HPLcom/android/server/autofill/Session;->getUiForShowing()Lcom/android/server/autofill/ui/AutoFillUI;
+PLcom/android/server/autofill/Session;->getServiceIcon()Landroid/graphics/drawable/Drawable;
+HPLcom/android/server/autofill/Session;->getUiForShowing()Lcom/android/server/autofill/ui/AutoFillUI;+]Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI;
 PLcom/android/server/autofill/Session;->getValueFromContextsLocked(Landroid/view/autofill/AutofillId;)Landroid/view/autofill/AutofillValue;
+PLcom/android/server/autofill/Session;->handleLogContextCommitted(II)V
 PLcom/android/server/autofill/Session;->hideAugmentedAutofillLocked(Lcom/android/server/autofill/ViewState;)V
-PLcom/android/server/autofill/Session;->inlineSuggestionsRequestCacheDecorator(Ljava/util/function/Consumer;I)Ljava/util/function/Consumer;
+HPLcom/android/server/autofill/Session;->inlineSuggestionsRequestCacheDecorator(Ljava/util/function/Consumer;I)Ljava/util/function/Consumer;
 PLcom/android/server/autofill/Session;->isAuthResultDatasetEphemeral(Landroid/service/autofill/Dataset;Landroid/os/Bundle;)Z
 PLcom/android/server/autofill/Session;->isFillDialogUiEnabled()Z
-PLcom/android/server/autofill/Session;->isIgnoredLocked(Landroid/view/autofill/AutofillId;)Z
+HPLcom/android/server/autofill/Session;->isIgnoredLocked(Landroid/view/autofill/AutofillId;)Z
 PLcom/android/server/autofill/Session;->isPinnedDataset(Landroid/service/autofill/Dataset;)Z
 PLcom/android/server/autofill/Session;->isRequestSupportFillDialog(I)Z
-PLcom/android/server/autofill/Session;->isSaveUiPendingLocked()Z
+HPLcom/android/server/autofill/Session;->isSaveUiPendingLocked()Z
 HPLcom/android/server/autofill/Session;->isSaveUiShowingLocked()Z
 PLcom/android/server/autofill/Session;->isViewFocusedLocked(I)Z
-PLcom/android/server/autofill/Session;->lambda$inlineSuggestionsRequestCacheDecorator$7(Ljava/util/function/Consumer;ILandroid/view/inputmethod/InlineSuggestionsRequest;)V
-PLcom/android/server/autofill/Session;->lambda$requestNewFillResponseLocked$0(Landroid/view/autofill/AutofillId;Ljava/util/function/Consumer;ILandroid/os/Bundle;)V
+HPLcom/android/server/autofill/Session;->lambda$inlineSuggestionsRequestCacheDecorator$7(Ljava/util/function/Consumer;ILandroid/view/inputmethod/InlineSuggestionsRequest;)V
+HPLcom/android/server/autofill/Session;->lambda$requestNewFillResponseLocked$0(Landroid/view/autofill/AutofillId;Ljava/util/function/Consumer;ILandroid/os/Bundle;)V
 PLcom/android/server/autofill/Session;->lambda$setClientLocked$1()V
 HPLcom/android/server/autofill/Session;->lambda$triggerAugmentedAutofillLocked$3(Lcom/android/server/autofill/ui/InlineFillUi;)Ljava/lang/Boolean;
+PLcom/android/server/autofill/Session;->lambda$triggerAugmentedAutofillLocked$4()V
 HPLcom/android/server/autofill/Session;->lambda$triggerAugmentedAutofillLocked$5(ILcom/android/server/autofill/RemoteAugmentedAutofillService;Landroid/view/autofill/AutofillId;ZLandroid/view/autofill/AutofillValue;Ljava/util/function/Function;Landroid/view/inputmethod/InlineSuggestionsRequest;)V
 HPLcom/android/server/autofill/Session;->lambda$triggerAugmentedAutofillLocked$6(Landroid/view/autofill/AutofillId;Ljava/util/function/Consumer;Landroid/os/Bundle;)V
 HPLcom/android/server/autofill/Session;->logAugmentedAutofillRequestLocked(ILandroid/content/ComponentName;Landroid/view/autofill/AutofillId;ZLjava/lang/Boolean;)V
 PLcom/android/server/autofill/Session;->logAuthenticationStatusLocked(II)V
-HPLcom/android/server/autofill/Session;->logIfViewClearedLocked(Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;Lcom/android/server/autofill/ViewState;)V
+PLcom/android/server/autofill/Session;->logContextCommitted(II)V
+PLcom/android/server/autofill/Session;->logContextCommitted(Ljava/util/ArrayList;Ljava/util/ArrayList;II)V
+PLcom/android/server/autofill/Session;->logContextCommittedLocked(Ljava/util/ArrayList;Ljava/util/ArrayList;II)V
+HPLcom/android/server/autofill/Session;->logIfViewClearedLocked(Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;Lcom/android/server/autofill/ViewState;)V+]Landroid/view/autofill/AutofillValue;Landroid/view/autofill/AutofillValue;
 PLcom/android/server/autofill/Session;->logSaveShown()V
 PLcom/android/server/autofill/Session;->logSaveUiShown()V
 HPLcom/android/server/autofill/Session;->mergePreviousSessionLocked(Z)Ljava/util/ArrayList;
-HPLcom/android/server/autofill/Session;->newLogMaker(I)Landroid/metrics/LogMaker;
+HPLcom/android/server/autofill/Session;->newLogMaker(I)Landroid/metrics/LogMaker;+]Lcom/android/server/autofill/Session;Lcom/android/server/autofill/Session;]Lcom/android/server/infra/AbstractPerUserSystemService;Lcom/android/server/autofill/AutofillManagerServiceImpl;
 HPLcom/android/server/autofill/Session;->newLogMaker(ILjava/lang/String;)Landroid/metrics/LogMaker;
 PLcom/android/server/autofill/Session;->notifyClientFillDialogTriggerIds(Ljava/util/List;)V
 PLcom/android/server/autofill/Session;->notifyFillUiHidden(Landroid/view/autofill/AutofillId;)V
 PLcom/android/server/autofill/Session;->notifyFillUiShown(Landroid/view/autofill/AutofillId;)V
-PLcom/android/server/autofill/Session;->notifyUnavailableToClient(ILjava/util/ArrayList;)V
+HPLcom/android/server/autofill/Session;->notifyUnavailableToClient(ILjava/util/ArrayList;)V
 PLcom/android/server/autofill/Session;->onFillReady(Landroid/service/autofill/FillResponse;Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;I)V
 PLcom/android/server/autofill/Session;->onFillRequestFailure(ILjava/lang/CharSequence;)V
-PLcom/android/server/autofill/Session;->onFillRequestFailureOrTimeout(IZLjava/lang/CharSequence;)V
+HPLcom/android/server/autofill/Session;->onFillRequestFailureOrTimeout(IZLjava/lang/CharSequence;)V
 HPLcom/android/server/autofill/Session;->onFillRequestSuccess(ILandroid/service/autofill/FillResponse;Ljava/lang/String;I)V
 PLcom/android/server/autofill/Session;->onFillRequestTimeout(I)V
+PLcom/android/server/autofill/Session;->onSaveRequestFailure(Ljava/lang/CharSequence;Ljava/lang/String;)V
 PLcom/android/server/autofill/Session;->onSaveRequestSuccess(Ljava/lang/String;Landroid/content/IntentSender;)V
+PLcom/android/server/autofill/Session;->onSwitchInputMethodLocked()V
 HPLcom/android/server/autofill/Session;->processNullResponseLocked(II)V
 PLcom/android/server/autofill/Session;->processResponseLocked(Landroid/service/autofill/FillResponse;Landroid/os/Bundle;I)V
-PLcom/android/server/autofill/Session;->removeFromService()V
+HPLcom/android/server/autofill/Session;->removeFromService()V
 HPLcom/android/server/autofill/Session;->removeFromServiceLocked()V
 PLcom/android/server/autofill/Session;->replaceResponseLocked(Landroid/service/autofill/FillResponse;Landroid/service/autofill/FillResponse;Landroid/os/Bundle;)V
 HPLcom/android/server/autofill/Session;->requestAssistStructureLocked(II)V
+PLcom/android/server/autofill/Session;->requestFallbackFromFillDialog()V
 PLcom/android/server/autofill/Session;->requestHideFillUi(Landroid/view/autofill/AutofillId;)V
 HPLcom/android/server/autofill/Session;->requestNewFillResponseLocked(Lcom/android/server/autofill/ViewState;II)V
 HPLcom/android/server/autofill/Session;->requestNewFillResponseOnViewEnteredIfNecessaryLocked(Landroid/view/autofill/AutofillId;Lcom/android/server/autofill/ViewState;I)Z
 PLcom/android/server/autofill/Session;->requestShowFillDialog(Landroid/service/autofill/FillResponse;Landroid/view/autofill/AutofillId;Ljava/lang/String;I)Z
 PLcom/android/server/autofill/Session;->requestShowFillUi(Landroid/view/autofill/AutofillId;IILandroid/view/autofill/IAutofillWindowPresenter;)V
 PLcom/android/server/autofill/Session;->requestShowInlineSuggestionsLocked(Landroid/service/autofill/FillResponse;Ljava/lang/String;)Z
+PLcom/android/server/autofill/Session;->requestShowSoftInput(Landroid/view/autofill/AutofillId;)V
 PLcom/android/server/autofill/Session;->save()V
 PLcom/android/server/autofill/Session;->sessionStateAsString(I)Ljava/lang/String;
 PLcom/android/server/autofill/Session;->setAuthenticationResultLocked(Landroid/os/Bundle;I)V
+PLcom/android/server/autofill/Session;->setAutofillFailureLocked(Ljava/util/List;)V
 HPLcom/android/server/autofill/Session;->setClientLocked(Landroid/os/IBinder;)V
 PLcom/android/server/autofill/Session;->setFillDialogDisabled()V
 PLcom/android/server/autofill/Session;->setFillDialogDisabledAndStartInput()V
 PLcom/android/server/autofill/Session;->setHasCallbackLocked(Z)V
 PLcom/android/server/autofill/Session;->setViewStatesLocked(Landroid/service/autofill/FillResponse;IZ)V
 PLcom/android/server/autofill/Session;->setViewStatesLocked(Landroid/service/autofill/FillResponse;Landroid/service/autofill/Dataset;IZ)V
+PLcom/android/server/autofill/Session;->shouldResetSessionStateOnInputMethodSwitch()Z
 PLcom/android/server/autofill/Session;->shouldStartNewPartitionLocked(Landroid/view/autofill/AutofillId;)Z
 PLcom/android/server/autofill/Session;->showSaveLocked()Lcom/android/server/autofill/Session$SaveResult;
 PLcom/android/server/autofill/Session;->startAuthentication(ILandroid/content/IntentSender;Landroid/content/Intent;Z)V
 PLcom/android/server/autofill/Session;->startIntentSender(Landroid/content/IntentSender;Landroid/content/Intent;)V
 PLcom/android/server/autofill/Session;->startIntentSenderAndFinishSession(Landroid/content/IntentSender;)V
 PLcom/android/server/autofill/Session;->switchActivity(Landroid/os/IBinder;Landroid/os/IBinder;)V
+PLcom/android/server/autofill/Session;->toString()Ljava/lang/String;
 HPLcom/android/server/autofill/Session;->triggerAugmentedAutofillLocked(I)Ljava/lang/Runnable;
-HPLcom/android/server/autofill/Session;->unlinkClientVultureLocked()V
-PLcom/android/server/autofill/Session;->unregisterDelayedFillBroadcastLocked()V
+HPLcom/android/server/autofill/Session;->unlinkClientVultureLocked()V+]Landroid/view/autofill/IAutoFillManagerClient;Landroid/view/autofill/IAutoFillManagerClient$Stub$Proxy;]Landroid/os/IBinder;Landroid/os/BinderProxy;
+HPLcom/android/server/autofill/Session;->unregisterDelayedFillBroadcastLocked()V
 PLcom/android/server/autofill/Session;->updateFillDialogTriggerIdsLocked()V
-HPLcom/android/server/autofill/Session;->updateFilteringStateOnValueChangedLocked(Ljava/lang/String;Lcom/android/server/autofill/ViewState;)V
-HPLcom/android/server/autofill/Session;->updateLocked(Landroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;II)V
+HPLcom/android/server/autofill/Session;->updateFilteringStateOnValueChangedLocked(Ljava/lang/String;Lcom/android/server/autofill/ViewState;)V+]Landroid/view/autofill/AutofillValue;Landroid/view/autofill/AutofillValue;]Lcom/android/server/autofill/ViewState;Lcom/android/server/autofill/ViewState;]Ljava/lang/CharSequence;Landroid/text/SpannableString;
+HPLcom/android/server/autofill/Session;->updateLocked(Landroid/view/autofill/AutofillId;Landroid/graphics/Rect;Landroid/view/autofill/AutofillValue;II)V+]Lcom/android/server/autofill/AutofillInlineSessionController;Lcom/android/server/autofill/AutofillInlineSessionController;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/autofill/Session;Lcom/android/server/autofill/Session;]Landroid/service/autofill/FillResponse;Landroid/service/autofill/FillResponse;]Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillId;]Lcom/android/server/autofill/ViewState;Lcom/android/server/autofill/ViewState;]Lcom/android/server/autofill/PresentationStatsEventLogger;Lcom/android/server/autofill/PresentationStatsEventLogger;]Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 PLcom/android/server/autofill/Session;->updateTrackedIdsLocked()V
 PLcom/android/server/autofill/Session;->updateValuesForSaveLocked()V
-HPLcom/android/server/autofill/Session;->updateViewStateAndUiOnValueChangedLocked(Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;Lcom/android/server/autofill/ViewState;I)V
+HPLcom/android/server/autofill/Session;->updateViewStateAndUiOnValueChangedLocked(Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;Lcom/android/server/autofill/ViewState;I)V+]Lcom/android/server/autofill/AutofillInlineSessionController;Lcom/android/server/autofill/AutofillInlineSessionController;]Lcom/android/server/autofill/Session;Lcom/android/server/autofill/Session;]Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillId;]Landroid/view/autofill/AutofillValue;Landroid/view/autofill/AutofillValue;]Lcom/android/server/autofill/ViewState;Lcom/android/server/autofill/ViewState;]Ljava/lang/CharSequence;Landroid/text/SpannableString;]Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI;
 PLcom/android/server/autofill/Session;->wtf(Ljava/lang/Exception;Ljava/lang/String;[Ljava/lang/Object;)V
 HPLcom/android/server/autofill/ViewState;-><init>(Landroid/view/autofill/AutofillId;Lcom/android/server/autofill/ViewState$Listener;I)V
 PLcom/android/server/autofill/ViewState;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
 HPLcom/android/server/autofill/ViewState;->getAutofilledValue()Landroid/view/autofill/AutofillValue;
 HPLcom/android/server/autofill/ViewState;->getCurrentValue()Landroid/view/autofill/AutofillValue;
 PLcom/android/server/autofill/ViewState;->getDatasetId()Ljava/lang/String;
-PLcom/android/server/autofill/ViewState;->getResponse()Landroid/service/autofill/FillResponse;
+HPLcom/android/server/autofill/ViewState;->getResponse()Landroid/service/autofill/FillResponse;
 PLcom/android/server/autofill/ViewState;->getSanitizedValue()Landroid/view/autofill/AutofillValue;
 HPLcom/android/server/autofill/ViewState;->getState()I
 PLcom/android/server/autofill/ViewState;->getStateAsString()Ljava/lang/String;
 PLcom/android/server/autofill/ViewState;->getStateAsString(I)Ljava/lang/String;
 PLcom/android/server/autofill/ViewState;->getVirtualBounds()Landroid/graphics/Rect;
-PLcom/android/server/autofill/ViewState;->maybeCallOnFillReady(I)V
-PLcom/android/server/autofill/ViewState;->resetState(I)V
+HPLcom/android/server/autofill/ViewState;->maybeCallOnFillReady(I)V
+HPLcom/android/server/autofill/ViewState;->resetState(I)V
 PLcom/android/server/autofill/ViewState;->setAutofilledValue(Landroid/view/autofill/AutofillValue;)V
 HPLcom/android/server/autofill/ViewState;->setCurrentValue(Landroid/view/autofill/AutofillValue;)V
 PLcom/android/server/autofill/ViewState;->setDatasetId(Ljava/lang/String;)V
@@ -13831,11 +14475,13 @@
 PLcom/android/server/autofill/ViewState;->setSanitizedValue(Landroid/view/autofill/AutofillValue;)V
 HPLcom/android/server/autofill/ViewState;->setState(I)V
 PLcom/android/server/autofill/ViewState;->toString()Ljava/lang/String;
-PLcom/android/server/autofill/ViewState;->update(Landroid/view/autofill/AutofillValue;Landroid/graphics/Rect;I)V
+HPLcom/android/server/autofill/ViewState;->update(Landroid/view/autofill/AutofillValue;Landroid/graphics/Rect;I)V
 PLcom/android/server/autofill/ui/AutoFillUI$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
 PLcom/android/server/autofill/ui/AutoFillUI$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/autofill/ui/AutoFillUI$$ExternalSyntheticLambda10;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Landroid/service/autofill/FillResponse;Landroid/view/autofill/AutofillId;Ljava/lang/String;Ljava/lang/CharSequence;Landroid/graphics/drawable/Drawable;Landroid/metrics/LogMaker;)V
 PLcom/android/server/autofill/ui/AutoFillUI$$ExternalSyntheticLambda10;->run()V
+PLcom/android/server/autofill/ui/AutoFillUI$$ExternalSyntheticLambda11;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Landroid/service/autofill/FillResponse;Landroid/view/autofill/AutofillId;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Landroid/content/ComponentName;Landroid/metrics/LogMaker;)V
+PLcom/android/server/autofill/ui/AutoFillUI$$ExternalSyntheticLambda11;->run()V
 HPLcom/android/server/autofill/ui/AutoFillUI$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
 HPLcom/android/server/autofill/ui/AutoFillUI$$ExternalSyntheticLambda1;->run()V
 PLcom/android/server/autofill/ui/AutoFillUI$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Lcom/android/server/autofill/ui/PendingUi;Ljava/lang/CharSequence;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Landroid/content/ComponentName;Landroid/service/autofill/SaveInfo;Landroid/service/autofill/ValueFinder;Landroid/metrics/LogMaker;ZZ)V
@@ -13848,7 +14494,7 @@
 HSPLcom/android/server/autofill/ui/AutoFillUI$$ExternalSyntheticLambda5;->run()V
 HPLcom/android/server/autofill/ui/AutoFillUI$$ExternalSyntheticLambda7;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Ljava/lang/String;)V
 HPLcom/android/server/autofill/ui/AutoFillUI$$ExternalSyntheticLambda7;->run()V
-PLcom/android/server/autofill/ui/AutoFillUI$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+HPLcom/android/server/autofill/ui/AutoFillUI$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
 PLcom/android/server/autofill/ui/AutoFillUI$$ExternalSyntheticLambda8;->run()V
 PLcom/android/server/autofill/ui/AutoFillUI$$ExternalSyntheticLambda9;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Ljava/lang/CharSequence;)V
 PLcom/android/server/autofill/ui/AutoFillUI$$ExternalSyntheticLambda9;->run()V
@@ -13862,20 +14508,27 @@
 PLcom/android/server/autofill/ui/AutoFillUI$2;->onCancel(Landroid/content/IntentSender;)V
 PLcom/android/server/autofill/ui/AutoFillUI$2;->onDestroy()V
 PLcom/android/server/autofill/ui/AutoFillUI$2;->onSave()V
+PLcom/android/server/autofill/ui/AutoFillUI$3;-><init>(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Landroid/service/autofill/FillResponse;Landroid/view/autofill/AutofillId;Landroid/metrics/LogMaker;)V
+PLcom/android/server/autofill/ui/AutoFillUI$3;->log(I)V
+PLcom/android/server/autofill/ui/AutoFillUI$3;->onCanceled()V
+PLcom/android/server/autofill/ui/AutoFillUI$3;->onDatasetPicked(Landroid/service/autofill/Dataset;)V
+PLcom/android/server/autofill/ui/AutoFillUI$3;->onDismissed()V
 HSPLcom/android/server/autofill/ui/AutoFillUI;->$r8$lambda$3Awxx6tNaZaB9QZO-U7h36R68V0(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/PendingUi;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Z)V
 PLcom/android/server/autofill/ui/AutoFillUI;->$r8$lambda$GQNVrqupF5K-N1rRrD7-hFT54mY(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Landroid/service/autofill/FillResponse;Landroid/view/autofill/AutofillId;Ljava/lang/String;Ljava/lang/CharSequence;Landroid/graphics/drawable/Drawable;Landroid/metrics/LogMaker;)V
 PLcom/android/server/autofill/ui/AutoFillUI;->$r8$lambda$HEDqa4tsOCQnTRUdqNAJKKvM9Jg(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
 PLcom/android/server/autofill/ui/AutoFillUI;->$r8$lambda$I-n54hnXUIh6ahPrM5XBEnwI2FI(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Ljava/lang/CharSequence;)V
 PLcom/android/server/autofill/ui/AutoFillUI;->$r8$lambda$KxXmGZj5SFR1rwFSed7Y8hSogfc(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
-PLcom/android/server/autofill/ui/AutoFillUI;->$r8$lambda$QEkZ0Vhvwd6S11ozZJM3zc7-1VE(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Ljava/lang/String;)V
+PLcom/android/server/autofill/ui/AutoFillUI;->$r8$lambda$Nct1uE7d5jGx_j4TZ1xTTofnI2I(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Landroid/service/autofill/FillResponse;Landroid/view/autofill/AutofillId;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Landroid/content/ComponentName;Landroid/metrics/LogMaker;)V
+HPLcom/android/server/autofill/ui/AutoFillUI;->$r8$lambda$QEkZ0Vhvwd6S11ozZJM3zc7-1VE(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Ljava/lang/String;)V
 PLcom/android/server/autofill/ui/AutoFillUI;->$r8$lambda$XaM0hy-2xIX8Jo0aqbwSl608Xvk(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
 PLcom/android/server/autofill/ui/AutoFillUI;->$r8$lambda$XsqW0h-TCZTitzObpdNyBrAzwek(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Lcom/android/server/autofill/ui/PendingUi;Ljava/lang/CharSequence;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Landroid/content/ComponentName;Landroid/service/autofill/SaveInfo;Landroid/service/autofill/ValueFinder;Landroid/metrics/LogMaker;ZZ)V
-PLcom/android/server/autofill/ui/AutoFillUI;->$r8$lambda$guPliExew6UIxr2VWgqPIAyMyvA(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+HPLcom/android/server/autofill/ui/AutoFillUI;->$r8$lambda$guPliExew6UIxr2VWgqPIAyMyvA(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
 PLcom/android/server/autofill/ui/AutoFillUI;->$r8$lambda$xPmN962dKT_ZXNF52ELteIZqfaY(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
 PLcom/android/server/autofill/ui/AutoFillUI;->-$$Nest$fgetmCallback(Lcom/android/server/autofill/ui/AutoFillUI;)Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;
 PLcom/android/server/autofill/ui/AutoFillUI;->-$$Nest$fgetmContext(Lcom/android/server/autofill/ui/AutoFillUI;)Landroid/content/Context;
 PLcom/android/server/autofill/ui/AutoFillUI;->-$$Nest$fgetmMetricsLogger(Lcom/android/server/autofill/ui/AutoFillUI;)Lcom/android/internal/logging/MetricsLogger;
 PLcom/android/server/autofill/ui/AutoFillUI;->-$$Nest$mdestroySaveUiUiThread(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/PendingUi;Z)V
+PLcom/android/server/autofill/ui/AutoFillUI;->-$$Nest$mhideFillDialogUiThread(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
 PLcom/android/server/autofill/ui/AutoFillUI;->-$$Nest$mhideFillUiUiThread(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Z)V
 PLcom/android/server/autofill/ui/AutoFillUI;->-$$Nest$mhideSaveUiUiThread(Lcom/android/server/autofill/ui/AutoFillUI;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)Lcom/android/server/autofill/ui/PendingUi;
 HSPLcom/android/server/autofill/ui/AutoFillUI;-><init>(Landroid/content/Context;)V
@@ -13887,26 +14540,28 @@
 HPLcom/android/server/autofill/ui/AutoFillUI;->filterFillUi(Ljava/lang/String;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
 HPLcom/android/server/autofill/ui/AutoFillUI;->hideAll(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
 HPLcom/android/server/autofill/ui/AutoFillUI;->hideAllUiThread(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
-PLcom/android/server/autofill/ui/AutoFillUI;->hideFillDialog(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+HPLcom/android/server/autofill/ui/AutoFillUI;->hideFillDialog(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
 HSPLcom/android/server/autofill/ui/AutoFillUI;->hideFillDialogUiThread(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
-PLcom/android/server/autofill/ui/AutoFillUI;->hideFillUi(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+HPLcom/android/server/autofill/ui/AutoFillUI;->hideFillUi(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
 HSPLcom/android/server/autofill/ui/AutoFillUI;->hideFillUiUiThread(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Z)V
 HPLcom/android/server/autofill/ui/AutoFillUI;->hideSaveUiUiThread(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)Lcom/android/server/autofill/ui/PendingUi;
 PLcom/android/server/autofill/ui/AutoFillUI;->isFillDialogShowing()Z
 PLcom/android/server/autofill/ui/AutoFillUI;->isSaveUiShowing()Z
 PLcom/android/server/autofill/ui/AutoFillUI;->lambda$clearCallback$1(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
 HSPLcom/android/server/autofill/ui/AutoFillUI;->lambda$destroyAll$11(Lcom/android/server/autofill/ui/PendingUi;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Z)V
-PLcom/android/server/autofill/ui/AutoFillUI;->lambda$filterFillUi$5(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Ljava/lang/String;)V
+HPLcom/android/server/autofill/ui/AutoFillUI;->lambda$filterFillUi$5(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Ljava/lang/String;)V
 PLcom/android/server/autofill/ui/AutoFillUI;->lambda$hideAll$10(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
 PLcom/android/server/autofill/ui/AutoFillUI;->lambda$hideFillDialog$4(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
 PLcom/android/server/autofill/ui/AutoFillUI;->lambda$hideFillUi$3(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
-PLcom/android/server/autofill/ui/AutoFillUI;->lambda$setCallback$0(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+HPLcom/android/server/autofill/ui/AutoFillUI;->lambda$setCallback$0(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
 PLcom/android/server/autofill/ui/AutoFillUI;->lambda$showError$2(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Ljava/lang/CharSequence;)V
+PLcom/android/server/autofill/ui/AutoFillUI;->lambda$showFillDialog$8(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Landroid/service/autofill/FillResponse;Landroid/view/autofill/AutofillId;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Landroid/content/ComponentName;Landroid/metrics/LogMaker;)V
 PLcom/android/server/autofill/ui/AutoFillUI;->lambda$showFillUi$6(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Landroid/service/autofill/FillResponse;Landroid/view/autofill/AutofillId;Ljava/lang/String;Ljava/lang/CharSequence;Landroid/graphics/drawable/Drawable;Landroid/metrics/LogMaker;)V
 PLcom/android/server/autofill/ui/AutoFillUI;->lambda$showSaveUi$7(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Lcom/android/server/autofill/ui/PendingUi;Ljava/lang/CharSequence;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Landroid/content/ComponentName;Landroid/service/autofill/SaveInfo;Landroid/service/autofill/ValueFinder;Landroid/metrics/LogMaker;ZZ)V
 HPLcom/android/server/autofill/ui/AutoFillUI;->setCallback(Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
 PLcom/android/server/autofill/ui/AutoFillUI;->showError(ILcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
 PLcom/android/server/autofill/ui/AutoFillUI;->showError(Ljava/lang/CharSequence;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;)V
+PLcom/android/server/autofill/ui/AutoFillUI;->showFillDialog(Landroid/view/autofill/AutofillId;Landroid/service/autofill/FillResponse;Ljava/lang/String;Ljava/lang/String;Landroid/content/ComponentName;Landroid/graphics/drawable/Drawable;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;IZ)V
 PLcom/android/server/autofill/ui/AutoFillUI;->showFillUi(Landroid/view/autofill/AutofillId;Landroid/service/autofill/FillResponse;Ljava/lang/String;Ljava/lang/String;Landroid/content/ComponentName;Ljava/lang/CharSequence;Landroid/graphics/drawable/Drawable;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;IZ)V
 PLcom/android/server/autofill/ui/AutoFillUI;->showSaveUi(Ljava/lang/CharSequence;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Landroid/service/autofill/SaveInfo;Landroid/service/autofill/ValueFinder;Landroid/content/ComponentName;Lcom/android/server/autofill/ui/AutoFillUI$AutoFillUiCallback;Lcom/android/server/autofill/ui/PendingUi;ZZ)V
 PLcom/android/server/autofill/ui/CustomScrollView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;)V
@@ -13914,6 +14569,59 @@
 PLcom/android/server/autofill/ui/CustomScrollView;->getAttrBasedMaxHeightPercent(Landroid/content/Context;)I
 PLcom/android/server/autofill/ui/CustomScrollView;->onMeasure(II)V
 PLcom/android/server/autofill/ui/CustomScrollView;->setMaxBodyHeightPercent(Landroid/content/Context;)V
+PLcom/android/server/autofill/ui/DialogFillUi$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/autofill/ui/DialogFillUi;)V
+PLcom/android/server/autofill/ui/DialogFillUi$$ExternalSyntheticLambda0;->onCancel(Landroid/content/DialogInterface;)V
+PLcom/android/server/autofill/ui/DialogFillUi$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/autofill/ui/DialogFillUi;)V
+PLcom/android/server/autofill/ui/DialogFillUi$$ExternalSyntheticLambda4;->onClick(Landroid/view/View;)V
+PLcom/android/server/autofill/ui/DialogFillUi$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/autofill/ui/DialogFillUi;)V
+PLcom/android/server/autofill/ui/DialogFillUi$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/autofill/ui/DialogFillUi;)V
+PLcom/android/server/autofill/ui/DialogFillUi$$ExternalSyntheticLambda6;->onItemClick(Landroid/widget/AdapterView;Landroid/view/View;IJ)V
+PLcom/android/server/autofill/ui/DialogFillUi$$ExternalSyntheticLambda7;-><init>(Landroid/widget/AdapterView$OnItemClickListener;)V
+PLcom/android/server/autofill/ui/DialogFillUi$$ExternalSyntheticLambda7;->onClick(Landroid/view/View;)V
+PLcom/android/server/autofill/ui/DialogFillUi$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/autofill/ui/DialogFillUi;I)V
+PLcom/android/server/autofill/ui/DialogFillUi$$ExternalSyntheticLambda8;->onFilterComplete(I)V
+PLcom/android/server/autofill/ui/DialogFillUi$$ExternalSyntheticLambda9;-><init>(Lcom/android/server/autofill/ui/DialogFillUi;)V
+PLcom/android/server/autofill/ui/DialogFillUi$ItemsAdapter$1$$ExternalSyntheticLambda0;-><init>(Ljava/lang/CharSequence;)V
+PLcom/android/server/autofill/ui/DialogFillUi$ItemsAdapter$1$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
+PLcom/android/server/autofill/ui/DialogFillUi$ItemsAdapter$1;->$r8$lambda$zZdzmh4_zz5LBrrK7XRa583LleM(Ljava/lang/CharSequence;Lcom/android/server/autofill/ui/DialogFillUi$ViewItem;)Z
+PLcom/android/server/autofill/ui/DialogFillUi$ItemsAdapter$1;-><init>(Lcom/android/server/autofill/ui/DialogFillUi$ItemsAdapter;)V
+PLcom/android/server/autofill/ui/DialogFillUi$ItemsAdapter$1;->lambda$performFiltering$0(Ljava/lang/CharSequence;Lcom/android/server/autofill/ui/DialogFillUi$ViewItem;)Z
+PLcom/android/server/autofill/ui/DialogFillUi$ItemsAdapter$1;->performFiltering(Ljava/lang/CharSequence;)Landroid/widget/Filter$FilterResults;
+PLcom/android/server/autofill/ui/DialogFillUi$ItemsAdapter$1;->publishResults(Ljava/lang/CharSequence;Landroid/widget/Filter$FilterResults;)V
+PLcom/android/server/autofill/ui/DialogFillUi$ItemsAdapter;->-$$Nest$fgetmAllItems(Lcom/android/server/autofill/ui/DialogFillUi$ItemsAdapter;)Ljava/util/List;
+PLcom/android/server/autofill/ui/DialogFillUi$ItemsAdapter;->-$$Nest$fgetmFilteredItems(Lcom/android/server/autofill/ui/DialogFillUi$ItemsAdapter;)Ljava/util/List;
+PLcom/android/server/autofill/ui/DialogFillUi$ItemsAdapter;-><init>(Lcom/android/server/autofill/ui/DialogFillUi;Ljava/util/List;)V
+PLcom/android/server/autofill/ui/DialogFillUi$ItemsAdapter;->getCount()I
+PLcom/android/server/autofill/ui/DialogFillUi$ItemsAdapter;->getFilter()Landroid/widget/Filter;
+PLcom/android/server/autofill/ui/DialogFillUi$ItemsAdapter;->getItem(I)Lcom/android/server/autofill/ui/DialogFillUi$ViewItem;
+PLcom/android/server/autofill/ui/DialogFillUi$ItemsAdapter;->getItemId(I)J
+PLcom/android/server/autofill/ui/DialogFillUi$ItemsAdapter;->getView(ILandroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;
+PLcom/android/server/autofill/ui/DialogFillUi$ViewItem;-><init>(Landroid/service/autofill/Dataset;Ljava/util/regex/Pattern;ZLjava/lang/String;Landroid/view/View;)V
+PLcom/android/server/autofill/ui/DialogFillUi$ViewItem;->matches(Ljava/lang/CharSequence;)Z
+PLcom/android/server/autofill/ui/DialogFillUi;->$r8$lambda$FHcvEh2EiLoIxQY7TtcEVwqFWjQ(Lcom/android/server/autofill/ui/DialogFillUi;Landroid/view/View;)V
+PLcom/android/server/autofill/ui/DialogFillUi;->$r8$lambda$kL3Y2XGjBYNQG0nZhDxVkQXQGv8(Lcom/android/server/autofill/ui/DialogFillUi;Landroid/content/DialogInterface;)V
+PLcom/android/server/autofill/ui/DialogFillUi;->$r8$lambda$rlQ1LBjwhkz8NjpV6lw6tMlKOcE(Lcom/android/server/autofill/ui/DialogFillUi;Landroid/widget/AdapterView;Landroid/view/View;IJ)V
+PLcom/android/server/autofill/ui/DialogFillUi;->$r8$lambda$xmMEYdgmJJ_ePCu123bBQQeEVJg(Landroid/widget/AdapterView$OnItemClickListener;Landroid/view/View;)V
+PLcom/android/server/autofill/ui/DialogFillUi;->$r8$lambda$zwqLwcyFqya2DBJ4s4_qcUkSLSc(Lcom/android/server/autofill/ui/DialogFillUi;II)V
+PLcom/android/server/autofill/ui/DialogFillUi;->-$$Nest$mannounceSearchResultIfNeeded(Lcom/android/server/autofill/ui/DialogFillUi;)V
+PLcom/android/server/autofill/ui/DialogFillUi;-><init>(Landroid/content/Context;Landroid/service/autofill/FillResponse;Landroid/view/autofill/AutofillId;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Landroid/content/ComponentName;Lcom/android/server/autofill/ui/OverlayControl;ZLcom/android/server/autofill/ui/DialogFillUi$UiCallback;)V
+PLcom/android/server/autofill/ui/DialogFillUi;->announceSearchResultIfNeeded()V
+PLcom/android/server/autofill/ui/DialogFillUi;->createDatasetItems(Landroid/service/autofill/FillResponse;Landroid/view/autofill/AutofillId;)Ljava/util/ArrayList;
+PLcom/android/server/autofill/ui/DialogFillUi;->destroy()V
+PLcom/android/server/autofill/ui/DialogFillUi;->getVisibleDatasetsMaxCount()I
+PLcom/android/server/autofill/ui/DialogFillUi;->initialDatasetLayout(Landroid/view/View;Ljava/lang/String;)V
+PLcom/android/server/autofill/ui/DialogFillUi;->lambda$initialDatasetLayout$7(Landroid/widget/AdapterView;Landroid/view/View;IJ)V
+PLcom/android/server/autofill/ui/DialogFillUi;->lambda$initialDatasetLayout$8(Landroid/widget/AdapterView$OnItemClickListener;Landroid/view/View;)V
+PLcom/android/server/autofill/ui/DialogFillUi;->lambda$initialDatasetLayout$9(II)V
+PLcom/android/server/autofill/ui/DialogFillUi;->lambda$new$0(Landroid/content/DialogInterface;)V
+PLcom/android/server/autofill/ui/DialogFillUi;->lambda$setDismissButton$2(Landroid/view/View;)V
+PLcom/android/server/autofill/ui/DialogFillUi;->setContinueButton(Landroid/view/View;Landroid/view/View$OnClickListener;)V
+PLcom/android/server/autofill/ui/DialogFillUi;->setDialogParamsAsBottomSheet()V
+PLcom/android/server/autofill/ui/DialogFillUi;->setDismissButton(Landroid/view/View;)V
+PLcom/android/server/autofill/ui/DialogFillUi;->setHeader(Landroid/view/View;Landroid/service/autofill/FillResponse;)V
+PLcom/android/server/autofill/ui/DialogFillUi;->setServiceIcon(Landroid/view/View;Landroid/graphics/drawable/Drawable;)V
+PLcom/android/server/autofill/ui/DialogFillUi;->show()V
+PLcom/android/server/autofill/ui/DialogFillUi;->throwIfDestroyed()V
 PLcom/android/server/autofill/ui/FillUi$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/autofill/ui/FillUi;)V
 PLcom/android/server/autofill/ui/FillUi$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/autofill/ui/FillUi;)V
 PLcom/android/server/autofill/ui/FillUi$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/autofill/ui/FillUi;Landroid/service/autofill/FillResponse;)V
@@ -13998,7 +14706,7 @@
 PLcom/android/server/autofill/ui/InlineContentProviderImpl;->requestSurfacePackage()V
 PLcom/android/server/autofill/ui/InlineFillUi$InlineFillUiInfo;-><init>(Landroid/view/inputmethod/InlineSuggestionsRequest;Landroid/view/autofill/AutofillId;Ljava/lang/String;Lcom/android/server/autofill/RemoteInlineSuggestionRenderService;II)V
 HPLcom/android/server/autofill/ui/InlineFillUi;-><init>(Landroid/view/autofill/AutofillId;)V
-PLcom/android/server/autofill/ui/InlineFillUi;-><init>(Lcom/android/server/autofill/ui/InlineFillUi$InlineFillUiInfo;Landroid/util/SparseArray;)V
+HPLcom/android/server/autofill/ui/InlineFillUi;-><init>(Lcom/android/server/autofill/ui/InlineFillUi$InlineFillUiInfo;Landroid/util/SparseArray;)V
 PLcom/android/server/autofill/ui/InlineFillUi;->copy(ILandroid/view/inputmethod/InlineSuggestion;)Landroid/view/inputmethod/InlineSuggestion;
 PLcom/android/server/autofill/ui/InlineFillUi;->disableFilterMatching()V
 HPLcom/android/server/autofill/ui/InlineFillUi;->emptyUi(Landroid/view/autofill/AutofillId;)Lcom/android/server/autofill/ui/InlineFillUi;
@@ -14006,7 +14714,7 @@
 PLcom/android/server/autofill/ui/InlineFillUi;->forAutofill(Lcom/android/server/autofill/ui/InlineFillUi$InlineFillUiInfo;Landroid/service/autofill/FillResponse;Lcom/android/server/autofill/ui/InlineFillUi$InlineSuggestionUiCallback;)Lcom/android/server/autofill/ui/InlineFillUi;
 HPLcom/android/server/autofill/ui/InlineFillUi;->getAutofillId()Landroid/view/autofill/AutofillId;
 HPLcom/android/server/autofill/ui/InlineFillUi;->getInlineSuggestionsResponse()Landroid/view/inputmethod/InlineSuggestionsResponse;
-PLcom/android/server/autofill/ui/InlineFillUi;->includeDataset(Landroid/service/autofill/Dataset;I)Z
+HPLcom/android/server/autofill/ui/InlineFillUi;->includeDataset(Landroid/service/autofill/Dataset;I)Z
 PLcom/android/server/autofill/ui/InlineFillUi;->setFilterText(Ljava/lang/String;)V
 PLcom/android/server/autofill/ui/InlineSuggestionFactory$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/autofill/ui/InlineFillUi$InlineSuggestionUiCallback;Landroid/service/autofill/Dataset;I)V
 PLcom/android/server/autofill/ui/InlineSuggestionFactory$$ExternalSyntheticLambda0;->run()V
@@ -14016,7 +14724,7 @@
 PLcom/android/server/autofill/ui/InlineSuggestionFactory;->createInlineSuggestionTooltip(Landroid/view/inputmethod/InlineSuggestionsRequest;Lcom/android/server/autofill/ui/InlineFillUi$InlineFillUiInfo;Ljava/lang/String;Landroid/service/autofill/InlinePresentation;)Landroid/view/inputmethod/InlineSuggestion;
 HPLcom/android/server/autofill/ui/InlineSuggestionFactory;->createInlineSuggestions(Lcom/android/server/autofill/ui/InlineFillUi$InlineFillUiInfo;Ljava/lang/String;Ljava/util/List;Lcom/android/server/autofill/ui/InlineFillUi$InlineSuggestionUiCallback;)Landroid/util/SparseArray;
 PLcom/android/server/autofill/ui/InlineSuggestionFactory;->lambda$createInlineSuggestions$1(Lcom/android/server/autofill/ui/InlineFillUi$InlineSuggestionUiCallback;Landroid/service/autofill/Dataset;I)V
-PLcom/android/server/autofill/ui/InlineSuggestionFactory;->mergedInlinePresentation(Landroid/view/inputmethod/InlineSuggestionsRequest;ILandroid/service/autofill/InlinePresentation;)Landroid/service/autofill/InlinePresentation;
+HPLcom/android/server/autofill/ui/InlineSuggestionFactory;->mergedInlinePresentation(Landroid/view/inputmethod/InlineSuggestionsRequest;ILandroid/service/autofill/InlinePresentation;)Landroid/service/autofill/InlinePresentation;
 HSPLcom/android/server/autofill/ui/OverlayControl;-><init>(Landroid/content/Context;)V
 PLcom/android/server/autofill/ui/OverlayControl;->hideOverlays()V
 PLcom/android/server/autofill/ui/OverlayControl;->setOverlayAllowed(Z)V
@@ -14040,20 +14748,35 @@
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$1;->onResult(Landroid/view/SurfaceControlViewHost$SurfacePackage;)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl;Landroid/os/IBinder;I)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl$$ExternalSyntheticLambda0;->run()V
+PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl;Landroid/content/IntentSender;)V
+PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl$$ExternalSyntheticLambda1;->run()V
+PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi;)V
+PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl$$ExternalSyntheticLambda2;->run()V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl;Landroid/service/autofill/IInlineSuggestionUi;Landroid/view/SurfaceControlViewHost$SurfacePackage;II)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl$$ExternalSyntheticLambda3;->run()V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi;)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl$$ExternalSyntheticLambda4;->run()V
+PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi;)V
+PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl$$ExternalSyntheticLambda5;->run()V
+PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl;->$r8$lambda$7EroBE8qsOYTk0KeRf_IQSOTtLM(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi;)V
+PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl;->$r8$lambda$CC2uAXytaf8-tYMw5FABYj-qTfE(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl;Landroid/content/IntentSender;)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl;->$r8$lambda$Ljhi5Qyy1ZGUU66s80Nu2_Z4UnY(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl;Landroid/service/autofill/IInlineSuggestionUi;Landroid/view/SurfaceControlViewHost$SurfacePackage;II)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl;->$r8$lambda$MkEeckSM9OL-2qGHNrwhTAEBqUY(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl;Landroid/os/IBinder;I)V
+PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl;->$r8$lambda$XFXhR0IPd9zBAHjsid5jvj15nT0(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi;)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl;->$r8$lambda$ZcpIzSbpdyHoPe8e5boY0vb1ZNc(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi;)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl;-><init>(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi;)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl;-><init>(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi;Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl-IA;)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl;->lambda$onClick$0(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi;)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl;->lambda$onContent$2(Landroid/service/autofill/IInlineSuggestionUi;Landroid/view/SurfaceControlViewHost$SurfacePackage;II)V
+PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl;->lambda$onError$3(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi;)V
+PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl;->lambda$onLongClick$1(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi;)V
+PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl;->lambda$onStartIntentSender$5(Landroid/content/IntentSender;)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl;->lambda$onTransferTouchFocusToImeWindow$4(Landroid/os/IBinder;I)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl;->onClick()V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl;->onContent(Landroid/service/autofill/IInlineSuggestionUi;Landroid/view/SurfaceControlViewHost$SurfacePackage;II)V
+PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl;->onError()V
+PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl;->onLongClick()V
+PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl;->onStartIntentSender(Landroid/content/IntentSender;)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi$InlineSuggestionUiCallbackImpl;->onTransferTouchFocusToImeWindow(Landroid/os/IBinder;I)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi;->$r8$lambda$1dxmi2UfbEWG7h4ONjerJvThEns(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi;Lcom/android/internal/view/inline/IInlineContentCallback;)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi;->$r8$lambda$B2fPc8n1JwGv0DRTjeRuW2XnUlM(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi;)V
@@ -14065,6 +14788,9 @@
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi;->-$$Nest$fgetmInlineContentCallback(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi;)Lcom/android/internal/view/inline/IInlineContentCallback;
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi;->-$$Nest$mhandleInlineSuggestionUiReady(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi;Landroid/service/autofill/IInlineSuggestionUi;Landroid/view/SurfaceControlViewHost$SurfacePackage;II)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi;->-$$Nest$mhandleOnClick(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi;)V
+PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi;->-$$Nest$mhandleOnError(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi;)V
+PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi;->-$$Nest$mhandleOnLongClick(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi;)V
+PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi;->-$$Nest$mhandleOnStartIntentSender(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi;Landroid/content/IntentSender;)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi;->-$$Nest$mhandleOnTransferTouchFocusToImeWindow(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi;Landroid/os/IBinder;I)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi;->-$$Nest$mhandleUpdateRefCount(Lcom/android/server/autofill/ui/RemoteInlineSuggestionUi;I)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi;-><clinit>()V
@@ -14072,6 +14798,9 @@
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi;->cancelPendingReleaseViewRequest()V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi;->handleInlineSuggestionUiReady(Landroid/service/autofill/IInlineSuggestionUi;Landroid/view/SurfaceControlViewHost$SurfacePackage;II)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi;->handleOnClick()V
+PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi;->handleOnError()V
+PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi;->handleOnLongClick()V
+PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi;->handleOnStartIntentSender(Landroid/content/IntentSender;)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi;->handleOnTransferTouchFocusToImeWindow(Landroid/os/IBinder;I)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi;->handleRequestSurfacePackage()V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionUi;->handleUpdateRefCount(I)V
@@ -14085,9 +14814,12 @@
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionViewConnector$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/autofill/ui/InlineFillUi$InlineSuggestionUiCallback;)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionViewConnector$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionViewConnector$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/autofill/ui/InlineFillUi$InlineSuggestionUiCallback;)V
+PLcom/android/server/autofill/ui/RemoteInlineSuggestionViewConnector$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionViewConnector;-><clinit>()V
-PLcom/android/server/autofill/ui/RemoteInlineSuggestionViewConnector;-><init>(Lcom/android/server/autofill/ui/InlineFillUi$InlineFillUiInfo;Landroid/service/autofill/InlinePresentation;Ljava/lang/Runnable;Lcom/android/server/autofill/ui/InlineFillUi$InlineSuggestionUiCallback;)V
+HPLcom/android/server/autofill/ui/RemoteInlineSuggestionViewConnector;-><init>(Lcom/android/server/autofill/ui/InlineFillUi$InlineFillUiInfo;Landroid/service/autofill/InlinePresentation;Ljava/lang/Runnable;Lcom/android/server/autofill/ui/InlineFillUi$InlineSuggestionUiCallback;)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionViewConnector;->onClick()V
+PLcom/android/server/autofill/ui/RemoteInlineSuggestionViewConnector;->onError()V
+PLcom/android/server/autofill/ui/RemoteInlineSuggestionViewConnector;->onStartIntentSender(Landroid/content/IntentSender;)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionViewConnector;->onTransferTouchFocusToImeWindow(Landroid/os/IBinder;I)V
 PLcom/android/server/autofill/ui/RemoteInlineSuggestionViewConnector;->renderSuggestion(IILandroid/service/autofill/IInlineSuggestionUiCallback;)Z
 PLcom/android/server/autofill/ui/SaveUi$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/autofill/ui/SaveUi;Landroid/service/autofill/SaveInfo;)V
@@ -14114,6 +14846,7 @@
 PLcom/android/server/autofill/ui/SaveUi;->applyTextViewStyle(Landroid/view/View;)V
 PLcom/android/server/autofill/ui/SaveUi;->destroy()V
 PLcom/android/server/autofill/ui/SaveUi;->hide()Lcom/android/server/autofill/ui/PendingUi;
+PLcom/android/server/autofill/ui/SaveUi;->isShowing()Z
 PLcom/android/server/autofill/ui/SaveUi;->lambda$applyTextViewStyle$5(Ljava/util/List;Landroid/view/View;)Z
 PLcom/android/server/autofill/ui/SaveUi;->lambda$new$0(Landroid/service/autofill/SaveInfo;Landroid/view/View;)V
 PLcom/android/server/autofill/ui/SaveUi;->lambda$new$1(Landroid/view/View;)V
@@ -14128,10 +14861,11 @@
 PLcom/android/server/backup/AppSpecificLocalesBackupHelper;->getBackupPayload(Ljava/lang/String;)[B
 PLcom/android/server/backup/BackupAgentTimeoutParameters;-><init>(Landroid/os/Handler;Landroid/content/ContentResolver;)V
 PLcom/android/server/backup/BackupAgentTimeoutParameters;->getFullBackupAgentTimeoutMillis()J
-PLcom/android/server/backup/BackupAgentTimeoutParameters;->getKvBackupAgentTimeoutMillis()J
+HPLcom/android/server/backup/BackupAgentTimeoutParameters;->getKvBackupAgentTimeoutMillis()J
 PLcom/android/server/backup/BackupAgentTimeoutParameters;->getQuotaExceededTimeoutMillis()J
 PLcom/android/server/backup/BackupAgentTimeoutParameters;->getRestoreAgentFinishedTimeoutMillis()J
 PLcom/android/server/backup/BackupAgentTimeoutParameters;->getRestoreAgentTimeoutMillis(I)J
+PLcom/android/server/backup/BackupAgentTimeoutParameters;->getRestoreSessionTimeoutMillis()J
 PLcom/android/server/backup/BackupAgentTimeoutParameters;->getSettingValue(Landroid/content/ContentResolver;)Ljava/lang/String;
 PLcom/android/server/backup/BackupAgentTimeoutParameters;->update(Landroid/util/KeyValueListParser;)V
 PLcom/android/server/backup/BackupManagerConstants;-><init>(Landroid/os/Handler;Landroid/content/ContentResolver;)V
@@ -14168,14 +14902,16 @@
 HSPLcom/android/server/backup/BackupManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/backup/BackupManagerService;-><init>(Landroid/content/Context;Landroid/util/SparseArray;)V
 PLcom/android/server/backup/BackupManagerService;->activateBackupForUserLocked(I)V
-PLcom/android/server/backup/BackupManagerService;->agentConnected(ILjava/lang/String;Landroid/os/IBinder;)V
+HPLcom/android/server/backup/BackupManagerService;->agentConnected(ILjava/lang/String;Landroid/os/IBinder;)V
 PLcom/android/server/backup/BackupManagerService;->agentConnectedForUser(ILjava/lang/String;Landroid/os/IBinder;)V
 PLcom/android/server/backup/BackupManagerService;->agentDisconnected(ILjava/lang/String;)V
 PLcom/android/server/backup/BackupManagerService;->agentDisconnectedForUser(ILjava/lang/String;)V
 PLcom/android/server/backup/BackupManagerService;->backupNow()V
 PLcom/android/server/backup/BackupManagerService;->backupNow(I)V
 PLcom/android/server/backup/BackupManagerService;->backupNowForUser(I)V
-PLcom/android/server/backup/BackupManagerService;->beginFullBackup(ILcom/android/server/backup/FullBackupJob;)Z
+HPLcom/android/server/backup/BackupManagerService;->beginFullBackup(ILcom/android/server/backup/FullBackupJob;)Z
+PLcom/android/server/backup/BackupManagerService;->beginRestoreSession(ILjava/lang/String;Ljava/lang/String;)Landroid/app/backup/IRestoreSession;
+PLcom/android/server/backup/BackupManagerService;->beginRestoreSessionForUser(ILjava/lang/String;Ljava/lang/String;)Landroid/app/backup/IRestoreSession;
 PLcom/android/server/backup/BackupManagerService;->binderGetCallingUid()I
 HSPLcom/android/server/backup/BackupManagerService;->binderGetCallingUserId()I+]Landroid/os/UserHandle;Landroid/os/UserHandle;
 PLcom/android/server/backup/BackupManagerService;->cancelBackups()V
@@ -14184,7 +14920,7 @@
 PLcom/android/server/backup/BackupManagerService;->createFile(Ljava/io/File;)V
 HPLcom/android/server/backup/BackupManagerService;->dataChanged(ILjava/lang/String;)V+]Lcom/android/server/backup/BackupManagerService;Lcom/android/server/backup/BackupManagerService;]Lcom/android/server/backup/UserBackupManagerService;Lcom/android/server/backup/UserBackupManagerService;
 HSPLcom/android/server/backup/BackupManagerService;->dataChanged(Ljava/lang/String;)V+]Lcom/android/server/backup/BackupManagerService;Lcom/android/server/backup/BackupManagerService;
-HSPLcom/android/server/backup/BackupManagerService;->dataChangedForUser(ILjava/lang/String;)V
+HSPLcom/android/server/backup/BackupManagerService;->dataChangedForUser(ILjava/lang/String;)V+]Lcom/android/server/backup/BackupManagerService;Lcom/android/server/backup/BackupManagerService;
 PLcom/android/server/backup/BackupManagerService;->deactivateBackupForUserLocked(I)V
 PLcom/android/server/backup/BackupManagerService;->deleteFile(Ljava/io/File;)V
 PLcom/android/server/backup/BackupManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
@@ -14192,6 +14928,7 @@
 PLcom/android/server/backup/BackupManagerService;->endFullBackup(I)V
 HPLcom/android/server/backup/BackupManagerService;->enforceCallingPermissionOnUserId(ILjava/lang/String;)V
 PLcom/android/server/backup/BackupManagerService;->enforcePermissionsOnUser(I)V
+PLcom/android/server/backup/BackupManagerService;->excludeKeysFromRestore(Ljava/lang/String;Ljava/util/List;)V
 PLcom/android/server/backup/BackupManagerService;->getActivatedFileForNonSystemUser(I)Ljava/io/File;
 PLcom/android/server/backup/BackupManagerService;->getAvailableRestoreToken(ILjava/lang/String;)J
 PLcom/android/server/backup/BackupManagerService;->getAvailableRestoreTokenForUser(ILjava/lang/String;)J
@@ -14201,10 +14938,10 @@
 PLcom/android/server/backup/BackupManagerService;->getDataManagementIntent(ILjava/lang/String;)Landroid/content/Intent;
 PLcom/android/server/backup/BackupManagerService;->getDataManagementIntent(Ljava/lang/String;)Landroid/content/Intent;
 PLcom/android/server/backup/BackupManagerService;->getDataManagementIntentForUser(ILjava/lang/String;)Landroid/content/Intent;
-PLcom/android/server/backup/BackupManagerService;->getInstance()Lcom/android/server/backup/BackupManagerService;
+HPLcom/android/server/backup/BackupManagerService;->getInstance()Lcom/android/server/backup/BackupManagerService;
 PLcom/android/server/backup/BackupManagerService;->getRememberActivatedFileForNonSystemUser(I)Ljava/io/File;
 HPLcom/android/server/backup/BackupManagerService;->getServiceForUserIfCallerHasPermission(ILjava/lang/String;)Lcom/android/server/backup/UserBackupManagerService;+]Lcom/android/server/backup/BackupManagerService;Lcom/android/server/backup/BackupManagerService;]Landroid/util/SparseArray;Landroid/util/SparseArray;
-PLcom/android/server/backup/BackupManagerService;->getSuppressFileForSystemUser()Ljava/io/File;
+HPLcom/android/server/backup/BackupManagerService;->getSuppressFileForSystemUser()Ljava/io/File;
 PLcom/android/server/backup/BackupManagerService;->getUserManager()Landroid/os/UserManager;
 PLcom/android/server/backup/BackupManagerService;->hasBackupPassword()Z
 HPLcom/android/server/backup/BackupManagerService;->isAppEligibleForBackup(ILjava/lang/String;)Z
@@ -14236,6 +14973,7 @@
 PLcom/android/server/backup/BackupManagerService;->selectBackupTransportAsync(ILandroid/content/ComponentName;Landroid/app/backup/ISelectBackupTransportCallback;)V
 PLcom/android/server/backup/BackupManagerService;->selectBackupTransportAsyncForUser(ILandroid/content/ComponentName;Landroid/app/backup/ISelectBackupTransportCallback;)V
 PLcom/android/server/backup/BackupManagerService;->selectBackupTransportForUser(ILjava/lang/String;)Ljava/lang/String;
+PLcom/android/server/backup/BackupManagerService;->setAncestralSerialNumber(J)V
 PLcom/android/server/backup/BackupManagerService;->setBackupEnabled(IZ)V
 PLcom/android/server/backup/BackupManagerService;->setBackupEnabled(Z)V
 PLcom/android/server/backup/BackupManagerService;->setBackupEnabledForUser(IZ)V
@@ -14255,19 +14993,20 @@
 PLcom/android/server/backup/BackupPasswordManager;->getPasswordVersionFileCodec()Lcom/android/server/backup/utils/DataStreamFileCodec;
 PLcom/android/server/backup/BackupPasswordManager;->hasBackupPassword()Z
 PLcom/android/server/backup/BackupPasswordManager;->loadStateFromFilesystem()V
-PLcom/android/server/backup/BackupUtils;->hashSignature(Landroid/content/pm/Signature;)[B
-PLcom/android/server/backup/BackupUtils;->hashSignature([B)[B
-PLcom/android/server/backup/BackupUtils;->hashSignatureArray([Landroid/content/pm/Signature;)Ljava/util/ArrayList;
-PLcom/android/server/backup/BackupUtils;->signaturesMatch(Ljava/util/ArrayList;Landroid/content/pm/PackageInfo;Landroid/content/pm/PackageManagerInternal;)Z
+HPLcom/android/server/backup/BackupUtils;->hashSignature(Landroid/content/pm/Signature;)[B
+HPLcom/android/server/backup/BackupUtils;->hashSignature([B)[B
+HPLcom/android/server/backup/BackupUtils;->hashSignatureArray([Landroid/content/pm/Signature;)Ljava/util/ArrayList;
+HPLcom/android/server/backup/BackupUtils;->signaturesMatch(Ljava/util/ArrayList;Landroid/content/pm/PackageInfo;Landroid/content/pm/PackageManagerInternal;)Z
 PLcom/android/server/backup/DataChangedJournal;-><init>(Ljava/io/File;)V
-PLcom/android/server/backup/DataChangedJournal;->addPackage(Ljava/lang/String;)V
+HPLcom/android/server/backup/DataChangedJournal;->addPackage(Ljava/lang/String;)V
 PLcom/android/server/backup/DataChangedJournal;->delete()Z
 PLcom/android/server/backup/DataChangedJournal;->equals(Ljava/lang/Object;)Z
 HPLcom/android/server/backup/DataChangedJournal;->forEach(Ljava/util/function/Consumer;)V+]Ljava/io/InputStream;Ljava/io/BufferedInputStream;,Ljava/io/FileInputStream;]Ljava/io/DataInputStream;Ljava/io/DataInputStream;]Ljava/util/function/Consumer;Lcom/android/server/backup/UserBackupManagerService$$ExternalSyntheticLambda12;
 PLcom/android/server/backup/DataChangedJournal;->listJournals(Ljava/io/File;)Ljava/util/ArrayList;
 PLcom/android/server/backup/DataChangedJournal;->newJournal(Ljava/io/File;)Lcom/android/server/backup/DataChangedJournal;
+PLcom/android/server/backup/FileMetadata;-><init>()V
 PLcom/android/server/backup/FullBackupJob;-><clinit>()V
-PLcom/android/server/backup/FullBackupJob;-><init>()V
+HPLcom/android/server/backup/FullBackupJob;-><init>()V
 PLcom/android/server/backup/FullBackupJob;->cancel(ILandroid/content/Context;)V
 HPLcom/android/server/backup/FullBackupJob;->finishBackupPass(I)V
 PLcom/android/server/backup/FullBackupJob;->getJobIdForUserId(I)I
@@ -14307,6 +15046,7 @@
 PLcom/android/server/backup/PackageManagerBackupAgent;->getPreferredHomeComponent()Landroid/content/ComponentName;
 PLcom/android/server/backup/PackageManagerBackupAgent;->getRestoreDataConsumer(I)Lcom/android/server/backup/PackageManagerBackupAgent$RestoreDataConsumer;
 PLcom/android/server/backup/PackageManagerBackupAgent;->getRestoredMetadata(Ljava/lang/String;)Lcom/android/server/backup/PackageManagerBackupAgent$Metadata;
+PLcom/android/server/backup/PackageManagerBackupAgent;->getRestoredPackages()Ljava/util/Set;
 HPLcom/android/server/backup/PackageManagerBackupAgent;->getStorableApplications(Landroid/content/pm/PackageManager;ILcom/android/server/backup/utils/BackupEligibilityRules;)Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/backup/utils/BackupEligibilityRules;Lcom/android/server/backup/utils/BackupEligibilityRules;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
 PLcom/android/server/backup/PackageManagerBackupAgent;->hasMetadata()Z
 HPLcom/android/server/backup/PackageManagerBackupAgent;->init(Landroid/content/pm/PackageManager;Ljava/util/List;I)V
@@ -14321,7 +15061,7 @@
 PLcom/android/server/backup/PeopleBackupHelper;-><init>(I)V
 PLcom/android/server/backup/PeopleBackupHelper;->getBackupPayload(Ljava/lang/String;)[B
 PLcom/android/server/backup/ProcessedPackagesJournal;-><init>(Ljava/io/File;)V
-PLcom/android/server/backup/ProcessedPackagesJournal;->addPackage(Ljava/lang/String;)V
+HPLcom/android/server/backup/ProcessedPackagesJournal;->addPackage(Ljava/lang/String;)V
 PLcom/android/server/backup/ProcessedPackagesJournal;->getPackagesCopy()Ljava/util/Set;
 PLcom/android/server/backup/ProcessedPackagesJournal;->hasBeenProcessed(Ljava/lang/String;)Z
 PLcom/android/server/backup/ProcessedPackagesJournal;->init()V
@@ -14330,7 +15070,8 @@
 PLcom/android/server/backup/SystemBackupAgent;-><clinit>()V
 PLcom/android/server/backup/SystemBackupAgent;-><init>()V
 PLcom/android/server/backup/SystemBackupAgent;->addHelper(Ljava/lang/String;Landroid/app/backup/BackupHelper;)V
-PLcom/android/server/backup/SystemBackupAgent;->onCreate(Landroid/os/UserHandle;I)V
+HPLcom/android/server/backup/SystemBackupAgent;->onCreate(Landroid/os/UserHandle;I)V
+PLcom/android/server/backup/SystemBackupAgent;->onRestore(Landroid/app/backup/BackupDataInput;ILandroid/os/ParcelFileDescriptor;)V
 PLcom/android/server/backup/TransportManager$$ExternalSyntheticLambda0;-><init>()V
 PLcom/android/server/backup/TransportManager$$ExternalSyntheticLambda1;-><init>()V
 PLcom/android/server/backup/TransportManager$$ExternalSyntheticLambda1;->test(Ljava/lang/Object;)Z
@@ -14347,9 +15088,9 @@
 PLcom/android/server/backup/TransportManager$TransportDescription;->-$$Nest$fgettransportDirName(Lcom/android/server/backup/TransportManager$TransportDescription;)Ljava/lang/String;
 PLcom/android/server/backup/TransportManager$TransportDescription;->-$$Nest$fputconfigurationIntent(Lcom/android/server/backup/TransportManager$TransportDescription;Landroid/content/Intent;)V
 HPLcom/android/server/backup/TransportManager$TransportDescription;->-$$Nest$fputcurrentDestinationString(Lcom/android/server/backup/TransportManager$TransportDescription;Ljava/lang/String;)V
-PLcom/android/server/backup/TransportManager$TransportDescription;->-$$Nest$fputdataManagementIntent(Lcom/android/server/backup/TransportManager$TransportDescription;Landroid/content/Intent;)V
+HPLcom/android/server/backup/TransportManager$TransportDescription;->-$$Nest$fputdataManagementIntent(Lcom/android/server/backup/TransportManager$TransportDescription;Landroid/content/Intent;)V
 PLcom/android/server/backup/TransportManager$TransportDescription;->-$$Nest$fputdataManagementLabel(Lcom/android/server/backup/TransportManager$TransportDescription;Ljava/lang/CharSequence;)V
-PLcom/android/server/backup/TransportManager$TransportDescription;->-$$Nest$fputname(Lcom/android/server/backup/TransportManager$TransportDescription;Ljava/lang/String;)V
+HPLcom/android/server/backup/TransportManager$TransportDescription;->-$$Nest$fputname(Lcom/android/server/backup/TransportManager$TransportDescription;Ljava/lang/String;)V
 PLcom/android/server/backup/TransportManager$TransportDescription;-><init>(Ljava/lang/String;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/CharSequence;)V
 PLcom/android/server/backup/TransportManager$TransportDescription;-><init>(Ljava/lang/String;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/CharSequence;Lcom/android/server/backup/TransportManager$TransportDescription-IA;)V
 PLcom/android/server/backup/TransportManager;->$r8$lambda$VdLWXXS3KmyjvqMPKCdg0edE854(Landroid/content/ComponentName;)Z
@@ -14362,10 +15103,10 @@
 PLcom/android/server/backup/TransportManager;->forEachRegisteredTransport(Ljava/util/function/Consumer;)V
 HPLcom/android/server/backup/TransportManager;->fromPackageFilter(Ljava/lang/String;)Ljava/util/function/Predicate;
 HPLcom/android/server/backup/TransportManager;->getCurrentTransportClient(Ljava/lang/String;)Lcom/android/server/backup/transport/TransportConnection;
-PLcom/android/server/backup/TransportManager;->getCurrentTransportClientOrThrow(Ljava/lang/String;)Lcom/android/server/backup/transport/TransportConnection;
+HPLcom/android/server/backup/TransportManager;->getCurrentTransportClientOrThrow(Ljava/lang/String;)Lcom/android/server/backup/transport/TransportConnection;
 HPLcom/android/server/backup/TransportManager;->getCurrentTransportName()Ljava/lang/String;
 HPLcom/android/server/backup/TransportManager;->getRegisteredTransportComponentLocked(Ljava/lang/String;)Landroid/content/ComponentName;
-PLcom/android/server/backup/TransportManager;->getRegisteredTransportDescriptionLocked(Ljava/lang/String;)Lcom/android/server/backup/TransportManager$TransportDescription;
+HPLcom/android/server/backup/TransportManager;->getRegisteredTransportDescriptionLocked(Ljava/lang/String;)Lcom/android/server/backup/TransportManager$TransportDescription;
 PLcom/android/server/backup/TransportManager;->getRegisteredTransportDescriptionOrThrowLocked(Landroid/content/ComponentName;)Lcom/android/server/backup/TransportManager$TransportDescription;
 PLcom/android/server/backup/TransportManager;->getRegisteredTransportDescriptionOrThrowLocked(Ljava/lang/String;)Lcom/android/server/backup/TransportManager$TransportDescription;
 HPLcom/android/server/backup/TransportManager;->getRegisteredTransportEntryLocked(Ljava/lang/String;)Ljava/util/Map$Entry;+]Ljava/util/Map$Entry;Landroid/util/MapCollections$MapIterator;]Ljava/util/Map;Landroid/util/ArrayMap;]Ljava/util/Iterator;Landroid/util/MapCollections$MapIterator;]Ljava/util/Set;Landroid/util/MapCollections$EntrySet;
@@ -14376,7 +15117,7 @@
 PLcom/android/server/backup/TransportManager;->getTransportCurrentDestinationString(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/backup/TransportManager;->getTransportDataManagementIntent(Ljava/lang/String;)Landroid/content/Intent;
 PLcom/android/server/backup/TransportManager;->getTransportDirName(Landroid/content/ComponentName;)Ljava/lang/String;
-PLcom/android/server/backup/TransportManager;->getTransportDirName(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/backup/TransportManager;->getTransportDirName(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/backup/TransportManager;->getTransportName(Landroid/content/ComponentName;)Ljava/lang/String;
 PLcom/android/server/backup/TransportManager;->getTransportWhitelist()Ljava/util/Set;
 PLcom/android/server/backup/TransportManager;->isTransportRegistered(Ljava/lang/String;)Z
@@ -14405,9 +15146,9 @@
 PLcom/android/server/backup/UserBackupManagerFilePersistedSettings;->writeBackupEnableState(IZ)V
 PLcom/android/server/backup/UserBackupManagerFilePersistedSettings;->writeBackupEnableState(Ljava/io/File;Z)V
 PLcom/android/server/backup/UserBackupManagerFiles;->getBaseDir(I)Ljava/io/File;
-PLcom/android/server/backup/UserBackupManagerFiles;->getBaseStateDir(I)Ljava/io/File;
+HPLcom/android/server/backup/UserBackupManagerFiles;->getBaseStateDir(I)Ljava/io/File;
 PLcom/android/server/backup/UserBackupManagerFiles;->getDataDir(I)Ljava/io/File;
-PLcom/android/server/backup/UserBackupManagerFiles;->getStateDirInSystemDir(I)Ljava/io/File;
+HPLcom/android/server/backup/UserBackupManagerFiles;->getStateDirInSystemDir(I)Ljava/io/File;
 PLcom/android/server/backup/UserBackupManagerFiles;->getStateFileInSystemDir(Ljava/lang/String;I)Ljava/io/File;
 PLcom/android/server/backup/UserBackupManagerService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/backup/UserBackupManagerService;)V
 PLcom/android/server/backup/UserBackupManagerService$$ExternalSyntheticLambda0;->onTransportRegistered(Ljava/lang/String;Ljava/lang/String;)V
@@ -14434,7 +15175,7 @@
 PLcom/android/server/backup/UserBackupManagerService$$ExternalSyntheticLambda7;-><init>()V
 PLcom/android/server/backup/UserBackupManagerService$$ExternalSyntheticLambda7;->accept(I)V
 PLcom/android/server/backup/UserBackupManagerService$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/backup/UserBackupManagerService;Lcom/android/server/backup/transport/TransportConnection;)V
-PLcom/android/server/backup/UserBackupManagerService$$ExternalSyntheticLambda8;->onFinished(Ljava/lang/String;)V
+HPLcom/android/server/backup/UserBackupManagerService$$ExternalSyntheticLambda8;->onFinished(Ljava/lang/String;)V
 PLcom/android/server/backup/UserBackupManagerService$1;-><init>(Lcom/android/server/backup/UserBackupManagerService;)V
 HPLcom/android/server/backup/UserBackupManagerService$1;->run()V+]Landroid/util/AtomicFile;Landroid/util/AtomicFile;]Ljava/io/DataOutputStream;Ljava/io/DataOutputStream;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/io/ByteArrayOutputStream;Ljava/io/ByteArrayOutputStream;]Ljava/io/FileOutputStream;Ljava/io/FileOutputStream;
 HPLcom/android/server/backup/UserBackupManagerService$2$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/backup/UserBackupManagerService$2;Ljava/lang/String;[Ljava/lang/String;)V
@@ -14487,19 +15228,24 @@
 PLcom/android/server/backup/UserBackupManagerService;->-$$Nest$mdequeueFullBackupLocked(Lcom/android/server/backup/UserBackupManagerService;Ljava/lang/String;)V
 PLcom/android/server/backup/UserBackupManagerService;->-$$Nest$mremovePackageParticipantsLocked(Lcom/android/server/backup/UserBackupManagerService;[Ljava/lang/String;I)V
 PLcom/android/server/backup/UserBackupManagerService;->-$$Nest$mwriteFullBackupScheduleAsync(Lcom/android/server/backup/UserBackupManagerService;)V
-PLcom/android/server/backup/UserBackupManagerService;->-$$Nest$smaddUserIdToLogMessage(ILjava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/backup/UserBackupManagerService;->-$$Nest$smaddUserIdToLogMessage(ILjava/lang/String;)Ljava/lang/String;
 PLcom/android/server/backup/UserBackupManagerService;-><init>(ILandroid/content/Context;Lcom/android/server/backup/BackupManagerService;Landroid/os/HandlerThread;Ljava/io/File;Ljava/io/File;Lcom/android/server/backup/TransportManager;)V
 PLcom/android/server/backup/UserBackupManagerService;->addPackageParticipantsLocked([Ljava/lang/String;)V
 HPLcom/android/server/backup/UserBackupManagerService;->addPackageParticipantsLockedInner(Ljava/lang/String;Ljava/util/List;)V
 HPLcom/android/server/backup/UserBackupManagerService;->addUserIdToLogMessage(ILjava/lang/String;)Ljava/lang/String;
 HPLcom/android/server/backup/UserBackupManagerService;->agentConnected(Ljava/lang/String;Landroid/os/IBinder;)V
 PLcom/android/server/backup/UserBackupManagerService;->agentDisconnected(Ljava/lang/String;)V
-HPLcom/android/server/backup/UserBackupManagerService;->allAgentPackages()Ljava/util/List;
+HPLcom/android/server/backup/UserBackupManagerService;->allAgentPackages()Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
 PLcom/android/server/backup/UserBackupManagerService;->backupNow()V
 HPLcom/android/server/backup/UserBackupManagerService;->beginFullBackup(Lcom/android/server/backup/FullBackupJob;)Z
+PLcom/android/server/backup/UserBackupManagerService;->beginRestoreSession(Ljava/lang/String;Ljava/lang/String;)Landroid/app/backup/IRestoreSession;
 HPLcom/android/server/backup/UserBackupManagerService;->bindToAgentSynchronous(Landroid/content/pm/ApplicationInfo;II)Landroid/app/IBackupAgent;
 HPLcom/android/server/backup/UserBackupManagerService;->cancelBackups()V
+PLcom/android/server/backup/UserBackupManagerService;->clearApplicationDataAfterRestoreFailure(Ljava/lang/String;)V
+PLcom/android/server/backup/UserBackupManagerService;->clearApplicationDataBeforeRestore(Ljava/lang/String;)V
+PLcom/android/server/backup/UserBackupManagerService;->clearApplicationDataSynchronous(Ljava/lang/String;ZZ)V
 PLcom/android/server/backup/UserBackupManagerService;->clearPendingInits()V
+PLcom/android/server/backup/UserBackupManagerService;->clearRestoreSession(Lcom/android/server/backup/restore/ActiveRestoreSession;)V
 PLcom/android/server/backup/UserBackupManagerService;->createAndInitializeService(ILandroid/content/Context;Lcom/android/server/backup/BackupManagerService;Landroid/os/HandlerThread;Ljava/io/File;Ljava/io/File;Lcom/android/server/backup/TransportManager;)Lcom/android/server/backup/UserBackupManagerService;
 PLcom/android/server/backup/UserBackupManagerService;->createAndInitializeService(ILandroid/content/Context;Lcom/android/server/backup/BackupManagerService;Ljava/util/Set;)Lcom/android/server/backup/UserBackupManagerService;
 HPLcom/android/server/backup/UserBackupManagerService;->dataChanged(Ljava/lang/String;)V+]Landroid/os/Handler;Lcom/android/server/backup/internal/BackupHandler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/backup/UserBackupManagerService;Lcom/android/server/backup/UserBackupManagerService;
@@ -14511,15 +15257,19 @@
 PLcom/android/server/backup/UserBackupManagerService;->dumpInternal(Ljava/io/PrintWriter;)V
 PLcom/android/server/backup/UserBackupManagerService;->endFullBackup()V
 HPLcom/android/server/backup/UserBackupManagerService;->enqueueFullBackup(Ljava/lang/String;J)V+]Lcom/android/server/backup/UserBackupManagerService;Lcom/android/server/backup/UserBackupManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-PLcom/android/server/backup/UserBackupManagerService;->filterUserFacingPackages(Ljava/util/List;)Ljava/util/List;
+PLcom/android/server/backup/UserBackupManagerService;->excludeKeysFromRestore(Ljava/lang/String;Ljava/util/List;)V
+HPLcom/android/server/backup/UserBackupManagerService;->filterUserFacingPackages(Ljava/util/List;)Ljava/util/List;
 HPLcom/android/server/backup/UserBackupManagerService;->fullBackupAllowable(Ljava/lang/String;)Z
 HPLcom/android/server/backup/UserBackupManagerService;->generateRandomIntegerToken()I
 PLcom/android/server/backup/UserBackupManagerService;->getActivityManager()Landroid/app/IActivityManager;
-PLcom/android/server/backup/UserBackupManagerService;->getAgentTimeoutParameters()Lcom/android/server/backup/BackupAgentTimeoutParameters;
+HPLcom/android/server/backup/UserBackupManagerService;->getAgentTimeoutParameters()Lcom/android/server/backup/BackupAgentTimeoutParameters;
+PLcom/android/server/backup/UserBackupManagerService;->getAlarmManager()Landroid/app/AlarmManager;
+PLcom/android/server/backup/UserBackupManagerService;->getAncestralSerialNumberFile()Ljava/io/File;
 PLcom/android/server/backup/UserBackupManagerService;->getAvailableRestoreToken(Ljava/lang/String;)J
 PLcom/android/server/backup/UserBackupManagerService;->getBackupHandler()Landroid/os/Handler;
 PLcom/android/server/backup/UserBackupManagerService;->getBackupManagerBinder()Landroid/app/backup/IBackupManager;
 PLcom/android/server/backup/UserBackupManagerService;->getBaseStateDir()Ljava/io/File;
+PLcom/android/server/backup/UserBackupManagerService;->getClearDataLock()Ljava/lang/Object;
 PLcom/android/server/backup/UserBackupManagerService;->getConstants()Lcom/android/server/backup/BackupManagerConstants;
 PLcom/android/server/backup/UserBackupManagerService;->getContext()Landroid/content/Context;
 PLcom/android/server/backup/UserBackupManagerService;->getCurrentToken()J
@@ -14527,31 +15277,31 @@
 PLcom/android/server/backup/UserBackupManagerService;->getDataDir()Ljava/io/File;
 PLcom/android/server/backup/UserBackupManagerService;->getDataManagementIntent(Ljava/lang/String;)Landroid/content/Intent;
 HPLcom/android/server/backup/UserBackupManagerService;->getEligibilityRules(Landroid/content/pm/PackageManager;II)Lcom/android/server/backup/utils/BackupEligibilityRules;
-PLcom/android/server/backup/UserBackupManagerService;->getEligibilityRulesForOperation(I)Lcom/android/server/backup/utils/BackupEligibilityRules;
+HPLcom/android/server/backup/UserBackupManagerService;->getEligibilityRulesForOperation(I)Lcom/android/server/backup/utils/BackupEligibilityRules;
 PLcom/android/server/backup/UserBackupManagerService;->getEligibilityRulesForRestoreAtInstall(J)Lcom/android/server/backup/utils/BackupEligibilityRules;
 PLcom/android/server/backup/UserBackupManagerService;->getExcludedRestoreKeys(Ljava/lang/String;)Ljava/util/Set;
 PLcom/android/server/backup/UserBackupManagerService;->getJournal()Lcom/android/server/backup/DataChangedJournal;
 PLcom/android/server/backup/UserBackupManagerService;->getMessageIdForOperationType(I)I
 HPLcom/android/server/backup/UserBackupManagerService;->getOperationTypeFromTransport(Lcom/android/server/backup/transport/TransportConnection;)I
-PLcom/android/server/backup/UserBackupManagerService;->getPackageManager()Landroid/content/pm/PackageManager;
+HPLcom/android/server/backup/UserBackupManagerService;->getPackageManager()Landroid/content/pm/PackageManager;
 PLcom/android/server/backup/UserBackupManagerService;->getPackageManagerBinder()Landroid/content/pm/IPackageManager;
 PLcom/android/server/backup/UserBackupManagerService;->getPendingBackups()Ljava/util/HashMap;
 PLcom/android/server/backup/UserBackupManagerService;->getPendingInits()Landroid/util/ArraySet;
 PLcom/android/server/backup/UserBackupManagerService;->getPendingRestores()Ljava/util/Queue;
-PLcom/android/server/backup/UserBackupManagerService;->getQueueLock()Ljava/lang/Object;
+HPLcom/android/server/backup/UserBackupManagerService;->getQueueLock()Ljava/lang/Object;
 HPLcom/android/server/backup/UserBackupManagerService;->getRequestBackupParams([Ljava/lang/String;Landroid/app/backup/IBackupObserver;Landroid/app/backup/IBackupManagerMonitor;ILcom/android/server/backup/utils/BackupEligibilityRules;Lcom/android/server/backup/transport/TransportConnection;Ljava/lang/String;Lcom/android/server/backup/internal/OnTaskFinishedListener;)Lcom/android/server/backup/params/BackupParams;
 PLcom/android/server/backup/UserBackupManagerService;->getSetupCompleteSettingForUser(Landroid/content/Context;I)Z
 PLcom/android/server/backup/UserBackupManagerService;->getTransportManager()Lcom/android/server/backup/TransportManager;
-PLcom/android/server/backup/UserBackupManagerService;->getUserId()I
-PLcom/android/server/backup/UserBackupManagerService;->getWakelock()Lcom/android/server/backup/UserBackupManagerService$BackupWakeLock;
+HPLcom/android/server/backup/UserBackupManagerService;->getUserId()I
+HPLcom/android/server/backup/UserBackupManagerService;->getWakelock()Lcom/android/server/backup/UserBackupManagerService$BackupWakeLock;
 PLcom/android/server/backup/UserBackupManagerService;->handleCancel(IZ)V
 PLcom/android/server/backup/UserBackupManagerService;->hasBackupPassword()Z
 PLcom/android/server/backup/UserBackupManagerService;->initPackageTracking()V
 PLcom/android/server/backup/UserBackupManagerService;->initializeBackupEnableState()V
 PLcom/android/server/backup/UserBackupManagerService;->initializeTransports([Ljava/lang/String;Landroid/app/backup/IBackupObserver;)V
 HPLcom/android/server/backup/UserBackupManagerService;->isAppEligibleForBackup(Ljava/lang/String;)Z
-PLcom/android/server/backup/UserBackupManagerService;->isBackupEnabled()Z
-PLcom/android/server/backup/UserBackupManagerService;->isBackupOperationInProgress()Z
+HPLcom/android/server/backup/UserBackupManagerService;->isBackupEnabled()Z
+HPLcom/android/server/backup/UserBackupManagerService;->isBackupOperationInProgress()Z
 PLcom/android/server/backup/UserBackupManagerService;->isBackupRunning()Z
 PLcom/android/server/backup/UserBackupManagerService;->isEnabled()Z
 PLcom/android/server/backup/UserBackupManagerService;->isRestoreInProgress()Z
@@ -14559,9 +15309,9 @@
 PLcom/android/server/backup/UserBackupManagerService;->lambda$cancelBackups$2(I)V
 PLcom/android/server/backup/UserBackupManagerService;->lambda$handleCancel$4(I)V
 PLcom/android/server/backup/UserBackupManagerService;->lambda$initializeTransports$5(Ljava/lang/String;)V
-PLcom/android/server/backup/UserBackupManagerService;->lambda$opComplete$10(JLcom/android/server/backup/BackupRestoreTask;)V
+HPLcom/android/server/backup/UserBackupManagerService;->lambda$opComplete$10(JLcom/android/server/backup/BackupRestoreTask;)V
 HPLcom/android/server/backup/UserBackupManagerService;->lambda$parseLeftoverJournals$0(Ljava/util/Set;Ljava/lang/String;)V
-PLcom/android/server/backup/UserBackupManagerService;->lambda$requestBackup$1(Lcom/android/server/backup/transport/TransportConnection;Ljava/lang/String;)V
+HPLcom/android/server/backup/UserBackupManagerService;->lambda$requestBackup$1(Lcom/android/server/backup/transport/TransportConnection;Ljava/lang/String;)V
 PLcom/android/server/backup/UserBackupManagerService;->lambda$restoreAtInstall$9(Lcom/android/server/backup/transport/TransportConnection;Ljava/lang/String;)V
 PLcom/android/server/backup/UserBackupManagerService;->lambda$selectBackupTransportAsync$8(Landroid/content/ComponentName;Landroid/app/backup/ISelectBackupTransportCallback;)V
 PLcom/android/server/backup/UserBackupManagerService;->lambda$updateStateOnBackupEnabled$7(Ljava/util/List;Ljava/util/List;Ljava/lang/String;)V
@@ -14585,16 +15335,21 @@
 HPLcom/android/server/backup/UserBackupManagerService;->scheduleNextFullBackupJob(J)V
 PLcom/android/server/backup/UserBackupManagerService;->selectBackupTransport(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/backup/UserBackupManagerService;->selectBackupTransportAsync(Landroid/content/ComponentName;Landroid/app/backup/ISelectBackupTransportCallback;)V
+PLcom/android/server/backup/UserBackupManagerService;->setAncestralOperationType(I)V
+PLcom/android/server/backup/UserBackupManagerService;->setAncestralPackages(Ljava/util/Set;)V
+PLcom/android/server/backup/UserBackupManagerService;->setAncestralSerialNumber(J)V
+PLcom/android/server/backup/UserBackupManagerService;->setAncestralToken(J)V
 PLcom/android/server/backup/UserBackupManagerService;->setBackupEnabled(Z)V
 PLcom/android/server/backup/UserBackupManagerService;->setBackupEnabled(ZZ)V
-PLcom/android/server/backup/UserBackupManagerService;->setBackupRunning(Z)V
+HPLcom/android/server/backup/UserBackupManagerService;->setBackupRunning(Z)V
+PLcom/android/server/backup/UserBackupManagerService;->setClearingData(Z)V
 PLcom/android/server/backup/UserBackupManagerService;->setCurrentToken(J)V
 PLcom/android/server/backup/UserBackupManagerService;->setJournal(Lcom/android/server/backup/DataChangedJournal;)V
 PLcom/android/server/backup/UserBackupManagerService;->setLastBackupPass(J)V
 PLcom/android/server/backup/UserBackupManagerService;->setRestoreInProgress(Z)V
 PLcom/android/server/backup/UserBackupManagerService;->setRunningFullBackupTask(Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;)V
 PLcom/android/server/backup/UserBackupManagerService;->setSetupComplete(Z)V
-PLcom/android/server/backup/UserBackupManagerService;->setWorkSource(Landroid/os/WorkSource;)V
+HPLcom/android/server/backup/UserBackupManagerService;->setWorkSource(Landroid/os/WorkSource;)V
 HPLcom/android/server/backup/UserBackupManagerService;->shouldSkipUserFacingData()Z
 PLcom/android/server/backup/UserBackupManagerService;->shouldUseNewBackupEligibilityRules()Z
 HPLcom/android/server/backup/UserBackupManagerService;->tearDownAgentAndKill(Landroid/content/pm/ApplicationInfo;)V
@@ -14610,15 +15365,16 @@
 PLcom/android/server/backup/UserBackupManagerService;->writeRestoreTokens()V
 PLcom/android/server/backup/UserBackupManagerService;->writeToJournalLocked(Ljava/lang/String;)V
 PLcom/android/server/backup/UserBackupPreferences;-><init>(Landroid/content/Context;Ljava/io/File;)V
+PLcom/android/server/backup/UserBackupPreferences;->addExcludedKeys(Ljava/lang/String;Ljava/util/List;)V
 PLcom/android/server/backup/UserBackupPreferences;->getExcludedRestoreKeysForPackage(Ljava/lang/String;)Ljava/util/Set;
 PLcom/android/server/backup/fullbackup/AppMetadataBackupWriter;-><init>(Landroid/app/backup/FullBackupDataOutput;Landroid/content/pm/PackageManager;)V
-PLcom/android/server/backup/fullbackup/AppMetadataBackupWriter;->backupManifest(Landroid/content/pm/PackageInfo;Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Z)V
+HPLcom/android/server/backup/fullbackup/AppMetadataBackupWriter;->backupManifest(Landroid/content/pm/PackageInfo;Ljava/io/File;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Z)V
 PLcom/android/server/backup/fullbackup/AppMetadataBackupWriter;->backupManifest(Landroid/content/pm/PackageInfo;Ljava/io/File;Ljava/io/File;Z)V
 PLcom/android/server/backup/fullbackup/AppMetadataBackupWriter;->backupWidget(Landroid/content/pm/PackageInfo;Ljava/io/File;Ljava/io/File;[B)V
 HPLcom/android/server/backup/fullbackup/AppMetadataBackupWriter;->getManifestBytes(Landroid/content/pm/PackageInfo;Z)[B
 PLcom/android/server/backup/fullbackup/AppMetadataBackupWriter;->getMetadataBytes(Ljava/lang/String;)[B
 PLcom/android/server/backup/fullbackup/AppMetadataBackupWriter;->writeWidgetData(Ljava/io/DataOutputStream;[B)V
-PLcom/android/server/backup/fullbackup/FullBackupEngine$FullBackupRunner;-><init>(Lcom/android/server/backup/fullbackup/FullBackupEngine;Lcom/android/server/backup/UserBackupManagerService;Landroid/content/pm/PackageInfo;Landroid/app/IBackupAgent;Landroid/os/ParcelFileDescriptor;IZ)V
+HPLcom/android/server/backup/fullbackup/FullBackupEngine$FullBackupRunner;-><init>(Lcom/android/server/backup/fullbackup/FullBackupEngine;Lcom/android/server/backup/UserBackupManagerService;Landroid/content/pm/PackageInfo;Landroid/app/IBackupAgent;Landroid/os/ParcelFileDescriptor;IZ)V
 HPLcom/android/server/backup/fullbackup/FullBackupEngine$FullBackupRunner;->run()V
 PLcom/android/server/backup/fullbackup/FullBackupEngine$FullBackupRunner;->shouldWriteApk(Landroid/content/pm/ApplicationInfo;ZZ)Z
 PLcom/android/server/backup/fullbackup/FullBackupEngine;->-$$Nest$fgetbackupManagerService(Lcom/android/server/backup/fullbackup/FullBackupEngine;)Lcom/android/server/backup/UserBackupManagerService;
@@ -14629,13 +15385,13 @@
 HPLcom/android/server/backup/fullbackup/FullBackupEngine;-><init>(Lcom/android/server/backup/UserBackupManagerService;Ljava/io/OutputStream;Lcom/android/server/backup/fullbackup/FullBackupPreflight;Landroid/content/pm/PackageInfo;ZLcom/android/server/backup/BackupRestoreTask;JIILcom/android/server/backup/utils/BackupEligibilityRules;)V
 HPLcom/android/server/backup/fullbackup/FullBackupEngine;->backupOnePackage()I
 HPLcom/android/server/backup/fullbackup/FullBackupEngine;->initializeAgent()Z
-PLcom/android/server/backup/fullbackup/FullBackupEngine;->preflightCheck()I
+HPLcom/android/server/backup/fullbackup/FullBackupEngine;->preflightCheck()I
 PLcom/android/server/backup/fullbackup/FullBackupEngine;->tearDown()V
 HPLcom/android/server/backup/fullbackup/FullBackupEntry;-><init>(Ljava/lang/String;J)V
 PLcom/android/server/backup/fullbackup/FullBackupEntry;->compareTo(Lcom/android/server/backup/fullbackup/FullBackupEntry;)I
 PLcom/android/server/backup/fullbackup/FullBackupEntry;->compareTo(Ljava/lang/Object;)I
-PLcom/android/server/backup/fullbackup/FullBackupTask;-><init>(Landroid/app/backup/IFullBackupRestoreObserver;)V
-PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/backup/TransportManager;Lcom/android/server/backup/transport/TransportConnection;)V
+HPLcom/android/server/backup/fullbackup/FullBackupTask;-><init>(Landroid/app/backup/IFullBackupRestoreObserver;)V
+HPLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/backup/TransportManager;Lcom/android/server/backup/transport/TransportConnection;)V
 HPLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$$ExternalSyntheticLambda0;->onFinished(Ljava/lang/String;)V
 PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupPreflight$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupPreflight;Landroid/app/IBackupAgent;J)V
 PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupPreflight$$ExternalSyntheticLambda0;->call(Ljava/lang/Object;)V
@@ -14651,7 +15407,7 @@
 HPLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupRunner;->getPreflightResultBlocking()J
 PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupRunner;->handleCancel(Z)V
 PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupRunner;->operationComplete(J)V
-PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupRunner;->registerTask(Ljava/lang/String;)V
+HPLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupRunner;->registerTask(Ljava/lang/String;)V
 HPLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupRunner;->run()V
 PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupRunner;->unregisterTask()V
 PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;->$r8$lambda$onI225cSjT-QmdBaKRSdSYIKWqU(Lcom/android/server/backup/TransportManager;Lcom/android/server/backup/transport/TransportConnection;Ljava/lang/String;)V
@@ -14665,7 +15421,7 @@
 PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;->handleCancel(Z)V
 PLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;->lambda$newWithCurrentTransport$0(Lcom/android/server/backup/TransportManager;Lcom/android/server/backup/transport/TransportConnection;Ljava/lang/String;)V
 HPLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;->newWithCurrentTransport(Lcom/android/server/backup/UserBackupManagerService;Lcom/android/server/backup/OperationStorage;Landroid/app/backup/IFullBackupRestoreObserver;[Ljava/lang/String;ZLcom/android/server/backup/FullBackupJob;Ljava/util/concurrent/CountDownLatch;Landroid/app/backup/IBackupObserver;Landroid/app/backup/IBackupManagerMonitor;ZLjava/lang/String;Lcom/android/server/backup/utils/BackupEligibilityRules;)Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;
-HPLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;->run()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/backup/transport/BackupTransportClient;Lcom/android/server/backup/transport/BackupTransportClient;]Ljava/io/FileInputStream;Ljava/io/FileInputStream;]Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupRunner;Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupRunner;]Ljava/util/concurrent/CountDownLatch;Ljava/util/concurrent/CountDownLatch;]Lcom/android/server/backup/UserBackupManagerService$BackupWakeLock;Lcom/android/server/backup/UserBackupManagerService$BackupWakeLock;]Lcom/android/server/backup/UserBackupManagerService;Lcom/android/server/backup/UserBackupManagerService;]Ljava/io/FileOutputStream;Ljava/io/FileOutputStream;]Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;]Lcom/android/server/backup/FullBackupJob;Lcom/android/server/backup/FullBackupJob;]Ljava/lang/Thread;Ljava/lang/Thread;]Lcom/android/server/backup/internal/OnTaskFinishedListener;Lcom/android/server/backup/UserBackupManagerService$$ExternalSyntheticLambda8;,Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$$ExternalSyntheticLambda0;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;]Landroid/app/IActivityManager;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/backup/transport/TransportConnection;Lcom/android/server/backup/transport/TransportConnection;
+HPLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;->run()V+]Lcom/android/server/backup/transport/BackupTransportClient;Lcom/android/server/backup/transport/BackupTransportClient;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/io/FileInputStream;Ljava/io/FileInputStream;]Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupRunner;Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$SinglePackageBackupRunner;]Ljava/util/concurrent/CountDownLatch;Ljava/util/concurrent/CountDownLatch;]Lcom/android/server/backup/UserBackupManagerService$BackupWakeLock;Lcom/android/server/backup/UserBackupManagerService$BackupWakeLock;]Lcom/android/server/backup/UserBackupManagerService;Lcom/android/server/backup/UserBackupManagerService;]Ljava/io/FileOutputStream;Ljava/io/FileOutputStream;]Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;]Lcom/android/server/backup/FullBackupJob;Lcom/android/server/backup/FullBackupJob;]Ljava/lang/Thread;Ljava/lang/Thread;]Lcom/android/server/backup/internal/OnTaskFinishedListener;Lcom/android/server/backup/UserBackupManagerService$$ExternalSyntheticLambda8;,Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask$$ExternalSyntheticLambda0;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;]Landroid/app/IActivityManager;Lcom/android/server/am/ActivityManagerService;]Lcom/android/server/backup/transport/TransportConnection;Lcom/android/server/backup/transport/TransportConnection;
 HPLcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;->unregisterTask()V
 PLcom/android/server/backup/internal/BackupHandler$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/backup/TransportManager;Lcom/android/server/backup/transport/TransportConnection;)V
 PLcom/android/server/backup/internal/BackupHandler$$ExternalSyntheticLambda0;->onFinished(Ljava/lang/String;)V
@@ -14676,16 +15432,18 @@
 HPLcom/android/server/backup/internal/BackupHandler;->handleMessage(Landroid/os/Message;)V
 PLcom/android/server/backup/internal/BackupHandler;->lambda$handleMessage$0(Lcom/android/server/backup/TransportManager;Lcom/android/server/backup/transport/TransportConnection;Ljava/lang/String;)V
 PLcom/android/server/backup/internal/BackupHandler;->stop()V
+PLcom/android/server/backup/internal/ClearDataObserver;-><init>(Lcom/android/server/backup/UserBackupManagerService;)V
+PLcom/android/server/backup/internal/ClearDataObserver;->onRemoveCompleted(Ljava/lang/String;Z)V
 PLcom/android/server/backup/internal/LifecycleOperationStorage;-><init>(I)V
 PLcom/android/server/backup/internal/LifecycleOperationStorage;->cancelOperation(IZLjava/util/function/IntConsumer;)V
 HPLcom/android/server/backup/internal/LifecycleOperationStorage;->isBackupOperationInProgress()Z
 HPLcom/android/server/backup/internal/LifecycleOperationStorage;->onOperationComplete(IJLjava/util/function/Consumer;)V
 PLcom/android/server/backup/internal/LifecycleOperationStorage;->operationTokensForOpType(I)Ljava/util/Set;
 PLcom/android/server/backup/internal/LifecycleOperationStorage;->operationTokensForPackage(Ljava/lang/String;)Ljava/util/Set;
-PLcom/android/server/backup/internal/LifecycleOperationStorage;->registerOperation(IILcom/android/server/backup/BackupRestoreTask;I)V
+HPLcom/android/server/backup/internal/LifecycleOperationStorage;->registerOperation(IILcom/android/server/backup/BackupRestoreTask;I)V
 HPLcom/android/server/backup/internal/LifecycleOperationStorage;->registerOperationForPackages(IILjava/util/Set;Lcom/android/server/backup/BackupRestoreTask;I)V
 HPLcom/android/server/backup/internal/LifecycleOperationStorage;->removeOperation(I)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;]Ljava/util/Set;Ljava/util/HashMap$KeySet;,Ljava/util/HashSet;
-PLcom/android/server/backup/internal/LifecycleOperationStorage;->waitUntilOperationComplete(ILjava/util/function/IntConsumer;)Z
+HPLcom/android/server/backup/internal/LifecycleOperationStorage;->waitUntilOperationComplete(ILjava/util/function/IntConsumer;)Z
 HPLcom/android/server/backup/internal/Operation;-><init>(ILcom/android/server/backup/BackupRestoreTask;I)V
 PLcom/android/server/backup/internal/PerformInitializeTask;-><init>(Lcom/android/server/backup/UserBackupManagerService;Lcom/android/server/backup/TransportManager;[Ljava/lang/String;Landroid/app/backup/IBackupObserver;Lcom/android/server/backup/internal/OnTaskFinishedListener;Ljava/io/File;)V
 PLcom/android/server/backup/internal/PerformInitializeTask;-><init>(Lcom/android/server/backup/UserBackupManagerService;[Ljava/lang/String;Landroid/app/backup/IBackupObserver;Lcom/android/server/backup/internal/OnTaskFinishedListener;)V
@@ -14710,12 +15468,14 @@
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->getMonitor()Landroid/app/backup/IBackupManagerMonitor;
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->getObserver()Landroid/app/backup/IBackupObserver;
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->getPackageName(Landroid/content/pm/PackageInfo;)Ljava/lang/String;
+PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onAgentCancelled(Landroid/content/pm/PackageInfo;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onAgentError(Ljava/lang/String;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onAgentFilesReady(Ljava/io/File;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onAgentResultError(Landroid/content/pm/PackageInfo;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onAgentTimedOut(Landroid/content/pm/PackageInfo;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onBackupFinished(I)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onCallAgentDoBackupError(Ljava/lang/String;ZLjava/lang/Exception;)V
+PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onCancel()V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onEmptyData(Landroid/content/pm/PackageInfo;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onEmptyQueueAtStart()V
 HPLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onExtractAgentData(Ljava/lang/String;)V
@@ -14738,30 +15498,32 @@
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onSkipPm()V
 HPLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onStartFullBackup(Ljava/util/List;)V
 HPLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onStartPackageBackup(Ljava/lang/String;)V
-PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onTaskFinished()V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onTaskFinished()V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onTransportInitialized(I)V
+PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onTransportNotInitialized(Ljava/lang/String;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onTransportPerformBackup(Ljava/lang/String;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onTransportReady(Ljava/lang/String;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onTransportRequestBackupTimeError(Ljava/lang/Exception;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupReporter;->onWriteWidgetData(Z[B)V
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/backup/keyvalue/KeyValueBackupTask;Landroid/app/IBackupAgent;JI)V
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask$$ExternalSyntheticLambda0;->call(Ljava/lang/Object;)V
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->$r8$lambda$Tfg_5iKscHIn35GSN01y-Sf6EqA(Lcom/android/server/backup/keyvalue/KeyValueBackupTask;Landroid/app/IBackupAgent;JILandroid/app/backup/IBackupCallback;)V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->$r8$lambda$Tfg_5iKscHIn35GSN01y-Sf6EqA(Lcom/android/server/backup/keyvalue/KeyValueBackupTask;Landroid/app/IBackupAgent;JILandroid/app/backup/IBackupCallback;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupTask;-><clinit>()V
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;-><init>(Lcom/android/server/backup/UserBackupManagerService;Lcom/android/server/backup/OperationStorage;Lcom/android/server/backup/transport/TransportConnection;Ljava/lang/String;Ljava/util/List;Lcom/android/server/backup/DataChangedJournal;Lcom/android/server/backup/keyvalue/KeyValueBackupReporter;Lcom/android/server/backup/internal/OnTaskFinishedListener;Ljava/util/List;ZZLcom/android/server/backup/utils/BackupEligibilityRules;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->SHA1Checksum([B)Ljava/lang/String;
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->applyStateTransaction(I)V
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->backupPackage(Ljava/lang/String;)V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->backupPackage(Ljava/lang/String;)V
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->backupPm()V
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->bindAgent(Landroid/content/pm/PackageInfo;)Landroid/app/IBackupAgent;
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->bindAgent(Landroid/content/pm/PackageInfo;)Landroid/app/IBackupAgent;
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->checkAgentResult(Landroid/content/pm/PackageInfo;Lcom/android/server/backup/remote/RemoteResult;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->checkBackupData(Landroid/content/pm/ApplicationInfo;Ljava/io/File;)V
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->cleanUpAgent(I)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->cleanUpAgentForError(Lcom/android/server/backup/keyvalue/BackupException;)V
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->cleanUpAgentForTransportStatus(I)V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->cleanUpAgentForTransportStatus(I)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->clearStatus(Ljava/lang/String;)V
 PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->clearStatus(Ljava/lang/String;Ljava/io/File;)V
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->createFullBackupTask(Ljava/util/List;)Lcom/android/server/backup/fullbackup/PerformFullTransportBackupTask;
+PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->deletePmStateFile()V
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->extractAgentData(Landroid/content/pm/PackageInfo;)V
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->extractAgentData(Landroid/content/pm/PackageInfo;Landroid/app/IBackupAgent;)V
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->extractPmAgentData(Landroid/content/pm/PackageInfo;)V
@@ -14772,23 +15534,27 @@
 PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->getSucceedingPackages()[Ljava/lang/String;
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->getSuccessStateFileFor(Ljava/lang/String;)Ljava/io/File;
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->getTopLevelSuccessStateDirectory(Z)Ljava/io/File;
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->handleTransportStatus(ILjava/lang/String;J)V
-HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->informTransportOfUnchangedApps(Ljava/util/Set;)V
+PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->handleCancel(Z)V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->handleTransportStatus(ILjava/lang/String;J)V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->informTransportOfUnchangedApps(Ljava/util/Set;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/backup/keyvalue/KeyValueBackupTask;Lcom/android/server/backup/keyvalue/KeyValueBackupTask;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Lcom/android/server/backup/transport/TransportConnection;Lcom/android/server/backup/transport/TransportConnection;]Ljava/util/Set;Ljava/util/HashSet;
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->isEligibleForNoDataCall(Landroid/content/pm/PackageInfo;)Z
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->lambda$extractAgentData$0(Landroid/app/IBackupAgent;JILandroid/app/backup/IBackupCallback;)V
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->registerTask()V
+PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->markCancel()V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->registerTask()V
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->remoteCall(Lcom/android/server/backup/remote/RemoteCallable;JLjava/lang/String;)Lcom/android/server/backup/remote/RemoteResult;
 PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->revertTask()V
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->run()V
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->sendDataToTransport()I
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->sendDataToTransport(Landroid/content/pm/PackageInfo;)I
-HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->sendNoDataChangedTo(Lcom/android/server/backup/transport/BackupTransportClient;Landroid/content/pm/PackageInfo;I)V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->sendDataToTransport(Landroid/content/pm/PackageInfo;)I
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->sendNoDataChangedTo(Lcom/android/server/backup/transport/BackupTransportClient;Landroid/content/pm/PackageInfo;I)V+]Lcom/android/server/backup/transport/BackupTransportClient;Lcom/android/server/backup/transport/BackupTransportClient;
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->setSuccessState(Ljava/lang/String;Z)V
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->start(Lcom/android/server/backup/UserBackupManagerService;Lcom/android/server/backup/OperationStorage;Lcom/android/server/backup/transport/TransportConnection;Ljava/lang/String;Ljava/util/List;Lcom/android/server/backup/DataChangedJournal;Landroid/app/backup/IBackupObserver;Landroid/app/backup/IBackupManagerMonitor;Lcom/android/server/backup/internal/OnTaskFinishedListener;Ljava/util/List;ZZLcom/android/server/backup/utils/BackupEligibilityRules;)Lcom/android/server/backup/keyvalue/KeyValueBackupTask;
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->start(Lcom/android/server/backup/UserBackupManagerService;Lcom/android/server/backup/OperationStorage;Lcom/android/server/backup/transport/TransportConnection;Ljava/lang/String;Ljava/util/List;Lcom/android/server/backup/DataChangedJournal;Landroid/app/backup/IBackupObserver;Landroid/app/backup/IBackupManagerMonitor;Lcom/android/server/backup/internal/OnTaskFinishedListener;Ljava/util/List;ZZLcom/android/server/backup/utils/BackupEligibilityRules;)Lcom/android/server/backup/keyvalue/KeyValueBackupTask;
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->startTask()V
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->transportPerformBackup(Landroid/content/pm/PackageInfo;Ljava/io/File;Z)I
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->tryCloseFileDescriptor(Ljava/io/Closeable;Ljava/lang/String;)V
-PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->unregisterTask()V
+PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->triggerTransportInitializationLocked()V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->tryCloseFileDescriptor(Ljava/io/Closeable;Ljava/lang/String;)V
+HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->unregisterTask()V
+PLcom/android/server/backup/keyvalue/KeyValueBackupTask;->waitCancel()V
 HPLcom/android/server/backup/keyvalue/KeyValueBackupTask;->writeWidgetPayloadIfAppropriate(Ljava/io/FileDescriptor;Ljava/lang/String;)V
 PLcom/android/server/backup/keyvalue/TaskException;-><init>(Ljava/lang/Exception;ZI)V
 PLcom/android/server/backup/keyvalue/TaskException;-><init>(ZI)V
@@ -14800,24 +15566,80 @@
 PLcom/android/server/backup/keyvalue/TaskException;->stateCompromised()Lcom/android/server/backup/keyvalue/TaskException;
 PLcom/android/server/backup/keyvalue/TaskException;->stateCompromised(Ljava/lang/Exception;)Lcom/android/server/backup/keyvalue/TaskException;
 HPLcom/android/server/backup/params/BackupParams;-><init>(Lcom/android/server/backup/transport/TransportConnection;Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;Landroid/app/backup/IBackupObserver;Landroid/app/backup/IBackupManagerMonitor;Lcom/android/server/backup/internal/OnTaskFinishedListener;ZZLcom/android/server/backup/utils/BackupEligibilityRules;)V
+PLcom/android/server/backup/params/RestoreGetSetsParams;-><init>(Lcom/android/server/backup/transport/TransportConnection;Lcom/android/server/backup/restore/ActiveRestoreSession;Landroid/app/backup/IRestoreObserver;Landroid/app/backup/IBackupManagerMonitor;Lcom/android/server/backup/internal/OnTaskFinishedListener;)V
 PLcom/android/server/backup/params/RestoreParams;-><init>(Lcom/android/server/backup/transport/TransportConnection;Landroid/app/backup/IRestoreObserver;Landroid/app/backup/IBackupManagerMonitor;JLandroid/content/pm/PackageInfo;IZ[Ljava/lang/String;Lcom/android/server/backup/internal/OnTaskFinishedListener;Lcom/android/server/backup/utils/BackupEligibilityRules;)V
 PLcom/android/server/backup/params/RestoreParams;->createForRestoreAtInstall(Lcom/android/server/backup/transport/TransportConnection;Landroid/app/backup/IRestoreObserver;Landroid/app/backup/IBackupManagerMonitor;JLjava/lang/String;ILcom/android/server/backup/internal/OnTaskFinishedListener;Lcom/android/server/backup/utils/BackupEligibilityRules;)Lcom/android/server/backup/params/RestoreParams;
-PLcom/android/server/backup/remote/FutureBackupCallback;-><init>(Ljava/util/concurrent/CompletableFuture;)V
+PLcom/android/server/backup/params/RestoreParams;->createForRestorePackages(Lcom/android/server/backup/transport/TransportConnection;Landroid/app/backup/IRestoreObserver;Landroid/app/backup/IBackupManagerMonitor;J[Ljava/lang/String;ZLcom/android/server/backup/internal/OnTaskFinishedListener;Lcom/android/server/backup/utils/BackupEligibilityRules;)Lcom/android/server/backup/params/RestoreParams;
+HPLcom/android/server/backup/remote/FutureBackupCallback;-><init>(Ljava/util/concurrent/CompletableFuture;)V
 HPLcom/android/server/backup/remote/FutureBackupCallback;->operationComplete(J)V
-PLcom/android/server/backup/remote/RemoteCall$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/backup/remote/RemoteCall;)V
+HPLcom/android/server/backup/remote/RemoteCall$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/backup/remote/RemoteCall;)V
 PLcom/android/server/backup/remote/RemoteCall$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/backup/remote/RemoteCall;->$r8$lambda$KU79zXZdYj-XIeuWevlfe_nSw5Y(Lcom/android/server/backup/remote/RemoteCall;)V
 PLcom/android/server/backup/remote/RemoteCall;-><init>(Lcom/android/server/backup/remote/RemoteCallable;J)V
 HPLcom/android/server/backup/remote/RemoteCall;-><init>(ZLcom/android/server/backup/remote/RemoteCallable;J)V
 HPLcom/android/server/backup/remote/RemoteCall;->call()Lcom/android/server/backup/remote/RemoteResult;
+PLcom/android/server/backup/remote/RemoteCall;->cancel()V
 PLcom/android/server/backup/remote/RemoteCall;->execute(Lcom/android/server/backup/remote/RemoteCallable;J)Lcom/android/server/backup/remote/RemoteResult;
 PLcom/android/server/backup/remote/RemoteCall;->timeOut()V
 PLcom/android/server/backup/remote/RemoteResult;-><clinit>()V
 HPLcom/android/server/backup/remote/RemoteResult;-><init>(IJ)V
 HPLcom/android/server/backup/remote/RemoteResult;->get()J
-PLcom/android/server/backup/remote/RemoteResult;->isPresent()Z
-PLcom/android/server/backup/remote/RemoteResult;->of(J)Lcom/android/server/backup/remote/RemoteResult;
+HPLcom/android/server/backup/remote/RemoteResult;->isPresent()Z
+HPLcom/android/server/backup/remote/RemoteResult;->of(J)Lcom/android/server/backup/remote/RemoteResult;
+PLcom/android/server/backup/restore/ActiveRestoreSession$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/backup/restore/ActiveRestoreSession;Landroid/app/backup/IRestoreObserver;Landroid/app/backup/IBackupManagerMonitor;J[Ljava/lang/String;Landroid/app/backup/RestoreSet;)V
+PLcom/android/server/backup/restore/ActiveRestoreSession$$ExternalSyntheticLambda1;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/backup/restore/ActiveRestoreSession$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/backup/TransportManager;Lcom/android/server/backup/transport/TransportConnection;Lcom/android/server/backup/UserBackupManagerService$BackupWakeLock;)V
+PLcom/android/server/backup/restore/ActiveRestoreSession$$ExternalSyntheticLambda2;->onFinished(Ljava/lang/String;)V
+PLcom/android/server/backup/restore/ActiveRestoreSession$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/backup/TransportManager;Lcom/android/server/backup/transport/TransportConnection;Lcom/android/server/backup/UserBackupManagerService$BackupWakeLock;)V
+PLcom/android/server/backup/restore/ActiveRestoreSession$$ExternalSyntheticLambda4;->onFinished(Ljava/lang/String;)V
+PLcom/android/server/backup/restore/ActiveRestoreSession$EndRestoreRunnable;-><init>(Lcom/android/server/backup/restore/ActiveRestoreSession;Lcom/android/server/backup/UserBackupManagerService;Lcom/android/server/backup/restore/ActiveRestoreSession;)V
+PLcom/android/server/backup/restore/ActiveRestoreSession$EndRestoreRunnable;->run()V
+PLcom/android/server/backup/restore/ActiveRestoreSession;->$r8$lambda$DCnddoBOF-7tZ77IaUzINXMS8RE(Lcom/android/server/backup/restore/ActiveRestoreSession;Landroid/app/backup/IRestoreObserver;Landroid/app/backup/IBackupManagerMonitor;J[Ljava/lang/String;Landroid/app/backup/RestoreSet;Lcom/android/server/backup/transport/TransportConnection;Lcom/android/server/backup/internal/OnTaskFinishedListener;)Lcom/android/server/backup/params/RestoreParams;
+PLcom/android/server/backup/restore/ActiveRestoreSession;->$r8$lambda$tEp6OdaNdmxsu8a7abiTdN5jln0(Lcom/android/server/backup/TransportManager;Lcom/android/server/backup/transport/TransportConnection;Lcom/android/server/backup/UserBackupManagerService$BackupWakeLock;Ljava/lang/String;)V
+PLcom/android/server/backup/restore/ActiveRestoreSession;->$r8$lambda$x_NbZnWyeZ1DF9RBjrwDARZLdAQ(Lcom/android/server/backup/TransportManager;Lcom/android/server/backup/transport/TransportConnection;Lcom/android/server/backup/UserBackupManagerService$BackupWakeLock;Ljava/lang/String;)V
+PLcom/android/server/backup/restore/ActiveRestoreSession;-><init>(Lcom/android/server/backup/UserBackupManagerService;Ljava/lang/String;Ljava/lang/String;Lcom/android/server/backup/utils/BackupEligibilityRules;)V
+PLcom/android/server/backup/restore/ActiveRestoreSession;->endRestoreSession()V
+PLcom/android/server/backup/restore/ActiveRestoreSession;->getAvailableRestoreSets(Landroid/app/backup/IRestoreObserver;Landroid/app/backup/IBackupManagerMonitor;)I
+PLcom/android/server/backup/restore/ActiveRestoreSession;->getBackupEligibilityRules(Landroid/app/backup/RestoreSet;)Lcom/android/server/backup/utils/BackupEligibilityRules;
+PLcom/android/server/backup/restore/ActiveRestoreSession;->lambda$getAvailableRestoreSets$0(Lcom/android/server/backup/TransportManager;Lcom/android/server/backup/transport/TransportConnection;Lcom/android/server/backup/UserBackupManagerService$BackupWakeLock;Ljava/lang/String;)V
+PLcom/android/server/backup/restore/ActiveRestoreSession;->lambda$restorePackages$2(Landroid/app/backup/IRestoreObserver;Landroid/app/backup/IBackupManagerMonitor;J[Ljava/lang/String;Landroid/app/backup/RestoreSet;Lcom/android/server/backup/transport/TransportConnection;Lcom/android/server/backup/internal/OnTaskFinishedListener;)Lcom/android/server/backup/params/RestoreParams;
+PLcom/android/server/backup/restore/ActiveRestoreSession;->lambda$sendRestoreToHandlerLocked$4(Lcom/android/server/backup/TransportManager;Lcom/android/server/backup/transport/TransportConnection;Lcom/android/server/backup/UserBackupManagerService$BackupWakeLock;Ljava/lang/String;)V
+PLcom/android/server/backup/restore/ActiveRestoreSession;->restorePackages(JLandroid/app/backup/IRestoreObserver;[Ljava/lang/String;Landroid/app/backup/IBackupManagerMonitor;)I
+PLcom/android/server/backup/restore/ActiveRestoreSession;->sendRestoreToHandlerLocked(Ljava/util/function/BiFunction;Ljava/lang/String;)I
+PLcom/android/server/backup/restore/ActiveRestoreSession;->setRestoreSets([Landroid/app/backup/RestoreSet;)V
+PLcom/android/server/backup/restore/FullRestoreEngine$$ExternalSyntheticLambda0;-><init>()V
+PLcom/android/server/backup/restore/FullRestoreEngine$$ExternalSyntheticLambda0;->onBytesRead(J)V
+PLcom/android/server/backup/restore/FullRestoreEngine$1;-><clinit>()V
+PLcom/android/server/backup/restore/FullRestoreEngine;->$r8$lambda$9EmAUEe9_epChT2y0OzArtH8-H8(J)V
+PLcom/android/server/backup/restore/FullRestoreEngine;-><init>(Lcom/android/server/backup/UserBackupManagerService;Lcom/android/server/backup/OperationStorage;Lcom/android/server/backup/BackupRestoreTask;Landroid/app/backup/IFullBackupRestoreObserver;Landroid/app/backup/IBackupManagerMonitor;Landroid/content/pm/PackageInfo;ZIZLcom/android/server/backup/utils/BackupEligibilityRules;)V
+PLcom/android/server/backup/restore/FullRestoreEngine;->getAgent()Landroid/app/IBackupAgent;
+PLcom/android/server/backup/restore/FullRestoreEngine;->getWidgetData()[B
+PLcom/android/server/backup/restore/FullRestoreEngine;->isCanonicalFilePath(Ljava/lang/String;)Z
+PLcom/android/server/backup/restore/FullRestoreEngine;->isReadOnlyDir(Lcom/android/server/backup/FileMetadata;)Z
+HPLcom/android/server/backup/restore/FullRestoreEngine;->isRestorableFile(Lcom/android/server/backup/FileMetadata;)Z
+PLcom/android/server/backup/restore/FullRestoreEngine;->isValidParent(Lcom/android/server/backup/FileMetadata;Lcom/android/server/backup/FileMetadata;)Z
+PLcom/android/server/backup/restore/FullRestoreEngine;->lambda$restoreOneFile$0(J)V
+HPLcom/android/server/backup/restore/FullRestoreEngine;->restoreOneFile(Ljava/io/InputStream;Z[BLandroid/content/pm/PackageInfo;ZILandroid/app/backup/IBackupManagerMonitor;)Z
+PLcom/android/server/backup/restore/FullRestoreEngine;->setUpPipes()V
+PLcom/android/server/backup/restore/FullRestoreEngine;->shouldForceClearAppDataOnFullRestore(Ljava/lang/String;)Z
+HPLcom/android/server/backup/restore/FullRestoreEngine;->shouldSkipReadOnlyDir(Lcom/android/server/backup/FileMetadata;)Z
+PLcom/android/server/backup/restore/FullRestoreEngine;->tearDownPipes()V
+PLcom/android/server/backup/restore/FullRestoreEngineThread;-><init>(Lcom/android/server/backup/restore/FullRestoreEngine;Landroid/os/ParcelFileDescriptor;)V
+PLcom/android/server/backup/restore/FullRestoreEngineThread;->run()V
+PLcom/android/server/backup/restore/FullRestoreEngineThread;->waitForResult()I
 PLcom/android/server/backup/restore/PerformUnifiedRestoreTask$1;-><clinit>()V
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask$StreamFeederThread;-><init>(Lcom/android/server/backup/restore/PerformUnifiedRestoreTask;)V
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask$StreamFeederThread;->operationComplete(J)V
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask$StreamFeederThread;->run()V
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->-$$Nest$fgetbackupManagerService(Lcom/android/server/backup/restore/PerformUnifiedRestoreTask;)Lcom/android/server/backup/UserBackupManagerService;
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->-$$Nest$fgetmBackupEligibilityRules(Lcom/android/server/backup/restore/PerformUnifiedRestoreTask;)Lcom/android/server/backup/utils/BackupEligibilityRules;
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->-$$Nest$fgetmCurrentPackage(Lcom/android/server/backup/restore/PerformUnifiedRestoreTask;)Landroid/content/pm/PackageInfo;
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->-$$Nest$fgetmMonitor(Lcom/android/server/backup/restore/PerformUnifiedRestoreTask;)Landroid/app/backup/IBackupManagerMonitor;
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->-$$Nest$fgetmOperationStorage(Lcom/android/server/backup/restore/PerformUnifiedRestoreTask;)Lcom/android/server/backup/OperationStorage;
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->-$$Nest$fgetmTransportConnection(Lcom/android/server/backup/restore/PerformUnifiedRestoreTask;)Lcom/android/server/backup/transport/TransportConnection;
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->-$$Nest$fputmAgent(Lcom/android/server/backup/restore/PerformUnifiedRestoreTask;Landroid/app/IBackupAgent;)V
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->-$$Nest$fputmDidLaunch(Lcom/android/server/backup/restore/PerformUnifiedRestoreTask;Z)V
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->-$$Nest$fputmWidgetData(Lcom/android/server/backup/restore/PerformUnifiedRestoreTask;[B)V
 PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;-><init>(Lcom/android/server/backup/UserBackupManagerService;Lcom/android/server/backup/OperationStorage;Lcom/android/server/backup/transport/TransportConnection;Landroid/app/backup/IRestoreObserver;Landroid/app/backup/IBackupManagerMonitor;JLandroid/content/pm/PackageInfo;IZ[Ljava/lang/String;Lcom/android/server/backup/internal/OnTaskFinishedListener;Lcom/android/server/backup/utils/BackupEligibilityRules;)V
 PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->dispatchNextRestore()V
 PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->execute()V
@@ -14827,38 +15649,51 @@
 PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->getExcludedKeysForPackage(Ljava/lang/String;)Ljava/util/Set;
 PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->initiateOneRestore(Landroid/content/pm/PackageInfo;J)V
 PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->keyValueAgentCleanup()V
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->keyValueAgentErrorCleanup(Z)V
 PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->operationComplete(J)V
 PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->restoreFinished()V
+PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->restoreFull()V
 PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->restoreKeyValue()V
 PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->sendOnRestorePackage(Ljava/lang/String;)V
 PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->sendStartRestore(I)V
 PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->shouldStageBackupData(Ljava/lang/String;)Z
 PLcom/android/server/backup/restore/PerformUnifiedRestoreTask;->startRestore()V
+PLcom/android/server/backup/restore/RestoreDeleteObserver;-><init>()V
+PLcom/android/server/backup/restore/RestoreEngine;-><init>()V
+PLcom/android/server/backup/restore/RestoreEngine;->getResult()I
+PLcom/android/server/backup/restore/RestoreEngine;->isRunning()Z
+PLcom/android/server/backup/restore/RestoreEngine;->setRunning(Z)V
+PLcom/android/server/backup/restore/RestoreEngine;->waitForResult()I
+PLcom/android/server/backup/restore/RestorePolicy;-><clinit>()V
+PLcom/android/server/backup/restore/RestorePolicy;-><init>(Ljava/lang/String;I)V
+PLcom/android/server/backup/restore/RestorePolicy;->values()[Lcom/android/server/backup/restore/RestorePolicy;
 PLcom/android/server/backup/restore/UnifiedRestoreState;-><clinit>()V
 PLcom/android/server/backup/restore/UnifiedRestoreState;-><init>(Ljava/lang/String;I)V
 PLcom/android/server/backup/restore/UnifiedRestoreState;->values()[Lcom/android/server/backup/restore/UnifiedRestoreState;
 HPLcom/android/server/backup/transport/BackupTransportClient$TransportFutures;-><init>()V
 PLcom/android/server/backup/transport/BackupTransportClient$TransportFutures;-><init>(Lcom/android/server/backup/transport/BackupTransportClient$TransportFutures-IA;)V
 PLcom/android/server/backup/transport/BackupTransportClient$TransportFutures;->cancelActiveFutures()V
-HPLcom/android/server/backup/transport/BackupTransportClient$TransportFutures;->newFuture()Lcom/android/internal/infra/AndroidFuture;
-HPLcom/android/server/backup/transport/BackupTransportClient$TransportFutures;->remove(Lcom/android/internal/infra/AndroidFuture;)V
+HPLcom/android/server/backup/transport/BackupTransportClient$TransportFutures;->newFuture()Lcom/android/internal/infra/AndroidFuture;+]Ljava/util/Set;Ljava/util/HashSet;
+HPLcom/android/server/backup/transport/BackupTransportClient$TransportFutures;->remove(Lcom/android/internal/infra/AndroidFuture;)V+]Ljava/util/Set;Ljava/util/HashSet;
 HPLcom/android/server/backup/transport/BackupTransportClient$TransportStatusCallbackPool;-><init>()V
 PLcom/android/server/backup/transport/BackupTransportClient$TransportStatusCallbackPool;-><init>(Lcom/android/server/backup/transport/BackupTransportClient$TransportStatusCallbackPool-IA;)V
 HPLcom/android/server/backup/transport/BackupTransportClient$TransportStatusCallbackPool;->acquire()Lcom/android/server/backup/transport/TransportStatusCallback;+]Lcom/android/server/backup/transport/TransportStatusCallback;Lcom/android/server/backup/transport/TransportStatusCallback;]Ljava/util/Queue;Ljava/util/ArrayDeque;]Ljava/util/Set;Ljava/util/HashSet;
 PLcom/android/server/backup/transport/BackupTransportClient$TransportStatusCallbackPool;->cancelActiveCallbacks()V
 HPLcom/android/server/backup/transport/BackupTransportClient$TransportStatusCallbackPool;->recycle(Lcom/android/server/backup/transport/TransportStatusCallback;)V+]Ljava/util/Queue;Ljava/util/ArrayDeque;]Ljava/util/Set;Ljava/util/HashSet;
 HPLcom/android/server/backup/transport/BackupTransportClient;-><init>(Lcom/android/internal/backup/IBackupTransport;)V
-PLcom/android/server/backup/transport/BackupTransportClient;->cancelFullBackup()V
+HPLcom/android/server/backup/transport/BackupTransportClient;->cancelFullBackup()V
 HPLcom/android/server/backup/transport/BackupTransportClient;->checkFullBackupSize(J)I
 PLcom/android/server/backup/transport/BackupTransportClient;->configurationIntent()Landroid/content/Intent;
 PLcom/android/server/backup/transport/BackupTransportClient;->currentDestinationString()Ljava/lang/String;
 PLcom/android/server/backup/transport/BackupTransportClient;->dataManagementIntent()Landroid/content/Intent;
 PLcom/android/server/backup/transport/BackupTransportClient;->dataManagementIntentLabel()Ljava/lang/CharSequence;
-HPLcom/android/server/backup/transport/BackupTransportClient;->finishBackup()I
+HPLcom/android/server/backup/transport/BackupTransportClient;->finishBackup()I+]Lcom/android/server/backup/transport/TransportStatusCallback;Lcom/android/server/backup/transport/TransportStatusCallback;]Lcom/android/server/backup/transport/BackupTransportClient$TransportStatusCallbackPool;Lcom/android/server/backup/transport/BackupTransportClient$TransportStatusCallbackPool;]Lcom/android/internal/backup/IBackupTransport;Lcom/android/internal/backup/IBackupTransport$Stub$Proxy;
 PLcom/android/server/backup/transport/BackupTransportClient;->finishRestore()V
+PLcom/android/server/backup/transport/BackupTransportClient;->getAvailableRestoreSets()[Landroid/app/backup/RestoreSet;
 HPLcom/android/server/backup/transport/BackupTransportClient;->getBackupQuota(Ljava/lang/String;Z)J
 PLcom/android/server/backup/transport/BackupTransportClient;->getCurrentRestoreSet()J
-HPLcom/android/server/backup/transport/BackupTransportClient;->getFutureResult(Lcom/android/internal/infra/AndroidFuture;)Ljava/lang/Object;
+HPLcom/android/server/backup/transport/BackupTransportClient;->getFutureResult(Lcom/android/internal/infra/AndroidFuture;)Ljava/lang/Object;+]Lcom/android/internal/infra/AndroidFuture;Lcom/android/internal/infra/AndroidFuture;]Lcom/android/server/backup/transport/BackupTransportClient$TransportFutures;Lcom/android/server/backup/transport/BackupTransportClient$TransportFutures;
+PLcom/android/server/backup/transport/BackupTransportClient;->getNextFullRestoreDataChunk(Landroid/os/ParcelFileDescriptor;)I
 PLcom/android/server/backup/transport/BackupTransportClient;->getRestoreData(Landroid/os/ParcelFileDescriptor;)I
 HPLcom/android/server/backup/transport/BackupTransportClient;->getTransportFlags()I
 PLcom/android/server/backup/transport/BackupTransportClient;->initializeDevice()I
@@ -14866,7 +15701,7 @@
 HPLcom/android/server/backup/transport/BackupTransportClient;->name()Ljava/lang/String;
 PLcom/android/server/backup/transport/BackupTransportClient;->nextRestorePackage()Landroid/app/backup/RestoreDescription;
 PLcom/android/server/backup/transport/BackupTransportClient;->onBecomingUnusable()V
-HPLcom/android/server/backup/transport/BackupTransportClient;->performBackup(Landroid/content/pm/PackageInfo;Landroid/os/ParcelFileDescriptor;I)I
+HPLcom/android/server/backup/transport/BackupTransportClient;->performBackup(Landroid/content/pm/PackageInfo;Landroid/os/ParcelFileDescriptor;I)I+]Lcom/android/server/backup/transport/TransportStatusCallback;Lcom/android/server/backup/transport/TransportStatusCallback;]Lcom/android/server/backup/transport/BackupTransportClient$TransportStatusCallbackPool;Lcom/android/server/backup/transport/BackupTransportClient$TransportStatusCallbackPool;]Lcom/android/internal/backup/IBackupTransport;Lcom/android/internal/backup/IBackupTransport$Stub$Proxy;
 HPLcom/android/server/backup/transport/BackupTransportClient;->performFullBackup(Landroid/content/pm/PackageInfo;Landroid/os/ParcelFileDescriptor;I)I
 PLcom/android/server/backup/transport/BackupTransportClient;->requestBackupTime()J
 HPLcom/android/server/backup/transport/BackupTransportClient;->requestFullBackupTime()J
@@ -14882,7 +15717,7 @@
 PLcom/android/server/backup/transport/TransportConnection$TransportConnectionMonitor;->onBindingDied(Landroid/content/ComponentName;)V
 HPLcom/android/server/backup/transport/TransportConnection$TransportConnectionMonitor;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 PLcom/android/server/backup/transport/TransportConnection$TransportConnectionMonitor;->onServiceDisconnected(Landroid/content/ComponentName;)V
-PLcom/android/server/backup/transport/TransportConnection;->$r8$lambda$0VZ8sZ9Ao1icvh_L9stwB6JPWwM(Ljava/util/concurrent/CompletableFuture;Lcom/android/server/backup/transport/BackupTransportClient;Lcom/android/server/backup/transport/TransportConnection;)V
+HPLcom/android/server/backup/transport/TransportConnection;->$r8$lambda$0VZ8sZ9Ao1icvh_L9stwB6JPWwM(Ljava/util/concurrent/CompletableFuture;Lcom/android/server/backup/transport/BackupTransportClient;Lcom/android/server/backup/transport/TransportConnection;)V
 PLcom/android/server/backup/transport/TransportConnection;->$r8$lambda$R_3brUf_15qZ7goqOoQYlP3LXB4(Lcom/android/server/backup/transport/TransportConnection;Lcom/android/server/backup/transport/TransportConnectionListener;Lcom/android/server/backup/transport/BackupTransportClient;)V
 PLcom/android/server/backup/transport/TransportConnection;->-$$Nest$monBindingDied(Lcom/android/server/backup/transport/TransportConnection;)V
 HPLcom/android/server/backup/transport/TransportConnection;->-$$Nest$monServiceConnected(Lcom/android/server/backup/transport/TransportConnection;Landroid/os/IBinder;)V
@@ -14890,10 +15725,10 @@
 HPLcom/android/server/backup/transport/TransportConnection;-><init>(ILandroid/content/Context;Lcom/android/server/backup/transport/TransportStats;Landroid/content/Intent;Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)V
 HPLcom/android/server/backup/transport/TransportConnection;-><init>(ILandroid/content/Context;Lcom/android/server/backup/transport/TransportStats;Landroid/content/Intent;Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Landroid/os/Handler;)V
 HPLcom/android/server/backup/transport/TransportConnection;->checkState(ZLjava/lang/String;)V
-HPLcom/android/server/backup/transport/TransportConnection;->checkStateIntegrityLocked()V
+HPLcom/android/server/backup/transport/TransportConnection;->checkStateIntegrityLocked()V+]Ljava/util/Map;Landroid/util/ArrayMap;]Lcom/android/server/backup/transport/TransportConnection;Lcom/android/server/backup/transport/TransportConnection;
 HPLcom/android/server/backup/transport/TransportConnection;->connect(Ljava/lang/String;)Lcom/android/server/backup/transport/BackupTransportClient;+]Landroid/os/Looper;Landroid/os/Looper;]Ljava/util/concurrent/CompletableFuture;Ljava/util/concurrent/CompletableFuture;]Lcom/android/server/backup/transport/TransportStats;Lcom/android/server/backup/transport/TransportStats;]Lcom/android/server/backup/transport/TransportConnection;Lcom/android/server/backup/transport/TransportConnection;
 HPLcom/android/server/backup/transport/TransportConnection;->connectAsync(Lcom/android/server/backup/transport/TransportConnectionListener;Ljava/lang/String;)V
-HPLcom/android/server/backup/transport/TransportConnection;->connectOrThrow(Ljava/lang/String;)Lcom/android/server/backup/transport/BackupTransportClient;
+HPLcom/android/server/backup/transport/TransportConnection;->connectOrThrow(Ljava/lang/String;)Lcom/android/server/backup/transport/BackupTransportClient;+]Lcom/android/server/backup/transport/TransportConnection;Lcom/android/server/backup/transport/TransportConnection;
 PLcom/android/server/backup/transport/TransportConnection;->finalize()V
 PLcom/android/server/backup/transport/TransportConnection;->getConnectedTransport(Ljava/lang/String;)Lcom/android/server/backup/transport/BackupTransportClient;
 PLcom/android/server/backup/transport/TransportConnection;->getLogBuffer()Ljava/util/List;
@@ -14917,18 +15752,18 @@
 HPLcom/android/server/backup/transport/TransportConnection;->unbind(Ljava/lang/String;)V
 PLcom/android/server/backup/transport/TransportConnectionManager$$ExternalSyntheticLambda0;-><init>()V
 HPLcom/android/server/backup/transport/TransportConnectionManager$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/backup/transport/TransportConnectionManager;->$r8$lambda$L5nD_60PEhxIdzeW4lU6im8fA18(Landroid/content/ComponentName;)Landroid/content/Intent;
+HPLcom/android/server/backup/transport/TransportConnectionManager;->$r8$lambda$L5nD_60PEhxIdzeW4lU6im8fA18(Landroid/content/ComponentName;)Landroid/content/Intent;
 PLcom/android/server/backup/transport/TransportConnectionManager;-><init>(ILandroid/content/Context;Lcom/android/server/backup/transport/TransportStats;)V
 PLcom/android/server/backup/transport/TransportConnectionManager;-><init>(ILandroid/content/Context;Lcom/android/server/backup/transport/TransportStats;Ljava/util/function/Function;)V
 HPLcom/android/server/backup/transport/TransportConnectionManager;->disposeOfTransportClient(Lcom/android/server/backup/transport/TransportConnection;Ljava/lang/String;)V
 PLcom/android/server/backup/transport/TransportConnectionManager;->dump(Ljava/io/PrintWriter;)V
 HPLcom/android/server/backup/transport/TransportConnectionManager;->getRealTransportIntent(Landroid/content/ComponentName;)Landroid/content/Intent;
 HPLcom/android/server/backup/transport/TransportConnectionManager;->getTransportClient(Landroid/content/ComponentName;Landroid/os/Bundle;Ljava/lang/String;)Lcom/android/server/backup/transport/TransportConnection;
-PLcom/android/server/backup/transport/TransportConnectionManager;->getTransportClient(Landroid/content/ComponentName;Ljava/lang/String;)Lcom/android/server/backup/transport/TransportConnection;
+HPLcom/android/server/backup/transport/TransportConnectionManager;->getTransportClient(Landroid/content/ComponentName;Ljava/lang/String;)Lcom/android/server/backup/transport/TransportConnection;
 HPLcom/android/server/backup/transport/TransportConnectionManager;->getTransportClient(Landroid/content/ComponentName;Ljava/lang/String;Landroid/content/Intent;)Lcom/android/server/backup/transport/TransportConnection;
 PLcom/android/server/backup/transport/TransportNotAvailableException;-><init>()V
 PLcom/android/server/backup/transport/TransportNotRegisteredException;-><init>(Ljava/lang/String;)V
-PLcom/android/server/backup/transport/TransportStats$Stats;->-$$Nest$mregister(Lcom/android/server/backup/transport/TransportStats$Stats;J)V
+HPLcom/android/server/backup/transport/TransportStats$Stats;->-$$Nest$mregister(Lcom/android/server/backup/transport/TransportStats$Stats;J)V
 PLcom/android/server/backup/transport/TransportStats$Stats;-><init>()V
 HPLcom/android/server/backup/transport/TransportStats$Stats;->register(J)V
 PLcom/android/server/backup/transport/TransportStats;-><init>()V
@@ -14946,30 +15781,43 @@
 HPLcom/android/server/backup/utils/BackupEligibilityRules;->appIsDisabled(Landroid/content/pm/ApplicationInfo;)Z+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HPLcom/android/server/backup/utils/BackupEligibilityRules;->appIsEligibleForBackup(Landroid/content/pm/ApplicationInfo;)Z+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Lcom/android/server/backup/utils/BackupEligibilityRules;Lcom/android/server/backup/utils/BackupEligibilityRules;]Ljava/util/Set;Landroid/util/ArraySet;
 HPLcom/android/server/backup/utils/BackupEligibilityRules;->appIsKeyValueOnly(Landroid/content/pm/PackageInfo;)Z
-HPLcom/android/server/backup/utils/BackupEligibilityRules;->appIsRunningAndEligibleForBackupWithTransport(Lcom/android/server/backup/transport/TransportConnection;Ljava/lang/String;)Z
+HPLcom/android/server/backup/utils/BackupEligibilityRules;->appIsRunningAndEligibleForBackupWithTransport(Lcom/android/server/backup/transport/TransportConnection;Ljava/lang/String;)Z+]Lcom/android/server/backup/transport/BackupTransportClient;Lcom/android/server/backup/transport/BackupTransportClient;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/backup/utils/BackupEligibilityRules;Lcom/android/server/backup/utils/BackupEligibilityRules;]Ljava/lang/Exception;Lcom/android/server/backup/transport/TransportNotAvailableException;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Lcom/android/server/backup/transport/TransportConnection;Lcom/android/server/backup/transport/TransportConnection;
 HPLcom/android/server/backup/utils/BackupEligibilityRules;->appIsStopped(Landroid/content/pm/ApplicationInfo;)Z
 PLcom/android/server/backup/utils/BackupEligibilityRules;->getOperationType()I
 HPLcom/android/server/backup/utils/BackupEligibilityRules;->isAppBackupAllowed(Landroid/content/pm/ApplicationInfo;)Z
-PLcom/android/server/backup/utils/BackupManagerMonitorUtils;->monitorEvent(Landroid/app/backup/IBackupManagerMonitor;ILandroid/content/pm/PackageInfo;ILandroid/os/Bundle;)Landroid/app/backup/IBackupManagerMonitor;
+PLcom/android/server/backup/utils/BackupEligibilityRules;->signaturesMatch([Landroid/content/pm/Signature;Landroid/content/pm/PackageInfo;)Z
+HPLcom/android/server/backup/utils/BackupManagerMonitorUtils;->monitorEvent(Landroid/app/backup/IBackupManagerMonitor;ILandroid/content/pm/PackageInfo;ILandroid/os/Bundle;)Landroid/app/backup/IBackupManagerMonitor;
 PLcom/android/server/backup/utils/BackupManagerMonitorUtils;->putMonitoringExtra(Landroid/os/Bundle;Ljava/lang/String;J)Landroid/os/Bundle;
 PLcom/android/server/backup/utils/BackupManagerMonitorUtils;->putMonitoringExtra(Landroid/os/Bundle;Ljava/lang/String;Ljava/lang/String;)Landroid/os/Bundle;
 PLcom/android/server/backup/utils/BackupManagerMonitorUtils;->putMonitoringExtra(Landroid/os/Bundle;Ljava/lang/String;Z)Landroid/os/Bundle;
 PLcom/android/server/backup/utils/BackupObserverUtils;->sendBackupFinished(Landroid/app/backup/IBackupObserver;I)V
-PLcom/android/server/backup/utils/BackupObserverUtils;->sendBackupOnPackageResult(Landroid/app/backup/IBackupObserver;Ljava/lang/String;I)V
+HPLcom/android/server/backup/utils/BackupObserverUtils;->sendBackupOnPackageResult(Landroid/app/backup/IBackupObserver;Ljava/lang/String;I)V
 HPLcom/android/server/backup/utils/BackupObserverUtils;->sendBackupOnUpdate(Landroid/app/backup/IBackupObserver;Ljava/lang/String;Landroid/app/backup/BackupProgress;)V+]Landroid/app/backup/IBackupObserver;Landroid/app/backup/IBackupObserver$Stub$Proxy;
 PLcom/android/server/backup/utils/DataStreamFileCodec;-><init>(Ljava/io/File;Lcom/android/server/backup/utils/DataStreamCodec;)V
 PLcom/android/server/backup/utils/DataStreamFileCodec;->deserialize()Ljava/lang/Object;
+PLcom/android/server/backup/utils/FullBackupRestoreObserverUtils;->sendOnRestorePackage(Landroid/app/backup/IFullBackupRestoreObserver;Ljava/lang/String;)Landroid/app/backup/IFullBackupRestoreObserver;
 HPLcom/android/server/backup/utils/FullBackupUtils;->routeSocketDataToOutput(Landroid/os/ParcelFileDescriptor;Ljava/io/OutputStream;)V+]Ljava/io/DataInputStream;Ljava/io/DataInputStream;]Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;]Ljava/io/OutputStream;Ljava/io/FileOutputStream;
 PLcom/android/server/backup/utils/RandomAccessFileUtils;->getRandomAccessFile(Ljava/io/File;)Ljava/io/RandomAccessFile;
 PLcom/android/server/backup/utils/RandomAccessFileUtils;->writeBoolean(Ljava/io/File;Z)V
 HPLcom/android/server/backup/utils/SparseArrayUtils;->union(Landroid/util/SparseArray;)Ljava/util/HashSet;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/HashSet;Ljava/util/HashSet;
+PLcom/android/server/backup/utils/TarBackupReader;-><init>(Ljava/io/InputStream;Lcom/android/server/backup/utils/BytesReadListener;Landroid/app/backup/IBackupManagerMonitor;)V
+PLcom/android/server/backup/utils/TarBackupReader;->chooseRestorePolicy(Landroid/content/pm/PackageManager;ZLcom/android/server/backup/FileMetadata;[Landroid/content/pm/Signature;Landroid/content/pm/PackageManagerInternal;ILcom/android/server/backup/utils/BackupEligibilityRules;)Lcom/android/server/backup/restore/RestorePolicy;
+PLcom/android/server/backup/utils/TarBackupReader;->extractLine([BI[Ljava/lang/String;)I
+HPLcom/android/server/backup/utils/TarBackupReader;->extractRadix([BIII)J
+HPLcom/android/server/backup/utils/TarBackupReader;->extractString([BII)Ljava/lang/String;
+PLcom/android/server/backup/utils/TarBackupReader;->readAppManifestAndReturnSignatures(Lcom/android/server/backup/FileMetadata;)[Landroid/content/pm/Signature;
+PLcom/android/server/backup/utils/TarBackupReader;->readExactly(Ljava/io/InputStream;[BII)I
+PLcom/android/server/backup/utils/TarBackupReader;->readPaxExtendedHeader(Lcom/android/server/backup/FileMetadata;)Z
+HPLcom/android/server/backup/utils/TarBackupReader;->readTarHeader([B)Z
+HPLcom/android/server/backup/utils/TarBackupReader;->readTarHeaders()Lcom/android/server/backup/FileMetadata;
+PLcom/android/server/backup/utils/TarBackupReader;->skipTarPadding(J)V
 HSPLcom/android/server/biometrics/AuthService$AuthServiceImpl;-><init>(Lcom/android/server/biometrics/AuthService;)V
 HSPLcom/android/server/biometrics/AuthService$AuthServiceImpl;-><init>(Lcom/android/server/biometrics/AuthService;Lcom/android/server/biometrics/AuthService$AuthServiceImpl-IA;)V
 PLcom/android/server/biometrics/AuthService$AuthServiceImpl;->authenticate(Landroid/os/IBinder;JILandroid/hardware/biometrics/IBiometricServiceReceiver;Ljava/lang/String;Landroid/hardware/biometrics/PromptInfo;)J
 PLcom/android/server/biometrics/AuthService$AuthServiceImpl;->authenticateFastFail(Ljava/lang/String;Landroid/hardware/biometrics/IBiometricServiceReceiver;)V
 HPLcom/android/server/biometrics/AuthService$AuthServiceImpl;->canAuthenticate(Ljava/lang/String;II)I
 PLcom/android/server/biometrics/AuthService$AuthServiceImpl;->cancelAuthentication(Landroid/os/IBinder;Ljava/lang/String;J)V
-HPLcom/android/server/biometrics/AuthService$AuthServiceImpl;->getAuthenticatorIds(I)[J
+HSPLcom/android/server/biometrics/AuthService$AuthServiceImpl;->getAuthenticatorIds(I)[J
 HPLcom/android/server/biometrics/AuthService$AuthServiceImpl;->hasEnrolledBiometrics(ILjava/lang/String;)Z
 PLcom/android/server/biometrics/AuthService$AuthServiceImpl;->invalidateAuthenticatorIds(IILandroid/hardware/biometrics/IInvalidationCallback;)V
 HSPLcom/android/server/biometrics/AuthService$AuthServiceImpl;->registerEnabledOnKeyguardCallback(Landroid/hardware/biometrics/IBiometricEnabledOnKeyguardCallback;)V
@@ -14993,7 +15841,7 @@
 PLcom/android/server/biometrics/AuthService;->checkAppOps(ILjava/lang/String;Ljava/lang/String;)Z
 HSPLcom/android/server/biometrics/AuthService;->checkInternalPermission()V
 HPLcom/android/server/biometrics/AuthService;->checkPermission()V
-PLcom/android/server/biometrics/AuthService;->getHidlFaceSensorProps(II)Landroid/hardware/face/FaceSensorPropertiesInternal;
+HSPLcom/android/server/biometrics/AuthService;->getHidlFaceSensorProps(II)Landroid/hardware/face/FaceSensorPropertiesInternal;
 HSPLcom/android/server/biometrics/AuthService;->getHidlFingerprintSensorProps(II)Landroid/hardware/fingerprint/FingerprintSensorPropertiesInternal;
 HSPLcom/android/server/biometrics/AuthService;->onStart()V
 HSPLcom/android/server/biometrics/AuthService;->registerAuthenticators([Lcom/android/server/biometrics/SensorConfig;)V
@@ -15130,7 +15978,7 @@
 HPLcom/android/server/biometrics/BiometricService$BiometricServiceWrapper;->canAuthenticate(Ljava/lang/String;III)I
 PLcom/android/server/biometrics/BiometricService$BiometricServiceWrapper;->cancelAuthentication(Landroid/os/IBinder;Ljava/lang/String;J)V
 PLcom/android/server/biometrics/BiometricService$BiometricServiceWrapper;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-HPLcom/android/server/biometrics/BiometricService$BiometricServiceWrapper;->getAuthenticatorIds(I)[J
+HSPLcom/android/server/biometrics/BiometricService$BiometricServiceWrapper;->getAuthenticatorIds(I)[J
 HPLcom/android/server/biometrics/BiometricService$BiometricServiceWrapper;->getCurrentStrength(I)I
 HPLcom/android/server/biometrics/BiometricService$BiometricServiceWrapper;->hasEnrolledBiometrics(ILjava/lang/String;)Z
 PLcom/android/server/biometrics/BiometricService$BiometricServiceWrapper;->invalidateAuthenticatorIds(IILandroid/hardware/biometrics/IInvalidationCallback;)V
@@ -15231,7 +16079,7 @@
 HSPLcom/android/server/biometrics/BiometricStrengthController;->startListening()V
 HSPLcom/android/server/biometrics/BiometricStrengthController;->updateStrengths()V
 HPLcom/android/server/biometrics/HardwareAuthTokenUtils;->flipIfNativelyLittle(I)I
-PLcom/android/server/biometrics/HardwareAuthTokenUtils;->flipIfNativelyLittle(J)J
+HPLcom/android/server/biometrics/HardwareAuthTokenUtils;->flipIfNativelyLittle(J)J
 PLcom/android/server/biometrics/HardwareAuthTokenUtils;->getInt([BI)I
 PLcom/android/server/biometrics/HardwareAuthTokenUtils;->getLong([BI)J
 HPLcom/android/server/biometrics/HardwareAuthTokenUtils;->toByteArray(Landroid/hardware/keymaster/HardwareAuthToken;)[B
@@ -15246,7 +16094,9 @@
 HPLcom/android/server/biometrics/PreAuthInfo;->getInternalStatus()Landroid/util/Pair;
 PLcom/android/server/biometrics/PreAuthInfo;->getPreAuthenticateStatus()Landroid/util/Pair;
 HPLcom/android/server/biometrics/PreAuthInfo;->getStatusForBiometricAuthenticator(Landroid/app/admin/DevicePolicyManager;Lcom/android/server/biometrics/BiometricService$SettingObserver;Lcom/android/server/biometrics/BiometricSensor;ILjava/lang/String;ZILjava/util/List;ZLandroid/content/Context;)I
+PLcom/android/server/biometrics/PreAuthInfo;->isBiometricDisabledByDevicePolicy(Landroid/app/admin/DevicePolicyManager;II)Z
 PLcom/android/server/biometrics/PreAuthInfo;->isEnabledForApp(Lcom/android/server/biometrics/BiometricService$SettingObserver;II)Z
+PLcom/android/server/biometrics/PreAuthInfo;->mapModalityToDevicePolicyType(I)I
 PLcom/android/server/biometrics/PreAuthInfo;->numSensorsWaitingForCookie()I
 PLcom/android/server/biometrics/PreAuthInfo;->shouldShowCredential()Z
 HPLcom/android/server/biometrics/PreAuthInfo;->toString()Ljava/lang/String;
@@ -15254,7 +16104,7 @@
 PLcom/android/server/biometrics/Utils;->authenticatorStatusToBiometricConstant(I)I
 HSPLcom/android/server/biometrics/Utils;->authenticatorStrengthToPropertyStrength(I)I
 PLcom/android/server/biometrics/Utils;->biometricConstantsToBiometricManager(I)I
-HSPLcom/android/server/biometrics/Utils;->checkPermission(Landroid/content/Context;Ljava/lang/String;)V
+HSPLcom/android/server/biometrics/Utils;->checkPermission(Landroid/content/Context;Ljava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/Context;Landroid/app/ContextImpl;
 PLcom/android/server/biometrics/Utils;->combineAuthenticatorBundles(Landroid/hardware/biometrics/PromptInfo;)V
 PLcom/android/server/biometrics/Utils;->containsFlag(II)Z
 PLcom/android/server/biometrics/Utils;->getAuthenticationTypeForResult(I)I
@@ -15262,7 +16112,7 @@
 PLcom/android/server/biometrics/Utils;->getPublicBiometricStrength(I)I
 HPLcom/android/server/biometrics/Utils;->getPublicBiometricStrength(Landroid/hardware/biometrics/PromptInfo;)I
 HPLcom/android/server/biometrics/Utils;->hasInternalPermission(Landroid/content/Context;)Z
-PLcom/android/server/biometrics/Utils;->isAtLeastStrength(II)Z
+HPLcom/android/server/biometrics/Utils;->isAtLeastStrength(II)Z
 PLcom/android/server/biometrics/Utils;->isBackground(Ljava/lang/String;)Z
 PLcom/android/server/biometrics/Utils;->isBiometricRequested(Landroid/hardware/biometrics/PromptInfo;)Z
 PLcom/android/server/biometrics/Utils;->isConfirmationSupported(I)Z
@@ -15296,14 +16146,14 @@
 HSPLcom/android/server/biometrics/log/BiometricContextProvider;-><init>(Landroid/hardware/display/AmbientDisplayConfiguration;Lcom/android/internal/statusbar/IStatusBarService;Landroid/os/Handler;)V
 HSPLcom/android/server/biometrics/log/BiometricContextProvider;->defaultProvider(Landroid/content/Context;)Lcom/android/server/biometrics/log/BiometricContextProvider;
 PLcom/android/server/biometrics/log/BiometricContextProvider;->getBiometricPromptSessionId()Ljava/lang/Integer;
-HPLcom/android/server/biometrics/log/BiometricContextProvider;->getKeyguardEntrySessionId()Ljava/lang/Integer;
+HPLcom/android/server/biometrics/log/BiometricContextProvider;->getKeyguardEntrySessionId()Ljava/lang/Integer;+]Ljava/util/Map;Ljava/util/concurrent/ConcurrentHashMap;]Lcom/android/internal/logging/InstanceId;Lcom/android/internal/logging/InstanceId;
 HPLcom/android/server/biometrics/log/BiometricContextProvider;->isAod()Z+]Landroid/hardware/display/AmbientDisplayConfiguration;Landroid/hardware/display/AmbientDisplayConfiguration;
 HPLcom/android/server/biometrics/log/BiometricContextProvider;->lambda$notifySubscribers$0(Landroid/hardware/biometrics/common/OperationContext;Ljava/util/function/Consumer;)V
 HPLcom/android/server/biometrics/log/BiometricContextProvider;->notifySubscribers()V
 HPLcom/android/server/biometrics/log/BiometricContextProvider;->setFirstSessionId(Landroid/hardware/biometrics/common/OperationContext;)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/biometrics/log/BiometricContextProvider;Lcom/android/server/biometrics/log/BiometricContextProvider;
 PLcom/android/server/biometrics/log/BiometricContextProvider;->subscribe(Landroid/hardware/biometrics/common/OperationContext;Ljava/util/function/Consumer;)V
 HPLcom/android/server/biometrics/log/BiometricContextProvider;->unsubscribe(Landroid/hardware/biometrics/common/OperationContext;)V
-HPLcom/android/server/biometrics/log/BiometricContextProvider;->updateContext(Landroid/hardware/biometrics/common/OperationContext;Z)Landroid/hardware/biometrics/common/OperationContext;
+HPLcom/android/server/biometrics/log/BiometricContextProvider;->updateContext(Landroid/hardware/biometrics/common/OperationContext;Z)Landroid/hardware/biometrics/common/OperationContext;+]Lcom/android/server/biometrics/log/BiometricContextProvider;Lcom/android/server/biometrics/log/BiometricContextProvider;
 PLcom/android/server/biometrics/log/BiometricFrameworkStatsLogger;-><clinit>()V
 PLcom/android/server/biometrics/log/BiometricFrameworkStatsLogger;-><init>()V
 HPLcom/android/server/biometrics/log/BiometricFrameworkStatsLogger;->acquired(Landroid/hardware/biometrics/common/OperationContext;IIIZIII)V
@@ -15311,7 +16161,7 @@
 PLcom/android/server/biometrics/log/BiometricFrameworkStatsLogger;->enroll(IIIIJZF)V
 HPLcom/android/server/biometrics/log/BiometricFrameworkStatsLogger;->error(Landroid/hardware/biometrics/common/OperationContext;IIIZJIII)V
 PLcom/android/server/biometrics/log/BiometricFrameworkStatsLogger;->getInstance()Lcom/android/server/biometrics/log/BiometricFrameworkStatsLogger;
-PLcom/android/server/biometrics/log/BiometricFrameworkStatsLogger;->sanitizeLatency(J)J
+HPLcom/android/server/biometrics/log/BiometricFrameworkStatsLogger;->sanitizeLatency(J)J
 HPLcom/android/server/biometrics/log/BiometricFrameworkStatsLogger;->sessionType(B)I
 HPLcom/android/server/biometrics/log/BiometricLogger$1;-><init>(Lcom/android/server/biometrics/log/BiometricLogger;)V
 PLcom/android/server/biometrics/log/BiometricLogger$1;->onAccuracyChanged(Landroid/hardware/Sensor;I)V
@@ -15342,11 +16192,11 @@
 HPLcom/android/server/biometrics/log/CallbackWithProbe;->onClientStarted(Lcom/android/server/biometrics/sensors/BaseClientMonitor;)V
 PLcom/android/server/biometrics/sensors/AcquisitionClient;-><clinit>()V
 HPLcom/android/server/biometrics/sensors/AcquisitionClient;-><init>(Landroid/content/Context;Ljava/util/function/Supplier;Landroid/os/IBinder;Lcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;ILjava/lang/String;IIZLcom/android/server/biometrics/log/BiometricLogger;Lcom/android/server/biometrics/log/BiometricContext;)V
-PLcom/android/server/biometrics/sensors/AcquisitionClient;->cancel()V
+HPLcom/android/server/biometrics/sensors/AcquisitionClient;->cancel()V
 PLcom/android/server/biometrics/sensors/AcquisitionClient;->cancelWithoutStarting(Lcom/android/server/biometrics/sensors/ClientMonitorCallback;)V
 HPLcom/android/server/biometrics/sensors/AcquisitionClient;->notifyUserActivity()V
 PLcom/android/server/biometrics/sensors/AcquisitionClient;->onAcquired(II)V
-HPLcom/android/server/biometrics/sensors/AcquisitionClient;->onAcquiredInternal(IIZ)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/biometrics/sensors/HalClientMonitor;Lcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient;,Lcom/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient;]Lcom/android/server/biometrics/log/BiometricLogger;Lcom/android/server/biometrics/log/BiometricLogger;]Lcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;Lcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;]Lcom/android/server/biometrics/sensors/AcquisitionClient;Lcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient;,Lcom/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient;]Lcom/android/server/biometrics/sensors/BaseClientMonitor;Lcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient;,Lcom/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient;
+HPLcom/android/server/biometrics/sensors/AcquisitionClient;->onAcquiredInternal(IIZ)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/biometrics/sensors/HalClientMonitor;Lcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient;,Lcom/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient;,Lcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient;]Lcom/android/server/biometrics/log/BiometricLogger;Lcom/android/server/biometrics/log/BiometricLogger;]Lcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;Lcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;]Lcom/android/server/biometrics/sensors/AcquisitionClient;Lcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient;,Lcom/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient;,Lcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient;]Lcom/android/server/biometrics/sensors/BaseClientMonitor;Lcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient;,Lcom/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient;,Lcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient;
 PLcom/android/server/biometrics/sensors/AcquisitionClient;->onError(II)V
 HPLcom/android/server/biometrics/sensors/AcquisitionClient;->onErrorInternal(IIZ)V
 PLcom/android/server/biometrics/sensors/AcquisitionClient;->onUserCanceled()V
@@ -15383,7 +16233,7 @@
 PLcom/android/server/biometrics/sensors/AuthenticationClient;->isKeyguardBypassEnabled()Z
 PLcom/android/server/biometrics/sensors/AuthenticationClient;->isSettings()Z
 HPLcom/android/server/biometrics/sensors/AuthenticationClient;->onAcquired(II)V
-HPLcom/android/server/biometrics/sensors/AuthenticationClient;->onAuthenticated(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;ZLjava/util/ArrayList;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;Landroid/hardware/fingerprint/Fingerprint;]Lcom/android/server/biometrics/sensors/PerformanceTracker;Lcom/android/server/biometrics/sensors/PerformanceTracker;]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/lang/Byte;Ljava/lang/Byte;]Lcom/android/server/biometrics/sensors/AuthenticationClient;Lcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient;]Lcom/android/server/biometrics/sensors/BaseClientMonitor;Lcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient;]Landroid/app/ActivityTaskManager;Landroid/app/ActivityTaskManager;]Lcom/android/server/biometrics/sensors/HalClientMonitor;Lcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient;]Landroid/hardware/biometrics/BiometricManager;Landroid/hardware/biometrics/BiometricManager;]Lcom/android/server/biometrics/sensors/CoexCoordinator;Lcom/android/server/biometrics/sensors/CoexCoordinator;]Lcom/android/server/biometrics/log/BiometricLogger;Lcom/android/server/biometrics/log/BiometricLogger;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/biometrics/sensors/AuthenticationClient;->onAuthenticated(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;ZLjava/util/ArrayList;)V+]Landroid/app/ActivityTaskManager;Landroid/app/ActivityTaskManager;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/biometrics/sensors/HalClientMonitor;Lcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintAuthenticationClient;,Lcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient;]Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;Landroid/hardware/fingerprint/Fingerprint;]Lcom/android/server/biometrics/sensors/PerformanceTracker;Lcom/android/server/biometrics/sensors/PerformanceTracker;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/hardware/biometrics/BiometricManager;Landroid/hardware/biometrics/BiometricManager;]Lcom/android/server/biometrics/log/BiometricLogger;Lcom/android/server/biometrics/log/BiometricLogger;]Lcom/android/server/biometrics/sensors/CoexCoordinator;Lcom/android/server/biometrics/sensors/CoexCoordinator;]Ljava/lang/Byte;Ljava/lang/Byte;]Lcom/android/server/biometrics/sensors/AuthenticationClient;Lcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintAuthenticationClient;,Lcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/biometrics/sensors/BaseClientMonitor;Lcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintAuthenticationClient;,Lcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient;
 HPLcom/android/server/biometrics/sensors/AuthenticationClient;->onError(II)V
 PLcom/android/server/biometrics/sensors/AuthenticationClient;->onLockoutPermanent()V
 PLcom/android/server/biometrics/sensors/AuthenticationClient;->onLockoutTimed(J)V
@@ -15462,28 +16312,30 @@
 PLcom/android/server/biometrics/sensors/BiometricScheduler;->startPreparedClient(I)V
 HPLcom/android/server/biometrics/sensors/BiometricSchedulerOperation$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/biometrics/sensors/BiometricSchedulerOperation;)V
 PLcom/android/server/biometrics/sensors/BiometricSchedulerOperation$$ExternalSyntheticLambda0;->run()V
-PLcom/android/server/biometrics/sensors/BiometricSchedulerOperation$1;-><init>(Lcom/android/server/biometrics/sensors/BiometricSchedulerOperation;)V
+PLcom/android/server/biometrics/sensors/BiometricSchedulerOperation$$ExternalSyntheticLambda1;-><init>()V
+HPLcom/android/server/biometrics/sensors/BiometricSchedulerOperation$1;-><init>(Lcom/android/server/biometrics/sensors/BiometricSchedulerOperation;)V
 HPLcom/android/server/biometrics/sensors/BiometricSchedulerOperation$1;->onClientFinished(Lcom/android/server/biometrics/sensors/BaseClientMonitor;Z)V
 PLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->$r8$lambda$B7QjT2I_8dwC5lA66-6hE4ajnBw(Lcom/android/server/biometrics/sensors/BiometricSchedulerOperation;)V
 PLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->-$$Nest$fgetmClientMonitor(Lcom/android/server/biometrics/sensors/BiometricSchedulerOperation;)Lcom/android/server/biometrics/sensors/BaseClientMonitor;
 PLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->-$$Nest$fputmState(Lcom/android/server/biometrics/sensors/BiometricSchedulerOperation;I)V
 PLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;-><init>(Lcom/android/server/biometrics/sensors/BaseClientMonitor;Lcom/android/server/biometrics/sensors/ClientMonitorCallback;)V
 HPLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;-><init>(Lcom/android/server/biometrics/sensors/BaseClientMonitor;Lcom/android/server/biometrics/sensors/ClientMonitorCallback;I)V
+HPLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;-><init>(Lcom/android/server/biometrics/sensors/BaseClientMonitor;Lcom/android/server/biometrics/sensors/ClientMonitorCallback;ILjava/util/function/BooleanSupplier;)V
 HPLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->cancel(Landroid/os/Handler;Lcom/android/server/biometrics/sensors/ClientMonitorCallback;)V
-PLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->checkInState(Ljava/lang/String;[I)V
-PLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->checkNotInState(Ljava/lang/String;[I)V
 HPLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->doStart(Lcom/android/server/biometrics/sensors/ClientMonitorCallback;)Z
+HPLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->errorWhenNoneOf(Ljava/lang/String;[I)Z
+PLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->errorWhenOneOf(Ljava/lang/String;[I)Z
 HPLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->getClientMonitor()Lcom/android/server/biometrics/sensors/BaseClientMonitor;
 HPLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->getProtoEnum()I
 HPLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->getSensorId()I
 HPLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->getTargetUserId()I
 HPLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->getWrappedCallback(Lcom/android/server/biometrics/sensors/ClientMonitorCallback;)Lcom/android/server/biometrics/sensors/ClientMonitorCallback;
-PLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->isAcquisitionOperation()Z
+HPLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->isAcquisitionOperation()Z
 HPLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->isAuthenticationOrDetectionOperation()Z
 PLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->isEnrollOperation()Z
 PLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->isFinished()Z
 PLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->isFor(Lcom/android/server/biometrics/sensors/BaseClientMonitor;)Z
-PLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->isHalOperation()Z
+HPLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->isHalOperation()Z
 PLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->isInterruptable()Z
 PLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->isMarkedCanceling()Z
 HPLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->isMatchingRequestId(J)Z
@@ -15498,12 +16350,12 @@
 HPLcom/android/server/biometrics/sensors/BiometricSchedulerOperation;->toString()Ljava/lang/String;
 HSPLcom/android/server/biometrics/sensors/BiometricStateCallback;-><init>()V
 PLcom/android/server/biometrics/sensors/BiometricStateCallback;->getBiometricState()I
-PLcom/android/server/biometrics/sensors/BiometricStateCallback;->notifyAllEnrollmentStateChanged(IIZ)V
+HSPLcom/android/server/biometrics/sensors/BiometricStateCallback;->notifyAllEnrollmentStateChanged(IIZ)V
 HPLcom/android/server/biometrics/sensors/BiometricStateCallback;->notifyBiometricStateListeners(I)V
-PLcom/android/server/biometrics/sensors/BiometricStateCallback;->notifyEnrollmentStateChanged(Landroid/hardware/biometrics/IBiometricStateListener;IIZ)V
+HSPLcom/android/server/biometrics/sensors/BiometricStateCallback;->notifyEnrollmentStateChanged(Landroid/hardware/biometrics/IBiometricStateListener;IIZ)V
 HPLcom/android/server/biometrics/sensors/BiometricStateCallback;->onClientFinished(Lcom/android/server/biometrics/sensors/BaseClientMonitor;Z)V
 HPLcom/android/server/biometrics/sensors/BiometricStateCallback;->onClientStarted(Lcom/android/server/biometrics/sensors/BaseClientMonitor;)V
-PLcom/android/server/biometrics/sensors/BiometricStateCallback;->registerBiometricStateListener(Landroid/hardware/biometrics/IBiometricStateListener;)V
+HSPLcom/android/server/biometrics/sensors/BiometricStateCallback;->registerBiometricStateListener(Landroid/hardware/biometrics/IBiometricStateListener;)V
 HSPLcom/android/server/biometrics/sensors/BiometricUserState$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/biometrics/sensors/BiometricUserState;)V
 PLcom/android/server/biometrics/sensors/BiometricUserState$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/biometrics/sensors/BiometricUserState;->$r8$lambda$oJ_rhDM--0IGhnHj5ZfT-eTkOVE(Lcom/android/server/biometrics/sensors/BiometricUserState;)V
@@ -15536,6 +16388,7 @@
 PLcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;->onEnrollmentFrame(Landroid/hardware/face/FaceEnrollFrame;)V
 HPLcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;->onError(IIII)V
 PLcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;->onFeatureGet(Z[I[Z)V
+PLcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;->onFeatureSet(ZI)V
 PLcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;->onRemoved(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;I)V
 HPLcom/android/server/biometrics/sensors/ClientMonitorCompositeCallback;-><init>([Lcom/android/server/biometrics/sensors/ClientMonitorCallback;)V
 HPLcom/android/server/biometrics/sensors/ClientMonitorCompositeCallback;->onClientFinished(Lcom/android/server/biometrics/sensors/BaseClientMonitor;Z)V
@@ -15577,7 +16430,7 @@
 HPLcom/android/server/biometrics/sensors/HalClientMonitor;->destroy()V
 PLcom/android/server/biometrics/sensors/HalClientMonitor;->getBiometricContextUnsubscriber()Lcom/android/server/biometrics/sensors/ClientMonitorCallback;
 HPLcom/android/server/biometrics/sensors/HalClientMonitor;->getFreshDaemon()Ljava/lang/Object;
-HPLcom/android/server/biometrics/sensors/HalClientMonitor;->getOperationContext()Landroid/hardware/biometrics/common/OperationContext;
+HPLcom/android/server/biometrics/sensors/HalClientMonitor;->getOperationContext()Landroid/hardware/biometrics/common/OperationContext;+]Lcom/android/server/biometrics/log/BiometricContext;Lcom/android/server/biometrics/log/BiometricContextProvider;]Lcom/android/server/biometrics/sensors/BaseClientMonitor;Lcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient;,Lcom/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient;,Lcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient;
 HPLcom/android/server/biometrics/sensors/HalClientMonitor;->unsubscribeBiometricContext()V
 PLcom/android/server/biometrics/sensors/InternalCleanupClient$1;-><init>(Lcom/android/server/biometrics/sensors/InternalCleanupClient;)V
 PLcom/android/server/biometrics/sensors/InternalCleanupClient$1;->onClientFinished(Lcom/android/server/biometrics/sensors/BaseClientMonitor;Z)V
@@ -15615,12 +16468,12 @@
 PLcom/android/server/biometrics/sensors/LockoutResetDispatcher$ClientCallback;->-$$Nest$fgetmOpPackageName(Lcom/android/server/biometrics/sensors/LockoutResetDispatcher$ClientCallback;)Ljava/lang/String;
 PLcom/android/server/biometrics/sensors/LockoutResetDispatcher$ClientCallback;->-$$Nest$mreleaseWakelock(Lcom/android/server/biometrics/sensors/LockoutResetDispatcher$ClientCallback;)V
 HSPLcom/android/server/biometrics/sensors/LockoutResetDispatcher$ClientCallback;-><init>(Landroid/content/Context;Landroid/hardware/biometrics/IBiometricServiceLockoutResetCallback;Ljava/lang/String;)V
-PLcom/android/server/biometrics/sensors/LockoutResetDispatcher$ClientCallback;->releaseWakelock()V
+HPLcom/android/server/biometrics/sensors/LockoutResetDispatcher$ClientCallback;->releaseWakelock()V
 HPLcom/android/server/biometrics/sensors/LockoutResetDispatcher$ClientCallback;->sendLockoutReset(I)V
 HSPLcom/android/server/biometrics/sensors/LockoutResetDispatcher;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/biometrics/sensors/LockoutResetDispatcher;->addCallback(Landroid/hardware/biometrics/IBiometricServiceLockoutResetCallback;Ljava/lang/String;)V
 PLcom/android/server/biometrics/sensors/LockoutResetDispatcher;->binderDied(Landroid/os/IBinder;)V
-PLcom/android/server/biometrics/sensors/LockoutResetDispatcher;->notifyLockoutResetCallbacks(I)V
+HPLcom/android/server/biometrics/sensors/LockoutResetDispatcher;->notifyLockoutResetCallbacks(I)V
 PLcom/android/server/biometrics/sensors/PerformanceTracker$Info;-><init>()V
 PLcom/android/server/biometrics/sensors/PerformanceTracker$Info;-><init>(Lcom/android/server/biometrics/sensors/PerformanceTracker$Info-IA;)V
 PLcom/android/server/biometrics/sensors/PerformanceTracker;-><init>()V
@@ -15640,6 +16493,7 @@
 HPLcom/android/server/biometrics/sensors/PerformanceTracker;->incrementAuthForUser(IZ)V
 PLcom/android/server/biometrics/sensors/PerformanceTracker;->incrementCryptoAuthForUser(IZ)V
 PLcom/android/server/biometrics/sensors/PerformanceTracker;->incrementHALDeathCount()V
+PLcom/android/server/biometrics/sensors/PerformanceTracker;->incrementPermanentLockoutForUser(I)V
 PLcom/android/server/biometrics/sensors/PerformanceTracker;->incrementTimedLockoutForUser(I)V
 PLcom/android/server/biometrics/sensors/RemovalClient;-><init>(Landroid/content/Context;Ljava/util/function/Supplier;Landroid/os/IBinder;Lcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;ILjava/lang/String;Lcom/android/server/biometrics/sensors/BiometricUtils;ILcom/android/server/biometrics/log/BiometricLogger;Lcom/android/server/biometrics/log/BiometricContext;Ljava/util/Map;)V
 PLcom/android/server/biometrics/sensors/RemovalClient;->getProtoEnum()I
@@ -15678,8 +16532,8 @@
 HPLcom/android/server/biometrics/sensors/face/FaceAuthenticator;->getAuthenticatorId(I)J
 PLcom/android/server/biometrics/sensors/face/FaceAuthenticator;->getLockoutModeForUser(I)I
 PLcom/android/server/biometrics/sensors/face/FaceAuthenticator;->getSensorProperties(Ljava/lang/String;)Landroid/hardware/biometrics/SensorPropertiesInternal;
-PLcom/android/server/biometrics/sensors/face/FaceAuthenticator;->hasEnrolledTemplates(ILjava/lang/String;)Z
-PLcom/android/server/biometrics/sensors/face/FaceAuthenticator;->isHardwareDetected(Ljava/lang/String;)Z
+HPLcom/android/server/biometrics/sensors/face/FaceAuthenticator;->hasEnrolledTemplates(ILjava/lang/String;)Z
+HPLcom/android/server/biometrics/sensors/face/FaceAuthenticator;->isHardwareDetected(Ljava/lang/String;)Z
 PLcom/android/server/biometrics/sensors/face/FaceAuthenticator;->prepareForAuthentication(ZLandroid/os/IBinder;JILandroid/hardware/biometrics/IBiometricSensorReceiver;Ljava/lang/String;JIZ)V
 PLcom/android/server/biometrics/sensors/face/FaceAuthenticator;->resetLockout(Landroid/os/IBinder;Ljava/lang/String;I[B)V
 PLcom/android/server/biometrics/sensors/face/FaceAuthenticator;->startPreparedClient(I)V
@@ -15690,10 +16544,11 @@
 HSPLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;-><init>(Lcom/android/server/biometrics/sensors/face/FaceService;Lcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper-IA;)V
 HSPLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->addAidlProviders()V
 HSPLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->addHidlProviders(Ljava/util/List;)V
-PLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->addLockoutResetCallback(Landroid/hardware/biometrics/IBiometricServiceLockoutResetCallback;Ljava/lang/String;)V
+HSPLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->addLockoutResetCallback(Landroid/hardware/biometrics/IBiometricServiceLockoutResetCallback;Ljava/lang/String;)V
 HPLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->authenticate(Landroid/os/IBinder;JILandroid/hardware/face/IFaceServiceReceiver;Ljava/lang/String;Z)J
 HPLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->cancelAuthentication(Landroid/os/IBinder;Ljava/lang/String;J)V
 PLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->cancelAuthenticationFromService(ILandroid/os/IBinder;Ljava/lang/String;J)V
+PLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->cancelEnrollment(Landroid/os/IBinder;J)V
 PLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->cancelFaceDetect(Landroid/os/IBinder;Ljava/lang/String;J)V
 PLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->detectFace(Landroid/os/IBinder;ILandroid/hardware/face/IFaceServiceReceiver;Ljava/lang/String;)J
 PLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
@@ -15703,49 +16558,50 @@
 PLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->getEnrolledFaces(IILjava/lang/String;)Ljava/util/List;
 PLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->getFeature(Landroid/os/IBinder;IILandroid/hardware/face/IFaceServiceReceiver;Ljava/lang/String;)V
 PLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->getLockoutModeForUser(II)I
-PLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->getSensorProperties(ILjava/lang/String;)Landroid/hardware/face/FaceSensorPropertiesInternal;
-HPLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->getSensorPropertiesInternal(Ljava/lang/String;)Ljava/util/List;
-HPLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->hasEnrolledFaces(IILjava/lang/String;)Z
-HPLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->isHardwareDetected(ILjava/lang/String;)Z
+HPLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->getSensorProperties(ILjava/lang/String;)Landroid/hardware/face/FaceSensorPropertiesInternal;
+HSPLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->getSensorPropertiesInternal(Ljava/lang/String;)Ljava/util/List;
+HSPLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->hasEnrolledFaces(IILjava/lang/String;)Z
+HSPLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->isHardwareDetected(ILjava/lang/String;)Z
 HSPLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->lambda$registerAuthenticators$0(Ljava/util/List;)V
 PLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->prepareForAuthentication(IZLandroid/os/IBinder;JILandroid/hardware/biometrics/IBiometricSensorReceiver;Ljava/lang/String;JIZ)V
 HSPLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->registerAuthenticators(Ljava/util/List;)V
 PLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->remove(Landroid/os/IBinder;IILandroid/hardware/face/IFaceServiceReceiver;Ljava/lang/String;)V
-PLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->resetLockout(Landroid/os/IBinder;II[BLjava/lang/String;)V
+HPLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->resetLockout(Landroid/os/IBinder;II[BLjava/lang/String;)V
 PLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->revokeChallenge(Landroid/os/IBinder;IILjava/lang/String;J)V
+PLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->setFeature(Landroid/os/IBinder;IIZ[BLandroid/hardware/face/IFaceServiceReceiver;Ljava/lang/String;)V
 PLcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;->startPreparedClient(II)V
 PLcom/android/server/biometrics/sensors/face/FaceService;->-$$Nest$fgetmLockPatternUtils(Lcom/android/server/biometrics/sensors/face/FaceService;)Lcom/android/internal/widget/LockPatternUtils;
 HSPLcom/android/server/biometrics/sensors/face/FaceService;->-$$Nest$fgetmLockoutResetDispatcher(Lcom/android/server/biometrics/sensors/face/FaceService;)Lcom/android/server/biometrics/sensors/LockoutResetDispatcher;
 HSPLcom/android/server/biometrics/sensors/face/FaceService;->-$$Nest$fgetmServiceProviders(Lcom/android/server/biometrics/sensors/face/FaceService;)Ljava/util/List;
 HSPLcom/android/server/biometrics/sensors/face/FaceService;->-$$Nest$fgetmServiceWrapper(Lcom/android/server/biometrics/sensors/face/FaceService;)Lcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;
-HPLcom/android/server/biometrics/sensors/face/FaceService;->-$$Nest$mgetProviderForSensor(Lcom/android/server/biometrics/sensors/face/FaceService;I)Lcom/android/server/biometrics/sensors/face/ServiceProvider;
-HPLcom/android/server/biometrics/sensors/face/FaceService;->-$$Nest$mgetSensorProperties(Lcom/android/server/biometrics/sensors/face/FaceService;)Ljava/util/List;
+HSPLcom/android/server/biometrics/sensors/face/FaceService;->-$$Nest$mgetProviderForSensor(Lcom/android/server/biometrics/sensors/face/FaceService;I)Lcom/android/server/biometrics/sensors/face/ServiceProvider;+]Lcom/android/server/biometrics/sensors/face/FaceService;Lcom/android/server/biometrics/sensors/face/FaceService;
+HSPLcom/android/server/biometrics/sensors/face/FaceService;->-$$Nest$mgetSensorProperties(Lcom/android/server/biometrics/sensors/face/FaceService;)Ljava/util/List;
 PLcom/android/server/biometrics/sensors/face/FaceService;->-$$Nest$mgetSingleProvider(Lcom/android/server/biometrics/sensors/face/FaceService;)Landroid/util/Pair;
 HSPLcom/android/server/biometrics/sensors/face/FaceService;-><init>(Landroid/content/Context;)V
-HPLcom/android/server/biometrics/sensors/face/FaceService;->getProviderForSensor(I)Lcom/android/server/biometrics/sensors/face/ServiceProvider;
-HPLcom/android/server/biometrics/sensors/face/FaceService;->getSensorProperties()Ljava/util/List;
+HSPLcom/android/server/biometrics/sensors/face/FaceService;->getProviderForSensor(I)Lcom/android/server/biometrics/sensors/face/ServiceProvider;+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/biometrics/sensors/face/ServiceProvider;Lcom/android/server/biometrics/sensors/face/hidl/Face10;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HSPLcom/android/server/biometrics/sensors/face/FaceService;->getSensorProperties()Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/biometrics/sensors/face/ServiceProvider;Lcom/android/server/biometrics/sensors/face/hidl/Face10;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HPLcom/android/server/biometrics/sensors/face/FaceService;->getSingleProvider()Landroid/util/Pair;
 HSPLcom/android/server/biometrics/sensors/face/FaceService;->onStart()V
-PLcom/android/server/biometrics/sensors/face/FaceUserState;-><init>(Landroid/content/Context;ILjava/lang/String;)V
+HSPLcom/android/server/biometrics/sensors/face/FaceUserState;-><init>(Landroid/content/Context;ILjava/lang/String;)V
 PLcom/android/server/biometrics/sensors/face/FaceUserState;->doWriteState(Landroid/util/TypedXmlSerializer;)V
-PLcom/android/server/biometrics/sensors/face/FaceUserState;->getBiometricsTag()Ljava/lang/String;
-HPLcom/android/server/biometrics/sensors/face/FaceUserState;->getCopy(Ljava/util/ArrayList;)Ljava/util/ArrayList;
+HSPLcom/android/server/biometrics/sensors/face/FaceUserState;->getBiometricsTag()Ljava/lang/String;
+HSPLcom/android/server/biometrics/sensors/face/FaceUserState;->getCopy(Ljava/util/ArrayList;)Ljava/util/ArrayList;
 PLcom/android/server/biometrics/sensors/face/FaceUserState;->getNameTemplateResource()I
-PLcom/android/server/biometrics/sensors/face/FaceUserState;->parseBiometricsLocked(Landroid/util/TypedXmlPullParser;)V
-PLcom/android/server/biometrics/sensors/face/FaceUtils;-><clinit>()V
-PLcom/android/server/biometrics/sensors/face/FaceUtils;-><init>(Ljava/lang/String;)V
+HSPLcom/android/server/biometrics/sensors/face/FaceUserState;->parseBiometricsLocked(Landroid/util/TypedXmlPullParser;)V
+HSPLcom/android/server/biometrics/sensors/face/FaceUtils;-><clinit>()V
+HSPLcom/android/server/biometrics/sensors/face/FaceUtils;-><init>(Ljava/lang/String;)V
 PLcom/android/server/biometrics/sensors/face/FaceUtils;->addBiometricForUser(Landroid/content/Context;ILandroid/hardware/biometrics/BiometricAuthenticator$Identifier;)V
 PLcom/android/server/biometrics/sensors/face/FaceUtils;->addBiometricForUser(Landroid/content/Context;ILandroid/hardware/face/Face;)V
-HPLcom/android/server/biometrics/sensors/face/FaceUtils;->getBiometricsForUser(Landroid/content/Context;I)Ljava/util/List;
-HPLcom/android/server/biometrics/sensors/face/FaceUtils;->getInstance(I)Lcom/android/server/biometrics/sensors/face/FaceUtils;
-HPLcom/android/server/biometrics/sensors/face/FaceUtils;->getInstance(ILjava/lang/String;)Lcom/android/server/biometrics/sensors/face/FaceUtils;
+HSPLcom/android/server/biometrics/sensors/face/FaceUtils;->getBiometricsForUser(Landroid/content/Context;I)Ljava/util/List;
+HSPLcom/android/server/biometrics/sensors/face/FaceUtils;->getInstance(I)Lcom/android/server/biometrics/sensors/face/FaceUtils;
+HSPLcom/android/server/biometrics/sensors/face/FaceUtils;->getInstance(ILjava/lang/String;)Lcom/android/server/biometrics/sensors/face/FaceUtils;
 HPLcom/android/server/biometrics/sensors/face/FaceUtils;->getLegacyInstance(I)Lcom/android/server/biometrics/sensors/face/FaceUtils;
-HPLcom/android/server/biometrics/sensors/face/FaceUtils;->getStateForUser(Landroid/content/Context;I)Lcom/android/server/biometrics/sensors/face/FaceUserState;
+HSPLcom/android/server/biometrics/sensors/face/FaceUtils;->getStateForUser(Landroid/content/Context;I)Lcom/android/server/biometrics/sensors/face/FaceUserState;
 PLcom/android/server/biometrics/sensors/face/FaceUtils;->getUniqueName(Landroid/content/Context;I)Ljava/lang/CharSequence;
 PLcom/android/server/biometrics/sensors/face/FaceUtils;->isInvalidationInProgress(Landroid/content/Context;I)Z
 PLcom/android/server/biometrics/sensors/face/FaceUtils;->removeBiometricForUser(Landroid/content/Context;II)V
 PLcom/android/server/biometrics/sensors/face/FaceUtils;->setInvalidationInProgress(Landroid/content/Context;IZ)V
-PLcom/android/server/biometrics/sensors/face/LockoutHalImpl;-><init>()V
+HSPLcom/android/server/biometrics/sensors/face/LockoutHalImpl;-><init>()V
 PLcom/android/server/biometrics/sensors/face/LockoutHalImpl;->getLockoutModeForUser(I)I
 PLcom/android/server/biometrics/sensors/face/LockoutHalImpl;->setCurrentUserLockoutMode(I)V
 PLcom/android/server/biometrics/sensors/face/UsageStats$AuthenticationEvent;->-$$Nest$fgetmAuthenticated(Lcom/android/server/biometrics/sensors/face/UsageStats$AuthenticationEvent;)Z
@@ -15757,11 +16613,12 @@
 HPLcom/android/server/biometrics/sensors/face/UsageStats;->addEvent(Lcom/android/server/biometrics/sensors/face/UsageStats$AuthenticationEvent;)V
 PLcom/android/server/biometrics/sensors/face/UsageStats;->print(Ljava/io/PrintWriter;)V
 PLcom/android/server/biometrics/sensors/face/aidl/AidlConversionUtils;->convertAidlToFrameworkFeature(B)I
+PLcom/android/server/biometrics/sensors/face/aidl/AidlConversionUtils;->convertFrameworkToAidlFeature(I)B
 HPLcom/android/server/biometrics/sensors/face/aidl/AidlConversionUtils;->toFrameworkAcquiredInfo(B)I
 HPLcom/android/server/biometrics/sensors/face/aidl/AidlConversionUtils;->toFrameworkAuthenticationFrame(Landroid/hardware/biometrics/face/AuthenticationFrame;)Landroid/hardware/face/FaceAuthenticationFrame;
 HPLcom/android/server/biometrics/sensors/face/aidl/AidlConversionUtils;->toFrameworkBaseFrame(Landroid/hardware/biometrics/face/BaseFrame;)Landroid/hardware/face/FaceDataFrame;
 PLcom/android/server/biometrics/sensors/face/aidl/AidlConversionUtils;->toFrameworkCell(Landroid/hardware/biometrics/face/Cell;)Landroid/hardware/face/FaceEnrollCell;
-PLcom/android/server/biometrics/sensors/face/aidl/AidlConversionUtils;->toFrameworkEnrollmentFrame(Landroid/hardware/biometrics/face/EnrollmentFrame;)Landroid/hardware/face/FaceEnrollFrame;
+HPLcom/android/server/biometrics/sensors/face/aidl/AidlConversionUtils;->toFrameworkEnrollmentFrame(Landroid/hardware/biometrics/face/EnrollmentFrame;)Landroid/hardware/face/FaceEnrollFrame;
 PLcom/android/server/biometrics/sensors/face/aidl/AidlConversionUtils;->toFrameworkEnrollmentStage(I)I
 PLcom/android/server/biometrics/sensors/face/aidl/AidlConversionUtils;->toFrameworkError(B)I
 PLcom/android/server/biometrics/sensors/face/aidl/AidlNativeHandleUtils;->close(Landroid/hardware/common/NativeHandle;)V
@@ -15775,7 +16632,7 @@
 HPLcom/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient;->doAuthenticate()Landroid/hardware/biometrics/common/ICancellationSignal;
 HPLcom/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient;->getAcquireIgnorelist()[I
 PLcom/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient;->handleLifecycleAfterAuth(Z)V
-PLcom/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient;->onAuthenticated(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;ZLjava/util/ArrayList;)V
+HPLcom/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient;->onAuthenticated(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;ZLjava/util/ArrayList;)V
 HPLcom/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient;->onAuthenticationFrame(Landroid/hardware/face/FaceAuthenticationFrame;)V+]Landroid/hardware/face/FaceAuthenticationFrame;Landroid/hardware/face/FaceAuthenticationFrame;]Lcom/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient;Lcom/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient;]Lcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;Lcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;]Lcom/android/server/biometrics/sensors/AcquisitionClient;Lcom/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient;]Landroid/hardware/face/FaceDataFrame;Landroid/hardware/face/FaceDataFrame;]Lcom/android/server/biometrics/sensors/BaseClientMonitor;Lcom/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient;
 HPLcom/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient;->onError(II)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient;->onLockoutPermanent()V
@@ -15802,11 +16659,12 @@
 PLcom/android/server/biometrics/sensors/face/aidl/FaceEnrollClient;->doEnroll([B)Landroid/hardware/biometrics/common/ICancellationSignal;
 PLcom/android/server/biometrics/sensors/face/aidl/FaceEnrollClient;->hasReachedEnrollmentLimit()Z
 PLcom/android/server/biometrics/sensors/face/aidl/FaceEnrollClient;->obtainSurfaceHandlesIfNeeded()V
-PLcom/android/server/biometrics/sensors/face/aidl/FaceEnrollClient;->onEnrollmentFrame(Landroid/hardware/face/FaceEnrollFrame;)V
+HPLcom/android/server/biometrics/sensors/face/aidl/FaceEnrollClient;->onEnrollmentFrame(Landroid/hardware/face/FaceEnrollFrame;)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceEnrollClient;->releaseSurfaceHandlesIfNeeded()V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceEnrollClient;->shouldSendAcquiredMessage(II)Z
 PLcom/android/server/biometrics/sensors/face/aidl/FaceEnrollClient;->start(Lcom/android/server/biometrics/sensors/ClientMonitorCallback;)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceEnrollClient;->startHalOperation()V
+PLcom/android/server/biometrics/sensors/face/aidl/FaceEnrollClient;->stopHalOperation()V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceEnrollClient;->wrapCallbackForStart(Lcom/android/server/biometrics/sensors/ClientMonitorCallback;)Lcom/android/server/biometrics/sensors/ClientMonitorCallback;
 PLcom/android/server/biometrics/sensors/face/aidl/FaceGenerateChallengeClient;-><init>(Landroid/content/Context;Ljava/util/function/Supplier;Landroid/os/IBinder;Lcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;ILjava/lang/String;ILcom/android/server/biometrics/log/BiometricLogger;Lcom/android/server/biometrics/log/BiometricContext;)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceGenerateChallengeClient;->onChallengeGenerated(IIJ)V
@@ -15830,10 +16688,14 @@
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider$$ExternalSyntheticLambda10;-><init>(Lcom/android/server/biometrics/sensors/face/aidl/FaceProvider;ILandroid/os/IBinder;J)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider$$ExternalSyntheticLambda10;->run()V
+PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider$$ExternalSyntheticLambda11;-><init>(Lcom/android/server/biometrics/sensors/face/aidl/FaceProvider;ILandroid/os/IBinder;J)V
+PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider$$ExternalSyntheticLambda11;->run()V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider$$ExternalSyntheticLambda12;-><init>(Lcom/android/server/biometrics/sensors/face/aidl/FaceProvider;ILandroid/os/IBinder;Landroid/hardware/face/IFaceServiceReceiver;ILjava/lang/String;)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider$$ExternalSyntheticLambda12;->run()V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider$$ExternalSyntheticLambda13;-><init>(Lcom/android/server/biometrics/sensors/face/aidl/FaceProvider;II[B)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider$$ExternalSyntheticLambda13;->run()V
+PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider$$ExternalSyntheticLambda14;-><init>(Lcom/android/server/biometrics/sensors/face/aidl/FaceProvider;IILandroid/os/IBinder;Landroid/hardware/face/IFaceServiceReceiver;IZ[B)V
+PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider$$ExternalSyntheticLambda14;->run()V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider$$ExternalSyntheticLambda15;-><init>(Lcom/android/server/biometrics/sensors/face/aidl/FaceProvider;II)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider$$ExternalSyntheticLambda15;->run()V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider$$ExternalSyntheticLambda16;-><init>(Lcom/android/server/biometrics/sensors/face/aidl/FaceProvider;ILandroid/os/IBinder;Landroid/hardware/face/IFaceServiceReceiver;[IILjava/lang/String;)V
@@ -15859,6 +16721,7 @@
 HSPLcom/android/server/biometrics/sensors/face/aidl/FaceProvider$BiometricTaskStackListener;-><init>(Lcom/android/server/biometrics/sensors/face/aidl/FaceProvider;)V
 HSPLcom/android/server/biometrics/sensors/face/aidl/FaceProvider$BiometricTaskStackListener;-><init>(Lcom/android/server/biometrics/sensors/face/aidl/FaceProvider;Lcom/android/server/biometrics/sensors/face/aidl/FaceProvider$BiometricTaskStackListener-IA;)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->$r8$lambda$-eylz1OjHV6m7gYJu81jWukLVvU(Lcom/android/server/biometrics/sensors/face/aidl/FaceProvider;ILandroid/os/IBinder;Landroid/hardware/face/IFaceServiceReceiver;[IILjava/lang/String;)V
+PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->$r8$lambda$206G5-EQ7Up49DiIxGlkwk1lhik(Lcom/android/server/biometrics/sensors/face/aidl/FaceProvider;ILandroid/os/IBinder;J)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->$r8$lambda$8murs8JiDfCQvX3kxIONQSmcJUk(Lcom/android/server/biometrics/sensors/face/aidl/FaceProvider;ILandroid/os/IBinder;J)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->$r8$lambda$BHgpE8h9cCqnUGlCFFfYwG9_5N4(Lcom/android/server/biometrics/sensors/face/aidl/FaceProvider;ILandroid/os/IBinder;Landroid/hardware/face/IFaceServiceReceiver;I[BLjava/lang/String;J[ILandroid/view/Surface;Z)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->$r8$lambda$Bj-r0Bmcl4JJpELORKph8Ni7qKM(Lcom/android/server/biometrics/sensors/face/aidl/FaceProvider;ILandroid/os/IBinder;J)V
@@ -15867,6 +16730,7 @@
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->$r8$lambda$JW9lZ5nyboc0NcaJQGQKR3rkI5k(Lcom/android/server/biometrics/sensors/face/aidl/FaceProvider;IILandroid/os/IBinder;Lcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->$r8$lambda$O7nkr8EIrpUsSyzIhMIlkDNcKMA(Lcom/android/server/biometrics/sensors/face/aidl/FaceProvider;ILandroid/os/IBinder;Landroid/hardware/face/IFaceServiceReceiver;ILjava/lang/String;)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->$r8$lambda$WmBR0uQAIFY6RkY6Zxz6cKp4dp4(Lcom/android/server/biometrics/sensors/face/aidl/FaceProvider;ILandroid/os/IBinder;JLcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;ILjava/lang/String;I)V
+PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->$r8$lambda$XMpg4Gzta1Lw0EAFhmxV_QLXstA(Lcom/android/server/biometrics/sensors/face/aidl/FaceProvider;IILandroid/os/IBinder;Landroid/hardware/face/IFaceServiceReceiver;IZ[B)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->$r8$lambda$gg1nFa2GwefiYD_FG1ZYKap9pzA(Lcom/android/server/biometrics/sensors/face/aidl/FaceProvider;)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->$r8$lambda$hOTp41xO8oKEfx7IFhOgpGK-9fg(Lcom/android/server/biometrics/sensors/face/aidl/FaceProvider;ILandroid/os/IBinder;JLcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;IJZLjava/lang/String;IIZZ)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->$r8$lambda$ncR4O-TyOSaSOce1Q2GUogGMlrE(Lcom/android/server/biometrics/sensors/face/aidl/FaceProvider;II)V
@@ -15876,21 +16740,24 @@
 HSPLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;-><init>(Landroid/content/Context;[Landroid/hardware/biometrics/face/SensorProps;Ljava/lang/String;Lcom/android/server/biometrics/sensors/LockoutResetDispatcher;Lcom/android/server/biometrics/log/BiometricContext;)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->binderDied()V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->cancelAuthentication(ILandroid/os/IBinder;J)V
+PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->cancelEnrollment(ILandroid/os/IBinder;J)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->cancelFaceDetect(ILandroid/os/IBinder;J)V
-HPLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->containsSensor(I)Z
+HSPLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->containsSensor(I)Z
 HPLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->createLogger(II)Lcom/android/server/biometrics/log/BiometricLogger;
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->dumpHal(ILjava/io/FileDescriptor;[Ljava/lang/String;)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->dumpInternal(ILjava/io/PrintWriter;)V
 HPLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->getAuthenticatorId(II)J
-HPLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->getEnrolledFaces(II)Ljava/util/List;
+HSPLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->getEnrolledFaces(II)Ljava/util/List;
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->getHalInstance()Landroid/hardware/biometrics/face/IFace;
+PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->getLockoutModeForUser(II)I
 HSPLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->getSensorProperties()Ljava/util/List;
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->getSensorProperties(I)Landroid/hardware/face/FaceSensorPropertiesInternal;
 HSPLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->getTag()Ljava/lang/String;
-HPLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->hasHalInstance()Z
-HPLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->isHardwareDetected(I)Z
+HSPLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->hasHalInstance()Z
+HSPLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->isHardwareDetected(I)Z
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->lambda$binderDied$17()V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->lambda$cancelAuthentication$10(ILandroid/os/IBinder;J)V
+PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->lambda$cancelEnrollment$6(ILandroid/os/IBinder;J)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->lambda$cancelFaceDetect$8(ILandroid/os/IBinder;J)V
 HPLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->lambda$scheduleAuthenticate$9(ILandroid/os/IBinder;JLcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;IJZLjava/lang/String;IIZZ)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->lambda$scheduleEnroll$5(ILandroid/os/IBinder;Landroid/hardware/face/IFaceServiceReceiver;I[BLjava/lang/String;J[ILandroid/view/Surface;Z)V
@@ -15903,6 +16770,7 @@
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->lambda$scheduleRemoveSpecifiedIds$11(ILandroid/os/IBinder;Landroid/hardware/face/IFaceServiceReceiver;[IILjava/lang/String;)V
 HPLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->lambda$scheduleResetLockout$12(II[B)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->lambda$scheduleRevokeChallenge$4(ILandroid/os/IBinder;ILjava/lang/String;J)V
+PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->lambda$scheduleSetFeature$13(IILandroid/os/IBinder;Landroid/hardware/face/IFaceServiceReceiver;IZ[B)V
 HPLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->scheduleAuthenticate(ILandroid/os/IBinder;JIILcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;Ljava/lang/String;JZIZZ)V
 HPLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->scheduleAuthenticate(ILandroid/os/IBinder;JIILcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;Ljava/lang/String;ZIZZ)J
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->scheduleEnroll(ILandroid/os/IBinder;[BILandroid/hardware/face/IFaceServiceReceiver;Ljava/lang/String;[ILandroid/view/Surface;Z)J
@@ -15919,18 +16787,24 @@
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->scheduleRemoveSpecifiedIds(ILandroid/os/IBinder;[IILandroid/hardware/face/IFaceServiceReceiver;Ljava/lang/String;)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->scheduleResetLockout(II[B)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->scheduleRevokeChallenge(IILandroid/os/IBinder;Ljava/lang/String;J)V
+PLcom/android/server/biometrics/sensors/face/aidl/FaceProvider;->scheduleSetFeature(ILandroid/os/IBinder;IIZ[BLandroid/hardware/face/IFaceServiceReceiver;Ljava/lang/String;)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceRemovalClient;-><init>(Landroid/content/Context;Ljava/util/function/Supplier;Landroid/os/IBinder;Lcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;[IILjava/lang/String;Lcom/android/server/biometrics/sensors/BiometricUtils;ILcom/android/server/biometrics/log/BiometricLogger;Lcom/android/server/biometrics/log/BiometricContext;Ljava/util/Map;)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceRemovalClient;->startHalOperation()V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceResetLockoutClient;-><init>(Landroid/content/Context;Ljava/util/function/Supplier;ILjava/lang/String;ILcom/android/server/biometrics/log/BiometricLogger;Lcom/android/server/biometrics/log/BiometricContext;[BLcom/android/server/biometrics/sensors/LockoutCache;Lcom/android/server/biometrics/sensors/LockoutResetDispatcher;)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceResetLockoutClient;->getProtoEnum()I
 PLcom/android/server/biometrics/sensors/face/aidl/FaceResetLockoutClient;->interruptsPrecedingClients()Z
-PLcom/android/server/biometrics/sensors/face/aidl/FaceResetLockoutClient;->onLockoutCleared()V
+HPLcom/android/server/biometrics/sensors/face/aidl/FaceResetLockoutClient;->onLockoutCleared()V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceResetLockoutClient;->resetLocalLockoutStateToNone(IILcom/android/server/biometrics/sensors/LockoutCache;Lcom/android/server/biometrics/sensors/LockoutResetDispatcher;)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceResetLockoutClient;->start(Lcom/android/server/biometrics/sensors/ClientMonitorCallback;)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceResetLockoutClient;->startHalOperation()V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceRevokeChallengeClient;-><init>(Landroid/content/Context;Ljava/util/function/Supplier;Landroid/os/IBinder;ILjava/lang/String;ILcom/android/server/biometrics/log/BiometricLogger;Lcom/android/server/biometrics/log/BiometricContext;J)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceRevokeChallengeClient;->onChallengeRevoked(IIJ)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceRevokeChallengeClient;->startHalOperation()V
+PLcom/android/server/biometrics/sensors/face/aidl/FaceSetFeatureClient;-><init>(Landroid/content/Context;Ljava/util/function/Supplier;Landroid/os/IBinder;Lcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;ILjava/lang/String;ILcom/android/server/biometrics/log/BiometricLogger;Lcom/android/server/biometrics/log/BiometricContext;IZ[B)V
+PLcom/android/server/biometrics/sensors/face/aidl/FaceSetFeatureClient;->getProtoEnum()I
+PLcom/android/server/biometrics/sensors/face/aidl/FaceSetFeatureClient;->onFeatureSet(Z)V
+PLcom/android/server/biometrics/sensors/face/aidl/FaceSetFeatureClient;->start(Lcom/android/server/biometrics/sensors/ClientMonitorCallback;)V
+PLcom/android/server/biometrics/sensors/face/aidl/FaceSetFeatureClient;->startHalOperation()V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceStartUserClient;-><init>(Landroid/content/Context;Ljava/util/function/Supplier;Landroid/os/IBinder;IILcom/android/server/biometrics/log/BiometricLogger;Lcom/android/server/biometrics/log/BiometricContext;Landroid/hardware/biometrics/face/ISessionCallback;Lcom/android/server/biometrics/sensors/StartUserClient$UserStartedCallback;)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceStartUserClient;->start(Lcom/android/server/biometrics/sensors/ClientMonitorCallback;)V
 PLcom/android/server/biometrics/sensors/face/aidl/FaceStartUserClient;->startHalOperation()V
@@ -15942,6 +16816,7 @@
 HSPLcom/android/server/biometrics/sensors/face/aidl/Sensor$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/biometrics/sensors/face/aidl/Sensor;)V
 HPLcom/android/server/biometrics/sensors/face/aidl/Sensor$$ExternalSyntheticLambda1;->get()Ljava/lang/Object;
 HSPLcom/android/server/biometrics/sensors/face/aidl/Sensor$1;-><init>(Lcom/android/server/biometrics/sensors/face/aidl/Sensor;)V
+PLcom/android/server/biometrics/sensors/face/aidl/Sensor$1;->onUserSwitching(I)V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$2$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/biometrics/sensors/face/aidl/Sensor$2;)V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$2$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/biometrics/sensors/face/aidl/Sensor$2;Lcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;ILcom/android/server/biometrics/sensors/face/aidl/FaceProvider;)V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$2$$ExternalSyntheticLambda1;->onUserStarted(ILjava/lang/Object;I)V
@@ -15958,6 +16833,8 @@
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$2;->lambda$getStopUserClient$0()V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;ILandroid/hardware/keymaster/HardwareAuthToken;)V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback$$ExternalSyntheticLambda0;->run()V
+PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback$$ExternalSyntheticLambda10;-><init>(Lcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;)V
+PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback$$ExternalSyntheticLambda10;->run()V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback$$ExternalSyntheticLambda11;-><init>(Lcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;)V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback$$ExternalSyntheticLambda11;->run()V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback$$ExternalSyntheticLambda13;-><init>(Lcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;J)V
@@ -15984,7 +16861,7 @@
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback$$ExternalSyntheticLambda5;->run()V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback$$ExternalSyntheticLambda7;-><init>(Lcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;[I)V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback$$ExternalSyntheticLambda7;->run()V
-PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;BI)V
+HPLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;BI)V
 HPLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback$$ExternalSyntheticLambda8;->run()V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback$$ExternalSyntheticLambda9;-><init>(Lcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;J)V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback$$ExternalSyntheticLambda9;->run()V
@@ -16001,6 +16878,7 @@
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->$r8$lambda$q0WsqnyDhInFmPHTSU_VTFT-aGU(Lcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;[B)V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->$r8$lambda$uqBxCqg0HeZLOrOu6UaLOEbe68c(Lcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;BI)V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->$r8$lambda$v7Mkl6Fi5BBzFuHvYfOhJmrFYUg(Lcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;J)V
+PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->$r8$lambda$vVoZXIPatBsYrc9mhdH4SLMF1ys(Lcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;)V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->$r8$lambda$w7WuZONZp-VSb0s1M3jeK_ywS9g(Lcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;)V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->$r8$lambda$yTMiDlNoZmfHdVj6FVV0MbGJGb4(Lcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;ILandroid/hardware/keymaster/HardwareAuthToken;)V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;-><init>(Landroid/content/Context;Landroid/os/Handler;Ljava/lang/String;Lcom/android/server/biometrics/sensors/UserAwareBiometricScheduler;IILcom/android/server/biometrics/sensors/LockoutCache;Lcom/android/server/biometrics/sensors/LockoutResetDispatcher;Lcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback$Callback;)V
@@ -16010,14 +16888,15 @@
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->lambda$onAuthenticatorIdRetrieved$16(J)V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->lambda$onChallengeGenerated$0(J)V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->lambda$onChallengeRevoked$1(J)V
-PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->lambda$onEnrollmentFrame$3(Landroid/hardware/biometrics/face/EnrollmentFrame;)V
-PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->lambda$onEnrollmentProgress$5(II)V
+HPLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->lambda$onEnrollmentFrame$3(Landroid/hardware/biometrics/face/EnrollmentFrame;)V
+HPLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->lambda$onEnrollmentProgress$5(II)V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->lambda$onEnrollmentsEnumerated$12([I)V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->lambda$onEnrollmentsRemoved$15([I)V
 HPLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->lambda$onError$4(BI)V
+PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->lambda$onFeatureSet$14()V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->lambda$onFeaturesRetrieved$13([B)V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->lambda$onInteractionDetected$11()V
-PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->lambda$onLockoutCleared$10()V
+HPLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->lambda$onLockoutCleared$10()V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->lambda$onLockoutPermanent$9()V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->onAuthenticationFailed()V
 HPLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->onAuthenticationFrame(Landroid/hardware/biometrics/face/AuthenticationFrame;)V
@@ -16029,7 +16908,8 @@
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->onEnrollmentProgress(II)V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->onEnrollmentsEnumerated([I)V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->onEnrollmentsRemoved([I)V
-PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->onError(BI)V
+HPLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->onError(BI)V
+PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->onFeatureSet(B)V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->onFeaturesRetrieved([B)V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->onInteractionDetected()V
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor$HalSessionCallback;->onLockoutCleared()V
@@ -16041,6 +16921,7 @@
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor;->-$$Nest$fgetmHandler(Lcom/android/server/biometrics/sensors/face/aidl/Sensor;)Landroid/os/Handler;
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor;->-$$Nest$fgetmLazySession(Lcom/android/server/biometrics/sensors/face/aidl/Sensor;)Ljava/util/function/Supplier;
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor;->-$$Nest$fgetmLockoutCache(Lcom/android/server/biometrics/sensors/face/aidl/Sensor;)Lcom/android/server/biometrics/sensors/LockoutCache;
+PLcom/android/server/biometrics/sensors/face/aidl/Sensor;->-$$Nest$fgetmProvider(Lcom/android/server/biometrics/sensors/face/aidl/Sensor;)Lcom/android/server/biometrics/sensors/face/aidl/FaceProvider;
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor;->-$$Nest$fgetmScheduler(Lcom/android/server/biometrics/sensors/face/aidl/Sensor;)Lcom/android/server/biometrics/sensors/UserAwareBiometricScheduler;
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor;->-$$Nest$fgetmSensorProperties(Lcom/android/server/biometrics/sensors/face/aidl/Sensor;)Landroid/hardware/face/FaceSensorPropertiesInternal;
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor;->-$$Nest$fgetmTag(Lcom/android/server/biometrics/sensors/face/aidl/Sensor;)Ljava/lang/String;
@@ -16055,7 +16936,7 @@
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor;->lambda$new$0()I
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor;->lambda$new$1()Lcom/android/server/biometrics/sensors/face/aidl/AidlSession;
 PLcom/android/server/biometrics/sensors/face/aidl/Sensor;->onBinderDied()V
-PLcom/android/server/biometrics/sensors/face/hidl/Face10$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/biometrics/sensors/face/hidl/Face10;)V
+HSPLcom/android/server/biometrics/sensors/face/hidl/Face10$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/biometrics/sensors/face/hidl/Face10;)V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10$$ExternalSyntheticLambda0;->get()Ljava/lang/Object;
 PLcom/android/server/biometrics/sensors/face/hidl/Face10$$ExternalSyntheticLambda10;-><init>(Lcom/android/server/biometrics/sensors/face/hidl/Face10;ILandroid/os/IBinder;JLcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;JZLjava/lang/String;IIZZ)V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10$$ExternalSyntheticLambda10;->run()V
@@ -16067,7 +16948,7 @@
 PLcom/android/server/biometrics/sensors/face/hidl/Face10$$ExternalSyntheticLambda16;->run()V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10$$ExternalSyntheticLambda17;-><init>(J)V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10$$ExternalSyntheticLambda17;->test(Ljava/lang/Object;)Z
-PLcom/android/server/biometrics/sensors/face/hidl/Face10$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/biometrics/sensors/face/hidl/Face10;)V
+HSPLcom/android/server/biometrics/sensors/face/hidl/Face10$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/biometrics/sensors/face/hidl/Face10;)V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/biometrics/sensors/face/hidl/Face10;II[B)V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10$$ExternalSyntheticLambda4;->run()V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/biometrics/sensors/face/hidl/Face10;Landroid/os/IBinder;J)V
@@ -16078,7 +16959,7 @@
 PLcom/android/server/biometrics/sensors/face/hidl/Face10$$ExternalSyntheticLambda7;->run()V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10$$ExternalSyntheticLambda9;-><init>(Lcom/android/server/biometrics/sensors/face/hidl/Face10;I)V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10$$ExternalSyntheticLambda9;->run()V
-PLcom/android/server/biometrics/sensors/face/hidl/Face10$1;-><init>(Lcom/android/server/biometrics/sensors/face/hidl/Face10;)V
+HSPLcom/android/server/biometrics/sensors/face/hidl/Face10$1;-><init>(Lcom/android/server/biometrics/sensors/face/hidl/Face10;)V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10$2;-><init>(Lcom/android/server/biometrics/sensors/face/hidl/Face10;Lcom/android/server/biometrics/sensors/face/hidl/FaceGenerateChallengeClient;)V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10$2;->onClientStarted(Lcom/android/server/biometrics/sensors/BaseClientMonitor;)V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10$3;-><init>(Lcom/android/server/biometrics/sensors/face/hidl/Face10;Lcom/android/server/biometrics/sensors/face/hidl/FaceRevokeChallengeClient;)V
@@ -16102,8 +16983,8 @@
 PLcom/android/server/biometrics/sensors/face/hidl/Face10$HalResultController;->$r8$lambda$GSOgENOdXjAnGH5O0VVxfjq3JDc(Lcom/android/server/biometrics/sensors/face/hidl/Face10$HalResultController;II)V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10$HalResultController;->$r8$lambda$UdVRon1tSYFbDb3ZfGa4oBK6kXw(Lcom/android/server/biometrics/sensors/face/hidl/Face10$HalResultController;II)V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10$HalResultController;->$r8$lambda$swDWQpfkPkGaBubtgo1ShGUGu4Y(Lcom/android/server/biometrics/sensors/face/hidl/Face10$HalResultController;IJLjava/util/ArrayList;)V
-PLcom/android/server/biometrics/sensors/face/hidl/Face10$HalResultController;-><init>(ILandroid/content/Context;Landroid/os/Handler;Lcom/android/server/biometrics/sensors/BiometricScheduler;Lcom/android/server/biometrics/sensors/face/LockoutHalImpl;Lcom/android/server/biometrics/sensors/LockoutResetDispatcher;)V
-PLcom/android/server/biometrics/sensors/face/hidl/Face10$HalResultController;->lambda$onAcquired$2(II)V
+HSPLcom/android/server/biometrics/sensors/face/hidl/Face10$HalResultController;-><init>(ILandroid/content/Context;Landroid/os/Handler;Lcom/android/server/biometrics/sensors/BiometricScheduler;Lcom/android/server/biometrics/sensors/face/LockoutHalImpl;Lcom/android/server/biometrics/sensors/LockoutResetDispatcher;)V
+HPLcom/android/server/biometrics/sensors/face/hidl/Face10$HalResultController;->lambda$onAcquired$2(II)V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10$HalResultController;->lambda$onAuthenticated$1(IJLjava/util/ArrayList;)V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10$HalResultController;->lambda$onEnumerate$5(Ljava/util/ArrayList;J)V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10$HalResultController;->lambda$onError$3(II)V
@@ -16113,7 +16994,7 @@
 PLcom/android/server/biometrics/sensors/face/hidl/Face10$HalResultController;->onEnumerate(JLjava/util/ArrayList;I)V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10$HalResultController;->onError(JIII)V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10$HalResultController;->onLockoutChanged(J)V
-PLcom/android/server/biometrics/sensors/face/hidl/Face10$HalResultController;->setCallback(Lcom/android/server/biometrics/sensors/face/hidl/Face10$HalResultController$Callback;)V
+HSPLcom/android/server/biometrics/sensors/face/hidl/Face10$HalResultController;->setCallback(Lcom/android/server/biometrics/sensors/face/hidl/Face10$HalResultController$Callback;)V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10;->$r8$lambda$4v9WWpXQPvVLVhBYwGTnzxLeO-g(Lcom/android/server/biometrics/sensors/face/hidl/Face10;ILandroid/os/IBinder;JLcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;JZLjava/lang/String;IIZZ)V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10;->$r8$lambda$83S9XXfkkDkTU9WaW76FMTCYIgs(Lcom/android/server/biometrics/sensors/face/hidl/Face10;II[B)V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10;->$r8$lambda$9yGgbHE4f606d89u8kfZPmGZMxc(Lcom/android/server/biometrics/sensors/face/hidl/Face10;I)V
@@ -16127,17 +17008,18 @@
 PLcom/android/server/biometrics/sensors/face/hidl/Face10;->$r8$lambda$luBdUCN1nIdaWZtyFV5VpuCJy7g(Lcom/android/server/biometrics/sensors/face/hidl/Face10;IILandroid/os/IBinder;Lcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;Ljava/lang/String;I)V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10;->-$$Nest$fgetmContext(Lcom/android/server/biometrics/sensors/face/hidl/Face10;)Landroid/content/Context;
 PLcom/android/server/biometrics/sensors/face/hidl/Face10;->-$$Nest$fputmCurrentUserId(Lcom/android/server/biometrics/sensors/face/hidl/Face10;I)V
-PLcom/android/server/biometrics/sensors/face/hidl/Face10;-><clinit>()V
-PLcom/android/server/biometrics/sensors/face/hidl/Face10;-><init>(Landroid/content/Context;Landroid/hardware/face/FaceSensorPropertiesInternal;Lcom/android/server/biometrics/sensors/LockoutResetDispatcher;Landroid/os/Handler;Lcom/android/server/biometrics/sensors/BiometricScheduler;Lcom/android/server/biometrics/log/BiometricContext;)V
+HSPLcom/android/server/biometrics/sensors/face/hidl/Face10;-><clinit>()V
+HSPLcom/android/server/biometrics/sensors/face/hidl/Face10;-><init>(Landroid/content/Context;Landroid/hardware/face/FaceSensorPropertiesInternal;Lcom/android/server/biometrics/sensors/LockoutResetDispatcher;Landroid/os/Handler;Lcom/android/server/biometrics/sensors/BiometricScheduler;Lcom/android/server/biometrics/log/BiometricContext;)V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10;->cancelAuthentication(ILandroid/os/IBinder;J)V
 HPLcom/android/server/biometrics/sensors/face/hidl/Face10;->containsSensor(I)Z
 PLcom/android/server/biometrics/sensors/face/hidl/Face10;->createLogger(II)Lcom/android/server/biometrics/log/BiometricLogger;
 PLcom/android/server/biometrics/sensors/face/hidl/Face10;->decrementChallengeCount()I
-PLcom/android/server/biometrics/sensors/face/hidl/Face10;->getAuthenticatorId(II)J
+PLcom/android/server/biometrics/sensors/face/hidl/Face10;->dumpInternal(ILjava/io/PrintWriter;)V
+HPLcom/android/server/biometrics/sensors/face/hidl/Face10;->getAuthenticatorId(II)J
 HPLcom/android/server/biometrics/sensors/face/hidl/Face10;->getDaemon()Landroid/hardware/biometrics/face/V1_0/IBiometricsFace;
 HPLcom/android/server/biometrics/sensors/face/hidl/Face10;->getEnrolledFaces(II)Ljava/util/List;
 PLcom/android/server/biometrics/sensors/face/hidl/Face10;->getLockoutModeForUser(II)I
-HPLcom/android/server/biometrics/sensors/face/hidl/Face10;->getSensorProperties()Ljava/util/List;
+HSPLcom/android/server/biometrics/sensors/face/hidl/Face10;->getSensorProperties()Ljava/util/List;
 PLcom/android/server/biometrics/sensors/face/hidl/Face10;->incrementChallengeCount()V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10;->isGeneratedChallengeCacheValid()Z
 HPLcom/android/server/biometrics/sensors/face/hidl/Face10;->isHardwareDetected(I)Z
@@ -16151,7 +17033,7 @@
 PLcom/android/server/biometrics/sensors/face/hidl/Face10;->lambda$scheduleResetLockout$11(II[B)V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10;->lambda$scheduleRevokeChallenge$4(Landroid/os/IBinder;ILjava/lang/String;)V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10;->lambda$startPreparedClient$15(I)V
-PLcom/android/server/biometrics/sensors/face/hidl/Face10;->newInstance(Landroid/content/Context;Landroid/hardware/face/FaceSensorPropertiesInternal;Lcom/android/server/biometrics/sensors/LockoutResetDispatcher;)Lcom/android/server/biometrics/sensors/face/hidl/Face10;
+HSPLcom/android/server/biometrics/sensors/face/hidl/Face10;->newInstance(Landroid/content/Context;Landroid/hardware/face/FaceSensorPropertiesInternal;Lcom/android/server/biometrics/sensors/LockoutResetDispatcher;)Lcom/android/server/biometrics/sensors/face/hidl/Face10;
 PLcom/android/server/biometrics/sensors/face/hidl/Face10;->scheduleAuthenticate(ILandroid/os/IBinder;JIILcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;Ljava/lang/String;JZIZZ)V
 PLcom/android/server/biometrics/sensors/face/hidl/Face10;->scheduleAuthenticate(ILandroid/os/IBinder;JIILcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;Ljava/lang/String;ZIZZ)J
 PLcom/android/server/biometrics/sensors/face/hidl/Face10;->scheduleGenerateChallenge(IILandroid/os/IBinder;Landroid/hardware/face/IFaceServiceReceiver;Ljava/lang/String;)V
@@ -16201,15 +17083,15 @@
 PLcom/android/server/biometrics/sensors/face/hidl/FaceUpdateActiveUserClient;->startHalOperation()V
 HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintAuthenticator;-><init>(Landroid/hardware/fingerprint/IFingerprintService;I)V
 PLcom/android/server/biometrics/sensors/fingerprint/FingerprintAuthenticator;->cancelAuthenticationFromService(Landroid/os/IBinder;Ljava/lang/String;J)V
-HPLcom/android/server/biometrics/sensors/fingerprint/FingerprintAuthenticator;->getAuthenticatorId(I)J
+HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintAuthenticator;->getAuthenticatorId(I)J
 HPLcom/android/server/biometrics/sensors/fingerprint/FingerprintAuthenticator;->getLockoutModeForUser(I)I
-HPLcom/android/server/biometrics/sensors/fingerprint/FingerprintAuthenticator;->hasEnrolledTemplates(ILjava/lang/String;)Z
+HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintAuthenticator;->hasEnrolledTemplates(ILjava/lang/String;)Z
 PLcom/android/server/biometrics/sensors/fingerprint/FingerprintAuthenticator;->invalidateAuthenticatorId(ILandroid/hardware/biometrics/IInvalidationCallback;)V
 HPLcom/android/server/biometrics/sensors/fingerprint/FingerprintAuthenticator;->isHardwareDetected(Ljava/lang/String;)Z
 PLcom/android/server/biometrics/sensors/fingerprint/FingerprintAuthenticator;->prepareForAuthentication(ZLandroid/os/IBinder;JILandroid/hardware/biometrics/IBiometricSensorReceiver;Ljava/lang/String;JIZ)V
 PLcom/android/server/biometrics/sensors/fingerprint/FingerprintAuthenticator;->startPreparedClient(I)V
 HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/biometrics/sensors/fingerprint/FingerprintService;Landroid/hardware/biometrics/IBiometricStateListener;Landroid/content/pm/UserInfo;Landroid/hardware/fingerprint/FingerprintSensorPropertiesInternal;Z)V
-PLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$$ExternalSyntheticLambda0;->run()V
+HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;Ljava/util/List;)V
 HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper$$ExternalSyntheticLambda1;-><init>(Landroid/hardware/fingerprint/IFingerprintServiceReceiver;)V
@@ -16223,11 +17105,12 @@
 HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;-><init>(Lcom/android/server/biometrics/sensors/fingerprint/FingerprintService;)V
 HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;-><init>(Lcom/android/server/biometrics/sensors/fingerprint/FingerprintService;Lcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper-IA;)V
 HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->addAidlProviders()V
-PLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->addAuthenticatorsRegisteredCallback(Landroid/hardware/fingerprint/IFingerprintAuthenticatorsRegisteredCallback;)V
+HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->addAuthenticatorsRegisteredCallback(Landroid/hardware/fingerprint/IFingerprintAuthenticatorsRegisteredCallback;)V
 PLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->addClientActiveCallback(Landroid/hardware/fingerprint/IFingerprintClientActiveCallback;)V
 HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->addHidlProviders(Ljava/util/List;)V
 HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->addLockoutResetCallback(Landroid/hardware/biometrics/IBiometricServiceLockoutResetCallback;Ljava/lang/String;)V
 HPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->authenticate(Landroid/os/IBinder;JIILandroid/hardware/fingerprint/IFingerprintServiceReceiver;Ljava/lang/String;Ljava/lang/String;Z)J
+PLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->authenticateWithPrompt(JLandroid/hardware/fingerprint/FingerprintSensorPropertiesInternal;IILandroid/hardware/fingerprint/IFingerprintServiceReceiver;Ljava/lang/String;Z)J
 HPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->cancelAuthentication(Landroid/os/IBinder;Ljava/lang/String;Ljava/lang/String;J)V
 PLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->cancelAuthenticationFromService(ILandroid/os/IBinder;Ljava/lang/String;J)V
 PLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->cancelEnrollment(Landroid/os/IBinder;J)V
@@ -16236,11 +17119,11 @@
 PLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->enroll(Landroid/os/IBinder;[BILandroid/hardware/fingerprint/IFingerprintServiceReceiver;Ljava/lang/String;I)J
 PLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->generateChallenge(Landroid/os/IBinder;IILandroid/hardware/fingerprint/IFingerprintServiceReceiver;Ljava/lang/String;)V
-HPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->getAuthenticatorId(II)J
+HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->getAuthenticatorId(II)J
 PLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->getEnrolledFingerprints(ILjava/lang/String;Ljava/lang/String;)Ljava/util/List;
 HPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->getLockoutModeForUser(II)I
 HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->getSensorPropertiesInternal(Ljava/lang/String;)Ljava/util/List;
-HPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->hasEnrolledFingerprints(IILjava/lang/String;)Z
+HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->hasEnrolledFingerprints(IILjava/lang/String;)Z
 HPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->hasEnrolledFingerprintsDeprecated(ILjava/lang/String;Ljava/lang/String;)Z
 PLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->invalidateAuthenticatorId(IILandroid/hardware/biometrics/IInvalidationCallback;)V
 HPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->isHardwareDetected(ILjava/lang/String;)Z
@@ -16250,7 +17133,7 @@
 PLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->onUiReady(JI)V
 PLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->prepareForAuthentication(ILandroid/os/IBinder;JILandroid/hardware/biometrics/IBiometricSensorReceiver;Ljava/lang/String;JIZ)V
 HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->registerAuthenticators(Ljava/util/List;)V
-PLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->registerBiometricStateListener(Landroid/hardware/biometrics/IBiometricStateListener;)V
+HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->registerBiometricStateListener(Landroid/hardware/biometrics/IBiometricStateListener;)V
 PLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->remove(Landroid/os/IBinder;IILandroid/hardware/fingerprint/IFingerprintServiceReceiver;Ljava/lang/String;)V
 PLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->removeClientActiveCallback(Landroid/hardware/fingerprint/IFingerprintClientActiveCallback;)V
 PLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->rename(IILjava/lang/String;)V
@@ -16259,8 +17142,8 @@
 PLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->setSidefpsController(Landroid/hardware/fingerprint/ISidefpsController;)V
 PLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->setUdfpsOverlayController(Landroid/hardware/fingerprint/IUdfpsOverlayController;)V
 PLcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper;->startPreparedClient(II)V
-PLcom/android/server/biometrics/sensors/fingerprint/FingerprintService;->$r8$lambda$oPHXd7X5-4nyim5tjlbGQKMc9YA(Lcom/android/server/biometrics/sensors/fingerprint/FingerprintService;Landroid/hardware/biometrics/IBiometricStateListener;Landroid/content/pm/UserInfo;Landroid/hardware/fingerprint/FingerprintSensorPropertiesInternal;Z)V
-PLcom/android/server/biometrics/sensors/fingerprint/FingerprintService;->-$$Nest$fgetmAuthenticatorsRegisteredCallbacks(Lcom/android/server/biometrics/sensors/fingerprint/FingerprintService;)Landroid/os/RemoteCallbackList;
+HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService;->$r8$lambda$oPHXd7X5-4nyim5tjlbGQKMc9YA(Lcom/android/server/biometrics/sensors/fingerprint/FingerprintService;Landroid/hardware/biometrics/IBiometricStateListener;Landroid/content/pm/UserInfo;Landroid/hardware/fingerprint/FingerprintSensorPropertiesInternal;Z)V
+HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService;->-$$Nest$fgetmAuthenticatorsRegisteredCallbacks(Lcom/android/server/biometrics/sensors/fingerprint/FingerprintService;)Landroid/os/RemoteCallbackList;
 HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService;->-$$Nest$fgetmBiometricStateCallback(Lcom/android/server/biometrics/sensors/fingerprint/FingerprintService;)Lcom/android/server/biometrics/sensors/BiometricStateCallback;
 HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService;->-$$Nest$fgetmGestureAvailabilityDispatcher(Lcom/android/server/biometrics/sensors/fingerprint/FingerprintService;)Lcom/android/server/biometrics/sensors/fingerprint/GestureAvailabilityDispatcher;
 HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService;->-$$Nest$fgetmHandler(Lcom/android/server/biometrics/sensors/fingerprint/FingerprintService;)Landroid/os/Handler;
@@ -16274,7 +17157,7 @@
 HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService;->-$$Nest$mbroadcastCurrentEnrollmentState(Lcom/android/server/biometrics/sensors/fingerprint/FingerprintService;Landroid/hardware/biometrics/IBiometricStateListener;)V
 HPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService;->-$$Nest$mcanUseFingerprint(Lcom/android/server/biometrics/sensors/fingerprint/FingerprintService;Ljava/lang/String;Ljava/lang/String;ZIII)Z
 HPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService;->-$$Nest$mgetEnrolledFingerprintsDeprecated(Lcom/android/server/biometrics/sensors/fingerprint/FingerprintService;ILjava/lang/String;)Ljava/util/List;
-HPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService;->-$$Nest$mgetProviderForSensor(Lcom/android/server/biometrics/sensors/fingerprint/FingerprintService;I)Lcom/android/server/biometrics/sensors/fingerprint/ServiceProvider;
+HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService;->-$$Nest$mgetProviderForSensor(Lcom/android/server/biometrics/sensors/fingerprint/FingerprintService;I)Lcom/android/server/biometrics/sensors/fingerprint/ServiceProvider;
 HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService;->-$$Nest$mgetSensorProperties(Lcom/android/server/biometrics/sensors/fingerprint/FingerprintService;)Ljava/util/List;
 HPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService;->-$$Nest$mgetSingleProvider(Lcom/android/server/biometrics/sensors/fingerprint/FingerprintService;)Landroid/util/Pair;
 HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService;-><init>(Landroid/content/Context;)V
@@ -16286,13 +17169,13 @@
 HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService;->getProviderForSensor(I)Lcom/android/server/biometrics/sensors/fingerprint/ServiceProvider;
 HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService;->getSensorProperties()Ljava/util/List;
 HPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService;->getSingleProvider()Landroid/util/Pair;
-PLcom/android/server/biometrics/sensors/fingerprint/FingerprintService;->lambda$broadcastCurrentEnrollmentState$0(Landroid/hardware/biometrics/IBiometricStateListener;Landroid/content/pm/UserInfo;Landroid/hardware/fingerprint/FingerprintSensorPropertiesInternal;Z)V
+HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService;->lambda$broadcastCurrentEnrollmentState$0(Landroid/hardware/biometrics/IBiometricStateListener;Landroid/content/pm/UserInfo;Landroid/hardware/fingerprint/FingerprintSensorPropertiesInternal;Z)V
 HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService;->onStart()V
-PLcom/android/server/biometrics/sensors/fingerprint/FingerprintService;->registerBiometricStateListener(Landroid/hardware/biometrics/IBiometricStateListener;)V
+HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintService;->registerBiometricStateListener(Landroid/hardware/biometrics/IBiometricStateListener;)V
 HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintUserState;-><init>(Landroid/content/Context;ILjava/lang/String;)V
 PLcom/android/server/biometrics/sensors/fingerprint/FingerprintUserState;->doWriteState(Landroid/util/TypedXmlSerializer;)V
 HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintUserState;->getBiometricsTag()Ljava/lang/String;
-HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintUserState;->getCopy(Ljava/util/ArrayList;)Ljava/util/ArrayList;
+HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintUserState;->getCopy(Ljava/util/ArrayList;)Ljava/util/ArrayList;+]Landroid/hardware/fingerprint/Fingerprint;Landroid/hardware/fingerprint/Fingerprint;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 PLcom/android/server/biometrics/sensors/fingerprint/FingerprintUserState;->getNameTemplateResource()I
 HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintUserState;->parseBiometricsLocked(Landroid/util/TypedXmlPullParser;)V
 HSPLcom/android/server/biometrics/sensors/fingerprint/FingerprintUtils;-><clinit>()V
@@ -16340,7 +17223,7 @@
 PLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient;->onUiReady()V
 HPLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient;->start(Lcom/android/server/biometrics/sensors/ClientMonitorCallback;)V
 HPLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient;->startHalOperation()V
-PLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient;->stopHalOperation()V
+HPLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient;->stopHalOperation()V
 HPLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient;->wrapCallbackForStart(Lcom/android/server/biometrics/sensors/ClientMonitorCallback;)Lcom/android/server/biometrics/sensors/ClientMonitorCallback;
 PLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintDetectClient;-><init>(Landroid/content/Context;Ljava/util/function/Supplier;Landroid/os/IBinder;JLcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;ILjava/lang/String;ILcom/android/server/biometrics/log/BiometricLogger;Lcom/android/server/biometrics/log/BiometricContext;Landroid/hardware/fingerprint/IUdfpsOverlayController;Z)V
 PLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintDetectClient;->doDetectInteraction()Landroid/hardware/biometrics/common/ICancellationSignal;
@@ -16461,7 +17344,7 @@
 HPLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider;->createLogger(II)Lcom/android/server/biometrics/log/BiometricLogger;
 PLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider;->dumpInternal(ILjava/io/PrintWriter;)V
 PLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider;->dumpProtoMetrics(ILjava/io/FileDescriptor;)V
-HPLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider;->getAuthenticatorId(II)J
+HSPLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider;->getAuthenticatorId(II)J
 HSPLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider;->getEnrolledFingerprints(II)Ljava/util/List;
 PLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider;->getHalInstance()Landroid/hardware/biometrics/fingerprint/IFingerprint;
 HPLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider;->getLockoutModeForUser(II)I
@@ -16494,7 +17377,7 @@
 HPLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider;->scheduleAuthenticate(ILandroid/os/IBinder;JIILcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;Ljava/lang/String;ZIZ)J
 PLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider;->scheduleEnroll(ILandroid/os/IBinder;[BILandroid/hardware/fingerprint/IFingerprintServiceReceiver;Ljava/lang/String;I)J
 PLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider;->scheduleFingerDetect(ILandroid/os/IBinder;ILcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;Ljava/lang/String;I)J
-PLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider;->scheduleForSensor(ILcom/android/server/biometrics/sensors/BaseClientMonitor;)V
+HPLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider;->scheduleForSensor(ILcom/android/server/biometrics/sensors/BaseClientMonitor;)V
 HPLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider;->scheduleForSensor(ILcom/android/server/biometrics/sensors/BaseClientMonitor;Lcom/android/server/biometrics/sensors/ClientMonitorCallback;)V
 PLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider;->scheduleGenerateChallenge(IILandroid/os/IBinder;Landroid/hardware/fingerprint/IFingerprintServiceReceiver;Ljava/lang/String;)V
 PLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider;->scheduleInternalCleanup(IILcom/android/server/biometrics/sensors/ClientMonitorCallback;)V
@@ -16515,7 +17398,7 @@
 PLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintResetLockoutClient;->getProtoEnum()I
 PLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintResetLockoutClient;->interruptsPrecedingClients()Z
 PLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintResetLockoutClient;->onError(II)V
-PLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintResetLockoutClient;->onLockoutCleared()V
+HPLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintResetLockoutClient;->onLockoutCleared()V
 PLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintResetLockoutClient;->resetLocalLockoutStateToNone(IILcom/android/server/biometrics/sensors/LockoutCache;Lcom/android/server/biometrics/sensors/LockoutResetDispatcher;)V
 PLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintResetLockoutClient;->start(Lcom/android/server/biometrics/sensors/ClientMonitorCallback;)V
 PLcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintResetLockoutClient;->startHalOperation()V
@@ -16603,7 +17486,7 @@
 PLcom/android/server/biometrics/sensors/fingerprint/aidl/Sensor$HalSessionCallback;->lambda$onEnrollmentsRemoved$12([I)V
 HPLcom/android/server/biometrics/sensors/fingerprint/aidl/Sensor$HalSessionCallback;->lambda$onError$3(BI)V
 PLcom/android/server/biometrics/sensors/fingerprint/aidl/Sensor$HalSessionCallback;->lambda$onInteractionDetected$10()V
-PLcom/android/server/biometrics/sensors/fingerprint/aidl/Sensor$HalSessionCallback;->lambda$onLockoutCleared$9()V
+HPLcom/android/server/biometrics/sensors/fingerprint/aidl/Sensor$HalSessionCallback;->lambda$onLockoutCleared$9()V
 PLcom/android/server/biometrics/sensors/fingerprint/aidl/Sensor$HalSessionCallback;->lambda$onLockoutTimed$7(J)V
 HPLcom/android/server/biometrics/sensors/fingerprint/aidl/Sensor$HalSessionCallback;->onAcquired(BI)V
 PLcom/android/server/biometrics/sensors/fingerprint/aidl/Sensor$HalSessionCallback;->onAuthenticationFailed()V
@@ -16633,7 +17516,7 @@
 PLcom/android/server/biometrics/sensors/fingerprint/aidl/Sensor;->-$$Nest$fgetmToken(Lcom/android/server/biometrics/sensors/fingerprint/aidl/Sensor;)Landroid/os/IBinder;
 PLcom/android/server/biometrics/sensors/fingerprint/aidl/Sensor;->-$$Nest$fputmCurrentSession(Lcom/android/server/biometrics/sensors/fingerprint/aidl/Sensor;Lcom/android/server/biometrics/sensors/fingerprint/aidl/AidlSession;)V
 HSPLcom/android/server/biometrics/sensors/fingerprint/aidl/Sensor;-><init>(Ljava/lang/String;Lcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider;Landroid/content/Context;Landroid/os/Handler;Landroid/hardware/fingerprint/FingerprintSensorPropertiesInternal;Lcom/android/server/biometrics/sensors/LockoutResetDispatcher;Lcom/android/server/biometrics/sensors/fingerprint/GestureAvailabilityDispatcher;Lcom/android/server/biometrics/log/BiometricContext;)V
-PLcom/android/server/biometrics/sensors/fingerprint/aidl/Sensor;->getAuthenticatorIds()Ljava/util/Map;
+HSPLcom/android/server/biometrics/sensors/fingerprint/aidl/Sensor;->getAuthenticatorIds()Ljava/util/Map;
 PLcom/android/server/biometrics/sensors/fingerprint/aidl/Sensor;->getLazySession()Ljava/util/function/Supplier;
 PLcom/android/server/biometrics/sensors/fingerprint/aidl/Sensor;->getLockoutCache()Lcom/android/server/biometrics/sensors/LockoutCache;
 PLcom/android/server/biometrics/sensors/fingerprint/aidl/Sensor;->getScheduler()Lcom/android/server/biometrics/sensors/BiometricScheduler;
@@ -16649,10 +17532,12 @@
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$$ExternalSyntheticLambda17;->run()V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$$ExternalSyntheticLambda18;-><init>(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$$ExternalSyntheticLambda18;->run()V
+PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$$ExternalSyntheticLambda19;-><init>(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;Landroid/os/IBinder;Landroid/hardware/fingerprint/IFingerprintServiceReceiver;ILjava/lang/String;)V
+PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$$ExternalSyntheticLambda19;->run()V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$$ExternalSyntheticLambda20;-><init>(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;)V
-PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$$ExternalSyntheticLambda20;->get()Ljava/lang/Object;
+HPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$$ExternalSyntheticLambda20;->get()Ljava/lang/Object;
 HSPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;)V
-PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$$ExternalSyntheticLambda2;->get()Ljava/lang/Object;
+HPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$$ExternalSyntheticLambda2;->get()Ljava/lang/Object;
 HSPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;I)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$$ExternalSyntheticLambda4;->run()V
@@ -16661,21 +17546,22 @@
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;II)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$$ExternalSyntheticLambda8;->run()V
 HSPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$1;-><init>(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;)V
-PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$1;->onLockoutReset(I)V
+HPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$1;->onLockoutReset(I)V
 HSPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$2;-><init>(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;)V
-PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$3;-><init>(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;I)V
-PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$3;->onClientFinished(Lcom/android/server/biometrics/sensors/BaseClientMonitor;Z)V
+PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$2;->onUserSwitching(I)V
+HPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$3;-><init>(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;I)V
+HPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$3;->onClientFinished(Lcom/android/server/biometrics/sensors/BaseClientMonitor;Z)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$BiometricTaskStackListener$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$BiometricTaskStackListener;)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$BiometricTaskStackListener$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$BiometricTaskStackListener;->$r8$lambda$1Iq3J8uzzhAOnfdnThVNeJqtrCk(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$BiometricTaskStackListener;)V
 HSPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$BiometricTaskStackListener;-><init>(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;)V
 HSPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$BiometricTaskStackListener;-><init>(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$BiometricTaskStackListener-IA;)V
 HPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$BiometricTaskStackListener;->lambda$onTaskStackChanged$0()V
-PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$BiometricTaskStackListener;->onTaskStackChanged()V
+HPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$BiometricTaskStackListener;->onTaskStackChanged()V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController;II)V
 HPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController$$ExternalSyntheticLambda1;->run()V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController;IIJLjava/util/ArrayList;)V
-PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController$$ExternalSyntheticLambda2;->run()V
+HPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController$$ExternalSyntheticLambda2;->run()V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController;IIJI)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController$$ExternalSyntheticLambda4;->run()V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController;II)V
@@ -16683,13 +17569,13 @@
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController;->$r8$lambda$2zUyqegYJCKikIIRpT2qAVxh-nI(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController;IIJLjava/util/ArrayList;)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController;->$r8$lambda$90x4WERJv43jDE8KaqsrJb9P42U(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController;IIJI)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController;->$r8$lambda$Glgt_EjhKtYsxQ2FmV4bKYJOTsU(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController;II)V
-PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController;->$r8$lambda$T5krAvcAISLUNECaph-UvnV0eK0(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController;II)V
+HPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController;->$r8$lambda$T5krAvcAISLUNECaph-UvnV0eK0(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController;II)V
 HSPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController;-><init>(ILandroid/content/Context;Landroid/os/Handler;Lcom/android/server/biometrics/sensors/BiometricScheduler;)V
 HPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController;->lambda$onAcquired_2_2$1(II)V
 HPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController;->lambda$onAuthenticated$2(IIJLjava/util/ArrayList;)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController;->lambda$onEnumerate$5(IIJI)V
 HPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController;->lambda$onError$3(II)V
-PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController;->onAcquired_2_2(JII)V
+HPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController;->onAcquired_2_2(JII)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController;->onAuthenticated(JIILjava/util/ArrayList;)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController;->onEnumerate(JIII)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController;->onError(JII)V
@@ -16701,12 +17587,14 @@
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->$r8$lambda$Yj2s_zGKC2_M4pkwV47_wt40hyE(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;ILcom/android/server/biometrics/sensors/ClientMonitorCallback;)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->$r8$lambda$aQg9OYBM4dGwqMDT0eH6EThb2Ns(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;ILandroid/os/IBinder;JLcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;Ljava/lang/String;I)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->$r8$lambda$btelUG94Pueyif7-5wVeHeohCmQ(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;Landroid/os/IBinder;J)V
+PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->$r8$lambda$m0B93So6g3VKFkvNEVDUIGCmra8(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;Landroid/os/IBinder;Landroid/hardware/fingerprint/IFingerprintServiceReceiver;ILjava/lang/String;)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->$r8$lambda$y-nOCcXDwMcPpcPEM8kRiw3_UuY(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;I)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->-$$Nest$fgetmHandler(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;)Landroid/os/Handler;
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->-$$Nest$fgetmLockoutResetDispatcher(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;)Lcom/android/server/biometrics/sensors/LockoutResetDispatcher;
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->-$$Nest$fgetmScheduler(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;)Lcom/android/server/biometrics/sensors/BiometricScheduler;
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->-$$Nest$fgetmSensorProperties(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;)Landroid/hardware/fingerprint/FingerprintSensorPropertiesInternal;
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->-$$Nest$fputmCurrentUserId(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;I)V
+PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->-$$Nest$mscheduleInternalCleanup(Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;ILcom/android/server/biometrics/sensors/ClientMonitorCallback;)V
 HSPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;-><init>(Landroid/content/Context;Lcom/android/server/biometrics/sensors/BiometricStateCallback;Landroid/hardware/fingerprint/FingerprintSensorPropertiesInternal;Lcom/android/server/biometrics/sensors/BiometricScheduler;Landroid/os/Handler;Lcom/android/server/biometrics/sensors/LockoutResetDispatcher;Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$HalResultController;Lcom/android/server/biometrics/log/BiometricContext;)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->cancelAuthentication(ILandroid/os/IBinder;J)V
 HSPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->containsSensor(I)Z
@@ -16724,14 +17612,16 @@
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->lambda$cancelAuthentication$11(Landroid/os/IBinder;J)V
 HPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->lambda$scheduleAuthenticate$9(ILandroid/os/IBinder;JLcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;JZLjava/lang/String;IIZ)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->lambda$scheduleFingerDetect$8(ILandroid/os/IBinder;JLcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;Ljava/lang/String;I)V
+PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->lambda$scheduleGenerateChallenge$4(Landroid/os/IBinder;Landroid/hardware/fingerprint/IFingerprintServiceReceiver;ILjava/lang/String;)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->lambda$scheduleInternalCleanup$14(ILcom/android/server/biometrics/sensors/ClientMonitorCallback;)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->lambda$scheduleLoadAuthenticatorIds$2()V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->lambda$scheduleResetLockout$3(II)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->lambda$startPreparedClient$10(I)V
 HSPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->newInstance(Landroid/content/Context;Lcom/android/server/biometrics/sensors/BiometricStateCallback;Landroid/hardware/fingerprint/FingerprintSensorPropertiesInternal;Landroid/os/Handler;Lcom/android/server/biometrics/sensors/LockoutResetDispatcher;Lcom/android/server/biometrics/sensors/fingerprint/GestureAvailabilityDispatcher;)Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;
-PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->scheduleAuthenticate(ILandroid/os/IBinder;JIILcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;Ljava/lang/String;JZIZ)V
-PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->scheduleAuthenticate(ILandroid/os/IBinder;JIILcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;Ljava/lang/String;ZIZ)J
+HPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->scheduleAuthenticate(ILandroid/os/IBinder;JIILcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;Ljava/lang/String;JZIZ)V
+HPLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->scheduleAuthenticate(ILandroid/os/IBinder;JIILcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;Ljava/lang/String;ZIZ)J
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->scheduleFingerDetect(ILandroid/os/IBinder;ILcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;Ljava/lang/String;I)J
+PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->scheduleGenerateChallenge(IILandroid/os/IBinder;Landroid/hardware/fingerprint/IFingerprintServiceReceiver;Ljava/lang/String;)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->scheduleInternalCleanup(ILcom/android/server/biometrics/sensors/ClientMonitorCallback;)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->scheduleLoadAuthenticatorIds()V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21;->scheduleResetLockout(II[B)V
@@ -16744,10 +17634,10 @@
 HPLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintAuthenticationClient;->onAuthenticated(Landroid/hardware/biometrics/BiometricAuthenticator$Identifier;ZLjava/util/ArrayList;)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintAuthenticationClient;->onError(II)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintAuthenticationClient;->resetFailedAttempts(I)V
-PLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintAuthenticationClient;->start(Lcom/android/server/biometrics/sensors/ClientMonitorCallback;)V
+HPLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintAuthenticationClient;->start(Lcom/android/server/biometrics/sensors/ClientMonitorCallback;)V
 HPLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintAuthenticationClient;->startHalOperation()V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintAuthenticationClient;->stopHalOperation()V
-PLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintAuthenticationClient;->wrapCallbackForStart(Lcom/android/server/biometrics/sensors/ClientMonitorCallback;)Lcom/android/server/biometrics/sensors/ClientMonitorCallback;
+HPLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintAuthenticationClient;->wrapCallbackForStart(Lcom/android/server/biometrics/sensors/ClientMonitorCallback;)Lcom/android/server/biometrics/sensors/ClientMonitorCallback;
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintDetectClient;-><init>(Landroid/content/Context;Ljava/util/function/Supplier;Landroid/os/IBinder;JLcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;ILjava/lang/String;ILcom/android/server/biometrics/log/BiometricLogger;Lcom/android/server/biometrics/log/BiometricContext;Landroid/hardware/fingerprint/IUdfpsOverlayController;Z)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintDetectClient;->getProtoEnum()I
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintDetectClient;->interruptsPrecedingClients()Z
@@ -16755,6 +17645,8 @@
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintDetectClient;->start(Lcom/android/server/biometrics/sensors/ClientMonitorCallback;)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintDetectClient;->startHalOperation()V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintDetectClient;->stopHalOperation()V
+PLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintGenerateChallengeClient;-><init>(Landroid/content/Context;Ljava/util/function/Supplier;Landroid/os/IBinder;Lcom/android/server/biometrics/sensors/ClientMonitorCallbackConverter;ILjava/lang/String;ILcom/android/server/biometrics/log/BiometricLogger;Lcom/android/server/biometrics/log/BiometricContext;)V
+PLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintGenerateChallengeClient;->startHalOperation()V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintInternalCleanupClient;-><init>(Landroid/content/Context;Ljava/util/function/Supplier;ILjava/lang/String;ILcom/android/server/biometrics/log/BiometricLogger;Lcom/android/server/biometrics/log/BiometricContext;Ljava/util/List;Lcom/android/server/biometrics/sensors/BiometricUtils;Ljava/util/Map;)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintInternalCleanupClient;->getEnumerateClient(Landroid/content/Context;Ljava/util/function/Supplier;Landroid/os/IBinder;ILjava/lang/String;Ljava/util/List;Lcom/android/server/biometrics/sensors/BiometricUtils;ILcom/android/server/biometrics/log/BiometricLogger;Lcom/android/server/biometrics/log/BiometricContext;)Lcom/android/server/biometrics/sensors/InternalEnumerateClient;
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintInternalEnumerateClient;-><init>(Landroid/content/Context;Ljava/util/function/Supplier;Landroid/os/IBinder;ILjava/lang/String;Ljava/util/List;Lcom/android/server/biometrics/sensors/BiometricUtils;ILcom/android/server/biometrics/log/BiometricLogger;Lcom/android/server/biometrics/log/BiometricContext;)V
@@ -16763,7 +17655,7 @@
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintResetLockoutClient;->getProtoEnum()I
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintResetLockoutClient;->interruptsPrecedingClients()Z
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintResetLockoutClient;->start(Lcom/android/server/biometrics/sensors/ClientMonitorCallback;)V
-PLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintUpdateActiveUserClient;-><init>(Landroid/content/Context;Ljava/util/function/Supplier;ILjava/lang/String;ILcom/android/server/biometrics/log/BiometricLogger;Lcom/android/server/biometrics/log/BiometricContext;Ljava/util/function/Supplier;ZLjava/util/Map;Z)V
+HPLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintUpdateActiveUserClient;-><init>(Landroid/content/Context;Ljava/util/function/Supplier;ILjava/lang/String;ILcom/android/server/biometrics/log/BiometricLogger;Lcom/android/server/biometrics/log/BiometricContext;Ljava/util/function/Supplier;ZLjava/util/Map;Z)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintUpdateActiveUserClient;->getProtoEnum()I
 HPLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintUpdateActiveUserClient;->start(Lcom/android/server/biometrics/sensors/ClientMonitorCallback;)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/FingerprintUpdateActiveUserClient;->startHalOperation()V
@@ -16777,83 +17669,89 @@
 HPLcom/android/server/biometrics/sensors/fingerprint/hidl/LockoutFrameworkImpl;->getLockoutResetIntentForUser(I)Landroid/app/PendingIntent;
 HPLcom/android/server/biometrics/sensors/fingerprint/hidl/LockoutFrameworkImpl;->resetFailedAttemptsForUser(ZI)V
 PLcom/android/server/biometrics/sensors/fingerprint/hidl/LockoutFrameworkImpl;->scheduleLockoutResetForUser(I)V
-PLcom/android/server/blob/BlobAccessMode;-><init>()V
+HSPLcom/android/server/blob/BlobAccessMode;-><init>()V
 PLcom/android/server/blob/BlobAccessMode;->allowPublicAccess()V
-PLcom/android/server/blob/BlobAccessMode;->createFromXml(Lorg/xmlpull/v1/XmlPullParser;)Lcom/android/server/blob/BlobAccessMode;
+HSPLcom/android/server/blob/BlobAccessMode;->createFromXml(Lorg/xmlpull/v1/XmlPullParser;)Lcom/android/server/blob/BlobAccessMode;
 PLcom/android/server/blob/BlobAccessMode;->dump(Landroid/util/IndentingPrintWriter;)V
 PLcom/android/server/blob/BlobAccessMode;->getAccessType()I
 PLcom/android/server/blob/BlobAccessMode;->getAllowedPackagesCount()I
 PLcom/android/server/blob/BlobAccessMode;->isAccessAllowedForCaller(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)Z
 PLcom/android/server/blob/BlobAccessMode;->writeToXml(Lorg/xmlpull/v1/XmlSerializer;)V
-PLcom/android/server/blob/BlobMetadata$$ExternalSyntheticLambda2;-><init>(Landroid/util/SparseArray;)V
-PLcom/android/server/blob/BlobMetadata$$ExternalSyntheticLambda2;->test(Ljava/lang/Object;)Z
+PLcom/android/server/blob/BlobMetadata$$ExternalSyntheticLambda0;-><init>(ILjava/lang/String;)V
+PLcom/android/server/blob/BlobMetadata$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/blob/BlobMetadata$$ExternalSyntheticLambda2;-><init>(Landroid/util/SparseArray;)V
+HSPLcom/android/server/blob/BlobMetadata$$ExternalSyntheticLambda2;->test(Ljava/lang/Object;)Z
 PLcom/android/server/blob/BlobMetadata$$ExternalSyntheticLambda3;-><init>()V
 PLcom/android/server/blob/BlobMetadata$$ExternalSyntheticLambda3;->test(Ljava/lang/Object;)Z
-PLcom/android/server/blob/BlobMetadata$$ExternalSyntheticLambda4;-><init>(Landroid/util/SparseArray;)V
-PLcom/android/server/blob/BlobMetadata$$ExternalSyntheticLambda4;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/blob/BlobMetadata$$ExternalSyntheticLambda4;-><init>(Landroid/util/SparseArray;)V
+HSPLcom/android/server/blob/BlobMetadata$$ExternalSyntheticLambda4;->test(Ljava/lang/Object;)Z
 PLcom/android/server/blob/BlobMetadata$$ExternalSyntheticLambda5;-><init>(ILjava/lang/String;)V
-PLcom/android/server/blob/BlobMetadata$$ExternalSyntheticLambda5;->test(Ljava/lang/Object;)Z
-PLcom/android/server/blob/BlobMetadata$Accessor;-><init>(Ljava/lang/String;I)V
-PLcom/android/server/blob/BlobMetadata$Accessor;->equals(Ljava/lang/String;I)Z
-PLcom/android/server/blob/BlobMetadata$Accessor;->hashCode()I
-PLcom/android/server/blob/BlobMetadata$Accessor;->toString()Ljava/lang/String;
-PLcom/android/server/blob/BlobMetadata$Committer;-><init>(Ljava/lang/String;ILcom/android/server/blob/BlobAccessMode;J)V
-PLcom/android/server/blob/BlobMetadata$Committer;->createFromXml(Lorg/xmlpull/v1/XmlPullParser;I)Lcom/android/server/blob/BlobMetadata$Committer;
+HPLcom/android/server/blob/BlobMetadata$$ExternalSyntheticLambda5;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/blob/BlobMetadata$Accessor;-><init>(Ljava/lang/String;I)V
+HPLcom/android/server/blob/BlobMetadata$Accessor;->equals(Ljava/lang/String;I)Z
+HSPLcom/android/server/blob/BlobMetadata$Accessor;->hashCode()I
+HPLcom/android/server/blob/BlobMetadata$Accessor;->toString()Ljava/lang/String;
+HSPLcom/android/server/blob/BlobMetadata$Committer;-><init>(Ljava/lang/String;ILcom/android/server/blob/BlobAccessMode;J)V
+HSPLcom/android/server/blob/BlobMetadata$Committer;->createFromXml(Lorg/xmlpull/v1/XmlPullParser;I)Lcom/android/server/blob/BlobMetadata$Committer;
 PLcom/android/server/blob/BlobMetadata$Committer;->dump(Landroid/util/IndentingPrintWriter;)V
 PLcom/android/server/blob/BlobMetadata$Committer;->getCommitTimeMs()J
 HPLcom/android/server/blob/BlobMetadata$Committer;->writeToXml(Lorg/xmlpull/v1/XmlSerializer;)V
 PLcom/android/server/blob/BlobMetadata$Leasee;-><init>(Landroid/content/Context;Ljava/lang/String;IILjava/lang/CharSequence;J)V
-PLcom/android/server/blob/BlobMetadata$Leasee;-><init>(Ljava/lang/String;ILjava/lang/String;Ljava/lang/CharSequence;J)V
-PLcom/android/server/blob/BlobMetadata$Leasee;->createFromXml(Lorg/xmlpull/v1/XmlPullParser;I)Lcom/android/server/blob/BlobMetadata$Leasee;
-PLcom/android/server/blob/BlobMetadata$Leasee;->dump(Landroid/content/Context;Landroid/util/IndentingPrintWriter;)V
+HSPLcom/android/server/blob/BlobMetadata$Leasee;-><init>(Ljava/lang/String;ILjava/lang/String;Ljava/lang/CharSequence;J)V
+HSPLcom/android/server/blob/BlobMetadata$Leasee;->createFromXml(Lorg/xmlpull/v1/XmlPullParser;I)Lcom/android/server/blob/BlobMetadata$Leasee;
+HPLcom/android/server/blob/BlobMetadata$Leasee;->dump(Landroid/content/Context;Landroid/util/IndentingPrintWriter;)V
 PLcom/android/server/blob/BlobMetadata$Leasee;->getDescription(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;
 PLcom/android/server/blob/BlobMetadata$Leasee;->getDescriptionToDump(Landroid/content/Context;)Ljava/lang/String;
 PLcom/android/server/blob/BlobMetadata$Leasee;->getResourceEntryName(Landroid/content/res/Resources;I)Ljava/lang/String;
-PLcom/android/server/blob/BlobMetadata$Leasee;->isStillValid()Z
+HPLcom/android/server/blob/BlobMetadata$Leasee;->isStillValid()Z
 HPLcom/android/server/blob/BlobMetadata$Leasee;->writeToXml(Lorg/xmlpull/v1/XmlSerializer;)V
 PLcom/android/server/blob/BlobMetadata;->$r8$lambda$1kPlsEMCe_zPKmHIoBHpAwetktA(ILjava/lang/String;Lcom/android/server/blob/BlobMetadata$Leasee;)Z
+PLcom/android/server/blob/BlobMetadata;->$r8$lambda$Gj0TgDJ8vdARVdhdnB7wZYpR5eg(ILjava/lang/String;Lcom/android/server/blob/BlobMetadata$Committer;)Z
 PLcom/android/server/blob/BlobMetadata;->$r8$lambda$KrpvkmDm06d88OXLr5VRH5aR8Fw(Lcom/android/server/blob/BlobMetadata$Leasee;)Z
-PLcom/android/server/blob/BlobMetadata;->$r8$lambda$Q56ii5cwa0y_Vux5SdG5jscJceE(Landroid/util/SparseArray;Lcom/android/server/blob/BlobMetadata$Committer;)Z
-PLcom/android/server/blob/BlobMetadata;->$r8$lambda$ceYnxM7Pw2_I8GUdNelXcRo9Qzw(Landroid/util/SparseArray;Lcom/android/server/blob/BlobMetadata$Leasee;)Z
-PLcom/android/server/blob/BlobMetadata;-><init>(Landroid/content/Context;JLandroid/app/blob/BlobHandle;)V
+HSPLcom/android/server/blob/BlobMetadata;->$r8$lambda$Q56ii5cwa0y_Vux5SdG5jscJceE(Landroid/util/SparseArray;Lcom/android/server/blob/BlobMetadata$Committer;)Z
+HSPLcom/android/server/blob/BlobMetadata;->$r8$lambda$ceYnxM7Pw2_I8GUdNelXcRo9Qzw(Landroid/util/SparseArray;Lcom/android/server/blob/BlobMetadata$Leasee;)Z
+HSPLcom/android/server/blob/BlobMetadata;-><init>(Landroid/content/Context;JLandroid/app/blob/BlobHandle;)V
 PLcom/android/server/blob/BlobMetadata;->addOrReplaceCommitter(Lcom/android/server/blob/BlobMetadata$Committer;)V
 PLcom/android/server/blob/BlobMetadata;->addOrReplaceLeasee(Ljava/lang/String;IILjava/lang/CharSequence;J)V
 PLcom/android/server/blob/BlobMetadata;->checkCallerCanAccessBlobsAcrossUsers(Ljava/lang/String;I)Z
-HPLcom/android/server/blob/BlobMetadata;->createFromXml(Lorg/xmlpull/v1/XmlPullParser;ILandroid/content/Context;)Lcom/android/server/blob/BlobMetadata;
+HSPLcom/android/server/blob/BlobMetadata;->createFromXml(Lorg/xmlpull/v1/XmlPullParser;ILandroid/content/Context;)Lcom/android/server/blob/BlobMetadata;
 PLcom/android/server/blob/BlobMetadata;->destroy()V
 HPLcom/android/server/blob/BlobMetadata;->dump(Landroid/util/IndentingPrintWriter;Lcom/android/server/blob/BlobStoreManagerService$DumpArgs;)V
 HPLcom/android/server/blob/BlobMetadata;->dumpAsStatsEvent(I)Landroid/util/StatsEvent;
 PLcom/android/server/blob/BlobMetadata;->forEachLeasee(Ljava/util/function/Consumer;)V
 HPLcom/android/server/blob/BlobMetadata;->getAccessor(Landroid/util/ArraySet;Ljava/lang/String;II)Lcom/android/server/blob/BlobMetadata$Accessor;+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/blob/BlobMetadata$Accessor;Lcom/android/server/blob/BlobMetadata$Committer;,Lcom/android/server/blob/BlobMetadata$Leasee;
 HPLcom/android/server/blob/BlobMetadata;->getBlobFile()Ljava/io/File;
-PLcom/android/server/blob/BlobMetadata;->getBlobHandle()Landroid/app/blob/BlobHandle;
-PLcom/android/server/blob/BlobMetadata;->getBlobId()J
+HSPLcom/android/server/blob/BlobMetadata;->getBlobHandle()Landroid/app/blob/BlobHandle;
+HSPLcom/android/server/blob/BlobMetadata;->getBlobId()J
 PLcom/android/server/blob/BlobMetadata;->getExistingCommitter(Ljava/lang/String;I)Lcom/android/server/blob/BlobMetadata$Committer;
 HPLcom/android/server/blob/BlobMetadata;->getSize()J
 PLcom/android/server/blob/BlobMetadata;->hasACommitterInUser(I)Z
 PLcom/android/server/blob/BlobMetadata;->hasACommitterOrLeaseeInUser(I)Z
+PLcom/android/server/blob/BlobMetadata;->hasALeaseeInUser(I)Z
 PLcom/android/server/blob/BlobMetadata;->hasLeaseWaitTimeElapsedForAll()Z
-PLcom/android/server/blob/BlobMetadata;->hasOtherLeasees(Ljava/lang/String;II)Z
+HPLcom/android/server/blob/BlobMetadata;->hasOtherLeasees(Ljava/lang/String;II)Z
 PLcom/android/server/blob/BlobMetadata;->hasValidLeases()Z
 PLcom/android/server/blob/BlobMetadata;->isACommitter(Ljava/lang/String;I)Z
 PLcom/android/server/blob/BlobMetadata;->isALeasee(Ljava/lang/String;I)Z
 HPLcom/android/server/blob/BlobMetadata;->isALeaseeInUser(Ljava/lang/String;II)Z+]Lcom/android/server/blob/BlobMetadata$Leasee;Lcom/android/server/blob/BlobMetadata$Leasee;
 HPLcom/android/server/blob/BlobMetadata;->isAccessAllowedForCaller(Ljava/lang/String;I)Z
 PLcom/android/server/blob/BlobMetadata;->isAnAccessor(Landroid/util/ArraySet;Ljava/lang/String;II)Z
-PLcom/android/server/blob/BlobMetadata;->lambda$removeCommittersFromUnknownPkgs$1(Landroid/util/SparseArray;Lcom/android/server/blob/BlobMetadata$Committer;)Z
+PLcom/android/server/blob/BlobMetadata;->lambda$removeCommitter$0(ILjava/lang/String;Lcom/android/server/blob/BlobMetadata$Committer;)Z
+HSPLcom/android/server/blob/BlobMetadata;->lambda$removeCommittersFromUnknownPkgs$1(Landroid/util/SparseArray;Lcom/android/server/blob/BlobMetadata$Committer;)Z
 PLcom/android/server/blob/BlobMetadata;->lambda$removeExpiredLeases$4(Lcom/android/server/blob/BlobMetadata$Leasee;)Z
 PLcom/android/server/blob/BlobMetadata;->lambda$removeLeasee$2(ILjava/lang/String;Lcom/android/server/blob/BlobMetadata$Leasee;)Z
-PLcom/android/server/blob/BlobMetadata;->lambda$removeLeaseesFromUnknownPkgs$3(Landroid/util/SparseArray;Lcom/android/server/blob/BlobMetadata$Leasee;)Z
-PLcom/android/server/blob/BlobMetadata;->openForRead(Ljava/lang/String;I)Landroid/os/ParcelFileDescriptor;
-PLcom/android/server/blob/BlobMetadata;->removeCommittersFromUnknownPkgs(Landroid/util/SparseArray;)V
-PLcom/android/server/blob/BlobMetadata;->removeExpiredLeases()V
-PLcom/android/server/blob/BlobMetadata;->removeLeasee(Ljava/lang/String;I)V
-PLcom/android/server/blob/BlobMetadata;->removeLeaseesFromUnknownPkgs(Landroid/util/SparseArray;)V
+HSPLcom/android/server/blob/BlobMetadata;->lambda$removeLeaseesFromUnknownPkgs$3(Landroid/util/SparseArray;Lcom/android/server/blob/BlobMetadata$Leasee;)Z
+HPLcom/android/server/blob/BlobMetadata;->openForRead(Ljava/lang/String;I)Landroid/os/ParcelFileDescriptor;
+PLcom/android/server/blob/BlobMetadata;->removeCommitter(Ljava/lang/String;I)V
+HSPLcom/android/server/blob/BlobMetadata;->removeCommittersFromUnknownPkgs(Landroid/util/SparseArray;)V
+HPLcom/android/server/blob/BlobMetadata;->removeExpiredLeases()V
+HPLcom/android/server/blob/BlobMetadata;->removeLeasee(Ljava/lang/String;I)V
+HSPLcom/android/server/blob/BlobMetadata;->removeLeaseesFromUnknownPkgs(Landroid/util/SparseArray;)V
 PLcom/android/server/blob/BlobMetadata;->revokeAndClearAllFds()V
-PLcom/android/server/blob/BlobMetadata;->setCommitters(Landroid/util/ArraySet;)V
-PLcom/android/server/blob/BlobMetadata;->setLeasees(Landroid/util/ArraySet;)V
+HSPLcom/android/server/blob/BlobMetadata;->setCommitters(Landroid/util/ArraySet;)V
+HSPLcom/android/server/blob/BlobMetadata;->setLeasees(Landroid/util/ArraySet;)V
 HPLcom/android/server/blob/BlobMetadata;->shouldAttributeToLeasee(IZ)Z+]Lcom/android/server/blob/BlobMetadata;Lcom/android/server/blob/BlobMetadata;
-HPLcom/android/server/blob/BlobMetadata;->shouldAttributeToLeasee(Ljava/lang/String;IZ)Z
+HPLcom/android/server/blob/BlobMetadata;->shouldAttributeToLeasee(Ljava/lang/String;IZ)Z+]Lcom/android/server/blob/BlobMetadata;Lcom/android/server/blob/BlobMetadata;
 HPLcom/android/server/blob/BlobMetadata;->shouldAttributeToUser(I)Z+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 PLcom/android/server/blob/BlobMetadata;->shouldBeDeleted(Z)Z
 HPLcom/android/server/blob/BlobMetadata;->writeToXml(Lorg/xmlpull/v1/XmlSerializer;)V
@@ -16902,7 +17800,7 @@
 PLcom/android/server/blob/BlobStoreManagerService$$ExternalSyntheticLambda13;-><init>(Ljava/lang/String;ILjava/util/ArrayList;)V
 PLcom/android/server/blob/BlobStoreManagerService$$ExternalSyntheticLambda13;->accept(Ljava/lang/Object;)V
 PLcom/android/server/blob/BlobStoreManagerService$$ExternalSyntheticLambda14;-><init>(Ljava/util/List;I)V
-PLcom/android/server/blob/BlobStoreManagerService$$ExternalSyntheticLambda14;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/blob/BlobStoreManagerService$$ExternalSyntheticLambda14;->accept(Ljava/lang/Object;)V
 PLcom/android/server/blob/BlobStoreManagerService$$ExternalSyntheticLambda16;-><init>(Ljava/lang/String;ILjava/util/concurrent/atomic/AtomicInteger;)V
 PLcom/android/server/blob/BlobStoreManagerService$$ExternalSyntheticLambda16;->accept(Ljava/lang/Object;)V
 PLcom/android/server/blob/BlobStoreManagerService$$ExternalSyntheticLambda17;-><init>(ILjava/util/function/Function;Landroid/app/blob/BlobHandle;Ljava/util/ArrayList;)V
@@ -16923,36 +17821,39 @@
 PLcom/android/server/blob/BlobStoreManagerService$$ExternalSyntheticLambda4;->run()V
 PLcom/android/server/blob/BlobStoreManagerService$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/blob/BlobStoreManagerService;ILjava/lang/String;)V
 PLcom/android/server/blob/BlobStoreManagerService$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/blob/BlobStoreManagerService;Ljava/lang/String;I)V
-PLcom/android/server/blob/BlobStoreManagerService$$ExternalSyntheticLambda6;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/blob/BlobStoreManagerService$$ExternalSyntheticLambda6;->test(Ljava/lang/Object;)Z
 PLcom/android/server/blob/BlobStoreManagerService$$ExternalSyntheticLambda7;-><init>(Lcom/android/server/blob/BlobStoreManagerService;Landroid/app/blob/BlobHandle;Lcom/android/server/blob/BlobMetadata;)V
 PLcom/android/server/blob/BlobStoreManagerService$$ExternalSyntheticLambda7;->run()V
 PLcom/android/server/blob/BlobStoreManagerService$$ExternalSyntheticLambda9;-><init>(Lcom/android/server/blob/BlobStoreManagerService;Landroid/util/ArrayMap;I)V
 HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter$$ExternalSyntheticLambda0;-><init>(Ljava/lang/String;Ljava/util/concurrent/atomic/AtomicLong;)V
 PLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter$$ExternalSyntheticLambda1;-><init>(Ljava/lang/String;Landroid/os/UserHandle;ZLjava/util/concurrent/atomic/AtomicLong;)V
-PLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter$$ExternalSyntheticLambda2;-><init>(ILjava/util/concurrent/atomic/AtomicLong;)V
 PLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter$$ExternalSyntheticLambda3;-><init>(IZLjava/util/concurrent/atomic/AtomicLong;)V
 HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter$$ExternalSyntheticLambda4;-><init>(Ljava/util/concurrent/atomic/AtomicLong;)V
+PLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter$$ExternalSyntheticLambda5;-><init>(Landroid/os/UserHandle;Ljava/util/concurrent/atomic/AtomicLong;)V
 HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter;->$r8$lambda$GakadKjDaYgva1CVpB3ih-4wedc(Landroid/os/UserHandle;Ljava/util/concurrent/atomic/AtomicLong;Lcom/android/server/blob/BlobMetadata;)V
 HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter;->$r8$lambda$Kg9zqhcDaAJ5lbpIRP5r9mf_LcE(IZLjava/util/concurrent/atomic/AtomicLong;Lcom/android/server/blob/BlobMetadata;)V
 PLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter;->$r8$lambda$LJ33bhb9r4x5r3gCOlrsIH96vmY(ILjava/util/concurrent/atomic/AtomicLong;Lcom/android/server/blob/BlobStoreSession;)V
+PLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter;->$r8$lambda$RfLTE6hdFTMRBaxMTzPG24SSk0c(Ljava/util/concurrent/atomic/AtomicLong;Lcom/android/server/blob/BlobStoreSession;)V
 PLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter;->$r8$lambda$bnXLd7X8D--0GoWJpYuyXLBP3N4(Ljava/lang/String;Ljava/util/concurrent/atomic/AtomicLong;Lcom/android/server/blob/BlobStoreSession;)V
-PLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter;->$r8$lambda$vNici74ZpLRpLd2of1tkmfus06g(Ljava/lang/String;Landroid/os/UserHandle;ZLjava/util/concurrent/atomic/AtomicLong;Lcom/android/server/blob/BlobMetadata;)V
+HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter;->$r8$lambda$vNici74ZpLRpLd2of1tkmfus06g(Ljava/lang/String;Landroid/os/UserHandle;ZLjava/util/concurrent/atomic/AtomicLong;Lcom/android/server/blob/BlobMetadata;)V
 HSPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter;-><init>(Lcom/android/server/blob/BlobStoreManagerService;)V
 HSPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter;-><init>(Lcom/android/server/blob/BlobStoreManagerService;Lcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter-IA;)V
 HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter;->augmentStatsForPackageForUser(Landroid/content/pm/PackageStats;Ljava/lang/String;Landroid/os/UserHandle;Z)V
-HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter;->augmentStatsForUid(Landroid/content/pm/PackageStats;IZ)V
+HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter;->augmentStatsForUid(Landroid/content/pm/PackageStats;IZ)V+]Ljava/util/concurrent/atomic/AtomicLong;Ljava/util/concurrent/atomic/AtomicLong;
 HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter;->augmentStatsForUser(Landroid/content/pm/PackageStats;Landroid/os/UserHandle;)V
 PLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter;->lambda$augmentStatsForPackageForUser$0(Ljava/lang/String;Ljava/util/concurrent/atomic/AtomicLong;Lcom/android/server/blob/BlobStoreSession;)V
-PLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter;->lambda$augmentStatsForPackageForUser$1(Ljava/lang/String;Landroid/os/UserHandle;ZLjava/util/concurrent/atomic/AtomicLong;Lcom/android/server/blob/BlobMetadata;)V
+HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter;->lambda$augmentStatsForPackageForUser$1(Ljava/lang/String;Landroid/os/UserHandle;ZLjava/util/concurrent/atomic/AtomicLong;Lcom/android/server/blob/BlobMetadata;)V
 PLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter;->lambda$augmentStatsForUid$2(ILjava/util/concurrent/atomic/AtomicLong;Lcom/android/server/blob/BlobStoreSession;)V
 HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter;->lambda$augmentStatsForUid$3(IZLjava/util/concurrent/atomic/AtomicLong;Lcom/android/server/blob/BlobMetadata;)V
-HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter;->lambda$augmentStatsForUser$5(Landroid/os/UserHandle;Ljava/util/concurrent/atomic/AtomicLong;Lcom/android/server/blob/BlobMetadata;)V
+PLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter;->lambda$augmentStatsForUser$4(Ljava/util/concurrent/atomic/AtomicLong;Lcom/android/server/blob/BlobStoreSession;)V
+HPLcom/android/server/blob/BlobStoreManagerService$BlobStorageStatsAugmenter;->lambda$augmentStatsForUser$5(Landroid/os/UserHandle;Ljava/util/concurrent/atomic/AtomicLong;Lcom/android/server/blob/BlobMetadata;)V+]Lcom/android/server/blob/BlobMetadata;Lcom/android/server/blob/BlobMetadata;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Ljava/util/concurrent/atomic/AtomicLong;Ljava/util/concurrent/atomic/AtomicLong;
 PLcom/android/server/blob/BlobStoreManagerService$DumpArgs;-><init>()V
 PLcom/android/server/blob/BlobStoreManagerService$DumpArgs;->parse([Ljava/lang/String;)Lcom/android/server/blob/BlobStoreManagerService$DumpArgs;
 PLcom/android/server/blob/BlobStoreManagerService$DumpArgs;->shouldDumpAllSections()Z
@@ -17016,14 +17917,14 @@
 PLcom/android/server/blob/BlobStoreManagerService;->-$$Nest$mcreateSessionInternal(Lcom/android/server/blob/BlobStoreManagerService;Landroid/app/blob/BlobHandle;ILjava/lang/String;)J
 PLcom/android/server/blob/BlobStoreManagerService;->-$$Nest$mdumpBlobsLocked(Lcom/android/server/blob/BlobStoreManagerService;Landroid/util/IndentingPrintWriter;Lcom/android/server/blob/BlobStoreManagerService$DumpArgs;)V
 PLcom/android/server/blob/BlobStoreManagerService;->-$$Nest$mdumpSessionsLocked(Lcom/android/server/blob/BlobStoreManagerService;Landroid/util/IndentingPrintWriter;Lcom/android/server/blob/BlobStoreManagerService$DumpArgs;)V
-HPLcom/android/server/blob/BlobStoreManagerService;->-$$Nest$mforEachBlob(Lcom/android/server/blob/BlobStoreManagerService;Ljava/util/function/Consumer;)V
+HPLcom/android/server/blob/BlobStoreManagerService;->-$$Nest$mforEachBlob(Lcom/android/server/blob/BlobStoreManagerService;Ljava/util/function/Consumer;)V+]Lcom/android/server/blob/BlobStoreManagerService;Lcom/android/server/blob/BlobStoreManagerService;
 HPLcom/android/server/blob/BlobStoreManagerService;->-$$Nest$mforEachSessionInUser(Lcom/android/server/blob/BlobStoreManagerService;Ljava/util/function/Consumer;I)V
 PLcom/android/server/blob/BlobStoreManagerService;->-$$Nest$mgetLeasedBlobsInternal(Lcom/android/server/blob/BlobStoreManagerService;ILjava/lang/String;)Ljava/util/List;
 PLcom/android/server/blob/BlobStoreManagerService;->-$$Nest$mgetRemainingLeaseQuotaBytesInternal(Lcom/android/server/blob/BlobStoreManagerService;ILjava/lang/String;)J
 PLcom/android/server/blob/BlobStoreManagerService;->-$$Nest$mhandleUserRemoved(Lcom/android/server/blob/BlobStoreManagerService;I)V
 PLcom/android/server/blob/BlobStoreManagerService;->-$$Nest$misAllowedBlobStoreAccess(Lcom/android/server/blob/BlobStoreManagerService;ILjava/lang/String;)Z
 PLcom/android/server/blob/BlobStoreManagerService;->-$$Nest$monStateChangedInternal(Lcom/android/server/blob/BlobStoreManagerService;Lcom/android/server/blob/BlobStoreSession;)V
-PLcom/android/server/blob/BlobStoreManagerService;->-$$Nest$mopenBlobInternal(Lcom/android/server/blob/BlobStoreManagerService;Landroid/app/blob/BlobHandle;ILjava/lang/String;)Landroid/os/ParcelFileDescriptor;
+HPLcom/android/server/blob/BlobStoreManagerService;->-$$Nest$mopenBlobInternal(Lcom/android/server/blob/BlobStoreManagerService;Landroid/app/blob/BlobHandle;ILjava/lang/String;)Landroid/os/ParcelFileDescriptor;
 PLcom/android/server/blob/BlobStoreManagerService;->-$$Nest$mopenSessionInternal(Lcom/android/server/blob/BlobStoreManagerService;JILjava/lang/String;)Lcom/android/server/blob/BlobStoreSession;
 PLcom/android/server/blob/BlobStoreManagerService;->-$$Nest$mpullBlobData(Lcom/android/server/blob/BlobStoreManagerService;ILjava/util/List;)I
 PLcom/android/server/blob/BlobStoreManagerService;->-$$Nest$mqueryBlobsForUserInternal(Lcom/android/server/blob/BlobStoreManagerService;I)Ljava/util/List;
@@ -17033,18 +17934,18 @@
 HSPLcom/android/server/blob/BlobStoreManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/blob/BlobStoreManagerService;-><init>(Landroid/content/Context;Lcom/android/server/blob/BlobStoreManagerService$Injector;)V
 PLcom/android/server/blob/BlobStoreManagerService;->acquireLeaseInternal(Landroid/app/blob/BlobHandle;ILjava/lang/CharSequence;JILjava/lang/String;)V
-PLcom/android/server/blob/BlobStoreManagerService;->addActiveBlobIdLocked(J)V
-PLcom/android/server/blob/BlobStoreManagerService;->addBlobLocked(Lcom/android/server/blob/BlobMetadata;)V
+HSPLcom/android/server/blob/BlobStoreManagerService;->addActiveBlobIdLocked(J)V
+HSPLcom/android/server/blob/BlobStoreManagerService;->addBlobLocked(Lcom/android/server/blob/BlobMetadata;)V
 PLcom/android/server/blob/BlobStoreManagerService;->addSessionForUserLocked(Lcom/android/server/blob/BlobStoreSession;I)V
 PLcom/android/server/blob/BlobStoreManagerService;->createSessionInternal(Landroid/app/blob/BlobHandle;ILjava/lang/String;)J
 PLcom/android/server/blob/BlobStoreManagerService;->deleteBlobLocked(Lcom/android/server/blob/BlobMetadata;)V
 PLcom/android/server/blob/BlobStoreManagerService;->deleteSessionLocked(Lcom/android/server/blob/BlobStoreSession;)V
 PLcom/android/server/blob/BlobStoreManagerService;->dumpBlobsLocked(Landroid/util/IndentingPrintWriter;Lcom/android/server/blob/BlobStoreManagerService$DumpArgs;)V
 PLcom/android/server/blob/BlobStoreManagerService;->dumpSessionsLocked(Landroid/util/IndentingPrintWriter;Lcom/android/server/blob/BlobStoreManagerService$DumpArgs;)V
-HPLcom/android/server/blob/BlobStoreManagerService;->forEachBlob(Ljava/util/function/Consumer;)V
+HPLcom/android/server/blob/BlobStoreManagerService;->forEachBlob(Ljava/util/function/Consumer;)V+]Lcom/android/server/blob/BlobStoreManagerService;Lcom/android/server/blob/BlobStoreManagerService;
 PLcom/android/server/blob/BlobStoreManagerService;->forEachBlobLocked(Ljava/util/function/BiConsumer;)V
 HPLcom/android/server/blob/BlobStoreManagerService;->forEachBlobLocked(Ljava/util/function/Consumer;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/function/Consumer;megamorphic_types
-HPLcom/android/server/blob/BlobStoreManagerService;->forEachSessionInUser(Ljava/util/function/Consumer;I)V
+HPLcom/android/server/blob/BlobStoreManagerService;->forEachSessionInUser(Ljava/util/function/Consumer;I)V+]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Lcom/android/server/blob/BlobStoreManagerService;Lcom/android/server/blob/BlobStoreManagerService;
 PLcom/android/server/blob/BlobStoreManagerService;->generateNextSessionIdLocked()J
 HSPLcom/android/server/blob/BlobStoreManagerService;->getAllPackages()Landroid/util/SparseArray;
 PLcom/android/server/blob/BlobStoreManagerService;->getCommittedBlobsCountLocked(ILjava/lang/String;)I
@@ -17053,18 +17954,18 @@
 PLcom/android/server/blob/BlobStoreManagerService;->getRemainingLeaseQuotaBytesInternal(ILjava/lang/String;)J
 PLcom/android/server/blob/BlobStoreManagerService;->getSessionsCountLocked(ILjava/lang/String;)I
 PLcom/android/server/blob/BlobStoreManagerService;->getTotalUsageBytesLocked(ILjava/lang/String;)J
-HPLcom/android/server/blob/BlobStoreManagerService;->getUserSessionsLocked(I)Landroid/util/LongSparseArray;
+HPLcom/android/server/blob/BlobStoreManagerService;->getUserSessionsLocked(I)Landroid/util/LongSparseArray;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/blob/BlobStoreManagerService;->handleIdleMaintenanceLocked()V
 PLcom/android/server/blob/BlobStoreManagerService;->handlePackageRemoved(Ljava/lang/String;I)V
 PLcom/android/server/blob/BlobStoreManagerService;->handleUserRemoved(I)V
 HSPLcom/android/server/blob/BlobStoreManagerService;->initializeMessageHandler()Landroid/os/Handler;
-PLcom/android/server/blob/BlobStoreManagerService;->isAllowedBlobStoreAccess(ILjava/lang/String;)Z
+HPLcom/android/server/blob/BlobStoreManagerService;->isAllowedBlobStoreAccess(ILjava/lang/String;)Z
 PLcom/android/server/blob/BlobStoreManagerService;->lambda$getCommittedBlobsCountLocked$1(Ljava/lang/String;ILjava/util/concurrent/atomic/AtomicInteger;Lcom/android/server/blob/BlobMetadata;)V
 PLcom/android/server/blob/BlobStoreManagerService;->lambda$getLeasedBlobsCountLocked$2(Ljava/lang/String;ILjava/util/concurrent/atomic/AtomicInteger;Lcom/android/server/blob/BlobMetadata;)V
 PLcom/android/server/blob/BlobStoreManagerService;->lambda$getLeasedBlobsInternal$10(Ljava/lang/String;ILjava/util/ArrayList;Lcom/android/server/blob/BlobMetadata;)V
 PLcom/android/server/blob/BlobStoreManagerService;->lambda$getTotalUsageBytesLocked$3(Ljava/lang/String;ILjava/util/concurrent/atomic/AtomicLong;Lcom/android/server/blob/BlobMetadata;)V
-PLcom/android/server/blob/BlobStoreManagerService;->lambda$handleIdleMaintenanceLocked$15(Ljava/util/ArrayList;Ljava/util/Map$Entry;)Z
-PLcom/android/server/blob/BlobStoreManagerService;->lambda$handlePackageRemoved$13(Ljava/lang/String;ILjava/util/Map$Entry;)Z
+HPLcom/android/server/blob/BlobStoreManagerService;->lambda$handleIdleMaintenanceLocked$15(Ljava/util/ArrayList;Ljava/util/Map$Entry;)Z
+HPLcom/android/server/blob/BlobStoreManagerService;->lambda$handlePackageRemoved$13(Ljava/lang/String;ILjava/util/Map$Entry;)Z
 PLcom/android/server/blob/BlobStoreManagerService;->lambda$onStateChangedInternal$11(Lcom/android/server/blob/BlobStoreSession;)V
 PLcom/android/server/blob/BlobStoreManagerService;->lambda$pullBlobData$18(Ljava/util/List;ILcom/android/server/blob/BlobMetadata;)V
 PLcom/android/server/blob/BlobStoreManagerService;->lambda$queryBlobsForUserInternal$7(ILjava/util/function/Function;Landroid/app/blob/BlobHandle;Ljava/util/ArrayList;Lcom/android/server/blob/BlobMetadata$Leasee;)V
@@ -17085,13 +17986,13 @@
 HSPLcom/android/server/blob/BlobStoreManagerService;->registerReceivers()V
 PLcom/android/server/blob/BlobStoreManagerService;->releaseLeaseInternal(Landroid/app/blob/BlobHandle;ILjava/lang/String;)V
 PLcom/android/server/blob/BlobStoreManagerService;->runIdleMaintenance()V
-PLcom/android/server/blob/BlobStoreManagerService;->verifyCallingPackage(ILjava/lang/String;)V
+HPLcom/android/server/blob/BlobStoreManagerService;->verifyCallingPackage(ILjava/lang/String;)V
 PLcom/android/server/blob/BlobStoreManagerService;->writeBlobSessions()V
 PLcom/android/server/blob/BlobStoreManagerService;->writeBlobSessionsAsync()V
 PLcom/android/server/blob/BlobStoreManagerService;->writeBlobSessionsLocked()V
 PLcom/android/server/blob/BlobStoreManagerService;->writeBlobsInfo()V
 PLcom/android/server/blob/BlobStoreManagerService;->writeBlobsInfoAsync()V
-PLcom/android/server/blob/BlobStoreManagerService;->writeBlobsInfoLocked()V
+HPLcom/android/server/blob/BlobStoreManagerService;->writeBlobsInfoLocked()V
 PLcom/android/server/blob/BlobStoreSession$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/blob/BlobStoreSession;Landroid/os/RevocableFileDescriptor;)V
 PLcom/android/server/blob/BlobStoreSession$$ExternalSyntheticLambda0;->onClose(Ljava/io/IOException;)V
 PLcom/android/server/blob/BlobStoreSession;->$r8$lambda$RQ7jEAXanfbmh5XPIfRGkx9Tpjo(Lcom/android/server/blob/BlobStoreSession;Landroid/os/RevocableFileDescriptor;Ljava/io/IOException;)V
@@ -17145,11 +18046,11 @@
 PLcom/android/server/camera/CameraServiceProxy$DisplayWindowListener;->onFixedRotationFinished(I)V
 PLcom/android/server/camera/CameraServiceProxy$DisplayWindowListener;->onFixedRotationStarted(II)V
 PLcom/android/server/camera/CameraServiceProxy$EventWriterTask;-><init>(Lcom/android/server/camera/CameraServiceProxy;Ljava/util/ArrayList;)V
-HPLcom/android/server/camera/CameraServiceProxy$EventWriterTask;->logCameraUsageEvent(Lcom/android/server/camera/CameraServiceProxy$CameraUsageEvent;)V
+HPLcom/android/server/camera/CameraServiceProxy$EventWriterTask;->logCameraUsageEvent(Lcom/android/server/camera/CameraServiceProxy$CameraUsageEvent;)V+]Landroid/hardware/CameraStreamStats;Landroid/hardware/CameraStreamStats;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/camera/CameraServiceProxy$CameraUsageEvent;Lcom/android/server/camera/CameraServiceProxy$CameraUsageEvent;
 HPLcom/android/server/camera/CameraServiceProxy$EventWriterTask;->run()V
 PLcom/android/server/camera/CameraServiceProxy$TaskInfo;-><init>()V
 PLcom/android/server/camera/CameraServiceProxy;->$r8$lambda$xKzwSr6VW_ozKS_nbX2lh0LGArc(Lcom/android/server/camera/CameraServiceProxy;Ljava/lang/Boolean;)V
-PLcom/android/server/camera/CameraServiceProxy;->-$$Nest$fgetmContext(Lcom/android/server/camera/CameraServiceProxy;)Landroid/content/Context;
+HPLcom/android/server/camera/CameraServiceProxy;->-$$Nest$fgetmContext(Lcom/android/server/camera/CameraServiceProxy;)Landroid/content/Context;
 PLcom/android/server/camera/CameraServiceProxy;->-$$Nest$fgetmEnabledCameraUsers(Lcom/android/server/camera/CameraServiceProxy;)Ljava/util/Set;
 PLcom/android/server/camera/CameraServiceProxy;->-$$Nest$fgetmLastUser(Lcom/android/server/camera/CameraServiceProxy;)I
 PLcom/android/server/camera/CameraServiceProxy;->-$$Nest$fgetmLock(Lcom/android/server/camera/CameraServiceProxy;)Ljava/lang/Object;
@@ -17193,7 +18094,7 @@
 PLcom/android/server/camera/CameraStatsJobService;-><clinit>()V
 PLcom/android/server/camera/CameraStatsJobService;-><init>()V
 PLcom/android/server/camera/CameraStatsJobService;->onStartJob(Landroid/app/job/JobParameters;)Z
-PLcom/android/server/camera/CameraStatsJobService;->schedule(Landroid/content/Context;)V
+HPLcom/android/server/camera/CameraStatsJobService;->schedule(Landroid/content/Context;)V
 HSPLcom/android/server/clipboard/ClipboardService$$ExternalSyntheticLambda1;-><init>()V
 PLcom/android/server/clipboard/ClipboardService$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/clipboard/ClipboardService$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/clipboard/ClipboardService;)V
@@ -17234,11 +18135,11 @@
 PLcom/android/server/clipboard/ClipboardService;->-$$Nest$maddActiveOwnerLocked(Lcom/android/server/clipboard/ClipboardService;ILjava/lang/String;)V
 PLcom/android/server/clipboard/ClipboardService;->-$$Nest$mcheckDataOwner(Lcom/android/server/clipboard/ClipboardService;Landroid/content/ClipData;I)V
 PLcom/android/server/clipboard/ClipboardService;->-$$Nest$mclipboardAccessAllowed(Lcom/android/server/clipboard/ClipboardService;ILjava/lang/String;II)Z
-PLcom/android/server/clipboard/ClipboardService;->-$$Nest$mclipboardAccessAllowed(Lcom/android/server/clipboard/ClipboardService;ILjava/lang/String;IIZ)Z
+HPLcom/android/server/clipboard/ClipboardService;->-$$Nest$mclipboardAccessAllowed(Lcom/android/server/clipboard/ClipboardService;ILjava/lang/String;IIZ)Z
 HPLcom/android/server/clipboard/ClipboardService;->-$$Nest$mgetClipboardLocked(Lcom/android/server/clipboard/ClipboardService;I)Lcom/android/server/clipboard/ClipboardService$PerUserClipboard;
 HPLcom/android/server/clipboard/ClipboardService;->-$$Nest$mgetIntendingUid(Lcom/android/server/clipboard/ClipboardService;Ljava/lang/String;I)I
 PLcom/android/server/clipboard/ClipboardService;->-$$Nest$mgetIntendingUserId(Lcom/android/server/clipboard/ClipboardService;Ljava/lang/String;I)I
-PLcom/android/server/clipboard/ClipboardService;->-$$Nest$misDeviceLocked(Lcom/android/server/clipboard/ClipboardService;I)Z
+HPLcom/android/server/clipboard/ClipboardService;->-$$Nest$misDeviceLocked(Lcom/android/server/clipboard/ClipboardService;I)Z
 PLcom/android/server/clipboard/ClipboardService;->-$$Nest$mnotifyTextClassifierLocked(Lcom/android/server/clipboard/ClipboardService;Lcom/android/server/clipboard/ClipboardService$PerUserClipboard;Ljava/lang/String;I)V
 PLcom/android/server/clipboard/ClipboardService;->-$$Nest$msetPrimaryClipInternalLocked(Lcom/android/server/clipboard/ClipboardService;Landroid/content/ClipData;ILjava/lang/String;)V
 PLcom/android/server/clipboard/ClipboardService;->-$$Nest$mshowAccessNotificationLocked(Lcom/android/server/clipboard/ClipboardService;Ljava/lang/String;IILcom/android/server/clipboard/ClipboardService$PerUserClipboard;)V
@@ -17250,21 +18151,21 @@
 PLcom/android/server/clipboard/ClipboardService;->checkItemOwner(Landroid/content/ClipData$Item;I)V
 PLcom/android/server/clipboard/ClipboardService;->checkUriOwner(Landroid/net/Uri;I)V
 PLcom/android/server/clipboard/ClipboardService;->clipboardAccessAllowed(ILjava/lang/String;II)Z
-HPLcom/android/server/clipboard/ClipboardService;->clipboardAccessAllowed(ILjava/lang/String;IIZ)Z
+HPLcom/android/server/clipboard/ClipboardService;->clipboardAccessAllowed(ILjava/lang/String;IIZ)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/autofill/AutofillManagerInternal;Lcom/android/server/autofill/AutofillManagerService$LocalService;]Lcom/android/server/clipboard/ClipboardService;Lcom/android/server/clipboard/ClipboardService;]Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/wm/WindowManagerService$LocalService;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Lcom/android/server/companion/virtual/VirtualDeviceManagerInternal;Lcom/android/server/companion/virtual/VirtualDeviceManagerService$LocalService;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Lcom/android/server/contentcapture/ContentCaptureManagerInternal;Lcom/android/server/contentcapture/ContentCaptureManagerService$LocalService;
 PLcom/android/server/clipboard/ClipboardService;->createTextClassificationManagerAsUser(I)Landroid/view/textclassifier/TextClassificationManager;
 PLcom/android/server/clipboard/ClipboardService;->doClassification(Ljava/lang/CharSequence;Landroid/content/ClipData;Landroid/view/textclassifier/TextClassifier;I)V
-HPLcom/android/server/clipboard/ClipboardService;->getClipboardLocked(I)Lcom/android/server/clipboard/ClipboardService$PerUserClipboard;
-HPLcom/android/server/clipboard/ClipboardService;->getIntendingUid(Ljava/lang/String;I)I
+HPLcom/android/server/clipboard/ClipboardService;->getClipboardLocked(I)Lcom/android/server/clipboard/ClipboardService$PerUserClipboard;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HPLcom/android/server/clipboard/ClipboardService;->getIntendingUid(Ljava/lang/String;I)I+]Lcom/android/server/clipboard/ClipboardService;Lcom/android/server/clipboard/ClipboardService;
 HPLcom/android/server/clipboard/ClipboardService;->getIntendingUserId(Ljava/lang/String;I)I
 PLcom/android/server/clipboard/ClipboardService;->getRelatedProfiles(I)Ljava/util/List;
 PLcom/android/server/clipboard/ClipboardService;->grantItemPermission(Landroid/content/ClipData$Item;ILjava/lang/String;I)V
 PLcom/android/server/clipboard/ClipboardService;->grantUriPermission(Landroid/net/Uri;ILjava/lang/String;I)V
 PLcom/android/server/clipboard/ClipboardService;->hasRestriction(Ljava/lang/String;I)Z
 PLcom/android/server/clipboard/ClipboardService;->hasTextLocked(Lcom/android/server/clipboard/ClipboardService$PerUserClipboard;Ljava/lang/CharSequence;)Z
-HPLcom/android/server/clipboard/ClipboardService;->isDefaultIme(ILjava/lang/String;)Z
-HPLcom/android/server/clipboard/ClipboardService;->isDeviceLocked(I)Z
+HPLcom/android/server/clipboard/ClipboardService;->isDefaultIme(ILjava/lang/String;)Z+]Lcom/android/server/SystemService;Lcom/android/server/clipboard/ClipboardService;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/ComponentName;Landroid/content/ComponentName;
+HPLcom/android/server/clipboard/ClipboardService;->isDeviceLocked(I)Z+]Lcom/android/server/SystemService;Lcom/android/server/clipboard/ClipboardService;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/app/KeyguardManager;Landroid/app/KeyguardManager;
 PLcom/android/server/clipboard/ClipboardService;->isInternalSysWindowAppWithWindowFocus(Ljava/lang/String;)Z
-PLcom/android/server/clipboard/ClipboardService;->isText(Landroid/content/ClipData;)Z
+HPLcom/android/server/clipboard/ClipboardService;->isText(Landroid/content/ClipData;)Z
 PLcom/android/server/clipboard/ClipboardService;->lambda$new$1(Landroid/content/ClipData;)V
 PLcom/android/server/clipboard/ClipboardService;->lambda$new$2(Landroid/provider/DeviceConfig$Properties;)V
 PLcom/android/server/clipboard/ClipboardService;->lambda$notifyTextClassifierLocked$5(Ljava/lang/String;Lcom/android/server/clipboard/ClipboardService$PerUserClipboard;Landroid/view/textclassifier/TextClassifier;)V
@@ -17361,7 +18262,7 @@
 PLcom/android/server/companion/AssociationStore$OnChangeListener;->onAssociationChanged(ILandroid/companion/AssociationInfo;)V
 PLcom/android/server/companion/AssociationStore$OnChangeListener;->onAssociationUpdated(Landroid/companion/AssociationInfo;Z)V
 PLcom/android/server/companion/AssociationStoreImpl$$ExternalSyntheticLambda0;-><init>(ILjava/lang/String;)V
-PLcom/android/server/companion/AssociationStoreImpl$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/companion/AssociationStoreImpl$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
 HPLcom/android/server/companion/AssociationStoreImpl$$ExternalSyntheticLambda1;-><init>(Ljava/lang/String;)V
 HPLcom/android/server/companion/AssociationStoreImpl$$ExternalSyntheticLambda1;->test(Ljava/lang/Object;)Z
 PLcom/android/server/companion/AssociationStoreImpl$$ExternalSyntheticLambda2;-><init>()V
@@ -17376,30 +18277,33 @@
 PLcom/android/server/companion/AssociationStoreImpl;->addAssociation(Landroid/companion/AssociationInfo;)V
 PLcom/android/server/companion/AssociationStoreImpl;->broadcastChange(ILandroid/companion/AssociationInfo;)V
 HSPLcom/android/server/companion/AssociationStoreImpl;->clearLocked()V
+PLcom/android/server/companion/AssociationStoreImpl;->dump(Ljava/io/PrintWriter;)V
 HPLcom/android/server/companion/AssociationStoreImpl;->getAssociationById(I)Landroid/companion/AssociationInfo;
 PLcom/android/server/companion/AssociationStoreImpl;->getAssociations()Ljava/util/Collection;
 HPLcom/android/server/companion/AssociationStoreImpl;->getAssociationsByAddress(Ljava/lang/String;)Ljava/util/List;
 HPLcom/android/server/companion/AssociationStoreImpl;->getAssociationsForPackage(ILjava/lang/String;)Ljava/util/List;+]Lcom/android/server/companion/AssociationStoreImpl;Lcom/android/server/companion/AssociationStoreImpl;
 PLcom/android/server/companion/AssociationStoreImpl;->getAssociationsForPackageWithAddress(ILjava/lang/String;Ljava/lang/String;)Landroid/companion/AssociationInfo;
 HSPLcom/android/server/companion/AssociationStoreImpl;->getAssociationsForUser(I)Ljava/util/List;+]Lcom/android/server/companion/AssociationStoreImpl;Lcom/android/server/companion/AssociationStoreImpl;
-HSPLcom/android/server/companion/AssociationStoreImpl;->getAssociationsForUserLocked(I)Ljava/util/List;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Collection;Ljava/util/HashMap$Values;]Landroid/companion/AssociationInfo;Landroid/companion/AssociationInfo;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Iterator;Ljava/util/HashMap$ValueIterator;
+HSPLcom/android/server/companion/AssociationStoreImpl;->getAssociationsForUserLocked(I)Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Collection;Ljava/util/HashMap$Values;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/companion/AssociationInfo;Landroid/companion/AssociationInfo;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Iterator;Ljava/util/HashMap$ValueIterator;
 PLcom/android/server/companion/AssociationStoreImpl;->invalidateCacheForUserLocked(I)V
 PLcom/android/server/companion/AssociationStoreImpl;->lambda$addAssociation$0(Landroid/net/MacAddress;)Ljava/util/Set;
-HPLcom/android/server/companion/AssociationStoreImpl;->lambda$getAssociationsForPackage$2(Ljava/lang/String;Landroid/companion/AssociationInfo;)Z
+HPLcom/android/server/companion/AssociationStoreImpl;->lambda$getAssociationsForPackage$2(Ljava/lang/String;Landroid/companion/AssociationInfo;)Z+]Landroid/companion/AssociationInfo;Landroid/companion/AssociationInfo;
 PLcom/android/server/companion/AssociationStoreImpl;->lambda$getAssociationsForPackageWithAddress$3(ILjava/lang/String;Landroid/companion/AssociationInfo;)Z
 HSPLcom/android/server/companion/AssociationStoreImpl;->lambda$setAssociationsLocked$5(Landroid/net/MacAddress;)Ljava/util/Set;
 HSPLcom/android/server/companion/AssociationStoreImpl;->registerListener(Lcom/android/server/companion/AssociationStore$OnChangeListener;)V
 PLcom/android/server/companion/AssociationStoreImpl;->removeAssociation(I)V
 HSPLcom/android/server/companion/AssociationStoreImpl;->setAssociations(Ljava/util/Collection;)V
 HSPLcom/android/server/companion/AssociationStoreImpl;->setAssociationsLocked(Ljava/util/Collection;)V
-PLcom/android/server/companion/AssociationStoreImpl;->updateAssociation(Landroid/companion/AssociationInfo;)V
+HPLcom/android/server/companion/AssociationStoreImpl;->updateAssociation(Landroid/companion/AssociationInfo;)V
 PLcom/android/server/companion/CompanionApplicationController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/companion/CompanionApplicationController;IZ)V
 PLcom/android/server/companion/CompanionApplicationController$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/companion/CompanionApplicationController$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/companion/CompanionApplicationController;)V
 PLcom/android/server/companion/CompanionApplicationController$$ExternalSyntheticLambda1;->onBindingDied(ILjava/lang/String;)V
+PLcom/android/server/companion/CompanionApplicationController$AndroidPackageMap;->-$$Nest$mdump(Lcom/android/server/companion/CompanionApplicationController$AndroidPackageMap;Ljava/io/PrintWriter;)V
 HSPLcom/android/server/companion/CompanionApplicationController$AndroidPackageMap;-><init>()V
 HSPLcom/android/server/companion/CompanionApplicationController$AndroidPackageMap;-><init>(Lcom/android/server/companion/CompanionApplicationController$AndroidPackageMap-IA;)V
 PLcom/android/server/companion/CompanionApplicationController$AndroidPackageMap;->containsValueForPackage(ILjava/lang/String;)Z
+PLcom/android/server/companion/CompanionApplicationController$AndroidPackageMap;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/companion/CompanionApplicationController$AndroidPackageMap;->getValueForPackage(ILjava/lang/String;)Ljava/lang/Object;
 PLcom/android/server/companion/CompanionApplicationController$AndroidPackageMap;->removePackage(ILjava/lang/String;)Ljava/lang/Object;
 PLcom/android/server/companion/CompanionApplicationController$AndroidPackageMap;->setValueForPackage(ILjava/lang/String;Ljava/lang/Object;)V
@@ -17414,7 +18318,8 @@
 PLcom/android/server/companion/CompanionApplicationController;->$r8$lambda$_c9TJtQrmIKPrcaxW_l6Na4JVB0(Lcom/android/server/companion/CompanionApplicationController;IZLandroid/content/ComponentName;)Lcom/android/server/companion/CompanionDeviceServiceConnector;
 PLcom/android/server/companion/CompanionApplicationController;->-$$Nest$fgetmContext(Lcom/android/server/companion/CompanionApplicationController;)Landroid/content/Context;
 HSPLcom/android/server/companion/CompanionApplicationController;-><init>(Landroid/content/Context;Lcom/android/server/companion/CompanionApplicationController$Callback;)V
-PLcom/android/server/companion/CompanionApplicationController;->bindCompanionApplication(ILjava/lang/String;Z)V
+HPLcom/android/server/companion/CompanionApplicationController;->bindCompanionApplication(ILjava/lang/String;Z)V
+PLcom/android/server/companion/CompanionApplicationController;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/companion/CompanionApplicationController;->getPrimaryServiceConnector(ILjava/lang/String;)Lcom/android/server/companion/CompanionDeviceServiceConnector;
 PLcom/android/server/companion/CompanionApplicationController;->isCompanionApplicationBound(ILjava/lang/String;)Z
 PLcom/android/server/companion/CompanionApplicationController;->lambda$bindCompanionApplication$0(IZLandroid/content/ComponentName;)Lcom/android/server/companion/CompanionDeviceServiceConnector;
@@ -17453,6 +18358,7 @@
 PLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->associate(Landroid/companion/AssociationRequest;Landroid/companion/IAssociationRequestCallback;Ljava/lang/String;I)V
 PLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->canPairWithoutPrompt(Ljava/lang/String;Ljava/lang/String;I)Z
 PLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->checkCanCallNotificationApi(Ljava/lang/String;)V
+PLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->disassociate(I)V
 PLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->getAllAssociationsForUser(I)Ljava/util/List;
 HPLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->getAssociations(Ljava/lang/String;I)Ljava/util/List;+]Lcom/android/server/SystemService;Lcom/android/server/companion/CompanionDeviceManagerService;]Lcom/android/server/companion/AssociationStoreImpl;Lcom/android/server/companion/AssociationStoreImpl;
@@ -17461,6 +18367,7 @@
 PLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->legacyDisassociate(Ljava/lang/String;Ljava/lang/String;I)V
 PLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->notifyDeviceAppeared(I)V
 PLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->notifyDeviceDisappeared(I)V
+PLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->onShellCommand(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;Landroid/os/ShellCallback;Landroid/os/ResultReceiver;)V
 HPLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HPLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->registerDevicePresenceListenerActive(Ljava/lang/String;Ljava/lang/String;Z)V
 PLcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;->registerDevicePresenceListenerService(Ljava/lang/String;Ljava/lang/String;I)V
@@ -17511,6 +18418,7 @@
 PLcom/android/server/companion/CompanionDeviceManagerService;->lambda$markIdAsPreviouslyUsedForPackage$1(Ljava/lang/String;)Ljava/util/Set;
 PLcom/android/server/companion/CompanionDeviceManagerService;->lambda$notifyListeners$0(ILjava/util/List;Landroid/companion/IOnAssociationsChangedListener;Ljava/lang/Object;)V
 PLcom/android/server/companion/CompanionDeviceManagerService;->lambda$updateSpecialAccessPermissionForAssociatedPackage$5(Landroid/content/pm/PackageInfo;)V
+PLcom/android/server/companion/CompanionDeviceManagerService;->legacyCreateAssociation(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/companion/CompanionDeviceManagerService;->loadAssociationsFromDisk()V
 PLcom/android/server/companion/CompanionDeviceManagerService;->markIdAsPreviouslyUsedForPackage(IILjava/lang/String;)V
 PLcom/android/server/companion/CompanionDeviceManagerService;->maybeGrantAutoRevokeExemptions()V
@@ -17527,8 +18435,8 @@
 PLcom/android/server/companion/CompanionDeviceManagerService;->persistStateForUser(I)V
 PLcom/android/server/companion/CompanionDeviceManagerService;->removeInactiveSelfManagedAssociations()V
 PLcom/android/server/companion/CompanionDeviceManagerService;->shouldBindPackage(ILjava/lang/String;)Z
-PLcom/android/server/companion/CompanionDeviceManagerService;->updateAtm(ILjava/util/List;)V
-PLcom/android/server/companion/CompanionDeviceManagerService;->updateSpecialAccessPermissionAsSystem(Landroid/content/pm/PackageInfo;)V
+HPLcom/android/server/companion/CompanionDeviceManagerService;->updateAtm(ILjava/util/List;)V
+HPLcom/android/server/companion/CompanionDeviceManagerService;->updateSpecialAccessPermissionAsSystem(Landroid/content/pm/PackageInfo;)V
 PLcom/android/server/companion/CompanionDeviceManagerService;->updateSpecialAccessPermissionForAssociatedPackage(Landroid/companion/AssociationInfo;)V
 PLcom/android/server/companion/CompanionDeviceServiceConnector$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/companion/CompanionDeviceServiceConnector;)V
 PLcom/android/server/companion/CompanionDeviceServiceConnector$$ExternalSyntheticLambda0;->runNoResult(Ljava/lang/Object;)V
@@ -17542,6 +18450,7 @@
 PLcom/android/server/companion/CompanionDeviceServiceConnector;-><init>(Landroid/content/Context;ILandroid/content/ComponentName;I)V
 PLcom/android/server/companion/CompanionDeviceServiceConnector;->binderAsInterface(Landroid/os/IBinder;)Landroid/companion/ICompanionDeviceService;
 PLcom/android/server/companion/CompanionDeviceServiceConnector;->binderAsInterface(Landroid/os/IBinder;)Landroid/os/IInterface;
+PLcom/android/server/companion/CompanionDeviceServiceConnector;->binderDied()V
 PLcom/android/server/companion/CompanionDeviceServiceConnector;->buildIntent(Landroid/content/ComponentName;)Landroid/content/Intent;
 PLcom/android/server/companion/CompanionDeviceServiceConnector;->getAutoDisconnectTimeoutMs()J
 PLcom/android/server/companion/CompanionDeviceServiceConnector;->getJobHandler()Landroid/os/Handler;
@@ -17557,6 +18466,9 @@
 PLcom/android/server/companion/CompanionDeviceServiceConnector;->postOnDeviceDisappeared(Landroid/companion/AssociationInfo;)V
 PLcom/android/server/companion/CompanionDeviceServiceConnector;->postUnbind()V
 PLcom/android/server/companion/CompanionDeviceServiceConnector;->setListener(Lcom/android/server/companion/CompanionDeviceServiceConnector$Listener;)V
+PLcom/android/server/companion/CompanionDeviceShellCommand;-><init>(Lcom/android/server/companion/CompanionDeviceManagerService;Lcom/android/server/companion/AssociationStore;Lcom/android/server/companion/presence/CompanionDevicePresenceMonitor;)V
+PLcom/android/server/companion/CompanionDeviceShellCommand;->getNextIntArgRequired()I
+PLcom/android/server/companion/CompanionDeviceShellCommand;->onCommand(Ljava/lang/String;)I
 HSPLcom/android/server/companion/DataStoreUtils;->createStorageFileForUser(ILjava/lang/String;)Landroid/util/AtomicFile;
 HSPLcom/android/server/companion/DataStoreUtils;->getBaseStorageFileForUser(ILjava/lang/String;)Ljava/io/File;
 HSPLcom/android/server/companion/DataStoreUtils;->isEndOfTag(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Z
@@ -17565,6 +18477,7 @@
 PLcom/android/server/companion/InactiveAssociationsRemovalService;-><clinit>()V
 PLcom/android/server/companion/InactiveAssociationsRemovalService;-><init>()V
 PLcom/android/server/companion/InactiveAssociationsRemovalService;->onStartJob(Landroid/app/job/JobParameters;)Z
+PLcom/android/server/companion/InactiveAssociationsRemovalService;->onStopJob(Landroid/app/job/JobParameters;)Z
 PLcom/android/server/companion/InactiveAssociationsRemovalService;->schedule(Landroid/content/Context;)V
 PLcom/android/server/companion/MetricUtils;-><clinit>()V
 PLcom/android/server/companion/MetricUtils;->logCreateAssociation(Ljava/lang/String;)V
@@ -17641,7 +18554,7 @@
 PLcom/android/server/companion/presence/BleCompanionDeviceScanner$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/companion/presence/BleCompanionDeviceScanner;)V
 PLcom/android/server/companion/presence/BleCompanionDeviceScanner$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/companion/presence/BleCompanionDeviceScanner$1;-><init>(Lcom/android/server/companion/presence/BleCompanionDeviceScanner;)V
-PLcom/android/server/companion/presence/BleCompanionDeviceScanner$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/companion/presence/BleCompanionDeviceScanner$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/companion/presence/BleCompanionDeviceScanner$2;-><init>(Lcom/android/server/companion/presence/BleCompanionDeviceScanner;)V
 PLcom/android/server/companion/presence/BleCompanionDeviceScanner$2;->onScanFailed(I)V
 PLcom/android/server/companion/presence/BleCompanionDeviceScanner$2;->onScanResult(ILandroid/bluetooth/le/ScanResult;)V
@@ -17652,7 +18565,7 @@
 PLcom/android/server/companion/presence/BleCompanionDeviceScanner$MainThreadHandler;->sendNotifyDeviceLostDelayedMessage(Landroid/bluetooth/BluetoothDevice;)V
 PLcom/android/server/companion/presence/BleCompanionDeviceScanner;->-$$Nest$fgetmMainThreadHandler(Lcom/android/server/companion/presence/BleCompanionDeviceScanner;)Lcom/android/server/companion/presence/BleCompanionDeviceScanner$MainThreadHandler;
 PLcom/android/server/companion/presence/BleCompanionDeviceScanner;->-$$Nest$fputmScanning(Lcom/android/server/companion/presence/BleCompanionDeviceScanner;Z)V
-PLcom/android/server/companion/presence/BleCompanionDeviceScanner;->-$$Nest$mcheckBleState(Lcom/android/server/companion/presence/BleCompanionDeviceScanner;)V
+HSPLcom/android/server/companion/presence/BleCompanionDeviceScanner;->-$$Nest$mcheckBleState(Lcom/android/server/companion/presence/BleCompanionDeviceScanner;)V
 PLcom/android/server/companion/presence/BleCompanionDeviceScanner;->-$$Nest$mnotifyDeviceFound(Lcom/android/server/companion/presence/BleCompanionDeviceScanner;Landroid/bluetooth/BluetoothDevice;)V
 PLcom/android/server/companion/presence/BleCompanionDeviceScanner;->-$$Nest$mnotifyDeviceLost(Lcom/android/server/companion/presence/BleCompanionDeviceScanner;Landroid/bluetooth/BluetoothDevice;)V
 HSPLcom/android/server/companion/presence/BleCompanionDeviceScanner;-><clinit>()V
@@ -17665,7 +18578,7 @@
 PLcom/android/server/companion/presence/BleCompanionDeviceScanner;->onAssociationChanged(ILandroid/companion/AssociationInfo;)V
 HSPLcom/android/server/companion/presence/BleCompanionDeviceScanner;->registerBluetoothStateBroadcastReceiver(Landroid/content/Context;)V
 PLcom/android/server/companion/presence/BleCompanionDeviceScanner;->restartScan()V
-PLcom/android/server/companion/presence/BleCompanionDeviceScanner;->startScan()V
+HPLcom/android/server/companion/presence/BleCompanionDeviceScanner;->startScan()V
 PLcom/android/server/companion/presence/BleCompanionDeviceScanner;->stopScanIfNeeded()V
 HSPLcom/android/server/companion/presence/BluetoothCompanionDeviceConnectionListener;-><init>(Lcom/android/server/companion/AssociationStore;Lcom/android/server/companion/presence/BluetoothCompanionDeviceConnectionListener$Callback;)V
 HSPLcom/android/server/companion/presence/BluetoothCompanionDeviceConnectionListener;->init(Landroid/bluetooth/BluetoothAdapter;)V
@@ -17677,6 +18590,7 @@
 HPLcom/android/server/companion/presence/BluetoothCompanionDeviceConnectionListener;->onDeviceDisconnected(Landroid/bluetooth/BluetoothDevice;I)V
 HSPLcom/android/server/companion/presence/CompanionDevicePresenceMonitor$SimulatedDevicePresenceSchedulerHelper;-><init>(Lcom/android/server/companion/presence/CompanionDevicePresenceMonitor;)V
 HSPLcom/android/server/companion/presence/CompanionDevicePresenceMonitor;-><init>(Lcom/android/server/companion/AssociationStore;Lcom/android/server/companion/presence/CompanionDevicePresenceMonitor$Callback;)V
+PLcom/android/server/companion/presence/CompanionDevicePresenceMonitor;->dump(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/companion/presence/CompanionDevicePresenceMonitor;->init(Landroid/content/Context;)V
 HPLcom/android/server/companion/presence/CompanionDevicePresenceMonitor;->isDevicePresent(I)Z
 PLcom/android/server/companion/presence/CompanionDevicePresenceMonitor;->onAssociationRemoved(Landroid/companion/AssociationInfo;)V
@@ -17684,17 +18598,26 @@
 PLcom/android/server/companion/presence/CompanionDevicePresenceMonitor;->onBleCompanionDeviceLost(I)V
 PLcom/android/server/companion/presence/CompanionDevicePresenceMonitor;->onBluetoothCompanionDeviceConnected(I)V
 PLcom/android/server/companion/presence/CompanionDevicePresenceMonitor;->onBluetoothCompanionDeviceDisconnected(I)V
-PLcom/android/server/companion/presence/CompanionDevicePresenceMonitor;->onDeviceGone(Ljava/util/Set;ILjava/lang/String;)V
-PLcom/android/server/companion/presence/CompanionDevicePresenceMonitor;->onDevicePresent(Ljava/util/Set;ILjava/lang/String;)V
+HPLcom/android/server/companion/presence/CompanionDevicePresenceMonitor;->onDeviceGone(Ljava/util/Set;ILjava/lang/String;)V
+HPLcom/android/server/companion/presence/CompanionDevicePresenceMonitor;->onDevicePresent(Ljava/util/Set;ILjava/lang/String;)V
 PLcom/android/server/companion/presence/CompanionDevicePresenceMonitor;->onSelfManagedDeviceConnected(I)V
 PLcom/android/server/companion/presence/CompanionDevicePresenceMonitor;->onSelfManagedDeviceDisconnected(I)V
 PLcom/android/server/companion/presence/CompanionDevicePresenceMonitor;->onSelfManagedDeviceReporterBinderDied(I)V
+PLcom/android/server/companion/virtual/CameraAccessController$1;-><init>(Lcom/android/server/companion/virtual/CameraAccessController;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/companion/virtual/CameraAccessController$1;->onInjectionError(I)V
+PLcom/android/server/companion/virtual/CameraAccessController$1;->onInjectionSucceeded(Landroid/hardware/camera2/CameraInjectionSession;)V
+PLcom/android/server/companion/virtual/CameraAccessController$InjectionSessionData;-><init>()V
 PLcom/android/server/companion/virtual/CameraAccessController$OpenCameraInfo;-><init>()V
+PLcom/android/server/companion/virtual/CameraAccessController;->-$$Nest$monInjectionError(Lcom/android/server/companion/virtual/CameraAccessController;Ljava/lang/String;Ljava/lang/String;I)V
+PLcom/android/server/companion/virtual/CameraAccessController;->-$$Nest$monInjectionSucceeded(Lcom/android/server/companion/virtual/CameraAccessController;Ljava/lang/String;Ljava/lang/String;Landroid/hardware/camera2/CameraInjectionSession;)V
 HSPLcom/android/server/companion/virtual/CameraAccessController;-><init>(Landroid/content/Context;Lcom/android/server/companion/virtual/VirtualDeviceManagerInternal;Lcom/android/server/companion/virtual/CameraAccessController$CameraAccessBlockedCallback;)V
 PLcom/android/server/companion/virtual/CameraAccessController;->blockCameraAccessIfNeeded(Ljava/util/Set;)V
 PLcom/android/server/companion/virtual/CameraAccessController;->close()V
 PLcom/android/server/companion/virtual/CameraAccessController;->onCameraClosed(Ljava/lang/String;)V
 PLcom/android/server/companion/virtual/CameraAccessController;->onCameraOpened(Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/companion/virtual/CameraAccessController;->onInjectionError(Ljava/lang/String;Ljava/lang/String;I)V
+PLcom/android/server/companion/virtual/CameraAccessController;->onInjectionSucceeded(Ljava/lang/String;Ljava/lang/String;Landroid/hardware/camera2/CameraInjectionSession;)V
+PLcom/android/server/companion/virtual/CameraAccessController;->startBlocking(Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/companion/virtual/CameraAccessController;->startObservingIfNeeded()V
 PLcom/android/server/companion/virtual/CameraAccessController;->stopObservingIfNeeded()V
 PLcom/android/server/companion/virtual/GenericWindowPolicyController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/companion/virtual/GenericWindowPolicyController;)V
@@ -17707,16 +18630,16 @@
 PLcom/android/server/companion/virtual/GenericWindowPolicyController;->$r8$lambda$_-T4gXiz8mKaMVsLA7IybAgcwJA(Lcom/android/server/companion/virtual/GenericWindowPolicyController;Landroid/content/ComponentName;)V
 PLcom/android/server/companion/virtual/GenericWindowPolicyController;->$r8$lambda$o5UDI34916k-jAaEfo1PjSU6QGk(Lcom/android/server/companion/virtual/GenericWindowPolicyController;)V
 PLcom/android/server/companion/virtual/GenericWindowPolicyController;-><clinit>()V
-PLcom/android/server/companion/virtual/GenericWindowPolicyController;-><init>(IILandroid/util/ArraySet;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;ILandroid/companion/virtual/VirtualDeviceManager$ActivityListener;Lcom/android/server/companion/virtual/GenericWindowPolicyController$ActivityBlockedCallback;Ljava/lang/String;)V
+HPLcom/android/server/companion/virtual/GenericWindowPolicyController;-><init>(IILandroid/util/ArraySet;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;Ljava/util/Set;ILandroid/companion/virtual/VirtualDeviceManager$ActivityListener;Lcom/android/server/companion/virtual/GenericWindowPolicyController$ActivityBlockedCallback;Ljava/lang/String;)V
 PLcom/android/server/companion/virtual/GenericWindowPolicyController;->canActivityBeLaunched(Landroid/content/pm/ActivityInfo;IIZ)Z
 PLcom/android/server/companion/virtual/GenericWindowPolicyController;->canContainActivities(Ljava/util/List;I)Z
-PLcom/android/server/companion/virtual/GenericWindowPolicyController;->canContainActivity(Landroid/content/pm/ActivityInfo;II)Z
+HPLcom/android/server/companion/virtual/GenericWindowPolicyController;->canContainActivity(Landroid/content/pm/ActivityInfo;II)Z
 PLcom/android/server/companion/virtual/GenericWindowPolicyController;->canShowTasksInRecents()Z
-PLcom/android/server/companion/virtual/GenericWindowPolicyController;->containsUid(I)Z
+HPLcom/android/server/companion/virtual/GenericWindowPolicyController;->containsUid(I)Z
 PLcom/android/server/companion/virtual/GenericWindowPolicyController;->lambda$onRunningAppsChanged$1()V
 PLcom/android/server/companion/virtual/GenericWindowPolicyController;->lambda$onRunningAppsChanged$2(Landroid/util/ArraySet;)V
 PLcom/android/server/companion/virtual/GenericWindowPolicyController;->lambda$onTopActivityChanged$0(Landroid/content/ComponentName;)V
-PLcom/android/server/companion/virtual/GenericWindowPolicyController;->onRunningAppsChanged(Landroid/util/ArraySet;)V
+HPLcom/android/server/companion/virtual/GenericWindowPolicyController;->onRunningAppsChanged(Landroid/util/ArraySet;)V
 PLcom/android/server/companion/virtual/GenericWindowPolicyController;->onTopActivityChanged(Landroid/content/ComponentName;I)V
 PLcom/android/server/companion/virtual/GenericWindowPolicyController;->registerRunningAppsChangedListener(Lcom/android/server/companion/virtual/GenericWindowPolicyController$RunningAppsChangedListener;)V
 PLcom/android/server/companion/virtual/GenericWindowPolicyController;->setDisplayId(I)V
@@ -17730,6 +18653,8 @@
 PLcom/android/server/companion/virtual/InputController$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/companion/virtual/InputController;Ljava/lang/String;IILjava/lang/String;)V
 PLcom/android/server/companion/virtual/InputController$$ExternalSyntheticLambda3;->get()Ljava/lang/Object;
 PLcom/android/server/companion/virtual/InputController$BinderDeathRecipient;-><init>(Lcom/android/server/companion/virtual/InputController;Landroid/os/IBinder;)V
+PLcom/android/server/companion/virtual/InputController$BinderDeathRecipient;->binderDied()V
+PLcom/android/server/companion/virtual/InputController$DeviceCreationException;-><init>(Ljava/lang/String;)V
 PLcom/android/server/companion/virtual/InputController$InputDeviceDescriptor;-><clinit>()V
 PLcom/android/server/companion/virtual/InputController$InputDeviceDescriptor;-><init>(ILandroid/os/IBinder$DeathRecipient;IILjava/lang/String;)V
 PLcom/android/server/companion/virtual/InputController$InputDeviceDescriptor;->getCreationOrderNumber()J
@@ -17776,7 +18701,7 @@
 PLcom/android/server/companion/virtual/InputController;-><init>(Ljava/lang/Object;Lcom/android/server/companion/virtual/InputController$NativeWrapper;Landroid/os/Handler;Landroid/view/WindowManager;Lcom/android/server/companion/virtual/InputController$DeviceCreationThreadVerifier;)V
 PLcom/android/server/companion/virtual/InputController;->close()V
 PLcom/android/server/companion/virtual/InputController;->closeInputDeviceDescriptorLocked(Landroid/os/IBinder;Lcom/android/server/companion/virtual/InputController$InputDeviceDescriptor;)V
-PLcom/android/server/companion/virtual/InputController;->createDeviceInternal(ILjava/lang/String;IILandroid/os/IBinder;ILjava/lang/String;Ljava/util/function/Supplier;)V
+HPLcom/android/server/companion/virtual/InputController;->createDeviceInternal(ILjava/lang/String;IILandroid/os/IBinder;ILjava/lang/String;Ljava/util/function/Supplier;)V
 PLcom/android/server/companion/virtual/InputController;->createKeyboard(Ljava/lang/String;IILandroid/os/IBinder;I)V
 PLcom/android/server/companion/virtual/InputController;->createMouse(Ljava/lang/String;IILandroid/os/IBinder;I)V
 PLcom/android/server/companion/virtual/InputController;->createPhys(Ljava/lang/String;)Ljava/lang/String;
@@ -17787,11 +18712,11 @@
 PLcom/android/server/companion/virtual/InputController;->lambda$createMouse$2(Ljava/lang/String;IILjava/lang/String;)Ljava/lang/Integer;
 PLcom/android/server/companion/virtual/InputController;->lambda$createTouchscreen$3(Ljava/lang/String;IILjava/lang/String;Landroid/graphics/Point;)Ljava/lang/Integer;
 PLcom/android/server/companion/virtual/InputController;->lambda$new$0(Landroid/os/Handler;)Z
-PLcom/android/server/companion/virtual/InputController;->sendButtonEvent(Landroid/os/IBinder;Landroid/hardware/input/VirtualMouseButtonEvent;)Z
+HPLcom/android/server/companion/virtual/InputController;->sendButtonEvent(Landroid/os/IBinder;Landroid/hardware/input/VirtualMouseButtonEvent;)Z
 PLcom/android/server/companion/virtual/InputController;->sendKeyEvent(Landroid/os/IBinder;Landroid/hardware/input/VirtualKeyEvent;)Z
-PLcom/android/server/companion/virtual/InputController;->sendRelativeEvent(Landroid/os/IBinder;Landroid/hardware/input/VirtualMouseRelativeEvent;)Z
-PLcom/android/server/companion/virtual/InputController;->sendScrollEvent(Landroid/os/IBinder;Landroid/hardware/input/VirtualMouseScrollEvent;)Z
-PLcom/android/server/companion/virtual/InputController;->sendTouchEvent(Landroid/os/IBinder;Landroid/hardware/input/VirtualTouchEvent;)Z
+HPLcom/android/server/companion/virtual/InputController;->sendRelativeEvent(Landroid/os/IBinder;Landroid/hardware/input/VirtualMouseRelativeEvent;)Z
+HPLcom/android/server/companion/virtual/InputController;->sendScrollEvent(Landroid/os/IBinder;Landroid/hardware/input/VirtualMouseScrollEvent;)Z
+HPLcom/android/server/companion/virtual/InputController;->sendTouchEvent(Landroid/os/IBinder;Landroid/hardware/input/VirtualTouchEvent;)Z
 PLcom/android/server/companion/virtual/InputController;->setDisplayEligibilityForPointerCapture(ZI)V
 PLcom/android/server/companion/virtual/InputController;->setLocalIme(I)V
 PLcom/android/server/companion/virtual/InputController;->setPointerAcceleration(FI)V
@@ -17803,9 +18728,11 @@
 PLcom/android/server/companion/virtual/VirtualDeviceImpl$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/companion/virtual/VirtualDeviceImpl;)V
 PLcom/android/server/companion/virtual/VirtualDeviceImpl$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/companion/virtual/VirtualDeviceImpl$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/companion/virtual/VirtualDeviceImpl;)V
+PLcom/android/server/companion/virtual/VirtualDeviceImpl$$ExternalSyntheticLambda2;->onActivityBlocked(ILandroid/content/pm/ActivityInfo;)V
 PLcom/android/server/companion/virtual/VirtualDeviceImpl$1;-><init>(Lcom/android/server/companion/virtual/VirtualDeviceImpl;)V
 PLcom/android/server/companion/virtual/VirtualDeviceImpl$1;->onDisplayEmpty(I)V
 PLcom/android/server/companion/virtual/VirtualDeviceImpl$1;->onTopActivityChanged(ILandroid/content/ComponentName;)V
+PLcom/android/server/companion/virtual/VirtualDeviceImpl;->$r8$lambda$1TXMkh6NQMEvS4Y3R_QuVKDLOJ8(Lcom/android/server/companion/virtual/VirtualDeviceImpl;ILandroid/content/pm/ActivityInfo;)V
 PLcom/android/server/companion/virtual/VirtualDeviceImpl;->$r8$lambda$_I-14D8lq2ySvBk_ZJhCnNsopkU(Lcom/android/server/companion/virtual/VirtualDeviceImpl;Ljava/lang/Integer;Landroid/os/PowerManager$WakeLock;)V
 PLcom/android/server/companion/virtual/VirtualDeviceImpl;->-$$Nest$fgetmActivityListener(Lcom/android/server/companion/virtual/VirtualDeviceImpl;)Landroid/companion/virtual/IVirtualDeviceActivityListener;
 PLcom/android/server/companion/virtual/VirtualDeviceImpl;-><init>(Landroid/content/Context;Landroid/companion/AssociationInfo;Landroid/os/IBinder;ILcom/android/server/companion/virtual/InputController;Lcom/android/server/companion/virtual/VirtualDeviceImpl$OnDeviceCloseListener;Lcom/android/server/companion/virtual/VirtualDeviceImpl$PendingTrampolineCallback;Landroid/companion/virtual/IVirtualDeviceActivityListener;Ljava/util/function/Consumer;Landroid/companion/virtual/VirtualDeviceParams;)V
@@ -17818,39 +18745,43 @@
 PLcom/android/server/companion/virtual/VirtualDeviceImpl;->createVirtualTouchscreen(ILjava/lang/String;IILandroid/os/IBinder;Landroid/graphics/Point;)V
 PLcom/android/server/companion/virtual/VirtualDeviceImpl;->createWindowPolicyController()Lcom/android/server/companion/virtual/GenericWindowPolicyController;
 PLcom/android/server/companion/virtual/VirtualDeviceImpl;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/companion/virtual/VirtualDeviceImpl;->getAllowedUserHandles()Landroid/util/ArraySet;
+HPLcom/android/server/companion/virtual/VirtualDeviceImpl;->getAllowedUserHandles()Landroid/util/ArraySet;
 PLcom/android/server/companion/virtual/VirtualDeviceImpl;->getAssociationId()I
 PLcom/android/server/companion/virtual/VirtualDeviceImpl;->getBaseVirtualDisplayFlags()I
-PLcom/android/server/companion/virtual/VirtualDeviceImpl;->getCursorPosition(Landroid/os/IBinder;)Landroid/graphics/PointF;
+HPLcom/android/server/companion/virtual/VirtualDeviceImpl;->getCursorPosition(Landroid/os/IBinder;)Landroid/graphics/PointF;
+PLcom/android/server/companion/virtual/VirtualDeviceImpl;->getDisplayName()Ljava/lang/CharSequence;
 PLcom/android/server/companion/virtual/VirtualDeviceImpl;->getOwnerUid()I
-PLcom/android/server/companion/virtual/VirtualDeviceImpl;->isAppRunningOnVirtualDevice(I)Z
+HPLcom/android/server/companion/virtual/VirtualDeviceImpl;->isAppRunningOnVirtualDevice(I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/companion/virtual/GenericWindowPolicyController;Lcom/android/server/companion/virtual/GenericWindowPolicyController;
 PLcom/android/server/companion/virtual/VirtualDeviceImpl;->isDisplayOwnedByVirtualDevice(I)Z
 PLcom/android/server/companion/virtual/VirtualDeviceImpl;->lambda$close$1(Ljava/lang/Integer;Landroid/os/PowerManager$WakeLock;)V
 PLcom/android/server/companion/virtual/VirtualDeviceImpl;->launchPendingIntent(ILandroid/app/PendingIntent;Landroid/os/ResultReceiver;)V
+PLcom/android/server/companion/virtual/VirtualDeviceImpl;->onActivityBlocked(ILandroid/content/pm/ActivityInfo;)V
 PLcom/android/server/companion/virtual/VirtualDeviceImpl;->onAudioSessionEnded()V
 PLcom/android/server/companion/virtual/VirtualDeviceImpl;->onAudioSessionStarting(ILandroid/companion/virtual/audio/IAudioRoutingCallback;Landroid/companion/virtual/audio/IAudioConfigChangedCallback;)V
 PLcom/android/server/companion/virtual/VirtualDeviceImpl;->onRunningAppsChanged(Landroid/util/ArraySet;)V
-PLcom/android/server/companion/virtual/VirtualDeviceImpl;->onVirtualDisplayCreatedLocked(Lcom/android/server/companion/virtual/GenericWindowPolicyController;I)V
+HPLcom/android/server/companion/virtual/VirtualDeviceImpl;->onVirtualDisplayCreatedLocked(Lcom/android/server/companion/virtual/GenericWindowPolicyController;I)V
 PLcom/android/server/companion/virtual/VirtualDeviceImpl;->onVirtualDisplayRemovedLocked(I)V
 PLcom/android/server/companion/virtual/VirtualDeviceImpl;->sendButtonEvent(Landroid/os/IBinder;Landroid/hardware/input/VirtualMouseButtonEvent;)Z
 PLcom/android/server/companion/virtual/VirtualDeviceImpl;->sendKeyEvent(Landroid/os/IBinder;Landroid/hardware/input/VirtualKeyEvent;)Z
 PLcom/android/server/companion/virtual/VirtualDeviceImpl;->sendPendingIntent(ILandroid/app/PendingIntent;)V
-PLcom/android/server/companion/virtual/VirtualDeviceImpl;->sendRelativeEvent(Landroid/os/IBinder;Landroid/hardware/input/VirtualMouseRelativeEvent;)Z
+HPLcom/android/server/companion/virtual/VirtualDeviceImpl;->sendRelativeEvent(Landroid/os/IBinder;Landroid/hardware/input/VirtualMouseRelativeEvent;)Z
 PLcom/android/server/companion/virtual/VirtualDeviceImpl;->sendScrollEvent(Landroid/os/IBinder;Landroid/hardware/input/VirtualMouseScrollEvent;)Z
 PLcom/android/server/companion/virtual/VirtualDeviceImpl;->sendTouchEvent(Landroid/os/IBinder;Landroid/hardware/input/VirtualTouchEvent;)Z
 PLcom/android/server/companion/virtual/VirtualDeviceImpl;->setShowPointerIcon(Z)V
+PLcom/android/server/companion/virtual/VirtualDeviceImpl;->showToastWhereUidIsRunning(ILjava/lang/String;I)V
 PLcom/android/server/companion/virtual/VirtualDeviceImpl;->unregisterInputDevice(Landroid/os/IBinder;)V
 HSPLcom/android/server/companion/virtual/VirtualDeviceManagerInternal;-><init>()V
 HSPLcom/android/server/companion/virtual/VirtualDeviceManagerService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/companion/virtual/VirtualDeviceManagerService;I)V
 PLcom/android/server/companion/virtual/VirtualDeviceManagerService$$ExternalSyntheticLambda0;->onAssociationsChanged(Ljava/util/List;)V
 HSPLcom/android/server/companion/virtual/VirtualDeviceManagerService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/companion/virtual/VirtualDeviceManagerService;)V
+PLcom/android/server/companion/virtual/VirtualDeviceManagerService$$ExternalSyntheticLambda1;->onCameraAccessBlocked(I)V
 HSPLcom/android/server/companion/virtual/VirtualDeviceManagerService$1;-><init>(Lcom/android/server/companion/virtual/VirtualDeviceManagerService;)V
 HSPLcom/android/server/companion/virtual/VirtualDeviceManagerService$1;->intercept(Lcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptorInfo;)Lcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptResult;
 HSPLcom/android/server/companion/virtual/VirtualDeviceManagerService$LocalService;-><init>(Lcom/android/server/companion/virtual/VirtualDeviceManagerService;)V
 HSPLcom/android/server/companion/virtual/VirtualDeviceManagerService$LocalService;-><init>(Lcom/android/server/companion/virtual/VirtualDeviceManagerService;Lcom/android/server/companion/virtual/VirtualDeviceManagerService$LocalService-IA;)V
 PLcom/android/server/companion/virtual/VirtualDeviceManagerService$LocalService;->getBaseVirtualDisplayFlags(Landroid/companion/virtual/IVirtualDevice;)I
-HPLcom/android/server/companion/virtual/VirtualDeviceManagerService$LocalService;->isAppRunningOnAnyVirtualDevice(I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
-PLcom/android/server/companion/virtual/VirtualDeviceManagerService$LocalService;->isDisplayOwnedByAnyVirtualDevice(I)Z
+HPLcom/android/server/companion/virtual/VirtualDeviceManagerService$LocalService;->isAppRunningOnAnyVirtualDevice(I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/companion/virtual/VirtualDeviceImpl;Lcom/android/server/companion/virtual/VirtualDeviceImpl;
+HPLcom/android/server/companion/virtual/VirtualDeviceManagerService$LocalService;->isDisplayOwnedByAnyVirtualDevice(I)Z
 PLcom/android/server/companion/virtual/VirtualDeviceManagerService$LocalService;->isValidVirtualDevice(Landroid/companion/virtual/IVirtualDevice;)Z
 PLcom/android/server/companion/virtual/VirtualDeviceManagerService$LocalService;->onVirtualDisplayRemoved(Landroid/companion/virtual/IVirtualDevice;I)V
 HSPLcom/android/server/companion/virtual/VirtualDeviceManagerService$PendingTrampolineMap;-><init>(Landroid/os/Handler;)V
@@ -17862,7 +18793,7 @@
 PLcom/android/server/companion/virtual/VirtualDeviceManagerService$VirtualDeviceManagerImpl;->$r8$lambda$AX24K1SX1g6jGdtmuNXo1XowuXY(Lcom/android/server/companion/virtual/CameraAccessController;Landroid/util/ArraySet;)V
 HSPLcom/android/server/companion/virtual/VirtualDeviceManagerService$VirtualDeviceManagerImpl;-><init>(Lcom/android/server/companion/virtual/VirtualDeviceManagerService;)V
 PLcom/android/server/companion/virtual/VirtualDeviceManagerService$VirtualDeviceManagerImpl;->createVirtualDevice(Landroid/os/IBinder;Ljava/lang/String;ILandroid/companion/virtual/VirtualDeviceParams;Landroid/companion/virtual/IVirtualDeviceActivityListener;)Landroid/companion/virtual/IVirtualDevice;
-PLcom/android/server/companion/virtual/VirtualDeviceManagerService$VirtualDeviceManagerImpl;->createVirtualDisplay(Landroid/hardware/display/VirtualDisplayConfig;Landroid/hardware/display/IVirtualDisplayCallback;Landroid/companion/virtual/IVirtualDevice;Ljava/lang/String;)I
+HPLcom/android/server/companion/virtual/VirtualDeviceManagerService$VirtualDeviceManagerImpl;->createVirtualDisplay(Landroid/hardware/display/VirtualDisplayConfig;Landroid/hardware/display/IVirtualDisplayCallback;Landroid/companion/virtual/IVirtualDevice;Ljava/lang/String;)I
 PLcom/android/server/companion/virtual/VirtualDeviceManagerService$VirtualDeviceManagerImpl;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/companion/virtual/VirtualDeviceManagerService$VirtualDeviceManagerImpl;->getAssociationInfo(Ljava/lang/String;I)Landroid/companion/AssociationInfo;
 PLcom/android/server/companion/virtual/VirtualDeviceManagerService$VirtualDeviceManagerImpl;->lambda$createVirtualDevice$0(Lcom/android/server/companion/virtual/CameraAccessController;Landroid/util/ArraySet;)V
@@ -17878,6 +18809,7 @@
 PLcom/android/server/companion/virtual/VirtualDeviceManagerService;->access$000(Lcom/android/server/companion/virtual/VirtualDeviceManagerService;Ljava/lang/Class;)Ljava/lang/Object;
 PLcom/android/server/companion/virtual/VirtualDeviceManagerService;->isValidVirtualDeviceLocked(Landroid/companion/virtual/IVirtualDevice;)Z
 PLcom/android/server/companion/virtual/VirtualDeviceManagerService;->lambda$onUserStarting$0(ILjava/util/List;)V
+PLcom/android/server/companion/virtual/VirtualDeviceManagerService;->onCameraAccessBlocked(I)V
 HSPLcom/android/server/companion/virtual/VirtualDeviceManagerService;->onStart()V
 HSPLcom/android/server/companion/virtual/VirtualDeviceManagerService;->onUserStarting(Lcom/android/server/SystemService$TargetUser;)V
 PLcom/android/server/companion/virtual/VirtualDeviceManagerService;->onUserStopping(Lcom/android/server/SystemService$TargetUser;)V
@@ -17886,14 +18818,19 @@
 PLcom/android/server/companion/virtual/audio/AudioPlaybackDetector;->register(Lcom/android/server/companion/virtual/audio/AudioPlaybackDetector$AudioPlaybackCallback;)V
 PLcom/android/server/companion/virtual/audio/AudioPlaybackDetector;->unregister()V
 PLcom/android/server/companion/virtual/audio/AudioRecordingDetector;-><init>(Landroid/content/Context;)V
+PLcom/android/server/companion/virtual/audio/AudioRecordingDetector;->onRecordingConfigChanged(Ljava/util/List;)V
 PLcom/android/server/companion/virtual/audio/AudioRecordingDetector;->register(Lcom/android/server/companion/virtual/audio/AudioRecordingDetector$AudioRecordingCallback;)V
 PLcom/android/server/companion/virtual/audio/AudioRecordingDetector;->unregister()V
 PLcom/android/server/companion/virtual/audio/VirtualAudioController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/companion/virtual/audio/VirtualAudioController;)V
+PLcom/android/server/companion/virtual/audio/VirtualAudioController$$ExternalSyntheticLambda0;->run()V
+PLcom/android/server/companion/virtual/audio/VirtualAudioController;->$r8$lambda$uvtgBMyQCXeP9_0_OWAMaaGedeo(Lcom/android/server/companion/virtual/audio/VirtualAudioController;)V
 PLcom/android/server/companion/virtual/audio/VirtualAudioController;-><init>(Landroid/content/Context;)V
-PLcom/android/server/companion/virtual/audio/VirtualAudioController;->findPlaybackConfigurations(Ljava/util/List;Landroid/util/ArraySet;)Ljava/util/List;
-PLcom/android/server/companion/virtual/audio/VirtualAudioController;->findPlayingAppUids(Ljava/util/List;Landroid/util/ArraySet;)Landroid/util/ArraySet;
+HPLcom/android/server/companion/virtual/audio/VirtualAudioController;->findPlaybackConfigurations(Ljava/util/List;Landroid/util/ArraySet;)Ljava/util/List;
+HPLcom/android/server/companion/virtual/audio/VirtualAudioController;->findPlayingAppUids(Ljava/util/List;Landroid/util/ArraySet;)Landroid/util/ArraySet;
+PLcom/android/server/companion/virtual/audio/VirtualAudioController;->findRecordingConfigurations(Ljava/util/List;Landroid/util/ArraySet;)Ljava/util/List;
 PLcom/android/server/companion/virtual/audio/VirtualAudioController;->notifyAppsNeedingAudioRoutingChanged()V
 PLcom/android/server/companion/virtual/audio/VirtualAudioController;->onPlaybackConfigChanged(Ljava/util/List;)V
+PLcom/android/server/companion/virtual/audio/VirtualAudioController;->onRecordingConfigChanged(Ljava/util/List;)V
 PLcom/android/server/companion/virtual/audio/VirtualAudioController;->onRunningAppsChanged(Landroid/util/ArraySet;)V
 PLcom/android/server/companion/virtual/audio/VirtualAudioController;->startListening(Lcom/android/server/companion/virtual/GenericWindowPolicyController;Landroid/companion/virtual/audio/IAudioRoutingCallback;Landroid/companion/virtual/audio/IAudioConfigChangedCallback;)V
 PLcom/android/server/companion/virtual/audio/VirtualAudioController;->stopListening()V
@@ -17904,13 +18841,13 @@
 HSPLcom/android/server/compat/CompatChange;->addPackageOverrideInternal(Ljava/lang/String;Z)V
 HSPLcom/android/server/compat/CompatChange;->clearOverrides()V
 HSPLcom/android/server/compat/CompatChange;->defaultValue()Z
-HSPLcom/android/server/compat/CompatChange;->isEnabled(Landroid/content/pm/ApplicationInfo;Lcom/android/internal/compat/AndroidBuildClassifier;)Z+]Lcom/android/internal/compat/AndroidBuildClassifier;Lcom/android/internal/compat/AndroidBuildClassifier;]Lcom/android/internal/compat/CompatibilityChangeInfo;Lcom/android/server/compat/CompatChange;]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;]Ljava/lang/Boolean;Ljava/lang/Boolean;
+HSPLcom/android/server/compat/CompatChange;->isEnabled(Landroid/content/pm/ApplicationInfo;Lcom/android/internal/compat/AndroidBuildClassifier;)Z+]Lcom/android/internal/compat/AndroidBuildClassifier;Lcom/android/internal/compat/AndroidBuildClassifier;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Lcom/android/internal/compat/CompatibilityChangeInfo;Lcom/android/server/compat/CompatChange;]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;
 HSPLcom/android/server/compat/CompatChange;->loadOverrides(Lcom/android/server/compat/overrides/ChangeOverrides;)V
 HSPLcom/android/server/compat/CompatChange;->notifyListener(Ljava/lang/String;)V
 HSPLcom/android/server/compat/CompatChange;->recheckOverride(Ljava/lang/String;Lcom/android/internal/compat/OverrideAllowedState;Ljava/lang/Long;)Z+]Lcom/android/server/compat/CompatChange;Lcom/android/server/compat/CompatChange;]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;]Landroid/app/compat/PackageOverride;Landroid/app/compat/PackageOverride;]Ljava/lang/Long;Ljava/lang/Long;
 HSPLcom/android/server/compat/CompatChange;->registerListener(Lcom/android/server/compat/CompatChange$ChangeListener;)V
 HPLcom/android/server/compat/CompatChange;->removePackageOverride(Ljava/lang/String;Lcom/android/internal/compat/OverrideAllowedState;Ljava/lang/Long;)Z
-HPLcom/android/server/compat/CompatChange;->removePackageOverrideInternal(Ljava/lang/String;)V
+HPLcom/android/server/compat/CompatChange;->removePackageOverrideInternal(Ljava/lang/String;)V+]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;
 HSPLcom/android/server/compat/CompatChange;->saveOverrides()Lcom/android/server/compat/overrides/ChangeOverrides;+]Lcom/android/server/compat/overrides/ChangeOverrides$Validated;Lcom/android/server/compat/overrides/ChangeOverrides$Validated;]Ljava/util/Map$Entry;Ljava/util/concurrent/ConcurrentHashMap$MapEntry;]Landroid/app/compat/PackageOverride;Landroid/app/compat/PackageOverride;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Lcom/android/server/compat/overrides/ChangeOverrides;Lcom/android/server/compat/overrides/ChangeOverrides;]Ljava/util/Set;Ljava/util/concurrent/ConcurrentHashMap$EntrySetView;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/internal/compat/CompatibilityChangeInfo;Lcom/android/server/compat/CompatChange;]Lcom/android/server/compat/overrides/ChangeOverrides$Raw;Lcom/android/server/compat/overrides/ChangeOverrides$Raw;]Lcom/android/server/compat/overrides/RawOverrideValue;Lcom/android/server/compat/overrides/RawOverrideValue;]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;]Lcom/android/server/compat/overrides/OverrideValue;Lcom/android/server/compat/overrides/OverrideValue;]Ljava/util/Iterator;Ljava/util/concurrent/ConcurrentHashMap$EntryIterator;
 HPLcom/android/server/compat/CompatChange;->toString()Ljava/lang/String;
 HSPLcom/android/server/compat/CompatChange;->willBeEnabled(Ljava/lang/String;)Z
@@ -17922,7 +18859,7 @@
 HSPLcom/android/server/compat/CompatConfig;->addPackageOverrides(Lcom/android/internal/compat/CompatibilityOverrideConfig;Ljava/lang/String;Z)V
 HSPLcom/android/server/compat/CompatConfig;->addPackageOverridesWithoutSaving(Lcom/android/internal/compat/CompatibilityOverrideConfig;Ljava/lang/String;Z)V
 HSPLcom/android/server/compat/CompatConfig;->create(Lcom/android/internal/compat/AndroidBuildClassifier;Landroid/content/Context;)Lcom/android/server/compat/CompatConfig;
-PLcom/android/server/compat/CompatConfig;->defaultChangeIdValue(J)Z
+HPLcom/android/server/compat/CompatConfig;->defaultChangeIdValue(J)Z
 PLcom/android/server/compat/CompatConfig;->dumpConfig(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/compat/CompatConfig;->getDisabledChanges(Landroid/content/pm/ApplicationInfo;)[J+]Ljava/util/Collection;Ljava/util/concurrent/ConcurrentHashMap$ValuesView;]Landroid/util/LongArray;Landroid/util/LongArray;]Lcom/android/server/compat/CompatChange;Lcom/android/server/compat/CompatChange;]Lcom/android/internal/compat/CompatibilityChangeInfo;Lcom/android/server/compat/CompatChange;]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;]Ljava/util/Iterator;Ljava/util/concurrent/ConcurrentHashMap$ValueIterator;
 HSPLcom/android/server/compat/CompatConfig;->getVersionCodeOrNull(Ljava/lang/String;)Ljava/lang/Long;
@@ -17945,7 +18882,7 @@
 HSPLcom/android/server/compat/CompatConfig;->registerListener(JLcom/android/server/compat/CompatChange$ChangeListener;)Z
 PLcom/android/server/compat/CompatConfig;->removeAllPackageOverrides(Lcom/android/internal/compat/CompatibilityOverridesToRemoveByPackageConfig;)V
 PLcom/android/server/compat/CompatConfig;->removeOverride(JLjava/lang/String;)Z
-PLcom/android/server/compat/CompatConfig;->removeOverrideUnsafe(JLjava/lang/String;)Z
+HPLcom/android/server/compat/CompatConfig;->removeOverrideUnsafe(JLjava/lang/String;)Z
 PLcom/android/server/compat/CompatConfig;->removeOverrideUnsafe(Lcom/android/server/compat/CompatChange;Ljava/lang/String;Ljava/lang/Long;)Z
 HPLcom/android/server/compat/CompatConfig;->removePackageOverridesWithoutSaving(Lcom/android/internal/compat/CompatibilityOverridesToRemoveConfig;Ljava/lang/String;)Z
 HSPLcom/android/server/compat/CompatConfig;->saveOverrides()V+]Lcom/android/server/compat/overrides/Overrides;Lcom/android/server/compat/overrides/Overrides;]Ljava/io/File;Ljava/io/File;]Ljava/io/PrintWriter;Ljava/io/PrintWriter;]Ljava/util/Collection;Ljava/util/concurrent/ConcurrentHashMap$ValuesView;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/compat/CompatChange;Lcom/android/server/compat/CompatChange;]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;]Ljava/util/Iterator;Ljava/util/concurrent/ConcurrentHashMap$ValueIterator;
@@ -17957,22 +18894,22 @@
 HSPLcom/android/server/compat/OverrideValidatorImpl;->getOverrideAllowedStateInternal(JLjava/lang/String;Z)Lcom/android/internal/compat/OverrideAllowedState;+]Lcom/android/internal/compat/AndroidBuildClassifier;Lcom/android/internal/compat/AndroidBuildClassifier;]Lcom/android/server/compat/CompatConfig;Lcom/android/server/compat/CompatConfig;
 HSPLcom/android/server/compat/OverrideValidatorImpl;->registerContentObserver()V
 HSPLcom/android/server/compat/PlatformCompat$1;-><init>(Lcom/android/server/compat/PlatformCompat;)V
-PLcom/android/server/compat/PlatformCompat$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/compat/PlatformCompat$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/compat/PlatformCompat;->-$$Nest$fgetmCompatConfig(Lcom/android/server/compat/PlatformCompat;)Lcom/android/server/compat/CompatConfig;
 HSPLcom/android/server/compat/PlatformCompat;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/compat/PlatformCompat;->checkAllCompatOverridesAreOverridable(Ljava/util/Collection;)V
-HSPLcom/android/server/compat/PlatformCompat;->checkCompatChangeLogPermission()V
+HSPLcom/android/server/compat/PlatformCompat;->checkCompatChangeLogPermission()V+]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLcom/android/server/compat/PlatformCompat;->checkCompatChangeOverrideOverridablePermission()V
 PLcom/android/server/compat/PlatformCompat;->checkCompatChangeOverridePermission()V
 HSPLcom/android/server/compat/PlatformCompat;->checkCompatChangeReadAndLogPermission()V+]Lcom/android/server/compat/PlatformCompat;Lcom/android/server/compat/PlatformCompat;
-HSPLcom/android/server/compat/PlatformCompat;->checkCompatChangeReadPermission()V
+HSPLcom/android/server/compat/PlatformCompat;->checkCompatChangeReadPermission()V+]Landroid/content/Context;Landroid/app/ContextImpl;
 PLcom/android/server/compat/PlatformCompat;->clearOverride(JLjava/lang/String;)Z
 PLcom/android/server/compat/PlatformCompat;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/compat/PlatformCompat;->getApplicationInfo(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo;+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/compat/PlatformCompat;->getDisabledChanges(Landroid/content/pm/ApplicationInfo;)[J+]Lcom/android/server/compat/CompatConfig;Lcom/android/server/compat/CompatConfig;
 HSPLcom/android/server/compat/PlatformCompat;->isChangeEnabled(JLandroid/content/pm/ApplicationInfo;)Z+]Lcom/android/server/compat/PlatformCompat;Lcom/android/server/compat/PlatformCompat;
 HSPLcom/android/server/compat/PlatformCompat;->isChangeEnabledByPackageName(JLjava/lang/String;I)Z+]Lcom/android/server/compat/PlatformCompat;Lcom/android/server/compat/PlatformCompat;]Lcom/android/server/compat/CompatConfig;Lcom/android/server/compat/CompatConfig;
-HSPLcom/android/server/compat/PlatformCompat;->isChangeEnabledByUid(JI)Z+]Lcom/android/server/compat/PlatformCompat;Lcom/android/server/compat/PlatformCompat;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Lcom/android/server/compat/CompatConfig;Lcom/android/server/compat/CompatConfig;
+HSPLcom/android/server/compat/PlatformCompat;->isChangeEnabledByUid(JI)Z+]Lcom/android/server/compat/PlatformCompat;Lcom/android/server/compat/PlatformCompat;]Lcom/android/server/compat/CompatConfig;Lcom/android/server/compat/CompatConfig;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
 HSPLcom/android/server/compat/PlatformCompat;->isChangeEnabledInternal(JLandroid/content/pm/ApplicationInfo;)Z+]Lcom/android/server/compat/PlatformCompat;Lcom/android/server/compat/PlatformCompat;
 HSPLcom/android/server/compat/PlatformCompat;->isChangeEnabledInternal(JLjava/lang/String;I)Z
 HSPLcom/android/server/compat/PlatformCompat;->isChangeEnabledInternalNoLogging(JLandroid/content/pm/ApplicationInfo;)Z+]Lcom/android/server/compat/CompatConfig;Lcom/android/server/compat/CompatConfig;
@@ -18048,7 +18985,7 @@
 HSPLcom/android/server/compat/overrides/AppCompatOverridesService;-><init>(Landroid/content/Context;Lcom/android/server/compat/overrides/AppCompatOverridesService-IA;)V
 HPLcom/android/server/compat/overrides/AppCompatOverridesService;->addAllPackageOverrides(Ljava/lang/String;)V+]Lcom/android/server/compat/overrides/AppCompatOverridesParser;Lcom/android/server/compat/overrides/AppCompatOverridesParser;]Ljava/util/List;Ljava/util/Arrays$ArrayList;]Lcom/android/server/compat/overrides/AppCompatOverridesService;Lcom/android/server/compat/overrides/AppCompatOverridesService;]Ljava/lang/Long;Ljava/lang/Long;]Ljava/util/Map;Ljava/util/Collections$EmptyMap;]Ljava/util/Iterator;Ljava/util/Arrays$ArrayItr;
 PLcom/android/server/compat/overrides/AppCompatOverridesService;->applyAllOverrides(Ljava/lang/String;Ljava/util/Set;Ljava/util/Map;)V
-PLcom/android/server/compat/overrides/AppCompatOverridesService;->applyOverrides(Landroid/provider/DeviceConfig$Properties;Ljava/util/Set;Ljava/util/Map;)V
+HPLcom/android/server/compat/overrides/AppCompatOverridesService;->applyOverrides(Landroid/provider/DeviceConfig$Properties;Ljava/util/Set;Ljava/util/Map;)V
 HPLcom/android/server/compat/overrides/AppCompatOverridesService;->getOverridesToRemove(Ljava/lang/String;Ljava/util/Set;)Ljava/util/Map;
 HPLcom/android/server/compat/overrides/AppCompatOverridesService;->getOwnedChangeIds(Ljava/lang/String;)Ljava/util/Set;
 HPLcom/android/server/compat/overrides/AppCompatOverridesService;->getVersionCodeOrNull(Ljava/lang/String;)Ljava/lang/Long;+]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
@@ -18083,7 +19020,7 @@
 HSPLcom/android/server/compat/overrides/ChangeOverrides;->setValidated(Lcom/android/server/compat/overrides/ChangeOverrides$Validated;)V
 HSPLcom/android/server/compat/overrides/ChangeOverrides;->write(Lcom/android/server/compat/overrides/XmlWriter;Ljava/lang/String;)V
 HSPLcom/android/server/compat/overrides/OverrideValue;-><init>()V
-HSPLcom/android/server/compat/overrides/OverrideValue;->getEnabled()Z
+HSPLcom/android/server/compat/overrides/OverrideValue;->getEnabled()Z+]Ljava/lang/Boolean;Ljava/lang/Boolean;
 HSPLcom/android/server/compat/overrides/OverrideValue;->getPackageName()Ljava/lang/String;
 HSPLcom/android/server/compat/overrides/OverrideValue;->hasEnabled()Z
 HSPLcom/android/server/compat/overrides/OverrideValue;->hasPackageName()Z
@@ -18129,7 +19066,7 @@
 PLcom/android/server/connectivity/IpConnectivityEventBuilder;-><clinit>()V
 HPLcom/android/server/connectivity/IpConnectivityEventBuilder;->buildEvent(IJLjava/lang/String;)Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
 HPLcom/android/server/connectivity/IpConnectivityEventBuilder;->bytesToInts([B)[I
-PLcom/android/server/connectivity/IpConnectivityEventBuilder;->ifnameToLinkLayer(Ljava/lang/String;)I
+HPLcom/android/server/connectivity/IpConnectivityEventBuilder;->ifnameToLinkLayer(Ljava/lang/String;)I
 HPLcom/android/server/connectivity/IpConnectivityEventBuilder;->inferLinkLayer(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;)V
 PLcom/android/server/connectivity/IpConnectivityEventBuilder;->isBitSet(II)Z
 PLcom/android/server/connectivity/IpConnectivityEventBuilder;->serialize(ILjava/util/List;)[B
@@ -18140,8 +19077,8 @@
 HPLcom/android/server/connectivity/IpConnectivityEventBuilder;->setEvent(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;Landroid/os/Parcelable;)Z
 PLcom/android/server/connectivity/IpConnectivityEventBuilder;->setIpManagerEvent(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;Landroid/net/metrics/IpManagerEvent;)V
 PLcom/android/server/connectivity/IpConnectivityEventBuilder;->setIpReachabilityEvent(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;Landroid/net/metrics/IpReachabilityEvent;)V
-PLcom/android/server/connectivity/IpConnectivityEventBuilder;->setNetworkEvent(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;Landroid/net/metrics/NetworkEvent;)V
-PLcom/android/server/connectivity/IpConnectivityEventBuilder;->setRaEvent(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;Landroid/net/metrics/RaEvent;)V
+HPLcom/android/server/connectivity/IpConnectivityEventBuilder;->setNetworkEvent(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;Landroid/net/metrics/NetworkEvent;)V
+HPLcom/android/server/connectivity/IpConnectivityEventBuilder;->setRaEvent(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;Landroid/net/metrics/RaEvent;)V
 PLcom/android/server/connectivity/IpConnectivityEventBuilder;->setValidationProbeEvent(Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;Landroid/net/metrics/ValidationProbeEvent;)V
 PLcom/android/server/connectivity/IpConnectivityEventBuilder;->toPairArray(Landroid/util/SparseIntArray;)[Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$Pair;
 HPLcom/android/server/connectivity/IpConnectivityEventBuilder;->toProto(Landroid/net/ConnectivityMetricsEvent;)Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
@@ -18149,7 +19086,7 @@
 PLcom/android/server/connectivity/IpConnectivityEventBuilder;->toProto(Landroid/net/metrics/DnsEvent;)Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
 PLcom/android/server/connectivity/IpConnectivityEventBuilder;->toProto(Landroid/net/metrics/WakeupStats;)Lcom/android/server/connectivity/metrics/nano/IpConnectivityLogClass$IpConnectivityEvent;
 HPLcom/android/server/connectivity/IpConnectivityEventBuilder;->toProto(Ljava/util/List;)Ljava/util/List;
-PLcom/android/server/connectivity/IpConnectivityEventBuilder;->transportsToLinkLayer(J)I
+HPLcom/android/server/connectivity/IpConnectivityEventBuilder;->transportsToLinkLayer(J)I
 HSPLcom/android/server/connectivity/IpConnectivityMetrics$$ExternalSyntheticLambda0;-><init>()V
 HSPLcom/android/server/connectivity/IpConnectivityMetrics$$ExternalSyntheticLambda0;->applyAsInt(Ljava/lang/Object;)I
 HSPLcom/android/server/connectivity/IpConnectivityMetrics$Impl;-><init>(Lcom/android/server/connectivity/IpConnectivityMetrics;)V
@@ -18173,7 +19110,7 @@
 HPLcom/android/server/connectivity/IpConnectivityMetrics;->append(Landroid/net/ConnectivityMetricsEvent;)I
 HSPLcom/android/server/connectivity/IpConnectivityMetrics;->bufferCapacity()I
 PLcom/android/server/connectivity/IpConnectivityMetrics;->cmdFlush(Ljava/io/PrintWriter;)V
-PLcom/android/server/connectivity/IpConnectivityMetrics;->cmdList(Ljava/io/PrintWriter;)V
+HPLcom/android/server/connectivity/IpConnectivityMetrics;->cmdList(Ljava/io/PrintWriter;)V
 PLcom/android/server/connectivity/IpConnectivityMetrics;->cmdListAsBinaryProto(Ljava/io/OutputStream;)V
 PLcom/android/server/connectivity/IpConnectivityMetrics;->flushEncodedOutput()Ljava/lang/String;
 PLcom/android/server/connectivity/IpConnectivityMetrics;->getEvents()Ljava/util/List;
@@ -18187,12 +19124,12 @@
 HSPLcom/android/server/connectivity/MultipathPolicyTracker$1;-><init>(Lcom/android/server/connectivity/MultipathPolicyTracker;)V
 HPLcom/android/server/connectivity/MultipathPolicyTracker$1;->onCapabilitiesChanged(Landroid/net/Network;Landroid/net/NetworkCapabilities;)V
 PLcom/android/server/connectivity/MultipathPolicyTracker$1;->onLost(Landroid/net/Network;)V
-HPLcom/android/server/connectivity/MultipathPolicyTracker$2$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/connectivity/MultipathPolicyTracker$2;)V
-HPLcom/android/server/connectivity/MultipathPolicyTracker$2$$ExternalSyntheticLambda0;->run()V
-HPLcom/android/server/connectivity/MultipathPolicyTracker$2;->$r8$lambda$sUU5FFg76pbe5evfR-W7OYARfmE(Lcom/android/server/connectivity/MultipathPolicyTracker$2;)V
+HSPLcom/android/server/connectivity/MultipathPolicyTracker$2$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/connectivity/MultipathPolicyTracker$2;)V
+HSPLcom/android/server/connectivity/MultipathPolicyTracker$2$$ExternalSyntheticLambda0;->run()V
+HSPLcom/android/server/connectivity/MultipathPolicyTracker$2;->$r8$lambda$sUU5FFg76pbe5evfR-W7OYARfmE(Lcom/android/server/connectivity/MultipathPolicyTracker$2;)V
 HSPLcom/android/server/connectivity/MultipathPolicyTracker$2;-><init>(Lcom/android/server/connectivity/MultipathPolicyTracker;)V
-HPLcom/android/server/connectivity/MultipathPolicyTracker$2;->lambda$onMeteredIfacesChanged$0()V
-HPLcom/android/server/connectivity/MultipathPolicyTracker$2;->onMeteredIfacesChanged([Ljava/lang/String;)V
+HSPLcom/android/server/connectivity/MultipathPolicyTracker$2;->lambda$onMeteredIfacesChanged$0()V
+HSPLcom/android/server/connectivity/MultipathPolicyTracker$2;->onMeteredIfacesChanged([Ljava/lang/String;)V
 HSPLcom/android/server/connectivity/MultipathPolicyTracker$ConfigChangeReceiver;-><init>(Lcom/android/server/connectivity/MultipathPolicyTracker;)V
 HSPLcom/android/server/connectivity/MultipathPolicyTracker$ConfigChangeReceiver;-><init>(Lcom/android/server/connectivity/MultipathPolicyTracker;Lcom/android/server/connectivity/MultipathPolicyTracker$ConfigChangeReceiver-IA;)V
 HSPLcom/android/server/connectivity/MultipathPolicyTracker$ConfigChangeReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
@@ -18202,7 +19139,9 @@
 HPLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker$$ExternalSyntheticLambda0;->execute(Ljava/lang/Runnable;)V
 PLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker$1;-><init>(Lcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;Lcom/android/server/connectivity/MultipathPolicyTracker;Landroid/net/Network;)V
 HPLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker$1;->onThresholdReached(ILjava/lang/String;)V+]Lcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;Lcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;
+PLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->$r8$lambda$YomEi3v3LIrZJIr-Y8CY4G5-rEc(Lcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;Ljava/lang/Runnable;)V
 HPLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;-><init>(Lcom/android/server/connectivity/MultipathPolicyTracker;Landroid/net/Network;Landroid/net/NetworkCapabilities;)V
+HPLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->clearMultipathBudget()V
 HPLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->getDailyNonDefaultDataUsage()J+]Ljava/time/Clock;Landroid/os/BestClock;]Ljava/time/Instant;Ljava/time/Instant;]Lcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;Lcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;]Ljava/time/ZonedDateTime;Ljava/time/ZonedDateTime;
 PLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->getMultipathBudget()J
 PLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->getMultipathPreference()I
@@ -18212,15 +19151,17 @@
 HPLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->getTemplateMatchingNetworkIdentity(Landroid/net/NetworkCapabilities;)Landroid/net/NetworkIdentity;+]Landroid/net/NetworkIdentity$Builder;Landroid/net/NetworkIdentity$Builder;]Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;
 HPLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->getUserPolicyOpportunisticQuotaBytes()J+]Landroid/net/NetworkPolicy;Landroid/net/NetworkPolicy;]Ljava/time/Instant;Ljava/time/Instant;]Landroid/util/Range;Landroid/util/Range;]Lcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;Lcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;]Ljava/time/ZonedDateTime;Ljava/time/ZonedDateTime;]Landroid/net/NetworkTemplate;Landroid/net/NetworkTemplate;]Landroid/net/NetworkPolicyManager;Landroid/net/NetworkPolicyManager;]Ljava/util/Iterator;Landroid/util/RecurrenceRule$RecurringIterator;
 HPLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->haveMultipathBudget()Z
+PLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->lambda$setMultipathBudget$0(Ljava/lang/Runnable;)V
 HPLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->maybeUnregisterUsageCallback()V
+HPLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->setMultipathBudget(J)V
 HPLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->setNetworkCapabilities(Landroid/net/NetworkCapabilities;)V
 PLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->shutdown()V
 HPLcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;->updateMultipathBudget()V+]Lcom/android/server/net/NetworkPolicyManagerInternal;Lcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;]Lcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;Lcom/android/server/connectivity/MultipathPolicyTracker$MultipathTracker;
 HSPLcom/android/server/connectivity/MultipathPolicyTracker$SettingsObserver;-><init>(Lcom/android/server/connectivity/MultipathPolicyTracker;Landroid/os/Handler;)V
 HPLcom/android/server/connectivity/MultipathPolicyTracker;->-$$Nest$fgetmClock(Lcom/android/server/connectivity/MultipathPolicyTracker;)Ljava/time/Clock;
 PLcom/android/server/connectivity/MultipathPolicyTracker;->-$$Nest$fgetmContext(Lcom/android/server/connectivity/MultipathPolicyTracker;)Landroid/content/Context;
-HPLcom/android/server/connectivity/MultipathPolicyTracker;->-$$Nest$fgetmHandler(Lcom/android/server/connectivity/MultipathPolicyTracker;)Landroid/os/Handler;
-PLcom/android/server/connectivity/MultipathPolicyTracker;->-$$Nest$fgetmMultipathTrackers(Lcom/android/server/connectivity/MultipathPolicyTracker;)Ljava/util/concurrent/ConcurrentHashMap;
+HSPLcom/android/server/connectivity/MultipathPolicyTracker;->-$$Nest$fgetmHandler(Lcom/android/server/connectivity/MultipathPolicyTracker;)Landroid/os/Handler;
+HPLcom/android/server/connectivity/MultipathPolicyTracker;->-$$Nest$fgetmMultipathTrackers(Lcom/android/server/connectivity/MultipathPolicyTracker;)Ljava/util/concurrent/ConcurrentHashMap;
 HPLcom/android/server/connectivity/MultipathPolicyTracker;->-$$Nest$fgetmNPM(Lcom/android/server/connectivity/MultipathPolicyTracker;)Landroid/net/NetworkPolicyManager;
 HPLcom/android/server/connectivity/MultipathPolicyTracker;->-$$Nest$mgetDefaultDailyMultipathQuotaBytes(Lcom/android/server/connectivity/MultipathPolicyTracker;)J
 HSPLcom/android/server/connectivity/MultipathPolicyTracker;->-$$Nest$mupdateAllMultipathBudgets(Lcom/android/server/connectivity/MultipathPolicyTracker;)V
@@ -18262,8 +19203,8 @@
 HPLcom/android/server/connectivity/NetdEventListenerService;->onConnectEvent(IIILjava/lang/String;II)V+]Landroid/net/INetdEventCallback;Lcom/android/server/net/watchlist/NetworkWatchlistService$1;,Lcom/android/server/devicepolicy/NetworkLogger$1;]Lcom/android/server/connectivity/NetdEventListenerService;Lcom/android/server/connectivity/NetdEventListenerService;]Landroid/net/metrics/NetworkMetrics;Landroid/net/metrics/NetworkMetrics;
 HPLcom/android/server/connectivity/NetdEventListenerService;->onDnsEvent(IIIILjava/lang/String;[Ljava/lang/String;II)V+]Lcom/android/server/connectivity/NetdEventListenerService;Lcom/android/server/connectivity/NetdEventListenerService;]Landroid/net/INetdEventCallback;Lcom/android/server/net/watchlist/NetworkWatchlistService$1;,Lcom/android/server/devicepolicy/NetworkLogger$1;]Landroid/net/metrics/NetworkMetrics;Landroid/net/metrics/NetworkMetrics;
 PLcom/android/server/connectivity/NetdEventListenerService;->onNat64PrefixEvent(IZLjava/lang/String;I)V
-PLcom/android/server/connectivity/NetdEventListenerService;->onPrivateDnsValidationEvent(ILjava/lang/String;Ljava/lang/String;Z)V
-HPLcom/android/server/connectivity/NetdEventListenerService;->onTcpSocketStatsEvent([I[I[I[I[I)V
+HPLcom/android/server/connectivity/NetdEventListenerService;->onPrivateDnsValidationEvent(ILjava/lang/String;Ljava/lang/String;Z)V
+HPLcom/android/server/connectivity/NetdEventListenerService;->onTcpSocketStatsEvent([I[I[I[I[I)V+]Lcom/android/server/connectivity/NetdEventListenerService;Lcom/android/server/connectivity/NetdEventListenerService;]Landroid/net/metrics/NetworkMetrics;Landroid/net/metrics/NetworkMetrics;
 HPLcom/android/server/connectivity/NetdEventListenerService;->onWakeupEvent(Ljava/lang/String;III[BLjava/lang/String;Ljava/lang/String;IIJ)V
 PLcom/android/server/connectivity/NetdEventListenerService;->projectSnapshotTime(J)J
 PLcom/android/server/connectivity/NetdEventListenerService;->removeNetdEventCallback(I)Z
@@ -18275,25 +19216,30 @@
 PLcom/android/server/connectivity/PacProxyService;->setCurrentProxyScriptUrl(Landroid/net/ProxyInfo;)V
 PLcom/android/server/connectivity/Vpn$1;-><init>(Lcom/android/server/connectivity/Vpn;Landroid/content/Context;Landroid/os/Looper;Ljava/lang/String;Landroid/net/NetworkCapabilities;Landroid/net/LinkProperties;Landroid/net/NetworkScore;Landroid/net/NetworkAgentConfig;Landroid/net/NetworkProvider;)V
 PLcom/android/server/connectivity/Vpn$1;->onNetworkUnwanted()V
-PLcom/android/server/connectivity/Vpn$2;-><init>(Lcom/android/server/connectivity/Vpn;)V
+HSPLcom/android/server/connectivity/Vpn$2;-><init>(Lcom/android/server/connectivity/Vpn;)V
 HPLcom/android/server/connectivity/Vpn$2;->interfaceRemoved(Ljava/lang/String;)V
 PLcom/android/server/connectivity/Vpn$3;-><clinit>()V
+PLcom/android/server/connectivity/Vpn$Connection;->-$$Nest$fgetmService(Lcom/android/server/connectivity/Vpn$Connection;)Landroid/os/IBinder;
 PLcom/android/server/connectivity/Vpn$Connection;-><init>(Lcom/android/server/connectivity/Vpn;)V
 PLcom/android/server/connectivity/Vpn$Connection;-><init>(Lcom/android/server/connectivity/Vpn;Lcom/android/server/connectivity/Vpn$Connection-IA;)V
 PLcom/android/server/connectivity/Vpn$Connection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 PLcom/android/server/connectivity/Vpn$Connection;->onServiceDisconnected(Landroid/content/ComponentName;)V
-PLcom/android/server/connectivity/Vpn$Dependencies;-><init>()V
+HSPLcom/android/server/connectivity/Vpn$Dependencies;-><init>()V
 PLcom/android/server/connectivity/Vpn$Dependencies;->adoptFd(Lcom/android/server/connectivity/Vpn;I)Landroid/os/ParcelFileDescriptor;
+PLcom/android/server/connectivity/Vpn$Dependencies;->getDeviceIdleInternal()Lcom/android/server/DeviceIdleInternal;
 PLcom/android/server/connectivity/Vpn$Dependencies;->isCallerSystem()Z
 PLcom/android/server/connectivity/Vpn$Dependencies;->jniCreate(Lcom/android/server/connectivity/Vpn;I)I
 PLcom/android/server/connectivity/Vpn$Dependencies;->jniGetName(Lcom/android/server/connectivity/Vpn;I)Ljava/lang/String;
 PLcom/android/server/connectivity/Vpn$Dependencies;->jniSetAddresses(Lcom/android/server/connectivity/Vpn;Ljava/lang/String;Ljava/lang/String;)I
 PLcom/android/server/connectivity/Vpn$Dependencies;->setBlocking(Ljava/io/FileDescriptor;Z)V
-PLcom/android/server/connectivity/Vpn$Ikev2SessionCreator;-><init>()V
-PLcom/android/server/connectivity/Vpn$SystemServices;-><init>(Landroid/content/Context;)V
-PLcom/android/server/connectivity/Vpn$SystemServices;->getContentResolverAsUser(I)Landroid/content/ContentResolver;
-PLcom/android/server/connectivity/Vpn$SystemServices;->settingsSecureGetIntForUser(Ljava/lang/String;II)I
-PLcom/android/server/connectivity/Vpn$SystemServices;->settingsSecureGetStringForUser(Ljava/lang/String;I)Ljava/lang/String;
+HSPLcom/android/server/connectivity/Vpn$Ikev2SessionCreator;-><init>()V
+HSPLcom/android/server/connectivity/Vpn$SystemServices;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/connectivity/Vpn$SystemServices;->getContentResolverAsUser(I)Landroid/content/ContentResolver;
+PLcom/android/server/connectivity/Vpn$SystemServices;->pendingIntentGetActivityAsUser(Landroid/content/Intent;ILandroid/os/UserHandle;)Landroid/app/PendingIntent;
+HSPLcom/android/server/connectivity/Vpn$SystemServices;->settingsSecureGetIntForUser(Ljava/lang/String;II)I
+HSPLcom/android/server/connectivity/Vpn$SystemServices;->settingsSecureGetStringForUser(Ljava/lang/String;I)Ljava/lang/String;
+PLcom/android/server/connectivity/Vpn$SystemServices;->settingsSecurePutIntForUser(Ljava/lang/String;II)V
+PLcom/android/server/connectivity/Vpn$SystemServices;->settingsSecurePutStringForUser(Ljava/lang/String;Ljava/lang/String;I)V
 PLcom/android/server/connectivity/Vpn;->-$$Nest$fgetmAppOpsManager(Lcom/android/server/connectivity/Vpn;)Landroid/app/AppOpsManager;
 PLcom/android/server/connectivity/Vpn;->-$$Nest$fgetmConnection(Lcom/android/server/connectivity/Vpn;)Lcom/android/server/connectivity/Vpn$Connection;
 PLcom/android/server/connectivity/Vpn;->-$$Nest$fgetmContext(Lcom/android/server/connectivity/Vpn;)Landroid/content/Context;
@@ -18303,10 +19249,10 @@
 PLcom/android/server/connectivity/Vpn;->-$$Nest$mjniCreate(Lcom/android/server/connectivity/Vpn;I)I
 PLcom/android/server/connectivity/Vpn;->-$$Nest$mjniGetName(Lcom/android/server/connectivity/Vpn;I)Ljava/lang/String;
 PLcom/android/server/connectivity/Vpn;->-$$Nest$mjniSetAddresses(Lcom/android/server/connectivity/Vpn;Ljava/lang/String;Ljava/lang/String;)I
-PLcom/android/server/connectivity/Vpn;-><init>(Landroid/os/Looper;Landroid/content/Context;Landroid/os/INetworkManagementService;Landroid/net/INetd;ILcom/android/server/connectivity/VpnProfileStore;)V
-PLcom/android/server/connectivity/Vpn;-><init>(Landroid/os/Looper;Landroid/content/Context;Lcom/android/server/connectivity/Vpn$Dependencies;Landroid/os/INetworkManagementService;Landroid/net/INetd;ILcom/android/server/connectivity/VpnProfileStore;Lcom/android/server/connectivity/Vpn$SystemServices;Lcom/android/server/connectivity/Vpn$Ikev2SessionCreator;)V
+HSPLcom/android/server/connectivity/Vpn;-><init>(Landroid/os/Looper;Landroid/content/Context;Landroid/os/INetworkManagementService;Landroid/net/INetd;ILcom/android/server/connectivity/VpnProfileStore;)V
+HSPLcom/android/server/connectivity/Vpn;-><init>(Landroid/os/Looper;Landroid/content/Context;Lcom/android/server/connectivity/Vpn$Dependencies;Landroid/os/INetworkManagementService;Landroid/net/INetd;ILcom/android/server/connectivity/VpnProfileStore;Lcom/android/server/connectivity/Vpn$SystemServices;Lcom/android/server/connectivity/Vpn$Ikev2SessionCreator;)V
 PLcom/android/server/connectivity/Vpn;->addUserToRanges(Ljava/util/Set;ILjava/util/List;Ljava/util/List;)V
-PLcom/android/server/connectivity/Vpn;->agentConnect()V
+HPLcom/android/server/connectivity/Vpn;->agentConnect()V
 PLcom/android/server/connectivity/Vpn;->agentDisconnect()V
 PLcom/android/server/connectivity/Vpn;->agentDisconnect(Landroid/net/NetworkAgent;)V
 PLcom/android/server/connectivity/Vpn;->canHaveRestrictedProfile(I)Z
@@ -18314,20 +19260,21 @@
 PLcom/android/server/connectivity/Vpn;->createUidRangeForUser(I)Landroid/util/Range;
 PLcom/android/server/connectivity/Vpn;->createUserAndRestrictedProfilesRanges(ILjava/util/List;Ljava/util/List;)Ljava/util/Set;
 HPLcom/android/server/connectivity/Vpn;->doesPackageHaveAppop(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)Z
-PLcom/android/server/connectivity/Vpn;->doesPackageTargetAtLeastQ(Ljava/lang/String;)Z
-PLcom/android/server/connectivity/Vpn;->enforceControlPermission()V
+HSPLcom/android/server/connectivity/Vpn;->doesPackageTargetAtLeastQ(Ljava/lang/String;)Z
+HPLcom/android/server/connectivity/Vpn;->enforceControlPermission()V
 PLcom/android/server/connectivity/Vpn;->enforceControlPermissionOrInternalCaller()V
 PLcom/android/server/connectivity/Vpn;->enforceNotRestrictedUser()V
 PLcom/android/server/connectivity/Vpn;->enforceSettingsPermission()V
-PLcom/android/server/connectivity/Vpn;->establish(Lcom/android/internal/net/VpnConfig;)Landroid/os/ParcelFileDescriptor;
+HPLcom/android/server/connectivity/Vpn;->establish(Lcom/android/internal/net/VpnConfig;)Landroid/os/ParcelFileDescriptor;
 PLcom/android/server/connectivity/Vpn;->getActiveVpnType()I
 PLcom/android/server/connectivity/Vpn;->getAlwaysOn()Z
 PLcom/android/server/connectivity/Vpn;->getAlwaysOnPackage()Ljava/lang/String;
-HPLcom/android/server/connectivity/Vpn;->getAppUid(Ljava/lang/String;I)I
+HSPLcom/android/server/connectivity/Vpn;->getAppUid(Ljava/lang/String;I)I
 PLcom/android/server/connectivity/Vpn;->getAppsUids(Ljava/util/List;I)Ljava/util/SortedSet;
 PLcom/android/server/connectivity/Vpn;->getLegacyVpnInfo()Lcom/android/internal/net/LegacyVpnInfo;
 PLcom/android/server/connectivity/Vpn;->getLegacyVpnInfoPrivileged()Lcom/android/internal/net/LegacyVpnInfo;
 PLcom/android/server/connectivity/Vpn;->getLockdown()Z
+PLcom/android/server/connectivity/Vpn;->getNetworkInfo()Landroid/net/NetworkInfo;
 PLcom/android/server/connectivity/Vpn;->getPackage()Ljava/lang/String;
 PLcom/android/server/connectivity/Vpn;->getProfileNameForPackage(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/connectivity/Vpn;->getUnderlyingNetworkInfo()Landroid/net/UnderlyingNetworkInfo;
@@ -18336,13 +19283,14 @@
 PLcom/android/server/connectivity/Vpn;->getVpnProfileStore()Lcom/android/server/connectivity/VpnProfileStore;
 PLcom/android/server/connectivity/Vpn;->isAlwaysOnPackageSupported(Ljava/lang/String;)Z
 PLcom/android/server/connectivity/Vpn;->isCallerEstablishedOwnerLocked()Z
-HPLcom/android/server/connectivity/Vpn;->isCurrentPreparedPackage(Ljava/lang/String;)Z
-PLcom/android/server/connectivity/Vpn;->isNullOrLegacyVpn(Ljava/lang/String;)Z
+HSPLcom/android/server/connectivity/Vpn;->isCurrentPreparedPackage(Ljava/lang/String;)Z
+HSPLcom/android/server/connectivity/Vpn;->isNullOrLegacyVpn(Ljava/lang/String;)Z
 PLcom/android/server/connectivity/Vpn;->isRunningLocked()Z
 PLcom/android/server/connectivity/Vpn;->isSettingsVpnLocked()Z
+PLcom/android/server/connectivity/Vpn;->isVpnApp(Ljava/lang/String;)Z
 HPLcom/android/server/connectivity/Vpn;->isVpnPreConsented(Landroid/content/Context;Ljava/lang/String;I)Z
 HPLcom/android/server/connectivity/Vpn;->isVpnServicePreConsented(Landroid/content/Context;Ljava/lang/String;)Z
-PLcom/android/server/connectivity/Vpn;->loadAlwaysOnPackage()V
+HSPLcom/android/server/connectivity/Vpn;->loadAlwaysOnPackage()V
 HPLcom/android/server/connectivity/Vpn;->makeLinkProperties()Landroid/net/LinkProperties;
 PLcom/android/server/connectivity/Vpn;->onUserAdded(I)V
 PLcom/android/server/connectivity/Vpn;->onUserRemoved(I)V
@@ -18350,20 +19298,22 @@
 HPLcom/android/server/connectivity/Vpn;->prepare(Ljava/lang/String;Ljava/lang/String;I)Z
 PLcom/android/server/connectivity/Vpn;->prepareInternal(Ljava/lang/String;)V
 PLcom/android/server/connectivity/Vpn;->resetNetworkCapabilities()V
-PLcom/android/server/connectivity/Vpn;->setAllowOnlyVpnForUids(ZLjava/util/Collection;)Z
-PLcom/android/server/connectivity/Vpn;->setAlwaysOnPackageInternal(Ljava/lang/String;ZLjava/util/List;)Z
+PLcom/android/server/connectivity/Vpn;->saveAlwaysOnPackage()V
+HSPLcom/android/server/connectivity/Vpn;->setAllowOnlyVpnForUids(ZLjava/util/Collection;)Z
+PLcom/android/server/connectivity/Vpn;->setAlwaysOnPackage(Ljava/lang/String;ZLjava/util/List;)Z
+HSPLcom/android/server/connectivity/Vpn;->setAlwaysOnPackageInternal(Ljava/lang/String;ZLjava/util/List;)Z
 PLcom/android/server/connectivity/Vpn;->setPackageAuthorization(Ljava/lang/String;I)Z
 HPLcom/android/server/connectivity/Vpn;->setUnderlyingNetworks([Landroid/net/Network;)Z
-PLcom/android/server/connectivity/Vpn;->setVpnForcedLocked(Z)V
+HSPLcom/android/server/connectivity/Vpn;->setVpnForcedLocked(Z)V
 PLcom/android/server/connectivity/Vpn;->startAlwaysOnVpn()Z
-PLcom/android/server/connectivity/Vpn;->updateAlwaysOnNotification(Landroid/net/NetworkInfo$DetailedState;)V
+HSPLcom/android/server/connectivity/Vpn;->updateAlwaysOnNotification(Landroid/net/NetworkInfo$DetailedState;)V
 PLcom/android/server/connectivity/Vpn;->updateLinkPropertiesInPlaceIfPossible(Landroid/net/NetworkAgent;Lcom/android/internal/net/VpnConfig;)Z
-PLcom/android/server/connectivity/Vpn;->updateState(Landroid/net/NetworkInfo$DetailedState;Ljava/lang/String;)V
+HPLcom/android/server/connectivity/Vpn;->updateState(Landroid/net/NetworkInfo$DetailedState;Ljava/lang/String;)V
 HPLcom/android/server/connectivity/Vpn;->verifyCallingUidAndPackage(Ljava/lang/String;)V
 HSPLcom/android/server/connectivity/VpnProfileStore;-><init>()V
 HSPLcom/android/server/connectivity/VpnProfileStore;->get(Ljava/lang/String;)[B
 HSPLcom/android/server/content/ContentService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/content/ContentService;)V
-PLcom/android/server/content/ContentService$$ExternalSyntheticLambda0;->getPackages(Ljava/lang/String;I)[Ljava/lang/String;
+HSPLcom/android/server/content/ContentService$$ExternalSyntheticLambda0;->getPackages(Ljava/lang/String;I)[Ljava/lang/String;
 HSPLcom/android/server/content/ContentService$1;-><init>(Lcom/android/server/content/ContentService;)V
 HPLcom/android/server/content/ContentService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V+]Landroid/net/Uri;Landroid/net/Uri$OpaqueUri;]Landroid/content/Intent;Landroid/content/Intent;
 PLcom/android/server/content/ContentService$2;-><init>(Lcom/android/server/content/ContentService;Landroid/util/SparseIntArray;)V
@@ -18376,30 +19326,30 @@
 PLcom/android/server/content/ContentService$Lifecycle;->onUserStopped(Lcom/android/server/SystemService$TargetUser;)V
 PLcom/android/server/content/ContentService$Lifecycle;->onUserStopping(Lcom/android/server/SystemService$TargetUser;)V
 PLcom/android/server/content/ContentService$Lifecycle;->onUserUnlocking(Lcom/android/server/SystemService$TargetUser;)V
-HPLcom/android/server/content/ContentService$ObserverCollector$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/content/ContentService$ObserverCollector$Key;Ljava/util/List;)V
-HPLcom/android/server/content/ContentService$ObserverCollector$$ExternalSyntheticLambda0;->run()V
-HPLcom/android/server/content/ContentService$ObserverCollector$Key;-><init>(Landroid/database/IContentObserver;IZII)V
+HSPLcom/android/server/content/ContentService$ObserverCollector$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/content/ContentService$ObserverCollector$Key;Ljava/util/List;)V
+HSPLcom/android/server/content/ContentService$ObserverCollector$$ExternalSyntheticLambda0;->run()V
+HSPLcom/android/server/content/ContentService$ObserverCollector$Key;-><init>(Landroid/database/IContentObserver;IZII)V
 HPLcom/android/server/content/ContentService$ObserverCollector$Key;->equals(Ljava/lang/Object;)Z
-HPLcom/android/server/content/ContentService$ObserverCollector$Key;->hashCode()I
-HPLcom/android/server/content/ContentService$ObserverCollector;->$r8$lambda$20N4P_9I3I81aCYQxFWUsglq_-U(Lcom/android/server/content/ContentService$ObserverCollector$Key;Ljava/util/List;)V
-HPLcom/android/server/content/ContentService$ObserverCollector;-><init>()V
-HPLcom/android/server/content/ContentService$ObserverCollector;->collect(Landroid/database/IContentObserver;IZLandroid/net/Uri;II)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/List;Ljava/util/ArrayList;
-HPLcom/android/server/content/ContentService$ObserverCollector;->dispatch()V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Handler;Landroid/os/Handler;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Ljava/lang/Runnable;Lcom/android/server/content/ContentService$ObserverCollector$$ExternalSyntheticLambda0;
-HPLcom/android/server/content/ContentService$ObserverCollector;->lambda$dispatch$0(Lcom/android/server/content/ContentService$ObserverCollector$Key;Ljava/util/List;)V+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/database/IContentObserver;Landroid/database/ContentObserver$Transport;,Landroid/database/IContentObserver$Stub$Proxy;
-HPLcom/android/server/content/ContentService$ObserverNode$ObserverEntry;->-$$Nest$fgetuserHandle(Lcom/android/server/content/ContentService$ObserverNode$ObserverEntry;)I
+HSPLcom/android/server/content/ContentService$ObserverCollector$Key;->hashCode()I
+HSPLcom/android/server/content/ContentService$ObserverCollector;->$r8$lambda$20N4P_9I3I81aCYQxFWUsglq_-U(Lcom/android/server/content/ContentService$ObserverCollector$Key;Ljava/util/List;)V
+HSPLcom/android/server/content/ContentService$ObserverCollector;-><init>()V
+HSPLcom/android/server/content/ContentService$ObserverCollector;->collect(Landroid/database/IContentObserver;IZLandroid/net/Uri;II)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/content/ContentService$ObserverCollector;->dispatch()V+]Landroid/os/Handler;Landroid/os/Handler;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Ljava/lang/Runnable;Lcom/android/server/content/ContentService$ObserverCollector$$ExternalSyntheticLambda0;
+HSPLcom/android/server/content/ContentService$ObserverCollector;->lambda$dispatch$0(Lcom/android/server/content/ContentService$ObserverCollector$Key;Ljava/util/List;)V+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/database/IContentObserver;Landroid/database/ContentObserver$Transport;,Landroid/database/IContentObserver$Stub$Proxy;
+HSPLcom/android/server/content/ContentService$ObserverNode$ObserverEntry;->-$$Nest$fgetuserHandle(Lcom/android/server/content/ContentService$ObserverNode$ObserverEntry;)I
 HSPLcom/android/server/content/ContentService$ObserverNode$ObserverEntry;-><init>(Lcom/android/server/content/ContentService$ObserverNode;Landroid/database/IContentObserver;ZLjava/lang/Object;IIILandroid/net/Uri;)V+]Lcom/android/internal/os/BinderDeathDispatcher;Lcom/android/internal/os/BinderDeathDispatcher;
 HPLcom/android/server/content/ContentService$ObserverNode$ObserverEntry;->binderDied()V+]Lcom/android/server/content/ContentService$ObserverNode;Lcom/android/server/content/ContentService$ObserverNode;
 HPLcom/android/server/content/ContentService$ObserverNode$ObserverEntry;->dumpLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/util/SparseIntArray;)V
 HSPLcom/android/server/content/ContentService$ObserverNode;-><init>(Ljava/lang/String;)V
 HSPLcom/android/server/content/ContentService$ObserverNode;->addObserverLocked(Landroid/net/Uri;ILandroid/database/IContentObserver;ZLjava/lang/Object;III)V+]Lcom/android/server/content/ContentService$ObserverNode;Lcom/android/server/content/ContentService$ObserverNode;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/content/ContentService$ObserverNode;->addObserverLocked(Landroid/net/Uri;Landroid/database/IContentObserver;ZLjava/lang/Object;III)V
-HPLcom/android/server/content/ContentService$ObserverNode;->collectMyObserversLocked(Landroid/net/Uri;ZLandroid/database/IContentObserver;ZIILcom/android/server/content/ContentService$ObserverCollector;)V+]Lcom/android/server/content/ContentService$ObserverCollector;Lcom/android/server/content/ContentService$ObserverCollector;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/database/IContentObserver;Landroid/database/ContentObserver$Transport;,Landroid/database/IContentObserver$Stub$Proxy;
-HPLcom/android/server/content/ContentService$ObserverNode;->collectObserversLocked(Landroid/net/Uri;IILandroid/database/IContentObserver;ZIILcom/android/server/content/ContentService$ObserverCollector;)V+]Lcom/android/server/content/ContentService$ObserverNode;Lcom/android/server/content/ContentService$ObserverNode;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/content/ContentService$ObserverNode;->collectMyObserversLocked(Landroid/net/Uri;ZLandroid/database/IContentObserver;ZIILcom/android/server/content/ContentService$ObserverCollector;)V+]Lcom/android/server/content/ContentService$ObserverCollector;Lcom/android/server/content/ContentService$ObserverCollector;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/database/IContentObserver;Landroid/database/ContentObserver$Transport;,Landroid/database/IContentObserver$Stub$Proxy;
+HSPLcom/android/server/content/ContentService$ObserverNode;->collectObserversLocked(Landroid/net/Uri;IILandroid/database/IContentObserver;ZIILcom/android/server/content/ContentService$ObserverCollector;)V+]Lcom/android/server/content/ContentService$ObserverNode;Lcom/android/server/content/ContentService$ObserverNode;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/content/ContentService$ObserverNode;->countUriSegments(Landroid/net/Uri;)I+]Ljava/util/List;Landroid/net/Uri$PathSegments;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;
 HPLcom/android/server/content/ContentService$ObserverNode;->dumpLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[ILandroid/util/SparseIntArray;)V
 HSPLcom/android/server/content/ContentService$ObserverNode;->getUriSegment(Landroid/net/Uri;I)Ljava/lang/String;
-HPLcom/android/server/content/ContentService$ObserverNode;->removeObserverLocked(Landroid/database/IContentObserver;)Z+]Lcom/android/server/content/ContentService$ObserverNode;Lcom/android/server/content/ContentService$ObserverNode;]Lcom/android/internal/os/BinderDeathDispatcher;Lcom/android/internal/os/BinderDeathDispatcher;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/database/IContentObserver;Landroid/database/ContentObserver$Transport;,Landroid/database/IContentObserver$Stub$Proxy;
-PLcom/android/server/content/ContentService;->$r8$lambda$mH9LzsOWgTqAeeGKESJk2z3AkfM(Lcom/android/server/content/ContentService;Ljava/lang/String;I)[Ljava/lang/String;
+HSPLcom/android/server/content/ContentService$ObserverNode;->removeObserverLocked(Landroid/database/IContentObserver;)Z+]Lcom/android/server/content/ContentService$ObserverNode;Lcom/android/server/content/ContentService$ObserverNode;]Lcom/android/internal/os/BinderDeathDispatcher;Lcom/android/internal/os/BinderDeathDispatcher;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/database/IContentObserver;Landroid/database/ContentObserver$Transport;,Landroid/database/IContentObserver$Stub$Proxy;
+HSPLcom/android/server/content/ContentService;->$r8$lambda$mH9LzsOWgTqAeeGKESJk2z3AkfM(Lcom/android/server/content/ContentService;Ljava/lang/String;I)[Ljava/lang/String;
 HPLcom/android/server/content/ContentService;->-$$Nest$fgetmCache(Lcom/android/server/content/ContentService;)Landroid/util/SparseArray;
 HPLcom/android/server/content/ContentService;->-$$Nest$minvalidateCacheLocked(Lcom/android/server/content/ContentService;ILjava/lang/String;Landroid/net/Uri;)V
 HSPLcom/android/server/content/ContentService;->-$$Nest$sfgetsObserverDeathDispatcher()Lcom/android/internal/os/BinderDeathDispatcher;
@@ -18407,14 +19357,14 @@
 HSPLcom/android/server/content/ContentService;-><init>(Landroid/content/Context;Z)V
 HPLcom/android/server/content/ContentService;->addPeriodicSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;J)V
 PLcom/android/server/content/ContentService;->addStatusChangeListener(ILandroid/content/ISyncStatusObserver;)V
-PLcom/android/server/content/ContentService;->cancelSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;)V
-PLcom/android/server/content/ContentService;->cancelSyncAsUser(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;I)V
+HPLcom/android/server/content/ContentService;->cancelSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;)V
+HPLcom/android/server/content/ContentService;->cancelSyncAsUser(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;I)V
 HPLcom/android/server/content/ContentService;->checkUriPermission(Landroid/net/Uri;IIII)I
 HPLcom/android/server/content/ContentService;->clampPeriod(J)J
 PLcom/android/server/content/ContentService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/content/ContentService;->enforceCrossUserPermission(ILjava/lang/String;)V+]Landroid/content/Context;Landroid/app/ContextImpl;
 PLcom/android/server/content/ContentService;->enforceNonFullCrossUserPermission(ILjava/lang/String;)V
-PLcom/android/server/content/ContentService;->findOrCreateCacheLocked(ILjava/lang/String;)Landroid/util/ArrayMap;
+HPLcom/android/server/content/ContentService;->findOrCreateCacheLocked(ILjava/lang/String;)Landroid/util/ArrayMap;
 HPLcom/android/server/content/ContentService;->getCache(Ljava/lang/String;Landroid/net/Uri;I)Landroid/os/Bundle;
 PLcom/android/server/content/ContentService;->getCurrentSyncs()Ljava/util/List;
 HPLcom/android/server/content/ContentService;->getCurrentSyncsAsUser(I)Ljava/util/List;
@@ -18424,48 +19374,49 @@
 HPLcom/android/server/content/ContentService;->getMasterSyncAutomaticallyAsUser(I)Z
 PLcom/android/server/content/ContentService;->getPeriodicSyncs(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;)Ljava/util/List;
 HPLcom/android/server/content/ContentService;->getProcStateForStatsd(I)I
-HPLcom/android/server/content/ContentService;->getProviderPackageName(Landroid/net/Uri;I)Ljava/lang/String;+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;
-PLcom/android/server/content/ContentService;->getRestrictionLevelForStatsd(I)I
+HSPLcom/android/server/content/ContentService;->getProviderPackageName(Landroid/net/Uri;I)Ljava/lang/String;+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;
+HPLcom/android/server/content/ContentService;->getRestrictionLevelForStatsd(I)I
 HPLcom/android/server/content/ContentService;->getSyncAdapterPackageAsUser(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager;]Lcom/android/server/content/ContentService;Lcom/android/server/content/ContentService;
 HSPLcom/android/server/content/ContentService;->getSyncAdapterPackagesForAuthorityAsUser(Ljava/lang/String;I)[Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager;]Lcom/android/server/content/ContentService;Lcom/android/server/content/ContentService;
-HPLcom/android/server/content/ContentService;->getSyncAdapterTypes()[Landroid/content/SyncAdapterType;
+HPLcom/android/server/content/ContentService;->getSyncAdapterTypes()[Landroid/content/SyncAdapterType;+]Lcom/android/server/content/ContentService;Lcom/android/server/content/ContentService;
 HPLcom/android/server/content/ContentService;->getSyncAdapterTypesAsUser(I)[Landroid/content/SyncAdapterType;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager;]Lcom/android/server/content/ContentService;Lcom/android/server/content/ContentService;
 HPLcom/android/server/content/ContentService;->getSyncAutomatically(Landroid/accounts/Account;Ljava/lang/String;)Z
 HPLcom/android/server/content/ContentService;->getSyncAutomaticallyAsUser(Landroid/accounts/Account;Ljava/lang/String;I)Z
-HPLcom/android/server/content/ContentService;->getSyncExemptionAndCleanUpExtrasForCaller(ILandroid/os/Bundle;)I+]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/content/ContentService;Lcom/android/server/content/ContentService;
-HPLcom/android/server/content/ContentService;->getSyncExemptionForCaller(I)I+]Lcom/android/server/content/ContentService;Lcom/android/server/content/ContentService;
+HSPLcom/android/server/content/ContentService;->getSyncExemptionAndCleanUpExtrasForCaller(ILandroid/os/Bundle;)I+]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/content/ContentService;Lcom/android/server/content/ContentService;
+HSPLcom/android/server/content/ContentService;->getSyncExemptionForCaller(I)I+]Lcom/android/server/content/ContentService;Lcom/android/server/content/ContentService;
 HSPLcom/android/server/content/ContentService;->getSyncManager()Lcom/android/server/content/SyncManager;
 PLcom/android/server/content/ContentService;->getSyncStatusAsUser(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;I)Landroid/content/SyncStatusInfo;
 HSPLcom/android/server/content/ContentService;->handleIncomingUser(Landroid/net/Uri;IIIZI)I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/content/ContentService;Lcom/android/server/content/ContentService;
 HPLcom/android/server/content/ContentService;->hasAccountAccess(ZLandroid/accounts/Account;I)Z+]Landroid/accounts/AccountManagerInternal;Lcom/android/server/accounts/AccountManagerService$AccountManagerInternalImpl;
-HPLcom/android/server/content/ContentService;->invalidateCacheLocked(ILjava/lang/String;Landroid/net/Uri;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/String;Ljava/lang/String;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;
+HSPLcom/android/server/content/ContentService;->invalidateCacheLocked(ILjava/lang/String;Landroid/net/Uri;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/String;Ljava/lang/String;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;
 HPLcom/android/server/content/ContentService;->isSyncActive(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;)Z
 HPLcom/android/server/content/ContentService;->isSyncPendingAsUser(Landroid/accounts/Account;Ljava/lang/String;Landroid/content/ComponentName;I)Z
-PLcom/android/server/content/ContentService;->lambda$new$0(Ljava/lang/String;I)[Ljava/lang/String;
+HSPLcom/android/server/content/ContentService;->lambda$new$0(Ljava/lang/String;I)[Ljava/lang/String;
 PLcom/android/server/content/ContentService;->normalizeSyncable(I)I
-HPLcom/android/server/content/ContentService;->notifyChange([Landroid/net/Uri;Landroid/database/IContentObserver;ZIIILjava/lang/String;)V+]Lcom/android/server/content/ContentService$ObserverNode;Lcom/android/server/content/ContentService$ObserverNode;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/content/ContentService$ObserverCollector;Lcom/android/server/content/ContentService$ObserverCollector;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/content/ContentService;Lcom/android/server/content/ContentService;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;
+HSPLcom/android/server/content/ContentService;->notifyChange([Landroid/net/Uri;Landroid/database/IContentObserver;ZIIILjava/lang/String;)V+]Lcom/android/server/content/ContentService$ObserverNode;Lcom/android/server/content/ContentService$ObserverNode;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/content/ContentService$ObserverCollector;Lcom/android/server/content/ContentService$ObserverCollector;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/content/ContentService;Lcom/android/server/content/ContentService;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;
 HSPLcom/android/server/content/ContentService;->onBootPhase(I)V
 PLcom/android/server/content/ContentService;->onDbCorruption(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/content/ContentService;->onStartUser(I)V
 PLcom/android/server/content/ContentService;->onStopUser(I)V
 PLcom/android/server/content/ContentService;->onUnlockUser(I)V
 PLcom/android/server/content/ContentService;->putCache(Ljava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;I)V
-HSPLcom/android/server/content/ContentService;->registerContentObserver(Landroid/net/Uri;ZLandroid/database/IContentObserver;II)V+]Lcom/android/server/content/ContentService$ObserverNode;Lcom/android/server/content/ContentService$ObserverNode;]Ljava/lang/String;Ljava/lang/String;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/content/ContentService;Lcom/android/server/content/ContentService;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;
+HSPLcom/android/server/content/ContentService;->registerContentObserver(Landroid/net/Uri;ZLandroid/database/IContentObserver;II)V+]Lcom/android/server/content/ContentService$ObserverNode;Lcom/android/server/content/ContentService$ObserverNode;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/content/ContentService;Lcom/android/server/content/ContentService;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;]Ljava/lang/String;Ljava/lang/String;
 HPLcom/android/server/content/ContentService;->removePeriodicSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)V
 PLcom/android/server/content/ContentService;->removeStatusChangeListener(Landroid/content/ISyncStatusObserver;)V
 HPLcom/android/server/content/ContentService;->setIsSyncable(Landroid/accounts/Account;Ljava/lang/String;I)V
 HPLcom/android/server/content/ContentService;->setIsSyncableAsUser(Landroid/accounts/Account;Ljava/lang/String;II)V
+PLcom/android/server/content/ContentService;->setMasterSyncAutomaticallyAsUser(ZI)V
 HPLcom/android/server/content/ContentService;->setSyncAutomaticallyAsUser(Landroid/accounts/Account;Ljava/lang/String;ZI)V
 PLcom/android/server/content/ContentService;->sync(Landroid/content/SyncRequest;Ljava/lang/String;)V
 HPLcom/android/server/content/ContentService;->syncAsUser(Landroid/content/SyncRequest;ILjava/lang/String;)V
-HPLcom/android/server/content/ContentService;->unregisterContentObserver(Landroid/database/IContentObserver;)V+]Lcom/android/server/content/ContentService$ObserverNode;Lcom/android/server/content/ContentService$ObserverNode;
+HSPLcom/android/server/content/ContentService;->unregisterContentObserver(Landroid/database/IContentObserver;)V+]Lcom/android/server/content/ContentService$ObserverNode;Lcom/android/server/content/ContentService$ObserverNode;
 HPLcom/android/server/content/ContentService;->validateExtras(ILandroid/os/Bundle;)V
 PLcom/android/server/content/SyncAdapterStateFetcher;-><init>()V
 PLcom/android/server/content/SyncAdapterStateFetcher;->getStandbyBucket(ILjava/lang/String;)I
 PLcom/android/server/content/SyncAdapterStateFetcher;->isAppActive(I)Z
 PLcom/android/server/content/SyncJobService;-><clinit>()V
 HPLcom/android/server/content/SyncJobService;-><init>()V
-PLcom/android/server/content/SyncJobService;->callJobFinished(IZLjava/lang/String;)V
+HPLcom/android/server/content/SyncJobService;->callJobFinished(IZLjava/lang/String;)V
 HPLcom/android/server/content/SyncJobService;->callJobFinishedInner(IZLjava/lang/String;)V
 HPLcom/android/server/content/SyncJobService;->getInstance()Lcom/android/server/content/SyncJobService;
 HPLcom/android/server/content/SyncJobService;->isReady()Z
@@ -18535,9 +19486,9 @@
 PLcom/android/server/content/SyncManager$14;->compare(Lcom/android/server/content/SyncManager$AccountSyncStats;Lcom/android/server/content/SyncManager$AccountSyncStats;)I
 PLcom/android/server/content/SyncManager$14;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLcom/android/server/content/SyncManager$1;-><init>(Lcom/android/server/content/SyncManager;)V
-PLcom/android/server/content/SyncManager$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/content/SyncManager$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/content/SyncManager$2;-><init>(Lcom/android/server/content/SyncManager;)V
-PLcom/android/server/content/SyncManager$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/content/SyncManager$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/content/SyncManager$3;-><init>(Lcom/android/server/content/SyncManager;)V
 PLcom/android/server/content/SyncManager$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/content/SyncManager$4;-><init>(Lcom/android/server/content/SyncManager;)V
@@ -18568,10 +19519,10 @@
 PLcom/android/server/content/SyncManager$AuthoritySyncStats;-><init>(Ljava/lang/String;Lcom/android/server/content/SyncManager$AuthoritySyncStats-IA;)V
 HPLcom/android/server/content/SyncManager$OnUnsyncableAccountCheck$1;-><init>(Lcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;)V
 HPLcom/android/server/content/SyncManager$OnUnsyncableAccountCheck$1;->onUnsyncableAccountDone(Z)V
-PLcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;->-$$Nest$monReady(Lcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;)V
+HPLcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;->-$$Nest$monReady(Lcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;)V
 HPLcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;-><init>(Landroid/content/pm/RegisteredServicesCache$ServiceInfo;Lcom/android/server/content/SyncManager$OnReadyCallback;)V
-HPLcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;->onReady()V
-PLcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HPLcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;->onReady()V+]Lcom/android/server/content/SyncManager$OnReadyCallback;Lcom/android/server/content/SyncManager$$ExternalSyntheticLambda11;
+HPLcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V+]Landroid/content/ISyncAdapter;Landroid/content/ISyncAdapter$Stub$Proxy;
 PLcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;->onServiceDisconnected(Landroid/content/ComponentName;)V
 PLcom/android/server/content/SyncManager$PrintTable;-><init>(I)V
 PLcom/android/server/content/SyncManager$PrintTable;->getNumRows()I
@@ -18586,7 +19537,7 @@
 PLcom/android/server/content/SyncManager$SyncHandler;->$r8$lambda$PZ_zTiGnSiYTpeHD9MzpdgV8OWk(Lcom/android/server/content/SyncManager$SyncHandler;Lcom/android/server/content/SyncStorageEngine$EndPoint;JJLandroid/os/Bundle;Landroid/os/Bundle;)V
 PLcom/android/server/content/SyncManager$SyncHandler;->-$$Nest$mgetSyncWakeLock(Lcom/android/server/content/SyncManager$SyncHandler;Lcom/android/server/content/SyncOperation;)Landroid/os/PowerManager$WakeLock;
 HSPLcom/android/server/content/SyncManager$SyncHandler;-><init>(Lcom/android/server/content/SyncManager;Landroid/os/Looper;)V
-PLcom/android/server/content/SyncManager$SyncHandler;->cancelActiveSyncH(Lcom/android/server/content/SyncStorageEngine$EndPoint;Landroid/os/Bundle;Ljava/lang/String;)V
+HPLcom/android/server/content/SyncManager$SyncHandler;->cancelActiveSyncH(Lcom/android/server/content/SyncStorageEngine$EndPoint;Landroid/os/Bundle;Ljava/lang/String;)V
 HPLcom/android/server/content/SyncManager$SyncHandler;->closeActiveSyncContext(Lcom/android/server/content/SyncManager$ActiveSyncContext;)V
 HPLcom/android/server/content/SyncManager$SyncHandler;->computeSyncOpState(Lcom/android/server/content/SyncOperation;)I
 PLcom/android/server/content/SyncManager$SyncHandler;->deferActiveSyncH(Lcom/android/server/content/SyncManager$ActiveSyncContext;Ljava/lang/String;)V
@@ -18602,7 +19553,7 @@
 PLcom/android/server/content/SyncManager$SyncHandler;->lambda$updateOrAddPeriodicSyncH$0(Lcom/android/server/content/SyncStorageEngine$EndPoint;JJLandroid/os/Bundle;Landroid/os/Bundle;)V
 PLcom/android/server/content/SyncManager$SyncHandler;->logAccountError(Ljava/lang/String;)V
 PLcom/android/server/content/SyncManager$SyncHandler;->maybeUpdateSyncPeriodH(Lcom/android/server/content/SyncOperation;JJ)V
-HPLcom/android/server/content/SyncManager$SyncHandler;->removePeriodicSyncH(Lcom/android/server/content/SyncStorageEngine$EndPoint;Landroid/os/Bundle;Ljava/lang/String;)V+]Lcom/android/server/content/SyncOperation;Lcom/android/server/content/SyncOperation;]Lcom/android/server/content/SyncStorageEngine$EndPoint;Lcom/android/server/content/SyncStorageEngine$EndPoint;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HPLcom/android/server/content/SyncManager$SyncHandler;->removePeriodicSyncH(Lcom/android/server/content/SyncStorageEngine$EndPoint;Landroid/os/Bundle;Ljava/lang/String;)V+]Lcom/android/server/content/SyncStorageEngine$EndPoint;Lcom/android/server/content/SyncStorageEngine$EndPoint;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/server/content/SyncOperation;Lcom/android/server/content/SyncOperation;
 PLcom/android/server/content/SyncManager$SyncHandler;->removePeriodicSyncInternalH(Lcom/android/server/content/SyncOperation;Ljava/lang/String;)V
 PLcom/android/server/content/SyncManager$SyncHandler;->reschedulePeriodicSyncH(Lcom/android/server/content/SyncOperation;)V
 HPLcom/android/server/content/SyncManager$SyncHandler;->runBoundToAdapterH(Lcom/android/server/content/SyncManager$ActiveSyncContext;Landroid/os/IBinder;)V
@@ -18617,7 +19568,7 @@
 PLcom/android/server/content/SyncManager$SyncTimeTracker;->timeSpentSyncing()J
 HPLcom/android/server/content/SyncManager$SyncTimeTracker;->update()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/content/SyncManager$UpdatePeriodicSyncMessagePayload;-><init>(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncStorageEngine$EndPoint;JJLandroid/os/Bundle;)V
-PLcom/android/server/content/SyncManager;->$r8$lambda$6WOZ6whe3aGhtRg8ibCORDX2qG0(Landroid/content/Context;Lcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;)V
+HPLcom/android/server/content/SyncManager;->$r8$lambda$6WOZ6whe3aGhtRg8ibCORDX2qG0(Landroid/content/Context;Lcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;)V
 PLcom/android/server/content/SyncManager;->$r8$lambda$C_wFGtdjbW8fAiBrAgJSuqfZ4TA(Lcom/android/server/content/SyncOperation;)Z
 PLcom/android/server/content/SyncManager;->$r8$lambda$Cb9D5B28LqUeotYBnyDglDKi1v8(Lcom/android/server/content/SyncOperation;)Z
 PLcom/android/server/content/SyncManager;->$r8$lambda$DQLP2CS1NdeepAOPF10tGdqknHA(Lcom/android/server/content/SyncManager;I)V
@@ -18636,7 +19587,7 @@
 HPLcom/android/server/content/SyncManager;->-$$Nest$fgetmBatteryStats(Lcom/android/server/content/SyncManager;)Lcom/android/internal/app/IBatteryStats;
 PLcom/android/server/content/SyncManager;->-$$Nest$fgetmConstants(Lcom/android/server/content/SyncManager;)Lcom/android/server/content/SyncManagerConstants;
 HPLcom/android/server/content/SyncManager;->-$$Nest$fgetmContext(Lcom/android/server/content/SyncManager;)Landroid/content/Context;
-PLcom/android/server/content/SyncManager;->-$$Nest$fgetmDataConnectionIsConnected(Lcom/android/server/content/SyncManager;)Z
+HPLcom/android/server/content/SyncManager;->-$$Nest$fgetmDataConnectionIsConnected(Lcom/android/server/content/SyncManager;)Z
 HPLcom/android/server/content/SyncManager;->-$$Nest$fgetmLogger(Lcom/android/server/content/SyncManager;)Lcom/android/server/content/SyncLogger;
 HPLcom/android/server/content/SyncManager;->-$$Nest$fgetmNotificationMgr(Lcom/android/server/content/SyncManager;)Landroid/app/NotificationManager;
 PLcom/android/server/content/SyncManager;->-$$Nest$fgetmPowerManager(Lcom/android/server/content/SyncManager;)Landroid/os/PowerManager;
@@ -18646,9 +19597,9 @@
 HPLcom/android/server/content/SyncManager;->-$$Nest$fgetmSyncStorageEngine(Lcom/android/server/content/SyncManager;)Lcom/android/server/content/SyncStorageEngine;
 HPLcom/android/server/content/SyncManager;->-$$Nest$fputmDataConnectionIsConnected(Lcom/android/server/content/SyncManager;Z)V
 PLcom/android/server/content/SyncManager;->-$$Nest$fputmRunningAccounts(Lcom/android/server/content/SyncManager;[Landroid/accounts/AccountAndUser;)V
-PLcom/android/server/content/SyncManager;->-$$Nest$mcancelJob(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncOperation;Ljava/lang/String;)V
+HPLcom/android/server/content/SyncManager;->-$$Nest$mcancelJob(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncOperation;Ljava/lang/String;)V
 PLcom/android/server/content/SyncManager;->-$$Nest$mclearAllBackoffs(Lcom/android/server/content/SyncManager;Ljava/lang/String;)V
-PLcom/android/server/content/SyncManager;->-$$Nest$mclearBackoffSetting(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncStorageEngine$EndPoint;Ljava/lang/String;)V
+HPLcom/android/server/content/SyncManager;->-$$Nest$mclearBackoffSetting(Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncStorageEngine$EndPoint;Ljava/lang/String;)V
 HPLcom/android/server/content/SyncManager;->-$$Nest$mcontainsAccountAndUser(Lcom/android/server/content/SyncManager;[Landroid/accounts/AccountAndUser;Landroid/accounts/Account;I)Z
 PLcom/android/server/content/SyncManager;->-$$Nest$mgetAllPendingSyncs(Lcom/android/server/content/SyncManager;)Ljava/util/List;
 PLcom/android/server/content/SyncManager;->-$$Nest$mgetJobStats(Lcom/android/server/content/SyncManager;)Ljava/lang/String;
@@ -18675,13 +19626,13 @@
 PLcom/android/server/content/SyncManager;->-$$Nest$mwasPackageEverLaunched(Lcom/android/server/content/SyncManager;Ljava/lang/String;I)Z
 HSPLcom/android/server/content/SyncManager;-><clinit>()V
 HSPLcom/android/server/content/SyncManager;-><init>(Landroid/content/Context;Z)V
-HPLcom/android/server/content/SyncManager;->canAccessAccount(Landroid/accounts/Account;Ljava/lang/String;I)Z
+HPLcom/android/server/content/SyncManager;->canAccessAccount(Landroid/accounts/Account;Ljava/lang/String;I)Z+]Landroid/accounts/AccountManager;Landroid/accounts/AccountManager;
 PLcom/android/server/content/SyncManager;->cancelActiveSync(Lcom/android/server/content/SyncStorageEngine$EndPoint;Landroid/os/Bundle;Ljava/lang/String;)V
 HPLcom/android/server/content/SyncManager;->cancelJob(Lcom/android/server/content/SyncOperation;Ljava/lang/String;)V
 PLcom/android/server/content/SyncManager;->cleanupJobs()V
 PLcom/android/server/content/SyncManager;->clearAllBackoffs(Ljava/lang/String;)V
 HPLcom/android/server/content/SyncManager;->clearBackoffSetting(Lcom/android/server/content/SyncStorageEngine$EndPoint;Ljava/lang/String;)V
-PLcom/android/server/content/SyncManager;->clearScheduledSyncOperations(Lcom/android/server/content/SyncStorageEngine$EndPoint;)V
+HPLcom/android/server/content/SyncManager;->clearScheduledSyncOperations(Lcom/android/server/content/SyncStorageEngine$EndPoint;)V+]Lcom/android/server/content/SyncStorageEngine$EndPoint;Lcom/android/server/content/SyncStorageEngine$EndPoint;]Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager;]Lcom/android/server/content/SyncStorageEngine;Lcom/android/server/content/SyncStorageEngine;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HPLcom/android/server/content/SyncManager;->computeSyncable(Landroid/accounts/Account;ILjava/lang/String;Z)I+]Landroid/content/SyncAdaptersCache;Landroid/content/SyncAdaptersCache;]Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;
 HPLcom/android/server/content/SyncManager;->containsAccountAndUser([Landroid/accounts/AccountAndUser;Landroid/accounts/Account;I)Z+]Landroid/accounts/Account;Landroid/accounts/Account;
 PLcom/android/server/content/SyncManager;->countIf(Ljava/util/Collection;Ljava/util/function/Predicate;)I
@@ -18697,7 +19648,7 @@
 PLcom/android/server/content/SyncManager;->dumpTimeSec(Ljava/io/PrintWriter;J)V
 HPLcom/android/server/content/SyncManager;->formatDurationHMS(Ljava/lang/StringBuilder;J)Ljava/lang/StringBuilder;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 PLcom/android/server/content/SyncManager;->formatTime(J)Ljava/lang/String;
-HPLcom/android/server/content/SyncManager;->getAdapterBindIntent(Landroid/content/Context;Landroid/content/ComponentName;I)Landroid/content/Intent;
+HPLcom/android/server/content/SyncManager;->getAdapterBindIntent(Landroid/content/Context;Landroid/content/ComponentName;I)Landroid/content/Intent;+]Landroid/content/Intent;Landroid/content/Intent;
 HPLcom/android/server/content/SyncManager;->getAllPendingSyncs()Ljava/util/List;+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/job/JobSchedulerInternal;Lcom/android/server/job/JobSchedulerService$LocalService;
 PLcom/android/server/content/SyncManager;->getAllUsers()Ljava/util/List;
 HPLcom/android/server/content/SyncManager;->getConnectivityManager()Landroid/net/ConnectivityManager;
@@ -18713,7 +19664,7 @@
 HPLcom/android/server/content/SyncManager;->getTotalBytesTransferredByUid(I)J
 HPLcom/android/server/content/SyncManager;->getUnusedJobIdH()I
 HPLcom/android/server/content/SyncManager;->increaseBackoffSetting(Lcom/android/server/content/SyncStorageEngine$EndPoint;)V
-PLcom/android/server/content/SyncManager;->isAdapterDelayed(Lcom/android/server/content/SyncStorageEngine$EndPoint;)Z
+HPLcom/android/server/content/SyncManager;->isAdapterDelayed(Lcom/android/server/content/SyncStorageEngine$EndPoint;)Z
 HSPLcom/android/server/content/SyncManager;->isDeviceProvisioned()Z
 HPLcom/android/server/content/SyncManager;->isJobIdInUseLockedH(ILjava/util/List;)Z+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/content/SyncManager;->isSyncStillActiveH(Lcom/android/server/content/SyncManager$ActiveSyncContext;)Z
@@ -18729,7 +19680,7 @@
 PLcom/android/server/content/SyncManager;->lambda$onUnlockUser$2(I)V
 PLcom/android/server/content/SyncManager;->lambda$scheduleSync$4(Landroid/accounts/AccountAndUser;IILjava/lang/String;Landroid/os/Bundle;IJIIILjava/lang/String;Landroid/os/Bundle;)V
 HPLcom/android/server/content/SyncManager;->lambda$scheduleSync$5(Landroid/accounts/AccountAndUser;ILjava/lang/String;Landroid/os/Bundle;IJIIILjava/lang/String;)V
-PLcom/android/server/content/SyncManager;->lambda$sendOnUnsyncableAccount$12(Landroid/content/Context;Lcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;)V
+HPLcom/android/server/content/SyncManager;->lambda$sendOnUnsyncableAccount$12(Landroid/content/Context;Lcom/android/server/content/SyncManager$OnUnsyncableAccountCheck;)V
 HPLcom/android/server/content/SyncManager;->lambda$static$6(Lcom/android/server/content/SyncOperation;Lcom/android/server/content/SyncOperation;)I
 PLcom/android/server/content/SyncManager;->lambda$static$7(Lcom/android/server/content/SyncOperation;Lcom/android/server/content/SyncOperation;)I
 PLcom/android/server/content/SyncManager;->likelyHasPeriodicSyncs()Z
@@ -18742,22 +19693,22 @@
 PLcom/android/server/content/SyncManager;->onUserStopped(I)V
 PLcom/android/server/content/SyncManager;->onUserUnlocked(I)V
 HPLcom/android/server/content/SyncManager;->postMonitorSyncProgressMessage(Lcom/android/server/content/SyncManager$ActiveSyncContext;)V
-HPLcom/android/server/content/SyncManager;->postScheduleSyncMessage(Lcom/android/server/content/SyncOperation;J)V
+HPLcom/android/server/content/SyncManager;->postScheduleSyncMessage(Lcom/android/server/content/SyncOperation;J)V+]Landroid/os/Handler;Lcom/android/server/content/SyncManager$SyncHandler;]Landroid/os/Message;Landroid/os/Message;
 HPLcom/android/server/content/SyncManager;->printTwoDigitNumber(Ljava/lang/StringBuilder;JCZ)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HPLcom/android/server/content/SyncManager;->readDataConnectionState()Z
 HPLcom/android/server/content/SyncManager;->readyToSync(I)Z
-PLcom/android/server/content/SyncManager;->removePeriodicSync(Lcom/android/server/content/SyncStorageEngine$EndPoint;Landroid/os/Bundle;Ljava/lang/String;)V
-HPLcom/android/server/content/SyncManager;->removeStaleAccounts()V
+HPLcom/android/server/content/SyncManager;->removePeriodicSync(Lcom/android/server/content/SyncStorageEngine$EndPoint;Landroid/os/Bundle;Ljava/lang/String;)V
+HPLcom/android/server/content/SyncManager;->removeStaleAccounts()V+]Lcom/android/server/accounts/AccountManagerService;Lcom/android/server/accounts/AccountManagerService;]Lcom/android/server/content/SyncStorageEngine;Lcom/android/server/content/SyncStorageEngine;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/os/UserManager;Landroid/os/UserManager;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 PLcom/android/server/content/SyncManager;->removeSyncsForAuthority(Lcom/android/server/content/SyncStorageEngine$EndPoint;Ljava/lang/String;)V
 HPLcom/android/server/content/SyncManager;->rescheduleSyncs(Lcom/android/server/content/SyncStorageEngine$EndPoint;Ljava/lang/String;)V+]Lcom/android/server/content/SyncStorageEngine$EndPoint;Lcom/android/server/content/SyncStorageEngine$EndPoint;]Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/content/SyncLogger;Lcom/android/server/content/SyncLogger$RotatingFileLogger;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
-HPLcom/android/server/content/SyncManager;->scheduleLocalSync(Landroid/accounts/Account;IILjava/lang/String;IIILjava/lang/String;)V+]Landroid/os/Bundle;Landroid/os/Bundle;]Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager;
+HSPLcom/android/server/content/SyncManager;->scheduleLocalSync(Landroid/accounts/Account;IILjava/lang/String;IIILjava/lang/String;)V+]Landroid/os/Bundle;Landroid/os/Bundle;]Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager;
 HPLcom/android/server/content/SyncManager;->scheduleSync(Landroid/accounts/Account;IILjava/lang/String;Landroid/os/Bundle;IIIILjava/lang/String;)V
-HPLcom/android/server/content/SyncManager;->scheduleSync(Landroid/accounts/Account;IILjava/lang/String;Landroid/os/Bundle;IJZIIILjava/lang/String;)V+]Landroid/content/SyncAdaptersCache;Landroid/content/SyncAdaptersCache;]Landroid/content/SyncAdapterType;Landroid/content/SyncAdapterType;]Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager;]Landroid/os/Bundle;Landroid/os/Bundle;]Lcom/android/server/content/SyncStorageEngine;Lcom/android/server/content/SyncStorageEngine;]Ljava/util/Collection;Ljava/util/Collections$UnmodifiableCollection;]Lcom/android/server/content/SyncLogger;Lcom/android/server/content/SyncLogger$RotatingFileLogger;]Ljava/util/HashSet;Ljava/util/HashSet;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;,Ljava/util/Collections$UnmodifiableCollection$1;]Landroid/accounts/AccountManagerInternal;Lcom/android/server/accounts/AccountManagerService$AccountManagerInternalImpl;
+HSPLcom/android/server/content/SyncManager;->scheduleSync(Landroid/accounts/Account;IILjava/lang/String;Landroid/os/Bundle;IJZIIILjava/lang/String;)V+]Landroid/content/SyncAdaptersCache;Landroid/content/SyncAdaptersCache;]Landroid/content/SyncAdapterType;Landroid/content/SyncAdapterType;]Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager;]Landroid/os/Bundle;Landroid/os/Bundle;]Lcom/android/server/content/SyncStorageEngine;Lcom/android/server/content/SyncStorageEngine;]Ljava/util/Collection;Ljava/util/Collections$UnmodifiableCollection;]Lcom/android/server/content/SyncLogger;Lcom/android/server/content/SyncLogger$RotatingFileLogger;]Ljava/util/HashSet;Ljava/util/HashSet;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;,Ljava/util/Collections$UnmodifiableCollection$1;]Landroid/accounts/AccountManagerInternal;Lcom/android/server/accounts/AccountManagerService$AccountManagerInternalImpl;
 PLcom/android/server/content/SyncManager;->scheduleSyncOperationH(Lcom/android/server/content/SyncOperation;)V
-HPLcom/android/server/content/SyncManager;->scheduleSyncOperationH(Lcom/android/server/content/SyncOperation;J)V+]Landroid/app/job/JobScheduler;Landroid/app/JobSchedulerImpl;]Lcom/android/server/DeviceIdleInternal;Lcom/android/server/DeviceIdleController$LocalService;]Lcom/android/server/content/SyncOperation;Lcom/android/server/content/SyncOperation;]Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager;]Lcom/android/server/content/SyncStorageEngine;Lcom/android/server/content/SyncStorageEngine;]Landroid/app/job/JobInfo$Builder;Landroid/app/job/JobInfo$Builder;]Lcom/android/server/content/SyncManagerConstants;Lcom/android/server/content/SyncManagerConstants;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/lang/Long;Ljava/lang/Long;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-PLcom/android/server/content/SyncManager;->sendCancelSyncsMessage(Lcom/android/server/content/SyncStorageEngine$EndPoint;Landroid/os/Bundle;Ljava/lang/String;)V
+HPLcom/android/server/content/SyncManager;->scheduleSyncOperationH(Lcom/android/server/content/SyncOperation;J)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/DeviceIdleInternal;Lcom/android/server/DeviceIdleController$LocalService;]Lcom/android/server/content/SyncOperation;Lcom/android/server/content/SyncOperation;]Lcom/android/server/content/SyncStorageEngine;Lcom/android/server/content/SyncStorageEngine;]Landroid/app/job/JobInfo$Builder;Landroid/app/job/JobInfo$Builder;]Lcom/android/server/content/SyncManagerConstants;Lcom/android/server/content/SyncManagerConstants;]Landroid/app/job/JobScheduler;Landroid/app/JobSchedulerImpl;]Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/lang/Long;Ljava/lang/Long;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;
+HPLcom/android/server/content/SyncManager;->sendCancelSyncsMessage(Lcom/android/server/content/SyncStorageEngine$EndPoint;Landroid/os/Bundle;Ljava/lang/String;)V
 HPLcom/android/server/content/SyncManager;->sendMessage(Landroid/os/Message;)V
-HPLcom/android/server/content/SyncManager;->sendOnUnsyncableAccount(Landroid/content/Context;Landroid/content/pm/RegisteredServicesCache$ServiceInfo;ILcom/android/server/content/SyncManager$OnReadyCallback;)V
+HPLcom/android/server/content/SyncManager;->sendOnUnsyncableAccount(Landroid/content/Context;Landroid/content/pm/RegisteredServicesCache$ServiceInfo;ILcom/android/server/content/SyncManager$OnReadyCallback;)V+]Landroid/os/Handler;Landroid/os/Handler;]Landroid/content/Context;Landroid/app/ContextImpl;
 HPLcom/android/server/content/SyncManager;->sendSyncFinishedOrCanceledMessage(Lcom/android/server/content/SyncManager$ActiveSyncContext;Landroid/content/SyncResult;)V
 HPLcom/android/server/content/SyncManager;->setAuthorityPendingState(Lcom/android/server/content/SyncStorageEngine$EndPoint;)V+]Lcom/android/server/content/SyncStorageEngine$EndPoint;Lcom/android/server/content/SyncStorageEngine$EndPoint;]Lcom/android/server/content/SyncManager;Lcom/android/server/content/SyncManager;]Lcom/android/server/content/SyncStorageEngine;Lcom/android/server/content/SyncStorageEngine;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HPLcom/android/server/content/SyncManager;->setDelayUntilTime(Lcom/android/server/content/SyncStorageEngine$EndPoint;J)V
@@ -18786,7 +19737,7 @@
 PLcom/android/server/content/SyncOperation;-><init>(Lcom/android/server/content/SyncOperation;JJ)V
 HPLcom/android/server/content/SyncOperation;-><init>(Lcom/android/server/content/SyncStorageEngine$EndPoint;ILjava/lang/String;IILandroid/os/Bundle;ZI)V
 HPLcom/android/server/content/SyncOperation;-><init>(Lcom/android/server/content/SyncStorageEngine$EndPoint;ILjava/lang/String;IILandroid/os/Bundle;ZZIJJI)V+]Lcom/android/server/content/SyncOperation;Lcom/android/server/content/SyncOperation;
-PLcom/android/server/content/SyncOperation;->areExtrasEqual(Landroid/os/Bundle;Z)Z
+HPLcom/android/server/content/SyncOperation;->areExtrasEqual(Landroid/os/Bundle;Z)Z
 PLcom/android/server/content/SyncOperation;->createOneTimeSyncOperation()Lcom/android/server/content/SyncOperation;
 HPLcom/android/server/content/SyncOperation;->dump(Landroid/content/pm/PackageManager;ZLcom/android/server/content/SyncAdapterStateFetcher;Z)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/Bundle;Landroid/os/Bundle;
 PLcom/android/server/content/SyncOperation;->enableBackoff()V
@@ -18806,7 +19757,7 @@
 HPLcom/android/server/content/SyncOperation;->isIgnoreSettings()Z
 HPLcom/android/server/content/SyncOperation;->isInitialization()Z
 HPLcom/android/server/content/SyncOperation;->isNotAllowedOnMetered()Z
-PLcom/android/server/content/SyncOperation;->isScheduledAsExpeditedJob()Z
+HPLcom/android/server/content/SyncOperation;->isScheduledAsExpeditedJob()Z
 PLcom/android/server/content/SyncOperation;->isUpload()Z
 PLcom/android/server/content/SyncOperation;->matchesPeriodicOperation(Lcom/android/server/content/SyncOperation;)Z
 HPLcom/android/server/content/SyncOperation;->maybeCreateFromJobExtras(Landroid/os/PersistableBundle;)Lcom/android/server/content/SyncOperation;+]Ljava/lang/String;Ljava/lang/String;]Landroid/os/PersistableBundle;Landroid/os/PersistableBundle;]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/MapCollections$KeySet;
@@ -18841,27 +19792,27 @@
 HPLcom/android/server/content/SyncStorageEngine;->addActiveSync(Lcom/android/server/content/SyncManager$ActiveSyncContext;)Landroid/content/SyncInfo;
 PLcom/android/server/content/SyncStorageEngine;->addStatusChangeListener(IILandroid/content/ISyncStatusObserver;)V
 PLcom/android/server/content/SyncStorageEngine;->calculateDefaultFlexTime(J)J
-PLcom/android/server/content/SyncStorageEngine;->clearAllBackoffsLocked()V
+HPLcom/android/server/content/SyncStorageEngine;->clearAllBackoffsLocked()V
 HSPLcom/android/server/content/SyncStorageEngine;->createAuthorityLocked(Lcom/android/server/content/SyncStorageEngine$EndPoint;IZ)Lcom/android/server/content/SyncStorageEngine$AuthorityInfo;
 PLcom/android/server/content/SyncStorageEngine;->createCopyPairOfAuthorityWithSyncStatusLocked(Lcom/android/server/content/SyncStorageEngine$AuthorityInfo;)Landroid/util/Pair;
 PLcom/android/server/content/SyncStorageEngine;->getAuthority(I)Lcom/android/server/content/SyncStorageEngine$AuthorityInfo;
 PLcom/android/server/content/SyncStorageEngine;->getAuthorityCount()I
 HPLcom/android/server/content/SyncStorageEngine;->getAuthorityLocked(Lcom/android/server/content/SyncStorageEngine$EndPoint;Ljava/lang/String;)Lcom/android/server/content/SyncStorageEngine$AuthorityInfo;+]Ljava/util/HashMap;Ljava/util/HashMap;
-HPLcom/android/server/content/SyncStorageEngine;->getBackoff(Lcom/android/server/content/SyncStorageEngine$EndPoint;)Landroid/util/Pair;
+HPLcom/android/server/content/SyncStorageEngine;->getBackoff(Lcom/android/server/content/SyncStorageEngine$EndPoint;)Landroid/util/Pair;+]Lcom/android/server/content/SyncStorageEngine;Lcom/android/server/content/SyncStorageEngine;
 PLcom/android/server/content/SyncStorageEngine;->getCopyOfAuthorityWithSyncStatus(Lcom/android/server/content/SyncStorageEngine$EndPoint;)Landroid/util/Pair;
 HPLcom/android/server/content/SyncStorageEngine;->getCurrentDayLocked()I
 HPLcom/android/server/content/SyncStorageEngine;->getCurrentSyncs(I)Ljava/util/List;
-PLcom/android/server/content/SyncStorageEngine;->getCurrentSyncsCopy(IZ)Ljava/util/List;
+HPLcom/android/server/content/SyncStorageEngine;->getCurrentSyncsCopy(IZ)Ljava/util/List;
 HPLcom/android/server/content/SyncStorageEngine;->getCurrentSyncsLocked(I)Ljava/util/List;
 PLcom/android/server/content/SyncStorageEngine;->getDayStatistics()[Lcom/android/server/content/SyncStorageEngine$DayStats;
-HPLcom/android/server/content/SyncStorageEngine;->getDelayUntilTime(Lcom/android/server/content/SyncStorageEngine$EndPoint;)J
+HPLcom/android/server/content/SyncStorageEngine;->getDelayUntilTime(Lcom/android/server/content/SyncStorageEngine$EndPoint;)J+]Lcom/android/server/content/SyncStorageEngine;Lcom/android/server/content/SyncStorageEngine;
 HPLcom/android/server/content/SyncStorageEngine;->getIsSyncable(Landroid/accounts/Account;ILjava/lang/String;)I+]Lcom/android/server/content/SyncStorageEngine;Lcom/android/server/content/SyncStorageEngine;
-HPLcom/android/server/content/SyncStorageEngine;->getMasterSyncAutomatically(I)Z
-HSPLcom/android/server/content/SyncStorageEngine;->getOrCreateAuthorityLocked(Lcom/android/server/content/SyncStorageEngine$EndPoint;IZ)Lcom/android/server/content/SyncStorageEngine$AuthorityInfo;+]Ljava/util/HashMap;Ljava/util/HashMap;
+HPLcom/android/server/content/SyncStorageEngine;->getMasterSyncAutomatically(I)Z+]Ljava/lang/Boolean;Ljava/lang/Boolean;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/content/SyncStorageEngine;->getOrCreateAuthorityLocked(Lcom/android/server/content/SyncStorageEngine$EndPoint;IZ)Lcom/android/server/content/SyncStorageEngine$AuthorityInfo;+]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/server/content/SyncStorageEngine;Lcom/android/server/content/SyncStorageEngine;
 HPLcom/android/server/content/SyncStorageEngine;->getOrCreateSyncStatusLocked(I)Landroid/content/SyncStatusInfo;
 HSPLcom/android/server/content/SyncStorageEngine;->getSingleton()Lcom/android/server/content/SyncStorageEngine;
 PLcom/android/server/content/SyncStorageEngine;->getStatusByAuthority(Lcom/android/server/content/SyncStorageEngine$EndPoint;)Landroid/content/SyncStatusInfo;
-HPLcom/android/server/content/SyncStorageEngine;->getSyncAutomatically(Landroid/accounts/Account;ILjava/lang/String;)Z
+HPLcom/android/server/content/SyncStorageEngine;->getSyncAutomatically(Landroid/accounts/Account;ILjava/lang/String;)Z+]Lcom/android/server/content/SyncStorageEngine;Lcom/android/server/content/SyncStorageEngine;
 PLcom/android/server/content/SyncStorageEngine;->getSyncHistory()Ljava/util/ArrayList;
 HSPLcom/android/server/content/SyncStorageEngine;->init(Landroid/content/Context;Landroid/os/Looper;)V
 HPLcom/android/server/content/SyncStorageEngine;->insertStartSyncEvent(Lcom/android/server/content/SyncOperation;J)J
@@ -18884,7 +19835,7 @@
 HSPLcom/android/server/content/SyncStorageEngine;->readSyncStatusInfoLocked(Landroid/util/proto/ProtoInputStream;)Landroid/content/SyncStatusInfo;
 HSPLcom/android/server/content/SyncStorageEngine;->readSyncStatusStatsLocked(Landroid/util/proto/ProtoInputStream;Landroid/content/SyncStatusInfo$Stats;)V
 HPLcom/android/server/content/SyncStorageEngine;->removeActiveSync(Landroid/content/SyncInfo;I)V
-HPLcom/android/server/content/SyncStorageEngine;->removeStaleAccounts([Landroid/accounts/Account;I)V
+HPLcom/android/server/content/SyncStorageEngine;->removeStaleAccounts([Landroid/accounts/Account;I)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/Collection;Ljava/util/HashMap$Values;]Ljava/util/Iterator;Ljava/util/HashMap$ValueIterator;
 PLcom/android/server/content/SyncStorageEngine;->removeStatusChangeListener(Landroid/content/ISyncStatusObserver;)V
 HPLcom/android/server/content/SyncStorageEngine;->reportActiveChange(Lcom/android/server/content/SyncStorageEngine$EndPoint;)V
 HPLcom/android/server/content/SyncStorageEngine;->reportChange(ILcom/android/server/content/SyncStorageEngine$EndPoint;)V+]Lcom/android/server/content/SyncStorageEngine;Lcom/android/server/content/SyncStorageEngine;
@@ -18897,6 +19848,7 @@
 HPLcom/android/server/content/SyncStorageEngine;->setClockValid()V
 HPLcom/android/server/content/SyncStorageEngine;->setDelayUntilTime(Lcom/android/server/content/SyncStorageEngine$EndPoint;J)V
 HPLcom/android/server/content/SyncStorageEngine;->setIsSyncable(Landroid/accounts/Account;ILjava/lang/String;III)V
+PLcom/android/server/content/SyncStorageEngine;->setMasterSyncAutomatically(ZIIII)V
 HSPLcom/android/server/content/SyncStorageEngine;->setOnAuthorityRemovedListener(Lcom/android/server/content/SyncStorageEngine$OnAuthorityRemovedListener;)V
 HSPLcom/android/server/content/SyncStorageEngine;->setOnSyncRequestListener(Lcom/android/server/content/SyncStorageEngine$OnSyncRequestListener;)V
 HSPLcom/android/server/content/SyncStorageEngine;->setPeriodicSyncAddedListener(Lcom/android/server/content/SyncStorageEngine$PeriodicSyncAddedListener;)V
@@ -18909,14 +19861,14 @@
 HPLcom/android/server/content/SyncStorageEngine;->writeAccountInfoLocked()V
 PLcom/android/server/content/SyncStorageEngine;->writeAllState()V
 HPLcom/android/server/content/SyncStorageEngine;->writeDayStatsLocked(Ljava/io/OutputStream;)V
-PLcom/android/server/content/SyncStorageEngine;->writeStatisticsLocked()V
+HPLcom/android/server/content/SyncStorageEngine;->writeStatisticsLocked()V
 HPLcom/android/server/content/SyncStorageEngine;->writeStatusInfoLocked(Ljava/io/OutputStream;)V+]Landroid/content/SyncStatusInfo;Landroid/content/SyncStatusInfo;]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Lcom/android/server/content/SyncStorageEngine;Lcom/android/server/content/SyncStorageEngine;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/content/SyncStorageEngine;->writeStatusLocked()V
 HPLcom/android/server/content/SyncStorageEngine;->writeStatusStatsLocked(Landroid/util/proto/ProtoOutputStream;Landroid/content/SyncStatusInfo$Stats;)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;
 HSPLcom/android/server/contentcapture/ContentCaptureManagerInternal;-><init>()V
 HSPLcom/android/server/contentcapture/ContentCaptureManagerService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/contentcapture/ContentCaptureManagerService;)V
 PLcom/android/server/contentcapture/ContentCaptureManagerService$$ExternalSyntheticLambda0;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
-PLcom/android/server/contentcapture/ContentCaptureManagerService$$ExternalSyntheticLambda1;-><init>(Ljava/lang/String;Landroid/content/ContentCaptureOptions;)V
+HPLcom/android/server/contentcapture/ContentCaptureManagerService$$ExternalSyntheticLambda1;-><init>(Ljava/lang/String;Landroid/content/ContentCaptureOptions;)V
 HPLcom/android/server/contentcapture/ContentCaptureManagerService$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub;Ljava/lang/String;)V
 PLcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub$$ExternalSyntheticLambda0;->run()V
@@ -18932,7 +19884,7 @@
 PLcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub;->getServiceSettingsActivity(Lcom/android/internal/os/IResultReceiver;)V
 PLcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub;->lambda$getContentCaptureConditions$2(Ljava/lang/String;)V
 PLcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub;->lambda$getServiceSettingsActivity$1()V
-HSPLcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub;->registerContentCaptureOptionsCallback(Ljava/lang/String;Landroid/view/contentcapture/IContentCaptureOptionsCallback;)V
+HSPLcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub;->registerContentCaptureOptionsCallback(Ljava/lang/String;Landroid/view/contentcapture/IContentCaptureOptionsCallback;)V+]Lcom/android/server/contentcapture/ContentCaptureManagerService$GlobalContentCaptureOptions;Lcom/android/server/contentcapture/ContentCaptureManagerService$GlobalContentCaptureOptions;]Landroid/view/contentcapture/IContentCaptureOptionsCallback;Landroid/view/contentcapture/IContentCaptureOptionsCallback$Stub$Proxy;]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;]Lcom/android/server/contentcapture/ContentCaptureManagerService;Lcom/android/server/contentcapture/ContentCaptureManagerService;
 PLcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub;->removeData(Landroid/view/contentcapture/DataRemovalRequest;)V
 HPLcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub;->shareData(Landroid/view/contentcapture/DataShareRequest;Landroid/view/contentcapture/IDataShareWriteAdapter;)V
 HPLcom/android/server/contentcapture/ContentCaptureManagerService$ContentCaptureManagerServiceStub;->startSession(Landroid/os/IBinder;Landroid/os/IBinder;Landroid/content/ComponentName;IILcom/android/internal/os/IResultReceiver;)V
@@ -18944,7 +19896,7 @@
 PLcom/android/server/contentcapture/ContentCaptureManagerService$DataShareCallbackDelegate;->$r8$lambda$WaYOVEO0d3LLF5zzWHrRvCpojkQ(Lcom/android/server/contentcapture/ContentCaptureManagerService$DataShareCallbackDelegate;Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;Landroid/service/contentcapture/IDataShareReadAdapter;)V
 HPLcom/android/server/contentcapture/ContentCaptureManagerService$DataShareCallbackDelegate;-><init>(Landroid/view/contentcapture/DataShareRequest;Landroid/view/contentcapture/IDataShareWriteAdapter;Lcom/android/server/contentcapture/ContentCaptureManagerService;)V
 HPLcom/android/server/contentcapture/ContentCaptureManagerService$DataShareCallbackDelegate;->accept(Landroid/service/contentcapture/IDataShareReadAdapter;)V
-PLcom/android/server/contentcapture/ContentCaptureManagerService$DataShareCallbackDelegate;->bestEffortCloseFileDescriptor(Landroid/os/ParcelFileDescriptor;)V
+HPLcom/android/server/contentcapture/ContentCaptureManagerService$DataShareCallbackDelegate;->bestEffortCloseFileDescriptor(Landroid/os/ParcelFileDescriptor;)V
 HPLcom/android/server/contentcapture/ContentCaptureManagerService$DataShareCallbackDelegate;->bestEffortCloseFileDescriptors([Landroid/os/ParcelFileDescriptor;)V
 HPLcom/android/server/contentcapture/ContentCaptureManagerService$DataShareCallbackDelegate;->createPipe()Landroid/util/Pair;
 HPLcom/android/server/contentcapture/ContentCaptureManagerService$DataShareCallbackDelegate;->enforceDataSharingTtl(Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;Landroid/service/contentcapture/IDataShareReadAdapter;)V
@@ -18963,13 +19915,13 @@
 HSPLcom/android/server/contentcapture/ContentCaptureManagerService$LocalService;-><init>(Lcom/android/server/contentcapture/ContentCaptureManagerService;Lcom/android/server/contentcapture/ContentCaptureManagerService$LocalService-IA;)V
 HSPLcom/android/server/contentcapture/ContentCaptureManagerService$LocalService;->getOptionsForPackage(ILjava/lang/String;)Landroid/content/ContentCaptureOptions;+]Lcom/android/server/contentcapture/ContentCaptureManagerService$GlobalContentCaptureOptions;Lcom/android/server/contentcapture/ContentCaptureManagerService$GlobalContentCaptureOptions;
 HPLcom/android/server/contentcapture/ContentCaptureManagerService$LocalService;->isContentCaptureServiceForUser(II)Z
-HPLcom/android/server/contentcapture/ContentCaptureManagerService$LocalService;->notifyActivityEvent(ILandroid/content/ComponentName;I)V
+HSPLcom/android/server/contentcapture/ContentCaptureManagerService$LocalService;->notifyActivityEvent(ILandroid/content/ComponentName;I)V
 HPLcom/android/server/contentcapture/ContentCaptureManagerService$LocalService;->sendActivityAssistData(ILandroid/os/IBinder;Landroid/os/Bundle;)Z
 HPLcom/android/server/contentcapture/ContentCaptureManagerService;->$r8$lambda$FDuZ1p7y-i2aiPAsfebLOPHm-V0(Ljava/lang/String;Landroid/content/ContentCaptureOptions;Landroid/view/contentcapture/IContentCaptureOptionsCallback;Ljava/lang/Object;)V
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->$r8$lambda$dPqKFRjm5sLLx0XxUXYCLi_rDuk(Lcom/android/server/contentcapture/ContentCaptureManagerService;Landroid/provider/DeviceConfig$Properties;)V
 HSPLcom/android/server/contentcapture/ContentCaptureManagerService;->-$$Nest$fgetmCallbacks(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Landroid/os/RemoteCallbackList;
-PLcom/android/server/contentcapture/ContentCaptureManagerService;->-$$Nest$fgetmDataShareExecutor(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/util/concurrent/Executor;
-PLcom/android/server/contentcapture/ContentCaptureManagerService;->-$$Nest$fgetmHandler(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Landroid/os/Handler;
+HPLcom/android/server/contentcapture/ContentCaptureManagerService;->-$$Nest$fgetmDataShareExecutor(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/util/concurrent/Executor;
+HPLcom/android/server/contentcapture/ContentCaptureManagerService;->-$$Nest$fgetmHandler(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Landroid/os/Handler;
 HPLcom/android/server/contentcapture/ContentCaptureManagerService;->-$$Nest$fgetmPackagesWithShareRequests(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/util/Set;
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->-$$Nest$mgetAmInternal(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Landroid/app/ActivityManagerInternal;
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->-$$Nest$misDefaultServiceLocked(Lcom/android/server/contentcapture/ContentCaptureManagerService;I)Z
@@ -18977,7 +19929,7 @@
 HPLcom/android/server/contentcapture/ContentCaptureManagerService;->-$$Nest$sfgetTAG()Ljava/lang/String;
 HSPLcom/android/server/contentcapture/ContentCaptureManagerService;-><clinit>()V
 HSPLcom/android/server/contentcapture/ContentCaptureManagerService;-><init>(Landroid/content/Context;)V
-PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$000(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
+HPLcom/android/server/contentcapture/ContentCaptureManagerService;->access$000(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$100(Lcom/android/server/contentcapture/ContentCaptureManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$1000(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Lcom/android/server/infra/ServiceNameResolver;
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$1200(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
@@ -18987,12 +19939,12 @@
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$1600(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$1700(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$1800(Lcom/android/server/contentcapture/ContentCaptureManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
-PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$1900(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
+HPLcom/android/server/contentcapture/ContentCaptureManagerService;->access$1900(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$200(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
-PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$2000(Lcom/android/server/contentcapture/ContentCaptureManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
-HPLcom/android/server/contentcapture/ContentCaptureManagerService;->access$2100(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
-HPLcom/android/server/contentcapture/ContentCaptureManagerService;->access$2200(Lcom/android/server/contentcapture/ContentCaptureManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
-PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$2400(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
+HPLcom/android/server/contentcapture/ContentCaptureManagerService;->access$2000(Lcom/android/server/contentcapture/ContentCaptureManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+HSPLcom/android/server/contentcapture/ContentCaptureManagerService;->access$2100(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
+HSPLcom/android/server/contentcapture/ContentCaptureManagerService;->access$2200(Lcom/android/server/contentcapture/ContentCaptureManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+HPLcom/android/server/contentcapture/ContentCaptureManagerService;->access$2400(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$2500(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$2600(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
 HPLcom/android/server/contentcapture/ContentCaptureManagerService;->access$2700(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Lcom/android/server/infra/ServiceNameResolver;
@@ -19002,8 +19954,8 @@
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$500(Lcom/android/server/contentcapture/ContentCaptureManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$600(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$700(Lcom/android/server/contentcapture/ContentCaptureManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
-PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$800(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
-PLcom/android/server/contentcapture/ContentCaptureManagerService;->access$900(Lcom/android/server/contentcapture/ContentCaptureManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
+HPLcom/android/server/contentcapture/ContentCaptureManagerService;->access$800(Lcom/android/server/contentcapture/ContentCaptureManagerService;)Ljava/lang/Object;
+HPLcom/android/server/contentcapture/ContentCaptureManagerService;->access$900(Lcom/android/server/contentcapture/ContentCaptureManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
 HSPLcom/android/server/contentcapture/ContentCaptureManagerService;->assertCalledByPackageOwner(Ljava/lang/String;)V
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->dumpLocked(Ljava/lang/String;Ljava/io/PrintWriter;)V
 PLcom/android/server/contentcapture/ContentCaptureManagerService;->enforceCallingPermissionForManagement()V
@@ -19045,6 +19997,7 @@
 PLcom/android/server/contentcapture/ContentCapturePerUserService;-><clinit>()V
 PLcom/android/server/contentcapture/ContentCapturePerUserService;-><init>(Lcom/android/server/contentcapture/ContentCaptureManagerService;Ljava/lang/Object;ZI)V
 PLcom/android/server/contentcapture/ContentCapturePerUserService;->access$000(Lcom/android/server/contentcapture/ContentCapturePerUserService;)Lcom/android/server/infra/AbstractMasterSystemService;
+PLcom/android/server/contentcapture/ContentCapturePerUserService;->access$100(Lcom/android/server/contentcapture/ContentCapturePerUserService;)I
 PLcom/android/server/contentcapture/ContentCapturePerUserService;->access$1400(Lcom/android/server/contentcapture/ContentCapturePerUserService;)I
 PLcom/android/server/contentcapture/ContentCapturePerUserService;->access$1500(Lcom/android/server/contentcapture/ContentCapturePerUserService;)Lcom/android/server/infra/AbstractMasterSystemService;
 PLcom/android/server/contentcapture/ContentCapturePerUserService;->access$1600(Lcom/android/server/contentcapture/ContentCapturePerUserService;)I
@@ -19084,7 +20037,7 @@
 PLcom/android/server/contentcapture/ContentCapturePerUserService;->updateLocked(Z)Z
 PLcom/android/server/contentcapture/ContentCapturePerUserService;->updateRemoteServiceLocked(Z)V
 HPLcom/android/server/contentcapture/ContentCaptureServerSession$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/contentcapture/ContentCaptureServerSession;)V
-PLcom/android/server/contentcapture/ContentCaptureServerSession$$ExternalSyntheticLambda0;->binderDied()V
+HPLcom/android/server/contentcapture/ContentCaptureServerSession$$ExternalSyntheticLambda0;->binderDied()V
 PLcom/android/server/contentcapture/ContentCaptureServerSession;->$r8$lambda$8PYHoEaJtPor36-x8eYP1nZRhNA(Lcom/android/server/contentcapture/ContentCaptureServerSession;)V
 PLcom/android/server/contentcapture/ContentCaptureServerSession;-><clinit>()V
 HPLcom/android/server/contentcapture/ContentCaptureServerSession;-><init>(Ljava/lang/Object;Landroid/os/IBinder;Landroid/app/assist/ActivityId;Lcom/android/server/contentcapture/ContentCapturePerUserService;Landroid/content/ComponentName;Lcom/android/internal/os/IResultReceiver;IIIII)V
@@ -19109,14 +20062,14 @@
 HPLcom/android/server/contentcapture/RemoteContentCaptureService$$ExternalSyntheticLambda3;->run(Landroid/os/IInterface;)V
 HPLcom/android/server/contentcapture/RemoteContentCaptureService$$ExternalSyntheticLambda4;-><init>(Landroid/view/contentcapture/DataShareRequest;Landroid/service/contentcapture/IDataShareCallback$Stub;)V
 HPLcom/android/server/contentcapture/RemoteContentCaptureService$$ExternalSyntheticLambda4;->run(Landroid/os/IInterface;)V
-PLcom/android/server/contentcapture/RemoteContentCaptureService$$ExternalSyntheticLambda5;-><init>(ILandroid/service/contentcapture/SnapshotData;)V
-PLcom/android/server/contentcapture/RemoteContentCaptureService$$ExternalSyntheticLambda5;->run(Landroid/os/IInterface;)V
+HPLcom/android/server/contentcapture/RemoteContentCaptureService$$ExternalSyntheticLambda5;-><init>(ILandroid/service/contentcapture/SnapshotData;)V
+HPLcom/android/server/contentcapture/RemoteContentCaptureService$$ExternalSyntheticLambda5;->run(Landroid/os/IInterface;)V
 PLcom/android/server/contentcapture/RemoteContentCaptureService;->$r8$lambda$-Fh6mp2tP74QsUtpjHMwwmVWYm4(Landroid/view/contentcapture/DataShareRequest;Landroid/service/contentcapture/IDataShareCallback$Stub;Landroid/service/contentcapture/IContentCaptureService;)V
 PLcom/android/server/contentcapture/RemoteContentCaptureService;->$r8$lambda$7siEipFXhA9uvAtbFNVAzOXPLP4(Landroid/view/contentcapture/DataRemovalRequest;Landroid/service/contentcapture/IContentCaptureService;)V
 PLcom/android/server/contentcapture/RemoteContentCaptureService;->$r8$lambda$TwL4DPvinMgbMYGCnofRVll0MWY(ILandroid/service/contentcapture/IContentCaptureService;)V
-PLcom/android/server/contentcapture/RemoteContentCaptureService;->$r8$lambda$_uld0njOo4_7mNfY8hXILzfginU(ILandroid/service/contentcapture/SnapshotData;Landroid/service/contentcapture/IContentCaptureService;)V
+HPLcom/android/server/contentcapture/RemoteContentCaptureService;->$r8$lambda$_uld0njOo4_7mNfY8hXILzfginU(ILandroid/service/contentcapture/SnapshotData;Landroid/service/contentcapture/IContentCaptureService;)V
 HPLcom/android/server/contentcapture/RemoteContentCaptureService;->$r8$lambda$v9sDcJGYM99mI-eI-4CjucoQ4xk(Landroid/service/contentcapture/ActivityEvent;Landroid/service/contentcapture/IContentCaptureService;)V
-PLcom/android/server/contentcapture/RemoteContentCaptureService;->$r8$lambda$xpDSmauYMmIyrehp_fSOri81QrA(Landroid/view/contentcapture/ContentCaptureContext;IILcom/android/internal/os/IResultReceiver;ILandroid/service/contentcapture/IContentCaptureService;)V
+HPLcom/android/server/contentcapture/RemoteContentCaptureService;->$r8$lambda$xpDSmauYMmIyrehp_fSOri81QrA(Landroid/view/contentcapture/ContentCaptureContext;IILcom/android/internal/os/IResultReceiver;ILandroid/service/contentcapture/IContentCaptureService;)V
 PLcom/android/server/contentcapture/RemoteContentCaptureService;-><init>(Landroid/content/Context;Ljava/lang/String;Landroid/content/ComponentName;Landroid/service/contentcapture/IContentCaptureServiceCallback;ILcom/android/server/contentcapture/ContentCapturePerUserService;ZZI)V
 PLcom/android/server/contentcapture/RemoteContentCaptureService;->ensureBoundLocked()V
 PLcom/android/server/contentcapture/RemoteContentCaptureService;->getServiceInterface(Landroid/os/IBinder;)Landroid/os/IInterface;
@@ -19130,7 +20083,7 @@
 PLcom/android/server/contentcapture/RemoteContentCaptureService;->lambda$onSessionFinished$1(ILandroid/service/contentcapture/IContentCaptureService;)V
 PLcom/android/server/contentcapture/RemoteContentCaptureService;->lambda$onSessionStarted$0(Landroid/view/contentcapture/ContentCaptureContext;IILcom/android/internal/os/IResultReceiver;ILandroid/service/contentcapture/IContentCaptureService;)V
 HPLcom/android/server/contentcapture/RemoteContentCaptureService;->onActivityLifecycleEvent(Landroid/service/contentcapture/ActivityEvent;)V
-PLcom/android/server/contentcapture/RemoteContentCaptureService;->onActivitySnapshotRequest(ILandroid/service/contentcapture/SnapshotData;)V
+HPLcom/android/server/contentcapture/RemoteContentCaptureService;->onActivitySnapshotRequest(ILandroid/service/contentcapture/SnapshotData;)V
 PLcom/android/server/contentcapture/RemoteContentCaptureService;->onDataRemovalRequest(Landroid/view/contentcapture/DataRemovalRequest;)V
 HPLcom/android/server/contentcapture/RemoteContentCaptureService;->onDataShareRequest(Landroid/view/contentcapture/DataShareRequest;Landroid/service/contentcapture/IDataShareCallback$Stub;)V
 HPLcom/android/server/contentcapture/RemoteContentCaptureService;->onSessionFinished(I)V
@@ -19154,31 +20107,31 @@
 PLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;->access$800(Lcom/android/server/contentsuggestions/ContentSuggestionsManagerService;)Ljava/lang/Object;
 PLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;->access$900(Lcom/android/server/contentsuggestions/ContentSuggestionsManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
 HPLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;->enforceCaller(ILjava/lang/String;)V
-PLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;->newServiceLocked(IZ)Lcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;
-PLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;->newServiceLocked(IZ)Lcom/android/server/infra/AbstractPerUserSystemService;
+HSPLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;->newServiceLocked(IZ)Lcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;
+HSPLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;->newServiceLocked(IZ)Lcom/android/server/infra/AbstractPerUserSystemService;
 HSPLcom/android/server/contentsuggestions/ContentSuggestionsManagerService;->onStart()V
 PLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService$1;-><init>(Lcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;)V
 PLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService$1;->onServiceDied(Lcom/android/server/contentsuggestions/RemoteContentSuggestionsService;)V
 PLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService$1;->onServiceDied(Ljava/lang/Object;)V
 PLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;->-$$Nest$mupdateRemoteServiceLocked(Lcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;)V
 PLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;->-$$Nest$sfgetTAG()Ljava/lang/String;
-PLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;-><clinit>()V
-PLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;-><init>(Lcom/android/server/contentsuggestions/ContentSuggestionsManagerService;Ljava/lang/Object;I)V
+HSPLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;-><clinit>()V
+HSPLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;-><init>(Lcom/android/server/contentsuggestions/ContentSuggestionsManagerService;Ljava/lang/Object;I)V
 PLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;->classifyContentSelectionsLocked(Landroid/app/contentsuggestions/ClassificationsRequest;Landroid/app/contentsuggestions/IClassificationsCallback;)V
 HPLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;->ensureRemoteServiceLocked()Lcom/android/server/contentsuggestions/RemoteContentSuggestionsService;
 PLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;->newServiceInfoLocked(Landroid/content/ComponentName;)Landroid/content/pm/ServiceInfo;
 PLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;->notifyInteractionLocked(Ljava/lang/String;Landroid/os/Bundle;)V
 PLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;->provideContextImageLocked(ILandroid/hardware/HardwareBuffer;ILandroid/os/Bundle;)V
 HPLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;->suggestContentSelectionsLocked(Landroid/app/contentsuggestions/SelectionsRequest;Landroid/app/contentsuggestions/ISelectionsCallback;)V
-PLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;->updateLocked(Z)Z
-PLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;->updateRemoteServiceLocked()V
+HSPLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;->updateLocked(Z)Z
+HSPLcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;->updateRemoteServiceLocked()V
 PLcom/android/server/contentsuggestions/RemoteContentSuggestionsService$$ExternalSyntheticLambda0;-><init>(Landroid/app/contentsuggestions/ClassificationsRequest;Landroid/app/contentsuggestions/IClassificationsCallback;)V
 PLcom/android/server/contentsuggestions/RemoteContentSuggestionsService$$ExternalSyntheticLambda0;->run(Landroid/os/IInterface;)V
 PLcom/android/server/contentsuggestions/RemoteContentSuggestionsService$$ExternalSyntheticLambda1;-><init>(Ljava/lang/String;Landroid/os/Bundle;)V
 PLcom/android/server/contentsuggestions/RemoteContentSuggestionsService$$ExternalSyntheticLambda1;->run(Landroid/os/IInterface;)V
 HPLcom/android/server/contentsuggestions/RemoteContentSuggestionsService$$ExternalSyntheticLambda2;-><init>(Landroid/app/contentsuggestions/SelectionsRequest;Landroid/app/contentsuggestions/ISelectionsCallback;)V
-PLcom/android/server/contentsuggestions/RemoteContentSuggestionsService$$ExternalSyntheticLambda2;->run(Landroid/os/IInterface;)V
-PLcom/android/server/contentsuggestions/RemoteContentSuggestionsService$$ExternalSyntheticLambda3;-><init>(ILandroid/hardware/HardwareBuffer;ILandroid/os/Bundle;)V
+HPLcom/android/server/contentsuggestions/RemoteContentSuggestionsService$$ExternalSyntheticLambda2;->run(Landroid/os/IInterface;)V
+HPLcom/android/server/contentsuggestions/RemoteContentSuggestionsService$$ExternalSyntheticLambda3;-><init>(ILandroid/hardware/HardwareBuffer;ILandroid/os/Bundle;)V
 PLcom/android/server/contentsuggestions/RemoteContentSuggestionsService$$ExternalSyntheticLambda3;->run(Landroid/os/IInterface;)V
 PLcom/android/server/contentsuggestions/RemoteContentSuggestionsService;->$r8$lambda$FdTUPx3CZQ_9EDWfXe13q3KpnMA(Landroid/app/contentsuggestions/SelectionsRequest;Landroid/app/contentsuggestions/ISelectionsCallback;Landroid/service/contentsuggestions/IContentSuggestionsService;)V
 PLcom/android/server/contentsuggestions/RemoteContentSuggestionsService;->$r8$lambda$SErRG9sWLxtuVobBFXVDjzp_-1A(Landroid/app/contentsuggestions/ClassificationsRequest;Landroid/app/contentsuggestions/IClassificationsCallback;Landroid/service/contentsuggestions/IContentSuggestionsService;)V
@@ -19198,7 +20151,7 @@
 HPLcom/android/server/contentsuggestions/RemoteContentSuggestionsService;->suggestContentSelections(Landroid/app/contentsuggestions/SelectionsRequest;Landroid/app/contentsuggestions/ISelectionsCallback;)V
 HSPLcom/android/server/coverage/CoverageService;-><clinit>()V
 HSPLcom/android/server/criticalevents/CriticalEventLog$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/criticalevents/CriticalEventLog;)V
-PLcom/android/server/criticalevents/CriticalEventLog$$ExternalSyntheticLambda0;->run()V
+HPLcom/android/server/criticalevents/CriticalEventLog$$ExternalSyntheticLambda0;->run()V+]Lcom/android/server/criticalevents/CriticalEventLog;Lcom/android/server/criticalevents/CriticalEventLog;
 HSPLcom/android/server/criticalevents/CriticalEventLog$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/criticalevents/CriticalEventLog;Lcom/android/server/criticalevents/CriticalEventLog$ILogLoader;)V
 HSPLcom/android/server/criticalevents/CriticalEventLog$$ExternalSyntheticLambda1;->run()V
 HSPLcom/android/server/criticalevents/CriticalEventLog$LogLoader;-><init>()V
@@ -19212,9 +20165,9 @@
 PLcom/android/server/criticalevents/CriticalEventLog$LogSanitizer;->sanitizeNativeCrash(Lcom/android/server/criticalevents/nano/CriticalEventProto;)Lcom/android/server/criticalevents/nano/CriticalEventProto;
 PLcom/android/server/criticalevents/CriticalEventLog$LogSanitizer;->shouldSanitize(ILjava/lang/String;I)Z
 HSPLcom/android/server/criticalevents/CriticalEventLog$ThreadSafeRingBuffer;-><init>(Ljava/lang/Class;I)V
-HSPLcom/android/server/criticalevents/CriticalEventLog$ThreadSafeRingBuffer;->append(Ljava/lang/Object;)V
+HSPLcom/android/server/criticalevents/CriticalEventLog$ThreadSafeRingBuffer;->append(Ljava/lang/Object;)V+]Lcom/android/internal/util/RingBuffer;Lcom/android/internal/util/RingBuffer;
 PLcom/android/server/criticalevents/CriticalEventLog$ThreadSafeRingBuffer;->capacity()I
-PLcom/android/server/criticalevents/CriticalEventLog$ThreadSafeRingBuffer;->toArray()[Ljava/lang/Object;
+HPLcom/android/server/criticalevents/CriticalEventLog$ThreadSafeRingBuffer;->toArray()[Ljava/lang/Object;+]Lcom/android/internal/util/RingBuffer;Lcom/android/internal/util/RingBuffer;
 HSPLcom/android/server/criticalevents/CriticalEventLog;->$r8$lambda$NdrLCZrStsgnIGA45Mjgzd66lK8(Lcom/android/server/criticalevents/CriticalEventLog;Lcom/android/server/criticalevents/CriticalEventLog$ILogLoader;)V
 HSPLcom/android/server/criticalevents/CriticalEventLog;->-$$Nest$sfgetTAG()Ljava/lang/String;
 HSPLcom/android/server/criticalevents/CriticalEventLog;-><clinit>()V
@@ -19229,14 +20182,15 @@
 HPLcom/android/server/criticalevents/CriticalEventLog;->log(Lcom/android/server/criticalevents/nano/CriticalEventProto;)V
 PLcom/android/server/criticalevents/CriticalEventLog;->logAnr(Ljava/lang/String;ILjava/lang/String;II)V
 PLcom/android/server/criticalevents/CriticalEventLog;->logHalfWatchdog(Ljava/lang/String;)V
-HPLcom/android/server/criticalevents/CriticalEventLog;->logJavaCrash(Ljava/lang/String;ILjava/lang/String;II)V
+HPLcom/android/server/criticalevents/CriticalEventLog;->logJavaCrash(Ljava/lang/String;ILjava/lang/String;II)V+]Lcom/android/server/criticalevents/CriticalEventLog;Lcom/android/server/criticalevents/CriticalEventLog;]Lcom/android/server/criticalevents/nano/CriticalEventProto;Lcom/android/server/criticalevents/nano/CriticalEventProto;
 PLcom/android/server/criticalevents/CriticalEventLog;->logLinesForSystemServerTraceFile()Ljava/lang/String;
 PLcom/android/server/criticalevents/CriticalEventLog;->logLinesForTraceFile(ILjava/lang/String;I)Ljava/lang/String;
 HPLcom/android/server/criticalevents/CriticalEventLog;->logNativeCrash(ILjava/lang/String;II)V
+PLcom/android/server/criticalevents/CriticalEventLog;->logWatchdog(Ljava/lang/String;Ljava/util/UUID;)V
 PLcom/android/server/criticalevents/CriticalEventLog;->recentEventsWithMinTimestamp(J)[Lcom/android/server/criticalevents/nano/CriticalEventProto;
 HPLcom/android/server/criticalevents/CriticalEventLog;->saveDelayMs()J
-HPLcom/android/server/criticalevents/CriticalEventLog;->saveLogToFile()V
-HPLcom/android/server/criticalevents/CriticalEventLog;->saveLogToFileNow()V
+HPLcom/android/server/criticalevents/CriticalEventLog;->saveLogToFile()V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/criticalevents/CriticalEventLog;Lcom/android/server/criticalevents/CriticalEventLog;
+HPLcom/android/server/criticalevents/CriticalEventLog;->saveLogToFileNow()V+]Ljava/io/File;Ljava/io/File;]Lcom/android/server/criticalevents/CriticalEventLog;Lcom/android/server/criticalevents/CriticalEventLog;]Lcom/android/server/criticalevents/CriticalEventLog$ThreadSafeRingBuffer;Lcom/android/server/criticalevents/CriticalEventLog$ThreadSafeRingBuffer;]Ljava/io/FileOutputStream;Ljava/io/FileOutputStream;
 HSPLcom/android/server/devicepolicy/ActiveAdmin$$ExternalSyntheticLambda0;-><init>(I)V
 HSPLcom/android/server/devicepolicy/ActiveAdmin$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/devicepolicy/ActiveAdmin$$ExternalSyntheticLambda2;-><init>(I)V
@@ -19249,13 +20203,13 @@
 PLcom/android/server/devicepolicy/ActiveAdmin;->dump(Landroid/util/IndentingPrintWriter;)V
 HSPLcom/android/server/devicepolicy/ActiveAdmin;->ensureUserRestrictions()Landroid/os/Bundle;
 HSPLcom/android/server/devicepolicy/ActiveAdmin;->filterRestrictions(Landroid/os/Bundle;Ljava/util/function/Predicate;)Landroid/os/Bundle;+]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/util/function/Predicate;Lcom/android/server/devicepolicy/ActiveAdmin$$ExternalSyntheticLambda0;,Lcom/android/server/devicepolicy/ActiveAdmin$$ExternalSyntheticLambda2;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/MapCollections$KeySet;
-HSPLcom/android/server/devicepolicy/ActiveAdmin;->getEffectiveRestrictions()Landroid/os/Bundle;
+HSPLcom/android/server/devicepolicy/ActiveAdmin;->getEffectiveRestrictions()Landroid/os/Bundle;+]Lcom/android/server/devicepolicy/ActiveAdmin;Lcom/android/server/devicepolicy/ActiveAdmin;
 HSPLcom/android/server/devicepolicy/ActiveAdmin;->getGlobalUserRestrictions(I)Landroid/os/Bundle;
 HSPLcom/android/server/devicepolicy/ActiveAdmin;->getLocalUserRestrictions(I)Landroid/os/Bundle;
 HSPLcom/android/server/devicepolicy/ActiveAdmin;->getParentActiveAdmin()Lcom/android/server/devicepolicy/ActiveAdmin;
 HSPLcom/android/server/devicepolicy/ActiveAdmin;->getPreferentialNetworkServiceConfigs(Landroid/util/TypedXmlPullParser;Ljava/lang/String;)Ljava/util/List;
-HPLcom/android/server/devicepolicy/ActiveAdmin;->getUid()I
-HSPLcom/android/server/devicepolicy/ActiveAdmin;->getUserHandle()Landroid/os/UserHandle;
+HPLcom/android/server/devicepolicy/ActiveAdmin;->getUid()I+]Landroid/app/admin/DeviceAdminInfo;Landroid/app/admin/DeviceAdminInfo;
+HSPLcom/android/server/devicepolicy/ActiveAdmin;->getUserHandle()Landroid/os/UserHandle;+]Landroid/app/admin/DeviceAdminInfo;Landroid/app/admin/DeviceAdminInfo;
 HSPLcom/android/server/devicepolicy/ActiveAdmin;->hasParentActiveAdmin()Z
 HPLcom/android/server/devicepolicy/ActiveAdmin;->hasUserRestrictions()Z
 HSPLcom/android/server/devicepolicy/ActiveAdmin;->lambda$getGlobalUserRestrictions$3(ILjava/lang/String;)Z
@@ -19263,14 +20217,14 @@
 HSPLcom/android/server/devicepolicy/ActiveAdmin;->readAttributeValues(Landroid/util/TypedXmlPullParser;Ljava/lang/String;Ljava/util/Collection;)V
 HSPLcom/android/server/devicepolicy/ActiveAdmin;->readFromXml(Landroid/util/TypedXmlPullParser;Z)V
 HSPLcom/android/server/devicepolicy/ActiveAdmin;->readPackageList(Landroid/util/TypedXmlPullParser;Ljava/lang/String;)Ljava/util/List;
-HSPLcom/android/server/devicepolicy/ActiveAdmin;->removeDeprecatedRestrictions(Landroid/os/Bundle;)Landroid/os/Bundle;
+HSPLcom/android/server/devicepolicy/ActiveAdmin;->removeDeprecatedRestrictions(Landroid/os/Bundle;)Landroid/os/Bundle;+]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/ArraySet;
 HPLcom/android/server/devicepolicy/ActiveAdmin;->writeAttributeValueToXml(Landroid/util/TypedXmlSerializer;Ljava/lang/String;I)V
 HPLcom/android/server/devicepolicy/ActiveAdmin;->writeAttributeValueToXml(Landroid/util/TypedXmlSerializer;Ljava/lang/String;J)V
 HPLcom/android/server/devicepolicy/ActiveAdmin;->writeAttributeValueToXml(Landroid/util/TypedXmlSerializer;Ljava/lang/String;Z)V
-HPLcom/android/server/devicepolicy/ActiveAdmin;->writeAttributeValuesToXml(Landroid/util/TypedXmlSerializer;Ljava/lang/String;Ljava/lang/String;Ljava/util/Collection;)V+]Ljava/util/Collection;Landroid/util/ArraySet;,Ljava/util/ArrayList;,Ljava/util/Collections$EmptyList;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;,Ljava/util/ArrayList$Itr;,Ljava/util/Collections$EmptyIterator;
+HPLcom/android/server/devicepolicy/ActiveAdmin;->writeAttributeValuesToXml(Landroid/util/TypedXmlSerializer;Ljava/lang/String;Ljava/lang/String;Ljava/util/Collection;)V+]Ljava/util/Collection;Ljava/util/Collections$EmptyList;,Landroid/util/ArraySet;,Ljava/util/ArrayList;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;,Ljava/util/ArrayList$Itr;,Ljava/util/Collections$EmptyIterator;
 HPLcom/android/server/devicepolicy/ActiveAdmin;->writePackageListToXml(Landroid/util/TypedXmlSerializer;Ljava/lang/String;Ljava/util/List;)V+]Lcom/android/server/devicepolicy/ActiveAdmin;Lcom/android/server/devicepolicy/ActiveAdmin;
-HPLcom/android/server/devicepolicy/ActiveAdmin;->writeTextToXml(Landroid/util/TypedXmlSerializer;Ljava/lang/String;Ljava/lang/String;)V
-HPLcom/android/server/devicepolicy/ActiveAdmin;->writeToXml(Landroid/util/TypedXmlSerializer;)V
+HPLcom/android/server/devicepolicy/ActiveAdmin;->writeTextToXml(Landroid/util/TypedXmlSerializer;Ljava/lang/String;Ljava/lang/String;)V+]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;
+HPLcom/android/server/devicepolicy/ActiveAdmin;->writeToXml(Landroid/util/TypedXmlSerializer;)V+]Landroid/app/admin/DeviceAdminInfo;Landroid/app/admin/DeviceAdminInfo;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/app/admin/PreferentialNetworkServiceConfig;Landroid/app/admin/PreferentialNetworkServiceConfig;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Lcom/android/server/devicepolicy/ActiveAdmin;Lcom/android/server/devicepolicy/ActiveAdmin;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/Set;Landroid/util/ArraySet;
 HSPLcom/android/server/devicepolicy/BaseIDevicePolicyManager;-><clinit>()V
 HSPLcom/android/server/devicepolicy/BaseIDevicePolicyManager;-><init>()V
 HSPLcom/android/server/devicepolicy/CallerIdentity;-><init>(ILjava/lang/String;Landroid/content/ComponentName;)V
@@ -19279,19 +20233,19 @@
 HSPLcom/android/server/devicepolicy/CallerIdentity;->getUid()I
 HPLcom/android/server/devicepolicy/CallerIdentity;->getUserHandle()Landroid/os/UserHandle;
 HSPLcom/android/server/devicepolicy/CallerIdentity;->getUserId()I
-HPLcom/android/server/devicepolicy/CallerIdentity;->hasAdminComponent()Z
+HSPLcom/android/server/devicepolicy/CallerIdentity;->hasAdminComponent()Z
 PLcom/android/server/devicepolicy/CallerIdentity;->hasPackage()Z
 PLcom/android/server/devicepolicy/CertificateMonitor$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/devicepolicy/CertificateMonitor;I)V
 PLcom/android/server/devicepolicy/CertificateMonitor$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/devicepolicy/CertificateMonitor$1;-><init>(Lcom/android/server/devicepolicy/CertificateMonitor;)V
-PLcom/android/server/devicepolicy/CertificateMonitor$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/devicepolicy/CertificateMonitor$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/devicepolicy/CertificateMonitor;->$r8$lambda$oZYA-wXM7SPw7HK0ccLcTQJ53AA(Lcom/android/server/devicepolicy/CertificateMonitor;I)V
-PLcom/android/server/devicepolicy/CertificateMonitor;->-$$Nest$mupdateInstalledCertificates(Lcom/android/server/devicepolicy/CertificateMonitor;Landroid/os/UserHandle;)V
+HSPLcom/android/server/devicepolicy/CertificateMonitor;->-$$Nest$mupdateInstalledCertificates(Lcom/android/server/devicepolicy/CertificateMonitor;Landroid/os/UserHandle;)V
 HSPLcom/android/server/devicepolicy/CertificateMonitor;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Landroid/os/Handler;)V
 PLcom/android/server/devicepolicy/CertificateMonitor;->getInstalledCaCertificates(Landroid/os/UserHandle;)Ljava/util/List;
 PLcom/android/server/devicepolicy/CertificateMonitor;->lambda$onCertificateApprovalsChanged$0(I)V
 PLcom/android/server/devicepolicy/CertificateMonitor;->onCertificateApprovalsChanged(I)V
-PLcom/android/server/devicepolicy/CertificateMonitor;->updateInstalledCertificates(Landroid/os/UserHandle;)V
+HSPLcom/android/server/devicepolicy/CertificateMonitor;->updateInstalledCertificates(Landroid/os/UserHandle;)V
 HSPLcom/android/server/devicepolicy/CryptoTestHelper;->runAndLogSelfTest()V
 PLcom/android/server/devicepolicy/DeviceAdminServiceController$DevicePolicyServiceConnection;-><init>(Lcom/android/server/devicepolicy/DeviceAdminServiceController;ILandroid/content/ComponentName;)V
 PLcom/android/server/devicepolicy/DeviceAdminServiceController$DevicePolicyServiceConnection;->asInterface(Landroid/os/IBinder;)Landroid/app/admin/IDeviceAdminService;
@@ -19348,6 +20302,8 @@
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda106;->runOrThrow()V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda107;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda107;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda108;-><init>()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda108;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda109;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda109;->run()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda10;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
@@ -19364,19 +20320,22 @@
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda116;->runOrThrow()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda11;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda11;->getOrThrow()Ljava/lang/Object;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda120;-><init>()V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda120;-><init>()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda120;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda121;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Z)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda121;->getOrThrow()Ljava/lang/Object;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda122;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda123;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I[Ljava/lang/Object;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda123;->get()Ljava/lang/Object;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda124;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I[Ljava/lang/Object;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda124;->get()Ljava/lang/Object;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda126;->getOrThrow()Ljava/lang/Object;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda127;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda127;->getOrThrow()Ljava/lang/Object;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda128;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda128;->getOrThrow()Ljava/lang/Object;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda129;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ILjava/util/ArrayList;Ljava/util/function/Predicate;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda128;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ILjava/util/ArrayList;Ljava/util/function/Predicate;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda128;->runOrThrow()V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda129;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ILjava/util/List;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda129;->runOrThrow()V
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda130;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ILjava/util/List;)V
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda130;->runOrThrow()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda131;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda131;->getOrThrow()Ljava/lang/Object;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda132;->getOrThrow()Ljava/lang/Object;
@@ -19384,6 +20343,8 @@
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda133;->getOrThrow()Ljava/lang/Object;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda135;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/CallerIdentity;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda135;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda136;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/CallerIdentity;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda136;->getOrThrow()Ljava/lang/Object;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda137;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda137;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda138;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ZZ)V
@@ -19392,62 +20353,69 @@
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda139;->run()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda13;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda13;->runOrThrow()V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda140;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/ActiveAdmin;IILjava/lang/String;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda140;->runOrThrow()V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda140;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/ActiveAdmin;IILjava/lang/String;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda140;->runOrThrow()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda141;->runOrThrow()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda142;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyData;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda142;->getOrThrow()Ljava/lang/Object;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda143;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda144;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda145;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda144;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda145;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/telephony/TelephonyManager;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda145;->getOrThrow()Ljava/lang/Object;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda146;->getOrThrow()Ljava/lang/Object;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda147;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ILjava/lang/String;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda146;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ILjava/lang/String;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda146;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda147;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda147;->getOrThrow()Ljava/lang/Object;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda148;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda148;->getOrThrow()Ljava/lang/Object;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda149;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda149;->getOrThrow()Ljava/lang/Object;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda148;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda148;->getOrThrow()Ljava/lang/Object;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda14;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Landroid/os/Bundle;Lcom/android/server/devicepolicy/CallerIdentity;Landroid/content/ComponentName;)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda14;->runOrThrow()V
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda151;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda151;->test(Ljava/lang/Object;)Z
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda152;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda152;->getOrThrow()Ljava/lang/Object;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda150;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda150;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda151;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda151;->getOrThrow()Ljava/lang/Object;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda153;-><init>()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda153;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda154;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;I)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda154;->getOrThrow()Ljava/lang/Object;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda155;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/Intent;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda155;->run()V
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda156;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ILcom/android/server/devicepolicy/DevicePolicyData;)V
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda156;->runOrThrow()V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda155;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda155;->runOrThrow()V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda157;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ILcom/android/server/devicepolicy/DevicePolicyData;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda157;->runOrThrow()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda159;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda159;->run()V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda15;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/ActiveAdmin;IIZLandroid/content/ComponentName;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda15;->runOrThrow()V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda15;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/ActiveAdmin;IIZLandroid/content/ComponentName;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda15;->runOrThrow()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda160;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda160;->run()V
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda161;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/Intent;I)V
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda161;->runOrThrow()V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda164;-><init>(Landroid/content/pm/CrossProfileApps;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda164;->test(Ljava/lang/Object;)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda161;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda161;->run()V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda162;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/Intent;I)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda162;->runOrThrow()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda165;-><init>(Landroid/content/pm/CrossProfileApps;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda165;->test(Ljava/lang/Object;)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda16;-><init>(ZLandroid/os/RemoteCallback;Lcom/android/server/devicepolicy/CallerIdentity;Ljava/lang/String;ILandroid/content/ComponentName;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda16;->accept(Ljava/lang/Object;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda1;->runOrThrow()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda21;-><init>()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda21;->test(Ljava/lang/Object;)Z
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda22;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/CallerIdentity;)V
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda22;->getOrThrow()Ljava/lang/Object;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda22;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/CallerIdentity;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda22;->getOrThrow()Ljava/lang/Object;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda23;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda23;->getOrThrow()Ljava/lang/Object;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda27;-><init>(Landroid/content/pm/CrossProfileApps;Ljava/util/List;Ljava/util/List;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda27;->runOrThrow()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda28;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/util/IndentingPrintWriter;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda28;->run()V
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda29;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda29;->getOrThrow()Ljava/lang/Object;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda29;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda29;->getOrThrow()Ljava/lang/Object;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda2;-><init>()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda2;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda34;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda34;->runOrThrow()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda31;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/CallerIdentity;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda31;->getOrThrow()Ljava/lang/Object;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda34;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda34;->runOrThrow()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda35;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/ActiveAdmin;ILcom/android/server/devicepolicy/CallerIdentity;Z)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda35;->runOrThrow()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda36;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/net/ProxyInfo;)V
@@ -19509,8 +20477,8 @@
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$1$1;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService$1;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$1$1;->run()V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$1;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Landroid/os/UserManager;Landroid/os/UserManager;]Landroid/content/BroadcastReceiver;Lcom/android/server/devicepolicy/DevicePolicyManagerService$1;]Landroid/net/Uri;Landroid/net/Uri$OpaqueUri;]Landroid/content/Intent;Landroid/content/Intent;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$1;->sendDeviceOwnerUserCommand(Ljava/lang/String;I)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Landroid/os/UserManager;Landroid/os/UserManager;]Landroid/content/BroadcastReceiver;Lcom/android/server/devicepolicy/DevicePolicyManagerService$1;]Landroid/net/Uri;Landroid/net/Uri$OpaqueUri;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$1;->sendDeviceOwnerUserCommand(Ljava/lang/String;I)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$2;-><init>()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$4;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$5;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/os/IBinder;)V
@@ -19518,6 +20486,12 @@
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyConstantsObserver;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/os/Handler;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyConstantsObserver;->register()V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyManagementRoleObserver;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/Context;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyManagementRoleObserver;->getDefaultRoleHolderPackageName()Ljava/lang/String;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyManagementRoleObserver;->getDefaultRoleHolderPackageNameAndSignature()[Ljava/lang/String;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyManagementRoleObserver;->getDefaultRoleHolderPackageSignature()Ljava/lang/String;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyManagementRoleObserver;->getRoleHolder()Ljava/lang/String;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyManagementRoleObserver;->hasSigningCertificate(Ljava/lang/String;Ljava/lang/String;)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyManagementRoleObserver;->isDefaultRoleHolder(Ljava/lang/String;)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyManagementRoleObserver;->onRoleHoldersChanged(Ljava/lang/String;Landroid/os/UserHandle;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$DevicePolicyManagementRoleObserver;->register()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$DpmsUpgradeDataProvider$$ExternalSyntheticLambda0;-><init>()V
@@ -19619,30 +20593,31 @@
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->broadcastIntentToCrossProfileManifestReceivers(Landroid/content/Intent;Landroid/os/UserHandle;Z)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->broadcastIntentToDevicePolicyManagerRoleHolder(Landroid/content/Intent;Landroid/os/UserHandle;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->broadcastIntentToManifestReceivers(Landroid/content/Intent;Landroid/os/UserHandle;Z)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->canSilentlyInstallPackage(Ljava/lang/String;I)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->canSilentlyInstallPackage(Ljava/lang/String;I)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->checkCrossProfilePackagePermissions(Ljava/lang/String;IZ)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->checkModifyQuietModePermission(Ljava/lang/String;I)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->createUserRestrictionSupportIntent(ILjava/lang/String;)Landroid/content/Intent;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->getAllCrossProfilePackages()Ljava/util/List;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->getCrossProfileWidgetProviders(I)Ljava/util/List;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->getDefaultCrossProfilePackages()Ljava/util/List;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->getDevicePolicyCache()Landroid/app/admin/DevicePolicyCache;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->getDeviceStateCache()Landroid/app/admin/DeviceStateCache;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->getProfileOwnerAsUser(I)Landroid/content/ComponentName;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->getProfileOwnerAsUser(I)Landroid/content/ComponentName;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->getProfileOwnerOrDeviceOwnerSupervisionComponent(Landroid/os/UserHandle;)Landroid/content/ComponentName;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->isActiveDeviceOwner(I)Z
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->isActiveProfileOwner(I)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->isActiveDeviceOwner(I)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->isActiveProfileOwner(I)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->isDeviceOrProfileOwnerInCallingUser(Ljava/lang/String;)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->isDeviceOwnerInCallingUser(Ljava/lang/String;)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->isDeviceOwnerInCallingUser(Ljava/lang/String;)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->isPackageEnabled(Ljava/lang/String;I)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->isProfileOwnerInCallingUser(Ljava/lang/String;)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->isUserAffiliatedWithDevice(I)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->lambda$reportSeparateProfileChallengeChanged$0(I)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->notifyCrossProfileProvidersChanged(ILjava/util/List;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->notifyCrossProfileProvidersChanged(ILjava/util/List;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$LocalService;->reportSeparateProfileChallengeChanged(I)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$RestrictionsListener;-><init>(Landroid/content/Context;Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$RestrictionsListener;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$RestrictionsListener;->resetCrossProfileIntentFiltersIfNeeded(ILandroid/os/Bundle;Landroid/os/Bundle;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService$RestrictionsListener;->resetUserVpnIfNeeded(ILandroid/os/Bundle;Landroid/os/Bundle;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$RestrictionsListener;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$RestrictionsListener;->resetCrossProfileIntentFiltersIfNeeded(ILandroid/os/Bundle;Landroid/os/Bundle;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$RestrictionsListener;->resetUserVpnIfNeeded(ILandroid/os/Bundle;Landroid/os/Bundle;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$SetupContentObserver;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/os/Handler;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService$SetupContentObserver;->onChange(ZLandroid/net/Uri;I)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService$SetupContentObserver;->register()V
@@ -19656,32 +20631,39 @@
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$-K0P8S1ojJsigfl1S7uVz8iLHOg(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$-TiV9lJIaiGajHdM-SYG9HytYHg(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$076UW2_oSgdtGDQ4DeXKFrU7dKY(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/ActiveAdmin;ILcom/android/server/devicepolicy/CallerIdentity;Z)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$08ViVWkLlU4SUmc_5WxDqjY6Njg(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$0b1LSjyR5JELUs9WR3eQEmoxOVY(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;ZI)Ljava/lang/Boolean;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$11pQH2rtx2c0oiPI_FqS-2J3AXI(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ILjava/util/ArrayList;Ljava/util/function/Predicate;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$2LIlhCH9ad8vYmnx3gWMRqLHRB4(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)Ljava/lang/Boolean;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$3PgOLpLwotdM_-FVyFi3fTGYufM(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/CallerIdentity;)Ljava/lang/String;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$3XjXL9IB_xamo2Ephx97S5HuJl0(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)Ljava/lang/Boolean;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$5ZO4iQ2IygkZHHmRC6nNnUQbKQ4(Landroid/view/accessibility/AccessibilityManager;)Ljava/util/List;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$5juJ1xQMknwDG6mvXKkLSMmgfaU(Landroid/content/pm/UserInfo;)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$7Y9JMkUISWOhKD2ja47UZPj9wV8(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)Ljava/lang/Boolean;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$7g8H4yHMA7eiAmzvRIZZKmpfNqE(Landroid/content/pm/CrossProfileApps;Ljava/util/List;Ljava/util/List;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$7zg8E0nbS8umal95ESwitYhFVwE(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/app/admin/ParcelableResource;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$8-BENy8vNDbEMlGbJ1zM0zBmH38(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)Ljava/lang/Integer;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$8NoKH3hj4c1D0vTaBogk8xNhgaw(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Z)Ljava/lang/Boolean;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$95Igw7A-_n5lm0vbVMWu9feE97c(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyData;I)Ljava/lang/Boolean;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$9Kixlg78OpOKAPPfaBUU8QLi71w(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ILcom/android/server/devicepolicy/DevicePolicyData;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$BCwgwM5TrBeL7cPCXFqDJMzoQVU(Lcom/android/server/devicepolicy/DevicePolicyManagerService;IZ)Ljava/lang/Integer;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$BWBEttyQ6QVH65-yLKLb666AG40(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/CallerIdentity;)Ljava/lang/Boolean;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$ChswK71xpVMEaSoB99qssNlRy2o(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/pm/UserInfo;)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$CpSXVrL1zBYATz-xxSpe5NBVsXo(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyData;I)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$Fb0RQpNWhcYGUV2uCz8HR79vzTw(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I[Ljava/lang/Object;)Ljava/lang/String;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$IRGBf409Du4QfgcwFNRRDNjx6lU(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/Intent;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$JXk0fdfAwRYT2ClUwXN-NjtkiUw(Landroid/content/pm/UserInfo;)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$KP16b2h22E5qf75Vweb_5c0fcSY(Lcom/android/server/devicepolicy/ActiveAdmin;)Ljava/lang/Integer;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$MDCdAtfkIgvC7qRt6inlI81Jijg(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/Intent;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$MoDGYlTqrYxk05EUWT74_1geMiw(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$MpQWgu_CnAQOJUJyCdIXqpNh1mM(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/CallerIdentity;)Ljava/lang/Boolean;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$O7L8J51wqzEgIo884z5fKwX_U-E(ZLandroid/os/RemoteCallback;Lcom/android/server/devicepolicy/CallerIdentity;Ljava/lang/String;ILandroid/content/ComponentName;Ljava/lang/Boolean;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$OJCH6IT6l2xj6rKpIEw4_N1K_vQ(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I[Ljava/lang/Object;)Ljava/lang/String;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$Og2EO0KFmNqcxXYKd7GgvH0lEa8(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$OvrjIN7LUt5q11RRI0-azXR0hdc(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$P_Vm3fLvS6vZjQfr2o90NZ08Ewk(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;I)Ljava/lang/Boolean;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$QI7aK433JM11vzB6dpmncKP8o-k(Landroid/content/pm/UserInfo;)Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$QwG00u5eMYHRnkaQu-lJjGNpodc(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/CallerIdentity;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Integer;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$TSZI9ADAFhbAxQ29v1w4u-WBy5M(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Z)Ljava/lang/Boolean;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$RQjPEHjzcL_q0U6ZXIDvSDbTgj0(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)Ljava/util/List;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$TYAXtrIHdn4BVT1JdPlu1RfFilg(I)Ljava/util/List;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$TlDrxbt1dv2cSvu-LxHqwjb1CYg(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ILandroid/content/Intent;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$UqNfGOh8nkdY6m8j1pVF-pJ_fzQ(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/Intent;Lcom/android/server/devicepolicy/CallerIdentity;Landroid/os/IBinder;Z)V
@@ -19690,13 +20672,11 @@
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$WF5i6pzh8vlkKoS19ohcMzcEL-I(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/CallerIdentity;)Ljava/lang/String;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$X4ZTmobLP4Wrs-Ln1T15UDFND5g(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Landroid/os/Bundle;Lcom/android/server/devicepolicy/CallerIdentity;Landroid/content/ComponentName;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$XYGd2D7j2poIQHBszlOcpAgWft0(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)Lcom/android/server/devicepolicy/DevicePolicyData;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$ZGsdlD2UGzdzkWkbmrh6fqBxuWc(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/CallerIdentity;)Landroid/content/ComponentName;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$ZQX5MBoB6LEdjSgONu3L0Mm7whc(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)Landroid/content/ComponentName;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$ZfLP51TmtKIgKbqQqdfTt4VOHjU(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)Ljava/lang/Boolean;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$ZGsdlD2UGzdzkWkbmrh6fqBxuWc(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/CallerIdentity;)Landroid/content/ComponentName;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$ZQX5MBoB6LEdjSgONu3L0Mm7whc(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)Landroid/content/ComponentName;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$_JBUKzKM3ziU59ErEHV2Axdvyuk(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ILjava/util/List;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$_x_jXDiJtXZQu81F32nJnV61ct0(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Lcom/android/server/devicepolicy/CallerIdentity;)Landroid/os/Bundle;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$bQSq8pZdqimOQuRNJ-zd6CpU7CM(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ILjava/lang/String;)Ljava/lang/String;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$belA7xcsDRU5TZhbKlljzkJTh7M(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/app/admin/ParcelableResource;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$bi5N_JrQsBi-OfmaJ19CLbcZKT8(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ILjava/util/List;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$cFzbmhXAf9TyK9wDSyE--1PnN3k(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)Landroid/content/pm/UserInfo;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$dhIcS5mi3X2nav86uISqNf5aWQQ(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
@@ -19704,53 +20684,57 @@
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$emofWVMkcFCneQ3DDY8s7z_KWWE(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$f2RWb-oKUD_hRnT4m2hWGWMLjFY(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$gjamJR3FwcyBbJU2L47-VfA8VqI(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;ILjava/lang/String;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$gpdKNWVMWOKXocIYH0UY6CAkfI8(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)Ljava/util/List;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$ikgoMllq-4jkEAjZN8vGDF-MKnc(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;I)Landroid/content/pm/ActivityInfo;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$jNwpnHpb34YBtslHZ-gwosiD6x4(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/ActiveAdmin;IILjava/lang/String;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$kuiCyyNMVLY2y7mXGyQQw0aTfzI(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Z)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$lLnO0r5E7HSU3ccOPYBle6WuhuQ(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;I)Ljava/lang/Boolean;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$lVdOL6iytsiKWW5x0LjxZd8mePo(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)Ljava/lang/Boolean;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$mKEPP3VRy2HnmLMkeLiKAIPqPAA(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$mNvt7PYC-XwRzNgxslHiOQ13vog(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/CallerIdentity;)Ljava/lang/Boolean;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$nnX3Yh2qC2laeVOQTJ5L87e4hH0(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;I)Ljava/lang/Boolean;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$nnq5hLS3SZFYfYFMmNlgVWkx6Z0(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$nuzSJxmFVDMxtCpuVzTQJAxcKyc(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ZILandroid/content/Context;J)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$oXvSVemciq-YLlmCxXsJA2xrBnU(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;I)Ljava/util/ArrayList;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$oXvSVemciq-YLlmCxXsJA2xrBnU(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;I)Ljava/util/ArrayList;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$qhp4G4Ybe--VcUl-AkZYTu7B9Gk(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$qz5V-Qfyvvq5IE_1y1iCeRdjzRk(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)Lcom/android/server/devicepolicy/ActiveAdmin;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$rlXnWEUWxuO0BqFpYgzFkkyzSEM(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/ActiveAdmin;IIZLandroid/content/ComponentName;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$roIckl-OGzlxM_l20O9puUDnRic(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$sII-OhmnfQ7MtTkWMwBiCepx56w(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ILcom/android/server/devicepolicy/ActiveAdmin;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$sdpUgubUpFyaHvCQJ3BlzNFQ5-0(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I[Ljava/lang/Object;)Ljava/lang/String;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$tkFtSB4OWABuO1LlEHYn3l3jOYo(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)Ljava/lang/Boolean;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$v1lod6c2XbLJ6C1jNYrMeQr1TKM(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;)Landroid/app/admin/ParcelableResource;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$wPCPD99GhsXlKBrXmdTnUqe1R60(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ILandroid/content/ComponentName;)Landroid/app/admin/DeviceAdminInfo;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$w_qc9sUH9VJ60J6ykcN_565-7Ec(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/telephony/TelephonyManager;)Ljava/util/List;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$xBIbgibVf0yZZThdr8WnHgHId8Y(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)Ljava/lang/Boolean;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$xKa8_3tt4QV3IgwE8bz2MUuIOAk(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)Ljava/lang/Integer;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$y0flOh-G8de1U1J2AAUnLIfg3gI(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$yE5swMwe3voR0lXXjjCPFmTfvbA(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/Intent;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$y_DBKOddl9IJL1ENtx3DwBXwLbM(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/CharSequence;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$yt-TKC5_pOhnQcx4WbU00GsAyxc(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/net/ProxyInfo;)V
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$z5PcoedonfeTgfn4oc9yzaxBFEA(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;)Landroid/app/admin/ParcelableResource;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$zNifcqpCmVXzGz2Muitk7-MW1Bo(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ZZ)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->$r8$lambda$zeVPt3tFeBTWljo1y4aSJFobHtU(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;IZLandroid/app/admin/DeviceAdminInfo;Lcom/android/server/devicepolicy/DevicePolicyData;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$fgetmBugreportCollectionManager(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)Lcom/android/server/devicepolicy/RemoteBugreportManager;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$fgetmPolicyCache(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)Lcom/android/server/devicepolicy/DevicePolicyCacheImpl;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$fgetmStateCache(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)Lcom/android/server/devicepolicy/DeviceStateCacheImpl;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$mclearWipeProfileNotification(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$mcreateShowAdminSupportIntent(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)Landroid/content/Intent;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$mdiscardDeviceWideLogsLocked(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$mfindAdmin(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/ComponentName;IZ)Landroid/app/admin/DeviceAdminInfo;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$mgetDevicePolicyManagementRoleHolderPackageName(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/Context;)Ljava/lang/String;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$mgetEnforcingAdminAndUserDetailsInternal(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ILjava/lang/String;)Landroid/os/Bundle;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$mhandleNewPackageInstalled(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$mhandleNewUserCreated(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Landroid/content/pm/UserInfo;Ljava/lang/Object;)V
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$mhandlePackagesChanged(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;I)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$mhandlePackagesChanged(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$mhandlePasswordExpirationNotification(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$misDefaultDeviceOwner(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/CallerIdentity;)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$misDefaultDeviceOwner(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/CallerIdentity;)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$misFinancedDeviceOwner(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/CallerIdentity;)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$misManagedProfile(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$misNetworkLoggingEnabledInternalLocked(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$misNetworkLoggingEnabledInternalLocked(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$misSeparateProfileChallengeEnabled(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$misUserAffiliatedWithDeviceLocked(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$mmakeJournaledFile(Lcom/android/server/devicepolicy/DevicePolicyManagerService;ILjava/lang/String;)Lcom/android/internal/util/JournaledFile;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$mmaybePauseDeviceWideLoggingLocked(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$mmaybeResumeDeviceWideLoggingLocked(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$mmaybeSendAdminEnabledBroadcastLocked(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$mmaybeSendAdminEnabledBroadcastLocked(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$mremoveCredentialManagementApp(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$msaveSettingsLocked(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$msendPrivateKeyAliasResponse(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Ljava/lang/String;Landroid/os/IBinder;)V
@@ -19760,7 +20744,7 @@
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$mupdateMaximumTimeToLockLocked(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$mupdatePasswordQualityCacheForUserGroup(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$mupdatePersonalAppsSuspension(Lcom/android/server/devicepolicy/DevicePolicyManagerService;IZ)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$mupdatePersonalAppsSuspensionOnUserStart(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$mupdatePersonalAppsSuspensionOnUserStart(Lcom/android/server/devicepolicy/DevicePolicyManagerService;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->-$$Nest$mupdateSystemUpdateFreezePeriodsRecord(Lcom/android/server/devicepolicy/DevicePolicyManagerService;Z)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;-><clinit>()V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;-><init>(Landroid/content/Context;)V
@@ -19775,7 +20759,7 @@
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->canAdminGrantSensorsPermissionsForUser(I)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->canHandleCheckPolicyComplianceIntent(Lcom/android/server/devicepolicy/CallerIdentity;)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->canManageCaCerts(Lcom/android/server/devicepolicy/CallerIdentity;)Z
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->canManageUsers(Lcom/android/server/devicepolicy/CallerIdentity;)Z+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->canManageUsers(Lcom/android/server/devicepolicy/CallerIdentity;)Z+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->canProfileOwnerResetPasswordWhenLocked(I)Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->canQueryAdminPolicy(Lcom/android/server/devicepolicy/CallerIdentity;)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->canSetPasswordQualityOnParent(Ljava/lang/String;Lcom/android/server/devicepolicy/CallerIdentity;)Z
@@ -19783,7 +20767,7 @@
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->canUserBindToDeviceOwnerLocked(I)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->canUserUseLockTaskLocked(I)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->checkActiveAdminPrecondition(Landroid/content/ComponentName;Landroid/app/admin/DeviceAdminInfo;Lcom/android/server/devicepolicy/DevicePolicyData;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->checkAllUsersAreAffiliatedWithDevice()V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->checkAllUsersAreAffiliatedWithDevice()V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->checkCanExecuteOrThrowUnsafe(I)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->checkDeviceIdentifierAccess(Ljava/lang/String;II)Z+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Landroid/content/ComponentName;Landroid/content/ComponentName;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->checkDeviceOwnerProvisioningPreCondition(I)I
@@ -19797,6 +20781,7 @@
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->choosePrivateKeyAlias(ILandroid/net/Uri;Ljava/lang/String;Landroid/os/IBinder;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->cleanUpOldUsers()V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->clearCrossProfileIntentFilters(Landroid/content/ComponentName;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->clearManagedProfileApnUnchecked()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->clearWipeProfileNotification()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->computeProvisioningErrorString(II)Ljava/lang/String;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->copyAccount(Landroid/os/UserHandle;Landroid/os/UserHandle;Landroid/accounts/Account;Ljava/lang/String;)V
@@ -19817,10 +20802,12 @@
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enableIfNecessary(Ljava/lang/String;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enablePackage(Ljava/lang/String;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enableSystemApp(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceCanCallLockTaskLocked(Lcom/android/server/devicepolicy/CallerIdentity;)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceCallerCanRequestDeviceIdAttestation(Lcom/android/server/devicepolicy/CallerIdentity;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceCanCallLockTaskLocked(Lcom/android/server/devicepolicy/CallerIdentity;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceCanManageCaCerts(Landroid/content/ComponentName;Ljava/lang/String;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceCanSetLockTaskFeaturesOnFinancedDevice(Lcom/android/server/devicepolicy/CallerIdentity;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceCanSetProfileOwnerLocked(Lcom/android/server/devicepolicy/CallerIdentity;Landroid/content/ComponentName;IZ)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceIndividualAttestationSupportedIfRequested([I)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceUserUnlocked(I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->enforceUserUnlocked(IZ)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->ensureCallerIdentityMatchesIfNotSystem(Ljava/lang/String;IILcom/android/server/devicepolicy/CallerIdentity;)V+]Lcom/android/server/devicepolicy/CallerIdentity;Lcom/android/server/devicepolicy/CallerIdentity;]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;
@@ -19832,10 +20819,11 @@
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->finalizeWorkProfileProvisioning(Landroid/os/UserHandle;Landroid/accounts/Account;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->findAdmin(Landroid/content/ComponentName;IZ)Landroid/app/admin/DeviceAdminInfo;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->fixupAutoTimeRestrictionDuringOrganizationOwnedDeviceMigration()V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->generateKeyPair(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Landroid/security/keystore/ParcelableKeyGenParameterSpec;ILandroid/security/keymaster/KeymasterCertificateChain;)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getAcceptedCaCertificates(Landroid/os/UserHandle;)Ljava/util/Set;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getAccountTypesWithManagementDisabledAsUser(IZ)[Ljava/lang/String;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminForCallerLocked(Landroid/content/ComponentName;I)Lcom/android/server/devicepolicy/ActiveAdmin;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminForCallerLocked(Landroid/content/ComponentName;IZ)Lcom/android/server/devicepolicy/ActiveAdmin;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminForCallerLocked(Landroid/content/ComponentName;IZ)Lcom/android/server/devicepolicy/ActiveAdmin;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminForUidLocked(Landroid/content/ComponentName;I)Lcom/android/server/devicepolicy/ActiveAdmin;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminOrCheckPermissionForCallerLocked(Landroid/content/ComponentName;ILjava/lang/String;)Lcom/android/server/devicepolicy/ActiveAdmin;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminOrCheckPermissionForCallerLocked(Landroid/content/ComponentName;IZLjava/lang/String;)Lcom/android/server/devicepolicy/ActiveAdmin;
@@ -19845,19 +20833,19 @@
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminWithPolicyForUidLocked(Landroid/content/ComponentName;II)Lcom/android/server/devicepolicy/ActiveAdmin;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdmins(I)Ljava/util/List;+]Landroid/app/admin/DeviceAdminInfo;Landroid/app/admin/DeviceAdminInfo;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminsForAffectedUserLocked(I)Ljava/util/List;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminsForLockscreenPoliciesLocked(I)Ljava/util/List;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminsForUserAndItsManagedProfilesLocked(ILjava/util/function/Predicate;)Ljava/util/List;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminsForLockscreenPoliciesLocked(I)Ljava/util/List;+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getActiveAdminsForUserAndItsManagedProfilesLocked(ILjava/util/function/Predicate;)Ljava/util/List;+]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getAdminWithMinimumFailedPasswordsForWipeLocked(IZ)Lcom/android/server/devicepolicy/ActiveAdmin;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getAggregatedPasswordComplexityForUser(IZ)I
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getAggregatedPasswordComplexityLocked(I)I
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getAggregatedPasswordComplexityLocked(IZ)I
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getAggregatedPasswordComplexityLocked(IZ)I
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getAllCrossProfilePackages()Ljava/util/List;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getAlwaysOnVpnPackage(Landroid/content/ComponentName;)Ljava/lang/String;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getAlwaysOnVpnPackage(Landroid/content/ComponentName;)Ljava/lang/String;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getAlwaysOnVpnPackageForUser(I)Ljava/lang/String;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getApplicationLabel(Ljava/lang/String;I)Ljava/lang/String;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getApplicationRestrictions(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)Landroid/os/Bundle;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getBindDeviceAdminTargetUsers(Landroid/content/ComponentName;)Ljava/util/List;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getBluetoothContactSharingDisabledForUser(I)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getBluetoothContactSharingDisabledForUser(I)Z+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCallerIdentity()Lcom/android/server/devicepolicy/CallerIdentity;+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCallerIdentity(Landroid/content/ComponentName;)Lcom/android/server/devicepolicy/CallerIdentity;+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCallerIdentity(Landroid/content/ComponentName;Ljava/lang/String;)Lcom/android/server/devicepolicy/CallerIdentity;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/devicepolicy/ActiveAdmin;Lcom/android/server/devicepolicy/ActiveAdmin;
@@ -19865,17 +20853,18 @@
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCameraDisabled(Landroid/content/ComponentName;IZ)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getConfigurableDefaultCrossProfilePackages()Ljava/util/Set;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCredentialOwner(IZ)I
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCrossProfileCalendarPackagesForUser(I)Ljava/util/List;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCrossProfileCallerIdDisabledForUser(I)Z+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCrossProfileContactsSearchDisabledForUser(I)Z+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCrossProfilePackagesForAdmins(Ljava/util/List;)Ljava/util/List;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCrossProfileWidgetProviders(Landroid/content/ComponentName;)Ljava/util/List;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCurrentFailedPasswordAttempts(IZ)I
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCurrentFailedPasswordAttempts(IZ)I
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getCurrentForegroundUserId()I
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDefaultCrossProfilePackages()Ljava/util/List;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDelegatePackagesInternalLocked(Ljava/lang/String;I)Ljava/util/List;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDelegatedScopes(Landroid/content/ComponentName;Ljava/lang/String;)Ljava/util/List;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDelegatePackagesInternalLocked(Ljava/lang/String;I)Ljava/util/List;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDelegatedScopes(Landroid/content/ComponentName;Ljava/lang/String;)Ljava/util/List;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/devicepolicy/CallerIdentity;Lcom/android/server/devicepolicy/CallerIdentity;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOrProfileOwnerAdminLocked(I)Lcom/android/server/devicepolicy/ActiveAdmin;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOwnerAdminLocked()Lcom/android/server/devicepolicy/ActiveAdmin;+]Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOwnerAdminLocked()Lcom/android/server/devicepolicy/ActiveAdmin;+]Landroid/app/admin/DeviceAdminInfo;Landroid/app/admin/DeviceAdminInfo;]Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOwnerComponent(Z)Landroid/content/ComponentName;+]Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOwnerLocked(Lcom/android/server/devicepolicy/CallerIdentity;)Lcom/android/server/devicepolicy/ActiveAdmin;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOwnerName()Ljava/lang/String;
@@ -19884,18 +20873,18 @@
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOwnerOrganizationName()Ljava/lang/CharSequence;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOwnerRemoteBugreportUriAndHash()Landroid/util/Pair;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOwnerType(Landroid/content/ComponentName;)I
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOwnerTypeLocked(Ljava/lang/String;)I+]Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOwnerTypeLocked(Ljava/lang/String;)I+]Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOwnerUserId()I
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDeviceOwnerUserIdUncheckedLocked()I
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDevicePolicyManagementRoleHolderPackageName(Landroid/content/Context;)Ljava/lang/String;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDisallowedSystemApps(Landroid/content/ComponentName;ILjava/lang/String;)Ljava/util/List;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getDrawable(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/app/admin/ParcelableResource;+]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getEncryptionStatus()I
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getEncryptionStatus()I
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getEncryptionStatusName(I)Ljava/lang/String;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getEnforcingAdminAndUserDetails(ILjava/lang/String;)Landroid/os/Bundle;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getEnforcingAdminAndUserDetailsInternal(ILjava/lang/String;)Landroid/os/Bundle;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getEnrollmentSpecificId(Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getFactoryResetProtectionPolicy(Landroid/content/ComponentName;)Landroid/app/admin/FactoryResetProtectionPolicy;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getEnrollmentSpecificId(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getFactoryResetProtectionPolicy(Landroid/content/ComponentName;)Landroid/app/admin/FactoryResetProtectionPolicy;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getFrpManagementAgentUid()I
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getFrpManagementAgentUidOrThrow()I
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getIntentFilterActions(Landroid/content/IntentFilter;)[Ljava/lang/String;
@@ -19907,21 +20896,22 @@
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getLockObject()Ljava/lang/Object;+]Lcom/android/internal/util/StatLogger;Lcom/android/internal/util/StatLogger;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getLogoutUserIdUnchecked()I
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getManagedProvisioningPackage(Landroid/content/Context;)Ljava/lang/String;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getManagedUserId(I)I
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getManagedUserId(I)I
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getMaximumFailedPasswordsForWipe(Landroid/content/ComponentName;IZ)I
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getMaximumTimeToLock(Landroid/content/ComponentName;IZ)J
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getMaximumTimeToLockPolicyFromAdmins(Ljava/util/List;)J
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getMaximumTimeToLockPolicyFromAdmins(Ljava/util/List;)J+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getMeteredDisabledPackages(I)Ljava/util/Set;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getMinimumRequiredWifiSecurityLevel()I
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getMinimumRequiredWifiSecurityLevel()I+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getMinimumStrongAuthTimeoutMs()J
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getNearbyAppStreamingPolicy(I)I
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getNearbyNotificationStreamingPolicy(I)I
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getNetworkLoggingAffectedUser()I
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getNetworkLoggingControllingAdminLocked()Lcom/android/server/devicepolicy/ActiveAdmin;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getNetworkLoggingAffectedUser()I
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getNetworkLoggingControllingAdminLocked()Lcom/android/server/devicepolicy/ActiveAdmin;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getNetworkLoggingText()Ljava/lang/String;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getNetworkLoggingTitle()Ljava/lang/String;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getOrganizationNameForUser(I)Ljava/lang/CharSequence;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getOrganizationOwnedProfileUserId()I
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getOverrideApnsUnchecked()Ljava/util/List;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getOwnerComponent(I)Landroid/content/ComponentName;+]Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getOwnerInstalledCaCerts(Landroid/os/UserHandle;)Landroid/content/pm/StringParceledListSlice;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getParentOfAdminIfRequired(Lcom/android/server/devicepolicy/ActiveAdmin;Z)Lcom/android/server/devicepolicy/ActiveAdmin;
@@ -19946,7 +20936,7 @@
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPermittedAccessibilityServicesForUser(I)Ljava/util/List;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPermittedInputMethodsAsUser(I)Ljava/util/List;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPermittedInputMethodsUnchecked(I)Ljava/util/List;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPersonalAppsSuspendedReasons(Landroid/content/ComponentName;)I
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPersonalAppsSuspendedReasons(Landroid/content/ComponentName;)I
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPolicyFileDirectory(I)Ljava/io/File;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPolicyManagedProfiles(Landroid/os/UserHandle;)Ljava/util/List;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getPowerManagerInternal()Landroid/os/PowerManagerInternal;
@@ -19955,11 +20945,11 @@
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getProfileOwnerAsUser(I)Landroid/content/ComponentName;+]Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getProfileOwnerLocked(Lcom/android/server/devicepolicy/CallerIdentity;)Lcom/android/server/devicepolicy/ActiveAdmin;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getProfileOwnerName(I)Ljava/lang/String;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getProfileOwnerNameUnchecked(I)Ljava/lang/String;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getProfileOwnerNameUnchecked(I)Ljava/lang/String;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getProfileOwnerOfOrganizationOwnedDeviceLocked(I)Lcom/android/server/devicepolicy/ActiveAdmin;+]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getProfileOwnerOrDeviceOwnerLocked(Lcom/android/server/devicepolicy/CallerIdentity;)Lcom/android/server/devicepolicy/ActiveAdmin;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getProfileOwnerOrDeviceOwnerSupervisionComponent(Landroid/os/UserHandle;)Landroid/content/ComponentName;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getProfileParentId(I)I
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getProfileParentId(I)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getProfileParentUserIfRequested(IZ)I
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getRequiredPasswordComplexity(Z)I
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getRequiredStrongAuthTimeout(Landroid/content/ComponentName;IZ)J
@@ -19970,7 +20960,7 @@
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getStorageEncryptionStatus(Ljava/lang/String;I)I
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getStrictestPasswordRequirement(Landroid/content/ComponentName;IZLjava/util/function/Function;I)I
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getString(Ljava/lang/String;)Landroid/app/admin/ParcelableResource;+]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getStringArrayForLogging(Ljava/util/List;Z)[Ljava/lang/String;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getStringArrayForLogging(Ljava/util/List;Z)[Ljava/lang/String;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getSystemUpdatePolicy()Landroid/app/admin/SystemUpdatePolicy;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getTargetSdk(Ljava/lang/String;I)I+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getUnsafeOperationReason(I)I
@@ -19981,21 +20971,21 @@
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getUserInfo(I)Landroid/content/pm/UserInfo;+]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getUserProvisioningState()I
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getUserProvisioningState(I)I
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getUserRestrictions(Landroid/content/ComponentName;Z)Landroid/os/Bundle;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getUserRestrictions(Landroid/content/ComponentName;Z)Landroid/os/Bundle;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->getWifiMacAddress(Landroid/content/ComponentName;)Ljava/lang/String;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getWifiSsidPolicy()Landroid/app/admin/WifiSsidPolicy;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->getWifiSsidPolicy()Landroid/app/admin/WifiSsidPolicy;+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->handleCancelNetworkLoggingNotification()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->handleDump(Landroid/util/IndentingPrintWriter;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->handleNewPackageInstalled(Ljava/lang/String;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->handleNewUserCreated(Landroid/content/pm/UserInfo;Ljava/lang/Object;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->handleOnUserUnlocked(I)V
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->handlePackagesChanged(Ljava/lang/String;I)V+]Landroid/app/admin/DeviceAdminInfo;Landroid/app/admin/DeviceAdminInfo;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->handlePackagesChanged(Ljava/lang/String;I)V+]Landroid/app/admin/DeviceAdminInfo;Landroid/app/admin/DeviceAdminInfo;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->handlePasswordExpirationNotification(I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->handleSendNetworkLoggingNotification()V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->handleStartUser(I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->handleStopUser(I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->handleUnlockUser(I)V
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->hasCallingOrSelfPermission(Ljava/lang/String;)Z+]Landroid/content/Context;Landroid/app/ContextImpl;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->hasCallingOrSelfPermission(Ljava/lang/String;)Z+]Landroid/content/Context;Landroid/app/ContextImpl;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->hasCallingPermission(Ljava/lang/String;)Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->hasCrossUsersPermission(Lcom/android/server/devicepolicy/CallerIdentity;I)Z+]Lcom/android/server/devicepolicy/CallerIdentity;Lcom/android/server/devicepolicy/CallerIdentity;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->hasDeviceOwner()Z
@@ -20012,33 +21002,37 @@
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isAccessibilityServicePermittedByAdmin(Landroid/content/ComponentName;Ljava/lang/String;I)Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isActiveAdminWithPolicyForUserLocked(Lcom/android/server/devicepolicy/ActiveAdmin;II)Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isActivePasswordSufficient(IZ)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isActivePasswordSufficientForDeviceRequirement()Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isActivePasswordSufficientForUserLocked(ZLandroid/app/admin/PasswordMetrics;I)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isAdb(Lcom/android/server/devicepolicy/CallerIdentity;)Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isAdminActive(Landroid/content/ComponentName;I)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isAlwaysOnVpnLockdownEnabled(Landroid/content/ComponentName;)Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isApplicationHidden(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Z)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isCallerDelegate(Lcom/android/server/devicepolicy/CallerIdentity;Ljava/lang/String;)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isCallerDelegate(Lcom/android/server/devicepolicy/CallerIdentity;Ljava/lang/String;)Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isCallerDelegate(Ljava/lang/String;ILjava/lang/String;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Ljava/util/List;Ljava/util/Arrays$ArrayList;,Ljava/util/ArrayList;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isCallingFromPackage(Ljava/lang/String;I)Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isCommonCriteriaModeEnabled(Landroid/content/ComponentName;)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isCredentialManagementApp(Lcom/android/server/devicepolicy/CallerIdentity;)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isCrossProfileQuickContactDisabled(I)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isCurrentInputMethodSetByOwner()Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isCurrentUserDemo()Z
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isDefaultDeviceOwner(Lcom/android/server/devicepolicy/CallerIdentity;)Z+]Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isDefaultDeviceOwner(Lcom/android/server/devicepolicy/CallerIdentity;)Z+]Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isDeveloperMode(Landroid/content/Context;)Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isDeviceOwner(Landroid/content/ComponentName;I)Z
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isDeviceOwnerLocked(Lcom/android/server/devicepolicy/CallerIdentity;)Z+]Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners;]Lcom/android/server/devicepolicy/CallerIdentity;Lcom/android/server/devicepolicy/CallerIdentity;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Landroid/content/ComponentName;Landroid/content/ComponentName;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isDeviceOwnerLocked(Lcom/android/server/devicepolicy/CallerIdentity;)Z+]Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners;]Lcom/android/server/devicepolicy/CallerIdentity;Lcom/android/server/devicepolicy/CallerIdentity;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Landroid/content/ComponentName;Landroid/content/ComponentName;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isDeviceOwnerUserId(I)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isDeviceProvisioned()Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isDeviceProvisioningConfigApplied()Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isEncryptionSupported()Z
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isFinancedDeviceOwner(Lcom/android/server/devicepolicy/CallerIdentity;)Z+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isFinancedDeviceOwner(Lcom/android/server/devicepolicy/CallerIdentity;)Z+]Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isLimitPasswordAllowed(Lcom/android/server/devicepolicy/ActiveAdmin;I)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isLockTaskPermitted(Ljava/lang/String;)Z
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isLogoutEnabled()Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isLockTaskPermitted(Ljava/lang/String;)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isLogoutEnabled()Z+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isManagedProfile(I)Z+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isManagedProfile(Landroid/content/ComponentName;)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isNetworkLoggingEnabled(Landroid/content/ComponentName;Ljava/lang/String;)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isNetworkLoggingEnabledInternalLocked()Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isMeteredDataDisabledPackageForUser(Landroid/content/ComponentName;Ljava/lang/String;I)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isNetworkLoggingEnabled(Landroid/content/ComponentName;Ljava/lang/String;)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isNetworkLoggingEnabledInternalLocked()Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isNotificationListenerServicePermitted(Ljava/lang/String;I)Z+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isOrganizationOwnedDeviceWithManagedProfile()Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isPackageInstalledForUser(Ljava/lang/String;I)Z
@@ -20046,24 +21040,27 @@
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isPackageTestOnly(Ljava/lang/String;I)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isPasswordSufficientForUserWithoutCheckpointLocked(Landroid/app/admin/PasswordMetrics;I)Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isProfileOwner(Landroid/content/ComponentName;I)Z
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isProfileOwner(Lcom/android/server/devicepolicy/CallerIdentity;)Z+]Lcom/android/server/devicepolicy/CallerIdentity;Lcom/android/server/devicepolicy/CallerIdentity;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;]Landroid/content/ComponentName;Landroid/content/ComponentName;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isProfileOwner(Lcom/android/server/devicepolicy/CallerIdentity;)Z+]Lcom/android/server/devicepolicy/CallerIdentity;Lcom/android/server/devicepolicy/CallerIdentity;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;]Landroid/content/ComponentName;Landroid/content/ComponentName;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isProfileOwnerOfOrganizationOwnedDevice(I)Z+]Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isProfileOwnerOfOrganizationOwnedDevice(Landroid/content/ComponentName;I)Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isProfileOwnerOfOrganizationOwnedDevice(Lcom/android/server/devicepolicy/CallerIdentity;)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isProvisioningAllowed()Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isProvisioningAllowed(Ljava/lang/String;Ljava/lang/String;)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isRemovedPackage(Ljava/lang/String;Ljava/lang/String;I)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isResetPasswordTokenActive(Landroid/content/ComponentName;)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isResetPasswordTokenActiveForUserLocked(I)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isRemovingAdmin(Landroid/content/ComponentName;I)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isResetPasswordTokenActive(Landroid/content/ComponentName;)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isResetPasswordTokenActiveForUserLocked(I)Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isRootUid(Lcom/android/server/devicepolicy/CallerIdentity;)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isRuntimePermission(Ljava/lang/String;)Z
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isSecondaryLockscreenEnabled(Landroid/os/UserHandle;)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isSecondaryLockscreenEnabled(Landroid/os/UserHandle;)Z+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Landroid/os/UserHandle;Landroid/os/UserHandle;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isSecurityLoggingEnabled(Landroid/content/ComponentName;Ljava/lang/String;)Z
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isSeparateProfileChallengeEnabled(I)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isSeparateProfileChallengeEnabled(I)Z+]Ljava/lang/Boolean;Ljava/lang/Boolean;]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isShellUid(Lcom/android/server/devicepolicy/CallerIdentity;)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isSupervisionComponent(Landroid/content/ComponentName;)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isSupervisionComponentLocked(Landroid/content/ComponentName;)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isSystemApp(Landroid/content/pm/IPackageManager;Ljava/lang/String;I)Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isSystemUid(Lcom/android/server/devicepolicy/CallerIdentity;)Z+]Lcom/android/server/devicepolicy/CallerIdentity;Lcom/android/server/devicepolicy/CallerIdentity;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isUidDeviceOwnerLocked(I)Z+]Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;]Landroid/content/ComponentName;Landroid/content/ComponentName;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isUidDeviceOwnerLocked(I)Z+]Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;]Landroid/content/ComponentName;Landroid/content/ComponentName;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isUidProfileOwnerLocked(I)Z+]Landroid/app/admin/DeviceAdminInfo;Landroid/app/admin/DeviceAdminInfo;]Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Lcom/android/server/devicepolicy/ActiveAdmin;Lcom/android/server/devicepolicy/ActiveAdmin;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isUninstallBlocked(Landroid/content/ComponentName;Ljava/lang/String;)Z+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isUninstallInQueue(Ljava/lang/String;)Z
@@ -20074,37 +21071,43 @@
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->isUserAffiliatedWithDeviceLocked(I)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->isUsingUnifiedPassword(Landroid/content/ComponentName;)Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$areAllUsersAffiliatedWithDeviceLocked$111()Ljava/lang/Boolean;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$canHandleCheckPolicyComplianceIntent$142(Lcom/android/server/devicepolicy/CallerIdentity;)Ljava/lang/Boolean;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$canUsbDataSignalingBeDisabled$148()Ljava/lang/Boolean;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$canHandleCheckPolicyComplianceIntent$142(Lcom/android/server/devicepolicy/CallerIdentity;)Ljava/lang/Boolean;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$canUsbDataSignalingBeDisabled$149()Ljava/lang/Boolean;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$choosePrivateKeyAlias$39(Landroid/content/Intent;Lcom/android/server/devicepolicy/CallerIdentity;Landroid/os/IBinder;Z)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$dump$74(Landroid/util/IndentingPrintWriter;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$ensureMinimumQuality$17(Lcom/android/server/devicepolicy/ActiveAdmin;IILjava/lang/String;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$ensureMinimumQuality$17(Lcom/android/server/devicepolicy/ActiveAdmin;IILjava/lang/String;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$findAdmin$4(Landroid/content/ComponentName;I)Landroid/content/pm/ActivityInfo;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getActiveAdminsForAffectedUserLocked$14(Landroid/content/pm/UserInfo;)Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getActiveAdminsForLockscreenPoliciesLocked$13(Landroid/content/pm/UserInfo;)Z+]Lcom/android/internal/widget/LockPatternUtils;Lcom/android/internal/widget/LockPatternUtils;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getActiveAdminsForUserAndItsManagedProfilesLocked$15(ILjava/util/ArrayList;Ljava/util/function/Predicate;)V+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Lcom/android/server/devicepolicy/ActiveAdmin;Lcom/android/server/devicepolicy/ActiveAdmin;]Landroid/os/UserManager;Landroid/os/UserManager;]Ljava/util/function/Predicate;Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda120;,Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda151;,Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda150;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getActiveAdminsForUserAndItsManagedProfilesLocked$15(ILjava/util/ArrayList;Ljava/util/function/Predicate;)V+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Lcom/android/server/devicepolicy/ActiveAdmin;Lcom/android/server/devicepolicy/ActiveAdmin;]Landroid/os/UserManager;Landroid/os/UserManager;]Ljava/util/function/Predicate;Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda153;,Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda120;,Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda150;,Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda108;,Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda151;,Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda121;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getAggregatedPasswordComplexityLocked$29(Landroid/content/pm/UserInfo;)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getAlwaysOnVpnPackage$44(Lcom/android/server/devicepolicy/CallerIdentity;)Ljava/lang/String;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getApplicationLabel$70(ILjava/lang/String;)Ljava/lang/String;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getApplicationRestrictions$85(Ljava/lang/String;Lcom/android/server/devicepolicy/CallerIdentity;)Landroid/os/Bundle;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getApplicationRestrictions$85(Ljava/lang/String;Lcom/android/server/devicepolicy/CallerIdentity;)Landroid/os/Bundle;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getBindDeviceAdminTargetUsers$114(Landroid/content/ComponentName;I)Ljava/util/ArrayList;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getCredentialOwner$73(IZ)Ljava/lang/Integer;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getDrawable$154(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/app/admin/ParcelableResource;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getDrawable$155(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/app/admin/ParcelableResource;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getNetworkLoggingAffectedUser$119()Ljava/lang/Integer;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getOverrideApnsUnchecked$129(Landroid/telephony/TelephonyManager;)Ljava/util/List;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getPasswordHistoryLength$19(Lcom/android/server/devicepolicy/ActiveAdmin;)Ljava/lang/Integer;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getPermissionGrantState$105(Lcom/android/server/devicepolicy/CallerIdentity;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Integer;+]Lcom/android/server/devicepolicy/CallerIdentity;Lcom/android/server/devicepolicy/CallerIdentity;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getPolicyManagedProfiles$165(I)Ljava/util/List;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getPasswordMinimumMetricsUnchecked$26(Landroid/content/pm/UserInfo;)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getPermissionGrantState$105(Lcom/android/server/devicepolicy/CallerIdentity;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Integer;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/devicepolicy/CallerIdentity;Lcom/android/server/devicepolicy/CallerIdentity;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getPolicyManagedProfiles$166(I)Ljava/util/List;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getProfileOwnerOfOrganizationOwnedDeviceLocked$69(I)Lcom/android/server/devicepolicy/ActiveAdmin;+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Landroid/os/UserManager;Landroid/os/UserManager;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getProfileParentId$72(I)Ljava/lang/Integer;+]Landroid/os/UserManager;Landroid/os/UserManager;
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getString$158(Ljava/lang/String;)Landroid/app/admin/ParcelableResource;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getUpdatableString$160(I[Ljava/lang/Object;)Ljava/lang/String;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getString$159(Ljava/lang/String;)Landroid/app/admin/ParcelableResource;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getUpdatableString$161(I[Ljava/lang/Object;)Ljava/lang/String;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getUpdatableString$162(I[Ljava/lang/Object;)Ljava/lang/String;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getUserDataUnchecked$2(I)Lcom/android/server/devicepolicy/DevicePolicyData;+]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getUserInfo$30(I)Landroid/content/pm/UserInfo;+]Landroid/os/UserManager;Landroid/os/UserManager;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$getWifiMacAddress$107(Lcom/android/server/devicepolicy/CallerIdentity;)Ljava/lang/String;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$isAlwaysOnVpnLockdownEnabled$45(Lcom/android/server/devicepolicy/CallerIdentity;)Ljava/lang/Boolean;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$isApplicationHidden$89(Ljava/lang/String;I)Ljava/lang/Boolean;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$isCallingFromPackage$138(Ljava/lang/String;I)Ljava/lang/Boolean;+]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$isCredentialManagementApp$40(Lcom/android/server/devicepolicy/CallerIdentity;)Ljava/lang/Boolean;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$isPackageInstalledForUser$106(Ljava/lang/String;I)Ljava/lang/Boolean;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$isProfileOwner$60(I)Landroid/content/ComponentName;
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$isProfileOwner$61(Lcom/android/server/devicepolicy/CallerIdentity;)Landroid/content/ComponentName;+]Lcom/android/server/devicepolicy/CallerIdentity;Lcom/android/server/devicepolicy/CallerIdentity;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$isProfileOwner$60(I)Landroid/content/ComponentName;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$isProfileOwner$61(Lcom/android/server/devicepolicy/CallerIdentity;)Landroid/content/ComponentName;+]Lcom/android/server/devicepolicy/CallerIdentity;Lcom/android/server/devicepolicy/CallerIdentity;]Lcom/android/server/devicepolicy/DevicePolicyManagerService;Lcom/android/server/devicepolicy/DevicePolicyManagerService;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$isResetPasswordTokenActiveForUserLocked$124(Lcom/android/server/devicepolicy/DevicePolicyData;I)Ljava/lang/Boolean;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$isSeparateProfileChallengeEnabled$16(I)Ljava/lang/Boolean;+]Lcom/android/internal/widget/LockPatternUtils;Lcom/android/internal/widget/LockPatternUtils;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$loadAdminDataAsync$9()V
@@ -20117,7 +21120,7 @@
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$removeCredentialManagementApp$0(Ljava/lang/String;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$reportSuccessfulPasswordAttempt$52(Lcom/android/server/devicepolicy/DevicePolicyData;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$resetDefaultCrossProfileIntentFilters$145(I)V
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$sendChangedNotification$5(Landroid/content/Intent;I)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$sendChangedNotification$5(Landroid/content/Intent;I)V+]Landroid/content/Context;Landroid/app/ContextImpl;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setActiveAdmin$8(Landroid/content/ComponentName;IZLandroid/app/admin/DeviceAdminInfo;Lcom/android/server/devicepolicy/DevicePolicyData;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setApplicationHidden$87(Ljava/lang/String;ZI)Ljava/lang/Boolean;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setApplicationRestrictions$77(Ljava/lang/String;Landroid/os/Bundle;Lcom/android/server/devicepolicy/CallerIdentity;Landroid/content/ComponentName;)V
@@ -20127,6 +21130,7 @@
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setExpirationAlarmCheckLocked$3(ZILandroid/content/Context;J)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setFactoryResetProtectionPolicy$49(I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setGlobalSetting$93(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setGlobalSettingDeviceOwnerType$147(I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setNetworkLoggingActiveInternal$116()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setNetworkLoggingActiveInternal$117()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setNetworkLoggingActiveInternal$118(Z)V
@@ -20142,14 +21146,14 @@
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setRecommendedGlobalProxy$54(Landroid/net/ProxyInfo;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setRequiredPasswordComplexity$28(Lcom/android/server/devicepolicy/ActiveAdmin;ILcom/android/server/devicepolicy/CallerIdentity;Z)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setResetPasswordToken$122(Lcom/android/server/devicepolicy/DevicePolicyData;I[B)Ljava/lang/Boolean;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setSecureSetting$100(Ljava/lang/String;ILjava/lang/String;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setSystemUpdatePolicy$102()V
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$shouldAllowBypassingDevicePolicyManagementRoleQualification$164()Ljava/lang/Boolean;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setSecureSetting$100(Ljava/lang/String;ILjava/lang/String;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$setSystemUpdatePolicy$102()V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$shouldAllowBypassingDevicePolicyManagementRoleQualification$165()Ljava/lang/Boolean;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$startManagedQuickContact$90(ILandroid/content/Intent;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$updateMaximumTimeToLockLocked$32(I)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$updateNetworkPreferenceForUser$146(ILjava/util/List;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$updateProfileLockTimeoutLocked$33(ILcom/android/server/devicepolicy/DevicePolicyData;)V
-HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$updateUsbDataSignal$147(Z)Ljava/lang/Boolean;
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->lambda$updateUsbDataSignal$148(Z)Ljava/lang/Boolean;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->listPolicyExemptAppsUnchecked()Ljava/util/List;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->loadAdminDataAsync()V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->loadConstants()Lcom/android/server/devicepolicy/DevicePolicyConstants;
@@ -20157,7 +21161,8 @@
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->loadSettingsLocked(Lcom/android/server/devicepolicy/DevicePolicyData;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->logCopyAccountStatus(ILjava/lang/String;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->logEventDuration(IJLjava/lang/String;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->logPasswordComplexityRequiredIfSecurityLogEnabled(Landroid/content/ComponentName;IZI)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->logGenerateKeyPairFailure(Lcom/android/server/devicepolicy/CallerIdentity;Z)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->logPasswordComplexityRequiredIfSecurityLogEnabled(Landroid/content/ComponentName;IZI)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->logPasswordQualitySetIfSecurityLogEnabled(Landroid/content/ComponentName;IZLandroid/app/admin/PasswordPolicy;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->logSetCrossProfilePackages(Landroid/content/ComponentName;Ljava/util/List;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->makeJournaledFile(I)Lcom/android/internal/util/JournaledFile;
@@ -20170,7 +21175,7 @@
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->maybeMigrateAccount(IILandroid/accounts/Account;ZLjava/lang/String;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->maybePauseDeviceWideLoggingLocked()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->maybeResumeDeviceWideLoggingLocked()V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->maybeSendAdminEnabledBroadcastLocked(I)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->maybeSendAdminEnabledBroadcastLocked(I)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->maybeSetDefaultProfileOwnerUserRestrictions()V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->maybeSetDefaultRestrictionsForAdminLocked(ILcom/android/server/devicepolicy/ActiveAdmin;Ljava/util/Set;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->maybeStartSecurityLogMonitorOnActivityManagerReady()V
@@ -20184,7 +21189,7 @@
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->onInstalledCertificatesChanged(Landroid/os/UserHandle;Ljava/util/Collection;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->onLockSettingsReady()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->onShellCommand(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;Landroid/os/ShellCallback;Landroid/os/ResultReceiver;)V
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->packageHasActiveAdmins(Ljava/lang/String;I)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->packageHasActiveAdmins(Ljava/lang/String;I)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->passwordQualityInvocationOrderCheckEnabled(Ljava/lang/String;I)Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->performPolicyVersionUpgrade()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->populateNonExemptAndExemptFromPolicyApps([Ljava/lang/String;Ljava/util/Set;)[Ljava/lang/String;
@@ -20210,21 +21215,21 @@
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->resetDefaultCrossProfileIntentFilters(I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->resetInteractAcrossProfilesAppOps()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->resolveDelegateReceiver(Ljava/lang/String;Ljava/lang/String;I)Landroid/content/ComponentName;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->retrieveNetworkLogs(Landroid/content/ComponentName;Ljava/lang/String;J)Ljava/util/List;
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->retrieveSecurityLogs(Landroid/content/ComponentName;Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->retrieveNetworkLogs(Landroid/content/ComponentName;Ljava/lang/String;J)Ljava/util/List;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->retrieveSecurityLogs(Landroid/content/ComponentName;Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->revertTransferOwnershipIfNecessaryLocked()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->saveSettingsForUsersLocked(Ljava/util/Set;)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->saveSettingsLocked(I)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->saveUserRestrictionsLocked(I)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendActiveAdminCommand(Ljava/lang/String;Landroid/os/Bundle;ILandroid/content/ComponentName;Z)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendActiveAdminCommand(Ljava/lang/String;Landroid/os/Bundle;ILandroid/content/ComponentName;Z)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendAdminCommandForLockscreenPoliciesLocked(Ljava/lang/String;II)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendAdminCommandLocked(Lcom/android/server/devicepolicy/ActiveAdmin;Ljava/lang/String;Landroid/os/Bundle;Landroid/content/BroadcastReceiver;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendAdminCommandLocked(Lcom/android/server/devicepolicy/ActiveAdmin;Ljava/lang/String;Landroid/os/Bundle;Landroid/content/BroadcastReceiver;Z)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendAdminCommandLocked(Ljava/lang/String;IILandroid/os/Bundle;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendAdminCommandToSelfAndProfilesLocked(Ljava/lang/String;IILandroid/os/Bundle;)V
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendChangedNotification(I)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendChangedNotification(I)V+]Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;Lcom/android/server/devicepolicy/DevicePolicyManagerService$Injector;]Landroid/content/Intent;Landroid/content/Intent;
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendDelegationChangedBroadcast(Ljava/lang/String;Ljava/util/ArrayList;I)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendDeviceOwnerOrProfileOwnerCommand(Ljava/lang/String;Landroid/os/Bundle;I)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendDeviceOwnerOrProfileOwnerCommand(Ljava/lang/String;Landroid/os/Bundle;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendOwnerChangedBroadcast(Ljava/lang/String;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendPrivateKeyAliasResponse(Ljava/lang/String;Landroid/os/IBinder;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->sendProvisioningCompletedBroadcast(ILjava/lang/String;Z)V
@@ -20233,72 +21238,74 @@
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setAffiliationIds(Landroid/content/ComponentName;Ljava/util/List;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setApplicationHidden(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;ZZ)Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setApplicationRestrictions(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setAutoTimeRequired(Landroid/content/ComponentName;Z)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setBackupServiceEnabled(Landroid/content/ComponentName;Z)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setAutoTimeRequired(Landroid/content/ComponentName;Z)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setBackupServiceEnabled(Landroid/content/ComponentName;Z)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setBluetoothContactSharingDisabled(Landroid/content/ComponentName;Z)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setCameraDisabled(Landroid/content/ComponentName;ZZ)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setCommonCriteriaModeEnabled(Landroid/content/ComponentName;Z)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setCrossProfileCallerIdDisabled(Landroid/content/ComponentName;Z)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setCrossProfileContactsSearchDisabled(Landroid/content/ComponentName;Z)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setCommonCriteriaModeEnabled(Landroid/content/ComponentName;Z)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setCrossProfileCallerIdDisabled(Landroid/content/ComponentName;Z)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setCrossProfileContactsSearchDisabled(Landroid/content/ComponentName;Z)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setCrossProfilePackages(Landroid/content/ComponentName;Ljava/util/List;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setDelegatedScopes(Landroid/content/ComponentName;Ljava/lang/String;Ljava/util/List;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setDeviceOwnerLockScreenInfo(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setDeviceOwnerLockScreenInfo(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setDeviceOwnershipSystemPropertyLocked()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setEncryptionRequested(Z)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setExpirationAlarmCheckLocked(Landroid/content/Context;IZ)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setFactoryResetProtectionPolicy(Landroid/content/ComponentName;Landroid/app/admin/FactoryResetProtectionPolicy;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setFactoryResetProtectionPolicy(Landroid/content/ComponentName;Landroid/app/admin/FactoryResetProtectionPolicy;)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setGlobalSetting(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setGlobalSettingDeviceOwnerType(I)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setKeepUninstalledPackages(Landroid/content/ComponentName;Ljava/lang/String;Ljava/util/List;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setKeyChainGrantInternal(Ljava/lang/String;ZILandroid/os/UserHandle;)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setKeyChainGrantInternal(Ljava/lang/String;ZILandroid/os/UserHandle;)Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setKeyGrantForApp(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Z
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setKeyPairCertificate(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;[B[BZ)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setKeyguardDisabled(Landroid/content/ComponentName;Z)Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setKeyguardDisabledFeatures(Landroid/content/ComponentName;IZ)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setLockTaskFeatures(Landroid/content/ComponentName;I)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setLockTaskFeaturesLocked(II)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setLockTaskFeaturesLocked(II)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setLockTaskPackages(Landroid/content/ComponentName;[Ljava/lang/String;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setLockTaskPackagesLocked(ILjava/util/List;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setLongSupportMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setLockTaskPackagesLocked(ILjava/util/List;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setLongSupportMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setManagedProfileMaximumTimeOff(Landroid/content/ComponentName;J)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setMasterVolumeMuted(Landroid/content/ComponentName;Z)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setMasterVolumeMuted(Landroid/content/ComponentName;Z)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setMaximumFailedPasswordsForWipe(Landroid/content/ComponentName;IZ)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setMaximumTimeToLock(Landroid/content/ComponentName;JZ)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setNetworkLoggingActiveInternal(Z)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setNetworkLoggingEnabled(Landroid/content/ComponentName;Ljava/lang/String;Z)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setNetworkLoggingEnabled(Landroid/content/ComponentName;Ljava/lang/String;Z)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setOrganizationColor(Landroid/content/ComponentName;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setOrganizationIdForUser(Ljava/lang/String;Ljava/lang/String;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setOrganizationName(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPackagesSuspended(Landroid/content/ComponentName;Ljava/lang/String;[Ljava/lang/String;Z)[Ljava/lang/String;
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPasswordHistoryLength(Landroid/content/ComponentName;IZ)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPasswordMinimumLength(Landroid/content/ComponentName;IZ)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPasswordMinimumLength(Landroid/content/ComponentName;IZ)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPasswordQuality(Landroid/content/ComponentName;IZ)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPermissionGrantState(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/os/RemoteCallback;)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPermissionPolicy(Landroid/content/ComponentName;Ljava/lang/String;I)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPermittedAccessibilityServices(Landroid/content/ComponentName;Ljava/util/List;)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPermittedCrossProfileNotificationListeners(Landroid/content/ComponentName;Ljava/util/List;)Z
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPermittedCrossProfileNotificationListeners(Landroid/content/ComponentName;Ljava/util/List;)Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPermittedInputMethods(Landroid/content/ComponentName;Ljava/util/List;Z)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPersonalAppsSuspended(Landroid/content/ComponentName;Z)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPersonalAppsSuspended(Landroid/content/ComponentName;Z)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setPreferentialNetworkServiceConfigs(Ljava/util/List;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setProfileEnabled(Landroid/content/ComponentName;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setProfileOwner(Landroid/content/ComponentName;Ljava/lang/String;I)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setRecommendedGlobalProxy(Landroid/content/ComponentName;Landroid/net/ProxyInfo;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setRecommendedGlobalProxy(Landroid/content/ComponentName;Landroid/net/ProxyInfo;)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setRequiredPasswordComplexity(IZ)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setRequiredStrongAuthTimeout(Landroid/content/ComponentName;JZ)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setResetPasswordToken(Landroid/content/ComponentName;[B)Z
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setScreenCaptureDisabled(I)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setScreenCaptureDisabled(Landroid/content/ComponentName;ZZ)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setScreenCaptureDisabled(Landroid/content/ComponentName;ZZ)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setSecureSetting(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setSecurityLoggingEnabled(Landroid/content/ComponentName;Ljava/lang/String;Z)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setShortSupportMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setSecurityLoggingEnabled(Landroid/content/ComponentName;Ljava/lang/String;Z)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setShortSupportMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setStatusBarDisabled(Landroid/content/ComponentName;Z)Z
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setStorageEncryption(Landroid/content/ComponentName;Z)I
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setSystemUpdatePolicy(Landroid/content/ComponentName;Landroid/app/admin/SystemUpdatePolicy;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setSystemUpdatePolicy(Landroid/content/ComponentName;Landroid/app/admin/SystemUpdatePolicy;)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setUninstallBlocked(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Z)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setUserControlDisabledPackages(Landroid/content/ComponentName;Ljava/util/List;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setUserProvisioningState(II)V
 HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->setUserRestriction(Landroid/content/ComponentName;Ljava/lang/String;ZZ)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->setUserSetupComplete(I)V
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->shouldAllowBypassingDevicePolicyManagementRoleQualification()Z
-HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->shouldAllowBypassingDevicePolicyManagementRoleQualificationInternal()Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->shouldAllowBypassingDevicePolicyManagementRoleQualification()Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->shouldAllowBypassingDevicePolicyManagementRoleQualificationInternal()Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->shouldCheckIfDelegatePackageIsInstalled(Ljava/lang/String;ILjava/util/List;)Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->shouldSendNetworkLoggingNotificationLocked()Z
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->showNewUserDisclaimerIfNecessary(I)V
@@ -20306,9 +21313,10 @@
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->startOwnerService(ILjava/lang/String;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->startUser(ILjava/lang/String;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->stopOwnerService(ILjava/lang/String;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->suspendPersonalAppsInternal(IZ)V
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->suspendPersonalAppsInternal(IZ)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->systemReady(I)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->toggleBackupServiceActive(IZ)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->toggleBackupServiceActive(IZ)V
+PLcom/android/server/devicepolicy/DevicePolicyManagerService;->translateIdAttestationFlags(I)[I
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->triggerPolicyComplianceCheckIfNeeded(IZ)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->updateAdminCanGrantSensorsPermissionCache(I)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->updateLockTaskFeaturesLocked(II)V
@@ -20319,17 +21327,17 @@
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->updatePasswordQualityCacheForUserGroup(I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->updatePasswordValidityCheckpointLocked(IZ)Ljava/util/Set;
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->updatePermissionPolicyCache(I)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->updatePersonalAppsSuspension(IZ)Z
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->updatePersonalAppsSuspensionOnUserStart(I)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->updatePersonalAppsSuspension(IZ)Z
+HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->updatePersonalAppsSuspensionOnUserStart(I)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->updateProfileLockTimeoutLocked(I)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->updateProfileOffDeadlineLocked(ILcom/android/server/devicepolicy/ActiveAdmin;Z)I
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->updateProfileOffDeadlineLocked(ILcom/android/server/devicepolicy/ActiveAdmin;Z)I
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->updateProfileOffDeadlineNotificationLocked(ILcom/android/server/devicepolicy/ActiveAdmin;I)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->updateSystemUpdateFreezePeriodsRecord(Z)V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->updateUsbDataSignal()V
 HSPLcom/android/server/devicepolicy/DevicePolicyManagerService;->updateUserSetupCompleteAndPaired()V
 PLcom/android/server/devicepolicy/DevicePolicyManagerService;->validateQualityConstant(I)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->verifyDeviceOwnerTypePreconditionsLocked(Landroid/content/ComponentName;)V
-PLcom/android/server/devicepolicy/DevicePolicyManagerService;->withAccessibilityManager(ILjava/util/function/Function;)Ljava/lang/Object;
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->verifyDeviceOwnerTypePreconditionsLocked(Landroid/content/ComponentName;)V
+HPLcom/android/server/devicepolicy/DevicePolicyManagerService;->withAccessibilityManager(ILjava/util/function/Function;)Ljava/lang/Object;
 PLcom/android/server/devicepolicy/DevicePolicyManagerServiceShellCommand;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
 PLcom/android/server/devicepolicy/DevicePolicyManagerServiceShellCommand;->onCommand(Ljava/lang/String;)I
 PLcom/android/server/devicepolicy/DevicePolicyManagerServiceShellCommand;->parseArgs(Z)V
@@ -20362,11 +21370,11 @@
 PLcom/android/server/devicepolicy/NetworkLogger;->checkIpConnectivityMetricsService()Z
 PLcom/android/server/devicepolicy/NetworkLogger;->discardLogs()V
 PLcom/android/server/devicepolicy/NetworkLogger;->resume()V
-PLcom/android/server/devicepolicy/NetworkLogger;->retrieveLogs(J)Ljava/util/List;
+HPLcom/android/server/devicepolicy/NetworkLogger;->retrieveLogs(J)Ljava/util/List;
 PLcom/android/server/devicepolicy/NetworkLogger;->startNetworkLogging()Z
 PLcom/android/server/devicepolicy/NetworkLogger;->stopNetworkLogging()Z
-PLcom/android/server/devicepolicy/NetworkLoggingHandler$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/devicepolicy/NetworkLoggingHandler;J)V
-PLcom/android/server/devicepolicy/NetworkLoggingHandler$$ExternalSyntheticLambda0;->run()V
+HPLcom/android/server/devicepolicy/NetworkLoggingHandler$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/devicepolicy/NetworkLoggingHandler;J)V
+HPLcom/android/server/devicepolicy/NetworkLoggingHandler$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/devicepolicy/NetworkLoggingHandler$1;-><init>(Lcom/android/server/devicepolicy/NetworkLoggingHandler;)V
 PLcom/android/server/devicepolicy/NetworkLoggingHandler$1;->onAlarm()V
 PLcom/android/server/devicepolicy/NetworkLoggingHandler;->$r8$lambda$mNgodSPil4nAx4z4bfEh8ShRuGk(Lcom/android/server/devicepolicy/NetworkLoggingHandler;J)V
@@ -20379,12 +21387,12 @@
 PLcom/android/server/devicepolicy/NetworkLoggingHandler;-><init>(Landroid/os/Looper;Lcom/android/server/devicepolicy/DevicePolicyManagerService;JI)V
 PLcom/android/server/devicepolicy/NetworkLoggingHandler;->buildAdminMessageLocked()Landroid/os/Bundle;
 PLcom/android/server/devicepolicy/NetworkLoggingHandler;->discardLogs()V
-HPLcom/android/server/devicepolicy/NetworkLoggingHandler;->finalizeBatchAndBuildAdminMessageLocked()Landroid/os/Bundle;+]Landroid/app/admin/NetworkEvent;Landroid/app/admin/DnsEvent;,Landroid/app/admin/ConnectEvent;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/server/devicepolicy/NetworkLoggingHandler;Lcom/android/server/devicepolicy/NetworkLoggingHandler;
+HPLcom/android/server/devicepolicy/NetworkLoggingHandler;->finalizeBatchAndBuildAdminMessageLocked()Landroid/os/Bundle;+]Landroid/app/admin/NetworkEvent;Landroid/app/admin/DnsEvent;,Landroid/app/admin/ConnectEvent;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/server/devicepolicy/NetworkLoggingHandler;Lcom/android/server/devicepolicy/NetworkLoggingHandler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HPLcom/android/server/devicepolicy/NetworkLoggingHandler;->handleMessage(Landroid/os/Message;)V+]Landroid/os/Message;Landroid/os/Message;]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/devicepolicy/NetworkLoggingHandler;Lcom/android/server/devicepolicy/NetworkLoggingHandler;
 PLcom/android/server/devicepolicy/NetworkLoggingHandler;->lambda$retrieveFullLogBatch$0(J)V
-PLcom/android/server/devicepolicy/NetworkLoggingHandler;->notifyDeviceOwnerOrProfileOwner(Landroid/os/Bundle;)V
+HPLcom/android/server/devicepolicy/NetworkLoggingHandler;->notifyDeviceOwnerOrProfileOwner(Landroid/os/Bundle;)V
 PLcom/android/server/devicepolicy/NetworkLoggingHandler;->resume()V
-PLcom/android/server/devicepolicy/NetworkLoggingHandler;->retrieveFullLogBatch(J)Ljava/util/List;
+HPLcom/android/server/devicepolicy/NetworkLoggingHandler;->retrieveFullLogBatch(J)Ljava/util/List;
 PLcom/android/server/devicepolicy/NetworkLoggingHandler;->scheduleBatchFinalization()V
 PLcom/android/server/devicepolicy/OverlayPackagesProvider$DefaultInjector$$ExternalSyntheticLambda0;-><init>(Landroid/content/Context;)V
 PLcom/android/server/devicepolicy/OverlayPackagesProvider$DefaultInjector$$ExternalSyntheticLambda0;->getOrThrow()Ljava/lang/Object;
@@ -20422,11 +21430,12 @@
 PLcom/android/server/devicepolicy/Owners;->dump(Landroid/util/IndentingPrintWriter;)V
 HSPLcom/android/server/devicepolicy/Owners;->getDeviceOwnerComponent()Landroid/content/ComponentName;
 HSPLcom/android/server/devicepolicy/Owners;->getDeviceOwnerFile()Ljava/io/File;
-HPLcom/android/server/devicepolicy/Owners;->getDeviceOwnerPackageName()Ljava/lang/String;
+HSPLcom/android/server/devicepolicy/Owners;->getDeviceOwnerPackageName()Ljava/lang/String;
 PLcom/android/server/devicepolicy/Owners;->getDeviceOwnerRemoteBugreportUri()Ljava/lang/String;
-HPLcom/android/server/devicepolicy/Owners;->getDeviceOwnerType(Ljava/lang/String;)I+]Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners;
+HSPLcom/android/server/devicepolicy/Owners;->getDeviceOwnerType(Ljava/lang/String;)I+]Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners;
 HSPLcom/android/server/devicepolicy/Owners;->getDeviceOwnerUidLocked()I
 HSPLcom/android/server/devicepolicy/Owners;->getDeviceOwnerUserId()I
+PLcom/android/server/devicepolicy/Owners;->getDeviceOwnerUserIdAndComponent()Landroid/util/Pair;
 HSPLcom/android/server/devicepolicy/Owners;->getProfileOwnerComponent(I)Landroid/content/ComponentName;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/devicepolicy/Owners;->getProfileOwnerFile(I)Ljava/io/File;
 HSPLcom/android/server/devicepolicy/Owners;->getProfileOwnerKeys()Ljava/util/Set;
@@ -20434,7 +21443,7 @@
 HPLcom/android/server/devicepolicy/Owners;->getSystemUpdatePolicy()Landroid/app/admin/SystemUpdatePolicy;
 HSPLcom/android/server/devicepolicy/Owners;->hasDeviceOwner()Z
 HSPLcom/android/server/devicepolicy/Owners;->hasProfileOwner(I)Z+]Lcom/android/server/devicepolicy/Owners;Lcom/android/server/devicepolicy/Owners;
-HPLcom/android/server/devicepolicy/Owners;->isDeviceOwnerTypeSetForDeviceOwner(Ljava/lang/String;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HSPLcom/android/server/devicepolicy/Owners;->isDeviceOwnerTypeSetForDeviceOwner(Ljava/lang/String;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/devicepolicy/Owners;->isDeviceOwnerUserId(I)Z
 HSPLcom/android/server/devicepolicy/Owners;->isProfileOwnerOfOrganizationOwnedDevice(I)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/devicepolicy/Owners;->lambda$load$0(Landroid/content/pm/UserInfo;)I
@@ -20508,18 +21517,18 @@
 HSPLcom/android/server/devicepolicy/SecurityLogMonitor;-><clinit>()V
 HSPLcom/android/server/devicepolicy/SecurityLogMonitor;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;)V
 HSPLcom/android/server/devicepolicy/SecurityLogMonitor;-><init>(Lcom/android/server/devicepolicy/DevicePolicyManagerService;J)V
-HPLcom/android/server/devicepolicy/SecurityLogMonitor;->assignLogId(Landroid/app/admin/SecurityLog$SecurityEvent;)V
+HPLcom/android/server/devicepolicy/SecurityLogMonitor;->assignLogId(Landroid/app/admin/SecurityLog$SecurityEvent;)V+]Landroid/app/admin/SecurityLog$SecurityEvent;Landroid/app/admin/SecurityLog$SecurityEvent;
 HPLcom/android/server/devicepolicy/SecurityLogMonitor;->checkCriticalLevel()V
 PLcom/android/server/devicepolicy/SecurityLogMonitor;->discardLogs()V
-HPLcom/android/server/devicepolicy/SecurityLogMonitor;->getNextBatch(Ljava/util/ArrayList;)V
+HPLcom/android/server/devicepolicy/SecurityLogMonitor;->getNextBatch(Ljava/util/ArrayList;)V+]Landroid/app/admin/SecurityLog$SecurityEvent;Landroid/app/admin/SecurityLog$SecurityEvent;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 PLcom/android/server/devicepolicy/SecurityLogMonitor;->lambda$getNextBatch$0(Landroid/app/admin/SecurityLog$SecurityEvent;Landroid/app/admin/SecurityLog$SecurityEvent;)I
-HPLcom/android/server/devicepolicy/SecurityLogMonitor;->mergeBatchLocked(Ljava/util/ArrayList;)V
+HPLcom/android/server/devicepolicy/SecurityLogMonitor;->mergeBatchLocked(Ljava/util/ArrayList;)V+]Ljava/util/List;Ljava/util/ArrayList$SubList;]Landroid/app/admin/SecurityLog$SecurityEvent;Landroid/app/admin/SecurityLog$SecurityEvent;]Lcom/android/server/devicepolicy/SecurityLogMonitor;Lcom/android/server/devicepolicy/SecurityLogMonitor;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$SubList$1;
 HPLcom/android/server/devicepolicy/SecurityLogMonitor;->notifyDeviceOwnerOrProfileOwnerIfNeeded(Z)V
 PLcom/android/server/devicepolicy/SecurityLogMonitor;->pause()V
 PLcom/android/server/devicepolicy/SecurityLogMonitor;->resume()V
-PLcom/android/server/devicepolicy/SecurityLogMonitor;->retrieveLogs()Ljava/util/List;
+HPLcom/android/server/devicepolicy/SecurityLogMonitor;->retrieveLogs()Ljava/util/List;
 HSPLcom/android/server/devicepolicy/SecurityLogMonitor;->run()V
-HPLcom/android/server/devicepolicy/SecurityLogMonitor;->saveLastEvents(Ljava/util/ArrayList;)V
+HPLcom/android/server/devicepolicy/SecurityLogMonitor;->saveLastEvents(Ljava/util/ArrayList;)V+]Landroid/app/admin/SecurityLog$SecurityEvent;Landroid/app/admin/SecurityLog$SecurityEvent;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/devicepolicy/SecurityLogMonitor;->start(I)V
 PLcom/android/server/devicepolicy/SecurityLogMonitor;->stop()V
 HSPLcom/android/server/devicepolicy/TransferOwnershipMetadataManager$Injector;-><init>()V
@@ -20554,6 +21563,7 @@
 HSPLcom/android/server/devicestate/DeviceStateManagerService$DeviceStateProviderListener;->onSupportedDeviceStatesChanged([Lcom/android/server/devicestate/DeviceState;)V
 HSPLcom/android/server/devicestate/DeviceStateManagerService$LocalService;-><init>(Lcom/android/server/devicestate/DeviceStateManagerService;)V
 HSPLcom/android/server/devicestate/DeviceStateManagerService$LocalService;-><init>(Lcom/android/server/devicestate/DeviceStateManagerService;Lcom/android/server/devicestate/DeviceStateManagerService$LocalService-IA;)V
+HSPLcom/android/server/devicestate/DeviceStateManagerService$LocalService;->getSupportedStateIdentifiers()[I
 HSPLcom/android/server/devicestate/DeviceStateManagerService$ProcessRecord$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/devicestate/DeviceStateManagerService$ProcessRecord;Landroid/hardware/devicestate/DeviceStateInfo;)V
 HSPLcom/android/server/devicestate/DeviceStateManagerService$ProcessRecord$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/devicestate/DeviceStateManagerService$ProcessRecord;->$r8$lambda$CwW07WXYvf61Ol5nJ8YZUiNBSUo(Lcom/android/server/devicestate/DeviceStateManagerService$ProcessRecord;Landroid/hardware/devicestate/DeviceStateInfo;)V
@@ -20565,7 +21575,9 @@
 HSPLcom/android/server/devicestate/DeviceStateManagerService;->$r8$lambda$jiU5VXokYcJUH2EJ6jFQstyxfLE(Lcom/android/server/devicestate/DeviceStateManagerService;)V
 PLcom/android/server/devicestate/DeviceStateManagerService;->$r8$lambda$s8kEW-K3GJMb1y3UvMw1-_u88Uk(Lcom/android/server/devicestate/DeviceStateManagerService;Lcom/android/server/devicestate/DeviceStateManagerService$ProcessRecord;)V
 HSPLcom/android/server/devicestate/DeviceStateManagerService;->$r8$lambda$wIWgFzEDmf-WTNtQtPpan3TstOU(Lcom/android/server/devicestate/DeviceStateManagerService;)V
+HSPLcom/android/server/devicestate/DeviceStateManagerService;->-$$Nest$fgetmLock(Lcom/android/server/devicestate/DeviceStateManagerService;)Ljava/lang/Object;
 PLcom/android/server/devicestate/DeviceStateManagerService;->-$$Nest$mdumpInternal(Lcom/android/server/devicestate/DeviceStateManagerService;Ljava/io/PrintWriter;)V
+HSPLcom/android/server/devicestate/DeviceStateManagerService;->-$$Nest$mgetSupportedStateIdentifiersLocked(Lcom/android/server/devicestate/DeviceStateManagerService;)[I
 HSPLcom/android/server/devicestate/DeviceStateManagerService;->-$$Nest$mregisterProcess(Lcom/android/server/devicestate/DeviceStateManagerService;ILandroid/hardware/devicestate/IDeviceStateManagerCallback;)V
 HSPLcom/android/server/devicestate/DeviceStateManagerService;->-$$Nest$msetBaseState(Lcom/android/server/devicestate/DeviceStateManagerService;I)V
 HSPLcom/android/server/devicestate/DeviceStateManagerService;->-$$Nest$mupdateSupportedStates(Lcom/android/server/devicestate/DeviceStateManagerService;[Lcom/android/server/devicestate/DeviceState;)V
@@ -20623,7 +21635,7 @@
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker$Timer;->isRunning()Z
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker$Timer;->reset()V
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker$Timer;->start()V+]Lcom/android/server/display/AmbientBrightnessStatsTracker$Clock;Lcom/android/server/display/AmbientBrightnessStatsTracker$$ExternalSyntheticLambda0;
-HSPLcom/android/server/display/AmbientBrightnessStatsTracker$Timer;->totalDurationSec()F
+HSPLcom/android/server/display/AmbientBrightnessStatsTracker$Timer;->totalDurationSec()F+]Lcom/android/server/display/AmbientBrightnessStatsTracker$Clock;Lcom/android/server/display/AmbientBrightnessStatsTracker$$ExternalSyntheticLambda0;
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker;->$r8$lambda$PpdGe5Aypn-LWzDAucX-R3O7B_k(Lcom/android/server/display/AmbientBrightnessStatsTracker;)J
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker;->-$$Nest$fgetmInjector(Lcom/android/server/display/AmbientBrightnessStatsTracker;)Lcom/android/server/display/AmbientBrightnessStatsTracker$Injector;
 HSPLcom/android/server/display/AmbientBrightnessStatsTracker;->-$$Nest$fgetmUserManager(Lcom/android/server/display/AmbientBrightnessStatsTracker;)Landroid/os/UserManager;
@@ -20671,7 +21683,7 @@
 PLcom/android/server/display/AutomaticBrightnessController;->-$$Nest$mcollectBrightnessAdjustmentSample(Lcom/android/server/display/AutomaticBrightnessController;)V
 HPLcom/android/server/display/AutomaticBrightnessController;->-$$Nest$mhandleLightSensorEvent(Lcom/android/server/display/AutomaticBrightnessController;JF)V
 PLcom/android/server/display/AutomaticBrightnessController;->-$$Nest$minvalidateShortTermModel(Lcom/android/server/display/AutomaticBrightnessController;)V
-HPLcom/android/server/display/AutomaticBrightnessController;->-$$Nest$mupdateAmbientLux(Lcom/android/server/display/AutomaticBrightnessController;)V
+HPLcom/android/server/display/AutomaticBrightnessController;->-$$Nest$mupdateAmbientLux(Lcom/android/server/display/AutomaticBrightnessController;)V+]Lcom/android/server/display/AutomaticBrightnessController;Lcom/android/server/display/AutomaticBrightnessController;
 PLcom/android/server/display/AutomaticBrightnessController;->-$$Nest$mupdateAutoBrightness(Lcom/android/server/display/AutomaticBrightnessController;ZZ)V
 PLcom/android/server/display/AutomaticBrightnessController;->-$$Nest$mupdateForegroundApp(Lcom/android/server/display/AutomaticBrightnessController;)V
 PLcom/android/server/display/AutomaticBrightnessController;->-$$Nest$mupdateForegroundAppSync(Lcom/android/server/display/AutomaticBrightnessController;)V
@@ -20687,6 +21699,7 @@
 HSPLcom/android/server/display/AutomaticBrightnessController;->configure(ILandroid/hardware/display/BrightnessConfiguration;FZFZI)V
 HSPLcom/android/server/display/AutomaticBrightnessController;->convertToNits(F)F
 PLcom/android/server/display/AutomaticBrightnessController;->dump(Ljava/io/PrintWriter;)V
+PLcom/android/server/display/AutomaticBrightnessController;->getAutomaticScreenBrightness()F
 HPLcom/android/server/display/AutomaticBrightnessController;->getAutomaticScreenBrightness(Lcom/android/server/display/DisplayPowerController$BrightnessEvent;)F
 HPLcom/android/server/display/AutomaticBrightnessController;->getAutomaticScreenBrightnessAdjustment()F
 PLcom/android/server/display/AutomaticBrightnessController;->getDefaultConfig()Landroid/hardware/display/BrightnessConfiguration;
@@ -20704,6 +21717,7 @@
 HPLcom/android/server/display/AutomaticBrightnessController;->registerForegroundAppUpdater()V
 HSPLcom/android/server/display/AutomaticBrightnessController;->resetShortTermModel()V
 HPLcom/android/server/display/AutomaticBrightnessController;->setAmbientLux(F)V
+PLcom/android/server/display/AutomaticBrightnessController;->setAutoBrightnessAdjustment(F)Z
 HSPLcom/android/server/display/AutomaticBrightnessController;->setBrightnessConfiguration(Landroid/hardware/display/BrightnessConfiguration;)Z
 HSPLcom/android/server/display/AutomaticBrightnessController;->setDisplayPolicy(I)Z
 HSPLcom/android/server/display/AutomaticBrightnessController;->setLightSensorEnabled(Z)Z
@@ -20732,7 +21746,7 @@
 HSPLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->convertToNits(F)F
 HPLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->correctBrightness(FLjava/lang/String;I)F
 PLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->dump(Ljava/io/PrintWriter;F)V
-PLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->dumpConfigDiff(Ljava/io/PrintWriter;F)V
+HPLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->dumpConfigDiff(Ljava/io/PrintWriter;F)V
 HPLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->getAutoBrightnessAdjustment()F
 HPLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->getBrightness(FLjava/lang/String;I)F
 PLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->getBrightnessConfiguration()Landroid/hardware/display/BrightnessConfiguration;
@@ -20743,6 +21757,7 @@
 HPLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->isDefaultConfig()Z
 HSPLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->isForIdleMode()Z
 PLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->recalculateSplines(Z[F)V
+PLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->setAutoBrightnessAdjustment(F)Z
 HSPLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->setBrightnessConfiguration(Landroid/hardware/display/BrightnessConfiguration;)Z
 PLcom/android/server/display/BrightnessMappingStrategy$PhysicalMappingStrategy;->toStrFloatForDump(F)Ljava/lang/String;
 PLcom/android/server/display/BrightnessMappingStrategy$SimpleMappingStrategy;-><init>([F[IFJ)V
@@ -20768,7 +21783,7 @@
 PLcom/android/server/display/BrightnessMappingStrategy;->smoothCurve([F[FI)V
 HSPLcom/android/server/display/BrightnessSetting$1;-><init>(Lcom/android/server/display/BrightnessSetting;Landroid/os/Looper;)V
 HPLcom/android/server/display/BrightnessSetting$1;->handleMessage(Landroid/os/Message;)V
-PLcom/android/server/display/BrightnessSetting;->-$$Nest$mnotifyListeners(Lcom/android/server/display/BrightnessSetting;F)V
+HPLcom/android/server/display/BrightnessSetting;->-$$Nest$mnotifyListeners(Lcom/android/server/display/BrightnessSetting;F)V
 HSPLcom/android/server/display/BrightnessSetting;-><init>(Lcom/android/server/display/PersistentDataStore;Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/DisplayManagerService$SyncRoot;)V
 HSPLcom/android/server/display/BrightnessSetting;->getBrightness()F
 HPLcom/android/server/display/BrightnessSetting;->notifyListeners(F)V
@@ -20842,7 +21857,7 @@
 HSPLcom/android/server/display/BrightnessTracker$LightData;-><init>(Lcom/android/server/display/BrightnessTracker$LightData-IA;)V
 HSPLcom/android/server/display/BrightnessTracker$Receiver;-><init>(Lcom/android/server/display/BrightnessTracker;)V
 HSPLcom/android/server/display/BrightnessTracker$Receiver;-><init>(Lcom/android/server/display/BrightnessTracker;Lcom/android/server/display/BrightnessTracker$Receiver-IA;)V
-HPLcom/android/server/display/BrightnessTracker$Receiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/display/BrightnessTracker$Receiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V+]Landroid/os/Handler;Lcom/android/server/display/BrightnessTracker$TrackerHandler;]Landroid/os/Message;Landroid/os/Message;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/display/BrightnessTracker$SensorListener;-><init>(Lcom/android/server/display/BrightnessTracker;)V
 HSPLcom/android/server/display/BrightnessTracker$SensorListener;-><init>(Lcom/android/server/display/BrightnessTracker;Lcom/android/server/display/BrightnessTracker$SensorListener-IA;)V
 HSPLcom/android/server/display/BrightnessTracker$SensorListener;->onAccuracyChanged(Landroid/hardware/Sensor;I)V
@@ -20860,12 +21875,12 @@
 PLcom/android/server/display/BrightnessTracker;->-$$Nest$fgetmInjector(Lcom/android/server/display/BrightnessTracker;)Lcom/android/server/display/BrightnessTracker$Injector;
 HSPLcom/android/server/display/BrightnessTracker;->-$$Nest$fputmBrightnessConfiguration(Lcom/android/server/display/BrightnessTracker;Landroid/hardware/display/BrightnessConfiguration;)V
 HSPLcom/android/server/display/BrightnessTracker;->-$$Nest$mbackgroundStart(Lcom/android/server/display/BrightnessTracker;F)V
-HPLcom/android/server/display/BrightnessTracker;->-$$Nest$mbatteryLevelChanged(Lcom/android/server/display/BrightnessTracker;II)V
+HSPLcom/android/server/display/BrightnessTracker;->-$$Nest$mbatteryLevelChanged(Lcom/android/server/display/BrightnessTracker;II)V
 PLcom/android/server/display/BrightnessTracker;->-$$Nest$mdisableColorSampling(Lcom/android/server/display/BrightnessTracker;)V
 PLcom/android/server/display/BrightnessTracker;->-$$Nest$menableColorSampling(Lcom/android/server/display/BrightnessTracker;)V
 HPLcom/android/server/display/BrightnessTracker;->-$$Nest$mhandleBrightnessChanged(Lcom/android/server/display/BrightnessTracker;FZFZZJLjava/lang/String;)V
 HSPLcom/android/server/display/BrightnessTracker;->-$$Nest$mhandleSensorChanged(Lcom/android/server/display/BrightnessTracker;Landroid/hardware/Sensor;)V
-HSPLcom/android/server/display/BrightnessTracker;->-$$Nest$mrecordAmbientBrightnessStats(Lcom/android/server/display/BrightnessTracker;Landroid/hardware/SensorEvent;)V
+HSPLcom/android/server/display/BrightnessTracker;->-$$Nest$mrecordAmbientBrightnessStats(Lcom/android/server/display/BrightnessTracker;Landroid/hardware/SensorEvent;)V+]Lcom/android/server/display/BrightnessTracker;Lcom/android/server/display/BrightnessTracker;
 HSPLcom/android/server/display/BrightnessTracker;->-$$Nest$mrecordSensorEvent(Lcom/android/server/display/BrightnessTracker;Landroid/hardware/SensorEvent;)V
 PLcom/android/server/display/BrightnessTracker;->-$$Nest$mscheduleWriteBrightnessTrackerState(Lcom/android/server/display/BrightnessTracker;)V
 PLcom/android/server/display/BrightnessTracker;->-$$Nest$mstartSensorListener(Lcom/android/server/display/BrightnessTracker;)V
@@ -20874,7 +21889,7 @@
 HSPLcom/android/server/display/BrightnessTracker;-><clinit>()V
 HSPLcom/android/server/display/BrightnessTracker;-><init>(Landroid/content/Context;Lcom/android/server/display/BrightnessTracker$Injector;)V
 HSPLcom/android/server/display/BrightnessTracker;->backgroundStart(F)V
-HPLcom/android/server/display/BrightnessTracker;->batteryLevelChanged(II)V
+HSPLcom/android/server/display/BrightnessTracker;->batteryLevelChanged(II)V
 PLcom/android/server/display/BrightnessTracker;->disableColorSampling()V
 HPLcom/android/server/display/BrightnessTracker;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/display/BrightnessTracker;->dumpLocal(Ljava/io/PrintWriter;)V
@@ -20894,7 +21909,7 @@
 HSPLcom/android/server/display/BrightnessTracker;->recordAmbientBrightnessStats(Landroid/hardware/SensorEvent;)V+]Lcom/android/server/display/AmbientBrightnessStatsTracker;Lcom/android/server/display/AmbientBrightnessStatsTracker;
 HSPLcom/android/server/display/BrightnessTracker;->recordSensorEvent(Landroid/hardware/SensorEvent;)V+]Ljava/util/Deque;Ljava/util/ArrayDeque;]Lcom/android/server/display/BrightnessTracker$Injector;Lcom/android/server/display/BrightnessTracker$Injector;
 PLcom/android/server/display/BrightnessTracker;->scheduleWriteBrightnessTrackerState()V
-HSPLcom/android/server/display/BrightnessTracker;->setBrightnessConfiguration(Landroid/hardware/display/BrightnessConfiguration;)V
+HSPLcom/android/server/display/BrightnessTracker;->setBrightnessConfiguration(Landroid/hardware/display/BrightnessConfiguration;)V+]Landroid/os/Handler;Lcom/android/server/display/BrightnessTracker$TrackerHandler;]Landroid/os/Message;Landroid/os/Message;
 HSPLcom/android/server/display/BrightnessTracker;->setLightSensor(Landroid/hardware/Sensor;)V
 HSPLcom/android/server/display/BrightnessTracker;->start(F)V
 HSPLcom/android/server/display/BrightnessTracker;->startSensorListener()V
@@ -20911,7 +21926,7 @@
 HPLcom/android/server/display/ColorFade$NaturalSurfaceLayout;->onDisplayTransaction(Landroid/view/SurfaceControl$Transaction;)V
 HSPLcom/android/server/display/ColorFade;-><init>(I)V
 HPLcom/android/server/display/ColorFade;->attachEglContext()Z
-PLcom/android/server/display/ColorFade;->captureScreen()Landroid/view/SurfaceControl$ScreenshotHardwareBuffer;
+HPLcom/android/server/display/ColorFade;->captureScreen()Landroid/view/SurfaceControl$ScreenshotHardwareBuffer;
 HPLcom/android/server/display/ColorFade;->checkGlErrors(Ljava/lang/String;)Z
 HPLcom/android/server/display/ColorFade;->checkGlErrors(Ljava/lang/String;Z)Z
 HPLcom/android/server/display/ColorFade;->createEglContext(Z)Z
@@ -20938,7 +21953,7 @@
 HPLcom/android/server/display/ColorFade;->readFile(Landroid/content/Context;I)Ljava/lang/String;
 HPLcom/android/server/display/ColorFade;->setQuad(Ljava/nio/FloatBuffer;FFFF)V
 HPLcom/android/server/display/ColorFade;->setScreenshotTextureAndSetViewport(Landroid/view/SurfaceControl$ScreenshotHardwareBuffer;)Z
-HPLcom/android/server/display/ColorFade;->showSurface(F)Z
+HPLcom/android/server/display/ColorFade;->showSurface(F)Z+]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;
 HSPLcom/android/server/display/DensityMapping$$ExternalSyntheticLambda0;-><init>()V
 PLcom/android/server/display/DensityMapping$$ExternalSyntheticLambda0;->applyAsInt(Ljava/lang/Object;)I
 HSPLcom/android/server/display/DensityMapping$Entry;-><clinit>()V
@@ -21000,7 +22015,7 @@
 HSPLcom/android/server/display/DisplayDevice;->setDisplayFlagsLocked(Landroid/view/SurfaceControl$Transaction;I)V
 HPLcom/android/server/display/DisplayDevice;->setGameContentTypeLocked(Z)V
 HSPLcom/android/server/display/DisplayDevice;->setLayerStackLocked(Landroid/view/SurfaceControl$Transaction;I)V
-HSPLcom/android/server/display/DisplayDevice;->setProjectionLocked(Landroid/view/SurfaceControl$Transaction;ILandroid/graphics/Rect;Landroid/graphics/Rect;)V
+HSPLcom/android/server/display/DisplayDevice;->setProjectionLocked(Landroid/view/SurfaceControl$Transaction;ILandroid/graphics/Rect;Landroid/graphics/Rect;)V+]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/graphics/Rect;Landroid/graphics/Rect;
 PLcom/android/server/display/DisplayDevice;->setRequestedColorModeLocked(I)V
 PLcom/android/server/display/DisplayDevice;->setSurfaceLocked(Landroid/view/SurfaceControl$Transaction;Landroid/view/Surface;)V
 PLcom/android/server/display/DisplayDevice;->setWindowManagerMirroringLocked(Z)V
@@ -21055,7 +22070,7 @@
 HSPLcom/android/server/display/DisplayDeviceConfig;->getScreenBrighteningMinThreshold()F
 HSPLcom/android/server/display/DisplayDeviceConfig;->getScreenDarkeningMinThreshold()F
 HSPLcom/android/server/display/DisplayDeviceConfig;->hasQuirk(Ljava/lang/String;)Z
-PLcom/android/server/display/DisplayDeviceConfig;->initFromDefaultValues()V
+HPLcom/android/server/display/DisplayDeviceConfig;->initFromDefaultValues()V
 HSPLcom/android/server/display/DisplayDeviceConfig;->initFromFile(Ljava/io/File;)Z
 HSPLcom/android/server/display/DisplayDeviceConfig;->initFromGlobalXml()V
 HSPLcom/android/server/display/DisplayDeviceConfig;->loadAmbientHorizonFromDdc(Lcom/android/server/display/config/DisplayConfiguration;)V
@@ -21086,25 +22101,25 @@
 HSPLcom/android/server/display/DisplayDeviceInfo;->diff(Lcom/android/server/display/DisplayDeviceInfo;)I
 HSPLcom/android/server/display/DisplayDeviceInfo;->equals(Lcom/android/server/display/DisplayDeviceInfo;)Z
 HSPLcom/android/server/display/DisplayDeviceInfo;->equals(Ljava/lang/Object;)Z
-HSPLcom/android/server/display/DisplayDeviceInfo;->flagsToString(I)Ljava/lang/String;
+HSPLcom/android/server/display/DisplayDeviceInfo;->flagsToString(I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/display/DisplayDeviceInfo;->hashCode()I
 HPLcom/android/server/display/DisplayDeviceInfo;->setAssumedDensityForExternalDisplay(II)V
-HSPLcom/android/server/display/DisplayDeviceInfo;->toString()Ljava/lang/String;
+HSPLcom/android/server/display/DisplayDeviceInfo;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/display/DisplayDeviceInfo;->touchToString(I)Ljava/lang/String;
 HSPLcom/android/server/display/DisplayDeviceRepository$Listener;->onDisplayDeviceEventLocked(Lcom/android/server/display/DisplayDevice;I)V
 HSPLcom/android/server/display/DisplayDeviceRepository;-><clinit>()V
 HSPLcom/android/server/display/DisplayDeviceRepository;-><init>(Lcom/android/server/display/DisplayManagerService$SyncRoot;Lcom/android/server/display/PersistentDataStore;)V
 HSPLcom/android/server/display/DisplayDeviceRepository;->addListener(Lcom/android/server/display/DisplayDeviceRepository$Listener;)V
 HSPLcom/android/server/display/DisplayDeviceRepository;->containsLocked(Lcom/android/server/display/DisplayDevice;)Z
-PLcom/android/server/display/DisplayDeviceRepository;->forEachLocked(Ljava/util/function/Consumer;)V
+HSPLcom/android/server/display/DisplayDeviceRepository;->forEachLocked(Ljava/util/function/Consumer;)V
 HSPLcom/android/server/display/DisplayDeviceRepository;->getByAddressLocked(Landroid/view/DisplayAddress;)Lcom/android/server/display/DisplayDevice;
 HSPLcom/android/server/display/DisplayDeviceRepository;->getByUniqueIdLocked(Ljava/lang/String;)Lcom/android/server/display/DisplayDevice;
 HSPLcom/android/server/display/DisplayDeviceRepository;->handleDisplayDeviceAdded(Lcom/android/server/display/DisplayDevice;)V
 HSPLcom/android/server/display/DisplayDeviceRepository;->handleDisplayDeviceChanged(Lcom/android/server/display/DisplayDevice;)V
-PLcom/android/server/display/DisplayDeviceRepository;->handleDisplayDeviceRemoved(Lcom/android/server/display/DisplayDevice;)V
+HPLcom/android/server/display/DisplayDeviceRepository;->handleDisplayDeviceRemoved(Lcom/android/server/display/DisplayDevice;)V
 HSPLcom/android/server/display/DisplayDeviceRepository;->onDisplayDeviceEvent(Lcom/android/server/display/DisplayDevice;I)V
 HSPLcom/android/server/display/DisplayDeviceRepository;->onTraversalRequested()V
-HSPLcom/android/server/display/DisplayDeviceRepository;->sendEventLocked(Lcom/android/server/display/DisplayDevice;I)V
+HSPLcom/android/server/display/DisplayDeviceRepository;->sendEventLocked(Lcom/android/server/display/DisplayDevice;I)V+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/display/DisplayDeviceRepository$Listener;Lcom/android/server/display/LogicalDisplayMapper;
 HPLcom/android/server/display/DisplayDeviceRepository;->sizeLocked()I
 HSPLcom/android/server/display/DisplayGroup;-><init>(I)V
 HSPLcom/android/server/display/DisplayGroup;->addDisplayLocked(Lcom/android/server/display/LogicalDisplay;)V
@@ -21152,8 +22167,8 @@
 PLcom/android/server/display/DisplayManagerService$BinderService;->getBrightnessEvents(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/display/DisplayManagerService$BinderService;->getBrightnessInfo(I)Landroid/hardware/display/BrightnessInfo;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/display/DisplayPowerController;Lcom/android/server/display/DisplayPowerController;
 HPLcom/android/server/display/DisplayManagerService$BinderService;->getDefaultBrightnessConfiguration()Landroid/hardware/display/BrightnessConfiguration;
-PLcom/android/server/display/DisplayManagerService$BinderService;->getDisplayDecorationSupport(I)Landroid/hardware/graphics/common/DisplayDecorationSupport;
-HSPLcom/android/server/display/DisplayManagerService$BinderService;->getDisplayIds()[I+]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;
+HSPLcom/android/server/display/DisplayManagerService$BinderService;->getDisplayDecorationSupport(I)Landroid/hardware/graphics/common/DisplayDecorationSupport;
+HSPLcom/android/server/display/DisplayManagerService$BinderService;->getDisplayIds(Z)[I+]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;
 HSPLcom/android/server/display/DisplayManagerService$BinderService;->getDisplayInfo(I)Landroid/view/DisplayInfo;
 HPLcom/android/server/display/DisplayManagerService$BinderService;->getMinimumBrightnessCurve()Landroid/hardware/display/Curve;
 HSPLcom/android/server/display/DisplayManagerService$BinderService;->getPreferredWideGamutColorSpaceId()I+]Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayManagerService;
@@ -21165,9 +22180,10 @@
 HSPLcom/android/server/display/DisplayManagerService$BinderService;->isMinimalPostProcessingRequested(I)Z
 HPLcom/android/server/display/DisplayManagerService$BinderService;->isUidPresentOnDisplay(II)Z
 PLcom/android/server/display/DisplayManagerService$BinderService;->lambda$setBrightnessConfigurationForUser$0(Landroid/hardware/display/BrightnessConfiguration;ILjava/lang/String;Lcom/android/server/display/LogicalDisplay;)V
+PLcom/android/server/display/DisplayManagerService$BinderService;->onShellCommand(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;Landroid/os/ShellCallback;Landroid/os/ResultReceiver;)V
 PLcom/android/server/display/DisplayManagerService$BinderService;->pauseWifiDisplay()V
 HSPLcom/android/server/display/DisplayManagerService$BinderService;->registerCallbackWithEventMask(Landroid/hardware/display/IDisplayManagerCallback;J)V
-PLcom/android/server/display/DisplayManagerService$BinderService;->releaseVirtualDisplay(Landroid/hardware/display/IVirtualDisplayCallback;)V
+HPLcom/android/server/display/DisplayManagerService$BinderService;->releaseVirtualDisplay(Landroid/hardware/display/IVirtualDisplayCallback;)V
 PLcom/android/server/display/DisplayManagerService$BinderService;->requestColorMode(II)V
 PLcom/android/server/display/DisplayManagerService$BinderService;->resizeVirtualDisplay(Landroid/hardware/display/IVirtualDisplayCallback;III)V
 PLcom/android/server/display/DisplayManagerService$BinderService;->resumeWifiDisplay()V
@@ -21177,8 +22193,8 @@
 PLcom/android/server/display/DisplayManagerService$BinderService;->setTemporaryBrightness(IF)V
 PLcom/android/server/display/DisplayManagerService$BinderService;->setUserDisabledHdrTypes([I)V
 PLcom/android/server/display/DisplayManagerService$BinderService;->setUserPreferredDisplayMode(ILandroid/view/Display$Mode;)V
-PLcom/android/server/display/DisplayManagerService$BinderService;->setVirtualDisplayState(Landroid/hardware/display/IVirtualDisplayCallback;Z)V
-PLcom/android/server/display/DisplayManagerService$BinderService;->setVirtualDisplaySurface(Landroid/hardware/display/IVirtualDisplayCallback;Landroid/view/Surface;)V
+HPLcom/android/server/display/DisplayManagerService$BinderService;->setVirtualDisplayState(Landroid/hardware/display/IVirtualDisplayCallback;Z)V
+HPLcom/android/server/display/DisplayManagerService$BinderService;->setVirtualDisplaySurface(Landroid/hardware/display/IVirtualDisplayCallback;Landroid/view/Surface;)V
 PLcom/android/server/display/DisplayManagerService$BinderService;->startWifiDisplayScan()V
 PLcom/android/server/display/DisplayManagerService$BinderService;->stopWifiDisplayScan()V
 HSPLcom/android/server/display/DisplayManagerService$BrightnessPair;-><init>(Lcom/android/server/display/DisplayManagerService;FF)V
@@ -21214,19 +22230,20 @@
 HSPLcom/android/server/display/DisplayManagerService$LocalService;->getDisplayedContentSample(IJJ)Landroid/hardware/display/DisplayedContentSample;
 PLcom/android/server/display/DisplayManagerService$LocalService;->getDisplayedContentSamplingAttributes(I)Landroid/hardware/display/DisplayedContentSamplingAttributes;
 HSPLcom/android/server/display/DisplayManagerService$LocalService;->getNonOverrideDisplayInfo(ILandroid/view/DisplayInfo;)V
+HSPLcom/android/server/display/DisplayManagerService$LocalService;->getPossibleDisplayInfo(I)Ljava/util/Set;
 HPLcom/android/server/display/DisplayManagerService$LocalService;->getRefreshRateForDisplayAndSensor(ILjava/lang/String;Ljava/lang/String;)Landroid/hardware/display/DisplayManagerInternal$RefreshRateRange;
 PLcom/android/server/display/DisplayManagerService$LocalService;->getRefreshRateLimitations(I)Ljava/util/List;
 HSPLcom/android/server/display/DisplayManagerService$LocalService;->getRefreshRateSwitchingType()I+]Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayManagerService;
 PLcom/android/server/display/DisplayManagerService$LocalService;->ignoreProximitySensorUntilChanged()V
 HSPLcom/android/server/display/DisplayManagerService$LocalService;->initPowerManagement(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerCallbacks;Landroid/os/Handler;Landroid/hardware/SensorManager;)V
-HPLcom/android/server/display/DisplayManagerService$LocalService;->isProximitySensorAvailable()Z
+HSPLcom/android/server/display/DisplayManagerService$LocalService;->isProximitySensorAvailable()Z
 HPLcom/android/server/display/DisplayManagerService$LocalService;->onEarlyInteractivityChange(Z)V
-HPLcom/android/server/display/DisplayManagerService$LocalService;->onOverlayChanged()V
+HSPLcom/android/server/display/DisplayManagerService$LocalService;->onOverlayChanged()V
 HSPLcom/android/server/display/DisplayManagerService$LocalService;->performTraversal(Landroid/view/SurfaceControl$Transaction;)V+]Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayManagerService;
 PLcom/android/server/display/DisplayManagerService$LocalService;->persistBrightnessTrackerState()V
 HSPLcom/android/server/display/DisplayManagerService$LocalService;->registerDisplayGroupListener(Landroid/hardware/display/DisplayManagerInternal$DisplayGroupListener;)V
 PLcom/android/server/display/DisplayManagerService$LocalService;->registerDisplayTransactionListener(Landroid/hardware/display/DisplayManagerInternal$DisplayTransactionListener;)V
-HSPLcom/android/server/display/DisplayManagerService$LocalService;->requestPowerState(ILandroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;Z)Z+]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Lcom/android/server/display/DisplayDevice;Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;,Lcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;]Lcom/android/server/display/DisplayGroup;Lcom/android/server/display/DisplayGroup;]Lcom/android/server/display/DisplayPowerController;Lcom/android/server/display/DisplayPowerController;
+HSPLcom/android/server/display/DisplayManagerService$LocalService;->requestPowerState(ILandroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;Z)Z+]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Lcom/android/server/display/DisplayDevice;Lcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;,Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;]Lcom/android/server/display/DisplayGroup;Lcom/android/server/display/DisplayGroup;]Lcom/android/server/display/DisplayPowerController;Lcom/android/server/display/DisplayPowerController;
 HSPLcom/android/server/display/DisplayManagerService$LocalService;->setDisplayAccessUIDs(Landroid/util/SparseArray;)V
 HSPLcom/android/server/display/DisplayManagerService$LocalService;->setDisplayInfoOverrideFromWindowManager(ILandroid/view/DisplayInfo;)V
 PLcom/android/server/display/DisplayManagerService$LocalService;->setDisplayOffsets(III)V
@@ -21237,6 +22254,7 @@
 PLcom/android/server/display/DisplayManagerService$LocalService;->systemScreenshot(I)Landroid/view/SurfaceControl$ScreenshotHardwareBuffer;
 HPLcom/android/server/display/DisplayManagerService$LocalService;->unregisterDisplayGroupListener(Landroid/hardware/display/DisplayManagerInternal$DisplayGroupListener;)V
 PLcom/android/server/display/DisplayManagerService$LocalService;->unregisterDisplayTransactionListener(Landroid/hardware/display/DisplayManagerInternal$DisplayTransactionListener;)V
+PLcom/android/server/display/DisplayManagerService$LocalService;->userScreenshot(I)Landroid/view/SurfaceControl$ScreenshotHardwareBuffer;
 HSPLcom/android/server/display/DisplayManagerService$LogicalDisplayListener;-><init>(Lcom/android/server/display/DisplayManagerService;)V
 HSPLcom/android/server/display/DisplayManagerService$LogicalDisplayListener;-><init>(Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayManagerService$LogicalDisplayListener-IA;)V
 HSPLcom/android/server/display/DisplayManagerService$LogicalDisplayListener;->onDisplayGroupEventLocked(II)V
@@ -21257,8 +22275,8 @@
 HSPLcom/android/server/display/DisplayManagerService;->$r8$lambda$blkD86Pa3eTp0bxU70Yrbd3ywUQ(Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/LogicalDisplay;)V
 PLcom/android/server/display/DisplayManagerService;->-$$Nest$fgetmAreUserDisabledHdrTypesAllowed(Lcom/android/server/display/DisplayManagerService;)Z
 HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$fgetmContext(Lcom/android/server/display/DisplayManagerService;)Landroid/content/Context;
-PLcom/android/server/display/DisplayManagerService;->-$$Nest$fgetmDeviceStateManager(Lcom/android/server/display/DisplayManagerService;)Landroid/hardware/devicestate/DeviceStateManagerInternal;
-PLcom/android/server/display/DisplayManagerService;->-$$Nest$fgetmDisplayDeviceRepo(Lcom/android/server/display/DisplayManagerService;)Lcom/android/server/display/DisplayDeviceRepository;
+HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$fgetmDeviceStateManager(Lcom/android/server/display/DisplayManagerService;)Landroid/hardware/devicestate/DeviceStateManagerInternal;
+HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$fgetmDisplayDeviceRepo(Lcom/android/server/display/DisplayManagerService;)Lcom/android/server/display/DisplayDeviceRepository;
 HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$fgetmDisplayGroupListeners(Lcom/android/server/display/DisplayManagerService;)Ljava/util/concurrent/CopyOnWriteArrayList;
 HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$fgetmDisplayModeDirector(Lcom/android/server/display/DisplayManagerService;)Lcom/android/server/display/DisplayModeDirector;
 HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$fgetmDisplayPowerCallbacks(Lcom/android/server/display/DisplayManagerService;)Landroid/hardware/display/DisplayManagerInternal$DisplayPowerCallbacks;
@@ -21269,7 +22287,7 @@
 PLcom/android/server/display/DisplayManagerService;->-$$Nest$fgetmIsDocked(Lcom/android/server/display/DisplayManagerService;)Z
 HPLcom/android/server/display/DisplayManagerService;->-$$Nest$fgetmIsDreaming(Lcom/android/server/display/DisplayManagerService;)Z
 HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$fgetmLogicalDisplayMapper(Lcom/android/server/display/DisplayManagerService;)Lcom/android/server/display/LogicalDisplayMapper;
-PLcom/android/server/display/DisplayManagerService;->-$$Nest$fgetmPersistentDataStore(Lcom/android/server/display/DisplayManagerService;)Lcom/android/server/display/PersistentDataStore;
+HPLcom/android/server/display/DisplayManagerService;->-$$Nest$fgetmPersistentDataStore(Lcom/android/server/display/DisplayManagerService;)Lcom/android/server/display/PersistentDataStore;
 HPLcom/android/server/display/DisplayManagerService;->-$$Nest$fgetmSensorManager(Lcom/android/server/display/DisplayManagerService;)Landroid/hardware/SensorManager;
 HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$fgetmSyncRoot(Lcom/android/server/display/DisplayManagerService;)Lcom/android/server/display/DisplayManagerService$SyncRoot;
 HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$fgetmTempViewports(Lcom/android/server/display/DisplayManagerService;)Ljava/util/ArrayList;
@@ -21289,7 +22307,7 @@
 PLcom/android/server/display/DisplayManagerService;->-$$Nest$mdumpInternal(Lcom/android/server/display/DisplayManagerService;Ljava/io/PrintWriter;)V
 HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$mgetBrightnessConfigForDisplayWithPdsFallbackLocked(Lcom/android/server/display/DisplayManagerService;Ljava/lang/String;I)Landroid/hardware/display/BrightnessConfiguration;
 HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$mgetDeviceForDisplayLocked(Lcom/android/server/display/DisplayManagerService;I)Lcom/android/server/display/DisplayDevice;
-PLcom/android/server/display/DisplayManagerService;->-$$Nest$mgetDisplayDecorationSupportInternal(Lcom/android/server/display/DisplayManagerService;I)Landroid/hardware/graphics/common/DisplayDecorationSupport;
+HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$mgetDisplayDecorationSupportInternal(Lcom/android/server/display/DisplayManagerService;I)Landroid/hardware/graphics/common/DisplayDecorationSupport;
 HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$mgetDisplayInfoInternal(Lcom/android/server/display/DisplayManagerService;II)Landroid/view/DisplayInfo;+]Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayManagerService;
 HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$mgetNonOverrideDisplayInfoInternal(Lcom/android/server/display/DisplayManagerService;ILandroid/view/DisplayInfo;)V
 HSPLcom/android/server/display/DisplayManagerService;->-$$Nest$mgetStableDisplaySizeInternal(Lcom/android/server/display/DisplayManagerService;)Landroid/graphics/Point;
@@ -21329,7 +22347,8 @@
 PLcom/android/server/display/DisplayManagerService;->-$$Nest$mstopWifiDisplayScanInternal(Lcom/android/server/display/DisplayManagerService;I)V
 PLcom/android/server/display/DisplayManagerService;->-$$Nest$msystemScreenshotInternal(Lcom/android/server/display/DisplayManagerService;I)Landroid/view/SurfaceControl$ScreenshotHardwareBuffer;
 PLcom/android/server/display/DisplayManagerService;->-$$Nest$munregisterDisplayTransactionListenerInternal(Lcom/android/server/display/DisplayManagerService;Landroid/hardware/display/DisplayManagerInternal$DisplayTransactionListener;)V
-PLcom/android/server/display/DisplayManagerService;->-$$Nest$smisValidBrightness(F)Z
+PLcom/android/server/display/DisplayManagerService;->-$$Nest$muserScreenshotInternal(Lcom/android/server/display/DisplayManagerService;I)Landroid/view/SurfaceControl$ScreenshotHardwareBuffer;
+HPLcom/android/server/display/DisplayManagerService;->-$$Nest$smisValidBrightness(F)Z
 HSPLcom/android/server/display/DisplayManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/display/DisplayManagerService;-><init>(Landroid/content/Context;Lcom/android/server/display/DisplayManagerService$Injector;)V
 HSPLcom/android/server/display/DisplayManagerService;->addDisplayPowerControllerLocked(Lcom/android/server/display/LogicalDisplay;)V
@@ -21340,21 +22359,21 @@
 HSPLcom/android/server/display/DisplayManagerService;->clearUserDisabledHdrTypesLocked()V
 HSPLcom/android/server/display/DisplayManagerService;->clearViewportsLocked()V
 HSPLcom/android/server/display/DisplayManagerService;->configureColorModeLocked(Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/DisplayDevice;)V
-HSPLcom/android/server/display/DisplayManagerService;->configureDisplayLocked(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/display/DisplayDevice;)V
+HSPLcom/android/server/display/DisplayManagerService;->configureDisplayLocked(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/display/DisplayDevice;)V+]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/display/DisplayDevice;Lcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;,Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;]Ljava/util/Optional;Ljava/util/Optional;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;]Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayManagerService;
 HSPLcom/android/server/display/DisplayManagerService;->configurePreferredDisplayModeLocked(Lcom/android/server/display/LogicalDisplay;)V
-PLcom/android/server/display/DisplayManagerService;->createVirtualDisplayInternal(Landroid/hardware/display/VirtualDisplayConfig;Landroid/hardware/display/IVirtualDisplayCallback;Landroid/media/projection/IMediaProjection;Landroid/companion/virtual/IVirtualDevice;Landroid/window/DisplayWindowPolicyController;Ljava/lang/String;)I
-PLcom/android/server/display/DisplayManagerService;->createVirtualDisplayLocked(Landroid/hardware/display/IVirtualDisplayCallback;Landroid/media/projection/IMediaProjection;ILjava/lang/String;Landroid/view/Surface;ILandroid/hardware/display/VirtualDisplayConfig;)I
-HSPLcom/android/server/display/DisplayManagerService;->deliverDisplayEvent(ILandroid/util/ArraySet;I)V+]Lcom/android/server/display/DisplayManagerService$CallbackRecord;Lcom/android/server/display/DisplayManagerService$CallbackRecord;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HPLcom/android/server/display/DisplayManagerService;->createVirtualDisplayInternal(Landroid/hardware/display/VirtualDisplayConfig;Landroid/hardware/display/IVirtualDisplayCallback;Landroid/media/projection/IMediaProjection;Landroid/companion/virtual/IVirtualDevice;Landroid/window/DisplayWindowPolicyController;Ljava/lang/String;)I
+HPLcom/android/server/display/DisplayManagerService;->createVirtualDisplayLocked(Landroid/hardware/display/IVirtualDisplayCallback;Landroid/media/projection/IMediaProjection;ILjava/lang/String;Landroid/view/Surface;ILandroid/hardware/display/VirtualDisplayConfig;)I
+HSPLcom/android/server/display/DisplayManagerService;->deliverDisplayEvent(ILandroid/util/ArraySet;I)V+]Lcom/android/server/display/DisplayManagerService$CallbackRecord;Lcom/android/server/display/DisplayManagerService$CallbackRecord;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/display/DisplayManagerService;->deliverDisplayGroupEvent(II)V
 PLcom/android/server/display/DisplayManagerService;->dumpInternal(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/display/DisplayManagerService;->getActiveDisplayModeAtStart(I)Landroid/view/Display$Mode;
 HSPLcom/android/server/display/DisplayManagerService;->getBrightnessConfigForDisplayWithPdsFallbackLocked(Ljava/lang/String;I)Landroid/hardware/display/BrightnessConfiguration;
 PLcom/android/server/display/DisplayManagerService;->getDeviceForDisplayLocked(I)Lcom/android/server/display/DisplayDevice;
-PLcom/android/server/display/DisplayManagerService;->getDisplayDecorationSupportInternal(I)Landroid/hardware/graphics/common/DisplayDecorationSupport;
+HSPLcom/android/server/display/DisplayManagerService;->getDisplayDecorationSupportInternal(I)Landroid/hardware/graphics/common/DisplayDecorationSupport;
 PLcom/android/server/display/DisplayManagerService;->getDisplayHandler()Landroid/os/Handler;
 HSPLcom/android/server/display/DisplayManagerService;->getDisplayInfoForFrameRateOverride([Landroid/view/DisplayEventReceiver$FrameRateOverride;Landroid/view/DisplayInfo;I)Landroid/view/DisplayInfo;+]Landroid/view/Display$Mode;Landroid/view/Display$Mode;]Landroid/view/DisplayInfo;Landroid/view/DisplayInfo;
 HSPLcom/android/server/display/DisplayManagerService;->getDisplayInfoInternal(II)Landroid/view/DisplayInfo;+]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;]Landroid/view/DisplayInfo;Landroid/view/DisplayInfo;]Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayManagerService;
-HPLcom/android/server/display/DisplayManagerService;->getDisplayToken(I)Landroid/os/IBinder;
+HSPLcom/android/server/display/DisplayManagerService;->getDisplayToken(I)Landroid/os/IBinder;
 HSPLcom/android/server/display/DisplayManagerService;->getDpcFromUniqueIdLocked(Ljava/lang/String;)Lcom/android/server/display/DisplayPowerController;
 HSPLcom/android/server/display/DisplayManagerService;->getFloatArray(Landroid/content/res/TypedArray;)[F
 PLcom/android/server/display/DisplayManagerService;->getMinimumBrightnessCurveInternal()Landroid/hardware/display/Curve;
@@ -21365,7 +22384,7 @@
 HSPLcom/android/server/display/DisplayManagerService;->getStableDisplaySizeInternal()Landroid/graphics/Point;
 PLcom/android/server/display/DisplayManagerService;->getSystemPreferredDisplayModeInternal(I)Landroid/view/Display$Mode;
 HSPLcom/android/server/display/DisplayManagerService;->getUserManager()Landroid/os/UserManager;
-HSPLcom/android/server/display/DisplayManagerService;->getViewportLocked(ILjava/lang/String;)Landroid/hardware/display/DisplayViewport;
+HSPLcom/android/server/display/DisplayManagerService;->getViewportLocked(ILjava/lang/String;)Landroid/hardware/display/DisplayViewport;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/display/DisplayManagerService;->getViewportType(Lcom/android/server/display/DisplayDeviceInfo;)Ljava/util/Optional;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/display/DisplayManagerService;->getWifiDisplayStatusInternal()Landroid/hardware/display/WifiDisplayStatus;
 HSPLcom/android/server/display/DisplayManagerService;->handleBrightnessChange(Lcom/android/server/display/LogicalDisplay;)V
@@ -21373,7 +22392,7 @@
 HSPLcom/android/server/display/DisplayManagerService;->handleLogicalDisplayChangedLocked(Lcom/android/server/display/LogicalDisplay;)V
 PLcom/android/server/display/DisplayManagerService;->handleLogicalDisplayDeviceStateTransitionLocked(Lcom/android/server/display/LogicalDisplay;)V
 HPLcom/android/server/display/DisplayManagerService;->handleLogicalDisplayFrameRateOverridesChangedLocked(Lcom/android/server/display/LogicalDisplay;)V
-PLcom/android/server/display/DisplayManagerService;->handleLogicalDisplayRemovedLocked(Lcom/android/server/display/LogicalDisplay;)V
+HPLcom/android/server/display/DisplayManagerService;->handleLogicalDisplayRemovedLocked(Lcom/android/server/display/LogicalDisplay;)V
 HSPLcom/android/server/display/DisplayManagerService;->handleLogicalDisplaySwappedLocked(Lcom/android/server/display/LogicalDisplay;)V
 HPLcom/android/server/display/DisplayManagerService;->handleSettingsChange()V
 HSPLcom/android/server/display/DisplayManagerService;->initializeDisplayPowerControllersLocked()V
@@ -21423,7 +22442,7 @@
 HSPLcom/android/server/display/DisplayManagerService;->setBrightnessConfigurationForDisplayInternal(Landroid/hardware/display/BrightnessConfiguration;Ljava/lang/String;ILjava/lang/String;)V
 HSPLcom/android/server/display/DisplayManagerService;->setDisplayAccessUIDsInternal(Landroid/util/SparseArray;)V
 HSPLcom/android/server/display/DisplayManagerService;->setDisplayInfoOverrideFromWindowManagerInternal(ILandroid/view/DisplayInfo;)V
-HSPLcom/android/server/display/DisplayManagerService;->setDisplayPropertiesInternal(IZFIFFZZ)V+]Lcom/android/server/display/DisplayModeDirector;Lcom/android/server/display/DisplayModeDirector;]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Lcom/android/server/display/DisplayModeDirector$AppRequestObserver;Lcom/android/server/display/DisplayModeDirector$AppRequestObserver;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;]Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayManagerService;
+HSPLcom/android/server/display/DisplayManagerService;->setDisplayPropertiesInternal(IZFIFFZZ)V+]Lcom/android/server/display/DisplayModeDirector;Lcom/android/server/display/DisplayModeDirector;]Lcom/android/server/display/DisplayModeDirector$AppRequestObserver;Lcom/android/server/display/DisplayModeDirector$AppRequestObserver;]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;]Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayManagerService;
 PLcom/android/server/display/DisplayManagerService;->setDisplayScalingDisabledInternal(IZ)V
 PLcom/android/server/display/DisplayManagerService;->setDisplayWhiteBalanceLoggingEnabled(Z)V
 PLcom/android/server/display/DisplayManagerService;->setDisplayedContentSamplingEnabledInternal(IZII)Z
@@ -21431,7 +22450,7 @@
 HPLcom/android/server/display/DisplayManagerService;->setShouldAlwaysRespectAppRequestedModeInternal(Z)V
 PLcom/android/server/display/DisplayManagerService;->setUserPreferredDisplayModeInternal(ILandroid/view/Display$Mode;)V
 PLcom/android/server/display/DisplayManagerService;->setUserPreferredModeForDisplayLocked(ILandroid/view/Display$Mode;)V
-PLcom/android/server/display/DisplayManagerService;->setVirtualDisplayStateInternal(Landroid/os/IBinder;Z)V
+HPLcom/android/server/display/DisplayManagerService;->setVirtualDisplayStateInternal(Landroid/os/IBinder;Z)V
 PLcom/android/server/display/DisplayManagerService;->setVirtualDisplaySurfaceInternal(Landroid/os/IBinder;Landroid/view/Surface;)V
 HSPLcom/android/server/display/DisplayManagerService;->setupSchedulerPolicies()V
 HSPLcom/android/server/display/DisplayManagerService;->shouldRegisterNonEssentialDisplayAdaptersLocked()Z
@@ -21447,15 +22466,17 @@
 HSPLcom/android/server/display/DisplayManagerService;->updateSettingsLocked()V
 HSPLcom/android/server/display/DisplayManagerService;->updateUserDisabledHdrTypesFromSettingsLocked()V
 HSPLcom/android/server/display/DisplayManagerService;->updateUserPreferredDisplayModeSettingsLocked()V
-HSPLcom/android/server/display/DisplayManagerService;->updateViewportPowerStateLocked(Lcom/android/server/display/LogicalDisplay;)V
+HSPLcom/android/server/display/DisplayManagerService;->updateViewportPowerStateLocked(Lcom/android/server/display/LogicalDisplay;)V+]Landroid/os/Handler;Lcom/android/server/display/DisplayManagerService$DisplayManagerHandler;]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/display/DisplayDevice;Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;]Ljava/util/Optional;Ljava/util/Optional;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/server/display/DisplayManagerService;Lcom/android/server/display/DisplayManagerService;
 PLcom/android/server/display/DisplayManagerService;->userScreenshotInternal(I)Landroid/view/SurfaceControl$ScreenshotHardwareBuffer;
 HSPLcom/android/server/display/DisplayManagerService;->validateBrightnessConfiguration(Landroid/hardware/display/BrightnessConfiguration;)V
-PLcom/android/server/display/DisplayManagerService;->validatePackageName(ILjava/lang/String;)Z
+HPLcom/android/server/display/DisplayManagerService;->validatePackageName(ILjava/lang/String;)Z
 HSPLcom/android/server/display/DisplayManagerService;->windowManagerAndInputReady()V
 PLcom/android/server/display/DisplayManagerShellCommand;-><init>(Lcom/android/server/display/DisplayManagerService;)V
 HPLcom/android/server/display/DisplayManagerShellCommand;->clearUserPreferredDisplayMode()I
 PLcom/android/server/display/DisplayManagerShellCommand;->getMatchContentFrameRateUserPreference()I
 PLcom/android/server/display/DisplayManagerShellCommand;->getUserPreferredDisplayMode()I
+PLcom/android/server/display/DisplayManagerShellCommand;->onCommand(Ljava/lang/String;)I
+PLcom/android/server/display/DisplayManagerShellCommand;->setDockedAndIdle()I
 HSPLcom/android/server/display/DisplayModeDirector$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/display/DisplayModeDirector;)V
 HSPLcom/android/server/display/DisplayModeDirector$$ExternalSyntheticLambda0;->vote(IILcom/android/server/display/DisplayModeDirector$Vote;)V
 HSPLcom/android/server/display/DisplayModeDirector$AppRequestObserver;-><init>(Lcom/android/server/display/DisplayModeDirector;)V
@@ -21535,12 +22556,12 @@
 PLcom/android/server/display/DisplayModeDirector$DeviceConfigDisplaySettings;->parseIntArray(Ljava/lang/String;)[I
 HSPLcom/android/server/display/DisplayModeDirector$DeviceConfigDisplaySettings;->startListening()V
 HSPLcom/android/server/display/DisplayModeDirector$DisplayModeDirectorHandler;-><init>(Lcom/android/server/display/DisplayModeDirector;Landroid/os/Looper;)V
-HSPLcom/android/server/display/DisplayModeDirector$DisplayModeDirectorHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/display/DisplayModeDirector$DesiredDisplayModeSpecsListener;Lcom/android/server/display/DisplayManagerService$DesiredDisplayModeSpecsObserver;]Lcom/android/server/display/DisplayModeDirector$SettingsObserver;Lcom/android/server/display/DisplayModeDirector$SettingsObserver;]Lcom/android/server/display/DisplayModeDirector$BrightnessObserver;Lcom/android/server/display/DisplayModeDirector$BrightnessObserver;]Lcom/android/server/display/DisplayModeDirector$HbmObserver;Lcom/android/server/display/DisplayModeDirector$HbmObserver;
+HSPLcom/android/server/display/DisplayModeDirector$DisplayModeDirectorHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/display/DisplayModeDirector$SettingsObserver;Lcom/android/server/display/DisplayModeDirector$SettingsObserver;]Lcom/android/server/display/DisplayModeDirector$BrightnessObserver;Lcom/android/server/display/DisplayModeDirector$BrightnessObserver;]Lcom/android/server/display/DisplayModeDirector$HbmObserver;Lcom/android/server/display/DisplayModeDirector$HbmObserver;]Lcom/android/server/display/DisplayModeDirector$DesiredDisplayModeSpecsListener;Lcom/android/server/display/DisplayManagerService$DesiredDisplayModeSpecsObserver;
 HSPLcom/android/server/display/DisplayModeDirector$DisplayObserver;-><init>(Lcom/android/server/display/DisplayModeDirector;Landroid/content/Context;Landroid/os/Handler;)V
 HSPLcom/android/server/display/DisplayModeDirector$DisplayObserver;->observe()V
 PLcom/android/server/display/DisplayModeDirector$DisplayObserver;->onDisplayAdded(I)V
 HSPLcom/android/server/display/DisplayModeDirector$DisplayObserver;->onDisplayChanged(I)V
-PLcom/android/server/display/DisplayModeDirector$DisplayObserver;->onDisplayRemoved(I)V
+HPLcom/android/server/display/DisplayModeDirector$DisplayObserver;->onDisplayRemoved(I)V
 HSPLcom/android/server/display/DisplayModeDirector$DisplayObserver;->updateDisplayModes(I)V
 HSPLcom/android/server/display/DisplayModeDirector$HbmObserver;-><init>(Lcom/android/server/display/DisplayModeDirector$Injector;Lcom/android/server/display/DisplayModeDirector$BallotBox;Landroid/os/Handler;Lcom/android/server/display/DisplayModeDirector$DeviceConfigDisplaySettings;)V
 HSPLcom/android/server/display/DisplayModeDirector$HbmObserver;->dumpLocked(Ljava/io/PrintWriter;)V
@@ -21556,7 +22577,7 @@
 PLcom/android/server/display/DisplayModeDirector$Injector;->getDeviceConfig()Landroid/provider/DeviceConfigInterface;
 PLcom/android/server/display/DisplayModeDirector$Injector;->isDozeState(Landroid/view/Display;)Z
 HSPLcom/android/server/display/DisplayModeDirector$RealInjector;-><init>(Landroid/content/Context;)V
-HSPLcom/android/server/display/DisplayModeDirector$RealInjector;->getBrightnessInfo(I)Landroid/hardware/display/BrightnessInfo;
+HSPLcom/android/server/display/DisplayModeDirector$RealInjector;->getBrightnessInfo(I)Landroid/hardware/display/BrightnessInfo;+]Landroid/hardware/display/DisplayManager;Landroid/hardware/display/DisplayManager;]Lcom/android/server/display/DisplayModeDirector$RealInjector;Lcom/android/server/display/DisplayModeDirector$RealInjector;]Landroid/view/Display;Landroid/view/Display;
 HSPLcom/android/server/display/DisplayModeDirector$RealInjector;->getDeviceConfig()Landroid/provider/DeviceConfigInterface;
 HSPLcom/android/server/display/DisplayModeDirector$RealInjector;->getDisplayManager()Landroid/hardware/display/DisplayManager;
 HSPLcom/android/server/display/DisplayModeDirector$RealInjector;->getThermalService()Landroid/os/IThermalService;
@@ -21566,7 +22587,7 @@
 HSPLcom/android/server/display/DisplayModeDirector$SensorObserver;-><init>(Landroid/content/Context;Lcom/android/server/display/DisplayModeDirector$BallotBox;Lcom/android/server/display/DisplayModeDirector$Injector;)V
 HSPLcom/android/server/display/DisplayModeDirector$SensorObserver;->dump(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/display/DisplayModeDirector$SensorObserver;->observe()V
-PLcom/android/server/display/DisplayModeDirector$SensorObserver;->onDisplayAdded(I)V
+HPLcom/android/server/display/DisplayModeDirector$SensorObserver;->onDisplayAdded(I)V
 HSPLcom/android/server/display/DisplayModeDirector$SensorObserver;->onDisplayChanged(I)V
 PLcom/android/server/display/DisplayModeDirector$SensorObserver;->onDisplayRemoved(I)V
 HSPLcom/android/server/display/DisplayModeDirector$SensorObserver;->onProximityActive(Z)V
@@ -21625,7 +22646,7 @@
 HSPLcom/android/server/display/DisplayModeDirector;->filterModes([Landroid/view/Display$Mode;Lcom/android/server/display/DisplayModeDirector$VoteSummary;)Ljava/util/ArrayList;+]Landroid/view/Display$Mode;Landroid/view/Display$Mode;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/display/DisplayModeDirector;->getAppRequestObserver()Lcom/android/server/display/DisplayModeDirector$AppRequestObserver;
 PLcom/android/server/display/DisplayModeDirector;->getBrightnessObserver()Lcom/android/server/display/DisplayModeDirector$BrightnessObserver;
-HSPLcom/android/server/display/DisplayModeDirector;->getDesiredDisplayModeSpecs(I)Lcom/android/server/display/DisplayModeDirector$DesiredDisplayModeSpecs;+]Lcom/android/server/display/DisplayModeDirector;Lcom/android/server/display/DisplayModeDirector;]Landroid/view/Display$Mode;Landroid/view/Display$Mode;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/display/DisplayModeDirector;->getDesiredDisplayModeSpecs(I)Lcom/android/server/display/DisplayModeDirector$DesiredDisplayModeSpecs;+]Lcom/android/server/display/DisplayModeDirector;Lcom/android/server/display/DisplayModeDirector;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/Display$Mode;Landroid/view/Display$Mode;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLcom/android/server/display/DisplayModeDirector;->getDesiredDisplayModeSpecsWithInjectedFpsSettings(FFF)Lcom/android/server/display/DisplayModeDirector$DesiredDisplayModeSpecs;
 HSPLcom/android/server/display/DisplayModeDirector;->getHbmObserver()Lcom/android/server/display/DisplayModeDirector$HbmObserver;
 HSPLcom/android/server/display/DisplayModeDirector;->getModeSwitchingType()I
@@ -21663,7 +22684,7 @@
 PLcom/android/server/display/DisplayPowerController$2;-><init>(Lcom/android/server/display/DisplayPowerController;)V
 HSPLcom/android/server/display/DisplayPowerController$3;-><init>(Lcom/android/server/display/DisplayPowerController;)V
 PLcom/android/server/display/DisplayPowerController$3;->onAnimationCancel(Landroid/animation/Animator;)V
-PLcom/android/server/display/DisplayPowerController$3;->onAnimationEnd(Landroid/animation/Animator;)V
+HPLcom/android/server/display/DisplayPowerController$3;->onAnimationEnd(Landroid/animation/Animator;)V
 PLcom/android/server/display/DisplayPowerController$3;->onAnimationRepeat(Landroid/animation/Animator;)V
 PLcom/android/server/display/DisplayPowerController$3;->onAnimationStart(Landroid/animation/Animator;)V
 HSPLcom/android/server/display/DisplayPowerController$4;-><init>(Lcom/android/server/display/DisplayPowerController;)V
@@ -21682,9 +22703,9 @@
 HSPLcom/android/server/display/DisplayPowerController$BrightnessEvent;-><init>(Lcom/android/server/display/DisplayPowerController;I)V
 HSPLcom/android/server/display/DisplayPowerController$BrightnessEvent;-><init>(Lcom/android/server/display/DisplayPowerController;Lcom/android/server/display/DisplayPowerController$BrightnessEvent;)V
 HSPLcom/android/server/display/DisplayPowerController$BrightnessEvent;->copyFrom(Lcom/android/server/display/DisplayPowerController$BrightnessEvent;)V
-HSPLcom/android/server/display/DisplayPowerController$BrightnessEvent;->equalsMainData(Lcom/android/server/display/DisplayPowerController$BrightnessEvent;)Z
+HSPLcom/android/server/display/DisplayPowerController$BrightnessEvent;->equalsMainData(Lcom/android/server/display/DisplayPowerController$BrightnessEvent;)Z+]Lcom/android/server/display/DisplayPowerController$BrightnessReason;Lcom/android/server/display/DisplayPowerController$BrightnessReason;
 HSPLcom/android/server/display/DisplayPowerController$BrightnessEvent;->flagsToString()Ljava/lang/String;
-HSPLcom/android/server/display/DisplayPowerController$BrightnessEvent;->reset()V
+HSPLcom/android/server/display/DisplayPowerController$BrightnessEvent;->reset()V+]Lcom/android/server/display/DisplayPowerController$BrightnessReason;Lcom/android/server/display/DisplayPowerController$BrightnessReason;
 PLcom/android/server/display/DisplayPowerController$BrightnessEvent;->toString()Ljava/lang/String;
 HSPLcom/android/server/display/DisplayPowerController$BrightnessEvent;->toString(Z)Ljava/lang/String;
 HSPLcom/android/server/display/DisplayPowerController$BrightnessReason;-><init>(Lcom/android/server/display/DisplayPowerController;)V
@@ -21720,13 +22741,21 @@
 HSPLcom/android/server/display/DisplayPowerController;->-$$Nest$fgetmCallbacks(Lcom/android/server/display/DisplayPowerController;)Landroid/hardware/display/DisplayManagerInternal$DisplayPowerCallbacks;
 PLcom/android/server/display/DisplayPowerController;->-$$Nest$fgetmDisplayDeviceConfig(Lcom/android/server/display/DisplayPowerController;)Lcom/android/server/display/DisplayDeviceConfig;
 HSPLcom/android/server/display/DisplayPowerController;->-$$Nest$fgetmHandler(Lcom/android/server/display/DisplayPowerController;)Lcom/android/server/display/DisplayPowerController$DisplayControllerHandler;
+PLcom/android/server/display/DisplayPowerController;->-$$Nest$fgetmOnProximityNegativeMessages(Lcom/android/server/display/DisplayPowerController;)I
+PLcom/android/server/display/DisplayPowerController;->-$$Nest$fgetmOnProximityPositiveMessages(Lcom/android/server/display/DisplayPowerController;)I
 PLcom/android/server/display/DisplayPowerController;->-$$Nest$fgetmPendingScreenOffUnblocker(Lcom/android/server/display/DisplayPowerController;)Lcom/android/server/display/DisplayPowerController$ScreenOffUnblocker;
 PLcom/android/server/display/DisplayPowerController;->-$$Nest$fgetmPendingScreenOnUnblocker(Lcom/android/server/display/DisplayPowerController;)Lcom/android/server/display/DisplayPowerController$ScreenOnUnblocker;
 HSPLcom/android/server/display/DisplayPowerController;->-$$Nest$fgetmPowerState(Lcom/android/server/display/DisplayPowerController;)Lcom/android/server/display/DisplayPowerState;
 PLcom/android/server/display/DisplayPowerController;->-$$Nest$fgetmProximitySensorEnabled(Lcom/android/server/display/DisplayPowerController;)Z
 PLcom/android/server/display/DisplayPowerController;->-$$Nest$fgetmProximityThreshold(Lcom/android/server/display/DisplayPowerController;)F
 PLcom/android/server/display/DisplayPowerController;->-$$Nest$fgetmStopped(Lcom/android/server/display/DisplayPowerController;)Z
+HSPLcom/android/server/display/DisplayPowerController;->-$$Nest$fgetmSuspendBlockerIdOnStateChanged(Lcom/android/server/display/DisplayPowerController;)Ljava/lang/String;
+PLcom/android/server/display/DisplayPowerController;->-$$Nest$fgetmSuspendBlockerIdProxNegative(Lcom/android/server/display/DisplayPowerController;)Ljava/lang/String;
+PLcom/android/server/display/DisplayPowerController;->-$$Nest$fgetmSuspendBlockerIdProxPositive(Lcom/android/server/display/DisplayPowerController;)Ljava/lang/String;
 HSPLcom/android/server/display/DisplayPowerController;->-$$Nest$fputmBrightnessConfiguration(Lcom/android/server/display/DisplayPowerController;Landroid/hardware/display/BrightnessConfiguration;)V
+PLcom/android/server/display/DisplayPowerController;->-$$Nest$fputmOnProximityNegativeMessages(Lcom/android/server/display/DisplayPowerController;I)V
+PLcom/android/server/display/DisplayPowerController;->-$$Nest$fputmOnProximityPositiveMessages(Lcom/android/server/display/DisplayPowerController;I)V
+HSPLcom/android/server/display/DisplayPowerController;->-$$Nest$fputmOnStateChangedPending(Lcom/android/server/display/DisplayPowerController;Z)V
 PLcom/android/server/display/DisplayPowerController;->-$$Nest$fputmTemporaryAutoBrightnessAdjustment(Lcom/android/server/display/DisplayPowerController;F)V
 PLcom/android/server/display/DisplayPowerController;->-$$Nest$fputmTemporaryScreenBrightness(Lcom/android/server/display/DisplayPowerController;F)V
 PLcom/android/server/display/DisplayPowerController;->-$$Nest$mapplyReduceBrightColorsSplineAdjustment(Lcom/android/server/display/DisplayPowerController;)V
@@ -21744,7 +22773,7 @@
 HSPLcom/android/server/display/DisplayPowerController;-><clinit>()V
 HSPLcom/android/server/display/DisplayPowerController;-><init>(Landroid/content/Context;Landroid/hardware/display/DisplayManagerInternal$DisplayPowerCallbacks;Landroid/os/Handler;Landroid/hardware/SensorManager;Lcom/android/server/display/DisplayBlanker;Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/BrightnessTracker;Lcom/android/server/display/BrightnessSetting;Ljava/lang/Runnable;)V
 HSPLcom/android/server/display/DisplayPowerController;->animateScreenBrightness(FFF)V
-HSPLcom/android/server/display/DisplayPowerController;->animateScreenStateChange(IZ)V
+HSPLcom/android/server/display/DisplayPowerController;->animateScreenStateChange(IZ)V+]Landroid/animation/ObjectAnimator;Landroid/animation/ObjectAnimator;]Lcom/android/server/display/DisplayPowerState;Lcom/android/server/display/DisplayPowerState;]Lcom/android/server/display/DisplayPowerController;Lcom/android/server/display/DisplayPowerController;
 PLcom/android/server/display/DisplayPowerController;->applyReduceBrightColorsSplineAdjustment()V
 HPLcom/android/server/display/DisplayPowerController;->blockScreenOff()V
 HPLcom/android/server/display/DisplayPowerController;->blockScreenOn()V
@@ -21752,7 +22781,7 @@
 HSPLcom/android/server/display/DisplayPowerController;->clampAutoBrightnessAdjustment(F)F
 HSPLcom/android/server/display/DisplayPowerController;->clampScreenBrightness(F)F+]Lcom/android/server/display/HighBrightnessModeController;Lcom/android/server/display/HighBrightnessModeController;
 HSPLcom/android/server/display/DisplayPowerController;->clampScreenBrightnessForVr(F)F
-PLcom/android/server/display/DisplayPowerController;->cleanupHandlerThreadAfterStop()V
+HPLcom/android/server/display/DisplayPowerController;->cleanupHandlerThreadAfterStop()V
 PLcom/android/server/display/DisplayPowerController;->clearPendingProximityDebounceTime()V
 HSPLcom/android/server/display/DisplayPowerController;->convertToNits(F)F
 HSPLcom/android/server/display/DisplayPowerController;->createBrightnessThrottlerLocked()Lcom/android/server/display/BrightnessThrottler;
@@ -21774,7 +22803,7 @@
 HPLcom/android/server/display/DisplayPowerController;->ignoreProximitySensorUntilChanged()V
 PLcom/android/server/display/DisplayPowerController;->ignoreProximitySensorUntilChangedInternal()V
 HSPLcom/android/server/display/DisplayPowerController;->initialize(I)V
-HPLcom/android/server/display/DisplayPowerController;->isProximitySensorAvailable()Z
+HSPLcom/android/server/display/DisplayPowerController;->isProximitySensorAvailable()Z
 HSPLcom/android/server/display/DisplayPowerController;->isValidBrightnessValue(F)Z
 PLcom/android/server/display/DisplayPowerController;->lambda$createBrightnessThrottlerLocked$3()V
 PLcom/android/server/display/DisplayPowerController;->lambda$createHbmControllerLocked$2()V
@@ -21803,7 +22832,7 @@
 PLcom/android/server/display/DisplayPowerController;->reportedToPolicyToString(I)Ljava/lang/String;
 HSPLcom/android/server/display/DisplayPowerController;->requestPowerState(Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;Z)Z+]Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;]Lcom/android/server/display/DisplayPowerController;Lcom/android/server/display/DisplayPowerController;
 HSPLcom/android/server/display/DisplayPowerController;->saveBrightnessInfo(F)Z
-HSPLcom/android/server/display/DisplayPowerController;->saveBrightnessInfo(FF)Z
+HSPLcom/android/server/display/DisplayPowerController;->saveBrightnessInfo(FF)Z+]Lcom/android/server/display/HighBrightnessModeController;Lcom/android/server/display/HighBrightnessModeController;]Lcom/android/server/display/BrightnessThrottler;Lcom/android/server/display/BrightnessThrottler;]Lcom/android/server/display/DisplayPowerController$CachedBrightnessInfo;Lcom/android/server/display/DisplayPowerController$CachedBrightnessInfo;
 PLcom/android/server/display/DisplayPowerController;->sendOnProximityNegativeWithWakelock()V
 PLcom/android/server/display/DisplayPowerController;->sendOnProximityPositiveWithWakelock()V
 HSPLcom/android/server/display/DisplayPowerController;->sendOnStateChangedWithWakelock()V
@@ -21831,8 +22860,8 @@
 HSPLcom/android/server/display/DisplayPowerController;->updateAutoBrightnessAdjustment()Z
 HPLcom/android/server/display/DisplayPowerController;->updateBrightness()V
 HSPLcom/android/server/display/DisplayPowerController;->updatePendingProximityRequestsLocked()V
-HSPLcom/android/server/display/DisplayPowerController;->updatePowerState()V
-PLcom/android/server/display/DisplayPowerController;->updateScreenBrightnessSetting(F)V
+HSPLcom/android/server/display/DisplayPowerController;->updatePowerState()V+]Lcom/android/server/display/HighBrightnessModeController;Lcom/android/server/display/HighBrightnessModeController;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/display/BrightnessThrottler;Lcom/android/server/display/BrightnessThrottler;]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/internal/util/RingBuffer;Lcom/android/internal/util/RingBuffer;]Lcom/android/server/display/DisplayPowerState;Lcom/android/server/display/DisplayPowerState;]Lcom/android/server/display/RampAnimator$DualRampAnimator;Lcom/android/server/display/RampAnimator$DualRampAnimator;]Landroid/hardware/display/DisplayManagerInternal$DisplayPowerCallbacks;Lcom/android/server/power/PowerManagerService$1;]Lcom/android/server/display/DisplayPowerController$BrightnessReason;Lcom/android/server/display/DisplayPowerController$BrightnessReason;]Lcom/android/server/display/AutomaticBrightnessController;Lcom/android/server/display/AutomaticBrightnessController;]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Landroid/animation/ObjectAnimator;Landroid/animation/ObjectAnimator;]Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;]Lcom/android/server/display/BrightnessTracker;Lcom/android/server/display/BrightnessTracker;]Lcom/android/server/display/DisplayPowerController$BrightnessEvent;Lcom/android/server/display/DisplayPowerController$BrightnessEvent;]Lcom/android/server/display/DisplayPowerController;Lcom/android/server/display/DisplayPowerController;
+HPLcom/android/server/display/DisplayPowerController;->updateScreenBrightnessSetting(F)V
 HSPLcom/android/server/display/DisplayPowerController;->updateUserSetScreenBrightness()Z
 PLcom/android/server/display/DisplayPowerController;->updateWhiteBalance()V
 HSPLcom/android/server/display/DisplayPowerState$1;-><init>(Ljava/lang/String;)V
@@ -21872,7 +22901,7 @@
 HSPLcom/android/server/display/DisplayPowerState;->-$$Nest$fputmScreenReady(Lcom/android/server/display/DisplayPowerState;Z)V
 HSPLcom/android/server/display/DisplayPowerState;->-$$Nest$fputmScreenUpdatePending(Lcom/android/server/display/DisplayPowerState;Z)V
 HSPLcom/android/server/display/DisplayPowerState;->-$$Nest$minvokeCleanListenerIfNeeded(Lcom/android/server/display/DisplayPowerState;)V+]Lcom/android/server/display/DisplayPowerState;Lcom/android/server/display/DisplayPowerState;
-HSPLcom/android/server/display/DisplayPowerState;->-$$Nest$mpostScreenUpdateThreadSafe(Lcom/android/server/display/DisplayPowerState;)V
+HSPLcom/android/server/display/DisplayPowerState;->-$$Nest$mpostScreenUpdateThreadSafe(Lcom/android/server/display/DisplayPowerState;)V+]Lcom/android/server/display/DisplayPowerState;Lcom/android/server/display/DisplayPowerState;
 HPLcom/android/server/display/DisplayPowerState;->-$$Nest$sfgetCOUNTER_COLOR_FADE()Ljava/lang/String;
 HSPLcom/android/server/display/DisplayPowerState;-><clinit>()V
 HSPLcom/android/server/display/DisplayPowerState;-><init>(Lcom/android/server/display/DisplayBlanker;Lcom/android/server/display/ColorFade;II)V
@@ -21961,15 +22990,15 @@
 HSPLcom/android/server/display/HighBrightnessModeController;->isCurrentlyAllowed()Z
 PLcom/android/server/display/HighBrightnessModeController;->lambda$dump$0(Ljava/io/PrintWriter;)V
 HPLcom/android/server/display/HighBrightnessModeController;->onAmbientLuxChange(F)V
-HSPLcom/android/server/display/HighBrightnessModeController;->onBrightnessChanged(FFI)V
-HSPLcom/android/server/display/HighBrightnessModeController;->recalculateTimeAllowance()V
+HSPLcom/android/server/display/HighBrightnessModeController;->onBrightnessChanged(FFI)V+]Lcom/android/server/display/HighBrightnessModeController;Lcom/android/server/display/HighBrightnessModeController;]Lcom/android/server/display/DisplayManagerService$Clock;Lcom/android/server/display/HighBrightnessModeController$Injector$$ExternalSyntheticLambda0;]Ljava/util/LinkedList;Ljava/util/LinkedList;
+HSPLcom/android/server/display/HighBrightnessModeController;->recalculateTimeAllowance()V+]Landroid/os/Handler;Lcom/android/server/display/DisplayPowerController$DisplayControllerHandler;]Lcom/android/server/display/HighBrightnessModeController;Lcom/android/server/display/HighBrightnessModeController;]Lcom/android/server/display/DisplayManagerService$Clock;Lcom/android/server/display/HighBrightnessModeController$Injector$$ExternalSyntheticLambda0;]Ljava/util/LinkedList;Ljava/util/LinkedList;
 HSPLcom/android/server/display/HighBrightnessModeController;->registerHdrListener(Landroid/os/IBinder;)V
 HSPLcom/android/server/display/HighBrightnessModeController;->resetHbmData(IILandroid/os/IBinder;Ljava/lang/String;Lcom/android/server/display/DisplayDeviceConfig$HighBrightnessModeData;Lcom/android/server/display/HighBrightnessModeController$HdrBrightnessDeviceConfig;)V
 HSPLcom/android/server/display/HighBrightnessModeController;->setAutoBrightnessEnabled(I)V
 HPLcom/android/server/display/HighBrightnessModeController;->stop()V
 HSPLcom/android/server/display/HighBrightnessModeController;->unregisterHdrListener()V
 HSPLcom/android/server/display/HighBrightnessModeController;->updateHbmMode()V
-HSPLcom/android/server/display/HighBrightnessModeController;->updateHbmStats(I)V
+HSPLcom/android/server/display/HighBrightnessModeController;->updateHbmStats(I)V+]Lcom/android/server/display/HighBrightnessModeController$Injector;Lcom/android/server/display/HighBrightnessModeController$Injector;
 HSPLcom/android/server/display/HysteresisLevels;-><init>([I[I[IFF)V
 PLcom/android/server/display/HysteresisLevels;->dump(Ljava/io/PrintWriter;)V
 HPLcom/android/server/display/HysteresisLevels;->getBrighteningThreshold(F)F
@@ -21984,7 +23013,7 @@
 PLcom/android/server/display/LocalDisplayAdapter$DisplayEventListener;->onHotplug(JJZ)V
 PLcom/android/server/display/LocalDisplayAdapter$DisplayEventListener;->onModeChanged(JJI)V
 HSPLcom/android/server/display/LocalDisplayAdapter$DisplayModeRecord;-><init>(Landroid/view/SurfaceControl$DisplayMode;[F)V
-HSPLcom/android/server/display/LocalDisplayAdapter$DisplayModeRecord;->hasMatchingMode(Landroid/view/SurfaceControl$DisplayMode;)Z
+HSPLcom/android/server/display/LocalDisplayAdapter$DisplayModeRecord;->hasMatchingMode(Landroid/view/SurfaceControl$DisplayMode;)Z+]Landroid/view/Display$Mode;Landroid/view/Display$Mode;
 HSPLcom/android/server/display/LocalDisplayAdapter$DisplayModeRecord;->toString()Ljava/lang/String;
 HSPLcom/android/server/display/LocalDisplayAdapter$Injector;-><init>()V
 HSPLcom/android/server/display/LocalDisplayAdapter$Injector;->getSurfaceControlProxy()Lcom/android/server/display/LocalDisplayAdapter$SurfaceControlProxy;
@@ -22011,14 +23040,14 @@
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->applyPendingDisplayDeviceInfoChangesLocked()V
 PLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->dumpLocked(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->findDisplayModeRecord(Landroid/view/SurfaceControl$DisplayMode;Ljava/util/List;)Lcom/android/server/display/LocalDisplayAdapter$DisplayModeRecord;
-HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->findMatchingModeIdLocked(I)I
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->findMatchingModeIdLocked(I)I+]Landroid/view/Display$Mode;Landroid/view/Display$Mode;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;]Lcom/android/server/display/LocalDisplayAdapter$DisplayModeRecord;Lcom/android/server/display/LocalDisplayAdapter$DisplayModeRecord;
 PLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->findMode(I)Landroid/view/Display$Mode;
 PLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->findMode(IIF)Landroid/view/Display$Mode;
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->findSfDisplayModeIdLocked(II)I
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->findUserPreferredModeIdLocked(Landroid/view/Display$Mode;)I
 PLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->getActiveDisplayModeAtStartLocked()Landroid/view/Display$Mode;
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->getDisplayDeviceConfig()Lcom/android/server/display/DisplayDeviceConfig;
-HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->getDisplayDeviceInfoLocked()Lcom/android/server/display/DisplayDeviceInfo;+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/display/DisplayDevice;Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;]Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/display/LocalDisplayAdapter;Lcom/android/server/display/LocalDisplayAdapter;]Landroid/hardware/display/DisplayManager;Landroid/hardware/display/DisplayManager;]Lcom/android/server/display/DisplayDeviceConfig;Lcom/android/server/display/DisplayDeviceConfig;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/Display$Mode;Landroid/view/Display$Mode;
+HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->getDisplayDeviceInfoLocked()Lcom/android/server/display/DisplayDeviceInfo;+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/display/DisplayDevice;Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;]Landroid/view/Display$Mode;Landroid/view/Display$Mode;]Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Lcom/android/server/display/LocalDisplayAdapter;Lcom/android/server/display/LocalDisplayAdapter;]Lcom/android/server/display/DisplayDeviceConfig;Lcom/android/server/display/DisplayDeviceConfig;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/hardware/display/DisplayManager;Landroid/hardware/display/DisplayManager;
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->getDisplayModes(Landroid/util/SparseArray;)[Landroid/view/Display$Mode;
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->getLogicalDensity()I
 HSPLcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;->getModeById([Landroid/view/SurfaceControl$DisplayMode;I)Landroid/view/SurfaceControl$DisplayMode;
@@ -22087,7 +23116,7 @@
 HSPLcom/android/server/display/LogicalDisplay;-><clinit>()V
 HSPLcom/android/server/display/LogicalDisplay;-><init>(IILcom/android/server/display/DisplayDevice;)V
 HSPLcom/android/server/display/LogicalDisplay;->clearPendingFrameRateOverrideUids()V
-HSPLcom/android/server/display/LogicalDisplay;->configureDisplayLocked(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/display/DisplayDevice;Z)V
+HSPLcom/android/server/display/LogicalDisplay;->configureDisplayLocked(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/display/DisplayDevice;Z)V+]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Landroid/graphics/Point;Landroid/graphics/Point;]Lcom/android/server/display/DisplayDevice;Lcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;,Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;]Landroid/graphics/Rect;Landroid/graphics/Rect;
 PLcom/android/server/display/LogicalDisplay;->dumpLocked(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/display/LogicalDisplay;->getDesiredDisplayModeSpecsLocked()Lcom/android/server/display/DisplayModeDirector$DesiredDisplayModeSpecs;
 HSPLcom/android/server/display/LogicalDisplay;->getDisplayIdLocked()I
@@ -22110,7 +23139,7 @@
 HSPLcom/android/server/display/LogicalDisplay;->setDesiredDisplayModeSpecsLocked(Lcom/android/server/display/DisplayModeDirector$DesiredDisplayModeSpecs;)V
 HSPLcom/android/server/display/LogicalDisplay;->setDisplayInfoOverrideFromWindowManagerLocked(Landroid/view/DisplayInfo;)Z
 HPLcom/android/server/display/LogicalDisplay;->setDisplayScalingDisabledLocked(Z)V
-HPLcom/android/server/display/LogicalDisplay;->setHasContentLocked(Z)V
+HSPLcom/android/server/display/LogicalDisplay;->setHasContentLocked(Z)V
 HSPLcom/android/server/display/LogicalDisplay;->setPhase(I)V
 HSPLcom/android/server/display/LogicalDisplay;->setPrimaryDisplayDeviceLocked(Lcom/android/server/display/DisplayDevice;)Lcom/android/server/display/DisplayDevice;
 HSPLcom/android/server/display/LogicalDisplay;->setRequestedColorModeLocked(I)V
@@ -22118,8 +23147,8 @@
 PLcom/android/server/display/LogicalDisplay;->setUserDisabledHdrTypes([I)V
 HSPLcom/android/server/display/LogicalDisplay;->swapDisplaysLocked(Lcom/android/server/display/LogicalDisplay;)V
 HSPLcom/android/server/display/LogicalDisplay;->updateDisplayGroupIdLocked(I)V
-HSPLcom/android/server/display/LogicalDisplay;->updateFrameRateOverrides(Lcom/android/server/display/DisplayDeviceInfo;)V
-HSPLcom/android/server/display/LogicalDisplay;->updateLocked(Lcom/android/server/display/DisplayDeviceRepository;)V
+HSPLcom/android/server/display/LogicalDisplay;->updateFrameRateOverrides(Lcom/android/server/display/DisplayDeviceInfo;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/lang/Float;Ljava/lang/Float;
+HSPLcom/android/server/display/LogicalDisplay;->updateLocked(Lcom/android/server/display/DisplayDeviceRepository;)V+]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Lcom/android/server/display/DisplayDevice;Lcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;,Lcom/android/server/display/LocalDisplayAdapter$LocalDisplayDevice;]Lcom/android/server/display/DisplayDeviceRepository;Lcom/android/server/display/DisplayDeviceRepository;]Lcom/android/server/display/DisplayInfoProxy;Lcom/android/server/display/DisplayInfoProxy;
 HSPLcom/android/server/display/LogicalDisplayMapper$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/display/LogicalDisplayMapper;)V
 PLcom/android/server/display/LogicalDisplayMapper$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/display/LogicalDisplayMapper$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/display/LogicalDisplayMapper;)V
@@ -22132,7 +23161,7 @@
 PLcom/android/server/display/LogicalDisplayMapper;->$r8$lambda$TB-cAdkvnurYOpjxa2dQo8OHHb8(Lcom/android/server/display/LogicalDisplayMapper;)V
 PLcom/android/server/display/LogicalDisplayMapper;->-$$Nest$fgetmSyncRoot(Lcom/android/server/display/LogicalDisplayMapper;)Lcom/android/server/display/DisplayManagerService$SyncRoot;
 PLcom/android/server/display/LogicalDisplayMapper;->-$$Nest$mfinishStateTransitionLocked(Lcom/android/server/display/LogicalDisplayMapper;Z)V
-HSPLcom/android/server/display/LogicalDisplayMapper;-><init>(Landroid/content/Context;Lcom/android/server/display/DisplayDeviceRepository;Lcom/android/server/display/LogicalDisplayMapper$Listener;Lcom/android/server/display/DisplayManagerService$SyncRoot;Landroid/os/Handler;)V
+HSPLcom/android/server/display/LogicalDisplayMapper;-><init>(Landroid/content/Context;Lcom/android/server/display/DisplayDeviceRepository;Lcom/android/server/display/LogicalDisplayMapper$Listener;Lcom/android/server/display/DisplayManagerService$SyncRoot;Landroid/os/Handler;Lcom/android/server/display/DeviceStateToLayoutMap;)V
 HSPLcom/android/server/display/LogicalDisplayMapper;->applyLayoutLocked()V
 HSPLcom/android/server/display/LogicalDisplayMapper;->areAllTransitioningDisplaysOffLocked()Z
 HSPLcom/android/server/display/LogicalDisplayMapper;->assignDisplayGroupIdLocked(Z)I
@@ -22141,13 +23170,15 @@
 HSPLcom/android/server/display/LogicalDisplayMapper;->createNewLogicalDisplayLocked(Lcom/android/server/display/DisplayDevice;I)Lcom/android/server/display/LogicalDisplay;
 PLcom/android/server/display/LogicalDisplayMapper;->dumpLocked(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/display/LogicalDisplayMapper;->finishStateTransitionLocked(Z)V
-HSPLcom/android/server/display/LogicalDisplayMapper;->forEachLocked(Ljava/util/function/Consumer;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/function/Consumer;Lcom/android/server/display/DisplayManagerService$BinderService$$ExternalSyntheticLambda0;,Lcom/android/server/display/DisplayManagerService$$ExternalSyntheticLambda1;,Lcom/android/server/display/DisplayManagerService$DesiredDisplayModeSpecsObserver$$ExternalSyntheticLambda0;,Lcom/android/server/display/DisplayManagerService$$ExternalSyntheticLambda6;
+HSPLcom/android/server/display/LogicalDisplayMapper;->forEachLocked(Ljava/util/function/Consumer;)V+]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/function/Consumer;Lcom/android/server/display/DisplayManagerService$BinderService$$ExternalSyntheticLambda0;,Lcom/android/server/display/DisplayManagerService$$ExternalSyntheticLambda1;,Lcom/android/server/display/DisplayManagerService$DesiredDisplayModeSpecsObserver$$ExternalSyntheticLambda0;,Lcom/android/server/display/DisplayManagerService$$ExternalSyntheticLambda6;,Lcom/android/server/display/DisplayManagerService$$ExternalSyntheticLambda7;,Lcom/android/server/display/DisplayManagerService$$ExternalSyntheticLambda0;
 HSPLcom/android/server/display/LogicalDisplayMapper;->getDisplayGroupIdFromDisplayIdLocked(I)I
 HSPLcom/android/server/display/LogicalDisplayMapper;->getDisplayGroupLocked(I)Lcom/android/server/display/DisplayGroup;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/display/LogicalDisplayMapper;->getDisplayIdsLocked(I)[I+]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/view/DisplayInfo;Landroid/view/DisplayInfo;
+HSPLcom/android/server/display/LogicalDisplayMapper;->getDisplayIdsLocked(IZ)[I+]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/view/DisplayInfo;Landroid/view/DisplayInfo;
 HSPLcom/android/server/display/LogicalDisplayMapper;->getDisplayInfoForStateLocked(III)Ljava/util/Set;
-HSPLcom/android/server/display/LogicalDisplayMapper;->getDisplayLocked(I)Lcom/android/server/display/LogicalDisplay;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/display/LogicalDisplayMapper;->getDisplayLocked(Lcom/android/server/display/DisplayDevice;)Lcom/android/server/display/LogicalDisplay;+]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/display/LogicalDisplayMapper;->getDisplayLocked(I)Lcom/android/server/display/LogicalDisplay;+]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/display/LogicalDisplayMapper;->getDisplayLocked(IZ)Lcom/android/server/display/LogicalDisplay;+]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/display/LogicalDisplayMapper;->getDisplayLocked(Lcom/android/server/display/DisplayDevice;)Lcom/android/server/display/LogicalDisplay;+]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;
+HSPLcom/android/server/display/LogicalDisplayMapper;->getDisplayLocked(Lcom/android/server/display/DisplayDevice;Z)Lcom/android/server/display/LogicalDisplay;+]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/display/LogicalDisplayMapper;->handleDisplayDeviceAddedLocked(Lcom/android/server/display/DisplayDevice;)V
 HPLcom/android/server/display/LogicalDisplayMapper;->handleDisplayDeviceRemovedLocked(Lcom/android/server/display/DisplayDevice;)V
 HSPLcom/android/server/display/LogicalDisplayMapper;->initializeDefaultDisplayDeviceLocked(Lcom/android/server/display/DisplayDevice;)V
@@ -22158,15 +23189,15 @@
 HSPLcom/android/server/display/LogicalDisplayMapper;->onEarlyInteractivityChange(Z)V
 HSPLcom/android/server/display/LogicalDisplayMapper;->onTraversalRequested()V
 HSPLcom/android/server/display/LogicalDisplayMapper;->resetLayoutLocked(III)V
-HSPLcom/android/server/display/LogicalDisplayMapper;->sendUpdatesForDisplaysLocked(I)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/display/LogicalDisplayMapper$Listener;Lcom/android/server/display/DisplayManagerService$LogicalDisplayListener;
-HSPLcom/android/server/display/LogicalDisplayMapper;->sendUpdatesForGroupsLocked(I)V
+HSPLcom/android/server/display/LogicalDisplayMapper;->sendUpdatesForDisplaysLocked(I)V+]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;]Lcom/android/server/display/LogicalDisplayMapper$Listener;Lcom/android/server/display/DisplayManagerService$LogicalDisplayListener;
+HSPLcom/android/server/display/LogicalDisplayMapper;->sendUpdatesForGroupsLocked(I)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
 HSPLcom/android/server/display/LogicalDisplayMapper;->setDeviceStateLocked(IZ)V
 HSPLcom/android/server/display/LogicalDisplayMapper;->setDisplayPhase(Lcom/android/server/display/LogicalDisplay;I)V
 HSPLcom/android/server/display/LogicalDisplayMapper;->shouldDeviceBePutToSleep(IIZZZ)Z
 HSPLcom/android/server/display/LogicalDisplayMapper;->shouldDeviceBeWoken(IIZZ)Z
 HSPLcom/android/server/display/LogicalDisplayMapper;->toSparseBooleanArray([I)Landroid/util/SparseBooleanArray;
 HSPLcom/android/server/display/LogicalDisplayMapper;->transitionToPendingStateLocked()V
-HSPLcom/android/server/display/LogicalDisplayMapper;->updateLogicalDisplaysLocked()V+]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/display/DisplayGroup;Lcom/android/server/display/DisplayGroup;]Landroid/view/DisplayInfo;Landroid/view/DisplayInfo;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/display/LogicalDisplayMapper;->updateLogicalDisplaysLocked()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/display/LogicalDisplay;Lcom/android/server/display/LogicalDisplay;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/display/LogicalDisplayMapper;Lcom/android/server/display/LogicalDisplayMapper;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/display/DisplayGroup;Lcom/android/server/display/DisplayGroup;]Landroid/view/DisplayInfo;Landroid/view/DisplayInfo;
 HSPLcom/android/server/display/OverlayDisplayAdapter$1$1;-><init>(Lcom/android/server/display/OverlayDisplayAdapter$1;Landroid/os/Handler;)V
 PLcom/android/server/display/OverlayDisplayAdapter$1$1;->onChange(Z)V
 HSPLcom/android/server/display/OverlayDisplayAdapter$1;-><init>(Lcom/android/server/display/OverlayDisplayAdapter;)V
@@ -22191,6 +23222,8 @@
 PLcom/android/server/display/OverlayDisplayWindow$2;->onSurfaceTextureAvailable(Landroid/graphics/SurfaceTexture;II)V
 PLcom/android/server/display/OverlayDisplayWindow$2;->onSurfaceTextureDestroyed(Landroid/graphics/SurfaceTexture;)Z
 PLcom/android/server/display/OverlayDisplayWindow$2;->onSurfaceTextureSizeChanged(Landroid/graphics/SurfaceTexture;II)V
+HPLcom/android/server/display/PersistentDataStore$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/display/PersistentDataStore;Ljava/io/ByteArrayOutputStream;)V
+HPLcom/android/server/display/PersistentDataStore$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/display/PersistentDataStore$BrightnessConfigurations;->-$$Nest$fgetmConfigurations(Lcom/android/server/display/PersistentDataStore$BrightnessConfigurations;)Landroid/util/SparseArray;
 PLcom/android/server/display/PersistentDataStore$BrightnessConfigurations;->-$$Nest$msetBrightnessConfigurationForUser(Lcom/android/server/display/PersistentDataStore$BrightnessConfigurations;Landroid/hardware/display/BrightnessConfiguration;ILjava/lang/String;)Z
 HSPLcom/android/server/display/PersistentDataStore$BrightnessConfigurations;-><init>()V
@@ -22227,8 +23260,10 @@
 HSPLcom/android/server/display/PersistentDataStore$StableDeviceValues;->loadIntValue(Landroid/util/TypedXmlPullParser;)I
 HPLcom/android/server/display/PersistentDataStore$StableDeviceValues;->saveToXml(Landroid/util/TypedXmlSerializer;)V
 HSPLcom/android/server/display/PersistentDataStore$StableDeviceValues;->setDisplaySize(Landroid/graphics/Point;)Z
+PLcom/android/server/display/PersistentDataStore;->$r8$lambda$H69Qr_J3Haoq4dQ-SWaLnHyCO-w(Lcom/android/server/display/PersistentDataStore;Ljava/io/ByteArrayOutputStream;)V
 HSPLcom/android/server/display/PersistentDataStore;-><init>()V
 HSPLcom/android/server/display/PersistentDataStore;-><init>(Lcom/android/server/display/PersistentDataStore$Injector;)V
+HSPLcom/android/server/display/PersistentDataStore;-><init>(Lcom/android/server/display/PersistentDataStore$Injector;Landroid/os/Handler;)V
 HSPLcom/android/server/display/PersistentDataStore;->applyWifiDisplayAliases([Landroid/hardware/display/WifiDisplay;)[Landroid/hardware/display/WifiDisplay;
 HSPLcom/android/server/display/PersistentDataStore;->clearState()V
 HSPLcom/android/server/display/PersistentDataStore;->dump(Ljava/io/PrintWriter;)V
@@ -22241,6 +23276,7 @@
 HSPLcom/android/server/display/PersistentDataStore;->getStableDisplaySize()Landroid/graphics/Point;
 HSPLcom/android/server/display/PersistentDataStore;->getUserPreferredRefreshRate(Lcom/android/server/display/DisplayDevice;)F
 HSPLcom/android/server/display/PersistentDataStore;->getUserPreferredResolution(Lcom/android/server/display/DisplayDevice;)Landroid/graphics/Point;
+HPLcom/android/server/display/PersistentDataStore;->lambda$save$0(Ljava/io/ByteArrayOutputStream;)V
 HSPLcom/android/server/display/PersistentDataStore;->load()V
 HSPLcom/android/server/display/PersistentDataStore;->loadDisplaysFromXml(Landroid/util/TypedXmlPullParser;)V
 HSPLcom/android/server/display/PersistentDataStore;->loadFromXml(Landroid/util/TypedXmlPullParser;)V
@@ -22283,7 +23319,7 @@
 HPLcom/android/server/display/RampAnimator;->-$$Nest$mpostAnimationCallback(Lcom/android/server/display/RampAnimator;)V
 HPLcom/android/server/display/RampAnimator;->-$$Nest$msetPropertyValue(Lcom/android/server/display/RampAnimator;F)V
 HSPLcom/android/server/display/RampAnimator;-><init>(Ljava/lang/Object;Landroid/util/FloatProperty;)V
-HSPLcom/android/server/display/RampAnimator;->animateTo(FF)Z
+HSPLcom/android/server/display/RampAnimator;->animateTo(FF)Z+]Lcom/android/server/display/RampAnimator$Listener;Lcom/android/server/display/RampAnimator$DualRampAnimator$1;]Lcom/android/server/display/RampAnimator;Lcom/android/server/display/RampAnimator;
 PLcom/android/server/display/RampAnimator;->cancelAnimationCallback()V
 HSPLcom/android/server/display/RampAnimator;->isAnimating()Z
 HPLcom/android/server/display/RampAnimator;->postAnimationCallback()V+]Landroid/view/Choreographer;Landroid/view/Choreographer;
@@ -22301,18 +23337,20 @@
 HSPLcom/android/server/display/VirtualDisplayAdapter$MediaProjectionCallback;->onStop()V
 PLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->-$$Nest$fgetmUniqueIndex(Lcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;)I
 HPLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;-><init>(Lcom/android/server/display/VirtualDisplayAdapter;Landroid/os/IBinder;Landroid/os/IBinder;ILjava/lang/String;Landroid/view/Surface;ILcom/android/server/display/VirtualDisplayAdapter$Callback;Ljava/lang/String;ILandroid/hardware/display/VirtualDisplayConfig;)V
-PLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->binderDied()V
-PLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->destroyLocked(Z)V
+HPLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->binderDied()V
+HPLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->destroyLocked(Z)V
 PLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->dumpLocked(Ljava/io/PrintWriter;)V
 HPLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->getDisplayDeviceInfoLocked()Lcom/android/server/display/DisplayDeviceInfo;+]Lcom/android/server/display/DisplayDevice;Lcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;]Landroid/view/Display$Mode;Landroid/view/Display$Mode;
+PLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->getDisplayIdToMirrorLocked()I
 PLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->getDisplaySurfaceDefaultSizeLocked()Landroid/graphics/Point;
 PLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->hasStableUniqueId()Z
 PLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->isWindowManagerMirroringLocked()Z
 HPLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->performTraversalLocked(Landroid/view/SurfaceControl$Transaction;)V
 HPLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->requestDisplayStateLocked(IFF)Ljava/lang/Runnable;
 PLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->resizeLocked(III)V
-PLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->setDisplayState(Z)V
+HPLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->setDisplayState(Z)V
 HPLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->setSurfaceLocked(Landroid/view/Surface;)V
+PLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->setWindowManagerMirroringLocked(Z)V
 PLcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;->stopLocked()V
 PLcom/android/server/display/VirtualDisplayAdapter;->$r8$lambda$ScKG0ljaGnYOWZC8-aFVPnszZc0(Ljava/lang/String;Z)Landroid/os/IBinder;
 PLcom/android/server/display/VirtualDisplayAdapter;->-$$Nest$mhandleBinderDiedLocked(Lcom/android/server/display/VirtualDisplayAdapter;Landroid/os/IBinder;)V
@@ -22321,37 +23359,37 @@
 HSPLcom/android/server/display/VirtualDisplayAdapter;-><init>(Lcom/android/server/display/DisplayManagerService$SyncRoot;Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/display/DisplayAdapter$Listener;Lcom/android/server/display/VirtualDisplayAdapter$SurfaceControlDisplayFactory;)V
 HPLcom/android/server/display/VirtualDisplayAdapter;->createVirtualDisplayLocked(Landroid/hardware/display/IVirtualDisplayCallback;Landroid/media/projection/IMediaProjection;ILjava/lang/String;Landroid/view/Surface;ILandroid/hardware/display/VirtualDisplayConfig;)Lcom/android/server/display/DisplayDevice;
 PLcom/android/server/display/VirtualDisplayAdapter;->dumpLocked(Ljava/io/PrintWriter;)V
-PLcom/android/server/display/VirtualDisplayAdapter;->getNextUniqueIndex(Ljava/lang/String;)I
+HPLcom/android/server/display/VirtualDisplayAdapter;->getNextUniqueIndex(Ljava/lang/String;)I
 PLcom/android/server/display/VirtualDisplayAdapter;->handleBinderDiedLocked(Landroid/os/IBinder;)V
 PLcom/android/server/display/VirtualDisplayAdapter;->handleMediaProjectionStoppedLocked(Landroid/os/IBinder;)V
 HSPLcom/android/server/display/VirtualDisplayAdapter;->lambda$new$0(Ljava/lang/String;Z)Landroid/os/IBinder;
 HSPLcom/android/server/display/VirtualDisplayAdapter;->registerLocked()V
-PLcom/android/server/display/VirtualDisplayAdapter;->releaseVirtualDisplayLocked(Landroid/os/IBinder;)Lcom/android/server/display/DisplayDevice;
+HPLcom/android/server/display/VirtualDisplayAdapter;->releaseVirtualDisplayLocked(Landroid/os/IBinder;)Lcom/android/server/display/DisplayDevice;
 PLcom/android/server/display/VirtualDisplayAdapter;->resizeVirtualDisplayLocked(Landroid/os/IBinder;III)V
-PLcom/android/server/display/VirtualDisplayAdapter;->setVirtualDisplayStateLocked(Landroid/os/IBinder;Z)V
-PLcom/android/server/display/VirtualDisplayAdapter;->setVirtualDisplaySurfaceLocked(Landroid/os/IBinder;Landroid/view/Surface;)V
+HPLcom/android/server/display/VirtualDisplayAdapter;->setVirtualDisplayStateLocked(Landroid/os/IBinder;Z)V
+HPLcom/android/server/display/VirtualDisplayAdapter;->setVirtualDisplaySurfaceLocked(Landroid/os/IBinder;Landroid/view/Surface;)V
 HSPLcom/android/server/display/WifiDisplayAdapter$2;->run()V
-HPLcom/android/server/display/color/AppSaturationController$SaturationController;->-$$Nest$maddColorTransformController(Lcom/android/server/display/color/AppSaturationController$SaturationController;Ljava/lang/ref/WeakReference;)Z
+HSPLcom/android/server/display/color/AppSaturationController$SaturationController;->-$$Nest$maddColorTransformController(Lcom/android/server/display/color/AppSaturationController$SaturationController;Ljava/lang/ref/WeakReference;)Z
 PLcom/android/server/display/color/AppSaturationController$SaturationController;->-$$Nest$mdump(Lcom/android/server/display/color/AppSaturationController$SaturationController;Ljava/io/PrintWriter;)V
 PLcom/android/server/display/color/AppSaturationController$SaturationController;->-$$Nest$msetSaturationLevel(Lcom/android/server/display/color/AppSaturationController$SaturationController;Ljava/lang/String;I)Z
-PLcom/android/server/display/color/AppSaturationController$SaturationController;-><init>()V
-PLcom/android/server/display/color/AppSaturationController$SaturationController;-><init>(Lcom/android/server/display/color/AppSaturationController$SaturationController-IA;)V
-HPLcom/android/server/display/color/AppSaturationController$SaturationController;->addColorTransformController(Ljava/lang/ref/WeakReference;)Z
+HSPLcom/android/server/display/color/AppSaturationController$SaturationController;-><init>()V
+HSPLcom/android/server/display/color/AppSaturationController$SaturationController;-><init>(Lcom/android/server/display/color/AppSaturationController$SaturationController-IA;)V
+HSPLcom/android/server/display/color/AppSaturationController$SaturationController;->addColorTransformController(Ljava/lang/ref/WeakReference;)Z
 PLcom/android/server/display/color/AppSaturationController$SaturationController;->calculateSaturationLevel()I
-HPLcom/android/server/display/color/AppSaturationController$SaturationController;->clearExpiredReferences()V+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HSPLcom/android/server/display/color/AppSaturationController$SaturationController;->clearExpiredReferences()V+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 PLcom/android/server/display/color/AppSaturationController$SaturationController;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/display/color/AppSaturationController$SaturationController;->setSaturationLevel(Ljava/lang/String;I)Z
 PLcom/android/server/display/color/AppSaturationController$SaturationController;->updateState()Z
 HSPLcom/android/server/display/color/AppSaturationController;-><clinit>()V
 HSPLcom/android/server/display/color/AppSaturationController;-><init>()V
-HPLcom/android/server/display/color/AppSaturationController;->addColorTransformController(Ljava/lang/String;ILjava/lang/ref/WeakReference;)Z
+HSPLcom/android/server/display/color/AppSaturationController;->addColorTransformController(Ljava/lang/String;ILjava/lang/ref/WeakReference;)Z
 PLcom/android/server/display/color/AppSaturationController;->computeGrayscaleTransformMatrix(F[F)V
 PLcom/android/server/display/color/AppSaturationController;->dump(Ljava/io/PrintWriter;)V
-HPLcom/android/server/display/color/AppSaturationController;->getOrCreateSaturationControllerLocked(Landroid/util/SparseArray;I)Lcom/android/server/display/color/AppSaturationController$SaturationController;
-HPLcom/android/server/display/color/AppSaturationController;->getOrCreateUserIdMapLocked(Ljava/lang/String;)Landroid/util/SparseArray;
-HPLcom/android/server/display/color/AppSaturationController;->getSaturationControllerLocked(Ljava/lang/String;I)Lcom/android/server/display/color/AppSaturationController$SaturationController;
+HSPLcom/android/server/display/color/AppSaturationController;->getOrCreateSaturationControllerLocked(Landroid/util/SparseArray;I)Lcom/android/server/display/color/AppSaturationController$SaturationController;
+HSPLcom/android/server/display/color/AppSaturationController;->getOrCreateUserIdMapLocked(Ljava/lang/String;)Landroid/util/SparseArray;
+HSPLcom/android/server/display/color/AppSaturationController;->getSaturationControllerLocked(Ljava/lang/String;I)Lcom/android/server/display/color/AppSaturationController$SaturationController;
 PLcom/android/server/display/color/AppSaturationController;->setSaturationLevel(Ljava/lang/String;Ljava/lang/String;II)Z
-PLcom/android/server/display/color/ColorDisplayService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/display/color/DisplayTransformManager;Lcom/android/server/display/color/TintController;)V
+HPLcom/android/server/display/color/ColorDisplayService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/display/color/DisplayTransformManager;Lcom/android/server/display/color/TintController;)V
 HPLcom/android/server/display/color/ColorDisplayService$$ExternalSyntheticLambda0;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V
 PLcom/android/server/display/color/ColorDisplayService$1;-><init>(Lcom/android/server/display/color/ColorDisplayService;Landroid/os/Handler;Landroid/content/ContentResolver;)V
 PLcom/android/server/display/color/ColorDisplayService$1;->onChange(ZLandroid/net/Uri;)V
@@ -22364,9 +23402,9 @@
 PLcom/android/server/display/color/ColorDisplayService$BinderService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/display/color/ColorDisplayService$BinderService;->getColorMode()I
 HPLcom/android/server/display/color/ColorDisplayService$BinderService;->getNightDisplayAutoMode()I
-PLcom/android/server/display/color/ColorDisplayService$BinderService;->getNightDisplayAutoModeRaw()I
+HPLcom/android/server/display/color/ColorDisplayService$BinderService;->getNightDisplayAutoModeRaw()I
 PLcom/android/server/display/color/ColorDisplayService$BinderService;->getNightDisplayColorTemperature()I
-PLcom/android/server/display/color/ColorDisplayService$BinderService;->getNightDisplayCustomEndTime()Landroid/hardware/display/Time;
+HPLcom/android/server/display/color/ColorDisplayService$BinderService;->getNightDisplayCustomEndTime()Landroid/hardware/display/Time;
 HPLcom/android/server/display/color/ColorDisplayService$BinderService;->getNightDisplayCustomStartTime()Landroid/hardware/display/Time;
 PLcom/android/server/display/color/ColorDisplayService$BinderService;->getReduceBrightColorsOffsetFactor()F
 PLcom/android/server/display/color/ColorDisplayService$BinderService;->getReduceBrightColorsStrength()I
@@ -22384,7 +23422,7 @@
 PLcom/android/server/display/color/ColorDisplayService$BinderService;->setReduceBrightColorsActivated(Z)Z
 PLcom/android/server/display/color/ColorDisplayService$BinderService;->setSaturationLevel(I)Z
 HSPLcom/android/server/display/color/ColorDisplayService$ColorDisplayServiceInternal;-><init>(Lcom/android/server/display/color/ColorDisplayService;)V
-HPLcom/android/server/display/color/ColorDisplayService$ColorDisplayServiceInternal;->attachColorTransformController(Ljava/lang/String;ILjava/lang/ref/WeakReference;)Z
+HSPLcom/android/server/display/color/ColorDisplayService$ColorDisplayServiceInternal;->attachColorTransformController(Ljava/lang/String;ILjava/lang/ref/WeakReference;)Z
 HPLcom/android/server/display/color/ColorDisplayService$ColorDisplayServiceInternal;->getDisplayWhiteBalanceLuminance()F
 PLcom/android/server/display/color/ColorDisplayService$ColorDisplayServiceInternal;->getReduceBrightColorsAdjustedBrightnessNits(F)F
 HSPLcom/android/server/display/color/ColorDisplayService$ColorDisplayServiceInternal;->isDisplayWhiteBalanceEnabled()Z
@@ -22405,6 +23443,7 @@
 PLcom/android/server/display/color/ColorDisplayService$CustomNightDisplayAutoMode;->onAlarm()V
 PLcom/android/server/display/color/ColorDisplayService$CustomNightDisplayAutoMode;->onCustomEndTimeChanged(Ljava/time/LocalTime;)V
 PLcom/android/server/display/color/ColorDisplayService$CustomNightDisplayAutoMode;->onStart()V
+PLcom/android/server/display/color/ColorDisplayService$CustomNightDisplayAutoMode;->onStop()V
 PLcom/android/server/display/color/ColorDisplayService$CustomNightDisplayAutoMode;->updateActivated()V
 PLcom/android/server/display/color/ColorDisplayService$CustomNightDisplayAutoMode;->updateNextAlarm(Ljava/lang/Boolean;Ljava/time/LocalDateTime;)V
 PLcom/android/server/display/color/ColorDisplayService$NightDisplayAutoMode;-><init>(Lcom/android/server/display/color/ColorDisplayService;)V
@@ -22433,32 +23472,32 @@
 PLcom/android/server/display/color/ColorDisplayService$TintValueAnimator;-><init>()V
 PLcom/android/server/display/color/ColorDisplayService$TintValueAnimator;->getMax()[F
 PLcom/android/server/display/color/ColorDisplayService$TintValueAnimator;->getMin()[F
-HPLcom/android/server/display/color/ColorDisplayService$TintValueAnimator;->ofMatrix(Lcom/android/server/display/color/ColorDisplayService$ColorMatrixEvaluator;[Ljava/lang/Object;)Lcom/android/server/display/color/ColorDisplayService$TintValueAnimator;
+HPLcom/android/server/display/color/ColorDisplayService$TintValueAnimator;->ofMatrix(Lcom/android/server/display/color/ColorDisplayService$ColorMatrixEvaluator;[Ljava/lang/Object;)Lcom/android/server/display/color/ColorDisplayService$TintValueAnimator;+]Landroid/animation/ValueAnimator;Lcom/android/server/display/color/ColorDisplayService$TintValueAnimator;
 HPLcom/android/server/display/color/ColorDisplayService$TintValueAnimator;->updateMinMaxComponents()V+]Landroid/animation/ValueAnimator;Lcom/android/server/display/color/ColorDisplayService$TintValueAnimator;
 PLcom/android/server/display/color/ColorDisplayService$TwilightNightDisplayAutoMode;-><init>(Lcom/android/server/display/color/ColorDisplayService;)V
 PLcom/android/server/display/color/ColorDisplayService$TwilightNightDisplayAutoMode;->onActivated(Z)V
 PLcom/android/server/display/color/ColorDisplayService$TwilightNightDisplayAutoMode;->onStart()V
 PLcom/android/server/display/color/ColorDisplayService$TwilightNightDisplayAutoMode;->onStop()V
-PLcom/android/server/display/color/ColorDisplayService$TwilightNightDisplayAutoMode;->onTwilightStateChanged(Lcom/android/server/twilight/TwilightState;)V
+HPLcom/android/server/display/color/ColorDisplayService$TwilightNightDisplayAutoMode;->onTwilightStateChanged(Lcom/android/server/twilight/TwilightState;)V
 HPLcom/android/server/display/color/ColorDisplayService$TwilightNightDisplayAutoMode;->updateActivated(Lcom/android/server/twilight/TwilightState;)V
 HPLcom/android/server/display/color/ColorDisplayService;->$r8$lambda$-6SRj2w8CA2IkowcIpt6fwPL9Vw(Lcom/android/server/display/color/DisplayTransformManager;Lcom/android/server/display/color/TintController;Landroid/animation/ValueAnimator;)V
-HPLcom/android/server/display/color/ColorDisplayService;->-$$Nest$fgetmAppSaturationController(Lcom/android/server/display/color/ColorDisplayService;)Lcom/android/server/display/color/AppSaturationController;
+HSPLcom/android/server/display/color/ColorDisplayService;->-$$Nest$fgetmAppSaturationController(Lcom/android/server/display/color/ColorDisplayService;)Lcom/android/server/display/color/AppSaturationController;
 PLcom/android/server/display/color/ColorDisplayService;->-$$Nest$fgetmBootCompleted(Lcom/android/server/display/color/ColorDisplayService;)Z
 PLcom/android/server/display/color/ColorDisplayService;->-$$Nest$fgetmCurrentUser(Lcom/android/server/display/color/ColorDisplayService;)I
 PLcom/android/server/display/color/ColorDisplayService;->-$$Nest$fgetmGlobalSaturationTintController(Lcom/android/server/display/color/ColorDisplayService;)Lcom/android/server/display/color/TintController;
 PLcom/android/server/display/color/ColorDisplayService;->-$$Nest$fgetmNightDisplayAutoMode(Lcom/android/server/display/color/ColorDisplayService;)Lcom/android/server/display/color/ColorDisplayService$NightDisplayAutoMode;
-PLcom/android/server/display/color/ColorDisplayService;->-$$Nest$fgetmNightDisplayTintController(Lcom/android/server/display/color/ColorDisplayService;)Lcom/android/server/display/color/ColorDisplayService$NightDisplayTintController;
+HPLcom/android/server/display/color/ColorDisplayService;->-$$Nest$fgetmNightDisplayTintController(Lcom/android/server/display/color/ColorDisplayService;)Lcom/android/server/display/color/ColorDisplayService$NightDisplayTintController;
 HSPLcom/android/server/display/color/ColorDisplayService;->-$$Nest$fgetmReduceBrightColorsTintController(Lcom/android/server/display/color/ColorDisplayService;)Lcom/android/server/display/color/ReduceBrightColorsTintController;
 HSPLcom/android/server/display/color/ColorDisplayService;->-$$Nest$fputmDisplayWhiteBalanceListener(Lcom/android/server/display/color/ColorDisplayService;Lcom/android/server/display/color/ColorDisplayService$DisplayWhiteBalanceListener;)V
 HSPLcom/android/server/display/color/ColorDisplayService;->-$$Nest$fputmReduceBrightColorsListener(Lcom/android/server/display/color/ColorDisplayService;Lcom/android/server/display/color/ColorDisplayService$ReduceBrightColorsListener;)V
 PLcom/android/server/display/color/ColorDisplayService;->-$$Nest$fputmUserSetupObserver(Lcom/android/server/display/color/ColorDisplayService;Landroid/database/ContentObserver;)V
-PLcom/android/server/display/color/ColorDisplayService;->-$$Nest$mapplyTint(Lcom/android/server/display/color/ColorDisplayService;Lcom/android/server/display/color/TintController;Z)V
+HPLcom/android/server/display/color/ColorDisplayService;->-$$Nest$mapplyTint(Lcom/android/server/display/color/ColorDisplayService;Lcom/android/server/display/color/TintController;Z)V
 PLcom/android/server/display/color/ColorDisplayService;->-$$Nest$mdumpInternal(Lcom/android/server/display/color/ColorDisplayService;Ljava/io/PrintWriter;)V
 PLcom/android/server/display/color/ColorDisplayService;->-$$Nest$mgetColorModeInternal(Lcom/android/server/display/color/ColorDisplayService;)I
-PLcom/android/server/display/color/ColorDisplayService;->-$$Nest$mgetNightDisplayAutoModeInternal(Lcom/android/server/display/color/ColorDisplayService;)I
+HPLcom/android/server/display/color/ColorDisplayService;->-$$Nest$mgetNightDisplayAutoModeInternal(Lcom/android/server/display/color/ColorDisplayService;)I
 PLcom/android/server/display/color/ColorDisplayService;->-$$Nest$mgetNightDisplayAutoModeRawInternal(Lcom/android/server/display/color/ColorDisplayService;)I
 PLcom/android/server/display/color/ColorDisplayService;->-$$Nest$mgetNightDisplayCustomEndTimeInternal(Lcom/android/server/display/color/ColorDisplayService;)Landroid/hardware/display/Time;
-PLcom/android/server/display/color/ColorDisplayService;->-$$Nest$mgetNightDisplayCustomStartTimeInternal(Lcom/android/server/display/color/ColorDisplayService;)Landroid/hardware/display/Time;
+HPLcom/android/server/display/color/ColorDisplayService;->-$$Nest$mgetNightDisplayCustomStartTimeInternal(Lcom/android/server/display/color/ColorDisplayService;)Landroid/hardware/display/Time;
 PLcom/android/server/display/color/ColorDisplayService;->-$$Nest$mgetNightDisplayLastActivatedTimeSetting(Lcom/android/server/display/color/ColorDisplayService;)Ljava/time/LocalDateTime;
 PLcom/android/server/display/color/ColorDisplayService;->-$$Nest$mgetTransformCapabilitiesInternal(Lcom/android/server/display/color/ColorDisplayService;)I
 PLcom/android/server/display/color/ColorDisplayService;->-$$Nest$misDeviceColorManagedInternal(Lcom/android/server/display/color/ColorDisplayService;)Z
@@ -22499,7 +23538,7 @@
 PLcom/android/server/display/color/ColorDisplayService;->isDeviceColorManagedInternal()Z
 HSPLcom/android/server/display/color/ColorDisplayService;->isDisplayWhiteBalanceSettingEnabled()Z
 HSPLcom/android/server/display/color/ColorDisplayService;->isUserSetupCompleted(Landroid/content/ContentResolver;I)Z
-HPLcom/android/server/display/color/ColorDisplayService;->lambda$applyTint$0(Lcom/android/server/display/color/DisplayTransformManager;Lcom/android/server/display/color/TintController;Landroid/animation/ValueAnimator;)V+]Lcom/android/server/display/color/ColorDisplayService$TintValueAnimator;Lcom/android/server/display/color/ColorDisplayService$TintValueAnimator;]Lcom/android/server/display/color/TintController;Lcom/android/server/display/color/DisplayWhiteBalanceTintController;,Lcom/android/server/display/color/GlobalSaturationTintController;,Lcom/android/server/display/color/ColorDisplayService$NightDisplayTintController;]Lcom/android/server/display/color/DisplayTransformManager;Lcom/android/server/display/color/DisplayTransformManager;]Landroid/animation/ValueAnimator;Lcom/android/server/display/color/ColorDisplayService$TintValueAnimator;
+HPLcom/android/server/display/color/ColorDisplayService;->lambda$applyTint$0(Lcom/android/server/display/color/DisplayTransformManager;Lcom/android/server/display/color/TintController;Landroid/animation/ValueAnimator;)V+]Lcom/android/server/display/color/ColorDisplayService$TintValueAnimator;Lcom/android/server/display/color/ColorDisplayService$TintValueAnimator;]Lcom/android/server/display/color/TintController;Lcom/android/server/display/color/DisplayWhiteBalanceTintController;,Lcom/android/server/display/color/ColorDisplayService$NightDisplayTintController;,Lcom/android/server/display/color/GlobalSaturationTintController;]Lcom/android/server/display/color/DisplayTransformManager;Lcom/android/server/display/color/DisplayTransformManager;]Landroid/animation/ValueAnimator;Lcom/android/server/display/color/ColorDisplayService$TintValueAnimator;
 PLcom/android/server/display/color/ColorDisplayService;->onAccessibilityActivated()V
 PLcom/android/server/display/color/ColorDisplayService;->onAccessibilityDaltonizerChanged()V
 PLcom/android/server/display/color/ColorDisplayService;->onAccessibilityInversionChanged()V
@@ -22552,13 +23591,13 @@
 PLcom/android/server/display/color/DisplayWhiteBalanceTintController;->getDisplayColorSpaceFromSurfaceControl()Landroid/graphics/ColorSpace$Rgb;
 HPLcom/android/server/display/color/DisplayWhiteBalanceTintController;->getLevel()I
 HPLcom/android/server/display/color/DisplayWhiteBalanceTintController;->getLuminance()F
-PLcom/android/server/display/color/DisplayWhiteBalanceTintController;->getMatrix()[F
+HPLcom/android/server/display/color/DisplayWhiteBalanceTintController;->getMatrix()[F
 PLcom/android/server/display/color/DisplayWhiteBalanceTintController;->isAvailable(Landroid/content/Context;)Z
-PLcom/android/server/display/color/DisplayWhiteBalanceTintController;->isColorMatrixCoeffValid(F)Z
+HPLcom/android/server/display/color/DisplayWhiteBalanceTintController;->isColorMatrixCoeffValid(F)Z
 PLcom/android/server/display/color/DisplayWhiteBalanceTintController;->isColorMatrixValid([F)Z
 PLcom/android/server/display/color/DisplayWhiteBalanceTintController;->makeRgbColorSpaceFromXYZ([F[F)Landroid/graphics/ColorSpace$Rgb;
 PLcom/android/server/display/color/DisplayWhiteBalanceTintController;->mul3x3([F[F)[F
-HPLcom/android/server/display/color/DisplayWhiteBalanceTintController;->setMatrix(I)V
+HPLcom/android/server/display/color/DisplayWhiteBalanceTintController;->setMatrix(I)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/display/color/DisplayWhiteBalanceTintController;Lcom/android/server/display/color/DisplayWhiteBalanceTintController;]Landroid/graphics/ColorSpace$Rgb;Landroid/graphics/ColorSpace$Rgb;
 PLcom/android/server/display/color/DisplayWhiteBalanceTintController;->setUp(Landroid/content/Context;Z)V
 HSPLcom/android/server/display/color/GlobalSaturationTintController;-><init>()V
 PLcom/android/server/display/color/GlobalSaturationTintController;->getLevel()I
@@ -22810,7 +23849,7 @@
 HPLcom/android/server/display/utils/RollingBuffer;->getLatestIndexBefore(J)I+]Lcom/android/server/display/utils/RollingBuffer;Lcom/android/server/display/utils/RollingBuffer;
 HSPLcom/android/server/display/utils/RollingBuffer;->getTime(I)J+]Lcom/android/server/display/utils/RollingBuffer;Lcom/android/server/display/utils/RollingBuffer;
 HSPLcom/android/server/display/utils/RollingBuffer;->getValue(I)F+]Lcom/android/server/display/utils/RollingBuffer;Lcom/android/server/display/utils/RollingBuffer;
-HSPLcom/android/server/display/utils/RollingBuffer;->isEmpty()Z
+HSPLcom/android/server/display/utils/RollingBuffer;->isEmpty()Z+]Lcom/android/server/display/utils/RollingBuffer;Lcom/android/server/display/utils/RollingBuffer;
 HSPLcom/android/server/display/utils/RollingBuffer;->offsetOf(I)I
 HSPLcom/android/server/display/utils/RollingBuffer;->size()I
 PLcom/android/server/display/utils/RollingBuffer;->toString()Ljava/lang/String;
@@ -22829,26 +23868,26 @@
 PLcom/android/server/display/whitebalance/AmbientSensor$AmbientColorTemperatureSensor;->dump(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/display/whitebalance/AmbientSensor$AmbientColorTemperatureSensor;->setCallbacks(Lcom/android/server/display/whitebalance/AmbientSensor$AmbientColorTemperatureSensor$Callbacks;)Z
 HPLcom/android/server/display/whitebalance/AmbientSensor$AmbientColorTemperatureSensor;->update(F)V
-HPLcom/android/server/display/whitebalance/AmbientSensor;->-$$Nest$mhandleNewEvent(Lcom/android/server/display/whitebalance/AmbientSensor;F)V
+HPLcom/android/server/display/whitebalance/AmbientSensor;->-$$Nest$mhandleNewEvent(Lcom/android/server/display/whitebalance/AmbientSensor;F)V+]Lcom/android/server/display/whitebalance/AmbientSensor;Lcom/android/server/display/whitebalance/AmbientSensor$AmbientColorTemperatureSensor;,Lcom/android/server/display/whitebalance/AmbientSensor$AmbientBrightnessSensor;
 HSPLcom/android/server/display/whitebalance/AmbientSensor;-><init>(Ljava/lang/String;Landroid/os/Handler;Landroid/hardware/SensorManager;I)V
-PLcom/android/server/display/whitebalance/AmbientSensor;->disable()Z
+HPLcom/android/server/display/whitebalance/AmbientSensor;->disable()Z
 PLcom/android/server/display/whitebalance/AmbientSensor;->dump(Ljava/io/PrintWriter;)V
-PLcom/android/server/display/whitebalance/AmbientSensor;->enable()Z
+HPLcom/android/server/display/whitebalance/AmbientSensor;->enable()Z
 HPLcom/android/server/display/whitebalance/AmbientSensor;->handleNewEvent(F)V+]Lcom/android/server/display/utils/History;Lcom/android/server/display/utils/History;]Lcom/android/server/display/whitebalance/AmbientSensor;Lcom/android/server/display/whitebalance/AmbientSensor$AmbientColorTemperatureSensor;,Lcom/android/server/display/whitebalance/AmbientSensor$AmbientBrightnessSensor;
 PLcom/android/server/display/whitebalance/AmbientSensor;->setEnabled(Z)Z
-PLcom/android/server/display/whitebalance/AmbientSensor;->startListening()V
-PLcom/android/server/display/whitebalance/AmbientSensor;->stopListening()V
+HPLcom/android/server/display/whitebalance/AmbientSensor;->startListening()V
+HPLcom/android/server/display/whitebalance/AmbientSensor;->stopListening()V
 HSPLcom/android/server/display/whitebalance/AmbientSensor;->validateArguments(Landroid/os/Handler;Landroid/hardware/SensorManager;I)V
 HSPLcom/android/server/display/whitebalance/DisplayWhiteBalanceController;-><init>(Lcom/android/server/display/whitebalance/AmbientSensor$AmbientBrightnessSensor;Lcom/android/server/display/utils/AmbientFilter;Lcom/android/server/display/whitebalance/AmbientSensor$AmbientColorTemperatureSensor;Lcom/android/server/display/utils/AmbientFilter;Lcom/android/server/display/whitebalance/DisplayWhiteBalanceThrottler;[F[FF[F[FF[F[F[F[F)V
 HPLcom/android/server/display/whitebalance/DisplayWhiteBalanceController;->calculateAdjustedBrightnessNits(F)F
 HSPLcom/android/server/display/whitebalance/DisplayWhiteBalanceController;->disable()Z
 PLcom/android/server/display/whitebalance/DisplayWhiteBalanceController;->dump(Ljava/io/PrintWriter;)V
-PLcom/android/server/display/whitebalance/DisplayWhiteBalanceController;->enable()Z
+HPLcom/android/server/display/whitebalance/DisplayWhiteBalanceController;->enable()Z
 PLcom/android/server/display/whitebalance/DisplayWhiteBalanceController;->onAmbientBrightnessChanged(F)V
-HPLcom/android/server/display/whitebalance/DisplayWhiteBalanceController;->onAmbientColorTemperatureChanged(F)V
+HPLcom/android/server/display/whitebalance/DisplayWhiteBalanceController;->onAmbientColorTemperatureChanged(F)V+]Lcom/android/server/display/whitebalance/DisplayWhiteBalanceController;Lcom/android/server/display/whitebalance/DisplayWhiteBalanceController;]Lcom/android/server/display/utils/AmbientFilter;Lcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;
 HSPLcom/android/server/display/whitebalance/DisplayWhiteBalanceController;->setCallbacks(Lcom/android/server/display/whitebalance/DisplayWhiteBalanceController$Callbacks;)Z
 HSPLcom/android/server/display/whitebalance/DisplayWhiteBalanceController;->setEnabled(Z)Z
-PLcom/android/server/display/whitebalance/DisplayWhiteBalanceController;->setStrongModeEnabled(Z)V
+HPLcom/android/server/display/whitebalance/DisplayWhiteBalanceController;->setStrongModeEnabled(Z)V
 HPLcom/android/server/display/whitebalance/DisplayWhiteBalanceController;->updateAmbientColorTemperature()V+]Landroid/util/Spline$LinearSpline;Landroid/util/Spline$LinearSpline;]Lcom/android/server/display/utils/AmbientFilter;Lcom/android/server/display/utils/AmbientFilter$WeightedMovingAverageAmbientFilter;]Lcom/android/server/display/whitebalance/DisplayWhiteBalanceThrottler;Lcom/android/server/display/whitebalance/DisplayWhiteBalanceThrottler;]Lcom/android/server/display/whitebalance/DisplayWhiteBalanceController$Callbacks;Lcom/android/server/display/DisplayPowerController;
 HPLcom/android/server/display/whitebalance/DisplayWhiteBalanceController;->updateDisplayColorTemperature()V
 HSPLcom/android/server/display/whitebalance/DisplayWhiteBalanceController;->validateArguments(Lcom/android/server/display/whitebalance/AmbientSensor$AmbientBrightnessSensor;Lcom/android/server/display/utils/AmbientFilter;Lcom/android/server/display/whitebalance/AmbientSensor$AmbientColorTemperatureSensor;Lcom/android/server/display/utils/AmbientFilter;Lcom/android/server/display/whitebalance/DisplayWhiteBalanceThrottler;)V
@@ -22882,8 +23921,9 @@
 HPLcom/android/server/display/whitebalance/DisplayWhiteBalanceThrottler;->tooSoon(F)Z
 HSPLcom/android/server/display/whitebalance/DisplayWhiteBalanceThrottler;->validateArguments(FF[F[F[F)V
 HSPLcom/android/server/dreams/DreamController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/dreams/DreamController;)V
-PLcom/android/server/dreams/DreamController$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/dreams/DreamController;Lcom/android/server/dreams/DreamController$DreamRecord;)V
-PLcom/android/server/dreams/DreamController$$ExternalSyntheticLambda1;->run()V
+PLcom/android/server/dreams/DreamController$$ExternalSyntheticLambda0;->run()V
+HPLcom/android/server/dreams/DreamController$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/dreams/DreamController;Lcom/android/server/dreams/DreamController$DreamRecord;)V
+HPLcom/android/server/dreams/DreamController$$ExternalSyntheticLambda1;->run()V
 HSPLcom/android/server/dreams/DreamController$1;-><init>(Lcom/android/server/dreams/DreamController;)V
 HPLcom/android/server/dreams/DreamController$1;->run()V
 PLcom/android/server/dreams/DreamController$DreamRecord$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/dreams/DreamController$DreamRecord;)V
@@ -22893,7 +23933,7 @@
 PLcom/android/server/dreams/DreamController$DreamRecord$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/dreams/DreamController$DreamRecord;)V
 PLcom/android/server/dreams/DreamController$DreamRecord$$ExternalSyntheticLambda2;->run()V
 HPLcom/android/server/dreams/DreamController$DreamRecord$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/dreams/DreamController$DreamRecord;Landroid/os/IBinder;)V
-PLcom/android/server/dreams/DreamController$DreamRecord$$ExternalSyntheticLambda3;->run()V
+HPLcom/android/server/dreams/DreamController$DreamRecord$$ExternalSyntheticLambda3;->run()V
 PLcom/android/server/dreams/DreamController$DreamRecord$1;-><init>(Lcom/android/server/dreams/DreamController$DreamRecord;)V
 HPLcom/android/server/dreams/DreamController$DreamRecord$1;->sendResult(Landroid/os/Bundle;)V
 PLcom/android/server/dreams/DreamController$DreamRecord;->$r8$lambda$KlQ-75XRewY__SD5ZBrDMlNoC8Q(Lcom/android/server/dreams/DreamController$DreamRecord;)V
@@ -22909,6 +23949,7 @@
 HPLcom/android/server/dreams/DreamController$DreamRecord;->releaseWakeLockIfNeeded()V
 PLcom/android/server/dreams/DreamController$Listener;->onDreamStopped(Landroid/os/Binder;)V
 PLcom/android/server/dreams/DreamController;->$r8$lambda$l7qszohe6DdTRzuFGFeC6E3UFwc(Lcom/android/server/dreams/DreamController;Lcom/android/server/dreams/DreamController$DreamRecord;)V
+PLcom/android/server/dreams/DreamController;->$r8$lambda$s0-PjqcFvDQ2ef4CtAZmJfIInKU(Lcom/android/server/dreams/DreamController;)V
 PLcom/android/server/dreams/DreamController;->-$$Nest$fgetmCurrentDream(Lcom/android/server/dreams/DreamController;)Lcom/android/server/dreams/DreamController$DreamRecord;
 HPLcom/android/server/dreams/DreamController;->-$$Nest$fgetmHandler(Lcom/android/server/dreams/DreamController;)Landroid/os/Handler;
 PLcom/android/server/dreams/DreamController;->-$$Nest$mattach(Lcom/android/server/dreams/DreamController;Landroid/service/dreams/IDreamService;)V
@@ -22916,18 +23957,18 @@
 HPLcom/android/server/dreams/DreamController;->attach(Landroid/service/dreams/IDreamService;)V
 PLcom/android/server/dreams/DreamController;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/dreams/DreamController;->lambda$new$0()V
-PLcom/android/server/dreams/DreamController;->lambda$stopDream$1(Lcom/android/server/dreams/DreamController$DreamRecord;)V
+HPLcom/android/server/dreams/DreamController;->lambda$stopDream$1(Lcom/android/server/dreams/DreamController$DreamRecord;)V
 HPLcom/android/server/dreams/DreamController;->startDream(Landroid/os/Binder;Landroid/content/ComponentName;ZZILandroid/os/PowerManager$WakeLock;Landroid/content/ComponentName;)V
 HPLcom/android/server/dreams/DreamController;->stopDream(ZLjava/lang/String;)V
 HPLcom/android/server/dreams/DreamManagerService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/dreams/DreamManagerService;Landroid/os/Binder;Landroid/content/ComponentName;ZZILandroid/os/PowerManager$WakeLock;)V
 HPLcom/android/server/dreams/DreamManagerService$$ExternalSyntheticLambda0;->run()V
-PLcom/android/server/dreams/DreamManagerService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/dreams/DreamManagerService;)V
+HPLcom/android/server/dreams/DreamManagerService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/dreams/DreamManagerService;)V
 PLcom/android/server/dreams/DreamManagerService$$ExternalSyntheticLambda1;->run()V
 HSPLcom/android/server/dreams/DreamManagerService$1;-><init>(Lcom/android/server/dreams/DreamManagerService;)V
 HSPLcom/android/server/dreams/DreamManagerService$1;->intercept(Lcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptorInfo;)Lcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptResult;
-HPLcom/android/server/dreams/DreamManagerService$1;->onActivityLaunched(Landroid/app/TaskInfo;Landroid/content/pm/ActivityInfo;Lcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptorInfo;)V
+HSPLcom/android/server/dreams/DreamManagerService$1;->onActivityLaunched(Landroid/app/TaskInfo;Landroid/content/pm/ActivityInfo;Lcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptorInfo;)V
 HSPLcom/android/server/dreams/DreamManagerService$2;-><init>(Lcom/android/server/dreams/DreamManagerService;)V
-PLcom/android/server/dreams/DreamManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/dreams/DreamManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/dreams/DreamManagerService$3;-><init>(Lcom/android/server/dreams/DreamManagerService;)V
 PLcom/android/server/dreams/DreamManagerService$3;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HPLcom/android/server/dreams/DreamManagerService$4;-><init>(Lcom/android/server/dreams/DreamManagerService;ZLjava/lang/String;)V
@@ -22969,15 +24010,15 @@
 PLcom/android/server/dreams/DreamManagerService;->-$$Nest$fgetmCurrentDreamIsDozing(Lcom/android/server/dreams/DreamManagerService;)Z
 HPLcom/android/server/dreams/DreamManagerService;->-$$Nest$fgetmCurrentDreamIsWaking(Lcom/android/server/dreams/DreamManagerService;)Z
 PLcom/android/server/dreams/DreamManagerService;->-$$Nest$fgetmCurrentDreamName(Lcom/android/server/dreams/DreamManagerService;)Landroid/content/ComponentName;
-HPLcom/android/server/dreams/DreamManagerService;->-$$Nest$fgetmCurrentDreamToken(Lcom/android/server/dreams/DreamManagerService;)Landroid/os/Binder;
-PLcom/android/server/dreams/DreamManagerService;->-$$Nest$fgetmLock(Lcom/android/server/dreams/DreamManagerService;)Ljava/lang/Object;
+HSPLcom/android/server/dreams/DreamManagerService;->-$$Nest$fgetmCurrentDreamToken(Lcom/android/server/dreams/DreamManagerService;)Landroid/os/Binder;
+HSPLcom/android/server/dreams/DreamManagerService;->-$$Nest$fgetmLock(Lcom/android/server/dreams/DreamManagerService;)Ljava/lang/Object;
 PLcom/android/server/dreams/DreamManagerService;->-$$Nest$fgetmPowerManager(Lcom/android/server/dreams/DreamManagerService;)Landroid/os/PowerManager;
 PLcom/android/server/dreams/DreamManagerService;->-$$Nest$fputmDreamOverlayServiceName(Lcom/android/server/dreams/DreamManagerService;Landroid/content/ComponentName;)V
 HPLcom/android/server/dreams/DreamManagerService;->-$$Nest$mcheckPermission(Lcom/android/server/dreams/DreamManagerService;Ljava/lang/String;)V
 PLcom/android/server/dreams/DreamManagerService;->-$$Nest$mcleanupDreamLocked(Lcom/android/server/dreams/DreamManagerService;)V
 PLcom/android/server/dreams/DreamManagerService;->-$$Nest$mdumpInternal(Lcom/android/server/dreams/DreamManagerService;Ljava/io/PrintWriter;)V
 PLcom/android/server/dreams/DreamManagerService;->-$$Nest$mfinishSelfInternal(Lcom/android/server/dreams/DreamManagerService;Landroid/os/IBinder;Z)V
-PLcom/android/server/dreams/DreamManagerService;->-$$Nest$mforceAmbientDisplayEnabledInternal(Lcom/android/server/dreams/DreamManagerService;Z)V
+HPLcom/android/server/dreams/DreamManagerService;->-$$Nest$mforceAmbientDisplayEnabledInternal(Lcom/android/server/dreams/DreamManagerService;Z)V
 PLcom/android/server/dreams/DreamManagerService;->-$$Nest$mgetActiveDreamComponentInternal(Lcom/android/server/dreams/DreamManagerService;Z)Landroid/content/ComponentName;
 PLcom/android/server/dreams/DreamManagerService;->-$$Nest$mgetDefaultDreamComponentForUser(Lcom/android/server/dreams/DreamManagerService;I)Landroid/content/ComponentName;
 PLcom/android/server/dreams/DreamManagerService;->-$$Nest$mgetDreamComponentsForUser(Lcom/android/server/dreams/DreamManagerService;I)[Landroid/content/ComponentName;
@@ -22988,9 +24029,9 @@
 HPLcom/android/server/dreams/DreamManagerService;->-$$Nest$mstartDozingInternal(Lcom/android/server/dreams/DreamManagerService;Landroid/os/IBinder;II)V
 PLcom/android/server/dreams/DreamManagerService;->-$$Nest$mstartDreamInternal(Lcom/android/server/dreams/DreamManagerService;Z)V
 PLcom/android/server/dreams/DreamManagerService;->-$$Nest$mstopDreamInternal(Lcom/android/server/dreams/DreamManagerService;ZLjava/lang/String;)V
-HPLcom/android/server/dreams/DreamManagerService;->-$$Nest$mstopDreamLocked(Lcom/android/server/dreams/DreamManagerService;ZLjava/lang/String;)V
+HSPLcom/android/server/dreams/DreamManagerService;->-$$Nest$mstopDreamLocked(Lcom/android/server/dreams/DreamManagerService;ZLjava/lang/String;)V
 PLcom/android/server/dreams/DreamManagerService;->-$$Nest$mtestDreamInternal(Lcom/android/server/dreams/DreamManagerService;Landroid/content/ComponentName;I)V
-PLcom/android/server/dreams/DreamManagerService;->-$$Nest$mwritePulseGestureEnabled(Lcom/android/server/dreams/DreamManagerService;)V
+HSPLcom/android/server/dreams/DreamManagerService;->-$$Nest$mwritePulseGestureEnabled(Lcom/android/server/dreams/DreamManagerService;)V
 HSPLcom/android/server/dreams/DreamManagerService;-><init>(Landroid/content/Context;)V
 HPLcom/android/server/dreams/DreamManagerService;->checkPermission(Ljava/lang/String;)V
 PLcom/android/server/dreams/DreamManagerService;->chooseDreamForUser(ZI)Landroid/content/ComponentName;
@@ -23000,7 +24041,7 @@
 PLcom/android/server/dreams/DreamManagerService;->dreamsEnabledForUser(I)Z
 PLcom/android/server/dreams/DreamManagerService;->dumpInternal(Ljava/io/PrintWriter;)V
 HPLcom/android/server/dreams/DreamManagerService;->finishSelfInternal(Landroid/os/IBinder;Z)V
-PLcom/android/server/dreams/DreamManagerService;->forceAmbientDisplayEnabledInternal(Z)V
+HPLcom/android/server/dreams/DreamManagerService;->forceAmbientDisplayEnabledInternal(Z)V
 PLcom/android/server/dreams/DreamManagerService;->getActiveDreamComponentInternal(Z)Landroid/content/ComponentName;
 PLcom/android/server/dreams/DreamManagerService;->getDefaultDreamComponentForUser(I)Landroid/content/ComponentName;
 HSPLcom/android/server/dreams/DreamManagerService;->getDozeComponent()Landroid/content/ComponentName;
@@ -23020,7 +24061,7 @@
 HPLcom/android/server/dreams/DreamManagerService;->startDreamLocked(Landroid/content/ComponentName;ZZI)V
 PLcom/android/server/dreams/DreamManagerService;->stopDozingInternal(Landroid/os/IBinder;)V
 HPLcom/android/server/dreams/DreamManagerService;->stopDreamInternal(ZLjava/lang/String;)V
-HPLcom/android/server/dreams/DreamManagerService;->stopDreamLocked(ZLjava/lang/String;)V
+HSPLcom/android/server/dreams/DreamManagerService;->stopDreamLocked(ZLjava/lang/String;)V
 PLcom/android/server/dreams/DreamManagerService;->testDreamInternal(Landroid/content/ComponentName;I)V
 HSPLcom/android/server/dreams/DreamManagerService;->validateDream(Landroid/content/ComponentName;)Z
 HSPLcom/android/server/dreams/DreamManagerService;->writePulseGestureEnabled()V
@@ -23034,19 +24075,19 @@
 HSPLcom/android/server/emergency/EmergencyAffordanceService$1;-><init>(Lcom/android/server/emergency/EmergencyAffordanceService;)V
 PLcom/android/server/emergency/EmergencyAffordanceService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/emergency/EmergencyAffordanceService$2;-><init>(Lcom/android/server/emergency/EmergencyAffordanceService;)V
-HPLcom/android/server/emergency/EmergencyAffordanceService$2;->onSubscriptionsChanged()V
+HSPLcom/android/server/emergency/EmergencyAffordanceService$2;->onSubscriptionsChanged()V
 HSPLcom/android/server/emergency/EmergencyAffordanceService$BinderService;-><init>(Lcom/android/server/emergency/EmergencyAffordanceService;)V
 HSPLcom/android/server/emergency/EmergencyAffordanceService$BinderService;-><init>(Lcom/android/server/emergency/EmergencyAffordanceService;Lcom/android/server/emergency/EmergencyAffordanceService$BinderService-IA;)V
 PLcom/android/server/emergency/EmergencyAffordanceService$BinderService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/emergency/EmergencyAffordanceService$MyHandler;-><init>(Lcom/android/server/emergency/EmergencyAffordanceService;Landroid/os/Looper;)V
 HSPLcom/android/server/emergency/EmergencyAffordanceService$MyHandler;->handleMessage(Landroid/os/Message;)V
 PLcom/android/server/emergency/EmergencyAffordanceService;->-$$Nest$fgetmContext(Lcom/android/server/emergency/EmergencyAffordanceService;)Landroid/content/Context;
-PLcom/android/server/emergency/EmergencyAffordanceService;->-$$Nest$fgetmHandler(Lcom/android/server/emergency/EmergencyAffordanceService;)Lcom/android/server/emergency/EmergencyAffordanceService$MyHandler;
+HSPLcom/android/server/emergency/EmergencyAffordanceService;->-$$Nest$fgetmHandler(Lcom/android/server/emergency/EmergencyAffordanceService;)Lcom/android/server/emergency/EmergencyAffordanceService$MyHandler;
 PLcom/android/server/emergency/EmergencyAffordanceService;->-$$Nest$mdumpInternal(Lcom/android/server/emergency/EmergencyAffordanceService;Lcom/android/internal/util/IndentingPrintWriter;)V
 HSPLcom/android/server/emergency/EmergencyAffordanceService;->-$$Nest$mhandleInitializeState(Lcom/android/server/emergency/EmergencyAffordanceService;)V
 PLcom/android/server/emergency/EmergencyAffordanceService;->-$$Nest$mhandleNetworkCountryChanged(Lcom/android/server/emergency/EmergencyAffordanceService;Ljava/lang/String;I)V
 PLcom/android/server/emergency/EmergencyAffordanceService;->-$$Nest$mhandleUpdateAirplaneModeStatus(Lcom/android/server/emergency/EmergencyAffordanceService;)V
-PLcom/android/server/emergency/EmergencyAffordanceService;->-$$Nest$mhandleUpdateSimSubscriptionInfo(Lcom/android/server/emergency/EmergencyAffordanceService;)V
+HSPLcom/android/server/emergency/EmergencyAffordanceService;->-$$Nest$mhandleUpdateSimSubscriptionInfo(Lcom/android/server/emergency/EmergencyAffordanceService;)V
 HSPLcom/android/server/emergency/EmergencyAffordanceService;-><init>(Landroid/content/Context;)V
 PLcom/android/server/emergency/EmergencyAffordanceService;->dumpInternal(Lcom/android/internal/util/IndentingPrintWriter;)V
 HSPLcom/android/server/emergency/EmergencyAffordanceService;->handleInitializeState()V
@@ -23213,6 +24254,7 @@
 HSPLcom/android/server/graphics/fonts/UpdatableFontDir;-><init>(Ljava/io/File;Lcom/android/server/graphics/fonts/UpdatableFontDir$FontFileParser;Lcom/android/server/graphics/fonts/UpdatableFontDir$FsverityUtil;Ljava/io/File;)V
 HSPLcom/android/server/graphics/fonts/UpdatableFontDir;-><init>(Ljava/io/File;Lcom/android/server/graphics/fonts/UpdatableFontDir$FontFileParser;Lcom/android/server/graphics/fonts/UpdatableFontDir$FsverityUtil;Ljava/io/File;Ljava/util/function/Supplier;Ljava/util/function/Function;)V
 HSPLcom/android/server/graphics/fonts/UpdatableFontDir;->addFileToMapIfSameOrNewer(Lcom/android/server/graphics/fonts/UpdatableFontDir$FontFileInfo;Landroid/text/FontConfig;Z)Z
+PLcom/android/server/graphics/fonts/UpdatableFontDir;->deleteAllFiles(Ljava/io/File;Ljava/io/File;)V
 HSPLcom/android/server/graphics/fonts/UpdatableFontDir;->getFontRevision(Ljava/io/File;)J
 HSPLcom/android/server/graphics/fonts/UpdatableFontDir;->getPostScriptMap()Ljava/util/Map;
 HSPLcom/android/server/graphics/fonts/UpdatableFontDir;->getPreinstalledFontRevision(Lcom/android/server/graphics/fonts/UpdatableFontDir$FontFileInfo;Landroid/text/FontConfig;)J
@@ -23236,7 +24278,7 @@
 HSPLcom/android/server/health/HealthHalCallbackHidl;->traceEnd()V
 HSPLcom/android/server/health/HealthRegCallbackAidl$HalInfoCallback;-><init>(Lcom/android/server/health/HealthRegCallbackAidl;)V
 HSPLcom/android/server/health/HealthRegCallbackAidl$HalInfoCallback;-><init>(Lcom/android/server/health/HealthRegCallbackAidl;Lcom/android/server/health/HealthRegCallbackAidl$HalInfoCallback-IA;)V
-HSPLcom/android/server/health/HealthRegCallbackAidl$HalInfoCallback;->healthInfoChanged(Landroid/hardware/health/HealthInfo;)V
+HSPLcom/android/server/health/HealthRegCallbackAidl$HalInfoCallback;->healthInfoChanged(Landroid/hardware/health/HealthInfo;)V+]Lcom/android/server/health/HealthInfoCallback;Lcom/android/server/BatteryService$$ExternalSyntheticLambda0;
 HSPLcom/android/server/health/HealthRegCallbackAidl;->-$$Nest$fgetmServiceInfoCallback(Lcom/android/server/health/HealthRegCallbackAidl;)Lcom/android/server/health/HealthInfoCallback;
 HSPLcom/android/server/health/HealthRegCallbackAidl;-><init>(Lcom/android/server/health/HealthInfoCallback;)V
 HSPLcom/android/server/health/HealthRegCallbackAidl;->onRegistration(Landroid/hardware/health/IHealth;Landroid/hardware/health/IHealth;)V
@@ -23294,8 +24336,8 @@
 HPLcom/android/server/health/HealthServiceWrapperHidl$$ExternalSyntheticLambda7;->onValues(ILandroid/hardware/health/V2_0/HealthInfo;)V
 HSPLcom/android/server/health/HealthServiceWrapperHidl$IHealthSupplier;->get(Ljava/lang/String;)Landroid/hardware/health/V2_0/IHealth;
 HSPLcom/android/server/health/HealthServiceWrapperHidl$IServiceManagerSupplier;->get()Landroid/hidl/manager/V1_0/IServiceManager;
-PLcom/android/server/health/HealthServiceWrapperHidl$Mutable;-><init>()V
-PLcom/android/server/health/HealthServiceWrapperHidl$Mutable;-><init>(Lcom/android/server/health/HealthServiceWrapperHidl$Mutable-IA;)V
+HPLcom/android/server/health/HealthServiceWrapperHidl$Mutable;-><init>()V
+HPLcom/android/server/health/HealthServiceWrapperHidl$Mutable;-><init>(Lcom/android/server/health/HealthServiceWrapperHidl$Mutable-IA;)V
 HSPLcom/android/server/health/HealthServiceWrapperHidl$Notification$1;-><init>(Lcom/android/server/health/HealthServiceWrapperHidl$Notification;)V
 HSPLcom/android/server/health/HealthServiceWrapperHidl$Notification$1;->run()V
 HSPLcom/android/server/health/HealthServiceWrapperHidl$Notification;-><init>(Lcom/android/server/health/HealthServiceWrapperHidl;)V
@@ -23308,7 +24350,7 @@
 HSPLcom/android/server/health/HealthServiceWrapperHidl;->$r8$lambda$YaEuXWoiXEvq0-2EznUpd1qYwzY(Lcom/android/server/health/HealthServiceWrapperHidl;)V
 HPLcom/android/server/health/HealthServiceWrapperHidl;->$r8$lambda$c01OwGo4HPQ71MNANEaztjOhYQ8(Landroid/util/MutableInt;Landroid/os/BatteryProperty;IJ)V
 HPLcom/android/server/health/HealthServiceWrapperHidl;->$r8$lambda$q0nG6sdUvv_TlbB7dbRLMbvqdHY(Landroid/util/MutableInt;Landroid/os/BatteryProperty;II)V
-PLcom/android/server/health/HealthServiceWrapperHidl;->$r8$lambda$vIRfsHqaEOqEXnSr3gw6JYKeE7c(Lcom/android/server/health/HealthServiceWrapperHidl$Mutable;ILandroid/hardware/health/V2_0/HealthInfo;)V
+HPLcom/android/server/health/HealthServiceWrapperHidl;->$r8$lambda$vIRfsHqaEOqEXnSr3gw6JYKeE7c(Lcom/android/server/health/HealthServiceWrapperHidl$Mutable;ILandroid/hardware/health/V2_0/HealthInfo;)V
 HSPLcom/android/server/health/HealthServiceWrapperHidl;->-$$Nest$fgetmHandlerThread(Lcom/android/server/health/HealthServiceWrapperHidl;)Landroid/os/HandlerThread;
 HSPLcom/android/server/health/HealthServiceWrapperHidl;->-$$Nest$fgetmHealthSupplier(Lcom/android/server/health/HealthServiceWrapperHidl;)Lcom/android/server/health/HealthServiceWrapperHidl$IHealthSupplier;
 HSPLcom/android/server/health/HealthServiceWrapperHidl;->-$$Nest$fgetmInstanceName(Lcom/android/server/health/HealthServiceWrapperHidl;)Ljava/lang/String;
@@ -23316,7 +24358,7 @@
 HSPLcom/android/server/health/HealthServiceWrapperHidl;-><init>(Lcom/android/server/health/HealthServiceWrapperHidl$Callback;Lcom/android/server/health/HealthServiceWrapperHidl$IServiceManagerSupplier;Lcom/android/server/health/HealthServiceWrapperHidl$IHealthSupplier;)V
 HSPLcom/android/server/health/HealthServiceWrapperHidl;->getHandlerThread()Landroid/os/HandlerThread;
 HPLcom/android/server/health/HealthServiceWrapperHidl;->getHealthInfo()Landroid/hardware/health/HealthInfo;
-HPLcom/android/server/health/HealthServiceWrapperHidl;->getProperty(ILandroid/os/BatteryProperty;)I
+HPLcom/android/server/health/HealthServiceWrapperHidl;->getProperty(ILandroid/os/BatteryProperty;)I+]Landroid/hardware/health/V2_0/IHealth;Landroid/hardware/health/V2_0/IHealth$Proxy;]Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/atomic/AtomicReference;
 HPLcom/android/server/health/HealthServiceWrapperHidl;->lambda$getHealthInfo$7(Lcom/android/server/health/HealthServiceWrapperHidl$Mutable;ILandroid/hardware/health/V2_0/HealthInfo;)V
 HPLcom/android/server/health/HealthServiceWrapperHidl;->lambda$getProperty$0(Landroid/util/MutableInt;Landroid/os/BatteryProperty;II)V
 HPLcom/android/server/health/HealthServiceWrapperHidl;->lambda$getProperty$1(Landroid/util/MutableInt;Landroid/os/BatteryProperty;II)V
@@ -23334,23 +24376,24 @@
 PLcom/android/server/incident/IncidentCompanionService$BinderService;->authorizeReport(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/os/IIncidentAuthListener;)V
 PLcom/android/server/incident/IncidentCompanionService$BinderService;->cancelAuthorization(Landroid/os/IIncidentAuthListener;)V
 PLcom/android/server/incident/IncidentCompanionService$BinderService;->deleteIncidentReports(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/incident/IncidentCompanionService$BinderService;->denyReport(Ljava/lang/String;)V
 PLcom/android/server/incident/IncidentCompanionService$BinderService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/incident/IncidentCompanionService$BinderService;->dumpRestrictedImages(Ljava/io/FileDescriptor;)V
-PLcom/android/server/incident/IncidentCompanionService$BinderService;->enforceAccessReportsPermissions(Ljava/lang/String;)V
+HPLcom/android/server/incident/IncidentCompanionService$BinderService;->enforceAccessReportsPermissions(Ljava/lang/String;)V
 PLcom/android/server/incident/IncidentCompanionService$BinderService;->enforceAuthorizePermission()V
 PLcom/android/server/incident/IncidentCompanionService$BinderService;->enforceCallerIsSameApp(Ljava/lang/String;)V
-PLcom/android/server/incident/IncidentCompanionService$BinderService;->enforceRequestAuthorizationPermission()V
+HSPLcom/android/server/incident/IncidentCompanionService$BinderService;->enforceRequestAuthorizationPermission()V
 PLcom/android/server/incident/IncidentCompanionService$BinderService;->getIncidentReport(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/os/IncidentManager$IncidentReport;
 PLcom/android/server/incident/IncidentCompanionService$BinderService;->getIncidentReportList(Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
 PLcom/android/server/incident/IncidentCompanionService$BinderService;->getPendingReports()Ljava/util/List;
-HPLcom/android/server/incident/IncidentCompanionService$BinderService;->sendReportReadyBroadcast(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/incident/IncidentCompanionService$BinderService;->sendReportReadyBroadcast(Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/incident/IncidentCompanionService;->-$$Nest$fgetmPendingReports(Lcom/android/server/incident/IncidentCompanionService;)Lcom/android/server/incident/PendingReports;
 PLcom/android/server/incident/IncidentCompanionService;->-$$Nest$mgetIIncidentManager(Lcom/android/server/incident/IncidentCompanionService;)Landroid/os/IIncidentManager;
-PLcom/android/server/incident/IncidentCompanionService;->-$$Nest$sfgetDUMP_AND_USAGE_STATS_PERMISSIONS()[Ljava/lang/String;
+HSPLcom/android/server/incident/IncidentCompanionService;->-$$Nest$sfgetDUMP_AND_USAGE_STATS_PERMISSIONS()[Ljava/lang/String;
 PLcom/android/server/incident/IncidentCompanionService;->-$$Nest$sfgetRESTRICTED_IMAGE_DUMP_ARGS()[Ljava/lang/String;
 HSPLcom/android/server/incident/IncidentCompanionService;-><clinit>()V
 HSPLcom/android/server/incident/IncidentCompanionService;-><init>(Landroid/content/Context;)V
-PLcom/android/server/incident/IncidentCompanionService;->getAndValidateUser(Landroid/content/Context;)I
+HSPLcom/android/server/incident/IncidentCompanionService;->getAndValidateUser(Landroid/content/Context;)I
 PLcom/android/server/incident/IncidentCompanionService;->getIIncidentManager()Landroid/os/IIncidentManager;
 HSPLcom/android/server/incident/IncidentCompanionService;->onBootPhase(I)V
 HSPLcom/android/server/incident/IncidentCompanionService;->onStart()V
@@ -23374,6 +24417,7 @@
 PLcom/android/server/incident/PendingReports;->cancelAuthorization(Landroid/os/IIncidentAuthListener;)V
 PLcom/android/server/incident/PendingReports;->cancelReportImpl(Landroid/os/IIncidentAuthListener;)V
 PLcom/android/server/incident/PendingReports;->cancelReportImpl(Landroid/os/IIncidentAuthListener;Landroid/content/ComponentName;I)V
+PLcom/android/server/incident/PendingReports;->denyReport(Ljava/lang/String;)V
 PLcom/android/server/incident/PendingReports;->denyReportBeforeAddingRec(Landroid/os/IIncidentAuthListener;Ljava/lang/String;)V
 PLcom/android/server/incident/PendingReports;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/incident/PendingReports;->findAndRemovePendingReportRecLocked(Ljava/lang/String;)Lcom/android/server/incident/PendingReports$PendingReportRec;
@@ -23398,25 +24442,25 @@
 HSPLcom/android/server/infra/AbstractMasterSystemService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/infra/AbstractMasterSystemService;)V
 PLcom/android/server/infra/AbstractMasterSystemService$$ExternalSyntheticLambda0;->onNameResolved(ILjava/lang/String;Z)V
 HSPLcom/android/server/infra/AbstractMasterSystemService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/infra/AbstractMasterSystemService;Ljava/lang/String;)V
-PLcom/android/server/infra/AbstractMasterSystemService$$ExternalSyntheticLambda1;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
+HSPLcom/android/server/infra/AbstractMasterSystemService$$ExternalSyntheticLambda1;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
 PLcom/android/server/infra/AbstractMasterSystemService$1$$ExternalSyntheticLambda0;-><init>(Ljava/lang/String;)V
-PLcom/android/server/infra/AbstractMasterSystemService$1$$ExternalSyntheticLambda0;->visit(Ljava/lang/Object;)V
+HPLcom/android/server/infra/AbstractMasterSystemService$1$$ExternalSyntheticLambda0;->visit(Ljava/lang/Object;)V
 PLcom/android/server/infra/AbstractMasterSystemService$1;->$r8$lambda$mJ_S1_laoXXj7HCiDoy18XRSr14(Ljava/lang/String;Lcom/android/server/infra/AbstractPerUserSystemService;)V
 HSPLcom/android/server/infra/AbstractMasterSystemService$1;-><init>(Lcom/android/server/infra/AbstractMasterSystemService;)V
-PLcom/android/server/infra/AbstractMasterSystemService$1;->getActiveServicePackageNameLocked()Ljava/lang/String;
+HPLcom/android/server/infra/AbstractMasterSystemService$1;->getActiveServicePackageNameLocked()Ljava/lang/String;
 PLcom/android/server/infra/AbstractMasterSystemService$1;->handleActiveServiceRestartedLocked(Ljava/lang/String;I)V
 HPLcom/android/server/infra/AbstractMasterSystemService$1;->handlePackageUpdateLocked(Ljava/lang/String;)V
 PLcom/android/server/infra/AbstractMasterSystemService$1;->lambda$handlePackageUpdateLocked$0(Ljava/lang/String;Lcom/android/server/infra/AbstractPerUserSystemService;)V
 PLcom/android/server/infra/AbstractMasterSystemService$1;->onHandleForceStop(Landroid/content/Intent;[Ljava/lang/String;IZ)Z
 PLcom/android/server/infra/AbstractMasterSystemService$1;->onPackageDataCleared(Ljava/lang/String;I)V
 HPLcom/android/server/infra/AbstractMasterSystemService$1;->onPackageModified(Ljava/lang/String;)V+]Lcom/android/server/infra/AbstractMasterSystemService$1;Lcom/android/server/infra/AbstractMasterSystemService$1;]Lcom/android/internal/content/PackageMonitor;Lcom/android/server/infra/AbstractMasterSystemService$1;]Lcom/android/server/infra/ServiceNameResolver;Lcom/android/server/infra/SecureSettingsServiceNameResolver;,Lcom/android/server/infra/FrameworkResourcesServiceNameResolver;
-PLcom/android/server/infra/AbstractMasterSystemService$1;->onPackageRemoved(Ljava/lang/String;I)V
+HPLcom/android/server/infra/AbstractMasterSystemService$1;->onPackageRemoved(Ljava/lang/String;I)V
 HPLcom/android/server/infra/AbstractMasterSystemService$1;->onPackageUpdateFinished(Ljava/lang/String;I)V
 PLcom/android/server/infra/AbstractMasterSystemService$1;->onPackageUpdateStarted(Ljava/lang/String;I)V
 HPLcom/android/server/infra/AbstractMasterSystemService$1;->peekAndUpdateCachedServiceLocked(Ljava/lang/String;ILjava/lang/String;)V+]Landroid/content/ComponentName;Landroid/content/ComponentName;
 HSPLcom/android/server/infra/AbstractMasterSystemService$SettingsObserver;-><init>(Lcom/android/server/infra/AbstractMasterSystemService;Landroid/os/Handler;)V
 PLcom/android/server/infra/AbstractMasterSystemService$SettingsObserver;->onChange(ZLandroid/net/Uri;I)V
-HPLcom/android/server/infra/AbstractMasterSystemService;->$r8$lambda$PxI_NOd_w_XVlHtV92tGC-JO0R4(Lcom/android/server/infra/AbstractMasterSystemService;Ljava/lang/String;ILandroid/os/Bundle;Landroid/os/Bundle;)V
+HSPLcom/android/server/infra/AbstractMasterSystemService;->$r8$lambda$PxI_NOd_w_XVlHtV92tGC-JO0R4(Lcom/android/server/infra/AbstractMasterSystemService;Ljava/lang/String;ILandroid/os/Bundle;Landroid/os/Bundle;)V
 PLcom/android/server/infra/AbstractMasterSystemService;->-$$Nest$fgetmServicePackagePolicyFlags(Lcom/android/server/infra/AbstractMasterSystemService;)I
 PLcom/android/server/infra/AbstractMasterSystemService;->-$$Nest$fgetmServicesCacheList(Lcom/android/server/infra/AbstractMasterSystemService;)Landroid/util/SparseArray;
 PLcom/android/server/infra/AbstractMasterSystemService;->-$$Nest$fgetmUpdatingPackageNames(Lcom/android/server/infra/AbstractMasterSystemService;)Landroid/util/SparseArray;
@@ -23429,14 +24473,14 @@
 PLcom/android/server/infra/AbstractMasterSystemService;->enforceCallingPermissionForManagement()V
 PLcom/android/server/infra/AbstractMasterSystemService;->getAllowInstantService()Z
 PLcom/android/server/infra/AbstractMasterSystemService;->getMaximumTemporaryServiceDurationMs()I
-HSPLcom/android/server/infra/AbstractMasterSystemService;->getServiceForUserLocked(I)Lcom/android/server/infra/AbstractPerUserSystemService;
-HSPLcom/android/server/infra/AbstractMasterSystemService;->getServiceListForUserLocked(I)Ljava/util/List;
+HSPLcom/android/server/infra/AbstractMasterSystemService;->getServiceForUserLocked(I)Lcom/android/server/infra/AbstractPerUserSystemService;+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/infra/AbstractMasterSystemService;megamorphic_types
+HSPLcom/android/server/infra/AbstractMasterSystemService;->getServiceListForUserLocked(I)Ljava/util/List;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/infra/ServiceNameResolver;Lcom/android/server/infra/SecureSettingsServiceNameResolver;,Lcom/android/server/infra/FrameworkResourcesServiceNameResolver;]Lcom/android/server/infra/AbstractMasterSystemService;megamorphic_types
 HSPLcom/android/server/infra/AbstractMasterSystemService;->getServiceSettingsProperty()Ljava/lang/String;
 HSPLcom/android/server/infra/AbstractMasterSystemService;->getSupportedUsers()Ljava/util/List;
 HSPLcom/android/server/infra/AbstractMasterSystemService;->getUserManagerInternal()Lcom/android/server/pm/UserManagerInternal;
 HSPLcom/android/server/infra/AbstractMasterSystemService;->isBindInstantServiceAllowed()Z
 HSPLcom/android/server/infra/AbstractMasterSystemService;->isDisabledLocked(I)Z
-HPLcom/android/server/infra/AbstractMasterSystemService;->lambda$new$0(Ljava/lang/String;ILandroid/os/Bundle;Landroid/os/Bundle;)V
+HSPLcom/android/server/infra/AbstractMasterSystemService;->lambda$new$0(Ljava/lang/String;ILandroid/os/Bundle;Landroid/os/Bundle;)V
 HPLcom/android/server/infra/AbstractMasterSystemService;->newServiceListLocked(IZ[Ljava/lang/String;)Ljava/util/List;
 PLcom/android/server/infra/AbstractMasterSystemService;->newServiceLocked(IZ)Lcom/android/server/infra/AbstractPerUserSystemService;
 HSPLcom/android/server/infra/AbstractMasterSystemService;->onBootPhase(I)V
@@ -23446,28 +24490,28 @@
 PLcom/android/server/infra/AbstractMasterSystemService;->onServicePackageRestartedLocked(I)V
 PLcom/android/server/infra/AbstractMasterSystemService;->onServicePackageUpdatedLocked(I)V
 PLcom/android/server/infra/AbstractMasterSystemService;->onServicePackageUpdatingLocked(I)V
-PLcom/android/server/infra/AbstractMasterSystemService;->onServiceRemoved(Lcom/android/server/infra/AbstractPerUserSystemService;I)V
+HSPLcom/android/server/infra/AbstractMasterSystemService;->onServiceRemoved(Lcom/android/server/infra/AbstractPerUserSystemService;I)V
 PLcom/android/server/infra/AbstractMasterSystemService;->onSettingsChanged(ILjava/lang/String;)V
 PLcom/android/server/infra/AbstractMasterSystemService;->onUserStopped(Lcom/android/server/SystemService$TargetUser;)V
 PLcom/android/server/infra/AbstractMasterSystemService;->onUserUnlocking(Lcom/android/server/SystemService$TargetUser;)V
-HPLcom/android/server/infra/AbstractMasterSystemService;->peekServiceForUserLocked(I)Lcom/android/server/infra/AbstractPerUserSystemService;+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/infra/AbstractMasterSystemService;megamorphic_types
-HPLcom/android/server/infra/AbstractMasterSystemService;->peekServiceListForUserLocked(I)Ljava/util/List;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/infra/AbstractMasterSystemService;->peekServiceForUserLocked(I)Lcom/android/server/infra/AbstractPerUserSystemService;+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/infra/AbstractMasterSystemService;megamorphic_types
+HSPLcom/android/server/infra/AbstractMasterSystemService;->peekServiceListForUserLocked(I)Ljava/util/List;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/infra/AbstractMasterSystemService;->registerForExtraSettingsChanges(Landroid/content/ContentResolver;Landroid/database/ContentObserver;)V
-PLcom/android/server/infra/AbstractMasterSystemService;->removeCachedServiceListLocked(I)Ljava/util/List;
+HSPLcom/android/server/infra/AbstractMasterSystemService;->removeCachedServiceListLocked(I)Ljava/util/List;
 PLcom/android/server/infra/AbstractMasterSystemService;->resetTemporaryService(I)V
 PLcom/android/server/infra/AbstractMasterSystemService;->setTemporaryService(ILjava/lang/String;I)V
 HPLcom/android/server/infra/AbstractMasterSystemService;->setTemporaryServices(I[Ljava/lang/String;I)V
 HSPLcom/android/server/infra/AbstractMasterSystemService;->startTrackingPackageChanges()V
-PLcom/android/server/infra/AbstractMasterSystemService;->updateCachedServiceListLocked(IZ)Ljava/util/List;
+HSPLcom/android/server/infra/AbstractMasterSystemService;->updateCachedServiceListLocked(IZ)Ljava/util/List;
 PLcom/android/server/infra/AbstractMasterSystemService;->updateCachedServiceLocked(I)V
-PLcom/android/server/infra/AbstractMasterSystemService;->updateCachedServiceLocked(IZ)Lcom/android/server/infra/AbstractPerUserSystemService;
+HSPLcom/android/server/infra/AbstractMasterSystemService;->updateCachedServiceLocked(IZ)Lcom/android/server/infra/AbstractPerUserSystemService;
 HPLcom/android/server/infra/AbstractMasterSystemService;->visitServicesLocked(Lcom/android/server/infra/AbstractMasterSystemService$Visitor;)V
 HSPLcom/android/server/infra/AbstractPerUserSystemService;-><init>(Lcom/android/server/infra/AbstractMasterSystemService;Ljava/lang/Object;I)V
 PLcom/android/server/infra/AbstractPerUserSystemService;->dumpLocked(Ljava/lang/String;Ljava/io/PrintWriter;)V
 PLcom/android/server/infra/AbstractPerUserSystemService;->getComponentNameForMultipleLocked(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/infra/AbstractPerUserSystemService;->getComponentNameLocked()Ljava/lang/String;
-HSPLcom/android/server/infra/AbstractPerUserSystemService;->getContext()Landroid/content/Context;
-PLcom/android/server/infra/AbstractPerUserSystemService;->getMaster()Lcom/android/server/infra/AbstractMasterSystemService;
+HSPLcom/android/server/infra/AbstractPerUserSystemService;->getContext()Landroid/content/Context;+]Lcom/android/server/SystemService;megamorphic_types
+HPLcom/android/server/infra/AbstractPerUserSystemService;->getMaster()Lcom/android/server/infra/AbstractMasterSystemService;
 HSPLcom/android/server/infra/AbstractPerUserSystemService;->getServiceComponent(Ljava/lang/String;)Landroid/content/ComponentName;
 HPLcom/android/server/infra/AbstractPerUserSystemService;->getServiceComponentName()Landroid/content/ComponentName;+]Landroid/content/pm/ServiceInfo;Landroid/content/pm/ServiceInfo;
 PLcom/android/server/infra/AbstractPerUserSystemService;->getServiceIconLocked()Landroid/graphics/drawable/Drawable;
@@ -23475,7 +24519,7 @@
 HPLcom/android/server/infra/AbstractPerUserSystemService;->getServicePackageName()Ljava/lang/String;
 HPLcom/android/server/infra/AbstractPerUserSystemService;->getServiceUidLocked()I
 PLcom/android/server/infra/AbstractPerUserSystemService;->getTargedSdkLocked()I
-PLcom/android/server/infra/AbstractPerUserSystemService;->getUserId()I
+HPLcom/android/server/infra/AbstractPerUserSystemService;->getUserId()I
 PLcom/android/server/infra/AbstractPerUserSystemService;->handlePackageUpdateLocked(Ljava/lang/String;)V
 HSPLcom/android/server/infra/AbstractPerUserSystemService;->isDebug()Z
 HSPLcom/android/server/infra/AbstractPerUserSystemService;->isDisabledByUserRestrictionsLocked()Z
@@ -23496,7 +24540,7 @@
 HSPLcom/android/server/infra/FrameworkResourcesServiceNameResolver;-><init>(Landroid/content/Context;IZ)V
 PLcom/android/server/infra/FrameworkResourcesServiceNameResolver;->dumpShort(Ljava/io/PrintWriter;)V
 PLcom/android/server/infra/FrameworkResourcesServiceNameResolver;->dumpShort(Ljava/io/PrintWriter;I)V
-PLcom/android/server/infra/FrameworkResourcesServiceNameResolver;->getDefaultServiceName(I)Ljava/lang/String;
+HPLcom/android/server/infra/FrameworkResourcesServiceNameResolver;->getDefaultServiceName(I)Ljava/lang/String;
 HSPLcom/android/server/infra/FrameworkResourcesServiceNameResolver;->getDefaultServiceNameList(I)[Ljava/lang/String;+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HSPLcom/android/server/infra/FrameworkResourcesServiceNameResolver;->getServiceName(I)Ljava/lang/String;
 HSPLcom/android/server/infra/FrameworkResourcesServiceNameResolver;->getServiceNameList(I)[Ljava/lang/String;
@@ -23527,31 +24571,43 @@
 HPLcom/android/server/input/GestureMonitorSpyWindow;->remove()V
 PLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda0;-><init>()V
 PLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
+PLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda11;-><init>(Ljava/io/PrintWriter;Ljava/lang/String;)V
+PLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda11;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda12;-><init>([Ljava/lang/String;)V
+PLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda12;->visitKeyboardLayout(Landroid/content/res/Resources;ILandroid/hardware/input/KeyboardLayout;)V
 PLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda1;-><init>(Z)V
 PLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda2;-><init>(Ljava/util/List;)V
 HSPLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda3;->visitKeyboardLayout(Landroid/content/res/Resources;ILandroid/hardware/input/KeyboardLayout;)V
-PLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda5;-><init>(Ljava/util/HashSet;)V
-HPLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda5;->visitKeyboardLayout(Landroid/content/res/Resources;ILandroid/hardware/input/KeyboardLayout;)V
-PLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda7;-><init>(Lcom/android/server/input/InputManagerService;Landroid/view/InputChannel;)V
-PLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda7;->binderDied()V
+PLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda4;-><init>(Landroid/view/InputDevice;Ljava/util/Locale;Ljava/util/List;)V
+HPLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda4;->visitKeyboardLayout(Landroid/content/res/Resources;ILandroid/hardware/input/KeyboardLayout;)V
+HSPLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda5;-><init>(Ljava/util/HashSet;)V
+HSPLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda5;->visitKeyboardLayout(Landroid/content/res/Resources;ILandroid/hardware/input/KeyboardLayout;)V
+PLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda6;-><init>([Landroid/hardware/input/KeyboardLayout;)V
+PLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda6;->visitKeyboardLayout(Landroid/content/res/Resources;ILandroid/hardware/input/KeyboardLayout;)V
+HPLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda7;-><init>(Lcom/android/server/input/InputManagerService;Landroid/view/InputChannel;)V
+HPLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda7;->binderDied()V
 PLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda8;-><init>(F)V
 PLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda8;->accept(Ljava/lang/Object;)V
+PLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda9;-><init>(Ljava/io/PrintWriter;Ljava/lang/String;)V
+PLcom/android/server/input/InputManagerService$$ExternalSyntheticLambda9;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/input/InputManagerService$10;-><init>(Lcom/android/server/input/InputManagerService;Landroid/os/Handler;)V
 HSPLcom/android/server/input/InputManagerService$1;-><init>(Lcom/android/server/input/InputManagerService;)V
-PLcom/android/server/input/InputManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/input/InputManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/input/InputManagerService$2;-><init>(Lcom/android/server/input/InputManagerService;)V
 HPLcom/android/server/input/InputManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/input/InputManagerService$3;-><init>(Lcom/android/server/input/InputManagerService;)V
 PLcom/android/server/input/InputManagerService$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/input/InputManagerService$4;-><init>(Lcom/android/server/input/InputManagerService;[Ljava/lang/String;Ljava/util/ArrayList;Landroid/hardware/input/InputDeviceIdentifier;Ljava/util/ArrayList;)V
+PLcom/android/server/input/InputManagerService$4;->visitKeyboardLayout(Landroid/content/res/Resources;ILandroid/hardware/input/KeyboardLayout;)V
 HSPLcom/android/server/input/InputManagerService$5;-><init>(Lcom/android/server/input/InputManagerService;Landroid/os/Handler;)V
 PLcom/android/server/input/InputManagerService$5;->onChange(Z)V
 HSPLcom/android/server/input/InputManagerService$6;-><init>(Lcom/android/server/input/InputManagerService;Landroid/os/Handler;)V
 PLcom/android/server/input/InputManagerService$6;->onChange(Z)V
 HSPLcom/android/server/input/InputManagerService$7;-><init>(Lcom/android/server/input/InputManagerService;Landroid/os/Handler;)V
 HSPLcom/android/server/input/InputManagerService$8;-><init>(Lcom/android/server/input/InputManagerService;Landroid/os/Handler;)V
+PLcom/android/server/input/InputManagerService$8;->onChange(Z)V
 HSPLcom/android/server/input/InputManagerService$9;-><init>(Lcom/android/server/input/InputManagerService;Landroid/os/Handler;)V
 PLcom/android/server/input/InputManagerService$9;->onChange(Z)V
 HSPLcom/android/server/input/InputManagerService$AdditionalDisplayInputProperties;-><init>()V
@@ -23574,7 +24630,9 @@
 HSPLcom/android/server/input/InputManagerService$InputMonitorHost;-><init>(Lcom/android/server/input/InputManagerService;Landroid/os/IBinder;)V
 HPLcom/android/server/input/InputManagerService$InputMonitorHost;->dispose()V
 HPLcom/android/server/input/InputManagerService$InputMonitorHost;->pilferPointers()V
+PLcom/android/server/input/InputManagerService$KeyboardLayoutDescriptor;-><init>()V
 HSPLcom/android/server/input/InputManagerService$KeyboardLayoutDescriptor;->format(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+PLcom/android/server/input/InputManagerService$KeyboardLayoutDescriptor;->parse(Ljava/lang/String;)Lcom/android/server/input/InputManagerService$KeyboardLayoutDescriptor;
 PLcom/android/server/input/InputManagerService$KeyboardLayoutVisitor;->visitKeyboardLayout(Landroid/content/res/Resources;ILandroid/hardware/input/KeyboardLayout;)V
 PLcom/android/server/input/InputManagerService$LightSession;->-$$Nest$fgetmDeviceId(Lcom/android/server/input/InputManagerService$LightSession;)I
 PLcom/android/server/input/InputManagerService$LightSession;->-$$Nest$fgetmLightIds(Lcom/android/server/input/InputManagerService$LightSession;)[I
@@ -23584,8 +24642,8 @@
 HSPLcom/android/server/input/InputManagerService$LocalService;-><init>(Lcom/android/server/input/InputManagerService;)V
 HSPLcom/android/server/input/InputManagerService$LocalService;-><init>(Lcom/android/server/input/InputManagerService;Lcom/android/server/input/InputManagerService$LocalService-IA;)V
 PLcom/android/server/input/InputManagerService$LocalService;->createInputChannel(Ljava/lang/String;)Landroid/view/InputChannel;
-PLcom/android/server/input/InputManagerService$LocalService;->getCursorPosition()Landroid/graphics/PointF;
-PLcom/android/server/input/InputManagerService$LocalService;->getVirtualMousePointerDisplayId()I
+HPLcom/android/server/input/InputManagerService$LocalService;->getCursorPosition()Landroid/graphics/PointF;
+HPLcom/android/server/input/InputManagerService$LocalService;->getVirtualMousePointerDisplayId()I
 PLcom/android/server/input/InputManagerService$LocalService;->setDisplayEligibilityForPointerCapture(IZ)V
 HSPLcom/android/server/input/InputManagerService$LocalService;->setDisplayViewports(Ljava/util/List;)V
 HPLcom/android/server/input/InputManagerService$LocalService;->setInteractive(Z)V
@@ -23599,8 +24657,12 @@
 PLcom/android/server/input/InputManagerService$SensorEventListenerRecord;->getListener()Landroid/hardware/input/IInputSensorEventListener;
 PLcom/android/server/input/InputManagerService;->$r8$lambda$1mXaHjyvY6CqextHMBs-0Pafi_E(ZLcom/android/server/input/InputManagerService$AdditionalDisplayInputProperties;)V
 HSPLcom/android/server/input/InputManagerService;->$r8$lambda$2HJwF7hXz7bJDJx_IBa7Z0E5AZE(Ljava/util/List;Ljava/lang/String;Ljava/lang/Object;)V
+PLcom/android/server/input/InputManagerService;->$r8$lambda$A_LLKWdUMgSQygJid30YKdX4FBg([Ljava/lang/String;Landroid/content/res/Resources;ILandroid/hardware/input/KeyboardLayout;)V
+PLcom/android/server/input/InputManagerService;->$r8$lambda$NtwfM_rBuvGqDrdChiBS4lvAbRc(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;)V
 PLcom/android/server/input/InputManagerService;->$r8$lambda$QkG30iw0I7duv4crl8WnJfg-epI(FLcom/android/server/input/InputManagerService$AdditionalDisplayInputProperties;)V
+PLcom/android/server/input/InputManagerService;->$r8$lambda$Yto295RJsbR5BgTXil0hVbkcyBc([Landroid/hardware/input/KeyboardLayout;Landroid/content/res/Resources;ILandroid/hardware/input/KeyboardLayout;)V
 PLcom/android/server/input/InputManagerService;->$r8$lambda$ZQrlgG0pA6GPzUR-zOrYur-LkMU(Lcom/android/server/input/InputManagerService;Landroid/view/InputChannel;)V
+PLcom/android/server/input/InputManagerService;->$r8$lambda$k9vDLVJC5CK3_tXTihoRxh_HRk0(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/input/InputManagerService;->$r8$lambda$w4gnA1fY10c6RkqhVntn-9_mOY8(Ljava/util/HashSet;Landroid/content/res/Resources;ILandroid/hardware/input/KeyboardLayout;)V
 PLcom/android/server/input/InputManagerService;->$r8$lambda$y9OoOzcheSEYNhs-qAMovZqtmsI(Landroid/view/InputDevice;Ljava/util/Locale;Ljava/util/List;Landroid/content/res/Resources;ILandroid/hardware/input/KeyboardLayout;)V
 HSPLcom/android/server/input/InputManagerService;->-$$Nest$fgetmDoubleTouchGestureEnableFile(Lcom/android/server/input/InputManagerService;)Ljava/io/File;
@@ -23608,23 +24670,25 @@
 PLcom/android/server/input/InputManagerService;->-$$Nest$fgetmWindowManagerCallbacks(Lcom/android/server/input/InputManagerService;)Lcom/android/server/input/InputManagerService$WindowManagerCallbacks;
 HPLcom/android/server/input/InputManagerService;->-$$Nest$mcheckCallingPermission(Lcom/android/server/input/InputManagerService;Ljava/lang/String;Ljava/lang/String;)Z
 HSPLcom/android/server/input/InputManagerService;->-$$Nest$mdeliverInputDevicesChanged(Lcom/android/server/input/InputManagerService;[Landroid/view/InputDevice;)V
-PLcom/android/server/input/InputManagerService;->-$$Nest$mgetVirtualMousePointerDisplayId(Lcom/android/server/input/InputManagerService;)I
+HPLcom/android/server/input/InputManagerService;->-$$Nest$mgetVirtualMousePointerDisplayId(Lcom/android/server/input/InputManagerService;)I
 HSPLcom/android/server/input/InputManagerService;->-$$Nest$mhandlePointerDisplayIdChanged(Lcom/android/server/input/InputManagerService;Lcom/android/server/input/InputManagerService$PointerDisplayIdChangedArgs;)V
+PLcom/android/server/input/InputManagerService;->-$$Nest$mhandleSwitchKeyboardLayout(Lcom/android/server/input/InputManagerService;II)V
 PLcom/android/server/input/InputManagerService;->-$$Nest$monInputDevicesChangedListenerDied(Lcom/android/server/input/InputManagerService;I)V
 HSPLcom/android/server/input/InputManagerService;->-$$Nest$mreloadDeviceAliases(Lcom/android/server/input/InputManagerService;)V
+PLcom/android/server/input/InputManagerService;->-$$Nest$mreloadKeyboardLayouts(Lcom/android/server/input/InputManagerService;)V
 PLcom/android/server/input/InputManagerService;->-$$Nest$mremoveSpyWindowGestureMonitor(Lcom/android/server/input/InputManagerService;Landroid/os/IBinder;)V
 PLcom/android/server/input/InputManagerService;->-$$Nest$msetDisplayEligibilityForPointerCapture(Lcom/android/server/input/InputManagerService;IZ)V
 HSPLcom/android/server/input/InputManagerService;->-$$Nest$msetDisplayViewportsInternal(Lcom/android/server/input/InputManagerService;Ljava/util/List;)V
 PLcom/android/server/input/InputManagerService;->-$$Nest$msetPointerAcceleration(Lcom/android/server/input/InputManagerService;FI)V
 PLcom/android/server/input/InputManagerService;->-$$Nest$msetPointerIconVisible(Lcom/android/server/input/InputManagerService;ZI)V
 PLcom/android/server/input/InputManagerService;->-$$Nest$msetVirtualMousePointerDisplayIdBlocking(Lcom/android/server/input/InputManagerService;I)Z
-PLcom/android/server/input/InputManagerService;->-$$Nest$mupdateAccessibilityLargePointerFromSettings(Lcom/android/server/input/InputManagerService;)V
+HSPLcom/android/server/input/InputManagerService;->-$$Nest$mupdateAccessibilityLargePointerFromSettings(Lcom/android/server/input/InputManagerService;)V
 PLcom/android/server/input/InputManagerService;->-$$Nest$mupdateBlockUntrustedTouchesModeFromSettings(Lcom/android/server/input/InputManagerService;)V
-PLcom/android/server/input/InputManagerService;->-$$Nest$mupdateDeepPressStatusFromSettings(Lcom/android/server/input/InputManagerService;Ljava/lang/String;)V
+HSPLcom/android/server/input/InputManagerService;->-$$Nest$mupdateDeepPressStatusFromSettings(Lcom/android/server/input/InputManagerService;Ljava/lang/String;)V
 HSPLcom/android/server/input/InputManagerService;->-$$Nest$mupdateKeyboardLayouts(Lcom/android/server/input/InputManagerService;)V+]Lcom/android/server/input/InputManagerService;Lcom/android/server/input/InputManagerService;
 PLcom/android/server/input/InputManagerService;->-$$Nest$mupdateMaximumObscuringOpacityForTouchFromSettings(Lcom/android/server/input/InputManagerService;)V
-PLcom/android/server/input/InputManagerService;->-$$Nest$mupdatePointerSpeedFromSettings(Lcom/android/server/input/InputManagerService;)V
-PLcom/android/server/input/InputManagerService;->-$$Nest$mupdateShowTouchesFromSettings(Lcom/android/server/input/InputManagerService;)V
+HSPLcom/android/server/input/InputManagerService;->-$$Nest$mupdatePointerSpeedFromSettings(Lcom/android/server/input/InputManagerService;)V
+HSPLcom/android/server/input/InputManagerService;->-$$Nest$mupdateShowTouchesFromSettings(Lcom/android/server/input/InputManagerService;)V
 HSPLcom/android/server/input/InputManagerService;-><clinit>()V
 HSPLcom/android/server/input/InputManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/input/InputManagerService;-><init>(Lcom/android/server/input/InputManagerService$Injector;)V
@@ -23658,6 +24722,7 @@
 PLcom/android/server/input/InputManagerService;->getDefaultKeyboardLayout(Landroid/view/InputDevice;)Ljava/lang/String;
 HSPLcom/android/server/input/InputManagerService;->getDeviceAlias(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/input/InputManagerService;->getDoubleTapTimeout()I
+PLcom/android/server/input/InputManagerService;->getEnabledKeyboardLayoutsForInputDevice(Landroid/hardware/input/InputDeviceIdentifier;)[Ljava/lang/String;
 HSPLcom/android/server/input/InputManagerService;->getExcludedDeviceNames()[Ljava/lang/String;+]Ljava/util/List;Ljava/util/ArrayList;
 HSPLcom/android/server/input/InputManagerService;->getHoverTapSlop()I
 HSPLcom/android/server/input/InputManagerService;->getHoverTapTimeout()I
@@ -23679,7 +24744,7 @@
 PLcom/android/server/input/InputManagerService;->getLights(I)Ljava/util/List;
 HSPLcom/android/server/input/InputManagerService;->getLocalesFromLanguageTags(Ljava/lang/String;)Landroid/os/LocaleList;
 HSPLcom/android/server/input/InputManagerService;->getLongPressTimeout()I
-PLcom/android/server/input/InputManagerService;->getParentSurfaceForPointers(I)J
+HSPLcom/android/server/input/InputManagerService;->getParentSurfaceForPointers(I)J
 HSPLcom/android/server/input/InputManagerService;->getPointerIcon(I)Landroid/view/PointerIcon;
 HSPLcom/android/server/input/InputManagerService;->getPointerLayer()I
 HSPLcom/android/server/input/InputManagerService;->getPointerSpeedSetting()I
@@ -23688,29 +24753,32 @@
 HSPLcom/android/server/input/InputManagerService;->getSwitchState(III)I
 HSPLcom/android/server/input/InputManagerService;->getTouchCalibrationForInputDevice(Ljava/lang/String;I)Landroid/hardware/input/TouchCalibration;
 HSPLcom/android/server/input/InputManagerService;->getVirtualKeyQuietTimeMillis()I+]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/Context;Landroid/app/ContextImpl;
-PLcom/android/server/input/InputManagerService;->getVirtualMousePointerDisplayId()I
+HPLcom/android/server/input/InputManagerService;->getVirtualMousePointerDisplayId()I
 HSPLcom/android/server/input/InputManagerService;->handlePointerDisplayIdChanged(Lcom/android/server/input/InputManagerService$PointerDisplayIdChangedArgs;)V
 PLcom/android/server/input/InputManagerService;->handleSwitchKeyboardLayout(II)V
 HPLcom/android/server/input/InputManagerService;->hasKeys(II[I[Z)Z
 PLcom/android/server/input/InputManagerService;->hideMissingKeyboardLayoutNotification()V
 HPLcom/android/server/input/InputManagerService;->injectInputEvent(Landroid/view/InputEvent;I)Z
 HPLcom/android/server/input/InputManagerService;->injectInputEventToTarget(Landroid/view/InputEvent;II)Z
-PLcom/android/server/input/InputManagerService;->interceptKeyBeforeDispatching(Landroid/os/IBinder;Landroid/view/KeyEvent;I)J
+HPLcom/android/server/input/InputManagerService;->interceptKeyBeforeDispatching(Landroid/os/IBinder;Landroid/view/KeyEvent;I)J
 HPLcom/android/server/input/InputManagerService;->interceptKeyBeforeQueueing(Landroid/view/KeyEvent;I)I
 HPLcom/android/server/input/InputManagerService;->interceptMotionBeforeQueueingNonInteractive(IJI)I
 PLcom/android/server/input/InputManagerService;->isInTabletMode()I
 PLcom/android/server/input/InputManagerService;->isInputDeviceEnabled(I)Z
 HSPLcom/android/server/input/InputManagerService;->isMicMuted()I
 HPLcom/android/server/input/InputManagerService;->lambda$createSpyWindowGestureMonitor$0(Landroid/view/InputChannel;)V
+PLcom/android/server/input/InputManagerService;->lambda$dumpAssociations$7(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;)V
+PLcom/android/server/input/InputManagerService;->lambda$dumpAssociations$9(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/input/InputManagerService;->lambda$flatten$11(Ljava/util/List;Ljava/lang/String;Ljava/lang/Object;)V
 PLcom/android/server/input/InputManagerService;->lambda$getDefaultKeyboardLayout$1(Landroid/view/InputDevice;Ljava/util/Locale;Ljava/util/List;Landroid/content/res/Resources;ILandroid/hardware/input/KeyboardLayout;)V
 PLcom/android/server/input/InputManagerService;->lambda$getKeyboardLayout$4([Landroid/hardware/input/KeyboardLayout;Landroid/content/res/Resources;ILandroid/hardware/input/KeyboardLayout;)V
+PLcom/android/server/input/InputManagerService;->lambda$getKeyboardLayoutOverlay$12([Ljava/lang/String;Landroid/content/res/Resources;ILandroid/hardware/input/KeyboardLayout;)V
 PLcom/android/server/input/InputManagerService;->lambda$getKeyboardLayouts$3(Ljava/util/ArrayList;Landroid/content/res/Resources;ILandroid/hardware/input/KeyboardLayout;)V
 PLcom/android/server/input/InputManagerService;->lambda$setPointerAcceleration$5(FLcom/android/server/input/InputManagerService$AdditionalDisplayInputProperties;)V
 PLcom/android/server/input/InputManagerService;->lambda$setPointerIconVisible$6(ZLcom/android/server/input/InputManagerService$AdditionalDisplayInputProperties;)V
 HSPLcom/android/server/input/InputManagerService;->lambda$updateKeyboardLayouts$2(Ljava/util/HashSet;Landroid/content/res/Resources;ILandroid/hardware/input/KeyboardLayout;)V+]Ljava/util/HashSet;Ljava/util/HashSet;]Landroid/hardware/input/KeyboardLayout;Landroid/hardware/input/KeyboardLayout;
 HSPLcom/android/server/input/InputManagerService;->loadStaticInputPortAssociations()Ljava/util/Map;
-HPLcom/android/server/input/InputManagerService;->monitor()V
+HPLcom/android/server/input/InputManagerService;->monitor()V+]Lcom/android/server/input/NativeInputManagerService;Lcom/android/server/input/NativeInputManagerService$NativeImpl;
 HSPLcom/android/server/input/InputManagerService;->monitorGestureInput(Landroid/os/IBinder;Ljava/lang/String;I)Landroid/view/InputMonitor;
 HSPLcom/android/server/input/InputManagerService;->monitorInput(Ljava/lang/String;I)Landroid/view/InputChannel;
 HSPLcom/android/server/input/InputManagerService;->notifyConfigurationChanged(J)V
@@ -23753,15 +24821,15 @@
 PLcom/android/server/input/InputManagerService;->setCustomPointerIcon(Landroid/view/PointerIcon;)V
 PLcom/android/server/input/InputManagerService;->setDisplayEligibilityForPointerCapture(IZ)V
 HSPLcom/android/server/input/InputManagerService;->setDisplayViewportsInternal(Ljava/util/List;)V
-HPLcom/android/server/input/InputManagerService;->setFocusedApplication(ILandroid/view/InputApplicationHandle;)V
+HSPLcom/android/server/input/InputManagerService;->setFocusedApplication(ILandroid/view/InputApplicationHandle;)V
 HSPLcom/android/server/input/InputManagerService;->setFocusedDisplay(I)V
 HSPLcom/android/server/input/InputManagerService;->setInTouchMode(ZIIZ)Z
 PLcom/android/server/input/InputManagerService;->setInputDispatchMode(ZZ)V
 PLcom/android/server/input/InputManagerService;->setInputFilter(Landroid/view/IInputFilter;)V
 PLcom/android/server/input/InputManagerService;->setLightStatesInternal(I[I[Landroid/hardware/lights/LightState;)V
-PLcom/android/server/input/InputManagerService;->setPointerAcceleration(FI)V
+HPLcom/android/server/input/InputManagerService;->setPointerAcceleration(FI)V
 HSPLcom/android/server/input/InputManagerService;->setPointerIconType(I)V
-PLcom/android/server/input/InputManagerService;->setPointerIconVisible(ZI)V
+HPLcom/android/server/input/InputManagerService;->setPointerIconVisible(ZI)V
 HSPLcom/android/server/input/InputManagerService;->setPointerSpeedUnchecked(I)V
 PLcom/android/server/input/InputManagerService;->setSystemUiLightsOut(Z)V
 PLcom/android/server/input/InputManagerService;->setVirtualMousePointerDisplayIdBlocking(I)Z
@@ -23769,6 +24837,7 @@
 HSPLcom/android/server/input/InputManagerService;->setWiredAccessoryCallbacks(Lcom/android/server/input/InputManagerService$WiredAccessoryCallbacks;)V
 PLcom/android/server/input/InputManagerService;->showMissingKeyboardLayoutNotification(Landroid/view/InputDevice;)V
 HSPLcom/android/server/input/InputManagerService;->start()V
+PLcom/android/server/input/InputManagerService;->switchKeyboardLayout(II)V
 HSPLcom/android/server/input/InputManagerService;->systemRunning()V
 PLcom/android/server/input/InputManagerService;->transferTouch(Landroid/os/IBinder;I)Z
 PLcom/android/server/input/InputManagerService;->transferTouchFocus(Landroid/os/IBinder;Landroid/os/IBinder;)Z
@@ -23776,7 +24845,7 @@
 PLcom/android/server/input/InputManagerService;->tryPointerSpeed(I)V
 PLcom/android/server/input/InputManagerService;->unregisterSensorListener(Landroid/hardware/input/IInputSensorEventListener;)V
 HSPLcom/android/server/input/InputManagerService;->updateAccessibilityLargePointerFromSettings()V
-PLcom/android/server/input/InputManagerService;->updateAdditionalDisplayInputProperties(ILjava/util/function/Consumer;)V
+HPLcom/android/server/input/InputManagerService;->updateAdditionalDisplayInputProperties(ILjava/util/function/Consumer;)V
 HSPLcom/android/server/input/InputManagerService;->updateBlockUntrustedTouchesModeFromSettings()V
 HSPLcom/android/server/input/InputManagerService;->updateDeepPressStatusFromSettings(Ljava/lang/String;)V
 HSPLcom/android/server/input/InputManagerService;->updateKeyboardLayouts()V+]Lcom/android/server/input/InputManagerService;Lcom/android/server/input/InputManagerService;]Lcom/android/server/input/PersistentDataStore;Lcom/android/server/input/PersistentDataStore;
@@ -23789,7 +24858,7 @@
 PLcom/android/server/input/InputManagerService;->vibrateCombined(ILandroid/os/CombinedVibration;Landroid/os/IBinder;)V
 HSPLcom/android/server/input/InputManagerService;->visitAllKeyboardLayouts(Lcom/android/server/input/InputManagerService$KeyboardLayoutVisitor;)V+]Lcom/android/server/input/InputManagerService;Lcom/android/server/input/InputManagerService;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 PLcom/android/server/input/InputManagerService;->visitKeyboardLayout(Ljava/lang/String;Lcom/android/server/input/InputManagerService$KeyboardLayoutVisitor;)V
-HSPLcom/android/server/input/InputManagerService;->visitKeyboardLayoutsInPackage(Landroid/content/pm/PackageManager;Landroid/content/pm/ActivityInfo;Ljava/lang/String;ILcom/android/server/input/InputManagerService$KeyboardLayoutVisitor;)V+]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Lcom/android/server/input/InputManagerService$KeyboardLayoutVisitor;Lcom/android/server/input/InputManagerService$$ExternalSyntheticLambda3;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/content/res/XmlResourceParser;Landroid/content/res/XmlBlock$Parser;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
+HSPLcom/android/server/input/InputManagerService;->visitKeyboardLayoutsInPackage(Landroid/content/pm/PackageManager;Landroid/content/pm/ActivityInfo;Ljava/lang/String;ILcom/android/server/input/InputManagerService$KeyboardLayoutVisitor;)V+]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Lcom/android/server/input/InputManagerService$KeyboardLayoutVisitor;Lcom/android/server/input/InputManagerService$$ExternalSyntheticLambda5;,Lcom/android/server/input/InputManagerService$$ExternalSyntheticLambda3;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/content/res/XmlResourceParser;Landroid/content/res/XmlBlock$Parser;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
 PLcom/android/server/input/InputShellCommand;-><clinit>()V
 PLcom/android/server/input/InputShellCommand;-><init>()V
 PLcom/android/server/input/InputShellCommand;->getSource(II)I
@@ -23801,10 +24870,25 @@
 PLcom/android/server/input/InputShellCommand;->sendText(ILjava/lang/String;I)V
 HSPLcom/android/server/input/NativeInputManagerService$NativeImpl;-><init>(Lcom/android/server/input/InputManagerService;Landroid/content/Context;Landroid/os/MessageQueue;)V
 PLcom/android/server/input/NativeInputManagerService$NativeImpl;->disableSensor(II)V
+PLcom/android/server/input/PersistentDataStore$InputDeviceState;-><clinit>()V
+PLcom/android/server/input/PersistentDataStore$InputDeviceState;-><init>()V
+PLcom/android/server/input/PersistentDataStore$InputDeviceState;-><init>(Lcom/android/server/input/PersistentDataStore$InputDeviceState-IA;)V
+PLcom/android/server/input/PersistentDataStore$InputDeviceState;->addKeyboardLayout(Ljava/lang/String;)Z
+PLcom/android/server/input/PersistentDataStore$InputDeviceState;->getCurrentKeyboardLayout()Ljava/lang/String;
+PLcom/android/server/input/PersistentDataStore$InputDeviceState;->getKeyboardLayouts()[Ljava/lang/String;
+PLcom/android/server/input/PersistentDataStore$InputDeviceState;->getTouchCalibration(I)Landroid/hardware/input/TouchCalibration;
+PLcom/android/server/input/PersistentDataStore$InputDeviceState;->loadFromXml(Landroid/util/TypedXmlPullParser;)V
+PLcom/android/server/input/PersistentDataStore$InputDeviceState;->removeKeyboardLayout(Ljava/lang/String;)Z
+PLcom/android/server/input/PersistentDataStore$InputDeviceState;->removeUninstalledKeyboardLayouts(Ljava/util/Set;)Z
+PLcom/android/server/input/PersistentDataStore$InputDeviceState;->saveToXml(Landroid/util/TypedXmlSerializer;)V
+PLcom/android/server/input/PersistentDataStore$InputDeviceState;->switchKeyboardLayout(I)Z
+PLcom/android/server/input/PersistentDataStore$InputDeviceState;->updateCurrentKeyboardLayoutIfRemoved(Ljava/lang/String;I)V
 HSPLcom/android/server/input/PersistentDataStore;-><init>()V
+PLcom/android/server/input/PersistentDataStore;->addKeyboardLayout(Ljava/lang/String;Ljava/lang/String;)Z
 HSPLcom/android/server/input/PersistentDataStore;->clearState()V
-HSPLcom/android/server/input/PersistentDataStore;->getCurrentKeyboardLayout(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/input/PersistentDataStore;->getCurrentKeyboardLayout(Ljava/lang/String;)Ljava/lang/String;+]Lcom/android/server/input/PersistentDataStore;Lcom/android/server/input/PersistentDataStore;
 HSPLcom/android/server/input/PersistentDataStore;->getInputDeviceState(Ljava/lang/String;Z)Lcom/android/server/input/PersistentDataStore$InputDeviceState;+]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/server/input/PersistentDataStore;Lcom/android/server/input/PersistentDataStore;
+PLcom/android/server/input/PersistentDataStore;->getKeyboardLayouts(Ljava/lang/String;)[Ljava/lang/String;
 HSPLcom/android/server/input/PersistentDataStore;->getTouchCalibration(Ljava/lang/String;I)Landroid/hardware/input/TouchCalibration;
 HSPLcom/android/server/input/PersistentDataStore;->load()V
 PLcom/android/server/input/PersistentDataStore;->loadFromXml(Landroid/util/TypedXmlPullParser;)V
@@ -23812,9 +24896,11 @@
 PLcom/android/server/input/PersistentDataStore;->loadInputDevicesFromXml(Landroid/util/TypedXmlPullParser;)V
 PLcom/android/server/input/PersistentDataStore;->removeKeyboardLayout(Ljava/lang/String;Ljava/lang/String;)Z
 HSPLcom/android/server/input/PersistentDataStore;->removeUninstalledKeyboardLayouts(Ljava/util/Set;)Z+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/Collection;Ljava/util/HashMap$Values;]Ljava/util/Iterator;Ljava/util/HashMap$ValueIterator;
+PLcom/android/server/input/PersistentDataStore;->save()V
 HSPLcom/android/server/input/PersistentDataStore;->saveIfNeeded()V
 PLcom/android/server/input/PersistentDataStore;->saveToXml(Landroid/util/TypedXmlSerializer;)V
 PLcom/android/server/input/PersistentDataStore;->setDirty()V
+PLcom/android/server/input/PersistentDataStore;->switchKeyboardLayout(Ljava/lang/String;I)Z
 HSPLcom/android/server/inputmethod/AdditionalSubtypeUtils;->getAdditionalSubtypeFile(Ljava/io/File;)Landroid/util/AtomicFile;
 HSPLcom/android/server/inputmethod/AdditionalSubtypeUtils;->getInputMethodDir(I)Ljava/io/File;
 HSPLcom/android/server/inputmethod/AdditionalSubtypeUtils;->load(Landroid/util/ArrayMap;I)V
@@ -23844,17 +24930,17 @@
 PLcom/android/server/inputmethod/IInputMethodInvoker;->finishStylusHandwriting()V
 PLcom/android/server/inputmethod/IInputMethodInvoker;->getBinderIdentityHashCode(Lcom/android/server/inputmethod/IInputMethodInvoker;)I
 PLcom/android/server/inputmethod/IInputMethodInvoker;->getCallerMethodName()Ljava/lang/String;
-PLcom/android/server/inputmethod/IInputMethodInvoker;->hideSoftInput(Landroid/os/IBinder;ILandroid/os/ResultReceiver;)Z
+HPLcom/android/server/inputmethod/IInputMethodInvoker;->hideSoftInput(Landroid/os/IBinder;ILandroid/os/ResultReceiver;)Z
 PLcom/android/server/inputmethod/IInputMethodInvoker;->initializeInternal(Landroid/os/IBinder;Lcom/android/internal/inputmethod/IInputMethodPrivilegedOperations;IZI)V
 PLcom/android/server/inputmethod/IInputMethodInvoker;->logRemoteException(Landroid/os/RemoteException;)V
-PLcom/android/server/inputmethod/IInputMethodInvoker;->onCreateInlineSuggestionsRequest(Lcom/android/internal/view/InlineSuggestionsRequestInfo;Lcom/android/internal/view/IInlineSuggestionsRequestCallback;)V
+HPLcom/android/server/inputmethod/IInputMethodInvoker;->onCreateInlineSuggestionsRequest(Lcom/android/internal/view/InlineSuggestionsRequestInfo;Lcom/android/internal/view/IInlineSuggestionsRequestCallback;)V
 PLcom/android/server/inputmethod/IInputMethodInvoker;->onNavButtonFlagsChanged(I)V
 HPLcom/android/server/inputmethod/IInputMethodInvoker;->setSessionEnabled(Lcom/android/internal/view/IInputMethodSession;Z)V
-HPLcom/android/server/inputmethod/IInputMethodInvoker;->showSoftInput(Landroid/os/IBinder;ILandroid/os/ResultReceiver;)Z
-HPLcom/android/server/inputmethod/IInputMethodInvoker;->startInput(Landroid/os/IBinder;Lcom/android/internal/view/IInputContext;Landroid/view/inputmethod/EditorInfo;ZILandroid/window/ImeOnBackInvokedDispatcher;)V
+HPLcom/android/server/inputmethod/IInputMethodInvoker;->showSoftInput(Landroid/os/IBinder;ILandroid/os/ResultReceiver;)Z+]Lcom/android/internal/view/IInputMethod;Lcom/android/internal/view/IInputMethod$Stub$Proxy;
+HPLcom/android/server/inputmethod/IInputMethodInvoker;->startInput(Landroid/os/IBinder;Lcom/android/internal/view/IInputContext;Landroid/view/inputmethod/EditorInfo;ZILandroid/window/ImeOnBackInvokedDispatcher;)V+]Lcom/android/internal/view/IInputMethod;Lcom/android/internal/view/IInputMethod$Stub$Proxy;
 HPLcom/android/server/inputmethod/IInputMethodInvoker;->unbindInput()V
 HSPLcom/android/server/inputmethod/ImePlatformCompatUtils;-><init>()V
-HPLcom/android/server/inputmethod/ImePlatformCompatUtils;->isChangeEnabledByUid(JI)Z
+HPLcom/android/server/inputmethod/ImePlatformCompatUtils;->isChangeEnabledByUid(JI)Z+]Lcom/android/internal/compat/IPlatformCompat;Lcom/android/server/compat/PlatformCompat;
 HPLcom/android/server/inputmethod/ImePlatformCompatUtils;->shouldClearShowForcedFlag(I)Z
 PLcom/android/server/inputmethod/ImePlatformCompatUtils;->shouldFinishInputWithReportToIme(I)Z
 PLcom/android/server/inputmethod/ImfLock;-><init>()V
@@ -23894,7 +24980,7 @@
 HPLcom/android/server/inputmethod/InputMethodBindingController;->advanceSequenceNumber()V
 HPLcom/android/server/inputmethod/InputMethodBindingController;->bindCurrentInputMethodService(Landroid/content/ServiceConnection;I)Z
 PLcom/android/server/inputmethod/InputMethodBindingController;->bindCurrentInputMethodServiceMainConnection()Z
-PLcom/android/server/inputmethod/InputMethodBindingController;->bindCurrentInputMethodServiceVisibleConnection()Z
+HPLcom/android/server/inputmethod/InputMethodBindingController;->bindCurrentInputMethodServiceVisibleConnection()Z
 HPLcom/android/server/inputmethod/InputMethodBindingController;->bindCurrentMethod()Lcom/android/internal/inputmethod/InputBindResult;
 HPLcom/android/server/inputmethod/InputMethodBindingController;->clearCurMethodAndSessions()V
 HPLcom/android/server/inputmethod/InputMethodBindingController;->createImeBindingIntent(Landroid/content/ComponentName;)Landroid/content/Intent;
@@ -23908,14 +24994,14 @@
 HPLcom/android/server/inputmethod/InputMethodBindingController;->getSequenceNumber()I
 PLcom/android/server/inputmethod/InputMethodBindingController;->hasConnection()Z
 PLcom/android/server/inputmethod/InputMethodBindingController;->isVisibleBound()Z
-PLcom/android/server/inputmethod/InputMethodBindingController;->removeCurrentToken()V
+HPLcom/android/server/inputmethod/InputMethodBindingController;->removeCurrentToken()V
 HPLcom/android/server/inputmethod/InputMethodBindingController;->setCurrentMethodNotVisible()V
-HPLcom/android/server/inputmethod/InputMethodBindingController;->setCurrentMethodVisible()V
+HPLcom/android/server/inputmethod/InputMethodBindingController;->setCurrentMethodVisible()V+]Lcom/android/server/inputmethod/InputMethodBindingController;Lcom/android/server/inputmethod/InputMethodBindingController;
 HSPLcom/android/server/inputmethod/InputMethodBindingController;->setSelectedMethodId(Ljava/lang/String;)V
 PLcom/android/server/inputmethod/InputMethodBindingController;->supportsStylusHandwriting()Z
 HPLcom/android/server/inputmethod/InputMethodBindingController;->unbindCurrentMethod()V
 PLcom/android/server/inputmethod/InputMethodBindingController;->unbindMainConnection()V
-PLcom/android/server/inputmethod/InputMethodBindingController;->unbindVisibleConnection()V
+HPLcom/android/server/inputmethod/InputMethodBindingController;->unbindVisibleConnection()V
 PLcom/android/server/inputmethod/InputMethodDialogWindowContext;-><init>()V
 PLcom/android/server/inputmethod/InputMethodDialogWindowContext;->get(I)Landroid/content/Context;
 HSPLcom/android/server/inputmethod/InputMethodManagerInternal$1;-><init>()V
@@ -23974,13 +25060,13 @@
 PLcom/android/server/inputmethod/InputMethodManagerService$InkWindowInitializer;->run()V
 HPLcom/android/server/inputmethod/InputMethodManagerService$InlineSuggestionsRequestCallbackDecorator;-><init>(Lcom/android/internal/view/IInlineSuggestionsRequestCallback;Ljava/lang/String;ILandroid/os/IBinder;Lcom/android/server/inputmethod/InputMethodManagerService;)V
 HPLcom/android/server/inputmethod/InputMethodManagerService$InlineSuggestionsRequestCallbackDecorator;->onInlineSuggestionsRequest(Landroid/view/inputmethod/InlineSuggestionsRequest;Lcom/android/internal/view/IInlineSuggestionsResponseCallback;)V
-PLcom/android/server/inputmethod/InputMethodManagerService$InlineSuggestionsRequestCallbackDecorator;->onInlineSuggestionsSessionInvalidated()V
+HPLcom/android/server/inputmethod/InputMethodManagerService$InlineSuggestionsRequestCallbackDecorator;->onInlineSuggestionsSessionInvalidated()V
 PLcom/android/server/inputmethod/InputMethodManagerService$InlineSuggestionsRequestCallbackDecorator;->onInlineSuggestionsUnsupported()V
 HPLcom/android/server/inputmethod/InputMethodManagerService$InlineSuggestionsRequestCallbackDecorator;->onInputMethodFinishInput()V
-PLcom/android/server/inputmethod/InputMethodManagerService$InlineSuggestionsRequestCallbackDecorator;->onInputMethodFinishInputView()V
-HPLcom/android/server/inputmethod/InputMethodManagerService$InlineSuggestionsRequestCallbackDecorator;->onInputMethodShowInputRequested(Z)V
-HPLcom/android/server/inputmethod/InputMethodManagerService$InlineSuggestionsRequestCallbackDecorator;->onInputMethodStartInput(Landroid/view/autofill/AutofillId;)V
-HPLcom/android/server/inputmethod/InputMethodManagerService$InlineSuggestionsRequestCallbackDecorator;->onInputMethodStartInputView()V
+HPLcom/android/server/inputmethod/InputMethodManagerService$InlineSuggestionsRequestCallbackDecorator;->onInputMethodFinishInputView()V
+HPLcom/android/server/inputmethod/InputMethodManagerService$InlineSuggestionsRequestCallbackDecorator;->onInputMethodShowInputRequested(Z)V+]Lcom/android/internal/view/IInlineSuggestionsRequestCallback;Lcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;
+HPLcom/android/server/inputmethod/InputMethodManagerService$InlineSuggestionsRequestCallbackDecorator;->onInputMethodStartInput(Landroid/view/autofill/AutofillId;)V+]Lcom/android/internal/view/IInlineSuggestionsRequestCallback;Lcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;
+HPLcom/android/server/inputmethod/InputMethodManagerService$InlineSuggestionsRequestCallbackDecorator;->onInputMethodStartInputView()V+]Lcom/android/internal/view/IInlineSuggestionsRequestCallback;Lcom/android/server/autofill/AutofillInlineSuggestionsRequestSession$InlineSuggestionsRequestCallbackImpl;
 PLcom/android/server/inputmethod/InputMethodManagerService$InputMethodPrivilegedOperationsImpl;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;)V
 HPLcom/android/server/inputmethod/InputMethodManagerService$InputMethodPrivilegedOperationsImpl;->applyImeVisibilityAsync(Landroid/os/IBinder;Z)V
 PLcom/android/server/inputmethod/InputMethodManagerService$InputMethodPrivilegedOperationsImpl;->createInputContentUriToken(Landroid/net/Uri;Ljava/lang/String;Lcom/android/internal/infra/AndroidFuture;)V
@@ -24027,8 +25113,8 @@
 HPLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->onBeginPackageChanges()V+]Lcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;Lcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;
 HPLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->onFinishPackageChanges()V+]Lcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;Lcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;
 HPLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->onFinishPackageChangesInternal()V+]Lcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;Lcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;
-PLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->onHandleForceStop(Landroid/content/Intent;[Ljava/lang/String;IZ)Z
-PLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->onPackageAppeared(Ljava/lang/String;I)V
+HPLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->onHandleForceStop(Landroid/content/Intent;[Ljava/lang/String;IZ)Z
+HPLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->onPackageAppeared(Ljava/lang/String;I)V
 PLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->onPackageDisappeared(Ljava/lang/String;I)V
 HPLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->onPackageModified(Ljava/lang/String;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 PLcom/android/server/inputmethod/InputMethodManagerService$MyPackageMonitor;->onPackagesSuspended([Ljava/lang/String;)V
@@ -24048,8 +25134,8 @@
 PLcom/android/server/inputmethod/InputMethodManagerService$ShellCommandImpl;->lambda$onCommand$0(Ljava/lang/String;)V
 PLcom/android/server/inputmethod/InputMethodManagerService$ShellCommandImpl;->onCommand(Ljava/lang/String;)I
 PLcom/android/server/inputmethod/InputMethodManagerService$ShellCommandImpl;->onCommandWithSystemIdentity(Ljava/lang/String;)I
-HPLcom/android/server/inputmethod/InputMethodManagerService$SoftInputShowHideHistory$Entry;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService$ClientState;Landroid/view/inputmethod/EditorInfo;Ljava/lang/String;IIZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/inputmethod/InputMethodManagerService$SoftInputShowHideHistory;->-$$Nest$sfgetsSequenceNumber()Ljava/util/concurrent/atomic/AtomicInteger;
+HPLcom/android/server/inputmethod/InputMethodManagerService$SoftInputShowHideHistory$Entry;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService$ClientState;Landroid/view/inputmethod/EditorInfo;Ljava/lang/String;IIZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V+]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
+HPLcom/android/server/inputmethod/InputMethodManagerService$SoftInputShowHideHistory;->-$$Nest$sfgetsSequenceNumber()Ljava/util/concurrent/atomic/AtomicInteger;
 HSPLcom/android/server/inputmethod/InputMethodManagerService$SoftInputShowHideHistory;-><clinit>()V
 HSPLcom/android/server/inputmethod/InputMethodManagerService$SoftInputShowHideHistory;-><init>()V
 HSPLcom/android/server/inputmethod/InputMethodManagerService$SoftInputShowHideHistory;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService$SoftInputShowHideHistory-IA;)V
@@ -24063,7 +25149,7 @@
 HPLcom/android/server/inputmethod/InputMethodManagerService$StartInputHistory;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService$StartInputHistory;->getEntrySize()I
 PLcom/android/server/inputmethod/InputMethodManagerService$StartInputInfo;-><clinit>()V
-HPLcom/android/server/inputmethod/InputMethodManagerService$StartInputInfo;-><init>(ILandroid/os/IBinder;ILjava/lang/String;IZIILandroid/os/IBinder;Landroid/view/inputmethod/EditorInfo;II)V
+HPLcom/android/server/inputmethod/InputMethodManagerService$StartInputInfo;-><init>(ILandroid/os/IBinder;ILjava/lang/String;IZIILandroid/os/IBinder;Landroid/view/inputmethod/EditorInfo;II)V+]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
 HPLcom/android/server/inputmethod/InputMethodManagerService$UserSwitchHandlerTask;-><init>(Lcom/android/server/inputmethod/InputMethodManagerService;ILcom/android/internal/view/IInputMethodClient;)V
 HPLcom/android/server/inputmethod/InputMethodManagerService$UserSwitchHandlerTask;->run()V
 PLcom/android/server/inputmethod/InputMethodManagerService$VirtualDisplayInfo;->-$$Nest$fgetmMatrix(Lcom/android/server/inputmethod/InputMethodManagerService$VirtualDisplayInfo;)Landroid/graphics/Matrix;
@@ -24074,7 +25160,7 @@
 PLcom/android/server/inputmethod/InputMethodManagerService;->$r8$lambda$XUIWnM1I-xqMtdWJBk3rvGL6t0I(Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/server/inputmethod/OverlayableSystemBooleanResourceWrapper;)V
 PLcom/android/server/inputmethod/InputMethodManagerService;->$r8$lambda$bNnzxTzGOLxDTcZA3PdLo_4mWHU(Lcom/android/server/inputmethod/InputMethodManagerService;ILcom/android/internal/view/IInputMethodClient;)Ljava/lang/Integer;
 PLcom/android/server/inputmethod/InputMethodManagerService;->$r8$lambda$vz_z57ulRhr4T1Ld16KRvnRuVVc(Lcom/android/server/inputmethod/InputMethodManagerService;Z)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$fgetmAccessibilityManager(Lcom/android/server/inputmethod/InputMethodManagerService;)Landroid/view/accessibility/AccessibilityManager;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$fgetmAccessibilityManager(Lcom/android/server/inputmethod/InputMethodManagerService;)Landroid/view/accessibility/AccessibilityManager;
 PLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$fgetmAccessibilityRequestingNoSoftKeyboard(Lcom/android/server/inputmethod/InputMethodManagerService;)Z
 PLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$fgetmAdditionalSubtypeMap(Lcom/android/server/inputmethod/InputMethodManagerService;)Landroid/util/ArrayMap;
 PLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$fgetmCurHostInputToken(Lcom/android/server/inputmethod/InputMethodManagerService;)Landroid/os/IBinder;
@@ -24088,7 +25174,7 @@
 PLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$fputmCurPerceptible(Lcom/android/server/inputmethod/InputMethodManagerService;Z)V
 PLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$fputmShowRequested(Lcom/android/server/inputmethod/InputMethodManagerService;Z)V
 PLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$fputmUserSwitchHandlerTask(Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/server/inputmethod/InputMethodManagerService$UserSwitchHandlerTask;)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$mapplyImeVisibility(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;Landroid/os/IBinder;Z)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$mapplyImeVisibility(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;Landroid/os/IBinder;Z)V
 PLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$mchooseNewDefaultIMELocked(Lcom/android/server/inputmethod/InputMethodManagerService;)Z
 PLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$mcreateInputContentUriToken(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;Landroid/net/Uri;Ljava/lang/String;)Lcom/android/internal/inputmethod/IInputContentUriToken;
 PLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$mdumpAsStringNoCheck(Lcom/android/server/inputmethod/InputMethodManagerService;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
@@ -24101,27 +25187,28 @@
 PLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$mhandleShellCommandTraceInputMethod(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/ShellCommand;)I
 PLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$mhideMySoftInput(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;I)V
 PLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$mnotifyUserAction(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$monCreateInlineSuggestionsRequestLocked(Lcom/android/server/inputmethod/InputMethodManagerService;ILcom/android/internal/view/InlineSuggestionsRequestInfo;Lcom/android/internal/view/IInlineSuggestionsRequestCallback;Z)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$monCreateInlineSuggestionsRequestLocked(Lcom/android/server/inputmethod/InputMethodManagerService;ILcom/android/internal/view/InlineSuggestionsRequestInfo;Lcom/android/internal/view/IInlineSuggestionsRequestCallback;Z)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$mpublishLocalService(Lcom/android/server/inputmethod/InputMethodManagerService;)V
 HPLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$mreportFullscreenMode(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;Z)V
 HPLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$mreportStartInput(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;Landroid/os/IBinder;)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$msetImeWindowStatus(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;II)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$msetImeWindowStatus(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;II)V
 PLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$msetInputMethodAndSubtype(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;Ljava/lang/String;Landroid/view/inputmethod/InputMethodSubtype;)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$msetInputMethodEnabledLocked(Lcom/android/server/inputmethod/InputMethodManagerService;Ljava/lang/String;Z)Z
 PLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$mshouldOfferSwitchingToNextInputMethod(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;)Z
 PLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$mshowMySoftInput(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;I)V
 PLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$mswitchToPreviousInputMethod(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;)Z
 PLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$mswitchUserOnHandlerLocked(Lcom/android/server/inputmethod/InputMethodManagerService;ILcom/android/internal/view/IInputMethodClient;)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$mupdateStatusIcon(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;Ljava/lang/String;I)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->-$$Nest$mupdateStatusIcon(Lcom/android/server/inputmethod/InputMethodManagerService;Landroid/os/IBinder;Ljava/lang/String;I)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService;-><init>(Landroid/content/Context;)V
-HSPLcom/android/server/inputmethod/InputMethodManagerService;->addClient(Lcom/android/internal/view/IInputMethodClient;Lcom/android/internal/view/IInputContext;I)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/IBinder;Landroid/os/BinderProxy;]Lcom/android/internal/view/IInputMethodClient;Lcom/android/internal/view/IInputMethodClient$Stub$Proxy;
+HSPLcom/android/server/inputmethod/InputMethodManagerService;->addClient(Lcom/android/internal/view/IInputMethodClient;Lcom/android/internal/view/IInputContext;I)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/IBinder;Landroid/os/BinderProxy;,Landroid/view/inputmethod/InputMethodManager$2;]Lcom/android/internal/view/IInputMethodClient;Lcom/android/internal/view/IInputMethodClient$Stub$Proxy;,Landroid/view/inputmethod/InputMethodManager$2;
 HPLcom/android/server/inputmethod/InputMethodManagerService;->advanceSequenceNumberLocked()V
-HPLcom/android/server/inputmethod/InputMethodManagerService;->applyImeVisibility(Landroid/os/IBinder;Landroid/os/IBinder;Z)V
-HPLcom/android/server/inputmethod/InputMethodManagerService;->attachNewAccessibilityLocked(IZI)Lcom/android/internal/inputmethod/InputBindResult;
-HPLcom/android/server/inputmethod/InputMethodManagerService;->attachNewInputLocked(IZ)Lcom/android/internal/inputmethod/InputBindResult;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->applyImeVisibility(Landroid/os/IBinder;Landroid/os/IBinder;Z)V+]Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/server/inputmethod/InputMethodManagerService;]Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/wm/WindowManagerService$LocalService;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->attachNewAccessibilityLocked(IZI)Lcom/android/internal/inputmethod/InputBindResult;+]Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/server/inputmethod/InputMethodManagerService;]Lcom/android/server/AccessibilityManagerInternal;Lcom/android/server/accessibility/AccessibilityManagerService$LocalServiceImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->attachNewInputLocked(IZ)Lcom/android/internal/inputmethod/InputBindResult;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/server/inputmethod/InputMethodManagerService;]Lcom/android/server/inputmethod/InputMethodManagerService$StartInputHistory;Lcom/android/server/inputmethod/InputMethodManagerService$StartInputHistory;]Landroid/view/InputChannel;Landroid/view/InputChannel;]Lcom/android/server/inputmethod/IInputMethodInvoker;Lcom/android/server/inputmethod/IInputMethodInvoker;]Lcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;Lcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;]Landroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodInfo;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/inputmethod/InputMethodManagerService;->buildInputMethodListLocked(Z)V
-HPLcom/android/server/inputmethod/InputMethodManagerService;->calledFromValidUserLocked()Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;Lcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;
-HPLcom/android/server/inputmethod/InputMethodManagerService;->calledWithValidTokenLocked(Landroid/os/IBinder;)Z
-HPLcom/android/server/inputmethod/InputMethodManagerService;->canInteractWithImeLocked(ILcom/android/internal/view/IInputMethodClient;Ljava/lang/String;)Z
+HPLcom/android/server/inputmethod/InputMethodManagerService;->calledFromValidUserLocked()Z+]Lcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;Lcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/Context;Landroid/app/ContextImpl;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->calledWithValidTokenLocked(Landroid/os/IBinder;)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/server/inputmethod/InputMethodManagerService;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->canInteractWithImeLocked(ILcom/android/internal/view/IInputMethodClient;Ljava/lang/String;)Z+]Lcom/android/internal/view/IInputMethodClient;Lcom/android/internal/view/IInputMethodClient$Stub$Proxy;
 PLcom/android/server/inputmethod/InputMethodManagerService;->canShowInputMethodPickerLocked(Lcom/android/internal/view/IInputMethodClient;)Z
 PLcom/android/server/inputmethod/InputMethodManagerService;->chooseNewDefaultIMELocked()Z
 HPLcom/android/server/inputmethod/InputMethodManagerService;->clearClientSessionForAccessibilityLocked(Lcom/android/server/inputmethod/InputMethodManagerService$ClientState;)V
@@ -24129,21 +25216,21 @@
 HPLcom/android/server/inputmethod/InputMethodManagerService;->clearClientSessionLocked(Lcom/android/server/inputmethod/InputMethodManagerService$ClientState;)V
 HPLcom/android/server/inputmethod/InputMethodManagerService;->clearClientSessionsLocked()V
 PLcom/android/server/inputmethod/InputMethodManagerService;->clearInputShowRequestLocked()V
-PLcom/android/server/inputmethod/InputMethodManagerService;->clearPendingInlineSuggestionsRequestLocked()V
-PLcom/android/server/inputmethod/InputMethodManagerService;->computeImeDisplayIdForTarget(ILcom/android/server/inputmethod/InputMethodManagerService$ImeDisplayValidator;)I
-HPLcom/android/server/inputmethod/InputMethodManagerService;->createAccessibilityInputMethodSessions(Landroid/util/SparseArray;)Landroid/util/SparseArray;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->clearPendingInlineSuggestionsRequestLocked()V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->computeImeDisplayIdForTarget(ILcom/android/server/inputmethod/InputMethodManagerService$ImeDisplayValidator;)I
+HPLcom/android/server/inputmethod/InputMethodManagerService;->createAccessibilityInputMethodSessions(Landroid/util/SparseArray;)Landroid/util/SparseArray;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/inputmethod/InputMethodManagerService;->createInputContentUriToken(Landroid/os/IBinder;Landroid/net/Uri;Ljava/lang/String;)Lcom/android/internal/inputmethod/IInputContentUriToken;
 PLcom/android/server/inputmethod/InputMethodManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HPLcom/android/server/inputmethod/InputMethodManagerService;->dumpAsStringNoCheck(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HPLcom/android/server/inputmethod/InputMethodManagerService;->executeOrSendMessage(Lcom/android/internal/view/IInputMethodClient;Landroid/os/Message;)V
 PLcom/android/server/inputmethod/InputMethodManagerService;->finishSessionForAccessibilityLocked(Lcom/android/server/inputmethod/InputMethodManagerService$AccessibilitySessionState;)V
 HPLcom/android/server/inputmethod/InputMethodManagerService;->finishSessionLocked(Lcom/android/server/inputmethod/InputMethodManagerService$SessionState;)V
-PLcom/android/server/inputmethod/InputMethodManagerService;->getAppShowFlagsLocked()I
+HPLcom/android/server/inputmethod/InputMethodManagerService;->getAppShowFlagsLocked()I
 PLcom/android/server/inputmethod/InputMethodManagerService;->getAwareLockedInputMethodList(II)Ljava/util/List;
-HPLcom/android/server/inputmethod/InputMethodManagerService;->getCurIdLocked()Ljava/lang/String;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->getCurIdLocked()Ljava/lang/String;+]Lcom/android/server/inputmethod/InputMethodBindingController;Lcom/android/server/inputmethod/InputMethodBindingController;
 PLcom/android/server/inputmethod/InputMethodManagerService;->getCurIntentLocked()Landroid/content/Intent;
-HPLcom/android/server/inputmethod/InputMethodManagerService;->getCurMethodLocked()Lcom/android/server/inputmethod/IInputMethodInvoker;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->getCurMethodLocked()Lcom/android/server/inputmethod/IInputMethodInvoker;+]Lcom/android/server/inputmethod/InputMethodBindingController;Lcom/android/server/inputmethod/InputMethodBindingController;
 HPLcom/android/server/inputmethod/InputMethodManagerService;->getCurMethodUidLocked()I
 PLcom/android/server/inputmethod/InputMethodManagerService;->getCurTokenDisplayIdLocked()I
 HSPLcom/android/server/inputmethod/InputMethodManagerService;->getCurTokenLocked()Landroid/os/IBinder;+]Lcom/android/server/inputmethod/InputMethodBindingController;Lcom/android/server/inputmethod/InputMethodBindingController;
@@ -24158,33 +25245,34 @@
 PLcom/android/server/inputmethod/InputMethodManagerService;->getInputMethodList(I)Ljava/util/List;
 HPLcom/android/server/inputmethod/InputMethodManagerService;->getInputMethodListInternal(II)Ljava/util/List;
 HPLcom/android/server/inputmethod/InputMethodManagerService;->getInputMethodListLocked(II)Ljava/util/List;
-HPLcom/android/server/inputmethod/InputMethodManagerService;->getInputMethodNavButtonFlagsLocked()I
+HPLcom/android/server/inputmethod/InputMethodManagerService;->getInputMethodNavButtonFlagsLocked()I+]Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/server/inputmethod/InputMethodManagerService;]Lcom/android/server/inputmethod/OverlayableSystemBooleanResourceWrapper;Lcom/android/server/inputmethod/OverlayableSystemBooleanResourceWrapper;
 PLcom/android/server/inputmethod/InputMethodManagerService;->getInputMethodWindowVisibleHeight(Lcom/android/internal/view/IInputMethodClient;)I
 PLcom/android/server/inputmethod/InputMethodManagerService;->getLastBindTimeLocked()J
 PLcom/android/server/inputmethod/InputMethodManagerService;->getLastInputMethodSubtype()Landroid/view/inputmethod/InputMethodSubtype;
 PLcom/android/server/inputmethod/InputMethodManagerService;->getLastSwitchUserId(Landroid/os/ShellCommand;)I
 HSPLcom/android/server/inputmethod/InputMethodManagerService;->getPackageManagerForUser(Landroid/content/Context;I)Landroid/content/pm/PackageManager;
-HSPLcom/android/server/inputmethod/InputMethodManagerService;->getSelectedMethodIdLocked()Ljava/lang/String;
-HPLcom/android/server/inputmethod/InputMethodManagerService;->getSequenceNumberLocked()I
-PLcom/android/server/inputmethod/InputMethodManagerService;->getVirtualDisplayToScreenMatrixLocked(II)Landroid/graphics/Matrix;
-HSPLcom/android/server/inputmethod/InputMethodManagerService;->handleMessage(Landroid/os/Message;)Z+]Landroid/media/AudioManagerInternal;Lcom/android/server/audio/AudioService$AudioServiceInternal;]Ljava/util/OptionalInt;Ljava/util/OptionalInt;]Lcom/android/server/inputmethod/InputMethodBindingController;Lcom/android/server/inputmethod/InputMethodBindingController;]Lcom/android/internal/view/IInputMethodSession;Lcom/android/internal/view/IInputMethodSession$Stub$Proxy;]Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/server/inputmethod/InputMethodManagerService;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/view/InputChannel;Landroid/view/InputChannel;]Lcom/android/server/inputmethod/HandwritingModeController;Lcom/android/server/inputmethod/HandwritingModeController;]Lcom/android/internal/view/IInputMethodClient;Lcom/android/internal/view/IInputMethodClient$Stub$Proxy;]Lcom/android/internal/os/SomeArgs;Lcom/android/internal/os/SomeArgs;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;
+HSPLcom/android/server/inputmethod/InputMethodManagerService;->getSelectedMethodIdLocked()Ljava/lang/String;+]Lcom/android/server/inputmethod/InputMethodBindingController;Lcom/android/server/inputmethod/InputMethodBindingController;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->getSequenceNumberLocked()I+]Lcom/android/server/inputmethod/InputMethodBindingController;Lcom/android/server/inputmethod/InputMethodBindingController;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->getVirtualDisplayToScreenMatrixLocked(II)Landroid/graphics/Matrix;
+HSPLcom/android/server/inputmethod/InputMethodManagerService;->handleMessage(Landroid/os/Message;)Z+]Landroid/media/AudioManagerInternal;Lcom/android/server/audio/AudioService$AudioServiceInternal;]Ljava/util/OptionalInt;Ljava/util/OptionalInt;]Lcom/android/server/inputmethod/InputMethodBindingController;Lcom/android/server/inputmethod/InputMethodBindingController;]Lcom/android/internal/view/IInputMethodSession;Lcom/android/internal/view/IInputMethodSession$Stub$Proxy;]Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/server/inputmethod/InputMethodManagerService;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/view/InputChannel;Landroid/view/InputChannel;]Lcom/android/server/inputmethod/HandwritingModeController;Lcom/android/server/inputmethod/HandwritingModeController;]Lcom/android/internal/view/IInputMethodClient;Lcom/android/internal/view/IInputMethodClient$Stub$Proxy;]Lcom/android/internal/os/SomeArgs;Lcom/android/internal/os/SomeArgs;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 PLcom/android/server/inputmethod/InputMethodManagerService;->handleOptionsForCommandsThatOnlyHaveUserOption(Landroid/os/ShellCommand;)I
-PLcom/android/server/inputmethod/InputMethodManagerService;->handleSetInteractive(Z)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->handleSetInteractive(Z)V
 PLcom/android/server/inputmethod/InputMethodManagerService;->handleShellCommandEnableDisableInputMethod(Landroid/os/ShellCommand;Z)I
 PLcom/android/server/inputmethod/InputMethodManagerService;->handleShellCommandEnableDisableInputMethodInternalLocked(ILjava/lang/String;ZLjava/io/PrintWriter;Ljava/io/PrintWriter;)Z
 PLcom/android/server/inputmethod/InputMethodManagerService;->handleShellCommandListInputMethods(Landroid/os/ShellCommand;)I
 PLcom/android/server/inputmethod/InputMethodManagerService;->handleShellCommandResetInputMethod(Landroid/os/ShellCommand;)I
 PLcom/android/server/inputmethod/InputMethodManagerService;->handleShellCommandSetInputMethod(Landroid/os/ShellCommand;)I
 HPLcom/android/server/inputmethod/InputMethodManagerService;->handleShellCommandTraceInputMethod(Landroid/os/ShellCommand;)I
-PLcom/android/server/inputmethod/InputMethodManagerService;->hasConnectionLocked()Z
+HPLcom/android/server/inputmethod/InputMethodManagerService;->hasConnectionLocked()Z
 HPLcom/android/server/inputmethod/InputMethodManagerService;->hideCurrentInputLocked(Landroid/os/IBinder;ILandroid/os/ResultReceiver;I)Z+]Lcom/android/server/inputmethod/InputMethodBindingController;Lcom/android/server/inputmethod/InputMethodBindingController;]Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/server/inputmethod/InputMethodManagerService;]Lcom/android/server/inputmethod/IInputMethodInvoker;Lcom/android/server/inputmethod/IInputMethodInvoker;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;
 HPLcom/android/server/inputmethod/InputMethodManagerService;->hideMySoftInput(Landroid/os/IBinder;I)V
 HPLcom/android/server/inputmethod/InputMethodManagerService;->hideSoftInput(Lcom/android/internal/view/IInputMethodClient;Landroid/os/IBinder;ILandroid/os/ResultReceiver;I)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/server/inputmethod/InputMethodManagerService;]Lcom/android/internal/view/IInputMethodClient;Lcom/android/internal/view/IInputMethodClient$Stub$Proxy;]Lcom/android/internal/inputmethod/ImeTracing;Lcom/android/internal/inputmethod/ImeTracingServerImpl;
-HSPLcom/android/server/inputmethod/InputMethodManagerService;->hideStatusBarIconLocked()V
+HSPLcom/android/server/inputmethod/InputMethodManagerService;->hideStatusBarIconLocked()V+]Lcom/android/server/statusbar/StatusBarManagerService;Lcom/android/server/statusbar/StatusBarManagerService;
 PLcom/android/server/inputmethod/InputMethodManagerService;->initializeImeLocked(Lcom/android/server/inputmethod/IInputMethodInvoker;Landroid/os/IBinder;IZ)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->invalidateAutofillSessionLocked()V
 HPLcom/android/server/inputmethod/InputMethodManagerService;->isImeClientFocused(Landroid/os/IBinder;Lcom/android/server/inputmethod/InputMethodManagerService$ClientState;)Z
-PLcom/android/server/inputmethod/InputMethodManagerService;->isImeTraceEnabled()Z
-PLcom/android/server/inputmethod/InputMethodManagerService;->isInlineSuggestionsEnabled(Landroid/view/inputmethod/InputMethodInfo;Z)Z
+HPLcom/android/server/inputmethod/InputMethodManagerService;->isImeTraceEnabled()Z
+HPLcom/android/server/inputmethod/InputMethodManagerService;->isInlineSuggestionsEnabled(Landroid/view/inputmethod/InputMethodInfo;Z)Z
 PLcom/android/server/inputmethod/InputMethodManagerService;->isInputMethodPickerShownForTest()Z
 PLcom/android/server/inputmethod/InputMethodManagerService;->isNonPreemptibleImeLocked(Ljava/lang/String;)Z
 HPLcom/android/server/inputmethod/InputMethodManagerService;->isSelectedMethodBoundLocked()Z
@@ -24203,7 +25291,7 @@
 HPLcom/android/server/inputmethod/InputMethodManagerService;->onCreateInlineSuggestionsRequestLocked(ILcom/android/internal/view/InlineSuggestionsRequestInfo;Lcom/android/internal/view/IInlineSuggestionsRequestCallback;Z)V
 HPLcom/android/server/inputmethod/InputMethodManagerService;->onSessionCreated(Lcom/android/server/inputmethod/IInputMethodInvoker;Lcom/android/internal/view/IInputMethodSession;Landroid/view/InputChannel;)V
 PLcom/android/server/inputmethod/InputMethodManagerService;->onShellCommand(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;Landroid/os/ShellCallback;Landroid/os/ResultReceiver;)V
-HPLcom/android/server/inputmethod/InputMethodManagerService;->onShowHideSoftInputRequested(ZLandroid/os/IBinder;I)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->onShowHideSoftInputRequested(ZLandroid/os/IBinder;I)V+]Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/wm/WindowManagerService$LocalService;]Lcom/android/server/inputmethod/InputMethodManagerService$SoftInputShowHideHistory;Lcom/android/server/inputmethod/InputMethodManagerService$SoftInputShowHideHistory;
 HSPLcom/android/server/inputmethod/InputMethodManagerService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 PLcom/android/server/inputmethod/InputMethodManagerService;->onUnlockUser(I)V
 HPLcom/android/server/inputmethod/InputMethodManagerService;->performOnCreateInlineSuggestionsRequestLocked()V
@@ -24217,9 +25305,9 @@
 HPLcom/android/server/inputmethod/InputMethodManagerService;->removeImeSurfaceFromWindowAsync(Landroid/os/IBinder;)V+]Landroid/os/Handler;Landroid/os/Handler;]Landroid/os/Message;Landroid/os/Message;
 HPLcom/android/server/inputmethod/InputMethodManagerService;->reportFullscreenMode(Landroid/os/IBinder;Z)V
 HPLcom/android/server/inputmethod/InputMethodManagerService;->reportPerceptibleAsync(Landroid/os/IBinder;Z)V
-HPLcom/android/server/inputmethod/InputMethodManagerService;->reportStartInput(Landroid/os/IBinder;Landroid/os/IBinder;)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->reportStartInput(Landroid/os/IBinder;Landroid/os/IBinder;)V+]Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/server/inputmethod/InputMethodManagerService;]Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/wm/WindowManagerService$LocalService;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;
 PLcom/android/server/inputmethod/InputMethodManagerService;->reportVirtualDisplayGeometryAsync(Lcom/android/internal/view/IInputMethodClient;I[F)V
-HPLcom/android/server/inputmethod/InputMethodManagerService;->requestClientSessionForAccessibilityLocked(Lcom/android/server/inputmethod/InputMethodManagerService$ClientState;)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->requestClientSessionForAccessibilityLocked(Lcom/android/server/inputmethod/InputMethodManagerService$ClientState;)V+]Lcom/android/server/AccessibilityManagerInternal;Lcom/android/server/accessibility/AccessibilityManagerService$LocalServiceImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/inputmethod/InputMethodManagerService;->requestClientSessionLocked(Lcom/android/server/inputmethod/InputMethodManagerService$ClientState;)V
 PLcom/android/server/inputmethod/InputMethodManagerService;->resetCurrentMethodAndClientLocked(I)V
 PLcom/android/server/inputmethod/InputMethodManagerService;->resetDefaultImeLocked(Landroid/content/Context;)V
@@ -24234,9 +25322,9 @@
 PLcom/android/server/inputmethod/InputMethodManagerService;->setAdditionalInputMethodSubtypes(Ljava/lang/String;[Landroid/view/inputmethod/InputMethodSubtype;)V
 HPLcom/android/server/inputmethod/InputMethodManagerService;->setCurHostInputToken(Landroid/os/IBinder;Landroid/os/IBinder;)V
 PLcom/android/server/inputmethod/InputMethodManagerService;->setCurTokenDisplayIdLocked(I)V
-HPLcom/android/server/inputmethod/InputMethodManagerService;->setEnabledSessionForAccessibilityLocked(Landroid/util/SparseArray;)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->setEnabledSessionForAccessibilityLocked(Landroid/util/SparseArray;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/inputmethod/InputMethodManagerService;->setEnabledSessionLocked(Lcom/android/server/inputmethod/InputMethodManagerService$SessionState;)V
-HPLcom/android/server/inputmethod/InputMethodManagerService;->setImeWindowStatus(Landroid/os/IBinder;II)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->setImeWindowStatus(Landroid/os/IBinder;II)V+]Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/server/inputmethod/InputMethodManagerService;]Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/wm/WindowManagerService$LocalService;
 PLcom/android/server/inputmethod/InputMethodManagerService;->setInputMethod(Landroid/os/IBinder;Ljava/lang/String;)V
 PLcom/android/server/inputmethod/InputMethodManagerService;->setInputMethodAndSubtype(Landroid/os/IBinder;Ljava/lang/String;Landroid/view/inputmethod/InputMethodSubtype;)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService;->setInputMethodEnabledLocked(Ljava/lang/String;Z)Z
@@ -24248,17 +25336,18 @@
 HPLcom/android/server/inputmethod/InputMethodManagerService;->shouldPreventImeStartupLocked(Ljava/lang/String;II)Z
 PLcom/android/server/inputmethod/InputMethodManagerService;->shouldRestoreImeVisibility(Landroid/os/IBinder;I)Z
 HPLcom/android/server/inputmethod/InputMethodManagerService;->shouldShowImeSwitcherLocked(I)Z+]Landroid/view/inputmethod/InputMethodSubtype;Landroid/view/inputmethod/InputMethodSubtype;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/wm/WindowManagerService$LocalService;]Lcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;Lcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;]Landroid/app/KeyguardManager;Landroid/app/KeyguardManager;]Lcom/android/server/inputmethod/InputMethodMenuController;Lcom/android/server/inputmethod/InputMethodMenuController;
-HPLcom/android/server/inputmethod/InputMethodManagerService;->showCurrentInputLocked(Landroid/os/IBinder;ILandroid/os/ResultReceiver;I)Z
+HPLcom/android/server/inputmethod/InputMethodManagerService;->showCurrentInputLocked(Landroid/os/IBinder;ILandroid/os/ResultReceiver;I)Z+]Lcom/android/server/inputmethod/InputMethodBindingController;Lcom/android/server/inputmethod/InputMethodBindingController;]Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/server/inputmethod/InputMethodManagerService;]Lcom/android/server/inputmethod/IInputMethodInvoker;Lcom/android/server/inputmethod/IInputMethodInvoker;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;
 PLcom/android/server/inputmethod/InputMethodManagerService;->showInputMethodAndSubtypeEnablerFromClient(Lcom/android/internal/view/IInputMethodClient;Ljava/lang/String;)V
 PLcom/android/server/inputmethod/InputMethodManagerService;->showInputMethodPickerFromClient(Lcom/android/internal/view/IInputMethodClient;I)V
+PLcom/android/server/inputmethod/InputMethodManagerService;->showInputMethodPickerFromSystem(Lcom/android/internal/view/IInputMethodClient;II)V
 PLcom/android/server/inputmethod/InputMethodManagerService;->showMySoftInput(Landroid/os/IBinder;I)V
-HPLcom/android/server/inputmethod/InputMethodManagerService;->showSoftInput(Lcom/android/internal/view/IInputMethodClient;Landroid/os/IBinder;ILandroid/os/ResultReceiver;I)Z
+HPLcom/android/server/inputmethod/InputMethodManagerService;->showSoftInput(Lcom/android/internal/view/IInputMethodClient;Landroid/os/IBinder;ILandroid/os/ResultReceiver;I)Z+]Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/server/inputmethod/InputMethodManagerService;]Lcom/android/internal/inputmethod/ImeTracing;Lcom/android/internal/inputmethod/ImeTracingServerImpl;
 HPLcom/android/server/inputmethod/InputMethodManagerService;->startImeTrace()V
-HPLcom/android/server/inputmethod/InputMethodManagerService;->startInputOrWindowGainedFocus(ILcom/android/internal/view/IInputMethodClient;Landroid/os/IBinder;IIILandroid/view/inputmethod/EditorInfo;Lcom/android/internal/view/IInputContext;Lcom/android/internal/inputmethod/IRemoteAccessibilityInputConnection;ILandroid/window/ImeOnBackInvokedDispatcher;)Lcom/android/internal/inputmethod/InputBindResult;
-HPLcom/android/server/inputmethod/InputMethodManagerService;->startInputOrWindowGainedFocusInternal(ILcom/android/internal/view/IInputMethodClient;Landroid/os/IBinder;IIILandroid/view/inputmethod/EditorInfo;Lcom/android/internal/view/IInputContext;Lcom/android/internal/inputmethod/IRemoteAccessibilityInputConnection;ILandroid/window/ImeOnBackInvokedDispatcher;)Lcom/android/internal/inputmethod/InputBindResult;
-HPLcom/android/server/inputmethod/InputMethodManagerService;->startInputOrWindowGainedFocusInternalLocked(ILcom/android/internal/view/IInputMethodClient;Landroid/os/IBinder;IIILandroid/view/inputmethod/EditorInfo;Lcom/android/internal/view/IInputContext;Lcom/android/internal/inputmethod/IRemoteAccessibilityInputConnection;IILandroid/window/ImeOnBackInvokedDispatcher;)Lcom/android/internal/inputmethod/InputBindResult;
-HPLcom/android/server/inputmethod/InputMethodManagerService;->startInputUncheckedLocked(Lcom/android/server/inputmethod/InputMethodManagerService$ClientState;Lcom/android/internal/view/IInputContext;Lcom/android/internal/inputmethod/IRemoteAccessibilityInputConnection;Landroid/view/inputmethod/EditorInfo;IIILandroid/window/ImeOnBackInvokedDispatcher;)Lcom/android/internal/inputmethod/InputBindResult;
-PLcom/android/server/inputmethod/InputMethodManagerService;->startProtoDump([BILjava/lang/String;)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->startInputOrWindowGainedFocus(ILcom/android/internal/view/IInputMethodClient;Landroid/os/IBinder;IIILandroid/view/inputmethod/EditorInfo;Lcom/android/internal/view/IInputContext;Lcom/android/internal/inputmethod/IRemoteAccessibilityInputConnection;ILandroid/window/ImeOnBackInvokedDispatcher;)Lcom/android/internal/inputmethod/InputBindResult;+]Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/server/inputmethod/InputMethodManagerService;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->startInputOrWindowGainedFocusInternal(ILcom/android/internal/view/IInputMethodClient;Landroid/os/IBinder;IIILandroid/view/inputmethod/EditorInfo;Lcom/android/internal/view/IInputContext;Lcom/android/internal/inputmethod/IRemoteAccessibilityInputConnection;ILandroid/window/ImeOnBackInvokedDispatcher;)Lcom/android/internal/inputmethod/InputBindResult;+]Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/server/inputmethod/InputMethodManagerService;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Lcom/android/internal/inputmethod/ImeTracing;Lcom/android/internal/inputmethod/ImeTracingServerImpl;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->startInputOrWindowGainedFocusInternalLocked(ILcom/android/internal/view/IInputMethodClient;Landroid/os/IBinder;IIILandroid/view/inputmethod/EditorInfo;Lcom/android/internal/view/IInputContext;Lcom/android/internal/inputmethod/IRemoteAccessibilityInputConnection;IILandroid/window/ImeOnBackInvokedDispatcher;)Lcom/android/internal/inputmethod/InputBindResult;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/inputmethod/InputMethodBindingController;Lcom/android/server/inputmethod/InputMethodBindingController;]Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/server/inputmethod/InputMethodManagerService;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/wm/WindowManagerService$LocalService;]Lcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;Lcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;]Lcom/android/internal/view/IInputMethodClient;Lcom/android/internal/view/IInputMethodClient$Stub$Proxy;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Lcom/android/server/inputmethod/ImePlatformCompatUtils;Lcom/android/server/inputmethod/ImePlatformCompatUtils;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->startInputUncheckedLocked(Lcom/android/server/inputmethod/InputMethodManagerService$ClientState;Lcom/android/internal/view/IInputContext;Lcom/android/internal/inputmethod/IRemoteAccessibilityInputConnection;Landroid/view/inputmethod/EditorInfo;IIILandroid/window/ImeOnBackInvokedDispatcher;)Lcom/android/internal/inputmethod/InputBindResult;+]Lcom/android/server/inputmethod/InputMethodBindingController;Lcom/android/server/inputmethod/InputMethodBindingController;]Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/server/inputmethod/InputMethodManagerService;
+HPLcom/android/server/inputmethod/InputMethodManagerService;->startProtoDump([BILjava/lang/String;)V
 PLcom/android/server/inputmethod/InputMethodManagerService;->stopImeTrace()V
 PLcom/android/server/inputmethod/InputMethodManagerService;->switchToNextInputMethod(Landroid/os/IBinder;Z)Z
 PLcom/android/server/inputmethod/InputMethodManagerService;->switchToPreviousInputMethod(Landroid/os/IBinder;)Z
@@ -24271,9 +25360,9 @@
 HSPLcom/android/server/inputmethod/InputMethodManagerService;->updateFromSettingsLocked(Z)V
 PLcom/android/server/inputmethod/InputMethodManagerService;->updateImeWindowStatus(Z)V
 HSPLcom/android/server/inputmethod/InputMethodManagerService;->updateInputMethodsFromSettingsLocked(Z)V
-HPLcom/android/server/inputmethod/InputMethodManagerService;->updateStatusIcon(Landroid/os/IBinder;Ljava/lang/String;I)V
+HPLcom/android/server/inputmethod/InputMethodManagerService;->updateStatusIcon(Landroid/os/IBinder;Ljava/lang/String;I)V+]Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/server/inputmethod/InputMethodManagerService;
 PLcom/android/server/inputmethod/InputMethodManagerService;->updateSystemUiLocked()V
-HSPLcom/android/server/inputmethod/InputMethodManagerService;->updateSystemUiLocked(II)V
+HSPLcom/android/server/inputmethod/InputMethodManagerService;->updateSystemUiLocked(II)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/inputmethod/InputMethodManagerService;Lcom/android/server/inputmethod/InputMethodManagerService;]Lcom/android/server/statusbar/StatusBarManagerService;Lcom/android/server/statusbar/StatusBarManagerService;
 PLcom/android/server/inputmethod/InputMethodManagerService;->userHasDebugPriv(ILandroid/os/ShellCommand;)Z
 PLcom/android/server/inputmethod/InputMethodMenuController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/inputmethod/InputMethodMenuController;)V
 PLcom/android/server/inputmethod/InputMethodMenuController$$ExternalSyntheticLambda0;->onCancel(Landroid/content/DialogInterface;)V
@@ -24371,7 +25460,7 @@
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getSelectedInputMethod()Ljava/lang/String;
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getSelectedInputMethodSubtypeHashCode()I
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getSelectedInputMethodSubtypeId(Ljava/lang/String;)I
-HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->getSubtypeHistoryStr()Ljava/lang/String;
 HPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->isCurrentProfile(I)Z
 HSPLcom/android/server/inputmethod/InputMethodUtils$InputMethodSettings;->isShowImeWithHardKeyboardEnabled()Z
@@ -24395,7 +25484,7 @@
 PLcom/android/server/inputmethod/InputMethodUtils;->-$$Nest$smisSystemImeThatHasSubtypeOf(Landroid/view/inputmethod/InputMethodInfo;Landroid/content/Context;ZLjava/util/Locale;ZLjava/lang/String;)Z
 HSPLcom/android/server/inputmethod/InputMethodUtils;-><clinit>()V
 HSPLcom/android/server/inputmethod/InputMethodUtils;->canAddToLastInputMethod(Landroid/view/inputmethod/InputMethodSubtype;)Z
-HPLcom/android/server/inputmethod/InputMethodUtils;->checkIfPackageBelongsToUid(Landroid/app/AppOpsManager;ILjava/lang/String;)Z
+HPLcom/android/server/inputmethod/InputMethodUtils;->checkIfPackageBelongsToUid(Landroid/app/AppOpsManager;ILjava/lang/String;)Z+]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
 HSPLcom/android/server/inputmethod/InputMethodUtils;->chooseSystemVoiceIme(Landroid/util/ArrayMap;Ljava/lang/String;Ljava/lang/String;)Landroid/view/inputmethod/InputMethodInfo;
 PLcom/android/server/inputmethod/InputMethodUtils;->containsSubtypeOf(Landroid/view/inputmethod/InputMethodInfo;Ljava/util/Locale;ZLjava/lang/String;)Z
 PLcom/android/server/inputmethod/InputMethodUtils;->findLastResortApplicableSubtypeLocked(Landroid/content/res/Resources;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Z)Landroid/view/inputmethod/InputMethodSubtype;
@@ -24403,8 +25492,8 @@
 PLcom/android/server/inputmethod/InputMethodUtils;->getDefaultEnabledImes(Landroid/content/Context;Ljava/util/ArrayList;Z)Ljava/util/ArrayList;
 PLcom/android/server/inputmethod/InputMethodUtils;->getFallbackLocaleForDefaultIme(Ljava/util/ArrayList;Landroid/content/Context;)Ljava/util/Locale;
 HPLcom/android/server/inputmethod/InputMethodUtils;->getImeAndSubtypeDisplayName(Landroid/content/Context;Landroid/view/inputmethod/InputMethodInfo;Landroid/view/inputmethod/InputMethodSubtype;)Ljava/lang/CharSequence;
-HSPLcom/android/server/inputmethod/InputMethodUtils;->getImplicitlyApplicableSubtypesLocked(Landroid/content/res/Resources;Landroid/view/inputmethod/InputMethodInfo;)Ljava/util/ArrayList;
-HSPLcom/android/server/inputmethod/InputMethodUtils;->getImplicitlyApplicableSubtypesLockedImpl(Landroid/content/res/Resources;Landroid/view/inputmethod/InputMethodInfo;)Ljava/util/ArrayList;+]Landroid/view/inputmethod/InputMethodSubtype;Landroid/view/inputmethod/InputMethodSubtype;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/Locale;Ljava/util/Locale;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Landroid/os/LocaleList;Landroid/os/LocaleList;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
+HSPLcom/android/server/inputmethod/InputMethodUtils;->getImplicitlyApplicableSubtypesLocked(Landroid/content/res/Resources;Landroid/view/inputmethod/InputMethodInfo;)Ljava/util/ArrayList;+]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Landroid/os/LocaleList;Landroid/os/LocaleList;
+HSPLcom/android/server/inputmethod/InputMethodUtils;->getImplicitlyApplicableSubtypesLockedImpl(Landroid/content/res/Resources;Landroid/view/inputmethod/InputMethodInfo;)Ljava/util/ArrayList;+]Landroid/view/inputmethod/InputMethodSubtype;Landroid/view/inputmethod/InputMethodSubtype;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/Locale;Ljava/util/Locale;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Landroid/os/LocaleList;Landroid/os/LocaleList;
 PLcom/android/server/inputmethod/InputMethodUtils;->getLanguageFromLocaleString(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/inputmethod/InputMethodUtils;->getMinimumKeyboardSetWithSystemLocale(Ljava/util/ArrayList;Landroid/content/Context;Ljava/util/Locale;Ljava/util/Locale;)Lcom/android/server/inputmethod/InputMethodUtils$InputMethodListBuilder;
 PLcom/android/server/inputmethod/InputMethodUtils;->getMostApplicableDefaultIME(Ljava/util/List;)Landroid/view/inputmethod/InputMethodInfo;
@@ -24505,6 +25594,7 @@
 PLcom/android/server/integrity/engine/RuleEvaluator$$ExternalSyntheticLambda0;-><init>(Landroid/content/integrity/AppInstallMetadata;)V
 PLcom/android/server/integrity/engine/RuleEvaluator$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
 PLcom/android/server/integrity/engine/RuleEvaluator$$ExternalSyntheticLambda1;-><init>()V
+PLcom/android/server/integrity/engine/RuleEvaluator$$ExternalSyntheticLambda1;->test(Ljava/lang/Object;)Z
 PLcom/android/server/integrity/engine/RuleEvaluator$$ExternalSyntheticLambda2;-><init>()V
 PLcom/android/server/integrity/engine/RuleEvaluator$$ExternalSyntheticLambda2;->test(Ljava/lang/Object;)Z
 PLcom/android/server/integrity/engine/RuleEvaluator;->$r8$lambda$-bnpkV8rd_UVNoV7W_dUvmV2nrE(Landroid/content/integrity/Rule;)Z
@@ -24512,6 +25602,7 @@
 PLcom/android/server/integrity/engine/RuleEvaluator;->$r8$lambda$Xtm0wfLEyGa-Ejtza6VErwktC_M(Landroid/content/integrity/Rule;)Z
 PLcom/android/server/integrity/engine/RuleEvaluator;->evaluateRules(Ljava/util/List;Landroid/content/integrity/AppInstallMetadata;)Lcom/android/server/integrity/model/IntegrityCheckResult;
 PLcom/android/server/integrity/engine/RuleEvaluator;->lambda$evaluateRules$0(Landroid/content/integrity/AppInstallMetadata;Landroid/content/integrity/Rule;)Z
+PLcom/android/server/integrity/engine/RuleEvaluator;->lambda$evaluateRules$1(Landroid/content/integrity/Rule;)Z
 PLcom/android/server/integrity/engine/RuleEvaluator;->lambda$evaluateRules$2(Landroid/content/integrity/Rule;)Z
 HSPLcom/android/server/integrity/model/BitInputStream;-><init>(Ljava/io/InputStream;)V
 HSPLcom/android/server/integrity/model/BitInputStream;->getNext(I)I+]Lcom/android/server/integrity/model/BitInputStream;Lcom/android/server/integrity/model/BitInputStream;
@@ -24521,16 +25612,19 @@
 PLcom/android/server/integrity/model/BitOutputStream;->flush()V
 PLcom/android/server/integrity/model/BitOutputStream;->reset()V
 PLcom/android/server/integrity/model/BitOutputStream;->setNext()V
-HPLcom/android/server/integrity/model/BitOutputStream;->setNext(II)V
+HPLcom/android/server/integrity/model/BitOutputStream;->setNext(II)V+]Lcom/android/server/integrity/model/BitOutputStream;Lcom/android/server/integrity/model/BitOutputStream;
 HPLcom/android/server/integrity/model/BitOutputStream;->setNext(Z)V
 PLcom/android/server/integrity/model/ByteTrackedOutputStream;-><init>(Ljava/io/OutputStream;)V
 PLcom/android/server/integrity/model/ByteTrackedOutputStream;->getWrittenBytesCount()I
 PLcom/android/server/integrity/model/ByteTrackedOutputStream;->write([BII)V
 PLcom/android/server/integrity/model/IntegrityCheckResult$$ExternalSyntheticLambda0;-><init>()V
+PLcom/android/server/integrity/model/IntegrityCheckResult$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
 PLcom/android/server/integrity/model/IntegrityCheckResult$$ExternalSyntheticLambda1;-><init>()V
+PLcom/android/server/integrity/model/IntegrityCheckResult$$ExternalSyntheticLambda1;->test(Ljava/lang/Object;)Z
 PLcom/android/server/integrity/model/IntegrityCheckResult$Effect;-><clinit>()V
 PLcom/android/server/integrity/model/IntegrityCheckResult$Effect;-><init>(Ljava/lang/String;I)V
 PLcom/android/server/integrity/model/IntegrityCheckResult;->$r8$lambda$7R5dI0EzN7bSJcTl6vjvBZDdveA(Landroid/content/integrity/Rule;)Z
+PLcom/android/server/integrity/model/IntegrityCheckResult;->$r8$lambda$Rr3Ve_Mln_IcycjIZ9OQLZ-yWGs(Landroid/content/integrity/Rule;)Z
 PLcom/android/server/integrity/model/IntegrityCheckResult;-><init>(Lcom/android/server/integrity/model/IntegrityCheckResult$Effect;Ljava/util/List;)V
 PLcom/android/server/integrity/model/IntegrityCheckResult;->allow()Lcom/android/server/integrity/model/IntegrityCheckResult;
 PLcom/android/server/integrity/model/IntegrityCheckResult;->allow(Ljava/util/List;)Lcom/android/server/integrity/model/IntegrityCheckResult;
@@ -24541,13 +25635,14 @@
 PLcom/android/server/integrity/model/IntegrityCheckResult;->isCausedByAppCertRule()Z
 PLcom/android/server/integrity/model/IntegrityCheckResult;->isCausedByInstallerRule()Z
 PLcom/android/server/integrity/model/IntegrityCheckResult;->lambda$isCausedByAppCertRule$0(Landroid/content/integrity/Rule;)Z
+PLcom/android/server/integrity/model/IntegrityCheckResult;->lambda$isCausedByInstallerRule$1(Landroid/content/integrity/Rule;)Z
 HSPLcom/android/server/integrity/model/RuleMetadata;-><init>(Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/integrity/model/RuleMetadata;->getRuleProvider()Ljava/lang/String;
 PLcom/android/server/integrity/model/RuleMetadata;->getVersion()Ljava/lang/String;
 PLcom/android/server/integrity/parser/BinaryFileOperations;->getBooleanValue(Lcom/android/server/integrity/model/BitInputStream;)Z
 HSPLcom/android/server/integrity/parser/BinaryFileOperations;->getIntValue(Lcom/android/server/integrity/model/BitInputStream;)I
 HSPLcom/android/server/integrity/parser/BinaryFileOperations;->getStringValue(Lcom/android/server/integrity/model/BitInputStream;)Ljava/lang/String;
-HSPLcom/android/server/integrity/parser/BinaryFileOperations;->getStringValue(Lcom/android/server/integrity/model/BitInputStream;IZ)Ljava/lang/String;
+HSPLcom/android/server/integrity/parser/BinaryFileOperations;->getStringValue(Lcom/android/server/integrity/model/BitInputStream;IZ)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/nio/ByteBuffer;Ljava/nio/HeapByteBuffer;]Lcom/android/server/integrity/model/BitInputStream;Lcom/android/server/integrity/model/BitInputStream;
 PLcom/android/server/integrity/parser/LimitInputStream;-><init>(Ljava/io/InputStream;I)V
 PLcom/android/server/integrity/parser/LimitInputStream;->available()I
 PLcom/android/server/integrity/parser/LimitInputStream;->read([BII)I
@@ -24573,7 +25668,7 @@
 HSPLcom/android/server/integrity/parser/RuleBinaryParser;-><init>()V
 PLcom/android/server/integrity/parser/RuleBinaryParser;->parse(Lcom/android/server/integrity/parser/RandomAccessObject;Ljava/util/List;)Ljava/util/List;
 HPLcom/android/server/integrity/parser/RuleBinaryParser;->parseAtomicFormula(Lcom/android/server/integrity/model/BitInputStream;)Landroid/content/integrity/AtomicFormula;
-PLcom/android/server/integrity/parser/RuleBinaryParser;->parseCompoundFormula(Lcom/android/server/integrity/model/BitInputStream;)Landroid/content/integrity/CompoundFormula;
+HPLcom/android/server/integrity/parser/RuleBinaryParser;->parseCompoundFormula(Lcom/android/server/integrity/model/BitInputStream;)Landroid/content/integrity/CompoundFormula;
 PLcom/android/server/integrity/parser/RuleBinaryParser;->parseFormula(Lcom/android/server/integrity/model/BitInputStream;)Landroid/content/integrity/IntegrityFormula;
 PLcom/android/server/integrity/parser/RuleBinaryParser;->parseIndexedRules(Lcom/android/server/integrity/parser/RandomAccessInputStream;Ljava/util/List;)Ljava/util/List;
 PLcom/android/server/integrity/parser/RuleBinaryParser;->parseRule(Lcom/android/server/integrity/model/BitInputStream;)Landroid/content/integrity/Rule;
@@ -24630,7 +25725,7 @@
 HSPLcom/android/server/job/JobConcurrencyManager$$ExternalSyntheticLambda0;-><init>()V
 HPLcom/android/server/job/JobConcurrencyManager$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLcom/android/server/job/JobConcurrencyManager$$ExternalSyntheticLambda1;-><init>()V
-HPLcom/android/server/job/JobConcurrencyManager$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/job/JobConcurrencyManager$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/job/JobConcurrencyManager$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/job/JobConcurrencyManager;)V
 PLcom/android/server/job/JobConcurrencyManager$$ExternalSyntheticLambda2;->run()V
 PLcom/android/server/job/JobConcurrencyManager$$ExternalSyntheticLambda3;-><init>(Landroid/util/IndentingPrintWriter;)V
@@ -24647,7 +25742,7 @@
 HPLcom/android/server/job/JobConcurrencyManager$PackageStats;->-$$Nest$madjustStagedCount(Lcom/android/server/job/JobConcurrencyManager$PackageStats;ZZ)V+]Lcom/android/server/job/JobConcurrencyManager$PackageStats;Lcom/android/server/job/JobConcurrencyManager$PackageStats;
 PLcom/android/server/job/JobConcurrencyManager$PackageStats;->-$$Nest$mdumpLocked(Lcom/android/server/job/JobConcurrencyManager$PackageStats;Landroid/util/IndentingPrintWriter;)V
 HPLcom/android/server/job/JobConcurrencyManager$PackageStats;->-$$Nest$mresetStagedCount(Lcom/android/server/job/JobConcurrencyManager$PackageStats;)V
-HPLcom/android/server/job/JobConcurrencyManager$PackageStats;->-$$Nest$msetPackage(Lcom/android/server/job/JobConcurrencyManager$PackageStats;ILjava/lang/String;)V
+HPLcom/android/server/job/JobConcurrencyManager$PackageStats;->-$$Nest$msetPackage(Lcom/android/server/job/JobConcurrencyManager$PackageStats;ILjava/lang/String;)V+]Lcom/android/server/job/JobConcurrencyManager$PackageStats;Lcom/android/server/job/JobConcurrencyManager$PackageStats;
 HPLcom/android/server/job/JobConcurrencyManager$PackageStats;-><init>()V
 HPLcom/android/server/job/JobConcurrencyManager$PackageStats;->adjustRunningCount(ZZ)V
 HPLcom/android/server/job/JobConcurrencyManager$PackageStats;->adjustStagedCount(ZZ)V
@@ -24656,33 +25751,33 @@
 HPLcom/android/server/job/JobConcurrencyManager$PackageStats;->setPackage(ILjava/lang/String;)V+]Lcom/android/server/job/JobConcurrencyManager$PackageStats;Lcom/android/server/job/JobConcurrencyManager$PackageStats;
 HSPLcom/android/server/job/JobConcurrencyManager$WorkConfigLimitsPerMemoryTrimLevel;-><init>(Lcom/android/server/job/JobConcurrencyManager$WorkTypeConfig;Lcom/android/server/job/JobConcurrencyManager$WorkTypeConfig;Lcom/android/server/job/JobConcurrencyManager$WorkTypeConfig;Lcom/android/server/job/JobConcurrencyManager$WorkTypeConfig;)V
 HSPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;-><init>()V
-HPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->adjustPendingJobCount(IZ)I+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
-HPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->canJobStart(I)I+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
+HSPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->adjustPendingJobCount(IZ)I+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
+HSPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->canJobStart(I)I+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
 HPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->canJobStart(II)I+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;
-HPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->decrementPendingJobCount(I)V
+HSPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->decrementPendingJobCount(I)V+]Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;
 HPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->getPendingJobCount(I)I
-HPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->getRunningJobCount(I)I+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
-HPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->incrementPendingJobCount(I)V
+HSPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->getRunningJobCount(I)I+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
+HSPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->incrementPendingJobCount(I)V
 HPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->incrementRunningJobCount(I)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
 HPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->isOverTypeLimit(I)Z
 HPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->maybeAdjustReservations(I)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
-HPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->onCountDone()V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
+HSPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->onCountDone()V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
 HPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->onJobFinished(I)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;
-HPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->onJobStarted(I)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
+HSPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->onJobStarted(I)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
 HPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->onStagedJobFailed(I)V
-HPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->resetCounts()V
-HPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->resetStagingCount()V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
-HPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->setConfig(Lcom/android/server/job/JobConcurrencyManager$WorkTypeConfig;)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/job/JobConcurrencyManager$WorkTypeConfig;Lcom/android/server/job/JobConcurrencyManager$WorkTypeConfig;
-HPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->stageJob(II)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;
+HSPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->resetCounts()V
+HSPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->resetStagingCount()V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
+HSPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->setConfig(Lcom/android/server/job/JobConcurrencyManager$WorkTypeConfig;)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/job/JobConcurrencyManager$WorkTypeConfig;Lcom/android/server/job/JobConcurrencyManager$WorkTypeConfig;
+HSPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->stageJob(II)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;
 HPLcom/android/server/job/JobConcurrencyManager$WorkCountTracker;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Landroid/util/SparseIntArray;
 HSPLcom/android/server/job/JobConcurrencyManager$WorkTypeConfig;-><init>(Ljava/lang/String;ILjava/util/List;Ljava/util/List;)V
 HPLcom/android/server/job/JobConcurrencyManager$WorkTypeConfig;->dump(Landroid/util/IndentingPrintWriter;)V
-HPLcom/android/server/job/JobConcurrencyManager$WorkTypeConfig;->getMax(I)I
-HPLcom/android/server/job/JobConcurrencyManager$WorkTypeConfig;->getMaxTotal()I
-HPLcom/android/server/job/JobConcurrencyManager$WorkTypeConfig;->getMinReserved(I)I
+HSPLcom/android/server/job/JobConcurrencyManager$WorkTypeConfig;->getMax(I)I
+HSPLcom/android/server/job/JobConcurrencyManager$WorkTypeConfig;->getMaxTotal()I
+HSPLcom/android/server/job/JobConcurrencyManager$WorkTypeConfig;->getMinReserved(I)I
 HSPLcom/android/server/job/JobConcurrencyManager$WorkTypeConfig;->update(Landroid/provider/DeviceConfig$Properties;)V
 HPLcom/android/server/job/JobConcurrencyManager;->$r8$lambda$3fTsTfz5fg3tqIyK38o_S6M2TlQ(Landroid/util/IndentingPrintWriter;Lcom/android/server/job/JobConcurrencyManager$PackageStats;)V
-HPLcom/android/server/job/JobConcurrencyManager;->$r8$lambda$NoaxEiu6_xJEv1MXjQuEjF_zoQw(Ljava/lang/Object;)V
+HSPLcom/android/server/job/JobConcurrencyManager;->$r8$lambda$NoaxEiu6_xJEv1MXjQuEjF_zoQw(Ljava/lang/Object;)V
 HPLcom/android/server/job/JobConcurrencyManager;->$r8$lambda$neqqAqre06aYhSdsY9gZuDkQR8M(Lcom/android/server/job/JobConcurrencyManager$ContextAssignment;Lcom/android/server/job/JobConcurrencyManager$ContextAssignment;)I
 PLcom/android/server/job/JobConcurrencyManager;->$r8$lambda$q1zni_rSk5NsoVWlH1JE0tQHT2c(Lcom/android/server/job/JobConcurrencyManager;)V
 HPLcom/android/server/job/JobConcurrencyManager;->-$$Nest$fgetmLock(Lcom/android/server/job/JobConcurrencyManager;)Ljava/lang/Object;
@@ -24693,62 +25788,62 @@
 HSPLcom/android/server/job/JobConcurrencyManager;-><clinit>()V
 HSPLcom/android/server/job/JobConcurrencyManager;-><init>(Lcom/android/server/job/JobSchedulerService;)V
 PLcom/android/server/job/JobConcurrencyManager;->addRunningJobForTesting(Lcom/android/server/job/controllers/JobStatus;)V
-HPLcom/android/server/job/JobConcurrencyManager;->assignJobsToContextsInternalLocked()V+]Lcom/android/server/job/JobConcurrencyManager$ContextAssignment;Lcom/android/server/job/JobConcurrencyManager$ContextAssignment;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/Pools$Pool;Landroid/util/Pools$SimplePool;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;]Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;
-HPLcom/android/server/job/JobConcurrencyManager;->assignJobsToContextsLocked()V+]Lcom/android/internal/util/jobs/StatLogger;Lcom/android/internal/util/jobs/StatLogger;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;
+HSPLcom/android/server/job/JobConcurrencyManager;->assignJobsToContextsInternalLocked()V+]Lcom/android/server/job/JobConcurrencyManager$ContextAssignment;Lcom/android/server/job/JobConcurrencyManager$ContextAssignment;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/Pools$Pool;Landroid/util/Pools$SimplePool;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;]Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;
+HSPLcom/android/server/job/JobConcurrencyManager;->assignJobsToContextsLocked()V+]Lcom/android/internal/util/jobs/StatLogger;Lcom/android/internal/util/jobs/StatLogger;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;
 PLcom/android/server/job/JobConcurrencyManager;->createNewJobServiceContext()Lcom/android/server/job/JobServiceContext;
 PLcom/android/server/job/JobConcurrencyManager;->dumpContextInfoLocked(Landroid/util/IndentingPrintWriter;Ljava/util/function/Predicate;JJ)V
 PLcom/android/server/job/JobConcurrencyManager;->dumpLocked(Landroid/util/IndentingPrintWriter;JJ)V
 PLcom/android/server/job/JobConcurrencyManager;->dumpProtoLocked(Landroid/util/proto/ProtoOutputStream;JJJ)V
 PLcom/android/server/job/JobConcurrencyManager;->executeTimeoutCommandLocked(Ljava/io/PrintWriter;Ljava/lang/String;IZI)Z
-HPLcom/android/server/job/JobConcurrencyManager;->getJobWorkTypes(Lcom/android/server/job/controllers/JobStatus;)I+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;
+HSPLcom/android/server/job/JobConcurrencyManager;->getJobWorkTypes(Lcom/android/server/job/controllers/JobStatus;)I+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;
 HPLcom/android/server/job/JobConcurrencyManager;->getPackageConcurrencyLimitEj()I
 HPLcom/android/server/job/JobConcurrencyManager;->getPackageStatsForTesting(ILjava/lang/String;)Lcom/android/server/job/JobConcurrencyManager$PackageStats;+]Landroid/util/SparseArrayMap;Lcom/android/server/job/JobConcurrencyManager;
-HPLcom/android/server/job/JobConcurrencyManager;->getPkgStatsLocked(ILjava/lang/String;)Lcom/android/server/job/JobConcurrencyManager$PackageStats;+]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Landroid/util/Pools$Pool;Landroid/util/Pools$SimplePool;
-HPLcom/android/server/job/JobConcurrencyManager;->getRunningJobsLocked()Landroid/util/ArraySet;
+HSPLcom/android/server/job/JobConcurrencyManager;->getPkgStatsLocked(ILjava/lang/String;)Lcom/android/server/job/JobConcurrencyManager$PackageStats;+]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Landroid/util/Pools$Pool;Landroid/util/Pools$SimplePool;
+HSPLcom/android/server/job/JobConcurrencyManager;->getRunningJobsLocked()Landroid/util/ArraySet;
 HSPLcom/android/server/job/JobConcurrencyManager;->isJobRunningLocked(Lcom/android/server/job/controllers/JobStatus;)Z+]Landroid/util/ArraySet;Landroid/util/ArraySet;
-HPLcom/android/server/job/JobConcurrencyManager;->isPkgConcurrencyLimitedLocked(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/job/JobConcurrencyManager$WorkTypeConfig;Lcom/android/server/job/JobConcurrencyManager$WorkTypeConfig;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
+HSPLcom/android/server/job/JobConcurrencyManager;->isPkgConcurrencyLimitedLocked(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/job/JobConcurrencyManager$WorkTypeConfig;Lcom/android/server/job/JobConcurrencyManager$WorkTypeConfig;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
 HPLcom/android/server/job/JobConcurrencyManager;->isSimilarJobRunningLocked(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/job/JobConcurrencyManager;->lambda$dumpLocked$2(Landroid/util/IndentingPrintWriter;Lcom/android/server/job/JobConcurrencyManager$PackageStats;)V
-HPLcom/android/server/job/JobConcurrencyManager;->lambda$new$1(Ljava/lang/Object;)V
+HSPLcom/android/server/job/JobConcurrencyManager;->lambda$new$1(Ljava/lang/Object;)V
 HPLcom/android/server/job/JobConcurrencyManager;->lambda$static$0(Lcom/android/server/job/JobConcurrencyManager$ContextAssignment;Lcom/android/server/job/JobConcurrencyManager$ContextAssignment;)I+]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;
-HPLcom/android/server/job/JobConcurrencyManager;->noteConcurrency()V
+HSPLcom/android/server/job/JobConcurrencyManager;->noteConcurrency()V
 HPLcom/android/server/job/JobConcurrencyManager;->onAppRemovedLocked(Ljava/lang/String;I)V
 HSPLcom/android/server/job/JobConcurrencyManager;->onInteractiveStateChanged(Z)V
-HPLcom/android/server/job/JobConcurrencyManager;->onJobCompletedLocked(Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/controllers/JobStatus;I)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Landroid/util/Pools$Pool;Landroid/util/Pools$SimplePool;]Ljava/util/List;Ljava/util/ArrayList;,Landroid/util/ArraySet;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;]Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;,Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;
+HPLcom/android/server/job/JobConcurrencyManager;->onJobCompletedLocked(Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/controllers/JobStatus;I)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Landroid/util/Pools$Pool;Landroid/util/Pools$SimplePool;]Ljava/util/List;Ljava/util/ArrayList;,Landroid/util/ArraySet;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;]Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;,Lcom/android/server/job/JobSchedulerService;
 HSPLcom/android/server/job/JobConcurrencyManager;->onSystemReady()V
 HSPLcom/android/server/job/JobConcurrencyManager;->onThirdPartyAppsCanStart()V
-HPLcom/android/server/job/JobConcurrencyManager;->onUidBiasChangedLocked(II)V
+HSPLcom/android/server/job/JobConcurrencyManager;->onUidBiasChangedLocked(II)V
 HPLcom/android/server/job/JobConcurrencyManager;->onUserRemoved(I)V
 HPLcom/android/server/job/JobConcurrencyManager;->printAssignments(Ljava/lang/String;[Ljava/util/Collection;)Ljava/lang/String;
 PLcom/android/server/job/JobConcurrencyManager;->printPendingQueueLocked()Ljava/lang/String;
 HPLcom/android/server/job/JobConcurrencyManager;->rampUpForScreenOff()V
-HPLcom/android/server/job/JobConcurrencyManager;->refreshSystemStateLocked()Z+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$1;]Lcom/android/internal/util/jobs/StatLogger;Lcom/android/internal/util/jobs/StatLogger;]Landroid/app/IActivityManager;Lcom/android/server/am/ActivityManagerService;
-HPLcom/android/server/job/JobConcurrencyManager;->shouldRunAsFgUserJob(Lcom/android/server/job/controllers/JobStatus;)Z
+HSPLcom/android/server/job/JobConcurrencyManager;->refreshSystemStateLocked()Z+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$1;]Lcom/android/internal/util/jobs/StatLogger;Lcom/android/internal/util/jobs/StatLogger;]Landroid/app/IActivityManager;Lcom/android/server/am/ActivityManagerService;
+HSPLcom/android/server/job/JobConcurrencyManager;->shouldRunAsFgUserJob(Lcom/android/server/job/controllers/JobStatus;)Z
 HPLcom/android/server/job/JobConcurrencyManager;->shouldStopRunningJobLocked(Lcom/android/server/job/JobServiceContext;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/JobConcurrencyManager$WorkTypeConfig;Lcom/android/server/job/JobConcurrencyManager$WorkTypeConfig;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Landroid/os/PowerManager;Landroid/os/PowerManager;]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;]Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;
-HPLcom/android/server/job/JobConcurrencyManager;->startJobLocked(Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/controllers/JobStatus;I)V+]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/job/JobPackageTracker;Lcom/android/server/job/JobPackageTracker;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/os/PowerManager$WakeLock;Landroid/os/PowerManager$WakeLock;]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/StateController;megamorphic_types]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Landroid/os/PowerManager;Landroid/os/PowerManager;]Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HPLcom/android/server/job/JobConcurrencyManager;->stopJobOnServiceContextLocked(Lcom/android/server/job/controllers/JobStatus;IILjava/lang/String;)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;
+HSPLcom/android/server/job/JobConcurrencyManager;->startJobLocked(Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/controllers/JobStatus;I)V+]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/job/JobPackageTracker;Lcom/android/server/job/JobPackageTracker;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/os/PowerManager$WakeLock;Landroid/os/PowerManager$WakeLock;]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/StateController;megamorphic_types]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Landroid/os/PowerManager;Landroid/os/PowerManager;]Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HPLcom/android/server/job/JobConcurrencyManager;->stopJobOnServiceContextLocked(Lcom/android/server/job/controllers/JobStatus;IILjava/lang/String;)Z+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
 PLcom/android/server/job/JobConcurrencyManager;->stopLongRunningJobsLocked(Ljava/lang/String;)V
-HPLcom/android/server/job/JobConcurrencyManager;->stopNonReadyActiveJobsLocked()V
+HSPLcom/android/server/job/JobConcurrencyManager;->stopNonReadyActiveJobsLocked()V
 PLcom/android/server/job/JobConcurrencyManager;->stopUnexemptedJobsForDoze()V
 HPLcom/android/server/job/JobConcurrencyManager;->updateConfigLocked()V
-HPLcom/android/server/job/JobConcurrencyManager;->updateCounterConfigLocked()V+]Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;
-HPLcom/android/server/job/JobConcurrencyManager;->updateNonRunningPrioritiesLocked(Lcom/android/server/job/PendingJobQueue;Z)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;,Lcom/android/server/job/JobServiceContext;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;]Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;
+HSPLcom/android/server/job/JobConcurrencyManager;->updateCounterConfigLocked()V+]Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;
+HSPLcom/android/server/job/JobConcurrencyManager;->updateNonRunningPrioritiesLocked(Lcom/android/server/job/PendingJobQueue;Z)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;,Lcom/android/server/job/JobServiceContext;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;]Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;Lcom/android/server/job/JobConcurrencyManager$WorkCountTracker;
 HPLcom/android/server/job/JobConcurrencyManager;->workTypeToString(I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Landroid/os/PowerManager$WakeLock;
 HSPLcom/android/server/job/JobPackageTracker$DataSet;-><init>()V
 PLcom/android/server/job/JobPackageTracker$DataSet;-><init>(Lcom/android/server/job/JobPackageTracker$DataSet;)V
 HPLcom/android/server/job/JobPackageTracker$DataSet;->addTo(Lcom/android/server/job/JobPackageTracker$DataSet;J)V
 HPLcom/android/server/job/JobPackageTracker$DataSet;->decActive(ILjava/lang/String;JI)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/job/JobPackageTracker$DataSet;Lcom/android/server/job/JobPackageTracker$DataSet;
 HPLcom/android/server/job/JobPackageTracker$DataSet;->decActiveTop(ILjava/lang/String;JI)V
-HPLcom/android/server/job/JobPackageTracker$DataSet;->decPending(ILjava/lang/String;J)V
+HSPLcom/android/server/job/JobPackageTracker$DataSet;->decPending(ILjava/lang/String;J)V
 HPLcom/android/server/job/JobPackageTracker$DataSet;->dump(Landroid/util/IndentingPrintWriter;Ljava/lang/String;JJI)V
 HPLcom/android/server/job/JobPackageTracker$DataSet;->dump(Landroid/util/proto/ProtoOutputStream;JJJI)V
 HPLcom/android/server/job/JobPackageTracker$DataSet;->finish(Lcom/android/server/job/JobPackageTracker$DataSet;J)V
-HPLcom/android/server/job/JobPackageTracker$DataSet;->getEntry(ILjava/lang/String;)Lcom/android/server/job/JobPackageTracker$PackageEntry;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HPLcom/android/server/job/JobPackageTracker$DataSet;->getOrCreateEntry(ILjava/lang/String;)Lcom/android/server/job/JobPackageTracker$PackageEntry;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HPLcom/android/server/job/JobPackageTracker$DataSet;->getTotalTime(J)J
-HPLcom/android/server/job/JobPackageTracker$DataSet;->incActive(ILjava/lang/String;J)V
+HSPLcom/android/server/job/JobPackageTracker$DataSet;->getEntry(ILjava/lang/String;)Lcom/android/server/job/JobPackageTracker$PackageEntry;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/job/JobPackageTracker$DataSet;->getOrCreateEntry(ILjava/lang/String;)Lcom/android/server/job/JobPackageTracker$PackageEntry;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/job/JobPackageTracker$DataSet;->getTotalTime(J)J
+HSPLcom/android/server/job/JobPackageTracker$DataSet;->incActive(ILjava/lang/String;J)V
 HPLcom/android/server/job/JobPackageTracker$DataSet;->incActiveTop(ILjava/lang/String;J)V
-HPLcom/android/server/job/JobPackageTracker$DataSet;->incPending(ILjava/lang/String;J)V+]Lcom/android/server/job/JobPackageTracker$DataSet;Lcom/android/server/job/JobPackageTracker$DataSet;
+HSPLcom/android/server/job/JobPackageTracker$DataSet;->incPending(ILjava/lang/String;J)V+]Lcom/android/server/job/JobPackageTracker$DataSet;Lcom/android/server/job/JobPackageTracker$DataSet;
 PLcom/android/server/job/JobPackageTracker$DataSet;->printDuration(Landroid/util/IndentingPrintWriter;JJILjava/lang/String;)Z
 PLcom/android/server/job/JobPackageTracker$DataSet;->printPackageEntryState(Landroid/util/proto/ProtoOutputStream;JJI)V
 HPLcom/android/server/job/JobPackageTracker$PackageEntry;-><init>()V
@@ -24756,18 +25851,18 @@
 HPLcom/android/server/job/JobPackageTracker$PackageEntry;->getActiveTopTime(J)J
 HPLcom/android/server/job/JobPackageTracker$PackageEntry;->getPendingTime(J)J
 HSPLcom/android/server/job/JobPackageTracker;-><init>()V
-HPLcom/android/server/job/JobPackageTracker;->addEvent(IILjava/lang/String;IILjava/lang/String;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/internal/util/jobs/RingBufferIndices;Lcom/android/internal/util/jobs/RingBufferIndices;
+HSPLcom/android/server/job/JobPackageTracker;->addEvent(IILjava/lang/String;IILjava/lang/String;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/internal/util/jobs/RingBufferIndices;Lcom/android/internal/util/jobs/RingBufferIndices;
 PLcom/android/server/job/JobPackageTracker;->dump(Landroid/util/IndentingPrintWriter;I)V
 PLcom/android/server/job/JobPackageTracker;->dump(Landroid/util/proto/ProtoOutputStream;JI)V
 HPLcom/android/server/job/JobPackageTracker;->dumpHistory(Landroid/util/IndentingPrintWriter;I)Z
 PLcom/android/server/job/JobPackageTracker;->dumpHistory(Landroid/util/proto/ProtoOutputStream;JI)V
-HPLcom/android/server/job/JobPackageTracker;->getLoadFactor(Lcom/android/server/job/controllers/JobStatus;)F+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$1;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/JobPackageTracker$PackageEntry;Lcom/android/server/job/JobPackageTracker$PackageEntry;]Lcom/android/server/job/JobPackageTracker$DataSet;Lcom/android/server/job/JobPackageTracker$DataSet;
-HPLcom/android/server/job/JobPackageTracker;->noteActive(Lcom/android/server/job/controllers/JobStatus;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$1;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Lcom/android/server/job/JobPackageTracker;Lcom/android/server/job/JobPackageTracker;]Lcom/android/server/job/JobPackageTracker$DataSet;Lcom/android/server/job/JobPackageTracker$DataSet;
-HPLcom/android/server/job/JobPackageTracker;->noteConcurrency(II)V
+HSPLcom/android/server/job/JobPackageTracker;->getLoadFactor(Lcom/android/server/job/controllers/JobStatus;)F+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$1;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/JobPackageTracker$PackageEntry;Lcom/android/server/job/JobPackageTracker$PackageEntry;]Lcom/android/server/job/JobPackageTracker$DataSet;Lcom/android/server/job/JobPackageTracker$DataSet;
+HSPLcom/android/server/job/JobPackageTracker;->noteActive(Lcom/android/server/job/controllers/JobStatus;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$1;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Lcom/android/server/job/JobPackageTracker;Lcom/android/server/job/JobPackageTracker;]Lcom/android/server/job/JobPackageTracker$DataSet;Lcom/android/server/job/JobPackageTracker$DataSet;
+HSPLcom/android/server/job/JobPackageTracker;->noteConcurrency(II)V
 HPLcom/android/server/job/JobPackageTracker;->noteInactive(Lcom/android/server/job/controllers/JobStatus;ILjava/lang/String;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$1;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Lcom/android/server/job/JobPackageTracker;Lcom/android/server/job/JobPackageTracker;]Lcom/android/server/job/JobPackageTracker$DataSet;Lcom/android/server/job/JobPackageTracker$DataSet;
-HPLcom/android/server/job/JobPackageTracker;->noteNonpending(Lcom/android/server/job/controllers/JobStatus;)V
-HPLcom/android/server/job/JobPackageTracker;->notePending(Lcom/android/server/job/controllers/JobStatus;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$1;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/JobPackageTracker;Lcom/android/server/job/JobPackageTracker;]Lcom/android/server/job/JobPackageTracker$DataSet;Lcom/android/server/job/JobPackageTracker$DataSet;
-HPLcom/android/server/job/JobPackageTracker;->rebatchIfNeeded(J)V+]Lcom/android/server/job/JobPackageTracker$DataSet;Lcom/android/server/job/JobPackageTracker$DataSet;
+HSPLcom/android/server/job/JobPackageTracker;->noteNonpending(Lcom/android/server/job/controllers/JobStatus;)V
+HSPLcom/android/server/job/JobPackageTracker;->notePending(Lcom/android/server/job/controllers/JobStatus;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$1;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/JobPackageTracker;Lcom/android/server/job/JobPackageTracker;]Lcom/android/server/job/JobPackageTracker$DataSet;Lcom/android/server/job/JobPackageTracker$DataSet;
+HSPLcom/android/server/job/JobPackageTracker;->rebatchIfNeeded(J)V+]Lcom/android/server/job/JobPackageTracker$DataSet;Lcom/android/server/job/JobPackageTracker$DataSet;
 HPLcom/android/server/job/JobSchedulerInternal;->addBackingUpUid(I)V
 HPLcom/android/server/job/JobSchedulerInternal;->cancelJobsForUid(IIILjava/lang/String;)V
 HPLcom/android/server/job/JobSchedulerInternal;->clearAllBackingUpUids()V
@@ -24795,9 +25890,9 @@
 HSPLcom/android/server/job/JobSchedulerService$3;-><init>(Lcom/android/server/job/JobSchedulerService;)V
 HPLcom/android/server/job/JobSchedulerService$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V+]Lcom/android/server/job/controllers/StateController;megamorphic_types]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/job/JobSchedulerService$4;-><init>(Lcom/android/server/job/JobSchedulerService;)V
-HSPLcom/android/server/job/JobSchedulerService$4;->onUidActive(I)V
+HSPLcom/android/server/job/JobSchedulerService$4;->onUidActive(I)V+]Landroid/os/Handler;Lcom/android/server/job/JobSchedulerService$JobHandler;]Landroid/os/Message;Landroid/os/Message;
 PLcom/android/server/job/JobSchedulerService$4;->onUidCachedChanged(IZ)V
-HSPLcom/android/server/job/JobSchedulerService$4;->onUidGone(IZ)V
+HSPLcom/android/server/job/JobSchedulerService$4;->onUidGone(IZ)V+]Landroid/os/Handler;Lcom/android/server/job/JobSchedulerService$JobHandler;]Landroid/os/Message;Landroid/os/Message;
 HSPLcom/android/server/job/JobSchedulerService$4;->onUidIdle(IZ)V
 HPLcom/android/server/job/JobSchedulerService$4;->onUidProcAdjChanged(I)V
 HSPLcom/android/server/job/JobSchedulerService$4;->onUidStateChanged(IIJI)V+]Landroid/os/Handler;Lcom/android/server/job/JobSchedulerService$JobHandler;]Landroid/os/Message;Landroid/os/Message;
@@ -24812,7 +25907,7 @@
 HSPLcom/android/server/job/JobSchedulerService$BatteryStateTracker;->isBatteryNotLow()Z
 HSPLcom/android/server/job/JobSchedulerService$BatteryStateTracker;->isCharging()Z
 PLcom/android/server/job/JobSchedulerService$BatteryStateTracker;->isMonitoring()Z
-PLcom/android/server/job/JobSchedulerService$BatteryStateTracker;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/job/JobSchedulerService$BatteryStateTracker;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HPLcom/android/server/job/JobSchedulerService$BatteryStateTracker;->onReceiveInternal(Landroid/content/Intent;)V
 HSPLcom/android/server/job/JobSchedulerService$BatteryStateTracker;->startTracking()V
 HSPLcom/android/server/job/JobSchedulerService$CloudProviderChangeListener;-><init>(Lcom/android/server/job/JobSchedulerService;)V
@@ -24838,7 +25933,7 @@
 PLcom/android/server/job/JobSchedulerService$DeferredJobCounter;->accept(Ljava/lang/Object;)V
 PLcom/android/server/job/JobSchedulerService$DeferredJobCounter;->numDeferred()I
 HSPLcom/android/server/job/JobSchedulerService$JobHandler;-><init>(Lcom/android/server/job/JobSchedulerService;Landroid/os/Looper;)V
-HPLcom/android/server/job/JobSchedulerService$JobHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/job/controllers/DeviceIdleJobsController;Lcom/android/server/job/controllers/DeviceIdleJobsController;]Lcom/android/server/job/JobPackageTracker;Lcom/android/server/job/JobPackageTracker;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/internal/os/SomeArgs;Lcom/android/internal/os/SomeArgs;
+HSPLcom/android/server/job/JobSchedulerService$JobHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/job/controllers/DeviceIdleJobsController;Lcom/android/server/job/controllers/DeviceIdleJobsController;]Lcom/android/server/job/JobPackageTracker;Lcom/android/server/job/JobPackageTracker;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/internal/os/SomeArgs;Lcom/android/internal/os/SomeArgs;
 PLcom/android/server/job/JobSchedulerService$JobSchedulerStub$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
 PLcom/android/server/job/JobSchedulerService$JobSchedulerStub;->$r8$lambda$5QdusXbtTwDVPTJRLwMcG2yKy8o(Lcom/android/server/job/JobSchedulerService$JobSchedulerStub;Ljava/util/ArrayList;Lcom/android/server/job/controllers/JobStatus;)V
 HSPLcom/android/server/job/JobSchedulerService$JobSchedulerStub;-><init>(Lcom/android/server/job/JobSchedulerService;)V
@@ -24869,9 +25964,9 @@
 HPLcom/android/server/job/JobSchedulerService$LocalService;->removeBackingUpUid(I)V
 PLcom/android/server/job/JobSchedulerService$LocalService;->reportAppUsage(Ljava/lang/String;I)V
 HSPLcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;-><init>(Lcom/android/server/job/JobSchedulerService;)V
-HPLcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;->accept(Lcom/android/server/job/controllers/JobStatus;)V+]Ljava/time/Clock;Ljava/time/Clock$SystemClock;,Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/PrefetchController;Lcom/android/server/job/controllers/PrefetchController;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/job/restrictions/JobRestriction;Lcom/android/server/job/restrictions/ThermalStatusRestriction;
-HPLcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;->accept(Ljava/lang/Object;)V+]Lcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;Lcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;
-HPLcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;->postProcessLocked()V+]Lcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;Lcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
+HSPLcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;->accept(Lcom/android/server/job/controllers/JobStatus;)V+]Ljava/time/Clock;Ljava/time/Clock$SystemClock;,Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/PrefetchController;Lcom/android/server/job/controllers/PrefetchController;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Lcom/android/server/job/restrictions/JobRestriction;Lcom/android/server/job/restrictions/ThermalStatusRestriction;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;
+HSPLcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;->accept(Ljava/lang/Object;)V+]Lcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;Lcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;
+HSPLcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;->postProcessLocked()V+]Lcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;Lcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
 HSPLcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;->reset()V
 HPLcom/android/server/job/JobSchedulerService$MySimpleClock$1;-><init>(Lcom/android/server/job/JobSchedulerService$MySimpleClock;Ljava/time/ZoneId;)V
 PLcom/android/server/job/JobSchedulerService$MySimpleClock$1;->millis()J
@@ -24886,7 +25981,7 @@
 HPLcom/android/server/job/JobSchedulerService$ReadyJobQueueFunctor;->accept(Ljava/lang/Object;)V+]Lcom/android/server/job/JobSchedulerService$ReadyJobQueueFunctor;Lcom/android/server/job/JobSchedulerService$ReadyJobQueueFunctor;
 HPLcom/android/server/job/JobSchedulerService$ReadyJobQueueFunctor;->postProcessLocked()V
 HSPLcom/android/server/job/JobSchedulerService$StandbyTracker;-><init>(Lcom/android/server/job/JobSchedulerService;)V
-PLcom/android/server/job/JobSchedulerService$StandbyTracker;->onAppIdleStateChanged(Ljava/lang/String;IZII)V
+HSPLcom/android/server/job/JobSchedulerService$StandbyTracker;->onAppIdleStateChanged(Ljava/lang/String;IZII)V
 HPLcom/android/server/job/JobSchedulerService$StandbyTracker;->onUserInteractionStarted(Ljava/lang/String;I)V
 PLcom/android/server/job/JobSchedulerService;->$r8$lambda$FW3xVckdaGsK-O3ZCH2oRZ96SQo(ILjava/lang/String;Ljava/lang/String;Lcom/android/server/job/controllers/JobStatus;)Z
 HPLcom/android/server/job/JobSchedulerService;->$r8$lambda$KYaGpoS2x0DQk1cZvNJMovHgJqs(ILcom/android/server/job/controllers/JobStatus;)Z
@@ -24899,52 +25994,52 @@
 PLcom/android/server/job/JobSchedulerService;->-$$Nest$fgetmBackingUpUids(Lcom/android/server/job/JobSchedulerService;)Landroid/util/SparseBooleanArray;
 PLcom/android/server/job/JobSchedulerService;->-$$Nest$fgetmChangedJobList(Lcom/android/server/job/JobSchedulerService;)Landroid/util/ArraySet;
 PLcom/android/server/job/JobSchedulerService;->-$$Nest$fgetmCloudMediaProviderPackages(Lcom/android/server/job/JobSchedulerService;)Landroid/util/SparseArray;
-HPLcom/android/server/job/JobSchedulerService;->-$$Nest$fgetmDeviceIdleJobsController(Lcom/android/server/job/JobSchedulerService;)Lcom/android/server/job/controllers/DeviceIdleJobsController;
+HSPLcom/android/server/job/JobSchedulerService;->-$$Nest$fgetmDeviceIdleJobsController(Lcom/android/server/job/JobSchedulerService;)Lcom/android/server/job/controllers/DeviceIdleJobsController;
 PLcom/android/server/job/JobSchedulerService;->-$$Nest$fgetmJobTimeUpdater(Lcom/android/server/job/JobSchedulerService;)Ljava/lang/Runnable;
-HPLcom/android/server/job/JobSchedulerService;->-$$Nest$fgetmPendingJobQueue(Lcom/android/server/job/JobSchedulerService;)Lcom/android/server/job/PendingJobQueue;
+HSPLcom/android/server/job/JobSchedulerService;->-$$Nest$fgetmPendingJobQueue(Lcom/android/server/job/JobSchedulerService;)Lcom/android/server/job/PendingJobQueue;
 PLcom/android/server/job/JobSchedulerService;->-$$Nest$fgetmPrefetchController(Lcom/android/server/job/JobSchedulerService;)Lcom/android/server/job/controllers/PrefetchController;
 PLcom/android/server/job/JobSchedulerService;->-$$Nest$fgetmUidToPackageCache(Lcom/android/server/job/JobSchedulerService;)Landroid/util/SparseSetArray;
 HPLcom/android/server/job/JobSchedulerService;->-$$Nest$mcancelJob(Lcom/android/server/job/JobSchedulerService;IIII)Z
 PLcom/android/server/job/JobSchedulerService;->-$$Nest$mcancelJobsForPackageAndUidLocked(Lcom/android/server/job/JobSchedulerService;Ljava/lang/String;IIILjava/lang/String;)V
 PLcom/android/server/job/JobSchedulerService;->-$$Nest$mcancelJobsForUserLocked(Lcom/android/server/job/JobSchedulerService;I)V
-HPLcom/android/server/job/JobSchedulerService;->-$$Nest$mcheckChangedJobListLocked(Lcom/android/server/job/JobSchedulerService;)V
+HSPLcom/android/server/job/JobSchedulerService;->-$$Nest$mcheckChangedJobListLocked(Lcom/android/server/job/JobSchedulerService;)V
 HPLcom/android/server/job/JobSchedulerService;->-$$Nest$mgetPackageName(Lcom/android/server/job/JobSchedulerService;Landroid/content/Intent;)Ljava/lang/String;
-PLcom/android/server/job/JobSchedulerService;->-$$Nest$mmaybeQueueReadyJobsForExecutionLocked(Lcom/android/server/job/JobSchedulerService;)V
+HSPLcom/android/server/job/JobSchedulerService;->-$$Nest$mmaybeQueueReadyJobsForExecutionLocked(Lcom/android/server/job/JobSchedulerService;)V
 PLcom/android/server/job/JobSchedulerService;->-$$Nest$mnoteJobNonPending(Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/controllers/JobStatus;)V
 HPLcom/android/server/job/JobSchedulerService;->-$$Nest$mqueueReadyJobsForExecutionLocked(Lcom/android/server/job/JobSchedulerService;)V
 PLcom/android/server/job/JobSchedulerService;->-$$Nest$mupdateMediaBackupExemptionLocked(Lcom/android/server/job/JobSchedulerService;ILjava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/job/JobSchedulerService;-><clinit>()V
 HSPLcom/android/server/job/JobSchedulerService;-><init>(Landroid/content/Context;)V
-HPLcom/android/server/job/JobSchedulerService;->adjustJobBias(ILcom/android/server/job/controllers/JobStatus;)I+]Lcom/android/server/job/JobPackageTracker;Lcom/android/server/job/JobPackageTracker;
-HPLcom/android/server/job/JobSchedulerService;->areComponentsInPlaceLocked(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/JobStore;Lcom/android/server/job/JobStore;
+HSPLcom/android/server/job/JobSchedulerService;->adjustJobBias(ILcom/android/server/job/controllers/JobStatus;)I+]Lcom/android/server/job/JobPackageTracker;Lcom/android/server/job/JobPackageTracker;
+HSPLcom/android/server/job/JobSchedulerService;->areComponentsInPlaceLocked(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/JobStore;Lcom/android/server/job/JobStore;
 HSPLcom/android/server/job/JobSchedulerService;->areUsersStartedLocked(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
 HPLcom/android/server/job/JobSchedulerService;->cancelJob(IIII)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/JobStore;Lcom/android/server/job/JobStore;
 HPLcom/android/server/job/JobSchedulerService;->cancelJobImplLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;IILjava/lang/String;)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/JobPackageTracker;Lcom/android/server/job/JobPackageTracker;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;
 HSPLcom/android/server/job/JobSchedulerService;->cancelJobsForNonExistentUsers()V
-PLcom/android/server/job/JobSchedulerService;->cancelJobsForPackageAndUidLocked(Ljava/lang/String;IIILjava/lang/String;)V
+HPLcom/android/server/job/JobSchedulerService;->cancelJobsForPackageAndUidLocked(Ljava/lang/String;IIILjava/lang/String;)V
 PLcom/android/server/job/JobSchedulerService;->cancelJobsForUid(IIILjava/lang/String;)Z
 HPLcom/android/server/job/JobSchedulerService;->cancelJobsForUserLocked(I)V
-HPLcom/android/server/job/JobSchedulerService;->checkChangedJobListLocked()V+]Landroid/os/Handler;Lcom/android/server/job/JobSchedulerService$JobHandler;]Lcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;Lcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;]Landroid/util/ArraySet;Landroid/util/ArraySet;
-HPLcom/android/server/job/JobSchedulerService;->checkIfRestricted(Lcom/android/server/job/controllers/JobStatus;)Lcom/android/server/job/restrictions/JobRestriction;+]Lcom/android/server/job/restrictions/JobRestriction;Lcom/android/server/job/restrictions/ThermalStatusRestriction;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
-HPLcom/android/server/job/JobSchedulerService;->clearPendingJobQueue()V
+HSPLcom/android/server/job/JobSchedulerService;->checkChangedJobListLocked()V+]Landroid/os/Handler;Lcom/android/server/job/JobSchedulerService$JobHandler;]Lcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;Lcom/android/server/job/JobSchedulerService$MaybeReadyJobQueueFunctor;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLcom/android/server/job/JobSchedulerService;->checkIfRestricted(Lcom/android/server/job/controllers/JobStatus;)Lcom/android/server/job/restrictions/JobRestriction;+]Lcom/android/server/job/restrictions/JobRestriction;Lcom/android/server/job/restrictions/ThermalStatusRestriction;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
+HSPLcom/android/server/job/JobSchedulerService;->clearPendingJobQueue()V
 HSPLcom/android/server/job/JobSchedulerService;->deriveWorkSource(ILjava/lang/String;)Landroid/os/WorkSource;+]Lcom/android/server/SystemService;Lcom/android/server/job/JobSchedulerService;
 PLcom/android/server/job/JobSchedulerService;->dumpHelp(Ljava/io/PrintWriter;)V
 HPLcom/android/server/job/JobSchedulerService;->dumpInternal(Landroid/util/IndentingPrintWriter;I)V
 HPLcom/android/server/job/JobSchedulerService;->dumpInternalProto(Ljava/io/FileDescriptor;I)V
 HSPLcom/android/server/job/JobSchedulerService;->evaluateControllerStatesLocked(Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/controllers/StateController;megamorphic_types]Ljava/util/List;Ljava/util/ArrayList;
-HPLcom/android/server/job/JobSchedulerService;->evaluateJobBiasLocked(Lcom/android/server/job/controllers/JobStatus;)I+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
+HSPLcom/android/server/job/JobSchedulerService;->evaluateJobBiasLocked(Lcom/android/server/job/controllers/JobStatus;)I+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
 HPLcom/android/server/job/JobSchedulerService;->executeCancelCommand(Ljava/io/PrintWriter;Ljava/lang/String;IZI)I+]Ljava/lang/StringBuilder;Ljava/util/ArrayList;
 PLcom/android/server/job/JobSchedulerService;->executeRunCommand(Ljava/lang/String;IIZZ)I
 HPLcom/android/server/job/JobSchedulerService;->executeTimeoutCommand(Ljava/io/PrintWriter;Ljava/lang/String;IZI)I
 HSPLcom/android/server/job/JobSchedulerService;->getConstants()Lcom/android/server/job/JobSchedulerService$Constants;
 HSPLcom/android/server/job/JobSchedulerService;->getJobStore()Lcom/android/server/job/JobStore;
 HSPLcom/android/server/job/JobSchedulerService;->getLock()Ljava/lang/Object;
-HPLcom/android/server/job/JobSchedulerService;->getMaxJobExecutionTimeMs(Lcom/android/server/job/controllers/JobStatus;)J+]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;]Lcom/android/server/job/controllers/TareController;Lcom/android/server/job/controllers/TareController;
-HPLcom/android/server/job/JobSchedulerService;->getMinJobExecutionGuaranteeMs(Lcom/android/server/job/controllers/JobStatus;)J+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
+HSPLcom/android/server/job/JobSchedulerService;->getMaxJobExecutionTimeMs(Lcom/android/server/job/controllers/JobStatus;)J+]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;]Lcom/android/server/job/controllers/TareController;Lcom/android/server/job/controllers/TareController;
+HSPLcom/android/server/job/JobSchedulerService;->getMinJobExecutionGuaranteeMs(Lcom/android/server/job/controllers/JobStatus;)J+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
 HPLcom/android/server/job/JobSchedulerService;->getPackageName(Landroid/content/Intent;)Ljava/lang/String;
 HSPLcom/android/server/job/JobSchedulerService;->getPackagesForUidLocked(I)Landroid/util/ArraySet;+]Landroid/util/SparseSetArray;Landroid/util/SparseSetArray;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;
 HSPLcom/android/server/job/JobSchedulerService;->getPendingJob(II)Landroid/app/job/JobInfo;+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/job/JobStore;Lcom/android/server/job/JobStore;
-HPLcom/android/server/job/JobSchedulerService;->getPendingJobQueue()Lcom/android/server/job/PendingJobQueue;
+HSPLcom/android/server/job/JobSchedulerService;->getPendingJobQueue()Lcom/android/server/job/PendingJobQueue;
 HPLcom/android/server/job/JobSchedulerService;->getPendingJobs(I)Ljava/util/List;+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/job/JobStore;Lcom/android/server/job/JobStore;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/job/JobSchedulerService;->getRescheduleJobForFailureLocked(Lcom/android/server/job/controllers/JobStatus;)Lcom/android/server/job/controllers/JobStatus;+]Ljava/time/Clock;Ljava/time/Clock$SystemClock;,Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Lcom/android/server/job/controllers/StateController;megamorphic_types]Ljava/util/List;Ljava/util/ArrayList;
 HPLcom/android/server/job/JobSchedulerService;->getRescheduleJobForPeriodic(Lcom/android/server/job/controllers/JobStatus;)Lcom/android/server/job/controllers/JobStatus;+]Ljava/time/Clock;Ljava/time/Clock$SystemClock;,Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
@@ -24954,7 +26049,7 @@
 HSPLcom/android/server/job/JobSchedulerService;->getUidBias(I)I+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
 HSPLcom/android/server/job/JobSchedulerService;->isBatteryCharging()Z+]Lcom/android/server/job/JobSchedulerService$BatteryStateTracker;Lcom/android/server/job/JobSchedulerService$BatteryStateTracker;
 HSPLcom/android/server/job/JobSchedulerService;->isBatteryNotLow()Z+]Lcom/android/server/job/JobSchedulerService$BatteryStateTracker;Lcom/android/server/job/JobSchedulerService$BatteryStateTracker;,Lcom/android/server/job/JobStore;
-HPLcom/android/server/job/JobSchedulerService;->isComponentUsable(Lcom/android/server/job/controllers/JobStatus;)Z+]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;
+HSPLcom/android/server/job/JobSchedulerService;->isComponentUsable(Lcom/android/server/job/controllers/JobStatus;)Z+]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;
 HSPLcom/android/server/job/JobSchedulerService;->isCurrentlyRunningLocked(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;
 HSPLcom/android/server/job/JobSchedulerService;->isReadyToBeExecutedLocked(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
 HSPLcom/android/server/job/JobSchedulerService;->isReadyToBeExecutedLocked(Lcom/android/server/job/controllers/JobStatus;Z)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/JobStore;Lcom/android/server/job/JobStore;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;
@@ -24966,11 +26061,11 @@
 HPLcom/android/server/job/JobSchedulerService;->lambda$static$0(ILjava/lang/String;Ljava/lang/String;)Lcom/android/server/utils/quota/Category;+]Ljava/lang/String;Lcom/android/server/job/JobConcurrencyManager;
 HPLcom/android/server/job/JobSchedulerService;->lambda$updateMediaBackupExemptionLocked$3(ILjava/lang/String;Ljava/lang/String;Lcom/android/server/job/controllers/JobStatus;)Z
 HPLcom/android/server/job/JobSchedulerService;->lambda$updateMediaBackupExemptionLocked$4(Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
-HPLcom/android/server/job/JobSchedulerService;->maybeQueueReadyJobsForExecutionLocked()V
-HPLcom/android/server/job/JobSchedulerService;->maybeRunPendingJobsLocked()V+]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;
-PLcom/android/server/job/JobSchedulerService;->noteJobNonPending(Lcom/android/server/job/controllers/JobStatus;)V
-HPLcom/android/server/job/JobSchedulerService;->noteJobPending(Lcom/android/server/job/controllers/JobStatus;)V
-HPLcom/android/server/job/JobSchedulerService;->noteJobsPending(Ljava/util/List;)V+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
+HSPLcom/android/server/job/JobSchedulerService;->maybeQueueReadyJobsForExecutionLocked()V
+HSPLcom/android/server/job/JobSchedulerService;->maybeRunPendingJobsLocked()V+]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;
+HPLcom/android/server/job/JobSchedulerService;->noteJobNonPending(Lcom/android/server/job/controllers/JobStatus;)V
+HSPLcom/android/server/job/JobSchedulerService;->noteJobPending(Lcom/android/server/job/controllers/JobStatus;)V
+HSPLcom/android/server/job/JobSchedulerService;->noteJobsPending(Ljava/util/List;)V+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
 HSPLcom/android/server/job/JobSchedulerService;->onBootPhase(I)V
 HSPLcom/android/server/job/JobSchedulerService;->onControllerStateChanged(Landroid/util/ArraySet;)V+]Landroid/os/Handler;Lcom/android/server/job/JobSchedulerService$JobHandler;]Landroid/os/Message;Landroid/os/Message;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/job/JobSchedulerService;->onDeviceIdleStateChanged(Z)V
@@ -24982,7 +26077,7 @@
 HSPLcom/android/server/job/JobSchedulerService;->onUserStarting(Lcom/android/server/SystemService$TargetUser;)V
 HPLcom/android/server/job/JobSchedulerService;->onUserStopping(Lcom/android/server/SystemService$TargetUser;)V
 HPLcom/android/server/job/JobSchedulerService;->queueReadyJobsForExecutionLocked()V
-HPLcom/android/server/job/JobSchedulerService;->reportActiveLocked()V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/DeviceIdleInternal;Lcom/android/server/DeviceIdleController$LocalService;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;
+HSPLcom/android/server/job/JobSchedulerService;->reportActiveLocked()V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/DeviceIdleInternal;Lcom/android/server/DeviceIdleController$LocalService;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;
 PLcom/android/server/job/JobSchedulerService;->resetExecutionQuota(Ljava/lang/String;I)V
 PLcom/android/server/job/JobSchedulerService;->resetScheduleQuota()V
 HSPLcom/android/server/job/JobSchedulerService;->scheduleAsPackage(Landroid/app/job/JobInfo;Landroid/app/job/JobWorkItem;ILjava/lang/String;ILjava/lang/String;)I+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Lcom/android/server/job/JobPackageTracker;Lcom/android/server/job/JobPackageTracker;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/job/JobStore;Lcom/android/server/job/JobStore;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/utils/quota/CountQuotaTracker;Lcom/android/server/utils/quota/CountQuotaTracker;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Lcom/android/server/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;]Lcom/android/server/job/controllers/TareController;Lcom/android/server/job/controllers/TareController;
@@ -24991,11 +26086,11 @@
 HSPLcom/android/server/job/JobSchedulerService;->standbyBucketForPackage(Ljava/lang/String;IJ)I+]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;
 HSPLcom/android/server/job/JobSchedulerService;->standbyBucketToBucketIndex(I)I
 HSPLcom/android/server/job/JobSchedulerService;->startTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/StateController;megamorphic_types]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/job/JobStore;Lcom/android/server/job/JobStore;
-HPLcom/android/server/job/JobSchedulerService;->stopNonReadyActiveJobsLocked()V
+HSPLcom/android/server/job/JobSchedulerService;->stopNonReadyActiveJobsLocked()V
 HPLcom/android/server/job/JobSchedulerService;->stopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;Z)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/StateController;megamorphic_types]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/job/JobStore;Lcom/android/server/job/JobStore;
 HPLcom/android/server/job/JobSchedulerService;->triggerDockState(Z)V
 PLcom/android/server/job/JobSchedulerService;->updateMediaBackupExemptionLocked(ILjava/lang/String;Ljava/lang/String;)V
-HPLcom/android/server/job/JobSchedulerService;->updateUidState(II)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/job/controllers/StateController;megamorphic_types]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;
+HSPLcom/android/server/job/JobSchedulerService;->updateUidState(II)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/job/controllers/StateController;megamorphic_types]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;
 HPLcom/android/server/job/JobSchedulerShellCommand;-><init>(Lcom/android/server/job/JobSchedulerService;)V
 HPLcom/android/server/job/JobSchedulerShellCommand;->cancelJob(Ljava/io/PrintWriter;)I
 PLcom/android/server/job/JobSchedulerShellCommand;->checkPermission(Ljava/lang/String;)V
@@ -25008,38 +26103,38 @@
 HPLcom/android/server/job/JobServiceContext$JobCallback;->acknowledgeStartMessage(IZ)V+]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;
 HPLcom/android/server/job/JobServiceContext$JobCallback;->acknowledgeStopMessage(IZ)V
 HPLcom/android/server/job/JobServiceContext$JobCallback;->completeWork(II)Z
-HPLcom/android/server/job/JobServiceContext$JobCallback;->dequeueWork(I)Landroid/app/job/JobWorkItem;
+HPLcom/android/server/job/JobServiceContext$JobCallback;->dequeueWork(I)Landroid/app/job/JobWorkItem;+]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;
 HPLcom/android/server/job/JobServiceContext$JobCallback;->jobFinished(IZ)V+]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;
 HSPLcom/android/server/job/JobServiceContext$JobServiceHandler;-><init>(Lcom/android/server/job/JobServiceContext;Landroid/os/Looper;)V
 HPLcom/android/server/job/JobServiceContext$JobServiceHandler;->handleMessage(Landroid/os/Message;)V
 HPLcom/android/server/job/JobServiceContext;->-$$Nest$fgetmLock(Lcom/android/server/job/JobServiceContext;)Ljava/lang/Object;
 HPLcom/android/server/job/JobServiceContext;->-$$Nest$fgetmRunningCallback(Lcom/android/server/job/JobServiceContext;)Lcom/android/server/job/JobServiceContext$JobCallback;
-PLcom/android/server/job/JobServiceContext;->-$$Nest$mhandleOpTimeoutLocked(Lcom/android/server/job/JobServiceContext;)V
+HPLcom/android/server/job/JobServiceContext;->-$$Nest$mhandleOpTimeoutLocked(Lcom/android/server/job/JobServiceContext;)V
 HSPLcom/android/server/job/JobServiceContext;-><clinit>()V
 HSPLcom/android/server/job/JobServiceContext;-><init>(Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobConcurrencyManager;Lcom/android/internal/app/IBatteryStats;Lcom/android/server/job/JobPackageTracker;Landroid/os/Looper;)V
 HPLcom/android/server/job/JobServiceContext;->applyStoppedReasonLocked(Ljava/lang/String;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;
-HPLcom/android/server/job/JobServiceContext;->assertCallerLocked(Lcom/android/server/job/JobServiceContext$JobCallback;)Z+]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;
+HPLcom/android/server/job/JobServiceContext;->assertCallerLocked(Lcom/android/server/job/JobServiceContext$JobCallback;)Z+]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;
 HPLcom/android/server/job/JobServiceContext;->cancelExecutingJobLocked(IILjava/lang/String;)V
 HPLcom/android/server/job/JobServiceContext;->clearPreferredUid()V
-HPLcom/android/server/job/JobServiceContext;->closeAndCleanupJobLocked(ZLjava/lang/String;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Landroid/app/job/JobParameters;Landroid/app/job/JobParameters;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Lcom/android/server/job/JobPackageTracker;Lcom/android/server/job/JobPackageTracker;]Lcom/android/internal/app/IBatteryStats;Lcom/android/server/am/BatteryStatsService;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/job/JobCompletedListener;Lcom/android/server/job/JobSchedulerService;]Landroid/os/PowerManager$WakeLock;Landroid/os/PowerManager$WakeLock;]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;]Lcom/android/server/tare/EconomyManagerInternal;Lcom/android/server/tare/InternalResourceService$LocalService;
+HPLcom/android/server/job/JobServiceContext;->closeAndCleanupJobLocked(ZLjava/lang/String;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Landroid/app/job/JobParameters;Landroid/app/job/JobParameters;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Lcom/android/server/tare/EconomyManagerInternal;Lcom/android/server/tare/InternalResourceService$LocalService;]Lcom/android/server/job/JobPackageTracker;Lcom/android/server/job/JobPackageTracker;]Lcom/android/internal/app/IBatteryStats;Lcom/android/server/am/BatteryStatsService;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/job/JobCompletedListener;Lcom/android/server/job/JobSchedulerService;]Landroid/os/PowerManager$WakeLock;Landroid/os/PowerManager$WakeLock;]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;]Lcom/android/server/job/JobConcurrencyManager;Lcom/android/server/job/JobConcurrencyManager;
 HPLcom/android/server/job/JobServiceContext;->doAcknowledgeStartMessage(Lcom/android/server/job/JobServiceContext$JobCallback;IZ)V+]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;
 HPLcom/android/server/job/JobServiceContext;->doAcknowledgeStopMessage(Lcom/android/server/job/JobServiceContext$JobCallback;IZ)V
 HPLcom/android/server/job/JobServiceContext;->doCallback(Lcom/android/server/job/JobServiceContext$JobCallback;ZLjava/lang/String;)V+]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;
 HPLcom/android/server/job/JobServiceContext;->doCallbackLocked(ZLjava/lang/String;)V+]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;
 HPLcom/android/server/job/JobServiceContext;->doCancelLocked(IILjava/lang/String;)V
 HPLcom/android/server/job/JobServiceContext;->doCompleteWork(Lcom/android/server/job/JobServiceContext$JobCallback;II)Z
-HPLcom/android/server/job/JobServiceContext;->doDequeueWork(Lcom/android/server/job/JobServiceContext$JobCallback;I)Landroid/app/job/JobWorkItem;
+HPLcom/android/server/job/JobServiceContext;->doDequeueWork(Lcom/android/server/job/JobServiceContext$JobCallback;I)Landroid/app/job/JobWorkItem;+]Landroid/app/job/JobParameters;Landroid/app/job/JobParameters;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;
 HPLcom/android/server/job/JobServiceContext;->doJobFinished(Lcom/android/server/job/JobServiceContext$JobCallback;IZ)V+]Landroid/app/job/JobParameters;Landroid/app/job/JobParameters;]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;
 HPLcom/android/server/job/JobServiceContext;->doServiceBoundLocked()V
 PLcom/android/server/job/JobServiceContext;->dumpLocked(Landroid/util/IndentingPrintWriter;J)V
-HPLcom/android/server/job/JobServiceContext;->executeRunnableJob(Lcom/android/server/job/controllers/JobStatus;I)Z+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/JobPackageTracker;Lcom/android/server/job/JobPackageTracker;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/os/PowerManager$WakeLock;Landroid/os/PowerManager$WakeLock;]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Lcom/android/server/tare/EconomyManagerInternal;Lcom/android/server/tare/InternalResourceService$LocalService;]Lcom/android/internal/app/IBatteryStats;Lcom/android/server/am/BatteryStatsService;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Landroid/os/PowerManager;Landroid/os/PowerManager;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/job/JobServiceContext;->executeRunnableJob(Lcom/android/server/job/controllers/JobStatus;I)Z+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/JobPackageTracker;Lcom/android/server/job/JobPackageTracker;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/os/PowerManager$WakeLock;Landroid/os/PowerManager$WakeLock;]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Lcom/android/server/tare/EconomyManagerInternal;Lcom/android/server/tare/InternalResourceService$LocalService;]Lcom/android/internal/app/IBatteryStats;Lcom/android/server/am/BatteryStatsService;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Landroid/os/PowerManager;Landroid/os/PowerManager;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;]Landroid/content/Intent;Landroid/content/Intent;
 HPLcom/android/server/job/JobServiceContext;->getExecutionStartTimeElapsed()J
 HPLcom/android/server/job/JobServiceContext;->getId()I
 HPLcom/android/server/job/JobServiceContext;->getPreferredUid()I
-HPLcom/android/server/job/JobServiceContext;->getRunningJobLocked()Lcom/android/server/job/controllers/JobStatus;
+HSPLcom/android/server/job/JobServiceContext;->getRunningJobLocked()Lcom/android/server/job/controllers/JobStatus;
 HPLcom/android/server/job/JobServiceContext;->getRunningJobNameLocked()Ljava/lang/String;
 HPLcom/android/server/job/JobServiceContext;->getRunningJobWorkType()I
-HPLcom/android/server/job/JobServiceContext;->getStartActionId(Lcom/android/server/job/controllers/JobStatus;)I+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
+HSPLcom/android/server/job/JobServiceContext;->getStartActionId(Lcom/android/server/job/controllers/JobStatus;)I+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
 HPLcom/android/server/job/JobServiceContext;->handleCancelLocked(Ljava/lang/String;)V
 HPLcom/android/server/job/JobServiceContext;->handleFinishedLocked(ZLjava/lang/String;)V+]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;
 HPLcom/android/server/job/JobServiceContext;->handleOpTimeoutLocked()V
@@ -25050,8 +26145,8 @@
 HPLcom/android/server/job/JobServiceContext;->onNullBinding(Landroid/content/ComponentName;)V
 HPLcom/android/server/job/JobServiceContext;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;
 HPLcom/android/server/job/JobServiceContext;->onServiceDisconnected(Landroid/content/ComponentName;)V
-HPLcom/android/server/job/JobServiceContext;->removeOpTimeOutLocked()V+]Landroid/os/Handler;Lcom/android/server/job/JobServiceContext$JobServiceHandler;
-HPLcom/android/server/job/JobServiceContext;->scheduleOpTimeOutLocked()V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Landroid/os/Handler;Lcom/android/server/job/JobServiceContext$JobServiceHandler;]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;
+HSPLcom/android/server/job/JobServiceContext;->removeOpTimeOutLocked()V+]Landroid/os/Handler;Lcom/android/server/job/JobServiceContext$JobServiceHandler;
+HSPLcom/android/server/job/JobServiceContext;->scheduleOpTimeOutLocked()V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Landroid/os/Handler;Lcom/android/server/job/JobServiceContext$JobServiceHandler;]Lcom/android/server/job/JobServiceContext;Lcom/android/server/job/JobServiceContext;
 HPLcom/android/server/job/JobServiceContext;->sendStopMessageLocked(Ljava/lang/String;)V
 HPLcom/android/server/job/JobServiceContext;->timeoutIfExecutingLocked(Ljava/lang/String;IZILjava/lang/String;)Z
 HPLcom/android/server/job/JobServiceContext;->verifyCallerLocked(Lcom/android/server/job/JobServiceContext$JobCallback;)Z
@@ -25078,7 +26173,7 @@
 HSPLcom/android/server/job/JobStore$JobSet;-><init>()V
 HSPLcom/android/server/job/JobStore$JobSet;->add(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 PLcom/android/server/job/JobStore$JobSet;->clear()V
-HPLcom/android/server/job/JobStore$JobSet;->contains(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLcom/android/server/job/JobStore$JobSet;->contains(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/job/JobStore$JobSet;->countJobsForUid(I)I+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/job/JobStore$JobSet;->forEachJob(ILjava/util/function/Consumer;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/function/Consumer;Lcom/android/server/job/JobSchedulerService$LocalService$$ExternalSyntheticLambda0;
 HSPLcom/android/server/job/JobStore$JobSet;->forEachJob(Ljava/util/function/Predicate;Ljava/util/function/Consumer;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/function/Consumer;megamorphic_types]Ljava/util/function/Predicate;megamorphic_types
@@ -25105,7 +26200,7 @@
 PLcom/android/server/job/JobStore;->-$$Nest$fgetmEventLogger(Lcom/android/server/job/JobStore;)Landroid/util/SystemConfigFileCommitEventLogger;
 HSPLcom/android/server/job/JobStore;->-$$Nest$fgetmJobsFile(Lcom/android/server/job/JobStore;)Landroid/util/AtomicFile;
 HSPLcom/android/server/job/JobStore;->-$$Nest$fgetmPersistInfo(Lcom/android/server/job/JobStore;)Lcom/android/server/job/JobSchedulerInternal$JobStorePersistStats;
-PLcom/android/server/job/JobStore;->-$$Nest$fgetmWriteInProgress(Lcom/android/server/job/JobStore;)Z
+HPLcom/android/server/job/JobStore;->-$$Nest$fgetmWriteInProgress(Lcom/android/server/job/JobStore;)Z
 HPLcom/android/server/job/JobStore;->-$$Nest$fputmWriteInProgress(Lcom/android/server/job/JobStore;Z)V
 HPLcom/android/server/job/JobStore;->-$$Nest$fputmWriteScheduled(Lcom/android/server/job/JobStore;Z)V
 PLcom/android/server/job/JobStore;->-$$Nest$mmaybeWriteStatusToDiskAsync(Lcom/android/server/job/JobStore;)V
@@ -25118,7 +26213,7 @@
 PLcom/android/server/job/JobStore;->addForTesting(Lcom/android/server/job/controllers/JobStatus;)V
 HPLcom/android/server/job/JobStore;->clearForTesting()V
 PLcom/android/server/job/JobStore;->clockNowValidToInflate(J)Z
-HPLcom/android/server/job/JobStore;->containsJob(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/JobStore$JobSet;Lcom/android/server/job/JobStore$JobSet;
+HSPLcom/android/server/job/JobStore;->containsJob(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/JobStore$JobSet;Lcom/android/server/job/JobStore$JobSet;
 HSPLcom/android/server/job/JobStore;->convertRtcBoundsToElapsed(Landroid/util/Pair;J)Landroid/util/Pair;
 HSPLcom/android/server/job/JobStore;->countJobsForUid(I)I+]Lcom/android/server/job/JobStore$JobSet;Lcom/android/server/job/JobStore$JobSet;
 HPLcom/android/server/job/JobStore;->forEachJob(ILjava/util/function/Consumer;)V+]Lcom/android/server/job/JobStore$JobSet;Lcom/android/server/job/JobStore$JobSet;
@@ -25169,16 +26264,16 @@
 HPLcom/android/server/job/PendingJobQueue;->$r8$lambda$JYUAvEfgYpg9-Yn-9bv-8TBxdyw(Lcom/android/server/job/PendingJobQueue$AppJobQueue;Lcom/android/server/job/PendingJobQueue$AppJobQueue;)I
 HSPLcom/android/server/job/PendingJobQueue;-><init>()V
 HPLcom/android/server/job/PendingJobQueue;->add(Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/PendingJobQueue$AppJobQueue;Lcom/android/server/job/PendingJobQueue$AppJobQueue;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Ljava/util/PriorityQueue;Ljava/util/PriorityQueue;
-HPLcom/android/server/job/PendingJobQueue;->addAll(Ljava/util/List;)V+]Lcom/android/server/job/PendingJobQueue$AppJobQueue;Lcom/android/server/job/PendingJobQueue$AppJobQueue;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Ljava/util/PriorityQueue;Ljava/util/PriorityQueue;
-HPLcom/android/server/job/PendingJobQueue;->clear()V
-HPLcom/android/server/job/PendingJobQueue;->contains(Lcom/android/server/job/controllers/JobStatus;)Z
-HPLcom/android/server/job/PendingJobQueue;->getAppJobQueue(IZ)Lcom/android/server/job/PendingJobQueue$AppJobQueue;+]Landroid/util/Pools$Pool;Landroid/util/Pools$SimplePool;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/job/PendingJobQueue;->addAll(Ljava/util/List;)V+]Lcom/android/server/job/PendingJobQueue$AppJobQueue;Lcom/android/server/job/PendingJobQueue$AppJobQueue;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Ljava/util/PriorityQueue;Ljava/util/PriorityQueue;
+HSPLcom/android/server/job/PendingJobQueue;->clear()V
+HSPLcom/android/server/job/PendingJobQueue;->contains(Lcom/android/server/job/controllers/JobStatus;)Z
+HSPLcom/android/server/job/PendingJobQueue;->getAppJobQueue(IZ)Lcom/android/server/job/PendingJobQueue$AppJobQueue;+]Landroid/util/Pools$Pool;Landroid/util/Pools$SimplePool;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/job/PendingJobQueue;->lambda$new$0(Lcom/android/server/job/PendingJobQueue$AppJobQueue;Lcom/android/server/job/PendingJobQueue$AppJobQueue;)I+]Lcom/android/server/job/PendingJobQueue$AppJobQueue;Lcom/android/server/job/PendingJobQueue$AppJobQueue;
-HPLcom/android/server/job/PendingJobQueue;->next()Lcom/android/server/job/controllers/JobStatus;+]Lcom/android/server/job/PendingJobQueue$AppJobQueue;Lcom/android/server/job/PendingJobQueue$AppJobQueue;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/PriorityQueue;Ljava/util/PriorityQueue;
-HPLcom/android/server/job/PendingJobQueue;->remove(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/PendingJobQueue$AppJobQueue;Lcom/android/server/job/PendingJobQueue$AppJobQueue;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/Pools$Pool;Landroid/util/Pools$SimplePool;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Ljava/util/PriorityQueue;Ljava/util/PriorityQueue;
-HPLcom/android/server/job/PendingJobQueue;->resetIterator()V
+HSPLcom/android/server/job/PendingJobQueue;->next()Lcom/android/server/job/controllers/JobStatus;+]Lcom/android/server/job/PendingJobQueue$AppJobQueue;Lcom/android/server/job/PendingJobQueue$AppJobQueue;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/PriorityQueue;Ljava/util/PriorityQueue;
+HSPLcom/android/server/job/PendingJobQueue;->remove(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/PendingJobQueue$AppJobQueue;Lcom/android/server/job/PendingJobQueue$AppJobQueue;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/Pools$Pool;Landroid/util/Pools$SimplePool;]Lcom/android/server/job/PendingJobQueue;Lcom/android/server/job/PendingJobQueue;]Ljava/util/PriorityQueue;Ljava/util/PriorityQueue;
+HSPLcom/android/server/job/PendingJobQueue;->resetIterator()V
 HPLcom/android/server/job/PendingJobQueue;->setOptimizeIteration(Z)V
-HPLcom/android/server/job/PendingJobQueue;->size()I
+HSPLcom/android/server/job/PendingJobQueue;->size()I
 HPLcom/android/server/job/StateChangedListener;->onControllerStateChanged(Landroid/util/ArraySet;)V
 HPLcom/android/server/job/StateChangedListener;->onDeviceIdleStateChanged(Z)V
 HPLcom/android/server/job/StateChangedListener;->onRestrictedBucketChanged(Ljava/util/List;)V
@@ -25195,7 +26290,7 @@
 HSPLcom/android/server/job/controllers/BackgroundJobsController$UpdateJobFunctor;-><init>(Lcom/android/server/job/controllers/BackgroundJobsController;Lcom/android/server/job/controllers/BackgroundJobsController$UpdateJobFunctor-IA;)V
 HSPLcom/android/server/job/controllers/BackgroundJobsController$UpdateJobFunctor;->accept(Lcom/android/server/job/controllers/JobStatus;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/controllers/BackgroundJobsController;Lcom/android/server/job/controllers/BackgroundJobsController;
 HSPLcom/android/server/job/controllers/BackgroundJobsController$UpdateJobFunctor;->accept(Ljava/lang/Object;)V+]Lcom/android/server/job/controllers/BackgroundJobsController$UpdateJobFunctor;Lcom/android/server/job/controllers/BackgroundJobsController$UpdateJobFunctor;
-HSPLcom/android/server/job/controllers/BackgroundJobsController$UpdateJobFunctor;->prepare(I)V
+HSPLcom/android/server/job/controllers/BackgroundJobsController$UpdateJobFunctor;->prepare(I)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/job/controllers/BackgroundJobsController;->$r8$lambda$C-JzzKW_Zj4jJM4p-T5Yh0vMJ4k(Lcom/android/server/job/controllers/BackgroundJobsController;Landroid/util/proto/ProtoOutputStream;Lcom/android/server/job/controllers/JobStatus;)V
 PLcom/android/server/job/controllers/BackgroundJobsController;->$r8$lambda$eQB_xxnwc8eZC0ZhlpQQCbZeaqQ(Lcom/android/server/job/controllers/BackgroundJobsController;Landroid/util/IndentingPrintWriter;Lcom/android/server/job/controllers/JobStatus;)V
 HSPLcom/android/server/job/controllers/BackgroundJobsController;->-$$Nest$mupdateAllJobRestrictionsLocked(Lcom/android/server/job/controllers/BackgroundJobsController;)V
@@ -25210,30 +26305,30 @@
 HSPLcom/android/server/job/controllers/BackgroundJobsController;->maybeStartTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/BackgroundJobsController;Lcom/android/server/job/controllers/BackgroundJobsController;
 HPLcom/android/server/job/controllers/BackgroundJobsController;->maybeStopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;Z)V
 HSPLcom/android/server/job/controllers/BackgroundJobsController;->updateAllJobRestrictionsLocked()V
-HSPLcom/android/server/job/controllers/BackgroundJobsController;->updateJobRestrictionsForUidLocked(IZ)V
+HSPLcom/android/server/job/controllers/BackgroundJobsController;->updateJobRestrictionsForUidLocked(IZ)V+]Lcom/android/server/job/controllers/BackgroundJobsController;Lcom/android/server/job/controllers/BackgroundJobsController;
 HSPLcom/android/server/job/controllers/BackgroundJobsController;->updateJobRestrictionsLocked(II)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/StateChangedListener;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/JobStore;Lcom/android/server/job/JobStore;]Lcom/android/server/job/controllers/BackgroundJobsController$UpdateJobFunctor;Lcom/android/server/job/controllers/BackgroundJobsController$UpdateJobFunctor;
 HSPLcom/android/server/job/controllers/BackgroundJobsController;->updateSingleJobRestrictionLocked(Lcom/android/server/job/controllers/JobStatus;JI)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/AppStateTrackerImpl;Lcom/android/server/AppStateTrackerImpl;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;
 PLcom/android/server/job/controllers/BatteryController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/job/controllers/BatteryController;)V
 PLcom/android/server/job/controllers/BatteryController$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/job/controllers/BatteryController$PowerTracker;-><init>(Lcom/android/server/job/controllers/BatteryController;)V
-PLcom/android/server/job/controllers/BatteryController$PowerTracker;->isPowerConnected()Z
-HPLcom/android/server/job/controllers/BatteryController$PowerTracker;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/job/controllers/BatteryController$PowerTracker;->isPowerConnected()Z
+HSPLcom/android/server/job/controllers/BatteryController$PowerTracker;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/job/controllers/BatteryController$PowerTracker;->startTracking()V
 HPLcom/android/server/job/controllers/BatteryController;->$r8$lambda$A55ze38iA9vuWqC4k-rBg3L2RvQ(Lcom/android/server/job/controllers/BatteryController;)V
 HPLcom/android/server/job/controllers/BatteryController;->-$$Nest$mmaybeReportNewChargingStateLocked(Lcom/android/server/job/controllers/BatteryController;)V+]Lcom/android/server/job/controllers/BatteryController;Lcom/android/server/job/controllers/JobStatus;
-PLcom/android/server/job/controllers/BatteryController;->-$$Nest$sfgetDEBUG()Z
+HSPLcom/android/server/job/controllers/BatteryController;->-$$Nest$sfgetDEBUG()Z
 HSPLcom/android/server/job/controllers/BatteryController;-><clinit>()V
 HSPLcom/android/server/job/controllers/BatteryController;-><init>(Lcom/android/server/job/JobSchedulerService;)V
 HPLcom/android/server/job/controllers/BatteryController;->dumpControllerStateLocked(Landroid/util/IndentingPrintWriter;Ljava/util/function/Predicate;)V
 PLcom/android/server/job/controllers/BatteryController;->dumpControllerStateLocked(Landroid/util/proto/ProtoOutputStream;JLjava/util/function/Predicate;)V
 HSPLcom/android/server/job/controllers/BatteryController;->hasTopExemptionLocked(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
-PLcom/android/server/job/controllers/BatteryController;->lambda$onBatteryStateChangedLocked$0()V
+HPLcom/android/server/job/controllers/BatteryController;->lambda$onBatteryStateChangedLocked$0()V
 HPLcom/android/server/job/controllers/BatteryController;->maybeReportNewChargingStateLocked()V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/BatteryController;Lcom/android/server/job/controllers/BatteryController;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/StateChangedListener;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/controllers/BatteryController$PowerTracker;Lcom/android/server/job/controllers/BatteryController$PowerTracker;
 HSPLcom/android/server/job/controllers/BatteryController;->maybeStartTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/BatteryController;Lcom/android/server/job/controllers/BatteryController;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/controllers/BatteryController$PowerTracker;Lcom/android/server/job/controllers/BatteryController$PowerTracker;
 HPLcom/android/server/job/controllers/BatteryController;->maybeStopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;Z)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/ArraySet;Landroid/util/ArraySet;
-PLcom/android/server/job/controllers/BatteryController;->onBatteryStateChangedLocked()V
-HPLcom/android/server/job/controllers/BatteryController;->onUidBiasChangedLocked(III)V
-HPLcom/android/server/job/controllers/BatteryController;->prepareForExecutionLocked(Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HPLcom/android/server/job/controllers/BatteryController;->onBatteryStateChangedLocked()V
+HSPLcom/android/server/job/controllers/BatteryController;->onUidBiasChangedLocked(III)V+]Lcom/android/server/job/controllers/BatteryController;Lcom/android/server/job/controllers/BatteryController;
+HSPLcom/android/server/job/controllers/BatteryController;->prepareForExecutionLocked(Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
 HPLcom/android/server/job/controllers/BatteryController;->startTrackingRestrictedJobLocked(Lcom/android/server/job/controllers/JobStatus;)V
 PLcom/android/server/job/controllers/BatteryController;->stopTrackingRestrictedJobLocked(Lcom/android/server/job/controllers/JobStatus;)V
 HPLcom/android/server/job/controllers/BatteryController;->unprepareFromExecutionLocked(Lcom/android/server/job/controllers/JobStatus;)V+]Landroid/util/ArraySet;Lcom/android/server/job/controllers/BatteryController$PowerTracker;
@@ -25274,7 +26369,7 @@
 HPLcom/android/server/job/controllers/ConnectivityController$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I+]Lcom/android/server/job/controllers/ConnectivityController$1;Lcom/android/server/job/controllers/ConnectivityController$1;
 HPLcom/android/server/job/controllers/ConnectivityController$1;->prioritizeExistenceOver(III)I
 HSPLcom/android/server/job/controllers/ConnectivityController$2;-><init>(Lcom/android/server/job/controllers/ConnectivityController;)V
-HPLcom/android/server/job/controllers/ConnectivityController$2;->maybeRegisterSignalStrengthCallbackLocked(Landroid/net/NetworkCapabilities;)V
+HPLcom/android/server/job/controllers/ConnectivityController$2;->maybeRegisterSignalStrengthCallbackLocked(Landroid/net/NetworkCapabilities;)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/telephony/SignalStrength;Landroid/telephony/SignalStrength;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/ArraySet;]Landroid/telephony/TelephonyManager;Landroid/telephony/TelephonyManager;
 HPLcom/android/server/job/controllers/ConnectivityController$2;->maybeUnregisterSignalStrengthCallbackLocked(Landroid/net/NetworkCapabilities;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/ArraySet;]Landroid/telephony/TelephonyManager;Landroid/telephony/TelephonyManager;
 PLcom/android/server/job/controllers/ConnectivityController$2;->onAvailable(Landroid/net/Network;)V
 HPLcom/android/server/job/controllers/ConnectivityController$2;->onCapabilitiesChanged(Landroid/net/Network;Landroid/net/NetworkCapabilities;)V
@@ -25283,7 +26378,7 @@
 HPLcom/android/server/job/controllers/ConnectivityController$CcHandler;->handleMessage(Landroid/os/Message;)V
 PLcom/android/server/job/controllers/ConnectivityController$CellSignalStrengthCallback;-><init>(Lcom/android/server/job/controllers/ConnectivityController;)V
 PLcom/android/server/job/controllers/ConnectivityController$CellSignalStrengthCallback;-><init>(Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController$CellSignalStrengthCallback-IA;)V
-HPLcom/android/server/job/controllers/ConnectivityController$CellSignalStrengthCallback;->onSignalStrengthsChanged(Landroid/telephony/SignalStrength;)V
+HPLcom/android/server/job/controllers/ConnectivityController$CellSignalStrengthCallback;->onSignalStrengthsChanged(Landroid/telephony/SignalStrength;)V+]Landroid/os/Handler;Lcom/android/server/job/controllers/ConnectivityController$CcHandler;]Landroid/os/Message;Landroid/os/Message;]Landroid/telephony/SignalStrength;Landroid/telephony/SignalStrength;
 HSPLcom/android/server/job/controllers/ConnectivityController$UidDefaultNetworkCallback;->-$$Nest$fgetmBlockedReasons(Lcom/android/server/job/controllers/ConnectivityController$UidDefaultNetworkCallback;)I
 HSPLcom/android/server/job/controllers/ConnectivityController$UidDefaultNetworkCallback;->-$$Nest$fgetmDefaultNetwork(Lcom/android/server/job/controllers/ConnectivityController$UidDefaultNetworkCallback;)Landroid/net/Network;
 PLcom/android/server/job/controllers/ConnectivityController$UidDefaultNetworkCallback;->-$$Nest$fputmDefaultNetwork(Lcom/android/server/job/controllers/ConnectivityController$UidDefaultNetworkCallback;Landroid/net/Network;)V
@@ -25296,7 +26391,7 @@
 HPLcom/android/server/job/controllers/ConnectivityController$UidDefaultNetworkCallback;->dumpLocked(Landroid/util/IndentingPrintWriter;)V
 HPLcom/android/server/job/controllers/ConnectivityController$UidDefaultNetworkCallback;->onAvailable(Landroid/net/Network;)V
 HPLcom/android/server/job/controllers/ConnectivityController$UidDefaultNetworkCallback;->onBlockedStatusChanged(Landroid/net/Network;I)V
-PLcom/android/server/job/controllers/ConnectivityController$UidDefaultNetworkCallback;->onLost(Landroid/net/Network;)V
+HPLcom/android/server/job/controllers/ConnectivityController$UidDefaultNetworkCallback;->onLost(Landroid/net/Network;)V
 HSPLcom/android/server/job/controllers/ConnectivityController$UidDefaultNetworkCallback;->setUid(I)V
 PLcom/android/server/job/controllers/ConnectivityController$UidStats;->-$$Nest$mdumpLocked(Lcom/android/server/job/controllers/ConnectivityController$UidStats;Landroid/util/IndentingPrintWriter;J)V
 HSPLcom/android/server/job/controllers/ConnectivityController$UidStats;-><init>(I)V
@@ -25307,7 +26402,7 @@
 PLcom/android/server/job/controllers/ConnectivityController;->-$$Nest$fgetmHandler(Lcom/android/server/job/controllers/ConnectivityController;)Landroid/os/Handler;
 PLcom/android/server/job/controllers/ConnectivityController;->-$$Nest$fgetmSignalStrengths(Lcom/android/server/job/controllers/ConnectivityController;)Landroid/util/SparseArray;
 HPLcom/android/server/job/controllers/ConnectivityController;->-$$Nest$mmaybeAdjustRegisteredCallbacksLocked(Lcom/android/server/job/controllers/ConnectivityController;)V
-PLcom/android/server/job/controllers/ConnectivityController;->-$$Nest$mpostAdjustCallbacks(Lcom/android/server/job/controllers/ConnectivityController;)V
+HPLcom/android/server/job/controllers/ConnectivityController;->-$$Nest$mpostAdjustCallbacks(Lcom/android/server/job/controllers/ConnectivityController;)V
 PLcom/android/server/job/controllers/ConnectivityController;->-$$Nest$mpostAdjustCallbacks(Lcom/android/server/job/controllers/ConnectivityController;J)V
 HPLcom/android/server/job/controllers/ConnectivityController;->-$$Nest$mupdateAllTrackedJobsLocked(Lcom/android/server/job/controllers/ConnectivityController;Z)V
 HPLcom/android/server/job/controllers/ConnectivityController;->-$$Nest$mupdateTrackedJobsLocked(Lcom/android/server/job/controllers/ConnectivityController;ILandroid/net/Network;)V+]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;
@@ -25320,29 +26415,29 @@
 HSPLcom/android/server/job/controllers/ConnectivityController;->evaluateStateLocked(Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/StateController;Lcom/android/server/job/controllers/ConnectivityController;]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;
 HSPLcom/android/server/job/controllers/ConnectivityController;->getNetworkCapabilities(Landroid/net/Network;)Landroid/net/NetworkCapabilities;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/job/controllers/ConnectivityController;->getNetworkLocked(Lcom/android/server/job/controllers/JobStatus;)Landroid/net/Network;+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/job/controllers/ConnectivityController;->getUidStats(ILjava/lang/String;Z)Lcom/android/server/job/controllers/ConnectivityController$UidStats;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/job/controllers/ConnectivityController;->getUidStats(ILjava/lang/String;Z)Lcom/android/server/job/controllers/ConnectivityController$UidStats;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HPLcom/android/server/job/controllers/ConnectivityController;->isCongestionDelayed(Lcom/android/server/job/controllers/JobStatus;Landroid/net/Network;Landroid/net/NetworkCapabilities;Lcom/android/server/job/JobSchedulerService$Constants;)Z
-HPLcom/android/server/job/controllers/ConnectivityController;->isInsane(Lcom/android/server/job/controllers/JobStatus;Landroid/net/Network;Landroid/net/NetworkCapabilities;Lcom/android/server/job/JobSchedulerService$Constants;)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;]Landroid/util/DataUnit;Landroid/util/DataUnit$4;
-HPLcom/android/server/job/controllers/ConnectivityController;->isNetworkAvailable(Lcom/android/server/job/controllers/JobStatus;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;
+HPLcom/android/server/job/controllers/ConnectivityController;->isInsane(Lcom/android/server/job/controllers/JobStatus;Landroid/net/Network;Landroid/net/NetworkCapabilities;Lcom/android/server/job/JobSchedulerService$Constants;)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;]Landroid/util/DataUnit;Landroid/util/DataUnit$4;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/job/controllers/ConnectivityController;->isNetworkAvailable(Lcom/android/server/job/controllers/JobStatus;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;
 HPLcom/android/server/job/controllers/ConnectivityController;->isRelaxedSatisfied(Lcom/android/server/job/controllers/JobStatus;Landroid/net/Network;Landroid/net/NetworkCapabilities;Lcom/android/server/job/JobSchedulerService$Constants;)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Landroid/net/NetworkCapabilities$Builder;Landroid/net/NetworkCapabilities$Builder;]Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;
 HSPLcom/android/server/job/controllers/ConnectivityController;->isSatisfied(Lcom/android/server/job/controllers/JobStatus;Landroid/net/Network;Landroid/net/NetworkCapabilities;Lcom/android/server/job/JobSchedulerService$Constants;)Z+]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;
-HPLcom/android/server/job/controllers/ConnectivityController;->isStandbyExceptionRequestedLocked(I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLcom/android/server/job/controllers/ConnectivityController;->isStandbyExceptionRequestedLocked(I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/job/controllers/ConnectivityController;->isStrictSatisfied(Lcom/android/server/job/controllers/JobStatus;Landroid/net/Network;Landroid/net/NetworkCapabilities;Lcom/android/server/job/JobSchedulerService$Constants;)Z+]Landroid/net/NetworkRequest;Landroid/net/NetworkRequest;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Landroid/net/NetworkCapabilities$Builder;Landroid/net/NetworkCapabilities$Builder;]Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;
-HPLcom/android/server/job/controllers/ConnectivityController;->isStrongEnough(Lcom/android/server/job/controllers/JobStatus;Landroid/net/NetworkCapabilities;Lcom/android/server/job/JobSchedulerService$Constants;)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/ArraySet;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;
+HPLcom/android/server/job/controllers/ConnectivityController;->isStrongEnough(Lcom/android/server/job/controllers/JobStatus;Landroid/net/NetworkCapabilities;Lcom/android/server/job/JobSchedulerService$Constants;)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;]Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/ArraySet;
 HPLcom/android/server/job/controllers/ConnectivityController;->isUsable(Landroid/net/NetworkCapabilities;)Z
 HPLcom/android/server/job/controllers/ConnectivityController;->maybeAdjustRegisteredCallbacksLocked()V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Landroid/os/Handler;Lcom/android/server/job/controllers/ConnectivityController$CcHandler;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/StateController;Lcom/android/server/job/controllers/ConnectivityController;]Landroid/util/Pools$Pool;Landroid/util/Pools$SimplePool;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;,Lcom/android/server/job/controllers/JobStatus;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;]Landroid/net/ConnectivityManager;Landroid/net/ConnectivityManager;]Lcom/android/server/job/StateChangedListener;Lcom/android/server/job/JobSchedulerService;
 HSPLcom/android/server/job/controllers/ConnectivityController;->maybeRegisterDefaultNetworkCallbackLocked(Lcom/android/server/job/controllers/JobStatus;)V
-HPLcom/android/server/job/controllers/ConnectivityController;->maybeRevokeStandbyExceptionLocked(Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLcom/android/server/job/controllers/ConnectivityController;->maybeRevokeStandbyExceptionLocked(Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;
 HSPLcom/android/server/job/controllers/ConnectivityController;->maybeStartTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;,Lcom/android/server/job/controllers/ConnectivityController;]Lcom/android/server/job/controllers/StateController;Lcom/android/server/job/controllers/ConnectivityController;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;
 HPLcom/android/server/job/controllers/ConnectivityController;->maybeStopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;Z)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;
 HPLcom/android/server/job/controllers/ConnectivityController;->onAppRemovedLocked(Ljava/lang/String;I)V+]Ljava/time/Clock;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/ConnectivityController;Landroid/app/job/JobInfo;
 HPLcom/android/server/job/controllers/ConnectivityController;->onBatteryStateChangedLocked()V
 HPLcom/android/server/job/controllers/ConnectivityController;->onNetworkActive()V
-HPLcom/android/server/job/controllers/ConnectivityController;->onUidBiasChangedLocked(III)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;
+HSPLcom/android/server/job/controllers/ConnectivityController;->onUidBiasChangedLocked(III)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;
 PLcom/android/server/job/controllers/ConnectivityController;->onUserRemovedLocked(I)V
 HPLcom/android/server/job/controllers/ConnectivityController;->postAdjustCallbacks()V+]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;
 HPLcom/android/server/job/controllers/ConnectivityController;->postAdjustCallbacks(J)V+]Landroid/os/Handler;Lcom/android/server/job/controllers/ConnectivityController$CcHandler;
-HPLcom/android/server/job/controllers/ConnectivityController;->prepareForExecutionLocked(Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLcom/android/server/job/controllers/ConnectivityController;->prepareForExecutionLocked(Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/job/controllers/ConnectivityController;->reevaluateStateLocked(I)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/job/controllers/ConnectivityController;->registerPendingUidCallbacksLocked()V
 HPLcom/android/server/job/controllers/ConnectivityController;->requestStandbyExceptionLocked(Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/net/NetworkPolicyManagerInternal;Lcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;
@@ -25372,7 +26467,7 @@
 PLcom/android/server/job/controllers/ContentObserverController;->dumpControllerStateLocked(Landroid/util/proto/ProtoOutputStream;JLjava/util/function/Predicate;)V
 HSPLcom/android/server/job/controllers/ContentObserverController;->maybeStartTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/ContentObserverController$JobInstance;Lcom/android/server/job/controllers/ContentObserverController$JobInstance;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
 HPLcom/android/server/job/controllers/ContentObserverController;->maybeStopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;Z)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/ContentObserverController$JobInstance;Lcom/android/server/job/controllers/ContentObserverController$JobInstance;]Landroid/util/ArraySet;Landroid/util/ArraySet;
-HPLcom/android/server/job/controllers/ContentObserverController;->prepareForExecutionLocked(Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
+HSPLcom/android/server/job/controllers/ContentObserverController;->prepareForExecutionLocked(Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
 HPLcom/android/server/job/controllers/ContentObserverController;->rescheduleForFailureLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V
 PLcom/android/server/job/controllers/ContentObserverController;->unprepareFromExecutionLocked(Lcom/android/server/job/controllers/JobStatus;)V
 PLcom/android/server/job/controllers/DeviceIdleJobsController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/job/controllers/DeviceIdleJobsController;Landroid/util/proto/ProtoOutputStream;)V
@@ -25382,25 +26477,25 @@
 HSPLcom/android/server/job/controllers/DeviceIdleJobsController$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/job/controllers/DeviceIdleJobsController;)V
 HPLcom/android/server/job/controllers/DeviceIdleJobsController$$ExternalSyntheticLambda2;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/job/controllers/DeviceIdleJobsController$1;-><init>(Lcom/android/server/job/controllers/DeviceIdleJobsController;)V
-HPLcom/android/server/job/controllers/DeviceIdleJobsController$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Ljava/lang/String;Ljava/lang/String;]Lcom/android/server/job/controllers/DeviceIdleJobsController;Lcom/android/server/job/controllers/DeviceIdleJobsController;]Lcom/android/server/DeviceIdleInternal;Lcom/android/server/DeviceIdleController$LocalService;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/StateChangedListener;Lcom/android/server/job/JobSchedulerService;]Landroid/os/PowerManager;Landroid/os/PowerManager;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/job/controllers/DeviceIdleJobsController$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Ljava/lang/String;Ljava/lang/String;]Lcom/android/server/job/controllers/DeviceIdleJobsController;Lcom/android/server/job/controllers/DeviceIdleJobsController;]Lcom/android/server/DeviceIdleInternal;Lcom/android/server/DeviceIdleController$LocalService;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/StateChangedListener;Lcom/android/server/job/JobSchedulerService;]Landroid/os/PowerManager;Landroid/os/PowerManager;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/job/controllers/DeviceIdleJobsController$DeviceIdleJobsDelayHandler;-><init>(Lcom/android/server/job/controllers/DeviceIdleJobsController;Landroid/os/Looper;)V
 HPLcom/android/server/job/controllers/DeviceIdleJobsController$DeviceIdleJobsDelayHandler;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/job/controllers/DeviceIdleJobsController$DeviceIdleUpdateFunctor;-><init>(Lcom/android/server/job/controllers/DeviceIdleJobsController;)V
-HPLcom/android/server/job/controllers/DeviceIdleJobsController$DeviceIdleUpdateFunctor;->accept(Lcom/android/server/job/controllers/JobStatus;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;
-HPLcom/android/server/job/controllers/DeviceIdleJobsController$DeviceIdleUpdateFunctor;->accept(Ljava/lang/Object;)V+]Lcom/android/server/job/controllers/DeviceIdleJobsController$DeviceIdleUpdateFunctor;Lcom/android/server/job/controllers/DeviceIdleJobsController$DeviceIdleUpdateFunctor;
-HPLcom/android/server/job/controllers/DeviceIdleJobsController$DeviceIdleUpdateFunctor;->prepare()V
+HSPLcom/android/server/job/controllers/DeviceIdleJobsController$DeviceIdleUpdateFunctor;->accept(Lcom/android/server/job/controllers/JobStatus;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLcom/android/server/job/controllers/DeviceIdleJobsController$DeviceIdleUpdateFunctor;->accept(Ljava/lang/Object;)V+]Lcom/android/server/job/controllers/DeviceIdleJobsController$DeviceIdleUpdateFunctor;Lcom/android/server/job/controllers/DeviceIdleJobsController$DeviceIdleUpdateFunctor;
+HSPLcom/android/server/job/controllers/DeviceIdleJobsController$DeviceIdleUpdateFunctor;->prepare()V
 PLcom/android/server/job/controllers/DeviceIdleJobsController;->$r8$lambda$AAyA42Mb1SFBZ39q0JapWD5UEs4(Lcom/android/server/job/controllers/DeviceIdleJobsController;Landroid/util/IndentingPrintWriter;Lcom/android/server/job/controllers/JobStatus;)V
 HPLcom/android/server/job/controllers/DeviceIdleJobsController;->$r8$lambda$EWjajMe5VwtSskM5Ni9VWOUtMXY(Lcom/android/server/job/controllers/DeviceIdleJobsController;Landroid/util/proto/ProtoOutputStream;Lcom/android/server/job/controllers/JobStatus;)V
 HPLcom/android/server/job/controllers/DeviceIdleJobsController;->$r8$lambda$VpJp4MpRi-UflASRMbPmKAqXjTU(Lcom/android/server/job/controllers/DeviceIdleJobsController;Lcom/android/server/job/controllers/JobStatus;)Z
-HPLcom/android/server/job/controllers/DeviceIdleJobsController;->-$$Nest$fgetmAllowInIdleJobs(Lcom/android/server/job/controllers/DeviceIdleJobsController;)Landroid/util/ArraySet;
+HSPLcom/android/server/job/controllers/DeviceIdleJobsController;->-$$Nest$fgetmAllowInIdleJobs(Lcom/android/server/job/controllers/DeviceIdleJobsController;)Landroid/util/ArraySet;
 PLcom/android/server/job/controllers/DeviceIdleJobsController;->-$$Nest$fgetmDeviceIdleUpdateFunctor(Lcom/android/server/job/controllers/DeviceIdleJobsController;)Lcom/android/server/job/controllers/DeviceIdleJobsController$DeviceIdleUpdateFunctor;
 HPLcom/android/server/job/controllers/DeviceIdleJobsController;->-$$Nest$fgetmDeviceIdleWhitelistAppIds(Lcom/android/server/job/controllers/DeviceIdleJobsController;)[I
-HPLcom/android/server/job/controllers/DeviceIdleJobsController;->-$$Nest$fgetmLocalDeviceIdleController(Lcom/android/server/job/controllers/DeviceIdleJobsController;)Lcom/android/server/DeviceIdleInternal;
+HSPLcom/android/server/job/controllers/DeviceIdleJobsController;->-$$Nest$fgetmLocalDeviceIdleController(Lcom/android/server/job/controllers/DeviceIdleJobsController;)Lcom/android/server/DeviceIdleInternal;
 HPLcom/android/server/job/controllers/DeviceIdleJobsController;->-$$Nest$fgetmPowerManager(Lcom/android/server/job/controllers/DeviceIdleJobsController;)Landroid/os/PowerManager;
 PLcom/android/server/job/controllers/DeviceIdleJobsController;->-$$Nest$fputmDeviceIdleWhitelistAppIds(Lcom/android/server/job/controllers/DeviceIdleJobsController;[I)V
-PLcom/android/server/job/controllers/DeviceIdleJobsController;->-$$Nest$fputmPowerSaveTempWhitelistAppIds(Lcom/android/server/job/controllers/DeviceIdleJobsController;[I)V
-HPLcom/android/server/job/controllers/DeviceIdleJobsController;->-$$Nest$mupdateTaskStateLocked(Lcom/android/server/job/controllers/DeviceIdleJobsController;Lcom/android/server/job/controllers/JobStatus;J)Z+]Lcom/android/server/job/controllers/DeviceIdleJobsController;Lcom/android/server/job/controllers/DeviceIdleJobsController;
-HPLcom/android/server/job/controllers/DeviceIdleJobsController;->-$$Nest$sfgetDEBUG()Z
+HSPLcom/android/server/job/controllers/DeviceIdleJobsController;->-$$Nest$fputmPowerSaveTempWhitelistAppIds(Lcom/android/server/job/controllers/DeviceIdleJobsController;[I)V
+HSPLcom/android/server/job/controllers/DeviceIdleJobsController;->-$$Nest$mupdateTaskStateLocked(Lcom/android/server/job/controllers/DeviceIdleJobsController;Lcom/android/server/job/controllers/JobStatus;J)Z+]Lcom/android/server/job/controllers/DeviceIdleJobsController;Lcom/android/server/job/controllers/DeviceIdleJobsController;
+HSPLcom/android/server/job/controllers/DeviceIdleJobsController;->-$$Nest$sfgetDEBUG()Z
 HSPLcom/android/server/job/controllers/DeviceIdleJobsController;-><clinit>()V
 HSPLcom/android/server/job/controllers/DeviceIdleJobsController;-><init>(Lcom/android/server/job/JobSchedulerService;)V
 PLcom/android/server/job/controllers/DeviceIdleJobsController;->dumpControllerStateLocked(Landroid/util/IndentingPrintWriter;Ljava/util/function/Predicate;)V
@@ -25412,7 +26507,7 @@
 HPLcom/android/server/job/controllers/DeviceIdleJobsController;->lambda$new$0(Lcom/android/server/job/controllers/JobStatus;)Z
 HSPLcom/android/server/job/controllers/DeviceIdleJobsController;->maybeStartTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/DeviceIdleJobsController;Lcom/android/server/job/controllers/DeviceIdleJobsController;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/job/controllers/DeviceIdleJobsController;->maybeStopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;Z)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/ArraySet;Landroid/util/ArraySet;
-HPLcom/android/server/job/controllers/DeviceIdleJobsController;->setUidActiveLocked(IZ)V+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/job/controllers/DeviceIdleJobsController$DeviceIdleUpdateFunctor;Lcom/android/server/job/controllers/DeviceIdleJobsController$DeviceIdleUpdateFunctor;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/StateChangedListener;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/JobStore;Lcom/android/server/job/JobStore;
+HSPLcom/android/server/job/controllers/DeviceIdleJobsController;->setUidActiveLocked(IZ)V+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/job/controllers/DeviceIdleJobsController$DeviceIdleUpdateFunctor;Lcom/android/server/job/controllers/DeviceIdleJobsController$DeviceIdleUpdateFunctor;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/StateChangedListener;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/JobStore;Lcom/android/server/job/JobStore;
 HPLcom/android/server/job/controllers/DeviceIdleJobsController;->updateIdleMode(Z)V
 HSPLcom/android/server/job/controllers/DeviceIdleJobsController;->updateTaskStateLocked(Lcom/android/server/job/controllers/JobStatus;J)Z+]Lcom/android/server/job/controllers/DeviceIdleJobsController;Lcom/android/server/job/controllers/DeviceIdleJobsController;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
 HSPLcom/android/server/job/controllers/IdleController;-><init>(Lcom/android/server/job/JobSchedulerService;)V
@@ -25421,7 +26516,7 @@
 HSPLcom/android/server/job/controllers/IdleController;->initIdleStateTracking(Landroid/content/Context;)V
 HSPLcom/android/server/job/controllers/IdleController;->maybeStartTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/idle/IdlenessTracker;Lcom/android/server/job/controllers/idle/DeviceIdlenessTracker;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/job/controllers/IdleController;->maybeStopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;Z)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/ArraySet;Landroid/util/ArraySet;
-HPLcom/android/server/job/controllers/IdleController;->reportNewIdleState(Z)V
+HPLcom/android/server/job/controllers/IdleController;->reportNewIdleState(Z)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/StateChangedListener;Lcom/android/server/job/JobSchedulerService;
 HPLcom/android/server/job/controllers/IdleController;->startTrackingRestrictedJobLocked(Lcom/android/server/job/controllers/JobStatus;)V
 PLcom/android/server/job/controllers/IdleController;->stopTrackingRestrictedJobLocked(Lcom/android/server/job/controllers/JobStatus;)V
 HSPLcom/android/server/job/controllers/JobStatus;-><clinit>()V
@@ -25434,32 +26529,32 @@
 HPLcom/android/server/job/controllers/JobStatus;->bucketName(I)Ljava/lang/String;
 HSPLcom/android/server/job/controllers/JobStatus;->canRunInBatterySaver()Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
 HSPLcom/android/server/job/controllers/JobStatus;->canRunInDoze()Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
-HPLcom/android/server/job/controllers/JobStatus;->clearPersistedUtcTimes()V
+HSPLcom/android/server/job/controllers/JobStatus;->clearPersistedUtcTimes()V
 HSPLcom/android/server/job/controllers/JobStatus;->clearTrackingController(I)Z
 HPLcom/android/server/job/controllers/JobStatus;->completeWorkLocked(I)Z
 HPLcom/android/server/job/controllers/JobStatus;->constraintToStopReason(I)I
 HSPLcom/android/server/job/controllers/JobStatus;->createFromJobInfo(Landroid/app/job/JobInfo;ILjava/lang/String;ILjava/lang/String;)Lcom/android/server/job/controllers/JobStatus;+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Landroid/content/ComponentName;Landroid/content/ComponentName;
-HPLcom/android/server/job/controllers/JobStatus;->dequeueWorkLocked()Landroid/app/job/JobWorkItem;
+HPLcom/android/server/job/controllers/JobStatus;->dequeueWorkLocked()Landroid/app/job/JobWorkItem;+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/job/JobWorkItem;Landroid/app/job/JobWorkItem;
 HPLcom/android/server/job/controllers/JobStatus;->disallowRunInBatterySaverAndDoze()V
 HPLcom/android/server/job/controllers/JobStatus;->dump(Landroid/util/IndentingPrintWriter;ZJ)V
 HPLcom/android/server/job/controllers/JobStatus;->dump(Landroid/util/proto/ProtoOutputStream;JZJ)V
 HPLcom/android/server/job/controllers/JobStatus;->dumpConstraints(Landroid/util/proto/ProtoOutputStream;JI)V
-HPLcom/android/server/job/controllers/JobStatus;->dumpConstraints(Ljava/io/PrintWriter;I)V
-PLcom/android/server/job/controllers/JobStatus;->dumpJobWorkItem(Landroid/util/IndentingPrintWriter;Landroid/app/job/JobWorkItem;I)V
+HPLcom/android/server/job/controllers/JobStatus;->dumpConstraints(Ljava/io/PrintWriter;I)V+]Ljava/io/PrintWriter;Landroid/util/IndentingPrintWriter;
+HPLcom/android/server/job/controllers/JobStatus;->dumpJobWorkItem(Landroid/util/IndentingPrintWriter;Landroid/app/job/JobWorkItem;I)V
 HPLcom/android/server/job/controllers/JobStatus;->dumpJobWorkItem(Landroid/util/proto/ProtoOutputStream;JLandroid/app/job/JobWorkItem;)V
 HPLcom/android/server/job/controllers/JobStatus;->enqueueWorkLocked(Landroid/app/job/JobWorkItem;)V
 HPLcom/android/server/job/controllers/JobStatus;->formatRunTime(Ljava/io/PrintWriter;JJJ)V
 PLcom/android/server/job/controllers/JobStatus;->formatRunTime(Ljava/lang/StringBuilder;JJJ)V
 PLcom/android/server/job/controllers/JobStatus;->formatTime(J)Ljava/lang/CharSequence;
 HSPLcom/android/server/job/controllers/JobStatus;->getBatteryName()Ljava/lang/String;
-HPLcom/android/server/job/controllers/JobStatus;->getBias()I+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
-PLcom/android/server/job/controllers/JobStatus;->getBucketName()Ljava/lang/String;
+HSPLcom/android/server/job/controllers/JobStatus;->getBias()I+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
+HPLcom/android/server/job/controllers/JobStatus;->getBucketName()Ljava/lang/String;
 HSPLcom/android/server/job/controllers/JobStatus;->getEarliestRunTime()J
 HSPLcom/android/server/job/controllers/JobStatus;->getEffectivePriority()I+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
 HSPLcom/android/server/job/controllers/JobStatus;->getEffectiveStandbyBucket()I+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
 HPLcom/android/server/job/controllers/JobStatus;->getEstimatedNetworkDownloadBytes()J
 HPLcom/android/server/job/controllers/JobStatus;->getEstimatedNetworkUploadBytes()J
-HPLcom/android/server/job/controllers/JobStatus;->getFirstForceBatchedTimeElapsed()J
+HSPLcom/android/server/job/controllers/JobStatus;->getFirstForceBatchedTimeElapsed()J
 HSPLcom/android/server/job/controllers/JobStatus;->getFlags()I+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
 HPLcom/android/server/job/controllers/JobStatus;->getFractionRunTime()F+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;
 HSPLcom/android/server/job/controllers/JobStatus;->getInternalFlags()I
@@ -25480,12 +26575,12 @@
 HSPLcom/android/server/job/controllers/JobStatus;->getSourceUserId()I
 HSPLcom/android/server/job/controllers/JobStatus;->getStandbyBucket()I
 HPLcom/android/server/job/controllers/JobStatus;->getStopReason()I
-HPLcom/android/server/job/controllers/JobStatus;->getTag()Ljava/lang/String;
+HSPLcom/android/server/job/controllers/JobStatus;->getTag()Ljava/lang/String;
 HPLcom/android/server/job/controllers/JobStatus;->getTriggerContentMaxDelay()J+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
 HPLcom/android/server/job/controllers/JobStatus;->getTriggerContentUpdateDelay()J
 HSPLcom/android/server/job/controllers/JobStatus;->getUid()I
 HSPLcom/android/server/job/controllers/JobStatus;->getUserId()I
-HPLcom/android/server/job/controllers/JobStatus;->getWhenStandbyDeferred()J
+HSPLcom/android/server/job/controllers/JobStatus;->getWhenStandbyDeferred()J
 HSPLcom/android/server/job/controllers/JobStatus;->hasBatteryNotLowConstraint()Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
 HSPLcom/android/server/job/controllers/JobStatus;->hasChargingConstraint()Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
 HSPLcom/android/server/job/controllers/JobStatus;->hasConnectivityConstraint()Z
@@ -25527,16 +26622,16 @@
 HPLcom/android/server/job/controllers/JobStatus;->setOriginalLatestRunTimeElapsed(J)V
 HSPLcom/android/server/job/controllers/JobStatus;->setPrefetchConstraintSatisfied(JZ)Z
 HSPLcom/android/server/job/controllers/JobStatus;->setQuotaConstraintSatisfied(JZ)Z
-HPLcom/android/server/job/controllers/JobStatus;->setStandbyBucket(I)V
+HSPLcom/android/server/job/controllers/JobStatus;->setStandbyBucket(I)V
 HSPLcom/android/server/job/controllers/JobStatus;->setStorageNotLowConstraintSatisfied(JZ)Z
 HSPLcom/android/server/job/controllers/JobStatus;->setTareWealthConstraintSatisfied(JZ)Z
 HSPLcom/android/server/job/controllers/JobStatus;->setTimingDelayConstraintSatisfied(JZ)Z
 HSPLcom/android/server/job/controllers/JobStatus;->setTrackingController(I)V
 HSPLcom/android/server/job/controllers/JobStatus;->setUidActive(Z)Z
-HPLcom/android/server/job/controllers/JobStatus;->setWhenStandbyDeferred(J)V
+HSPLcom/android/server/job/controllers/JobStatus;->setWhenStandbyDeferred(J)V
 HSPLcom/android/server/job/controllers/JobStatus;->shouldTreatAsExpeditedJob()Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
 HPLcom/android/server/job/controllers/JobStatus;->stopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/job/controllers/JobStatus;->toShortString()Ljava/lang/String;
+HPLcom/android/server/job/controllers/JobStatus;->toShortString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
 HPLcom/android/server/job/controllers/JobStatus;->toShortStringExceptUniqueId()Ljava/lang/String;
 HPLcom/android/server/job/controllers/JobStatus;->toString()Ljava/lang/String;
 HPLcom/android/server/job/controllers/JobStatus;->ungrantWorkItem(Landroid/app/job/JobWorkItem;)V
@@ -25545,7 +26640,7 @@
 HPLcom/android/server/job/controllers/JobStatus;->updateExpeditedDependencies()V
 HSPLcom/android/server/job/controllers/JobStatus;->updateMediaBackupExemptionStatus()Z+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;
 HSPLcom/android/server/job/controllers/JobStatus;->updateNetworkBytesLocked()V+]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/job/JobWorkItem;Landroid/app/job/JobWorkItem;
-HSPLcom/android/server/job/controllers/JobStatus;->wouldBeReadyWithConstraint(I)Z
+HSPLcom/android/server/job/controllers/JobStatus;->wouldBeReadyWithConstraint(I)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
 HPLcom/android/server/job/controllers/JobStatus;->writeToShortProto(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLcom/android/server/job/controllers/Package;-><init>(ILjava/lang/String;)V
 HPLcom/android/server/job/controllers/Package;->equals(Ljava/lang/Object;)Z
@@ -25594,15 +26689,15 @@
 HSPLcom/android/server/job/controllers/PrefetchController;->maybeStartTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V+]Ljava/time/Clock;Ljava/time/Clock$SystemClock;,Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/PrefetchController;Lcom/android/server/job/controllers/PrefetchController;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/app/job/JobInfo;Landroid/app/job/JobInfo;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/job/controllers/PrefetchController;->maybeStopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;Z)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/utils/AlarmQueue;Lcom/android/server/job/controllers/PrefetchController$ThresholdAlarmListener;
 PLcom/android/server/job/controllers/PrefetchController;->maybeUpdateConstraintForPkgLocked(JJILjava/lang/String;)Z
-HPLcom/android/server/job/controllers/PrefetchController;->maybeUpdateConstraintForUid(I)V
+HPLcom/android/server/job/controllers/PrefetchController;->maybeUpdateConstraintForUid(I)V+]Ljava/time/Clock;Ljava/time/Clock$SystemClock;,Lcom/android/server/job/JobSchedulerService$2;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
 PLcom/android/server/job/controllers/PrefetchController;->onAppRemovedLocked(Ljava/lang/String;I)V
 HSPLcom/android/server/job/controllers/PrefetchController;->onConstantsUpdatedLocked()V
 HSPLcom/android/server/job/controllers/PrefetchController;->onSystemServicesReady()V
-HPLcom/android/server/job/controllers/PrefetchController;->onUidBiasChangedLocked(III)V+]Landroid/os/Handler;Lcom/android/server/job/controllers/PrefetchController$PcHandler;]Landroid/os/Message;Landroid/os/Message;
+HSPLcom/android/server/job/controllers/PrefetchController;->onUidBiasChangedLocked(III)V+]Landroid/os/Handler;Lcom/android/server/job/controllers/PrefetchController$PcHandler;]Landroid/os/Message;Landroid/os/Message;
 HPLcom/android/server/job/controllers/PrefetchController;->onUserRemovedLocked(I)V
 HSPLcom/android/server/job/controllers/PrefetchController;->prepareForUpdatedConstantsLocked()V
 PLcom/android/server/job/controllers/PrefetchController;->processConstantLocked(Landroid/provider/DeviceConfig$Properties;Ljava/lang/String;)V
-PLcom/android/server/job/controllers/PrefetchController;->processUpdatedEstimatedLaunchTime(ILjava/lang/String;J)V
+HPLcom/android/server/job/controllers/PrefetchController;->processUpdatedEstimatedLaunchTime(ILjava/lang/String;J)V
 HSPLcom/android/server/job/controllers/PrefetchController;->updateConstraintLocked(Lcom/android/server/job/controllers/JobStatus;JJ)Z
 HSPLcom/android/server/job/controllers/PrefetchController;->updateThresholdAlarmLocked(ILjava/lang/String;JJ)V
 HSPLcom/android/server/job/controllers/PrefetchController;->willBeLaunchedSoonLocked(ILjava/lang/String;J)Z
@@ -25620,11 +26715,11 @@
 PLcom/android/server/job/controllers/QuotaController$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/job/controllers/QuotaController;)V
 PLcom/android/server/job/controllers/QuotaController$$ExternalSyntheticLambda6;->run()V
 HSPLcom/android/server/job/controllers/QuotaController$1;-><init>(Lcom/android/server/job/controllers/QuotaController;)V
-PLcom/android/server/job/controllers/QuotaController$1;->onAlarm()V
+HPLcom/android/server/job/controllers/QuotaController$1;->onAlarm()V
 HSPLcom/android/server/job/controllers/QuotaController$EarliestEndTimeFunctor;-><init>(Lcom/android/server/job/controllers/QuotaController;)V
 HSPLcom/android/server/job/controllers/QuotaController$EarliestEndTimeFunctor;-><init>(Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController$EarliestEndTimeFunctor-IA;)V
 HPLcom/android/server/job/controllers/QuotaController$EarliestEndTimeFunctor;->accept(Ljava/lang/Object;)V+]Lcom/android/server/job/controllers/QuotaController$EarliestEndTimeFunctor;Lcom/android/server/job/controllers/QuotaController$EarliestEndTimeFunctor;
-HPLcom/android/server/job/controllers/QuotaController$EarliestEndTimeFunctor;->accept(Ljava/util/List;)V+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/job/controllers/QuotaController$TimedEvent;Lcom/android/server/job/controllers/QuotaController$TimingSession;
+HPLcom/android/server/job/controllers/QuotaController$EarliestEndTimeFunctor;->accept(Ljava/util/List;)V+]Lcom/android/server/job/controllers/QuotaController$TimedEvent;Lcom/android/server/job/controllers/QuotaController$TimingSession;]Ljava/util/List;Ljava/util/ArrayList;
 PLcom/android/server/job/controllers/QuotaController$EarliestEndTimeFunctor;->reset()V
 HSPLcom/android/server/job/controllers/QuotaController$ExecutionStats;-><init>()V
 PLcom/android/server/job/controllers/QuotaController$ExecutionStats;->equals(Ljava/lang/Object;)Z
@@ -25650,24 +26745,24 @@
 PLcom/android/server/job/controllers/QuotaController$QcConstants;->updateEJLimitConstantsLocked()V
 PLcom/android/server/job/controllers/QuotaController$QcConstants;->updateExecutionPeriodConstantsLocked()V
 HSPLcom/android/server/job/controllers/QuotaController$QcHandler;-><init>(Lcom/android/server/job/controllers/QuotaController;Landroid/os/Looper;)V
-HPLcom/android/server/job/controllers/QuotaController$QcHandler;->handleMessage(Landroid/os/Message;)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Landroid/os/Handler;Lcom/android/server/job/controllers/QuotaController$QcHandler;]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/job/controllers/QuotaController$Timer;Lcom/android/server/job/controllers/QuotaController$Timer;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/job/controllers/QuotaController$TopAppTimer;Lcom/android/server/job/controllers/QuotaController$TopAppTimer;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/app/usage/UsageEvents$Event;Landroid/app/usage/UsageEvents$Event;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/StateChangedListener;Lcom/android/server/job/JobSchedulerService;
+HSPLcom/android/server/job/controllers/QuotaController$QcHandler;->handleMessage(Landroid/os/Message;)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Landroid/os/Handler;Lcom/android/server/job/controllers/QuotaController$QcHandler;]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/job/controllers/QuotaController$Timer;Lcom/android/server/job/controllers/QuotaController$Timer;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/job/controllers/QuotaController$TopAppTimer;Lcom/android/server/job/controllers/QuotaController$TopAppTimer;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/app/usage/UsageEvents$Event;Landroid/app/usage/UsageEvents$Event;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/StateChangedListener;Lcom/android/server/job/JobSchedulerService;
 HSPLcom/android/server/job/controllers/QuotaController$QcUidObserver;-><init>(Lcom/android/server/job/controllers/QuotaController;)V
 HSPLcom/android/server/job/controllers/QuotaController$QcUidObserver;-><init>(Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController$QcUidObserver-IA;)V
 PLcom/android/server/job/controllers/QuotaController$QcUidObserver;->onUidProcAdjChanged(I)V
 HSPLcom/android/server/job/controllers/QuotaController$QcUidObserver;->onUidStateChanged(IIJI)V+]Landroid/os/Handler;Lcom/android/server/job/controllers/QuotaController$QcHandler;]Landroid/os/Message;Landroid/os/Message;
-PLcom/android/server/job/controllers/QuotaController$ShrinkableDebits;-><init>(I)V
+HSPLcom/android/server/job/controllers/QuotaController$ShrinkableDebits;-><init>(I)V
 PLcom/android/server/job/controllers/QuotaController$ShrinkableDebits;->dumpLocked(Landroid/util/IndentingPrintWriter;)V
-HPLcom/android/server/job/controllers/QuotaController$ShrinkableDebits;->getStandbyBucketLocked()I
-HPLcom/android/server/job/controllers/QuotaController$ShrinkableDebits;->getTallyLocked()J
-PLcom/android/server/job/controllers/QuotaController$ShrinkableDebits;->setStandbyBucketLocked(I)V
+HSPLcom/android/server/job/controllers/QuotaController$ShrinkableDebits;->getStandbyBucketLocked()I
+HSPLcom/android/server/job/controllers/QuotaController$ShrinkableDebits;->getTallyLocked()J
+HSPLcom/android/server/job/controllers/QuotaController$ShrinkableDebits;->setStandbyBucketLocked(I)V
 HPLcom/android/server/job/controllers/QuotaController$ShrinkableDebits;->toString()Ljava/lang/String;
 HPLcom/android/server/job/controllers/QuotaController$ShrinkableDebits;->transactLocked(J)J
-HPLcom/android/server/job/controllers/QuotaController$StandbyTracker$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/job/controllers/QuotaController$StandbyTracker;IILjava/lang/String;)V
-HPLcom/android/server/job/controllers/QuotaController$StandbyTracker$$ExternalSyntheticLambda0;->run()V
-PLcom/android/server/job/controllers/QuotaController$StandbyTracker;->$r8$lambda$C-YfNmS_gBSa44wPjbZKaUFRs2k(Lcom/android/server/job/controllers/QuotaController$StandbyTracker;IILjava/lang/String;)V
+HSPLcom/android/server/job/controllers/QuotaController$StandbyTracker$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/job/controllers/QuotaController$StandbyTracker;IILjava/lang/String;)V
+HSPLcom/android/server/job/controllers/QuotaController$StandbyTracker$$ExternalSyntheticLambda0;->run()V
+HSPLcom/android/server/job/controllers/QuotaController$StandbyTracker;->$r8$lambda$C-YfNmS_gBSa44wPjbZKaUFRs2k(Lcom/android/server/job/controllers/QuotaController$StandbyTracker;IILjava/lang/String;)V
 HSPLcom/android/server/job/controllers/QuotaController$StandbyTracker;-><init>(Lcom/android/server/job/controllers/QuotaController;)V
-HPLcom/android/server/job/controllers/QuotaController$StandbyTracker;->lambda$onAppIdleStateChanged$0(IILjava/lang/String;)V
-HPLcom/android/server/job/controllers/QuotaController$StandbyTracker;->onAppIdleStateChanged(Ljava/lang/String;IZII)V
+HSPLcom/android/server/job/controllers/QuotaController$StandbyTracker;->lambda$onAppIdleStateChanged$0(IILjava/lang/String;)V
+HSPLcom/android/server/job/controllers/QuotaController$StandbyTracker;->onAppIdleStateChanged(Ljava/lang/String;IZII)V
 HSPLcom/android/server/job/controllers/QuotaController$TempAllowlistTracker;-><init>(Lcom/android/server/job/controllers/QuotaController;)V
 HSPLcom/android/server/job/controllers/QuotaController$TempAllowlistTracker;->onAppAdded(I)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/job/controllers/QuotaController$Timer;Lcom/android/server/job/controllers/QuotaController$Timer;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/StateChangedListener;Lcom/android/server/job/JobSchedulerService;
 HPLcom/android/server/job/controllers/QuotaController$TempAllowlistTracker;->onAppRemoved(I)V
@@ -25676,7 +26771,7 @@
 HSPLcom/android/server/job/controllers/QuotaController$TimedEventTooOldPredicate;-><init>(Lcom/android/server/job/controllers/QuotaController$TimedEventTooOldPredicate-IA;)V
 HPLcom/android/server/job/controllers/QuotaController$TimedEventTooOldPredicate;->test(Lcom/android/server/job/controllers/QuotaController$TimedEvent;)Z+]Lcom/android/server/job/controllers/QuotaController$TimedEvent;Lcom/android/server/job/controllers/QuotaController$TimingSession;
 HPLcom/android/server/job/controllers/QuotaController$TimedEventTooOldPredicate;->test(Ljava/lang/Object;)Z+]Lcom/android/server/job/controllers/QuotaController$TimedEventTooOldPredicate;Lcom/android/server/job/controllers/QuotaController$TimedEventTooOldPredicate;
-PLcom/android/server/job/controllers/QuotaController$TimedEventTooOldPredicate;->updateNow()V
+HPLcom/android/server/job/controllers/QuotaController$TimedEventTooOldPredicate;->updateNow()V
 HPLcom/android/server/job/controllers/QuotaController$Timer;->-$$Nest$fgetmPkg(Lcom/android/server/job/controllers/QuotaController$Timer;)Lcom/android/server/job/controllers/Package;
 PLcom/android/server/job/controllers/QuotaController$Timer;-><init>(Lcom/android/server/job/controllers/QuotaController;IILjava/lang/String;Z)V
 HPLcom/android/server/job/controllers/QuotaController$Timer;->cancelCutoff()V+]Landroid/os/Handler;Lcom/android/server/job/controllers/QuotaController$QcHandler;
@@ -25697,8 +26792,8 @@
 HPLcom/android/server/job/controllers/QuotaController$TimerChargingUpdateFunctor;->-$$Nest$msetStatus(Lcom/android/server/job/controllers/QuotaController$TimerChargingUpdateFunctor;JZ)V
 HSPLcom/android/server/job/controllers/QuotaController$TimerChargingUpdateFunctor;-><init>(Lcom/android/server/job/controllers/QuotaController;)V
 HSPLcom/android/server/job/controllers/QuotaController$TimerChargingUpdateFunctor;-><init>(Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController$TimerChargingUpdateFunctor-IA;)V
-HPLcom/android/server/job/controllers/QuotaController$TimerChargingUpdateFunctor;->accept(Lcom/android/server/job/controllers/QuotaController$Timer;)V
-HPLcom/android/server/job/controllers/QuotaController$TimerChargingUpdateFunctor;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/job/controllers/QuotaController$TimerChargingUpdateFunctor;->accept(Lcom/android/server/job/controllers/QuotaController$Timer;)V+]Lcom/android/server/job/controllers/QuotaController$Timer;Lcom/android/server/job/controllers/QuotaController$Timer;
+HPLcom/android/server/job/controllers/QuotaController$TimerChargingUpdateFunctor;->accept(Ljava/lang/Object;)V+]Lcom/android/server/job/controllers/QuotaController$TimerChargingUpdateFunctor;Lcom/android/server/job/controllers/QuotaController$TimerChargingUpdateFunctor;
 HPLcom/android/server/job/controllers/QuotaController$TimerChargingUpdateFunctor;->setStatus(JZ)V
 HPLcom/android/server/job/controllers/QuotaController$TimingSession;-><init>(JJI)V
 HPLcom/android/server/job/controllers/QuotaController$TimingSession;->dump(Landroid/util/IndentingPrintWriter;)V+]Landroid/util/IndentingPrintWriter;Landroid/util/IndentingPrintWriter;
@@ -25711,7 +26806,7 @@
 HPLcom/android/server/job/controllers/QuotaController$TopAppTimer;->calculateTimeChunks(J)I
 PLcom/android/server/job/controllers/QuotaController$TopAppTimer;->dump(Landroid/util/IndentingPrintWriter;)V
 HPLcom/android/server/job/controllers/QuotaController$TopAppTimer;->getPendingReward(J)J
-HPLcom/android/server/job/controllers/QuotaController$TopAppTimer;->isActive()Z
+HPLcom/android/server/job/controllers/QuotaController$TopAppTimer;->isActive()Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/job/controllers/QuotaController$TopAppTimer;->processEventLocked(Landroid/app/usage/UsageEvents$Event;)V
 HSPLcom/android/server/job/controllers/QuotaController$UidConstraintUpdater;-><init>(Lcom/android/server/job/controllers/QuotaController;)V
 HSPLcom/android/server/job/controllers/QuotaController$UidConstraintUpdater;-><init>(Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController$UidConstraintUpdater-IA;)V
@@ -25739,19 +26834,19 @@
 HPLcom/android/server/job/controllers/QuotaController;->-$$Nest$fgetmEJRewardTopAppMs(Lcom/android/server/job/controllers/QuotaController;)J
 HPLcom/android/server/job/controllers/QuotaController;->-$$Nest$fgetmEJTopAppTimeChunkSizeMs(Lcom/android/server/job/controllers/QuotaController;)J
 PLcom/android/server/job/controllers/QuotaController;->-$$Nest$fgetmEjLimitAdditionInstallerMs(Lcom/android/server/job/controllers/QuotaController;)J
-HPLcom/android/server/job/controllers/QuotaController;->-$$Nest$fgetmForegroundUids(Lcom/android/server/job/controllers/QuotaController;)Landroid/util/SparseBooleanArray;
+HSPLcom/android/server/job/controllers/QuotaController;->-$$Nest$fgetmForegroundUids(Lcom/android/server/job/controllers/QuotaController;)Landroid/util/SparseBooleanArray;
 HSPLcom/android/server/job/controllers/QuotaController;->-$$Nest$fgetmHandler(Lcom/android/server/job/controllers/QuotaController;)Lcom/android/server/job/controllers/QuotaController$QcHandler;
 PLcom/android/server/job/controllers/QuotaController;->-$$Nest$fgetmInQuotaAlarmQueue(Lcom/android/server/job/controllers/QuotaController;)Lcom/android/server/job/controllers/QuotaController$InQuotaAlarmQueue;
 PLcom/android/server/job/controllers/QuotaController;->-$$Nest$fgetmMaxBucketJobCounts(Lcom/android/server/job/controllers/QuotaController;)[I
 PLcom/android/server/job/controllers/QuotaController;->-$$Nest$fgetmMaxBucketSessionCounts(Lcom/android/server/job/controllers/QuotaController;)[I
 PLcom/android/server/job/controllers/QuotaController;->-$$Nest$fgetmMaxExecutionTimeMs(Lcom/android/server/job/controllers/QuotaController;)J
-HPLcom/android/server/job/controllers/QuotaController;->-$$Nest$fgetmPkgTimers(Lcom/android/server/job/controllers/QuotaController;)Landroid/util/SparseArrayMap;
+HSPLcom/android/server/job/controllers/QuotaController;->-$$Nest$fgetmPkgTimers(Lcom/android/server/job/controllers/QuotaController;)Landroid/util/SparseArrayMap;
 HPLcom/android/server/job/controllers/QuotaController;->-$$Nest$fgetmQuotaBufferMs(Lcom/android/server/job/controllers/QuotaController;)J
 PLcom/android/server/job/controllers/QuotaController;->-$$Nest$fgetmRateLimitingWindowMs(Lcom/android/server/job/controllers/QuotaController;)J
 HSPLcom/android/server/job/controllers/QuotaController;->-$$Nest$fgetmTempAllowlistCache(Lcom/android/server/job/controllers/QuotaController;)Landroid/util/SparseBooleanArray;
 HPLcom/android/server/job/controllers/QuotaController;->-$$Nest$fgetmTempAllowlistGraceCache(Lcom/android/server/job/controllers/QuotaController;)Landroid/util/SparseLongArray;
-HPLcom/android/server/job/controllers/QuotaController;->-$$Nest$fgetmTopAppCache(Lcom/android/server/job/controllers/QuotaController;)Landroid/util/SparseBooleanArray;
-HPLcom/android/server/job/controllers/QuotaController;->-$$Nest$fgetmTopAppGraceCache(Lcom/android/server/job/controllers/QuotaController;)Landroid/util/SparseLongArray;
+HSPLcom/android/server/job/controllers/QuotaController;->-$$Nest$fgetmTopAppCache(Lcom/android/server/job/controllers/QuotaController;)Landroid/util/SparseBooleanArray;
+HSPLcom/android/server/job/controllers/QuotaController;->-$$Nest$fgetmTopAppGraceCache(Lcom/android/server/job/controllers/QuotaController;)Landroid/util/SparseLongArray;
 HPLcom/android/server/job/controllers/QuotaController;->-$$Nest$fgetmTopAppTrackers(Lcom/android/server/job/controllers/QuotaController;)Landroid/util/SparseArrayMap;
 PLcom/android/server/job/controllers/QuotaController;->-$$Nest$fputmEJLimitWindowSizeMs(Lcom/android/server/job/controllers/QuotaController;J)V
 PLcom/android/server/job/controllers/QuotaController;->-$$Nest$fputmEJRewardInteractionMs(Lcom/android/server/job/controllers/QuotaController;J)V
@@ -25761,15 +26856,15 @@
 HPLcom/android/server/job/controllers/QuotaController;->-$$Nest$mgrantRewardForInstantEvent(Lcom/android/server/job/controllers/QuotaController;ILjava/lang/String;J)V
 PLcom/android/server/job/controllers/QuotaController;->-$$Nest$mhasTempAllowlistExemptionLocked(Lcom/android/server/job/controllers/QuotaController;IIJ)Z
 HPLcom/android/server/job/controllers/QuotaController;->-$$Nest$mincrementTimingSessionCountLocked(Lcom/android/server/job/controllers/QuotaController;ILjava/lang/String;)V
-HPLcom/android/server/job/controllers/QuotaController;->-$$Nest$misQuotaFreeLocked(Lcom/android/server/job/controllers/QuotaController;I)Z+]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;
-HPLcom/android/server/job/controllers/QuotaController;->-$$Nest$misTopStartedJobLocked(Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/JobStatus;)Z
-HPLcom/android/server/job/controllers/QuotaController;->-$$Nest$mmaybeUpdateConstraintForPkgLocked(Lcom/android/server/job/controllers/QuotaController;JILjava/lang/String;)Landroid/util/ArraySet;
+HSPLcom/android/server/job/controllers/QuotaController;->-$$Nest$misQuotaFreeLocked(Lcom/android/server/job/controllers/QuotaController;I)Z+]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;
+HSPLcom/android/server/job/controllers/QuotaController;->-$$Nest$misTopStartedJobLocked(Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/JobStatus;)Z
+HSPLcom/android/server/job/controllers/QuotaController;->-$$Nest$mmaybeUpdateConstraintForPkgLocked(Lcom/android/server/job/controllers/QuotaController;JILjava/lang/String;)Landroid/util/ArraySet;
 HSPLcom/android/server/job/controllers/QuotaController;->-$$Nest$mmaybeUpdateConstraintForUidLocked(Lcom/android/server/job/controllers/QuotaController;I)Landroid/util/ArraySet;+]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;
 HPLcom/android/server/job/controllers/QuotaController;->-$$Nest$msaveTimingSession(Lcom/android/server/job/controllers/QuotaController;ILjava/lang/String;Lcom/android/server/job/controllers/QuotaController$TimingSession;ZJ)V
 HSPLcom/android/server/job/controllers/QuotaController;->-$$Nest$msetConstraintSatisfied(Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/JobStatus;JZZ)Z
 HSPLcom/android/server/job/controllers/QuotaController;->-$$Nest$msetExpeditedQuotaApproved(Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/JobStatus;JZ)Z+]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;
 HPLcom/android/server/job/controllers/QuotaController;->-$$Nest$mtransactQuotaLocked(Lcom/android/server/job/controllers/QuotaController;ILjava/lang/String;JLcom/android/server/job/controllers/QuotaController$ShrinkableDebits;J)Z
-HPLcom/android/server/job/controllers/QuotaController;->-$$Nest$sfgetDEBUG()Z
+HSPLcom/android/server/job/controllers/QuotaController;->-$$Nest$sfgetDEBUG()Z
 HPLcom/android/server/job/controllers/QuotaController;->-$$Nest$smhashLong(J)I
 HSPLcom/android/server/job/controllers/QuotaController;-><clinit>()V
 HSPLcom/android/server/job/controllers/QuotaController;-><init>(Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/controllers/BackgroundJobsController;Lcom/android/server/job/controllers/ConnectivityController;)V
@@ -25785,16 +26880,16 @@
 HPLcom/android/server/job/controllers/QuotaController;->getBucketMaxJobCounts()[I
 PLcom/android/server/job/controllers/QuotaController;->getBucketMaxSessionCounts()[I
 PLcom/android/server/job/controllers/QuotaController;->getBucketWindowSizes()[J
-HPLcom/android/server/job/controllers/QuotaController;->getEJDebitsLocked(ILjava/lang/String;)Lcom/android/server/job/controllers/QuotaController$ShrinkableDebits;+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;
-HPLcom/android/server/job/controllers/QuotaController;->getEJLimitMsLocked(ILjava/lang/String;I)J
+HSPLcom/android/server/job/controllers/QuotaController;->getEJDebitsLocked(ILjava/lang/String;)Lcom/android/server/job/controllers/QuotaController$ShrinkableDebits;+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;
+HSPLcom/android/server/job/controllers/QuotaController;->getEJLimitMsLocked(ILjava/lang/String;I)J+]Landroid/util/SparseSetArray;Landroid/util/SparseSetArray;
 HPLcom/android/server/job/controllers/QuotaController;->getEJRewardTopAppMs()J
 HPLcom/android/server/job/controllers/QuotaController;->getEjLimitAdditionInstallerMs()J
 HSPLcom/android/server/job/controllers/QuotaController;->getExecutionStatsLocked(ILjava/lang/String;I)Lcom/android/server/job/controllers/QuotaController$ExecutionStats;+]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;
 HSPLcom/android/server/job/controllers/QuotaController;->getExecutionStatsLocked(ILjava/lang/String;IZ)Lcom/android/server/job/controllers/QuotaController$ExecutionStats;+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;]Lcom/android/server/job/controllers/QuotaController$Timer;Lcom/android/server/job/controllers/QuotaController$Timer;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;
-HPLcom/android/server/job/controllers/QuotaController;->getMaxJobExecutionTimeMsLocked(Lcom/android/server/job/controllers/JobStatus;)J+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
+HSPLcom/android/server/job/controllers/QuotaController;->getMaxJobExecutionTimeMsLocked(Lcom/android/server/job/controllers/JobStatus;)J+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
 HPLcom/android/server/job/controllers/QuotaController;->getMaxSessionCountPerRateLimitingWindow()I
 HPLcom/android/server/job/controllers/QuotaController;->getMinQuotaCheckDelayMs()J
-HPLcom/android/server/job/controllers/QuotaController;->getRemainingEJExecutionTimeLocked(ILjava/lang/String;)J+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/job/controllers/QuotaController$Timer;Lcom/android/server/job/controllers/QuotaController$Timer;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/job/controllers/QuotaController$TopAppTimer;Lcom/android/server/job/controllers/QuotaController$TopAppTimer;]Lcom/android/server/job/controllers/QuotaController$ShrinkableDebits;Lcom/android/server/job/controllers/QuotaController$ShrinkableDebits;
+HSPLcom/android/server/job/controllers/QuotaController;->getRemainingEJExecutionTimeLocked(ILjava/lang/String;)J+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;]Lcom/android/server/job/controllers/QuotaController$Timer;Lcom/android/server/job/controllers/QuotaController$Timer;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/job/controllers/QuotaController$TopAppTimer;Lcom/android/server/job/controllers/QuotaController$TopAppTimer;]Lcom/android/server/job/controllers/QuotaController$ShrinkableDebits;Lcom/android/server/job/controllers/QuotaController$ShrinkableDebits;
 HPLcom/android/server/job/controllers/QuotaController;->getRemainingExecutionTimeLocked(ILjava/lang/String;)J
 HPLcom/android/server/job/controllers/QuotaController;->getRemainingExecutionTimeLocked(ILjava/lang/String;I)J
 HPLcom/android/server/job/controllers/QuotaController;->getRemainingExecutionTimeLocked(Lcom/android/server/job/controllers/JobStatus;)J+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;,Lcom/android/server/job/JobSchedulerService;
@@ -25803,7 +26898,7 @@
 HPLcom/android/server/job/controllers/QuotaController;->getTimeUntilQuotaConsumedLocked(ILjava/lang/String;)J+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Ljava/util/List;Ljava/util/ArrayList;
 HPLcom/android/server/job/controllers/QuotaController;->getTimingSessions(ILjava/lang/String;)Ljava/util/List;
 HPLcom/android/server/job/controllers/QuotaController;->grantRewardForInstantEvent(ILjava/lang/String;J)V
-PLcom/android/server/job/controllers/QuotaController;->handleNewChargingStateLocked()V
+HPLcom/android/server/job/controllers/QuotaController;->handleNewChargingStateLocked()V
 HPLcom/android/server/job/controllers/QuotaController;->hasTempAllowlistExemptionLocked(IIJ)Z
 HPLcom/android/server/job/controllers/QuotaController;->hashLong(J)I
 HPLcom/android/server/job/controllers/QuotaController;->incrementJobCountLocked(ILjava/lang/String;I)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;
@@ -25826,19 +26921,19 @@
 HPLcom/android/server/job/controllers/QuotaController;->lambda$new$2(Ljava/util/List;)V
 HPLcom/android/server/job/controllers/QuotaController;->lambda$onConstantsUpdatedLocked$3()V
 HPLcom/android/server/job/controllers/QuotaController;->maybeScheduleCleanupAlarmLocked()V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Landroid/app/AlarmManager;Landroid/app/AlarmManager;]Lcom/android/server/job/controllers/QuotaController$EarliestEndTimeFunctor;Lcom/android/server/job/controllers/QuotaController$EarliestEndTimeFunctor;]Ljava/lang/StringBuilder;Lcom/android/server/job/controllers/JobStatus;
-HSPLcom/android/server/job/controllers/QuotaController;->maybeScheduleStartAlarmLocked(ILjava/lang/String;I)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Landroid/os/Handler;Lcom/android/server/job/controllers/QuotaController$QcHandler;]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Landroid/os/Message;Landroid/os/Message;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/utils/AlarmQueue;Lcom/android/server/job/controllers/QuotaController$InQuotaAlarmQueue;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/job/controllers/QuotaController;->maybeScheduleStartAlarmLocked(ILjava/lang/String;I)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Landroid/os/Handler;Lcom/android/server/job/controllers/QuotaController$QcHandler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;]Landroid/os/Message;Landroid/os/Message;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/utils/AlarmQueue;Lcom/android/server/job/controllers/QuotaController$InQuotaAlarmQueue;
 HSPLcom/android/server/job/controllers/QuotaController;->maybeStartTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/job/controllers/QuotaController;->maybeStopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;Z)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/utils/AlarmQueue;Lcom/android/server/job/controllers/QuotaController$InQuotaAlarmQueue;
-HPLcom/android/server/job/controllers/QuotaController;->maybeUpdateAllConstraintsLocked()V
-HPLcom/android/server/job/controllers/QuotaController;->maybeUpdateConstraintForPkgLocked(JILjava/lang/String;)Landroid/util/ArraySet;+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/utils/AlarmQueue;Lcom/android/server/job/controllers/QuotaController$InQuotaAlarmQueue;
+HPLcom/android/server/job/controllers/QuotaController;->maybeUpdateAllConstraintsLocked()V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/StateChangedListener;Lcom/android/server/job/JobSchedulerService;
+HSPLcom/android/server/job/controllers/QuotaController;->maybeUpdateConstraintForPkgLocked(JILjava/lang/String;)Landroid/util/ArraySet;+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/utils/AlarmQueue;Lcom/android/server/job/controllers/QuotaController$InQuotaAlarmQueue;
 HSPLcom/android/server/job/controllers/QuotaController;->maybeUpdateConstraintForUidLocked(I)Landroid/util/ArraySet;+]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/JobStore;Lcom/android/server/job/JobStore;]Lcom/android/server/job/controllers/QuotaController$UidConstraintUpdater;Lcom/android/server/job/controllers/QuotaController$UidConstraintUpdater;
-PLcom/android/server/job/controllers/QuotaController;->onAppRemovedLocked(Ljava/lang/String;I)V
+HPLcom/android/server/job/controllers/QuotaController;->onAppRemovedLocked(Ljava/lang/String;I)V
 HPLcom/android/server/job/controllers/QuotaController;->onBatteryStateChangedLocked()V
 HSPLcom/android/server/job/controllers/QuotaController;->onConstantsUpdatedLocked()V
 HSPLcom/android/server/job/controllers/QuotaController;->onSystemServicesReady()V
 HPLcom/android/server/job/controllers/QuotaController;->onUserAddedLocked(I)V
 PLcom/android/server/job/controllers/QuotaController;->onUserRemovedLocked(I)V
-HPLcom/android/server/job/controllers/QuotaController;->prepareForExecutionLocked(Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/job/controllers/QuotaController$Timer;Lcom/android/server/job/controllers/QuotaController$Timer;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/lang/StringBuilder;Landroid/util/ArraySet;
+HSPLcom/android/server/job/controllers/QuotaController;->prepareForExecutionLocked(Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/job/controllers/QuotaController$Timer;Lcom/android/server/job/controllers/QuotaController$Timer;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/lang/StringBuilder;Landroid/util/ArraySet;
 HSPLcom/android/server/job/controllers/QuotaController;->prepareForUpdatedConstantsLocked()V
 PLcom/android/server/job/controllers/QuotaController;->processConstantLocked(Landroid/provider/DeviceConfig$Properties;Ljava/lang/String;)V
 PLcom/android/server/job/controllers/QuotaController;->saveTimingSession(ILjava/lang/String;Lcom/android/server/job/controllers/QuotaController$TimingSession;Z)V
@@ -25847,8 +26942,8 @@
 HSPLcom/android/server/job/controllers/QuotaController;->setExpeditedQuotaApproved(Lcom/android/server/job/controllers/JobStatus;JZ)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;]Lcom/android/server/job/controllers/BackgroundJobsController;Lcom/android/server/job/controllers/BackgroundJobsController;
 HPLcom/android/server/job/controllers/QuotaController;->transactQuotaLocked(ILjava/lang/String;JLcom/android/server/job/controllers/QuotaController$ShrinkableDebits;J)Z
 HPLcom/android/server/job/controllers/QuotaController;->unprepareFromExecutionLocked(Lcom/android/server/job/controllers/JobStatus;)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/job/controllers/QuotaController$Timer;Lcom/android/server/job/controllers/QuotaController$Timer;]Landroid/util/ArraySet;Landroid/util/ArraySet;
-HSPLcom/android/server/job/controllers/QuotaController;->updateExecutionStatsLocked(ILjava/lang/String;Lcom/android/server/job/controllers/QuotaController$ExecutionStats;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/job/controllers/QuotaController$Timer;Lcom/android/server/job/controllers/QuotaController$Timer;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/job/controllers/QuotaController$TimedEvent;Lcom/android/server/job/controllers/QuotaController$TimingSession;
-HPLcom/android/server/job/controllers/QuotaController;->updateStandbyBucket(ILjava/lang/String;I)V
+HSPLcom/android/server/job/controllers/QuotaController;->updateExecutionStatsLocked(ILjava/lang/String;Lcom/android/server/job/controllers/QuotaController$ExecutionStats;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/QuotaController$TimedEvent;Lcom/android/server/job/controllers/QuotaController$TimingSession;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/job/controllers/QuotaController$Timer;Lcom/android/server/job/controllers/QuotaController$Timer;]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/job/controllers/QuotaController;->updateStandbyBucket(ILjava/lang/String;I)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/QuotaController;Lcom/android/server/job/controllers/QuotaController;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/job/controllers/QuotaController$Timer;Lcom/android/server/job/controllers/QuotaController$Timer;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/StateChangedListener;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/controllers/QuotaController$ShrinkableDebits;Lcom/android/server/job/controllers/QuotaController$ShrinkableDebits;
 HSPLcom/android/server/job/controllers/RestrictingController;-><init>(Lcom/android/server/job/JobSchedulerService;)V
 HPLcom/android/server/job/controllers/RestrictingController;->startTrackingRestrictedJobLocked(Lcom/android/server/job/controllers/JobStatus;)V
 HPLcom/android/server/job/controllers/RestrictingController;->stopTrackingRestrictedJobLocked(Lcom/android/server/job/controllers/JobStatus;)V
@@ -25862,10 +26957,10 @@
 PLcom/android/server/job/controllers/StateController;->onBatteryStateChangedLocked()V
 HSPLcom/android/server/job/controllers/StateController;->onConstantsUpdatedLocked()V
 HSPLcom/android/server/job/controllers/StateController;->onSystemServicesReady()V
-HPLcom/android/server/job/controllers/StateController;->onUidBiasChangedLocked(III)V
+HSPLcom/android/server/job/controllers/StateController;->onUidBiasChangedLocked(III)V
 HPLcom/android/server/job/controllers/StateController;->onUserAddedLocked(I)V
 PLcom/android/server/job/controllers/StateController;->onUserRemovedLocked(I)V
-HPLcom/android/server/job/controllers/StateController;->prepareForExecutionLocked(Lcom/android/server/job/controllers/JobStatus;)V
+HSPLcom/android/server/job/controllers/StateController;->prepareForExecutionLocked(Lcom/android/server/job/controllers/JobStatus;)V
 HSPLcom/android/server/job/controllers/StateController;->prepareForUpdatedConstantsLocked()V
 PLcom/android/server/job/controllers/StateController;->processConstantLocked(Landroid/provider/DeviceConfig$Properties;Ljava/lang/String;)V
 HPLcom/android/server/job/controllers/StateController;->reevaluateStateLocked(I)V
@@ -25903,14 +26998,14 @@
 HSPLcom/android/server/job/controllers/TareController;-><init>(Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/controllers/BackgroundJobsController;Lcom/android/server/job/controllers/ConnectivityController;)V
 HSPLcom/android/server/job/controllers/TareController;->addJobToBillList(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/tare/EconomyManagerInternal$ActionBill;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/tare/EconomyManagerInternal;Lcom/android/server/tare/InternalResourceService$LocalService;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/job/controllers/TareController;->canAffordBillLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/tare/EconomyManagerInternal$ActionBill;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/tare/EconomyManagerInternal;Lcom/android/server/tare/InternalResourceService$LocalService;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Lcom/android/server/job/controllers/TareController;Lcom/android/server/job/controllers/TareController;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
-PLcom/android/server/job/controllers/TareController;->canAffordExpeditedBillLocked(Lcom/android/server/job/controllers/JobStatus;)Z
+HPLcom/android/server/job/controllers/TareController;->canAffordExpeditedBillLocked(Lcom/android/server/job/controllers/JobStatus;)Z
 PLcom/android/server/job/controllers/TareController;->canScheduleEJ(Lcom/android/server/job/controllers/JobStatus;)Z
 PLcom/android/server/job/controllers/TareController;->dumpControllerStateLocked(Landroid/util/IndentingPrintWriter;Ljava/util/function/Predicate;)V
 PLcom/android/server/job/controllers/TareController;->getBillName(Lcom/android/server/tare/EconomyManagerInternal$ActionBill;)Ljava/lang/String;
 HPLcom/android/server/job/controllers/TareController;->getMaxJobExecutionTimeMsLocked(Lcom/android/server/job/controllers/JobStatus;)J+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/tare/EconomyManagerInternal;Lcom/android/server/tare/InternalResourceService$LocalService;]Lcom/android/server/job/controllers/TareController;Lcom/android/server/job/controllers/TareController;
 HSPLcom/android/server/job/controllers/TareController;->getPossibleStartBills(Lcom/android/server/job/controllers/JobStatus;)Landroid/util/ArraySet;+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/ArraySet;Landroid/util/ArraySet;
-HPLcom/android/server/job/controllers/TareController;->getRunningActionId(Lcom/android/server/job/controllers/JobStatus;)I+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
-HPLcom/android/server/job/controllers/TareController;->getRunningBill(Lcom/android/server/job/controllers/JobStatus;)Lcom/android/server/tare/EconomyManagerInternal$ActionBill;+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
+HSPLcom/android/server/job/controllers/TareController;->getRunningActionId(Lcom/android/server/job/controllers/JobStatus;)I+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
+HSPLcom/android/server/job/controllers/TareController;->getRunningBill(Lcom/android/server/job/controllers/JobStatus;)Lcom/android/server/tare/EconomyManagerInternal$ActionBill;+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
 HSPLcom/android/server/job/controllers/TareController;->hasEnoughWealthLocked(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/TareController;Lcom/android/server/job/controllers/TareController;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
 HPLcom/android/server/job/controllers/TareController;->isTopStartedJobLocked(Lcom/android/server/job/controllers/JobStatus;)Z+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 PLcom/android/server/job/controllers/TareController;->lambda$dumpControllerStateLocked$3(Landroid/util/IndentingPrintWriter;ILjava/lang/String;Landroid/util/ArrayMap;)V
@@ -25920,8 +27015,8 @@
 HSPLcom/android/server/job/controllers/TareController;->maybeStartTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/TareController;Lcom/android/server/job/controllers/TareController;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/job/controllers/TareController;->maybeStopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/tare/EconomyManagerInternal;Lcom/android/server/tare/InternalResourceService$LocalService;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/job/controllers/TareController;Lcom/android/server/job/controllers/TareController;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/job/controllers/TareController;->onConstantsUpdatedLocked()V
-HPLcom/android/server/job/controllers/TareController;->prepareForExecutionLocked(Lcom/android/server/job/controllers/JobStatus;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/tare/EconomyManagerInternal;Lcom/android/server/tare/InternalResourceService$LocalService;]Lcom/android/server/job/controllers/TareController;Lcom/android/server/job/controllers/TareController;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
-HPLcom/android/server/job/controllers/TareController;->removeJobFromBillList(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/tare/EconomyManagerInternal$ActionBill;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/tare/EconomyManagerInternal;Lcom/android/server/tare/InternalResourceService$LocalService;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLcom/android/server/job/controllers/TareController;->prepareForExecutionLocked(Lcom/android/server/job/controllers/JobStatus;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/tare/EconomyManagerInternal;Lcom/android/server/tare/InternalResourceService$LocalService;]Lcom/android/server/job/controllers/TareController;Lcom/android/server/job/controllers/TareController;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
+HSPLcom/android/server/job/controllers/TareController;->removeJobFromBillList(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/tare/EconomyManagerInternal$ActionBill;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/tare/EconomyManagerInternal;Lcom/android/server/tare/InternalResourceService$LocalService;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/job/controllers/TareController;->setExpeditedTareApproved(Lcom/android/server/job/controllers/JobStatus;JZ)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/ConnectivityController;Lcom/android/server/job/controllers/ConnectivityController;]Lcom/android/server/job/StateChangedListener;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/controllers/BackgroundJobsController;Lcom/android/server/job/controllers/BackgroundJobsController;
 HPLcom/android/server/job/controllers/TareController;->unprepareFromExecutionLocked(Lcom/android/server/job/controllers/JobStatus;)V
 HSPLcom/android/server/job/controllers/TimeController$1;-><init>(Lcom/android/server/job/controllers/TimeController;)V
@@ -25937,18 +27032,18 @@
 HPLcom/android/server/job/controllers/TimeController;->checkExpiredDelaysAndResetAlarm()V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/StateController;Lcom/android/server/job/controllers/TimeController;]Lcom/android/server/job/controllers/TimeController;Lcom/android/server/job/controllers/TimeController;]Ljava/util/List;Ljava/util/LinkedList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/StateChangedListener;Lcom/android/server/job/JobSchedulerService;]Ljava/util/Iterator;Ljava/util/LinkedList$ListItr;
 HPLcom/android/server/job/controllers/TimeController;->dumpControllerStateLocked(Landroid/util/IndentingPrintWriter;Ljava/util/function/Predicate;)V
 PLcom/android/server/job/controllers/TimeController;->dumpControllerStateLocked(Landroid/util/proto/ProtoOutputStream;JLjava/util/function/Predicate;)V
-HPLcom/android/server/job/controllers/TimeController;->ensureAlarmServiceLocked()V
+HSPLcom/android/server/job/controllers/TimeController;->ensureAlarmServiceLocked()V
 HSPLcom/android/server/job/controllers/TimeController;->evaluateDeadlineConstraint(Lcom/android/server/job/controllers/JobStatus;J)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
 HSPLcom/android/server/job/controllers/TimeController;->evaluateStateLocked(Lcom/android/server/job/controllers/JobStatus;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/StateController;Lcom/android/server/job/controllers/TimeController;]Lcom/android/server/job/controllers/TimeController;Lcom/android/server/job/controllers/TimeController;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;]Lcom/android/server/job/StateChangedListener;Lcom/android/server/job/JobSchedulerService;
 HSPLcom/android/server/job/controllers/TimeController;->evaluateTimingDelayConstraint(Lcom/android/server/job/controllers/JobStatus;J)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;
-HPLcom/android/server/job/controllers/TimeController;->maybeAdjustAlarmTime(J)J+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;
+HSPLcom/android/server/job/controllers/TimeController;->maybeAdjustAlarmTime(J)J+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;
 HSPLcom/android/server/job/controllers/TimeController;->maybeStartTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;)V+]Ljava/time/Clock;Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;,Lcom/android/server/job/JobSchedulerService;,Lcom/android/server/job/JobSchedulerService$2;]Lcom/android/server/job/controllers/StateController;Lcom/android/server/job/controllers/TimeController;,Landroid/util/ArraySet;]Lcom/android/server/job/controllers/TimeController;Lcom/android/server/job/controllers/TimeController;]Ljava/util/ListIterator;Ljava/util/LinkedList$ListItr;]Ljava/util/List;Ljava/util/LinkedList;,Landroid/util/ArraySet;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;,Lcom/android/server/job/controllers/JobStatus;
 HSPLcom/android/server/job/controllers/TimeController;->maybeStopTrackingJobLocked(Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;Z)V+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/controllers/TimeController;Lcom/android/server/job/controllers/TimeController;]Ljava/util/List;Ljava/util/LinkedList;
 PLcom/android/server/job/controllers/TimeController;->maybeUpdateDelayAlarmLocked(JLandroid/os/WorkSource;)V
 HPLcom/android/server/job/controllers/TimeController;->reevaluateStateLocked(I)V+]Lcom/android/server/job/controllers/TimeController;Lcom/android/server/job/controllers/TimeController;
-HPLcom/android/server/job/controllers/TimeController;->setDeadlineExpiredAlarmLocked(JLandroid/os/WorkSource;)V+]Lcom/android/server/job/controllers/TimeController;Lcom/android/server/job/controllers/JobStatus;
-HPLcom/android/server/job/controllers/TimeController;->setDelayExpiredAlarmLocked(JLandroid/os/WorkSource;)V+]Lcom/android/server/job/controllers/TimeController;Lcom/android/server/job/controllers/TimeController;
-HPLcom/android/server/job/controllers/TimeController;->updateAlarmWithListenerLocked(Ljava/lang/String;ILandroid/app/AlarmManager$OnAlarmListener;JLandroid/os/WorkSource;)V
+HSPLcom/android/server/job/controllers/TimeController;->setDeadlineExpiredAlarmLocked(JLandroid/os/WorkSource;)V+]Lcom/android/server/job/controllers/TimeController;Lcom/android/server/job/controllers/JobStatus;
+HSPLcom/android/server/job/controllers/TimeController;->setDelayExpiredAlarmLocked(JLandroid/os/WorkSource;)V+]Lcom/android/server/job/controllers/TimeController;Lcom/android/server/job/controllers/TimeController;
+HSPLcom/android/server/job/controllers/TimeController;->updateAlarmWithListenerLocked(Ljava/lang/String;ILandroid/app/AlarmManager$OnAlarmListener;JLandroid/os/WorkSource;)V+]Lcom/android/server/job/controllers/TimeController;Lcom/android/server/job/controllers/TimeController;]Landroid/app/AlarmManager;Landroid/app/AlarmManager;
 HPLcom/android/server/job/controllers/idle/CarIdlenessTracker;-><clinit>()V
 HPLcom/android/server/job/controllers/idle/CarIdlenessTracker;-><init>()V
 PLcom/android/server/job/controllers/idle/CarIdlenessTracker;->handleScreenOn()V
@@ -25983,12 +27078,12 @@
 PLcom/android/server/job/restrictions/JobRestriction;->getInternalReason()I
 PLcom/android/server/job/restrictions/JobRestriction;->getReason()I
 HSPLcom/android/server/job/restrictions/ThermalStatusRestriction$1;-><init>(Lcom/android/server/job/restrictions/ThermalStatusRestriction;)V
-PLcom/android/server/job/restrictions/ThermalStatusRestriction$1;->onThermalStatusChanged(I)V
-PLcom/android/server/job/restrictions/ThermalStatusRestriction;->-$$Nest$fgetmThermalStatus(Lcom/android/server/job/restrictions/ThermalStatusRestriction;)I
-PLcom/android/server/job/restrictions/ThermalStatusRestriction;->-$$Nest$fputmThermalStatus(Lcom/android/server/job/restrictions/ThermalStatusRestriction;I)V
+HSPLcom/android/server/job/restrictions/ThermalStatusRestriction$1;->onThermalStatusChanged(I)V
+HSPLcom/android/server/job/restrictions/ThermalStatusRestriction;->-$$Nest$fgetmThermalStatus(Lcom/android/server/job/restrictions/ThermalStatusRestriction;)I
+HSPLcom/android/server/job/restrictions/ThermalStatusRestriction;->-$$Nest$fputmThermalStatus(Lcom/android/server/job/restrictions/ThermalStatusRestriction;I)V
 HSPLcom/android/server/job/restrictions/ThermalStatusRestriction;-><init>(Lcom/android/server/job/JobSchedulerService;)V
 PLcom/android/server/job/restrictions/ThermalStatusRestriction;->dumpConstants(Landroid/util/IndentingPrintWriter;)V
-HPLcom/android/server/job/restrictions/ThermalStatusRestriction;->isJobRestricted(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
+HSPLcom/android/server/job/restrictions/ThermalStatusRestriction;->isJobRestricted(Lcom/android/server/job/controllers/JobStatus;)Z+]Lcom/android/server/job/controllers/JobStatus;Lcom/android/server/job/controllers/JobStatus;]Lcom/android/server/job/JobSchedulerService;Lcom/android/server/job/JobSchedulerService;
 HSPLcom/android/server/job/restrictions/ThermalStatusRestriction;->onSystemServicesReady()V
 HSPLcom/android/server/lights/LightsManager;-><init>()V
 PLcom/android/server/lights/LightsManager;->getLight(I)Lcom/android/server/lights/LogicalLight;
@@ -26008,7 +27103,7 @@
 HSPLcom/android/server/lights/LightsService$LightImpl;->setLightLocked(IIIII)V+]Lcom/android/server/lights/LightsService$LightImpl;Lcom/android/server/lights/LightsService$LightImpl;
 HSPLcom/android/server/lights/LightsService$LightImpl;->setLightUnchecked(IIIII)V
 HSPLcom/android/server/lights/LightsService$LightImpl;->shouldBeInLowPersistenceMode()Z
-HSPLcom/android/server/lights/LightsService$LightImpl;->turnOff()V
+HSPLcom/android/server/lights/LightsService$LightImpl;->turnOff()V+]Lcom/android/server/lights/LightsService$LightImpl;Lcom/android/server/lights/LightsService$LightImpl;
 PLcom/android/server/lights/LightsService$LightsManagerBinderService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/lights/LightsService$LightsManagerBinderService;Landroid/os/IBinder;)V
 PLcom/android/server/lights/LightsService$LightsManagerBinderService$$ExternalSyntheticLambda0;->binderDied()V
 HPLcom/android/server/lights/LightsService$LightsManagerBinderService$Session;-><init>(Lcom/android/server/lights/LightsService$LightsManagerBinderService;Landroid/os/IBinder;I)V
@@ -26098,6 +27193,8 @@
 HPLcom/android/server/locales/LocaleManagerService;->getApplicationLocalesUnchecked(Ljava/lang/String;I)Landroid/os/LocaleList;
 HPLcom/android/server/locales/LocaleManagerService;->getInstallingPackageName(Ljava/lang/String;)Ljava/lang/String;
 HPLcom/android/server/locales/LocaleManagerService;->getPackageUid(Ljava/lang/String;I)I
+PLcom/android/server/locales/LocaleManagerService;->getSystemLocales()Landroid/os/LocaleList;
+PLcom/android/server/locales/LocaleManagerService;->getSystemLocalesUnchecked()Landroid/os/LocaleList;
 HPLcom/android/server/locales/LocaleManagerService;->isCallerInstaller(Ljava/lang/String;I)Z
 PLcom/android/server/locales/LocaleManagerService;->isPackageOwnedByCaller(Ljava/lang/String;I)Z
 HPLcom/android/server/locales/LocaleManagerService;->isPackageOwnedByCaller(Ljava/lang/String;ILcom/android/server/locales/AppLocaleChangedAtomRecord;)Z
@@ -26139,14 +27236,14 @@
 HSPLcom/android/server/location/GeocoderProxy;->register()Z
 HSPLcom/android/server/location/HardwareActivityRecognitionProxy;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/location/HardwareActivityRecognitionProxy;->createAndRegister(Landroid/content/Context;)Lcom/android/server/location/HardwareActivityRecognitionProxy;
-PLcom/android/server/location/HardwareActivityRecognitionProxy;->onBind(Landroid/os/IBinder;Lcom/android/server/servicewatcher/CurrentUserServiceSupplier$BoundServiceInfo;)V
+HPLcom/android/server/location/HardwareActivityRecognitionProxy;->onBind(Landroid/os/IBinder;Lcom/android/server/servicewatcher/CurrentUserServiceSupplier$BoundServiceInfo;)V
 PLcom/android/server/location/HardwareActivityRecognitionProxy;->onBind(Landroid/os/IBinder;Lcom/android/server/servicewatcher/ServiceWatcher$BoundServiceInfo;)V
 PLcom/android/server/location/HardwareActivityRecognitionProxy;->onUnbind()V
 HSPLcom/android/server/location/HardwareActivityRecognitionProxy;->register()Z
 HSPLcom/android/server/location/LocationManagerService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/location/LocationManagerService;)V
 PLcom/android/server/location/LocationManagerService$$ExternalSyntheticLambda0;->onLocationUserSettingsChanged(ILcom/android/server/location/settings/LocationUserSettings;Lcom/android/server/location/settings/LocationUserSettings;)V
-PLcom/android/server/location/LocationManagerService$$ExternalSyntheticLambda10;-><init>(Landroid/location/LocationManagerInternal$LocationPackageTagsListener;ILandroid/os/PackageTagsList;)V
-PLcom/android/server/location/LocationManagerService$$ExternalSyntheticLambda10;->run()V
+HPLcom/android/server/location/LocationManagerService$$ExternalSyntheticLambda10;-><init>(Landroid/location/LocationManagerInternal$LocationPackageTagsListener;ILandroid/os/PackageTagsList;)V
+HPLcom/android/server/location/LocationManagerService$$ExternalSyntheticLambda10;->run()V
 HSPLcom/android/server/location/LocationManagerService$$ExternalSyntheticLambda11;-><init>(Landroid/location/LocationManagerInternal$LocationPackageTagsListener;ILandroid/os/PackageTagsList;)V
 HSPLcom/android/server/location/LocationManagerService$$ExternalSyntheticLambda11;->run()V
 HSPLcom/android/server/location/LocationManagerService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/location/LocationManagerService;)V
@@ -26157,9 +27254,9 @@
 HSPLcom/android/server/location/LocationManagerService$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/location/LocationManagerService;)V
 HSPLcom/android/server/location/LocationManagerService$$ExternalSyntheticLambda4;->onUserChanged(II)V
 HSPLcom/android/server/location/LocationManagerService$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/location/LocationManagerService;)V
-PLcom/android/server/location/LocationManagerService$$ExternalSyntheticLambda5;->getPackages(I)[Ljava/lang/String;
+HSPLcom/android/server/location/LocationManagerService$$ExternalSyntheticLambda5;->getPackages(I)[Ljava/lang/String;
 HSPLcom/android/server/location/LocationManagerService$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/location/LocationManagerService;)V
-PLcom/android/server/location/LocationManagerService$$ExternalSyntheticLambda6;->getPackages(I)[Ljava/lang/String;
+HSPLcom/android/server/location/LocationManagerService$$ExternalSyntheticLambda6;->getPackages(I)[Ljava/lang/String;
 PLcom/android/server/location/LocationManagerService$$ExternalSyntheticLambda7;-><init>(Landroid/util/IndentingPrintWriter;)V
 PLcom/android/server/location/LocationManagerService$$ExternalSyntheticLambda7;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/location/LocationManagerService$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/location/LocationManagerService;)V
@@ -26208,8 +27305,8 @@
 HSPLcom/android/server/location/LocationManagerService;->$r8$lambda$NSGuCPNs32ra4453vtqmlOg9oj4(Lcom/android/server/location/LocationManagerService;IILjava/lang/String;Ljava/lang/String;II)V
 PLcom/android/server/location/LocationManagerService;->$r8$lambda$PIuAa-zVImuKZKfQguLvDH50pOk(Landroid/location/LocationManagerInternal$LocationPackageTagsListener;ILandroid/os/PackageTagsList;)V
 PLcom/android/server/location/LocationManagerService;->$r8$lambda$V6unPX16MnoOO5jEh4vFTawmmMc(Lcom/android/server/location/LocationManagerService;)V
-HPLcom/android/server/location/LocationManagerService;->$r8$lambda$bOKsWjBhuDyLYN2qH9FYZQl7750(Lcom/android/server/location/LocationManagerService;I)[Ljava/lang/String;
-PLcom/android/server/location/LocationManagerService;->$r8$lambda$iRExiEymUCHTVSw9jZH8KjzWkDw(Lcom/android/server/location/LocationManagerService;I)[Ljava/lang/String;
+HSPLcom/android/server/location/LocationManagerService;->$r8$lambda$bOKsWjBhuDyLYN2qH9FYZQl7750(Lcom/android/server/location/LocationManagerService;I)[Ljava/lang/String;
+HSPLcom/android/server/location/LocationManagerService;->$r8$lambda$iRExiEymUCHTVSw9jZH8KjzWkDw(Lcom/android/server/location/LocationManagerService;I)[Ljava/lang/String;
 PLcom/android/server/location/LocationManagerService;->$r8$lambda$lZtN6Akm3CzfpvDs19y2i1I12GQ(ZLcom/android/server/location/settings/LocationUserSettings;)Lcom/android/server/location/settings/LocationUserSettings;
 HSPLcom/android/server/location/LocationManagerService;->$r8$lambda$sqihEcdWXRp1veMdnIFMYE1R6qA(Lcom/android/server/location/LocationManagerService;II)V
 PLcom/android/server/location/LocationManagerService;->$r8$lambda$uF7b_mBXNU5SEZNMxWv7H1zebvg(Lcom/android/server/location/LocationManagerService;ILcom/android/server/location/settings/LocationUserSettings;Lcom/android/server/location/settings/LocationUserSettings;)V
@@ -26228,7 +27325,7 @@
 PLcom/android/server/location/LocationManagerService;->geocoderIsPresent()Z
 HSPLcom/android/server/location/LocationManagerService;->getAllProviders()Ljava/util/List;+]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/location/provider/LocationProviderManager;Lcom/android/server/location/provider/PassiveLocationProviderManager;,Lcom/android/server/location/provider/LocationProviderManager;]Ljava/util/Iterator;Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;
 PLcom/android/server/location/LocationManagerService;->getBackgroundThrottlingWhitelist()[Ljava/lang/String;
-PLcom/android/server/location/LocationManagerService;->getBestProvider(Landroid/location/Criteria;Z)Ljava/lang/String;
+HPLcom/android/server/location/LocationManagerService;->getBestProvider(Landroid/location/Criteria;Z)Ljava/lang/String;+]Lcom/android/server/location/LocationManagerService;Lcom/android/server/location/LocationManagerService;]Ljava/util/List;Ljava/util/ArrayList;
 PLcom/android/server/location/LocationManagerService;->getCurrentLocation(Ljava/lang/String;Landroid/location/LocationRequest;Landroid/location/ILocationCallback;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/os/ICancellationSignal;
 PLcom/android/server/location/LocationManagerService;->getExtraLocationControllerPackage()Ljava/lang/String;
 HPLcom/android/server/location/LocationManagerService;->getFromLocation(DDILandroid/location/GeocoderParams;Landroid/location/IGeocodeListener;)V
@@ -26244,7 +27341,7 @@
 PLcom/android/server/location/LocationManagerService;->getOrAddLocationProviderManager(Ljava/lang/String;)Lcom/android/server/location/provider/LocationProviderManager;
 PLcom/android/server/location/LocationManagerService;->getProviderPackages(Ljava/lang/String;)Ljava/util/List;
 HPLcom/android/server/location/LocationManagerService;->getProviderProperties(Ljava/lang/String;)Landroid/location/provider/ProviderProperties;
-HPLcom/android/server/location/LocationManagerService;->getProviders(Landroid/location/Criteria;Z)Ljava/util/List;
+HPLcom/android/server/location/LocationManagerService;->getProviders(Landroid/location/Criteria;Z)Ljava/util/List;+]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;]Lcom/android/server/location/provider/LocationProviderManager;Lcom/android/server/location/provider/PassiveLocationProviderManager;,Lcom/android/server/location/provider/LocationProviderManager;
 PLcom/android/server/location/LocationManagerService;->hasProvider(Ljava/lang/String;)Z
 HPLcom/android/server/location/LocationManagerService;->injectGnssMeasurementCorrections(Landroid/location/GnssMeasurementCorrections;)V
 HPLcom/android/server/location/LocationManagerService;->injectLocation(Landroid/location/Location;)V
@@ -26255,11 +27352,11 @@
 PLcom/android/server/location/LocationManagerService;->lambda$new$0()V
 PLcom/android/server/location/LocationManagerService;->lambda$new$1()V
 HSPLcom/android/server/location/LocationManagerService;->lambda$new$2(II)V
-PLcom/android/server/location/LocationManagerService;->lambda$new$3(I)[Ljava/lang/String;
-PLcom/android/server/location/LocationManagerService;->lambda$new$4(I)[Ljava/lang/String;
+HSPLcom/android/server/location/LocationManagerService;->lambda$new$3(I)[Ljava/lang/String;
+HSPLcom/android/server/location/LocationManagerService;->lambda$new$4(I)[Ljava/lang/String;
 HPLcom/android/server/location/LocationManagerService;->lambda$onStateChanged$7(Landroid/location/LocationManagerInternal$LocationPackageTagsListener;ILandroid/os/PackageTagsList;)V
 HSPLcom/android/server/location/LocationManagerService;->lambda$onStateChanged$8(Landroid/location/LocationManagerInternal$LocationPackageTagsListener;ILandroid/os/PackageTagsList;)V
-HSPLcom/android/server/location/LocationManagerService;->lambda$onSystemReady$5(IILjava/lang/String;Ljava/lang/String;II)V+]Lcom/android/server/location/LocationManagerService;Lcom/android/server/location/LocationManagerService;
+HSPLcom/android/server/location/LocationManagerService;->lambda$onSystemReady$5(IILjava/lang/String;Ljava/lang/String;II)V+]Lcom/android/server/location/LocationManagerService;Lcom/android/server/location/LocationManagerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 PLcom/android/server/location/LocationManagerService;->onLocationModeChanged(I)V
 PLcom/android/server/location/LocationManagerService;->onLocationUserSettingsChanged(ILcom/android/server/location/settings/LocationUserSettings;Lcom/android/server/location/settings/LocationUserSettings;)V
 HSPLcom/android/server/location/LocationManagerService;->onStateChanged(Ljava/lang/String;Lcom/android/server/location/provider/AbstractLocationProvider$State;Lcom/android/server/location/provider/AbstractLocationProvider$State;)V
@@ -26316,6 +27413,9 @@
 HSPLcom/android/server/location/contexthub/ConcurrentLinkedEvictingDeque;->add(Ljava/lang/Object;)Z+]Ljava/util/concurrent/ConcurrentLinkedDeque;Lcom/android/server/location/contexthub/ConcurrentLinkedEvictingDeque;
 PLcom/android/server/location/contexthub/ContextHubClientBroker$$ExternalSyntheticLambda0;-><init>(JI)V
 PLcom/android/server/location/contexthub/ContextHubClientBroker$$ExternalSyntheticLambda0;->accept(Landroid/hardware/location/IContextHubClientCallback;)V
+PLcom/android/server/location/contexthub/ContextHubClientBroker$$ExternalSyntheticLambda10;-><init>(J)V
+PLcom/android/server/location/contexthub/ContextHubClientBroker$$ExternalSyntheticLambda10;->accept(Landroid/hardware/location/IContextHubClientCallback;)V
+PLcom/android/server/location/contexthub/ContextHubClientBroker$$ExternalSyntheticLambda11;-><init>(Lcom/android/server/location/contexthub/ContextHubClientBroker;J)V
 PLcom/android/server/location/contexthub/ContextHubClientBroker$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/location/contexthub/ContextHubClientBroker;JI)V
 HPLcom/android/server/location/contexthub/ContextHubClientBroker$$ExternalSyntheticLambda1;->get()Ljava/lang/Object;
 HSPLcom/android/server/location/contexthub/ContextHubClientBroker$$ExternalSyntheticLambda2;-><init>(Landroid/hardware/location/NanoAppMessage;)V
@@ -26326,8 +27426,11 @@
 PLcom/android/server/location/contexthub/ContextHubClientBroker$$ExternalSyntheticLambda6;->accept(Landroid/hardware/location/IContextHubClientCallback;)V
 PLcom/android/server/location/contexthub/ContextHubClientBroker$$ExternalSyntheticLambda7;-><init>(Lcom/android/server/location/contexthub/ContextHubClientBroker;)V
 PLcom/android/server/location/contexthub/ContextHubClientBroker$$ExternalSyntheticLambda7;->get()Ljava/lang/Object;
+PLcom/android/server/location/contexthub/ContextHubClientBroker$$ExternalSyntheticLambda8;-><init>(J)V
+PLcom/android/server/location/contexthub/ContextHubClientBroker$$ExternalSyntheticLambda8;->accept(Landroid/hardware/location/IContextHubClientCallback;)V
+PLcom/android/server/location/contexthub/ContextHubClientBroker$$ExternalSyntheticLambda9;-><init>(Lcom/android/server/location/contexthub/ContextHubClientBroker;J)V
 HSPLcom/android/server/location/contexthub/ContextHubClientBroker$1;-><init>(Lcom/android/server/location/contexthub/ContextHubClientBroker;)V
-HPLcom/android/server/location/contexthub/ContextHubClientBroker$1;->onQueryResponse(ILjava/util/List;)V
+HPLcom/android/server/location/contexthub/ContextHubClientBroker$1;->onQueryResponse(ILjava/util/List;)V+]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Map;Ljava/util/concurrent/ConcurrentHashMap;]Landroid/hardware/location/NanoAppState;Landroid/hardware/location/NanoAppState;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLcom/android/server/location/contexthub/ContextHubClientBroker$PendingIntentRequest;-><init>(Lcom/android/server/location/contexthub/ContextHubClientBroker;)V
 PLcom/android/server/location/contexthub/ContextHubClientBroker$PendingIntentRequest;-><init>(Lcom/android/server/location/contexthub/ContextHubClientBroker;Landroid/app/PendingIntent;J)V
 PLcom/android/server/location/contexthub/ContextHubClientBroker$PendingIntentRequest;->clear()V
@@ -26335,6 +27438,7 @@
 PLcom/android/server/location/contexthub/ContextHubClientBroker$PendingIntentRequest;->getPendingIntent()Landroid/app/PendingIntent;
 HSPLcom/android/server/location/contexthub/ContextHubClientBroker$PendingIntentRequest;->hasPendingIntent()Z
 HSPLcom/android/server/location/contexthub/ContextHubClientBroker$PendingIntentRequest;->isValid()Z
+PLcom/android/server/location/contexthub/ContextHubClientBroker;->$r8$lambda$9aGPRNxyTb26EE4WE2c97GbHAs8(JLandroid/hardware/location/IContextHubClientCallback;)V
 HSPLcom/android/server/location/contexthub/ContextHubClientBroker;->$r8$lambda$FNcI6dKEOYt3Xb9PdRUAFHJumJ4(Landroid/hardware/location/NanoAppMessage;Landroid/hardware/location/IContextHubClientCallback;)V
 PLcom/android/server/location/contexthub/ContextHubClientBroker;->$r8$lambda$FPBJFUV94inHCeD6arCFE59kGZI(Lcom/android/server/location/contexthub/ContextHubClientBroker;)Landroid/content/Intent;
 PLcom/android/server/location/contexthub/ContextHubClientBroker;->$r8$lambda$MnC-8Dp9firsG1GJ9V8qMAkKp4E(Lcom/android/server/location/contexthub/ContextHubClientBroker;JI)Landroid/content/Intent;
@@ -26342,6 +27446,7 @@
 PLcom/android/server/location/contexthub/ContextHubClientBroker;->$r8$lambda$VcAOcutitu0YlkfYSca6nHdORF4(JILandroid/hardware/location/IContextHubClientCallback;)V
 PLcom/android/server/location/contexthub/ContextHubClientBroker;->$r8$lambda$ZWYK3ns76mWEIF5ej6wDXTLKBt4(Lcom/android/server/location/contexthub/ContextHubClientBroker;JLandroid/hardware/location/NanoAppMessage;)Landroid/content/Intent;
 PLcom/android/server/location/contexthub/ContextHubClientBroker;->$r8$lambda$boz-lRdDa6bjqKz7uTu-5VyXEcw(Lcom/android/server/location/contexthub/ContextHubClientBroker;J)Landroid/content/Intent;
+PLcom/android/server/location/contexthub/ContextHubClientBroker;->$r8$lambda$j7w8az-wCHvGeP2PWwF_8zoI1Ao(JLandroid/hardware/location/IContextHubClientCallback;)V
 PLcom/android/server/location/contexthub/ContextHubClientBroker;->$r8$lambda$kU4n_bH_eoKIdcferyJMeBvMmxo(Landroid/hardware/location/IContextHubClientCallback;)V
 PLcom/android/server/location/contexthub/ContextHubClientBroker;->-$$Nest$fgetmIsPermQueryIssued(Lcom/android/server/location/contexthub/ContextHubClientBroker;)Ljava/util/concurrent/atomic/AtomicBoolean;
 HPLcom/android/server/location/contexthub/ContextHubClientBroker;->-$$Nest$fgetmMessageChannelNanoappIdMap(Lcom/android/server/location/contexthub/ContextHubClientBroker;)Ljava/util/Map;
@@ -26351,23 +27456,23 @@
 HSPLcom/android/server/location/contexthub/ContextHubClientBroker;-><init>(Landroid/content/Context;Lcom/android/server/location/contexthub/IContextHubWrapper;Lcom/android/server/location/contexthub/ContextHubClientManager;Landroid/hardware/location/ContextHubInfo;SLandroid/hardware/location/IContextHubClientCallback;Ljava/lang/String;Lcom/android/server/location/contexthub/ContextHubTransactionManager;Ljava/lang/String;)V
 HSPLcom/android/server/location/contexthub/ContextHubClientBroker;->attachDeathRecipient()V
 PLcom/android/server/location/contexthub/ContextHubClientBroker;->authStateToString(I)Ljava/lang/String;
-PLcom/android/server/location/contexthub/ContextHubClientBroker;->binderDied()V
+HPLcom/android/server/location/contexthub/ContextHubClientBroker;->binderDied()V
 HPLcom/android/server/location/contexthub/ContextHubClientBroker;->checkNanoappPermsAsync()V
 PLcom/android/server/location/contexthub/ContextHubClientBroker;->close()V
-PLcom/android/server/location/contexthub/ContextHubClientBroker;->createIntent(I)Landroid/content/Intent;
+HPLcom/android/server/location/contexthub/ContextHubClientBroker;->createIntent(I)Landroid/content/Intent;
 PLcom/android/server/location/contexthub/ContextHubClientBroker;->createIntent(IJ)Landroid/content/Intent;
 PLcom/android/server/location/contexthub/ContextHubClientBroker;->doSendPendingIntent(Landroid/app/PendingIntent;Landroid/content/Intent;)V
 PLcom/android/server/location/contexthub/ContextHubClientBroker;->dump(Landroid/util/proto/ProtoOutputStream;)V
 HSPLcom/android/server/location/contexthub/ContextHubClientBroker;->getAttachedContextHubId()I
-PLcom/android/server/location/contexthub/ContextHubClientBroker;->getAttributionTag()Ljava/lang/String;
+HPLcom/android/server/location/contexthub/ContextHubClientBroker;->getAttributionTag()Ljava/lang/String;
 HSPLcom/android/server/location/contexthub/ContextHubClientBroker;->getHostEndPointId()S
-PLcom/android/server/location/contexthub/ContextHubClientBroker;->getId()I
+HPLcom/android/server/location/contexthub/ContextHubClientBroker;->getId()I
 PLcom/android/server/location/contexthub/ContextHubClientBroker;->getPackageName()Ljava/lang/String;
 PLcom/android/server/location/contexthub/ContextHubClientBroker;->handleAuthStateTimerExpiry(J)V
 PLcom/android/server/location/contexthub/ContextHubClientBroker;->hasPendingIntent(Landroid/app/PendingIntent;J)Z
-HSPLcom/android/server/location/contexthub/ContextHubClientBroker;->hasPermissions(Ljava/util/List;)Z+]Ljava/util/List;Ljava/util/ArrayList;,Ljava/util/Collections$UnmodifiableRandomAccessList;,Ljava/util/Collections$EmptyList;]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;,Ljava/util/Collections$UnmodifiableCollection$1;,Ljava/util/Collections$EmptyIterator;
+HSPLcom/android/server/location/contexthub/ContextHubClientBroker;->hasPermissions(Ljava/util/List;)Z+]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;,Ljava/util/ArrayList;,Ljava/util/Collections$EmptyList;]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;,Ljava/util/Collections$UnmodifiableCollection$1;,Ljava/util/Collections$EmptyIterator;
 HSPLcom/android/server/location/contexthub/ContextHubClientBroker;->invokeCallback(Lcom/android/server/location/contexthub/ContextHubClientBroker$CallbackConsumer;)V+]Lcom/android/server/location/contexthub/ContextHubClientBroker$CallbackConsumer;Lcom/android/server/location/contexthub/ContextHubClientBroker$$ExternalSyntheticLambda2;
-PLcom/android/server/location/contexthub/ContextHubClientBroker;->isPendingIntentCancelled()Z
+HPLcom/android/server/location/contexthub/ContextHubClientBroker;->isPendingIntentCancelled()Z
 HPLcom/android/server/location/contexthub/ContextHubClientBroker;->isRegistered()Z
 PLcom/android/server/location/contexthub/ContextHubClientBroker;->lambda$onHubReset$6(Landroid/hardware/location/IContextHubClientCallback;)V
 PLcom/android/server/location/contexthub/ContextHubClientBroker;->lambda$onHubReset$7()Landroid/content/Intent;
@@ -26382,6 +27487,8 @@
 HSPLcom/android/server/location/contexthub/ContextHubClientBroker;->notePermissions(Ljava/util/List;Ljava/lang/String;)Z+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
 HPLcom/android/server/location/contexthub/ContextHubClientBroker;->onClientExit()V
 HPLcom/android/server/location/contexthub/ContextHubClientBroker;->onHubReset()V
+PLcom/android/server/location/contexthub/ContextHubClientBroker;->onNanoAppLoaded(J)V
+PLcom/android/server/location/contexthub/ContextHubClientBroker;->onNanoAppUnloaded(J)V
 PLcom/android/server/location/contexthub/ContextHubClientBroker;->onOpChanged(Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/location/contexthub/ContextHubClientBroker;->sendAuthStateCallback(JI)V
 HSPLcom/android/server/location/contexthub/ContextHubClientBroker;->sendHostEndpointConnectedEvent()V
@@ -26401,25 +27508,33 @@
 HSPLcom/android/server/location/contexthub/ContextHubClientManager$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;)V
 PLcom/android/server/location/contexthub/ContextHubClientManager$$ExternalSyntheticLambda3;-><init>(J)V
 HPLcom/android/server/location/contexthub/ContextHubClientManager$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;)V
+PLcom/android/server/location/contexthub/ContextHubClientManager$$ExternalSyntheticLambda4;-><init>(J)V
+PLcom/android/server/location/contexthub/ContextHubClientManager$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/location/contexthub/ContextHubClientManager$RegistrationRecord;-><init>(Lcom/android/server/location/contexthub/ContextHubClientManager;Ljava/lang/String;I)V
 PLcom/android/server/location/contexthub/ContextHubClientManager$RegistrationRecord;->dump(Landroid/util/proto/ProtoOutputStream;)V
 PLcom/android/server/location/contexthub/ContextHubClientManager$RegistrationRecord;->toString()Ljava/lang/String;
+PLcom/android/server/location/contexthub/ContextHubClientManager;->$r8$lambda$95Z1gwrE7JZTBLv2tvESnEnZU_w(JLcom/android/server/location/contexthub/ContextHubClientBroker;)V
 HSPLcom/android/server/location/contexthub/ContextHubClientManager;->$r8$lambda$E0BbgtkFt0Sxfe0O53xwcWpIj8c(Landroid/hardware/location/NanoAppMessage;Ljava/util/List;Ljava/util/List;Lcom/android/server/location/contexthub/ContextHubClientBroker;)V
 PLcom/android/server/location/contexthub/ContextHubClientManager;->$r8$lambda$N91_Tx4Qo_ZeXlvlSTSsReOnLQ0(Lcom/android/server/location/contexthub/ContextHubClientBroker;)V
+PLcom/android/server/location/contexthub/ContextHubClientManager;->$r8$lambda$VbjDpOWRQucgwSRJcAwO8qR5pJc(JLcom/android/server/location/contexthub/ContextHubClientBroker;)V
 PLcom/android/server/location/contexthub/ContextHubClientManager;->-$$Nest$sfgetDATE_FORMAT()Ljava/text/DateFormat;
 HSPLcom/android/server/location/contexthub/ContextHubClientManager;-><clinit>()V
 HSPLcom/android/server/location/contexthub/ContextHubClientManager;-><init>(Landroid/content/Context;Lcom/android/server/location/contexthub/IContextHubWrapper;)V
 HSPLcom/android/server/location/contexthub/ContextHubClientManager;->broadcastMessage(ILandroid/hardware/location/NanoAppMessage;Ljava/util/List;Ljava/util/List;)V
 PLcom/android/server/location/contexthub/ContextHubClientManager;->dump(Landroid/util/proto/ProtoOutputStream;)V
 HSPLcom/android/server/location/contexthub/ContextHubClientManager;->forEachClientOfHub(ILjava/util/function/Consumer;)V
-PLcom/android/server/location/contexthub/ContextHubClientManager;->getClientBroker(ILandroid/app/PendingIntent;J)Lcom/android/server/location/contexthub/ContextHubClientBroker;
+HPLcom/android/server/location/contexthub/ContextHubClientManager;->getClientBroker(ILandroid/app/PendingIntent;J)Lcom/android/server/location/contexthub/ContextHubClientBroker;
 HSPLcom/android/server/location/contexthub/ContextHubClientManager;->getHostEndPointId()S
 HSPLcom/android/server/location/contexthub/ContextHubClientManager;->lambda$broadcastMessage$4(Landroid/hardware/location/NanoAppMessage;Ljava/util/List;Ljava/util/List;Lcom/android/server/location/contexthub/ContextHubClientBroker;)V
 PLcom/android/server/location/contexthub/ContextHubClientManager;->lambda$onHubReset$2(Lcom/android/server/location/contexthub/ContextHubClientBroker;)V
 PLcom/android/server/location/contexthub/ContextHubClientManager;->lambda$onNanoAppAborted$3(JILcom/android/server/location/contexthub/ContextHubClientBroker;)V
+PLcom/android/server/location/contexthub/ContextHubClientManager;->lambda$onNanoAppLoaded$0(JLcom/android/server/location/contexthub/ContextHubClientBroker;)V
+PLcom/android/server/location/contexthub/ContextHubClientManager;->lambda$onNanoAppUnloaded$1(JLcom/android/server/location/contexthub/ContextHubClientBroker;)V
 PLcom/android/server/location/contexthub/ContextHubClientManager;->onHubReset(I)V
 HSPLcom/android/server/location/contexthub/ContextHubClientManager;->onMessageFromNanoApp(ISLandroid/hardware/location/NanoAppMessage;Ljava/util/List;Ljava/util/List;)V+]Lcom/android/server/location/contexthub/ContextHubClientBroker;Lcom/android/server/location/contexthub/ContextHubClientBroker;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/hardware/location/NanoAppMessage;Landroid/hardware/location/NanoAppMessage;]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/location/contexthub/ContextHubClientManager;Lcom/android/server/location/contexthub/ContextHubClientManager;
 PLcom/android/server/location/contexthub/ContextHubClientManager;->onNanoAppAborted(IJI)V
+PLcom/android/server/location/contexthub/ContextHubClientManager;->onNanoAppLoaded(IJ)V
+PLcom/android/server/location/contexthub/ContextHubClientManager;->onNanoAppUnloaded(IJ)V
 HPLcom/android/server/location/contexthub/ContextHubClientManager;->registerClient(Landroid/hardware/location/ContextHubInfo;Landroid/app/PendingIntent;JLjava/lang/String;Lcom/android/server/location/contexthub/ContextHubTransactionManager;)Landroid/hardware/location/IContextHubClient;
 HSPLcom/android/server/location/contexthub/ContextHubClientManager;->registerClient(Landroid/hardware/location/ContextHubInfo;Landroid/hardware/location/IContextHubClientCallback;Ljava/lang/String;Lcom/android/server/location/contexthub/ContextHubTransactionManager;Ljava/lang/String;)Landroid/hardware/location/IContextHubClient;
 PLcom/android/server/location/contexthub/ContextHubClientManager;->toString()Ljava/lang/String;
@@ -26429,7 +27544,7 @@
 PLcom/android/server/location/contexthub/ContextHubService$$ExternalSyntheticLambda1;-><init>(Ljava/io/PrintWriter;)V
 PLcom/android/server/location/contexthub/ContextHubService$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/location/contexthub/ContextHubService$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/location/contexthub/ContextHubService;)V
-PLcom/android/server/location/contexthub/ContextHubService$$ExternalSyntheticLambda2;->onSensorPrivacyChanged(IZ)V
+HSPLcom/android/server/location/contexthub/ContextHubService$$ExternalSyntheticLambda2;->onSensorPrivacyChanged(IZ)V
 PLcom/android/server/location/contexthub/ContextHubService$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;)V
 PLcom/android/server/location/contexthub/ContextHubService$$ExternalSyntheticLambda4;-><init>(Landroid/util/proto/ProtoOutputStream;)V
 PLcom/android/server/location/contexthub/ContextHubService$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;)V
@@ -26438,13 +27553,13 @@
 HSPLcom/android/server/location/contexthub/ContextHubService$1;-><init>(Lcom/android/server/location/contexthub/ContextHubService;Landroid/os/Handler;)V
 PLcom/android/server/location/contexthub/ContextHubService$1;->onChange(Z)V
 HSPLcom/android/server/location/contexthub/ContextHubService$2;-><init>(Lcom/android/server/location/contexthub/ContextHubService;)V
-PLcom/android/server/location/contexthub/ContextHubService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/location/contexthub/ContextHubService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/location/contexthub/ContextHubService$3;-><init>(Lcom/android/server/location/contexthub/ContextHubService;Landroid/os/Handler;)V
 PLcom/android/server/location/contexthub/ContextHubService$3;->onChange(Z)V
 HSPLcom/android/server/location/contexthub/ContextHubService$4;-><init>(Lcom/android/server/location/contexthub/ContextHubService;Landroid/os/Handler;)V
 PLcom/android/server/location/contexthub/ContextHubService$4;->onChange(Z)V
 HSPLcom/android/server/location/contexthub/ContextHubService$5;-><init>(Lcom/android/server/location/contexthub/ContextHubService;)V
-PLcom/android/server/location/contexthub/ContextHubService$5;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/location/contexthub/ContextHubService$5;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/location/contexthub/ContextHubService$6;-><init>(Lcom/android/server/location/contexthub/ContextHubService;I)V
 PLcom/android/server/location/contexthub/ContextHubService$6;->onClientAuthorizationChanged(JI)V
 PLcom/android/server/location/contexthub/ContextHubService$6;->onHubReset()V
@@ -26463,7 +27578,7 @@
 PLcom/android/server/location/contexthub/ContextHubService;->$r8$lambda$2DicqHE8AmZyaH66S6Q9mi8pIEQ(Ljava/lang/String;JLcom/android/server/location/contexthub/ContextHubClientBroker;)V
 PLcom/android/server/location/contexthub/ContextHubService;->$r8$lambda$3uYRjc1gJNJkcH4lsPxQfytLv9Q(Ljava/io/PrintWriter;Landroid/hardware/location/NanoAppInstanceInfo;)V
 PLcom/android/server/location/contexthub/ContextHubService;->$r8$lambda$BVC3pqJn43nuQ-kdsLT4nRlmkiw(Lcom/android/server/location/contexthub/ContextHubService;)V
-PLcom/android/server/location/contexthub/ContextHubService;->$r8$lambda$Ftawv_Y4J5eOME6OxcRZ_h9mCXY(Lcom/android/server/location/contexthub/ContextHubService;IZ)V
+HSPLcom/android/server/location/contexthub/ContextHubService;->$r8$lambda$Ftawv_Y4J5eOME6OxcRZ_h9mCXY(Lcom/android/server/location/contexthub/ContextHubService;IZ)V
 PLcom/android/server/location/contexthub/ContextHubService;->$r8$lambda$OPnStT2frch7kM88ZHpe_1q_EhE(Landroid/hardware/location/NanoAppFilter;Ljava/util/ArrayList;Landroid/hardware/location/NanoAppInstanceInfo;)V
 PLcom/android/server/location/contexthub/ContextHubService;->$r8$lambda$RgYKnGbgRWisJh3a6hKfyf6RHUM(Landroid/util/proto/ProtoOutputStream;Landroid/hardware/location/ContextHubInfo;)V
 HSPLcom/android/server/location/contexthub/ContextHubService;->-$$Nest$fgetmNanoAppStateManager(Lcom/android/server/location/contexthub/ContextHubService;)Lcom/android/server/location/contexthub/NanoAppStateManager;
@@ -26471,18 +27586,19 @@
 PLcom/android/server/location/contexthub/ContextHubService;->-$$Nest$mhandleHubEventCallback(Lcom/android/server/location/contexthub/ContextHubService;II)V
 PLcom/android/server/location/contexthub/ContextHubService;->-$$Nest$mhandleLoadResponseOldApi(Lcom/android/server/location/contexthub/ContextHubService;IILandroid/hardware/location/NanoAppBinary;)V
 HSPLcom/android/server/location/contexthub/ContextHubService;->-$$Nest$mhandleQueryAppsCallback(Lcom/android/server/location/contexthub/ContextHubService;ILjava/util/List;)V
+PLcom/android/server/location/contexthub/ContextHubService;->-$$Nest$mhandleTransactionResultCallback(Lcom/android/server/location/contexthub/ContextHubService;IIZ)V
 HSPLcom/android/server/location/contexthub/ContextHubService;->-$$Nest$monMessageReceiptOldApi(Lcom/android/server/location/contexthub/ContextHubService;III[B)I
 PLcom/android/server/location/contexthub/ContextHubService;->-$$Nest$msendAirplaneModeSettingUpdate(Lcom/android/server/location/contexthub/ContextHubService;)V
-PLcom/android/server/location/contexthub/ContextHubService;->-$$Nest$msendBtSettingUpdate(Lcom/android/server/location/contexthub/ContextHubService;Z)V
+HSPLcom/android/server/location/contexthub/ContextHubService;->-$$Nest$msendBtSettingUpdate(Lcom/android/server/location/contexthub/ContextHubService;Z)V
 PLcom/android/server/location/contexthub/ContextHubService;->-$$Nest$msendLocationSettingUpdate(Lcom/android/server/location/contexthub/ContextHubService;)V
-PLcom/android/server/location/contexthub/ContextHubService;->-$$Nest$msendWifiSettingUpdate(Lcom/android/server/location/contexthub/ContextHubService;Z)V
+HSPLcom/android/server/location/contexthub/ContextHubService;->-$$Nest$msendWifiSettingUpdate(Lcom/android/server/location/contexthub/ContextHubService;Z)V
 HSPLcom/android/server/location/contexthub/ContextHubService;-><init>(Landroid/content/Context;)V
 HPLcom/android/server/location/contexthub/ContextHubService;->checkHalProxyAndContextHubId(ILandroid/hardware/location/IContextHubTransactionCallback;I)Z+]Lcom/android/server/location/contexthub/ContextHubService;Lcom/android/server/location/contexthub/ContextHubService;
 HPLcom/android/server/location/contexthub/ContextHubService;->checkPermissions()V
-PLcom/android/server/location/contexthub/ContextHubService;->createClient(ILandroid/hardware/location/IContextHubClientCallback;Ljava/lang/String;Ljava/lang/String;)Landroid/hardware/location/IContextHubClient;
+HPLcom/android/server/location/contexthub/ContextHubService;->createClient(ILandroid/hardware/location/IContextHubClientCallback;Ljava/lang/String;Ljava/lang/String;)Landroid/hardware/location/IContextHubClient;
 HSPLcom/android/server/location/contexthub/ContextHubService;->createDefaultClientCallback(I)Landroid/hardware/location/IContextHubClientCallback;
 PLcom/android/server/location/contexthub/ContextHubService;->createLoadTransactionCallback(ILandroid/hardware/location/NanoAppBinary;)Landroid/hardware/location/IContextHubTransactionCallback;
-PLcom/android/server/location/contexthub/ContextHubService;->createPendingIntentClient(ILandroid/app/PendingIntent;JLjava/lang/String;)Landroid/hardware/location/IContextHubClient;
+HPLcom/android/server/location/contexthub/ContextHubService;->createPendingIntentClient(ILandroid/app/PendingIntent;JLjava/lang/String;)Landroid/hardware/location/IContextHubClient;
 HSPLcom/android/server/location/contexthub/ContextHubService;->createQueryTransactionCallback(I)Landroid/hardware/location/IContextHubTransactionCallback;
 PLcom/android/server/location/contexthub/ContextHubService;->createUnloadTransactionCallback(I)Landroid/hardware/location/IContextHubTransactionCallback;
 HPLcom/android/server/location/contexthub/ContextHubService;->denyClientAuthState(ILjava/lang/String;J)V
@@ -26491,22 +27607,22 @@
 PLcom/android/server/location/contexthub/ContextHubService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/location/contexthub/ContextHubService;->findNanoAppOnHub(ILandroid/hardware/location/NanoAppFilter;)[I
 HSPLcom/android/server/location/contexthub/ContextHubService;->getCallingPackageName()Ljava/lang/String;
-PLcom/android/server/location/contexthub/ContextHubService;->getContextHubHandles()[I
+HPLcom/android/server/location/contexthub/ContextHubService;->getContextHubHandles()[I
 PLcom/android/server/location/contexthub/ContextHubService;->getContextHubInfo(I)Landroid/hardware/location/ContextHubInfo;
 HSPLcom/android/server/location/contexthub/ContextHubService;->getContextHubWrapper()Lcom/android/server/location/contexthub/IContextHubWrapper;
-PLcom/android/server/location/contexthub/ContextHubService;->getContextHubs()Ljava/util/List;
+HPLcom/android/server/location/contexthub/ContextHubService;->getContextHubs()Ljava/util/List;
 HSPLcom/android/server/location/contexthub/ContextHubService;->getCurrentUserId()I
 PLcom/android/server/location/contexthub/ContextHubService;->getNanoAppInstanceInfo(I)Landroid/hardware/location/NanoAppInstanceInfo;
 HSPLcom/android/server/location/contexthub/ContextHubService;->handleClientMessageCallback(ISLandroid/hardware/location/NanoAppMessage;Ljava/util/List;Ljava/util/List;)V
 PLcom/android/server/location/contexthub/ContextHubService;->handleHubEventCallback(II)V
-HSPLcom/android/server/location/contexthub/ContextHubService;->handleQueryAppsCallback(ILjava/util/List;)V+]Lcom/android/server/location/contexthub/ContextHubTransactionManager;Lcom/android/server/location/contexthub/ContextHubTransactionManager;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/location/contexthub/ContextHubService;Lcom/android/server/location/contexthub/ContextHubService;]Lcom/android/server/location/contexthub/NanoAppStateManager;Lcom/android/server/location/contexthub/NanoAppStateManager;]Landroid/hardware/location/NanoAppState;Landroid/hardware/location/NanoAppState;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/Set;Ljava/util/Collections$SetFromMap;
+HSPLcom/android/server/location/contexthub/ContextHubService;->handleQueryAppsCallback(ILjava/util/List;)V+]Lcom/android/server/location/contexthub/ContextHubTransactionManager;Lcom/android/server/location/contexthub/ContextHubTransactionManager;]Lcom/android/server/location/contexthub/ContextHubService;Lcom/android/server/location/contexthub/ContextHubService;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/location/contexthub/NanoAppStateManager;Lcom/android/server/location/contexthub/NanoAppStateManager;]Landroid/hardware/location/NanoAppState;Landroid/hardware/location/NanoAppState;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/Set;Ljava/util/Collections$SetFromMap;
 PLcom/android/server/location/contexthub/ContextHubService;->handleTransactionResultCallback(IIZ)V
 PLcom/android/server/location/contexthub/ContextHubService;->handleUnloadResponseOldApi(II)V
 HPLcom/android/server/location/contexthub/ContextHubService;->isValidContextHubId(I)Z+]Ljava/util/Map;Ljava/util/Collections$UnmodifiableMap;
 PLcom/android/server/location/contexthub/ContextHubService;->lambda$dump$2(Ljava/io/PrintWriter;Landroid/hardware/location/NanoAppInstanceInfo;)V
 PLcom/android/server/location/contexthub/ContextHubService;->lambda$dump$4(Landroid/util/proto/ProtoOutputStream;Landroid/hardware/location/ContextHubInfo;)V
 PLcom/android/server/location/contexthub/ContextHubService;->lambda$findNanoAppOnHub$1(Landroid/hardware/location/NanoAppFilter;Ljava/util/ArrayList;Landroid/hardware/location/NanoAppInstanceInfo;)V
-PLcom/android/server/location/contexthub/ContextHubService;->lambda$new$0(IZ)V
+HSPLcom/android/server/location/contexthub/ContextHubService;->lambda$new$0(IZ)V
 PLcom/android/server/location/contexthub/ContextHubService;->lambda$scheduleDailyMetricSnapshot$5()V
 PLcom/android/server/location/contexthub/ContextHubService;->loadNanoAppOnHub(ILandroid/hardware/location/IContextHubTransactionCallback;Landroid/hardware/location/NanoAppBinary;)V
 HSPLcom/android/server/location/contexthub/ContextHubService;->onMessageReceiptOldApi(III[B)I
@@ -26535,12 +27651,13 @@
 HPLcom/android/server/location/contexthub/ContextHubServiceUtil;->checkPermissions(Landroid/content/Context;)V+]Landroid/content/Context;Landroid/app/ContextImpl;
 PLcom/android/server/location/contexthub/ContextHubServiceUtil;->copyToByteArrayList([BLjava/util/ArrayList;)V
 HPLcom/android/server/location/contexthub/ContextHubServiceUtil;->createAidlContextHubMessage(SLandroid/hardware/location/NanoAppMessage;)Landroid/hardware/contexthub/ContextHubMessage;+]Landroid/hardware/location/NanoAppMessage;Landroid/hardware/location/NanoAppMessage;
+PLcom/android/server/location/contexthub/ContextHubServiceUtil;->createAidlNanoAppBinary(Landroid/hardware/location/NanoAppBinary;)Landroid/hardware/contexthub/NanoappBinary;
 HSPLcom/android/server/location/contexthub/ContextHubServiceUtil;->createContextHubInfoMap(Ljava/util/List;)Ljava/util/HashMap;
 PLcom/android/server/location/contexthub/ContextHubServiceUtil;->createHidlNanoAppBinary(Landroid/hardware/location/NanoAppBinary;)Landroid/hardware/contexthub/V1_0/NanoAppBinary;
 HSPLcom/android/server/location/contexthub/ContextHubServiceUtil;->createNanoAppMessage(Landroid/hardware/contexthub/ContextHubMessage;)Landroid/hardware/location/NanoAppMessage;
 HPLcom/android/server/location/contexthub/ContextHubServiceUtil;->createNanoAppMessage(Landroid/hardware/contexthub/V1_0/ContextHubMsg;)Landroid/hardware/location/NanoAppMessage;
 HSPLcom/android/server/location/contexthub/ContextHubServiceUtil;->createNanoAppStateList([Landroid/hardware/contexthub/NanoappInfo;)Ljava/util/List;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
-PLcom/android/server/location/contexthub/ContextHubServiceUtil;->createPrimitiveIntArray(Ljava/util/Collection;)[I
+HPLcom/android/server/location/contexthub/ContextHubServiceUtil;->createPrimitiveIntArray(Ljava/util/Collection;)[I
 PLcom/android/server/location/contexthub/ContextHubServiceUtil;->toContextHubEventFromAidl(I)I
 PLcom/android/server/location/contexthub/ContextHubServiceUtil;->toHubAppInfo_1_2(Ljava/util/ArrayList;)Ljava/util/ArrayList;
 PLcom/android/server/location/contexthub/ContextHubServiceUtil;->toTransactionResult(I)I
@@ -26548,18 +27665,24 @@
 PLcom/android/server/location/contexthub/ContextHubShellCommand;->runDisableAuth()I
 PLcom/android/server/location/contexthub/ContextHubStatsLog;->write(IIJI)V
 HSPLcom/android/server/location/contexthub/ContextHubStatsLog;->write(IJI)V
+PLcom/android/server/location/contexthub/ContextHubStatsLog;->write(IJIII)V
 HSPLcom/android/server/location/contexthub/ContextHubTransactionManager$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/location/contexthub/ContextHubTransactionManager;Lcom/android/server/location/contexthub/ContextHubServiceTransaction;)V
 PLcom/android/server/location/contexthub/ContextHubTransactionManager$$ExternalSyntheticLambda0;->run()V
+PLcom/android/server/location/contexthub/ContextHubTransactionManager$1;-><init>(Lcom/android/server/location/contexthub/ContextHubTransactionManager;IIJLjava/lang/String;ILandroid/hardware/location/NanoAppBinary;Landroid/hardware/location/IContextHubTransactionCallback;)V
+PLcom/android/server/location/contexthub/ContextHubTransactionManager$1;->onTransact()I
+PLcom/android/server/location/contexthub/ContextHubTransactionManager$1;->onTransactionComplete(I)V
 PLcom/android/server/location/contexthub/ContextHubTransactionManager$2;-><init>(Lcom/android/server/location/contexthub/ContextHubTransactionManager;IIJLjava/lang/String;IJLandroid/hardware/location/IContextHubTransactionCallback;)V
 PLcom/android/server/location/contexthub/ContextHubTransactionManager$2;->onTransact()I
+PLcom/android/server/location/contexthub/ContextHubTransactionManager$2;->onTransactionComplete(I)V
 PLcom/android/server/location/contexthub/ContextHubTransactionManager$3;-><init>(Lcom/android/server/location/contexthub/ContextHubTransactionManager;IILjava/lang/String;IJLandroid/hardware/location/IContextHubTransactionCallback;)V
 HSPLcom/android/server/location/contexthub/ContextHubTransactionManager$5;-><init>(Lcom/android/server/location/contexthub/ContextHubTransactionManager;IILjava/lang/String;ILandroid/hardware/location/IContextHubTransactionCallback;)V
-HSPLcom/android/server/location/contexthub/ContextHubTransactionManager$5;->onQueryResponse(ILjava/util/List;)V+]Landroid/hardware/location/IContextHubTransactionCallback;Lcom/android/server/location/contexthub/ContextHubService$9;,Landroid/hardware/location/IContextHubTransactionCallback$Stub$Proxy;,Lcom/android/server/location/contexthub/ContextHubClientBroker$1;
+HSPLcom/android/server/location/contexthub/ContextHubTransactionManager$5;->onQueryResponse(ILjava/util/List;)V+]Landroid/hardware/location/IContextHubTransactionCallback;Landroid/hardware/location/IContextHubTransactionCallback$Stub$Proxy;,Lcom/android/server/location/contexthub/ContextHubClientBroker$1;,Lcom/android/server/location/contexthub/ContextHubService$9;
 HSPLcom/android/server/location/contexthub/ContextHubTransactionManager$5;->onTransact()I+]Lcom/android/server/location/contexthub/IContextHubWrapper;Lcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;
 PLcom/android/server/location/contexthub/ContextHubTransactionManager$5;->onTransactionComplete(I)V
 HSPLcom/android/server/location/contexthub/ContextHubTransactionManager$TransactionRecord;-><init>(Lcom/android/server/location/contexthub/ContextHubTransactionManager;Ljava/lang/String;)V
 PLcom/android/server/location/contexthub/ContextHubTransactionManager$TransactionRecord;->toString()Ljava/lang/String;
 PLcom/android/server/location/contexthub/ContextHubTransactionManager;->$r8$lambda$bIjQtoPMS72KRYMGAFhm7fO71vc(Lcom/android/server/location/contexthub/ContextHubTransactionManager;Lcom/android/server/location/contexthub/ContextHubServiceTransaction;)V
+PLcom/android/server/location/contexthub/ContextHubTransactionManager;->-$$Nest$fgetmClientManager(Lcom/android/server/location/contexthub/ContextHubTransactionManager;)Lcom/android/server/location/contexthub/ContextHubClientManager;
 HSPLcom/android/server/location/contexthub/ContextHubTransactionManager;->-$$Nest$fgetmContextHubProxy(Lcom/android/server/location/contexthub/ContextHubTransactionManager;)Lcom/android/server/location/contexthub/IContextHubWrapper;
 PLcom/android/server/location/contexthub/ContextHubTransactionManager;->-$$Nest$fgetmNanoAppStateManager(Lcom/android/server/location/contexthub/ContextHubTransactionManager;)Lcom/android/server/location/contexthub/NanoAppStateManager;
 HPLcom/android/server/location/contexthub/ContextHubTransactionManager;->-$$Nest$mtoStatsTransactionResult(Lcom/android/server/location/contexthub/ContextHubTransactionManager;I)I
@@ -26568,14 +27691,19 @@
 HSPLcom/android/server/location/contexthub/ContextHubTransactionManager;-><init>(Lcom/android/server/location/contexthub/IContextHubWrapper;Lcom/android/server/location/contexthub/ContextHubClientManager;Lcom/android/server/location/contexthub/NanoAppStateManager;)V
 HSPLcom/android/server/location/contexthub/ContextHubTransactionManager;->addTransaction(Lcom/android/server/location/contexthub/ContextHubServiceTransaction;)V+]Lcom/android/server/location/contexthub/ContextHubTransactionManager;Lcom/android/server/location/contexthub/ContextHubTransactionManager;]Lcom/android/server/location/contexthub/ConcurrentLinkedEvictingDeque;Lcom/android/server/location/contexthub/ConcurrentLinkedEvictingDeque;]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Lcom/android/server/location/contexthub/ContextHubServiceTransaction;Lcom/android/server/location/contexthub/ContextHubTransactionManager$5;
 PLcom/android/server/location/contexthub/ContextHubTransactionManager;->createEnableTransaction(IJLandroid/hardware/location/IContextHubTransactionCallback;Ljava/lang/String;)Lcom/android/server/location/contexthub/ContextHubServiceTransaction;
-HSPLcom/android/server/location/contexthub/ContextHubTransactionManager;->createQueryTransaction(ILandroid/hardware/location/IContextHubTransactionCallback;Ljava/lang/String;)Lcom/android/server/location/contexthub/ContextHubServiceTransaction;
+PLcom/android/server/location/contexthub/ContextHubTransactionManager;->createLoadTransaction(ILandroid/hardware/location/NanoAppBinary;Landroid/hardware/location/IContextHubTransactionCallback;Ljava/lang/String;)Lcom/android/server/location/contexthub/ContextHubServiceTransaction;
+HSPLcom/android/server/location/contexthub/ContextHubTransactionManager;->createQueryTransaction(ILandroid/hardware/location/IContextHubTransactionCallback;Ljava/lang/String;)Lcom/android/server/location/contexthub/ContextHubServiceTransaction;+]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
+PLcom/android/server/location/contexthub/ContextHubTransactionManager;->createUnloadTransaction(IJLandroid/hardware/location/IContextHubTransactionCallback;Ljava/lang/String;)Lcom/android/server/location/contexthub/ContextHubServiceTransaction;
 PLcom/android/server/location/contexthub/ContextHubTransactionManager;->lambda$startNextTransaction$0(Lcom/android/server/location/contexthub/ContextHubServiceTransaction;)V
 PLcom/android/server/location/contexthub/ContextHubTransactionManager;->onHubReset()V
 HSPLcom/android/server/location/contexthub/ContextHubTransactionManager;->onQueryResponse(Ljava/util/List;)V+]Lcom/android/server/location/contexthub/ContextHubTransactionManager;Lcom/android/server/location/contexthub/ContextHubTransactionManager;]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Lcom/android/server/location/contexthub/ContextHubServiceTransaction;Lcom/android/server/location/contexthub/ContextHubTransactionManager$5;
+PLcom/android/server/location/contexthub/ContextHubTransactionManager;->onTransactionResponse(IZ)V
 HSPLcom/android/server/location/contexthub/ContextHubTransactionManager;->removeTransactionAndStartNext()V+]Lcom/android/server/location/contexthub/ContextHubTransactionManager;Lcom/android/server/location/contexthub/ContextHubTransactionManager;]Ljava/util/concurrent/ScheduledFuture;Ljava/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask;]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Lcom/android/server/location/contexthub/ContextHubServiceTransaction;Lcom/android/server/location/contexthub/ContextHubTransactionManager$5;
 HSPLcom/android/server/location/contexthub/ContextHubTransactionManager;->startNextTransaction()V+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;]Ljava/util/concurrent/ScheduledThreadPoolExecutor;Ljava/util/concurrent/ScheduledThreadPoolExecutor;]Lcom/android/server/location/contexthub/ContextHubServiceTransaction;Lcom/android/server/location/contexthub/ContextHubTransactionManager$5;
 HPLcom/android/server/location/contexthub/ContextHubTransactionManager;->toStatsTransactionResult(I)I
 PLcom/android/server/location/contexthub/ContextHubTransactionManager;->toString()Ljava/lang/String;
+PLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl$ContextHubAidlCallback$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl$ContextHubAidlCallback;IZ)V
+PLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl$ContextHubAidlCallback$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl$ContextHubAidlCallback$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl$ContextHubAidlCallback;Ljava/util/List;)V
 HSPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl$ContextHubAidlCallback$$ExternalSyntheticLambda1;->run()V
 HSPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl$ContextHubAidlCallback$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl$ContextHubAidlCallback;Landroid/hardware/contexthub/ContextHubMessage;[Ljava/lang/String;)V
@@ -26595,16 +27723,17 @@
 PLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl$ContextHubAidlCallback;->lambda$handleContextHubAsyncEvent$2(I)V
 HSPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl$ContextHubAidlCallback;->lambda$handleContextHubMessage$1(Landroid/hardware/contexthub/ContextHubMessage;[Ljava/lang/String;)V+]Lcom/android/server/location/contexthub/IContextHubWrapper$ICallback;Lcom/android/server/location/contexthub/ContextHubService$ContextHubServiceCallback;
 HSPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl$ContextHubAidlCallback;->lambda$handleNanoappInfo$0(Ljava/util/List;)V
+PLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl$ContextHubAidlCallback;->lambda$handleTransactionResult$3(IZ)V
 HSPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;->-$$Nest$fgetmHandler(Lcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;)Landroid/os/Handler;
 HSPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;-><init>(Landroid/hardware/contexthub/IContextHub;)V
 HPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;->disableNanoapp(IJI)I
 HSPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;->getHubs()Landroid/util/Pair;
 HPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;->loadNanoapp(ILandroid/hardware/location/NanoAppBinary;I)I
 HSPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;->onAirplaneModeSettingChanged(Z)V
-PLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;->onBtMainSettingChanged(Z)V
-PLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;->onBtScanningSettingChanged(Z)V
+HSPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;->onBtMainSettingChanged(Z)V
+HSPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;->onBtScanningSettingChanged(Z)V
 HSPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;->onHostEndpointConnected(Landroid/hardware/contexthub/HostEndpointInfo;)V
-PLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;->onHostEndpointDisconnected(S)V
+HPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;->onHostEndpointDisconnected(S)V
 HSPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;->onLocationSettingChanged(Z)V
 HSPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;->onMicrophoneSettingChanged(Z)V
 HSPLcom/android/server/location/contexthub/IContextHubWrapper$ContextHubWrapperAidl;->onSettingChanged(BZ)V
@@ -26638,7 +27767,7 @@
 HSPLcom/android/server/location/contexthub/NanoAppStateManager;->handleQueryAppEntry(IJI)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/server/location/contexthub/NanoAppStateManager;Lcom/android/server/location/contexthub/NanoAppStateManager;]Landroid/hardware/location/NanoAppInstanceInfo;Landroid/hardware/location/NanoAppInstanceInfo;
 HSPLcom/android/server/location/contexthub/NanoAppStateManager;->removeNanoAppInstance(IJ)V
 HSPLcom/android/server/location/contexthub/NanoAppStateManager;->updateCache(ILjava/util/List;)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/util/Collection;Ljava/util/HashMap$Values;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/location/contexthub/NanoAppStateManager;Lcom/android/server/location/contexthub/NanoAppStateManager;]Ljava/util/HashSet;Ljava/util/HashSet;]Landroid/hardware/location/NanoAppState;Landroid/hardware/location/NanoAppState;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;,Ljava/util/HashMap$ValueIterator;]Landroid/hardware/location/NanoAppInstanceInfo;Landroid/hardware/location/NanoAppInstanceInfo;
-PLcom/android/server/location/countrydetector/ComprehensiveCountryDetector$1;-><init>(Lcom/android/server/location/countrydetector/ComprehensiveCountryDetector;)V
+HSPLcom/android/server/location/countrydetector/ComprehensiveCountryDetector$1;-><init>(Lcom/android/server/location/countrydetector/ComprehensiveCountryDetector;)V
 PLcom/android/server/location/countrydetector/ComprehensiveCountryDetector$1;->onCountryDetected(Landroid/location/Country;)V
 HPLcom/android/server/location/countrydetector/ComprehensiveCountryDetector$2;-><init>(Lcom/android/server/location/countrydetector/ComprehensiveCountryDetector;Landroid/location/Country;Landroid/location/Country;ZZ)V
 HPLcom/android/server/location/countrydetector/ComprehensiveCountryDetector$2;->run()V
@@ -26647,17 +27776,17 @@
 PLcom/android/server/location/countrydetector/ComprehensiveCountryDetector$4;-><init>(Lcom/android/server/location/countrydetector/ComprehensiveCountryDetector;)V
 HPLcom/android/server/location/countrydetector/ComprehensiveCountryDetector$4;->onServiceStateChanged(Landroid/telephony/ServiceState;)V
 PLcom/android/server/location/countrydetector/ComprehensiveCountryDetector;->-$$Nest$fgetmCountServiceStateChanges(Lcom/android/server/location/countrydetector/ComprehensiveCountryDetector;)I
-PLcom/android/server/location/countrydetector/ComprehensiveCountryDetector;->-$$Nest$fgetmTotalCountServiceStateChanges(Lcom/android/server/location/countrydetector/ComprehensiveCountryDetector;)I
+HPLcom/android/server/location/countrydetector/ComprehensiveCountryDetector;->-$$Nest$fgetmTotalCountServiceStateChanges(Lcom/android/server/location/countrydetector/ComprehensiveCountryDetector;)I
 HPLcom/android/server/location/countrydetector/ComprehensiveCountryDetector;->-$$Nest$fputmCountServiceStateChanges(Lcom/android/server/location/countrydetector/ComprehensiveCountryDetector;I)V
 PLcom/android/server/location/countrydetector/ComprehensiveCountryDetector;->-$$Nest$fputmCountryFromLocation(Lcom/android/server/location/countrydetector/ComprehensiveCountryDetector;Landroid/location/Country;)V
 PLcom/android/server/location/countrydetector/ComprehensiveCountryDetector;->-$$Nest$fputmTotalCountServiceStateChanges(Lcom/android/server/location/countrydetector/ComprehensiveCountryDetector;I)V
 PLcom/android/server/location/countrydetector/ComprehensiveCountryDetector;->-$$Nest$mdetectCountry(Lcom/android/server/location/countrydetector/ComprehensiveCountryDetector;ZZ)Landroid/location/Country;
 PLcom/android/server/location/countrydetector/ComprehensiveCountryDetector;->-$$Nest$misNetworkCountryCodeAvailable(Lcom/android/server/location/countrydetector/ComprehensiveCountryDetector;)Z
 PLcom/android/server/location/countrydetector/ComprehensiveCountryDetector;->-$$Nest$mstopLocationBasedDetector(Lcom/android/server/location/countrydetector/ComprehensiveCountryDetector;)V
-PLcom/android/server/location/countrydetector/ComprehensiveCountryDetector;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/location/countrydetector/ComprehensiveCountryDetector;-><init>(Landroid/content/Context;)V
 PLcom/android/server/location/countrydetector/ComprehensiveCountryDetector;->addPhoneStateListener()V
 HPLcom/android/server/location/countrydetector/ComprehensiveCountryDetector;->addToLogs(Landroid/location/Country;)V
-PLcom/android/server/location/countrydetector/ComprehensiveCountryDetector;->cancelLocationRefresh()V
+HPLcom/android/server/location/countrydetector/ComprehensiveCountryDetector;->cancelLocationRefresh()V
 PLcom/android/server/location/countrydetector/ComprehensiveCountryDetector;->createLocationBasedCountryDetector()Lcom/android/server/location/countrydetector/CountryDetectorBase;
 HPLcom/android/server/location/countrydetector/ComprehensiveCountryDetector;->detectCountry()Landroid/location/Country;
 HPLcom/android/server/location/countrydetector/ComprehensiveCountryDetector;->detectCountry(ZZ)Landroid/location/Country;
@@ -26675,10 +27804,10 @@
 HPLcom/android/server/location/countrydetector/ComprehensiveCountryDetector;->runAfterDetection(Landroid/location/Country;Landroid/location/Country;ZZ)V
 HPLcom/android/server/location/countrydetector/ComprehensiveCountryDetector;->runAfterDetectionAsync(Landroid/location/Country;Landroid/location/Country;ZZ)V
 PLcom/android/server/location/countrydetector/ComprehensiveCountryDetector;->scheduleLocationRefresh()V
-PLcom/android/server/location/countrydetector/ComprehensiveCountryDetector;->setCountryListener(Landroid/location/CountryListener;)V
+HPLcom/android/server/location/countrydetector/ComprehensiveCountryDetector;->setCountryListener(Landroid/location/CountryListener;)V
 PLcom/android/server/location/countrydetector/ComprehensiveCountryDetector;->startLocationBasedDetector(Landroid/location/CountryListener;)V
 HPLcom/android/server/location/countrydetector/ComprehensiveCountryDetector;->stopLocationBasedDetector()V
-PLcom/android/server/location/countrydetector/CountryDetectorBase;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/location/countrydetector/CountryDetectorBase;-><init>(Landroid/content/Context;)V
 PLcom/android/server/location/countrydetector/CountryDetectorBase;->detectCountry()Landroid/location/Country;
 PLcom/android/server/location/countrydetector/CountryDetectorBase;->notifyListener(Landroid/location/Country;)V
 PLcom/android/server/location/countrydetector/CountryDetectorBase;->setCountryListener(Landroid/location/CountryListener;)V
@@ -26714,6 +27843,7 @@
 HSPLcom/android/server/location/eventlog/LocalEventLog;-><init>(ILjava/lang/Class;)V
 HSPLcom/android/server/location/eventlog/LocalEventLog;->addLog(JLjava/lang/Object;)V+]Lcom/android/server/location/eventlog/LocalEventLog;Lcom/android/server/location/eventlog/LocationEventLog;,Lcom/android/server/location/eventlog/LocationEventLog$LocationsEventLog;
 HSPLcom/android/server/location/eventlog/LocalEventLog;->addLogEventInternal(ZILjava/lang/Object;)V+]Lcom/android/server/location/eventlog/LocalEventLog;Lcom/android/server/location/eventlog/LocationEventLog;,Lcom/android/server/location/eventlog/LocationEventLog$LocationsEventLog;
+PLcom/android/server/location/eventlog/LocalEventLog;->clear()V
 HSPLcom/android/server/location/eventlog/LocalEventLog;->countTrailingZeros(I)I
 HSPLcom/android/server/location/eventlog/LocalEventLog;->createEntry(ZI)I
 HPLcom/android/server/location/eventlog/LocalEventLog;->getTimeDelta(I)I
@@ -26762,6 +27892,7 @@
 HPLcom/android/server/location/eventlog/LocationEventLog$ProviderUpdateEvent;-><init>(Ljava/lang/String;Landroid/location/provider/ProviderRequest;)V
 HPLcom/android/server/location/eventlog/LocationEventLog$ProviderUpdateEvent;->toString()Ljava/lang/String;
 PLcom/android/server/location/eventlog/LocationEventLog$UserSwitchedEvent;-><init>(II)V
+PLcom/android/server/location/eventlog/LocationEventLog$UserSwitchedEvent;->toString()Ljava/lang/String;
 PLcom/android/server/location/eventlog/LocationEventLog;->$r8$lambda$dhWOzPpo6Y2c9IX-81RpvYKL4Q8(Ljava/lang/String;Ljava/lang/StringBuilder;JLjava/util/function/Consumer;JLjava/lang/Object;)V
 HSPLcom/android/server/location/eventlog/LocationEventLog;-><clinit>()V
 HSPLcom/android/server/location/eventlog/LocationEventLog;-><init>()V
@@ -26796,13 +27927,13 @@
 HSPLcom/android/server/location/fudger/LocationFudger;-><clinit>()V
 HSPLcom/android/server/location/fudger/LocationFudger;-><init>(F)V
 HSPLcom/android/server/location/fudger/LocationFudger;-><init>(FLjava/time/Clock;Ljava/util/Random;)V
-PLcom/android/server/location/fudger/LocationFudger;->createCoarse(Landroid/location/Location;)Landroid/location/Location;
-PLcom/android/server/location/fudger/LocationFudger;->createCoarse(Landroid/location/LocationResult;)Landroid/location/LocationResult;
+HPLcom/android/server/location/fudger/LocationFudger;->createCoarse(Landroid/location/Location;)Landroid/location/Location;
+HPLcom/android/server/location/fudger/LocationFudger;->createCoarse(Landroid/location/LocationResult;)Landroid/location/LocationResult;
 PLcom/android/server/location/fudger/LocationFudger;->metersToDegreesLatitude(D)D
 PLcom/android/server/location/fudger/LocationFudger;->metersToDegreesLongitude(DD)D
 HSPLcom/android/server/location/fudger/LocationFudger;->nextRandomOffset()D
 HSPLcom/android/server/location/fudger/LocationFudger;->resetOffsets()V
-PLcom/android/server/location/fudger/LocationFudger;->updateOffsets()V
+HPLcom/android/server/location/fudger/LocationFudger;->updateOffsets()V
 PLcom/android/server/location/fudger/LocationFudger;->wrapLatitude(D)D
 PLcom/android/server/location/fudger/LocationFudger;->wrapLongitude(D)D
 PLcom/android/server/location/geofence/GeofenceKey;-><init>(Landroid/app/PendingIntent;Landroid/location/Geofence;)V
@@ -26812,6 +27943,7 @@
 PLcom/android/server/location/geofence/GeofenceManager$$ExternalSyntheticLambda0;-><init>(Landroid/location/Location;)V
 PLcom/android/server/location/geofence/GeofenceManager$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/location/geofence/GeofenceManager$$ExternalSyntheticLambda1;-><init>(Landroid/app/PendingIntent;)V
+PLcom/android/server/location/geofence/GeofenceManager$$ExternalSyntheticLambda1;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/location/geofence/GeofenceManager$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/location/geofence/GeofenceManager;)V
 HSPLcom/android/server/location/geofence/GeofenceManager$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/location/geofence/GeofenceManager;)V
 HSPLcom/android/server/location/geofence/GeofenceManager$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/location/geofence/GeofenceManager;)V
@@ -26838,12 +27970,13 @@
 PLcom/android/server/location/geofence/GeofenceManager$GeofenceRegistration;->lambda$onLocationChanged$0(Landroid/app/PendingIntent;)V
 PLcom/android/server/location/geofence/GeofenceManager$GeofenceRegistration;->lambda$sendIntent$2(Landroid/app/PendingIntent;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;)V
 PLcom/android/server/location/geofence/GeofenceManager$GeofenceRegistration;->onActive()V
-PLcom/android/server/location/geofence/GeofenceManager$GeofenceRegistration;->onLocationChanged(Landroid/location/Location;)Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;
+HPLcom/android/server/location/geofence/GeofenceManager$GeofenceRegistration;->onLocationChanged(Landroid/location/Location;)Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;
 PLcom/android/server/location/geofence/GeofenceManager$GeofenceRegistration;->onLocationPermissionsChanged()Z
 PLcom/android/server/location/geofence/GeofenceManager$GeofenceRegistration;->onLocationPermissionsChanged(I)Z
 PLcom/android/server/location/geofence/GeofenceManager$GeofenceRegistration;->onLocationPermissionsChanged(Ljava/lang/String;)Z
 PLcom/android/server/location/geofence/GeofenceManager$GeofenceRegistration;->onPendingIntentListenerRegister()V
 PLcom/android/server/location/geofence/GeofenceManager$GeofenceRegistration;->sendIntent(Landroid/app/PendingIntent;Z)V
+PLcom/android/server/location/geofence/GeofenceManager;->$r8$lambda$9hP-7lzvfc8NNDyiNwAe4h97ysY(Landroid/app/PendingIntent;Lcom/android/server/location/geofence/GeofenceKey;)Z
 PLcom/android/server/location/geofence/GeofenceManager;->$r8$lambda$9tNS5kqhXqm5dSPxqwnmbKKr9Dc(ILcom/android/server/location/geofence/GeofenceManager$GeofenceRegistration;)Z
 PLcom/android/server/location/geofence/GeofenceManager;->$r8$lambda$rGvLUZXeMmt7b8HbtIcIyKLh3E4(Landroid/location/Location;Lcom/android/server/location/geofence/GeofenceManager$GeofenceRegistration;)Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;
 PLcom/android/server/location/geofence/GeofenceManager;->$r8$lambda$zb_RV9tRKsVJ-aBX6lScFZ5oC4M(Ljava/lang/String;Lcom/android/server/location/geofence/GeofenceManager$GeofenceRegistration;)Z
@@ -26857,7 +27990,8 @@
 PLcom/android/server/location/geofence/GeofenceManager;->lambda$onLocationChanged$1(Landroid/location/Location;Lcom/android/server/location/geofence/GeofenceManager$GeofenceRegistration;)Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;
 PLcom/android/server/location/geofence/GeofenceManager;->lambda$onLocationPermissionsChanged$5(Ljava/lang/String;Lcom/android/server/location/geofence/GeofenceManager$GeofenceRegistration;)Z
 PLcom/android/server/location/geofence/GeofenceManager;->lambda$onLocationPermissionsChanged$6(ILcom/android/server/location/geofence/GeofenceManager$GeofenceRegistration;)Z
-PLcom/android/server/location/geofence/GeofenceManager;->mergeRegistrations(Ljava/util/Collection;)Landroid/location/LocationRequest;
+PLcom/android/server/location/geofence/GeofenceManager;->lambda$removeGeofence$0(Landroid/app/PendingIntent;Lcom/android/server/location/geofence/GeofenceKey;)Z
+HPLcom/android/server/location/geofence/GeofenceManager;->mergeRegistrations(Ljava/util/Collection;)Landroid/location/LocationRequest;
 PLcom/android/server/location/geofence/GeofenceManager;->mergeRegistrations(Ljava/util/Collection;)Ljava/lang/Object;
 PLcom/android/server/location/geofence/GeofenceManager;->onLocationChanged(Landroid/location/Location;)V
 PLcom/android/server/location/geofence/GeofenceManager;->onLocationPermissionsChanged(I)V
@@ -26988,6 +28122,7 @@
 HSPLcom/android/server/location/gnss/GnssListenerMultiplexer$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/location/gnss/GnssListenerMultiplexer;)V
 HPLcom/android/server/location/gnss/GnssListenerMultiplexer$$ExternalSyntheticLambda4;->onAppForegroundChanged(IZ)V
 PLcom/android/server/location/gnss/GnssListenerMultiplexer$$ExternalSyntheticLambda5;-><init>(I)V
+PLcom/android/server/location/gnss/GnssListenerMultiplexer$$ExternalSyntheticLambda5;->test(Ljava/lang/Object;)Z
 PLcom/android/server/location/gnss/GnssListenerMultiplexer$$ExternalSyntheticLambda6;-><init>(I)V
 PLcom/android/server/location/gnss/GnssListenerMultiplexer$$ExternalSyntheticLambda6;->test(Ljava/lang/Object;)Z
 HPLcom/android/server/location/gnss/GnssListenerMultiplexer$$ExternalSyntheticLambda7;-><init>(IZ)V
@@ -26999,8 +28134,8 @@
 HPLcom/android/server/location/gnss/GnssListenerMultiplexer$1;->onLocationPermissionsChanged(Ljava/lang/String;)V
 HPLcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;-><init>(Lcom/android/server/location/gnss/GnssListenerMultiplexer;Ljava/lang/Object;Landroid/location/util/identity/CallerIdentity;Landroid/os/IInterface;)V
 PLcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;->getOwner()Lcom/android/server/location/gnss/GnssListenerMultiplexer;
-PLcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;->getOwner()Lcom/android/server/location/listeners/ListenerMultiplexer;
-PLcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;->isForeground()Z
+HPLcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;->getOwner()Lcom/android/server/location/listeners/ListenerMultiplexer;
+HPLcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;->isForeground()Z
 PLcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;->isPermitted()Z
 HPLcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;->onBinderListenerRegister()V
 PLcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;->onBinderListenerUnregister()V
@@ -27025,15 +28160,15 @@
 HSPLcom/android/server/location/gnss/GnssListenerMultiplexer;-><init>(Lcom/android/server/location/injector/Injector;)V
 PLcom/android/server/location/gnss/GnssListenerMultiplexer;->addListener(Landroid/location/util/identity/CallerIdentity;Landroid/os/IInterface;)V
 HPLcom/android/server/location/gnss/GnssListenerMultiplexer;->addListener(Ljava/lang/Object;Landroid/location/util/identity/CallerIdentity;Landroid/os/IInterface;)V
-PLcom/android/server/location/gnss/GnssListenerMultiplexer;->createRegistration(Ljava/lang/Object;Landroid/location/util/identity/CallerIdentity;Landroid/os/IInterface;)Lcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;
+HPLcom/android/server/location/gnss/GnssListenerMultiplexer;->createRegistration(Ljava/lang/Object;Landroid/location/util/identity/CallerIdentity;Landroid/os/IInterface;)Lcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;
 PLcom/android/server/location/gnss/GnssListenerMultiplexer;->getServiceState()Ljava/lang/String;
 PLcom/android/server/location/gnss/GnssListenerMultiplexer;->getTag()Ljava/lang/String;
 HPLcom/android/server/location/gnss/GnssListenerMultiplexer;->isActive(Landroid/location/util/identity/CallerIdentity;)Z
 HPLcom/android/server/location/gnss/GnssListenerMultiplexer;->isActive(Lcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;)Z
-PLcom/android/server/location/gnss/GnssListenerMultiplexer;->isActive(Lcom/android/server/location/listeners/ListenerRegistration;)Z
-PLcom/android/server/location/gnss/GnssListenerMultiplexer;->isBackgroundRestrictionExempt(Landroid/location/util/identity/CallerIdentity;)Z
+HPLcom/android/server/location/gnss/GnssListenerMultiplexer;->isActive(Lcom/android/server/location/listeners/ListenerRegistration;)Z
+HPLcom/android/server/location/gnss/GnssListenerMultiplexer;->isBackgroundRestrictionExempt(Landroid/location/util/identity/CallerIdentity;)Z
 PLcom/android/server/location/gnss/GnssListenerMultiplexer;->isSupported()Z
-HPLcom/android/server/location/gnss/GnssListenerMultiplexer;->lambda$onAppForegroundChanged$6(IZLcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;)Z
+HPLcom/android/server/location/gnss/GnssListenerMultiplexer;->lambda$onAppForegroundChanged$6(IZLcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;)Z+]Lcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;Lcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;,Lcom/android/server/location/gnss/GnssMeasurementsProvider$GnssMeasurementListenerRegistration;
 PLcom/android/server/location/gnss/GnssListenerMultiplexer;->lambda$onLocationPackageBlacklistChanged$3(ILcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;)Z
 HPLcom/android/server/location/gnss/GnssListenerMultiplexer;->lambda$onLocationPermissionsChanged$4(Ljava/lang/String;Lcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;)Z
 PLcom/android/server/location/gnss/GnssListenerMultiplexer;->lambda$onLocationPermissionsChanged$5(ILcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;)Z
@@ -27062,7 +28197,7 @@
 HPLcom/android/server/location/gnss/GnssLocationProvider$$ExternalSyntheticLambda15;->run()V
 HSPLcom/android/server/location/gnss/GnssLocationProvider$$ExternalSyntheticLambda16;-><init>(Lcom/android/server/location/gnss/GnssLocationProvider;[I[I)V
 HSPLcom/android/server/location/gnss/GnssLocationProvider$$ExternalSyntheticLambda16;->run()V
-PLcom/android/server/location/gnss/GnssLocationProvider$$ExternalSyntheticLambda17;-><init>(Lcom/android/server/location/gnss/NtpTimeHelper;)V
+HPLcom/android/server/location/gnss/GnssLocationProvider$$ExternalSyntheticLambda17;-><init>(Lcom/android/server/location/gnss/NtpTimeHelper;)V
 PLcom/android/server/location/gnss/GnssLocationProvider$$ExternalSyntheticLambda17;->run()V
 PLcom/android/server/location/gnss/GnssLocationProvider$$ExternalSyntheticLambda19;-><init>(Lcom/android/server/location/gnss/GnssLocationProvider;I)V
 PLcom/android/server/location/gnss/GnssLocationProvider$$ExternalSyntheticLambda19;->run()V
@@ -27108,8 +28243,8 @@
 HSPLcom/android/server/location/gnss/GnssLocationProvider$LocationExtras;-><init>()V
 HPLcom/android/server/location/gnss/GnssLocationProvider$LocationExtras;->getBundle()Landroid/os/Bundle;
 PLcom/android/server/location/gnss/GnssLocationProvider$LocationExtras;->reset()V
-HPLcom/android/server/location/gnss/GnssLocationProvider$LocationExtras;->set(III)V
-HPLcom/android/server/location/gnss/GnssLocationProvider$LocationExtras;->setBundle(Landroid/os/Bundle;)V
+HPLcom/android/server/location/gnss/GnssLocationProvider$LocationExtras;->set(III)V+]Lcom/android/server/location/gnss/GnssLocationProvider$LocationExtras;Lcom/android/server/location/gnss/GnssLocationProvider$LocationExtras;
+HPLcom/android/server/location/gnss/GnssLocationProvider$LocationExtras;->setBundle(Landroid/os/Bundle;)V+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLcom/android/server/location/gnss/GnssLocationProvider;->$r8$lambda$-PME8ZL8sG3USjmYPKRmOppFXaY(Lcom/android/server/location/gnss/GnssLocationProvider;)V
 HSPLcom/android/server/location/gnss/GnssLocationProvider;->$r8$lambda$2TVxEDDZNUBBc-BZkc4TSpBsNaU(Lcom/android/server/location/gnss/GnssLocationProvider;)V
 PLcom/android/server/location/gnss/GnssLocationProvider;->$r8$lambda$3G6fQXee3gaICwd5J3UURJphHBk(Lcom/android/server/location/gnss/GnssLocationProvider;I)V
@@ -27119,7 +28254,7 @@
 PLcom/android/server/location/gnss/GnssLocationProvider;->$r8$lambda$9sSPMK2HhcdmHWjcYHg7YWQOhr8(Lcom/android/server/location/gnss/GnssLocationProvider;)V
 HPLcom/android/server/location/gnss/GnssLocationProvider;->$r8$lambda$DM2jogNw2zqn2FJTIr0Ka-JQdtY(Lcom/android/server/location/gnss/GnssLocationProvider;Landroid/location/Location;)V
 PLcom/android/server/location/gnss/GnssLocationProvider;->$r8$lambda$I3z4wufSltPA9tPB0gNWMMU18H0(Lcom/android/server/location/gnss/GnssLocationProvider;I)V
-PLcom/android/server/location/gnss/GnssLocationProvider;->$r8$lambda$Wg-yoEB-VMU5sJo1WeAMRYSmm_Y(Lcom/android/server/location/gnss/GnssLocationProvider;Landroid/location/Location;)V
+HPLcom/android/server/location/gnss/GnssLocationProvider;->$r8$lambda$Wg-yoEB-VMU5sJo1WeAMRYSmm_Y(Lcom/android/server/location/gnss/GnssLocationProvider;Landroid/location/Location;)V
 PLcom/android/server/location/gnss/GnssLocationProvider;->$r8$lambda$X56OQCeXikQTYclwmg2TOA-qN_k(Lcom/android/server/location/gnss/GnssLocationProvider;)V
 PLcom/android/server/location/gnss/GnssLocationProvider;->$r8$lambda$XmPA3HNp4E1vT4hOtIgbG1pH2qc(Lcom/android/server/location/gnss/GnssLocationProvider;)V
 HPLcom/android/server/location/gnss/GnssLocationProvider;->$r8$lambda$d8diwu6OeuTd_lLfcGLhHoFukM8(Lcom/android/server/location/gnss/GnssLocationProvider;ZLandroid/location/Location;)V
@@ -27151,7 +28286,7 @@
 HPLcom/android/server/location/gnss/GnssLocationProvider;->handleDownloadPsdsData(I)V
 HSPLcom/android/server/location/gnss/GnssLocationProvider;->handleEnable()V
 HSPLcom/android/server/location/gnss/GnssLocationProvider;->handleInitialize()V
-HPLcom/android/server/location/gnss/GnssLocationProvider;->handleReportLocation(ZLandroid/location/Location;)V
+HPLcom/android/server/location/gnss/GnssLocationProvider;->handleReportLocation(ZLandroid/location/Location;)V+]Lcom/android/server/location/provider/AbstractLocationProvider;Lcom/android/server/location/gnss/GnssLocationProvider;]Lcom/android/server/location/gnss/hal/GnssNative;Lcom/android/server/location/gnss/hal/GnssNative;]Landroid/location/GnssCapabilities;Landroid/location/GnssCapabilities;]Landroid/location/Location;Landroid/location/Location;]Landroid/location/LocationResult;Landroid/location/LocationResult;]Lcom/android/server/location/gnss/GnssLocationProvider$LocationExtras;Lcom/android/server/location/gnss/GnssLocationProvider$LocationExtras;]Lcom/android/server/location/gnss/GnssMetrics;Lcom/android/server/location/gnss/GnssMetrics;
 HPLcom/android/server/location/gnss/GnssLocationProvider;->handleReportSvStatus(Landroid/location/GnssStatus;)V+]Lcom/android/server/location/gnss/GnssLocationProvider$LocationExtras;Lcom/android/server/location/gnss/GnssLocationProvider$LocationExtras;]Landroid/location/GnssStatus;Landroid/location/GnssStatus;]Lcom/android/server/location/gnss/GnssMetrics;Lcom/android/server/location/gnss/GnssMetrics;
 HPLcom/android/server/location/gnss/GnssLocationProvider;->handleRequestLocation(ZZ)V
 PLcom/android/server/location/gnss/GnssLocationProvider;->hibernate()V
@@ -27180,7 +28315,7 @@
 PLcom/android/server/location/gnss/GnssLocationProvider;->onExtraCommand(IILjava/lang/String;Landroid/os/Bundle;)V
 PLcom/android/server/location/gnss/GnssLocationProvider;->onFlush(Ljava/lang/Runnable;)V
 PLcom/android/server/location/gnss/GnssLocationProvider;->onHalRestarted()V
-PLcom/android/server/location/gnss/GnssLocationProvider;->onNetworkAvailable()V
+HPLcom/android/server/location/gnss/GnssLocationProvider;->onNetworkAvailable()V
 HSPLcom/android/server/location/gnss/GnssLocationProvider;->onReportAGpsStatus(II[B)V
 HPLcom/android/server/location/gnss/GnssLocationProvider;->onReportLocation(ZLandroid/location/Location;)V
 HSPLcom/android/server/location/gnss/GnssLocationProvider;->onReportNfwNotification(Ljava/lang/String;BLjava/lang/String;BLjava/lang/String;BZZ)V
@@ -27190,7 +28325,7 @@
 PLcom/android/server/location/gnss/GnssLocationProvider;->onRequestRefLocation()V
 HSPLcom/android/server/location/gnss/GnssLocationProvider;->onRequestSetID(I)V
 PLcom/android/server/location/gnss/GnssLocationProvider;->onRequestUtcTime()V
-PLcom/android/server/location/gnss/GnssLocationProvider;->onSetRequest(Landroid/location/provider/ProviderRequest;)V
+HPLcom/android/server/location/gnss/GnssLocationProvider;->onSetRequest(Landroid/location/provider/ProviderRequest;)V
 HSPLcom/android/server/location/gnss/GnssLocationProvider;->onSystemReady()V
 HSPLcom/android/server/location/gnss/GnssLocationProvider;->onUpdateSatelliteBlocklist([I[I)V
 HPLcom/android/server/location/gnss/GnssLocationProvider;->postWithWakeLockHeld(Ljava/lang/Runnable;)V
@@ -27222,7 +28357,7 @@
 PLcom/android/server/location/gnss/GnssManagerService$GnssGeofenceHalModule$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/location/gnss/GnssManagerService$GnssGeofenceHalModule;II)V
 PLcom/android/server/location/gnss/GnssManagerService$GnssGeofenceHalModule$$ExternalSyntheticLambda2;->run()V
 PLcom/android/server/location/gnss/GnssManagerService$GnssGeofenceHalModule$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/location/gnss/GnssManagerService$GnssGeofenceHalModule;ILandroid/location/Location;IJ)V
-PLcom/android/server/location/gnss/GnssManagerService$GnssGeofenceHalModule$$ExternalSyntheticLambda3;->run()V
+HPLcom/android/server/location/gnss/GnssManagerService$GnssGeofenceHalModule$$ExternalSyntheticLambda3;->run()V
 PLcom/android/server/location/gnss/GnssManagerService$GnssGeofenceHalModule$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/location/gnss/GnssManagerService$GnssGeofenceHalModule;II)V
 PLcom/android/server/location/gnss/GnssManagerService$GnssGeofenceHalModule$$ExternalSyntheticLambda4;->run()V
 PLcom/android/server/location/gnss/GnssManagerService$GnssGeofenceHalModule$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/location/gnss/GnssManagerService$GnssGeofenceHalModule;II)V
@@ -27282,7 +28417,7 @@
 PLcom/android/server/location/gnss/GnssMeasurementsProvider;->createRegistration(Landroid/location/GnssMeasurementRequest;Landroid/location/util/identity/CallerIdentity;Landroid/location/IGnssMeasurementsListener;)Lcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;
 PLcom/android/server/location/gnss/GnssMeasurementsProvider;->createRegistration(Ljava/lang/Object;Landroid/location/util/identity/CallerIdentity;Landroid/os/IInterface;)Lcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;
 PLcom/android/server/location/gnss/GnssMeasurementsProvider;->isSupported()Z
-PLcom/android/server/location/gnss/GnssMeasurementsProvider;->lambda$onReportMeasurements$0(Landroid/location/GnssMeasurementsEvent;Landroid/location/IGnssMeasurementsListener;)V
+HPLcom/android/server/location/gnss/GnssMeasurementsProvider;->lambda$onReportMeasurements$0(Landroid/location/GnssMeasurementsEvent;Landroid/location/IGnssMeasurementsListener;)V
 HPLcom/android/server/location/gnss/GnssMeasurementsProvider;->lambda$onReportMeasurements$1(Landroid/location/GnssMeasurementsEvent;Lcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;)Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;
 PLcom/android/server/location/gnss/GnssMeasurementsProvider;->mergeRegistrations(Ljava/util/Collection;)Landroid/location/GnssMeasurementRequest;
 PLcom/android/server/location/gnss/GnssMeasurementsProvider;->mergeRegistrations(Ljava/util/Collection;)Ljava/lang/Object;
@@ -27320,7 +28455,7 @@
 HPLcom/android/server/location/gnss/GnssMetrics;->logCn0(Landroid/location/GnssStatus;)V+]Lcom/android/server/location/gnss/GnssMetrics$GnssPowerMetrics;Lcom/android/server/location/gnss/GnssMetrics$GnssPowerMetrics;]Lcom/android/server/location/gnss/GnssMetrics$Statistics;Lcom/android/server/location/gnss/GnssMetrics$Statistics;]Landroid/location/GnssStatus;Landroid/location/GnssStatus;]Lcom/android/server/location/gnss/GnssMetrics;Lcom/android/server/location/gnss/GnssMetrics;
 HPLcom/android/server/location/gnss/GnssMetrics;->logCn0L5(Landroid/location/GnssStatus;)V+]Lcom/android/server/location/gnss/GnssMetrics$Statistics;Lcom/android/server/location/gnss/GnssMetrics$Statistics;]Landroid/location/GnssStatus;Landroid/location/GnssStatus;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/lang/Float;Ljava/lang/Float;
 HPLcom/android/server/location/gnss/GnssMetrics;->logConstellationType(I)V
-HPLcom/android/server/location/gnss/GnssMetrics;->logMissedReports(II)V
+HPLcom/android/server/location/gnss/GnssMetrics;->logMissedReports(II)V+]Lcom/android/server/location/gnss/GnssMetrics$Statistics;Lcom/android/server/location/gnss/GnssMetrics$Statistics;
 HPLcom/android/server/location/gnss/GnssMetrics;->logPositionAccuracyMeters(F)V
 HPLcom/android/server/location/gnss/GnssMetrics;->logReceivedLocationStatus(Z)V
 HPLcom/android/server/location/gnss/GnssMetrics;->logSvStatus(Landroid/location/GnssStatus;)V+]Landroid/location/GnssStatus;Landroid/location/GnssStatus;
@@ -27422,7 +28557,7 @@
 HPLcom/android/server/location/gnss/GnssNmeaProvider$1;->$r8$lambda$c8BCN8Y5px1dWGPXpPj4uFdCvpI(Lcom/android/server/location/gnss/GnssNmeaProvider$1;JLandroid/location/IGnssNmeaListener;)V
 HPLcom/android/server/location/gnss/GnssNmeaProvider$1;-><init>(Lcom/android/server/location/gnss/GnssNmeaProvider;J)V
 HPLcom/android/server/location/gnss/GnssNmeaProvider$1;->apply(Lcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;)Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;+]Lcom/android/server/location/gnss/hal/GnssNative;Lcom/android/server/location/gnss/hal/GnssNative;]Lcom/android/server/location/injector/AppOpsHelper;Lcom/android/server/location/injector/SystemAppOpsHelper;]Lcom/android/server/location/listeners/RemoteListenerRegistration;Lcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;
-PLcom/android/server/location/gnss/GnssNmeaProvider$1;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/location/gnss/GnssNmeaProvider$1;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HPLcom/android/server/location/gnss/GnssNmeaProvider$1;->lambda$apply$0(JLandroid/location/IGnssNmeaListener;)V
 HPLcom/android/server/location/gnss/GnssNmeaProvider;->-$$Nest$fgetmAppOpsHelper(Lcom/android/server/location/gnss/GnssNmeaProvider;)Lcom/android/server/location/injector/AppOpsHelper;
 HPLcom/android/server/location/gnss/GnssNmeaProvider;->-$$Nest$fgetmGnssNative(Lcom/android/server/location/gnss/GnssNmeaProvider;)Lcom/android/server/location/gnss/hal/GnssNative;
@@ -27435,9 +28570,18 @@
 PLcom/android/server/location/gnss/GnssNmeaProvider;->registerWithService(Ljava/lang/Void;Ljava/util/Collection;)Z
 PLcom/android/server/location/gnss/GnssNmeaProvider;->unregisterWithService()V
 HPLcom/android/server/location/gnss/GnssPositionMode;-><init>(IIIIIZ)V
-PLcom/android/server/location/gnss/GnssPositionMode;->equals(Ljava/lang/Object;)Z
+HPLcom/android/server/location/gnss/GnssPositionMode;->equals(Ljava/lang/Object;)Z
+PLcom/android/server/location/gnss/GnssPowerStats;-><init>(IJDDDDDD[D)V
+PLcom/android/server/location/gnss/GnssPowerStats;->dump(Ljava/io/FileDescriptor;Landroid/util/IndentingPrintWriter;[Ljava/lang/String;Landroid/location/GnssCapabilities;)V
+PLcom/android/server/location/gnss/GnssPowerStats;->getElapsedRealtimeUncertaintyNanos()D
+PLcom/android/server/location/gnss/GnssPowerStats;->getMultibandAcquisitionModeEnergyMilliJoule()D
 PLcom/android/server/location/gnss/GnssPowerStats;->getMultibandTrackingModeEnergyMilliJoule()D
 PLcom/android/server/location/gnss/GnssPowerStats;->getOtherModesEnergyMilliJoule()[D
+PLcom/android/server/location/gnss/GnssPowerStats;->getSinglebandAcquisitionModeEnergyMilliJoule()D
+PLcom/android/server/location/gnss/GnssPowerStats;->getSinglebandTrackingModeEnergyMilliJoule()D
+PLcom/android/server/location/gnss/GnssPowerStats;->getTotalEnergyMilliJoule()D
+PLcom/android/server/location/gnss/GnssPowerStats;->hasElapsedRealtimeNanos()Z
+PLcom/android/server/location/gnss/GnssPowerStats;->hasElapsedRealtimeUncertaintyNanos()Z
 PLcom/android/server/location/gnss/GnssPsdsDownloader;-><clinit>()V
 HPLcom/android/server/location/gnss/GnssPsdsDownloader;-><init>(Ljava/util/Properties;)V
 HPLcom/android/server/location/gnss/GnssPsdsDownloader;->doDownload(Ljava/lang/String;)[B
@@ -27462,15 +28606,15 @@
 PLcom/android/server/location/gnss/GnssStatusProvider;->$r8$lambda$OOvdvR7P8G5TmaEHtXnCA4lRTgs(ILandroid/location/IGnssStatusListener;)V
 HPLcom/android/server/location/gnss/GnssStatusProvider;->$r8$lambda$WZNS6OuNJPWjG5T913DErtG0aQU(Landroid/location/GnssStatus;Landroid/location/IGnssStatusListener;)V
 HSPLcom/android/server/location/gnss/GnssStatusProvider;-><init>(Lcom/android/server/location/injector/Injector;Lcom/android/server/location/gnss/hal/GnssNative;)V
-PLcom/android/server/location/gnss/GnssStatusProvider;->addListener(Landroid/location/util/identity/CallerIdentity;Landroid/location/IGnssStatusListener;)V
+HPLcom/android/server/location/gnss/GnssStatusProvider;->addListener(Landroid/location/util/identity/CallerIdentity;Landroid/location/IGnssStatusListener;)V
 HPLcom/android/server/location/gnss/GnssStatusProvider;->lambda$onReportFirstFix$0(ILandroid/location/IGnssStatusListener;)V
-HPLcom/android/server/location/gnss/GnssStatusProvider;->lambda$onReportSvStatus$1(Landroid/location/GnssStatus;Landroid/location/IGnssStatusListener;)V
-HPLcom/android/server/location/gnss/GnssStatusProvider;->lambda$onReportSvStatus$2(Landroid/location/GnssStatus;Lcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;)Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;
+HPLcom/android/server/location/gnss/GnssStatusProvider;->lambda$onReportSvStatus$1(Landroid/location/GnssStatus;Landroid/location/IGnssStatusListener;)V+]Landroid/location/IGnssStatusListener;Landroid/location/IGnssStatusListener$Stub$Proxy;
+HPLcom/android/server/location/gnss/GnssStatusProvider;->lambda$onReportSvStatus$2(Landroid/location/GnssStatus;Lcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;)Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;+]Lcom/android/server/location/injector/AppOpsHelper;Lcom/android/server/location/injector/SystemAppOpsHelper;]Lcom/android/server/location/listeners/RemoteListenerRegistration;Lcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;
 PLcom/android/server/location/gnss/GnssStatusProvider;->onHalRestarted()V
 HPLcom/android/server/location/gnss/GnssStatusProvider;->onRegistrationAdded(Landroid/os/IBinder;Lcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;)V
-PLcom/android/server/location/gnss/GnssStatusProvider;->onRegistrationAdded(Ljava/lang/Object;Lcom/android/server/location/listeners/ListenerRegistration;)V
+HPLcom/android/server/location/gnss/GnssStatusProvider;->onRegistrationAdded(Ljava/lang/Object;Lcom/android/server/location/listeners/ListenerRegistration;)V
 HPLcom/android/server/location/gnss/GnssStatusProvider;->onRegistrationRemoved(Landroid/os/IBinder;Lcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;)V
-PLcom/android/server/location/gnss/GnssStatusProvider;->onRegistrationRemoved(Ljava/lang/Object;Lcom/android/server/location/listeners/ListenerRegistration;)V
+HPLcom/android/server/location/gnss/GnssStatusProvider;->onRegistrationRemoved(Ljava/lang/Object;Lcom/android/server/location/listeners/ListenerRegistration;)V
 PLcom/android/server/location/gnss/GnssStatusProvider;->onReportFirstFix(I)V
 HPLcom/android/server/location/gnss/GnssStatusProvider;->onReportStatus(I)V
 HPLcom/android/server/location/gnss/GnssStatusProvider;->onReportSvStatus(Landroid/location/GnssStatus;)V
@@ -27541,7 +28685,7 @@
 HSPLcom/android/server/location/gnss/GnssVisibilityControl;->handleInitialize()V
 HSPLcom/android/server/location/gnss/GnssVisibilityControl;->handleNfwNotification(Lcom/android/server/location/gnss/GnssVisibilityControl$NfwNotification;)V
 HPLcom/android/server/location/gnss/GnssVisibilityControl;->handlePermissionsChanged(I)V
-PLcom/android/server/location/gnss/GnssVisibilityControl;->handleProxyAppPackageUpdate(Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/location/gnss/GnssVisibilityControl;->handleProxyAppPackageUpdate(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/location/gnss/GnssVisibilityControl;->handleUpdateProxyApps(Ljava/util/List;)V
 PLcom/android/server/location/gnss/GnssVisibilityControl;->hasLocationPermission(Ljava/lang/String;)Z
 HSPLcom/android/server/location/gnss/GnssVisibilityControl;->isPermissionMismatched(Lcom/android/server/location/gnss/GnssVisibilityControl$ProxyAppState;Lcom/android/server/location/gnss/GnssVisibilityControl$NfwNotification;)Z
@@ -27561,6 +28705,7 @@
 HSPLcom/android/server/location/gnss/GnssVisibilityControl;->onGpsEnabledChanged(Z)V
 PLcom/android/server/location/gnss/GnssVisibilityControl;->postEmergencyLocationUserNotification(Lcom/android/server/location/gnss/GnssVisibilityControl$NfwNotification;)V
 HSPLcom/android/server/location/gnss/GnssVisibilityControl;->reportNfwNotification(Ljava/lang/String;BLjava/lang/String;BLjava/lang/String;BZZ)V
+PLcom/android/server/location/gnss/GnssVisibilityControl;->resetProxyAppsState()V
 HSPLcom/android/server/location/gnss/GnssVisibilityControl;->runEventAndReleaseWakeLock(Ljava/lang/Runnable;)Ljava/lang/Runnable;
 HSPLcom/android/server/location/gnss/GnssVisibilityControl;->runOnHandler(Ljava/lang/Runnable;)V
 HSPLcom/android/server/location/gnss/GnssVisibilityControl;->setNfwLocationAccessProxyAppsInGnssHal([Ljava/lang/String;)V
@@ -27568,7 +28713,7 @@
 PLcom/android/server/location/gnss/GnssVisibilityControl;->showLocationIcon(Lcom/android/server/location/gnss/GnssVisibilityControl$ProxyAppState;Lcom/android/server/location/gnss/GnssVisibilityControl$NfwNotification;ILjava/lang/String;)V
 PLcom/android/server/location/gnss/GnssVisibilityControl;->updateNfwLocationAccessProxyAppsInGnssHal()V
 PLcom/android/server/location/gnss/NtpTimeHelper$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/location/gnss/NtpTimeHelper;)V
-PLcom/android/server/location/gnss/NtpTimeHelper$$ExternalSyntheticLambda0;->run()V
+HPLcom/android/server/location/gnss/NtpTimeHelper$$ExternalSyntheticLambda0;->run()V
 HPLcom/android/server/location/gnss/NtpTimeHelper$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/location/gnss/NtpTimeHelper;JJJ)V
 HPLcom/android/server/location/gnss/NtpTimeHelper$$ExternalSyntheticLambda1;->run()V
 PLcom/android/server/location/gnss/NtpTimeHelper$InjectNtpTimeCallback;->injectTime(JJI)V
@@ -27608,7 +28753,7 @@
 PLcom/android/server/location/gnss/hal/GnssNative$$ExternalSyntheticLambda20;-><init>(Lcom/android/server/location/gnss/hal/GnssNative;ZZ)V
 PLcom/android/server/location/gnss/hal/GnssNative$$ExternalSyntheticLambda20;->runOrThrow()V
 HPLcom/android/server/location/gnss/hal/GnssNative$$ExternalSyntheticLambda21;-><init>(Lcom/android/server/location/gnss/hal/GnssNative;I)V
-PLcom/android/server/location/gnss/hal/GnssNative$$ExternalSyntheticLambda21;->runOrThrow()V
+HPLcom/android/server/location/gnss/hal/GnssNative$$ExternalSyntheticLambda21;->runOrThrow()V
 HPLcom/android/server/location/gnss/hal/GnssNative$$ExternalSyntheticLambda22;-><init>(Lcom/android/server/location/gnss/hal/GnssNative;I)V
 HPLcom/android/server/location/gnss/hal/GnssNative$$ExternalSyntheticLambda22;->runOrThrow()V
 HPLcom/android/server/location/gnss/hal/GnssNative$$ExternalSyntheticLambda23;-><init>(Lcom/android/server/location/gnss/hal/GnssNative;Landroid/location/GnssMeasurementsEvent;)V
@@ -27617,8 +28762,8 @@
 PLcom/android/server/location/gnss/hal/GnssNative$$ExternalSyntheticLambda24;->runOrThrow()V
 PLcom/android/server/location/gnss/hal/GnssNative$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/location/gnss/hal/GnssNative;Landroid/location/GnssNavigationMessage;)V
 PLcom/android/server/location/gnss/hal/GnssNative$$ExternalSyntheticLambda2;->runOrThrow()V
-PLcom/android/server/location/gnss/hal/GnssNative$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/location/gnss/hal/GnssNative;)V
-PLcom/android/server/location/gnss/hal/GnssNative$$ExternalSyntheticLambda3;->runOrThrow()V
+HPLcom/android/server/location/gnss/hal/GnssNative$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/location/gnss/hal/GnssNative;)V
+HPLcom/android/server/location/gnss/hal/GnssNative$$ExternalSyntheticLambda3;->runOrThrow()V
 PLcom/android/server/location/gnss/hal/GnssNative$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/location/gnss/hal/GnssNative;II)V
 PLcom/android/server/location/gnss/hal/GnssNative$$ExternalSyntheticLambda4;->runOrThrow()V
 PLcom/android/server/location/gnss/hal/GnssNative$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/location/gnss/hal/GnssNative;)V
@@ -27648,7 +28793,7 @@
 HSPLcom/android/server/location/gnss/hal/GnssNative$GnssHal;->initOnce(Lcom/android/server/location/gnss/hal/GnssNative;Z)V
 PLcom/android/server/location/gnss/hal/GnssNative$GnssHal;->injectBestLocation(IDDDFFFFFFJIJD)V
 PLcom/android/server/location/gnss/hal/GnssNative$GnssHal;->injectLocation(IDDDFFFFFFJIJD)V
-PLcom/android/server/location/gnss/hal/GnssNative$GnssHal;->injectMeasurementCorrections(Landroid/location/GnssMeasurementCorrections;)Z
+HPLcom/android/server/location/gnss/hal/GnssNative$GnssHal;->injectMeasurementCorrections(Landroid/location/GnssMeasurementCorrections;)Z
 PLcom/android/server/location/gnss/hal/GnssNative$GnssHal;->injectPsdsData([BII)V
 PLcom/android/server/location/gnss/hal/GnssNative$GnssHal;->injectTime(JJI)V
 PLcom/android/server/location/gnss/hal/GnssNative$GnssHal;->isAntennaInfoSupported()Z
@@ -27660,6 +28805,7 @@
 HSPLcom/android/server/location/gnss/hal/GnssNative$GnssHal;->isSupported()Z
 HPLcom/android/server/location/gnss/hal/GnssNative$GnssHal;->readNmea([BI)I
 PLcom/android/server/location/gnss/hal/GnssNative$GnssHal;->removeGeofence(I)Z
+PLcom/android/server/location/gnss/hal/GnssNative$GnssHal;->requestPowerStats()V
 PLcom/android/server/location/gnss/hal/GnssNative$GnssHal;->resumeGeofence(II)Z
 PLcom/android/server/location/gnss/hal/GnssNative$GnssHal;->setAgpsReferenceLocationCellId(IIIIJIII)V
 HSPLcom/android/server/location/gnss/hal/GnssNative$GnssHal;->setAgpsServer(ILjava/lang/String;I)V
@@ -27694,7 +28840,7 @@
 PLcom/android/server/location/gnss/hal/GnssNative;->$r8$lambda$VTQWAy6iOlvVRfkOFCXMkkR9WEY(Lcom/android/server/location/gnss/hal/GnssNative;Ljava/util/List;)V
 PLcom/android/server/location/gnss/hal/GnssNative;->$r8$lambda$Wt0Fu4sXwDSMGXCAKfkDw8xy80k(Lcom/android/server/location/gnss/hal/GnssNative;ILandroid/location/Location;IJ)V
 PLcom/android/server/location/gnss/hal/GnssNative;->$r8$lambda$a-ReNZr-dLy097ri0YGmus5XNRU(Lcom/android/server/location/gnss/hal/GnssNative;II)V
-PLcom/android/server/location/gnss/hal/GnssNative;->$r8$lambda$jEM5X8sFYZlY-UxkyOQCvy5kXHg(Lcom/android/server/location/gnss/hal/GnssNative;Landroid/location/GnssMeasurementsEvent;)V
+HPLcom/android/server/location/gnss/hal/GnssNative;->$r8$lambda$jEM5X8sFYZlY-UxkyOQCvy5kXHg(Lcom/android/server/location/gnss/hal/GnssNative;Landroid/location/GnssMeasurementsEvent;)V
 HPLcom/android/server/location/gnss/hal/GnssNative;->$r8$lambda$oi7FVbBGUNNVo0TOsZfRar3Q4ls(Lcom/android/server/location/gnss/hal/GnssNative;J)V
 PLcom/android/server/location/gnss/hal/GnssNative;->$r8$lambda$ptijmDJTy_M5ybZQYxpnj__LnS0(Lcom/android/server/location/gnss/hal/GnssNative;I)V
 HPLcom/android/server/location/gnss/hal/GnssNative;->$r8$lambda$qT7spbUsaV1Q5U2u9bsJfeLkCQg(Lcom/android/server/location/gnss/hal/GnssNative;I[I[F[F[F[F[F)V
@@ -27714,8 +28860,8 @@
 HSPLcom/android/server/location/gnss/hal/GnssNative;->-$$Nest$smnative_init()Z
 HSPLcom/android/server/location/gnss/hal/GnssNative;->-$$Nest$smnative_init_batching()Z
 PLcom/android/server/location/gnss/hal/GnssNative;->-$$Nest$smnative_inject_best_location(IDDDFFFFFFJIJD)V
-PLcom/android/server/location/gnss/hal/GnssNative;->-$$Nest$smnative_inject_location(IDDDFFFFFFJIJD)V
-PLcom/android/server/location/gnss/hal/GnssNative;->-$$Nest$smnative_inject_measurement_corrections(Landroid/location/GnssMeasurementCorrections;)Z
+HPLcom/android/server/location/gnss/hal/GnssNative;->-$$Nest$smnative_inject_location(IDDDFFFFFFJIJD)V
+HPLcom/android/server/location/gnss/hal/GnssNative;->-$$Nest$smnative_inject_measurement_corrections(Landroid/location/GnssMeasurementCorrections;)Z
 PLcom/android/server/location/gnss/hal/GnssNative;->-$$Nest$smnative_inject_psds_data([BII)V
 PLcom/android/server/location/gnss/hal/GnssNative;->-$$Nest$smnative_inject_time(JJI)V
 PLcom/android/server/location/gnss/hal/GnssNative;->-$$Nest$smnative_is_antenna_info_supported()Z
@@ -27806,7 +28952,7 @@
 PLcom/android/server/location/gnss/hal/GnssNative;->lambda$requestLocation$19(ZZ)V
 PLcom/android/server/location/gnss/hal/GnssNative;->lambda$requestRefLocation$21()V
 HSPLcom/android/server/location/gnss/hal/GnssNative;->lambda$requestSetID$18(I)V
-PLcom/android/server/location/gnss/hal/GnssNative;->lambda$requestUtcTime$20()V
+HPLcom/android/server/location/gnss/hal/GnssNative;->lambda$requestUtcTime$20()V
 PLcom/android/server/location/gnss/hal/GnssNative;->native_agps_set_ref_location_cellid(IIIIJIII)V
 PLcom/android/server/location/gnss/hal/GnssNative;->native_class_init_once()V
 PLcom/android/server/location/gnss/hal/GnssNative;->native_cleanup()V
@@ -27828,7 +28974,7 @@
 HPLcom/android/server/location/gnss/hal/GnssNative;->reportMeasurementData(Landroid/location/GnssMeasurementsEvent;)V
 HSPLcom/android/server/location/gnss/hal/GnssNative;->reportNfwNotification(Ljava/lang/String;BLjava/lang/String;BLjava/lang/String;BZZ)V
 HPLcom/android/server/location/gnss/hal/GnssNative;->reportNmea(J)V
-PLcom/android/server/location/gnss/hal/GnssNative;->reportStatus(I)V
+HPLcom/android/server/location/gnss/hal/GnssNative;->reportStatus(I)V
 HPLcom/android/server/location/gnss/hal/GnssNative;->reportSvStatus(I[I[F[F[F[F[F)V
 PLcom/android/server/location/gnss/hal/GnssNative;->requestLocation(ZZ)V
 PLcom/android/server/location/gnss/hal/GnssNative;->requestPowerStats()V
@@ -27847,7 +28993,7 @@
 HSPLcom/android/server/location/gnss/hal/GnssNative;->setGnssYearOfHardware(I)V
 HSPLcom/android/server/location/gnss/hal/GnssNative;->setLocationRequestCallbacks(Lcom/android/server/location/gnss/hal/GnssNative$LocationRequestCallbacks;)V
 HSPLcom/android/server/location/gnss/hal/GnssNative;->setNotificationCallbacks(Lcom/android/server/location/gnss/hal/GnssNative$NotificationCallbacks;)V
-PLcom/android/server/location/gnss/hal/GnssNative;->setPositionMode(IIIIIZ)Z
+HPLcom/android/server/location/gnss/hal/GnssNative;->setPositionMode(IIIIIZ)Z
 HSPLcom/android/server/location/gnss/hal/GnssNative;->setPsdsCallbacks(Lcom/android/server/location/gnss/hal/GnssNative$PsdsCallbacks;)V
 HSPLcom/android/server/location/gnss/hal/GnssNative;->setSubHalMeasurementCorrectionsCapabilities(I)V
 HSPLcom/android/server/location/gnss/hal/GnssNative;->setSubHalPowerIndicationCapabilities(I)V
@@ -27860,7 +29006,7 @@
 PLcom/android/server/location/gnss/hal/GnssNative;->startNavigationMessageCollection()Z
 PLcom/android/server/location/gnss/hal/GnssNative;->startNmeaMessageCollection()Z
 PLcom/android/server/location/gnss/hal/GnssNative;->startSvStatusCollection()Z
-PLcom/android/server/location/gnss/hal/GnssNative;->stop()Z
+HPLcom/android/server/location/gnss/hal/GnssNative;->stop()Z
 PLcom/android/server/location/gnss/hal/GnssNative;->stopAntennaInfoListening()Z
 PLcom/android/server/location/gnss/hal/GnssNative;->stopBatch()V
 PLcom/android/server/location/gnss/hal/GnssNative;->stopMeasurementCollection()Z
@@ -27875,7 +29021,7 @@
 HSPLcom/android/server/location/injector/AppForegroundHelper;->addListener(Lcom/android/server/location/injector/AppForegroundHelper$AppForegroundListener;)V
 HSPLcom/android/server/location/injector/AppForegroundHelper;->isForeground(I)Z
 HSPLcom/android/server/location/injector/AppForegroundHelper;->notifyAppForeground(IZ)V+]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Ljava/util/Iterator;Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;]Lcom/android/server/location/injector/AppForegroundHelper$AppForegroundListener;Lcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda9;,Lcom/android/server/location/gnss/GnssListenerMultiplexer$$ExternalSyntheticLambda4;
-PLcom/android/server/location/injector/AppForegroundHelper;->removeListener(Lcom/android/server/location/injector/AppForegroundHelper$AppForegroundListener;)V
+HPLcom/android/server/location/injector/AppForegroundHelper;->removeListener(Lcom/android/server/location/injector/AppForegroundHelper$AppForegroundListener;)V
 HSPLcom/android/server/location/injector/AppOpsHelper;-><init>()V
 HSPLcom/android/server/location/injector/AppOpsHelper;->addListener(Lcom/android/server/location/injector/AppOpsHelper$LocationAppOpListener;)V
 PLcom/android/server/location/injector/AppOpsHelper;->checkOpNoThrow(ILandroid/location/util/identity/CallerIdentity;)Z
@@ -27902,14 +29048,14 @@
 HSPLcom/android/server/location/injector/LocationPermissionsHelper;->hasLocationPermissions(ILandroid/location/util/identity/CallerIdentity;)Z
 PLcom/android/server/location/injector/LocationPermissionsHelper;->hasPermission(Ljava/lang/String;Landroid/location/util/identity/CallerIdentity;)Z
 HPLcom/android/server/location/injector/LocationPermissionsHelper;->notifyLocationPermissionsChanged(I)V
-HSPLcom/android/server/location/injector/LocationPermissionsHelper;->notifyLocationPermissionsChanged(Ljava/lang/String;)V
+HSPLcom/android/server/location/injector/LocationPermissionsHelper;->notifyLocationPermissionsChanged(Ljava/lang/String;)V+]Lcom/android/server/location/injector/LocationPermissionsHelper$LocationPermissionsListener;Lcom/android/server/location/provider/LocationProviderManager$1;,Lcom/android/server/location/gnss/GnssListenerMultiplexer$1;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Ljava/util/Iterator;Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;
 HSPLcom/android/server/location/injector/LocationPermissionsHelper;->onAppOpsChanged(Ljava/lang/String;)V
-PLcom/android/server/location/injector/LocationPermissionsHelper;->removeListener(Lcom/android/server/location/injector/LocationPermissionsHelper$LocationPermissionsListener;)V
+HPLcom/android/server/location/injector/LocationPermissionsHelper;->removeListener(Lcom/android/server/location/injector/LocationPermissionsHelper$LocationPermissionsListener;)V
 PLcom/android/server/location/injector/LocationPowerSaveModeHelper$LocationPowerSaveModeChangedListener;->onLocationPowerSaveModeChanged(I)V
 HSPLcom/android/server/location/injector/LocationPowerSaveModeHelper;-><init>()V
 HSPLcom/android/server/location/injector/LocationPowerSaveModeHelper;->addListener(Lcom/android/server/location/injector/LocationPowerSaveModeHelper$LocationPowerSaveModeChangedListener;)V
 PLcom/android/server/location/injector/LocationPowerSaveModeHelper;->notifyLocationPowerSaveModeChanged(I)V
-PLcom/android/server/location/injector/LocationPowerSaveModeHelper;->removeListener(Lcom/android/server/location/injector/LocationPowerSaveModeHelper$LocationPowerSaveModeChangedListener;)V
+HPLcom/android/server/location/injector/LocationPowerSaveModeHelper;->removeListener(Lcom/android/server/location/injector/LocationPowerSaveModeHelper$LocationPowerSaveModeChangedListener;)V
 HSPLcom/android/server/location/injector/LocationUsageLogger;-><init>()V
 HSPLcom/android/server/location/injector/LocationUsageLogger;->bucketizeDistance(F)I
 HSPLcom/android/server/location/injector/LocationUsageLogger;->bucketizeExpireIn(J)I
@@ -27926,7 +29072,7 @@
 HSPLcom/android/server/location/injector/ScreenInteractiveHelper;->addListener(Lcom/android/server/location/injector/ScreenInteractiveHelper$ScreenInteractiveChangedListener;)V
 PLcom/android/server/location/injector/ScreenInteractiveHelper;->isInteractive()Z
 HPLcom/android/server/location/injector/ScreenInteractiveHelper;->notifyScreenInteractiveChanged(Z)V
-PLcom/android/server/location/injector/ScreenInteractiveHelper;->removeListener(Lcom/android/server/location/injector/ScreenInteractiveHelper$ScreenInteractiveChangedListener;)V
+HPLcom/android/server/location/injector/ScreenInteractiveHelper;->removeListener(Lcom/android/server/location/injector/ScreenInteractiveHelper$ScreenInteractiveChangedListener;)V
 HPLcom/android/server/location/injector/SettingsHelper$GlobalSettingChangedListener;->onSettingChanged(I)V
 HSPLcom/android/server/location/injector/SettingsHelper;-><init>()V
 PLcom/android/server/location/injector/SettingsHelper;->addAdasAllowlistChangedListener(Lcom/android/server/location/injector/SettingsHelper$GlobalSettingChangedListener;)V
@@ -28022,7 +29168,7 @@
 PLcom/android/server/location/injector/SystemSettingsHelper$DeviceConfigSetting;->onPropertiesChanged()V
 PLcom/android/server/location/injector/SystemSettingsHelper$DeviceConfigSetting;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
 HSPLcom/android/server/location/injector/SystemSettingsHelper$DeviceConfigSetting;->register()V
-PLcom/android/server/location/injector/SystemSettingsHelper$DeviceConfigSetting;->removeListener(Lcom/android/server/location/injector/SettingsHelper$GlobalSettingChangedListener;)V
+HPLcom/android/server/location/injector/SystemSettingsHelper$DeviceConfigSetting;->removeListener(Lcom/android/server/location/injector/SettingsHelper$GlobalSettingChangedListener;)V
 HSPLcom/android/server/location/injector/SystemSettingsHelper$IntegerSecureSetting;-><init>(Landroid/content/Context;Ljava/lang/String;Landroid/os/Handler;)V
 HSPLcom/android/server/location/injector/SystemSettingsHelper$IntegerSecureSetting;->getValueForUser(II)I+]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLcom/android/server/location/injector/SystemSettingsHelper$IntegerSecureSetting;->register()V
@@ -28034,7 +29180,7 @@
 HSPLcom/android/server/location/injector/SystemSettingsHelper$ObservingSetting;->isRegistered()Z
 HPLcom/android/server/location/injector/SystemSettingsHelper$ObservingSetting;->onChange(ZLandroid/net/Uri;I)V
 HSPLcom/android/server/location/injector/SystemSettingsHelper$ObservingSetting;->register(Landroid/content/Context;Landroid/net/Uri;)V
-PLcom/android/server/location/injector/SystemSettingsHelper$ObservingSetting;->removeListener(Lcom/android/server/location/injector/SettingsHelper$UserSettingChangedListener;)V
+HPLcom/android/server/location/injector/SystemSettingsHelper$ObservingSetting;->removeListener(Lcom/android/server/location/injector/SettingsHelper$UserSettingChangedListener;)V
 HSPLcom/android/server/location/injector/SystemSettingsHelper$PackageTagsListSetting;-><init>(Ljava/lang/String;Ljava/util/function/Supplier;)V
 HSPLcom/android/server/location/injector/SystemSettingsHelper$PackageTagsListSetting;->getValue()Landroid/os/PackageTagsList;
 PLcom/android/server/location/injector/SystemSettingsHelper$PackageTagsListSetting;->invalidate()V
@@ -28068,16 +29214,16 @@
 HSPLcom/android/server/location/injector/SystemSettingsHelper;->getCoarseLocationAccuracyM()F
 HSPLcom/android/server/location/injector/SystemSettingsHelper;->getIgnoreSettingsAllowlist()Landroid/os/PackageTagsList;
 PLcom/android/server/location/injector/SystemSettingsHelper;->isGnssMeasurementsFullTrackingEnabled()Z
-HSPLcom/android/server/location/injector/SystemSettingsHelper;->isLocationEnabled(I)Z
+HSPLcom/android/server/location/injector/SystemSettingsHelper;->isLocationEnabled(I)Z+]Lcom/android/server/location/injector/SystemSettingsHelper$IntegerSecureSetting;Lcom/android/server/location/injector/SystemSettingsHelper$IntegerSecureSetting;
 HPLcom/android/server/location/injector/SystemSettingsHelper;->isLocationPackageBlacklisted(ILjava/lang/String;)Z
 HSPLcom/android/server/location/injector/SystemSettingsHelper;->lambda$new$0()Landroid/util/ArraySet;
 HSPLcom/android/server/location/injector/SystemSettingsHelper;->lambda$new$1()Landroid/util/ArrayMap;
 HSPLcom/android/server/location/injector/SystemSettingsHelper;->lambda$new$2()Landroid/util/ArrayMap;
 HSPLcom/android/server/location/injector/SystemSettingsHelper;->onSystemReady()V
-PLcom/android/server/location/injector/SystemSettingsHelper;->removeAdasAllowlistChangedListener(Lcom/android/server/location/injector/SettingsHelper$GlobalSettingChangedListener;)V
-PLcom/android/server/location/injector/SystemSettingsHelper;->removeIgnoreSettingsAllowlistChangedListener(Lcom/android/server/location/injector/SettingsHelper$GlobalSettingChangedListener;)V
+HPLcom/android/server/location/injector/SystemSettingsHelper;->removeAdasAllowlistChangedListener(Lcom/android/server/location/injector/SettingsHelper$GlobalSettingChangedListener;)V
+HPLcom/android/server/location/injector/SystemSettingsHelper;->removeIgnoreSettingsAllowlistChangedListener(Lcom/android/server/location/injector/SettingsHelper$GlobalSettingChangedListener;)V
 HPLcom/android/server/location/injector/SystemSettingsHelper;->removeOnBackgroundThrottleIntervalChangedListener(Lcom/android/server/location/injector/SettingsHelper$GlobalSettingChangedListener;)V
-PLcom/android/server/location/injector/SystemSettingsHelper;->removeOnBackgroundThrottlePackageWhitelistChangedListener(Lcom/android/server/location/injector/SettingsHelper$GlobalSettingChangedListener;)V
+HPLcom/android/server/location/injector/SystemSettingsHelper;->removeOnBackgroundThrottlePackageWhitelistChangedListener(Lcom/android/server/location/injector/SettingsHelper$GlobalSettingChangedListener;)V
 PLcom/android/server/location/injector/SystemSettingsHelper;->removeOnGnssMeasurementsFullTrackingEnabledChangedListener(Lcom/android/server/location/injector/SettingsHelper$GlobalSettingChangedListener;)V
 PLcom/android/server/location/injector/SystemSettingsHelper;->removeOnLocationEnabledChangedListener(Lcom/android/server/location/injector/SettingsHelper$UserSettingChangedListener;)V
 HPLcom/android/server/location/injector/SystemSettingsHelper;->removeOnLocationPackageBlacklistChangedListener(Lcom/android/server/location/injector/SettingsHelper$UserSettingChangedListener;)V
@@ -28109,19 +29255,19 @@
 HPLcom/android/server/location/listeners/BinderListenerRegistration;->onRemovableListenerUnregister()V
 HSPLcom/android/server/location/listeners/ListenerMultiplexer$ReentrancyGuard;-><init>(Lcom/android/server/location/listeners/ListenerMultiplexer;)V
 HSPLcom/android/server/location/listeners/ListenerMultiplexer$ReentrancyGuard;->acquire()Lcom/android/server/location/listeners/ListenerMultiplexer$ReentrancyGuard;
-HSPLcom/android/server/location/listeners/ListenerMultiplexer$ReentrancyGuard;->close()V+]Ljava/util/Map$Entry;Ljava/util/AbstractMap$SimpleImmutableEntry;]Lcom/android/server/location/listeners/ListenerMultiplexer;Lcom/android/server/location/gnss/GnssStatusProvider;,Lcom/android/server/location/provider/PassiveLocationProviderManager;,Lcom/android/server/location/provider/LocationProviderManager;,Lcom/android/server/location/geofence/GeofenceManager;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/location/listeners/ListenerMultiplexer$UpdateServiceBuffer;Lcom/android/server/location/listeners/ListenerMultiplexer$UpdateServiceBuffer;
+HSPLcom/android/server/location/listeners/ListenerMultiplexer$ReentrancyGuard;->close()V+]Ljava/util/Map$Entry;Ljava/util/AbstractMap$SimpleImmutableEntry;]Lcom/android/server/location/listeners/ListenerMultiplexer;Lcom/android/server/location/gnss/GnssStatusProvider;,Lcom/android/server/location/geofence/GeofenceManager;,Lcom/android/server/location/provider/PassiveLocationProviderManager;,Lcom/android/server/location/provider/LocationProviderManager;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/location/listeners/ListenerMultiplexer$UpdateServiceBuffer;Lcom/android/server/location/listeners/ListenerMultiplexer$UpdateServiceBuffer;
 HSPLcom/android/server/location/listeners/ListenerMultiplexer$ReentrancyGuard;->isReentrant()Z
 PLcom/android/server/location/listeners/ListenerMultiplexer$ReentrancyGuard;->markForRemoval(Ljava/lang/Object;Lcom/android/server/location/listeners/ListenerRegistration;)V
 HSPLcom/android/server/location/listeners/ListenerMultiplexer$UpdateServiceBuffer;-><init>(Lcom/android/server/location/listeners/ListenerMultiplexer;)V
 HSPLcom/android/server/location/listeners/ListenerMultiplexer$UpdateServiceBuffer;->acquire()Lcom/android/server/location/listeners/ListenerMultiplexer$UpdateServiceBuffer;
 HSPLcom/android/server/location/listeners/ListenerMultiplexer$UpdateServiceBuffer;->close()V+]Lcom/android/server/location/listeners/ListenerMultiplexer;megamorphic_types
 HPLcom/android/server/location/listeners/ListenerMultiplexer$UpdateServiceBuffer;->isBuffered()Z
-HPLcom/android/server/location/listeners/ListenerMultiplexer$UpdateServiceBuffer;->markUpdateServiceRequired()V
+HPLcom/android/server/location/listeners/ListenerMultiplexer$UpdateServiceBuffer;->markUpdateServiceRequired()V+]Lcom/android/server/location/listeners/ListenerMultiplexer$UpdateServiceBuffer;Lcom/android/server/location/listeners/ListenerMultiplexer$UpdateServiceBuffer;
 HSPLcom/android/server/location/listeners/ListenerMultiplexer;->-$$Nest$fgetmRegistrations(Lcom/android/server/location/listeners/ListenerMultiplexer;)Landroid/util/ArrayMap;
 PLcom/android/server/location/listeners/ListenerMultiplexer;->-$$Nest$fgetmUpdateServiceBuffer(Lcom/android/server/location/listeners/ListenerMultiplexer;)Lcom/android/server/location/listeners/ListenerMultiplexer$UpdateServiceBuffer;
 HSPLcom/android/server/location/listeners/ListenerMultiplexer;-><init>()V
 HPLcom/android/server/location/listeners/ListenerMultiplexer;->deliverToListeners(Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;)V
-HPLcom/android/server/location/listeners/ListenerMultiplexer;->deliverToListeners(Ljava/util/function/Function;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/function/Function;Lcom/android/server/location/gnss/GnssMeasurementsProvider$$ExternalSyntheticLambda0;,Lcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda26;,Lcom/android/server/location/gnss/GnssStatusProvider$$ExternalSyntheticLambda3;,Lcom/android/server/location/gnss/GnssNmeaProvider$1;]Lcom/android/server/location/listeners/ListenerMultiplexer$ReentrancyGuard;Lcom/android/server/location/listeners/ListenerMultiplexer$ReentrancyGuard;]Lcom/android/server/location/listeners/ListenerRegistration;megamorphic_types
+HPLcom/android/server/location/listeners/ListenerMultiplexer;->deliverToListeners(Ljava/util/function/Function;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/function/Function;Lcom/android/server/location/gnss/GnssNmeaProvider$1;,Lcom/android/server/location/gnss/GnssMeasurementsProvider$$ExternalSyntheticLambda0;,Lcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda26;,Lcom/android/server/location/gnss/GnssStatusProvider$$ExternalSyntheticLambda3;,Lcom/android/server/location/geofence/GeofenceManager$$ExternalSyntheticLambda0;]Lcom/android/server/location/listeners/ListenerMultiplexer$ReentrancyGuard;Lcom/android/server/location/listeners/ListenerMultiplexer$ReentrancyGuard;]Lcom/android/server/location/listeners/ListenerRegistration;megamorphic_types
 HPLcom/android/server/location/listeners/ListenerMultiplexer;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/location/listeners/ListenerMultiplexer;->getServiceState()Ljava/lang/String;
 PLcom/android/server/location/listeners/ListenerMultiplexer;->getTag()Ljava/lang/String;
@@ -28145,7 +29291,7 @@
 HPLcom/android/server/location/listeners/ListenerMultiplexer;->unregisterWithService()V
 PLcom/android/server/location/listeners/ListenerMultiplexer;->updateRegistration(Ljava/lang/Object;Ljava/util/function/Predicate;)Z
 HSPLcom/android/server/location/listeners/ListenerMultiplexer;->updateRegistrations(Ljava/util/function/Predicate;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/location/listeners/ListenerMultiplexer$ReentrancyGuard;Lcom/android/server/location/listeners/ListenerMultiplexer$ReentrancyGuard;]Lcom/android/server/location/listeners/ListenerMultiplexer;megamorphic_types]Ljava/util/function/Predicate;megamorphic_types]Lcom/android/server/location/listeners/ListenerMultiplexer$UpdateServiceBuffer;Lcom/android/server/location/listeners/ListenerMultiplexer$UpdateServiceBuffer;
-HPLcom/android/server/location/listeners/ListenerMultiplexer;->updateService()V
+HPLcom/android/server/location/listeners/ListenerMultiplexer;->updateService()V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/location/listeners/ListenerMultiplexer;megamorphic_types]Lcom/android/server/location/listeners/ListenerRegistration;Lcom/android/server/location/provider/LocationProviderManager$GetCurrentLocationListenerRegistration;,Lcom/android/server/location/gnss/GnssListenerMultiplexer$GnssListenerRegistration;,Lcom/android/server/location/gnss/GnssMeasurementsProvider$GnssMeasurementListenerRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/location/listeners/ListenerMultiplexer$UpdateServiceBuffer;Lcom/android/server/location/listeners/ListenerMultiplexer$UpdateServiceBuffer;
 HPLcom/android/server/location/listeners/ListenerRegistration$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/location/listeners/ListenerRegistration;)V
 HPLcom/android/server/location/listeners/ListenerRegistration$$ExternalSyntheticLambda0;->get()Ljava/lang/Object;
 HPLcom/android/server/location/listeners/ListenerRegistration$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/location/listeners/ListenerRegistration;)V
@@ -28255,19 +29401,19 @@
 HSPLcom/android/server/location/provider/AbstractLocationProvider;->setState(Ljava/util/function/UnaryOperator;)V
 HSPLcom/android/server/location/provider/DelegateLocationProvider$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/location/provider/DelegateLocationProvider;)V
 HSPLcom/android/server/location/provider/DelegateLocationProvider$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/location/provider/DelegateLocationProvider$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/location/provider/AbstractLocationProvider$State;)V
-PLcom/android/server/location/provider/DelegateLocationProvider$$ExternalSyntheticLambda1;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/location/provider/DelegateLocationProvider$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/location/provider/AbstractLocationProvider$State;)V
+HSPLcom/android/server/location/provider/DelegateLocationProvider$$ExternalSyntheticLambda1;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/location/provider/DelegateLocationProvider;->$r8$lambda$IKKYeG5_gaJ76mwSBDV3w5L2Dw8(Lcom/android/server/location/provider/DelegateLocationProvider;Lcom/android/server/location/provider/AbstractLocationProvider$State;)Lcom/android/server/location/provider/AbstractLocationProvider$State;
-PLcom/android/server/location/provider/DelegateLocationProvider;->$r8$lambda$TqAFbBo8CtMGUp4wkhnbnR8IVMU(Lcom/android/server/location/provider/AbstractLocationProvider$State;Lcom/android/server/location/provider/AbstractLocationProvider$State;)Lcom/android/server/location/provider/AbstractLocationProvider$State;
+HSPLcom/android/server/location/provider/DelegateLocationProvider;->$r8$lambda$TqAFbBo8CtMGUp4wkhnbnR8IVMU(Lcom/android/server/location/provider/AbstractLocationProvider$State;Lcom/android/server/location/provider/AbstractLocationProvider$State;)Lcom/android/server/location/provider/AbstractLocationProvider$State;
 HSPLcom/android/server/location/provider/DelegateLocationProvider;-><init>(Ljava/util/concurrent/Executor;Lcom/android/server/location/provider/AbstractLocationProvider;)V
 HSPLcom/android/server/location/provider/DelegateLocationProvider;->initializeDelegate()V
 HSPLcom/android/server/location/provider/DelegateLocationProvider;->lambda$initializeDelegate$0(Lcom/android/server/location/provider/AbstractLocationProvider$State;)Lcom/android/server/location/provider/AbstractLocationProvider$State;
-PLcom/android/server/location/provider/DelegateLocationProvider;->lambda$onStateChanged$1(Lcom/android/server/location/provider/AbstractLocationProvider$State;Lcom/android/server/location/provider/AbstractLocationProvider$State;)Lcom/android/server/location/provider/AbstractLocationProvider$State;
+HSPLcom/android/server/location/provider/DelegateLocationProvider;->lambda$onStateChanged$1(Lcom/android/server/location/provider/AbstractLocationProvider$State;Lcom/android/server/location/provider/AbstractLocationProvider$State;)Lcom/android/server/location/provider/AbstractLocationProvider$State;
 PLcom/android/server/location/provider/DelegateLocationProvider;->onExtraCommand(IILjava/lang/String;Landroid/os/Bundle;)V
 PLcom/android/server/location/provider/DelegateLocationProvider;->onFlush(Ljava/lang/Runnable;)V
 HPLcom/android/server/location/provider/DelegateLocationProvider;->onReportLocation(Landroid/location/LocationResult;)V
-PLcom/android/server/location/provider/DelegateLocationProvider;->onStateChanged(Lcom/android/server/location/provider/AbstractLocationProvider$State;Lcom/android/server/location/provider/AbstractLocationProvider$State;)V
-HPLcom/android/server/location/provider/DelegateLocationProvider;->waitForInitialization()V
+HSPLcom/android/server/location/provider/DelegateLocationProvider;->onStateChanged(Lcom/android/server/location/provider/AbstractLocationProvider$State;Lcom/android/server/location/provider/AbstractLocationProvider$State;)V
+HSPLcom/android/server/location/provider/DelegateLocationProvider;->waitForInitialization()V
 PLcom/android/server/location/provider/LocationProviderController;->flush(Ljava/lang/Runnable;)V
 PLcom/android/server/location/provider/LocationProviderController;->isStarted()Z
 PLcom/android/server/location/provider/LocationProviderController;->sendExtraCommand(IILjava/lang/String;Landroid/os/Bundle;)V
@@ -28281,8 +29427,8 @@
 PLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda12;->onSettingChanged()V
 HSPLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda13;-><init>(Lcom/android/server/location/provider/LocationProviderManager;)V
 PLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda13;->onLocationPowerSaveModeChanged(I)V
-PLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda14;-><init>(Lcom/android/server/location/provider/LocationProviderManager;[Landroid/location/LocationManagerInternal$ProviderEnabledListener;IZ)V
-PLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda14;->run()V
+HPLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda14;-><init>(Lcom/android/server/location/provider/LocationProviderManager;[Landroid/location/LocationManagerInternal$ProviderEnabledListener;IZ)V
+HPLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda14;->run()V
 HSPLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda15;-><init>(I)V
 HSPLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda15;->test(Ljava/lang/Object;)Z
 PLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda16;-><init>(Lcom/android/server/location/provider/LocationProviderManager;Landroid/location/ILocationCallback;Lcom/android/server/location/provider/LocationProviderManager$GetCurrentLocationListenerRegistration;)V
@@ -28309,13 +29455,13 @@
 HPLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/location/provider/LocationProviderManager;Landroid/location/provider/ProviderRequest;)V
 HPLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda2;->run()V
 PLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda30;-><init>(I)V
-PLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda30;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda30;->test(Ljava/lang/Object;)Z
 PLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda31;-><init>(I)V
 PLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda31;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/location/provider/LocationProviderManager;)V
 HSPLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda3;->onUserChanged(II)V
 HSPLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/location/provider/LocationProviderManager;)V
-PLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda4;->onScreenInteractiveChanged(Z)V
+HPLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda4;->onScreenInteractiveChanged(Z)V
 HSPLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/location/provider/LocationProviderManager;)V
 PLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda5;->onLocationUserSettingsChanged(ILcom/android/server/location/settings/LocationUserSettings;Lcom/android/server/location/settings/LocationUserSettings;)V
 HSPLcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/location/provider/LocationProviderManager;)V
@@ -28329,7 +29475,7 @@
 HSPLcom/android/server/location/provider/LocationProviderManager$1;-><init>(Lcom/android/server/location/provider/LocationProviderManager;)V
 PLcom/android/server/location/provider/LocationProviderManager$1;->onLocationPermissionsChanged(I)V
 HSPLcom/android/server/location/provider/LocationProviderManager$1;->onLocationPermissionsChanged(Ljava/lang/String;)V
-PLcom/android/server/location/provider/LocationProviderManager$2;-><init>(Lcom/android/server/location/provider/LocationProviderManager;Landroid/location/provider/ProviderRequest;)V
+HPLcom/android/server/location/provider/LocationProviderManager$2;-><init>(Lcom/android/server/location/provider/LocationProviderManager;Landroid/location/provider/ProviderRequest;)V
 PLcom/android/server/location/provider/LocationProviderManager$2;->onAlarm()V
 PLcom/android/server/location/provider/LocationProviderManager$ExternalWakeLockReleaser$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/location/provider/LocationProviderManager$ExternalWakeLockReleaser;->$r8$lambda$9vCHYGQWZWxZ-hJoohHKT4xlpVU(Ljava/lang/RuntimeException;)V
@@ -28342,6 +29488,7 @@
 PLcom/android/server/location/provider/LocationProviderManager$GetCurrentLocationListenerRegistration$1;->operate(Ljava/lang/Object;)V
 PLcom/android/server/location/provider/LocationProviderManager$GetCurrentLocationListenerRegistration;-><init>(Lcom/android/server/location/provider/LocationProviderManager;Landroid/location/LocationRequest;Landroid/location/util/identity/CallerIdentity;Lcom/android/server/location/provider/LocationProviderManager$LocationTransport;I)V
 PLcom/android/server/location/provider/LocationProviderManager$GetCurrentLocationListenerRegistration;->acceptLocationChange(Landroid/location/LocationResult;)Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;
+PLcom/android/server/location/provider/LocationProviderManager$GetCurrentLocationListenerRegistration;->binderDied()V
 PLcom/android/server/location/provider/LocationProviderManager$GetCurrentLocationListenerRegistration;->deliverNull()V
 PLcom/android/server/location/provider/LocationProviderManager$GetCurrentLocationListenerRegistration;->onAlarm()V
 PLcom/android/server/location/provider/LocationProviderManager$GetCurrentLocationListenerRegistration;->onProviderListenerActive()V
@@ -28383,9 +29530,9 @@
 HPLcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentTransport;->$r8$lambda$kOVkie5sOwJMV6Eu59iu8_O_uiM(Landroid/os/IRemoteCallback;)V
 PLcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentTransport;-><init>(Landroid/content/Context;Landroid/app/PendingIntent;)V
 PLcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentTransport;->deliverOnFlushComplete(I)V
-HPLcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentTransport;->deliverOnLocationChanged(Landroid/location/LocationResult;Landroid/os/IRemoteCallback;)V
+HPLcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentTransport;->deliverOnLocationChanged(Landroid/location/LocationResult;Landroid/os/IRemoteCallback;)V+]Landroid/location/LocationResult;Landroid/location/LocationResult;]Landroid/app/BroadcastOptions;Landroid/app/BroadcastOptions;]Landroid/content/Intent;Landroid/content/Intent;
 PLcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentTransport;->deliverOnProviderEnabledChanged(Ljava/lang/String;Z)V
-HPLcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentTransport;->lambda$deliverOnLocationChanged$0(Landroid/os/IRemoteCallback;)V
+HPLcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentTransport;->lambda$deliverOnLocationChanged$0(Landroid/os/IRemoteCallback;)V+]Landroid/os/IRemoteCallback;Lcom/android/server/location/provider/LocationProviderManager$ExternalWakeLockReleaser;
 HSPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/location/provider/LocationProviderManager$LocationRegistration;)V
 HSPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration$$ExternalSyntheticLambda0;->get()Ljava/lang/Object;
 HSPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/location/provider/LocationProviderManager$LocationRegistration;Z)V
@@ -28393,23 +29540,23 @@
 HSPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/location/provider/LocationProviderManager$LocationRegistration;)V
 PLcom/android/server/location/provider/LocationProviderManager$LocationRegistration$$ExternalSyntheticLambda2;->onFailure(Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;Ljava/lang/Exception;)V
 HPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration$1;-><init>(Lcom/android/server/location/provider/LocationProviderManager$LocationRegistration;)V
-HPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration$1;->test(Landroid/location/Location;)Z+]Lcom/android/server/location/provider/LocationProviderManager$Registration;Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;]Landroid/location/Location;Landroid/location/Location;]Landroid/location/LocationRequest;Landroid/location/LocationRequest;
+HPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration$1;->test(Landroid/location/Location;)Z+]Lcom/android/server/location/provider/LocationProviderManager$Registration;Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;]Landroid/location/Location;Landroid/location/Location;]Landroid/location/LocationRequest;Landroid/location/LocationRequest;
 HPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration$1;->test(Ljava/lang/Object;)Z+]Lcom/android/server/location/provider/LocationProviderManager$LocationRegistration$1;Lcom/android/server/location/provider/LocationProviderManager$LocationRegistration$1;
 HPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration$2;-><init>(Lcom/android/server/location/provider/LocationProviderManager$LocationRegistration;Landroid/location/LocationResult;Z)V
-HPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration$2;->onPostExecute(Z)V+]Lcom/android/server/location/provider/LocationProviderManager$Registration;Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;]Lcom/android/server/location/listeners/RemovableListenerRegistration;Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;]Landroid/location/LocationRequest;Landroid/location/LocationRequest;]Landroid/os/PowerManager$WakeLock;Landroid/os/PowerManager$WakeLock;
-HPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration$2;->onPreExecute()V+]Lcom/android/server/location/provider/LocationProviderManager$Registration;Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;]Landroid/location/LocationResult;Landroid/location/LocationResult;]Landroid/os/PowerManager$WakeLock;Landroid/os/PowerManager$WakeLock;
-HPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration$2;->operate(Lcom/android/server/location/provider/LocationProviderManager$LocationTransport;)V+]Lcom/android/server/location/eventlog/LocationEventLog;Lcom/android/server/location/eventlog/LocationEventLog;]Lcom/android/server/location/listeners/RemoteListenerRegistration;Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;]Landroid/location/LocationResult;Landroid/location/LocationResult;]Landroid/location/util/identity/CallerIdentity;Landroid/location/util/identity/CallerIdentity;]Lcom/android/server/location/provider/LocationProviderManager$LocationTransport;Lcom/android/server/location/provider/LocationProviderManager$LocationListenerTransport;,Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentTransport;
+HPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration$2;->onPostExecute(Z)V+]Lcom/android/server/location/provider/LocationProviderManager$Registration;Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;]Lcom/android/server/location/listeners/RemovableListenerRegistration;Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;]Landroid/location/LocationRequest;Landroid/location/LocationRequest;]Landroid/os/PowerManager$WakeLock;Landroid/os/PowerManager$WakeLock;
+HPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration$2;->onPreExecute()V+]Lcom/android/server/location/provider/LocationProviderManager$Registration;Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;]Landroid/location/LocationResult;Landroid/location/LocationResult;]Landroid/os/PowerManager$WakeLock;Landroid/os/PowerManager$WakeLock;
+HPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration$2;->operate(Lcom/android/server/location/provider/LocationProviderManager$LocationTransport;)V+]Lcom/android/server/location/eventlog/LocationEventLog;Lcom/android/server/location/eventlog/LocationEventLog;]Lcom/android/server/location/listeners/RemoteListenerRegistration;Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;]Landroid/location/LocationResult;Landroid/location/LocationResult;]Landroid/location/util/identity/CallerIdentity;Landroid/location/util/identity/CallerIdentity;]Lcom/android/server/location/provider/LocationProviderManager$LocationTransport;Lcom/android/server/location/provider/LocationProviderManager$LocationListenerTransport;,Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentTransport;
 HPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration$2;->operate(Ljava/lang/Object;)V+]Lcom/android/server/location/provider/LocationProviderManager$LocationRegistration$2;Lcom/android/server/location/provider/LocationProviderManager$LocationRegistration$2;
 HSPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration;->$r8$lambda$ScP6Oxi2FD4T3WjF6BPpRCIPC1c(Lcom/android/server/location/provider/LocationProviderManager$LocationRegistration;)Lcom/android/server/location/provider/LocationProviderManager$ProviderTransport;
 HSPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration;->$r8$lambda$raISASpbz1Irgkntjc-CrAblUfs(Lcom/android/server/location/provider/LocationProviderManager$LocationRegistration;ZLcom/android/server/location/provider/LocationProviderManager$ProviderTransport;)V
 HPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration;->-$$Nest$fgetmNumLocationsDelivered(Lcom/android/server/location/provider/LocationProviderManager$LocationRegistration;)I
 HPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration;->-$$Nest$fputmNumLocationsDelivered(Lcom/android/server/location/provider/LocationProviderManager$LocationRegistration;I)V
 HSPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration;-><init>(Lcom/android/server/location/provider/LocationProviderManager;Landroid/location/LocationRequest;Landroid/location/util/identity/CallerIdentity;Lcom/android/server/location/provider/LocationProviderManager$LocationTransport;I)V
-HPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration;->acceptLocationChange(Landroid/location/LocationResult;)Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;+]Lcom/android/server/location/provider/LocationProviderManager$Registration;Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;]Lcom/android/server/location/injector/AppOpsHelper;Lcom/android/server/location/injector/SystemAppOpsHelper;]Lcom/android/server/location/listeners/RemoteListenerRegistration;Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;]Landroid/location/LocationResult;Landroid/location/LocationResult;]Landroid/location/LocationRequest;Landroid/location/LocationRequest;]Lcom/android/server/location/provider/LocationProviderManager;Lcom/android/server/location/provider/PassiveLocationProviderManager;,Lcom/android/server/location/provider/LocationProviderManager;]Lcom/android/server/location/listeners/RemovableListenerRegistration;Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;
+HPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration;->acceptLocationChange(Landroid/location/LocationResult;)Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;+]Lcom/android/server/location/provider/LocationProviderManager$Registration;Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;]Lcom/android/server/location/injector/AppOpsHelper;Lcom/android/server/location/injector/SystemAppOpsHelper;]Lcom/android/server/location/listeners/RemoteListenerRegistration;Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;]Landroid/location/LocationResult;Landroid/location/LocationResult;]Landroid/location/LocationRequest;Landroid/location/LocationRequest;]Lcom/android/server/location/provider/LocationProviderManager;Lcom/android/server/location/provider/PassiveLocationProviderManager;,Lcom/android/server/location/provider/LocationProviderManager;]Lcom/android/server/location/listeners/RemovableListenerRegistration;Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;
 HSPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration;->lambda$onProviderEnabledChanged$0()Lcom/android/server/location/provider/LocationProviderManager$ProviderTransport;
 HSPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration;->lambda$onProviderEnabledChanged$1(ZLcom/android/server/location/provider/LocationProviderManager$ProviderTransport;)V
 PLcom/android/server/location/provider/LocationProviderManager$LocationRegistration;->onAlarm()V
-PLcom/android/server/location/provider/LocationProviderManager$LocationRegistration;->onListenerUnregister()V
+HPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration;->onListenerUnregister()V
 PLcom/android/server/location/provider/LocationProviderManager$LocationRegistration;->onLocationListenerRegister()V
 PLcom/android/server/location/provider/LocationProviderManager$LocationRegistration;->onLocationListenerUnregister()V
 HSPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration;->onProviderEnabledChanged(Ljava/lang/String;IZ)V
@@ -28418,17 +29565,17 @@
 HPLcom/android/server/location/provider/LocationProviderManager$LocationRegistration;->onProviderListenerUnregister()V
 PLcom/android/server/location/provider/LocationProviderManager$LocationRegistration;->onProviderOperationFailure(Lcom/android/internal/listeners/ListenerExecutor$ListenerOperation;Ljava/lang/Exception;)V
 PLcom/android/server/location/provider/LocationProviderManager$LocationTransport;->deliverOnFlushComplete(I)V
-PLcom/android/server/location/provider/LocationProviderManager$PendingIntentSender$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/location/provider/LocationProviderManager$PendingIntentSender$GatedCallback;)V
+HPLcom/android/server/location/provider/LocationProviderManager$PendingIntentSender$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/location/provider/LocationProviderManager$PendingIntentSender$GatedCallback;)V
 HPLcom/android/server/location/provider/LocationProviderManager$PendingIntentSender$$ExternalSyntheticLambda0;->onSendFinished(Landroid/app/PendingIntent;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;)V
 HPLcom/android/server/location/provider/LocationProviderManager$PendingIntentSender$GatedCallback;-><init>(Ljava/lang/Runnable;)V
 HPLcom/android/server/location/provider/LocationProviderManager$PendingIntentSender$GatedCallback;-><init>(Ljava/lang/Runnable;Lcom/android/server/location/provider/LocationProviderManager$PendingIntentSender$GatedCallback-IA;)V
-HPLcom/android/server/location/provider/LocationProviderManager$PendingIntentSender$GatedCallback;->allow()V
-HPLcom/android/server/location/provider/LocationProviderManager$PendingIntentSender$GatedCallback;->run()V
+HPLcom/android/server/location/provider/LocationProviderManager$PendingIntentSender$GatedCallback;->allow()V+]Ljava/lang/Runnable;Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentTransport$$ExternalSyntheticLambda0;
+HPLcom/android/server/location/provider/LocationProviderManager$PendingIntentSender$GatedCallback;->run()V+]Ljava/lang/Runnable;Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentTransport$$ExternalSyntheticLambda0;
 HPLcom/android/server/location/provider/LocationProviderManager$PendingIntentSender;->$r8$lambda$mjLN5Lj6sqF3UF09be7a3dA31Fs(Lcom/android/server/location/provider/LocationProviderManager$PendingIntentSender$GatedCallback;Landroid/app/PendingIntent;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;)V
-HPLcom/android/server/location/provider/LocationProviderManager$PendingIntentSender;->lambda$send$0(Lcom/android/server/location/provider/LocationProviderManager$PendingIntentSender$GatedCallback;Landroid/app/PendingIntent;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;)V
-HPLcom/android/server/location/provider/LocationProviderManager$PendingIntentSender;->send(Landroid/app/PendingIntent;Landroid/content/Context;Landroid/content/Intent;Ljava/lang/Runnable;Landroid/os/Bundle;)V
+HPLcom/android/server/location/provider/LocationProviderManager$PendingIntentSender;->lambda$send$0(Lcom/android/server/location/provider/LocationProviderManager$PendingIntentSender$GatedCallback;Landroid/app/PendingIntent;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;)V+]Lcom/android/server/location/provider/LocationProviderManager$PendingIntentSender$GatedCallback;Lcom/android/server/location/provider/LocationProviderManager$PendingIntentSender$GatedCallback;
+HPLcom/android/server/location/provider/LocationProviderManager$PendingIntentSender;->send(Landroid/app/PendingIntent;Landroid/content/Context;Landroid/content/Intent;Ljava/lang/Runnable;Landroid/os/Bundle;)V+]Landroid/app/PendingIntent;Landroid/app/PendingIntent;]Lcom/android/server/location/provider/LocationProviderManager$PendingIntentSender$GatedCallback;Lcom/android/server/location/provider/LocationProviderManager$PendingIntentSender$GatedCallback;
 HSPLcom/android/server/location/provider/LocationProviderManager$Registration;-><init>(Lcom/android/server/location/provider/LocationProviderManager;Landroid/location/LocationRequest;Landroid/location/util/identity/CallerIdentity;Lcom/android/server/location/provider/LocationProviderManager$LocationTransport;I)V
-HSPLcom/android/server/location/provider/LocationProviderManager$Registration;->calculateProviderLocationRequest()Landroid/location/LocationRequest;
+HSPLcom/android/server/location/provider/LocationProviderManager$Registration;->calculateProviderLocationRequest()Landroid/location/LocationRequest;+]Lcom/android/server/location/provider/LocationProviderManager$Registration;Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;]Lcom/android/server/location/injector/SettingsHelper;Lcom/android/server/location/injector/SystemSettingsHelper;]Landroid/location/LocationRequest;Landroid/location/LocationRequest;]Landroid/location/LocationRequest$Builder;Landroid/location/LocationRequest$Builder;
 HPLcom/android/server/location/provider/LocationProviderManager$Registration;->getLastDeliveredLocation()Landroid/location/Location;
 PLcom/android/server/location/provider/LocationProviderManager$Registration;->getOwner()Lcom/android/server/location/listeners/ListenerMultiplexer;
 PLcom/android/server/location/provider/LocationProviderManager$Registration;->getOwner()Lcom/android/server/location/provider/LocationProviderManager;
@@ -28436,14 +29583,14 @@
 HSPLcom/android/server/location/provider/LocationProviderManager$Registration;->getRequest()Landroid/location/LocationRequest;
 HSPLcom/android/server/location/provider/LocationProviderManager$Registration;->isForeground()Z
 HSPLcom/android/server/location/provider/LocationProviderManager$Registration;->isPermitted()Z
-HSPLcom/android/server/location/provider/LocationProviderManager$Registration;->isThrottlingExempt()Z
-HSPLcom/android/server/location/provider/LocationProviderManager$Registration;->isUsingHighPower()Z
+HSPLcom/android/server/location/provider/LocationProviderManager$Registration;->isThrottlingExempt()Z+]Lcom/android/server/location/injector/SettingsHelper;Lcom/android/server/location/injector/SystemSettingsHelper;]Lcom/android/server/location/listeners/RemoteListenerRegistration;Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;]Landroid/location/LocationManagerInternal;Lcom/android/server/location/LocationManagerService$LocalService;]Landroid/location/util/identity/CallerIdentity;Landroid/location/util/identity/CallerIdentity;]Ljava/util/Set;Landroid/util/ArraySet;
+HSPLcom/android/server/location/provider/LocationProviderManager$Registration;->isUsingHighPower()Z+]Lcom/android/server/location/provider/LocationProviderManager$Registration;Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;]Landroid/location/provider/ProviderProperties;Landroid/location/provider/ProviderProperties;]Lcom/android/server/location/listeners/ListenerRegistration;Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;]Landroid/location/LocationRequest;Landroid/location/LocationRequest;]Lcom/android/server/location/provider/LocationProviderManager;Lcom/android/server/location/provider/PassiveLocationProviderManager;,Lcom/android/server/location/provider/LocationProviderManager;
 PLcom/android/server/location/provider/LocationProviderManager$Registration;->lambda$flush$0(ILcom/android/server/location/provider/LocationProviderManager$LocationTransport;)V
 PLcom/android/server/location/provider/LocationProviderManager$Registration;->lambda$flush$1(I)V
 HPLcom/android/server/location/provider/LocationProviderManager$Registration;->onActive()V
 HPLcom/android/server/location/provider/LocationProviderManager$Registration;->onAdasGnssLocationEnabledChanged(I)Z
-HSPLcom/android/server/location/provider/LocationProviderManager$Registration;->onForegroundChanged(IZ)Z+]Lcom/android/server/location/provider/LocationProviderManager$Registration;Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;]Lcom/android/server/location/eventlog/LocationEventLog;Lcom/android/server/location/eventlog/LocationEventLog;]Lcom/android/server/location/listeners/RemoteListenerRegistration;Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;,Lcom/android/server/location/provider/LocationProviderManager$GetCurrentLocationListenerRegistration;]Lcom/android/server/location/injector/LocationPowerSaveModeHelper;Lcom/android/server/location/injector/SystemLocationPowerSaveModeHelper;]Landroid/location/util/identity/CallerIdentity;Landroid/location/util/identity/CallerIdentity;
-HPLcom/android/server/location/provider/LocationProviderManager$Registration;->onHighPowerUsageChanged()V
+HSPLcom/android/server/location/provider/LocationProviderManager$Registration;->onForegroundChanged(IZ)Z+]Lcom/android/server/location/provider/LocationProviderManager$Registration;Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;]Lcom/android/server/location/eventlog/LocationEventLog;Lcom/android/server/location/eventlog/LocationEventLog;]Lcom/android/server/location/listeners/RemoteListenerRegistration;Lcom/android/server/location/provider/LocationProviderManager$GetCurrentLocationListenerRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;]Lcom/android/server/location/injector/LocationPowerSaveModeHelper;Lcom/android/server/location/injector/SystemLocationPowerSaveModeHelper;]Landroid/location/util/identity/CallerIdentity;Landroid/location/util/identity/CallerIdentity;
+HPLcom/android/server/location/provider/LocationProviderManager$Registration;->onHighPowerUsageChanged()V+]Lcom/android/server/location/provider/LocationProviderManager$Registration;Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;]Lcom/android/server/location/injector/AppOpsHelper;Lcom/android/server/location/injector/SystemAppOpsHelper;]Lcom/android/server/location/listeners/RemoteListenerRegistration;Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;]Landroid/location/LocationRequest;Landroid/location/LocationRequest;
 HPLcom/android/server/location/provider/LocationProviderManager$Registration;->onInactive()V
 HPLcom/android/server/location/provider/LocationProviderManager$Registration;->onLocationPermissionsChanged()Z
 PLcom/android/server/location/provider/LocationProviderManager$Registration;->onLocationPermissionsChanged(I)Z
@@ -28452,14 +29599,14 @@
 PLcom/android/server/location/provider/LocationProviderManager$Registration;->onProviderListenerInactive()V
 HPLcom/android/server/location/provider/LocationProviderManager$Registration;->onProviderListenerRegister()V
 PLcom/android/server/location/provider/LocationProviderManager$Registration;->onProviderListenerUnregister()V
-HPLcom/android/server/location/provider/LocationProviderManager$Registration;->onProviderLocationRequestChanged()Z
+HPLcom/android/server/location/provider/LocationProviderManager$Registration;->onProviderLocationRequestChanged()Z+]Lcom/android/server/location/provider/LocationProviderManager$Registration;Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;]Landroid/location/LocationRequest;Landroid/location/LocationRequest;
 PLcom/android/server/location/provider/LocationProviderManager$Registration;->onProviderPropertiesChanged()Z
 HSPLcom/android/server/location/provider/LocationProviderManager$Registration;->onRemovableListenerRegister()V
 HPLcom/android/server/location/provider/LocationProviderManager$Registration;->onRemovableListenerUnregister()V
 HPLcom/android/server/location/provider/LocationProviderManager$Registration;->setLastDeliveredLocation(Landroid/location/Location;)V
 PLcom/android/server/location/provider/LocationProviderManager$Registration;->toString()Ljava/lang/String;
 HPLcom/android/server/location/provider/LocationProviderManager;->$r8$lambda$57Uodug62B4zZHkjyoJplDAyqXc(Lcom/android/server/location/provider/LocationProviderManager;Landroid/location/Location;)Z
-PLcom/android/server/location/provider/LocationProviderManager;->$r8$lambda$5DNGAH-x-YHlI_RY2JEGB6jMPoM(Lcom/android/server/location/provider/LocationProviderManager;[Landroid/location/LocationManagerInternal$ProviderEnabledListener;IZ)V
+HPLcom/android/server/location/provider/LocationProviderManager;->$r8$lambda$5DNGAH-x-YHlI_RY2JEGB6jMPoM(Lcom/android/server/location/provider/LocationProviderManager;[Landroid/location/LocationManagerInternal$ProviderEnabledListener;IZ)V
 HSPLcom/android/server/location/provider/LocationProviderManager;->$r8$lambda$7q_fhVl__5_HUatklTvERpHFwGY(ILcom/android/server/location/provider/LocationProviderManager$Registration;)Z
 PLcom/android/server/location/provider/LocationProviderManager;->$r8$lambda$7vYP1LE5Krt1P5aJHlhzdbr3rWw(Lcom/android/server/location/provider/LocationProviderManager;)V
 PLcom/android/server/location/provider/LocationProviderManager;->$r8$lambda$93NUqXTfUSE5tZtsl_LWgfbHlOc(Lcom/android/server/location/provider/LocationProviderManager;)V
@@ -28484,7 +29631,7 @@
 PLcom/android/server/location/provider/LocationProviderManager;->-$$Nest$monLocationPermissionsChanged(Lcom/android/server/location/provider/LocationProviderManager;I)V
 HSPLcom/android/server/location/provider/LocationProviderManager;->-$$Nest$monLocationPermissionsChanged(Lcom/android/server/location/provider/LocationProviderManager;Ljava/lang/String;)V
 HSPLcom/android/server/location/provider/LocationProviderManager;-><init>(Landroid/content/Context;Lcom/android/server/location/injector/Injector;Ljava/lang/String;Lcom/android/server/location/provider/PassiveLocationProviderManager;)V
-PLcom/android/server/location/provider/LocationProviderManager;->access$000(Lcom/android/server/location/provider/LocationProviderManager;)V
+HPLcom/android/server/location/provider/LocationProviderManager;->access$000(Lcom/android/server/location/provider/LocationProviderManager;)V
 HSPLcom/android/server/location/provider/LocationProviderManager;->addEnabledListener(Landroid/location/LocationManagerInternal$ProviderEnabledListener;)V
 HPLcom/android/server/location/provider/LocationProviderManager;->addProviderRequestListener(Landroid/location/provider/IProviderRequestListener;)V
 HPLcom/android/server/location/provider/LocationProviderManager;->calculateLastLocationRequest(Landroid/location/LastLocationRequest;Landroid/location/util/identity/CallerIdentity;)Landroid/location/LastLocationRequest;
@@ -28498,7 +29645,7 @@
 HSPLcom/android/server/location/provider/LocationProviderManager;->getName()Ljava/lang/String;
 PLcom/android/server/location/provider/LocationProviderManager;->getPermittedLocation(Landroid/location/Location;I)Landroid/location/Location;
 HPLcom/android/server/location/provider/LocationProviderManager;->getPermittedLocationResult(Landroid/location/LocationResult;I)Landroid/location/LocationResult;
-HSPLcom/android/server/location/provider/LocationProviderManager;->getProperties()Landroid/location/provider/ProviderProperties;
+HSPLcom/android/server/location/provider/LocationProviderManager;->getProperties()Landroid/location/provider/ProviderProperties;+]Lcom/android/server/location/provider/AbstractLocationProvider;Lcom/android/server/location/provider/MockableLocationProvider;
 HSPLcom/android/server/location/provider/LocationProviderManager;->getProviderIdentity()Landroid/location/util/identity/CallerIdentity;
 PLcom/android/server/location/provider/LocationProviderManager;->getServiceState()Ljava/lang/String;
 HSPLcom/android/server/location/provider/LocationProviderManager;->getState()Lcom/android/server/location/provider/AbstractLocationProvider$State;
@@ -28512,7 +29659,7 @@
 PLcom/android/server/location/provider/LocationProviderManager;->lambda$flush$3(ILcom/android/server/location/provider/LocationProviderManager$Registration;)Z
 PLcom/android/server/location/provider/LocationProviderManager;->lambda$getCurrentLocation$2(Landroid/location/ILocationCallback;Lcom/android/server/location/provider/LocationProviderManager$GetCurrentLocationListenerRegistration;)V
 HSPLcom/android/server/location/provider/LocationProviderManager;->lambda$onAppForegroundChanged$10(IZLcom/android/server/location/provider/LocationProviderManager$Registration;)Z
-PLcom/android/server/location/provider/LocationProviderManager;->lambda$onEnabledChanged$17([Landroid/location/LocationManagerInternal$ProviderEnabledListener;IZ)V
+HPLcom/android/server/location/provider/LocationProviderManager;->lambda$onEnabledChanged$17([Landroid/location/LocationManagerInternal$ProviderEnabledListener;IZ)V
 HSPLcom/android/server/location/provider/LocationProviderManager;->lambda$onEnabledChanged$18(ILcom/android/server/location/provider/LocationProviderManager$Registration;)Z
 HPLcom/android/server/location/provider/LocationProviderManager;->lambda$onLocationPackageBlacklistChanged$11(ILcom/android/server/location/provider/LocationProviderManager$Registration;)Z
 HSPLcom/android/server/location/provider/LocationProviderManager;->lambda$onLocationPermissionsChanged$12(Ljava/lang/String;Lcom/android/server/location/provider/LocationProviderManager$Registration;)Z
@@ -28524,7 +29671,7 @@
 HSPLcom/android/server/location/provider/LocationProviderManager;->lambda$onStateChanged$14(Lcom/android/server/location/provider/LocationProviderManager$StateChangedListener;Lcom/android/server/location/provider/AbstractLocationProvider$State;Lcom/android/server/location/provider/AbstractLocationProvider$State;)V
 PLcom/android/server/location/provider/LocationProviderManager;->lambda$onUserChanged$6(ILcom/android/server/location/provider/LocationProviderManager$Registration;)Z
 HPLcom/android/server/location/provider/LocationProviderManager;->lambda$setProviderRequest$5(Landroid/location/provider/ProviderRequest;)V
-HPLcom/android/server/location/provider/LocationProviderManager;->mergeRegistrations(Ljava/util/Collection;)Landroid/location/provider/ProviderRequest;
+HPLcom/android/server/location/provider/LocationProviderManager;->mergeRegistrations(Ljava/util/Collection;)Landroid/location/provider/ProviderRequest;+]Lcom/android/server/location/provider/LocationProviderManager$Registration;Lcom/android/server/location/provider/LocationProviderManager$LocationPendingIntentRegistration;,Lcom/android/server/location/provider/LocationProviderManager$LocationListenerRegistration;]Landroid/location/provider/ProviderRequest$Builder;Landroid/location/provider/ProviderRequest$Builder;]Landroid/os/WorkSource;Landroid/os/WorkSource;]Ljava/util/Collection;Ljava/util/ArrayList;]Landroid/location/LocationRequest;Landroid/location/LocationRequest;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HPLcom/android/server/location/provider/LocationProviderManager;->mergeRegistrations(Ljava/util/Collection;)Ljava/lang/Object;
 PLcom/android/server/location/provider/LocationProviderManager;->onAdasAllowlistChanged()V
 HSPLcom/android/server/location/provider/LocationProviderManager;->onAppForegroundChanged(IZ)V+]Lcom/android/server/location/listeners/ListenerMultiplexer;Lcom/android/server/location/provider/PassiveLocationProviderManager;,Lcom/android/server/location/provider/LocationProviderManager;
@@ -28534,7 +29681,7 @@
 HPLcom/android/server/location/provider/LocationProviderManager;->onLocationEnabledChanged(I)V
 PLcom/android/server/location/provider/LocationProviderManager;->onLocationPackageBlacklistChanged(I)V
 PLcom/android/server/location/provider/LocationProviderManager;->onLocationPermissionsChanged(I)V
-HSPLcom/android/server/location/provider/LocationProviderManager;->onLocationPermissionsChanged(Ljava/lang/String;)V
+HSPLcom/android/server/location/provider/LocationProviderManager;->onLocationPermissionsChanged(Ljava/lang/String;)V+]Lcom/android/server/location/listeners/ListenerMultiplexer;Lcom/android/server/location/provider/PassiveLocationProviderManager;,Lcom/android/server/location/provider/LocationProviderManager;
 PLcom/android/server/location/provider/LocationProviderManager;->onLocationPowerSaveModeChanged(I)V
 HSPLcom/android/server/location/provider/LocationProviderManager;->onRegister()V
 HSPLcom/android/server/location/provider/LocationProviderManager;->onRegistrationAdded(Ljava/lang/Object;Lcom/android/server/location/listeners/ListenerRegistration;)V
@@ -28552,8 +29699,8 @@
 PLcom/android/server/location/provider/LocationProviderManager;->onUserStopped(I)V
 HPLcom/android/server/location/provider/LocationProviderManager;->registerLocationRequest(Landroid/location/LocationRequest;Landroid/location/util/identity/CallerIdentity;ILandroid/app/PendingIntent;)V
 HSPLcom/android/server/location/provider/LocationProviderManager;->registerLocationRequest(Landroid/location/LocationRequest;Landroid/location/util/identity/CallerIdentity;ILandroid/location/ILocationListener;)V
-PLcom/android/server/location/provider/LocationProviderManager;->registerWithService(Landroid/location/provider/ProviderRequest;Ljava/util/Collection;)Z
-PLcom/android/server/location/provider/LocationProviderManager;->registerWithService(Ljava/lang/Object;Ljava/util/Collection;)Z
+HPLcom/android/server/location/provider/LocationProviderManager;->registerWithService(Landroid/location/provider/ProviderRequest;Ljava/util/Collection;)Z
+HPLcom/android/server/location/provider/LocationProviderManager;->registerWithService(Ljava/lang/Object;Ljava/util/Collection;)Z
 HPLcom/android/server/location/provider/LocationProviderManager;->removeEnabledListener(Landroid/location/LocationManagerInternal$ProviderEnabledListener;)V
 PLcom/android/server/location/provider/LocationProviderManager;->removeProviderRequestListener(Landroid/location/provider/IProviderRequestListener;)V
 HPLcom/android/server/location/provider/LocationProviderManager;->reregisterWithService(Landroid/location/provider/ProviderRequest;Landroid/location/provider/ProviderRequest;Ljava/util/Collection;)Z
@@ -28578,15 +29725,15 @@
 HPLcom/android/server/location/provider/MockLocationProvider;->setProviderLocation(Landroid/location/Location;)V
 HSPLcom/android/server/location/provider/MockableLocationProvider$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/location/provider/AbstractLocationProvider$State;)V
 HSPLcom/android/server/location/provider/MockableLocationProvider$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/location/provider/MockableLocationProvider$ListenerWrapper$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/location/provider/AbstractLocationProvider$State;)V
-PLcom/android/server/location/provider/MockableLocationProvider$ListenerWrapper$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/location/provider/MockableLocationProvider$ListenerWrapper;->$r8$lambda$ZxaQBUtDQVWEBDBtZkqONLsi6x8(Lcom/android/server/location/provider/AbstractLocationProvider$State;Lcom/android/server/location/provider/AbstractLocationProvider$State;)Lcom/android/server/location/provider/AbstractLocationProvider$State;
+HSPLcom/android/server/location/provider/MockableLocationProvider$ListenerWrapper$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/location/provider/AbstractLocationProvider$State;)V
+HSPLcom/android/server/location/provider/MockableLocationProvider$ListenerWrapper$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/location/provider/MockableLocationProvider$ListenerWrapper;->$r8$lambda$ZxaQBUtDQVWEBDBtZkqONLsi6x8(Lcom/android/server/location/provider/AbstractLocationProvider$State;Lcom/android/server/location/provider/AbstractLocationProvider$State;)Lcom/android/server/location/provider/AbstractLocationProvider$State;
 HSPLcom/android/server/location/provider/MockableLocationProvider$ListenerWrapper;-><init>(Lcom/android/server/location/provider/MockableLocationProvider;Lcom/android/server/location/provider/AbstractLocationProvider;)V
-PLcom/android/server/location/provider/MockableLocationProvider$ListenerWrapper;->lambda$onStateChanged$0(Lcom/android/server/location/provider/AbstractLocationProvider$State;Lcom/android/server/location/provider/AbstractLocationProvider$State;)Lcom/android/server/location/provider/AbstractLocationProvider$State;
+HSPLcom/android/server/location/provider/MockableLocationProvider$ListenerWrapper;->lambda$onStateChanged$0(Lcom/android/server/location/provider/AbstractLocationProvider$State;Lcom/android/server/location/provider/AbstractLocationProvider$State;)Lcom/android/server/location/provider/AbstractLocationProvider$State;
 HPLcom/android/server/location/provider/MockableLocationProvider$ListenerWrapper;->onReportLocation(Landroid/location/LocationResult;)V+]Lcom/android/server/location/provider/AbstractLocationProvider;Lcom/android/server/location/provider/MockableLocationProvider;
-PLcom/android/server/location/provider/MockableLocationProvider$ListenerWrapper;->onStateChanged(Lcom/android/server/location/provider/AbstractLocationProvider$State;Lcom/android/server/location/provider/AbstractLocationProvider$State;)V
+HSPLcom/android/server/location/provider/MockableLocationProvider$ListenerWrapper;->onStateChanged(Lcom/android/server/location/provider/AbstractLocationProvider$State;Lcom/android/server/location/provider/AbstractLocationProvider$State;)V
 HSPLcom/android/server/location/provider/MockableLocationProvider;->$r8$lambda$T5QgKuhRPr5-_Da8uSfZWytIGpw(Lcom/android/server/location/provider/AbstractLocationProvider$State;Lcom/android/server/location/provider/AbstractLocationProvider$State;)Lcom/android/server/location/provider/AbstractLocationProvider$State;
-HPLcom/android/server/location/provider/MockableLocationProvider;->-$$Nest$fgetmProvider(Lcom/android/server/location/provider/MockableLocationProvider;)Lcom/android/server/location/provider/AbstractLocationProvider;
+HSPLcom/android/server/location/provider/MockableLocationProvider;->-$$Nest$fgetmProvider(Lcom/android/server/location/provider/MockableLocationProvider;)Lcom/android/server/location/provider/AbstractLocationProvider;
 HSPLcom/android/server/location/provider/MockableLocationProvider;-><init>(Ljava/lang/Object;)V
 PLcom/android/server/location/provider/MockableLocationProvider;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/location/provider/MockableLocationProvider;->getCurrentRequest()Landroid/location/provider/ProviderRequest;
@@ -28611,7 +29758,7 @@
 PLcom/android/server/location/provider/PassiveLocationProviderManager;->calculateRequestDelayMillis(JLjava/util/Collection;)J
 PLcom/android/server/location/provider/PassiveLocationProviderManager;->getServiceState()Ljava/lang/String;
 HPLcom/android/server/location/provider/PassiveLocationProviderManager;->mergeRegistrations(Ljava/util/Collection;)Landroid/location/provider/ProviderRequest;
-PLcom/android/server/location/provider/PassiveLocationProviderManager;->mergeRegistrations(Ljava/util/Collection;)Ljava/lang/Object;
+HPLcom/android/server/location/provider/PassiveLocationProviderManager;->mergeRegistrations(Ljava/util/Collection;)Ljava/lang/Object;
 HSPLcom/android/server/location/provider/PassiveLocationProviderManager;->setRealProvider(Lcom/android/server/location/provider/AbstractLocationProvider;)V
 HPLcom/android/server/location/provider/PassiveLocationProviderManager;->updateLocation(Landroid/location/LocationResult;)V+]Lcom/android/server/location/provider/PassiveLocationProvider;Lcom/android/server/location/provider/PassiveLocationProvider;]Lcom/android/server/location/provider/MockableLocationProvider;Lcom/android/server/location/provider/MockableLocationProvider;
 PLcom/android/server/location/provider/StationaryThrottlingLocationProvider$DeliverLastLocationRunnable;-><init>(Lcom/android/server/location/provider/StationaryThrottlingLocationProvider;)V
@@ -28623,9 +29770,9 @@
 HPLcom/android/server/location/provider/StationaryThrottlingLocationProvider;->onReportLocation(Landroid/location/LocationResult;)V+]Lcom/android/server/location/provider/StationaryThrottlingLocationProvider;Lcom/android/server/location/provider/StationaryThrottlingLocationProvider;]Landroid/location/LocationResult;Landroid/location/LocationResult;
 HSPLcom/android/server/location/provider/StationaryThrottlingLocationProvider;->onSetRequest(Landroid/location/provider/ProviderRequest;)V
 HSPLcom/android/server/location/provider/StationaryThrottlingLocationProvider;->onStart()V
-PLcom/android/server/location/provider/StationaryThrottlingLocationProvider;->onStateChanged(Lcom/android/server/location/provider/AbstractLocationProvider$State;Lcom/android/server/location/provider/AbstractLocationProvider$State;)V
+HSPLcom/android/server/location/provider/StationaryThrottlingLocationProvider;->onStateChanged(Lcom/android/server/location/provider/AbstractLocationProvider$State;Lcom/android/server/location/provider/AbstractLocationProvider$State;)V
 PLcom/android/server/location/provider/StationaryThrottlingLocationProvider;->onStop()V
-HSPLcom/android/server/location/provider/StationaryThrottlingLocationProvider;->onThrottlingChangedLocked(Z)V+]Lcom/android/server/location/provider/AbstractLocationProvider;Lcom/android/server/location/gnss/GnssLocationProvider;,Lcom/android/server/location/provider/proxy/ProxyLocationProvider;]Lcom/android/server/location/provider/LocationProviderController;Lcom/android/server/location/provider/AbstractLocationProvider$Controller;]Landroid/location/provider/ProviderRequest;Landroid/location/provider/ProviderRequest;
+HSPLcom/android/server/location/provider/StationaryThrottlingLocationProvider;->onThrottlingChangedLocked(Z)V+]Lcom/android/server/location/provider/AbstractLocationProvider;Lcom/android/server/location/gnss/GnssLocationProvider;,Lcom/android/server/location/provider/proxy/ProxyLocationProvider;]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/location/eventlog/LocationEventLog;Lcom/android/server/location/eventlog/LocationEventLog;]Landroid/location/Location;Landroid/location/Location;]Lcom/android/server/location/provider/LocationProviderController;Lcom/android/server/location/provider/AbstractLocationProvider$Controller;]Landroid/location/provider/ProviderRequest;Landroid/location/provider/ProviderRequest;
 PLcom/android/server/location/provider/proxy/ProxyLocationProvider$$ExternalSyntheticLambda0;-><init>(Ljava/lang/String;Landroid/os/Bundle;)V
 PLcom/android/server/location/provider/proxy/ProxyLocationProvider$$ExternalSyntheticLambda0;->run(Landroid/os/IBinder;)V
 HPLcom/android/server/location/provider/proxy/ProxyLocationProvider$$ExternalSyntheticLambda1;-><init>(Landroid/location/provider/ProviderRequest;)V
@@ -28635,39 +29782,39 @@
 PLcom/android/server/location/provider/proxy/ProxyLocationProvider$1;->$r8$lambda$mU0CCDW0ncsvRk_rG7IFlKk_Smo(Lcom/android/server/location/provider/AbstractLocationProvider$State;)Lcom/android/server/location/provider/AbstractLocationProvider$State;
 HPLcom/android/server/location/provider/proxy/ProxyLocationProvider$1;-><init>(Lcom/android/server/location/provider/proxy/ProxyLocationProvider;)V
 PLcom/android/server/location/provider/proxy/ProxyLocationProvider$1;->lambda$run$0(Lcom/android/server/location/provider/AbstractLocationProvider$State;)Lcom/android/server/location/provider/AbstractLocationProvider$State;
-PLcom/android/server/location/provider/proxy/ProxyLocationProvider$1;->run()V
+HPLcom/android/server/location/provider/proxy/ProxyLocationProvider$1;->run()V
 PLcom/android/server/location/provider/proxy/ProxyLocationProvider$2;-><init>(Lcom/android/server/location/provider/proxy/ProxyLocationProvider;Ljava/lang/Runnable;)V
 PLcom/android/server/location/provider/proxy/ProxyLocationProvider$2;->onError(Ljava/lang/Throwable;)V
 PLcom/android/server/location/provider/proxy/ProxyLocationProvider$2;->run(Landroid/os/IBinder;)V
-PLcom/android/server/location/provider/proxy/ProxyLocationProvider$Proxy$$ExternalSyntheticLambda0;-><init>(ZLandroid/location/provider/ProviderProperties;Landroid/location/util/identity/CallerIdentity;Landroid/util/ArraySet;)V
-PLcom/android/server/location/provider/proxy/ProxyLocationProvider$Proxy$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/location/provider/proxy/ProxyLocationProvider$Proxy;->$r8$lambda$0HrhTIqcmHDS-csdTyDa3Nr6bPU(ZLandroid/location/provider/ProviderProperties;Landroid/location/util/identity/CallerIdentity;Landroid/util/ArraySet;Lcom/android/server/location/provider/AbstractLocationProvider$State;)Lcom/android/server/location/provider/AbstractLocationProvider$State;
-PLcom/android/server/location/provider/proxy/ProxyLocationProvider$Proxy;-><init>(Lcom/android/server/location/provider/proxy/ProxyLocationProvider;)V
-PLcom/android/server/location/provider/proxy/ProxyLocationProvider$Proxy;->lambda$onInitialize$0(ZLandroid/location/provider/ProviderProperties;Landroid/location/util/identity/CallerIdentity;Landroid/util/ArraySet;Lcom/android/server/location/provider/AbstractLocationProvider$State;)Lcom/android/server/location/provider/AbstractLocationProvider$State;
-HPLcom/android/server/location/provider/proxy/ProxyLocationProvider$Proxy;->onInitialize(ZLandroid/location/provider/ProviderProperties;Ljava/lang/String;)V
+HSPLcom/android/server/location/provider/proxy/ProxyLocationProvider$Proxy$$ExternalSyntheticLambda0;-><init>(ZLandroid/location/provider/ProviderProperties;Landroid/location/util/identity/CallerIdentity;Landroid/util/ArraySet;)V
+HSPLcom/android/server/location/provider/proxy/ProxyLocationProvider$Proxy$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/location/provider/proxy/ProxyLocationProvider$Proxy;->$r8$lambda$0HrhTIqcmHDS-csdTyDa3Nr6bPU(ZLandroid/location/provider/ProviderProperties;Landroid/location/util/identity/CallerIdentity;Landroid/util/ArraySet;Lcom/android/server/location/provider/AbstractLocationProvider$State;)Lcom/android/server/location/provider/AbstractLocationProvider$State;
+HSPLcom/android/server/location/provider/proxy/ProxyLocationProvider$Proxy;-><init>(Lcom/android/server/location/provider/proxy/ProxyLocationProvider;)V
+HSPLcom/android/server/location/provider/proxy/ProxyLocationProvider$Proxy;->lambda$onInitialize$0(ZLandroid/location/provider/ProviderProperties;Landroid/location/util/identity/CallerIdentity;Landroid/util/ArraySet;Lcom/android/server/location/provider/AbstractLocationProvider$State;)Lcom/android/server/location/provider/AbstractLocationProvider$State;
+HSPLcom/android/server/location/provider/proxy/ProxyLocationProvider$Proxy;->onInitialize(ZLandroid/location/provider/ProviderProperties;Ljava/lang/String;)V
 HPLcom/android/server/location/provider/proxy/ProxyLocationProvider$Proxy;->onReportLocation(Landroid/location/Location;)V+]Landroid/location/LocationResult;Landroid/location/LocationResult;
 HPLcom/android/server/location/provider/proxy/ProxyLocationProvider$Proxy;->onReportLocations(Ljava/util/List;)V
-PLcom/android/server/location/provider/proxy/ProxyLocationProvider$Proxy;->onSetAllowed(Z)V
+HPLcom/android/server/location/provider/proxy/ProxyLocationProvider$Proxy;->onSetAllowed(Z)V
 PLcom/android/server/location/provider/proxy/ProxyLocationProvider$Proxy;->onSetProperties(Landroid/location/provider/ProviderProperties;)V
 PLcom/android/server/location/provider/proxy/ProxyLocationProvider;->$r8$lambda$bDCegUCZCpToJ6eso4uu1CJjq-c(Ljava/lang/String;Landroid/os/Bundle;Landroid/os/IBinder;)V
 PLcom/android/server/location/provider/proxy/ProxyLocationProvider;->$r8$lambda$yu0xVA1qJfubSKPOEyL-h8EblXE(Landroid/location/provider/ProviderRequest;Landroid/os/IBinder;)V
 HSPLcom/android/server/location/provider/proxy/ProxyLocationProvider;-><init>(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;II)V
 PLcom/android/server/location/provider/proxy/ProxyLocationProvider;->access$000(Lcom/android/server/location/provider/proxy/ProxyLocationProvider;Ljava/util/function/UnaryOperator;)V
-HPLcom/android/server/location/provider/proxy/ProxyLocationProvider;->access$100(Lcom/android/server/location/provider/proxy/ProxyLocationProvider;Ljava/util/function/UnaryOperator;)V
+HSPLcom/android/server/location/provider/proxy/ProxyLocationProvider;->access$100(Lcom/android/server/location/provider/proxy/ProxyLocationProvider;Ljava/util/function/UnaryOperator;)V
 PLcom/android/server/location/provider/proxy/ProxyLocationProvider;->access$300(Lcom/android/server/location/provider/proxy/ProxyLocationProvider;Z)V
 HPLcom/android/server/location/provider/proxy/ProxyLocationProvider;->access$400(Lcom/android/server/location/provider/proxy/ProxyLocationProvider;Landroid/location/LocationResult;)V
-PLcom/android/server/location/provider/proxy/ProxyLocationProvider;->access$500(Lcom/android/server/location/provider/proxy/ProxyLocationProvider;Landroid/location/LocationResult;)V
+HPLcom/android/server/location/provider/proxy/ProxyLocationProvider;->access$500(Lcom/android/server/location/provider/proxy/ProxyLocationProvider;Landroid/location/LocationResult;)V
 HSPLcom/android/server/location/provider/proxy/ProxyLocationProvider;->checkServiceResolves()Z
 HSPLcom/android/server/location/provider/proxy/ProxyLocationProvider;->create(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;II)Lcom/android/server/location/provider/proxy/ProxyLocationProvider;
 PLcom/android/server/location/provider/proxy/ProxyLocationProvider;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/location/provider/proxy/ProxyLocationProvider;->lambda$onExtraCommand$1(Ljava/lang/String;Landroid/os/Bundle;Landroid/os/IBinder;)V
 PLcom/android/server/location/provider/proxy/ProxyLocationProvider;->lambda$onSetRequest$0(Landroid/location/provider/ProviderRequest;Landroid/os/IBinder;)V
-PLcom/android/server/location/provider/proxy/ProxyLocationProvider;->onBind(Landroid/os/IBinder;Lcom/android/server/servicewatcher/CurrentUserServiceSupplier$BoundServiceInfo;)V
-PLcom/android/server/location/provider/proxy/ProxyLocationProvider;->onBind(Landroid/os/IBinder;Lcom/android/server/servicewatcher/ServiceWatcher$BoundServiceInfo;)V
+HSPLcom/android/server/location/provider/proxy/ProxyLocationProvider;->onBind(Landroid/os/IBinder;Lcom/android/server/servicewatcher/CurrentUserServiceSupplier$BoundServiceInfo;)V
+HSPLcom/android/server/location/provider/proxy/ProxyLocationProvider;->onBind(Landroid/os/IBinder;Lcom/android/server/servicewatcher/ServiceWatcher$BoundServiceInfo;)V
 PLcom/android/server/location/provider/proxy/ProxyLocationProvider;->onFlush(Ljava/lang/Runnable;)V
 HPLcom/android/server/location/provider/proxy/ProxyLocationProvider;->onSetRequest(Landroid/location/provider/ProviderRequest;)V
 HSPLcom/android/server/location/provider/proxy/ProxyLocationProvider;->onStart()V
-PLcom/android/server/location/provider/proxy/ProxyLocationProvider;->onUnbind()V
+HPLcom/android/server/location/provider/proxy/ProxyLocationProvider;->onUnbind()V
 PLcom/android/server/location/settings/LocationSettings$LocationUserSettingsListener;->onLocationUserSettingsChanged(ILcom/android/server/location/settings/LocationUserSettings;Lcom/android/server/location/settings/LocationUserSettings;)V
 PLcom/android/server/location/settings/LocationSettings$LocationUserSettingsStore$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/location/settings/LocationSettings$LocationUserSettingsStore;Ljava/util/function/Function;)V
 PLcom/android/server/location/settings/LocationSettings$LocationUserSettingsStore$$ExternalSyntheticLambda1;->run()V
@@ -28683,7 +29830,7 @@
 HPLcom/android/server/locksettings/AesEncryptionUtil;->encrypt(Ljavax/crypto/SecretKey;[B)[B
 HSPLcom/android/server/locksettings/BiometricDeferredQueue$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/locksettings/BiometricDeferredQueue;)V
 PLcom/android/server/locksettings/BiometricDeferredQueue$$ExternalSyntheticLambda0;->onFinished()V
-PLcom/android/server/locksettings/BiometricDeferredQueue$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/locksettings/BiometricDeferredQueue;I[B)V
+HPLcom/android/server/locksettings/BiometricDeferredQueue$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/locksettings/BiometricDeferredQueue;I[B)V
 PLcom/android/server/locksettings/BiometricDeferredQueue$$ExternalSyntheticLambda1;->run()V
 PLcom/android/server/locksettings/BiometricDeferredQueue$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/locksettings/BiometricDeferredQueue;)V
 PLcom/android/server/locksettings/BiometricDeferredQueue$$ExternalSyntheticLambda2;->run()V
@@ -28695,12 +29842,12 @@
 PLcom/android/server/locksettings/BiometricDeferredQueue;->$r8$lambda$pN5QSpeuHJelg-y54jRlG1BgjX4(Lcom/android/server/locksettings/BiometricDeferredQueue;)V
 PLcom/android/server/locksettings/BiometricDeferredQueue;->-$$Nest$smrequestHatFromGatekeeperPassword(Lcom/android/server/locksettings/SyntheticPasswordManager;Lcom/android/server/locksettings/BiometricDeferredQueue$UserAuthInfo;J)[B
 HSPLcom/android/server/locksettings/BiometricDeferredQueue;-><init>(Landroid/content/Context;Lcom/android/server/locksettings/SyntheticPasswordManager;Landroid/os/Handler;)V
-PLcom/android/server/locksettings/BiometricDeferredQueue;->addPendingLockoutResetForUser(I[B)V
+HPLcom/android/server/locksettings/BiometricDeferredQueue;->addPendingLockoutResetForUser(I[B)V
 PLcom/android/server/locksettings/BiometricDeferredQueue;->getGatekeeperService()Landroid/service/gatekeeper/IGateKeeperService;
-PLcom/android/server/locksettings/BiometricDeferredQueue;->lambda$addPendingLockoutResetForUser$1(I[B)V
+HPLcom/android/server/locksettings/BiometricDeferredQueue;->lambda$addPendingLockoutResetForUser$1(I[B)V
 PLcom/android/server/locksettings/BiometricDeferredQueue;->lambda$new$0()V
 PLcom/android/server/locksettings/BiometricDeferredQueue;->lambda$processPendingLockoutResets$2()V
-PLcom/android/server/locksettings/BiometricDeferredQueue;->processPendingLockoutResets()V
+HPLcom/android/server/locksettings/BiometricDeferredQueue;->processPendingLockoutResets()V
 PLcom/android/server/locksettings/BiometricDeferredQueue;->processPendingLockoutsForFace(Ljava/util/List;)V
 HPLcom/android/server/locksettings/BiometricDeferredQueue;->processPendingLockoutsForFingerprint(Ljava/util/List;)V
 PLcom/android/server/locksettings/BiometricDeferredQueue;->requestHatFromGatekeeperPassword(Lcom/android/server/locksettings/SyntheticPasswordManager;Lcom/android/server/locksettings/BiometricDeferredQueue$UserAuthInfo;J)[B
@@ -28723,7 +29870,7 @@
 PLcom/android/server/locksettings/LockSettingsService$1;-><init>(Lcom/android/server/locksettings/LockSettingsService;I)V
 PLcom/android/server/locksettings/LockSettingsService$1;->run()V
 HSPLcom/android/server/locksettings/LockSettingsService$2;-><init>(Lcom/android/server/locksettings/LockSettingsService;)V
-PLcom/android/server/locksettings/LockSettingsService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/locksettings/LockSettingsService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/locksettings/LockSettingsService$3;-><init>(Lcom/android/server/locksettings/LockSettingsService;Ljava/util/concurrent/CountDownLatch;)V
 HPLcom/android/server/locksettings/LockSettingsService$3;->onFinished(ILandroid/os/Bundle;)V
 PLcom/android/server/locksettings/LockSettingsService$3;->onProgress(IILandroid/os/Bundle;)V
@@ -28763,8 +29910,8 @@
 HSPLcom/android/server/locksettings/LockSettingsService$Injector;->getStrongAuthTracker()Lcom/android/server/locksettings/LockSettingsService$SynchronizedStrongAuthTracker;
 HSPLcom/android/server/locksettings/LockSettingsService$Injector;->getSyntheticPasswordManager(Lcom/android/server/locksettings/LockSettingsStorage;)Lcom/android/server/locksettings/SyntheticPasswordManager;
 HSPLcom/android/server/locksettings/LockSettingsService$Injector;->getUserManager()Landroid/os/UserManager;
-PLcom/android/server/locksettings/LockSettingsService$Injector;->getUserManagerInternal()Lcom/android/server/pm/UserManagerInternal;
-PLcom/android/server/locksettings/LockSettingsService$Injector;->hasEnrolledBiometrics(I)Z
+HPLcom/android/server/locksettings/LockSettingsService$Injector;->getUserManagerInternal()Lcom/android/server/pm/UserManagerInternal;
+HPLcom/android/server/locksettings/LockSettingsService$Injector;->hasEnrolledBiometrics(I)Z
 PLcom/android/server/locksettings/LockSettingsService$Injector;->isGsiRunning()Z
 PLcom/android/server/locksettings/LockSettingsService$Injector;->settingsGlobalGetInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
 PLcom/android/server/locksettings/LockSettingsService$Injector;->settingsSecureGetInt(Landroid/content/ContentResolver;Ljava/lang/String;II)I
@@ -28831,7 +29978,7 @@
 HSPLcom/android/server/locksettings/LockSettingsService;-><clinit>()V
 HSPLcom/android/server/locksettings/LockSettingsService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/locksettings/LockSettingsService;-><init>(Lcom/android/server/locksettings/LockSettingsService$Injector;)V
-PLcom/android/server/locksettings/LockSettingsService;->activateEscrowTokens(Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;I)V
+HPLcom/android/server/locksettings/LockSettingsService;->activateEscrowTokens(Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;I)V
 PLcom/android/server/locksettings/LockSettingsService;->addEscrowToken([BIILcom/android/internal/widget/LockPatternUtils$EscrowTokenStateChangeCallback;)J
 PLcom/android/server/locksettings/LockSettingsService;->addUserKeyAuth(I[B)V
 HPLcom/android/server/locksettings/LockSettingsService;->callToAuthSecretIfNeeded(ILcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;)V
@@ -28851,6 +29998,7 @@
 PLcom/android/server/locksettings/LockSettingsService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/locksettings/LockSettingsService;->dumpKeystoreKeys(Lcom/android/internal/util/IndentingPrintWriter;)V
 PLcom/android/server/locksettings/LockSettingsService;->enforceFrpResolved()V
+PLcom/android/server/locksettings/LockSettingsService;->enforceShell()V
 PLcom/android/server/locksettings/LockSettingsService;->ensureProfileKeystoreUnlocked(I)V
 PLcom/android/server/locksettings/LockSettingsService;->fingerprintManagerRemovalCallback(Ljava/util/concurrent/CountDownLatch;)Landroid/hardware/fingerprint/FingerprintManager$RemovalCallback;
 PLcom/android/server/locksettings/LockSettingsService;->fixateNewestUserKeyAuth(I)V
@@ -28869,13 +30017,13 @@
 PLcom/android/server/locksettings/LockSettingsService;->getFrpCredentialType()I
 HSPLcom/android/server/locksettings/LockSettingsService;->getGateKeeperService()Landroid/service/gatekeeper/IGateKeeperService;
 PLcom/android/server/locksettings/LockSettingsService;->getHashFactor(Lcom/android/internal/widget/LockscreenCredential;I)[B
-PLcom/android/server/locksettings/LockSettingsService;->getKey(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/locksettings/LockSettingsService;->getKey(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/locksettings/LockSettingsService;->getKeyChainSnapshot()Landroid/security/keystore/recovery/KeyChainSnapshot;
-PLcom/android/server/locksettings/LockSettingsService;->getKeyguardStoredQuality(I)I
+HSPLcom/android/server/locksettings/LockSettingsService;->getKeyguardStoredQuality(I)I
 HSPLcom/android/server/locksettings/LockSettingsService;->getLong(Ljava/lang/String;JI)J
 HPLcom/android/server/locksettings/LockSettingsService;->getProfilesWithSameLockScreen(I)Ljava/util/Set;
 PLcom/android/server/locksettings/LockSettingsService;->getRecoverySecretTypes()[I
-PLcom/android/server/locksettings/LockSettingsService;->getRecoveryStatus()Ljava/util/Map;
+HPLcom/android/server/locksettings/LockSettingsService;->getRecoveryStatus()Ljava/util/Map;
 PLcom/android/server/locksettings/LockSettingsService;->getRequestedPasswordHistoryLength(I)I
 PLcom/android/server/locksettings/LockSettingsService;->getSalt(I)Ljava/lang/String;
 HSPLcom/android/server/locksettings/LockSettingsService;->getSeparateProfileChallengeEnabled(I)Z+]Lcom/android/server/locksettings/LockSettingsService;Lcom/android/server/locksettings/LockSettingsService;
@@ -28888,18 +30036,19 @@
 PLcom/android/server/locksettings/LockSettingsService;->hasPendingEscrowToken(I)Z
 HPLcom/android/server/locksettings/LockSettingsService;->hasPermission(Ljava/lang/String;)Z
 HPLcom/android/server/locksettings/LockSettingsService;->hasSecureLockScreen()Z
-PLcom/android/server/locksettings/LockSettingsService;->hasUnifiedChallenge(I)Z
+HPLcom/android/server/locksettings/LockSettingsService;->hasUnifiedChallenge(I)Z
 PLcom/android/server/locksettings/LockSettingsService;->hideEncryptionNotification(Landroid/os/UserHandle;)V
 PLcom/android/server/locksettings/LockSettingsService;->importKey(Ljava/lang/String;[B)Ljava/lang/String;
 PLcom/android/server/locksettings/LockSettingsService;->importKeyWithMetadata(Ljava/lang/String;[B[B)Ljava/lang/String;
 PLcom/android/server/locksettings/LockSettingsService;->initRecoveryServiceWithSigFile(Ljava/lang/String;[B[B)V
 PLcom/android/server/locksettings/LockSettingsService;->initializeSyntheticPasswordLocked([BLcom/android/internal/widget/LockscreenCredential;I)Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;
+PLcom/android/server/locksettings/LockSettingsService;->isCallerShell()Z
 PLcom/android/server/locksettings/LockSettingsService;->isCredentialRequiredToDecrypt()Z
 HPLcom/android/server/locksettings/LockSettingsService;->isCredentialSharableWithParent(I)Z
 PLcom/android/server/locksettings/LockSettingsService;->isDeviceEncryptionEnabled()Z
 PLcom/android/server/locksettings/LockSettingsService;->isEscrowTokenActive(JI)Z
 PLcom/android/server/locksettings/LockSettingsService;->isProfileWithSeparatedLock(I)Z
-PLcom/android/server/locksettings/LockSettingsService;->isProfileWithUnifiedLock(I)Z
+HPLcom/android/server/locksettings/LockSettingsService;->isProfileWithUnifiedLock(I)Z
 HSPLcom/android/server/locksettings/LockSettingsService;->isSyntheticPasswordBasedCredentialLocked(I)Z
 PLcom/android/server/locksettings/LockSettingsService;->isUserKeyUnlocked(I)Z
 HSPLcom/android/server/locksettings/LockSettingsService;->isUserSecure(I)Z
@@ -28924,6 +30073,7 @@
 PLcom/android/server/locksettings/LockSettingsService;->onCleanupUser(I)V
 HPLcom/android/server/locksettings/LockSettingsService;->onCredentialVerified(Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;Landroid/app/admin/PasswordMetrics;I)V
 PLcom/android/server/locksettings/LockSettingsService;->onPostPasswordChanged(Lcom/android/internal/widget/LockscreenCredential;I)V
+PLcom/android/server/locksettings/LockSettingsService;->onShellCommand(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;Landroid/os/ShellCallback;Landroid/os/ResultReceiver;)V
 HSPLcom/android/server/locksettings/LockSettingsService;->onStartUser(I)V
 PLcom/android/server/locksettings/LockSettingsService;->onUnlockUser(I)V
 PLcom/android/server/locksettings/LockSettingsService;->pinOrPasswordQualityToCredentialType(I)I
@@ -28936,14 +30086,15 @@
 PLcom/android/server/locksettings/LockSettingsService;->removeKey(Ljava/lang/String;)V
 PLcom/android/server/locksettings/LockSettingsService;->removeKeystoreProfileKey(I)V
 PLcom/android/server/locksettings/LockSettingsService;->removeUser(IZ)V
-PLcom/android/server/locksettings/LockSettingsService;->reportSuccessfulBiometricUnlock(ZI)V
+HPLcom/android/server/locksettings/LockSettingsService;->reportSuccessfulBiometricUnlock(ZI)V
 PLcom/android/server/locksettings/LockSettingsService;->requireStrongAuth(II)V
-PLcom/android/server/locksettings/LockSettingsService;->scheduleGc()V
-PLcom/android/server/locksettings/LockSettingsService;->scheduleNonStrongBiometricIdleTimeout(I)V
+HPLcom/android/server/locksettings/LockSettingsService;->scheduleGc()V
+HPLcom/android/server/locksettings/LockSettingsService;->scheduleNonStrongBiometricIdleTimeout(I)V
 PLcom/android/server/locksettings/LockSettingsService;->sendCredentialsOnChangeIfRequired(Lcom/android/internal/widget/LockscreenCredential;IZ)V
 HPLcom/android/server/locksettings/LockSettingsService;->sendCredentialsOnUnlockIfRequired(Lcom/android/internal/widget/LockscreenCredential;I)V
 PLcom/android/server/locksettings/LockSettingsService;->setBoolean(Ljava/lang/String;ZI)V
 PLcom/android/server/locksettings/LockSettingsService;->setCredentialRequiredToDecrypt(Z)V
+PLcom/android/server/locksettings/LockSettingsService;->setDeviceUnlockedForUser(I)V
 PLcom/android/server/locksettings/LockSettingsService;->setKeyguardStoredQuality(II)V
 PLcom/android/server/locksettings/LockSettingsService;->setKeystorePassword([BI)V
 PLcom/android/server/locksettings/LockSettingsService;->setLockCredential(Lcom/android/internal/widget/LockscreenCredential;Lcom/android/internal/widget/LockscreenCredential;I)Z
@@ -28966,6 +30117,7 @@
 PLcom/android/server/locksettings/LockSettingsService;->showEncryptionNotificationForProfile(Landroid/os/UserHandle;Ljava/lang/String;)V
 HPLcom/android/server/locksettings/LockSettingsService;->spBasedDoVerifyCredential(Lcom/android/internal/widget/LockscreenCredential;ILcom/android/internal/widget/ICheckCredentialProgressCallback;I)Lcom/android/internal/widget/VerifyCredentialResponse;
 PLcom/android/server/locksettings/LockSettingsService;->spBasedSetLockCredentialInternalLocked(Lcom/android/internal/widget/LockscreenCredential;Lcom/android/internal/widget/LockscreenCredential;IZ)Z
+PLcom/android/server/locksettings/LockSettingsService;->startRecoverySessionWithCertPath(Ljava/lang/String;Ljava/lang/String;Landroid/security/keystore/recovery/RecoveryCertPath;[B[BLjava/util/List;)[B
 PLcom/android/server/locksettings/LockSettingsService;->storeGatekeeperPasswordTemporarily([B)J
 PLcom/android/server/locksettings/LockSettingsService;->synchronizeUnifiedWorkChallengeForProfiles(ILjava/util/Map;)V
 HSPLcom/android/server/locksettings/LockSettingsService;->systemReady()V
@@ -28986,7 +30138,11 @@
 PLcom/android/server/locksettings/LockSettingsService;->verifyGatekeeperPasswordHandle(JJI)Lcom/android/internal/widget/VerifyCredentialResponse;
 PLcom/android/server/locksettings/LockSettingsService;->verifyTiedProfileChallenge(Lcom/android/internal/widget/LockscreenCredential;II)Lcom/android/internal/widget/VerifyCredentialResponse;
 PLcom/android/server/locksettings/LockSettingsShellCommand;-><init>(Lcom/android/internal/widget/LockPatternUtils;Landroid/content/Context;II)V
+PLcom/android/server/locksettings/LockSettingsShellCommand;->checkCredential()Z
+PLcom/android/server/locksettings/LockSettingsShellCommand;->getOldCredential()Lcom/android/internal/widget/LockscreenCredential;
 PLcom/android/server/locksettings/LockSettingsShellCommand;->isNewCredentialSufficient(Lcom/android/internal/widget/LockscreenCredential;)Z
+PLcom/android/server/locksettings/LockSettingsShellCommand;->onCommand(Ljava/lang/String;)I
+PLcom/android/server/locksettings/LockSettingsShellCommand;->parseArgs()V
 HSPLcom/android/server/locksettings/LockSettingsStorage$Cache$CacheKey;-><init>()V
 HSPLcom/android/server/locksettings/LockSettingsStorage$Cache$CacheKey;-><init>(Lcom/android/server/locksettings/LockSettingsStorage$Cache$CacheKey-IA;)V
 HSPLcom/android/server/locksettings/LockSettingsStorage$Cache$CacheKey;->equals(Ljava/lang/Object;)Z
@@ -29007,7 +30163,7 @@
 HSPLcom/android/server/locksettings/LockSettingsStorage$Cache;->peekKeyValue(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;+]Lcom/android/server/locksettings/LockSettingsStorage$Cache;Lcom/android/server/locksettings/LockSettingsStorage$Cache;
 PLcom/android/server/locksettings/LockSettingsStorage$Cache;->purgePath(Ljava/lang/String;)V
 HSPLcom/android/server/locksettings/LockSettingsStorage$Cache;->put(ILjava/lang/String;Ljava/lang/Object;I)V
-PLcom/android/server/locksettings/LockSettingsStorage$Cache;->putFile(Ljava/lang/String;[B)V
+HSPLcom/android/server/locksettings/LockSettingsStorage$Cache;->putFile(Ljava/lang/String;[B)V
 HSPLcom/android/server/locksettings/LockSettingsStorage$Cache;->putFileIfUnchanged(Ljava/lang/String;[BI)V
 HSPLcom/android/server/locksettings/LockSettingsStorage$Cache;->putIfUnchanged(ILjava/lang/String;Ljava/lang/Object;II)V
 HPLcom/android/server/locksettings/LockSettingsStorage$Cache;->putKeyValue(Ljava/lang/String;Ljava/lang/String;I)V
@@ -29032,25 +30188,25 @@
 HSPLcom/android/server/locksettings/LockSettingsStorage;-><clinit>()V
 HSPLcom/android/server/locksettings/LockSettingsStorage;-><init>(Landroid/content/Context;)V
 PLcom/android/server/locksettings/LockSettingsStorage;->clearCache()V
-PLcom/android/server/locksettings/LockSettingsStorage;->deleteFile(Ljava/lang/String;)V
-PLcom/android/server/locksettings/LockSettingsStorage;->deleteSyntheticPasswordState(IJLjava/lang/String;)V
+HSPLcom/android/server/locksettings/LockSettingsStorage;->deleteFile(Ljava/lang/String;)V
+HPLcom/android/server/locksettings/LockSettingsStorage;->deleteSyntheticPasswordState(IJLjava/lang/String;)V
 HPLcom/android/server/locksettings/LockSettingsStorage;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
 PLcom/android/server/locksettings/LockSettingsStorage;->ensureSyntheticPasswordDirectoryForUser(I)V
-PLcom/android/server/locksettings/LockSettingsStorage;->fsyncDirectory(Ljava/io/File;)V
+HPLcom/android/server/locksettings/LockSettingsStorage;->fsyncDirectory(Ljava/io/File;)V
 HSPLcom/android/server/locksettings/LockSettingsStorage;->getBoolean(Ljava/lang/String;ZI)Z+]Lcom/android/server/locksettings/LockSettingsStorage;Lcom/android/server/locksettings/LockSettingsStorage;
 PLcom/android/server/locksettings/LockSettingsStorage;->getChildProfileLockFile(I)Ljava/lang/String;
-PLcom/android/server/locksettings/LockSettingsStorage;->getInt(Ljava/lang/String;II)I
+HSPLcom/android/server/locksettings/LockSettingsStorage;->getInt(Ljava/lang/String;II)I
 HSPLcom/android/server/locksettings/LockSettingsStorage;->getLockCredentialFilePathForUser(ILjava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/locksettings/LockSettingsStorage;->getLockPasswordFilename(I)Ljava/lang/String;
 HSPLcom/android/server/locksettings/LockSettingsStorage;->getLockPatternFilename(I)Ljava/lang/String;
 HSPLcom/android/server/locksettings/LockSettingsStorage;->getLong(Ljava/lang/String;JI)J
 PLcom/android/server/locksettings/LockSettingsStorage;->getPersistentDataBlockManager()Lcom/android/server/PersistentDataBlockManagerInternal;
 HSPLcom/android/server/locksettings/LockSettingsStorage;->getRebootEscrowFile(I)Ljava/lang/String;
-PLcom/android/server/locksettings/LockSettingsStorage;->getRebootEscrowServerBlob()Ljava/lang/String;
+HSPLcom/android/server/locksettings/LockSettingsStorage;->getRebootEscrowServerBlob()Ljava/lang/String;
 HSPLcom/android/server/locksettings/LockSettingsStorage;->getString(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;+]Lcom/android/server/locksettings/LockSettingsStorage;Lcom/android/server/locksettings/LockSettingsStorage;
 HSPLcom/android/server/locksettings/LockSettingsStorage;->getSynthenticPasswordStateFilePathForUser(IJLjava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/locksettings/LockSettingsStorage;->getSyntheticPasswordDirectoryForUser(I)Ljava/io/File;
-PLcom/android/server/locksettings/LockSettingsStorage;->hasChildProfileLock(I)Z
+HPLcom/android/server/locksettings/LockSettingsStorage;->hasChildProfileLock(I)Z
 HSPLcom/android/server/locksettings/LockSettingsStorage;->hasFile(Ljava/lang/String;)Z
 PLcom/android/server/locksettings/LockSettingsStorage;->hasPattern(I)Z
 HSPLcom/android/server/locksettings/LockSettingsStorage;->hasRebootEscrow(I)Z
@@ -29065,19 +30221,19 @@
 HSPLcom/android/server/locksettings/LockSettingsStorage;->readPatternHashIfExists(I)Lcom/android/server/locksettings/LockSettingsStorage$CredentialHash;
 PLcom/android/server/locksettings/LockSettingsStorage;->readPersistentDataBlock()Lcom/android/server/locksettings/LockSettingsStorage$PersistentData;
 PLcom/android/server/locksettings/LockSettingsStorage;->readRebootEscrow(I)[B
-PLcom/android/server/locksettings/LockSettingsStorage;->readRebootEscrowServerBlob()[B
+HSPLcom/android/server/locksettings/LockSettingsStorage;->readRebootEscrowServerBlob()[B
 HSPLcom/android/server/locksettings/LockSettingsStorage;->readSyntheticPasswordState(IJLjava/lang/String;)[B
 PLcom/android/server/locksettings/LockSettingsStorage;->removeChildProfileLock(I)V
 HSPLcom/android/server/locksettings/LockSettingsStorage;->removeKey(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;I)V
 HSPLcom/android/server/locksettings/LockSettingsStorage;->removeKey(Ljava/lang/String;I)V
-PLcom/android/server/locksettings/LockSettingsStorage;->removeRebootEscrow(I)V
-PLcom/android/server/locksettings/LockSettingsStorage;->removeRebootEscrowServerBlob()V
+HSPLcom/android/server/locksettings/LockSettingsStorage;->removeRebootEscrow(I)V
+HSPLcom/android/server/locksettings/LockSettingsStorage;->removeRebootEscrowServerBlob()V
 PLcom/android/server/locksettings/LockSettingsStorage;->removeUser(I)V
 PLcom/android/server/locksettings/LockSettingsStorage;->setBoolean(Ljava/lang/String;ZI)V
 HSPLcom/android/server/locksettings/LockSettingsStorage;->setDatabaseOnCreateCallback(Lcom/android/server/locksettings/LockSettingsStorage$Callback;)V
 PLcom/android/server/locksettings/LockSettingsStorage;->setInt(Ljava/lang/String;II)V
 PLcom/android/server/locksettings/LockSettingsStorage;->setLong(Ljava/lang/String;JI)V
-PLcom/android/server/locksettings/LockSettingsStorage;->setString(Ljava/lang/String;Ljava/lang/String;I)V
+HPLcom/android/server/locksettings/LockSettingsStorage;->setString(Ljava/lang/String;Ljava/lang/String;I)V
 PLcom/android/server/locksettings/LockSettingsStorage;->writeChildProfileLock(I[B)V
 PLcom/android/server/locksettings/LockSettingsStorage;->writeCredentialHash(Lcom/android/server/locksettings/LockSettingsStorage$CredentialHash;I)V
 HPLcom/android/server/locksettings/LockSettingsStorage;->writeFile(Ljava/lang/String;[B)V
@@ -29088,7 +30244,7 @@
 PLcom/android/server/locksettings/LockSettingsStorage;->writeRebootEscrowServerBlob([B)V
 PLcom/android/server/locksettings/LockSettingsStorage;->writeSyntheticPasswordState(IJLjava/lang/String;[B)V
 HSPLcom/android/server/locksettings/LockSettingsStrongAuth$1;-><init>(Lcom/android/server/locksettings/LockSettingsStrongAuth;Landroid/os/Looper;)V
-HPLcom/android/server/locksettings/LockSettingsStrongAuth$1;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/locksettings/LockSettingsStrongAuth$1;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/locksettings/LockSettingsStrongAuth$Injector;-><init>()V
 HSPLcom/android/server/locksettings/LockSettingsStrongAuth$Injector;->getAlarmManager(Landroid/content/Context;)Landroid/app/AlarmManager;
 HSPLcom/android/server/locksettings/LockSettingsStrongAuth$Injector;->getDefaultStrongAuthFlags(Landroid/content/Context;)I
@@ -29102,10 +30258,10 @@
 PLcom/android/server/locksettings/LockSettingsStrongAuth$StrongAuthTimeoutAlarmListener;->getLatestStrongAuthTime()J
 PLcom/android/server/locksettings/LockSettingsStrongAuth$StrongAuthTimeoutAlarmListener;->onAlarm()V
 PLcom/android/server/locksettings/LockSettingsStrongAuth$StrongAuthTimeoutAlarmListener;->setLatestStrongAuthTime(J)V
-PLcom/android/server/locksettings/LockSettingsStrongAuth;->-$$Nest$mhandleAddStrongAuthTracker(Lcom/android/server/locksettings/LockSettingsStrongAuth;Landroid/app/trust/IStrongAuthTracker;)V
+HSPLcom/android/server/locksettings/LockSettingsStrongAuth;->-$$Nest$mhandleAddStrongAuthTracker(Lcom/android/server/locksettings/LockSettingsStrongAuth;Landroid/app/trust/IStrongAuthTracker;)V
 PLcom/android/server/locksettings/LockSettingsStrongAuth;->-$$Nest$mhandleNoLongerRequireStrongAuth(Lcom/android/server/locksettings/LockSettingsStrongAuth;II)V
 PLcom/android/server/locksettings/LockSettingsStrongAuth;->-$$Nest$mhandleRefreshStrongAuthTimeout(Lcom/android/server/locksettings/LockSettingsStrongAuth;I)V
-PLcom/android/server/locksettings/LockSettingsStrongAuth;->-$$Nest$mhandleRemoveStrongAuthTracker(Lcom/android/server/locksettings/LockSettingsStrongAuth;Landroid/app/trust/IStrongAuthTracker;)V
+HSPLcom/android/server/locksettings/LockSettingsStrongAuth;->-$$Nest$mhandleRemoveStrongAuthTracker(Lcom/android/server/locksettings/LockSettingsStrongAuth;Landroid/app/trust/IStrongAuthTracker;)V
 PLcom/android/server/locksettings/LockSettingsStrongAuth;->-$$Nest$mhandleRemoveUser(Lcom/android/server/locksettings/LockSettingsStrongAuth;I)V
 PLcom/android/server/locksettings/LockSettingsStrongAuth;->-$$Nest$mhandleRequireStrongAuth(Lcom/android/server/locksettings/LockSettingsStrongAuth;II)V
 PLcom/android/server/locksettings/LockSettingsStrongAuth;->-$$Nest$mhandleScheduleNonStrongBiometricIdleTimeout(Lcom/android/server/locksettings/LockSettingsStrongAuth;I)V
@@ -29117,30 +30273,30 @@
 HPLcom/android/server/locksettings/LockSettingsStrongAuth;->cancelNonStrongBiometricAlarmListener(I)V
 HPLcom/android/server/locksettings/LockSettingsStrongAuth;->cancelNonStrongBiometricIdleAlarmListener(I)V
 PLcom/android/server/locksettings/LockSettingsStrongAuth;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
-PLcom/android/server/locksettings/LockSettingsStrongAuth;->handleAddStrongAuthTracker(Landroid/app/trust/IStrongAuthTracker;)V
+HSPLcom/android/server/locksettings/LockSettingsStrongAuth;->handleAddStrongAuthTracker(Landroid/app/trust/IStrongAuthTracker;)V
 PLcom/android/server/locksettings/LockSettingsStrongAuth;->handleNoLongerRequireStrongAuth(II)V
 PLcom/android/server/locksettings/LockSettingsStrongAuth;->handleNoLongerRequireStrongAuthOneUser(II)V
 PLcom/android/server/locksettings/LockSettingsStrongAuth;->handleRefreshStrongAuthTimeout(I)V
-PLcom/android/server/locksettings/LockSettingsStrongAuth;->handleRemoveStrongAuthTracker(Landroid/app/trust/IStrongAuthTracker;)V
+HSPLcom/android/server/locksettings/LockSettingsStrongAuth;->handleRemoveStrongAuthTracker(Landroid/app/trust/IStrongAuthTracker;)V
 PLcom/android/server/locksettings/LockSettingsStrongAuth;->handleRemoveUser(I)V
 PLcom/android/server/locksettings/LockSettingsStrongAuth;->handleRequireStrongAuth(II)V
 HPLcom/android/server/locksettings/LockSettingsStrongAuth;->handleRequireStrongAuthOneUser(II)V
 HPLcom/android/server/locksettings/LockSettingsStrongAuth;->handleScheduleNonStrongBiometricIdleTimeout(I)V
 PLcom/android/server/locksettings/LockSettingsStrongAuth;->handleScheduleNonStrongBiometricTimeout(I)V
-PLcom/android/server/locksettings/LockSettingsStrongAuth;->handleScheduleStrongAuthTimeout(I)V
-PLcom/android/server/locksettings/LockSettingsStrongAuth;->handleStrongBiometricUnlock(I)V
+HPLcom/android/server/locksettings/LockSettingsStrongAuth;->handleScheduleStrongAuthTimeout(I)V
+HPLcom/android/server/locksettings/LockSettingsStrongAuth;->handleStrongBiometricUnlock(I)V
 PLcom/android/server/locksettings/LockSettingsStrongAuth;->noLongerRequireStrongAuth(II)V
 PLcom/android/server/locksettings/LockSettingsStrongAuth;->notifyStrongAuthTrackers(II)V
 PLcom/android/server/locksettings/LockSettingsStrongAuth;->notifyStrongAuthTrackersForIsNonStrongBiometricAllowed(ZI)V
 PLcom/android/server/locksettings/LockSettingsStrongAuth;->refreshStrongAuthTimeout(I)V
 HSPLcom/android/server/locksettings/LockSettingsStrongAuth;->registerStrongAuthTracker(Landroid/app/trust/IStrongAuthTracker;)V
 PLcom/android/server/locksettings/LockSettingsStrongAuth;->removeUser(I)V
-PLcom/android/server/locksettings/LockSettingsStrongAuth;->reportSuccessfulBiometricUnlock(ZI)V
-PLcom/android/server/locksettings/LockSettingsStrongAuth;->reportSuccessfulStrongAuthUnlock(I)V
+HPLcom/android/server/locksettings/LockSettingsStrongAuth;->reportSuccessfulBiometricUnlock(ZI)V
+HPLcom/android/server/locksettings/LockSettingsStrongAuth;->reportSuccessfulStrongAuthUnlock(I)V
 PLcom/android/server/locksettings/LockSettingsStrongAuth;->reportUnlock(I)V
 HPLcom/android/server/locksettings/LockSettingsStrongAuth;->requireStrongAuth(II)V
 HPLcom/android/server/locksettings/LockSettingsStrongAuth;->rescheduleStrongAuthTimeoutAlarm(JI)V
-PLcom/android/server/locksettings/LockSettingsStrongAuth;->scheduleNonStrongBiometricIdleTimeout(I)V
+HPLcom/android/server/locksettings/LockSettingsStrongAuth;->scheduleNonStrongBiometricIdleTimeout(I)V
 PLcom/android/server/locksettings/LockSettingsStrongAuth;->setIsNonStrongBiometricAllowed(ZI)V
 PLcom/android/server/locksettings/LockSettingsStrongAuth;->setIsNonStrongBiometricAllowedOneUser(ZI)V
 HSPLcom/android/server/locksettings/LockSettingsStrongAuth;->unregisterStrongAuthTracker(Landroid/app/trust/IStrongAuthTracker;)V
@@ -29165,7 +30321,7 @@
 HSPLcom/android/server/locksettings/PasswordSlotManager;->refreshActiveSlots(Ljava/util/Set;)V
 PLcom/android/server/locksettings/PasswordSlotManager;->saveSlotMap()V
 PLcom/android/server/locksettings/PasswordSlotManager;->saveSlotMap(Ljava/io/OutputStream;)V
-PLcom/android/server/locksettings/RebootEscrowData;-><init>(B[B[BLcom/android/server/locksettings/RebootEscrowKey;)V
+HPLcom/android/server/locksettings/RebootEscrowData;-><init>(B[B[BLcom/android/server/locksettings/RebootEscrowKey;)V
 PLcom/android/server/locksettings/RebootEscrowData;->decryptBlobCurrentVersion(Ljavax/crypto/SecretKey;Lcom/android/server/locksettings/RebootEscrowKey;Ljava/io/DataInputStream;)[B
 PLcom/android/server/locksettings/RebootEscrowData;->fromEncryptedData(Lcom/android/server/locksettings/RebootEscrowKey;[BLjavax/crypto/SecretKey;)Lcom/android/server/locksettings/RebootEscrowData;
 HPLcom/android/server/locksettings/RebootEscrowData;->fromSyntheticPassword(Lcom/android/server/locksettings/RebootEscrowKey;B[BLjavax/crypto/SecretKey;)Lcom/android/server/locksettings/RebootEscrowData;
@@ -29178,20 +30334,20 @@
 PLcom/android/server/locksettings/RebootEscrowKey;->getKey()Ljavax/crypto/SecretKey;
 PLcom/android/server/locksettings/RebootEscrowKey;->getKeyBytes()[B
 HSPLcom/android/server/locksettings/RebootEscrowKeyStoreManager;-><init>()V
-PLcom/android/server/locksettings/RebootEscrowKeyStoreManager;->clearKeyStoreEncryptionKey()V
+HSPLcom/android/server/locksettings/RebootEscrowKeyStoreManager;->clearKeyStoreEncryptionKey()V
 PLcom/android/server/locksettings/RebootEscrowKeyStoreManager;->generateKeyStoreEncryptionKeyIfNeeded()Ljavax/crypto/SecretKey;
-PLcom/android/server/locksettings/RebootEscrowKeyStoreManager;->getKeyStoreEncryptionKey()Ljavax/crypto/SecretKey;
-PLcom/android/server/locksettings/RebootEscrowKeyStoreManager;->getKeyStoreEncryptionKeyLocked()Ljavax/crypto/SecretKey;
-PLcom/android/server/locksettings/RebootEscrowManager$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/locksettings/RebootEscrowManager;Landroid/os/Handler;Ljava/util/List;Ljava/util/List;)V
-PLcom/android/server/locksettings/RebootEscrowManager$$ExternalSyntheticLambda0;->run()V
+HSPLcom/android/server/locksettings/RebootEscrowKeyStoreManager;->getKeyStoreEncryptionKey()Ljavax/crypto/SecretKey;
+HSPLcom/android/server/locksettings/RebootEscrowKeyStoreManager;->getKeyStoreEncryptionKeyLocked()Ljavax/crypto/SecretKey;
+HSPLcom/android/server/locksettings/RebootEscrowManager$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/locksettings/RebootEscrowManager;Landroid/os/Handler;Ljava/util/List;Ljava/util/List;)V
+HSPLcom/android/server/locksettings/RebootEscrowManager$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/locksettings/RebootEscrowManager$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/locksettings/RebootEscrowManager;Landroid/os/Handler;ILjava/util/List;Ljava/util/List;)V
 PLcom/android/server/locksettings/RebootEscrowManager$$ExternalSyntheticLambda1;->run()V
 PLcom/android/server/locksettings/RebootEscrowManager$Callbacks;->isUserSecure(I)Z
 HSPLcom/android/server/locksettings/RebootEscrowManager$Injector;-><init>(Landroid/content/Context;Lcom/android/server/locksettings/LockSettingsStorage;)V
-PLcom/android/server/locksettings/RebootEscrowManager$Injector;->clearRebootEscrowProvider()V
-PLcom/android/server/locksettings/RebootEscrowManager$Injector;->createRebootEscrowProvider()Lcom/android/server/locksettings/RebootEscrowProviderInterface;
-PLcom/android/server/locksettings/RebootEscrowManager$Injector;->createRebootEscrowProviderIfNeeded()Lcom/android/server/locksettings/RebootEscrowProviderInterface;
-PLcom/android/server/locksettings/RebootEscrowManager$Injector;->getBootCount()I
+HSPLcom/android/server/locksettings/RebootEscrowManager$Injector;->clearRebootEscrowProvider()V
+HSPLcom/android/server/locksettings/RebootEscrowManager$Injector;->createRebootEscrowProvider()Lcom/android/server/locksettings/RebootEscrowProviderInterface;
+HSPLcom/android/server/locksettings/RebootEscrowManager$Injector;->createRebootEscrowProviderIfNeeded()Lcom/android/server/locksettings/RebootEscrowProviderInterface;
+HSPLcom/android/server/locksettings/RebootEscrowManager$Injector;->getBootCount()I
 PLcom/android/server/locksettings/RebootEscrowManager$Injector;->getCurrentTimeMillis()J
 HSPLcom/android/server/locksettings/RebootEscrowManager$Injector;->getEventLog()Lcom/android/server/locksettings/RebootEscrowManager$RebootEscrowEventLog;
 HSPLcom/android/server/locksettings/RebootEscrowManager$Injector;->getKeyStoreManager()Lcom/android/server/locksettings/RebootEscrowKeyStoreManager;
@@ -29200,21 +30356,21 @@
 PLcom/android/server/locksettings/RebootEscrowManager$Injector;->getRebootEscrowProvider()Lcom/android/server/locksettings/RebootEscrowProviderInterface;
 HSPLcom/android/server/locksettings/RebootEscrowManager$Injector;->getUserManager()Landroid/os/UserManager;
 PLcom/android/server/locksettings/RebootEscrowManager$Injector;->getVbmetaDigest(Z)Ljava/lang/String;
-PLcom/android/server/locksettings/RebootEscrowManager$Injector;->getWakeLock()Landroid/os/PowerManager$WakeLock;
+HSPLcom/android/server/locksettings/RebootEscrowManager$Injector;->getWakeLock()Landroid/os/PowerManager$WakeLock;
 PLcom/android/server/locksettings/RebootEscrowManager$Injector;->isNetworkConnected()Z
-PLcom/android/server/locksettings/RebootEscrowManager$Injector;->post(Landroid/os/Handler;Ljava/lang/Runnable;)V
+HSPLcom/android/server/locksettings/RebootEscrowManager$Injector;->post(Landroid/os/Handler;Ljava/lang/Runnable;)V
 PLcom/android/server/locksettings/RebootEscrowManager$Injector;->postDelayed(Landroid/os/Handler;Ljava/lang/Runnable;J)V
 PLcom/android/server/locksettings/RebootEscrowManager$Injector;->reportMetric(ZIIIIII)V
-PLcom/android/server/locksettings/RebootEscrowManager$Injector;->serverBasedResumeOnReboot()Z
+HSPLcom/android/server/locksettings/RebootEscrowManager$Injector;->serverBasedResumeOnReboot()Z
 PLcom/android/server/locksettings/RebootEscrowManager$RebootEscrowEvent;-><init>(I)V
-PLcom/android/server/locksettings/RebootEscrowManager$RebootEscrowEvent;-><init>(ILjava/lang/Integer;)V
+HPLcom/android/server/locksettings/RebootEscrowManager$RebootEscrowEvent;-><init>(ILjava/lang/Integer;)V
 PLcom/android/server/locksettings/RebootEscrowManager$RebootEscrowEvent;->getEventDescription()Ljava/lang/String;
 HSPLcom/android/server/locksettings/RebootEscrowManager$RebootEscrowEventLog;-><init>()V
 PLcom/android/server/locksettings/RebootEscrowManager$RebootEscrowEventLog;->addEntry(I)V
-PLcom/android/server/locksettings/RebootEscrowManager$RebootEscrowEventLog;->addEntry(II)V
-PLcom/android/server/locksettings/RebootEscrowManager$RebootEscrowEventLog;->addEntryInternal(Lcom/android/server/locksettings/RebootEscrowManager$RebootEscrowEvent;)V
+HPLcom/android/server/locksettings/RebootEscrowManager$RebootEscrowEventLog;->addEntry(II)V
+HPLcom/android/server/locksettings/RebootEscrowManager$RebootEscrowEventLog;->addEntryInternal(Lcom/android/server/locksettings/RebootEscrowManager$RebootEscrowEvent;)V
 PLcom/android/server/locksettings/RebootEscrowManager$RebootEscrowEventLog;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
-PLcom/android/server/locksettings/RebootEscrowManager;->$r8$lambda$MCZrkBnSWs5XvHixy2Q3XukpAoc(Lcom/android/server/locksettings/RebootEscrowManager;Landroid/os/Handler;Ljava/util/List;Ljava/util/List;)V
+HSPLcom/android/server/locksettings/RebootEscrowManager;->$r8$lambda$MCZrkBnSWs5XvHixy2Q3XukpAoc(Lcom/android/server/locksettings/RebootEscrowManager;Landroid/os/Handler;Ljava/util/List;Ljava/util/List;)V
 PLcom/android/server/locksettings/RebootEscrowManager;->$r8$lambda$z_uF9TRM4voE5C9plNz6cgWUY_k(Lcom/android/server/locksettings/RebootEscrowManager;Landroid/os/Handler;ILjava/util/List;Ljava/util/List;)V
 HSPLcom/android/server/locksettings/RebootEscrowManager;-><init>(Landroid/content/Context;Lcom/android/server/locksettings/RebootEscrowManager$Callbacks;Lcom/android/server/locksettings/LockSettingsStorage;)V
 HSPLcom/android/server/locksettings/RebootEscrowManager;-><init>(Lcom/android/server/locksettings/RebootEscrowManager$Injector;Lcom/android/server/locksettings/RebootEscrowManager$Callbacks;Lcom/android/server/locksettings/LockSettingsStorage;)V
@@ -29225,14 +30381,14 @@
 PLcom/android/server/locksettings/RebootEscrowManager;->clearRebootEscrowIfNeeded()V
 PLcom/android/server/locksettings/RebootEscrowManager;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
 PLcom/android/server/locksettings/RebootEscrowManager;->generateEscrowKeyIfNeeded()Lcom/android/server/locksettings/RebootEscrowKey;
-PLcom/android/server/locksettings/RebootEscrowManager;->getAndClearRebootEscrowKey(Ljavax/crypto/SecretKey;)Lcom/android/server/locksettings/RebootEscrowKey;
+HSPLcom/android/server/locksettings/RebootEscrowManager;->getAndClearRebootEscrowKey(Ljavax/crypto/SecretKey;)Lcom/android/server/locksettings/RebootEscrowKey;
 PLcom/android/server/locksettings/RebootEscrowManager;->getVbmetaDigestStatusOnRestoreComplete()I
-PLcom/android/server/locksettings/RebootEscrowManager;->lambda$loadRebootEscrowDataIfAvailable$0(Landroid/os/Handler;Ljava/util/List;Ljava/util/List;)V
+HSPLcom/android/server/locksettings/RebootEscrowManager;->lambda$loadRebootEscrowDataIfAvailable$0(Landroid/os/Handler;Ljava/util/List;Ljava/util/List;)V
 PLcom/android/server/locksettings/RebootEscrowManager;->lambda$scheduleLoadRebootEscrowDataOrFail$1(Landroid/os/Handler;ILjava/util/List;Ljava/util/List;)V
 HSPLcom/android/server/locksettings/RebootEscrowManager;->loadRebootEscrowDataIfAvailable(Landroid/os/Handler;)V
-PLcom/android/server/locksettings/RebootEscrowManager;->loadRebootEscrowDataWithRetry(Landroid/os/Handler;ILjava/util/List;Ljava/util/List;)V
-PLcom/android/server/locksettings/RebootEscrowManager;->onEscrowRestoreComplete(ZI)V
-PLcom/android/server/locksettings/RebootEscrowManager;->onGetRebootEscrowKeyFailed(Ljava/util/List;I)V
+HSPLcom/android/server/locksettings/RebootEscrowManager;->loadRebootEscrowDataWithRetry(Landroid/os/Handler;ILjava/util/List;Ljava/util/List;)V
+HSPLcom/android/server/locksettings/RebootEscrowManager;->onEscrowRestoreComplete(ZI)V
+HSPLcom/android/server/locksettings/RebootEscrowManager;->onGetRebootEscrowKeyFailed(Ljava/util/List;I)V
 PLcom/android/server/locksettings/RebootEscrowManager;->prepareRebootEscrow()Z
 PLcom/android/server/locksettings/RebootEscrowManager;->reportMetricOnRestoreComplete(ZI)V
 PLcom/android/server/locksettings/RebootEscrowManager;->restoreRebootEscrowForUser(ILcom/android/server/locksettings/RebootEscrowKey;Ljavax/crypto/SecretKey;)Z
@@ -29244,17 +30400,17 @@
 PLcom/android/server/locksettings/RebootEscrowProviderHalImpl;-><init>()V
 PLcom/android/server/locksettings/RebootEscrowProviderHalImpl;->getType()I
 PLcom/android/server/locksettings/RebootEscrowProviderHalImpl;->hasRebootEscrowSupport()Z
-PLcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl$Injector;->-$$Nest$mgetServiceConnection(Lcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl$Injector;)Lcom/android/server/locksettings/ResumeOnRebootServiceProvider$ResumeOnRebootServiceConnection;
-PLcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl$Injector;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl$Injector;->-$$Nest$mgetServiceConnection(Lcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl$Injector;)Lcom/android/server/locksettings/ResumeOnRebootServiceProvider$ResumeOnRebootServiceConnection;
+HSPLcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl$Injector;-><init>(Landroid/content/Context;)V
 PLcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl$Injector;->getServerBlobLifetimeInMillis()J
-PLcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl$Injector;->getServiceConnection()Lcom/android/server/locksettings/ResumeOnRebootServiceProvider$ResumeOnRebootServiceConnection;
+HSPLcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl$Injector;->getServiceConnection()Lcom/android/server/locksettings/ResumeOnRebootServiceProvider$ResumeOnRebootServiceConnection;
 PLcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl$Injector;->getServiceTimeoutInSeconds()J
-PLcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl;-><init>(Landroid/content/Context;Lcom/android/server/locksettings/LockSettingsStorage;)V
-PLcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl;-><init>(Lcom/android/server/locksettings/LockSettingsStorage;Lcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl$Injector;)V
+HSPLcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl;-><init>(Landroid/content/Context;Lcom/android/server/locksettings/LockSettingsStorage;)V
+HSPLcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl;-><init>(Lcom/android/server/locksettings/LockSettingsStorage;Lcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl$Injector;)V
 PLcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl;->clearRebootEscrowKey()V
-PLcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl;->getAndClearRebootEscrowKey(Ljavax/crypto/SecretKey;)Lcom/android/server/locksettings/RebootEscrowKey;
-PLcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl;->getType()I
-PLcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl;->hasRebootEscrowSupport()Z
+HSPLcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl;->getAndClearRebootEscrowKey(Ljavax/crypto/SecretKey;)Lcom/android/server/locksettings/RebootEscrowKey;
+HSPLcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl;->getType()I
+HSPLcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl;->hasRebootEscrowSupport()Z
 PLcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl;->storeRebootEscrowKey(Lcom/android/server/locksettings/RebootEscrowKey;Ljavax/crypto/SecretKey;)Z
 PLcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl;->unwrapServerBlob([BLjavax/crypto/SecretKey;)[B
 PLcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl;->wrapEscrowKey([BLjavax/crypto/SecretKey;)[B
@@ -29268,19 +30424,19 @@
 PLcom/android/server/locksettings/ResumeOnRebootServiceProvider$ResumeOnRebootServiceConnection$1;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 PLcom/android/server/locksettings/ResumeOnRebootServiceProvider$ResumeOnRebootServiceConnection$1;->onServiceDisconnected(Landroid/content/ComponentName;)V
 PLcom/android/server/locksettings/ResumeOnRebootServiceProvider$ResumeOnRebootServiceConnection;->-$$Nest$fputmBinder(Lcom/android/server/locksettings/ResumeOnRebootServiceProvider$ResumeOnRebootServiceConnection;Landroid/service/resumeonreboot/IResumeOnRebootService;)V
-PLcom/android/server/locksettings/ResumeOnRebootServiceProvider$ResumeOnRebootServiceConnection;-><init>(Landroid/content/Context;Landroid/content/ComponentName;)V
-PLcom/android/server/locksettings/ResumeOnRebootServiceProvider$ResumeOnRebootServiceConnection;-><init>(Landroid/content/Context;Landroid/content/ComponentName;Lcom/android/server/locksettings/ResumeOnRebootServiceProvider$ResumeOnRebootServiceConnection-IA;)V
+HSPLcom/android/server/locksettings/ResumeOnRebootServiceProvider$ResumeOnRebootServiceConnection;-><init>(Landroid/content/Context;Landroid/content/ComponentName;)V
+HSPLcom/android/server/locksettings/ResumeOnRebootServiceProvider$ResumeOnRebootServiceConnection;-><init>(Landroid/content/Context;Landroid/content/ComponentName;Lcom/android/server/locksettings/ResumeOnRebootServiceProvider$ResumeOnRebootServiceConnection-IA;)V
 PLcom/android/server/locksettings/ResumeOnRebootServiceProvider$ResumeOnRebootServiceConnection;->bindToService(J)V
 PLcom/android/server/locksettings/ResumeOnRebootServiceProvider$ResumeOnRebootServiceConnection;->throwTypedException(Landroid/os/ParcelableException;)V
 PLcom/android/server/locksettings/ResumeOnRebootServiceProvider$ResumeOnRebootServiceConnection;->unbindService()V
 PLcom/android/server/locksettings/ResumeOnRebootServiceProvider$ResumeOnRebootServiceConnection;->unwrap([BJ)[B
 PLcom/android/server/locksettings/ResumeOnRebootServiceProvider$ResumeOnRebootServiceConnection;->waitForLatch(Ljava/util/concurrent/CountDownLatch;Ljava/lang/String;J)V
 PLcom/android/server/locksettings/ResumeOnRebootServiceProvider$ResumeOnRebootServiceConnection;->wrapBlob([BJJ)[B
-PLcom/android/server/locksettings/ResumeOnRebootServiceProvider;-><clinit>()V
-PLcom/android/server/locksettings/ResumeOnRebootServiceProvider;-><init>(Landroid/content/Context;)V
-PLcom/android/server/locksettings/ResumeOnRebootServiceProvider;-><init>(Landroid/content/Context;Landroid/content/pm/PackageManager;)V
-PLcom/android/server/locksettings/ResumeOnRebootServiceProvider;->getServiceConnection()Lcom/android/server/locksettings/ResumeOnRebootServiceProvider$ResumeOnRebootServiceConnection;
-PLcom/android/server/locksettings/ResumeOnRebootServiceProvider;->resolveService()Landroid/content/pm/ServiceInfo;
+HSPLcom/android/server/locksettings/ResumeOnRebootServiceProvider;-><clinit>()V
+HSPLcom/android/server/locksettings/ResumeOnRebootServiceProvider;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/locksettings/ResumeOnRebootServiceProvider;-><init>(Landroid/content/Context;Landroid/content/pm/PackageManager;)V
+HSPLcom/android/server/locksettings/ResumeOnRebootServiceProvider;->getServiceConnection()Lcom/android/server/locksettings/ResumeOnRebootServiceProvider$ResumeOnRebootServiceConnection;
+HSPLcom/android/server/locksettings/ResumeOnRebootServiceProvider;->resolveService()Landroid/content/pm/ServiceInfo;
 HPLcom/android/server/locksettings/SP800Derive;-><init>([B)V
 HPLcom/android/server/locksettings/SP800Derive;->getMac()Ljavax/crypto/Mac;
 HPLcom/android/server/locksettings/SP800Derive;->update32(Ljavax/crypto/Mac;I)V
@@ -29301,7 +30457,7 @@
 HPLcom/android/server/locksettings/SyntheticPasswordCrypto;->personalisedHash([B[[B)[B
 HSPLcom/android/server/locksettings/SyntheticPasswordManager$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/locksettings/SyntheticPasswordManager;)V
 HSPLcom/android/server/locksettings/SyntheticPasswordManager$$ExternalSyntheticLambda0;->onValues(ILandroid/hardware/weaver/V1_0/WeaverConfig;)V
-PLcom/android/server/locksettings/SyntheticPasswordManager$$ExternalSyntheticLambda1;-><init>([Lcom/android/internal/widget/VerifyCredentialResponse;I)V
+HPLcom/android/server/locksettings/SyntheticPasswordManager$$ExternalSyntheticLambda1;-><init>([Lcom/android/internal/widget/VerifyCredentialResponse;I)V
 PLcom/android/server/locksettings/SyntheticPasswordManager$$ExternalSyntheticLambda1;->onValues(ILandroid/hardware/weaver/V1_0/WeaverReadResponse;)V
 PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationResult;-><init>()V
 PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->-$$Nest$fgetmEncryptedEscrowSplit0(Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;)[B
@@ -29310,7 +30466,7 @@
 PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;-><init>(B)V
 PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->create()Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;
 PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->deriveDiskEncryptionKey()[B
-PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->deriveGkPassword()[B
+HPLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->deriveGkPassword()[B
 PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->deriveKeyStorePassword()[B
 PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->deriveMetricsKey()[B
 HPLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->derivePassword([B)[B
@@ -29320,7 +30476,7 @@
 PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->getSyntheticPassword()[B
 PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->getVersion()B
 PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->recreate([B[B)V
-PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->recreateDirectly([B)V
+HPLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->recreateDirectly([B)V
 PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->recreateFromEscrow([B)V
 PLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;->setEscrowData([B[B)V
 HSPLcom/android/server/locksettings/SyntheticPasswordManager$PasswordData;-><init>()V
@@ -29347,7 +30503,7 @@
 HSPLcom/android/server/locksettings/SyntheticPasswordManager;-><clinit>()V
 HSPLcom/android/server/locksettings/SyntheticPasswordManager;-><init>(Landroid/content/Context;Lcom/android/server/locksettings/LockSettingsStorage;Landroid/os/UserManager;Lcom/android/server/locksettings/PasswordSlotManager;)V
 PLcom/android/server/locksettings/SyntheticPasswordManager;->activateTokenBasedSyntheticPassword(JLcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;I)Z
-PLcom/android/server/locksettings/SyntheticPasswordManager;->bytesToHex([B)[B
+HPLcom/android/server/locksettings/SyntheticPasswordManager;->bytesToHex([B)[B
 PLcom/android/server/locksettings/SyntheticPasswordManager;->clearSidForUser(I)V
 HPLcom/android/server/locksettings/SyntheticPasswordManager;->computePasswordToken(Lcom/android/internal/widget/LockscreenCredential;Lcom/android/server/locksettings/SyntheticPasswordManager$PasswordData;)[B
 PLcom/android/server/locksettings/SyntheticPasswordManager;->createPasswordBasedSyntheticPassword(Landroid/service/gatekeeper/IGateKeeperService;Lcom/android/internal/widget/LockscreenCredential;Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;I)J
@@ -29357,7 +30513,7 @@
 PLcom/android/server/locksettings/SyntheticPasswordManager;->createTokenBasedSyntheticPassword([BIILcom/android/internal/widget/LockPatternUtils$EscrowTokenStateChangeCallback;)J
 PLcom/android/server/locksettings/SyntheticPasswordManager;->decryptSPBlob(Ljava/lang/String;[B[B)[B
 PLcom/android/server/locksettings/SyntheticPasswordManager;->destroyAllWeakTokenBasedSyntheticPasswords(I)V
-PLcom/android/server/locksettings/SyntheticPasswordManager;->destroyEscrowData(I)V
+HPLcom/android/server/locksettings/SyntheticPasswordManager;->destroyEscrowData(I)V
 PLcom/android/server/locksettings/SyntheticPasswordManager;->destroyPasswordBasedSyntheticPassword(JI)V
 PLcom/android/server/locksettings/SyntheticPasswordManager;->destroySPBlobKey(Ljava/lang/String;)V
 PLcom/android/server/locksettings/SyntheticPasswordManager;->destroyState(Ljava/lang/String;JI)V
@@ -29371,22 +30527,22 @@
 HPLcom/android/server/locksettings/SyntheticPasswordManager;->getKeyName(J)Ljava/lang/String;
 PLcom/android/server/locksettings/SyntheticPasswordManager;->getNextAvailableWeaverSlot()I
 PLcom/android/server/locksettings/SyntheticPasswordManager;->getPasswordMetrics(Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;JI)Landroid/app/admin/PasswordMetrics;
-PLcom/android/server/locksettings/SyntheticPasswordManager;->getPendingTokensForUser(I)Ljava/util/Set;
+HPLcom/android/server/locksettings/SyntheticPasswordManager;->getPendingTokensForUser(I)Ljava/util/Set;
 PLcom/android/server/locksettings/SyntheticPasswordManager;->getTokenBasedBlobType(I)B
 HSPLcom/android/server/locksettings/SyntheticPasswordManager;->getUsedWeaverSlots()Ljava/util/Set;
 HSPLcom/android/server/locksettings/SyntheticPasswordManager;->getWeaverService()Landroid/hardware/weaver/V1_0/IWeaver;
 PLcom/android/server/locksettings/SyntheticPasswordManager;->hasEscrowData(I)Z
-PLcom/android/server/locksettings/SyntheticPasswordManager;->hasPasswordMetrics(JI)Z
+HPLcom/android/server/locksettings/SyntheticPasswordManager;->hasPasswordMetrics(JI)Z
 PLcom/android/server/locksettings/SyntheticPasswordManager;->hasSidForUser(I)Z
-PLcom/android/server/locksettings/SyntheticPasswordManager;->hasState(Ljava/lang/String;JI)Z
+HPLcom/android/server/locksettings/SyntheticPasswordManager;->hasState(Ljava/lang/String;JI)Z
 HSPLcom/android/server/locksettings/SyntheticPasswordManager;->initWeaverService()V
-PLcom/android/server/locksettings/SyntheticPasswordManager;->isWeaverAvailable()Z
+HPLcom/android/server/locksettings/SyntheticPasswordManager;->isWeaverAvailable()Z
 HSPLcom/android/server/locksettings/SyntheticPasswordManager;->lambda$initWeaverService$0(ILandroid/hardware/weaver/V1_0/WeaverConfig;)V
 HPLcom/android/server/locksettings/SyntheticPasswordManager;->lambda$weaverVerify$1([Lcom/android/internal/widget/VerifyCredentialResponse;IILandroid/hardware/weaver/V1_0/WeaverReadResponse;)V
 PLcom/android/server/locksettings/SyntheticPasswordManager;->loadEscrowData(Lcom/android/server/locksettings/SyntheticPasswordManager$AuthenticationToken;I)Z
 PLcom/android/server/locksettings/SyntheticPasswordManager;->loadSecdiscardable(JI)[B
 HSPLcom/android/server/locksettings/SyntheticPasswordManager;->loadState(Ljava/lang/String;JI)[B
-PLcom/android/server/locksettings/SyntheticPasswordManager;->loadSyntheticPasswordHandle(I)[B
+HPLcom/android/server/locksettings/SyntheticPasswordManager;->loadSyntheticPasswordHandle(I)[B
 HSPLcom/android/server/locksettings/SyntheticPasswordManager;->loadWeaverSlot(JI)I
 PLcom/android/server/locksettings/SyntheticPasswordManager;->migrateFrpPasswordLocked(JLandroid/content/pm/UserInfo;I)V
 PLcom/android/server/locksettings/SyntheticPasswordManager;->migrateKeyNamespace()Z
@@ -29403,10 +30559,10 @@
 PLcom/android/server/locksettings/SyntheticPasswordManager;->saveState(Ljava/lang/String;[BJI)V
 PLcom/android/server/locksettings/SyntheticPasswordManager;->saveSyntheticPasswordHandle([BI)V
 PLcom/android/server/locksettings/SyntheticPasswordManager;->saveWeaverSlot(IJI)V
-PLcom/android/server/locksettings/SyntheticPasswordManager;->scrypt([B[BIIII)[B
+HPLcom/android/server/locksettings/SyntheticPasswordManager;->scrypt([B[BIIII)[B
 PLcom/android/server/locksettings/SyntheticPasswordManager;->secureRandom(I)[B
 PLcom/android/server/locksettings/SyntheticPasswordManager;->synchronizeWeaverFrpPassword(Lcom/android/server/locksettings/SyntheticPasswordManager$PasswordData;III)V
-PLcom/android/server/locksettings/SyntheticPasswordManager;->toByteArrayList([B)Ljava/util/ArrayList;
+HPLcom/android/server/locksettings/SyntheticPasswordManager;->toByteArrayList([B)Ljava/util/ArrayList;
 PLcom/android/server/locksettings/SyntheticPasswordManager;->transformUnderSecdiscardable([B[B)[B
 HPLcom/android/server/locksettings/SyntheticPasswordManager;->transformUnderWeaverSecret([B[B)[B
 PLcom/android/server/locksettings/SyntheticPasswordManager;->unregisterWeakEscrowTokenRemovedListener(Lcom/android/internal/widget/IWeakEscrowTokenRemovedListener;)Z
@@ -29425,7 +30581,7 @@
 PLcom/android/server/locksettings/recoverablekeystore/KeyStoreProxy;->containsAlias(Ljava/lang/String;)Z
 HSPLcom/android/server/locksettings/recoverablekeystore/KeyStoreProxyImpl;-><init>(Ljava/security/KeyStore;)V
 PLcom/android/server/locksettings/recoverablekeystore/KeyStoreProxyImpl;->containsAlias(Ljava/lang/String;)Z
-PLcom/android/server/locksettings/recoverablekeystore/KeyStoreProxyImpl;->deleteEntry(Ljava/lang/String;)V
+HSPLcom/android/server/locksettings/recoverablekeystore/KeyStoreProxyImpl;->deleteEntry(Ljava/lang/String;)V
 HSPLcom/android/server/locksettings/recoverablekeystore/KeyStoreProxyImpl;->getAndLoadAndroidKeyStore()Ljava/security/KeyStore;
 PLcom/android/server/locksettings/recoverablekeystore/KeyStoreProxyImpl;->getKey(Ljava/lang/String;[C)Ljava/security/Key;
 PLcom/android/server/locksettings/recoverablekeystore/KeyStoreProxyImpl;->setEntry(Ljava/lang/String;Ljava/security/KeyStore$Entry;Ljava/security/KeyStore$ProtectionParameter;)V
@@ -29440,7 +30596,7 @@
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->hashCredentialsBySaltedSha256([B[B)[B
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->hashCredentialsByScrypt([B[B)[B
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->isCustomLockScreen()Z
-PLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->newInstance(Landroid/content/Context;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;Lcom/android/server/locksettings/recoverablekeystore/RecoverySnapshotListenersStorage;II[BZ)Lcom/android/server/locksettings/recoverablekeystore/KeySyncTask;
+HPLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->newInstance(Landroid/content/Context;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;Lcom/android/server/locksettings/recoverablekeystore/RecoverySnapshotListenersStorage;II[BZ)Lcom/android/server/locksettings/recoverablekeystore/KeySyncTask;
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->run()V
 HPLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->shouldCreateSnapshot(I)Z
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncTask;->shouldUseScryptToHashCredential()Z
@@ -29451,8 +30607,11 @@
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncUtils;->concat([[B)[B
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncUtils;->decryptApplicationKey([B[B[B)[B
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncUtils;->decryptRecoveryClaimResponse([B[B[B)[B
+PLcom/android/server/locksettings/recoverablekeystore/KeySyncUtils;->decryptRecoveryKey([B[B)[B
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncUtils;->deserializePublicKey([B)Ljava/security/PublicKey;
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncUtils;->encryptKeysWithRecoveryKey(Ljavax/crypto/SecretKey;Ljava/util/Map;)Ljava/util/Map;
+PLcom/android/server/locksettings/recoverablekeystore/KeySyncUtils;->encryptRecoveryClaim(Ljava/security/PublicKey;[B[B[B[B)[B
+PLcom/android/server/locksettings/recoverablekeystore/KeySyncUtils;->generateKeyClaimant()[B
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncUtils;->locallyEncryptRecoveryKey([BLjavax/crypto/SecretKey;)[B
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncUtils;->packVaultParams(Ljava/security/PublicKey;JI[B)[B
 PLcom/android/server/locksettings/recoverablekeystore/KeySyncUtils;->thmEncryptRecoveryKey(Ljava/security/PublicKey;[B[BLjavax/crypto/SecretKey;)[B
@@ -29486,6 +30645,7 @@
 PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStorageException;-><init>(Ljava/lang/String;)V
 HSPLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;-><init>(Landroid/content/Context;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverySessionStorage;Ljava/util/concurrent/ScheduledExecutorService;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;Lcom/android/server/locksettings/recoverablekeystore/RecoverySnapshotListenersStorage;Lcom/android/server/locksettings/recoverablekeystore/PlatformKeyManager;Lcom/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage;Lcom/android/server/locksettings/recoverablekeystore/TestOnlyInsecureCertificateHelper;Lcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager;)V
 HPLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->checkRecoverKeyStorePermission()V
+PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->closeSession(Ljava/lang/String;)V
 PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->decryptRecoveryKey(Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverySessionStorage$Entry;[B)[B
 PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->generateKey(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->generateKeyWithMetadata(Ljava/lang/String;[B)Ljava/lang/String;
@@ -29495,17 +30655,22 @@
 HPLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->getKeyChainSnapshot()Landroid/security/keystore/recovery/KeyChainSnapshot;
 PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->getRecoverySecretTypes()[I
 HPLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->getRecoveryStatus()Ljava/util/Map;
+PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->importKeyMaterials(IILjava/util/Map;)Ljava/util/Map;
 PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->importKeyWithMetadata(Ljava/lang/String;[B[B)Ljava/lang/String;
-PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->initRecoveryService(Ljava/lang/String;[B)V
+HPLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->initRecoveryService(Ljava/lang/String;[B)V
 PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->initRecoveryServiceWithSigFile(Ljava/lang/String;[B[B)V
 HPLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->lockScreenSecretAvailable(I[BI)V
 PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->lockScreenSecretChanged(I[BI)V
 PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->publicKeysMatch(Ljava/security/PublicKey;[B)Z
+PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->recoverApplicationKeys([BLjava/util/List;)Ljava/util/Map;
+PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->recoverKeyChainSnapshot(Ljava/lang/String;[BLjava/util/List;)Ljava/util/Map;
 PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->removeKey(Ljava/lang/String;)V
 PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->setRecoverySecretTypes([I)V
 PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->setRecoveryStatus(Ljava/lang/String;I)V
 PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->setServerParams([B)V
 PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->setSnapshotCreatedPendingIntent(Landroid/app/PendingIntent;)V
+PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->startRecoverySession(Ljava/lang/String;[B[B[BLjava/util/List;)[B
+PLcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;->startRecoverySessionWithCertPath(Ljava/lang/String;Ljava/lang/String;Landroid/security/keystore/recovery/RecoveryCertPath;[B[BLjava/util/List;)[B
 HSPLcom/android/server/locksettings/recoverablekeystore/RecoverySnapshotListenersStorage;-><init>()V
 PLcom/android/server/locksettings/recoverablekeystore/RecoverySnapshotListenersStorage;->recoverySnapshotAvailable(I)V
 PLcom/android/server/locksettings/recoverablekeystore/RecoverySnapshotListenersStorage;->setSnapshotListener(ILandroid/app/PendingIntent;)V
@@ -29513,9 +30678,11 @@
 PLcom/android/server/locksettings/recoverablekeystore/SecureBox$AesGcmOperation;-><clinit>()V
 PLcom/android/server/locksettings/recoverablekeystore/SecureBox$AesGcmOperation;-><init>(Ljava/lang/String;I)V
 PLcom/android/server/locksettings/recoverablekeystore/SecureBox;-><clinit>()V
+PLcom/android/server/locksettings/recoverablekeystore/SecureBox;->aesGcmDecrypt(Ljavax/crypto/SecretKey;[B[B[B)[B
 PLcom/android/server/locksettings/recoverablekeystore/SecureBox;->aesGcmEncrypt(Ljavax/crypto/SecretKey;[B[B[B)[B
 PLcom/android/server/locksettings/recoverablekeystore/SecureBox;->aesGcmInternal(Lcom/android/server/locksettings/recoverablekeystore/SecureBox$AesGcmOperation;Ljavax/crypto/SecretKey;[B[B[B)[B
 PLcom/android/server/locksettings/recoverablekeystore/SecureBox;->concat([[B)[B
+PLcom/android/server/locksettings/recoverablekeystore/SecureBox;->decrypt(Ljava/security/PrivateKey;[B[B[B)[B
 PLcom/android/server/locksettings/recoverablekeystore/SecureBox;->dhComputeSecret(Ljava/security/PrivateKey;Ljava/security/PublicKey;)[B
 PLcom/android/server/locksettings/recoverablekeystore/SecureBox;->emptyByteArrayIfNull([B)[B
 PLcom/android/server/locksettings/recoverablekeystore/SecureBox;->encodePublicKey(Ljava/security/PublicKey;)[B
@@ -29523,12 +30690,13 @@
 PLcom/android/server/locksettings/recoverablekeystore/SecureBox;->genKeyPair()Ljava/security/KeyPair;
 PLcom/android/server/locksettings/recoverablekeystore/SecureBox;->genRandomNonce()[B
 PLcom/android/server/locksettings/recoverablekeystore/SecureBox;->hkdfDeriveKey([B[B[B)Ljavax/crypto/SecretKey;
+PLcom/android/server/locksettings/recoverablekeystore/SecureBox;->readEncryptedPayload(Ljava/nio/ByteBuffer;I)[B
 HSPLcom/android/server/locksettings/recoverablekeystore/TestOnlyInsecureCertificateHelper;-><init>()V
 PLcom/android/server/locksettings/recoverablekeystore/TestOnlyInsecureCertificateHelper;->getDefaultCertificateAliasIfEmpty(Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/locksettings/recoverablekeystore/TestOnlyInsecureCertificateHelper;->getRootCertificate(Ljava/lang/String;)Ljava/security/cert/X509Certificate;
 PLcom/android/server/locksettings/recoverablekeystore/TestOnlyInsecureCertificateHelper;->isTestOnlyCertificateAlias(Ljava/lang/String;)Z
 PLcom/android/server/locksettings/recoverablekeystore/TestOnlyInsecureCertificateHelper;->isValidRootCertificateAlias(Ljava/lang/String;)Z
-PLcom/android/server/locksettings/recoverablekeystore/WrappedKey;-><init>([B[B[BII)V
+HSPLcom/android/server/locksettings/recoverablekeystore/WrappedKey;-><init>([B[B[BII)V
 PLcom/android/server/locksettings/recoverablekeystore/WrappedKey;->fromSecretKey(Lcom/android/server/locksettings/recoverablekeystore/PlatformEncryptionKey;Ljavax/crypto/SecretKey;[B)Lcom/android/server/locksettings/recoverablekeystore/WrappedKey;
 PLcom/android/server/locksettings/recoverablekeystore/WrappedKey;->getKeyMaterial()[B
 PLcom/android/server/locksettings/recoverablekeystore/WrappedKey;->getKeyMetadata()[B
@@ -29541,8 +30709,8 @@
 PLcom/android/server/locksettings/recoverablekeystore/certificate/CertUtils;->decodeBase64(Ljava/lang/String;)[B
 PLcom/android/server/locksettings/recoverablekeystore/certificate/CertUtils;->decodeCert(Ljava/io/InputStream;)Ljava/security/cert/X509Certificate;
 PLcom/android/server/locksettings/recoverablekeystore/certificate/CertUtils;->decodeCert([B)Ljava/security/cert/X509Certificate;
-PLcom/android/server/locksettings/recoverablekeystore/certificate/CertUtils;->getXmlDirectChildren(Lorg/w3c/dom/Element;Ljava/lang/String;)Ljava/util/List;
-PLcom/android/server/locksettings/recoverablekeystore/certificate/CertUtils;->getXmlNodeContents(ILorg/w3c/dom/Element;[Ljava/lang/String;)Ljava/util/List;
+HPLcom/android/server/locksettings/recoverablekeystore/certificate/CertUtils;->getXmlDirectChildren(Lorg/w3c/dom/Element;Ljava/lang/String;)Ljava/util/List;
+HPLcom/android/server/locksettings/recoverablekeystore/certificate/CertUtils;->getXmlNodeContents(ILorg/w3c/dom/Element;[Ljava/lang/String;)Ljava/util/List;
 PLcom/android/server/locksettings/recoverablekeystore/certificate/CertUtils;->getXmlRootNode([B)Lorg/w3c/dom/Element;
 PLcom/android/server/locksettings/recoverablekeystore/certificate/CertUtils;->validateCert(Ljava/util/Date;Ljava/security/cert/X509Certificate;Ljava/util/List;Ljava/security/cert/X509Certificate;)Ljava/security/cert/CertPath;
 PLcom/android/server/locksettings/recoverablekeystore/certificate/CertUtils;->validateCertPath(Ljava/security/cert/X509Certificate;Ljava/security/cert/CertPath;)V
@@ -29570,7 +30738,7 @@
 PLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->deserialize(Ljava/io/InputStream;)Landroid/security/keystore/recovery/KeyChainSnapshot;
 HPLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->deserializeInternal(Ljava/io/InputStream;)Landroid/security/keystore/recovery/KeyChainSnapshot;
 HPLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->readBlobTag(Landroid/util/TypedXmlPullParser;Ljava/lang/String;)[B
-PLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->readCertPathTag(Landroid/util/TypedXmlPullParser;Ljava/lang/String;)Ljava/security/cert/CertPath;
+HPLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->readCertPathTag(Landroid/util/TypedXmlPullParser;Ljava/lang/String;)Ljava/security/cert/CertPath;
 HPLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->readIntTag(Landroid/util/TypedXmlPullParser;Ljava/lang/String;)I
 HPLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->readKeyChainProtectionParams(Landroid/util/TypedXmlPullParser;)Landroid/security/keystore/recovery/KeyChainProtectionParams;
 HPLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer;->readKeyChainProtectionParamsList(Landroid/util/TypedXmlPullParser;)Ljava/util/List;
@@ -29596,18 +30764,18 @@
 PLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotSerializer;->writePropertyTag(Landroid/util/TypedXmlSerializer;Ljava/lang/String;Ljava/security/cert/CertPath;)V
 PLcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotSerializer;->writePropertyTag(Landroid/util/TypedXmlSerializer;Ljava/lang/String;[B)V
 HSPLcom/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage;-><init>(Lcom/android/server/locksettings/recoverablekeystore/KeyStoreProxy;)V
-PLcom/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage;->deleteEntry(IILjava/lang/String;)V
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage;->deleteEntry(IILjava/lang/String;)V
 HPLcom/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage;->getGrantAlias(IILjava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage;->getInstance()Lcom/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage;
-HPLcom/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage;->getInternalAlias(IILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage;->getInternalAlias(IILjava/lang/String;)Ljava/lang/String;
 HPLcom/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage;->makeKeystoreEngineGrantString(ILjava/lang/String;)Ljava/lang/String;
 PLcom/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage;->setSymmetricKeyEntry(IILjava/lang/String;[B)V
 HSPLcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager$1;-><init>(Lcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager;)V
 HSPLcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager;-><init>(Landroid/content/Context;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;Landroid/os/UserManager;Lcom/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage;)V
 HSPLcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager;->getInstance(Landroid/content/Context;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;Lcom/android/server/locksettings/recoverablekeystore/storage/ApplicationKeyStorage;)Lcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager;
 HPLcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager;->registerRecoveryAgent(II)V
-PLcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager;->removeAllKeysForRecoveryAgent(II)V
-PLcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager;->removeDataForUser(I)V
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager;->removeAllKeysForRecoveryAgent(II)V
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager;->removeDataForUser(I)V
 HPLcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager;->storeUserSerialNumber(IJ)V
 HSPLcom/android/server/locksettings/recoverablekeystore/storage/CleanupManager;->verifyKnownUsers()V
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb$$ExternalSyntheticLambda0;-><init>(Ljava/util/StringJoiner;)V
@@ -29619,14 +30787,14 @@
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->ensureRootOfTrustEntryExists(IILjava/lang/String;)V
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->ensureUserMetadataEntryExists(I)V
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getActiveRootOfTrust(II)Ljava/lang/String;
-PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getAllKeys(III)Ljava/util/Map;
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getAllKeys(III)Ljava/util/Map;
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getBytes(IILjava/lang/String;)[B
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getBytes(IILjava/lang/String;Ljava/lang/String;)[B
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getCounterId(II)Ljava/lang/Long;
 HPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getLong(IILjava/lang/String;)Ljava/lang/Long;
-PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getLong(IILjava/lang/String;Ljava/lang/String;)Ljava/lang/Long;
-HPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getPlatformKeyGenerationId(I)I
-HPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getRecoveryAgents(I)Ljava/util/List;
+HPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getLong(IILjava/lang/String;Ljava/lang/String;)Ljava/lang/Long;
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getPlatformKeyGenerationId(I)I
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getRecoveryAgents(I)Ljava/util/List;
 HPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getRecoverySecretTypes(II)[I
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getRecoveryServiceCertPath(IILjava/lang/String;)Ljava/security/cert/CertPath;
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->getRecoveryServiceCertSerial(IILjava/lang/String;)Ljava/lang/Long;
@@ -29640,8 +30808,11 @@
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->lambda$setRecoverySecretTypes$0(Ljava/util/StringJoiner;I)V
 HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->newInstance(Landroid/content/Context;)Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->removeKey(ILjava/lang/String;)Z
-HPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->removeUserFromAllTables(I)V
-PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->removeUserFromKeysTable(I)Z
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->removeUserFromAllTables(I)V
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->removeUserFromKeysTable(I)Z
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->removeUserFromRecoveryServiceMetadataTable(I)Z
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->removeUserFromRootOfTrustTable(I)Z
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->removeUserFromUserMetadataTable(I)Z
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->setActiveRootOfTrust(IILjava/lang/String;)J
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->setBytes(IILjava/lang/String;Ljava/lang/String;[B)J
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->setBytes(IILjava/lang/String;[B)J
@@ -29659,16 +30830,26 @@
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDb;->setUserSerialNumber(IJ)J
 HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbHelper;-><init>(Landroid/content/Context;)V
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbHelper;->upgradeDbForVersion5(Landroid/database/sqlite/SQLiteDatabase;)V
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySessionStorage$Entry;->-$$Nest$fgetmSessionId(Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverySessionStorage$Entry;)Ljava/lang/String;
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySessionStorage$Entry;-><init>(Ljava/lang/String;[B[B[B)V
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySessionStorage$Entry;->destroy()V
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySessionStorage$Entry;->getKeyClaimant()[B
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySessionStorage$Entry;->getLskfHash()[B
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySessionStorage$Entry;->getVaultParams()[B
 HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySessionStorage;-><init>()V
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySessionStorage;->add(ILcom/android/server/locksettings/recoverablekeystore/storage/RecoverySessionStorage$Entry;)V
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySessionStorage;->get(ILjava/lang/String;)Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverySessionStorage$Entry;
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySessionStorage;->remove(I)V
+PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySessionStorage;->remove(ILjava/lang/String;)V
 HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;-><init>(Ljava/io/File;)V
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;->get(I)Landroid/security/keystore/recovery/KeyChainSnapshot;
-PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;->getSnapshotFile(I)Ljava/io/File;
-PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;->getSnapshotFileName(I)Ljava/lang/String;
-PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;->getStorageFolder()Ljava/io/File;
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;->getSnapshotFile(I)Ljava/io/File;
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;->getSnapshotFileName(I)Ljava/lang/String;
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;->getStorageFolder()Ljava/io/File;
 HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;->newInstance()Lcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;->put(ILandroid/security/keystore/recovery/KeyChainSnapshot;)V
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;->readFromDisk(I)Landroid/security/keystore/recovery/KeyChainSnapshot;
-PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;->remove(I)V
+HSPLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;->remove(I)V
 PLcom/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage;->writeToDisk(ILandroid/security/keystore/recovery/KeyChainSnapshot;)V
 PLcom/android/server/logcat/LogAccessDialogActivity$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/logcat/LogAccessDialogActivity;)V
 PLcom/android/server/logcat/LogAccessDialogActivity$$ExternalSyntheticLambda0;->onCancel(Landroid/content/DialogInterface;)V
@@ -29679,6 +30860,8 @@
 PLcom/android/server/logcat/LogAccessDialogActivity;->$r8$lambda$8TbY_jXQghMrK4tSBKVUrnF1ius(Lcom/android/server/logcat/LogAccessDialogActivity;Landroid/content/DialogInterface;)V
 PLcom/android/server/logcat/LogAccessDialogActivity;->$r8$lambda$TOfh_TkE9WlCR-h1qs8lKRTBypI(Lcom/android/server/logcat/LogAccessDialogActivity;Landroid/content/DialogInterface;)V
 PLcom/android/server/logcat/LogAccessDialogActivity;->-$$Nest$fgetmAlert(Lcom/android/server/logcat/LogAccessDialogActivity;)Landroid/app/AlertDialog;
+PLcom/android/server/logcat/LogAccessDialogActivity;->-$$Nest$fputmAlert(Lcom/android/server/logcat/LogAccessDialogActivity;Landroid/app/AlertDialog;)V
+PLcom/android/server/logcat/LogAccessDialogActivity;->-$$Nest$mdeclineLogAccess(Lcom/android/server/logcat/LogAccessDialogActivity;)V
 PLcom/android/server/logcat/LogAccessDialogActivity;-><clinit>()V
 PLcom/android/server/logcat/LogAccessDialogActivity;-><init>()V
 PLcom/android/server/logcat/LogAccessDialogActivity;->createView(I)Landroid/view/View;
@@ -29750,7 +30933,7 @@
 HPLcom/android/server/media/AudioPlayerStateMonitor;->cleanUpAudioPlaybackUids(I)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Lcom/android/server/media/AudioPlayerStateMonitor;Lcom/android/server/media/AudioPlayerStateMonitor;
 PLcom/android/server/media/AudioPlayerStateMonitor;->dump(Landroid/content/Context;Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/media/AudioPlayerStateMonitor;->getInstance(Landroid/content/Context;)Lcom/android/server/media/AudioPlayerStateMonitor;
-HPLcom/android/server/media/AudioPlayerStateMonitor;->getSortedAudioPlaybackClientUids()Ljava/util/List;
+HSPLcom/android/server/media/AudioPlayerStateMonitor;->getSortedAudioPlaybackClientUids()Ljava/util/List;
 HSPLcom/android/server/media/AudioPlayerStateMonitor;->isPlaybackActive(I)Z+]Ljava/util/Set;Landroid/util/ArraySet;
 HSPLcom/android/server/media/AudioPlayerStateMonitor;->registerListener(Lcom/android/server/media/AudioPlayerStateMonitor$OnAudioPlayerActiveStateChangedListener;Landroid/os/Handler;)V
 HPLcom/android/server/media/AudioPlayerStateMonitor;->sendAudioPlayerActiveStateChangedMessageLocked(Landroid/media/AudioPlaybackConfiguration;Z)V
@@ -29800,7 +30983,7 @@
 PLcom/android/server/media/BluetoothRouteProvider;->start(Landroid/os/UserHandle;)V
 PLcom/android/server/media/BluetoothRouteProvider;->stop()V
 PLcom/android/server/media/BluetoothRouteProvider;->transferTo(Ljava/lang/String;)V
-PLcom/android/server/media/BluetoothRouteProvider;->updateVolumeForDevices(II)Z
+HSPLcom/android/server/media/BluetoothRouteProvider;->updateVolumeForDevices(II)Z
 PLcom/android/server/media/HandlerExecutor;-><init>(Landroid/os/Handler;)V
 PLcom/android/server/media/HandlerExecutor;->execute(Ljava/lang/Runnable;)V
 HSPLcom/android/server/media/MediaButtonReceiverHolder;-><init>(ILandroid/app/PendingIntent;Landroid/content/ComponentName;I)V
@@ -29810,7 +30993,7 @@
 HPLcom/android/server/media/MediaButtonReceiverHolder;->createComponentName(Landroid/content/pm/ResolveInfo;)Landroid/content/ComponentName;
 HPLcom/android/server/media/MediaButtonReceiverHolder;->flattenToString()Ljava/lang/String;
 HPLcom/android/server/media/MediaButtonReceiverHolder;->getComponentName(Landroid/app/PendingIntent;I)Landroid/content/ComponentName;
-PLcom/android/server/media/MediaButtonReceiverHolder;->getComponentType(Landroid/app/PendingIntent;)I
+HPLcom/android/server/media/MediaButtonReceiverHolder;->getComponentType(Landroid/app/PendingIntent;)I
 PLcom/android/server/media/MediaButtonReceiverHolder;->getComponentType(Landroid/content/Context;Landroid/content/ComponentName;)I
 PLcom/android/server/media/MediaButtonReceiverHolder;->getPackageName()Ljava/lang/String;
 HPLcom/android/server/media/MediaButtonReceiverHolder;->send(Landroid/content/Context;Landroid/view/KeyEvent;Ljava/lang/String;ILandroid/app/PendingIntent$OnFinished;Landroid/os/Handler;J)Z
@@ -29826,7 +31009,7 @@
 PLcom/android/server/media/MediaKeyDispatcher;->onDoubleTap(Landroid/view/KeyEvent;)V
 HSPLcom/android/server/media/MediaResourceMonitorService$MediaResourceMonitorImpl;-><init>(Lcom/android/server/media/MediaResourceMonitorService;)V
 HPLcom/android/server/media/MediaResourceMonitorService$MediaResourceMonitorImpl;->getPackageNamesFromPid(I)[Ljava/lang/String;+]Lcom/android/server/SystemService;Lcom/android/server/media/MediaResourceMonitorService;]Landroid/app/ActivityManager;Landroid/app/ActivityManager;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
-HPLcom/android/server/media/MediaResourceMonitorService$MediaResourceMonitorImpl;->notifyResourceGranted(II)V
+HPLcom/android/server/media/MediaResourceMonitorService$MediaResourceMonitorImpl;->notifyResourceGranted(II)V+]Lcom/android/server/media/MediaResourceMonitorService$MediaResourceMonitorImpl;Lcom/android/server/media/MediaResourceMonitorService$MediaResourceMonitorImpl;]Lcom/android/server/SystemService;Lcom/android/server/media/MediaResourceMonitorService;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/os/UserManager;Landroid/os/UserManager;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Landroid/content/Intent;Landroid/content/Intent;
 HPLcom/android/server/media/MediaResourceMonitorService;->-$$Nest$sfgetDEBUG()Z
 HSPLcom/android/server/media/MediaResourceMonitorService;-><clinit>()V
 HSPLcom/android/server/media/MediaResourceMonitorService;-><init>(Landroid/content/Context;)V
@@ -29837,9 +31020,9 @@
 PLcom/android/server/media/MediaRoute2Provider$Callback;->onSessionUpdated(Lcom/android/server/media/MediaRoute2Provider;Landroid/media/RoutingSessionInfo;)V
 HSPLcom/android/server/media/MediaRoute2Provider;-><init>(Landroid/content/ComponentName;)V
 PLcom/android/server/media/MediaRoute2Provider;->deselectRoute(JLjava/lang/String;Ljava/lang/String;)V
-HPLcom/android/server/media/MediaRoute2Provider;->getProviderInfo()Landroid/media/MediaRoute2ProviderInfo;
+HSPLcom/android/server/media/MediaRoute2Provider;->getProviderInfo()Landroid/media/MediaRoute2ProviderInfo;
 HPLcom/android/server/media/MediaRoute2Provider;->getSessionInfos()Ljava/util/List;
-PLcom/android/server/media/MediaRoute2Provider;->getUniqueId()Ljava/lang/String;
+HSPLcom/android/server/media/MediaRoute2Provider;->getUniqueId()Ljava/lang/String;
 HSPLcom/android/server/media/MediaRoute2Provider;->notifyProviderState()V
 PLcom/android/server/media/MediaRoute2Provider;->requestCreateSession(JLjava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)V
 HPLcom/android/server/media/MediaRoute2Provider;->setAndNotifyProviderState(Landroid/media/MediaRoute2ProviderInfo;)V
@@ -29856,12 +31039,14 @@
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;)V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection$$ExternalSyntheticLambda0;->run()V
-PLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;Ljava/util/List;)V
+HPLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;Ljava/util/List;)V
 HPLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection$$ExternalSyntheticLambda1;->run()V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;Landroid/media/RoutingSessionInfo;)V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection$$ExternalSyntheticLambda2;->run()V
 HPLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;Landroid/media/MediaRoute2ProviderInfo;)V
 HPLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection$$ExternalSyntheticLambda3;->run()V
+PLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;JI)V
+PLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection$$ExternalSyntheticLambda4;->run()V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;JLandroid/media/RoutingSessionInfo;)V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection$$ExternalSyntheticLambda5;->run()V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;)V
@@ -29876,14 +31061,16 @@
 HPLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;-><init>(Lcom/android/server/media/MediaRoute2ProviderServiceProxy;Landroid/media/IMediaRoute2ProviderService;)V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;->binderDied()V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;->deselectRoute(JLjava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;->dispose()V
+HPLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;->dispose()V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;->lambda$binderDied$1()V
 HPLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;->lambda$postProviderUpdated$2(Landroid/media/MediaRoute2ProviderInfo;)V
+PLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;->lambda$postRequestFailed$6(JI)V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;->lambda$postSessionCreated$3(JLandroid/media/RoutingSessionInfo;)V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;->lambda$postSessionReleased$5(Landroid/media/RoutingSessionInfo;)V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;->lambda$postSessionsUpdated$4(Ljava/util/List;)V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;->lambda$register$0()V
 HPLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;->postProviderUpdated(Landroid/media/MediaRoute2ProviderInfo;)V
+PLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;->postRequestFailed(JI)V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;->postSessionCreated(JLandroid/media/RoutingSessionInfo;)V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;->postSessionReleased(Landroid/media/RoutingSessionInfo;)V
 HPLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;->postSessionsUpdated(Ljava/util/List;)V
@@ -29894,18 +31081,20 @@
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;->setRouteVolume(JLjava/lang/String;I)V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;->setSessionVolume(JLjava/lang/String;I)V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;->updateDiscoveryPreference(Landroid/media/RouteDiscoveryPreference;)V
-PLcom/android/server/media/MediaRoute2ProviderServiceProxy$ServiceCallbackStub;-><init>(Lcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;)V
+HPLcom/android/server/media/MediaRoute2ProviderServiceProxy$ServiceCallbackStub;-><init>(Lcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;)V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy$ServiceCallbackStub;->dispose()V
 HPLcom/android/server/media/MediaRoute2ProviderServiceProxy$ServiceCallbackStub;->notifyProviderUpdated(Landroid/media/MediaRoute2ProviderInfo;)V
+PLcom/android/server/media/MediaRoute2ProviderServiceProxy$ServiceCallbackStub;->notifyRequestFailed(JI)V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy$ServiceCallbackStub;->notifySessionCreated(JLandroid/media/RoutingSessionInfo;)V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy$ServiceCallbackStub;->notifySessionReleased(Landroid/media/RoutingSessionInfo;)V
 HPLcom/android/server/media/MediaRoute2ProviderServiceProxy$ServiceCallbackStub;->notifySessionsUpdated(Ljava/util/List;)V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy;->$r8$lambda$kszvM75qhYZkXdfyeKeGNS3-24E(Ljava/lang/String;Landroid/media/RoutingSessionInfo;)Z
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy;->$r8$lambda$rzKoLtOl_rgjWRiDOyJH_CpwfKw(Ljava/lang/String;Landroid/media/RoutingSessionInfo;)Z
-PLcom/android/server/media/MediaRoute2ProviderServiceProxy;->-$$Nest$fgetmHandler(Lcom/android/server/media/MediaRoute2ProviderServiceProxy;)Landroid/os/Handler;
+HPLcom/android/server/media/MediaRoute2ProviderServiceProxy;->-$$Nest$fgetmHandler(Lcom/android/server/media/MediaRoute2ProviderServiceProxy;)Landroid/os/Handler;
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy;->-$$Nest$monConnectionDied(Lcom/android/server/media/MediaRoute2ProviderServiceProxy;Lcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;)V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy;->-$$Nest$monConnectionReady(Lcom/android/server/media/MediaRoute2ProviderServiceProxy;Lcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;)V
 HPLcom/android/server/media/MediaRoute2ProviderServiceProxy;->-$$Nest$monProviderUpdated(Lcom/android/server/media/MediaRoute2ProviderServiceProxy;Lcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;Landroid/media/MediaRoute2ProviderInfo;)V
+PLcom/android/server/media/MediaRoute2ProviderServiceProxy;->-$$Nest$monRequestFailed(Lcom/android/server/media/MediaRoute2ProviderServiceProxy;Lcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;JI)V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy;->-$$Nest$monSessionCreated(Lcom/android/server/media/MediaRoute2ProviderServiceProxy;Lcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;JLandroid/media/RoutingSessionInfo;)V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy;->-$$Nest$monSessionReleased(Lcom/android/server/media/MediaRoute2ProviderServiceProxy;Lcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;Landroid/media/RoutingSessionInfo;)V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy;->-$$Nest$monSessionsUpdated(Lcom/android/server/media/MediaRoute2ProviderServiceProxy;Lcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;Ljava/util/List;)V
@@ -29921,10 +31110,12 @@
 HPLcom/android/server/media/MediaRoute2ProviderServiceProxy;->findSessionByIdLocked(Landroid/media/RoutingSessionInfo;)I
 HPLcom/android/server/media/MediaRoute2ProviderServiceProxy;->hasComponentName(Ljava/lang/String;Ljava/lang/String;)Z
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy;->lambda$onSessionCreated$0(Ljava/lang/String;Landroid/media/RoutingSessionInfo;)Z
+PLcom/android/server/media/MediaRoute2ProviderServiceProxy;->lambda$onSessionCreated$1(Ljava/lang/String;Landroid/media/RoutingSessionInfo;)Z
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy;->onBindingDied(Landroid/content/ComponentName;)V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy;->onConnectionDied(Lcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;)V
-PLcom/android/server/media/MediaRoute2ProviderServiceProxy;->onConnectionReady(Lcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;)V
+HPLcom/android/server/media/MediaRoute2ProviderServiceProxy;->onConnectionReady(Lcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;)V
 HPLcom/android/server/media/MediaRoute2ProviderServiceProxy;->onProviderUpdated(Lcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;Landroid/media/MediaRoute2ProviderInfo;)V
+PLcom/android/server/media/MediaRoute2ProviderServiceProxy;->onRequestFailed(Lcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;JI)V
 HPLcom/android/server/media/MediaRoute2ProviderServiceProxy;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy;->onServiceDisconnected(Landroid/content/ComponentName;)V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy;->onSessionCreated(Lcom/android/server/media/MediaRoute2ProviderServiceProxy$Connection;JLandroid/media/RoutingSessionInfo;)V
@@ -29942,8 +31133,8 @@
 HPLcom/android/server/media/MediaRoute2ProviderServiceProxy;->start()V
 PLcom/android/server/media/MediaRoute2ProviderServiceProxy;->stop()V
 HPLcom/android/server/media/MediaRoute2ProviderServiceProxy;->unbind()V
-PLcom/android/server/media/MediaRoute2ProviderServiceProxy;->updateBinding()V
-PLcom/android/server/media/MediaRoute2ProviderServiceProxy;->updateDiscoveryPreference(Landroid/media/RouteDiscoveryPreference;)V
+HPLcom/android/server/media/MediaRoute2ProviderServiceProxy;->updateBinding()V
+HPLcom/android/server/media/MediaRoute2ProviderServiceProxy;->updateDiscoveryPreference(Landroid/media/RouteDiscoveryPreference;)V
 HPLcom/android/server/media/MediaRoute2ProviderWatcher$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/media/MediaRoute2ProviderWatcher;)V
 HPLcom/android/server/media/MediaRoute2ProviderWatcher$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/media/MediaRoute2ProviderWatcher$1;-><init>(Lcom/android/server/media/MediaRoute2ProviderWatcher;)V
@@ -29955,9 +31146,9 @@
 HSPLcom/android/server/media/MediaRoute2ProviderWatcher;-><clinit>()V
 HSPLcom/android/server/media/MediaRoute2ProviderWatcher;-><init>(Landroid/content/Context;Lcom/android/server/media/MediaRoute2ProviderWatcher$Callback;Landroid/os/Handler;I)V
 HPLcom/android/server/media/MediaRoute2ProviderWatcher;->findProvider(Ljava/lang/String;Ljava/lang/String;)I
-HPLcom/android/server/media/MediaRoute2ProviderWatcher;->postScanPackagesIfNeeded()V+]Landroid/os/Handler;Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;
+HSPLcom/android/server/media/MediaRoute2ProviderWatcher;->postScanPackagesIfNeeded()V+]Landroid/os/Handler;Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;
 HPLcom/android/server/media/MediaRoute2ProviderWatcher;->scanPackages()V+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/media/MediaRoute2ProviderServiceProxy;Lcom/android/server/media/MediaRoute2ProviderServiceProxy;]Lcom/android/server/media/MediaRoute2ProviderWatcher;Lcom/android/server/media/MediaRoute2ProviderWatcher;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
-PLcom/android/server/media/MediaRoute2ProviderWatcher;->start()V
+HSPLcom/android/server/media/MediaRoute2ProviderWatcher;->start()V
 PLcom/android/server/media/MediaRoute2ProviderWatcher;->stop()V
 HSPLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/media/MediaRouter2ServiceImpl;)V
 HSPLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda0;->onUidImportance(II)V
@@ -29970,7 +31161,7 @@
 PLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda13;-><init>()V
 HPLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda13;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda14;-><init>()V
-PLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda14;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda14;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda15;-><init>()V
 PLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda15;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda16;-><init>()V
@@ -29991,21 +31182,23 @@
 PLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda23;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda24;-><init>()V
 PLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda24;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda26;-><init>()V
+PLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda26;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda2;-><init>()V
-PLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;)V
-PLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda3;-><init>()V
+HSPLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda3;-><init>()V
 PLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda4;-><init>()V
-PLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda6;-><init>()V
 PLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda6;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda7;-><init>()V
 PLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda7;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda8;-><init>()V
 PLcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda8;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/media/MediaRouter2ServiceImpl$1$$ExternalSyntheticLambda0;-><init>()V
+HPLcom/android/server/media/MediaRouter2ServiceImpl$1$$ExternalSyntheticLambda0;-><init>()V
 HPLcom/android/server/media/MediaRouter2ServiceImpl$1$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
-PLcom/android/server/media/MediaRouter2ServiceImpl$1;->$r8$lambda$qgauTo7iZy8trMtJeAz_aelnLOs(Ljava/lang/Object;)V
+HPLcom/android/server/media/MediaRouter2ServiceImpl$1;->$r8$lambda$qgauTo7iZy8trMtJeAz_aelnLOs(Ljava/lang/Object;)V
 HSPLcom/android/server/media/MediaRouter2ServiceImpl$1;-><init>(Lcom/android/server/media/MediaRouter2ServiceImpl;)V
 HPLcom/android/server/media/MediaRouter2ServiceImpl$1;->lambda$onReceive$0(Ljava/lang/Object;)V
 HPLcom/android/server/media/MediaRouter2ServiceImpl$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
@@ -30042,9 +31235,9 @@
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler$$ExternalSyntheticLambda4;-><init>()V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler$$ExternalSyntheticLambda5;-><init>()V
-PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler$$ExternalSyntheticLambda6;-><init>()V
-HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler$$ExternalSyntheticLambda6;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler$$ExternalSyntheticLambda6;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler$$ExternalSyntheticLambda7;-><init>()V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler$$ExternalSyntheticLambda7;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler$$ExternalSyntheticLambda8;-><init>()V
@@ -30053,45 +31246,49 @@
 HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler$$ExternalSyntheticLambda9;->test(Ljava/lang/Object;)Z
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->$r8$lambda$-1wKm4LZbcOh3vgk3vbJjkCMKk4(Lcom/android/server/media/MediaRouter2ServiceImpl;Lcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;)Z
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->$r8$lambda$10HKBieAEdoL-2sUqTQwCLpMvw4(Lcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;)Landroid/media/RouteDiscoveryPreference;
+PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->$r8$lambda$BlvJKclcwWlp8CPpAUiMFIFJPBg(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;Lcom/android/server/media/MediaRoute2Provider;JI)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->$r8$lambda$Dx9Yd7uwjDMFDX7xUyuxtbVzicw(Lcom/android/server/media/MediaRouter2ServiceImpl;Lcom/android/server/media/MediaRouter2ServiceImpl$ManagerRecord;)Z
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->$r8$lambda$E05IHmTYE16-m9BPiK5Ztl5G9NU(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;)V
-PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->$r8$lambda$EdiHHza2jiTwlIfUMIsAFSFmZRw(ILcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;)Z
-HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->$r8$lambda$Ql47u_8r4_d74bv620QU10yO-hw(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;Lcom/android/server/media/MediaRoute2Provider;)V
+HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->$r8$lambda$EdiHHza2jiTwlIfUMIsAFSFmZRw(ILcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;)Z
+HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->$r8$lambda$Ql47u_8r4_d74bv620QU10yO-hw(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;Lcom/android/server/media/MediaRoute2Provider;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->$r8$lambda$XIF9oatYwLVC7vmfWhMOZ1ZfRm4(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;Lcom/android/server/media/MediaRoute2Provider;JLandroid/media/RoutingSessionInfo;)V
 HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->$r8$lambda$bhV-YsWyLFIHVEnEuhuu1bisRNw(ILcom/android/server/media/MediaRouter2ServiceImpl$ManagerRecord;)Z
-PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->$r8$lambda$kJWtxriKWmzBPKaC6Yp_JVj4kP8(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;Lcom/android/server/media/MediaRoute2Provider;Landroid/media/RoutingSessionInfo;)V
+HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->$r8$lambda$kJWtxriKWmzBPKaC6Yp_JVj4kP8(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;Lcom/android/server/media/MediaRoute2Provider;Landroid/media/RoutingSessionInfo;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->$r8$lambda$m3HtulDKW0XZVymgg8BjkdamlFs(Lcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;)Landroid/media/RouteDiscoveryPreference;
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->$r8$lambda$mCo8AjH0OUPTIR7ZsHOwgO4A3mc(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;Lcom/android/server/media/MediaRoute2Provider;Landroid/media/RoutingSessionInfo;)V
-PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->-$$Nest$fgetmRouteProviders(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;)Ljava/util/ArrayList;
+HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->-$$Nest$fgetmRouteProviders(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;)Ljava/util/ArrayList;
 HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->-$$Nest$fgetmSystemProvider(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;)Lcom/android/server/media/SystemMediaRoute2Provider;
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->-$$Nest$mdeselectRouteOnHandler(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;JLcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;Ljava/lang/String;Landroid/media/MediaRoute2Info;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->-$$Nest$mnotifyDiscoveryPreferenceChangedToManager(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;Lcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;Landroid/media/IMediaRouter2Manager;)V
 HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->-$$Nest$mnotifyDiscoveryPreferenceChangedToManagers(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;Ljava/lang/String;Landroid/media/RouteDiscoveryPreference;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->-$$Nest$mnotifyRequestFailedToManager(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;Landroid/media/IMediaRouter2Manager;II)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->-$$Nest$mnotifyRouterRegistered(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;Lcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;)V
-PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->-$$Nest$mnotifyRoutesToManager(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;Landroid/media/IMediaRouter2Manager;)V
+HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->-$$Nest$mnotifyRoutesToManager(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;Landroid/media/IMediaRouter2Manager;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->-$$Nest$mnotifySessionCreationFailedToRouter(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;Lcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;I)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->-$$Nest$mreleaseSessionOnHandler(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;JLcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;Ljava/lang/String;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->-$$Nest$mrequestCreateSessionWithRouter2OnHandler(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;JJLcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;Landroid/media/RoutingSessionInfo;Landroid/media/MediaRoute2Info;Landroid/os/Bundle;)V
+PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->-$$Nest$mrequestRouterCreateSessionOnHandler(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;JLcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;Lcom/android/server/media/MediaRouter2ServiceImpl$ManagerRecord;Landroid/media/RoutingSessionInfo;Landroid/media/MediaRoute2Info;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->-$$Nest$mselectRouteOnHandler(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;JLcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;Ljava/lang/String;Landroid/media/MediaRoute2Info;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->-$$Nest$msetRouteVolumeOnHandler(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;JLandroid/media/MediaRoute2Info;I)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->-$$Nest$msetSessionVolumeOnHandler(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;JLjava/lang/String;I)V
-PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->-$$Nest$mstart(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;)V
+HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->-$$Nest$mstart(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->-$$Nest$mstop(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->-$$Nest$mtransferToRouteOnHandler(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;JLcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;Ljava/lang/String;Landroid/media/MediaRoute2Info;)V
-PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->-$$Nest$mupdateDiscoveryPreferenceOnHandler(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;)V
+HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->-$$Nest$mupdateDiscoveryPreferenceOnHandler(Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;)V
 HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;-><init>(Lcom/android/server/media/MediaRouter2ServiceImpl;Lcom/android/server/media/MediaRouter2ServiceImpl$UserRecord;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->checkArgumentsForSessionControl(Lcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;Ljava/lang/String;Landroid/media/MediaRoute2Info;Ljava/lang/String;)Z
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->deselectRouteOnHandler(JLcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;Ljava/lang/String;Landroid/media/MediaRoute2Info;)V
-PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->findProvider(Ljava/lang/String;)Lcom/android/server/media/MediaRoute2Provider;
+PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->findManagerWithId(I)Lcom/android/server/media/MediaRouter2ServiceImpl$ManagerRecord;
+HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->findProvider(Ljava/lang/String;)Lcom/android/server/media/MediaRoute2Provider;
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->findRouterWithSessionLocked(Ljava/lang/String;)Lcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;
-HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->getLastProviderInfoIndex(Ljava/lang/String;)I
+HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->getLastProviderInfoIndex(Ljava/lang/String;)I
 HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->getManagerRecords()Ljava/util/List;
-HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->getManagers()Ljava/util/List;
+HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->getManagers()Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->getRouterRecords()Ljava/util/List;
-HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->getRouters(Z)Ljava/util/List;
+HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->getRouters(Z)Ljava/util/List;
+PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->handleSessionCreationRequestFailed(Lcom/android/server/media/MediaRoute2Provider;JI)Z
 HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->init()V
-PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->lambda$maybeUpdateDiscoveryPreferenceForUid$0(ILcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;)Z
+HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->lambda$maybeUpdateDiscoveryPreferenceForUid$0(ILcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;)Z
 HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->lambda$maybeUpdateDiscoveryPreferenceForUid$1(ILcom/android/server/media/MediaRouter2ServiceImpl$ManagerRecord;)Z
 HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->lambda$updateDiscoveryPreferenceOnHandler$2(Lcom/android/server/media/MediaRouter2ServiceImpl;Lcom/android/server/media/MediaRouter2ServiceImpl$ManagerRecord;)Z
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->lambda$updateDiscoveryPreferenceOnHandler$3(Lcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;)Landroid/media/RouteDiscoveryPreference;
@@ -30102,41 +31299,44 @@
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifyDiscoveryPreferenceChangedToManagers(Ljava/lang/String;Landroid/media/RouteDiscoveryPreference;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifyRequestFailedToManager(Landroid/media/IMediaRouter2Manager;II)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifyRouterRegistered(Lcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;)V
-HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifyRoutesAddedToManagers(Ljava/util/List;Ljava/util/List;)V
-PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifyRoutesAddedToRouters(Ljava/util/List;Ljava/util/List;)V
+HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifyRoutesAddedToManagers(Ljava/util/List;Ljava/util/List;)V
+HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifyRoutesAddedToRouters(Ljava/util/List;Ljava/util/List;)V
 HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifyRoutesChangedToManagers(Ljava/util/List;Ljava/util/List;)V
 HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifyRoutesChangedToRouters(Ljava/util/List;Ljava/util/List;)V
 HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifyRoutesRemovedToManagers(Ljava/util/List;Ljava/util/List;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifyRoutesRemovedToRouters(Ljava/util/List;Ljava/util/List;)V
-PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifyRoutesToManager(Landroid/media/IMediaRouter2Manager;)V
+HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifyRoutesToManager(Landroid/media/IMediaRouter2Manager;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifySessionCreatedToManagers(JLandroid/media/RoutingSessionInfo;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifySessionCreatedToRouter(Lcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;ILandroid/media/RoutingSessionInfo;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifySessionCreationFailedToRouter(Lcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;I)V
 HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifySessionInfoChangedToRouter(Lcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;Landroid/media/RoutingSessionInfo;)V
-PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifySessionInfoChangedToRouters(Ljava/util/List;Landroid/media/RoutingSessionInfo;)V
+HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifySessionInfoChangedToRouters(Ljava/util/List;Landroid/media/RoutingSessionInfo;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifySessionReleasedToManagers(Ljava/util/List;Landroid/media/RoutingSessionInfo;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifySessionReleasedToRouter(Lcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;Landroid/media/RoutingSessionInfo;)V
-HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifySessionUpdatedToManagers(Ljava/util/List;Landroid/media/RoutingSessionInfo;)V
+HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->notifySessionUpdatedToManagers(Ljava/util/List;Landroid/media/RoutingSessionInfo;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->onAddProviderService(Lcom/android/server/media/MediaRoute2ProviderServiceProxy;)V
 HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->onProviderStateChanged(Lcom/android/server/media/MediaRoute2Provider;)V
-HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->onProviderStateChangedOnHandler(Lcom/android/server/media/MediaRoute2Provider;)V+]Lcom/android/server/media/MediaRoute2Provider;Lcom/android/server/media/SystemMediaRoute2Provider;,Lcom/android/server/media/MediaRoute2ProviderServiceProxy;]Lcom/android/server/media/SystemMediaRoute2Provider;Lcom/android/server/media/SystemMediaRoute2Provider;]Ljava/lang/Object;Landroid/media/MediaRoute2Info;]Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;]Landroid/media/MediaRoute2Info;Landroid/media/MediaRoute2Info;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/media/MediaRoute2ProviderInfo;Landroid/media/MediaRoute2ProviderInfo;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
+HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->onProviderStateChangedOnHandler(Lcom/android/server/media/MediaRoute2Provider;)V+]Lcom/android/server/media/MediaRoute2Provider;Lcom/android/server/media/SystemMediaRoute2Provider;,Lcom/android/server/media/MediaRoute2ProviderServiceProxy;]Lcom/android/server/media/SystemMediaRoute2Provider;Lcom/android/server/media/SystemMediaRoute2Provider;]Ljava/lang/Object;Landroid/media/MediaRoute2Info;]Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;]Landroid/media/MediaRoute2Info;Landroid/media/MediaRoute2Info;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/media/MediaRoute2ProviderInfo;Landroid/media/MediaRoute2ProviderInfo;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->onRequestFailed(Lcom/android/server/media/MediaRoute2Provider;JI)V
+PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->onRequestFailedOnHandler(Lcom/android/server/media/MediaRoute2Provider;JI)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->onSessionCreated(Lcom/android/server/media/MediaRoute2Provider;JLandroid/media/RoutingSessionInfo;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->onSessionCreatedOnHandler(Lcom/android/server/media/MediaRoute2Provider;JLandroid/media/RoutingSessionInfo;)V
-HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->onSessionInfoChangedOnHandler(Lcom/android/server/media/MediaRoute2Provider;Landroid/media/RoutingSessionInfo;)V
+HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->onSessionInfoChangedOnHandler(Lcom/android/server/media/MediaRoute2Provider;Landroid/media/RoutingSessionInfo;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->onSessionReleased(Lcom/android/server/media/MediaRoute2Provider;Landroid/media/RoutingSessionInfo;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->onSessionReleasedOnHandler(Lcom/android/server/media/MediaRoute2Provider;Landroid/media/RoutingSessionInfo;)V
 HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->onSessionUpdated(Lcom/android/server/media/MediaRoute2Provider;Landroid/media/RoutingSessionInfo;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->releaseSessionOnHandler(JLcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;Ljava/lang/String;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->requestCreateSessionWithRouter2OnHandler(JJLcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;Landroid/media/RoutingSessionInfo;Landroid/media/MediaRoute2Info;Landroid/os/Bundle;)V
+PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->requestRouterCreateSessionOnHandler(JLcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;Lcom/android/server/media/MediaRouter2ServiceImpl$ManagerRecord;Landroid/media/RoutingSessionInfo;Landroid/media/MediaRoute2Info;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->selectRouteOnHandler(JLcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;Ljava/lang/String;Landroid/media/MediaRoute2Info;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->setRouteVolumeOnHandler(JLandroid/media/MediaRoute2Info;I)V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->setSessionVolumeOnHandler(JLjava/lang/String;I)V
-PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->start()V
+HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->start()V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->stop()V
 PLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->transferToRouteOnHandler(JLcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;Ljava/lang/String;Landroid/media/MediaRoute2Info;)V
 HPLcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;->updateDiscoveryPreferenceOnHandler()V
 HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserRecord;-><init>(Lcom/android/server/media/MediaRouter2ServiceImpl;I)V
+PLcom/android/server/media/MediaRouter2ServiceImpl$UserRecord;->findRouterRecordLocked(Ljava/lang/String;)Lcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;
 HSPLcom/android/server/media/MediaRouter2ServiceImpl$UserRecord;->init()V
 PLcom/android/server/media/MediaRouter2ServiceImpl;->$r8$lambda$4us_i5Lg3W5R6NbIX2N4YnP9DIU(Ljava/lang/Object;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl;->$r8$lambda$6q445o3rXJZzJrDdUooi-Ve08o8(Ljava/lang/Object;JLcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;Lcom/android/server/media/MediaRouter2ServiceImpl$ManagerRecord;Landroid/media/RoutingSessionInfo;Landroid/media/MediaRoute2Info;)V
@@ -30145,7 +31345,7 @@
 PLcom/android/server/media/MediaRouter2ServiceImpl;->$r8$lambda$CC44QT-d_OKsDneYDDofZmhCoMk(Ljava/lang/Object;JJLcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;Landroid/media/RoutingSessionInfo;Landroid/media/MediaRoute2Info;Landroid/os/Bundle;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl;->$r8$lambda$DNHYl0RtSiwYAQP7XfEi5OJpZXs(Ljava/lang/Object;JLandroid/media/MediaRoute2Info;I)V
 PLcom/android/server/media/MediaRouter2ServiceImpl;->$r8$lambda$E9CQVaWtUy1VdbIPdKtlQs6b9yg(Ljava/lang/Object;JLjava/lang/String;I)V
-PLcom/android/server/media/MediaRouter2ServiceImpl;->$r8$lambda$JEw1SsPoyEsOdLsS_zF7QziVg_w(Ljava/lang/Object;Landroid/media/IMediaRouter2Manager;)V
+HSPLcom/android/server/media/MediaRouter2ServiceImpl;->$r8$lambda$JEw1SsPoyEsOdLsS_zF7QziVg_w(Ljava/lang/Object;Landroid/media/IMediaRouter2Manager;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl;->$r8$lambda$JIKPL018WkF7jiFCTOxYM_gj0RQ(Ljava/lang/Object;Ljava/lang/String;Landroid/media/RouteDiscoveryPreference;)V
 HSPLcom/android/server/media/MediaRouter2ServiceImpl;->$r8$lambda$Jm1hLssHVCIygytUr9exkp1HtE0(Lcom/android/server/media/MediaRouter2ServiceImpl;II)V
 PLcom/android/server/media/MediaRouter2ServiceImpl;->$r8$lambda$SnM9HM9pmXlxRot3yoFhSgZjlZI(Ljava/lang/Object;JLjava/lang/String;I)V
@@ -30159,11 +31359,11 @@
 PLcom/android/server/media/MediaRouter2ServiceImpl;->$r8$lambda$oybq1JHg4dJL8ec6FKlcjDT7ZMw(Ljava/lang/Object;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl;->$r8$lambda$r-BrkZA8X-AEVaFVFK1LueGfB8I(Ljava/lang/Object;Lcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;Landroid/media/IMediaRouter2Manager;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl;->$r8$lambda$r4XoBKm8d4rBCnLmQO7ma-0KFWA(Ljava/lang/Object;JLcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;Ljava/lang/String;)V
-PLcom/android/server/media/MediaRouter2ServiceImpl;->$r8$lambda$r8ojnquXd0s9rdzQQDSzkuDTLQU(Ljava/lang/Object;)V
+HSPLcom/android/server/media/MediaRouter2ServiceImpl;->$r8$lambda$r8ojnquXd0s9rdzQQDSzkuDTLQU(Ljava/lang/Object;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl;->$r8$lambda$z1q2yDdSEzZ2Vsh2SjAR0Y5RoPQ(Ljava/lang/Object;)V
 HSPLcom/android/server/media/MediaRouter2ServiceImpl;->-$$Nest$fgetmContext(Lcom/android/server/media/MediaRouter2ServiceImpl;)Landroid/content/Context;
 HSPLcom/android/server/media/MediaRouter2ServiceImpl;->-$$Nest$fgetmLock(Lcom/android/server/media/MediaRouter2ServiceImpl;)Ljava/lang/Object;
-PLcom/android/server/media/MediaRouter2ServiceImpl;->-$$Nest$fgetmUserRecords(Lcom/android/server/media/MediaRouter2ServiceImpl;)Landroid/util/SparseArray;
+HPLcom/android/server/media/MediaRouter2ServiceImpl;->-$$Nest$fgetmUserRecords(Lcom/android/server/media/MediaRouter2ServiceImpl;)Landroid/util/SparseArray;
 HSPLcom/android/server/media/MediaRouter2ServiceImpl;-><clinit>()V
 HSPLcom/android/server/media/MediaRouter2ServiceImpl;-><init>(Landroid/content/Context;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl;->deselectRouteWithManager(Landroid/media/IMediaRouter2Manager;ILjava/lang/String;Landroid/media/MediaRoute2Info;)V
@@ -30174,7 +31374,7 @@
 PLcom/android/server/media/MediaRouter2ServiceImpl;->enforceMediaContentControlPermission()V
 HSPLcom/android/server/media/MediaRouter2ServiceImpl;->getOrCreateUserRecordLocked(I)Lcom/android/server/media/MediaRouter2ServiceImpl$UserRecord;
 HPLcom/android/server/media/MediaRouter2ServiceImpl;->getRemoteSessions(Landroid/media/IMediaRouter2Manager;)Ljava/util/List;
-HPLcom/android/server/media/MediaRouter2ServiceImpl;->getRemoteSessionsLocked(Landroid/media/IMediaRouter2Manager;)Ljava/util/List;
+HPLcom/android/server/media/MediaRouter2ServiceImpl;->getRemoteSessionsLocked(Landroid/media/IMediaRouter2Manager;)Ljava/util/List;+]Landroid/media/IMediaRouter2Manager;Landroid/media/MediaRouter2Manager$Client;,Landroid/media/IMediaRouter2Manager$Stub$Proxy;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/media/MediaRoute2Provider;Lcom/android/server/media/MediaRoute2ProviderServiceProxy;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 PLcom/android/server/media/MediaRouter2ServiceImpl;->getSystemRoutes()Ljava/util/List;
 HPLcom/android/server/media/MediaRouter2ServiceImpl;->getSystemSessionInfo(Ljava/lang/String;Z)Landroid/media/RoutingSessionInfo;
 PLcom/android/server/media/MediaRouter2ServiceImpl;->lambda$deselectRouteWithManagerLocked$21(Ljava/lang/Object;JLcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;Ljava/lang/String;Landroid/media/MediaRoute2Info;)V
@@ -30183,7 +31383,7 @@
 PLcom/android/server/media/MediaRouter2ServiceImpl;->lambda$getOrCreateUserRecordLocked$25(Ljava/lang/Object;)V
 HSPLcom/android/server/media/MediaRouter2ServiceImpl;->lambda$new$0(II)V+]Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/media/MediaRouter2ServiceImpl;->lambda$registerManagerLocked$16(Ljava/lang/Object;Lcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;Landroid/media/IMediaRouter2Manager;)V
-PLcom/android/server/media/MediaRouter2ServiceImpl;->lambda$registerManagerLocked$17(Ljava/lang/Object;Landroid/media/IMediaRouter2Manager;)V
+HSPLcom/android/server/media/MediaRouter2ServiceImpl;->lambda$registerManagerLocked$17(Ljava/lang/Object;Landroid/media/IMediaRouter2Manager;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl;->lambda$registerRouter2Locked$3(Ljava/lang/Object;Lcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl;->lambda$releaseSessionWithManagerLocked$24(Ljava/lang/Object;JLcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;Ljava/lang/String;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl;->lambda$releaseSessionWithRouter2Locked$15(Ljava/lang/Object;JLcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;Ljava/lang/String;)V
@@ -30196,7 +31396,7 @@
 PLcom/android/server/media/MediaRouter2ServiceImpl;->lambda$setSessionVolumeWithManagerLocked$23(Ljava/lang/Object;JLjava/lang/String;I)V
 PLcom/android/server/media/MediaRouter2ServiceImpl;->lambda$setSessionVolumeWithRouter2Locked$14(Ljava/lang/Object;JLjava/lang/String;I)V
 PLcom/android/server/media/MediaRouter2ServiceImpl;->lambda$switchUser$1(Ljava/lang/Object;)V
-PLcom/android/server/media/MediaRouter2ServiceImpl;->lambda$switchUser$2(Ljava/lang/Object;)V
+HSPLcom/android/server/media/MediaRouter2ServiceImpl;->lambda$switchUser$2(Ljava/lang/Object;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl;->lambda$transferToRouteWithManagerLocked$22(Ljava/lang/Object;JLcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;Ljava/lang/String;Landroid/media/MediaRoute2Info;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl;->lambda$unregisterRouter2Locked$4(Ljava/lang/Object;Ljava/lang/String;Landroid/media/RouteDiscoveryPreference;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl;->lambda$unregisterRouter2Locked$5(Ljava/lang/Object;)V
@@ -30218,8 +31418,8 @@
 PLcom/android/server/media/MediaRouter2ServiceImpl;->selectRouteWithManagerLocked(ILandroid/media/IMediaRouter2Manager;Ljava/lang/String;Landroid/media/MediaRoute2Info;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl;->setDiscoveryRequestWithRouter2(Landroid/media/IMediaRouter2;Landroid/media/RouteDiscoveryPreference;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl;->setDiscoveryRequestWithRouter2Locked(Lcom/android/server/media/MediaRouter2ServiceImpl$RouterRecord;Landroid/media/RouteDiscoveryPreference;)V
-PLcom/android/server/media/MediaRouter2ServiceImpl;->setRouteVolumeWithManager(Landroid/media/IMediaRouter2Manager;ILandroid/media/MediaRoute2Info;I)V
-PLcom/android/server/media/MediaRouter2ServiceImpl;->setRouteVolumeWithManagerLocked(ILandroid/media/IMediaRouter2Manager;Landroid/media/MediaRoute2Info;I)V
+HPLcom/android/server/media/MediaRouter2ServiceImpl;->setRouteVolumeWithManager(Landroid/media/IMediaRouter2Manager;ILandroid/media/MediaRoute2Info;I)V
+HPLcom/android/server/media/MediaRouter2ServiceImpl;->setRouteVolumeWithManagerLocked(ILandroid/media/IMediaRouter2Manager;Landroid/media/MediaRoute2Info;I)V
 PLcom/android/server/media/MediaRouter2ServiceImpl;->setSessionVolumeWithManager(Landroid/media/IMediaRouter2Manager;ILjava/lang/String;I)V
 PLcom/android/server/media/MediaRouter2ServiceImpl;->setSessionVolumeWithManagerLocked(ILandroid/media/IMediaRouter2Manager;Ljava/lang/String;I)V
 PLcom/android/server/media/MediaRouter2ServiceImpl;->setSessionVolumeWithRouter2(Landroid/media/IMediaRouter2;Ljava/lang/String;I)V
@@ -30238,15 +31438,16 @@
 PLcom/android/server/media/MediaRouter2ServiceImpl;->transferToRouteWithRouter2Locked(Landroid/media/IMediaRouter2;Ljava/lang/String;Landroid/media/MediaRoute2Info;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl;->unregisterManager(Landroid/media/IMediaRouter2Manager;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl;->unregisterManagerLocked(Landroid/media/IMediaRouter2Manager;Z)V
+PLcom/android/server/media/MediaRouter2ServiceImpl;->unregisterRouter2(Landroid/media/IMediaRouter2;)V
 PLcom/android/server/media/MediaRouter2ServiceImpl;->unregisterRouter2Locked(Landroid/media/IMediaRouter2;Z)V
 HSPLcom/android/server/media/MediaRouterService$1$1;-><init>(Lcom/android/server/media/MediaRouterService$1;)V
 HPLcom/android/server/media/MediaRouterService$1$1;->run()V
 HSPLcom/android/server/media/MediaRouterService$1;-><init>(Lcom/android/server/media/MediaRouterService;)V
 HPLcom/android/server/media/MediaRouterService$1;->onAudioPlayerActiveStateChanged(Landroid/media/AudioPlaybackConfiguration;Z)V
 HSPLcom/android/server/media/MediaRouterService$2;-><init>(Lcom/android/server/media/MediaRouterService;)V
-PLcom/android/server/media/MediaRouterService$2;->dispatchAudioRoutesChanged(Landroid/media/AudioRoutesInfo;)V
+HSPLcom/android/server/media/MediaRouterService$2;->dispatchAudioRoutesChanged(Landroid/media/AudioRoutesInfo;)V
 HSPLcom/android/server/media/MediaRouterService$3;-><init>(Lcom/android/server/media/MediaRouterService;)V
-PLcom/android/server/media/MediaRouterService$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/media/MediaRouterService$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/media/MediaRouterService$ClientGroup;-><init>(Lcom/android/server/media/MediaRouterService;)V
 HSPLcom/android/server/media/MediaRouterService$ClientRecord;-><init>(Lcom/android/server/media/MediaRouterService;Lcom/android/server/media/MediaRouterService$UserRecord;Landroid/media/IMediaRouterClient;IILjava/lang/String;Z)V
 PLcom/android/server/media/MediaRouterService$ClientRecord;->binderDied()V
@@ -30264,7 +31465,7 @@
 PLcom/android/server/media/MediaRouterService$UserHandler$ProviderRecord;->findRouteByUniqueId(Ljava/lang/String;)Lcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;
 PLcom/android/server/media/MediaRouterService$UserHandler$ProviderRecord;->getProvider()Lcom/android/server/media/RemoteDisplayProviderProxy;
 PLcom/android/server/media/MediaRouterService$UserHandler$ProviderRecord;->toString()Ljava/lang/String;
-PLcom/android/server/media/MediaRouterService$UserHandler$ProviderRecord;->updateDescriptor(Landroid/media/RemoteDisplayState;)Z
+HPLcom/android/server/media/MediaRouterService$UserHandler$ProviderRecord;->updateDescriptor(Landroid/media/RemoteDisplayState;)Z
 PLcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;-><init>(Lcom/android/server/media/MediaRouterService$UserHandler$ProviderRecord;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;->computeDescription(Landroid/media/RemoteDisplayState$RemoteDisplayInfo;)Ljava/lang/String;
 PLcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;->computeEnabled(Landroid/media/RemoteDisplayState$RemoteDisplayInfo;)Z
@@ -30294,16 +31495,16 @@
 PLcom/android/server/media/MediaRouterService$UserHandler;->findProviderRecord(Lcom/android/server/media/RemoteDisplayProviderProxy;)I
 PLcom/android/server/media/MediaRouterService$UserHandler;->findRouteRecord(Ljava/lang/String;)Lcom/android/server/media/MediaRouterService$UserHandler$RouteRecord;
 PLcom/android/server/media/MediaRouterService$UserHandler;->getConnectionPhase(I)I
-HPLcom/android/server/media/MediaRouterService$UserHandler;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/media/MediaRouterService$UserHandler;->handleMessage(Landroid/os/Message;)V
 PLcom/android/server/media/MediaRouterService$UserHandler;->notifyGroupRouteSelected(Ljava/lang/String;)V
 PLcom/android/server/media/MediaRouterService$UserHandler;->onDisplayStateChanged(Lcom/android/server/media/RemoteDisplayProviderProxy;Landroid/media/RemoteDisplayState;)V
 PLcom/android/server/media/MediaRouterService$UserHandler;->scheduleUpdateClientState()V
 PLcom/android/server/media/MediaRouterService$UserHandler;->selectRoute(Ljava/lang/String;)V
-PLcom/android/server/media/MediaRouterService$UserHandler;->start()V
+HSPLcom/android/server/media/MediaRouterService$UserHandler;->start()V
 PLcom/android/server/media/MediaRouterService$UserHandler;->stop()V
 PLcom/android/server/media/MediaRouterService$UserHandler;->unselectRoute(Ljava/lang/String;)V
 PLcom/android/server/media/MediaRouterService$UserHandler;->unselectSelectedRoute()V
-PLcom/android/server/media/MediaRouterService$UserHandler;->updateClientState()V
+HPLcom/android/server/media/MediaRouterService$UserHandler;->updateClientState()V
 PLcom/android/server/media/MediaRouterService$UserHandler;->updateConnectionTimeout(I)V
 HPLcom/android/server/media/MediaRouterService$UserHandler;->updateDiscoveryRequest()V
 PLcom/android/server/media/MediaRouterService$UserHandler;->updateProvider(Lcom/android/server/media/RemoteDisplayProviderProxy;Landroid/media/RemoteDisplayState;)V
@@ -30319,14 +31520,14 @@
 HPLcom/android/server/media/MediaRouterService;->-$$Nest$fgetmActivePlayerUidMinPriorityQueue(Lcom/android/server/media/MediaRouterService;)Landroid/util/IntArray;
 HSPLcom/android/server/media/MediaRouterService;->-$$Nest$fgetmContext(Lcom/android/server/media/MediaRouterService;)Landroid/content/Context;
 HPLcom/android/server/media/MediaRouterService;->-$$Nest$fgetmHandler(Lcom/android/server/media/MediaRouterService;)Landroid/os/Handler;
-PLcom/android/server/media/MediaRouterService;->-$$Nest$fgetmLock(Lcom/android/server/media/MediaRouterService;)Ljava/lang/Object;
+HSPLcom/android/server/media/MediaRouterService;->-$$Nest$fgetmLock(Lcom/android/server/media/MediaRouterService;)Ljava/lang/Object;
 HPLcom/android/server/media/MediaRouterService;->-$$Nest$sfgetDEBUG()Z
 HSPLcom/android/server/media/MediaRouterService;-><clinit>()V
 HSPLcom/android/server/media/MediaRouterService;-><init>(Landroid/content/Context;)V
 PLcom/android/server/media/MediaRouterService;->clientDied(Lcom/android/server/media/MediaRouterService$ClientRecord;)V
 PLcom/android/server/media/MediaRouterService;->deselectRouteWithManager(Landroid/media/IMediaRouter2Manager;ILjava/lang/String;Landroid/media/MediaRoute2Info;)V
 PLcom/android/server/media/MediaRouterService;->deselectRouteWithRouter2(Landroid/media/IMediaRouter2;Ljava/lang/String;Landroid/media/MediaRoute2Info;)V
-PLcom/android/server/media/MediaRouterService;->disposeClientLocked(Lcom/android/server/media/MediaRouterService$ClientRecord;Z)V
+HPLcom/android/server/media/MediaRouterService;->disposeClientLocked(Lcom/android/server/media/MediaRouterService$ClientRecord;Z)V
 PLcom/android/server/media/MediaRouterService;->disposeUserIfNeededLocked(Lcom/android/server/media/MediaRouterService$UserRecord;)V
 PLcom/android/server/media/MediaRouterService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/media/MediaRouterService;->enforceMediaContentControlPermission()V
@@ -30335,7 +31536,7 @@
 HSPLcom/android/server/media/MediaRouterService;->getStateLocked(Landroid/media/IMediaRouterClient;)Landroid/media/MediaRouterClientState;
 PLcom/android/server/media/MediaRouterService;->getSystemRoutes()Ljava/util/List;
 PLcom/android/server/media/MediaRouterService;->getSystemSessionInfo()Landroid/media/RoutingSessionInfo;
-HPLcom/android/server/media/MediaRouterService;->getSystemSessionInfoForPackage(Landroid/media/IMediaRouter2Manager;Ljava/lang/String;)Landroid/media/RoutingSessionInfo;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Lcom/android/server/media/MediaRouter2ServiceImpl;Lcom/android/server/media/MediaRouter2ServiceImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/List;Ljava/util/ArrayList;
+HPLcom/android/server/media/MediaRouterService;->getSystemSessionInfoForPackage(Landroid/media/IMediaRouter2Manager;Ljava/lang/String;)Landroid/media/RoutingSessionInfo;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/media/MediaRouter2ServiceImpl;Lcom/android/server/media/MediaRouter2ServiceImpl;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/media/MediaRouterService;->initializeClientLocked(Lcom/android/server/media/MediaRouterService$ClientRecord;)V
 HSPLcom/android/server/media/MediaRouterService;->initializeUserLocked(Lcom/android/server/media/MediaRouterService$UserRecord;)V
 HSPLcom/android/server/media/MediaRouterService;->isPlaybackActive(Landroid/media/IMediaRouterClient;)Z
@@ -30388,21 +31589,23 @@
 PLcom/android/server/media/MediaSessionDeviceConfig;->$r8$lambda$P42v3Rs6yTZN2AYXv2uOZs0538g(Landroid/provider/DeviceConfig$Properties;)V
 HSPLcom/android/server/media/MediaSessionDeviceConfig;-><clinit>()V
 PLcom/android/server/media/MediaSessionDeviceConfig;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/media/MediaSessionDeviceConfig;->getMediaButtonReceiverFgsAllowlistDurationMs()J
+HPLcom/android/server/media/MediaSessionDeviceConfig;->getMediaButtonReceiverFgsAllowlistDurationMs()J
 PLcom/android/server/media/MediaSessionDeviceConfig;->getMediaSessionCallbackFgsAllowlistDurationMs()J
 PLcom/android/server/media/MediaSessionDeviceConfig;->getMediaSessionCallbackFgsWhileInUseTempAllowDurationMs()J
 HSPLcom/android/server/media/MediaSessionDeviceConfig;->initialize(Landroid/content/Context;)V
 PLcom/android/server/media/MediaSessionDeviceConfig;->lambda$initialize$1(Landroid/provider/DeviceConfig$Properties;)V
 HSPLcom/android/server/media/MediaSessionDeviceConfig;->lambda$refresh$0(Landroid/provider/DeviceConfig$Properties;Ljava/lang/String;)V
 HSPLcom/android/server/media/MediaSessionDeviceConfig;->refresh(Landroid/provider/DeviceConfig$Properties;)V
+PLcom/android/server/media/MediaSessionRecord$1;-><init>(Lcom/android/server/media/MediaSessionRecord;IIILjava/lang/String;II)V
+PLcom/android/server/media/MediaSessionRecord$1;->run()V
 HPLcom/android/server/media/MediaSessionRecord$2;-><init>(Lcom/android/server/media/MediaSessionRecord;ZIIILjava/lang/String;III)V
 HPLcom/android/server/media/MediaSessionRecord$2;->run()V
-PLcom/android/server/media/MediaSessionRecord$3;-><init>(Lcom/android/server/media/MediaSessionRecord;)V
+HSPLcom/android/server/media/MediaSessionRecord$3;-><init>(Lcom/android/server/media/MediaSessionRecord;)V
 PLcom/android/server/media/MediaSessionRecord$3;->run()V
 HPLcom/android/server/media/MediaSessionRecord$ControllerStub$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/media/MediaSessionRecord$ControllerStub;Landroid/media/session/ISessionControllerCallback;)V
 HPLcom/android/server/media/MediaSessionRecord$ControllerStub$$ExternalSyntheticLambda0;->binderDied()V
 PLcom/android/server/media/MediaSessionRecord$ControllerStub;->$r8$lambda$8rbiMArEpzc2x9P8H6VvdHOI2c0(Lcom/android/server/media/MediaSessionRecord$ControllerStub;Landroid/media/session/ISessionControllerCallback;)V
-PLcom/android/server/media/MediaSessionRecord$ControllerStub;-><init>(Lcom/android/server/media/MediaSessionRecord;)V
+HSPLcom/android/server/media/MediaSessionRecord$ControllerStub;-><init>(Lcom/android/server/media/MediaSessionRecord;)V
 PLcom/android/server/media/MediaSessionRecord$ControllerStub;->adjustVolume(Ljava/lang/String;Ljava/lang/String;II)V
 PLcom/android/server/media/MediaSessionRecord$ControllerStub;->fastForward(Ljava/lang/String;)V
 HPLcom/android/server/media/MediaSessionRecord$ControllerStub;->getExtras()Landroid/os/Bundle;
@@ -30427,7 +31630,9 @@
 PLcom/android/server/media/MediaSessionRecord$ControllerStub;->prepareFromMediaId(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)V
 PLcom/android/server/media/MediaSessionRecord$ControllerStub;->prepareFromUri(Ljava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;)V
 PLcom/android/server/media/MediaSessionRecord$ControllerStub;->previous(Ljava/lang/String;)V
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->rate(Ljava/lang/String;Landroid/media/Rating;)V
 HPLcom/android/server/media/MediaSessionRecord$ControllerStub;->registerCallback(Ljava/lang/String;Landroid/media/session/ISessionControllerCallback;)V
+PLcom/android/server/media/MediaSessionRecord$ControllerStub;->rewind(Ljava/lang/String;)V
 PLcom/android/server/media/MediaSessionRecord$ControllerStub;->seekTo(Ljava/lang/String;J)V
 HPLcom/android/server/media/MediaSessionRecord$ControllerStub;->sendCommand(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/ResultReceiver;)V
 PLcom/android/server/media/MediaSessionRecord$ControllerStub;->sendCustomAction(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)V
@@ -30440,14 +31645,14 @@
 HPLcom/android/server/media/MediaSessionRecord$ISessionControllerCallbackHolder;->-$$Nest$fgetmDeathMonitor(Lcom/android/server/media/MediaSessionRecord$ISessionControllerCallbackHolder;)Landroid/os/IBinder$DeathRecipient;
 PLcom/android/server/media/MediaSessionRecord$ISessionControllerCallbackHolder;->-$$Nest$fgetmPackageName(Lcom/android/server/media/MediaSessionRecord$ISessionControllerCallbackHolder;)Ljava/lang/String;
 HPLcom/android/server/media/MediaSessionRecord$ISessionControllerCallbackHolder;-><init>(Lcom/android/server/media/MediaSessionRecord;Landroid/media/session/ISessionControllerCallback;Ljava/lang/String;ILandroid/os/IBinder$DeathRecipient;)V
-PLcom/android/server/media/MediaSessionRecord$MessageHandler;-><init>(Lcom/android/server/media/MediaSessionRecord;Landroid/os/Looper;)V
-HPLcom/android/server/media/MediaSessionRecord$MessageHandler;->handleMessage(Landroid/os/Message;)V
-HPLcom/android/server/media/MediaSessionRecord$MessageHandler;->post(I)V
-HPLcom/android/server/media/MediaSessionRecord$MessageHandler;->post(ILjava/lang/Object;)V+]Landroid/os/Handler;Lcom/android/server/media/MediaSessionRecord$MessageHandler;]Landroid/os/Message;Landroid/os/Message;
+HSPLcom/android/server/media/MediaSessionRecord$MessageHandler;-><init>(Lcom/android/server/media/MediaSessionRecord;Landroid/os/Looper;)V
+HSPLcom/android/server/media/MediaSessionRecord$MessageHandler;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/media/MediaSessionRecord$MessageHandler;->post(I)V+]Lcom/android/server/media/MediaSessionRecord$MessageHandler;Lcom/android/server/media/MediaSessionRecord$MessageHandler;
+HSPLcom/android/server/media/MediaSessionRecord$MessageHandler;->post(ILjava/lang/Object;)V+]Landroid/os/Handler;Lcom/android/server/media/MediaSessionRecord$MessageHandler;]Landroid/os/Message;Landroid/os/Message;
 PLcom/android/server/media/MediaSessionRecord$MessageHandler;->post(ILjava/lang/Object;Landroid/os/Bundle;)V
-PLcom/android/server/media/MediaSessionRecord$SessionCb;->-$$Nest$fgetmCb(Lcom/android/server/media/MediaSessionRecord$SessionCb;)Landroid/media/session/ISessionCallback;
-PLcom/android/server/media/MediaSessionRecord$SessionCb;-><init>(Lcom/android/server/media/MediaSessionRecord;Landroid/media/session/ISessionCallback;)V
-PLcom/android/server/media/MediaSessionRecord$SessionCb;->adjustVolume(Ljava/lang/String;IIZI)V
+HSPLcom/android/server/media/MediaSessionRecord$SessionCb;->-$$Nest$fgetmCb(Lcom/android/server/media/MediaSessionRecord$SessionCb;)Landroid/media/session/ISessionCallback;
+HSPLcom/android/server/media/MediaSessionRecord$SessionCb;-><init>(Lcom/android/server/media/MediaSessionRecord;Landroid/media/session/ISessionCallback;)V
+HPLcom/android/server/media/MediaSessionRecord$SessionCb;->adjustVolume(Ljava/lang/String;IIZI)V
 HPLcom/android/server/media/MediaSessionRecord$SessionCb;->createMediaButtonIntent(Landroid/view/KeyEvent;)Landroid/content/Intent;
 PLcom/android/server/media/MediaSessionRecord$SessionCb;->fastForward(Ljava/lang/String;II)V
 PLcom/android/server/media/MediaSessionRecord$SessionCb;->next(Ljava/lang/String;II)V
@@ -30457,8 +31662,11 @@
 PLcom/android/server/media/MediaSessionRecord$SessionCb;->playFromSearch(Ljava/lang/String;IILjava/lang/String;Landroid/os/Bundle;)V
 PLcom/android/server/media/MediaSessionRecord$SessionCb;->playFromUri(Ljava/lang/String;IILandroid/net/Uri;Landroid/os/Bundle;)V
 PLcom/android/server/media/MediaSessionRecord$SessionCb;->prepare(Ljava/lang/String;II)V
+PLcom/android/server/media/MediaSessionRecord$SessionCb;->prepareFromMediaId(Ljava/lang/String;IILjava/lang/String;Landroid/os/Bundle;)V
 PLcom/android/server/media/MediaSessionRecord$SessionCb;->prepareFromUri(Ljava/lang/String;IILandroid/net/Uri;Landroid/os/Bundle;)V
 PLcom/android/server/media/MediaSessionRecord$SessionCb;->previous(Ljava/lang/String;II)V
+PLcom/android/server/media/MediaSessionRecord$SessionCb;->rate(Ljava/lang/String;IILandroid/media/Rating;)V
+PLcom/android/server/media/MediaSessionRecord$SessionCb;->rewind(Ljava/lang/String;II)V
 PLcom/android/server/media/MediaSessionRecord$SessionCb;->seekTo(Ljava/lang/String;IIJ)V
 HPLcom/android/server/media/MediaSessionRecord$SessionCb;->sendCommand(Ljava/lang/String;IILjava/lang/String;Landroid/os/Bundle;Landroid/os/ResultReceiver;)V
 PLcom/android/server/media/MediaSessionRecord$SessionCb;->sendCustomAction(Ljava/lang/String;IILjava/lang/String;Landroid/os/Bundle;)V
@@ -30470,77 +31678,77 @@
 PLcom/android/server/media/MediaSessionRecord$SessionStub$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/media/MediaSessionRecord$SessionStub;)V
 HPLcom/android/server/media/MediaSessionRecord$SessionStub$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
 PLcom/android/server/media/MediaSessionRecord$SessionStub;->$r8$lambda$g7c74wN0s85B0GplGOQWhF2EKyk(Lcom/android/server/media/MediaSessionRecord$SessionStub;Ljava/util/List;)V
-PLcom/android/server/media/MediaSessionRecord$SessionStub;-><init>(Lcom/android/server/media/MediaSessionRecord;)V
-PLcom/android/server/media/MediaSessionRecord$SessionStub;-><init>(Lcom/android/server/media/MediaSessionRecord;Lcom/android/server/media/MediaSessionRecord$SessionStub-IA;)V
+HSPLcom/android/server/media/MediaSessionRecord$SessionStub;-><init>(Lcom/android/server/media/MediaSessionRecord;)V
+HSPLcom/android/server/media/MediaSessionRecord$SessionStub;-><init>(Lcom/android/server/media/MediaSessionRecord;Lcom/android/server/media/MediaSessionRecord$SessionStub-IA;)V
 HPLcom/android/server/media/MediaSessionRecord$SessionStub;->destroySession()V
 HPLcom/android/server/media/MediaSessionRecord$SessionStub;->getBinderForSetQueue()Landroid/os/IBinder;
-PLcom/android/server/media/MediaSessionRecord$SessionStub;->getController()Landroid/media/session/ISessionController;
+HSPLcom/android/server/media/MediaSessionRecord$SessionStub;->getController()Landroid/media/session/ISessionController;
 HPLcom/android/server/media/MediaSessionRecord$SessionStub;->lambda$getBinderForSetQueue$0(Ljava/util/List;)V
 PLcom/android/server/media/MediaSessionRecord$SessionStub;->resetQueue()V
 PLcom/android/server/media/MediaSessionRecord$SessionStub;->sendEvent(Ljava/lang/String;Landroid/os/Bundle;)V
 HPLcom/android/server/media/MediaSessionRecord$SessionStub;->setActive(Z)V
 HPLcom/android/server/media/MediaSessionRecord$SessionStub;->setCurrentVolume(I)V
 HPLcom/android/server/media/MediaSessionRecord$SessionStub;->setExtras(Landroid/os/Bundle;)V
-HPLcom/android/server/media/MediaSessionRecord$SessionStub;->setFlags(I)V
+HSPLcom/android/server/media/MediaSessionRecord$SessionStub;->setFlags(I)V
 PLcom/android/server/media/MediaSessionRecord$SessionStub;->setLaunchPendingIntent(Landroid/app/PendingIntent;)V
 PLcom/android/server/media/MediaSessionRecord$SessionStub;->setMediaButtonBroadcastReceiver(Landroid/content/ComponentName;)V
 HPLcom/android/server/media/MediaSessionRecord$SessionStub;->setMediaButtonReceiver(Landroid/app/PendingIntent;Ljava/lang/String;)V
 HPLcom/android/server/media/MediaSessionRecord$SessionStub;->setMetadata(Landroid/media/MediaMetadata;JLjava/lang/String;)V
 HPLcom/android/server/media/MediaSessionRecord$SessionStub;->setPlaybackState(Landroid/media/session/PlaybackState;)V+]Landroid/media/session/PlaybackState;Landroid/media/session/PlaybackState;]Ljava/util/List;Ljava/util/Arrays$ArrayList;]Lcom/android/server/media/MediaSessionRecord$MessageHandler;Lcom/android/server/media/MediaSessionRecord$MessageHandler;]Lcom/android/server/media/MediaSessionService;Lcom/android/server/media/MediaSessionService;
-HPLcom/android/server/media/MediaSessionRecord$SessionStub;->setPlaybackToLocal(Landroid/media/AudioAttributes;)V
+HSPLcom/android/server/media/MediaSessionRecord$SessionStub;->setPlaybackToLocal(Landroid/media/AudioAttributes;)V
 HPLcom/android/server/media/MediaSessionRecord$SessionStub;->setPlaybackToRemote(IILjava/lang/String;)V
 HPLcom/android/server/media/MediaSessionRecord$SessionStub;->setQueueTitle(Ljava/lang/CharSequence;)V
 PLcom/android/server/media/MediaSessionRecord$SessionStub;->setRatingType(I)V
-PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmAudioManager(Lcom/android/server/media/MediaSessionRecord;)Landroid/media/AudioManager;
-PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmContext(Lcom/android/server/media/MediaSessionRecord;)Landroid/content/Context;
-PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmController(Lcom/android/server/media/MediaSessionRecord;)Lcom/android/server/media/MediaSessionRecord$ControllerStub;
+HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmAudioManager(Lcom/android/server/media/MediaSessionRecord;)Landroid/media/AudioManager;
+HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmContext(Lcom/android/server/media/MediaSessionRecord;)Landroid/content/Context;
+HSPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmController(Lcom/android/server/media/MediaSessionRecord;)Lcom/android/server/media/MediaSessionRecord$ControllerStub;
 HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmControllerCallbackHolders(Lcom/android/server/media/MediaSessionRecord;)Ljava/util/concurrent/CopyOnWriteArrayList;
 PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmCurrentVolume(Lcom/android/server/media/MediaSessionRecord;)I
 HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmDestroyed(Lcom/android/server/media/MediaSessionRecord;)Z
 HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmExtras(Lcom/android/server/media/MediaSessionRecord;)Landroid/os/Bundle;
 PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmFlags(Lcom/android/server/media/MediaSessionRecord;)J
-HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmHandler(Lcom/android/server/media/MediaSessionRecord;)Lcom/android/server/media/MediaSessionRecord$MessageHandler;
+HSPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmHandler(Lcom/android/server/media/MediaSessionRecord;)Lcom/android/server/media/MediaSessionRecord$MessageHandler;
 PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmLaunchIntent(Lcom/android/server/media/MediaSessionRecord;)Landroid/app/PendingIntent;
-HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmLock(Lcom/android/server/media/MediaSessionRecord;)Ljava/lang/Object;
+HSPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmLock(Lcom/android/server/media/MediaSessionRecord;)Ljava/lang/Object;
 HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmMetadata(Lcom/android/server/media/MediaSessionRecord;)Landroid/media/MediaMetadata;
 PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmOptimisticVolume(Lcom/android/server/media/MediaSessionRecord;)I
 HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmPackageName(Lcom/android/server/media/MediaSessionRecord;)Ljava/lang/String;
 HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmPlaybackState(Lcom/android/server/media/MediaSessionRecord;)Landroid/media/session/PlaybackState;
-PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmPolicies(Lcom/android/server/media/MediaSessionRecord;)I
+HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmPolicies(Lcom/android/server/media/MediaSessionRecord;)I
 HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmQueue(Lcom/android/server/media/MediaSessionRecord;)Ljava/util/List;
 PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmQueueTitle(Lcom/android/server/media/MediaSessionRecord;)Ljava/lang/CharSequence;
 PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmRatingType(Lcom/android/server/media/MediaSessionRecord;)I
-HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmService(Lcom/android/server/media/MediaSessionRecord;)Lcom/android/server/media/MediaSessionService;
+HSPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmService(Lcom/android/server/media/MediaSessionRecord;)Lcom/android/server/media/MediaSessionService;
 PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmSessionCb(Lcom/android/server/media/MediaSessionRecord;)Lcom/android/server/media/MediaSessionRecord$SessionCb;
 PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmSessionInfo(Lcom/android/server/media/MediaSessionRecord;)Landroid/os/Bundle;
 PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmTag(Lcom/android/server/media/MediaSessionRecord;)Ljava/lang/String;
-PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmUserId(Lcom/android/server/media/MediaSessionRecord;)I
-PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmVolumeType(Lcom/android/server/media/MediaSessionRecord;)I
-PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmAudioAttrs(Lcom/android/server/media/MediaSessionRecord;Landroid/media/AudioAttributes;)V
-PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmCurrentVolume(Lcom/android/server/media/MediaSessionRecord;I)V
-PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmDuration(Lcom/android/server/media/MediaSessionRecord;J)V
+HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmUserId(Lcom/android/server/media/MediaSessionRecord;)I
+HSPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fgetmVolumeType(Lcom/android/server/media/MediaSessionRecord;)I
+HSPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmAudioAttrs(Lcom/android/server/media/MediaSessionRecord;Landroid/media/AudioAttributes;)V
+HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmCurrentVolume(Lcom/android/server/media/MediaSessionRecord;I)V
+HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmDuration(Lcom/android/server/media/MediaSessionRecord;J)V
 PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmExtras(Lcom/android/server/media/MediaSessionRecord;Landroid/os/Bundle;)V
-PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmFlags(Lcom/android/server/media/MediaSessionRecord;J)V
+HSPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmFlags(Lcom/android/server/media/MediaSessionRecord;J)V
 PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmIsActive(Lcom/android/server/media/MediaSessionRecord;Z)V
 PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmLaunchIntent(Lcom/android/server/media/MediaSessionRecord;Landroid/app/PendingIntent;)V
-PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmMaxVolume(Lcom/android/server/media/MediaSessionRecord;I)V
-PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmMediaButtonReceiverHolder(Lcom/android/server/media/MediaSessionRecord;Lcom/android/server/media/MediaButtonReceiverHolder;)V
-PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmMetadata(Lcom/android/server/media/MediaSessionRecord;Landroid/media/MediaMetadata;)V
-PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmMetadataDescription(Lcom/android/server/media/MediaSessionRecord;Ljava/lang/String;)V
+HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmMaxVolume(Lcom/android/server/media/MediaSessionRecord;I)V
+HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmMediaButtonReceiverHolder(Lcom/android/server/media/MediaSessionRecord;Lcom/android/server/media/MediaButtonReceiverHolder;)V
+HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmMetadata(Lcom/android/server/media/MediaSessionRecord;Landroid/media/MediaMetadata;)V
+HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmMetadataDescription(Lcom/android/server/media/MediaSessionRecord;Ljava/lang/String;)V
 PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmOptimisticVolume(Lcom/android/server/media/MediaSessionRecord;I)V
 HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmPlaybackState(Lcom/android/server/media/MediaSessionRecord;Landroid/media/session/PlaybackState;)V
 PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmQueue(Lcom/android/server/media/MediaSessionRecord;Ljava/util/List;)V
 PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmQueueTitle(Lcom/android/server/media/MediaSessionRecord;Ljava/lang/CharSequence;)V
 PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmRatingType(Lcom/android/server/media/MediaSessionRecord;I)V
-PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmVolumeControlId(Lcom/android/server/media/MediaSessionRecord;Ljava/lang/String;)V
-PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmVolumeControlType(Lcom/android/server/media/MediaSessionRecord;I)V
-PLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmVolumeType(Lcom/android/server/media/MediaSessionRecord;I)V
+HSPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmVolumeControlId(Lcom/android/server/media/MediaSessionRecord;Ljava/lang/String;)V
+HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmVolumeControlType(Lcom/android/server/media/MediaSessionRecord;I)V
+HSPLcom/android/server/media/MediaSessionRecord;->-$$Nest$fputmVolumeType(Lcom/android/server/media/MediaSessionRecord;I)V
 HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$mgetControllerHolderIndexForCb(Lcom/android/server/media/MediaSessionRecord;Landroid/media/session/ISessionControllerCallback;)I
 HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$mgetStateWithUpdatedPosition(Lcom/android/server/media/MediaSessionRecord;)Landroid/media/session/PlaybackState;+]Lcom/android/server/media/MediaSessionRecord;Lcom/android/server/media/MediaSessionRecord;
 HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$mgetVolumeAttributes(Lcom/android/server/media/MediaSessionRecord;)Landroid/media/session/MediaController$PlaybackInfo;
 PLcom/android/server/media/MediaSessionRecord;->-$$Nest$mpushEvent(Lcom/android/server/media/MediaSessionRecord;Ljava/lang/String;Landroid/os/Bundle;)V
 PLcom/android/server/media/MediaSessionRecord;->-$$Nest$mpushExtrasUpdate(Lcom/android/server/media/MediaSessionRecord;)V
-PLcom/android/server/media/MediaSessionRecord;->-$$Nest$mpushMetadataUpdate(Lcom/android/server/media/MediaSessionRecord;)V
+HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$mpushMetadataUpdate(Lcom/android/server/media/MediaSessionRecord;)V
 HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$mpushPlaybackStateUpdate(Lcom/android/server/media/MediaSessionRecord;)V
 PLcom/android/server/media/MediaSessionRecord;->-$$Nest$mpushQueueTitleUpdate(Lcom/android/server/media/MediaSessionRecord;)V
 PLcom/android/server/media/MediaSessionRecord;->-$$Nest$mpushQueueUpdate(Lcom/android/server/media/MediaSessionRecord;)V
@@ -30550,9 +31758,9 @@
 HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$sfgetALWAYS_PRIORITY_STATES()Ljava/util/List;
 HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$sfgetDEBUG()Z
 HPLcom/android/server/media/MediaSessionRecord;->-$$Nest$sfgetTRANSITION_PRIORITY_STATES()Ljava/util/List;
-PLcom/android/server/media/MediaSessionRecord;-><clinit>()V
-HPLcom/android/server/media/MediaSessionRecord;-><init>(IIILjava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;Landroid/os/Bundle;Lcom/android/server/media/MediaSessionService;Landroid/os/Looper;I)V
-PLcom/android/server/media/MediaSessionRecord;->adjustVolume(Ljava/lang/String;Ljava/lang/String;IIZIIZ)V
+HSPLcom/android/server/media/MediaSessionRecord;-><clinit>()V
+HSPLcom/android/server/media/MediaSessionRecord;-><init>(IIILjava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;Landroid/os/Bundle;Lcom/android/server/media/MediaSessionService;Landroid/os/Looper;I)V
+HPLcom/android/server/media/MediaSessionRecord;->adjustVolume(Ljava/lang/String;Ljava/lang/String;IIZIIZ)V
 PLcom/android/server/media/MediaSessionRecord;->binderDied()V
 PLcom/android/server/media/MediaSessionRecord;->canHandleVolumeKey()Z
 HPLcom/android/server/media/MediaSessionRecord;->checkPlaybackActiveState(Z)Z+]Landroid/media/session/PlaybackState;Landroid/media/session/PlaybackState;
@@ -30561,32 +31769,32 @@
 HPLcom/android/server/media/MediaSessionRecord;->getControllerHolderIndexForCb(Landroid/media/session/ISessionControllerCallback;)I+]Ljava/lang/Object;Landroid/os/BinderProxy;]Landroid/media/session/ISessionControllerCallback;Landroid/media/session/ISessionControllerCallback$Stub$Proxy;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;
 PLcom/android/server/media/MediaSessionRecord;->getMediaButtonReceiver()Lcom/android/server/media/MediaButtonReceiverHolder;
 PLcom/android/server/media/MediaSessionRecord;->getPackageName()Ljava/lang/String;
-PLcom/android/server/media/MediaSessionRecord;->getSessionBinder()Landroid/media/session/ISession;
+HSPLcom/android/server/media/MediaSessionRecord;->getSessionBinder()Landroid/media/session/ISession;
 HPLcom/android/server/media/MediaSessionRecord;->getSessionPolicies()I
 HPLcom/android/server/media/MediaSessionRecord;->getSessionToken()Landroid/media/session/MediaSession$Token;
 HPLcom/android/server/media/MediaSessionRecord;->getStateWithUpdatedPosition()Landroid/media/session/PlaybackState;+]Landroid/media/session/PlaybackState$Builder;Landroid/media/session/PlaybackState$Builder;]Landroid/media/session/PlaybackState;Landroid/media/session/PlaybackState;
 HPLcom/android/server/media/MediaSessionRecord;->getUid()I
-HPLcom/android/server/media/MediaSessionRecord;->getUserId()I
-HPLcom/android/server/media/MediaSessionRecord;->getVolumeAttributes()Landroid/media/session/MediaController$PlaybackInfo;
+HSPLcom/android/server/media/MediaSessionRecord;->getUserId()I
+HPLcom/android/server/media/MediaSessionRecord;->getVolumeAttributes()Landroid/media/session/MediaController$PlaybackInfo;+]Landroid/media/AudioManager;Landroid/media/AudioManager;
 HPLcom/android/server/media/MediaSessionRecord;->getVolumeStream(Landroid/media/AudioAttributes;)I
-HPLcom/android/server/media/MediaSessionRecord;->isActive()Z
-PLcom/android/server/media/MediaSessionRecord;->isClosed()Z
-PLcom/android/server/media/MediaSessionRecord;->isPlaybackTypeLocal()Z
+HSPLcom/android/server/media/MediaSessionRecord;->isActive()Z
+HPLcom/android/server/media/MediaSessionRecord;->isClosed()Z
+HPLcom/android/server/media/MediaSessionRecord;->isPlaybackTypeLocal()Z
 PLcom/android/server/media/MediaSessionRecord;->isSystemPriority()Z
 PLcom/android/server/media/MediaSessionRecord;->logCallbackException(Ljava/lang/String;Lcom/android/server/media/MediaSessionRecord$ISessionControllerCallbackHolder;Ljava/lang/Exception;)V
-PLcom/android/server/media/MediaSessionRecord;->postAdjustLocalVolume(IIILjava/lang/String;IIZZI)V
+HPLcom/android/server/media/MediaSessionRecord;->postAdjustLocalVolume(IIILjava/lang/String;IIZZI)V
 PLcom/android/server/media/MediaSessionRecord;->pushEvent(Ljava/lang/String;Landroid/os/Bundle;)V
 PLcom/android/server/media/MediaSessionRecord;->pushExtrasUpdate()V
-HPLcom/android/server/media/MediaSessionRecord;->pushMetadataUpdate()V
+HPLcom/android/server/media/MediaSessionRecord;->pushMetadataUpdate()V+]Ljava/util/Collection;Ljava/util/ArrayList;]Landroid/media/session/ISessionControllerCallback;Landroid/media/session/ISessionControllerCallback$Stub$Proxy;]Lcom/android/server/media/MediaSessionRecord;Lcom/android/server/media/MediaSessionRecord;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Ljava/util/Iterator;Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;
 HPLcom/android/server/media/MediaSessionRecord;->pushPlaybackStateUpdate()V+]Landroid/media/session/ISessionControllerCallback;Landroid/media/session/ISessionControllerCallback$Stub$Proxy;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Ljava/util/Iterator;Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;
-PLcom/android/server/media/MediaSessionRecord;->pushQueueTitleUpdate()V
+HPLcom/android/server/media/MediaSessionRecord;->pushQueueTitleUpdate()V
 HPLcom/android/server/media/MediaSessionRecord;->pushQueueUpdate()V
 PLcom/android/server/media/MediaSessionRecord;->pushSessionDestroyed()V
-HPLcom/android/server/media/MediaSessionRecord;->pushVolumeUpdate()V
+HPLcom/android/server/media/MediaSessionRecord;->pushVolumeUpdate()V+]Landroid/media/session/ISessionControllerCallback;Landroid/media/session/ISessionControllerCallback$Stub$Proxy;]Lcom/android/server/media/MediaSessionRecord;Lcom/android/server/media/MediaSessionRecord;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Ljava/util/Iterator;Ljava/util/concurrent/CopyOnWriteArrayList$COWIterator;
 PLcom/android/server/media/MediaSessionRecord;->sendMediaButton(Ljava/lang/String;IIZLandroid/view/KeyEvent;ILandroid/os/ResultReceiver;)Z
 PLcom/android/server/media/MediaSessionRecord;->setSessionPolicies(I)V
 PLcom/android/server/media/MediaSessionRecord;->setVolumeTo(Ljava/lang/String;Ljava/lang/String;IIII)V
-HPLcom/android/server/media/MediaSessionRecord;->toString()Ljava/lang/String;
+HSPLcom/android/server/media/MediaSessionRecord;->toString()Ljava/lang/String;
 PLcom/android/server/media/MediaSessionRecordImpl;->adjustVolume(Ljava/lang/String;Ljava/lang/String;IIZIIZ)V
 PLcom/android/server/media/MediaSessionRecordImpl;->checkPlaybackActiveState(Z)Z
 PLcom/android/server/media/MediaSessionRecordImpl;->close()V
@@ -30607,7 +31815,7 @@
 PLcom/android/server/media/MediaSessionService$FullUserRecord;->-$$Nest$fgetmOnVolumeKeyLongPressListener(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Landroid/media/session/IOnVolumeKeyLongPressListener;
 PLcom/android/server/media/MediaSessionService$FullUserRecord;->-$$Nest$fgetmOnVolumeKeyLongPressListenerUid(Lcom/android/server/media/MediaSessionService$FullUserRecord;)I
 HSPLcom/android/server/media/MediaSessionService$FullUserRecord;->-$$Nest$fgetmPriorityStack(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Lcom/android/server/media/MediaSessionStack;
-PLcom/android/server/media/MediaSessionService$FullUserRecord;->-$$Nest$fgetmUidToSessionCount(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Landroid/util/SparseIntArray;
+HSPLcom/android/server/media/MediaSessionService$FullUserRecord;->-$$Nest$fgetmUidToSessionCount(Lcom/android/server/media/MediaSessionService$FullUserRecord;)Landroid/util/SparseIntArray;
 PLcom/android/server/media/MediaSessionService$FullUserRecord;->-$$Nest$fputmOnMediaKeyListener(Lcom/android/server/media/MediaSessionService$FullUserRecord;Landroid/media/session/IOnMediaKeyListener;)V
 PLcom/android/server/media/MediaSessionService$FullUserRecord;->-$$Nest$fputmOnMediaKeyListenerUid(Lcom/android/server/media/MediaSessionService$FullUserRecord;I)V
 PLcom/android/server/media/MediaSessionService$FullUserRecord;->-$$Nest$fputmOnVolumeKeyLongPressListener(Lcom/android/server/media/MediaSessionService$FullUserRecord;Landroid/media/session/IOnVolumeKeyLongPressListener;)V
@@ -30627,30 +31835,30 @@
 PLcom/android/server/media/MediaSessionService$FullUserRecord;->removeOnMediaKeyEventDispatchedListenerLocked(Landroid/media/session/IOnMediaKeyEventDispatchedListener;)V
 PLcom/android/server/media/MediaSessionService$FullUserRecord;->removeOnMediaKeyEventSessionChangedListener(Landroid/media/session/IOnMediaKeyEventSessionChangedListener;)V
 HSPLcom/android/server/media/MediaSessionService$MessageHandler;-><init>(Lcom/android/server/media/MediaSessionService;)V
-HPLcom/android/server/media/MediaSessionService$MessageHandler;->handleMessage(Landroid/os/Message;)V
-HPLcom/android/server/media/MediaSessionService$MessageHandler;->postSessionsChanged(Lcom/android/server/media/MediaSessionRecordImpl;)V
+HSPLcom/android/server/media/MediaSessionService$MessageHandler;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/media/MediaSessionService$MessageHandler;->postSessionsChanged(Lcom/android/server/media/MediaSessionRecordImpl;)V
 PLcom/android/server/media/MediaSessionService$Session2TokensListenerRecord;-><init>(Lcom/android/server/media/MediaSessionService;Landroid/media/session/ISession2TokensListener;I)V
 PLcom/android/server/media/MediaSessionService$Session2TokensListenerRecord;->binderDied()V
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl$1;-><init>(Lcom/android/server/media/MediaSessionService$SessionManagerImpl;Lcom/android/server/media/MediaSessionService$FullUserRecord;)V
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl$2;-><init>(Lcom/android/server/media/MediaSessionService$SessionManagerImpl;Lcom/android/server/media/MediaSessionService$FullUserRecord;)V
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl$2;->binderDied()V
 HPLcom/android/server/media/MediaSessionService$SessionManagerImpl$3;-><init>(Lcom/android/server/media/MediaSessionService$SessionManagerImpl;ZLjava/lang/String;IIIIILjava/lang/String;)V
-HPLcom/android/server/media/MediaSessionService$SessionManagerImpl$3;->run()V
+HPLcom/android/server/media/MediaSessionService$SessionManagerImpl$3;->run()V+]Lcom/android/server/SystemService;Lcom/android/server/media/MediaSessionService;]Landroid/media/AudioManager;Landroid/media/AudioManager;]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventHandler;-><init>(Lcom/android/server/media/MediaSessionService$SessionManagerImpl;I)V
 HPLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventHandler;->cancelTrackingIfNeeded(Ljava/lang/String;IIZLandroid/view/KeyEvent;ZLjava/lang/String;IZI)V
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventHandler;->dispatchDownAndUpKeyEventsLocked(Ljava/lang/String;IIZLandroid/view/KeyEvent;ZLjava/lang/String;IZ)V
-HPLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventHandler;->handleKeyEventLocked(Ljava/lang/String;IIZLandroid/view/KeyEvent;ZLjava/lang/String;IZ)V
+HPLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventHandler;->handleKeyEventLocked(Ljava/lang/String;IIZLandroid/view/KeyEvent;ZLjava/lang/String;IZ)V+]Lcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventHandler;Lcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventHandler;]Landroid/view/KeyEvent;Landroid/view/KeyEvent;
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventHandler;->handleLongPressLocked(Landroid/view/KeyEvent;ZI)V
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventHandler;->handleMediaKeyEventLocked(Ljava/lang/String;IIZLandroid/view/KeyEvent;Z)V
-PLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventHandler;->handleVolumeKeyEventLocked(Ljava/lang/String;IIZLandroid/view/KeyEvent;Ljava/lang/String;IZ)V
-PLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventHandler;->isFirstDownKeyEvent(Landroid/view/KeyEvent;)Z
+HPLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventHandler;->handleVolumeKeyEventLocked(Ljava/lang/String;IIZLandroid/view/KeyEvent;Ljava/lang/String;IZ)V
+HPLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventHandler;->isFirstDownKeyEvent(Landroid/view/KeyEvent;)Z
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventHandler;->isFirstLongPressKeyEvent(Landroid/view/KeyEvent;)Z
 HPLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventHandler;->needTracking(Landroid/view/KeyEvent;I)Z
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventHandler;->resetLongPressTracking()V
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventHandler;->shouldTrackForMultipleTapsLocked(I)Z
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventWakeLockReceiver;->-$$Nest$fgetmLastTimeoutId(Lcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventWakeLockReceiver;)I
 HSPLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventWakeLockReceiver;-><init>(Lcom/android/server/media/MediaSessionService$SessionManagerImpl;Landroid/os/Handler;)V
-PLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventWakeLockReceiver;->acquireWakeLockLocked()V
+HPLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventWakeLockReceiver;->acquireWakeLockLocked()V
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventWakeLockReceiver;->onReceiveResult(ILandroid/os/Bundle;)V
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventWakeLockReceiver;->onSendFinished(Landroid/app/PendingIntent;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;)V
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventWakeLockReceiver;->onTimeout()V
@@ -30658,32 +31866,32 @@
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventWakeLockReceiver;->run()V
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl$MediaKeyListenerResultReceiver;-><init>(Lcom/android/server/media/MediaSessionService$SessionManagerImpl;Ljava/lang/String;IIZLandroid/view/KeyEvent;ZLcom/android/server/media/MediaSessionService$SessionManagerImpl$MediaKeyListenerResultReceiver-IA;)V
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->-$$Nest$mdispatchMediaKeyEventLocked(Lcom/android/server/media/MediaSessionService$SessionManagerImpl;Ljava/lang/String;IIZLandroid/view/KeyEvent;Z)V
-PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->-$$Nest$mdispatchVolumeKeyEventLocked(Lcom/android/server/media/MediaSessionService$SessionManagerImpl;Ljava/lang/String;Ljava/lang/String;IIZLandroid/view/KeyEvent;IZ)V
+HPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->-$$Nest$mdispatchVolumeKeyEventLocked(Lcom/android/server/media/MediaSessionService$SessionManagerImpl;Ljava/lang/String;Ljava/lang/String;IIZLandroid/view/KeyEvent;IZ)V
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->-$$Nest$misVoiceKey(Lcom/android/server/media/MediaSessionService$SessionManagerImpl;I)Z
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->-$$Nest$mstartVoiceInput(Lcom/android/server/media/MediaSessionService$SessionManagerImpl;Z)V
 HSPLcom/android/server/media/MediaSessionService$SessionManagerImpl;-><init>(Lcom/android/server/media/MediaSessionService;)V
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->addOnMediaKeyEventSessionChangedListener(Landroid/media/session/IOnMediaKeyEventSessionChangedListener;Ljava/lang/String;)V
 HSPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->addSessionsListener(Landroid/media/session/IActiveSessionsListener;Landroid/content/ComponentName;I)V
-HPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->createSession(Ljava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;Landroid/os/Bundle;I)Landroid/media/session/ISession;
+HSPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->createSession(Ljava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;Landroid/os/Bundle;I)Landroid/media/session/ISession;
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->dispatchAdjustVolume(Ljava/lang/String;Ljava/lang/String;III)V
-HPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->dispatchAdjustVolumeLocked(Ljava/lang/String;Ljava/lang/String;IIZIIIZ)V
+HPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->dispatchAdjustVolumeLocked(Ljava/lang/String;Ljava/lang/String;IIZIIIZ)V+]Landroid/os/Handler;Lcom/android/server/media/MediaSessionService$MessageHandler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/media/MediaSessionService$SessionManagerImpl;Lcom/android/server/media/MediaSessionService$SessionManagerImpl;]Lcom/android/server/media/MediaSessionStack;Lcom/android/server/media/MediaSessionStack;
 HPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->dispatchMediaKeyEvent(Ljava/lang/String;ZLandroid/view/KeyEvent;Z)V
 HPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->dispatchMediaKeyEventLocked(Ljava/lang/String;IIZLandroid/view/KeyEvent;Z)V
-PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->dispatchMediaKeyEventToSessionAsSystemService(Ljava/lang/String;Landroid/view/KeyEvent;Landroid/media/session/MediaSession$Token;)Z
-HPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->dispatchVolumeKeyEvent(Ljava/lang/String;Ljava/lang/String;ZLandroid/view/KeyEvent;IZ)V
+HPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->dispatchMediaKeyEventToSessionAsSystemService(Ljava/lang/String;Landroid/view/KeyEvent;Landroid/media/session/MediaSession$Token;)Z
+HPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->dispatchVolumeKeyEvent(Ljava/lang/String;Ljava/lang/String;ZLandroid/view/KeyEvent;IZ)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventHandler;Lcom/android/server/media/MediaSessionService$SessionManagerImpl$KeyEventHandler;]Landroid/view/KeyEvent;Landroid/view/KeyEvent;
 HPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->dispatchVolumeKeyEventLocked(Ljava/lang/String;Ljava/lang/String;IIZLandroid/view/KeyEvent;IZ)V
 HPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->dispatchVolumeKeyEventToSessionAsSystemService(Ljava/lang/String;Ljava/lang/String;Landroid/view/KeyEvent;Landroid/media/session/MediaSession$Token;)V
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->getMediaKeyEventSession(Ljava/lang/String;)Landroid/media/session/MediaSession$Token;
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->getMediaKeyEventSessionPackageName(Ljava/lang/String;)Ljava/lang/String;
-HSPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->getSessions(Landroid/content/ComponentName;I)Ljava/util/List;
-HSPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->handleIncomingUser(IIILjava/lang/String;)I
+HSPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->getSessions(Landroid/content/ComponentName;I)Ljava/util/List;+]Lcom/android/server/media/MediaSessionService$SessionManagerImpl;Lcom/android/server/media/MediaSessionService$SessionManagerImpl;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/media/MediaSessionRecord;Lcom/android/server/media/MediaSessionRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HSPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->handleIncomingUser(IIILjava/lang/String;)I+]Landroid/os/UserHandle;Landroid/os/UserHandle;
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->hasCustomMediaKeyDispatcher(Ljava/lang/String;)Z
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->hasCustomMediaSessionPolicyProvider(Ljava/lang/String;)Z
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->isGlobalPriorityActive()Z
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->isTrusted(Ljava/lang/String;II)Z
 HPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->isUserSetupComplete()Z
-PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->isValidLocalStreamType(I)Z
+HPLcom/android/server/media/MediaSessionService$SessionManagerImpl;->isValidLocalStreamType(I)Z
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->isVoiceKey(I)Z
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->registerRemoteSessionCallback(Landroid/media/IRemoteSessionCallback;)V
 PLcom/android/server/media/MediaSessionService$SessionManagerImpl;->removeOnMediaKeyEventSessionChangedListener(Landroid/media/session/IOnMediaKeyEventSessionChangedListener;)V
@@ -30696,11 +31904,11 @@
 HSPLcom/android/server/media/MediaSessionService$SessionsListenerRecord;-><init>(Lcom/android/server/media/MediaSessionService;Landroid/media/session/IActiveSessionsListener;Landroid/content/ComponentName;III)V
 HPLcom/android/server/media/MediaSessionService$SessionsListenerRecord;->binderDied()V
 HPLcom/android/server/media/MediaSessionService;->$r8$lambda$pee7hFVismD0TQSQsvFVbS2zDZw(Lcom/android/server/media/MediaSessionService;Landroid/media/AudioPlaybackConfiguration;Z)V
-PLcom/android/server/media/MediaSessionService;->-$$Nest$fgetmAudioManager(Lcom/android/server/media/MediaSessionService;)Landroid/media/AudioManager;
+HPLcom/android/server/media/MediaSessionService;->-$$Nest$fgetmAudioManager(Lcom/android/server/media/MediaSessionService;)Landroid/media/AudioManager;
 HSPLcom/android/server/media/MediaSessionService;->-$$Nest$fgetmAudioPlayerStateMonitor(Lcom/android/server/media/MediaSessionService;)Lcom/android/server/media/AudioPlayerStateMonitor;
 HSPLcom/android/server/media/MediaSessionService;->-$$Nest$fgetmContext(Lcom/android/server/media/MediaSessionService;)Landroid/content/Context;
-PLcom/android/server/media/MediaSessionService;->-$$Nest$fgetmCurrentFullUserRecord(Lcom/android/server/media/MediaSessionService;)Lcom/android/server/media/MediaSessionService$FullUserRecord;
-PLcom/android/server/media/MediaSessionService;->-$$Nest$fgetmCustomMediaKeyDispatcher(Lcom/android/server/media/MediaSessionService;)Lcom/android/server/media/MediaKeyDispatcher;
+HPLcom/android/server/media/MediaSessionService;->-$$Nest$fgetmCurrentFullUserRecord(Lcom/android/server/media/MediaSessionService;)Lcom/android/server/media/MediaSessionService$FullUserRecord;
+HPLcom/android/server/media/MediaSessionService;->-$$Nest$fgetmCustomMediaKeyDispatcher(Lcom/android/server/media/MediaSessionService;)Lcom/android/server/media/MediaKeyDispatcher;
 PLcom/android/server/media/MediaSessionService;->-$$Nest$fgetmCustomMediaSessionPolicyProvider(Lcom/android/server/media/MediaSessionService;)Lcom/android/server/media/MediaSessionPolicyProvider;
 PLcom/android/server/media/MediaSessionService;->-$$Nest$fgetmFullUserIds(Lcom/android/server/media/MediaSessionService;)Landroid/util/SparseIntArray;
 PLcom/android/server/media/MediaSessionService;->-$$Nest$fgetmGlobalPrioritySession(Lcom/android/server/media/MediaSessionService;)Lcom/android/server/media/MediaSessionRecord;
@@ -30711,7 +31919,7 @@
 PLcom/android/server/media/MediaSessionService;->-$$Nest$fgetmMediaEventWakeLock(Lcom/android/server/media/MediaSessionService;)Landroid/os/PowerManager$WakeLock;
 HSPLcom/android/server/media/MediaSessionService;->-$$Nest$fgetmSessionsListeners(Lcom/android/server/media/MediaSessionService;)Ljava/util/ArrayList;
 PLcom/android/server/media/MediaSessionService;->-$$Nest$fgetmUserRecords(Lcom/android/server/media/MediaSessionService;)Landroid/util/SparseArray;
-PLcom/android/server/media/MediaSessionService;->-$$Nest$mcreateSessionInternal(Lcom/android/server/media/MediaSessionService;IIILjava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;Landroid/os/Bundle;)Lcom/android/server/media/MediaSessionRecord;
+HSPLcom/android/server/media/MediaSessionService;->-$$Nest$mcreateSessionInternal(Lcom/android/server/media/MediaSessionService;IIILjava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;Landroid/os/Bundle;)Lcom/android/server/media/MediaSessionRecord;
 PLcom/android/server/media/MediaSessionService;->-$$Nest$mdestroySessionLocked(Lcom/android/server/media/MediaSessionService;Lcom/android/server/media/MediaSessionRecordImpl;)V
 HSPLcom/android/server/media/MediaSessionService;->-$$Nest$menforceMediaPermissions(Lcom/android/server/media/MediaSessionService;Ljava/lang/String;III)V
 HSPLcom/android/server/media/MediaSessionService;->-$$Nest$menforcePackageName(Lcom/android/server/media/MediaSessionService;Ljava/lang/String;I)V
@@ -30724,75 +31932,75 @@
 PLcom/android/server/media/MediaSessionService;->-$$Nest$mgetMediaSessionRecordLocked(Lcom/android/server/media/MediaSessionService;Landroid/media/session/MediaSession$Token;)Lcom/android/server/media/MediaSessionRecord;
 PLcom/android/server/media/MediaSessionService;->-$$Nest$mhasMediaControlPermission(Lcom/android/server/media/MediaSessionService;II)Z
 PLcom/android/server/media/MediaSessionService;->-$$Nest$minstantiateCustomDispatcher(Lcom/android/server/media/MediaSessionService;Ljava/lang/String;)V
-PLcom/android/server/media/MediaSessionService;->-$$Nest$misGlobalPriorityActiveLocked(Lcom/android/server/media/MediaSessionService;)Z
-PLcom/android/server/media/MediaSessionService;->-$$Nest$mpushSession1Changed(Lcom/android/server/media/MediaSessionService;I)V
+HPLcom/android/server/media/MediaSessionService;->-$$Nest$misGlobalPriorityActiveLocked(Lcom/android/server/media/MediaSessionService;)Z+]Lcom/android/server/media/MediaSessionService;Lcom/android/server/media/MediaSessionService;
+HSPLcom/android/server/media/MediaSessionService;->-$$Nest$mpushSession1Changed(Lcom/android/server/media/MediaSessionService;I)V
 PLcom/android/server/media/MediaSessionService;->-$$Nest$mupdateActiveSessionListeners(Lcom/android/server/media/MediaSessionService;)V
 PLcom/android/server/media/MediaSessionService;->-$$Nest$sfgetLONG_PRESS_TIMEOUT()I
 PLcom/android/server/media/MediaSessionService;->-$$Nest$sfgetMULTI_TAP_TIMEOUT()I
 HSPLcom/android/server/media/MediaSessionService;-><clinit>()V
 HSPLcom/android/server/media/MediaSessionService;-><init>(Landroid/content/Context;)V
-HPLcom/android/server/media/MediaSessionService;->createSessionInternal(IIILjava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;Landroid/os/Bundle;)Lcom/android/server/media/MediaSessionRecord;
+HSPLcom/android/server/media/MediaSessionService;->createSessionInternal(IIILjava/lang/String;Landroid/media/session/ISessionCallback;Ljava/lang/String;Landroid/os/Bundle;)Lcom/android/server/media/MediaSessionRecord;
 HPLcom/android/server/media/MediaSessionService;->destroySessionLocked(Lcom/android/server/media/MediaSessionRecordImpl;)V
 PLcom/android/server/media/MediaSessionService;->dispatchVolumeKeyLongPressLocked(Landroid/view/KeyEvent;)V
-HSPLcom/android/server/media/MediaSessionService;->enforceMediaPermissions(Ljava/lang/String;III)V
+HSPLcom/android/server/media/MediaSessionService;->enforceMediaPermissions(Ljava/lang/String;III)V+]Lcom/android/server/media/MediaSessionService;Lcom/android/server/media/MediaSessionService;
 HSPLcom/android/server/media/MediaSessionService;->enforcePackageName(Ljava/lang/String;I)V
-PLcom/android/server/media/MediaSessionService;->enforcePhoneStatePermission(II)V
+HSPLcom/android/server/media/MediaSessionService;->enforcePhoneStatePermission(II)V
 PLcom/android/server/media/MediaSessionService;->enforceStatusBarServicePermission(Ljava/lang/String;II)V
 PLcom/android/server/media/MediaSessionService;->findIndexOfSession2TokensListenerLocked(Landroid/media/session/ISession2TokensListener;)I
 HSPLcom/android/server/media/MediaSessionService;->findIndexOfSessionsListenerLocked(Landroid/media/session/IActiveSessionsListener;)I
-HSPLcom/android/server/media/MediaSessionService;->getActiveSessionsLocked(I)Ljava/util/List;
+HSPLcom/android/server/media/MediaSessionService;->getActiveSessionsLocked(I)Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Lcom/android/server/media/MediaSessionRecord;Lcom/android/server/media/MediaSessionRecord;]Lcom/android/server/media/MediaSessionService;Lcom/android/server/media/MediaSessionService;]Lcom/android/server/media/MediaSessionStack;Lcom/android/server/media/MediaSessionStack;
 PLcom/android/server/media/MediaSessionService;->getCallingPackageName(I)Ljava/lang/String;
 HSPLcom/android/server/media/MediaSessionService;->getFullUserRecordLocked(I)Lcom/android/server/media/MediaSessionService$FullUserRecord;+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;
-PLcom/android/server/media/MediaSessionService;->getMediaSessionRecordLocked(Landroid/media/session/MediaSession$Token;)Lcom/android/server/media/MediaSessionRecord;
+HPLcom/android/server/media/MediaSessionService;->getMediaSessionRecordLocked(Landroid/media/session/MediaSession$Token;)Lcom/android/server/media/MediaSessionRecord;
 PLcom/android/server/media/MediaSessionService;->getSession2TokensLocked(I)Ljava/util/List;
 HPLcom/android/server/media/MediaSessionService;->hasEnabledNotificationListener(Ljava/lang/String;Landroid/os/UserHandle;I)Z
 HPLcom/android/server/media/MediaSessionService;->hasMediaControlPermission(II)Z
-HSPLcom/android/server/media/MediaSessionService;->hasStatusBarServicePermission(II)Z
+HSPLcom/android/server/media/MediaSessionService;->hasStatusBarServicePermission(II)Z+]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLcom/android/server/media/MediaSessionService;->instantiateCustomDispatcher(Ljava/lang/String;)V
 HSPLcom/android/server/media/MediaSessionService;->instantiateCustomProvider(Ljava/lang/String;)V
-HSPLcom/android/server/media/MediaSessionService;->isGlobalPriorityActiveLocked()Z
+HSPLcom/android/server/media/MediaSessionService;->isGlobalPriorityActiveLocked()Z+]Lcom/android/server/media/MediaSessionRecord;Lcom/android/server/media/MediaSessionRecord;
 HPLcom/android/server/media/MediaSessionService;->lambda$onStart$0(Landroid/media/AudioPlaybackConfiguration;Z)V
 HPLcom/android/server/media/MediaSessionService;->monitor()V
-PLcom/android/server/media/MediaSessionService;->notifyRemoteVolumeChanged(ILcom/android/server/media/MediaSessionRecord;)V
+HPLcom/android/server/media/MediaSessionService;->notifyRemoteVolumeChanged(ILcom/android/server/media/MediaSessionRecord;)V
 HSPLcom/android/server/media/MediaSessionService;->onBootPhase(I)V
 HPLcom/android/server/media/MediaSessionService;->onMediaButtonReceiverChanged(Lcom/android/server/media/MediaSessionRecordImpl;)V
 HPLcom/android/server/media/MediaSessionService;->onSessionActiveStateChanged(Lcom/android/server/media/MediaSessionRecordImpl;)V
-PLcom/android/server/media/MediaSessionService;->onSessionDied(Lcom/android/server/media/MediaSessionRecordImpl;)V
+HPLcom/android/server/media/MediaSessionService;->onSessionDied(Lcom/android/server/media/MediaSessionRecordImpl;)V
 HPLcom/android/server/media/MediaSessionService;->onSessionPlaybackStateChanged(Lcom/android/server/media/MediaSessionRecordImpl;Z)V+]Lcom/android/server/media/MediaSessionRecordImpl;Lcom/android/server/media/MediaSessionRecord;]Lcom/android/server/media/MediaSessionService;Lcom/android/server/media/MediaSessionService;]Lcom/android/server/media/MediaSessionStack;Lcom/android/server/media/MediaSessionStack;
 HPLcom/android/server/media/MediaSessionService;->onSessionPlaybackTypeChanged(Lcom/android/server/media/MediaSessionRecord;)V
 HSPLcom/android/server/media/MediaSessionService;->onStart()V
 HSPLcom/android/server/media/MediaSessionService;->onUserStarting(Lcom/android/server/SystemService$TargetUser;)V
 PLcom/android/server/media/MediaSessionService;->onUserStopped(Lcom/android/server/SystemService$TargetUser;)V
 PLcom/android/server/media/MediaSessionService;->onUserSwitching(Lcom/android/server/SystemService$TargetUser;Lcom/android/server/SystemService$TargetUser;)V
-HPLcom/android/server/media/MediaSessionService;->pushRemoteVolumeUpdateLocked(I)V
-HPLcom/android/server/media/MediaSessionService;->pushSession1Changed(I)V
+HSPLcom/android/server/media/MediaSessionService;->pushRemoteVolumeUpdateLocked(I)V
+HSPLcom/android/server/media/MediaSessionService;->pushSession1Changed(I)V+]Landroid/media/session/IActiveSessionsListener;Landroid/media/session/IActiveSessionsListener$Stub$Proxy;,Landroid/media/session/MediaSessionManager$SessionsChangedWrapper$1;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Lcom/android/server/media/MediaSessionRecord;Lcom/android/server/media/MediaSessionRecord;]Lcom/android/server/media/MediaSessionService;Lcom/android/server/media/MediaSessionService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 PLcom/android/server/media/MediaSessionService;->pushSession2Changed(I)V
-PLcom/android/server/media/MediaSessionService;->setGlobalPrioritySession(Lcom/android/server/media/MediaSessionRecord;)V
+HSPLcom/android/server/media/MediaSessionService;->setGlobalPrioritySession(Lcom/android/server/media/MediaSessionRecord;)V
 HPLcom/android/server/media/MediaSessionService;->tempAllowlistTargetPkgIfPossible(ILjava/lang/String;IILjava/lang/String;Ljava/lang/String;)V
 HPLcom/android/server/media/MediaSessionService;->updateActiveSessionListeners()V
 HSPLcom/android/server/media/MediaSessionService;->updateUser()V
 HSPLcom/android/server/media/MediaSessionStack;-><clinit>()V
 HSPLcom/android/server/media/MediaSessionStack;-><init>(Lcom/android/server/media/AudioPlayerStateMonitor;Lcom/android/server/media/MediaSessionStack$OnMediaButtonSessionChangedListener;)V
-HPLcom/android/server/media/MediaSessionStack;->addSession(Lcom/android/server/media/MediaSessionRecordImpl;)V
-HPLcom/android/server/media/MediaSessionStack;->clearCache(I)V
-HPLcom/android/server/media/MediaSessionStack;->contains(Lcom/android/server/media/MediaSessionRecordImpl;)Z
+HSPLcom/android/server/media/MediaSessionStack;->addSession(Lcom/android/server/media/MediaSessionRecordImpl;)V
+HSPLcom/android/server/media/MediaSessionStack;->clearCache(I)V
+HSPLcom/android/server/media/MediaSessionStack;->contains(Lcom/android/server/media/MediaSessionRecordImpl;)Z+]Ljava/util/List;Ljava/util/ArrayList;
 PLcom/android/server/media/MediaSessionStack;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HPLcom/android/server/media/MediaSessionStack;->findMediaButtonSession(I)Lcom/android/server/media/MediaSessionRecordImpl;+]Lcom/android/server/media/MediaSessionRecordImpl;Lcom/android/server/media/MediaSessionRecord;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/media/AudioPlayerStateMonitor;Lcom/android/server/media/AudioPlayerStateMonitor;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
-HSPLcom/android/server/media/MediaSessionStack;->getActiveSessions(I)Ljava/util/List;
+HSPLcom/android/server/media/MediaSessionStack;->getActiveSessions(I)Ljava/util/List;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/media/MediaSessionStack;->getCaller([Ljava/lang/StackTraceElement;I)Ljava/lang/String;
 PLcom/android/server/media/MediaSessionStack;->getCallers(I)Ljava/lang/String;
-HPLcom/android/server/media/MediaSessionStack;->getDefaultRemoteSession(I)Lcom/android/server/media/MediaSessionRecordImpl;
-HPLcom/android/server/media/MediaSessionStack;->getDefaultVolumeSession()Lcom/android/server/media/MediaSessionRecordImpl;
-PLcom/android/server/media/MediaSessionStack;->getMediaButtonSession()Lcom/android/server/media/MediaSessionRecordImpl;
+HSPLcom/android/server/media/MediaSessionStack;->getDefaultRemoteSession(I)Lcom/android/server/media/MediaSessionRecordImpl;+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/media/MediaSessionRecord;Lcom/android/server/media/MediaSessionRecord;]Lcom/android/server/media/MediaSessionStack;Lcom/android/server/media/MediaSessionStack;
+HPLcom/android/server/media/MediaSessionStack;->getDefaultVolumeSession()Lcom/android/server/media/MediaSessionRecordImpl;+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/media/MediaSessionStack;Lcom/android/server/media/MediaSessionStack;
+HPLcom/android/server/media/MediaSessionStack;->getMediaButtonSession()Lcom/android/server/media/MediaSessionRecordImpl;
 HPLcom/android/server/media/MediaSessionStack;->getMediaSessionRecord(Landroid/media/session/MediaSession$Token;)Lcom/android/server/media/MediaSessionRecord;
-HSPLcom/android/server/media/MediaSessionStack;->getPriorityList(ZI)Ljava/util/List;
+HSPLcom/android/server/media/MediaSessionStack;->getPriorityList(ZI)Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/media/MediaSessionRecord;Lcom/android/server/media/MediaSessionRecord;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 PLcom/android/server/media/MediaSessionStack;->getSession2Tokens(I)Ljava/util/List;
 HPLcom/android/server/media/MediaSessionStack;->onPlaybackStateChanged(Lcom/android/server/media/MediaSessionRecordImpl;Z)V+]Lcom/android/server/media/MediaSessionRecordImpl;Lcom/android/server/media/MediaSessionRecord;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/media/MediaSessionStack;Lcom/android/server/media/MediaSessionStack;
-PLcom/android/server/media/MediaSessionStack;->onSessionActiveStateChanged(Lcom/android/server/media/MediaSessionRecordImpl;)V
-HPLcom/android/server/media/MediaSessionStack;->removeSession(Lcom/android/server/media/MediaSessionRecordImpl;)V
+HPLcom/android/server/media/MediaSessionStack;->onSessionActiveStateChanged(Lcom/android/server/media/MediaSessionRecordImpl;)V
+HSPLcom/android/server/media/MediaSessionStack;->removeSession(Lcom/android/server/media/MediaSessionRecordImpl;)V
 HPLcom/android/server/media/MediaSessionStack;->updateMediaButtonSession(Lcom/android/server/media/MediaSessionRecordImpl;)V
 PLcom/android/server/media/MediaSessionStack;->updateMediaButtonSessionBySessionPolicyChange(Lcom/android/server/media/MediaSessionRecord;)V
-HPLcom/android/server/media/MediaSessionStack;->updateMediaButtonSessionIfNeeded()V+]Lcom/android/server/media/MediaSessionRecordImpl;Lcom/android/server/media/MediaSessionRecord;]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/media/AudioPlayerStateMonitor;Lcom/android/server/media/AudioPlayerStateMonitor;]Lcom/android/server/media/MediaSessionStack;Lcom/android/server/media/MediaSessionStack;
+HSPLcom/android/server/media/MediaSessionStack;->updateMediaButtonSessionIfNeeded()V+]Lcom/android/server/media/MediaSessionRecordImpl;Lcom/android/server/media/MediaSessionRecord;]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/media/AudioPlayerStateMonitor;Lcom/android/server/media/AudioPlayerStateMonitor;]Lcom/android/server/media/MediaSessionStack;Lcom/android/server/media/MediaSessionStack;
 PLcom/android/server/media/MediaShellCommand$ControllerCallback;-><init>(Lcom/android/server/media/MediaShellCommand;)V
 PLcom/android/server/media/MediaShellCommand$ControllerCallback;->onExtrasChanged(Landroid/os/Bundle;)V
 PLcom/android/server/media/MediaShellCommand$ControllerCallback;->onMetadataChanged(Landroid/media/MediaMetadata;)V
@@ -30803,9 +32011,12 @@
 PLcom/android/server/media/RemoteDisplayProviderProxy$1;->run()V
 PLcom/android/server/media/RemoteDisplayProviderProxy$Connection$1;-><init>(Lcom/android/server/media/RemoteDisplayProviderProxy$Connection;)V
 PLcom/android/server/media/RemoteDisplayProviderProxy$Connection$1;->run()V
+PLcom/android/server/media/RemoteDisplayProviderProxy$Connection$2;-><init>(Lcom/android/server/media/RemoteDisplayProviderProxy$Connection;)V
+PLcom/android/server/media/RemoteDisplayProviderProxy$Connection$2;->run()V
 PLcom/android/server/media/RemoteDisplayProviderProxy$Connection$3;-><init>(Lcom/android/server/media/RemoteDisplayProviderProxy$Connection;Landroid/media/RemoteDisplayState;)V
 PLcom/android/server/media/RemoteDisplayProviderProxy$Connection$3;->run()V
 PLcom/android/server/media/RemoteDisplayProviderProxy$Connection;-><init>(Lcom/android/server/media/RemoteDisplayProviderProxy;Landroid/media/IRemoteDisplayProvider;)V
+PLcom/android/server/media/RemoteDisplayProviderProxy$Connection;->binderDied()V
 PLcom/android/server/media/RemoteDisplayProviderProxy$Connection;->connect(Ljava/lang/String;)V
 PLcom/android/server/media/RemoteDisplayProviderProxy$Connection;->disconnect(Ljava/lang/String;)V
 PLcom/android/server/media/RemoteDisplayProviderProxy$Connection;->dispose()V
@@ -30819,6 +32030,7 @@
 PLcom/android/server/media/RemoteDisplayProviderProxy;->-$$Nest$fgetmDisplayStateCallback(Lcom/android/server/media/RemoteDisplayProviderProxy;)Lcom/android/server/media/RemoteDisplayProviderProxy$Callback;
 PLcom/android/server/media/RemoteDisplayProviderProxy;->-$$Nest$fgetmHandler(Lcom/android/server/media/RemoteDisplayProviderProxy;)Landroid/os/Handler;
 PLcom/android/server/media/RemoteDisplayProviderProxy;->-$$Nest$fputmScheduledDisplayStateChangedCallback(Lcom/android/server/media/RemoteDisplayProviderProxy;Z)V
+PLcom/android/server/media/RemoteDisplayProviderProxy;->-$$Nest$monConnectionDied(Lcom/android/server/media/RemoteDisplayProviderProxy;Lcom/android/server/media/RemoteDisplayProviderProxy$Connection;)V
 PLcom/android/server/media/RemoteDisplayProviderProxy;->-$$Nest$monConnectionReady(Lcom/android/server/media/RemoteDisplayProviderProxy;Lcom/android/server/media/RemoteDisplayProviderProxy$Connection;)V
 PLcom/android/server/media/RemoteDisplayProviderProxy;->-$$Nest$monDisplayStateChanged(Lcom/android/server/media/RemoteDisplayProviderProxy;Lcom/android/server/media/RemoteDisplayProviderProxy$Connection;Landroid/media/RemoteDisplayState;)V
 PLcom/android/server/media/RemoteDisplayProviderProxy;-><clinit>()V
@@ -30833,6 +32045,7 @@
 PLcom/android/server/media/RemoteDisplayProviderProxy;->onConnectionReady(Lcom/android/server/media/RemoteDisplayProviderProxy$Connection;)V
 PLcom/android/server/media/RemoteDisplayProviderProxy;->onDisplayStateChanged(Lcom/android/server/media/RemoteDisplayProviderProxy$Connection;Landroid/media/RemoteDisplayState;)V
 PLcom/android/server/media/RemoteDisplayProviderProxy;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/media/RemoteDisplayProviderProxy;->onServiceDisconnected(Landroid/content/ComponentName;)V
 HPLcom/android/server/media/RemoteDisplayProviderProxy;->rebindIfDisconnected()V
 PLcom/android/server/media/RemoteDisplayProviderProxy;->setCallback(Lcom/android/server/media/RemoteDisplayProviderProxy$Callback;)V
 PLcom/android/server/media/RemoteDisplayProviderProxy;->setDiscoveryMode(I)V
@@ -30847,15 +32060,15 @@
 HSPLcom/android/server/media/RemoteDisplayProviderWatcher$1;-><init>(Lcom/android/server/media/RemoteDisplayProviderWatcher;)V
 HPLcom/android/server/media/RemoteDisplayProviderWatcher$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/media/RemoteDisplayProviderWatcher$2;-><init>(Lcom/android/server/media/RemoteDisplayProviderWatcher;)V
-PLcom/android/server/media/RemoteDisplayProviderWatcher$2;->run()V
-HPLcom/android/server/media/RemoteDisplayProviderWatcher;->-$$Nest$mscanPackages(Lcom/android/server/media/RemoteDisplayProviderWatcher;)V
+HSPLcom/android/server/media/RemoteDisplayProviderWatcher$2;->run()V
+HSPLcom/android/server/media/RemoteDisplayProviderWatcher;->-$$Nest$mscanPackages(Lcom/android/server/media/RemoteDisplayProviderWatcher;)V
 HPLcom/android/server/media/RemoteDisplayProviderWatcher;->-$$Nest$sfgetDEBUG()Z
 HSPLcom/android/server/media/RemoteDisplayProviderWatcher;-><clinit>()V
 HSPLcom/android/server/media/RemoteDisplayProviderWatcher;-><init>(Landroid/content/Context;Lcom/android/server/media/RemoteDisplayProviderWatcher$Callback;Landroid/os/Handler;I)V
 PLcom/android/server/media/RemoteDisplayProviderWatcher;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HPLcom/android/server/media/RemoteDisplayProviderWatcher;->findProvider(Ljava/lang/String;Ljava/lang/String;)I
-HPLcom/android/server/media/RemoteDisplayProviderWatcher;->scanPackages()V+]Lcom/android/server/media/RemoteDisplayProviderProxy;Lcom/android/server/media/RemoteDisplayProviderProxy;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/media/RemoteDisplayProviderWatcher;Lcom/android/server/media/RemoteDisplayProviderWatcher;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
-PLcom/android/server/media/RemoteDisplayProviderWatcher;->start()V
+HSPLcom/android/server/media/RemoteDisplayProviderWatcher;->scanPackages()V+]Lcom/android/server/media/RemoteDisplayProviderProxy;Lcom/android/server/media/RemoteDisplayProviderProxy;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/media/RemoteDisplayProviderWatcher;Lcom/android/server/media/RemoteDisplayProviderWatcher;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HSPLcom/android/server/media/RemoteDisplayProviderWatcher;->start()V
 PLcom/android/server/media/RemoteDisplayProviderWatcher;->stop()V
 HPLcom/android/server/media/RemoteDisplayProviderWatcher;->verifyServiceTrusted(Landroid/content/pm/ServiceInfo;)Z+]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
 PLcom/android/server/media/SystemMediaRoute2Provider$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/media/SystemMediaRoute2Provider;)V
@@ -30864,45 +32077,46 @@
 PLcom/android/server/media/SystemMediaRoute2Provider$$ExternalSyntheticLambda1;->run()V
 HSPLcom/android/server/media/SystemMediaRoute2Provider$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/media/SystemMediaRoute2Provider;)V
 PLcom/android/server/media/SystemMediaRoute2Provider$$ExternalSyntheticLambda2;->onBluetoothRoutesUpdated(Ljava/util/List;)V
-PLcom/android/server/media/SystemMediaRoute2Provider$1$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/media/SystemMediaRoute2Provider$1;Landroid/media/AudioRoutesInfo;)V
+HSPLcom/android/server/media/SystemMediaRoute2Provider$1$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/media/SystemMediaRoute2Provider$1;Landroid/media/AudioRoutesInfo;)V
 PLcom/android/server/media/SystemMediaRoute2Provider$1$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/media/SystemMediaRoute2Provider$1;->$r8$lambda$Pc97wanh5631qf9TDXi0qvXq6tA(Lcom/android/server/media/SystemMediaRoute2Provider$1;Landroid/media/AudioRoutesInfo;)V
 HSPLcom/android/server/media/SystemMediaRoute2Provider$1;-><init>(Lcom/android/server/media/SystemMediaRoute2Provider;)V
-PLcom/android/server/media/SystemMediaRoute2Provider$1;->dispatchAudioRoutesChanged(Landroid/media/AudioRoutesInfo;)V
-PLcom/android/server/media/SystemMediaRoute2Provider$1;->lambda$dispatchAudioRoutesChanged$0(Landroid/media/AudioRoutesInfo;)V
+HSPLcom/android/server/media/SystemMediaRoute2Provider$1;->dispatchAudioRoutesChanged(Landroid/media/AudioRoutesInfo;)V
+HPLcom/android/server/media/SystemMediaRoute2Provider$1;->lambda$dispatchAudioRoutesChanged$0(Landroid/media/AudioRoutesInfo;)V
 HSPLcom/android/server/media/SystemMediaRoute2Provider$AudioManagerBroadcastReceiver;-><init>(Lcom/android/server/media/SystemMediaRoute2Provider;)V
 HSPLcom/android/server/media/SystemMediaRoute2Provider$AudioManagerBroadcastReceiver;-><init>(Lcom/android/server/media/SystemMediaRoute2Provider;Lcom/android/server/media/SystemMediaRoute2Provider$AudioManagerBroadcastReceiver-IA;)V
 HPLcom/android/server/media/SystemMediaRoute2Provider$AudioManagerBroadcastReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/media/SystemMediaRoute2Provider$SessionCreationRequest;-><init>(JLjava/lang/String;)V
 PLcom/android/server/media/SystemMediaRoute2Provider;->$r8$lambda$3bFh87hsVMVGosnP8cbAGJna2BE(Lcom/android/server/media/SystemMediaRoute2Provider;)V
 PLcom/android/server/media/SystemMediaRoute2Provider;->$r8$lambda$8H6wTd2ETFzeGdNGYmuUlZjQbtI(Lcom/android/server/media/SystemMediaRoute2Provider;)V
 PLcom/android/server/media/SystemMediaRoute2Provider;->$r8$lambda$Fgo_GpH1Df_nFCSwLZNdqWvxjg8(Lcom/android/server/media/SystemMediaRoute2Provider;Ljava/util/List;)V
-PLcom/android/server/media/SystemMediaRoute2Provider;->-$$Nest$fgetmHandler(Lcom/android/server/media/SystemMediaRoute2Provider;)Landroid/os/Handler;
+HSPLcom/android/server/media/SystemMediaRoute2Provider;->-$$Nest$fgetmHandler(Lcom/android/server/media/SystemMediaRoute2Provider;)Landroid/os/Handler;
 PLcom/android/server/media/SystemMediaRoute2Provider;->-$$Nest$mupdateDeviceRoute(Lcom/android/server/media/SystemMediaRoute2Provider;Landroid/media/AudioRoutesInfo;)V
 HSPLcom/android/server/media/SystemMediaRoute2Provider;-><clinit>()V
 HSPLcom/android/server/media/SystemMediaRoute2Provider;-><init>(Landroid/content/Context;Landroid/os/UserHandle;)V
 HPLcom/android/server/media/SystemMediaRoute2Provider;->generateDeviceRouteSelectedSessionInfo(Ljava/lang/String;)Landroid/media/RoutingSessionInfo;
-PLcom/android/server/media/SystemMediaRoute2Provider;->getDefaultRoute()Landroid/media/MediaRoute2Info;
-PLcom/android/server/media/SystemMediaRoute2Provider;->getDefaultSessionInfo()Landroid/media/RoutingSessionInfo;
+HSPLcom/android/server/media/SystemMediaRoute2Provider;->getDefaultRoute()Landroid/media/MediaRoute2Info;
+HSPLcom/android/server/media/SystemMediaRoute2Provider;->getDefaultSessionInfo()Landroid/media/RoutingSessionInfo;
 PLcom/android/server/media/SystemMediaRoute2Provider;->lambda$new$0(Ljava/util/List;)V
 PLcom/android/server/media/SystemMediaRoute2Provider;->lambda$start$1()V
 PLcom/android/server/media/SystemMediaRoute2Provider;->lambda$stop$2()V
 HSPLcom/android/server/media/SystemMediaRoute2Provider;->notifySessionInfoUpdated()V
 PLcom/android/server/media/SystemMediaRoute2Provider;->prepareReleaseSession(Ljava/lang/String;)V
-PLcom/android/server/media/SystemMediaRoute2Provider;->publishProviderState()V
+HSPLcom/android/server/media/SystemMediaRoute2Provider;->publishProviderState()V
 PLcom/android/server/media/SystemMediaRoute2Provider;->releaseSession(JLjava/lang/String;)V
 PLcom/android/server/media/SystemMediaRoute2Provider;->requestCreateSession(JLjava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)V
 PLcom/android/server/media/SystemMediaRoute2Provider;->selectRoute(JLjava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/media/SystemMediaRoute2Provider;->setCallback(Lcom/android/server/media/MediaRoute2Provider$Callback;)V
 PLcom/android/server/media/SystemMediaRoute2Provider;->setRouteVolume(JLjava/lang/String;I)V
 PLcom/android/server/media/SystemMediaRoute2Provider;->setSessionVolume(JLjava/lang/String;I)V
-PLcom/android/server/media/SystemMediaRoute2Provider;->start()V
+HSPLcom/android/server/media/SystemMediaRoute2Provider;->start()V
 PLcom/android/server/media/SystemMediaRoute2Provider;->stop()V
 PLcom/android/server/media/SystemMediaRoute2Provider;->transferToRoute(JLjava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/media/SystemMediaRoute2Provider;->updateDeviceRoute(Landroid/media/AudioRoutesInfo;)V
 PLcom/android/server/media/SystemMediaRoute2Provider;->updateDiscoveryPreference(Landroid/media/RouteDiscoveryPreference;)V
 HSPLcom/android/server/media/SystemMediaRoute2Provider;->updateProviderState()V
 HSPLcom/android/server/media/SystemMediaRoute2Provider;->updateSessionInfosIfNeeded()Z
-HPLcom/android/server/media/SystemMediaRoute2Provider;->updateVolume()V
+HSPLcom/android/server/media/SystemMediaRoute2Provider;->updateVolume()V
 PLcom/android/server/media/VolumeCtrl;-><clinit>()V
 HSPLcom/android/server/media/metrics/MediaMetricsManagerService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/media/metrics/MediaMetricsManagerService;)V
 PLcom/android/server/media/metrics/MediaMetricsManagerService$$ExternalSyntheticLambda0;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
@@ -30915,7 +32129,7 @@
 HPLcom/android/server/media/metrics/MediaMetricsManagerService$BinderService;->inList([Ljava/lang/String;Ljava/util/List;)Z+]Ljava/util/List;Ljava/util/Arrays$ArrayList;]Ljava/util/Iterator;Ljava/util/Arrays$ArrayItr;
 PLcom/android/server/media/metrics/MediaMetricsManagerService$BinderService;->listNameToLoggingLevel(Ljava/lang/String;)I
 HPLcom/android/server/media/metrics/MediaMetricsManagerService$BinderService;->loggingLevel()I
-PLcom/android/server/media/metrics/MediaMetricsManagerService$BinderService;->loggingLevelInternal([Ljava/lang/String;Ljava/util/List;Ljava/lang/String;)Ljava/lang/Integer;
+HPLcom/android/server/media/metrics/MediaMetricsManagerService$BinderService;->loggingLevelInternal([Ljava/lang/String;Ljava/util/List;Ljava/lang/String;)Ljava/lang/Integer;
 PLcom/android/server/media/metrics/MediaMetricsManagerService$BinderService;->releaseSessionId(Ljava/lang/String;I)V
 HPLcom/android/server/media/metrics/MediaMetricsManagerService$BinderService;->reportNetworkEvent(Ljava/lang/String;Landroid/media/metrics/NetworkEvent;I)V
 PLcom/android/server/media/metrics/MediaMetricsManagerService$BinderService;->reportPlaybackErrorEvent(Ljava/lang/String;Landroid/media/metrics/PlaybackErrorEvent;I)V
@@ -30923,7 +32137,7 @@
 HPLcom/android/server/media/metrics/MediaMetricsManagerService$BinderService;->reportPlaybackStateEvent(Ljava/lang/String;Landroid/media/metrics/PlaybackStateEvent;I)V
 HPLcom/android/server/media/metrics/MediaMetricsManagerService$BinderService;->reportTrackChangeEvent(Ljava/lang/String;Landroid/media/metrics/TrackChangeEvent;I)V
 PLcom/android/server/media/metrics/MediaMetricsManagerService;->$r8$lambda$BR72rjORkunkbzOdTqo-EQhjEJY(Lcom/android/server/media/metrics/MediaMetricsManagerService;Landroid/provider/DeviceConfig$Properties;)V
-PLcom/android/server/media/metrics/MediaMetricsManagerService;->-$$Nest$fgetmBlockList(Lcom/android/server/media/metrics/MediaMetricsManagerService;)Ljava/util/List;
+HPLcom/android/server/media/metrics/MediaMetricsManagerService;->-$$Nest$fgetmBlockList(Lcom/android/server/media/metrics/MediaMetricsManagerService;)Ljava/util/List;
 HPLcom/android/server/media/metrics/MediaMetricsManagerService;->-$$Nest$fgetmLock(Lcom/android/server/media/metrics/MediaMetricsManagerService;)Ljava/lang/Object;
 HPLcom/android/server/media/metrics/MediaMetricsManagerService;->-$$Nest$fgetmMode(Lcom/android/server/media/metrics/MediaMetricsManagerService;)Ljava/lang/Integer;
 PLcom/android/server/media/metrics/MediaMetricsManagerService;->-$$Nest$fgetmNoUidBlocklist(Lcom/android/server/media/metrics/MediaMetricsManagerService;)Ljava/util/List;
@@ -30939,7 +32153,7 @@
 HSPLcom/android/server/media/metrics/MediaMetricsManagerService;->onStart()V
 PLcom/android/server/media/metrics/MediaMetricsManagerService;->updateConfigs(Landroid/provider/DeviceConfig$Properties;)V
 HSPLcom/android/server/media/projection/MediaProjectionManagerService$1;-><init>(Lcom/android/server/media/projection/MediaProjectionManagerService;)V
-PLcom/android/server/media/projection/MediaProjectionManagerService$1;->onForegroundActivitiesChanged(IIZ)V
+HSPLcom/android/server/media/projection/MediaProjectionManagerService$1;->onForegroundActivitiesChanged(IIZ)V
 PLcom/android/server/media/projection/MediaProjectionManagerService$1;->onForegroundServicesChanged(III)V
 HSPLcom/android/server/media/projection/MediaProjectionManagerService$1;->onProcessDied(II)V
 PLcom/android/server/media/projection/MediaProjectionManagerService$2;-><init>(Lcom/android/server/media/projection/MediaProjectionManagerService;Landroid/media/projection/IMediaProjectionWatcherCallback;)V
@@ -30972,6 +32186,7 @@
 PLcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;->canProjectAudio()Z
 PLcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;->canProjectSecureVideo()Z
 PLcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;->canProjectVideo()Z
+PLcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;->getProjectionInfo()Landroid/media/projection/MediaProjectionInfo;
 PLcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;->getTaskRecordingWindowContainerToken()Landroid/window/WindowContainerToken;
 PLcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;->registerCallback(Landroid/media/projection/IMediaProjectionCallback;)V
@@ -31016,6 +32231,7 @@
 PLcom/android/server/media/projection/MediaProjectionManagerService;->removeCallback(Landroid/media/projection/IMediaProjectionWatcherCallback;)V
 PLcom/android/server/media/projection/MediaProjectionManagerService;->startProjectionLocked(Lcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;)V
 PLcom/android/server/media/projection/MediaProjectionManagerService;->stopProjectionLocked(Lcom/android/server/media/projection/MediaProjectionManagerService$MediaProjection;)V
+PLcom/android/server/media/projection/MediaProjectionManagerService;->typeToString(I)Ljava/lang/String;
 PLcom/android/server/media/projection/MediaProjectionManagerService;->unlinkDeathRecipientLocked(Landroid/media/projection/IMediaProjectionWatcherCallback;)V
 HSPLcom/android/server/midi/MidiService$1;-><init>(Lcom/android/server/midi/MidiService;)V
 PLcom/android/server/midi/MidiService$1;->onPackageAdded(Ljava/lang/String;I)V
@@ -31104,6 +32320,7 @@
 PLcom/android/server/midi/MidiService;->hasNonMidiUuids(Landroid/bluetooth/BluetoothDevice;)Z
 HPLcom/android/server/midi/MidiService;->isBLEMIDIDevice(Landroid/bluetooth/BluetoothDevice;)Z
 PLcom/android/server/midi/MidiService;->isBleTransport(Landroid/content/Intent;)Z
+PLcom/android/server/midi/MidiService;->isUsbMidiDeviceInUseLocked(Landroid/media/midi/MidiDeviceInfo;)Z
 PLcom/android/server/midi/MidiService;->notifyDeviceStatusChanged(Lcom/android/server/midi/MidiService$Device;Landroid/media/midi/MidiDeviceStatus;)V
 PLcom/android/server/midi/MidiService;->onUnlockUser()V
 HPLcom/android/server/midi/MidiService;->openBluetoothDevice(Landroid/bluetooth/BluetoothDevice;)V
@@ -31179,8 +32396,8 @@
 HSPLcom/android/server/net/NetworkPolicyLogger$Data;->reset()V
 HSPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;-><clinit>()V
 HSPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;-><init>(I)V
-HPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->appIdleStateChanged(IZ)V
-HPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->appIdleWlChanged(IZ)V
+HSPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->appIdleStateChanged(IZ)V
+HPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->appIdleWlChanged(IZ)V+]Lcom/android/server/net/NetworkPolicyLogger$Data;Lcom/android/server/net/NetworkPolicyLogger$Data;]Lcom/android/internal/util/RingBuffer;Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;
 HPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->deviceIdleModeEnabled(Z)V
 HSPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->event(Ljava/lang/String;)V
 HSPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->firewallChainEnabled(IZ)V
@@ -31189,12 +32406,12 @@
 HSPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->meteredAllowlistChanged(IZ)V+]Lcom/android/server/net/NetworkPolicyLogger$Data;Lcom/android/server/net/NetworkPolicyLogger$Data;]Lcom/android/internal/util/RingBuffer;Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;
 HPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->meteredDenylistChanged(IZ)V
 HPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->meterednessChanged(IZ)V
-HPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->networkBlocked(IIII)V+]Lcom/android/server/net/NetworkPolicyLogger$Data;Lcom/android/server/net/NetworkPolicyLogger$Data;]Lcom/android/internal/util/RingBuffer;Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;
-PLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->paroleStateChanged(Z)V
+HSPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->networkBlocked(IIII)V+]Lcom/android/server/net/NetworkPolicyLogger$Data;Lcom/android/server/net/NetworkPolicyLogger$Data;]Lcom/android/internal/util/RingBuffer;Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;
+HPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->paroleStateChanged(Z)V
 PLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->restrictBackgroundChanged(ZZ)V
 HPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->reverseDump(Lcom/android/internal/util/IndentingPrintWriter;)V
-HPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->tempPowerSaveWlChanged(IZILjava/lang/String;)V
-HPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->uidFirewallRuleChanged(III)V+]Lcom/android/server/net/NetworkPolicyLogger$Data;Lcom/android/server/net/NetworkPolicyLogger$Data;]Lcom/android/internal/util/RingBuffer;Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;
+HSPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->tempPowerSaveWlChanged(IZILjava/lang/String;)V+]Lcom/android/server/net/NetworkPolicyLogger$Data;Lcom/android/server/net/NetworkPolicyLogger$Data;]Lcom/android/internal/util/RingBuffer;Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;
+HSPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->uidFirewallRuleChanged(III)V+]Lcom/android/server/net/NetworkPolicyLogger$Data;Lcom/android/server/net/NetworkPolicyLogger$Data;]Lcom/android/internal/util/RingBuffer;Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;
 PLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->uidPolicyChanged(III)V
 HSPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->uidStateChanged(IIJI)V+]Lcom/android/server/net/NetworkPolicyLogger$Data;Lcom/android/server/net/NetworkPolicyLogger$Data;]Lcom/android/internal/util/RingBuffer;Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;
 HPLcom/android/server/net/NetworkPolicyLogger$LogBuffer;->userRemoved(I)V+]Lcom/android/server/net/NetworkPolicyLogger$Data;Lcom/android/server/net/NetworkPolicyLogger$Data;]Lcom/android/internal/util/RingBuffer;Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;
@@ -31203,6 +32420,7 @@
 PLcom/android/server/net/NetworkPolicyLogger;->-$$Nest$smgetDeviceIdleModeEnabled(Z)Ljava/lang/String;
 HPLcom/android/server/net/NetworkPolicyLogger;->-$$Nest$smgetFirewallChainEnabledLog(IZ)Ljava/lang/String;
 HPLcom/android/server/net/NetworkPolicyLogger;->-$$Nest$smgetMeteredAllowlistChangedLog(IZ)Ljava/lang/String;
+PLcom/android/server/net/NetworkPolicyLogger;->-$$Nest$smgetMeteredDenylistChangedLog(IZ)Ljava/lang/String;
 HPLcom/android/server/net/NetworkPolicyLogger;->-$$Nest$smgetMeterednessChangedLog(IZ)Ljava/lang/String;
 PLcom/android/server/net/NetworkPolicyLogger;->-$$Nest$smgetParoleStateChanged(Z)Ljava/lang/String;
 PLcom/android/server/net/NetworkPolicyLogger;->-$$Nest$smgetPolicyChangedLog(III)Ljava/lang/String;
@@ -31212,8 +32430,8 @@
 PLcom/android/server/net/NetworkPolicyLogger;->-$$Nest$smgetUserRemovedLog(I)Ljava/lang/String;
 HSPLcom/android/server/net/NetworkPolicyLogger;-><clinit>()V
 HSPLcom/android/server/net/NetworkPolicyLogger;-><init>()V
-HPLcom/android/server/net/NetworkPolicyLogger;->appIdleStateChanged(IZ)V
-HPLcom/android/server/net/NetworkPolicyLogger;->appIdleWlChanged(IZ)V
+HSPLcom/android/server/net/NetworkPolicyLogger;->appIdleStateChanged(IZ)V
+HPLcom/android/server/net/NetworkPolicyLogger;->appIdleWlChanged(IZ)V+]Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;
 HPLcom/android/server/net/NetworkPolicyLogger;->deviceIdleModeEnabled(Z)V
 PLcom/android/server/net/NetworkPolicyLogger;->dumpLogs(Lcom/android/internal/util/IndentingPrintWriter;)V
 HSPLcom/android/server/net/NetworkPolicyLogger;->firewallChainEnabled(IZ)V
@@ -31237,13 +32455,13 @@
 PLcom/android/server/net/NetworkPolicyLogger;->meteredDenylistChanged(IZ)V
 HSPLcom/android/server/net/NetworkPolicyLogger;->meteredRestrictedPkgsChanged(Ljava/util/Set;)V
 PLcom/android/server/net/NetworkPolicyLogger;->meterednessChanged(IZ)V
-HPLcom/android/server/net/NetworkPolicyLogger;->networkBlocked(ILcom/android/server/net/NetworkPolicyManagerService$UidBlockedState;)V+]Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;
+HSPLcom/android/server/net/NetworkPolicyLogger;->networkBlocked(ILcom/android/server/net/NetworkPolicyManagerService$UidBlockedState;)V+]Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;
 PLcom/android/server/net/NetworkPolicyLogger;->paroleStateChanged(Z)V
 PLcom/android/server/net/NetworkPolicyLogger;->removingUserState(I)V
 PLcom/android/server/net/NetworkPolicyLogger;->restrictBackgroundChanged(ZZ)V
 HPLcom/android/server/net/NetworkPolicyLogger;->setDebugUid(I)V
-HPLcom/android/server/net/NetworkPolicyLogger;->tempPowerSaveWlChanged(IZILjava/lang/String;)V
-HPLcom/android/server/net/NetworkPolicyLogger;->uidFirewallRuleChanged(III)V+]Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;
+HSPLcom/android/server/net/NetworkPolicyLogger;->tempPowerSaveWlChanged(IZILjava/lang/String;)V+]Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;
+HSPLcom/android/server/net/NetworkPolicyLogger;->uidFirewallRuleChanged(III)V+]Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;
 PLcom/android/server/net/NetworkPolicyLogger;->uidPolicyChanged(III)V
 HSPLcom/android/server/net/NetworkPolicyLogger;->uidStateChanged(IIJI)V+]Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;Lcom/android/server/net/NetworkPolicyLogger$LogBuffer;
 HSPLcom/android/server/net/NetworkPolicyManagerInternal;-><init>()V
@@ -31277,9 +32495,9 @@
 HSPLcom/android/server/net/NetworkPolicyManagerService$13;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
 PLcom/android/server/net/NetworkPolicyManagerService$13;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$14;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
-PLcom/android/server/net/NetworkPolicyManagerService$14;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/net/NetworkPolicyManagerService$14;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$15;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
-HSPLcom/android/server/net/NetworkPolicyManagerService$15;->handleMessage(Landroid/os/Message;)Z+]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/lang/Long;Ljava/lang/Long;]Landroid/app/usage/NetworkStatsManager;Landroid/app/usage/NetworkStatsManager;]Lcom/android/internal/os/SomeArgs;Lcom/android/internal/os/SomeArgs;]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;]Ljava/lang/Boolean;Ljava/lang/Boolean;
+HSPLcom/android/server/net/NetworkPolicyManagerService$15;->handleMessage(Landroid/os/Message;)Z+]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/lang/Long;Ljava/lang/Long;]Lcom/android/internal/os/SomeArgs;Lcom/android/internal/os/SomeArgs;]Landroid/app/usage/NetworkStatsManager;Landroid/app/usage/NetworkStatsManager;]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;]Ljava/lang/Boolean;Ljava/lang/Boolean;
 HSPLcom/android/server/net/NetworkPolicyManagerService$16;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$16;->handleMessage(Landroid/os/Message;)Z+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;
 HSPLcom/android/server/net/NetworkPolicyManagerService$1;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
@@ -31289,11 +32507,11 @@
 PLcom/android/server/net/NetworkPolicyManagerService$2;->getServiceType()I
 HPLcom/android/server/net/NetworkPolicyManagerService$2;->onLowPowerModeChanged(Landroid/os/PowerSaveState;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$3;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
-HPLcom/android/server/net/NetworkPolicyManagerService$3;->onSubscriptionsChanged()V
+HSPLcom/android/server/net/NetworkPolicyManagerService$3;->onSubscriptionsChanged()V
 HSPLcom/android/server/net/NetworkPolicyManagerService$4;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
 PLcom/android/server/net/NetworkPolicyManagerService$4;->onUidActive(I)V
 PLcom/android/server/net/NetworkPolicyManagerService$4;->onUidCachedChanged(IZ)V
-HSPLcom/android/server/net/NetworkPolicyManagerService$4;->onUidGone(IZ)V
+HSPLcom/android/server/net/NetworkPolicyManagerService$4;->onUidGone(IZ)V+]Landroid/os/Handler;Landroid/os/Handler;]Landroid/os/Message;Landroid/os/Message;
 PLcom/android/server/net/NetworkPolicyManagerService$4;->onUidIdle(IZ)V
 PLcom/android/server/net/NetworkPolicyManagerService$4;->onUidProcAdjChanged(I)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$4;->onUidStateChanged(IIJI)V+]Landroid/os/Handler;Landroid/os/Handler;]Landroid/os/Message;Landroid/os/Message;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/net/NetworkPolicyManagerService$UidStateCallbackInfo;Lcom/android/server/net/NetworkPolicyManagerService$UidStateCallbackInfo;
@@ -31308,14 +32526,14 @@
 HSPLcom/android/server/net/NetworkPolicyManagerService$9;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
 PLcom/android/server/net/NetworkPolicyManagerService$9;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$Dependencies;-><init>(Landroid/content/Context;)V
-HPLcom/android/server/net/NetworkPolicyManagerService$Dependencies;->getNetworkTotalBytes(Landroid/net/NetworkTemplate;JJ)J
+HPLcom/android/server/net/NetworkPolicyManagerService$Dependencies;->getNetworkTotalBytes(Landroid/net/NetworkTemplate;JJ)J+]Landroid/app/usage/NetworkStatsManager;Landroid/app/usage/NetworkStatsManager;]Landroid/app/usage/NetworkStats$Bucket;Landroid/app/usage/NetworkStats$Bucket;
 PLcom/android/server/net/NetworkPolicyManagerService$Dependencies;->getNetworkUidBytes(Landroid/net/NetworkTemplate;JJ)Ljava/util/List;
 HPLcom/android/server/net/NetworkPolicyManagerService$IfaceQuotas;-><init>(Ljava/lang/String;JJ)V
 HPLcom/android/server/net/NetworkPolicyManagerService$IfaceQuotas;-><init>(Ljava/lang/String;JJLcom/android/server/net/NetworkPolicyManagerService$IfaceQuotas-IA;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$NetPolicyAppIdleStateChangeListener;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$NetPolicyAppIdleStateChangeListener;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService$NetPolicyAppIdleStateChangeListener-IA;)V
-HPLcom/android/server/net/NetworkPolicyManagerService$NetPolicyAppIdleStateChangeListener;->onAppIdleStateChanged(Ljava/lang/String;IZII)V
-PLcom/android/server/net/NetworkPolicyManagerService$NetPolicyAppIdleStateChangeListener;->onParoleStateChanged(Z)V
+HSPLcom/android/server/net/NetworkPolicyManagerService$NetPolicyAppIdleStateChangeListener;->onAppIdleStateChanged(Ljava/lang/String;IZII)V
+HPLcom/android/server/net/NetworkPolicyManagerService$NetPolicyAppIdleStateChangeListener;->onParoleStateChanged(Z)V
 HPLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;)V
 PLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;->$r8$lambda$oqltMStSEW9VswJlTI3idMOgEuc(Lcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;I)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
@@ -31323,7 +32541,7 @@
 HPLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;->getSubscriptionOpportunisticQuota(Landroid/net/Network;I)J+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;
 HPLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;->lambda$setLowPowerStandbyActive$0(I)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;->onAdminDataAvailable()V
-HSPLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;->onTempPowerSaveWhitelistChange(IZILjava/lang/String;)V
+HSPLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;->onTempPowerSaveWhitelistChange(IZILjava/lang/String;)V+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/net/NetworkPolicyLogger;Lcom/android/server/net/NetworkPolicyLogger;
 HPLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;->setAppIdleWhitelist(IZ)V
 PLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;->setLowPowerStandbyActive(Z)V
 PLcom/android/server/net/NetworkPolicyManagerService$NetworkPolicyManagerInternalImpl;->setLowPowerStandbyAllowlist([I)V
@@ -31334,7 +32552,7 @@
 HPLcom/android/server/net/NetworkPolicyManagerService$NotificationId;->equals(Ljava/lang/Object;)Z
 PLcom/android/server/net/NetworkPolicyManagerService$NotificationId;->getId()I
 PLcom/android/server/net/NetworkPolicyManagerService$NotificationId;->getTag()Ljava/lang/String;
-PLcom/android/server/net/NetworkPolicyManagerService$NotificationId;->hashCode()I
+HPLcom/android/server/net/NetworkPolicyManagerService$NotificationId;->hashCode()I
 HSPLcom/android/server/net/NetworkPolicyManagerService$RestrictedModeObserver;-><init>(Landroid/content/Context;Lcom/android/server/net/NetworkPolicyManagerService$RestrictedModeObserver$RestrictedModeListener;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService$RestrictedModeObserver;->isRestrictedModeEnabled()Z
 HSPLcom/android/server/net/NetworkPolicyManagerService$StatsCallback;-><init>(Lcom/android/server/net/NetworkPolicyManagerService;)V
@@ -31367,23 +32585,23 @@
 PLcom/android/server/net/NetworkPolicyManagerService;->$r8$lambda$e4PgU7FifHGu_O6_wClCBZ23KmQ(Ljava/util/concurrent/CountDownLatch;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->$r8$lambda$hkicsAfOWTak22bzZEzO0lTGp-k(Lcom/android/server/net/NetworkPolicyManagerService;I)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$fgetmAdminDataAvailableLatch(Lcom/android/server/net/NetworkPolicyManagerService;)Ljava/util/concurrent/CountDownLatch;
-HPLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$fgetmContext(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/content/Context;
+HSPLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$fgetmContext(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/content/Context;
 PLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$fgetmInternetPermissionMap(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/util/SparseBooleanArray;
 HSPLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$fgetmListeners(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/os/RemoteCallbackList;
-HPLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$fgetmLogger(Lcom/android/server/net/NetworkPolicyManagerService;)Lcom/android/server/net/NetworkPolicyLogger;
+HSPLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$fgetmLogger(Lcom/android/server/net/NetworkPolicyManagerService;)Lcom/android/server/net/NetworkPolicyLogger;
 PLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$fgetmLowPowerStandbyAllowlistUids(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/util/SparseBooleanArray;
 PLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$fgetmMeteredRestrictedUids(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/util/SparseArray;
 HPLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$fgetmNetworkMetered(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/util/SparseBooleanArray;
 PLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$fgetmNetworkRoaming(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/util/SparseBooleanArray;
-PLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$fgetmNetworkStats(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/app/usage/NetworkStatsManager;
+HSPLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$fgetmNetworkStats(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/app/usage/NetworkStatsManager;
 HPLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$fgetmNetworkToIfaces(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/util/SparseSetArray;
-HPLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$fgetmPowerSaveTempWhitelistAppIds(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/util/SparseBooleanArray;
+HSPLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$fgetmPowerSaveTempWhitelistAppIds(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/util/SparseBooleanArray;
 PLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$fgetmSubIdToSubscriberId(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/util/SparseArray;
 HSPLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$fgetmUidStateCallbackInfos(Lcom/android/server/net/NetworkPolicyManagerService;)Landroid/util/SparseArray;
 PLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$maddDefaultRestrictBackgroundAllowlistUidsUL(Lcom/android/server/net/NetworkPolicyManagerService;I)Z
 PLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$mbroadcastRestrictBackgroundChanged(Lcom/android/server/net/NetworkPolicyManagerService;ILjava/lang/Boolean;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$mdispatchBlockedReasonChanged(Lcom/android/server/net/NetworkPolicyManagerService;Landroid/net/INetworkPolicyListener;III)V
-PLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$mdispatchMeteredIfacesChanged(Lcom/android/server/net/NetworkPolicyManagerService;Landroid/net/INetworkPolicyListener;[Ljava/lang/String;)V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$mdispatchMeteredIfacesChanged(Lcom/android/server/net/NetworkPolicyManagerService;Landroid/net/INetworkPolicyListener;[Ljava/lang/String;)V
 PLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$mdispatchRestrictBackgroundChanged(Lcom/android/server/net/NetworkPolicyManagerService;Landroid/net/INetworkPolicyListener;Z)V
 PLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$mdispatchSubscriptionOverride(Lcom/android/server/net/NetworkPolicyManagerService;Landroid/net/INetworkPolicyListener;III[I)V
 PLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$mdispatchSubscriptionPlansChanged(Lcom/android/server/net/NetworkPolicyManagerService;Landroid/net/INetworkPolicyListener;I[Landroid/telephony/SubscriptionPlan;)V
@@ -31401,14 +32619,14 @@
 PLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$msetNetworkTemplateEnabledInner(Lcom/android/server/net/NetworkPolicyManagerService;Landroid/net/NetworkTemplate;Z)V
 PLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$msetSubscriptionPlansInternal(Lcom/android/server/net/NetworkPolicyManagerService;I[Landroid/telephony/SubscriptionPlan;JLjava/lang/String;)V
 PLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$mupdateNetworkToIfacesNL(Lcom/android/server/net/NetworkPolicyManagerService;ILandroid/util/ArraySet;)Z
-PLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$mupdateNetworksInternal(Lcom/android/server/net/NetworkPolicyManagerService;)V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$mupdateNetworksInternal(Lcom/android/server/net/NetworkPolicyManagerService;)V
 PLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$mupdatePowerSaveWhitelistUL(Lcom/android/server/net/NetworkPolicyManagerService;)V
 PLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$mupdateRestrictionRulesForUidUL(Lcom/android/server/net/NetworkPolicyManagerService;I)V
 PLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$mupdateRulesForAppIdleParoleUL(Lcom/android/server/net/NetworkPolicyManagerService;)V
 PLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$mupdateRulesForGlobalChangeAL(Lcom/android/server/net/NetworkPolicyManagerService;Z)V
-PLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$mupdateRulesForPowerRestrictionsUL(Lcom/android/server/net/NetworkPolicyManagerService;I)V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$mupdateRulesForPowerRestrictionsUL(Lcom/android/server/net/NetworkPolicyManagerService;I)V
 PLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$mupdateRulesForRestrictPowerUL(Lcom/android/server/net/NetworkPolicyManagerService;)V
-HPLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$mupdateRulesForTempWhitelistChangeUL(Lcom/android/server/net/NetworkPolicyManagerService;I)V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$mupdateRulesForTempWhitelistChangeUL(Lcom/android/server/net/NetworkPolicyManagerService;I)V
 PLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$mupgradeWifiMeteredOverride(Lcom/android/server/net/NetworkPolicyManagerService;)V
 PLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$sfgetLOGD()Z
 HSPLcom/android/server/net/NetworkPolicyManagerService;->-$$Nest$sfgetLOGV()Z
@@ -31424,6 +32642,7 @@
 HSPLcom/android/server/net/NetworkPolicyManagerService;->addSdkSandboxUidsIfNeeded(Landroid/util/SparseIntArray;)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
 PLcom/android/server/net/NetworkPolicyManagerService;->addUidPolicy(II)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->bindConnectivityManager()V
+PLcom/android/server/net/NetworkPolicyManagerService;->broadcastRestrictBackgroundChanged(ILjava/lang/Boolean;)V
 PLcom/android/server/net/NetworkPolicyManagerService;->buildDefaultCarrierPolicy(ILjava/lang/String;)Landroid/net/NetworkPolicy;
 PLcom/android/server/net/NetworkPolicyManagerService;->buildNetworkOverLimitIntent(Landroid/content/res/Resources;Landroid/net/NetworkTemplate;)Landroid/content/Intent;
 HPLcom/android/server/net/NetworkPolicyManagerService;->buildSnoozeWarningIntent(Landroid/net/NetworkTemplate;Ljava/lang/String;)Landroid/content/Intent;
@@ -31434,7 +32653,7 @@
 HPLcom/android/server/net/NetworkPolicyManagerService;->collectIfaces(Landroid/util/ArraySet;Landroid/net/NetworkStateSnapshot;)V
 PLcom/android/server/net/NetworkPolicyManagerService;->collectKeys(Landroid/util/SparseArray;Landroid/util/SparseBooleanArray;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->dispatchBlockedReasonChanged(Landroid/net/INetworkPolicyListener;III)V+]Landroid/net/INetworkPolicyListener;Landroid/net/INetworkPolicyListener$Stub$Proxy;,Landroid/net/NetworkPolicyManager$NetworkPolicyCallbackProxy;,Lcom/android/server/connectivity/MultipathPolicyTracker$2;
-HPLcom/android/server/net/NetworkPolicyManagerService;->dispatchMeteredIfacesChanged(Landroid/net/INetworkPolicyListener;[Ljava/lang/String;)V+]Landroid/net/INetworkPolicyListener;Landroid/net/INetworkPolicyListener$Stub$Proxy;,Landroid/net/NetworkPolicyManager$NetworkPolicyCallbackProxy;,Lcom/android/server/connectivity/MultipathPolicyTracker$2;
+HSPLcom/android/server/net/NetworkPolicyManagerService;->dispatchMeteredIfacesChanged(Landroid/net/INetworkPolicyListener;[Ljava/lang/String;)V+]Landroid/net/INetworkPolicyListener;Landroid/net/INetworkPolicyListener$Stub$Proxy;,Landroid/net/NetworkPolicyManager$NetworkPolicyCallbackProxy;,Lcom/android/server/connectivity/MultipathPolicyTracker$2;
 PLcom/android/server/net/NetworkPolicyManagerService;->dispatchRestrictBackgroundChanged(Landroid/net/INetworkPolicyListener;Z)V
 PLcom/android/server/net/NetworkPolicyManagerService;->dispatchSubscriptionPlansChanged(Landroid/net/INetworkPolicyListener;I[Landroid/telephony/SubscriptionPlan;)V
 PLcom/android/server/net/NetworkPolicyManagerService;->dispatchUidPoliciesChanged(Landroid/net/INetworkPolicyListener;II)V
@@ -31442,17 +32661,17 @@
 PLcom/android/server/net/NetworkPolicyManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->enableFirewallChainUL(IZ)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->enforceAnyPermissionOf([Ljava/lang/String;)V+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;
-PLcom/android/server/net/NetworkPolicyManagerService;->enforceSubscriptionPlanAccess(IILjava/lang/String;)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->enforceSubscriptionPlanAccess(IILjava/lang/String;)V
 PLcom/android/server/net/NetworkPolicyManagerService;->enforceSubscriptionPlanValidity([Landroid/telephony/SubscriptionPlan;)V
 HPLcom/android/server/net/NetworkPolicyManagerService;->enqueueNotification(Landroid/net/NetworkPolicy;IJLandroid/content/pm/ApplicationInfo;)V
-HPLcom/android/server/net/NetworkPolicyManagerService;->ensureActiveCarrierPolicyAL()V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->ensureActiveCarrierPolicyAL()V
 HPLcom/android/server/net/NetworkPolicyManagerService;->ensureActiveCarrierPolicyAL(ILjava/lang/String;)Z
 PLcom/android/server/net/NetworkPolicyManagerService;->factoryReset(Ljava/lang/String;)V
 PLcom/android/server/net/NetworkPolicyManagerService;->findRapidBlame(Landroid/net/NetworkTemplate;JJ)Landroid/content/pm/ApplicationInfo;
 HSPLcom/android/server/net/NetworkPolicyManagerService;->findRelevantSubIdNL(Landroid/net/NetworkTemplate;)I+]Landroid/net/NetworkTemplate;Landroid/net/NetworkTemplate;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/net/NetworkIdentity$Builder;Landroid/net/NetworkIdentity$Builder;
 HSPLcom/android/server/net/NetworkPolicyManagerService;->forEachUid(Ljava/lang/String;Ljava/util/function/IntConsumer;)V
 PLcom/android/server/net/NetworkPolicyManagerService;->getAppIdleWhitelist()[I
-HSPLcom/android/server/net/NetworkPolicyManagerService;->getBlockedReasons(I)I
+HSPLcom/android/server/net/NetworkPolicyManagerService;->getBlockedReasons(I)I+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/net/NetworkPolicyManagerService;->getBooleanDefeatingNullable(Landroid/os/PersistableBundle;Ljava/lang/String;Z)Z
 PLcom/android/server/net/NetworkPolicyManagerService;->getCycleDayFromCarrierConfig(Landroid/os/PersistableBundle;I)I
 HSPLcom/android/server/net/NetworkPolicyManagerService;->getDefaultClock()Ljava/time/Clock;
@@ -31461,7 +32680,7 @@
 PLcom/android/server/net/NetworkPolicyManagerService;->getHandlerForTesting()Landroid/os/Handler;
 PLcom/android/server/net/NetworkPolicyManagerService;->getLimitBytesFromCarrierConfig(Landroid/os/PersistableBundle;J)J
 PLcom/android/server/net/NetworkPolicyManagerService;->getMultipathPreference(Landroid/net/Network;)I
-HPLcom/android/server/net/NetworkPolicyManagerService;->getNetworkPolicies(Ljava/lang/String;)[Landroid/net/NetworkPolicy;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/Context;Landroid/app/ContextImpl;
+HSPLcom/android/server/net/NetworkPolicyManagerService;->getNetworkPolicies(Ljava/lang/String;)[Landroid/net/NetworkPolicy;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLcom/android/server/net/NetworkPolicyManagerService;->getOrCreateUidBlockedStateForUid(Landroid/util/SparseArray;I)Lcom/android/server/net/NetworkPolicyManagerService$UidBlockedState;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/net/NetworkPolicyManagerService;->getPlatformDefaultLimitBytes()J
 PLcom/android/server/net/NetworkPolicyManagerService;->getPlatformDefaultWarningBytes()J
@@ -31475,7 +32694,7 @@
 HPLcom/android/server/net/NetworkPolicyManagerService;->getSubscriptionPlan(Landroid/net/NetworkTemplate;)Landroid/telephony/SubscriptionPlan;+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;
 HPLcom/android/server/net/NetworkPolicyManagerService;->getSubscriptionPlans(ILjava/lang/String;)[Landroid/telephony/SubscriptionPlan;
 HPLcom/android/server/net/NetworkPolicyManagerService;->getSubscriptionPlansOwner(I)Ljava/lang/String;
-HPLcom/android/server/net/NetworkPolicyManagerService;->getTotalBytes(Landroid/net/NetworkTemplate;JJ)J
+HPLcom/android/server/net/NetworkPolicyManagerService;->getTotalBytes(Landroid/net/NetworkTemplate;JJ)J+]Lcom/android/server/net/NetworkPolicyManagerService$StatsCallback;Lcom/android/server/net/NetworkPolicyManagerService$StatsCallback;]Lcom/android/server/net/NetworkPolicyManagerService$Dependencies;Lcom/android/server/net/NetworkPolicyManagerService$Dependencies;
 PLcom/android/server/net/NetworkPolicyManagerService;->getUidForPackage(Ljava/lang/String;I)I
 HPLcom/android/server/net/NetworkPolicyManagerService;->getUidPolicy(I)I
 PLcom/android/server/net/NetworkPolicyManagerService;->getUidsWithPolicy(I)[I
@@ -31487,7 +32706,7 @@
 HSPLcom/android/server/net/NetworkPolicyManagerService;->handleRestrictedPackagesChangeUL(Ljava/util/Set;Ljava/util/Set;)V
 HPLcom/android/server/net/NetworkPolicyManagerService;->handleShellCommand(Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;[Ljava/lang/String;)I
 HSPLcom/android/server/net/NetworkPolicyManagerService;->handleUidChanged(Lcom/android/server/net/NetworkPolicyManagerService$UidStateCallbackInfo;)V+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;]Lcom/android/server/net/NetworkPolicyLogger;Lcom/android/server/net/NetworkPolicyLogger;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;
-HSPLcom/android/server/net/NetworkPolicyManagerService;->handleUidGone(I)V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->handleUidGone(I)V+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;
 HSPLcom/android/server/net/NetworkPolicyManagerService;->hasInternetPermissionUL(I)Z+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
 HSPLcom/android/server/net/NetworkPolicyManagerService;->hasRestrictedModeAccess(I)Z
 HSPLcom/android/server/net/NetworkPolicyManagerService;->initService(Ljava/util/concurrent/CountDownLatch;)V
@@ -31501,14 +32720,14 @@
 HSPLcom/android/server/net/NetworkPolicyManagerService;->isUidForegroundOnRestrictPowerUL(I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/net/NetworkPolicyManagerService;->isUidIdle(I)Z
 HSPLcom/android/server/net/NetworkPolicyManagerService;->isUidIdle(II)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;
-HPLcom/android/server/net/NetworkPolicyManagerService;->isUidNetworkingBlocked(IZ)Z+]Lcom/android/internal/util/StatLogger;Lcom/android/internal/util/StatLogger;]Lcom/android/server/net/NetworkPolicyLogger;Lcom/android/server/net/NetworkPolicyLogger;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/Context;Landroid/app/ContextImpl;
+HSPLcom/android/server/net/NetworkPolicyManagerService;->isUidNetworkingBlocked(IZ)Z+]Lcom/android/internal/util/StatLogger;Lcom/android/internal/util/StatLogger;]Lcom/android/server/net/NetworkPolicyLogger;Lcom/android/server/net/NetworkPolicyLogger;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/Context;Landroid/app/ContextImpl;
 HPLcom/android/server/net/NetworkPolicyManagerService;->isUidRestrictedOnMeteredNetworks(I)Z
 HSPLcom/android/server/net/NetworkPolicyManagerService;->isUidTop(I)Z
 HSPLcom/android/server/net/NetworkPolicyManagerService;->isUidValidForAllowlistRulesUL(I)Z+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;
 HSPLcom/android/server/net/NetworkPolicyManagerService;->isUidValidForDenylistRulesUL(I)Z+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;
 HSPLcom/android/server/net/NetworkPolicyManagerService;->isWhitelistedFromPowerSaveExceptIdleUL(I)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
 HSPLcom/android/server/net/NetworkPolicyManagerService;->isWhitelistedFromPowerSaveUL(IZ)Z+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
-HSPLcom/android/server/net/NetworkPolicyManagerService;->lambda$forEachUid$7(Landroid/util/SparseBooleanArray;ILjava/util/function/IntConsumer;Lcom/android/server/pm/parsing/pkg/AndroidPackage;)V+]Ljava/util/function/IntConsumer;Lcom/android/server/net/NetworkPolicyManagerService$$ExternalSyntheticLambda4;,Lcom/android/server/net/NetworkPolicyManagerService$$ExternalSyntheticLambda2;,Lcom/android/server/net/NetworkPolicyManagerService$$ExternalSyntheticLambda0;,Lcom/android/server/net/NetworkPolicyManagerService$$ExternalSyntheticLambda5;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/pm/pkg/AndroidPackageApi;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;
+HSPLcom/android/server/net/NetworkPolicyManagerService;->lambda$forEachUid$7(Landroid/util/SparseBooleanArray;ILjava/util/function/IntConsumer;Lcom/android/server/pm/parsing/pkg/AndroidPackage;)V+]Ljava/util/function/IntConsumer;Lcom/android/server/net/NetworkPolicyManagerService$$ExternalSyntheticLambda4;,Lcom/android/server/net/NetworkPolicyManagerService$$ExternalSyntheticLambda2;,Lcom/android/server/net/NetworkPolicyManagerService$$ExternalSyntheticLambda5;,Lcom/android/server/net/NetworkPolicyManagerService$$ExternalSyntheticLambda0;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/pm/pkg/AndroidPackageApi;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HPLcom/android/server/net/NetworkPolicyManagerService;->lambda$handleDeviceIdleModeChangedUL$4(I)V+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;
 PLcom/android/server/net/NetworkPolicyManagerService;->lambda$initService$0(Z)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->lambda$networkScoreAndNetworkManagementServiceReady$1(Ljava/util/concurrent/CountDownLatch;)V
@@ -31518,13 +32737,13 @@
 HSPLcom/android/server/net/NetworkPolicyManagerService;->lambda$updateRulesForRestrictPowerUL$5(I)V
 HPLcom/android/server/net/NetworkPolicyManagerService;->maybeUpdateCarrierPolicyCycleAL(ILjava/lang/String;)Z
 HSPLcom/android/server/net/NetworkPolicyManagerService;->networkScoreAndNetworkManagementServiceReady()Ljava/util/concurrent/CountDownLatch;
-HPLcom/android/server/net/NetworkPolicyManagerService;->normalizePoliciesNL()V
-HPLcom/android/server/net/NetworkPolicyManagerService;->normalizePoliciesNL([Landroid/net/NetworkPolicy;)V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->normalizePoliciesNL()V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->normalizePoliciesNL([Landroid/net/NetworkPolicy;)V
 HPLcom/android/server/net/NetworkPolicyManagerService;->normalizeTemplate(Landroid/net/NetworkTemplate;Ljava/util/List;)Landroid/net/NetworkTemplate;
 PLcom/android/server/net/NetworkPolicyManagerService;->notifyOverLimitNL(Landroid/net/NetworkTemplate;)V
 PLcom/android/server/net/NetworkPolicyManagerService;->notifyStatsProviderWarningOrLimitReached()V
 HPLcom/android/server/net/NetworkPolicyManagerService;->notifyUnderLimitNL(Landroid/net/NetworkTemplate;)V
-PLcom/android/server/net/NetworkPolicyManagerService;->onUidDeletedUL(I)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->onUidDeletedUL(I)V
 PLcom/android/server/net/NetworkPolicyManagerService;->performSnooze(Landroid/net/NetworkTemplate;I)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->postBlockedReasonsChangedMsg(III)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->postUidRulesChangedMsg(II)V
@@ -31533,16 +32752,16 @@
 HPLcom/android/server/net/NetworkPolicyManagerService;->removeInterfaceLimit(Ljava/lang/String;)V
 PLcom/android/server/net/NetworkPolicyManagerService;->removeInterfaceQuotasAsync(Ljava/lang/String;)V
 PLcom/android/server/net/NetworkPolicyManagerService;->removeUidPolicy(II)V
-HSPLcom/android/server/net/NetworkPolicyManagerService;->removeUidStateUL(I)Z
+HSPLcom/android/server/net/NetworkPolicyManagerService;->removeUidStateUL(I)Z+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/net/NetworkPolicyManagerService;->removeUserStateUL(IZZ)Z
 HPLcom/android/server/net/NetworkPolicyManagerService;->resetUidFirewallRules(I)V
 PLcom/android/server/net/NetworkPolicyManagerService;->sendRestrictBackgroundChangedMsg()V
-HPLcom/android/server/net/NetworkPolicyManagerService;->setAppIdleWhitelist(IZ)V
+HPLcom/android/server/net/NetworkPolicyManagerService;->setAppIdleWhitelist(IZ)V+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/net/NetworkPolicyLogger;Lcom/android/server/net/NetworkPolicyLogger;]Landroid/content/Context;Landroid/app/ContextImpl;
 PLcom/android/server/net/NetworkPolicyManagerService;->setDebugUid(I)V
 HPLcom/android/server/net/NetworkPolicyManagerService;->setDeviceIdleMode(Z)V
 HPLcom/android/server/net/NetworkPolicyManagerService;->setInterfaceLimit(Ljava/lang/String;J)V
 HPLcom/android/server/net/NetworkPolicyManagerService;->setInterfaceQuotasAsync(Ljava/lang/String;JJ)V
-HSPLcom/android/server/net/NetworkPolicyManagerService;->setMeteredNetworkAllowlist(IZ)V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->setMeteredNetworkAllowlist(IZ)V+]Lcom/android/server/net/NetworkPolicyLogger;Lcom/android/server/net/NetworkPolicyLogger;]Landroid/os/INetworkManagementService;Lcom/android/server/NetworkManagementService;
 PLcom/android/server/net/NetworkPolicyManagerService;->setMeteredNetworkDenylist(IZ)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->setMeteredRestrictedPackagesInternal(Ljava/util/Set;I)V
 HPLcom/android/server/net/NetworkPolicyManagerService;->setNetworkPolicies([Landroid/net/NetworkPolicy;)V
@@ -31553,7 +32772,7 @@
 HPLcom/android/server/net/NetworkPolicyManagerService;->setSubscriptionOverride(III[IJLjava/lang/String;)V
 PLcom/android/server/net/NetworkPolicyManagerService;->setSubscriptionPlans(I[Landroid/telephony/SubscriptionPlan;JLjava/lang/String;)V
 PLcom/android/server/net/NetworkPolicyManagerService;->setSubscriptionPlansInternal(I[Landroid/telephony/SubscriptionPlan;JLjava/lang/String;)V
-HPLcom/android/server/net/NetworkPolicyManagerService;->setUidFirewallRuleUL(III)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/net/NetworkPolicyLogger;Lcom/android/server/net/NetworkPolicyLogger;]Landroid/os/INetworkManagementService;Lcom/android/server/NetworkManagementService;
+HSPLcom/android/server/net/NetworkPolicyManagerService;->setUidFirewallRuleUL(III)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/net/NetworkPolicyLogger;Lcom/android/server/net/NetworkPolicyLogger;]Landroid/os/INetworkManagementService;Lcom/android/server/NetworkManagementService;
 HSPLcom/android/server/net/NetworkPolicyManagerService;->setUidFirewallRulesUL(ILandroid/util/SparseIntArray;)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;]Lcom/android/server/net/NetworkPolicyLogger;Lcom/android/server/net/NetworkPolicyLogger;]Landroid/os/INetworkManagementService;Lcom/android/server/NetworkManagementService;
 HSPLcom/android/server/net/NetworkPolicyManagerService;->setUidFirewallRulesUL(ILandroid/util/SparseIntArray;I)V
 PLcom/android/server/net/NetworkPolicyManagerService;->setUidPolicy(II)V
@@ -31564,13 +32783,13 @@
 HPLcom/android/server/net/NetworkPolicyManagerService;->unregisterListener(Landroid/net/INetworkPolicyListener;)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->updateBlockedReasonsForRestrictedModeUL(I)I
 HPLcom/android/server/net/NetworkPolicyManagerService;->updateCapabilityChange(Landroid/util/SparseBooleanArray;ZLandroid/net/Network;)Z
-PLcom/android/server/net/NetworkPolicyManagerService;->updateDefaultCarrierPolicyAL(ILandroid/net/NetworkPolicy;)Z
-HPLcom/android/server/net/NetworkPolicyManagerService;->updateNetworkEnabledNL()V
-HPLcom/android/server/net/NetworkPolicyManagerService;->updateNetworkRulesNL()V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Landroid/os/Handler;Landroid/os/Handler;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/net/Network;Landroid/net/Network;]Landroid/net/NetworkTemplate;Landroid/net/NetworkTemplate;]Ljava/time/ZonedDateTime;Ljava/time/ZonedDateTime;]Landroid/net/NetworkIdentity$Builder;Landroid/net/NetworkIdentity$Builder;]Landroid/net/NetworkStateSnapshot;Landroid/net/NetworkStateSnapshot;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;]Landroid/net/NetworkPolicy;Landroid/net/NetworkPolicy;]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;]Ljava/time/Instant;Ljava/time/Instant;]Landroid/os/Message;Landroid/os/Message;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/net/ConnectivityManager;Landroid/net/ConnectivityManager;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;,Landroid/net/NetworkPolicyManager$1;]Landroid/telephony/SubscriptionPlan;Landroid/telephony/SubscriptionPlan;
+HPLcom/android/server/net/NetworkPolicyManagerService;->updateDefaultCarrierPolicyAL(ILandroid/net/NetworkPolicy;)Z
+HSPLcom/android/server/net/NetworkPolicyManagerService;->updateNetworkEnabledNL()V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->updateNetworkRulesNL()V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Landroid/os/Handler;Landroid/os/Handler;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/net/Network;Landroid/net/Network;]Landroid/net/NetworkTemplate;Landroid/net/NetworkTemplate;]Ljava/time/ZonedDateTime;Ljava/time/ZonedDateTime;]Landroid/net/NetworkIdentity$Builder;Landroid/net/NetworkIdentity$Builder;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/net/NetworkStateSnapshot;Landroid/net/NetworkStateSnapshot;]Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;]Landroid/telephony/SubscriptionPlan;Landroid/telephony/SubscriptionPlan;]Landroid/net/NetworkPolicy;Landroid/net/NetworkPolicy;]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;]Ljava/time/Instant;Ljava/time/Instant;]Landroid/os/Message;Landroid/os/Message;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/net/ConnectivityManager;Landroid/net/ConnectivityManager;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;,Landroid/net/NetworkPolicyManager$1;
 HSPLcom/android/server/net/NetworkPolicyManagerService;->updateNetworkStats(IZ)V+]Landroid/app/usage/NetworkStatsManager;Landroid/app/usage/NetworkStatsManager;
-PLcom/android/server/net/NetworkPolicyManagerService;->updateNetworkToIfacesNL(ILandroid/util/ArraySet;)Z
+HPLcom/android/server/net/NetworkPolicyManagerService;->updateNetworkToIfacesNL(ILandroid/util/ArraySet;)Z
 PLcom/android/server/net/NetworkPolicyManagerService;->updateNetworks()V
-HPLcom/android/server/net/NetworkPolicyManagerService;->updateNetworksInternal()V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->updateNetworksInternal()V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->updateNotificationsNL()V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->updatePowerSaveWhitelistUL()V
 HPLcom/android/server/net/NetworkPolicyManagerService;->updateRestrictBackgroundByLowPowerModeUL(Landroid/os/PowerSaveState;)V
@@ -31579,13 +32798,13 @@
 PLcom/android/server/net/NetworkPolicyManagerService;->updateRestrictedModeForUidUL(I)V
 PLcom/android/server/net/NetworkPolicyManagerService;->updateRestrictionRulesForUidUL(I)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRuleForAppIdleUL(II)V+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
-HPLcom/android/server/net/NetworkPolicyManagerService;->updateRuleForDeviceIdleUL(I)V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRuleForDeviceIdleUL(I)V
 PLcom/android/server/net/NetworkPolicyManagerService;->updateRuleForLowPowerStandbyUL(I)V
-HPLcom/android/server/net/NetworkPolicyManagerService;->updateRuleForRestrictPowerUL(I)V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRuleForRestrictPowerUL(I)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForAppIdleParoleUL()V+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;
 HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForAppIdleUL()V
-HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForDataUsageRestrictionsUL(I)V
-HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForDataUsageRestrictionsULInner(I)V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForDataUsageRestrictionsUL(I)V+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;
+HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForDataUsageRestrictionsULInner(I)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;]Lcom/android/server/net/NetworkPolicyManagerService$UidBlockedState;Lcom/android/server/net/NetworkPolicyManagerService$UidBlockedState;
 HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForDeviceIdleUL()V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForGlobalChangeAL(Z)V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForPowerRestrictionsUL(I)V+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;
@@ -31595,11 +32814,11 @@
 HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForPowerSaveUL()V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForRestrictBackgroundUL()V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForRestrictPowerUL()V
-HPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForTempWhitelistChangeUL(I)V+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/UserManager;Landroid/os/UserManager;
+HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForTempWhitelistChangeUL(I)V+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/UserManager;Landroid/os/UserManager;
 HPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForWhitelistedAppIds(Landroid/util/SparseIntArray;Landroid/util/SparseBooleanArray;I)V
-HPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForWhitelistedPowerSaveUL(IZI)V+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;
-HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForWhitelistedPowerSaveUL(ZILandroid/util/SparseIntArray;)V
-HPLcom/android/server/net/NetworkPolicyManagerService;->updateSubscriptions()V
+HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForWhitelistedPowerSaveUL(IZI)V+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;
+HSPLcom/android/server/net/NetworkPolicyManagerService;->updateRulesForWhitelistedPowerSaveUL(ZILandroid/util/SparseIntArray;)V+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/UserManager;Landroid/os/UserManager;
+HSPLcom/android/server/net/NetworkPolicyManagerService;->updateSubscriptions()V
 HSPLcom/android/server/net/NetworkPolicyManagerService;->updateUidStateUL(IIJI)Z+]Lcom/android/server/net/NetworkPolicyManagerService;Lcom/android/server/net/NetworkPolicyManagerService;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/net/NetworkPolicyManagerService;->upgradeDefaultBackgroundDataUL()V
 PLcom/android/server/net/NetworkPolicyManagerService;->upgradeWifiMeteredOverride()V
@@ -31711,19 +32930,19 @@
 HSPLcom/android/server/net/watchlist/WatchlistSettings;->parseSecretKey(Lorg/xmlpull/v1/XmlPullParser;)[B
 HSPLcom/android/server/net/watchlist/WatchlistSettings;->reloadSettings()V
 PLcom/android/server/net/watchlist/WatchlistSettings;->saveSettings()V
-PLcom/android/server/notification/AlertRateLimiter;-><init>()V
+HSPLcom/android/server/notification/AlertRateLimiter;-><init>()V
 HPLcom/android/server/notification/AlertRateLimiter;->shouldRateLimitAlert(J)Z
 HSPLcom/android/server/notification/BadgeExtractor;-><init>()V
 HSPLcom/android/server/notification/BadgeExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
-HPLcom/android/server/notification/BadgeExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/RankingConfig;Lcom/android/server/notification/PreferencesHelper;]Landroid/app/Notification$BubbleMetadata;Landroid/app/Notification$BubbleMetadata;
+HSPLcom/android/server/notification/BadgeExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Landroid/app/Notification$BubbleMetadata;Landroid/app/Notification$BubbleMetadata;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/RankingConfig;Lcom/android/server/notification/PreferencesHelper;
 HSPLcom/android/server/notification/BadgeExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
 HSPLcom/android/server/notification/BadgeExtractor;->setZenHelper(Lcom/android/server/notification/ZenModeHelper;)V
 HSPLcom/android/server/notification/BubbleExtractor;-><init>()V
 HPLcom/android/server/notification/BubbleExtractor;->canLaunchInTaskView(Landroid/content/Context;Landroid/app/PendingIntent;Ljava/lang/String;)Z
-HPLcom/android/server/notification/BubbleExtractor;->canPresentAsBubble(Lcom/android/server/notification/NotificationRecord;)Z+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;]Landroid/app/Notification$BubbleMetadata;Landroid/app/Notification$BubbleMetadata;]Lcom/android/server/notification/BubbleExtractor;Lcom/android/server/notification/BubbleExtractor;
+HSPLcom/android/server/notification/BubbleExtractor;->canPresentAsBubble(Lcom/android/server/notification/NotificationRecord;)Z+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;]Landroid/app/Notification$BubbleMetadata;Landroid/app/Notification$BubbleMetadata;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/BubbleExtractor;Lcom/android/server/notification/BubbleExtractor;
 HSPLcom/android/server/notification/BubbleExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
 PLcom/android/server/notification/BubbleExtractor;->logBubbleError(Ljava/lang/String;Ljava/lang/String;)V
-HPLcom/android/server/notification/BubbleExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/BubbleExtractor;Lcom/android/server/notification/BubbleExtractor;]Lcom/android/server/notification/RankingConfig;Lcom/android/server/notification/PreferencesHelper;]Landroid/app/ActivityManager;Landroid/app/ActivityManager;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;
+HSPLcom/android/server/notification/BubbleExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Landroid/app/ActivityManager;Landroid/app/ActivityManager;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/BubbleExtractor;Lcom/android/server/notification/BubbleExtractor;]Lcom/android/server/notification/RankingConfig;Lcom/android/server/notification/PreferencesHelper;
 PLcom/android/server/notification/BubbleExtractor;->setActivityManager(Landroid/app/ActivityManager;)V
 HSPLcom/android/server/notification/BubbleExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
 HSPLcom/android/server/notification/BubbleExtractor;->setShortcutHelper(Lcom/android/server/notification/ShortcutHelper;)V
@@ -31732,20 +32951,20 @@
 PLcom/android/server/notification/CalendarTracker$1;->onChange(Z)V
 HPLcom/android/server/notification/CalendarTracker$1;->onChange(ZLandroid/net/Uri;)V
 HPLcom/android/server/notification/CalendarTracker$Callback;->onChanged()V
-PLcom/android/server/notification/CalendarTracker$CheckEventResult;-><init>()V
-PLcom/android/server/notification/CalendarTracker;->-$$Nest$fgetmCallback(Lcom/android/server/notification/CalendarTracker;)Lcom/android/server/notification/CalendarTracker$Callback;
+HSPLcom/android/server/notification/CalendarTracker$CheckEventResult;-><init>()V
+HPLcom/android/server/notification/CalendarTracker;->-$$Nest$fgetmCallback(Lcom/android/server/notification/CalendarTracker;)Lcom/android/server/notification/CalendarTracker$Callback;
 PLcom/android/server/notification/CalendarTracker;->-$$Nest$fgetmUserContext(Lcom/android/server/notification/CalendarTracker;)Landroid/content/Context;
-PLcom/android/server/notification/CalendarTracker;->-$$Nest$sfgetDEBUG()Z
+HPLcom/android/server/notification/CalendarTracker;->-$$Nest$sfgetDEBUG()Z
 HSPLcom/android/server/notification/CalendarTracker;-><clinit>()V
 HSPLcom/android/server/notification/CalendarTracker;-><init>(Landroid/content/Context;Landroid/content/Context;)V
 PLcom/android/server/notification/CalendarTracker;->attendeeStatusToString(I)Ljava/lang/String;
-HPLcom/android/server/notification/CalendarTracker;->checkEvent(Landroid/service/notification/ZenModeConfig$EventInfo;J)Lcom/android/server/notification/CalendarTracker$CheckEventResult;+]Landroid/net/Uri$Builder;Landroid/net/Uri$Builder;]Lcom/android/server/notification/CalendarTracker;Lcom/android/server/notification/CalendarTracker;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/content/Context;Lcom/android/server/notification/EventConditionProvider;]Landroid/database/Cursor;Landroid/content/ContentResolver$CursorWrapperInner;]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;]Landroid/net/Uri;Landroid/net/Uri$StringUri;
+HSPLcom/android/server/notification/CalendarTracker;->checkEvent(Landroid/service/notification/ZenModeConfig$EventInfo;J)Lcom/android/server/notification/CalendarTracker$CheckEventResult;+]Landroid/net/Uri$Builder;Landroid/net/Uri$Builder;]Lcom/android/server/notification/CalendarTracker;Lcom/android/server/notification/CalendarTracker;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/content/Context;Lcom/android/server/notification/EventConditionProvider;,Landroid/app/ContextImpl;]Landroid/database/Cursor;Landroid/content/ContentResolver$CursorWrapperInner;]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;]Landroid/net/Uri;Landroid/net/Uri$StringUri;
 PLcom/android/server/notification/CalendarTracker;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
-HPLcom/android/server/notification/CalendarTracker;->getCalendarsWithAccess()Landroid/util/ArraySet;
-HPLcom/android/server/notification/CalendarTracker;->meetsAttendee(Landroid/service/notification/ZenModeConfig$EventInfo;ILjava/lang/String;)Z
+HSPLcom/android/server/notification/CalendarTracker;->getCalendarsWithAccess()Landroid/util/ArraySet;
+HPLcom/android/server/notification/CalendarTracker;->meetsAttendee(Landroid/service/notification/ZenModeConfig$EventInfo;ILjava/lang/String;)Z+]Landroid/content/Context;Lcom/android/server/notification/EventConditionProvider;,Landroid/app/ContextImpl;]Landroid/database/Cursor;Landroid/content/ContentResolver$CursorWrapperInner;]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;
 PLcom/android/server/notification/CalendarTracker;->meetsReply(II)Z
 HSPLcom/android/server/notification/CalendarTracker;->setCallback(Lcom/android/server/notification/CalendarTracker$Callback;)V
-PLcom/android/server/notification/CalendarTracker;->setRegistered(Z)V
+HSPLcom/android/server/notification/CalendarTracker;->setRegistered(Z)V
 PLcom/android/server/notification/ConditionProviders$Callback;->onConditionChanged(Landroid/net/Uri;Landroid/service/notification/Condition;)V
 PLcom/android/server/notification/ConditionProviders$Callback;->onUserSwitched()V
 HSPLcom/android/server/notification/ConditionProviders$ConditionRecord;-><init>(Landroid/net/Uri;Landroid/content/ComponentName;)V
@@ -31754,7 +32973,7 @@
 HSPLcom/android/server/notification/ConditionProviders;-><init>(Landroid/content/Context;Lcom/android/server/notification/ManagedServices$UserProfiles;Landroid/content/pm/IPackageManager;)V
 HSPLcom/android/server/notification/ConditionProviders;->addSystemProvider(Lcom/android/server/notification/SystemConditionProviderService;)V
 PLcom/android/server/notification/ConditionProviders;->asInterface(Landroid/os/IBinder;)Landroid/os/IInterface;
-PLcom/android/server/notification/ConditionProviders;->checkServiceToken(Landroid/service/notification/IConditionProvider;)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
+HSPLcom/android/server/notification/ConditionProviders;->checkServiceToken(Landroid/service/notification/IConditionProvider;)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
 PLcom/android/server/notification/ConditionProviders;->dump(Ljava/io/PrintWriter;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
 HSPLcom/android/server/notification/ConditionProviders;->ensureFilters(Landroid/content/pm/ServiceInfo;I)V
 HSPLcom/android/server/notification/ConditionProviders;->ensureRecordExists(Landroid/content/ComponentName;Landroid/net/Uri;Landroid/service/notification/IConditionProvider;)V
@@ -31767,20 +32986,20 @@
 HSPLcom/android/server/notification/ConditionProviders;->isSystemProviderEnabled(Ljava/lang/String;)Z
 PLcom/android/server/notification/ConditionProviders;->isValidEntry(Ljava/lang/String;I)Z
 PLcom/android/server/notification/ConditionProviders;->loadDefaultsFromConfig()V
-HPLcom/android/server/notification/ConditionProviders;->notifyConditions(Ljava/lang/String;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;[Landroid/service/notification/Condition;)V
+HSPLcom/android/server/notification/ConditionProviders;->notifyConditions(Ljava/lang/String;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;[Landroid/service/notification/Condition;)V
 HSPLcom/android/server/notification/ConditionProviders;->onBootPhaseAppsCanStart()V
 HPLcom/android/server/notification/ConditionProviders;->onPackagesChanged(Z[Ljava/lang/String;[I)V
 HSPLcom/android/server/notification/ConditionProviders;->onServiceAdded(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
 HPLcom/android/server/notification/ConditionProviders;->onServiceRemovedLocked(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
-PLcom/android/server/notification/ConditionProviders;->onUserSwitched(I)V
-PLcom/android/server/notification/ConditionProviders;->provider(Lcom/android/server/notification/ConditionProviders$ConditionRecord;)Landroid/service/notification/IConditionProvider;
+HSPLcom/android/server/notification/ConditionProviders;->onUserSwitched(I)V
+HSPLcom/android/server/notification/ConditionProviders;->provider(Lcom/android/server/notification/ConditionProviders$ConditionRecord;)Landroid/service/notification/IConditionProvider;
 HSPLcom/android/server/notification/ConditionProviders;->provider(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Landroid/service/notification/IConditionProvider;
-HPLcom/android/server/notification/ConditionProviders;->removeDuplicateConditions(Ljava/lang/String;[Landroid/service/notification/Condition;)[Landroid/service/notification/Condition;
+HSPLcom/android/server/notification/ConditionProviders;->removeDuplicateConditions(Ljava/lang/String;[Landroid/service/notification/Condition;)[Landroid/service/notification/Condition;
 PLcom/android/server/notification/ConditionProviders;->resetPackage(Ljava/lang/String;I)Z
 HSPLcom/android/server/notification/ConditionProviders;->safeSet([Ljava/lang/Object;)Landroid/util/ArraySet;
 HSPLcom/android/server/notification/ConditionProviders;->setCallback(Lcom/android/server/notification/ConditionProviders$Callback;)V
-PLcom/android/server/notification/ConditionProviders;->subscribeIfNecessary(Landroid/content/ComponentName;Landroid/net/Uri;)Z
-HPLcom/android/server/notification/ConditionProviders;->subscribeLocked(Lcom/android/server/notification/ConditionProviders$ConditionRecord;)V
+HSPLcom/android/server/notification/ConditionProviders;->subscribeIfNecessary(Landroid/content/ComponentName;Landroid/net/Uri;)Z
+HSPLcom/android/server/notification/ConditionProviders;->subscribeLocked(Lcom/android/server/notification/ConditionProviders$ConditionRecord;)V
 PLcom/android/server/notification/ConditionProviders;->unsubscribeIfNecessary(Landroid/content/ComponentName;Landroid/net/Uri;)V
 PLcom/android/server/notification/ConditionProviders;->unsubscribeLocked(Lcom/android/server/notification/ConditionProviders$ConditionRecord;)V
 HSPLcom/android/server/notification/ConditionProviders;->writeDefaults(Landroid/util/TypedXmlSerializer;)V
@@ -31800,14 +33019,14 @@
 HSPLcom/android/server/notification/CountdownConditionProvider;->isValidConditionId(Landroid/net/Uri;)Z
 PLcom/android/server/notification/CountdownConditionProvider;->newCondition(JZI)Landroid/service/notification/Condition;
 HSPLcom/android/server/notification/CountdownConditionProvider;->onBootComplete()V
-PLcom/android/server/notification/CountdownConditionProvider;->onConnected()V
+HSPLcom/android/server/notification/CountdownConditionProvider;->onConnected()V
 PLcom/android/server/notification/CountdownConditionProvider;->onDestroy()V
 PLcom/android/server/notification/CountdownConditionProvider;->onSubscribe(Landroid/net/Uri;)V
 PLcom/android/server/notification/CountdownConditionProvider;->onUnsubscribe(Landroid/net/Uri;)V
 PLcom/android/server/notification/CountdownConditionProvider;->tryParseDescription(Landroid/net/Uri;)Ljava/lang/String;
 HSPLcom/android/server/notification/CriticalNotificationExtractor;-><init>()V
 HSPLcom/android/server/notification/CriticalNotificationExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
-HPLcom/android/server/notification/CriticalNotificationExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
+HSPLcom/android/server/notification/CriticalNotificationExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;
 HSPLcom/android/server/notification/CriticalNotificationExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
 HSPLcom/android/server/notification/CriticalNotificationExtractor;->setZenHelper(Lcom/android/server/notification/ZenModeHelper;)V
 HSPLcom/android/server/notification/CriticalNotificationExtractor;->supportsCriticalNotifications(Landroid/content/Context;)Z
@@ -31819,35 +33038,35 @@
 PLcom/android/server/notification/EventConditionProvider$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/notification/EventConditionProvider$4;-><init>(Lcom/android/server/notification/EventConditionProvider;)V
 HSPLcom/android/server/notification/EventConditionProvider$4;->run()V
-PLcom/android/server/notification/EventConditionProvider;->-$$Nest$fgetmEvaluateSubscriptionsW(Lcom/android/server/notification/EventConditionProvider;)Ljava/lang/Runnable;
-PLcom/android/server/notification/EventConditionProvider;->-$$Nest$fgetmWorker(Lcom/android/server/notification/EventConditionProvider;)Landroid/os/Handler;
+HPLcom/android/server/notification/EventConditionProvider;->-$$Nest$fgetmEvaluateSubscriptionsW(Lcom/android/server/notification/EventConditionProvider;)Ljava/lang/Runnable;
+HPLcom/android/server/notification/EventConditionProvider;->-$$Nest$fgetmWorker(Lcom/android/server/notification/EventConditionProvider;)Landroid/os/Handler;
 PLcom/android/server/notification/EventConditionProvider;->-$$Nest$mevaluateSubscriptions(Lcom/android/server/notification/EventConditionProvider;)V
 HSPLcom/android/server/notification/EventConditionProvider;->-$$Nest$mevaluateSubscriptionsW(Lcom/android/server/notification/EventConditionProvider;)V
 PLcom/android/server/notification/EventConditionProvider;->-$$Nest$mreloadTrackers(Lcom/android/server/notification/EventConditionProvider;)V
-PLcom/android/server/notification/EventConditionProvider;->-$$Nest$sfgetDEBUG()Z
+HPLcom/android/server/notification/EventConditionProvider;->-$$Nest$sfgetDEBUG()Z
 HSPLcom/android/server/notification/EventConditionProvider;-><clinit>()V
 HSPLcom/android/server/notification/EventConditionProvider;-><init>()V
 HSPLcom/android/server/notification/EventConditionProvider;->asInterface()Landroid/service/notification/IConditionProvider;
 HSPLcom/android/server/notification/EventConditionProvider;->attachBase(Landroid/content/Context;)V
-HPLcom/android/server/notification/EventConditionProvider;->createCondition(Landroid/net/Uri;I)Landroid/service/notification/Condition;
+HSPLcom/android/server/notification/EventConditionProvider;->createCondition(Landroid/net/Uri;I)Landroid/service/notification/Condition;
 PLcom/android/server/notification/EventConditionProvider;->dump(Ljava/io/PrintWriter;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
 HSPLcom/android/server/notification/EventConditionProvider;->evaluateSubscriptions()V
 HSPLcom/android/server/notification/EventConditionProvider;->evaluateSubscriptionsW()V
 HSPLcom/android/server/notification/EventConditionProvider;->getComponent()Landroid/content/ComponentName;
-PLcom/android/server/notification/EventConditionProvider;->getContextForUser(Landroid/content/Context;Landroid/os/UserHandle;)Landroid/content/Context;
+HSPLcom/android/server/notification/EventConditionProvider;->getContextForUser(Landroid/content/Context;Landroid/os/UserHandle;)Landroid/content/Context;
 HSPLcom/android/server/notification/EventConditionProvider;->getPendingIntent(J)Landroid/app/PendingIntent;
 HSPLcom/android/server/notification/EventConditionProvider;->isValidConditionId(Landroid/net/Uri;)Z
 HSPLcom/android/server/notification/EventConditionProvider;->onBootComplete()V
-PLcom/android/server/notification/EventConditionProvider;->onConnected()V
+HSPLcom/android/server/notification/EventConditionProvider;->onConnected()V
 PLcom/android/server/notification/EventConditionProvider;->onDestroy()V
-PLcom/android/server/notification/EventConditionProvider;->onSubscribe(Landroid/net/Uri;)V
+HSPLcom/android/server/notification/EventConditionProvider;->onSubscribe(Landroid/net/Uri;)V
 PLcom/android/server/notification/EventConditionProvider;->onUnsubscribe(Landroid/net/Uri;)V
 HSPLcom/android/server/notification/EventConditionProvider;->reloadTrackers()V
 HSPLcom/android/server/notification/EventConditionProvider;->rescheduleAlarm(JJ)V
 HSPLcom/android/server/notification/EventConditionProvider;->setRegistered(Z)V
 HSPLcom/android/server/notification/GlobalSortKeyComparator;-><init>()V
-HPLcom/android/server/notification/GlobalSortKeyComparator;->compare(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;)I+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/GlobalSortKeyComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I+]Lcom/android/server/notification/GlobalSortKeyComparator;Lcom/android/server/notification/GlobalSortKeyComparator;
+HSPLcom/android/server/notification/GlobalSortKeyComparator;->compare(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;)I+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/GlobalSortKeyComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I+]Lcom/android/server/notification/GlobalSortKeyComparator;Lcom/android/server/notification/GlobalSortKeyComparator;
 PLcom/android/server/notification/GroupHelper$Callback;->addAutoGroup(Ljava/lang/String;)V
 PLcom/android/server/notification/GroupHelper$Callback;->removeAutoGroup(Ljava/lang/String;)V
 PLcom/android/server/notification/GroupHelper$Callback;->removeAutoGroupSummary(ILjava/lang/String;)V
@@ -31856,16 +33075,16 @@
 HSPLcom/android/server/notification/GroupHelper;-><init>(ILcom/android/server/notification/GroupHelper$Callback;)V
 HPLcom/android/server/notification/GroupHelper;->adjustAutogroupingSummary(ILjava/lang/String;Ljava/lang/String;Z)V+]Lcom/android/server/notification/GroupHelper;Lcom/android/server/notification/GlobalSortKeyComparator;
 HPLcom/android/server/notification/GroupHelper;->adjustNotificationBundling(Ljava/util/List;Z)V
-HPLcom/android/server/notification/GroupHelper;->generatePackageKey(ILjava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/notification/GroupHelper;->generatePackageKey(ILjava/lang/String;)Ljava/lang/String;
 HPLcom/android/server/notification/GroupHelper;->getOngoingGroupCount(ILjava/lang/String;)I
-HPLcom/android/server/notification/GroupHelper;->maybeUngroup(Landroid/service/notification/StatusBarNotification;ZI)V
-HPLcom/android/server/notification/GroupHelper;->onNotificationPosted(Landroid/service/notification/StatusBarNotification;Z)V
+HPLcom/android/server/notification/GroupHelper;->maybeUngroup(Landroid/service/notification/StatusBarNotification;ZI)V+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/notification/GroupHelper;Lcom/android/server/notification/GroupHelper;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/LinkedHashSet;Ljava/util/LinkedHashSet;
+HSPLcom/android/server/notification/GroupHelper;->onNotificationPosted(Landroid/service/notification/StatusBarNotification;Z)V
 HPLcom/android/server/notification/GroupHelper;->onNotificationRemoved(Landroid/service/notification/StatusBarNotification;)V
-HPLcom/android/server/notification/GroupHelper;->onNotificationUpdated(Landroid/service/notification/StatusBarNotification;)V
-HPLcom/android/server/notification/GroupHelper;->updateOngoingGroupCount(Landroid/service/notification/StatusBarNotification;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/GroupHelper$Callback;Lcom/android/server/notification/NotificationManagerService$9;]Lcom/android/server/notification/GroupHelper;Lcom/android/server/notification/GroupHelper;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/app/Notification;Landroid/app/Notification;
+HPLcom/android/server/notification/GroupHelper;->onNotificationUpdated(Landroid/service/notification/StatusBarNotification;)V+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/GroupHelper;Lcom/android/server/notification/GroupHelper;
+HSPLcom/android/server/notification/GroupHelper;->updateOngoingGroupCount(Landroid/service/notification/StatusBarNotification;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/GroupHelper$Callback;Lcom/android/server/notification/NotificationManagerService$9;]Lcom/android/server/notification/GroupHelper;Lcom/android/server/notification/GroupHelper;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/app/Notification;Landroid/app/Notification;
 HSPLcom/android/server/notification/ImportanceExtractor;-><init>()V
 HSPLcom/android/server/notification/ImportanceExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
-HPLcom/android/server/notification/ImportanceExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/ImportanceExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
 HSPLcom/android/server/notification/ImportanceExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
 HSPLcom/android/server/notification/ImportanceExtractor;->setZenHelper(Lcom/android/server/notification/ZenModeHelper;)V
 PLcom/android/server/notification/InlineReplyUriRecord;-><init>(Landroid/os/IBinder;Landroid/os/UserHandle;Ljava/lang/String;Ljava/lang/String;)V
@@ -31886,7 +33105,7 @@
 PLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JLcom/android/server/notification/ManagedServices;)V
 HSPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->enabledAndUserMatches(I)Z+]Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;]Lcom/android/server/notification/ManagedServices$UserProfiles;Lcom/android/server/notification/ManagedServices$UserProfiles;
 PLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->getOwner()Lcom/android/server/notification/ManagedServices;
-HPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->hashCode()I
+HSPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->hashCode()I
 HSPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->isEnabledForCurrentProfiles()Z+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 PLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->isGuest(Lcom/android/server/notification/ManagedServices;)Z
 HPLcom/android/server/notification/ManagedServices$ManagedServiceInfo;->isPermittedForProfile(I)Z+]Landroid/app/admin/DevicePolicyManager;Landroid/app/admin/DevicePolicyManager;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/notification/ManagedServices$UserProfiles;Lcom/android/server/notification/ManagedServices$UserProfiles;]Landroid/content/ComponentName;Landroid/content/ComponentName;
@@ -31896,7 +33115,7 @@
 HSPLcom/android/server/notification/ManagedServices$UserProfiles;-><init>()V
 HSPLcom/android/server/notification/ManagedServices$UserProfiles;->getCurrentProfileIds()Landroid/util/IntArray;
 HPLcom/android/server/notification/ManagedServices$UserProfiles;->isCurrentProfile(I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HPLcom/android/server/notification/ManagedServices$UserProfiles;->isManagedProfile(I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;
+HSPLcom/android/server/notification/ManagedServices$UserProfiles;->isManagedProfile(I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;
 HSPLcom/android/server/notification/ManagedServices$UserProfiles;->updateCache(Landroid/content/Context;)V
 HPLcom/android/server/notification/ManagedServices;->-$$Nest$fgetmEnabledServicesForCurrentProfiles(Lcom/android/server/notification/ManagedServices;)Landroid/util/ArraySet;
 PLcom/android/server/notification/ManagedServices;->-$$Nest$fgetmHandler(Lcom/android/server/notification/ManagedServices;)Landroid/os/Handler;
@@ -31914,8 +33133,9 @@
 PLcom/android/server/notification/ManagedServices;->asInterface(Landroid/os/IBinder;)Landroid/os/IInterface;
 HSPLcom/android/server/notification/ManagedServices;->bindToServices(Landroid/util/SparseArray;)V
 HSPLcom/android/server/notification/ManagedServices;->checkNotNull(Landroid/os/IInterface;)V
-HSPLcom/android/server/notification/ManagedServices;->checkServiceTokenLocked(Landroid/os/IInterface;)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;+]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;,Lcom/android/server/notification/ConditionProviders;,Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;
+HSPLcom/android/server/notification/ManagedServices;->checkServiceTokenLocked(Landroid/os/IInterface;)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;+]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;,Lcom/android/server/notification/ConditionProviders;,Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Object;Landroid/service/notification/INotificationListener$Stub$Proxy;
 PLcom/android/server/notification/ManagedServices;->checkType(Landroid/os/IInterface;)Z
+PLcom/android/server/notification/ManagedServices;->clearUserSetFlagLocked(Landroid/content/ComponentName;I)Z
 PLcom/android/server/notification/ManagedServices;->dump(Landroid/util/proto/ProtoOutputStream;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
 HPLcom/android/server/notification/ManagedServices;->dump(Ljava/io/PrintWriter;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
 HSPLcom/android/server/notification/ManagedServices;->getAllowedComponents(I)Ljava/util/List;
@@ -31934,7 +33154,7 @@
 HSPLcom/android/server/notification/ManagedServices;->getServiceFromTokenLocked(Landroid/os/IInterface;)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;+]Landroid/os/IInterface;Landroid/service/notification/ConditionProviderService$Provider;,Landroid/service/notification/INotificationListener$Stub$Proxy;,Landroid/service/notification/NotificationListenerService$NotificationListenerWrapper;,Landroid/service/notification/IConditionProvider$Stub$Proxy;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/notification/ManagedServices;->getServices()Ljava/util/List;
 PLcom/android/server/notification/ManagedServices;->hasMatchingServices(Ljava/lang/String;I)Z
-PLcom/android/server/notification/ManagedServices;->isComponentEnabledForCurrentProfiles(Landroid/content/ComponentName;)Z
+HPLcom/android/server/notification/ManagedServices;->isComponentEnabledForCurrentProfiles(Landroid/content/ComponentName;)Z
 PLcom/android/server/notification/ManagedServices;->isComponentEnabledForPackage(Ljava/lang/String;)Z
 PLcom/android/server/notification/ManagedServices;->isDefaultComponentOrPackage(Ljava/lang/String;)Z
 HPLcom/android/server/notification/ManagedServices;->isPackageAllowed(Ljava/lang/String;I)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
@@ -31952,7 +33172,7 @@
 PLcom/android/server/notification/ManagedServices;->onServiceRemovedLocked(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
 PLcom/android/server/notification/ManagedServices;->onSettingRestored(Ljava/lang/String;Ljava/lang/String;II)V
 PLcom/android/server/notification/ManagedServices;->onUserRemoved(I)V
-PLcom/android/server/notification/ManagedServices;->onUserSwitched(I)V
+HSPLcom/android/server/notification/ManagedServices;->onUserSwitched(I)V
 PLcom/android/server/notification/ManagedServices;->onUserUnlocked(I)V
 HSPLcom/android/server/notification/ManagedServices;->populateComponentsToBind(Landroid/util/SparseArray;Landroid/util/IntArray;Landroid/util/SparseArray;)V
 HSPLcom/android/server/notification/ManagedServices;->populateComponentsToUnbind(ZLjava/util/Set;Landroid/util/SparseArray;Landroid/util/SparseArray;)V
@@ -31973,7 +33193,7 @@
 HSPLcom/android/server/notification/ManagedServices;->registerSystemService(Landroid/os/IInterface;Landroid/content/ComponentName;II)V
 HPLcom/android/server/notification/ManagedServices;->removeServiceImpl(Landroid/os/IInterface;I)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
 HPLcom/android/server/notification/ManagedServices;->removeServiceLocked(I)Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;
-PLcom/android/server/notification/ManagedServices;->removeUninstalledItemsFromApprovedLists(ILjava/lang/String;)Z
+HPLcom/android/server/notification/ManagedServices;->removeUninstalledItemsFromApprovedLists(ILjava/lang/String;)Z
 PLcom/android/server/notification/ManagedServices;->resetComponents(Ljava/lang/String;I)Landroid/util/ArrayMap;
 HPLcom/android/server/notification/ManagedServices;->setComponentState(Landroid/content/ComponentName;IZ)V
 HSPLcom/android/server/notification/ManagedServices;->setPackageOrComponentEnabled(Ljava/lang/String;IZZ)V
@@ -31981,7 +33201,7 @@
 HSPLcom/android/server/notification/ManagedServices;->shouldReflectToSettings()Z
 PLcom/android/server/notification/ManagedServices;->trimApprovedListsAccordingToInstalledServices(I)V
 HSPLcom/android/server/notification/ManagedServices;->unbindFromServices(Landroid/util/SparseArray;)V
-PLcom/android/server/notification/ManagedServices;->unbindOtherUserServices(I)V
+HSPLcom/android/server/notification/ManagedServices;->unbindOtherUserServices(I)V
 PLcom/android/server/notification/ManagedServices;->unbindService(Landroid/content/ServiceConnection;Landroid/content/ComponentName;I)V
 PLcom/android/server/notification/ManagedServices;->unregisterService(Landroid/content/ComponentName;I)V
 PLcom/android/server/notification/ManagedServices;->unregisterService(Landroid/os/IInterface;I)V
@@ -31997,19 +33217,19 @@
 HPLcom/android/server/notification/NASLearnMoreActivity;->showLearnMoreDialog()V
 HSPLcom/android/server/notification/NotificationAdjustmentExtractor;-><init>()V
 HSPLcom/android/server/notification/NotificationAdjustmentExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
-HPLcom/android/server/notification/NotificationAdjustmentExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationAdjustmentExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
 HSPLcom/android/server/notification/NotificationAdjustmentExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
 HSPLcom/android/server/notification/NotificationAdjustmentExtractor;->setZenHelper(Lcom/android/server/notification/ZenModeHelper;)V
 HSPLcom/android/server/notification/NotificationChannelExtractor;-><init>()V
 HSPLcom/android/server/notification/NotificationChannelExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
-HPLcom/android/server/notification/NotificationChannelExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/RankingConfig;Lcom/android/server/notification/PreferencesHelper;
+HSPLcom/android/server/notification/NotificationChannelExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/RankingConfig;Lcom/android/server/notification/PreferencesHelper;
 HSPLcom/android/server/notification/NotificationChannelExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
 HSPLcom/android/server/notification/NotificationChannelExtractor;->setZenHelper(Lcom/android/server/notification/ZenModeHelper;)V
 HSPLcom/android/server/notification/NotificationChannelLogger$NotificationChannelEvent;-><clinit>()V
 HSPLcom/android/server/notification/NotificationChannelLogger$NotificationChannelEvent;-><init>(Ljava/lang/String;II)V
 PLcom/android/server/notification/NotificationChannelLogger$NotificationChannelEvent;->getBlocked(Z)Lcom/android/server/notification/NotificationChannelLogger$NotificationChannelEvent;
 PLcom/android/server/notification/NotificationChannelLogger$NotificationChannelEvent;->getCreated(Landroid/app/NotificationChannel;)Lcom/android/server/notification/NotificationChannelLogger$NotificationChannelEvent;
-PLcom/android/server/notification/NotificationChannelLogger$NotificationChannelEvent;->getDeleted(Landroid/app/NotificationChannel;)Lcom/android/server/notification/NotificationChannelLogger$NotificationChannelEvent;
+HSPLcom/android/server/notification/NotificationChannelLogger$NotificationChannelEvent;->getDeleted(Landroid/app/NotificationChannel;)Lcom/android/server/notification/NotificationChannelLogger$NotificationChannelEvent;
 HPLcom/android/server/notification/NotificationChannelLogger$NotificationChannelEvent;->getGroupUpdated(Z)Lcom/android/server/notification/NotificationChannelLogger$NotificationChannelEvent;
 HSPLcom/android/server/notification/NotificationChannelLogger$NotificationChannelEvent;->getId()I
 HSPLcom/android/server/notification/NotificationChannelLogger$NotificationChannelEvent;->getUpdated(Z)Lcom/android/server/notification/NotificationChannelLogger$NotificationChannelEvent;
@@ -32020,12 +33240,12 @@
 PLcom/android/server/notification/NotificationChannelLogger;->getIdHash(Landroid/app/NotificationChannelGroup;)I
 PLcom/android/server/notification/NotificationChannelLogger;->getImportance(Landroid/app/NotificationChannelGroup;)I
 PLcom/android/server/notification/NotificationChannelLogger;->getImportance(Z)I
-HSPLcom/android/server/notification/NotificationChannelLogger;->getLoggingImportance(Landroid/app/NotificationChannel;)I
+HSPLcom/android/server/notification/NotificationChannelLogger;->getLoggingImportance(Landroid/app/NotificationChannel;)I+]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;
 HSPLcom/android/server/notification/NotificationChannelLogger;->getLoggingImportance(Landroid/app/NotificationChannel;I)I+]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;
 PLcom/android/server/notification/NotificationChannelLogger;->logAppNotificationsAllowed(ILjava/lang/String;Z)V
 PLcom/android/server/notification/NotificationChannelLogger;->logNotificationChannel(Lcom/android/server/notification/NotificationChannelLogger$NotificationChannelEvent;Landroid/app/NotificationChannel;ILjava/lang/String;II)V
 PLcom/android/server/notification/NotificationChannelLogger;->logNotificationChannelCreated(Landroid/app/NotificationChannel;ILjava/lang/String;)V
-PLcom/android/server/notification/NotificationChannelLogger;->logNotificationChannelDeleted(Landroid/app/NotificationChannel;ILjava/lang/String;)V
+HSPLcom/android/server/notification/NotificationChannelLogger;->logNotificationChannelDeleted(Landroid/app/NotificationChannel;ILjava/lang/String;)V
 PLcom/android/server/notification/NotificationChannelLogger;->logNotificationChannelGroup(Landroid/app/NotificationChannelGroup;ILjava/lang/String;ZZ)V
 HPLcom/android/server/notification/NotificationChannelLogger;->logNotificationChannelGroup(Lcom/android/server/notification/NotificationChannelLogger$NotificationChannelEvent;Landroid/app/NotificationChannelGroup;ILjava/lang/String;Z)V
 PLcom/android/server/notification/NotificationChannelLogger;->logNotificationChannelGroupDeleted(Landroid/app/NotificationChannelGroup;ILjava/lang/String;)V
@@ -32057,15 +33277,15 @@
 HPLcom/android/server/notification/NotificationDelegate;->onNotificationClear(IILjava/lang/String;ILjava/lang/String;IILcom/android/internal/statusbar/NotificationVisibility;)V
 PLcom/android/server/notification/NotificationHistoryDatabase$$ExternalSyntheticLambda0;-><init>()V
 PLcom/android/server/notification/NotificationHistoryDatabase$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-PLcom/android/server/notification/NotificationHistoryDatabase$1;-><init>(Lcom/android/server/notification/NotificationHistoryDatabase;)V
-PLcom/android/server/notification/NotificationHistoryDatabase$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/notification/NotificationHistoryDatabase$1;-><init>(Lcom/android/server/notification/NotificationHistoryDatabase;)V
+HPLcom/android/server/notification/NotificationHistoryDatabase$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/notification/NotificationHistoryDatabase$RemoveChannelRunnable;-><init>(Lcom/android/server/notification/NotificationHistoryDatabase;Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/notification/NotificationHistoryDatabase$RemoveChannelRunnable;->run()V
+HPLcom/android/server/notification/NotificationHistoryDatabase$RemoveChannelRunnable;->run()V
 PLcom/android/server/notification/NotificationHistoryDatabase$RemoveConversationRunnable;-><init>(Lcom/android/server/notification/NotificationHistoryDatabase;Ljava/lang/String;Ljava/util/Set;)V
 HPLcom/android/server/notification/NotificationHistoryDatabase$RemoveConversationRunnable;->run()V
 PLcom/android/server/notification/NotificationHistoryDatabase$RemovePackageRunnable;-><init>(Lcom/android/server/notification/NotificationHistoryDatabase;Ljava/lang/String;)V
 PLcom/android/server/notification/NotificationHistoryDatabase$RemovePackageRunnable;->run()V
-PLcom/android/server/notification/NotificationHistoryDatabase$WriteBufferRunnable;-><init>(Lcom/android/server/notification/NotificationHistoryDatabase;)V
+HSPLcom/android/server/notification/NotificationHistoryDatabase$WriteBufferRunnable;-><init>(Lcom/android/server/notification/NotificationHistoryDatabase;)V
 PLcom/android/server/notification/NotificationHistoryDatabase$WriteBufferRunnable;->run()V
 PLcom/android/server/notification/NotificationHistoryDatabase$WriteBufferRunnable;->run(JLandroid/util/AtomicFile;)V
 PLcom/android/server/notification/NotificationHistoryDatabase;->$r8$lambda$WusY7wQm1vEW3s6f_GskFVqUAnM(Ljava/io/File;Ljava/io/File;)I
@@ -32076,8 +33296,8 @@
 PLcom/android/server/notification/NotificationHistoryDatabase;->-$$Nest$sfgetACTION_HISTORY_DELETION()Ljava/lang/String;
 PLcom/android/server/notification/NotificationHistoryDatabase;->-$$Nest$sfgetDEBUG()Z
 PLcom/android/server/notification/NotificationHistoryDatabase;->-$$Nest$smreadLocked(Landroid/util/AtomicFile;Landroid/app/NotificationHistory;Lcom/android/server/notification/NotificationHistoryFilter;)V
-PLcom/android/server/notification/NotificationHistoryDatabase;-><clinit>()V
-PLcom/android/server/notification/NotificationHistoryDatabase;-><init>(Landroid/content/Context;Landroid/os/Handler;Ljava/io/File;)V
+HSPLcom/android/server/notification/NotificationHistoryDatabase;-><clinit>()V
+HSPLcom/android/server/notification/NotificationHistoryDatabase;-><init>(Landroid/content/Context;Landroid/os/Handler;Ljava/io/File;)V
 HPLcom/android/server/notification/NotificationHistoryDatabase;->addNotification(Landroid/app/NotificationHistory$HistoricalNotification;)V
 PLcom/android/server/notification/NotificationHistoryDatabase;->checkVersionAndBuildLocked()V
 PLcom/android/server/notification/NotificationHistoryDatabase;->deleteConversations(Ljava/lang/String;Ljava/util/Set;)V
@@ -32094,12 +33314,12 @@
 PLcom/android/server/notification/NotificationHistoryDatabase;->readNotificationHistory()Landroid/app/NotificationHistory;
 PLcom/android/server/notification/NotificationHistoryDatabase;->removeFilePathFromHistory(Ljava/lang/String;)V
 PLcom/android/server/notification/NotificationHistoryDatabase;->safeParseLong(Ljava/lang/String;)J
-PLcom/android/server/notification/NotificationHistoryDatabase;->scheduleDeletion(Ljava/io/File;J)V
+HPLcom/android/server/notification/NotificationHistoryDatabase;->scheduleDeletion(Ljava/io/File;J)V
 PLcom/android/server/notification/NotificationHistoryDatabase;->scheduleDeletion(Ljava/io/File;JI)V
 PLcom/android/server/notification/NotificationHistoryDatabase;->unregisterFileCleanupReceiver()V
 PLcom/android/server/notification/NotificationHistoryDatabase;->writeLocked(Landroid/util/AtomicFile;Landroid/app/NotificationHistory;)V
-PLcom/android/server/notification/NotificationHistoryDatabaseFactory;->create(Landroid/content/Context;Landroid/os/Handler;Ljava/io/File;)Lcom/android/server/notification/NotificationHistoryDatabase;
-PLcom/android/server/notification/NotificationHistoryFilter$Builder;-><init>()V
+HSPLcom/android/server/notification/NotificationHistoryDatabaseFactory;->create(Landroid/content/Context;Landroid/os/Handler;Ljava/io/File;)Lcom/android/server/notification/NotificationHistoryDatabase;
+HPLcom/android/server/notification/NotificationHistoryFilter$Builder;-><init>()V
 HPLcom/android/server/notification/NotificationHistoryFilter$Builder;->build()Lcom/android/server/notification/NotificationHistoryFilter;
 PLcom/android/server/notification/NotificationHistoryFilter;->-$$Nest$fputmChannel(Lcom/android/server/notification/NotificationHistoryFilter;Ljava/lang/String;)V
 PLcom/android/server/notification/NotificationHistoryFilter;->-$$Nest$fputmNotificationCount(Lcom/android/server/notification/NotificationHistoryFilter;I)V
@@ -32110,29 +33330,29 @@
 HPLcom/android/server/notification/NotificationHistoryFilter;->getPackage()Ljava/lang/String;
 HPLcom/android/server/notification/NotificationHistoryFilter;->isFiltering()Z
 HPLcom/android/server/notification/NotificationHistoryFilter;->matchesCountFilter(Landroid/app/NotificationHistory;)Z
-HPLcom/android/server/notification/NotificationHistoryFilter;->matchesPackageAndChannelFilter(Landroid/app/NotificationHistory$HistoricalNotification;)Z
-HPLcom/android/server/notification/NotificationHistoryManager$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/notification/NotificationHistoryManager;Landroid/app/NotificationHistory$HistoricalNotification;)V
-HPLcom/android/server/notification/NotificationHistoryManager$$ExternalSyntheticLambda0;->runOrThrow()V
+HPLcom/android/server/notification/NotificationHistoryFilter;->matchesPackageAndChannelFilter(Landroid/app/NotificationHistory$HistoricalNotification;)Z+]Lcom/android/server/notification/NotificationHistoryFilter;Lcom/android/server/notification/NotificationHistoryFilter;
+HSPLcom/android/server/notification/NotificationHistoryManager$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/notification/NotificationHistoryManager;Landroid/app/NotificationHistory$HistoricalNotification;)V
+HSPLcom/android/server/notification/NotificationHistoryManager$$ExternalSyntheticLambda0;->runOrThrow()V
 HSPLcom/android/server/notification/NotificationHistoryManager$SettingsObserver;-><init>(Lcom/android/server/notification/NotificationHistoryManager;Landroid/os/Handler;)V
 HSPLcom/android/server/notification/NotificationHistoryManager$SettingsObserver;->observe()V
 PLcom/android/server/notification/NotificationHistoryManager$SettingsObserver;->onChange(ZLandroid/net/Uri;I)V
 HSPLcom/android/server/notification/NotificationHistoryManager$SettingsObserver;->update(Landroid/net/Uri;I)V
-HPLcom/android/server/notification/NotificationHistoryManager;->$r8$lambda$KjgV1fTearQVkcQld8gBrXUjqIA(Lcom/android/server/notification/NotificationHistoryManager;Landroid/app/NotificationHistory$HistoricalNotification;)V
+HSPLcom/android/server/notification/NotificationHistoryManager;->$r8$lambda$KjgV1fTearQVkcQld8gBrXUjqIA(Lcom/android/server/notification/NotificationHistoryManager;Landroid/app/NotificationHistory$HistoricalNotification;)V
 HSPLcom/android/server/notification/NotificationHistoryManager;->-$$Nest$fgetmContext(Lcom/android/server/notification/NotificationHistoryManager;)Landroid/content/Context;
 HSPLcom/android/server/notification/NotificationHistoryManager;->-$$Nest$fgetmLock(Lcom/android/server/notification/NotificationHistoryManager;)Ljava/lang/Object;
 HSPLcom/android/server/notification/NotificationHistoryManager;->-$$Nest$fgetmUserManager(Lcom/android/server/notification/NotificationHistoryManager;)Landroid/os/UserManager;
 HSPLcom/android/server/notification/NotificationHistoryManager;-><clinit>()V
 HSPLcom/android/server/notification/NotificationHistoryManager;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
-HPLcom/android/server/notification/NotificationHistoryManager;->addNotification(Landroid/app/NotificationHistory$HistoricalNotification;)V
+HSPLcom/android/server/notification/NotificationHistoryManager;->addNotification(Landroid/app/NotificationHistory$HistoricalNotification;)V
 HPLcom/android/server/notification/NotificationHistoryManager;->deleteConversations(Ljava/lang/String;ILjava/util/Set;)V
-PLcom/android/server/notification/NotificationHistoryManager;->deleteNotificationChannel(Ljava/lang/String;ILjava/lang/String;)V
+HSPLcom/android/server/notification/NotificationHistoryManager;->deleteNotificationChannel(Ljava/lang/String;ILjava/lang/String;)V
 PLcom/android/server/notification/NotificationHistoryManager;->deleteNotificationHistoryItem(Ljava/lang/String;IJ)V
 PLcom/android/server/notification/NotificationHistoryManager;->disableHistory(Lcom/android/server/notification/NotificationHistoryDatabase;I)V
 PLcom/android/server/notification/NotificationHistoryManager;->doesHistoryExistForUser(I)Z
 PLcom/android/server/notification/NotificationHistoryManager;->getPendingPackageRemovalsForUser(I)Ljava/util/List;
 HSPLcom/android/server/notification/NotificationHistoryManager;->getUserHistoryAndInitializeIfNeededLocked(I)Lcom/android/server/notification/NotificationHistoryDatabase;
 PLcom/android/server/notification/NotificationHistoryManager;->isUserUnlocked(I)Z
-HPLcom/android/server/notification/NotificationHistoryManager;->lambda$addNotification$0(Landroid/app/NotificationHistory$HistoricalNotification;)V
+HSPLcom/android/server/notification/NotificationHistoryManager;->lambda$addNotification$0(Landroid/app/NotificationHistory$HistoricalNotification;)V
 HSPLcom/android/server/notification/NotificationHistoryManager;->onBootPhaseAppsCanStart()V
 HSPLcom/android/server/notification/NotificationHistoryManager;->onHistoryEnabledChanged(IZ)V
 PLcom/android/server/notification/NotificationHistoryManager;->onPackageRemoved(ILjava/lang/String;)V
@@ -32146,7 +33366,7 @@
 HPLcom/android/server/notification/NotificationHistoryProtoHelper;->read(Ljava/io/InputStream;Landroid/app/NotificationHistory;Lcom/android/server/notification/NotificationHistoryFilter;)V+]Landroid/util/proto/ProtoInputStream;Landroid/util/proto/ProtoInputStream;]Lcom/android/server/notification/NotificationHistoryFilter;Lcom/android/server/notification/NotificationHistoryFilter;]Landroid/app/NotificationHistory;Landroid/app/NotificationHistory;
 HPLcom/android/server/notification/NotificationHistoryProtoHelper;->readNotification(Landroid/util/proto/ProtoInputStream;Ljava/util/List;)Landroid/app/NotificationHistory$HistoricalNotification;+]Landroid/app/NotificationHistory$HistoricalNotification$Builder;Landroid/app/NotificationHistory$HistoricalNotification$Builder;]Landroid/util/proto/ProtoInputStream;Landroid/util/proto/ProtoInputStream;]Ljava/util/List;Ljava/util/ArrayList;
 HPLcom/android/server/notification/NotificationHistoryProtoHelper;->readNotification(Landroid/util/proto/ProtoInputStream;Ljava/util/List;Landroid/app/NotificationHistory;Lcom/android/server/notification/NotificationHistoryFilter;)V+]Landroid/util/proto/ProtoInputStream;Landroid/util/proto/ProtoInputStream;]Lcom/android/server/notification/NotificationHistoryFilter;Lcom/android/server/notification/NotificationHistoryFilter;]Landroid/app/NotificationHistory;Landroid/app/NotificationHistory;
-PLcom/android/server/notification/NotificationHistoryProtoHelper;->readStringPool(Landroid/util/proto/ProtoInputStream;)Ljava/util/List;
+HPLcom/android/server/notification/NotificationHistoryProtoHelper;->readStringPool(Landroid/util/proto/ProtoInputStream;)Ljava/util/List;
 HPLcom/android/server/notification/NotificationHistoryProtoHelper;->write(Ljava/io/OutputStream;Landroid/app/NotificationHistory;I)V
 HPLcom/android/server/notification/NotificationHistoryProtoHelper;->writeIcon(Landroid/util/proto/ProtoOutputStream;Landroid/app/NotificationHistory$HistoricalNotification;)V
 HPLcom/android/server/notification/NotificationHistoryProtoHelper;->writeNotification(Landroid/util/proto/ProtoOutputStream;[Ljava/lang/String;Landroid/app/NotificationHistory$HistoricalNotification;)V
@@ -32157,7 +33377,7 @@
 HSPLcom/android/server/notification/NotificationIntrusivenessExtractor;-><clinit>()V
 HSPLcom/android/server/notification/NotificationIntrusivenessExtractor;-><init>()V
 HSPLcom/android/server/notification/NotificationIntrusivenessExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
-HPLcom/android/server/notification/NotificationIntrusivenessExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationIntrusivenessExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
 HSPLcom/android/server/notification/NotificationIntrusivenessExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
 HSPLcom/android/server/notification/NotificationIntrusivenessExtractor;->setZenHelper(Lcom/android/server/notification/ZenModeHelper;)V
 PLcom/android/server/notification/NotificationManagerInternal;->areNotificationsEnabledForPackage(Ljava/lang/String;I)Z
@@ -32186,10 +33406,12 @@
 PLcom/android/server/notification/NotificationManagerService$$ExternalSyntheticLambda7;->runOrThrow()V
 HPLcom/android/server/notification/NotificationManagerService$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/notification/NotificationManagerService;ZLandroid/app/Notification;ILjava/lang/String;I)V
 HPLcom/android/server/notification/NotificationManagerService$$ExternalSyntheticLambda8;->run()V
-HPLcom/android/server/notification/NotificationManagerService$$ExternalSyntheticLambda9;-><init>()V
+HSPLcom/android/server/notification/NotificationManagerService$$ExternalSyntheticLambda9;-><init>()V
 PLcom/android/server/notification/NotificationManagerService$$ExternalSyntheticLambda9;->apply(I)Z
-HPLcom/android/server/notification/NotificationManagerService$10$1;-><init>(Lcom/android/server/notification/NotificationManagerService$10;Ljava/lang/String;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;[Landroid/service/notification/Condition;)V
-HPLcom/android/server/notification/NotificationManagerService$10$1;->run()V
+PLcom/android/server/notification/NotificationManagerService$1$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/notification/NotificationManagerService$1;IILjava/lang/String;Ljava/lang/String;ILjava/lang/String;)V
+PLcom/android/server/notification/NotificationManagerService$1$$ExternalSyntheticLambda0;->runOrThrow()V
+HSPLcom/android/server/notification/NotificationManagerService$10$1;-><init>(Lcom/android/server/notification/NotificationManagerService$10;Ljava/lang/String;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;[Landroid/service/notification/Condition;)V
+HSPLcom/android/server/notification/NotificationManagerService$10$1;->run()V
 PLcom/android/server/notification/NotificationManagerService$10;->$r8$lambda$zrOOiv_7xN_rAEIQ7FlvzLDL9rI(Lcom/android/server/notification/NotificationManagerService$10;Ljava/util/ArrayList;)V
 HSPLcom/android/server/notification/NotificationManagerService$10;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
 PLcom/android/server/notification/NotificationManagerService$10;->addAutomaticZenRule(Landroid/app/AutomaticZenRule;Ljava/lang/String;)Ljava/lang/String;
@@ -32200,8 +33422,8 @@
 PLcom/android/server/notification/NotificationManagerService$10;->areBubblesAllowed(Ljava/lang/String;)Z
 PLcom/android/server/notification/NotificationManagerService$10;->areBubblesEnabled(Landroid/os/UserHandle;)Z
 HPLcom/android/server/notification/NotificationManagerService$10;->areNotificationsEnabled(Ljava/lang/String;)Z+]Lcom/android/server/notification/NotificationManagerService$10;Lcom/android/server/notification/NotificationManagerService$10;
-HPLcom/android/server/notification/NotificationManagerService$10;->areNotificationsEnabledForPackage(Ljava/lang/String;I)Z+]Lcom/android/server/notification/NotificationManagerService$10;Lcom/android/server/notification/NotificationManagerService$10;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/SystemService;Lcom/android/server/notification/NotificationManagerService;]Landroid/content/Context;Landroid/app/ContextImpl;
-HPLcom/android/server/notification/NotificationManagerService$10;->canNotifyAsPackage(Ljava/lang/String;Ljava/lang/String;I)Z+]Landroid/os/UserHandle;Landroid/os/UserHandle;]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/SystemService;Lcom/android/server/notification/NotificationManagerService;]Landroid/content/Context;Landroid/app/ContextImpl;
+HPLcom/android/server/notification/NotificationManagerService$10;->areNotificationsEnabledForPackage(Ljava/lang/String;I)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/notification/NotificationManagerService$10;Lcom/android/server/notification/NotificationManagerService$10;]Lcom/android/server/SystemService;Lcom/android/server/notification/NotificationManagerService;]Landroid/content/Context;Landroid/app/ContextImpl;
+HSPLcom/android/server/notification/NotificationManagerService$10;->canNotifyAsPackage(Ljava/lang/String;Ljava/lang/String;I)Z+]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/SystemService;Lcom/android/server/notification/NotificationManagerService;]Landroid/content/Context;Landroid/app/ContextImpl;
 HPLcom/android/server/notification/NotificationManagerService$10;->canShowBadge(Ljava/lang/String;I)Z
 HPLcom/android/server/notification/NotificationManagerService$10;->cancelAllNotifications(Ljava/lang/String;I)V
 PLcom/android/server/notification/NotificationManagerService$10;->cancelNotificationFromListenerLocked(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;IILjava/lang/String;Ljava/lang/String;III)V
@@ -32214,21 +33436,21 @@
 PLcom/android/server/notification/NotificationManagerService$10;->clearData(Ljava/lang/String;IZ)V
 HPLcom/android/server/notification/NotificationManagerService$10;->clearRequestedListenerHints(Landroid/service/notification/INotificationListener;)V
 PLcom/android/server/notification/NotificationManagerService$10;->createConversationNotificationChannelForPackage(Ljava/lang/String;ILandroid/app/NotificationChannel;Ljava/lang/String;)V
-HPLcom/android/server/notification/NotificationManagerService$10;->createNotificationChannelGroups(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/pm/ParceledListSlice;Landroid/content/pm/ParceledListSlice;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
+HPLcom/android/server/notification/NotificationManagerService$10;->createNotificationChannelGroups(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V+]Ljava/util/List;Ljava/util/ArrayList;,Ljava/util/Arrays$ArrayList;]Landroid/content/pm/ParceledListSlice;Landroid/content/pm/ParceledListSlice;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
 HSPLcom/android/server/notification/NotificationManagerService$10;->createNotificationChannels(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;)V+]Lcom/android/server/notification/NotificationManagerService$10;Lcom/android/server/notification/NotificationManagerService$10;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;
 PLcom/android/server/notification/NotificationManagerService$10;->createNotificationChannelsForPackage(Ljava/lang/String;ILandroid/content/pm/ParceledListSlice;)V
 PLcom/android/server/notification/NotificationManagerService$10;->createNotificationChannelsImpl(Ljava/lang/String;ILandroid/content/pm/ParceledListSlice;)V
-HSPLcom/android/server/notification/NotificationManagerService$10;->createNotificationChannelsImpl(Ljava/lang/String;ILandroid/content/pm/ParceledListSlice;I)V+]Landroid/os/Handler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Ljava/util/List;Ljava/util/Arrays$ArrayList;,Ljava/util/ArrayList;,Ljava/util/Collections$EmptyList;]Landroid/content/pm/ParceledListSlice;Landroid/content/pm/ParceledListSlice;]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/ConditionProviders;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
-HSPLcom/android/server/notification/NotificationManagerService$10;->deleteNotificationChannel(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/notification/NotificationManagerService$10;->createNotificationChannelsImpl(Ljava/lang/String;ILandroid/content/pm/ParceledListSlice;I)V+]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Ljava/util/List;Ljava/util/Arrays$ArrayList;,Ljava/util/ArrayList;,Ljava/util/Collections$EmptyList;]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/ConditionProviders;]Landroid/content/pm/ParceledListSlice;Landroid/content/pm/ParceledListSlice;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Landroid/os/Handler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;
+HSPLcom/android/server/notification/NotificationManagerService$10;->deleteNotificationChannel(Ljava/lang/String;Ljava/lang/String;)V+]Lcom/android/server/notification/NotificationManagerService$Archive;Lcom/android/server/notification/NotificationManagerService$Archive;]Lcom/android/server/notification/NotificationManagerService$10;Lcom/android/server/notification/NotificationManagerService$10;]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Lcom/android/server/notification/NotificationHistoryManager;Lcom/android/server/notification/NotificationHistoryManager;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
 PLcom/android/server/notification/NotificationManagerService$10;->deleteNotificationChannelGroup(Ljava/lang/String;Ljava/lang/String;)V
 HPLcom/android/server/notification/NotificationManagerService$10;->disallowAssistantAdjustment(Ljava/lang/String;)V
 HPLcom/android/server/notification/NotificationManagerService$10;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-HSPLcom/android/server/notification/NotificationManagerService$10;->enforceDeletingChannelHasNoFgService(Ljava/lang/String;ILjava/lang/String;)V
+HSPLcom/android/server/notification/NotificationManagerService$10;->enforceDeletingChannelHasNoFgService(Ljava/lang/String;ILjava/lang/String;)V+]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;
 HPLcom/android/server/notification/NotificationManagerService$10;->enforcePolicyAccess(ILjava/lang/String;)V
 HPLcom/android/server/notification/NotificationManagerService$10;->enforcePolicyAccess(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/notification/NotificationManagerService$10;->enforceSystemOrSystemUI(Ljava/lang/String;)V
 HPLcom/android/server/notification/NotificationManagerService$10;->enforceSystemOrSystemUIOrSamePackage(Ljava/lang/String;Ljava/lang/String;)V+]Lcom/android/server/SystemService;Lcom/android/server/notification/NotificationManagerService;]Landroid/content/Context;Landroid/app/ContextImpl;
-HPLcom/android/server/notification/NotificationManagerService$10;->enqueueNotificationWithTag(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/app/Notification;I)V+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
+HSPLcom/android/server/notification/NotificationManagerService$10;->enqueueNotificationWithTag(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/app/Notification;I)V+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
 PLcom/android/server/notification/NotificationManagerService$10;->enqueueTextToast(Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/CharSequence;IILandroid/app/ITransientNotificationCallback;)V
 PLcom/android/server/notification/NotificationManagerService$10;->enqueueToast(Ljava/lang/String;Landroid/os/IBinder;Landroid/app/ITransientNotification;II)V
 HPLcom/android/server/notification/NotificationManagerService$10;->enqueueToast(Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/CharSequence;Landroid/app/ITransientNotification;IILandroid/app/ITransientNotificationCallback;)V
@@ -32238,13 +33460,13 @@
 HPLcom/android/server/notification/NotificationManagerService$10;->getAllowedAssistantAdjustments(Ljava/lang/String;)Ljava/util/List;
 PLcom/android/server/notification/NotificationManagerService$10;->getAllowedNotificationAssistant()Landroid/content/ComponentName;
 PLcom/android/server/notification/NotificationManagerService$10;->getAllowedNotificationAssistantForUser(I)Landroid/content/ComponentName;
-HSPLcom/android/server/notification/NotificationManagerService$10;->getAppActiveNotifications(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/notification/NotificationManagerService$10;Lcom/android/server/notification/NotificationManagerService$10;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Ljava/util/Collection;Ljava/util/Collections$EmptyList;,Landroid/util/MapCollections$ValuesCollection;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/Collections$EmptyIterator;,Landroid/util/MapCollections$ArrayIterator;]Lcom/android/server/notification/SnoozeHelper;Lcom/android/server/notification/SnoozeHelper;
-PLcom/android/server/notification/NotificationManagerService$10;->getAutomaticZenRule(Ljava/lang/String;)Landroid/app/AutomaticZenRule;
+HSPLcom/android/server/notification/NotificationManagerService$10;->getAppActiveNotifications(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/notification/NotificationManagerService$10;Lcom/android/server/notification/NotificationManagerService$10;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Ljava/util/Collection;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;,Landroid/util/MapCollections$ValuesCollection;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/Collections$EmptyIterator;,Ljava/util/ArrayList$Itr;,Landroid/util/MapCollections$ArrayIterator;]Lcom/android/server/notification/SnoozeHelper;Lcom/android/server/notification/SnoozeHelper;
+HPLcom/android/server/notification/NotificationManagerService$10;->getAutomaticZenRule(Ljava/lang/String;)Landroid/app/AutomaticZenRule;
 PLcom/android/server/notification/NotificationManagerService$10;->getBackupPayload(I)[B
 HPLcom/android/server/notification/NotificationManagerService$10;->getBlockedChannelCount(Ljava/lang/String;I)I
 HPLcom/android/server/notification/NotificationManagerService$10;->getBubblePreferenceForPackage(Ljava/lang/String;I)I
 HSPLcom/android/server/notification/NotificationManagerService$10;->getConsolidatedNotificationPolicy()Landroid/app/NotificationManager$Policy;
-HPLcom/android/server/notification/NotificationManagerService$10;->getConversationNotificationChannel(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;ZLjava/lang/String;)Landroid/app/NotificationChannel;+]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Lcom/android/server/notification/NotificationManagerService$10;Lcom/android/server/notification/NotificationManagerService$10;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
+HSPLcom/android/server/notification/NotificationManagerService$10;->getConversationNotificationChannel(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;ZLjava/lang/String;)Landroid/app/NotificationChannel;+]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Lcom/android/server/notification/NotificationManagerService$10;Lcom/android/server/notification/NotificationManagerService$10;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
 PLcom/android/server/notification/NotificationManagerService$10;->getConversations(Z)Landroid/content/pm/ParceledListSlice;
 HPLcom/android/server/notification/NotificationManagerService$10;->getConversationsForPackage(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
 PLcom/android/server/notification/NotificationManagerService$10;->getDefaultNotificationAssistant()Landroid/content/ComponentName;
@@ -32256,7 +33478,7 @@
 PLcom/android/server/notification/NotificationManagerService$10;->getHistoricalNotificationsWithAttribution(Ljava/lang/String;Ljava/lang/String;IZ)[Landroid/service/notification/StatusBarNotification;
 PLcom/android/server/notification/NotificationManagerService$10;->getInterruptionFilterFromListener(Landroid/service/notification/INotificationListener;)I
 PLcom/android/server/notification/NotificationManagerService$10;->getListenerFilter(Landroid/content/ComponentName;I)Landroid/service/notification/NotificationListenerFilter;
-HPLcom/android/server/notification/NotificationManagerService$10;->getNotificationChannel(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Landroid/app/NotificationChannel;+]Lcom/android/server/notification/NotificationManagerService$10;Lcom/android/server/notification/NotificationManagerService$10;
+HSPLcom/android/server/notification/NotificationManagerService$10;->getNotificationChannel(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Landroid/app/NotificationChannel;+]Lcom/android/server/notification/NotificationManagerService$10;Lcom/android/server/notification/NotificationManagerService$10;
 PLcom/android/server/notification/NotificationManagerService$10;->getNotificationChannelForPackage(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Z)Landroid/app/NotificationChannel;
 HPLcom/android/server/notification/NotificationManagerService$10;->getNotificationChannelGroup(Ljava/lang/String;Ljava/lang/String;)Landroid/app/NotificationChannelGroup;+]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;
 PLcom/android/server/notification/NotificationManagerService$10;->getNotificationChannelGroupForPackage(Ljava/lang/String;Ljava/lang/String;I)Landroid/app/NotificationChannelGroup;
@@ -32271,10 +33493,10 @@
 PLcom/android/server/notification/NotificationManagerService$10;->getNumNotificationChannelsForPackage(Ljava/lang/String;IZ)I
 HPLcom/android/server/notification/NotificationManagerService$10;->getPackageImportance(Ljava/lang/String;)I
 PLcom/android/server/notification/NotificationManagerService$10;->getPopulatedNotificationChannelGroupForPackage(Ljava/lang/String;ILjava/lang/String;Z)Landroid/app/NotificationChannelGroup;
-PLcom/android/server/notification/NotificationManagerService$10;->getPrivateNotificationsAllowed()Z
+HSPLcom/android/server/notification/NotificationManagerService$10;->getPrivateNotificationsAllowed()Z
 PLcom/android/server/notification/NotificationManagerService$10;->getRuleInstanceCount(Landroid/content/ComponentName;)I
 PLcom/android/server/notification/NotificationManagerService$10;->getSnoozedNotificationsFromListener(Landroid/service/notification/INotificationListener;I)Landroid/content/pm/ParceledListSlice;
-PLcom/android/server/notification/NotificationManagerService$10;->getUidForPackageAndUser(Ljava/lang/String;Landroid/os/UserHandle;)I
+HPLcom/android/server/notification/NotificationManagerService$10;->getUidForPackageAndUser(Ljava/lang/String;Landroid/os/UserHandle;)I
 HSPLcom/android/server/notification/NotificationManagerService$10;->getZenMode()I+]Lcom/android/server/notification/ZenModeHelper;Lcom/android/server/notification/ZenModeHelper;
 HSPLcom/android/server/notification/NotificationManagerService$10;->getZenModeConfig()Landroid/service/notification/ZenModeConfig;
 PLcom/android/server/notification/NotificationManagerService$10;->getZenRules()Ljava/util/List;
@@ -32293,19 +33515,19 @@
 HPLcom/android/server/notification/NotificationManagerService$10;->isPermissionFixed(Ljava/lang/String;I)Z
 PLcom/android/server/notification/NotificationManagerService$10;->lambda$getActiveNotificationsWithAttribution$0(Ljava/util/ArrayList;)V
 PLcom/android/server/notification/NotificationManagerService$10;->matchesCallFilter(Landroid/os/Bundle;)Z
-HPLcom/android/server/notification/NotificationManagerService$10;->notifyConditions(Ljava/lang/String;Landroid/service/notification/IConditionProvider;[Landroid/service/notification/Condition;)V
+HSPLcom/android/server/notification/NotificationManagerService$10;->notifyConditions(Ljava/lang/String;Landroid/service/notification/IConditionProvider;[Landroid/service/notification/Condition;)V
 PLcom/android/server/notification/NotificationManagerService$10;->onShellCommand(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;Landroid/os/ShellCallback;Landroid/os/ResultReceiver;)V
 PLcom/android/server/notification/NotificationManagerService$10;->onlyHasDefaultChannel(Ljava/lang/String;I)Z
 HSPLcom/android/server/notification/NotificationManagerService$10;->registerListener(Landroid/service/notification/INotificationListener;Landroid/content/ComponentName;I)V
 PLcom/android/server/notification/NotificationManagerService$10;->removeAutomaticZenRule(Ljava/lang/String;)Z
-PLcom/android/server/notification/NotificationManagerService$10;->removeAutomaticZenRules(Ljava/lang/String;)Z
+HPLcom/android/server/notification/NotificationManagerService$10;->removeAutomaticZenRules(Ljava/lang/String;)Z
 HPLcom/android/server/notification/NotificationManagerService$10;->requestBindListener(Landroid/content/ComponentName;)V
 HPLcom/android/server/notification/NotificationManagerService$10;->requestBindProvider(Landroid/content/ComponentName;)V
-PLcom/android/server/notification/NotificationManagerService$10;->requestHintsFromListener(Landroid/service/notification/INotificationListener;I)V
+HPLcom/android/server/notification/NotificationManagerService$10;->requestHintsFromListener(Landroid/service/notification/INotificationListener;I)V
 PLcom/android/server/notification/NotificationManagerService$10;->requestUnbindListener(Landroid/service/notification/INotificationListener;)V
 HPLcom/android/server/notification/NotificationManagerService$10;->requestUnbindProvider(Landroid/service/notification/IConditionProvider;)V
 HPLcom/android/server/notification/NotificationManagerService$10;->sanitizeSbn(Ljava/lang/String;ILandroid/service/notification/StatusBarNotification;)Landroid/service/notification/StatusBarNotification;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/Notification;Landroid/app/Notification;
-PLcom/android/server/notification/NotificationManagerService$10;->setAutomaticZenRuleState(Ljava/lang/String;Landroid/service/notification/Condition;)V
+HPLcom/android/server/notification/NotificationManagerService$10;->setAutomaticZenRuleState(Ljava/lang/String;Landroid/service/notification/Condition;)V
 PLcom/android/server/notification/NotificationManagerService$10;->setBubblesAllowed(Ljava/lang/String;II)V
 PLcom/android/server/notification/NotificationManagerService$10;->setHideSilentStatusIcons(Z)V
 PLcom/android/server/notification/NotificationManagerService$10;->setInterruptionFilter(Ljava/lang/String;I)V
@@ -32318,10 +33540,11 @@
 HPLcom/android/server/notification/NotificationManagerService$10;->setNotificationListenerAccessGrantedForUser(Landroid/content/ComponentName;IZZ)V
 PLcom/android/server/notification/NotificationManagerService$10;->setNotificationPolicy(Ljava/lang/String;Landroid/app/NotificationManager$Policy;)V
 PLcom/android/server/notification/NotificationManagerService$10;->setNotificationPolicyAccessGranted(Ljava/lang/String;Z)V
-PLcom/android/server/notification/NotificationManagerService$10;->setNotificationPolicyAccessGrantedForUser(Ljava/lang/String;IZ)V
+HPLcom/android/server/notification/NotificationManagerService$10;->setNotificationPolicyAccessGrantedForUser(Ljava/lang/String;IZ)V
 PLcom/android/server/notification/NotificationManagerService$10;->setNotificationsEnabledForPackage(Ljava/lang/String;IZ)V
 HPLcom/android/server/notification/NotificationManagerService$10;->setNotificationsShownFromListener(Landroid/service/notification/INotificationListener;[Ljava/lang/String;)V
 PLcom/android/server/notification/NotificationManagerService$10;->setPrivateNotificationsAllowed(Z)V
+PLcom/android/server/notification/NotificationManagerService$10;->setShowBadge(Ljava/lang/String;IZ)V
 PLcom/android/server/notification/NotificationManagerService$10;->setToastRateLimitingEnabled(Z)V
 PLcom/android/server/notification/NotificationManagerService$10;->setZenMode(ILandroid/net/Uri;Ljava/lang/String;)V
 PLcom/android/server/notification/NotificationManagerService$10;->shouldHideSilentStatusIcons(Ljava/lang/String;)Z
@@ -32334,9 +33557,9 @@
 HPLcom/android/server/notification/NotificationManagerService$10;->updateAutomaticZenRule(Ljava/lang/String;Landroid/app/AutomaticZenRule;)Z
 PLcom/android/server/notification/NotificationManagerService$10;->updateNotificationChannelForPackage(Ljava/lang/String;ILandroid/app/NotificationChannel;)V
 PLcom/android/server/notification/NotificationManagerService$10;->updateNotificationChannelGroupForPackage(Ljava/lang/String;ILandroid/app/NotificationChannelGroup;)V
-PLcom/android/server/notification/NotificationManagerService$10;->verifyPrivilegedListener(Landroid/service/notification/INotificationListener;Landroid/os/UserHandle;Z)V
-PLcom/android/server/notification/NotificationManagerService$11$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/notification/NotificationManagerService$11;Ljava/lang/String;II)V
-PLcom/android/server/notification/NotificationManagerService$11$$ExternalSyntheticLambda0;->run()V
+HPLcom/android/server/notification/NotificationManagerService$10;->verifyPrivilegedListener(Landroid/service/notification/INotificationListener;Landroid/os/UserHandle;Z)V
+HPLcom/android/server/notification/NotificationManagerService$11$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/notification/NotificationManagerService$11;Ljava/lang/String;II)V
+HPLcom/android/server/notification/NotificationManagerService$11$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/notification/NotificationManagerService$11;->$r8$lambda$gs0fZI3EWuvvjhTnS6MlTcwEgYY(Lcom/android/server/notification/NotificationManagerService$11;Ljava/lang/String;II)V
 HSPLcom/android/server/notification/NotificationManagerService$11;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
 HSPLcom/android/server/notification/NotificationManagerService$11;->areNotificationsEnabledForPackage(Ljava/lang/String;I)Z
@@ -32344,7 +33567,7 @@
 HPLcom/android/server/notification/NotificationManagerService$11;->enqueueNotification(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;ILandroid/app/Notification;I)V
 HPLcom/android/server/notification/NotificationManagerService$11;->getNotificationChannel(Ljava/lang/String;ILjava/lang/String;)Landroid/app/NotificationChannel;
 HPLcom/android/server/notification/NotificationManagerService$11;->getNotificationChannelGroup(Ljava/lang/String;ILjava/lang/String;)Landroid/app/NotificationChannelGroup;
-PLcom/android/server/notification/NotificationManagerService$11;->getNumNotificationChannelsForPackage(Ljava/lang/String;IZ)I
+HPLcom/android/server/notification/NotificationManagerService$11;->getNumNotificationChannelsForPackage(Ljava/lang/String;IZ)I
 HPLcom/android/server/notification/NotificationManagerService$11;->lambda$removeForegroundServiceFlagFromNotification$0(Ljava/lang/String;II)V
 PLcom/android/server/notification/NotificationManagerService$11;->onConversationRemoved(Ljava/lang/String;ILjava/util/Set;)V
 HPLcom/android/server/notification/NotificationManagerService$11;->removeForegroundServiceFlagFromNotification(Ljava/lang/String;II)V
@@ -32356,12 +33579,12 @@
 PLcom/android/server/notification/NotificationManagerService$13;->run()V
 HPLcom/android/server/notification/NotificationManagerService$14;-><init>(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;)V
 HPLcom/android/server/notification/NotificationManagerService$14;->run()V
-HPLcom/android/server/notification/NotificationManagerService$15$$ExternalSyntheticLambda0;-><init>(II)V
+HSPLcom/android/server/notification/NotificationManagerService$15$$ExternalSyntheticLambda0;-><init>(II)V
 HPLcom/android/server/notification/NotificationManagerService$15$$ExternalSyntheticLambda0;->apply(I)Z
 HPLcom/android/server/notification/NotificationManagerService$15;->$r8$lambda$uhN0Uv7Gm10MZbHY2JPbkId0Nro(III)Z
 HSPLcom/android/server/notification/NotificationManagerService$15;-><init>(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;IILjava/lang/String;IIIIZLjava/lang/String;J)V
 HPLcom/android/server/notification/NotificationManagerService$15;->lambda$run$0(III)Z
-HPLcom/android/server/notification/NotificationManagerService$15;->run()V
+HSPLcom/android/server/notification/NotificationManagerService$15;->run()V+]Lcom/android/server/notification/SnoozeHelper;Lcom/android/server/notification/SnoozeHelper;
 PLcom/android/server/notification/NotificationManagerService$16$$ExternalSyntheticLambda0;-><init>(I)V
 PLcom/android/server/notification/NotificationManagerService$16$$ExternalSyntheticLambda0;->apply(I)Z
 PLcom/android/server/notification/NotificationManagerService$16;->$r8$lambda$rQk4G5YxAtaqxjNmzASVhs3aYtc(II)Z
@@ -32386,7 +33609,7 @@
 PLcom/android/server/notification/NotificationManagerService$1;->onNotificationFeedbackReceived(Ljava/lang/String;Landroid/os/Bundle;)V
 PLcom/android/server/notification/NotificationManagerService$1;->onNotificationSettingsViewed(Ljava/lang/String;)V
 PLcom/android/server/notification/NotificationManagerService$1;->onNotificationSmartReplySent(Ljava/lang/String;ILjava/lang/CharSequence;IZ)V
-PLcom/android/server/notification/NotificationManagerService$1;->onNotificationSmartSuggestionsAdded(Ljava/lang/String;IIZZ)V
+HPLcom/android/server/notification/NotificationManagerService$1;->onNotificationSmartSuggestionsAdded(Ljava/lang/String;IIZZ)V
 HPLcom/android/server/notification/NotificationManagerService$1;->onNotificationVisibilityChanged([Lcom/android/internal/statusbar/NotificationVisibility;[Lcom/android/internal/statusbar/NotificationVisibility;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/internal/statusbar/NotificationVisibility;Lcom/android/internal/statusbar/NotificationVisibility;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;]Lcom/android/internal/statusbar/NotificationVisibility$NotificationLocation;Lcom/android/internal/statusbar/NotificationVisibility$NotificationLocation;
 HPLcom/android/server/notification/NotificationManagerService$1;->onPanelHidden()V
 HPLcom/android/server/notification/NotificationManagerService$1;->onPanelRevealed(ZI)V
@@ -32397,11 +33620,11 @@
 HSPLcom/android/server/notification/NotificationManagerService$3;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
 PLcom/android/server/notification/NotificationManagerService$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/notification/NotificationManagerService$4;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
-PLcom/android/server/notification/NotificationManagerService$4;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/notification/NotificationManagerService$4;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/notification/NotificationManagerService$5;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
 HPLcom/android/server/notification/NotificationManagerService$5;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/notification/NotificationManagerService$WorkerHandler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Landroid/net/Uri;Landroid/net/Uri$OpaqueUri;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/notification/NotificationManagerService$6;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
-HPLcom/android/server/notification/NotificationManagerService$6;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/notification/NotificationManagerService$6;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/notification/NotificationManagerService$7$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/notification/NotificationManagerService$7;)V
 HSPLcom/android/server/notification/NotificationManagerService$7$$ExternalSyntheticLambda0;->runOrThrow()V
 PLcom/android/server/notification/NotificationManagerService$7$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/notification/NotificationManagerService$7;Ljava/lang/String;Ljava/lang/String;II)V
@@ -32426,21 +33649,21 @@
 PLcom/android/server/notification/NotificationManagerService$7;->onZenModeChanged()V
 HSPLcom/android/server/notification/NotificationManagerService$8;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
 HSPLcom/android/server/notification/NotificationManagerService$9;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
-PLcom/android/server/notification/NotificationManagerService$9;->addAutoGroup(Ljava/lang/String;)V
+HPLcom/android/server/notification/NotificationManagerService$9;->addAutoGroup(Ljava/lang/String;)V
 PLcom/android/server/notification/NotificationManagerService$9;->addAutoGroupSummary(ILjava/lang/String;Ljava/lang/String;Z)V
 PLcom/android/server/notification/NotificationManagerService$9;->removeAutoGroup(Ljava/lang/String;)V
 HPLcom/android/server/notification/NotificationManagerService$9;->removeAutoGroupSummary(ILjava/lang/String;)V
-HPLcom/android/server/notification/NotificationManagerService$9;->updateAutogroupSummary(ILjava/lang/String;Z)V+]Landroid/app/ActivityManager;Landroid/app/ActivityManager;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
+HSPLcom/android/server/notification/NotificationManagerService$9;->updateAutogroupSummary(ILjava/lang/String;Z)V+]Landroid/app/ActivityManager;Landroid/app/ActivityManager;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
 PLcom/android/server/notification/NotificationManagerService$Archive$$ExternalSyntheticLambda0;-><init>(Landroid/os/UserManager;Ljava/util/ArrayList;)V
 PLcom/android/server/notification/NotificationManagerService$Archive$$ExternalSyntheticLambda0;->runOrThrow()V
 PLcom/android/server/notification/NotificationManagerService$Archive;->$r8$lambda$ykV5XJKDiXqatyXXwRI4uzC8KeM(Landroid/os/UserManager;Ljava/util/ArrayList;)V
 HSPLcom/android/server/notification/NotificationManagerService$Archive;-><init>(I)V
-PLcom/android/server/notification/NotificationManagerService$Archive;->descendingIterator()Ljava/util/Iterator;
+HSPLcom/android/server/notification/NotificationManagerService$Archive;->descendingIterator()Ljava/util/Iterator;
 PLcom/android/server/notification/NotificationManagerService$Archive;->dumpImpl(Ljava/io/PrintWriter;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
 PLcom/android/server/notification/NotificationManagerService$Archive;->getArray(Landroid/os/UserManager;IZ)[Landroid/service/notification/StatusBarNotification;
 HPLcom/android/server/notification/NotificationManagerService$Archive;->lambda$getArray$0(Landroid/os/UserManager;Ljava/util/ArrayList;)V
 HPLcom/android/server/notification/NotificationManagerService$Archive;->record(Landroid/service/notification/StatusBarNotification;I)V
-PLcom/android/server/notification/NotificationManagerService$Archive;->removeChannelNotifications(Ljava/lang/String;ILjava/lang/String;)V
+HSPLcom/android/server/notification/NotificationManagerService$Archive;->removeChannelNotifications(Ljava/lang/String;ILjava/lang/String;)V
 PLcom/android/server/notification/NotificationManagerService$Archive;->toString()Ljava/lang/String;
 HSPLcom/android/server/notification/NotificationManagerService$Archive;->updateHistoryEnabled(IZ)V
 HPLcom/android/server/notification/NotificationManagerService$CancelNotificationRunnable$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/notification/NotificationManagerService$CancelNotificationRunnable;)V
@@ -32448,15 +33671,15 @@
 PLcom/android/server/notification/NotificationManagerService$CancelNotificationRunnable;->$r8$lambda$gX0CbWustzm_mz1YYQF5D4h-1ug(Lcom/android/server/notification/NotificationManagerService$CancelNotificationRunnable;I)Z
 HSPLcom/android/server/notification/NotificationManagerService$CancelNotificationRunnable;-><init>(Lcom/android/server/notification/NotificationManagerService;IILjava/lang/String;Ljava/lang/String;IIIZIIIILcom/android/server/notification/ManagedServices$ManagedServiceInfo;J)V
 PLcom/android/server/notification/NotificationManagerService$CancelNotificationRunnable;->lambda$run$0(I)Z
-HPLcom/android/server/notification/NotificationManagerService$CancelNotificationRunnable;->run()V+]Lcom/android/server/notification/ShortcutHelper;Lcom/android/server/notification/ShortcutHelper;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Lcom/android/server/notification/SnoozeHelper;Lcom/android/server/notification/SnoozeHelper;]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;]Lcom/android/server/notification/NotificationDelegate;Lcom/android/server/notification/NotificationManagerService$1;]Landroid/app/Notification$BubbleMetadata;Landroid/app/Notification$BubbleMetadata;]Landroid/app/Notification;Landroid/app/Notification;]Landroid/content/ComponentName;Landroid/content/ComponentName;
+HSPLcom/android/server/notification/NotificationManagerService$CancelNotificationRunnable;->run()V+]Lcom/android/server/notification/ShortcutHelper;Lcom/android/server/notification/ShortcutHelper;]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Landroid/app/Notification;Landroid/app/Notification;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Lcom/android/server/notification/SnoozeHelper;Lcom/android/server/notification/SnoozeHelper;]Lcom/android/server/notification/NotificationDelegate;Lcom/android/server/notification/NotificationManagerService$1;]Landroid/app/Notification$BubbleMetadata;Landroid/app/Notification$BubbleMetadata;
 PLcom/android/server/notification/NotificationManagerService$DumpFilter;-><init>()V
 PLcom/android/server/notification/NotificationManagerService$DumpFilter;->matches(Landroid/content/ComponentName;)Z
 PLcom/android/server/notification/NotificationManagerService$DumpFilter;->matches(Landroid/service/notification/StatusBarNotification;)Z
 PLcom/android/server/notification/NotificationManagerService$DumpFilter;->matches(Ljava/lang/String;)Z
 PLcom/android/server/notification/NotificationManagerService$DumpFilter;->parseFromArguments([Ljava/lang/String;)Lcom/android/server/notification/NotificationManagerService$DumpFilter;
 HPLcom/android/server/notification/NotificationManagerService$DumpFilter;->toString()Ljava/lang/String;
-HPLcom/android/server/notification/NotificationManagerService$EnqueueNotificationRunnable;-><init>(Lcom/android/server/notification/NotificationManagerService;ILcom/android/server/notification/NotificationRecord;ZJ)V
-HPLcom/android/server/notification/NotificationManagerService$EnqueueNotificationRunnable;->run()V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Handler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Ljava/lang/Long;Ljava/lang/Long;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;]Lcom/android/server/notification/SnoozeHelper;Lcom/android/server/notification/SnoozeHelper;
+HSPLcom/android/server/notification/NotificationManagerService$EnqueueNotificationRunnable;-><init>(Lcom/android/server/notification/NotificationManagerService;ILcom/android/server/notification/NotificationRecord;ZJ)V
+HSPLcom/android/server/notification/NotificationManagerService$EnqueueNotificationRunnable;->run()V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Handler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Ljava/lang/Long;Ljava/lang/Long;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;]Lcom/android/server/notification/SnoozeHelper;Lcom/android/server/notification/SnoozeHelper;
 HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Ljava/util/ArrayList;)V
 HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/notification/NotificationManagerService$NotificationAssistants$$ExternalSyntheticLambda10;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Ljava/lang/String;Landroid/app/Notification$Action;Z)V
@@ -32490,7 +33713,7 @@
 HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->$r8$lambda$kwTqvPHoM6SXKSUUHhJA5bwSETw(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)V
 HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->$r8$lambda$oAV6wGldB-oni-AiBe4-pC2KrgI(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Ljava/lang/String;ZLandroid/service/notification/INotificationListener;Lcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;)V
 PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->$r8$lambda$pDWexJx-2nhWzMi7F3_Fhe56uOk(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Ljava/lang/String;Ljava/lang/CharSequence;ZLandroid/service/notification/INotificationListener;Lcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;)V
-PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->$r8$lambda$shwiDeOfiV1MYiG8ZY-ARgF_wCQ(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Ljava/util/ArrayList;)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->$r8$lambda$shwiDeOfiV1MYiG8ZY-ARgF_wCQ(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Ljava/util/ArrayList;)V
 PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->$r8$lambda$wonhjqQvJSBN2WR2IJteYFYGOb4(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Ljava/lang/String;Landroid/app/Notification$Action;ZLandroid/service/notification/INotificationListener;Lcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;)V
 HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->-$$Nest$monNotificationEnqueuedLocked(Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Lcom/android/server/notification/NotificationRecord;)V
 HSPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;-><init>(Lcom/android/server/notification/NotificationManagerService;Landroid/content/Context;Ljava/lang/Object;Lcom/android/server/notification/ManagedServices$UserProfiles;Landroid/content/pm/IPackageManager;)V
@@ -32505,8 +33728,8 @@
 PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->getDefaultFromConfig()Landroid/content/ComponentName;
 HSPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->getRequiredPermission()Ljava/lang/String;
 HSPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->hasUserSet(I)Z
-PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->isAdjustmentAllowed(Ljava/lang/String;)Z
-HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->isEnabled()Z
+HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->isAdjustmentAllowed(Ljava/lang/String;)Z+]Ljava/util/Set;Landroid/util/ArraySet;
+HSPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->isEnabled()Z
 HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->isVerboseLogEnabled()Z
 HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->lambda$disallowAdjustmentType$1(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
 PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->lambda$notifyAssistantActionClicked$9(Ljava/lang/String;Landroid/app/Notification$Action;ZLandroid/service/notification/INotificationListener;Lcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;)V
@@ -32526,14 +33749,14 @@
 HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->notifyAssistantExpansionChangedLocked(Landroid/service/notification/StatusBarNotification;IZZ)V
 PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->notifyAssistantFeedbackReceived(Lcom/android/server/notification/NotificationRecord;Landroid/os/Bundle;)V
 HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->notifyAssistantLocked(Landroid/service/notification/StatusBarNotification;IZLjava/util/function/BiConsumer;)V+]Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;]Landroid/os/Handler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/server/notification/NotificationManagerService$TrimCache;Lcom/android/server/notification/NotificationManagerService$TrimCache;
-PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->notifyAssistantNotificationClicked(Lcom/android/server/notification/NotificationRecord;)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->notifyAssistantNotificationClicked(Lcom/android/server/notification/NotificationRecord;)V
 PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->notifyAssistantNotificationDirectReplyLocked(Lcom/android/server/notification/NotificationRecord;)V
 PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->notifyAssistantSuggestedReplySent(Landroid/service/notification/StatusBarNotification;ILjava/lang/CharSequence;Z)V
 HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->notifyAssistantVisibilityChangedLocked(Lcom/android/server/notification/NotificationRecord;Z)V+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;
 PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->notifyCapabilitiesChanged(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
 HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->notifySeen(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Ljava/util/ArrayList;)V
 HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->onNotificationEnqueuedLocked(Lcom/android/server/notification/NotificationRecord;)V+]Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;]Landroid/service/notification/INotificationListener;Landroid/service/notification/INotificationListener$Stub$Proxy;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;]Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/server/notification/NotificationManagerService$TrimCache;Lcom/android/server/notification/NotificationManagerService$TrimCache;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->onNotificationsSeenLocked(Ljava/util/ArrayList;)V
+HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->onNotificationsSeenLocked(Ljava/util/ArrayList;)V+]Landroid/os/Handler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;]Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->onPanelHidden()V
 HPLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->onPanelRevealed(I)V
 PLcom/android/server/notification/NotificationManagerService$NotificationAssistants;->onServiceAdded(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
@@ -32560,10 +33783,12 @@
 HPLcom/android/server/notification/NotificationManagerService$NotificationListeners$$ExternalSyntheticLambda5;->run()V
 HPLcom/android/server/notification/NotificationManagerService$NotificationListeners$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/NotificationRecord;)V
 HPLcom/android/server/notification/NotificationManagerService$NotificationListeners$$ExternalSyntheticLambda6;->run()V
-HPLcom/android/server/notification/NotificationManagerService$NotificationListeners$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;)V
-HPLcom/android/server/notification/NotificationManagerService$NotificationListeners$$ExternalSyntheticLambda8;->run()V
+PLcom/android/server/notification/NotificationManagerService$NotificationListeners$$ExternalSyntheticLambda7;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;)V
+PLcom/android/server/notification/NotificationManagerService$NotificationListeners$$ExternalSyntheticLambda7;->run()V
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;)V
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners$$ExternalSyntheticLambda8;->run()V
 PLcom/android/server/notification/NotificationManagerService$NotificationListeners$$ExternalSyntheticLambda9;-><init>(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)V
-PLcom/android/server/notification/NotificationManagerService$NotificationListeners$$ExternalSyntheticLambda9;->run()V
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners$$ExternalSyntheticLambda9;->run()V
 PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->$r8$lambda$-Nwt2O2sw8YQxRPzyt2YK7zuK8Y(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;)V
 PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->$r8$lambda$2bsL-tfH6lTDcJN-jsO2XsQjCPc(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)V
 HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->$r8$lambda$aB3gYctFUJKD2WRy5NoU5dNLddM(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/NotificationRankingUpdate;)V
@@ -32572,26 +33797,26 @@
 HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->$r8$lambda$nUy2X4Ic5cTvR0u3tL5YqpHokZc(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;Landroid/service/notification/NotificationStats;I)V
 PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->$r8$lambda$oT_4Vz4nDsE8Uj88klhHffR_eKo(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)V
 HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->$r8$lambda$p-dUnKyvdSVKHXpzE_-8gmmUZkQ(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannelGroup;I)V
-HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->$r8$lambda$vsVufO3iMWxUTJBCFrjxShdSydw(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;)V
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->$r8$lambda$vsVufO3iMWxUTJBCFrjxShdSydw(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;)V
 HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->$r8$lambda$x2rl_uHrDPXYjgXMK2sJ7l6OqyE(Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannel;I)V
 HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;-><init>(Lcom/android/server/notification/NotificationManagerService;Landroid/content/Context;Ljava/lang/Object;Lcom/android/server/notification/ManagedServices$UserProfiles;Landroid/content/pm/IPackageManager;)V
 PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->asInterface(Landroid/os/IBinder;)Landroid/os/IInterface;
 PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->checkType(Landroid/os/IInterface;)Z
-HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->ensureFilters(Landroid/content/pm/ServiceInfo;I)V
-PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->getBindFlags()I
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->ensureFilters(Landroid/content/pm/ServiceInfo;I)V
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->getBindFlags()I
 HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->getConfig()Lcom/android/server/notification/ManagedServices$Config;
-HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->getNotificationListenerFilter(Landroid/util/Pair;)Landroid/service/notification/NotificationListenerFilter;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
-HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->getOnNotificationPostedTrim(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)I
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->getNotificationListenerFilter(Landroid/util/Pair;)Landroid/service/notification/NotificationListenerFilter;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->getOnNotificationPostedTrim(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)I
 HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->getRequiredPermission()Ljava/lang/String;
 PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->getTypesFromStringList(Ljava/lang/String;)I
 PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->hasAllowedListener(Ljava/lang/String;I)Z
-HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->isListenerPackage(Ljava/lang/String;)Z+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->isListenerPackage(Ljava/lang/String;)Z+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->lambda$notifyInterruptionFilterChanged$7(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)V
 HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->lambda$notifyListenerHintsChangedLocked$6(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)V
-HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->lambda$notifyNotificationChannelChanged$8(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannel;I)V
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->lambda$notifyNotificationChannelChanged$8(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannel;I)V+]Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
 HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->lambda$notifyNotificationChannelGroupChanged$9(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannelGroup;I)V+]Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
 PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->lambda$notifyPostedLocked$1(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;)V
-HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->lambda$notifyPostedLocked$2(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;)V
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->lambda$notifyPostedLocked$2(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;)V
 HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->lambda$notifyRankingUpdateLocked$5(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/NotificationRankingUpdate;)V+]Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;
 HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->lambda$notifyRemovedLocked$3(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;Landroid/service/notification/NotificationStats;I)V
 HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->lambda$notifyRemovedLocked$4(Lcom/android/server/notification/NotificationRecord;)V
@@ -32602,16 +33827,16 @@
 PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyInterruptionFilterChanged(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)V
 PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyListenerHintsChanged(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)V
 PLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyListenerHintsChangedLocked(I)V
-HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyNotificationChannelChanged(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannel;I)V
-HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyNotificationChannelChanged(Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannel;I)V
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyNotificationChannelChanged(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannel;I)V+]Landroid/service/notification/INotificationListener;Landroid/service/notification/INotificationListener$Stub$Proxy;,Landroid/service/notification/NotificationListenerService$NotificationListenerWrapper;
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyNotificationChannelChanged(Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannel;I)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyNotificationChannelGroupChanged(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannelGroup;I)V+]Landroid/service/notification/INotificationListener;Landroid/service/notification/INotificationListener$Stub$Proxy;,Landroid/service/notification/NotificationListenerService$NotificationListenerWrapper;
 HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyNotificationChannelGroupChanged(Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannelGroup;I)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
-HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyPosted(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;)V+]Landroid/service/notification/INotificationListener;Landroid/service/notification/INotificationListener$Stub$Proxy;,Landroid/service/notification/NotificationListenerService$NotificationListenerWrapper;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyPostedLocked(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;)V
-HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyPostedLocked(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;Z)V+]Landroid/os/Handler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/server/notification/NotificationManagerService$TrimCache;Lcom/android/server/notification/NotificationManagerService$TrimCache;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
-HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyRankingUpdate(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/NotificationRankingUpdate;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/service/notification/INotificationListener;Landroid/service/notification/INotificationListener$Stub$Proxy;,Landroid/service/notification/NotificationListenerService$NotificationListenerWrapper;
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyPosted(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/service/notification/INotificationListener;Landroid/service/notification/INotificationListener$Stub$Proxy;,Landroid/service/notification/NotificationListenerService$NotificationListenerWrapper;
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyPostedLocked(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;)V
+HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyPostedLocked(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;Z)V+]Landroid/os/Handler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/server/notification/NotificationManagerService$TrimCache;Lcom/android/server/notification/NotificationManagerService$TrimCache;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyRankingUpdate(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/NotificationRankingUpdate;)V+]Landroid/service/notification/INotificationListener;Landroid/service/notification/INotificationListener$Stub$Proxy;,Landroid/service/notification/NotificationListenerService$NotificationListenerWrapper;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyRankingUpdateLocked(Ljava/util/List;)V+]Landroid/os/Handler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;]Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyRemoved(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;Landroid/service/notification/NotificationStats;I)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/service/notification/INotificationListener;Landroid/service/notification/INotificationListener$Stub$Proxy;,Landroid/service/notification/NotificationListenerService$NotificationListenerWrapper;
+HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyRemoved(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationRankingUpdate;Landroid/service/notification/NotificationStats;I)V+]Landroid/service/notification/INotificationListener;Landroid/service/notification/INotificationListener$Stub$Proxy;,Landroid/service/notification/NotificationListenerService$NotificationListenerWrapper;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyRemovedLocked(Lcom/android/server/notification/NotificationRecord;ILandroid/service/notification/NotificationStats;)V+]Landroid/os/Handler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;,Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->notifyUnhiddenLocked(Ljava/util/List;)V
 HPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->onPackagesChanged(Z[Ljava/lang/String;[I)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
@@ -32625,25 +33850,25 @@
 HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->shouldReflectToSettings()Z
 HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->updateUriPermissionsForActiveNotificationsLocked(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Z)V+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLcom/android/server/notification/NotificationManagerService$NotificationListeners;->writeExtraXmlTags(Landroid/util/TypedXmlSerializer;)V
-HPLcom/android/server/notification/NotificationManagerService$NotificationRecordExtractorData;-><init>(IIZZZLandroid/app/NotificationChannel;Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/util/ArrayList;Ljava/util/ArrayList;IFZ)V
+HSPLcom/android/server/notification/NotificationManagerService$NotificationRecordExtractorData;-><init>(IIZZZLandroid/app/NotificationChannel;Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/util/ArrayList;Ljava/util/ArrayList;IFZ)V
 HPLcom/android/server/notification/NotificationManagerService$NotificationRecordExtractorData;->hasDiffForLoggingLocked(Lcom/android/server/notification/NotificationRecord;I)Z
-HPLcom/android/server/notification/NotificationManagerService$NotificationRecordExtractorData;->hasDiffForRankingLocked(Lcom/android/server/notification/NotificationRecord;I)Z+]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationManagerService$NotificationRecordExtractorData;->hasDiffForRankingLocked(Lcom/android/server/notification/NotificationRecord;I)Z+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Landroid/app/Notification;Landroid/app/Notification;
 HSPLcom/android/server/notification/NotificationManagerService$NotificationTrampolineCallback;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
 HSPLcom/android/server/notification/NotificationManagerService$NotificationTrampolineCallback;-><init>(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService$NotificationTrampolineCallback-IA;)V
 PLcom/android/server/notification/NotificationManagerService$NotificationTrampolineCallback;->blockTrampoline(I)Z
 PLcom/android/server/notification/NotificationManagerService$NotificationTrampolineCallback;->canCloseSystemDialogs(Ljava/util/Collection;I)Z
 PLcom/android/server/notification/NotificationManagerService$NotificationTrampolineCallback;->isActivityStartAllowed(Ljava/util/Collection;ILjava/lang/String;)Z
-HPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;Landroid/service/notification/StatusBarNotification;)V
-HPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable$$ExternalSyntheticLambda0;->run()V
+HSPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;Landroid/service/notification/StatusBarNotification;)V
+HSPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable$$ExternalSyntheticLambda0;->run()V
 HPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;Lcom/android/server/notification/NotificationRecord;)V
 HPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable$$ExternalSyntheticLambda1;->run()V
 PLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable$1;-><init>(Lcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;Landroid/service/notification/StatusBarNotification;)V
-HPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;->$r8$lambda$30l_jvBvb2PvIVpEe5h86HPww8w(Lcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;Landroid/service/notification/StatusBarNotification;)V
+HSPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;->$r8$lambda$30l_jvBvb2PvIVpEe5h86HPww8w(Lcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;Landroid/service/notification/StatusBarNotification;)V
 HPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;->$r8$lambda$FNYGlSerKspbkbBwEBswMNmYj1Q(Lcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;Lcom/android/server/notification/NotificationRecord;)V
-HPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;-><init>(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;Ljava/lang/String;IJ)V
-HPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;->lambda$run$0(Landroid/service/notification/StatusBarNotification;)V
+HSPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;-><init>(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;Ljava/lang/String;IJ)V
+HSPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;->lambda$run$0(Landroid/service/notification/StatusBarNotification;)V
 HPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;->lambda$run$1(Lcom/android/server/notification/NotificationRecord;)V+]Lcom/android/server/notification/GroupHelper;Lcom/android/server/notification/GroupHelper;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;->run()V+]Landroid/os/Handler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/notification/ShortcutHelper;Lcom/android/server/notification/ShortcutHelper;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;]Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Lcom/android/internal/logging/InstanceIdSequence;Lcom/android/internal/logging/InstanceIdSequence;]Lcom/android/server/notification/RankingHelper;Lcom/android/server/notification/RankingHelper;]Lcom/android/server/notification/NotificationRecordLogger;Lcom/android/server/notification/NotificationRecordLoggerImpl;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;
+HSPLcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;->run()V+]Landroid/os/Handler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/notification/ShortcutHelper;Lcom/android/server/notification/ShortcutHelper;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;]Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Lcom/android/internal/logging/InstanceIdSequence;Lcom/android/internal/logging/InstanceIdSequence;]Lcom/android/server/notification/RankingHelper;Lcom/android/server/notification/RankingHelper;]Lcom/android/server/notification/NotificationRecordLogger;Lcom/android/server/notification/NotificationRecordLoggerImpl;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;
 HSPLcom/android/server/notification/NotificationManagerService$RankingHandlerWorker;-><init>(Lcom/android/server/notification/NotificationManagerService;Landroid/os/Looper;)V
 HSPLcom/android/server/notification/NotificationManagerService$RankingHandlerWorker;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
 HPLcom/android/server/notification/NotificationManagerService$RankingHandlerWorker;->requestReconsideration(Lcom/android/server/notification/RankingReconsideration;)V
@@ -32675,19 +33900,19 @@
 HSPLcom/android/server/notification/NotificationManagerService$StatsPullAtomCallbackImpl;-><init>(Lcom/android/server/notification/NotificationManagerService;)V
 HSPLcom/android/server/notification/NotificationManagerService$StatsPullAtomCallbackImpl;-><init>(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService$StatsPullAtomCallbackImpl-IA;)V
 PLcom/android/server/notification/NotificationManagerService$StatsPullAtomCallbackImpl;->onPullAtom(ILjava/util/List;)I
-HPLcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;-><init>(Landroid/service/notification/StatusBarNotification;)V
-HPLcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;->get()Landroid/service/notification/StatusBarNotification;
+HSPLcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;-><init>(Landroid/service/notification/StatusBarNotification;)V
+HSPLcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;->get()Landroid/service/notification/StatusBarNotification;
 HSPLcom/android/server/notification/NotificationManagerService$StrongAuthTracker;-><init>(Lcom/android/server/notification/NotificationManagerService;Landroid/content/Context;)V
 PLcom/android/server/notification/NotificationManagerService$StrongAuthTracker;->containsFlag(II)Z
-HPLcom/android/server/notification/NotificationManagerService$StrongAuthTracker;->isInLockDownMode()Z
+HSPLcom/android/server/notification/NotificationManagerService$StrongAuthTracker;->isInLockDownMode()Z
 PLcom/android/server/notification/NotificationManagerService$StrongAuthTracker;->onStrongAuthRequiredChanged(I)V
-HPLcom/android/server/notification/NotificationManagerService$TrimCache;-><init>(Lcom/android/server/notification/NotificationManagerService;Landroid/service/notification/StatusBarNotification;)V
-HPLcom/android/server/notification/NotificationManagerService$TrimCache;->ForListener(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Landroid/service/notification/StatusBarNotification;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;
+HSPLcom/android/server/notification/NotificationManagerService$TrimCache;-><init>(Lcom/android/server/notification/NotificationManagerService;Landroid/service/notification/StatusBarNotification;)V
+HSPLcom/android/server/notification/NotificationManagerService$TrimCache;->ForListener(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Landroid/service/notification/StatusBarNotification;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;
 HSPLcom/android/server/notification/NotificationManagerService$WorkerHandler;-><init>(Lcom/android/server/notification/NotificationManagerService;Landroid/os/Looper;)V
 HPLcom/android/server/notification/NotificationManagerService$WorkerHandler;->handleMessage(Landroid/os/Message;)V+]Ljava/lang/Boolean;Ljava/lang/Boolean;]Lcom/android/internal/os/SomeArgs;Lcom/android/internal/os/SomeArgs;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
 HSPLcom/android/server/notification/NotificationManagerService$WorkerHandler;->scheduleCancelNotification(Lcom/android/server/notification/NotificationManagerService$CancelNotificationRunnable;)V+]Landroid/os/Handler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;
 HPLcom/android/server/notification/NotificationManagerService$WorkerHandler;->scheduleOnPackageChanged(ZI[Ljava/lang/String;[I)V
-PLcom/android/server/notification/NotificationManagerService$WorkerHandler;->scheduleSendRankingUpdate()V
+HPLcom/android/server/notification/NotificationManagerService$WorkerHandler;->scheduleSendRankingUpdate()V
 PLcom/android/server/notification/NotificationManagerService;->$r8$lambda$4D1_pcxxsiwUKNXCAbmyAQp5J4M(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/CharSequence;)V
 HPLcom/android/server/notification/NotificationManagerService;->$r8$lambda$5k3SvJwVK8MO87_dQqVTQ9ZpBhQ(Lcom/android/server/notification/NotificationManagerService;ZLjava/lang/String;I)V
 HPLcom/android/server/notification/NotificationManagerService;->$r8$lambda$9ug37OTfBOPP8hNGXyExxiHD9MQ(Lcom/android/server/notification/NotificationManagerService;Landroid/provider/DeviceConfig$Properties;)V
@@ -32697,48 +33922,49 @@
 PLcom/android/server/notification/NotificationManagerService;->$r8$lambda$ayW9y1IhPKXCMYdpHXGzbm4jhiU(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/SystemService$TargetUser;)V
 PLcom/android/server/notification/NotificationManagerService;->$r8$lambda$rOJxwPkBDPXwY46_sDbwLmms5Xo(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/SystemService$TargetUser;)V
 PLcom/android/server/notification/NotificationManagerService;->$r8$lambda$wOqy8RyqFkzV9jOGgX8C5waJG3Q(Lcom/android/server/notification/NotificationManagerService;ILcom/android/server/notification/NotificationRecord;Z)V
-HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmActivityManager(Lcom/android/server/notification/NotificationManagerService;)Landroid/app/ActivityManager;
+HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmActivityManager(Lcom/android/server/notification/NotificationManagerService;)Landroid/app/ActivityManager;
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmAllowedManagedServicePackages(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/internal/util/function/TriPredicate;
+PLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmAm(Lcom/android/server/notification/NotificationManagerService;)Landroid/app/IActivityManager;
 HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmAmi(Lcom/android/server/notification/NotificationManagerService;)Landroid/app/ActivityManagerInternal;
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmAppOps(Lcom/android/server/notification/NotificationManagerService;)Landroid/app/AppOpsManager;
 HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmArchive(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$Archive;
-HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmAssistants(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;
+HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmAssistants(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;
 HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmAtm(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/wm/ActivityTaskManagerInternal;
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmCallNotificationToken(Lcom/android/server/notification/NotificationManagerService;)Landroid/os/Binder;
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmCallState(Lcom/android/server/notification/NotificationManagerService;)I
 HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmConditionProviders(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/ConditionProviders;
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmDpm(Lcom/android/server/notification/NotificationManagerService;)Landroid/app/admin/DevicePolicyManagerInternal;
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmEffectsSuppressors(Lcom/android/server/notification/NotificationManagerService;)Ljava/util/List;
-HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmGroupHelper(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/GroupHelper;
-HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmHandler(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$WorkerHandler;
-PLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmHistoryManager(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationHistoryManager;
+HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmGroupHelper(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/GroupHelper;
+HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmHandler(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$WorkerHandler;
+HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmHistoryManager(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationHistoryManager;
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmInCallNotificationAudioAttributes(Lcom/android/server/notification/NotificationManagerService;)Landroid/media/AudioAttributes;
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmInCallNotificationUri(Lcom/android/server/notification/NotificationManagerService;)Landroid/net/Uri;
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmInCallNotificationVolume(Lcom/android/server/notification/NotificationManagerService;)F
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmInterruptionFilter(Lcom/android/server/notification/NotificationManagerService;)I
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmListenerHints(Lcom/android/server/notification/NotificationManagerService;)I
 HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmListeners(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$NotificationListeners;
-PLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmLockScreenAllowSecureNotifications(Lcom/android/server/notification/NotificationManagerService;)Z
+HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmLockScreenAllowSecureNotifications(Lcom/android/server/notification/NotificationManagerService;)Z
 HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmMaxPackageEnqueueRate(Lcom/android/server/notification/NotificationManagerService;)F
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmMetricsLogger(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/internal/logging/MetricsLogger;
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmNotificationChannelLogger(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationChannelLogger;
-HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmNotificationInstanceIdSequence(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/internal/logging/InstanceIdSequence;
+HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmNotificationInstanceIdSequence(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/internal/logging/InstanceIdSequence;
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmNotificationLight(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/lights/LogicalLight;
-HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmNotificationRecordLogger(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationRecordLogger;
+HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmNotificationRecordLogger(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationRecordLogger;
 HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmPackageManager(Lcom/android/server/notification/NotificationManagerService;)Landroid/content/pm/IPackageManager;
-HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmPackageManagerClient(Lcom/android/server/notification/NotificationManagerService;)Landroid/content/pm/PackageManager;
+HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmPackageManagerClient(Lcom/android/server/notification/NotificationManagerService;)Landroid/content/pm/PackageManager;
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmPermissionHelper(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/PermissionHelper;
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmPermissionPolicyInternal(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/policy/PermissionPolicyInternal;
 HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmPolicyFile(Lcom/android/server/notification/NotificationManagerService;)Landroid/util/AtomicFile;
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmRoleObserver(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$RoleObserver;
-PLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmSettingsObserver(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$SettingsObserver;
-HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmShortcutHelper(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/ShortcutHelper;
+HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmSettingsObserver(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationManagerService$SettingsObserver;
+HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmShortcutHelper(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/ShortcutHelper;
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmToastRateLimiter(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/utils/quota/MultiRateLimiter;
 HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmToastRateLimitingDisabledUids(Lcom/android/server/notification/NotificationManagerService;)Ljava/util/Set;
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmUgmInternal(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/uri/UriGrantsManagerInternal;
 HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmUm(Lcom/android/server/notification/NotificationManagerService;)Landroid/os/UserManager;
-HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmUsageStats(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationUsageStats;
-HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmUsageStatsManagerInternal(Lcom/android/server/notification/NotificationManagerService;)Landroid/app/usage/UsageStatsManagerInternal;
+HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmUsageStats(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/NotificationUsageStats;
+HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmUsageStatsManagerInternal(Lcom/android/server/notification/NotificationManagerService;)Landroid/app/usage/UsageStatsManagerInternal;
 HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmUserProfiles(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/notification/ManagedServices$UserProfiles;
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$fgetmWindowManagerInternal(Lcom/android/server/notification/NotificationManagerService;)Lcom/android/server/wm/WindowManagerInternal;
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$fputmCallNotificationToken(Lcom/android/server/notification/NotificationManagerService;Landroid/os/Binder;)V
@@ -32750,13 +33976,13 @@
 HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$mapplyAdjustment(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;Landroid/service/notification/Adjustment;)V
 HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$mareNotificationsEnabledForPackageInt(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;I)Z+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$mblockToast(Lcom/android/server/notification/NotificationManagerService;IZZZ)Z
-HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$mcancelAllNotificationsByListLocked(Lcom/android/server/notification/NotificationManagerService;Ljava/util/ArrayList;IILjava/lang/String;ZLjava/lang/String;Lcom/android/server/notification/NotificationManagerService$FlagChecker;ZIZILjava/lang/String;ZJ)V
+HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$mcancelAllNotificationsByListLocked(Lcom/android/server/notification/NotificationManagerService;Ljava/util/ArrayList;IILjava/lang/String;ZLjava/lang/String;Lcom/android/server/notification/NotificationManagerService$FlagChecker;ZIZILjava/lang/String;ZJ)V+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
 HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$mcancelGroupChildrenLocked(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;IILjava/lang/String;ZLcom/android/server/notification/NotificationManagerService$FlagChecker;IJ)V
 HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$mcancelNotificationLocked(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;ZIIIZLjava/lang/String;J)V
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$mcancelNotificationLocked(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;ZIZLjava/lang/String;J)V
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$mcancelNotificationsWhenEnterLockDownMode(Lcom/android/server/notification/NotificationManagerService;)V
-HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$mcheckCallerIsSameApp(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;)V
-HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$mcheckCallerIsSystem(Lcom/android/server/notification/NotificationManagerService;)V
+HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$mcheckCallerIsSameApp(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;)V
+HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$mcheckCallerIsSystem(Lcom/android/server/notification/NotificationManagerService;)V+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
 HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$mcheckCallerIsSystemOrSameApp(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;)V+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$mcheckCallerIsSystemOrShell(Lcom/android/server/notification/NotificationManagerService;)V
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$mcheckCallerIsSystemOrSystemUiOrShell(Lcom/android/server/notification/NotificationManagerService;)V
@@ -32773,17 +33999,17 @@
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$mfindNotificationsByListLocked(Lcom/android/server/notification/NotificationManagerService;Ljava/util/ArrayList;Ljava/lang/String;Ljava/lang/String;II)Ljava/util/List;
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$mgetToastRecord(Lcom/android/server/notification/NotificationManagerService;IILjava/lang/String;ZLandroid/os/IBinder;Ljava/lang/CharSequence;Landroid/app/ITransientNotification;ILandroid/os/Binder;ILandroid/app/ITransientNotificationCallback;)Lcom/android/server/notification/toast/ToastRecord;
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$mhandleDurationReached(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/toast/ToastRecord;)V
-HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$mhandleGroupedNotificationLocked(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;II)V
+HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$mhandleGroupedNotificationLocked(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;II)V
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$mhandleKillTokenTimeout(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/toast/ToastRecord;)V
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$mhandleListenerHintsChanged(Lcom/android/server/notification/NotificationManagerService;I)V
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$mhandleListenerInterruptionFilterChanged(Lcom/android/server/notification/NotificationManagerService;I)V
 HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$mhandleRankingReconsideration(Lcom/android/server/notification/NotificationManagerService;Landroid/os/Message;)V
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$mhandleSendRankingUpdate(Lcom/android/server/notification/NotificationManagerService;)V
-HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$mhasAutoGroupSummaryLocked(Lcom/android/server/notification/NotificationManagerService;Landroid/service/notification/StatusBarNotification;)Z
+HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$mhasAutoGroupSummaryLocked(Lcom/android/server/notification/NotificationManagerService;Landroid/service/notification/StatusBarNotification;)Z
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$mhideNotificationsForPackages(Lcom/android/server/notification/NotificationManagerService;[Ljava/lang/String;[I)V
-HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$misCallNotification(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;I)Z
+HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$misCallNotification(Lcom/android/server/notification/NotificationManagerService;Ljava/lang/String;I)Z
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$misCallerIsSystemOrSysemUiOrShell(Lcom/android/server/notification/NotificationManagerService;)Z
-HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$misCritical(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;)Z
+HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$misCritical(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;)Z
 HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$misInteractionVisibleToListener(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)Z+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$misPackageInForegroundForToast(Lcom/android/server/notification/NotificationManagerService;I)Z
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$mkeepProcessAliveForToastIfNeededLocked(Lcom/android/server/notification/NotificationManagerService;I)V
@@ -32800,8 +34026,8 @@
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$mupdateEffectsSuppressorLocked(Lcom/android/server/notification/NotificationManagerService;)V
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$mupdateInterruptionFilterLocked(Lcom/android/server/notification/NotificationManagerService;)V
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$mupdateListenerHintsLocked(Lcom/android/server/notification/NotificationManagerService;)V
-HPLcom/android/server/notification/NotificationManagerService;->-$$Nest$mupdateNotificationBubbleFlags(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;Z)V
-PLcom/android/server/notification/NotificationManagerService;->-$$Nest$mupdateNotificationPulse(Lcom/android/server/notification/NotificationManagerService;)V
+HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$mupdateNotificationBubbleFlags(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationRecord;Z)V
+HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$mupdateNotificationPulse(Lcom/android/server/notification/NotificationManagerService;)V
 HSPLcom/android/server/notification/NotificationManagerService;->-$$Nest$mwritePolicyXml(Lcom/android/server/notification/NotificationManagerService;Ljava/io/OutputStream;ZI)V
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$sfgetACTION_NOTIFICATION_TIMEOUT()Ljava/lang/String;
 PLcom/android/server/notification/NotificationManagerService;->-$$Nest$sfgetALLOWLIST_TOKEN()Landroid/os/IBinder;
@@ -32825,16 +34051,16 @@
 HPLcom/android/server/notification/NotificationManagerService;->applyZenModeLocked(Lcom/android/server/notification/NotificationRecord;)V
 HSPLcom/android/server/notification/NotificationManagerService;->areNotificationsEnabledForPackageInt(Ljava/lang/String;I)Z+]Lcom/android/server/notification/PermissionHelper;Lcom/android/server/notification/PermissionHelper;
 PLcom/android/server/notification/NotificationManagerService;->blockToast(IZZZ)Z
-HPLcom/android/server/notification/NotificationManagerService;->buzzBeepBlinkLocked(Lcom/android/server/notification/NotificationRecord;)I+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/metrics/LogMaker;Landroid/metrics/LogMaker;]Lcom/android/server/notification/VibratorHelper;Lcom/android/server/notification/VibratorHelper;]Landroid/media/AudioManager;Landroid/media/AudioManager;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;
+HSPLcom/android/server/notification/NotificationManagerService;->buzzBeepBlinkLocked(Lcom/android/server/notification/NotificationRecord;)I+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/metrics/LogMaker;Landroid/metrics/LogMaker;]Lcom/android/server/notification/VibratorHelper;Lcom/android/server/notification/VibratorHelper;]Landroid/media/AudioManager;Landroid/media/AudioManager;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;
 PLcom/android/server/notification/NotificationManagerService;->calculateHints()I
 PLcom/android/server/notification/NotificationManagerService;->calculateSuppressedEffects()J
 PLcom/android/server/notification/NotificationManagerService;->calculateSuppressedVisualEffects(Landroid/app/NotificationManager$Policy;Landroid/app/NotificationManager$Policy;I)I
 HPLcom/android/server/notification/NotificationManagerService;->callStateToString(I)Ljava/lang/String;
-HPLcom/android/server/notification/NotificationManagerService;->canShowLightsLocked(Lcom/android/server/notification/NotificationRecord;Z)Z
+HSPLcom/android/server/notification/NotificationManagerService;->canShowLightsLocked(Lcom/android/server/notification/NotificationRecord;Z)Z
 HSPLcom/android/server/notification/NotificationManagerService;->canUseManagedServices(Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/String;)Z
 PLcom/android/server/notification/NotificationManagerService;->cancelAllLocked(IIIILcom/android/server/notification/ManagedServices$ManagedServiceInfo;Z)V
-HPLcom/android/server/notification/NotificationManagerService;->cancelAllNotificationsByListLocked(Ljava/util/ArrayList;IILjava/lang/String;ZLjava/lang/String;Lcom/android/server/notification/NotificationManagerService$FlagChecker;ZIZILjava/lang/String;ZJ)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/NotificationManagerService$FlagChecker;Lcom/android/server/notification/NotificationManagerService$15$$ExternalSyntheticLambda0;,Lcom/android/server/notification/NotificationManagerService$16$$ExternalSyntheticLambda0;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Set;Ljava/util/HashSet;
-HSPLcom/android/server/notification/NotificationManagerService;->cancelAllNotificationsInt(IILjava/lang/String;Ljava/lang/String;IIZIILcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
+HSPLcom/android/server/notification/NotificationManagerService;->cancelAllNotificationsByListLocked(Ljava/util/ArrayList;IILjava/lang/String;ZLjava/lang/String;Lcom/android/server/notification/NotificationManagerService$FlagChecker;ZIZILjava/lang/String;ZJ)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/NotificationManagerService$FlagChecker;Lcom/android/server/notification/NotificationManagerService$15$$ExternalSyntheticLambda0;,Lcom/android/server/notification/NotificationManagerService$16$$ExternalSyntheticLambda0;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Set;Ljava/util/HashSet;
+HSPLcom/android/server/notification/NotificationManagerService;->cancelAllNotificationsInt(IILjava/lang/String;Ljava/lang/String;IIZIILcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V+]Landroid/os/Handler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;
 HPLcom/android/server/notification/NotificationManagerService;->cancelGroupChildrenByListLocked(Ljava/util/ArrayList;Lcom/android/server/notification/NotificationRecord;IILjava/lang/String;ZZLcom/android/server/notification/NotificationManagerService$FlagChecker;IJ)V
 HPLcom/android/server/notification/NotificationManagerService;->cancelGroupChildrenLocked(Lcom/android/server/notification/NotificationRecord;IILjava/lang/String;ZLcom/android/server/notification/NotificationManagerService$FlagChecker;IJ)V
 HSPLcom/android/server/notification/NotificationManagerService;->cancelNotification(IILjava/lang/String;Ljava/lang/String;IIIZIIIILcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V+]Lcom/android/server/notification/NotificationManagerService$WorkerHandler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;
@@ -32845,17 +34071,17 @@
 HPLcom/android/server/notification/NotificationManagerService;->cancelNotificationsWhenEnterLockDownMode()V
 HPLcom/android/server/notification/NotificationManagerService;->cancelToastLocked(I)V
 HSPLcom/android/server/notification/NotificationManagerService;->checkCallerIsSameApp(Ljava/lang/String;)V+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
-HSPLcom/android/server/notification/NotificationManagerService;->checkCallerIsSameApp(Ljava/lang/String;II)V+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/notification/NotificationManagerService;->checkCallerIsSameApp(Ljava/lang/String;II)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HPLcom/android/server/notification/NotificationManagerService;->checkCallerIsSystem()V
 HSPLcom/android/server/notification/NotificationManagerService;->checkCallerIsSystemOrSameApp(Ljava/lang/String;)V+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
 HPLcom/android/server/notification/NotificationManagerService;->checkCallerIsSystemOrShell()V
 PLcom/android/server/notification/NotificationManagerService;->checkCallerIsSystemOrSystemUiOrShell()V
 PLcom/android/server/notification/NotificationManagerService;->checkCallerIsSystemOrSystemUiOrShell(Ljava/lang/String;)V
-HPLcom/android/server/notification/NotificationManagerService;->checkDisqualifyingFeatures(IIILjava/lang/String;Lcom/android/server/notification/NotificationRecord;Z)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/app/PendingIntent;Landroid/app/PendingIntent;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;]Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Landroid/app/Notification$Action;Landroid/app/Notification$Action;]Landroid/app/Notification$BubbleMetadata;Landroid/app/Notification$BubbleMetadata;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Lcom/android/server/notification/SnoozeHelper;Lcom/android/server/notification/SnoozeHelper;
+HSPLcom/android/server/notification/NotificationManagerService;->checkDisqualifyingFeatures(IIILjava/lang/String;Lcom/android/server/notification/NotificationRecord;Z)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/app/PendingIntent;Landroid/app/PendingIntent;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;]Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Landroid/app/Notification$Action;Landroid/app/Notification$Action;]Landroid/app/Notification$BubbleMetadata;Landroid/app/Notification$BubbleMetadata;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Lcom/android/server/notification/SnoozeHelper;Lcom/android/server/notification/SnoozeHelper;
 HPLcom/android/server/notification/NotificationManagerService;->checkNotificationListenerAccess()V
-HPLcom/android/server/notification/NotificationManagerService;->checkRemoteViews(Ljava/lang/String;Ljava/lang/String;ILandroid/app/Notification;)V+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
-HPLcom/android/server/notification/NotificationManagerService;->checkRestrictedCategories(Landroid/app/Notification;)V+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;
-HPLcom/android/server/notification/NotificationManagerService;->clamp(III)I
+HSPLcom/android/server/notification/NotificationManagerService;->checkRemoteViews(Ljava/lang/String;Ljava/lang/String;ILandroid/app/Notification;)V+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
+HSPLcom/android/server/notification/NotificationManagerService;->checkRestrictedCategories(Landroid/app/Notification;)V+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;
+HSPLcom/android/server/notification/NotificationManagerService;->clamp(III)I
 HPLcom/android/server/notification/NotificationManagerService;->clearAutogroupSummaryLocked(ILjava/lang/String;)V
 HPLcom/android/server/notification/NotificationManagerService;->clearLightsLocked()V
 HPLcom/android/server/notification/NotificationManagerService;->clearSoundLocked()V
@@ -32873,8 +34099,8 @@
 HPLcom/android/server/notification/NotificationManagerService;->dumpNotificationRecords(Ljava/io/PrintWriter;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
 PLcom/android/server/notification/NotificationManagerService;->dumpProto(Ljava/io/FileDescriptor;Lcom/android/server/notification/NotificationManagerService$DumpFilter;Landroid/util/ArrayMap;)V
 PLcom/android/server/notification/NotificationManagerService;->dumpRemoteViewStats(Ljava/io/PrintWriter;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
-HPLcom/android/server/notification/NotificationManagerService;->enqueueNotificationInternal(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;ILandroid/app/Notification;I)V+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
-HPLcom/android/server/notification/NotificationManagerService;->enqueueNotificationInternal(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;ILandroid/app/Notification;IZ)V+]Landroid/os/Handler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;]Landroid/app/PendingIntent;Landroid/app/PendingIntent;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/ShortcutHelper;Lcom/android/server/notification/ShortcutHelper;]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;]Lcom/android/server/DeviceIdleInternal;Lcom/android/server/DeviceIdleController$LocalService;]Lcom/android/server/SystemService;Lcom/android/server/notification/NotificationManagerService;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Ljava/util/Set;Ljava/util/ImmutableCollections$Set0;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Landroid/app/ActivityManager;Landroid/app/ActivityManager;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Lcom/android/server/notification/PermissionHelper;Lcom/android/server/notification/PermissionHelper;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/notification/NotificationManagerService;->enqueueNotificationInternal(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;ILandroid/app/Notification;I)V+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
+HSPLcom/android/server/notification/NotificationManagerService;->enqueueNotificationInternal(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;ILandroid/app/Notification;IZ)V+]Landroid/os/Handler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/PendingIntent;Landroid/app/PendingIntent;]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Lcom/android/server/notification/ShortcutHelper;Lcom/android/server/notification/ShortcutHelper;]Lcom/android/server/DeviceIdleInternal;Lcom/android/server/DeviceIdleController$LocalService;]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;]Lcom/android/server/SystemService;Lcom/android/server/notification/NotificationManagerService;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Ljava/util/Set;Ljava/util/ImmutableCollections$Set0;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Landroid/app/ActivityManager;Landroid/app/ActivityManager;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Lcom/android/server/notification/PermissionHelper;Lcom/android/server/notification/PermissionHelper;
 PLcom/android/server/notification/NotificationManagerService;->exitIdle()V
 PLcom/android/server/notification/NotificationManagerService;->findCurrentAndSnoozedGroupNotificationsLocked(Ljava/lang/String;Ljava/lang/String;I)Ljava/util/List;
 PLcom/android/server/notification/NotificationManagerService;->findGroupNotificationByListLocked(Ljava/util/ArrayList;Ljava/lang/String;Ljava/lang/String;I)Ljava/util/List;
@@ -32882,32 +34108,32 @@
 PLcom/android/server/notification/NotificationManagerService;->findInCurrentAndSnoozedNotificationByKeyLocked(Ljava/lang/String;)Lcom/android/server/notification/NotificationRecord;
 PLcom/android/server/notification/NotificationManagerService;->findNotificationByKeyLocked(Ljava/lang/String;)Lcom/android/server/notification/NotificationRecord;
 HPLcom/android/server/notification/NotificationManagerService;->findNotificationByListLocked(Ljava/util/ArrayList;Ljava/lang/String;)Lcom/android/server/notification/NotificationRecord;+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/notification/NotificationManagerService;->findNotificationByListLocked(Ljava/util/ArrayList;Ljava/lang/String;Ljava/lang/String;II)Lcom/android/server/notification/NotificationRecord;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/notification/NotificationManagerService;->findNotificationLocked(Ljava/lang/String;Ljava/lang/String;II)Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationManagerService;->findNotificationByListLocked(Ljava/util/ArrayList;Ljava/lang/String;Ljava/lang/String;II)Lcom/android/server/notification/NotificationRecord;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/notification/NotificationManagerService;->findNotificationLocked(Ljava/lang/String;Ljava/lang/String;II)Lcom/android/server/notification/NotificationRecord;+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
 HPLcom/android/server/notification/NotificationManagerService;->findNotificationRecordIndexLocked(Lcom/android/server/notification/NotificationRecord;)I+]Lcom/android/server/notification/RankingHelper;Lcom/android/server/notification/RankingHelper;
 HPLcom/android/server/notification/NotificationManagerService;->findNotificationsByListLocked(Ljava/util/ArrayList;Ljava/lang/String;Ljava/lang/String;II)Ljava/util/List;
 PLcom/android/server/notification/NotificationManagerService;->finishWindowTokenLocked(Landroid/os/IBinder;I)V
-HPLcom/android/server/notification/NotificationManagerService;->fixNotification(Landroid/app/Notification;Ljava/lang/String;Ljava/lang/String;II)V+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/app/Notification;Landroid/app/Notification;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
+HSPLcom/android/server/notification/NotificationManagerService;->fixNotification(Landroid/app/Notification;Ljava/lang/String;Ljava/lang/String;II)V+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/app/Notification;Landroid/app/Notification;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
 PLcom/android/server/notification/NotificationManagerService;->getAllUsersNotificationPermissions()Landroid/util/ArrayMap;
 PLcom/android/server/notification/NotificationManagerService;->getApprovedAssistant(I)Landroid/content/ComponentName;
 HPLcom/android/server/notification/NotificationManagerService;->getBinderService()Landroid/app/INotificationManager;
 HPLcom/android/server/notification/NotificationManagerService;->getCompanionManager()Landroid/companion/ICompanionDeviceManager;
 HSPLcom/android/server/notification/NotificationManagerService;->getGroupHelper()Lcom/android/server/notification/GroupHelper;
-HPLcom/android/server/notification/NotificationManagerService;->getGroupInstanceId(Ljava/lang/String;)Lcom/android/internal/logging/InstanceId;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/NotificationManagerService;->getHistoryText(Landroid/content/Context;Landroid/app/Notification;)Ljava/lang/String;
-HPLcom/android/server/notification/NotificationManagerService;->getHistoryTitle(Landroid/app/Notification;)Ljava/lang/String;
+HSPLcom/android/server/notification/NotificationManagerService;->getGroupInstanceId(Ljava/lang/String;)Lcom/android/internal/logging/InstanceId;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationManagerService;->getHistoryText(Landroid/content/Context;Landroid/app/Notification;)Ljava/lang/String;
+HSPLcom/android/server/notification/NotificationManagerService;->getHistoryTitle(Landroid/app/Notification;)Ljava/lang/String;
 PLcom/android/server/notification/NotificationManagerService;->getInternalService()Lcom/android/server/notification/NotificationManagerInternal;
 HPLcom/android/server/notification/NotificationManagerService;->getNotificationCount(Ljava/lang/String;IILjava/lang/String;)I+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 PLcom/android/server/notification/NotificationManagerService;->getNotificationRecordCount()I
 HPLcom/android/server/notification/NotificationManagerService;->getNumNotificationChannelsForPackage(Ljava/lang/String;IZ)I
-PLcom/android/server/notification/NotificationManagerService;->getRealUserId(I)I
+HSPLcom/android/server/notification/NotificationManagerService;->getRealUserId(I)I
 PLcom/android/server/notification/NotificationManagerService;->getShortcutHelper()Lcom/android/server/notification/ShortcutHelper;
 HSPLcom/android/server/notification/NotificationManagerService;->getStringArrayResource(I)[Ljava/lang/String;
 PLcom/android/server/notification/NotificationManagerService;->getSuppressors()Ljava/util/ArrayList;
 HPLcom/android/server/notification/NotificationManagerService;->getToastRecord(IILjava/lang/String;ZLandroid/os/IBinder;Ljava/lang/CharSequence;Landroid/app/ITransientNotification;ILandroid/os/Binder;ILandroid/app/ITransientNotificationCallback;)Lcom/android/server/notification/toast/ToastRecord;
 HPLcom/android/server/notification/NotificationManagerService;->grantUriPermission(Landroid/os/IBinder;Landroid/net/Uri;ILjava/lang/String;I)V+]Landroid/app/IUriGrantsManager;Lcom/android/server/uri/UriGrantsManagerService;]Landroid/net/Uri;Landroid/net/Uri$StringUri;,Landroid/net/Uri$HierarchicalUri;
 PLcom/android/server/notification/NotificationManagerService;->handleDurationReached(Lcom/android/server/notification/toast/ToastRecord;)V
-HPLcom/android/server/notification/NotificationManagerService;->handleGroupedNotificationLocked(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;II)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
+HSPLcom/android/server/notification/NotificationManagerService;->handleGroupedNotificationLocked(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;II)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
 PLcom/android/server/notification/NotificationManagerService;->handleKillTokenTimeout(Lcom/android/server/notification/toast/ToastRecord;)V
 PLcom/android/server/notification/NotificationManagerService;->handleListenerHintsChanged(I)V
 PLcom/android/server/notification/NotificationManagerService;->handleListenerInterruptionFilterChanged(I)V
@@ -32916,14 +34142,14 @@
 HSPLcom/android/server/notification/NotificationManagerService;->handleRankingSort()V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/RankingHelper;Lcom/android/server/notification/RankingHelper;]Lcom/android/server/notification/NotificationManagerService$WorkerHandler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;]Lcom/android/server/notification/NotificationRecordLogger;Lcom/android/server/notification/NotificationRecordLoggerImpl;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/NotificationManagerService$NotificationRecordExtractorData;Lcom/android/server/notification/NotificationManagerService$NotificationRecordExtractorData;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/notification/NotificationManagerService;->handleSavePolicyFile()V
 HPLcom/android/server/notification/NotificationManagerService;->handleSendRankingUpdate()V
-HPLcom/android/server/notification/NotificationManagerService;->hasAutoGroupSummaryLocked(Landroid/service/notification/StatusBarNotification;)Z
+HSPLcom/android/server/notification/NotificationManagerService;->hasAutoGroupSummaryLocked(Landroid/service/notification/StatusBarNotification;)Z
 HPLcom/android/server/notification/NotificationManagerService;->hasCompanionDevice(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Z+]Landroid/companion/ICompanionDeviceManager;Lcom/android/server/companion/CompanionDeviceManagerService$CompanionDeviceManagerImpl;]Landroid/content/ComponentName;Landroid/content/ComponentName;
 PLcom/android/server/notification/NotificationManagerService;->hasFlag(II)Z
 HPLcom/android/server/notification/NotificationManagerService;->hideNotificationsForPackages([Ljava/lang/String;[I)V
-HPLcom/android/server/notification/NotificationManagerService;->indexOfNotificationLocked(Ljava/lang/String;)I+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/notification/NotificationManagerService;->indexOfNotificationLocked(Ljava/lang/String;)I+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/notification/NotificationManagerService;->indexOfToastLocked(Ljava/lang/String;Landroid/os/IBinder;)I
 HSPLcom/android/server/notification/NotificationManagerService;->init(Lcom/android/server/notification/NotificationManagerService$WorkerHandler;Lcom/android/server/notification/RankingHandler;Landroid/content/pm/IPackageManager;Landroid/content/pm/PackageManager;Lcom/android/server/lights/LightsManager;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;Lcom/android/server/notification/ConditionProviders;Landroid/companion/ICompanionDeviceManager;Lcom/android/server/notification/SnoozeHelper;Lcom/android/server/notification/NotificationUsageStats;Landroid/util/AtomicFile;Landroid/app/ActivityManager;Lcom/android/server/notification/GroupHelper;Landroid/app/IActivityManager;Lcom/android/server/wm/ActivityTaskManagerInternal;Landroid/app/usage/UsageStatsManagerInternal;Landroid/app/admin/DevicePolicyManagerInternal;Landroid/app/IUriGrantsManager;Lcom/android/server/uri/UriGrantsManagerInternal;Landroid/app/AppOpsManager;Lcom/android/internal/app/IAppOpsService;Landroid/os/UserManager;Lcom/android/server/notification/NotificationHistoryManager;Landroid/app/StatsManager;Landroid/telephony/TelephonyManager;Landroid/app/ActivityManagerInternal;Lcom/android/server/utils/quota/MultiRateLimiter;Lcom/android/server/notification/PermissionHelper;Landroid/app/usage/UsageStatsManagerInternal;Landroid/telecom/TelecomManager;Lcom/android/server/notification/NotificationChannelLogger;)V
-HPLcom/android/server/notification/NotificationManagerService;->isCallNotification(Ljava/lang/String;I)Z+]Landroid/telecom/TelecomManager;Landroid/telecom/TelecomManager;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
+HSPLcom/android/server/notification/NotificationManagerService;->isCallNotification(Ljava/lang/String;I)Z+]Landroid/telecom/TelecomManager;Landroid/telecom/TelecomManager;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
 HPLcom/android/server/notification/NotificationManagerService;->isCallNotification(Ljava/lang/String;ILandroid/app/Notification;)Z
 HPLcom/android/server/notification/NotificationManagerService;->isCallerAndroid(Ljava/lang/String;I)Z
 HPLcom/android/server/notification/NotificationManagerService;->isCallerInstantApp(II)Z+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
@@ -32932,11 +34158,11 @@
 HSPLcom/android/server/notification/NotificationManagerService;->isCallerSameApp(Ljava/lang/String;II)Z+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
 HSPLcom/android/server/notification/NotificationManagerService;->isCallerSystemOrPhone()Z+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
 HSPLcom/android/server/notification/NotificationManagerService;->isCallingUidSystem()Z
-HPLcom/android/server/notification/NotificationManagerService;->isCritical(Lcom/android/server/notification/NotificationRecord;)Z
+HSPLcom/android/server/notification/NotificationManagerService;->isCritical(Lcom/android/server/notification/NotificationRecord;)Z
 HPLcom/android/server/notification/NotificationManagerService;->isCurrentlyInsistent()Z
 PLcom/android/server/notification/NotificationManagerService;->isExemptFromRateLimiting(Ljava/lang/String;I)Z
 HPLcom/android/server/notification/NotificationManagerService;->isInCall()Z
-HPLcom/android/server/notification/NotificationManagerService;->isInLockDownMode()Z
+HSPLcom/android/server/notification/NotificationManagerService;->isInLockDownMode()Z
 HPLcom/android/server/notification/NotificationManagerService;->isInsistentUpdate(Lcom/android/server/notification/NotificationRecord;)Z
 HSPLcom/android/server/notification/NotificationManagerService;->isInteractionVisibleToListener(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)Z+]Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;]Lcom/android/server/notification/ManagedServices;Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;,Lcom/android/server/notification/NotificationManagerService;
 HPLcom/android/server/notification/NotificationManagerService;->isLoopingRingtoneNotification(Lcom/android/server/notification/NotificationRecord;)Z
@@ -32944,12 +34170,12 @@
 HPLcom/android/server/notification/NotificationManagerService;->isNotificationForCurrentUser(Lcom/android/server/notification/NotificationRecord;)Z+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/ManagedServices$UserProfiles;Lcom/android/server/notification/ManagedServices$UserProfiles;
 PLcom/android/server/notification/NotificationManagerService;->isNotificationShownInternal(Ljava/lang/String;Ljava/lang/String;II)Z
 PLcom/android/server/notification/NotificationManagerService;->isPackageInForegroundForToast(I)Z
-HPLcom/android/server/notification/NotificationManagerService;->isPackagePausedOrSuspended(Ljava/lang/String;I)Z+]Landroid/os/UserHandle;Landroid/os/UserHandle;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
-HPLcom/android/server/notification/NotificationManagerService;->isPackageSuspendedForUser(Ljava/lang/String;I)Z+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;
-HPLcom/android/server/notification/NotificationManagerService;->isRecordBlockedLocked(Lcom/android/server/notification/NotificationRecord;)Z+]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;,Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationManagerService;->isPackagePausedOrSuspended(Ljava/lang/String;I)Z+]Landroid/os/UserHandle;Landroid/os/UserHandle;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
+HSPLcom/android/server/notification/NotificationManagerService;->isPackageSuspendedForUser(Ljava/lang/String;I)Z+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;
+HSPLcom/android/server/notification/NotificationManagerService;->isRecordBlockedLocked(Lcom/android/server/notification/NotificationRecord;)Z+]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;,Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
 HSPLcom/android/server/notification/NotificationManagerService;->isUidSystemOrPhone(I)Z
-HPLcom/android/server/notification/NotificationManagerService;->isVisibleToListener(Landroid/service/notification/StatusBarNotification;ILcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Z+]Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
-HPLcom/android/server/notification/NotificationManagerService;->isVisuallyInterruptive(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;)Z+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/SystemService;Lcom/android/server/notification/NotificationManagerService;]Ljava/lang/Object;Ljava/lang/String;]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationManagerService;->isVisibleToListener(Landroid/service/notification/StatusBarNotification;ILcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Z+]Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Landroid/service/notification/NotificationListenerFilter;Landroid/service/notification/NotificationListenerFilter;
+HSPLcom/android/server/notification/NotificationManagerService;->isVisuallyInterruptive(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;)Z+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/SystemService;Lcom/android/server/notification/NotificationManagerService;]Ljava/lang/Object;Ljava/lang/String;]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
 PLcom/android/server/notification/NotificationManagerService;->keepProcessAliveForToastIfNeeded(I)V
 HPLcom/android/server/notification/NotificationManagerService;->keepProcessAliveForToastIfNeededLocked(I)V
 HPLcom/android/server/notification/NotificationManagerService;->lambda$doChannelWarningToast$6(Ljava/lang/CharSequence;)V
@@ -32966,13 +34192,13 @@
 HSPLcom/android/server/notification/NotificationManagerService;->makeRankingUpdateLocked(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Landroid/service/notification/NotificationRankingUpdate;+]Landroid/service/notification/NotificationListenerService$Ranking;Landroid/service/notification/NotificationListenerService$Ranking;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 PLcom/android/server/notification/NotificationManagerService;->maybeNotifyChannelGroupOwner(Ljava/lang/String;ILandroid/app/NotificationChannelGroup;Landroid/app/NotificationChannelGroup;)V
 PLcom/android/server/notification/NotificationManagerService;->maybeNotifyChannelOwner(Ljava/lang/String;ILandroid/app/NotificationChannel;Landroid/app/NotificationChannel;)V
-HPLcom/android/server/notification/NotificationManagerService;->maybeRecordInterruptionLocked(Lcom/android/server/notification/NotificationRecord;)V+]Landroid/app/NotificationHistory$HistoricalNotification$Builder;Landroid/app/NotificationHistory$HistoricalNotification$Builder;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/server/SystemService;Lcom/android/server/notification/NotificationManagerService;]Lcom/android/server/notification/NotificationHistoryManager;Lcom/android/server/notification/NotificationHistoryManager;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Ljava/lang/CharSequence;Ljava/lang/String;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;
-HPLcom/android/server/notification/NotificationManagerService;->maybeRegisterMessageSent(Lcom/android/server/notification/NotificationRecord;)V+]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
-HPLcom/android/server/notification/NotificationManagerService;->maybeReportForegroundServiceUpdate(Lcom/android/server/notification/NotificationRecord;Z)V+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
+HSPLcom/android/server/notification/NotificationManagerService;->maybeRecordInterruptionLocked(Lcom/android/server/notification/NotificationRecord;)V+]Landroid/app/NotificationHistory$HistoricalNotification$Builder;Landroid/app/NotificationHistory$HistoricalNotification$Builder;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/server/SystemService;Lcom/android/server/notification/NotificationManagerService;]Lcom/android/server/notification/NotificationHistoryManager;Lcom/android/server/notification/NotificationHistoryManager;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Ljava/lang/CharSequence;Ljava/lang/String;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;
+HSPLcom/android/server/notification/NotificationManagerService;->maybeRegisterMessageSent(Lcom/android/server/notification/NotificationRecord;)V+]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
+HSPLcom/android/server/notification/NotificationManagerService;->maybeReportForegroundServiceUpdate(Lcom/android/server/notification/NotificationRecord;Z)V+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
 HSPLcom/android/server/notification/NotificationManagerService;->maybeShowInitialReviewPermissionsNotification()V
 HSPLcom/android/server/notification/NotificationManagerService;->migrateDefaultNAS()V
 HPLcom/android/server/notification/NotificationManagerService;->notificationMatchesCurrentProfiles(Lcom/android/server/notification/NotificationRecord;I)Z
-HPLcom/android/server/notification/NotificationManagerService;->notificationMatchesUserId(Lcom/android/server/notification/NotificationRecord;I)Z+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationManagerService;->notificationMatchesUserId(Lcom/android/server/notification/NotificationRecord;I)Z+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
 HSPLcom/android/server/notification/NotificationManagerService;->onBootPhase(I)V
 HSPLcom/android/server/notification/NotificationManagerService;->onBootPhase(ILandroid/os/Looper;)V
 HPLcom/android/server/notification/NotificationManagerService;->onConversationRemovedInternal(Ljava/lang/String;ILjava/util/Set;)V
@@ -32993,19 +34219,19 @@
 PLcom/android/server/notification/NotificationManagerService;->removeDisabledHints(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)Z
 HPLcom/android/server/notification/NotificationManagerService;->removeDisabledHints(Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;I)Z
 HPLcom/android/server/notification/NotificationManagerService;->removeFromNotificationListsLocked(Lcom/android/server/notification/NotificationRecord;)Z
-HPLcom/android/server/notification/NotificationManagerService;->removeRemoteView(Ljava/lang/String;Ljava/lang/String;ILandroid/widget/RemoteViews;)Z+]Landroid/widget/RemoteViews;Landroid/widget/RemoteViews;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;
+HSPLcom/android/server/notification/NotificationManagerService;->removeRemoteView(Ljava/lang/String;Ljava/lang/String;ILandroid/widget/RemoteViews;)Z+]Landroid/widget/RemoteViews;Landroid/widget/RemoteViews;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;
 PLcom/android/server/notification/NotificationManagerService;->reportCompatRateLimitingToastsChange(I)V
 HPLcom/android/server/notification/NotificationManagerService;->reportForegroundServiceUpdate(ZLandroid/app/Notification;ILjava/lang/String;I)V
 HPLcom/android/server/notification/NotificationManagerService;->reportSeen(Lcom/android/server/notification/NotificationRecord;)V
 HPLcom/android/server/notification/NotificationManagerService;->reportUserInteraction(Lcom/android/server/notification/NotificationRecord;)V
 PLcom/android/server/notification/NotificationManagerService;->resetAssistantUserSet(I)V
-HSPLcom/android/server/notification/NotificationManagerService;->resolveNotificationUid(Ljava/lang/String;Ljava/lang/String;II)I+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
+HSPLcom/android/server/notification/NotificationManagerService;->resolveNotificationUid(Ljava/lang/String;Ljava/lang/String;II)I+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
 HPLcom/android/server/notification/NotificationManagerService;->revokeUriPermission(Landroid/os/IBinder;Landroid/net/Uri;ILjava/lang/String;I)V+]Lcom/android/server/uri/UriGrantsManagerInternal;Lcom/android/server/uri/UriGrantsManagerService$LocalService;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;
-PLcom/android/server/notification/NotificationManagerService;->scheduleDurationReachedLocked(Lcom/android/server/notification/toast/ToastRecord;Z)V
+HPLcom/android/server/notification/NotificationManagerService;->scheduleDurationReachedLocked(Lcom/android/server/notification/toast/ToastRecord;Z)V
 PLcom/android/server/notification/NotificationManagerService;->scheduleInterruptionFilterChanged(I)V
 PLcom/android/server/notification/NotificationManagerService;->scheduleKillTokenTimeout(Lcom/android/server/notification/toast/ToastRecord;)V
 PLcom/android/server/notification/NotificationManagerService;->scheduleListenerHintsChanged(I)V
-HPLcom/android/server/notification/NotificationManagerService;->scheduleTimeoutLocked(Lcom/android/server/notification/NotificationRecord;)V+]Landroid/net/Uri$Builder;Landroid/net/Uri$Builder;]Lcom/android/server/SystemService;Lcom/android/server/notification/NotificationManagerService;]Landroid/app/AlarmManager;Landroid/app/AlarmManager;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/notification/NotificationManagerService;->scheduleTimeoutLocked(Lcom/android/server/notification/NotificationRecord;)V+]Landroid/net/Uri$Builder;Landroid/net/Uri$Builder;]Lcom/android/server/SystemService;Lcom/android/server/notification/NotificationManagerService;]Landroid/app/AlarmManager;Landroid/app/AlarmManager;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Landroid/content/Intent;Landroid/content/Intent;
 HPLcom/android/server/notification/NotificationManagerService;->sendAccessibilityEvent(Lcom/android/server/notification/NotificationRecord;)V
 HPLcom/android/server/notification/NotificationManagerService;->sendAppBlockStateChangedBroadcast(Ljava/lang/String;IZ)V
 HSPLcom/android/server/notification/NotificationManagerService;->sendRegisteredOnlyBroadcast(Ljava/lang/String;)V
@@ -33022,120 +34248,120 @@
 PLcom/android/server/notification/NotificationManagerService;->snoozeNotificationInt(Ljava/lang/String;JLjava/lang/String;Lcom/android/server/notification/ManagedServices$ManagedServiceInfo;)V
 PLcom/android/server/notification/NotificationManagerService;->tryShowToast(Lcom/android/server/notification/toast/ToastRecord;ZZZ)Z
 HPLcom/android/server/notification/NotificationManagerService;->unhideNotificationsForPackages([Ljava/lang/String;[I)V+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationManagerService$NotificationListeners;Lcom/android/server/notification/NotificationManagerService$NotificationListeners;]Ljava/util/List;Ljava/util/Arrays$ArrayList;,Ljava/util/ArrayList;]Ljava/util/stream/Stream;Ljava/util/stream/IntPipeline$4;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Ljava/util/stream/IntStream;Ljava/util/stream/IntPipeline$Head;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Set;Ljava/util/HashSet;
-HPLcom/android/server/notification/NotificationManagerService;->updateAutobundledSummaryFlags(ILjava/lang/String;ZZ)V+]Landroid/os/Handler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationManagerService;->updateAutobundledSummaryFlags(ILjava/lang/String;ZZ)V+]Landroid/os/Handler;Lcom/android/server/notification/NotificationManagerService$WorkerHandler;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
 PLcom/android/server/notification/NotificationManagerService;->updateEffectsSuppressorLocked()V
 PLcom/android/server/notification/NotificationManagerService;->updateInterruptionFilterLocked()V
-HPLcom/android/server/notification/NotificationManagerService;->updateLightsLocked()V
+HSPLcom/android/server/notification/NotificationManagerService;->updateLightsLocked()V
 PLcom/android/server/notification/NotificationManagerService;->updateListenerHintsLocked()V
-HPLcom/android/server/notification/NotificationManagerService;->updateNotificationBubbleFlags(Lcom/android/server/notification/NotificationRecord;Z)V+]Landroid/app/Notification$BubbleMetadata;Landroid/app/Notification$BubbleMetadata;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationManagerService;->updateNotificationBubbleFlags(Lcom/android/server/notification/NotificationRecord;Z)V+]Landroid/app/Notification$BubbleMetadata;Landroid/app/Notification$BubbleMetadata;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
 PLcom/android/server/notification/NotificationManagerService;->updateNotificationChannelInt(Ljava/lang/String;ILandroid/app/NotificationChannel;Z)V
-HPLcom/android/server/notification/NotificationManagerService;->updateNotificationPulse()V
-HPLcom/android/server/notification/NotificationManagerService;->updateUriPermissions(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;I)V+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
-HPLcom/android/server/notification/NotificationManagerService;->updateUriPermissions(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;IZ)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Lcom/android/server/uri/UriGrantsManagerInternal;Lcom/android/server/uri/UriGrantsManagerService$LocalService;
+HSPLcom/android/server/notification/NotificationManagerService;->updateNotificationPulse()V
+HSPLcom/android/server/notification/NotificationManagerService;->updateUriPermissions(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;I)V+]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;
+HSPLcom/android/server/notification/NotificationManagerService;->updateUriPermissions(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;IZ)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/notification/NotificationManagerService;]Lcom/android/server/uri/UriGrantsManagerInternal;Lcom/android/server/uri/UriGrantsManagerService$LocalService;
 HPLcom/android/server/notification/NotificationManagerService;->vibrate(Lcom/android/server/notification/NotificationRecord;Landroid/os/VibrationEffect;Z)V
 HSPLcom/android/server/notification/NotificationManagerService;->writePolicyXml(Ljava/io/OutputStream;ZI)V
 HSPLcom/android/server/notification/NotificationManagerService;->writeSecureNotificationsPolicy(Landroid/util/TypedXmlSerializer;)V
-HPLcom/android/server/notification/NotificationRecord$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/notification/NotificationRecord;)V
-HPLcom/android/server/notification/NotificationRecord$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/notification/NotificationRecord$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/notification/NotificationRecord;)V
+HSPLcom/android/server/notification/NotificationRecord$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/notification/NotificationRecord$Light;-><init>(III)V
 PLcom/android/server/notification/NotificationRecord$Light;->equals(Ljava/lang/Object;)Z
 HPLcom/android/server/notification/NotificationRecord$Light;->hashCode()I
 PLcom/android/server/notification/NotificationRecord$Light;->toString()Ljava/lang/String;
-HPLcom/android/server/notification/NotificationRecord;->$r8$lambda$JMyyUe1tek73cTWTrcpl6gCcTEc(Lcom/android/server/notification/NotificationRecord;Landroid/net/Uri;)V
-PLcom/android/server/notification/NotificationRecord;-><clinit>()V
-HPLcom/android/server/notification/NotificationRecord;-><init>(Landroid/content/Context;Landroid/service/notification/StatusBarNotification;Landroid/app/NotificationChannel;)V+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
+HSPLcom/android/server/notification/NotificationRecord;->$r8$lambda$JMyyUe1tek73cTWTrcpl6gCcTEc(Lcom/android/server/notification/NotificationRecord;Landroid/net/Uri;)V
+HSPLcom/android/server/notification/NotificationRecord;-><clinit>()V
+HSPLcom/android/server/notification/NotificationRecord;-><init>(Landroid/content/Context;Landroid/service/notification/StatusBarNotification;Landroid/app/NotificationChannel;)V+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HPLcom/android/server/notification/NotificationRecord;->addAdjustment(Landroid/service/notification/Adjustment;)V+]Ljava/util/List;Ljava/util/ArrayList;
-HPLcom/android/server/notification/NotificationRecord;->applyAdjustments()V+]Landroid/service/notification/Adjustment;Landroid/service/notification/Adjustment;]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
-HPLcom/android/server/notification/NotificationRecord;->calculateAttributes()Landroid/media/AudioAttributes;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/NotificationRecord;->calculateGrantableUris()V+]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/NotificationRecord;->calculateImportance()V+]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/NotificationRecord;->calculateInitialImportance()I+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/NotificationRecord;->calculateLights()Lcom/android/server/notification/NotificationRecord$Light;+]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;
-HPLcom/android/server/notification/NotificationRecord;->calculateRankingTimeMs(J)J+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/NotificationRecord;->calculateSound()Landroid/net/Uri;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
-HPLcom/android/server/notification/NotificationRecord;->calculateUserSentiment()V+]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/NotificationRecord;->calculateVibration()Landroid/os/VibrationEffect;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/server/notification/VibratorHelper;Lcom/android/server/notification/VibratorHelper;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/NotificationRecord;->canBubble()Z
-HPLcom/android/server/notification/NotificationRecord;->canShowBadge()Z
+HSPLcom/android/server/notification/NotificationRecord;->applyAdjustments()V+]Landroid/service/notification/Adjustment;Landroid/service/notification/Adjustment;]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
+HSPLcom/android/server/notification/NotificationRecord;->calculateAttributes()Landroid/media/AudioAttributes;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationRecord;->calculateGrantableUris()V+]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationRecord;->calculateImportance()V+]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationRecord;->calculateInitialImportance()I+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationRecord;->calculateLights()Lcom/android/server/notification/NotificationRecord$Light;+]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;
+HSPLcom/android/server/notification/NotificationRecord;->calculateRankingTimeMs(J)J+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationRecord;->calculateSound()Landroid/net/Uri;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
+HSPLcom/android/server/notification/NotificationRecord;->calculateUserSentiment()V+]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationRecord;->calculateVibration()Landroid/os/VibrationEffect;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/server/notification/VibratorHelper;Lcom/android/server/notification/VibratorHelper;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationRecord;->canBubble()Z
+HSPLcom/android/server/notification/NotificationRecord;->canShowBadge()Z
 HPLcom/android/server/notification/NotificationRecord;->copyRankingInformation(Lcom/android/server/notification/NotificationRecord;)V+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
 HPLcom/android/server/notification/NotificationRecord;->dump(Landroid/util/proto/ProtoOutputStream;JZI)V
 HPLcom/android/server/notification/NotificationRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/content/Context;Z)V
 HPLcom/android/server/notification/NotificationRecord;->dumpNotification(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/app/Notification;Z)V
 HPLcom/android/server/notification/NotificationRecord;->formatRemoteViews(Landroid/widget/RemoteViews;)Ljava/lang/String;
-HPLcom/android/server/notification/NotificationRecord;->getAdjustmentIssuer()Ljava/lang/String;
-HPLcom/android/server/notification/NotificationRecord;->getAssistantImportance()I
+HSPLcom/android/server/notification/NotificationRecord;->getAdjustmentIssuer()Ljava/lang/String;
+HSPLcom/android/server/notification/NotificationRecord;->getAssistantImportance()I
 HPLcom/android/server/notification/NotificationRecord;->getAudioAttributes()Landroid/media/AudioAttributes;
-HPLcom/android/server/notification/NotificationRecord;->getAuthoritativeRank()I
-HPLcom/android/server/notification/NotificationRecord;->getChannel()Landroid/app/NotificationChannel;
+HSPLcom/android/server/notification/NotificationRecord;->getAuthoritativeRank()I
+HSPLcom/android/server/notification/NotificationRecord;->getChannel()Landroid/app/NotificationChannel;
 HPLcom/android/server/notification/NotificationRecord;->getContactAffinity()F
-HPLcom/android/server/notification/NotificationRecord;->getCriticality()I
+HSPLcom/android/server/notification/NotificationRecord;->getCriticality()I
 PLcom/android/server/notification/NotificationRecord;->getEditChoicesBeforeSending()Z
-HPLcom/android/server/notification/NotificationRecord;->getExposureMs(J)I
-HPLcom/android/server/notification/NotificationRecord;->getFlags()I+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/NotificationRecord;->getFreshnessMs(J)I
-HPLcom/android/server/notification/NotificationRecord;->getGlobalSortKey()Ljava/lang/String;
-HPLcom/android/server/notification/NotificationRecord;->getGrantableUris()Landroid/util/ArraySet;
-HPLcom/android/server/notification/NotificationRecord;->getGroupKey()Ljava/lang/String;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/NotificationRecord;->getImportance()I
-HPLcom/android/server/notification/NotificationRecord;->getImportanceExplanation()Ljava/lang/CharSequence;
-HPLcom/android/server/notification/NotificationRecord;->getImportanceExplanationCode()I
-HPLcom/android/server/notification/NotificationRecord;->getInitialImportance()I
-HPLcom/android/server/notification/NotificationRecord;->getInitialImportanceExplanationCode()I
-HPLcom/android/server/notification/NotificationRecord;->getInterruptionMs(J)I
+HSPLcom/android/server/notification/NotificationRecord;->getExposureMs(J)I
+HSPLcom/android/server/notification/NotificationRecord;->getFlags()I+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationRecord;->getFreshnessMs(J)I
+HSPLcom/android/server/notification/NotificationRecord;->getGlobalSortKey()Ljava/lang/String;
+HSPLcom/android/server/notification/NotificationRecord;->getGrantableUris()Landroid/util/ArraySet;
+HSPLcom/android/server/notification/NotificationRecord;->getGroupKey()Ljava/lang/String;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationRecord;->getImportance()I
+HSPLcom/android/server/notification/NotificationRecord;->getImportanceExplanation()Ljava/lang/CharSequence;
+HSPLcom/android/server/notification/NotificationRecord;->getImportanceExplanationCode()I
+HSPLcom/android/server/notification/NotificationRecord;->getInitialImportance()I
+HSPLcom/android/server/notification/NotificationRecord;->getInitialImportanceExplanationCode()I
+HSPLcom/android/server/notification/NotificationRecord;->getInterruptionMs(J)I
 PLcom/android/server/notification/NotificationRecord;->getIsAppImportanceLocked()Z
 HPLcom/android/server/notification/NotificationRecord;->getItemLogMaker()Landroid/metrics/LogMaker;+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/NotificationRecord;->getKey()Ljava/lang/String;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/NotificationRecord;->getLastAudiblyAlertedMs()J
+HSPLcom/android/server/notification/NotificationRecord;->getKey()Ljava/lang/String;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationRecord;->getLastAudiblyAlertedMs()J
 HPLcom/android/server/notification/NotificationRecord;->getLastIntrusive()J
-HPLcom/android/server/notification/NotificationRecord;->getLifespanMs(J)I
+HSPLcom/android/server/notification/NotificationRecord;->getLifespanMs(J)I
 PLcom/android/server/notification/NotificationRecord;->getLight()Lcom/android/server/notification/NotificationRecord$Light;
-HPLcom/android/server/notification/NotificationRecord;->getLogMaker()Landroid/metrics/LogMaker;
-HPLcom/android/server/notification/NotificationRecord;->getLogMaker(J)Landroid/metrics/LogMaker;+]Ljava/lang/String;Ljava/lang/String;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/metrics/LogMaker;Landroid/metrics/LogMaker;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/NotificationRecord;->getNotification()Landroid/app/Notification;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/NotificationRecord;->getNotificationType()I+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationRecord;->getLogMaker()Landroid/metrics/LogMaker;+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationRecord;->getLogMaker(J)Landroid/metrics/LogMaker;+]Ljava/lang/String;Ljava/lang/String;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/metrics/LogMaker;Landroid/metrics/LogMaker;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationRecord;->getNotification()Landroid/app/Notification;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationRecord;->getNotificationType()I+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
 HPLcom/android/server/notification/NotificationRecord;->getNumSmartActionsAdded()I
 HPLcom/android/server/notification/NotificationRecord;->getNumSmartRepliesAdded()I
 HPLcom/android/server/notification/NotificationRecord;->getPackagePriority()I
-HPLcom/android/server/notification/NotificationRecord;->getPackageVisibilityOverride()I
-HPLcom/android/server/notification/NotificationRecord;->getPeopleOverride()Ljava/util/ArrayList;
+HSPLcom/android/server/notification/NotificationRecord;->getPackageVisibilityOverride()I
+HSPLcom/android/server/notification/NotificationRecord;->getPeopleOverride()Ljava/util/ArrayList;
 HPLcom/android/server/notification/NotificationRecord;->getPhoneNumbers()Landroid/util/ArraySet;
-HPLcom/android/server/notification/NotificationRecord;->getRankingScore()F
+HSPLcom/android/server/notification/NotificationRecord;->getRankingScore()F
 HPLcom/android/server/notification/NotificationRecord;->getRankingTimeMs()J
-HPLcom/android/server/notification/NotificationRecord;->getSbn()Landroid/service/notification/StatusBarNotification;
-HPLcom/android/server/notification/NotificationRecord;->getShortcutInfo()Landroid/content/pm/ShortcutInfo;
-HPLcom/android/server/notification/NotificationRecord;->getSmartReplies()Ljava/util/ArrayList;
-HPLcom/android/server/notification/NotificationRecord;->getSnoozeCriteria()Ljava/util/ArrayList;
-HPLcom/android/server/notification/NotificationRecord;->getSound()Landroid/net/Uri;
+HSPLcom/android/server/notification/NotificationRecord;->getSbn()Landroid/service/notification/StatusBarNotification;
+HSPLcom/android/server/notification/NotificationRecord;->getShortcutInfo()Landroid/content/pm/ShortcutInfo;
+HSPLcom/android/server/notification/NotificationRecord;->getSmartReplies()Ljava/util/ArrayList;
+HSPLcom/android/server/notification/NotificationRecord;->getSnoozeCriteria()Ljava/util/ArrayList;
+HSPLcom/android/server/notification/NotificationRecord;->getSound()Landroid/net/Uri;
 HPLcom/android/server/notification/NotificationRecord;->getStats()Landroid/service/notification/NotificationStats;
 HPLcom/android/server/notification/NotificationRecord;->getSuggestionsGeneratedByAssistant()Z
-HPLcom/android/server/notification/NotificationRecord;->getSuppressedVisualEffects()I
-HPLcom/android/server/notification/NotificationRecord;->getSystemGeneratedSmartActions()Ljava/util/ArrayList;
-HPLcom/android/server/notification/NotificationRecord;->getUid()I+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/NotificationRecord;->getUser()Landroid/os/UserHandle;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/NotificationRecord;->getUserId()I+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/NotificationRecord;->getUserSentiment()I
+HSPLcom/android/server/notification/NotificationRecord;->getSuppressedVisualEffects()I
+HSPLcom/android/server/notification/NotificationRecord;->getSystemGeneratedSmartActions()Ljava/util/ArrayList;
+HSPLcom/android/server/notification/NotificationRecord;->getUid()I+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationRecord;->getUser()Landroid/os/UserHandle;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationRecord;->getUserId()I+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationRecord;->getUserSentiment()I
 HPLcom/android/server/notification/NotificationRecord;->getVibration()Landroid/os/VibrationEffect;
 HPLcom/android/server/notification/NotificationRecord;->hasBeenVisiblyExpanded()Z
-HPLcom/android/server/notification/NotificationRecord;->hasPendingLogUpdate()Z
-HPLcom/android/server/notification/NotificationRecord;->hasRecordedInterruption()Z
+HSPLcom/android/server/notification/NotificationRecord;->hasPendingLogUpdate()Z
+HSPLcom/android/server/notification/NotificationRecord;->hasRecordedInterruption()Z
 HPLcom/android/server/notification/NotificationRecord;->hasSeenSmartReplies()Z
-HPLcom/android/server/notification/NotificationRecord;->hasUndecoratedRemoteView()Z
+HSPLcom/android/server/notification/NotificationRecord;->hasUndecoratedRemoteView()Z+]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
 HPLcom/android/server/notification/NotificationRecord;->isAudioAttributesUsage(I)Z+]Landroid/media/AudioAttributes;Landroid/service/notification/StatusBarNotification;
 HPLcom/android/server/notification/NotificationRecord;->isCategory(Ljava/lang/String;)Z+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/NotificationRecord;->isConversation()Z+]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationRecord;->isConversation()Z+]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
 PLcom/android/server/notification/NotificationRecord;->isFlagBubbleRemoved()Z
-HPLcom/android/server/notification/NotificationRecord;->isForegroundService()Z
-HPLcom/android/server/notification/NotificationRecord;->isHidden()Z
-HPLcom/android/server/notification/NotificationRecord;->isIntercepted()Z
-HPLcom/android/server/notification/NotificationRecord;->isInterruptive()Z
+HSPLcom/android/server/notification/NotificationRecord;->isForegroundService()Z+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationRecord;->isHidden()Z
+HSPLcom/android/server/notification/NotificationRecord;->isIntercepted()Z
+HSPLcom/android/server/notification/NotificationRecord;->isInterruptive()Z
 HPLcom/android/server/notification/NotificationRecord;->isNewEnoughForAlerting(J)Z
 HPLcom/android/server/notification/NotificationRecord;->isOnlyBots([Landroid/app/Person;)Z
-HPLcom/android/server/notification/NotificationRecord;->isPreChannelsNotification()Z+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationRecord;->isPreChannelsNotification()Z+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
 HPLcom/android/server/notification/NotificationRecord;->isProxied()Z
-HPLcom/android/server/notification/NotificationRecord;->isRecentlyIntrusive()Z
+HSPLcom/android/server/notification/NotificationRecord;->isRecentlyIntrusive()Z
 HPLcom/android/server/notification/NotificationRecord;->isSeen()Z
-HPLcom/android/server/notification/NotificationRecord;->isTextChanged()Z
-HPLcom/android/server/notification/NotificationRecord;->lambda$calculateGrantableUris$0(Landroid/net/Uri;)V
+HSPLcom/android/server/notification/NotificationRecord;->isTextChanged()Z
+HSPLcom/android/server/notification/NotificationRecord;->lambda$calculateGrantableUris$0(Landroid/net/Uri;)V+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
 PLcom/android/server/notification/NotificationRecord;->mergePhoneNumbers(Landroid/util/ArraySet;)V
 HPLcom/android/server/notification/NotificationRecord;->rankingScoreMatches(F)Z
 HPLcom/android/server/notification/NotificationRecord;->recordDirectReplied()V
@@ -33144,51 +34370,51 @@
 PLcom/android/server/notification/NotificationRecord;->recordExpanded()V
 HPLcom/android/server/notification/NotificationRecord;->recordSnoozed()V
 PLcom/android/server/notification/NotificationRecord;->recordViewedSettings()V
-HPLcom/android/server/notification/NotificationRecord;->setAllowBubble(Z)V
+HSPLcom/android/server/notification/NotificationRecord;->setAllowBubble(Z)V
 PLcom/android/server/notification/NotificationRecord;->setAssistantImportance(I)V
-HPLcom/android/server/notification/NotificationRecord;->setAudiblyAlerted(Z)V
-HPLcom/android/server/notification/NotificationRecord;->setAuthoritativeRank(I)V
+HSPLcom/android/server/notification/NotificationRecord;->setAudiblyAlerted(Z)V
+HSPLcom/android/server/notification/NotificationRecord;->setAuthoritativeRank(I)V
 HPLcom/android/server/notification/NotificationRecord;->setContactAffinity(F)V
 PLcom/android/server/notification/NotificationRecord;->setCriticality(I)V
 PLcom/android/server/notification/NotificationRecord;->setEditChoicesBeforeSending(Z)V
-HPLcom/android/server/notification/NotificationRecord;->setFlagBubbleRemoved(Z)V
-HPLcom/android/server/notification/NotificationRecord;->setGlobalSortKey(Ljava/lang/String;)V
-HPLcom/android/server/notification/NotificationRecord;->setHasSentValidMsg(Z)V
-HPLcom/android/server/notification/NotificationRecord;->setHidden(Z)V
-HPLcom/android/server/notification/NotificationRecord;->setImportanceFixed(Z)V
-HPLcom/android/server/notification/NotificationRecord;->setIntercepted(Z)Z
-HPLcom/android/server/notification/NotificationRecord;->setInterruptive(Z)V
-HPLcom/android/server/notification/NotificationRecord;->setIsAppImportanceLocked(Z)V+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationRecord;->setFlagBubbleRemoved(Z)V
+HSPLcom/android/server/notification/NotificationRecord;->setGlobalSortKey(Ljava/lang/String;)V
+HSPLcom/android/server/notification/NotificationRecord;->setHasSentValidMsg(Z)V
+HSPLcom/android/server/notification/NotificationRecord;->setHidden(Z)V
+HSPLcom/android/server/notification/NotificationRecord;->setImportanceFixed(Z)V
+HSPLcom/android/server/notification/NotificationRecord;->setIntercepted(Z)Z
+HSPLcom/android/server/notification/NotificationRecord;->setInterruptive(Z)V
+HSPLcom/android/server/notification/NotificationRecord;->setIsAppImportanceLocked(Z)V+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
 PLcom/android/server/notification/NotificationRecord;->setNumSmartActionsAdded(I)V
 HPLcom/android/server/notification/NotificationRecord;->setNumSmartRepliesAdded(I)V
 PLcom/android/server/notification/NotificationRecord;->setOverrideGroupKey(Ljava/lang/String;)V
-HPLcom/android/server/notification/NotificationRecord;->setPackagePriority(I)V
-HPLcom/android/server/notification/NotificationRecord;->setPackageVisibilityOverride(I)V
+HSPLcom/android/server/notification/NotificationRecord;->setPackagePriority(I)V
+HSPLcom/android/server/notification/NotificationRecord;->setPackageVisibilityOverride(I)V
 PLcom/android/server/notification/NotificationRecord;->setPendingLogUpdate(Z)V
 PLcom/android/server/notification/NotificationRecord;->setPeopleOverride(Ljava/util/ArrayList;)V
-HPLcom/android/server/notification/NotificationRecord;->setPkgAllowedAsConvo(Z)V
-HPLcom/android/server/notification/NotificationRecord;->setPostSilently(Z)V
+HSPLcom/android/server/notification/NotificationRecord;->setPkgAllowedAsConvo(Z)V
+HSPLcom/android/server/notification/NotificationRecord;->setPostSilently(Z)V
 HPLcom/android/server/notification/NotificationRecord;->setRecentlyIntrusive(Z)V
-HPLcom/android/server/notification/NotificationRecord;->setRecordedInterruption(Z)V
+HSPLcom/android/server/notification/NotificationRecord;->setRecordedInterruption(Z)V
 HPLcom/android/server/notification/NotificationRecord;->setSeen()V
 PLcom/android/server/notification/NotificationRecord;->setSeenSmartReplies(Z)V
-HPLcom/android/server/notification/NotificationRecord;->setShortcutInfo(Landroid/content/pm/ShortcutInfo;)V
-HPLcom/android/server/notification/NotificationRecord;->setShowBadge(Z)V
+HSPLcom/android/server/notification/NotificationRecord;->setShortcutInfo(Landroid/content/pm/ShortcutInfo;)V
+HSPLcom/android/server/notification/NotificationRecord;->setShowBadge(Z)V
 PLcom/android/server/notification/NotificationRecord;->setSmartReplies(Ljava/util/ArrayList;)V
 PLcom/android/server/notification/NotificationRecord;->setSnoozeCriteria(Ljava/util/ArrayList;)V
 PLcom/android/server/notification/NotificationRecord;->setSuggestionsGeneratedByAssistant(Z)V
-HPLcom/android/server/notification/NotificationRecord;->setSuppressedVisualEffects(I)V
+HSPLcom/android/server/notification/NotificationRecord;->setSuppressedVisualEffects(I)V
 PLcom/android/server/notification/NotificationRecord;->setSystemGeneratedSmartActions(Ljava/util/ArrayList;)V
 HPLcom/android/server/notification/NotificationRecord;->setSystemImportance(I)V
-HPLcom/android/server/notification/NotificationRecord;->setTextChanged(Z)V
+HSPLcom/android/server/notification/NotificationRecord;->setTextChanged(Z)V
 PLcom/android/server/notification/NotificationRecord;->setUserSentiment(I)V
 HPLcom/android/server/notification/NotificationRecord;->setVisibility(ZIILcom/android/server/notification/NotificationRecordLogger;)V+]Landroid/metrics/LogMaker;Landroid/metrics/LogMaker;]Lcom/android/server/notification/NotificationRecordLogger;Lcom/android/server/notification/NotificationRecordLoggerImpl;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;Lcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;
 HPLcom/android/server/notification/NotificationRecord;->shouldPostSilently()Z
 PLcom/android/server/notification/NotificationRecord;->shouldRedactStringExtra(Ljava/lang/String;)Z
 HPLcom/android/server/notification/NotificationRecord;->toString()Ljava/lang/String;
-HPLcom/android/server/notification/NotificationRecord;->updateNotificationChannel(Landroid/app/NotificationChannel;)V+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/NotificationRecord;->userDemotedAppFromConvoSpace(Z)V
-HPLcom/android/server/notification/NotificationRecord;->visitGrantableUri(Landroid/net/Uri;ZZ)V+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/uri/UriGrantsManagerInternal;Lcom/android/server/uri/UriGrantsManagerService$LocalService;]Landroid/net/Uri;Landroid/net/Uri$StringUri;,Landroid/net/Uri$HierarchicalUri;
+HSPLcom/android/server/notification/NotificationRecord;->updateNotificationChannel(Landroid/app/NotificationChannel;)V+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationRecord;->userDemotedAppFromConvoSpace(Z)V
+HSPLcom/android/server/notification/NotificationRecord;->visitGrantableUri(Landroid/net/Uri;ZZ)V+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/uri/UriGrantsManagerInternal;Lcom/android/server/uri/UriGrantsManagerService$LocalService;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;
 PLcom/android/server/notification/NotificationRecordLogger$NotificationCancelledEvent;-><clinit>()V
 PLcom/android/server/notification/NotificationRecordLogger$NotificationCancelledEvent;-><init>(Ljava/lang/String;II)V
 HPLcom/android/server/notification/NotificationRecordLogger$NotificationCancelledEvent;->fromCancelReason(II)Lcom/android/server/notification/NotificationRecordLogger$NotificationCancelledEvent;
@@ -33206,25 +34432,25 @@
 HPLcom/android/server/notification/NotificationRecordLogger$NotificationPanelEvent;->getId()I
 PLcom/android/server/notification/NotificationRecordLogger$NotificationPanelEvent;->valueOf(Ljava/lang/String;)Lcom/android/server/notification/NotificationRecordLogger$NotificationPanelEvent;
 PLcom/android/server/notification/NotificationRecordLogger$NotificationPanelEvent;->values()[Lcom/android/server/notification/NotificationRecordLogger$NotificationPanelEvent;
-HPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;-><init>(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;)V
-HPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getAssistantHash()I
-HPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getChannelIdHash()I
-HPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getGroupIdHash()I
-HPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getInstanceId()I
-HPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getNotificationIdHash()I
-HPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getNumPeople()I
-HPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getNumPeople(Landroid/os/Bundle;)I
-HPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getStyle()I
-HPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getStyle(Landroid/os/Bundle;)I
-HPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->shouldLogReported(I)Z+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-PLcom/android/server/notification/NotificationRecordLogger$NotificationReportedEvent;-><clinit>()V
-PLcom/android/server/notification/NotificationRecordLogger$NotificationReportedEvent;-><init>(Ljava/lang/String;II)V
-HPLcom/android/server/notification/NotificationRecordLogger$NotificationReportedEvent;->fromRecordPair(Lcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;)Lcom/android/server/notification/NotificationRecordLogger$NotificationReportedEvent;
-HPLcom/android/server/notification/NotificationRecordLogger$NotificationReportedEvent;->getId()I
+HSPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;-><init>(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;)V
+HSPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getAssistantHash()I
+HSPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getChannelIdHash()I
+HSPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getGroupIdHash()I
+HSPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getInstanceId()I
+HSPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getNotificationIdHash()I
+HSPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getNumPeople()I
+HSPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getNumPeople(Landroid/os/Bundle;)I
+HSPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getStyle()I
+HSPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->getStyle(Landroid/os/Bundle;)I
+HSPLcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;->shouldLogReported(I)Z+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationRecordLogger$NotificationReportedEvent;-><clinit>()V
+HSPLcom/android/server/notification/NotificationRecordLogger$NotificationReportedEvent;-><init>(Ljava/lang/String;II)V
+HSPLcom/android/server/notification/NotificationRecordLogger$NotificationReportedEvent;->fromRecordPair(Lcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;)Lcom/android/server/notification/NotificationRecordLogger$NotificationReportedEvent;
+HSPLcom/android/server/notification/NotificationRecordLogger$NotificationReportedEvent;->getId()I
 PLcom/android/server/notification/NotificationRecordLogger$NotificationReportedEvent;->valueOf(Ljava/lang/String;)Lcom/android/server/notification/NotificationRecordLogger$NotificationReportedEvent;
 PLcom/android/server/notification/NotificationRecordLogger$NotificationReportedEvent;->values()[Lcom/android/server/notification/NotificationRecordLogger$NotificationReportedEvent;
-HPLcom/android/server/notification/NotificationRecordLogger;->getLoggingImportance(Lcom/android/server/notification/NotificationRecord;)I+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/NotificationRecordLogger;->isForegroundService(Lcom/android/server/notification/NotificationRecord;)Z
+HSPLcom/android/server/notification/NotificationRecordLogger;->getLoggingImportance(Lcom/android/server/notification/NotificationRecord;)I+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationRecordLogger;->isForegroundService(Lcom/android/server/notification/NotificationRecord;)Z
 PLcom/android/server/notification/NotificationRecordLogger;->log(Lcom/android/internal/logging/UiEventLogger$UiEventEnum;)V
 PLcom/android/server/notification/NotificationRecordLogger;->log(Lcom/android/internal/logging/UiEventLogger$UiEventEnum;Lcom/android/server/notification/NotificationRecord;)V
 PLcom/android/server/notification/NotificationRecordLogger;->logNotificationAdjusted(Lcom/android/server/notification/NotificationRecord;IILcom/android/internal/logging/InstanceId;)V
@@ -33234,8 +34460,8 @@
 HPLcom/android/server/notification/NotificationRecordLoggerImpl;->log(Lcom/android/internal/logging/UiEventLogger$UiEventEnum;)V
 HPLcom/android/server/notification/NotificationRecordLoggerImpl;->log(Lcom/android/internal/logging/UiEventLogger$UiEventEnum;Lcom/android/server/notification/NotificationRecord;)V+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/internal/logging/UiEventLogger;Lcom/android/internal/logging/UiEventLoggerImpl;
 PLcom/android/server/notification/NotificationRecordLoggerImpl;->logNotificationAdjusted(Lcom/android/server/notification/NotificationRecord;IILcom/android/internal/logging/InstanceId;)V
-HPLcom/android/server/notification/NotificationRecordLoggerImpl;->maybeLogNotificationPosted(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;IILcom/android/internal/logging/InstanceId;)V+]Lcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;Lcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;]Lcom/android/server/notification/NotificationRecordLoggerImpl;Lcom/android/server/notification/NotificationRecordLoggerImpl;
-HPLcom/android/server/notification/NotificationRecordLoggerImpl;->writeNotificationReportedAtom(Lcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;Lcom/android/server/notification/NotificationRecordLogger$NotificationReportedEvent;IILcom/android/internal/logging/InstanceId;)V
+HSPLcom/android/server/notification/NotificationRecordLoggerImpl;->maybeLogNotificationPosted(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;IILcom/android/internal/logging/InstanceId;)V+]Lcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;Lcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;]Lcom/android/server/notification/NotificationRecordLoggerImpl;Lcom/android/server/notification/NotificationRecordLoggerImpl;
+HSPLcom/android/server/notification/NotificationRecordLoggerImpl;->writeNotificationReportedAtom(Lcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;Lcom/android/server/notification/NotificationRecordLogger$NotificationReportedEvent;IILcom/android/internal/logging/InstanceId;)V
 PLcom/android/server/notification/NotificationShellCmd$ShellNls;-><clinit>()V
 PLcom/android/server/notification/NotificationShellCmd$ShellNls;-><init>(Lcom/android/server/notification/NotificationShellCmd$ShellNls-IA;)V
 PLcom/android/server/notification/NotificationShellCmd$ShellNls;->onListenerConnected()V
@@ -33246,8 +34472,8 @@
 PLcom/android/server/notification/NotificationShellCmd;->onCommand(Ljava/lang/String;)I
 HSPLcom/android/server/notification/NotificationUsageStats$1;-><init>(Lcom/android/server/notification/NotificationUsageStats;Landroid/os/Looper;)V
 PLcom/android/server/notification/NotificationUsageStats$1;->handleMessage(Landroid/os/Message;)V
-HPLcom/android/server/notification/NotificationUsageStats$AggregatedStats;-><init>(Landroid/content/Context;Ljava/lang/String;)V
-HPLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->countApiUse(Lcom/android/server/notification/NotificationRecord;)V+]Landroid/os/Bundle;Landroid/os/Bundle;]Lcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;Lcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Ljava/util/Set;Landroid/util/MapCollections$KeySet;
+HSPLcom/android/server/notification/NotificationUsageStats$AggregatedStats;-><init>(Landroid/content/Context;Ljava/lang/String;)V
+HSPLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->countApiUse(Lcom/android/server/notification/NotificationRecord;)V+]Landroid/os/Bundle;Landroid/os/Bundle;]Lcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;Lcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Ljava/util/Set;Landroid/util/MapCollections$KeySet;
 PLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->dumpJson()Lorg/json/JSONObject;
 HPLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->emit()V
@@ -33260,19 +34486,19 @@
 PLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->maybePut(Lorg/json/JSONObject;Ljava/lang/String;I)V
 PLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->toString()Ljava/lang/String;
 HPLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->toStringWithIndent(Ljava/lang/String;)Ljava/lang/String;
-HPLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->updateInterarrivalEstimate(J)V+]Lcom/android/server/notification/RateEstimator;Lcom/android/server/notification/RateEstimator;
-PLcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;-><clinit>()V
-HPLcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;-><init>(Landroid/content/Context;Ljava/lang/String;)V
-HPLcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;->increment(I)V
+HSPLcom/android/server/notification/NotificationUsageStats$AggregatedStats;->updateInterarrivalEstimate(J)V+]Lcom/android/server/notification/RateEstimator;Lcom/android/server/notification/RateEstimator;
+HSPLcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;-><clinit>()V
+HSPLcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;-><init>(Landroid/content/Context;Ljava/lang/String;)V
+HSPLcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;->increment(I)V
 PLcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;->maybeCount(Lcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;)V
 PLcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;->maybePut(Lorg/json/JSONObject;Lcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;)V
 PLcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;->toString()Ljava/lang/String;
 PLcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;->update(Lcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;)V
-HPLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;-><init>()V
+HSPLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;-><init>()V
 HPLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->finish()V
 HPLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->hasBeenVisiblyExpanded()Z
 HPLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->onClick()V
-PLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->onDismiss()V
+HPLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->onDismiss()V
 HPLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->onExpansionChanged(ZZ)V
 HPLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->onRemoved()V
 HPLcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;->onVisibilityChanged(Z)V+]Lcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;Lcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;
@@ -33284,24 +34510,24 @@
 PLcom/android/server/notification/NotificationUsageStats;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
 PLcom/android/server/notification/NotificationUsageStats;->dumpJson(Lcom/android/server/notification/NotificationManagerService$DumpFilter;)Lorg/json/JSONObject;
 PLcom/android/server/notification/NotificationUsageStats;->emit()V
-HPLcom/android/server/notification/NotificationUsageStats;->getAggregatedStatsLocked(Lcom/android/server/notification/NotificationRecord;)[Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
-HPLcom/android/server/notification/NotificationUsageStats;->getAggregatedStatsLocked(Ljava/lang/String;)[Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;+]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;
+HSPLcom/android/server/notification/NotificationUsageStats;->getAggregatedStatsLocked(Lcom/android/server/notification/NotificationRecord;)[Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationUsageStats;->getAggregatedStatsLocked(Ljava/lang/String;)[Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;+]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;
 HPLcom/android/server/notification/NotificationUsageStats;->getAppEnqueueRate(Ljava/lang/String;)F+]Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;
-HPLcom/android/server/notification/NotificationUsageStats;->getOrCreateAggregatedStatsLocked(Ljava/lang/String;)Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;+]Ljava/util/Map;Ljava/util/HashMap;
+HSPLcom/android/server/notification/NotificationUsageStats;->getOrCreateAggregatedStatsLocked(Ljava/lang/String;)Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;+]Ljava/util/Map;Ljava/util/HashMap;
 HPLcom/android/server/notification/NotificationUsageStats;->isAlertRateLimited(Ljava/lang/String;)Z
 HPLcom/android/server/notification/NotificationUsageStats;->registerBlocked(Lcom/android/server/notification/NotificationRecord;)V+]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;
-PLcom/android/server/notification/NotificationUsageStats;->registerClickedByUser(Lcom/android/server/notification/NotificationRecord;)V
+HPLcom/android/server/notification/NotificationUsageStats;->registerClickedByUser(Lcom/android/server/notification/NotificationRecord;)V
 HPLcom/android/server/notification/NotificationUsageStats;->registerDismissedByUser(Lcom/android/server/notification/NotificationRecord;)V
-HPLcom/android/server/notification/NotificationUsageStats;->registerEnqueuedByApp(Ljava/lang/String;)V+]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;
+HSPLcom/android/server/notification/NotificationUsageStats;->registerEnqueuedByApp(Ljava/lang/String;)V+]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;
 HPLcom/android/server/notification/NotificationUsageStats;->registerImageRemoved(Ljava/lang/String;)V
-PLcom/android/server/notification/NotificationUsageStats;->registerOverCountQuota(Ljava/lang/String;)V
+HPLcom/android/server/notification/NotificationUsageStats;->registerOverCountQuota(Ljava/lang/String;)V
 HPLcom/android/server/notification/NotificationUsageStats;->registerOverRateQuota(Ljava/lang/String;)V+]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;
 HPLcom/android/server/notification/NotificationUsageStats;->registerPeopleAffinity(Lcom/android/server/notification/NotificationRecord;ZZZ)V+]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;
-HPLcom/android/server/notification/NotificationUsageStats;->registerPostedByApp(Lcom/android/server/notification/NotificationRecord;)V+]Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/NotificationUsageStats;->registerPostedByApp(Lcom/android/server/notification/NotificationRecord;)V+]Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
 HPLcom/android/server/notification/NotificationUsageStats;->registerRemovedByApp(Lcom/android/server/notification/NotificationRecord;)V+]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;]Lcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;Lcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;
 PLcom/android/server/notification/NotificationUsageStats;->registerSuspendedByAdmin(Lcom/android/server/notification/NotificationRecord;)V
 HPLcom/android/server/notification/NotificationUsageStats;->registerUpdatedByApp(Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;)V+]Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;]Lcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;Lcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;
-HPLcom/android/server/notification/NotificationUsageStats;->releaseAggregatedStatsLocked([Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;)V+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;
+HSPLcom/android/server/notification/NotificationUsageStats;->releaseAggregatedStatsLocked([Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;)V+]Ljava/util/ArrayDeque;Ljava/util/ArrayDeque;
 PLcom/android/server/notification/PermissionHelper$PackagePermission;-><init>(Ljava/lang/String;IZZ)V
 HPLcom/android/server/notification/PermissionHelper$PackagePermission;->equals(Ljava/lang/Object;)Z
 PLcom/android/server/notification/PermissionHelper$PackagePermission;->hashCode()I
@@ -33314,7 +34540,7 @@
 HSPLcom/android/server/notification/PermissionHelper;->hasPermission(I)Z+]Lcom/android/server/pm/permission/PermissionManagerServiceInternal;Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;]Lcom/android/server/notification/PermissionHelper;Lcom/android/server/notification/PermissionHelper;
 HSPLcom/android/server/notification/PermissionHelper;->isPermissionFixed(Ljava/lang/String;I)Z+]Landroid/permission/IPermissionManager;Lcom/android/server/pm/permission/PermissionManagerService;]Lcom/android/server/notification/PermissionHelper;Lcom/android/server/notification/PermissionHelper;
 PLcom/android/server/notification/PermissionHelper;->isPermissionGrantedByDefaultOrRole(Ljava/lang/String;I)Z
-HPLcom/android/server/notification/PermissionHelper;->isPermissionUserSet(Ljava/lang/String;I)Z+]Landroid/permission/IPermissionManager;Lcom/android/server/pm/permission/PermissionManagerService;
+HSPLcom/android/server/notification/PermissionHelper;->isPermissionUserSet(Ljava/lang/String;I)Z+]Landroid/permission/IPermissionManager;Lcom/android/server/pm/permission/PermissionManagerService;
 PLcom/android/server/notification/PermissionHelper;->packageRequestsNotificationPermission(Ljava/lang/String;I)Z
 HPLcom/android/server/notification/PermissionHelper;->setNotificationPermission(Lcom/android/server/notification/PermissionHelper$PackagePermission;)V
 PLcom/android/server/notification/PermissionHelper;->setNotificationPermission(Ljava/lang/String;IZZ)V
@@ -33324,12 +34550,12 @@
 HSPLcom/android/server/notification/PreferencesHelper$PackagePreferences;-><init>(Lcom/android/server/notification/PreferencesHelper$PackagePreferences-IA;)V
 PLcom/android/server/notification/PreferencesHelper$PackagePreferences;->isValidDelegate(Ljava/lang/String;I)Z
 HSPLcom/android/server/notification/PreferencesHelper;-><init>(Landroid/content/Context;Landroid/content/pm/PackageManager;Lcom/android/server/notification/RankingHandler;Lcom/android/server/notification/ZenModeHelper;Lcom/android/server/notification/PermissionHelper;Lcom/android/server/notification/NotificationChannelLogger;Landroid/app/AppOpsManager;Lcom/android/server/notification/SysUiStatsEvent$BuilderFactory;Z)V
-HPLcom/android/server/notification/PreferencesHelper;->badgingEnabled(Landroid/os/UserHandle;)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/content/Context;Landroid/app/ContextImpl;
-HPLcom/android/server/notification/PreferencesHelper;->bubblesEnabled(Landroid/os/UserHandle;)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/content/Context;Landroid/app/ContextImpl;
-HPLcom/android/server/notification/PreferencesHelper;->canShowBadge(Ljava/lang/String;I)Z+]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;
+HSPLcom/android/server/notification/PreferencesHelper;->badgingEnabled(Landroid/os/UserHandle;)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/os/UserHandle;Landroid/os/UserHandle;
+HSPLcom/android/server/notification/PreferencesHelper;->bubblesEnabled(Landroid/os/UserHandle;)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/os/UserHandle;Landroid/os/UserHandle;
+HSPLcom/android/server/notification/PreferencesHelper;->canShowBadge(Ljava/lang/String;I)Z+]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;
 HPLcom/android/server/notification/PreferencesHelper;->canShowNotificationsOnLockscreen(I)Z
 HPLcom/android/server/notification/PreferencesHelper;->canShowPrivateNotificationsOnLockScreen(I)Z
-HPLcom/android/server/notification/PreferencesHelper;->channelIsLiveLocked(Lcom/android/server/notification/PreferencesHelper$PackagePreferences;Landroid/app/NotificationChannel;)Z
+HPLcom/android/server/notification/PreferencesHelper;->channelIsLiveLocked(Lcom/android/server/notification/PreferencesHelper$PackagePreferences;Landroid/app/NotificationChannel;)Z+]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;
 PLcom/android/server/notification/PreferencesHelper;->clearData(Ljava/lang/String;I)V
 PLcom/android/server/notification/PreferencesHelper;->clearLockedFieldsLocked(Landroid/app/NotificationChannel;)V
 HSPLcom/android/server/notification/PreferencesHelper;->createDefaultChannelIfNeededLocked(Lcom/android/server/notification/PreferencesHelper$PackagePreferences;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;
@@ -33337,7 +34563,7 @@
 HPLcom/android/server/notification/PreferencesHelper;->createNotificationChannelGroup(Ljava/lang/String;ILandroid/app/NotificationChannelGroup;Z)V+]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Ljava/util/Map;Ljava/util/concurrent/ConcurrentHashMap;]Landroid/app/NotificationChannelGroup;Landroid/app/NotificationChannelGroup;
 HPLcom/android/server/notification/PreferencesHelper;->deleteConversations(Ljava/lang/String;ILjava/util/Set;)Ljava/util/List;
 HSPLcom/android/server/notification/PreferencesHelper;->deleteDefaultChannelIfNeededLocked(Lcom/android/server/notification/PreferencesHelper$PackagePreferences;)Z
-HSPLcom/android/server/notification/PreferencesHelper;->deleteNotificationChannel(Ljava/lang/String;ILjava/lang/String;)Z
+HSPLcom/android/server/notification/PreferencesHelper;->deleteNotificationChannel(Ljava/lang/String;ILjava/lang/String;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;
 PLcom/android/server/notification/PreferencesHelper;->deleteNotificationChannelGroup(Ljava/lang/String;ILjava/lang/String;)Ljava/util/List;
 HSPLcom/android/server/notification/PreferencesHelper;->deleteNotificationChannelLocked(Landroid/app/NotificationChannel;Ljava/lang/String;I)Z
 PLcom/android/server/notification/PreferencesHelper;->didUserEverDemoteInvalidMsgApp(Ljava/lang/String;I)Z
@@ -33350,9 +34576,9 @@
 HPLcom/android/server/notification/PreferencesHelper;->dumpPackagePreferencesLocked(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/notification/NotificationManagerService$DumpFilter;Landroid/util/ArrayMap;Landroid/util/ArrayMap;)V
 HPLcom/android/server/notification/PreferencesHelper;->findConversationChannel(Lcom/android/server/notification/PreferencesHelper$PackagePreferences;Ljava/lang/String;Ljava/lang/String;Z)Landroid/app/NotificationChannel;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
 PLcom/android/server/notification/PreferencesHelper;->getBlockedChannelCount(Ljava/lang/String;I)I
-HPLcom/android/server/notification/PreferencesHelper;->getBubblePreference(Ljava/lang/String;I)I+]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;
+HSPLcom/android/server/notification/PreferencesHelper;->getBubblePreference(Ljava/lang/String;I)I+]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;
 PLcom/android/server/notification/PreferencesHelper;->getChannelGroupLog(Ljava/lang/String;Ljava/lang/String;)Landroid/metrics/LogMaker;
-PLcom/android/server/notification/PreferencesHelper;->getChannelLog(Landroid/app/NotificationChannel;Ljava/lang/String;)Landroid/metrics/LogMaker;
+HSPLcom/android/server/notification/PreferencesHelper;->getChannelLog(Landroid/app/NotificationChannel;Ljava/lang/String;)Landroid/metrics/LogMaker;
 HSPLcom/android/server/notification/PreferencesHelper;->getConversationNotificationChannel(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;ZZ)Landroid/app/NotificationChannel;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;
 PLcom/android/server/notification/PreferencesHelper;->getConversations(Landroid/util/IntArray;Z)Ljava/util/ArrayList;
 PLcom/android/server/notification/PreferencesHelper;->getConversations(Ljava/lang/String;I)Ljava/util/ArrayList;
@@ -33362,26 +34588,26 @@
 HSPLcom/android/server/notification/PreferencesHelper;->getNotificationChannel(Ljava/lang/String;ILjava/lang/String;Z)Landroid/app/NotificationChannel;
 HPLcom/android/server/notification/PreferencesHelper;->getNotificationChannelGroup(Ljava/lang/String;Ljava/lang/String;I)Landroid/app/NotificationChannelGroup;+]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Ljava/util/Map;Ljava/util/concurrent/ConcurrentHashMap;
 HPLcom/android/server/notification/PreferencesHelper;->getNotificationChannelGroupWithChannels(Ljava/lang/String;ILjava/lang/String;Z)Landroid/app/NotificationChannelGroup;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Ljava/util/Map;Ljava/util/concurrent/ConcurrentHashMap;]Landroid/app/NotificationChannelGroup;Landroid/app/NotificationChannelGroup;
-HPLcom/android/server/notification/PreferencesHelper;->getNotificationChannelGroups(Ljava/lang/String;IZZZ)Landroid/content/pm/ParceledListSlice;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Ljava/util/Collection;Ljava/util/concurrent/ConcurrentHashMap$ValuesView;]Ljava/util/Map;Landroid/util/ArrayMap;,Ljava/util/concurrent/ConcurrentHashMap;]Ljava/util/Iterator;Ljava/util/concurrent/ConcurrentHashMap$ValueIterator;]Landroid/app/NotificationChannelGroup;Landroid/app/NotificationChannelGroup;]Ljava/util/List;Ljava/util/ArrayList;
+HPLcom/android/server/notification/PreferencesHelper;->getNotificationChannelGroups(Ljava/lang/String;IZZZ)Landroid/content/pm/ParceledListSlice;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Ljava/util/Collection;Ljava/util/concurrent/ConcurrentHashMap$ValuesView;,Landroid/util/MapCollections$ValuesCollection;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Map;Landroid/util/ArrayMap;,Ljava/util/concurrent/ConcurrentHashMap;]Landroid/app/NotificationChannelGroup;Landroid/app/NotificationChannelGroup;]Ljava/util/Iterator;Ljava/util/concurrent/ConcurrentHashMap$ValueIterator;,Landroid/util/MapCollections$ArrayIterator;
 HSPLcom/android/server/notification/PreferencesHelper;->getNotificationChannels(Ljava/lang/String;IZ)Landroid/content/pm/ParceledListSlice;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Ljava/util/List;Ljava/util/ArrayList;
-HPLcom/android/server/notification/PreferencesHelper;->getNotificationChannelsBypassingDnd(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/notification/PreferencesHelper;->getNotificationChannelsBypassingDnd(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
 PLcom/android/server/notification/PreferencesHelper;->getNotificationDelegate(Ljava/lang/String;I)Ljava/lang/String;
 HSPLcom/android/server/notification/PreferencesHelper;->getOrCreatePackagePreferencesLocked(Ljava/lang/String;I)Lcom/android/server/notification/PreferencesHelper$PackagePreferences;+]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;
-HSPLcom/android/server/notification/PreferencesHelper;->getOrCreatePackagePreferencesLocked(Ljava/lang/String;IIIIIZI)Lcom/android/server/notification/PreferencesHelper$PackagePreferences;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Map;Ljava/util/HashMap;
+HSPLcom/android/server/notification/PreferencesHelper;->getOrCreatePackagePreferencesLocked(Ljava/lang/String;IIIIIZI)Lcom/android/server/notification/PreferencesHelper$PackagePreferences;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Ljava/util/Map;Ljava/util/HashMap;
 HPLcom/android/server/notification/PreferencesHelper;->getPackageChannels()Ljava/util/Map;
 HSPLcom/android/server/notification/PreferencesHelper;->getPackagePreferencesLocked(Ljava/lang/String;I)Lcom/android/server/notification/PreferencesHelper$PackagePreferences;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 PLcom/android/server/notification/PreferencesHelper;->getPermissionBasedPackageBans(Landroid/util/ArrayMap;)Ljava/util/Map;
 HPLcom/android/server/notification/PreferencesHelper;->hasSentInvalidMsg(Ljava/lang/String;I)Z
 PLcom/android/server/notification/PreferencesHelper;->hasSentValidBubble(Ljava/lang/String;I)Z
-HPLcom/android/server/notification/PreferencesHelper;->hasSentValidMsg(Ljava/lang/String;I)Z+]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;
+HSPLcom/android/server/notification/PreferencesHelper;->hasSentValidMsg(Ljava/lang/String;I)Z+]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;
 HPLcom/android/server/notification/PreferencesHelper;->hasUserConfiguredSettings(Lcom/android/server/notification/PreferencesHelper$PackagePreferences;)Z
-HPLcom/android/server/notification/PreferencesHelper;->hasUserDemotedInvalidMsgApp(Ljava/lang/String;I)Z+]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;
+HSPLcom/android/server/notification/PreferencesHelper;->hasUserDemotedInvalidMsgApp(Ljava/lang/String;I)Z+]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;
 PLcom/android/server/notification/PreferencesHelper;->isDelegateAllowed(Ljava/lang/String;ILjava/lang/String;I)Z
 HSPLcom/android/server/notification/PreferencesHelper;->isDeletionOk(Landroid/app/NotificationChannel;)Z
-HPLcom/android/server/notification/PreferencesHelper;->isGroupBlocked(Ljava/lang/String;ILjava/lang/String;)Z+]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Ljava/util/Map;Landroid/util/ArrayMap;,Ljava/util/concurrent/ConcurrentHashMap;]Landroid/app/NotificationChannelGroup;Landroid/app/NotificationChannelGroup;
+HSPLcom/android/server/notification/PreferencesHelper;->isGroupBlocked(Ljava/lang/String;ILjava/lang/String;)Z+]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;]Ljava/util/Map;Ljava/util/concurrent/ConcurrentHashMap;,Landroid/util/ArrayMap;]Landroid/app/NotificationChannelGroup;Landroid/app/NotificationChannelGroup;
 PLcom/android/server/notification/PreferencesHelper;->isImportanceLocked(Ljava/lang/String;I)Z
-HPLcom/android/server/notification/PreferencesHelper;->isInInvalidMsgState(Ljava/lang/String;I)Z+]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;
-HPLcom/android/server/notification/PreferencesHelper;->isMediaNotificationFilteringEnabled()Z
+HSPLcom/android/server/notification/PreferencesHelper;->isInInvalidMsgState(Ljava/lang/String;I)Z+]Lcom/android/server/notification/PreferencesHelper;Lcom/android/server/notification/PreferencesHelper;
+HSPLcom/android/server/notification/PreferencesHelper;->isMediaNotificationFilteringEnabled()Z
 HSPLcom/android/server/notification/PreferencesHelper;->isShortcutOk(Landroid/app/NotificationChannel;)Z
 PLcom/android/server/notification/PreferencesHelper;->lockFieldsForUpdateLocked(Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;)V
 PLcom/android/server/notification/PreferencesHelper;->onLocaleChanged(Landroid/content/Context;I)V
@@ -33423,7 +34649,7 @@
 HSPLcom/android/server/notification/PreferencesHelper;->writeXml(Landroid/util/TypedXmlSerializer;ZI)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;,Ljava/util/concurrent/ConcurrentHashMap$ValuesView;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;,Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;]Ljava/util/Map;Ljava/util/concurrent/ConcurrentHashMap;,Landroid/util/ArrayMap;]Landroid/app/NotificationChannelGroup;Landroid/app/NotificationChannelGroup;]Ljava/util/Iterator;Ljava/util/concurrent/ConcurrentHashMap$ValueIterator;,Landroid/util/MapCollections$ArrayIterator;]Lcom/android/server/notification/PermissionHelper;Lcom/android/server/notification/PermissionHelper;]Ljava/util/Set;Landroid/util/MapCollections$KeySet;
 HSPLcom/android/server/notification/PriorityExtractor;-><init>()V
 HSPLcom/android/server/notification/PriorityExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
-HPLcom/android/server/notification/PriorityExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/PriorityExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
 HSPLcom/android/server/notification/PriorityExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
 HSPLcom/android/server/notification/PriorityExtractor;->setZenHelper(Lcom/android/server/notification/ZenModeHelper;)V
 HSPLcom/android/server/notification/PropConfig;->getStringArray(Landroid/content/Context;Ljava/lang/String;I)[Ljava/lang/String;
@@ -33437,20 +34663,20 @@
 HSPLcom/android/server/notification/RankingHelper;-><init>(Landroid/content/Context;Lcom/android/server/notification/RankingHandler;Lcom/android/server/notification/RankingConfig;Lcom/android/server/notification/ZenModeHelper;Lcom/android/server/notification/NotificationUsageStats;[Ljava/lang/String;)V
 PLcom/android/server/notification/RankingHelper;->dump(Landroid/util/proto/ProtoOutputStream;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
 PLcom/android/server/notification/RankingHelper;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
-HPLcom/android/server/notification/RankingHelper;->extractSignals(Lcom/android/server/notification/NotificationRecord;)V+]Lcom/android/server/notification/RankingHandler;Lcom/android/server/notification/NotificationManagerService$RankingHandlerWorker;]Lcom/android/server/notification/NotificationSignalExtractor;megamorphic_types
+HSPLcom/android/server/notification/RankingHelper;->extractSignals(Lcom/android/server/notification/NotificationRecord;)V+]Lcom/android/server/notification/RankingHandler;Lcom/android/server/notification/NotificationManagerService$RankingHandlerWorker;]Lcom/android/server/notification/NotificationSignalExtractor;megamorphic_types
 HSPLcom/android/server/notification/RankingHelper;->findExtractor(Ljava/lang/Class;)Lcom/android/server/notification/NotificationSignalExtractor;
-HPLcom/android/server/notification/RankingHelper;->indexOf(Ljava/util/ArrayList;Lcom/android/server/notification/NotificationRecord;)I
+HSPLcom/android/server/notification/RankingHelper;->indexOf(Ljava/util/ArrayList;Lcom/android/server/notification/NotificationRecord;)I
 HSPLcom/android/server/notification/RankingHelper;->sort(Ljava/util/ArrayList;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/notification/RankingReconsideration;-><init>(Ljava/lang/String;J)V
 PLcom/android/server/notification/RankingReconsideration;->applyChangesLocked(Lcom/android/server/notification/NotificationRecord;)V
 HPLcom/android/server/notification/RankingReconsideration;->getDelay(Ljava/util/concurrent/TimeUnit;)J
 HPLcom/android/server/notification/RankingReconsideration;->getKey()Ljava/lang/String;
-HPLcom/android/server/notification/RankingReconsideration;->run()V
+HPLcom/android/server/notification/RankingReconsideration;->run()V+]Ljava/lang/Object;Lcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;,Lcom/android/server/notification/NotificationIntrusivenessExtractor$1;]Lcom/android/server/notification/RankingReconsideration;Lcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;,Lcom/android/server/notification/NotificationIntrusivenessExtractor$1;
 PLcom/android/server/notification/RankingReconsideration;->work()V
-PLcom/android/server/notification/RateEstimator;-><init>()V
+HSPLcom/android/server/notification/RateEstimator;-><init>()V
 HPLcom/android/server/notification/RateEstimator;->getInterarrivalEstimate(J)D+]Ljava/lang/Long;Ljava/lang/Long;
-HPLcom/android/server/notification/RateEstimator;->getRate(J)F
-HPLcom/android/server/notification/RateEstimator;->update(J)F+]Lcom/android/server/notification/RateEstimator;Lcom/android/server/notification/RateEstimator;
+HPLcom/android/server/notification/RateEstimator;->getRate(J)F+]Lcom/android/server/notification/RateEstimator;Lcom/android/server/notification/RateEstimator;
+HSPLcom/android/server/notification/RateEstimator;->update(J)F+]Lcom/android/server/notification/RateEstimator;Lcom/android/server/notification/RateEstimator;
 PLcom/android/server/notification/ReviewNotificationPermissionsJobService;-><init>()V
 PLcom/android/server/notification/ReviewNotificationPermissionsJobService;->onStartJob(Landroid/app/job/JobParameters;)Z
 PLcom/android/server/notification/ReviewNotificationPermissionsJobService;->onStopJob(Landroid/app/job/JobParameters;)Z
@@ -33471,25 +34697,25 @@
 HSPLcom/android/server/notification/ScheduleConditionProvider;->asInterface()Landroid/service/notification/IConditionProvider;
 HSPLcom/android/server/notification/ScheduleConditionProvider;->attachBase(Landroid/content/Context;)V
 PLcom/android/server/notification/ScheduleConditionProvider;->conditionSnoozed(Landroid/net/Uri;)Z
-HPLcom/android/server/notification/ScheduleConditionProvider;->createCondition(Landroid/net/Uri;ILjava/lang/String;)Landroid/service/notification/Condition;
+HSPLcom/android/server/notification/ScheduleConditionProvider;->createCondition(Landroid/net/Uri;ILjava/lang/String;)Landroid/service/notification/Condition;
 PLcom/android/server/notification/ScheduleConditionProvider;->dump(Ljava/io/PrintWriter;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
-HPLcom/android/server/notification/ScheduleConditionProvider;->evaluateSubscriptionLocked(Landroid/net/Uri;Landroid/service/notification/ScheduleCalendar;JJ)Landroid/service/notification/Condition;
-HPLcom/android/server/notification/ScheduleConditionProvider;->evaluateSubscriptions()V
+HSPLcom/android/server/notification/ScheduleConditionProvider;->evaluateSubscriptionLocked(Landroid/net/Uri;Landroid/service/notification/ScheduleCalendar;JJ)Landroid/service/notification/Condition;
+HSPLcom/android/server/notification/ScheduleConditionProvider;->evaluateSubscriptions()V
 HSPLcom/android/server/notification/ScheduleConditionProvider;->getComponent()Landroid/content/ComponentName;
-PLcom/android/server/notification/ScheduleConditionProvider;->getNextAlarm()J
-PLcom/android/server/notification/ScheduleConditionProvider;->getPendingIntent(J)Landroid/app/PendingIntent;
+HSPLcom/android/server/notification/ScheduleConditionProvider;->getNextAlarm()J
+HSPLcom/android/server/notification/ScheduleConditionProvider;->getPendingIntent(J)Landroid/app/PendingIntent;
 HSPLcom/android/server/notification/ScheduleConditionProvider;->isValidConditionId(Landroid/net/Uri;)Z
 PLcom/android/server/notification/ScheduleConditionProvider;->meetsSchedule(Landroid/service/notification/ScheduleCalendar;J)Z
 HSPLcom/android/server/notification/ScheduleConditionProvider;->onBootComplete()V
-PLcom/android/server/notification/ScheduleConditionProvider;->onConnected()V
+HSPLcom/android/server/notification/ScheduleConditionProvider;->onConnected()V
 PLcom/android/server/notification/ScheduleConditionProvider;->onDestroy()V
-PLcom/android/server/notification/ScheduleConditionProvider;->onSubscribe(Landroid/net/Uri;)V
+HSPLcom/android/server/notification/ScheduleConditionProvider;->onSubscribe(Landroid/net/Uri;)V
 PLcom/android/server/notification/ScheduleConditionProvider;->onUnsubscribe(Landroid/net/Uri;)V
-PLcom/android/server/notification/ScheduleConditionProvider;->readSnoozed()V
-PLcom/android/server/notification/ScheduleConditionProvider;->removeSnoozed(Landroid/net/Uri;)V
-PLcom/android/server/notification/ScheduleConditionProvider;->saveSnoozedLocked()V
-PLcom/android/server/notification/ScheduleConditionProvider;->setRegistered(Z)V
-HPLcom/android/server/notification/ScheduleConditionProvider;->updateAlarm(JJ)V
+HSPLcom/android/server/notification/ScheduleConditionProvider;->readSnoozed()V
+HSPLcom/android/server/notification/ScheduleConditionProvider;->removeSnoozed(Landroid/net/Uri;)V
+HSPLcom/android/server/notification/ScheduleConditionProvider;->saveSnoozedLocked()V
+HSPLcom/android/server/notification/ScheduleConditionProvider;->setRegistered(Z)V
+HSPLcom/android/server/notification/ScheduleConditionProvider;->updateAlarm(JJ)V
 HSPLcom/android/server/notification/ShortcutHelper$1;-><init>(Lcom/android/server/notification/ShortcutHelper;)V
 PLcom/android/server/notification/ShortcutHelper$1;->onPackageAdded(Ljava/lang/String;Landroid/os/UserHandle;)V
 PLcom/android/server/notification/ShortcutHelper$1;->onPackageChanged(Ljava/lang/String;Landroid/os/UserHandle;)V
@@ -33502,9 +34728,9 @@
 HSPLcom/android/server/notification/ShortcutHelper;-><clinit>()V
 HSPLcom/android/server/notification/ShortcutHelper;-><init>(Landroid/content/pm/LauncherApps;Lcom/android/server/notification/ShortcutHelper$ShortcutListener;Landroid/content/pm/ShortcutServiceInternal;Landroid/os/UserManager;)V
 HPLcom/android/server/notification/ShortcutHelper;->cacheShortcut(Landroid/content/pm/ShortcutInfo;Landroid/os/UserHandle;)V
-HPLcom/android/server/notification/ShortcutHelper;->getValidShortcutInfo(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/content/pm/ShortcutInfo;+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/content/pm/LauncherApps$ShortcutQuery;Landroid/content/pm/LauncherApps$ShortcutQuery;]Landroid/os/UserManager;Landroid/os/UserManager;]Landroid/content/pm/LauncherApps;Landroid/content/pm/LauncherApps;
+HSPLcom/android/server/notification/ShortcutHelper;->getValidShortcutInfo(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/content/pm/ShortcutInfo;+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/content/pm/LauncherApps$ShortcutQuery;Landroid/content/pm/LauncherApps$ShortcutQuery;]Landroid/os/UserManager;Landroid/os/UserManager;]Landroid/content/pm/LauncherApps;Landroid/content/pm/LauncherApps;
 HPLcom/android/server/notification/ShortcutHelper;->isConversationShortcut(Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutServiceInternal;I)Z
-HPLcom/android/server/notification/ShortcutHelper;->maybeListenForShortcutChangesForBubbles(Lcom/android/server/notification/NotificationRecord;ZLandroid/os/Handler;)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/Notification$BubbleMetadata;Landroid/app/Notification$BubbleMetadata;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
+HSPLcom/android/server/notification/ShortcutHelper;->maybeListenForShortcutChangesForBubbles(Lcom/android/server/notification/NotificationRecord;ZLandroid/os/Handler;)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/Notification$BubbleMetadata;Landroid/app/Notification$BubbleMetadata;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
 PLcom/android/server/notification/ShortcutHelper;->setUserManager(Landroid/os/UserManager;)V
 HSPLcom/android/server/notification/SmallHash;->hash(I)I
 HSPLcom/android/server/notification/SmallHash;->hash(Ljava/lang/String;)I
@@ -33528,8 +34754,8 @@
 PLcom/android/server/notification/SnoozeHelper;->-$$Nest$sfgetREPOST_ACTION()Ljava/lang/String;
 HSPLcom/android/server/notification/SnoozeHelper;-><clinit>()V
 HSPLcom/android/server/notification/SnoozeHelper;-><init>(Landroid/content/Context;Lcom/android/server/notification/SnoozeHelper$Callback;Lcom/android/server/notification/ManagedServices$UserProfiles;)V
-HPLcom/android/server/notification/SnoozeHelper;->cancel(ILjava/lang/String;)Z
-HPLcom/android/server/notification/SnoozeHelper;->cancel(ILjava/lang/String;Ljava/lang/String;I)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/notification/SnoozeHelper;Lcom/android/server/notification/SnoozeHelper;
+HSPLcom/android/server/notification/SnoozeHelper;->cancel(ILjava/lang/String;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/notification/SnoozeHelper;Lcom/android/server/notification/SnoozeHelper;
+HSPLcom/android/server/notification/SnoozeHelper;->cancel(ILjava/lang/String;Ljava/lang/String;I)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/notification/SnoozeHelper;Lcom/android/server/notification/SnoozeHelper;]Ljava/util/Iterator;Landroid/util/MapCollections$MapIterator;]Ljava/util/Set;Landroid/util/MapCollections$EntrySet;]Ljava/util/Map$Entry;Landroid/util/MapCollections$MapIterator;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
 PLcom/android/server/notification/SnoozeHelper;->cancel(IZ)V
 PLcom/android/server/notification/SnoozeHelper;->clearData(ILjava/lang/String;)V
 PLcom/android/server/notification/SnoozeHelper;->createPendingIntent(Ljava/lang/String;Ljava/lang/String;I)Landroid/app/PendingIntent;
@@ -33537,11 +34763,11 @@
 PLcom/android/server/notification/SnoozeHelper;->getNotification(Ljava/lang/String;)Lcom/android/server/notification/NotificationRecord;
 PLcom/android/server/notification/SnoozeHelper;->getNotifications(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;)Ljava/util/ArrayList;
 HSPLcom/android/server/notification/SnoozeHelper;->getPkgKey(ILjava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HPLcom/android/server/notification/SnoozeHelper;->getSnoozeContextForUnpostedNotification(ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/notification/SnoozeHelper;Lcom/android/server/notification/SnoozeHelper;
-HPLcom/android/server/notification/SnoozeHelper;->getSnoozeTimeForUnpostedNotification(ILjava/lang/String;Ljava/lang/String;)Ljava/lang/Long;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/notification/SnoozeHelper;Lcom/android/server/notification/SnoozeHelper;
+HSPLcom/android/server/notification/SnoozeHelper;->getSnoozeContextForUnpostedNotification(ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/notification/SnoozeHelper;Lcom/android/server/notification/SnoozeHelper;
+HSPLcom/android/server/notification/SnoozeHelper;->getSnoozeTimeForUnpostedNotification(ILjava/lang/String;Ljava/lang/String;)Ljava/lang/Long;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/notification/SnoozeHelper;Lcom/android/server/notification/SnoozeHelper;
 PLcom/android/server/notification/SnoozeHelper;->getSnoozed()Ljava/util/List;
-HSPLcom/android/server/notification/SnoozeHelper;->getSnoozed(ILjava/lang/String;)Ljava/util/Collection;
-HPLcom/android/server/notification/SnoozeHelper;->isSnoozed(ILjava/lang/String;Ljava/lang/String;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/notification/SnoozeHelper;Lcom/android/server/notification/SnoozeHelper;
+HSPLcom/android/server/notification/SnoozeHelper;->getSnoozed(ILjava/lang/String;)Ljava/util/Collection;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/notification/SnoozeHelper;Lcom/android/server/notification/SnoozeHelper;
+HSPLcom/android/server/notification/SnoozeHelper;->isSnoozed(ILjava/lang/String;Ljava/lang/String;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/notification/SnoozeHelper;Lcom/android/server/notification/SnoozeHelper;
 PLcom/android/server/notification/SnoozeHelper;->lambda$repostGroupSummary$0(Lcom/android/server/notification/NotificationRecord;I)V
 HPLcom/android/server/notification/SnoozeHelper;->lambda$scheduleRepostAtTime$2(Ljava/lang/String;Ljava/lang/String;IJ)V
 PLcom/android/server/notification/SnoozeHelper;->lambda$writeXml$3(JLandroid/util/TypedXmlSerializer;Ljava/lang/Long;)V
@@ -33563,9 +34789,9 @@
 HPLcom/android/server/notification/SysUiStatsEvent$Builder;-><init>(Landroid/util/StatsEvent$Builder;)V
 PLcom/android/server/notification/SysUiStatsEvent$Builder;->addBooleanAnnotation(BZ)Lcom/android/server/notification/SysUiStatsEvent$Builder;
 HPLcom/android/server/notification/SysUiStatsEvent$Builder;->build()Landroid/util/StatsEvent;
-PLcom/android/server/notification/SysUiStatsEvent$Builder;->setAtomId(I)Lcom/android/server/notification/SysUiStatsEvent$Builder;
+HPLcom/android/server/notification/SysUiStatsEvent$Builder;->setAtomId(I)Lcom/android/server/notification/SysUiStatsEvent$Builder;
 PLcom/android/server/notification/SysUiStatsEvent$Builder;->writeBoolean(Z)Lcom/android/server/notification/SysUiStatsEvent$Builder;
-HPLcom/android/server/notification/SysUiStatsEvent$Builder;->writeInt(I)Lcom/android/server/notification/SysUiStatsEvent$Builder;
+HPLcom/android/server/notification/SysUiStatsEvent$Builder;->writeInt(I)Lcom/android/server/notification/SysUiStatsEvent$Builder;+]Landroid/util/StatsEvent$Builder;Landroid/util/StatsEvent$Builder;
 PLcom/android/server/notification/SysUiStatsEvent$Builder;->writeString(Ljava/lang/String;)Lcom/android/server/notification/SysUiStatsEvent$Builder;
 HSPLcom/android/server/notification/SysUiStatsEvent$BuilderFactory;-><init>()V
 HPLcom/android/server/notification/SysUiStatsEvent$BuilderFactory;->newBuilder()Lcom/android/server/notification/SysUiStatsEvent$Builder;
@@ -33573,13 +34799,13 @@
 PLcom/android/server/notification/SystemConditionProviderService;->asInterface()Landroid/service/notification/IConditionProvider;
 PLcom/android/server/notification/SystemConditionProviderService;->attachBase(Landroid/content/Context;)V
 PLcom/android/server/notification/SystemConditionProviderService;->dumpUpcomingTime(Ljava/io/PrintWriter;Ljava/lang/String;JJ)V
-PLcom/android/server/notification/SystemConditionProviderService;->formatDuration(J)Ljava/lang/String;
+HSPLcom/android/server/notification/SystemConditionProviderService;->formatDuration(J)Ljava/lang/String;
 PLcom/android/server/notification/SystemConditionProviderService;->getComponent()Landroid/content/ComponentName;
 PLcom/android/server/notification/SystemConditionProviderService;->isValidConditionId(Landroid/net/Uri;)Z
 PLcom/android/server/notification/SystemConditionProviderService;->onBootComplete()V
-HPLcom/android/server/notification/SystemConditionProviderService;->ts(J)Ljava/lang/String;
+HSPLcom/android/server/notification/SystemConditionProviderService;->ts(J)Ljava/lang/String;
 HSPLcom/android/server/notification/ValidateNotificationPeople$1;-><init>(Lcom/android/server/notification/ValidateNotificationPeople;Landroid/os/Handler;)V
-PLcom/android/server/notification/ValidateNotificationPeople$1;->onChange(ZLandroid/net/Uri;I)V
+HPLcom/android/server/notification/ValidateNotificationPeople$1;->onChange(ZLandroid/net/Uri;I)V
 PLcom/android/server/notification/ValidateNotificationPeople$2;-><init>(Lcom/android/server/notification/ValidateNotificationPeople;Lcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;Ljava/util/concurrent/Semaphore;)V
 PLcom/android/server/notification/ValidateNotificationPeople$2;->run()V
 HPLcom/android/server/notification/ValidateNotificationPeople$LookupResult;->-$$Nest$misExpired(Lcom/android/server/notification/ValidateNotificationPeople$LookupResult;)Z
@@ -33589,14 +34815,14 @@
 HPLcom/android/server/notification/ValidateNotificationPeople$LookupResult;->getPhoneNumbers()Landroid/util/ArraySet;
 HPLcom/android/server/notification/ValidateNotificationPeople$LookupResult;->isExpired()Z
 HPLcom/android/server/notification/ValidateNotificationPeople$LookupResult;->isInvalid()Z
-PLcom/android/server/notification/ValidateNotificationPeople$LookupResult;->mergeContact(Landroid/database/Cursor;)V
+HPLcom/android/server/notification/ValidateNotificationPeople$LookupResult;->mergeContact(Landroid/database/Cursor;)V
 HPLcom/android/server/notification/ValidateNotificationPeople$LookupResult;->mergePhoneNumber(Landroid/database/Cursor;)V
 HPLcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;-><init>(Lcom/android/server/notification/ValidateNotificationPeople;Landroid/content/Context;Ljava/lang/String;Ljava/util/LinkedList;)V
 PLcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;-><init>(Lcom/android/server/notification/ValidateNotificationPeople;Landroid/content/Context;Ljava/lang/String;Ljava/util/LinkedList;Lcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration-IA;)V
 HPLcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;->applyChangesLocked(Lcom/android/server/notification/NotificationRecord;)V
 PLcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;->getContactAffinity()F
 PLcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;->setRecord(Lcom/android/server/notification/NotificationRecord;)V
-HPLcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;->work()V+]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;]Landroid/util/LruCache;Landroid/util/LruCache;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/LinkedList;Ljava/util/LinkedList;]Lcom/android/server/notification/ValidateNotificationPeople$LookupResult;Lcom/android/server/notification/ValidateNotificationPeople$LookupResult;]Ljava/util/Iterator;Ljava/util/LinkedList$ListItr;]Landroid/net/Uri;Landroid/net/Uri$StringUri;
+HPLcom/android/server/notification/ValidateNotificationPeople$PeopleRankingReconsideration;->work()V+]Ljava/lang/String;Ljava/lang/String;]Lcom/android/server/notification/NotificationUsageStats;Lcom/android/server/notification/NotificationUsageStats;]Landroid/util/LruCache;Landroid/util/LruCache;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/LinkedList;Ljava/util/LinkedList;]Lcom/android/server/notification/ValidateNotificationPeople;Lcom/android/server/notification/ValidateNotificationPeople;]Lcom/android/server/notification/ValidateNotificationPeople$LookupResult;Lcom/android/server/notification/ValidateNotificationPeople$LookupResult;]Ljava/util/Iterator;Ljava/util/LinkedList$ListItr;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;
 PLcom/android/server/notification/ValidateNotificationPeople;->-$$Nest$fgetmEvictionCount(Lcom/android/server/notification/ValidateNotificationPeople;)I
 HPLcom/android/server/notification/ValidateNotificationPeople;->-$$Nest$fgetmPeopleCache(Lcom/android/server/notification/ValidateNotificationPeople;)Landroid/util/LruCache;
 PLcom/android/server/notification/ValidateNotificationPeople;->-$$Nest$fgetmUsageStats(Lcom/android/server/notification/ValidateNotificationPeople;)Lcom/android/server/notification/NotificationUsageStats;
@@ -33614,11 +34840,11 @@
 PLcom/android/server/notification/ValidateNotificationPeople;->findWorkUserId(Landroid/content/Context;)I
 HPLcom/android/server/notification/ValidateNotificationPeople;->getCacheKey(ILjava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 PLcom/android/server/notification/ValidateNotificationPeople;->getContactAffinity(Landroid/os/UserHandle;Landroid/os/Bundle;IF)F
-HPLcom/android/server/notification/ValidateNotificationPeople;->getContextAsUser(Landroid/os/UserHandle;)Landroid/content/Context;+]Landroid/os/UserHandle;Landroid/os/UserHandle;]Ljava/util/Map;Landroid/util/ArrayMap;]Landroid/content/Context;Landroid/app/ContextImpl;
+HPLcom/android/server/notification/ValidateNotificationPeople;->getContextAsUser(Landroid/os/UserHandle;)Landroid/content/Context;+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Ljava/util/Map;Landroid/util/ArrayMap;
 HPLcom/android/server/notification/ValidateNotificationPeople;->getExtraPeople(Landroid/os/Bundle;)[Ljava/lang/String;
-HPLcom/android/server/notification/ValidateNotificationPeople;->getExtraPeopleForKey(Landroid/os/Bundle;Ljava/lang/String;)[Ljava/lang/String;+]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/app/Person;Landroid/app/Person;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/notification/ValidateNotificationPeople;->getExtraPeopleForKey(Landroid/os/Bundle;Ljava/lang/String;)[Ljava/lang/String;+]Landroid/app/Person;Landroid/app/Person;]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/notification/ValidateNotificationPeople;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
-HPLcom/android/server/notification/ValidateNotificationPeople;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/ValidateNotificationPeople;Lcom/android/server/notification/ValidateNotificationPeople;
+HSPLcom/android/server/notification/ValidateNotificationPeople;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/ValidateNotificationPeople;Lcom/android/server/notification/ValidateNotificationPeople;
 HPLcom/android/server/notification/ValidateNotificationPeople;->resolveEmailContact(Landroid/content/Context;Ljava/lang/String;)Lcom/android/server/notification/ValidateNotificationPeople$LookupResult;
 HPLcom/android/server/notification/ValidateNotificationPeople;->resolvePhoneContact(Landroid/content/Context;Ljava/lang/String;)Lcom/android/server/notification/ValidateNotificationPeople$LookupResult;
 HPLcom/android/server/notification/ValidateNotificationPeople;->searchContacts(Landroid/content/Context;Landroid/net/Uri;)Lcom/android/server/notification/ValidateNotificationPeople$LookupResult;
@@ -33630,17 +34856,17 @@
 HSPLcom/android/server/notification/VibratorHelper;-><clinit>()V
 HSPLcom/android/server/notification/VibratorHelper;-><init>(Landroid/content/Context;)V+]Landroid/content/Context;Landroid/app/ContextImpl;
 HPLcom/android/server/notification/VibratorHelper;->cancelVibration()V
-HPLcom/android/server/notification/VibratorHelper;->createDefaultVibration(Z)Landroid/os/VibrationEffect;
+HSPLcom/android/server/notification/VibratorHelper;->createDefaultVibration(Z)Landroid/os/VibrationEffect;+]Landroid/os/Vibrator;Landroid/os/SystemVibrator;
 HPLcom/android/server/notification/VibratorHelper;->createFallbackVibration(Z)Landroid/os/VibrationEffect;
 HPLcom/android/server/notification/VibratorHelper;->createPwleWaveformVibration([FZ)Landroid/os/VibrationEffect;
-HPLcom/android/server/notification/VibratorHelper;->createWaveformVibration([JZ)Landroid/os/VibrationEffect;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/notification/VibratorHelper;->createWaveformVibration([JZ)Landroid/os/VibrationEffect;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/notification/VibratorHelper;->getFloatArray(Landroid/content/res/Resources;I)[F+]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLcom/android/server/notification/VibratorHelper;->getLongArray(Landroid/content/res/Resources;II[J)[J+]Landroid/content/res/Resources;Landroid/content/res/Resources;
 HPLcom/android/server/notification/VibratorHelper;->vibrate(Landroid/os/VibrationEffect;Landroid/media/AudioAttributes;Ljava/lang/String;)V
 HSPLcom/android/server/notification/VisibilityExtractor;-><init>()V
 HPLcom/android/server/notification/VisibilityExtractor;->adminAllowsKeyguardFeature(II)Z+]Landroid/app/admin/DevicePolicyManager;Landroid/app/admin/DevicePolicyManager;
 HSPLcom/android/server/notification/VisibilityExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
-HPLcom/android/server/notification/VisibilityExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/server/notification/VisibilityExtractor;Lcom/android/server/notification/VisibilityExtractor;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/RankingConfig;Lcom/android/server/notification/PreferencesHelper;
+HSPLcom/android/server/notification/VisibilityExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/server/notification/VisibilityExtractor;Lcom/android/server/notification/VisibilityExtractor;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/RankingConfig;Lcom/android/server/notification/PreferencesHelper;
 HSPLcom/android/server/notification/VisibilityExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
 HSPLcom/android/server/notification/VisibilityExtractor;->setZenHelper(Lcom/android/server/notification/ZenModeHelper;)V
 HSPLcom/android/server/notification/ZenLog;-><clinit>()V
@@ -33650,7 +34876,7 @@
 PLcom/android/server/notification/ZenLog;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HPLcom/android/server/notification/ZenLog;->hintsToString(I)Ljava/lang/String;
 HSPLcom/android/server/notification/ZenLog;->ringerModeToString(I)Ljava/lang/String;
-PLcom/android/server/notification/ZenLog;->subscribeResult(Landroid/service/notification/IConditionProvider;Landroid/os/RemoteException;)Ljava/lang/String;
+HSPLcom/android/server/notification/ZenLog;->subscribeResult(Landroid/service/notification/IConditionProvider;Landroid/os/RemoteException;)Ljava/lang/String;
 HSPLcom/android/server/notification/ZenLog;->traceConfig(Ljava/lang/String;Landroid/service/notification/ZenModeConfig;Landroid/service/notification/ZenModeConfig;)V
 HPLcom/android/server/notification/ZenLog;->traceDisableEffects(Lcom/android/server/notification/NotificationRecord;Ljava/lang/String;)V
 PLcom/android/server/notification/ZenLog;->traceEffectsSuppressorChanged(Ljava/util/List;Ljava/util/List;J)V
@@ -33663,7 +34889,7 @@
 PLcom/android/server/notification/ZenLog;->traceSetRingerModeExternal(IILjava/lang/String;II)V
 HSPLcom/android/server/notification/ZenLog;->traceSetRingerModeInternal(IILjava/lang/String;II)V
 HSPLcom/android/server/notification/ZenLog;->traceSetZenMode(ILjava/lang/String;)V
-PLcom/android/server/notification/ZenLog;->traceSubscribe(Landroid/net/Uri;Landroid/service/notification/IConditionProvider;Landroid/os/RemoteException;)V
+HSPLcom/android/server/notification/ZenLog;->traceSubscribe(Landroid/net/Uri;Landroid/service/notification/IConditionProvider;Landroid/os/RemoteException;)V
 PLcom/android/server/notification/ZenLog;->traceUnsubscribe(Landroid/net/Uri;Landroid/service/notification/IConditionProvider;Landroid/os/RemoteException;)V
 PLcom/android/server/notification/ZenLog;->typeToString(I)Ljava/lang/String;
 HSPLcom/android/server/notification/ZenLog;->zenModeToString(I)Ljava/lang/String;
@@ -33671,16 +34897,16 @@
 HSPLcom/android/server/notification/ZenModeConditions;-><init>(Lcom/android/server/notification/ZenModeHelper;Lcom/android/server/notification/ConditionProviders;)V
 PLcom/android/server/notification/ZenModeConditions;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/notification/ZenModeConditions;->evaluateConfig(Landroid/service/notification/ZenModeConfig;Landroid/content/ComponentName;Z)V
-HSPLcom/android/server/notification/ZenModeConditions;->evaluateRule(Landroid/service/notification/ZenModeConfig$ZenRule;Landroid/util/ArraySet;Landroid/content/ComponentName;Z)V
+HSPLcom/android/server/notification/ZenModeConditions;->evaluateRule(Landroid/service/notification/ZenModeConfig$ZenRule;Landroid/util/ArraySet;Landroid/content/ComponentName;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/notification/ConditionProviders;Lcom/android/server/notification/ConditionProviders;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/notification/SystemConditionProviderService;Lcom/android/server/notification/EventConditionProvider;,Lcom/android/server/notification/ScheduleConditionProvider;,Lcom/android/server/notification/CountdownConditionProvider;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/lang/Iterable;Landroid/util/ArraySet;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
 HSPLcom/android/server/notification/ZenModeConditions;->onBootComplete()V
-HPLcom/android/server/notification/ZenModeConditions;->onConditionChanged(Landroid/net/Uri;Landroid/service/notification/Condition;)V
+HSPLcom/android/server/notification/ZenModeConditions;->onConditionChanged(Landroid/net/Uri;Landroid/service/notification/Condition;)V
 HPLcom/android/server/notification/ZenModeConditions;->onServiceAdded(Landroid/content/ComponentName;)V
-PLcom/android/server/notification/ZenModeConditions;->onUserSwitched()V
+HSPLcom/android/server/notification/ZenModeConditions;->onUserSwitched()V
 HSPLcom/android/server/notification/ZenModeConditions;->updateSnoozing(Landroid/service/notification/ZenModeConfig$ZenRule;)Z
 HSPLcom/android/server/notification/ZenModeExtractor;-><clinit>()V
 HSPLcom/android/server/notification/ZenModeExtractor;-><init>()V
 HSPLcom/android/server/notification/ZenModeExtractor;->initialize(Landroid/content/Context;Lcom/android/server/notification/NotificationUsageStats;)V
-HPLcom/android/server/notification/ZenModeExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/ZenModeHelper;Lcom/android/server/notification/ZenModeHelper;
+HSPLcom/android/server/notification/ZenModeExtractor;->process(Lcom/android/server/notification/NotificationRecord;)Lcom/android/server/notification/RankingReconsideration;+]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Lcom/android/server/notification/ZenModeHelper;Lcom/android/server/notification/ZenModeHelper;
 HSPLcom/android/server/notification/ZenModeExtractor;->setConfig(Lcom/android/server/notification/RankingConfig;)V
 HSPLcom/android/server/notification/ZenModeExtractor;->setZenHelper(Lcom/android/server/notification/ZenModeHelper;)V
 PLcom/android/server/notification/ZenModeFiltering$RepeatCallers;->-$$Nest$fgetmOtherCalls(Lcom/android/server/notification/ZenModeFiltering$RepeatCallers;)Landroid/util/ArrayMap;
@@ -33700,7 +34926,7 @@
 HPLcom/android/server/notification/ZenModeFiltering$RepeatCallers;->setThresholdMinutes(Landroid/content/Context;)V
 HSPLcom/android/server/notification/ZenModeFiltering;-><clinit>()V
 HSPLcom/android/server/notification/ZenModeFiltering;-><init>(Landroid/content/Context;)V
-PLcom/android/server/notification/ZenModeFiltering;->audienceMatches(IF)Z
+HPLcom/android/server/notification/ZenModeFiltering;->audienceMatches(IF)Z
 PLcom/android/server/notification/ZenModeFiltering;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HPLcom/android/server/notification/ZenModeFiltering;->extras(Lcom/android/server/notification/NotificationRecord;)Landroid/os/Bundle;
 HPLcom/android/server/notification/ZenModeFiltering;->isAlarm(Lcom/android/server/notification/NotificationRecord;)Z
@@ -33715,7 +34941,7 @@
 HPLcom/android/server/notification/ZenModeFiltering;->isSystem(Lcom/android/server/notification/NotificationRecord;)Z
 HPLcom/android/server/notification/ZenModeFiltering;->matchesCallFilter(Landroid/content/Context;ILandroid/app/NotificationManager$Policy;Landroid/os/UserHandle;Landroid/os/Bundle;Lcom/android/server/notification/ValidateNotificationPeople;IF)Z
 HPLcom/android/server/notification/ZenModeFiltering;->recordCall(Lcom/android/server/notification/NotificationRecord;)V
-HPLcom/android/server/notification/ZenModeFiltering;->shouldIntercept(ILandroid/app/NotificationManager$Policy;Lcom/android/server/notification/NotificationRecord;)Z+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/NotificationManager$Policy;Landroid/app/NotificationManager$Policy;]Lcom/android/server/notification/ZenModeFiltering;Lcom/android/server/notification/ZenModeFiltering;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;
+HSPLcom/android/server/notification/ZenModeFiltering;->shouldIntercept(ILandroid/app/NotificationManager$Policy;Lcom/android/server/notification/NotificationRecord;)Z+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Lcom/android/server/notification/ZenModeFiltering;Lcom/android/server/notification/ZenModeFiltering;]Landroid/app/NotificationManager$Policy;Landroid/app/NotificationManager$Policy;]Lcom/android/server/notification/NotificationRecord;Lcom/android/server/notification/NotificationRecord;
 HPLcom/android/server/notification/ZenModeFiltering;->shouldInterceptAudience(ILcom/android/server/notification/NotificationRecord;)Z
 HPLcom/android/server/notification/ZenModeFiltering;->ts(J)Ljava/lang/String;
 HSPLcom/android/server/notification/ZenModeHelper$Callback;-><init>()V
@@ -33730,7 +34956,7 @@
 HSPLcom/android/server/notification/ZenModeHelper$H;->-$$Nest$mpostMetricsTimer(Lcom/android/server/notification/ZenModeHelper$H;)V
 HSPLcom/android/server/notification/ZenModeHelper$H;-><init>(Lcom/android/server/notification/ZenModeHelper;Landroid/os/Looper;)V
 HSPLcom/android/server/notification/ZenModeHelper$H;-><init>(Lcom/android/server/notification/ZenModeHelper;Landroid/os/Looper;Lcom/android/server/notification/ZenModeHelper$H-IA;)V
-HPLcom/android/server/notification/ZenModeHelper$H;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/notification/ZenModeHelper$H;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/notification/ZenModeHelper$H;->postApplyConfig(Landroid/service/notification/ZenModeConfig;Ljava/lang/String;Landroid/content/ComponentName;Z)V
 HSPLcom/android/server/notification/ZenModeHelper$H;->postDispatchOnZenModeChanged()V
 HSPLcom/android/server/notification/ZenModeHelper$H;->postMetricsTimer()V
@@ -33756,7 +34982,7 @@
 HSPLcom/android/server/notification/ZenModeHelper;->-$$Nest$fgetmContext(Lcom/android/server/notification/ZenModeHelper;)Landroid/content/Context;
 HSPLcom/android/server/notification/ZenModeHelper;->-$$Nest$fgetmHandler(Lcom/android/server/notification/ZenModeHelper;)Lcom/android/server/notification/ZenModeHelper$H;
 PLcom/android/server/notification/ZenModeHelper;->-$$Nest$fgetmMetrics(Lcom/android/server/notification/ZenModeHelper;)Lcom/android/server/notification/ZenModeHelper$Metrics;
-PLcom/android/server/notification/ZenModeHelper;->-$$Nest$mapplyConfig(Lcom/android/server/notification/ZenModeHelper;Landroid/service/notification/ZenModeConfig;Ljava/lang/String;Landroid/content/ComponentName;Z)V
+HSPLcom/android/server/notification/ZenModeHelper;->-$$Nest$mapplyConfig(Lcom/android/server/notification/ZenModeHelper;Landroid/service/notification/ZenModeConfig;Ljava/lang/String;Landroid/content/ComponentName;Z)V
 PLcom/android/server/notification/ZenModeHelper;->-$$Nest$mdispatchOnZenModeChanged(Lcom/android/server/notification/ZenModeHelper;)V
 PLcom/android/server/notification/ZenModeHelper;->-$$Nest$mgetZenModeSetting(Lcom/android/server/notification/ZenModeHelper;)I
 HSPLcom/android/server/notification/ZenModeHelper;->-$$Nest$msetPreviousRingerModeSetting(Lcom/android/server/notification/ZenModeHelper;Ljava/lang/Integer;)V
@@ -33764,7 +34990,7 @@
 HSPLcom/android/server/notification/ZenModeHelper;-><init>(Landroid/content/Context;Landroid/os/Looper;Lcom/android/server/notification/ConditionProviders;Lcom/android/server/notification/SysUiStatsEvent$BuilderFactory;)V
 PLcom/android/server/notification/ZenModeHelper;->addAutomaticZenRule(Ljava/lang/String;Landroid/app/AutomaticZenRule;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/notification/ZenModeHelper;->addCallback(Lcom/android/server/notification/ZenModeHelper$Callback;)V
-HPLcom/android/server/notification/ZenModeHelper;->applyConfig(Landroid/service/notification/ZenModeConfig;Ljava/lang/String;Landroid/content/ComponentName;Z)V
+HSPLcom/android/server/notification/ZenModeHelper;->applyConfig(Landroid/service/notification/ZenModeConfig;Ljava/lang/String;Landroid/content/ComponentName;Z)V
 HSPLcom/android/server/notification/ZenModeHelper;->applyCustomPolicy(Landroid/service/notification/ZenPolicy;Landroid/service/notification/ZenModeConfig$ZenRule;)V
 HSPLcom/android/server/notification/ZenModeHelper;->applyRestrictions()V
 HSPLcom/android/server/notification/ZenModeHelper;->applyRestrictions(ZZI)V
@@ -33785,7 +35011,7 @@
 PLcom/android/server/notification/ZenModeHelper;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/notification/ZenModeHelper;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;Landroid/service/notification/ZenModeConfig;)V
 HSPLcom/android/server/notification/ZenModeHelper;->evaluateZenMode(Ljava/lang/String;Z)V
-HPLcom/android/server/notification/ZenModeHelper;->findMatchingRules(Landroid/service/notification/ZenModeConfig;Landroid/net/Uri;Landroid/service/notification/Condition;)Ljava/util/List;
+HSPLcom/android/server/notification/ZenModeHelper;->findMatchingRules(Landroid/service/notification/ZenModeConfig;Landroid/net/Uri;Landroid/service/notification/Condition;)Ljava/util/List;
 PLcom/android/server/notification/ZenModeHelper;->getActivityInfo(Landroid/content/ComponentName;)Landroid/content/pm/ActivityInfo;
 PLcom/android/server/notification/ZenModeHelper;->getAutomaticZenRule(Ljava/lang/String;)Landroid/app/AutomaticZenRule;
 HSPLcom/android/server/notification/ZenModeHelper;->getConfig()Landroid/service/notification/ZenModeConfig;
@@ -33805,23 +35031,23 @@
 HSPLcom/android/server/notification/ZenModeHelper;->initZenMode()V
 HPLcom/android/server/notification/ZenModeHelper;->isCall(Lcom/android/server/notification/NotificationRecord;)Z
 PLcom/android/server/notification/ZenModeHelper;->isSystemRule(Landroid/app/AutomaticZenRule;)Z
-PLcom/android/server/notification/ZenModeHelper;->loadConfigForUser(ILjava/lang/String;)V
+HSPLcom/android/server/notification/ZenModeHelper;->loadConfigForUser(ILjava/lang/String;)V
 PLcom/android/server/notification/ZenModeHelper;->matchesCallFilter(Landroid/os/UserHandle;Landroid/os/Bundle;Lcom/android/server/notification/ValidateNotificationPeople;IF)Z
 HSPLcom/android/server/notification/ZenModeHelper;->onSystemReady()V
 PLcom/android/server/notification/ZenModeHelper;->onUserRemoved(I)V
-PLcom/android/server/notification/ZenModeHelper;->onUserSwitched(I)V
+HSPLcom/android/server/notification/ZenModeHelper;->onUserSwitched(I)V
 PLcom/android/server/notification/ZenModeHelper;->onUserUnlocked(I)V
 HPLcom/android/server/notification/ZenModeHelper;->populateZenRule(Ljava/lang/String;Landroid/app/AutomaticZenRule;Landroid/service/notification/ZenModeConfig$ZenRule;Z)V
 HSPLcom/android/server/notification/ZenModeHelper;->readDefaultConfig(Landroid/content/res/Resources;)Landroid/service/notification/ZenModeConfig;
 HSPLcom/android/server/notification/ZenModeHelper;->readXml(Landroid/util/TypedXmlPullParser;ZI)V
 PLcom/android/server/notification/ZenModeHelper;->recordCaller(Lcom/android/server/notification/NotificationRecord;)V
 PLcom/android/server/notification/ZenModeHelper;->removeAutomaticZenRule(Ljava/lang/String;Ljava/lang/String;)Z
-PLcom/android/server/notification/ZenModeHelper;->removeAutomaticZenRules(Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/notification/ZenModeHelper;->removeAutomaticZenRules(Ljava/lang/String;Ljava/lang/String;)Z
 PLcom/android/server/notification/ZenModeHelper;->requestFromListener(Landroid/content/ComponentName;I)V
-HPLcom/android/server/notification/ZenModeHelper;->ruleMatches(Landroid/net/Uri;Landroid/service/notification/Condition;Landroid/service/notification/ZenModeConfig$ZenRule;)Z
-HPLcom/android/server/notification/ZenModeHelper;->setAutomaticZenRuleState(Landroid/net/Uri;Landroid/service/notification/Condition;)V
-PLcom/android/server/notification/ZenModeHelper;->setAutomaticZenRuleState(Ljava/lang/String;Landroid/service/notification/Condition;)V
-HPLcom/android/server/notification/ZenModeHelper;->setAutomaticZenRuleStateLocked(Landroid/service/notification/ZenModeConfig;Ljava/util/List;Landroid/service/notification/Condition;)V
+HSPLcom/android/server/notification/ZenModeHelper;->ruleMatches(Landroid/net/Uri;Landroid/service/notification/Condition;Landroid/service/notification/ZenModeConfig$ZenRule;)Z
+HSPLcom/android/server/notification/ZenModeHelper;->setAutomaticZenRuleState(Landroid/net/Uri;Landroid/service/notification/Condition;)V
+HPLcom/android/server/notification/ZenModeHelper;->setAutomaticZenRuleState(Ljava/lang/String;Landroid/service/notification/Condition;)V
+HSPLcom/android/server/notification/ZenModeHelper;->setAutomaticZenRuleStateLocked(Landroid/service/notification/ZenModeConfig;Ljava/util/List;Landroid/service/notification/Condition;)V
 PLcom/android/server/notification/ZenModeHelper;->setConfig(Landroid/service/notification/ZenModeConfig;Landroid/content/ComponentName;Ljava/lang/String;)V
 HSPLcom/android/server/notification/ZenModeHelper;->setConfigLocked(Landroid/service/notification/ZenModeConfig;Landroid/content/ComponentName;Ljava/lang/String;)Z
 HSPLcom/android/server/notification/ZenModeHelper;->setConfigLocked(Landroid/service/notification/ZenModeConfig;Ljava/lang/String;Landroid/content/ComponentName;Z)Z
@@ -33832,7 +35058,7 @@
 HSPLcom/android/server/notification/ZenModeHelper;->setPriorityOnlyDndExemptPackages([Ljava/lang/String;)V
 PLcom/android/server/notification/ZenModeHelper;->setSuppressedEffects(J)V
 HSPLcom/android/server/notification/ZenModeHelper;->setZenModeSetting(I)V
-HPLcom/android/server/notification/ZenModeHelper;->shouldIntercept(Lcom/android/server/notification/NotificationRecord;)Z+]Lcom/android/server/notification/ZenModeFiltering;Lcom/android/server/notification/ZenModeFiltering;
+HSPLcom/android/server/notification/ZenModeHelper;->shouldIntercept(Lcom/android/server/notification/NotificationRecord;)Z+]Lcom/android/server/notification/ZenModeFiltering;Lcom/android/server/notification/ZenModeFiltering;
 HSPLcom/android/server/notification/ZenModeHelper;->showZenUpgradeNotification(I)V
 HPLcom/android/server/notification/ZenModeHelper;->updateAutomaticZenRule(Ljava/lang/String;Landroid/app/AutomaticZenRule;Ljava/lang/String;)Z
 HSPLcom/android/server/notification/ZenModeHelper;->updateConsolidatedPolicy(Ljava/lang/String;)V
@@ -33851,9 +35077,10 @@
 PLcom/android/server/notification/toast/TextToastRecord;-><init>(Lcom/android/server/notification/NotificationManagerService;Lcom/android/server/statusbar/StatusBarManagerInternal;IILjava/lang/String;ZLandroid/os/IBinder;Ljava/lang/CharSequence;ILandroid/os/Binder;ILandroid/app/ITransientNotificationCallback;)V
 PLcom/android/server/notification/toast/TextToastRecord;->hide()V
 PLcom/android/server/notification/toast/TextToastRecord;->isAppRendered()Z
-PLcom/android/server/notification/toast/TextToastRecord;->show()Z
+HPLcom/android/server/notification/toast/TextToastRecord;->show()Z
 PLcom/android/server/notification/toast/TextToastRecord;->toString()Ljava/lang/String;
-PLcom/android/server/notification/toast/ToastRecord;-><init>(Lcom/android/server/notification/NotificationManagerService;IILjava/lang/String;ZLandroid/os/IBinder;ILandroid/os/Binder;I)V
+HPLcom/android/server/notification/toast/ToastRecord;-><init>(Lcom/android/server/notification/NotificationManagerService;IILjava/lang/String;ZLandroid/os/IBinder;ILandroid/os/Binder;I)V
+PLcom/android/server/notification/toast/ToastRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/notification/NotificationManagerService$DumpFilter;)V
 PLcom/android/server/notification/toast/ToastRecord;->getDuration()I
 PLcom/android/server/notification/toast/ToastRecord;->hide()V
 PLcom/android/server/notification/toast/ToastRecord;->isAppRendered()Z
@@ -33864,7 +35091,7 @@
 PLcom/android/server/oemlock/OemLock;->isOemUnlockAllowedByCarrier()Z
 PLcom/android/server/oemlock/OemLock;->setOemUnlockAllowedByDevice(Z)V
 HSPLcom/android/server/oemlock/OemLockService$1;-><init>(Lcom/android/server/oemlock/OemLockService;)V
-PLcom/android/server/oemlock/OemLockService$1;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
+HSPLcom/android/server/oemlock/OemLockService$1;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
 HSPLcom/android/server/oemlock/OemLockService$2;-><init>(Lcom/android/server/oemlock/OemLockService;)V
 PLcom/android/server/oemlock/OemLockService$2;->getLockName()Ljava/lang/String;
 PLcom/android/server/oemlock/OemLockService$2;->isDeviceOemUnlocked()Z
@@ -33906,7 +35133,7 @@
 PLcom/android/server/oemlock/VendorLock;->lambda$isOemUnlockAllowedByCarrier$1([Ljava/lang/Integer;[Ljava/lang/Boolean;IZ)V
 PLcom/android/server/oemlock/VendorLock;->lambda$isOemUnlockAllowedByDevice$2([Ljava/lang/Integer;[Ljava/lang/Boolean;IZ)V
 PLcom/android/server/oemlock/VendorLock;->setOemUnlockAllowedByCarrier(Z[B)V
-PLcom/android/server/oemlock/VendorLock;->toByteArrayList([B)Ljava/util/ArrayList;
+HPLcom/android/server/oemlock/VendorLock;->toByteArrayList([B)Ljava/util/ArrayList;
 PLcom/android/server/om/DumpState;-><init>()V
 PLcom/android/server/om/DumpState;->getField()Ljava/lang/String;
 PLcom/android/server/om/DumpState;->getOverlayName()Ljava/lang/String;
@@ -34096,7 +35323,7 @@
 HSPLcom/android/server/om/OverlayManagerServiceImpl;->isPackageConfiguredEnabled(Lcom/android/server/pm/parsing/pkg/AndroidPackage;)Z
 HSPLcom/android/server/om/OverlayManagerServiceImpl;->isPackageConfiguredMutable(Lcom/android/server/pm/parsing/pkg/AndroidPackage;)Z
 HSPLcom/android/server/om/OverlayManagerServiceImpl;->lambda$getFabricatedOverlayInfos$3(Ljava/util/Set;Landroid/os/FabricatedOverlayInfo;)Z
-PLcom/android/server/om/OverlayManagerServiceImpl;->lambda$onPackageRemoved$1(Ljava/lang/String;Landroid/content/om/OverlayInfo;)Z
+HPLcom/android/server/om/OverlayManagerServiceImpl;->lambda$onPackageRemoved$1(Ljava/lang/String;Landroid/content/om/OverlayInfo;)Z
 HSPLcom/android/server/om/OverlayManagerServiceImpl;->lambda$removeOverlaysForUser$2(ILjava/util/function/Predicate;Landroid/content/om/OverlayInfo;)Z
 HSPLcom/android/server/om/OverlayManagerServiceImpl;->lambda$updateOverlaysForUser$0(Landroid/util/ArrayMap;Landroid/content/om/OverlayInfo;)Z
 HSPLcom/android/server/om/OverlayManagerServiceImpl;->mustReinitializeOverlay(Landroid/os/FabricatedOverlayInfo;Landroid/content/om/OverlayInfo;)Z
@@ -34313,7 +35540,7 @@
 HSPLcom/android/server/os/DeviceIdentifiersPolicyService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/os/DeviceIdentifiersPolicyService;->onStart()V
 HPLcom/android/server/os/NativeTombstoneManager$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/os/NativeTombstoneManager;IIILjava/util/ArrayList;ILjava/util/concurrent/CompletableFuture;)V
-PLcom/android/server/os/NativeTombstoneManager$$ExternalSyntheticLambda0;->run()V
+HPLcom/android/server/os/NativeTombstoneManager$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/os/NativeTombstoneManager$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/os/NativeTombstoneManager;)V
 HSPLcom/android/server/os/NativeTombstoneManager$$ExternalSyntheticLambda1;->run()V
 PLcom/android/server/os/NativeTombstoneManager$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/os/NativeTombstoneManager;Ljava/util/Optional;Ljava/util/Optional;)V
@@ -34329,17 +35556,19 @@
 HSPLcom/android/server/os/NativeTombstoneManager$TombstoneFile;-><init>(Landroid/os/ParcelFileDescriptor;)V
 PLcom/android/server/os/NativeTombstoneManager$TombstoneFile;->dispose()V
 PLcom/android/server/os/NativeTombstoneManager$TombstoneFile;->getPfdRetriever()Landroid/app/IParcelFileDescriptorRetriever;
-PLcom/android/server/os/NativeTombstoneManager$TombstoneFile;->getProcessName()Ljava/lang/String;
+HSPLcom/android/server/os/NativeTombstoneManager$TombstoneFile;->getProcessName()Ljava/lang/String;
 HPLcom/android/server/os/NativeTombstoneManager$TombstoneFile;->matches(Landroid/app/ApplicationExitInfo;)Z+]Landroid/app/ApplicationExitInfo;Landroid/app/ApplicationExitInfo;
 HPLcom/android/server/os/NativeTombstoneManager$TombstoneFile;->matches(Ljava/util/Optional;Ljava/util/Optional;)Z+]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/Optional;Ljava/util/Optional;
-HSPLcom/android/server/os/NativeTombstoneManager$TombstoneFile;->parse(Landroid/os/ParcelFileDescriptor;)Ljava/util/Optional;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/String;Ljava/lang/String;]Landroid/util/proto/ProtoInputStream;Landroid/util/proto/ProtoInputStream;]Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;
+HSPLcom/android/server/os/NativeTombstoneManager$TombstoneFile;->parse(Landroid/os/ParcelFileDescriptor;)Ljava/util/Optional;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/proto/ProtoInputStream;Landroid/util/proto/ProtoInputStream;]Ljava/lang/String;Ljava/lang/String;]Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;
 PLcom/android/server/os/NativeTombstoneManager$TombstoneFile;->purge()V
+PLcom/android/server/os/NativeTombstoneManager$TombstoneFile;->toAppExitInfo()Landroid/app/ApplicationExitInfo;
 PLcom/android/server/os/NativeTombstoneManager$TombstoneWatcher$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/os/NativeTombstoneManager$TombstoneWatcher;Ljava/lang/String;)V
 PLcom/android/server/os/NativeTombstoneManager$TombstoneWatcher$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/os/NativeTombstoneManager$TombstoneWatcher;->$r8$lambda$brzM_6e7cyhhJeR_ISUCuvFg3_s(Lcom/android/server/os/NativeTombstoneManager$TombstoneWatcher;Ljava/lang/String;)V
 HSPLcom/android/server/os/NativeTombstoneManager$TombstoneWatcher;-><init>(Lcom/android/server/os/NativeTombstoneManager;)V
 PLcom/android/server/os/NativeTombstoneManager$TombstoneWatcher;->lambda$onEvent$0(Ljava/lang/String;)V
 PLcom/android/server/os/NativeTombstoneManager$TombstoneWatcher;->onEvent(ILjava/lang/String;)V
+HPLcom/android/server/os/NativeTombstoneManager;->$r8$lambda$CZU3Ke3pc6JrL_ptz3vxNw1h-Zk(Landroid/app/ApplicationExitInfo;Landroid/app/ApplicationExitInfo;)I
 HSPLcom/android/server/os/NativeTombstoneManager;->$r8$lambda$HIZsEl7g0A5yOmsjgTI18eAoNJw(Lcom/android/server/os/NativeTombstoneManager;)V
 HPLcom/android/server/os/NativeTombstoneManager;->$r8$lambda$hxKIlPjaOvpu61iPi9RFSm0nNbA(Lcom/android/server/os/NativeTombstoneManager;IIILjava/util/ArrayList;ILjava/util/concurrent/CompletableFuture;)V
 PLcom/android/server/os/NativeTombstoneManager;->$r8$lambda$j2EMu8PBKFmELLuDn3Yy6ygI-D8(Lcom/android/server/os/NativeTombstoneManager;Ljava/util/Optional;Ljava/util/Optional;)V
@@ -34351,9 +35580,10 @@
 HSPLcom/android/server/os/NativeTombstoneManager;->-$$Nest$sfgetTOMBSTONE_DIR()Ljava/io/File;
 HSPLcom/android/server/os/NativeTombstoneManager;-><clinit>()V
 HSPLcom/android/server/os/NativeTombstoneManager;-><init>(Landroid/content/Context;)V
-HPLcom/android/server/os/NativeTombstoneManager;->collectTombstones(Ljava/util/ArrayList;III)V
+HPLcom/android/server/os/NativeTombstoneManager;->collectTombstones(Ljava/util/ArrayList;III)V+]Landroid/os/Handler;Landroid/os/Handler;]Ljava/util/concurrent/CompletableFuture;Ljava/util/concurrent/CompletableFuture;
 HSPLcom/android/server/os/NativeTombstoneManager;->handleProtoTombstone(Ljava/io/File;Z)Ljava/util/Optional;
 HSPLcom/android/server/os/NativeTombstoneManager;->handleTombstone(Ljava/io/File;)V
+PLcom/android/server/os/NativeTombstoneManager;->lambda$collectTombstones$2(Landroid/app/ApplicationExitInfo;Landroid/app/ApplicationExitInfo;)I
 HPLcom/android/server/os/NativeTombstoneManager;->lambda$collectTombstones$3(IIILjava/util/ArrayList;ILjava/util/concurrent/CompletableFuture;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/concurrent/CompletableFuture;Ljava/util/concurrent/CompletableFuture;]Lcom/android/server/os/NativeTombstoneManager$TombstoneFile;Lcom/android/server/os/NativeTombstoneManager$TombstoneFile;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/ApplicationExitInfo;Landroid/app/ApplicationExitInfo;
 HSPLcom/android/server/os/NativeTombstoneManager;->lambda$onSystemReady$0()V
 PLcom/android/server/os/NativeTombstoneManager;->lambda$purge$1(Ljava/util/Optional;Ljava/util/Optional;)V
@@ -34381,7 +35611,7 @@
 HSPLcom/android/server/people/PeopleService$1;-><init>(Lcom/android/server/people/PeopleService;)V
 PLcom/android/server/people/PeopleService$1;->addOrUpdateStatus(Ljava/lang/String;ILjava/lang/String;Landroid/app/people/ConversationStatus;)V
 PLcom/android/server/people/PeopleService$1;->clearStatus(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/people/PeopleService$1;->enforceHasReadPeopleDataPermission()V
+HPLcom/android/server/people/PeopleService$1;->enforceHasReadPeopleDataPermission()V
 PLcom/android/server/people/PeopleService$1;->getConversation(Ljava/lang/String;ILjava/lang/String;)Landroid/app/people/ConversationChannel;
 PLcom/android/server/people/PeopleService$1;->getRecentConversations()Landroid/content/pm/ParceledListSlice;
 PLcom/android/server/people/PeopleService$1;->getStatuses(Ljava/lang/String;ILjava/lang/String;)Landroid/content/pm/ParceledListSlice;
@@ -34391,7 +35621,7 @@
 PLcom/android/server/people/PeopleService$1;->unregisterConversationListener(Landroid/app/people/IConversationListener;)V
 HSPLcom/android/server/people/PeopleService$ConversationListenerHelper;-><init>()V
 PLcom/android/server/people/PeopleService$ConversationListenerHelper;->addConversationListener(Lcom/android/server/people/PeopleService$ListenerKey;Landroid/app/people/IConversationListener;)V
-PLcom/android/server/people/PeopleService$ConversationListenerHelper;->getListenerKey(Landroid/app/people/ConversationChannel;)Lcom/android/server/people/PeopleService$ListenerKey;
+HPLcom/android/server/people/PeopleService$ConversationListenerHelper;->getListenerKey(Landroid/app/people/ConversationChannel;)Lcom/android/server/people/PeopleService$ListenerKey;
 HPLcom/android/server/people/PeopleService$ConversationListenerHelper;->onConversationsUpdate(Ljava/util/List;)V
 PLcom/android/server/people/PeopleService$ConversationListenerHelper;->removeConversationListener(Landroid/app/people/IConversationListener;)V
 PLcom/android/server/people/PeopleService$ListenerKey;-><init>(Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/String;)V
@@ -34400,14 +35630,49 @@
 PLcom/android/server/people/PeopleService$ListenerKey;->getShortcutId()Ljava/lang/String;
 PLcom/android/server/people/PeopleService$ListenerKey;->getUserId()Ljava/lang/Integer;
 HPLcom/android/server/people/PeopleService$ListenerKey;->hashCode()I
+PLcom/android/server/people/PeopleService$LocalService$$ExternalSyntheticLambda0;-><init>(Landroid/app/prediction/IPredictionCallback;)V
+PLcom/android/server/people/PeopleService$LocalService$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
+PLcom/android/server/people/PeopleService$LocalService$$ExternalSyntheticLambda1;-><init>(Landroid/app/prediction/IPredictionCallback;)V
+PLcom/android/server/people/PeopleService$LocalService$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
+PLcom/android/server/people/PeopleService$LocalService$$ExternalSyntheticLambda2;-><init>()V
+PLcom/android/server/people/PeopleService$LocalService$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;)V
+PLcom/android/server/people/PeopleService$LocalService$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/people/PeopleService$LocalService;Landroid/content/pm/ParceledListSlice;Landroid/app/prediction/IPredictionCallback;)V
+PLcom/android/server/people/PeopleService$LocalService$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;)V
+PLcom/android/server/people/PeopleService$LocalService$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/people/PeopleService$LocalService;Landroid/app/prediction/AppPredictionSessionId;)V
+PLcom/android/server/people/PeopleService$LocalService$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;)V
+PLcom/android/server/people/PeopleService$LocalService$$ExternalSyntheticLambda6;-><init>(Landroid/app/prediction/AppTargetEvent;)V
+PLcom/android/server/people/PeopleService$LocalService$$ExternalSyntheticLambda6;->accept(Ljava/lang/Object;)V
+PLcom/android/server/people/PeopleService$LocalService$$ExternalSyntheticLambda7;-><init>(Lcom/android/server/people/PeopleService$LocalService;Landroid/app/prediction/IPredictionCallback;)V
+PLcom/android/server/people/PeopleService$LocalService$$ExternalSyntheticLambda7;->accept(Ljava/lang/Object;)V
+PLcom/android/server/people/PeopleService$LocalService;->$r8$lambda$HQneSwit7rAxp-xdNcEMPvFKiqs(Lcom/android/server/people/PeopleService$LocalService;Landroid/app/prediction/AppPredictionSessionId;Lcom/android/server/people/SessionInfo;)V
+PLcom/android/server/people/PeopleService$LocalService;->$r8$lambda$Soypu26D3N5cN6U93d7HKnnvSL8(Lcom/android/server/people/SessionInfo;)V
+PLcom/android/server/people/PeopleService$LocalService;->$r8$lambda$bTa4W1IEomWi7CyVmIqicrn4BL4(Lcom/android/server/people/PeopleService$LocalService;Landroid/content/pm/ParceledListSlice;Landroid/app/prediction/IPredictionCallback;Lcom/android/server/people/SessionInfo;)V
+PLcom/android/server/people/PeopleService$LocalService;->$r8$lambda$eYQdqkixRWCMzE_4SN8ZNyDkFmU(Landroid/app/prediction/AppTargetEvent;Lcom/android/server/people/SessionInfo;)V
+PLcom/android/server/people/PeopleService$LocalService;->$r8$lambda$iu-MRQKF4hNJqU_uYSnVeZ9XB8g(Landroid/app/prediction/IPredictionCallback;Lcom/android/server/people/SessionInfo;)V
+PLcom/android/server/people/PeopleService$LocalService;->$r8$lambda$s2JMVhiEbG6f9ZHmKJDwLfEhMAQ(Lcom/android/server/people/PeopleService$LocalService;Landroid/app/prediction/IPredictionCallback;Ljava/util/List;)V
+PLcom/android/server/people/PeopleService$LocalService;->$r8$lambda$thslYAyf9g6VC3M1YkISkLC7ybE(Landroid/app/prediction/IPredictionCallback;Lcom/android/server/people/SessionInfo;)V
 HSPLcom/android/server/people/PeopleService$LocalService;-><init>(Lcom/android/server/people/PeopleService;)V
 PLcom/android/server/people/PeopleService$LocalService;->getBackupPayload(I)[B
+PLcom/android/server/people/PeopleService$LocalService;->invokePredictionCallback(Landroid/app/prediction/IPredictionCallback;Ljava/util/List;)V
+PLcom/android/server/people/PeopleService$LocalService;->lambda$notifyAppTargetEvent$0(Landroid/app/prediction/AppTargetEvent;Lcom/android/server/people/SessionInfo;)V
+PLcom/android/server/people/PeopleService$LocalService;->lambda$onDestroyPredictionSession$7(Landroid/app/prediction/AppPredictionSessionId;Lcom/android/server/people/SessionInfo;)V
+PLcom/android/server/people/PeopleService$LocalService;->lambda$registerPredictionUpdates$4(Landroid/app/prediction/IPredictionCallback;Lcom/android/server/people/SessionInfo;)V
 PLcom/android/server/people/PeopleService$LocalService;->lambda$requestPredictionUpdate$6(Lcom/android/server/people/SessionInfo;)V
 PLcom/android/server/people/PeopleService$LocalService;->lambda$sortAppTargets$2(Landroid/app/prediction/IPredictionCallback;Ljava/util/List;)V
+PLcom/android/server/people/PeopleService$LocalService;->lambda$sortAppTargets$3(Landroid/content/pm/ParceledListSlice;Landroid/app/prediction/IPredictionCallback;Lcom/android/server/people/SessionInfo;)V
+PLcom/android/server/people/PeopleService$LocalService;->lambda$unregisterPredictionUpdates$5(Landroid/app/prediction/IPredictionCallback;Lcom/android/server/people/SessionInfo;)V
+PLcom/android/server/people/PeopleService$LocalService;->notifyAppTargetEvent(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/AppTargetEvent;)V
+PLcom/android/server/people/PeopleService$LocalService;->onCreatePredictionSession(Landroid/app/prediction/AppPredictionContext;Landroid/app/prediction/AppPredictionSessionId;)V
+PLcom/android/server/people/PeopleService$LocalService;->onDestroyPredictionSession(Landroid/app/prediction/AppPredictionSessionId;)V
 PLcom/android/server/people/PeopleService$LocalService;->pruneDataForUser(ILandroid/os/CancellationSignal;)V
-PLcom/android/server/people/PeopleService;->-$$Nest$fgetmDataManager(Lcom/android/server/people/PeopleService;)Lcom/android/server/people/data/DataManager;
+PLcom/android/server/people/PeopleService$LocalService;->registerPredictionUpdates(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/IPredictionCallback;)V
+PLcom/android/server/people/PeopleService$LocalService;->requestPredictionUpdate(Landroid/app/prediction/AppPredictionSessionId;)V
+PLcom/android/server/people/PeopleService$LocalService;->runForSession(Landroid/app/prediction/AppPredictionSessionId;Ljava/util/function/Consumer;)V
+PLcom/android/server/people/PeopleService$LocalService;->sortAppTargets(Landroid/app/prediction/AppPredictionSessionId;Landroid/content/pm/ParceledListSlice;Landroid/app/prediction/IPredictionCallback;)V
+PLcom/android/server/people/PeopleService$LocalService;->unregisterPredictionUpdates(Landroid/app/prediction/AppPredictionSessionId;Landroid/app/prediction/IPredictionCallback;)V
+HPLcom/android/server/people/PeopleService;->-$$Nest$fgetmDataManager(Lcom/android/server/people/PeopleService;)Lcom/android/server/people/data/DataManager;
 PLcom/android/server/people/PeopleService;->-$$Nest$mcheckCallerIsSameApp(Lcom/android/server/people/PeopleService;Ljava/lang/String;)V
-PLcom/android/server/people/PeopleService;->-$$Nest$mhandleIncomingUser(Lcom/android/server/people/PeopleService;I)I
+HPLcom/android/server/people/PeopleService;->-$$Nest$mhandleIncomingUser(Lcom/android/server/people/PeopleService;I)I
 HSPLcom/android/server/people/PeopleService;-><init>(Landroid/content/Context;)V
 PLcom/android/server/people/PeopleService;->enforceSystemRootOrSystemUI(Landroid/content/Context;Ljava/lang/String;)V
 HPLcom/android/server/people/PeopleService;->handleIncomingUser(I)I
@@ -34422,11 +35687,16 @@
 PLcom/android/server/people/PeopleServiceInternal;->restore(I[B)V
 PLcom/android/server/people/SessionInfo$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/people/SessionInfo;)V
 PLcom/android/server/people/SessionInfo$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
+PLcom/android/server/people/SessionInfo;->$r8$lambda$RIOUQ-rGCiMN5TmMPFQFPJqUXbY(Lcom/android/server/people/SessionInfo;Ljava/util/List;)V
 PLcom/android/server/people/SessionInfo;-><init>(Landroid/app/prediction/AppPredictionContext;Lcom/android/server/people/data/DataManager;ILandroid/content/Context;)V
 PLcom/android/server/people/SessionInfo;->addCallback(Landroid/app/prediction/IPredictionCallback;)V
+PLcom/android/server/people/SessionInfo;->getPredictor()Lcom/android/server/people/prediction/AppTargetPredictor;
+PLcom/android/server/people/SessionInfo;->onDestroy()V
+PLcom/android/server/people/SessionInfo;->removeCallback(Landroid/app/prediction/IPredictionCallback;)V
+PLcom/android/server/people/SessionInfo;->updatePredictions(Ljava/util/List;)V
 PLcom/android/server/people/data/AbstractProtoDiskReadWriter$$ExternalSyntheticLambda0;-><init>(Ljava/lang/String;)V
 PLcom/android/server/people/data/AbstractProtoDiskReadWriter$$ExternalSyntheticLambda0;->accept(Ljava/io/File;)Z
-PLcom/android/server/people/data/AbstractProtoDiskReadWriter$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/people/data/AbstractProtoDiskReadWriter;)V
+HPLcom/android/server/people/data/AbstractProtoDiskReadWriter$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/people/data/AbstractProtoDiskReadWriter;)V
 PLcom/android/server/people/data/AbstractProtoDiskReadWriter$$ExternalSyntheticLambda1;->run()V
 PLcom/android/server/people/data/AbstractProtoDiskReadWriter;->$r8$lambda$8hKrFxaERM0k5Zmspu6vDGvnkqA(Lcom/android/server/people/data/AbstractProtoDiskReadWriter;)V
 PLcom/android/server/people/data/AbstractProtoDiskReadWriter;->$r8$lambda$xO0W3CCwasK1I_FEyFVkvRPrN_c(Ljava/lang/String;Ljava/io/File;)Z
@@ -34443,11 +35713,16 @@
 PLcom/android/server/people/data/AbstractProtoDiskReadWriter;->saveImmediately(Ljava/lang/String;Ljava/lang/Object;)V
 HPLcom/android/server/people/data/AbstractProtoDiskReadWriter;->scheduleSave(Ljava/lang/String;Ljava/lang/Object;)V+]Ljava/util/Map;Landroid/util/ArrayMap;]Ljava/util/concurrent/ScheduledExecutorService;Ljava/util/concurrent/Executors$DelegatedScheduledExecutorService;
 PLcom/android/server/people/data/AbstractProtoDiskReadWriter;->triggerScheduledFlushEarly()V
-PLcom/android/server/people/data/AbstractProtoDiskReadWriter;->writeTo(Ljava/lang/String;Ljava/lang/Object;)V
+HPLcom/android/server/people/data/AbstractProtoDiskReadWriter;->writeTo(Ljava/lang/String;Ljava/lang/Object;)V
 PLcom/android/server/people/data/AggregateEventHistoryImpl;-><init>()V
+PLcom/android/server/people/data/AggregateEventHistoryImpl;->getEventIndex(I)Lcom/android/server/people/data/EventIndex;
 PLcom/android/server/people/data/AggregateEventHistoryImpl;->getEventIndex(Ljava/util/Set;)Lcom/android/server/people/data/EventIndex;
+PLcom/android/server/people/data/AppUsageStatsData;-><init>()V
 HPLcom/android/server/people/data/AppUsageStatsData;-><init>(II)V
+PLcom/android/server/people/data/AppUsageStatsData;->getChosenCount()I
 PLcom/android/server/people/data/AppUsageStatsData;->getLaunchCount()I
+PLcom/android/server/people/data/AppUsageStatsData;->incrementChosenCountBy(I)V
+PLcom/android/server/people/data/AppUsageStatsData;->incrementLaunchCountBy(I)V
 PLcom/android/server/people/data/CallLogQueryHelper;-><clinit>()V
 PLcom/android/server/people/data/CallLogQueryHelper;-><init>(Landroid/content/Context;Ljava/util/function/BiConsumer;)V
 PLcom/android/server/people/data/CallLogQueryHelper;->addEvent(Ljava/lang/String;JJI)Z
@@ -34459,7 +35734,7 @@
 PLcom/android/server/people/data/ContactsQueryHelper;->getLastUpdatedTimestamp()J
 PLcom/android/server/people/data/ContactsQueryHelper;->getPhoneNumber()Ljava/lang/String;
 HPLcom/android/server/people/data/ContactsQueryHelper;->queryContact(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)Z+]Lcom/android/server/people/data/ContactsQueryHelper;Lcom/android/server/people/data/ContactsQueryHelper;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/database/Cursor;Landroid/content/ContentResolver$CursorWrapperInner;]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;
-PLcom/android/server/people/data/ContactsQueryHelper;->queryPhoneNumber(Ljava/lang/String;)Z
+HPLcom/android/server/people/data/ContactsQueryHelper;->queryPhoneNumber(Ljava/lang/String;)Z
 HPLcom/android/server/people/data/ContactsQueryHelper;->querySince(J)Z
 PLcom/android/server/people/data/ContactsQueryHelper;->queryWithEmail(Ljava/lang/String;)Z
 HPLcom/android/server/people/data/ConversationInfo$Builder;->-$$Nest$fgetmContactPhoneNumber(Lcom/android/server/people/data/ConversationInfo$Builder;)Ljava/lang/String;
@@ -34493,7 +35768,7 @@
 PLcom/android/server/people/data/ConversationInfo$Builder;->setNotificationSilenced(Z)Lcom/android/server/people/data/ConversationInfo$Builder;
 PLcom/android/server/people/data/ConversationInfo$Builder;->setParentNotificationChannelId(Ljava/lang/String;)Lcom/android/server/people/data/ConversationInfo$Builder;
 PLcom/android/server/people/data/ConversationInfo$Builder;->setShortcutFlags(I)Lcom/android/server/people/data/ConversationInfo$Builder;
-PLcom/android/server/people/data/ConversationInfo$Builder;->setShortcutId(Ljava/lang/String;)Lcom/android/server/people/data/ConversationInfo$Builder;
+HPLcom/android/server/people/data/ConversationInfo$Builder;->setShortcutId(Ljava/lang/String;)Lcom/android/server/people/data/ConversationInfo$Builder;
 HPLcom/android/server/people/data/ConversationInfo$Builder;->setStatuses(Ljava/util/List;)Lcom/android/server/people/data/ConversationInfo$Builder;+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HPLcom/android/server/people/data/ConversationInfo;->-$$Nest$fgetmContactPhoneNumber(Lcom/android/server/people/data/ConversationInfo;)Ljava/lang/String;
 HPLcom/android/server/people/data/ConversationInfo;->-$$Nest$fgetmContactUri(Lcom/android/server/people/data/ConversationInfo;)Landroid/net/Uri;
@@ -34528,7 +35803,7 @@
 PLcom/android/server/people/data/ConversationInfo;->isNotificationSilenced()Z
 PLcom/android/server/people/data/ConversationInfo;->isPersonBot()Z
 PLcom/android/server/people/data/ConversationInfo;->isPersonImportant()Z
-HPLcom/android/server/people/data/ConversationInfo;->isShortcutCachedForNotification()Z
+HPLcom/android/server/people/data/ConversationInfo;->isShortcutCachedForNotification()Z+]Lcom/android/server/people/data/ConversationInfo;Lcom/android/server/people/data/ConversationInfo;
 PLcom/android/server/people/data/ConversationInfo;->readFromProto(Landroid/util/proto/ProtoInputStream;)Lcom/android/server/people/data/ConversationInfo;
 HPLcom/android/server/people/data/ConversationInfo;->writeToProto(Landroid/util/proto/ProtoOutputStream;)V
 PLcom/android/server/people/data/ConversationStatusExpirationBroadcastReceiver;->$r8$lambda$27DqBUht_WIIM1LZcFr4Swg0myI(Landroid/content/Intent;)V
@@ -34560,10 +35835,10 @@
 HPLcom/android/server/people/data/ConversationStore;->forAllConversations(Ljava/util/function/Consumer;)V+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/function/Consumer;Lcom/android/server/people/data/ConversationStore$$ExternalSyntheticLambda0;,Lcom/android/server/people/data/DataManager$$ExternalSyntheticLambda14;,Lcom/android/server/people/data/DataManager$$ExternalSyntheticLambda9;,Lcom/android/server/people/data/DataManager$$ExternalSyntheticLambda12;]Ljava/util/Map;Landroid/util/ArrayMap;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 PLcom/android/server/people/data/ConversationStore;->getBackupPayload()[B
 HPLcom/android/server/people/data/ConversationStore;->getConversation(Ljava/lang/String;)Lcom/android/server/people/data/ConversationInfo;
-PLcom/android/server/people/data/ConversationStore;->getConversationByContactUri(Landroid/net/Uri;)Lcom/android/server/people/data/ConversationInfo;
+HPLcom/android/server/people/data/ConversationStore;->getConversationByContactUri(Landroid/net/Uri;)Lcom/android/server/people/data/ConversationInfo;
 PLcom/android/server/people/data/ConversationStore;->getConversationByLocusId(Landroid/content/LocusId;)Lcom/android/server/people/data/ConversationInfo;
 PLcom/android/server/people/data/ConversationStore;->getConversationByPhoneNumber(Ljava/lang/String;)Lcom/android/server/people/data/ConversationInfo;
-HPLcom/android/server/people/data/ConversationStore;->getConversationInfosProtoDiskReadWriter()Lcom/android/server/people/data/ConversationStore$ConversationInfosProtoDiskReadWriter;
+HPLcom/android/server/people/data/ConversationStore;->getConversationInfosProtoDiskReadWriter()Lcom/android/server/people/data/ConversationStore$ConversationInfosProtoDiskReadWriter;+]Ljava/io/File;Ljava/io/File;
 PLcom/android/server/people/data/ConversationStore;->lambda$getBackupPayload$0(Ljava/io/DataOutputStream;Lcom/android/server/people/data/ConversationInfo;)V
 PLcom/android/server/people/data/ConversationStore;->loadConversationsFromDisk()V
 PLcom/android/server/people/data/ConversationStore;->onDestroy()V
@@ -34665,7 +35940,7 @@
 HPLcom/android/server/people/data/DataManager$NotificationListener;->lambda$onNotificationRemoved$1(Landroid/service/notification/StatusBarNotification;Ljava/lang/String;Lcom/android/server/people/data/ConversationInfo;)V
 HPLcom/android/server/people/data/DataManager$NotificationListener;->onNotificationChannelModified(Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannel;I)V
 HPLcom/android/server/people/data/DataManager$NotificationListener;->onNotificationPosted(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;)V+]Lcom/android/server/people/data/EventStore;Lcom/android/server/people/data/EventStore;]Landroid/service/notification/NotificationListenerService$Ranking;Landroid/service/notification/NotificationListenerService$Ranking;]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/NotificationChannel;Landroid/app/NotificationChannel;]Landroid/service/notification/NotificationListenerService$RankingMap;Landroid/service/notification/NotificationListenerService$RankingMap;]Lcom/android/server/people/data/EventHistoryImpl;Lcom/android/server/people/data/EventHistoryImpl;]Landroid/app/Notification;Landroid/app/Notification;]Lcom/android/server/people/data/ConversationInfo$Builder;Lcom/android/server/people/data/ConversationInfo$Builder;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Lcom/android/server/people/data/PackageData;Lcom/android/server/people/data/PackageData;]Lcom/android/server/people/data/ConversationStore;Lcom/android/server/people/data/ConversationStore;
-HPLcom/android/server/people/data/DataManager$NotificationListener;->onNotificationRemoved(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;I)V
+HPLcom/android/server/people/data/DataManager$NotificationListener;->onNotificationRemoved(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;I)V+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Landroid/app/Notification;Landroid/app/Notification;]Landroid/os/UserHandle;Landroid/os/UserHandle;
 PLcom/android/server/people/data/DataManager$PerUserBroadcastReceiver;-><init>(Lcom/android/server/people/data/DataManager;I)V
 PLcom/android/server/people/data/DataManager$PerUserBroadcastReceiver;-><init>(Lcom/android/server/people/data/DataManager;ILcom/android/server/people/data/DataManager$PerUserBroadcastReceiver-IA;)V
 PLcom/android/server/people/data/DataManager$PerUserBroadcastReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
@@ -34699,14 +35974,14 @@
 PLcom/android/server/people/data/DataManager$UsageStatsQueryRunnable;-><init>(Lcom/android/server/people/data/DataManager;I)V
 PLcom/android/server/people/data/DataManager$UsageStatsQueryRunnable;-><init>(Lcom/android/server/people/data/DataManager;ILcom/android/server/people/data/DataManager$UsageStatsQueryRunnable-IA;)V
 HPLcom/android/server/people/data/DataManager$UsageStatsQueryRunnable;->lambda$new$0(ILjava/lang/String;)Lcom/android/server/people/data/PackageData;
-PLcom/android/server/people/data/DataManager$UsageStatsQueryRunnable;->onEvent(Lcom/android/server/people/data/PackageData;Lcom/android/server/people/data/ConversationInfo;Lcom/android/server/people/data/Event;)V
+HPLcom/android/server/people/data/DataManager$UsageStatsQueryRunnable;->onEvent(Lcom/android/server/people/data/PackageData;Lcom/android/server/people/data/ConversationInfo;Lcom/android/server/people/data/Event;)V
 HPLcom/android/server/people/data/DataManager$UsageStatsQueryRunnable;->run()V
 PLcom/android/server/people/data/DataManager;->$r8$lambda$CEP_MSm_RDjLw6X73MnXiP6mtgk(Lcom/android/server/people/data/DataManager;JLjava/lang/String;ILjava/util/List;Lcom/android/server/people/data/ConversationInfo;)V
 PLcom/android/server/people/data/DataManager;->$r8$lambda$CFF6sq2DwXdpGAaZvwveNH2Tj4c(Lcom/android/server/people/data/DataManager;JILcom/android/server/people/data/PackageData;)V
 PLcom/android/server/people/data/DataManager;->$r8$lambda$Qh1t5aK9GRz_fp5tfjOuAeO9338(Lcom/android/server/people/data/DataManager;Landroid/os/CancellationSignal;ILcom/android/server/people/data/PackageData;)V
 HPLcom/android/server/people/data/DataManager;->$r8$lambda$SnrAudnIII2089rcGYyIeqViWFA(Lcom/android/server/people/data/DataManager;JLcom/android/server/people/data/ConversationStore;Lcom/android/server/people/data/PackageData;Lcom/android/server/people/data/ConversationInfo;)V
 PLcom/android/server/people/data/DataManager;->$r8$lambda$VArZ-4SUEsRNziL5r-rI5nLeShw(Ljava/util/Set;Ljava/util/List;Lcom/android/server/people/data/PackageData;)V
-PLcom/android/server/people/data/DataManager;->$r8$lambda$XnziGrjly9dCtttm7e59qemAzOI(Lcom/android/server/people/data/DataManager;Ljava/util/List;)V
+HPLcom/android/server/people/data/DataManager;->$r8$lambda$XnziGrjly9dCtttm7e59qemAzOI(Lcom/android/server/people/data/DataManager;Ljava/util/List;)V
 PLcom/android/server/people/data/DataManager;->$r8$lambda$gj01B2lDcAmAjm8AxVuE9kOA980(Lcom/android/server/people/data/DataManager;I)V
 HPLcom/android/server/people/data/DataManager;->$r8$lambda$hbCrPDMi0L7nycEmEzwAUVOoKS4(Lcom/android/server/people/data/DataManager;Ljava/util/List;Lcom/android/server/people/data/PackageData;Lcom/android/server/people/data/ConversationInfo;)V
 PLcom/android/server/people/data/DataManager;->$r8$lambda$je5-n3-9mDXCUJCCcUjAmulmjFM(Ljava/util/Set;Lcom/android/server/pm/parsing/pkg/AndroidPackage;)V
@@ -34719,10 +35994,10 @@
 PLcom/android/server/people/data/DataManager;->-$$Nest$fgetmContext(Lcom/android/server/people/data/DataManager;)Landroid/content/Context;
 HPLcom/android/server/people/data/DataManager;->-$$Nest$fgetmInjector(Lcom/android/server/people/data/DataManager;)Lcom/android/server/people/data/DataManager$Injector;
 PLcom/android/server/people/data/DataManager;->-$$Nest$fgetmNotificationManagerInternal(Lcom/android/server/people/data/DataManager;)Lcom/android/server/notification/NotificationManagerInternal;
-PLcom/android/server/people/data/DataManager;->-$$Nest$fgetmShortcutServiceInternal(Lcom/android/server/people/data/DataManager;)Landroid/content/pm/ShortcutServiceInternal;
+HPLcom/android/server/people/data/DataManager;->-$$Nest$fgetmShortcutServiceInternal(Lcom/android/server/people/data/DataManager;)Landroid/content/pm/ShortcutServiceInternal;
 PLcom/android/server/people/data/DataManager;->-$$Nest$mcleanupCachedShortcuts(Lcom/android/server/people/data/DataManager;II)V
 PLcom/android/server/people/data/DataManager;->-$$Nest$mforAllUnlockedUsers(Lcom/android/server/people/data/DataManager;Ljava/util/function/Consumer;)V
-HPLcom/android/server/people/data/DataManager;->-$$Nest$mgetPackageIfConversationExists(Lcom/android/server/people/data/DataManager;Landroid/service/notification/StatusBarNotification;Ljava/util/function/Consumer;)Lcom/android/server/people/data/PackageData;
+HPLcom/android/server/people/data/DataManager;->-$$Nest$mgetPackageIfConversationExists(Lcom/android/server/people/data/DataManager;Landroid/service/notification/StatusBarNotification;Ljava/util/function/Consumer;)Lcom/android/server/people/data/PackageData;+]Lcom/android/server/people/data/DataManager;Lcom/android/server/people/data/DataManager;
 PLcom/android/server/people/data/DataManager;->-$$Nest$mgetUnlockedUserData(Lcom/android/server/people/data/DataManager;I)Lcom/android/server/people/data/UserData;
 PLcom/android/server/people/data/DataManager;->-$$Nest$mupdateConversationStoreThenNotifyListeners(Lcom/android/server/people/data/DataManager;Lcom/android/server/people/data/ConversationStore;Lcom/android/server/people/data/ConversationInfo;Ljava/lang/String;I)V
 PLcom/android/server/people/data/DataManager;->-$$Nest$mupdateDefaultSmsApp(Lcom/android/server/people/data/DataManager;Lcom/android/server/people/data/UserData;)V
@@ -34734,7 +36009,7 @@
 HPLcom/android/server/people/data/DataManager;->cleanupCachedShortcuts(II)V
 PLcom/android/server/people/data/DataManager;->cleanupUser(I)V
 PLcom/android/server/people/data/DataManager;->clearStatuses(Ljava/lang/String;ILjava/lang/String;)V
-PLcom/android/server/people/data/DataManager;->forAllUnlockedUsers(Ljava/util/function/Consumer;)V
+HPLcom/android/server/people/data/DataManager;->forAllUnlockedUsers(Ljava/util/function/Consumer;)V
 PLcom/android/server/people/data/DataManager;->forPackagesInProfile(ILjava/util/function/Consumer;)V
 HPLcom/android/server/people/data/DataManager;->getBackupPayload(I)[B
 PLcom/android/server/people/data/DataManager;->getContactsContentObserverForTesting(I)Landroid/database/ContentObserver;
@@ -34748,6 +36023,7 @@
 HPLcom/android/server/people/data/DataManager;->getPackageIfConversationExists(Landroid/service/notification/StatusBarNotification;Ljava/util/function/Consumer;)Lcom/android/server/people/data/PackageData;+]Landroid/service/notification/StatusBarNotification;Landroid/service/notification/StatusBarNotification;]Lcom/android/server/people/data/DataManager;Lcom/android/server/people/data/DataManager;]Landroid/app/Notification;Landroid/app/Notification;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Lcom/android/server/people/data/PackageData;Lcom/android/server/people/data/PackageData;]Ljava/util/function/Consumer;Lcom/android/server/people/data/DataManager$NotificationListener$$ExternalSyntheticLambda0;,Lcom/android/server/people/data/DataManager$NotificationListener$$ExternalSyntheticLambda1;]Lcom/android/server/people/data/ConversationStore;Lcom/android/server/people/data/ConversationStore;
 PLcom/android/server/people/data/DataManager;->getPackageMonitorForTesting(I)Lcom/android/internal/content/PackageMonitor;
 PLcom/android/server/people/data/DataManager;->getRecentConversations(I)Ljava/util/List;
+PLcom/android/server/people/data/DataManager;->getShareShortcuts(Landroid/content/IntentFilter;I)Ljava/util/List;
 HPLcom/android/server/people/data/DataManager;->getShortcut(Ljava/lang/String;ILjava/lang/String;)Landroid/content/pm/ShortcutInfo;+]Lcom/android/server/people/data/DataManager;Lcom/android/server/people/data/DataManager;]Ljava/util/List;Ljava/util/ArrayList;
 HPLcom/android/server/people/data/DataManager;->getShortcuts(Ljava/lang/String;ILjava/util/List;)Ljava/util/List;+]Landroid/content/pm/ShortcutServiceInternal;Lcom/android/server/pm/ShortcutService$LocalService;]Landroid/content/Context;Landroid/app/ContextImpl;
 HPLcom/android/server/people/data/DataManager;->getStatuses(Lcom/android/server/people/data/ConversationInfo;)Ljava/util/List;
@@ -34756,7 +36032,7 @@
 HPLcom/android/server/people/data/DataManager;->hasActiveNotifications(Ljava/lang/String;ILjava/lang/String;)Z
 HSPLcom/android/server/people/data/DataManager;->initialize()V
 HPLcom/android/server/people/data/DataManager;->isCachedRecentConversation(Lcom/android/server/people/data/ConversationInfo;)Z+]Lcom/android/server/people/data/ConversationInfo;Lcom/android/server/people/data/ConversationInfo;
-PLcom/android/server/people/data/DataManager;->isConversation(Ljava/lang/String;ILjava/lang/String;)Z
+HPLcom/android/server/people/data/DataManager;->isConversation(Ljava/lang/String;ILjava/lang/String;)Z
 HPLcom/android/server/people/data/DataManager;->lambda$cleanupCachedShortcuts$11(Ljava/util/List;Lcom/android/server/people/data/PackageData;Lcom/android/server/people/data/ConversationInfo;)V
 PLcom/android/server/people/data/DataManager;->lambda$cleanupCachedShortcuts$12(Ljava/util/List;Lcom/android/server/people/data/PackageData;)V
 HPLcom/android/server/people/data/DataManager;->lambda$cleanupCachedShortcuts$13(Landroid/util/Pair;)J+]Lcom/android/server/people/data/ConversationInfo;Lcom/android/server/people/data/ConversationInfo;
@@ -34780,6 +36056,7 @@
 PLcom/android/server/people/data/DataManager;->pruneExpiredConversationStatuses(IJ)V
 PLcom/android/server/people/data/DataManager;->pruneOldRecentConversations(IJ)V
 PLcom/android/server/people/data/DataManager;->pruneUninstalledPackageData(Lcom/android/server/people/data/UserData;)V
+PLcom/android/server/people/data/DataManager;->queryAppMovingToForegroundEvents(IJJ)Ljava/util/List;
 PLcom/android/server/people/data/DataManager;->queryAppUsageStats(IJJLjava/util/Set;)Ljava/util/Map;
 PLcom/android/server/people/data/DataManager;->removeRecentConversation(Ljava/lang/String;ILjava/lang/String;I)V
 PLcom/android/server/people/data/DataManager;->reportShareTargetEvent(Landroid/app/prediction/AppTargetEvent;Landroid/content/IntentFilter;)V
@@ -34797,7 +36074,7 @@
 PLcom/android/server/people/data/Event$Builder;-><init>()V
 PLcom/android/server/people/data/Event$Builder;-><init>(JI)V
 PLcom/android/server/people/data/Event$Builder;-><init>(Lcom/android/server/people/data/Event$Builder-IA;)V
-PLcom/android/server/people/data/Event$Builder;->build()Lcom/android/server/people/data/Event;
+HPLcom/android/server/people/data/Event$Builder;->build()Lcom/android/server/people/data/Event;
 PLcom/android/server/people/data/Event$Builder;->setDurationSeconds(I)Lcom/android/server/people/data/Event$Builder;
 PLcom/android/server/people/data/Event$Builder;->setTimestamp(J)Lcom/android/server/people/data/Event$Builder;
 PLcom/android/server/people/data/Event$Builder;->setType(I)Lcom/android/server/people/data/Event$Builder;
@@ -34807,7 +36084,7 @@
 PLcom/android/server/people/data/Event;-><init>(Lcom/android/server/people/data/Event$Builder;Lcom/android/server/people/data/Event-IA;)V
 PLcom/android/server/people/data/Event;->equals(Ljava/lang/Object;)Z
 HPLcom/android/server/people/data/Event;->getTimestamp()J
-PLcom/android/server/people/data/Event;->getType()I
+HPLcom/android/server/people/data/Event;->getType()I
 PLcom/android/server/people/data/Event;->hashCode()I
 PLcom/android/server/people/data/Event;->readFromProto(Landroid/util/proto/ProtoInputStream;)Lcom/android/server/people/data/Event;
 PLcom/android/server/people/data/Event;->toString()Ljava/lang/String;
@@ -34853,7 +36130,7 @@
 HPLcom/android/server/people/data/EventHistoryImpl$EventsProtoDiskReadWriter;->scheduleEventsSave(Lcom/android/server/people/data/EventList;)V
 PLcom/android/server/people/data/EventHistoryImpl$Injector;-><init>()V
 PLcom/android/server/people/data/EventHistoryImpl$Injector;->createEventIndex()Lcom/android/server/people/data/EventIndex;
-PLcom/android/server/people/data/EventHistoryImpl$Injector;->currentTimeMillis()J
+HPLcom/android/server/people/data/EventHistoryImpl$Injector;->currentTimeMillis()J
 PLcom/android/server/people/data/EventHistoryImpl;->$r8$lambda$J0dvz9aiGfrrx7-Gvk5KsdSo--Q(Lcom/android/server/people/data/EventHistoryImpl;)V
 PLcom/android/server/people/data/EventHistoryImpl;->$r8$lambda$yXjfGHzynQfgnIsUXtecuuxtr3M(Ljava/io/File;Ljava/lang/String;)Z
 HPLcom/android/server/people/data/EventHistoryImpl;-><init>(Lcom/android/server/people/data/EventHistoryImpl$Injector;Ljava/io/File;Ljava/util/concurrent/ScheduledExecutorService;)V
@@ -34889,15 +36166,17 @@
 PLcom/android/server/people/data/EventIndex;-><init>(Lcom/android/server/people/data/EventIndex$Injector;)V
 HPLcom/android/server/people/data/EventIndex;-><init>(Lcom/android/server/people/data/EventIndex$Injector;[JJ)V
 PLcom/android/server/people/data/EventIndex;-><init>(Lcom/android/server/people/data/EventIndex;)V
-HPLcom/android/server/people/data/EventIndex;->addEvent(J)V
+HPLcom/android/server/people/data/EventIndex;->addEvent(J)V+]Lcom/android/server/people/data/EventIndex$Injector;Lcom/android/server/people/data/EventIndex$Injector;]Lcom/android/server/people/data/EventIndex;Lcom/android/server/people/data/EventIndex;
 PLcom/android/server/people/data/EventIndex;->combine(Lcom/android/server/people/data/EventIndex;Lcom/android/server/people/data/EventIndex;)Lcom/android/server/people/data/EventIndex;
 PLcom/android/server/people/data/EventIndex;->combineTimeSlotLists(Ljava/util/List;Ljava/util/List;)Ljava/util/List;
 HPLcom/android/server/people/data/EventIndex;->createFourHoursLongTimeSlot(J)Landroid/util/Range;
 HPLcom/android/server/people/data/EventIndex;->createOneDayLongTimeSlot(J)Landroid/util/Range;
 HPLcom/android/server/people/data/EventIndex;->createOneHourLongTimeSlot(J)Landroid/util/Range;
 HPLcom/android/server/people/data/EventIndex;->createTwoMinutesLongTimeSlot(J)Landroid/util/Range;
-HPLcom/android/server/people/data/EventIndex;->diffTimeSlots(IJJ)I+]Ljava/util/function/Function;Lcom/android/server/people/data/EventIndex$$ExternalSyntheticLambda2;,Lcom/android/server/people/data/EventIndex$$ExternalSyntheticLambda3;,Lcom/android/server/people/data/EventIndex$$ExternalSyntheticLambda0;,Lcom/android/server/people/data/EventIndex$$ExternalSyntheticLambda1;]Landroid/util/Range;Landroid/util/Range;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Ljava/lang/Long;Ljava/lang/Long;
+HPLcom/android/server/people/data/EventIndex;->diffTimeSlots(IJJ)I+]Landroid/util/Range;Landroid/util/Range;]Ljava/util/function/Function;Lcom/android/server/people/data/EventIndex$$ExternalSyntheticLambda2;,Lcom/android/server/people/data/EventIndex$$ExternalSyntheticLambda3;,Lcom/android/server/people/data/EventIndex$$ExternalSyntheticLambda0;,Lcom/android/server/people/data/EventIndex$$ExternalSyntheticLambda1;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Ljava/lang/Long;Ljava/lang/Long;
 HPLcom/android/server/people/data/EventIndex;->equals(Ljava/lang/Object;)Z
+PLcom/android/server/people/data/EventIndex;->getActiveTimeSlots()Ljava/util/List;
+PLcom/android/server/people/data/EventIndex;->getActiveTimeSlotsForType(I)Ljava/util/List;
 HPLcom/android/server/people/data/EventIndex;->getDuration(Landroid/util/Range;)J
 HPLcom/android/server/people/data/EventIndex;->getMostRecentActiveTimeSlot()Landroid/util/Range;
 HPLcom/android/server/people/data/EventIndex;->hashCode()I
@@ -34906,15 +36185,15 @@
 HPLcom/android/server/people/data/EventIndex;->toEpochMilli(Ljava/time/LocalDateTime;)J+]Ljava/time/LocalDateTime;Ljava/time/LocalDateTime;]Ljava/time/Instant;Ljava/time/Instant;]Ljava/time/ZonedDateTime;Ljava/time/ZonedDateTime;
 HPLcom/android/server/people/data/EventIndex;->toLocalDateTime(J)Ljava/time/LocalDateTime;+]Ljava/util/TimeZone;Llibcore/util/ZoneInfo;
 HPLcom/android/server/people/data/EventIndex;->updateEventBitmaps(J)V
-PLcom/android/server/people/data/EventIndex;->writeToProto(Landroid/util/proto/ProtoOutputStream;)V
+HPLcom/android/server/people/data/EventIndex;->writeToProto(Landroid/util/proto/ProtoOutputStream;)V
 HPLcom/android/server/people/data/EventList;-><init>()V
 HPLcom/android/server/people/data/EventList;->add(Lcom/android/server/people/data/Event;)V
 PLcom/android/server/people/data/EventList;->addAll(Ljava/util/List;)V
 HPLcom/android/server/people/data/EventList;->clear()V
-HPLcom/android/server/people/data/EventList;->firstIndexOnOrAfter(J)I
+HPLcom/android/server/people/data/EventList;->firstIndexOnOrAfter(J)I+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/people/data/Event;Lcom/android/server/people/data/Event;
 PLcom/android/server/people/data/EventList;->getAllEvents()Ljava/util/List;
 HPLcom/android/server/people/data/EventList;->isDuplicate(Lcom/android/server/people/data/Event;I)Z
-PLcom/android/server/people/data/EventList;->removeOldEvents(J)V
+HPLcom/android/server/people/data/EventList;->removeOldEvents(J)V
 HPLcom/android/server/people/data/EventStore$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/people/data/EventStore;ILjava/lang/String;)V
 HPLcom/android/server/people/data/EventStore$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/people/data/EventStore;->$r8$lambda$hIr_vqLjIPHbScqy2vjg16Ts_G4(Lcom/android/server/people/data/EventStore;ILjava/lang/String;Ljava/lang/String;)Lcom/android/server/people/data/EventHistoryImpl;
@@ -34933,7 +36212,7 @@
 HPLcom/android/server/people/data/MmsQueryHelper;-><init>(Landroid/content/Context;Ljava/util/function/BiConsumer;)V
 PLcom/android/server/people/data/MmsQueryHelper;->addEvent(Ljava/lang/String;JI)Z
 PLcom/android/server/people/data/MmsQueryHelper;->getLastMessageTimestamp()J
-PLcom/android/server/people/data/MmsQueryHelper;->getMmsAddress(Ljava/lang/String;I)Ljava/lang/String;
+HPLcom/android/server/people/data/MmsQueryHelper;->getMmsAddress(Ljava/lang/String;I)Ljava/lang/String;
 HPLcom/android/server/people/data/MmsQueryHelper;->querySince(J)Z
 PLcom/android/server/people/data/MmsQueryHelper;->validateEvent(Ljava/lang/String;JI)Z
 PLcom/android/server/people/data/PackageData$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/people/data/PackageData;)V
@@ -34949,6 +36228,7 @@
 PLcom/android/server/people/data/PackageData;-><init>(Ljava/lang/String;ILjava/util/function/Predicate;Ljava/util/function/Predicate;Ljava/util/concurrent/ScheduledExecutorService;Ljava/io/File;)V
 HPLcom/android/server/people/data/PackageData;->deleteDataForConversation(Ljava/lang/String;)V
 PLcom/android/server/people/data/PackageData;->forAllConversations(Ljava/util/function/Consumer;)V
+PLcom/android/server/people/data/PackageData;->getClassLevelEventHistory(Ljava/lang/String;)Lcom/android/server/people/data/EventHistory;
 HPLcom/android/server/people/data/PackageData;->getConversationInfo(Ljava/lang/String;)Lcom/android/server/people/data/ConversationInfo;
 HPLcom/android/server/people/data/PackageData;->getConversationStore()Lcom/android/server/people/data/ConversationStore;
 PLcom/android/server/people/data/PackageData;->getEventStore()Lcom/android/server/people/data/EventStore;
@@ -34971,6 +36251,7 @@
 HPLcom/android/server/people/data/SmsQueryHelper;->querySince(J)Z
 PLcom/android/server/people/data/SmsQueryHelper;->validateEvent(Ljava/lang/String;JI)Z
 PLcom/android/server/people/data/UsageStatsQueryHelper$$ExternalSyntheticLambda0;-><init>()V
+PLcom/android/server/people/data/UsageStatsQueryHelper$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/people/data/UsageStatsQueryHelper$EventListener;->onEvent(Lcom/android/server/people/data/PackageData;Lcom/android/server/people/data/ConversationInfo;Lcom/android/server/people/data/Event;)V
 PLcom/android/server/people/data/UsageStatsQueryHelper;->$r8$lambda$nZ7shENcp4iWnNqD1CZXYLmDuLs(Ljava/lang/String;)Lcom/android/server/people/data/AppUsageStatsData;
 PLcom/android/server/people/data/UsageStatsQueryHelper;-><init>(ILjava/util/function/Function;Lcom/android/server/people/data/UsageStatsQueryHelper$EventListener;)V
@@ -34978,7 +36259,9 @@
 HPLcom/android/server/people/data/UsageStatsQueryHelper;->addEventByShortcutId(Lcom/android/server/people/data/PackageData;Ljava/lang/String;Lcom/android/server/people/data/Event;)V
 PLcom/android/server/people/data/UsageStatsQueryHelper;->getLastEventTimestamp()J
 PLcom/android/server/people/data/UsageStatsQueryHelper;->getUsageStatsManagerInternal()Landroid/app/usage/UsageStatsManagerInternal;
+PLcom/android/server/people/data/UsageStatsQueryHelper;->lambda$queryAppUsageStats$0(Ljava/lang/String;)Lcom/android/server/people/data/AppUsageStatsData;
 HPLcom/android/server/people/data/UsageStatsQueryHelper;->onInAppConversationEnded(Lcom/android/server/people/data/PackageData;Landroid/app/usage/UsageEvents$Event;)V
+PLcom/android/server/people/data/UsageStatsQueryHelper;->queryAppMovingToForegroundEvents(IJJ)Ljava/util/List;
 PLcom/android/server/people/data/UsageStatsQueryHelper;->queryAppUsageStats(IJJLjava/util/Set;)Ljava/util/Map;
 HPLcom/android/server/people/data/UsageStatsQueryHelper;->querySince(J)Z+]Landroid/app/usage/UsageEvents;Landroid/app/usage/UsageEvents;]Ljava/util/function/Function;Lcom/android/server/people/data/DataManager$UsageStatsQueryRunnable$$ExternalSyntheticLambda0;]Lcom/android/server/people/data/UsageStatsQueryHelper;Lcom/android/server/people/data/UsageStatsQueryHelper;]Landroid/app/usage/UsageEvents$Event;Landroid/app/usage/UsageEvents$Event;]Ljava/util/Map;Landroid/util/ArrayMap;]Lcom/android/server/people/data/PackageData;Lcom/android/server/people/data/PackageData;]Lcom/android/server/people/data/ConversationStore;Lcom/android/server/people/data/ConversationStore;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;
 PLcom/android/server/people/data/UsageStatsQueryHelper;->sumChooserCounts(Landroid/util/ArrayMap;)I
@@ -35013,21 +36296,86 @@
 PLcom/android/server/people/data/UserData;->setUserStopped()V
 PLcom/android/server/people/data/UserData;->setUserUnlocked()V
 HPLcom/android/server/people/data/Utils;->getCurrentCountryIso(Landroid/content/Context;)Ljava/lang/String;
+PLcom/android/server/people/prediction/AppTargetPredictor$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/people/prediction/AppTargetPredictor;Landroid/app/prediction/AppTargetEvent;)V
 PLcom/android/server/people/prediction/AppTargetPredictor$$ExternalSyntheticLambda0;->run()V
+PLcom/android/server/people/prediction/AppTargetPredictor$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/people/prediction/AppTargetPredictor;)V
 PLcom/android/server/people/prediction/AppTargetPredictor$$ExternalSyntheticLambda1;->run()V
 PLcom/android/server/people/prediction/AppTargetPredictor$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/people/prediction/AppTargetPredictor;Ljava/util/List;Ljava/util/function/Consumer;)V
+PLcom/android/server/people/prediction/AppTargetPredictor$$ExternalSyntheticLambda2;->run()V
 PLcom/android/server/people/prediction/AppTargetPredictor;->$r8$lambda$7k9bJYOmjtc7MFfvGtekovSRq1E(Lcom/android/server/people/prediction/AppTargetPredictor;Ljava/util/List;Ljava/util/function/Consumer;)V
 PLcom/android/server/people/prediction/AppTargetPredictor;->$r8$lambda$rDReGgk7jWWWjpssVCWemLkIKm4(Lcom/android/server/people/prediction/AppTargetPredictor;Landroid/app/prediction/AppTargetEvent;)V
-PLcom/android/server/pm/AbstractStatsBase$1;-><init>(Lcom/android/server/pm/AbstractStatsBase;Ljava/lang/String;Ljava/lang/Object;)V
+PLcom/android/server/people/prediction/AppTargetPredictor;-><init>(Landroid/app/prediction/AppPredictionContext;Ljava/util/function/Consumer;Lcom/android/server/people/data/DataManager;I)V
+PLcom/android/server/people/prediction/AppTargetPredictor;->create(Landroid/app/prediction/AppPredictionContext;Ljava/util/function/Consumer;Lcom/android/server/people/data/DataManager;ILandroid/content/Context;)Lcom/android/server/people/prediction/AppTargetPredictor;
+PLcom/android/server/people/prediction/AppTargetPredictor;->getDataManager()Lcom/android/server/people/data/DataManager;
+PLcom/android/server/people/prediction/AppTargetPredictor;->getPredictionContext()Landroid/app/prediction/AppPredictionContext;
+PLcom/android/server/people/prediction/AppTargetPredictor;->lambda$onAppTargetEvent$0(Landroid/app/prediction/AppTargetEvent;)V
+PLcom/android/server/people/prediction/AppTargetPredictor;->lambda$onSortAppTargets$1(Ljava/util/List;Ljava/util/function/Consumer;)V
+PLcom/android/server/people/prediction/AppTargetPredictor;->onAppTargetEvent(Landroid/app/prediction/AppTargetEvent;)V
+PLcom/android/server/people/prediction/AppTargetPredictor;->onRequestPredictionUpdate()V
+PLcom/android/server/people/prediction/AppTargetPredictor;->onSortAppTargets(Ljava/util/List;Ljava/util/function/Consumer;)V
+PLcom/android/server/people/prediction/AppTargetPredictor;->updatePredictions(Ljava/util/List;)V
+PLcom/android/server/people/prediction/ShareTargetPredictor$$ExternalSyntheticLambda0;-><init>()V
+PLcom/android/server/people/prediction/ShareTargetPredictor$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/people/prediction/ShareTargetPredictor$$ExternalSyntheticLambda1;-><init>()V
+PLcom/android/server/people/prediction/ShareTargetPredictor$$ExternalSyntheticLambda1;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/people/prediction/ShareTargetPredictor$$ExternalSyntheticLambda2;-><init>()V
+PLcom/android/server/people/prediction/ShareTargetPredictor$$ExternalSyntheticLambda2;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+PLcom/android/server/people/prediction/ShareTargetPredictor$ShareTarget;-><init>(Landroid/app/prediction/AppTarget;Lcom/android/server/people/data/EventHistory;Lcom/android/server/people/data/ConversationInfo;)V
+PLcom/android/server/people/prediction/ShareTargetPredictor$ShareTarget;->getAppTarget()Landroid/app/prediction/AppTarget;
+PLcom/android/server/people/prediction/ShareTargetPredictor$ShareTarget;->getEventHistory()Lcom/android/server/people/data/EventHistory;
+PLcom/android/server/people/prediction/ShareTargetPredictor$ShareTarget;->getScore()F
+PLcom/android/server/people/prediction/ShareTargetPredictor$ShareTarget;->setScore(F)V
+PLcom/android/server/people/prediction/ShareTargetPredictor;->$r8$lambda$XF4nIDP0fnmSvuwZq5GkC1yfvfU(Lcom/android/server/people/prediction/ShareTargetPredictor$ShareTarget;)Ljava/lang/Integer;
+PLcom/android/server/people/prediction/ShareTargetPredictor;->$r8$lambda$ewGrTUEllLOZ4_Iuac1rViJBtSE(Lcom/android/server/people/prediction/ShareTargetPredictor$ShareTarget;Lcom/android/server/people/prediction/ShareTargetPredictor$ShareTarget;)I
+PLcom/android/server/people/prediction/ShareTargetPredictor;-><clinit>()V
+PLcom/android/server/people/prediction/ShareTargetPredictor;-><init>(Landroid/app/prediction/AppPredictionContext;Ljava/util/function/Consumer;Lcom/android/server/people/data/DataManager;ILandroid/content/Context;)V
+PLcom/android/server/people/prediction/ShareTargetPredictor;->getAppShareTargets(Ljava/util/List;)Ljava/util/List;
+PLcom/android/server/people/prediction/ShareTargetPredictor;->getDirectShareTargets()Ljava/util/List;
+PLcom/android/server/people/prediction/ShareTargetPredictor;->getShareEventType(Landroid/content/IntentFilter;)I
+PLcom/android/server/people/prediction/ShareTargetPredictor;->lambda$predictTargets$0(Lcom/android/server/people/prediction/ShareTargetPredictor$ShareTarget;)Ljava/lang/Integer;
+PLcom/android/server/people/prediction/ShareTargetPredictor;->lambda$sortTargets$1(Lcom/android/server/people/prediction/ShareTargetPredictor$ShareTarget;Lcom/android/server/people/prediction/ShareTargetPredictor$ShareTarget;)I
+PLcom/android/server/people/prediction/ShareTargetPredictor;->predictTargets()V
+PLcom/android/server/people/prediction/ShareTargetPredictor;->reportAppTargetEvent(Landroid/app/prediction/AppTargetEvent;)V
+PLcom/android/server/people/prediction/ShareTargetPredictor;->sortTargets(Ljava/util/List;Ljava/util/function/Consumer;)V
+PLcom/android/server/people/prediction/SharesheetModelScorer$$ExternalSyntheticLambda0;-><init>()V
+PLcom/android/server/people/prediction/SharesheetModelScorer$$ExternalSyntheticLambda1;-><init>()V
+PLcom/android/server/people/prediction/SharesheetModelScorer$$ExternalSyntheticLambda1;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/people/prediction/SharesheetModelScorer$$ExternalSyntheticLambda2;-><init>()V
+PLcom/android/server/people/prediction/SharesheetModelScorer$$ExternalSyntheticLambda2;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/people/prediction/SharesheetModelScorer$$ExternalSyntheticLambda3;-><init>()V
+PLcom/android/server/people/prediction/SharesheetModelScorer$$ExternalSyntheticLambda3;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/people/prediction/SharesheetModelScorer$ShareTargetRankingScore;-><init>()V
+PLcom/android/server/people/prediction/SharesheetModelScorer$ShareTargetRankingScore;-><init>(Lcom/android/server/people/prediction/SharesheetModelScorer$ShareTargetRankingScore-IA;)V
+PLcom/android/server/people/prediction/SharesheetModelScorer$ShareTargetRankingScore;->getFrequencyScore()F
+PLcom/android/server/people/prediction/SharesheetModelScorer$ShareTargetRankingScore;->getMimeFrequencyScore()F
+PLcom/android/server/people/prediction/SharesheetModelScorer$ShareTargetRankingScore;->getRecencyScore()F
+PLcom/android/server/people/prediction/SharesheetModelScorer$ShareTargetRankingScore;->getTotalScore()F
+PLcom/android/server/people/prediction/SharesheetModelScorer$ShareTargetRankingScore;->setFrequencyScore(F)V
+PLcom/android/server/people/prediction/SharesheetModelScorer$ShareTargetRankingScore;->setMimeFrequencyScore(F)V
+PLcom/android/server/people/prediction/SharesheetModelScorer$ShareTargetRankingScore;->setTotalScore(F)V
+PLcom/android/server/people/prediction/SharesheetModelScorer;->$r8$lambda$kAfsGyQ-98I6qKztrM2L4pvoE64(Ljava/lang/String;)Ljava/util/List;
+PLcom/android/server/people/prediction/SharesheetModelScorer;-><clinit>()V
+PLcom/android/server/people/prediction/SharesheetModelScorer;->computeScore(Ljava/util/List;IJ)V
+PLcom/android/server/people/prediction/SharesheetModelScorer;->computeScoreForAppShare(Ljava/util/List;IIJLcom/android/server/people/data/DataManager;I)V
+PLcom/android/server/people/prediction/SharesheetModelScorer;->findSharingForegroundApp(Ljava/util/Map;Lcom/android/server/people/data/DataManager;I)Ljava/lang/String;
+PLcom/android/server/people/prediction/SharesheetModelScorer;->lambda$postProcess$1(Ljava/lang/String;)Ljava/util/List;
+PLcom/android/server/people/prediction/SharesheetModelScorer;->normalizeFreqScore(D)F
+PLcom/android/server/people/prediction/SharesheetModelScorer;->normalizeMimeFreqScore(D)F
+PLcom/android/server/people/prediction/SharesheetModelScorer;->postProcess(Ljava/util/List;ILcom/android/server/people/data/DataManager;I)V
+PLcom/android/server/people/prediction/SharesheetModelScorer;->probOR(FF)F
+PLcom/android/server/people/prediction/SharesheetModelScorer;->promoteApp(Ljava/util/Map;Ljava/util/Map;Ljava/util/function/Function;FF)F
+PLcom/android/server/people/prediction/SharesheetModelScorer;->promoteForegroundApp(Ljava/util/Map;Lcom/android/server/people/data/DataManager;I)V
+PLcom/android/server/people/prediction/SharesheetModelScorer;->promoteMostChosenAndFrequentlyUsedApps(Ljava/util/Map;ILcom/android/server/people/data/DataManager;I)V
+HPLcom/android/server/pm/AbstractStatsBase$1;-><init>(Lcom/android/server/pm/AbstractStatsBase;Ljava/lang/String;Ljava/lang/Object;)V
 HPLcom/android/server/pm/AbstractStatsBase$1;->run()V
 PLcom/android/server/pm/AbstractStatsBase;->-$$Nest$fgetmBackgroundWriteRunning(Lcom/android/server/pm/AbstractStatsBase;)Ljava/util/concurrent/atomic/AtomicBoolean;
 PLcom/android/server/pm/AbstractStatsBase;->-$$Nest$fgetmLastTimeWritten(Lcom/android/server/pm/AbstractStatsBase;)Ljava/util/concurrent/atomic/AtomicLong;
 PLcom/android/server/pm/AbstractStatsBase;->-$$Nest$mwriteImpl(Lcom/android/server/pm/AbstractStatsBase;Ljava/lang/Object;)V
 HSPLcom/android/server/pm/AbstractStatsBase;-><init>(Ljava/lang/String;Ljava/lang/String;Z)V
 HSPLcom/android/server/pm/AbstractStatsBase;->getFile()Landroid/util/AtomicFile;
-HSPLcom/android/server/pm/AbstractStatsBase;->maybeWriteAsync(Ljava/lang/Object;)Z
+HSPLcom/android/server/pm/AbstractStatsBase;->maybeWriteAsync(Ljava/lang/Object;)Z+]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Ljava/lang/Thread;Lcom/android/server/pm/AbstractStatsBase$1;]Ljava/util/concurrent/atomic/AtomicLong;Ljava/util/concurrent/atomic/AtomicLong;
 HSPLcom/android/server/pm/AbstractStatsBase;->read(Ljava/lang/Object;)V
-PLcom/android/server/pm/AbstractStatsBase;->writeImpl(Ljava/lang/Object;)V
+HPLcom/android/server/pm/AbstractStatsBase;->writeImpl(Ljava/lang/Object;)V
 PLcom/android/server/pm/AbstractStatsBase;->writeNow(Ljava/lang/Object;)V
 HSPLcom/android/server/pm/ApexManager$1;-><init>()V
 HSPLcom/android/server/pm/ApexManager$1;->create()Lcom/android/server/pm/ApexManager;
@@ -35038,20 +36386,21 @@
 HSPLcom/android/server/pm/ApexManager$ApexManagerImpl;-><init>()V
 PLcom/android/server/pm/ApexManager$ApexManagerImpl;->abortStagedSession(I)Z
 PLcom/android/server/pm/ApexManager$ApexManagerImpl;->checkApexSignature(Landroid/content/pm/PackageInfo;Landroid/content/pm/PackageInfo;)V
+PLcom/android/server/pm/ApexManager$ApexManagerImpl;->destroyCeSnapshots(II)Z
 PLcom/android/server/pm/ApexManager$ApexManagerImpl;->destroyCeSnapshotsNotSpecified(I[I)Z
 PLcom/android/server/pm/ApexManager$ApexManagerImpl;->destroyDeSnapshots(I)Z
 PLcom/android/server/pm/ApexManager$ApexManagerImpl;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/pm/ApexManager$ApexManagerImpl;->dumpFromPackagesCache(Ljava/util/List;Ljava/lang/String;Lcom/android/internal/util/IndentingPrintWriter;)V
+HPLcom/android/server/pm/ApexManager$ApexManagerImpl;->dumpFromPackagesCache(Ljava/util/List;Ljava/lang/String;Lcom/android/internal/util/IndentingPrintWriter;)V
 HSPLcom/android/server/pm/ApexManager$ApexManagerImpl;->getActiveApexInfos()Ljava/util/List;
 HSPLcom/android/server/pm/ApexManager$ApexManagerImpl;->getActiveApexPackageNameContainingPackage(Ljava/lang/String;)Ljava/lang/String;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLcom/android/server/pm/ApexManager$ApexManagerImpl;->getActivePackageNameForApexModuleName(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/pm/ApexManager$ApexManagerImpl;->getActivePackages()Ljava/util/List;
 HSPLcom/android/server/pm/ApexManager$ApexManagerImpl;->getApexModuleNameForPackageName(Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/server/pm/ApexManager$ApexManagerImpl;->getApexSystemServices()Ljava/util/List;
+HSPLcom/android/server/pm/ApexManager$ApexManagerImpl;->getApexSystemServices()Ljava/util/List;
 HSPLcom/android/server/pm/ApexManager$ApexManagerImpl;->getApkInApexInstallError(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/pm/ApexManager$ApexManagerImpl;->getApksInApex(Ljava/lang/String;)Ljava/util/List;
 HSPLcom/android/server/pm/ApexManager$ApexManagerImpl;->getBackingApexFile(Ljava/io/File;)Ljava/io/File;
-HPLcom/android/server/pm/ApexManager$ApexManagerImpl;->getFactoryPackages()Ljava/util/List;
+HPLcom/android/server/pm/ApexManager$ApexManagerImpl;->getFactoryPackages()Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;
 PLcom/android/server/pm/ApexManager$ApexManagerImpl;->getInactivePackages()Ljava/util/List;
 HSPLcom/android/server/pm/ApexManager$ApexManagerImpl;->getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;+]Ljava/util/List;Ljava/util/ArrayList;
 HSPLcom/android/server/pm/ApexManager$ApexManagerImpl;->getSessions()Landroid/util/SparseArray;
@@ -35074,16 +36423,16 @@
 HSPLcom/android/server/pm/ApexManager;-><clinit>()V
 HSPLcom/android/server/pm/ApexManager;-><init>()V
 HSPLcom/android/server/pm/ApexManager;->getInstance()Lcom/android/server/pm/ApexManager;
-PLcom/android/server/pm/ApexManager;->isFactory(Landroid/content/pm/PackageInfo;)Z
+HPLcom/android/server/pm/ApexManager;->isFactory(Landroid/content/pm/PackageInfo;)Z
 HSPLcom/android/server/pm/ApexSystemServiceInfo;-><init>(Ljava/lang/String;Ljava/lang/String;I)V
-PLcom/android/server/pm/ApexSystemServiceInfo;->getJarPath()Ljava/lang/String;
-PLcom/android/server/pm/ApexSystemServiceInfo;->getName()Ljava/lang/String;
+HSPLcom/android/server/pm/ApexSystemServiceInfo;->getJarPath()Ljava/lang/String;
+HSPLcom/android/server/pm/ApexSystemServiceInfo;->getName()Ljava/lang/String;
 HSPLcom/android/server/pm/ApkChecksums$Injector;-><init>(Lcom/android/server/pm/ApkChecksums$Injector$Producer;Lcom/android/server/pm/ApkChecksums$Injector$Producer;Lcom/android/server/pm/ApkChecksums$Injector$Producer;Lcom/android/server/pm/ApkChecksums$Injector$Producer;)V
 PLcom/android/server/pm/ApkChecksums$Injector;->getIncrementalManager()Landroid/os/incremental/IncrementalManager;
 PLcom/android/server/pm/ApkChecksums$Injector;->getPackageManagerInternal()Landroid/content/pm/PackageManagerInternal;
 HSPLcom/android/server/pm/ApkChecksums;-><clinit>()V
 HPLcom/android/server/pm/ApkChecksums;->buildDigestsPathForApk(Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/server/pm/ApkChecksums;->buildSignaturePathForDigests(Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/pm/ApkChecksums;->buildSignaturePathForDigests(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/pm/ApkChecksums;->calculateChecksumIfRequested(Ljava/util/Map;Ljava/lang/String;Ljava/io/File;II)V
 HSPLcom/android/server/pm/ApkChecksums;->calculatePartialChecksumsIfRequested(Ljava/util/Map;Ljava/lang/String;Ljava/io/File;I)V
 PLcom/android/server/pm/ApkChecksums;->containsFile(Ljava/io/File;Ljava/lang/String;)Z
@@ -35157,19 +36506,19 @@
 HSPLcom/android/server/pm/AppIdSettingMap;->setFirstAvailableAppId(I)V
 HSPLcom/android/server/pm/AppIdSettingMap;->snapshot()Lcom/android/server/pm/AppIdSettingMap;
 PLcom/android/server/pm/AppsFilterBase$$ExternalSyntheticLambda0;-><init>(Landroid/util/SparseArray;[ILcom/android/internal/util/function/QuadFunction;)V
-PLcom/android/server/pm/AppsFilterBase$$ExternalSyntheticLambda0;->toString(Ljava/lang/Object;)Ljava/lang/String;
-PLcom/android/server/pm/AppsFilterBase;->$r8$lambda$lu5M3otBdpphG02wcBObYEz_REA(Landroid/util/SparseArray;[ILcom/android/internal/util/function/QuadFunction;Ljava/lang/Integer;)Ljava/lang/String;
+HPLcom/android/server/pm/AppsFilterBase$$ExternalSyntheticLambda0;->toString(Ljava/lang/Object;)Ljava/lang/String;
+HPLcom/android/server/pm/AppsFilterBase;->$r8$lambda$lu5M3otBdpphG02wcBObYEz_REA(Landroid/util/SparseArray;[ILcom/android/internal/util/function/QuadFunction;Ljava/lang/Integer;)Ljava/lang/String;
 HSPLcom/android/server/pm/AppsFilterBase;-><init>()V
 HPLcom/android/server/pm/AppsFilterBase;->canQueryPackage(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Ljava/lang/String;)Z
 PLcom/android/server/pm/AppsFilterBase;->dumpForceQueryable(Ljava/io/PrintWriter;Ljava/lang/Integer;Lcom/android/server/pm/AppsFilterBase$ToString;)V
 HPLcom/android/server/pm/AppsFilterBase;->dumpPackageSet(Ljava/io/PrintWriter;Ljava/lang/Object;Landroid/util/ArraySet;Ljava/lang/String;Ljava/lang/String;Lcom/android/server/pm/AppsFilterBase$ToString;)V
 PLcom/android/server/pm/AppsFilterBase;->dumpQueries(Ljava/io/PrintWriter;Ljava/lang/Integer;Lcom/android/server/pm/DumpState;[ILcom/android/internal/util/function/QuadFunction;)V
-PLcom/android/server/pm/AppsFilterBase;->dumpQueriesMap(Ljava/io/PrintWriter;Ljava/lang/Integer;Lcom/android/server/utils/WatchedSparseSetArray;Ljava/lang/String;Lcom/android/server/pm/AppsFilterBase$ToString;)V
+HPLcom/android/server/pm/AppsFilterBase;->dumpQueriesMap(Ljava/io/PrintWriter;Ljava/lang/Integer;Lcom/android/server/utils/WatchedSparseSetArray;Ljava/lang/String;Lcom/android/server/pm/AppsFilterBase$ToString;)V
 PLcom/android/server/pm/AppsFilterBase;->dumpQueriesViaComponent(Ljava/io/PrintWriter;Ljava/lang/Integer;Lcom/android/server/pm/AppsFilterBase$ToString;)V
 PLcom/android/server/pm/AppsFilterBase;->dumpQueriesViaImplicitlyQueryable(Ljava/io/PrintWriter;Ljava/lang/Integer;[ILcom/android/server/pm/AppsFilterBase$ToString;)V
 PLcom/android/server/pm/AppsFilterBase;->dumpQueriesViaPackage(Ljava/io/PrintWriter;Ljava/lang/Integer;Lcom/android/server/pm/AppsFilterBase$ToString;)V
 PLcom/android/server/pm/AppsFilterBase;->dumpQueriesViaUsesLibrary(Ljava/io/PrintWriter;Ljava/lang/Integer;Lcom/android/server/pm/AppsFilterBase$ToString;)V
-HPLcom/android/server/pm/AppsFilterBase;->getSharedUserPackages(ILjava/util/Collection;)Landroid/util/ArraySet;+]Ljava/util/Collection;Ljava/util/Collections$UnmodifiableCollection;]Lcom/android/server/pm/SharedUserSetting;Lcom/android/server/pm/SharedUserSetting;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;
+HSPLcom/android/server/pm/AppsFilterBase;->getSharedUserPackages(ILjava/util/Collection;)Landroid/util/ArraySet;+]Ljava/util/Collection;Ljava/util/Collections$UnmodifiableCollection;]Lcom/android/server/pm/SharedUserSetting;Lcom/android/server/pm/SharedUserSetting;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;
 HSPLcom/android/server/pm/AppsFilterBase;->getVisibilityAllowList(Lcom/android/server/pm/snapshot/PackageDataSnapshot;Lcom/android/server/pm/pkg/PackageStateInternal;[ILandroid/util/ArrayMap;)Landroid/util/SparseArray;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/AppsFilterBase;Lcom/android/server/pm/AppsFilterImpl;,Lcom/android/server/pm/AppsFilterSnapshotImpl;
 HSPLcom/android/server/pm/AppsFilterBase;->getVisibilityAllowList(Lcom/android/server/pm/snapshot/PackageDataSnapshot;Lcom/android/server/pm/pkg/PackageStateInternal;[ILcom/android/server/utils/WatchedArrayMap;)Landroid/util/SparseArray;
 HSPLcom/android/server/pm/AppsFilterBase;->isForceQueryable(I)Z+]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;
@@ -35181,8 +36530,8 @@
 HPLcom/android/server/pm/AppsFilterBase;->isRetainedImplicitlyQueryable(II)Z+]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;
 HPLcom/android/server/pm/AppsFilterBase;->lambda$dumpQueries$0(Landroid/util/SparseArray;[ILcom/android/internal/util/function/QuadFunction;Ljava/lang/Integer;)Ljava/lang/String;
 HPLcom/android/server/pm/AppsFilterBase;->log(Ljava/lang/Object;Lcom/android/server/pm/pkg/PackageStateInternal;Ljava/lang/String;)V
-HSPLcom/android/server/pm/AppsFilterBase;->shouldFilterApplication(Lcom/android/server/pm/snapshot/PackageDataSnapshot;ILjava/lang/Object;Lcom/android/server/pm/pkg/PackageStateInternal;I)Z+]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/AppsFilterBase;Lcom/android/server/pm/AppsFilterSnapshotImpl;,Lcom/android/server/pm/AppsFilterImpl;]Lcom/android/server/pm/FeatureConfig;Lcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;
-HSPLcom/android/server/pm/AppsFilterBase;->shouldFilterApplicationInternal(Lcom/android/server/pm/snapshot/PackageDataSnapshot;ILjava/lang/Object;Lcom/android/server/pm/pkg/PackageStateInternal;I)Z+]Lcom/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/FeatureConfig;Lcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/AppsFilterBase;Lcom/android/server/pm/AppsFilterImpl;,Lcom/android/server/pm/AppsFilterSnapshotImpl;]Lcom/android/server/pm/snapshot/PackageDataSnapshot;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/om/OverlayReferenceMapper;Lcom/android/server/om/OverlayReferenceMapper;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Lcom/android/server/pm/SharedUserSetting;Lcom/android/server/pm/SharedUserSetting;
+HSPLcom/android/server/pm/AppsFilterBase;->shouldFilterApplication(Lcom/android/server/pm/snapshot/PackageDataSnapshot;ILjava/lang/Object;Lcom/android/server/pm/pkg/PackageStateInternal;I)Z+]Lcom/android/server/pm/FeatureConfig;Lcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/AppsFilterBase;Lcom/android/server/pm/AppsFilterImpl;,Lcom/android/server/pm/AppsFilterSnapshotImpl;
+HSPLcom/android/server/pm/AppsFilterBase;->shouldFilterApplicationInternal(Lcom/android/server/pm/snapshot/PackageDataSnapshot;ILjava/lang/Object;Lcom/android/server/pm/pkg/PackageStateInternal;I)Z+]Lcom/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Lcom/android/server/pm/FeatureConfig;Lcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/AppsFilterBase;Lcom/android/server/pm/AppsFilterImpl;,Lcom/android/server/pm/AppsFilterSnapshotImpl;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/snapshot/PackageDataSnapshot;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/om/OverlayReferenceMapper;Lcom/android/server/om/OverlayReferenceMapper;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/SharedUserSetting;Lcom/android/server/pm/SharedUserSetting;
 HPLcom/android/server/pm/AppsFilterBase;->shouldFilterApplicationUsingCache(III)Z+]Lcom/android/server/utils/WatchedSparseBooleanMatrix;Lcom/android/server/utils/WatchedSparseBooleanMatrix;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/pm/AppsFilterImpl$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/pm/AppsFilterImpl;Landroid/content/pm/PackageManagerInternal;J)V
 HSPLcom/android/server/pm/AppsFilterImpl$$ExternalSyntheticLambda0;->run()V
@@ -35190,12 +36539,15 @@
 HSPLcom/android/server/pm/AppsFilterImpl$1;->createSnapshot()Lcom/android/server/pm/AppsFilterSnapshot;
 HSPLcom/android/server/pm/AppsFilterImpl$1;->createSnapshot()Ljava/lang/Object;+]Lcom/android/server/pm/AppsFilterImpl$1;Lcom/android/server/pm/AppsFilterImpl$1;
 HSPLcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;)V
+PLcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl$$ExternalSyntheticLambda0;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
+PLcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;->$r8$lambda$r6f8QAl7MpA9ThI7Ijt48dWtCRQ(Lcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;Landroid/provider/DeviceConfig$Properties;)V
 HSPLcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;-><init>(Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerServiceInjector;)V
 HSPLcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;-><init>(Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl-IA;)V
 HSPLcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;-><init>(Lcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;->enableLogging(IZ)V
 HSPLcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;->isGloballyEnabled()Z
 PLcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;->isLoggingEnabled(I)Z
+PLcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;->lambda$onSystemReady$0(Landroid/provider/DeviceConfig$Properties;)V
 HSPLcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;->onSystemReady()V
 HSPLcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;->packageIsEnabled(Lcom/android/server/pm/parsing/pkg/AndroidPackage;)Z+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;->setAppsFilter(Lcom/android/server/pm/AppsFilterImpl;)V
@@ -35206,10 +36558,10 @@
 HSPLcom/android/server/pm/AppsFilterImpl;->-$$Nest$monChanged(Lcom/android/server/pm/AppsFilterImpl;)V
 HSPLcom/android/server/pm/AppsFilterImpl;-><init>(Lcom/android/server/pm/FeatureConfig;[Ljava/lang/String;ZLcom/android/server/om/OverlayReferenceMapper$Provider;Landroid/os/Handler;)V
 HSPLcom/android/server/pm/AppsFilterImpl;->addPackage(Lcom/android/server/pm/snapshot/PackageDataSnapshot;Lcom/android/server/pm/pkg/PackageStateInternal;Z)V
-HSPLcom/android/server/pm/AppsFilterImpl;->addPackageInternal(Lcom/android/server/pm/pkg/PackageStateInternal;Landroid/util/ArrayMap;)Landroid/util/ArraySet;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/FeatureConfig;Lcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;]Ljava/lang/Object;Ljava/lang/String;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/om/OverlayReferenceMapper;Lcom/android/server/om/OverlayReferenceMapper;]Lcom/android/server/utils/WatchedArrayList;Lcom/android/server/utils/WatchedArrayList;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;
+HSPLcom/android/server/pm/AppsFilterImpl;->addPackageInternal(Lcom/android/server/pm/pkg/PackageStateInternal;Landroid/util/ArrayMap;)Landroid/util/ArraySet;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;]Ljava/lang/Object;Ljava/lang/String;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Lcom/android/server/om/OverlayReferenceMapper;Lcom/android/server/om/OverlayReferenceMapper;]Lcom/android/server/utils/WatchedArrayList;Lcom/android/server/utils/WatchedArrayList;]Lcom/android/server/pm/FeatureConfig;Lcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;
 HSPLcom/android/server/pm/AppsFilterImpl;->create(Lcom/android/server/pm/PackageManagerServiceInjector;Landroid/content/pm/PackageManagerInternal;)Lcom/android/server/pm/AppsFilterImpl;
 HSPLcom/android/server/pm/AppsFilterImpl;->dispatchChange(Lcom/android/server/utils/Watchable;)V
-HSPLcom/android/server/pm/AppsFilterImpl;->grantImplicitAccess(IIZ)Z+]Lcom/android/server/pm/AppsFilterImpl;Lcom/android/server/pm/AppsFilterImpl;]Lcom/android/server/utils/WatchedSparseBooleanMatrix;Lcom/android/server/utils/WatchedSparseBooleanMatrix;]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/pm/AppsFilterImpl;->grantImplicitAccess(IIZ)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/pm/AppsFilterImpl;Lcom/android/server/pm/AppsFilterImpl;]Lcom/android/server/utils/WatchedSparseBooleanMatrix;Lcom/android/server/utils/WatchedSparseBooleanMatrix;]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;
 HSPLcom/android/server/pm/AppsFilterImpl;->invalidateCache(Ljava/lang/String;)V
 HSPLcom/android/server/pm/AppsFilterImpl;->isQueryableViaComponentWhenRequireRecompute(Landroid/util/ArrayMap;Lcom/android/server/pm/pkg/PackageStateInternal;Landroid/util/ArraySet;Lcom/android/server/pm/parsing/pkg/AndroidPackage;II)Z
 HSPLcom/android/server/pm/AppsFilterImpl;->isRegisteredObserver(Lcom/android/server/utils/Watcher;)Z
@@ -35219,11 +36571,11 @@
 HSPLcom/android/server/pm/AppsFilterImpl;->onSystemReady(Landroid/content/pm/PackageManagerInternal;)V
 PLcom/android/server/pm/AppsFilterImpl;->onUserCreated(Lcom/android/server/pm/snapshot/PackageDataSnapshot;I)V
 PLcom/android/server/pm/AppsFilterImpl;->onUserDeleted(I)V
-HSPLcom/android/server/pm/AppsFilterImpl;->pkgInstruments(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/AndroidPackage;)Z+]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/pkg/component/ParsedInstrumentation;Lcom/android/server/pm/pkg/component/ParsedInstrumentationImpl;
+HSPLcom/android/server/pm/AppsFilterImpl;->pkgInstruments(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/AndroidPackage;)Z+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/pkg/component/ParsedInstrumentation;Lcom/android/server/pm/pkg/component/ParsedInstrumentationImpl;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/AppsFilterImpl;->recomputeComponentVisibility(Landroid/util/ArrayMap;)V+]Lcom/android/server/pm/AppsFilterImpl;Lcom/android/server/pm/AppsFilterImpl;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/AppsFilterImpl;->registerObserver(Lcom/android/server/utils/Watcher;)V
 HSPLcom/android/server/pm/AppsFilterImpl;->removeAppIdFromVisibilityCache(I)V+]Lcom/android/server/utils/WatchedSparseBooleanMatrix;Lcom/android/server/utils/WatchedSparseBooleanMatrix;
-HSPLcom/android/server/pm/AppsFilterImpl;->removePackage(Lcom/android/server/pm/snapshot/PackageDataSnapshot;Lcom/android/server/pm/pkg/PackageStateInternal;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/snapshot/PackageDataSnapshot;Lcom/android/server/pm/ComputerLocked;]Lcom/android/server/om/OverlayReferenceMapper;Lcom/android/server/om/OverlayReferenceMapper;]Lcom/android/server/pm/AppsFilterImpl;Lcom/android/server/pm/AppsFilterImpl;]Lcom/android/server/pm/FeatureConfig;Lcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/AppsFilterBase;Lcom/android/server/pm/AppsFilterImpl;
+HSPLcom/android/server/pm/AppsFilterImpl;->removePackage(Lcom/android/server/pm/snapshot/PackageDataSnapshot;Lcom/android/server/pm/pkg/PackageStateInternal;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/snapshot/PackageDataSnapshot;Lcom/android/server/pm/ComputerLocked;]Lcom/android/server/om/OverlayReferenceMapper;Lcom/android/server/om/OverlayReferenceMapper;]Lcom/android/server/pm/AppsFilterImpl;Lcom/android/server/pm/AppsFilterImpl;]Lcom/android/server/pm/FeatureConfig;Lcom/android/server/pm/AppsFilterImpl$FeatureConfigImpl;]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/AppsFilterBase;Lcom/android/server/pm/AppsFilterImpl;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;
 PLcom/android/server/pm/AppsFilterImpl;->removeShouldFilterCacheForUser(I)V
 HSPLcom/android/server/pm/AppsFilterImpl;->snapshot()Lcom/android/server/pm/AppsFilterSnapshot;
 PLcom/android/server/pm/AppsFilterImpl;->updateEntireShouldFilterCache(Lcom/android/server/pm/snapshot/PackageDataSnapshot;I)V
@@ -35250,7 +36602,7 @@
 HSPLcom/android/server/pm/AppsFilterUtils;->matchesIntentFilter(Landroid/content/Intent;Landroid/content/IntentFilter;Lcom/android/server/utils/WatchedArrayList;)Z+]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Lcom/android/server/utils/WatchedArrayList;Lcom/android/server/utils/WatchedArrayList;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/pm/AppsFilterUtils;->matchesPackage(Landroid/content/Intent;Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/utils/WatchedArrayList;)Z+]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/AppsFilterUtils;->matchesProviders(Ljava/util/Set;Lcom/android/server/pm/parsing/pkg/AndroidPackage;)Z+]Lcom/android/server/pm/pkg/component/ParsedProvider;Lcom/android/server/pm/pkg/component/ParsedProviderImpl;]Ljava/util/StringTokenizer;Ljava/util/StringTokenizer;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/pkg/component/ParsedMainComponent;Lcom/android/server/pm/pkg/component/ParsedProviderImpl;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/Set;Landroid/util/ArraySet;
-HSPLcom/android/server/pm/AppsFilterUtils;->requestsQueryAllPackages(Lcom/android/server/pm/parsing/pkg/AndroidPackage;)Z+]Ljava/util/List;Ljava/util/ArrayList;,Ljava/util/Collections$EmptyList;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;
+HSPLcom/android/server/pm/AppsFilterUtils;->requestsQueryAllPackages(Lcom/android/server/pm/parsing/pkg/AndroidPackage;)Z+]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 PLcom/android/server/pm/BackgroundDexOptJobService;-><init>()V
 PLcom/android/server/pm/BackgroundDexOptJobService;->onStartJob(Landroid/app/job/JobParameters;)Z
 PLcom/android/server/pm/BackgroundDexOptJobService;->onStopJob(Landroid/app/job/JobParameters;)Z
@@ -35281,7 +36633,7 @@
 HPLcom/android/server/pm/BackgroundDexOptService$Injector;->isBatteryLevelLow()Z
 PLcom/android/server/pm/BackgroundDexOptService$Injector;->supportSecondaryDex()Z
 PLcom/android/server/pm/BackgroundDexOptService;->$r8$lambda$ELonELsatTgdaseDEofEmuJoJXM(Lcom/android/server/pm/BackgroundDexOptService;Lcom/android/server/pm/PackageManagerService;Ljava/util/List;Landroid/app/job/JobParameters;Lcom/android/server/pm/BackgroundDexOptJobService;)V
-PLcom/android/server/pm/BackgroundDexOptService;->$r8$lambda$WFSIuiapo06I6TQdJMnXhIb_C-E(Lcom/android/server/pm/BackgroundDexOptService;Lcom/android/server/pm/dex/DexoptOptions;)Ljava/lang/Integer;
+HPLcom/android/server/pm/BackgroundDexOptService;->$r8$lambda$WFSIuiapo06I6TQdJMnXhIb_C-E(Lcom/android/server/pm/BackgroundDexOptService;Lcom/android/server/pm/dex/DexoptOptions;)Ljava/lang/Integer;
 HPLcom/android/server/pm/BackgroundDexOptService;->$r8$lambda$vuNmAaCST9Mwe0ZxenjW2kTQZIo(Lcom/android/server/pm/BackgroundDexOptService;Lcom/android/server/pm/dex/DexoptOptions;)Ljava/lang/Integer;
 PLcom/android/server/pm/BackgroundDexOptService;->$r8$lambda$ycTtqWNgpTEagdZYSyId_EId2fw(Lcom/android/server/pm/BackgroundDexOptService;)V
 PLcom/android/server/pm/BackgroundDexOptService;->-$$Nest$fgetmInjector(Lcom/android/server/pm/BackgroundDexOptService;)Lcom/android/server/pm/BackgroundDexOptService$Injector;
@@ -35321,7 +36673,7 @@
 PLcom/android/server/pm/BackgroundDexOptService;->shouldDowngrade(J)Z
 HSPLcom/android/server/pm/BackgroundDexOptService;->systemReady()V
 HPLcom/android/server/pm/BackgroundDexOptService;->trackPerformDexOpt(Ljava/lang/String;ZLjava/util/function/Supplier;)I
-PLcom/android/server/pm/BackgroundDexOptService;->waitForDexOptThreadToFinishLocked()V
+HPLcom/android/server/pm/BackgroundDexOptService;->waitForDexOptThreadToFinishLocked()V
 PLcom/android/server/pm/BackgroundDexOptService;->writeStatsLog(Landroid/app/job/JobParameters;)V
 HSPLcom/android/server/pm/BroadcastHelper;-><clinit>()V
 HSPLcom/android/server/pm/BroadcastHelper;-><init>(Lcom/android/server/pm/PackageManagerServiceInjector;)V
@@ -35338,9 +36690,9 @@
 HPLcom/android/server/pm/ChangedPackagesTracker;->getChangedPackages(II)Landroid/content/pm/ChangedPackages;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLcom/android/server/pm/ChangedPackagesTracker;->getSequenceNumber()I
 PLcom/android/server/pm/ChangedPackagesTracker;->iterateAll(Ljava/util/function/BiConsumer;)V
-HPLcom/android/server/pm/ChangedPackagesTracker;->updateSequenceNumber(Ljava/lang/String;[I)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/Map;Ljava/util/HashMap;
+HSPLcom/android/server/pm/ChangedPackagesTracker;->updateSequenceNumber(Ljava/lang/String;[I)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/Map;Ljava/util/HashMap;
 HSPLcom/android/server/pm/CommitRequest;-><init>(Ljava/util/Map;[I)V
-PLcom/android/server/pm/CompilerStats$PackageStats;->-$$Nest$fgetcompileTimePerCodePath(Lcom/android/server/pm/CompilerStats$PackageStats;)Ljava/util/Map;
+HPLcom/android/server/pm/CompilerStats$PackageStats;->-$$Nest$fgetcompileTimePerCodePath(Lcom/android/server/pm/CompilerStats$PackageStats;)Ljava/util/Map;
 HSPLcom/android/server/pm/CompilerStats$PackageStats;-><init>(Ljava/lang/String;)V
 PLcom/android/server/pm/CompilerStats$PackageStats;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
 HSPLcom/android/server/pm/CompilerStats$PackageStats;->getCompileTime(Ljava/lang/String;)J
@@ -35364,7 +36716,7 @@
 HSPLcom/android/server/pm/ComputerEngine$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 PLcom/android/server/pm/ComputerEngine$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/pm/ComputerEngine;)V
 HPLcom/android/server/pm/ComputerEngine$$ExternalSyntheticLambda1;->apply(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/pm/ComputerEngine$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/pm/ComputerEngine$Settings;)V
+HPLcom/android/server/pm/ComputerEngine$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/pm/ComputerEngine$Settings;)V
 PLcom/android/server/pm/ComputerEngine$$ExternalSyntheticLambda2;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/pm/ComputerEngine$Settings;-><init>(Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/Settings;)V
 PLcom/android/server/pm/ComputerEngine$Settings;->dumpKeySet(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/pm/DumpState;)V
@@ -35384,39 +36736,40 @@
 HSPLcom/android/server/pm/ComputerEngine$Settings;->getDisabledSystemPkg(Ljava/lang/String;)Lcom/android/server/pm/pkg/PackageStateInternal;
 HSPLcom/android/server/pm/ComputerEngine$Settings;->getPackage(Ljava/lang/String;)Lcom/android/server/pm/pkg/PackageStateInternal;+]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;
 HSPLcom/android/server/pm/ComputerEngine$Settings;->getPackages()Landroid/util/ArrayMap;+]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;
-HSPLcom/android/server/pm/ComputerEngine$Settings;->getPersistentPreferredActivities(I)Lcom/android/server/pm/PersistentPreferredIntentResolver;
+HSPLcom/android/server/pm/ComputerEngine$Settings;->getPersistentPreferredActivities(I)Lcom/android/server/pm/PersistentPreferredIntentResolver;+]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;
 HSPLcom/android/server/pm/ComputerEngine$Settings;->getPreferredActivities(I)Lcom/android/server/pm/PreferredIntentResolver;
 HSPLcom/android/server/pm/ComputerEngine$Settings;->getRenamedPackageLPr(Ljava/lang/String;)Ljava/lang/String;+]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;
 HSPLcom/android/server/pm/ComputerEngine$Settings;->getSettingBase(I)Lcom/android/server/pm/SettingBase;+]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;
 HSPLcom/android/server/pm/ComputerEngine$Settings;->getSharedUserFromAppId(I)Lcom/android/server/pm/pkg/SharedUserApi;
 HSPLcom/android/server/pm/ComputerEngine$Settings;->getSharedUserFromPackageName(Ljava/lang/String;)Lcom/android/server/pm/pkg/SharedUserApi;
-HSPLcom/android/server/pm/ComputerEngine$Settings;->getSharedUserPackages(I)Landroid/util/ArraySet;
+HSPLcom/android/server/pm/ComputerEngine$Settings;->getSharedUserPackages(I)Landroid/util/ArraySet;+]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/SharedUserSetting;Lcom/android/server/pm/SharedUserSetting;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
 HSPLcom/android/server/pm/ComputerEngine$Settings;->getVolumePackages(Ljava/lang/String;)Ljava/util/List;
 HSPLcom/android/server/pm/ComputerEngine$Settings;->isEnabledAndMatch(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/pkg/component/ParsedMainComponent;JI)Z+]Lcom/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;,Lcom/android/server/pm/pkg/component/ParsedServiceImpl;]Lcom/android/server/pm/pkg/AndroidPackageApi;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
 HSPLcom/android/server/pm/ComputerEngine;->$r8$lambda$vyWc2DTudQZ-4Lq-trQbr939X2M(Landroid/content/pm/ProviderInfo;Landroid/content/pm/ProviderInfo;)I
 HSPLcom/android/server/pm/ComputerEngine;-><clinit>()V
 HSPLcom/android/server/pm/ComputerEngine;-><init>(Lcom/android/server/pm/PackageManagerService$Snapshot;I)V+]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;
+PLcom/android/server/pm/ComputerEngine;->activitySupportsIntent(Landroid/content/ComponentName;Landroid/content/ComponentName;Landroid/content/Intent;Ljava/lang/String;)Z
 HSPLcom/android/server/pm/ComputerEngine;->addPackageHoldingPermissions(Ljava/util/ArrayList;Lcom/android/server/pm/pkg/PackageStateInternal;[Ljava/lang/String;[ZJI)V+]Lcom/android/server/pm/permission/PermissionManagerServiceInternal;Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/pm/ComputerEngine;->androidApplication()Landroid/content/pm/ApplicationInfo;
-HSPLcom/android/server/pm/ComputerEngine;->applyPostResolutionFilter(Ljava/util/List;Ljava/lang/String;ZIZILandroid/content/Intent;)Ljava/util/List;+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Lcom/android/server/pm/AppsFilterSnapshot;Lcom/android/server/pm/AppsFilterSnapshotImpl;,Lcom/android/server/pm/AppsFilterImpl;]Landroid/content/Intent;Landroid/content/Intent;
-HSPLcom/android/server/pm/ComputerEngine;->applyPostServiceResolutionFilter(Ljava/util/List;Ljava/lang/String;II)Ljava/util/List;+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Lcom/android/server/pm/AppsFilterSnapshot;Lcom/android/server/pm/AppsFilterSnapshotImpl;,Lcom/android/server/pm/AppsFilterImpl;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;
-HPLcom/android/server/pm/ComputerEngine;->areWebInstantAppsDisabled(I)Z
+HSPLcom/android/server/pm/ComputerEngine;->applyPostResolutionFilter(Ljava/util/List;Ljava/lang/String;ZIZILandroid/content/Intent;)Ljava/util/List;+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Lcom/android/server/pm/AppsFilterSnapshot;Lcom/android/server/pm/AppsFilterImpl;,Lcom/android/server/pm/AppsFilterSnapshotImpl;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/pm/ComputerEngine;->applyPostServiceResolutionFilter(Ljava/util/List;Ljava/lang/String;II)Ljava/util/List;+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Lcom/android/server/pm/AppsFilterSnapshot;Lcom/android/server/pm/AppsFilterSnapshotImpl;,Lcom/android/server/pm/AppsFilterImpl;
+HSPLcom/android/server/pm/ComputerEngine;->areWebInstantAppsDisabled(I)Z
 HPLcom/android/server/pm/ComputerEngine;->buildInvalidCrossUserOrProfilePermissionMessage(IILjava/lang/String;ZZ)Ljava/lang/String;
 PLcom/android/server/pm/ComputerEngine;->buildInvalidCrossUserPermissionMessage(IILjava/lang/String;Z)Ljava/lang/String;
 PLcom/android/server/pm/ComputerEngine;->canAccessComponent(ILandroid/content/ComponentName;I)Z
 PLcom/android/server/pm/ComputerEngine;->canForwardTo(Landroid/content/Intent;Ljava/lang/String;II)Z
 HPLcom/android/server/pm/ComputerEngine;->canQueryPackage(ILjava/lang/String;)Z+]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Lcom/android/server/pm/SharedUserSetting;Lcom/android/server/pm/SharedUserSetting;]Lcom/android/server/pm/AppsFilterSnapshot;Lcom/android/server/pm/AppsFilterSnapshotImpl;,Lcom/android/server/pm/AppsFilterImpl;
 PLcom/android/server/pm/ComputerEngine;->canRequestPackageInstalls(Ljava/lang/String;IIZ)Z
-HSPLcom/android/server/pm/ComputerEngine;->canViewInstantApps(II)Z+]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Landroid/content/ComponentName;Landroid/content/ComponentName;
+HSPLcom/android/server/pm/ComputerEngine;->canViewInstantApps(II)Z+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/ComponentName;Landroid/content/ComponentName;
 HSPLcom/android/server/pm/ComputerEngine;->canonicalToCurrentPackageNames([Ljava/lang/String;)[Ljava/lang/String;
 PLcom/android/server/pm/ComputerEngine;->checkPackageFrozen(Ljava/lang/String;)V
 HSPLcom/android/server/pm/ComputerEngine;->checkSignatures(Ljava/lang/String;Ljava/lang/String;)I+]Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/ComputerEngine;->checkSignaturesInternal(Landroid/content/pm/SigningDetails;Landroid/content/pm/SigningDetails;)I+]Landroid/content/pm/SigningDetails;Landroid/content/pm/SigningDetails;
 HSPLcom/android/server/pm/ComputerEngine;->checkUidPermission(Ljava/lang/String;I)I+]Lcom/android/server/pm/permission/PermissionManagerServiceInternal;Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;
 HPLcom/android/server/pm/ComputerEngine;->checkUidSignatures(II)I
-HPLcom/android/server/pm/ComputerEngine;->createForwardingResolveInfo(Lcom/android/server/pm/CrossProfileIntentFilter;Landroid/content/Intent;Ljava/lang/String;JI)Lcom/android/server/pm/CrossProfileDomainInfo;+]Lcom/android/server/pm/resolution/ComponentResolverApi;Lcom/android/server/pm/resolution/ComponentResolverSnapshot;]Lcom/android/server/pm/verify/domain/DomainVerificationManagerInternal;Lcom/android/server/pm/verify/domain/DomainVerificationService;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Lcom/android/server/pm/CrossProfileIntentFilter;Lcom/android/server/pm/CrossProfileIntentFilter;
-HPLcom/android/server/pm/ComputerEngine;->createForwardingResolveInfoUnchecked(Lcom/android/server/pm/WatchedIntentFilter;II)Landroid/content/pm/ResolveInfo;
-PLcom/android/server/pm/ComputerEngine;->currentToCanonicalPackageNames([Ljava/lang/String;)[Ljava/lang/String;
+HSPLcom/android/server/pm/ComputerEngine;->createForwardingResolveInfo(Lcom/android/server/pm/CrossProfileIntentFilter;Landroid/content/Intent;Ljava/lang/String;JI)Lcom/android/server/pm/CrossProfileDomainInfo;+]Lcom/android/server/pm/resolution/ComponentResolverApi;Lcom/android/server/pm/resolution/ComponentResolverSnapshot;]Lcom/android/server/pm/verify/domain/DomainVerificationManagerInternal;Lcom/android/server/pm/verify/domain/DomainVerificationService;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Lcom/android/server/pm/CrossProfileIntentFilter;Lcom/android/server/pm/CrossProfileIntentFilter;
+HPLcom/android/server/pm/ComputerEngine;->createForwardingResolveInfoUnchecked(Lcom/android/server/pm/WatchedIntentFilter;II)Landroid/content/pm/ResolveInfo;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/WatchedIntentFilter;Lcom/android/server/pm/CrossProfileIntentFilter;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;
+HPLcom/android/server/pm/ComputerEngine;->currentToCanonicalPackageNames([Ljava/lang/String;)[Ljava/lang/String;
 HPLcom/android/server/pm/ComputerEngine;->dump(ILjava/io/FileDescriptor;Ljava/io/PrintWriter;Lcom/android/server/pm/DumpState;)V
 PLcom/android/server/pm/ComputerEngine;->dumpKeySet(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/pm/DumpState;)V
 PLcom/android/server/pm/ComputerEngine;->dumpPackages(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/util/ArraySet;Lcom/android/server/pm/DumpState;Z)V
@@ -35429,26 +36782,26 @@
 HSPLcom/android/server/pm/ComputerEngine;->enforceCrossUserPermission(IIZZLjava/lang/String;)V+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;
 HSPLcom/android/server/pm/ComputerEngine;->enforceCrossUserPermission(IIZZZLjava/lang/String;)V+]Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerServiceInjector;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;
 HPLcom/android/server/pm/ComputerEngine;->filterAppAccess(II)Z+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
-HSPLcom/android/server/pm/ComputerEngine;->filterAppAccess(Lcom/android/server/pm/parsing/pkg/AndroidPackage;II)Z+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;
+HSPLcom/android/server/pm/ComputerEngine;->filterAppAccess(Lcom/android/server/pm/parsing/pkg/AndroidPackage;II)Z+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/ComputerEngine;->filterAppAccess(Ljava/lang/String;II)Z+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;
 PLcom/android/server/pm/ComputerEngine;->filterCandidatesWithDomainPreferredActivitiesLPr(Landroid/content/Intent;JLjava/util/List;Lcom/android/server/pm/CrossProfileDomainInfo;I)Ljava/util/List;
 HPLcom/android/server/pm/ComputerEngine;->filterCandidatesWithDomainPreferredActivitiesLPrBody(Landroid/content/Intent;JLjava/util/List;Lcom/android/server/pm/CrossProfileDomainInfo;IZ)Ljava/util/ArrayList;
 HSPLcom/android/server/pm/ComputerEngine;->filterIfNotSystemUser(Ljava/util/List;I)Ljava/util/List;+]Ljava/util/List;Ljava/util/Collections$SingletonList;,Ljava/util/ArrayList;
-HSPLcom/android/server/pm/ComputerEngine;->filterOnlySystemPackages([Ljava/lang/String;)[Ljava/lang/String;
+HSPLcom/android/server/pm/ComputerEngine;->filterOnlySystemPackages([Ljava/lang/String;)[Ljava/lang/String;+]Lcom/android/server/pm/pkg/AndroidPackageApi;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/pm/ComputerEngine;->filterSdkLibPackage(Lcom/android/server/pm/pkg/PackageStateInternal;IIJ)Z+]Lcom/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;
-HSPLcom/android/server/pm/ComputerEngine;->filterSharedLibPackage(Lcom/android/server/pm/pkg/PackageStateInternal;IIJ)Z+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;
-HSPLcom/android/server/pm/ComputerEngine;->filterStaticSharedLibPackage(Lcom/android/server/pm/pkg/PackageStateInternal;IIJ)Z+]Lcom/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/pm/SharedLibraryInfo;Landroid/content/pm/SharedLibraryInfo;]Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
-HSPLcom/android/server/pm/ComputerEngine;->findPersistentPreferredActivity(Landroid/content/Intent;Ljava/lang/String;JLjava/util/List;ZI)Landroid/content/pm/ResolveInfo;
-HSPLcom/android/server/pm/ComputerEngine;->findPreferredActivityBody(Landroid/content/Intent;Ljava/lang/String;JLjava/util/List;ZZZIZIZ)Lcom/android/server/pm/PackageManagerService$FindPreferredActivityBodyResult;+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Lcom/android/server/IntentResolver;Lcom/android/server/pm/PreferredIntentResolver;]Lcom/android/server/pm/PreferredComponent;Lcom/android/server/pm/PreferredComponent;]Lcom/android/server/pm/WatchedIntentResolver;Lcom/android/server/pm/PreferredIntentResolver;
-HSPLcom/android/server/pm/ComputerEngine;->findPreferredActivityInternal(Landroid/content/Intent;Ljava/lang/String;JLjava/util/List;ZZZIZ)Lcom/android/server/pm/PackageManagerService$FindPreferredActivityBodyResult;
+HSPLcom/android/server/pm/ComputerEngine;->filterSharedLibPackage(Lcom/android/server/pm/pkg/PackageStateInternal;IIJ)Z+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;
+HSPLcom/android/server/pm/ComputerEngine;->filterStaticSharedLibPackage(Lcom/android/server/pm/pkg/PackageStateInternal;IIJ)Z+]Landroid/content/pm/SharedLibraryInfo;Landroid/content/pm/SharedLibraryInfo;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
+HSPLcom/android/server/pm/ComputerEngine;->findPersistentPreferredActivity(Landroid/content/Intent;Ljava/lang/String;JLjava/util/List;ZI)Landroid/content/pm/ResolveInfo;+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
+HSPLcom/android/server/pm/ComputerEngine;->findPreferredActivityBody(Landroid/content/Intent;Ljava/lang/String;JLjava/util/List;ZZZIZIZ)Lcom/android/server/pm/PackageManagerService$FindPreferredActivityBodyResult;+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Lcom/android/server/IntentResolver;Lcom/android/server/pm/PreferredIntentResolver;]Lcom/android/server/pm/PreferredComponent;Lcom/android/server/pm/PreferredComponent;]Lcom/android/server/pm/WatchedIntentResolver;Lcom/android/server/pm/PreferredIntentResolver;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/pm/ComputerEngine;->findPreferredActivityInternal(Landroid/content/Intent;Ljava/lang/String;JLjava/util/List;ZZZIZ)Lcom/android/server/pm/PackageManagerService$FindPreferredActivityBodyResult;+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Landroid/content/Context;Landroid/app/ContextImpl;
 PLcom/android/server/pm/ComputerEngine;->findSharedNonSystemLibraries(Lcom/android/server/pm/pkg/PackageStateInternal;)Ljava/util/List;
 HPLcom/android/server/pm/ComputerEngine;->generateApplicationInfoFromSettings(Ljava/lang/String;JII)Landroid/content/pm/ApplicationInfo;
-HSPLcom/android/server/pm/ComputerEngine;->generatePackageInfo(Lcom/android/server/pm/pkg/PackageStateInternal;JI)Landroid/content/pm/PackageInfo;+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;,Lcom/android/server/pm/pkg/PackageUserStateDefault;]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/permission/PermissionManagerServiceInternal;Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/permission/LegacyPermissionDataProvider;Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;]Landroid/content/pm/PackageInfo;Landroid/content/pm/PackageInfo;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
+HSPLcom/android/server/pm/ComputerEngine;->generatePackageInfo(Lcom/android/server/pm/pkg/PackageStateInternal;JI)Landroid/content/pm/PackageInfo;+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;,Lcom/android/server/pm/pkg/PackageUserStateDefault;]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/permission/PermissionManagerServiceInternal;Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/permission/LegacyPermissionDataProvider;Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;]Landroid/content/pm/PackageInfo;Landroid/content/pm/PackageInfo;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
 HSPLcom/android/server/pm/ComputerEngine;->getActivityInfo(Landroid/content/ComponentName;JI)Landroid/content/pm/ActivityInfo;+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/ComputerEngine;->getActivityInfoInternal(Landroid/content/ComponentName;JII)Landroid/content/pm/ActivityInfo;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/ComputerEngine;->getActivityInfoInternalBody(Landroid/content/ComponentName;JII)Landroid/content/pm/ActivityInfo;+]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;]Lcom/android/server/pm/resolution/ComponentResolverApi;Lcom/android/server/pm/resolution/ComponentResolverSnapshot;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
 HSPLcom/android/server/pm/ComputerEngine;->getAllAvailablePackageNames()[Ljava/lang/String;
-PLcom/android/server/pm/ComputerEngine;->getAllIntentFilters(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
+HPLcom/android/server/pm/ComputerEngine;->getAllIntentFilters(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/pm/ComputerEngine;->getAllSharedUsers()Ljava/util/Collection;+]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
 HPLcom/android/server/pm/ComputerEngine;->getAppOpPermissionPackages(Ljava/lang/String;)[Ljava/lang/String;
 HSPLcom/android/server/pm/ComputerEngine;->getApplicationEnabledSetting(Ljava/lang/String;I)I+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
@@ -35462,24 +36815,24 @@
 HPLcom/android/server/pm/ComputerEngine;->getComponentEnabledSetting(Landroid/content/ComponentName;II)I+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;
 HPLcom/android/server/pm/ComputerEngine;->getComponentEnabledSettingInternal(Landroid/content/ComponentName;II)I+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
 HSPLcom/android/server/pm/ComputerEngine;->getComponentResolver()Lcom/android/server/pm/resolution/ComponentResolverApi;
-PLcom/android/server/pm/ComputerEngine;->getCrossProfileDomainPreferredLpr(Landroid/content/Intent;Ljava/lang/String;JII)Lcom/android/server/pm/CrossProfileDomainInfo;
-HPLcom/android/server/pm/ComputerEngine;->getDeclaredSharedLibraries(Ljava/lang/String;JI)Landroid/content/pm/ParceledListSlice;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Landroid/content/pm/SharedLibraryInfo;Landroid/content/pm/SharedLibraryInfo;]Lcom/android/server/utils/WatchedLongSparseArray;Lcom/android/server/utils/WatchedLongSparseArray;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/VersionedPackage;Landroid/content/pm/VersionedPackage;
-PLcom/android/server/pm/ComputerEngine;->getDefaultHomeActivity(I)Landroid/content/ComponentName;
+HPLcom/android/server/pm/ComputerEngine;->getCrossProfileDomainPreferredLpr(Landroid/content/Intent;Ljava/lang/String;JII)Lcom/android/server/pm/CrossProfileDomainInfo;
+HSPLcom/android/server/pm/ComputerEngine;->getDeclaredSharedLibraries(Ljava/lang/String;JI)Landroid/content/pm/ParceledListSlice;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Landroid/content/pm/SharedLibraryInfo;Landroid/content/pm/SharedLibraryInfo;]Lcom/android/server/utils/WatchedLongSparseArray;Lcom/android/server/utils/WatchedLongSparseArray;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/VersionedPackage;Landroid/content/pm/VersionedPackage;
+HSPLcom/android/server/pm/ComputerEngine;->getDefaultHomeActivity(I)Landroid/content/ComponentName;
 HSPLcom/android/server/pm/ComputerEngine;->getDisabledSystemPackage(Ljava/lang/String;)Lcom/android/server/pm/pkg/PackageStateInternal;
 PLcom/android/server/pm/ComputerEngine;->getFlagsForUid(I)I
 PLcom/android/server/pm/ComputerEngine;->getGrantImplicitAccessProviderInfo(ILjava/lang/String;)Landroid/content/pm/ProviderInfo;
 HSPLcom/android/server/pm/ComputerEngine;->getHarmfulAppWarning(Ljava/lang/String;I)Ljava/lang/CharSequence;
-HPLcom/android/server/pm/ComputerEngine;->getHomeActivitiesAsUser(Ljava/util/List;I)Landroid/content/ComponentName;
-HPLcom/android/server/pm/ComputerEngine;->getHomeIntent()Landroid/content/Intent;
-HPLcom/android/server/pm/ComputerEngine;->getInstallReason(Ljava/lang/String;I)I
+HSPLcom/android/server/pm/ComputerEngine;->getHomeActivitiesAsUser(Ljava/util/List;I)Landroid/content/ComponentName;
+HSPLcom/android/server/pm/ComputerEngine;->getHomeIntent()Landroid/content/Intent;
+HPLcom/android/server/pm/ComputerEngine;->getInstallReason(Ljava/lang/String;I)I+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
 HSPLcom/android/server/pm/ComputerEngine;->getInstallSource(Ljava/lang/String;I)Lcom/android/server/pm/InstallSource;+]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Lcom/android/server/pm/ApexManager;Lcom/android/server/pm/ApexManager$ApexManagerImpl;
-HSPLcom/android/server/pm/ComputerEngine;->getInstallSourceInfo(Ljava/lang/String;)Landroid/content/pm/InstallSourceInfo;+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
+HSPLcom/android/server/pm/ComputerEngine;->getInstallSourceInfo(Ljava/lang/String;)Landroid/content/pm/InstallSourceInfo;+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
 HSPLcom/android/server/pm/ComputerEngine;->getInstalledApplications(JII)Ljava/util/List;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
 HSPLcom/android/server/pm/ComputerEngine;->getInstalledPackages(JI)Landroid/content/pm/ParceledListSlice;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/ComputerEngine;->getInstalledPackagesBody(JII)Landroid/content/pm/ParceledListSlice;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/pm/pkg/AndroidPackageApi;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Ljava/util/Collection;Ljava/util/Collections$UnmodifiableCollection;,Landroid/util/MapCollections$ValuesCollection;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;,Ljava/util/Collections$UnmodifiableCollection$1;]Lcom/android/server/pm/ApexManager;Lcom/android/server/pm/ApexManager$ApexManagerImpl;
 HPLcom/android/server/pm/ComputerEngine;->getInstallerPackageName(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
 PLcom/android/server/pm/ComputerEngine;->getInstantAppInstallerComponent()Landroid/content/ComponentName;
-HSPLcom/android/server/pm/ComputerEngine;->getInstantAppPackageName(I)Ljava/lang/String;+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;,Lcom/android/server/pm/pkg/PackageUserStateDefault;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;
+HSPLcom/android/server/pm/ComputerEngine;->getInstantAppPackageName(I)Ljava/lang/String;+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;,Lcom/android/server/pm/pkg/PackageUserStateDefault;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
 PLcom/android/server/pm/ComputerEngine;->getInstrumentationInfo(Landroid/content/ComponentName;I)Landroid/content/pm/InstrumentationInfo;
 HPLcom/android/server/pm/ComputerEngine;->getIsolatedOwner(I)I
 HSPLcom/android/server/pm/ComputerEngine;->getMatchingCrossProfileIntentFilters(Landroid/content/Intent;Ljava/lang/String;I)Ljava/util/List;+]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Lcom/android/server/IntentResolver;Lcom/android/server/pm/CrossProfileIntentResolver;
@@ -35487,23 +36840,23 @@
 HSPLcom/android/server/pm/ComputerEngine;->getNamesForUids([I)[Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
 HPLcom/android/server/pm/ComputerEngine;->getNotifyPackagesForReplacedReceived([Ljava/lang/String;)Landroid/util/ArraySet;
 HSPLcom/android/server/pm/ComputerEngine;->getPackage(I)Lcom/android/server/pm/parsing/pkg/AndroidPackage;+]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;
-HSPLcom/android/server/pm/ComputerEngine;->getPackage(Ljava/lang/String;)Lcom/android/server/pm/parsing/pkg/AndroidPackage;+]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;
-HSPLcom/android/server/pm/ComputerEngine;->getPackageGids(Ljava/lang/String;JI)[I
+HSPLcom/android/server/pm/ComputerEngine;->getPackage(Ljava/lang/String;)Lcom/android/server/pm/parsing/pkg/AndroidPackage;+]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;
+HSPLcom/android/server/pm/ComputerEngine;->getPackageGids(Ljava/lang/String;JI)[I+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/permission/LegacyPermissionDataProvider;Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;
 HSPLcom/android/server/pm/ComputerEngine;->getPackageInfo(Ljava/lang/String;JI)Landroid/content/pm/PackageInfo;+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/ComputerEngine;->getPackageInfoInternal(Ljava/lang/String;JJII)Landroid/content/pm/PackageInfo;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/ComputerEngine;->getPackageInfoInternalBody(Ljava/lang/String;JJII)Landroid/content/pm/PackageInfo;+]Lcom/android/server/pm/pkg/AndroidPackageApi;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Lcom/android/server/pm/ApexManager;Lcom/android/server/pm/ApexManager$ApexManagerImpl;
 HSPLcom/android/server/pm/ComputerEngine;->getPackageStartability(ZLjava/lang/String;II)I+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;
-HSPLcom/android/server/pm/ComputerEngine;->getPackageStateFiltered(Ljava/lang/String;II)Lcom/android/server/pm/pkg/PackageStateInternal;
-HSPLcom/android/server/pm/ComputerEngine;->getPackageStateInternal(Ljava/lang/String;)Lcom/android/server/pm/pkg/PackageStateInternal;+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;
+HSPLcom/android/server/pm/ComputerEngine;->getPackageStateFiltered(Ljava/lang/String;II)Lcom/android/server/pm/pkg/PackageStateInternal;+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;
+HSPLcom/android/server/pm/ComputerEngine;->getPackageStateInternal(Ljava/lang/String;)Lcom/android/server/pm/pkg/PackageStateInternal;+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/ComputerEngine;->getPackageStateInternal(Ljava/lang/String;I)Lcom/android/server/pm/pkg/PackageStateInternal;+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
 HSPLcom/android/server/pm/ComputerEngine;->getPackageStates()Landroid/util/ArrayMap;+]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
 HSPLcom/android/server/pm/ComputerEngine;->getPackageUid(Ljava/lang/String;JI)I+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;
-HSPLcom/android/server/pm/ComputerEngine;->getPackageUidInternal(Ljava/lang/String;JII)I+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;,Lcom/android/server/pm/pkg/PackageUserStateDefault;]Lcom/android/server/pm/pkg/AndroidPackageApi;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
+HSPLcom/android/server/pm/ComputerEngine;->getPackageUidInternal(Ljava/lang/String;JII)I+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;,Lcom/android/server/pm/pkg/PackageUserStateDefault;]Lcom/android/server/pm/pkg/AndroidPackageApi;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
 HSPLcom/android/server/pm/ComputerEngine;->getPackagesForUid(I)[Ljava/lang/String;+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/ComputerEngine;->getPackagesForUidInternal(II)[Ljava/lang/String;+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/ComputerEngine;->getPackagesForUidInternalBody(IIIZ)[Ljava/lang/String;+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;,Lcom/android/server/pm/pkg/PackageUserStateDefault;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Lcom/android/server/pm/SharedUserSetting;Lcom/android/server/pm/SharedUserSetting;
 HSPLcom/android/server/pm/ComputerEngine;->getPackagesHoldingPermissions([Ljava/lang/String;JI)Landroid/content/pm/ParceledListSlice;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
-HSPLcom/android/server/pm/ComputerEngine;->getPackagesUsingSharedLibrary(Landroid/content/pm/SharedLibraryInfo;JII)Ljava/util/List;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/pm/SharedLibraryInfo;Landroid/content/pm/SharedLibraryInfo;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;
+HSPLcom/android/server/pm/ComputerEngine;->getPackagesUsingSharedLibrary(Landroid/content/pm/SharedLibraryInfo;JII)Ljava/util/List;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/pm/SharedLibraryInfo;Landroid/content/pm/SharedLibraryInfo;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/ComputerEngine;->getPersistentApplications(ZI)Ljava/util/List;
 PLcom/android/server/pm/ComputerEngine;->getPreferredActivities(I)Lcom/android/server/pm/PreferredIntentResolver;
 HSPLcom/android/server/pm/ComputerEngine;->getProcessesForUid(I)Landroid/util/ArrayMap;+]Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
@@ -35521,9 +36874,9 @@
 HSPLcom/android/server/pm/ComputerEngine;->getSharedUserPackagesForPackage(Ljava/lang/String;I)[Ljava/lang/String;+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/pm/pkg/SharedUserApi;Lcom/android/server/pm/SharedUserSetting;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
 HSPLcom/android/server/pm/ComputerEngine;->getSigningDetails(I)Landroid/content/pm/SigningDetails;+]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
 PLcom/android/server/pm/ComputerEngine;->getSigningDetails(Ljava/lang/String;)Landroid/content/pm/SigningDetails;
-HPLcom/android/server/pm/ComputerEngine;->getSystemSharedLibraryNames()[Ljava/lang/String;
+HPLcom/android/server/pm/ComputerEngine;->getSystemSharedLibraryNames()[Ljava/lang/String;+]Landroid/content/pm/SharedLibraryInfo;Landroid/content/pm/SharedLibraryInfo;]Lcom/android/server/utils/WatchedLongSparseArray;Lcom/android/server/utils/WatchedLongSparseArray;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Ljava/util/Set;Landroid/util/ArraySet;
 HSPLcom/android/server/pm/ComputerEngine;->getTargetSdkVersion(Ljava/lang/String;)I+]Lcom/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;
-HPLcom/android/server/pm/ComputerEngine;->getUidTargetSdkVersion(I)I+]Lcom/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Lcom/android/server/pm/SharedUserSetting;Lcom/android/server/pm/SharedUserSetting;
+HSPLcom/android/server/pm/ComputerEngine;->getUidTargetSdkVersion(I)I+]Lcom/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Lcom/android/server/pm/SharedUserSetting;Lcom/android/server/pm/SharedUserSetting;
 PLcom/android/server/pm/ComputerEngine;->getUnusedPackages(J)Ljava/util/Set;
 HSPLcom/android/server/pm/ComputerEngine;->getUsed()I
 HSPLcom/android/server/pm/ComputerEngine;->getUserInfos()[Landroid/content/pm/UserInfo;
@@ -35533,28 +36886,28 @@
 HSPLcom/android/server/pm/ComputerEngine;->hasCrossUserPermission(IIIZZ)Z+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/ComputerEngine;->hasNonNegativePriority(Ljava/util/List;)Z+]Ljava/util/List;Ljava/util/ArrayList;
 HSPLcom/android/server/pm/ComputerEngine;->hasPermission(Ljava/lang/String;)Z
-HPLcom/android/server/pm/ComputerEngine;->hasSigningCertificate(Ljava/lang/String;[BI)Z+]Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Landroid/content/pm/SigningDetails;Landroid/content/pm/SigningDetails;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;
+HSPLcom/android/server/pm/ComputerEngine;->hasSigningCertificate(Ljava/lang/String;[BI)Z+]Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Landroid/content/pm/SigningDetails;Landroid/content/pm/SigningDetails;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/ComputerEngine;->instantAppInstallerActivity()Landroid/content/pm/ActivityInfo;
-HPLcom/android/server/pm/ComputerEngine;->isCallerInstallerOfRecord(Lcom/android/server/pm/parsing/pkg/AndroidPackage;I)Z+]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;
+HSPLcom/android/server/pm/ComputerEngine;->isCallerInstallerOfRecord(Lcom/android/server/pm/parsing/pkg/AndroidPackage;I)Z+]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/ComputerEngine;->isCallerSameApp(Ljava/lang/String;I)Z+]Lcom/android/server/pm/pkg/AndroidPackageApi;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;
 HSPLcom/android/server/pm/ComputerEngine;->isComponentEffectivelyEnabled(Landroid/content/pm/ComponentInfo;I)Z
 PLcom/android/server/pm/ComputerEngine;->isComponentVisibleToInstantApp(Landroid/content/ComponentName;)Z
 PLcom/android/server/pm/ComputerEngine;->isComponentVisibleToInstantApp(Landroid/content/ComponentName;I)Z
-HSPLcom/android/server/pm/ComputerEngine;->isHomeIntent(Landroid/content/Intent;)Z
+HSPLcom/android/server/pm/ComputerEngine;->isHomeIntent(Landroid/content/Intent;)Z+]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/pm/ComputerEngine;->isImplicitImageCaptureIntentAndNotSetByDpc(Landroid/content/Intent;ILjava/lang/String;J)Z+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Landroid/content/Intent;Landroid/content/Intent;
 PLcom/android/server/pm/ComputerEngine;->isInstallDisabledForPackage(Ljava/lang/String;II)Z
 HSPLcom/android/server/pm/ComputerEngine;->isInstantApp(Ljava/lang/String;I)Z+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/ComputerEngine;->isInstantAppInternal(Ljava/lang/String;II)Z+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/ComputerEngine;->isInstantAppInternalBody(Ljava/lang/String;II)Z+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/pm/InstantAppRegistry;Lcom/android/server/pm/InstantAppRegistry;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
-HSPLcom/android/server/pm/ComputerEngine;->isInstantAppResolutionAllowed(Landroid/content/Intent;Ljava/util/List;IZJ)Z+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;]Landroid/net/Uri;Landroid/net/Uri$OpaqueUri;,Landroid/net/Uri$StringUri;,Landroid/net/Uri$HierarchicalUri;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/pm/ComputerEngine;->isInstantAppResolutionAllowed(Landroid/content/Intent;Ljava/util/List;IZJ)Z+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;]Landroid/net/Uri;Landroid/net/Uri$OpaqueUri;,Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;]Landroid/content/Intent;Landroid/content/Intent;
 HPLcom/android/server/pm/ComputerEngine;->isInstantAppResolutionAllowedBody(Landroid/content/Intent;Ljava/util/List;IZJ)Z
 HSPLcom/android/server/pm/ComputerEngine;->isPackageAvailable(Ljava/lang/String;I)Z+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;
-HPLcom/android/server/pm/ComputerEngine;->isPackageSuspendedForUser(Ljava/lang/String;I)Z+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
-PLcom/android/server/pm/ComputerEngine;->isPersistentPreferredActivitySetByDpm(Landroid/content/Intent;ILjava/lang/String;J)Z
+HSPLcom/android/server/pm/ComputerEngine;->isPackageSuspendedForUser(Ljava/lang/String;I)Z+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
+HSPLcom/android/server/pm/ComputerEngine;->isPersistentPreferredActivitySetByDpm(Landroid/content/Intent;ILjava/lang/String;J)Z
 HSPLcom/android/server/pm/ComputerEngine;->isRecentsAccessingChildProfiles(II)Z+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerServiceInjector;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;
 HPLcom/android/server/pm/ComputerEngine;->isSameProfileGroup(II)Z
-HPLcom/android/server/pm/ComputerEngine;->isUidPrivileged(I)Z+]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;
-HPLcom/android/server/pm/ComputerEngine;->isUserEnabled(I)Z
+HPLcom/android/server/pm/ComputerEngine;->isUidPrivileged(I)Z+]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/SharedUserSetting;Lcom/android/server/pm/SharedUserSetting;
+HSPLcom/android/server/pm/ComputerEngine;->isUserEnabled(I)Z+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;
 HSPLcom/android/server/pm/ComputerEngine;->lambda$static$0(Landroid/content/pm/ProviderInfo;Landroid/content/pm/ProviderInfo;)I
 HPLcom/android/server/pm/ComputerEngine;->maybeAddInstantAppInstaller(Ljava/util/List;Landroid/content/Intent;Ljava/lang/String;JIZZ)Ljava/util/List;
 HSPLcom/android/server/pm/ComputerEngine;->queryContentProviders(Ljava/lang/String;IJLjava/lang/String;)Landroid/content/pm/ParceledListSlice;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/resolution/ComponentResolverApi;Lcom/android/server/pm/resolution/ComponentResolverSnapshot;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -35574,13 +36927,13 @@
 HSPLcom/android/server/pm/ComputerEngine;->safeMode()Z+]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;
 HSPLcom/android/server/pm/ComputerEngine;->shouldFilterApplication(Lcom/android/server/pm/SharedUserSetting;II)Z+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/SharedUserSetting;Lcom/android/server/pm/SharedUserSetting;
 HSPLcom/android/server/pm/ComputerEngine;->shouldFilterApplication(Lcom/android/server/pm/pkg/PackageStateInternal;II)Z+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;
-HSPLcom/android/server/pm/ComputerEngine;->shouldFilterApplication(Lcom/android/server/pm/pkg/PackageStateInternal;ILandroid/content/ComponentName;II)Z+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;,Lcom/android/server/pm/pkg/PackageUserStateDefault;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Lcom/android/server/pm/AppsFilterSnapshot;Lcom/android/server/pm/AppsFilterImpl;,Lcom/android/server/pm/AppsFilterSnapshotImpl;]Lcom/android/server/pm/InstantAppRegistry;Lcom/android/server/pm/InstantAppRegistry;]Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;
+HSPLcom/android/server/pm/ComputerEngine;->shouldFilterApplication(Lcom/android/server/pm/pkg/PackageStateInternal;ILandroid/content/ComponentName;II)Z+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;,Lcom/android/server/pm/pkg/PackageUserStateDefault;]Lcom/android/server/pm/InstantAppRegistry;Lcom/android/server/pm/InstantAppRegistry;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/ComputerEngine$Settings;Lcom/android/server/pm/ComputerEngine$Settings;]Lcom/android/server/pm/AppsFilterSnapshot;Lcom/android/server/pm/AppsFilterImpl;,Lcom/android/server/pm/AppsFilterSnapshotImpl;]Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;
 HSPLcom/android/server/pm/ComputerEngine;->updateFlags(JI)J+]Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerServiceInjector;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;
 HSPLcom/android/server/pm/ComputerEngine;->updateFlagsForApplication(JI)J
-HSPLcom/android/server/pm/ComputerEngine;->updateFlagsForComponent(JI)J+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;
+HSPLcom/android/server/pm/ComputerEngine;->updateFlagsForComponent(JI)J+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/ComputerEngine;->updateFlagsForPackage(JI)J+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;
 HSPLcom/android/server/pm/ComputerEngine;->updateFlagsForResolve(JIIZZ)J+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;
-HSPLcom/android/server/pm/ComputerEngine;->updateFlagsForResolve(JIIZZZ)J+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;
+HSPLcom/android/server/pm/ComputerEngine;->updateFlagsForResolve(JIIZZZ)J+]Lcom/android/server/pm/ComputerEngine;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/ComputerEngine;->use()Lcom/android/server/pm/Computer;
 HSPLcom/android/server/pm/ComputerLocked;-><init>(Lcom/android/server/pm/PackageManagerService$Snapshot;)V
 PLcom/android/server/pm/ComputerLocked;->instantAppInstallerActivity()Landroid/content/pm/ActivityInfo;
@@ -35592,8 +36945,8 @@
 PLcom/android/server/pm/CrossProfileAppsServiceImpl$$ExternalSyntheticLambda10;->getOrThrow()Ljava/lang/Object;
 PLcom/android/server/pm/CrossProfileAppsServiceImpl$$ExternalSyntheticLambda11;-><init>(Lcom/android/server/pm/CrossProfileAppsServiceImpl;Ljava/lang/String;)V
 PLcom/android/server/pm/CrossProfileAppsServiceImpl$$ExternalSyntheticLambda11;->getOrThrow()Ljava/lang/Object;
-PLcom/android/server/pm/CrossProfileAppsServiceImpl$$ExternalSyntheticLambda12;-><init>(Lcom/android/server/pm/CrossProfileAppsServiceImpl;I)V
-PLcom/android/server/pm/CrossProfileAppsServiceImpl$$ExternalSyntheticLambda12;->getOrThrow()Ljava/lang/Object;
+HPLcom/android/server/pm/CrossProfileAppsServiceImpl$$ExternalSyntheticLambda12;-><init>(Lcom/android/server/pm/CrossProfileAppsServiceImpl;I)V
+HPLcom/android/server/pm/CrossProfileAppsServiceImpl$$ExternalSyntheticLambda12;->getOrThrow()Ljava/lang/Object;
 PLcom/android/server/pm/CrossProfileAppsServiceImpl$$ExternalSyntheticLambda13;-><init>(Lcom/android/server/pm/CrossProfileAppsServiceImpl;II)V
 PLcom/android/server/pm/CrossProfileAppsServiceImpl$$ExternalSyntheticLambda13;->runOrThrow()V
 HPLcom/android/server/pm/CrossProfileAppsServiceImpl$$ExternalSyntheticLambda14;-><init>(Lcom/android/server/pm/CrossProfileAppsServiceImpl;Ljava/lang/String;II)V
@@ -35623,7 +36976,7 @@
 HSPLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;-><init>(Landroid/content/Context;)V
 HPLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->checkComponentPermission(Ljava/lang/String;IIZ)I
 PLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->getActivityTaskManagerInternal()Lcom/android/server/wm/ActivityTaskManagerInternal;
-HPLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->getAppOpsManager()Landroid/app/AppOpsManager;
+HPLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->getAppOpsManager()Landroid/app/AppOpsManager;+]Landroid/content/Context;Landroid/app/ContextImpl;
 HPLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->getCallingPid()I
 HPLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->getCallingUid()I
 HPLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->getCallingUserId()I
@@ -35632,11 +36985,12 @@
 HPLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->getPackageManager()Landroid/content/pm/PackageManager;
 HPLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->getPackageManagerInternal()Landroid/content/pm/PackageManagerInternal;
 HPLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->getUserManager()Landroid/os/UserManager;
+PLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->killUid(I)V
 PLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
 PLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->withCleanCallingIdentity(Lcom/android/internal/util/FunctionalUtils$ThrowingRunnable;)V
 HPLcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;->withCleanCallingIdentity(Lcom/android/internal/util/FunctionalUtils$ThrowingSupplier;)Ljava/lang/Object;
 HSPLcom/android/server/pm/CrossProfileAppsServiceImpl$LocalService;-><init>(Lcom/android/server/pm/CrossProfileAppsServiceImpl;)V
-PLcom/android/server/pm/CrossProfileAppsServiceImpl$LocalService;->getTargetUserProfiles(Ljava/lang/String;I)Ljava/util/List;
+HPLcom/android/server/pm/CrossProfileAppsServiceImpl$LocalService;->getTargetUserProfiles(Ljava/lang/String;I)Ljava/util/List;
 PLcom/android/server/pm/CrossProfileAppsServiceImpl$LocalService;->verifyPackageHasInteractAcrossProfilePermission(Ljava/lang/String;I)Z
 HPLcom/android/server/pm/CrossProfileAppsServiceImpl$LocalService;->verifyUidHasInteractAcrossProfilePermission(Ljava/lang/String;I)Z
 PLcom/android/server/pm/CrossProfileAppsServiceImpl;->$r8$lambda$-s4g4JlLOgrFmNuj1XTuZTeOh_w(Lcom/android/server/pm/CrossProfileAppsServiceImpl;Landroid/content/Intent;IILandroid/content/ComponentName;)V
@@ -35664,7 +37018,7 @@
 PLcom/android/server/pm/CrossProfileAppsServiceImpl;->appDeclaresCrossProfileAttribute(Ljava/lang/String;)Z
 PLcom/android/server/pm/CrossProfileAppsServiceImpl;->canConfigureInteractAcrossProfiles(Ljava/lang/String;)Z
 PLcom/android/server/pm/CrossProfileAppsServiceImpl;->canConfigureInteractAcrossProfiles(Ljava/lang/String;I)Z
-HPLcom/android/server/pm/CrossProfileAppsServiceImpl;->canInteractAcrossProfiles(Ljava/lang/String;)Z
+HPLcom/android/server/pm/CrossProfileAppsServiceImpl;->canInteractAcrossProfiles(Ljava/lang/String;)Z+]Lcom/android/server/pm/CrossProfileAppsServiceImpl;Lcom/android/server/pm/CrossProfileAppsServiceImpl;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/CrossProfileAppsServiceImpl$Injector;Lcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;
 PLcom/android/server/pm/CrossProfileAppsServiceImpl;->canRequestInteractAcrossProfiles(Ljava/lang/String;)Z
 PLcom/android/server/pm/CrossProfileAppsServiceImpl;->canRequestInteractAcrossProfilesUnchecked(Ljava/lang/String;)Z
 PLcom/android/server/pm/CrossProfileAppsServiceImpl;->canUserAttemptToConfigureInteractAcrossProfiles(Ljava/lang/String;)Z
@@ -35679,7 +37033,7 @@
 HPLcom/android/server/pm/CrossProfileAppsServiceImpl;->hasCallerGotInteractAcrossProfilesPermission(Ljava/lang/String;)Z
 HPLcom/android/server/pm/CrossProfileAppsServiceImpl;->hasInteractAcrossProfilesPermission(Ljava/lang/String;II)Z+]Lcom/android/server/pm/CrossProfileAppsServiceImpl;Lcom/android/server/pm/CrossProfileAppsServiceImpl;
 PLcom/android/server/pm/CrossProfileAppsServiceImpl;->hasOtherProfileWithPackageInstalled(Ljava/lang/String;I)Z
-PLcom/android/server/pm/CrossProfileAppsServiceImpl;->hasRequestedAppOpPermission(Ljava/lang/String;Ljava/lang/String;)Z
+HPLcom/android/server/pm/CrossProfileAppsServiceImpl;->hasRequestedAppOpPermission(Ljava/lang/String;Ljava/lang/String;)Z
 HPLcom/android/server/pm/CrossProfileAppsServiceImpl;->haveProfilesGotInteractAcrossProfilesPermission(Ljava/lang/String;Ljava/util/List;)Z+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/pm/CrossProfileAppsServiceImpl;Lcom/android/server/pm/CrossProfileAppsServiceImpl;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/server/pm/CrossProfileAppsServiceImpl$Injector;Lcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;
 PLcom/android/server/pm/CrossProfileAppsServiceImpl;->isCallingUserAManagedProfile()Z
 PLcom/android/server/pm/CrossProfileAppsServiceImpl;->isCrossProfilePackageAllowlisted(Ljava/lang/String;)Z
@@ -35698,7 +37052,7 @@
 PLcom/android/server/pm/CrossProfileAppsServiceImpl;->lambda$findAllPackageNames$12(Landroid/content/pm/ApplicationInfo;)Ljava/lang/String;
 HPLcom/android/server/pm/CrossProfileAppsServiceImpl;->lambda$getTargetUserProfilesUnchecked$3(ILjava/lang/String;)Ljava/util/List;+]Lcom/android/server/pm/CrossProfileAppsServiceImpl;Lcom/android/server/pm/CrossProfileAppsServiceImpl;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/UserManager;Landroid/os/UserManager;]Lcom/android/server/pm/CrossProfileAppsServiceImpl$Injector;Lcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;
 PLcom/android/server/pm/CrossProfileAppsServiceImpl;->lambda$hasOtherProfileWithPackageInstalled$10(ILjava/lang/String;)Ljava/lang/Boolean;
-HPLcom/android/server/pm/CrossProfileAppsServiceImpl;->lambda$haveProfilesGotInteractAcrossProfilesPermission$0(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/lang/Integer;
+HPLcom/android/server/pm/CrossProfileAppsServiceImpl;->lambda$haveProfilesGotInteractAcrossProfilesPermission$0(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/lang/Integer;+]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Lcom/android/server/pm/CrossProfileAppsServiceImpl$Injector;Lcom/android/server/pm/CrossProfileAppsServiceImpl$InjectorImpl;
 PLcom/android/server/pm/CrossProfileAppsServiceImpl;->lambda$isCrossProfilePackageAllowlisted$1(Ljava/lang/String;)Ljava/lang/Boolean;
 PLcom/android/server/pm/CrossProfileAppsServiceImpl;->lambda$isCrossProfilePackageAllowlistedByDefault$2(Ljava/lang/String;)Ljava/lang/Boolean;
 PLcom/android/server/pm/CrossProfileAppsServiceImpl;->lambda$isManagedProfile$14(I)Ljava/lang/Boolean;
@@ -35735,10 +37089,10 @@
 HSPLcom/android/server/pm/CrossProfileIntentFilter;-><init>(Lcom/android/server/pm/CrossProfileIntentFilter;Lcom/android/server/pm/CrossProfileIntentFilter-IA;)V
 HPLcom/android/server/pm/CrossProfileIntentFilter;-><init>(Lcom/android/server/pm/WatchedIntentFilter;Ljava/lang/String;II)V
 PLcom/android/server/pm/CrossProfileIntentFilter;->equalsIgnoreFilter(Lcom/android/server/pm/CrossProfileIntentFilter;)Z
-HPLcom/android/server/pm/CrossProfileIntentFilter;->getFlags()I
+HSPLcom/android/server/pm/CrossProfileIntentFilter;->getFlags()I
 HPLcom/android/server/pm/CrossProfileIntentFilter;->getOwnerPackage()Ljava/lang/String;
 HSPLcom/android/server/pm/CrossProfileIntentFilter;->getStringFromXml(Landroid/util/TypedXmlPullParser;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HPLcom/android/server/pm/CrossProfileIntentFilter;->getTargetUserId()I
+HSPLcom/android/server/pm/CrossProfileIntentFilter;->getTargetUserId()I
 HSPLcom/android/server/pm/CrossProfileIntentFilter;->makeCache()Lcom/android/server/utils/SnapshotCache;
 HSPLcom/android/server/pm/CrossProfileIntentFilter;->snapshot()Lcom/android/server/pm/CrossProfileIntentFilter;+]Lcom/android/server/utils/SnapshotCache;Lcom/android/server/pm/CrossProfileIntentFilter$1;
 HSPLcom/android/server/pm/CrossProfileIntentFilter;->writeToXml(Landroid/util/TypedXmlSerializer;)V+]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;
@@ -35753,8 +37107,8 @@
 HSPLcom/android/server/pm/CrossProfileIntentResolver;->makeCache()Lcom/android/server/utils/SnapshotCache;
 HSPLcom/android/server/pm/CrossProfileIntentResolver;->newArray(I)[Lcom/android/server/pm/CrossProfileIntentFilter;
 HSPLcom/android/server/pm/CrossProfileIntentResolver;->newArray(I)[Ljava/lang/Object;
-HSPLcom/android/server/pm/CrossProfileIntentResolver;->snapshot()Lcom/android/server/pm/CrossProfileIntentResolver;
-HSPLcom/android/server/pm/CrossProfileIntentResolver;->snapshot()Ljava/lang/Object;
+HSPLcom/android/server/pm/CrossProfileIntentResolver;->snapshot()Lcom/android/server/pm/CrossProfileIntentResolver;+]Lcom/android/server/utils/SnapshotCache;Lcom/android/server/pm/CrossProfileIntentResolver$1;
+HSPLcom/android/server/pm/CrossProfileIntentResolver;->snapshot()Ljava/lang/Object;+]Lcom/android/server/pm/CrossProfileIntentResolver;Lcom/android/server/pm/CrossProfileIntentResolver;
 HSPLcom/android/server/pm/CrossProfileIntentResolver;->snapshot(Lcom/android/server/pm/CrossProfileIntentFilter;)Lcom/android/server/pm/CrossProfileIntentFilter;+]Lcom/android/server/pm/CrossProfileIntentFilter;Lcom/android/server/pm/CrossProfileIntentFilter;
 HSPLcom/android/server/pm/CrossProfileIntentResolver;->snapshot(Ljava/lang/Object;)Ljava/lang/Object;+]Lcom/android/server/pm/CrossProfileIntentResolver;Lcom/android/server/pm/CrossProfileIntentResolver;
 HSPLcom/android/server/pm/CrossProfileIntentResolver;->sortResults(Ljava/util/List;)V
@@ -35773,7 +37127,9 @@
 PLcom/android/server/pm/DataLoaderManagerService$DataLoaderServiceConnection;->callListener(I)V
 PLcom/android/server/pm/DataLoaderManagerService$DataLoaderServiceConnection;->destroy()V
 PLcom/android/server/pm/DataLoaderManagerService$DataLoaderServiceConnection;->getDataLoader()Landroid/content/pm/IDataLoader;
+PLcom/android/server/pm/DataLoaderManagerService$DataLoaderServiceConnection;->onBindingDied(Landroid/content/ComponentName;)V
 PLcom/android/server/pm/DataLoaderManagerService$DataLoaderServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/pm/DataLoaderManagerService$DataLoaderServiceConnection;->onServiceDisconnected(Landroid/content/ComponentName;)V
 PLcom/android/server/pm/DataLoaderManagerService$DataLoaderServiceConnection;->remove()Z
 PLcom/android/server/pm/DataLoaderManagerService$DataLoaderServiceConnection;->unbind()Z
 PLcom/android/server/pm/DataLoaderManagerService$DataLoaderServiceConnection;->unbindAndReportDestroyed()V
@@ -35783,10 +37139,10 @@
 HSPLcom/android/server/pm/DataLoaderManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/pm/DataLoaderManagerService;->onStart()V
 HSPLcom/android/server/pm/DefaultAppProvider;-><init>(Ljava/util/function/Supplier;Ljava/util/function/Supplier;)V
-HPLcom/android/server/pm/DefaultAppProvider;->getDefaultBrowser(I)Ljava/lang/String;
+HSPLcom/android/server/pm/DefaultAppProvider;->getDefaultBrowser(I)Ljava/lang/String;
 PLcom/android/server/pm/DefaultAppProvider;->getDefaultDialer(I)Ljava/lang/String;
-HPLcom/android/server/pm/DefaultAppProvider;->getDefaultHome(I)Ljava/lang/String;
-HPLcom/android/server/pm/DefaultAppProvider;->getRoleHolder(Ljava/lang/String;I)Ljava/lang/String;
+HSPLcom/android/server/pm/DefaultAppProvider;->getDefaultHome(I)Ljava/lang/String;
+HSPLcom/android/server/pm/DefaultAppProvider;->getRoleHolder(Ljava/lang/String;I)Ljava/lang/String;
 PLcom/android/server/pm/DefaultAppProvider;->setDefaultHome(Ljava/lang/String;ILjava/util/concurrent/Executor;Ljava/util/function/Consumer;)Z
 HSPLcom/android/server/pm/DefaultCrossProfileIntentFilter$Builder;-><init>(IIZ)V
 HSPLcom/android/server/pm/DefaultCrossProfileIntentFilter$Builder;->addAction(Ljava/lang/String;)Lcom/android/server/pm/DefaultCrossProfileIntentFilter$Builder;
@@ -35798,29 +37154,31 @@
 HSPLcom/android/server/pm/DefaultCrossProfileIntentFilter;-><init>(Lcom/android/server/pm/WatchedIntentFilter;IIZLcom/android/server/pm/DefaultCrossProfileIntentFilter-IA;)V
 HSPLcom/android/server/pm/DefaultCrossProfileIntentFiltersUtils;-><clinit>()V
 HSPLcom/android/server/pm/DefaultCrossProfileIntentFiltersUtils;->getDefaultManagedProfileFilters()Ljava/util/List;
-PLcom/android/server/pm/DeletePackageAction;-><init>(Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageRemovedInfo;ILandroid/os/UserHandle;)V
+HSPLcom/android/server/pm/DeletePackageAction;-><init>(Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageRemovedInfo;ILandroid/os/UserHandle;)V
 PLcom/android/server/pm/DeletePackageHelper$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/pm/DeletePackageHelper;Ljava/lang/String;IZZJII[ILandroid/content/pm/IPackageDeleteObserver2;Ljava/lang/String;)V
-PLcom/android/server/pm/DeletePackageHelper$$ExternalSyntheticLambda3;->run()V
+HPLcom/android/server/pm/DeletePackageHelper$$ExternalSyntheticLambda3;->run()V
 PLcom/android/server/pm/DeletePackageHelper$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/pm/DeletePackageHelper;Ljava/lang/String;I)V
 PLcom/android/server/pm/DeletePackageHelper$$ExternalSyntheticLambda4;->run()V
+PLcom/android/server/pm/DeletePackageHelper$TempUserState;-><init>(ILjava/lang/String;Z)V
+PLcom/android/server/pm/DeletePackageHelper$TempUserState;-><init>(ILjava/lang/String;ZLcom/android/server/pm/DeletePackageHelper$TempUserState-IA;)V
 PLcom/android/server/pm/DeletePackageHelper;->$r8$lambda$4tXX61MlYf7k5m8euysx_jXKewc(Lcom/android/server/pm/DeletePackageHelper;Ljava/lang/String;IZZJII[ILandroid/content/pm/IPackageDeleteObserver2;Ljava/lang/String;)V
 PLcom/android/server/pm/DeletePackageHelper;->$r8$lambda$6iF7LYyjGgf3Go3SuyLwgMFy-FE(Lcom/android/server/pm/DeletePackageHelper;Ljava/lang/String;I)V
 HSPLcom/android/server/pm/DeletePackageHelper;-><init>(Lcom/android/server/pm/PackageManagerService;)V
 HSPLcom/android/server/pm/DeletePackageHelper;-><init>(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/RemovePackageHelper;Lcom/android/server/pm/AppDataHelper;)V
 PLcom/android/server/pm/DeletePackageHelper;->clearPackageStateForUserLIF(Lcom/android/server/pm/PackageSetting;ILcom/android/server/pm/PackageRemovedInfo;I)V
-PLcom/android/server/pm/DeletePackageHelper;->deleteInstalledPackageLIF(Lcom/android/server/pm/PackageSetting;ZI[ILcom/android/server/pm/PackageRemovedInfo;Z)V
+HSPLcom/android/server/pm/DeletePackageHelper;->deleteInstalledPackageLIF(Lcom/android/server/pm/PackageSetting;ZI[ILcom/android/server/pm/PackageRemovedInfo;Z)V
 PLcom/android/server/pm/DeletePackageHelper;->deleteInstalledSystemPackage(Lcom/android/server/pm/DeletePackageAction;[IZ)V
-PLcom/android/server/pm/DeletePackageHelper;->deletePackageLIF(Ljava/lang/String;Landroid/os/UserHandle;Z[IILcom/android/server/pm/PackageRemovedInfo;Z)Z
+HSPLcom/android/server/pm/DeletePackageHelper;->deletePackageLIF(Ljava/lang/String;Landroid/os/UserHandle;Z[IILcom/android/server/pm/PackageRemovedInfo;Z)Z
 HPLcom/android/server/pm/DeletePackageHelper;->deletePackageVersionedInternal(Landroid/content/pm/VersionedPackage;Landroid/content/pm/IPackageDeleteObserver2;IIZ)V
-PLcom/android/server/pm/DeletePackageHelper;->deletePackageX(Ljava/lang/String;JIIZ)I
-PLcom/android/server/pm/DeletePackageHelper;->executeDeletePackageLIF(Lcom/android/server/pm/DeletePackageAction;Ljava/lang/String;Z[IZ)V
+HSPLcom/android/server/pm/DeletePackageHelper;->deletePackageX(Ljava/lang/String;JIIZ)I
+HSPLcom/android/server/pm/DeletePackageHelper;->executeDeletePackageLIF(Lcom/android/server/pm/DeletePackageAction;Ljava/lang/String;Z[IZ)V
 PLcom/android/server/pm/DeletePackageHelper;->getBlockUninstallForUsers(Lcom/android/server/pm/Computer;Ljava/lang/String;[I)[I
 PLcom/android/server/pm/DeletePackageHelper;->isCallerAllowedToSilentlyUninstall(Lcom/android/server/pm/Computer;ILjava/lang/String;)Z
 PLcom/android/server/pm/DeletePackageHelper;->isOrphaned(Lcom/android/server/pm/Computer;Ljava/lang/String;)Z
-PLcom/android/server/pm/DeletePackageHelper;->lambda$deletePackageVersionedInternal$3(Ljava/lang/String;IZZJII[ILandroid/content/pm/IPackageDeleteObserver2;Ljava/lang/String;)V
+HPLcom/android/server/pm/DeletePackageHelper;->lambda$deletePackageVersionedInternal$3(Ljava/lang/String;IZZJII[ILandroid/content/pm/IPackageDeleteObserver2;Ljava/lang/String;)V
 PLcom/android/server/pm/DeletePackageHelper;->lambda$removeUnusedPackagesLPw$4(Ljava/lang/String;I)V
 PLcom/android/server/pm/DeletePackageHelper;->markPackageUninstalledForUserLPw(Lcom/android/server/pm/PackageSetting;Landroid/os/UserHandle;)V
-PLcom/android/server/pm/DeletePackageHelper;->mayDeletePackageLocked(Lcom/android/server/pm/PackageRemovedInfo;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;ILandroid/os/UserHandle;)Lcom/android/server/pm/DeletePackageAction;
+HSPLcom/android/server/pm/DeletePackageHelper;->mayDeletePackageLocked(Lcom/android/server/pm/PackageRemovedInfo;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;ILandroid/os/UserHandle;)Lcom/android/server/pm/DeletePackageAction;
 PLcom/android/server/pm/DeletePackageHelper;->notifyPackageChangeObserversOnDelete(Ljava/lang/String;J)V
 PLcom/android/server/pm/DeletePackageHelper;->removeUnusedPackagesLPw(Lcom/android/server/pm/UserManagerService;I)V
 PLcom/android/server/pm/DexOptHelper$$ExternalSyntheticLambda0;-><init>()V
@@ -35845,7 +37203,7 @@
 PLcom/android/server/pm/DexOptHelper;->$r8$lambda$dfZjzx2LVHdhklscmpbfYFJEWjg(JLcom/android/server/pm/pkg/PackageStateInternal;)Z
 PLcom/android/server/pm/DexOptHelper;->$r8$lambda$dv3wsxhYhCRbspounRVc2lAHI6g(Lcom/android/server/pm/pkg/PackageStateInternal;)Z
 HSPLcom/android/server/pm/DexOptHelper;-><init>(Lcom/android/server/pm/PackageManagerService;)V
-PLcom/android/server/pm/DexOptHelper;->applyPackageFilter(Lcom/android/server/pm/Computer;Ljava/util/function/Predicate;Ljava/util/Collection;Ljava/util/Collection;Ljava/util/List;Lcom/android/server/pm/PackageManagerService;)V
+HPLcom/android/server/pm/DexOptHelper;->applyPackageFilter(Lcom/android/server/pm/Computer;Ljava/util/function/Predicate;Ljava/util/Collection;Ljava/util/Collection;Ljava/util/List;Lcom/android/server/pm/PackageManagerService;)V
 HSPLcom/android/server/pm/DexOptHelper;->checkAndDexOptSystemUi()V
 PLcom/android/server/pm/DexOptHelper;->controlDexOptBlocking(Z)V
 HSPLcom/android/server/pm/DexOptHelper;->getBcpApexes()Ljava/util/List;
@@ -35870,11 +37228,11 @@
 HSPLcom/android/server/pm/DexOptHelper;->performDexOptInternalWithDependenciesLI(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/dex/DexoptOptions;)I
 PLcom/android/server/pm/DexOptHelper;->performDexOptMode(Lcom/android/server/pm/Computer;Ljava/lang/String;ZLjava/lang/String;ZZLjava/lang/String;)Z
 HSPLcom/android/server/pm/DexOptHelper;->performDexOptTraced(Lcom/android/server/pm/dex/DexoptOptions;)I
-PLcom/android/server/pm/DexOptHelper;->performDexOptUpgrade(Ljava/util/List;ZIZ)[I
+HPLcom/android/server/pm/DexOptHelper;->performDexOptUpgrade(Ljava/util/List;ZIZ)[I
 HPLcom/android/server/pm/DexOptHelper;->performDexOptWithStatus(Lcom/android/server/pm/dex/DexoptOptions;)I
 HSPLcom/android/server/pm/DexOptHelper;->performPackageDexOptUpgradeIfNeeded()V
 PLcom/android/server/pm/DexOptHelper;->sortPackagesByUsageDate(Ljava/util/List;Lcom/android/server/pm/PackageManagerService;)V
-PLcom/android/server/pm/DistractingPackageHelper$$ExternalSyntheticLambda0;-><init>(Ljava/util/List;I)V
+HPLcom/android/server/pm/DistractingPackageHelper$$ExternalSyntheticLambda0;-><init>(Ljava/util/List;I)V
 HPLcom/android/server/pm/DistractingPackageHelper$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
 PLcom/android/server/pm/DistractingPackageHelper$$ExternalSyntheticLambda1;-><init>(Landroid/util/ArraySet;II)V
 PLcom/android/server/pm/DistractingPackageHelper$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
@@ -35925,7 +37283,7 @@
 PLcom/android/server/pm/DumpState;->setTargetPackageName(Ljava/lang/String;)V
 PLcom/android/server/pm/DumpState;->setTitlePrinted(Z)V
 PLcom/android/server/pm/DynamicCodeLoggingService$AuditWatchingThread;-><init>(Lcom/android/server/pm/DynamicCodeLoggingService;Landroid/app/job/JobParameters;)V
-HPLcom/android/server/pm/DynamicCodeLoggingService$AuditWatchingThread;->processAuditEvents()Z
+HPLcom/android/server/pm/DynamicCodeLoggingService$AuditWatchingThread;->processAuditEvents()Z+]Ljava/lang/String;Ljava/lang/String;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;]Ljava/util/regex/Pattern;Ljava/util/regex/Pattern;]Landroid/util/EventLog$Event;Landroid/util/EventLog$Event;
 PLcom/android/server/pm/DynamicCodeLoggingService$AuditWatchingThread;->run()V
 PLcom/android/server/pm/DynamicCodeLoggingService$IdleLoggingThread;-><init>(Lcom/android/server/pm/DynamicCodeLoggingService;Landroid/app/job/JobParameters;)V
 PLcom/android/server/pm/DynamicCodeLoggingService$IdleLoggingThread;->run()V
@@ -35946,7 +37304,7 @@
 HSPLcom/android/server/pm/FileInstallArgs;->cleanUpResourcesLI()V
 HSPLcom/android/server/pm/FileInstallArgs;->copyApk()I
 HSPLcom/android/server/pm/FileInstallArgs;->doCopyApk()I
-PLcom/android/server/pm/FileInstallArgs;->doPostDeleteLI(Z)Z
+HSPLcom/android/server/pm/FileInstallArgs;->doPostDeleteLI(Z)Z
 PLcom/android/server/pm/FileInstallArgs;->doPostInstall(II)I
 HSPLcom/android/server/pm/FileInstallArgs;->doPreInstall(I)I
 HSPLcom/android/server/pm/FileInstallArgs;->doRename(ILcom/android/server/pm/parsing/pkg/ParsedPackage;)Z
@@ -35959,6 +37317,7 @@
 HSPLcom/android/server/pm/HandlerParams;->setTraceMethod(Ljava/lang/String;)Lcom/android/server/pm/HandlerParams;
 HSPLcom/android/server/pm/HandlerParams;->startCopy()V
 HSPLcom/android/server/pm/IPackageManagerBase;-><init>(Lcom/android/server/pm/PackageManagerService;Landroid/content/Context;Lcom/android/server/pm/DexOptHelper;Lcom/android/server/pm/ModuleInfoProvider;Lcom/android/server/pm/PreferredActivityHelper;Lcom/android/server/pm/ResolveIntentHelper;Lcom/android/server/pm/verify/domain/DomainVerificationManagerInternal;Lcom/android/server/pm/DomainVerificationConnection;Lcom/android/server/pm/PackageInstallerService;Lcom/android/server/pm/PackageProperty;Landroid/content/ComponentName;Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+PLcom/android/server/pm/IPackageManagerBase;->activitySupportsIntent(Landroid/content/ComponentName;Landroid/content/Intent;Ljava/lang/String;)Z
 HPLcom/android/server/pm/IPackageManagerBase;->addCrossProfileIntentFilter(Landroid/content/IntentFilter;Ljava/lang/String;III)V
 PLcom/android/server/pm/IPackageManagerBase;->addPersistentPreferredActivity(Landroid/content/IntentFilter;Landroid/content/ComponentName;I)V
 PLcom/android/server/pm/IPackageManagerBase;->addPreferredActivity(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;IZ)V
@@ -35986,12 +37345,12 @@
 HSPLcom/android/server/pm/IPackageManagerBase;->getAttentionServicePackageName()Ljava/lang/String;
 HPLcom/android/server/pm/IPackageManagerBase;->getBlockUninstallForUser(Ljava/lang/String;I)Z+]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 HPLcom/android/server/pm/IPackageManagerBase;->getComponentEnabledSetting(Landroid/content/ComponentName;I)I+]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
-HPLcom/android/server/pm/IPackageManagerBase;->getDeclaredSharedLibraries(Ljava/lang/String;JI)Landroid/content/pm/ParceledListSlice;+]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
+HSPLcom/android/server/pm/IPackageManagerBase;->getDeclaredSharedLibraries(Ljava/lang/String;JI)Landroid/content/pm/ParceledListSlice;+]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 PLcom/android/server/pm/IPackageManagerBase;->getDefaultAppsBackup(I)[B
 HSPLcom/android/server/pm/IPackageManagerBase;->getDefaultTextClassifierPackageName()Ljava/lang/String;
 HSPLcom/android/server/pm/IPackageManagerBase;->getHarmfulAppWarning(Ljava/lang/String;I)Ljava/lang/CharSequence;
 HPLcom/android/server/pm/IPackageManagerBase;->getHomeActivities(Ljava/util/List;)Landroid/content/ComponentName;
-HPLcom/android/server/pm/IPackageManagerBase;->getInstallReason(Ljava/lang/String;I)I
+HPLcom/android/server/pm/IPackageManagerBase;->getInstallReason(Ljava/lang/String;I)I+]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/IPackageManagerBase;->getInstallSourceInfo(Ljava/lang/String;)Landroid/content/pm/InstallSourceInfo;+]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/IPackageManagerBase;->getInstalledApplications(JI)Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/pm/IPackageManagerBase;->getInstalledModules(I)Ljava/util/List;
@@ -36003,7 +37362,7 @@
 PLcom/android/server/pm/IPackageManagerBase;->getIntentFilterVerifications(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/pm/IPackageManagerBase;->getModuleInfo(Ljava/lang/String;I)Landroid/content/pm/ModuleInfo;
 HSPLcom/android/server/pm/IPackageManagerBase;->getNameForUid(I)Ljava/lang/String;+]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
-HSPLcom/android/server/pm/IPackageManagerBase;->getPackageGids(Ljava/lang/String;JI)[I
+HSPLcom/android/server/pm/IPackageManagerBase;->getPackageGids(Ljava/lang/String;JI)[I+]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/IPackageManagerBase;->getPackageInfo(Ljava/lang/String;JI)Landroid/content/pm/PackageInfo;+]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 PLcom/android/server/pm/IPackageManagerBase;->getPackageInfoVersioned(Landroid/content/pm/VersionedPackage;JI)Landroid/content/pm/PackageInfo;
 HSPLcom/android/server/pm/IPackageManagerBase;->getPackageInstaller()Landroid/content/pm/IPackageInstaller;
@@ -36011,7 +37370,7 @@
 HSPLcom/android/server/pm/IPackageManagerBase;->getPackagesForUid(I)[Ljava/lang/String;+]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;
 HSPLcom/android/server/pm/IPackageManagerBase;->getPackagesHoldingPermissions([Ljava/lang/String;JI)Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/pm/IPackageManagerBase;->getPersistentApplications(I)Landroid/content/pm/ParceledListSlice;
-PLcom/android/server/pm/IPackageManagerBase;->getPreferredActivities(Ljava/util/List;Ljava/util/List;Ljava/lang/String;)I
+HPLcom/android/server/pm/IPackageManagerBase;->getPreferredActivities(Ljava/util/List;Ljava/util/List;Ljava/lang/String;)I
 PLcom/android/server/pm/IPackageManagerBase;->getPreferredActivityBackup(I)[B
 HPLcom/android/server/pm/IPackageManagerBase;->getProperty(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/content/pm/PackageManager$Property;+]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/pm/PackageProperty;Lcom/android/server/pm/PackageProperty;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/IPackageManagerBase;->getProviderInfo(Landroid/content/ComponentName;JI)Landroid/content/pm/ProviderInfo;
@@ -36023,20 +37382,20 @@
 PLcom/android/server/pm/IPackageManagerBase;->getSharedLibraries(Ljava/lang/String;JI)Landroid/content/pm/ParceledListSlice;
 PLcom/android/server/pm/IPackageManagerBase;->getSharedSystemSharedLibraryPackageName()Ljava/lang/String;
 HSPLcom/android/server/pm/IPackageManagerBase;->getSystemCaptionsServicePackageName()Ljava/lang/String;
-PLcom/android/server/pm/IPackageManagerBase;->getSystemSharedLibraryNames()[Ljava/lang/String;
+HPLcom/android/server/pm/IPackageManagerBase;->getSystemSharedLibraryNames()[Ljava/lang/String;
 HSPLcom/android/server/pm/IPackageManagerBase;->getSystemTextClassifierPackageName()Ljava/lang/String;
 HSPLcom/android/server/pm/IPackageManagerBase;->getTargetSdkVersion(Ljava/lang/String;)I+]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 PLcom/android/server/pm/IPackageManagerBase;->getWellbeingPackageName()Ljava/lang/String;
-HPLcom/android/server/pm/IPackageManagerBase;->hasSigningCertificate(Ljava/lang/String;[BI)Z+]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
+HSPLcom/android/server/pm/IPackageManagerBase;->hasSigningCertificate(Ljava/lang/String;[BI)Z+]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/IPackageManagerBase;->hasSystemFeature(Ljava/lang/String;I)Z+]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;
-PLcom/android/server/pm/IPackageManagerBase;->hasSystemUidErrors()Z
+HSPLcom/android/server/pm/IPackageManagerBase;->hasSystemUidErrors()Z
 HSPLcom/android/server/pm/IPackageManagerBase;->isDeviceUpgrading()Z
 PLcom/android/server/pm/IPackageManagerBase;->isFirstBoot()Z
 HPLcom/android/server/pm/IPackageManagerBase;->isInstantApp(Ljava/lang/String;I)Z+]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/IPackageManagerBase;->isOnlyCoreApps()Z
 HSPLcom/android/server/pm/IPackageManagerBase;->isPackageAvailable(Ljava/lang/String;I)Z+]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 PLcom/android/server/pm/IPackageManagerBase;->isPackageDeviceAdminOnAnyUser(Ljava/lang/String;)Z
-HPLcom/android/server/pm/IPackageManagerBase;->isPackageSuspendedForUser(Ljava/lang/String;I)Z+]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
+HSPLcom/android/server/pm/IPackageManagerBase;->isPackageSuspendedForUser(Ljava/lang/String;I)Z+]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/IPackageManagerBase;->isSafeMode()Z
 HPLcom/android/server/pm/IPackageManagerBase;->isUidPrivileged(I)Z
 PLcom/android/server/pm/IPackageManagerBase;->performDexOptMode(Ljava/lang/String;ZLjava/lang/String;ZZLjava/lang/String;)Z
@@ -36047,7 +37406,7 @@
 HPLcom/android/server/pm/IPackageManagerBase;->queryIntentContentProviders(Landroid/content/Intent;Ljava/lang/String;JI)Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/pm/IPackageManagerBase;->queryIntentReceivers(Landroid/content/Intent;Ljava/lang/String;JI)Landroid/content/pm/ParceledListSlice;+]Lcom/android/server/pm/ResolveIntentHelper;Lcom/android/server/pm/ResolveIntentHelper;]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;
 HSPLcom/android/server/pm/IPackageManagerBase;->queryIntentServices(Landroid/content/Intent;Ljava/lang/String;JI)Landroid/content/pm/ParceledListSlice;+]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
-HPLcom/android/server/pm/IPackageManagerBase;->replacePreferredActivity(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;I)V+]Lcom/android/server/pm/PreferredActivityHelper;Lcom/android/server/pm/PreferredActivityHelper;]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;
+HSPLcom/android/server/pm/IPackageManagerBase;->replacePreferredActivity(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;I)V+]Lcom/android/server/pm/PreferredActivityHelper;Lcom/android/server/pm/PreferredActivityHelper;]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;
 HSPLcom/android/server/pm/IPackageManagerBase;->resolveContentProvider(Ljava/lang/String;JI)Landroid/content/pm/ProviderInfo;+]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/IPackageManagerBase;->resolveIntent(Landroid/content/Intent;Ljava/lang/String;JI)Landroid/content/pm/ResolveInfo;+]Lcom/android/server/pm/ResolveIntentHelper;Lcom/android/server/pm/ResolveIntentHelper;]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;
 HSPLcom/android/server/pm/IPackageManagerBase;->resolveService(Landroid/content/Intent;Ljava/lang/String;JI)Landroid/content/pm/ResolveInfo;+]Lcom/android/server/pm/ResolveIntentHelper;Lcom/android/server/pm/ResolveIntentHelper;]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;
@@ -36114,6 +37473,7 @@
 PLcom/android/server/pm/InstallPackageHelper;->disableSystemPackageLPw(Lcom/android/server/pm/parsing/pkg/AndroidPackage;)Z
 PLcom/android/server/pm/InstallPackageHelper;->doesSignatureMatchForPermissions(Ljava/lang/String;Lcom/android/server/pm/parsing/pkg/ParsedPackage;I)Z
 PLcom/android/server/pm/InstallPackageHelper;->enableCompressedPackage(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/PackageSetting;)Z
+PLcom/android/server/pm/InstallPackageHelper;->enableRestrictedSettings(Ljava/lang/String;I)V
 HPLcom/android/server/pm/InstallPackageHelper;->executePostCommitSteps(Lcom/android/server/pm/CommitRequest;)V
 HSPLcom/android/server/pm/InstallPackageHelper;->freezePackageForInstall(Ljava/lang/String;IILjava/lang/String;)Lcom/android/server/pm/PackageFreezer;
 HSPLcom/android/server/pm/InstallPackageHelper;->freezePackageForInstall(Ljava/lang/String;ILjava/lang/String;)Lcom/android/server/pm/PackageFreezer;
@@ -36132,11 +37492,11 @@
 PLcom/android/server/pm/InstallPackageHelper;->lambda$installExistingPackageAsUser$0(Ljava/lang/String;ILandroid/content/IntentSender;Lcom/android/server/pm/PackageInstalledInfo;)V
 PLcom/android/server/pm/InstallPackageHelper;->lambda$processInstallRequests$1(Ljava/util/List;)V
 HSPLcom/android/server/pm/InstallPackageHelper;->maybeClearProfilesForUpgradesLI(Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/parsing/pkg/AndroidPackage;)V
-PLcom/android/server/pm/InstallPackageHelper;->notifyPackageChangeObserversOnUpdate(Lcom/android/server/pm/ReconciledPackage;)V
+HPLcom/android/server/pm/InstallPackageHelper;->notifyPackageChangeObserversOnUpdate(Lcom/android/server/pm/ReconciledPackage;)V
 PLcom/android/server/pm/InstallPackageHelper;->onRestoreComplete(ILandroid/content/Context;Landroid/content/IntentSender;)V
 HSPLcom/android/server/pm/InstallPackageHelper;->optimisticallyRegisterAppId(Lcom/android/server/pm/ScanResult;)Z
 PLcom/android/server/pm/InstallPackageHelper;->performBackupManagerRestore(IILcom/android/server/pm/PackageInstalledInfo;)Z
-PLcom/android/server/pm/InstallPackageHelper;->performRollbackManagerRestore(IILcom/android/server/pm/PackageInstalledInfo;Lcom/android/server/pm/PostInstallData;)Z
+HPLcom/android/server/pm/InstallPackageHelper;->performRollbackManagerRestore(IILcom/android/server/pm/PackageInstalledInfo;Lcom/android/server/pm/PostInstallData;)Z
 HSPLcom/android/server/pm/InstallPackageHelper;->prepareInitialScanRequest(Lcom/android/server/pm/parsing/pkg/ParsedPackage;IILandroid/os/UserHandle;Ljava/lang/String;)Lcom/android/server/pm/ScanRequest;
 HSPLcom/android/server/pm/InstallPackageHelper;->preparePackageLI(Lcom/android/server/pm/InstallArgs;Lcom/android/server/pm/PackageInstalledInfo;)Lcom/android/server/pm/PrepareResult;
 HSPLcom/android/server/pm/InstallPackageHelper;->prepareSystemPackageCleanUp(Lcom/android/server/utils/WatchedArrayMap;Ljava/util/List;Landroid/util/ArrayMap;[I)V
@@ -36168,7 +37528,7 @@
 HSPLcom/android/server/pm/InstallParams;->fixUpInstallReason(Ljava/lang/String;II)I
 HSPLcom/android/server/pm/InstallParams;->handleReturnCode()V
 HSPLcom/android/server/pm/InstallParams;->handleStartCopy()V
-PLcom/android/server/pm/InstallParams;->installStage()V
+HPLcom/android/server/pm/InstallParams;->installStage()V
 HSPLcom/android/server/pm/InstallParams;->installStage(Ljava/util/List;)V
 HSPLcom/android/server/pm/InstallParams;->lambda$processInstallRequestsAsync$0(ZLjava/util/List;)V
 HSPLcom/android/server/pm/InstallParams;->overrideInstallLocation(Ljava/lang/String;II)I
@@ -36181,6 +37541,7 @@
 HSPLcom/android/server/pm/InstallSource;->create(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IZZ)Lcom/android/server/pm/InstallSource;
 HSPLcom/android/server/pm/InstallSource;->createInternal(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IZZLcom/android/server/pm/PackageSignatures;)Lcom/android/server/pm/InstallSource;
 HSPLcom/android/server/pm/InstallSource;->intern(Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/pm/InstallSource;->removeInstallerPackage(Ljava/lang/String;)Lcom/android/server/pm/InstallSource;
 HSPLcom/android/server/pm/InstallSource;->setInitiatingPackageSignatures(Lcom/android/server/pm/PackageSignatures;)Lcom/android/server/pm/InstallSource;
 HSPLcom/android/server/pm/InstallSource;->setIsOrphaned(Z)Lcom/android/server/pm/InstallSource;
 HSPLcom/android/server/pm/Installer$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/pm/Installer;)V
@@ -36195,7 +37556,7 @@
 HSPLcom/android/server/pm/Installer;->buildCreateAppDataArgs(Ljava/lang/String;Ljava/lang/String;IIILjava/lang/String;IZ)Landroid/os/CreateAppDataArgs;
 HSPLcom/android/server/pm/Installer;->checkBeforeRemote()Z+]Ljava/util/concurrent/CountDownLatch;Ljava/util/concurrent/CountDownLatch;
 HSPLcom/android/server/pm/Installer;->cleanupInvalidPackageDirs(Ljava/lang/String;II)V
-PLcom/android/server/pm/Installer;->clearAppData(Ljava/lang/String;Ljava/lang/String;IIJ)V
+HPLcom/android/server/pm/Installer;->clearAppData(Ljava/lang/String;Ljava/lang/String;IIJ)V
 HSPLcom/android/server/pm/Installer;->clearAppProfiles(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/pm/Installer;->connect()V
 PLcom/android/server/pm/Installer;->controlDexOptBlocking(Z)V
@@ -36205,7 +37566,7 @@
 PLcom/android/server/pm/Installer;->createOatDir(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/pm/Installer;->createProfileSnapshot(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
 PLcom/android/server/pm/Installer;->createUserData(Ljava/lang/String;III)V
-PLcom/android/server/pm/Installer;->deleteOdex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)J
+HPLcom/android/server/pm/Installer;->deleteOdex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)J
 PLcom/android/server/pm/Installer;->deleteReferenceProfile(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/pm/Installer;->destroyAppData(Ljava/lang/String;Ljava/lang/String;IIJ)V
 PLcom/android/server/pm/Installer;->destroyAppDataSnapshot(Ljava/lang/String;III)Z
@@ -36216,8 +37577,8 @@
 HSPLcom/android/server/pm/Installer;->dexopt(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
 HSPLcom/android/server/pm/Installer;->executeDeferredActions()V
 HSPLcom/android/server/pm/Installer;->fixupAppData(Ljava/lang/String;I)V
-PLcom/android/server/pm/Installer;->freeCache(Ljava/lang/String;JI)V
-HPLcom/android/server/pm/Installer;->getAppSize(Ljava/lang/String;[Ljava/lang/String;III[J[Ljava/lang/String;Landroid/content/pm/PackageStats;)V+]Landroid/os/IInstalld;Landroid/os/IInstalld$Stub$Proxy;]Lcom/android/server/pm/Installer;Lcom/android/server/pm/Installer;]Ldalvik/system/BlockGuard$VmPolicy;Ldalvik/system/BlockGuard$2;,Landroid/os/StrictMode$5;
+HPLcom/android/server/pm/Installer;->freeCache(Ljava/lang/String;JI)V
+HPLcom/android/server/pm/Installer;->getAppSize(Ljava/lang/String;[Ljava/lang/String;III[J[Ljava/lang/String;Landroid/content/pm/PackageStats;)V+]Landroid/os/IInstalld;Landroid/os/IInstalld$Stub$Proxy;]Lcom/android/server/pm/Installer;Lcom/android/server/pm/Installer;]Ldalvik/system/BlockGuard$VmPolicy;Landroid/os/StrictMode$5;,Ldalvik/system/BlockGuard$2;
 PLcom/android/server/pm/Installer;->getExternalSize(Ljava/lang/String;II[I)[J
 HSPLcom/android/server/pm/Installer;->getOdexVisibility(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
 HPLcom/android/server/pm/Installer;->getUserSize(Ljava/lang/String;II[ILandroid/content/pm/PackageStats;)V
@@ -36227,7 +37588,7 @@
 HPLcom/android/server/pm/Installer;->linkFile(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/pm/Installer;->linkNativeLibraryDirectory(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
 HPLcom/android/server/pm/Installer;->mergeProfiles(ILjava/lang/String;Ljava/lang/String;)I
-PLcom/android/server/pm/Installer;->moveAb(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/pm/Installer;->moveAb(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/pm/Installer;->onStart()V
 HPLcom/android/server/pm/Installer;->prepareAppProfile(Ljava/lang/String;IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
 HPLcom/android/server/pm/Installer;->reconcileSecondaryDexFile(Ljava/lang/String;Ljava/lang/String;I[Ljava/lang/String;Ljava/lang/String;I)Z
@@ -36237,32 +37598,39 @@
 HSPLcom/android/server/pm/Installer;->setWarnIfHeld(Ljava/lang/Object;)V
 PLcom/android/server/pm/Installer;->snapshotAppData(Ljava/lang/String;III)Z
 PLcom/android/server/pm/InstantAppRegistry$$ExternalSyntheticLambda0;-><init>(Ljava/lang/String;)V
+PLcom/android/server/pm/InstantAppRegistry$$ExternalSyntheticLambda1;-><init>(Landroid/util/ArrayMap;)V
 PLcom/android/server/pm/InstantAppRegistry$$ExternalSyntheticLambda2;-><init>(J)V
+PLcom/android/server/pm/InstantAppRegistry$$ExternalSyntheticLambda2;->test(Ljava/lang/Object;)Z
 PLcom/android/server/pm/InstantAppRegistry$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/pm/parsing/pkg/AndroidPackage;)V
+PLcom/android/server/pm/InstantAppRegistry$$ExternalSyntheticLambda3;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/pm/InstantAppRegistry$1;-><init>(Lcom/android/server/pm/InstantAppRegistry;)V
 HSPLcom/android/server/pm/InstantAppRegistry$1;->onChange(Lcom/android/server/utils/Watchable;)V
 HSPLcom/android/server/pm/InstantAppRegistry$2;-><init>(Lcom/android/server/pm/InstantAppRegistry;Lcom/android/server/pm/InstantAppRegistry;Lcom/android/server/utils/Watchable;)V
 HSPLcom/android/server/pm/InstantAppRegistry$2;->createSnapshot()Lcom/android/server/pm/InstantAppRegistry;
 HSPLcom/android/server/pm/InstantAppRegistry$2;->createSnapshot()Ljava/lang/Object;
 HSPLcom/android/server/pm/InstantAppRegistry$CookiePersistence;-><init>(Lcom/android/server/pm/InstantAppRegistry;Landroid/os/Looper;)V
-PLcom/android/server/pm/InstantAppRegistry$CookiePersistence;->cancelPendingPersistLPw(Lcom/android/server/pm/parsing/pkg/AndroidPackage;I)V
+HSPLcom/android/server/pm/InstantAppRegistry$CookiePersistence;->cancelPendingPersistLPw(Lcom/android/server/pm/parsing/pkg/AndroidPackage;I)V
 PLcom/android/server/pm/InstantAppRegistry$CookiePersistence;->getPendingPersistCookieLPr(Lcom/android/server/pm/parsing/pkg/AndroidPackage;I)[B
-PLcom/android/server/pm/InstantAppRegistry$CookiePersistence;->removePendingPersistCookieLPr(Lcom/android/server/pm/parsing/pkg/AndroidPackage;I)Lcom/android/internal/os/SomeArgs;
+HSPLcom/android/server/pm/InstantAppRegistry$CookiePersistence;->removePendingPersistCookieLPr(Lcom/android/server/pm/parsing/pkg/AndroidPackage;I)Lcom/android/internal/os/SomeArgs;
+PLcom/android/server/pm/InstantAppRegistry$UninstalledInstantAppState;-><init>(Landroid/content/pm/InstantAppInfo;J)V
+PLcom/android/server/pm/InstantAppRegistry;->$r8$lambda$YG8XBnqw2dfkOcFqEmUkKMV9lyg(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/InstantAppRegistry$UninstalledInstantAppState;)Z
+PLcom/android/server/pm/InstantAppRegistry;->$r8$lambda$kpTTC06QAMxHJkyob9iBOOpDO_I(JLcom/android/server/pm/InstantAppRegistry$UninstalledInstantAppState;)Z
 HSPLcom/android/server/pm/InstantAppRegistry;->-$$Nest$fgetmWatchable(Lcom/android/server/pm/InstantAppRegistry;)Lcom/android/server/utils/WatchableImpl;
 HSPLcom/android/server/pm/InstantAppRegistry;->-$$Nest$monChanged(Lcom/android/server/pm/InstantAppRegistry;)V
 HSPLcom/android/server/pm/InstantAppRegistry;-><init>(Landroid/content/Context;Lcom/android/server/pm/permission/PermissionManagerServiceInternal;Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/DeletePackageHelper;)V
 HSPLcom/android/server/pm/InstantAppRegistry;-><init>(Lcom/android/server/pm/InstantAppRegistry;)V
 HSPLcom/android/server/pm/InstantAppRegistry;-><init>(Lcom/android/server/pm/InstantAppRegistry;Lcom/android/server/pm/InstantAppRegistry-IA;)V
 HSPLcom/android/server/pm/InstantAppRegistry;->addInstantApp(II)V
+PLcom/android/server/pm/InstantAppRegistry;->addUninstalledInstantAppLPw(Lcom/android/server/pm/pkg/PackageStateInternal;I)V
 PLcom/android/server/pm/InstantAppRegistry;->createInstantAppInfoForPackage(Lcom/android/server/pm/pkg/PackageStateInternal;IZ)Landroid/content/pm/InstantAppInfo;
-PLcom/android/server/pm/InstantAppRegistry;->deleteDir(Ljava/io/File;)V
+HSPLcom/android/server/pm/InstantAppRegistry;->deleteDir(Ljava/io/File;)V
 PLcom/android/server/pm/InstantAppRegistry;->deleteInstantApplicationMetadata(Ljava/lang/String;I)V
 HSPLcom/android/server/pm/InstantAppRegistry;->dispatchChange(Lcom/android/server/utils/Watchable;)V
 PLcom/android/server/pm/InstantAppRegistry;->getInstalledInstantApplications(Lcom/android/server/pm/Computer;I)Ljava/util/List;
 PLcom/android/server/pm/InstantAppRegistry;->getInstantAppAndroidId(Ljava/lang/String;I)Ljava/lang/String;
 PLcom/android/server/pm/InstantAppRegistry;->getInstantAppCookie(Lcom/android/server/pm/parsing/pkg/AndroidPackage;I)[B
-PLcom/android/server/pm/InstantAppRegistry;->getInstantApplicationDir(Ljava/lang/String;I)Ljava/io/File;
-PLcom/android/server/pm/InstantAppRegistry;->getInstantApplicationsDir(I)Ljava/io/File;
+HSPLcom/android/server/pm/InstantAppRegistry;->getInstantApplicationDir(Ljava/lang/String;I)Ljava/io/File;
+HSPLcom/android/server/pm/InstantAppRegistry;->getInstantApplicationsDir(I)Ljava/io/File;
 PLcom/android/server/pm/InstantAppRegistry;->getInstantApps(Lcom/android/server/pm/Computer;I)Ljava/util/List;
 PLcom/android/server/pm/InstantAppRegistry;->getUninstalledInstantAppStates(I)Ljava/util/List;
 PLcom/android/server/pm/InstantAppRegistry;->getUninstalledInstantApplications(Lcom/android/server/pm/Computer;I)Ljava/util/List;
@@ -36272,12 +37640,17 @@
 PLcom/android/server/pm/InstantAppRegistry;->hasUninstalledInstantAppState(Ljava/lang/String;I)Z
 HPLcom/android/server/pm/InstantAppRegistry;->isInstantAccessGranted(III)Z
 HSPLcom/android/server/pm/InstantAppRegistry;->isRegisteredObserver(Lcom/android/server/utils/Watcher;)Z
+PLcom/android/server/pm/InstantAppRegistry;->lambda$onPackageInstalled$0(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/InstantAppRegistry$UninstalledInstantAppState;)Z
+PLcom/android/server/pm/InstantAppRegistry;->lambda$pruneInstantApps$3(JLcom/android/server/pm/InstantAppRegistry$UninstalledInstantAppState;)Z
 HSPLcom/android/server/pm/InstantAppRegistry;->makeCache()Lcom/android/server/utils/SnapshotCache;
 HSPLcom/android/server/pm/InstantAppRegistry;->onChanged()V
 HPLcom/android/server/pm/InstantAppRegistry;->onPackageInstalled(Lcom/android/server/pm/Computer;Ljava/lang/String;[I)V
-PLcom/android/server/pm/InstantAppRegistry;->onPackageUninstalled(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/PackageSetting;[IZ)V
+HSPLcom/android/server/pm/InstantAppRegistry;->onPackageUninstalled(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/PackageSetting;[IZ)V
 PLcom/android/server/pm/InstantAppRegistry;->onUserRemoved(I)V
+PLcom/android/server/pm/InstantAppRegistry;->parseMetadata(Landroid/util/TypedXmlPullParser;Ljava/lang/String;)Landroid/content/pm/InstantAppInfo;
 PLcom/android/server/pm/InstantAppRegistry;->parseMetadataFile(Ljava/io/File;)Lcom/android/server/pm/InstantAppRegistry$UninstalledInstantAppState;
+PLcom/android/server/pm/InstantAppRegistry;->parsePackage(Landroid/util/TypedXmlPullParser;Ljava/lang/String;)Landroid/content/pm/InstantAppInfo;
+PLcom/android/server/pm/InstantAppRegistry;->parsePermissions(Landroid/util/TypedXmlPullParser;Ljava/util/List;Ljava/util/List;)V
 PLcom/android/server/pm/InstantAppRegistry;->peekInstantCookieFile(Ljava/lang/String;I)Ljava/io/File;
 PLcom/android/server/pm/InstantAppRegistry;->peekOrParseUninstalledInstantAppInfo(Ljava/lang/String;I)Landroid/content/pm/InstantAppInfo;
 PLcom/android/server/pm/InstantAppRegistry;->propagateInstantAppPermissionsIfNeeded(Lcom/android/server/pm/parsing/pkg/AndroidPackage;I)V
@@ -36286,16 +37659,19 @@
 HPLcom/android/server/pm/InstantAppRegistry;->pruneInstantApps(Lcom/android/server/pm/Computer;JJJ)Z+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/io/File;Ljava/io/File;]Lcom/android/server/pm/InstantAppRegistry;Lcom/android/server/pm/InstantAppRegistry;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Landroid/os/storage/StorageManager;Landroid/os/storage/StorageManager;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Lcom/android/server/pm/pkg/PackageStateUnserialized;Lcom/android/server/pm/pkg/PackageStateUnserialized;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 PLcom/android/server/pm/InstantAppRegistry;->pruneUninstalledInstantApps(Lcom/android/server/pm/Computer;JJ)Z
 HSPLcom/android/server/pm/InstantAppRegistry;->registerObserver(Lcom/android/server/utils/Watcher;)V
-PLcom/android/server/pm/InstantAppRegistry;->removeAppLPw(II)V
-PLcom/android/server/pm/InstantAppRegistry;->removeUninstalledInstantAppStateLPw(Ljava/util/function/Predicate;I)V
+HSPLcom/android/server/pm/InstantAppRegistry;->removeAppLPw(II)V
+PLcom/android/server/pm/InstantAppRegistry;->removeInstantAppLPw(II)V
+HPLcom/android/server/pm/InstantAppRegistry;->removeUninstalledInstantAppStateLPw(Ljava/util/function/Predicate;I)V
 HSPLcom/android/server/pm/InstantAppRegistry;->snapshot()Lcom/android/server/pm/InstantAppRegistry;
+PLcom/android/server/pm/InstantAppRegistry;->writeInstantApplicationIconLPw(Lcom/android/server/pm/parsing/pkg/AndroidPackage;I)V
+PLcom/android/server/pm/InstantAppRegistry;->writeUninstalledInstantAppMetadata(Landroid/content/pm/InstantAppInfo;I)V
 PLcom/android/server/pm/InstantAppResolver;-><clinit>()V
 PLcom/android/server/pm/InstantAppResolver;->buildEphemeralInstallerIntent(Landroid/content/Intent;Landroid/content/Intent;Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;Ljava/lang/String;ILandroid/content/ComponentName;Ljava/lang/String;ZLjava/util/List;)Landroid/content/Intent;
 HPLcom/android/server/pm/InstantAppResolver;->buildRequestInfo(Landroid/content/pm/InstantAppRequest;)Landroid/content/pm/InstantAppRequestInfo;
 PLcom/android/server/pm/InstantAppResolver;->computeResolveFilters(Lcom/android/server/pm/Computer;Lcom/android/server/pm/UserManagerService;Landroid/content/Intent;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Landroid/content/pm/InstantAppResolveInfo;)Ljava/util/List;
 PLcom/android/server/pm/InstantAppResolver;->createFailureIntent(Landroid/content/Intent;Ljava/lang/String;)Landroid/content/Intent;
 HPLcom/android/server/pm/InstantAppResolver;->doInstantAppResolutionPhaseOne(Lcom/android/server/pm/Computer;Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/InstantAppResolverConnection;Landroid/content/pm/InstantAppRequest;)Landroid/content/pm/AuxiliaryResolveInfo;
-PLcom/android/server/pm/InstantAppResolver;->filterInstantAppIntent(Lcom/android/server/pm/Computer;Lcom/android/server/pm/UserManagerService;Ljava/util/List;Landroid/content/Intent;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;[I)Landroid/content/pm/AuxiliaryResolveInfo;
+HPLcom/android/server/pm/InstantAppResolver;->filterInstantAppIntent(Lcom/android/server/pm/Computer;Lcom/android/server/pm/UserManagerService;Ljava/util/List;Landroid/content/Intent;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;[I)Landroid/content/pm/AuxiliaryResolveInfo;
 PLcom/android/server/pm/InstantAppResolver;->getLogger()Lcom/android/internal/logging/MetricsLogger;
 PLcom/android/server/pm/InstantAppResolver;->logMetrics(IJLjava/lang/String;I)V
 HPLcom/android/server/pm/InstantAppResolver;->parseDigest(Landroid/content/Intent;)Landroid/content/pm/InstantAppResolveInfo$InstantAppDigest;
@@ -36306,12 +37682,12 @@
 HSPLcom/android/server/pm/InstantAppResolverConnection$GetInstantAppResolveInfoCaller$1;-><init>(Lcom/android/server/pm/InstantAppResolverConnection$GetInstantAppResolveInfoCaller;)V
 HPLcom/android/server/pm/InstantAppResolverConnection$GetInstantAppResolveInfoCaller$1;->sendResult(Landroid/os/Bundle;)V
 HSPLcom/android/server/pm/InstantAppResolverConnection$GetInstantAppResolveInfoCaller;-><init>()V
-PLcom/android/server/pm/InstantAppResolverConnection$GetInstantAppResolveInfoCaller;->access$000(Lcom/android/server/pm/InstantAppResolverConnection$GetInstantAppResolveInfoCaller;Ljava/lang/Object;I)V
+HPLcom/android/server/pm/InstantAppResolverConnection$GetInstantAppResolveInfoCaller;->access$000(Lcom/android/server/pm/InstantAppResolverConnection$GetInstantAppResolveInfoCaller;Ljava/lang/Object;I)V
 HPLcom/android/server/pm/InstantAppResolverConnection$GetInstantAppResolveInfoCaller;->getInstantAppResolveInfoList(Landroid/app/IInstantAppResolver;Landroid/content/pm/InstantAppRequestInfo;)Ljava/util/List;
 HSPLcom/android/server/pm/InstantAppResolverConnection$MyServiceConnection;-><init>(Lcom/android/server/pm/InstantAppResolverConnection;)V
 HSPLcom/android/server/pm/InstantAppResolverConnection$MyServiceConnection;-><init>(Lcom/android/server/pm/InstantAppResolverConnection;Lcom/android/server/pm/InstantAppResolverConnection$MyServiceConnection-IA;)V
-PLcom/android/server/pm/InstantAppResolverConnection$MyServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
-PLcom/android/server/pm/InstantAppResolverConnection$MyServiceConnection;->onServiceDisconnected(Landroid/content/ComponentName;)V
+HPLcom/android/server/pm/InstantAppResolverConnection$MyServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HPLcom/android/server/pm/InstantAppResolverConnection$MyServiceConnection;->onServiceDisconnected(Landroid/content/ComponentName;)V
 PLcom/android/server/pm/InstantAppResolverConnection;->$r8$lambda$JBm5_EVTrfafQJpmYxi5cuBdFsA(Lcom/android/server/pm/InstantAppResolverConnection;)V
 PLcom/android/server/pm/InstantAppResolverConnection;->-$$Nest$fgetmBindState(Lcom/android/server/pm/InstantAppResolverConnection;)I
 PLcom/android/server/pm/InstantAppResolverConnection;->-$$Nest$fgetmLock(Lcom/android/server/pm/InstantAppResolverConnection;)Ljava/lang/Object;
@@ -36323,14 +37699,14 @@
 HSPLcom/android/server/pm/InstantAppResolverConnection;-><clinit>()V
 HSPLcom/android/server/pm/InstantAppResolverConnection;-><init>(Landroid/content/Context;Landroid/content/ComponentName;Ljava/lang/String;)V
 HPLcom/android/server/pm/InstantAppResolverConnection;->bind(Ljava/lang/String;)Landroid/app/IInstantAppResolver;
-PLcom/android/server/pm/InstantAppResolverConnection;->binderDied()V
+HPLcom/android/server/pm/InstantAppResolverConnection;->binderDied()V
 HPLcom/android/server/pm/InstantAppResolverConnection;->getInstantAppResolveInfoList(Landroid/content/pm/InstantAppRequestInfo;)Ljava/util/List;
 HPLcom/android/server/pm/InstantAppResolverConnection;->getRemoteInstanceLazy(Ljava/lang/String;)Landroid/app/IInstantAppResolver;
-PLcom/android/server/pm/InstantAppResolverConnection;->handleBinderDiedLocked()V
+HPLcom/android/server/pm/InstantAppResolverConnection;->handleBinderDiedLocked()V
 PLcom/android/server/pm/InstantAppResolverConnection;->lambda$optimisticBind$0()V
-PLcom/android/server/pm/InstantAppResolverConnection;->optimisticBind()V
+HPLcom/android/server/pm/InstantAppResolverConnection;->optimisticBind()V
 HPLcom/android/server/pm/InstantAppResolverConnection;->throwIfCalledOnMainThread()V
-PLcom/android/server/pm/InstantAppResolverConnection;->waitForBindLocked(Ljava/lang/String;)V
+HPLcom/android/server/pm/InstantAppResolverConnection;->waitForBindLocked(Ljava/lang/String;)V
 HSPLcom/android/server/pm/InstructionSets;-><clinit>()V
 PLcom/android/server/pm/InstructionSets;->getAllDexCodeInstructionSets()[Ljava/lang/String;
 HSPLcom/android/server/pm/InstructionSets;->getAppDexInstructionSets(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
@@ -36378,7 +37754,7 @@
 HSPLcom/android/server/pm/KeySetManagerService;->shouldCheckUpgradeKeySetLocked(Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/pkg/SharedUserApi;I)Z
 HSPLcom/android/server/pm/KeySetManagerService;->writeKeySetManagerServiceLPr(Landroid/util/TypedXmlSerializer;)V
 HSPLcom/android/server/pm/KeySetManagerService;->writeKeySetsLPr(Landroid/util/TypedXmlSerializer;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/lang/Long;Ljava/lang/Long;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
-HSPLcom/android/server/pm/KeySetManagerService;->writePublicKeysLPr(Landroid/util/TypedXmlSerializer;)V
+HSPLcom/android/server/pm/KeySetManagerService;->writePublicKeysLPr(Landroid/util/TypedXmlSerializer;)V+]Lcom/android/server/pm/KeySetManagerService$PublicKeyHandle;Lcom/android/server/pm/KeySetManagerService$PublicKeyHandle;]Ljava/security/PublicKey;Lcom/android/org/conscrypt/OpenSSLRSAPublicKey;,Lcom/android/org/bouncycastle/jcajce/provider/asymmetric/dsa/BCDSAPublicKey;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
 HSPLcom/android/server/pm/KnownPackages;-><init>(Lcom/android/server/pm/DefaultAppProvider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/pm/KnownPackages;->getKnownPackageNames(Lcom/android/server/pm/Computer;II)[Ljava/lang/String;+]Lcom/android/server/pm/DefaultAppProvider;Lcom/android/server/pm/DefaultAppProvider;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;
 PLcom/android/server/pm/KnownPackages;->knownPackageToString(I)Ljava/lang/String;
@@ -36406,13 +37782,14 @@
 HSPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$PackageCallbackList;-><init>(Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;)V
 PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$PackageCallbackList;->onCallbackDied(Landroid/os/IInterface;Ljava/lang/Object;)V
 PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$PackageLoadingProgressCallback;-><init>(Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Ljava/lang/String;Landroid/os/UserHandle;)V
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$PackageLoadingProgressCallback;->onLoadingProgressChanged(F)V
 HSPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$PackageRemovedListener;-><init>(Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;)V
 HSPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$PackageRemovedListener;-><init>(Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$PackageRemovedListener-IA;)V
 PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$PackageRemovedListener;->getPackageName(Landroid/content/Intent;)Ljava/lang/String;
-PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$PackageRemovedListener;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$PackageRemovedListener;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$ShortcutChangeHandler;-><init>(Lcom/android/server/pm/UserManagerInternal;)V
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$ShortcutChangeHandler;->onShortcutEvent(Ljava/lang/String;Ljava/util/List;Landroid/os/UserHandle;Z)V
-PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$ShortcutChangeHandler;->onShortcutsAddedOrUpdated(Ljava/lang/String;Ljava/util/List;Landroid/os/UserHandle;)V
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$ShortcutChangeHandler;->onShortcutsAddedOrUpdated(Ljava/lang/String;Ljava/util/List;Landroid/os/UserHandle;)V
 PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$ShortcutChangeHandler;->onShortcutsRemoved(Ljava/lang/String;Ljava/util/List;Landroid/os/UserHandle;)V
 PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->$r8$lambda$4p4FYgPXMubkCSTTD6ALB9PlRAM(Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;ILandroid/content/pm/PackageInstaller$SessionInfo;)Z
 PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->$r8$lambda$JH6bHMIPeyliulxkptv72amRs88(Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Landroid/os/UserHandle;I)Z
@@ -36427,7 +37804,8 @@
 PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->-$$Nest$smisCallingAppIdAllowed([II)Z
 HSPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->addOnAppsChangedListener(Ljava/lang/String;Landroid/content/pm/IOnAppsChangedListener;)V
-HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->canAccessProfile(IIIILjava/lang/String;)Z+]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;]Landroid/os/UserManager;Landroid/os/UserManager;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->cacheShortcuts(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Landroid/os/UserHandle;I)V
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->canAccessProfile(IIIILjava/lang/String;)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;]Landroid/os/UserManager;Landroid/os/UserManager;
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->canAccessProfile(ILjava/lang/String;)Z+]Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->checkCallbackCount()V
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->ensureShortcutPermission(IILjava/lang/String;)V+]Landroid/content/pm/ShortcutServiceInternal;Lcom/android/server/pm/ShortcutService$LocalService;]Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;
@@ -36435,7 +37813,7 @@
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->ensureStrictAccessShortcutsPermission(Ljava/lang/String;)V
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getActivityLaunchIntent(Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/UserHandle;)Landroid/app/PendingIntent;+]Landroid/os/UserHandle;Landroid/os/UserHandle;]Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getAllSessions(Ljava/lang/String;)Landroid/content/pm/ParceledListSlice;
-HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getAppUsageLimit(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/content/pm/LauncherApps$AppUsageLimit;+]Landroid/os/UserHandle;Landroid/os/UserHandle;]Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getAppUsageLimit(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/content/pm/LauncherApps$AppUsageLimit;+]Landroid/os/UserHandle;Landroid/os/UserHandle;]Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;]Lcom/android/server/wm/ActivityTaskManagerInternal;Lcom/android/server/wm/ActivityTaskManagerService$LocalService;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;]Landroid/app/usage/UsageStatsManagerInternal$AppUsageLimitData;Landroid/app/usage/UsageStatsManagerInternal$AppUsageLimitData;
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getApplicationInfo(Ljava/lang/String;Ljava/lang/String;ILandroid/os/UserHandle;)Landroid/content/pm/ApplicationInfo;+]Landroid/os/UserHandle;Landroid/os/UserHandle;]Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getCallingUserId()I
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getFilteredPackageNames([Ljava/lang/String;Lcom/android/server/pm/LauncherAppsService$BroadcastCookie;)[Ljava/lang/String;
@@ -36445,6 +37823,7 @@
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getPackageInstallerService()Lcom/android/server/pm/PackageInstallerService;
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getShortcutConfigActivities(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/content/pm/ParceledListSlice;+]Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;]Landroid/content/Intent;Landroid/content/Intent;
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getShortcutIconFd(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Landroid/os/ParcelFileDescriptor;
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getShortcutIntent(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/UserHandle;)Landroid/app/PendingIntent;
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->getShortcuts(Ljava/lang/String;Landroid/content/pm/ShortcutQueryWrapper;Landroid/os/UserHandle;)Landroid/content/pm/ParceledListSlice;
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->hasDefaultEnableLauncherActivity(Ljava/lang/String;)Z+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->hasShortcutHostPermission(Ljava/lang/String;)Z
@@ -36452,6 +37831,7 @@
 HSPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->injectBinderCallingUid()I
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->injectCallingUserId()I
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->injectClearCallingIdentity()J
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->injectCreatePendingIntent(I[Landroid/content/Intent;ILandroid/os/Bundle;Ljava/lang/String;I)Landroid/app/PendingIntent;
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->injectHasAccessShortcutsPermission(II)Z
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->injectHasInteractAcrossUsersFullPermission(II)Z
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->injectRestoreCallingIdentity(J)V
@@ -36467,7 +37847,7 @@
 PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->pinShortcuts(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Landroid/os/UserHandle;)V
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->postToPackageMonitorHandler(Ljava/lang/Runnable;)V
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->queryActivitiesForUser(Ljava/lang/String;Landroid/content/Intent;Landroid/os/UserHandle;)Landroid/content/pm/ParceledListSlice;+]Landroid/os/UserHandle;Landroid/os/UserHandle;]Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;
-HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->queryIntentLauncherActivities(Landroid/content/Intent;ILandroid/os/UserHandle;)Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;,Ljava/util/Collections$EmptyList;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
+HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->queryIntentLauncherActivities(Landroid/content/Intent;ILandroid/os/UserHandle;)Ljava/util/List;+]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->registerLoadingProgressForIncrementalApps()V
 HPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->registerPackageInstallerCallback(Ljava/lang/String;Landroid/content/pm/IPackageInstallerCallback;)V
 PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->removeOnAppsChangedListener(Landroid/content/pm/IOnAppsChangedListener;)V
@@ -36483,9 +37863,10 @@
 PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->startShortcutInner(IIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/graphics/Rect;Landroid/os/Bundle;I)Z
 PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->startShortcutIntentsAsPublisher([Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;I)Z
 HSPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->startWatchingPackageBroadcasts()V
+PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->stopWatchingPackageBroadcasts()V
 PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->toShortcutsCacheFlags(I)I
 PLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->uncacheShortcuts(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Landroid/os/UserHandle;I)V
-HSPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->verifyCallingPackage(Ljava/lang/String;)V
+HSPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->verifyCallingPackage(Ljava/lang/String;)V+]Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;
 HSPLcom/android/server/pm/LauncherAppsService$LauncherAppsImpl;->verifyCallingPackage(Ljava/lang/String;I)V+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;
 HSPLcom/android/server/pm/LauncherAppsService$LauncherAppsServiceInternal;-><init>()V
 HSPLcom/android/server/pm/LauncherAppsService;-><init>(Landroid/content/Context;)V
@@ -36509,7 +37890,7 @@
 PLcom/android/server/pm/OtaDexoptService$1;-><init>(Lcom/android/server/pm/OtaDexoptService;Landroid/content/Context;ZLjava/util/List;)V
 HPLcom/android/server/pm/OtaDexoptService$1;->dexopt(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
 HPLcom/android/server/pm/OtaDexoptService$1;->encodeParameter(Ljava/lang/StringBuilder;Ljava/lang/Object;)V
-PLcom/android/server/pm/OtaDexoptService$OTADexoptPackageDexOptimizer;-><init>(Lcom/android/server/pm/Installer;Ljava/lang/Object;Landroid/content/Context;)V
+HPLcom/android/server/pm/OtaDexoptService$OTADexoptPackageDexOptimizer;-><init>(Lcom/android/server/pm/Installer;Ljava/lang/Object;Landroid/content/Context;)V
 PLcom/android/server/pm/OtaDexoptService;->$r8$lambda$Fia3gHi9GF8Zhk_Q6twL-iJdqvw(Lcom/android/server/pm/pkg/PackageStateInternal;)Z
 PLcom/android/server/pm/OtaDexoptService;->$r8$lambda$kVT16uUu7PUfM5w_HVAMYw4Y-sY(Lcom/android/server/pm/pkg/PackageStateInternal;)J
 HSPLcom/android/server/pm/OtaDexoptService;-><init>(Landroid/content/Context;Lcom/android/server/pm/PackageManagerService;)V
@@ -36529,7 +37910,7 @@
 PLcom/android/server/pm/OtaDexoptService;->performMetricsLogging()V
 HPLcom/android/server/pm/OtaDexoptService;->prepare()V
 PLcom/android/server/pm/OtaDexoptService;->prepareMetricsLogging(IIJJ)V
-PLcom/android/server/pm/OtaDexoptShellCommand;-><init>(Lcom/android/server/pm/OtaDexoptService;)V
+HPLcom/android/server/pm/OtaDexoptShellCommand;-><init>(Lcom/android/server/pm/OtaDexoptService;)V
 HPLcom/android/server/pm/OtaDexoptShellCommand;->onCommand(Ljava/lang/String;)I
 PLcom/android/server/pm/OtaDexoptShellCommand;->runOtaCleanup()I
 HPLcom/android/server/pm/OtaDexoptShellCommand;->runOtaDone()I
@@ -36569,7 +37950,7 @@
 HSPLcom/android/server/pm/PackageDexOptimizer;->compilerFilterDependsOnProfiles(Ljava/lang/String;)Z
 PLcom/android/server/pm/PackageDexOptimizer;->controlDexOptBlocking(Z)V
 HSPLcom/android/server/pm/PackageDexOptimizer;->dexOptPath(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/pkg/PackageStateInternal;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;IILcom/android/server/pm/CompilerStats$PackageStats;ZLjava/lang/String;Ljava/lang/String;I)I
-PLcom/android/server/pm/PackageDexOptimizer;->dexOptSecondaryDexPath(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;Lcom/android/server/pm/dex/DexoptOptions;)I
+HPLcom/android/server/pm/PackageDexOptimizer;->dexOptSecondaryDexPath(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;Lcom/android/server/pm/dex/DexoptOptions;)I
 HPLcom/android/server/pm/PackageDexOptimizer;->dexOptSecondaryDexPathLI(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;Lcom/android/server/pm/dex/DexoptOptions;)I
 PLcom/android/server/pm/PackageDexOptimizer;->dexoptSystemServerPath(Ljava/lang/String;Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;Lcom/android/server/pm/dex/DexoptOptions;)I
 HPLcom/android/server/pm/PackageDexOptimizer;->dumpDexoptState(Lcom/android/internal/util/IndentingPrintWriter;Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;)V
@@ -36582,32 +37963,33 @@
 PLcom/android/server/pm/PackageDexOptimizer;->getInstallerWithoutLock()Lcom/android/server/pm/Installer;
 HPLcom/android/server/pm/PackageDexOptimizer;->getOatDir(Ljava/io/File;)Ljava/io/File;
 HSPLcom/android/server/pm/PackageDexOptimizer;->getPackageOatDirIfSupported(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Z)Ljava/lang/String;
-PLcom/android/server/pm/PackageDexOptimizer;->getRealCompilerFilter(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;Z)Ljava/lang/String;
+HPLcom/android/server/pm/PackageDexOptimizer;->getRealCompilerFilter(Landroid/content/pm/ApplicationInfo;Ljava/lang/String;Z)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageDexOptimizer;->getRealCompilerFilter(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Ljava/lang/String;)Ljava/lang/String;
 HPLcom/android/server/pm/PackageDexOptimizer;->isAppImageEnabled()Z
 HSPLcom/android/server/pm/PackageDexOptimizer;->isOdexPrivate(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
 HSPLcom/android/server/pm/PackageDexOptimizer;->performDexOpt(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/pkg/PackageStateInternal;[Ljava/lang/String;Lcom/android/server/pm/CompilerStats$PackageStats;Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;Lcom/android/server/pm/dex/DexoptOptions;)I
-HSPLcom/android/server/pm/PackageDexOptimizer;->performDexOptLI(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/pkg/PackageStateInternal;[Ljava/lang/String;Lcom/android/server/pm/CompilerStats$PackageStats;Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;Lcom/android/server/pm/dex/DexoptOptions;)I
+HSPLcom/android/server/pm/PackageDexOptimizer;->performDexOptLI(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/pkg/PackageStateInternal;[Ljava/lang/String;Lcom/android/server/pm/CompilerStats$PackageStats;Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;Lcom/android/server/pm/dex/DexoptOptions;)I+]Lcom/android/server/pm/Installer;Lcom/android/server/pm/Installer;,Lcom/android/server/pm/OtaDexoptService$1;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Random;Ljava/util/Random;]Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/AndroidPackageApi;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageStateUnserialized;Lcom/android/server/pm/pkg/PackageStateUnserialized;]Lcom/android/server/pm/CompilerStats$PackageStats;Lcom/android/server/pm/CompilerStats$PackageStats;]Lcom/android/server/pm/PackageDexOptimizer;Lcom/android/server/pm/OtaDexoptService$OTADexoptPackageDexOptimizer;,Lcom/android/server/pm/PackageDexOptimizer;]Ljava/io/File;Ljava/io/File;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/dex/DexoptOptions;Lcom/android/server/pm/dex/DexoptOptions;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 PLcom/android/server/pm/PackageDexOptimizer;->prepareCloudProfile(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
 HSPLcom/android/server/pm/PackageDexOptimizer;->printDexoptFlags(I)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageDexOptimizer;->releaseWakeLockLI(J)V
 HSPLcom/android/server/pm/PackageDexOptimizer;->systemReady()V
 PLcom/android/server/pm/PackageFreezer;-><init>(Lcom/android/server/pm/PackageManagerService;)V
 HSPLcom/android/server/pm/PackageFreezer;-><init>(Ljava/lang/String;ILjava/lang/String;Lcom/android/server/pm/PackageManagerService;)V
-PLcom/android/server/pm/PackageFreezer;->close()V
-PLcom/android/server/pm/PackageFreezer;->finalize()V
+HSPLcom/android/server/pm/PackageFreezer;->close()V
+HSPLcom/android/server/pm/PackageFreezer;->finalize()V
 HSPLcom/android/server/pm/PackageHandler;-><init>(Landroid/os/Looper;Lcom/android/server/pm/PackageManagerService;)V
 HSPLcom/android/server/pm/PackageHandler;->doHandleMessage(Landroid/os/Message;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerServiceInjector;]Lcom/android/server/pm/SharedLibrariesImpl;Lcom/android/server/pm/SharedLibrariesImpl;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;]Lcom/android/server/pm/InstallPackageHelper;Lcom/android/server/pm/InstallPackageHelper;]Lcom/android/server/pm/PackageVerificationState;Lcom/android/server/pm/PackageVerificationState;]Lcom/android/server/pm/PackageFreezer;Lcom/android/server/pm/PackageFreezer;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/pm/VerificationParams;Lcom/android/server/pm/VerificationParams;]Lcom/android/server/pm/HandlerParams;Lcom/android/server/pm/InstallParams;,Lcom/android/server/pm/InstallParams$MultiPackageInstallParams;,Lcom/android/server/pm/VerificationParams;
 HSPLcom/android/server/pm/PackageHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/pm/PackageHandler;Lcom/android/server/pm/PackageHandler;
 HSPLcom/android/server/pm/PackageInstalledInfo;-><init>(I)V
 PLcom/android/server/pm/PackageInstalledInfo;->setError(ILjava/lang/String;)V
+PLcom/android/server/pm/PackageInstalledInfo;->setError(Ljava/lang/String;Lcom/android/server/pm/PackageManagerException;)V
 HSPLcom/android/server/pm/PackageInstalledInfo;->setReturnCode(I)V
 PLcom/android/server/pm/PackageInstalledInfo;->setReturnMessage(Ljava/lang/String;)V
 HSPLcom/android/server/pm/PackageInstallerService$$ExternalSyntheticLambda0;-><init>(I)V
 PLcom/android/server/pm/PackageInstallerService$$ExternalSyntheticLambda0;->test(I)Z
 HPLcom/android/server/pm/PackageInstallerService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/pm/PackageInstallerService;Lcom/android/server/pm/Computer;I)V
 HPLcom/android/server/pm/PackageInstallerService$$ExternalSyntheticLambda1;->test(Ljava/lang/Object;)Z
-PLcom/android/server/pm/PackageInstallerService$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/pm/PackageInstallerService;Lcom/android/server/pm/Computer;I)V
+HPLcom/android/server/pm/PackageInstallerService$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/pm/PackageInstallerService;Lcom/android/server/pm/Computer;I)V
 HPLcom/android/server/pm/PackageInstallerService$$ExternalSyntheticLambda2;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/pm/PackageInstallerService$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/pm/PackageInstallerService;)V
 HSPLcom/android/server/pm/PackageInstallerService$$ExternalSyntheticLambda3;->get()Ljava/lang/Object;
@@ -36615,28 +37997,28 @@
 HSPLcom/android/server/pm/PackageInstallerService$1;->accept(Ljava/io/File;Ljava/lang/String;)Z
 HSPLcom/android/server/pm/PackageInstallerService$BroadcastCookie;-><init>(ILjava/util/function/IntPredicate;)V
 PLcom/android/server/pm/PackageInstallerService$Callbacks;->-$$Nest$mnotifySessionActiveChanged(Lcom/android/server/pm/PackageInstallerService$Callbacks;IIZ)V
-PLcom/android/server/pm/PackageInstallerService$Callbacks;->-$$Nest$mnotifySessionBadgingChanged(Lcom/android/server/pm/PackageInstallerService$Callbacks;II)V
+HPLcom/android/server/pm/PackageInstallerService$Callbacks;->-$$Nest$mnotifySessionBadgingChanged(Lcom/android/server/pm/PackageInstallerService$Callbacks;II)V
 PLcom/android/server/pm/PackageInstallerService$Callbacks;->-$$Nest$mnotifySessionCreated(Lcom/android/server/pm/PackageInstallerService$Callbacks;II)V
 PLcom/android/server/pm/PackageInstallerService$Callbacks;->-$$Nest$mnotifySessionProgressChanged(Lcom/android/server/pm/PackageInstallerService$Callbacks;IIF)V
 HSPLcom/android/server/pm/PackageInstallerService$Callbacks;-><init>(Lcom/android/server/pm/PackageInstallerService;Landroid/os/Looper;)V
-HPLcom/android/server/pm/PackageInstallerService$Callbacks;->handleMessage(Landroid/os/Message;)V
-HPLcom/android/server/pm/PackageInstallerService$Callbacks;->invokeCallback(Landroid/content/pm/IPackageInstallerCallback;Landroid/os/Message;)V
+HPLcom/android/server/pm/PackageInstallerService$Callbacks;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;]Ljava/util/function/IntPredicate;Lcom/android/server/pm/PackageInstallerService$$ExternalSyntheticLambda0;,Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$$ExternalSyntheticLambda1;]Lcom/android/server/pm/PackageInstallerService$Callbacks;Lcom/android/server/pm/PackageInstallerService$Callbacks;
+HPLcom/android/server/pm/PackageInstallerService$Callbacks;->invokeCallback(Landroid/content/pm/IPackageInstallerCallback;Landroid/os/Message;)V+]Ljava/lang/Boolean;Ljava/lang/Boolean;]Landroid/content/pm/IPackageInstallerCallback;Landroid/content/pm/IPackageInstallerCallback$Stub$Proxy;,Landroid/content/pm/PackageInstaller$SessionCallbackDelegate;]Ljava/lang/Float;Ljava/lang/Float;
 PLcom/android/server/pm/PackageInstallerService$Callbacks;->notifySessionActiveChanged(IIZ)V
 HPLcom/android/server/pm/PackageInstallerService$Callbacks;->notifySessionBadgingChanged(II)V
 PLcom/android/server/pm/PackageInstallerService$Callbacks;->notifySessionCreated(II)V
 PLcom/android/server/pm/PackageInstallerService$Callbacks;->notifySessionFinished(IIZ)V
-PLcom/android/server/pm/PackageInstallerService$Callbacks;->notifySessionProgressChanged(IIF)V
+HPLcom/android/server/pm/PackageInstallerService$Callbacks;->notifySessionProgressChanged(IIF)V
 HSPLcom/android/server/pm/PackageInstallerService$Callbacks;->register(Landroid/content/pm/IPackageInstallerCallback;Lcom/android/server/pm/PackageInstallerService$BroadcastCookie;)V
 PLcom/android/server/pm/PackageInstallerService$Callbacks;->unregister(Landroid/content/pm/IPackageInstallerCallback;)V
 PLcom/android/server/pm/PackageInstallerService$InternalCallback$1;-><init>(Lcom/android/server/pm/PackageInstallerService$InternalCallback;Lcom/android/server/pm/PackageInstallerSession;Z)V
 HPLcom/android/server/pm/PackageInstallerService$InternalCallback$1;->run()V
 HSPLcom/android/server/pm/PackageInstallerService$InternalCallback;-><init>(Lcom/android/server/pm/PackageInstallerService;)V
-PLcom/android/server/pm/PackageInstallerService$InternalCallback;->onSessionActiveChanged(Lcom/android/server/pm/PackageInstallerSession;Z)V
+HPLcom/android/server/pm/PackageInstallerService$InternalCallback;->onSessionActiveChanged(Lcom/android/server/pm/PackageInstallerSession;Z)V
 HPLcom/android/server/pm/PackageInstallerService$InternalCallback;->onSessionBadgingChanged(Lcom/android/server/pm/PackageInstallerSession;)V
-PLcom/android/server/pm/PackageInstallerService$InternalCallback;->onSessionChanged(Lcom/android/server/pm/PackageInstallerSession;)V
-PLcom/android/server/pm/PackageInstallerService$InternalCallback;->onSessionFinished(Lcom/android/server/pm/PackageInstallerSession;Z)V
+HPLcom/android/server/pm/PackageInstallerService$InternalCallback;->onSessionChanged(Lcom/android/server/pm/PackageInstallerSession;)V
+HPLcom/android/server/pm/PackageInstallerService$InternalCallback;->onSessionFinished(Lcom/android/server/pm/PackageInstallerSession;Z)V
 PLcom/android/server/pm/PackageInstallerService$InternalCallback;->onSessionPrepared(Lcom/android/server/pm/PackageInstallerSession;)V
-PLcom/android/server/pm/PackageInstallerService$InternalCallback;->onSessionProgressChanged(Lcom/android/server/pm/PackageInstallerSession;F)V
+HPLcom/android/server/pm/PackageInstallerService$InternalCallback;->onSessionProgressChanged(Lcom/android/server/pm/PackageInstallerSession;F)V
 PLcom/android/server/pm/PackageInstallerService$InternalCallback;->onSessionSealedBlocking(Lcom/android/server/pm/PackageInstallerSession;)V
 HSPLcom/android/server/pm/PackageInstallerService$Lifecycle;-><init>(Landroid/content/Context;Lcom/android/server/pm/PackageInstallerService;)V
 HSPLcom/android/server/pm/PackageInstallerService$Lifecycle;->onBootPhase(I)V
@@ -36666,12 +38048,12 @@
 PLcom/android/server/pm/PackageInstallerService;->$r8$lambda$XrDxuesO-5wc0UNnxMkMSLdbRCA(II)Z
 PLcom/android/server/pm/PackageInstallerService;->$r8$lambda$e3GBWfp6y17JDWiQ8vFHE0WVXg0(Lcom/android/server/pm/PackageInstallerService;Lcom/android/server/pm/Computer;ILandroid/content/pm/PackageInstaller$SessionInfo;)Z
 HSPLcom/android/server/pm/PackageInstallerService;->$r8$lambda$qXMUzWy7DWy_D_Ta3LwqPstEoss(Lcom/android/server/pm/PackageInstallerService;)Ljava/lang/Boolean;
-PLcom/android/server/pm/PackageInstallerService;->-$$Nest$fgetmCallbacks(Lcom/android/server/pm/PackageInstallerService;)Lcom/android/server/pm/PackageInstallerService$Callbacks;
+HPLcom/android/server/pm/PackageInstallerService;->-$$Nest$fgetmCallbacks(Lcom/android/server/pm/PackageInstallerService;)Lcom/android/server/pm/PackageInstallerService$Callbacks;
 PLcom/android/server/pm/PackageInstallerService;->-$$Nest$fgetmInstallHandler(Lcom/android/server/pm/PackageInstallerService;)Landroid/os/Handler;
 PLcom/android/server/pm/PackageInstallerService;->-$$Nest$fgetmOkToSendBroadcasts(Lcom/android/server/pm/PackageInstallerService;)Z
 PLcom/android/server/pm/PackageInstallerService;->-$$Nest$fgetmPm(Lcom/android/server/pm/PackageInstallerService;)Lcom/android/server/pm/PackageManagerService;
 PLcom/android/server/pm/PackageInstallerService;->-$$Nest$fgetmSessions(Lcom/android/server/pm/PackageInstallerService;)Landroid/util/SparseArray;
-PLcom/android/server/pm/PackageInstallerService;->-$$Nest$fgetmSettingsWriteRequest(Lcom/android/server/pm/PackageInstallerService;)Lcom/android/server/pm/utils/RequestThrottle;
+HPLcom/android/server/pm/PackageInstallerService;->-$$Nest$fgetmSettingsWriteRequest(Lcom/android/server/pm/PackageInstallerService;)Lcom/android/server/pm/utils/RequestThrottle;
 PLcom/android/server/pm/PackageInstallerService;->-$$Nest$fgetmStagingManager(Lcom/android/server/pm/PackageInstallerService;)Lcom/android/server/pm/StagingManager;
 PLcom/android/server/pm/PackageInstallerService;->-$$Nest$mbuildAppIconFile(Lcom/android/server/pm/PackageInstallerService;I)Ljava/io/File;
 HSPLcom/android/server/pm/PackageInstallerService;->-$$Nest$monBroadcastReady(Lcom/android/server/pm/PackageInstallerService;)V
@@ -36684,20 +38066,20 @@
 HSPLcom/android/server/pm/PackageInstallerService;->addHistoricalSessionLocked(Lcom/android/server/pm/PackageInstallerSession;)V
 PLcom/android/server/pm/PackageInstallerService;->allocateSessionIdLocked()I
 HSPLcom/android/server/pm/PackageInstallerService;->buildAppIconFile(I)Ljava/io/File;
-PLcom/android/server/pm/PackageInstallerService;->buildSessionDir(ILandroid/content/pm/PackageInstaller$SessionParams;)Ljava/io/File;
+HPLcom/android/server/pm/PackageInstallerService;->buildSessionDir(ILandroid/content/pm/PackageInstaller$SessionParams;)Ljava/io/File;
 PLcom/android/server/pm/PackageInstallerService;->buildSuccessNotification(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;I)Landroid/app/Notification;
-PLcom/android/server/pm/PackageInstallerService;->buildTmpSessionDir(ILjava/lang/String;)Ljava/io/File;
+HPLcom/android/server/pm/PackageInstallerService;->buildTmpSessionDir(ILjava/lang/String;)Ljava/io/File;
 PLcom/android/server/pm/PackageInstallerService;->checkOpenSessionAccess(Lcom/android/server/pm/PackageInstallerSession;)Z
 PLcom/android/server/pm/PackageInstallerService;->createSession(Landroid/content/pm/PackageInstaller$SessionParams;Ljava/lang/String;Ljava/lang/String;I)I
 HPLcom/android/server/pm/PackageInstallerService;->createSessionInternal(Landroid/content/pm/PackageInstaller$SessionParams;Ljava/lang/String;Ljava/lang/String;I)I
 PLcom/android/server/pm/PackageInstallerService;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
 HSPLcom/android/server/pm/PackageInstallerService;->expireSessionsLocked()V
-PLcom/android/server/pm/PackageInstallerService;->freeStageDirs(Ljava/lang/String;)V
+HPLcom/android/server/pm/PackageInstallerService;->freeStageDirs(Ljava/lang/String;)V
 HPLcom/android/server/pm/PackageInstallerService;->getAllSessions(I)Landroid/content/pm/ParceledListSlice;
 HPLcom/android/server/pm/PackageInstallerService;->getMySessions(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
-HSPLcom/android/server/pm/PackageInstallerService;->getSession(I)Lcom/android/server/pm/PackageInstallerSession;
+HSPLcom/android/server/pm/PackageInstallerService;->getSession(I)Lcom/android/server/pm/PackageInstallerSession;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/pm/PackageInstallerService;->getSessionCount(Landroid/util/SparseArray;I)I
-HPLcom/android/server/pm/PackageInstallerService;->getSessionInfo(I)Landroid/content/pm/PackageInstaller$SessionInfo;
+HPLcom/android/server/pm/PackageInstallerService;->getSessionInfo(I)Landroid/content/pm/PackageInstaller$SessionInfo;+]Lcom/android/server/pm/PackageInstallerSession;Lcom/android/server/pm/PackageInstallerSession;]Lcom/android/server/pm/PackageInstallerService;Lcom/android/server/pm/PackageInstallerService;]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/pm/PackageInstallerService;->getSessionVerifier()Lcom/android/server/pm/PackageSessionVerifier;
 HPLcom/android/server/pm/PackageInstallerService;->getStagedSessions()Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/pm/PackageInstallerService;->getStagingDirsOnVolume(Ljava/lang/String;)Landroid/util/ArraySet;
@@ -36706,7 +38088,7 @@
 PLcom/android/server/pm/PackageInstallerService;->installExistingPackage(Ljava/lang/String;IILandroid/content/IntentSender;ILjava/util/List;)V
 PLcom/android/server/pm/PackageInstallerService;->isCalledBySystemOrShell(I)Z
 HPLcom/android/server/pm/PackageInstallerService;->isCallingUidOwner(Lcom/android/server/pm/PackageInstallerSession;)Z
-HSPLcom/android/server/pm/PackageInstallerService;->isStageName(Ljava/lang/String;)Z
+HSPLcom/android/server/pm/PackageInstallerService;->isStageName(Ljava/lang/String;)Z+]Ljava/lang/String;Ljava/lang/String;
 PLcom/android/server/pm/PackageInstallerService;->isStagedInstallerAllowed(Ljava/lang/String;)Z
 PLcom/android/server/pm/PackageInstallerService;->lambda$getAllSessions$2(Lcom/android/server/pm/Computer;ILandroid/content/pm/PackageInstaller$SessionInfo;)Z
 PLcom/android/server/pm/PackageInstallerService;->lambda$getStagedSessions$1(Lcom/android/server/pm/Computer;ILandroid/content/pm/PackageInstaller$SessionInfo;)Z
@@ -36715,6 +38097,7 @@
 HSPLcom/android/server/pm/PackageInstallerService;->newArraySet([Ljava/lang/Object;)Landroid/util/ArraySet;
 PLcom/android/server/pm/PackageInstallerService;->okToSendBroadcasts()Z
 HSPLcom/android/server/pm/PackageInstallerService;->onBroadcastReady()V
+PLcom/android/server/pm/PackageInstallerService;->onInstallerPackageDeleted(II)V
 PLcom/android/server/pm/PackageInstallerService;->openSession(I)Landroid/content/pm/IPackageInstallerSession;
 HPLcom/android/server/pm/PackageInstallerService;->openSessionInternal(I)Landroid/content/pm/IPackageInstallerSession;
 PLcom/android/server/pm/PackageInstallerService;->prepareStageDir(Ljava/io/File;)V
@@ -36726,7 +38109,7 @@
 HSPLcom/android/server/pm/PackageInstallerService;->removeStagingDirs(Landroid/util/ArraySet;)V
 HSPLcom/android/server/pm/PackageInstallerService;->restoreAndApplyStagedSessionIfNeeded()V
 PLcom/android/server/pm/PackageInstallerService;->sendSessionUpdatedBroadcast(Landroid/content/pm/PackageInstaller$SessionInfo;I)V
-PLcom/android/server/pm/PackageInstallerService;->shouldFilterSession(Lcom/android/server/pm/Computer;II)Z
+HPLcom/android/server/pm/PackageInstallerService;->shouldFilterSession(Lcom/android/server/pm/Computer;II)Z
 HPLcom/android/server/pm/PackageInstallerService;->shouldFilterSession(Lcom/android/server/pm/Computer;ILandroid/content/pm/PackageInstaller$SessionInfo;)Z
 HSPLcom/android/server/pm/PackageInstallerService;->systemReady()V
 PLcom/android/server/pm/PackageInstallerService;->tryParseSessionId(Ljava/lang/String;)I
@@ -36744,7 +38127,7 @@
 PLcom/android/server/pm/PackageInstallerSession$$ExternalSyntheticLambda2;-><init>()V
 PLcom/android/server/pm/PackageInstallerSession$$ExternalSyntheticLambda2;->test(Ljava/lang/Object;)Z
 PLcom/android/server/pm/PackageInstallerSession$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/pm/PackageInstallerSession;Landroid/system/Int64Ref;)V
-PLcom/android/server/pm/PackageInstallerSession$$ExternalSyntheticLambda3;->onProgress(J)V
+HPLcom/android/server/pm/PackageInstallerSession$$ExternalSyntheticLambda3;->onProgress(J)V
 PLcom/android/server/pm/PackageInstallerSession$$ExternalSyntheticLambda7;-><init>(Landroid/content/IntentSender;)V
 PLcom/android/server/pm/PackageInstallerSession$$ExternalSyntheticLambda7;->test(Ljava/lang/Object;)Z
 PLcom/android/server/pm/PackageInstallerSession$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/pm/PackageInstallerSession;)V
@@ -36804,7 +38187,7 @@
 PLcom/android/server/pm/PackageInstallerSession$StagedSession;->setSessionReady()V
 PLcom/android/server/pm/PackageInstallerSession$StagedSession;->verifySession()V
 PLcom/android/server/pm/PackageInstallerSession;->$r8$lambda$2TKiF5xa6TNzSrO4CHgwTQET7wc(Lcom/android/server/pm/PackageInstallerSession;ILjava/lang/String;)V
-PLcom/android/server/pm/PackageInstallerSession;->$r8$lambda$EIoXzbluZ_RWC_7xNPTngWTxt7c(Lcom/android/server/pm/PackageInstallerSession;Landroid/system/Int64Ref;J)V
+HPLcom/android/server/pm/PackageInstallerSession;->$r8$lambda$EIoXzbluZ_RWC_7xNPTngWTxt7c(Lcom/android/server/pm/PackageInstallerSession;Landroid/system/Int64Ref;J)V
 PLcom/android/server/pm/PackageInstallerSession;->$r8$lambda$Ilh4rIPGIAQdeDzSWMg8L0-7h_A(Lcom/android/server/pm/PackageInstallerSession;)Z
 PLcom/android/server/pm/PackageInstallerSession;->$r8$lambda$JmoW7OA3KLn_4qEY2siiZ_5Xd6M(Lcom/android/server/pm/PackageInstallerSession;)Z
 PLcom/android/server/pm/PackageInstallerSession;->$r8$lambda$_8GqMk4BhgfuHtIAddu00risIyU(Lcom/android/server/pm/PackageInstallerSession;ILjava/lang/String;)V
@@ -36834,29 +38217,30 @@
 PLcom/android/server/pm/PackageInstallerSession;->-$$Nest$smsendOnPackageInstalled(Landroid/content/Context;Landroid/content/IntentSender;IZILjava/lang/String;ILjava/lang/String;Landroid/os/Bundle;)V
 HSPLcom/android/server/pm/PackageInstallerSession;-><clinit>()V
 HSPLcom/android/server/pm/PackageInstallerSession;-><init>(Lcom/android/server/pm/PackageInstallerService$InternalCallback;Landroid/content/Context;Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageSessionProvider;Lcom/android/server/pm/SilentUpdatePolicy;Landroid/os/Looper;Lcom/android/server/pm/StagingManager;IIILcom/android/server/pm/InstallSource;Landroid/content/pm/PackageInstaller$SessionParams;JJLjava/io/File;Ljava/lang/String;[Landroid/content/pm/InstallationFile;Landroid/util/ArrayMap;ZZZZ[IIZZZILjava/lang/String;)V
-PLcom/android/server/pm/PackageInstallerSession;->abandon()V
+HPLcom/android/server/pm/PackageInstallerSession;->abandon()V
 PLcom/android/server/pm/PackageInstallerSession;->acquireTransactionLock()V
 PLcom/android/server/pm/PackageInstallerSession;->addChildSessionId(I)V
+PLcom/android/server/pm/PackageInstallerSession;->addClientProgress(F)V
 PLcom/android/server/pm/PackageInstallerSession;->addFile(ILjava/lang/String;J[B[B)V
 HSPLcom/android/server/pm/PackageInstallerSession;->assertApkConsistentLocked(Ljava/lang/String;Landroid/content/pm/parsing/ApkLite;)V
 HPLcom/android/server/pm/PackageInstallerSession;->assertCallerIsOwnerOrRoot()V
 HSPLcom/android/server/pm/PackageInstallerSession;->assertCallerIsOwnerOrRootOrSystem()V
 HPLcom/android/server/pm/PackageInstallerSession;->assertCallerIsOwnerRootOrVerifier()V
-PLcom/android/server/pm/PackageInstallerSession;->assertCanWrite(Z)V
+HPLcom/android/server/pm/PackageInstallerSession;->assertCanWrite(Z)V
 HSPLcom/android/server/pm/PackageInstallerSession;->assertNoWriteFileTransfersOpenLocked()V
 HSPLcom/android/server/pm/PackageInstallerSession;->assertNotChild(Ljava/lang/String;)V
 PLcom/android/server/pm/PackageInstallerSession;->assertNotLocked(Ljava/lang/String;)V
 HSPLcom/android/server/pm/PackageInstallerSession;->assertPackageConsistentLocked(Ljava/lang/String;Ljava/lang/String;J)V
-PLcom/android/server/pm/PackageInstallerSession;->assertPreparedAndNotCommittedOrDestroyedLocked(Ljava/lang/String;)V
+HPLcom/android/server/pm/PackageInstallerSession;->assertPreparedAndNotCommittedOrDestroyedLocked(Ljava/lang/String;)V
 HSPLcom/android/server/pm/PackageInstallerSession;->assertPreparedAndNotDestroyedLocked(Ljava/lang/String;)V
-PLcom/android/server/pm/PackageInstallerSession;->assertPreparedAndNotSealedLocked(Ljava/lang/String;)V
+HPLcom/android/server/pm/PackageInstallerSession;->assertPreparedAndNotSealedLocked(Ljava/lang/String;)V
 PLcom/android/server/pm/PackageInstallerSession;->assertSealed(Ljava/lang/String;)V
 PLcom/android/server/pm/PackageInstallerSession;->assertShellOrSystemCalling(Ljava/lang/String;)V
 HSPLcom/android/server/pm/PackageInstallerSession;->buildAppIconFile(ILjava/io/File;)Ljava/io/File;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 PLcom/android/server/pm/PackageInstallerSession;->canBeAddedAsChild(I)Z
 PLcom/android/server/pm/PackageInstallerSession;->checkUserActionRequirement(Lcom/android/server/pm/PackageInstallerSession;Landroid/content/IntentSender;)Z
 PLcom/android/server/pm/PackageInstallerSession;->close()V
-PLcom/android/server/pm/PackageInstallerSession;->closeInternal(Z)V
+HPLcom/android/server/pm/PackageInstallerSession;->closeInternal(Z)V
 PLcom/android/server/pm/PackageInstallerSession;->commit(Landroid/content/IntentSender;Z)V
 HPLcom/android/server/pm/PackageInstallerSession;->computeProgressLocked(Z)V
 HPLcom/android/server/pm/PackageInstallerSession;->computeUserActionRequirement()I
@@ -36876,7 +38260,7 @@
 PLcom/android/server/pm/PackageInstallerSession;->extractNativeLibraries(Landroid/content/pm/parsing/PackageLite;Ljava/io/File;Ljava/lang/String;Z)V
 HSPLcom/android/server/pm/PackageInstallerSession;->filterFiles(Ljava/io/File;[Ljava/lang/String;Ljava/io/FileFilter;)Ljava/util/ArrayList;
 HPLcom/android/server/pm/PackageInstallerSession;->generateInfoForCaller(ZI)Landroid/content/pm/PackageInstaller$SessionInfo;
-HPLcom/android/server/pm/PackageInstallerSession;->generateInfoInternal(ZZ)Landroid/content/pm/PackageInstaller$SessionInfo;
+HPLcom/android/server/pm/PackageInstallerSession;->generateInfoInternal(ZZ)Landroid/content/pm/PackageInstaller$SessionInfo;+]Ljava/io/File;Ljava/io/File;]Lcom/android/server/pm/PackageInstallerSession;Lcom/android/server/pm/PackageInstallerSession;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Landroid/content/pm/PackageInstaller$SessionInfo;Landroid/content/pm/PackageInstaller$SessionInfo;]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
 PLcom/android/server/pm/PackageInstallerSession;->generateInfoScrubbed(Z)Landroid/content/pm/PackageInstaller$SessionInfo;
 HSPLcom/android/server/pm/PackageInstallerSession;->getAddedApksLocked()Ljava/util/List;
 PLcom/android/server/pm/PackageInstallerSession;->getApksSize(Ljava/lang/String;)J
@@ -36937,7 +38321,7 @@
 PLcom/android/server/pm/PackageInstallerSession;->lambda$addChildSessionId$8(Lcom/android/server/pm/PackageInstallerSession;)Z
 PLcom/android/server/pm/PackageInstallerSession;->lambda$containsApkSession$6(Lcom/android/server/pm/PackageInstallerSession;)Z
 HPLcom/android/server/pm/PackageInstallerSession;->lambda$doWriteInternal$0(Landroid/system/Int64Ref;J)V
-PLcom/android/server/pm/PackageInstallerSession;->lambda$install$5(Ljava/util/List;Ljava/lang/Void;Ljava/lang/Throwable;)V
+HPLcom/android/server/pm/PackageInstallerSession;->lambda$install$5(Ljava/util/List;Ljava/lang/Void;Ljava/lang/Throwable;)V
 PLcom/android/server/pm/PackageInstallerSession;->lambda$sendPendingUserActionIntentIfNeeded$2(Landroid/content/IntentSender;Lcom/android/server/pm/PackageInstallerSession;)Z
 PLcom/android/server/pm/PackageInstallerSession;->lambda$verifyNonStaged$3(ILjava/lang/String;)V
 PLcom/android/server/pm/PackageInstallerSession;->lambda$verifyNonStaged$4(ILjava/lang/String;)V
@@ -36959,7 +38343,7 @@
 PLcom/android/server/pm/PackageInstallerSession;->onSessionVerificationFailure(ILjava/lang/String;)V
 PLcom/android/server/pm/PackageInstallerSession;->onVerificationComplete()V
 HPLcom/android/server/pm/PackageInstallerSession;->open()V
-PLcom/android/server/pm/PackageInstallerSession;->openTargetInternal(Ljava/lang/String;II)Landroid/os/ParcelFileDescriptor;
+HPLcom/android/server/pm/PackageInstallerSession;->openTargetInternal(Ljava/lang/String;II)Landroid/os/ParcelFileDescriptor;
 PLcom/android/server/pm/PackageInstallerSession;->openWrite(Ljava/lang/String;JJ)Landroid/os/ParcelFileDescriptor;
 HPLcom/android/server/pm/PackageInstallerSession;->parseApkAndExtractNativeLibraries()V
 PLcom/android/server/pm/PackageInstallerSession;->prepareDataLoaderLocked()Z
@@ -36969,36 +38353,43 @@
 PLcom/android/server/pm/PackageInstallerSession;->removeSplit(Ljava/lang/String;)V
 HSPLcom/android/server/pm/PackageInstallerSession;->resolveAndStageFileLocked(Ljava/io/File;Ljava/io/File;Ljava/lang/String;)V
 HSPLcom/android/server/pm/PackageInstallerSession;->sealLocked()V
-PLcom/android/server/pm/PackageInstallerSession;->sendOnPackageInstalled(Landroid/content/Context;Landroid/content/IntentSender;IZILjava/lang/String;ILjava/lang/String;Landroid/os/Bundle;)V
+HPLcom/android/server/pm/PackageInstallerSession;->sendOnPackageInstalled(Landroid/content/Context;Landroid/content/IntentSender;IZILjava/lang/String;ILjava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/pm/PackageInstallerSession;->sendOnUserActionRequired(Landroid/content/Context;Landroid/content/IntentSender;ILandroid/content/Intent;)V
+PLcom/android/server/pm/PackageInstallerSession;->sendPendingUserActionIntent(Landroid/content/IntentSender;)V
 PLcom/android/server/pm/PackageInstallerSession;->sendPendingUserActionIntentIfNeeded()Z
-PLcom/android/server/pm/PackageInstallerSession;->sendUpdateToRemoteStatusReceiver(ILjava/lang/String;Landroid/os/Bundle;)V
+HPLcom/android/server/pm/PackageInstallerSession;->sendUpdateToRemoteStatusReceiver(ILjava/lang/String;Landroid/os/Bundle;)V
 HSPLcom/android/server/pm/PackageInstallerSession;->sessionContains(Ljava/util/function/Predicate;)Z
 PLcom/android/server/pm/PackageInstallerSession;->setChecksums(Ljava/lang/String;[Landroid/content/pm/Checksum;[B)V
-PLcom/android/server/pm/PackageInstallerSession;->setClientProgress(F)V
+HPLcom/android/server/pm/PackageInstallerSession;->setClientProgress(F)V
 HPLcom/android/server/pm/PackageInstallerSession;->setClientProgressLocked(F)V
 PLcom/android/server/pm/PackageInstallerSession;->setParentSessionId(I)V
 PLcom/android/server/pm/PackageInstallerSession;->setRemoteStatusReceiver(Landroid/content/IntentSender;)V
 HPLcom/android/server/pm/PackageInstallerSession;->setSessionApplied()V
 PLcom/android/server/pm/PackageInstallerSession;->setSessionFailed(ILjava/lang/String;)V
-PLcom/android/server/pm/PackageInstallerSession;->setSessionReady()V
+HPLcom/android/server/pm/PackageInstallerSession;->setSessionReady()V
 HPLcom/android/server/pm/PackageInstallerSession;->shouldScrubData(I)Z
 HSPLcom/android/server/pm/PackageInstallerSession;->stageFileLocked(Ljava/io/File;Ljava/io/File;)V
+PLcom/android/server/pm/PackageInstallerSession;->stageViaHardLink(Ljava/lang/String;)V
 PLcom/android/server/pm/PackageInstallerSession;->storeBytesToInstallationFile(Ljava/lang/String;Ljava/lang/String;[B)V
-PLcom/android/server/pm/PackageInstallerSession;->streamValidateAndCommit()Z
+HPLcom/android/server/pm/PackageInstallerSession;->streamValidateAndCommit()Z
 PLcom/android/server/pm/PackageInstallerSession;->unsafeGetCertsWithoutVerification(Ljava/lang/String;)Landroid/content/pm/SigningDetails;
 HSPLcom/android/server/pm/PackageInstallerSession;->validateApexInstallLocked()V
 HSPLcom/android/server/pm/PackageInstallerSession;->validateApkInstallLocked()Landroid/content/pm/parsing/PackageLite;
 PLcom/android/server/pm/PackageInstallerSession;->verify()V
 PLcom/android/server/pm/PackageInstallerSession;->verifyNonStaged()V
-HSPLcom/android/server/pm/PackageInstallerSession;->write(Landroid/util/TypedXmlSerializer;Ljava/io/File;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/io/File;Ljava/io/File;]Lcom/android/server/pm/PackageInstallerSession;Lcom/android/server/pm/PackageInstallerSession;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;]Lcom/android/server/pm/PackageInstallerSession$PerFileChecksum;Lcom/android/server/pm/PackageInstallerSession$PerFileChecksum;]Landroid/content/pm/Checksum;Landroid/content/pm/Checksum;
+HSPLcom/android/server/pm/PackageInstallerSession;->write(Landroid/util/TypedXmlSerializer;Ljava/io/File;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;]Lcom/android/server/pm/PackageInstallerSession;Lcom/android/server/pm/PackageInstallerSession;]Ljava/io/File;Ljava/io/File;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Lcom/android/server/pm/PackageInstallerSession$PerFileChecksum;Lcom/android/server/pm/PackageInstallerSession$PerFileChecksum;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Landroid/content/pm/Checksum;Landroid/content/pm/Checksum;
 PLcom/android/server/pm/PackageInstallerSession;->write(Ljava/lang/String;JJLandroid/os/ParcelFileDescriptor;)V
 HSPLcom/android/server/pm/PackageInstallerSession;->writeAutoRevokePermissionsMode(Landroid/util/TypedXmlSerializer;I)V+]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;
 HSPLcom/android/server/pm/PackageInstallerSession;->writeGrantedRuntimePermissionsLocked(Landroid/util/TypedXmlSerializer;[Ljava/lang/String;)V
 HSPLcom/android/server/pm/PackageInstallerSession;->writeWhitelistedRestrictedPermissionsLocked(Landroid/util/TypedXmlSerializer;Ljava/util/List;)V
 HSPLcom/android/server/pm/PackageKeySetData;-><init>()V
 HSPLcom/android/server/pm/PackageKeySetData;-><init>(Lcom/android/server/pm/PackageKeySetData;)V
+HSPLcom/android/server/pm/PackageKeySetData;->addDefinedKeySet(JLjava/lang/String;)V
+PLcom/android/server/pm/PackageKeySetData;->addUpgradeKeySet(Ljava/lang/String;)V
+HSPLcom/android/server/pm/PackageKeySetData;->addUpgradeKeySetById(J)V
 HSPLcom/android/server/pm/PackageKeySetData;->getAliases()Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/PackageKeySetData;->getProperSigningKeySet()J
+PLcom/android/server/pm/PackageKeySetData;->getUpgradeKeySets()[J
 PLcom/android/server/pm/PackageKeySetData;->isUsingDefinedKeySets()Z
 HSPLcom/android/server/pm/PackageKeySetData;->isUsingUpgradeKeySets()Z
 HSPLcom/android/server/pm/PackageKeySetData;->removeAllDefinedKeySets()V
@@ -37021,7 +38412,7 @@
 PLcom/android/server/pm/PackageManagerInternalBase;->commitPackageStateMutation(Lcom/android/server/pm/pkg/mutate/PackageStateMutator$InitialState;Ljava/util/function/Consumer;)Lcom/android/server/pm/pkg/mutate/PackageStateMutator$Result;
 PLcom/android/server/pm/PackageManagerInternalBase;->deleteOatArtifactsOfPackage(Ljava/lang/String;)J
 HPLcom/android/server/pm/PackageManagerInternalBase;->filterAppAccess(II)Z
-HSPLcom/android/server/pm/PackageManagerInternalBase;->filterAppAccess(Lcom/android/server/pm/parsing/pkg/AndroidPackage;II)Z+]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;
+HSPLcom/android/server/pm/PackageManagerInternalBase;->filterAppAccess(Lcom/android/server/pm/parsing/pkg/AndroidPackage;II)Z+]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/PackageManagerInternalBase;->filterAppAccess(Ljava/lang/String;II)Z+]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;
 PLcom/android/server/pm/PackageManagerInternalBase;->finishPackageInstall(IZ)V
 HSPLcom/android/server/pm/PackageManagerInternalBase;->forEachInstalledPackage(Ljava/util/function/Consumer;I)V+]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
@@ -37029,31 +38420,31 @@
 HSPLcom/android/server/pm/PackageManagerInternalBase;->forEachPackageSetting(Ljava/util/function/Consumer;)V
 HSPLcom/android/server/pm/PackageManagerInternalBase;->forEachPackageState(Ljava/util/function/Consumer;)V
 PLcom/android/server/pm/PackageManagerInternalBase;->freeAllAppCacheAboveQuota(Ljava/lang/String;)V
-PLcom/android/server/pm/PackageManagerInternalBase;->freeStorage(Ljava/lang/String;JI)V
+HPLcom/android/server/pm/PackageManagerInternalBase;->freeStorage(Ljava/lang/String;JI)V
 HPLcom/android/server/pm/PackageManagerInternalBase;->getActivityInfo(Landroid/content/ComponentName;JII)Landroid/content/pm/ActivityInfo;+]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 PLcom/android/server/pm/PackageManagerInternalBase;->getApksInApex(Ljava/lang/String;)Ljava/util/List;
 HSPLcom/android/server/pm/PackageManagerInternalBase;->getApplicationEnabledState(Ljava/lang/String;I)I+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
-HSPLcom/android/server/pm/PackageManagerInternalBase;->getApplicationInfo(Ljava/lang/String;JII)Landroid/content/pm/ApplicationInfo;+]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;
+HSPLcom/android/server/pm/PackageManagerInternalBase;->getApplicationInfo(Ljava/lang/String;JII)Landroid/content/pm/ApplicationInfo;+]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;
 HPLcom/android/server/pm/PackageManagerInternalBase;->getComponentEnabledSetting(Landroid/content/ComponentName;II)I
-PLcom/android/server/pm/PackageManagerInternalBase;->getDefaultHomeActivity(I)Landroid/content/ComponentName;
+HSPLcom/android/server/pm/PackageManagerInternalBase;->getDefaultHomeActivity(I)Landroid/content/ComponentName;
 HSPLcom/android/server/pm/PackageManagerInternalBase;->getDisabledComponents(Ljava/lang/String;I)Landroid/util/ArraySet;
 HSPLcom/android/server/pm/PackageManagerInternalBase;->getDisabledSystemPackage(Ljava/lang/String;)Lcom/android/server/pm/pkg/PackageStateInternal;
-HPLcom/android/server/pm/PackageManagerInternalBase;->getDistractingPackageRestrictions(Ljava/lang/String;I)I+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
+HSPLcom/android/server/pm/PackageManagerInternalBase;->getDistractingPackageRestrictions(Ljava/lang/String;I)I+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 PLcom/android/server/pm/PackageManagerInternalBase;->getDynamicCodeLogger()Lcom/android/server/pm/dex/DynamicCodeLogger;
 HSPLcom/android/server/pm/PackageManagerInternalBase;->getEnabledComponents(Ljava/lang/String;I)Landroid/util/ArraySet;
 PLcom/android/server/pm/PackageManagerInternalBase;->getHomeActivitiesAsUser(Ljava/util/List;I)Landroid/content/ComponentName;
 HSPLcom/android/server/pm/PackageManagerInternalBase;->getInstalledApplications(JII)Ljava/util/List;
-HSPLcom/android/server/pm/PackageManagerInternalBase;->getInstantAppPackageName(I)Ljava/lang/String;+]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;
+HSPLcom/android/server/pm/PackageManagerInternalBase;->getInstantAppPackageName(I)Ljava/lang/String;+]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/PackageManagerInternalBase;->getKnownPackageNames(II)[Ljava/lang/String;+]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HPLcom/android/server/pm/PackageManagerInternalBase;->getNameForUid(I)Ljava/lang/String;+]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/PackageManagerInternalBase;->getPackage(I)Lcom/android/server/pm/parsing/pkg/AndroidPackage;+]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;
-HSPLcom/android/server/pm/PackageManagerInternalBase;->getPackage(Ljava/lang/String;)Lcom/android/server/pm/parsing/pkg/AndroidPackage;+]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;
+HSPLcom/android/server/pm/PackageManagerInternalBase;->getPackage(Ljava/lang/String;)Lcom/android/server/pm/parsing/pkg/AndroidPackage;+]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/PackageManagerInternalBase;->getPackageInfo(Ljava/lang/String;JII)Landroid/content/pm/PackageInfo;+]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
-HSPLcom/android/server/pm/PackageManagerInternalBase;->getPackageStateInternal(Ljava/lang/String;)Lcom/android/server/pm/pkg/PackageStateInternal;+]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;
+HSPLcom/android/server/pm/PackageManagerInternalBase;->getPackageStateInternal(Ljava/lang/String;)Lcom/android/server/pm/pkg/PackageStateInternal;+]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;
 PLcom/android/server/pm/PackageManagerInternalBase;->getPackageStates()Landroid/util/ArrayMap;
-HPLcom/android/server/pm/PackageManagerInternalBase;->getPackageTargetSdkVersion(Ljava/lang/String;)I
+HSPLcom/android/server/pm/PackageManagerInternalBase;->getPackageTargetSdkVersion(Ljava/lang/String;)I
 HSPLcom/android/server/pm/PackageManagerInternalBase;->getPackageUid(Ljava/lang/String;JI)I+]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
-PLcom/android/server/pm/PackageManagerInternalBase;->getPermissionGids(Ljava/lang/String;I)[I
+HSPLcom/android/server/pm/PackageManagerInternalBase;->getPermissionGids(Ljava/lang/String;I)[I
 HSPLcom/android/server/pm/PackageManagerInternalBase;->getProcessesForUid(I)Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/PackageManagerInternalBase;->getSetupWizardPackageName()Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerInternalBase;->getSharedUserApi(I)Lcom/android/server/pm/pkg/SharedUserApi;
@@ -37063,13 +38454,13 @@
 PLcom/android/server/pm/PackageManagerInternalBase;->getSuspendedPackageLauncherExtras(Ljava/lang/String;I)Landroid/os/Bundle;
 PLcom/android/server/pm/PackageManagerInternalBase;->getSuspendingPackage(Ljava/lang/String;I)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerInternalBase;->getSystemUiServiceComponent()Landroid/content/ComponentName;
-HPLcom/android/server/pm/PackageManagerInternalBase;->getUidTargetSdkVersion(I)I+]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
+HSPLcom/android/server/pm/PackageManagerInternalBase;->getUidTargetSdkVersion(I)I+]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 PLcom/android/server/pm/PackageManagerInternalBase;->getVisibilityAllowList(Ljava/lang/String;I)[I
 HSPLcom/android/server/pm/PackageManagerInternalBase;->grantImplicitAccess(ILandroid/content/Intent;IIZ)V+]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/pm/PackageManagerInternalBase;->grantImplicitAccess(ILandroid/content/Intent;IIZZ)V+]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 PLcom/android/server/pm/PackageManagerInternalBase;->hasInstantApplicationMetadata(Ljava/lang/String;I)Z
 PLcom/android/server/pm/PackageManagerInternalBase;->isApexPackage(Ljava/lang/String;)Z
-HPLcom/android/server/pm/PackageManagerInternalBase;->isCallerInstallerOfRecord(Lcom/android/server/pm/parsing/pkg/AndroidPackage;I)Z
+HSPLcom/android/server/pm/PackageManagerInternalBase;->isCallerInstallerOfRecord(Lcom/android/server/pm/parsing/pkg/AndroidPackage;I)Z
 HSPLcom/android/server/pm/PackageManagerInternalBase;->isInstantApp(Ljava/lang/String;I)Z
 HPLcom/android/server/pm/PackageManagerInternalBase;->isInstantAppInstallerComponent(Landroid/content/ComponentName;)Z
 PLcom/android/server/pm/PackageManagerInternalBase;->isOnlyCoreApps()Z
@@ -37083,7 +38474,7 @@
 PLcom/android/server/pm/PackageManagerInternalBase;->isUidPrivileged(I)Z
 PLcom/android/server/pm/PackageManagerInternalBase;->pruneInstantApps()V
 HPLcom/android/server/pm/PackageManagerInternalBase;->queryIntentActivities(Landroid/content/Intent;Ljava/lang/String;JII)Ljava/util/List;+]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
-HSPLcom/android/server/pm/PackageManagerInternalBase;->queryIntentReceivers(Landroid/content/Intent;Ljava/lang/String;JIIZ)Ljava/util/List;
+HSPLcom/android/server/pm/PackageManagerInternalBase;->queryIntentReceivers(Landroid/content/Intent;Ljava/lang/String;JIIZ)Ljava/util/List;+]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/ResolveIntentHelper;Lcom/android/server/pm/ResolveIntentHelper;
 PLcom/android/server/pm/PackageManagerInternalBase;->reconcileAppsData(IIZ)V
 HPLcom/android/server/pm/PackageManagerInternalBase;->removeDistractingPackageRestrictions(Ljava/lang/String;I)V
 HPLcom/android/server/pm/PackageManagerInternalBase;->removeNonSystemPackageSuspensions(Ljava/lang/String;I)V
@@ -37107,7 +38498,7 @@
 PLcom/android/server/pm/PackageManagerNative;->getStagedApexModuleNames()[Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerNative;->getTargetSdkVersionForPackage(Ljava/lang/String;)I
 PLcom/android/server/pm/PackageManagerNative;->getVersionCodeForPackage(Ljava/lang/String;)J
-PLcom/android/server/pm/PackageManagerNative;->hasSha256SigningCertificate(Ljava/lang/String;[B)Z
+HPLcom/android/server/pm/PackageManagerNative;->hasSha256SigningCertificate(Ljava/lang/String;[B)Z
 HSPLcom/android/server/pm/PackageManagerNative;->hasSystemFeature(Ljava/lang/String;I)Z
 HPLcom/android/server/pm/PackageManagerNative;->isAudioPlaybackCaptureAllowed([Ljava/lang/String;)[Z
 PLcom/android/server/pm/PackageManagerNative;->isPackageDebuggable(Ljava/lang/String;)Z
@@ -37126,21 +38517,23 @@
 PLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda15;-><init>(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;ILjava/lang/String;)V
 PLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda15;->run()V
 PLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda16;->run()V
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda18;-><init>(IJ)V
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda18;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda18;-><init>(Ljava/lang/String;)V
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda19;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/pm/PackageManagerService;)V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda1;->apply(Ljava/lang/Object;)Ljava/lang/Object;+]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;
-PLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda24;-><init>(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;ILjava/lang/String;Landroid/content/IIntentReceiver;[I[ILandroid/util/SparseArray;Landroid/os/Bundle;)V
-HPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda24;->run()V
+PLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda23;-><init>(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;ILjava/lang/String;Landroid/content/IIntentReceiver;[I[ILandroid/util/SparseArray;Landroid/os/Bundle;)V
+HPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda23;->run()V
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda24;-><init>()V
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda24;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda25;-><init>()V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda25;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda26;-><init>()V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda26;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda27;-><init>()V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda27;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda28;-><init>()V
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda28;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda28;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda29;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda29;-><init>()V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda29;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/pm/PackageManagerService;)V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda2;->apply(Ljava/lang/Object;)Ljava/lang/Object;
@@ -37153,35 +38546,35 @@
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda33;-><init>()V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda33;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda34;-><init>()V
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda34;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda35;-><init>()V
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda35;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda36;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda34;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda35;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda35;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda36;-><init>()V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda36;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda37;-><init>()V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda37;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda38;-><init>()V
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda38;-><init>(Lcom/android/server/pm/verify/domain/DomainVerificationService;)V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda38;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda39;-><init>(Lcom/android/server/pm/verify/domain/DomainVerificationService;)V
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda39;-><init>()V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda39;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda3;-><init>(Ljava/lang/String;Z)V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda40;-><init>()V
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda40;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda41;-><init>()V
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda40;->produce(Ljava/lang/Class;)Ljava/lang/Object;
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda41;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda41;->produce(Ljava/lang/Class;)Ljava/lang/Object;
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda42;-><init>(Landroid/content/Context;)V
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda42;->produce(Ljava/lang/Class;)Ljava/lang/Object;
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda42;-><init>()V
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda42;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda43;-><init>()V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda43;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda44;-><init>()V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda44;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda45;-><init>()V
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda45;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda46;-><init>(Lcom/android/server/pm/PackageManagerService;)V
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda47;-><init>(Landroid/content/Context;Lcom/android/server/pm/Installer;Ljava/lang/Object;ZLcom/android/server/pm/PackageManagerTracedLock;)V
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda45;-><init>(Lcom/android/server/pm/PackageManagerService;)V
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda46;-><init>(Landroid/content/Context;Lcom/android/server/pm/Installer;Ljava/lang/Object;ZLcom/android/server/pm/PackageManagerTracedLock;)V
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda46;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda47;-><init>(Lcom/android/server/pm/verify/domain/DomainVerificationService;Landroid/os/Handler;Lcom/android/server/pm/PackageManagerTracedLock;)V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda47;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda48;-><init>(Lcom/android/server/pm/verify/domain/DomainVerificationService;Landroid/os/Handler;Lcom/android/server/pm/PackageManagerTracedLock;)V
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda48;-><init>()V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda48;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda49;-><init>()V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda49;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
@@ -37195,27 +38588,25 @@
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda52;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda53;-><init>()V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda53;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda54;-><init>()V
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda54;->produce(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda54;-><init>(Lcom/android/server/pm/PackageManagerService;)V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda55;-><init>(Lcom/android/server/pm/PackageManagerService;)V
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda55;->get()Ljava/lang/Object;
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda56;-><init>(Lcom/android/server/pm/PackageManagerService;)V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda56;->get()Ljava/lang/Object;
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda57;-><init>(Lcom/android/server/pm/PackageManagerService;)V
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda57;-><init>(Lcom/android/server/pm/PackageManagerServiceInjector;)V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda57;->get()Ljava/lang/Object;
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda58;-><init>(Lcom/android/server/pm/PackageManagerServiceInjector;)V
-PLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda58;->get()Ljava/lang/Object;
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda59;-><init>(Landroid/content/Context;)V
-HPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda59;->get()Ljava/lang/Object;
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda58;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda58;->get()Ljava/lang/Object;
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda59;-><init>()V
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda59;->get()Ljava/lang/Object;
 PLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda5;-><init>(IZZ)V
 PLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;)V
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda60;-><init>()V
-HPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda60;->get()Ljava/lang/Object;
-PLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda62;-><init>(Lcom/android/server/pm/PackageManagerService;I)V
-PLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda62;->run()V
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda63;-><init>(ILjava/util/function/Consumer;)V
+PLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda61;-><init>(Lcom/android/server/pm/PackageManagerService;I)V
+PLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda61;->run()V
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda62;-><init>(ILjava/util/function/Consumer;)V
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda62;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda63;-><init>(Ljava/lang/String;ILandroid/content/pm/overlay/OverlayPaths;Landroid/util/ArrayMap;)V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda63;->accept(Ljava/lang/Object;)V
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda64;-><init>(Ljava/lang/String;ILandroid/content/pm/overlay/OverlayPaths;Landroid/util/ArrayMap;)V
-HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda64;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;I)V
 HSPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda6;->run()V
 HPLcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda7;-><init>(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;ZLjava/util/ArrayList;ILjava/lang/String;[I[ILandroid/util/SparseArray;)V
@@ -37268,10 +38659,11 @@
 HSPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;-><init>(Lcom/android/server/pm/PackageManagerService;)V
 HSPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->checkPackageStartable(Ljava/lang/String;I)V+]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;
 PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->clearApplicationUserData(Ljava/lang/String;Landroid/content/pm/IPackageDataObserver;I)V
-HPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->clearCrossProfileIntentFilters(ILjava/lang/String;)V
+HPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->clearCrossProfileIntentFilters(ILjava/lang/String;)V+]Lcom/android/server/pm/WatchedIntentResolver;Lcom/android/server/pm/CrossProfileIntentResolver;]Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerServiceInjector;]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/IntentResolver;Lcom/android/server/pm/CrossProfileIntentResolver;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Lcom/android/server/pm/CrossProfileIntentFilter;Lcom/android/server/pm/CrossProfileIntentFilter;
 PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->deleteApplicationCacheFiles(Ljava/lang/String;Landroid/content/pm/IPackageDataObserver;)V
 PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->deleteApplicationCacheFilesAsUser(Ljava/lang/String;ILandroid/content/pm/IPackageDataObserver;)V
 HPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->enterSafeMode()V
 PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->extendVerificationTimeout(IIJ)V
 PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->flushPackageRestrictionsAsUser(I)V
 PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->freeStorageAndNotify(Ljava/lang/String;JILandroid/content/pm/IPackageDataObserver;)V
@@ -37282,8 +38674,8 @@
 PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->getInstantApps(I)Landroid/content/pm/ParceledListSlice;
 PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->getLastChosenActivity(Landroid/content/Intent;Ljava/lang/String;I)Landroid/content/pm/ResolveInfo;
 HSPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->getPermissionControllerPackageName()Ljava/lang/String;
-PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->getRuntimePermissionsVersion(I)I
-HPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->getSplashScreenTheme(Ljava/lang/String;I)Ljava/lang/String;
+HSPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->getRuntimePermissionsVersion(I)I
+HSPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->getSplashScreenTheme(Ljava/lang/String;I)Ljava/lang/String;
 HPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->getSystemAvailableFeatures()Landroid/content/pm/ParceledListSlice;
 PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->getUnsuspendablePackagesForUser([Ljava/lang/String;I)[Ljava/lang/String;
 PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->installExistingPackageAsUser(Ljava/lang/String;IIILjava/util/List;)I
@@ -37291,16 +38683,16 @@
 PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->isPackageStateProtected(Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->isProtectedBroadcast(Ljava/lang/String;)Z+]Ljava/lang/String;Ljava/lang/String;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->lambda$deleteApplicationCacheFilesAsUser$1(Ljava/lang/String;IIILandroid/content/pm/IPackageDataObserver;)V
-PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->lambda$extendVerificationTimeout$2(IIIJ)V
+HPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->lambda$extendVerificationTimeout$2(IIIJ)V
 PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->lambda$freeStorageAndNotify$4(Ljava/lang/String;JILandroid/content/pm/IPackageDataObserver;)V
 PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->lambda$setApplicationCategoryHint$8(ILcom/android/server/pm/pkg/mutate/PackageStateWrite;)V
 PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->lambda$setApplicationCategoryHint$9(Ljava/lang/String;Ljava/lang/String;ILcom/android/server/pm/pkg/mutate/PackageStateMutator$InitialState;Lcom/android/server/pm/Computer;)Lcom/android/server/pm/pkg/mutate/PackageStateMutator$Result;
 PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->lambda$setApplicationHiddenSettingAsUser$10(IZLcom/android/server/pm/pkg/mutate/PackageStateWrite;)V
 PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->lambda$setSplashScreenTheme$18(ILjava/lang/String;Lcom/android/server/pm/pkg/mutate/PackageStateWrite;)V
 PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->lambda$setUpdateAvailable$19(ZLcom/android/server/pm/pkg/mutate/PackageStateWrite;)V
-HSPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->logAppProcessStartIfNeeded(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;I)V+]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
+HSPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->logAppProcessStartIfNeeded(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;I)V+]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/ProcessLoggingHandler;Lcom/android/server/pm/ProcessLoggingHandler;
 PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->makeProviderVisible(ILjava/lang/String;)V
-HSPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->notifyDexLoad(Ljava/lang/String;Ljava/util/Map;Ljava/lang/String;)V+]Lcom/android/server/pm/dex/DexManager;Lcom/android/server/pm/dex/DexManager;]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
+HSPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->notifyDexLoad(Ljava/lang/String;Ljava/util/Map;Ljava/lang/String;)V+]Lcom/android/server/pm/dex/DexManager;Lcom/android/server/pm/dex/DexManager;]Lcom/android/server/pm/IPackageManagerBase;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->notifyPackageUse(Ljava/lang/String;I)V
 HPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->notifyPackagesReplacedReceived([Ljava/lang/String;)V
 HPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->onShellCommand(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;Landroid/os/ShellCallback;Landroid/os/ResultReceiver;)V
@@ -37316,10 +38708,10 @@
 PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->setDistractingPackageRestrictionsAsUser([Ljava/lang/String;II)[Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->setPackageStoppedState(Ljava/lang/String;ZI)V+]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;
 PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->setPackagesSuspendedAsUser([Ljava/lang/String;ZLandroid/os/PersistableBundle;Landroid/os/PersistableBundle;Landroid/content/pm/SuspendDialogInfo;Ljava/lang/String;I)[Ljava/lang/String;
-PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->setRuntimePermissionsVersion(II)V
+HSPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->setRuntimePermissionsVersion(II)V
 PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->setSplashScreenTheme(Ljava/lang/String;Ljava/lang/String;I)V
 PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->setUpdateAvailable(Ljava/lang/String;Z)V
-PLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->verifyPendingInstall(II)V
+HPLcom/android/server/pm/PackageManagerService$IPackageManagerImpl;->verifyPendingInstall(II)V
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl$$ExternalSyntheticLambda0;-><init>(Ljava/util/ArrayList;)V
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
 PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;Ljava/lang/String;)V
@@ -37338,7 +38730,7 @@
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getContext()Landroid/content/Context;
 PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getDexManager()Lcom/android/server/pm/dex/DexManager;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getDisabledSystemPackageName(Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getDistractingPackageHelper()Lcom/android/server/pm/DistractingPackageHelper;
+HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getDistractingPackageHelper()Lcom/android/server/pm/DistractingPackageHelper;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getIncrementalStatesInfo(Ljava/lang/String;II)Landroid/content/pm/IncrementalStatesInfo;+]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;
 PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getInstantAppRegistry()Lcom/android/server/pm/InstantAppRegistry;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getPackageList(Landroid/content/pm/PackageManagerInternal$PackageListObserver;)Lcom/android/server/pm/PackageList;
@@ -37348,11 +38740,12 @@
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getSuspendPackageHelper()Lcom/android/server/pm/SuspendPackageHelper;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->getTargetPackageNames(I)Ljava/util/List;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->hasSignatureCapability(III)Z
+PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isDataRestoreSafe(Landroid/content/pm/Signature;Ljava/lang/String;)Z
 PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isDataRestoreSafe([BLjava/lang/String;)Z
-HPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isPackagePersistent(Ljava/lang/String;)Z
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isPackagePersistent(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isPermissionUpgradeNeeded(I)Z
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isPlatformSigned(Ljava/lang/String;)Z
-PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isResolveActivityComponent(Landroid/content/pm/ComponentInfo;)Z
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isResolveActivityComponent(Landroid/content/pm/ComponentInfo;)Z
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->isSameApp(Ljava/lang/String;II)Z+]Lcom/android/server/pm/PackageManagerInternalBase;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->lambda$getPackageList$0(Ljava/util/ArrayList;Lcom/android/server/pm/pkg/PackageStateInternal;)V
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->lambda$getTargetPackageNames$2(Ljava/util/List;Lcom/android/server/pm/pkg/PackageStateInternal;)V
@@ -37368,60 +38761,59 @@
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->setEnabledOverlayPackages(ILjava/lang/String;Landroid/content/pm/overlay/OverlayPaths;Ljava/util/Set;)Z
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->setExternalSourcesPolicy(Landroid/content/pm/PackageManagerInternal$ExternalSourcesPolicy;)V
 PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->setIntegrityVerificationResult(II)V
-PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->updateRuntimePermissionsFingerprint(I)V
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->updateRuntimePermissionsFingerprint(I)V
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->writePermissionSettings([IZ)V+]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;
-PLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->writeSettings(Z)V
+HSPLcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;->writeSettings(Z)V
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerLocalImpl;-><init>(Lcom/android/server/pm/PackageManagerService;)V
 HSPLcom/android/server/pm/PackageManagerService$PackageManagerLocalImpl;-><init>(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService$PackageManagerLocalImpl-IA;)V
 HSPLcom/android/server/pm/PackageManagerService$Snapshot;-><init>(Lcom/android/server/pm/PackageManagerService;I)V+]Lcom/android/server/pm/AppsFilterImpl;Lcom/android/server/pm/AppsFilterImpl;]Lcom/android/server/pm/SharedLibrariesImpl;Lcom/android/server/pm/SharedLibrariesImpl;]Lcom/android/server/utils/WatchedSparseBooleanArray;Lcom/android/server/utils/WatchedSparseBooleanArray;]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;]Lcom/android/server/pm/InstantAppRegistry;Lcom/android/server/pm/InstantAppRegistry;]Lcom/android/server/pm/resolution/ComponentResolver;Lcom/android/server/pm/resolution/ComponentResolver;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/utils/SnapshotCache;Lcom/android/server/utils/SnapshotCache$Auto;
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$-emd08hxAD0TMJl8PW66mms4keE(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Landroid/util/DisplayMetrics;
+HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$06cl11JVxK2M-KiG545KBT6wM3w(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;I)V
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$3nV8LCHQwMsfkLb9WAOfdTECy1A(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/permission/LegacyPermissionManagerInternal;
+HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$48BQfGh5Vbii4o2NvOcy1YlUUbM(Ljava/lang/String;ILandroid/content/pm/overlay/OverlayPaths;Landroid/util/ArrayMap;Lcom/android/server/pm/pkg/mutate/PackageStateMutator;)V
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$4UnrHvTGNuoffERqdWYgQLU6_GM(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/SharedLibrariesImpl;
+HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$4aackrVkT9ujjJlRM8LM9obNOwk(Ljava/lang/String;ZLcom/android/server/pm/pkg/mutate/PackageStateMutator;)V
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$5Y3C28ch_tvbgkIYgKzvUas479c(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/parsing/PackageParser2;
 PLcom/android/server/pm/PackageManagerService;->$r8$lambda$7_Yo6g4--1pBcweVbEYDS-WclGE(Lcom/android/server/pm/PackageManagerService;)Landroid/content/pm/PackageManagerInternal;
-PLcom/android/server/pm/PackageManagerService;->$r8$lambda$7sGwzHkuDERlVAa1zk3GIboN608(IZZLcom/android/server/pm/pkg/mutate/PackageStateWrite;)V
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$9CLw5GiaXuIl-Yq7T3EuyGtK7zo(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/resolution/ComponentResolver;
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$BH-ShwahTnRCa6U0uJN_HtM_FeA(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/dex/DexManager;
+PLcom/android/server/pm/PackageManagerService;->$r8$lambda$BnwvzELhaLFkkCG0Sw4ME6XFBS0(IZZLcom/android/server/pm/pkg/mutate/PackageStateWrite;)V
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$EXtx1gLZp4NDKyYseJdaA5dM0aM(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/ApexManager;
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$FVsWli7jD7VAvKXefT3eCbFzZPk(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/PackageInstallerService;
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$FZS3tEv1ZB74eaK0MlMASjsxJoQ(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/dex/ArtManagerService;
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$LgfEnE781TAb4yyB0SDbf_DNpQ4(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/compat/PlatformCompat;
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$Lvup5VwrlYZp047YF45fArNHin8(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Landroid/os/incremental/IncrementalManager;
-HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$MWp8bJSfUfrq_MlIqPsAhMZ7tYA(Ljava/lang/String;ILandroid/content/pm/overlay/OverlayPaths;Landroid/util/ArrayMap;Lcom/android/server/pm/pkg/mutate/PackageStateMutator;)V
-HPLcom/android/server/pm/PackageManagerService;->$r8$lambda$MopaOxYLEec2muZhI_SyhYWx-7Q(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;ZLjava/util/ArrayList;ILjava/lang/String;[I[ILandroid/util/SparseArray;)V
-PLcom/android/server/pm/PackageManagerService;->$r8$lambda$NjHqEQDs0y1-gIuEOUY8Cr_zQZg(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;ILjava/lang/String;)V
-PLcom/android/server/pm/PackageManagerService;->$r8$lambda$OMoW5RVEAyJ45IIWsyGM0ZyZ0gY(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;I[I[IILandroid/util/SparseArray;)V
+PLcom/android/server/pm/PackageManagerService;->$r8$lambda$Qsbu_8Y4FmjAEK_L1KGAEpicndM(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;I[I[IILandroid/util/SparseArray;)V
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$RLF1P7XnfnPPStSJB6LaezY2Vrw(Lcom/android/server/pm/verify/domain/DomainVerificationService;Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/verify/domain/DomainVerificationManagerInternal;
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$S31Tbyj3FfLbGw4UFZIy9nB3SsU(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/AppsFilterImpl;
+HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$ShFlwtqPiX7bUWGGoM1RnxkSvpM(ILjava/util/function/Consumer;Lcom/android/server/pm/pkg/PackageStateInternal;)V
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$UhV0oljfX0ttcubTei2iU4Wv6-I(Lcom/android/server/pm/PackageManagerService;Landroid/os/Handler;Ljava/util/List;IILjava/lang/String;[Ljava/security/cert/Certificate;Landroid/content/pm/IOnChecksumsReadyListener;)V
-HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$VF8SJ78kosFSf8bs2ooVWs8uQ7o(Ljava/lang/String;ZLcom/android/server/pm/pkg/mutate/PackageStateMutator;)V
+PLcom/android/server/pm/PackageManagerService;->$r8$lambda$VL-AQVPk0Tlpa2OB6txpYUYk5Ms(Lcom/android/server/pm/PackageManagerService;I)V
+PLcom/android/server/pm/PackageManagerService;->$r8$lambda$WMX60dj2EuEKa4J29qu6TalHlJQ(ILandroid/content/ComponentName;Ljava/lang/String;Ljava/lang/Integer;Lcom/android/server/pm/pkg/mutate/PackageStateWrite;)V
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$XdSn_LqDxKw9LrnQxkHijr0WN9s(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/ModuleInfoProvider;
-HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$afJjeOxCB9EhHOcts7fbziDorVg(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;I)V
+PLcom/android/server/pm/PackageManagerService;->$r8$lambda$a6ehaz9gjF1fUK8jrzzT4AaJsCY(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;ILjava/lang/String;Landroid/content/IIntentReceiver;[I[ILandroid/util/SparseArray;Landroid/os/Bundle;)V
+PLcom/android/server/pm/PackageManagerService;->$r8$lambda$aGKeZfeL6OlKEqMuNemJPfF8T04(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;ZLjava/util/ArrayList;ILjava/lang/String;[I[ILandroid/util/SparseArray;)V
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$bkmLyQ8Y0bxlmolLu2vVMGOWomw(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/parsing/PackageParser2;
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$bs1uVv6FmNxmfh1UMbJYyQfWnr4(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/dex/ViewCompiler;
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$bzqAuyxVBNpjjzdPiA9Or-GLcio(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;Landroid/content/ComponentName;)Lcom/android/server/pm/InstantAppResolverConnection;
-HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$csJ-Ida1aOZDf_z3ICBbePlCNFM(ILjava/util/function/Consumer;Lcom/android/server/pm/pkg/PackageStateInternal;)V
+PLcom/android/server/pm/PackageManagerService;->$r8$lambda$ctUqTV5arqc96Vwl2o3VwPOD35c(Lcom/android/server/pm/PackageManagerService;[ILjava/lang/String;Z)V
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$dbKH8RTu0M6cwhpYbtv0bHAzR2A(Landroid/content/Context;Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/DefaultAppProvider;
-PLcom/android/server/pm/PackageManagerService;->$r8$lambda$fE2l6s2CMIZ5dgPs049XGOWrtaQ(Lcom/android/server/pm/PackageManagerService;I)V
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$fiwhGFI1ctp6SsGXHoZG8RphYOI(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/BackgroundDexOptService;
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$fr7sN36RkEGChK-fWz6Lxabw_BM(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/PackageDexOptimizer;
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$g_By2FBnfyMCgCcXcGDhODE6ZOE(Lcom/android/server/pm/PackageManagerService;)Landroid/content/pm/ResolveInfo;
-PLcom/android/server/pm/PackageManagerService;->$r8$lambda$jfXfN6f8fg4oUYoc_wLsQO6HyIg(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;ILjava/lang/String;Landroid/content/IIntentReceiver;[I[ILandroid/util/SparseArray;Landroid/os/Bundle;)V
-PLcom/android/server/pm/PackageManagerService;->$r8$lambda$kJBcgNRilCQzOaTBMU79nP1QvjY()Lcom/android/server/pm/UserManagerInternal;
+HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$kJBcgNRilCQzOaTBMU79nP1QvjY()Lcom/android/server/pm/UserManagerInternal;
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$kiYs6M_TU13CHmdufJ1OYExCLpc(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Landroid/os/Handler;
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$mZIKQxXQghHu5L0JVctlxNqEMUY(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/SystemConfig;
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$pCLNqmjsJp36alC6sG8GNqU_jZk(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/parsing/PackageParser2;
 PLcom/android/server/pm/PackageManagerService;->$r8$lambda$sd2qzcDsM5ekPMSfu9FTVWWgx3M(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Landroid/app/backup/IBackupManager;
-HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$tTFUhV3OUgLnUJn6dwWP9TWgQBE(IJLcom/android/server/pm/pkg/mutate/PackageStateWrite;)V
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$u5xqJKe4zRZ5ZYQLkYlpkLmXaBo(Landroid/content/Context;Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/permission/PermissionManagerServiceInternal;
-PLcom/android/server/pm/PackageManagerService;->$r8$lambda$urI1dHg74qr71p9l-aIkifw6tdc(ILandroid/content/ComponentName;Ljava/lang/String;Ljava/lang/Integer;Lcom/android/server/pm/pkg/mutate/PackageStateWrite;)V
-HPLcom/android/server/pm/PackageManagerService;->$r8$lambda$vRQ1UvYLZHuM62i20dyKWQ3Tixc(Landroid/content/Context;)Landroid/app/role/RoleManager;
-PLcom/android/server/pm/PackageManagerService;->$r8$lambda$vwAxjuO10TBuXOJVzse35Vytb3s(Lcom/android/server/pm/PackageManagerService;[ILjava/lang/String;Z)V
+HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$vRQ1UvYLZHuM62i20dyKWQ3Tixc(Landroid/content/Context;)Landroid/app/role/RoleManager;
+PLcom/android/server/pm/PackageManagerService;->$r8$lambda$wTU2Lp2ZPfg1yFeNdM3kNX0yi04(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;ILjava/lang/String;)V
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$xwVgG8v2EQhSHLlYLa072Qn3O2Q(Lcom/android/server/pm/verify/domain/DomainVerificationService;Landroid/os/Handler;Lcom/android/server/pm/PackageManagerTracedLock;Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/Settings;
 HSPLcom/android/server/pm/PackageManagerService;->$r8$lambda$zxuZ7XOX4ni_q9tzjZHHDMoyGfM(Landroid/content/Context;Lcom/android/server/pm/Installer;Ljava/lang/Object;ZLcom/android/server/pm/PackageManagerTracedLock;Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/UserManagerService;
 HSPLcom/android/server/pm/PackageManagerService;->-$$Nest$fgetmAndroidApplication(Lcom/android/server/pm/PackageManagerService;)Landroid/content/pm/ApplicationInfo;
 PLcom/android/server/pm/PackageManagerService;->-$$Nest$fgetmAppDataHelper(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/AppDataHelper;
-PLcom/android/server/pm/PackageManagerService;->-$$Nest$fgetmAvailableFeatures(Lcom/android/server/pm/PackageManagerService;)Landroid/util/ArrayMap;
+HPLcom/android/server/pm/PackageManagerService;->-$$Nest$fgetmAvailableFeatures(Lcom/android/server/pm/PackageManagerService;)Landroid/util/ArrayMap;
 PLcom/android/server/pm/PackageManagerService;->-$$Nest$fgetmCacheDir(Lcom/android/server/pm/PackageManagerService;)Ljava/io/File;
 PLcom/android/server/pm/PackageManagerService;->-$$Nest$fgetmDefaultAppProvider(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/DefaultAppProvider;
 HSPLcom/android/server/pm/PackageManagerService;->-$$Nest$fgetmDexManager(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/dex/DexManager;
@@ -37447,9 +38839,11 @@
 HSPLcom/android/server/pm/PackageManagerService;->-$$Nest$fgetmSharedLibraries(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/SharedLibrariesImpl;
 PLcom/android/server/pm/PackageManagerService;->-$$Nest$fgetmStorageEventHelper(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/StorageEventHelper;
 HSPLcom/android/server/pm/PackageManagerService;->-$$Nest$fgetmSuspendPackageHelper(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/SuspendPackageHelper;
+PLcom/android/server/pm/PackageManagerService;->-$$Nest$fgetmSystemReady(Lcom/android/server/pm/PackageManagerService;)Z
 HSPLcom/android/server/pm/PackageManagerService;->-$$Nest$fgetmWebInstantAppsDisabled(Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/utils/WatchedSparseBooleanArray;
+PLcom/android/server/pm/PackageManagerService;->-$$Nest$fputmSafeMode(Lcom/android/server/pm/PackageManagerService;Z)V
 PLcom/android/server/pm/PackageManagerService;->-$$Nest$mclearApplicationUserDataLIF(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/Computer;Ljava/lang/String;I)Z
-PLcom/android/server/pm/PackageManagerService;->-$$Nest$menforceAdjustRuntimePermissionsPolicyOrUpgradeRuntimePermissions(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;)V
+HSPLcom/android/server/pm/PackageManagerService;->-$$Nest$menforceAdjustRuntimePermissionsPolicyOrUpgradeRuntimePermissions(Lcom/android/server/pm/PackageManagerService;Ljava/lang/String;)V
 PLcom/android/server/pm/PackageManagerService;->-$$Nest$menforceCanSetDistractingPackageRestrictionsAsUser(Lcom/android/server/pm/PackageManagerService;IILjava/lang/String;)V
 PLcom/android/server/pm/PackageManagerService;->-$$Nest$menforceCanSetPackagesSuspendedAsUser(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/Computer;Ljava/lang/String;IILjava/lang/String;)V
 PLcom/android/server/pm/PackageManagerService;->-$$Nest$menforceOwnerRights(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/Computer;Ljava/lang/String;I)V
@@ -37466,7 +38860,8 @@
 HPLcom/android/server/pm/PackageManagerService;->addCrossProfileIntentFilter(Lcom/android/server/pm/Computer;Lcom/android/server/pm/WatchedIntentFilter;Ljava/lang/String;III)V
 PLcom/android/server/pm/PackageManagerService;->addInstallerPackageName(Lcom/android/server/pm/InstallSource;)V
 HSPLcom/android/server/pm/PackageManagerService;->addInstrumentation(Landroid/content/ComponentName;Lcom/android/server/pm/pkg/component/ParsedInstrumentation;)V
-HSPLcom/android/server/pm/PackageManagerService;->checkPackageStartable(Lcom/android/server/pm/Computer;Ljava/lang/String;I)V+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
+HSPLcom/android/server/pm/PackageManagerService;->applyUpdatedSystemOverlayPaths()V
+HSPLcom/android/server/pm/PackageManagerService;->checkPackageStartable(Lcom/android/server/pm/Computer;Ljava/lang/String;I)V+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/pm/PackageManagerService;->checkPermission(Ljava/lang/String;Ljava/lang/String;I)I+]Lcom/android/server/pm/permission/PermissionManagerServiceInternal;Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;
 PLcom/android/server/pm/PackageManagerService;->cleanUpUser(Lcom/android/server/pm/UserManagerService;I)V
 PLcom/android/server/pm/PackageManagerService;->clearApplicationUserDataLIF(Lcom/android/server/pm/Computer;Ljava/lang/String;I)Z
@@ -37476,28 +38871,28 @@
 HSPLcom/android/server/pm/PackageManagerService;->createLiveComputer()Lcom/android/server/pm/ComputerLocked;
 PLcom/android/server/pm/PackageManagerService;->createNewUser(ILjava/util/Set;[Ljava/lang/String;)V
 HPLcom/android/server/pm/PackageManagerService;->decodeCertificates(Ljava/util/List;)[Ljava/security/cert/Certificate;
-PLcom/android/server/pm/PackageManagerService;->deleteOatArtifactsOfPackage(Lcom/android/server/pm/Computer;Ljava/lang/String;)J
+HPLcom/android/server/pm/PackageManagerService;->deleteOatArtifactsOfPackage(Lcom/android/server/pm/Computer;Ljava/lang/String;)J
 PLcom/android/server/pm/PackageManagerService;->deletePackageVersioned(Landroid/content/pm/VersionedPackage;Landroid/content/pm/IPackageDeleteObserver2;II)V
 HSPLcom/android/server/pm/PackageManagerService;->disableSkuSpecificApps()V
-PLcom/android/server/pm/PackageManagerService;->enforceAdjustRuntimePermissionsPolicyOrUpgradeRuntimePermissions(Ljava/lang/String;)V
+HSPLcom/android/server/pm/PackageManagerService;->enforceAdjustRuntimePermissionsPolicyOrUpgradeRuntimePermissions(Ljava/lang/String;)V
 PLcom/android/server/pm/PackageManagerService;->enforceCanSetDistractingPackageRestrictionsAsUser(IILjava/lang/String;)V
 PLcom/android/server/pm/PackageManagerService;->enforceCanSetPackagesSuspendedAsUser(Lcom/android/server/pm/Computer;Ljava/lang/String;IILjava/lang/String;)V
 PLcom/android/server/pm/PackageManagerService;->enforceOwnerRights(Lcom/android/server/pm/Computer;Ljava/lang/String;I)V
 HSPLcom/android/server/pm/PackageManagerService;->ensureSystemPackageName(Lcom/android/server/pm/Computer;Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/pm/PackageManagerService;->extrasForInstallResult(Lcom/android/server/pm/PackageInstalledInfo;)Landroid/os/Bundle;
-HSPLcom/android/server/pm/PackageManagerService;->filterPackageStateForInstalledAndFiltered(Lcom/android/server/pm/Computer;Ljava/lang/String;II)Lcom/android/server/pm/pkg/PackageStateInternal;
+HSPLcom/android/server/pm/PackageManagerService;->filterPackageStateForInstalledAndFiltered(Lcom/android/server/pm/Computer;Ljava/lang/String;II)Lcom/android/server/pm/pkg/PackageStateInternal;+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 PLcom/android/server/pm/PackageManagerService;->finishPackageInstall(IZ)V
 HPLcom/android/server/pm/PackageManagerService;->flushPackageRestrictionsAsUserInternalLocked(I)V
 HSPLcom/android/server/pm/PackageManagerService;->forEachInstalledPackage(Lcom/android/server/pm/Computer;Ljava/util/function/Consumer;I)V
-HSPLcom/android/server/pm/PackageManagerService;->forEachPackage(Lcom/android/server/pm/Computer;Ljava/util/function/Consumer;)V
+HSPLcom/android/server/pm/PackageManagerService;->forEachPackage(Lcom/android/server/pm/Computer;Ljava/util/function/Consumer;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Ljava/util/function/Consumer;Lcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda17;,Lcom/android/server/policy/PermissionPolicyService$$ExternalSyntheticLambda5;,Lcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda1;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/PackageManagerService;->forEachPackageSetting(Ljava/util/function/Consumer;)V+]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Ljava/util/function/Consumer;Lcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda10;
-HSPLcom/android/server/pm/PackageManagerService;->forEachPackageState(Landroid/util/ArrayMap;Ljava/util/function/Consumer;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/function/Consumer;Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda64;,Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl$$ExternalSyntheticLambda0;,Lcom/android/server/pm/DexOptHelper$$ExternalSyntheticLambda7;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda63;,Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl$$ExternalSyntheticLambda3;
+HSPLcom/android/server/pm/PackageManagerService;->forEachPackageState(Landroid/util/ArrayMap;Ljava/util/function/Consumer;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/function/Consumer;Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda62;,Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl$$ExternalSyntheticLambda3;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda63;,Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl$$ExternalSyntheticLambda0;,Lcom/android/server/pm/DexOptHelper$$ExternalSyntheticLambda7;
 HSPLcom/android/server/pm/PackageManagerService;->forEachPackageState(Lcom/android/server/pm/Computer;Ljava/util/function/Consumer;)V
 PLcom/android/server/pm/PackageManagerService;->freeAllAppCacheAboveQuota(Ljava/lang/String;)V
 HPLcom/android/server/pm/PackageManagerService;->freeStorage(Ljava/lang/String;JI)V
 HSPLcom/android/server/pm/PackageManagerService;->freezePackage(Ljava/lang/String;ILjava/lang/String;)Lcom/android/server/pm/PackageFreezer;
-PLcom/android/server/pm/PackageManagerService;->freezePackage(Ljava/lang/String;Ljava/lang/String;)Lcom/android/server/pm/PackageFreezer;
-PLcom/android/server/pm/PackageManagerService;->freezePackageForDelete(Ljava/lang/String;IILjava/lang/String;)Lcom/android/server/pm/PackageFreezer;
+HSPLcom/android/server/pm/PackageManagerService;->freezePackage(Ljava/lang/String;Ljava/lang/String;)Lcom/android/server/pm/PackageFreezer;
+HSPLcom/android/server/pm/PackageManagerService;->freezePackageForDelete(Ljava/lang/String;IILjava/lang/String;)Lcom/android/server/pm/PackageFreezer;
 PLcom/android/server/pm/PackageManagerService;->getActiveLauncherPackageName(I)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->getAppInstallDir()Ljava/io/File;
 HSPLcom/android/server/pm/PackageManagerService;->getCacheDir()Ljava/io/File;
@@ -37505,7 +38900,7 @@
 HSPLcom/android/server/pm/PackageManagerService;->getDefParseFlags()I
 HSPLcom/android/server/pm/PackageManagerService;->getDefaultAppProvider()Lcom/android/server/pm/DefaultAppProvider;
 PLcom/android/server/pm/PackageManagerService;->getDefaultTimeouts()Ljava/lang/String;
-PLcom/android/server/pm/PackageManagerService;->getDevicePolicyManager()Landroid/app/admin/IDevicePolicyManager;
+HSPLcom/android/server/pm/PackageManagerService;->getDevicePolicyManager()Landroid/app/admin/IDevicePolicyManager;
 HSPLcom/android/server/pm/PackageManagerService;->getDexManager()Lcom/android/server/pm/dex/DexManager;
 HSPLcom/android/server/pm/PackageManagerService;->getDisabledPackageSettingForMutation(Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageManagerService;->getDomainVerificationAgentComponentNameLPr(Lcom/android/server/pm/Computer;)Landroid/content/ComponentName;
@@ -37521,6 +38916,7 @@
 HSPLcom/android/server/pm/PackageManagerService;->getOrCreateCompilerPackageStats(Lcom/android/server/pm/parsing/pkg/AndroidPackage;)Lcom/android/server/pm/CompilerStats$PackageStats;
 HSPLcom/android/server/pm/PackageManagerService;->getOrCreateCompilerPackageStats(Ljava/lang/String;)Lcom/android/server/pm/CompilerStats$PackageStats;
 HSPLcom/android/server/pm/PackageManagerService;->getPackageFromComponentString(I)Ljava/lang/String;
+PLcom/android/server/pm/PackageManagerService;->getPackageInstallerPackageName()Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->getPackageProperty()Lcom/android/server/pm/PackageProperty;
 HSPLcom/android/server/pm/PackageManagerService;->getPackageSettingForMutation(Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageManagerService;->getPackageUsage()Lcom/android/server/pm/PackageUsage;
@@ -37542,7 +38938,7 @@
 HSPLcom/android/server/pm/PackageManagerService;->getSetupWizardPackageNameImpl(Lcom/android/server/pm/Computer;)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerService;->getStorageManagerPackageName(Lcom/android/server/pm/Computer;)Ljava/lang/String;
 PLcom/android/server/pm/PackageManagerService;->getSystemPackageScanFlags(Ljava/io/File;)I
-HSPLcom/android/server/pm/PackageManagerService;->grantImplicitAccess(Lcom/android/server/pm/Computer;ILandroid/content/Intent;IIZZ)V+]Lcom/android/server/pm/AppsFilterImpl;Lcom/android/server/pm/AppsFilterImpl;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/InstantAppRegistry;Lcom/android/server/pm/InstantAppRegistry;
+HSPLcom/android/server/pm/PackageManagerService;->grantImplicitAccess(Lcom/android/server/pm/Computer;ILandroid/content/Intent;IIZZ)V+]Lcom/android/server/pm/AppsFilterImpl;Lcom/android/server/pm/AppsFilterImpl;]Lcom/android/server/pm/InstantAppRegistry;Lcom/android/server/pm/InstantAppRegistry;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/PackageManagerService;->hasSystemFeature(Ljava/lang/String;I)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/PackageManagerService;->installAllowlistedSystemPackages()V
 HSPLcom/android/server/pm/PackageManagerService;->invalidatePackageInfoCache()V
@@ -37552,15 +38948,15 @@
 HSPLcom/android/server/pm/PackageManagerService;->isFirstBoot()Z
 PLcom/android/server/pm/PackageManagerService;->isHistoricalPackageUsageAvailable()Z
 HSPLcom/android/server/pm/PackageManagerService;->isOnlyCoreApps()Z
-HPLcom/android/server/pm/PackageManagerService;->isPackageDeviceAdmin(Ljava/lang/String;I)Z
+HSPLcom/android/server/pm/PackageManagerService;->isPackageDeviceAdmin(Ljava/lang/String;I)Z
 PLcom/android/server/pm/PackageManagerService;->isPackageDeviceAdminOnAnyUser(Lcom/android/server/pm/Computer;Ljava/lang/String;)Z
 HSPLcom/android/server/pm/PackageManagerService;->isPreNMR1Upgrade()Z
 HSPLcom/android/server/pm/PackageManagerService;->isPreNUpgrade()Z
 PLcom/android/server/pm/PackageManagerService;->isStorageLow()Z
-PLcom/android/server/pm/PackageManagerService;->isSystemReady()Z
+HSPLcom/android/server/pm/PackageManagerService;->isSystemReady()Z
 PLcom/android/server/pm/PackageManagerService;->isUserRestricted(ILjava/lang/String;)Z
 HSPLcom/android/server/pm/PackageManagerService;->killApplication(Ljava/lang/String;IILjava/lang/String;)V
-HSPLcom/android/server/pm/PackageManagerService;->lambda$forEachInstalledPackage$56(ILjava/util/function/Consumer;Lcom/android/server/pm/pkg/PackageStateInternal;)V+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;,Lcom/android/server/pm/pkg/PackageUserStateDefault;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Ljava/util/function/Consumer;Lcom/android/server/net/NetworkPolicyManagerService$$ExternalSyntheticLambda3;,Lcom/android/server/policy/role/RoleServicePlatformHelperImpl$$ExternalSyntheticLambda0;,Lcom/android/server/people/data/DataManager$$ExternalSyntheticLambda10;,Lcom/android/server/pm/LauncherAppsService$LauncherAppsImpl$$ExternalSyntheticLambda2;
+HSPLcom/android/server/pm/PackageManagerService;->lambda$forEachInstalledPackage$55(ILjava/util/function/Consumer;Lcom/android/server/pm/pkg/PackageStateInternal;)V+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;,Lcom/android/server/pm/pkg/PackageUserStateDefault;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Ljava/util/function/Consumer;Lcom/android/server/net/NetworkPolicyManagerService$$ExternalSyntheticLambda3;,Lcom/android/server/policy/role/RoleServicePlatformHelperImpl$$ExternalSyntheticLambda0;,Lcom/android/server/people/data/DataManager$$ExternalSyntheticLambda10;
 HSPLcom/android/server/pm/PackageManagerService;->lambda$main$10(Landroid/content/Context;Lcom/android/server/pm/Installer;Ljava/lang/Object;ZLcom/android/server/pm/PackageManagerTracedLock;Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/UserManagerService;
 HSPLcom/android/server/pm/PackageManagerService;->lambda$main$11(Lcom/android/server/pm/verify/domain/DomainVerificationService;Landroid/os/Handler;Lcom/android/server/pm/PackageManagerTracedLock;Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/Settings;
 HSPLcom/android/server/pm/PackageManagerService;->lambda$main$12(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/AppsFilterImpl;
@@ -37572,8 +38968,8 @@
 HSPLcom/android/server/pm/PackageManagerService;->lambda$main$18(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/ApexManager;
 HSPLcom/android/server/pm/PackageManagerService;->lambda$main$19(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/dex/ViewCompiler;
 HSPLcom/android/server/pm/PackageManagerService;->lambda$main$20(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Landroid/os/incremental/IncrementalManager;
-HPLcom/android/server/pm/PackageManagerService;->lambda$main$21(Landroid/content/Context;)Landroid/app/role/RoleManager;
-HPLcom/android/server/pm/PackageManagerService;->lambda$main$22()Lcom/android/server/pm/UserManagerInternal;
+HSPLcom/android/server/pm/PackageManagerService;->lambda$main$21(Landroid/content/Context;)Landroid/app/role/RoleManager;
+HSPLcom/android/server/pm/PackageManagerService;->lambda$main$22()Lcom/android/server/pm/UserManagerInternal;
 HSPLcom/android/server/pm/PackageManagerService;->lambda$main$23(Landroid/content/Context;Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/DefaultAppProvider;
 HSPLcom/android/server/pm/PackageManagerService;->lambda$main$24(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Landroid/util/DisplayMetrics;
 HSPLcom/android/server/pm/PackageManagerService;->lambda$main$25(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/parsing/PackageParser2;
@@ -37591,21 +38987,21 @@
 HSPLcom/android/server/pm/PackageManagerService;->lambda$main$8(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/resolution/ComponentResolver;
 HSPLcom/android/server/pm/PackageManagerService;->lambda$main$9(Landroid/content/Context;Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Lcom/android/server/pm/permission/PermissionManagerServiceInternal;
 HSPLcom/android/server/pm/PackageManagerService;->lambda$new$39()Landroid/content/pm/ResolveInfo;
-PLcom/android/server/pm/PackageManagerService;->lambda$notifyFirstLaunch$45(Ljava/lang/String;ILjava/lang/String;)V
-HSPLcom/android/server/pm/PackageManagerService;->lambda$notifyPackageUseInternal$41(IJLcom/android/server/pm/pkg/mutate/PackageStateWrite;)V
-PLcom/android/server/pm/PackageManagerService;->lambda$postPreferredActivityChangedBroadcast$47(I)V
+PLcom/android/server/pm/PackageManagerService;->lambda$notifyFirstLaunch$44(Ljava/lang/String;ILjava/lang/String;)V
+PLcom/android/server/pm/PackageManagerService;->lambda$postPreferredActivityChangedBroadcast$46(I)V
 PLcom/android/server/pm/PackageManagerService;->lambda$requestChecksumsInternal$6()Landroid/content/pm/PackageManagerInternal;
 HSPLcom/android/server/pm/PackageManagerService;->lambda$requestChecksumsInternal$7(Landroid/os/Handler;Ljava/util/List;IILjava/lang/String;[Ljava/security/cert/Certificate;Landroid/content/pm/IOnChecksumsReadyListener;)V
-PLcom/android/server/pm/PackageManagerService;->lambda$sendPackageAddedForNewUsers$43(Ljava/lang/String;I[I[IILandroid/util/SparseArray;)V
-PLcom/android/server/pm/PackageManagerService;->lambda$sendPackageAddedForNewUsers$44([ILjava/lang/String;Z)V
-PLcom/android/server/pm/PackageManagerService;->lambda$sendPackageBroadcast$42(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;ILjava/lang/String;Landroid/content/IIntentReceiver;[I[ILandroid/util/SparseArray;Landroid/os/Bundle;)V
-HPLcom/android/server/pm/PackageManagerService;->lambda$sendPackageChangedBroadcast$49(Ljava/lang/String;ZLjava/util/ArrayList;ILjava/lang/String;[I[ILandroid/util/SparseArray;)V
-HSPLcom/android/server/pm/PackageManagerService;->lambda$setEnabledOverlayPackages$55(Ljava/lang/String;ILandroid/content/pm/overlay/OverlayPaths;Landroid/util/ArrayMap;Lcom/android/server/pm/pkg/mutate/PackageStateMutator;)V
-PLcom/android/server/pm/PackageManagerService;->lambda$setPackageStoppedState$53(IZZLcom/android/server/pm/pkg/mutate/PackageStateWrite;)V
-HSPLcom/android/server/pm/PackageManagerService;->lambda$setPackageStoppedState$54(Ljava/lang/String;I)V+]Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerServiceInjector;]Lcom/android/server/apphibernation/AppHibernationManagerInternal;Lcom/android/server/apphibernation/AppHibernationService$LocalService;
-HSPLcom/android/server/pm/PackageManagerService;->lambda$setSystemAppHiddenUntilInstalled$52(Ljava/lang/String;ZLcom/android/server/pm/pkg/mutate/PackageStateMutator;)V
-PLcom/android/server/pm/PackageManagerService;->lambda$updateComponentLabelIcon$48(ILandroid/content/ComponentName;Ljava/lang/String;Ljava/lang/Integer;Lcom/android/server/pm/pkg/mutate/PackageStateWrite;)V
+PLcom/android/server/pm/PackageManagerService;->lambda$sendPackageAddedForNewUsers$42(Ljava/lang/String;I[I[IILandroid/util/SparseArray;)V
+PLcom/android/server/pm/PackageManagerService;->lambda$sendPackageAddedForNewUsers$43([ILjava/lang/String;Z)V
+PLcom/android/server/pm/PackageManagerService;->lambda$sendPackageBroadcast$41(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;ILjava/lang/String;Landroid/content/IIntentReceiver;[I[ILandroid/util/SparseArray;Landroid/os/Bundle;)V
+PLcom/android/server/pm/PackageManagerService;->lambda$sendPackageChangedBroadcast$48(Ljava/lang/String;ZLjava/util/ArrayList;ILjava/lang/String;[I[ILandroid/util/SparseArray;)V
+HSPLcom/android/server/pm/PackageManagerService;->lambda$setEnabledOverlayPackages$54(Ljava/lang/String;ILandroid/content/pm/overlay/OverlayPaths;Landroid/util/ArrayMap;Lcom/android/server/pm/pkg/mutate/PackageStateMutator;)V
+PLcom/android/server/pm/PackageManagerService;->lambda$setPackageStoppedState$52(IZZLcom/android/server/pm/pkg/mutate/PackageStateWrite;)V
+HSPLcom/android/server/pm/PackageManagerService;->lambda$setPackageStoppedState$53(Ljava/lang/String;I)V+]Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerServiceInjector;]Lcom/android/server/apphibernation/AppHibernationManagerInternal;Lcom/android/server/apphibernation/AppHibernationService$LocalService;
+HSPLcom/android/server/pm/PackageManagerService;->lambda$setSystemAppHiddenUntilInstalled$51(Ljava/lang/String;ZLcom/android/server/pm/pkg/mutate/PackageStateMutator;)V
+PLcom/android/server/pm/PackageManagerService;->lambda$updateComponentLabelIcon$47(ILandroid/content/ComponentName;Ljava/lang/String;Ljava/lang/Integer;Lcom/android/server/pm/pkg/mutate/PackageStateWrite;)V
 HSPLcom/android/server/pm/PackageManagerService;->main(Landroid/content/Context;Lcom/android/server/pm/Installer;Lcom/android/server/pm/verify/domain/DomainVerificationService;ZZ)Landroid/util/Pair;
+HSPLcom/android/server/pm/PackageManagerService;->maybeUpdateSystemOverlays(Ljava/lang/String;Landroid/content/pm/overlay/OverlayPaths;)V
 PLcom/android/server/pm/PackageManagerService;->notifyFirstLaunch(Ljava/lang/String;Ljava/lang/String;I)V
 PLcom/android/server/pm/PackageManagerService;->notifyInstallObserver(Lcom/android/server/pm/PackageInstalledInfo;Landroid/content/pm/IPackageInstallObserver2;)V
 HPLcom/android/server/pm/PackageManagerService;->notifyInstallObserver(Ljava/lang/String;Z)V
@@ -37614,8 +39010,8 @@
 PLcom/android/server/pm/PackageManagerService;->notifyPackageChangeObservers(Landroid/content/pm/PackageChangeEvent;)V
 PLcom/android/server/pm/PackageManagerService;->notifyPackageChanged(Ljava/lang/String;I)V
 PLcom/android/server/pm/PackageManagerService;->notifyPackageRemoved(Ljava/lang/String;I)V
-HSPLcom/android/server/pm/PackageManagerService;->notifyPackageUseInternal(Ljava/lang/String;I)V+]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;
-HSPLcom/android/server/pm/PackageManagerService;->onChange(Lcom/android/server/utils/Watchable;)V+]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
+HSPLcom/android/server/pm/PackageManagerService;->notifyPackageUseInternal(Ljava/lang/String;I)V+]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageStateUnserialized;Lcom/android/server/pm/pkg/PackageStateUnserialized;]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;
+HSPLcom/android/server/pm/PackageManagerService;->onChange(Lcom/android/server/utils/Watchable;)V+]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;
 HSPLcom/android/server/pm/PackageManagerService;->onChanged()V
 PLcom/android/server/pm/PackageManagerService;->onNewUserCreated(IZ)V
 PLcom/android/server/pm/PackageManagerService;->parsePerUidReadTimeouts(Lcom/android/server/pm/Computer;)[Landroid/os/incremental/PerUidReadTimeouts;
@@ -37625,6 +39021,7 @@
 HSPLcom/android/server/pm/PackageManagerService;->rebuildSnapshot(Lcom/android/server/pm/Computer;I)Lcom/android/server/pm/Computer;+]Lcom/android/server/pm/SnapshotStatistics;Lcom/android/server/pm/SnapshotStatistics;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 PLcom/android/server/pm/PackageManagerService;->recordInitialState()Lcom/android/server/pm/pkg/mutate/PackageStateMutator$InitialState;
 HSPLcom/android/server/pm/PackageManagerService;->registerObservers(Z)V
+PLcom/android/server/pm/PackageManagerService;->removeAllDistractingPackageRestrictions(Lcom/android/server/pm/Computer;I)V
 HSPLcom/android/server/pm/PackageManagerService;->renameStaticSharedLibraryPackage(Lcom/android/server/pm/parsing/pkg/ParsedPackage;)V
 HSPLcom/android/server/pm/PackageManagerService;->reportSettingsProblem(ILjava/lang/String;)V
 HSPLcom/android/server/pm/PackageManagerService;->requestChecksumsInternal(Lcom/android/server/pm/Computer;Ljava/lang/String;ZIILjava/util/List;Landroid/content/pm/IOnChecksumsReadyListener;ILjava/util/concurrent/Executor;Landroid/os/Handler;)V
@@ -37649,22 +39046,23 @@
 PLcom/android/server/pm/PackageManagerService;->setEnableRollbackCode(II)V
 HSPLcom/android/server/pm/PackageManagerService;->setEnabledOverlayPackages(ILjava/lang/String;Landroid/content/pm/overlay/OverlayPaths;Ljava/util/Set;)Z
 HSPLcom/android/server/pm/PackageManagerService;->setEnabledSettingInternalLocked(Lcom/android/server/pm/Computer;Lcom/android/server/pm/PackageSetting;Landroid/content/pm/PackageManager$ComponentEnabledSetting;ILjava/lang/String;)Z+]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Landroid/content/pm/PackageManager$ComponentEnabledSetting;Landroid/content/pm/PackageManager$ComponentEnabledSetting;
-HSPLcom/android/server/pm/PackageManagerService;->setEnabledSettings(Ljava/util/List;ILjava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Handler;Lcom/android/server/pm/PackageHandler;]Lcom/android/server/pm/pkg/AndroidPackageApi;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Landroid/content/pm/PackageManager$ComponentEnabledSetting;Landroid/content/pm/PackageManager$ComponentEnabledSetting;]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/util/Map;Landroid/util/ArrayMap;]Lcom/android/server/pm/PendingPackageBroadcasts;Lcom/android/server/pm/PendingPackageBroadcasts;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;]Ljava/util/List;Ljava/util/ImmutableCollections$List12;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/pm/ProtectedPackages;Lcom/android/server/pm/ProtectedPackages;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;
+HSPLcom/android/server/pm/PackageManagerService;->setEnabledSettings(Ljava/util/List;ILjava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Handler;Lcom/android/server/pm/PackageHandler;]Lcom/android/server/pm/pkg/AndroidPackageApi;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Landroid/content/pm/PackageManager$ComponentEnabledSetting;Landroid/content/pm/PackageManager$ComponentEnabledSetting;]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/util/Map;Landroid/util/ArrayMap;]Lcom/android/server/pm/PendingPackageBroadcasts;Lcom/android/server/pm/PendingPackageBroadcasts;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;]Ljava/util/List;Ljava/util/ImmutableCollections$List12;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/pm/ProtectedPackages;Lcom/android/server/pm/ProtectedPackages;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/InstallPackageHelper;Lcom/android/server/pm/InstallPackageHelper;
 HSPLcom/android/server/pm/PackageManagerService;->setKeepUninstalledPackagesInternal(Lcom/android/server/pm/Computer;Ljava/util/List;)V
-HSPLcom/android/server/pm/PackageManagerService;->setPackageStoppedState(Lcom/android/server/pm/Computer;Ljava/lang/String;ZI)V+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Landroid/os/Handler;Lcom/android/server/pm/PackageHandler;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;
+HSPLcom/android/server/pm/PackageManagerService;->setPackageStoppedState(Lcom/android/server/pm/Computer;Ljava/lang/String;ZI)V+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Landroid/os/Handler;Lcom/android/server/pm/PackageHandler;]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/PackageManagerService;->setPlatformPackage(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/PackageSetting;)V
 HSPLcom/android/server/pm/PackageManagerService;->setSystemAppHiddenUntilInstalled(Lcom/android/server/pm/Computer;Ljava/lang/String;Z)V
 PLcom/android/server/pm/PackageManagerService;->setSystemAppInstallState(Lcom/android/server/pm/Computer;Ljava/lang/String;ZI)Z
 HSPLcom/android/server/pm/PackageManagerService;->setUpInstantAppInstallerActivityLP(Landroid/content/pm/ActivityInfo;)V
 PLcom/android/server/pm/PackageManagerService;->shouldKeepUninstalledPackageLPr(Ljava/lang/String;)Z
 PLcom/android/server/pm/PackageManagerService;->shutdown()V
-HSPLcom/android/server/pm/PackageManagerService;->snapshotComputer()Lcom/android/server/pm/Computer;+]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;]Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/atomic/AtomicReference;
+HSPLcom/android/server/pm/PackageManagerService;->snapshotComputer()Lcom/android/server/pm/Computer;+]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;]Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/atomic/AtomicReference;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;
 HSPLcom/android/server/pm/PackageManagerService;->systemReady()V
 HSPLcom/android/server/pm/PackageManagerService;->toStaticSharedLibraryPackageName(Ljava/lang/String;J)Ljava/lang/String;
+PLcom/android/server/pm/PackageManagerService;->unsuspendForSuspendingPackage(Lcom/android/server/pm/Computer;Ljava/lang/String;I)V
 HPLcom/android/server/pm/PackageManagerService;->updateComponentLabelIcon(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/Integer;I)V+]Lcom/android/server/pm/resolution/ComponentResolverApi;Lcom/android/server/pm/resolution/ComponentResolverSnapshot;]Lcom/android/server/pm/pkg/PackageUserStateInternal;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/PackageManagerService;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/PackageManagerService;->updateInstantAppInstallerLocked(Ljava/lang/String;)V+]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Landroid/content/ComponentName;Landroid/content/ComponentName;
 HSPLcom/android/server/pm/PackageManagerService;->updatePackagesIfNeeded()V
-HPLcom/android/server/pm/PackageManagerService;->updateSequenceNumberLP(Lcom/android/server/pm/PackageSetting;[I)V
+HSPLcom/android/server/pm/PackageManagerService;->updateSequenceNumberLP(Lcom/android/server/pm/PackageSetting;[I)V
 HSPLcom/android/server/pm/PackageManagerService;->waitForAppDataPrepared()V
 PLcom/android/server/pm/PackageManagerService;->writePackageList(I)V
 HPLcom/android/server/pm/PackageManagerService;->writePendingRestrictions()V
@@ -37678,7 +39076,7 @@
 HSPLcom/android/server/pm/PackageManagerServiceCompilerMapping;->getSystemPropertyName(I)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerServiceCompilerMapping;->isFilterAllowedForReason(ILjava/lang/String;)Z
 HSPLcom/android/server/pm/PackageManagerServiceInjector$Singleton;-><init>(Lcom/android/server/pm/PackageManagerServiceInjector$Producer;)V
-HSPLcom/android/server/pm/PackageManagerServiceInjector$Singleton;->get(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;+]Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda44;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda34;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda37;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda35;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda38;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda45;
+HSPLcom/android/server/pm/PackageManagerServiceInjector$Singleton;->get(Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerService;)Ljava/lang/Object;+]Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda33;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda43;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda36;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda44;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda34;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda37;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda45;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda35;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda38;
 HSPLcom/android/server/pm/PackageManagerServiceInjector;-><init>(Landroid/content/Context;Lcom/android/server/pm/PackageManagerTracedLock;Lcom/android/server/pm/Installer;Ljava/lang/Object;Lcom/android/server/pm/PackageAbiHelper;Landroid/os/Handler;Ljava/util/List;Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerServiceInjector$ProducerWithArgument;Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerServiceInjector$SystemWrapper;Lcom/android/server/pm/PackageManagerServiceInjector$ServiceProducer;Lcom/android/server/pm/PackageManagerServiceInjector$ServiceProducer;Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerServiceInjector$Producer;Lcom/android/server/pm/PackageManagerServiceInjector$Producer;)V
 HSPLcom/android/server/pm/PackageManagerServiceInjector;->bootstrap(Lcom/android/server/pm/PackageManagerService;)V
 HSPLcom/android/server/pm/PackageManagerServiceInjector;->getAbiHelper()Lcom/android/server/pm/PackageAbiHelper;
@@ -37703,7 +39101,7 @@
 HSPLcom/android/server/pm/PackageManagerServiceInjector;->getInstaller()Lcom/android/server/pm/Installer;
 HSPLcom/android/server/pm/PackageManagerServiceInjector;->getInstantAppResolverConnection(Landroid/content/ComponentName;)Lcom/android/server/pm/InstantAppResolverConnection;
 HSPLcom/android/server/pm/PackageManagerServiceInjector;->getLegacyPermissionManagerInternal()Lcom/android/server/pm/permission/LegacyPermissionManagerInternal;
-HSPLcom/android/server/pm/PackageManagerServiceInjector;->getLocalService(Ljava/lang/Class;)Ljava/lang/Object;+]Lcom/android/server/pm/PackageManagerServiceInjector$ServiceProducer;Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda42;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda41;
+HSPLcom/android/server/pm/PackageManagerServiceInjector;->getLocalService(Ljava/lang/Class;)Ljava/lang/Object;+]Lcom/android/server/pm/PackageManagerServiceInjector$ServiceProducer;Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda40;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda41;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda42;
 HSPLcom/android/server/pm/PackageManagerServiceInjector;->getLock()Lcom/android/server/pm/PackageManagerTracedLock;
 HSPLcom/android/server/pm/PackageManagerServiceInjector;->getModuleInfoProvider()Lcom/android/server/pm/ModuleInfoProvider;
 HSPLcom/android/server/pm/PackageManagerServiceInjector;->getPackageDexOptimizer()Lcom/android/server/pm/PackageDexOptimizer;
@@ -37721,18 +39119,18 @@
 HSPLcom/android/server/pm/PackageManagerServiceInjector;->getUserManagerInternal()Lcom/android/server/pm/UserManagerInternal;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerServiceInjector;
 HSPLcom/android/server/pm/PackageManagerServiceInjector;->getUserManagerService()Lcom/android/server/pm/UserManagerService;+]Lcom/android/server/pm/PackageManagerServiceInjector$Singleton;Lcom/android/server/pm/PackageManagerServiceInjector$Singleton;
 HSPLcom/android/server/pm/PackageManagerServiceInjector;->getViewCompiler()Lcom/android/server/pm/dex/ViewCompiler;
-HPLcom/android/server/pm/PackageManagerServiceUtils$$ExternalSyntheticLambda0;-><init>(Landroid/content/Intent;Ljava/lang/String;)V
-HPLcom/android/server/pm/PackageManagerServiceUtils$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/pm/PackageManagerServiceUtils$$ExternalSyntheticLambda0;-><init>(Landroid/content/Intent;Ljava/lang/String;)V
+HSPLcom/android/server/pm/PackageManagerServiceUtils$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/pm/PackageManagerServiceUtils$$ExternalSyntheticLambda1;-><init>()V
 PLcom/android/server/pm/PackageManagerServiceUtils$$ExternalSyntheticLambda1;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/pm/PackageManagerServiceUtils$1;-><init>()V
 HSPLcom/android/server/pm/PackageManagerServiceUtils$1;->accept(Ljava/io/File;Ljava/lang/String;)Z
-HPLcom/android/server/pm/PackageManagerServiceUtils;->$r8$lambda$DfU-frVeYVl3--0HQjqUKDAZs_c(Landroid/content/Intent;Ljava/lang/String;Lcom/android/server/pm/pkg/component/ParsedIntentInfo;)Z
+HSPLcom/android/server/pm/PackageManagerServiceUtils;->$r8$lambda$DfU-frVeYVl3--0HQjqUKDAZs_c(Landroid/content/Intent;Ljava/lang/String;Lcom/android/server/pm/pkg/component/ParsedIntentInfo;)Z
 PLcom/android/server/pm/PackageManagerServiceUtils;->$r8$lambda$TIKXvzobl6Pjs5sDqgFWI4sddmM(Lcom/android/server/pm/pkg/PackageStateInternal;)Z
 HSPLcom/android/server/pm/PackageManagerServiceUtils;-><clinit>()V
-HSPLcom/android/server/pm/PackageManagerServiceUtils;->applyEnforceIntentFilterMatching(Lcom/android/server/compat/PlatformCompat;Lcom/android/server/pm/resolution/ComponentResolverApi;Ljava/util/List;ZLandroid/content/Intent;Ljava/lang/String;I)V+]Lcom/android/server/compat/PlatformCompat;Lcom/android/server/compat/PlatformCompat;]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;,Lcom/android/server/pm/pkg/component/ParsedServiceImpl;]Lcom/android/server/pm/resolution/ComponentResolverApi;Lcom/android/server/pm/resolution/ComponentResolverSnapshot;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/stream/Stream;Ljava/util/stream/ReferencePipeline$Head;]Landroid/content/pm/ResolveInfo;Landroid/content/pm/ResolveInfo;]Landroid/content/pm/ComponentInfo;Landroid/content/pm/ServiceInfo;,Landroid/content/pm/ActivityInfo;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/pm/PackageManagerServiceUtils;->applyEnforceIntentFilterMatching(Lcom/android/server/compat/PlatformCompat;Lcom/android/server/pm/resolution/ComponentResolverApi;Ljava/util/List;ZLandroid/content/Intent;Ljava/lang/String;I)V+]Lcom/android/server/compat/PlatformCompat;Lcom/android/server/compat/PlatformCompat;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;,Lcom/android/server/pm/pkg/component/ParsedServiceImpl;]Lcom/android/server/pm/resolution/ComponentResolverApi;Lcom/android/server/pm/resolution/ComponentResolverSnapshot;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/stream/Stream;Ljava/util/stream/ReferencePipeline$Head;]Landroid/content/pm/ResolveInfo;Landroid/content/pm/ResolveInfo;]Landroid/content/pm/ComponentInfo;Landroid/content/pm/ServiceInfo;,Landroid/content/pm/ActivityInfo;
 HPLcom/android/server/pm/PackageManagerServiceUtils;->arrayToString([I)Ljava/lang/String;
-PLcom/android/server/pm/PackageManagerServiceUtils;->buildVerificationRootHashString(Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/String;
+HPLcom/android/server/pm/PackageManagerServiceUtils;->buildVerificationRootHashString(Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->canJoinSharedUserId(Landroid/content/pm/SigningDetails;Landroid/content/pm/SigningDetails;)Z
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->checkDowngrade(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Landroid/content/pm/PackageInfoLite;)V
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->checkISA(Ljava/lang/String;)Z
@@ -37742,12 +39140,12 @@
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->decompressFile(Ljava/io/File;Ljava/io/File;)I
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->decompressFiles(Ljava/lang/String;Ljava/io/File;Ljava/lang/String;)I
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->deriveAbiOverride(Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/server/pm/PackageManagerServiceUtils;->dumpCriticalInfo(Landroid/util/proto/ProtoOutputStream;)V
+HPLcom/android/server/pm/PackageManagerServiceUtils;->dumpCriticalInfo(Landroid/util/proto/ProtoOutputStream;)V
 HPLcom/android/server/pm/PackageManagerServiceUtils;->dumpCriticalInfo(Ljava/io/PrintWriter;Ljava/lang/String;)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/io/File;Ljava/io/File;]Ljava/io/PrintWriter;Lcom/android/internal/util/FastPrintWriter;]Ljava/io/BufferedReader;Ljava/io/BufferedReader;
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->enforceShellRestriction(Lcom/android/server/pm/UserManagerInternal;Ljava/lang/String;II)V+]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;
-PLcom/android/server/pm/PackageManagerServiceUtils;->enforceSystemOrPhoneCaller(Ljava/lang/String;I)V
+HSPLcom/android/server/pm/PackageManagerServiceUtils;->enforceSystemOrPhoneCaller(Ljava/lang/String;I)V
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->enforceSystemOrRoot(Ljava/lang/String;)V
-PLcom/android/server/pm/PackageManagerServiceUtils;->extractNativeBinaries(Ljava/io/File;Ljava/lang/String;)I
+HSPLcom/android/server/pm/PackageManagerServiceUtils;->extractNativeBinaries(Ljava/io/File;Ljava/lang/String;)I
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->getCompressedFiles(Ljava/lang/String;)[Ljava/io/File;
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->getLastModifiedTime(Lcom/android/server/pm/parsing/pkg/AndroidPackage;)J
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->getMinimalPackageInfo(Landroid/content/Context;Landroid/content/pm/parsing/PackageLite;Ljava/lang/String;ILjava/lang/String;)Landroid/content/pm/PackageInfoLite;
@@ -37758,12 +39156,12 @@
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->isApkVerificationForced(Lcom/android/server/pm/PackageSetting;)Z
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->isApkVerityEnabled()Z
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->isDowngradePermitted(IZ)Z
-PLcom/android/server/pm/PackageManagerServiceUtils;->isSystemApp(Lcom/android/server/pm/PackageSetting;)Z
+HSPLcom/android/server/pm/PackageManagerServiceUtils;->isSystemApp(Lcom/android/server/pm/PackageSetting;)Z
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->isSystemOrRoot()Z
 PLcom/android/server/pm/PackageManagerServiceUtils;->isSystemOrRootOrShell()Z
 PLcom/android/server/pm/PackageManagerServiceUtils;->isUnusedSinceTimeInMillis(JJJLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;JJ)Z
-PLcom/android/server/pm/PackageManagerServiceUtils;->isUpdatedSystemApp(Lcom/android/server/pm/PackageSetting;)Z
-HPLcom/android/server/pm/PackageManagerServiceUtils;->lambda$applyEnforceIntentFilterMatching$1(Landroid/content/Intent;Ljava/lang/String;Lcom/android/server/pm/pkg/component/ParsedIntentInfo;)Z
+HSPLcom/android/server/pm/PackageManagerServiceUtils;->isUpdatedSystemApp(Lcom/android/server/pm/PackageSetting;)Z
+HSPLcom/android/server/pm/PackageManagerServiceUtils;->lambda$applyEnforceIntentFilterMatching$1(Landroid/content/Intent;Ljava/lang/String;Lcom/android/server/pm/pkg/component/ParsedIntentInfo;)Z
 PLcom/android/server/pm/PackageManagerServiceUtils;->lambda$static$0(Lcom/android/server/pm/pkg/PackageStateInternal;)Z
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->logCriticalInfo(ILjava/lang/String;)V
 HSPLcom/android/server/pm/PackageManagerServiceUtils;->makeDirRecursive(Ljava/io/File;I)V
@@ -37779,6 +39177,8 @@
 HPLcom/android/server/pm/PackageManagerShellCommand$1;->compare(Landroid/content/pm/FeatureInfo;Landroid/content/pm/FeatureInfo;)I
 HPLcom/android/server/pm/PackageManagerShellCommand$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I+]Lcom/android/server/pm/PackageManagerShellCommand$1;Lcom/android/server/pm/PackageManagerShellCommand$1;
 PLcom/android/server/pm/PackageManagerShellCommand$2;-><init>(Lcom/android/server/pm/PackageManagerShellCommand;)V
+PLcom/android/server/pm/PackageManagerShellCommand$2;->compare(Landroid/content/pm/InstrumentationInfo;Landroid/content/pm/InstrumentationInfo;)I
+PLcom/android/server/pm/PackageManagerShellCommand$2;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 PLcom/android/server/pm/PackageManagerShellCommand$3;-><init>(Lcom/android/server/pm/PackageManagerShellCommand;)V
 HPLcom/android/server/pm/PackageManagerShellCommand$3;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HPLcom/android/server/pm/PackageManagerShellCommand$3;->compare(Ljava/lang/String;Ljava/lang/String;)I
@@ -37809,29 +39209,37 @@
 PLcom/android/server/pm/PackageManagerShellCommand;->doCreateSession(Landroid/content/pm/PackageInstaller$SessionParams;Ljava/lang/String;I)I
 PLcom/android/server/pm/PackageManagerShellCommand;->doRunInstall(Lcom/android/server/pm/PackageManagerShellCommand$InstallParams;)I
 PLcom/android/server/pm/PackageManagerShellCommand;->doWaitForStagedSessionReady(IJLjava/io/PrintWriter;)I
-PLcom/android/server/pm/PackageManagerShellCommand;->doWriteSplit(ILjava/lang/String;JLjava/lang/String;Z)I
+HPLcom/android/server/pm/PackageManagerShellCommand;->doWriteSplit(ILjava/lang/String;JLjava/lang/String;Z)I
 PLcom/android/server/pm/PackageManagerShellCommand;->doWriteSplits(ILjava/util/ArrayList;JZ)I
+PLcom/android/server/pm/PackageManagerShellCommand;->enabledSettingToString(I)Ljava/lang/String;
 PLcom/android/server/pm/PackageManagerShellCommand;->getRemainingArgs()Ljava/util/ArrayList;
 HPLcom/android/server/pm/PackageManagerShellCommand;->lambda$runListPackages$0(Ljava/lang/String;)Ljava/util/List;
 PLcom/android/server/pm/PackageManagerShellCommand;->makeInstallParams(Ljava/util/Set;)Lcom/android/server/pm/PackageManagerShellCommand$InstallParams;
 HPLcom/android/server/pm/PackageManagerShellCommand;->onCommand(Ljava/lang/String;)I
+PLcom/android/server/pm/PackageManagerShellCommand;->onHelp()V
 PLcom/android/server/pm/PackageManagerShellCommand;->parseIntentAndUser()Landroid/content/Intent;
 PLcom/android/server/pm/PackageManagerShellCommand;->printResolveInfo(Landroid/util/PrintWriterPrinter;Ljava/lang/String;Landroid/content/pm/ResolveInfo;ZZ)V
+PLcom/android/server/pm/PackageManagerShellCommand;->removeUser(Landroid/os/IUserManager;I)Z
 PLcom/android/server/pm/PackageManagerShellCommand;->runClear()I
 PLcom/android/server/pm/PackageManagerShellCommand;->runCompile()I
+PLcom/android/server/pm/PackageManagerShellCommand;->runDump()I
 PLcom/android/server/pm/PackageManagerShellCommand;->runGrantRevokePermission(Z)I
 PLcom/android/server/pm/PackageManagerShellCommand;->runInstall()I
+PLcom/android/server/pm/PackageManagerShellCommand;->runInstallAbandon()I
 PLcom/android/server/pm/PackageManagerShellCommand;->runInstallCommit()I
 PLcom/android/server/pm/PackageManagerShellCommand;->runInstallCreate()I
-PLcom/android/server/pm/PackageManagerShellCommand;->runInstallWrite()I
+PLcom/android/server/pm/PackageManagerShellCommand;->runInstallExisting()I
+HPLcom/android/server/pm/PackageManagerShellCommand;->runInstallWrite()I
 HPLcom/android/server/pm/PackageManagerShellCommand;->runList()I
 HPLcom/android/server/pm/PackageManagerShellCommand;->runListFeatures()I
 PLcom/android/server/pm/PackageManagerShellCommand;->runListInstrumentation()I
 HPLcom/android/server/pm/PackageManagerShellCommand;->runListLibraries()I
 PLcom/android/server/pm/PackageManagerShellCommand;->runListPackages(Z)I
-HPLcom/android/server/pm/PackageManagerShellCommand;->runListPackages(ZZ)I+]Ljava/lang/String;Ljava/lang/String;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/os/ShellCommand;Lcom/android/server/pm/PackageManagerShellCommand;]Lcom/android/server/pm/PackageManagerShellCommand;Lcom/android/server/pm/PackageManagerShellCommand;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Landroid/content/pm/ParceledListSlice;Landroid/content/pm/ParceledListSlice;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Map;Ljava/util/HashMap;
+HPLcom/android/server/pm/PackageManagerShellCommand;->runListPackages(ZZ)I+]Ljava/lang/String;Ljava/lang/String;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/os/ShellCommand;Lcom/android/server/pm/PackageManagerShellCommand;]Lcom/android/server/pm/PackageManagerShellCommand;Lcom/android/server/pm/PackageManagerShellCommand;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Landroid/content/pm/ParceledListSlice;Landroid/content/pm/ParceledListSlice;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;]Ljava/util/Set;Ljava/util/HashMap$EntrySet;
 HPLcom/android/server/pm/PackageManagerShellCommand;->runPath()I
 PLcom/android/server/pm/PackageManagerShellCommand;->runQueryIntentActivities()I
+PLcom/android/server/pm/PackageManagerShellCommand;->runRemoveUser()I
+PLcom/android/server/pm/PackageManagerShellCommand;->runSetEnabledSetting(I)I
 PLcom/android/server/pm/PackageManagerShellCommand;->runSnapshotProfile()I
 PLcom/android/server/pm/PackageManagerShellCommand;->runUninstall()I
 PLcom/android/server/pm/PackageManagerShellCommand;->setParamsSize(Lcom/android/server/pm/PackageManagerShellCommand$InstallParams;Ljava/util/List;)V
@@ -37844,7 +39252,7 @@
 PLcom/android/server/pm/PackageObserverHelper;->notifyRemoved(Ljava/lang/String;I)V
 HSPLcom/android/server/pm/PackageProperty;-><init>()V
 HSPLcom/android/server/pm/PackageProperty;->addAllProperties(Lcom/android/server/pm/parsing/pkg/AndroidPackage;)V
-HSPLcom/android/server/pm/PackageProperty;->addComponentProperties(Ljava/util/List;Landroid/util/ArrayMap;)Landroid/util/ArrayMap;
+HSPLcom/android/server/pm/PackageProperty;->addComponentProperties(Ljava/util/List;Landroid/util/ArrayMap;)Landroid/util/ArrayMap;+]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;,Lcom/android/server/pm/pkg/component/ParsedProviderImpl;,Lcom/android/server/pm/pkg/component/ParsedServiceImpl;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Ljava/util/Map;Landroid/util/ArrayMap;,Ljava/util/HashMap;,Ljava/util/Collections$EmptyMap;
 HSPLcom/android/server/pm/PackageProperty;->addProperties(Ljava/util/Map;Landroid/util/ArrayMap;)Landroid/util/ArrayMap;
 HPLcom/android/server/pm/PackageProperty;->getApplicationProperty(Ljava/lang/String;Ljava/lang/String;)Landroid/content/pm/PackageManager$Property;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 PLcom/android/server/pm/PackageProperty;->getComponentProperty(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/content/pm/PackageManager$Property;
@@ -37856,10 +39264,10 @@
 HSPLcom/android/server/pm/PackageRemovedInfo;-><clinit>()V
 HSPLcom/android/server/pm/PackageRemovedInfo;-><init>(Lcom/android/server/pm/PackageSender;)V
 PLcom/android/server/pm/PackageRemovedInfo;->getTemporaryAppAllowlistBroadcastOptions(I)Landroid/app/BroadcastOptions;
-PLcom/android/server/pm/PackageRemovedInfo;->populateUsers([ILcom/android/server/pm/PackageSetting;)V
-HPLcom/android/server/pm/PackageRemovedInfo;->sendPackageRemovedBroadcastInternal(ZZ)V
-PLcom/android/server/pm/PackageRemovedInfo;->sendPackageRemovedBroadcasts(ZZ)V
-PLcom/android/server/pm/PackageRemovedInfo;->sendSystemPackageUpdatedBroadcasts()V
+HSPLcom/android/server/pm/PackageRemovedInfo;->populateUsers([ILcom/android/server/pm/PackageSetting;)V
+HSPLcom/android/server/pm/PackageRemovedInfo;->sendPackageRemovedBroadcastInternal(ZZ)V
+HSPLcom/android/server/pm/PackageRemovedInfo;->sendPackageRemovedBroadcasts(ZZ)V
+HSPLcom/android/server/pm/PackageRemovedInfo;->sendSystemPackageUpdatedBroadcasts()V
 PLcom/android/server/pm/PackageRemovedInfo;->sendSystemPackageUpdatedBroadcastsInternal()V
 PLcom/android/server/pm/PackageSessionVerifier$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/pm/PackageSessionVerifier;Lcom/android/server/pm/StagingManager$StagedSession;Lcom/android/server/pm/PackageSessionVerifier$Callback;)V
 PLcom/android/server/pm/PackageSessionVerifier$$ExternalSyntheticLambda1;->run()V
@@ -37897,7 +39305,7 @@
 PLcom/android/server/pm/PackageSessionVerifier;->lambda$dispatchVerifyApex$2(Lcom/android/server/pm/StagingManager$StagedSession;Lcom/android/server/pm/PackageSessionVerifier$Callback;)V
 PLcom/android/server/pm/PackageSessionVerifier;->lambda$verify$0(Lcom/android/server/pm/PackageInstallerSession;Lcom/android/server/pm/PackageSessionVerifier$Callback;)V
 PLcom/android/server/pm/PackageSessionVerifier;->lambda$verifyStaged$1(Lcom/android/server/pm/StagingManager$StagedSession;Lcom/android/server/pm/PackageSessionVerifier$Callback;)V
-PLcom/android/server/pm/PackageSessionVerifier;->makeVerificationParams(Lcom/android/server/pm/PackageInstallerSession;Landroid/content/pm/IPackageInstallObserver2;)Lcom/android/server/pm/VerificationParams;
+HPLcom/android/server/pm/PackageSessionVerifier;->makeVerificationParams(Lcom/android/server/pm/PackageInstallerSession;Landroid/content/pm/IPackageInstallObserver2;)Lcom/android/server/pm/VerificationParams;
 PLcom/android/server/pm/PackageSessionVerifier;->onVerificationFailure(Lcom/android/server/pm/StagingManager$StagedSession;Lcom/android/server/pm/PackageSessionVerifier$Callback;ILjava/lang/String;)V
 PLcom/android/server/pm/PackageSessionVerifier;->onVerificationSuccess(Lcom/android/server/pm/StagingManager$StagedSession;Lcom/android/server/pm/PackageSessionVerifier$Callback;)V
 PLcom/android/server/pm/PackageSessionVerifier;->storeSession(Lcom/android/server/pm/StagingManager$StagedSession;)V
@@ -37925,7 +39333,7 @@
 HSPLcom/android/server/pm/PackageSetting;->getCpuAbiOverride()Ljava/lang/String;
 HSPLcom/android/server/pm/PackageSetting;->getCurrentEnabledStateLPr(Ljava/lang/String;I)I+]Lcom/android/server/pm/pkg/PackageUserStateInternal;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;
 HSPLcom/android/server/pm/PackageSetting;->getDomainSetId()Ljava/util/UUID;
-HSPLcom/android/server/pm/PackageSetting;->getEnabled(I)I
+HSPLcom/android/server/pm/PackageSetting;->getEnabled(I)I+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/PackageSetting;->getInstallReason(I)I
 HSPLcom/android/server/pm/PackageSetting;->getInstallSource()Lcom/android/server/pm/InstallSource;
 HSPLcom/android/server/pm/PackageSetting;->getInstalled(I)Z
@@ -37965,7 +39373,7 @@
 HSPLcom/android/server/pm/PackageSetting;->getVolumeUuid()Ljava/lang/String;
 HSPLcom/android/server/pm/PackageSetting;->hasSharedUser()Z
 PLcom/android/server/pm/PackageSetting;->isAnyInstalled([I)Z
-PLcom/android/server/pm/PackageSetting;->isExternalStorage()Z
+HSPLcom/android/server/pm/PackageSetting;->isExternalStorage()Z
 HSPLcom/android/server/pm/PackageSetting;->isForceQueryableOverride()Z
 HSPLcom/android/server/pm/PackageSetting;->isInstallPermissionsFixed()Z
 HSPLcom/android/server/pm/PackageSetting;->isLoading()Z
@@ -37975,9 +39383,10 @@
 HSPLcom/android/server/pm/PackageSetting;->isUpdateAvailable()Z
 HSPLcom/android/server/pm/PackageSetting;->makeCache()Lcom/android/server/utils/SnapshotCache;
 HSPLcom/android/server/pm/PackageSetting;->modifyUserState(I)Lcom/android/server/pm/pkg/PackageUserStateImpl;+]Lcom/android/server/pm/SettingBase;Lcom/android/server/pm/PackageSetting;]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/pm/PackageSetting;->modifyUserStateComponents(IZZ)Lcom/android/server/pm/pkg/PackageUserStateImpl;+]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageUserStateImpl;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/pm/SettingBase;Lcom/android/server/pm/PackageSetting;
+HSPLcom/android/server/pm/PackageSetting;->modifyUserStateComponents(IZZ)Lcom/android/server/pm/pkg/PackageUserStateImpl;+]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/SettingBase;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageUserStateImpl;Lcom/android/server/pm/pkg/PackageUserStateImpl;
 HSPLcom/android/server/pm/PackageSetting;->queryInstalledUsers([IZ)[I
 HSPLcom/android/server/pm/PackageSetting;->readUserState(I)Lcom/android/server/pm/pkg/PackageUserStateInternal;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+PLcom/android/server/pm/PackageSetting;->removeInstallerPackage(Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
 PLcom/android/server/pm/PackageSetting;->removeUser(I)V
 PLcom/android/server/pm/PackageSetting;->resetOverrideComponentLabelIcon(I)V
 HSPLcom/android/server/pm/PackageSetting;->restoreComponentLPw(Ljava/lang/String;I)Z
@@ -38040,7 +39449,7 @@
 HSPLcom/android/server/pm/PackageUsage;->readToken(Ljava/io/InputStream;Ljava/lang/StringBuilder;C)Ljava/lang/String;
 HSPLcom/android/server/pm/PackageUsage;->readVersion1LP(Ljava/util/Map;Ljava/io/InputStream;Ljava/lang/StringBuilder;)V
 PLcom/android/server/pm/PackageUsage;->writeInternal(Ljava/lang/Object;)V
-HPLcom/android/server/pm/PackageUsage;->writeInternal(Ljava/util/Map;)V
+HPLcom/android/server/pm/PackageUsage;->writeInternal(Ljava/util/Map;)V+]Landroid/util/AtomicFile;Landroid/util/AtomicFile;]Ljava/lang/String;Ljava/lang/String;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/io/File;Ljava/io/File;]Ljava/io/BufferedOutputStream;Ljava/io/BufferedOutputStream;]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/AbstractStatsBase;Lcom/android/server/pm/PackageUsage;]Ljava/util/Collection;Ljava/util/Collections$UnmodifiableCollection;]Lcom/android/server/pm/pkg/PackageStateUnserialized;Lcom/android/server/pm/pkg/PackageStateUnserialized;]Ljava/util/Map;Lcom/android/server/utils/WatchedArrayMap;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;
 PLcom/android/server/pm/PackageVerificationResponse;-><init>(II)V
 PLcom/android/server/pm/PackageVerificationState;-><init>(Lcom/android/server/pm/VerificationParams;)V
 PLcom/android/server/pm/PackageVerificationState;->areAllVerificationsComplete()Z
@@ -38074,7 +39483,7 @@
 HPLcom/android/server/pm/PendingPackageBroadcasts;->getOrAllocate(ILjava/lang/String;)Ljava/util/ArrayList;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/pm/PendingPackageBroadcasts;->lambda$getOrAllocate$0(Ljava/lang/String;)Ljava/util/ArrayList;
 PLcom/android/server/pm/PendingPackageBroadcasts;->remove(I)V
-PLcom/android/server/pm/PendingPackageBroadcasts;->remove(ILjava/lang/String;)V
+HPLcom/android/server/pm/PendingPackageBroadcasts;->remove(ILjava/lang/String;)V
 PLcom/android/server/pm/PerPackageReadTimeouts;->parseDigestersList(Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
 HSPLcom/android/server/pm/PersistentPreferredActivity$1;-><init>(Lcom/android/server/pm/PersistentPreferredActivity;Lcom/android/server/pm/PersistentPreferredActivity;Lcom/android/server/utils/Watchable;)V
 HSPLcom/android/server/pm/PersistentPreferredActivity$1;->createSnapshot()Lcom/android/server/pm/PersistentPreferredActivity;
@@ -38144,17 +39553,17 @@
 PLcom/android/server/pm/PreferredActivityHelper;->addPreferredActivity(Lcom/android/server/pm/Computer;Lcom/android/server/pm/WatchedIntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;ZILjava/lang/String;Z)V
 PLcom/android/server/pm/PreferredActivityHelper;->clearPackagePreferredActivities(Lcom/android/server/pm/Computer;Ljava/lang/String;)V
 PLcom/android/server/pm/PreferredActivityHelper;->clearPackagePreferredActivities(Ljava/lang/String;I)V
-PLcom/android/server/pm/PreferredActivityHelper;->findPersistentPreferredActivity(Lcom/android/server/pm/Computer;Landroid/content/Intent;I)Landroid/content/pm/ResolveInfo;
+HPLcom/android/server/pm/PreferredActivityHelper;->findPersistentPreferredActivity(Lcom/android/server/pm/Computer;Landroid/content/Intent;I)Landroid/content/pm/ResolveInfo;
 PLcom/android/server/pm/PreferredActivityHelper;->findPreferredActivityNotLocked(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JLjava/util/List;ZZZI)Landroid/content/pm/ResolveInfo;
-HSPLcom/android/server/pm/PreferredActivityHelper;->findPreferredActivityNotLocked(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JLjava/util/List;ZZZIZ)Landroid/content/pm/ResolveInfo;
+HSPLcom/android/server/pm/PreferredActivityHelper;->findPreferredActivityNotLocked(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JLjava/util/List;ZZZIZ)Landroid/content/pm/ResolveInfo;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 PLcom/android/server/pm/PreferredActivityHelper;->getDefaultAppsBackup(I)[B
 PLcom/android/server/pm/PreferredActivityHelper;->getLastChosenActivity(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;I)Landroid/content/pm/ResolveInfo;
-PLcom/android/server/pm/PreferredActivityHelper;->getPreferredActivities(Lcom/android/server/pm/Computer;Ljava/util/List;Ljava/util/List;Ljava/lang/String;)I
-HPLcom/android/server/pm/PreferredActivityHelper;->getPreferredActivitiesInternal(Lcom/android/server/pm/Computer;Ljava/util/List;Ljava/util/List;Ljava/lang/String;)I
+HPLcom/android/server/pm/PreferredActivityHelper;->getPreferredActivities(Lcom/android/server/pm/Computer;Ljava/util/List;Ljava/util/List;Ljava/lang/String;)I
+HPLcom/android/server/pm/PreferredActivityHelper;->getPreferredActivitiesInternal(Lcom/android/server/pm/Computer;Ljava/util/List;Ljava/util/List;Ljava/lang/String;)I+]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/IntentResolver;Lcom/android/server/pm/PreferredIntentResolver;]Ljava/util/Iterator;Lcom/android/server/IntentResolver$IteratorWrapper;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 PLcom/android/server/pm/PreferredActivityHelper;->getPreferredActivityBackup(I)[B
 PLcom/android/server/pm/PreferredActivityHelper;->isHomeFilter(Lcom/android/server/pm/WatchedIntentFilter;)Z
 PLcom/android/server/pm/PreferredActivityHelper;->lambda$updateDefaultHomeNotLocked$0(ILjava/lang/Boolean;)V
-HPLcom/android/server/pm/PreferredActivityHelper;->replacePreferredActivity(Lcom/android/server/pm/Computer;Lcom/android/server/pm/WatchedIntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;I)V+]Lcom/android/server/pm/WatchedIntentResolver;Lcom/android/server/pm/PreferredIntentResolver;]Lcom/android/server/pm/WatchedIntentFilter;Lcom/android/server/pm/WatchedIntentFilter;]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/PreferredComponent;Lcom/android/server/pm/PreferredComponent;
+HSPLcom/android/server/pm/PreferredActivityHelper;->replacePreferredActivity(Lcom/android/server/pm/Computer;Lcom/android/server/pm/WatchedIntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;I)V+]Lcom/android/server/pm/WatchedIntentResolver;Lcom/android/server/pm/PreferredIntentResolver;]Lcom/android/server/pm/WatchedIntentFilter;Lcom/android/server/pm/WatchedIntentFilter;]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/PreferredComponent;Lcom/android/server/pm/PreferredComponent;
 PLcom/android/server/pm/PreferredActivityHelper;->setLastChosenActivity(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;ILcom/android/server/pm/WatchedIntentFilter;ILandroid/content/ComponentName;)V
 PLcom/android/server/pm/PreferredActivityHelper;->updateDefaultHomeNotLocked(Lcom/android/server/pm/Computer;I)Z
 PLcom/android/server/pm/PreferredActivityHelper;->updateDefaultHomeNotLocked(Lcom/android/server/pm/Computer;Landroid/util/SparseBooleanArray;)V
@@ -38167,7 +39576,7 @@
 HSPLcom/android/server/pm/PreferredComponent;->sameComponent(Landroid/content/ComponentName;)Z
 HSPLcom/android/server/pm/PreferredComponent;->sameSet(Lcom/android/server/pm/PreferredComponent;)Z
 HSPLcom/android/server/pm/PreferredComponent;->sameSet(Ljava/util/List;ZI)Z+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
-HPLcom/android/server/pm/PreferredComponent;->sameSet([Landroid/content/ComponentName;)Z+]Landroid/content/ComponentName;Landroid/content/ComponentName;
+HSPLcom/android/server/pm/PreferredComponent;->sameSet([Landroid/content/ComponentName;)Z+]Landroid/content/ComponentName;Landroid/content/ComponentName;
 HSPLcom/android/server/pm/PreferredComponent;->writeToXml(Landroid/util/TypedXmlSerializer;Z)V+]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;,Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;
 HSPLcom/android/server/pm/PreferredIntentResolver$1;-><init>(Lcom/android/server/pm/PreferredIntentResolver;Lcom/android/server/pm/PreferredIntentResolver;Lcom/android/server/utils/Watchable;)V
 HSPLcom/android/server/pm/PreferredIntentResolver$1;->createSnapshot()Lcom/android/server/pm/PreferredIntentResolver;
@@ -38177,7 +39586,7 @@
 HSPLcom/android/server/pm/PreferredIntentResolver;-><init>(Lcom/android/server/pm/PreferredIntentResolver;Lcom/android/server/pm/PreferredIntentResolver-IA;)V
 PLcom/android/server/pm/PreferredIntentResolver;->dumpFilter(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/pm/PreferredActivity;)V
 PLcom/android/server/pm/PreferredIntentResolver;->dumpFilter(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/Object;)V
-HSPLcom/android/server/pm/PreferredIntentResolver;->getIntentFilter(Lcom/android/server/pm/PreferredActivity;)Landroid/content/IntentFilter;
+HSPLcom/android/server/pm/PreferredIntentResolver;->getIntentFilter(Lcom/android/server/pm/PreferredActivity;)Landroid/content/IntentFilter;+]Lcom/android/server/pm/WatchedIntentFilter;Lcom/android/server/pm/PreferredActivity;
 HSPLcom/android/server/pm/PreferredIntentResolver;->getIntentFilter(Ljava/lang/Object;)Landroid/content/IntentFilter;+]Lcom/android/server/pm/PreferredIntentResolver;Lcom/android/server/pm/PreferredIntentResolver;
 PLcom/android/server/pm/PreferredIntentResolver;->isPackageForFilter(Ljava/lang/String;Lcom/android/server/pm/PreferredActivity;)Z
 PLcom/android/server/pm/PreferredIntentResolver;->isPackageForFilter(Ljava/lang/String;Ljava/lang/Object;)Z
@@ -38185,11 +39594,12 @@
 HSPLcom/android/server/pm/PreferredIntentResolver;->newArray(I)[Lcom/android/server/pm/PreferredActivity;
 HSPLcom/android/server/pm/PreferredIntentResolver;->newArray(I)[Ljava/lang/Object;
 HSPLcom/android/server/pm/PreferredIntentResolver;->shouldAddPreferredActivity(Lcom/android/server/pm/PreferredActivity;)Z
-HSPLcom/android/server/pm/PreferredIntentResolver;->snapshot()Lcom/android/server/pm/PreferredIntentResolver;
-HSPLcom/android/server/pm/PreferredIntentResolver;->snapshot()Ljava/lang/Object;
+HSPLcom/android/server/pm/PreferredIntentResolver;->snapshot()Lcom/android/server/pm/PreferredIntentResolver;+]Lcom/android/server/utils/SnapshotCache;Lcom/android/server/pm/PreferredIntentResolver$1;
+HSPLcom/android/server/pm/PreferredIntentResolver;->snapshot()Ljava/lang/Object;+]Lcom/android/server/pm/PreferredIntentResolver;Lcom/android/server/pm/PreferredIntentResolver;
 HSPLcom/android/server/pm/PreferredIntentResolver;->snapshot(Lcom/android/server/pm/PreferredActivity;)Lcom/android/server/pm/PreferredActivity;
 HSPLcom/android/server/pm/PreferredIntentResolver;->snapshot(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/pm/PrepareFailure;-><init>(ILjava/lang/String;)V
+PLcom/android/server/pm/PrepareFailure;->conflictsWithExistingPermission(Ljava/lang/String;Ljava/lang/String;)Lcom/android/server/pm/PrepareFailure;
 HSPLcom/android/server/pm/PrepareResult;-><init>(ZIILcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/ParsedPackage;ZZLcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;)V
 HSPLcom/android/server/pm/ProcessLoggingHandler$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/pm/ProcessLoggingHandler;Landroid/os/Bundle;Ljava/lang/String;)V
 HSPLcom/android/server/pm/ProcessLoggingHandler$$ExternalSyntheticLambda0;->run()V
@@ -38201,8 +39611,8 @@
 HSPLcom/android/server/pm/ProcessLoggingHandler;->enqueueSecurityLogEvent(Landroid/os/Bundle;Ljava/lang/String;)V
 PLcom/android/server/pm/ProcessLoggingHandler;->invalidateBaseApkHash(Ljava/lang/String;)V
 HSPLcom/android/server/pm/ProcessLoggingHandler;->lambda$enqueueSecurityLogEvent$1(Landroid/os/Bundle;Ljava/lang/String;)V
-HSPLcom/android/server/pm/ProcessLoggingHandler;->logAppProcessStart(Landroid/content/Context;Landroid/content/pm/PackageManagerInternal;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;I)V
-HSPLcom/android/server/pm/ProcessLoggingHandler;->logSecurityLogEvent(Landroid/os/Bundle;Ljava/lang/String;)V
+HSPLcom/android/server/pm/ProcessLoggingHandler;->logAppProcessStart(Landroid/content/Context;Landroid/content/pm/PackageManagerInternal;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;I)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/pm/ProcessLoggingHandler;Lcom/android/server/pm/ProcessLoggingHandler;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
+HSPLcom/android/server/pm/ProcessLoggingHandler;->logSecurityLogEvent(Landroid/os/Bundle;Ljava/lang/String;)V+]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLcom/android/server/pm/ProcessLoggingHandler;->processChecksum(Lcom/android/server/pm/ProcessLoggingHandler$LoggingInfo;[B)V
 HSPLcom/android/server/pm/ProcessLoggingHandler;->processChecksums(Lcom/android/server/pm/ProcessLoggingHandler$LoggingInfo;Ljava/util/List;)V
 HSPLcom/android/server/pm/ProtectedPackages;-><init>(Landroid/content/Context;)V
@@ -38217,6 +39627,7 @@
 HSPLcom/android/server/pm/ProtectedPackages;->setOwnerProtectedPackages(ILjava/util/List;)V
 HPLcom/android/server/pm/QueryIntentActivitiesResult;-><init>(Ljava/util/List;)V
 HSPLcom/android/server/pm/QueryIntentActivitiesResult;-><init>(ZZLjava/util/List;)V
+PLcom/android/server/pm/ReconcileFailure;-><init>(ILjava/lang/String;)V
 HSPLcom/android/server/pm/ReconcilePackageUtils;->isCompatSignatureUpdateNeeded(Lcom/android/server/pm/Settings$VersionInfo;)Z
 HSPLcom/android/server/pm/ReconcilePackageUtils;->isRecoverSignatureUpdateNeeded(Lcom/android/server/pm/Settings$VersionInfo;)Z
 HSPLcom/android/server/pm/ReconcilePackageUtils;->reconcilePackages(Lcom/android/server/pm/ReconcileRequest;Lcom/android/server/pm/SharedLibrariesImpl;Lcom/android/server/pm/KeySetManagerService;Lcom/android/server/pm/Settings;)Ljava/util/Map;
@@ -38239,7 +39650,7 @@
 HSPLcom/android/server/pm/ResolveIntentHelper;-><init>(Landroid/content/Context;Lcom/android/server/pm/PreferredActivityHelper;Lcom/android/server/compat/PlatformCompat;Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/verify/domain/DomainVerificationManagerInternal;Lcom/android/server/pm/UserNeedsBadgingCache;Ljava/util/function/Supplier;Ljava/util/function/Supplier;)V
 PLcom/android/server/pm/ResolveIntentHelper;->allHavePackage(Ljava/util/List;Ljava/lang/String;)Z
 HPLcom/android/server/pm/ResolveIntentHelper;->applyPostContentProviderResolutionFilter(Lcom/android/server/pm/Computer;Ljava/util/List;Ljava/lang/String;II)Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
-HSPLcom/android/server/pm/ResolveIntentHelper;->chooseBestActivity(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JJLjava/util/List;IZ)Landroid/content/pm/ResolveInfo;+]Ljava/util/function/Supplier;Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda56;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda57;]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Lcom/android/server/pm/PreferredActivityHelper;Lcom/android/server/pm/PreferredActivityHelper;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/pm/UserNeedsBadgingCache;Lcom/android/server/pm/UserNeedsBadgingCache;]Lcom/android/server/pm/ResolveIntentHelper;Lcom/android/server/pm/ResolveIntentHelper;
+HSPLcom/android/server/pm/ResolveIntentHelper;->chooseBestActivity(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JJLjava/util/List;IZ)Landroid/content/pm/ResolveInfo;+]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/util/function/Supplier;Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda55;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda56;,Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda57;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Lcom/android/server/pm/UserNeedsBadgingCache;Lcom/android/server/pm/UserNeedsBadgingCache;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Lcom/android/server/pm/ResolveIntentHelper;Lcom/android/server/pm/ResolveIntentHelper;]Lcom/android/server/pm/PreferredActivityHelper;Lcom/android/server/pm/PreferredActivityHelper;]Landroid/content/Intent;Landroid/content/Intent;
 PLcom/android/server/pm/ResolveIntentHelper;->queryIntentActivityOptionsInternal(Lcom/android/server/pm/Computer;Landroid/content/ComponentName;[Landroid/content/Intent;[Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;JI)Ljava/util/List;
 HPLcom/android/server/pm/ResolveIntentHelper;->queryIntentContentProvidersInternal(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JI)Ljava/util/List;
 HSPLcom/android/server/pm/ResolveIntentHelper;->queryIntentReceiversInternal(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JII)Ljava/util/List;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/resolution/ComponentResolverApi;Lcom/android/server/pm/resolution/ComponentResolverSnapshot;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;]Landroid/content/Intent;Landroid/content/Intent;
@@ -38259,7 +39670,7 @@
 PLcom/android/server/pm/RestrictionsSet;->remove(I)Z
 PLcom/android/server/pm/RestrictionsSet;->removeAllRestrictions()V
 HSPLcom/android/server/pm/RestrictionsSet;->size()I
-HSPLcom/android/server/pm/RestrictionsSet;->updateRestrictions(ILandroid/os/Bundle;)Z
+HSPLcom/android/server/pm/RestrictionsSet;->updateRestrictions(ILandroid/os/Bundle;)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/pm/RestrictionsSet;->writeRestrictions(Landroid/util/TypedXmlSerializer;Ljava/lang/String;)V
 HSPLcom/android/server/pm/SELinuxMMAC;-><clinit>()V
 HSPLcom/android/server/pm/SELinuxMMAC;->getSeInfo(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/pkg/SharedUserApi;Lcom/android/server/compat/PlatformCompat;)Ljava/lang/String;
@@ -38330,22 +39741,23 @@
 HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;-><clinit>()V
 HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;-><init>(Lcom/android/permission/persistence/RuntimePermissionsPersistence;Ljava/util/function/Consumer;)V
 HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->getExtendedFingerprint(J)Ljava/lang/String;
-HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->getPermissionsFromPermissionsState(Lcom/android/server/pm/permission/LegacyPermissionState;I)Ljava/util/List;+]Lcom/android/server/pm/permission/LegacyPermissionState;Lcom/android/server/pm/permission/LegacyPermissionState;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Collection;Ljava/util/Collections$UnmodifiableCollection;,Ljava/util/Collections$EmptyList;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;,Ljava/util/Collections$EmptyIterator;]Lcom/android/server/pm/permission/LegacyPermissionState$PermissionState;Lcom/android/server/pm/permission/LegacyPermissionState$PermissionState;
-PLcom/android/server/pm/Settings$RuntimePermissionPersistence;->getVersion(I)I
+HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->getPermissionsFromPermissionsState(Lcom/android/server/pm/permission/LegacyPermissionState;I)Ljava/util/List;+]Lcom/android/server/pm/permission/LegacyPermissionState;Lcom/android/server/pm/permission/LegacyPermissionState;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Collection;Ljava/util/Collections$UnmodifiableCollection;,Ljava/util/Collections$EmptyList;]Lcom/android/server/pm/permission/LegacyPermissionState$PermissionState;Lcom/android/server/pm/permission/LegacyPermissionState$PermissionState;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;,Ljava/util/Collections$EmptyIterator;
+HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->getVersion(I)I
 HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->isPermissionUpgradeNeeded(I)Z
 HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->lambda$writeStateForUser$0()V
 HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->lambda$writeStateForUser$1(Ljava/lang/Object;ZZLcom/android/server/pm/permission/LegacyPermissionDataProvider;Lcom/android/server/utils/WatchedArrayMap;ILcom/android/server/utils/WatchedArrayMap;ILjava/lang/String;Landroid/os/Handler;)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Lcom/android/server/pm/SettingBase;Lcom/android/server/pm/SharedUserSetting;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/permission/LegacyPermissionDataProvider;Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;]Lcom/android/server/pm/Settings$RuntimePermissionPersistence;Lcom/android/server/pm/Settings$RuntimePermissionPersistence;]Ljava/util/Map;Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->nextWritePermissionDelayMillis()J
 PLcom/android/server/pm/Settings$RuntimePermissionPersistence;->onUserRemoved(I)V
+HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->readLegacyStateForUserSync(ILjava/io/File;Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;)V
 HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->readPermissionsState(Ljava/util/List;Lcom/android/server/pm/permission/LegacyPermissionState;I)V
 HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->readStateForUserSync(ILcom/android/server/pm/Settings$VersionInfo;Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;Ljava/io/File;)V
 HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->setPermissionControllerVersion(J)V
-PLcom/android/server/pm/Settings$RuntimePermissionPersistence;->setVersion(II)V
+HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->setVersion(II)V
 HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->uniformRandom(DD)J
-PLcom/android/server/pm/Settings$RuntimePermissionPersistence;->updateRuntimePermissionsFingerprint(I)V
+HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->updateRuntimePermissionsFingerprint(I)V
 HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->writePendingStates()V
 HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->writeStateForUser(ILcom/android/server/pm/permission/LegacyPermissionDataProvider;Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;Landroid/os/Handler;Ljava/lang/Object;Z)V
-HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->writeStateForUserAsync(I)V
+HSPLcom/android/server/pm/Settings$RuntimePermissionPersistence;->writeStateForUserAsync(I)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Landroid/os/Handler;Lcom/android/server/pm/Settings$RuntimePermissionPersistence$MyHandler;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/os/Message;Landroid/os/Message;
 HSPLcom/android/server/pm/Settings$VersionInfo;-><init>()V
 HSPLcom/android/server/pm/Settings;->$r8$lambda$ixSPdCF8vj629_8vNHWCs5Jqk7M(Lcom/android/server/pm/Settings;Lcom/android/server/pm/SharedUserSetting;)V
 HSPLcom/android/server/pm/Settings;->-$$Nest$fgetmHandler(Lcom/android/server/pm/Settings;)Landroid/os/Handler;
@@ -38397,7 +39809,7 @@
 HPLcom/android/server/pm/Settings;->getBlockUninstallLPr(ILjava/lang/String;)Z+]Lcom/android/server/utils/WatchedSparseArray;Lcom/android/server/utils/WatchedSparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/pm/Settings;->getComponentEnabledSettingLPr(Landroid/content/ComponentName;I)I+]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Landroid/content/ComponentName;Landroid/content/ComponentName;
 HSPLcom/android/server/pm/Settings;->getCrossProfileIntentResolver(I)Lcom/android/server/pm/CrossProfileIntentResolver;+]Lcom/android/server/utils/WatchedSparseArray;Lcom/android/server/utils/WatchedSparseArray;
-PLcom/android/server/pm/Settings;->getDefaultRuntimePermissionsVersion(I)I
+HSPLcom/android/server/pm/Settings;->getDefaultRuntimePermissionsVersion(I)I
 HSPLcom/android/server/pm/Settings;->getDisabledSystemPkgLPr(Lcom/android/server/pm/PackageSetting;)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/Settings;->getDisabledSystemPkgLPr(Ljava/lang/String;)Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/Settings;->getInternalVersion()Lcom/android/server/pm/Settings$VersionInfo;
@@ -38420,7 +39832,7 @@
 HSPLcom/android/server/pm/Settings;->invalidatePackageCache()V
 PLcom/android/server/pm/Settings;->isAdbInstallDisallowed(Lcom/android/server/pm/UserManagerService;I)Z
 HSPLcom/android/server/pm/Settings;->isDisabledSystemPackageLPr(Ljava/lang/String;)Z
-PLcom/android/server/pm/Settings;->isInstallerPackage(Ljava/lang/String;)Z
+HSPLcom/android/server/pm/Settings;->isInstallerPackage(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/Settings;->isPermissionUpgradeNeeded(I)Z
 HSPLcom/android/server/pm/Settings;->isRegisteredObserver(Lcom/android/server/utils/Watcher;)Z
 HSPLcom/android/server/pm/Settings;->lambda$pruneSharedUsersLPw$0(Lcom/android/server/pm/SharedUserSetting;)V
@@ -38456,36 +39868,36 @@
 HSPLcom/android/server/pm/Settings;->removeRenamedPackageLPw(Ljava/lang/String;)V
 PLcom/android/server/pm/Settings;->removeUserLPw(I)V
 HPLcom/android/server/pm/Settings;->setBlockUninstallLPw(ILjava/lang/String;Z)V
-PLcom/android/server/pm/Settings;->setDefaultRuntimePermissionsVersion(II)V
+HSPLcom/android/server/pm/Settings;->setDefaultRuntimePermissionsVersion(II)V
 HSPLcom/android/server/pm/Settings;->setPermissionControllerVersion(J)V
 HSPLcom/android/server/pm/Settings;->snapshot()Lcom/android/server/pm/Settings;
 HSPLcom/android/server/pm/Settings;->systemReady(Lcom/android/server/pm/resolution/ComponentResolver;)Ljava/util/ArrayList;
 HSPLcom/android/server/pm/Settings;->updatePackageSetting(Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/SharedUserSetting;Lcom/android/server/pm/SharedUserSetting;Ljava/io/File;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IILcom/android/server/pm/UserManagerService;[Ljava/lang/String;[J[Ljava/lang/String;[JLjava/util/Set;Ljava/util/UUID;)V
-PLcom/android/server/pm/Settings;->updateRuntimePermissionsFingerprint(I)V
+HSPLcom/android/server/pm/Settings;->updateRuntimePermissionsFingerprint(I)V
 HSPLcom/android/server/pm/Settings;->writeAllRuntimePermissionsLPr()V
 HSPLcom/android/server/pm/Settings;->writeAllUsersPackageRestrictionsLPr()V
 HSPLcom/android/server/pm/Settings;->writeBlockUninstallPackagesLPr(Landroid/util/TypedXmlSerializer;I)V
 HSPLcom/android/server/pm/Settings;->writeCrossProfileIntentFiltersLPr(Landroid/util/TypedXmlSerializer;I)V+]Lcom/android/server/utils/WatchedSparseArray;Lcom/android/server/utils/WatchedSparseArray;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;]Lcom/android/server/IntentResolver;Lcom/android/server/pm/CrossProfileIntentResolver;]Lcom/android/server/pm/CrossProfileIntentFilter;Lcom/android/server/pm/CrossProfileIntentFilter;]Ljava/util/Set;Ljava/util/Collections$UnmodifiableSet;
 HSPLcom/android/server/pm/Settings;->writeDefaultAppsLPr(Lorg/xmlpull/v1/XmlSerializer;I)V
 HSPLcom/android/server/pm/Settings;->writeDisabledSysPackageLPr(Landroid/util/TypedXmlSerializer;Lcom/android/server/pm/PackageSetting;)V
-HSPLcom/android/server/pm/Settings;->writeIntToFile(Ljava/io/File;I)V
-HSPLcom/android/server/pm/Settings;->writeKernelMappingLPr()V
+HSPLcom/android/server/pm/Settings;->writeIntToFile(Ljava/io/File;I)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/io/File;Ljava/io/File;
+HSPLcom/android/server/pm/Settings;->writeKernelMappingLPr()V+]Ljava/io/File;Ljava/io/File;]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Ljava/util/Collection;Ljava/util/Collections$UnmodifiableCollection;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;
 HSPLcom/android/server/pm/Settings;->writeKernelMappingLPr(Lcom/android/server/pm/PackageSetting;)V
-HSPLcom/android/server/pm/Settings;->writeKernelMappingLPr(Ljava/lang/String;I[I)V
+HSPLcom/android/server/pm/Settings;->writeKernelMappingLPr(Ljava/lang/String;I[I)V+]Ljava/io/File;Ljava/io/File;]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;
 PLcom/android/server/pm/Settings;->writeKernelRemoveUserLPr(I)V
-HSPLcom/android/server/pm/Settings;->writeKeySetAliasesLPr(Landroid/util/TypedXmlSerializer;Lcom/android/server/pm/PackageKeySetData;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/Iterator;Landroid/util/MapCollections$MapIterator;]Ljava/util/Set;Landroid/util/MapCollections$EntrySet;]Lcom/android/server/pm/PackageKeySetData;Lcom/android/server/pm/PackageKeySetData;
+HSPLcom/android/server/pm/Settings;->writeKeySetAliasesLPr(Landroid/util/TypedXmlSerializer;Lcom/android/server/pm/PackageKeySetData;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/Iterator;Landroid/util/MapCollections$MapIterator;]Ljava/util/Set;Landroid/util/MapCollections$EntrySet;]Lcom/android/server/pm/PackageKeySetData;Lcom/android/server/pm/PackageKeySetData;]Ljava/util/Map$Entry;Landroid/util/MapCollections$MapIterator;]Ljava/lang/Long;Ljava/lang/Long;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;
 HSPLcom/android/server/pm/Settings;->writeLPr(Lcom/android/server/pm/Computer;)V+]Lcom/android/server/pm/permission/LegacyPermissionSettings;Lcom/android/server/pm/permission/LegacyPermissionSettings;]Ljava/io/File;Ljava/io/File;]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Ljava/util/Collection;Ljava/util/Collections$UnmodifiableCollection;]Lcom/android/server/pm/KeySetManagerService;Lcom/android/server/pm/KeySetManagerService;]Lcom/android/server/pm/verify/domain/DomainVerificationManagerInternal;Lcom/android/server/pm/verify/domain/DomainVerificationService;]Lcom/android/server/pm/PackageSignatures;Lcom/android/server/pm/PackageSignatures;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Lcom/android/server/utils/WatchedArrayList;Lcom/android/server/utils/WatchedArrayList;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;]Ljava/io/FileOutputStream;Ljava/io/FileOutputStream;
 HSPLcom/android/server/pm/Settings;->writeMimeGroupLPr(Landroid/util/TypedXmlSerializer;Ljava/util/Map;)V+]Ljava/util/Map;Ljava/util/Collections$EmptyMap;]Ljava/util/Iterator;Ljava/util/Collections$EmptyIterator;]Ljava/util/Set;Ljava/util/Collections$EmptySet;
 HSPLcom/android/server/pm/Settings;->writePackageLPr(Landroid/util/TypedXmlSerializer;Lcom/android/server/pm/PackageSetting;)V+]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/SettingBase;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/PackageSignatures;Lcom/android/server/pm/PackageSignatures;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Lcom/android/server/utils/WatchedArrayList;Lcom/android/server/utils/WatchedArrayList;]Ljava/util/UUID;Ljava/util/UUID;
 HSPLcom/android/server/pm/Settings;->writePackageListLPr()V
 HSPLcom/android/server/pm/Settings;->writePackageListLPr(I)V
 HSPLcom/android/server/pm/Settings;->writePackageListLPrInternal(I)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/IntArray;Landroid/util/IntArray;]Lcom/android/server/pm/pkg/AndroidPackageApi;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Ljava/util/Collection;Ljava/util/Collections$UnmodifiableCollection;]Ljava/io/FileOutputStream;Ljava/io/FileOutputStream;]Lcom/android/internal/util/JournaledFile;Lcom/android/internal/util/JournaledFile;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/io/File;Ljava/io/File;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/permission/LegacyPermissionDataProvider;Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/io/BufferedWriter;Ljava/io/BufferedWriter;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;
-HSPLcom/android/server/pm/Settings;->writePackageRestrictionsLPr(I)V+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;,Lcom/android/server/pm/pkg/PackageUserStateDefault;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/io/File;Ljava/io/File;]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Ljava/util/Collection;Ljava/util/Collections$UnmodifiableCollection;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;]Ljava/io/FileOutputStream;Ljava/io/FileOutputStream;]Lcom/android/server/pm/pkg/PackageUserStateInternal;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/pm/pkg/SuspendParams;Lcom/android/server/pm/pkg/SuspendParams;
+HSPLcom/android/server/pm/Settings;->writePackageRestrictionsLPr(I)V+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;,Lcom/android/server/pm/pkg/PackageUserStateDefault;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/pm/pkg/PackageUserStateInternal;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/SuspendParams;Lcom/android/server/pm/pkg/SuspendParams;]Ljava/util/Collection;Ljava/util/Collections$UnmodifiableCollection;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Ljava/io/FileOutputStream;Ljava/io/FileOutputStream;]Ljava/io/File;Ljava/io/File;]Lcom/android/server/pm/Settings;Lcom/android/server/pm/Settings;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;
 HSPLcom/android/server/pm/Settings;->writePermissionStateForUserLPr(IZ)V
 HSPLcom/android/server/pm/Settings;->writePersistentPreferredActivitiesLPr(Landroid/util/TypedXmlSerializer;I)V
 HSPLcom/android/server/pm/Settings;->writePreferredActivitiesLPr(Landroid/util/TypedXmlSerializer;IZ)V+]Lcom/android/server/utils/WatchedSparseArray;Lcom/android/server/utils/WatchedSparseArray;]Lcom/android/server/pm/PreferredActivity;Lcom/android/server/pm/PreferredActivity;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;,Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;]Lcom/android/server/IntentResolver;Lcom/android/server/pm/PreferredIntentResolver;]Ljava/util/Set;Ljava/util/Collections$UnmodifiableSet;
 HSPLcom/android/server/pm/Settings;->writeSigningKeySetLPr(Landroid/util/TypedXmlSerializer;Lcom/android/server/pm/PackageKeySetData;)V
-HSPLcom/android/server/pm/Settings;->writeUpgradeKeySetsLPr(Landroid/util/TypedXmlSerializer;Lcom/android/server/pm/PackageKeySetData;)V+]Lcom/android/server/pm/PackageKeySetData;Lcom/android/server/pm/PackageKeySetData;
+HSPLcom/android/server/pm/Settings;->writeUpgradeKeySetsLPr(Landroid/util/TypedXmlSerializer;Lcom/android/server/pm/PackageKeySetData;)V+]Lcom/android/server/pm/PackageKeySetData;Lcom/android/server/pm/PackageKeySetData;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;
 HSPLcom/android/server/pm/Settings;->writeUserRestrictionsLPw(Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;)V
 HSPLcom/android/server/pm/Settings;->writeUsesSdkLibLPw(Landroid/util/TypedXmlSerializer;[Ljava/lang/String;[J)V
 HSPLcom/android/server/pm/Settings;->writeUsesStaticLibLPw(Landroid/util/TypedXmlSerializer;[Ljava/lang/String;[J)V+]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;
@@ -38518,7 +39930,7 @@
 HSPLcom/android/server/pm/SettingsXml;->parser(Landroid/util/TypedXmlPullParser;)Lcom/android/server/pm/SettingsXml$ReadSection;
 HSPLcom/android/server/pm/SettingsXml;->serializer(Landroid/util/TypedXmlSerializer;)Lcom/android/server/pm/SettingsXml$Serializer;
 HPLcom/android/server/pm/ShareTargetInfo$TargetData;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/pm/ShareTargetInfo;-><init>([Lcom/android/server/pm/ShareTargetInfo$TargetData;Ljava/lang/String;[Ljava/lang/String;)V
+HPLcom/android/server/pm/ShareTargetInfo;-><init>([Lcom/android/server/pm/ShareTargetInfo$TargetData;Ljava/lang/String;[Ljava/lang/String;)V
 PLcom/android/server/pm/ShareTargetInfo;->loadFromXml(Landroid/util/TypedXmlPullParser;)Lcom/android/server/pm/ShareTargetInfo;
 PLcom/android/server/pm/ShareTargetInfo;->parseTargetData(Landroid/util/TypedXmlPullParser;)Lcom/android/server/pm/ShareTargetInfo$TargetData;
 HPLcom/android/server/pm/ShareTargetInfo;->saveToXml(Landroid/util/TypedXmlSerializer;)V+]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;
@@ -38542,7 +39954,7 @@
 HSPLcom/android/server/pm/SharedLibrariesImpl;->collectSharedLibraryInfos(Ljava/util/List;[J[[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZILjava/util/ArrayList;Ljava/util/Map;Ljava/util/Map;)Ljava/util/ArrayList;
 HSPLcom/android/server/pm/SharedLibrariesImpl;->commitSharedLibraryInfoLPw(Landroid/content/pm/SharedLibraryInfo;)V
 HSPLcom/android/server/pm/SharedLibrariesImpl;->dispatchChange(Lcom/android/server/utils/Watchable;)V
-HPLcom/android/server/pm/SharedLibrariesImpl;->dump(Ljava/io/PrintWriter;Lcom/android/server/pm/DumpState;)V
+HPLcom/android/server/pm/SharedLibrariesImpl;->dump(Ljava/io/PrintWriter;Lcom/android/server/pm/DumpState;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/pm/SharedLibraryInfo;Landroid/content/pm/SharedLibraryInfo;]Lcom/android/server/utils/WatchedLongSparseArray;Lcom/android/server/utils/WatchedLongSparseArray;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Lcom/android/server/pm/DumpState;Lcom/android/server/pm/DumpState;]Ljava/io/PrintWriter;Lcom/android/internal/util/FastPrintWriter;
 PLcom/android/server/pm/SharedLibrariesImpl;->dumpProto(Landroid/util/proto/ProtoOutputStream;)V
 HSPLcom/android/server/pm/SharedLibrariesImpl;->executeSharedLibrariesUpdateLPw(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/PackageSetting;Ljava/util/ArrayList;[I)V
 HSPLcom/android/server/pm/SharedLibrariesImpl;->getAll()Lcom/android/server/utils/WatchedArrayMap;
@@ -38557,7 +39969,7 @@
 HSPLcom/android/server/pm/SharedLibrariesImpl;->isRegisteredObserver(Lcom/android/server/utils/Watcher;)Z
 HSPLcom/android/server/pm/SharedLibrariesImpl;->lambda$executeSharedLibrariesUpdateLPw$0(Landroid/content/pm/SharedLibraryInfo;Landroid/content/pm/SharedLibraryInfo;)V
 HSPLcom/android/server/pm/SharedLibrariesImpl;->makeCache()Lcom/android/server/utils/SnapshotCache;
-HSPLcom/android/server/pm/SharedLibrariesImpl;->pruneUnusedStaticSharedLibraries(Lcom/android/server/pm/Computer;JJ)Z
+HSPLcom/android/server/pm/SharedLibrariesImpl;->pruneUnusedStaticSharedLibraries(Lcom/android/server/pm/Computer;JJ)Z+]Landroid/content/pm/SharedLibraryInfo;Landroid/content/pm/SharedLibraryInfo;]Lcom/android/server/utils/WatchedLongSparseArray;Lcom/android/server/utils/WatchedLongSparseArray;]Lcom/android/server/pm/pkg/AndroidPackageApi;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/DeletePackageHelper;Lcom/android/server/pm/DeletePackageHelper;]Landroid/content/pm/VersionedPackage;Landroid/content/pm/VersionedPackage;]Lcom/android/server/pm/PackageManagerServiceInjector;Lcom/android/server/pm/PackageManagerServiceInjector;]Lcom/android/server/pm/SharedLibrariesImpl;Lcom/android/server/pm/SharedLibrariesImpl;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Landroid/os/storage/StorageManager;Landroid/os/storage/StorageManager;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;
 HSPLcom/android/server/pm/SharedLibrariesImpl;->registerObserver(Lcom/android/server/utils/Watcher;)V
 HSPLcom/android/server/pm/SharedLibrariesImpl;->registerObservers()V
 HSPLcom/android/server/pm/SharedLibrariesImpl;->removeSharedLibraryLPw(Ljava/lang/String;J)Z
@@ -38585,7 +39997,7 @@
 PLcom/android/server/pm/SharedUserSetting;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLcom/android/server/pm/SharedUserSetting;->fixSeInfoLocked()V
 HSPLcom/android/server/pm/SharedUserSetting;->getDisabledPackageSettings()Lcom/android/server/utils/WatchedArraySet;
-PLcom/android/server/pm/SharedUserSetting;->getDisabledPackageStates()Landroid/util/ArraySet;
+HSPLcom/android/server/pm/SharedUserSetting;->getDisabledPackageStates()Landroid/util/ArraySet;
 HSPLcom/android/server/pm/SharedUserSetting;->getPackageSettings()Lcom/android/server/utils/WatchedArraySet;
 HSPLcom/android/server/pm/SharedUserSetting;->getPackageStates()Landroid/util/ArraySet;+]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;
 HSPLcom/android/server/pm/SharedUserSetting;->getPackages()Ljava/util/List;
@@ -38596,7 +40008,7 @@
 PLcom/android/server/pm/SharedUserSetting;->isSingleUser()Z
 HSPLcom/android/server/pm/SharedUserSetting;->makeCache()Lcom/android/server/utils/SnapshotCache;
 HSPLcom/android/server/pm/SharedUserSetting;->registerObservers()V
-PLcom/android/server/pm/SharedUserSetting;->removePackage(Lcom/android/server/pm/PackageSetting;)Z
+HSPLcom/android/server/pm/SharedUserSetting;->removePackage(Lcom/android/server/pm/PackageSetting;)Z
 HSPLcom/android/server/pm/SharedUserSetting;->snapshot()Lcom/android/server/pm/SharedUserSetting;+]Lcom/android/server/utils/SnapshotCache;Lcom/android/server/pm/SharedUserSetting$2;,Lcom/android/server/pm/SharedUserSetting$1;
 HSPLcom/android/server/pm/SharedUserSetting;->snapshot()Ljava/lang/Object;+]Lcom/android/server/pm/SharedUserSetting;Lcom/android/server/pm/SharedUserSetting;
 HSPLcom/android/server/pm/SharedUserSetting;->toString()Ljava/lang/String;
@@ -38607,13 +40019,13 @@
 PLcom/android/server/pm/ShortcutBitmapSaver$$ExternalSyntheticLambda1;->run()V
 HPLcom/android/server/pm/ShortcutBitmapSaver$PendingItem;-><init>(Landroid/content/pm/ShortcutInfo;[B)V
 HPLcom/android/server/pm/ShortcutBitmapSaver$PendingItem;-><init>(Landroid/content/pm/ShortcutInfo;[BLcom/android/server/pm/ShortcutBitmapSaver$PendingItem-IA;)V
-PLcom/android/server/pm/ShortcutBitmapSaver;->$r8$lambda$-1g27ExM8UzJH_SvMl8E9yZUE78(Ljava/util/concurrent/CountDownLatch;)V
+HPLcom/android/server/pm/ShortcutBitmapSaver;->$r8$lambda$-1g27ExM8UzJH_SvMl8E9yZUE78(Ljava/util/concurrent/CountDownLatch;)V
 PLcom/android/server/pm/ShortcutBitmapSaver;->$r8$lambda$wTyI8zwnwwg8BpWOL1clEGh2JGE(Lcom/android/server/pm/ShortcutBitmapSaver;)V
 HSPLcom/android/server/pm/ShortcutBitmapSaver;-><init>(Lcom/android/server/pm/ShortcutService;)V
 PLcom/android/server/pm/ShortcutBitmapSaver;->dumpLocked(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HPLcom/android/server/pm/ShortcutBitmapSaver;->getBitmapPathMayWaitLocked(Landroid/content/pm/ShortcutInfo;)Ljava/lang/String;
 PLcom/android/server/pm/ShortcutBitmapSaver;->lambda$new$1()V
-PLcom/android/server/pm/ShortcutBitmapSaver;->lambda$waitForAllSavesLocked$0(Ljava/util/concurrent/CountDownLatch;)V
+HPLcom/android/server/pm/ShortcutBitmapSaver;->lambda$waitForAllSavesLocked$0(Ljava/util/concurrent/CountDownLatch;)V
 HPLcom/android/server/pm/ShortcutBitmapSaver;->processPendingItems()Z
 HPLcom/android/server/pm/ShortcutBitmapSaver;->removeIcon(Landroid/content/pm/ShortcutInfo;)V
 HPLcom/android/server/pm/ShortcutBitmapSaver;->saveBitmapLocked(Landroid/content/pm/ShortcutInfo;ILandroid/graphics/Bitmap$CompressFormat;I)V
@@ -38628,7 +40040,7 @@
 PLcom/android/server/pm/ShortcutDumpFiles;->$r8$lambda$h1i4W_R9vmQsm2yaAuZluGHj9og([BLjava/io/PrintWriter;)V
 PLcom/android/server/pm/ShortcutDumpFiles;->$r8$lambda$pGG0rowFI37DIvF9-khNJsT-nLM(Ljava/io/File;)Ljava/lang/String;
 HSPLcom/android/server/pm/ShortcutDumpFiles;-><init>(Lcom/android/server/pm/ShortcutService;)V
-PLcom/android/server/pm/ShortcutDumpFiles;->dumpAll(Ljava/io/PrintWriter;)V
+HPLcom/android/server/pm/ShortcutDumpFiles;->dumpAll(Ljava/io/PrintWriter;)V
 PLcom/android/server/pm/ShortcutDumpFiles;->lambda$dumpAll$1(Ljava/io/File;)Z
 PLcom/android/server/pm/ShortcutDumpFiles;->lambda$dumpAll$2(Ljava/io/File;)Ljava/lang/String;
 PLcom/android/server/pm/ShortcutDumpFiles;->lambda$save$0([BLjava/io/PrintWriter;)V
@@ -38642,7 +40054,7 @@
 PLcom/android/server/pm/ShortcutLauncher;->ensurePackageInfo()V
 PLcom/android/server/pm/ShortcutLauncher;->getOwnerUserId()I
 HPLcom/android/server/pm/ShortcutLauncher;->getPinnedShortcutIds(Ljava/lang/String;I)Landroid/util/ArraySet;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
-PLcom/android/server/pm/ShortcutLauncher;->getShortcutPackageItemFile()Ljava/io/File;
+HPLcom/android/server/pm/ShortcutLauncher;->getShortcutPackageItemFile()Ljava/io/File;
 PLcom/android/server/pm/ShortcutLauncher;->hasPinned(Landroid/content/pm/ShortcutInfo;)Z
 PLcom/android/server/pm/ShortcutLauncher;->loadFromFile(Ljava/io/File;Lcom/android/server/pm/ShortcutUser;IZ)Lcom/android/server/pm/ShortcutLauncher;
 PLcom/android/server/pm/ShortcutLauncher;->loadFromXml(Landroid/util/TypedXmlPullParser;Lcom/android/server/pm/ShortcutUser;IZ)Lcom/android/server/pm/ShortcutLauncher;
@@ -38654,7 +40066,7 @@
 HPLcom/android/server/pm/ShortcutNonPersistentUser;->hasHostPackage(Ljava/lang/String;)Z
 PLcom/android/server/pm/ShortcutNonPersistentUser;->setShortcutHostPackage(Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda10;-><init>()V
-PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda10;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda10;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda11;-><init>(Lcom/android/server/pm/ShortcutPackage;Landroid/content/pm/ShortcutInfo;)V
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda11;->run()V
 PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda12;-><init>()V
@@ -38665,54 +40077,104 @@
 PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda14;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda15;-><init>(Ljava/util/Set;)V
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda15;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda16;-><init>()V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda16;->accept(Ljava/lang/Object;)V+]Lcom/android/server/pm/ShortcutPackageItem;Lcom/android/server/pm/ShortcutLauncher;
+PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda17;-><init>(Lcom/android/server/pm/ShortcutPackage;)V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda17;->run()V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda18;-><init>()V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda18;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda19;->accept(Ljava/lang/Object;)V
-PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda20;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda20;-><init>(Lcom/android/server/pm/ShortcutPackage;Landroid/util/ArrayMap;I)V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda20;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda21;-><init>(Lcom/android/server/pm/ShortcutPackage;)V
+PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda21;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda22;-><init>(I)V
+PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda22;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda23;-><init>(Ljava/util/function/Consumer;)V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda23;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda24;-><init>(Lcom/android/server/pm/ShortcutPackage;J)V
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda24;->accept(Ljava/lang/Object;)V
-PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda25;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda25;-><init>(Lcom/android/server/pm/ShortcutPackage;Lcom/android/server/pm/ShortcutService;Landroid/content/res/Resources;)V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda25;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda26;-><init>(Ljava/io/PrintWriter;Ljava/lang/String;[J)V
+PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda26;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda27;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda28;-><init>(Lcom/android/server/pm/ShortcutPackage;Landroid/content/pm/ShortcutInfo;)V
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda28;->accept(Ljava/lang/Object;)V
-PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda29;-><init>(Landroid/util/ArraySet;)V
-PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda29;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda29;-><init>(Landroid/util/ArraySet;)V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda29;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/pm/ShortcutPackage;Ljava/util/List;Ljava/util/function/Predicate;ILjava/lang/String;Landroid/util/ArraySet;Z)V
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;)V
-PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda31;-><init>(Landroid/util/ArrayMap;)V
+PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda30;-><init>(Landroid/content/res/Resources;Lcom/android/server/pm/ShortcutService;Ljava/util/List;)V
+PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda30;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda31;-><init>(Landroid/util/ArrayMap;)V
 PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda31;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda32;-><init>()V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda32;-><init>()V
 PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda32;->test(Ljava/lang/Object;)Z
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda33;-><init>(Lcom/android/server/pm/ShortcutPackage;Ljava/util/ArrayList;Lcom/android/server/pm/ShortcutService;[Z)V
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda33;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda38;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda34;-><init>()V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda34;->test(Ljava/lang/Object;)Z+]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda35;-><init>(Ljava/util/List;)V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda35;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda36;-><init>(Lcom/android/server/pm/ShortcutPackage;Ljava/util/Set;Ljava/util/function/Consumer;)V
+PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda36;->run()V
+PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda37;-><init>(Lcom/android/server/pm/ShortcutPackage;)V
+PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda37;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda38;-><init>(Lcom/android/server/pm/ShortcutPackage;ZI)V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda38;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda39;-><init>(Lcom/android/server/pm/ShortcutPackage;)V
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda39;->accept(Ljava/lang/Object;)V
 PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda3;-><init>()V
 PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda40;-><init>(Lcom/android/server/pm/ShortcutPackage;Landroid/util/ArrayMap;)V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda40;->accept(Ljava/lang/Object;)V
 PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda41;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda42;-><init>(Lcom/android/server/pm/ShortcutPackage;Ljava/util/Set;Ljava/util/function/Consumer;)V
 PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda42;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda43;-><init>(Landroid/util/ArraySet;)V
 PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda43;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda44;-><init>(Lcom/android/internal/infra/AndroidFuture;Landroid/app/appsearch/AppSearchSession;)V
 PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda44;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda45;-><init>([Z)V
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda45;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda46;-><init>()V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda46;-><init>()V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda46;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda47;-><init>()V
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda47;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda48;-><init>(Lcom/android/server/pm/ShortcutPackage;Ljava/util/Collection;)V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda48;->run()V
+PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda49;-><init>()V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda49;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda4;-><init>(J)V
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;)V
 PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda51;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda53;-><init>(Lcom/android/server/pm/ShortcutPackage;Ljava/util/Collection;)V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda53;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda58;-><init>(Lcom/android/server/pm/ShortcutPackage;Ljava/util/Collection;)V
+PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda58;->run()V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda59;-><init>(Lcom/android/server/pm/ShortcutPackage;Ljava/util/Collection;)V
+HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda59;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda5;-><init>(JI)V
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;)V
 PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/pm/ShortcutPackage;Ljava/lang/String;I)V
+PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda6;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda7;-><init>()V
 PLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda7;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda8;-><init>()V
 HPLcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda8;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 PLcom/android/server/pm/ShortcutPackage$1$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/pm/ShortcutPackage$1;)V
+PLcom/android/server/pm/ShortcutPackage$1$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/pm/ShortcutPackage$1;->$r8$lambda$guoWLnNTn1DzOJ1LXA9MRWgslaA(Lcom/android/server/pm/ShortcutPackage$1;Landroid/app/appsearch/GenericDocument;)Landroid/content/pm/ShortcutInfo;
 PLcom/android/server/pm/ShortcutPackage$1;-><init>(Lcom/android/server/pm/ShortcutPackage;Ljava/util/function/Consumer;)V
+PLcom/android/server/pm/ShortcutPackage$1;->lambda$onResult$0(Landroid/app/appsearch/GenericDocument;)Landroid/content/pm/ShortcutInfo;
 PLcom/android/server/pm/ShortcutPackage$1;->onResult(Landroid/app/appsearch/AppSearchBatchResult;)V
 HPLcom/android/server/pm/ShortcutPackage$2;-><init>(Lcom/android/server/pm/ShortcutPackage;)V
 HPLcom/android/server/pm/ShortcutPackage$2;->onResult(Landroid/app/appsearch/AppSearchBatchResult;)V
 HPLcom/android/server/pm/ShortcutPackage$3;-><init>(Lcom/android/server/pm/ShortcutPackage;)V
 HPLcom/android/server/pm/ShortcutPackage$3;->onResult(Landroid/app/appsearch/AppSearchBatchResult;)V+]Ljava/util/Collection;Ljava/util/Collections$UnmodifiableCollection;]Landroid/app/appsearch/AppSearchResult;Landroid/app/appsearch/AppSearchResult;]Ljava/util/Map;Ljava/util/Collections$UnmodifiableMap;]Landroid/app/appsearch/AppSearchBatchResult;Landroid/app/appsearch/AppSearchBatchResult;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;
 PLcom/android/server/pm/ShortcutPackage$3;->onSystemError(Ljava/lang/Throwable;)V
+PLcom/android/server/pm/ShortcutPackage;->$r8$lambda$0OPViTpSXmR_8CBmG2JSATOA2Mo(ILandroid/content/pm/ShortcutInfo;)V
 PLcom/android/server/pm/ShortcutPackage;->$r8$lambda$0bHAMNeR0vecnB7EL2KAd35HQ30([ZLandroid/content/pm/ShortcutInfo;)Ljava/lang/Boolean;
 HPLcom/android/server/pm/ShortcutPackage;->$r8$lambda$0d0pylOGJbZNtykAzObT3-tYn64(Ljava/util/function/Consumer;Landroid/content/pm/ShortcutInfo;)Ljava/lang/Boolean;
 HPLcom/android/server/pm/ShortcutPackage;->$r8$lambda$20zZy67G0lDgeTjE_L9OZUuWkBA(Lcom/android/server/pm/ShortcutPackage;Landroid/content/pm/ShortcutInfo;Landroid/app/appsearch/AppSearchSession;)V
@@ -38739,6 +40201,7 @@
 PLcom/android/server/pm/ShortcutPackage;->$r8$lambda$a-wygHRDq-XwGRTMBYQ-rgHXjyY(Landroid/content/pm/ShortcutInfo;)V
 HPLcom/android/server/pm/ShortcutPackage;->$r8$lambda$bD7w8QF6TVkLsCxChj1C53NK-4M(Lcom/android/server/pm/ShortcutPackage;Landroid/util/ArrayMap;Landroid/content/pm/ShortcutInfo;)V
 PLcom/android/server/pm/ShortcutPackage;->$r8$lambda$cK88VppT2awh2YfaQroHSnWAVao(Lcom/android/server/pm/ShortcutPackage;Landroid/content/pm/ShortcutInfo;)V
+PLcom/android/server/pm/ShortcutPackage;->$r8$lambda$dHTkqLvE6X78n0TpwTv2mIjgxLA(Lcom/android/server/pm/ShortcutPackage;Ljava/lang/String;ILandroid/content/pm/ShortcutInfo;)V
 HPLcom/android/server/pm/ShortcutPackage;->$r8$lambda$gUt7RKfcOZ_QtYvIaFdPComUqDQ(JLandroid/content/pm/ShortcutInfo;)V
 PLcom/android/server/pm/ShortcutPackage;->$r8$lambda$j2BtkWExLjQ-QZkoJdl0cZraAIM(Landroid/app/appsearch/AppSearchResult;)V
 HPLcom/android/server/pm/ShortcutPackage;->$r8$lambda$kDIwWxiUE302MtneFGk1Oh1Y9Qw(Ljava/util/Set;Landroid/content/pm/ShortcutInfo;)V
@@ -38756,6 +40219,7 @@
 HPLcom/android/server/pm/ShortcutPackage;->addOrReplaceDynamicShortcut(Landroid/content/pm/ShortcutInfo;)Z
 HPLcom/android/server/pm/ShortcutPackage;->adjustRanks()V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;]Lcom/android/server/pm/ShortcutPackage;Lcom/android/server/pm/ShortcutPackage;]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/pm/ShortcutPackage;->areAllActivitiesStillEnabled()Z
+PLcom/android/server/pm/ShortcutPackage;->canRestoreAnyVersion()Z
 PLcom/android/server/pm/ShortcutPackage;->cleanupDanglingBitmapFiles(Ljava/io/File;)V
 HPLcom/android/server/pm/ShortcutPackage;->clearAllImplicitRanks()V
 HPLcom/android/server/pm/ShortcutPackage;->deleteAllDynamicShortcuts()Ljava/util/List;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;]Lcom/android/server/pm/ShortcutPackage;Lcom/android/server/pm/ShortcutPackage;]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
@@ -38773,14 +40237,14 @@
 HPLcom/android/server/pm/ShortcutPackage;->ensureNoBitmapIconIfShortcutIsLongLived(Ljava/util/List;)V
 HPLcom/android/server/pm/ShortcutPackage;->ensureNotImmutable(Landroid/content/pm/ShortcutInfo;Z)V
 HPLcom/android/server/pm/ShortcutPackage;->ensureNotImmutable(Ljava/lang/String;Z)V
-HPLcom/android/server/pm/ShortcutPackage;->filter(Ljava/util/List;Ljava/util/function/Predicate;ILjava/lang/String;Landroid/util/ArraySet;ZLandroid/content/pm/ShortcutInfo;)V+]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/function/Predicate;megamorphic_types]Landroid/util/ArraySet;Landroid/util/ArraySet;
-HPLcom/android/server/pm/ShortcutPackage;->findAll(Ljava/util/Collection;)Ljava/util/List;
+HPLcom/android/server/pm/ShortcutPackage;->filter(Ljava/util/List;Ljava/util/function/Predicate;ILjava/lang/String;Landroid/util/ArraySet;ZLandroid/content/pm/ShortcutInfo;)V+]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/function/Predicate;megamorphic_types
+HPLcom/android/server/pm/ShortcutPackage;->findAll(Ljava/util/Collection;)Ljava/util/List;+]Ljava/util/Collection;Landroid/util/ArraySet;]Ljava/util/stream/Stream;Ljava/util/stream/ReferencePipeline$Head;,Ljava/util/stream/ReferencePipeline$3;,Ljava/util/stream/ReferencePipeline$2;
 HPLcom/android/server/pm/ShortcutPackage;->findAll(Ljava/util/List;Ljava/util/function/Predicate;I)V
 HPLcom/android/server/pm/ShortcutPackage;->findAll(Ljava/util/List;Ljava/util/function/Predicate;ILjava/lang/String;IZ)V+]Lcom/android/server/pm/ShortcutPackageInfo;Lcom/android/server/pm/ShortcutPackageInfo;]Lcom/android/server/pm/ShortcutPackageItem;Lcom/android/server/pm/ShortcutPackage;]Lcom/android/server/pm/ShortcutPackage;Lcom/android/server/pm/ShortcutPackage;]Lcom/android/server/pm/ShortcutLauncher;Lcom/android/server/pm/ShortcutLauncher;]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
 HPLcom/android/server/pm/ShortcutPackage;->findShortcutById(Ljava/lang/String;)Landroid/content/pm/ShortcutInfo;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HPLcom/android/server/pm/ShortcutPackage;->forEachShortcut(Ljava/util/function/Consumer;)V+]Lcom/android/server/pm/ShortcutPackage;Lcom/android/server/pm/ShortcutPackage;
 HPLcom/android/server/pm/ShortcutPackage;->forEachShortcutMutate(Ljava/util/function/Consumer;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/function/Consumer;megamorphic_types
-HPLcom/android/server/pm/ShortcutPackage;->forEachShortcutStopWhen(Ljava/util/function/Function;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/function/Function;Lcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda32;,Lcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda44;,Lcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda22;,Lcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda43;,Lcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda33;,Lcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda51;]Ljava/lang/Boolean;Ljava/lang/Boolean;
+HPLcom/android/server/pm/ShortcutPackage;->forEachShortcutStopWhen(Ljava/util/function/Function;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/function/Function;Lcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda33;,Lcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda23;,Lcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda45;,Lcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda32;,Lcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda22;,Lcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda44;,Lcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda43;,Lcom/android/server/pm/ShortcutPackage$$ExternalSyntheticLambda51;]Ljava/lang/Boolean;Ljava/lang/Boolean;
 HPLcom/android/server/pm/ShortcutPackage;->forceDeleteShortcutInner(Ljava/lang/String;)Landroid/content/pm/ShortcutInfo;
 HPLcom/android/server/pm/ShortcutPackage;->forceReplaceShortcutInner(Landroid/content/pm/ShortcutInfo;)V
 HPLcom/android/server/pm/ShortcutPackage;->fromAppSearch()Lcom/android/internal/infra/AndroidFuture;+]Landroid/app/appsearch/AppSearchManager$SearchContext$Builder;Landroid/app/appsearch/AppSearchManager$SearchContext$Builder;]Lcom/android/server/pm/ShortcutPackageItem;Lcom/android/server/pm/ShortcutPackage;]Lcom/android/server/pm/ShortcutUser;Lcom/android/server/pm/ShortcutUser;]Landroid/os/StrictMode$ThreadPolicy$Builder;Landroid/os/StrictMode$ThreadPolicy$Builder;
@@ -38804,7 +40268,8 @@
 HPLcom/android/server/pm/ShortcutPackage;->lambda$adjustRanks$25(JILandroid/content/pm/ShortcutInfo;)V
 HPLcom/android/server/pm/ShortcutPackage;->lambda$areAllActivitiesStillEnabled$14(Ljava/util/ArrayList;Lcom/android/server/pm/ShortcutService;[ZLandroid/content/pm/ShortcutInfo;)Ljava/lang/Boolean;+]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;]Lcom/android/server/pm/ShortcutPackage;Lcom/android/server/pm/ShortcutPackage;]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 PLcom/android/server/pm/ShortcutPackage;->lambda$deleteLongLivedWithId$5(Landroid/content/pm/ShortcutInfo;)V
-PLcom/android/server/pm/ShortcutPackage;->lambda$deleteOrDisableWithId$7(ZILandroid/content/pm/ShortcutInfo;)V
+HPLcom/android/server/pm/ShortcutPackage;->lambda$deleteOrDisableWithId$7(ZILandroid/content/pm/ShortcutInfo;)V
+PLcom/android/server/pm/ShortcutPackage;->lambda$disableWithId$6(Ljava/lang/String;ILandroid/content/pm/ShortcutInfo;)V
 HPLcom/android/server/pm/ShortcutPackage;->lambda$dump$27(Ljava/io/PrintWriter;Ljava/lang/String;[JLandroid/content/pm/ShortcutInfo;)V
 PLcom/android/server/pm/ShortcutPackage;->lambda$enableWithId$8(Landroid/content/pm/ShortcutInfo;)V
 HPLcom/android/server/pm/ShortcutPackage;->lambda$enforceShortcutCountsBeforeOperation$21(Landroid/util/ArrayMap;ILandroid/content/pm/ShortcutInfo;)V
@@ -38816,17 +40281,18 @@
 PLcom/android/server/pm/ShortcutPackage;->lambda$hasNoShortcut$30([ZLandroid/content/pm/ShortcutInfo;)Ljava/lang/Boolean;
 PLcom/android/server/pm/ShortcutPackage;->lambda$new$18(Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;)I
 HPLcom/android/server/pm/ShortcutPackage;->lambda$new$23(Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;)I+]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;
+PLcom/android/server/pm/ShortcutPackage;->lambda$onRestored$0(ILandroid/content/pm/ShortcutInfo;)V
 HPLcom/android/server/pm/ShortcutPackage;->lambda$publishManifestShortcuts$17(Landroid/util/ArraySet;Landroid/content/pm/ShortcutInfo;)V
 HPLcom/android/server/pm/ShortcutPackage;->lambda$pushDynamicShortcut$1(Landroid/app/appsearch/AppSearchResult;)V
 HPLcom/android/server/pm/ShortcutPackage;->lambda$pushDynamicShortcut$2(Landroid/content/pm/ShortcutInfo;Landroid/app/appsearch/AppSearchSession;)V
 HPLcom/android/server/pm/ShortcutPackage;->lambda$pushDynamicShortcut$3(Landroid/content/pm/ShortcutInfo;)V
 PLcom/android/server/pm/ShortcutPackage;->lambda$refreshPinnedFlags$10(Landroid/content/pm/ShortcutInfo;)V
 HPLcom/android/server/pm/ShortcutPackage;->lambda$refreshPinnedFlags$11(Ljava/util/Set;Landroid/content/pm/ShortcutInfo;)V+]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;]Ljava/util/Set;Landroid/util/ArraySet;
-HPLcom/android/server/pm/ShortcutPackage;->lambda$refreshPinnedFlags$9(Ljava/util/Set;Lcom/android/server/pm/ShortcutLauncher;)V
+HPLcom/android/server/pm/ShortcutPackage;->lambda$refreshPinnedFlags$9(Ljava/util/Set;Lcom/android/server/pm/ShortcutLauncher;)V+]Lcom/android/server/pm/ShortcutPackageItem;Lcom/android/server/pm/ShortcutPackage;]Lcom/android/server/pm/ShortcutLauncher;Lcom/android/server/pm/ShortcutLauncher;
 PLcom/android/server/pm/ShortcutPackage;->lambda$removeAllShortcutsAsync$37(Landroid/app/appsearch/AppSearchResult;)V
 HPLcom/android/server/pm/ShortcutPackage;->lambda$removeAllShortcutsAsync$38(Landroid/app/appsearch/AppSearchSession;)V
 HPLcom/android/server/pm/ShortcutPackage;->lambda$removeAllShortcutsAsync$39()V
-HPLcom/android/server/pm/ShortcutPackage;->lambda$removeOrphans$4(Ljava/util/List;Landroid/content/pm/ShortcutInfo;)V
+HPLcom/android/server/pm/ShortcutPackage;->lambda$removeOrphans$4(Ljava/util/List;Landroid/content/pm/ShortcutInfo;)V+]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;]Ljava/util/List;Ljava/util/ArrayList;
 HPLcom/android/server/pm/ShortcutPackage;->lambda$removeShortcutAsync$42(Ljava/util/Collection;Landroid/app/appsearch/AppSearchSession;)V
 HPLcom/android/server/pm/ShortcutPackage;->lambda$removeShortcutAsync$43(Ljava/util/Collection;)V
 PLcom/android/server/pm/ShortcutPackage;->lambda$rescanPackageIfNeeded$15(JLandroid/content/pm/ShortcutInfo;)V
@@ -38840,23 +40306,24 @@
 PLcom/android/server/pm/ShortcutPackage;->loadFromFile(Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutUser;Ljava/io/File;Z)Lcom/android/server/pm/ShortcutPackage;
 HPLcom/android/server/pm/ShortcutPackage;->loadFromXml(Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutUser;Landroid/util/TypedXmlPullParser;Z)Lcom/android/server/pm/ShortcutPackage;
 HPLcom/android/server/pm/ShortcutPackage;->mutateShortcut(Ljava/lang/String;Landroid/content/pm/ShortcutInfo;Ljava/util/function/Consumer;)V
+PLcom/android/server/pm/ShortcutPackage;->onRestored(I)V
 HPLcom/android/server/pm/ShortcutPackage;->parseIntent(Landroid/util/TypedXmlPullParser;)Landroid/content/Intent;
 PLcom/android/server/pm/ShortcutPackage;->parsePerson(Landroid/util/TypedXmlPullParser;)Landroid/app/Person;
 HPLcom/android/server/pm/ShortcutPackage;->parseShortcut(Landroid/util/TypedXmlPullParser;Ljava/lang/String;IZ)Landroid/content/pm/ShortcutInfo;
 HPLcom/android/server/pm/ShortcutPackage;->publishManifestShortcuts(Ljava/util/List;)Z
 HPLcom/android/server/pm/ShortcutPackage;->pushDynamicShortcut(Landroid/content/pm/ShortcutInfo;Ljava/util/List;)Z
 HPLcom/android/server/pm/ShortcutPackage;->pushOutExcessShortcuts()Z
-HPLcom/android/server/pm/ShortcutPackage;->refreshPinnedFlags()V
+HPLcom/android/server/pm/ShortcutPackage;->refreshPinnedFlags()V+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/ShortcutPackage;Lcom/android/server/pm/ShortcutPackage;]Lcom/android/server/pm/ShortcutUser;Lcom/android/server/pm/ShortcutUser;
 HPLcom/android/server/pm/ShortcutPackage;->removeAllShortcutsAsync()V
-HPLcom/android/server/pm/ShortcutPackage;->removeOrphans()Ljava/util/List;
+HPLcom/android/server/pm/ShortcutPackage;->removeOrphans()Ljava/util/List;+]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;]Lcom/android/server/pm/ShortcutPackage;Lcom/android/server/pm/ShortcutPackage;]Ljava/util/List;Ljava/util/ArrayList;
 HPLcom/android/server/pm/ShortcutPackage;->removeShortcutAsync(Ljava/util/Collection;)V
 HPLcom/android/server/pm/ShortcutPackage;->removeShortcutAsync([Ljava/lang/String;)V
 HPLcom/android/server/pm/ShortcutPackage;->rescanPackageIfNeeded(ZZ)Z+]Landroid/content/pm/PackageInfo;Landroid/content/pm/PackageInfo;]Lcom/android/server/pm/ShortcutPackageInfo;Lcom/android/server/pm/ShortcutPackageInfo;]Lcom/android/server/pm/ShortcutPackageItem;Lcom/android/server/pm/ShortcutPackage;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/ShortcutPackage;Lcom/android/server/pm/ShortcutPackage;]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/pm/ShortcutPackage;->resetRateLimiting()V
 PLcom/android/server/pm/ShortcutPackage;->resetRateLimitingForCommandLineNoSaving()V
-PLcom/android/server/pm/ShortcutPackage;->resolveResourceStrings()V
+HPLcom/android/server/pm/ShortcutPackage;->resolveResourceStrings()V
 HPLcom/android/server/pm/ShortcutPackage;->runAsSystem(Ljava/lang/Runnable;)V
-HPLcom/android/server/pm/ShortcutPackage;->saveShortcut(Landroid/util/TypedXmlSerializer;Landroid/content/pm/ShortcutInfo;ZZ)V+]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;]Landroid/app/Person;Landroid/app/Person;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;,Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;]Landroid/content/LocusId;Landroid/content/LocusId;]Ljava/util/Set;Landroid/util/ArraySet;]Lcom/android/server/pm/ShortcutPackageInfo;Lcom/android/server/pm/ShortcutPackageInfo;]Lcom/android/server/pm/ShortcutPackageItem;Lcom/android/server/pm/ShortcutPackage;]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
+HPLcom/android/server/pm/ShortcutPackage;->saveShortcut(Landroid/util/TypedXmlSerializer;Landroid/content/pm/ShortcutInfo;ZZ)V+]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;]Landroid/app/Person;Landroid/app/Person;]Lcom/android/server/pm/ShortcutPackageInfo;Lcom/android/server/pm/ShortcutPackageInfo;]Lcom/android/server/pm/ShortcutPackageItem;Lcom/android/server/pm/ShortcutPackage;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;,Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;]Landroid/content/LocusId;Landroid/content/LocusId;]Ljava/util/Set;Landroid/util/ArraySet;]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
 HPLcom/android/server/pm/ShortcutPackage;->saveShortcut(Ljava/util/Collection;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;]Ljava/util/Collection;Ljava/util/Arrays$ArrayList;]Ljava/util/Iterator;Ljava/util/Arrays$ArrayItr;
 HPLcom/android/server/pm/ShortcutPackage;->saveShortcut([Landroid/content/pm/ShortcutInfo;)V
 HPLcom/android/server/pm/ShortcutPackage;->saveShortcutsAsync(Ljava/util/Collection;)V+]Ljava/util/Collection;Ljava/util/ArrayList;]Lcom/android/server/pm/ShortcutPackage;Lcom/android/server/pm/ShortcutPackage;
@@ -38866,16 +40333,19 @@
 HPLcom/android/server/pm/ShortcutPackage;->sortShortcutsToActivities()Landroid/util/ArrayMap;
 HPLcom/android/server/pm/ShortcutPackage;->tryApiCall(Z)Z
 HPLcom/android/server/pm/ShortcutPackageInfo;-><init>(JJLjava/util/ArrayList;Z)V
+PLcom/android/server/pm/ShortcutPackageInfo;->canRestoreTo(Lcom/android/server/pm/ShortcutService;Landroid/content/pm/PackageInfo;Z)I
 HPLcom/android/server/pm/ShortcutPackageInfo;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/pm/ShortcutPackageInfo;->getBackupSourceVersionCode()J
 HPLcom/android/server/pm/ShortcutPackageInfo;->getLastUpdateTime()J
 HPLcom/android/server/pm/ShortcutPackageInfo;->getVersionCode()J
+PLcom/android/server/pm/ShortcutPackageInfo;->hasSignatures()Z
 HPLcom/android/server/pm/ShortcutPackageInfo;->isBackupAllowed()Z
 HPLcom/android/server/pm/ShortcutPackageInfo;->isShadow()Z
 HPLcom/android/server/pm/ShortcutPackageInfo;->loadFromXml(Landroid/util/TypedXmlPullParser;Z)V
 HPLcom/android/server/pm/ShortcutPackageInfo;->newEmpty()Lcom/android/server/pm/ShortcutPackageInfo;
 HPLcom/android/server/pm/ShortcutPackageInfo;->refreshSignature(Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutPackageItem;)V
 HPLcom/android/server/pm/ShortcutPackageInfo;->saveToXml(Lcom/android/server/pm/ShortcutService;Landroid/util/TypedXmlSerializer;Z)V+]Ljava/util/Base64$Encoder;Ljava/util/Base64$Encoder;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;,Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+PLcom/android/server/pm/ShortcutPackageInfo;->setShadow(Z)V
 HPLcom/android/server/pm/ShortcutPackageInfo;->updateFromPackageInfo(Landroid/content/pm/PackageInfo;)V
 HPLcom/android/server/pm/ShortcutPackageItem$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/pm/ShortcutPackageItem;)V
 HPLcom/android/server/pm/ShortcutPackageItem$$ExternalSyntheticLambda0;->run()V
@@ -38893,10 +40363,10 @@
 HPLcom/android/server/pm/ShortcutPackageItem;->saveBitmap(Landroid/content/pm/ShortcutInfo;ILandroid/graphics/Bitmap$CompressFormat;I)V
 HPLcom/android/server/pm/ShortcutPackageItem;->saveShortcutPackageItem()V
 HPLcom/android/server/pm/ShortcutPackageItem;->saveToFileLocked(Ljava/io/File;Z)V
-HPLcom/android/server/pm/ShortcutPackageItem;->scheduleSave()V
+HPLcom/android/server/pm/ShortcutPackageItem;->scheduleSave()V+]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
 PLcom/android/server/pm/ShortcutPackageItem;->scheduleSaveToAppSearchLocked()V
 HPLcom/android/server/pm/ShortcutPackageItem;->waitForBitmapSaves()Z
-PLcom/android/server/pm/ShortcutParser;->createShortcutFromManifest(Lcom/android/server/pm/ShortcutService;ILjava/lang/String;Ljava/lang/String;Landroid/content/ComponentName;IIIIIZLjava/lang/String;)Landroid/content/pm/ShortcutInfo;
+HPLcom/android/server/pm/ShortcutParser;->createShortcutFromManifest(Lcom/android/server/pm/ShortcutService;ILjava/lang/String;Ljava/lang/String;Landroid/content/ComponentName;IIIIIZLjava/lang/String;)Landroid/content/pm/ShortcutInfo;
 PLcom/android/server/pm/ShortcutParser;->parseCategories(Lcom/android/server/pm/ShortcutService;Landroid/util/AttributeSet;)Ljava/lang/String;
 HPLcom/android/server/pm/ShortcutParser;->parseCategory(Lcom/android/server/pm/ShortcutService;Landroid/util/AttributeSet;)Ljava/lang/String;
 HPLcom/android/server/pm/ShortcutParser;->parseShareTargetAttributes(Lcom/android/server/pm/ShortcutService;Landroid/util/AttributeSet;)Lcom/android/server/pm/ShareTargetInfo;
@@ -38904,11 +40374,16 @@
 HPLcom/android/server/pm/ShortcutParser;->parseShortcutAttributes(Lcom/android/server/pm/ShortcutService;Landroid/util/AttributeSet;Ljava/lang/String;Landroid/content/ComponentName;II)Landroid/content/pm/ShortcutInfo;
 HPLcom/android/server/pm/ShortcutParser;->parseShortcuts(Lcom/android/server/pm/ShortcutService;Ljava/lang/String;ILjava/util/List;)Ljava/util/List;+]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
 HPLcom/android/server/pm/ShortcutParser;->parseShortcutsOneFile(Lcom/android/server/pm/ShortcutService;Landroid/content/pm/ActivityInfo;Ljava/lang/String;ILjava/util/List;Ljava/util/List;)Ljava/util/List;+]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;]Landroid/content/res/XmlResourceParser;Landroid/content/res/XmlBlock$Parser;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/content/Intent;Landroid/content/Intent;]Ljava/util/Set;Landroid/util/ArraySet;
+PLcom/android/server/pm/ShortcutRequestPinProcessor$PinAppWidgetRequestInner;-><init>(Lcom/android/server/pm/ShortcutRequestPinProcessor;Landroid/content/IntentSender;ILandroid/appwidget/AppWidgetProviderInfo;Landroid/os/Bundle;)V
+PLcom/android/server/pm/ShortcutRequestPinProcessor$PinAppWidgetRequestInner;-><init>(Lcom/android/server/pm/ShortcutRequestPinProcessor;Landroid/content/IntentSender;ILandroid/appwidget/AppWidgetProviderInfo;Landroid/os/Bundle;Lcom/android/server/pm/ShortcutRequestPinProcessor$PinAppWidgetRequestInner-IA;)V
+PLcom/android/server/pm/ShortcutRequestPinProcessor$PinAppWidgetRequestInner;->getAppWidgetProviderInfo()Landroid/appwidget/AppWidgetProviderInfo;
+PLcom/android/server/pm/ShortcutRequestPinProcessor$PinAppWidgetRequestInner;->getExtras()Landroid/os/Bundle;
 PLcom/android/server/pm/ShortcutRequestPinProcessor$PinItemRequestInner;-><init>(Lcom/android/server/pm/ShortcutRequestPinProcessor;Landroid/content/IntentSender;I)V
 PLcom/android/server/pm/ShortcutRequestPinProcessor$PinItemRequestInner;-><init>(Lcom/android/server/pm/ShortcutRequestPinProcessor;Landroid/content/IntentSender;ILcom/android/server/pm/ShortcutRequestPinProcessor$PinItemRequestInner-IA;)V
 PLcom/android/server/pm/ShortcutRequestPinProcessor$PinItemRequestInner;->accept(Landroid/os/Bundle;)Z
 PLcom/android/server/pm/ShortcutRequestPinProcessor$PinItemRequestInner;->isCallerValid()Z
 PLcom/android/server/pm/ShortcutRequestPinProcessor$PinItemRequestInner;->isValid()Z
+PLcom/android/server/pm/ShortcutRequestPinProcessor$PinItemRequestInner;->tryAccept()Z
 PLcom/android/server/pm/ShortcutRequestPinProcessor$PinShortcutRequestInner;-><init>(Lcom/android/server/pm/ShortcutRequestPinProcessor;Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;Landroid/content/IntentSender;Ljava/lang/String;IIZ)V
 PLcom/android/server/pm/ShortcutRequestPinProcessor$PinShortcutRequestInner;-><init>(Lcom/android/server/pm/ShortcutRequestPinProcessor;Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;Landroid/content/IntentSender;Ljava/lang/String;IIZLcom/android/server/pm/ShortcutRequestPinProcessor$PinShortcutRequestInner-IA;)V
 PLcom/android/server/pm/ShortcutRequestPinProcessor$PinShortcutRequestInner;->getShortcutInfo()Landroid/content/pm/ShortcutInfo;
@@ -38933,7 +40408,7 @@
 PLcom/android/server/pm/ShortcutService$$ExternalSyntheticLambda12;-><init>(Ljava/util/List;Landroid/content/IntentFilter;)V
 PLcom/android/server/pm/ShortcutService$$ExternalSyntheticLambda12;->accept(Ljava/lang/Object;)V
 PLcom/android/server/pm/ShortcutService$$ExternalSyntheticLambda13;-><init>(Ljava/lang/String;I)V
-PLcom/android/server/pm/ShortcutService$$ExternalSyntheticLambda13;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/pm/ShortcutService$$ExternalSyntheticLambda13;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/pm/ShortcutService$$ExternalSyntheticLambda14;-><init>()V
 HPLcom/android/server/pm/ShortcutService$$ExternalSyntheticLambda14;->accept(Ljava/lang/Object;)V
 PLcom/android/server/pm/ShortcutService$$ExternalSyntheticLambda15;-><init>(Lcom/android/server/pm/ShortcutPackage;)V
@@ -38959,8 +40434,8 @@
 PLcom/android/server/pm/ShortcutService$$ExternalSyntheticLambda25;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/pm/ShortcutService$$ExternalSyntheticLambda26;-><init>(Lcom/android/server/pm/ShortcutService;ILjava/util/List;Ljava/lang/String;Landroid/os/UserHandle;Ljava/util/List;)V
 HPLcom/android/server/pm/ShortcutService$$ExternalSyntheticLambda26;->run()V
-PLcom/android/server/pm/ShortcutService$$ExternalSyntheticLambda27;-><init>(Lcom/android/server/pm/ShortcutService;Ljava/lang/String;IZ)V
-PLcom/android/server/pm/ShortcutService$$ExternalSyntheticLambda27;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/pm/ShortcutService$$ExternalSyntheticLambda27;-><init>(Lcom/android/server/pm/ShortcutService;Ljava/lang/String;IZ)V
+HPLcom/android/server/pm/ShortcutService$$ExternalSyntheticLambda27;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/pm/ShortcutService$$ExternalSyntheticLambda28;-><init>(Lcom/android/server/pm/ShortcutService;ILjava/lang/String;)V
 HPLcom/android/server/pm/ShortcutService$$ExternalSyntheticLambda28;->run()V
 PLcom/android/server/pm/ShortcutService$$ExternalSyntheticLambda2;-><init>()V
@@ -38988,13 +40463,13 @@
 HSPLcom/android/server/pm/ShortcutService$4$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/pm/ShortcutService$4;II)V
 HSPLcom/android/server/pm/ShortcutService$4$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/pm/ShortcutService$4$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/pm/ShortcutService$4;I)V
-HPLcom/android/server/pm/ShortcutService$4$$ExternalSyntheticLambda1;->run()V
-HPLcom/android/server/pm/ShortcutService$4;->$r8$lambda$o-GMYJODjEGeeLFRCz-tEWsjaqw(Lcom/android/server/pm/ShortcutService$4;I)V
+HSPLcom/android/server/pm/ShortcutService$4$$ExternalSyntheticLambda1;->run()V
+HSPLcom/android/server/pm/ShortcutService$4;->$r8$lambda$o-GMYJODjEGeeLFRCz-tEWsjaqw(Lcom/android/server/pm/ShortcutService$4;I)V
 HSPLcom/android/server/pm/ShortcutService$4;->$r8$lambda$tIj5dNZmbkr7JJ4r-Bu6DFbpH_g(Lcom/android/server/pm/ShortcutService$4;II)V
 HSPLcom/android/server/pm/ShortcutService$4;-><init>(Lcom/android/server/pm/ShortcutService;)V
-HPLcom/android/server/pm/ShortcutService$4;->lambda$onUidGone$1(I)V
+HSPLcom/android/server/pm/ShortcutService$4;->lambda$onUidGone$1(I)V+]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
 HSPLcom/android/server/pm/ShortcutService$4;->lambda$onUidStateChanged$0(II)V+]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
-HSPLcom/android/server/pm/ShortcutService$4;->onUidGone(IZ)V
+HSPLcom/android/server/pm/ShortcutService$4;->onUidGone(IZ)V+]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
 HSPLcom/android/server/pm/ShortcutService$4;->onUidStateChanged(IIJI)V+]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
 HSPLcom/android/server/pm/ShortcutService$5;-><init>(Lcom/android/server/pm/ShortcutService;)V
 HSPLcom/android/server/pm/ShortcutService$5;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
@@ -39025,6 +40500,8 @@
 HPLcom/android/server/pm/ShortcutService$LocalService$$ExternalSyntheticLambda10;->test(Ljava/lang/Object;)Z
 PLcom/android/server/pm/ShortcutService$LocalService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/pm/ShortcutService$LocalService;Lcom/android/internal/infra/AndroidFuture;Lcom/android/server/pm/ShortcutPackage;)V
 PLcom/android/server/pm/ShortcutService$LocalService$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
+PLcom/android/server/pm/ShortcutService$LocalService$$ExternalSyntheticLambda3;-><init>(Lcom/android/internal/infra/AndroidFuture;)V
+PLcom/android/server/pm/ShortcutService$LocalService$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;)V
 PLcom/android/server/pm/ShortcutService$LocalService$$ExternalSyntheticLambda4;-><init>()V
 PLcom/android/server/pm/ShortcutService$LocalService$$ExternalSyntheticLambda4;->test(Ljava/lang/Object;)Z
 PLcom/android/server/pm/ShortcutService$LocalService$$ExternalSyntheticLambda7;-><init>(Ljava/util/function/Consumer;)V
@@ -39033,6 +40510,7 @@
 PLcom/android/server/pm/ShortcutService$LocalService$$ExternalSyntheticLambda8;->test(Ljava/lang/Object;)Z
 PLcom/android/server/pm/ShortcutService$LocalService;->$r8$lambda$1vEm_Z4o2MeXd3Bn1D3Vq0tBwYo(Lcom/android/server/pm/ShortcutService$LocalService;Lcom/android/internal/infra/AndroidFuture;Lcom/android/server/pm/ShortcutPackage;Landroid/content/pm/ShortcutInfo;)V
 HPLcom/android/server/pm/ShortcutService$LocalService;->$r8$lambda$CJWVsjy2BQJEQeSrxiWu-pYgR1M(Lcom/android/server/pm/ShortcutService$LocalService;ILjava/lang/String;Ljava/util/List;Ljava/util/List;JLandroid/content/ComponentName;IILjava/util/ArrayList;IIILcom/android/server/pm/ShortcutPackage;)V
+PLcom/android/server/pm/ShortcutService$LocalService;->$r8$lambda$Pu08oBWjCYgELXnKfILryngjKrs(Lcom/android/internal/infra/AndroidFuture;Landroid/content/pm/ShortcutInfo;)V
 PLcom/android/server/pm/ShortcutService$LocalService;->$r8$lambda$aTMsTd23ASqcnMMlpoL2S93E88A(Ljava/lang/String;Landroid/content/pm/ShortcutInfo;)Z
 PLcom/android/server/pm/ShortcutService$LocalService;->$r8$lambda$lUwp1O-Yo51VmdXkoYkP1YBLItQ(Ljava/util/function/Consumer;Ljava/util/List;)V
 PLcom/android/server/pm/ShortcutService$LocalService;->$r8$lambda$n_WOId_3T49L5bSl2N7IDr5x4AI(Landroid/content/pm/ShortcutInfo;)Z
@@ -39042,8 +40520,10 @@
 HSPLcom/android/server/pm/ShortcutService$LocalService;->addListener(Landroid/content/pm/ShortcutServiceInternal$ShortcutChangeListener;)V
 HSPLcom/android/server/pm/ShortcutService$LocalService;->addShortcutChangeCallback(Landroid/content/pm/LauncherApps$ShortcutChangeCallback;)V
 PLcom/android/server/pm/ShortcutService$LocalService;->cacheShortcuts(ILjava/lang/String;Ljava/lang/String;Ljava/util/List;II)V
+PLcom/android/server/pm/ShortcutService$LocalService;->createShortcutIntents(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;III)[Landroid/content/Intent;
 PLcom/android/server/pm/ShortcutService$LocalService;->createShortcutIntentsAsync(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;IIILcom/android/internal/infra/AndroidFuture;)V
 HPLcom/android/server/pm/ShortcutService$LocalService;->getFilterFromQuery(Landroid/util/ArraySet;Ljava/util/List;JLandroid/content/ComponentName;IZ)Ljava/util/function/Predicate;
+PLcom/android/server/pm/ShortcutService$LocalService;->getShareTargets(Ljava/lang/String;Landroid/content/IntentFilter;I)Ljava/util/List;
 HPLcom/android/server/pm/ShortcutService$LocalService;->getShortcutIconFdAsync(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;ILcom/android/internal/infra/AndroidFuture;)V
 HPLcom/android/server/pm/ShortcutService$LocalService;->getShortcutIconParcelFileDescriptor(Lcom/android/server/pm/ShortcutPackage;Landroid/content/pm/ShortcutInfo;)Landroid/os/ParcelFileDescriptor;
 PLcom/android/server/pm/ShortcutService$LocalService;->getShortcutInfoAsync(ILjava/lang/String;Ljava/lang/String;ILjava/util/function/Consumer;)V
@@ -39055,6 +40535,7 @@
 PLcom/android/server/pm/ShortcutService$LocalService;->isForegroundDefaultLauncher(Ljava/lang/String;I)Z
 PLcom/android/server/pm/ShortcutService$LocalService;->isPinnedByCaller(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Z
 PLcom/android/server/pm/ShortcutService$LocalService;->isRequestPinItemSupported(II)Z
+PLcom/android/server/pm/ShortcutService$LocalService;->lambda$createShortcutIntentsAsync$7(Lcom/android/internal/infra/AndroidFuture;Landroid/content/pm/ShortcutInfo;)V
 HPLcom/android/server/pm/ShortcutService$LocalService;->lambda$getFilterFromQuery$1(JLandroid/util/ArraySet;Landroid/util/ArraySet;Landroid/content/ComponentName;ZZZZZLandroid/content/pm/ShortcutInfo;)Z+]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/content/ComponentName;Landroid/content/ComponentName;
 PLcom/android/server/pm/ShortcutService$LocalService;->lambda$getShortcutIconFdAsync$8(Lcom/android/internal/infra/AndroidFuture;Lcom/android/server/pm/ShortcutPackage;Landroid/content/pm/ShortcutInfo;)V
 PLcom/android/server/pm/ShortcutService$LocalService;->lambda$getShortcutInfoAsync$5(Ljava/util/function/Consumer;Ljava/util/List;)V
@@ -39062,6 +40543,7 @@
 HPLcom/android/server/pm/ShortcutService$LocalService;->lambda$getShortcuts$0(ILjava/lang/String;Ljava/util/List;Ljava/util/List;JLandroid/content/ComponentName;IILjava/util/ArrayList;IIILcom/android/server/pm/ShortcutPackage;)V+]Lcom/android/server/pm/ShortcutService$LocalService;Lcom/android/server/pm/ShortcutService$LocalService;]Lcom/android/server/pm/ShortcutPackageItem;Lcom/android/server/pm/ShortcutPackage;
 PLcom/android/server/pm/ShortcutService$LocalService;->lambda$pinShortcuts$6(Landroid/content/pm/ShortcutInfo;)Z
 PLcom/android/server/pm/ShortcutService$LocalService;->pinShortcuts(ILjava/lang/String;Ljava/lang/String;Ljava/util/List;I)V
+PLcom/android/server/pm/ShortcutService$LocalService;->requestPinAppWidget(Ljava/lang/String;Landroid/appwidget/AppWidgetProviderInfo;Landroid/os/Bundle;Landroid/content/IntentSender;I)Z
 PLcom/android/server/pm/ShortcutService$LocalService;->setShortcutHostPackage(Ljava/lang/String;Ljava/lang/String;I)V
 PLcom/android/server/pm/ShortcutService$LocalService;->uncacheShortcuts(ILjava/lang/String;Ljava/lang/String;Ljava/util/List;II)V
 HPLcom/android/server/pm/ShortcutService$LocalService;->updateCachedShortcutsInternal(ILjava/lang/String;Ljava/lang/String;Ljava/util/List;IIZ)V
@@ -39074,7 +40556,7 @@
 HPLcom/android/server/pm/ShortcutService;->$r8$lambda$CS7ZblwITawe-Ziv9iQgLqP7uMg(Lcom/android/server/pm/ShortcutService;ILandroid/content/pm/ResolveInfo;)Z
 PLcom/android/server/pm/ShortcutService;->$r8$lambda$DVlclTb8XXOMuM2yYmogpc2NJeA(Ljava/util/List;Landroid/content/IntentFilter;Lcom/android/server/pm/ShortcutPackage;)V
 PLcom/android/server/pm/ShortcutService;->$r8$lambda$L7M8jQORN5Qfb9Ko6qECTY66-Oo(Landroid/content/pm/ShortcutInfo;)Z
-PLcom/android/server/pm/ShortcutService;->$r8$lambda$LucJpHgHaWFfXOmpRNNkySX-X1E(Lcom/android/server/pm/ShortcutService;ILjava/util/List;Ljava/lang/String;Landroid/os/UserHandle;Ljava/util/List;)V
+HPLcom/android/server/pm/ShortcutService;->$r8$lambda$LucJpHgHaWFfXOmpRNNkySX-X1E(Lcom/android/server/pm/ShortcutService;ILjava/util/List;Ljava/lang/String;Landroid/os/UserHandle;Ljava/util/List;)V
 PLcom/android/server/pm/ShortcutService;->$r8$lambda$MK7qwMYvx5oq-mBcoIvNy7BghpQ(Lcom/android/server/pm/ShortcutService;Ljava/util/ArrayList;Lcom/android/server/pm/ShortcutPackageItem;)V
 HPLcom/android/server/pm/ShortcutService;->$r8$lambda$RuXfBaTXLIYNxLiHJ3rAeCiDspc(ILandroid/content/pm/ShortcutInfo;)Z
 PLcom/android/server/pm/ShortcutService;->$r8$lambda$Uq4xkry_E3aTrGmgDxecqUPPX1A(Lcom/android/server/pm/ShortcutService;Ljava/lang/String;IZLcom/android/server/pm/ShortcutUser;)V
@@ -39100,6 +40582,7 @@
 PLcom/android/server/pm/ShortcutService;->-$$Nest$mhandlePackageRemoved(Lcom/android/server/pm/ShortcutService;Ljava/lang/String;I)V
 PLcom/android/server/pm/ShortcutService;->-$$Nest$mhandlePackageUpdateFinished(Lcom/android/server/pm/ShortcutService;Ljava/lang/String;I)V
 PLcom/android/server/pm/ShortcutService;->-$$Nest$mprepareChangedShortcuts(Lcom/android/server/pm/ShortcutService;Landroid/util/ArraySet;Landroid/util/ArraySet;Ljava/util/List;Lcom/android/server/pm/ShortcutPackage;)Ljava/util/List;
+PLcom/android/server/pm/ShortcutService;->-$$Nest$mrequestPinItem(Lcom/android/server/pm/ShortcutService;Ljava/lang/String;ILandroid/content/pm/ShortcutInfo;Landroid/appwidget/AppWidgetProviderInfo;Landroid/os/Bundle;Landroid/content/IntentSender;)Z
 HPLcom/android/server/pm/ShortcutService;->-$$Nest$msetReturnedByServer(Lcom/android/server/pm/ShortcutService;Ljava/util/List;)Ljava/util/List;
 PLcom/android/server/pm/ShortcutService;->-$$Nest$smisInstalled(Landroid/content/pm/PackageInfo;)Z
 HSPLcom/android/server/pm/ShortcutService;-><clinit>()V
@@ -39120,7 +40603,7 @@
 PLcom/android/server/pm/ShortcutService;->dumpDumpFiles(Ljava/io/PrintWriter;)V
 PLcom/android/server/pm/ShortcutService;->dumpInner(Ljava/io/PrintWriter;Lcom/android/server/pm/ShortcutService$DumpFilter;)V
 PLcom/android/server/pm/ShortcutService;->dumpNoCheck(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/pm/ShortcutService;->dumpUid(Ljava/io/PrintWriter;)V
+HPLcom/android/server/pm/ShortcutService;->dumpUid(Ljava/io/PrintWriter;)V
 PLcom/android/server/pm/ShortcutService;->enableShortcuts(Ljava/lang/String;Ljava/util/List;I)V
 PLcom/android/server/pm/ShortcutService;->enforceCallingOrSelfPermission(Ljava/lang/String;Ljava/lang/String;)V
 HPLcom/android/server/pm/ShortcutService;->enforceMaxActivityShortcuts(I)V
@@ -39130,7 +40613,7 @@
 HPLcom/android/server/pm/ShortcutService;->fixUpIncomingShortcutInfo(Landroid/content/pm/ShortcutInfo;Z)V
 HPLcom/android/server/pm/ShortcutService;->fixUpIncomingShortcutInfo(Landroid/content/pm/ShortcutInfo;ZZ)V
 HPLcom/android/server/pm/ShortcutService;->fixUpShortcutResourceNamesAndValues(Landroid/content/pm/ShortcutInfo;)V
-PLcom/android/server/pm/ShortcutService;->forEachLoadedUserLocked(Ljava/util/function/Consumer;)V
+HPLcom/android/server/pm/ShortcutService;->forEachLoadedUserLocked(Ljava/util/function/Consumer;)V
 PLcom/android/server/pm/ShortcutService;->forUpdatedPackages(IJZLjava/util/function/Consumer;)V
 PLcom/android/server/pm/ShortcutService;->formatTime(J)Ljava/lang/String;
 HPLcom/android/server/pm/ShortcutService;->getActivityInfoWithMetadata(Landroid/content/ComponentName;I)Landroid/content/pm/ActivityInfo;
@@ -39138,6 +40621,7 @@
 PLcom/android/server/pm/ShortcutService;->getBackupPayload(I)[B
 HSPLcom/android/server/pm/ShortcutService;->getBaseStateFile()Landroid/util/AtomicFile;
 HPLcom/android/server/pm/ShortcutService;->getDefaultLauncher(I)Ljava/lang/String;+]Lcom/android/server/pm/ShortcutUser;Lcom/android/server/pm/ShortcutUser;]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
+PLcom/android/server/pm/ShortcutService;->getDummyMainActivity(Ljava/lang/String;)Landroid/content/ComponentName;
 PLcom/android/server/pm/ShortcutService;->getDumpPath()Ljava/io/File;
 HPLcom/android/server/pm/ShortcutService;->getIconMaxDimensions(Ljava/lang/String;I)I
 PLcom/android/server/pm/ShortcutService;->getInstalledPackages(I)Ljava/util/List;
@@ -39147,14 +40631,14 @@
 HPLcom/android/server/pm/ShortcutService;->getMaxActivityShortcuts()I
 HPLcom/android/server/pm/ShortcutService;->getMaxShortcutCountPerActivity(Ljava/lang/String;I)I
 PLcom/android/server/pm/ShortcutService;->getNextResetTimeLocked()J
-HPLcom/android/server/pm/ShortcutService;->getNonPersistentUserLocked(I)Lcom/android/server/pm/ShortcutNonPersistentUser;
+HPLcom/android/server/pm/ShortcutService;->getNonPersistentUserLocked(I)Lcom/android/server/pm/ShortcutNonPersistentUser;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/pm/ShortcutService;->getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;
 HPLcom/android/server/pm/ShortcutService;->getPackageInfo(Ljava/lang/String;IZ)Landroid/content/pm/PackageInfo;
 PLcom/android/server/pm/ShortcutService;->getPackageInfoWithSignatures(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;
 HPLcom/android/server/pm/ShortcutService;->getPackageShortcutsForPublisherLocked(Ljava/lang/String;I)Lcom/android/server/pm/ShortcutPackage;
 PLcom/android/server/pm/ShortcutService;->getPackageShortcutsLocked(Ljava/lang/String;I)Lcom/android/server/pm/ShortcutPackage;
 PLcom/android/server/pm/ShortcutService;->getParentOrSelfUserId(I)I
-PLcom/android/server/pm/ShortcutService;->getRemainingCallCount(Ljava/lang/String;I)I
+HPLcom/android/server/pm/ShortcutService;->getRemainingCallCount(Ljava/lang/String;I)I
 PLcom/android/server/pm/ShortcutService;->getShareTargets(Ljava/lang/String;Landroid/content/IntentFilter;I)Landroid/content/pm/ParceledListSlice;
 HPLcom/android/server/pm/ShortcutService;->getShortcuts(Ljava/lang/String;II)Landroid/content/pm/ParceledListSlice;
 HPLcom/android/server/pm/ShortcutService;->getShortcutsWithQueryLocked(Ljava/lang/String;IILjava/util/function/Predicate;)Landroid/content/pm/ParceledListSlice;
@@ -39203,7 +40687,7 @@
 PLcom/android/server/pm/ShortcutService;->injectIsSafeModeEnabled()Z
 HPLcom/android/server/pm/ShortcutService;->injectPackageInfoWithUninstalled(Ljava/lang/String;IZ)Landroid/content/pm/PackageInfo;+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
 HSPLcom/android/server/pm/ShortcutService;->injectPostToHandler(Ljava/lang/Runnable;)V+]Landroid/os/Handler;Landroid/os/Handler;
-HPLcom/android/server/pm/ShortcutService;->injectPostToHandlerDebounced(Ljava/lang/Object;Ljava/lang/Runnable;)V
+HPLcom/android/server/pm/ShortcutService;->injectPostToHandlerDebounced(Ljava/lang/Object;Ljava/lang/Runnable;)V+]Landroid/os/Handler;Landroid/os/Handler;
 HSPLcom/android/server/pm/ShortcutService;->injectRegisterRoleHoldersListener(Landroid/app/role/OnRoleHoldersChangedListener;)V
 HSPLcom/android/server/pm/ShortcutService;->injectRegisterUidObserver(Landroid/app/IUidObserver;I)V
 HPLcom/android/server/pm/ShortcutService;->injectRestoreCallingIdentity(J)V
@@ -39214,7 +40698,7 @@
 HSPLcom/android/server/pm/ShortcutService;->injectSystemDataPath()Ljava/io/File;
 HPLcom/android/server/pm/ShortcutService;->injectUserDataPath(I)Ljava/io/File;
 HPLcom/android/server/pm/ShortcutService;->injectValidateIconResPackage(Landroid/content/pm/ShortcutInfo;Landroid/graphics/drawable/Icon;)V
-HPLcom/android/server/pm/ShortcutService;->injectXmlMetaData(Landroid/content/pm/ActivityInfo;Ljava/lang/String;)Landroid/content/res/XmlResourceParser;
+HPLcom/android/server/pm/ShortcutService;->injectXmlMetaData(Landroid/content/pm/ActivityInfo;Ljava/lang/String;)Landroid/content/res/XmlResourceParser;+]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Landroid/content/Context;Landroid/app/ContextImpl;
 HPLcom/android/server/pm/ShortcutService;->isAppSearchEnabled()Z
 PLcom/android/server/pm/ShortcutService;->isCallerChooserActivity()Z
 HPLcom/android/server/pm/ShortcutService;->isCallerSystem()Z
@@ -39235,7 +40719,7 @@
 HPLcom/android/server/pm/ShortcutService;->isSystem(Landroid/content/pm/ActivityInfo;)Z
 HPLcom/android/server/pm/ShortcutService;->isSystem(Landroid/content/pm/ApplicationInfo;)Z
 HPLcom/android/server/pm/ShortcutService;->isUidForegroundLocked(I)Z
-PLcom/android/server/pm/ShortcutService;->isUserLoadedLocked(I)Z
+HPLcom/android/server/pm/ShortcutService;->isUserLoadedLocked(I)Z
 HPLcom/android/server/pm/ShortcutService;->isUserUnlockedL(I)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;
 PLcom/android/server/pm/ShortcutService;->lambda$checkPackageChanges$14(Ljava/util/ArrayList;Lcom/android/server/pm/ShortcutPackageItem;)V
 PLcom/android/server/pm/ShortcutService;->lambda$cleanUpPackageForAllLoadedUsers$9(Ljava/lang/String;IZLcom/android/server/pm/ShortcutUser;)V
@@ -39253,7 +40737,7 @@
 HPLcom/android/server/pm/ShortcutService;->lambda$notifyShortcutChangeCallbacks$3(ILjava/util/List;Ljava/lang/String;Landroid/os/UserHandle;Ljava/util/List;)V
 PLcom/android/server/pm/ShortcutService;->lambda$prepareChangedShortcuts$24(Landroid/util/ArraySet;Landroid/content/pm/ShortcutInfo;)Z
 HPLcom/android/server/pm/ShortcutService;->lambda$prepareChangedShortcuts$25(Landroid/util/ArraySet;Landroid/content/pm/ShortcutInfo;)Z
-HPLcom/android/server/pm/ShortcutService;->lambda$queryActivities$16(ILandroid/content/pm/ResolveInfo;)Z
+HPLcom/android/server/pm/ShortcutService;->lambda$queryActivities$16(ILandroid/content/pm/ResolveInfo;)Z+]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
 HPLcom/android/server/pm/ShortcutService;->lambda$removeAllDynamicShortcuts$6(Landroid/content/pm/ShortcutInfo;)Z+]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;
 PLcom/android/server/pm/ShortcutService;->lambda$rescanUpdatedPackagesLocked$15(Lcom/android/server/pm/ShortcutUser;ILandroid/content/pm/ApplicationInfo;)V
 PLcom/android/server/pm/ShortcutService;->lambda$setDynamicShortcuts$4(Landroid/content/pm/ShortcutInfo;)Z
@@ -39308,7 +40792,7 @@
 HPLcom/android/server/pm/ShortcutService;->setDynamicShortcuts(Ljava/lang/String;Landroid/content/pm/ParceledListSlice;I)Z
 HPLcom/android/server/pm/ShortcutService;->setReturnedByServer(Ljava/util/List;)Ljava/util/List;+]Landroid/content/pm/ShortcutInfo;Landroid/content/pm/ShortcutInfo;]Ljava/util/List;Ljava/util/ArrayList;
 PLcom/android/server/pm/ShortcutService;->setShortcutHostPackage(Ljava/lang/String;Ljava/lang/String;I)V
-PLcom/android/server/pm/ShortcutService;->shouldBackupApp(Landroid/content/pm/PackageInfo;)Z
+HPLcom/android/server/pm/ShortcutService;->shouldBackupApp(Landroid/content/pm/PackageInfo;)Z
 HPLcom/android/server/pm/ShortcutService;->shrinkBitmap(Landroid/graphics/Bitmap;I)Landroid/graphics/Bitmap;
 HPLcom/android/server/pm/ShortcutService;->throwIfUserLockedL(I)V+]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 PLcom/android/server/pm/ShortcutService;->unloadUserLocked(I)V
@@ -39317,12 +40801,12 @@
 HSPLcom/android/server/pm/ShortcutService;->updateTimesLocked()V
 PLcom/android/server/pm/ShortcutService;->validateShortcutForPinRequest(Landroid/content/pm/ShortcutInfo;)V
 HPLcom/android/server/pm/ShortcutService;->verifyCaller(Ljava/lang/String;I)V
-PLcom/android/server/pm/ShortcutService;->verifyCallerUserId(I)V
+HPLcom/android/server/pm/ShortcutService;->verifyCallerUserId(I)V
 HPLcom/android/server/pm/ShortcutService;->verifyShortcutInfoPackage(Ljava/lang/String;Landroid/content/pm/ShortcutInfo;)V
 HPLcom/android/server/pm/ShortcutService;->verifyShortcutInfoPackages(Ljava/lang/String;Ljava/util/List;)V
 HPLcom/android/server/pm/ShortcutService;->verifyStates()V
 HPLcom/android/server/pm/ShortcutService;->writeAttr(Landroid/util/TypedXmlSerializer;Ljava/lang/String;J)V
-HPLcom/android/server/pm/ShortcutService;->writeAttr(Landroid/util/TypedXmlSerializer;Ljava/lang/String;Landroid/content/ComponentName;)V
+HPLcom/android/server/pm/ShortcutService;->writeAttr(Landroid/util/TypedXmlSerializer;Ljava/lang/String;Landroid/content/ComponentName;)V+]Landroid/content/ComponentName;Landroid/content/ComponentName;
 HPLcom/android/server/pm/ShortcutService;->writeAttr(Landroid/util/TypedXmlSerializer;Ljava/lang/String;Landroid/content/Intent;)V+]Landroid/content/Intent;Landroid/content/Intent;
 HPLcom/android/server/pm/ShortcutService;->writeAttr(Landroid/util/TypedXmlSerializer;Ljava/lang/String;Ljava/lang/CharSequence;)V+]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;,Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;]Ljava/lang/CharSequence;Ljava/lang/String;,Landroid/text/SpannableString;
 HPLcom/android/server/pm/ShortcutService;->writeAttr(Landroid/util/TypedXmlSerializer;Ljava/lang/String;Z)V
@@ -39349,6 +40833,7 @@
 HPLcom/android/server/pm/ShortcutUser$PackageWithUser;->equals(Ljava/lang/Object;)Z
 HPLcom/android/server/pm/ShortcutUser$PackageWithUser;->hashCode()I+]Ljava/lang/String;Ljava/lang/String;
 HPLcom/android/server/pm/ShortcutUser$PackageWithUser;->of(ILjava/lang/String;)Lcom/android/server/pm/ShortcutUser$PackageWithUser;
+PLcom/android/server/pm/ShortcutUser$PackageWithUser;->of(Lcom/android/server/pm/ShortcutPackageItem;)Lcom/android/server/pm/ShortcutUser$PackageWithUser;
 PLcom/android/server/pm/ShortcutUser;->$r8$lambda$3kJg405JmDTqVoYpKLzFnAWmg1Y(Lcom/android/server/pm/ShortcutPackage;)V
 HPLcom/android/server/pm/ShortcutUser;->$r8$lambda$Cro22bo0GMwtvt4MGtcaIYiFnT4(ILjava/lang/String;Ljava/util/function/Consumer;Lcom/android/server/pm/ShortcutPackageItem;)V
 PLcom/android/server/pm/ShortcutUser;->$r8$lambda$MD25wol9zQLXTmQNZdRALFaMbOU(Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutUser;ZLjava/io/File;)V
@@ -39386,7 +40871,7 @@
 HPLcom/android/server/pm/ShortcutUser;->logSharingShortcutStats(Lcom/android/internal/logging/MetricsLogger;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/metrics/LogMaker;Landroid/metrics/LogMaker;]Lcom/android/server/pm/ShortcutPackage;Lcom/android/server/pm/ShortcutPackage;]Lcom/android/internal/logging/MetricsLogger;Lcom/android/internal/logging/MetricsLogger;
 HPLcom/android/server/pm/ShortcutUser;->onCalledByPublisher(Ljava/lang/String;)V
 PLcom/android/server/pm/ShortcutUser;->removeLauncher(ILjava/lang/String;)Lcom/android/server/pm/ShortcutLauncher;
-PLcom/android/server/pm/ShortcutUser;->removePackage(Ljava/lang/String;)Lcom/android/server/pm/ShortcutPackage;
+HPLcom/android/server/pm/ShortcutUser;->removePackage(Ljava/lang/String;)Lcom/android/server/pm/ShortcutPackage;
 HPLcom/android/server/pm/ShortcutUser;->rescanPackageIfNeeded(Ljava/lang/String;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/pm/ShortcutPackage;Lcom/android/server/pm/ShortcutPackage;]Lcom/android/server/pm/ShortcutUser;Lcom/android/server/pm/ShortcutUser;
 HPLcom/android/server/pm/ShortcutUser;->saveShortcutPackageItem(Landroid/util/TypedXmlSerializer;Lcom/android/server/pm/ShortcutPackageItem;Z)V
 HPLcom/android/server/pm/ShortcutUser;->saveToXml(Landroid/util/TypedXmlSerializer;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/pm/ShortcutUser;Lcom/android/server/pm/ShortcutUser;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;,Lcom/android/internal/util/XmlUtils$ForcedTypedXmlSerializer;]Lcom/android/server/pm/ShortcutService;Lcom/android/server/pm/ShortcutService;
@@ -39457,6 +40942,7 @@
 HSPLcom/android/server/pm/StagingManager;->restoreSessions(Ljava/util/List;Z)V
 HSPLcom/android/server/pm/StagingManager;->resumeSession(Lcom/android/server/pm/StagingManager$StagedSession;ZZ)V
 HSPLcom/android/server/pm/StagingManager;->snapshotAndRestoreApexUserData(Ljava/lang/String;[ILcom/android/server/rollback/RollbackManagerInternal;)V
+PLcom/android/server/pm/StagingManager;->snapshotAndRestoreApkInApexUserData(Ljava/lang/String;[ILcom/android/server/rollback/RollbackManagerInternal;)V
 HSPLcom/android/server/pm/StagingManager;->snapshotAndRestoreForApexSession(Lcom/android/server/pm/StagingManager$StagedSession;)V
 HSPLcom/android/server/pm/StagingManager;->systemReady()V
 HSPLcom/android/server/pm/StorageEventHelper;-><init>(Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/DeletePackageHelper;Lcom/android/server/pm/RemovePackageHelper;)V
@@ -39483,7 +40969,7 @@
 PLcom/android/server/pm/SuspendPackageHelper;->getSuspendedPackageAppExtras(Lcom/android/server/pm/Computer;Ljava/lang/String;II)Landroid/os/Bundle;
 HPLcom/android/server/pm/SuspendPackageHelper;->getSuspendedPackageLauncherExtras(Lcom/android/server/pm/Computer;Ljava/lang/String;II)Landroid/os/Bundle;
 PLcom/android/server/pm/SuspendPackageHelper;->getSuspendingPackage(Lcom/android/server/pm/Computer;Ljava/lang/String;II)Ljava/lang/String;
-PLcom/android/server/pm/SuspendPackageHelper;->getUnsuspendablePackagesForUser(Lcom/android/server/pm/Computer;[Ljava/lang/String;II)[Ljava/lang/String;
+HPLcom/android/server/pm/SuspendPackageHelper;->getUnsuspendablePackagesForUser(Lcom/android/server/pm/Computer;[Ljava/lang/String;II)[Ljava/lang/String;
 PLcom/android/server/pm/SuspendPackageHelper;->isCallerDeviceOrProfileOwner(Lcom/android/server/pm/Computer;II)Z
 HSPLcom/android/server/pm/SuspendPackageHelper;->isPackageSuspended(Lcom/android/server/pm/Computer;Ljava/lang/String;II)Z
 PLcom/android/server/pm/SuspendPackageHelper;->isSuspendAllowedForUser(Lcom/android/server/pm/Computer;II)Z
@@ -39516,7 +41002,7 @@
 PLcom/android/server/pm/UserManagerService$$ExternalSyntheticLambda0;-><init>()V
 PLcom/android/server/pm/UserManagerService$$ExternalSyntheticLambda0;->getOrThrow()Ljava/lang/Object;
 HSPLcom/android/server/pm/UserManagerService$$ExternalSyntheticLambda1;-><init>(Landroid/os/IUserRestrictionsListener;)V
-PLcom/android/server/pm/UserManagerService$$ExternalSyntheticLambda1;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
+HSPLcom/android/server/pm/UserManagerService$$ExternalSyntheticLambda1;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
 PLcom/android/server/pm/UserManagerService$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/pm/UserManagerService;Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/pm/UserManagerService$$ExternalSyntheticLambda2;->getOrThrow()Ljava/lang/Object;
 HSPLcom/android/server/pm/UserManagerService$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/pm/UserManagerService;)V
@@ -39527,11 +41013,11 @@
 PLcom/android/server/pm/UserManagerService$1;->lambda$onReceive$0(ILandroid/content/IntentSender;)V
 PLcom/android/server/pm/UserManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/pm/UserManagerService$2;-><init>(Lcom/android/server/pm/UserManagerService;)V
-PLcom/android/server/pm/UserManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/pm/UserManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/pm/UserManagerService$3;-><init>(Lcom/android/server/pm/UserManagerService;Landroid/os/Bundle;I)V
-PLcom/android/server/pm/UserManagerService$3;->run()V
+HSPLcom/android/server/pm/UserManagerService$3;->run()V
 HSPLcom/android/server/pm/UserManagerService$4;-><init>(Lcom/android/server/pm/UserManagerService;ILandroid/os/Bundle;Landroid/os/Bundle;)V
-PLcom/android/server/pm/UserManagerService$4;->run()V
+HSPLcom/android/server/pm/UserManagerService$4;->run()V
 PLcom/android/server/pm/UserManagerService$5;-><init>(Lcom/android/server/pm/UserManagerService;)V
 PLcom/android/server/pm/UserManagerService$5;->run()V
 PLcom/android/server/pm/UserManagerService$6;-><init>(Lcom/android/server/pm/UserManagerService;J)V
@@ -39562,16 +41048,16 @@
 HSPLcom/android/server/pm/UserManagerService$LocalService;->getProfileParentId(I)I
 HSPLcom/android/server/pm/UserManagerService$LocalService;->getUserIds()[I
 HSPLcom/android/server/pm/UserManagerService$LocalService;->getUserInfo(I)Landroid/content/pm/UserInfo;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/pm/UserManagerService$LocalService;->getUserInfos()[Landroid/content/pm/UserInfo;
+HSPLcom/android/server/pm/UserManagerService$LocalService;->getUserInfos()[Landroid/content/pm/UserInfo;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/pm/UserManagerService$LocalService;->getUserRestriction(ILjava/lang/String;)Z
 PLcom/android/server/pm/UserManagerService$LocalService;->getUsers(Z)Ljava/util/List;
 HSPLcom/android/server/pm/UserManagerService$LocalService;->getUsers(ZZZ)Ljava/util/List;
 HSPLcom/android/server/pm/UserManagerService$LocalService;->hasUserRestriction(Ljava/lang/String;I)Z+]Landroid/os/Bundle;Landroid/os/Bundle;
-PLcom/android/server/pm/UserManagerService$LocalService;->isDeviceManaged()Z
+HPLcom/android/server/pm/UserManagerService$LocalService;->isDeviceManaged()Z
 HPLcom/android/server/pm/UserManagerService$LocalService;->isProfileAccessible(IILjava/lang/String;Z)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;
-PLcom/android/server/pm/UserManagerService$LocalService;->isUserManaged(I)Z
-HSPLcom/android/server/pm/UserManagerService$LocalService;->isUserRunning(I)Z
-HSPLcom/android/server/pm/UserManagerService$LocalService;->isUserUnlocked(I)Z
+HPLcom/android/server/pm/UserManagerService$LocalService;->isUserManaged(I)Z
+HSPLcom/android/server/pm/UserManagerService$LocalService;->isUserRunning(I)Z+]Lcom/android/server/pm/UserManagerService$WatchedUserStates;Lcom/android/server/pm/UserManagerService$WatchedUserStates;
+HSPLcom/android/server/pm/UserManagerService$LocalService;->isUserUnlocked(I)Z+]Lcom/android/server/pm/UserManagerService$WatchedUserStates;Lcom/android/server/pm/UserManagerService$WatchedUserStates;
 HSPLcom/android/server/pm/UserManagerService$LocalService;->isUserUnlockingOrUnlocked(I)Z+]Lcom/android/server/pm/UserManagerService$WatchedUserStates;Lcom/android/server/pm/UserManagerService$WatchedUserStates;
 PLcom/android/server/pm/UserManagerService$LocalService;->removeUserState(I)V
 PLcom/android/server/pm/UserManagerService$LocalService;->setDefaultCrossProfileIntentFilters(II)V
@@ -39583,6 +41069,10 @@
 PLcom/android/server/pm/UserManagerService$LocalService;->setUserState(II)V
 HSPLcom/android/server/pm/UserManagerService$MainHandler;-><init>(Lcom/android/server/pm/UserManagerService;)V
 PLcom/android/server/pm/UserManagerService$MainHandler;->handleMessage(Landroid/os/Message;)V
+PLcom/android/server/pm/UserManagerService$Shell;-><init>(Lcom/android/server/pm/UserManagerService;)V
+PLcom/android/server/pm/UserManagerService$Shell;-><init>(Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService$Shell-IA;)V
+PLcom/android/server/pm/UserManagerService$Shell;->onCommand(Ljava/lang/String;)I
+PLcom/android/server/pm/UserManagerService$Shell;->runList()I
 HSPLcom/android/server/pm/UserManagerService$UserData;-><init>()V
 PLcom/android/server/pm/UserManagerService$UserData;->clearSeedAccountData()V
 PLcom/android/server/pm/UserManagerService$UserData;->getIgnorePrepareStorageErrors()Z
@@ -39596,9 +41086,9 @@
 HSPLcom/android/server/pm/UserManagerService$WatchedUserStates;->put(II)V
 PLcom/android/server/pm/UserManagerService;->$r8$lambda$9hvRa515D2waVDqa0OnyJ7PYUwc()Ljava/lang/Integer;
 PLcom/android/server/pm/UserManagerService;->$r8$lambda$MVVz5v98HoKZYvC0IAyU2f9Ymo0(Lcom/android/server/pm/UserManagerService;Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Boolean;
-PLcom/android/server/pm/UserManagerService;->$r8$lambda$fIk7HY6Rb7kc_b9wEf70etZcb94(Landroid/os/IUserRestrictionsListener;ILandroid/os/Bundle;Landroid/os/Bundle;)V
-PLcom/android/server/pm/UserManagerService;->-$$Nest$fgetmAppOpsService(Lcom/android/server/pm/UserManagerService;)Lcom/android/internal/app/IAppOpsService;
-PLcom/android/server/pm/UserManagerService;->-$$Nest$fgetmContext(Lcom/android/server/pm/UserManagerService;)Landroid/content/Context;
+HSPLcom/android/server/pm/UserManagerService;->$r8$lambda$fIk7HY6Rb7kc_b9wEf70etZcb94(Landroid/os/IUserRestrictionsListener;ILandroid/os/Bundle;Landroid/os/Bundle;)V
+HSPLcom/android/server/pm/UserManagerService;->-$$Nest$fgetmAppOpsService(Lcom/android/server/pm/UserManagerService;)Lcom/android/internal/app/IAppOpsService;
+HSPLcom/android/server/pm/UserManagerService;->-$$Nest$fgetmContext(Lcom/android/server/pm/UserManagerService;)Landroid/content/Context;
 PLcom/android/server/pm/UserManagerService;->-$$Nest$fgetmHandler(Lcom/android/server/pm/UserManagerService;)Landroid/os/Handler;
 PLcom/android/server/pm/UserManagerService;->-$$Nest$fgetmIsDeviceManaged(Lcom/android/server/pm/UserManagerService;)Z
 HSPLcom/android/server/pm/UserManagerService;->-$$Nest$fgetmIsUserManaged(Lcom/android/server/pm/UserManagerService;)Landroid/util/SparseBooleanArray;
@@ -39624,7 +41114,7 @@
 HSPLcom/android/server/pm/UserManagerService;->-$$Nest$mgetUserInfoNoChecks(Lcom/android/server/pm/UserManagerService;I)Landroid/content/pm/UserInfo;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
 PLcom/android/server/pm/UserManagerService;->-$$Nest$mgetUserTypeDetailsNoChecks(Lcom/android/server/pm/UserManagerService;I)Lcom/android/server/pm/UserTypeDetails;
 HSPLcom/android/server/pm/UserManagerService;->-$$Nest$mgetUsersInternal(Lcom/android/server/pm/UserManagerService;ZZZ)Ljava/util/List;
-PLcom/android/server/pm/UserManagerService;->-$$Nest$minvalidateOwnerNameIfNecessary(Lcom/android/server/pm/UserManagerService;Landroid/content/res/Resources;Z)V
+HSPLcom/android/server/pm/UserManagerService;->-$$Nest$minvalidateOwnerNameIfNecessary(Lcom/android/server/pm/UserManagerService;Landroid/content/res/Resources;Z)V
 PLcom/android/server/pm/UserManagerService;->-$$Nest$mlogUserRemoveJourneyFinish(Lcom/android/server/pm/UserManagerService;JIZ)V
 HSPLcom/android/server/pm/UserManagerService;->-$$Nest$mregisterStatsCallbacks(Lcom/android/server/pm/UserManagerService;)V
 PLcom/android/server/pm/UserManagerService;->-$$Nest$mremoveUserState(Lcom/android/server/pm/UserManagerService;I)V
@@ -39634,7 +41124,7 @@
 PLcom/android/server/pm/UserManagerService;->-$$Nest$msetQuietModeEnabled(Lcom/android/server/pm/UserManagerService;IZLandroid/content/IntentSender;Ljava/lang/String;)V
 PLcom/android/server/pm/UserManagerService;->-$$Nest$mwriteBitmapLP(Lcom/android/server/pm/UserManagerService;Landroid/content/pm/UserInfo;Landroid/graphics/Bitmap;)V
 PLcom/android/server/pm/UserManagerService;->-$$Nest$mwriteUserLP(Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService$UserData;)V
-PLcom/android/server/pm/UserManagerService;->-$$Nest$sfgetmUserRestriconToken()Landroid/os/IBinder;
+HSPLcom/android/server/pm/UserManagerService;->-$$Nest$sfgetmUserRestriconToken()Landroid/os/IBinder;
 HSPLcom/android/server/pm/UserManagerService;-><clinit>()V
 HSPLcom/android/server/pm/UserManagerService;-><init>(Landroid/content/Context;Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/UserDataPreparer;Ljava/lang/Object;)V
 HSPLcom/android/server/pm/UserManagerService;-><init>(Landroid/content/Context;Lcom/android/server/pm/PackageManagerService;Lcom/android/server/pm/UserDataPreparer;Ljava/lang/Object;Ljava/io/File;)V
@@ -39657,7 +41147,7 @@
 HSPLcom/android/server/pm/UserManagerService;->checkQueryOrCreateUsersPermission(Ljava/lang/String;)V
 HSPLcom/android/server/pm/UserManagerService;->checkQueryOrInteractPermissionIfCallerInOtherProfileGroup(ILjava/lang/String;)V+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
 HPLcom/android/server/pm/UserManagerService;->checkQueryUsersPermission(Ljava/lang/String;)V
-PLcom/android/server/pm/UserManagerService;->checkSystemOrRoot(Ljava/lang/String;)V
+HPLcom/android/server/pm/UserManagerService;->checkSystemOrRoot(Ljava/lang/String;)V
 PLcom/android/server/pm/UserManagerService;->checkUserTypeConsistency(I)Z
 HSPLcom/android/server/pm/UserManagerService;->cleanupPartialUsers()V
 PLcom/android/server/pm/UserManagerService;->cleanupPreCreatedUsers()V
@@ -39669,6 +41159,7 @@
 PLcom/android/server/pm/UserManagerService;->createUserInternalUnchecked(Ljava/lang/String;Ljava/lang/String;IIZ[Ljava/lang/String;Ljava/lang/Object;)Landroid/content/pm/UserInfo;
 PLcom/android/server/pm/UserManagerService;->createUserInternalUncheckedNoTracing(Ljava/lang/String;Ljava/lang/String;IIZ[Ljava/lang/String;Lcom/android/server/utils/TimingsTraceAndSlog;Ljava/lang/Object;)Landroid/content/pm/UserInfo;
 PLcom/android/server/pm/UserManagerService;->createUserWithAttributes(Ljava/lang/String;Ljava/lang/String;ILandroid/graphics/Bitmap;Ljava/lang/String;Ljava/lang/String;Landroid/os/PersistableBundle;)Landroid/os/UserHandle;
+PLcom/android/server/pm/UserManagerService;->createUserWithThrow(Ljava/lang/String;Ljava/lang/String;I)Landroid/content/pm/UserInfo;
 PLcom/android/server/pm/UserManagerService;->dispatchUserAdded(Landroid/content/pm/UserInfo;Ljava/lang/Object;)V
 HPLcom/android/server/pm/UserManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HPLcom/android/server/pm/UserManagerService;->dumpTimeAgo(Ljava/io/PrintWriter;Ljava/lang/StringBuilder;JJ)V
@@ -39682,17 +41173,19 @@
 HPLcom/android/server/pm/UserManagerService;->getApplicationRestrictionsForUser(Ljava/lang/String;I)Landroid/os/Bundle;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 PLcom/android/server/pm/UserManagerService;->getCreationTime()J
 HPLcom/android/server/pm/UserManagerService;->getCredentialOwnerProfile(I)I
+PLcom/android/server/pm/UserManagerService;->getDefaultGuestRestrictions()Landroid/os/Bundle;
 HSPLcom/android/server/pm/UserManagerService;->getDevicePolicyLocalRestrictionsForTargetUserLR(I)Lcom/android/server/pm/RestrictionsSet;
 PLcom/android/server/pm/UserManagerService;->getDevicePolicyManagerInternal()Landroid/app/admin/DevicePolicyManagerInternal;
-HSPLcom/android/server/pm/UserManagerService;->getEffectiveUserRestrictions(I)Landroid/os/Bundle;+]Lcom/android/server/pm/RestrictionsSet;Lcom/android/server/pm/RestrictionsSet;]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
+HSPLcom/android/server/pm/UserManagerService;->getEffectiveUserRestrictions(I)Landroid/os/Bundle;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/RestrictionsSet;Lcom/android/server/pm/RestrictionsSet;
 PLcom/android/server/pm/UserManagerService;->getFreeProfileBadgeLU(ILjava/lang/String;)I
+HPLcom/android/server/pm/UserManagerService;->getGuestName()Ljava/lang/String;
 HSPLcom/android/server/pm/UserManagerService;->getInstance()Lcom/android/server/pm/UserManagerService;
 HSPLcom/android/server/pm/UserManagerService;->getInternalForInjectorOnly()Lcom/android/server/pm/UserManagerInternal;
 PLcom/android/server/pm/UserManagerService;->getMaxUsersOfTypePerParent(Lcom/android/server/pm/UserTypeDetails;)I
 PLcom/android/server/pm/UserManagerService;->getMaxUsersOfTypePerParent(Ljava/lang/String;)I
 PLcom/android/server/pm/UserManagerService;->getNextAvailableId()I
 PLcom/android/server/pm/UserManagerService;->getNumberOfUsersOfType(Ljava/lang/String;)I
-HSPLcom/android/server/pm/UserManagerService;->getOwnerName()Ljava/lang/String;
+HSPLcom/android/server/pm/UserManagerService;->getOwnerName()Ljava/lang/String;+]Ljava/util/concurrent/atomic/AtomicReference;Ljava/util/concurrent/atomic/AtomicReference;
 PLcom/android/server/pm/UserManagerService;->getPackageManagerInternal()Landroid/content/pm/PackageManagerInternal;
 PLcom/android/server/pm/UserManagerService;->getPreCreatedUserLU(Ljava/lang/String;)Lcom/android/server/pm/UserManagerService$UserData;
 HSPLcom/android/server/pm/UserManagerService;->getPrimaryUser()Landroid/content/pm/UserInfo;
@@ -39709,18 +41202,18 @@
 PLcom/android/server/pm/UserManagerService;->getSeedAccountOptions(I)Landroid/os/PersistableBundle;
 PLcom/android/server/pm/UserManagerService;->getSeedAccountType(I)Ljava/lang/String;
 HPLcom/android/server/pm/UserManagerService;->getUidForPackage(Ljava/lang/String;)I+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
-HSPLcom/android/server/pm/UserManagerService;->getUpdatedTargetUserIdsFromLocalRestrictions(ILcom/android/server/pm/RestrictionsSet;)Ljava/util/List;
+HSPLcom/android/server/pm/UserManagerService;->getUpdatedTargetUserIdsFromLocalRestrictions(ILcom/android/server/pm/RestrictionsSet;)Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/pm/RestrictionsSet;Lcom/android/server/pm/RestrictionsSet;
 PLcom/android/server/pm/UserManagerService;->getUserAccount(I)Ljava/lang/String;
 HPLcom/android/server/pm/UserManagerService;->getUserBadgeColorResId(I)I
 HPLcom/android/server/pm/UserManagerService;->getUserBadgeDarkColorResId(I)I
 HPLcom/android/server/pm/UserManagerService;->getUserBadgeLabelResId(I)I
 HPLcom/android/server/pm/UserManagerService;->getUserBadgeNoBackgroundResId(I)I
 PLcom/android/server/pm/UserManagerService;->getUserBadgeResId(I)I
-PLcom/android/server/pm/UserManagerService;->getUserCreationTime(I)J
+HPLcom/android/server/pm/UserManagerService;->getUserCreationTime(I)J
 HSPLcom/android/server/pm/UserManagerService;->getUserDataLU(I)Lcom/android/server/pm/UserManagerService$UserData;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/pm/UserManagerService;->getUserDataNoChecks(I)Lcom/android/server/pm/UserManagerService$UserData;
 HSPLcom/android/server/pm/UserManagerService;->getUserHandle(I)I+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
-PLcom/android/server/pm/UserManagerService;->getUserIcon(I)Landroid/os/ParcelFileDescriptor;
+HSPLcom/android/server/pm/UserManagerService;->getUserIcon(I)Landroid/os/ParcelFileDescriptor;
 HPLcom/android/server/pm/UserManagerService;->getUserIconBadgeResId(I)I
 HSPLcom/android/server/pm/UserManagerService;->getUserIds()[I
 HSPLcom/android/server/pm/UserManagerService;->getUserIdsIncludingPreCreated()[I
@@ -39757,28 +41250,28 @@
 HSPLcom/android/server/pm/UserManagerService;->invalidateOwnerNameIfNecessary(Landroid/content/res/Resources;Z)V
 PLcom/android/server/pm/UserManagerService;->isAtMostOneFlag(I)Z
 HSPLcom/android/server/pm/UserManagerService;->isCredentialSharableWithParent(I)Z+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/UserTypeDetails;Lcom/android/server/pm/UserTypeDetails;
-HPLcom/android/server/pm/UserManagerService;->isDemoUser(I)Z
+HPLcom/android/server/pm/UserManagerService;->isDemoUser(I)Z+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;
 PLcom/android/server/pm/UserManagerService;->isMediaSharedWithParent(I)Z
 PLcom/android/server/pm/UserManagerService;->isPreCreated(I)Z
 PLcom/android/server/pm/UserManagerService;->isProfile(I)Z
 HSPLcom/android/server/pm/UserManagerService;->isProfileOf(Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;)Z
 HSPLcom/android/server/pm/UserManagerService;->isQuietModeEnabled(I)Z+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;
-HPLcom/android/server/pm/UserManagerService;->isRestricted(I)Z
-HPLcom/android/server/pm/UserManagerService;->isSameProfileGroup(II)Z+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
+HSPLcom/android/server/pm/UserManagerService;->isRestricted(I)Z
+HSPLcom/android/server/pm/UserManagerService;->isSameProfileGroup(II)Z+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
 HSPLcom/android/server/pm/UserManagerService;->isSameProfileGroupNoChecks(II)Z+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
 HSPLcom/android/server/pm/UserManagerService;->isSettingRestrictedForUser(Ljava/lang/String;ILjava/lang/String;I)Z
 PLcom/android/server/pm/UserManagerService;->isUserForeground(I)Z
-PLcom/android/server/pm/UserManagerService;->isUserLimitReached()Z
+HPLcom/android/server/pm/UserManagerService;->isUserLimitReached()Z
 PLcom/android/server/pm/UserManagerService;->isUserNameSet(I)Z
-HSPLcom/android/server/pm/UserManagerService;->isUserRunning(I)Z
+HSPLcom/android/server/pm/UserManagerService;->isUserRunning(I)Z+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/UserManagerService$LocalService;Lcom/android/server/pm/UserManagerService$LocalService;
 PLcom/android/server/pm/UserManagerService;->isUserTypeEligibleForPreCreation(Lcom/android/server/pm/UserTypeDetails;)Z
 PLcom/android/server/pm/UserManagerService;->isUserTypeEnabled(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/UserManagerService;->isUserTypeSubtypeOfFull(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/UserManagerService;->isUserTypeSubtypeOfProfile(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/UserManagerService;->isUserTypeSubtypeOfSystem(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/UserManagerService;->isUserUnlocked(I)Z
-HSPLcom/android/server/pm/UserManagerService;->isUserUnlockingOrUnlocked(I)Z
-PLcom/android/server/pm/UserManagerService;->lambda$addUserRestrictionsListener$1(Landroid/os/IUserRestrictionsListener;ILandroid/os/Bundle;Landroid/os/Bundle;)V
+HSPLcom/android/server/pm/UserManagerService;->isUserUnlockingOrUnlocked(I)Z+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/UserManagerService$LocalService;Lcom/android/server/pm/UserManagerService$LocalService;
+HSPLcom/android/server/pm/UserManagerService;->lambda$addUserRestrictionsListener$1(Landroid/os/IUserRestrictionsListener;ILandroid/os/Bundle;Landroid/os/Bundle;)V
 PLcom/android/server/pm/UserManagerService;->lambda$isUserForeground$0()Ljava/lang/Integer;
 PLcom/android/server/pm/UserManagerService;->lambda$someUserHasAccountNoChecks$3(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Boolean;
 PLcom/android/server/pm/UserManagerService;->logQuietModeEnabled(IZLjava/lang/String;)V
@@ -39791,6 +41284,7 @@
 HSPLcom/android/server/pm/UserManagerService;->markEphemeralUsersForRemoval()V
 PLcom/android/server/pm/UserManagerService;->onBeforeStartUser(I)V
 PLcom/android/server/pm/UserManagerService;->onBeforeUnlockUser(I)V
+PLcom/android/server/pm/UserManagerService;->onShellCommand(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;Landroid/os/ShellCallback;Landroid/os/ResultReceiver;)V
 PLcom/android/server/pm/UserManagerService;->onUserLoggedIn(I)V
 HPLcom/android/server/pm/UserManagerService;->packageToRestrictionsFileName(Ljava/lang/String;)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/pm/UserManagerService;->propagateUserRestrictionsLR(ILandroid/os/Bundle;Landroid/os/Bundle;)V
@@ -39817,17 +41311,18 @@
 PLcom/android/server/pm/UserManagerService;->setSeedAccountDataNoChecks(ILjava/lang/String;Ljava/lang/String;Landroid/os/PersistableBundle;Z)V
 PLcom/android/server/pm/UserManagerService;->setUserEnabled(I)V
 PLcom/android/server/pm/UserManagerService;->setUserIcon(ILandroid/graphics/Bitmap;)V
-PLcom/android/server/pm/UserManagerService;->setUserRestriction(Ljava/lang/String;ZI)V
+PLcom/android/server/pm/UserManagerService;->setUserName(ILjava/lang/String;)V
+HSPLcom/android/server/pm/UserManagerService;->setUserRestriction(Ljava/lang/String;ZI)V
 PLcom/android/server/pm/UserManagerService;->showConfirmCredentialToDisableQuietMode(ILandroid/content/IntentSender;)V
 PLcom/android/server/pm/UserManagerService;->someUserHasAccountNoChecks(Ljava/lang/String;Ljava/lang/String;)Z
 PLcom/android/server/pm/UserManagerService;->someUserHasSeedAccountNoChecks(Ljava/lang/String;Ljava/lang/String;)Z
 HSPLcom/android/server/pm/UserManagerService;->systemReady()V
-HSPLcom/android/server/pm/UserManagerService;->updateLocalRestrictionsForTargetUsersLR(ILcom/android/server/pm/RestrictionsSet;Ljava/util/List;)Z
+HSPLcom/android/server/pm/UserManagerService;->updateLocalRestrictionsForTargetUsersLR(ILcom/android/server/pm/RestrictionsSet;Ljava/util/List;)Z+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/RestrictionsSet;Lcom/android/server/pm/RestrictionsSet;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLcom/android/server/pm/UserManagerService;->updateUserIds()V
 HSPLcom/android/server/pm/UserManagerService;->updateUserRestrictionsInternalLR(Landroid/os/Bundle;I)V
 HSPLcom/android/server/pm/UserManagerService;->upgradeIfNecessaryLP(Landroid/os/Bundle;)V
 HSPLcom/android/server/pm/UserManagerService;->upgradeIfNecessaryLP(Landroid/os/Bundle;II)V
-HSPLcom/android/server/pm/UserManagerService;->userWithName(Landroid/content/pm/UserInfo;)Landroid/content/pm/UserInfo;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
+HSPLcom/android/server/pm/UserManagerService;->userWithName(Landroid/content/pm/UserInfo;)Landroid/content/pm/UserInfo;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;
 PLcom/android/server/pm/UserManagerService;->verifyCallingPackage(Ljava/lang/String;I)V
 HPLcom/android/server/pm/UserManagerService;->writeApplicationRestrictionsLAr(Landroid/os/Bundle;Landroid/util/AtomicFile;)V
 HPLcom/android/server/pm/UserManagerService;->writeApplicationRestrictionsLAr(Ljava/lang/String;Landroid/os/Bundle;I)V
@@ -39840,8 +41335,8 @@
 PLcom/android/server/pm/UserNeedsBadgingCache;->delete(I)V
 HSPLcom/android/server/pm/UserNeedsBadgingCache;->get(I)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
 HSPLcom/android/server/pm/UserRestrictionsUtils;-><clinit>()V
-PLcom/android/server/pm/UserRestrictionsUtils;->applyUserRestriction(Landroid/content/Context;ILjava/lang/String;Z)V
-PLcom/android/server/pm/UserRestrictionsUtils;->applyUserRestrictions(Landroid/content/Context;ILandroid/os/Bundle;Landroid/os/Bundle;)V
+HSPLcom/android/server/pm/UserRestrictionsUtils;->applyUserRestriction(Landroid/content/Context;ILjava/lang/String;Z)V
+HSPLcom/android/server/pm/UserRestrictionsUtils;->applyUserRestrictions(Landroid/content/Context;ILandroid/os/Bundle;Landroid/os/Bundle;)V
 HSPLcom/android/server/pm/UserRestrictionsUtils;->areEqual(Landroid/os/Bundle;Landroid/os/Bundle;)Z+]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/MapCollections$KeySet;
 HPLcom/android/server/pm/UserRestrictionsUtils;->canDeviceOwnerChange(Ljava/lang/String;)Z
 HPLcom/android/server/pm/UserRestrictionsUtils;->canProfileOwnerChange(Ljava/lang/String;I)Z
@@ -39849,10 +41344,10 @@
 HPLcom/android/server/pm/UserRestrictionsUtils;->contains(Landroid/os/Bundle;Ljava/lang/String;)Z
 HPLcom/android/server/pm/UserRestrictionsUtils;->dumpRestrictions(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/os/Bundle;)V
 HSPLcom/android/server/pm/UserRestrictionsUtils;->getDefaultEnabledForManagedProfiles()Ljava/util/Set;
-PLcom/android/server/pm/UserRestrictionsUtils;->getNewUserRestrictionSetting(Landroid/content/Context;ILjava/lang/String;Z)I
+HSPLcom/android/server/pm/UserRestrictionsUtils;->getNewUserRestrictionSetting(Landroid/content/Context;ILjava/lang/String;Z)I
 HSPLcom/android/server/pm/UserRestrictionsUtils;->isGlobal(ILjava/lang/String;)Z+]Ljava/util/Set;Landroid/util/ArraySet;
 HSPLcom/android/server/pm/UserRestrictionsUtils;->isLocal(ILjava/lang/String;)Z
-HSPLcom/android/server/pm/UserRestrictionsUtils;->isSettingRestrictedForUser(Landroid/content/Context;Ljava/lang/String;ILjava/lang/String;I)Z+]Ljava/lang/String;Ljava/lang/String;]Landroid/content/Context;Landroid/app/ContextImpl;
+HSPLcom/android/server/pm/UserRestrictionsUtils;->isSettingRestrictedForUser(Landroid/content/Context;Ljava/lang/String;ILjava/lang/String;I)Z+]Ljava/lang/String;Ljava/lang/String;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/os/UserManager;Landroid/os/UserManager;
 PLcom/android/server/pm/UserRestrictionsUtils;->isSystemApp(I[Ljava/lang/String;)Z
 HSPLcom/android/server/pm/UserRestrictionsUtils;->isValidRestriction(Ljava/lang/String;)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Ljava/util/Set;Landroid/util/ArraySet;
 HSPLcom/android/server/pm/UserRestrictionsUtils;->merge(Landroid/os/Bundle;Landroid/os/Bundle;)V
@@ -39860,8 +41355,8 @@
 HSPLcom/android/server/pm/UserRestrictionsUtils;->nonNull(Landroid/os/Bundle;)Landroid/os/Bundle;
 HSPLcom/android/server/pm/UserRestrictionsUtils;->readRestrictions(Landroid/util/TypedXmlPullParser;)Landroid/os/Bundle;
 HSPLcom/android/server/pm/UserRestrictionsUtils;->readRestrictions(Landroid/util/TypedXmlPullParser;Landroid/os/Bundle;)V
-PLcom/android/server/pm/UserRestrictionsUtils;->restrictionsChanged(Landroid/os/Bundle;Landroid/os/Bundle;[Ljava/lang/String;)Z
-PLcom/android/server/pm/UserRestrictionsUtils;->setInstallMarketAppsRestriction(Landroid/content/ContentResolver;II)V
+HSPLcom/android/server/pm/UserRestrictionsUtils;->restrictionsChanged(Landroid/os/Bundle;Landroid/os/Bundle;[Ljava/lang/String;)Z
+HSPLcom/android/server/pm/UserRestrictionsUtils;->setInstallMarketAppsRestriction(Landroid/content/ContentResolver;II)V
 HPLcom/android/server/pm/UserRestrictionsUtils;->writeRestrictions(Landroid/util/TypedXmlSerializer;Landroid/os/Bundle;Ljava/lang/String;)V+]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/ArraySet;,Landroid/util/MapCollections$KeySet;
 PLcom/android/server/pm/UserSystemPackageInstaller$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/pm/UserSystemPackageInstaller;Ljava/util/Set;ZLjava/util/Set;)V
 PLcom/android/server/pm/UserSystemPackageInstaller$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
@@ -39880,8 +41375,8 @@
 HSPLcom/android/server/pm/UserSystemPackageInstaller;->getDeviceDefaultWhitelistMode()I
 PLcom/android/server/pm/UserSystemPackageInstaller;->getInstallablePackagesForUserId(I)Ljava/util/Set;
 PLcom/android/server/pm/UserSystemPackageInstaller;->getInstallablePackagesForUserType(Ljava/lang/String;)Ljava/util/Set;
-PLcom/android/server/pm/UserSystemPackageInstaller;->getPackagesWhitelistErrors(I)Ljava/util/List;
-HSPLcom/android/server/pm/UserSystemPackageInstaller;->getPackagesWhitelistWarnings()Ljava/util/List;
+HPLcom/android/server/pm/UserSystemPackageInstaller;->getPackagesWhitelistErrors(I)Ljava/util/List;
+HSPLcom/android/server/pm/UserSystemPackageInstaller;->getPackagesWhitelistWarnings()Ljava/util/List;+]Lcom/android/server/pm/pkg/AndroidPackageApi;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/UserSystemPackageInstaller;Lcom/android/server/pm/UserSystemPackageInstaller;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/MapCollections$KeySet;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/pm/UserSystemPackageInstaller;->getTypesBitSet(Ljava/lang/Iterable;Ljava/util/Map;)J
 HSPLcom/android/server/pm/UserSystemPackageInstaller;->getUserTypeMask(Ljava/lang/String;)J
 HSPLcom/android/server/pm/UserSystemPackageInstaller;->getWhitelistMode()I
@@ -39898,7 +41393,7 @@
 PLcom/android/server/pm/UserSystemPackageInstaller;->shouldChangeInstallationState(Lcom/android/server/pm/pkg/PackageStateInternal;ZIZZLandroid/util/ArraySet;)Z
 PLcom/android/server/pm/UserSystemPackageInstaller;->shouldInstallPackage(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Landroid/util/ArrayMap;Ljava/util/Set;Z)Z
 HSPLcom/android/server/pm/UserSystemPackageInstaller;->shouldUseOverlayTargetName(Lcom/android/server/pm/parsing/pkg/AndroidPackage;)Z
-HPLcom/android/server/pm/UserSystemPackageInstaller;->showIssues(Landroid/util/IndentingPrintWriter;ZLjava/util/List;Ljava/lang/String;)V
+HPLcom/android/server/pm/UserSystemPackageInstaller;->showIssues(Landroid/util/IndentingPrintWriter;ZLjava/util/List;Ljava/lang/String;)V+]Landroid/util/IndentingPrintWriter;Landroid/util/IndentingPrintWriter;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;
 HSPLcom/android/server/pm/UserTypeDetails$Builder;-><init>()V
 HSPLcom/android/server/pm/UserTypeDetails$Builder;->createUserTypeDetails()Lcom/android/server/pm/UserTypeDetails;
 HSPLcom/android/server/pm/UserTypeDetails$Builder;->hasBadge()Z
@@ -39972,13 +41467,14 @@
 PLcom/android/server/pm/VerificationParams$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/pm/VerificationParams;)V
 PLcom/android/server/pm/VerificationParams$$ExternalSyntheticLambda1;->run()V
 PLcom/android/server/pm/VerificationParams$1;-><init>(Lcom/android/server/pm/VerificationParams;I)V
-PLcom/android/server/pm/VerificationParams$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/pm/VerificationParams$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/pm/VerificationParams$2;-><init>(Lcom/android/server/pm/VerificationParams;ZILcom/android/server/pm/PackageVerificationResponse;J)V
 PLcom/android/server/pm/VerificationParams$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/pm/VerificationParams$MultiPackageVerificationParams;-><init>(Lcom/android/server/pm/VerificationParams;Ljava/util/List;Lcom/android/server/pm/PackageManagerService;)V
 PLcom/android/server/pm/VerificationParams$MultiPackageVerificationParams;->handleReturnCode()V
 PLcom/android/server/pm/VerificationParams$MultiPackageVerificationParams;->handleStartCopy()V
 PLcom/android/server/pm/VerificationParams$MultiPackageVerificationParams;->trySendVerificationCompleteNotification(Lcom/android/server/pm/VerificationParams;)V
+PLcom/android/server/pm/VerificationParams;->-$$Nest$fgetmErrorMessage(Lcom/android/server/pm/VerificationParams;)Ljava/lang/String;
 PLcom/android/server/pm/VerificationParams;->-$$Nest$fgetmRet(Lcom/android/server/pm/VerificationParams;)I
 PLcom/android/server/pm/VerificationParams;->-$$Nest$mgetIntegrityVerificationTimeout(Lcom/android/server/pm/VerificationParams;)J
 PLcom/android/server/pm/VerificationParams;->-$$Nest$mstartVerificationTimeoutCountdown(Lcom/android/server/pm/VerificationParams;IZLcom/android/server/pm/PackageVerificationResponse;J)V
@@ -39993,10 +41489,10 @@
 PLcom/android/server/pm/VerificationParams;->isAdbVerificationEnabled(Landroid/content/pm/PackageInfoLite;IZ)Z
 PLcom/android/server/pm/VerificationParams;->isIntegrityVerificationEnabled()Z
 PLcom/android/server/pm/VerificationParams;->isVerificationEnabled(Landroid/content/pm/PackageInfoLite;I)Z
-PLcom/android/server/pm/VerificationParams;->matchComponentForVerifier(Ljava/lang/String;Ljava/util/List;)Landroid/content/ComponentName;
+HPLcom/android/server/pm/VerificationParams;->matchComponentForVerifier(Ljava/lang/String;Ljava/util/List;)Landroid/content/ComponentName;
 PLcom/android/server/pm/VerificationParams;->matchVerifiers(Landroid/content/pm/PackageInfoLite;Ljava/util/List;Lcom/android/server/pm/PackageVerificationState;)Ljava/util/List;
-PLcom/android/server/pm/VerificationParams;->populateInstallerExtras(Landroid/content/Intent;)V
-PLcom/android/server/pm/VerificationParams;->sendApkVerificationRequest(Landroid/content/pm/PackageInfoLite;)V
+HPLcom/android/server/pm/VerificationParams;->populateInstallerExtras(Landroid/content/Intent;)V
+HPLcom/android/server/pm/VerificationParams;->sendApkVerificationRequest(Landroid/content/pm/PackageInfoLite;)V
 PLcom/android/server/pm/VerificationParams;->sendEnableRollbackRequest()V
 HPLcom/android/server/pm/VerificationParams;->sendIntegrityVerificationRequest(ILandroid/content/pm/PackageInfoLite;Lcom/android/server/pm/PackageVerificationState;)V
 HPLcom/android/server/pm/VerificationParams;->sendPackageVerificationRequest(ILandroid/content/pm/PackageInfoLite;Lcom/android/server/pm/PackageVerificationState;)V
@@ -40005,7 +41501,7 @@
 PLcom/android/server/pm/VerificationParams;->startVerificationTimeoutCountdown(IZLcom/android/server/pm/PackageVerificationResponse;J)V
 PLcom/android/server/pm/VerificationParams;->verifyStage()V
 PLcom/android/server/pm/VerificationParams;->verifyStage(Ljava/util/List;)V
-PLcom/android/server/pm/VerificationUtils;->broadcastPackageVerified(ILandroid/net/Uri;ILjava/lang/String;ILandroid/os/UserHandle;Landroid/content/Context;)V
+HPLcom/android/server/pm/VerificationUtils;->broadcastPackageVerified(ILandroid/net/Uri;ILjava/lang/String;ILandroid/os/UserHandle;Landroid/content/Context;)V
 PLcom/android/server/pm/VerificationUtils;->getDefaultVerificationTimeout(Landroid/content/Context;)J
 PLcom/android/server/pm/VerificationUtils;->getVerificationTimeout(Landroid/content/Context;Z)J
 HSPLcom/android/server/pm/WatchedIntentFilter;-><init>()V
@@ -40015,17 +41511,17 @@
 HSPLcom/android/server/pm/WatchedIntentFilter;->addCategory(Ljava/lang/String;)V
 HSPLcom/android/server/pm/WatchedIntentFilter;->addDataScheme(Ljava/lang/String;)V
 HSPLcom/android/server/pm/WatchedIntentFilter;->addDataType(Ljava/lang/String;)V
-HPLcom/android/server/pm/WatchedIntentFilter;->countActions()I+]Landroid/content/IntentFilter;Landroid/content/IntentFilter;
-HPLcom/android/server/pm/WatchedIntentFilter;->countDataAuthorities()I
-HPLcom/android/server/pm/WatchedIntentFilter;->countDataPaths()I
-HPLcom/android/server/pm/WatchedIntentFilter;->countDataSchemes()I
-HPLcom/android/server/pm/WatchedIntentFilter;->countDataTypes()I
+HSPLcom/android/server/pm/WatchedIntentFilter;->countActions()I+]Landroid/content/IntentFilter;Landroid/content/IntentFilter;
+HSPLcom/android/server/pm/WatchedIntentFilter;->countDataAuthorities()I
+HSPLcom/android/server/pm/WatchedIntentFilter;->countDataPaths()I
+HSPLcom/android/server/pm/WatchedIntentFilter;->countDataSchemes()I
+HSPLcom/android/server/pm/WatchedIntentFilter;->countDataTypes()I
 HSPLcom/android/server/pm/WatchedIntentFilter;->getIntentFilter()Landroid/content/IntentFilter;
 PLcom/android/server/pm/WatchedIntentFilter;->getPriority()I
 PLcom/android/server/pm/WatchedIntentFilter;->hasAction(Ljava/lang/String;)Z
 PLcom/android/server/pm/WatchedIntentFilter;->hasCategory(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/WatchedIntentFilter;->onChanged()V
-PLcom/android/server/pm/WatchedIntentFilter;->toWatchedIntentFilterList(Ljava/util/List;)Ljava/util/List;
+HPLcom/android/server/pm/WatchedIntentFilter;->toWatchedIntentFilterList(Ljava/util/List;)Ljava/util/List;
 HSPLcom/android/server/pm/WatchedIntentResolver$1;-><init>(Lcom/android/server/pm/WatchedIntentResolver;)V
 HSPLcom/android/server/pm/WatchedIntentResolver$2;-><init>()V
 PLcom/android/server/pm/WatchedIntentResolver$2;->compare(Lcom/android/server/pm/WatchedIntentFilter;Lcom/android/server/pm/WatchedIntentFilter;)I
@@ -40038,9 +41534,9 @@
 HSPLcom/android/server/pm/WatchedIntentResolver;->findFilters(Lcom/android/server/pm/WatchedIntentFilter;)Ljava/util/ArrayList;
 HSPLcom/android/server/pm/WatchedIntentResolver;->onChanged()V
 HSPLcom/android/server/pm/WatchedIntentResolver;->registerObserver(Lcom/android/server/utils/Watcher;)V
-PLcom/android/server/pm/WatchedIntentResolver;->removeFilter(Lcom/android/server/pm/WatchedIntentFilter;)V
+HPLcom/android/server/pm/WatchedIntentResolver;->removeFilter(Lcom/android/server/pm/WatchedIntentFilter;)V
 HPLcom/android/server/pm/WatchedIntentResolver;->removeFilterInternal(Lcom/android/server/pm/WatchedIntentFilter;)V
-PLcom/android/server/pm/WatchedIntentResolver;->removeFilterInternal(Ljava/lang/Object;)V
+HPLcom/android/server/pm/WatchedIntentResolver;->removeFilterInternal(Ljava/lang/Object;)V
 HSPLcom/android/server/pm/WatchedIntentResolver;->sortResults(Ljava/util/List;)V
 PLcom/android/server/pm/WatchedIntentResolver;->unregisterObserver(Lcom/android/server/utils/Watcher;)V
 PLcom/android/server/pm/dex/ArtManagerService$$ExternalSyntheticLambda0;-><init>(Landroid/content/pm/dex/ISnapshotRuntimeProfileCallback;ILjava/lang/String;)V
@@ -40101,7 +41597,7 @@
 HSPLcom/android/server/pm/dex/ArtStatsLogUtils;->getDexMetadataType(Ljava/lang/String;)I
 PLcom/android/server/pm/dex/ArtStatsLogUtils;->lambda$getApkType$0(Ljava/lang/String;Ljava/lang/String;)Z
 HSPLcom/android/server/pm/dex/ArtStatsLogUtils;->writeStatsLog(Lcom/android/server/pm/dex/ArtStatsLogUtils$ArtStatsLogger;JLjava/lang/String;IJLjava/lang/String;IIILjava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/pm/dex/ArtUtils;->createArtPackageInfo(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/pkg/PackageStateInternal;)Lcom/android/server/pm/dex/ArtPackageInfo;
+HPLcom/android/server/pm/dex/ArtUtils;->createArtPackageInfo(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/pkg/PackageStateInternal;)Lcom/android/server/pm/dex/ArtPackageInfo;
 PLcom/android/server/pm/dex/ArtUtils;->getOatDir(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/pkg/PackageStateInternal;)Ljava/lang/String;
 HSPLcom/android/server/pm/dex/DexManager$DexSearchResult;->-$$Nest$fgetmOutcome(Lcom/android/server/pm/dex/DexManager$DexSearchResult;)I
 HSPLcom/android/server/pm/dex/DexManager$DexSearchResult;->-$$Nest$fgetmOwningPackageName(Lcom/android/server/pm/dex/DexManager$DexSearchResult;)Ljava/lang/String;
@@ -40124,7 +41620,7 @@
 PLcom/android/server/pm/dex/DexManager;->auditUncompressedDexInApk(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/dex/DexManager;->cachePackageCodeLocation(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;I)V
 HSPLcom/android/server/pm/dex/DexManager;->cachePackageInfo(Landroid/content/pm/PackageInfo;I)V
-PLcom/android/server/pm/dex/DexManager;->deleteOptimizedFiles(Lcom/android/server/pm/dex/ArtPackageInfo;)J
+HPLcom/android/server/pm/dex/DexManager;->deleteOptimizedFiles(Lcom/android/server/pm/dex/ArtPackageInfo;)J
 HPLcom/android/server/pm/dex/DexManager;->dexoptSecondaryDex(Lcom/android/server/pm/dex/DexoptOptions;)Z
 HPLcom/android/server/pm/dex/DexManager;->dexoptSystemServer(Lcom/android/server/pm/dex/DexoptOptions;)I
 PLcom/android/server/pm/dex/DexManager;->getAllPackagesWithSecondaryDexFiles()Ljava/util/Set;
@@ -40143,7 +41639,7 @@
 HSPLcom/android/server/pm/dex/DexManager;->load(Ljava/util/Map;)V
 HSPLcom/android/server/pm/dex/DexManager;->loadInternal(Ljava/util/Map;)V
 HSPLcom/android/server/pm/dex/DexManager;->notifyDexLoad(Landroid/content/pm/ApplicationInfo;Ljava/util/Map;Ljava/lang/String;IZ)V+]Lcom/android/server/pm/dex/DexManager;Lcom/android/server/pm/dex/DexManager;
-HSPLcom/android/server/pm/dex/DexManager;->notifyDexLoadInternal(Landroid/content/pm/ApplicationInfo;Ljava/util/Map;Ljava/lang/String;IZ)V+]Lcom/android/server/pm/dex/PackageDexUsage;Lcom/android/server/pm/dex/PackageDexUsage;]Lcom/android/server/pm/dex/DexManager;Lcom/android/server/pm/dex/DexManager;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;,Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry;]Lcom/android/server/pm/dex/DynamicCodeLogger;Lcom/android/server/pm/dex/DynamicCodeLogger;]Ljava/util/Map;Ljava/util/HashMap;,Ljava/util/Collections$UnmodifiableMap;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;,Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1;]Ljava/util/Set;Ljava/util/HashMap$EntrySet;,Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet;
+HSPLcom/android/server/pm/dex/DexManager;->notifyDexLoadInternal(Landroid/content/pm/ApplicationInfo;Ljava/util/Map;Ljava/lang/String;IZ)V+]Lcom/android/server/pm/dex/PackageDexUsage;Lcom/android/server/pm/dex/PackageDexUsage;]Lcom/android/server/pm/dex/DexManager;Lcom/android/server/pm/dex/DexManager;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;,Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry;]Lcom/android/server/pm/dex/DynamicCodeLogger;Lcom/android/server/pm/dex/DynamicCodeLogger;]Ljava/util/Map;Ljava/util/HashMap;,Ljava/util/Collections$UnmodifiableMap;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;,Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1;]Ljava/util/Set;Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet;,Ljava/util/HashMap$EntrySet;
 HSPLcom/android/server/pm/dex/DexManager;->notifyPackageDataDestroyed(Ljava/lang/String;I)V
 PLcom/android/server/pm/dex/DexManager;->notifyPackageInstalled(Landroid/content/pm/PackageInfo;I)V
 PLcom/android/server/pm/dex/DexManager;->notifyPackageUpdated(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
@@ -40194,17 +41690,17 @@
 PLcom/android/server/pm/dex/DynamicCodeLogger;->writeDclEvent(Ljava/lang/String;ILjava/lang/String;)V
 PLcom/android/server/pm/dex/DynamicCodeLogger;->writeNow()V
 HSPLcom/android/server/pm/dex/OdsignStatsLogger$$ExternalSyntheticLambda0;-><init>()V
-PLcom/android/server/pm/dex/OdsignStatsLogger$$ExternalSyntheticLambda0;->run()V
-PLcom/android/server/pm/dex/OdsignStatsLogger;->$r8$lambda$5IgqqBRRaURrVhBA9xD6mm8mpzY()V
+HSPLcom/android/server/pm/dex/OdsignStatsLogger$$ExternalSyntheticLambda0;->run()V
+HSPLcom/android/server/pm/dex/OdsignStatsLogger;->$r8$lambda$5IgqqBRRaURrVhBA9xD6mm8mpzY()V
 HSPLcom/android/server/pm/dex/OdsignStatsLogger;->triggerStatsWrite()V
-PLcom/android/server/pm/dex/OdsignStatsLogger;->writeStats()V
+HSPLcom/android/server/pm/dex/OdsignStatsLogger;->writeStats()V
 PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->-$$Nest$fgetmIsUsedByOtherApps(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;)Z
 HSPLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->-$$Nest$fgetmLoaderIsas(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;)Ljava/util/Set;
 HSPLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->-$$Nest$fgetmLoadingPackages(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;)Ljava/util/Set;
 HSPLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->-$$Nest$fgetmOwnerUserId(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;)I
 HSPLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->-$$Nest$mmerge(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;Z)Z
 HPLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;-><init>(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;)V
-PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;-><init>(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo-IA;)V
+HPLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;-><init>(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo-IA;)V
 HSPLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;-><init>(ZILjava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->getClassLoaderContext()Ljava/lang/String;
 PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->getLoaderIsas()Ljava/util/Set;
@@ -40214,12 +41710,12 @@
 HPLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->isUnsupportedContext(Ljava/lang/String;)Z
 PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->isUsedByOtherApps()Z
 PLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->isVariableClassLoaderContext()Z
-HSPLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->merge(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;Z)Z
+HSPLcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;->merge(Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;Z)Z+]Ljava/util/Set;Ljava/util/HashSet;
 HSPLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;->-$$Nest$fgetmDexUseInfoMap(Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;)Ljava/util/Map;
 HSPLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;->-$$Nest$fgetmPrimaryCodePaths(Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;)Ljava/util/Map;
 HSPLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;->-$$Nest$mmergePrimaryCodePaths(Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;Ljava/lang/String;Ljava/lang/String;)Z
 HPLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;-><init>(Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;)V+]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;]Ljava/util/Set;Ljava/util/HashMap$EntrySet;
-PLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;-><init>(Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo-IA;)V
+HPLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;-><init>(Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo-IA;)V
 HSPLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;-><init>(Ljava/lang/String;)V
 PLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;->clearCodePathUsedByOtherApps()Z
 HPLcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;->getDexUseInfoMap()Ljava/util/Map;
@@ -40234,7 +41730,7 @@
 HSPLcom/android/server/pm/dex/PackageDexUsage;->getPackageUseInfo(Ljava/lang/String;)Lcom/android/server/pm/dex/PackageDexUsage$PackageUseInfo;
 HSPLcom/android/server/pm/dex/PackageDexUsage;->isSupportedVersion(I)Z
 HSPLcom/android/server/pm/dex/PackageDexUsage;->maybeAddLoadingPackage(Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;)Z
-HPLcom/android/server/pm/dex/PackageDexUsage;->maybeWriteAsync()V
+HSPLcom/android/server/pm/dex/PackageDexUsage;->maybeWriteAsync()V
 HSPLcom/android/server/pm/dex/PackageDexUsage;->read()V
 HSPLcom/android/server/pm/dex/PackageDexUsage;->read(Ljava/io/Reader;)V
 HSPLcom/android/server/pm/dex/PackageDexUsage;->readBoolean(Ljava/lang/String;)Z
@@ -40251,21 +41747,23 @@
 HPLcom/android/server/pm/dex/PackageDexUsage;->write(Ljava/io/Writer;)V+]Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;Lcom/android/server/pm/dex/PackageDexUsage$DexUseInfo;]Lcom/android/internal/util/FastPrintWriter;Lcom/android/internal/util/FastPrintWriter;]Lcom/android/server/pm/dex/PackageDexUsage;Lcom/android/server/pm/dex/PackageDexUsage;]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;,Ljava/util/HashMap$EntryIterator;]Ljava/util/Set;Ljava/util/HashSet;,Ljava/util/HashMap$EntrySet;
 PLcom/android/server/pm/dex/PackageDexUsage;->writeBoolean(Z)Ljava/lang/String;
 PLcom/android/server/pm/dex/PackageDexUsage;->writeInternal(Ljava/lang/Object;)V
-PLcom/android/server/pm/dex/PackageDexUsage;->writeInternal(Ljava/lang/Void;)V
+HPLcom/android/server/pm/dex/PackageDexUsage;->writeInternal(Ljava/lang/Void;)V
 PLcom/android/server/pm/dex/PackageDexUsage;->writeNow()V
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading$DynamicCodeFile;-><init>(CI[Ljava/lang/String;)V
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading$DynamicCodeFile;-><init>(CI[Ljava/lang/String;Lcom/android/server/pm/dex/PackageDynamicCodeLoading$DynamicCodeFile-IA;)V
-PLcom/android/server/pm/dex/PackageDynamicCodeLoading$DynamicCodeFile;-><init>(Lcom/android/server/pm/dex/PackageDynamicCodeLoading$DynamicCodeFile;)V
+HPLcom/android/server/pm/dex/PackageDynamicCodeLoading$DynamicCodeFile;-><init>(Lcom/android/server/pm/dex/PackageDynamicCodeLoading$DynamicCodeFile;)V
 PLcom/android/server/pm/dex/PackageDynamicCodeLoading$DynamicCodeFile;-><init>(Lcom/android/server/pm/dex/PackageDynamicCodeLoading$DynamicCodeFile;Lcom/android/server/pm/dex/PackageDynamicCodeLoading$DynamicCodeFile-IA;)V
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;->-$$Nest$madd(Lcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;Ljava/lang/String;CILjava/lang/String;)Z
 PLcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;->-$$Nest$mremoveFile(Lcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;Ljava/lang/String;I)Z
+PLcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;->-$$Nest$mremoveUser(Lcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;I)Z
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;->-$$Nest$msyncData(Lcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;Ljava/util/Map;Ljava/util/Set;)V
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;-><init>()V
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;-><init>(Lcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode-IA;)V
 HPLcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;-><init>(Lcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;)V
 PLcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;-><init>(Lcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;Lcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode-IA;)V
-HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;->add(Ljava/lang/String;CILjava/lang/String;)Z
+HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;->add(Ljava/lang/String;CILjava/lang/String;)Z+]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Set;Ljava/util/HashSet;
 PLcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;->removeFile(Ljava/lang/String;I)Z
+PLcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;->removeUser(I)Z
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;->syncData(Ljava/util/Map;Ljava/util/Set;)V
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading;-><clinit>()V
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading;-><init>()V
@@ -40280,14 +41778,14 @@
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->readFileInfo(Ljava/lang/String;Lcom/android/server/pm/dex/PackageDynamicCodeLoading$PackageDynamicCode;)V
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->readInternal(Ljava/lang/Object;)V
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->readInternal(Ljava/lang/Void;)V
-HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->record(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;)Z
+HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->record(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;)Z+]Ljava/util/Map;Ljava/util/HashMap;
 PLcom/android/server/pm/dex/PackageDynamicCodeLoading;->removeFile(Ljava/lang/String;Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->removePackage(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->removeUserPackage(Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->syncData(Ljava/util/Map;)V
 HSPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->unescape(Ljava/lang/String;)Ljava/lang/String;
-PLcom/android/server/pm/dex/PackageDynamicCodeLoading;->write(Ljava/io/OutputStream;)V
-HPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->write(Ljava/io/OutputStream;Ljava/util/Map;)V
+HPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->write(Ljava/io/OutputStream;)V
+HPLcom/android/server/pm/dex/PackageDynamicCodeLoading;->write(Ljava/io/OutputStream;Ljava/util/Map;)V+]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;]Ljava/io/PrintWriter;Lcom/android/internal/util/FastPrintWriter;]Ljava/util/Map;Ljava/util/HashMap;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;,Ljava/util/HashMap$EntryIterator;]Ljava/util/Set;Ljava/util/HashSet;,Ljava/util/HashMap$EntrySet;
 PLcom/android/server/pm/dex/PackageDynamicCodeLoading;->writeInternal(Ljava/lang/Object;)V
 PLcom/android/server/pm/dex/PackageDynamicCodeLoading;->writeInternal(Ljava/lang/Void;)V
 PLcom/android/server/pm/dex/PackageDynamicCodeLoading;->writeNow()V
@@ -40308,7 +41806,7 @@
 HSPLcom/android/server/pm/parsing/PackageCacher;->getCacheKey(Ljava/io/File;I)Ljava/lang/String;
 HSPLcom/android/server/pm/parsing/PackageCacher;->getCachedResult(Ljava/io/File;I)Lcom/android/server/pm/parsing/pkg/ParsedPackage;
 HSPLcom/android/server/pm/parsing/PackageCacher;->isCacheUpToDate(Ljava/io/File;Ljava/io/File;)Z
-HSPLcom/android/server/pm/parsing/PackageCacher;->lambda$cleanCachedResult$0(Ljava/lang/String;Ljava/io/File;Ljava/lang/String;)Z
+HSPLcom/android/server/pm/parsing/PackageCacher;->lambda$cleanCachedResult$0(Ljava/lang/String;Ljava/io/File;Ljava/lang/String;)Z+]Ljava/lang/String;Ljava/lang/String;
 HSPLcom/android/server/pm/parsing/PackageCacher;->toCacheEntry(Lcom/android/server/pm/parsing/pkg/ParsedPackage;)[B
 HSPLcom/android/server/pm/parsing/PackageCacher;->toCacheEntryStatic(Lcom/android/server/pm/parsing/pkg/ParsedPackage;)[B
 HSPLcom/android/server/pm/parsing/PackageInfoUtils$CachedApplicationInfoGenerator;-><init>()V
@@ -40328,7 +41826,7 @@
 HSPLcom/android/server/pm/parsing/PackageInfoUtils;->generateActivityInfo(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/pkg/component/ParsedActivity;JLcom/android/server/pm/pkg/PackageUserStateInternal;Landroid/content/pm/ApplicationInfo;ILcom/android/server/pm/pkg/PackageStateInternal;)Landroid/content/pm/ActivityInfo;
 HSPLcom/android/server/pm/parsing/PackageInfoUtils;->generateApplicationInfo(Lcom/android/server/pm/parsing/pkg/AndroidPackage;JLcom/android/server/pm/pkg/PackageUserStateInternal;ILcom/android/server/pm/pkg/PackageStateInternal;)Landroid/content/pm/ApplicationInfo;+]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Lcom/android/server/pm/pkg/PackageStateUnserialized;Lcom/android/server/pm/pkg/PackageStateUnserialized;
 HPLcom/android/server/pm/parsing/PackageInfoUtils;->generateInstrumentationInfo(Lcom/android/server/pm/pkg/component/ParsedInstrumentation;Lcom/android/server/pm/parsing/pkg/AndroidPackage;JILcom/android/server/pm/pkg/PackageStateInternal;)Landroid/content/pm/InstrumentationInfo;
-HPLcom/android/server/pm/parsing/PackageInfoUtils;->generatePermissionGroupInfo(Lcom/android/server/pm/pkg/component/ParsedPermissionGroup;J)Landroid/content/pm/PermissionGroupInfo;
+HSPLcom/android/server/pm/parsing/PackageInfoUtils;->generatePermissionGroupInfo(Lcom/android/server/pm/pkg/component/ParsedPermissionGroup;J)Landroid/content/pm/PermissionGroupInfo;
 HSPLcom/android/server/pm/parsing/PackageInfoUtils;->generatePermissionInfo(Lcom/android/server/pm/pkg/component/ParsedPermission;J)Landroid/content/pm/PermissionInfo;
 HSPLcom/android/server/pm/parsing/PackageInfoUtils;->generateProcessInfo(Ljava/util/Map;J)Landroid/util/ArrayMap;+]Ljava/util/Map;Landroid/util/ArrayMap;,Ljava/util/HashMap;,Ljava/util/Collections$EmptyMap;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;,Landroid/util/MapCollections$ArrayIterator;,Ljava/util/Collections$EmptyIterator;]Ljava/util/Set;Ljava/util/HashMap$KeySet;,Landroid/util/MapCollections$KeySet;,Ljava/util/Collections$EmptySet;
 HSPLcom/android/server/pm/parsing/PackageInfoUtils;->generateProviderInfo(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/pkg/component/ParsedProvider;JLcom/android/server/pm/pkg/PackageUserStateInternal;Landroid/content/pm/ApplicationInfo;ILcom/android/server/pm/pkg/PackageStateInternal;)Landroid/content/pm/ProviderInfo;+]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;
@@ -40359,7 +41857,7 @@
 HSPLcom/android/server/pm/parsing/PackageParser2;->lambda$new$2(Landroid/content/pm/parsing/result/ParseInput$Callback;)Landroid/content/pm/parsing/result/ParseTypeImpl;
 HSPLcom/android/server/pm/parsing/PackageParser2;->parsePackage(Ljava/io/File;IZ)Lcom/android/server/pm/parsing/pkg/ParsedPackage;
 HSPLcom/android/server/pm/parsing/PackageParser2;->parsePackage(Ljava/io/File;IZLjava/util/List;)Lcom/android/server/pm/parsing/pkg/ParsedPackage;
-HSPLcom/android/server/pm/parsing/ParsedComponentStateUtils;->getNonLocalizedLabelAndIcon(Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/PackageStateInternal;I)Landroid/util/Pair;+]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;,Lcom/android/server/pm/pkg/component/ParsedProviderImpl;,Lcom/android/server/pm/pkg/component/ParsedServiceImpl;,Lcom/android/server/pm/pkg/component/ParsedInstrumentationImpl;]Lcom/android/server/pm/pkg/PackageUserStateInternal;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Ljava/lang/Integer;Ljava/lang/Integer;
+HSPLcom/android/server/pm/parsing/ParsedComponentStateUtils;->getNonLocalizedLabelAndIcon(Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/PackageStateInternal;I)Landroid/util/Pair;+]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;,Lcom/android/server/pm/pkg/component/ParsedProviderImpl;,Lcom/android/server/pm/pkg/component/ParsedServiceImpl;,Lcom/android/server/pm/pkg/component/ParsedInstrumentationImpl;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/pm/pkg/PackageUserStateInternal;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/parsing/library/AndroidHidlUpdater;-><init>()V
 HSPLcom/android/server/pm/parsing/library/AndroidHidlUpdater;->updatePackage(Lcom/android/server/pm/parsing/pkg/ParsedPackage;Z)V
 HSPLcom/android/server/pm/parsing/library/AndroidNetIpSecIkeUpdater;-><init>()V
@@ -40448,7 +41946,7 @@
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->isOdm()Z
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->isOem()Z
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->isPrivileged()Z+]Lcom/android/server/pm/parsing/pkg/PackageImpl;Lcom/android/server/pm/parsing/pkg/PackageImpl;
-HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->isProduct()Z
+HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->isProduct()Z+]Lcom/android/server/pm/parsing/pkg/PackageImpl;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->isSignedWithPlatformKey()Z
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->isStub()Z+]Lcom/android/server/pm/parsing/pkg/PackageImpl;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/parsing/pkg/PackageImpl;->isSystem()Z+]Lcom/android/server/pm/parsing/pkg/PackageImpl;Lcom/android/server/pm/parsing/pkg/PackageImpl;
@@ -40533,44 +42031,44 @@
 HSPLcom/android/server/pm/permission/CompatibilityPermissionInfo;-><init>(Ljava/lang/String;I)V
 HSPLcom/android/server/pm/permission/CompatibilityPermissionInfo;->getName()Ljava/lang/String;
 HSPLcom/android/server/pm/permission/CompatibilityPermissionInfo;->getSdkVersion()I
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$$ExternalSyntheticLambda0;-><init>()V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$$ExternalSyntheticLambda0;-><init>()V
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$1;-><init>(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy;)V
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$1;->getPackageInfo(Ljava/lang/String;)Landroid/content/pm/PackageInfo;
-HPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$1;->getPermissionFlags(Ljava/lang/String;Landroid/content/pm/PackageInfo;Landroid/os/UserHandle;)I
-HPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$1;->getPermissionInfo(Ljava/lang/String;)Landroid/content/pm/PermissionInfo;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$1;->grantPermission(Ljava/lang/String;Landroid/content/pm/PackageInfo;Landroid/os/UserHandle;)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$1;->getPermissionFlags(Ljava/lang/String;Landroid/content/pm/PackageInfo;Landroid/os/UserHandle;)I
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$1;->getPermissionInfo(Ljava/lang/String;)Landroid/content/pm/PermissionInfo;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$1;->grantPermission(Ljava/lang/String;Landroid/content/pm/PackageInfo;Landroid/os/UserHandle;)V
 PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$1;->isGranted(Ljava/lang/String;Landroid/content/pm/PackageInfo;Landroid/os/UserHandle;)Z
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$1;->updatePermissionFlags(Ljava/lang/String;Landroid/content/pm/PackageInfo;IILandroid/os/UserHandle;)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$1;->updatePermissionFlags(Ljava/lang/String;Landroid/content/pm/PackageInfo;IILandroid/os/UserHandle;)V
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$2;-><init>(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy;Landroid/os/Looper;)V
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$2;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DefaultPermissionGrant;-><init>(Ljava/lang/String;ZZ)V
-HPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache$PermissionState;-><init>(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;Ljava/lang/String;Landroid/content/pm/PackageInfo;Landroid/os/UserHandle;)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache$PermissionState;-><init>(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;Ljava/lang/String;Landroid/content/pm/PackageInfo;Landroid/os/UserHandle;Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache$PermissionState-IA;)V
-HPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache$PermissionState;->apply()V
-HPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache$PermissionState;->initFlags()V
-HPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache$PermissionState;->initGranted()V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;->-$$Nest$mcreateContextAsUser(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;Landroid/os/UserHandle;)Landroid/content/Context;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;-><init>(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy;)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;-><init>(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy;Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache-IA;)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;->addPackageInfo(Ljava/lang/String;Landroid/content/pm/PackageInfo;)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;->apply()V
-HPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;->createContextAsUser(Landroid/os/UserHandle;)Landroid/content/Context;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;->getPackageInfo(Ljava/lang/String;)Landroid/content/pm/PackageInfo;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;->getPermissionFlags(Ljava/lang/String;Landroid/content/pm/PackageInfo;Landroid/os/UserHandle;)I
-HPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;->getPermissionInfo(Ljava/lang/String;)Landroid/content/pm/PermissionInfo;
-HPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;->getPermissionState(Ljava/lang/String;Landroid/content/pm/PackageInfo;Landroid/os/UserHandle;)Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache$PermissionState;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;->grantPermission(Ljava/lang/String;Landroid/content/pm/PackageInfo;Landroid/os/UserHandle;)V
-HPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;->isGranted(Ljava/lang/String;Landroid/content/pm/PackageInfo;Landroid/os/UserHandle;)Z
-HPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;->updatePermissionFlags(Ljava/lang/String;Landroid/content/pm/PackageInfo;IILandroid/os/UserHandle;)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache$PermissionState;-><init>(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;Ljava/lang/String;Landroid/content/pm/PackageInfo;Landroid/os/UserHandle;)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache$PermissionState;-><init>(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;Ljava/lang/String;Landroid/content/pm/PackageInfo;Landroid/os/UserHandle;Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache$PermissionState-IA;)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache$PermissionState;->apply()V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache$PermissionState;->initFlags()V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache$PermissionState;->initGranted()V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;->-$$Nest$mcreateContextAsUser(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;Landroid/os/UserHandle;)Landroid/content/Context;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;-><init>(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy;)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;-><init>(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy;Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache-IA;)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;->addPackageInfo(Ljava/lang/String;Landroid/content/pm/PackageInfo;)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;->apply()V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;->createContextAsUser(Landroid/os/UserHandle;)Landroid/content/Context;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;->getPackageInfo(Ljava/lang/String;)Landroid/content/pm/PackageInfo;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;->getPermissionFlags(Ljava/lang/String;Landroid/content/pm/PackageInfo;Landroid/os/UserHandle;)I
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;->getPermissionInfo(Ljava/lang/String;)Landroid/content/pm/PermissionInfo;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;->getPermissionState(Ljava/lang/String;Landroid/content/pm/PackageInfo;Landroid/os/UserHandle;)Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache$PermissionState;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;->grantPermission(Ljava/lang/String;Landroid/content/pm/PackageInfo;Landroid/os/UserHandle;)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;->isGranted(Ljava/lang/String;Landroid/content/pm/PackageInfo;Landroid/os/UserHandle;)Z
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;->updatePermissionFlags(Ljava/lang/String;Landroid/content/pm/PackageInfo;IILandroid/os/UserHandle;)V
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;-><init>(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy;)V
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;-><init>(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy;Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper-IA;)V
-HPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;->getBackgroundPermission(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;->getBackgroundPermission(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;->getSystemPackageInfo(Ljava/lang/String;)Landroid/content/pm/PackageInfo;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;->isPermissionDangerous(Ljava/lang/String;)Z
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;->isPermissionRestricted(Ljava/lang/String;)Z
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;->isPermissionDangerous(Ljava/lang/String;)Z
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;->isPermissionRestricted(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;->isSysComponentOrPersistentPlatformSignedPrivApp(Landroid/content/pm/PackageInfo;)Z
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;->isSystemPackage(Landroid/content/pm/PackageInfo;)Z
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;->isSystemPackage(Ljava/lang/String;)Z
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;->isSystemPackage(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->-$$Nest$fgetNO_PM_CACHE(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy;)Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->-$$Nest$fgetmContext(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy;)Landroid/content/Context;
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->-$$Nest$fgetmGrantExceptions(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy;)Landroid/util/ArrayMap;
@@ -40581,48 +42079,49 @@
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;-><clinit>()V
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->doesPackageSupportRuntimePermissions(Landroid/content/pm/PackageInfo;)Z
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultCaptivePortalLoginPackage()Ljava/lang/String;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultCaptivePortalLoginPackage()Ljava/lang/String;
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultPermissionFiles()[Ljava/io/File;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultProviderAuthorityPackage(Ljava/lang/String;I)Ljava/lang/String;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultSearchSelectorPackage()Ljava/lang/String;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultSystemHandlerActivityPackage(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Landroid/content/Intent;I)Ljava/lang/String;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultSystemHandlerActivityPackage(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Ljava/lang/String;I)Ljava/lang/String;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultSystemHandlerActivityPackageForCategory(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Ljava/lang/String;I)Ljava/lang/String;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultSystemHandlerServicePackage(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Landroid/content/Intent;I)Ljava/lang/String;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultSystemHandlerServicePackage(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Ljava/lang/String;I)Ljava/lang/String;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getHeadlessSyncAdapterPackages(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;[Ljava/lang/String;I)Ljava/util/ArrayList;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getKnownPackages(II)[Ljava/lang/String;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionExceptions(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;I)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissions(I)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultProviderAuthorityPackage(Ljava/lang/String;I)Ljava/lang/String;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultSearchSelectorPackage()Ljava/lang/String;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultSystemHandlerActivityPackage(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Landroid/content/Intent;I)Ljava/lang/String;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultSystemHandlerActivityPackage(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Ljava/lang/String;I)Ljava/lang/String;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultSystemHandlerActivityPackageForCategory(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Ljava/lang/String;I)Ljava/lang/String;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultSystemHandlerServicePackage(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Landroid/content/Intent;I)Ljava/lang/String;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getDefaultSystemHandlerServicePackage(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Ljava/lang/String;I)Ljava/lang/String;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getHeadlessSyncAdapterPackages(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;[Ljava/lang/String;I)Ljava/util/ArrayList;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->getKnownPackages(II)[Ljava/lang/String;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionExceptions(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;I)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissions(I)V
 PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToActiveLuiApp(Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToCarrierServiceApp(Ljava/lang/String;I)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToDefaultSimCallManager(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Ljava/lang/String;I)V
+HPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToDefaultSimCallManager(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToDefaultSimCallManager(Ljava/lang/String;I)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToDefaultSystemDialerApp(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Ljava/lang/String;I)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToDefaultSystemSmsApp(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Ljava/lang/String;I)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToDefaultSystemDialerApp(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Ljava/lang/String;I)V
+PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToDefaultSystemSimCallManager(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Ljava/lang/String;I)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToDefaultSystemSmsApp(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToDefaultSystemUseOpenWifiApp(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToEnabledCarrierApps([Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToEnabledImsServices([Ljava/lang/String;I)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToEnabledTelephonyDataServices([Ljava/lang/String;I)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultSystemHandlerPermissions(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;I)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantPermissionToEachSystemPackage(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Ljava/util/ArrayList;I[Ljava/util/Set;)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantPermissionsToPackage(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Landroid/content/pm/PackageInfo;IZZZ[Ljava/util/Set;)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantPermissionsToPackage(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Ljava/lang/String;IZZ[Ljava/util/Set;)V
-HPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantPermissionsToSysComponentsAndPrivApps(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;I)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantPermissionsToSystemPackage(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Ljava/lang/String;IZ[Ljava/util/Set;)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantPermissionsToSystemPackage(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Ljava/lang/String;I[Ljava/util/Set;)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantRuntimePermissions(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Landroid/content/pm/PackageInfo;Ljava/util/Set;ZI)V
-HPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantRuntimePermissions(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Landroid/content/pm/PackageInfo;Ljava/util/Set;ZZZI)V+]Landroid/permission/PermissionManager;Landroid/permission/PermissionManager;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy;Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy;]Landroid/permission/PermissionManager$SplitPermissionInfo;Landroid/permission/PermissionManager$SplitPermissionInfo;]Ljava/util/Set;Landroid/util/ArraySet;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;,Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$1;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantRuntimePermissionsForSystemPackage(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;ILandroid/content/pm/PackageInfo;)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantRuntimePermissionsForSystemPackage(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;ILandroid/content/pm/PackageInfo;Ljava/util/Set;)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantSignatureAppsNotificationPermissions(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;I)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantSystemFixedPermissionsToSystemPackage(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Ljava/lang/String;I[Ljava/util/Set;)V
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->isFixedOrUserSet(I)Z
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultPermissionsToEnabledTelephonyDataServices([Ljava/lang/String;I)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantDefaultSystemHandlerPermissions(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;I)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantPermissionToEachSystemPackage(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Ljava/util/ArrayList;I[Ljava/util/Set;)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantPermissionsToPackage(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Landroid/content/pm/PackageInfo;IZZZ[Ljava/util/Set;)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantPermissionsToPackage(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Ljava/lang/String;IZZ[Ljava/util/Set;)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantPermissionsToSysComponentsAndPrivApps(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;I)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantPermissionsToSystemPackage(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Ljava/lang/String;IZ[Ljava/util/Set;)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantPermissionsToSystemPackage(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Ljava/lang/String;I[Ljava/util/Set;)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantRuntimePermissions(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Landroid/content/pm/PackageInfo;Ljava/util/Set;ZI)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantRuntimePermissions(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Landroid/content/pm/PackageInfo;Ljava/util/Set;ZZZI)V+]Landroid/permission/PermissionManager;Landroid/permission/PermissionManager;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy;Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy;]Landroid/permission/PermissionManager$SplitPermissionInfo;Landroid/permission/PermissionManager$SplitPermissionInfo;]Ljava/util/Set;Landroid/util/ArraySet;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;,Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$1;
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantRuntimePermissionsForSystemPackage(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;ILandroid/content/pm/PackageInfo;)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantRuntimePermissionsForSystemPackage(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;ILandroid/content/pm/PackageInfo;Ljava/util/Set;)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantSignatureAppsNotificationPermissions(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;I)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->grantSystemFixedPermissionsToSystemPackage(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Ljava/lang/String;I[Ljava/util/Set;)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->isFixedOrUserSet(I)Z
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->parse(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Landroid/util/TypedXmlPullParser;Ljava/util/Map;)V
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->parseExceptions(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Landroid/util/TypedXmlPullParser;Ljava/util/Map;)V
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->parsePermission(Landroid/util/TypedXmlPullParser;Ljava/util/List;)V
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->readDefaultPermissionExceptionsLocked(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;)Landroid/util/ArrayMap;
-PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->revokeDefaultPermissionsFromDisabledTelephonyDataServices([Ljava/lang/String;I)V
+HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->revokeDefaultPermissionsFromDisabledTelephonyDataServices([Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->revokeDefaultPermissionsFromLuiApps([Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->revokeRuntimePermissions(Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;Ljava/lang/String;Ljava/util/Set;ZI)V
 HSPLcom/android/server/pm/permission/DefaultPermissionGrantPolicy;->scheduleReadDefaultPermissionExceptions()V
@@ -40647,8 +42146,8 @@
 HSPLcom/android/server/pm/permission/LegacyPermission;->read(Ljava/util/Map;Landroid/util/TypedXmlPullParser;)Z
 HSPLcom/android/server/pm/permission/LegacyPermission;->readInt(Landroid/util/TypedXmlPullParser;Ljava/lang/String;Ljava/lang/String;I)I
 HSPLcom/android/server/pm/permission/LegacyPermission;->write(Landroid/util/TypedXmlSerializer;)V+]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Ljava/lang/CharSequence;Ljava/lang/String;
-PLcom/android/server/pm/permission/LegacyPermissionManagerService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/pm/permission/LegacyPermissionManagerService;[Ljava/lang/String;I)V
-PLcom/android/server/pm/permission/LegacyPermissionManagerService$$ExternalSyntheticLambda0;->runOrThrow()V
+HSPLcom/android/server/pm/permission/LegacyPermissionManagerService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/pm/permission/LegacyPermissionManagerService;[Ljava/lang/String;I)V
+HSPLcom/android/server/pm/permission/LegacyPermissionManagerService$$ExternalSyntheticLambda0;->runOrThrow()V
 PLcom/android/server/pm/permission/LegacyPermissionManagerService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/pm/permission/LegacyPermissionManagerService;Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/LegacyPermissionManagerService$$ExternalSyntheticLambda1;->runOrThrow()V
 PLcom/android/server/pm/permission/LegacyPermissionManagerService$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/pm/permission/LegacyPermissionManagerService;[Ljava/lang/String;I)V
@@ -40657,23 +42156,23 @@
 PLcom/android/server/pm/permission/LegacyPermissionManagerService$$ExternalSyntheticLambda3;->runOrThrow()V
 PLcom/android/server/pm/permission/LegacyPermissionManagerService$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/pm/permission/LegacyPermissionManagerService;[Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/LegacyPermissionManagerService$$ExternalSyntheticLambda4;->runOrThrow()V
-PLcom/android/server/pm/permission/LegacyPermissionManagerService$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/pm/permission/LegacyPermissionManagerService;[Ljava/lang/String;I)V
-PLcom/android/server/pm/permission/LegacyPermissionManagerService$$ExternalSyntheticLambda5;->runOrThrow()V
+HSPLcom/android/server/pm/permission/LegacyPermissionManagerService$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/pm/permission/LegacyPermissionManagerService;[Ljava/lang/String;I)V
+HSPLcom/android/server/pm/permission/LegacyPermissionManagerService$$ExternalSyntheticLambda5;->runOrThrow()V
 PLcom/android/server/pm/permission/LegacyPermissionManagerService$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/pm/permission/LegacyPermissionManagerService;Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/LegacyPermissionManagerService$$ExternalSyntheticLambda6;->runOrThrow()V
 HSPLcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;-><init>(Landroid/content/Context;)V
-HPLcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;->checkPermission(Ljava/lang/String;II)I+]Landroid/content/Context;Landroid/app/ContextImpl;
+HSPLcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;->checkPermission(Ljava/lang/String;II)I+]Landroid/content/Context;Landroid/app/ContextImpl;
 HPLcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;->clearCallingIdentity()J
 HPLcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;->getApplicationInfo(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo;
 HSPLcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;->getCallingPid()I
 HSPLcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;->getCallingUid()I
-HPLcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;->getPackageUidForUser(Ljava/lang/String;I)I
+HSPLcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;->getPackageUidForUser(Ljava/lang/String;I)I
 HPLcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;+]Landroid/content/Context;Landroid/app/ContextImpl;
 HPLcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;->restoreCallingIdentity(J)V
 HSPLcom/android/server/pm/permission/LegacyPermissionManagerService$Internal;-><init>(Lcom/android/server/pm/permission/LegacyPermissionManagerService;)V
 HSPLcom/android/server/pm/permission/LegacyPermissionManagerService$Internal;-><init>(Lcom/android/server/pm/permission/LegacyPermissionManagerService;Lcom/android/server/pm/permission/LegacyPermissionManagerService$Internal-IA;)V
 HPLcom/android/server/pm/permission/LegacyPermissionManagerService$Internal;->checkSoundTriggerRecordAudioPermissionForDataDelivery(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I
-PLcom/android/server/pm/permission/LegacyPermissionManagerService$Internal;->grantDefaultPermissions(I)V
+HSPLcom/android/server/pm/permission/LegacyPermissionManagerService$Internal;->grantDefaultPermissions(I)V
 PLcom/android/server/pm/permission/LegacyPermissionManagerService$Internal;->grantDefaultPermissionsToDefaultSimCallManager(Ljava/lang/String;I)V
 HSPLcom/android/server/pm/permission/LegacyPermissionManagerService$Internal;->scheduleReadDefaultPermissionExceptions()V
 HSPLcom/android/server/pm/permission/LegacyPermissionManagerService$Internal;->setDialerAppPackagesProvider(Lcom/android/server/pm/permission/LegacyPermissionManagerInternal$PackagesProvider;)V
@@ -40684,12 +42183,12 @@
 HSPLcom/android/server/pm/permission/LegacyPermissionManagerService$Internal;->setSyncAdapterPackagesProvider(Lcom/android/server/pm/permission/LegacyPermissionManagerInternal$SyncAdapterPackagesProvider;)V
 HSPLcom/android/server/pm/permission/LegacyPermissionManagerService$Internal;->setUseOpenWifiAppPackagesProvider(Lcom/android/server/pm/permission/LegacyPermissionManagerInternal$PackagesProvider;)V
 HSPLcom/android/server/pm/permission/LegacyPermissionManagerService$Internal;->setVoiceInteractionPackagesProvider(Lcom/android/server/pm/permission/LegacyPermissionManagerInternal$PackagesProvider;)V
-PLcom/android/server/pm/permission/LegacyPermissionManagerService;->$r8$lambda$4ho3FnztDWmTvVJqwlJzbdcnRtw(Lcom/android/server/pm/permission/LegacyPermissionManagerService;[Ljava/lang/String;I)V
+HSPLcom/android/server/pm/permission/LegacyPermissionManagerService;->$r8$lambda$4ho3FnztDWmTvVJqwlJzbdcnRtw(Lcom/android/server/pm/permission/LegacyPermissionManagerService;[Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/LegacyPermissionManagerService;->$r8$lambda$K55aU-roY4lv_Wob0IAz8DdAyOc(Lcom/android/server/pm/permission/LegacyPermissionManagerService;[Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/LegacyPermissionManagerService;->$r8$lambda$PbUQb6XgWD82KYv2JvUW9FxTFN0(Lcom/android/server/pm/permission/LegacyPermissionManagerService;Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/LegacyPermissionManagerService;->$r8$lambda$UZIHoUTv2o6sEy4iu84zF2lPrXY(Lcom/android/server/pm/permission/LegacyPermissionManagerService;Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/LegacyPermissionManagerService;->$r8$lambda$ezdPR4j-X_BE3HK_clEkRp-Yp-8(Lcom/android/server/pm/permission/LegacyPermissionManagerService;[Ljava/lang/String;I)V
-PLcom/android/server/pm/permission/LegacyPermissionManagerService;->$r8$lambda$kI8DHUIHl0KCzTrDG5x_o0X79rs(Lcom/android/server/pm/permission/LegacyPermissionManagerService;[Ljava/lang/String;I)V
+HSPLcom/android/server/pm/permission/LegacyPermissionManagerService;->$r8$lambda$kI8DHUIHl0KCzTrDG5x_o0X79rs(Lcom/android/server/pm/permission/LegacyPermissionManagerService;[Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/LegacyPermissionManagerService;->$r8$lambda$zcGdKsM2aK1YS4jdsYcxzTsWD9s(Lcom/android/server/pm/permission/LegacyPermissionManagerService;[Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/LegacyPermissionManagerService;->-$$Nest$fgetmContext(Lcom/android/server/pm/permission/LegacyPermissionManagerService;)Landroid/content/Context;
 HSPLcom/android/server/pm/permission/LegacyPermissionManagerService;->-$$Nest$fgetmDefaultPermissionGrantPolicy(Lcom/android/server/pm/permission/LegacyPermissionManagerService;)Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy;
@@ -40697,21 +42196,21 @@
 HSPLcom/android/server/pm/permission/LegacyPermissionManagerService;-><init>(Landroid/content/Context;Lcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;)V
 HSPLcom/android/server/pm/permission/LegacyPermissionManagerService;->checkDeviceIdentifierAccess(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)I+]Lcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;Lcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;]Lcom/android/server/pm/permission/LegacyPermissionManagerService;Lcom/android/server/pm/permission/LegacyPermissionManagerService;]Landroid/app/admin/DevicePolicyManager;Landroid/app/admin/DevicePolicyManager;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
 HPLcom/android/server/pm/permission/LegacyPermissionManagerService;->checkPermissionAndAppop(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)I+]Lcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;Lcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
-HPLcom/android/server/pm/permission/LegacyPermissionManagerService;->checkPhoneNumberAccess(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)I+]Lcom/android/server/pm/permission/LegacyPermissionManagerService;Lcom/android/server/pm/permission/LegacyPermissionManagerService;]Lcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;Lcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;
+HSPLcom/android/server/pm/permission/LegacyPermissionManagerService;->checkPhoneNumberAccess(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)I+]Lcom/android/server/pm/permission/LegacyPermissionManagerService;Lcom/android/server/pm/permission/LegacyPermissionManagerService;]Lcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;Lcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;
 HSPLcom/android/server/pm/permission/LegacyPermissionManagerService;->create(Landroid/content/Context;)Lcom/android/server/pm/permission/LegacyPermissionManagerInternal;
 PLcom/android/server/pm/permission/LegacyPermissionManagerService;->grantDefaultPermissionsToActiveLuiApp(Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/LegacyPermissionManagerService;->grantDefaultPermissionsToCarrierServiceApp(Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/LegacyPermissionManagerService;->grantDefaultPermissionsToEnabledCarrierApps([Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/LegacyPermissionManagerService;->grantDefaultPermissionsToEnabledImsServices([Ljava/lang/String;I)V
-PLcom/android/server/pm/permission/LegacyPermissionManagerService;->grantDefaultPermissionsToEnabledTelephonyDataServices([Ljava/lang/String;I)V
+HSPLcom/android/server/pm/permission/LegacyPermissionManagerService;->grantDefaultPermissionsToEnabledTelephonyDataServices([Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/LegacyPermissionManagerService;->lambda$grantDefaultPermissionsToActiveLuiApp$1(Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/LegacyPermissionManagerService;->lambda$grantDefaultPermissionsToCarrierServiceApp$0(Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/LegacyPermissionManagerService;->lambda$grantDefaultPermissionsToEnabledCarrierApps$6([Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/LegacyPermissionManagerService;->lambda$grantDefaultPermissionsToEnabledImsServices$3([Ljava/lang/String;I)V
-PLcom/android/server/pm/permission/LegacyPermissionManagerService;->lambda$grantDefaultPermissionsToEnabledTelephonyDataServices$4([Ljava/lang/String;I)V
-PLcom/android/server/pm/permission/LegacyPermissionManagerService;->lambda$revokeDefaultPermissionsFromDisabledTelephonyDataServices$5([Ljava/lang/String;I)V
+HSPLcom/android/server/pm/permission/LegacyPermissionManagerService;->lambda$grantDefaultPermissionsToEnabledTelephonyDataServices$4([Ljava/lang/String;I)V
+HSPLcom/android/server/pm/permission/LegacyPermissionManagerService;->lambda$revokeDefaultPermissionsFromDisabledTelephonyDataServices$5([Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/LegacyPermissionManagerService;->lambda$revokeDefaultPermissionsFromLuiApps$2([Ljava/lang/String;I)V
-PLcom/android/server/pm/permission/LegacyPermissionManagerService;->revokeDefaultPermissionsFromDisabledTelephonyDataServices([Ljava/lang/String;I)V
+HSPLcom/android/server/pm/permission/LegacyPermissionManagerService;->revokeDefaultPermissionsFromDisabledTelephonyDataServices([Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/LegacyPermissionManagerService;->revokeDefaultPermissionsFromLuiApps([Ljava/lang/String;I)V
 HSPLcom/android/server/pm/permission/LegacyPermissionManagerService;->verifyCallerCanCheckAccess(Ljava/lang/String;Ljava/lang/String;II)V+]Lcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;Lcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;
 HSPLcom/android/server/pm/permission/LegacyPermissionSettings;-><init>(Ljava/lang/Object;)V
@@ -40752,9 +42251,9 @@
 PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;)V
 PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener$$ExternalSyntheticLambda0;->onUidImportance(II)V
 PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;)V
-PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener$$ExternalSyntheticLambda1;->onUidImportance(II)V
+HPLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener$$ExternalSyntheticLambda1;->onUidImportance(II)V
 PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;)V
-PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener$$ExternalSyntheticLambda2;->onUidImportance(II)V
+HPLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener$$ExternalSyntheticLambda2;->onUidImportance(II)V
 PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;)V
 PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener$$ExternalSyntheticLambda3;->run()V
 PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;)V
@@ -40763,17 +42262,19 @@
 PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->$r8$lambda$8Hh-Oj3hqrZSFdocWxdrEgK1TX4(Lcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;)V
 PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->$r8$lambda$TTLjw6A5ICjdF12BTXTpabkvY8A(Lcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;II)V
 PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->$r8$lambda$tf3rN6rdai1DXvX1firAgGaSfck(Lcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;)V
-PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->$r8$lambda$xxq78i0bJ6mCj3MuJ-ul6J_4Fp0(Lcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;II)V
+HPLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->$r8$lambda$xxq78i0bJ6mCj3MuJ-ul6J_4Fp0(Lcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;II)V
+PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->-$$Nest$mcancel(Lcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;)V
 PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;-><init>(Lcom/android/server/pm/permission/OneTimePermissionUserManager;ILjava/lang/String;JJII)V
 PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;-><init>(Lcom/android/server/pm/permission/OneTimePermissionUserManager;ILjava/lang/String;JJIILcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener-IA;)V
+PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->cancel()V
 PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->cancelAlarmLocked()V
 PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->lambda$new$0(II)V
 PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->lambda$new$1(II)V
-PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->lambda$new$2(II)V
+HPLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->lambda$new$2(II)V
 PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->lambda$onImportanceChanged$3()V
 PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->lambda$onPackageInactiveLocked$4()V
 PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->onAlarm()V
-PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->onImportanceChanged(II)V
+HPLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->onImportanceChanged(II)V
 PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->onPackageInactiveLocked()V
 PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->setAlarmLocked()V
 PLcom/android/server/pm/permission/OneTimePermissionUserManager$PackageInactivityListener;->updateSessionParameters(JJII)V
@@ -40800,7 +42301,7 @@
 HSPLcom/android/server/pm/permission/Permission;->findPermissionTree(Ljava/util/Collection;Ljava/lang/String;)Lcom/android/server/pm/permission/Permission;
 HSPLcom/android/server/pm/permission/Permission;->generatePermissionInfo(I)Landroid/content/pm/PermissionInfo;
 HSPLcom/android/server/pm/permission/Permission;->generatePermissionInfo(II)Landroid/content/pm/PermissionInfo;
-HPLcom/android/server/pm/permission/Permission;->getGroup()Ljava/lang/String;
+HSPLcom/android/server/pm/permission/Permission;->getGroup()Ljava/lang/String;
 HSPLcom/android/server/pm/permission/Permission;->getKnownCerts()Ljava/util/Set;
 HSPLcom/android/server/pm/permission/Permission;->getName()Ljava/lang/String;
 HSPLcom/android/server/pm/permission/Permission;->getPackageName()Ljava/lang/String;
@@ -40811,17 +42312,17 @@
 HSPLcom/android/server/pm/permission/Permission;->getRawGids()[I
 HSPLcom/android/server/pm/permission/Permission;->getType()I
 PLcom/android/server/pm/permission/Permission;->getUid()I
-PLcom/android/server/pm/permission/Permission;->hasGids()Z
+HSPLcom/android/server/pm/permission/Permission;->hasGids()Z
 HSPLcom/android/server/pm/permission/Permission;->isAppOp()Z
 HSPLcom/android/server/pm/permission/Permission;->isAppPredictor()Z
 HSPLcom/android/server/pm/permission/Permission;->isCompanion()Z
 HSPLcom/android/server/pm/permission/Permission;->isConfigurator()Z
 HSPLcom/android/server/pm/permission/Permission;->isDefinitionChanged()Z
-HSPLcom/android/server/pm/permission/Permission;->isDevelopment()Z
+HSPLcom/android/server/pm/permission/Permission;->isDevelopment()Z+]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;
 HSPLcom/android/server/pm/permission/Permission;->isDynamic()Z
-PLcom/android/server/pm/permission/Permission;->isHardOrSoftRestricted()Z
+HSPLcom/android/server/pm/permission/Permission;->isHardOrSoftRestricted()Z
 HSPLcom/android/server/pm/permission/Permission;->isHardRestricted()Z
-PLcom/android/server/pm/permission/Permission;->isImmutablyRestricted()Z
+HSPLcom/android/server/pm/permission/Permission;->isImmutablyRestricted()Z
 HSPLcom/android/server/pm/permission/Permission;->isIncidentReportApprover()Z
 HSPLcom/android/server/pm/permission/Permission;->isInstalled()Z
 HSPLcom/android/server/pm/permission/Permission;->isInstaller()Z
@@ -40831,7 +42332,7 @@
 HSPLcom/android/server/pm/permission/Permission;->isNormal()Z
 HSPLcom/android/server/pm/permission/Permission;->isOem()Z
 HSPLcom/android/server/pm/permission/Permission;->isOverridingSystemPermission(Lcom/android/server/pm/permission/Permission;Landroid/content/pm/PermissionInfo;Landroid/content/pm/PackageManagerInternal;)Z
-PLcom/android/server/pm/permission/Permission;->isPermission(Lcom/android/server/pm/pkg/component/ParsedPermission;)Z
+HSPLcom/android/server/pm/permission/Permission;->isPermission(Lcom/android/server/pm/pkg/component/ParsedPermission;)Z
 HSPLcom/android/server/pm/permission/Permission;->isPre23()Z
 HSPLcom/android/server/pm/permission/Permission;->isPreInstalled()Z
 HSPLcom/android/server/pm/permission/Permission;->isPrivileged()Z
@@ -40849,14 +42350,14 @@
 HSPLcom/android/server/pm/permission/Permission;->isVerifier()Z
 HSPLcom/android/server/pm/permission/Permission;->setDefinitionChanged(Z)V
 HSPLcom/android/server/pm/permission/Permission;->setGids([IZ)V
-PLcom/android/server/pm/permission/Permission;->setPermissionInfo(Landroid/content/pm/PermissionInfo;)V
+HSPLcom/android/server/pm/permission/Permission;->setPermissionInfo(Landroid/content/pm/PermissionInfo;)V
 HSPLcom/android/server/pm/permission/Permission;->updateDynamicPermission(Ljava/util/Collection;)V
 PLcom/android/server/pm/permission/PermissionManagerService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;)V
 PLcom/android/server/pm/permission/PermissionManagerService$$ExternalSyntheticLambda1;->apply(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/pm/permission/PermissionManagerService$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;)V
 PLcom/android/server/pm/permission/PermissionManagerService$$ExternalSyntheticLambda2;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/pm/permission/PermissionManagerService$AttributionSourceRegistry;-><init>(Landroid/content/Context;)V
-HPLcom/android/server/pm/permission/PermissionManagerService$AttributionSourceRegistry;->isRegisteredAttributionSource(Landroid/content/AttributionSource;)Z+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;
+HSPLcom/android/server/pm/permission/PermissionManagerService$AttributionSourceRegistry;->isRegisteredAttributionSource(Landroid/content/AttributionSource;)Z+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;
 HPLcom/android/server/pm/permission/PermissionManagerService$AttributionSourceRegistry;->registerAttributionSource(Landroid/content/AttributionSource;)V
 PLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;->-$$Nest$smfinishDataDelivery(Landroid/content/Context;ILandroid/content/AttributionSourceState;Z)V
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;-><clinit>()V
@@ -40864,16 +42365,16 @@
 HPLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;->checkAppOpPermission(Landroid/content/Context;Lcom/android/server/pm/permission/PermissionManagerServiceInternal;Ljava/lang/String;Landroid/content/AttributionSource;Ljava/lang/String;ZZ)I+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;
 HPLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;->checkOp(ILandroid/content/AttributionSourceState;Ljava/lang/String;ZZ)I
 HPLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;->checkOp(Landroid/content/Context;ILcom/android/server/pm/permission/PermissionManagerServiceInternal;Landroid/content/AttributionSource;Ljava/lang/String;ZZ)I
-HPLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;->checkPermission(Landroid/content/Context;Lcom/android/server/pm/permission/PermissionManagerServiceInternal;Ljava/lang/String;ILjava/util/Set;)Z+]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/util/Set;Landroid/util/ArraySet;,Ljava/util/Collections$EmptySet;]Lcom/android/server/pm/permission/PermissionManagerServiceInternal$HotwordDetectionServiceProvider;Lcom/android/server/voiceinteraction/HotwordDetectionConnection$6$$ExternalSyntheticLambda0;]Lcom/android/server/pm/permission/PermissionManagerServiceInternal;Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;
-HPLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;->checkPermission(Landroid/content/Context;Lcom/android/server/pm/permission/PermissionManagerServiceInternal;Ljava/lang/String;Landroid/content/AttributionSource;Ljava/lang/String;ZZZI)I+]Landroid/content/pm/PermissionInfo;Landroid/content/pm/PermissionInfo;]Landroid/content/AttributionSource;Landroid/content/AttributionSource;]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
-HPLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;->checkPermission(Ljava/lang/String;Landroid/content/AttributionSourceState;Ljava/lang/String;ZZZI)I
-HPLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;->checkRuntimePermission(Landroid/content/Context;Lcom/android/server/pm/permission/PermissionManagerServiceInternal;Ljava/lang/String;Landroid/content/AttributionSource;Ljava/lang/String;ZZZI)I+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;
+HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;->checkPermission(Landroid/content/Context;Lcom/android/server/pm/permission/PermissionManagerServiceInternal;Ljava/lang/String;ILjava/util/Set;)Z+]Lcom/android/server/pm/permission/PermissionManagerServiceInternal$HotwordDetectionServiceProvider;Lcom/android/server/voiceinteraction/HotwordDetectionConnection$6$$ExternalSyntheticLambda0;]Lcom/android/server/pm/permission/PermissionManagerServiceInternal;Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/util/Set;Landroid/util/ArraySet;,Ljava/util/Collections$EmptySet;
+HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;->checkPermission(Landroid/content/Context;Lcom/android/server/pm/permission/PermissionManagerServiceInternal;Ljava/lang/String;Landroid/content/AttributionSource;Ljava/lang/String;ZZZI)I+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;]Landroid/content/pm/PermissionInfo;Landroid/content/pm/PermissionInfo;]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
+HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;->checkPermission(Ljava/lang/String;Landroid/content/AttributionSourceState;Ljava/lang/String;ZZZI)I+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;]Lcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;Lcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;
+HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;->checkRuntimePermission(Landroid/content/Context;Lcom/android/server/pm/permission/PermissionManagerServiceInternal;Ljava/lang/String;Landroid/content/AttributionSource;Ljava/lang/String;ZZZI)I+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;]Ljava/util/concurrent/ConcurrentHashMap;Ljava/util/concurrent/ConcurrentHashMap;
 HPLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;->finishDataDelivery(ILandroid/content/AttributionSourceState;Z)V
 HPLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;->finishDataDelivery(Landroid/content/Context;ILandroid/content/AttributionSourceState;Z)V
-HPLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;->getAttributionChainId(ZLandroid/content/AttributionSource;)I+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
-HPLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;->performOpTransaction(Landroid/content/Context;ILandroid/content/AttributionSource;Ljava/lang/String;ZZZZZIIII)I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/AttributionSource;Landroid/content/AttributionSource;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
+HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;->getAttributionChainId(ZLandroid/content/AttributionSource;)I+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;
+HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;->performOpTransaction(Landroid/content/Context;ILandroid/content/AttributionSource;Ljava/lang/String;ZZZZZIIII)I+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
 PLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;->resolveAttributionFlags(Landroid/content/AttributionSource;Landroid/content/AttributionSource;ZZZZZ)I
-HPLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;->resolveAttributionSource(Landroid/content/Context;Landroid/content/AttributionSource;)Landroid/content/AttributionSource;+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;
+HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;->resolveAttributionSource(Landroid/content/Context;Landroid/content/AttributionSource;)Landroid/content/AttributionSource;+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;
 HPLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;->resolvePackageName(Landroid/content/Context;Landroid/content/AttributionSource;)Ljava/lang/String;+]Landroid/content/AttributionSource;Landroid/content/AttributionSource;
 PLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;->resolveProxiedAttributionFlags(Landroid/content/AttributionSource;Landroid/content/AttributionSource;ZZZZ)I
 PLcom/android/server/pm/permission/PermissionManagerService$PermissionCheckerService;->resolveProxyAttributionFlags(Landroid/content/AttributionSource;Landroid/content/AttributionSource;ZZZZ)I
@@ -40889,10 +42390,10 @@
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->getAppOpPermissionPackages(Ljava/lang/String;)[Ljava/lang/String;
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->getGidsForUid(I)[I+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->getGrantedPermissions(Ljava/lang/String;I)Ljava/util/Set;
-PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->getHotwordDetectionServiceProvider()Lcom/android/server/pm/permission/PermissionManagerServiceInternal$HotwordDetectionServiceProvider;
+HPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->getHotwordDetectionServiceProvider()Lcom/android/server/pm/permission/PermissionManagerServiceInternal$HotwordDetectionServiceProvider;
 HPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->getLegacyPermissionState(I)Lcom/android/server/pm/permission/LegacyPermissionState;+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
 PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->getLegacyPermissions()Ljava/util/List;
-PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->getPermissionGids(Ljava/lang/String;I)[I
+HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->getPermissionGids(Ljava/lang/String;I)[I
 PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->getPermissionTEMP(Ljava/lang/String;)Lcom/android/server/pm/permission/Permission;
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->isPermissionsReviewRequired(Ljava/lang/String;I)Z+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->onPackageAdded(Lcom/android/server/pm/parsing/pkg/AndroidPackage;ZLcom/android/server/pm/parsing/pkg/AndroidPackage;)V
@@ -40907,6 +42408,7 @@
 HSPLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->readLegacyPermissionsTEMP(Lcom/android/server/pm/permission/LegacyPermissionSettings;)V
 PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->resetRuntimePermissions(Lcom/android/server/pm/parsing/pkg/AndroidPackage;I)V
 PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->restoreDelayedRuntimePermissions(Ljava/lang/String;I)V
+PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->restoreRuntimePermissions([BI)V
 PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->setHotwordDetectionServiceProvider(Lcom/android/server/pm/permission/PermissionManagerServiceInternal$HotwordDetectionServiceProvider;)V
 PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->startShellPermissionIdentityDelegation(ILjava/lang/String;Ljava/util/List;)V
 PLcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;->stopShellPermissionIdentityDelegation()V
@@ -40934,27 +42436,28 @@
 PLcom/android/server/pm/permission/PermissionManagerService;->-$$Nest$sfgetsRunningAttributionSources()Ljava/util/concurrent/ConcurrentHashMap;
 HSPLcom/android/server/pm/permission/PermissionManagerService;-><clinit>()V
 HSPLcom/android/server/pm/permission/PermissionManagerService;-><init>(Landroid/content/Context;Landroid/util/ArrayMap;)V
-PLcom/android/server/pm/permission/PermissionManagerService;->addAllowlistedRestrictedPermission(Ljava/lang/String;Ljava/lang/String;II)Z
+HSPLcom/android/server/pm/permission/PermissionManagerService;->addAllowlistedRestrictedPermission(Ljava/lang/String;Ljava/lang/String;II)Z
 HSPLcom/android/server/pm/permission/PermissionManagerService;->addOnPermissionsChangeListener(Landroid/permission/IOnPermissionsChangeListener;)V+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
 PLcom/android/server/pm/permission/PermissionManagerService;->addPermission(Landroid/content/pm/PermissionInfo;Z)Z
 HSPLcom/android/server/pm/permission/PermissionManagerService;->checkPermission(Ljava/lang/String;Ljava/lang/String;I)I+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
 HSPLcom/android/server/pm/permission/PermissionManagerService;->checkUidPermission(ILjava/lang/String;)I+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
 HSPLcom/android/server/pm/permission/PermissionManagerService;->create(Landroid/content/Context;Landroid/util/ArrayMap;)Lcom/android/server/pm/permission/PermissionManagerServiceInternal;
-HPLcom/android/server/pm/permission/PermissionManagerService;->getAllPermissionGroups(I)Landroid/content/pm/ParceledListSlice;
+HSPLcom/android/server/pm/permission/PermissionManagerService;->getAllPermissionGroups(I)Landroid/content/pm/ParceledListSlice;
 PLcom/android/server/pm/permission/PermissionManagerService;->getAllUserIds()[I
-HPLcom/android/server/pm/permission/PermissionManagerService;->getAllowlistedRestrictedPermissions(Ljava/lang/String;II)Ljava/util/List;+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
+HSPLcom/android/server/pm/permission/PermissionManagerService;->getAllowlistedRestrictedPermissions(Ljava/lang/String;II)Ljava/util/List;+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
 PLcom/android/server/pm/permission/PermissionManagerService;->getOneTimePermissionUserManager(I)Lcom/android/server/pm/permission/OneTimePermissionUserManager;
 HSPLcom/android/server/pm/permission/PermissionManagerService;->getPermissionFlags(Ljava/lang/String;Ljava/lang/String;I)I+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
 HPLcom/android/server/pm/permission/PermissionManagerService;->getPermissionGroupInfo(Ljava/lang/String;I)Landroid/content/pm/PermissionGroupInfo;
 HSPLcom/android/server/pm/permission/PermissionManagerService;->getPermissionInfo(Ljava/lang/String;Ljava/lang/String;I)Landroid/content/pm/PermissionInfo;+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
 HSPLcom/android/server/pm/permission/PermissionManagerService;->getSplitPermissions()Ljava/util/List;
-PLcom/android/server/pm/permission/PermissionManagerService;->grantRuntimePermission(Ljava/lang/String;Ljava/lang/String;I)V
+HSPLcom/android/server/pm/permission/PermissionManagerService;->grantRuntimePermission(Ljava/lang/String;Ljava/lang/String;I)V
 HPLcom/android/server/pm/permission/PermissionManagerService;->isPermissionRevokedByPolicy(Ljava/lang/String;Ljava/lang/String;I)Z
-HPLcom/android/server/pm/permission/PermissionManagerService;->isRegisteredAttributionSource(Landroid/content/AttributionSourceState;)Z+]Lcom/android/server/pm/permission/PermissionManagerService$AttributionSourceRegistry;Lcom/android/server/pm/permission/PermissionManagerService$AttributionSourceRegistry;
-HPLcom/android/server/pm/permission/PermissionManagerService;->queryPermissionsByGroup(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
+HSPLcom/android/server/pm/permission/PermissionManagerService;->isRegisteredAttributionSource(Landroid/content/AttributionSourceState;)Z+]Lcom/android/server/pm/permission/PermissionManagerService$AttributionSourceRegistry;Lcom/android/server/pm/permission/PermissionManagerService$AttributionSourceRegistry;
+PLcom/android/server/pm/permission/PermissionManagerService;->killUid(IILjava/lang/String;)V
+HSPLcom/android/server/pm/permission/PermissionManagerService;->queryPermissionsByGroup(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
 HPLcom/android/server/pm/permission/PermissionManagerService;->registerAttributionSource(Landroid/content/AttributionSourceState;)V
 PLcom/android/server/pm/permission/PermissionManagerService;->removeAllowlistedRestrictedPermission(Ljava/lang/String;Ljava/lang/String;II)Z
-HPLcom/android/server/pm/permission/PermissionManagerService;->removeOnPermissionsChangeListener(Landroid/permission/IOnPermissionsChangeListener;)V+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
+HSPLcom/android/server/pm/permission/PermissionManagerService;->removeOnPermissionsChangeListener(Landroid/permission/IOnPermissionsChangeListener;)V+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
 PLcom/android/server/pm/permission/PermissionManagerService;->revokeRuntimePermission(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)V
 PLcom/android/server/pm/permission/PermissionManagerService;->setCheckPermissionDelegateLocked(Lcom/android/server/pm/permission/PermissionManagerService$CheckPermissionDelegate;)V
 HPLcom/android/server/pm/permission/PermissionManagerService;->shouldShowRequestPermissionRationale(Ljava/lang/String;Ljava/lang/String;I)Z
@@ -40962,7 +42465,7 @@
 PLcom/android/server/pm/permission/PermissionManagerService;->startShellPermissionIdentityDelegationInternal(ILjava/lang/String;Ljava/util/List;)V
 PLcom/android/server/pm/permission/PermissionManagerService;->stopOneTimePermissionSession(Ljava/lang/String;I)V
 PLcom/android/server/pm/permission/PermissionManagerService;->stopShellPermissionIdentityDelegationInternal()V
-HPLcom/android/server/pm/permission/PermissionManagerService;->updatePermissionFlags(Ljava/lang/String;Ljava/lang/String;IIZI)V+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
+HSPLcom/android/server/pm/permission/PermissionManagerService;->updatePermissionFlags(Ljava/lang/String;Ljava/lang/String;IIZI)V+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/Permission;ILcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback;)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda10;-><init>(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;[I)V
@@ -40972,9 +42475,11 @@
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda12;-><init>(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda12;->onInitialized(I)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda14;-><init>()V
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda14;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda14;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V+]Ljava/lang/Integer;Ljava/lang/Integer;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda15;-><init>(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;ILcom/android/server/pm/pkg/PackageStateInternal;)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda15;->test(Ljava/lang/Object;)Z
+PLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda16;-><init>(I)V
+PLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda16;->run()V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda17;-><init>(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/parsing/pkg/AndroidPackage;ZLjava/lang/String;Ljava/lang/String;Lcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback;)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda17;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/Permission;)V
@@ -40987,40 +42492,41 @@
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda5;-><init>(Ljava/util/concurrent/CompletableFuture;)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;)V
-PLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda7;-><init>(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;II)V
-HPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda7;->test(Ljava/lang/Object;)Z
-HPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;II)V
-HPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda8;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda7;-><init>(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;II)V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda7;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;II)V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda8;->test(Ljava/lang/Object;)Z
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda9;-><init>(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;I)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda9;->accept(Ljava/lang/Object;)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl$1$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/pm/permission/PermissionManagerServiceImpl$1;Ljava/lang/String;ILjava/lang/String;I)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl$1$$ExternalSyntheticLambda0;->run()V
-PLcom/android/server/pm/permission/PermissionManagerServiceImpl$1$$ExternalSyntheticLambda1;-><init>(II)V
-PLcom/android/server/pm/permission/PermissionManagerServiceImpl$1$$ExternalSyntheticLambda1;->run()V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$1$$ExternalSyntheticLambda1;-><init>(II)V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$1$$ExternalSyntheticLambda1;->run()V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl$1;->$r8$lambda$4ZU8kX3OTOWSR2BeFJXv4pmZczs(Lcom/android/server/pm/permission/PermissionManagerServiceImpl$1;Ljava/lang/String;ILjava/lang/String;I)V
-PLcom/android/server/pm/permission/PermissionManagerServiceImpl$1;->$r8$lambda$5Ix503j6rCPxSTiPe8XLMGU_n14(II)V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$1;->$r8$lambda$5Ix503j6rCPxSTiPe8XLMGU_n14(II)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$1;-><init>(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl$1;->isAppBackupAndRestoreRunning(I)Z
-PLcom/android/server/pm/permission/PermissionManagerServiceImpl$1;->lambda$onGidsChanged$0(II)V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$1;->lambda$onGidsChanged$0(II)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl$1;->lambda$onPermissionRevoked$1(Ljava/lang/String;ILjava/lang/String;I)V
-PLcom/android/server/pm/permission/PermissionManagerServiceImpl$1;->onGidsChanged(II)V
-PLcom/android/server/pm/permission/PermissionManagerServiceImpl$1;->onInstallPermissionGranted()V
-PLcom/android/server/pm/permission/PermissionManagerServiceImpl$1;->onInstallPermissionUpdated()V
-PLcom/android/server/pm/permission/PermissionManagerServiceImpl$1;->onInstallPermissionUpdatedNotifyListener(I)V
-PLcom/android/server/pm/permission/PermissionManagerServiceImpl$1;->onPermissionGranted(II)V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$1;->onGidsChanged(II)V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$1;->onInstallPermissionGranted()V
+PLcom/android/server/pm/permission/PermissionManagerServiceImpl$1;->onInstallPermissionRevoked()V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$1;->onInstallPermissionUpdated()V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$1;->onInstallPermissionUpdatedNotifyListener(I)V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$1;->onPermissionGranted(II)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl$1;->onPermissionRevoked(IILjava/lang/String;ZLjava/lang/String;)V
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$1;->onPermissionUpdated([IZ)V
-PLcom/android/server/pm/permission/PermissionManagerServiceImpl$1;->onPermissionUpdatedNotifyListener([IZI)V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$1;->onPermissionUpdated([IZ)V+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$1;->onPermissionUpdatedNotifyListener([IZI)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl$2;-><init>(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Landroid/util/ArraySet;Landroid/util/IntArray;Landroid/util/IntArray;[Z)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl$2;->onPermissionGranted(II)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl$2;->onPermissionUpdated([IZ)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl$2;->onPermissionUpdatedNotifyListener([IZI)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$OnPermissionChangeListeners;-><init>(Landroid/os/Looper;)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$OnPermissionChangeListeners;->addListener(Landroid/permission/IOnPermissionsChangeListener;)V
-PLcom/android/server/pm/permission/PermissionManagerServiceImpl$OnPermissionChangeListeners;->handleMessage(Landroid/os/Message;)V
-PLcom/android/server/pm/permission/PermissionManagerServiceImpl$OnPermissionChangeListeners;->handleOnPermissionsChanged(I)V
-PLcom/android/server/pm/permission/PermissionManagerServiceImpl$OnPermissionChangeListeners;->onPermissionsChanged(I)V
-HPLcom/android/server/pm/permission/PermissionManagerServiceImpl$OnPermissionChangeListeners;->removeListener(Landroid/permission/IOnPermissionsChangeListener;)V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$OnPermissionChangeListeners;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$OnPermissionChangeListeners;->handleOnPermissionsChanged(I)V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$OnPermissionChangeListeners;->onPermissionsChanged(I)V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$OnPermissionChangeListeners;->removeListener(Landroid/permission/IOnPermissionsChangeListener;)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback;-><init>()V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback;-><init>(Lcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback-IA;)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback;->onPermissionRevoked(IILjava/lang/String;Z)V
@@ -41028,11 +42534,12 @@
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->$r8$lambda$2JZ6cOq26AJajpFeaS6j04amPVU(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/parsing/pkg/AndroidPackage;ZLjava/lang/String;Ljava/lang/String;Lcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback;Lcom/android/server/pm/parsing/pkg/AndroidPackage;)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->$r8$lambda$2i8MJWknOO3Xzi-Dmmn7HMNkzAQ(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Ljava/lang/String;I)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->$r8$lambda$4u2QWelaTGuecl4HjPzdjIjmCyg(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/parsing/pkg/AndroidPackage;)V
-PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->$r8$lambda$7WgQB2l-zF1LgAskn3cy3fOfXEs(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;IILandroid/content/pm/PermissionGroupInfo;)Z
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->$r8$lambda$7WgQB2l-zF1LgAskn3cy3fOfXEs(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;IILandroid/content/pm/PermissionGroupInfo;)Z
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->$r8$lambda$9dPWxo6iDFQXF5swiCM_yXHc1rw(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/Permission;ILcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback;Lcom/android/server/pm/parsing/pkg/AndroidPackage;)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->$r8$lambda$Cqg557oz5jQY7E6Moqn0GVMHt9E(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;[ILcom/android/server/pm/pkg/PackageStateInternal;)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->$r8$lambda$Lgvd0Whnqtu_FVlFe0bfes0xshE(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;[ILcom/android/server/pm/PackageSetting;)V
-HPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->$r8$lambda$Rf3Wjv7UVGe9aF693BUaNb76f_k(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;IILandroid/content/pm/PermissionInfo;)Z
+PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->$r8$lambda$NVbOYMmIwoeuYtq97s-vsQDJ39U(I)V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->$r8$lambda$Rf3Wjv7UVGe9aF693BUaNb76f_k(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;IILandroid/content/pm/PermissionInfo;)Z
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->$r8$lambda$UN0c7yry1k0Rf9NjYGY1qBF9kfU(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;I)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->$r8$lambda$ZCzj4mjbXOZDt_HBw0yQnGO_Uuo(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;ILcom/android/server/pm/pkg/PackageStateInternal;Ljava/lang/String;)Z
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->$r8$lambda$cAusQ8uHVJo298pgZGr7uWxqjj0(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;ILjava/lang/Boolean;)V
@@ -41041,15 +42548,15 @@
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->$r8$lambda$zdt_GGSqrQVTqFqOtfqtId1V_Sk(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;[ILjava/lang/String;ZILcom/android/server/pm/parsing/pkg/AndroidPackage;)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->-$$Nest$fgetmContext(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;)Landroid/content/Context;
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->-$$Nest$fgetmDefaultPermissionCallback(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;)Lcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback;
-PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->-$$Nest$fgetmHandler(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;)Landroid/os/Handler;
-PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->-$$Nest$fgetmOnPermissionChangeListeners(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;)Lcom/android/server/pm/permission/PermissionManagerServiceImpl$OnPermissionChangeListeners;
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->-$$Nest$fgetmHandler(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;)Landroid/os/Handler;
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->-$$Nest$fgetmOnPermissionChangeListeners(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;)Lcom/android/server/pm/permission/PermissionManagerServiceImpl$OnPermissionChangeListeners;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->-$$Nest$fgetmPackageManagerInt(Lcom/android/server/pm/permission/PermissionManagerServiceImpl;)Landroid/content/pm/PackageManagerInternal;
-PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->-$$Nest$smkillUid(IILjava/lang/String;)V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->-$$Nest$smkillUid(IILjava/lang/String;)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;-><clinit>()V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;-><init>(Landroid/content/Context;Landroid/util/ArrayMap;)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->addAllPermissionGroupsInternal(Lcom/android/server/pm/parsing/pkg/AndroidPackage;)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->addAllPermissionsInternal(Lcom/android/server/pm/parsing/pkg/AndroidPackage;)Ljava/util/List;
-PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->addAllowlistedRestrictedPermission(Ljava/lang/String;Ljava/lang/String;II)Z
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->addAllowlistedRestrictedPermission(Ljava/lang/String;Ljava/lang/String;II)Z
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->addAllowlistedRestrictedPermissionsInternal(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Ljava/util/List;II)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->addOnPermissionsChangeListener(Landroid/permission/IOnPermissionsChangeListener;)V+]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl$OnPermissionChangeListeners;Lcom/android/server/pm/permission/PermissionManagerServiceImpl$OnPermissionChangeListeners;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->addOnRuntimePermissionStateChangedListener(Lcom/android/server/pm/permission/PermissionManagerServiceInternal$OnRuntimePermissionStateChangedListener;)V
@@ -41059,7 +42566,7 @@
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->canGrantOemPermission(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Ljava/lang/String;)Z
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->checkCallingOrSelfPermission(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->checkCrossUserPermission(IIIZ)Z+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
-HPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->checkExistsAndEnforceCannotModifyImmutablyRestrictedPermission(Ljava/lang/String;)Z
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->checkExistsAndEnforceCannotModifyImmutablyRestrictedPermission(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->checkIfLegacyStorageOpsNeedToBeUpdated(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Z[I[I)[I
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->checkPermission(Ljava/lang/String;Ljava/lang/String;I)I+]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->checkPermissionInternal(Lcom/android/server/pm/parsing/pkg/AndroidPackage;ZLjava/lang/String;I)I+]Lcom/android/server/pm/pkg/AndroidPackageApi;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Ljava/util/Map;Ljava/util/HashMap;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
@@ -41071,27 +42578,27 @@
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->doNotifyRuntimePermissionStateChanged(Ljava/lang/String;I)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/pm/permission/PermissionManagerServiceInternal$OnRuntimePermissionStateChangedListener;Lcom/android/server/policy/PermissionPolicyService$$ExternalSyntheticLambda0;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->enforceCrossUserPermission(IIZZLjava/lang/String;)V+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->enforceGrantRevokeGetRuntimePermissionPermissions(Ljava/lang/String;)V+]Landroid/content/Context;Landroid/app/ContextImpl;
-HPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->enforceGrantRevokeRuntimePermissionPermissions(Ljava/lang/String;)V+]Landroid/content/Context;Landroid/app/ContextImpl;
-HPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->enforceShellRestriction(Ljava/lang/String;II)V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->enforceGrantRevokeRuntimePermissionPermissions(Ljava/lang/String;)V+]Landroid/content/Context;Landroid/app/ContextImpl;
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->enforceShellRestriction(Ljava/lang/String;II)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getAllAppOpPermissionPackages()Ljava/util/Map;
-HPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getAllPermissionGroups(I)Ljava/util/List;
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getAllPermissionGroups(I)Ljava/util/List;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getAllPermissionsWithProtection(I)Ljava/util/ArrayList;+]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Lcom/android/server/pm/permission/PermissionRegistry;Lcom/android/server/pm/permission/PermissionRegistry;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getAllPermissionsWithProtectionFlags(I)Ljava/util/ArrayList;
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getAllUserIds()[I
-HPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getAllowlistedRestrictedPermissions(Ljava/lang/String;II)Ljava/util/List;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
-HPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getAllowlistedRestrictedPermissionsInternal(Lcom/android/server/pm/parsing/pkg/AndroidPackage;II)Ljava/util/List;+]Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getAllUserIds()[I+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getAllowlistedRestrictedPermissions(Ljava/lang/String;II)Ljava/util/List;+]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getAllowlistedRestrictedPermissionsInternal(Lcom/android/server/pm/parsing/pkg/AndroidPackage;II)Ljava/util/List;+]Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getAppOpPermissionPackages(Ljava/lang/String;)[Ljava/lang/String;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getAppOpPermissionPackagesInternal(Ljava/lang/String;)[Ljava/lang/String;
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getGidsForUid(I)[I+]Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getGidsForUid(I)[I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getGrantedPermissions(Ljava/lang/String;I)Ljava/util/Set;
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getGrantedPermissionsInternal(Ljava/lang/String;I)Ljava/util/Set;+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;,Lcom/android/server/pm/pkg/PackageUserStateDefault;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Ljava/util/Set;Landroid/util/ArraySet;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getGrantedPermissionsInternal(Ljava/lang/String;I)Ljava/util/Set;+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;,Lcom/android/server/pm/pkg/PackageUserStateDefault;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Ljava/util/Set;Landroid/util/ArraySet;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getLegacyPermissionState(I)Lcom/android/server/pm/permission/LegacyPermissionState;+]Lcom/android/server/pm/permission/DevicePermissionState;Lcom/android/server/pm/permission/DevicePermissionState;]Lcom/android/server/pm/permission/LegacyPermissionState;Lcom/android/server/pm/permission/LegacyPermissionState;]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;]Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Lcom/android/server/pm/permission/PermissionState;Lcom/android/server/pm/permission/PermissionState;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getLegacyPermissions()Ljava/util/List;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getPermissionFlags(Ljava/lang/String;Ljava/lang/String;I)I+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getPermissionFlagsInternal(Ljava/lang/String;Ljava/lang/String;II)I+]Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;]Lcom/android/server/pm/permission/PermissionRegistry;Lcom/android/server/pm/permission/PermissionRegistry;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
-PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getPermissionGids(Ljava/lang/String;I)[I
-PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getPermissionGidsInternal(Ljava/lang/String;I)[I
-HPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getPermissionGroupInfo(Ljava/lang/String;I)Landroid/content/pm/PermissionGroupInfo;
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getPermissionGids(Ljava/lang/String;I)[I
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getPermissionGidsInternal(Ljava/lang/String;I)[I
+HPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getPermissionGroupInfo(Ljava/lang/String;I)Landroid/content/pm/PermissionGroupInfo;+]Lcom/android/server/pm/permission/PermissionRegistry;Lcom/android/server/pm/permission/PermissionRegistry;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getPermissionInfo(Ljava/lang/String;Ljava/lang/String;I)Landroid/content/pm/PermissionInfo;+]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;]Lcom/android/server/pm/permission/PermissionRegistry;Lcom/android/server/pm/permission/PermissionRegistry;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getPermissionInfoCallingTargetSdkVersion(Lcom/android/server/pm/parsing/pkg/AndroidPackage;I)I
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getPermissionTEMP(Ljava/lang/String;)Lcom/android/server/pm/permission/Permission;
@@ -41102,10 +42609,10 @@
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getUidStateLocked(II)Lcom/android/server/pm/permission/UidPermissionState;+]Lcom/android/server/pm/permission/DevicePermissionState;Lcom/android/server/pm/permission/DevicePermissionState;]Lcom/android/server/pm/permission/UserPermissionState;Lcom/android/server/pm/permission/UserPermissionState;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getUidStateLocked(Lcom/android/server/pm/parsing/pkg/AndroidPackage;I)Lcom/android/server/pm/permission/UidPermissionState;+]Lcom/android/server/pm/pkg/AndroidPackageApi;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getUidStateLocked(Lcom/android/server/pm/pkg/PackageStateInternal;I)Lcom/android/server/pm/permission/UidPermissionState;+]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getVolumeUuidForPackage(Lcom/android/server/pm/parsing/pkg/AndroidPackage;)Ljava/lang/String;
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->getVolumeUuidForPackage(Lcom/android/server/pm/parsing/pkg/AndroidPackage;)Ljava/lang/String;+]Lcom/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->grantRequestedRuntimePermissionsInternal(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Ljava/util/List;I)V
-PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->grantRuntimePermission(Ljava/lang/String;Ljava/lang/String;I)V
-HPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->grantRuntimePermissionInternal(Ljava/lang/String;Ljava/lang/String;ZIILcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback;)V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->grantRuntimePermission(Ljava/lang/String;Ljava/lang/String;I)V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->grantRuntimePermissionInternal(Ljava/lang/String;Ljava/lang/String;ZIILcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback;)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->hasPermission(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Ljava/lang/String;)Z
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->inheritPermissionStateToNewImplicitPermissionLocked(Landroid/util/ArraySet;Ljava/lang/String;Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/parsing/pkg/AndroidPackage;)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->isCompatPlatformPermissionForPackage(Ljava/lang/String;Lcom/android/server/pm/parsing/pkg/AndroidPackage;)Z
@@ -41116,23 +42623,24 @@
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->isPermissionSplitFromNonRuntime(Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->isPermissionsReviewRequired(Ljava/lang/String;I)Z+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->isPermissionsReviewRequiredInternal(Ljava/lang/String;I)Z+]Lcom/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
-PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->killUid(IILjava/lang/String;)V
-HPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->lambda$getAllPermissionGroups$0(IILandroid/content/pm/PermissionGroupInfo;)Z
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->killUid(IILjava/lang/String;)V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->lambda$getAllPermissionGroups$0(IILandroid/content/pm/PermissionGroupInfo;)Z
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->lambda$getGrantedPermissionsInternal$7(ILcom/android/server/pm/pkg/PackageStateInternal;Ljava/lang/String;)Z
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->lambda$onPackageAddedInternal$15(ZLcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/AndroidPackage;ZLjava/util/List;)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->lambda$onSystemReady$12(I)V
-HPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->lambda$queryPermissionsByGroup$1(IILandroid/content/pm/PermissionInfo;)Z
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->lambda$queryPermissionsByGroup$1(IILandroid/content/pm/PermissionInfo;)Z
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->lambda$readLegacyPermissionStateTEMP$13([ILcom/android/server/pm/pkg/PackageStateInternal;)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->lambda$restoreDelayedRuntimePermissions$4(ILjava/lang/Boolean;)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->lambda$revokeRuntimePermissionsIfGroupChangedInternal$5([ILjava/lang/String;Lcom/android/server/pm/parsing/pkg/AndroidPackage;Ljava/lang/String;Ljava/lang/String;ILcom/android/server/pm/parsing/pkg/AndroidPackage;)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->lambda$revokeRuntimePermissionsIfPermissionDefinitionChangedInternal$6([ILjava/lang/String;ZILcom/android/server/pm/parsing/pkg/AndroidPackage;)V
+PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->lambda$revokeSharedUserPermissionsForLeavingPackageInternal$8(I)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->lambda$updatePermissionSourcePackage$10(Lcom/android/server/pm/permission/Permission;ILcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback;Lcom/android/server/pm/parsing/pkg/AndroidPackage;)V
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->lambda$updatePermissionSourcePackage$11(Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/parsing/pkg/AndroidPackage;)V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->lambda$updatePermissionSourcePackage$11(Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/parsing/pkg/AndroidPackage;)V+]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;]Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->lambda$updatePermissions$9(Lcom/android/server/pm/parsing/pkg/AndroidPackage;ZLjava/lang/String;Ljava/lang/String;Lcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback;Lcom/android/server/pm/parsing/pkg/AndroidPackage;)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->lambda$writeLegacyPermissionStateTEMP$14([ILcom/android/server/pm/PackageSetting;)V+]Lcom/android/server/pm/permission/DevicePermissionState;Lcom/android/server/pm/permission/DevicePermissionState;]Lcom/android/server/pm/permission/LegacyPermissionState;Lcom/android/server/pm/permission/LegacyPermissionState;]Lcom/android/server/pm/pkg/SharedUserApi;Lcom/android/server/pm/SharedUserSetting;]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;]Lcom/android/server/pm/PackageSetting;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;]Lcom/android/server/pm/permission/UserPermissionState;Lcom/android/server/pm/permission/UserPermissionState;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Lcom/android/server/pm/permission/PermissionState;Lcom/android/server/pm/permission/PermissionState;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->logPermission(ILjava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->mayManageRolePermission(I)Z
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->notifyRuntimePermissionStateChanged(Ljava/lang/String;I)V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->logPermission(ILjava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->mayManageRolePermission(I)Z
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->notifyRuntimePermissionStateChanged(Ljava/lang/String;I)V+]Landroid/os/Handler;Landroid/os/Handler;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->onPackageAdded(Lcom/android/server/pm/parsing/pkg/AndroidPackage;ZLcom/android/server/pm/parsing/pkg/AndroidPackage;)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->onPackageAddedInternal(Lcom/android/server/pm/parsing/pkg/AndroidPackage;ZLcom/android/server/pm/parsing/pkg/AndroidPackage;)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->onPackageInstalled(Lcom/android/server/pm/parsing/pkg/AndroidPackage;ILcom/android/server/pm/permission/PermissionManagerServiceInternal$PackageInstalledParams;I)V
@@ -41145,18 +42653,19 @@
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->onSystemReady()V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->onUserCreated(I)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->onUserRemoved(I)V
-HPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->queryPermissionsByGroup(Ljava/lang/String;I)Ljava/util/List;+]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/permission/PermissionRegistry;Lcom/android/server/pm/permission/PermissionRegistry;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->queryPermissionsByGroup(Ljava/lang/String;I)Ljava/util/List;+]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/permission/PermissionRegistry;Lcom/android/server/pm/permission/PermissionRegistry;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->readLegacyPermissionStateTEMP()V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->readLegacyPermissionStatesLocked(Lcom/android/server/pm/permission/UidPermissionState;Ljava/util/Collection;)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->readLegacyPermissionsTEMP(Lcom/android/server/pm/permission/LegacyPermissionSettings;)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->removeAllPermissionsInternal(Lcom/android/server/pm/parsing/pkg/AndroidPackage;)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->removeAllowlistedRestrictedPermission(Ljava/lang/String;Ljava/lang/String;II)Z
-HPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->removeOnPermissionsChangeListener(Landroid/permission/IOnPermissionsChangeListener;)V+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl$OnPermissionChangeListeners;Lcom/android/server/pm/permission/PermissionManagerServiceImpl$OnPermissionChangeListeners;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->removeOnPermissionsChangeListener(Landroid/permission/IOnPermissionsChangeListener;)V+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl$OnPermissionChangeListeners;Lcom/android/server/pm/permission/PermissionManagerServiceImpl$OnPermissionChangeListeners;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->removeUidStateAndResetPackageInstallPermissionsFixed(ILjava/lang/String;I)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->resetRuntimePermissions(Lcom/android/server/pm/parsing/pkg/AndroidPackage;I)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->resetRuntimePermissionsInternal(Lcom/android/server/pm/parsing/pkg/AndroidPackage;I)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->restoreDelayedRuntimePermissions(Ljava/lang/String;I)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->restorePermissionState(Lcom/android/server/pm/parsing/pkg/AndroidPackage;ZLjava/lang/String;Lcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback;I)V+]Lcom/android/server/policy/PermissionPolicyInternal;Lcom/android/server/policy/PermissionPolicyService$Internal;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback;Lcom/android/server/pm/permission/PermissionManagerServiceImpl$1;]Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/AndroidPackageApi;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Ljava/util/Collection;Ljava/util/Collections$EmptyList;,Landroid/util/ArraySet;,Ljava/util/ArrayList;]Lcom/android/server/pm/permission/PermissionState;Lcom/android/server/pm/permission/PermissionState;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/pkg/PackageStateUnserialized;Lcom/android/server/pm/pkg/PackageStateUnserialized;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/permission/DevicePermissionState;Lcom/android/server/pm/permission/DevicePermissionState;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;]Lcom/android/server/pm/permission/UserPermissionState;Lcom/android/server/pm/permission/UserPermissionState;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Lcom/android/server/pm/permission/PermissionRegistry;Lcom/android/server/pm/permission/PermissionRegistry;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;,Ljava/util/Collections$EmptyIterator;]Landroid/permission/PermissionManager$SplitPermissionInfo;Landroid/permission/PermissionManager$SplitPermissionInfo;
+PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->restoreRuntimePermissions([BI)V
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->revokePermissionFromPackageForUser(Ljava/lang/String;Ljava/lang/String;ZILcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback;)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->revokePermissionsNoLongerImplicitLocked(Lcom/android/server/pm/permission/UidPermissionState;Ljava/lang/String;Ljava/util/Collection;II[I)[I+]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;]Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;]Ljava/util/Collection;Ljava/util/Collections$EmptyList;,Landroid/util/ArraySet;,Ljava/util/ArrayList;]Lcom/android/server/pm/permission/PermissionRegistry;Lcom/android/server/pm/permission/PermissionRegistry;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;,Ljava/util/Collections$EmptyIterator;]Ljava/util/Set;Landroid/util/ArraySet;,Ljava/util/Collections$EmptySet;
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->revokeRuntimePermission(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)V
@@ -41167,16 +42676,16 @@
 PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->revokeSharedUserPermissionsForLeavingPackageInternal(Lcom/android/server/pm/parsing/pkg/AndroidPackage;ILjava/util/List;I)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->revokeStoragePermissionsIfScopeExpandedInternal(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/parsing/pkg/AndroidPackage;)V
 HPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->revokeUnusedSharedUserPermissionsLocked(Ljava/util/Collection;Lcom/android/server/pm/permission/UidPermissionState;)Z
-PLcom/android/server/pm/permission/PermissionManagerServiceImpl;->setAllowlistedRestrictedPermissions(Ljava/lang/String;Ljava/util/List;II)Z
-HPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->setAllowlistedRestrictedPermissionsInternal(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Ljava/util/List;II)V
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->setInitialGrantForNewImplicitPermissionsLocked(Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/parsing/pkg/AndroidPackage;Landroid/util/ArraySet;I[I)[I+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/permission/PermissionManager$SplitPermissionInfo;Landroid/permission/PermissionManager$SplitPermissionInfo;]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;]Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;]Lcom/android/server/pm/permission/PermissionRegistry;Lcom/android/server/pm/permission/PermissionRegistry;]Ljava/util/Set;Landroid/util/ArraySet;
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->setAllowlistedRestrictedPermissions(Ljava/lang/String;Ljava/util/List;II)Z
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->setAllowlistedRestrictedPermissionsInternal(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Ljava/util/List;II)V
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->setInitialGrantForNewImplicitPermissionsLocked(Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/parsing/pkg/AndroidPackage;Landroid/util/ArraySet;I[I)[I+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;]Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/permission/PermissionRegistry;Lcom/android/server/pm/permission/PermissionRegistry;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/permission/PermissionManager$SplitPermissionInfo;Landroid/permission/PermissionManager$SplitPermissionInfo;]Ljava/util/Set;Landroid/util/ArraySet;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->shouldGrantPermissionByProtectionFlags(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/permission/Permission;Landroid/util/ArraySet;)Z+]Lcom/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/AndroidPackageApi;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/pkg/PackageStateUnserialized;Lcom/android/server/pm/pkg/PackageStateUnserialized;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/pm/SigningDetails;Landroid/content/pm/SigningDetails;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->shouldGrantPermissionBySignature(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Lcom/android/server/pm/permission/Permission;)Z+]Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/pm/SigningDetails;Landroid/content/pm/SigningDetails;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->shouldShowRequestPermissionRationale(Ljava/lang/String;Ljava/lang/String;I)Z
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->updateAllPermissions(Ljava/lang/String;Z)V
-HPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->updatePermissionFlags(Ljava/lang/String;Ljava/lang/String;IIZI)V+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Landroid/content/Context;Landroid/app/ContextImpl;
-HPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->updatePermissionFlagsInternal(Ljava/lang/String;Ljava/lang/String;IIIIZLcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback;)V+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback;Lcom/android/server/pm/permission/PermissionManagerServiceImpl$1;,Lcom/android/server/pm/permission/PermissionManagerServiceImpl$2;]Lcom/android/server/pm/pkg/AndroidPackageApi;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;]Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/permission/PermissionRegistry;Lcom/android/server/pm/permission/PermissionRegistry;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->updatePermissionSourcePackage(Ljava/lang/String;Lcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback;)Z+]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Lcom/android/server/pm/permission/PermissionRegistry;Lcom/android/server/pm/permission/PermissionRegistry;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Ljava/util/Set;Landroid/util/ArraySet;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->updatePermissionFlags(Ljava/lang/String;Ljava/lang/String;IIZI)V+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Landroid/content/Context;Landroid/app/ContextImpl;
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->updatePermissionFlagsInternal(Ljava/lang/String;Ljava/lang/String;IIIIZLcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback;)V+]Lcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback;Lcom/android/server/pm/permission/PermissionManagerServiceImpl$2;,Lcom/android/server/pm/permission/PermissionManagerServiceImpl$1;]Lcom/android/server/pm/pkg/AndroidPackageApi;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;]Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;]Ljava/util/List;Ljava/util/ArrayList;,Ljava/util/Collections$EmptyList;]Lcom/android/server/pm/permission/PermissionRegistry;Lcom/android/server/pm/permission/PermissionRegistry;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->updatePermissionSourcePackage(Ljava/lang/String;Lcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback;)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Lcom/android/server/pm/permission/PermissionRegistry;Lcom/android/server/pm/permission/PermissionRegistry;]Lcom/android/server/pm/permission/PermissionManagerServiceImpl;Lcom/android/server/pm/permission/PermissionManagerServiceImpl;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Ljava/util/Set;Landroid/util/ArraySet;
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->updatePermissionTreeSourcePackage(Ljava/lang/String;Lcom/android/server/pm/parsing/pkg/AndroidPackage;)Z
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->updatePermissions(Ljava/lang/String;Lcom/android/server/pm/parsing/pkg/AndroidPackage;)V
 HSPLcom/android/server/pm/permission/PermissionManagerServiceImpl;->updatePermissions(Ljava/lang/String;Lcom/android/server/pm/parsing/pkg/AndroidPackage;Ljava/lang/String;ILcom/android/server/pm/permission/PermissionManagerServiceImpl$PermissionCallback;)V
@@ -41194,7 +42703,7 @@
 PLcom/android/server/pm/permission/PermissionManagerServiceInternal$PackageInstalledParams;->getAutoRevokePermissionsMode()I
 PLcom/android/server/pm/permission/PermissionManagerServiceInternal$PackageInstalledParams;->getGrantedPermissions()Ljava/util/List;
 HSPLcom/android/server/pm/permission/PermissionRegistry;-><init>()V
-HSPLcom/android/server/pm/permission/PermissionRegistry;->addAppOpPermissionPackage(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/pm/permission/PermissionRegistry;->addAppOpPermissionPackage(Ljava/lang/String;Ljava/lang/String;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/pm/permission/PermissionRegistry;->addPermission(Lcom/android/server/pm/permission/Permission;)V
 HSPLcom/android/server/pm/permission/PermissionRegistry;->addPermissionGroup(Lcom/android/server/pm/pkg/component/ParsedPermissionGroup;)V
 HSPLcom/android/server/pm/permission/PermissionRegistry;->addPermissionTree(Lcom/android/server/pm/permission/Permission;)V
@@ -41202,8 +42711,8 @@
 PLcom/android/server/pm/permission/PermissionRegistry;->getAllAppOpPermissionPackages()Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/permission/PermissionRegistry;->getAppOpPermissionPackages(Ljava/lang/String;)Landroid/util/ArraySet;
 HSPLcom/android/server/pm/permission/PermissionRegistry;->getPermission(Ljava/lang/String;)Lcom/android/server/pm/permission/Permission;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
-HSPLcom/android/server/pm/permission/PermissionRegistry;->getPermissionGroup(Ljava/lang/String;)Lcom/android/server/pm/pkg/component/ParsedPermissionGroup;
-PLcom/android/server/pm/permission/PermissionRegistry;->getPermissionGroups()Ljava/util/Collection;
+HSPLcom/android/server/pm/permission/PermissionRegistry;->getPermissionGroup(Ljava/lang/String;)Lcom/android/server/pm/pkg/component/ParsedPermissionGroup;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
+HSPLcom/android/server/pm/permission/PermissionRegistry;->getPermissionGroups()Ljava/util/Collection;
 HSPLcom/android/server/pm/permission/PermissionRegistry;->getPermissionTree(Ljava/lang/String;)Lcom/android/server/pm/permission/Permission;
 HSPLcom/android/server/pm/permission/PermissionRegistry;->getPermissionTrees()Ljava/util/Collection;
 HSPLcom/android/server/pm/permission/PermissionRegistry;->getPermissions()Ljava/util/Collection;
@@ -41211,7 +42720,7 @@
 HSPLcom/android/server/pm/permission/PermissionRegistry;->removePermission(Ljava/lang/String;)V
 HSPLcom/android/server/pm/permission/PermissionState;-><init>(Lcom/android/server/pm/permission/Permission;)V
 HPLcom/android/server/pm/permission/PermissionState;-><init>(Lcom/android/server/pm/permission/PermissionState;)V
-HSPLcom/android/server/pm/permission/PermissionState;->computeGids(I)[I
+HSPLcom/android/server/pm/permission/PermissionState;->computeGids(I)[I+]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;
 HSPLcom/android/server/pm/permission/PermissionState;->getFlags()I
 HSPLcom/android/server/pm/permission/PermissionState;->getName()Ljava/lang/String;+]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;
 HSPLcom/android/server/pm/permission/PermissionState;->getPermission()Lcom/android/server/pm/permission/Permission;
@@ -41236,11 +42745,11 @@
 HSPLcom/android/server/pm/permission/UidPermissionState;->isPermissionGranted(Ljava/lang/String;)Z+]Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;]Lcom/android/server/pm/permission/PermissionState;Lcom/android/server/pm/permission/PermissionState;
 PLcom/android/server/pm/permission/UidPermissionState;->isPermissionsReviewRequired()Z
 HSPLcom/android/server/pm/permission/UidPermissionState;->putPermissionState(Lcom/android/server/pm/permission/Permission;ZI)V
-HSPLcom/android/server/pm/permission/UidPermissionState;->removePermissionState(Ljava/lang/String;)Z
+HSPLcom/android/server/pm/permission/UidPermissionState;->removePermissionState(Ljava/lang/String;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/permission/UidPermissionState;->reset()V
 HSPLcom/android/server/pm/permission/UidPermissionState;->revokePermission(Lcom/android/server/pm/permission/Permission;)Z
 HSPLcom/android/server/pm/permission/UidPermissionState;->setMissing(Z)V
-HSPLcom/android/server/pm/permission/UidPermissionState;->updatePermissionFlags(Lcom/android/server/pm/permission/Permission;II)Z+]Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;]Lcom/android/server/pm/permission/PermissionState;Lcom/android/server/pm/permission/PermissionState;]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;
+HSPLcom/android/server/pm/permission/UidPermissionState;->updatePermissionFlags(Lcom/android/server/pm/permission/Permission;II)Z+]Lcom/android/server/pm/permission/Permission;Lcom/android/server/pm/permission/Permission;]Lcom/android/server/pm/permission/UidPermissionState;Lcom/android/server/pm/permission/UidPermissionState;]Lcom/android/server/pm/permission/PermissionState;Lcom/android/server/pm/permission/PermissionState;
 HSPLcom/android/server/pm/permission/UserPermissionState;-><init>()V
 HSPLcom/android/server/pm/permission/UserPermissionState;->areInstallPermissionsFixed(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/permission/UserPermissionState;->checkAppId(I)V
@@ -41250,7 +42759,7 @@
 HSPLcom/android/server/pm/permission/UserPermissionState;->setInstallPermissionsFixed(Ljava/lang/String;Z)V
 HSPLcom/android/server/pm/pkg/PackageStateInternal;->getUserStateOrDefault(I)Lcom/android/server/pm/pkg/PackageUserStateInternal;+]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/pm/pkg/PackageStateUnserialized$$ExternalSyntheticLambda0;-><init>()V
-PLcom/android/server/pm/pkg/PackageStateUnserialized$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/pm/pkg/PackageStateUnserialized$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
 PLcom/android/server/pm/pkg/PackageStateUnserialized;->$r8$lambda$NOe4IykUj3ZbTnY-JER9obdI6AE(Landroid/content/pm/SharedLibraryInfo;)Z
 HSPLcom/android/server/pm/pkg/PackageStateUnserialized;-><init>(Lcom/android/server/pm/PackageSetting;)V
 HSPLcom/android/server/pm/pkg/PackageStateUnserialized;->getLastPackageUsageTimeInMills()[J+]Lcom/android/server/pm/pkg/PackageStateUnserialized;Lcom/android/server/pm/pkg/PackageStateUnserialized;
@@ -41275,6 +42784,7 @@
 HSPLcom/android/server/pm/pkg/PackageStateUtils;->isEnabledAndMatches(Lcom/android/server/pm/pkg/PackageStateInternal;Landroid/content/pm/ComponentInfo;JI)Z+]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/pkg/PackageStateUtils;->isEnabledAndMatches(Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/pkg/component/ParsedMainComponent;JI)Z+]Lcom/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/pkg/PackageStateUtils;->isMatch(Lcom/android/server/pm/pkg/PackageState;J)Z
+PLcom/android/server/pm/pkg/PackageStateUtils;->queryInstalledUsers(Lcom/android/server/pm/pkg/PackageStateInternal;[IZ)[I
 HSPLcom/android/server/pm/pkg/PackageUserState;-><clinit>()V
 HSPLcom/android/server/pm/pkg/PackageUserStateDefault;-><init>()V
 HSPLcom/android/server/pm/pkg/PackageUserStateDefault;->getAllOverlayPaths()Landroid/content/pm/overlay/OverlayPaths;
@@ -41288,11 +42798,13 @@
 HSPLcom/android/server/pm/pkg/PackageUserStateDefault;->getFirstInstallTime()J
 HSPLcom/android/server/pm/pkg/PackageUserStateDefault;->getHarmfulAppWarning()Ljava/lang/String;
 HSPLcom/android/server/pm/pkg/PackageUserStateDefault;->getInstallReason()I
-PLcom/android/server/pm/pkg/PackageUserStateDefault;->getLastDisableAppCaller()Ljava/lang/String;
-PLcom/android/server/pm/pkg/PackageUserStateDefault;->getOverlayPaths()Landroid/content/pm/overlay/OverlayPaths;
+HPLcom/android/server/pm/pkg/PackageUserStateDefault;->getLastDisableAppCaller()Ljava/lang/String;
+HSPLcom/android/server/pm/pkg/PackageUserStateDefault;->getOverlayPaths()Landroid/content/pm/overlay/OverlayPaths;
 PLcom/android/server/pm/pkg/PackageUserStateDefault;->getSharedLibraryOverlayPaths()Ljava/util/Map;
 HSPLcom/android/server/pm/pkg/PackageUserStateDefault;->getSplashScreenTheme()Ljava/lang/String;
 HSPLcom/android/server/pm/pkg/PackageUserStateDefault;->getUninstallReason()I
+PLcom/android/server/pm/pkg/PackageUserStateDefault;->isComponentDisabled(Ljava/lang/String;)Z
+PLcom/android/server/pm/pkg/PackageUserStateDefault;->isComponentEnabled(Ljava/lang/String;)Z
 HSPLcom/android/server/pm/pkg/PackageUserStateDefault;->isHidden()Z
 HSPLcom/android/server/pm/pkg/PackageUserStateDefault;->isInstalled()Z
 HSPLcom/android/server/pm/pkg/PackageUserStateDefault;->isInstantApp()Z
@@ -41307,7 +42819,7 @@
 HSPLcom/android/server/pm/pkg/PackageUserStateImpl;-><init>(Lcom/android/server/utils/Watchable;)V
 HSPLcom/android/server/pm/pkg/PackageUserStateImpl;-><init>(Lcom/android/server/utils/Watchable;Lcom/android/server/pm/pkg/PackageUserStateImpl;)V+]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;
 HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->equals(Ljava/lang/Object;)Z
-HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->getAllOverlayPaths()Landroid/content/pm/overlay/OverlayPaths;+]Landroid/content/pm/overlay/OverlayPaths$Builder;Landroid/content/pm/overlay/OverlayPaths$Builder;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Ljava/util/Collection;Ljava/util/Collections$UnmodifiableCollection;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;
+HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->getAllOverlayPaths()Landroid/content/pm/overlay/OverlayPaths;+]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;]Ljava/util/Collection;Ljava/util/Collections$UnmodifiableCollection;]Landroid/content/pm/overlay/OverlayPaths$Builder;Landroid/content/pm/overlay/OverlayPaths$Builder;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;
 HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->getCeDataInode()J
 HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->getDisabledComponents()Landroid/util/ArraySet;+]Lcom/android/server/utils/WatchedArraySet;Lcom/android/server/utils/WatchedArraySet;
 HSPLcom/android/server/pm/pkg/PackageUserStateImpl;->getDisabledComponentsNoCopy()Lcom/android/server/utils/WatchedArraySet;
@@ -41364,7 +42876,7 @@
 HSPLcom/android/server/pm/pkg/PackageUserStateInternal;-><clinit>()V
 HSPLcom/android/server/pm/pkg/PackageUserStateUtils;->isAvailable(Lcom/android/server/pm/pkg/PackageUserState;J)Z+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;,Lcom/android/server/pm/pkg/PackageUserStateDefault;
 PLcom/android/server/pm/pkg/PackageUserStateUtils;->isEnabled(Lcom/android/server/pm/pkg/PackageUserState;Landroid/content/pm/ComponentInfo;J)Z
-HSPLcom/android/server/pm/pkg/PackageUserStateUtils;->isEnabled(Lcom/android/server/pm/pkg/PackageUserState;ZZLjava/lang/String;J)Z+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;
+HSPLcom/android/server/pm/pkg/PackageUserStateUtils;->isEnabled(Lcom/android/server/pm/pkg/PackageUserState;ZZLjava/lang/String;J)Z+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;,Lcom/android/server/pm/pkg/PackageUserStateDefault;
 HSPLcom/android/server/pm/pkg/PackageUserStateUtils;->isMatch(Lcom/android/server/pm/pkg/PackageUserState;Landroid/content/pm/ComponentInfo;J)Z+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;
 HSPLcom/android/server/pm/pkg/PackageUserStateUtils;->isMatch(Lcom/android/server/pm/pkg/PackageUserState;ZZLcom/android/server/pm/pkg/component/ParsedMainComponent;J)Z+]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;,Lcom/android/server/pm/pkg/component/ParsedProviderImpl;,Lcom/android/server/pm/pkg/component/ParsedServiceImpl;]Lcom/android/server/pm/pkg/component/ParsedMainComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;,Lcom/android/server/pm/pkg/component/ParsedProviderImpl;,Lcom/android/server/pm/pkg/component/ParsedServiceImpl;
 HSPLcom/android/server/pm/pkg/PackageUserStateUtils;->isMatch(Lcom/android/server/pm/pkg/PackageUserState;ZZZZLjava/lang/String;J)Z
@@ -41372,7 +42884,7 @@
 HSPLcom/android/server/pm/pkg/PackageUserStateUtils;->reportIfDebug(ZJ)Z
 HSPLcom/android/server/pm/pkg/SELinuxUtil;->getSeinfoUser(Lcom/android/server/pm/pkg/PackageUserState;)Ljava/lang/String;+]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;,Lcom/android/server/pm/pkg/PackageUserStateDefault;
 HSPLcom/android/server/pm/pkg/SuspendParams;-><init>(Landroid/content/pm/SuspendDialogInfo;Landroid/os/PersistableBundle;Landroid/os/PersistableBundle;)V
-PLcom/android/server/pm/pkg/SuspendParams;->equals(Ljava/lang/Object;)Z
+HPLcom/android/server/pm/pkg/SuspendParams;->equals(Ljava/lang/Object;)Z
 PLcom/android/server/pm/pkg/SuspendParams;->getAppExtras()Landroid/os/PersistableBundle;
 PLcom/android/server/pm/pkg/SuspendParams;->getDialogInfo()Landroid/content/pm/SuspendDialogInfo;
 PLcom/android/server/pm/pkg/SuspendParams;->getLauncherExtras()Landroid/os/PersistableBundle;
@@ -41391,14 +42903,14 @@
 PLcom/android/server/pm/pkg/component/ComponentMutateUtils;->setResizeMode(Lcom/android/server/pm/pkg/component/ParsedActivity;I)V
 HSPLcom/android/server/pm/pkg/component/ComponentMutateUtils;->setSupportsSizeChanges(Lcom/android/server/pm/pkg/component/ParsedActivity;Z)V
 HSPLcom/android/server/pm/pkg/component/ComponentParseUtils;->buildCompoundName(Ljava/lang/String;Ljava/lang/CharSequence;Ljava/lang/String;Landroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;
-HSPLcom/android/server/pm/pkg/component/ComponentParseUtils;->buildProcessName(Ljava/lang/String;Ljava/lang/String;Ljava/lang/CharSequence;I[Ljava/lang/String;Landroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;
+HSPLcom/android/server/pm/pkg/component/ComponentParseUtils;->buildProcessName(Ljava/lang/String;Ljava/lang/String;Ljava/lang/CharSequence;I[Ljava/lang/String;Landroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;+]Landroid/content/pm/parsing/result/ParseInput;Landroid/content/pm/parsing/result/ParseTypeImpl;]Ljava/lang/CharSequence;Ljava/lang/String;]Landroid/content/pm/parsing/result/ParseResult;Landroid/content/pm/parsing/result/ParseTypeImpl;
 HSPLcom/android/server/pm/pkg/component/ComponentParseUtils;->buildTaskAffinityName(Ljava/lang/String;Ljava/lang/String;Ljava/lang/CharSequence;Landroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;
 HSPLcom/android/server/pm/pkg/component/ComponentParseUtils;->flag(IILandroid/content/res/TypedArray;)I+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLcom/android/server/pm/pkg/component/ComponentParseUtils;->flag(IIZLandroid/content/res/TypedArray;)I+]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
 HSPLcom/android/server/pm/pkg/component/ComponentParseUtils;->getIcon(Lcom/android/server/pm/pkg/component/ParsedComponent;)I
 HSPLcom/android/server/pm/pkg/component/ComponentParseUtils;->getNonLocalizedLabel(Lcom/android/server/pm/pkg/component/ParsedComponent;)Ljava/lang/CharSequence;+]Lcom/android/server/pm/pkg/component/ParsedComponent;megamorphic_types
 HSPLcom/android/server/pm/pkg/component/ComponentParseUtils;->isImplicitlyExposedIntent(Lcom/android/server/pm/pkg/component/ParsedIntentInfo;)Z
-HPLcom/android/server/pm/pkg/component/ComponentParseUtils;->isMatch(Lcom/android/server/pm/pkg/PackageUserState;ZZLcom/android/server/pm/pkg/component/ParsedMainComponent;J)Z+]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;,Lcom/android/server/pm/pkg/component/ParsedProviderImpl;,Lcom/android/server/pm/pkg/component/ParsedServiceImpl;]Lcom/android/server/pm/pkg/component/ParsedMainComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;,Lcom/android/server/pm/pkg/component/ParsedProviderImpl;,Lcom/android/server/pm/pkg/component/ParsedServiceImpl;
+HSPLcom/android/server/pm/pkg/component/ComponentParseUtils;->isMatch(Lcom/android/server/pm/pkg/PackageUserState;ZZLcom/android/server/pm/pkg/component/ParsedMainComponent;J)Z+]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;,Lcom/android/server/pm/pkg/component/ParsedProviderImpl;,Lcom/android/server/pm/pkg/component/ParsedServiceImpl;]Lcom/android/server/pm/pkg/component/ParsedMainComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;,Lcom/android/server/pm/pkg/component/ParsedProviderImpl;,Lcom/android/server/pm/pkg/component/ParsedServiceImpl;
 HSPLcom/android/server/pm/pkg/component/ComponentParseUtils;->parseAllMetaData(Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;Ljava/lang/String;Lcom/android/server/pm/pkg/component/ParsedComponentImpl;Landroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;
 HSPLcom/android/server/pm/pkg/component/ParsedActivity;->makeAppDetailsActivity(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Z)Lcom/android/server/pm/pkg/component/ParsedActivity;
 HSPLcom/android/server/pm/pkg/component/ParsedActivityImpl$1;-><init>()V
@@ -41497,11 +43009,11 @@
 HSPLcom/android/server/pm/pkg/component/ParsedAttributionUtils;->isCombinationValid(Ljava/util/List;)Z
 HSPLcom/android/server/pm/pkg/component/ParsedAttributionUtils;->parseAttribution(Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;Landroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;
 HSPLcom/android/server/pm/pkg/component/ParsedComponentImpl;-><init>()V
-HSPLcom/android/server/pm/pkg/component/ParsedComponentImpl;-><init>(Landroid/os/Parcel;)V
+HSPLcom/android/server/pm/pkg/component/ParsedComponentImpl;-><init>(Landroid/os/Parcel;)V+]Lcom/android/internal/util/Parcelling$BuiltIn$ForInternedString;Lcom/android/internal/util/Parcelling$BuiltIn$ForInternedString;]Ljava/lang/Class;Ljava/lang/Class;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/server/pm/pkg/component/ParsedComponentImpl;->addIntent(Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;)V
 HSPLcom/android/server/pm/pkg/component/ParsedComponentImpl;->addProperty(Landroid/content/pm/PackageManager$Property;)V
 HSPLcom/android/server/pm/pkg/component/ParsedComponentImpl;->getBanner()I
-HSPLcom/android/server/pm/pkg/component/ParsedComponentImpl;->getComponentName()Landroid/content/ComponentName;+]Lcom/android/server/pm/pkg/component/ParsedComponentImpl;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;,Lcom/android/server/pm/pkg/component/ParsedProviderImpl;,Lcom/android/server/pm/pkg/component/ParsedServiceImpl;,Lcom/android/server/pm/pkg/component/ParsedInstrumentationImpl;
+HSPLcom/android/server/pm/pkg/component/ParsedComponentImpl;->getComponentName()Landroid/content/ComponentName;+]Lcom/android/server/pm/pkg/component/ParsedComponentImpl;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;,Lcom/android/server/pm/pkg/component/ParsedInstrumentationImpl;,Lcom/android/server/pm/pkg/component/ParsedProviderImpl;,Lcom/android/server/pm/pkg/component/ParsedServiceImpl;
 HSPLcom/android/server/pm/pkg/component/ParsedComponentImpl;->getDescriptionRes()I
 HSPLcom/android/server/pm/pkg/component/ParsedComponentImpl;->getFlags()I
 HSPLcom/android/server/pm/pkg/component/ParsedComponentImpl;->getIcon()I
@@ -41523,7 +43035,7 @@
 HSPLcom/android/server/pm/pkg/component/ParsedComponentImpl;->setName(Ljava/lang/String;)Lcom/android/server/pm/pkg/component/ParsedComponentImpl;
 HSPLcom/android/server/pm/pkg/component/ParsedComponentImpl;->setNonLocalizedLabel(Ljava/lang/CharSequence;)Lcom/android/server/pm/pkg/component/ParsedComponentImpl;
 HSPLcom/android/server/pm/pkg/component/ParsedComponentImpl;->setPackageName(Ljava/lang/String;)V
-HSPLcom/android/server/pm/pkg/component/ParsedComponentImpl;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLcom/android/server/pm/pkg/component/ParsedComponentImpl;->writeToParcel(Landroid/os/Parcel;I)V+]Lcom/android/server/pm/pkg/component/ParsedComponentImpl;megamorphic_types]Lcom/android/internal/util/Parcelling$BuiltIn$ForInternedString;Lcom/android/internal/util/Parcelling$BuiltIn$ForInternedString;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/server/pm/pkg/component/ParsedComponentUtils;->addMetaData(Lcom/android/server/pm/pkg/component/ParsedComponentImpl;Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;Landroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;
 HSPLcom/android/server/pm/pkg/component/ParsedComponentUtils;->addProperty(Lcom/android/server/pm/pkg/component/ParsedComponentImpl;Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;Landroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;
 HSPLcom/android/server/pm/pkg/component/ParsedComponentUtils;->parseComponent(Lcom/android/server/pm/pkg/component/ParsedComponentImpl;Ljava/lang/String;Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/TypedArray;ZLandroid/content/pm/parsing/result/ParseInput;IIIIIII)Landroid/content/pm/parsing/result/ParseResult;+]Landroid/util/TypedValue;Landroid/util/TypedValue;]Landroid/content/pm/parsing/result/ParseInput;Landroid/content/pm/parsing/result/ParseTypeImpl;]Lcom/android/server/pm/pkg/component/ParsedComponentImpl;megamorphic_types]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;
@@ -41560,11 +43072,11 @@
 HSPLcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;->setNonLocalizedLabel(Ljava/lang/CharSequence;)Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;
 HSPLcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;->writeToParcel(Landroid/os/Parcel;I)V
 HSPLcom/android/server/pm/pkg/component/ParsedIntentInfoUtils;->parseData(Lcom/android/server/pm/pkg/component/ParsedIntentInfo;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;ZLandroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;+]Lcom/android/server/pm/pkg/component/ParsedIntentInfo;Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/pm/parsing/result/ParseInput;Landroid/content/pm/parsing/result/ParseTypeImpl;]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;
-HSPLcom/android/server/pm/pkg/component/ParsedIntentInfoUtils;->parseIntentInfo(Ljava/lang/String;Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;ZZLandroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;+]Ljava/lang/String;Ljava/lang/String;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/pm/parsing/result/ParseInput;Landroid/content/pm/parsing/result/ParseTypeImpl;]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Landroid/content/pm/parsing/result/ParseResult;Landroid/content/pm/parsing/result/ParseTypeImpl;]Landroid/content/res/XmlResourceParser;Landroid/content/res/XmlBlock$Parser;]Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;]Landroid/util/TypedValue;Landroid/util/TypedValue;
+HSPLcom/android/server/pm/pkg/component/ParsedIntentInfoUtils;->parseIntentInfo(Ljava/lang/String;Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;ZZLandroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;+]Ljava/lang/String;Ljava/lang/String;]Landroid/util/TypedValue;Landroid/util/TypedValue;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/pm/parsing/result/ParseInput;Landroid/content/pm/parsing/result/ParseTypeImpl;]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/pm/parsing/result/ParseResult;Landroid/content/pm/parsing/result/ParseTypeImpl;]Landroid/content/res/XmlResourceParser;Landroid/content/res/XmlBlock$Parser;]Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;
 HSPLcom/android/server/pm/pkg/component/ParsedMainComponentImpl$1;-><init>()V
 HSPLcom/android/server/pm/pkg/component/ParsedMainComponentImpl;-><clinit>()V
 HSPLcom/android/server/pm/pkg/component/ParsedMainComponentImpl;-><init>()V
-HSPLcom/android/server/pm/pkg/component/ParsedMainComponentImpl;-><init>(Landroid/os/Parcel;)V
+HSPLcom/android/server/pm/pkg/component/ParsedMainComponentImpl;-><init>(Landroid/os/Parcel;)V+]Lcom/android/internal/util/Parcelling$BuiltIn$ForInternedString;Lcom/android/internal/util/Parcelling$BuiltIn$ForInternedString;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/server/pm/pkg/component/ParsedMainComponentImpl;->getAttributionTags()[Ljava/lang/String;
 HSPLcom/android/server/pm/pkg/component/ParsedMainComponentImpl;->getClassName()Ljava/lang/String;+]Lcom/android/server/pm/pkg/component/ParsedComponentImpl;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;,Lcom/android/server/pm/pkg/component/ParsedProviderImpl;,Lcom/android/server/pm/pkg/component/ParsedServiceImpl;
 HSPLcom/android/server/pm/pkg/component/ParsedMainComponentImpl;->getOrder()I
@@ -41580,20 +43092,20 @@
 HSPLcom/android/server/pm/pkg/component/ParsedMainComponentImpl;->setOrder(I)Lcom/android/server/pm/pkg/component/ParsedMainComponentImpl;
 HSPLcom/android/server/pm/pkg/component/ParsedMainComponentImpl;->setProcessName(Ljava/lang/String;)Lcom/android/server/pm/pkg/component/ParsedMainComponentImpl;
 HSPLcom/android/server/pm/pkg/component/ParsedMainComponentImpl;->setSplitName(Ljava/lang/String;)Lcom/android/server/pm/pkg/component/ParsedMainComponentImpl;
-HSPLcom/android/server/pm/pkg/component/ParsedMainComponentImpl;->writeToParcel(Landroid/os/Parcel;I)V
+HSPLcom/android/server/pm/pkg/component/ParsedMainComponentImpl;->writeToParcel(Landroid/os/Parcel;I)V+]Lcom/android/internal/util/Parcelling$BuiltIn$ForInternedString;Lcom/android/internal/util/Parcelling$BuiltIn$ForInternedString;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/server/pm/pkg/component/ParsedMainComponentUtils;->parseIntentFilter(Lcom/android/server/pm/pkg/component/ParsedMainComponent;Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;ZZZZZLandroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;
-HSPLcom/android/server/pm/pkg/component/ParsedMainComponentUtils;->parseMainComponent(Lcom/android/server/pm/pkg/component/ParsedMainComponentImpl;Ljava/lang/String;[Ljava/lang/String;Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/TypedArray;IZLjava/lang/String;Landroid/content/pm/parsing/result/ParseInput;IIIIIIIIIIII)Landroid/content/pm/parsing/result/ParseResult;
+HSPLcom/android/server/pm/pkg/component/ParsedMainComponentUtils;->parseMainComponent(Lcom/android/server/pm/pkg/component/ParsedMainComponentImpl;Ljava/lang/String;[Ljava/lang/String;Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/TypedArray;IZLjava/lang/String;Landroid/content/pm/parsing/result/ParseInput;IIIIIIIIIIII)Landroid/content/pm/parsing/result/ParseResult;+]Ljava/lang/String;Ljava/lang/String;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/parsing/ParsingPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/pm/parsing/result/ParseInput;Landroid/content/pm/parsing/result/ParseTypeImpl;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/pm/parsing/result/ParseResult;Landroid/content/pm/parsing/result/ParseTypeImpl;]Lcom/android/server/pm/pkg/component/ParsedMainComponentImpl;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;,Lcom/android/server/pm/pkg/component/ParsedProviderImpl;,Lcom/android/server/pm/pkg/component/ParsedServiceImpl;
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl$1;-><init>()V
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl$1;->createFromParcel(Landroid/os/Parcel;)Lcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl$1;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;-><clinit>()V
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;-><init>()V
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;-><init>(Landroid/os/Parcel;)V
-HPLcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;->getBackgroundRequestDetailRes()I
-HPLcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;->getBackgroundRequestRes()I
-HPLcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;->getPriority()I
-HPLcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;->getRequestDetailRes()I
-HPLcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;->getRequestRes()I
+HSPLcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;->getBackgroundRequestDetailRes()I
+HSPLcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;->getBackgroundRequestRes()I
+HSPLcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;->getPriority()I
+HSPLcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;->getRequestDetailRes()I
+HSPLcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;->getRequestRes()I
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;->setBackgroundRequestDetailRes(I)Lcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;->setBackgroundRequestRes(I)Lcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;->setPriority(I)Lcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;
@@ -41609,7 +43121,7 @@
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionImpl;->getBackgroundPermission()Ljava/lang/String;
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionImpl;->getGroup()Ljava/lang/String;
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionImpl;->getKnownCerts()Ljava/util/Set;
-PLcom/android/server/pm/pkg/component/ParsedPermissionImpl;->getParsedPermissionGroup()Lcom/android/server/pm/pkg/component/ParsedPermissionGroup;
+HSPLcom/android/server/pm/pkg/component/ParsedPermissionImpl;->getParsedPermissionGroup()Lcom/android/server/pm/pkg/component/ParsedPermissionGroup;
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionImpl;->getProtectionLevel()I
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionImpl;->getRequestRes()I
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionImpl;->isTree()Z
@@ -41624,7 +43136,7 @@
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionUtils;->declareDuplicatePermission(Lcom/android/server/pm/pkg/parsing/ParsingPackage;)Z
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionUtils;->getProtection(Lcom/android/server/pm/pkg/component/ParsedPermission;)I
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionUtils;->getProtectionFlags(Lcom/android/server/pm/pkg/component/ParsedPermission;)I
-PLcom/android/server/pm/pkg/component/ParsedPermissionUtils;->isAppOp(Lcom/android/server/pm/pkg/component/ParsedPermission;)Z
+HSPLcom/android/server/pm/pkg/component/ParsedPermissionUtils;->isAppOp(Lcom/android/server/pm/pkg/component/ParsedPermission;)Z
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionUtils;->isMalformedDuplicate(Lcom/android/server/pm/pkg/component/ParsedPermission;Lcom/android/server/pm/pkg/component/ParsedPermission;)Z
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionUtils;->isRuntime(Lcom/android/server/pm/pkg/component/ParsedPermission;)Z
 HSPLcom/android/server/pm/pkg/component/ParsedPermissionUtils;->parsePermission(Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;ZLandroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;
@@ -41638,10 +43150,10 @@
 HSPLcom/android/server/pm/pkg/component/ParsedProcessImpl;-><init>(Landroid/os/Parcel;)V
 HSPLcom/android/server/pm/pkg/component/ParsedProcessImpl;->getAppClassNamesByPackage()Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/pkg/component/ParsedProcessImpl;->getDeniedPermissions()Ljava/util/Set;
-PLcom/android/server/pm/pkg/component/ParsedProcessImpl;->getGwpAsanMode()I
-PLcom/android/server/pm/pkg/component/ParsedProcessImpl;->getMemtagMode()I
+HSPLcom/android/server/pm/pkg/component/ParsedProcessImpl;->getGwpAsanMode()I
+HSPLcom/android/server/pm/pkg/component/ParsedProcessImpl;->getMemtagMode()I
 HSPLcom/android/server/pm/pkg/component/ParsedProcessImpl;->getName()Ljava/lang/String;
-PLcom/android/server/pm/pkg/component/ParsedProcessImpl;->getNativeHeapZeroInitialized()I
+HSPLcom/android/server/pm/pkg/component/ParsedProcessImpl;->getNativeHeapZeroInitialized()I
 HSPLcom/android/server/pm/pkg/component/ParsedProcessImpl;->putAppClassNameForPackage(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/pm/pkg/component/ParsedProcessImpl;->setDeniedPermissions(Ljava/util/Set;)Lcom/android/server/pm/pkg/component/ParsedProcessImpl;
 HSPLcom/android/server/pm/pkg/component/ParsedProcessImpl;->setGwpAsanMode(I)Lcom/android/server/pm/pkg/component/ParsedProcessImpl;
@@ -41730,7 +43242,6 @@
 HSPLcom/android/server/pm/pkg/mutate/PackageStateMutator$StateWriteWrapper;->onChanged()V+]Lcom/android/server/pm/SettingBase;Lcom/android/server/pm/PackageSetting;
 PLcom/android/server/pm/pkg/mutate/PackageStateMutator$StateWriteWrapper;->setCategoryOverride(I)Lcom/android/server/pm/pkg/mutate/PackageStateWrite;
 HSPLcom/android/server/pm/pkg/mutate/PackageStateMutator$StateWriteWrapper;->setHiddenUntilInstalled(Z)Lcom/android/server/pm/pkg/mutate/PackageStateWrite;
-HSPLcom/android/server/pm/pkg/mutate/PackageStateMutator$StateWriteWrapper;->setLastPackageUsageTime(IJ)Lcom/android/server/pm/pkg/mutate/PackageStateWrite;
 PLcom/android/server/pm/pkg/mutate/PackageStateMutator$StateWriteWrapper;->setLoadingProgress(F)Lcom/android/server/pm/pkg/mutate/PackageStateWrite;
 HSPLcom/android/server/pm/pkg/mutate/PackageStateMutator$StateWriteWrapper;->setState(Lcom/android/server/pm/PackageSetting;)Lcom/android/server/pm/pkg/mutate/PackageStateMutator$StateWriteWrapper;
 PLcom/android/server/pm/pkg/mutate/PackageStateMutator$StateWriteWrapper;->setUpdateAvailable(Z)Lcom/android/server/pm/pkg/mutate/PackageStateWrite;
@@ -41753,17 +43264,17 @@
 HSPLcom/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils;->checkUseInstalledOrHidden(JLcom/android/server/pm/pkg/PackageUserState;Landroid/content/pm/ApplicationInfo;)Z
 HSPLcom/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils;->flag(ZI)I
 HSPLcom/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils;->generate(Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Landroid/apex/ApexInfo;I)Landroid/content/pm/PackageInfo;
-HSPLcom/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils;->generateActivityInfoUnchecked(Lcom/android/server/pm/pkg/component/ParsedActivity;JLandroid/content/pm/ApplicationInfo;)Landroid/content/pm/ActivityInfo;+]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Lcom/android/server/pm/pkg/component/ParsedMainComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;]Lcom/android/server/pm/pkg/component/ParsedActivity;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;]Landroid/os/Bundle;Landroid/os/Bundle;
+HSPLcom/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils;->generateActivityInfoUnchecked(Lcom/android/server/pm/pkg/component/ParsedActivity;JLandroid/content/pm/ApplicationInfo;)Landroid/content/pm/ActivityInfo;+]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;]Landroid/os/Bundle;Landroid/os/Bundle;]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Lcom/android/server/pm/pkg/component/ParsedMainComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;]Lcom/android/server/pm/pkg/component/ParsedActivity;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;
 HSPLcom/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils;->generateApplicationInfo(Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;JLcom/android/server/pm/pkg/PackageUserState;I)Landroid/content/pm/ApplicationInfo;
 HSPLcom/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils;->generateApplicationInfoUnchecked(Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;JLcom/android/server/pm/pkg/PackageUserState;IZ)Landroid/content/pm/ApplicationInfo;+]Lcom/android/server/pm/pkg/parsing/ParsingPackageHidden;Lcom/android/server/pm/parsing/pkg/PackageImpl;
-PLcom/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils;->generateAttribution(Lcom/android/server/pm/pkg/component/ParsedAttribution;)Landroid/content/pm/Attribution;
+HPLcom/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils;->generateAttribution(Lcom/android/server/pm/pkg/component/ParsedAttribution;)Landroid/content/pm/Attribution;
 PLcom/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils;->generateDelegateActivityInfo(Landroid/content/pm/ActivityInfo;JLcom/android/server/pm/pkg/PackageUserState;I)Landroid/content/pm/ActivityInfo;
-HSPLcom/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils;->generateDelegateApplicationInfo(Landroid/content/pm/ApplicationInfo;JLcom/android/server/pm/pkg/PackageUserState;I)Landroid/content/pm/ApplicationInfo;
+HSPLcom/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils;->generateDelegateApplicationInfo(Landroid/content/pm/ApplicationInfo;JLcom/android/server/pm/pkg/PackageUserState;I)Landroid/content/pm/ApplicationInfo;+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;
 HPLcom/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils;->generateInstrumentationInfo(Lcom/android/server/pm/pkg/component/ParsedInstrumentation;Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;JIZ)Landroid/content/pm/InstrumentationInfo;
-HPLcom/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils;->generatePermissionGroupInfo(Lcom/android/server/pm/pkg/component/ParsedPermissionGroup;J)Landroid/content/pm/PermissionGroupInfo;
-HSPLcom/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils;->generatePermissionInfo(Lcom/android/server/pm/pkg/component/ParsedPermission;J)Landroid/content/pm/PermissionInfo;+]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedPermissionImpl;]Lcom/android/server/pm/pkg/component/ParsedPermission;Lcom/android/server/pm/pkg/component/ParsedPermissionImpl;]Landroid/os/Bundle;Landroid/os/Bundle;
-HSPLcom/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils;->generateProviderInfoUnchecked(Lcom/android/server/pm/pkg/component/ParsedProvider;JLandroid/content/pm/ApplicationInfo;)Landroid/content/pm/ProviderInfo;+]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedProviderImpl;]Lcom/android/server/pm/pkg/component/ParsedProvider;Lcom/android/server/pm/pkg/component/ParsedProviderImpl;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Lcom/android/server/pm/pkg/component/ParsedMainComponent;Lcom/android/server/pm/pkg/component/ParsedProviderImpl;]Landroid/os/Bundle;Landroid/os/Bundle;
-HSPLcom/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils;->generateServiceInfoUnchecked(Lcom/android/server/pm/pkg/component/ParsedService;JLandroid/content/pm/ApplicationInfo;)Landroid/content/pm/ServiceInfo;+]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedServiceImpl;]Lcom/android/server/pm/pkg/component/ParsedMainComponent;Lcom/android/server/pm/pkg/component/ParsedServiceImpl;]Lcom/android/server/pm/pkg/component/ParsedService;Lcom/android/server/pm/pkg/component/ParsedServiceImpl;]Landroid/os/Bundle;Landroid/os/Bundle;
+HSPLcom/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils;->generatePermissionGroupInfo(Lcom/android/server/pm/pkg/component/ParsedPermissionGroup;J)Landroid/content/pm/PermissionGroupInfo;+]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;]Lcom/android/server/pm/pkg/component/ParsedPermissionGroup;Lcom/android/server/pm/pkg/component/ParsedPermissionGroupImpl;
+HSPLcom/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils;->generatePermissionInfo(Lcom/android/server/pm/pkg/component/ParsedPermission;J)Landroid/content/pm/PermissionInfo;+]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedPermissionImpl;]Landroid/os/Bundle;Landroid/os/Bundle;]Lcom/android/server/pm/pkg/component/ParsedPermission;Lcom/android/server/pm/pkg/component/ParsedPermissionImpl;
+HSPLcom/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils;->generateProviderInfoUnchecked(Lcom/android/server/pm/pkg/component/ParsedProvider;JLandroid/content/pm/ApplicationInfo;)Landroid/content/pm/ProviderInfo;+]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedProviderImpl;]Lcom/android/server/pm/pkg/component/ParsedProvider;Lcom/android/server/pm/pkg/component/ParsedProviderImpl;]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Lcom/android/server/pm/pkg/component/ParsedMainComponent;Lcom/android/server/pm/pkg/component/ParsedProviderImpl;
+HSPLcom/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils;->generateServiceInfoUnchecked(Lcom/android/server/pm/pkg/component/ParsedService;JLandroid/content/pm/ApplicationInfo;)Landroid/content/pm/ServiceInfo;+]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedServiceImpl;]Landroid/os/Bundle;Landroid/os/Bundle;]Lcom/android/server/pm/pkg/component/ParsedMainComponent;Lcom/android/server/pm/pkg/component/ParsedServiceImpl;]Lcom/android/server/pm/pkg/component/ParsedService;Lcom/android/server/pm/pkg/component/ParsedServiceImpl;
 HSPLcom/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils;->generateWithComponents(Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;[IJJJLjava/util/Set;Lcom/android/server/pm/pkg/PackageUserState;ILandroid/apex/ApexInfo;)Landroid/content/pm/PackageInfo;
 HSPLcom/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils;->generateWithoutComponents(Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;[IJJJLjava/util/Set;Lcom/android/server/pm/pkg/PackageUserState;ILandroid/apex/ApexInfo;Landroid/content/pm/ApplicationInfo;)Landroid/content/pm/PackageInfo;
 HSPLcom/android/server/pm/pkg/parsing/PackageInfoWithoutStateUtils;->generateWithoutComponentsUnchecked(Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;[IJJJLjava/util/Set;Lcom/android/server/pm/pkg/PackageUserState;ILandroid/apex/ApexInfo;Landroid/content/pm/ApplicationInfo;)Landroid/content/pm/PackageInfo;+]Lcom/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/parsing/ParsingPackageHidden;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/parsing/ParsingPackageInternal;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/pm/SigningDetails;Landroid/content/pm/SigningDetails;]Lcom/android/server/pm/pkg/component/ParsedUsesPermission;Lcom/android/server/pm/pkg/component/ParsedUsesPermissionImpl;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/util/Set;Landroid/util/ArraySet;
@@ -41792,6 +43303,8 @@
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->addImplicitPermission(Ljava/lang/String;)Lcom/android/server/pm/pkg/parsing/ParsingPackageImpl;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->addInstrumentation(Lcom/android/server/pm/pkg/component/ParsedInstrumentation;)Lcom/android/server/pm/pkg/parsing/ParsingPackage;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->addInstrumentation(Lcom/android/server/pm/pkg/component/ParsedInstrumentation;)Lcom/android/server/pm/pkg/parsing/ParsingPackageImpl;
+PLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->addKeySet(Ljava/lang/String;Ljava/security/PublicKey;)Lcom/android/server/pm/pkg/parsing/ParsingPackage;
+PLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->addKeySet(Ljava/lang/String;Ljava/security/PublicKey;)Lcom/android/server/pm/pkg/parsing/ParsingPackageImpl;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->addLibraryName(Ljava/lang/String;)Lcom/android/server/pm/pkg/parsing/ParsingPackage;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->addLibraryName(Ljava/lang/String;)Lcom/android/server/pm/pkg/parsing/ParsingPackageImpl;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->addMimeGroupsFromComponent(Lcom/android/server/pm/pkg/component/ParsedComponent;)V+]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;,Lcom/android/server/pm/pkg/component/ParsedProviderImpl;,Lcom/android/server/pm/pkg/component/ParsedServiceImpl;]Lcom/android/server/pm/pkg/component/ParsedIntentInfo;Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/IntentFilter;Landroid/content/IntentFilter;
@@ -41834,7 +43347,7 @@
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->asSplit([Ljava/lang/String;[Ljava/lang/String;[ILandroid/util/SparseArray;)Lcom/android/server/pm/pkg/parsing/ParsingPackage;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->asSplit([Ljava/lang/String;[Ljava/lang/String;[ILandroid/util/SparseArray;)Lcom/android/server/pm/pkg/parsing/ParsingPackageImpl;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->assignDerivedFields()V
-HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->buildAppClassNamesByProcess()Landroid/util/ArrayMap;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/pm/pkg/component/ParsedProcess;Lcom/android/server/pm/pkg/component/ParsedProcessImpl;]Ljava/util/Map;Ljava/util/HashMap;,Landroid/util/ArrayMap;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;,Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Ljava/util/HashMap$KeySet;,Landroid/util/MapCollections$KeySet;
+HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->buildAppClassNamesByProcess()Landroid/util/ArrayMap;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/pm/pkg/component/ParsedProcess;Lcom/android/server/pm/pkg/component/ParsedProcessImpl;]Ljava/util/Map;Landroid/util/ArrayMap;,Ljava/util/HashMap;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;,Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Ljava/util/HashMap$KeySet;,Landroid/util/MapCollections$KeySet;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->getActivities()Ljava/util/List;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->getAdoptPermissions()Ljava/util/List;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->getApexSystemServices()Ljava/util/List;
@@ -41935,7 +43448,7 @@
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->isDefaultToDeviceProtectedStorage()Z+]Lcom/android/server/pm/pkg/parsing/ParsingPackageImpl;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->isDirectBootAware()Z
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->isEnabled()Z+]Lcom/android/server/pm/pkg/parsing/ParsingPackageImpl;Lcom/android/server/pm/parsing/pkg/PackageImpl;
-HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->isExternalStorage()Z
+HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->isExternalStorage()Z+]Lcom/android/server/pm/pkg/parsing/ParsingPackageImpl;Lcom/android/server/pm/parsing/pkg/PackageImpl;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->isExtractNativeLibs()Z
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->isForceQueryable()Z
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->isFullBackupOnly()Z
@@ -41969,7 +43482,7 @@
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->isSupportsRtl()Z
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->isSupportsSmallScreens()Z
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->isTestOnly()Z
-PLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->isUse32BitAbi()Z
+HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->isUse32BitAbi()Z
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->isUseEmbeddedDex()Z
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->isUsesCleartextTraffic()Z
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->isUsesNonSdkApi()Z
@@ -42180,6 +43693,8 @@
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->setTheme(I)Lcom/android/server/pm/pkg/parsing/ParsingPackageImpl;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->setUiOptions(I)Lcom/android/server/pm/pkg/parsing/ParsingPackage;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->setUiOptions(I)Lcom/android/server/pm/pkg/parsing/ParsingPackageImpl;
+PLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->setUpgradeKeySets(Ljava/util/Set;)Lcom/android/server/pm/pkg/parsing/ParsingPackage;
+PLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->setUpgradeKeySets(Ljava/util/Set;)Lcom/android/server/pm/pkg/parsing/ParsingPackageImpl;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->setUse32BitAbi(Z)Lcom/android/server/pm/pkg/parsing/ParsingPackage;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->setUse32BitAbi(Z)Lcom/android/server/pm/pkg/parsing/ParsingPackageImpl;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageImpl;->setUseEmbeddedDex(Z)Lcom/android/server/pm/pkg/parsing/ParsingPackage;
@@ -42229,10 +43744,11 @@
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->parseBaseApkTags(Landroid/content/pm/parsing/result/ParseInput;Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/TypedArray;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I)Landroid/content/pm/parsing/result/ParseResult;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->parseBaseAppBasicFlags(Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/TypedArray;)V
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->parseBaseAppChildTag(Landroid/content/pm/parsing/result/ParseInput;Ljava/lang/String;Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I)Landroid/content/pm/parsing/result/ParseResult;
-HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->parseBaseApplication(Landroid/content/pm/parsing/result/ParseInput;Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I)Landroid/content/pm/parsing/result/ParseResult;+]Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/pm/parsing/result/ParseResult;Landroid/content/pm/parsing/result/ParseTypeImpl;]Lcom/android/server/pm/pkg/parsing/ParsingPackageUtils$Callback;Lcom/android/server/pm/PackageManagerService$2;]Ljava/lang/String;Ljava/lang/String;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/parsing/ParsingPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/util/TypedValue;Landroid/util/TypedValue;]Lcom/android/server/pm/pkg/parsing/ParsingPackageUtils;Lcom/android/server/pm/pkg/parsing/ParsingPackageUtils;]Lcom/android/server/pm/pkg/component/ParsedMainComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;,Lcom/android/server/pm/pkg/component/ParsedServiceImpl;]Landroid/content/pm/parsing/result/ParseInput;Landroid/content/pm/parsing/result/ParseTypeImpl;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/res/XmlResourceParser;Landroid/content/res/XmlBlock$Parser;
+HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->parseBaseApplication(Landroid/content/pm/parsing/result/ParseInput;Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;I)Landroid/content/pm/parsing/result/ParseResult;+]Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/pm/parsing/result/ParseResult;Landroid/content/pm/parsing/result/ParseTypeImpl;]Ljava/lang/String;Ljava/lang/String;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Lcom/android/server/pm/pkg/parsing/ParsingPackage;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/util/TypedValue;Landroid/util/TypedValue;]Lcom/android/server/pm/pkg/parsing/ParsingPackageUtils;Lcom/android/server/pm/pkg/parsing/ParsingPackageUtils;]Lcom/android/server/pm/pkg/component/ParsedMainComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;,Lcom/android/server/pm/pkg/component/ParsedServiceImpl;]Landroid/content/pm/parsing/result/ParseInput;Landroid/content/pm/parsing/result/ParseTypeImpl;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/res/XmlResourceParser;Landroid/content/res/XmlBlock$Parser;]Lcom/android/server/pm/pkg/parsing/ParsingPackageUtils$Callback;Lcom/android/server/pm/PackageManagerService$2;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->parseClusterPackage(Landroid/content/pm/parsing/result/ParseInput;Ljava/io/File;Ljava/util/List;I)Landroid/content/pm/parsing/result/ParseResult;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->parseFeatureInfo(Landroid/content/res/Resources;Landroid/util/AttributeSet;)Landroid/content/pm/FeatureInfo;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->parseInstrumentation(Landroid/content/pm/parsing/result/ParseInput;Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;)Landroid/content/pm/parsing/result/ParseResult;
+PLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->parseKeySets(Landroid/content/pm/parsing/result/ParseInput;Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;)Landroid/content/pm/parsing/result/ParseResult;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->parseLibrary(Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;Landroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->parseMetaData(Lcom/android/server/pm/pkg/parsing/ParsingPackage;Lcom/android/server/pm/pkg/component/ParsedComponent;Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;Ljava/lang/String;Landroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;
 HSPLcom/android/server/pm/pkg/parsing/ParsingPackageUtils;->parseMonolithicPackage(Landroid/content/pm/parsing/result/ParseInput;Ljava/io/File;I)Landroid/content/pm/parsing/result/ParseResult;
@@ -42277,7 +43793,7 @@
 HSPLcom/android/server/pm/pkg/parsing/ParsingUtils;->createTypedInterfaceList(Landroid/os/Parcel;Landroid/os/Parcelable$Creator;)Ljava/util/List;+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/server/pm/pkg/parsing/ParsingUtils;->parseKnownActivityEmbeddingCerts(Landroid/content/res/TypedArray;Landroid/content/res/Resources;ILandroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;
 HSPLcom/android/server/pm/pkg/parsing/ParsingUtils;->unknownTag(Ljava/lang/String;Lcom/android/server/pm/pkg/parsing/ParsingPackage;Landroid/content/res/XmlResourceParser;Landroid/content/pm/parsing/result/ParseInput;)Landroid/content/pm/parsing/result/ParseResult;
-HSPLcom/android/server/pm/pkg/parsing/ParsingUtils;->writeParcelableList(Landroid/os/Parcel;Ljava/util/List;)V
+HSPLcom/android/server/pm/pkg/parsing/ParsingUtils;->writeParcelableList(Landroid/os/Parcel;Ljava/util/List;)V+]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Landroid/os/Parcel;Landroid/os/Parcel;
 HSPLcom/android/server/pm/resolution/ComponentResolver$$ExternalSyntheticLambda0;-><init>()V
 HSPLcom/android/server/pm/resolution/ComponentResolver$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/pm/resolution/ComponentResolver$$ExternalSyntheticLambda1;-><init>()V
@@ -42291,11 +43807,11 @@
 HSPLcom/android/server/pm/resolution/ComponentResolver$1;->createSnapshot()Ljava/lang/Object;
 HSPLcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;-><init>(Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserNeedsBadgingCache;)V
 HSPLcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;-><init>(Lcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserNeedsBadgingCache;)V
-HSPLcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;->addActivity(Lcom/android/server/pm/Computer;Lcom/android/server/pm/pkg/component/ParsedActivity;Ljava/lang/String;Ljava/util/List;)V
+HSPLcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;->addActivity(Lcom/android/server/pm/Computer;Lcom/android/server/pm/pkg/component/ParsedActivity;Ljava/lang/String;Ljava/util/List;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;]Lcom/android/server/pm/pkg/component/ParsedIntentInfo;Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Lcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;Lcom/android/server/pm/resolution/ComponentResolver$ReceiverIntentResolver;,Lcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;
 HSPLcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;->addFilter(Lcom/android/server/pm/snapshot/PackageDataSnapshot;Landroid/util/Pair;)V
 HSPLcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;->allowFilterResult(Landroid/util/Pair;Ljava/util/List;)Z+]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;]Ljava/util/List;Ljava/util/ArrayList;
 HSPLcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;->allowFilterResult(Ljava/lang/Object;Ljava/util/List;)Z+]Lcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;Lcom/android/server/pm/resolution/ComponentResolver$ReceiverIntentResolver;,Lcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;
-PLcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;->dumpFilter(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/util/Pair;)V
+HPLcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;->dumpFilter(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/util/Pair;)V
 PLcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;->dumpFilter(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/Object;)V
 HPLcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;->dumpFilterLabel(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/Object;I)V+]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;]Ljava/io/PrintWriter;Lcom/android/internal/util/FastPrintWriter;]Lcom/android/server/pm/pkg/component/ParsedMainComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;
 HPLcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;->filterToLabel(Landroid/util/Pair;)Ljava/lang/Object;
@@ -42306,7 +43822,7 @@
 HSPLcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;->isPackageForFilter(Ljava/lang/String;Ljava/lang/Object;)Z+]Lcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;Lcom/android/server/pm/resolution/ComponentResolver$ReceiverIntentResolver;,Lcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;
 HSPLcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;->newArray(I)[Landroid/util/Pair;
 HSPLcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;->newArray(I)[Ljava/lang/Object;
-HSPLcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;->newResult(Lcom/android/server/pm/Computer;Landroid/util/Pair;IIJ)Landroid/content/pm/ResolveInfo;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/component/ParsedIntentInfo;Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;]Lcom/android/server/pm/UserNeedsBadgingCache;Lcom/android/server/pm/UserNeedsBadgingCache;]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerEngine;,Lcom/android/server/pm/ComputerLocked;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;
+HSPLcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;->newResult(Lcom/android/server/pm/Computer;Landroid/util/Pair;IIJ)Landroid/content/pm/ResolveInfo;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/pkg/PackageUserState;Lcom/android/server/pm/pkg/PackageUserStateImpl;]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/PackageSetting;]Lcom/android/server/pm/pkg/component/ParsedIntentInfo;Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;]Lcom/android/server/pm/UserNeedsBadgingCache;Lcom/android/server/pm/UserNeedsBadgingCache;]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Lcom/android/server/pm/Computer;Lcom/android/server/pm/ComputerLocked;,Lcom/android/server/pm/ComputerEngine;]Lcom/android/server/pm/pkg/PackageState;Lcom/android/server/pm/PackageSetting;
 HSPLcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;->newResult(Lcom/android/server/pm/Computer;Ljava/lang/Object;IIJ)Ljava/lang/Object;+]Lcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;Lcom/android/server/pm/resolution/ComponentResolver$ReceiverIntentResolver;,Lcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;
 HSPLcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;->queryIntent(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JI)Ljava/util/List;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;
 HSPLcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;->queryIntentForPackage(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JLjava/util/List;I)Ljava/util/List;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Lcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;Lcom/android/server/pm/resolution/ComponentResolver$ReceiverIntentResolver;,Lcom/android/server/pm/resolution/ComponentResolver$ActivityIntentResolver;]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -42333,6 +43849,8 @@
 HSPLcom/android/server/pm/resolution/ComponentResolver$ProviderIntentResolver;->addProvider(Lcom/android/server/pm/Computer;Lcom/android/server/pm/pkg/component/ParsedProvider;)V
 HPLcom/android/server/pm/resolution/ComponentResolver$ProviderIntentResolver;->allowFilterResult(Landroid/util/Pair;Ljava/util/List;)Z+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/pm/pkg/component/ParsedMainComponent;Lcom/android/server/pm/pkg/component/ParsedProviderImpl;]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedProviderImpl;
 HPLcom/android/server/pm/resolution/ComponentResolver$ProviderIntentResolver;->allowFilterResult(Ljava/lang/Object;Ljava/util/List;)Z+]Lcom/android/server/pm/resolution/ComponentResolver$ProviderIntentResolver;Lcom/android/server/pm/resolution/ComponentResolver$ProviderIntentResolver;
+PLcom/android/server/pm/resolution/ComponentResolver$ProviderIntentResolver;->dumpFilter(Ljava/io/PrintWriter;Ljava/lang/String;Landroid/util/Pair;)V
+PLcom/android/server/pm/resolution/ComponentResolver$ProviderIntentResolver;->dumpFilter(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/Object;)V
 PLcom/android/server/pm/resolution/ComponentResolver$ProviderIntentResolver;->dumpFilterLabel(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/Object;I)V
 PLcom/android/server/pm/resolution/ComponentResolver$ProviderIntentResolver;->filterToLabel(Landroid/util/Pair;)Ljava/lang/Object;
 PLcom/android/server/pm/resolution/ComponentResolver$ProviderIntentResolver;->filterToLabel(Ljava/lang/Object;)Ljava/lang/Object;
@@ -42347,7 +43865,7 @@
 HPLcom/android/server/pm/resolution/ComponentResolver$ProviderIntentResolver;->queryIntent(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JI)Ljava/util/List;
 HPLcom/android/server/pm/resolution/ComponentResolver$ProviderIntentResolver;->queryIntentForPackage(Lcom/android/server/pm/Computer;Landroid/content/Intent;Ljava/lang/String;JLjava/util/List;I)Ljava/util/List;
 HSPLcom/android/server/pm/resolution/ComponentResolver$ProviderIntentResolver;->removeProvider(Lcom/android/server/pm/pkg/component/ParsedProvider;)V
-PLcom/android/server/pm/resolution/ComponentResolver$ProviderIntentResolver;->sortResults(Ljava/util/List;)V
+HPLcom/android/server/pm/resolution/ComponentResolver$ProviderIntentResolver;->sortResults(Ljava/util/List;)V
 HSPLcom/android/server/pm/resolution/ComponentResolver$ReceiverIntentResolver;-><init>(Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserNeedsBadgingCache;)V
 HSPLcom/android/server/pm/resolution/ComponentResolver$ReceiverIntentResolver;-><init>(Lcom/android/server/pm/resolution/ComponentResolver$ReceiverIntentResolver;Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserNeedsBadgingCache;)V
 HSPLcom/android/server/pm/resolution/ComponentResolver$ServiceIntentResolver;-><init>(Lcom/android/server/pm/UserManagerService;)V
@@ -42398,9 +43916,9 @@
 HPLcom/android/server/pm/resolution/ComponentResolverBase;->dumpContentProviders(Lcom/android/server/pm/Computer;Ljava/io/PrintWriter;Lcom/android/server/pm/DumpState;Ljava/lang/String;)V
 PLcom/android/server/pm/resolution/ComponentResolverBase;->dumpProviderResolvers(Ljava/io/PrintWriter;Lcom/android/server/pm/DumpState;Ljava/lang/String;)V
 PLcom/android/server/pm/resolution/ComponentResolverBase;->dumpReceiverResolvers(Ljava/io/PrintWriter;Lcom/android/server/pm/DumpState;Ljava/lang/String;)V
-PLcom/android/server/pm/resolution/ComponentResolverBase;->dumpServicePermissions(Ljava/io/PrintWriter;Lcom/android/server/pm/DumpState;)V
+HPLcom/android/server/pm/resolution/ComponentResolverBase;->dumpServicePermissions(Ljava/io/PrintWriter;Lcom/android/server/pm/DumpState;)V
 PLcom/android/server/pm/resolution/ComponentResolverBase;->dumpServiceResolvers(Ljava/io/PrintWriter;Lcom/android/server/pm/DumpState;Ljava/lang/String;)V
-HSPLcom/android/server/pm/resolution/ComponentResolverBase;->getActivity(Landroid/content/ComponentName;)Lcom/android/server/pm/pkg/component/ParsedActivity;
+HSPLcom/android/server/pm/resolution/ComponentResolverBase;->getActivity(Landroid/content/ComponentName;)Lcom/android/server/pm/pkg/component/ParsedActivity;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/pm/resolution/ComponentResolverBase;->getProvider(Landroid/content/ComponentName;)Lcom/android/server/pm/pkg/component/ParsedProvider;
 HSPLcom/android/server/pm/resolution/ComponentResolverBase;->getReceiver(Landroid/content/ComponentName;)Lcom/android/server/pm/pkg/component/ParsedActivity;
 HSPLcom/android/server/pm/resolution/ComponentResolverBase;->getService(Landroid/content/ComponentName;)Lcom/android/server/pm/pkg/component/ParsedService;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
@@ -42454,22 +43972,24 @@
 HSPLcom/android/server/pm/verify/domain/DomainVerificationCollector;->collectAllWebDomains(Lcom/android/server/pm/parsing/pkg/AndroidPackage;)Landroid/util/ArraySet;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationCollector;->collectDomains(Lcom/android/server/pm/parsing/pkg/AndroidPackage;ZZ)Landroid/util/ArraySet;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationCollector;->collectDomains(Lcom/android/server/pm/parsing/pkg/AndroidPackage;ZZLjava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;
-HSPLcom/android/server/pm/verify/domain/DomainVerificationCollector;->collectDomainsInternal(Lcom/android/server/pm/parsing/pkg/AndroidPackage;ZZLjava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;+]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;]Ljava/util/function/BiFunction;Lcom/android/server/pm/verify/domain/DomainVerificationCollector$$ExternalSyntheticLambda0;]Lcom/android/server/pm/pkg/component/ParsedIntentInfo;Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;]Ljava/util/List;Ljava/util/ArrayList;,Ljava/util/Collections$EmptyList;]Lcom/android/server/pm/verify/domain/DomainVerificationCollector;Lcom/android/server/pm/verify/domain/DomainVerificationCollector;]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/IntentFilter$AuthorityEntry;Landroid/content/IntentFilter$AuthorityEntry;
+HSPLcom/android/server/pm/verify/domain/DomainVerificationCollector;->collectDomainsInternal(Lcom/android/server/pm/parsing/pkg/AndroidPackage;ZZLjava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;+]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;]Ljava/util/function/BiFunction;Lcom/android/server/pm/verify/domain/DomainVerificationCollector$$ExternalSyntheticLambda0;]Lcom/android/server/pm/pkg/component/ParsedIntentInfo;Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Lcom/android/server/pm/verify/domain/DomainVerificationCollector;Lcom/android/server/pm/verify/domain/DomainVerificationCollector;]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/IntentFilter$AuthorityEntry;Landroid/content/IntentFilter$AuthorityEntry;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationCollector;->collectDomainsLegacy(Lcom/android/server/pm/parsing/pkg/AndroidPackage;ZZLjava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;+]Ljava/util/function/BiFunction;Lcom/android/server/pm/verify/domain/DomainVerificationCollector$$ExternalSyntheticLambda0;]Lcom/android/server/pm/pkg/component/ParsedComponent;Lcom/android/server/pm/pkg/component/ParsedActivityImpl;]Lcom/android/server/pm/pkg/component/ParsedIntentInfo;Lcom/android/server/pm/pkg/component/ParsedIntentInfoImpl;]Lcom/android/server/pm/verify/domain/DomainVerificationCollector;Lcom/android/server/pm/verify/domain/DomainVerificationCollector;]Ljava/util/List;Ljava/util/ArrayList;,Ljava/util/Collections$EmptyList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/SystemConfig;Lcom/android/server/SystemConfig;]Landroid/content/IntentFilter;Landroid/content/IntentFilter;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/IntentFilter$AuthorityEntry;Landroid/content/IntentFilter$AuthorityEntry;
 PLcom/android/server/pm/verify/domain/DomainVerificationCollector;->collectInvalidAutoVerifyDomains(Lcom/android/server/pm/parsing/pkg/AndroidPackage;)Landroid/util/ArraySet;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationCollector;->collectValidAutoVerifyDomains(Lcom/android/server/pm/parsing/pkg/AndroidPackage;)Landroid/util/ArraySet;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationCollector;->isValidHost(Ljava/lang/String;)Z+]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;
-HSPLcom/android/server/pm/verify/domain/DomainVerificationCollector;->lambda$static$0(Landroid/util/ArraySet;Ljava/lang/String;)Ljava/lang/Boolean;
+HSPLcom/android/server/pm/verify/domain/DomainVerificationCollector;->lambda$static$0(Landroid/util/ArraySet;Ljava/lang/String;)Ljava/lang/Boolean;+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationDebug;-><init>(Lcom/android/server/pm/verify/domain/DomainVerificationCollector;)V
-PLcom/android/server/pm/verify/domain/DomainVerificationDebug;->printState(Landroid/util/IndentingPrintWriter;Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;ILcom/android/server/pm/verify/domain/models/DomainVerificationInternalUserState;Landroid/util/ArraySet;Landroid/util/ArraySet;Z)Z
+HPLcom/android/server/pm/verify/domain/DomainVerificationDebug;->printState(Landroid/util/IndentingPrintWriter;Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;ILcom/android/server/pm/verify/domain/models/DomainVerificationInternalUserState;Landroid/util/ArraySet;Landroid/util/ArraySet;Z)Z
 HPLcom/android/server/pm/verify/domain/DomainVerificationDebug;->printState(Landroid/util/IndentingPrintWriter;Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;Lcom/android/server/pm/parsing/pkg/AndroidPackage;Landroid/util/ArrayMap;Z)Z
 PLcom/android/server/pm/verify/domain/DomainVerificationDebug;->printState(Landroid/util/IndentingPrintWriter;Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;Lcom/android/server/pm/parsing/pkg/AndroidPackage;Ljava/lang/Integer;Landroid/util/ArraySet;Z)V
 PLcom/android/server/pm/verify/domain/DomainVerificationDebug;->printState(Landroid/util/IndentingPrintWriter;Ljava/lang/String;Ljava/lang/Integer;Lcom/android/server/pm/Computer;Lcom/android/server/pm/verify/domain/models/DomainVerificationStateMap;)V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationEnforcer;-><init>(Landroid/content/Context;)V
-PLcom/android/server/pm/verify/domain/DomainVerificationEnforcer;->assertApprovedQuerent(ILcom/android/server/pm/verify/domain/proxy/DomainVerificationProxy;)V
+HPLcom/android/server/pm/verify/domain/DomainVerificationEnforcer;->assertApprovedQuerent(ILcom/android/server/pm/verify/domain/proxy/DomainVerificationProxy;)V
+PLcom/android/server/pm/verify/domain/DomainVerificationEnforcer;->assertApprovedUserSelector(IILjava/lang/String;I)Z
 PLcom/android/server/pm/verify/domain/DomainVerificationEnforcer;->assertApprovedUserStateQuerent(IILjava/lang/String;I)Z
-PLcom/android/server/pm/verify/domain/DomainVerificationEnforcer;->assertApprovedVerifier(ILcom/android/server/pm/verify/domain/proxy/DomainVerificationProxy;)V
+HPLcom/android/server/pm/verify/domain/DomainVerificationEnforcer;->assertApprovedVerifier(ILcom/android/server/pm/verify/domain/proxy/DomainVerificationProxy;)V
 PLcom/android/server/pm/verify/domain/DomainVerificationEnforcer;->assertInternal(I)V
+PLcom/android/server/pm/verify/domain/DomainVerificationEnforcer;->assertOwnerQuerent(III)V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationEnforcer;->callerIsLegacyUserSelector(IILjava/lang/String;I)Z
 HSPLcom/android/server/pm/verify/domain/DomainVerificationEnforcer;->setCallback(Lcom/android/server/pm/verify/domain/DomainVerificationEnforcer$Callback;)V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationLegacySettings$LegacyState;-><init>()V
@@ -42491,8 +44011,11 @@
 HSPLcom/android/server/pm/verify/domain/DomainVerificationManagerStub;-><init>(Lcom/android/server/pm/verify/domain/DomainVerificationService;)V
 PLcom/android/server/pm/verify/domain/DomainVerificationManagerStub;->getDomainVerificationInfo(Ljava/lang/String;)Landroid/content/pm/verify/domain/DomainVerificationInfo;
 PLcom/android/server/pm/verify/domain/DomainVerificationManagerStub;->getDomainVerificationUserState(Ljava/lang/String;I)Landroid/content/pm/verify/domain/DomainVerificationUserState;
+PLcom/android/server/pm/verify/domain/DomainVerificationManagerStub;->getOwnersForDomain(Ljava/lang/String;I)Ljava/util/List;
 PLcom/android/server/pm/verify/domain/DomainVerificationManagerStub;->queryValidVerificationPackageNames()Ljava/util/List;
+PLcom/android/server/pm/verify/domain/DomainVerificationManagerStub;->setDomainVerificationLinkHandlingAllowed(Ljava/lang/String;ZI)V
 PLcom/android/server/pm/verify/domain/DomainVerificationManagerStub;->setDomainVerificationStatus(Ljava/lang/String;Landroid/content/pm/verify/domain/DomainSet;I)I
+PLcom/android/server/pm/verify/domain/DomainVerificationManagerStub;->setDomainVerificationUserSelection(Ljava/lang/String;Landroid/content/pm/verify/domain/DomainSet;ZI)I
 HSPLcom/android/server/pm/verify/domain/DomainVerificationPersistence$ReadResult;-><init>(Landroid/util/ArrayMap;Landroid/util/ArrayMap;)V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationPersistence;->createPkgStateFromXml(Lcom/android/server/pm/SettingsXml$ReadSection;)Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationPersistence;->createUserStateFromXml(Lcom/android/server/pm/SettingsXml$ReadSection;)Lcom/android/server/pm/verify/domain/models/DomainVerificationInternalUserState;
@@ -42502,13 +44025,15 @@
 HSPLcom/android/server/pm/verify/domain/DomainVerificationPersistence;->readPackageStates(Lcom/android/server/pm/SettingsXml$ReadSection;Landroid/util/ArrayMap;)V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationPersistence;->readUserStates(Lcom/android/server/pm/SettingsXml$ReadSection;Landroid/util/SparseArray;)V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationPersistence;->writePackageStates(Lcom/android/server/pm/SettingsXml$WriteSection;Ljava/util/Collection;ILjava/util/function/Function;)V+]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;,Landroid/util/ArraySet;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
-HSPLcom/android/server/pm/verify/domain/DomainVerificationPersistence;->writePkgStateToXml(Lcom/android/server/pm/SettingsXml$WriteSection;Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;ILjava/util/function/Function;)V+]Lcom/android/server/pm/SettingsXml$WriteSection;Lcom/android/server/pm/SettingsXml$WriteSectionImpl;]Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;]Ljava/util/UUID;Ljava/util/UUID;]Ljava/util/function/Function;Lcom/android/server/pm/verify/domain/DomainVerificationService$$ExternalSyntheticLambda0;
+HSPLcom/android/server/pm/verify/domain/DomainVerificationPersistence;->writePkgStateToXml(Lcom/android/server/pm/SettingsXml$WriteSection;Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;ILjava/util/function/Function;)V+]Ljava/util/function/Function;Lcom/android/server/pm/verify/domain/DomainVerificationService$$ExternalSyntheticLambda0;]Lcom/android/server/pm/SettingsXml$WriteSection;Lcom/android/server/pm/SettingsXml$WriteSectionImpl;]Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;]Ljava/util/UUID;Ljava/util/UUID;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationPersistence;->writeStateMap(Lcom/android/server/pm/SettingsXml$WriteSection;Landroid/util/ArrayMap;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/pm/SettingsXml$WriteSection;Lcom/android/server/pm/SettingsXml$WriteSectionImpl;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationPersistence;->writeToXml(Landroid/util/TypedXmlSerializer;Lcom/android/server/pm/verify/domain/models/DomainVerificationStateMap;Landroid/util/ArrayMap;Landroid/util/ArrayMap;ILjava/util/function/Function;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/pm/verify/domain/models/DomainVerificationStateMap;Lcom/android/server/pm/verify/domain/models/DomainVerificationStateMap;]Lcom/android/server/pm/SettingsXml$Serializer;Lcom/android/server/pm/SettingsXml$Serializer;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/SettingsXml$WriteSection;Lcom/android/server/pm/SettingsXml$WriteSectionImpl;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationPersistence;->writeUserStateToXml(Lcom/android/server/pm/SettingsXml$WriteSection;Lcom/android/server/pm/verify/domain/models/DomainVerificationInternalUserState;)V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationPersistence;->writeUserStates(Lcom/android/server/pm/SettingsXml$WriteSection;ILandroid/util/SparseArray;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/pm/SettingsXml$WriteSection;Lcom/android/server/pm/SettingsXml$WriteSectionImpl;
 PLcom/android/server/pm/verify/domain/DomainVerificationService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/pm/Computer;)V
 HPLcom/android/server/pm/verify/domain/DomainVerificationService$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+PLcom/android/server/pm/verify/domain/DomainVerificationService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/pm/Computer;I)V
+PLcom/android/server/pm/verify/domain/DomainVerificationService$$ExternalSyntheticLambda1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 PLcom/android/server/pm/verify/domain/DomainVerificationService$GetAttachedResult;-><init>(Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;I)V
 PLcom/android/server/pm/verify/domain/DomainVerificationService$GetAttachedResult;->error(I)Lcom/android/server/pm/verify/domain/DomainVerificationService$GetAttachedResult;
 PLcom/android/server/pm/verify/domain/DomainVerificationService$GetAttachedResult;->getErrorCode()I
@@ -42516,6 +44041,7 @@
 PLcom/android/server/pm/verify/domain/DomainVerificationService$GetAttachedResult;->isError()Z
 PLcom/android/server/pm/verify/domain/DomainVerificationService$GetAttachedResult;->success(Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;)Lcom/android/server/pm/verify/domain/DomainVerificationService$GetAttachedResult;
 HPLcom/android/server/pm/verify/domain/DomainVerificationService;->$r8$lambda$5TXYMKtowpXkLeRUMtNw1XMn__o(Lcom/android/server/pm/Computer;Ljava/lang/String;)Ljava/lang/String;
+PLcom/android/server/pm/verify/domain/DomainVerificationService;->$r8$lambda$iyW6jE-1PNYJ8W0myEfpP49cIEo(Lcom/android/server/pm/Computer;ILjava/lang/String;Ljava/lang/String;)I
 HSPLcom/android/server/pm/verify/domain/DomainVerificationService;-><init>(Landroid/content/Context;Lcom/android/server/SystemConfig;Lcom/android/server/compat/PlatformCompat;)V
 PLcom/android/server/pm/verify/domain/DomainVerificationService;->addIfShouldBroadcastLocked(Ljava/util/Collection;Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;Z)V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationService;->addPackage(Lcom/android/server/pm/pkg/PackageStateInternal;)V
@@ -42527,20 +44053,24 @@
 PLcom/android/server/pm/verify/domain/DomainVerificationService;->clearPackageForUser(Ljava/lang/String;I)V
 PLcom/android/server/pm/verify/domain/DomainVerificationService;->clearUser(I)V
 PLcom/android/server/pm/verify/domain/DomainVerificationService;->fillInfoMapForSamePackage(Landroid/util/ArrayMap;Ljava/lang/String;I)V
-PLcom/android/server/pm/verify/domain/DomainVerificationService;->fillMapWithApprovalLevels(Landroid/util/ArrayMap;Ljava/lang/String;ILjava/util/function/Function;)I
+HPLcom/android/server/pm/verify/domain/DomainVerificationService;->fillMapWithApprovalLevels(Landroid/util/ArrayMap;Ljava/lang/String;ILjava/util/function/Function;)I
 HPLcom/android/server/pm/verify/domain/DomainVerificationService;->filterToApprovedApp(Landroid/content/Intent;Ljava/util/List;ILjava/util/function/Function;)Landroid/util/Pair;
-PLcom/android/server/pm/verify/domain/DomainVerificationService;->filterToLastDeclared(Ljava/util/List;Ljava/util/function/Function;)V
-PLcom/android/server/pm/verify/domain/DomainVerificationService;->filterToLastFirstInstalled(Landroid/util/ArrayMap;Ljava/util/function/Function;)V
+HPLcom/android/server/pm/verify/domain/DomainVerificationService;->filterToLastDeclared(Ljava/util/List;Ljava/util/function/Function;)V
+HPLcom/android/server/pm/verify/domain/DomainVerificationService;->filterToLastFirstInstalled(Landroid/util/ArrayMap;Ljava/util/function/Function;)V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationService;->generateNewId()Ljava/util/UUID;
-PLcom/android/server/pm/verify/domain/DomainVerificationService;->getAndValidateAttachedLocked(Ljava/util/UUID;Ljava/util/Set;ZILjava/lang/Integer;Lcom/android/server/pm/Computer;)Lcom/android/server/pm/verify/domain/DomainVerificationService$GetAttachedResult;
+HPLcom/android/server/pm/verify/domain/DomainVerificationService;->getAndValidateAttachedLocked(Ljava/util/UUID;Ljava/util/Set;ZILjava/lang/Integer;Lcom/android/server/pm/Computer;)Lcom/android/server/pm/verify/domain/DomainVerificationService$GetAttachedResult;
+PLcom/android/server/pm/verify/domain/DomainVerificationService;->getApprovedPackagesLocked(Ljava/lang/String;IILcom/android/server/pm/Computer;)Landroid/util/Pair;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationService;->getCollector()Lcom/android/server/pm/verify/domain/DomainVerificationCollector;
 HPLcom/android/server/pm/verify/domain/DomainVerificationService;->getDomainVerificationInfo(Ljava/lang/String;)Landroid/content/pm/verify/domain/DomainVerificationInfo;
 PLcom/android/server/pm/verify/domain/DomainVerificationService;->getDomainVerificationInfoId(Ljava/lang/String;)Ljava/util/UUID;
 HPLcom/android/server/pm/verify/domain/DomainVerificationService;->getDomainVerificationUserState(Ljava/lang/String;I)Landroid/content/pm/verify/domain/DomainVerificationUserState;
+PLcom/android/server/pm/verify/domain/DomainVerificationService;->getOwnersForDomain(Ljava/lang/String;I)Ljava/util/List;
+PLcom/android/server/pm/verify/domain/DomainVerificationService;->getOwnersForDomainInternal(Ljava/lang/String;ZILcom/android/server/pm/Computer;)Landroid/util/SparseArray;
 PLcom/android/server/pm/verify/domain/DomainVerificationService;->getProxy()Lcom/android/server/pm/verify/domain/proxy/DomainVerificationProxy;
 PLcom/android/server/pm/verify/domain/DomainVerificationService;->getShell()Lcom/android/server/pm/verify/domain/DomainVerificationShell;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationService;->hasRealVerifier()Z
-PLcom/android/server/pm/verify/domain/DomainVerificationService;->indexOfIntentFilterEntry(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Landroid/content/pm/ResolveInfo;)I
+HPLcom/android/server/pm/verify/domain/DomainVerificationService;->indexOfIntentFilterEntry(Lcom/android/server/pm/parsing/pkg/AndroidPackage;Landroid/content/pm/ResolveInfo;)I
+PLcom/android/server/pm/verify/domain/DomainVerificationService;->lambda$getOwnersForDomainInternal$0(Lcom/android/server/pm/Computer;ILjava/lang/String;Ljava/lang/String;)I
 HPLcom/android/server/pm/verify/domain/DomainVerificationService;->lambda$writeSettings$1(Lcom/android/server/pm/Computer;Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationService;->migrateState(Lcom/android/server/pm/pkg/PackageStateInternal;Lcom/android/server/pm/pkg/PackageStateInternal;)V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationService;->onBootPhase(I)V
@@ -42550,13 +44080,16 @@
 PLcom/android/server/pm/verify/domain/DomainVerificationService;->queryValidVerificationPackageNames()Ljava/util/List;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationService;->readLegacySettings(Landroid/util/TypedXmlPullParser;)V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationService;->readSettings(Lcom/android/server/pm/Computer;Landroid/util/TypedXmlPullParser;)V
-HPLcom/android/server/pm/verify/domain/DomainVerificationService;->removeUserStatesForDomain(Ljava/lang/String;)V+]Lcom/android/server/pm/verify/domain/models/DomainVerificationStateMap;Lcom/android/server/pm/verify/domain/models/DomainVerificationStateMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/pm/verify/domain/models/DomainVerificationInternalUserState;Lcom/android/server/pm/verify/domain/models/DomainVerificationInternalUserState;]Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;
+HPLcom/android/server/pm/verify/domain/DomainVerificationService;->removeUserStatesForDomain(Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;Ljava/lang/String;)V+]Lcom/android/server/pm/verify/domain/models/DomainVerificationStateMap;Lcom/android/server/pm/verify/domain/models/DomainVerificationStateMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;
+PLcom/android/server/pm/verify/domain/DomainVerificationService;->revokeOtherUserSelectionsLocked(Lcom/android/server/pm/verify/domain/models/DomainVerificationInternalUserState;ILjava/util/Set;Lcom/android/server/pm/Computer;)I
 PLcom/android/server/pm/verify/domain/DomainVerificationService;->runMessage(ILjava/lang/Object;)Z
-PLcom/android/server/pm/verify/domain/DomainVerificationService;->sendBroadcast(Ljava/lang/String;)V
-PLcom/android/server/pm/verify/domain/DomainVerificationService;->sendBroadcast(Ljava/util/Set;)V
+HSPLcom/android/server/pm/verify/domain/DomainVerificationService;->sendBroadcast(Ljava/lang/String;)V
+HSPLcom/android/server/pm/verify/domain/DomainVerificationService;->sendBroadcast(Ljava/util/Set;)V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationService;->setConnection(Lcom/android/server/pm/verify/domain/DomainVerificationManagerInternal$Connection;)V
+PLcom/android/server/pm/verify/domain/DomainVerificationService;->setDomainVerificationLinkHandlingAllowed(Ljava/lang/String;ZI)V
 PLcom/android/server/pm/verify/domain/DomainVerificationService;->setDomainVerificationStatus(Ljava/util/UUID;Ljava/util/Set;I)I
 HPLcom/android/server/pm/verify/domain/DomainVerificationService;->setDomainVerificationStatusInternal(ILjava/util/UUID;Ljava/util/Set;I)I
+PLcom/android/server/pm/verify/domain/DomainVerificationService;->setDomainVerificationUserSelection(Ljava/util/UUID;Ljava/util/Set;ZI)I
 HSPLcom/android/server/pm/verify/domain/DomainVerificationService;->setLegacyUserState(Ljava/lang/String;II)Z
 HSPLcom/android/server/pm/verify/domain/DomainVerificationService;->setProxy(Lcom/android/server/pm/verify/domain/proxy/DomainVerificationProxy;)V
 PLcom/android/server/pm/verify/domain/DomainVerificationService;->shouldReBroadcastPackage(Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;)Z
@@ -42571,27 +44104,32 @@
 PLcom/android/server/pm/verify/domain/DomainVerificationSettings;->removeUser(I)V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationSettings;->writeSettings(Landroid/util/TypedXmlSerializer;Lcom/android/server/pm/verify/domain/models/DomainVerificationStateMap;ILjava/util/function/Function;)V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationShell;-><init>(Lcom/android/server/pm/verify/domain/DomainVerificationShell$Callback;)V
+PLcom/android/server/pm/verify/domain/DomainVerificationShell;->printHelp(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationUtils$$ExternalSyntheticLambda0;-><init>()V
 PLcom/android/server/pm/verify/domain/DomainVerificationUtils$$ExternalSyntheticLambda0;->get()Ljava/lang/Object;
 PLcom/android/server/pm/verify/domain/DomainVerificationUtils;->$r8$lambda$QRJ8rMpaFaI6JUONuc9XWQqiJNE()Ljava/util/regex/Matcher;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationUtils;-><clinit>()V
 HSPLcom/android/server/pm/verify/domain/DomainVerificationUtils;->buildMockAppInfo(Lcom/android/server/pm/parsing/pkg/AndroidPackage;)Landroid/content/pm/ApplicationInfo;
 HSPLcom/android/server/pm/verify/domain/DomainVerificationUtils;->isChangeEnabled(Lcom/android/server/compat/PlatformCompat;Lcom/android/server/pm/parsing/pkg/AndroidPackage;J)Z
-HPLcom/android/server/pm/verify/domain/DomainVerificationUtils;->isDomainVerificationIntent(Landroid/content/Intent;J)Z+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;]Landroid/net/Uri;Landroid/net/Uri$OpaqueUri;,Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;]Landroid/content/Intent;Landroid/content/Intent;
+HPLcom/android/server/pm/verify/domain/DomainVerificationUtils;->isDomainVerificationIntent(Landroid/content/Intent;J)Z+]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;]Ljava/util/regex/Matcher;Ljava/util/regex/Matcher;]Landroid/net/Uri;Landroid/net/Uri$OpaqueUri;,Landroid/net/Uri$StringUri;,Landroid/net/Uri$HierarchicalUri;]Landroid/content/Intent;Landroid/content/Intent;
 PLcom/android/server/pm/verify/domain/DomainVerificationUtils;->lambda$static$0()Ljava/util/regex/Matcher;
+PLcom/android/server/pm/verify/domain/models/DomainVerificationInternalUserState;-><init>(I)V
 HSPLcom/android/server/pm/verify/domain/models/DomainVerificationInternalUserState;-><init>(ILandroid/util/ArraySet;Z)V
+PLcom/android/server/pm/verify/domain/models/DomainVerificationInternalUserState;->addHosts(Ljava/util/Set;)Lcom/android/server/pm/verify/domain/models/DomainVerificationInternalUserState;
 HSPLcom/android/server/pm/verify/domain/models/DomainVerificationInternalUserState;->getEnabledHosts()Landroid/util/ArraySet;
 HSPLcom/android/server/pm/verify/domain/models/DomainVerificationInternalUserState;->getUserId()I
 HSPLcom/android/server/pm/verify/domain/models/DomainVerificationInternalUserState;->hashCode()I
 HSPLcom/android/server/pm/verify/domain/models/DomainVerificationInternalUserState;->isLinkHandlingAllowed()Z
 PLcom/android/server/pm/verify/domain/models/DomainVerificationInternalUserState;->removeHost(Ljava/lang/String;)Lcom/android/server/pm/verify/domain/models/DomainVerificationInternalUserState;
 HSPLcom/android/server/pm/verify/domain/models/DomainVerificationInternalUserState;->retainHosts(Ljava/util/Set;)Lcom/android/server/pm/verify/domain/models/DomainVerificationInternalUserState;
+PLcom/android/server/pm/verify/domain/models/DomainVerificationInternalUserState;->setLinkHandlingAllowed(Z)Lcom/android/server/pm/verify/domain/models/DomainVerificationInternalUserState;
 HSPLcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;-><init>(Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;Ljava/util/UUID;Z)V
 HSPLcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;-><init>(Ljava/lang/String;Ljava/util/UUID;Z)V
 HSPLcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;-><init>(Ljava/lang/String;Ljava/util/UUID;ZLandroid/util/ArrayMap;Landroid/util/SparseArray;Ljava/lang/String;)V
-HSPLcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;
 HSPLcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;->getBackupSignatureHash()Ljava/lang/String;
 HSPLcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;->getId()Ljava/util/UUID;
+PLcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;->getOrCreateUserState(I)Lcom/android/server/pm/verify/domain/models/DomainVerificationInternalUserState;
 HSPLcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;->getPackageName()Ljava/lang/String;
 HSPLcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;->getStateMap()Landroid/util/ArrayMap;
 PLcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;->getUserState(I)Lcom/android/server/pm/verify/domain/models/DomainVerificationInternalUserState;
@@ -42599,7 +44137,7 @@
 HSPLcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;->hashCode()I+]Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;Lcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;
 HSPLcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;->isHasAutoVerifyDomains()Z
 PLcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;->removeUser(I)V
-HSPLcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;->userStatesHashCode()I
+HSPLcom/android/server/pm/verify/domain/models/DomainVerificationPkgState;->userStatesHashCode()I+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/pm/verify/domain/models/DomainVerificationStateMap;-><init>()V
 HSPLcom/android/server/pm/verify/domain/models/DomainVerificationStateMap;->get(Ljava/lang/String;)Ljava/lang/Object;
 PLcom/android/server/pm/verify/domain/models/DomainVerificationStateMap;->get(Ljava/util/UUID;)Ljava/lang/Object;
@@ -42640,8 +44178,8 @@
 PLcom/android/server/policy/AppOpsPolicy;->-$$Nest$mupdateActivityRecognizerTags(Lcom/android/server/policy/AppOpsPolicy;Ljava/lang/String;)V
 HSPLcom/android/server/policy/AppOpsPolicy;-><clinit>()V
 HSPLcom/android/server/policy/AppOpsPolicy;-><init>(Landroid/content/Context;)V
-HPLcom/android/server/policy/AppOpsPolicy;->checkAudioOperation(IIILjava/lang/String;Lcom/android/internal/util/function/QuadFunction;)I
-HSPLcom/android/server/policy/AppOpsPolicy;->checkOperation(IILjava/lang/String;Ljava/lang/String;ZLcom/android/internal/util/function/QuintFunction;)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/internal/util/function/QuintFunction;Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher$$ExternalSyntheticLambda8;,Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher$$ExternalSyntheticLambda9;]Lcom/android/server/policy/AppOpsPolicy;Lcom/android/server/policy/AppOpsPolicy;
+HPLcom/android/server/policy/AppOpsPolicy;->checkAudioOperation(IIILjava/lang/String;Lcom/android/internal/util/function/QuadFunction;)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/internal/util/function/QuadFunction;Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher$$ExternalSyntheticLambda15;
+HSPLcom/android/server/policy/AppOpsPolicy;->checkOperation(IILjava/lang/String;Ljava/lang/String;ZLcom/android/internal/util/function/QuintFunction;)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/internal/util/function/QuintFunction;Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher$$ExternalSyntheticLambda9;,Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher$$ExternalSyntheticLambda8;]Lcom/android/server/policy/AppOpsPolicy;Lcom/android/server/policy/AppOpsPolicy;
 PLcom/android/server/policy/AppOpsPolicy;->dumpTags(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/policy/AppOpsPolicy;->finishOperation(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;Lcom/android/internal/util/function/QuintConsumer;)V+]Lcom/android/internal/util/function/QuintConsumer;Lcom/android/server/appop/AppOpsService$CheckOpsDelegateDispatcher$$ExternalSyntheticLambda13;]Lcom/android/server/policy/AppOpsPolicy;Lcom/android/server/policy/AppOpsPolicy;
 PLcom/android/server/policy/AppOpsPolicy;->finishProxyOperation(ILandroid/content/AttributionSource;ZLcom/android/internal/util/function/TriFunction;)V
@@ -42699,19 +44237,19 @@
 HSPLcom/android/server/policy/DisplayFoldController;-><init>(Landroid/content/Context;Lcom/android/server/wm/WindowManagerInternal;Landroid/hardware/display/DisplayManagerInternal;ILandroid/graphics/Rect;Landroid/os/Handler;)V
 HSPLcom/android/server/policy/DisplayFoldController;->create(Landroid/content/Context;I)Lcom/android/server/policy/DisplayFoldController;
 PLcom/android/server/policy/DisplayFoldController;->finishedGoingToSleep()V
-HPLcom/android/server/policy/DisplayFoldController;->finishedWakingUp()V
+HSPLcom/android/server/policy/DisplayFoldController;->finishedWakingUp()V
 HSPLcom/android/server/policy/DisplayFoldController;->lambda$new$0(Ljava/lang/Boolean;)V
-HPLcom/android/server/policy/DisplayFoldController;->onDefaultDisplayFocusChanged(Ljava/lang/String;)V
+HSPLcom/android/server/policy/DisplayFoldController;->onDefaultDisplayFocusChanged(Ljava/lang/String;)V
 HSPLcom/android/server/policy/DisplayFoldController;->setDeviceFolded(Z)V
 HSPLcom/android/server/policy/DisplayFoldDurationLogger;-><init>()V
 HSPLcom/android/server/policy/DisplayFoldDurationLogger;->isOn()Z
 HPLcom/android/server/policy/DisplayFoldDurationLogger;->log()V
 HSPLcom/android/server/policy/DisplayFoldDurationLogger;->logFocusedAppWithFoldState(ZLjava/lang/String;)V
 HPLcom/android/server/policy/DisplayFoldDurationLogger;->onFinishedGoingToSleep()V
-HPLcom/android/server/policy/DisplayFoldDurationLogger;->onFinishedWakingUp(Ljava/lang/Boolean;)V
+HSPLcom/android/server/policy/DisplayFoldDurationLogger;->onFinishedWakingUp(Ljava/lang/Boolean;)V
 HSPLcom/android/server/policy/DisplayFoldDurationLogger;->setDeviceFolded(Z)V
 HPLcom/android/server/policy/EventLogTags;->writeInterceptPower(Ljava/lang/String;II)V
-PLcom/android/server/policy/EventLogTags;->writeScreenToggled(I)V
+HSPLcom/android/server/policy/EventLogTags;->writeScreenToggled(I)V
 PLcom/android/server/policy/GlobalActions$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/policy/GlobalActions;)V
 PLcom/android/server/policy/GlobalActions$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/policy/GlobalActions$1;-><init>(Lcom/android/server/policy/GlobalActions;)V
@@ -42728,7 +44266,7 @@
 PLcom/android/server/policy/GlobalActions;->showDialog(ZZ)V
 HSPLcom/android/server/policy/GlobalKeyManager;-><init>(Landroid/content/Context;)V
 PLcom/android/server/policy/GlobalKeyManager;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
-PLcom/android/server/policy/GlobalKeyManager;->handleGlobalKey(Landroid/content/Context;ILandroid/view/KeyEvent;)Z
+HPLcom/android/server/policy/GlobalKeyManager;->handleGlobalKey(Landroid/content/Context;ILandroid/view/KeyEvent;)Z
 HSPLcom/android/server/policy/GlobalKeyManager;->loadGlobalKeys(Landroid/content/Context;)V
 HPLcom/android/server/policy/GlobalKeyManager;->shouldHandleGlobalKey(I)Z
 PLcom/android/server/policy/KeyCombinationManager$$ExternalSyntheticLambda0;-><init>()V
@@ -42746,7 +44284,7 @@
 PLcom/android/server/policy/KeyCombinationManager$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/policy/KeyCombinationManager$TwoKeysCombinationRule;)V
 PLcom/android/server/policy/KeyCombinationManager$$ExternalSyntheticLambda6;->run()V
 HSPLcom/android/server/policy/KeyCombinationManager$TwoKeysCombinationRule;-><init>(II)V
-PLcom/android/server/policy/KeyCombinationManager$TwoKeysCombinationRule;->getKeyInterceptDelayMs()J
+HPLcom/android/server/policy/KeyCombinationManager$TwoKeysCombinationRule;->getKeyInterceptDelayMs()J
 PLcom/android/server/policy/KeyCombinationManager$TwoKeysCombinationRule;->preCondition()Z
 HPLcom/android/server/policy/KeyCombinationManager$TwoKeysCombinationRule;->shouldInterceptKey(I)Z
 PLcom/android/server/policy/KeyCombinationManager$TwoKeysCombinationRule;->shouldInterceptKeys(Landroid/util/SparseLongArray;)Z
@@ -42761,10 +44299,10 @@
 PLcom/android/server/policy/KeyCombinationManager;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
 HPLcom/android/server/policy/KeyCombinationManager;->forAllActiveRules(Lcom/android/internal/util/ToBooleanFunction;)Z
 HPLcom/android/server/policy/KeyCombinationManager;->forAllRules(Ljava/util/ArrayList;Ljava/util/function/Consumer;)V
-HPLcom/android/server/policy/KeyCombinationManager;->getKeyInterceptTimeout(I)J
+HPLcom/android/server/policy/KeyCombinationManager;->getKeyInterceptTimeout(I)J+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Lcom/android/server/policy/KeyCombinationManager$TwoKeysCombinationRule;Lcom/android/server/policy/PhoneWindowManager$9;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HPLcom/android/server/policy/KeyCombinationManager;->interceptKey(Landroid/view/KeyEvent;Z)Z
 HPLcom/android/server/policy/KeyCombinationManager;->interceptKeyLocked(Landroid/view/KeyEvent;Z)Z
-PLcom/android/server/policy/KeyCombinationManager;->isKeyConsumed(Landroid/view/KeyEvent;)Z
+HPLcom/android/server/policy/KeyCombinationManager;->isKeyConsumed(Landroid/view/KeyEvent;)Z
 HPLcom/android/server/policy/KeyCombinationManager;->isPowerKeyIntercepted()Z
 PLcom/android/server/policy/KeyCombinationManager;->lambda$dump$4(Ljava/io/PrintWriter;Ljava/lang/String;Lcom/android/server/policy/KeyCombinationManager$TwoKeysCombinationRule;)V
 PLcom/android/server/policy/KeyCombinationManager;->lambda$interceptKeyLocked$0(Lcom/android/server/policy/KeyCombinationManager$TwoKeysCombinationRule;)V
@@ -42836,12 +44374,12 @@
 HSPLcom/android/server/policy/PermissionPolicyService$$ExternalSyntheticLambda0;->onRuntimePermissionStateChanged(Ljava/lang/String;I)V
 HSPLcom/android/server/policy/PermissionPolicyService$$ExternalSyntheticLambda1;-><init>(Landroid/permission/PermissionControllerManager;)V
 PLcom/android/server/policy/PermissionPolicyService$$ExternalSyntheticLambda1;->run()V
-PLcom/android/server/policy/PermissionPolicyService$$ExternalSyntheticLambda2;-><init>()V
-HPLcom/android/server/policy/PermissionPolicyService$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;Ljava/lang/Object;)V+]Ljava/lang/Integer;Ljava/lang/Integer;
+HSPLcom/android/server/policy/PermissionPolicyService$$ExternalSyntheticLambda2;-><init>()V
+HSPLcom/android/server/policy/PermissionPolicyService$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;Ljava/lang/Object;)V+]Ljava/lang/Integer;Ljava/lang/Integer;
 HSPLcom/android/server/policy/PermissionPolicyService$$ExternalSyntheticLambda3;-><init>()V
 HSPLcom/android/server/policy/PermissionPolicyService$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V+]Ljava/lang/Integer;Ljava/lang/Integer;
-PLcom/android/server/policy/PermissionPolicyService$$ExternalSyntheticLambda4;-><init>(Lcom/android/internal/infra/AndroidFuture;I)V
-PLcom/android/server/policy/PermissionPolicyService$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/policy/PermissionPolicyService$$ExternalSyntheticLambda4;-><init>(Lcom/android/internal/infra/AndroidFuture;I)V
+HSPLcom/android/server/policy/PermissionPolicyService$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/policy/PermissionPolicyService$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;)V
 HSPLcom/android/server/policy/PermissionPolicyService$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/policy/PermissionPolicyService$1;-><init>(Lcom/android/server/policy/PermissionPolicyService;)V
@@ -42849,40 +44387,41 @@
 PLcom/android/server/policy/PermissionPolicyService$1;->onPackageChanged(Ljava/lang/String;I)V
 PLcom/android/server/policy/PermissionPolicyService$1;->onPackageRemoved(Ljava/lang/String;I)V
 HSPLcom/android/server/policy/PermissionPolicyService$2;-><init>(Lcom/android/server/policy/PermissionPolicyService;)V
-HPLcom/android/server/policy/PermissionPolicyService$2;->opChanged(IILjava/lang/String;)V
+HSPLcom/android/server/policy/PermissionPolicyService$2;->opChanged(IILjava/lang/String;)V
 HSPLcom/android/server/policy/PermissionPolicyService$3;-><init>(Lcom/android/server/policy/PermissionPolicyService;)V
 HPLcom/android/server/policy/PermissionPolicyService$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V+]Lcom/android/server/SystemService;Lcom/android/server/policy/PermissionPolicyService;]Lcom/android/server/policy/PermissionPolicyService$3;Lcom/android/server/policy/PermissionPolicyService$3;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/ContentResolver;Landroid/app/ContextImpl$ApplicationContentResolver;]Landroid/content/Intent;Landroid/content/Intent;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HPLcom/android/server/policy/PermissionPolicyService$3;->updateUid(I)V+]Ljava/util/Map;Ljava/util/HashMap;]Landroid/permission/PermissionControllerManager;Landroid/permission/PermissionControllerManager;
 HSPLcom/android/server/policy/PermissionPolicyService$4;-><init>(Lcom/android/server/policy/PermissionPolicyService;)V
+PLcom/android/server/policy/PermissionPolicyService$4;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HPLcom/android/server/policy/PermissionPolicyService$Internal$1$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/policy/PermissionPolicyService$Internal$1;Landroid/content/pm/ActivityInfo;Landroid/app/TaskInfo;Lcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptorInfo;)V
 HPLcom/android/server/policy/PermissionPolicyService$Internal$1$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/policy/PermissionPolicyService$Internal$1;->$r8$lambda$vorpj1ASxb6bfEoE2cFG6IA7z4Q(Lcom/android/server/policy/PermissionPolicyService$Internal$1;Landroid/content/pm/ActivityInfo;Landroid/app/TaskInfo;Lcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptorInfo;)V
 HSPLcom/android/server/policy/PermissionPolicyService$Internal$1;-><init>(Lcom/android/server/policy/PermissionPolicyService$Internal;)V
 HSPLcom/android/server/policy/PermissionPolicyService$Internal$1;->intercept(Lcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptorInfo;)Lcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptResult;
 HPLcom/android/server/policy/PermissionPolicyService$Internal$1;->lambda$onActivityLaunched$0(Landroid/content/pm/ActivityInfo;Landroid/app/TaskInfo;Lcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptorInfo;)V
-HPLcom/android/server/policy/PermissionPolicyService$Internal$1;->onActivityLaunched(Landroid/app/TaskInfo;Landroid/content/pm/ActivityInfo;Lcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptorInfo;)V
+HSPLcom/android/server/policy/PermissionPolicyService$Internal$1;->onActivityLaunched(Landroid/app/TaskInfo;Landroid/content/pm/ActivityInfo;Lcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptorInfo;)V
 HPLcom/android/server/policy/PermissionPolicyService$Internal;->-$$Nest$misNoDisplayActivity(Lcom/android/server/policy/PermissionPolicyService$Internal;Landroid/content/pm/ActivityInfo;)Z
 HSPLcom/android/server/policy/PermissionPolicyService$Internal;->-$$Nest$monActivityManagerReady(Lcom/android/server/policy/PermissionPolicyService$Internal;)V
-HPLcom/android/server/policy/PermissionPolicyService$Internal;->-$$Nest$mshouldShowNotificationDialogOrClearFlags(Lcom/android/server/policy/PermissionPolicyService$Internal;Landroid/app/TaskInfo;Ljava/lang/String;Ljava/lang/String;Landroid/content/Intent;Landroid/app/ActivityOptions;Ljava/lang/String;Z)Z
+HSPLcom/android/server/policy/PermissionPolicyService$Internal;->-$$Nest$mshouldShowNotificationDialogOrClearFlags(Lcom/android/server/policy/PermissionPolicyService$Internal;Landroid/app/TaskInfo;Ljava/lang/String;Ljava/lang/String;Landroid/content/Intent;Landroid/app/ActivityOptions;Ljava/lang/String;Z)Z
 HSPLcom/android/server/policy/PermissionPolicyService$Internal;-><init>(Lcom/android/server/policy/PermissionPolicyService;)V
 HSPLcom/android/server/policy/PermissionPolicyService$Internal;-><init>(Lcom/android/server/policy/PermissionPolicyService;Lcom/android/server/policy/PermissionPolicyService$Internal-IA;)V
 HSPLcom/android/server/policy/PermissionPolicyService$Internal;->checkStartActivity(Landroid/content/Intent;ILjava/lang/String;)Z
 HPLcom/android/server/policy/PermissionPolicyService$Internal;->isActionRemovedForCallingPackage(Landroid/content/Intent;ILjava/lang/String;)Z
 HSPLcom/android/server/policy/PermissionPolicyService$Internal;->isInitialized(I)Z
-HPLcom/android/server/policy/PermissionPolicyService$Internal;->isIntentToPermissionDialog(Landroid/content/Intent;)Z
-HPLcom/android/server/policy/PermissionPolicyService$Internal;->isLauncherIntent(Landroid/content/Intent;)Z
+HSPLcom/android/server/policy/PermissionPolicyService$Internal;->isIntentToPermissionDialog(Landroid/content/Intent;)Z
+HSPLcom/android/server/policy/PermissionPolicyService$Internal;->isLauncherIntent(Landroid/content/Intent;)Z
 HPLcom/android/server/policy/PermissionPolicyService$Internal;->isNoDisplayActivity(Landroid/content/pm/ActivityInfo;)Z
-HPLcom/android/server/policy/PermissionPolicyService$Internal;->isTaskPotentialTrampoline(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/TaskInfo;Landroid/content/Intent;)Z
-HPLcom/android/server/policy/PermissionPolicyService$Internal;->isTaskStartedFromLauncher(Ljava/lang/String;Landroid/app/TaskInfo;)Z
+HSPLcom/android/server/policy/PermissionPolicyService$Internal;->isTaskPotentialTrampoline(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/TaskInfo;Landroid/content/Intent;)Z
+HSPLcom/android/server/policy/PermissionPolicyService$Internal;->isTaskStartedFromLauncher(Ljava/lang/String;Landroid/app/TaskInfo;)Z
 HPLcom/android/server/policy/PermissionPolicyService$Internal;->launchNotificationPermissionRequestDialog(Ljava/lang/String;Landroid/os/UserHandle;ILcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptorInfo;)V
 HSPLcom/android/server/policy/PermissionPolicyService$Internal;->onActivityManagerReady()V
 HPLcom/android/server/policy/PermissionPolicyService$Internal;->pkgHasRunningLauncherTask(Ljava/lang/String;Landroid/app/TaskInfo;)Z
 HSPLcom/android/server/policy/PermissionPolicyService$Internal;->setOnInitializedCallback(Lcom/android/server/policy/PermissionPolicyInternal$OnInitializedCallback;)V
 HPLcom/android/server/policy/PermissionPolicyService$Internal;->shouldForceShowNotificationPermissionRequest(Ljava/lang/String;Landroid/os/UserHandle;)Z
 PLcom/android/server/policy/PermissionPolicyService$Internal;->shouldShowNotificationDialogForTask(Landroid/app/TaskInfo;Ljava/lang/String;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;)Z
-HPLcom/android/server/policy/PermissionPolicyService$Internal;->shouldShowNotificationDialogOrClearFlags(Landroid/app/TaskInfo;Ljava/lang/String;Ljava/lang/String;Landroid/content/Intent;Landroid/app/ActivityOptions;Ljava/lang/String;Z)Z
+HSPLcom/android/server/policy/PermissionPolicyService$Internal;->shouldShowNotificationDialogOrClearFlags(Landroid/app/TaskInfo;Ljava/lang/String;Ljava/lang/String;Landroid/content/Intent;Landroid/app/ActivityOptions;Ljava/lang/String;Z)Z
 PLcom/android/server/policy/PermissionPolicyService$Internal;->showNotificationPromptIfNeeded(Ljava/lang/String;II)V
-PLcom/android/server/policy/PermissionPolicyService$Internal;->showNotificationPromptIfNeeded(Ljava/lang/String;IILcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptorInfo;)V
+HPLcom/android/server/policy/PermissionPolicyService$Internal;->showNotificationPromptIfNeeded(Ljava/lang/String;IILcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptorInfo;)V
 HSPLcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser$OpToChange;-><init>(Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;ILjava/lang/String;I)V
 HSPLcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;->-$$Nest$msyncPackages(Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;)V
 HSPLcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;-><init>(Lcom/android/server/policy/PermissionPolicyService;Landroid/content/Context;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/pm/permission/PermissionManagerServiceInternal;Lcom/android/server/pm/permission/PermissionManagerService$PermissionManagerServiceInternalImpl;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
@@ -42898,12 +44437,12 @@
 HSPLcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;->shouldGrantAppOp(Landroid/content/pm/PackageInfo;Lcom/android/server/pm/parsing/pkg/AndroidPackage;Landroid/content/pm/PermissionInfo;)Z+]Landroid/content/pm/PermissionInfo;Landroid/content/pm/PermissionInfo;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Lcom/android/server/policy/SoftRestrictedPermissionPolicy;Lcom/android/server/policy/SoftRestrictedPermissionPolicy$3;,Lcom/android/server/policy/SoftRestrictedPermissionPolicy$2;
 HSPLcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;->syncPackages()V+]Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/util/LongSparseLongArray;Landroid/util/LongSparseLongArray;
 HSPLcom/android/server/policy/PermissionPolicyService$PhoneCarrierPrivilegesCallback;-><init>(Lcom/android/server/policy/PermissionPolicyService;I)V
-PLcom/android/server/policy/PermissionPolicyService$PhoneCarrierPrivilegesCallback;->onCarrierPrivilegesChanged(Ljava/util/Set;Ljava/util/Set;)V
+HSPLcom/android/server/policy/PermissionPolicyService$PhoneCarrierPrivilegesCallback;->onCarrierPrivilegesChanged(Ljava/util/Set;Ljava/util/Set;)V
 HSPLcom/android/server/policy/PermissionPolicyService;->$r8$lambda$Q9k9U27pAhp2mAT-DmNupRvkYwE(Lcom/android/server/policy/PermissionPolicyService;Ljava/lang/String;I)V
-PLcom/android/server/policy/PermissionPolicyService;->$r8$lambda$XnDRakQtMnR8LtloM1QJwVK3a38(Lcom/android/internal/infra/AndroidFuture;ILjava/lang/Boolean;)V
+HSPLcom/android/server/policy/PermissionPolicyService;->$r8$lambda$XnDRakQtMnR8LtloM1QJwVK3a38(Lcom/android/internal/infra/AndroidFuture;ILjava/lang/Boolean;)V
 HSPLcom/android/server/policy/PermissionPolicyService;->$r8$lambda$dasocVEhhMOxl_Co25Vo-yuaDf8(Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;Lcom/android/server/pm/parsing/pkg/AndroidPackage;)V
-HPLcom/android/server/policy/PermissionPolicyService;->$r8$lambda$la2EuOntWnY3Epfe3DmXIAtWV1M(Lcom/android/server/policy/PermissionPolicyService;I)V
-HSPLcom/android/server/policy/PermissionPolicyService;->$r8$lambda$rd-wRS1VmTcWPlWJqKsNJNLcaT4(Lcom/android/server/policy/PermissionPolicyService;Ljava/lang/String;I)V
+HSPLcom/android/server/policy/PermissionPolicyService;->$r8$lambda$la2EuOntWnY3Epfe3DmXIAtWV1M(Lcom/android/server/policy/PermissionPolicyService;I)V
+HSPLcom/android/server/policy/PermissionPolicyService;->$r8$lambda$rd-wRS1VmTcWPlWJqKsNJNLcaT4(Lcom/android/server/policy/PermissionPolicyService;Ljava/lang/String;I)V+]Lcom/android/server/policy/PermissionPolicyService;Lcom/android/server/policy/PermissionPolicyService;
 HSPLcom/android/server/policy/PermissionPolicyService;->-$$Nest$fgetmAppOpsCallback(Lcom/android/server/policy/PermissionPolicyService;)Lcom/android/internal/app/IAppOpsCallback;
 PLcom/android/server/policy/PermissionPolicyService;->-$$Nest$fgetmBootCompleted(Lcom/android/server/policy/PermissionPolicyService;)Z
 PLcom/android/server/policy/PermissionPolicyService;->-$$Nest$fgetmContext(Lcom/android/server/policy/PermissionPolicyService;)Landroid/content/Context;
@@ -42911,18 +44450,20 @@
 PLcom/android/server/policy/PermissionPolicyService;->-$$Nest$fgetmKeyguardManager(Lcom/android/server/policy/PermissionPolicyService;)Landroid/app/KeyguardManager;
 HSPLcom/android/server/policy/PermissionPolicyService;->-$$Nest$fgetmLock(Lcom/android/server/policy/PermissionPolicyService;)Ljava/lang/Object;
 PLcom/android/server/policy/PermissionPolicyService;->-$$Nest$fgetmNotificationManager(Lcom/android/server/policy/PermissionPolicyService;)Lcom/android/server/notification/NotificationManagerInternal;
-HPLcom/android/server/policy/PermissionPolicyService;->-$$Nest$fgetmPackageManager(Lcom/android/server/policy/PermissionPolicyService;)Landroid/content/pm/PackageManager;
+HSPLcom/android/server/policy/PermissionPolicyService;->-$$Nest$fgetmPackageManager(Lcom/android/server/policy/PermissionPolicyService;)Landroid/content/pm/PackageManager;
 HPLcom/android/server/policy/PermissionPolicyService;->-$$Nest$fgetmPackageManagerInternal(Lcom/android/server/policy/PermissionPolicyService;)Landroid/content/pm/PackageManagerInternal;
 PLcom/android/server/policy/PermissionPolicyService;->-$$Nest$fgetmPermissionManagerInternal(Lcom/android/server/policy/PermissionPolicyService;)Lcom/android/server/pm/permission/PermissionManagerServiceInternal;
-PLcom/android/server/policy/PermissionPolicyService;->-$$Nest$fgetmTelephonyManager(Lcom/android/server/policy/PermissionPolicyService;)Landroid/telephony/TelephonyManager;
+HSPLcom/android/server/policy/PermissionPolicyService;->-$$Nest$fgetmTelephonyManager(Lcom/android/server/policy/PermissionPolicyService;)Landroid/telephony/TelephonyManager;
 PLcom/android/server/policy/PermissionPolicyService;->-$$Nest$fputmNotificationManager(Lcom/android/server/policy/PermissionPolicyService;Lcom/android/server/notification/NotificationManagerInternal;)V
 HSPLcom/android/server/policy/PermissionPolicyService;->-$$Nest$fputmOnInitializedCallback(Lcom/android/server/policy/PermissionPolicyService;Lcom/android/server/policy/PermissionPolicyInternal$OnInitializedCallback;)V
-PLcom/android/server/policy/PermissionPolicyService;->-$$Nest$minitTelephonyManagerIfNeeded(Lcom/android/server/policy/PermissionPolicyService;)V
-HSPLcom/android/server/policy/PermissionPolicyService;->-$$Nest$misStarted(Lcom/android/server/policy/PermissionPolicyService;I)Z
+HSPLcom/android/server/policy/PermissionPolicyService;->-$$Nest$minitTelephonyManagerIfNeeded(Lcom/android/server/policy/PermissionPolicyService;)V
+HSPLcom/android/server/policy/PermissionPolicyService;->-$$Nest$misStarted(Lcom/android/server/policy/PermissionPolicyService;I)Z+]Lcom/android/server/policy/PermissionPolicyService;Lcom/android/server/policy/PermissionPolicyService;
+PLcom/android/server/policy/PermissionPolicyService;->-$$Nest$mregisterCarrierPrivilegesCallbacks(Lcom/android/server/policy/PermissionPolicyService;)V
 PLcom/android/server/policy/PermissionPolicyService;->-$$Nest$mresetAppOpPermissionsIfNotRequestedForUid(Lcom/android/server/policy/PermissionPolicyService;I)V
-HPLcom/android/server/policy/PermissionPolicyService;->-$$Nest$mresetAppOpPermissionsIfNotRequestedForUidAsync(Lcom/android/server/policy/PermissionPolicyService;I)V
-HPLcom/android/server/policy/PermissionPolicyService;->-$$Nest$msynchronizePackagePermissionsAndAppOpsAsyncForUser(Lcom/android/server/policy/PermissionPolicyService;Ljava/lang/String;I)V
+HSPLcom/android/server/policy/PermissionPolicyService;->-$$Nest$mresetAppOpPermissionsIfNotRequestedForUidAsync(Lcom/android/server/policy/PermissionPolicyService;I)V
+HSPLcom/android/server/policy/PermissionPolicyService;->-$$Nest$msynchronizePackagePermissionsAndAppOpsAsyncForUser(Lcom/android/server/policy/PermissionPolicyService;Ljava/lang/String;I)V+]Lcom/android/server/policy/PermissionPolicyService;Lcom/android/server/policy/PermissionPolicyService;
 PLcom/android/server/policy/PermissionPolicyService;->-$$Nest$msynchronizePackagePermissionsAndAppOpsForUser(Lcom/android/server/policy/PermissionPolicyService;Ljava/lang/String;I)V
+PLcom/android/server/policy/PermissionPolicyService;->-$$Nest$munregisterCarrierPrivilegesCallback(Lcom/android/server/policy/PermissionPolicyService;)V
 HSPLcom/android/server/policy/PermissionPolicyService;->-$$Nest$smgetSwitchOp(Ljava/lang/String;)I
 PLcom/android/server/policy/PermissionPolicyService;->-$$Nest$smgetUserContext(Landroid/content/Context;Landroid/os/UserHandle;)Landroid/content/Context;
 HSPLcom/android/server/policy/PermissionPolicyService;-><clinit>()V
@@ -42932,7 +44473,7 @@
 HSPLcom/android/server/policy/PermissionPolicyService;->grantOrUpgradeDefaultRuntimePermissionsIfNeeded(I)V
 HSPLcom/android/server/policy/PermissionPolicyService;->initTelephonyManagerIfNeeded()V
 HSPLcom/android/server/policy/PermissionPolicyService;->isStarted(I)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
-PLcom/android/server/policy/PermissionPolicyService;->lambda$grantOrUpgradeDefaultRuntimePermissionsIfNeeded$0(Lcom/android/internal/infra/AndroidFuture;ILjava/lang/Boolean;)V
+HSPLcom/android/server/policy/PermissionPolicyService;->lambda$grantOrUpgradeDefaultRuntimePermissionsIfNeeded$0(Lcom/android/internal/infra/AndroidFuture;ILjava/lang/Boolean;)V
 HSPLcom/android/server/policy/PermissionPolicyService;->lambda$synchronizePermissionsAndAppOpsForUser$1(Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;Lcom/android/server/pm/parsing/pkg/AndroidPackage;)V
 HSPLcom/android/server/policy/PermissionPolicyService;->onBootPhase(I)V
 HSPLcom/android/server/policy/PermissionPolicyService;->onStart()V
@@ -42940,23 +44481,24 @@
 HSPLcom/android/server/policy/PermissionPolicyService;->onUserStarting(Lcom/android/server/SystemService$TargetUser;)V
 PLcom/android/server/policy/PermissionPolicyService;->onUserStopping(Lcom/android/server/SystemService$TargetUser;)V
 HSPLcom/android/server/policy/PermissionPolicyService;->registerCarrierPrivilegesCallbacks()V
-HPLcom/android/server/policy/PermissionPolicyService;->resetAppOpPermissionsIfNotRequestedForUid(I)V+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/SystemService;Lcom/android/server/policy/PermissionPolicyService;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
-HPLcom/android/server/policy/PermissionPolicyService;->resetAppOpPermissionsIfNotRequestedForUidAsync(I)V+]Lcom/android/server/policy/PermissionPolicyService;Lcom/android/server/policy/PermissionPolicyService;]Landroid/os/Handler;Landroid/os/Handler;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
+HSPLcom/android/server/policy/PermissionPolicyService;->resetAppOpPermissionsIfNotRequestedForUid(I)V+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Lcom/android/server/SystemService;Lcom/android/server/policy/PermissionPolicyService;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Landroid/app/AppOpsManagerInternal;Lcom/android/server/appop/AppOpsService$AppOpsManagerInternalImpl;
+HSPLcom/android/server/policy/PermissionPolicyService;->resetAppOpPermissionsIfNotRequestedForUidAsync(I)V+]Lcom/android/server/policy/PermissionPolicyService;Lcom/android/server/policy/PermissionPolicyService;]Landroid/os/Handler;Landroid/os/Handler;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
 HSPLcom/android/server/policy/PermissionPolicyService;->synchronizePackagePermissionsAndAppOpsAsyncForUser(Ljava/lang/String;I)V+]Lcom/android/server/policy/PermissionPolicyService;Lcom/android/server/policy/PermissionPolicyService;]Landroid/os/Handler;Landroid/os/Handler;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/policy/PermissionPolicyService;->synchronizePackagePermissionsAndAppOpsForUser(Ljava/lang/String;I)V+]Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;Lcom/android/server/policy/PermissionPolicyService$PermissionToOpSynchroniser;]Lcom/android/server/SystemService;Lcom/android/server/policy/PermissionPolicyService;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/policy/PermissionPolicyService;->synchronizePermissionsAndAppOpsForUser(I)V
+PLcom/android/server/policy/PermissionPolicyService;->unregisterCarrierPrivilegesCallback()V
 HSPLcom/android/server/policy/PhoneWindowManager$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/policy/PhoneWindowManager;I)V
 HSPLcom/android/server/policy/PhoneWindowManager$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/policy/PhoneWindowManager$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/policy/WindowManagerPolicy$WindowManagerFuncs;)V
 PLcom/android/server/policy/PhoneWindowManager$$ExternalSyntheticLambda1;->run()V
-PLcom/android/server/policy/PhoneWindowManager$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
+HPLcom/android/server/policy/PhoneWindowManager$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
 PLcom/android/server/policy/PhoneWindowManager$$ExternalSyntheticLambda2;->run()V
 HSPLcom/android/server/policy/PhoneWindowManager$13;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
 PLcom/android/server/policy/PhoneWindowManager$13;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/policy/PhoneWindowManager$14;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
 HPLcom/android/server/policy/PhoneWindowManager$14;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/policy/PhoneWindowManager$15;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
-PLcom/android/server/policy/PhoneWindowManager$15;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/policy/PhoneWindowManager$15;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/policy/PhoneWindowManager$16;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
 HSPLcom/android/server/policy/PhoneWindowManager$16;->run()V
 HSPLcom/android/server/policy/PhoneWindowManager$1;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
@@ -42966,10 +44508,10 @@
 HSPLcom/android/server/policy/PhoneWindowManager$4;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
 HSPLcom/android/server/policy/PhoneWindowManager$5;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
 PLcom/android/server/policy/PhoneWindowManager$5;->onAppTransitionCancelledLocked(Z)V
-HPLcom/android/server/policy/PhoneWindowManager$5;->onAppTransitionStartingLocked(ZZJJJ)I
+HSPLcom/android/server/policy/PhoneWindowManager$5;->onAppTransitionStartingLocked(ZZJJJ)I
 HSPLcom/android/server/policy/PhoneWindowManager$6;-><init>(Lcom/android/server/policy/PhoneWindowManager;)V
 HPLcom/android/server/policy/PhoneWindowManager$6;->onShowingChanged()V
-PLcom/android/server/policy/PhoneWindowManager$6;->onTrustedChanged()V
+HPLcom/android/server/policy/PhoneWindowManager$6;->onTrustedChanged()V
 HSPLcom/android/server/policy/PhoneWindowManager$7;-><init>(Lcom/android/server/policy/PhoneWindowManager;II)V
 PLcom/android/server/policy/PhoneWindowManager$7;->cancel()V
 PLcom/android/server/policy/PhoneWindowManager$7;->execute()V
@@ -43013,7 +44555,7 @@
 HPLcom/android/server/policy/PhoneWindowManager$ScreenLockTimeout;->run()V
 HSPLcom/android/server/policy/PhoneWindowManager$SettingsObserver;-><init>(Lcom/android/server/policy/PhoneWindowManager;Landroid/os/Handler;)V
 HSPLcom/android/server/policy/PhoneWindowManager$SettingsObserver;->observe()V
-PLcom/android/server/policy/PhoneWindowManager$SettingsObserver;->onChange(Z)V
+HSPLcom/android/server/policy/PhoneWindowManager$SettingsObserver;->onChange(Z)V
 PLcom/android/server/policy/PhoneWindowManager;->$r8$lambda$HNPR0tn-mC1qIGjfT0B3nkaqCjQ(Lcom/android/server/policy/PhoneWindowManager;)V
 HSPLcom/android/server/policy/PhoneWindowManager;->$r8$lambda$OWrAWZJgNtkwNOzdaK8wfog2Rew(Lcom/android/server/policy/PhoneWindowManager;I)V
 HPLcom/android/server/policy/PhoneWindowManager;->-$$Nest$fgetmAccessibilityShortcutController(Lcom/android/server/policy/PhoneWindowManager;)Lcom/android/internal/accessibility/AccessibilityShortcutController;
@@ -43038,7 +44580,7 @@
 PLcom/android/server/policy/PhoneWindowManager;->-$$Nest$mhandleRingerChordGesture(Lcom/android/server/policy/PhoneWindowManager;)V
 PLcom/android/server/policy/PhoneWindowManager;->-$$Nest$mhandleScreenShot(Lcom/android/server/policy/PhoneWindowManager;II)V
 PLcom/android/server/policy/PhoneWindowManager;->-$$Nest$mhandleShortPressOnHome(Lcom/android/server/policy/PhoneWindowManager;I)V
-HPLcom/android/server/policy/PhoneWindowManager;->-$$Nest$mhandleStartTransitionForKeyguardLw(Lcom/android/server/policy/PhoneWindowManager;ZZJ)I
+HSPLcom/android/server/policy/PhoneWindowManager;->-$$Nest$mhandleStartTransitionForKeyguardLw(Lcom/android/server/policy/PhoneWindowManager;ZZJ)I
 PLcom/android/server/policy/PhoneWindowManager;->-$$Nest$minterceptAccessibilityShortcutChord(Lcom/android/server/policy/PhoneWindowManager;)V
 PLcom/android/server/policy/PhoneWindowManager;->-$$Nest$minterceptRingerToggleChord(Lcom/android/server/policy/PhoneWindowManager;)V
 PLcom/android/server/policy/PhoneWindowManager;->-$$Nest$minterceptScreenshotChord(Lcom/android/server/policy/PhoneWindowManager;IIJ)V
@@ -43051,12 +44593,12 @@
 HSPLcom/android/server/policy/PhoneWindowManager;-><init>()V
 PLcom/android/server/policy/PhoneWindowManager;->accessibilityShortcutActivated()V
 HSPLcom/android/server/policy/PhoneWindowManager;->adjustConfigurationLw(Landroid/content/res/Configuration;II)V
-HPLcom/android/server/policy/PhoneWindowManager;->applyKeyguardOcclusionChange(Z)I
+HSPLcom/android/server/policy/PhoneWindowManager;->applyKeyguardOcclusionChange(Z)I
 HSPLcom/android/server/policy/PhoneWindowManager;->applyLidSwitchState()V
 PLcom/android/server/policy/PhoneWindowManager;->awakenDreams()V
 HPLcom/android/server/policy/PhoneWindowManager;->backKeyPress()Z
-PLcom/android/server/policy/PhoneWindowManager;->bindKeyguard()V
-PLcom/android/server/policy/PhoneWindowManager;->canDismissBootAnimation()Z
+HSPLcom/android/server/policy/PhoneWindowManager;->bindKeyguard()V
+HSPLcom/android/server/policy/PhoneWindowManager;->canDismissBootAnimation()Z
 PLcom/android/server/policy/PhoneWindowManager;->cancelGlobalActionsAction()V
 PLcom/android/server/policy/PhoneWindowManager;->cancelPendingAccessibilityShortcutAction()V
 PLcom/android/server/policy/PhoneWindowManager;->cancelPendingRingerToggleChordAction()V
@@ -43082,7 +44624,7 @@
 HPLcom/android/server/policy/PhoneWindowManager;->finishScreenTurningOn()V
 HSPLcom/android/server/policy/PhoneWindowManager;->finishWindowsDrawn(I)V
 HPLcom/android/server/policy/PhoneWindowManager;->finishedGoingToSleep(I)V
-HPLcom/android/server/policy/PhoneWindowManager;->finishedWakingUp(I)V
+HSPLcom/android/server/policy/PhoneWindowManager;->finishedWakingUp(I)V
 PLcom/android/server/policy/PhoneWindowManager;->getAccessibilityShortcutTimeout()J
 PLcom/android/server/policy/PhoneWindowManager;->getAudioManagerInternal()Landroid/media/AudioManagerInternal;
 PLcom/android/server/policy/PhoneWindowManager;->getAudioService()Landroid/media/IAudioService;
@@ -43102,19 +44644,20 @@
 PLcom/android/server/policy/PhoneWindowManager;->getStatusBarService()Lcom/android/internal/statusbar/IStatusBarService;
 HPLcom/android/server/policy/PhoneWindowManager;->getTelecommService()Landroid/telecom/TelecomManager;
 HSPLcom/android/server/policy/PhoneWindowManager;->getUiMode()I
-HPLcom/android/server/policy/PhoneWindowManager;->getVibrationAttributes(I)Landroid/os/VibrationAttributes;
-HPLcom/android/server/policy/PhoneWindowManager;->getVibrationEffect(I)Landroid/os/VibrationEffect;
+HSPLcom/android/server/policy/PhoneWindowManager;->getVibrationAttributes(I)Landroid/os/VibrationAttributes;
+HSPLcom/android/server/policy/PhoneWindowManager;->getVibrationEffect(I)Landroid/os/VibrationEffect;
 HPLcom/android/server/policy/PhoneWindowManager;->handleCameraGesture(Landroid/view/KeyEvent;Z)Z
 HPLcom/android/server/policy/PhoneWindowManager;->handleKeyGesture(Landroid/view/KeyEvent;Z)V
 PLcom/android/server/policy/PhoneWindowManager;->handleRingerChordGesture()V
 PLcom/android/server/policy/PhoneWindowManager;->handleScreenShot(II)V
 HPLcom/android/server/policy/PhoneWindowManager;->handleShortPressOnHome(I)V
-HPLcom/android/server/policy/PhoneWindowManager;->handleStartTransitionForKeyguardLw(ZZJ)I
+HSPLcom/android/server/policy/PhoneWindowManager;->handleStartTransitionForKeyguardLw(ZZJ)I
 HSPLcom/android/server/policy/PhoneWindowManager;->hasLongPressOnBackBehavior()Z
 HSPLcom/android/server/policy/PhoneWindowManager;->hasLongPressOnPowerBehavior()Z
 HSPLcom/android/server/policy/PhoneWindowManager;->hasLongPressOnStemPrimaryBehavior()Z
 HSPLcom/android/server/policy/PhoneWindowManager;->hasStemPrimaryBehavior()Z
 HSPLcom/android/server/policy/PhoneWindowManager;->hasVeryLongPressOnPowerBehavior()Z
+PLcom/android/server/policy/PhoneWindowManager;->hideRecentApps(ZZ)V
 HPLcom/android/server/policy/PhoneWindowManager;->inKeyguardRestrictedKeyInputMode()Z+]Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;
 PLcom/android/server/policy/PhoneWindowManager;->incallBackBehaviorToString(I)Ljava/lang/String;
 PLcom/android/server/policy/PhoneWindowManager;->incallPowerBehaviorToString(I)Ljava/lang/String;
@@ -43124,7 +44667,7 @@
 HSPLcom/android/server/policy/PhoneWindowManager;->initializeHdmiState()V
 HSPLcom/android/server/policy/PhoneWindowManager;->initializeHdmiStateInternal()V
 PLcom/android/server/policy/PhoneWindowManager;->interceptAccessibilityShortcutChord()V
-HPLcom/android/server/policy/PhoneWindowManager;->interceptKeyBeforeDispatching(Landroid/os/IBinder;Landroid/view/KeyEvent;I)J
+HPLcom/android/server/policy/PhoneWindowManager;->interceptKeyBeforeDispatching(Landroid/os/IBinder;Landroid/view/KeyEvent;I)J+]Lcom/android/server/policy/PhoneWindowManager;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/policy/KeyCombinationManager;Lcom/android/server/policy/KeyCombinationManager;]Landroid/view/KeyEvent;Landroid/view/KeyEvent;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/policy/GlobalKeyManager;Lcom/android/server/policy/GlobalKeyManager;
 HPLcom/android/server/policy/PhoneWindowManager;->interceptKeyBeforeQueueing(Landroid/view/KeyEvent;I)I
 HPLcom/android/server/policy/PhoneWindowManager;->interceptMotionBeforeQueueingNonInteractive(IJI)I
 HPLcom/android/server/policy/PhoneWindowManager;->interceptPowerKeyDown(Landroid/view/KeyEvent;Z)V
@@ -43137,7 +44680,7 @@
 PLcom/android/server/policy/PhoneWindowManager;->isHidden(I)Z
 PLcom/android/server/policy/PhoneWindowManager;->isKeyguardDrawnLw()Z
 HSPLcom/android/server/policy/PhoneWindowManager;->isKeyguardHostWindow(Landroid/view/WindowManager$LayoutParams;)Z
-HSPLcom/android/server/policy/PhoneWindowManager;->isKeyguardLocked()Z
+HSPLcom/android/server/policy/PhoneWindowManager;->isKeyguardLocked()Z+]Lcom/android/server/policy/PhoneWindowManager;Lcom/android/server/policy/PhoneWindowManager;
 HSPLcom/android/server/policy/PhoneWindowManager;->isKeyguardOccluded()Z+]Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;
 HPLcom/android/server/policy/PhoneWindowManager;->isKeyguardSecure(I)Z+]Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;
 HSPLcom/android/server/policy/PhoneWindowManager;->isKeyguardShowing()Z+]Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;
@@ -43147,7 +44690,7 @@
 HPLcom/android/server/policy/PhoneWindowManager;->isScreenOn()Z+]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
 HPLcom/android/server/policy/PhoneWindowManager;->isTheaterModeEnabled()Z
 HPLcom/android/server/policy/PhoneWindowManager;->isUserSetupComplete()Z
-PLcom/android/server/policy/PhoneWindowManager;->isValidGlobalKey(I)Z
+HPLcom/android/server/policy/PhoneWindowManager;->isValidGlobalKey(I)Z
 PLcom/android/server/policy/PhoneWindowManager;->isWakeKeyWhenScreenOff(I)Z
 PLcom/android/server/policy/PhoneWindowManager;->keepScreenOnStartedLw()V
 PLcom/android/server/policy/PhoneWindowManager;->keepScreenOnStoppedLw()V
@@ -43166,12 +44709,12 @@
 PLcom/android/server/policy/PhoneWindowManager;->multiPressOnPowerBehaviorToString(I)Ljava/lang/String;
 HSPLcom/android/server/policy/PhoneWindowManager;->notifyLidSwitchChanged(JZ)V
 HPLcom/android/server/policy/PhoneWindowManager;->okToAnimate(Z)Z
-HPLcom/android/server/policy/PhoneWindowManager;->onDefaultDisplayFocusChangedLw(Lcom/android/server/policy/WindowManagerPolicy$WindowState;)V
+HSPLcom/android/server/policy/PhoneWindowManager;->onDefaultDisplayFocusChangedLw(Lcom/android/server/policy/WindowManagerPolicy$WindowState;)V
 PLcom/android/server/policy/PhoneWindowManager;->onKeyguardOccludedChangedLw(Z)V
 PLcom/android/server/policy/PhoneWindowManager;->onPowerGroupWakefulnessChanged(IIII)V
-PLcom/android/server/policy/PhoneWindowManager;->onSystemUiStarted()V
-HPLcom/android/server/policy/PhoneWindowManager;->performHapticFeedback(ILjava/lang/String;IZLjava/lang/String;)Z
-HPLcom/android/server/policy/PhoneWindowManager;->performHapticFeedback(IZLjava/lang/String;)Z
+HSPLcom/android/server/policy/PhoneWindowManager;->onSystemUiStarted()V
+HSPLcom/android/server/policy/PhoneWindowManager;->performHapticFeedback(ILjava/lang/String;IZLjava/lang/String;)Z+]Lcom/android/server/policy/PhoneWindowManager;Lcom/android/server/policy/PhoneWindowManager;]Landroid/os/Vibrator;Landroid/os/SystemVibrator;]Landroid/os/VibrationAttributes$Builder;Landroid/os/VibrationAttributes$Builder;
+HSPLcom/android/server/policy/PhoneWindowManager;->performHapticFeedback(IZLjava/lang/String;)Z
 PLcom/android/server/policy/PhoneWindowManager;->powerLongPress(J)V
 HPLcom/android/server/policy/PhoneWindowManager;->powerPress(JIZ)V
 PLcom/android/server/policy/PhoneWindowManager;->powerVolumeUpBehaviorToString(I)Ljava/lang/String;
@@ -43206,23 +44749,27 @@
 PLcom/android/server/policy/PhoneWindowManager;->shouldWakeUpWithHomeIntent()Z
 PLcom/android/server/policy/PhoneWindowManager;->showGlobalActions()V
 PLcom/android/server/policy/PhoneWindowManager;->showGlobalActionsInternal()V
-PLcom/android/server/policy/PhoneWindowManager;->sleepDefaultDisplay(JII)V
+PLcom/android/server/policy/PhoneWindowManager;->showRecentApps(Z)V
+HSPLcom/android/server/policy/PhoneWindowManager;->sleepDefaultDisplay(JII)V
 HPLcom/android/server/policy/PhoneWindowManager;->sleepDefaultDisplayFromPowerButton(JI)Z
+PLcom/android/server/policy/PhoneWindowManager;->startActivityAsUser(Landroid/content/Intent;Landroid/os/Bundle;Landroid/os/UserHandle;)V
+PLcom/android/server/policy/PhoneWindowManager;->startActivityAsUser(Landroid/content/Intent;Landroid/os/Bundle;Landroid/os/UserHandle;Z)V
+PLcom/android/server/policy/PhoneWindowManager;->startActivityAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
 PLcom/android/server/policy/PhoneWindowManager;->startDockOrHome(IZZ)V
 HPLcom/android/server/policy/PhoneWindowManager;->startDockOrHome(IZZLjava/lang/String;)V
 PLcom/android/server/policy/PhoneWindowManager;->startKeyguardExitAnimation(JJ)V
 HPLcom/android/server/policy/PhoneWindowManager;->startedGoingToSleep(I)V
-HPLcom/android/server/policy/PhoneWindowManager;->startedWakingUp(I)V
-PLcom/android/server/policy/PhoneWindowManager;->systemBooted()V
+HSPLcom/android/server/policy/PhoneWindowManager;->startedWakingUp(I)V
+HSPLcom/android/server/policy/PhoneWindowManager;->systemBooted()V
 HSPLcom/android/server/policy/PhoneWindowManager;->systemReady()V
 PLcom/android/server/policy/PhoneWindowManager;->triplePressOnStemPrimaryBehaviorToString(I)Ljava/lang/String;
-HSPLcom/android/server/policy/PhoneWindowManager;->updateLockScreenTimeout()V+]Ljava/util/HashSet;Ljava/util/HashSet;]Landroid/os/Handler;Lcom/android/server/policy/PhoneWindowManager$PolicyHandler;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;
+HSPLcom/android/server/policy/PhoneWindowManager;->updateLockScreenTimeout()V+]Landroid/os/Handler;Lcom/android/server/policy/PhoneWindowManager$PolicyHandler;]Ljava/util/HashSet;Ljava/util/HashSet;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;
 HSPLcom/android/server/policy/PhoneWindowManager;->updateRotation(Z)V
 HSPLcom/android/server/policy/PhoneWindowManager;->updateScreenOffSleepToken(Z)V
 HSPLcom/android/server/policy/PhoneWindowManager;->updateSettings()V
 HSPLcom/android/server/policy/PhoneWindowManager;->updateUiMode()V
 HSPLcom/android/server/policy/PhoneWindowManager;->updateWakeGestureListenerLp()V
-HPLcom/android/server/policy/PhoneWindowManager;->userActivity()V+]Landroid/os/Handler;Lcom/android/server/policy/PhoneWindowManager$PolicyHandler;
+HSPLcom/android/server/policy/PhoneWindowManager;->userActivity()V+]Landroid/os/Handler;Lcom/android/server/policy/PhoneWindowManager$PolicyHandler;
 PLcom/android/server/policy/PhoneWindowManager;->veryLongPressOnPowerBehaviorToString(I)Ljava/lang/String;
 PLcom/android/server/policy/PhoneWindowManager;->wakeUp(JZILjava/lang/String;)Z
 PLcom/android/server/policy/PhoneWindowManager;->wakeUpFromPowerKey(J)V
@@ -43235,27 +44782,27 @@
 HSPLcom/android/server/policy/SideFpsEventHandler$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/policy/SideFpsEventHandler;)V
 HSPLcom/android/server/policy/SideFpsEventHandler$$ExternalSyntheticLambda4;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/policy/SideFpsEventHandler$1;-><init>(Lcom/android/server/policy/SideFpsEventHandler;)V
-PLcom/android/server/policy/SideFpsEventHandler$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/policy/SideFpsEventHandler$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HPLcom/android/server/policy/SideFpsEventHandler$2$1$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/policy/SideFpsEventHandler$2$1;I)V
-PLcom/android/server/policy/SideFpsEventHandler$2$1$$ExternalSyntheticLambda0;->run()V
+HPLcom/android/server/policy/SideFpsEventHandler$2$1$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/policy/SideFpsEventHandler$2$1;->$r8$lambda$wiBDyfkovJQRnvslicsPp_KOpuE(Lcom/android/server/policy/SideFpsEventHandler$2$1;I)V
-PLcom/android/server/policy/SideFpsEventHandler$2$1;-><init>(Lcom/android/server/policy/SideFpsEventHandler$2;)V
+HSPLcom/android/server/policy/SideFpsEventHandler$2$1;-><init>(Lcom/android/server/policy/SideFpsEventHandler$2;)V
 PLcom/android/server/policy/SideFpsEventHandler$2$1;->lambda$onStateChanged$0(I)V
 HPLcom/android/server/policy/SideFpsEventHandler$2$1;->onStateChanged(I)V
-PLcom/android/server/policy/SideFpsEventHandler$2;-><init>(Lcom/android/server/policy/SideFpsEventHandler;Landroid/hardware/fingerprint/FingerprintManager;)V
-PLcom/android/server/policy/SideFpsEventHandler$2;->onAllAuthenticatorsRegistered(Ljava/util/List;)V
+HSPLcom/android/server/policy/SideFpsEventHandler$2;-><init>(Lcom/android/server/policy/SideFpsEventHandler;Landroid/hardware/fingerprint/FingerprintManager;)V
+HSPLcom/android/server/policy/SideFpsEventHandler$2;->onAllAuthenticatorsRegistered(Ljava/util/List;)V
 PLcom/android/server/policy/SideFpsEventHandler;->-$$Nest$fgetmDialog(Lcom/android/server/policy/SideFpsEventHandler;)Landroid/app/Dialog;
 PLcom/android/server/policy/SideFpsEventHandler;->-$$Nest$fgetmHandler(Lcom/android/server/policy/SideFpsEventHandler;)Landroid/os/Handler;
-PLcom/android/server/policy/SideFpsEventHandler;->-$$Nest$fgetmSideFpsEventHandlerReady(Lcom/android/server/policy/SideFpsEventHandler;)Ljava/util/concurrent/atomic/AtomicBoolean;
+HSPLcom/android/server/policy/SideFpsEventHandler;->-$$Nest$fgetmSideFpsEventHandlerReady(Lcom/android/server/policy/SideFpsEventHandler;)Ljava/util/concurrent/atomic/AtomicBoolean;
 PLcom/android/server/policy/SideFpsEventHandler;->-$$Nest$fputmBiometricState(Lcom/android/server/policy/SideFpsEventHandler;I)V
 HSPLcom/android/server/policy/SideFpsEventHandler;-><init>(Landroid/content/Context;Landroid/os/Handler;Landroid/os/PowerManager;)V
 HSPLcom/android/server/policy/SideFpsEventHandler;-><init>(Landroid/content/Context;Landroid/os/Handler;Landroid/os/PowerManager;Ljava/util/function/Supplier;)V
-PLcom/android/server/policy/SideFpsEventHandler;->onFingerprintSensorReady()V
+HSPLcom/android/server/policy/SideFpsEventHandler;->onFingerprintSensorReady()V
 PLcom/android/server/policy/SideFpsEventHandler;->onSinglePressDetected(J)Z
 HSPLcom/android/server/policy/SingleKeyGestureDetector$KeyHandler;-><init>(Lcom/android/server/policy/SingleKeyGestureDetector;)V
 HPLcom/android/server/policy/SingleKeyGestureDetector$KeyHandler;->handleMessage(Landroid/os/Message;)V
 PLcom/android/server/policy/SingleKeyGestureDetector$SingleKeyRule;->-$$Nest$fgetmKeyCode(Lcom/android/server/policy/SingleKeyGestureDetector$SingleKeyRule;)I
-PLcom/android/server/policy/SingleKeyGestureDetector$SingleKeyRule;->-$$Nest$mshouldInterceptKey(Lcom/android/server/policy/SingleKeyGestureDetector$SingleKeyRule;I)Z
+HPLcom/android/server/policy/SingleKeyGestureDetector$SingleKeyRule;->-$$Nest$mshouldInterceptKey(Lcom/android/server/policy/SingleKeyGestureDetector$SingleKeyRule;I)Z
 PLcom/android/server/policy/SingleKeyGestureDetector$SingleKeyRule;->-$$Nest$msupportLongPress(Lcom/android/server/policy/SingleKeyGestureDetector$SingleKeyRule;)Z
 PLcom/android/server/policy/SingleKeyGestureDetector$SingleKeyRule;->-$$Nest$msupportVeryLongPress(Lcom/android/server/policy/SingleKeyGestureDetector$SingleKeyRule;)Z
 HSPLcom/android/server/policy/SingleKeyGestureDetector$SingleKeyRule;-><init>(II)V
@@ -43272,7 +44819,7 @@
 PLcom/android/server/policy/SingleKeyGestureDetector;->beganFromNonInteractive()Z
 PLcom/android/server/policy/SingleKeyGestureDetector;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
 HSPLcom/android/server/policy/SingleKeyGestureDetector;->get(Landroid/content/Context;)Lcom/android/server/policy/SingleKeyGestureDetector;
-PLcom/android/server/policy/SingleKeyGestureDetector;->getKeyPressCounter(I)I
+HPLcom/android/server/policy/SingleKeyGestureDetector;->getKeyPressCounter(I)I
 HPLcom/android/server/policy/SingleKeyGestureDetector;->interceptKey(Landroid/view/KeyEvent;Z)V
 HPLcom/android/server/policy/SingleKeyGestureDetector;->interceptKeyDown(Landroid/view/KeyEvent;)V
 HPLcom/android/server/policy/SingleKeyGestureDetector;->interceptKeyUp(Landroid/view/KeyEvent;)Z
@@ -43301,14 +44848,14 @@
 PLcom/android/server/policy/WakeGestureListener;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/policy/WakeGestureListener;->isSupported()Z
 PLcom/android/server/policy/WindowManagerPolicy$WindowManagerFuncs;->cameraLensStateToString(I)Ljava/lang/String;
-PLcom/android/server/policy/WindowManagerPolicy$WindowManagerFuncs;->lidStateToString(I)Ljava/lang/String;
+HSPLcom/android/server/policy/WindowManagerPolicy$WindowManagerFuncs;->lidStateToString(I)Ljava/lang/String;
 HSPLcom/android/server/policy/WindowManagerPolicy;->getMaxWindowLayer()I
 PLcom/android/server/policy/WindowManagerPolicy;->getSubWindowLayerFromTypeLw(I)I
-HSPLcom/android/server/policy/WindowManagerPolicy;->getWindowLayerFromTypeLw(I)I
-HSPLcom/android/server/policy/WindowManagerPolicy;->getWindowLayerFromTypeLw(IZ)I
-HSPLcom/android/server/policy/WindowManagerPolicy;->getWindowLayerFromTypeLw(IZZ)I+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;
+HSPLcom/android/server/policy/WindowManagerPolicy;->getWindowLayerFromTypeLw(I)I+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;
+HSPLcom/android/server/policy/WindowManagerPolicy;->getWindowLayerFromTypeLw(IZ)I+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;
+HSPLcom/android/server/policy/WindowManagerPolicy;->getWindowLayerFromTypeLw(IZZ)I+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/policy/WindowManagerPolicy;->getWindowLayerLw(Lcom/android/server/policy/WindowManagerPolicy$WindowState;)I
-PLcom/android/server/policy/WindowManagerPolicy;->userRotationModeToString(I)Ljava/lang/String;
+HSPLcom/android/server/policy/WindowManagerPolicy;->userRotationModeToString(I)Ljava/lang/String;
 HSPLcom/android/server/policy/devicestate/config/Conditions;-><init>()V
 HSPLcom/android/server/policy/devicestate/config/Conditions;->getLidSwitch()Lcom/android/server/policy/devicestate/config/LidSwitchCondition;
 HSPLcom/android/server/policy/devicestate/config/Conditions;->getSensor()Ljava/util/List;
@@ -43365,11 +44912,11 @@
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->-$$Nest$fgetmKeyguardState(Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;)Lcom/android/server/policy/keyguard/KeyguardServiceDelegate$KeyguardState;
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->-$$Nest$fputmDrawnListenerWhenConnect(Lcom/android/server/policy/keyguard/KeyguardServiceDelegate;Lcom/android/server/policy/keyguard/KeyguardServiceDelegate$DrawnListener;)V
 HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;-><init>(Landroid/content/Context;Lcom/android/server/policy/keyguard/KeyguardStateMonitor$StateCallback;)V
-PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->bindService(Landroid/content/Context;)V
+HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->bindService(Landroid/content/Context;)V
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->dismiss(Lcom/android/internal/policy/IKeyguardDismissCallback;Ljava/lang/CharSequence;)V
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->doKeyguardTimeout(Landroid/os/Bundle;)V
 HPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
-PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+HPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->hasKeyguard()Z
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->interactiveStateToString(I)Ljava/lang/String;
 HPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->isInputRestricted()Z+]Lcom/android/server/policy/keyguard/KeyguardServiceWrapper;Lcom/android/server/policy/keyguard/KeyguardServiceWrapper;
@@ -43377,21 +44924,21 @@
 HPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->isSecure(I)Z+]Lcom/android/server/policy/keyguard/KeyguardServiceWrapper;Lcom/android/server/policy/keyguard/KeyguardServiceWrapper;
 HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->isShowing()Z+]Lcom/android/server/policy/keyguard/KeyguardServiceWrapper;Lcom/android/server/policy/keyguard/KeyguardServiceWrapper;
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->isTrusted()Z
-PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onBootCompleted()V
+HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onBootCompleted()V
 HPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onDreamingStarted()V
 HPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onDreamingStopped()V
 HPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onFinishedGoingToSleep(IZ)V
-HPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onFinishedWakingUp()V
+HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onFinishedWakingUp()V
 HPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onScreenTurnedOff()V
 HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onScreenTurnedOn()V
 HPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onScreenTurningOff()V
 HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onScreenTurningOn(Lcom/android/server/policy/keyguard/KeyguardServiceDelegate$DrawnListener;)V
 HPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onStartedGoingToSleep(I)V
-HPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onStartedWakingUp(IZ)V
+HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onStartedWakingUp(IZ)V
 HSPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->onSystemReady()V
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->screenStateToString(I)Ljava/lang/String;
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->setCurrentUser(I)V
-HPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->setKeyguardEnabled(Z)V
+HPLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->setKeyguardEnabled(Z)V+]Lcom/android/server/policy/keyguard/KeyguardServiceWrapper;Lcom/android/server/policy/keyguard/KeyguardServiceWrapper;
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->setOccluded(ZZZ)V
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->setSwitchingUser(Z)V
 PLcom/android/server/policy/keyguard/KeyguardServiceDelegate;->startKeyguardExitAnimation(JJ)V
@@ -43405,15 +44952,15 @@
 PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->isTrusted()Z
 PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onBootCompleted()V
 PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onDreamingStarted()V
-PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onDreamingStopped()V
-PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onFinishedGoingToSleep(IZ)V
+HPLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onDreamingStopped()V
+HPLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onFinishedGoingToSleep(IZ)V
 PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onFinishedWakingUp()V
-PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onScreenTurnedOff()V
+HPLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onScreenTurnedOff()V
 PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onScreenTurnedOn()V
 PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onScreenTurningOff()V
 PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onScreenTurningOn(Lcom/android/internal/policy/IKeyguardDrawnCallback;)V
 PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onStartedGoingToSleep(I)V
-PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onStartedWakingUp(IZ)V
+HPLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onStartedWakingUp(IZ)V
 PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->onSystemReady()V
 PLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->setCurrentUser(I)V
 HPLcom/android/server/policy/keyguard/KeyguardServiceWrapper;->setKeyguardEnabled(Z)V
@@ -43430,7 +44977,7 @@
 PLcom/android/server/policy/keyguard/KeyguardStateMonitor;->onInputRestrictedStateChanged(Z)V
 HPLcom/android/server/policy/keyguard/KeyguardStateMonitor;->onShowingStateChanged(ZI)V
 PLcom/android/server/policy/keyguard/KeyguardStateMonitor;->onSimSecureStateChanged(Z)V
-PLcom/android/server/policy/keyguard/KeyguardStateMonitor;->onTrustedChanged(Z)V
+HPLcom/android/server/policy/keyguard/KeyguardStateMonitor;->onTrustedChanged(Z)V
 PLcom/android/server/policy/keyguard/KeyguardStateMonitor;->setCurrentUser(I)V
 HSPLcom/android/server/policy/role/RoleServicePlatformHelperImpl$$ExternalSyntheticLambda0;-><init>(Ljava/io/DataOutputStream;Landroid/content/pm/PackageManagerInternal;I)V
 HSPLcom/android/server/policy/role/RoleServicePlatformHelperImpl$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
@@ -43443,6 +44990,7 @@
 HSPLcom/android/server/policy/role/RoleServicePlatformHelperImpl;->computePackageStateHash(I)Ljava/lang/String;+]Lcom/android/server/policy/role/RoleServicePlatformHelperImpl$MessageDigestOutputStream;Lcom/android/server/policy/role/RoleServicePlatformHelperImpl$MessageDigestOutputStream;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 PLcom/android/server/policy/role/RoleServicePlatformHelperImpl;->getFile(I)Ljava/io/File;
 PLcom/android/server/policy/role/RoleServicePlatformHelperImpl;->getLegacyRoleState(I)Ljava/util/Map;
+PLcom/android/server/policy/role/RoleServicePlatformHelperImpl;->isSettingsApplication(Ljava/lang/String;I)Z
 HSPLcom/android/server/policy/role/RoleServicePlatformHelperImpl;->lambda$computePackageStateHash$0(Ljava/io/DataOutputStream;Landroid/content/pm/PackageManagerInternal;ILcom/android/server/pm/parsing/pkg/AndroidPackage;)V+]Landroid/content/pm/Signature;Landroid/content/pm/Signature;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Ljava/io/DataOutputStream;Ljava/io/DataOutputStream;]Lcom/android/server/pm/pkg/parsing/ParsingPackageRead;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/pm/SigningDetails;Landroid/content/pm/SigningDetails;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStatePackageInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 PLcom/android/server/policy/role/RoleServicePlatformHelperImpl;->readFile(I)Ljava/util/Map;
 PLcom/android/server/policy/role/RoleServicePlatformHelperImpl;->readFromLegacySettings(I)Ljava/util/Map;
@@ -43486,7 +45034,7 @@
 HSPLcom/android/server/power/AttentionDetector;->updateEnabledFromSettings(Landroid/content/Context;)V
 HSPLcom/android/server/power/AttentionDetector;->updateUserActivity(JJ)J+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/attention/AttentionManagerInternal;Lcom/android/server/attention/AttentionManagerService$LocalService;]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Lcom/android/server/wm/WindowManagerInternal;Lcom/android/server/wm/WindowManagerService$LocalService;]Lcom/android/server/power/AttentionDetector;Lcom/android/server/power/AttentionDetector;
 HSPLcom/android/server/power/FaceDownDetector$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/power/FaceDownDetector;)V
-HPLcom/android/server/power/FaceDownDetector$$ExternalSyntheticLambda0;->run()V
+HSPLcom/android/server/power/FaceDownDetector$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/power/FaceDownDetector$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/power/FaceDownDetector;)V
 PLcom/android/server/power/FaceDownDetector$$ExternalSyntheticLambda1;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
 HPLcom/android/server/power/FaceDownDetector$ExponentialMovingAverage;->-$$Nest$fgetmMovingAverage(Lcom/android/server/power/FaceDownDetector$ExponentialMovingAverage;)F
@@ -43496,10 +45044,10 @@
 HSPLcom/android/server/power/FaceDownDetector$ScreenStateReceiver;-><init>(Lcom/android/server/power/FaceDownDetector;)V
 HSPLcom/android/server/power/FaceDownDetector$ScreenStateReceiver;-><init>(Lcom/android/server/power/FaceDownDetector;Lcom/android/server/power/FaceDownDetector$ScreenStateReceiver-IA;)V
 HPLcom/android/server/power/FaceDownDetector$ScreenStateReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
-HPLcom/android/server/power/FaceDownDetector;->$r8$lambda$3aBrZJiQICUQ1P6MfyNVuiRFgFI(Lcom/android/server/power/FaceDownDetector;)V
+HSPLcom/android/server/power/FaceDownDetector;->$r8$lambda$3aBrZJiQICUQ1P6MfyNVuiRFgFI(Lcom/android/server/power/FaceDownDetector;)V
 PLcom/android/server/power/FaceDownDetector;->$r8$lambda$gqYe7OrZslZqSkwu1OG7WXBdzHc(Lcom/android/server/power/FaceDownDetector;Landroid/provider/DeviceConfig$Properties;)V
 PLcom/android/server/power/FaceDownDetector;->-$$Nest$fputmInteractive(Lcom/android/server/power/FaceDownDetector;Z)V
-PLcom/android/server/power/FaceDownDetector;->-$$Nest$mupdateActiveState(Lcom/android/server/power/FaceDownDetector;)V
+HPLcom/android/server/power/FaceDownDetector;->-$$Nest$mupdateActiveState(Lcom/android/server/power/FaceDownDetector;)V
 HSPLcom/android/server/power/FaceDownDetector;-><init>(Ljava/util/function/Consumer;)V
 PLcom/android/server/power/FaceDownDetector;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/power/FaceDownDetector;->exitFaceDown(IJ)V
@@ -43512,7 +45060,7 @@
 HSPLcom/android/server/power/FaceDownDetector;->getUserInteractionBackoffMillis()J
 HSPLcom/android/server/power/FaceDownDetector;->getZAccelerationThreshold()F
 HSPLcom/android/server/power/FaceDownDetector;->isEnabled()Z
-HPLcom/android/server/power/FaceDownDetector;->lambda$new$0()V
+HSPLcom/android/server/power/FaceDownDetector;->lambda$new$0()V
 PLcom/android/server/power/FaceDownDetector;->lambda$systemReady$1(Landroid/provider/DeviceConfig$Properties;)V
 PLcom/android/server/power/FaceDownDetector;->logScreenOff()V
 PLcom/android/server/power/FaceDownDetector;->onAccuracyChanged(Landroid/hardware/Sensor;I)V
@@ -43524,7 +45072,7 @@
 HSPLcom/android/server/power/FaceDownDetector;->systemReady(Landroid/content/Context;)V
 PLcom/android/server/power/FaceDownDetector;->unFlipDetected()V
 HSPLcom/android/server/power/FaceDownDetector;->updateActiveState()V
-HPLcom/android/server/power/FaceDownDetector;->userActivity(I)V
+HSPLcom/android/server/power/FaceDownDetector;->userActivity(I)V
 HSPLcom/android/server/power/InattentiveSleepWarningController;-><init>()V
 HSPLcom/android/server/power/InattentiveSleepWarningController;->isShown()Z
 HSPLcom/android/server/power/LowPowerStandbyController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/power/LowPowerStandbyController;)V
@@ -43546,11 +45094,11 @@
 HPLcom/android/server/power/Notifier$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/power/Notifier;II)V
 HPLcom/android/server/power/Notifier$$ExternalSyntheticLambda2;->run()V
 PLcom/android/server/power/Notifier$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/power/Notifier;)V
-PLcom/android/server/power/Notifier$$ExternalSyntheticLambda3;->run()V
+HPLcom/android/server/power/Notifier$$ExternalSyntheticLambda3;->run()V
 PLcom/android/server/power/Notifier$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/power/Notifier;)V
 PLcom/android/server/power/Notifier$$ExternalSyntheticLambda4;->run()V
 PLcom/android/server/power/Notifier$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/power/Notifier;IZ)V
-PLcom/android/server/power/Notifier$$ExternalSyntheticLambda5;->run()V
+HPLcom/android/server/power/Notifier$$ExternalSyntheticLambda5;->run()V
 HPLcom/android/server/power/Notifier$1;-><init>(Lcom/android/server/power/Notifier;I)V
 HPLcom/android/server/power/Notifier$1;->run()V
 HSPLcom/android/server/power/Notifier$2;-><init>(Lcom/android/server/power/Notifier;)V
@@ -43558,7 +45106,7 @@
 HSPLcom/android/server/power/Notifier$3;-><init>(Lcom/android/server/power/Notifier;)V
 HPLcom/android/server/power/Notifier$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/power/Notifier$NotifierHandler;-><init>(Lcom/android/server/power/Notifier;Landroid/os/Looper;)V
-HPLcom/android/server/power/Notifier$NotifierHandler;->handleMessage(Landroid/os/Message;)V+]Landroid/os/Handler;Lcom/android/server/power/Notifier$NotifierHandler;
+HSPLcom/android/server/power/Notifier$NotifierHandler;->handleMessage(Landroid/os/Message;)V+]Landroid/os/Handler;Lcom/android/server/power/Notifier$NotifierHandler;
 PLcom/android/server/power/Notifier;->$r8$lambda$12151LgGyIv_D9SFvvVhjU0BT18(Lcom/android/server/power/Notifier;)V
 PLcom/android/server/power/Notifier;->$r8$lambda$BiCR0Y24dzT-6fY-LYE6FiLY6s4(Lcom/android/server/power/Notifier;)V
 PLcom/android/server/power/Notifier;->$r8$lambda$I57ZoxZ4N5rRpZjlcTk0QB9k0XI(Lcom/android/server/power/Notifier;IIII)V
@@ -43567,10 +45115,10 @@
 PLcom/android/server/power/Notifier;->$r8$lambda$gj2jPj9Hz83gkJTM16w1ro2-PqM(Lcom/android/server/power/Notifier;I)V
 PLcom/android/server/power/Notifier;->-$$Nest$fgetmActivityManagerInternal(Lcom/android/server/power/Notifier;)Landroid/app/ActivityManagerInternal;
 PLcom/android/server/power/Notifier;->-$$Nest$fgetmBroadcastStartTime(Lcom/android/server/power/Notifier;)J
-HPLcom/android/server/power/Notifier;->-$$Nest$mscreenPolicyChanging(Lcom/android/server/power/Notifier;II)V
+HSPLcom/android/server/power/Notifier;->-$$Nest$mscreenPolicyChanging(Lcom/android/server/power/Notifier;II)V+]Lcom/android/server/power/Notifier;Lcom/android/server/power/Notifier;
 PLcom/android/server/power/Notifier;->-$$Nest$msendEnhancedDischargePredictionBroadcast(Lcom/android/server/power/Notifier;)V
 PLcom/android/server/power/Notifier;->-$$Nest$msendNextBroadcast(Lcom/android/server/power/Notifier;)V
-HPLcom/android/server/power/Notifier;->-$$Nest$msendUserActivity(Lcom/android/server/power/Notifier;II)V
+HSPLcom/android/server/power/Notifier;->-$$Nest$msendUserActivity(Lcom/android/server/power/Notifier;II)V
 PLcom/android/server/power/Notifier;->-$$Nest$mshowWiredChargingStarted(Lcom/android/server/power/Notifier;I)V
 PLcom/android/server/power/Notifier;->-$$Nest$mshowWirelessChargingStarted(Lcom/android/server/power/Notifier;II)V
 HSPLcom/android/server/power/Notifier;-><clinit>()V
@@ -43580,13 +45128,13 @@
 HSPLcom/android/server/power/Notifier;->getBatteryStatsWakeLockMonitorType(I)I
 HPLcom/android/server/power/Notifier;->handleEarlyInteractiveChange()V
 HPLcom/android/server/power/Notifier;->handleLateInteractiveChange()V
-PLcom/android/server/power/Notifier;->isChargingFeedbackEnabled(I)Z
+HPLcom/android/server/power/Notifier;->isChargingFeedbackEnabled(I)Z
 HPLcom/android/server/power/Notifier;->lambda$handleEarlyInteractiveChange$0()V
 HPLcom/android/server/power/Notifier;->lambda$handleEarlyInteractiveChange$1()V
 HPLcom/android/server/power/Notifier;->lambda$handleLateInteractiveChange$2(I)V
 HPLcom/android/server/power/Notifier;->lambda$handleLateInteractiveChange$3(II)V
 HPLcom/android/server/power/Notifier;->lambda$onPowerGroupWakefulnessChanged$4(IIII)V
-PLcom/android/server/power/Notifier;->lambda$playChargingStartedFeedback$5(IZ)V
+HPLcom/android/server/power/Notifier;->lambda$playChargingStartedFeedback$5(IZ)V
 HSPLcom/android/server/power/Notifier;->notifyWakeLockListener(Landroid/os/IWakeLockCallback;Z)V
 HPLcom/android/server/power/Notifier;->onLongPartialWakeLockFinish(Ljava/lang/String;ILandroid/os/WorkSource;Ljava/lang/String;)V+]Lcom/android/internal/app/IBatteryStats;Lcom/android/server/am/BatteryStatsService;
 HPLcom/android/server/power/Notifier;->onLongPartialWakeLockStart(Ljava/lang/String;ILandroid/os/WorkSource;Ljava/lang/String;)V+]Lcom/android/internal/app/IBatteryStats;Lcom/android/server/am/BatteryStatsService;
@@ -43603,11 +45151,11 @@
 PLcom/android/server/power/Notifier;->onWirelessChargingStarted(II)V
 PLcom/android/server/power/Notifier;->playChargingStartedFeedback(IZ)V
 PLcom/android/server/power/Notifier;->postEnhancedDischargePredictionBroadcast(J)V
-HPLcom/android/server/power/Notifier;->screenPolicyChanging(II)V
+HSPLcom/android/server/power/Notifier;->screenPolicyChanging(II)V+]Lcom/android/server/power/ScreenUndimDetector;Lcom/android/server/power/ScreenUndimDetector;
 PLcom/android/server/power/Notifier;->sendEnhancedDischargePredictionBroadcast()V
 HPLcom/android/server/power/Notifier;->sendGoToSleepBroadcast()V
 HPLcom/android/server/power/Notifier;->sendNextBroadcast()V
-HPLcom/android/server/power/Notifier;->sendUserActivity(II)V+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/power/ScreenUndimDetector;Lcom/android/server/power/ScreenUndimDetector;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/telephony/TelephonyManager;Landroid/telephony/TelephonyManager;]Lcom/android/server/power/FaceDownDetector;Lcom/android/server/power/FaceDownDetector;
+HSPLcom/android/server/power/Notifier;->sendUserActivity(II)V+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/power/ScreenUndimDetector;Lcom/android/server/power/ScreenUndimDetector;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/telephony/TelephonyManager;Landroid/telephony/TelephonyManager;]Lcom/android/server/power/FaceDownDetector;Lcom/android/server/power/FaceDownDetector;
 HPLcom/android/server/power/Notifier;->sendWakeUpBroadcast()V
 PLcom/android/server/power/Notifier;->showWiredChargingStarted(I)V
 PLcom/android/server/power/Notifier;->showWirelessChargingStarted(II)V
@@ -43628,9 +45176,9 @@
 HSPLcom/android/server/power/PowerGroup;->getWakeLockSummaryLocked()I
 HSPLcom/android/server/power/PowerGroup;->getWakefulnessLocked()I
 HSPLcom/android/server/power/PowerGroup;->isBrightOrDimLocked()Z+]Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;
-PLcom/android/server/power/PowerGroup;->isPolicyBrightLocked()Z
+HPLcom/android/server/power/PowerGroup;->isPolicyBrightLocked()Z
 PLcom/android/server/power/PowerGroup;->isPolicyDimLocked()Z
-HPLcom/android/server/power/PowerGroup;->isPolicyVrLocked()Z
+HPLcom/android/server/power/PowerGroup;->isPolicyVrLocked()Z+]Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;Landroid/hardware/display/DisplayManagerInternal$DisplayPowerRequest;
 HSPLcom/android/server/power/PowerGroup;->isPoweringOnLocked()Z
 HSPLcom/android/server/power/PowerGroup;->isReadyLocked()Z
 HSPLcom/android/server/power/PowerGroup;->isSandmanSummonedLocked()Z
@@ -43653,18 +45201,20 @@
 HSPLcom/android/server/power/PowerManagerService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/power/PowerManagerService;)V
 HPLcom/android/server/power/PowerManagerService$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/power/PowerManagerService$1;-><init>(Lcom/android/server/power/PowerManagerService;)V
+HSPLcom/android/server/power/PowerManagerService$1;->acquireSuspendBlocker(Ljava/lang/String;)V
 HSPLcom/android/server/power/PowerManagerService$1;->onDisplayStateChange(ZZ)V
 PLcom/android/server/power/PowerManagerService$1;->onProximityNegative()V
 PLcom/android/server/power/PowerManagerService$1;->onProximityPositive()V
 HSPLcom/android/server/power/PowerManagerService$1;->onStateChanged()V
+HSPLcom/android/server/power/PowerManagerService$1;->releaseSuspendBlocker(Ljava/lang/String;)V
 PLcom/android/server/power/PowerManagerService$2;-><init>(Lcom/android/server/power/PowerManagerService;IZLjava/lang/String;)V
 PLcom/android/server/power/PowerManagerService$2;->run()V
 HSPLcom/android/server/power/PowerManagerService$4;-><init>(Lcom/android/server/power/PowerManagerService;)V
 HSPLcom/android/server/power/PowerManagerService$BatteryReceiver;-><init>(Lcom/android/server/power/PowerManagerService;)V
-HPLcom/android/server/power/PowerManagerService$BatteryReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/power/PowerManagerService$BatteryReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/power/PowerManagerService$BinderService;-><init>(Lcom/android/server/power/PowerManagerService;)V
 HSPLcom/android/server/power/PowerManagerService$BinderService;->acquireWakeLock(Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;Ljava/lang/String;ILandroid/os/IWakeLockCallback;)V+]Landroid/os/WorkSource;Landroid/os/WorkSource;]Landroid/content/Context;Landroid/app/ContextImpl;
-HPLcom/android/server/power/PowerManagerService$BinderService;->acquireWakeLockAsync(Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;Ljava/lang/String;)V
+HSPLcom/android/server/power/PowerManagerService$BinderService;->acquireWakeLockAsync(Landroid/os/IBinder;ILjava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;Ljava/lang/String;)V
 HSPLcom/android/server/power/PowerManagerService$BinderService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/power/PowerManagerService$BinderService;->getBatteryDischargePrediction()Landroid/os/ParcelDuration;
 HSPLcom/android/server/power/PowerManagerService$BinderService;->getBrightnessConstraint(I)F
@@ -43672,34 +45222,34 @@
 PLcom/android/server/power/PowerManagerService$BinderService;->getLastShutdownReason()I
 PLcom/android/server/power/PowerManagerService$BinderService;->getPowerSaveModeTrigger()I
 HSPLcom/android/server/power/PowerManagerService$BinderService;->getPowerSaveState(I)Landroid/os/PowerSaveState;
-HPLcom/android/server/power/PowerManagerService$BinderService;->goToSleep(JII)V
+HSPLcom/android/server/power/PowerManagerService$BinderService;->goToSleep(JII)V
 HPLcom/android/server/power/PowerManagerService$BinderService;->isAmbientDisplayAvailable()Z
 PLcom/android/server/power/PowerManagerService$BinderService;->isAmbientDisplaySuppressedForTokenByApp(Ljava/lang/String;I)Z
 PLcom/android/server/power/PowerManagerService$BinderService;->isBatteryDischargePredictionPersonalized()Z
 HSPLcom/android/server/power/PowerManagerService$BinderService;->isDeviceIdleMode()Z+]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
 PLcom/android/server/power/PowerManagerService$BinderService;->isEnhancedDischargePredictionValidLocked(J)Z
 HSPLcom/android/server/power/PowerManagerService$BinderService;->isInteractive()Z
-HPLcom/android/server/power/PowerManagerService$BinderService;->isLightDeviceIdleMode()Z+]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
-HSPLcom/android/server/power/PowerManagerService$BinderService;->isPowerSaveMode()Z
-PLcom/android/server/power/PowerManagerService$BinderService;->isWakeLockLevelSupported(I)Z
+HSPLcom/android/server/power/PowerManagerService$BinderService;->isLightDeviceIdleMode()Z+]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
+HSPLcom/android/server/power/PowerManagerService$BinderService;->isPowerSaveMode()Z+]Lcom/android/server/power/batterysaver/BatterySaverController;Lcom/android/server/power/batterysaver/BatterySaverController;
+HSPLcom/android/server/power/PowerManagerService$BinderService;->isWakeLockLevelSupported(I)Z
 PLcom/android/server/power/PowerManagerService$BinderService;->nap(J)V
 PLcom/android/server/power/PowerManagerService$BinderService;->reboot(ZLjava/lang/String;Z)V
 HSPLcom/android/server/power/PowerManagerService$BinderService;->releaseWakeLock(Landroid/os/IBinder;I)V+]Landroid/content/Context;Landroid/app/ContextImpl;
-HPLcom/android/server/power/PowerManagerService$BinderService;->releaseWakeLockAsync(Landroid/os/IBinder;I)V
+HSPLcom/android/server/power/PowerManagerService$BinderService;->releaseWakeLockAsync(Landroid/os/IBinder;I)V
 HPLcom/android/server/power/PowerManagerService$BinderService;->setAdaptivePowerSaveEnabled(Z)Z
 HPLcom/android/server/power/PowerManagerService$BinderService;->setAdaptivePowerSavePolicy(Landroid/os/BatterySaverPolicyConfig;)Z
 HPLcom/android/server/power/PowerManagerService$BinderService;->setBatteryDischargePrediction(Landroid/os/ParcelDuration;Z)V
-HPLcom/android/server/power/PowerManagerService$BinderService;->setDozeAfterScreenOff(Z)V
+HSPLcom/android/server/power/PowerManagerService$BinderService;->setDozeAfterScreenOff(Z)V
 HPLcom/android/server/power/PowerManagerService$BinderService;->setDynamicPowerSaveHint(ZI)Z
 PLcom/android/server/power/PowerManagerService$BinderService;->setFullPowerSavePolicy(Landroid/os/BatterySaverPolicyConfig;)Z
 PLcom/android/server/power/PowerManagerService$BinderService;->setPowerSaveModeEnabled(Z)Z
 PLcom/android/server/power/PowerManagerService$BinderService;->setStayOnSetting(I)V
 PLcom/android/server/power/PowerManagerService$BinderService;->shutdown(ZLjava/lang/String;Z)V
 PLcom/android/server/power/PowerManagerService$BinderService;->suppressAmbientDisplay(Ljava/lang/String;Z)V
-HPLcom/android/server/power/PowerManagerService$BinderService;->updateWakeLockUids(Landroid/os/IBinder;[I)V+]Landroid/os/WorkSource;Landroid/os/WorkSource;]Lcom/android/server/power/PowerManagerService$BinderService;Lcom/android/server/power/PowerManagerService$BinderService;
-HPLcom/android/server/power/PowerManagerService$BinderService;->updateWakeLockUidsAsync(Landroid/os/IBinder;[I)V
-HPLcom/android/server/power/PowerManagerService$BinderService;->updateWakeLockWorkSource(Landroid/os/IBinder;Landroid/os/WorkSource;Ljava/lang/String;)V+]Landroid/os/WorkSource;Landroid/os/WorkSource;]Landroid/content/Context;Landroid/app/ContextImpl;
-HSPLcom/android/server/power/PowerManagerService$BinderService;->userActivity(IJII)V+]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/power/PowerManagerService$Clock;Lcom/android/server/power/PowerManagerService$Injector$$ExternalSyntheticLambda1;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/power/PowerManagerService$BinderService;->updateWakeLockUids(Landroid/os/IBinder;[I)V+]Landroid/os/WorkSource;Landroid/os/WorkSource;]Lcom/android/server/power/PowerManagerService$BinderService;Lcom/android/server/power/PowerManagerService$BinderService;
+HSPLcom/android/server/power/PowerManagerService$BinderService;->updateWakeLockUidsAsync(Landroid/os/IBinder;[I)V+]Lcom/android/server/power/PowerManagerService$BinderService;Lcom/android/server/power/PowerManagerService$BinderService;
+HSPLcom/android/server/power/PowerManagerService$BinderService;->updateWakeLockWorkSource(Landroid/os/IBinder;Landroid/os/WorkSource;Ljava/lang/String;)V+]Landroid/os/WorkSource;Landroid/os/WorkSource;]Landroid/content/Context;Landroid/app/ContextImpl;
+HSPLcom/android/server/power/PowerManagerService$BinderService;->userActivity(IJII)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/power/PowerManagerService$Clock;Lcom/android/server/power/PowerManagerService$Injector$$ExternalSyntheticLambda1;
 HPLcom/android/server/power/PowerManagerService$BinderService;->wakeUp(JILjava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/power/PowerManagerService$Constants;-><init>(Lcom/android/server/power/PowerManagerService;Landroid/os/Handler;)V
 PLcom/android/server/power/PowerManagerService$Constants;->dump(Ljava/io/PrintWriter;)V
@@ -43710,12 +45260,12 @@
 PLcom/android/server/power/PowerManagerService$DeviceStateListener;->onStateChanged(I)V
 HSPLcom/android/server/power/PowerManagerService$DisplayGroupPowerChangeListener;-><init>(Lcom/android/server/power/PowerManagerService;)V
 HSPLcom/android/server/power/PowerManagerService$DisplayGroupPowerChangeListener;-><init>(Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService$DisplayGroupPowerChangeListener-IA;)V
-PLcom/android/server/power/PowerManagerService$DisplayGroupPowerChangeListener;->onDisplayGroupAdded(I)V
-PLcom/android/server/power/PowerManagerService$DisplayGroupPowerChangeListener;->onDisplayGroupChanged(I)V
+HPLcom/android/server/power/PowerManagerService$DisplayGroupPowerChangeListener;->onDisplayGroupAdded(I)V
+HPLcom/android/server/power/PowerManagerService$DisplayGroupPowerChangeListener;->onDisplayGroupChanged(I)V
 PLcom/android/server/power/PowerManagerService$DisplayGroupPowerChangeListener;->onDisplayGroupRemoved(I)V
 HSPLcom/android/server/power/PowerManagerService$DockReceiver;-><init>(Lcom/android/server/power/PowerManagerService;)V
 HSPLcom/android/server/power/PowerManagerService$DockReceiver;-><init>(Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService$DockReceiver-IA;)V
-PLcom/android/server/power/PowerManagerService$DockReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/power/PowerManagerService$DockReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/power/PowerManagerService$DreamReceiver;-><init>(Lcom/android/server/power/PowerManagerService;)V
 HSPLcom/android/server/power/PowerManagerService$DreamReceiver;-><init>(Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService$DreamReceiver-IA;)V
 HPLcom/android/server/power/PowerManagerService$DreamReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
@@ -43753,17 +45303,17 @@
 PLcom/android/server/power/PowerManagerService$LocalService;->interceptPowerKeyDown(Landroid/view/KeyEvent;)Z
 HSPLcom/android/server/power/PowerManagerService$LocalService;->registerLowPowerModeObserver(Landroid/os/PowerManagerInternal$LowPowerModeListener;)V
 PLcom/android/server/power/PowerManagerService$LocalService;->setDeviceIdleMode(Z)Z
-HSPLcom/android/server/power/PowerManagerService$LocalService;->setDeviceIdleTempWhitelist([I)V
+HSPLcom/android/server/power/PowerManagerService$LocalService;->setDeviceIdleTempWhitelist([I)V+]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
 HSPLcom/android/server/power/PowerManagerService$LocalService;->setDeviceIdleWhitelist([I)V
 HPLcom/android/server/power/PowerManagerService$LocalService;->setDozeOverrideFromDreamManager(II)V
 PLcom/android/server/power/PowerManagerService$LocalService;->setLightDeviceIdleMode(Z)Z
 HSPLcom/android/server/power/PowerManagerService$LocalService;->setMaximumScreenOffTimeoutFromDeviceAdmin(IJ)V
 HPLcom/android/server/power/PowerManagerService$LocalService;->setPowerBoost(II)V
-HPLcom/android/server/power/PowerManagerService$LocalService;->setPowerMode(IZ)V
+HSPLcom/android/server/power/PowerManagerService$LocalService;->setPowerMode(IZ)V
 HSPLcom/android/server/power/PowerManagerService$LocalService;->setScreenBrightnessOverrideFromWindowManager(F)V
 HSPLcom/android/server/power/PowerManagerService$LocalService;->setUserActivityTimeoutOverrideFromWindowManager(J)V
-HSPLcom/android/server/power/PowerManagerService$LocalService;->uidActive(I)V
-HSPLcom/android/server/power/PowerManagerService$LocalService;->uidGone(I)V
+HSPLcom/android/server/power/PowerManagerService$LocalService;->uidActive(I)V+]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
+HSPLcom/android/server/power/PowerManagerService$LocalService;->uidGone(I)V+]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
 HSPLcom/android/server/power/PowerManagerService$LocalService;->uidIdle(I)V+]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
 HSPLcom/android/server/power/PowerManagerService$LocalService;->updateUidProcState(II)V+]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
 HSPLcom/android/server/power/PowerManagerService$NativeWrapper;-><init>()V
@@ -43783,12 +45333,16 @@
 PLcom/android/server/power/PowerManagerService$SettingsObserver;->onChange(ZLandroid/net/Uri;)V
 HSPLcom/android/server/power/PowerManagerService$SuspendBlockerImpl;-><init>(Lcom/android/server/power/PowerManagerService;Ljava/lang/String;)V
 HSPLcom/android/server/power/PowerManagerService$SuspendBlockerImpl;->acquire()V+]Lcom/android/server/power/PowerManagerService$NativeWrapper;Lcom/android/server/power/PowerManagerService$NativeWrapper;
+HSPLcom/android/server/power/PowerManagerService$SuspendBlockerImpl;->acquire(Ljava/lang/String;)V+]Lcom/android/server/power/PowerManagerService$NativeWrapper;Lcom/android/server/power/PowerManagerService$NativeWrapper;]Lcom/android/server/power/PowerManagerService$SuspendBlockerImpl;Lcom/android/server/power/PowerManagerService$SuspendBlockerImpl;
 PLcom/android/server/power/PowerManagerService$SuspendBlockerImpl;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+HSPLcom/android/server/power/PowerManagerService$SuspendBlockerImpl;->recordReferenceLocked(Ljava/lang/String;)V
 HSPLcom/android/server/power/PowerManagerService$SuspendBlockerImpl;->release()V+]Lcom/android/server/power/PowerManagerService$NativeWrapper;Lcom/android/server/power/PowerManagerService$NativeWrapper;
+HSPLcom/android/server/power/PowerManagerService$SuspendBlockerImpl;->release(Ljava/lang/String;)V+]Lcom/android/server/power/PowerManagerService$NativeWrapper;Lcom/android/server/power/PowerManagerService$NativeWrapper;]Lcom/android/server/power/PowerManagerService$SuspendBlockerImpl;Lcom/android/server/power/PowerManagerService$SuspendBlockerImpl;
+HSPLcom/android/server/power/PowerManagerService$SuspendBlockerImpl;->removeReferenceLocked(Ljava/lang/String;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/LongArray;Landroid/util/LongArray;
 PLcom/android/server/power/PowerManagerService$SuspendBlockerImpl;->toString()Ljava/lang/String;
 HSPLcom/android/server/power/PowerManagerService$UidState;-><init>(I)V
 HSPLcom/android/server/power/PowerManagerService$UserSwitchedReceiver;-><init>(Lcom/android/server/power/PowerManagerService;)V
-PLcom/android/server/power/PowerManagerService$UserSwitchedReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/power/PowerManagerService$UserSwitchedReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/power/PowerManagerService$WakeLock;-><init>(Lcom/android/server/power/PowerManagerService;Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;Ljava/lang/String;IILcom/android/server/power/PowerManagerService$UidState;Landroid/os/IWakeLockCallback;)V+]Lcom/android/server/power/PowerManagerService$WakeLock;Lcom/android/server/power/PowerManagerService$WakeLock;
 HPLcom/android/server/power/PowerManagerService$WakeLock;->binderDied()V
 PLcom/android/server/power/PowerManagerService$WakeLock;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
@@ -43796,7 +45350,7 @@
 PLcom/android/server/power/PowerManagerService$WakeLock;->getLockLevelString()Ljava/lang/String;
 HSPLcom/android/server/power/PowerManagerService$WakeLock;->getPowerGroupId()Ljava/lang/Integer;+]Landroid/hardware/display/DisplayManagerInternal;Lcom/android/server/display/DisplayManagerService$LocalService;
 HPLcom/android/server/power/PowerManagerService$WakeLock;->hasSameProperties(ILjava/lang/String;Landroid/os/WorkSource;IILandroid/os/IWakeLockCallback;)Z
-HPLcom/android/server/power/PowerManagerService$WakeLock;->hasSameWorkSource(Landroid/os/WorkSource;)Z
+HSPLcom/android/server/power/PowerManagerService$WakeLock;->hasSameWorkSource(Landroid/os/WorkSource;)Z
 HSPLcom/android/server/power/PowerManagerService$WakeLock;->linkToDeath()V+]Landroid/os/IBinder;Landroid/os/BinderProxy;,Landroid/os/Binder;
 HSPLcom/android/server/power/PowerManagerService$WakeLock;->setDisabled(Z)Z
 PLcom/android/server/power/PowerManagerService$WakeLock;->toString()Ljava/lang/String;
@@ -43808,7 +45362,7 @@
 PLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmAmbientDisplaySuppressionController(Lcom/android/server/power/PowerManagerService;)Lcom/android/server/power/AmbientDisplaySuppressionController;
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmBatterySaverController(Lcom/android/server/power/PowerManagerService;)Lcom/android/server/power/batterysaver/BatterySaverController;
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmBatterySaverPolicy(Lcom/android/server/power/PowerManagerService;)Lcom/android/server/power/batterysaver/BatterySaverPolicy;
-PLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmBatterySaverStateMachine(Lcom/android/server/power/PowerManagerService;)Lcom/android/server/power/batterysaver/BatterySaverStateMachine;
+HPLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmBatterySaverStateMachine(Lcom/android/server/power/PowerManagerService;)Lcom/android/server/power/batterysaver/BatterySaverStateMachine;
 PLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmBatteryStats(Lcom/android/server/power/PowerManagerService;)Lcom/android/internal/app/IBatteryStats;
 PLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmBootCompleted(Lcom/android/server/power/PowerManagerService;)Z
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmClock(Lcom/android/server/power/PowerManagerService;)Lcom/android/server/power/PowerManagerService$Clock;
@@ -43816,24 +45370,24 @@
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmDecoupleHalAutoSuspendModeFromDisplayConfig(Lcom/android/server/power/PowerManagerService;)Z
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmDecoupleHalInteractiveModeFromDisplayConfig(Lcom/android/server/power/PowerManagerService;)Z
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmDirty(Lcom/android/server/power/PowerManagerService;)I
-PLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmDisplayManagerInternal(Lcom/android/server/power/PowerManagerService;)Landroid/hardware/display/DisplayManagerInternal;
+HPLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmDisplayManagerInternal(Lcom/android/server/power/PowerManagerService;)Landroid/hardware/display/DisplayManagerInternal;
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmDisplaySuspendBlocker(Lcom/android/server/power/PowerManagerService;)Lcom/android/server/power/SuspendBlocker;
-PLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmDockState(Lcom/android/server/power/PowerManagerService;)I
+HSPLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmDockState(Lcom/android/server/power/PowerManagerService;)I
 PLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmEnhancedDischargePredictionIsPersonalized(Lcom/android/server/power/PowerManagerService;)Z
 PLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmEnhancedDischargeTimeElapsed(Lcom/android/server/power/PowerManagerService;)J
 PLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmEnhancedDischargeTimeLock(Lcom/android/server/power/PowerManagerService;)Ljava/lang/Object;
 PLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmIsPowered(Lcom/android/server/power/PowerManagerService;)Z
 PLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmLastEnhancedDischargeTimeUpdatedElapsed(Lcom/android/server/power/PowerManagerService;)J
-PLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmLastWarningAboutUserActivityPermission(Lcom/android/server/power/PowerManagerService;)J
+HPLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmLastWarningAboutUserActivityPermission(Lcom/android/server/power/PowerManagerService;)J
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmLock(Lcom/android/server/power/PowerManagerService;)Ljava/lang/Object;
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmNativeWrapper(Lcom/android/server/power/PowerManagerService;)Lcom/android/server/power/PowerManagerService$NativeWrapper;
-PLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmNotifier(Lcom/android/server/power/PowerManagerService;)Lcom/android/server/power/Notifier;
+HPLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmNotifier(Lcom/android/server/power/PowerManagerService;)Lcom/android/server/power/Notifier;
 PLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmPowerGroupWakefulnessChangeListener(Lcom/android/server/power/PowerManagerService;)Lcom/android/server/power/PowerManagerService$PowerGroupWakefulnessChangeListener;
-PLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmPowerGroups(Lcom/android/server/power/PowerManagerService;)Landroid/util/SparseArray;
+HSPLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmPowerGroups(Lcom/android/server/power/PowerManagerService;)Landroid/util/SparseArray;
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmSuspendBlockers(Lcom/android/server/power/PowerManagerService;)Ljava/util/ArrayList;
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$fgetmSystemReady(Lcom/android/server/power/PowerManagerService;)Z
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$fputmDirty(Lcom/android/server/power/PowerManagerService;I)V
-PLcom/android/server/power/PowerManagerService;->-$$Nest$fputmDockState(Lcom/android/server/power/PowerManagerService;I)V
+HSPLcom/android/server/power/PowerManagerService;->-$$Nest$fputmDockState(Lcom/android/server/power/PowerManagerService;I)V
 PLcom/android/server/power/PowerManagerService;->-$$Nest$fputmEnhancedDischargePredictionIsPersonalized(Lcom/android/server/power/PowerManagerService;Z)V
 PLcom/android/server/power/PowerManagerService;->-$$Nest$fputmEnhancedDischargeTimeElapsed(Lcom/android/server/power/PowerManagerService;J)V
 PLcom/android/server/power/PowerManagerService;->-$$Nest$fputmForegroundProfile(Lcom/android/server/power/PowerManagerService;I)V
@@ -43849,18 +45403,18 @@
 PLcom/android/server/power/PowerManagerService;->-$$Nest$mdumpProto(Lcom/android/server/power/PowerManagerService;Ljava/io/FileDescriptor;)V
 PLcom/android/server/power/PowerManagerService;->-$$Nest$mgetLastGoToSleepInternal(Lcom/android/server/power/PowerManagerService;)Landroid/os/PowerManager$SleepData;
 PLcom/android/server/power/PowerManagerService;->-$$Nest$mgetLastWakeupInternal(Lcom/android/server/power/PowerManagerService;)Landroid/os/PowerManager$WakeData;
-HPLcom/android/server/power/PowerManagerService;->-$$Nest$mhandleBatteryStateChangedLocked(Lcom/android/server/power/PowerManagerService;)V
+HSPLcom/android/server/power/PowerManagerService;->-$$Nest$mhandleBatteryStateChangedLocked(Lcom/android/server/power/PowerManagerService;)V
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$mhandleSandman(Lcom/android/server/power/PowerManagerService;I)V+]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
 PLcom/android/server/power/PowerManagerService;->-$$Nest$mhandleUserActivityTimeout(Lcom/android/server/power/PowerManagerService;)V
 HPLcom/android/server/power/PowerManagerService;->-$$Nest$mhandleWakeLockDeath(Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService$WakeLock;)V
 PLcom/android/server/power/PowerManagerService;->-$$Nest$minterceptPowerKeyDownInternal(Lcom/android/server/power/PowerManagerService;Landroid/view/KeyEvent;)Z
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$misInteractiveInternal(Lcom/android/server/power/PowerManagerService;)Z
-PLcom/android/server/power/PowerManagerService;->-$$Nest$misWakeLockLevelSupportedInternal(Lcom/android/server/power/PowerManagerService;I)Z
+HSPLcom/android/server/power/PowerManagerService;->-$$Nest$misWakeLockLevelSupportedInternal(Lcom/android/server/power/PowerManagerService;I)Z
 PLcom/android/server/power/PowerManagerService;->-$$Nest$mmaybeUpdateForegroundProfileLastActivityLocked(Lcom/android/server/power/PowerManagerService;J)V
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$mnativeInit(Lcom/android/server/power/PowerManagerService;)V
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$mreleaseWakeLockInternal(Lcom/android/server/power/PowerManagerService;Landroid/os/IBinder;I)V
 PLcom/android/server/power/PowerManagerService;->-$$Nest$mscheduleSandmanLocked(Lcom/android/server/power/PowerManagerService;)V
-PLcom/android/server/power/PowerManagerService;->-$$Nest$msetDozeAfterScreenOffInternal(Lcom/android/server/power/PowerManagerService;Z)V
+HSPLcom/android/server/power/PowerManagerService;->-$$Nest$msetDozeAfterScreenOffInternal(Lcom/android/server/power/PowerManagerService;Z)V
 HPLcom/android/server/power/PowerManagerService;->-$$Nest$msetDozeOverrideFromDreamManagerInternal(Lcom/android/server/power/PowerManagerService;II)V
 PLcom/android/server/power/PowerManagerService;->-$$Nest$msetLowPowerModeInternal(Lcom/android/server/power/PowerManagerService;Z)Z
 HPLcom/android/server/power/PowerManagerService;->-$$Nest$msetPowerBoostInternal(Lcom/android/server/power/PowerManagerService;II)V
@@ -43868,13 +45422,14 @@
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$msetScreenBrightnessOverrideFromWindowManagerInternal(Lcom/android/server/power/PowerManagerService;F)V
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$msetUserActivityTimeoutOverrideFromWindowManagerInternal(Lcom/android/server/power/PowerManagerService;J)V
 PLcom/android/server/power/PowerManagerService;->-$$Nest$mshutdownOrRebootInternal(Lcom/android/server/power/PowerManagerService;IZLjava/lang/String;Z)V
-PLcom/android/server/power/PowerManagerService;->-$$Nest$msleepPowerGroupLocked(Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerGroup;JII)Z
-PLcom/android/server/power/PowerManagerService;->-$$Nest$mupdateGlobalWakefulnessLocked(Lcom/android/server/power/PowerManagerService;JIIILjava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/power/PowerManagerService;->-$$Nest$msleepPowerGroupLocked(Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerGroup;JII)Z
+HPLcom/android/server/power/PowerManagerService;->-$$Nest$mupdateGlobalWakefulnessLocked(Lcom/android/server/power/PowerManagerService;JIIILjava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$mupdatePowerStateLocked(Lcom/android/server/power/PowerManagerService;)V
-HPLcom/android/server/power/PowerManagerService;->-$$Nest$mupdateWakeLockWorkSourceInternal(Lcom/android/server/power/PowerManagerService;Landroid/os/IBinder;Landroid/os/WorkSource;Ljava/lang/String;I)V
+HSPLcom/android/server/power/PowerManagerService;->-$$Nest$mupdateWakeLockWorkSourceInternal(Lcom/android/server/power/PowerManagerService;Landroid/os/IBinder;Landroid/os/WorkSource;Ljava/lang/String;I)V
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$muserActivityInternal(Lcom/android/server/power/PowerManagerService;IJIII)V
 PLcom/android/server/power/PowerManagerService;->-$$Nest$muserActivityNoUpdateLocked(Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerGroup;JIII)Z
 PLcom/android/server/power/PowerManagerService;->-$$Nest$mwakePowerGroupLocked(Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerGroup;JILjava/lang/String;ILjava/lang/String;I)V
+PLcom/android/server/power/PowerManagerService;->-$$Nest$sfgetDATE_FORMAT()Ljava/text/SimpleDateFormat;
 PLcom/android/server/power/PowerManagerService;->-$$Nest$sfgetsQuiescent()Z
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$smcopyWorkSource(Landroid/os/WorkSource;)Landroid/os/WorkSource;
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$smnativeAcquireSuspendBlocker(Ljava/lang/String;)V
@@ -43882,9 +45437,10 @@
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$smnativeSetAutoSuspend(Z)V
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$smnativeSetPowerBoost(II)V
 HSPLcom/android/server/power/PowerManagerService;->-$$Nest$smnativeSetPowerMode(IZ)Z
+HSPLcom/android/server/power/PowerManagerService;-><clinit>()V
 HSPLcom/android/server/power/PowerManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/power/PowerManagerService;-><init>(Landroid/content/Context;Lcom/android/server/power/PowerManagerService$Injector;)V
-HSPLcom/android/server/power/PowerManagerService;->acquireWakeLockInternal(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;Ljava/lang/String;IILandroid/os/IWakeLockCallback;)V+]Lcom/android/server/power/PowerManagerService$WakeLock;Lcom/android/server/power/PowerManagerService$WakeLock;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/hardware/display/DisplayManagerInternal;Lcom/android/server/display/DisplayManagerService$LocalService;]Landroid/view/DisplayInfo;Landroid/view/DisplayInfo;
+HSPLcom/android/server/power/PowerManagerService;->acquireWakeLockInternal(Landroid/os/IBinder;IILjava/lang/String;Ljava/lang/String;Landroid/os/WorkSource;Ljava/lang/String;IILandroid/os/IWakeLockCallback;)V+]Lcom/android/server/power/PowerManagerService$WakeLock;Lcom/android/server/power/PowerManagerService$WakeLock;]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;]Landroid/hardware/display/DisplayManagerInternal;Lcom/android/server/display/DisplayManagerService$LocalService;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/DisplayInfo;Landroid/view/DisplayInfo;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/power/PowerManagerService;->adjustWakeLockSummary(II)I
 HSPLcom/android/server/power/PowerManagerService;->applyWakeLockFlagsOnAcquireLocked(Lcom/android/server/power/PowerManagerService$WakeLock;Z)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/power/PowerManagerService$WakeLock;Lcom/android/server/power/PowerManagerService$WakeLock;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;]Lcom/android/server/power/PowerManagerService$Clock;Lcom/android/server/power/PowerManagerService$Injector$$ExternalSyntheticLambda1;]Landroid/os/WorkSource;Landroid/os/WorkSource;]Landroid/os/WorkSource$WorkChain;Landroid/os/WorkSource$WorkChain;
 HSPLcom/android/server/power/PowerManagerService;->applyWakeLockFlagsOnReleaseLocked(Lcom/android/server/power/PowerManagerService$WakeLock;)V
@@ -43893,9 +45449,9 @@
 HPLcom/android/server/power/PowerManagerService;->canDreamLocked(Lcom/android/server/power/PowerGroup;)Z+]Lcom/android/server/power/PowerGroup;Lcom/android/server/power/PowerGroup;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
 HPLcom/android/server/power/PowerManagerService;->checkForLongWakeLocks()V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;]Lcom/android/server/power/PowerManagerService$Clock;Lcom/android/server/power/PowerManagerService$Injector$$ExternalSyntheticLambda1;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/power/PowerManagerService;->copyWorkSource(Landroid/os/WorkSource;)Landroid/os/WorkSource;
-PLcom/android/server/power/PowerManagerService;->dozePowerGroupLocked(Lcom/android/server/power/PowerGroup;JII)Z
+HPLcom/android/server/power/PowerManagerService;->dozePowerGroupLocked(Lcom/android/server/power/PowerGroup;JII)Z
 PLcom/android/server/power/PowerManagerService;->dreamPowerGroupLocked(Lcom/android/server/power/PowerGroup;JI)Z
-PLcom/android/server/power/PowerManagerService;->dumpInternal(Ljava/io/PrintWriter;)V
+HPLcom/android/server/power/PowerManagerService;->dumpInternal(Ljava/io/PrintWriter;)V
 PLcom/android/server/power/PowerManagerService;->dumpProto(Ljava/io/FileDescriptor;)V
 HSPLcom/android/server/power/PowerManagerService;->enqueueNotifyLongMsgLocked(J)V
 HSPLcom/android/server/power/PowerManagerService;->findWakeLockIndexLocked(Landroid/os/IBinder;)I+]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -43912,9 +45468,9 @@
 HSPLcom/android/server/power/PowerManagerService;->getScreenOffTimeoutWithFaceDownLocked(JJ)J
 HSPLcom/android/server/power/PowerManagerService;->getSleepTimeoutLocked(J)J
 HSPLcom/android/server/power/PowerManagerService;->getWakeLockSummaryFlags(Lcom/android/server/power/PowerManagerService$WakeLock;)I
-HPLcom/android/server/power/PowerManagerService;->handleBatteryStateChangedLocked()V
-HSPLcom/android/server/power/PowerManagerService;->handleSandman(I)V+]Lcom/android/server/power/PowerGroup;Lcom/android/server/power/PowerGroup;]Landroid/service/dreams/DreamManagerInternal;Lcom/android/server/dreams/DreamManagerService$LocalService;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;]Lcom/android/server/power/PowerManagerService$Clock;Lcom/android/server/power/PowerManagerService$Injector$$ExternalSyntheticLambda1;]Landroid/content/Context;Landroid/app/ContextImpl;
-PLcom/android/server/power/PowerManagerService;->handleSettingsChangedLocked()V
+HSPLcom/android/server/power/PowerManagerService;->handleBatteryStateChangedLocked()V
+HSPLcom/android/server/power/PowerManagerService;->handleSandman(I)V+]Lcom/android/server/power/PowerGroup;Lcom/android/server/power/PowerGroup;]Landroid/service/dreams/DreamManagerInternal;Lcom/android/server/dreams/DreamManagerService$LocalService;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;]Lcom/android/server/power/PowerManagerService$Clock;Lcom/android/server/power/PowerManagerService$Injector$$ExternalSyntheticLambda1;]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/power/PowerManagerService;->handleSettingsChangedLocked()V
 HPLcom/android/server/power/PowerManagerService;->handleUidStateChangeLocked()V
 HPLcom/android/server/power/PowerManagerService;->handleUserActivityTimeout()V
 HPLcom/android/server/power/PowerManagerService;->handleWakeLockDeath(Lcom/android/server/power/PowerManagerService$WakeLock;)V
@@ -43924,17 +45480,17 @@
 HSPLcom/android/server/power/PowerManagerService;->isAttentiveTimeoutExpired(Lcom/android/server/power/PowerGroup;J)Z+]Lcom/android/server/power/PowerGroup;Lcom/android/server/power/PowerGroup;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
 HPLcom/android/server/power/PowerManagerService;->isBeingKeptAwakeLocked(Lcom/android/server/power/PowerGroup;)Z+]Lcom/android/server/power/PowerGroup;Lcom/android/server/power/PowerGroup;
 HSPLcom/android/server/power/PowerManagerService;->isDeviceIdleModeInternal()Z
-HSPLcom/android/server/power/PowerManagerService;->isInteractiveInternal()Z
+HSPLcom/android/server/power/PowerManagerService;->isInteractiveInternal()Z+]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
 HSPLcom/android/server/power/PowerManagerService;->isItBedTimeYetLocked(Lcom/android/server/power/PowerGroup;)Z
-HPLcom/android/server/power/PowerManagerService;->isLightDeviceIdleModeInternal()Z
+HSPLcom/android/server/power/PowerManagerService;->isLightDeviceIdleModeInternal()Z
 HSPLcom/android/server/power/PowerManagerService;->isMaximumScreenOffTimeoutFromDeviceAdminEnforcedLocked()Z
-PLcom/android/server/power/PowerManagerService;->isSameCallback(Landroid/os/IWakeLockCallback;Landroid/os/IWakeLockCallback;)Z
+HPLcom/android/server/power/PowerManagerService;->isSameCallback(Landroid/os/IWakeLockCallback;Landroid/os/IWakeLockCallback;)Z
 PLcom/android/server/power/PowerManagerService;->isScreenLock(Lcom/android/server/power/PowerManagerService$WakeLock;)Z
 HPLcom/android/server/power/PowerManagerService;->isValidBrightness(F)Z
-PLcom/android/server/power/PowerManagerService;->isWakeLockLevelSupportedInternal(I)Z
+HSPLcom/android/server/power/PowerManagerService;->isWakeLockLevelSupportedInternal(I)Z
 PLcom/android/server/power/PowerManagerService;->logSleepTimeoutRecapturedLocked()V
 HSPLcom/android/server/power/PowerManagerService;->maybeHideInattentiveSleepWarningLocked(JJ)Z+]Lcom/android/server/power/InattentiveSleepWarningController;Lcom/android/server/power/InattentiveSleepWarningController;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
-HSPLcom/android/server/power/PowerManagerService;->maybeUpdateForegroundProfileLastActivityLocked(J)V
+HSPLcom/android/server/power/PowerManagerService;->maybeUpdateForegroundProfileLastActivityLocked(J)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/power/PowerManagerService;->monitor()V
 HSPLcom/android/server/power/PowerManagerService;->needSuspendBlockerLocked()Z+]Lcom/android/server/power/PowerGroup;Lcom/android/server/power/PowerGroup;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
 HSPLcom/android/server/power/PowerManagerService;->notifyWakeLockAcquiredLocked(Lcom/android/server/power/PowerManagerService$WakeLock;)V+]Lcom/android/server/power/Notifier;Lcom/android/server/power/Notifier;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
@@ -43944,7 +45500,7 @@
 HSPLcom/android/server/power/PowerManagerService;->notifyWakeLockReleasedLocked(Lcom/android/server/power/PowerManagerService$WakeLock;)V+]Lcom/android/server/power/Notifier;Lcom/android/server/power/Notifier;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
 HSPLcom/android/server/power/PowerManagerService;->onBootPhase(I)V
 HPLcom/android/server/power/PowerManagerService;->onFlip(Z)V
-PLcom/android/server/power/PowerManagerService;->onPowerGroupEventLocked(ILcom/android/server/power/PowerGroup;)V
+HPLcom/android/server/power/PowerManagerService;->onPowerGroupEventLocked(ILcom/android/server/power/PowerGroup;)V
 HSPLcom/android/server/power/PowerManagerService;->onStart()V
 PLcom/android/server/power/PowerManagerService;->onUserAttention()V
 HSPLcom/android/server/power/PowerManagerService;->readConfigurationLocked()V
@@ -43954,10 +45510,10 @@
 HSPLcom/android/server/power/PowerManagerService;->restartNofifyLongTimerLocked(Lcom/android/server/power/PowerManagerService$WakeLock;)V+]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;]Lcom/android/server/power/PowerManagerService$Clock;Lcom/android/server/power/PowerManagerService$Injector$$ExternalSyntheticLambda1;
 HSPLcom/android/server/power/PowerManagerService;->scheduleSandmanLocked()V+]Lcom/android/server/power/PowerGroup;Lcom/android/server/power/PowerGroup;]Landroid/os/Handler;Landroid/os/Handler;]Landroid/os/Message;Landroid/os/Message;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/PowerManagerService$Clock;Lcom/android/server/power/PowerManagerService$Injector$$ExternalSyntheticLambda1;
 HSPLcom/android/server/power/PowerManagerService;->scheduleUserInactivityTimeout(J)V
-PLcom/android/server/power/PowerManagerService;->setDeviceIdleModeInternal(Z)Z
-HSPLcom/android/server/power/PowerManagerService;->setDeviceIdleTempWhitelistInternal([I)V
+HPLcom/android/server/power/PowerManagerService;->setDeviceIdleModeInternal(Z)Z
+HSPLcom/android/server/power/PowerManagerService;->setDeviceIdleTempWhitelistInternal([I)V+]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
 HSPLcom/android/server/power/PowerManagerService;->setDeviceIdleWhitelistInternal([I)V
-HPLcom/android/server/power/PowerManagerService;->setDozeAfterScreenOffInternal(Z)V
+HSPLcom/android/server/power/PowerManagerService;->setDozeAfterScreenOffInternal(Z)V
 HPLcom/android/server/power/PowerManagerService;->setDozeOverrideFromDreamManagerInternal(II)V
 HSPLcom/android/server/power/PowerManagerService;->setHalAutoSuspendModeLocked(Z)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/power/PowerManagerService$NativeWrapper;Lcom/android/server/power/PowerManagerService$NativeWrapper;
 HSPLcom/android/server/power/PowerManagerService;->setHalInteractiveModeLocked(Z)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/power/PowerManagerService$NativeWrapper;Lcom/android/server/power/PowerManagerService$NativeWrapper;
@@ -43975,10 +45531,10 @@
 HSPLcom/android/server/power/PowerManagerService;->shouldUseProximitySensorLocked()Z
 HSPLcom/android/server/power/PowerManagerService;->shouldWakeUpWhenPluggedOrUnpluggedLocked(ZIZ)Z
 PLcom/android/server/power/PowerManagerService;->shutdownOrRebootInternal(IZLjava/lang/String;Z)V
-PLcom/android/server/power/PowerManagerService;->sleepPowerGroupLocked(Lcom/android/server/power/PowerGroup;JII)Z
+HSPLcom/android/server/power/PowerManagerService;->sleepPowerGroupLocked(Lcom/android/server/power/PowerGroup;JII)Z
 HSPLcom/android/server/power/PowerManagerService;->systemReady()V
-HSPLcom/android/server/power/PowerManagerService;->uidActiveInternal(I)V
-HSPLcom/android/server/power/PowerManagerService;->uidGoneInternal(I)V
+HSPLcom/android/server/power/PowerManagerService;->uidActiveInternal(I)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
+HSPLcom/android/server/power/PowerManagerService;->uidGoneInternal(I)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/power/PowerManagerService;->uidIdleInternal(I)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
 HSPLcom/android/server/power/PowerManagerService;->updateAttentiveStateLocked(JI)V+]Lcom/android/server/power/PowerGroup;Lcom/android/server/power/PowerGroup;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
 HSPLcom/android/server/power/PowerManagerService;->updateDreamLocked(IZ)V+]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
@@ -43989,13 +45545,13 @@
 HSPLcom/android/server/power/PowerManagerService;->updateProfilesLocked(J)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/power/PowerManagerService;->updateScreenBrightnessBoostLocked(I)V
 HSPLcom/android/server/power/PowerManagerService;->updateSettingsLocked()V
-HSPLcom/android/server/power/PowerManagerService;->updateStayOnLocked(I)V
+HSPLcom/android/server/power/PowerManagerService;->updateStayOnLocked(I)V+]Landroid/os/BatteryManagerInternal;Lcom/android/server/BatteryService$LocalService;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
 HSPLcom/android/server/power/PowerManagerService;->updateSuspendBlockerLocked()V+]Lcom/android/server/power/PowerGroup;Lcom/android/server/power/PowerGroup;]Lcom/android/server/power/SuspendBlocker;Lcom/android/server/power/PowerManagerService$SuspendBlockerImpl;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
 HSPLcom/android/server/power/PowerManagerService;->updateUidProcStateInternal(II)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
 HSPLcom/android/server/power/PowerManagerService;->updateUserActivitySummaryLocked(JI)V+]Lcom/android/server/power/PowerGroup;Lcom/android/server/power/PowerGroup;]Landroid/os/Handler;Landroid/os/Handler;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/AttentionDetector;Lcom/android/server/power/AttentionDetector;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
 HPLcom/android/server/power/PowerManagerService;->updateWakeLockDisabledStatesLocked()V+]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/power/PowerManagerService;->updateWakeLockSummaryLocked(I)V+]Lcom/android/server/power/PowerGroup;Lcom/android/server/power/PowerGroup;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/power/PowerManagerService$WakeLock;Lcom/android/server/power/PowerManagerService$WakeLock;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/power/PowerManagerService;->updateWakeLockWorkSourceInternal(Landroid/os/IBinder;Landroid/os/WorkSource;Ljava/lang/String;I)V+]Lcom/android/server/power/PowerManagerService$WakeLock;Lcom/android/server/power/PowerManagerService$WakeLock;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/power/PowerManagerService;->updateWakeLockWorkSourceInternal(Landroid/os/IBinder;Landroid/os/WorkSource;Ljava/lang/String;I)V+]Lcom/android/server/power/PowerManagerService$WakeLock;Lcom/android/server/power/PowerManagerService$WakeLock;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/power/PowerManagerService;->updateWakefulnessLocked(I)Z+]Lcom/android/server/power/PowerGroup;Lcom/android/server/power/PowerGroup;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;]Lcom/android/server/power/PowerManagerService$Clock;Lcom/android/server/power/PowerManagerService$Injector$$ExternalSyntheticLambda1;
 HSPLcom/android/server/power/PowerManagerService;->userActivityFromNative(JIII)V+]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;
 HSPLcom/android/server/power/PowerManagerService;->userActivityInternal(IJIII)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/power/PowerManagerService;Lcom/android/server/power/PowerManagerService;]Landroid/hardware/display/DisplayManagerInternal;Lcom/android/server/display/DisplayManagerService$LocalService;
@@ -44018,7 +45574,7 @@
 HSPLcom/android/server/power/ScreenUndimDetector$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/power/ScreenUndimDetector;)V
 PLcom/android/server/power/ScreenUndimDetector$$ExternalSyntheticLambda0;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
 HSPLcom/android/server/power/ScreenUndimDetector$InternalClock;-><init>()V
-PLcom/android/server/power/ScreenUndimDetector$InternalClock;->getCurrentTime()J
+HSPLcom/android/server/power/ScreenUndimDetector$InternalClock;->getCurrentTime()J
 PLcom/android/server/power/ScreenUndimDetector;->$r8$lambda$n7fpGzJCgxm8XKYi8kwkYFm0GMk(Lcom/android/server/power/ScreenUndimDetector;Landroid/provider/DeviceConfig$Properties;)V
 HSPLcom/android/server/power/ScreenUndimDetector;-><clinit>()V
 HSPLcom/android/server/power/ScreenUndimDetector;-><init>()V
@@ -44030,9 +45586,10 @@
 HSPLcom/android/server/power/ScreenUndimDetector;->readMaxDurationBetweenUndimsMillis()J
 HSPLcom/android/server/power/ScreenUndimDetector;->readUndimsRequired()I
 HSPLcom/android/server/power/ScreenUndimDetector;->readValuesFromDeviceConfig()V
-HPLcom/android/server/power/ScreenUndimDetector;->recordScreenPolicy(II)V
+HSPLcom/android/server/power/ScreenUndimDetector;->recordScreenPolicy(II)V+]Lcom/android/server/power/ScreenUndimDetector;Lcom/android/server/power/ScreenUndimDetector;]Lcom/android/server/power/ScreenUndimDetector$InternalClock;Lcom/android/server/power/ScreenUndimDetector$InternalClock;
+PLcom/android/server/power/ScreenUndimDetector;->reset()V
 HSPLcom/android/server/power/ScreenUndimDetector;->systemReady(Landroid/content/Context;)V
-HPLcom/android/server/power/ScreenUndimDetector;->userActivity(I)V
+HSPLcom/android/server/power/ScreenUndimDetector;->userActivity(I)V
 PLcom/android/server/power/ShutdownCheckPoints$1;-><init>()V
 PLcom/android/server/power/ShutdownCheckPoints$1;->activityManager()Landroid/app/IActivityManager;
 PLcom/android/server/power/ShutdownCheckPoints$1;->currentTimeMillis()J
@@ -44042,7 +45599,7 @@
 PLcom/android/server/power/ShutdownCheckPoints$BinderCheckPoint;->dumpDetails(Ljava/io/PrintWriter;)V
 PLcom/android/server/power/ShutdownCheckPoints$BinderCheckPoint;->getOrigin()Ljava/lang/String;
 PLcom/android/server/power/ShutdownCheckPoints$BinderCheckPoint;->getProcessName()Ljava/lang/String;
-PLcom/android/server/power/ShutdownCheckPoints$CheckPoint;-><init>(Lcom/android/server/power/ShutdownCheckPoints$Injector;Ljava/lang/String;)V
+HPLcom/android/server/power/ShutdownCheckPoints$CheckPoint;-><init>(Lcom/android/server/power/ShutdownCheckPoints$Injector;Ljava/lang/String;)V
 PLcom/android/server/power/ShutdownCheckPoints$CheckPoint;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/power/ShutdownCheckPoints$FileDumperThread$1;-><init>(Lcom/android/server/power/ShutdownCheckPoints$FileDumperThread;Ljava/lang/String;)V
 PLcom/android/server/power/ShutdownCheckPoints$FileDumperThread$1;->accept(Ljava/io/File;Ljava/lang/String;)Z
@@ -44050,7 +45607,7 @@
 PLcom/android/server/power/ShutdownCheckPoints$FileDumperThread;->listCheckPointsFiles()[Ljava/io/File;
 PLcom/android/server/power/ShutdownCheckPoints$FileDumperThread;->run()V
 PLcom/android/server/power/ShutdownCheckPoints$FileDumperThread;->writeCheckpoints(Ljava/io/File;)V
-PLcom/android/server/power/ShutdownCheckPoints$SystemServerCheckPoint;-><init>(Lcom/android/server/power/ShutdownCheckPoints$Injector;Ljava/lang/String;)V
+HPLcom/android/server/power/ShutdownCheckPoints$SystemServerCheckPoint;-><init>(Lcom/android/server/power/ShutdownCheckPoints$Injector;Ljava/lang/String;)V
 PLcom/android/server/power/ShutdownCheckPoints$SystemServerCheckPoint;->dumpDetails(Ljava/io/PrintWriter;)V
 PLcom/android/server/power/ShutdownCheckPoints$SystemServerCheckPoint;->findCallSiteIndex()I
 PLcom/android/server/power/ShutdownCheckPoints$SystemServerCheckPoint;->getMethodName()Ljava/lang/String;
@@ -44067,9 +45624,9 @@
 PLcom/android/server/power/ShutdownCheckPoints;->recordCheckPoint(Ljava/lang/String;)V
 PLcom/android/server/power/ShutdownCheckPoints;->recordCheckPoint(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/power/ShutdownCheckPoints;->recordCheckPointInternal(ILjava/lang/String;)V
-PLcom/android/server/power/ShutdownCheckPoints;->recordCheckPointInternal(Lcom/android/server/power/ShutdownCheckPoints$CheckPoint;)V
+HPLcom/android/server/power/ShutdownCheckPoints;->recordCheckPointInternal(Lcom/android/server/power/ShutdownCheckPoints$CheckPoint;)V
 PLcom/android/server/power/ShutdownCheckPoints;->recordCheckPointInternal(Ljava/lang/String;)V
-PLcom/android/server/power/ShutdownCheckPoints;->recordCheckPointInternal(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/power/ShutdownCheckPoints;->recordCheckPointInternal(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/power/ShutdownThread$1;-><init>(Landroid/content/Context;)V
 PLcom/android/server/power/ShutdownThread$2;-><init>()V
 PLcom/android/server/power/ShutdownThread$3;-><init>(Lcom/android/server/power/ShutdownThread;)V
@@ -44078,9 +45635,12 @@
 PLcom/android/server/power/ShutdownThread$5;->run()V
 PLcom/android/server/power/ShutdownThread$CloseDialogReceiver;-><init>(Landroid/content/Context;)V
 PLcom/android/server/power/ShutdownThread$CloseDialogReceiver;->onDismiss(Landroid/content/DialogInterface;)V
+PLcom/android/server/power/ShutdownThread$CloseDialogReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/power/ShutdownThread;->-$$Nest$fgetmContext(Lcom/android/server/power/ShutdownThread;)Landroid/content/Context;
 PLcom/android/server/power/ShutdownThread;->-$$Nest$sfgetMETRIC_RADIO()Ljava/lang/String;
+PLcom/android/server/power/ShutdownThread;->-$$Nest$sfgetTRON_METRICS()Landroid/util/ArrayMap;
 PLcom/android/server/power/ShutdownThread;->-$$Nest$sfgetmRebootHasProgressBar()Z
+PLcom/android/server/power/ShutdownThread;->-$$Nest$smmetricEnded(Ljava/lang/String;)V
 PLcom/android/server/power/ShutdownThread;->-$$Nest$smmetricStarted(Ljava/lang/String;)V
 PLcom/android/server/power/ShutdownThread;->-$$Nest$smnewTimingsLog()Landroid/util/TimingsTraceLog;
 PLcom/android/server/power/ShutdownThread;-><clinit>()V
@@ -44111,15 +45671,15 @@
 PLcom/android/server/power/ThermalManagerService$1;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/power/ThermalManagerService$1;->dumpItemsLocked(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/util/Collection;)V
 HPLcom/android/server/power/ThermalManagerService$1;->getCurrentCoolingDevices()[Landroid/os/CoolingDevice;
-HPLcom/android/server/power/ThermalManagerService$1;->getCurrentTemperatures()[Landroid/os/Temperature;
-HPLcom/android/server/power/ThermalManagerService$1;->getCurrentTemperaturesWithType(I)[Landroid/os/Temperature;
+HPLcom/android/server/power/ThermalManagerService$1;->getCurrentTemperatures()[Landroid/os/Temperature;+]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Lcom/android/server/SystemService;Lcom/android/server/power/ThermalManagerService;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/power/ThermalManagerService$ThermalHalWrapper;Lcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper;
+HPLcom/android/server/power/ThermalManagerService$1;->getCurrentTemperaturesWithType(I)[Landroid/os/Temperature;+]Ljava/util/concurrent/atomic/AtomicBoolean;Ljava/util/concurrent/atomic/AtomicBoolean;]Lcom/android/server/SystemService;Lcom/android/server/power/ThermalManagerService;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/power/ThermalManagerService$ThermalHalWrapper;Lcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper;
 HSPLcom/android/server/power/ThermalManagerService$1;->getCurrentThermalStatus()I
 PLcom/android/server/power/ThermalManagerService$1;->getThermalHeadroom(I)F
-HSPLcom/android/server/power/ThermalManagerService$1;->registerThermalEventListener(Landroid/os/IThermalEventListener;)Z
+HSPLcom/android/server/power/ThermalManagerService$1;->registerThermalEventListener(Landroid/os/IThermalEventListener;)Z+]Lcom/android/server/SystemService;Lcom/android/server/power/ThermalManagerService;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;
 HSPLcom/android/server/power/ThermalManagerService$1;->registerThermalEventListenerWithType(Landroid/os/IThermalEventListener;I)Z
 HSPLcom/android/server/power/ThermalManagerService$1;->registerThermalStatusListener(Landroid/os/IThermalStatusListener;)Z
 HPLcom/android/server/power/ThermalManagerService$1;->unregisterThermalEventListener(Landroid/os/IThermalEventListener;)Z
-PLcom/android/server/power/ThermalManagerService$1;->unregisterThermalStatusListener(Landroid/os/IThermalStatusListener;)Z
+HPLcom/android/server/power/ThermalManagerService$1;->unregisterThermalStatusListener(Landroid/os/IThermalStatusListener;)Z
 PLcom/android/server/power/ThermalManagerService$TemperatureWatcher$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/power/ThermalManagerService$TemperatureWatcher;)V
 PLcom/android/server/power/ThermalManagerService$TemperatureWatcher$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/power/ThermalManagerService$TemperatureWatcher$$ExternalSyntheticLambda1;-><init>()V
@@ -44142,16 +45702,16 @@
 HSPLcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper$$ExternalSyntheticLambda2;->onValues(Landroid/hardware/thermal/V1_0/ThermalStatus;Ljava/util/ArrayList;)V
 HSPLcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper$1;-><init>(Lcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper;)V
 HSPLcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper$1;->notifyThrottling(Landroid/hardware/thermal/V2_0/Temperature;)V
-PLcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper;->$r8$lambda$5Gy7SxTXuDNOdRldHRw7gT8HCK8(Ljava/util/List;Landroid/hardware/thermal/V1_0/ThermalStatus;Ljava/util/ArrayList;)V
+HPLcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper;->$r8$lambda$5Gy7SxTXuDNOdRldHRw7gT8HCK8(Ljava/util/List;Landroid/hardware/thermal/V1_0/ThermalStatus;Ljava/util/ArrayList;)V
 HSPLcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper;->$r8$lambda$Cl1-bsrR1F1TpRTNqsN1E8MPdIo(Ljava/util/List;Landroid/hardware/thermal/V1_0/ThermalStatus;Ljava/util/ArrayList;)V
 HSPLcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper;->$r8$lambda$eU9NGR0FpzsZYcBLuc0gYLJFOic(Ljava/util/List;Landroid/hardware/thermal/V1_0/ThermalStatus;Ljava/util/ArrayList;)V
 HSPLcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper;-><init>()V
 HSPLcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper;->connectToHal()Z
 PLcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HPLcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper;->getCurrentCoolingDevices(ZI)Ljava/util/List;
-HSPLcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper;->getCurrentTemperatures(ZI)Ljava/util/List;
+HSPLcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper;->getCurrentTemperatures(ZI)Ljava/util/List;+]Landroid/hardware/thermal/V2_0/IThermal;Landroid/hardware/thermal/V2_0/IThermal$Proxy;
 HSPLcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper;->getTemperatureThresholds(ZI)Ljava/util/List;
-HPLcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper;->lambda$getCurrentCoolingDevices$1(Ljava/util/List;Landroid/hardware/thermal/V1_0/ThermalStatus;Ljava/util/ArrayList;)V
+HPLcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper;->lambda$getCurrentCoolingDevices$1(Ljava/util/List;Landroid/hardware/thermal/V1_0/ThermalStatus;Ljava/util/ArrayList;)V+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper;->lambda$getCurrentTemperatures$0(Ljava/util/List;Landroid/hardware/thermal/V1_0/ThermalStatus;Ljava/util/ArrayList;)V+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLcom/android/server/power/ThermalManagerService$ThermalHal20Wrapper;->lambda$getTemperatureThresholds$2(Ljava/util/List;Landroid/hardware/thermal/V1_0/ThermalStatus;Ljava/util/ArrayList;)V
 HSPLcom/android/server/power/ThermalManagerService$ThermalHalWrapper$DeathRecipient;-><init>(Lcom/android/server/power/ThermalManagerService$ThermalHalWrapper;)V
@@ -44175,7 +45735,7 @@
 HSPLcom/android/server/power/ThermalManagerService;-><clinit>()V
 HSPLcom/android/server/power/ThermalManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/power/ThermalManagerService;-><init>(Landroid/content/Context;Lcom/android/server/power/ThermalManagerService$ThermalHalWrapper;)V
-HSPLcom/android/server/power/ThermalManagerService;->lambda$postEventListener$1(Landroid/os/IThermalEventListener;Landroid/os/Temperature;)V
+HSPLcom/android/server/power/ThermalManagerService;->lambda$postEventListener$1(Landroid/os/IThermalEventListener;Landroid/os/Temperature;)V+]Landroid/os/IThermalEventListener;Lcom/android/server/stats/pull/StatsPullAtomService$ThermalEventListener;,Lcom/android/server/display/DisplayModeDirector$SkinThermalStatusObserver;,Landroid/os/IThermalEventListener$Stub$Proxy;
 HSPLcom/android/server/power/ThermalManagerService;->lambda$postStatusListener$0(Landroid/os/IThermalStatusListener;)V
 HSPLcom/android/server/power/ThermalManagerService;->notifyEventListenersLocked(Landroid/os/Temperature;)V
 HSPLcom/android/server/power/ThermalManagerService;->notifyStatusListenersLocked()V
@@ -44185,8 +45745,8 @@
 HSPLcom/android/server/power/ThermalManagerService;->onTemperatureChanged(Landroid/os/Temperature;Z)V
 HSPLcom/android/server/power/ThermalManagerService;->onTemperatureChangedCallback(Landroid/os/Temperature;)V
 HSPLcom/android/server/power/ThermalManagerService;->onTemperatureMapChangedLocked()V
-HSPLcom/android/server/power/ThermalManagerService;->postEventListener(Landroid/os/Temperature;Landroid/os/IThermalEventListener;Ljava/lang/Integer;)V
-HSPLcom/android/server/power/ThermalManagerService;->postEventListenerCurrentTemperatures(Landroid/os/IThermalEventListener;Ljava/lang/Integer;)V
+HSPLcom/android/server/power/ThermalManagerService;->postEventListener(Landroid/os/Temperature;Landroid/os/IThermalEventListener;Ljava/lang/Integer;)V+]Landroid/os/Handler;Landroid/os/Handler;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/os/Temperature;Landroid/os/Temperature;
+HSPLcom/android/server/power/ThermalManagerService;->postEventListenerCurrentTemperatures(Landroid/os/IThermalEventListener;Ljava/lang/Integer;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/power/ThermalManagerService;Lcom/android/server/power/ThermalManagerService;
 HSPLcom/android/server/power/ThermalManagerService;->postStatusListener(Landroid/os/IThermalStatusListener;)V
 HSPLcom/android/server/power/ThermalManagerService;->setStatusLocked(I)V
 HSPLcom/android/server/power/ThermalManagerService;->shutdownIfNeeded(Landroid/os/Temperature;)V
@@ -44258,31 +45818,31 @@
 PLcom/android/server/power/WirelessChargerDetector$1;->onAccuracyChanged(Landroid/hardware/Sensor;I)V
 HPLcom/android/server/power/WirelessChargerDetector$1;->onSensorChanged(Landroid/hardware/SensorEvent;)V
 HSPLcom/android/server/power/WirelessChargerDetector$2;-><init>(Lcom/android/server/power/WirelessChargerDetector;)V
-PLcom/android/server/power/WirelessChargerDetector$2;->run()V
-PLcom/android/server/power/WirelessChargerDetector;->-$$Nest$fgetmLock(Lcom/android/server/power/WirelessChargerDetector;)Ljava/lang/Object;
+HPLcom/android/server/power/WirelessChargerDetector$2;->run()V
+HPLcom/android/server/power/WirelessChargerDetector;->-$$Nest$fgetmLock(Lcom/android/server/power/WirelessChargerDetector;)Ljava/lang/Object;
 PLcom/android/server/power/WirelessChargerDetector;->-$$Nest$mfinishDetectionLocked(Lcom/android/server/power/WirelessChargerDetector;)V
-PLcom/android/server/power/WirelessChargerDetector;->-$$Nest$mprocessSampleLocked(Lcom/android/server/power/WirelessChargerDetector;FFF)V
+HPLcom/android/server/power/WirelessChargerDetector;->-$$Nest$mprocessSampleLocked(Lcom/android/server/power/WirelessChargerDetector;FFF)V
 HSPLcom/android/server/power/WirelessChargerDetector;-><clinit>()V
 HSPLcom/android/server/power/WirelessChargerDetector;-><init>(Landroid/hardware/SensorManager;Lcom/android/server/power/SuspendBlocker;Landroid/os/Handler;)V
-PLcom/android/server/power/WirelessChargerDetector;->clearAtRestLocked()V
+HPLcom/android/server/power/WirelessChargerDetector;->clearAtRestLocked()V
 PLcom/android/server/power/WirelessChargerDetector;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/power/WirelessChargerDetector;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HPLcom/android/server/power/WirelessChargerDetector;->finishDetectionLocked()V
-PLcom/android/server/power/WirelessChargerDetector;->hasMoved(FFFFFF)Z
-HPLcom/android/server/power/WirelessChargerDetector;->processSampleLocked(FFF)V
+HPLcom/android/server/power/WirelessChargerDetector;->hasMoved(FFFFFF)Z
+HPLcom/android/server/power/WirelessChargerDetector;->processSampleLocked(FFF)V+]Lcom/android/server/power/WirelessChargerDetector;Lcom/android/server/power/WirelessChargerDetector;
 HPLcom/android/server/power/WirelessChargerDetector;->startDetectionLocked()V
 HSPLcom/android/server/power/WirelessChargerDetector;->update(ZI)Z
 HSPLcom/android/server/power/batterysaver/BatterySaverController$1;-><init>(Lcom/android/server/power/batterysaver/BatterySaverController;)V
-HPLcom/android/server/power/batterysaver/BatterySaverController$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/power/batterysaver/BatterySaverController$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V+]Ljava/lang/String;Ljava/lang/String;]Landroid/content/Intent;Landroid/content/Intent;]Lcom/android/server/power/batterysaver/BatterySaverController$MyHandler;Lcom/android/server/power/batterysaver/BatterySaverController$MyHandler;
 HSPLcom/android/server/power/batterysaver/BatterySaverController$MyHandler;-><init>(Lcom/android/server/power/batterysaver/BatterySaverController;Landroid/os/Looper;)V
 HSPLcom/android/server/power/batterysaver/BatterySaverController$MyHandler;->dispatchMessage(Landroid/os/Message;)V
 PLcom/android/server/power/batterysaver/BatterySaverController$MyHandler;->postStateChanged(ZI)V
 HSPLcom/android/server/power/batterysaver/BatterySaverController$MyHandler;->postSystemReady()V
 PLcom/android/server/power/batterysaver/BatterySaverController;->-$$Nest$fgetmHandler(Lcom/android/server/power/batterysaver/BatterySaverController;)Lcom/android/server/power/batterysaver/BatterySaverController$MyHandler;
-HPLcom/android/server/power/batterysaver/BatterySaverController;->-$$Nest$fgetmLock(Lcom/android/server/power/batterysaver/BatterySaverController;)Ljava/lang/Object;
-HPLcom/android/server/power/batterysaver/BatterySaverController;->-$$Nest$fputmIsPluggedIn(Lcom/android/server/power/batterysaver/BatterySaverController;Z)V
+HSPLcom/android/server/power/batterysaver/BatterySaverController;->-$$Nest$fgetmLock(Lcom/android/server/power/batterysaver/BatterySaverController;)Ljava/lang/Object;
+HSPLcom/android/server/power/batterysaver/BatterySaverController;->-$$Nest$fputmIsPluggedIn(Lcom/android/server/power/batterysaver/BatterySaverController;Z)V
 PLcom/android/server/power/batterysaver/BatterySaverController;->-$$Nest$misPolicyEnabled(Lcom/android/server/power/batterysaver/BatterySaverController;)Z
-HPLcom/android/server/power/batterysaver/BatterySaverController;->-$$Nest$mupdateBatterySavingStats(Lcom/android/server/power/batterysaver/BatterySaverController;)V
+HSPLcom/android/server/power/batterysaver/BatterySaverController;->-$$Nest$mupdateBatterySavingStats(Lcom/android/server/power/batterysaver/BatterySaverController;)V
 HSPLcom/android/server/power/batterysaver/BatterySaverController;-><init>(Ljava/lang/Object;Landroid/content/Context;Landroid/os/Looper;Lcom/android/server/power/batterysaver/BatterySaverPolicy;Lcom/android/server/power/batterysaver/BatterySavingStats;)V
 HSPLcom/android/server/power/batterysaver/BatterySaverController;->addListener(Landroid/os/PowerManagerInternal$LowPowerModeListener;)V
 PLcom/android/server/power/batterysaver/BatterySaverController;->enableBatterySaver(ZI)V
@@ -44290,26 +45850,26 @@
 PLcom/android/server/power/batterysaver/BatterySaverController;->getBatterySaverPolicy()Lcom/android/server/power/batterysaver/BatterySaverPolicy;
 HSPLcom/android/server/power/batterysaver/BatterySaverController;->getFullEnabledLocked()Z
 PLcom/android/server/power/batterysaver/BatterySaverController;->getPolicyLocked(I)Landroid/os/BatterySaverPolicyConfig;
-HPLcom/android/server/power/batterysaver/BatterySaverController;->getPowerManager()Landroid/os/PowerManager;
+HSPLcom/android/server/power/batterysaver/BatterySaverController;->getPowerManager()Landroid/os/PowerManager;
 PLcom/android/server/power/batterysaver/BatterySaverController;->getPowerSaveModeChangedListenerPackage()Ljava/util/Optional;
 HPLcom/android/server/power/batterysaver/BatterySaverController;->handleBatterySaverStateChanged(ZI)V
 PLcom/android/server/power/batterysaver/BatterySaverController;->isAdaptiveEnabled()Z
-HSPLcom/android/server/power/batterysaver/BatterySaverController;->isEnabled()Z
+HSPLcom/android/server/power/batterysaver/BatterySaverController;->isEnabled()Z+]Lcom/android/server/power/batterysaver/BatterySaverPolicy;Lcom/android/server/power/batterysaver/BatterySaverPolicy;]Lcom/android/server/power/batterysaver/BatterySaverController;Lcom/android/server/power/batterysaver/BatterySaverController;
 PLcom/android/server/power/batterysaver/BatterySaverController;->isFullEnabled()Z
-HPLcom/android/server/power/batterysaver/BatterySaverController;->isLaunchBoostDisabled()Z
-HPLcom/android/server/power/batterysaver/BatterySaverController;->isPolicyEnabled()Z
+HSPLcom/android/server/power/batterysaver/BatterySaverController;->isLaunchBoostDisabled()Z
+HSPLcom/android/server/power/batterysaver/BatterySaverController;->isPolicyEnabled()Z
 PLcom/android/server/power/batterysaver/BatterySaverController;->onBatterySaverPolicyChanged(Lcom/android/server/power/batterysaver/BatterySaverPolicy;)V
 PLcom/android/server/power/batterysaver/BatterySaverController;->reasonToString(I)Ljava/lang/String;
 PLcom/android/server/power/batterysaver/BatterySaverController;->resetAdaptivePolicyLocked(I)Z
 PLcom/android/server/power/batterysaver/BatterySaverController;->setAdaptiveEnabledLocked(Z)V
-PLcom/android/server/power/batterysaver/BatterySaverController;->setAdaptivePolicyEnabledLocked(ZI)Z
-PLcom/android/server/power/batterysaver/BatterySaverController;->setAdaptivePolicyLocked(Landroid/os/BatterySaverPolicyConfig;I)Z
-PLcom/android/server/power/batterysaver/BatterySaverController;->setAdaptivePolicyLocked(Lcom/android/server/power/batterysaver/BatterySaverPolicy$Policy;I)Z
+HPLcom/android/server/power/batterysaver/BatterySaverController;->setAdaptivePolicyEnabledLocked(ZI)Z
+HPLcom/android/server/power/batterysaver/BatterySaverController;->setAdaptivePolicyLocked(Landroid/os/BatterySaverPolicyConfig;I)Z
+HPLcom/android/server/power/batterysaver/BatterySaverController;->setAdaptivePolicyLocked(Lcom/android/server/power/batterysaver/BatterySaverPolicy$Policy;I)Z
 PLcom/android/server/power/batterysaver/BatterySaverController;->setFullEnabledLocked(Z)V
 PLcom/android/server/power/batterysaver/BatterySaverController;->setFullPolicyLocked(Landroid/os/BatterySaverPolicyConfig;I)Z
 PLcom/android/server/power/batterysaver/BatterySaverController;->setFullPolicyLocked(Lcom/android/server/power/batterysaver/BatterySaverPolicy$Policy;I)Z
 HSPLcom/android/server/power/batterysaver/BatterySaverController;->systemReady()V
-HPLcom/android/server/power/batterysaver/BatterySaverController;->updateBatterySavingStats()V
+HSPLcom/android/server/power/batterysaver/BatterySaverController;->updateBatterySavingStats()V+]Lcom/android/server/power/batterysaver/BatterySavingStats;Lcom/android/server/power/batterysaver/BatterySavingStats;]Landroid/os/PowerManager;Landroid/os/PowerManager;]Lcom/android/server/power/batterysaver/BatterySaverController;Lcom/android/server/power/batterysaver/BatterySaverController;
 PLcom/android/server/power/batterysaver/BatterySaverController;->updatePolicyLevelLocked()Z
 PLcom/android/server/power/batterysaver/BatterySaverPolicy$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/power/batterysaver/BatterySaverPolicy;[Lcom/android/server/power/batterysaver/BatterySaverPolicy$BatterySaverPolicyListener;)V
 PLcom/android/server/power/batterysaver/BatterySaverPolicy$$ExternalSyntheticLambda0;->run()V
@@ -44358,7 +45918,7 @@
 PLcom/android/server/power/batterysaver/BatterySaverPolicy;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
 HSPLcom/android/server/power/batterysaver/BatterySaverPolicy;->refreshSettings()V
 PLcom/android/server/power/batterysaver/BatterySaverPolicy;->resetAdaptivePolicyLocked()Z
-PLcom/android/server/power/batterysaver/BatterySaverPolicy;->setAdaptivePolicyLocked(Lcom/android/server/power/batterysaver/BatterySaverPolicy$Policy;)Z
+HPLcom/android/server/power/batterysaver/BatterySaverPolicy;->setAdaptivePolicyLocked(Lcom/android/server/power/batterysaver/BatterySaverPolicy$Policy;)Z
 PLcom/android/server/power/batterysaver/BatterySaverPolicy;->setFullPolicyLocked(Lcom/android/server/power/batterysaver/BatterySaverPolicy$Policy;)Z
 PLcom/android/server/power/batterysaver/BatterySaverPolicy;->setPolicyLevel(I)Z
 HPLcom/android/server/power/batterysaver/BatterySaverPolicy;->shouldAdvertiseIsEnabled()Z
@@ -44409,46 +45969,46 @@
 PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->lambda$triggerStickyDisabledNotification$3()V
 PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->onBootCompleted()V
 PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->putGlobalSetting(Ljava/lang/String;I)V
-PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->refreshSettingsLocked()V
+HPLcom/android/server/power/batterysaver/BatterySaverStateMachine;->refreshSettingsLocked()V
 PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->runOnBgThread(Ljava/lang/Runnable;)V
 PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->runOnBgThreadLazy(Ljava/lang/Runnable;I)V
 HPLcom/android/server/power/batterysaver/BatterySaverStateMachine;->setAdaptiveBatterySaverEnabled(Z)Z
 HPLcom/android/server/power/batterysaver/BatterySaverStateMachine;->setAdaptiveBatterySaverPolicy(Landroid/os/BatterySaverPolicyConfig;)Z
 PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->setBatterySaverEnabledManually(Z)V
-HSPLcom/android/server/power/batterysaver/BatterySaverStateMachine;->setBatteryStatus(ZIZ)V
+HSPLcom/android/server/power/batterysaver/BatterySaverStateMachine;->setBatteryStatus(ZIZ)V+]Lcom/android/server/power/batterysaver/BatterySaverStateMachine;Lcom/android/server/power/batterysaver/BatterySaverStateMachine;
 PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->setFullBatterySaverPolicy(Landroid/os/BatterySaverPolicyConfig;)Z
 PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->setSettingsLocked(ZZIZIIZI)V
 PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->setStickyActive(Z)V
 PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->triggerDynamicModeNotification()V
 PLcom/android/server/power/batterysaver/BatterySaverStateMachine;->triggerStickyDisabledNotification()V
 HPLcom/android/server/power/batterysaver/BatterySaverStateMachine;->updateStateLocked(ZZ)V
-PLcom/android/server/power/batterysaver/BatterySavingStats$BatterySaverState;->fromIndex(I)I
+HSPLcom/android/server/power/batterysaver/BatterySavingStats$BatterySaverState;->fromIndex(I)I
 PLcom/android/server/power/batterysaver/BatterySavingStats$DozeState;->fromIndex(I)I
 PLcom/android/server/power/batterysaver/BatterySavingStats$InteractiveState;->fromIndex(I)I
-PLcom/android/server/power/batterysaver/BatterySavingStats$Stat;-><init>()V
+HSPLcom/android/server/power/batterysaver/BatterySavingStats$Stat;-><init>()V
 PLcom/android/server/power/batterysaver/BatterySavingStats$Stat;->drainPerHour()D
 PLcom/android/server/power/batterysaver/BatterySavingStats$Stat;->totalMinutes()J
 HSPLcom/android/server/power/batterysaver/BatterySavingStats;-><init>(Ljava/lang/Object;)V
 PLcom/android/server/power/batterysaver/BatterySavingStats;->dump(Landroid/util/IndentingPrintWriter;)V
 PLcom/android/server/power/batterysaver/BatterySavingStats;->dumpLineLocked(Landroid/util/IndentingPrintWriter;ILjava/lang/String;ILjava/lang/String;)V
-HPLcom/android/server/power/batterysaver/BatterySavingStats;->endLastStateLocked(JII)V
-HPLcom/android/server/power/batterysaver/BatterySavingStats;->getBatteryManagerInternal()Landroid/os/BatteryManagerInternal;
-HPLcom/android/server/power/batterysaver/BatterySavingStats;->getStat(I)Lcom/android/server/power/batterysaver/BatterySavingStats$Stat;
+HSPLcom/android/server/power/batterysaver/BatterySavingStats;->endLastStateLocked(JII)V
+HSPLcom/android/server/power/batterysaver/BatterySavingStats;->getBatteryManagerInternal()Landroid/os/BatteryManagerInternal;
+HSPLcom/android/server/power/batterysaver/BatterySavingStats;->getStat(I)Lcom/android/server/power/batterysaver/BatterySavingStats$Stat;
 PLcom/android/server/power/batterysaver/BatterySavingStats;->getStat(IIII)Lcom/android/server/power/batterysaver/BatterySavingStats$Stat;
-HPLcom/android/server/power/batterysaver/BatterySavingStats;->injectBatteryLevel()I
-HPLcom/android/server/power/batterysaver/BatterySavingStats;->injectBatteryPercent()I
-PLcom/android/server/power/batterysaver/BatterySavingStats;->injectCurrentTime()J
-HPLcom/android/server/power/batterysaver/BatterySavingStats;->startNewStateLocked(IJII)V
-PLcom/android/server/power/batterysaver/BatterySavingStats;->statesToIndex(IIII)I
-HPLcom/android/server/power/batterysaver/BatterySavingStats;->transitionState(IIII)V
-HPLcom/android/server/power/batterysaver/BatterySavingStats;->transitionStateLocked(I)V
+HSPLcom/android/server/power/batterysaver/BatterySavingStats;->injectBatteryLevel()I
+HSPLcom/android/server/power/batterysaver/BatterySavingStats;->injectBatteryPercent()I
+HSPLcom/android/server/power/batterysaver/BatterySavingStats;->injectCurrentTime()J
+HSPLcom/android/server/power/batterysaver/BatterySavingStats;->startNewStateLocked(IJII)V
+HSPLcom/android/server/power/batterysaver/BatterySavingStats;->statesToIndex(IIII)I
+HSPLcom/android/server/power/batterysaver/BatterySavingStats;->transitionState(IIII)V+]Lcom/android/server/power/batterysaver/BatterySavingStats;Lcom/android/server/power/batterysaver/BatterySavingStats;
+HSPLcom/android/server/power/batterysaver/BatterySavingStats;->transitionStateLocked(I)V+]Lcom/android/server/power/batterysaver/BatterySavingStats;Lcom/android/server/power/batterysaver/BatterySavingStats;
 PLcom/android/server/power/hint/HintManagerService$AppHintSession;->-$$Nest$mdump(Lcom/android/server/power/hint/HintManagerService$AppHintSession;Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/power/hint/HintManagerService$AppHintSession;->-$$Nest$monProcStateChanged(Lcom/android/server/power/hint/HintManagerService$AppHintSession;)V
+HPLcom/android/server/power/hint/HintManagerService$AppHintSession;->-$$Nest$monProcStateChanged(Lcom/android/server/power/hint/HintManagerService$AppHintSession;)V
 HSPLcom/android/server/power/hint/HintManagerService$AppHintSession;-><init>(Lcom/android/server/power/hint/HintManagerService;II[ILandroid/os/IBinder;JJ)V
 PLcom/android/server/power/hint/HintManagerService$AppHintSession;->binderDied()V
 HPLcom/android/server/power/hint/HintManagerService$AppHintSession;->close()V
 PLcom/android/server/power/hint/HintManagerService$AppHintSession;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/power/hint/HintManagerService$AppHintSession;->onProcStateChanged()V
+HPLcom/android/server/power/hint/HintManagerService$AppHintSession;->onProcStateChanged()V
 HPLcom/android/server/power/hint/HintManagerService$AppHintSession;->pause()V
 HSPLcom/android/server/power/hint/HintManagerService$AppHintSession;->reportActualWorkDuration([J[J)V+]Lcom/android/server/power/hint/HintManagerService$NativeWrapper;Lcom/android/server/power/hint/HintManagerService$NativeWrapper;]Lcom/android/server/power/hint/HintManagerService$AppHintSession;Lcom/android/server/power/hint/HintManagerService$AppHintSession;
 HPLcom/android/server/power/hint/HintManagerService$AppHintSession;->resume()V
@@ -44477,9 +46037,9 @@
 HSPLcom/android/server/power/hint/HintManagerService$UidObserver;->$r8$lambda$jdI4m7Gjk68By1ZihlCe9VtStvE(Lcom/android/server/power/hint/HintManagerService$UidObserver;II)V
 HSPLcom/android/server/power/hint/HintManagerService$UidObserver;-><init>(Lcom/android/server/power/hint/HintManagerService;)V
 HSPLcom/android/server/power/hint/HintManagerService$UidObserver;->isUidForeground(I)Z+]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/power/hint/HintManagerService$UidObserver;->lambda$onUidGone$0(I)V
+HSPLcom/android/server/power/hint/HintManagerService$UidObserver;->lambda$onUidGone$0(I)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/power/hint/HintManagerService$UidObserver;->lambda$onUidStateChanged$1(II)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
-HSPLcom/android/server/power/hint/HintManagerService$UidObserver;->onUidGone(IZ)V
+HSPLcom/android/server/power/hint/HintManagerService$UidObserver;->onUidGone(IZ)V+]Landroid/os/Handler;Landroid/os/Handler;
 HSPLcom/android/server/power/hint/HintManagerService$UidObserver;->onUidStateChanged(IIJI)V+]Landroid/os/Handler;Landroid/os/Handler;
 HSPLcom/android/server/power/hint/HintManagerService;->-$$Nest$fgetmActiveSessions(Lcom/android/server/power/hint/HintManagerService;)Landroid/util/ArrayMap;
 HSPLcom/android/server/power/hint/HintManagerService;->-$$Nest$fgetmLock(Lcom/android/server/power/hint/HintManagerService;)Ljava/lang/Object;
@@ -44494,7 +46054,7 @@
 HSPLcom/android/server/power/hint/HintManagerService;->onStart()V
 HSPLcom/android/server/power/hint/HintManagerService;->systemReady()V
 PLcom/android/server/powerstats/BatteryTrigger$1;-><init>(Lcom/android/server/powerstats/BatteryTrigger;)V
-HPLcom/android/server/powerstats/BatteryTrigger$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/powerstats/BatteryTrigger$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V+]Ljava/lang/String;Ljava/lang/String;]Lcom/android/server/powerstats/PowerStatsLogTrigger;Lcom/android/server/powerstats/BatteryTrigger;]Landroid/content/Intent;Landroid/content/Intent;
 HPLcom/android/server/powerstats/BatteryTrigger;->-$$Nest$fgetmBatteryLevel(Lcom/android/server/powerstats/BatteryTrigger;)I
 HPLcom/android/server/powerstats/BatteryTrigger;->-$$Nest$fputmBatteryLevel(Lcom/android/server/powerstats/BatteryTrigger;I)V
 PLcom/android/server/powerstats/BatteryTrigger;-><clinit>()V
@@ -44544,7 +46104,7 @@
 PLcom/android/server/powerstats/PowerStatsLogTrigger;-><init>(Landroid/content/Context;Lcom/android/server/powerstats/PowerStatsLogger;)V
 HPLcom/android/server/powerstats/PowerStatsLogTrigger;->logPowerStatsData(I)V
 PLcom/android/server/powerstats/PowerStatsLogger$1;-><init>(Lcom/android/server/powerstats/PowerStatsLogger;Landroid/util/proto/ProtoOutputStream;)V
-PLcom/android/server/powerstats/PowerStatsLogger$1;->onReadDataElement([B)V
+HPLcom/android/server/powerstats/PowerStatsLogger$1;->onReadDataElement([B)V
 PLcom/android/server/powerstats/PowerStatsLogger$2;-><init>(Lcom/android/server/powerstats/PowerStatsLogger;Landroid/util/proto/ProtoOutputStream;)V
 PLcom/android/server/powerstats/PowerStatsLogger$2;->onReadDataElement([B)V
 PLcom/android/server/powerstats/PowerStatsLogger$3;-><init>(Lcom/android/server/powerstats/PowerStatsLogger;Landroid/util/proto/ProtoOutputStream;)V
@@ -44611,7 +46171,7 @@
 HSPLcom/android/server/powerstats/PowerStatsService;->onBootPhase(I)V
 HSPLcom/android/server/powerstats/PowerStatsService;->onStart()V
 HSPLcom/android/server/powerstats/PowerStatsService;->onSystemServicesReady()V
-PLcom/android/server/powerstats/PowerStatsService;->readEnergyMeterAsync(Ljava/util/concurrent/CompletableFuture;[I)V
+HPLcom/android/server/powerstats/PowerStatsService;->readEnergyMeterAsync(Ljava/util/concurrent/CompletableFuture;[I)V
 PLcom/android/server/powerstats/ProtoStreamUtils$ChannelUtils;->getProtoBytes([Landroid/hardware/power/stats/Channel;)[B
 PLcom/android/server/powerstats/ProtoStreamUtils$ChannelUtils;->packProtoMessage([Landroid/hardware/power/stats/Channel;Landroid/util/proto/ProtoOutputStream;)V
 HPLcom/android/server/powerstats/ProtoStreamUtils$EnergyConsumerResultUtils;->adjustTimeSinceBootToEpoch([Landroid/hardware/power/stats/EnergyConsumerResult;J)V
@@ -44623,14 +46183,14 @@
 PLcom/android/server/powerstats/ProtoStreamUtils$EnergyConsumerUtils;->getProtoBytes([Landroid/hardware/power/stats/EnergyConsumer;)[B
 PLcom/android/server/powerstats/ProtoStreamUtils$EnergyConsumerUtils;->packProtoMessage([Landroid/hardware/power/stats/EnergyConsumer;Landroid/util/proto/ProtoOutputStream;)V
 HPLcom/android/server/powerstats/ProtoStreamUtils$EnergyMeasurementUtils;->adjustTimeSinceBootToEpoch([Landroid/hardware/power/stats/EnergyMeasurement;J)V
-PLcom/android/server/powerstats/ProtoStreamUtils$EnergyMeasurementUtils;->getProtoBytes([Landroid/hardware/power/stats/EnergyMeasurement;)[B
+HPLcom/android/server/powerstats/ProtoStreamUtils$EnergyMeasurementUtils;->getProtoBytes([Landroid/hardware/power/stats/EnergyMeasurement;)[B
 HPLcom/android/server/powerstats/ProtoStreamUtils$EnergyMeasurementUtils;->packProtoMessage([Landroid/hardware/power/stats/EnergyMeasurement;Landroid/util/proto/ProtoOutputStream;)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;
 HPLcom/android/server/powerstats/ProtoStreamUtils$EnergyMeasurementUtils;->unpackEnergyMeasurementProto(Landroid/util/proto/ProtoInputStream;)Landroid/hardware/power/stats/EnergyMeasurement;+]Landroid/util/proto/ProtoInputStream;Landroid/util/proto/ProtoInputStream;
 HPLcom/android/server/powerstats/ProtoStreamUtils$EnergyMeasurementUtils;->unpackProtoMessage([B)[Landroid/hardware/power/stats/EnergyMeasurement;+]Landroid/util/proto/ProtoInputStream;Landroid/util/proto/ProtoInputStream;]Ljava/util/List;Ljava/util/ArrayList;
 PLcom/android/server/powerstats/ProtoStreamUtils$PowerEntityUtils;->getProtoBytes([Landroid/hardware/power/stats/PowerEntity;)[B
 PLcom/android/server/powerstats/ProtoStreamUtils$PowerEntityUtils;->packProtoMessage([Landroid/hardware/power/stats/PowerEntity;Landroid/util/proto/ProtoOutputStream;)V
 HPLcom/android/server/powerstats/ProtoStreamUtils$StateResidencyResultUtils;->adjustTimeSinceBootToEpoch([Landroid/hardware/power/stats/StateResidencyResult;J)V
-PLcom/android/server/powerstats/ProtoStreamUtils$StateResidencyResultUtils;->getProtoBytes([Landroid/hardware/power/stats/StateResidencyResult;)[B
+HPLcom/android/server/powerstats/ProtoStreamUtils$StateResidencyResultUtils;->getProtoBytes([Landroid/hardware/power/stats/StateResidencyResult;)[B
 HPLcom/android/server/powerstats/ProtoStreamUtils$StateResidencyResultUtils;->packProtoMessage([Landroid/hardware/power/stats/StateResidencyResult;Landroid/util/proto/ProtoOutputStream;)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;
 PLcom/android/server/powerstats/ProtoStreamUtils$StateResidencyResultUtils;->unpackProtoMessage([B)[Landroid/hardware/power/stats/StateResidencyResult;
 HPLcom/android/server/powerstats/ProtoStreamUtils$StateResidencyResultUtils;->unpackStateResidencyProto(Landroid/util/proto/ProtoInputStream;)Landroid/hardware/power/stats/StateResidency;
@@ -44646,8 +46206,8 @@
 PLcom/android/server/powerstats/TimerTrigger$1;->run()V
 PLcom/android/server/powerstats/TimerTrigger$2;-><init>(Lcom/android/server/powerstats/TimerTrigger;)V
 HPLcom/android/server/powerstats/TimerTrigger$2;->run()V
-PLcom/android/server/powerstats/TimerTrigger;->-$$Nest$fgetmHandler(Lcom/android/server/powerstats/TimerTrigger;)Landroid/os/Handler;
-PLcom/android/server/powerstats/TimerTrigger;->-$$Nest$fgetmLogDataHighFrequency(Lcom/android/server/powerstats/TimerTrigger;)Ljava/lang/Runnable;
+HPLcom/android/server/powerstats/TimerTrigger;->-$$Nest$fgetmHandler(Lcom/android/server/powerstats/TimerTrigger;)Landroid/os/Handler;
+HPLcom/android/server/powerstats/TimerTrigger;->-$$Nest$fgetmLogDataHighFrequency(Lcom/android/server/powerstats/TimerTrigger;)Ljava/lang/Runnable;
 PLcom/android/server/powerstats/TimerTrigger;->-$$Nest$fgetmLogDataLowFrequency(Lcom/android/server/powerstats/TimerTrigger;)Ljava/lang/Runnable;
 PLcom/android/server/powerstats/TimerTrigger;-><clinit>()V
 PLcom/android/server/powerstats/TimerTrigger;-><init>(Landroid/content/Context;Lcom/android/server/powerstats/PowerStatsLogger;Z)V
@@ -44655,7 +46215,7 @@
 HSPLcom/android/server/print/PrintManagerService$PrintManagerImpl$2;-><init>(Lcom/android/server/print/PrintManagerService$PrintManagerImpl;)V
 HPLcom/android/server/print/PrintManagerService$PrintManagerImpl$2;->hadPrintService(Lcom/android/server/print/UserState;Ljava/lang/String;)Z+]Lcom/android/server/print/UserState;Lcom/android/server/print/UserState;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/printservice/PrintServiceInfo;Landroid/printservice/PrintServiceInfo;
 HPLcom/android/server/print/PrintManagerService$PrintManagerImpl$2;->hasPrintService(Ljava/lang/String;)Z+]Lcom/android/internal/content/PackageMonitor;Lcom/android/server/print/PrintManagerService$PrintManagerImpl$2;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Landroid/content/Intent;Landroid/content/Intent;
-PLcom/android/server/print/PrintManagerService$PrintManagerImpl$2;->onHandleForceStop(Landroid/content/Intent;[Ljava/lang/String;IZ)Z
+HPLcom/android/server/print/PrintManagerService$PrintManagerImpl$2;->onHandleForceStop(Landroid/content/Intent;[Ljava/lang/String;IZ)Z
 PLcom/android/server/print/PrintManagerService$PrintManagerImpl$2;->onPackageAdded(Ljava/lang/String;I)V
 HPLcom/android/server/print/PrintManagerService$PrintManagerImpl$2;->onPackageModified(Ljava/lang/String;)V+]Lcom/android/internal/content/PackageMonitor;Lcom/android/server/print/PrintManagerService$PrintManagerImpl$2;]Lcom/android/server/print/PrintManagerService$PrintManagerImpl$2;Lcom/android/server/print/PrintManagerService$PrintManagerImpl$2;]Landroid/os/UserManager;Landroid/os/UserManager;
 PLcom/android/server/print/PrintManagerService$PrintManagerImpl$2;->onPackageRemoved(Ljava/lang/String;I)V
@@ -44718,12 +46278,16 @@
 PLcom/android/server/print/RemotePrintService$$ExternalSyntheticLambda13;->accept(Ljava/lang/Object;)V
 PLcom/android/server/print/RemotePrintService$$ExternalSyntheticLambda1;-><init>()V
 PLcom/android/server/print/RemotePrintService$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/print/RemotePrintService$$ExternalSyntheticLambda2;-><init>()V
+PLcom/android/server/print/RemotePrintService$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/print/RemotePrintService$$ExternalSyntheticLambda3;-><init>()V
 PLcom/android/server/print/RemotePrintService$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/print/RemotePrintService$$ExternalSyntheticLambda4;-><init>()V
 PLcom/android/server/print/RemotePrintService$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;)V
 PLcom/android/server/print/RemotePrintService$$ExternalSyntheticLambda6;-><init>()V
 PLcom/android/server/print/RemotePrintService$$ExternalSyntheticLambda6;->accept(Ljava/lang/Object;)V
+PLcom/android/server/print/RemotePrintService$$ExternalSyntheticLambda7;-><init>()V
+PLcom/android/server/print/RemotePrintService$$ExternalSyntheticLambda7;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/print/RemotePrintService$$ExternalSyntheticLambda8;-><init>()V
 PLcom/android/server/print/RemotePrintService$$ExternalSyntheticLambda8;->accept(Ljava/lang/Object;)V
 PLcom/android/server/print/RemotePrintService$$ExternalSyntheticLambda9;-><init>()V
@@ -44738,11 +46302,13 @@
 PLcom/android/server/print/RemotePrintService$9;->run()V
 PLcom/android/server/print/RemotePrintService$RemotePrintServiceClient;-><init>(Lcom/android/server/print/RemotePrintService;)V
 PLcom/android/server/print/RemotePrintService$RemotePrintServiceClient;->getPrintJobInfo(Landroid/print/PrintJobId;)Landroid/print/PrintJobInfo;
-PLcom/android/server/print/RemotePrintService$RemotePrintServiceClient;->getPrintJobInfos()Ljava/util/List;
+HPLcom/android/server/print/RemotePrintService$RemotePrintServiceClient;->getPrintJobInfos()Ljava/util/List;
 PLcom/android/server/print/RemotePrintService$RemotePrintServiceClient;->onPrintersAdded(Landroid/content/pm/ParceledListSlice;)V
 PLcom/android/server/print/RemotePrintService$RemotePrintServiceClient;->onPrintersRemoved(Landroid/content/pm/ParceledListSlice;)V
 PLcom/android/server/print/RemotePrintService$RemotePrintServiceClient;->setPrintJobState(Landroid/print/PrintJobId;ILjava/lang/String;)Z
 PLcom/android/server/print/RemotePrintService$RemotePrintServiceClient;->setPrintJobTag(Landroid/print/PrintJobId;Ljava/lang/String;)Z
+PLcom/android/server/print/RemotePrintService$RemotePrintServiceClient;->setProgress(Landroid/print/PrintJobId;F)V
+PLcom/android/server/print/RemotePrintService$RemotePrintServiceClient;->setStatus(Landroid/print/PrintJobId;Ljava/lang/CharSequence;)V
 PLcom/android/server/print/RemotePrintService$RemotePrintServiceClient;->throwIfPrinterIdTampered(Landroid/content/ComponentName;Landroid/print/PrinterId;)V
 PLcom/android/server/print/RemotePrintService$RemotePrintServiceClient;->throwIfPrinterIdsForPrinterInfoTampered(Landroid/content/ComponentName;Ljava/util/List;)V
 PLcom/android/server/print/RemotePrintService$RemotePrintServiceClient;->throwIfPrinterIdsTampered(Landroid/content/ComponentName;Ljava/util/List;)V
@@ -44750,10 +46316,12 @@
 PLcom/android/server/print/RemotePrintService$RemoteServiceConneciton;-><init>(Lcom/android/server/print/RemotePrintService;)V
 PLcom/android/server/print/RemotePrintService$RemoteServiceConneciton;-><init>(Lcom/android/server/print/RemotePrintService;Lcom/android/server/print/RemotePrintService$RemoteServiceConneciton-IA;)V
 PLcom/android/server/print/RemotePrintService$RemoteServiceConneciton;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+PLcom/android/server/print/RemotePrintService;->$r8$lambda$ALgKZL5GyqWfHstGFm2FsaAGa1c(Lcom/android/server/print/RemotePrintService;Landroid/print/PrintJobInfo;)V
 PLcom/android/server/print/RemotePrintService;->$r8$lambda$EJZkn9Rh5O1N3msjTKWBy23RZEQ(Lcom/android/server/print/RemotePrintService;)V
 PLcom/android/server/print/RemotePrintService;->$r8$lambda$FMyFSSsKGLlOfgudWm5UPa3lpxo(Lcom/android/server/print/RemotePrintService;)V
 PLcom/android/server/print/RemotePrintService;->$r8$lambda$JFPYrRyXsQ_rKO0JzAePzCgMYzo(Lcom/android/server/print/RemotePrintService;)V
 PLcom/android/server/print/RemotePrintService;->$r8$lambda$_CDB4SzMmZbA3FqTXUWF2gRhyWk(Lcom/android/server/print/RemotePrintService;Ljava/util/List;)V
+PLcom/android/server/print/RemotePrintService;->$r8$lambda$iPMu1ImcyLsTKkvxItQDyRiZlHM(Lcom/android/server/print/RemotePrintService;Ljava/util/List;)V
 PLcom/android/server/print/RemotePrintService;->$r8$lambda$j3YloyXJsRQceeTVuSf2oOMCAe4(Lcom/android/server/print/RemotePrintService;Landroid/print/PrinterId;)V
 PLcom/android/server/print/RemotePrintService;->$r8$lambda$j3yKq5GrFWDLNxTziDZmV8YchlY(Lcom/android/server/print/RemotePrintService;)V
 PLcom/android/server/print/RemotePrintService;->$r8$lambda$kCH_B4ONDbwCDioVop95bcssb3s(Lcom/android/server/print/RemotePrintService;Landroid/print/PrinterId;)V
@@ -44793,20 +46361,24 @@
 PLcom/android/server/print/RemotePrintService;->handleDestroyPrinterDiscoverySession()V
 PLcom/android/server/print/RemotePrintService;->handleOnAllPrintJobsHandled()V
 PLcom/android/server/print/RemotePrintService;->handleOnPrintJobQueued(Landroid/print/PrintJobInfo;)V
+PLcom/android/server/print/RemotePrintService;->handleRequestCancelPrintJob(Landroid/print/PrintJobInfo;)V
 PLcom/android/server/print/RemotePrintService;->handleRequestCustomPrinterIcon(Landroid/print/PrinterId;)V
 PLcom/android/server/print/RemotePrintService;->handleStartPrinterDiscovery(Ljava/util/List;)V
 PLcom/android/server/print/RemotePrintService;->handleStartPrinterStateTracking(Landroid/print/PrinterId;)V
 PLcom/android/server/print/RemotePrintService;->handleStopPrinterDiscovery()V
 PLcom/android/server/print/RemotePrintService;->handleStopPrinterStateTracking(Landroid/print/PrinterId;)V
+PLcom/android/server/print/RemotePrintService;->handleValidatePrinters(Ljava/util/List;)V
 PLcom/android/server/print/RemotePrintService;->isBound()Z
 PLcom/android/server/print/RemotePrintService;->onAllPrintJobsHandled()V
 PLcom/android/server/print/RemotePrintService;->onPrintJobQueued(Landroid/print/PrintJobInfo;)V
+PLcom/android/server/print/RemotePrintService;->onRequestCancelPrintJob(Landroid/print/PrintJobInfo;)V
 PLcom/android/server/print/RemotePrintService;->requestCustomPrinterIcon(Landroid/print/PrinterId;)V
 PLcom/android/server/print/RemotePrintService;->startPrinterDiscovery(Ljava/util/List;)V
 PLcom/android/server/print/RemotePrintService;->startPrinterStateTracking(Landroid/print/PrinterId;)V
 PLcom/android/server/print/RemotePrintService;->stopPrinterDiscovery()V
 PLcom/android/server/print/RemotePrintService;->stopPrinterStateTracking(Landroid/print/PrinterId;)V
 PLcom/android/server/print/RemotePrintService;->stopTrackingAllPrinters()V
+PLcom/android/server/print/RemotePrintService;->validatePrinters(Ljava/util/List;)V
 PLcom/android/server/print/RemotePrintServiceRecommendationService$Connection$1;-><init>(Lcom/android/server/print/RemotePrintServiceRecommendationService$Connection;)V
 PLcom/android/server/print/RemotePrintServiceRecommendationService$Connection$1;->onRecommendationsUpdated(Ljava/util/List;)V
 PLcom/android/server/print/RemotePrintServiceRecommendationService$Connection;->-$$Nest$fgetmCallbacks(Lcom/android/server/print/RemotePrintServiceRecommendationService$Connection;)Lcom/android/server/print/RemotePrintServiceRecommendationService$RemotePrintServiceRecommendationServiceCallbacks;
@@ -44879,8 +46451,8 @@
 PLcom/android/server/print/RemotePrintSpooler;->destroy()V
 PLcom/android/server/print/RemotePrintSpooler;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;)V
 PLcom/android/server/print/RemotePrintSpooler;->getCustomPrinterIcon(Landroid/print/PrinterId;)Landroid/graphics/drawable/Icon;
-PLcom/android/server/print/RemotePrintSpooler;->getPrintJobInfo(Landroid/print/PrintJobId;I)Landroid/print/PrintJobInfo;
-PLcom/android/server/print/RemotePrintSpooler;->getPrintJobInfos(Landroid/content/ComponentName;II)Ljava/util/List;
+HPLcom/android/server/print/RemotePrintSpooler;->getPrintJobInfo(Landroid/print/PrintJobId;I)Landroid/print/PrintJobInfo;
+HPLcom/android/server/print/RemotePrintSpooler;->getPrintJobInfos(Landroid/content/ComponentName;II)Ljava/util/List;
 PLcom/android/server/print/RemotePrintSpooler;->getRemoteInstanceLazy()Landroid/print/IPrintSpooler;
 HPLcom/android/server/print/RemotePrintSpooler;->increasePriority()V
 PLcom/android/server/print/RemotePrintSpooler;->onAllPrintJobsHandled()V
@@ -44891,7 +46463,9 @@
 PLcom/android/server/print/RemotePrintSpooler;->setPrintJobCancelling(Landroid/print/PrintJobId;Z)V
 PLcom/android/server/print/RemotePrintSpooler;->setPrintJobState(Landroid/print/PrintJobId;ILjava/lang/String;)Z
 PLcom/android/server/print/RemotePrintSpooler;->setPrintJobTag(Landroid/print/PrintJobId;Ljava/lang/String;)Z
-PLcom/android/server/print/RemotePrintSpooler;->throwIfCalledOnMainThread()V
+PLcom/android/server/print/RemotePrintSpooler;->setProgress(Landroid/print/PrintJobId;F)V
+PLcom/android/server/print/RemotePrintSpooler;->setStatus(Landroid/print/PrintJobId;Ljava/lang/CharSequence;)V
+HPLcom/android/server/print/RemotePrintSpooler;->throwIfCalledOnMainThread()V
 PLcom/android/server/print/RemotePrintSpooler;->throwIfDestroyedLocked()V
 PLcom/android/server/print/RemotePrintSpooler;->unbindLocked()V
 PLcom/android/server/print/RemotePrintSpooler;->writePrintJobData(Landroid/os/ParcelFileDescriptor;Landroid/print/PrintJobId;)V
@@ -44920,8 +46494,12 @@
 PLcom/android/server/print/UserState$PrintJobForAppCache;->onPrintJobStateChanged(Landroid/print/PrintJobInfo;)V
 PLcom/android/server/print/UserState$PrintJobStateChangeListenerRecord;-><init>(Lcom/android/server/print/UserState;Landroid/print/IPrintJobStateChangeListener;I)V
 PLcom/android/server/print/UserState$PrintJobStateChangeListenerRecord;->destroy()V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator$$ExternalSyntheticLambda0;-><init>()V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator$$ExternalSyntheticLambda10;-><init>()V
 PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator$$ExternalSyntheticLambda10;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator$$ExternalSyntheticLambda11;-><init>()V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator$$ExternalSyntheticLambda11;->accept(Ljava/lang/Object;)V
 PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator$$ExternalSyntheticLambda1;-><init>()V
 PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator$$ExternalSyntheticLambda3;-><init>()V
@@ -44936,9 +46514,13 @@
 PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator$$ExternalSyntheticLambda7;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator$$ExternalSyntheticLambda8;-><init>()V
 PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator$$ExternalSyntheticLambda8;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator$$ExternalSyntheticLambda9;-><init>()V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator$$ExternalSyntheticLambda9;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator$1;-><init>(Lcom/android/server/print/UserState$PrinterDiscoverySessionMediator;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->$r8$lambda$0WYc6q1JaWyIs0KBsDNaSFpBZRo(Lcom/android/server/print/UserState$PrinterDiscoverySessionMediator;Lcom/android/server/print/RemotePrintService;Ljava/util/List;)V
 PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->$r8$lambda$1bKMu_-eRdvH5I9_weS__Iy3yLg(Lcom/android/server/print/UserState$PrinterDiscoverySessionMediator;Ljava/util/List;)V
 PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->$r8$lambda$FAC-7EU5oHKE3w1CWaJTQrs7De4(Lcom/android/server/print/UserState$PrinterDiscoverySessionMediator;Lcom/android/server/print/RemotePrintService;Landroid/print/PrinterId;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->$r8$lambda$WPnZWxAcULKXo0BvpaAMnH3u6is(Lcom/android/server/print/UserState$PrinterDiscoverySessionMediator;Landroid/print/IPrinterDiscoveryObserver;Ljava/util/List;)V
 PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->$r8$lambda$aVNI9C1cPE4uOIZ2UjYA_kJz39U(Lcom/android/server/print/UserState$PrinterDiscoverySessionMediator;Ljava/util/List;)V
 PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->$r8$lambda$fvp5guvKJQeZc-FjAk72NYKIRQ8(Lcom/android/server/print/UserState$PrinterDiscoverySessionMediator;Ljava/util/List;Ljava/util/List;)V
 PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->$r8$lambda$gLu9gC1P6N64VJDT-X_nfWIhtqE(Lcom/android/server/print/UserState$PrinterDiscoverySessionMediator;Ljava/util/List;)V
@@ -44958,13 +46540,16 @@
 PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->handlePrintersRemoved(Landroid/print/IPrinterDiscoveryObserver;Ljava/util/List;)V
 PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->handleStartPrinterStateTracking(Lcom/android/server/print/RemotePrintService;Landroid/print/PrinterId;)V
 PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->handleStopPrinterStateTracking(Lcom/android/server/print/RemotePrintService;Landroid/print/PrinterId;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->handleValidatePrinters(Lcom/android/server/print/RemotePrintService;Ljava/util/List;)V
 PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->onPrintersAddedLocked(Ljava/util/List;)V
 PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->onPrintersRemovedLocked(Ljava/util/List;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->onServiceAddedLocked(Lcom/android/server/print/RemotePrintService;)V
 PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->removeObserverLocked(Landroid/print/IPrinterDiscoveryObserver;)V
 PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->startPrinterDiscoveryLocked(Landroid/print/IPrinterDiscoveryObserver;Ljava/util/List;)V
 PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->startPrinterStateTrackingLocked(Landroid/print/PrinterId;)V
 PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->stopPrinterDiscoveryLocked(Landroid/print/IPrinterDiscoveryObserver;)V
 PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->stopPrinterStateTrackingLocked(Landroid/print/PrinterId;)V
+PLcom/android/server/print/UserState$PrinterDiscoverySessionMediator;->validatePrintersLocked(Ljava/util/List;)V
 PLcom/android/server/print/UserState;->$r8$lambda$5SeVoc3K-NMBxJLsvpIx4GXqsFg(Lcom/android/server/print/UserState;)V
 PLcom/android/server/print/UserState;->$r8$lambda$XwUreNEP3_90Px3xCJ0jEaO2rrc(Lcom/android/server/print/UserState;Landroid/print/PrintJobId;Ljava/util/function/IntSupplier;)V
 PLcom/android/server/print/UserState;->$r8$lambda$Xxim-x_HbBFsxPTy-VhN_YZH85g(Lcom/android/server/print/UserState;Ljava/util/List;)V
@@ -45020,6 +46605,7 @@
 PLcom/android/server/print/UserState;->throwIfDestroyedLocked()V
 PLcom/android/server/print/UserState;->updateIfNeededLocked()V
 PLcom/android/server/print/UserState;->upgradePersistentStateIfNeeded()V
+PLcom/android/server/print/UserState;->validatePrinters(Ljava/util/List;)V
 HSPLcom/android/server/profcollect/IProfCollectd$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
 HSPLcom/android/server/profcollect/IProfCollectd$Stub$Proxy;->asBinder()Landroid/os/IBinder;
 PLcom/android/server/profcollect/IProfCollectd$Stub$Proxy;->get_supported_provider()Ljava/lang/String;
@@ -45068,7 +46654,7 @@
 PLcom/android/server/profcollect/ProfcollectForwardingService;->-$$Nest$fgetmIProfcollect(Lcom/android/server/profcollect/ProfcollectForwardingService;)Lcom/android/server/profcollect/IProfCollectd;
 PLcom/android/server/profcollect/ProfcollectForwardingService;->-$$Nest$mpackProfileReport(Lcom/android/server/profcollect/ProfcollectForwardingService;)V
 PLcom/android/server/profcollect/ProfcollectForwardingService;->-$$Nest$mregisterObservers(Lcom/android/server/profcollect/ProfcollectForwardingService;)V
-PLcom/android/server/profcollect/ProfcollectForwardingService;->-$$Nest$mtraceOnAppStart(Lcom/android/server/profcollect/ProfcollectForwardingService;Ljava/lang/String;)V
+HPLcom/android/server/profcollect/ProfcollectForwardingService;->-$$Nest$mtraceOnAppStart(Lcom/android/server/profcollect/ProfcollectForwardingService;Ljava/lang/String;)V
 PLcom/android/server/profcollect/ProfcollectForwardingService;->-$$Nest$sfgetBG_PROCESS_PERIOD()J
 PLcom/android/server/profcollect/ProfcollectForwardingService;->-$$Nest$sfgetDEBUG()Z
 PLcom/android/server/profcollect/ProfcollectForwardingService;->-$$Nest$sfgetsSelfService()Lcom/android/server/profcollect/ProfcollectForwardingService;
@@ -45126,6 +46712,7 @@
 PLcom/android/server/recoverysystem/RecoverySystemService;->onPreparedForReboot(Z)V
 HSPLcom/android/server/recoverysystem/RecoverySystemService;->onSystemServicesReady()V
 PLcom/android/server/recoverysystem/RecoverySystemService;->rebootWithLskf(Ljava/lang/String;Ljava/lang/String;Z)I
+PLcom/android/server/recoverysystem/RecoverySystemService;->rebootWithLskfAssumeSlotSwitch(Ljava/lang/String;Ljava/lang/String;)I
 PLcom/android/server/recoverysystem/RecoverySystemService;->rebootWithLskfImpl(Ljava/lang/String;Ljava/lang/String;Z)I
 PLcom/android/server/recoverysystem/RecoverySystemService;->reportMetricsOnPreparedForReboot()V
 PLcom/android/server/recoverysystem/RecoverySystemService;->reportMetricsOnRebootWithLskf(Ljava/lang/String;ZLcom/android/server/recoverysystem/RecoverySystemService$RebootPreparationError;)V
@@ -45155,19 +46742,34 @@
 PLcom/android/server/rollback/AppDataRollbackHelper;->destroyApexCeSnapshots(II)V
 PLcom/android/server/rollback/AppDataRollbackHelper;->destroyApexDeSnapshots(I)V
 PLcom/android/server/rollback/AppDataRollbackHelper;->destroyAppDataSnapshot(ILandroid/content/rollback/PackageRollbackInfo;I)V
+PLcom/android/server/rollback/AppDataRollbackHelper;->doRestoreOrWipe(Landroid/content/rollback/PackageRollbackInfo;IIILjava/lang/String;I)Z
 HSPLcom/android/server/rollback/AppDataRollbackHelper;->doSnapshot(Landroid/content/rollback/PackageRollbackInfo;III)Z
 HSPLcom/android/server/rollback/AppDataRollbackHelper;->isUserCredentialLocked(I)Z
+PLcom/android/server/rollback/AppDataRollbackHelper;->restoreAppData(ILandroid/content/rollback/PackageRollbackInfo;IILjava/lang/String;)Z
 HSPLcom/android/server/rollback/AppDataRollbackHelper;->snapshotAppData(ILandroid/content/rollback/PackageRollbackInfo;[I)V
+PLcom/android/server/rollback/LocalIntentReceiver$1;-><init>(Lcom/android/server/rollback/LocalIntentReceiver;)V
+PLcom/android/server/rollback/LocalIntentReceiver$1;->send(ILandroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Landroid/content/IIntentReceiver;Ljava/lang/String;Landroid/os/Bundle;)V
+PLcom/android/server/rollback/LocalIntentReceiver;-><init>(Ljava/util/function/Consumer;)V
+PLcom/android/server/rollback/LocalIntentReceiver;->getIntentSender()Landroid/content/IntentSender;
+PLcom/android/server/rollback/Rollback$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/rollback/Rollback;Landroid/content/Context;Landroid/content/IntentSender;Ljava/util/List;)V
+PLcom/android/server/rollback/Rollback$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
+PLcom/android/server/rollback/Rollback$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/rollback/Rollback;Landroid/content/Intent;Landroid/content/Context;Landroid/content/IntentSender;Ljava/util/List;)V
+PLcom/android/server/rollback/Rollback$$ExternalSyntheticLambda1;->run()V
+PLcom/android/server/rollback/Rollback;->$r8$lambda$HnGuVN7gg8BjzGYtg5G6PRa_Xzg(Lcom/android/server/rollback/Rollback;Landroid/content/Intent;Landroid/content/Context;Landroid/content/IntentSender;Ljava/util/List;)V
+PLcom/android/server/rollback/Rollback;->$r8$lambda$sgpEB66zvRMlxdWP-9OwCWf4NSU(Lcom/android/server/rollback/Rollback;Landroid/content/Context;Landroid/content/IntentSender;Ljava/util/List;Landroid/content/Intent;)V
 PLcom/android/server/rollback/Rollback;-><init>(ILjava/io/File;IZILjava/lang/String;[ILandroid/util/SparseIntArray;)V
 HSPLcom/android/server/rollback/Rollback;-><init>(Landroid/content/rollback/RollbackInfo;Ljava/io/File;Ljava/time/Instant;IILjava/lang/String;ZILjava/lang/String;Landroid/util/SparseIntArray;)V
 HSPLcom/android/server/rollback/Rollback;->addAll(Ljava/util/List;[I)V
 PLcom/android/server/rollback/Rollback;->allPackagesEnabled()Z
 HSPLcom/android/server/rollback/Rollback;->assertInWorkerThread()V
+PLcom/android/server/rollback/Rollback;->commit(Landroid/content/Context;Ljava/util/List;Ljava/lang/String;Landroid/content/IntentSender;)V
 PLcom/android/server/rollback/Rollback;->commitPendingBackupAndRestoreForUser(ILcom/android/server/rollback/AppDataRollbackHelper;)V
+PLcom/android/server/rollback/Rollback;->containsApex()Z
 PLcom/android/server/rollback/Rollback;->containsSessionId(I)Z
 PLcom/android/server/rollback/Rollback;->delete(Lcom/android/server/rollback/AppDataRollbackHelper;Ljava/lang/String;)V
 HPLcom/android/server/rollback/Rollback;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
 PLcom/android/server/rollback/Rollback;->enableForPackage(Ljava/lang/String;JJZLjava/lang/String;[Ljava/lang/String;I)Z
+PLcom/android/server/rollback/Rollback;->enableForPackageInApex(Ljava/lang/String;JI)Z
 PLcom/android/server/rollback/Rollback;->getApexPackageNames()Ljava/util/List;
 HSPLcom/android/server/rollback/Rollback;->getBackupDir()Ljava/io/File;
 HSPLcom/android/server/rollback/Rollback;->getExtensionVersions()Landroid/util/SparseIntArray;
@@ -45186,6 +46788,8 @@
 HSPLcom/android/server/rollback/Rollback;->isEnabling()Z
 HSPLcom/android/server/rollback/Rollback;->isRestoreUserDataInProgress()Z
 PLcom/android/server/rollback/Rollback;->isStaged()Z
+PLcom/android/server/rollback/Rollback;->lambda$commit$0(Landroid/content/Intent;Landroid/content/Context;Landroid/content/IntentSender;Ljava/util/List;)V
+PLcom/android/server/rollback/Rollback;->lambda$commit$1(Landroid/content/Context;Landroid/content/IntentSender;Ljava/util/List;Landroid/content/Intent;)V
 PLcom/android/server/rollback/Rollback;->makeAvailable()V
 HSPLcom/android/server/rollback/Rollback;->restoreUserDataForPackageIfInProgress(Ljava/lang/String;[IILjava/lang/String;Lcom/android/server/rollback/AppDataRollbackHelper;)Z
 HSPLcom/android/server/rollback/Rollback;->rollbackStateFromString(Ljava/lang/String;)I
@@ -45206,6 +46810,8 @@
 PLcom/android/server/rollback/RollbackManagerServiceImpl$$ExternalSyntheticLambda12;->get()Ljava/lang/Object;
 HSPLcom/android/server/rollback/RollbackManagerServiceImpl$$ExternalSyntheticLambda14;-><init>(Lcom/android/server/rollback/RollbackManagerServiceImpl;Ljava/lang/String;[IILjava/lang/String;I)V
 HSPLcom/android/server/rollback/RollbackManagerServiceImpl$$ExternalSyntheticLambda14;->run()V
+PLcom/android/server/rollback/RollbackManagerServiceImpl$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/rollback/RollbackManagerServiceImpl;ILandroid/content/pm/ParceledListSlice;Ljava/lang/String;Landroid/content/IntentSender;)V
+PLcom/android/server/rollback/RollbackManagerServiceImpl$$ExternalSyntheticLambda1;->run()V
 PLcom/android/server/rollback/RollbackManagerServiceImpl$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/rollback/RollbackManagerServiceImpl;)V
 PLcom/android/server/rollback/RollbackManagerServiceImpl$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/rollback/RollbackManagerServiceImpl;)V
 PLcom/android/server/rollback/RollbackManagerServiceImpl$$ExternalSyntheticLambda3;->run()V
@@ -45226,6 +46832,7 @@
 PLcom/android/server/rollback/RollbackManagerServiceImpl$1;->lambda$onReceive$0(II)V
 PLcom/android/server/rollback/RollbackManagerServiceImpl$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/rollback/RollbackManagerServiceImpl$2;-><init>(Lcom/android/server/rollback/RollbackManagerServiceImpl;)V
+PLcom/android/server/rollback/RollbackManagerServiceImpl$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/rollback/RollbackManagerServiceImpl$3;-><init>(Lcom/android/server/rollback/RollbackManagerServiceImpl;)V
 PLcom/android/server/rollback/RollbackManagerServiceImpl$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/rollback/RollbackManagerServiceImpl$4;-><init>(Lcom/android/server/rollback/RollbackManagerServiceImpl;)V
@@ -45243,6 +46850,7 @@
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->$r8$lambda$-JPcS2CKfdp6gfu68x0IKV-uXEM(Lcom/android/server/rollback/RollbackManagerServiceImpl;)Landroid/content/pm/ParceledListSlice;
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->$r8$lambda$6MNKfAoLLnyXi4ZH-O2CbE-r5I8(Lcom/android/server/rollback/RollbackManagerServiceImpl;I)Ljava/lang/Integer;
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->$r8$lambda$8KPa41iQgj5a1HdezYM3BQA4MLg(Lcom/android/server/rollback/RollbackManagerServiceImpl;I)V
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->$r8$lambda$91wnZDI-06DuCuYQ9UIVJmW4ysQ(Lcom/android/server/rollback/RollbackManagerServiceImpl;ILandroid/content/pm/ParceledListSlice;Ljava/lang/String;Landroid/content/IntentSender;)V
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->$r8$lambda$Jeae9NigXkWmYcdHaOW6Dye9LH8(Lcom/android/server/rollback/RollbackManagerServiceImpl;)V
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->$r8$lambda$M06rMb-Fp2NMnqkrNkxASgAG7eQ(Lcom/android/server/rollback/RollbackManagerServiceImpl;)Landroid/content/pm/ParceledListSlice;
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->$r8$lambda$Wh15N1uwUCncxSnHZ8ox_FHtj1o(Lcom/android/server/rollback/RollbackManagerServiceImpl;I)V
@@ -45273,6 +46881,8 @@
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->awaitResult(Ljava/lang/Runnable;)V
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->awaitResult(Ljava/util/function/Supplier;)Ljava/lang/Object;
 HSPLcom/android/server/rollback/RollbackManagerServiceImpl;->calculateRelativeBootTime()J
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->commitRollback(ILandroid/content/pm/ParceledListSlice;Ljava/lang/String;Landroid/content/IntentSender;)V
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->commitRollbackInternal(ILjava/util/List;Ljava/lang/String;Landroid/content/IntentSender;)V
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->completeEnableRollback(Lcom/android/server/rollback/Rollback;)Z
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->computeRollbackDataPolicy(II)I
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->createNewRollback(Landroid/content/pm/PackageInstaller$SessionInfo;)Lcom/android/server/rollback/Rollback;
@@ -45291,9 +46901,11 @@
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->getInstalledPackageVersion(Ljava/lang/String;)J
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->getPackageInfo(Ljava/lang/String;)Landroid/content/pm/PackageInfo;
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->getRecentlyCommittedRollbacks()Landroid/content/pm/ParceledListSlice;
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->getRollbackForId(I)Lcom/android/server/rollback/Rollback;
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->getRollbackForSession(I)Lcom/android/server/rollback/Rollback;
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->isModule(Ljava/lang/String;)Z
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->isRollbackAllowed(Ljava/lang/String;)Z
+PLcom/android/server/rollback/RollbackManagerServiceImpl;->lambda$commitRollback$3(ILandroid/content/pm/ParceledListSlice;Ljava/lang/String;Landroid/content/IntentSender;)V
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->lambda$dump$14(Lcom/android/internal/util/IndentingPrintWriter;)V
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->lambda$getAvailableRollbacks$1()Landroid/content/pm/ParceledListSlice;
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->lambda$getRecentlyCommittedRollbacks$2()Landroid/content/pm/ParceledListSlice;
@@ -45320,23 +46932,46 @@
 PLcom/android/server/rollback/RollbackManagerServiceImpl;->updateRollbackLifetimeDurationInMillis()V
 PLcom/android/server/rollback/RollbackPackageHealthObserver$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/rollback/RollbackPackageHealthObserver;)V
 PLcom/android/server/rollback/RollbackPackageHealthObserver$$ExternalSyntheticLambda0;->run()V
+PLcom/android/server/rollback/RollbackPackageHealthObserver$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/rollback/RollbackPackageHealthObserver;)V
+PLcom/android/server/rollback/RollbackPackageHealthObserver$$ExternalSyntheticLambda1;->run()V
 PLcom/android/server/rollback/RollbackPackageHealthObserver$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/rollback/RollbackPackageHealthObserver;Landroid/content/rollback/RollbackInfo;)V
 PLcom/android/server/rollback/RollbackPackageHealthObserver$$ExternalSyntheticLambda3;->run()V
+PLcom/android/server/rollback/RollbackPackageHealthObserver$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/rollback/RollbackPackageHealthObserver;Landroid/content/rollback/RollbackInfo;Landroid/content/pm/VersionedPackage;ILjava/lang/String;)V
+PLcom/android/server/rollback/RollbackPackageHealthObserver$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;)V
+PLcom/android/server/rollback/RollbackPackageHealthObserver$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/rollback/RollbackPackageHealthObserver;Ljava/util/function/Consumer;)V
+PLcom/android/server/rollback/RollbackPackageHealthObserver$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;)V
+PLcom/android/server/rollback/RollbackPackageHealthObserver$$ExternalSyntheticLambda6;-><init>(Ljava/util/function/Consumer;Landroid/content/Intent;)V
+PLcom/android/server/rollback/RollbackPackageHealthObserver$$ExternalSyntheticLambda6;->run()V
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->$r8$lambda$GYEEwqgCkHBN372M-pUMUTsNb8M(Ljava/util/function/Consumer;Landroid/content/Intent;)V
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->$r8$lambda$J7bNVSwS1yfuFLggc-5aOr3S6Ko(Lcom/android/server/rollback/RollbackPackageHealthObserver;)V
 PLcom/android/server/rollback/RollbackPackageHealthObserver;->$r8$lambda$gxUJsixtVwfiVzdpT7ddT3_PUM8(Lcom/android/server/rollback/RollbackPackageHealthObserver;)V
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->$r8$lambda$kStGuZ40fNjAhoNA1qyHamSTmIQ(Lcom/android/server/rollback/RollbackPackageHealthObserver;Ljava/util/function/Consumer;Landroid/content/Intent;)V
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->$r8$lambda$lGX-K_40DTN7kW4NXIhw7Z1XBNk(Lcom/android/server/rollback/RollbackPackageHealthObserver;Landroid/content/rollback/RollbackInfo;Landroid/content/pm/VersionedPackage;ILjava/lang/String;Landroid/content/Intent;)V
 PLcom/android/server/rollback/RollbackPackageHealthObserver;->$r8$lambda$wcxwAVhuQgpcj2xfj_aprzlUjyw(Lcom/android/server/rollback/RollbackPackageHealthObserver;Landroid/content/rollback/RollbackInfo;)V
 HSPLcom/android/server/rollback/RollbackPackageHealthObserver;-><init>(Landroid/content/Context;)V
 PLcom/android/server/rollback/RollbackPackageHealthObserver;->assertInWorkerThread()V
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->execute(Landroid/content/pm/VersionedPackage;II)Z
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->getAvailableRollback(Landroid/content/pm/VersionedPackage;)Landroid/content/rollback/RollbackInfo;
 HSPLcom/android/server/rollback/RollbackPackageHealthObserver;->getName()Ljava/lang/String;
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->isModule(Ljava/lang/String;)Z
 PLcom/android/server/rollback/RollbackPackageHealthObserver;->isRebootlessApex(Landroid/content/rollback/RollbackInfo;)Z
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->lambda$execute$0()V
 PLcom/android/server/rollback/RollbackPackageHealthObserver;->lambda$notifyRollbackAvailable$2(Landroid/content/rollback/RollbackInfo;)V
 PLcom/android/server/rollback/RollbackPackageHealthObserver;->lambda$onBootCompletedAsync$3()V
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->lambda$rollbackPackage$4(Landroid/content/rollback/RollbackInfo;Landroid/content/pm/VersionedPackage;ILjava/lang/String;Landroid/content/Intent;)V
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->lambda$rollbackPackage$5(Ljava/util/function/Consumer;Landroid/content/Intent;)V
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->lambda$rollbackPackage$6(Ljava/util/function/Consumer;Landroid/content/Intent;)V
 PLcom/android/server/rollback/RollbackPackageHealthObserver;->notifyRollbackAvailable(Landroid/content/rollback/RollbackInfo;)V
 PLcom/android/server/rollback/RollbackPackageHealthObserver;->onBootCompleted()V
 PLcom/android/server/rollback/RollbackPackageHealthObserver;->onBootCompletedAsync()V
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->onHealthCheckFailed(Landroid/content/pm/VersionedPackage;II)I
 PLcom/android/server/rollback/RollbackPackageHealthObserver;->popLastStagedRollbackIds()Landroid/util/SparseArray;
 HSPLcom/android/server/rollback/RollbackPackageHealthObserver;->readBoolean(Ljava/io/File;)Z
 PLcom/android/server/rollback/RollbackPackageHealthObserver;->readStagedRollbackIds(Ljava/io/File;)Landroid/util/SparseArray;
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->rollbackAll()V
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->rollbackPackage(Landroid/content/rollback/RollbackInfo;Landroid/content/pm/VersionedPackage;I)V
 PLcom/android/server/rollback/RollbackPackageHealthObserver;->startObservingHealth(Ljava/util/List;J)V
+PLcom/android/server/rollback/RollbackPackageHealthObserver;->useTwoPhaseRollback(Ljava/util/List;)Z
 HSPLcom/android/server/rollback/RollbackPackageHealthObserver;->writeBoolean(Ljava/io/File;Z)V
 HSPLcom/android/server/rollback/RollbackStore;-><init>(Ljava/io/File;Ljava/io/File;)V
 PLcom/android/server/rollback/RollbackStore;->backupPackageCodePath(Lcom/android/server/rollback/Rollback;Ljava/lang/String;Ljava/lang/String;)V
@@ -45344,10 +46979,12 @@
 HSPLcom/android/server/rollback/RollbackStore;->convertToRestoreInfoArray(Lorg/json/JSONArray;)Ljava/util/ArrayList;
 PLcom/android/server/rollback/RollbackStore;->createNonStagedRollback(IIILjava/lang/String;[ILandroid/util/SparseIntArray;)Lcom/android/server/rollback/Rollback;
 PLcom/android/server/rollback/RollbackStore;->createStagedRollback(IIILjava/lang/String;[ILandroid/util/SparseIntArray;)Lcom/android/server/rollback/Rollback;
+PLcom/android/server/rollback/RollbackStore;->deletePackageCodePaths(Lcom/android/server/rollback/Rollback;)V
 PLcom/android/server/rollback/RollbackStore;->deleteRollback(Lcom/android/server/rollback/Rollback;)V
 HSPLcom/android/server/rollback/RollbackStore;->extensionVersionsFromJson(Lorg/json/JSONArray;)Landroid/util/SparseIntArray;
 HSPLcom/android/server/rollback/RollbackStore;->extensionVersionsToJson(Landroid/util/SparseIntArray;)Lorg/json/JSONArray;
 HSPLcom/android/server/rollback/RollbackStore;->fromIntList(Ljava/util/List;)Lorg/json/JSONArray;
+PLcom/android/server/rollback/RollbackStore;->getPackageCodePaths(Lcom/android/server/rollback/Rollback;Ljava/lang/String;)[Ljava/io/File;
 PLcom/android/server/rollback/RollbackStore;->isLinkPossible(Ljava/io/File;Ljava/io/File;)Z
 PLcom/android/server/rollback/RollbackStore;->loadHistorialRollbacks()Ljava/util/List;
 HSPLcom/android/server/rollback/RollbackStore;->loadRollback(Ljava/io/File;)Lcom/android/server/rollback/Rollback;
@@ -45369,6 +47006,11 @@
 HSPLcom/android/server/rollback/RollbackStore;->versionedPackageFromJson(Lorg/json/JSONObject;)Landroid/content/pm/VersionedPackage;
 HSPLcom/android/server/rollback/RollbackStore;->versionedPackagesFromJson(Lorg/json/JSONArray;)Ljava/util/List;
 HSPLcom/android/server/rollback/RollbackStore;->versionedPackagesToJson(Ljava/util/List;)Lorg/json/JSONArray;
+PLcom/android/server/rollback/WatchdogRollbackLogger;->logEvent(Landroid/content/pm/VersionedPackage;IILjava/lang/String;)V
+PLcom/android/server/rollback/WatchdogRollbackLogger;->logTestProperties(Landroid/content/pm/VersionedPackage;IILjava/lang/String;)V
+PLcom/android/server/rollback/WatchdogRollbackLogger;->mapFailureReasonToMetric(I)I
+PLcom/android/server/rollback/WatchdogRollbackLogger;->rollbackReasonToString(I)Ljava/lang/String;
+PLcom/android/server/rollback/WatchdogRollbackLogger;->rollbackTypeToString(I)Ljava/lang/String;
 PLcom/android/server/rotationresolver/RemoteRotationResolverService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest;Landroid/service/rotationresolver/RotationResolutionRequest;)V
 PLcom/android/server/rotationresolver/RemoteRotationResolverService$$ExternalSyntheticLambda0;->runNoResult(Ljava/lang/Object;)V
 PLcom/android/server/rotationresolver/RemoteRotationResolverService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest;)V
@@ -45378,8 +47020,8 @@
 PLcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest;)V
 PLcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest$RotationResolverCallback;-><init>(Lcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest;)V
-PLcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest$RotationResolverCallback;->onCancellable(Landroid/os/ICancellationSignal;)V
-PLcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest$RotationResolverCallback;->onFailure(I)V
+HPLcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest$RotationResolverCallback;->onCancellable(Landroid/os/ICancellationSignal;)V
+HPLcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest$RotationResolverCallback;->onFailure(I)V
 HPLcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest$RotationResolverCallback;->onSuccess(I)V
 PLcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest;->$r8$lambda$1mGsv5rCaLal0L2D9qXRads14Oo(Lcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest;)V
 PLcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest;->-$$Nest$fgetmCancellationSignalInternal(Lcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest;)Landroid/os/CancellationSignal;
@@ -45387,7 +47029,7 @@
 PLcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest;->-$$Nest$fgetmLock(Lcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest;)Ljava/lang/Object;
 PLcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest;->-$$Nest$fgetmRequestStartTimeMillis(Lcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest;)J
 PLcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest;->-$$Nest$fputmCancellation(Lcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest;Landroid/os/ICancellationSignal;)V
-PLcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest;-><init>(Landroid/rotationresolver/RotationResolverInternal$RotationResolverCallbackInternal;Landroid/service/rotationresolver/RotationResolutionRequest;Landroid/os/CancellationSignal;Ljava/lang/Object;)V
+HPLcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest;-><init>(Landroid/rotationresolver/RotationResolverInternal$RotationResolverCallbackInternal;Landroid/service/rotationresolver/RotationResolutionRequest;Landroid/os/CancellationSignal;Ljava/lang/Object;)V
 PLcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest;->cancelInternal()V
 PLcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest;->dump(Landroid/util/IndentingPrintWriter;)V
 PLcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest;->lambda$cancelInternal$0()V
@@ -45399,7 +47041,7 @@
 PLcom/android/server/rotationresolver/RemoteRotationResolverService;->getAutoDisconnectTimeoutMs()J
 PLcom/android/server/rotationresolver/RemoteRotationResolverService;->lambda$resolveRotation$0(Lcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest;Landroid/service/rotationresolver/RotationResolutionRequest;Landroid/service/rotationresolver/IRotationResolverService;)V
 PLcom/android/server/rotationresolver/RemoteRotationResolverService;->lambda$resolveRotation$1(Lcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest;)V
-PLcom/android/server/rotationresolver/RemoteRotationResolverService;->resolveRotation(Lcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest;)V
+HPLcom/android/server/rotationresolver/RemoteRotationResolverService;->resolveRotation(Lcom/android/server/rotationresolver/RemoteRotationResolverService$RotationRequest;)V
 PLcom/android/server/rotationresolver/RotationResolverManagerPerUserService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/rotationresolver/RotationResolverManagerPerUserService;)V
 PLcom/android/server/rotationresolver/RotationResolverManagerPerUserService$$ExternalSyntheticLambda0;->onCancel()V
 PLcom/android/server/rotationresolver/RotationResolverManagerPerUserService$1;-><init>(Lcom/android/server/rotationresolver/RotationResolverManagerPerUserService;Landroid/rotationresolver/RotationResolverInternal$RotationResolverCallbackInternal;)V
@@ -45437,6 +47079,7 @@
 PLcom/android/server/rotationresolver/RotationResolverManagerService;->errorCodeToProto(I)I
 HSPLcom/android/server/rotationresolver/RotationResolverManagerService;->getServiceConfigPackage(Landroid/content/Context;)Ljava/lang/String;
 HSPLcom/android/server/rotationresolver/RotationResolverManagerService;->isServiceConfigured(Landroid/content/Context;)Z
+PLcom/android/server/rotationresolver/RotationResolverManagerService;->logRotationStats(III)V
 PLcom/android/server/rotationresolver/RotationResolverManagerService;->logRotationStatsWithTimeToCalculate(IIIJ)V
 PLcom/android/server/rotationresolver/RotationResolverManagerService;->newServiceLocked(IZ)Lcom/android/server/infra/AbstractPerUserSystemService;
 PLcom/android/server/rotationresolver/RotationResolverManagerService;->newServiceLocked(IZ)Lcom/android/server/rotationresolver/RotationResolverManagerPerUserService;
@@ -45471,6 +47114,9 @@
 PLcom/android/server/search/SearchManagerService;->onCleanupUser(I)V
 PLcom/android/server/search/SearchManagerService;->onUnlockUser(I)V
 PLcom/android/server/search/Searchables$1;-><init>()V
+PLcom/android/server/search/Searchables$1;->compare(Landroid/content/pm/ResolveInfo;Landroid/content/pm/ResolveInfo;)I
+PLcom/android/server/search/Searchables$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
+PLcom/android/server/search/Searchables;->-$$Nest$smisSystemApp(Landroid/content/pm/ResolveInfo;)Z
 PLcom/android/server/search/Searchables;-><clinit>()V
 PLcom/android/server/search/Searchables;-><init>(Landroid/content/Context;I)V
 PLcom/android/server/search/Searchables;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
@@ -45480,6 +47126,7 @@
 HPLcom/android/server/search/Searchables;->getDefaultGlobalSearchProvider(Ljava/util/List;)Landroid/content/ComponentName;+]Ljava/util/List;Ljava/util/ArrayList;
 HPLcom/android/server/search/Searchables;->getGlobalSearchProviderSetting()Ljava/lang/String;
 PLcom/android/server/search/Searchables;->getSearchableInfo(Landroid/content/ComponentName;)Landroid/app/SearchableInfo;
+PLcom/android/server/search/Searchables;->isSystemApp(Landroid/content/pm/ResolveInfo;)Z
 HPLcom/android/server/search/Searchables;->queryIntentActivities(Landroid/content/Intent;I)Ljava/util/List;+]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/pm/ParceledListSlice;Landroid/content/pm/ParceledListSlice;]Landroid/content/Intent;Landroid/content/Intent;
 HPLcom/android/server/search/Searchables;->updateSearchableList()V+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/app/SearchableInfo;Landroid/app/SearchableInfo;]Lcom/android/server/search/Searchables;Lcom/android/server/search/Searchables;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 PLcom/android/server/searchui/RemoteSearchUiService;-><init>(Landroid/content/Context;Ljava/lang/String;Landroid/content/ComponentName;ILcom/android/server/searchui/RemoteSearchUiService$RemoteSearchUiServiceCallbacks;ZZ)V
@@ -45492,7 +47139,7 @@
 PLcom/android/server/searchui/SearchUiManagerService$SearchUiManagerStub$$ExternalSyntheticLambda0;-><init>(Landroid/app/search/SearchContext;Landroid/app/search/SearchSessionId;Landroid/os/IBinder;)V
 PLcom/android/server/searchui/SearchUiManagerService$SearchUiManagerStub$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
 PLcom/android/server/searchui/SearchUiManagerService$SearchUiManagerStub$$ExternalSyntheticLambda1;-><init>(Landroid/app/search/SearchSessionId;Landroid/app/search/Query;Landroid/app/search/ISearchCallback;)V
-PLcom/android/server/searchui/SearchUiManagerService$SearchUiManagerStub$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/searchui/SearchUiManagerService$SearchUiManagerStub$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
 PLcom/android/server/searchui/SearchUiManagerService$SearchUiManagerStub$$ExternalSyntheticLambda2;-><init>(Landroid/app/search/SearchSessionId;)V
 PLcom/android/server/searchui/SearchUiManagerService$SearchUiManagerStub$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;)V
 PLcom/android/server/searchui/SearchUiManagerService$SearchUiManagerStub$$ExternalSyntheticLambda3;-><init>(Landroid/app/search/SearchSessionId;Landroid/app/search/Query;Landroid/app/search/SearchTargetEvent;)V
@@ -45590,7 +47237,7 @@
 PLcom/android/server/security/KeyChainSystemService;->-$$Nest$mstartServiceInBackgroundAsUser(Lcom/android/server/security/KeyChainSystemService;Landroid/content/Intent;Landroid/os/UserHandle;)V
 HSPLcom/android/server/security/KeyChainSystemService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/security/KeyChainSystemService;->onStart()V
-PLcom/android/server/security/KeyChainSystemService;->startServiceInBackgroundAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
+HPLcom/android/server/security/KeyChainSystemService;->startServiceInBackgroundAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V
 HSPLcom/android/server/sensorprivacy/AllSensorStateController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/sensorprivacy/AllSensorStateController;)V
 HSPLcom/android/server/sensorprivacy/AllSensorStateController$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/sensorprivacy/AllSensorStateController;->$r8$lambda$DA9hc-HUJxG--Ss50h240r8gPRg(Lcom/android/server/sensorprivacy/AllSensorStateController;Z)V
@@ -45635,7 +47282,7 @@
 PLcom/android/server/sensorprivacy/PersistedState;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;)V
 PLcom/android/server/sensorprivacy/PersistedState;->forEachKnownState(Lcom/android/internal/util/function/QuadConsumer;)V
 HSPLcom/android/server/sensorprivacy/PersistedState;->fromFile(Ljava/lang/String;)Lcom/android/server/sensorprivacy/PersistedState;
-HSPLcom/android/server/sensorprivacy/PersistedState;->getState(III)Lcom/android/server/sensorprivacy/SensorState;
+HSPLcom/android/server/sensorprivacy/PersistedState;->getState(III)Lcom/android/server/sensorprivacy/SensorState;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/sensorprivacy/PersistedState;->persist(Landroid/util/ArrayMap;)V
 HSPLcom/android/server/sensorprivacy/PersistedState;->readPVersion2(Landroid/util/TypedXmlPullParser;Lcom/android/server/sensorprivacy/PersistedState$PVersion2;)V
 HSPLcom/android/server/sensorprivacy/PersistedState;->readState()V
@@ -45669,15 +47316,15 @@
 PLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyHandler;->removeListener(Landroid/hardware/ISensorPrivacyListener;)V
 PLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyHandler;->removeSuppressPackageReminderToken(Landroid/util/Pair;Landroid/os/IBinder;)V
 HSPLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyManagerInternalImpl$$ExternalSyntheticLambda0;-><init>(Landroid/hardware/SensorPrivacyManagerInternal$OnUserSensorPrivacyChangedListener;IZ)V
-PLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyManagerInternalImpl$$ExternalSyntheticLambda0;->run()V
-PLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyManagerInternalImpl;->$r8$lambda$2Vm8p4xms3zjA4SqcmVUqguYGDU(Landroid/hardware/SensorPrivacyManagerInternal$OnUserSensorPrivacyChangedListener;IZ)V
+HSPLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyManagerInternalImpl$$ExternalSyntheticLambda0;->run()V
+HSPLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyManagerInternalImpl;->$r8$lambda$2Vm8p4xms3zjA4SqcmVUqguYGDU(Landroid/hardware/SensorPrivacyManagerInternal$OnUserSensorPrivacyChangedListener;IZ)V
 HSPLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyManagerInternalImpl;->-$$Nest$mdispatch(Lcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyManagerInternalImpl;IIZ)V
 HSPLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyManagerInternalImpl;-><init>(Lcom/android/server/sensorprivacy/SensorPrivacyService;)V
 HSPLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyManagerInternalImpl;-><init>(Lcom/android/server/sensorprivacy/SensorPrivacyService;Lcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyManagerInternalImpl-IA;)V
 HSPLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyManagerInternalImpl;->addSensorPrivacyListenerForAllUsers(ILandroid/hardware/SensorPrivacyManagerInternal$OnUserSensorPrivacyChangedListener;)V
 HSPLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyManagerInternalImpl;->dispatch(IIZ)V
 HSPLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyManagerInternalImpl;->isSensorPrivacyEnabled(II)Z
-PLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyManagerInternalImpl;->lambda$dispatch$0(Landroid/hardware/SensorPrivacyManagerInternal$OnUserSensorPrivacyChangedListener;IZ)V
+HSPLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyManagerInternalImpl;->lambda$dispatch$0(Landroid/hardware/SensorPrivacyManagerInternal$OnUserSensorPrivacyChangedListener;IZ)V
 HSPLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyServiceImpl$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyHandler;)V
 HSPLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyServiceImpl$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyServiceImpl;)V
 PLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyServiceImpl$$ExternalSyntheticLambda1;->onSensorPrivacyChanged(IIILcom/android/server/sensorprivacy/SensorState;)V
@@ -45749,7 +47396,7 @@
 PLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyServiceImpl;->onOpNoted(IILjava/lang/String;Ljava/lang/String;II)V
 PLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyServiceImpl;->onOpStarted(IILjava/lang/String;Ljava/lang/String;II)V
 PLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyServiceImpl;->onSensorUseStarted(ILjava/lang/String;I)V
-PLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyServiceImpl;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
+HSPLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyServiceImpl;->onUserRestrictionsChanged(ILandroid/os/Bundle;Landroid/os/Bundle;)V
 PLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyServiceImpl;->removeSensorPrivacyListener(Landroid/hardware/ISensorPrivacyListener;)V
 PLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyServiceImpl;->removeSuppressPackageReminderToken(Landroid/util/Pair;Landroid/os/IBinder;)V
 PLcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyServiceImpl;->requiresAuthentication()Z
@@ -45796,7 +47443,7 @@
 PLcom/android/server/sensorprivacy/SensorPrivacyStateController;->forEachState(Lcom/android/server/sensorprivacy/SensorPrivacyStateController$SensorPrivacyStateConsumer;)V
 HSPLcom/android/server/sensorprivacy/SensorPrivacyStateController;->getAllSensorState()Z
 HSPLcom/android/server/sensorprivacy/SensorPrivacyStateController;->getInstance()Lcom/android/server/sensorprivacy/SensorPrivacyStateController;
-HSPLcom/android/server/sensorprivacy/SensorPrivacyStateController;->getState(III)Lcom/android/server/sensorprivacy/SensorState;
+HSPLcom/android/server/sensorprivacy/SensorPrivacyStateController;->getState(III)Lcom/android/server/sensorprivacy/SensorState;+]Lcom/android/server/sensorprivacy/SensorPrivacyStateController;Lcom/android/server/sensorprivacy/SensorPrivacyStateControllerImpl;
 HSPLcom/android/server/sensorprivacy/SensorPrivacyStateController;->persistAll()V
 PLcom/android/server/sensorprivacy/SensorPrivacyStateController;->sendSetStateCallback(Landroid/os/Handler;Lcom/android/server/sensorprivacy/SensorPrivacyStateController$SetStateResultCallback;Z)V
 HSPLcom/android/server/sensorprivacy/SensorPrivacyStateController;->setAllSensorPrivacyListener(Landroid/os/Handler;Lcom/android/server/sensorprivacy/SensorPrivacyStateController$AllSensorPrivacyListener;)V
@@ -45811,7 +47458,7 @@
 PLcom/android/server/sensorprivacy/SensorPrivacyStateControllerImpl;->forEachStateLocked(Lcom/android/server/sensorprivacy/SensorPrivacyStateController$SensorPrivacyStateConsumer;)V
 HSPLcom/android/server/sensorprivacy/SensorPrivacyStateControllerImpl;->getDefaultSensorState()Lcom/android/server/sensorprivacy/SensorState;
 HSPLcom/android/server/sensorprivacy/SensorPrivacyStateControllerImpl;->getInstance()Lcom/android/server/sensorprivacy/SensorPrivacyStateController;
-HSPLcom/android/server/sensorprivacy/SensorPrivacyStateControllerImpl;->getStateLocked(III)Lcom/android/server/sensorprivacy/SensorState;
+HSPLcom/android/server/sensorprivacy/SensorPrivacyStateControllerImpl;->getStateLocked(III)Lcom/android/server/sensorprivacy/SensorState;+]Lcom/android/server/sensorprivacy/PersistedState;Lcom/android/server/sensorprivacy/PersistedState;
 PLcom/android/server/sensorprivacy/SensorPrivacyStateControllerImpl;->notifyStateChangeLocked(IIILcom/android/server/sensorprivacy/SensorState;)V
 HSPLcom/android/server/sensorprivacy/SensorPrivacyStateControllerImpl;->schedulePersistLocked()V
 HSPLcom/android/server/sensorprivacy/SensorPrivacyStateControllerImpl;->setSensorPrivacyListenerLocked(Landroid/os/Handler;Lcom/android/server/sensorprivacy/SensorPrivacyStateController$SensorPrivacyListener;)V
@@ -45853,7 +47500,7 @@
 HSPLcom/android/server/servicewatcher/CurrentUserServiceSupplier$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 HSPLcom/android/server/servicewatcher/CurrentUserServiceSupplier$BoundServiceInfo;-><init>(Ljava/lang/String;ILandroid/content/ComponentName;ILandroid/os/Bundle;)V
 HSPLcom/android/server/servicewatcher/CurrentUserServiceSupplier$BoundServiceInfo;-><init>(Ljava/lang/String;Landroid/content/pm/ResolveInfo;)V
-PLcom/android/server/servicewatcher/CurrentUserServiceSupplier$BoundServiceInfo;->getMetadata()Landroid/os/Bundle;
+HSPLcom/android/server/servicewatcher/CurrentUserServiceSupplier$BoundServiceInfo;->getMetadata()Landroid/os/Bundle;
 HPLcom/android/server/servicewatcher/CurrentUserServiceSupplier$BoundServiceInfo;->getVersion()I
 HSPLcom/android/server/servicewatcher/CurrentUserServiceSupplier$BoundServiceInfo;->parseUid(Landroid/content/pm/ResolveInfo;)I
 HSPLcom/android/server/servicewatcher/CurrentUserServiceSupplier$BoundServiceInfo;->parseVersion(Landroid/content/pm/ResolveInfo;)I
@@ -45867,13 +47514,13 @@
 HSPLcom/android/server/servicewatcher/CurrentUserServiceSupplier;->getServiceInfo()Lcom/android/server/servicewatcher/ServiceWatcher$BoundServiceInfo;
 HSPLcom/android/server/servicewatcher/CurrentUserServiceSupplier;->hasMatchingService()Z
 HSPLcom/android/server/servicewatcher/CurrentUserServiceSupplier;->lambda$static$0(Lcom/android/server/servicewatcher/CurrentUserServiceSupplier$BoundServiceInfo;Lcom/android/server/servicewatcher/CurrentUserServiceSupplier$BoundServiceInfo;)I+]Lcom/android/server/servicewatcher/CurrentUserServiceSupplier$BoundServiceInfo;Lcom/android/server/servicewatcher/CurrentUserServiceSupplier$BoundServiceInfo;
-PLcom/android/server/servicewatcher/CurrentUserServiceSupplier;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/servicewatcher/CurrentUserServiceSupplier;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/servicewatcher/CurrentUserServiceSupplier;->register(Lcom/android/server/servicewatcher/ServiceWatcher$ServiceChangedListener;)V
 HSPLcom/android/server/servicewatcher/CurrentUserServiceSupplier;->retrieveExplicitPackage(Landroid/content/Context;II)Ljava/lang/String;
 PLcom/android/server/servicewatcher/CurrentUserServiceSupplier;->unregister()V
-PLcom/android/server/servicewatcher/ServiceWatcher$BinderOperation;->onError(Ljava/lang/Throwable;)V
+HSPLcom/android/server/servicewatcher/ServiceWatcher$BinderOperation;->onError(Ljava/lang/Throwable;)V
 HSPLcom/android/server/servicewatcher/ServiceWatcher$BoundServiceInfo;-><init>(Ljava/lang/String;ILandroid/content/ComponentName;)V
-HPLcom/android/server/servicewatcher/ServiceWatcher$BoundServiceInfo;->equals(Ljava/lang/Object;)Z+]Landroid/content/ComponentName;Landroid/content/ComponentName;
+HSPLcom/android/server/servicewatcher/ServiceWatcher$BoundServiceInfo;->equals(Ljava/lang/Object;)Z+]Landroid/content/ComponentName;Landroid/content/ComponentName;
 HSPLcom/android/server/servicewatcher/ServiceWatcher$BoundServiceInfo;->getAction()Ljava/lang/String;
 HSPLcom/android/server/servicewatcher/ServiceWatcher$BoundServiceInfo;->getComponentName()Landroid/content/ComponentName;
 HSPLcom/android/server/servicewatcher/ServiceWatcher$BoundServiceInfo;->getUserId()I
@@ -45882,8 +47529,8 @@
 HSPLcom/android/server/servicewatcher/ServiceWatcher;->create(Landroid/content/Context;Ljava/lang/String;Lcom/android/server/servicewatcher/ServiceWatcher$ServiceSupplier;Lcom/android/server/servicewatcher/ServiceWatcher$ServiceListener;)Lcom/android/server/servicewatcher/ServiceWatcher;
 HSPLcom/android/server/servicewatcher/ServiceWatcherImpl$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/servicewatcher/ServiceWatcherImpl$MyServiceConnection;Lcom/android/server/servicewatcher/ServiceWatcherImpl$MyServiceConnection;)V
 HSPLcom/android/server/servicewatcher/ServiceWatcherImpl$$ExternalSyntheticLambda0;->run()V
-HPLcom/android/server/servicewatcher/ServiceWatcherImpl$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/servicewatcher/ServiceWatcherImpl$MyServiceConnection;Lcom/android/server/servicewatcher/ServiceWatcher$BinderOperation;)V
-HPLcom/android/server/servicewatcher/ServiceWatcherImpl$$ExternalSyntheticLambda1;->run()V
+HSPLcom/android/server/servicewatcher/ServiceWatcherImpl$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/servicewatcher/ServiceWatcherImpl$MyServiceConnection;Lcom/android/server/servicewatcher/ServiceWatcher$BinderOperation;)V
+HSPLcom/android/server/servicewatcher/ServiceWatcherImpl$$ExternalSyntheticLambda1;->run()V
 HSPLcom/android/server/servicewatcher/ServiceWatcherImpl$1;-><init>(Lcom/android/server/servicewatcher/ServiceWatcherImpl;)V
 HPLcom/android/server/servicewatcher/ServiceWatcherImpl$1;->onPackageChanged(Ljava/lang/String;I[Ljava/lang/String;)Z
 HPLcom/android/server/servicewatcher/ServiceWatcherImpl$1;->onSomePackagesChanged()V+]Lcom/android/server/servicewatcher/ServiceWatcherImpl;Lcom/android/server/servicewatcher/ServiceWatcherImpl;
@@ -45896,22 +47543,22 @@
 PLcom/android/server/servicewatcher/ServiceWatcherImpl$MyServiceConnection;->isConnected()Z
 PLcom/android/server/servicewatcher/ServiceWatcherImpl$MyServiceConnection;->lambda$onBindingDied$0()V
 PLcom/android/server/servicewatcher/ServiceWatcherImpl$MyServiceConnection;->onBindingDied(Landroid/content/ComponentName;)V
-PLcom/android/server/servicewatcher/ServiceWatcherImpl$MyServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
-PLcom/android/server/servicewatcher/ServiceWatcherImpl$MyServiceConnection;->onServiceDisconnected(Landroid/content/ComponentName;)V
-HPLcom/android/server/servicewatcher/ServiceWatcherImpl$MyServiceConnection;->runOnBinder(Lcom/android/server/servicewatcher/ServiceWatcher$BinderOperation;)V
+HSPLcom/android/server/servicewatcher/ServiceWatcherImpl$MyServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HPLcom/android/server/servicewatcher/ServiceWatcherImpl$MyServiceConnection;->onServiceDisconnected(Landroid/content/ComponentName;)V
+HSPLcom/android/server/servicewatcher/ServiceWatcherImpl$MyServiceConnection;->runOnBinder(Lcom/android/server/servicewatcher/ServiceWatcher$BinderOperation;)V
 HSPLcom/android/server/servicewatcher/ServiceWatcherImpl$MyServiceConnection;->unbind()V
-PLcom/android/server/servicewatcher/ServiceWatcherImpl;->$r8$lambda$t0qAh1UEA_LOIy4Yd0Q8_IVsw2E(Lcom/android/server/servicewatcher/ServiceWatcherImpl$MyServiceConnection;Lcom/android/server/servicewatcher/ServiceWatcher$BinderOperation;)V
+HSPLcom/android/server/servicewatcher/ServiceWatcherImpl;->$r8$lambda$t0qAh1UEA_LOIy4Yd0Q8_IVsw2E(Lcom/android/server/servicewatcher/ServiceWatcherImpl$MyServiceConnection;Lcom/android/server/servicewatcher/ServiceWatcher$BinderOperation;)V
 HSPLcom/android/server/servicewatcher/ServiceWatcherImpl;->$r8$lambda$uswI7cW5E5IuAwzr9Wxv3XBHti8(Lcom/android/server/servicewatcher/ServiceWatcherImpl$MyServiceConnection;Lcom/android/server/servicewatcher/ServiceWatcherImpl$MyServiceConnection;)V
 HSPLcom/android/server/servicewatcher/ServiceWatcherImpl;-><clinit>()V
 HSPLcom/android/server/servicewatcher/ServiceWatcherImpl;-><init>(Landroid/content/Context;Landroid/os/Handler;Ljava/lang/String;Lcom/android/server/servicewatcher/ServiceWatcher$ServiceSupplier;Lcom/android/server/servicewatcher/ServiceWatcher$ServiceListener;)V
 HSPLcom/android/server/servicewatcher/ServiceWatcherImpl;->checkServiceResolves()Z
 PLcom/android/server/servicewatcher/ServiceWatcherImpl;->dump(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/servicewatcher/ServiceWatcherImpl;->lambda$onServiceChanged$1(Lcom/android/server/servicewatcher/ServiceWatcherImpl$MyServiceConnection;Lcom/android/server/servicewatcher/ServiceWatcherImpl$MyServiceConnection;)V
-PLcom/android/server/servicewatcher/ServiceWatcherImpl;->lambda$runOnBinder$0(Lcom/android/server/servicewatcher/ServiceWatcherImpl$MyServiceConnection;Lcom/android/server/servicewatcher/ServiceWatcher$BinderOperation;)V
-PLcom/android/server/servicewatcher/ServiceWatcherImpl;->onServiceChanged()V
+HSPLcom/android/server/servicewatcher/ServiceWatcherImpl;->lambda$runOnBinder$0(Lcom/android/server/servicewatcher/ServiceWatcherImpl$MyServiceConnection;Lcom/android/server/servicewatcher/ServiceWatcher$BinderOperation;)V
+HSPLcom/android/server/servicewatcher/ServiceWatcherImpl;->onServiceChanged()V
 HSPLcom/android/server/servicewatcher/ServiceWatcherImpl;->onServiceChanged(Z)V+]Lcom/android/server/servicewatcher/ServiceWatcherImpl$MyServiceConnection;Lcom/android/server/servicewatcher/ServiceWatcherImpl$MyServiceConnection;]Lcom/android/server/servicewatcher/ServiceWatcher$ServiceSupplier;Lcom/android/server/servicewatcher/CurrentUserServiceSupplier;
 HSPLcom/android/server/servicewatcher/ServiceWatcherImpl;->register()V
-HPLcom/android/server/servicewatcher/ServiceWatcherImpl;->runOnBinder(Lcom/android/server/servicewatcher/ServiceWatcher$BinderOperation;)V
+HSPLcom/android/server/servicewatcher/ServiceWatcherImpl;->runOnBinder(Lcom/android/server/servicewatcher/ServiceWatcher$BinderOperation;)V
 PLcom/android/server/servicewatcher/ServiceWatcherImpl;->unregister()V
 PLcom/android/server/signedconfig/GlobalSettingsConfigApplicator;-><clinit>()V
 PLcom/android/server/signedconfig/GlobalSettingsConfigApplicator;-><init>(Landroid/content/Context;Ljava/lang/String;Lcom/android/server/signedconfig/SignedConfigEvent;)V
@@ -45970,24 +47617,24 @@
 PLcom/android/server/slice/PinnedSliceState;->lambda$mergeSpecs$0([Landroid/app/slice/SliceSpec;Landroid/app/slice/SliceSpec;)Landroid/app/slice/SliceSpec;
 PLcom/android/server/slice/PinnedSliceState;->lambda$mergeSpecs$1(Landroid/app/slice/SliceSpec;)Z
 PLcom/android/server/slice/PinnedSliceState;->lambda$mergeSpecs$2(I)[Landroid/app/slice/SliceSpec;
-PLcom/android/server/slice/PinnedSliceState;->mergeSpecs([Landroid/app/slice/SliceSpec;)V
+HPLcom/android/server/slice/PinnedSliceState;->mergeSpecs([Landroid/app/slice/SliceSpec;)V
 HPLcom/android/server/slice/PinnedSliceState;->pin(Ljava/lang/String;[Landroid/app/slice/SliceSpec;Landroid/os/IBinder;)V
 HPLcom/android/server/slice/PinnedSliceState;->setSlicePinned(Z)V
-PLcom/android/server/slice/PinnedSliceState;->unpin(Ljava/lang/String;Landroid/os/IBinder;)Z
+HPLcom/android/server/slice/PinnedSliceState;->unpin(Ljava/lang/String;Landroid/os/IBinder;)Z
 PLcom/android/server/slice/SliceClientPermissions$SliceAuthority;->-$$Nest$fgetmAuthority(Lcom/android/server/slice/SliceClientPermissions$SliceAuthority;)Ljava/lang/String;
 PLcom/android/server/slice/SliceClientPermissions$SliceAuthority;->-$$Nest$fgetmPkg(Lcom/android/server/slice/SliceClientPermissions$SliceAuthority;)Lcom/android/server/slice/SlicePermissionManager$PkgUser;
-PLcom/android/server/slice/SliceClientPermissions$SliceAuthority;-><init>(Ljava/lang/String;Lcom/android/server/slice/SlicePermissionManager$PkgUser;Lcom/android/server/slice/DirtyTracker;)V
+HPLcom/android/server/slice/SliceClientPermissions$SliceAuthority;-><init>(Ljava/lang/String;Lcom/android/server/slice/SlicePermissionManager$PkgUser;Lcom/android/server/slice/DirtyTracker;)V
 HPLcom/android/server/slice/SliceClientPermissions$SliceAuthority;->addPath(Ljava/util/List;)V+]Lcom/android/server/slice/SliceClientPermissions$SliceAuthority;Lcom/android/server/slice/SliceClientPermissions$SliceAuthority;]Ljava/util/List;Landroid/net/Uri$PathSegments;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/slice/DirtyTracker;Lcom/android/server/slice/SliceClientPermissions;
 HPLcom/android/server/slice/SliceClientPermissions$SliceAuthority;->decodeSegments(Ljava/lang/String;)[Ljava/lang/String;+]Ljava/lang/String;Ljava/lang/String;
 HPLcom/android/server/slice/SliceClientPermissions$SliceAuthority;->encodeSegments([Ljava/lang/String;)Ljava/lang/String;
 PLcom/android/server/slice/SliceClientPermissions$SliceAuthority;->getAuthority()Ljava/lang/String;
-HPLcom/android/server/slice/SliceClientPermissions$SliceAuthority;->hasPermission(Ljava/util/List;)Z
+HPLcom/android/server/slice/SliceClientPermissions$SliceAuthority;->hasPermission(Ljava/util/List;)Z+]Lcom/android/server/slice/SliceClientPermissions$SliceAuthority;Lcom/android/server/slice/SliceClientPermissions$SliceAuthority;]Ljava/util/List;Landroid/net/Uri$PathSegments;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
 HPLcom/android/server/slice/SliceClientPermissions$SliceAuthority;->isPathPrefixMatch([Ljava/lang/String;[Ljava/lang/String;)Z
-HPLcom/android/server/slice/SliceClientPermissions$SliceAuthority;->readFrom(Lorg/xmlpull/v1/XmlPullParser;)V
+HPLcom/android/server/slice/SliceClientPermissions$SliceAuthority;->readFrom(Lorg/xmlpull/v1/XmlPullParser;)V+]Lorg/xmlpull/v1/XmlPullParser;Lcom/android/org/kxml2/io/KXmlParser;]Lcom/android/server/slice/SliceClientPermissions$SliceAuthority;Lcom/android/server/slice/SliceClientPermissions$SliceAuthority;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/slice/SliceClientPermissions$SliceAuthority;->writeTo(Lorg/xmlpull/v1/XmlSerializer;)V
 HPLcom/android/server/slice/SliceClientPermissions;->-$$Nest$sfgetNAMESPACE()Ljava/lang/String;
 PLcom/android/server/slice/SliceClientPermissions;-><clinit>()V
-PLcom/android/server/slice/SliceClientPermissions;-><init>(Lcom/android/server/slice/SlicePermissionManager$PkgUser;Lcom/android/server/slice/DirtyTracker;)V
+HPLcom/android/server/slice/SliceClientPermissions;-><init>(Lcom/android/server/slice/SlicePermissionManager$PkgUser;Lcom/android/server/slice/DirtyTracker;)V
 PLcom/android/server/slice/SliceClientPermissions;->clear()V
 HPLcom/android/server/slice/SliceClientPermissions;->createFrom(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/slice/DirtyTracker;)Lcom/android/server/slice/SliceClientPermissions;
 HPLcom/android/server/slice/SliceClientPermissions;->getAuthority(Lcom/android/server/slice/SlicePermissionManager$PkgUser;)Lcom/android/server/slice/SliceClientPermissions$SliceAuthority;
@@ -46001,7 +47648,7 @@
 PLcom/android/server/slice/SliceClientPermissions;->removeAuthority(Ljava/lang/String;I)V
 HPLcom/android/server/slice/SliceClientPermissions;->writeTo(Lorg/xmlpull/v1/XmlSerializer;)V
 PLcom/android/server/slice/SliceManagerService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/slice/SliceManagerService;Ljava/lang/String;Ljava/lang/String;I)V
-PLcom/android/server/slice/SliceManagerService$$ExternalSyntheticLambda0;->run()V
+HPLcom/android/server/slice/SliceManagerService$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/slice/SliceManagerService$$ExternalSyntheticLambda1;-><init>(I)V
 PLcom/android/server/slice/SliceManagerService$$ExternalSyntheticLambda1;->test(Ljava/lang/Object;)Z
 PLcom/android/server/slice/SliceManagerService$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/slice/SliceManagerService;I)V
@@ -46016,7 +47663,7 @@
 PLcom/android/server/slice/SliceManagerService$Lifecycle;->onUserStopping(Lcom/android/server/SystemService$TargetUser;)V
 PLcom/android/server/slice/SliceManagerService$Lifecycle;->onUserUnlocking(Lcom/android/server/SystemService$TargetUser;)V
 PLcom/android/server/slice/SliceManagerService$PackageMatchingCache;-><init>(Ljava/util/function/Supplier;)V
-HPLcom/android/server/slice/SliceManagerService$PackageMatchingCache;->matches(Ljava/lang/String;)Z
+HPLcom/android/server/slice/SliceManagerService$PackageMatchingCache;->matches(Ljava/lang/String;)Z+]Ljava/lang/Object;Ljava/lang/String;]Ljava/util/function/Supplier;Lcom/android/server/slice/SliceManagerService$$ExternalSyntheticLambda3;,Lcom/android/server/slice/SliceManagerService$$ExternalSyntheticLambda2;
 HSPLcom/android/server/slice/SliceManagerService$RoleObserver;-><init>(Lcom/android/server/slice/SliceManagerService;)V
 PLcom/android/server/slice/SliceManagerService$RoleObserver;->onRoleHoldersChanged(Ljava/lang/String;Landroid/os/UserHandle;)V
 HSPLcom/android/server/slice/SliceManagerService$RoleObserver;->register()V
@@ -46032,14 +47679,14 @@
 HSPLcom/android/server/slice/SliceManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/slice/SliceManagerService;-><init>(Landroid/content/Context;Landroid/os/Looper;)V
 HPLcom/android/server/slice/SliceManagerService;->checkAccess(Ljava/lang/String;Landroid/net/Uri;II)I
-HPLcom/android/server/slice/SliceManagerService;->checkSlicePermission(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;II[Ljava/lang/String;)I
+HPLcom/android/server/slice/SliceManagerService;->checkSlicePermission(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;II[Ljava/lang/String;)I+]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/slice/SliceManagerService;Lcom/android/server/slice/SliceManagerService;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
 HSPLcom/android/server/slice/SliceManagerService;->createHandler()Lcom/android/server/ServiceThread;
 PLcom/android/server/slice/SliceManagerService;->createPinnedSlice(Landroid/net/Uri;Ljava/lang/String;)Lcom/android/server/slice/PinnedSliceState;
 HPLcom/android/server/slice/SliceManagerService;->enforceAccess(Ljava/lang/String;Landroid/net/Uri;)V
 HPLcom/android/server/slice/SliceManagerService;->enforceCrossUser(Ljava/lang/String;Landroid/net/Uri;)V
 HPLcom/android/server/slice/SliceManagerService;->enforceOwner(Ljava/lang/String;Landroid/net/Uri;I)V
 HPLcom/android/server/slice/SliceManagerService;->getAssistant(I)Ljava/lang/String;
-HPLcom/android/server/slice/SliceManagerService;->getAssistantMatcher(I)Lcom/android/server/slice/SliceManagerService$PackageMatchingCache;
+HPLcom/android/server/slice/SliceManagerService;->getAssistantMatcher(I)Lcom/android/server/slice/SliceManagerService$PackageMatchingCache;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/slice/SliceManagerService;->getBackupPayload(I)[B
 PLcom/android/server/slice/SliceManagerService;->getContext()Landroid/content/Context;
 HPLcom/android/server/slice/SliceManagerService;->getDefaultHome(I)Ljava/lang/String;
@@ -46052,10 +47699,10 @@
 HPLcom/android/server/slice/SliceManagerService;->getPinnedSpecs(Landroid/net/Uri;Ljava/lang/String;)[Landroid/app/slice/SliceSpec;
 HPLcom/android/server/slice/SliceManagerService;->getProviderPkg(Landroid/net/Uri;I)Ljava/lang/String;
 HPLcom/android/server/slice/SliceManagerService;->grantSlicePermission(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;)V
-HPLcom/android/server/slice/SliceManagerService;->hasFullSliceAccess(Ljava/lang/String;I)Z
+HPLcom/android/server/slice/SliceManagerService;->hasFullSliceAccess(Ljava/lang/String;I)Z+]Lcom/android/server/slice/SliceManagerService;Lcom/android/server/slice/SliceManagerService;
 HSPLcom/android/server/slice/SliceManagerService;->invalidateCachedDefaultHome()V
-HPLcom/android/server/slice/SliceManagerService;->isAssistant(Ljava/lang/String;I)Z
-HPLcom/android/server/slice/SliceManagerService;->isDefaultHomeApp(Ljava/lang/String;I)Z
+HPLcom/android/server/slice/SliceManagerService;->isAssistant(Ljava/lang/String;I)Z+]Lcom/android/server/slice/SliceManagerService$PackageMatchingCache;Lcom/android/server/slice/SliceManagerService$PackageMatchingCache;]Lcom/android/server/slice/SliceManagerService;Lcom/android/server/slice/SliceManagerService;
+HPLcom/android/server/slice/SliceManagerService;->isDefaultHomeApp(Ljava/lang/String;I)Z+]Lcom/android/server/slice/SliceManagerService$PackageMatchingCache;Lcom/android/server/slice/SliceManagerService$PackageMatchingCache;]Lcom/android/server/slice/SliceManagerService;Lcom/android/server/slice/SliceManagerService;
 HPLcom/android/server/slice/SliceManagerService;->isGrantedFullAccess(Ljava/lang/String;I)Z
 HPLcom/android/server/slice/SliceManagerService;->lambda$getAssistantMatcher$2(I)Ljava/lang/String;
 HPLcom/android/server/slice/SliceManagerService;->lambda$getHomeMatcher$3(I)Ljava/lang/String;
@@ -46066,7 +47713,7 @@
 HPLcom/android/server/slice/SliceManagerService;->pinSlice(Ljava/lang/String;Landroid/net/Uri;[Landroid/app/slice/SliceSpec;Landroid/os/IBinder;)V
 PLcom/android/server/slice/SliceManagerService;->removePinnedSlice(Landroid/net/Uri;)V
 HSPLcom/android/server/slice/SliceManagerService;->systemReady()V
-PLcom/android/server/slice/SliceManagerService;->unpinSlice(Ljava/lang/String;Landroid/net/Uri;Landroid/os/IBinder;)V
+HPLcom/android/server/slice/SliceManagerService;->unpinSlice(Ljava/lang/String;Landroid/net/Uri;Landroid/os/IBinder;)V
 HPLcom/android/server/slice/SliceManagerService;->verifyCaller(Ljava/lang/String;)V
 PLcom/android/server/slice/SlicePermissionManager$$ExternalSyntheticLambda0;-><init>()V
 HSPLcom/android/server/slice/SlicePermissionManager$H;-><init>(Lcom/android/server/slice/SlicePermissionManager;Landroid/os/Looper;)V
@@ -46082,7 +47729,7 @@
 HPLcom/android/server/slice/SlicePermissionManager$PkgUser;-><init>(Ljava/lang/String;I)V
 HPLcom/android/server/slice/SlicePermissionManager$PkgUser;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Lcom/android/server/slice/SlicePermissionManager$PkgUser;,Ljava/lang/Class;
 PLcom/android/server/slice/SlicePermissionManager$PkgUser;->getPkg()Ljava/lang/String;
-PLcom/android/server/slice/SlicePermissionManager$PkgUser;->getUserId()I
+HPLcom/android/server/slice/SlicePermissionManager$PkgUser;->getUserId()I
 HPLcom/android/server/slice/SlicePermissionManager$PkgUser;->hashCode()I+]Ljava/lang/String;Ljava/lang/String;
 HPLcom/android/server/slice/SlicePermissionManager$PkgUser;->toString()Ljava/lang/String;
 PLcom/android/server/slice/SlicePermissionManager;->-$$Nest$fgetmCachedClients(Lcom/android/server/slice/SlicePermissionManager;)Landroid/util/ArrayMap;
@@ -46091,7 +47738,7 @@
 PLcom/android/server/slice/SlicePermissionManager;->-$$Nest$mhandleRemove(Lcom/android/server/slice/SlicePermissionManager;Lcom/android/server/slice/SlicePermissionManager$PkgUser;)V
 HSPLcom/android/server/slice/SlicePermissionManager;-><init>(Landroid/content/Context;Landroid/os/Looper;)V
 HSPLcom/android/server/slice/SlicePermissionManager;-><init>(Landroid/content/Context;Landroid/os/Looper;Ljava/io/File;)V
-HPLcom/android/server/slice/SlicePermissionManager;->getClient(Lcom/android/server/slice/SlicePermissionManager$PkgUser;)Lcom/android/server/slice/SliceClientPermissions;
+HPLcom/android/server/slice/SlicePermissionManager;->getClient(Lcom/android/server/slice/SlicePermissionManager$PkgUser;)Lcom/android/server/slice/SliceClientPermissions;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/Handler;Lcom/android/server/slice/SlicePermissionManager$H;]Lcom/android/server/slice/SlicePermissionManager$ParserHolder;Lcom/android/server/slice/SlicePermissionManager$ParserHolder;]Lcom/android/server/slice/SlicePermissionManager;Lcom/android/server/slice/SlicePermissionManager;
 HPLcom/android/server/slice/SlicePermissionManager;->getFile(Ljava/lang/String;)Landroid/util/AtomicFile;
 HPLcom/android/server/slice/SlicePermissionManager;->getParser(Ljava/lang/String;)Lcom/android/server/slice/SlicePermissionManager$ParserHolder;
 HPLcom/android/server/slice/SlicePermissionManager;->getProvider(Lcom/android/server/slice/SlicePermissionManager$PkgUser;)Lcom/android/server/slice/SliceProviderPermissions;
@@ -46104,15 +47751,15 @@
 PLcom/android/server/slice/SlicePermissionManager;->removePkg(Ljava/lang/String;I)V
 HPLcom/android/server/slice/SlicePermissionManager;->writeBackup(Lorg/xmlpull/v1/XmlSerializer;)V
 PLcom/android/server/slice/SliceProviderPermissions$SliceAuthority;->-$$Nest$fgetmAuthority(Lcom/android/server/slice/SliceProviderPermissions$SliceAuthority;)Ljava/lang/String;
-PLcom/android/server/slice/SliceProviderPermissions$SliceAuthority;-><init>(Ljava/lang/String;Lcom/android/server/slice/DirtyTracker;)V
-PLcom/android/server/slice/SliceProviderPermissions$SliceAuthority;->addPkg(Lcom/android/server/slice/SlicePermissionManager$PkgUser;)V
+HPLcom/android/server/slice/SliceProviderPermissions$SliceAuthority;-><init>(Ljava/lang/String;Lcom/android/server/slice/DirtyTracker;)V
+HPLcom/android/server/slice/SliceProviderPermissions$SliceAuthority;->addPkg(Lcom/android/server/slice/SlicePermissionManager$PkgUser;)V
 PLcom/android/server/slice/SliceProviderPermissions$SliceAuthority;->getAuthority()Ljava/lang/String;
 PLcom/android/server/slice/SliceProviderPermissions$SliceAuthority;->getPkgs()Ljava/util/Collection;
 HPLcom/android/server/slice/SliceProviderPermissions$SliceAuthority;->readFrom(Lorg/xmlpull/v1/XmlPullParser;)V
-PLcom/android/server/slice/SliceProviderPermissions$SliceAuthority;->writeTo(Lorg/xmlpull/v1/XmlSerializer;)V
+HPLcom/android/server/slice/SliceProviderPermissions$SliceAuthority;->writeTo(Lorg/xmlpull/v1/XmlSerializer;)V
 PLcom/android/server/slice/SliceProviderPermissions;->-$$Nest$sfgetNAMESPACE()Ljava/lang/String;
 PLcom/android/server/slice/SliceProviderPermissions;-><clinit>()V
-PLcom/android/server/slice/SliceProviderPermissions;-><init>(Lcom/android/server/slice/SlicePermissionManager$PkgUser;Lcom/android/server/slice/DirtyTracker;)V
+HPLcom/android/server/slice/SliceProviderPermissions;-><init>(Lcom/android/server/slice/SlicePermissionManager$PkgUser;Lcom/android/server/slice/DirtyTracker;)V
 HPLcom/android/server/slice/SliceProviderPermissions;->createFrom(Lorg/xmlpull/v1/XmlPullParser;Lcom/android/server/slice/DirtyTracker;)Lcom/android/server/slice/SliceProviderPermissions;
 PLcom/android/server/slice/SliceProviderPermissions;->getAuthorities()Ljava/util/Collection;
 PLcom/android/server/slice/SliceProviderPermissions;->getFileName()Ljava/lang/String;
@@ -46124,7 +47771,7 @@
 HSPLcom/android/server/smartspace/RemoteSmartspaceService;->executeOnResolvedService(Lcom/android/internal/infra/AbstractRemoteService$AsyncRequest;)V
 PLcom/android/server/smartspace/RemoteSmartspaceService;->getServiceInterface(Landroid/os/IBinder;)Landroid/os/IInterface;
 PLcom/android/server/smartspace/RemoteSmartspaceService;->getServiceInterface(Landroid/os/IBinder;)Landroid/service/smartspace/ISmartspaceService;
-PLcom/android/server/smartspace/RemoteSmartspaceService;->getTimeoutIdleBindMillis()J
+HSPLcom/android/server/smartspace/RemoteSmartspaceService;->getTimeoutIdleBindMillis()J
 PLcom/android/server/smartspace/RemoteSmartspaceService;->handleOnConnectedStateChanged(Z)V
 PLcom/android/server/smartspace/RemoteSmartspaceService;->reconnect()V
 PLcom/android/server/smartspace/SmartspaceManagerService$SmartspaceManagerStub$$ExternalSyntheticLambda0;-><init>(Landroid/app/smartspace/SmartspaceSessionId;Landroid/app/smartspace/ISmartspaceCallback;)V
@@ -46249,15 +47896,15 @@
 HPLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->getCallback()Landroid/hardware/soundtrigger/IRecognitionStatusCallback;
 HPLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->getHandle()I
 PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->getModelId()Ljava/util/UUID;
-PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->getRecognitionConfig()Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;
-PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->getSoundModel()Landroid/hardware/soundtrigger/SoundTrigger$SoundModel;
+HPLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->getRecognitionConfig()Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;
+HPLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->getSoundModel()Landroid/hardware/soundtrigger/SoundTrigger$SoundModel;
 HPLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->isGenericModel()Z
 PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->isKeyphraseModel()Z
 HPLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->isModelLoaded()Z
 PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->isModelNotLoaded()Z
 HPLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->isModelStarted()Z
 HPLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->isRequested()Z
-PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->isStopPending()Z
+HPLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->isStopPending()Z
 PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->modelTypeToString()Ljava/lang/String;
 PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->requestedToString()Ljava/lang/String;
 PLcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;->setCallback(Landroid/hardware/soundtrigger/IRecognitionStatusCallback;)V
@@ -46277,13 +47924,13 @@
 PLcom/android/server/soundtrigger/SoundTriggerHelper$MyCallStateListener;-><init>(Lcom/android/server/soundtrigger/SoundTriggerHelper;Landroid/os/Looper;)V
 PLcom/android/server/soundtrigger/SoundTriggerHelper$MyCallStateListener;->onCallStateChanged(ILjava/lang/String;)V
 PLcom/android/server/soundtrigger/SoundTriggerHelper$PowerSaveModeListener;-><init>(Lcom/android/server/soundtrigger/SoundTriggerHelper;)V
-PLcom/android/server/soundtrigger/SoundTriggerHelper$PowerSaveModeListener;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/soundtrigger/SoundTriggerHelper$PowerSaveModeListener;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->-$$Nest$fgetmHandler(Lcom/android/server/soundtrigger/SoundTriggerHelper;)Landroid/os/Handler;
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->-$$Nest$fgetmLock(Lcom/android/server/soundtrigger/SoundTriggerHelper;)Ljava/lang/Object;
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->-$$Nest$fgetmPowerManager(Lcom/android/server/soundtrigger/SoundTriggerHelper;)Landroid/os/PowerManager;
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->-$$Nest$monCallStateChangedLocked(Lcom/android/server/soundtrigger/SoundTriggerHelper;Z)V
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->-$$Nest$monPowerSaveModeChangedLocked(Lcom/android/server/soundtrigger/SoundTriggerHelper;I)V
-PLcom/android/server/soundtrigger/SoundTriggerHelper;-><init>(Landroid/content/Context;Lcom/android/server/soundtrigger/SoundTriggerHelper$SoundTriggerModuleProvider;)V
+HPLcom/android/server/soundtrigger/SoundTriggerHelper;-><init>(Landroid/content/Context;Lcom/android/server/soundtrigger/SoundTriggerHelper$SoundTriggerModuleProvider;)V
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->cleanUpExistingKeyphraseModelLocked(Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;)I
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->computeRecognitionRequestedLocked()Z
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->createKeyphraseModelDataLocked(Ljava/util/UUID;I)Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;
@@ -46296,8 +47943,8 @@
 HPLcom/android/server/soundtrigger/SoundTriggerHelper;->getModelDataForLocked(I)Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;
 HPLcom/android/server/soundtrigger/SoundTriggerHelper;->getModuleProperties()Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;
 HPLcom/android/server/soundtrigger/SoundTriggerHelper;->getOrCreateGenericModelDataLocked(Ljava/util/UUID;)Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;
-PLcom/android/server/soundtrigger/SoundTriggerHelper;->initializeDeviceStateListeners()V
-PLcom/android/server/soundtrigger/SoundTriggerHelper;->internalClearGlobalStateLocked()V
+HPLcom/android/server/soundtrigger/SoundTriggerHelper;->initializeDeviceStateListeners()V
+HPLcom/android/server/soundtrigger/SoundTriggerHelper;->internalClearGlobalStateLocked()V
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->internalClearModelStateLocked()V
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->isKeyphraseRecognitionEvent(Landroid/hardware/soundtrigger/SoundTrigger$RecognitionEvent;)Z
 HPLcom/android/server/soundtrigger/SoundTriggerHelper;->isRecognitionAllowedByDeviceState(Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;)Z
@@ -46311,20 +47958,21 @@
 HPLcom/android/server/soundtrigger/SoundTriggerHelper;->onRecognitionAbortLocked(Landroid/hardware/soundtrigger/SoundTrigger$RecognitionEvent;)V
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->onResourcesAvailable()V
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->onResourcesAvailableLocked()V
-PLcom/android/server/soundtrigger/SoundTriggerHelper;->onServiceDied()V
-PLcom/android/server/soundtrigger/SoundTriggerHelper;->onServiceDiedLocked()V
+HPLcom/android/server/soundtrigger/SoundTriggerHelper;->onServiceDied()V
+HPLcom/android/server/soundtrigger/SoundTriggerHelper;->onServiceDiedLocked()V
 HPLcom/android/server/soundtrigger/SoundTriggerHelper;->prepareForRecognition(Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;)I
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->removeKeyphraseModelLocked(I)V
-PLcom/android/server/soundtrigger/SoundTriggerHelper;->sendErrorCallbacksToAllLocked(I)V
+HPLcom/android/server/soundtrigger/SoundTriggerHelper;->sendErrorCallbacksToAllLocked(I)V
 HPLcom/android/server/soundtrigger/SoundTriggerHelper;->startGenericRecognition(Ljava/util/UUID;Landroid/hardware/soundtrigger/SoundTrigger$GenericSoundModel;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;Z)I
 HPLcom/android/server/soundtrigger/SoundTriggerHelper;->startKeyphraseRecognition(ILandroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;Z)I
 HPLcom/android/server/soundtrigger/SoundTriggerHelper;->startRecognition(Landroid/hardware/soundtrigger/SoundTrigger$SoundModel;Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;IZ)I
 HPLcom/android/server/soundtrigger/SoundTriggerHelper;->startRecognitionLocked(Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;Z)I
-PLcom/android/server/soundtrigger/SoundTriggerHelper;->stopAndUnloadDeadModelsLocked()V
+HPLcom/android/server/soundtrigger/SoundTriggerHelper;->stopAndUnloadDeadModelsLocked()V
+PLcom/android/server/soundtrigger/SoundTriggerHelper;->stopGenericRecognition(Ljava/util/UUID;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;)I
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->stopKeyphraseRecognition(ILandroid/hardware/soundtrigger/IRecognitionStatusCallback;)I
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->stopRecognition(Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;)I
 HPLcom/android/server/soundtrigger/SoundTriggerHelper;->stopRecognitionLocked(Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;Z)I
-PLcom/android/server/soundtrigger/SoundTriggerHelper;->tryStopAndUnloadLocked(Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;ZZ)I
+HPLcom/android/server/soundtrigger/SoundTriggerHelper;->tryStopAndUnloadLocked(Lcom/android/server/soundtrigger/SoundTriggerHelper$ModelData;ZZ)I
 HPLcom/android/server/soundtrigger/SoundTriggerHelper;->unloadGenericSoundModel(Ljava/util/UUID;)I
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->unloadKeyphraseSoundModel(I)I
 PLcom/android/server/soundtrigger/SoundTriggerHelper;->updateAllRecognitionsLocked()V
@@ -46338,7 +47986,7 @@
 PLcom/android/server/soundtrigger/SoundTriggerLogger;->dump(Ljava/io/PrintWriter;)V
 HPLcom/android/server/soundtrigger/SoundTriggerLogger;->log(Lcom/android/server/soundtrigger/SoundTriggerLogger$Event;)V
 PLcom/android/server/soundtrigger/SoundTriggerService$1;-><init>(Lcom/android/server/soundtrigger/SoundTriggerService;Landroid/media/permission/Identity;Landroid/media/permission/Identity;)V
-PLcom/android/server/soundtrigger/SoundTriggerService$1;->getModule(ILandroid/hardware/soundtrigger/SoundTrigger$StatusListener;)Landroid/hardware/soundtrigger/SoundTriggerModule;
+HPLcom/android/server/soundtrigger/SoundTriggerService$1;->getModule(ILandroid/hardware/soundtrigger/SoundTrigger$StatusListener;)Landroid/hardware/soundtrigger/SoundTriggerModule;
 PLcom/android/server/soundtrigger/SoundTriggerService$1;->listModuleProperties(Ljava/util/ArrayList;)I
 PLcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService$SessionImpl$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService$SessionImpl;)V
 PLcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService$SessionImpl$$ExternalSyntheticLambda0;->binderDied()V
@@ -46348,7 +47996,7 @@
 PLcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService$SessionImpl;->clientDied()V
 HPLcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService$SessionImpl;->getModuleProperties()Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;
 PLcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService$SessionImpl;->lambda$new$0()V
-PLcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService$SessionImpl;->startRecognition(ILandroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;Z)I
+HPLcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService$SessionImpl;->startRecognition(ILandroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;Z)I
 PLcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService$SessionImpl;->stopRecognition(ILandroid/hardware/soundtrigger/IRecognitionStatusCallback;)I
 PLcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService$SessionImpl;->unloadKeyphraseModel(I)I
 HSPLcom/android/server/soundtrigger/SoundTriggerService$LocalSoundTriggerService;-><init>(Lcom/android/server/soundtrigger/SoundTriggerService;Landroid/content/Context;)V
@@ -46374,7 +48022,7 @@
 PLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerSessionStub$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerSessionStub;)V
 PLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerSessionStub$$ExternalSyntheticLambda0;->binderDied()V
 PLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerSessionStub$RemoteSoundTriggerDetectionService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerSessionStub$RemoteSoundTriggerDetectionService;)V
-PLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerSessionStub$RemoteSoundTriggerDetectionService$$ExternalSyntheticLambda0;->run()V
+HPLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerSessionStub$RemoteSoundTriggerDetectionService$$ExternalSyntheticLambda0;->run()V
 HPLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerSessionStub$RemoteSoundTriggerDetectionService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerSessionStub$RemoteSoundTriggerDetectionService;Landroid/hardware/soundtrigger/SoundTrigger$GenericRecognitionEvent;)V
 HPLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerSessionStub$RemoteSoundTriggerDetectionService$$ExternalSyntheticLambda1;->run(ILandroid/media/soundtrigger/ISoundTriggerDetectionService;)V
 HPLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerSessionStub$RemoteSoundTriggerDetectionService$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerSessionStub$RemoteSoundTriggerDetectionService;Landroid/hardware/soundtrigger/SoundTrigger$GenericRecognitionEvent;)V
@@ -46430,6 +48078,7 @@
 HPLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerSessionStub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 PLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerSessionStub;->startRecognition(Landroid/os/ParcelUuid;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;Z)I
 HPLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerSessionStub;->startRecognitionForService(Landroid/os/ParcelUuid;Landroid/os/Bundle;Landroid/content/ComponentName;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;)I
+PLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerSessionStub;->stopRecognition(Landroid/os/ParcelUuid;Landroid/hardware/soundtrigger/IRecognitionStatusCallback;)I
 PLcom/android/server/soundtrigger/SoundTriggerService$SoundTriggerSessionStub;->updateSoundModel(Landroid/hardware/soundtrigger/SoundTrigger$GenericSoundModel;)V
 PLcom/android/server/soundtrigger/SoundTriggerService;->-$$Nest$fgetmDbHelper(Lcom/android/server/soundtrigger/SoundTriggerService;)Lcom/android/server/soundtrigger/SoundTriggerDbHelper;
 HPLcom/android/server/soundtrigger/SoundTriggerService;->-$$Nest$fgetmLock(Lcom/android/server/soundtrigger/SoundTriggerService;)Ljava/lang/Object;
@@ -46447,9 +48096,9 @@
 PLcom/android/server/soundtrigger_middleware/AidlUtil;->newEmptyPhraseRecognitionEvent()Landroid/media/soundtrigger/PhraseRecognitionEvent;
 HPLcom/android/server/soundtrigger_middleware/AidlUtil;->newEmptyRecognitionEvent()Landroid/media/soundtrigger/RecognitionEvent;
 HSPLcom/android/server/soundtrigger_middleware/AudioSessionProviderImpl;-><init>()V
-PLcom/android/server/soundtrigger_middleware/ConversionUtil;->aidl2hidlPhrase(Landroid/media/soundtrigger/Phrase;)Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Phrase;
+HPLcom/android/server/soundtrigger_middleware/ConversionUtil;->aidl2hidlPhrase(Landroid/media/soundtrigger/Phrase;)Landroid/hardware/soundtrigger/V2_0/ISoundTriggerHw$Phrase;
 HPLcom/android/server/soundtrigger_middleware/ConversionUtil;->aidl2hidlPhraseRecognitionExtra(Landroid/media/soundtrigger/PhraseRecognitionExtra;)Landroid/hardware/soundtrigger/V2_0/PhraseRecognitionExtra;
-PLcom/android/server/soundtrigger_middleware/ConversionUtil;->aidl2hidlPhraseSoundModel(Landroid/media/soundtrigger/PhraseSoundModel;)Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$PhraseSoundModel;
+HPLcom/android/server/soundtrigger_middleware/ConversionUtil;->aidl2hidlPhraseSoundModel(Landroid/media/soundtrigger/PhraseSoundModel;)Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$PhraseSoundModel;
 HPLcom/android/server/soundtrigger_middleware/ConversionUtil;->aidl2hidlRecognitionConfig(Landroid/media/soundtrigger/RecognitionConfig;II)Landroid/hardware/soundtrigger/V2_3/RecognitionConfig;
 PLcom/android/server/soundtrigger_middleware/ConversionUtil;->aidl2hidlRecognitionModes(I)I
 HPLcom/android/server/soundtrigger_middleware/ConversionUtil;->aidl2hidlSoundModel(Landroid/media/soundtrigger/SoundModel;)Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHw$SoundModel;
@@ -46486,11 +48135,11 @@
 HSPLcom/android/server/soundtrigger_middleware/ExternalCaptureStateTracker;->run()V
 HSPLcom/android/server/soundtrigger_middleware/ExternalCaptureStateTracker;->setCaptureState(Z)V
 PLcom/android/server/soundtrigger_middleware/HalException;-><init>(ILjava/lang/String;)V
-PLcom/android/server/soundtrigger_middleware/HalException;->toString()Ljava/lang/String;
-PLcom/android/server/soundtrigger_middleware/ObjectPrinter;->print(Ljava/lang/Object;I)Ljava/lang/String;
+HPLcom/android/server/soundtrigger_middleware/HalException;->toString()Ljava/lang/String;
+HPLcom/android/server/soundtrigger_middleware/ObjectPrinter;->print(Ljava/lang/Object;I)Ljava/lang/String;
 HPLcom/android/server/soundtrigger_middleware/ObjectPrinter;->print(Ljava/lang/StringBuilder;Ljava/lang/Object;I)V
 PLcom/android/server/soundtrigger_middleware/RecoverableException;-><init>(I)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerHalEnforcer$ModelCallbackEnforcer;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerHalEnforcer;Lcom/android/server/soundtrigger_middleware/ISoundTriggerHal$ModelCallback;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerHalEnforcer$ModelCallbackEnforcer;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerHalEnforcer;Lcom/android/server/soundtrigger_middleware/ISoundTriggerHal$ModelCallback;)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerHalEnforcer$ModelCallbackEnforcer;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerHalEnforcer;Lcom/android/server/soundtrigger_middleware/ISoundTriggerHal$ModelCallback;Lcom/android/server/soundtrigger_middleware/SoundTriggerHalEnforcer$ModelCallbackEnforcer-IA;)V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerHalEnforcer$ModelCallbackEnforcer;->phraseRecognitionCallback(ILandroid/media/soundtrigger/PhraseRecognitionEvent;)V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerHalEnforcer$ModelCallbackEnforcer;->recognitionCallback(ILandroid/media/soundtrigger/RecognitionEvent;)V
@@ -46501,10 +48150,10 @@
 PLcom/android/server/soundtrigger_middleware/SoundTriggerHalEnforcer;->detach()V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerHalEnforcer;->forceRecognitionEvent(I)V
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerHalEnforcer;->getProperties()Landroid/media/soundtrigger/Properties;
-PLcom/android/server/soundtrigger_middleware/SoundTriggerHalEnforcer;->handleException(Ljava/lang/RuntimeException;)Ljava/lang/RuntimeException;
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerHalEnforcer;->handleException(Ljava/lang/RuntimeException;)Ljava/lang/RuntimeException;
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerHalEnforcer;->linkToDeath(Landroid/os/IBinder$DeathRecipient;)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerHalEnforcer;->loadPhraseSoundModel(Landroid/media/soundtrigger/PhraseSoundModel;Lcom/android/server/soundtrigger_middleware/ISoundTriggerHal$ModelCallback;)I
-PLcom/android/server/soundtrigger_middleware/SoundTriggerHalEnforcer;->loadSoundModel(Landroid/media/soundtrigger/SoundModel;Lcom/android/server/soundtrigger_middleware/ISoundTriggerHal$ModelCallback;)I
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerHalEnforcer;->loadPhraseSoundModel(Landroid/media/soundtrigger/PhraseSoundModel;Lcom/android/server/soundtrigger_middleware/ISoundTriggerHal$ModelCallback;)I
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerHalEnforcer;->loadSoundModel(Landroid/media/soundtrigger/SoundModel;Lcom/android/server/soundtrigger_middleware/ISoundTriggerHal$ModelCallback;)I
 PLcom/android/server/soundtrigger_middleware/SoundTriggerHalEnforcer;->reboot()V
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerHalEnforcer;->registerCallback(Lcom/android/server/soundtrigger_middleware/ISoundTriggerHal$GlobalCallback;)V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerHalEnforcer;->startRecognition(IIILandroid/media/soundtrigger/RecognitionConfig;)V
@@ -46515,7 +48164,7 @@
 PLcom/android/server/soundtrigger_middleware/SoundTriggerHalMaxModelLimiter;->forceRecognitionEvent(I)V
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerHalMaxModelLimiter;->getProperties()Landroid/media/soundtrigger/Properties;
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerHalMaxModelLimiter;->linkToDeath(Landroid/os/IBinder$DeathRecipient;)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerHalMaxModelLimiter;->loadPhraseSoundModel(Landroid/media/soundtrigger/PhraseSoundModel;Lcom/android/server/soundtrigger_middleware/ISoundTriggerHal$ModelCallback;)I
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerHalMaxModelLimiter;->loadPhraseSoundModel(Landroid/media/soundtrigger/PhraseSoundModel;Lcom/android/server/soundtrigger_middleware/ISoundTriggerHal$ModelCallback;)I
 PLcom/android/server/soundtrigger_middleware/SoundTriggerHalMaxModelLimiter;->loadSoundModel(Landroid/media/soundtrigger/SoundModel;Lcom/android/server/soundtrigger_middleware/ISoundTriggerHal$ModelCallback;)I
 PLcom/android/server/soundtrigger_middleware/SoundTriggerHalMaxModelLimiter;->reboot()V
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerHalMaxModelLimiter;->registerCallback(Lcom/android/server/soundtrigger_middleware/ISoundTriggerHal$GlobalCallback;)V
@@ -46534,7 +48183,7 @@
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerHalWatchdog;->forceRecognitionEvent(I)V
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerHalWatchdog;->getProperties()Landroid/media/soundtrigger/Properties;
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerHalWatchdog;->linkToDeath(Landroid/os/IBinder$DeathRecipient;)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerHalWatchdog;->loadPhraseSoundModel(Landroid/media/soundtrigger/PhraseSoundModel;Lcom/android/server/soundtrigger_middleware/ISoundTriggerHal$ModelCallback;)I
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerHalWatchdog;->loadPhraseSoundModel(Landroid/media/soundtrigger/PhraseSoundModel;Lcom/android/server/soundtrigger_middleware/ISoundTriggerHal$ModelCallback;)I
 PLcom/android/server/soundtrigger_middleware/SoundTriggerHalWatchdog;->loadSoundModel(Landroid/media/soundtrigger/SoundModel;Lcom/android/server/soundtrigger_middleware/ISoundTriggerHal$ModelCallback;)I
 PLcom/android/server/soundtrigger_middleware/SoundTriggerHalWatchdog;->reboot()V
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerHalWatchdog;->registerCallback(Lcom/android/server/soundtrigger_middleware/ISoundTriggerHal$GlobalCallback;)V
@@ -46549,7 +48198,7 @@
 PLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat$$ExternalSyntheticLambda3;->onValues(II)V
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat$$ExternalSyntheticLambda6;-><init>(Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicReference;)V
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat$$ExternalSyntheticLambda6;->onValues(ILandroid/hardware/soundtrigger/V2_3/Properties;)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat$ModelCallbackWrapper;-><init>(Lcom/android/server/soundtrigger_middleware/ISoundTriggerHal$ModelCallback;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat$ModelCallbackWrapper;-><init>(Lcom/android/server/soundtrigger_middleware/ISoundTriggerHal$ModelCallback;)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat$ModelCallbackWrapper;-><init>(Lcom/android/server/soundtrigger_middleware/ISoundTriggerHal$ModelCallback;Lcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat$ModelCallbackWrapper-IA;)V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat$ModelCallbackWrapper;->phraseRecognitionCallback_2_1(Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$PhraseRecognitionEvent;I)V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat$ModelCallbackWrapper;->recognitionCallback_2_1(Landroid/hardware/soundtrigger/V2_1/ISoundTriggerHwCallback$RecognitionEvent;I)V
@@ -46575,14 +48224,14 @@
 PLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->lambda$loadPhraseSoundModel$2(Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;II)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->lambda$loadSoundModel$1(Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;II)V
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->linkToDeath(Landroid/os/IBinder$DeathRecipient;)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->loadPhraseSoundModel(Landroid/media/soundtrigger/PhraseSoundModel;Lcom/android/server/soundtrigger_middleware/ISoundTriggerHal$ModelCallback;)I
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->loadPhraseSoundModel(Landroid/media/soundtrigger/PhraseSoundModel;Lcom/android/server/soundtrigger_middleware/ISoundTriggerHal$ModelCallback;)I
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->loadSoundModel(Landroid/media/soundtrigger/SoundModel;Lcom/android/server/soundtrigger_middleware/ISoundTriggerHal$ModelCallback;)I
 PLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->reboot()V
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->registerCallback(Lcom/android/server/soundtrigger_middleware/ISoundTriggerHal$GlobalCallback;)V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->startRecognition(IIILandroid/media/soundtrigger/RecognitionConfig;)V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->stopRecognition(I)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerHw2Compat;->unloadSoundModel(I)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl$AudioSessionProvider$AudioSession;-><init>(III)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl$AudioSessionProvider$AudioSession;-><init>(III)V
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl$AudioSessionProvider;-><init>()V
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl;-><init>([Lcom/android/server/soundtrigger_middleware/HalFactory;Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl$AudioSessionProvider;)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl;->attach(ILandroid/media/soundtrigger_middleware/ISoundTriggerCallback;)Landroid/media/soundtrigger_middleware/ISoundTriggerModule;
@@ -46591,7 +48240,7 @@
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$Event;-><init>(Ljava/lang/String;Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$Event-IA;)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging$CallbackLogging;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging;Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging$CallbackLogging;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging;Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging$CallbackLogging-IA;)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging$CallbackLogging;->asBinder()Landroid/os/IBinder;
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging$CallbackLogging;->asBinder()Landroid/os/IBinder;
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging$CallbackLogging;->logVoidReturn(Ljava/lang/String;[Ljava/lang/Object;)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging$CallbackLogging;->onModuleDied()V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging$CallbackLogging;->onPhraseRecognition(ILandroid/media/soundtrigger/PhraseRecognitionEvent;I)V
@@ -46599,15 +48248,15 @@
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging$CallbackLogging;->onResourcesAvailable()V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging$CallbackLogging;->toString()Ljava/lang/String;
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging;->-$$Nest$fgetmOriginatorIdentity(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging;)Landroid/media/permission/Identity;
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging;Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging;Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging;->attach(Landroid/media/soundtrigger_middleware/ISoundTriggerModule;)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging;->detach()V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging;->forceRecognitionEvent(I)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging;->getCallbackWrapper()Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging;->loadModel(Landroid/media/soundtrigger/SoundModel;)I
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging;->loadPhraseModel(Landroid/media/soundtrigger/PhraseSoundModel;)I
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging;->loadPhraseModel(Landroid/media/soundtrigger/PhraseSoundModel;)I
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging;->logException(Ljava/lang/String;Ljava/lang/Exception;[Ljava/lang/Object;)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging;->logReturn(Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging;->logReturn(Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging;->logVoidReturn(Ljava/lang/String;[Ljava/lang/Object;)V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging;->startRecognition(ILandroid/media/soundtrigger/RecognitionConfig;)V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging$ModuleLogging;->stopRecognition(I)V
@@ -46619,28 +48268,28 @@
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging;-><clinit>()V
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging;-><init>(Lcom/android/server/soundtrigger_middleware/ISoundTriggerMiddlewareInternal;)V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging;->appendMessage(Ljava/lang/String;)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging;->attach(ILandroid/media/soundtrigger_middleware/ISoundTriggerCallback;)Landroid/media/soundtrigger_middleware/ISoundTriggerModule;
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging;->attach(ILandroid/media/soundtrigger_middleware/ISoundTriggerCallback;)Landroid/media/soundtrigger_middleware/ISoundTriggerModule;
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging;->listModules()[Landroid/media/soundtrigger_middleware/SoundTriggerModuleDescriptor;
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging;->logException(Ljava/lang/String;Ljava/lang/Exception;[Ljava/lang/Object;)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging;->logExceptionWithObject(Ljava/lang/Object;Landroid/media/permission/Identity;Ljava/lang/String;Ljava/lang/Exception;[Ljava/lang/Object;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging;->logExceptionWithObject(Ljava/lang/Object;Landroid/media/permission/Identity;Ljava/lang/String;Ljava/lang/Exception;[Ljava/lang/Object;)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging;->logReturn(Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging;->logReturnWithObject(Ljava/lang/Object;Landroid/media/permission/Identity;Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging;->logReturnWithObject(Ljava/lang/Object;Landroid/media/permission/Identity;Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/Object;)V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging;->logVoidReturnWithObject(Ljava/lang/Object;Landroid/media/permission/Identity;Ljava/lang/String;[Ljava/lang/Object;)V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging;->printArgs([Ljava/lang/Object;)Ljava/lang/String;
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging;->printObject(Ljava/lang/Object;)Ljava/lang/String;
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging;->printObject(Ljava/lang/StringBuilder;Ljava/lang/Object;)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareLogging;->toString()Ljava/lang/String;
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission$ModuleWrapper$CallbackWrapper;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission$ModuleWrapper;Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission$ModuleWrapper$CallbackWrapper;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission$ModuleWrapper;Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission$ModuleWrapper$CallbackWrapper;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission$ModuleWrapper;Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission$ModuleWrapper$CallbackWrapper-IA;)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission$ModuleWrapper$CallbackWrapper;->asBinder()Landroid/os/IBinder;
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission$ModuleWrapper$CallbackWrapper;->asBinder()Landroid/os/IBinder;
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission$ModuleWrapper$CallbackWrapper;->enforcePermissions(Ljava/lang/String;)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission$ModuleWrapper$CallbackWrapper;->onModuleDied()V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission$ModuleWrapper$CallbackWrapper;->onPhraseRecognition(ILandroid/media/soundtrigger/PhraseRecognitionEvent;I)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission$ModuleWrapper$CallbackWrapper;->onPhraseRecognition(ILandroid/media/soundtrigger/PhraseRecognitionEvent;I)V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission$ModuleWrapper$CallbackWrapper;->onRecognition(ILandroid/media/soundtrigger/RecognitionEvent;I)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission$ModuleWrapper$CallbackWrapper;->onResourcesAvailable()V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission$ModuleWrapper;->-$$Nest$fgetmOriginatorIdentity(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission$ModuleWrapper;)Landroid/media/permission/Identity;
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission$ModuleWrapper;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission;Landroid/media/permission/Identity;Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission$ModuleWrapper;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission;Landroid/media/permission/Identity;Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission$ModuleWrapper;->attach(Landroid/media/soundtrigger_middleware/ISoundTriggerModule;)Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission$ModuleWrapper;
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission$ModuleWrapper;->detach()V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission$ModuleWrapper;->enforcePermissions()V
@@ -46652,9 +48301,9 @@
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission$ModuleWrapper;->stopRecognition(I)V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission$ModuleWrapper;->toString()Ljava/lang/String;
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission$ModuleWrapper;->unloadModel(I)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission;->-$$Nest$menforcePermissionsForPreflight(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission;Landroid/media/permission/Identity;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission;->-$$Nest$menforcePermissionsForPreflight(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission;Landroid/media/permission/Identity;)V
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission;-><init>(Lcom/android/server/soundtrigger_middleware/ISoundTriggerMiddlewareInternal;Landroid/content/Context;)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission;->attach(ILandroid/media/soundtrigger_middleware/ISoundTriggerCallback;)Landroid/media/soundtrigger_middleware/ISoundTriggerModule;
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission;->attach(ILandroid/media/soundtrigger_middleware/ISoundTriggerCallback;)Landroid/media/soundtrigger_middleware/ISoundTriggerModule;
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission;->dump(Ljava/io/PrintWriter;)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission;->enforcePermissionForDataDelivery(Landroid/content/Context;Landroid/media/permission/Identity;Ljava/lang/String;Ljava/lang/String;)V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission;->enforcePermissionForPreflight(Landroid/content/Context;Landroid/media/permission/Identity;Ljava/lang/String;)V
@@ -46666,25 +48315,25 @@
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission;->toString()Ljava/lang/String;
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$Lifecycle;->onStart()V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService;-><init>(Landroid/media/soundtrigger_middleware/ISoundTriggerModule;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService;-><init>(Landroid/media/soundtrigger_middleware/ISoundTriggerModule;)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService;-><init>(Landroid/media/soundtrigger_middleware/ISoundTriggerModule;Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService-IA;)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService;->detach()V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService;->detach()V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService;->forceRecognitionEvent(I)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService;->loadModel(Landroid/media/soundtrigger/SoundModel;)I
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService;->loadPhraseModel(Landroid/media/soundtrigger/PhraseSoundModel;)I
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService;->loadPhraseModel(Landroid/media/soundtrigger/PhraseSoundModel;)I
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService;->startRecognition(ILandroid/media/soundtrigger/RecognitionConfig;)V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService;->stopRecognition(I)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService$ModuleService;->unloadModel(I)V
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService;-><init>(Lcom/android/server/soundtrigger_middleware/ISoundTriggerMiddlewareInternal;Landroid/content/Context;)V
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService;-><init>(Lcom/android/server/soundtrigger_middleware/ISoundTriggerMiddlewareInternal;Landroid/content/Context;Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService-IA;)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService;->attachAsMiddleman(ILandroid/media/permission/Identity;Landroid/media/permission/Identity;Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;)Landroid/media/soundtrigger_middleware/ISoundTriggerModule;
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService;->attachAsMiddleman(ILandroid/media/permission/Identity;Landroid/media/permission/Identity;Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;)Landroid/media/soundtrigger_middleware/ISoundTriggerModule;
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService;->establishIdentityIndirect(Landroid/media/permission/Identity;Landroid/media/permission/Identity;)Landroid/media/permission/SafeCloseable;
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService;->establishIdentityIndirect(Landroid/media/permission/Identity;Landroid/media/permission/Identity;)Landroid/media/permission/SafeCloseable;
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareService;->listModulesAsMiddleman(Landroid/media/permission/Identity;Landroid/media/permission/Identity;)[Landroid/media/soundtrigger_middleware/SoundTriggerModuleDescriptor;
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$ModelState$Activity;-><clinit>()V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$ModelState$Activity;-><init>(Ljava/lang/String;I)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$ModelState;-><init>(Landroid/media/soundtrigger/PhraseSoundModel;)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$ModelState;-><init>(Landroid/media/soundtrigger/SoundModel;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$ModelState;-><init>(Landroid/media/soundtrigger/PhraseSoundModel;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$ModelState;-><init>(Landroid/media/soundtrigger/SoundModel;)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$ModuleState;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation;Landroid/media/soundtrigger/Properties;)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$ModuleState;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation;Landroid/media/soundtrigger/Properties;Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$ModuleState-IA;)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$ModuleStatus;-><clinit>()V
@@ -46695,8 +48344,8 @@
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session$CallbackWrapper$$ExternalSyntheticLambda1;->run()V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session$CallbackWrapper;->$r8$lambda$4WVBuI8zed_-zfi1lo5nihyJtVA(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session$CallbackWrapper;I)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session$CallbackWrapper;->$r8$lambda$8iNCLGyGl9YNglT_1NscsieKa2k(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session$CallbackWrapper;I)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session$CallbackWrapper;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session;Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session$CallbackWrapper;->detached()V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session$CallbackWrapper;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session;Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session$CallbackWrapper;->detached()V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session$CallbackWrapper;->lambda$onPhraseRecognition$1(I)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session$CallbackWrapper;->lambda$onRecognition$0(I)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session$CallbackWrapper;->onModuleDied()V
@@ -46706,15 +48355,15 @@
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session;->-$$Nest$fgetmLoadedModels(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session;)Ljava/util/Map;
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session;->-$$Nest$fputmState(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session;Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$ModuleStatus;)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session;->-$$Nest$mrestartIfIntercepted(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session;I)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation;ILandroid/media/soundtrigger_middleware/ISoundTriggerCallback;)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session;->attach(Landroid/media/soundtrigger_middleware/ISoundTriggerModule;)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session;->detach()V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session;->detachInternal()V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation;ILandroid/media/soundtrigger_middleware/ISoundTriggerCallback;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session;->attach(Landroid/media/soundtrigger_middleware/ISoundTriggerModule;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session;->detach()V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session;->detachInternal()V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session;->dump(Ljava/io/PrintWriter;)V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session;->forceRecognitionEvent(I)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session;->getCallbackWrapper()Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session;->loadModel(Landroid/media/soundtrigger/SoundModel;)I
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session;->loadPhraseModel(Landroid/media/soundtrigger/PhraseSoundModel;)I
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session;->loadPhraseModel(Landroid/media/soundtrigger/PhraseSoundModel;)I
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session;->restartIfIntercepted(I)V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session;->startRecognition(ILandroid/media/soundtrigger/RecognitionConfig;)V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session;->stopRecognition(I)V
@@ -46722,9 +48371,9 @@
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation$Session;->unloadModel(I)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation;->-$$Nest$fgetmModules(Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation;)Ljava/util/Map;
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation;-><init>(Lcom/android/server/soundtrigger_middleware/ISoundTriggerMiddlewareInternal;)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation;->attach(ILandroid/media/soundtrigger_middleware/ISoundTriggerCallback;)Landroid/media/soundtrigger_middleware/ISoundTriggerModule;
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation;->attach(ILandroid/media/soundtrigger_middleware/ISoundTriggerCallback;)Landroid/media/soundtrigger_middleware/ISoundTriggerModule;
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation;->dump(Ljava/io/PrintWriter;)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation;->handleException(Ljava/lang/Exception;)Ljava/lang/RuntimeException;
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation;->handleException(Ljava/lang/Exception;)Ljava/lang/RuntimeException;
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation;->listModules()[Landroid/media/soundtrigger_middleware/SoundTriggerModuleDescriptor;
 PLcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareValidation;->toString()Ljava/lang/String;
 PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$ModelState;-><clinit>()V
@@ -46735,11 +48384,11 @@
 PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->-$$Nest$mstartRecognition(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;Landroid/media/soundtrigger/RecognitionConfig;)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->-$$Nest$mstopRecognition(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->-$$Nest$munload(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;)I
-PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model-IA;)V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->forceRecognitionEvent()V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->getState()Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$ModelState;
-PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->load(Landroid/media/soundtrigger/PhraseSoundModel;Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl$AudioSessionProvider$AudioSession;)I
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->load(Landroid/media/soundtrigger/PhraseSoundModel;Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl$AudioSessionProvider$AudioSession;)I
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->load(Landroid/media/soundtrigger/SoundModel;Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl$AudioSessionProvider$AudioSession;)I
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->phraseRecognitionCallback(ILandroid/media/soundtrigger/PhraseRecognitionEvent;)V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session$Model;->recognitionCallback(ILandroid/media/soundtrigger/RecognitionEvent;)V
@@ -46750,13 +48399,13 @@
 PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->-$$Nest$fgetmCallback(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;)Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;
 PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->-$$Nest$fgetmLoadedModels(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;)Ljava/util/Map;
 PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->-$$Nest$mmoduleDied(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;)Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;
-PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule;Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;)V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule;Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;)V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;-><init>(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule;Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session-IA;)V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->checkValid()V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->detach()V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->forceRecognitionEvent(I)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->loadModel(Landroid/media/soundtrigger/SoundModel;)I
-PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->loadPhraseModel(Landroid/media/soundtrigger/PhraseSoundModel;)I
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->loadModel(Landroid/media/soundtrigger/SoundModel;)I
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->loadPhraseModel(Landroid/media/soundtrigger/PhraseSoundModel;)I
 PLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->moduleDied()Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->startRecognition(ILandroid/media/soundtrigger/RecognitionConfig;)V
 HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;->stopRecognition(I)V
@@ -46766,9 +48415,9 @@
 PLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->-$$Nest$mremoveSession(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule;Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;)V
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerModule;-><clinit>()V
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerModule;-><init>(Lcom/android/server/soundtrigger_middleware/HalFactory;Lcom/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImpl$AudioSessionProvider;)V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->attach(Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;)Landroid/media/soundtrigger_middleware/ISoundTriggerModule;
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->attach(Landroid/media/soundtrigger_middleware/ISoundTriggerCallback;)Landroid/media/soundtrigger_middleware/ISoundTriggerModule;
 HSPLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->attachToHal()V
-PLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->binderDied()V
+HPLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->binderDied()V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->getProperties()Landroid/media/soundtrigger/Properties;
 PLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->onResourcesAvailable()V
 PLcom/android/server/soundtrigger_middleware/SoundTriggerModule;->removeSession(Lcom/android/server/soundtrigger_middleware/SoundTriggerModule$Session;)V
@@ -46784,12 +48433,16 @@
 HSPLcom/android/server/soundtrigger_middleware/UptimeTimer;->threadFunc()V
 PLcom/android/server/soundtrigger_middleware/UuidUtil;-><clinit>()V
 PLcom/android/server/soundtrigger_middleware/ValidationUtil;->validateGenericModel(Landroid/media/soundtrigger/SoundModel;)V
-PLcom/android/server/soundtrigger_middleware/ValidationUtil;->validateModel(Landroid/media/soundtrigger/SoundModel;I)V
-PLcom/android/server/soundtrigger_middleware/ValidationUtil;->validatePhraseModel(Landroid/media/soundtrigger/PhraseSoundModel;)V
+HPLcom/android/server/soundtrigger_middleware/ValidationUtil;->validateModel(Landroid/media/soundtrigger/SoundModel;I)V
+HPLcom/android/server/soundtrigger_middleware/ValidationUtil;->validatePhraseModel(Landroid/media/soundtrigger/PhraseSoundModel;)V
 HPLcom/android/server/soundtrigger_middleware/ValidationUtil;->validateRecognitionConfig(Landroid/media/soundtrigger/RecognitionConfig;)V
-PLcom/android/server/soundtrigger_middleware/ValidationUtil;->validateUuid(Ljava/lang/String;)V
+HPLcom/android/server/soundtrigger_middleware/ValidationUtil;->validateUuid(Ljava/lang/String;)V
 PLcom/android/server/speech/RemoteSpeechRecognitionService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/speech/RemoteSpeechRecognitionService$DelegatingListener;)V
 PLcom/android/server/speech/RemoteSpeechRecognitionService$$ExternalSyntheticLambda0;->runNoResult(Ljava/lang/Object;)V
+PLcom/android/server/speech/RemoteSpeechRecognitionService$$ExternalSyntheticLambda1;-><init>(Landroid/content/Intent;)V
+PLcom/android/server/speech/RemoteSpeechRecognitionService$$ExternalSyntheticLambda1;->runNoResult(Ljava/lang/Object;)V
+HPLcom/android/server/speech/RemoteSpeechRecognitionService$$ExternalSyntheticLambda2;-><init>(Landroid/content/Intent;Landroid/speech/IRecognitionSupportCallback;)V
+PLcom/android/server/speech/RemoteSpeechRecognitionService$$ExternalSyntheticLambda2;->runNoResult(Ljava/lang/Object;)V
 PLcom/android/server/speech/RemoteSpeechRecognitionService$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/speech/RemoteSpeechRecognitionService;)V
 PLcom/android/server/speech/RemoteSpeechRecognitionService$$ExternalSyntheticLambda3;->run()V
 PLcom/android/server/speech/RemoteSpeechRecognitionService$$ExternalSyntheticLambda4;-><init>(Landroid/content/Intent;Lcom/android/server/speech/RemoteSpeechRecognitionService$DelegatingListener;Landroid/content/AttributionSource;)V
@@ -46811,29 +48464,35 @@
 HPLcom/android/server/speech/RemoteSpeechRecognitionService$DelegatingListener;->onRmsChanged(F)V+]Landroid/speech/IRecognitionListener;Landroid/speech/IRecognitionListener$Stub$Proxy;
 PLcom/android/server/speech/RemoteSpeechRecognitionService$DelegatingListener;->onSegmentResults(Landroid/os/Bundle;)V
 PLcom/android/server/speech/RemoteSpeechRecognitionService;->$r8$lambda$0nzhPX_uA-_UFkVFgFUMgPMK3uA(Landroid/content/Intent;Lcom/android/server/speech/RemoteSpeechRecognitionService$DelegatingListener;Landroid/content/AttributionSource;Landroid/speech/IRecognitionService;)V
+PLcom/android/server/speech/RemoteSpeechRecognitionService;->$r8$lambda$AxxEYUaC5NuEQ22e9YBtWnTaJI4(Landroid/content/Intent;Landroid/speech/IRecognitionService;)V
 PLcom/android/server/speech/RemoteSpeechRecognitionService;->$r8$lambda$C8zmeWkM52Cgyuba1m7fqDDnmQI(Lcom/android/server/speech/RemoteSpeechRecognitionService;Landroid/speech/IRecognitionService;)V
 PLcom/android/server/speech/RemoteSpeechRecognitionService;->$r8$lambda$I3s64UJSh0ls7qeuWqUJ2UXN0q8(Lcom/android/server/speech/RemoteSpeechRecognitionService;)V
 PLcom/android/server/speech/RemoteSpeechRecognitionService;->$r8$lambda$IPjx8Iq-V2jlODygJkXmGYMIlLA(Landroid/speech/IRecognitionListener;ZLandroid/speech/IRecognitionService;)V
 PLcom/android/server/speech/RemoteSpeechRecognitionService;->$r8$lambda$IQL4JUzTcWi3xqgkfcEtVz4KlSE(Lcom/android/server/speech/RemoteSpeechRecognitionService$DelegatingListener;Landroid/speech/IRecognitionService;)V
+PLcom/android/server/speech/RemoteSpeechRecognitionService;->$r8$lambda$iH9uQ_cp0hmqsfCHojSHXSY_jt4(Landroid/content/Intent;Landroid/speech/IRecognitionSupportCallback;Landroid/speech/IRecognitionService;)V
 PLcom/android/server/speech/RemoteSpeechRecognitionService;-><clinit>()V
 PLcom/android/server/speech/RemoteSpeechRecognitionService;-><init>(Landroid/content/Context;Landroid/content/ComponentName;II)V
 HPLcom/android/server/speech/RemoteSpeechRecognitionService;->cancel(Landroid/speech/IRecognitionListener;Z)V
+HPLcom/android/server/speech/RemoteSpeechRecognitionService;->checkRecognitionSupport(Landroid/content/Intent;Landroid/speech/IRecognitionSupportCallback;)V
 PLcom/android/server/speech/RemoteSpeechRecognitionService;->getAutoDisconnectTimeoutMs()J
 PLcom/android/server/speech/RemoteSpeechRecognitionService;->getServiceComponentName()Landroid/content/ComponentName;
 PLcom/android/server/speech/RemoteSpeechRecognitionService;->lambda$cancel$3(Landroid/speech/IRecognitionListener;ZLandroid/speech/IRecognitionService;)V
 PLcom/android/server/speech/RemoteSpeechRecognitionService;->lambda$cancel$4(Landroid/speech/IRecognitionService;)V
+PLcom/android/server/speech/RemoteSpeechRecognitionService;->lambda$checkRecognitionSupport$5(Landroid/content/Intent;Landroid/speech/IRecognitionSupportCallback;Landroid/speech/IRecognitionService;)V
 PLcom/android/server/speech/RemoteSpeechRecognitionService;->lambda$startListening$0()V
 PLcom/android/server/speech/RemoteSpeechRecognitionService;->lambda$startListening$1(Landroid/content/Intent;Lcom/android/server/speech/RemoteSpeechRecognitionService$DelegatingListener;Landroid/content/AttributionSource;Landroid/speech/IRecognitionService;)V
 PLcom/android/server/speech/RemoteSpeechRecognitionService;->lambda$stopListening$2(Lcom/android/server/speech/RemoteSpeechRecognitionService$DelegatingListener;Landroid/speech/IRecognitionService;)V
+PLcom/android/server/speech/RemoteSpeechRecognitionService;->lambda$triggerModelDownload$6(Landroid/content/Intent;Landroid/speech/IRecognitionService;)V
 PLcom/android/server/speech/RemoteSpeechRecognitionService;->onServiceConnectionStatusChanged(Landroid/os/IInterface;Z)V
 PLcom/android/server/speech/RemoteSpeechRecognitionService;->onServiceConnectionStatusChanged(Landroid/speech/IRecognitionService;Z)V
 PLcom/android/server/speech/RemoteSpeechRecognitionService;->resetStateLocked()V
 PLcom/android/server/speech/RemoteSpeechRecognitionService;->shutdown()V
 HPLcom/android/server/speech/RemoteSpeechRecognitionService;->startListening(Landroid/content/Intent;Landroid/speech/IRecognitionListener;Landroid/content/AttributionSource;)V
 PLcom/android/server/speech/RemoteSpeechRecognitionService;->stopListening(Landroid/speech/IRecognitionListener;)V
+PLcom/android/server/speech/RemoteSpeechRecognitionService;->triggerModelDownload(Landroid/content/Intent;)V
 PLcom/android/server/speech/RemoteSpeechRecognitionService;->tryRespondWithError(Landroid/speech/IRecognitionListener;I)V
 HSPLcom/android/server/speech/SpeechRecognitionManagerService$SpeechRecognitionManagerServiceStub;-><init>(Lcom/android/server/speech/SpeechRecognitionManagerService;)V
-PLcom/android/server/speech/SpeechRecognitionManagerService$SpeechRecognitionManagerServiceStub;->createSession(Landroid/content/ComponentName;Landroid/os/IBinder;ZLandroid/speech/IRecognitionServiceManagerCallback;)V
+HPLcom/android/server/speech/SpeechRecognitionManagerService$SpeechRecognitionManagerServiceStub;->createSession(Landroid/content/ComponentName;Landroid/os/IBinder;ZLandroid/speech/IRecognitionServiceManagerCallback;)V
 HSPLcom/android/server/speech/SpeechRecognitionManagerService;-><clinit>()V
 HSPLcom/android/server/speech/SpeechRecognitionManagerService;-><init>(Landroid/content/Context;)V
 PLcom/android/server/speech/SpeechRecognitionManagerService;->access$000(Lcom/android/server/speech/SpeechRecognitionManagerService;)Ljava/lang/Object;
@@ -46851,8 +48510,10 @@
 PLcom/android/server/speech/SpeechRecognitionManagerServiceImpl$$ExternalSyntheticLambda3;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/speech/SpeechRecognitionManagerServiceImpl$1;-><init>(Lcom/android/server/speech/SpeechRecognitionManagerServiceImpl;Lcom/android/server/speech/RemoteSpeechRecognitionService;ILandroid/os/IBinder;Landroid/os/IBinder$DeathRecipient;)V
 PLcom/android/server/speech/SpeechRecognitionManagerServiceImpl$1;->cancel(Landroid/speech/IRecognitionListener;Z)V
+PLcom/android/server/speech/SpeechRecognitionManagerServiceImpl$1;->checkRecognitionSupport(Landroid/content/Intent;Landroid/speech/IRecognitionSupportCallback;)V
 HPLcom/android/server/speech/SpeechRecognitionManagerServiceImpl$1;->startListening(Landroid/content/Intent;Landroid/speech/IRecognitionListener;Landroid/content/AttributionSource;)V
 PLcom/android/server/speech/SpeechRecognitionManagerServiceImpl$1;->stopListening(Landroid/speech/IRecognitionListener;)V
+PLcom/android/server/speech/SpeechRecognitionManagerServiceImpl$1;->triggerModelDownload(Landroid/content/Intent;)V
 PLcom/android/server/speech/SpeechRecognitionManagerServiceImpl;->$r8$lambda$DY5UaZmRJM_NnlSHa6qfXyIhXSU(Lcom/android/server/speech/SpeechRecognitionManagerServiceImpl;Landroid/speech/IRecognitionServiceManagerCallback;Lcom/android/server/speech/RemoteSpeechRecognitionService;ILandroid/os/IBinder;Landroid/os/IBinder$DeathRecipient;Landroid/speech/IRecognitionService;)V
 PLcom/android/server/speech/SpeechRecognitionManagerServiceImpl;->$r8$lambda$R2ZvchizfzVJTIMHYIvnLeo95ys(Landroid/content/ComponentName;Lcom/android/server/speech/RemoteSpeechRecognitionService;)Z
 PLcom/android/server/speech/SpeechRecognitionManagerServiceImpl;->$r8$lambda$TJpo48M5TbxxVXHKxHluiiiTMXs(Ljava/lang/Integer;)Ljava/util/Set;
@@ -46862,10 +48523,10 @@
 PLcom/android/server/speech/SpeechRecognitionManagerServiceImpl;-><init>(Lcom/android/server/speech/SpeechRecognitionManagerService;Ljava/lang/Object;I)V
 PLcom/android/server/speech/SpeechRecognitionManagerServiceImpl;->access$000(Lcom/android/server/speech/SpeechRecognitionManagerServiceImpl;)Lcom/android/server/infra/AbstractMasterSystemService;
 PLcom/android/server/speech/SpeechRecognitionManagerServiceImpl;->access$100(Lcom/android/server/speech/SpeechRecognitionManagerServiceImpl;)Lcom/android/server/infra/AbstractMasterSystemService;
-PLcom/android/server/speech/SpeechRecognitionManagerServiceImpl;->componentMapsToRecognitionService(Landroid/content/ComponentName;)Z
+HPLcom/android/server/speech/SpeechRecognitionManagerServiceImpl;->componentMapsToRecognitionService(Landroid/content/ComponentName;)Z
 HPLcom/android/server/speech/SpeechRecognitionManagerServiceImpl;->createService(ILandroid/content/ComponentName;)Lcom/android/server/speech/RemoteSpeechRecognitionService;
 HPLcom/android/server/speech/SpeechRecognitionManagerServiceImpl;->createSessionLocked(Landroid/content/ComponentName;Landroid/os/IBinder;ZLandroid/speech/IRecognitionServiceManagerCallback;)V
-PLcom/android/server/speech/SpeechRecognitionManagerServiceImpl;->getOnDeviceComponentNameLocked()Landroid/content/ComponentName;
+HPLcom/android/server/speech/SpeechRecognitionManagerServiceImpl;->getOnDeviceComponentNameLocked()Landroid/content/ComponentName;
 PLcom/android/server/speech/SpeechRecognitionManagerServiceImpl;->handleClientDeath(ILcom/android/server/speech/RemoteSpeechRecognitionService;Z)V
 PLcom/android/server/speech/SpeechRecognitionManagerServiceImpl;->lambda$createService$2(Landroid/content/ComponentName;Lcom/android/server/speech/RemoteSpeechRecognitionService;)Z
 PLcom/android/server/speech/SpeechRecognitionManagerServiceImpl;->lambda$createService$3(Ljava/lang/Integer;)Ljava/util/Set;
@@ -46873,6 +48534,7 @@
 PLcom/android/server/speech/SpeechRecognitionManagerServiceImpl;->lambda$createSessionLocked$1(Landroid/speech/IRecognitionServiceManagerCallback;Lcom/android/server/speech/RemoteSpeechRecognitionService;ILandroid/os/IBinder;Landroid/os/IBinder$DeathRecipient;Landroid/speech/IRecognitionService;)V
 PLcom/android/server/speech/SpeechRecognitionManagerServiceImpl;->newServiceInfoLocked(Landroid/content/ComponentName;)Landroid/content/pm/ServiceInfo;
 PLcom/android/server/speech/SpeechRecognitionManagerServiceImpl;->removeService(ILcom/android/server/speech/RemoteSpeechRecognitionService;)V
+PLcom/android/server/speech/SpeechRecognitionManagerServiceImpl;->tryRespondWithError(Landroid/speech/IRecognitionServiceManagerCallback;I)V
 PLcom/android/server/speech/SpeechRecognitionManagerServiceImpl;->updateLocked(Z)Z
 HSPLcom/android/server/stats/bootstrap/StatsBootstrapAtomService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/stats/bootstrap/StatsBootstrapAtomService$Lifecycle;->onStart()V
@@ -46883,28 +48545,28 @@
 HPLcom/android/server/stats/pull/ProcfsMemoryUtil;->getProcessCmdlines()Landroid/util/SparseArray;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/stats/pull/ProcfsMemoryUtil;->readCmdlineFromProcfs(I)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HPLcom/android/server/stats/pull/ProcfsMemoryUtil;->readMemorySnapshotFromProcfs(I)Lcom/android/server/stats/pull/ProcfsMemoryUtil$MemorySnapshot;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
-PLcom/android/server/stats/pull/ProcfsMemoryUtil;->readVmStat()Lcom/android/server/stats/pull/ProcfsMemoryUtil$VmStat;
+HPLcom/android/server/stats/pull/ProcfsMemoryUtil;->readVmStat()Lcom/android/server/stats/pull/ProcfsMemoryUtil$VmStat;
 PLcom/android/server/stats/pull/SettingsStatsUtil$FlagsData;-><init>(Ljava/lang/String;I)V
 PLcom/android/server/stats/pull/SettingsStatsUtil;-><clinit>()V
 HPLcom/android/server/stats/pull/SettingsStatsUtil;->createStatsEvent(ILjava/lang/String;Ljava/lang/String;II)Landroid/util/StatsEvent;
 PLcom/android/server/stats/pull/SettingsStatsUtil;->getList(Ljava/lang/String;)Lcom/android/service/nano/StringListParamProto;
 PLcom/android/server/stats/pull/SettingsStatsUtil;->logGlobalSettings(Landroid/content/Context;II)Ljava/util/List;
-PLcom/android/server/stats/pull/SettingsStatsUtil;->logSecureSettings(Landroid/content/Context;II)Ljava/util/List;
+HPLcom/android/server/stats/pull/SettingsStatsUtil;->logSecureSettings(Landroid/content/Context;II)Ljava/util/List;
 PLcom/android/server/stats/pull/SettingsStatsUtil;->logSystemSettings(Landroid/content/Context;II)Ljava/util/List;
 HSPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
 HSPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda11;-><init>(Landroid/util/SparseArray;I[I[J[D)V
 HPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda11;->onUidCpuTime(ILjava/lang/Object;)V
-PLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda12;-><init>()V
-PLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda12;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda12;-><init>()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda12;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda13;-><init>(Ljava/util/List;I)V
 HPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda13;->onUidCpuTime(ILjava/lang/Object;)V
 PLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda14;-><init>(Landroid/util/SparseArray;)V
 HPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda14;->accept(Ljava/lang/Object;)V
-PLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda15;-><init>()V
-HPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda15;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda17;-><init>(Landroid/os/SynchronousResultReceiver;)V
-PLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda17;->onWifiActivityEnergyInfo(Landroid/os/connectivity/WifiActivityEnergyInfo;)V
+HSPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda15;-><init>()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda15;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda17;-><init>(Landroid/os/SynchronousResultReceiver;)V
+HPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda17;->onWifiActivityEnergyInfo(Landroid/os/connectivity/WifiActivityEnergyInfo;)V
 PLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda18;-><init>()V
 PLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda18;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda19;-><init>(I)V
@@ -46919,23 +48581,23 @@
 HSPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
 HPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/stats/pull/netstats/NetworkStatsExt;)V
 HPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda4;->test(Ljava/lang/Object;)Z
-PLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda5;-><init>(Ljava/util/List;I)V
+HPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda5;-><init>(Ljava/util/List;I)V
 HPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda5;->onUidStorageStats(IJJJJJJJJJJ)V
-PLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda6;-><init>()V
-HPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda6;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda6;-><init>()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda6;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda7;-><init>(Ljava/util/concurrent/CompletableFuture;)V
 PLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda7;->accept(Ljava/lang/Object;)V
 PLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda8;-><init>(Landroid/util/SparseArray;)V
 HPLcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda8;->accept(Ljava/lang/Object;)V
-PLcom/android/server/stats/pull/StatsPullAtomService$1;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;Landroid/os/SynchronousResultReceiver;)V
+HPLcom/android/server/stats/pull/StatsPullAtomService$1;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;Landroid/os/SynchronousResultReceiver;)V
 HPLcom/android/server/stats/pull/StatsPullAtomService$1;->onBluetoothActivityEnergyInfoAvailable(Landroid/bluetooth/BluetoothActivityEnergyInfo;)V
 PLcom/android/server/stats/pull/StatsPullAtomService$1;->onBluetoothActivityEnergyInfoError(I)V
-PLcom/android/server/stats/pull/StatsPullAtomService$2;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
+HPLcom/android/server/stats/pull/StatsPullAtomService$2;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
 PLcom/android/server/stats/pull/StatsPullAtomService$2;->execute(Ljava/lang/Runnable;)V
-PLcom/android/server/stats/pull/StatsPullAtomService$3;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;Ljava/util/concurrent/CompletableFuture;)V
+HPLcom/android/server/stats/pull/StatsPullAtomService$3;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;Ljava/util/concurrent/CompletableFuture;)V
 PLcom/android/server/stats/pull/StatsPullAtomService$3;->onError(Landroid/telephony/TelephonyManager$ModemActivityInfoException;)V
 PLcom/android/server/stats/pull/StatsPullAtomService$3;->onError(Ljava/lang/Throwable;)V
-PLcom/android/server/stats/pull/StatsPullAtomService$3;->onResult(Landroid/telephony/ModemActivityInfo;)V
+HPLcom/android/server/stats/pull/StatsPullAtomService$3;->onResult(Landroid/telephony/ModemActivityInfo;)V
 PLcom/android/server/stats/pull/StatsPullAtomService$3;->onResult(Ljava/lang/Object;)V
 PLcom/android/server/stats/pull/StatsPullAtomService$4;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
 PLcom/android/server/stats/pull/StatsPullAtomService$4;->run()V
@@ -46946,45 +48608,45 @@
 PLcom/android/server/stats/pull/StatsPullAtomService$ConnectivityStatsCallback;->onLost(Landroid/net/Network;)V
 HSPLcom/android/server/stats/pull/StatsPullAtomService$StatsPullAtomCallbackImpl;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;)V
 HSPLcom/android/server/stats/pull/StatsPullAtomService$StatsPullAtomCallbackImpl;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;Lcom/android/server/stats/pull/StatsPullAtomService$StatsPullAtomCallbackImpl-IA;)V
-HPLcom/android/server/stats/pull/StatsPullAtomService$StatsPullAtomCallbackImpl;->onPullAtom(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService$StatsPullAtomCallbackImpl;->onPullAtom(ILjava/util/List;)I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/stats/pull/StatsPullAtomService;Lcom/android/server/stats/pull/StatsPullAtomService;
 PLcom/android/server/stats/pull/StatsPullAtomService$StatsSubscriptionsListener$$ExternalSyntheticLambda0;-><init>(Landroid/telephony/SubscriptionInfo;)V
 HPLcom/android/server/stats/pull/StatsPullAtomService$StatsSubscriptionsListener$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
 PLcom/android/server/stats/pull/StatsPullAtomService$StatsSubscriptionsListener;->$r8$lambda$H7SmJSkIfanGlnLbgU8c670mrIk(Landroid/telephony/SubscriptionInfo;Lcom/android/server/stats/pull/netstats/SubInfo;)Z
 HSPLcom/android/server/stats/pull/StatsPullAtomService$StatsSubscriptionsListener;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService;Landroid/telephony/SubscriptionManager;)V
-PLcom/android/server/stats/pull/StatsPullAtomService$StatsSubscriptionsListener;->lambda$onSubscriptionsChanged$0(Landroid/telephony/SubscriptionInfo;Lcom/android/server/stats/pull/netstats/SubInfo;)Z
-HPLcom/android/server/stats/pull/StatsPullAtomService$StatsSubscriptionsListener;->onSubscriptionsChanged()V
+HPLcom/android/server/stats/pull/StatsPullAtomService$StatsSubscriptionsListener;->lambda$onSubscriptionsChanged$0(Landroid/telephony/SubscriptionInfo;Lcom/android/server/stats/pull/netstats/SubInfo;)Z
+HSPLcom/android/server/stats/pull/StatsPullAtomService$StatsSubscriptionsListener;->onSubscriptionsChanged()V
 HSPLcom/android/server/stats/pull/StatsPullAtomService$ThermalEventListener;-><init>()V
 HSPLcom/android/server/stats/pull/StatsPullAtomService$ThermalEventListener;-><init>(Lcom/android/server/stats/pull/StatsPullAtomService$ThermalEventListener-IA;)V
 HSPLcom/android/server/stats/pull/StatsPullAtomService$ThermalEventListener;->notifyThrottling(Landroid/os/Temperature;)V
 HPLcom/android/server/stats/pull/StatsPullAtomService;->$r8$lambda$-dMA_wHIJeRrUambllf9cllVsmo(Landroid/util/SparseArray;I[I[J[DI[J)V
-PLcom/android/server/stats/pull/StatsPullAtomService;->$r8$lambda$4airjevV6I-rY3ZVOClhggzvBi0(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats$Entry;
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->$r8$lambda$4airjevV6I-rY3ZVOClhggzvBi0(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats$Entry;
 PLcom/android/server/stats/pull/StatsPullAtomService;->$r8$lambda$8a90S49FGj2NCSdhCtdE341rqpw(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats$Entry;
 HPLcom/android/server/stats/pull/StatsPullAtomService;->$r8$lambda$BAYJnEfnORxrRs5oNkGdyiczTNE(Landroid/util/SparseArray;Landroid/app/ProcessMemoryState;)V
-HPLcom/android/server/stats/pull/StatsPullAtomService;->$r8$lambda$Ri4RS7Y325oMnN_XvuHcgqX08XU(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats$Entry;
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->$r8$lambda$Ri4RS7Y325oMnN_XvuHcgqX08XU(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats$Entry;
 HPLcom/android/server/stats/pull/StatsPullAtomService;->$r8$lambda$fiMc7IS9Em_RLm7xoMmDab3c5BU(Ljava/util/List;II[J)V
-PLcom/android/server/stats/pull/StatsPullAtomService;->$r8$lambda$gAmwYOe_-aER7bHg8mTx3QyeDGk(Landroid/util/SparseArray;Landroid/app/ProcessMemoryState;)V
-PLcom/android/server/stats/pull/StatsPullAtomService;->$r8$lambda$k66nC0GgsFSmSC1Ioqfar2w3jiQ(Lcom/android/server/stats/pull/netstats/NetworkStatsExt;Lcom/android/server/stats/pull/netstats/NetworkStatsExt;)Z
+HPLcom/android/server/stats/pull/StatsPullAtomService;->$r8$lambda$gAmwYOe_-aER7bHg8mTx3QyeDGk(Landroid/util/SparseArray;Landroid/app/ProcessMemoryState;)V
+HPLcom/android/server/stats/pull/StatsPullAtomService;->$r8$lambda$k66nC0GgsFSmSC1Ioqfar2w3jiQ(Lcom/android/server/stats/pull/netstats/NetworkStatsExt;Lcom/android/server/stats/pull/netstats/NetworkStatsExt;)Z
 PLcom/android/server/stats/pull/StatsPullAtomService;->$r8$lambda$lR5Ax5WEodQyxPTfiiBAJdF1jus(Landroid/os/SynchronousResultReceiver;Landroid/os/connectivity/WifiActivityEnergyInfo;)V
 HPLcom/android/server/stats/pull/StatsPullAtomService;->$r8$lambda$lcFYrrxgR7DrOgZ9GepvdOVakt8(Ljava/util/List;IIJJJJJJJJJJ)V
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->$r8$lambda$qr8Jv2m-UgkecfPqtfyd3eS_194(Lcom/android/server/stats/pull/StatsPullAtomService;)V
 PLcom/android/server/stats/pull/StatsPullAtomService;->$r8$lambda$vvj7FoyrHfZbE54jRu38aDlwLrM(ILjava/io/File;Ljava/lang/String;)Z
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->$r8$lambda$yIijC9wxGI486UfCqVjt5rR46-0(Lcom/android/server/stats/pull/StatsPullAtomService;)V
 PLcom/android/server/stats/pull/StatsPullAtomService;->$r8$lambda$yoS8A9QQejGxc4XFM828SHdVJ50(I)Z
-PLcom/android/server/stats/pull/StatsPullAtomService;->$r8$lambda$z9yaxBWEE8mEWXAuzNe1O0ZYp_U(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats$Entry;
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->$r8$lambda$z9yaxBWEE8mEWXAuzNe1O0ZYp_U(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats$Entry;
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmAppOpsSamplingRate(Lcom/android/server/stats/pull/StatsPullAtomService;)I
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmAttributedAppOpsLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmBinderCallsStatsLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmBluetoothActivityInfoLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmBluetoothBytesTransferLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmCategorySizeLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
-PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmCooldownDeviceLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
+HPLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmCooldownDeviceLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmCpuTimePerClusterFreqLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmCpuTimePerUidFreqLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
 HPLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmCpuTimePerUidLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmDangerousPermissionStateLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
-PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmDataBytesTransferLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
+HPLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmDataBytesTransferLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmDebugElapsedClockLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
-PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmDebugFailingElapsedClockLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
+HPLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmDebugFailingElapsedClockLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmDirectoryUsageLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmDiskIoLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmDiskStatsLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
@@ -46992,13 +48654,13 @@
 HPLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmHealthHalLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmHistoricalSubs(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/util/ArrayList;
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmInstalledIncrementalPackagesLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
-PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmKernelWakelockLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
+HPLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmKernelWakelockLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmLooperStatsLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmModemActivityInfoLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmNetworkStatsBaselines(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/util/ArrayList;
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmNumBiometricsEnrolledLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmProcStatsLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
-PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmProcessCpuTimeLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
+HPLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmProcessCpuTimeLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmProcessMemoryHighWaterMarkLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmRuntimeAppOpAccessMessageLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fgetmSettingsStatsLock(Lcom/android/server/stats/pull/StatsPullAtomService;)Ljava/lang/Object;
@@ -47011,14 +48673,14 @@
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$fputmAppOpsSamplingRate(Lcom/android/server/stats/pull/StatsPullAtomService;I)V
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$mestimateAppOpsSamplingRate(Lcom/android/server/stats/pull/StatsPullAtomService;)V
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$mgetDataUsageBytesTransferSnapshotForSub(Lcom/android/server/stats/pull/StatsPullAtomService;Lcom/android/server/stats/pull/netstats/SubInfo;)Ljava/util/List;
-PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$mpullDataBytesTransferLocked(Lcom/android/server/stats/pull/StatsPullAtomService;ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$mpullDataBytesTransferLocked(Lcom/android/server/stats/pull/StatsPullAtomService;ILjava/util/List;)I
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$mpullNumBiometricsEnrolledLocked(Lcom/android/server/stats/pull/StatsPullAtomService;IILjava/util/List;)I
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$mpullPendingIntentsPerPackage(Lcom/android/server/stats/pull/StatsPullAtomService;ILjava/util/List;)I
 PLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$mpullProcStatsLocked(Lcom/android/server/stats/pull/StatsPullAtomService;IILjava/util/List;)I
 HPLcom/android/server/stats/pull/StatsPullAtomService;->-$$Nest$sfgetRANDOM_SEED()I
 HSPLcom/android/server/stats/pull/StatsPullAtomService;-><clinit>()V
 HSPLcom/android/server/stats/pull/StatsPullAtomService;-><init>(Landroid/content/Context;)V
-HPLcom/android/server/stats/pull/StatsPullAtomService;->addBytesTransferByTagAndMeteredAtoms(Lcom/android/server/stats/pull/netstats/NetworkStatsExt;Ljava/util/List;)V
+HPLcom/android/server/stats/pull/StatsPullAtomService;->addBytesTransferByTagAndMeteredAtoms(Lcom/android/server/stats/pull/netstats/NetworkStatsExt;Ljava/util/List;)V+]Landroid/net/NetworkStats$Entry;Landroid/net/NetworkStats$Entry;]Landroid/net/NetworkStats;Landroid/net/NetworkStats;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Landroid/net/NetworkStats$1;
 HPLcom/android/server/stats/pull/StatsPullAtomService;->addCpuCyclesPerThreadGroupClusterAtoms(ILjava/util/List;I[J)V+]Ljava/util/List;Ljava/util/ArrayList;
 PLcom/android/server/stats/pull/StatsPullAtomService;->addDataUsageBytesTransferAtoms(Lcom/android/server/stats/pull/netstats/NetworkStatsExt;Ljava/util/List;)V
 HPLcom/android/server/stats/pull/StatsPullAtomService;->addNetworkStats(ILjava/util/List;Lcom/android/server/stats/pull/netstats/NetworkStatsExt;)V+]Landroid/net/NetworkStats$Entry;Landroid/net/NetworkStats$Entry;]Landroid/net/NetworkStats;Landroid/net/NetworkStats;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Landroid/net/NetworkStats$1;
@@ -47031,7 +48693,7 @@
 PLcom/android/server/stats/pull/StatsPullAtomService;->estimateAppOpsSamplingRate()V
 HPLcom/android/server/stats/pull/StatsPullAtomService;->fetchBluetoothData()Landroid/bluetooth/BluetoothActivityEnergyInfo;
 PLcom/android/server/stats/pull/StatsPullAtomService;->getAllCollapsedRatTypes()[I
-PLcom/android/server/stats/pull/StatsPullAtomService;->getDataUsageBytesTransferSnapshotForOemManaged()Ljava/util/List;
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->getDataUsageBytesTransferSnapshotForOemManaged()Ljava/util/List;
 PLcom/android/server/stats/pull/StatsPullAtomService;->getDataUsageBytesTransferSnapshotForSub(Lcom/android/server/stats/pull/netstats/SubInfo;)Ljava/util/List;
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->getIKeystoreMetricsService()Landroid/security/metrics/IKeystoreMetrics;
 PLcom/android/server/stats/pull/StatsPullAtomService;->getIProcessStatsService()Lcom/android/internal/app/procstats/IProcessStats;
@@ -47048,16 +48710,16 @@
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$onBootPhase$1()V
 HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$pullCpuCyclesPerUidClusterLocked$13(Landroid/util/SparseArray;I[I[J[DI[J)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$pullCpuTimePerUidLocked$12(Ljava/util/List;II[J)V+]Ljava/util/List;Ljava/util/ArrayList;
-PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$pullDataBytesTransferLocked$7(Lcom/android/server/stats/pull/netstats/NetworkStatsExt;Lcom/android/server/stats/pull/netstats/NetworkStatsExt;)Z
+HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$pullDataBytesTransferLocked$7(Lcom/android/server/stats/pull/netstats/NetworkStatsExt;Lcom/android/server/stats/pull/netstats/NetworkStatsExt;)Z
 HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$pullDiskIOLocked$21(Ljava/util/List;IIJJJJJJJJJJ)V+]Ljava/util/List;Ljava/util/ArrayList;
 HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$pullProcessMemoryHighWaterMarkLocked$18(Landroid/util/SparseArray;Landroid/app/ProcessMemoryState;)V
 HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$pullProcessMemorySnapshot$19(Landroid/util/SparseArray;Landroid/app/ProcessMemoryState;)V
 HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$pullWifiActivityInfoLocked$17(Landroid/os/SynchronousResultReceiver;Landroid/os/connectivity/WifiActivityEnergyInfo;)V
 PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$readProcStatsHighWaterMark$20(ILjava/io/File;Ljava/lang/String;)Z
-PLcom/android/server/stats/pull/StatsPullAtomService;->lambda$sliceNetworkStatsByFgbg$9(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats$Entry;
-HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$sliceNetworkStatsByUid$8(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats$Entry;
-HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$sliceNetworkStatsByUidAndFgbg$10(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats$Entry;
-HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$sliceNetworkStatsByUidTagAndMetered$11(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats$Entry;
+HPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$sliceNetworkStatsByFgbg$9(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats$Entry;
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$sliceNetworkStatsByUid$8(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats$Entry;+]Landroid/net/NetworkStats$Entry;Landroid/net/NetworkStats$Entry;
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$sliceNetworkStatsByUidAndFgbg$10(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats$Entry;+]Landroid/net/NetworkStats$Entry;Landroid/net/NetworkStats$Entry;
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->lambda$sliceNetworkStatsByUidTagAndMetered$11(Landroid/net/NetworkStats$Entry;)Landroid/net/NetworkStats$Entry;+]Landroid/net/NetworkStats$Entry;Landroid/net/NetworkStats$Entry;
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->onBootPhase(I)V
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->onStart()V
 PLcom/android/server/stats/pull/StatsPullAtomService;->parseKeystoreAtomWithOverflow([Landroid/security/metrics/KeystoreAtom;Ljava/util/List;)I
@@ -47073,26 +48735,26 @@
 HPLcom/android/server/stats/pull/StatsPullAtomService;->processHistoricalOps(Landroid/app/AppOpsManager$HistoricalOps;II)Ljava/util/List;+]Landroid/app/AppOpsManager$HistoricalOps;Landroid/app/AppOpsManager$HistoricalOps;]Landroid/app/AppOpsManager$HistoricalUidOps;Landroid/app/AppOpsManager$HistoricalUidOps;]Lcom/android/server/stats/pull/StatsPullAtomService;Lcom/android/server/stats/pull/StatsPullAtomService;]Landroid/app/AppOpsManager$HistoricalPackageOps;Landroid/app/AppOpsManager$HistoricalPackageOps;]Landroid/app/AppOpsManager$AttributedHistoricalOps;Landroid/app/AppOpsManager$AttributedHistoricalOps;
 PLcom/android/server/stats/pull/StatsPullAtomService;->pullAccessibilityFloatingMenuStatsLocked(ILjava/util/List;)I
 PLcom/android/server/stats/pull/StatsPullAtomService;->pullAccessibilityShortcutStatsLocked(ILjava/util/List;)I
-PLcom/android/server/stats/pull/StatsPullAtomService;->pullAttributedAppOpsLocked(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullAttributedAppOpsLocked(ILjava/util/List;)I
 HPLcom/android/server/stats/pull/StatsPullAtomService;->pullBinderCallsStatsLocked(ILjava/util/List;)I
 HPLcom/android/server/stats/pull/StatsPullAtomService;->pullBluetoothActivityInfoLocked(ILjava/util/List;)I
 HPLcom/android/server/stats/pull/StatsPullAtomService;->pullBluetoothBytesTransferLocked(ILjava/util/List;)I
 PLcom/android/server/stats/pull/StatsPullAtomService;->pullCategorySizeLocked(ILjava/util/List;)I
-HPLcom/android/server/stats/pull/StatsPullAtomService;->pullCooldownDeviceLocked(ILjava/util/List;)I
-HPLcom/android/server/stats/pull/StatsPullAtomService;->pullCpuCyclesPerThreadGroupCluster(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullCooldownDeviceLocked(ILjava/util/List;)I+]Landroid/os/IThermalService;Lcom/android/server/power/ThermalManagerService$1;]Landroid/os/CoolingDevice;Landroid/os/CoolingDevice;]Lcom/android/server/stats/pull/StatsPullAtomService;Lcom/android/server/stats/pull/StatsPullAtomService;]Ljava/util/List;Ljava/util/ArrayList;
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullCpuCyclesPerThreadGroupCluster(ILjava/util/List;)I+]Lcom/android/internal/os/SelectedProcessCpuThreadReader;Lcom/android/internal/os/SelectedProcessCpuThreadReader;]Landroid/os/BatteryStatsInternal;Lcom/android/server/am/BatteryStatsService$LocalService;
 HPLcom/android/server/stats/pull/StatsPullAtomService;->pullCpuCyclesPerUidClusterLocked(ILjava/util/List;)I+]Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;Lcom/android/internal/os/KernelCpuUidTimeReader$KernelCpuUidFreqTimeReader;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/internal/os/PowerProfile;Lcom/android/internal/os/PowerProfile;
-HPLcom/android/server/stats/pull/StatsPullAtomService;->pullCpuTimePerClusterFreqLocked(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullCpuTimePerClusterFreqLocked(ILjava/util/List;)I+]Ljava/util/List;Ljava/util/ArrayList;
 HPLcom/android/server/stats/pull/StatsPullAtomService;->pullCpuTimePerUidLocked(ILjava/util/List;)I
-HPLcom/android/server/stats/pull/StatsPullAtomService;->pullDangerousPermissionStateLocked(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullDangerousPermissionStateLocked(ILjava/util/List;)I+]Landroid/content/pm/PermissionInfo;Landroid/content/pm/PermissionInfo;]Ljava/lang/String;Ljava/lang/String;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Landroid/os/UserManager;Landroid/os/UserManager;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Ljava/util/Set;Ljava/util/HashSet;
 HPLcom/android/server/stats/pull/StatsPullAtomService;->pullDataBytesTransferLocked(ILjava/util/List;)I
 HPLcom/android/server/stats/pull/StatsPullAtomService;->pullDebugElapsedClockLocked(ILjava/util/List;)I
 HPLcom/android/server/stats/pull/StatsPullAtomService;->pullDebugFailingElapsedClockLocked(ILjava/util/List;)I
 PLcom/android/server/stats/pull/StatsPullAtomService;->pullDirectoryUsageLocked(ILjava/util/List;)I
-PLcom/android/server/stats/pull/StatsPullAtomService;->pullDiskIOLocked(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullDiskIOLocked(ILjava/util/List;)I
 PLcom/android/server/stats/pull/StatsPullAtomService;->pullDiskStatsLocked(ILjava/util/List;)I
 PLcom/android/server/stats/pull/StatsPullAtomService;->pullFaceSettingsLocked(ILjava/util/List;)I
 HPLcom/android/server/stats/pull/StatsPullAtomService;->pullHealthHalLocked(ILjava/util/List;)I
-HPLcom/android/server/stats/pull/StatsPullAtomService;->pullInstalledIncrementalPackagesLocked(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullInstalledIncrementalPackagesLocked(ILjava/util/List;)I+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HPLcom/android/server/stats/pull/StatsPullAtomService;->pullKernelWakelockLocked(ILjava/util/List;)I+]Ljava/util/Map$Entry;Ljava/util/HashMap$Node;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/internal/os/KernelWakelockStats;Lcom/android/internal/os/KernelWakelockStats;]Lcom/android/internal/os/KernelWakelockReader;Lcom/android/internal/os/KernelWakelockReader;]Ljava/util/Iterator;Ljava/util/HashMap$EntryIterator;]Ljava/util/Set;Ljava/util/HashMap$EntrySet;
 PLcom/android/server/stats/pull/StatsPullAtomService;->pullKeystoreAtoms(ILjava/util/List;)I
 HPLcom/android/server/stats/pull/StatsPullAtomService;->pullLooperStatsLocked(ILjava/util/List;)I
@@ -47104,7 +48766,7 @@
 HPLcom/android/server/stats/pull/StatsPullAtomService;->pullProcessDmabufMemory(ILjava/util/List;)I
 HPLcom/android/server/stats/pull/StatsPullAtomService;->pullProcessMemoryHighWaterMarkLocked(ILjava/util/List;)I+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HPLcom/android/server/stats/pull/StatsPullAtomService;->pullProcessMemorySnapshot(ILjava/util/List;)I+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
-PLcom/android/server/stats/pull/StatsPullAtomService;->pullRuntimeAppOpAccessMessageLocked(ILjava/util/List;)I
+HPLcom/android/server/stats/pull/StatsPullAtomService;->pullRuntimeAppOpAccessMessageLocked(ILjava/util/List;)I
 PLcom/android/server/stats/pull/StatsPullAtomService;->pullSettingsStatsLocked(ILjava/util/List;)I
 HPLcom/android/server/stats/pull/StatsPullAtomService;->pullSystemMemory(ILjava/util/List;)I
 PLcom/android/server/stats/pull/StatsPullAtomService;->pullSystemServerPinnerStats(ILjava/util/List;)I
@@ -47129,7 +48791,7 @@
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerBluetoothActivityInfo()V
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerBluetoothBytesTransfer()V
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerBuildInformation()V
-PLcom/android/server/stats/pull/StatsPullAtomService;->registerBytesTransferByTagAndMetered()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerBytesTransferByTagAndMetered()V
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerCategorySize()V
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerCoolingDevice()V
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerCpuActiveTime()V
@@ -47142,7 +48804,7 @@
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerCpuTimePerUidFreq()V
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerDangerousPermissionState()V
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerDangerousPermissionStateSampled()V
-PLcom/android/server/stats/pull/StatsPullAtomService;->registerDataUsageBytesTransfer()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerDataUsageBytesTransfer()V
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerDebugElapsedClock()V
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerDebugFailingElapsedClock()V
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerDeviceCalculatedPowerUse()V
@@ -47166,13 +48828,13 @@
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerKeystoreStorageStats()V
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerLooperStats()V
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerMediaCapabilitiesStats()V
-PLcom/android/server/stats/pull/StatsPullAtomService;->registerMobileBytesTransfer()V
-PLcom/android/server/stats/pull/StatsPullAtomService;->registerMobileBytesTransferBackground()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerMobileBytesTransfer()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerMobileBytesTransferBackground()V
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerModemActivityInfo()V
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerNotificationRemoteViews()V
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerNumFacesEnrolled()V
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerNumFingerprintsEnrolled()V
-PLcom/android/server/stats/pull/StatsPullAtomService;->registerOemManagedBytesTransfer()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerOemManagedBytesTransfer()V
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerPendingIntentsPerPackagePuller()V
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerPinnerServiceStats()V
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerPowerProfile()V
@@ -47200,19 +48862,19 @@
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerTimeZoneDetectorState()V
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerVmStat()V
 HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerWifiActivityInfo()V
-PLcom/android/server/stats/pull/StatsPullAtomService;->registerWifiBytesTransfer()V
-PLcom/android/server/stats/pull/StatsPullAtomService;->registerWifiBytesTransferBackground()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerWifiBytesTransfer()V
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->registerWifiBytesTransferBackground()V
 HPLcom/android/server/stats/pull/StatsPullAtomService;->removeEmptyEntries(Landroid/net/NetworkStats;)Landroid/net/NetworkStats;+]Landroid/net/NetworkStats$Entry;Landroid/net/NetworkStats$Entry;]Landroid/net/NetworkStats;Landroid/net/NetworkStats;]Ljava/util/Iterator;Landroid/net/NetworkStats$1;
-HPLcom/android/server/stats/pull/StatsPullAtomService;->sampleAppOps(Ljava/util/List;Ljava/util/List;II)I
-HPLcom/android/server/stats/pull/StatsPullAtomService;->sliceNetworkStats(Landroid/net/NetworkStats;Ljava/util/function/Function;)Landroid/net/NetworkStats;+]Landroid/net/NetworkStats;Landroid/net/NetworkStats;]Ljava/util/function/Function;Lcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda12;,Lcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda15;,Lcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda6;,Lcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda18;]Ljava/util/Iterator;Landroid/net/NetworkStats$1;
+HPLcom/android/server/stats/pull/StatsPullAtomService;->sampleAppOps(Ljava/util/List;Ljava/util/List;II)I+]Landroid/app/AppOpsManager$HistoricalOp;Landroid/app/AppOpsManager$HistoricalOp;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->sliceNetworkStats(Landroid/net/NetworkStats;Ljava/util/function/Function;)Landroid/net/NetworkStats;+]Landroid/net/NetworkStats;Landroid/net/NetworkStats;]Ljava/util/function/Function;Lcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda12;,Lcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda15;,Lcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda6;,Lcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda18;]Ljava/util/Iterator;Landroid/net/NetworkStats$1;
 PLcom/android/server/stats/pull/StatsPullAtomService;->sliceNetworkStatsByFgbg(Landroid/net/NetworkStats;)Landroid/net/NetworkStats;
-PLcom/android/server/stats/pull/StatsPullAtomService;->sliceNetworkStatsByUid(Landroid/net/NetworkStats;)Landroid/net/NetworkStats;
-HPLcom/android/server/stats/pull/StatsPullAtomService;->sliceNetworkStatsByUidAndFgbg(Landroid/net/NetworkStats;)Landroid/net/NetworkStats;
-PLcom/android/server/stats/pull/StatsPullAtomService;->sliceNetworkStatsByUidTagAndMetered(Landroid/net/NetworkStats;)Landroid/net/NetworkStats;
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->sliceNetworkStatsByUid(Landroid/net/NetworkStats;)Landroid/net/NetworkStats;
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->sliceNetworkStatsByUidAndFgbg(Landroid/net/NetworkStats;)Landroid/net/NetworkStats;
+HSPLcom/android/server/stats/pull/StatsPullAtomService;->sliceNetworkStatsByUidTagAndMetered(Landroid/net/NetworkStats;)Landroid/net/NetworkStats;
 PLcom/android/server/stats/pull/SystemMemoryUtil$Metrics;-><init>()V
 HPLcom/android/server/stats/pull/SystemMemoryUtil;->getMetrics()Lcom/android/server/stats/pull/SystemMemoryUtil$Metrics;
-PLcom/android/server/stats/pull/netstats/NetworkStatsExt;-><init>(Landroid/net/NetworkStats;[IZ)V
-HPLcom/android/server/stats/pull/netstats/NetworkStatsExt;-><init>(Landroid/net/NetworkStats;[IZZZILcom/android/server/stats/pull/netstats/SubInfo;I)V
+HSPLcom/android/server/stats/pull/netstats/NetworkStatsExt;-><init>(Landroid/net/NetworkStats;[IZ)V
+HSPLcom/android/server/stats/pull/netstats/NetworkStatsExt;-><init>(Landroid/net/NetworkStats;[IZZZILcom/android/server/stats/pull/netstats/SubInfo;I)V
 HPLcom/android/server/stats/pull/netstats/NetworkStatsExt;->hasSameSlicing(Lcom/android/server/stats/pull/netstats/NetworkStatsExt;)Z
 PLcom/android/server/stats/pull/netstats/SubInfo;-><init>(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V
 PLcom/android/server/stats/pull/netstats/SubInfo;->equals(Ljava/lang/Object;)Z
@@ -47236,15 +48898,16 @@
 HPLcom/android/server/statusbar/StatusBarManagerService$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/statusbar/StatusBarManagerService;I)V
 HPLcom/android/server/statusbar/StatusBarManagerService$$ExternalSyntheticLambda6;->run()V
 HSPLcom/android/server/statusbar/StatusBarManagerService$1;-><init>(Lcom/android/server/statusbar/StatusBarManagerService;)V
-HPLcom/android/server/statusbar/StatusBarManagerService$1;->abortTransient(I[I)V
+HSPLcom/android/server/statusbar/StatusBarManagerService$1;->abortTransient(I[I)V
 PLcom/android/server/statusbar/StatusBarManagerService$1;->appTransitionCancelled(I)V
-HPLcom/android/server/statusbar/StatusBarManagerService$1;->appTransitionFinished(I)V
-HPLcom/android/server/statusbar/StatusBarManagerService$1;->appTransitionPending(I)V
-HPLcom/android/server/statusbar/StatusBarManagerService$1;->appTransitionStarting(IJJ)V
+HSPLcom/android/server/statusbar/StatusBarManagerService$1;->appTransitionFinished(I)V
+HSPLcom/android/server/statusbar/StatusBarManagerService$1;->appTransitionPending(I)V
+HSPLcom/android/server/statusbar/StatusBarManagerService$1;->appTransitionStarting(IJJ)V
 PLcom/android/server/statusbar/StatusBarManagerService$1;->collapsePanels()V
+PLcom/android/server/statusbar/StatusBarManagerService$1;->hideRecentApps(ZZ)V
 PLcom/android/server/statusbar/StatusBarManagerService$1;->hideToast(Ljava/lang/String;Landroid/os/IBinder;)V
 PLcom/android/server/statusbar/StatusBarManagerService$1;->onCameraLaunchGestureDetected(I)V
-PLcom/android/server/statusbar/StatusBarManagerService$1;->onDisplayReady(I)V
+HPLcom/android/server/statusbar/StatusBarManagerService$1;->onDisplayReady(I)V
 PLcom/android/server/statusbar/StatusBarManagerService$1;->onEmergencyActionLaunchGestureDetected()V
 PLcom/android/server/statusbar/StatusBarManagerService$1;->onProposedRotationChanged(IZ)V
 HPLcom/android/server/statusbar/StatusBarManagerService$1;->onRecentsAnimationStateChanged(Z)V
@@ -47259,7 +48922,9 @@
 HPLcom/android/server/statusbar/StatusBarManagerService$1;->setWindowState(III)V
 PLcom/android/server/statusbar/StatusBarManagerService$1;->showAssistDisclosure()V
 PLcom/android/server/statusbar/StatusBarManagerService$1;->showChargingAnimation(I)V
+PLcom/android/server/statusbar/StatusBarManagerService$1;->showRecentApps(Z)V
 PLcom/android/server/statusbar/StatusBarManagerService$1;->showShutdownUi(ZLjava/lang/String;)Z
+PLcom/android/server/statusbar/StatusBarManagerService$1;->showToast(ILjava/lang/String;Landroid/os/IBinder;Ljava/lang/CharSequence;Landroid/os/IBinder;ILandroid/app/ITransientNotificationCallback;I)V
 PLcom/android/server/statusbar/StatusBarManagerService$1;->showTransient(I[IZ)V
 PLcom/android/server/statusbar/StatusBarManagerService$1;->startAssist(Landroid/os/Bundle;)V
 HSPLcom/android/server/statusbar/StatusBarManagerService$2;-><init>(Lcom/android/server/statusbar/StatusBarManagerService;)V
@@ -47287,8 +48952,8 @@
 PLcom/android/server/statusbar/StatusBarManagerService$UiState;->-$$Nest$fgetmRequestedVisibilities(Lcom/android/server/statusbar/StatusBarManagerService$UiState;)Landroid/view/InsetsVisibilities;
 PLcom/android/server/statusbar/StatusBarManagerService$UiState;->-$$Nest$fgetmShowImeSwitcher(Lcom/android/server/statusbar/StatusBarManagerService$UiState;)Z
 PLcom/android/server/statusbar/StatusBarManagerService$UiState;->-$$Nest$fgetmTransientBarTypes(Lcom/android/server/statusbar/StatusBarManagerService$UiState;)Landroid/util/ArraySet;
-HPLcom/android/server/statusbar/StatusBarManagerService$UiState;->-$$Nest$mclearTransient(Lcom/android/server/statusbar/StatusBarManagerService$UiState;[I)V
-PLcom/android/server/statusbar/StatusBarManagerService$UiState;->-$$Nest$mdisableEquals(Lcom/android/server/statusbar/StatusBarManagerService$UiState;II)Z
+HSPLcom/android/server/statusbar/StatusBarManagerService$UiState;->-$$Nest$mclearTransient(Lcom/android/server/statusbar/StatusBarManagerService$UiState;[I)V
+HPLcom/android/server/statusbar/StatusBarManagerService$UiState;->-$$Nest$mdisableEquals(Lcom/android/server/statusbar/StatusBarManagerService$UiState;II)Z
 PLcom/android/server/statusbar/StatusBarManagerService$UiState;->-$$Nest$mgetDisabled1(Lcom/android/server/statusbar/StatusBarManagerService$UiState;)I
 PLcom/android/server/statusbar/StatusBarManagerService$UiState;->-$$Nest$mgetDisabled2(Lcom/android/server/statusbar/StatusBarManagerService$UiState;)I
 HPLcom/android/server/statusbar/StatusBarManagerService$UiState;->-$$Nest$msetBarAttributes(Lcom/android/server/statusbar/StatusBarManagerService$UiState;I[Lcom/android/internal/view/AppearanceRegion;ZILandroid/view/InsetsVisibilities;Ljava/lang/String;)V
@@ -47297,7 +48962,7 @@
 PLcom/android/server/statusbar/StatusBarManagerService$UiState;->-$$Nest$mshowTransient(Lcom/android/server/statusbar/StatusBarManagerService$UiState;[I)V
 HSPLcom/android/server/statusbar/StatusBarManagerService$UiState;-><init>()V
 HSPLcom/android/server/statusbar/StatusBarManagerService$UiState;-><init>(Lcom/android/server/statusbar/StatusBarManagerService$UiState-IA;)V
-PLcom/android/server/statusbar/StatusBarManagerService$UiState;->clearTransient([I)V
+HSPLcom/android/server/statusbar/StatusBarManagerService$UiState;->clearTransient([I)V
 HPLcom/android/server/statusbar/StatusBarManagerService$UiState;->disableEquals(II)Z
 PLcom/android/server/statusbar/StatusBarManagerService$UiState;->getDisabled1()I
 PLcom/android/server/statusbar/StatusBarManagerService$UiState;->getDisabled2()I
@@ -47311,7 +48976,7 @@
 PLcom/android/server/statusbar/StatusBarManagerService;->$r8$lambda$XWlNEmayVNZk6H1ofnHgfaTz4CA(Lcom/android/server/statusbar/StatusBarManagerService;)V
 HPLcom/android/server/statusbar/StatusBarManagerService;->$r8$lambda$aaKMp1V76gx6z3RD8wFE9Qs5sPk(Lcom/android/server/statusbar/StatusBarManagerService;ILandroid/os/IBinder;IIZ)V
 PLcom/android/server/statusbar/StatusBarManagerService;->$r8$lambda$zxtONZ_7L1fIeLZ0XZff5htwjII(Lcom/android/server/statusbar/StatusBarManagerService;I)V
-HPLcom/android/server/statusbar/StatusBarManagerService;->-$$Nest$fgetmBar(Lcom/android/server/statusbar/StatusBarManagerService;)Lcom/android/internal/statusbar/IStatusBar;
+HSPLcom/android/server/statusbar/StatusBarManagerService;->-$$Nest$fgetmBar(Lcom/android/server/statusbar/StatusBarManagerService;)Lcom/android/internal/statusbar/IStatusBar;
 PLcom/android/server/statusbar/StatusBarManagerService;->-$$Nest$fgetmContext(Lcom/android/server/statusbar/StatusBarManagerService;)Landroid/content/Context;
 PLcom/android/server/statusbar/StatusBarManagerService;->-$$Nest$fgetmDeathRecipient(Lcom/android/server/statusbar/StatusBarManagerService;)Lcom/android/server/statusbar/StatusBarManagerService$DeathRecipient;
 PLcom/android/server/statusbar/StatusBarManagerService;->-$$Nest$fgetmDisplayUiState(Lcom/android/server/statusbar/StatusBarManagerService;)Landroid/util/SparseArray;
@@ -47322,14 +48987,14 @@
 PLcom/android/server/statusbar/StatusBarManagerService;->-$$Nest$fputmGlobalActionListener(Lcom/android/server/statusbar/StatusBarManagerService;Lcom/android/server/policy/GlobalActionsProvider$GlobalActionsListener;)V
 HSPLcom/android/server/statusbar/StatusBarManagerService;->-$$Nest$fputmNotificationDelegate(Lcom/android/server/statusbar/StatusBarManagerService;Lcom/android/server/notification/NotificationDelegate;)V
 PLcom/android/server/statusbar/StatusBarManagerService;->-$$Nest$fputmUdfpsHbmListener(Lcom/android/server/statusbar/StatusBarManagerService;Landroid/hardware/fingerprint/IUdfpsHbmListener;)V
-HPLcom/android/server/statusbar/StatusBarManagerService;->-$$Nest$menforceStatusBarService(Lcom/android/server/statusbar/StatusBarManagerService;)V
-HPLcom/android/server/statusbar/StatusBarManagerService;->-$$Nest$mgetUiState(Lcom/android/server/statusbar/StatusBarManagerService;I)Lcom/android/server/statusbar/StatusBarManagerService$UiState;
+HSPLcom/android/server/statusbar/StatusBarManagerService;->-$$Nest$menforceStatusBarService(Lcom/android/server/statusbar/StatusBarManagerService;)V
+HSPLcom/android/server/statusbar/StatusBarManagerService;->-$$Nest$mgetUiState(Lcom/android/server/statusbar/StatusBarManagerService;I)Lcom/android/server/statusbar/StatusBarManagerService$UiState;
 PLcom/android/server/statusbar/StatusBarManagerService;->-$$Nest$mnotifyBarAttachChanged(Lcom/android/server/statusbar/StatusBarManagerService;)V
 PLcom/android/server/statusbar/StatusBarManagerService;->-$$Nest$msetDisableFlags(Lcom/android/server/statusbar/StatusBarManagerService;IILjava/lang/String;)V
 HSPLcom/android/server/statusbar/StatusBarManagerService;-><clinit>()V
 HSPLcom/android/server/statusbar/StatusBarManagerService;-><init>(Landroid/content/Context;)V
 PLcom/android/server/statusbar/StatusBarManagerService;->addTile(Landroid/content/ComponentName;)V
-PLcom/android/server/statusbar/StatusBarManagerService;->checkCallingUidPackage(Ljava/lang/String;II)V
+HPLcom/android/server/statusbar/StatusBarManagerService;->checkCallingUidPackage(Ljava/lang/String;II)V
 HPLcom/android/server/statusbar/StatusBarManagerService;->checkCanCollapseStatusBar(Ljava/lang/String;)Z
 HPLcom/android/server/statusbar/StatusBarManagerService;->clearNotificationEffects()V
 PLcom/android/server/statusbar/StatusBarManagerService;->collapsePanels()V
@@ -47341,14 +49006,14 @@
 PLcom/android/server/statusbar/StatusBarManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/statusbar/StatusBarManagerService;->enforceBiometricDialog()V
 PLcom/android/server/statusbar/StatusBarManagerService;->enforceExpandStatusBar()V
-HSPLcom/android/server/statusbar/StatusBarManagerService;->enforceStatusBar()V
+HSPLcom/android/server/statusbar/StatusBarManagerService;->enforceStatusBar()V+]Landroid/content/Context;Landroid/app/ContextImpl;
 PLcom/android/server/statusbar/StatusBarManagerService;->enforceStatusBarOrShell()V
 HSPLcom/android/server/statusbar/StatusBarManagerService;->enforceStatusBarService()V
 PLcom/android/server/statusbar/StatusBarManagerService;->expandNotificationsPanel()V
 HPLcom/android/server/statusbar/StatusBarManagerService;->findMatchingRecordLocked(Landroid/os/IBinder;I)Landroid/util/Pair;
 HPLcom/android/server/statusbar/StatusBarManagerService;->gatherDisableActionsLocked(II)I
 PLcom/android/server/statusbar/StatusBarManagerService;->getUiContext()Landroid/content/Context;
-HPLcom/android/server/statusbar/StatusBarManagerService;->getUiState(I)Lcom/android/server/statusbar/StatusBarManagerService$UiState;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/statusbar/StatusBarManagerService;->getUiState(I)Lcom/android/server/statusbar/StatusBarManagerService$UiState;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/statusbar/StatusBarManagerService;->handleSystemKey(I)V
 PLcom/android/server/statusbar/StatusBarManagerService;->hideAuthenticationDialog(J)V
 PLcom/android/server/statusbar/StatusBarManagerService;->hideCurrentInputMethodForBubbles()V
@@ -47358,7 +49023,7 @@
 PLcom/android/server/statusbar/StatusBarManagerService;->lambda$notifyBarAttachChanged$2()V
 PLcom/android/server/statusbar/StatusBarManagerService;->lambda$notifyBarAttachChanged$3()V
 PLcom/android/server/statusbar/StatusBarManagerService;->lambda$reboot$5(ZLjava/lang/String;)V
-HPLcom/android/server/statusbar/StatusBarManagerService;->lambda$setImeWindowStatus$1(ILandroid/os/IBinder;IIZ)V
+HPLcom/android/server/statusbar/StatusBarManagerService;->lambda$setImeWindowStatus$1(ILandroid/os/IBinder;IIZ)V+]Lcom/android/internal/statusbar/IStatusBar;Lcom/android/internal/statusbar/IStatusBar$Stub$Proxy;
 PLcom/android/server/statusbar/StatusBarManagerService;->lambda$shutdown$4(Ljava/lang/String;)V
 HPLcom/android/server/statusbar/StatusBarManagerService;->manageDisableListLocked(IILandroid/os/IBinder;Ljava/lang/String;I)V
 PLcom/android/server/statusbar/StatusBarManagerService;->notifyBarAttachChanged()V
@@ -47368,14 +49033,14 @@
 PLcom/android/server/statusbar/StatusBarManagerService;->onBubbleMetadataFlagChanged(Ljava/lang/String;I)V
 PLcom/android/server/statusbar/StatusBarManagerService;->onClearAllNotifications(I)V
 PLcom/android/server/statusbar/StatusBarManagerService;->onDisplayAdded(I)V
-PLcom/android/server/statusbar/StatusBarManagerService;->onDisplayChanged(I)V
+HSPLcom/android/server/statusbar/StatusBarManagerService;->onDisplayChanged(I)V
 PLcom/android/server/statusbar/StatusBarManagerService;->onDisplayRemoved(I)V
 PLcom/android/server/statusbar/StatusBarManagerService;->onGlobalActionsHidden()V
 PLcom/android/server/statusbar/StatusBarManagerService;->onGlobalActionsShown()V
 PLcom/android/server/statusbar/StatusBarManagerService;->onNotificationActionClick(Ljava/lang/String;ILandroid/app/Notification$Action;Lcom/android/internal/statusbar/NotificationVisibility;Z)V
 PLcom/android/server/statusbar/StatusBarManagerService;->onNotificationBubbleChanged(Ljava/lang/String;ZI)V
 HPLcom/android/server/statusbar/StatusBarManagerService;->onNotificationClear(Ljava/lang/String;ILjava/lang/String;IILcom/android/internal/statusbar/NotificationVisibility;)V
-PLcom/android/server/statusbar/StatusBarManagerService;->onNotificationClick(Ljava/lang/String;Lcom/android/internal/statusbar/NotificationVisibility;)V
+HPLcom/android/server/statusbar/StatusBarManagerService;->onNotificationClick(Ljava/lang/String;Lcom/android/internal/statusbar/NotificationVisibility;)V
 PLcom/android/server/statusbar/StatusBarManagerService;->onNotificationDirectReplied(Ljava/lang/String;)V
 PLcom/android/server/statusbar/StatusBarManagerService;->onNotificationError(Ljava/lang/String;Ljava/lang/String;IIILjava/lang/String;I)V
 HPLcom/android/server/statusbar/StatusBarManagerService;->onNotificationExpansionChanged(Ljava/lang/String;ZZI)V
@@ -47396,8 +49061,8 @@
 HSPLcom/android/server/statusbar/StatusBarManagerService;->setBiometicContextListener(Landroid/hardware/biometrics/IBiometricContextListener;)V
 PLcom/android/server/statusbar/StatusBarManagerService;->setDisableFlags(IILjava/lang/String;)V
 PLcom/android/server/statusbar/StatusBarManagerService;->setIcon(Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;)V
-HSPLcom/android/server/statusbar/StatusBarManagerService;->setIconVisibility(Ljava/lang/String;Z)V
-HPLcom/android/server/statusbar/StatusBarManagerService;->setImeWindowStatus(ILandroid/os/IBinder;IIZ)V
+HSPLcom/android/server/statusbar/StatusBarManagerService;->setIconVisibility(Ljava/lang/String;Z)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/statusbar/StatusBarManagerService;Lcom/android/server/statusbar/StatusBarManagerService;
+HPLcom/android/server/statusbar/StatusBarManagerService;->setImeWindowStatus(ILandroid/os/IBinder;IIZ)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/statusbar/StatusBarManagerService;Lcom/android/server/statusbar/StatusBarManagerService;
 PLcom/android/server/statusbar/StatusBarManagerService;->setUdfpsHbmListener(Landroid/hardware/fingerprint/IUdfpsHbmListener;)V
 PLcom/android/server/statusbar/StatusBarManagerService;->showAuthenticationDialog(Landroid/hardware/biometrics/PromptInfo;Landroid/hardware/biometrics/IBiometricSysuiReceiver;[IZZIJLjava/lang/String;JI)V
 PLcom/android/server/statusbar/StatusBarManagerService;->showPinningEnterExitToast(Z)V
@@ -47408,7 +49073,7 @@
 PLcom/android/server/statusbar/StatusBarManagerService;->suppressAmbientDisplay(Z)V
 PLcom/android/server/statusbar/TileRequestTracker$$ExternalSyntheticLambda0;-><init>(Landroid/util/IndentingPrintWriter;)V
 HSPLcom/android/server/statusbar/TileRequestTracker$1;-><init>(Lcom/android/server/statusbar/TileRequestTracker;)V
-PLcom/android/server/statusbar/TileRequestTracker$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/statusbar/TileRequestTracker$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/statusbar/TileRequestTracker;->-$$Nest$fgetmComponentsToRemove(Lcom/android/server/statusbar/TileRequestTracker;)Landroid/util/ArraySet;
 PLcom/android/server/statusbar/TileRequestTracker;->-$$Nest$fgetmLock(Lcom/android/server/statusbar/TileRequestTracker;)Ljava/lang/Object;
 PLcom/android/server/statusbar/TileRequestTracker;->-$$Nest$fgetmTrackingMap(Lcom/android/server/statusbar/TileRequestTracker;)Landroid/util/SparseArrayMap;
@@ -47417,6 +49082,7 @@
 PLcom/android/server/storage/AppCollector$BackgroundHandler;-><init>(Lcom/android/server/storage/AppCollector;Landroid/os/Looper;Landroid/os/storage/VolumeInfo;Landroid/content/pm/PackageManager;Landroid/os/UserManager;Landroid/app/usage/StorageStatsManager;)V
 HPLcom/android/server/storage/AppCollector$BackgroundHandler;->handleMessage(Landroid/os/Message;)V
 PLcom/android/server/storage/AppCollector;->-$$Nest$fgetmStats(Lcom/android/server/storage/AppCollector;)Ljava/util/concurrent/CompletableFuture;
+PLcom/android/server/storage/AppCollector;->-$$Nest$sfgetTAG()Ljava/lang/String;
 PLcom/android/server/storage/AppCollector;-><clinit>()V
 PLcom/android/server/storage/AppCollector;-><init>(Landroid/content/Context;Landroid/os/storage/VolumeInfo;)V
 PLcom/android/server/storage/AppCollector;->getPackageStats(J)Ljava/util/List;
@@ -47430,7 +49096,7 @@
 PLcom/android/server/storage/AppFuseBridge;->openFile(III)Landroid/os/ParcelFileDescriptor;
 PLcom/android/server/storage/AppFuseBridge;->run()V
 PLcom/android/server/storage/CacheQuotaStrategy$1$1;-><init>(Lcom/android/server/storage/CacheQuotaStrategy$1;Landroid/os/IBinder;)V
-PLcom/android/server/storage/CacheQuotaStrategy$1$1;->run()V
+HPLcom/android/server/storage/CacheQuotaStrategy$1$1;->run()V
 PLcom/android/server/storage/CacheQuotaStrategy$1;-><init>(Lcom/android/server/storage/CacheQuotaStrategy;)V
 PLcom/android/server/storage/CacheQuotaStrategy$1;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 PLcom/android/server/storage/CacheQuotaStrategy$1;->onServiceDisconnected(Landroid/content/ComponentName;)V
@@ -47442,7 +49108,7 @@
 PLcom/android/server/storage/CacheQuotaStrategy;->createServiceConnection()V
 HSPLcom/android/server/storage/CacheQuotaStrategy;->disconnectService()V
 HSPLcom/android/server/storage/CacheQuotaStrategy;->getRequestFromXml(Landroid/util/TypedXmlPullParser;)Landroid/app/usage/CacheQuotaHint;
-PLcom/android/server/storage/CacheQuotaStrategy;->getServiceComponentName()Landroid/content/ComponentName;
+HPLcom/android/server/storage/CacheQuotaStrategy;->getServiceComponentName()Landroid/content/ComponentName;
 HPLcom/android/server/storage/CacheQuotaStrategy;->getUnfulfilledRequests()Ljava/util/List;+]Landroid/app/usage/UsageStats;Landroid/app/usage/UsageStats;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/os/UserManager;Landroid/os/UserManager;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Landroid/app/usage/UsageStatsManagerInternal;Lcom/android/server/usage/UsageStatsService$LocalService;]Landroid/app/usage/CacheQuotaHint$Builder;Landroid/app/usage/CacheQuotaHint$Builder;
 HSPLcom/android/server/storage/CacheQuotaStrategy;->insertIntoQuotaMap(Ljava/lang/String;IIJ)V
 PLcom/android/server/storage/CacheQuotaStrategy;->onResult(Landroid/os/Bundle;)V
@@ -47513,7 +49179,7 @@
 PLcom/android/server/storage/FileCollector;->getSystemSize(Landroid/content/Context;)J
 PLcom/android/server/storage/StorageSessionController$ExternalStorageServiceException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
 HSPLcom/android/server/storage/StorageSessionController;-><init>(Landroid/content/Context;)V
-PLcom/android/server/storage/StorageSessionController;->freeCache(Ljava/lang/String;J)V
+HPLcom/android/server/storage/StorageSessionController;->freeCache(Ljava/lang/String;J)V
 PLcom/android/server/storage/StorageSessionController;->getConnectionUserIdForVolume(Landroid/os/storage/VolumeInfo;)I
 PLcom/android/server/storage/StorageSessionController;->getExternalStorageServiceComponentName()Landroid/content/ComponentName;
 PLcom/android/server/storage/StorageSessionController;->initExternalStorageServiceComponent()V
@@ -47530,17 +49196,17 @@
 PLcom/android/server/storage/StorageSessionController;->resolveExternalStorageServiceAsUser(I)Landroid/content/pm/ServiceInfo;
 PLcom/android/server/storage/StorageSessionController;->shouldHandle(Landroid/os/storage/VolumeInfo;)Z
 PLcom/android/server/storage/StorageSessionController;->supportsExternalStorage(I)Z
-PLcom/android/server/storage/StorageUserConnection$ActiveConnection$$ExternalSyntheticLambda0;-><init>(Ljava/lang/String;Ljava/lang/String;J)V
+HPLcom/android/server/storage/StorageUserConnection$ActiveConnection$$ExternalSyntheticLambda0;-><init>(Ljava/lang/String;Ljava/lang/String;J)V
 PLcom/android/server/storage/StorageUserConnection$ActiveConnection$$ExternalSyntheticLambda0;->run(Landroid/service/storage/IExternalStorageService;Landroid/os/RemoteCallback;)V
 PLcom/android/server/storage/StorageUserConnection$ActiveConnection$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/storage/StorageUserConnection$Session;Landroid/os/ParcelFileDescriptor;)V
 PLcom/android/server/storage/StorageUserConnection$ActiveConnection$$ExternalSyntheticLambda1;->run(Landroid/service/storage/IExternalStorageService;Landroid/os/RemoteCallback;)V
 PLcom/android/server/storage/StorageUserConnection$ActiveConnection$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/storage/StorageUserConnection$Session;)V
 PLcom/android/server/storage/StorageUserConnection$ActiveConnection$$ExternalSyntheticLambda2;->run(Landroid/service/storage/IExternalStorageService;Landroid/os/RemoteCallback;)V
 PLcom/android/server/storage/StorageUserConnection$ActiveConnection$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/storage/StorageUserConnection$ActiveConnection;Ljava/util/concurrent/CompletableFuture;)V
-PLcom/android/server/storage/StorageUserConnection$ActiveConnection$$ExternalSyntheticLambda3;->onResult(Landroid/os/Bundle;)V
+HPLcom/android/server/storage/StorageUserConnection$ActiveConnection$$ExternalSyntheticLambda3;->onResult(Landroid/os/Bundle;)V
 PLcom/android/server/storage/StorageUserConnection$ActiveConnection$$ExternalSyntheticLambda4;-><init>(Ljava/lang/String;Landroid/os/storage/StorageVolume;)V
 PLcom/android/server/storage/StorageUserConnection$ActiveConnection$$ExternalSyntheticLambda4;->run(Landroid/service/storage/IExternalStorageService;Landroid/os/RemoteCallback;)V
-PLcom/android/server/storage/StorageUserConnection$ActiveConnection$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/storage/StorageUserConnection$AsyncStorageServiceCall;Landroid/os/RemoteCallback;Ljava/util/concurrent/CompletableFuture;)V
+HPLcom/android/server/storage/StorageUserConnection$ActiveConnection$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/storage/StorageUserConnection$AsyncStorageServiceCall;Landroid/os/RemoteCallback;Ljava/util/concurrent/CompletableFuture;)V
 PLcom/android/server/storage/StorageUserConnection$ActiveConnection$$ExternalSyntheticLambda5;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/storage/StorageUserConnection$ActiveConnection$1;-><init>(Lcom/android/server/storage/StorageUserConnection$ActiveConnection;Ljava/util/concurrent/CompletableFuture;)V
 PLcom/android/server/storage/StorageUserConnection$ActiveConnection$1;->handleConnection(Landroid/os/IBinder;)V
@@ -47568,10 +49234,10 @@
 PLcom/android/server/storage/StorageUserConnection$ActiveConnection;->lambda$waitForAsync$1(Lcom/android/server/storage/StorageUserConnection$AsyncStorageServiceCall;Landroid/os/RemoteCallback;Ljava/util/concurrent/CompletableFuture;Landroid/service/storage/IExternalStorageService;)Ljava/util/concurrent/CompletionStage;
 PLcom/android/server/storage/StorageUserConnection$ActiveConnection;->lambda$waitForAsyncVoid$0(Ljava/util/concurrent/CompletableFuture;Landroid/os/Bundle;)V
 PLcom/android/server/storage/StorageUserConnection$ActiveConnection;->notifyVolumeStateChanged(Ljava/lang/String;Landroid/os/storage/StorageVolume;)V
-PLcom/android/server/storage/StorageUserConnection$ActiveConnection;->setResult(Landroid/os/Bundle;Ljava/util/concurrent/CompletableFuture;)V
+HPLcom/android/server/storage/StorageUserConnection$ActiveConnection;->setResult(Landroid/os/Bundle;Ljava/util/concurrent/CompletableFuture;)V
 PLcom/android/server/storage/StorageUserConnection$ActiveConnection;->startSession(Lcom/android/server/storage/StorageUserConnection$Session;Landroid/os/ParcelFileDescriptor;)V
-PLcom/android/server/storage/StorageUserConnection$ActiveConnection;->waitForAsync(Lcom/android/server/storage/StorageUserConnection$AsyncStorageServiceCall;Landroid/os/RemoteCallback;Ljava/util/concurrent/CompletableFuture;Ljava/util/ArrayList;J)Ljava/lang/Object;
-PLcom/android/server/storage/StorageUserConnection$ActiveConnection;->waitForAsyncVoid(Lcom/android/server/storage/StorageUserConnection$AsyncStorageServiceCall;)V
+HPLcom/android/server/storage/StorageUserConnection$ActiveConnection;->waitForAsync(Lcom/android/server/storage/StorageUserConnection$AsyncStorageServiceCall;Landroid/os/RemoteCallback;Ljava/util/concurrent/CompletableFuture;Ljava/util/ArrayList;J)Ljava/lang/Object;
+HPLcom/android/server/storage/StorageUserConnection$ActiveConnection;->waitForAsyncVoid(Lcom/android/server/storage/StorageUserConnection$AsyncStorageServiceCall;)V
 PLcom/android/server/storage/StorageUserConnection$Session;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/storage/StorageUserConnection$Session;->toString()Ljava/lang/String;
 PLcom/android/server/storage/StorageUserConnection;->-$$Nest$fgetmContext(Lcom/android/server/storage/StorageUserConnection;)Landroid/content/Context;
@@ -47580,7 +49246,7 @@
 PLcom/android/server/storage/StorageUserConnection;->-$$Nest$fgetmUserId(Lcom/android/server/storage/StorageUserConnection;)I
 PLcom/android/server/storage/StorageUserConnection;-><init>(Landroid/content/Context;ILcom/android/server/storage/StorageSessionController;)V
 PLcom/android/server/storage/StorageUserConnection;->close()V
-PLcom/android/server/storage/StorageUserConnection;->freeCache(Ljava/lang/String;J)V
+HPLcom/android/server/storage/StorageUserConnection;->freeCache(Ljava/lang/String;J)V
 PLcom/android/server/storage/StorageUserConnection;->getAllSessionIds()Ljava/util/Set;
 PLcom/android/server/storage/StorageUserConnection;->isAppIoBlocked(I)Z
 PLcom/android/server/storage/StorageUserConnection;->notifyVolumeStateChanged(Ljava/lang/String;Landroid/os/storage/StorageVolume;)V
@@ -47621,7 +49287,7 @@
 HSPLcom/android/server/tare/Agent$ActionAffordabilityNote;->-$$Nest$msetNewAffordability(Lcom/android/server/tare/Agent$ActionAffordabilityNote;Z)V
 HSPLcom/android/server/tare/Agent$ActionAffordabilityNote;-><init>(Lcom/android/server/tare/EconomyManagerInternal$ActionBill;Lcom/android/server/tare/EconomyManagerInternal$AffordabilityChangeListener;Lcom/android/server/tare/EconomicPolicy;)V+]Lcom/android/server/tare/EconomicPolicy;Lcom/android/server/tare/CompleteEconomicPolicy;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Lcom/android/server/tare/EconomyManagerInternal$ActionBill;Lcom/android/server/tare/EconomyManagerInternal$ActionBill;
 HSPLcom/android/server/tare/Agent$ActionAffordabilityNote;->equals(Ljava/lang/Object;)Z+]Ljava/lang/Object;Lcom/android/server/job/controllers/TareController$$ExternalSyntheticLambda0;,Lcom/android/server/alarm/AlarmManagerService$8;]Lcom/android/server/tare/EconomyManagerInternal$ActionBill;Lcom/android/server/tare/EconomyManagerInternal$ActionBill;
-PLcom/android/server/tare/Agent$ActionAffordabilityNote;->getActionBill()Lcom/android/server/tare/EconomyManagerInternal$ActionBill;
+HPLcom/android/server/tare/Agent$ActionAffordabilityNote;->getActionBill()Lcom/android/server/tare/EconomyManagerInternal$ActionBill;
 HPLcom/android/server/tare/Agent$ActionAffordabilityNote;->getCachedModifiedPrice()J
 HPLcom/android/server/tare/Agent$ActionAffordabilityNote;->getCtp()J
 HPLcom/android/server/tare/Agent$ActionAffordabilityNote;->getListener()Lcom/android/server/tare/EconomyManagerInternal$AffordabilityChangeListener;
@@ -47630,7 +49296,7 @@
 HPLcom/android/server/tare/Agent$ActionAffordabilityNote;->recalculateCosts(Lcom/android/server/tare/EconomicPolicy;ILjava/lang/String;)V+]Lcom/android/server/tare/EconomicPolicy;Lcom/android/server/tare/CompleteEconomicPolicy;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Lcom/android/server/tare/EconomyManagerInternal$ActionBill;Lcom/android/server/tare/EconomyManagerInternal$ActionBill;
 HSPLcom/android/server/tare/Agent$ActionAffordabilityNote;->setNewAffordability(Z)V
 HSPLcom/android/server/tare/Agent$AgentHandler;-><init>(Lcom/android/server/tare/Agent;Landroid/os/Looper;)V
-HPLcom/android/server/tare/Agent$AgentHandler;->handleMessage(Landroid/os/Message;)V
+HPLcom/android/server/tare/Agent$AgentHandler;->handleMessage(Landroid/os/Message;)V+]Landroid/os/Handler;Lcom/android/server/tare/Agent$AgentHandler;]Lcom/android/server/tare/Agent;Lcom/android/server/tare/Agent;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/tare/Agent$ActionAffordabilityNote;Lcom/android/server/tare/Agent$ActionAffordabilityNote;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/tare/InternalResourceService;Lcom/android/server/tare/InternalResourceService;
 HSPLcom/android/server/tare/Agent$BalanceThresholdAlarmQueue;-><init>(Lcom/android/server/tare/Agent;Landroid/content/Context;Landroid/os/Looper;)V
 HSPLcom/android/server/tare/Agent$BalanceThresholdAlarmQueue;-><init>(Lcom/android/server/tare/Agent;Landroid/content/Context;Landroid/os/Looper;Lcom/android/server/tare/Agent$BalanceThresholdAlarmQueue-IA;)V
 PLcom/android/server/tare/Agent$BalanceThresholdAlarmQueue;->processExpiredAlarms(Landroid/util/ArraySet;)V
@@ -47642,11 +49308,12 @@
 HSPLcom/android/server/tare/Agent$OngoingEventUpdater;-><init>(Lcom/android/server/tare/Agent;)V
 HSPLcom/android/server/tare/Agent$OngoingEventUpdater;-><init>(Lcom/android/server/tare/Agent;Lcom/android/server/tare/Agent$OngoingEventUpdater-IA;)V
 HPLcom/android/server/tare/Agent$OngoingEventUpdater;->accept(Lcom/android/server/tare/Agent$OngoingEvent;)V
-HPLcom/android/server/tare/Agent$OngoingEventUpdater;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/tare/Agent$OngoingEventUpdater;->accept(Ljava/lang/Object;)V+]Lcom/android/server/tare/Agent$OngoingEventUpdater;Lcom/android/server/tare/Agent$OngoingEventUpdater;
 HPLcom/android/server/tare/Agent$OngoingEventUpdater;->reset(ILjava/lang/String;JJ)V
 HPLcom/android/server/tare/Agent$Package;-><init>(ILjava/lang/String;)V
 HPLcom/android/server/tare/Agent$Package;->equals(Ljava/lang/Object;)Z
 PLcom/android/server/tare/Agent$Package;->hashCode()I
+PLcom/android/server/tare/Agent$Package;->toString()Ljava/lang/String;
 HPLcom/android/server/tare/Agent$TotalDeltaCalculator;->-$$Nest$fgetmTotal(Lcom/android/server/tare/Agent$TotalDeltaCalculator;)J
 HSPLcom/android/server/tare/Agent$TotalDeltaCalculator;-><init>(Lcom/android/server/tare/Agent;)V
 HSPLcom/android/server/tare/Agent$TotalDeltaCalculator;-><init>(Lcom/android/server/tare/Agent;Lcom/android/server/tare/Agent$TotalDeltaCalculator-IA;)V
@@ -47691,7 +49358,7 @@
 PLcom/android/server/tare/Agent;->reclaimUnusedAssetsLocked(DJZ)V
 HPLcom/android/server/tare/Agent;->recordTransactionLocked(ILjava/lang/String;Lcom/android/server/tare/Ledger;Lcom/android/server/tare/Ledger$Transaction;Z)V+]Landroid/os/Handler;Lcom/android/server/tare/Agent$AgentHandler;]Lcom/android/server/tare/CompleteEconomicPolicy;Lcom/android/server/tare/CompleteEconomicPolicy;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/tare/Scribe;Lcom/android/server/tare/Scribe;]Lcom/android/server/tare/Agent;Lcom/android/server/tare/Agent;]Lcom/android/server/tare/Agent$ActionAffordabilityNote;Lcom/android/server/tare/Agent$ActionAffordabilityNote;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/tare/Analyst;Lcom/android/server/tare/Analyst;]Lcom/android/server/tare/InternalResourceService;Lcom/android/server/tare/InternalResourceService;]Lcom/android/server/tare/Ledger;Lcom/android/server/tare/Ledger;
 HSPLcom/android/server/tare/Agent;->registerAffordabilityChangeListenerLocked(ILjava/lang/String;Lcom/android/server/tare/EconomyManagerInternal$AffordabilityChangeListener;Lcom/android/server/tare/EconomyManagerInternal$ActionBill;)V+]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/tare/InternalResourceService;Lcom/android/server/tare/InternalResourceService;]Lcom/android/server/tare/Agent;Lcom/android/server/tare/Agent;]Lcom/android/server/tare/Agent$ActionAffordabilityNote;Lcom/android/server/tare/Agent$ActionAffordabilityNote;
-HPLcom/android/server/tare/Agent;->scheduleBalanceCheckLocked(ILjava/lang/String;)V+]Lcom/android/server/tare/Scribe;Lcom/android/server/tare/Scribe;]Lcom/android/server/tare/Agent;Lcom/android/server/tare/Agent;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/tare/Agent$TrendCalculator;Lcom/android/server/tare/Agent$TrendCalculator;]Lcom/android/server/utils/AlarmQueue;Lcom/android/server/tare/Agent$BalanceThresholdAlarmQueue;
+HPLcom/android/server/tare/Agent;->scheduleBalanceCheckLocked(ILjava/lang/String;)V+]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/utils/AlarmQueue;Lcom/android/server/tare/Agent$BalanceThresholdAlarmQueue;]Lcom/android/server/tare/Scribe;Lcom/android/server/tare/Scribe;]Lcom/android/server/tare/Agent;Lcom/android/server/tare/Agent;]Lcom/android/server/tare/Agent$TrendCalculator;Lcom/android/server/tare/Agent$TrendCalculator;
 HPLcom/android/server/tare/Agent;->shouldGiveCredits(Landroid/content/pm/PackageInfo;)Z
 HPLcom/android/server/tare/Agent;->stopOngoingActionLocked(ILjava/lang/String;ILjava/lang/String;JJ)V
 HPLcom/android/server/tare/Agent;->stopOngoingActionLocked(ILjava/lang/String;ILjava/lang/String;JJZZ)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/tare/Scribe;Lcom/android/server/tare/Scribe;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Lcom/android/server/tare/Agent;Lcom/android/server/tare/Agent;]Lcom/android/server/tare/InternalResourceService;Lcom/android/server/tare/InternalResourceService;
@@ -47713,7 +49380,7 @@
 HSPLcom/android/server/tare/Analyst;-><clinit>()V
 HSPLcom/android/server/tare/Analyst;-><init>()V
 PLcom/android/server/tare/Analyst;->dump(Landroid/util/IndentingPrintWriter;)V
-PLcom/android/server/tare/Analyst;->getReports()Ljava/util/List;
+HPLcom/android/server/tare/Analyst;->getReports()Ljava/util/List;
 PLcom/android/server/tare/Analyst;->loadReports(Ljava/util/List;)V
 HPLcom/android/server/tare/Analyst;->noteBatteryLevelChange(I)V
 HPLcom/android/server/tare/Analyst;->noteTransaction(Lcom/android/server/tare/Ledger$Transaction;)V
@@ -47729,7 +49396,7 @@
 HSPLcom/android/server/tare/ChargingModifier;-><init>(Lcom/android/server/tare/InternalResourceService;)V
 PLcom/android/server/tare/ChargingModifier;->dump(Landroid/util/IndentingPrintWriter;)V
 HPLcom/android/server/tare/ChargingModifier;->getModifiedCostToProduce(J)J
-PLcom/android/server/tare/ChargingModifier;->getModifiedPrice(J)J
+HPLcom/android/server/tare/ChargingModifier;->getModifiedPrice(J)J
 HPLcom/android/server/tare/ChargingModifier;->modifyValue(J)J
 PLcom/android/server/tare/ChargingModifier;->setup()V
 HSPLcom/android/server/tare/CompleteEconomicPolicy;-><init>(Lcom/android/server/tare/InternalResourceService;)V
@@ -47810,12 +49477,12 @@
 HPLcom/android/server/tare/InternalResourceService$LocalService;->canPayFor(ILjava/lang/String;Lcom/android/server/tare/EconomyManagerInternal$ActionBill;)Z+]Lcom/android/server/tare/EconomicPolicy;Lcom/android/server/tare/CompleteEconomicPolicy;]Lcom/android/server/tare/Agent;Lcom/android/server/tare/Agent;]Lcom/android/server/tare/Scribe;Lcom/android/server/tare/Scribe;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Lcom/android/server/tare/InternalResourceService;Lcom/android/server/tare/InternalResourceService;]Lcom/android/server/tare/EconomyManagerInternal$ActionBill;Lcom/android/server/tare/EconomyManagerInternal$ActionBill;
 HPLcom/android/server/tare/InternalResourceService$LocalService;->getMaxDurationMs(ILjava/lang/String;Lcom/android/server/tare/EconomyManagerInternal$ActionBill;)J+]Lcom/android/server/tare/EconomicPolicy;Lcom/android/server/tare/CompleteEconomicPolicy;]Lcom/android/server/tare/Scribe;Lcom/android/server/tare/Scribe;]Lcom/android/server/tare/Agent;Lcom/android/server/tare/Agent;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Lcom/android/server/tare/InternalResourceService;Lcom/android/server/tare/InternalResourceService;]Lcom/android/server/tare/EconomyManagerInternal$ActionBill;Lcom/android/server/tare/EconomyManagerInternal$ActionBill;
 HSPLcom/android/server/tare/InternalResourceService$LocalService;->isEnabled()Z
-HPLcom/android/server/tare/InternalResourceService$LocalService;->noteInstantaneousEvent(ILjava/lang/String;ILjava/lang/String;)V+]Lcom/android/server/tare/Agent;Lcom/android/server/tare/Agent;
-HPLcom/android/server/tare/InternalResourceService$LocalService;->noteOngoingEventStarted(ILjava/lang/String;ILjava/lang/String;)V
+HSPLcom/android/server/tare/InternalResourceService$LocalService;->noteInstantaneousEvent(ILjava/lang/String;ILjava/lang/String;)V+]Lcom/android/server/tare/Agent;Lcom/android/server/tare/Agent;
+HSPLcom/android/server/tare/InternalResourceService$LocalService;->noteOngoingEventStarted(ILjava/lang/String;ILjava/lang/String;)V+]Lcom/android/server/tare/Agent;Lcom/android/server/tare/Agent;
 HPLcom/android/server/tare/InternalResourceService$LocalService;->noteOngoingEventStopped(ILjava/lang/String;ILjava/lang/String;)V+]Lcom/android/server/tare/Agent;Lcom/android/server/tare/Agent;
 HSPLcom/android/server/tare/InternalResourceService$LocalService;->registerAffordabilityChangeListener(ILjava/lang/String;Lcom/android/server/tare/EconomyManagerInternal$AffordabilityChangeListener;Lcom/android/server/tare/EconomyManagerInternal$ActionBill;)V+]Lcom/android/server/tare/Agent;Lcom/android/server/tare/Agent;]Lcom/android/server/tare/InternalResourceService;Lcom/android/server/tare/InternalResourceService;
 HSPLcom/android/server/tare/InternalResourceService$LocalService;->registerTareStateChangeListener(Lcom/android/server/tare/EconomyManagerInternal$TareStateChangeListener;)V
-HPLcom/android/server/tare/InternalResourceService$LocalService;->unregisterAffordabilityChangeListener(ILjava/lang/String;Lcom/android/server/tare/EconomyManagerInternal$AffordabilityChangeListener;Lcom/android/server/tare/EconomyManagerInternal$ActionBill;)V+]Lcom/android/server/tare/Agent;Lcom/android/server/tare/Agent;]Lcom/android/server/tare/InternalResourceService;Lcom/android/server/tare/InternalResourceService;
+HSPLcom/android/server/tare/InternalResourceService$LocalService;->unregisterAffordabilityChangeListener(ILjava/lang/String;Lcom/android/server/tare/EconomyManagerInternal$AffordabilityChangeListener;Lcom/android/server/tare/EconomyManagerInternal$ActionBill;)V+]Lcom/android/server/tare/Agent;Lcom/android/server/tare/Agent;]Lcom/android/server/tare/InternalResourceService;Lcom/android/server/tare/InternalResourceService;
 PLcom/android/server/tare/InternalResourceService;->$r8$lambda$0WzwOHKU50UyxI6dsoLxMYjaEjc(Lcom/android/server/tare/InternalResourceService;JJ)V
 PLcom/android/server/tare/InternalResourceService;->$r8$lambda$6vievQs7vcv71frhGR6rTFzw8Zo(Lcom/android/server/tare/InternalResourceService;)V
 HSPLcom/android/server/tare/InternalResourceService;->-$$Nest$fgetmAgent(Lcom/android/server/tare/InternalResourceService;)Lcom/android/server/tare/Agent;
@@ -47848,7 +49515,7 @@
 HSPLcom/android/server/tare/InternalResourceService;->isSystem(ILjava/lang/String;)Z+]Lcom/android/server/tare/InternalResourceService;Lcom/android/server/tare/InternalResourceService;
 PLcom/android/server/tare/InternalResourceService;->lambda$scheduleUnusedWealthReclamationLocked$0(JJ)V
 PLcom/android/server/tare/InternalResourceService;->loadInstalledPackageListLocked()V
-HPLcom/android/server/tare/InternalResourceService;->maybePerformQuantitativeEasingLocked()V
+HPLcom/android/server/tare/InternalResourceService;->maybePerformQuantitativeEasingLocked()V+]Lcom/android/server/tare/Scribe;Lcom/android/server/tare/Scribe;
 HPLcom/android/server/tare/InternalResourceService;->onBatteryLevelChanged()V
 HSPLcom/android/server/tare/InternalResourceService;->onBootPhase(I)V
 PLcom/android/server/tare/InternalResourceService;->onDeviceStateChanged()V
@@ -47922,6 +49589,7 @@
 HSPLcom/android/server/tare/Scribe$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/tare/Scribe;)V
 PLcom/android/server/tare/Scribe$$ExternalSyntheticLambda1;->run()V
 PLcom/android/server/tare/Scribe$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/tare/Scribe;Landroid/util/IndentingPrintWriter;Z)V
+HPLcom/android/server/tare/Scribe$$ExternalSyntheticLambda2;->accept(ILjava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/tare/Scribe;->$r8$lambda$0gtn6R3Vmum7PweFgnG2JMPIuTU(Lcom/android/server/tare/Scribe;)V
 PLcom/android/server/tare/Scribe;->$r8$lambda$8CMNXiXstghl9Sv_j8dc2t-uUm8(Lcom/android/server/tare/Scribe;Landroid/util/IndentingPrintWriter;ZILjava/lang/String;Lcom/android/server/tare/Ledger;)V
 PLcom/android/server/tare/Scribe;->$r8$lambda$yJ_5syXNQUTlPkQFbHqUe0XRNs4(Lcom/android/server/tare/Scribe;)V
@@ -47939,16 +49607,16 @@
 HPLcom/android/server/tare/Scribe;->getRemainingConsumableCakesLocked()J
 PLcom/android/server/tare/Scribe;->getSatiatedConsumptionLimitLocked()J
 PLcom/android/server/tare/Scribe;->lambda$dumpLocked$0(Landroid/util/IndentingPrintWriter;ZILjava/lang/String;Lcom/android/server/tare/Ledger;)V
-PLcom/android/server/tare/Scribe;->loadFromDiskLocked()V
-HPLcom/android/server/tare/Scribe;->postWrite()V
-HPLcom/android/server/tare/Scribe;->readLedgerFromXml(Landroid/util/TypedXmlPullParser;Landroid/util/ArraySet;J)Landroid/util/Pair;
+HPLcom/android/server/tare/Scribe;->loadFromDiskLocked()V
+HPLcom/android/server/tare/Scribe;->postWrite()V+]Landroid/os/Handler;Landroid/os/Handler;
+HPLcom/android/server/tare/Scribe;->readLedgerFromXml(Landroid/util/TypedXmlPullParser;Landroid/util/ArraySet;J)Landroid/util/Pair;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/TypedXmlPullParser;Lcom/android/internal/util/BinaryXmlPullParser;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 PLcom/android/server/tare/Scribe;->readReportFromXml(Landroid/util/TypedXmlPullParser;)Lcom/android/server/tare/Analyst$Report;
 HPLcom/android/server/tare/Scribe;->readUserFromXmlLocked(Landroid/util/TypedXmlPullParser;Landroid/util/SparseArray;J)J
 PLcom/android/server/tare/Scribe;->recordExists()Z
 PLcom/android/server/tare/Scribe;->scheduleCleanup(J)V
 PLcom/android/server/tare/Scribe;->setLastReclamationTimeLocked(J)V
 HPLcom/android/server/tare/Scribe;->writeReport(Landroid/util/TypedXmlSerializer;Lcom/android/server/tare/Analyst$Report;)V
-HPLcom/android/server/tare/Scribe;->writeState()V
+HPLcom/android/server/tare/Scribe;->writeState()V+]Landroid/util/AtomicFile;Landroid/util/AtomicFile;]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/tare/Scribe;Lcom/android/server/tare/Scribe;]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Lcom/android/server/tare/Analyst;Lcom/android/server/tare/Analyst;]Lcom/android/server/tare/InternalResourceService;Lcom/android/server/tare/InternalResourceService;]Ljava/io/FileOutputStream;Ljava/io/FileOutputStream;
 HPLcom/android/server/tare/Scribe;->writeTransaction(Landroid/util/TypedXmlSerializer;Lcom/android/server/tare/Ledger$Transaction;)V+]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;
 HPLcom/android/server/tare/Scribe;->writeUserLocked(Landroid/util/TypedXmlSerializer;I)J+]Landroid/util/SparseArrayMap;Landroid/util/SparseArrayMap;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Lcom/android/server/tare/Ledger;Lcom/android/server/tare/Ledger;
 HSPLcom/android/server/tare/TareHandlerThread;-><init>()V
@@ -47966,37 +49634,37 @@
 PLcom/android/server/telecom/InternalServiceRepository$1;->exemptAppTemporarilyForEvent(Ljava/lang/String;JILjava/lang/String;)V
 PLcom/android/server/telecom/InternalServiceRepository;->-$$Nest$fgetmDeviceIdleController(Lcom/android/server/telecom/InternalServiceRepository;)Lcom/android/server/DeviceIdleInternal;
 HSPLcom/android/server/telecom/InternalServiceRepository;-><init>(Lcom/android/server/DeviceIdleInternal;)V
-PLcom/android/server/telecom/InternalServiceRepository;->ensureSystemProcess()V
-PLcom/android/server/telecom/InternalServiceRepository;->getDeviceIdleController()Lcom/android/internal/telecom/IDeviceIdleControllerAdapter;
+HSPLcom/android/server/telecom/InternalServiceRepository;->ensureSystemProcess()V
+HSPLcom/android/server/telecom/InternalServiceRepository;->getDeviceIdleController()Lcom/android/internal/telecom/IDeviceIdleControllerAdapter;
 HSPLcom/android/server/telecom/TelecomLoaderService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/telecom/TelecomLoaderService;)V
-PLcom/android/server/telecom/TelecomLoaderService$$ExternalSyntheticLambda0;->getPackages(I)[Ljava/lang/String;
+HSPLcom/android/server/telecom/TelecomLoaderService$$ExternalSyntheticLambda0;->getPackages(I)[Ljava/lang/String;
 HSPLcom/android/server/telecom/TelecomLoaderService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/telecom/TelecomLoaderService;)V
-PLcom/android/server/telecom/TelecomLoaderService$$ExternalSyntheticLambda1;->getPackages(I)[Ljava/lang/String;
+HSPLcom/android/server/telecom/TelecomLoaderService$$ExternalSyntheticLambda1;->getPackages(I)[Ljava/lang/String;
 HSPLcom/android/server/telecom/TelecomLoaderService$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/telecom/TelecomLoaderService;)V
-PLcom/android/server/telecom/TelecomLoaderService$$ExternalSyntheticLambda2;->getPackages(I)[Ljava/lang/String;
+HSPLcom/android/server/telecom/TelecomLoaderService$$ExternalSyntheticLambda2;->getPackages(I)[Ljava/lang/String;
 HSPLcom/android/server/telecom/TelecomLoaderService$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/telecom/TelecomLoaderService;)V
 PLcom/android/server/telecom/TelecomLoaderService$$ExternalSyntheticLambda3;->onRoleHoldersChanged(Ljava/lang/String;Landroid/os/UserHandle;)V
 HSPLcom/android/server/telecom/TelecomLoaderService$1;-><init>(Lcom/android/server/telecom/TelecomLoaderService;)V
 PLcom/android/server/telecom/TelecomLoaderService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/telecom/TelecomLoaderService$TelecomServiceConnection;-><init>(Lcom/android/server/telecom/TelecomLoaderService;)V
 HSPLcom/android/server/telecom/TelecomLoaderService$TelecomServiceConnection;-><init>(Lcom/android/server/telecom/TelecomLoaderService;Lcom/android/server/telecom/TelecomLoaderService$TelecomServiceConnection-IA;)V
-PLcom/android/server/telecom/TelecomLoaderService$TelecomServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
-PLcom/android/server/telecom/TelecomLoaderService;->$r8$lambda$29uo3akrJVM9ql-ynPZGjI7w7cs(Lcom/android/server/telecom/TelecomLoaderService;I)[Ljava/lang/String;
-PLcom/android/server/telecom/TelecomLoaderService;->$r8$lambda$VX3H7IFPxN9BpIPus6fQztWmMOk(Lcom/android/server/telecom/TelecomLoaderService;I)[Ljava/lang/String;
-PLcom/android/server/telecom/TelecomLoaderService;->$r8$lambda$dqrtRwAN6K4zhsxWm512q3KK_jU(Lcom/android/server/telecom/TelecomLoaderService;I)[Ljava/lang/String;
+HSPLcom/android/server/telecom/TelecomLoaderService$TelecomServiceConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HSPLcom/android/server/telecom/TelecomLoaderService;->$r8$lambda$29uo3akrJVM9ql-ynPZGjI7w7cs(Lcom/android/server/telecom/TelecomLoaderService;I)[Ljava/lang/String;
+HSPLcom/android/server/telecom/TelecomLoaderService;->$r8$lambda$VX3H7IFPxN9BpIPus6fQztWmMOk(Lcom/android/server/telecom/TelecomLoaderService;I)[Ljava/lang/String;
+HSPLcom/android/server/telecom/TelecomLoaderService;->$r8$lambda$dqrtRwAN6K4zhsxWm512q3KK_jU(Lcom/android/server/telecom/TelecomLoaderService;I)[Ljava/lang/String;
 PLcom/android/server/telecom/TelecomLoaderService;->$r8$lambda$xg-UIxkabAX3NfXZvxXPnX7oji4(Lcom/android/server/telecom/TelecomLoaderService;Ljava/lang/String;Landroid/os/UserHandle;)V
-PLcom/android/server/telecom/TelecomLoaderService;->-$$Nest$fgetmContext(Lcom/android/server/telecom/TelecomLoaderService;)Landroid/content/Context;
-PLcom/android/server/telecom/TelecomLoaderService;->-$$Nest$fgetmDefaultSimCallManagerRequests(Lcom/android/server/telecom/TelecomLoaderService;)Landroid/util/IntArray;
-PLcom/android/server/telecom/TelecomLoaderService;->-$$Nest$fgetmLock(Lcom/android/server/telecom/TelecomLoaderService;)Ljava/lang/Object;
-PLcom/android/server/telecom/TelecomLoaderService;->-$$Nest$fgetmServiceRepo(Lcom/android/server/telecom/TelecomLoaderService;)Lcom/android/server/telecom/InternalServiceRepository;
+HSPLcom/android/server/telecom/TelecomLoaderService;->-$$Nest$fgetmContext(Lcom/android/server/telecom/TelecomLoaderService;)Landroid/content/Context;
+HSPLcom/android/server/telecom/TelecomLoaderService;->-$$Nest$fgetmDefaultSimCallManagerRequests(Lcom/android/server/telecom/TelecomLoaderService;)Landroid/util/IntArray;
+HSPLcom/android/server/telecom/TelecomLoaderService;->-$$Nest$fgetmLock(Lcom/android/server/telecom/TelecomLoaderService;)Ljava/lang/Object;
+HSPLcom/android/server/telecom/TelecomLoaderService;->-$$Nest$fgetmServiceRepo(Lcom/android/server/telecom/TelecomLoaderService;)Lcom/android/server/telecom/InternalServiceRepository;
 PLcom/android/server/telecom/TelecomLoaderService;->-$$Nest$mupdateSimCallManagerPermissions(Lcom/android/server/telecom/TelecomLoaderService;I)V
 HSPLcom/android/server/telecom/TelecomLoaderService;-><clinit>()V
 HSPLcom/android/server/telecom/TelecomLoaderService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/telecom/TelecomLoaderService;->connectToTelecom()V
 PLcom/android/server/telecom/TelecomLoaderService;->lambda$registerDefaultAppNotifier$3(Ljava/lang/String;Landroid/os/UserHandle;)V
-PLcom/android/server/telecom/TelecomLoaderService;->lambda$registerDefaultAppProviders$0(I)[Ljava/lang/String;
-PLcom/android/server/telecom/TelecomLoaderService;->lambda$registerDefaultAppProviders$1(I)[Ljava/lang/String;
-PLcom/android/server/telecom/TelecomLoaderService;->lambda$registerDefaultAppProviders$2(I)[Ljava/lang/String;
+HSPLcom/android/server/telecom/TelecomLoaderService;->lambda$registerDefaultAppProviders$0(I)[Ljava/lang/String;
+HSPLcom/android/server/telecom/TelecomLoaderService;->lambda$registerDefaultAppProviders$1(I)[Ljava/lang/String;
+HSPLcom/android/server/telecom/TelecomLoaderService;->lambda$registerDefaultAppProviders$2(I)[Ljava/lang/String;
 HSPLcom/android/server/telecom/TelecomLoaderService;->onBootPhase(I)V
 HSPLcom/android/server/telecom/TelecomLoaderService;->onStart()V
 HSPLcom/android/server/telecom/TelecomLoaderService;->registerCarrierConfigChangedReceiver()V
@@ -48024,9 +49692,9 @@
 PLcom/android/server/textclassifier/IconsContentProvider;->$r8$lambda$jTokAbzW_SVvyhrkiNRxI_8kO8I(Lcom/android/server/textclassifier/IconsContentProvider;Landroid/os/ParcelFileDescriptor;Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/util/Pair;)V
 HSPLcom/android/server/textclassifier/IconsContentProvider;-><init>()V
 PLcom/android/server/textclassifier/IconsContentProvider;->getBitmap(Landroid/graphics/drawable/Drawable;)Landroid/graphics/Bitmap;
-PLcom/android/server/textclassifier/IconsContentProvider;->lambda$new$0(Landroid/os/ParcelFileDescriptor;Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/util/Pair;)V
+HPLcom/android/server/textclassifier/IconsContentProvider;->lambda$new$0(Landroid/os/ParcelFileDescriptor;Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/util/Pair;)V
 HSPLcom/android/server/textclassifier/IconsContentProvider;->onCreate()Z
-PLcom/android/server/textclassifier/IconsContentProvider;->openFile(Landroid/net/Uri;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;
+HPLcom/android/server/textclassifier/IconsContentProvider;->openFile(Landroid/net/Uri;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;
 PLcom/android/server/textclassifier/IconsUriHelper$$ExternalSyntheticLambda0;-><init>()V
 PLcom/android/server/textclassifier/IconsUriHelper$$ExternalSyntheticLambda0;->get()Ljava/lang/Object;
 PLcom/android/server/textclassifier/IconsUriHelper$ResourceInfo;-><init>(Ljava/lang/String;I)V
@@ -48034,7 +49702,7 @@
 PLcom/android/server/textclassifier/IconsUriHelper;->$r8$lambda$XBms8Xe-RBU7GqcU8VdyTW9Tt9A()Ljava/lang/String;
 PLcom/android/server/textclassifier/IconsUriHelper;-><clinit>()V
 PLcom/android/server/textclassifier/IconsUriHelper;-><init>(Ljava/util/function/Supplier;)V
-PLcom/android/server/textclassifier/IconsUriHelper;->getContentUri(Ljava/lang/String;I)Landroid/net/Uri;
+HPLcom/android/server/textclassifier/IconsUriHelper;->getContentUri(Ljava/lang/String;I)Landroid/net/Uri;
 PLcom/android/server/textclassifier/IconsUriHelper;->getInstance()Lcom/android/server/textclassifier/IconsUriHelper;
 HPLcom/android/server/textclassifier/IconsUriHelper;->getResourceInfo(Landroid/net/Uri;)Lcom/android/server/textclassifier/IconsUriHelper$ResourceInfo;
 PLcom/android/server/textclassifier/IconsUriHelper;->lambda$static$0()Ljava/lang/String;
@@ -48077,7 +49745,7 @@
 PLcom/android/server/textclassifier/TextClassificationManagerService$CallbackWrapper;->rewriteTextClassificationIcons(Landroid/view/textclassifier/TextClassification;)Landroid/view/textclassifier/TextClassification;
 PLcom/android/server/textclassifier/TextClassificationManagerService$CallbackWrapper;->rewriteTextSelectionIcons(Landroid/os/Bundle;)V
 PLcom/android/server/textclassifier/TextClassificationManagerService$CallbackWrapper;->shouldRewriteIcon(Landroid/app/RemoteAction;)Z
-PLcom/android/server/textclassifier/TextClassificationManagerService$CallbackWrapper;->validAction(Landroid/app/RemoteAction;)Landroid/app/RemoteAction;
+HPLcom/android/server/textclassifier/TextClassificationManagerService$CallbackWrapper;->validAction(Landroid/app/RemoteAction;)Landroid/app/RemoteAction;
 HSPLcom/android/server/textclassifier/TextClassificationManagerService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/textclassifier/TextClassificationManagerService$Lifecycle;->onStart()V
 HSPLcom/android/server/textclassifier/TextClassificationManagerService$Lifecycle;->onUserStarting(Lcom/android/server/SystemService$TargetUser;)V
@@ -48258,7 +49926,7 @@
 PLcom/android/server/textservices/TextServicesManagerService$TextServicesData;-><init>(ILandroid/content/Context;)V
 PLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->dump(Ljava/io/PrintWriter;)V
 HPLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->getBoolean(Ljava/lang/String;Z)Z
-HPLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->getCurrentSpellChecker()Landroid/view/textservice/SpellCheckerInfo;
+HPLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->getCurrentSpellChecker()Landroid/view/textservice/SpellCheckerInfo;+]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;
 HPLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->getInt(Ljava/lang/String;I)I
 HPLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->getSelectedSpellChecker()Ljava/lang/String;
 HPLcom/android/server/textservices/TextServicesManagerService$TextServicesData;->getSelectedSpellCheckerSubtype(I)I
@@ -48285,14 +49953,14 @@
 PLcom/android/server/textservices/TextServicesManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/textservices/TextServicesManagerService;->findAvailSystemSpellCheckerLocked(Ljava/lang/String;Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;)Landroid/view/textservice/SpellCheckerInfo;
 HPLcom/android/server/textservices/TextServicesManagerService;->finishSpellCheckerService(ILcom/android/internal/textservice/ISpellCheckerSessionListener;)V
-HPLcom/android/server/textservices/TextServicesManagerService;->getCurrentSpellChecker(ILjava/lang/String;)Landroid/view/textservice/SpellCheckerInfo;
+HPLcom/android/server/textservices/TextServicesManagerService;->getCurrentSpellChecker(ILjava/lang/String;)Landroid/view/textservice/SpellCheckerInfo;+]Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;]Lcom/android/server/textservices/TextServicesManagerService;Lcom/android/server/textservices/TextServicesManagerService;
 HSPLcom/android/server/textservices/TextServicesManagerService;->getCurrentSpellCheckerForUser(I)Landroid/view/textservice/SpellCheckerInfo;
 HPLcom/android/server/textservices/TextServicesManagerService;->getCurrentSpellCheckerSubtype(IZ)Landroid/view/textservice/SpellCheckerSubtype;+]Landroid/view/textservice/SpellCheckerInfo;Landroid/view/textservice/SpellCheckerInfo;]Ljava/util/Locale;Ljava/util/Locale;]Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/view/textservice/SpellCheckerSubtype;Landroid/view/textservice/SpellCheckerSubtype;]Lcom/android/server/textservices/TextServicesManagerService;Lcom/android/server/textservices/TextServicesManagerService;
-HPLcom/android/server/textservices/TextServicesManagerService;->getDataFromCallingUserIdLocked(I)Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;
+HPLcom/android/server/textservices/TextServicesManagerService;->getDataFromCallingUserIdLocked(I)Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/textservices/TextServicesManagerService;->getEnabledSpellCheckers(I)[Landroid/view/textservice/SpellCheckerInfo;
 HPLcom/android/server/textservices/TextServicesManagerService;->getSpellCheckerService(ILjava/lang/String;Ljava/lang/String;Lcom/android/internal/textservice/ITextServicesSessionListener;Lcom/android/internal/textservice/ISpellCheckerSessionListener;Landroid/os/Bundle;I)V
 PLcom/android/server/textservices/TextServicesManagerService;->initializeInternalStateLocked(I)V
-HPLcom/android/server/textservices/TextServicesManagerService;->isSpellCheckerEnabled(I)Z
+HPLcom/android/server/textservices/TextServicesManagerService;->isSpellCheckerEnabled(I)Z+]Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;]Lcom/android/server/textservices/TextServicesManagerService;Lcom/android/server/textservices/TextServicesManagerService;
 PLcom/android/server/textservices/TextServicesManagerService;->onStopUser(I)V
 PLcom/android/server/textservices/TextServicesManagerService;->onUnlockUser(I)V
 PLcom/android/server/textservices/TextServicesManagerService;->setCurrentSpellCheckerLocked(Landroid/view/textservice/SpellCheckerInfo;Lcom/android/server/textservices/TextServicesManagerService$TextServicesData;)V
@@ -48336,7 +50004,7 @@
 PLcom/android/server/texttospeech/TextToSpeechManagerPerUserService;->runSessionCallbackMethod(Lcom/android/server/texttospeech/TextToSpeechManagerPerUserService$ThrowingRunnable;)V
 HSPLcom/android/server/texttospeech/TextToSpeechManagerService$TextToSpeechManagerServiceStub;-><init>(Lcom/android/server/texttospeech/TextToSpeechManagerService;)V
 HSPLcom/android/server/texttospeech/TextToSpeechManagerService$TextToSpeechManagerServiceStub;-><init>(Lcom/android/server/texttospeech/TextToSpeechManagerService;Lcom/android/server/texttospeech/TextToSpeechManagerService$TextToSpeechManagerServiceStub-IA;)V
-PLcom/android/server/texttospeech/TextToSpeechManagerService$TextToSpeechManagerServiceStub;->createSession(Ljava/lang/String;Landroid/speech/tts/ITextToSpeechSessionCallback;)V
+HPLcom/android/server/texttospeech/TextToSpeechManagerService$TextToSpeechManagerServiceStub;->createSession(Ljava/lang/String;Landroid/speech/tts/ITextToSpeechSessionCallback;)V
 HSPLcom/android/server/texttospeech/TextToSpeechManagerService;-><clinit>()V
 HSPLcom/android/server/texttospeech/TextToSpeechManagerService;-><init>(Landroid/content/Context;)V
 PLcom/android/server/texttospeech/TextToSpeechManagerService;->access$000(Lcom/android/server/texttospeech/TextToSpeechManagerService;)Ljava/lang/Object;
@@ -48349,7 +50017,7 @@
 PLcom/android/server/timedetector/EnvironmentImpl$1;->onChange(Z)V
 PLcom/android/server/timedetector/EnvironmentImpl;->-$$Nest$mhandleAutoTimeDetectionChangedOnHandlerThread(Lcom/android/server/timedetector/EnvironmentImpl;)V
 HSPLcom/android/server/timedetector/EnvironmentImpl;-><init>(Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/timedetector/ServiceConfigAccessor;)V
-PLcom/android/server/timedetector/EnvironmentImpl;->acquireWakeLock()V
+HPLcom/android/server/timedetector/EnvironmentImpl;->acquireWakeLock()V
 PLcom/android/server/timedetector/EnvironmentImpl;->autoOriginPriorities()[I
 PLcom/android/server/timedetector/EnvironmentImpl;->autoTimeLowerBound()Ljava/time/Instant;
 PLcom/android/server/timedetector/EnvironmentImpl;->checkWakeLockHeld()V
@@ -48369,7 +50037,7 @@
 HSPLcom/android/server/timedetector/ServerFlags;->addListener(Lcom/android/server/timezonedetector/ConfigurationChangeListener;Ljava/util/Set;)V
 PLcom/android/server/timedetector/ServerFlags;->containsAny(Ljava/util/Set;Ljava/lang/Iterable;)Z
 HSPLcom/android/server/timedetector/ServerFlags;->getBoolean(Ljava/lang/String;Z)Z
-PLcom/android/server/timedetector/ServerFlags;->getDurationFromMillis(Ljava/lang/String;Ljava/time/Duration;)Ljava/time/Duration;
+HSPLcom/android/server/timedetector/ServerFlags;->getDurationFromMillis(Ljava/lang/String;Ljava/time/Duration;)Ljava/time/Duration;
 HSPLcom/android/server/timedetector/ServerFlags;->getInstance(Landroid/content/Context;)Lcom/android/server/timedetector/ServerFlags;
 HSPLcom/android/server/timedetector/ServerFlags;->getOptionalBoolean(Ljava/lang/String;)Ljava/util/Optional;
 PLcom/android/server/timedetector/ServerFlags;->getOptionalInstant(Ljava/lang/String;)Ljava/util/Optional;
@@ -48379,17 +50047,17 @@
 HSPLcom/android/server/timedetector/ServerFlags;->parseOptionalBoolean(Ljava/lang/String;)Ljava/util/Optional;
 HSPLcom/android/server/timedetector/ServiceConfigAccessor$BaseOriginPrioritiesSupplier;-><init>()V
 HSPLcom/android/server/timedetector/ServiceConfigAccessor$BaseOriginPrioritiesSupplier;-><init>(Lcom/android/server/timedetector/ServiceConfigAccessor$BaseOriginPrioritiesSupplier-IA;)V
-PLcom/android/server/timedetector/ServiceConfigAccessor$BaseOriginPrioritiesSupplier;->get()[I
+HPLcom/android/server/timedetector/ServiceConfigAccessor$BaseOriginPrioritiesSupplier;->get()[I
 HSPLcom/android/server/timedetector/ServiceConfigAccessor$ConfigOriginPrioritiesSupplier;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/timedetector/ServiceConfigAccessor$ConfigOriginPrioritiesSupplier;-><init>(Landroid/content/Context;Lcom/android/server/timedetector/ServiceConfigAccessor$ConfigOriginPrioritiesSupplier-IA;)V
 PLcom/android/server/timedetector/ServiceConfigAccessor$ConfigOriginPrioritiesSupplier;->lookupPriorityStrings()[Ljava/lang/String;
 HSPLcom/android/server/timedetector/ServiceConfigAccessor$ServerFlagsOriginPrioritiesSupplier;-><init>(Lcom/android/server/timedetector/ServerFlags;)V
 HSPLcom/android/server/timedetector/ServiceConfigAccessor$ServerFlagsOriginPrioritiesSupplier;-><init>(Lcom/android/server/timedetector/ServerFlags;Lcom/android/server/timedetector/ServiceConfigAccessor$ServerFlagsOriginPrioritiesSupplier-IA;)V
-PLcom/android/server/timedetector/ServiceConfigAccessor$ServerFlagsOriginPrioritiesSupplier;->lookupPriorityStrings()[Ljava/lang/String;
+HPLcom/android/server/timedetector/ServiceConfigAccessor$ServerFlagsOriginPrioritiesSupplier;->lookupPriorityStrings()[Ljava/lang/String;
 HSPLcom/android/server/timedetector/ServiceConfigAccessor;-><clinit>()V
 HSPLcom/android/server/timedetector/ServiceConfigAccessor;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/timedetector/ServiceConfigAccessor;->addListener(Lcom/android/server/timezonedetector/ConfigurationChangeListener;)V
-PLcom/android/server/timedetector/ServiceConfigAccessor;->autoTimeLowerBound()Ljava/time/Instant;
+HPLcom/android/server/timedetector/ServiceConfigAccessor;->autoTimeLowerBound()Ljava/time/Instant;
 HSPLcom/android/server/timedetector/ServiceConfigAccessor;->getInstance(Landroid/content/Context;)Lcom/android/server/timedetector/ServiceConfigAccessor;
 PLcom/android/server/timedetector/ServiceConfigAccessor;->getOriginPriorities()[I
 PLcom/android/server/timedetector/ServiceConfigAccessor;->systemClockUpdateThresholdMillis()I
@@ -48411,8 +50079,8 @@
 PLcom/android/server/timedetector/TimeDetectorService;->lambda$suggestTelephonyTime$0(Landroid/app/timedetector/TelephonyTimeSuggestion;)V
 PLcom/android/server/timedetector/TimeDetectorService;->suggestManualTime(Landroid/app/timedetector/ManualTimeSuggestion;)Z
 PLcom/android/server/timedetector/TimeDetectorService;->suggestNetworkTime(Landroid/app/timedetector/NetworkTimeSuggestion;)V
-PLcom/android/server/timedetector/TimeDetectorService;->suggestTelephonyTime(Landroid/app/timedetector/TelephonyTimeSuggestion;)V
-PLcom/android/server/timedetector/TimeDetectorStrategy;->getTimeAt(Landroid/os/TimestampedValue;J)J
+HPLcom/android/server/timedetector/TimeDetectorService;->suggestTelephonyTime(Landroid/app/timedetector/TelephonyTimeSuggestion;)V
+HPLcom/android/server/timedetector/TimeDetectorStrategy;->getTimeAt(Landroid/os/TimestampedValue;J)J
 PLcom/android/server/timedetector/TimeDetectorStrategy;->originToString(I)Ljava/lang/String;
 PLcom/android/server/timedetector/TimeDetectorStrategy;->stringToOrigin(Ljava/lang/String;)I
 HSPLcom/android/server/timedetector/TimeDetectorStrategyImpl$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/timedetector/TimeDetectorStrategyImpl;)V
@@ -48425,7 +50093,7 @@
 HPLcom/android/server/timedetector/TimeDetectorStrategyImpl;->doAutoTimeDetection(Ljava/lang/String;)V
 PLcom/android/server/timedetector/TimeDetectorStrategyImpl;->dump(Landroid/util/IndentingPrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/timedetector/TimeDetectorStrategyImpl;->findBestTelephonySuggestion()Landroid/app/timedetector/TelephonyTimeSuggestion;
-PLcom/android/server/timedetector/TimeDetectorStrategyImpl;->findLatestValidNetworkSuggestion()Landroid/app/timedetector/NetworkTimeSuggestion;
+HPLcom/android/server/timedetector/TimeDetectorStrategyImpl;->findLatestValidNetworkSuggestion()Landroid/app/timedetector/NetworkTimeSuggestion;
 PLcom/android/server/timedetector/TimeDetectorStrategyImpl;->handleAutoTimeConfigChanged()V
 PLcom/android/server/timedetector/TimeDetectorStrategyImpl;->isOriginAutomatic(I)Z
 PLcom/android/server/timedetector/TimeDetectorStrategyImpl;->scoreTelephonySuggestion(JLandroid/app/timedetector/TelephonyTimeSuggestion;)I
@@ -48434,17 +50102,17 @@
 HPLcom/android/server/timedetector/TimeDetectorStrategyImpl;->storeTelephonySuggestion(Landroid/app/timedetector/TelephonyTimeSuggestion;)Z
 PLcom/android/server/timedetector/TimeDetectorStrategyImpl;->suggestManualTime(Landroid/app/timedetector/ManualTimeSuggestion;)Z
 HPLcom/android/server/timedetector/TimeDetectorStrategyImpl;->suggestNetworkTime(Landroid/app/timedetector/NetworkTimeSuggestion;)V
-PLcom/android/server/timedetector/TimeDetectorStrategyImpl;->suggestTelephonyTime(Landroid/app/timedetector/TelephonyTimeSuggestion;)V
+HPLcom/android/server/timedetector/TimeDetectorStrategyImpl;->suggestTelephonyTime(Landroid/app/timedetector/TelephonyTimeSuggestion;)V
 PLcom/android/server/timedetector/TimeDetectorStrategyImpl;->validateAutoSuggestionTime(Landroid/os/TimestampedValue;Ljava/lang/Object;)Z
-PLcom/android/server/timedetector/TimeDetectorStrategyImpl;->validateSuggestionAgainstLowerBound(Landroid/os/TimestampedValue;Ljava/lang/Object;)Z
-PLcom/android/server/timedetector/TimeDetectorStrategyImpl;->validateSuggestionTime(Landroid/os/TimestampedValue;Ljava/lang/Object;)Z
+HPLcom/android/server/timedetector/TimeDetectorStrategyImpl;->validateSuggestionAgainstLowerBound(Landroid/os/TimestampedValue;Ljava/lang/Object;)Z
+HPLcom/android/server/timedetector/TimeDetectorStrategyImpl;->validateSuggestionTime(Landroid/os/TimestampedValue;Ljava/lang/Object;)Z
 PLcom/android/server/timedetector/TimeDetectorStrategyImpl;->validateSuggestionUnixEpochTime(JLandroid/os/TimestampedValue;)Z
 HSPLcom/android/server/timezonedetector/ArrayMapWithHistory;-><init>(I)V
 PLcom/android/server/timezonedetector/ArrayMapWithHistory;->dump(Landroid/util/IndentingPrintWriter;)V
 PLcom/android/server/timezonedetector/ArrayMapWithHistory;->get(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/timezonedetector/ArrayMapWithHistory;->keyAt(I)Ljava/lang/Object;
 PLcom/android/server/timezonedetector/ArrayMapWithHistory;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/timezonedetector/ArrayMapWithHistory;->size()I
+HSPLcom/android/server/timezonedetector/ArrayMapWithHistory;->size()I
 PLcom/android/server/timezonedetector/ArrayMapWithHistory;->valueAt(I)Ljava/lang/Object;
 HSPLcom/android/server/timezonedetector/CallerIdentityInjector$Real;-><init>()V
 PLcom/android/server/timezonedetector/CallerIdentityInjector$Real;->clearCallingIdentity()J
@@ -48477,22 +50145,22 @@
 PLcom/android/server/timezonedetector/ConfigurationInternal;->asCapabilities()Landroid/app/time/TimeZoneCapabilities;
 PLcom/android/server/timezonedetector/ConfigurationInternal;->asConfiguration()Landroid/app/time/TimeZoneConfiguration;
 PLcom/android/server/timezonedetector/ConfigurationInternal;->createCapabilitiesAndConfig()Landroid/app/time/TimeZoneCapabilitiesAndConfig;
-PLcom/android/server/timezonedetector/ConfigurationInternal;->equals(Ljava/lang/Object;)Z
-PLcom/android/server/timezonedetector/ConfigurationInternal;->getAutoDetectionEnabledBehavior()Z
+HSPLcom/android/server/timezonedetector/ConfigurationInternal;->equals(Ljava/lang/Object;)Z
+HSPLcom/android/server/timezonedetector/ConfigurationInternal;->getAutoDetectionEnabledBehavior()Z
 PLcom/android/server/timezonedetector/ConfigurationInternal;->getAutoDetectionEnabledSetting()Z
-PLcom/android/server/timezonedetector/ConfigurationInternal;->getDetectionMode()I
+HSPLcom/android/server/timezonedetector/ConfigurationInternal;->getDetectionMode()I
 HSPLcom/android/server/timezonedetector/ConfigurationInternal;->getGeoDetectionEnabledSetting()Z
 HSPLcom/android/server/timezonedetector/ConfigurationInternal;->getGeoDetectionRunInBackgroundEnabled()Z
 HSPLcom/android/server/timezonedetector/ConfigurationInternal;->getLocationEnabledSetting()Z
 PLcom/android/server/timezonedetector/ConfigurationInternal;->getUserId()I
-PLcom/android/server/timezonedetector/ConfigurationInternal;->isAutoDetectionSupported()Z
+HSPLcom/android/server/timezonedetector/ConfigurationInternal;->isAutoDetectionSupported()Z
 PLcom/android/server/timezonedetector/ConfigurationInternal;->isEnhancedMetricsCollectionEnabled()Z
 HSPLcom/android/server/timezonedetector/ConfigurationInternal;->isGeoDetectionExecutionEnabled()Z
 HSPLcom/android/server/timezonedetector/ConfigurationInternal;->isGeoDetectionSupported()Z
 PLcom/android/server/timezonedetector/ConfigurationInternal;->isTelephonyDetectionSupported()Z
-PLcom/android/server/timezonedetector/ConfigurationInternal;->isTelephonyFallbackSupported()Z
+HSPLcom/android/server/timezonedetector/ConfigurationInternal;->isTelephonyFallbackSupported()Z
 PLcom/android/server/timezonedetector/ConfigurationInternal;->isUserConfigAllowed()Z
-HPLcom/android/server/timezonedetector/ConfigurationInternal;->toString()Ljava/lang/String;
+HSPLcom/android/server/timezonedetector/ConfigurationInternal;->toString()Ljava/lang/String;
 HSPLcom/android/server/timezonedetector/DeviceActivityMonitorImpl$1;-><init>(Lcom/android/server/timezonedetector/DeviceActivityMonitorImpl;Landroid/os/Handler;Landroid/content/ContentResolver;)V
 PLcom/android/server/timezonedetector/DeviceActivityMonitorImpl$1;->onChange(Z)V
 PLcom/android/server/timezonedetector/DeviceActivityMonitorImpl;->-$$Nest$mnotifyFlightComplete(Lcom/android/server/timezonedetector/DeviceActivityMonitorImpl;)V
@@ -48502,25 +50170,25 @@
 PLcom/android/server/timezonedetector/DeviceActivityMonitorImpl;->dump(Landroid/util/IndentingPrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/timezonedetector/DeviceActivityMonitorImpl;->notifyFlightComplete()V
 HSPLcom/android/server/timezonedetector/EnvironmentImpl$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/timezonedetector/EnvironmentImpl;Lcom/android/server/timezonedetector/ConfigurationChangeListener;)V
-PLcom/android/server/timezonedetector/EnvironmentImpl$$ExternalSyntheticLambda0;->onChange()V
-PLcom/android/server/timezonedetector/EnvironmentImpl$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/timezonedetector/ConfigurationChangeListener;)V
-PLcom/android/server/timezonedetector/EnvironmentImpl$$ExternalSyntheticLambda1;->run()V
-PLcom/android/server/timezonedetector/EnvironmentImpl;->$r8$lambda$nGWWD_UkuHE7JO-X_XfuMgJ7CXE(Lcom/android/server/timezonedetector/EnvironmentImpl;Lcom/android/server/timezonedetector/ConfigurationChangeListener;)V
+HSPLcom/android/server/timezonedetector/EnvironmentImpl$$ExternalSyntheticLambda0;->onChange()V
+HSPLcom/android/server/timezonedetector/EnvironmentImpl$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/timezonedetector/ConfigurationChangeListener;)V
+HSPLcom/android/server/timezonedetector/EnvironmentImpl$$ExternalSyntheticLambda1;->run()V
+HSPLcom/android/server/timezonedetector/EnvironmentImpl;->$r8$lambda$nGWWD_UkuHE7JO-X_XfuMgJ7CXE(Lcom/android/server/timezonedetector/EnvironmentImpl;Lcom/android/server/timezonedetector/ConfigurationChangeListener;)V
 HSPLcom/android/server/timezonedetector/EnvironmentImpl;-><init>(Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/timezonedetector/ServiceConfigAccessor;)V
 HSPLcom/android/server/timezonedetector/EnvironmentImpl;->elapsedRealtimeMillis()J
 HSPLcom/android/server/timezonedetector/EnvironmentImpl;->getCurrentUserConfigurationInternal()Lcom/android/server/timezonedetector/ConfigurationInternal;
 PLcom/android/server/timezonedetector/EnvironmentImpl;->getDeviceTimeZone()Ljava/lang/String;
 PLcom/android/server/timezonedetector/EnvironmentImpl;->isDeviceTimeZoneInitialized()Z
-PLcom/android/server/timezonedetector/EnvironmentImpl;->lambda$setConfigurationInternalChangeListener$0(Lcom/android/server/timezonedetector/ConfigurationChangeListener;)V
+HSPLcom/android/server/timezonedetector/EnvironmentImpl;->lambda$setConfigurationInternalChangeListener$0(Lcom/android/server/timezonedetector/ConfigurationChangeListener;)V
 HSPLcom/android/server/timezonedetector/EnvironmentImpl;->setConfigurationInternalChangeListener(Lcom/android/server/timezonedetector/ConfigurationChangeListener;)V
 PLcom/android/server/timezonedetector/EnvironmentImpl;->setDeviceTimeZone(Ljava/lang/String;)V
 PLcom/android/server/timezonedetector/GeolocationTimeZoneSuggestion;-><init>(JLjava/util/List;)V
-PLcom/android/server/timezonedetector/GeolocationTimeZoneSuggestion;->addDebugInfo([Ljava/lang/String;)V
+HPLcom/android/server/timezonedetector/GeolocationTimeZoneSuggestion;->addDebugInfo([Ljava/lang/String;)V
 PLcom/android/server/timezonedetector/GeolocationTimeZoneSuggestion;->createCertainSuggestion(JLjava/util/List;)Lcom/android/server/timezonedetector/GeolocationTimeZoneSuggestion;
 PLcom/android/server/timezonedetector/GeolocationTimeZoneSuggestion;->createUncertainSuggestion(J)Lcom/android/server/timezonedetector/GeolocationTimeZoneSuggestion;
 PLcom/android/server/timezonedetector/GeolocationTimeZoneSuggestion;->getEffectiveFromElapsedMillis()J
 PLcom/android/server/timezonedetector/GeolocationTimeZoneSuggestion;->getZoneIds()Ljava/util/List;
-PLcom/android/server/timezonedetector/GeolocationTimeZoneSuggestion;->toString()Ljava/lang/String;
+HPLcom/android/server/timezonedetector/GeolocationTimeZoneSuggestion;->toString()Ljava/lang/String;
 PLcom/android/server/timezonedetector/MetricsTimeZoneDetectorState$MetricsTimeZoneSuggestion;-><init>([Ljava/lang/String;[I)V
 PLcom/android/server/timezonedetector/MetricsTimeZoneDetectorState$MetricsTimeZoneSuggestion;->createCertain([Ljava/lang/String;[I)Lcom/android/server/timezonedetector/MetricsTimeZoneDetectorState$MetricsTimeZoneSuggestion;
 PLcom/android/server/timezonedetector/MetricsTimeZoneDetectorState$MetricsTimeZoneSuggestion;->createUncertain()Lcom/android/server/timezonedetector/MetricsTimeZoneDetectorState$MetricsTimeZoneSuggestion;
@@ -48554,18 +50222,18 @@
 HSPLcom/android/server/timezonedetector/ReferenceWithHistory;->get()Ljava/lang/Object;
 PLcom/android/server/timezonedetector/ReferenceWithHistory;->getHistoryCount()I
 HSPLcom/android/server/timezonedetector/ReferenceWithHistory;->set(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/timezonedetector/ReferenceWithHistory;->toString()Ljava/lang/String;
+HSPLcom/android/server/timezonedetector/ReferenceWithHistory;->toString()Ljava/lang/String;
 HSPLcom/android/server/timezonedetector/ServiceConfigAccessorImpl$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/timezonedetector/ServiceConfigAccessorImpl;)V
 PLcom/android/server/timezonedetector/ServiceConfigAccessorImpl$$ExternalSyntheticLambda0;->onChange()V
 PLcom/android/server/timezonedetector/ServiceConfigAccessorImpl$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/timezonedetector/ServiceConfigAccessorImpl;)V
 PLcom/android/server/timezonedetector/ServiceConfigAccessorImpl$$ExternalSyntheticLambda1;->run()V
 HSPLcom/android/server/timezonedetector/ServiceConfigAccessorImpl$1;-><init>(Lcom/android/server/timezonedetector/ServiceConfigAccessorImpl;)V
-PLcom/android/server/timezonedetector/ServiceConfigAccessorImpl$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/timezonedetector/ServiceConfigAccessorImpl$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/timezonedetector/ServiceConfigAccessorImpl$2;-><init>(Lcom/android/server/timezonedetector/ServiceConfigAccessorImpl;Landroid/os/Handler;)V
 PLcom/android/server/timezonedetector/ServiceConfigAccessorImpl$2;->onChange(Z)V
 PLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->$r8$lambda$bz2U3jm1PvzdgCTo5k1zx9uS1zA(Lcom/android/server/timezonedetector/ServiceConfigAccessorImpl;)V
 PLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->$r8$lambda$umxmze3PxZlugNMp6kHvpkcvYKk(Lcom/android/server/timezonedetector/ServiceConfigAccessorImpl;)V
-PLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->-$$Nest$mhandleConfigurationInternalChangeOnMainThread(Lcom/android/server/timezonedetector/ServiceConfigAccessorImpl;)V
+HSPLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->-$$Nest$mhandleConfigurationInternalChangeOnMainThread(Lcom/android/server/timezonedetector/ServiceConfigAccessorImpl;)V
 HSPLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;-><clinit>()V
 HSPLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->addConfigurationInternalChangeListener(Lcom/android/server/timezonedetector/ConfigurationChangeListener;)V
@@ -48580,9 +50248,9 @@
 HSPLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->getGeoDetectionSettingEnabledOverride()Ljava/util/Optional;
 HSPLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->getInstance(Landroid/content/Context;)Lcom/android/server/timezonedetector/ServiceConfigAccessor;
 HSPLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->getLocationEnabledSetting(I)Z
-PLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->getLocationTimeZoneProviderEventFilteringAgeThreshold()Ljava/time/Duration;
-PLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->getLocationTimeZoneProviderInitializationTimeout()Ljava/time/Duration;
-PLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->getLocationTimeZoneProviderInitializationTimeoutFuzz()Ljava/time/Duration;
+HSPLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->getLocationTimeZoneProviderEventFilteringAgeThreshold()Ljava/time/Duration;
+HSPLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->getLocationTimeZoneProviderInitializationTimeout()Ljava/time/Duration;
+HSPLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->getLocationTimeZoneProviderInitializationTimeoutFuzz()Ljava/time/Duration;
 PLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->getLocationTimeZoneUncertaintyDelay()Ljava/time/Duration;
 HSPLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->getPrimaryLocationTimeZoneProviderMode()Ljava/lang/String;
 HSPLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->getPrimaryLocationTimeZoneProviderModeFromConfig()Ljava/lang/String;
@@ -48591,7 +50259,8 @@
 HSPLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->getSecondaryLocationTimeZoneProviderMode()Ljava/lang/String;
 HSPLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->getSecondaryLocationTimeZoneProviderModeFromConfig()Ljava/lang/String;
 PLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->getSecondaryLocationTimeZoneProviderPackageName()Ljava/lang/String;
-PLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->handleConfigurationInternalChangeOnMainThread()V
+HSPLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->handleConfigurationInternalChangeOnMainThread()V
+PLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->isAutoDetectionFeatureSupported()Z
 HSPLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->isEnhancedMetricsCollectionEnabled()Z
 HSPLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->isGeoDetectionEnabledForUsersByDefault()Z
 HSPLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->isGeoTimeZoneDetectionFeatureSupported()Z
@@ -48603,6 +50272,10 @@
 HSPLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->isUserConfigAllowed(I)Z
 PLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->removeConfigurationInternalChangeListener(Lcom/android/server/timezonedetector/ConfigurationChangeListener;)V
 PLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->resetVolatileTestConfig()V
+PLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->setAutoDetectionEnabledIfRequired(Z)V
+PLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->setGeoDetectionEnabledSettingIfRequired(IZ)V
+PLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->storeConfiguration(ILandroid/app/time/TimeZoneConfiguration;)V
+PLcom/android/server/timezonedetector/ServiceConfigAccessorImpl;->updateConfiguration(ILandroid/app/time/TimeZoneConfiguration;)Z
 PLcom/android/server/timezonedetector/TimeZoneCanonicalizer;-><init>()V
 PLcom/android/server/timezonedetector/TimeZoneCanonicalizer;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/timezonedetector/TimeZoneCanonicalizer;->apply(Ljava/lang/String;)Ljava/lang/String;
@@ -48614,16 +50287,16 @@
 PLcom/android/server/timezonedetector/TimeZoneDetectorInternalImpl;->lambda$suggestGeolocationTimeZone$0(Lcom/android/server/timezonedetector/GeolocationTimeZoneSuggestion;)V
 PLcom/android/server/timezonedetector/TimeZoneDetectorInternalImpl;->suggestGeolocationTimeZone(Lcom/android/server/timezonedetector/GeolocationTimeZoneSuggestion;)V
 HSPLcom/android/server/timezonedetector/TimeZoneDetectorService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/timezonedetector/TimeZoneDetectorService;)V
-PLcom/android/server/timezonedetector/TimeZoneDetectorService$$ExternalSyntheticLambda0;->onChange()V
+HSPLcom/android/server/timezonedetector/TimeZoneDetectorService$$ExternalSyntheticLambda0;->onChange()V
 PLcom/android/server/timezonedetector/TimeZoneDetectorService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/timezonedetector/TimeZoneDetectorService;Landroid/app/timezonedetector/TelephonyTimeZoneSuggestion;)V
 PLcom/android/server/timezonedetector/TimeZoneDetectorService$$ExternalSyntheticLambda1;->run()V
-PLcom/android/server/timezonedetector/TimeZoneDetectorService$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/timezonedetector/TimeZoneDetectorService;)V
-PLcom/android/server/timezonedetector/TimeZoneDetectorService$$ExternalSyntheticLambda2;->run()V
+HSPLcom/android/server/timezonedetector/TimeZoneDetectorService$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/timezonedetector/TimeZoneDetectorService;)V
+HSPLcom/android/server/timezonedetector/TimeZoneDetectorService$$ExternalSyntheticLambda2;->run()V
 HSPLcom/android/server/timezonedetector/TimeZoneDetectorService$Lifecycle$1;-><init>(Lcom/android/server/timezonedetector/TimeZoneDetectorService$Lifecycle;Lcom/android/server/timezonedetector/TimeZoneDetectorStrategy;)V
 PLcom/android/server/timezonedetector/TimeZoneDetectorService$Lifecycle$1;->onFlightComplete()V
 HSPLcom/android/server/timezonedetector/TimeZoneDetectorService$Lifecycle;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/timezonedetector/TimeZoneDetectorService$Lifecycle;->onStart()V
-PLcom/android/server/timezonedetector/TimeZoneDetectorService;->$r8$lambda$6HSmh0sViD5oL_WtwpXO4c2ADmg(Lcom/android/server/timezonedetector/TimeZoneDetectorService;)V
+HSPLcom/android/server/timezonedetector/TimeZoneDetectorService;->$r8$lambda$6HSmh0sViD5oL_WtwpXO4c2ADmg(Lcom/android/server/timezonedetector/TimeZoneDetectorService;)V
 PLcom/android/server/timezonedetector/TimeZoneDetectorService;->$r8$lambda$hk2Ps258ErGOgqxVeHtTaAQ1l-w(Lcom/android/server/timezonedetector/TimeZoneDetectorService;Landroid/app/timezonedetector/TelephonyTimeZoneSuggestion;)V
 HSPLcom/android/server/timezonedetector/TimeZoneDetectorService;->-$$Nest$smcreate(Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/timezonedetector/ServiceConfigAccessor;Lcom/android/server/timezonedetector/TimeZoneDetectorStrategy;)Lcom/android/server/timezonedetector/TimeZoneDetectorService;
 HSPLcom/android/server/timezonedetector/TimeZoneDetectorService;-><init>(Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/timezonedetector/CallerIdentityInjector;Lcom/android/server/timezonedetector/ServiceConfigAccessor;Lcom/android/server/timezonedetector/TimeZoneDetectorStrategy;)V
@@ -48632,37 +50305,42 @@
 HSPLcom/android/server/timezonedetector/TimeZoneDetectorService;->create(Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/timezonedetector/ServiceConfigAccessor;Lcom/android/server/timezonedetector/TimeZoneDetectorStrategy;)Lcom/android/server/timezonedetector/TimeZoneDetectorService;
 PLcom/android/server/timezonedetector/TimeZoneDetectorService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/timezonedetector/TimeZoneDetectorService;->enforceManageTimeZoneDetectorPermission()V
+PLcom/android/server/timezonedetector/TimeZoneDetectorService;->enforceSuggestManualTimeZonePermission()V
 PLcom/android/server/timezonedetector/TimeZoneDetectorService;->enforceSuggestTelephonyTimeZonePermission()V
 PLcom/android/server/timezonedetector/TimeZoneDetectorService;->getCapabilitiesAndConfig()Landroid/app/time/TimeZoneCapabilitiesAndConfig;
 PLcom/android/server/timezonedetector/TimeZoneDetectorService;->getCapabilitiesAndConfig(I)Landroid/app/time/TimeZoneCapabilitiesAndConfig;
-PLcom/android/server/timezonedetector/TimeZoneDetectorService;->handleConfigurationInternalChangedOnHandlerThread()V
-PLcom/android/server/timezonedetector/TimeZoneDetectorService;->lambda$new$0()V
+HSPLcom/android/server/timezonedetector/TimeZoneDetectorService;->handleConfigurationInternalChangedOnHandlerThread()V
+HSPLcom/android/server/timezonedetector/TimeZoneDetectorService;->lambda$new$0()V
 PLcom/android/server/timezonedetector/TimeZoneDetectorService;->lambda$suggestTelephonyTimeZone$2(Landroid/app/timezonedetector/TelephonyTimeZoneSuggestion;)V
 PLcom/android/server/timezonedetector/TimeZoneDetectorService;->removeListener(Landroid/app/time/ITimeZoneDetectorListener;)V
+PLcom/android/server/timezonedetector/TimeZoneDetectorService;->suggestManualTimeZone(Landroid/app/timezonedetector/ManualTimeZoneSuggestion;)Z
 PLcom/android/server/timezonedetector/TimeZoneDetectorService;->suggestTelephonyTimeZone(Landroid/app/timezonedetector/TelephonyTimeZoneSuggestion;)V
+PLcom/android/server/timezonedetector/TimeZoneDetectorService;->updateConfiguration(ILandroid/app/time/TimeZoneConfiguration;)Z
+PLcom/android/server/timezonedetector/TimeZoneDetectorService;->updateConfiguration(Landroid/app/time/TimeZoneConfiguration;)Z
 HSPLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;)V
-PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl$$ExternalSyntheticLambda0;->onChange()V
+HSPLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl$$ExternalSyntheticLambda0;->onChange()V
 PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl$QualifiedTelephonyTimeZoneSuggestion;-><init>(Landroid/app/timezonedetector/TelephonyTimeZoneSuggestion;I)V
 PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl$QualifiedTelephonyTimeZoneSuggestion;->toString()Ljava/lang/String;
-PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->$r8$lambda$XFc6fNbxgIZNP6Z9K56FRJUdSWg(Lcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;)V
+HSPLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->$r8$lambda$XFc6fNbxgIZNP6Z9K56FRJUdSWg(Lcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;)V
 HSPLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;-><init>(Lcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl$Environment;)V
 HSPLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->create(Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/timezonedetector/ServiceConfigAccessor;)Lcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;
-PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->disableTelephonyFallbackIfNeeded()V
-PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->doAutoTimeZoneDetection(Lcom/android/server/timezonedetector/ConfigurationInternal;Ljava/lang/String;)V
-HPLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->doGeolocationTimeZoneDetection(Ljava/lang/String;)Z
-PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->doTelephonyTimeZoneDetection(Ljava/lang/String;)V
+HPLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->disableTelephonyFallbackIfNeeded()V
+HSPLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->doAutoTimeZoneDetection(Lcom/android/server/timezonedetector/ConfigurationInternal;Ljava/lang/String;)V
+HSPLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->doGeolocationTimeZoneDetection(Ljava/lang/String;)Z
+HSPLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->doTelephonyTimeZoneDetection(Ljava/lang/String;)V
 PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->dump(Landroid/util/IndentingPrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->enableTelephonyTimeZoneFallback()V
-PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->findBestTelephonySuggestion()Lcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl$QualifiedTelephonyTimeZoneSuggestion;
+HSPLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->findBestTelephonySuggestion()Lcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl$QualifiedTelephonyTimeZoneSuggestion;
 PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->formatDebugString(Landroid/os/TimestampedValue;)Ljava/lang/String;
 PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->generateMetricsState()Lcom/android/server/timezonedetector/MetricsTimeZoneDetectorState;
 PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->getLatestGeolocationSuggestion()Lcom/android/server/timezonedetector/GeolocationTimeZoneSuggestion;
 PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->getLatestManualSuggestion()Landroid/app/timezonedetector/ManualTimeZoneSuggestion;
-PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->handleConfigurationInternalChanged()V
-PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->logTimeZoneDetectorChange(Ljava/lang/String;)V
+HSPLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->handleConfigurationInternalChanged()V
+HSPLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->logTimeZoneDetectorChange(Ljava/lang/String;)V
 PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->scoreTelephonySuggestion(Landroid/app/timezonedetector/TelephonyTimeZoneSuggestion;)I
 PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->setDeviceTimeZoneIfRequired(Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->suggestGeolocationTimeZone(Lcom/android/server/timezonedetector/GeolocationTimeZoneSuggestion;)V
+HPLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->suggestGeolocationTimeZone(Lcom/android/server/timezonedetector/GeolocationTimeZoneSuggestion;)V
+PLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->suggestManualTimeZone(ILandroid/app/timezonedetector/ManualTimeZoneSuggestion;)Z
 HPLcom/android/server/timezonedetector/TimeZoneDetectorStrategyImpl;->suggestTelephonyTimeZone(Landroid/app/timezonedetector/TelephonyTimeZoneSuggestion;)V
 HSPLcom/android/server/timezonedetector/location/BinderLocationTimeZoneProvider$1;-><init>(Lcom/android/server/timezonedetector/location/BinderLocationTimeZoneProvider;)V
 PLcom/android/server/timezonedetector/location/BinderLocationTimeZoneProvider$1;->onProviderBound()V
@@ -48671,17 +50349,17 @@
 PLcom/android/server/timezonedetector/location/BinderLocationTimeZoneProvider;->-$$Nest$mhandleOnProviderBound(Lcom/android/server/timezonedetector/location/BinderLocationTimeZoneProvider;)V
 HSPLcom/android/server/timezonedetector/location/BinderLocationTimeZoneProvider;-><init>(Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderMetricsLogger;Lcom/android/server/timezonedetector/location/ThreadingDomain;Ljava/lang/String;Lcom/android/server/timezonedetector/location/LocationTimeZoneProviderProxy;Z)V
 PLcom/android/server/timezonedetector/location/BinderLocationTimeZoneProvider;->dump(Landroid/util/IndentingPrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/timezonedetector/location/BinderLocationTimeZoneProvider;->handleOnProviderBound()V
+HPLcom/android/server/timezonedetector/location/BinderLocationTimeZoneProvider;->handleOnProviderBound()V
 PLcom/android/server/timezonedetector/location/BinderLocationTimeZoneProvider;->onDestroy()V
 HSPLcom/android/server/timezonedetector/location/BinderLocationTimeZoneProvider;->onInitialize()V
-PLcom/android/server/timezonedetector/location/BinderLocationTimeZoneProvider;->onStartUpdates(Ljava/time/Duration;Ljava/time/Duration;)V
+HSPLcom/android/server/timezonedetector/location/BinderLocationTimeZoneProvider;->onStartUpdates(Ljava/time/Duration;Ljava/time/Duration;)V
 PLcom/android/server/timezonedetector/location/BinderLocationTimeZoneProvider;->onStopUpdates()V
-HPLcom/android/server/timezonedetector/location/BinderLocationTimeZoneProvider;->toString()Ljava/lang/String;
+HSPLcom/android/server/timezonedetector/location/BinderLocationTimeZoneProvider;->toString()Ljava/lang/String;
 HSPLcom/android/server/timezonedetector/location/HandlerThreadingDomain;-><init>(Landroid/os/Handler;)V
 HSPLcom/android/server/timezonedetector/location/HandlerThreadingDomain;->getHandler()Landroid/os/Handler;
 HSPLcom/android/server/timezonedetector/location/HandlerThreadingDomain;->getThread()Ljava/lang/Thread;
 HSPLcom/android/server/timezonedetector/location/HandlerThreadingDomain;->post(Ljava/lang/Runnable;)V
-PLcom/android/server/timezonedetector/location/HandlerThreadingDomain;->postDelayed(Ljava/lang/Runnable;Ljava/lang/Object;J)V
+HSPLcom/android/server/timezonedetector/location/HandlerThreadingDomain;->postDelayed(Ljava/lang/Runnable;Ljava/lang/Object;J)V
 PLcom/android/server/timezonedetector/location/HandlerThreadingDomain;->removeQueuedRunnables(Ljava/lang/Object;)V
 HSPLcom/android/server/timezonedetector/location/LocationTimeZoneManagerService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/timezonedetector/location/LocationTimeZoneManagerService;)V
 PLcom/android/server/timezonedetector/location/LocationTimeZoneManagerService$$ExternalSyntheticLambda0;->onChange()V
@@ -48720,32 +50398,32 @@
 PLcom/android/server/timezonedetector/location/LocationTimeZoneManagerService;->stopOnDomainThread()V
 PLcom/android/server/timezonedetector/location/LocationTimeZoneManagerService;->warnLog(Ljava/lang/String;)V
 PLcom/android/server/timezonedetector/location/LocationTimeZoneManagerService;->warnLog(Ljava/lang/String;Ljava/lang/Throwable;)V
-PLcom/android/server/timezonedetector/location/LocationTimeZoneProvider$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider;)V
+HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProvider$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider;)V
 PLcom/android/server/timezonedetector/location/LocationTimeZoneProvider$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderState;->-$$Nest$smprettyPrintStateEnum(I)Ljava/lang/String;
 HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderState;-><init>(Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider;ILandroid/service/timezone/TimeZoneProviderEvent;Lcom/android/server/timezonedetector/ConfigurationInternal;Ljava/lang/String;)V
 HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderState;->createStartingState(Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider;)Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderState;
 HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderState;->equals(Ljava/lang/Object;)Z
-PLcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderState;->isStarted()Z
+HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderState;->isStarted()Z
 PLcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderState;->isTerminated()Z
 HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderState;->newState(ILandroid/service/timezone/TimeZoneProviderEvent;Lcom/android/server/timezonedetector/ConfigurationInternal;Ljava/lang/String;)Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderState;
-PLcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderState;->prettyPrintStateEnum(I)Ljava/lang/String;
-HPLcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderState;->toString()Ljava/lang/String;
+HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderState;->prettyPrintStateEnum(I)Ljava/lang/String;
+HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderState;->toString()Ljava/lang/String;
 PLcom/android/server/timezonedetector/location/LocationTimeZoneProvider;->$r8$lambda$qbR8AtKpHfNrxEQ1exygjQponDA(Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider;)V
 HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProvider;-><init>(Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderMetricsLogger;Lcom/android/server/timezonedetector/location/ThreadingDomain;Ljava/lang/String;Lcom/android/server/timezonedetector/location/TimeZoneProviderEventPreProcessor;Z)V
-PLcom/android/server/timezonedetector/location/LocationTimeZoneProvider;->assertCurrentState(I)V
+HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProvider;->assertCurrentState(I)V
 PLcom/android/server/timezonedetector/location/LocationTimeZoneProvider;->assertIsStarted()V
 PLcom/android/server/timezonedetector/location/LocationTimeZoneProvider;->cancelInitializationTimeoutIfSet()V
 PLcom/android/server/timezonedetector/location/LocationTimeZoneProvider;->destroy()V
-PLcom/android/server/timezonedetector/location/LocationTimeZoneProvider;->getCurrentState()Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderState;
+HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProvider;->getCurrentState()Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderState;
 PLcom/android/server/timezonedetector/location/LocationTimeZoneProvider;->getName()Ljava/lang/String;
 PLcom/android/server/timezonedetector/location/LocationTimeZoneProvider;->handleInitializationTimeout()V
-PLcom/android/server/timezonedetector/location/LocationTimeZoneProvider;->handleTemporaryFailure(Ljava/lang/String;)V
+HPLcom/android/server/timezonedetector/location/LocationTimeZoneProvider;->handleTemporaryFailure(Ljava/lang/String;)V
 HPLcom/android/server/timezonedetector/location/LocationTimeZoneProvider;->handleTimeZoneProviderEvent(Landroid/service/timezone/TimeZoneProviderEvent;)V
 HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProvider;->initialize(Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderListener;)V
 HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProvider;->onSetCurrentState(Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderState;)V
 HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProvider;->setCurrentState(Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderState;Z)V
-PLcom/android/server/timezonedetector/location/LocationTimeZoneProvider;->startUpdates(Lcom/android/server/timezonedetector/ConfigurationInternal;Ljava/time/Duration;Ljava/time/Duration;Ljava/time/Duration;)V
+HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProvider;->startUpdates(Lcom/android/server/timezonedetector/ConfigurationInternal;Ljava/time/Duration;Ljava/time/Duration;Ljava/time/Duration;)V
 PLcom/android/server/timezonedetector/location/LocationTimeZoneProvider;->stopUpdates()V
 HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProviderController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;)V
 PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderController$$ExternalSyntheticLambda0;->onProviderStateChange(Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderState;)V
@@ -48762,36 +50440,36 @@
 PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;->destroy()V
 PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;->dump(Landroid/util/IndentingPrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;->handleProviderFailedStateChange(Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderState;)V
-PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;->handleProviderStartedStateChange(Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderState;)V
+HPLcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;->handleProviderStartedStateChange(Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderState;)V
 HPLcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;->handleProviderSuggestion(Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider;Landroid/service/timezone/TimeZoneProviderEvent;)V
-PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;->handleProviderUncertainty(Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider;JLjava/lang/String;)V
+HPLcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;->handleProviderUncertainty(Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider;JLjava/lang/String;)V
 HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;->initialize(Lcom/android/server/timezonedetector/location/LocationTimeZoneProviderController$Environment;Lcom/android/server/timezonedetector/location/LocationTimeZoneProviderController$Callback;)V
 PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;->lambda$handleProviderUncertainty$0(Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider;JLjava/time/Duration;)V
-PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;->makeSuggestion(Lcom/android/server/timezonedetector/GeolocationTimeZoneSuggestion;Ljava/lang/String;)V
-PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;->onConfigurationInternalChanged()V
-PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;->onProviderStateChange(Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderState;)V
+HPLcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;->makeSuggestion(Lcom/android/server/timezonedetector/GeolocationTimeZoneSuggestion;Ljava/lang/String;)V
+HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;->onConfigurationInternalChanged()V
+HPLcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;->onProviderStateChange(Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderState;)V
 PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;->onProviderUncertaintyTimeout(Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider;JLjava/time/Duration;)V
 HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;->setState(Ljava/lang/String;)V
 PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;->stopProvider(Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider;)V
 PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;->stopProviderIfStarted(Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider;)V
 PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;->stopProviders(Ljava/lang/String;)V
-PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;->tryStartProvider(Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider;Lcom/android/server/timezonedetector/ConfigurationInternal;)V
+HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;->tryStartProvider(Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider;Lcom/android/server/timezonedetector/ConfigurationInternal;)V
 HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerCallbackImpl;-><init>(Lcom/android/server/timezonedetector/location/ThreadingDomain;)V
-PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerCallbackImpl;->suggest(Lcom/android/server/timezonedetector/GeolocationTimeZoneSuggestion;)V
+HPLcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerCallbackImpl;->suggest(Lcom/android/server/timezonedetector/GeolocationTimeZoneSuggestion;)V
 HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl;Lcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;)V
-PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl$$ExternalSyntheticLambda0;->onChange()V
-PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;)V
-PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl$$ExternalSyntheticLambda1;->run()V
-PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl;->$r8$lambda$CdJ9kRUZ-Pw-PUZ9u5XvQDqpKLw(Lcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl;Lcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;)V
+HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl$$ExternalSyntheticLambda0;->onChange()V
+HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;)V
+HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl$$ExternalSyntheticLambda1;->run()V
+HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl;->$r8$lambda$CdJ9kRUZ-Pw-PUZ9u5XvQDqpKLw(Lcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl;Lcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;)V
 HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl;-><init>(Lcom/android/server/timezonedetector/location/ThreadingDomain;Lcom/android/server/timezonedetector/ServiceConfigAccessor;Lcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;)V
 PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl;->destroy()V
 PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl;->elapsedRealtimeMillis()J
 HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl;->getCurrentUserConfigurationInternal()Lcom/android/server/timezonedetector/ConfigurationInternal;
-PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl;->getProviderEventFilteringAgeThreshold()Ljava/time/Duration;
-PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl;->getProviderInitializationTimeout()Ljava/time/Duration;
-PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl;->getProviderInitializationTimeoutFuzz()Ljava/time/Duration;
+HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl;->getProviderEventFilteringAgeThreshold()Ljava/time/Duration;
+HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl;->getProviderInitializationTimeout()Ljava/time/Duration;
+HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl;->getProviderInitializationTimeoutFuzz()Ljava/time/Duration;
 PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl;->getUncertaintyDelay()Ljava/time/Duration;
-PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl;->lambda$new$0(Lcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;)V
+HSPLcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl;->lambda$new$0(Lcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;)V
 PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderProxy$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/timezonedetector/location/LocationTimeZoneProviderProxy;Landroid/service/timezone/TimeZoneProviderEvent;)V
 PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderProxy$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/timezonedetector/location/LocationTimeZoneProviderProxy;->$r8$lambda$1cqcAVjtmMOpNl5vPQouk_Qah-w(Lcom/android/server/timezonedetector/location/LocationTimeZoneProviderProxy;Landroid/service/timezone/TimeZoneProviderEvent;)V
@@ -48808,49 +50486,49 @@
 HSPLcom/android/server/timezonedetector/location/RealControllerMetricsLogger;-><init>()V
 HSPLcom/android/server/timezonedetector/location/RealControllerMetricsLogger;->metricsState(Ljava/lang/String;)I
 HSPLcom/android/server/timezonedetector/location/RealControllerMetricsLogger;->onStateChange(Ljava/lang/String;)V
-PLcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/timezonedetector/location/TimeZoneProviderRequest;Lcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy$ManagerProxy;)V
+HSPLcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/timezonedetector/location/TimeZoneProviderRequest;Lcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy$ManagerProxy;)V
 PLcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy$$ExternalSyntheticLambda0;->run(Landroid/os/IBinder;)V
 PLcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy$ManagerProxy;-><init>(Lcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy;)V
 PLcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy$ManagerProxy;-><init>(Lcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy;Lcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy$ManagerProxy-IA;)V
-PLcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy$ManagerProxy;->onTimeZoneProviderEvent(Landroid/service/timezone/TimeZoneProviderEvent;)V
+HPLcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy$ManagerProxy;->onTimeZoneProviderEvent(Landroid/service/timezone/TimeZoneProviderEvent;)V
 PLcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy;->$r8$lambda$fmUzObkB4HDReIJSehsvfAiZtVE(Lcom/android/server/timezonedetector/location/TimeZoneProviderRequest;Lcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy$ManagerProxy;Landroid/os/IBinder;)V
 PLcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy;->-$$Nest$fgetmManagerProxy(Lcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy;)Lcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy$ManagerProxy;
 HSPLcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy;-><init>(Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/timezonedetector/location/ThreadingDomain;Ljava/lang/String;Ljava/lang/String;Z)V
 PLcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy;->dump(Landroid/util/IndentingPrintWriter;[Ljava/lang/String;)V
-PLcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy;->lambda$trySendCurrentRequest$0(Lcom/android/server/timezonedetector/location/TimeZoneProviderRequest;Lcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy$ManagerProxy;Landroid/os/IBinder;)V
-PLcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy;->onBind(Landroid/os/IBinder;Lcom/android/server/servicewatcher/CurrentUserServiceSupplier$BoundServiceInfo;)V
+HPLcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy;->lambda$trySendCurrentRequest$0(Lcom/android/server/timezonedetector/location/TimeZoneProviderRequest;Lcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy$ManagerProxy;Landroid/os/IBinder;)V
+HPLcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy;->onBind(Landroid/os/IBinder;Lcom/android/server/servicewatcher/CurrentUserServiceSupplier$BoundServiceInfo;)V
 PLcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy;->onBind(Landroid/os/IBinder;Lcom/android/server/servicewatcher/ServiceWatcher$BoundServiceInfo;)V
 PLcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy;->onDestroy()V
 HSPLcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy;->onInitialize()V
-PLcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy;->onUnbind()V
+HPLcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy;->onUnbind()V
 HSPLcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy;->register()Z
-PLcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy;->setRequest(Lcom/android/server/timezonedetector/location/TimeZoneProviderRequest;)V
-PLcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy;->trySendCurrentRequest()V
+HSPLcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy;->setRequest(Lcom/android/server/timezonedetector/location/TimeZoneProviderRequest;)V
+HSPLcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy;->trySendCurrentRequest()V
 HSPLcom/android/server/timezonedetector/location/RealProviderMetricsLogger;-><init>(I)V
 HSPLcom/android/server/timezonedetector/location/RealProviderMetricsLogger;->metricsProviderState(I)I
 HSPLcom/android/server/timezonedetector/location/RealProviderMetricsLogger;->onProviderStateChanged(I)V
-PLcom/android/server/timezonedetector/location/ThreadingDomain$SingleRunnableQueue$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/timezonedetector/location/ThreadingDomain$SingleRunnableQueue;Ljava/lang/Runnable;)V
+HSPLcom/android/server/timezonedetector/location/ThreadingDomain$SingleRunnableQueue$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/timezonedetector/location/ThreadingDomain$SingleRunnableQueue;Ljava/lang/Runnable;)V
 PLcom/android/server/timezonedetector/location/ThreadingDomain$SingleRunnableQueue$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/timezonedetector/location/ThreadingDomain$SingleRunnableQueue;->$r8$lambda$7LRyZe5aRdU7jEhHXAqD1DYgs7I(Lcom/android/server/timezonedetector/location/ThreadingDomain$SingleRunnableQueue;Ljava/lang/Runnable;)V
 HSPLcom/android/server/timezonedetector/location/ThreadingDomain$SingleRunnableQueue;-><init>(Lcom/android/server/timezonedetector/location/ThreadingDomain;)V
-PLcom/android/server/timezonedetector/location/ThreadingDomain$SingleRunnableQueue;->cancel()V
+HSPLcom/android/server/timezonedetector/location/ThreadingDomain$SingleRunnableQueue;->cancel()V
 PLcom/android/server/timezonedetector/location/ThreadingDomain$SingleRunnableQueue;->hasQueued()Z
 PLcom/android/server/timezonedetector/location/ThreadingDomain$SingleRunnableQueue;->lambda$runDelayed$0(Ljava/lang/Runnable;)V
-PLcom/android/server/timezonedetector/location/ThreadingDomain$SingleRunnableQueue;->runDelayed(Ljava/lang/Runnable;J)V
+HSPLcom/android/server/timezonedetector/location/ThreadingDomain$SingleRunnableQueue;->runDelayed(Ljava/lang/Runnable;J)V
 HSPLcom/android/server/timezonedetector/location/ThreadingDomain;-><init>()V
 HSPLcom/android/server/timezonedetector/location/ThreadingDomain;->assertCurrentThread()V
 HSPLcom/android/server/timezonedetector/location/ThreadingDomain;->createSingleRunnableQueue()Lcom/android/server/timezonedetector/location/ThreadingDomain$SingleRunnableQueue;
 HSPLcom/android/server/timezonedetector/location/ThreadingDomain;->getLockObject()Ljava/lang/Object;
 HSPLcom/android/server/timezonedetector/location/TimeZoneProviderRequest;-><clinit>()V
 HSPLcom/android/server/timezonedetector/location/TimeZoneProviderRequest;-><init>(ZLjava/time/Duration;Ljava/time/Duration;)V
-PLcom/android/server/timezonedetector/location/TimeZoneProviderRequest;->createStartUpdatesRequest(Ljava/time/Duration;Ljava/time/Duration;)Lcom/android/server/timezonedetector/location/TimeZoneProviderRequest;
+HSPLcom/android/server/timezonedetector/location/TimeZoneProviderRequest;->createStartUpdatesRequest(Ljava/time/Duration;Ljava/time/Duration;)Lcom/android/server/timezonedetector/location/TimeZoneProviderRequest;
 HSPLcom/android/server/timezonedetector/location/TimeZoneProviderRequest;->createStopUpdatesRequest()Lcom/android/server/timezonedetector/location/TimeZoneProviderRequest;
 PLcom/android/server/timezonedetector/location/TimeZoneProviderRequest;->getEventFilteringAgeThreshold()Ljava/time/Duration;
 PLcom/android/server/timezonedetector/location/TimeZoneProviderRequest;->getInitializationTimeout()Ljava/time/Duration;
 PLcom/android/server/timezonedetector/location/TimeZoneProviderRequest;->sendUpdates()Z
 PLcom/android/server/timezonedetector/location/TimeZoneProviderRequest;->toString()Ljava/lang/String;
 HSPLcom/android/server/timezonedetector/location/ZoneInfoDbTimeZoneProviderEventPreProcessor;-><init>()V
-PLcom/android/server/timezonedetector/location/ZoneInfoDbTimeZoneProviderEventPreProcessor;->hasInvalidZones(Landroid/service/timezone/TimeZoneProviderEvent;)Z
+HPLcom/android/server/timezonedetector/location/ZoneInfoDbTimeZoneProviderEventPreProcessor;->hasInvalidZones(Landroid/service/timezone/TimeZoneProviderEvent;)Z
 PLcom/android/server/timezonedetector/location/ZoneInfoDbTimeZoneProviderEventPreProcessor;->preProcess(Landroid/service/timezone/TimeZoneProviderEvent;)Landroid/service/timezone/TimeZoneProviderEvent;
 HSPLcom/android/server/tracing/TracingServiceProxy$1;-><init>(Lcom/android/server/tracing/TracingServiceProxy;)V
 PLcom/android/server/tracing/TracingServiceProxy$1;->notifyTraceSessionEnded(Z)V
@@ -48948,8 +50626,8 @@
 PLcom/android/server/trust/TrustAgentWrapper$4;->revokeTrust()V
 PLcom/android/server/trust/TrustAgentWrapper$4;->setManagingTrust(Z)V
 PLcom/android/server/trust/TrustAgentWrapper$5;-><init>(Lcom/android/server/trust/TrustAgentWrapper;)V
-PLcom/android/server/trust/TrustAgentWrapper$5;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
-PLcom/android/server/trust/TrustAgentWrapper$5;->onServiceDisconnected(Landroid/content/ComponentName;)V
+HPLcom/android/server/trust/TrustAgentWrapper$5;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HPLcom/android/server/trust/TrustAgentWrapper$5;->onServiceDisconnected(Landroid/content/ComponentName;)V
 PLcom/android/server/trust/TrustAgentWrapper;->-$$Nest$fgetmBound(Lcom/android/server/trust/TrustAgentWrapper;)Z
 PLcom/android/server/trust/TrustAgentWrapper;->-$$Nest$fgetmCallback(Lcom/android/server/trust/TrustAgentWrapper;)Landroid/service/trust/ITrustAgentServiceCallback;
 PLcom/android/server/trust/TrustAgentWrapper;->-$$Nest$fgetmHandler(Lcom/android/server/trust/TrustAgentWrapper;)Landroid/os/Handler;
@@ -49019,21 +50697,21 @@
 PLcom/android/server/trust/TrustManagerService$1;->dumpUser(Ljava/io/PrintWriter;Landroid/content/pm/UserInfo;Z)V
 HSPLcom/android/server/trust/TrustManagerService$1;->enforceListenerPermission()V
 HPLcom/android/server/trust/TrustManagerService$1;->enforceReportPermission()V
-HPLcom/android/server/trust/TrustManagerService$1;->isAppOrDisplayOnAnyVirtualDevice(II)Z+]Lcom/android/server/companion/virtual/VirtualDeviceManagerInternal;Lcom/android/server/companion/virtual/VirtualDeviceManagerService$LocalService;
+HSPLcom/android/server/trust/TrustManagerService$1;->isAppOrDisplayOnAnyVirtualDevice(II)Z+]Lcom/android/server/companion/virtual/VirtualDeviceManagerInternal;Lcom/android/server/companion/virtual/VirtualDeviceManagerService$LocalService;
 HPLcom/android/server/trust/TrustManagerService$1;->isDeviceLocked(II)Z+]Lcom/android/server/trust/TrustManagerService;Lcom/android/server/trust/TrustManagerService;]Lcom/android/internal/widget/LockPatternUtils;Lcom/android/internal/widget/LockPatternUtils;]Lcom/android/server/trust/TrustManagerService$1;Lcom/android/server/trust/TrustManagerService$1;
-HPLcom/android/server/trust/TrustManagerService$1;->isDeviceSecure(II)Z
+HSPLcom/android/server/trust/TrustManagerService$1;->isDeviceSecure(II)Z+]Lcom/android/internal/widget/LockPatternUtils;Lcom/android/internal/widget/LockPatternUtils;]Lcom/android/server/trust/TrustManagerService$1;Lcom/android/server/trust/TrustManagerService$1;
 HSPLcom/android/server/trust/TrustManagerService$1;->isTrustUsuallyManaged(I)Z
 PLcom/android/server/trust/TrustManagerService$1;->lambda$reportKeyguardShowingChanged$0()V
 HSPLcom/android/server/trust/TrustManagerService$1;->registerTrustListener(Landroid/app/trust/ITrustListener;)V
 PLcom/android/server/trust/TrustManagerService$1;->reportEnabledTrustAgentsChanged(I)V
 HPLcom/android/server/trust/TrustManagerService$1;->reportKeyguardShowingChanged()V
-PLcom/android/server/trust/TrustManagerService$1;->reportUnlockAttempt(ZI)V
+HPLcom/android/server/trust/TrustManagerService$1;->reportUnlockAttempt(ZI)V
 PLcom/android/server/trust/TrustManagerService$1;->reportUnlockLockout(II)V
 HPLcom/android/server/trust/TrustManagerService$1;->reportUserMayRequestUnlock(I)V
 PLcom/android/server/trust/TrustManagerService$1;->setDeviceLockedForUser(IZ)V
 HPLcom/android/server/trust/TrustManagerService$1;->unlockedByBiometricForUser(ILandroid/hardware/biometrics/BiometricSourceType;)V
 HSPLcom/android/server/trust/TrustManagerService$2;-><init>(Lcom/android/server/trust/TrustManagerService;)V
-HPLcom/android/server/trust/TrustManagerService$2;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/trust/TrustManagerService$2;->handleMessage(Landroid/os/Message;)V
 HSPLcom/android/server/trust/TrustManagerService$3;-><init>(Lcom/android/server/trust/TrustManagerService;)V
 HPLcom/android/server/trust/TrustManagerService$3;->onPackageChanged(Ljava/lang/String;I[Ljava/lang/String;)Z
 PLcom/android/server/trust/TrustManagerService$3;->onPackageDisappeared(Ljava/lang/String;I)V
@@ -49044,8 +50722,8 @@
 HSPLcom/android/server/trust/TrustManagerService$AgentInfo;->hashCode()I+]Landroid/content/ComponentName;Landroid/content/ComponentName;
 HSPLcom/android/server/trust/TrustManagerService$Receiver;-><init>(Lcom/android/server/trust/TrustManagerService;)V
 HSPLcom/android/server/trust/TrustManagerService$Receiver;-><init>(Lcom/android/server/trust/TrustManagerService;Lcom/android/server/trust/TrustManagerService$Receiver-IA;)V
-PLcom/android/server/trust/TrustManagerService$Receiver;->getUserId(Landroid/content/Intent;)I
-HPLcom/android/server/trust/TrustManagerService$Receiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/trust/TrustManagerService$Receiver;->getUserId(Landroid/content/Intent;)I
+HSPLcom/android/server/trust/TrustManagerService$Receiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V+]Lcom/android/server/trust/TrustManagerService;Lcom/android/server/trust/TrustManagerService;]Landroid/content/BroadcastReceiver;Lcom/android/server/trust/TrustManagerService$Receiver;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/trust/TrustManagerService$Receiver;->register(Landroid/content/Context;)V
 HSPLcom/android/server/trust/TrustManagerService$SettingsAttrs;-><init>(Landroid/content/ComponentName;Z)V
 HSPLcom/android/server/trust/TrustManagerService$SettingsObserver;-><init>(Lcom/android/server/trust/TrustManagerService;Landroid/os/Handler;)V
@@ -49054,14 +50732,14 @@
 HSPLcom/android/server/trust/TrustManagerService$SettingsObserver;->onChange(ZLandroid/net/Uri;)V
 HSPLcom/android/server/trust/TrustManagerService$SettingsObserver;->updateContentObserver()V
 HSPLcom/android/server/trust/TrustManagerService$StrongAuthTracker;-><init>(Lcom/android/server/trust/TrustManagerService;Landroid/content/Context;)V
-PLcom/android/server/trust/TrustManagerService$StrongAuthTracker;->allowTrustFromUnlock(I)V
+HPLcom/android/server/trust/TrustManagerService$StrongAuthTracker;->allowTrustFromUnlock(I)V
 HPLcom/android/server/trust/TrustManagerService$StrongAuthTracker;->canAgentsRunForUser(I)Z+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
 PLcom/android/server/trust/TrustManagerService$StrongAuthTracker;->cancelPendingAlarm(Lcom/android/server/trust/TrustManagerService$TrustTimeoutAlarmListener;)V
 PLcom/android/server/trust/TrustManagerService$StrongAuthTracker;->onStrongAuthRequiredChanged(I)V
 PLcom/android/server/trust/TrustManagerService$TimeoutType;-><clinit>()V
 PLcom/android/server/trust/TrustManagerService$TimeoutType;-><init>(Ljava/lang/String;I)V
-PLcom/android/server/trust/TrustManagerService$TrustState;-><clinit>()V
-PLcom/android/server/trust/TrustManagerService$TrustState;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/server/trust/TrustManagerService$TrustState;-><clinit>()V
+HSPLcom/android/server/trust/TrustManagerService$TrustState;-><init>(Ljava/lang/String;I)V
 PLcom/android/server/trust/TrustManagerService$TrustTimeoutAlarmListener;-><init>(Lcom/android/server/trust/TrustManagerService;I)V
 PLcom/android/server/trust/TrustManagerService$TrustTimeoutAlarmListener;->isQueued()Z
 PLcom/android/server/trust/TrustManagerService$TrustTimeoutAlarmListener;->onAlarm()V
@@ -49080,7 +50758,7 @@
 PLcom/android/server/trust/TrustManagerService;->-$$Nest$fgetmDeviceLockedForUser(Lcom/android/server/trust/TrustManagerService;)Landroid/util/SparseBooleanArray;
 HSPLcom/android/server/trust/TrustManagerService;->-$$Nest$fgetmHandler(Lcom/android/server/trust/TrustManagerService;)Landroid/os/Handler;
 PLcom/android/server/trust/TrustManagerService;->-$$Nest$fgetmIdleTrustableTimeoutAlarmListenerForUser(Lcom/android/server/trust/TrustManagerService;)Landroid/util/SparseArray;
-HPLcom/android/server/trust/TrustManagerService;->-$$Nest$fgetmLockPatternUtils(Lcom/android/server/trust/TrustManagerService;)Lcom/android/internal/widget/LockPatternUtils;
+HSPLcom/android/server/trust/TrustManagerService;->-$$Nest$fgetmLockPatternUtils(Lcom/android/server/trust/TrustManagerService;)Lcom/android/internal/widget/LockPatternUtils;
 PLcom/android/server/trust/TrustManagerService;->-$$Nest$fgetmSettingsObserver(Lcom/android/server/trust/TrustManagerService;)Lcom/android/server/trust/TrustManagerService$SettingsObserver;
 PLcom/android/server/trust/TrustManagerService;->-$$Nest$fgetmStrongAuthTracker(Lcom/android/server/trust/TrustManagerService;)Lcom/android/server/trust/TrustManagerService$StrongAuthTracker;
 PLcom/android/server/trust/TrustManagerService;->-$$Nest$fgetmTrustAgentsCanRun(Lcom/android/server/trust/TrustManagerService;)Z
@@ -49094,42 +50772,43 @@
 HPLcom/android/server/trust/TrustManagerService;->-$$Nest$fgetmVirtualDeviceManager(Lcom/android/server/trust/TrustManagerService;)Lcom/android/server/companion/virtual/VirtualDeviceManagerInternal;
 PLcom/android/server/trust/TrustManagerService;->-$$Nest$fputmCurrentUser(Lcom/android/server/trust/TrustManagerService;I)V
 PLcom/android/server/trust/TrustManagerService;->-$$Nest$fputmVirtualDeviceManager(Lcom/android/server/trust/TrustManagerService;Lcom/android/server/companion/virtual/VirtualDeviceManagerInternal;)V
-PLcom/android/server/trust/TrustManagerService;->-$$Nest$maddListener(Lcom/android/server/trust/TrustManagerService;Landroid/app/trust/ITrustListener;)V
+HSPLcom/android/server/trust/TrustManagerService;->-$$Nest$maddListener(Lcom/android/server/trust/TrustManagerService;Landroid/app/trust/ITrustListener;)V
 PLcom/android/server/trust/TrustManagerService;->-$$Nest$maggregateIsTrustManaged(Lcom/android/server/trust/TrustManagerService;I)Z
 PLcom/android/server/trust/TrustManagerService;->-$$Nest$maggregateIsTrusted(Lcom/android/server/trust/TrustManagerService;I)Z
 PLcom/android/server/trust/TrustManagerService;->-$$Nest$mdispatchTrustableDowngrade(Lcom/android/server/trust/TrustManagerService;)V
 PLcom/android/server/trust/TrustManagerService;->-$$Nest$mdispatchUnlockAttempt(Lcom/android/server/trust/TrustManagerService;ZI)V
 PLcom/android/server/trust/TrustManagerService;->-$$Nest$mdispatchUnlockLockout(Lcom/android/server/trust/TrustManagerService;II)V
 PLcom/android/server/trust/TrustManagerService;->-$$Nest$mdispatchUserMayRequestUnlock(Lcom/android/server/trust/TrustManagerService;I)V
+PLcom/android/server/trust/TrustManagerService;->-$$Nest$mgetBiometricSids(Lcom/android/server/trust/TrustManagerService;I)[J
 PLcom/android/server/trust/TrustManagerService;->-$$Nest$mhandleScheduleTrustTimeout(Lcom/android/server/trust/TrustManagerService;ZLcom/android/server/trust/TrustManagerService$TimeoutType;)V
 HSPLcom/android/server/trust/TrustManagerService;->-$$Nest$misTrustUsuallyManagedInternal(Lcom/android/server/trust/TrustManagerService;I)Z
 PLcom/android/server/trust/TrustManagerService;->-$$Nest$mmaybeEnableFactoryTrustAgents(Lcom/android/server/trust/TrustManagerService;Lcom/android/internal/widget/LockPatternUtils;I)V
 PLcom/android/server/trust/TrustManagerService;->-$$Nest$mmaybeLockScreen(Lcom/android/server/trust/TrustManagerService;I)V
 PLcom/android/server/trust/TrustManagerService;->-$$Nest$mrefreshDeviceLockedForUser(Lcom/android/server/trust/TrustManagerService;I)V
-PLcom/android/server/trust/TrustManagerService;->-$$Nest$mrefreshDeviceLockedForUser(Lcom/android/server/trust/TrustManagerService;II)V
+HPLcom/android/server/trust/TrustManagerService;->-$$Nest$mrefreshDeviceLockedForUser(Lcom/android/server/trust/TrustManagerService;II)V
 PLcom/android/server/trust/TrustManagerService;->-$$Nest$mrefreshTrustableTimers(Lcom/android/server/trust/TrustManagerService;I)V
 PLcom/android/server/trust/TrustManagerService;->-$$Nest$mremoveAgentsOfPackage(Lcom/android/server/trust/TrustManagerService;Ljava/lang/String;)V
-HPLcom/android/server/trust/TrustManagerService;->-$$Nest$mresolveProfileParent(Lcom/android/server/trust/TrustManagerService;I)I+]Lcom/android/server/trust/TrustManagerService;Lcom/android/server/trust/TrustManagerService;
+HSPLcom/android/server/trust/TrustManagerService;->-$$Nest$mresolveProfileParent(Lcom/android/server/trust/TrustManagerService;I)I+]Lcom/android/server/trust/TrustManagerService;Lcom/android/server/trust/TrustManagerService;
 PLcom/android/server/trust/TrustManagerService;->-$$Nest$msetDeviceLockedForUser(Lcom/android/server/trust/TrustManagerService;IZ)V
 PLcom/android/server/trust/TrustManagerService;->-$$Nest$mupdateTrust(Lcom/android/server/trust/TrustManagerService;IIZLcom/android/internal/infra/AndroidFuture;)V
 HSPLcom/android/server/trust/TrustManagerService;-><clinit>()V
 HSPLcom/android/server/trust/TrustManagerService;-><init>(Landroid/content/Context;)V
-PLcom/android/server/trust/TrustManagerService;->addListener(Landroid/app/trust/ITrustListener;)V
-HPLcom/android/server/trust/TrustManagerService;->aggregateIsTrustManaged(I)Z
-HPLcom/android/server/trust/TrustManagerService;->aggregateIsTrustable(I)Z
+HSPLcom/android/server/trust/TrustManagerService;->addListener(Landroid/app/trust/ITrustListener;)V
+HSPLcom/android/server/trust/TrustManagerService;->aggregateIsTrustManaged(I)Z
+HSPLcom/android/server/trust/TrustManagerService;->aggregateIsTrustable(I)Z
 HSPLcom/android/server/trust/TrustManagerService;->aggregateIsTrusted(I)Z
-HPLcom/android/server/trust/TrustManagerService;->dispatchDeviceLocked(IZ)V
-HPLcom/android/server/trust/TrustManagerService;->dispatchOnTrustChanged(ZIILjava/util/List;)V
-HPLcom/android/server/trust/TrustManagerService;->dispatchOnTrustManagedChanged(ZI)V
+HSPLcom/android/server/trust/TrustManagerService;->dispatchDeviceLocked(IZ)V
+HSPLcom/android/server/trust/TrustManagerService;->dispatchOnTrustChanged(ZIILjava/util/List;)V
+HSPLcom/android/server/trust/TrustManagerService;->dispatchOnTrustManagedChanged(ZI)V
 HPLcom/android/server/trust/TrustManagerService;->dispatchTrustableDowngrade()V
 HPLcom/android/server/trust/TrustManagerService;->dispatchUnlockAttempt(ZI)V
 PLcom/android/server/trust/TrustManagerService;->dispatchUnlockLockout(II)V
 HPLcom/android/server/trust/TrustManagerService;->dispatchUserMayRequestUnlock(I)V
-HPLcom/android/server/trust/TrustManagerService;->getBiometricSids(I)[J
+HSPLcom/android/server/trust/TrustManagerService;->getBiometricSids(I)[J
 HSPLcom/android/server/trust/TrustManagerService;->getComponentName(Landroid/content/pm/ResolveInfo;)Landroid/content/ComponentName;
 PLcom/android/server/trust/TrustManagerService;->getDefaultFactoryTrustAgent(Landroid/content/Context;)Landroid/content/ComponentName;
 HSPLcom/android/server/trust/TrustManagerService;->getSettingsAttrs(Landroid/content/pm/PackageManager;Landroid/content/pm/ResolveInfo;)Lcom/android/server/trust/TrustManagerService$SettingsAttrs;+]Landroid/content/pm/ServiceInfo;Landroid/content/pm/ServiceInfo;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/AttributeSet;Landroid/content/res/XmlBlock$Parser;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Landroid/content/res/TypedArray;Landroid/content/res/TypedArray;]Landroid/content/res/XmlResourceParser;Landroid/content/res/XmlBlock$Parser;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
-HPLcom/android/server/trust/TrustManagerService;->getTrustGrantedMessages(I)Ljava/util/List;
+HSPLcom/android/server/trust/TrustManagerService;->getTrustGrantedMessages(I)Ljava/util/List;
 PLcom/android/server/trust/TrustManagerService;->handleScheduleTrustTimeout(ZLcom/android/server/trust/TrustManagerService$TimeoutType;)V
 PLcom/android/server/trust/TrustManagerService;->handleScheduleTrustableTimeouts(IZZ)V
 PLcom/android/server/trust/TrustManagerService;->handleScheduleTrustedTimeout(IZ)V
@@ -49151,18 +50830,18 @@
 PLcom/android/server/trust/TrustManagerService;->removeAgentsOfPackage(Ljava/lang/String;)V
 PLcom/android/server/trust/TrustManagerService;->resetAgent(Landroid/content/ComponentName;I)V
 HSPLcom/android/server/trust/TrustManagerService;->resolveAllowedTrustAgents(Landroid/content/pm/PackageManager;I)Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
-HPLcom/android/server/trust/TrustManagerService;->resolveProfileParent(I)I+]Landroid/os/UserManager;Landroid/os/UserManager;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;
+HSPLcom/android/server/trust/TrustManagerService;->resolveProfileParent(I)I+]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/content/pm/UserInfo;Landroid/content/pm/UserInfo;]Landroid/os/UserManager;Landroid/os/UserManager;
 PLcom/android/server/trust/TrustManagerService;->scheduleTrustTimeout(ZZ)V
 HSPLcom/android/server/trust/TrustManagerService;->setDeviceLockedForUser(IZ)V
 HPLcom/android/server/trust/TrustManagerService;->setUpHardTimeout(IZ)V
 HPLcom/android/server/trust/TrustManagerService;->setUpIdleTimeout(IZ)V
-HPLcom/android/server/trust/TrustManagerService;->updateDevicePolicyFeatures()V
-PLcom/android/server/trust/TrustManagerService;->updateTrust(II)V
-PLcom/android/server/trust/TrustManagerService;->updateTrust(IILcom/android/internal/infra/AndroidFuture;)V
-PLcom/android/server/trust/TrustManagerService;->updateTrust(IIZLcom/android/internal/infra/AndroidFuture;)V
-PLcom/android/server/trust/TrustManagerService;->updateTrustAll()V
+HPLcom/android/server/trust/TrustManagerService;->updateDevicePolicyFeatures()V+]Lcom/android/server/trust/TrustArchive;Lcom/android/server/trust/TrustArchive;]Lcom/android/server/trust/TrustAgentWrapper;Lcom/android/server/trust/TrustAgentWrapper;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLcom/android/server/trust/TrustManagerService;->updateTrust(II)V
+HSPLcom/android/server/trust/TrustManagerService;->updateTrust(IILcom/android/internal/infra/AndroidFuture;)V
+HSPLcom/android/server/trust/TrustManagerService;->updateTrust(IIZLcom/android/internal/infra/AndroidFuture;)V
+HSPLcom/android/server/trust/TrustManagerService;->updateTrustAll()V
 PLcom/android/server/trust/TrustManagerService;->updateTrustUsuallyManaged(IZ)V
-HPLcom/android/server/trust/TrustManagerService;->updateTrustWithRenewableUnlock(IIZLcom/android/internal/infra/AndroidFuture;)V
+HSPLcom/android/server/trust/TrustManagerService;->updateTrustWithRenewableUnlock(IIZLcom/android/internal/infra/AndroidFuture;)V
 HSPLcom/android/server/tv/TvInputHal;-><clinit>()V
 PLcom/android/server/twilight/TwilightService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/twilight/TwilightService;)V
 PLcom/android/server/twilight/TwilightService$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
@@ -49171,7 +50850,7 @@
 HSPLcom/android/server/twilight/TwilightService$1;-><init>(Lcom/android/server/twilight/TwilightService;)V
 HSPLcom/android/server/twilight/TwilightService$1;->getLastTwilightState()Lcom/android/server/twilight/TwilightState;
 HSPLcom/android/server/twilight/TwilightService$1;->registerListener(Lcom/android/server/twilight/TwilightListener;Landroid/os/Handler;)V
-HSPLcom/android/server/twilight/TwilightService$1;->unregisterListener(Lcom/android/server/twilight/TwilightListener;)V
+HSPLcom/android/server/twilight/TwilightService$1;->unregisterListener(Lcom/android/server/twilight/TwilightListener;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 PLcom/android/server/twilight/TwilightService$2;-><init>(Lcom/android/server/twilight/TwilightService;)V
 PLcom/android/server/twilight/TwilightService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/twilight/TwilightService;->$r8$lambda$d_eJhFu0Phzyq32TP9ZWD5dYNhs(Lcom/android/server/twilight/TwilightListener;Lcom/android/server/twilight/TwilightState;)V
@@ -49235,7 +50914,7 @@
 HSPLcom/android/server/uri/GrantUri;-><init>(ILandroid/net/Uri;I)V
 PLcom/android/server/uri/GrantUri;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HPLcom/android/server/uri/GrantUri;->equals(Ljava/lang/Object;)Z+]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;
-HSPLcom/android/server/uri/GrantUri;->hashCode()I
+HSPLcom/android/server/uri/GrantUri;->hashCode()I+]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;
 HPLcom/android/server/uri/GrantUri;->resolve(ILandroid/net/Uri;I)Lcom/android/server/uri/GrantUri;
 PLcom/android/server/uri/GrantUri;->toString()Ljava/lang/String;
 HPLcom/android/server/uri/NeededUriGrants;-><init>(Ljava/lang/String;II)V
@@ -49249,10 +50928,10 @@
 HSPLcom/android/server/uri/UriGrantsManagerService$LocalService;-><init>(Lcom/android/server/uri/UriGrantsManagerService;Lcom/android/server/uri/UriGrantsManagerService$LocalService-IA;)V
 HSPLcom/android/server/uri/UriGrantsManagerService$LocalService;->checkAuthorityGrants(ILandroid/content/pm/ProviderInfo;IZ)Z
 HPLcom/android/server/uri/UriGrantsManagerService$LocalService;->checkGrantUriPermission(ILjava/lang/String;Landroid/net/Uri;II)I
-HPLcom/android/server/uri/UriGrantsManagerService$LocalService;->checkGrantUriPermissionFromIntent(Landroid/content/Intent;ILjava/lang/String;I)Lcom/android/server/uri/NeededUriGrants;+]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/uri/UriGrantsManagerService$LocalService;->checkGrantUriPermissionFromIntent(Landroid/content/Intent;ILjava/lang/String;I)Lcom/android/server/uri/NeededUriGrants;+]Landroid/content/Intent;Landroid/content/Intent;
 HPLcom/android/server/uri/UriGrantsManagerService$LocalService;->checkUriPermission(Lcom/android/server/uri/GrantUri;II)Z
 PLcom/android/server/uri/UriGrantsManagerService$LocalService;->dump(Ljava/io/PrintWriter;ZLjava/lang/String;)V
-HPLcom/android/server/uri/UriGrantsManagerService$LocalService;->grantUriPermissionUncheckedFromIntent(Lcom/android/server/uri/NeededUriGrants;Lcom/android/server/uri/UriPermissionOwner;)V
+HSPLcom/android/server/uri/UriGrantsManagerService$LocalService;->grantUriPermissionUncheckedFromIntent(Lcom/android/server/uri/NeededUriGrants;Lcom/android/server/uri/UriPermissionOwner;)V
 HSPLcom/android/server/uri/UriGrantsManagerService$LocalService;->newUriPermissionOwner(Ljava/lang/String;)Landroid/os/IBinder;
 HSPLcom/android/server/uri/UriGrantsManagerService$LocalService;->onSystemReady()V
 HPLcom/android/server/uri/UriGrantsManagerService$LocalService;->removeUriPermissionIfNeeded(Lcom/android/server/uri/UriPermission;)V
@@ -49263,11 +50942,11 @@
 PLcom/android/server/uri/UriGrantsManagerService;->-$$Nest$fgetmGrantedUriPermissions(Lcom/android/server/uri/UriGrantsManagerService;)Landroid/util/SparseArray;
 HSPLcom/android/server/uri/UriGrantsManagerService;->-$$Nest$fgetmLock(Lcom/android/server/uri/UriGrantsManagerService;)Ljava/lang/Object;
 HSPLcom/android/server/uri/UriGrantsManagerService;->-$$Nest$mcheckAuthorityGrantsLocked(Lcom/android/server/uri/UriGrantsManagerService;ILandroid/content/pm/ProviderInfo;IZ)Z
-HPLcom/android/server/uri/UriGrantsManagerService;->-$$Nest$mcheckGrantUriPermissionFromIntentUnlocked(Lcom/android/server/uri/UriGrantsManagerService;ILjava/lang/String;Landroid/content/Intent;ILcom/android/server/uri/NeededUriGrants;I)Lcom/android/server/uri/NeededUriGrants;
+HSPLcom/android/server/uri/UriGrantsManagerService;->-$$Nest$mcheckGrantUriPermissionFromIntentUnlocked(Lcom/android/server/uri/UriGrantsManagerService;ILjava/lang/String;Landroid/content/Intent;ILcom/android/server/uri/NeededUriGrants;I)Lcom/android/server/uri/NeededUriGrants;
 HPLcom/android/server/uri/UriGrantsManagerService;->-$$Nest$mcheckGrantUriPermissionUnlocked(Lcom/android/server/uri/UriGrantsManagerService;ILjava/lang/String;Landroid/net/Uri;II)I
 HPLcom/android/server/uri/UriGrantsManagerService;->-$$Nest$mcheckUriPermissionLocked(Lcom/android/server/uri/UriGrantsManagerService;Lcom/android/server/uri/GrantUri;II)Z
 HSPLcom/android/server/uri/UriGrantsManagerService;->-$$Nest$menforceNotIsolatedCaller(Lcom/android/server/uri/UriGrantsManagerService;Ljava/lang/String;)V
-HPLcom/android/server/uri/UriGrantsManagerService;->-$$Nest$mgrantUriPermissionUncheckedFromIntent(Lcom/android/server/uri/UriGrantsManagerService;Lcom/android/server/uri/NeededUriGrants;Lcom/android/server/uri/UriPermissionOwner;)V
+HSPLcom/android/server/uri/UriGrantsManagerService;->-$$Nest$mgrantUriPermissionUncheckedFromIntent(Lcom/android/server/uri/UriGrantsManagerService;Lcom/android/server/uri/NeededUriGrants;Lcom/android/server/uri/UriPermissionOwner;)V
 HSPLcom/android/server/uri/UriGrantsManagerService;->-$$Nest$mreadGrantedUriPermissionsLocked(Lcom/android/server/uri/UriGrantsManagerService;)V
 HPLcom/android/server/uri/UriGrantsManagerService;->-$$Nest$mremoveUriPermissionIfNeededLocked(Lcom/android/server/uri/UriGrantsManagerService;Lcom/android/server/uri/UriPermission;)V
 HSPLcom/android/server/uri/UriGrantsManagerService;->-$$Nest$mremoveUriPermissionsForPackageLocked(Lcom/android/server/uri/UriGrantsManagerService;Ljava/lang/String;IZZ)V
@@ -49278,30 +50957,30 @@
 HSPLcom/android/server/uri/UriGrantsManagerService;-><init>(Lcom/android/server/uri/UriGrantsManagerService-IA;)V
 HSPLcom/android/server/uri/UriGrantsManagerService;-><init>(Ljava/io/File;)V
 HSPLcom/android/server/uri/UriGrantsManagerService;->checkAuthorityGrantsLocked(ILandroid/content/pm/ProviderInfo;IZ)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/uri/UriGrantsManagerService;Lcom/android/server/uri/UriGrantsManagerService;]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HPLcom/android/server/uri/UriGrantsManagerService;->checkGrantUriPermissionFromIntentUnlocked(ILjava/lang/String;Landroid/content/Intent;ILcom/android/server/uri/NeededUriGrants;I)Lcom/android/server/uri/NeededUriGrants;+]Landroid/content/ClipData;Landroid/content/ClipData;]Lcom/android/server/uri/UriGrantsManagerService;Lcom/android/server/uri/UriGrantsManagerService;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Landroid/content/ClipData$Item;Landroid/content/ClipData$Item;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/uri/UriGrantsManagerService;->checkGrantUriPermissionFromIntentUnlocked(ILjava/lang/String;Landroid/content/Intent;ILcom/android/server/uri/NeededUriGrants;I)Lcom/android/server/uri/NeededUriGrants;+]Landroid/content/ClipData;Landroid/content/ClipData;]Lcom/android/server/uri/UriGrantsManagerService;Lcom/android/server/uri/UriGrantsManagerService;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Landroid/content/ClipData$Item;Landroid/content/ClipData$Item;]Landroid/content/Intent;Landroid/content/Intent;
 HPLcom/android/server/uri/UriGrantsManagerService;->checkGrantUriPermissionUnlocked(ILjava/lang/String;Landroid/net/Uri;II)I+]Lcom/android/server/uri/UriGrantsManagerService;Lcom/android/server/uri/UriGrantsManagerService;
 HPLcom/android/server/uri/UriGrantsManagerService;->checkGrantUriPermissionUnlocked(ILjava/lang/String;Lcom/android/server/uri/GrantUri;II)I+]Lcom/android/server/uri/UriGrantsManagerService;Lcom/android/server/uri/UriGrantsManagerService;]Landroid/os/PatternMatcher;Landroid/os/PatternMatcher;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HPLcom/android/server/uri/UriGrantsManagerService;->checkHoldingPermissionsInternalUnlocked(Landroid/content/pm/ProviderInfo;Lcom/android/server/uri/GrantUri;IIZ)Z+]Lcom/android/server/uri/UriGrantsManagerService;Lcom/android/server/uri/UriGrantsManagerService;]Landroid/content/pm/PathPermission;Landroid/content/pm/PathPermission;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;
 HPLcom/android/server/uri/UriGrantsManagerService;->checkHoldingPermissionsUnlocked(Landroid/content/pm/ProviderInfo;Lcom/android/server/uri/GrantUri;II)Z+]Lcom/android/server/uri/UriGrantsManagerService;Lcom/android/server/uri/UriGrantsManagerService;
-PLcom/android/server/uri/UriGrantsManagerService;->checkUidPermission(Ljava/lang/String;I)I
+HPLcom/android/server/uri/UriGrantsManagerService;->checkUidPermission(Ljava/lang/String;I)I
 HPLcom/android/server/uri/UriGrantsManagerService;->checkUriPermissionLocked(Lcom/android/server/uri/GrantUri;II)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/uri/UriPermission;Lcom/android/server/uri/UriPermission;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/uri/UriGrantsManagerService;->enforceNotIsolatedCaller(Ljava/lang/String;)V
-HSPLcom/android/server/uri/UriGrantsManagerService;->findOrCreateUriPermissionLocked(Ljava/lang/String;Ljava/lang/String;ILcom/android/server/uri/GrantUri;)Lcom/android/server/uri/UriPermission;
+HSPLcom/android/server/uri/UriGrantsManagerService;->findOrCreateUriPermissionLocked(Ljava/lang/String;Ljava/lang/String;ILcom/android/server/uri/GrantUri;)Lcom/android/server/uri/UriPermission;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/uri/UriGrantsManagerService;->findUriPermissionLocked(ILcom/android/server/uri/GrantUri;)Lcom/android/server/uri/UriPermission;
 PLcom/android/server/uri/UriGrantsManagerService;->getGrantedUriPermissions(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
 HSPLcom/android/server/uri/UriGrantsManagerService;->getProviderInfo(Ljava/lang/String;III)Landroid/content/pm/ProviderInfo;+]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
-HPLcom/android/server/uri/UriGrantsManagerService;->getUriPermissions(Ljava/lang/String;ZZ)Landroid/content/pm/ParceledListSlice;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/uri/UriGrantsManagerService;Lcom/android/server/uri/UriGrantsManagerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
+HPLcom/android/server/uri/UriGrantsManagerService;->getUriPermissions(Ljava/lang/String;ZZ)Landroid/content/pm/ParceledListSlice;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/uri/UriGrantsManagerService;Lcom/android/server/uri/UriGrantsManagerService;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/uri/UriPermission;Lcom/android/server/uri/UriPermission;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/uri/UriGrantsManagerService;->grantUriPermissionFromOwner(Landroid/os/IBinder;ILjava/lang/String;Landroid/net/Uri;III)V+]Lcom/android/server/uri/UriGrantsManagerService;Lcom/android/server/uri/UriGrantsManagerService;
 HPLcom/android/server/uri/UriGrantsManagerService;->grantUriPermissionFromOwnerUnlocked(Landroid/os/IBinder;ILjava/lang/String;Landroid/net/Uri;III)V+]Lcom/android/server/uri/UriGrantsManagerService;Lcom/android/server/uri/UriGrantsManagerService;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;
-HPLcom/android/server/uri/UriGrantsManagerService;->grantUriPermissionUnchecked(ILjava/lang/String;Lcom/android/server/uri/GrantUri;ILcom/android/server/uri/UriPermissionOwner;)V
-HPLcom/android/server/uri/UriGrantsManagerService;->grantUriPermissionUncheckedFromIntent(Lcom/android/server/uri/NeededUriGrants;Lcom/android/server/uri/UriPermissionOwner;)V
+HPLcom/android/server/uri/UriGrantsManagerService;->grantUriPermissionUnchecked(ILjava/lang/String;Lcom/android/server/uri/GrantUri;ILcom/android/server/uri/UriPermissionOwner;)V+]Lcom/android/server/uri/UriGrantsManagerService;Lcom/android/server/uri/UriGrantsManagerService;]Lcom/android/server/uri/UriPermission;Lcom/android/server/uri/UriPermission;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;
+HSPLcom/android/server/uri/UriGrantsManagerService;->grantUriPermissionUncheckedFromIntent(Lcom/android/server/uri/NeededUriGrants;Lcom/android/server/uri/UriPermissionOwner;)V+]Lcom/android/server/uri/UriGrantsManagerService;Lcom/android/server/uri/UriGrantsManagerService;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/uri/UriGrantsManagerService;->grantUriPermissionUnlocked(ILjava/lang/String;Lcom/android/server/uri/GrantUri;ILcom/android/server/uri/UriPermissionOwner;I)V+]Lcom/android/server/uri/UriGrantsManagerService;Lcom/android/server/uri/UriGrantsManagerService;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
-PLcom/android/server/uri/UriGrantsManagerService;->matchesProvider(Landroid/net/Uri;Landroid/content/pm/ProviderInfo;)Z
+HPLcom/android/server/uri/UriGrantsManagerService;->matchesProvider(Landroid/net/Uri;Landroid/content/pm/ProviderInfo;)Z
 PLcom/android/server/uri/UriGrantsManagerService;->maybePrunePersistedUriGrantsLocked(I)Z
 HSPLcom/android/server/uri/UriGrantsManagerService;->readGrantedUriPermissionsLocked()V
 PLcom/android/server/uri/UriGrantsManagerService;->releasePersistableUriPermission(Landroid/net/Uri;ILjava/lang/String;I)V
 HPLcom/android/server/uri/UriGrantsManagerService;->removeUriPermissionIfNeededLocked(Lcom/android/server/uri/UriPermission;)V
-HSPLcom/android/server/uri/UriGrantsManagerService;->removeUriPermissionsForPackageLocked(Ljava/lang/String;IZZ)V
+HSPLcom/android/server/uri/UriGrantsManagerService;->removeUriPermissionsForPackageLocked(Ljava/lang/String;IZZ)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/uri/UriPermission;Lcom/android/server/uri/UriPermission;]Ljava/util/Collection;Landroid/util/MapCollections$ValuesCollection;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;
 HPLcom/android/server/uri/UriGrantsManagerService;->revokeUriPermission(Ljava/lang/String;ILcom/android/server/uri/GrantUri;I)V
 HPLcom/android/server/uri/UriGrantsManagerService;->revokeUriPermissionLocked(Ljava/lang/String;ILcom/android/server/uri/GrantUri;IZ)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/uri/UriPermission;Lcom/android/server/uri/UriPermission;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/net/Uri;Landroid/net/Uri$HierarchicalUri;,Landroid/net/Uri$StringUri;
 PLcom/android/server/uri/UriGrantsManagerService;->schedulePersistUriGrants()V
@@ -49316,16 +50995,16 @@
 PLcom/android/server/uri/UriPermission$Snapshot;-><init>(Lcom/android/server/uri/UriPermission;)V
 PLcom/android/server/uri/UriPermission$Snapshot;-><init>(Lcom/android/server/uri/UriPermission;Lcom/android/server/uri/UriPermission$Snapshot-IA;)V
 HSPLcom/android/server/uri/UriPermission;-><init>(Ljava/lang/String;Ljava/lang/String;ILcom/android/server/uri/GrantUri;)V
-HPLcom/android/server/uri/UriPermission;->addReadOwner(Lcom/android/server/uri/UriPermissionOwner;)V
-PLcom/android/server/uri/UriPermission;->addWriteOwner(Lcom/android/server/uri/UriPermissionOwner;)V
+HPLcom/android/server/uri/UriPermission;->addReadOwner(Lcom/android/server/uri/UriPermissionOwner;)V+]Lcom/android/server/uri/UriPermissionOwner;Lcom/android/server/uri/UriPermissionOwner;]Lcom/android/server/uri/UriPermission;Lcom/android/server/uri/UriPermission;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HPLcom/android/server/uri/UriPermission;->addWriteOwner(Lcom/android/server/uri/UriPermissionOwner;)V
 PLcom/android/server/uri/UriPermission;->buildPersistedPublicApiObject()Landroid/content/UriPermission;
 PLcom/android/server/uri/UriPermission;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/uri/UriPermission;->getStrength(I)I
-HPLcom/android/server/uri/UriPermission;->grantModes(ILcom/android/server/uri/UriPermissionOwner;)Z
+HPLcom/android/server/uri/UriPermission;->getStrength(I)I
+HPLcom/android/server/uri/UriPermission;->grantModes(ILcom/android/server/uri/UriPermissionOwner;)Z+]Lcom/android/server/uri/UriPermission;Lcom/android/server/uri/UriPermission;
 HSPLcom/android/server/uri/UriPermission;->initPersistedModes(IJ)V
 PLcom/android/server/uri/UriPermission;->releasePersistableModes(I)Z
-HPLcom/android/server/uri/UriPermission;->removeReadOwner(Lcom/android/server/uri/UriPermissionOwner;)V
-PLcom/android/server/uri/UriPermission;->removeWriteOwner(Lcom/android/server/uri/UriPermissionOwner;)V
+HPLcom/android/server/uri/UriPermission;->removeReadOwner(Lcom/android/server/uri/UriPermissionOwner;)V+]Lcom/android/server/uri/UriPermission;Lcom/android/server/uri/UriPermission;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HPLcom/android/server/uri/UriPermission;->removeWriteOwner(Lcom/android/server/uri/UriPermissionOwner;)V
 HPLcom/android/server/uri/UriPermission;->revokeModes(IZ)Z
 PLcom/android/server/uri/UriPermission;->snapshot()Lcom/android/server/uri/UriPermission$Snapshot;
 PLcom/android/server/uri/UriPermission;->takePersistableModes(I)Z
@@ -49334,15 +51013,15 @@
 HSPLcom/android/server/uri/UriPermissionOwner$ExternalToken;-><init>(Lcom/android/server/uri/UriPermissionOwner;)V
 HPLcom/android/server/uri/UriPermissionOwner$ExternalToken;->getOwner()Lcom/android/server/uri/UriPermissionOwner;
 HSPLcom/android/server/uri/UriPermissionOwner;-><init>(Lcom/android/server/uri/UriGrantsManagerInternal;Ljava/lang/Object;)V
-HPLcom/android/server/uri/UriPermissionOwner;->addReadPermission(Lcom/android/server/uri/UriPermission;)V
-PLcom/android/server/uri/UriPermissionOwner;->addWritePermission(Lcom/android/server/uri/UriPermission;)V
+HPLcom/android/server/uri/UriPermissionOwner;->addReadPermission(Lcom/android/server/uri/UriPermission;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HPLcom/android/server/uri/UriPermissionOwner;->addWritePermission(Lcom/android/server/uri/UriPermission;)V
 PLcom/android/server/uri/UriPermissionOwner;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/uri/UriPermissionOwner;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HPLcom/android/server/uri/UriPermissionOwner;->fromExternalToken(Landroid/os/IBinder;)Lcom/android/server/uri/UriPermissionOwner;+]Lcom/android/server/uri/UriPermissionOwner$ExternalToken;Lcom/android/server/uri/UriPermissionOwner$ExternalToken;
 HSPLcom/android/server/uri/UriPermissionOwner;->getExternalToken()Landroid/os/Binder;
 PLcom/android/server/uri/UriPermissionOwner;->removeReadPermission(Lcom/android/server/uri/UriPermission;)V
 HPLcom/android/server/uri/UriPermissionOwner;->removeUriPermission(Lcom/android/server/uri/GrantUri;I)V
-HPLcom/android/server/uri/UriPermissionOwner;->removeUriPermission(Lcom/android/server/uri/GrantUri;ILjava/lang/String;I)V+]Lcom/android/server/uri/GrantUri;Lcom/android/server/uri/GrantUri;]Lcom/android/server/uri/UriPermission;Lcom/android/server/uri/UriPermission;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/uri/UriGrantsManagerInternal;Lcom/android/server/uri/UriGrantsManagerService$LocalService;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;
+HPLcom/android/server/uri/UriPermissionOwner;->removeUriPermission(Lcom/android/server/uri/GrantUri;ILjava/lang/String;I)V+]Lcom/android/server/uri/GrantUri;Lcom/android/server/uri/GrantUri;]Lcom/android/server/uri/UriPermission;Lcom/android/server/uri/UriPermission;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Lcom/android/server/uri/UriGrantsManagerInternal;Lcom/android/server/uri/UriGrantsManagerService$LocalService;
 HPLcom/android/server/uri/UriPermissionOwner;->removeUriPermissions()V
 HPLcom/android/server/uri/UriPermissionOwner;->removeUriPermissions(I)V
 PLcom/android/server/uri/UriPermissionOwner;->removeWritePermission(Lcom/android/server/uri/UriPermission;)V
@@ -49351,7 +51030,7 @@
 HSPLcom/android/server/usage/AppIdleHistory;-><init>(Ljava/io/File;J)V
 PLcom/android/server/usage/AppIdleHistory;->clearUsage(Ljava/lang/String;I)V
 HPLcom/android/server/usage/AppIdleHistory;->dumpBucketExpiryTimes(Landroid/util/IndentingPrintWriter;Lcom/android/server/usage/AppIdleHistory$AppUsageHistory;J)V
-HPLcom/android/server/usage/AppIdleHistory;->dumpUser(Landroid/util/IndentingPrintWriter;ILjava/util/List;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/IndentingPrintWriter;Lcom/android/internal/util/IndentingPrintWriter;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HPLcom/android/server/usage/AppIdleHistory;->dumpUser(Landroid/util/IndentingPrintWriter;ILjava/util/List;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/IndentingPrintWriter;Lcom/android/internal/util/IndentingPrintWriter;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;
 PLcom/android/server/usage/AppIdleHistory;->dumpUsers(Landroid/util/IndentingPrintWriter;[ILjava/util/List;)V
 HSPLcom/android/server/usage/AppIdleHistory;->getAppStandbyBucket(Ljava/lang/String;IJ)I+]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;
 HSPLcom/android/server/usage/AppIdleHistory;->getAppStandbyBuckets(IZ)Ljava/util/ArrayList;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -49362,10 +51041,10 @@
 HSPLcom/android/server/usage/AppIdleHistory;->getIntValue(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;I)I
 HSPLcom/android/server/usage/AppIdleHistory;->getLongValue(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;J)J
 HSPLcom/android/server/usage/AppIdleHistory;->getPackageHistory(Landroid/util/ArrayMap;Ljava/lang/String;JZ)Lcom/android/server/usage/AppIdleHistory$AppUsageHistory;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
-HPLcom/android/server/usage/AppIdleHistory;->getScreenOnTime(J)J
+HSPLcom/android/server/usage/AppIdleHistory;->getScreenOnTime(J)J
 HSPLcom/android/server/usage/AppIdleHistory;->getScreenOnTimeFile()Ljava/io/File;
-HPLcom/android/server/usage/AppIdleHistory;->getThresholdIndex(Ljava/lang/String;IJ[J[J)I
-PLcom/android/server/usage/AppIdleHistory;->getTimeSinceLastJobRun(Ljava/lang/String;IJ)J
+HSPLcom/android/server/usage/AppIdleHistory;->getThresholdIndex(Ljava/lang/String;IJ[J[J)I
+HPLcom/android/server/usage/AppIdleHistory;->getTimeSinceLastJobRun(Ljava/lang/String;IJ)J
 HPLcom/android/server/usage/AppIdleHistory;->getTimeSinceLastUsedByUser(Ljava/lang/String;IJ)J
 HSPLcom/android/server/usage/AppIdleHistory;->getUserFile(I)Ljava/io/File;
 HSPLcom/android/server/usage/AppIdleHistory;->getUserHistory(I)Landroid/util/ArrayMap;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;
@@ -49381,18 +51060,18 @@
 HPLcom/android/server/usage/AppIdleHistory;->removeElapsedExpiryTimes(Lcom/android/server/usage/AppIdleHistory$AppUsageHistory;J)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;
 HPLcom/android/server/usage/AppIdleHistory;->reportUsage(Lcom/android/server/usage/AppIdleHistory$AppUsageHistory;Ljava/lang/String;IIIJJ)Lcom/android/server/usage/AppIdleHistory$AppUsageHistory;+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;
 HPLcom/android/server/usage/AppIdleHistory;->reportUsage(Ljava/lang/String;IIIJJ)Lcom/android/server/usage/AppIdleHistory$AppUsageHistory;
-HPLcom/android/server/usage/AppIdleHistory;->setAppStandbyBucket(Ljava/lang/String;IJII)V
+HSPLcom/android/server/usage/AppIdleHistory;->setAppStandbyBucket(Ljava/lang/String;IJII)V
 HSPLcom/android/server/usage/AppIdleHistory;->setAppStandbyBucket(Ljava/lang/String;IJIIZ)V+]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;
 PLcom/android/server/usage/AppIdleHistory;->setEstimatedLaunchTime(Ljava/lang/String;IJJ)V
 PLcom/android/server/usage/AppIdleHistory;->setIdle(Ljava/lang/String;IZJ)I
-HPLcom/android/server/usage/AppIdleHistory;->setLastJobRunTime(Ljava/lang/String;IJ)V+]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;
+HSPLcom/android/server/usage/AppIdleHistory;->setLastJobRunTime(Ljava/lang/String;IJ)V+]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;
 HSPLcom/android/server/usage/AppIdleHistory;->shouldInformListeners(Ljava/lang/String;IJI)Z
 HSPLcom/android/server/usage/AppIdleHistory;->updateDisplay(ZJ)V
 HPLcom/android/server/usage/AppIdleHistory;->updateLastPrediction(Lcom/android/server/usage/AppIdleHistory$AppUsageHistory;JI)V
 HSPLcom/android/server/usage/AppIdleHistory;->userFileExists(I)Z
 HPLcom/android/server/usage/AppIdleHistory;->writeAppIdleDurations()V
 HPLcom/android/server/usage/AppIdleHistory;->writeAppIdleTimes(IJ)V+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;]Landroid/util/AtomicFile;Landroid/util/AtomicFile;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/nio/charset/Charset;Lcom/android/icu/charset/CharsetICU;]Lcom/android/internal/util/jobs/FastXmlSerializer;Lcom/android/internal/util/jobs/FastXmlSerializer;]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;
-PLcom/android/server/usage/AppIdleHistory;->writeAppIdleTimes(J)V
+HPLcom/android/server/usage/AppIdleHistory;->writeAppIdleTimes(J)V
 HPLcom/android/server/usage/AppIdleHistory;->writeScreenOnTime()V
 PLcom/android/server/usage/AppStandbyController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/usage/AppStandbyController;)V
 PLcom/android/server/usage/AppStandbyController$$ExternalSyntheticLambda0;->run()V
@@ -49413,14 +51092,14 @@
 HSPLcom/android/server/usage/AppStandbyController$ContentProviderUsageRecord;-><clinit>()V
 HSPLcom/android/server/usage/AppStandbyController$ContentProviderUsageRecord;-><init>()V
 HSPLcom/android/server/usage/AppStandbyController$ContentProviderUsageRecord;->obtain(Ljava/lang/String;Ljava/lang/String;I)Lcom/android/server/usage/AppStandbyController$ContentProviderUsageRecord;
-HPLcom/android/server/usage/AppStandbyController$ContentProviderUsageRecord;->recycle()V
+HSPLcom/android/server/usage/AppStandbyController$ContentProviderUsageRecord;->recycle()V
 PLcom/android/server/usage/AppStandbyController$DeviceStateReceiver$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/usage/AppStandbyController;)V
 PLcom/android/server/usage/AppStandbyController$DeviceStateReceiver$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/usage/AppStandbyController$DeviceStateReceiver;->$r8$lambda$syA3iqAJNmNp4QI-JtYPahoOdIo(Lcom/android/server/usage/AppStandbyController;)V
 HSPLcom/android/server/usage/AppStandbyController$DeviceStateReceiver;-><init>(Lcom/android/server/usage/AppStandbyController;)V
 HSPLcom/android/server/usage/AppStandbyController$DeviceStateReceiver;-><init>(Lcom/android/server/usage/AppStandbyController;Lcom/android/server/usage/AppStandbyController$DeviceStateReceiver-IA;)V
 PLcom/android/server/usage/AppStandbyController$DeviceStateReceiver;->lambda$onReceive$0(Lcom/android/server/usage/AppStandbyController;)V
-PLcom/android/server/usage/AppStandbyController$DeviceStateReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/usage/AppStandbyController$DeviceStateReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/usage/AppStandbyController$Injector;-><init>(Landroid/content/Context;Landroid/os/Looper;)V
 PLcom/android/server/usage/AppStandbyController$Injector;->dump(Ljava/io/PrintWriter;)V
 HSPLcom/android/server/usage/AppStandbyController$Injector;->elapsedRealtime()J
@@ -49432,7 +51111,7 @@
 HSPLcom/android/server/usage/AppStandbyController$Injector;->getDeviceConfigProperties([Ljava/lang/String;)Landroid/provider/DeviceConfig$Properties;
 HSPLcom/android/server/usage/AppStandbyController$Injector;->getLooper()Landroid/os/Looper;
 HSPLcom/android/server/usage/AppStandbyController$Injector;->getPackageManagerInternal()Landroid/content/pm/PackageManagerInternal;
-PLcom/android/server/usage/AppStandbyController$Injector;->getRunningUserIds()[I
+HSPLcom/android/server/usage/AppStandbyController$Injector;->getRunningUserIds()[I
 HPLcom/android/server/usage/AppStandbyController$Injector;->getValidCrossProfileTargets(Ljava/lang/String;I)Ljava/util/List;+]Landroid/content/pm/CrossProfileAppsInternal;Lcom/android/server/pm/CrossProfileAppsServiceImpl$LocalService;]Lcom/android/server/pm/pkg/parsing/PkgWithoutStateAppInfo;Lcom/android/server/pm/parsing/pkg/PackageImpl;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HSPLcom/android/server/usage/AppStandbyController$Injector;->hasExactAlarmPermission(Ljava/lang/String;I)Z
 HSPLcom/android/server/usage/AppStandbyController$Injector;->isAppIdleEnabled()Z
@@ -49456,29 +51135,30 @@
 HPLcom/android/server/usage/AppStandbyController$PackageReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V+]Lcom/android/server/usage/AppStandbyController;Lcom/android/server/usage/AppStandbyController;]Landroid/os/Handler;Lcom/android/server/usage/AppStandbyController$AppStandbyHandler;]Landroid/os/Message;Landroid/os/Message;]Landroid/content/BroadcastReceiver;Lcom/android/server/usage/AppStandbyController$PackageReceiver;]Landroid/net/Uri;Landroid/net/Uri$OpaqueUri;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/usage/AppStandbyController$Pool;-><init>([Ljava/lang/Object;)V
 HSPLcom/android/server/usage/AppStandbyController$Pool;->obtain()Ljava/lang/Object;
-HPLcom/android/server/usage/AppStandbyController$Pool;->recycle(Ljava/lang/Object;)V
-PLcom/android/server/usage/AppStandbyController$StandbyUpdateRecord;-><clinit>()V
-PLcom/android/server/usage/AppStandbyController$StandbyUpdateRecord;-><init>()V
-HPLcom/android/server/usage/AppStandbyController$StandbyUpdateRecord;->obtain(Ljava/lang/String;IIIZ)Lcom/android/server/usage/AppStandbyController$StandbyUpdateRecord;
-HPLcom/android/server/usage/AppStandbyController$StandbyUpdateRecord;->recycle()V
+HSPLcom/android/server/usage/AppStandbyController$Pool;->recycle(Ljava/lang/Object;)V
+HSPLcom/android/server/usage/AppStandbyController$StandbyUpdateRecord;-><clinit>()V
+HSPLcom/android/server/usage/AppStandbyController$StandbyUpdateRecord;-><init>()V
+HSPLcom/android/server/usage/AppStandbyController$StandbyUpdateRecord;->obtain(Ljava/lang/String;IIIZ)Lcom/android/server/usage/AppStandbyController$StandbyUpdateRecord;
+HSPLcom/android/server/usage/AppStandbyController$StandbyUpdateRecord;->recycle()V
 PLcom/android/server/usage/AppStandbyController;->$r8$lambda$gMEbbc5yTkDMdWT1TuPDkVMx0NQ(Lcom/android/server/usage/AppStandbyController;)V
 PLcom/android/server/usage/AppStandbyController;->$r8$lambda$roX42uTlnyWAZwhsobgAdPnGAlE(Lcom/android/server/usage/AppStandbyController;)V
-PLcom/android/server/usage/AppStandbyController;->-$$Nest$fgetmAppIdleEnabled(Lcom/android/server/usage/AppStandbyController;)Z
+HSPLcom/android/server/usage/AppStandbyController;->-$$Nest$fgetmAppIdleEnabled(Lcom/android/server/usage/AppStandbyController;)Z
 HSPLcom/android/server/usage/AppStandbyController;->-$$Nest$fgetmAppIdleHistory(Lcom/android/server/usage/AppStandbyController;)Lcom/android/server/usage/AppIdleHistory;
 HSPLcom/android/server/usage/AppStandbyController;->-$$Nest$fgetmAppIdleLock(Lcom/android/server/usage/AppStandbyController;)Ljava/lang/Object;
 HSPLcom/android/server/usage/AppStandbyController;->-$$Nest$fgetmAppStandbyProperties(Lcom/android/server/usage/AppStandbyController;)Ljava/util/Map;
 HSPLcom/android/server/usage/AppStandbyController;->-$$Nest$fgetmContext(Lcom/android/server/usage/AppStandbyController;)Landroid/content/Context;
-HPLcom/android/server/usage/AppStandbyController;->-$$Nest$fgetmHandler(Lcom/android/server/usage/AppStandbyController;)Lcom/android/server/usage/AppStandbyController$AppStandbyHandler;
-PLcom/android/server/usage/AppStandbyController;->-$$Nest$fgetmPendingIdleStateChecks(Lcom/android/server/usage/AppStandbyController;)Landroid/util/SparseLongArray;
+HSPLcom/android/server/usage/AppStandbyController;->-$$Nest$fgetmHandler(Lcom/android/server/usage/AppStandbyController;)Lcom/android/server/usage/AppStandbyController$AppStandbyHandler;
+HSPLcom/android/server/usage/AppStandbyController;->-$$Nest$fgetmPendingIdleStateChecks(Lcom/android/server/usage/AppStandbyController;)Landroid/util/SparseLongArray;
 PLcom/android/server/usage/AppStandbyController;->-$$Nest$fgetmSystemServicesReady(Lcom/android/server/usage/AppStandbyController;)Z
 HSPLcom/android/server/usage/AppStandbyController;->-$$Nest$fputmAllowRestrictedBucket(Lcom/android/server/usage/AppStandbyController;Z)V
+HSPLcom/android/server/usage/AppStandbyController;->-$$Nest$fputmTriggerQuotaBumpOnNotificationSeen(Lcom/android/server/usage/AppStandbyController;Z)V
 HPLcom/android/server/usage/AppStandbyController;->-$$Nest$mcheckAndUpdateStandbyState(Lcom/android/server/usage/AppStandbyController;Ljava/lang/String;IIJ)V
 PLcom/android/server/usage/AppStandbyController;->-$$Nest$mevaluateSystemAppException(Lcom/android/server/usage/AppStandbyController;Ljava/lang/String;I)V
 HSPLcom/android/server/usage/AppStandbyController;->-$$Nest$minformListeners(Lcom/android/server/usage/AppStandbyController;Ljava/lang/String;IIIZ)V
 HSPLcom/android/server/usage/AppStandbyController;->-$$Nest$minformParoleStateChanged(Lcom/android/server/usage/AppStandbyController;)V
 HSPLcom/android/server/usage/AppStandbyController;->-$$Nest$misDisplayOn(Lcom/android/server/usage/AppStandbyController;)Z
 HSPLcom/android/server/usage/AppStandbyController;->-$$Nest$mreportContentProviderUsage(Lcom/android/server/usage/AppStandbyController;Ljava/lang/String;Ljava/lang/String;I)V
-PLcom/android/server/usage/AppStandbyController;->-$$Nest$mreportExemptedSyncScheduled(Lcom/android/server/usage/AppStandbyController;Ljava/lang/String;I)V
+HPLcom/android/server/usage/AppStandbyController;->-$$Nest$mreportExemptedSyncScheduled(Lcom/android/server/usage/AppStandbyController;Ljava/lang/String;I)V
 PLcom/android/server/usage/AppStandbyController;->-$$Nest$mreportExemptedSyncStart(Lcom/android/server/usage/AppStandbyController;Ljava/lang/String;I)V
 PLcom/android/server/usage/AppStandbyController;->-$$Nest$mreportUnexemptedSyncScheduled(Lcom/android/server/usage/AppStandbyController;Ljava/lang/String;I)V
 PLcom/android/server/usage/AppStandbyController;->-$$Nest$mupdatePowerWhitelistCache(Lcom/android/server/usage/AppStandbyController;)V
@@ -49488,12 +51168,12 @@
 HSPLcom/android/server/usage/AppStandbyController;-><init>(Lcom/android/server/usage/AppStandbyController$Injector;)V
 PLcom/android/server/usage/AppStandbyController;->addActiveDeviceAdmin(Ljava/lang/String;I)V
 HSPLcom/android/server/usage/AppStandbyController;->addListener(Lcom/android/server/usage/AppStandbyInternal$AppIdleStateChangeListener;)V
-HPLcom/android/server/usage/AppStandbyController;->checkAndUpdateStandbyState(Ljava/lang/String;IIJ)V+]Lcom/android/server/usage/AppStandbyController;Lcom/android/server/usage/AppStandbyController;]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Lcom/android/server/usage/AppStandbyController$Injector;Lcom/android/server/usage/AppStandbyController$Injector;
-HPLcom/android/server/usage/AppStandbyController;->checkIdleStates(I)Z+]Lcom/android/server/usage/AppStandbyController;Lcom/android/server/usage/AppStandbyController;]Lcom/android/server/usage/AppStandbyController$Injector;Lcom/android/server/usage/AppStandbyController$Injector;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
+HSPLcom/android/server/usage/AppStandbyController;->checkAndUpdateStandbyState(Ljava/lang/String;IIJ)V+]Lcom/android/server/usage/AppStandbyController$Injector;Lcom/android/server/usage/AppStandbyController$Injector;]Lcom/android/server/usage/AppStandbyController;Lcom/android/server/usage/AppStandbyController;]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
+HSPLcom/android/server/usage/AppStandbyController;->checkIdleStates(I)Z+]Lcom/android/server/usage/AppStandbyController;Lcom/android/server/usage/AppStandbyController;]Lcom/android/server/usage/AppStandbyController$Injector;Lcom/android/server/usage/AppStandbyController$Injector;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;
 PLcom/android/server/usage/AppStandbyController;->clearAppIdleForPackage(Ljava/lang/String;I)V
 PLcom/android/server/usage/AppStandbyController;->clearCarrierPrivilegedApps()V
 HPLcom/android/server/usage/AppStandbyController;->dumpState([Ljava/lang/String;Ljava/io/PrintWriter;)V
-PLcom/android/server/usage/AppStandbyController;->dumpUsers(Landroid/util/IndentingPrintWriter;[ILjava/util/List;)V
+HPLcom/android/server/usage/AppStandbyController;->dumpUsers(Landroid/util/IndentingPrintWriter;[ILjava/util/List;)V
 PLcom/android/server/usage/AppStandbyController;->evaluateSystemAppException(Ljava/lang/String;I)V
 HSPLcom/android/server/usage/AppStandbyController;->fetchCarrierPrivilegedAppsCPL()V
 HPLcom/android/server/usage/AppStandbyController;->flushToDisk()V
@@ -49504,19 +51184,21 @@
 HSPLcom/android/server/usage/AppStandbyController;->getAppStandbyBucket(Ljava/lang/String;IJZ)I+]Lcom/android/server/usage/AppStandbyController$Injector;Lcom/android/server/usage/AppStandbyController$Injector;]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;
 HSPLcom/android/server/usage/AppStandbyController;->getAppStandbyBucketReason(Ljava/lang/String;IJ)I
 HSPLcom/android/server/usage/AppStandbyController;->getAppStandbyBuckets(I)Ljava/util/List;
+HPLcom/android/server/usage/AppStandbyController;->getBroadcastResponseExemptedPermissions()Ljava/util/List;
+HPLcom/android/server/usage/AppStandbyController;->getBroadcastResponseExemptedRoles()Ljava/util/List;
 HPLcom/android/server/usage/AppStandbyController;->getBroadcastResponseFgThresholdState()I
 HPLcom/android/server/usage/AppStandbyController;->getBroadcastResponseWindowDurationMs()J
 HPLcom/android/server/usage/AppStandbyController;->getBroadcastSessionsDurationMs()J
 HPLcom/android/server/usage/AppStandbyController;->getBroadcastSessionsWithResponseDurationMs()J
-HPLcom/android/server/usage/AppStandbyController;->getBucketForLocked(Ljava/lang/String;IJ)I
+HSPLcom/android/server/usage/AppStandbyController;->getBucketForLocked(Ljava/lang/String;IJ)I
 HPLcom/android/server/usage/AppStandbyController;->getCrossProfileTargets(Ljava/lang/String;I)Ljava/util/List;+]Lcom/android/server/usage/AppStandbyController$Injector;Lcom/android/server/usage/AppStandbyController$Injector;
 HPLcom/android/server/usage/AppStandbyController;->getEstimatedLaunchTime(Ljava/lang/String;I)J
 HSPLcom/android/server/usage/AppStandbyController;->getIdleUidsForUser(I)[I
-HPLcom/android/server/usage/AppStandbyController;->getMinBucketWithValidExpiryTime(Lcom/android/server/usage/AppIdleHistory$AppUsageHistory;IJ)I
+HSPLcom/android/server/usage/AppStandbyController;->getMinBucketWithValidExpiryTime(Lcom/android/server/usage/AppIdleHistory$AppUsageHistory;IJ)I+]Landroid/util/SparseLongArray;Landroid/util/SparseLongArray;
 PLcom/android/server/usage/AppStandbyController;->getSystemPackagesWithLauncherActivities()Ljava/util/Set;
 PLcom/android/server/usage/AppStandbyController;->getTimeSinceLastJobRun(Ljava/lang/String;I)J
 HPLcom/android/server/usage/AppStandbyController;->getTimeSinceLastUsedByUser(Ljava/lang/String;I)J
-HSPLcom/android/server/usage/AppStandbyController;->informListeners(Ljava/lang/String;IIIZ)V
+HSPLcom/android/server/usage/AppStandbyController;->informListeners(Ljava/lang/String;IIIZ)V+]Lcom/android/server/usage/AppStandbyInternal$AppIdleStateChangeListener;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HSPLcom/android/server/usage/AppStandbyController;->informParoleStateChanged()V
 PLcom/android/server/usage/AppStandbyController;->initializeDefaultsForSystemApps(I)V
 HSPLcom/android/server/usage/AppStandbyController;->isActiveDeviceAdmin(Ljava/lang/String;I)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/Set;Landroid/util/ArraySet;
@@ -49541,13 +51223,13 @@
 HSPLcom/android/server/usage/AppStandbyController;->onBootPhase(I)V
 HPLcom/android/server/usage/AppStandbyController;->onUsageEvent(ILandroid/app/usage/UsageEvents$Event;)V+]Lcom/android/server/usage/AppStandbyController;Lcom/android/server/usage/AppStandbyController;]Lcom/android/server/usage/AppStandbyController$Injector;Lcom/android/server/usage/AppStandbyController$Injector;]Ljava/util/List;Ljava/util/Collections$EmptyList;,Ljava/util/ArrayList;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Landroid/app/usage/UsageEvents$Event;Landroid/app/usage/UsageEvents$Event;
 PLcom/android/server/usage/AppStandbyController;->onUserRemoved(I)V
-PLcom/android/server/usage/AppStandbyController;->postCheckIdleStates(I)V
+HSPLcom/android/server/usage/AppStandbyController;->postCheckIdleStates(I)V
 PLcom/android/server/usage/AppStandbyController;->postOneTimeCheckIdleStates()V
 HSPLcom/android/server/usage/AppStandbyController;->postParoleStateChanged()V
 HSPLcom/android/server/usage/AppStandbyController;->postReportContentProviderUsage(Ljava/lang/String;Ljava/lang/String;I)V
 HPLcom/android/server/usage/AppStandbyController;->postReportExemptedSyncStart(Ljava/lang/String;I)V
 HPLcom/android/server/usage/AppStandbyController;->postReportSyncScheduled(Ljava/lang/String;IZ)V
-HPLcom/android/server/usage/AppStandbyController;->predictionTimedOut(Lcom/android/server/usage/AppIdleHistory$AppUsageHistory;J)Z
+HSPLcom/android/server/usage/AppStandbyController;->predictionTimedOut(Lcom/android/server/usage/AppIdleHistory$AppUsageHistory;J)Z
 HSPLcom/android/server/usage/AppStandbyController;->reportContentProviderUsage(Ljava/lang/String;Ljava/lang/String;I)V+]Lcom/android/server/usage/AppStandbyController$Injector;Lcom/android/server/usage/AppStandbyController$Injector;]Lcom/android/server/usage/AppStandbyController;Lcom/android/server/usage/AppStandbyController;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HPLcom/android/server/usage/AppStandbyController;->reportEventLocked(Ljava/lang/String;IJI)V+]Lcom/android/server/usage/AppStandbyController;Lcom/android/server/usage/AppStandbyController;]Landroid/os/Handler;Lcom/android/server/usage/AppStandbyController$AppStandbyHandler;]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;
 HPLcom/android/server/usage/AppStandbyController;->reportExemptedSyncScheduled(Ljava/lang/String;I)V
@@ -49560,11 +51242,11 @@
 HSPLcom/android/server/usage/AppStandbyController;->setActiveAdminApps(Ljava/util/Set;I)V
 PLcom/android/server/usage/AppStandbyController;->setAppIdleAsync(Ljava/lang/String;ZI)V
 HSPLcom/android/server/usage/AppStandbyController;->setAppIdleEnabled(Z)V
-HSPLcom/android/server/usage/AppStandbyController;->setAppStandbyBucket(Ljava/lang/String;IIIJZ)V+]Lcom/android/server/usage/AppStandbyController$Injector;Lcom/android/server/usage/AppStandbyController$Injector;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/Handler;Lcom/android/server/usage/AppStandbyController$AppStandbyHandler;]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;]Lcom/android/server/usage/AppStandbyController;Lcom/android/server/usage/AppStandbyController;
+HSPLcom/android/server/usage/AppStandbyController;->setAppStandbyBucket(Ljava/lang/String;IIIJZ)V+]Lcom/android/server/usage/AppStandbyController$Injector;Lcom/android/server/usage/AppStandbyController$Injector;]Lcom/android/server/usage/AppStandbyController;Lcom/android/server/usage/AppStandbyController;]Landroid/os/Handler;Lcom/android/server/usage/AppStandbyController$AppStandbyHandler;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;
 HPLcom/android/server/usage/AppStandbyController;->setAppStandbyBuckets(Ljava/util/List;III)V
-PLcom/android/server/usage/AppStandbyController;->setChargingState(Z)V
-PLcom/android/server/usage/AppStandbyController;->setEstimatedLaunchTime(Ljava/lang/String;IJ)V
-HPLcom/android/server/usage/AppStandbyController;->setLastJobRunTime(Ljava/lang/String;IJ)V+]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;
+HSPLcom/android/server/usage/AppStandbyController;->setChargingState(Z)V
+HPLcom/android/server/usage/AppStandbyController;->setEstimatedLaunchTime(Ljava/lang/String;IJ)V
+HSPLcom/android/server/usage/AppStandbyController;->setLastJobRunTime(Ljava/lang/String;IJ)V+]Lcom/android/server/usage/AppIdleHistory;Lcom/android/server/usage/AppIdleHistory;
 HPLcom/android/server/usage/AppStandbyController;->shouldNoteResponseEventForAllBroadcastSessions()Z
 PLcom/android/server/usage/AppStandbyController;->updateHeadlessSystemAppCache(Ljava/lang/String;Z)Z
 PLcom/android/server/usage/AppStandbyController;->updatePowerWhitelistCache()V
@@ -49590,7 +51272,7 @@
 PLcom/android/server/usage/AppTimeLimitController$SessionUsageGroup;-><init>(Lcom/android/server/usage/AppTimeLimitController;Lcom/android/server/usage/AppTimeLimitController$UserData;Lcom/android/server/usage/AppTimeLimitController$ObserverAppData;I[Ljava/lang/String;JLandroid/app/PendingIntent;JLandroid/app/PendingIntent;)V
 HPLcom/android/server/usage/AppTimeLimitController$SessionUsageGroup;->dump(Ljava/io/PrintWriter;)V
 HPLcom/android/server/usage/AppTimeLimitController$SessionUsageGroup;->noteUsageStart(JJ)V
-PLcom/android/server/usage/AppTimeLimitController$SessionUsageGroup;->noteUsageStop(J)V
+HPLcom/android/server/usage/AppTimeLimitController$SessionUsageGroup;->noteUsageStop(J)V
 PLcom/android/server/usage/AppTimeLimitController$SessionUsageGroup;->onAlarm()V
 PLcom/android/server/usage/AppTimeLimitController$SessionUsageGroup;->onSessionEnd()V
 PLcom/android/server/usage/AppTimeLimitController$SessionUsageGroup;->remove()V
@@ -49619,11 +51301,11 @@
 HSPLcom/android/server/usage/AppTimeLimitController;-><init>(Landroid/content/Context;Lcom/android/server/usage/AppTimeLimitController$TimeLimitCallbackListener;Landroid/os/Looper;)V
 PLcom/android/server/usage/AppTimeLimitController;->addAppUsageLimitObserver(II[Ljava/lang/String;JJLandroid/app/PendingIntent;I)V
 PLcom/android/server/usage/AppTimeLimitController;->addAppUsageObserver(II[Ljava/lang/String;JLandroid/app/PendingIntent;I)V
-PLcom/android/server/usage/AppTimeLimitController;->addUsageSessionObserver(II[Ljava/lang/String;JJLandroid/app/PendingIntent;Landroid/app/PendingIntent;I)V
+HPLcom/android/server/usage/AppTimeLimitController;->addUsageSessionObserver(II[Ljava/lang/String;JJLandroid/app/PendingIntent;Landroid/app/PendingIntent;I)V
 PLcom/android/server/usage/AppTimeLimitController;->cancelCheckTimeoutLocked(Lcom/android/server/usage/AppTimeLimitController$UsageGroup;)V
 HPLcom/android/server/usage/AppTimeLimitController;->dump([Ljava/lang/String;Ljava/io/PrintWriter;)V
 PLcom/android/server/usage/AppTimeLimitController;->getAlarmManager()Landroid/app/AlarmManager;
-HPLcom/android/server/usage/AppTimeLimitController;->getAppUsageLimit(Ljava/lang/String;Landroid/os/UserHandle;)Landroid/app/usage/UsageStatsManagerInternal$AppUsageLimitData;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Lcom/android/server/usage/AppTimeLimitController;Lcom/android/server/usage/AppTimeLimitController;]Lcom/android/server/usage/AppTimeLimitController$AppUsageLimitGroup;Lcom/android/server/usage/AppTimeLimitController$AppUsageLimitGroup;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/usage/AppTimeLimitController;->getAppUsageLimit(Ljava/lang/String;Landroid/os/UserHandle;)Landroid/app/usage/UsageStatsManagerInternal$AppUsageLimitData;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Lcom/android/server/usage/AppTimeLimitController;Lcom/android/server/usage/AppTimeLimitController;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/usage/AppTimeLimitController$AppUsageLimitGroup;Lcom/android/server/usage/AppTimeLimitController$AppUsageLimitGroup;
 PLcom/android/server/usage/AppTimeLimitController;->getAppUsageLimitObserverPerUidLimit()J
 PLcom/android/server/usage/AppTimeLimitController;->getAppUsageObserverPerUidLimit()J
 HPLcom/android/server/usage/AppTimeLimitController;->getElapsedRealtime()J
@@ -49652,44 +51334,52 @@
 HPLcom/android/server/usage/BroadcastEvent;->hashCode()I
 HPLcom/android/server/usage/BroadcastEvent;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 PLcom/android/server/usage/BroadcastResponseStatsLogger$BroadcastEvent;-><init>()V
-PLcom/android/server/usage/BroadcastResponseStatsLogger$BroadcastEvent;->reset()V
+HPLcom/android/server/usage/BroadcastResponseStatsLogger$BroadcastEvent;->reset()V
 HPLcom/android/server/usage/BroadcastResponseStatsLogger$BroadcastEvent;->toString()Ljava/lang/String;
 HSPLcom/android/server/usage/BroadcastResponseStatsLogger$LogBuffer;-><init>(Ljava/lang/Class;I)V
 HPLcom/android/server/usage/BroadcastResponseStatsLogger$LogBuffer;->getContent(Lcom/android/server/usage/BroadcastResponseStatsLogger$Data;)Ljava/lang/String;
 HPLcom/android/server/usage/BroadcastResponseStatsLogger$LogBuffer;->logBroadcastDispatchEvent(ILjava/lang/String;Landroid/os/UserHandle;JJI)V
-HPLcom/android/server/usage/BroadcastResponseStatsLogger$LogBuffer;->logNotificationEvent(ILjava/lang/String;Landroid/os/UserHandle;J)V+]Lcom/android/internal/util/RingBuffer;Lcom/android/server/usage/BroadcastResponseStatsLogger$LogBuffer;]Lcom/android/server/usage/BroadcastResponseStatsLogger$Data;Lcom/android/server/usage/BroadcastResponseStatsLogger$NotificationEvent;]Landroid/os/UserHandle;Landroid/os/UserHandle;
-HPLcom/android/server/usage/BroadcastResponseStatsLogger$LogBuffer;->reverseDump(Lcom/android/internal/util/IndentingPrintWriter;)V
-PLcom/android/server/usage/BroadcastResponseStatsLogger$NotificationEvent;-><init>()V
-HPLcom/android/server/usage/BroadcastResponseStatsLogger$NotificationEvent;->reset()V
+HSPLcom/android/server/usage/BroadcastResponseStatsLogger$LogBuffer;->logNotificationEvent(ILjava/lang/String;Landroid/os/UserHandle;J)V+]Lcom/android/internal/util/RingBuffer;Lcom/android/server/usage/BroadcastResponseStatsLogger$LogBuffer;]Lcom/android/server/usage/BroadcastResponseStatsLogger$Data;Lcom/android/server/usage/BroadcastResponseStatsLogger$NotificationEvent;]Landroid/os/UserHandle;Landroid/os/UserHandle;
+HPLcom/android/server/usage/BroadcastResponseStatsLogger$LogBuffer;->reverseDump(Lcom/android/internal/util/IndentingPrintWriter;)V+]Lcom/android/server/usage/BroadcastResponseStatsLogger$LogBuffer;Lcom/android/server/usage/BroadcastResponseStatsLogger$LogBuffer;]Lcom/android/internal/util/RingBuffer;Lcom/android/server/usage/BroadcastResponseStatsLogger$LogBuffer;]Lcom/android/internal/util/IndentingPrintWriter;Lcom/android/internal/util/IndentingPrintWriter;
+HSPLcom/android/server/usage/BroadcastResponseStatsLogger$NotificationEvent;-><init>()V
+HSPLcom/android/server/usage/BroadcastResponseStatsLogger$NotificationEvent;->reset()V
 HPLcom/android/server/usage/BroadcastResponseStatsLogger$NotificationEvent;->toString()Ljava/lang/String;
-PLcom/android/server/usage/BroadcastResponseStatsLogger;->-$$Nest$smgetBroadcastDispatchEventLog(ILjava/lang/String;IJJI)Ljava/lang/String;
-PLcom/android/server/usage/BroadcastResponseStatsLogger;->-$$Nest$smgetNotificationEventLog(ILjava/lang/String;IJ)Ljava/lang/String;
+HPLcom/android/server/usage/BroadcastResponseStatsLogger;->-$$Nest$smgetBroadcastDispatchEventLog(ILjava/lang/String;IJJI)Ljava/lang/String;
+HPLcom/android/server/usage/BroadcastResponseStatsLogger;->-$$Nest$smgetNotificationEventLog(ILjava/lang/String;IJ)Ljava/lang/String;
 HSPLcom/android/server/usage/BroadcastResponseStatsLogger;-><clinit>()V
 HSPLcom/android/server/usage/BroadcastResponseStatsLogger;-><init>()V
 HPLcom/android/server/usage/BroadcastResponseStatsLogger;->dumpLogs(Lcom/android/internal/util/IndentingPrintWriter;)V
 HPLcom/android/server/usage/BroadcastResponseStatsLogger;->getBroadcastDispatchEventLog(ILjava/lang/String;IJJI)Ljava/lang/String;
 HPLcom/android/server/usage/BroadcastResponseStatsLogger;->getNotificationEventLog(ILjava/lang/String;IJ)Ljava/lang/String;
 HPLcom/android/server/usage/BroadcastResponseStatsLogger;->logBroadcastDispatchEvent(ILjava/lang/String;Landroid/os/UserHandle;JJI)V
-HPLcom/android/server/usage/BroadcastResponseStatsLogger;->logNotificationEvent(ILjava/lang/String;Landroid/os/UserHandle;J)V+]Lcom/android/server/usage/BroadcastResponseStatsLogger$LogBuffer;Lcom/android/server/usage/BroadcastResponseStatsLogger$LogBuffer;
-PLcom/android/server/usage/BroadcastResponseStatsLogger;->notificationEventToString(I)Ljava/lang/String;
+HSPLcom/android/server/usage/BroadcastResponseStatsLogger;->logNotificationEvent(ILjava/lang/String;Landroid/os/UserHandle;J)V+]Lcom/android/server/usage/BroadcastResponseStatsLogger$LogBuffer;Lcom/android/server/usage/BroadcastResponseStatsLogger$LogBuffer;
+HPLcom/android/server/usage/BroadcastResponseStatsLogger;->notificationEventToString(I)Ljava/lang/String;
+HSPLcom/android/server/usage/BroadcastResponseStatsTracker$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/usage/BroadcastResponseStatsTracker;)V
+PLcom/android/server/usage/BroadcastResponseStatsTracker$$ExternalSyntheticLambda0;->onRoleHoldersChanged(Ljava/lang/String;Landroid/os/UserHandle;)V
+PLcom/android/server/usage/BroadcastResponseStatsTracker;->$r8$lambda$-n26mEnQZeeiUiCyXsJkkQsm1As(Lcom/android/server/usage/BroadcastResponseStatsTracker;Ljava/lang/String;Landroid/os/UserHandle;)V
 HSPLcom/android/server/usage/BroadcastResponseStatsTracker;-><init>(Lcom/android/server/usage/AppStandbyInternal;)V
 PLcom/android/server/usage/BroadcastResponseStatsTracker;->clearBroadcastResponseStats(ILjava/lang/String;JI)V
+HPLcom/android/server/usage/BroadcastResponseStatsTracker;->doesPackageHoldExemptedPermission(Ljava/lang/String;Landroid/os/UserHandle;)Z
+HPLcom/android/server/usage/BroadcastResponseStatsTracker;->doesPackageHoldExemptedRole(Ljava/lang/String;Landroid/os/UserHandle;)Z
 HPLcom/android/server/usage/BroadcastResponseStatsTracker;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
 HPLcom/android/server/usage/BroadcastResponseStatsTracker;->dumpBroadcastEventsLocked(Lcom/android/internal/util/IndentingPrintWriter;)V
 HPLcom/android/server/usage/BroadcastResponseStatsTracker;->dumpResponseStatsLocked(Lcom/android/internal/util/IndentingPrintWriter;)V
-HPLcom/android/server/usage/BroadcastResponseStatsTracker;->getBroadcastEventsLocked(Ljava/lang/String;Landroid/os/UserHandle;)Landroid/util/ArraySet;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Lcom/android/server/usage/UserBroadcastEvents;Lcom/android/server/usage/UserBroadcastEvents;
+HPLcom/android/server/usage/BroadcastResponseStatsTracker;->dumpRoleHoldersLocked(Lcom/android/internal/util/IndentingPrintWriter;)V
+HSPLcom/android/server/usage/BroadcastResponseStatsTracker;->getBroadcastEventsLocked(Ljava/lang/String;Landroid/os/UserHandle;)Landroid/util/ArraySet;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/UserHandle;Landroid/os/UserHandle;]Lcom/android/server/usage/UserBroadcastEvents;Lcom/android/server/usage/UserBroadcastEvents;
 HPLcom/android/server/usage/BroadcastResponseStatsTracker;->getOrCreateBroadcastEvent(Landroid/util/ArraySet;ILjava/lang/String;IJ)Lcom/android/server/usage/BroadcastEvent;
 HPLcom/android/server/usage/BroadcastResponseStatsTracker;->getOrCreateBroadcastEventsLocked(Ljava/lang/String;Landroid/os/UserHandle;)Landroid/util/ArraySet;
 HPLcom/android/server/usage/BroadcastResponseStatsTracker;->getOrCreateBroadcastResponseStats(Lcom/android/server/usage/BroadcastEvent;)Landroid/app/usage/BroadcastResponseStats;
-PLcom/android/server/usage/BroadcastResponseStatsTracker;->onPackageRemoved(Ljava/lang/String;I)V
+HPLcom/android/server/usage/BroadcastResponseStatsTracker;->onPackageRemoved(Ljava/lang/String;I)V
+PLcom/android/server/usage/BroadcastResponseStatsTracker;->onRoleHoldersChanged(Ljava/lang/String;Landroid/os/UserHandle;)V
+HSPLcom/android/server/usage/BroadcastResponseStatsTracker;->onSystemServicesReady(Landroid/content/Context;)V
 PLcom/android/server/usage/BroadcastResponseStatsTracker;->onUidRemoved(I)V
 PLcom/android/server/usage/BroadcastResponseStatsTracker;->onUserRemoved(I)V
-PLcom/android/server/usage/BroadcastResponseStatsTracker;->queryBroadcastResponseStats(ILjava/lang/String;JI)Ljava/util/List;
+HPLcom/android/server/usage/BroadcastResponseStatsTracker;->queryBroadcastResponseStats(ILjava/lang/String;JI)Ljava/util/List;
 HPLcom/android/server/usage/BroadcastResponseStatsTracker;->recordAndPruneOldBroadcastDispatchTimestamps(Lcom/android/server/usage/BroadcastEvent;)V
 HPLcom/android/server/usage/BroadcastResponseStatsTracker;->reportBroadcastDispatchEvent(ILjava/lang/String;Landroid/os/UserHandle;JJI)V
 HPLcom/android/server/usage/BroadcastResponseStatsTracker;->reportNotificationCancelled(Ljava/lang/String;Landroid/os/UserHandle;J)V
-HPLcom/android/server/usage/BroadcastResponseStatsTracker;->reportNotificationEvent(ILjava/lang/String;Landroid/os/UserHandle;J)V+]Lcom/android/server/usage/BroadcastResponseStatsTracker;Lcom/android/server/usage/BroadcastResponseStatsTracker;]Lcom/android/server/usage/BroadcastResponseStatsLogger;Lcom/android/server/usage/BroadcastResponseStatsLogger;]Lcom/android/server/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;]Landroid/app/usage/BroadcastResponseStats;Landroid/app/usage/BroadcastResponseStats;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;]Landroid/util/LongArrayQueue;Landroid/util/LongArrayQueue;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/usage/BroadcastEvent;Lcom/android/server/usage/BroadcastEvent;
-HPLcom/android/server/usage/BroadcastResponseStatsTracker;->reportNotificationPosted(Ljava/lang/String;Landroid/os/UserHandle;J)V
+HSPLcom/android/server/usage/BroadcastResponseStatsTracker;->reportNotificationEvent(ILjava/lang/String;Landroid/os/UserHandle;J)V+]Lcom/android/server/usage/BroadcastResponseStatsLogger;Lcom/android/server/usage/BroadcastResponseStatsLogger;]Lcom/android/server/usage/BroadcastResponseStatsTracker;Lcom/android/server/usage/BroadcastResponseStatsTracker;]Lcom/android/server/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;]Landroid/util/LongArrayQueue;Landroid/util/LongArrayQueue;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/app/usage/BroadcastResponseStats;Landroid/app/usage/BroadcastResponseStats;]Lcom/android/server/usage/BroadcastEvent;Lcom/android/server/usage/BroadcastEvent;]Landroid/util/LongSparseArray;Landroid/util/LongSparseArray;
+HSPLcom/android/server/usage/BroadcastResponseStatsTracker;->reportNotificationPosted(Ljava/lang/String;Landroid/os/UserHandle;J)V
 HPLcom/android/server/usage/BroadcastResponseStatsTracker;->reportNotificationUpdated(Ljava/lang/String;Landroid/os/UserHandle;J)V
 HPLcom/android/server/usage/IntervalStats$EventTracker;-><init>()V
 HPLcom/android/server/usage/IntervalStats$EventTracker;->commitTime(J)V
@@ -49698,15 +51388,15 @@
 HPLcom/android/server/usage/IntervalStats;->addEvent(Landroid/app/usage/UsageEvents$Event;)V+]Landroid/app/usage/EventList;Landroid/app/usage/EventList;]Lcom/android/server/usage/IntervalStats;Lcom/android/server/usage/IntervalStats;
 PLcom/android/server/usage/IntervalStats;->commitTime(J)V
 HPLcom/android/server/usage/IntervalStats;->deobfuscateData(Lcom/android/server/usage/PackagesTokenData;)Z
-HPLcom/android/server/usage/IntervalStats;->deobfuscateEvents(Lcom/android/server/usage/PackagesTokenData;)Z+]Landroid/app/usage/EventList;Landroid/app/usage/EventList;]Lcom/android/server/usage/PackagesTokenData;Lcom/android/server/usage/PackagesTokenData;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/ArraySet;Landroid/util/ArraySet;
-HPLcom/android/server/usage/IntervalStats;->deobfuscateUsageStats(Lcom/android/server/usage/PackagesTokenData;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/usage/PackagesTokenData;Lcom/android/server/usage/PackagesTokenData;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
+HPLcom/android/server/usage/IntervalStats;->deobfuscateEvents(Lcom/android/server/usage/PackagesTokenData;)Z+]Landroid/app/usage/EventList;Landroid/app/usage/EventList;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/usage/PackagesTokenData;Lcom/android/server/usage/PackagesTokenData;
+HPLcom/android/server/usage/IntervalStats;->deobfuscateUsageStats(Lcom/android/server/usage/PackagesTokenData;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/usage/PackagesTokenData;Lcom/android/server/usage/PackagesTokenData;
 HPLcom/android/server/usage/IntervalStats;->getCachedStringRef(Ljava/lang/String;)Ljava/lang/String;+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/usage/IntervalStats;->getOrCreateConfigurationStats(Landroid/content/res/Configuration;)Landroid/app/usage/ConfigurationStats;
 HPLcom/android/server/usage/IntervalStats;->getOrCreateUsageStats(Ljava/lang/String;)Landroid/app/usage/UsageStats;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/usage/IntervalStats;Lcom/android/server/usage/IntervalStats;
 PLcom/android/server/usage/IntervalStats;->incrementAppLaunchCount(Ljava/lang/String;)V
-PLcom/android/server/usage/IntervalStats;->obfuscateData(Lcom/android/server/usage/PackagesTokenData;)V
+HPLcom/android/server/usage/IntervalStats;->obfuscateData(Lcom/android/server/usage/PackagesTokenData;)V
 HPLcom/android/server/usage/IntervalStats;->obfuscateEventsData(Lcom/android/server/usage/PackagesTokenData;)V+]Landroid/app/usage/EventList;Landroid/app/usage/EventList;]Lcom/android/server/usage/PackagesTokenData;Lcom/android/server/usage/PackagesTokenData;
-HPLcom/android/server/usage/IntervalStats;->obfuscateUsageStatsData(Lcom/android/server/usage/PackagesTokenData;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/usage/PackagesTokenData;Lcom/android/server/usage/PackagesTokenData;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Ljava/lang/Integer;Ljava/lang/Integer;
+HPLcom/android/server/usage/IntervalStats;->obfuscateUsageStatsData(Lcom/android/server/usage/PackagesTokenData;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/usage/PackagesTokenData;Lcom/android/server/usage/PackagesTokenData;
 HPLcom/android/server/usage/IntervalStats;->update(Ljava/lang/String;Ljava/lang/String;JII)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/app/usage/UsageStats;Landroid/app/usage/UsageStats;]Lcom/android/server/usage/IntervalStats;Lcom/android/server/usage/IntervalStats;
 PLcom/android/server/usage/IntervalStats;->updateChooserCounts(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 HPLcom/android/server/usage/IntervalStats;->updateConfigurationStats(Landroid/content/res/Configuration;J)V
@@ -49716,7 +51406,7 @@
 PLcom/android/server/usage/IntervalStats;->updateScreenNonInteractive(J)V
 PLcom/android/server/usage/PackagesTokenData;-><init>()V
 HPLcom/android/server/usage/PackagesTokenData;->getPackageString(I)Ljava/lang/String;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/usage/PackagesTokenData;->getPackageTokenOrAdd(Ljava/lang/String;J)I+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/lang/Long;Ljava/lang/Long;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HPLcom/android/server/usage/PackagesTokenData;->getPackageTokenOrAdd(Ljava/lang/String;J)I+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/lang/Long;Ljava/lang/Long;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/usage/PackagesTokenData;->getString(II)Ljava/lang/String;+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/usage/PackagesTokenData;->getTokenOrAdd(ILjava/lang/String;Ljava/lang/String;)I+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 PLcom/android/server/usage/PackagesTokenData;->removePackage(Ljava/lang/String;J)I
@@ -49731,7 +51421,7 @@
 HSPLcom/android/server/usage/StorageStatsService$1;-><init>(Lcom/android/server/usage/StorageStatsService;)V
 PLcom/android/server/usage/StorageStatsService$1;->onVolumeStateChanged(Landroid/os/storage/VolumeInfo;II)V
 HSPLcom/android/server/usage/StorageStatsService$2;-><init>(Lcom/android/server/usage/StorageStatsService;)V
-PLcom/android/server/usage/StorageStatsService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/usage/StorageStatsService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/usage/StorageStatsService$H;-><init>(Lcom/android/server/usage/StorageStatsService;Landroid/os/Looper;)V
 HSPLcom/android/server/usage/StorageStatsService$H;->getInitializedStrategy()Lcom/android/server/storage/CacheQuotaStrategy;
 HSPLcom/android/server/usage/StorageStatsService$H;->handleMessage(Landroid/os/Message;)V
@@ -49751,16 +51441,16 @@
 HSPLcom/android/server/usage/StorageStatsService;->-$$Nest$fgetmInstaller(Lcom/android/server/usage/StorageStatsService;)Lcom/android/server/pm/Installer;
 HPLcom/android/server/usage/StorageStatsService;->-$$Nest$fgetmLock(Lcom/android/server/usage/StorageStatsService;)Ljava/lang/Object;
 HSPLcom/android/server/usage/StorageStatsService;->-$$Nest$fgetmStorageStatsAugmenters(Lcom/android/server/usage/StorageStatsService;)Ljava/util/concurrent/CopyOnWriteArrayList;
-PLcom/android/server/usage/StorageStatsService;->-$$Nest$fgetmStorageThresholdPercentHigh(Lcom/android/server/usage/StorageStatsService;)I
+HPLcom/android/server/usage/StorageStatsService;->-$$Nest$fgetmStorageThresholdPercentHigh(Lcom/android/server/usage/StorageStatsService;)I
 PLcom/android/server/usage/StorageStatsService;->-$$Nest$minvalidateMounts(Lcom/android/server/usage/StorageStatsService;)V
 HSPLcom/android/server/usage/StorageStatsService;-><clinit>()V
 HSPLcom/android/server/usage/StorageStatsService;-><init>(Landroid/content/Context;)V
 HPLcom/android/server/usage/StorageStatsService;->checkStatsPermission(ILjava/lang/String;Z)Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
-HPLcom/android/server/usage/StorageStatsService;->enforceStatsPermission(ILjava/lang/String;)V
+HPLcom/android/server/usage/StorageStatsService;->enforceStatsPermission(ILjava/lang/String;)V+]Lcom/android/server/usage/StorageStatsService;Lcom/android/server/usage/StorageStatsService;
 HPLcom/android/server/usage/StorageStatsService;->forEachStorageStatsAugmenter(Ljava/util/function/Consumer;Ljava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/util/concurrent/CopyOnWriteArrayList;Ljava/util/concurrent/CopyOnWriteArrayList;]Ljava/util/function/Consumer;Lcom/android/server/usage/StorageStatsService$$ExternalSyntheticLambda1;,Lcom/android/server/usage/StorageStatsService$$ExternalSyntheticLambda0;,Lcom/android/server/usage/StorageStatsService$$ExternalSyntheticLambda2;
 HPLcom/android/server/usage/StorageStatsService;->getAppIds(I)[I+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/content/pm/PackageManager;Landroid/app/ApplicationPackageManager;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HPLcom/android/server/usage/StorageStatsService;->getCacheBytes(Ljava/lang/String;Ljava/lang/String;)J
-PLcom/android/server/usage/StorageStatsService;->getCacheQuotaBytes(Ljava/lang/String;ILjava/lang/String;)J
+HPLcom/android/server/usage/StorageStatsService;->getCacheQuotaBytes(Ljava/lang/String;ILjava/lang/String;)J
 HPLcom/android/server/usage/StorageStatsService;->getDefaultFlags()I
 HPLcom/android/server/usage/StorageStatsService;->getFreeBytes(Ljava/lang/String;Ljava/lang/String;)J
 HPLcom/android/server/usage/StorageStatsService;->getTotalBytes(Ljava/lang/String;Ljava/lang/String;)J
@@ -49795,32 +51485,32 @@
 PLcom/android/server/usage/UsageStatsDatabase;->doUpgradeLocked(I)V
 PLcom/android/server/usage/UsageStatsDatabase;->dump(Lcom/android/internal/util/IndentingPrintWriter;Z)V
 HPLcom/android/server/usage/UsageStatsDatabase;->dumpMappings(Lcom/android/internal/util/IndentingPrintWriter;)V
-HPLcom/android/server/usage/UsageStatsDatabase;->filterStats(Lcom/android/server/usage/IntervalStats;)V+]Landroid/app/usage/EventList;Landroid/app/usage/EventList;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Long;Ljava/lang/Long;
+HPLcom/android/server/usage/UsageStatsDatabase;->filterStats(Lcom/android/server/usage/IntervalStats;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/app/usage/EventList;Landroid/app/usage/EventList;]Ljava/lang/Long;Ljava/lang/Long;
 PLcom/android/server/usage/UsageStatsDatabase;->findBestFitBucket(JJ)I
 PLcom/android/server/usage/UsageStatsDatabase;->getBackupPayload(Ljava/lang/String;)[B
-PLcom/android/server/usage/UsageStatsDatabase;->getBackupPayload(Ljava/lang/String;I)[B
+HPLcom/android/server/usage/UsageStatsDatabase;->getBackupPayload(Ljava/lang/String;I)[B
 PLcom/android/server/usage/UsageStatsDatabase;->getBuildFingerprint()Ljava/lang/String;
 PLcom/android/server/usage/UsageStatsDatabase;->getLatestUsageStats(I)Lcom/android/server/usage/IntervalStats;
 PLcom/android/server/usage/UsageStatsDatabase;->indexFilesLocked()V
 PLcom/android/server/usage/UsageStatsDatabase;->init(J)V
 PLcom/android/server/usage/UsageStatsDatabase;->isNewUpdate()Z
-PLcom/android/server/usage/UsageStatsDatabase;->obfuscateCurrentStats([Lcom/android/server/usage/IntervalStats;)V
+HPLcom/android/server/usage/UsageStatsDatabase;->obfuscateCurrentStats([Lcom/android/server/usage/IntervalStats;)V
 PLcom/android/server/usage/UsageStatsDatabase;->onPackageRemoved(Ljava/lang/String;J)I
 PLcom/android/server/usage/UsageStatsDatabase;->onTimeChanged(J)V
 HPLcom/android/server/usage/UsageStatsDatabase;->parseBeginTime(Landroid/util/AtomicFile;)J
 HPLcom/android/server/usage/UsageStatsDatabase;->parseBeginTime(Ljava/io/File;)J+]Ljava/lang/String;Ljava/lang/String;]Ljava/io/File;Ljava/io/File;
-PLcom/android/server/usage/UsageStatsDatabase;->prune(J)V
+HPLcom/android/server/usage/UsageStatsDatabase;->prune(J)V
 HPLcom/android/server/usage/UsageStatsDatabase;->pruneChooserCountsOlderThan(Ljava/io/File;J)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/io/File;Ljava/io/File;]Lcom/android/server/usage/UsageStatsDatabase;Lcom/android/server/usage/UsageStatsDatabase;
 PLcom/android/server/usage/UsageStatsDatabase;->pruneFilesOlderThan(Ljava/io/File;J)V
 PLcom/android/server/usage/UsageStatsDatabase;->pruneUninstalledPackagesData()Z
 HPLcom/android/server/usage/UsageStatsDatabase;->putUsageStats(ILcom/android/server/usage/IntervalStats;)V
-HPLcom/android/server/usage/UsageStatsDatabase;->queryUsageStats(IJJLcom/android/server/usage/UsageStatsDatabase$StatCombiner;)Ljava/util/List;+]Lcom/android/server/usage/UsageStatsDatabase$StatCombiner;Lcom/android/server/usage/UserUsageStatsService$$ExternalSyntheticLambda2;,Lcom/android/server/usage/UserUsageStatsService$1;,Lcom/android/server/usage/UserUsageStatsService$$ExternalSyntheticLambda0;,Lcom/android/server/usage/UserUsageStatsService$4;]Landroid/app/usage/TimeSparseArray;Landroid/app/usage/TimeSparseArray;]Lcom/android/server/usage/UsageStatsDatabase;Lcom/android/server/usage/UsageStatsDatabase;
+HPLcom/android/server/usage/UsageStatsDatabase;->queryUsageStats(IJJLcom/android/server/usage/UsageStatsDatabase$StatCombiner;)Ljava/util/List;+]Lcom/android/server/usage/UsageStatsDatabase$StatCombiner;Lcom/android/server/usage/UserUsageStatsService$1;,Lcom/android/server/usage/UserUsageStatsService$$ExternalSyntheticLambda2;,Lcom/android/server/usage/UserUsageStatsService$$ExternalSyntheticLambda0;,Lcom/android/server/usage/UserUsageStatsService$4;]Lcom/android/server/usage/UsageStatsDatabase;Lcom/android/server/usage/UsageStatsDatabase;]Landroid/app/usage/TimeSparseArray;Landroid/app/usage/TimeSparseArray;
 HPLcom/android/server/usage/UsageStatsDatabase;->readLocked(Landroid/util/AtomicFile;Lcom/android/server/usage/IntervalStats;)V
 HPLcom/android/server/usage/UsageStatsDatabase;->readLocked(Landroid/util/AtomicFile;Lcom/android/server/usage/IntervalStats;ILcom/android/server/usage/PackagesTokenData;)Z
 HPLcom/android/server/usage/UsageStatsDatabase;->readLocked(Ljava/io/InputStream;Lcom/android/server/usage/IntervalStats;ILcom/android/server/usage/PackagesTokenData;)Z
 HPLcom/android/server/usage/UsageStatsDatabase;->readMappingsLocked()V
 PLcom/android/server/usage/UsageStatsDatabase;->sanitizeIntervalStatsForBackup(Lcom/android/server/usage/IntervalStats;)V
-PLcom/android/server/usage/UsageStatsDatabase;->serializeIntervalStats(Lcom/android/server/usage/IntervalStats;I)[B
+HPLcom/android/server/usage/UsageStatsDatabase;->serializeIntervalStats(Lcom/android/server/usage/IntervalStats;I)[B
 PLcom/android/server/usage/UsageStatsDatabase;->wasUpgradePerformed()Z
 PLcom/android/server/usage/UsageStatsDatabase;->writeIntervalStatsToStream(Ljava/io/DataOutputStream;Landroid/util/AtomicFile;I)V
 PLcom/android/server/usage/UsageStatsDatabase;->writeLocked(Landroid/util/AtomicFile;Lcom/android/server/usage/IntervalStats;)V
@@ -49855,13 +51545,13 @@
 HPLcom/android/server/usage/UsageStatsProtoV2;->loadCountsForAction(Landroid/util/proto/ProtoInputStream;Landroid/util/SparseIntArray;)V+]Landroid/util/proto/ProtoInputStream;Landroid/util/proto/ProtoInputStream;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
 HPLcom/android/server/usage/UsageStatsProtoV2;->loadPackagesMap(Landroid/util/proto/ProtoInputStream;Landroid/util/SparseArray;)V
 HPLcom/android/server/usage/UsageStatsProtoV2;->parseEvent(Landroid/util/proto/ProtoInputStream;J)Landroid/app/usage/UsageEvents$Event;+]Landroid/util/proto/ProtoInputStream;Landroid/util/proto/ProtoInputStream;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
-HPLcom/android/server/usage/UsageStatsProtoV2;->parsePendingEvent(Landroid/util/proto/ProtoInputStream;)Landroid/app/usage/UsageEvents$Event;
+HPLcom/android/server/usage/UsageStatsProtoV2;->parsePendingEvent(Landroid/util/proto/ProtoInputStream;)Landroid/app/usage/UsageEvents$Event;+]Landroid/util/proto/ProtoInputStream;Landroid/util/proto/ProtoInputStream;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
 HPLcom/android/server/usage/UsageStatsProtoV2;->parseUsageStats(Landroid/util/proto/ProtoInputStream;J)Landroid/app/usage/UsageStats;+]Landroid/util/proto/ProtoInputStream;Landroid/util/proto/ProtoInputStream;
 HPLcom/android/server/usage/UsageStatsProtoV2;->read(Ljava/io/InputStream;Lcom/android/server/usage/IntervalStats;)V+]Landroid/app/usage/EventList;Landroid/app/usage/EventList;]Landroid/util/proto/ProtoInputStream;Landroid/util/proto/ProtoInputStream;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/usage/UsageStatsProtoV2;->readObfuscatedData(Ljava/io/InputStream;Lcom/android/server/usage/PackagesTokenData;)V
-PLcom/android/server/usage/UsageStatsProtoV2;->readPendingEvents(Ljava/io/InputStream;Ljava/util/LinkedList;)V
+HPLcom/android/server/usage/UsageStatsProtoV2;->readPendingEvents(Ljava/io/InputStream;Ljava/util/LinkedList;)V
 HPLcom/android/server/usage/UsageStatsProtoV2;->write(Ljava/io/OutputStream;Lcom/android/server/usage/IntervalStats;)V+]Landroid/app/usage/EventList;Landroid/app/usage/EventList;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
-HPLcom/android/server/usage/UsageStatsProtoV2;->writeChooserCounts(Landroid/util/proto/ProtoOutputStream;Landroid/app/usage/UsageStats;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;
+HPLcom/android/server/usage/UsageStatsProtoV2;->writeChooserCounts(Landroid/util/proto/ProtoOutputStream;Landroid/app/usage/UsageStats;)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/usage/UsageStatsProtoV2;->writeConfigStats(Landroid/util/proto/ProtoOutputStream;JLandroid/app/usage/ConfigurationStats;Z)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
 PLcom/android/server/usage/UsageStatsProtoV2;->writeCountAndTime(Landroid/util/proto/ProtoOutputStream;JIJ)V
 HPLcom/android/server/usage/UsageStatsProtoV2;->writeCountsForAction(Landroid/util/proto/ProtoOutputStream;Landroid/util/SparseIntArray;)V
@@ -49869,8 +51559,8 @@
 PLcom/android/server/usage/UsageStatsProtoV2;->writeGlobalComponentUsage(Ljava/io/OutputStream;Ljava/util/Map;)V
 HPLcom/android/server/usage/UsageStatsProtoV2;->writeObfuscatedData(Ljava/io/OutputStream;Lcom/android/server/usage/PackagesTokenData;)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/usage/UsageStatsProtoV2;->writeOffsetTimestamp(Landroid/util/proto/ProtoOutputStream;JJJ)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;
-PLcom/android/server/usage/UsageStatsProtoV2;->writePendingEvent(Landroid/util/proto/ProtoOutputStream;Landroid/app/usage/UsageEvents$Event;)V
-PLcom/android/server/usage/UsageStatsProtoV2;->writePendingEvents(Ljava/io/OutputStream;Ljava/util/LinkedList;)V
+HPLcom/android/server/usage/UsageStatsProtoV2;->writePendingEvent(Landroid/util/proto/ProtoOutputStream;Landroid/app/usage/UsageEvents$Event;)V
+HPLcom/android/server/usage/UsageStatsProtoV2;->writePendingEvents(Ljava/io/OutputStream;Ljava/util/LinkedList;)V
 HPLcom/android/server/usage/UsageStatsProtoV2;->writeUsageStats(Landroid/util/proto/ProtoOutputStream;JLandroid/app/usage/UsageStats;)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;
 HSPLcom/android/server/usage/UsageStatsService$$ExternalSyntheticLambda0;-><init>()V
 HSPLcom/android/server/usage/UsageStatsService$1;-><init>(Lcom/android/server/usage/UsageStatsService;)V
@@ -49879,23 +51569,23 @@
 PLcom/android/server/usage/UsageStatsService$2;->onLimitReached(IIJJLandroid/app/PendingIntent;)V
 PLcom/android/server/usage/UsageStatsService$2;->onSessionEnd(IIJLandroid/app/PendingIntent;)V
 HSPLcom/android/server/usage/UsageStatsService$3;-><init>(Lcom/android/server/usage/UsageStatsService;)V
-HSPLcom/android/server/usage/UsageStatsService$3;->onUidGone(IZ)V
+HSPLcom/android/server/usage/UsageStatsService$3;->onUidGone(IZ)V+]Lcom/android/server/usage/UsageStatsService$3;Lcom/android/server/usage/UsageStatsService$3;
 HSPLcom/android/server/usage/UsageStatsService$3;->onUidStateChanged(IIJI)V+]Landroid/os/Handler;Lcom/android/server/usage/UsageStatsService$H;]Landroid/os/Message;Landroid/os/Message;
 PLcom/android/server/usage/UsageStatsService$ActivityData;->-$$Nest$fgetmTaskRootClass(Lcom/android/server/usage/UsageStatsService$ActivityData;)Ljava/lang/String;
 PLcom/android/server/usage/UsageStatsService$ActivityData;->-$$Nest$fgetmTaskRootPackage(Lcom/android/server/usage/UsageStatsService$ActivityData;)Ljava/lang/String;
 PLcom/android/server/usage/UsageStatsService$ActivityData;->-$$Nest$fgetmUsageSourcePackage(Lcom/android/server/usage/UsageStatsService$ActivityData;)Ljava/lang/String;
-PLcom/android/server/usage/UsageStatsService$ActivityData;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/usage/UsageStatsService$ActivityData;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/usage/UsageStatsService$ActivityData;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/android/server/usage/UsageStatsService$ActivityData-IA;)V
 HSPLcom/android/server/usage/UsageStatsService$BinderService;-><init>(Lcom/android/server/usage/UsageStatsService;)V
 HSPLcom/android/server/usage/UsageStatsService$BinderService;-><init>(Lcom/android/server/usage/UsageStatsService;Lcom/android/server/usage/UsageStatsService$BinderService-IA;)V
 PLcom/android/server/usage/UsageStatsService$BinderService;->checkCallerIsSameApp(Ljava/lang/String;)V
 PLcom/android/server/usage/UsageStatsService$BinderService;->checkCallerIsSystemOrSameApp(Ljava/lang/String;)V
 PLcom/android/server/usage/UsageStatsService$BinderService;->clearBroadcastResponseStats(Ljava/lang/String;JLjava/lang/String;I)V
-PLcom/android/server/usage/UsageStatsService$BinderService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
-HPLcom/android/server/usage/UsageStatsService$BinderService;->getAppStandbyBucket(Ljava/lang/String;Ljava/lang/String;I)I
+HPLcom/android/server/usage/UsageStatsService$BinderService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
+HPLcom/android/server/usage/UsageStatsService$BinderService;->getAppStandbyBucket(Ljava/lang/String;Ljava/lang/String;I)I+]Lcom/android/server/usage/UsageStatsService$BinderService;Lcom/android/server/usage/UsageStatsService$BinderService;]Lcom/android/server/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;]Landroid/app/IActivityManager;Lcom/android/server/am/ActivityManagerService;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;
 HPLcom/android/server/usage/UsageStatsService$BinderService;->getAppStandbyBuckets(Ljava/lang/String;I)Landroid/content/pm/ParceledListSlice;
 PLcom/android/server/usage/UsageStatsService$BinderService;->getLastTimeAnyComponentUsed(Ljava/lang/String;Ljava/lang/String;)J
-PLcom/android/server/usage/UsageStatsService$BinderService;->getUsageSource()I
+HPLcom/android/server/usage/UsageStatsService$BinderService;->getUsageSource()I
 HPLcom/android/server/usage/UsageStatsService$BinderService;->hasObserverPermission()Z
 HPLcom/android/server/usage/UsageStatsService$BinderService;->hasPermission(Ljava/lang/String;)Z+]Lcom/android/server/SystemService;Lcom/android/server/usage/UsageStatsService;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
 PLcom/android/server/usage/UsageStatsService$BinderService;->hasPermissions([Ljava/lang/String;)Z
@@ -49904,7 +51594,7 @@
 PLcom/android/server/usage/UsageStatsService$BinderService;->onCarrierPrivilegedAppsChanged()V
 HPLcom/android/server/usage/UsageStatsService$BinderService;->queryBroadcastResponseStats(Ljava/lang/String;JLjava/lang/String;I)Landroid/app/usage/BroadcastResponseStatsList;
 HPLcom/android/server/usage/UsageStatsService$BinderService;->queryEvents(JJLjava/lang/String;)Landroid/app/usage/UsageEvents;+]Lcom/android/server/usage/UsageStatsService$BinderService;Lcom/android/server/usage/UsageStatsService$BinderService;]Lcom/android/server/usage/UsageStatsService;Lcom/android/server/usage/UsageStatsService;
-PLcom/android/server/usage/UsageStatsService$BinderService;->queryEventsForPackage(JJLjava/lang/String;)Landroid/app/usage/UsageEvents;
+HPLcom/android/server/usage/UsageStatsService$BinderService;->queryEventsForPackage(JJLjava/lang/String;)Landroid/app/usage/UsageEvents;
 PLcom/android/server/usage/UsageStatsService$BinderService;->queryEventsForPackageForUser(JJILjava/lang/String;Ljava/lang/String;)Landroid/app/usage/UsageEvents;
 PLcom/android/server/usage/UsageStatsService$BinderService;->queryEventsForUser(JJILjava/lang/String;)Landroid/app/usage/UsageEvents;
 HPLcom/android/server/usage/UsageStatsService$BinderService;->queryUsageStats(IJJLjava/lang/String;I)Landroid/content/pm/ParceledListSlice;
@@ -49915,7 +51605,7 @@
 PLcom/android/server/usage/UsageStatsService$BinderService;->reportUserInteraction(Ljava/lang/String;I)V
 PLcom/android/server/usage/UsageStatsService$BinderService;->setAppInactive(Ljava/lang/String;ZI)V
 HPLcom/android/server/usage/UsageStatsService$BinderService;->setAppStandbyBuckets(Landroid/content/pm/ParceledListSlice;I)V
-PLcom/android/server/usage/UsageStatsService$BinderService;->setEstimatedLaunchTimes(Landroid/content/pm/ParceledListSlice;I)V
+HPLcom/android/server/usage/UsageStatsService$BinderService;->setEstimatedLaunchTimes(Landroid/content/pm/ParceledListSlice;I)V
 PLcom/android/server/usage/UsageStatsService$BinderService;->unregisterAppUsageLimitObserver(ILjava/lang/String;)V
 PLcom/android/server/usage/UsageStatsService$BinderService;->unregisterAppUsageObserver(ILjava/lang/String;)V
 PLcom/android/server/usage/UsageStatsService$BinderService;->unregisterUsageSessionObserver(ILjava/lang/String;)V
@@ -49924,7 +51614,7 @@
 HSPLcom/android/server/usage/UsageStatsService$Injector;-><init>()V
 HSPLcom/android/server/usage/UsageStatsService$Injector;->getAppStandbyController(Landroid/content/Context;)Lcom/android/server/usage/AppStandbyInternal;
 PLcom/android/server/usage/UsageStatsService$LaunchTimeAlarmQueue;-><init>(Lcom/android/server/usage/UsageStatsService;ILandroid/content/Context;Landroid/os/Looper;)V
-PLcom/android/server/usage/UsageStatsService$LaunchTimeAlarmQueue;->processExpiredAlarms(Landroid/util/ArraySet;)V
+HPLcom/android/server/usage/UsageStatsService$LaunchTimeAlarmQueue;->processExpiredAlarms(Landroid/util/ArraySet;)V
 HSPLcom/android/server/usage/UsageStatsService$LocalService;-><init>(Lcom/android/server/usage/UsageStatsService;)V
 HSPLcom/android/server/usage/UsageStatsService$LocalService;-><init>(Lcom/android/server/usage/UsageStatsService;Lcom/android/server/usage/UsageStatsService$LocalService-IA;)V
 HSPLcom/android/server/usage/UsageStatsService$LocalService;->getAppStandbyBucket(Ljava/lang/String;IJ)I+]Lcom/android/server/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;
@@ -49942,36 +51632,37 @@
 PLcom/android/server/usage/UsageStatsService$LocalService;->queryUsageStatsForUser(IIJJZ)Ljava/util/List;
 HSPLcom/android/server/usage/UsageStatsService$LocalService;->registerLaunchTimeChangedListener(Landroid/app/usage/UsageStatsManagerInternal$EstimatedLaunchTimeChangedListener;)V
 HSPLcom/android/server/usage/UsageStatsService$LocalService;->registerListener(Landroid/app/usage/UsageStatsManagerInternal$UsageEventListener;)V
-PLcom/android/server/usage/UsageStatsService$LocalService;->reportBroadcastDispatched(ILjava/lang/String;Landroid/os/UserHandle;JJI)V
+HPLcom/android/server/usage/UsageStatsService$LocalService;->reportBroadcastDispatched(ILjava/lang/String;Landroid/os/UserHandle;JJI)V
 HSPLcom/android/server/usage/UsageStatsService$LocalService;->reportConfigurationChange(Landroid/content/res/Configuration;I)V
 HSPLcom/android/server/usage/UsageStatsService$LocalService;->reportContentProviderUsage(Ljava/lang/String;Ljava/lang/String;I)V
-HPLcom/android/server/usage/UsageStatsService$LocalService;->reportEvent(Landroid/content/ComponentName;IIILandroid/content/ComponentName;)V
+HSPLcom/android/server/usage/UsageStatsService$LocalService;->reportEvent(Landroid/content/ComponentName;IIILandroid/content/ComponentName;)V
 HSPLcom/android/server/usage/UsageStatsService$LocalService;->reportEvent(Ljava/lang/String;II)V
 HPLcom/android/server/usage/UsageStatsService$LocalService;->reportExemptedSyncStart(Ljava/lang/String;I)V
-HPLcom/android/server/usage/UsageStatsService$LocalService;->reportInterruptiveNotification(Ljava/lang/String;Ljava/lang/String;I)V
+HSPLcom/android/server/usage/UsageStatsService$LocalService;->reportInterruptiveNotification(Ljava/lang/String;Ljava/lang/String;I)V
 HPLcom/android/server/usage/UsageStatsService$LocalService;->reportLocusUpdate(Landroid/content/ComponentName;ILandroid/content/LocusId;Landroid/os/IBinder;)V
-HPLcom/android/server/usage/UsageStatsService$LocalService;->reportNotificationPosted(Ljava/lang/String;Landroid/os/UserHandle;J)V
+HSPLcom/android/server/usage/UsageStatsService$LocalService;->reportNotificationPosted(Ljava/lang/String;Landroid/os/UserHandle;J)V
 HPLcom/android/server/usage/UsageStatsService$LocalService;->reportNotificationRemoved(Ljava/lang/String;Landroid/os/UserHandle;J)V
 HPLcom/android/server/usage/UsageStatsService$LocalService;->reportNotificationUpdated(Ljava/lang/String;Landroid/os/UserHandle;J)V
 HPLcom/android/server/usage/UsageStatsService$LocalService;->reportShortcutUsage(Ljava/lang/String;Ljava/lang/String;I)V
 HPLcom/android/server/usage/UsageStatsService$LocalService;->reportSyncScheduled(Ljava/lang/String;IZ)V
 HSPLcom/android/server/usage/UsageStatsService$LocalService;->setActiveAdminApps(Ljava/util/Set;I)V
-HPLcom/android/server/usage/UsageStatsService$LocalService;->setLastJobRunTime(Ljava/lang/String;IJ)V+]Lcom/android/server/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;
+HSPLcom/android/server/usage/UsageStatsService$LocalService;->setLastJobRunTime(Ljava/lang/String;IJ)V+]Lcom/android/server/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;
+PLcom/android/server/usage/UsageStatsService$LocalService;->unregisterListener(Landroid/app/usage/UsageStatsManagerInternal$UsageEventListener;)V
 PLcom/android/server/usage/UsageStatsService$LocalService;->updatePackageMappingsData()Z
 HSPLcom/android/server/usage/UsageStatsService$MyPackageMonitor;-><init>(Lcom/android/server/usage/UsageStatsService;)V
 HSPLcom/android/server/usage/UsageStatsService$MyPackageMonitor;-><init>(Lcom/android/server/usage/UsageStatsService;Lcom/android/server/usage/UsageStatsService$MyPackageMonitor-IA;)V
-PLcom/android/server/usage/UsageStatsService$MyPackageMonitor;->onPackageRemoved(Ljava/lang/String;I)V
+HPLcom/android/server/usage/UsageStatsService$MyPackageMonitor;->onPackageRemoved(Ljava/lang/String;I)V
 HSPLcom/android/server/usage/UsageStatsService$UidRemovedReceiver;-><init>(Lcom/android/server/usage/UsageStatsService;)V
 HSPLcom/android/server/usage/UsageStatsService$UidRemovedReceiver;-><init>(Lcom/android/server/usage/UsageStatsService;Lcom/android/server/usage/UsageStatsService$UidRemovedReceiver-IA;)V
 PLcom/android/server/usage/UsageStatsService$UidRemovedReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/usage/UsageStatsService$UserActionsReceiver;-><init>(Lcom/android/server/usage/UsageStatsService;)V
 HSPLcom/android/server/usage/UsageStatsService$UserActionsReceiver;-><init>(Lcom/android/server/usage/UsageStatsService;Lcom/android/server/usage/UsageStatsService$UserActionsReceiver-IA;)V
-PLcom/android/server/usage/UsageStatsService$UserActionsReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/usage/UsageStatsService$UserActionsReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/usage/UsageStatsService;->-$$Nest$fgetmEstimatedLaunchTimeChangedListeners(Lcom/android/server/usage/UsageStatsService;)Ljava/util/concurrent/CopyOnWriteArraySet;
 PLcom/android/server/usage/UsageStatsService;->-$$Nest$fgetmLastTimeComponentUsedGlobal(Lcom/android/server/usage/UsageStatsService;)Ljava/util/Map;
 HSPLcom/android/server/usage/UsageStatsService;->-$$Nest$fgetmLock(Lcom/android/server/usage/UsageStatsService;)Ljava/lang/Object;
 PLcom/android/server/usage/UsageStatsService;->-$$Nest$fgetmPendingLaunchTimeChangePackages(Lcom/android/server/usage/UsageStatsService;)Landroid/util/SparseSetArray;
-HPLcom/android/server/usage/UsageStatsService;->-$$Nest$fgetmResponseStatsTracker(Lcom/android/server/usage/UsageStatsService;)Lcom/android/server/usage/BroadcastResponseStatsTracker;
+HSPLcom/android/server/usage/UsageStatsService;->-$$Nest$fgetmResponseStatsTracker(Lcom/android/server/usage/UsageStatsService;)Lcom/android/server/usage/BroadcastResponseStatsTracker;
 HSPLcom/android/server/usage/UsageStatsService;->-$$Nest$fgetmUidToKernelCounter(Lcom/android/server/usage/UsageStatsService;)Landroid/util/SparseIntArray;
 PLcom/android/server/usage/UsageStatsService;->-$$Nest$fgetmUserUnlockedStates(Lcom/android/server/usage/UsageStatsService;)Ljava/util/concurrent/CopyOnWriteArraySet;
 PLcom/android/server/usage/UsageStatsService;->-$$Nest$mgetDpmInternal(Lcom/android/server/usage/UsageStatsService;)Landroid/app/admin/DevicePolicyManagerInternal;
@@ -49988,8 +51679,9 @@
 PLcom/android/server/usage/UsageStatsService;->-$$Nest$mshouldDeleteObsoleteData(Lcom/android/server/usage/UsageStatsService;Landroid/os/UserHandle;)Z
 HPLcom/android/server/usage/UsageStatsService;->-$$Nest$mshouldHideLocusIdEvents(Lcom/android/server/usage/UsageStatsService;II)Z
 HPLcom/android/server/usage/UsageStatsService;->-$$Nest$mshouldHideShortcutInvocationEvents(Lcom/android/server/usage/UsageStatsService;ILjava/lang/String;II)Z
-HPLcom/android/server/usage/UsageStatsService;->-$$Nest$mshouldObfuscateInstantAppsForCaller(Lcom/android/server/usage/UsageStatsService;II)Z
+HPLcom/android/server/usage/UsageStatsService;->-$$Nest$mshouldObfuscateInstantAppsForCaller(Lcom/android/server/usage/UsageStatsService;II)Z+]Lcom/android/server/usage/UsageStatsService;Lcom/android/server/usage/UsageStatsService;
 HPLcom/android/server/usage/UsageStatsService;->-$$Nest$mshouldObfuscateNotificationEvents(Lcom/android/server/usage/UsageStatsService;II)Z
+PLcom/android/server/usage/UsageStatsService;->-$$Nest$munregisterListener(Lcom/android/server/usage/UsageStatsService;Landroid/app/usage/UsageStatsManagerInternal$UsageEventListener;)V
 PLcom/android/server/usage/UsageStatsService;->-$$Nest$mupdatePackageMappingsData(Lcom/android/server/usage/UsageStatsService;)Z
 HSPLcom/android/server/usage/UsageStatsService;->-$$Nest$sfgetKERNEL_COUNTER_FILE()Ljava/io/File;
 HSPLcom/android/server/usage/UsageStatsService;-><clinit>()V
@@ -50043,7 +51735,7 @@
 HPLcom/android/server/usage/UsageStatsService;->reportEvent(Landroid/app/usage/UsageEvents$Event;I)V+]Landroid/app/usage/UsageStatsManagerInternal$UsageEventListener;Lcom/android/server/usage/AppStandbyController;,Lcom/android/server/apphibernation/AppHibernationService$$ExternalSyntheticLambda5;,Lcom/android/server/job/controllers/QuotaController$UsageEventTracker;,Lcom/android/server/tare/InternalResourceService$2;]Landroid/os/Handler;Lcom/android/server/usage/UsageStatsService$H;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/usage/AppStandbyInternal;Lcom/android/server/usage/AppStandbyController;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/usage/UsageStatsService;Lcom/android/server/usage/UsageStatsService;]Ljava/util/Map;Landroid/util/ArrayMap;]Lcom/android/server/usage/UserUsageStatsService;Lcom/android/server/usage/UserUsageStatsService;]Ljava/util/concurrent/CopyOnWriteArraySet;Ljava/util/concurrent/CopyOnWriteArraySet;]Landroid/content/pm/PackageManagerInternal;Lcom/android/server/pm/PackageManagerService$PackageManagerInternalImpl;]Lcom/android/server/usage/AppTimeLimitController;Lcom/android/server/usage/AppTimeLimitController;
 HSPLcom/android/server/usage/UsageStatsService;->reportEventOrAddToQueue(ILandroid/app/usage/UsageEvents$Event;)V+]Landroid/os/Handler;Lcom/android/server/usage/UsageStatsService$H;]Landroid/os/Message;Landroid/os/Message;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/LinkedList;Ljava/util/LinkedList;]Ljava/util/concurrent/CopyOnWriteArraySet;Ljava/util/concurrent/CopyOnWriteArraySet;
 HPLcom/android/server/usage/UsageStatsService;->reportEventToAllUserId(Landroid/app/usage/UsageEvents$Event;)V
-PLcom/android/server/usage/UsageStatsService;->setEstimatedLaunchTimes(ILjava/util/List;)V
+HPLcom/android/server/usage/UsageStatsService;->setEstimatedLaunchTimes(ILjava/util/List;)V
 PLcom/android/server/usage/UsageStatsService;->shouldDeleteObsoleteData(Landroid/os/UserHandle;)Z
 HPLcom/android/server/usage/UsageStatsService;->shouldHideLocusIdEvents(II)Z
 HPLcom/android/server/usage/UsageStatsService;->shouldHideShortcutInvocationEvents(ILjava/lang/String;II)Z
@@ -50053,6 +51745,7 @@
 PLcom/android/server/usage/UsageStatsService;->stageChangedEstimatedLaunchTime(ILjava/lang/String;)Z
 PLcom/android/server/usage/UsageStatsService;->unregisterAppUsageLimitObserver(III)V
 PLcom/android/server/usage/UsageStatsService;->unregisterAppUsageObserver(III)V
+PLcom/android/server/usage/UsageStatsService;->unregisterListener(Landroid/app/usage/UsageStatsManagerInternal$UsageEventListener;)V
 PLcom/android/server/usage/UsageStatsService;->unregisterUsageSessionObserver(III)V
 PLcom/android/server/usage/UsageStatsService;->updatePackageMappingsData()Z
 PLcom/android/server/usage/UserBroadcastEvents;-><init>()V
@@ -50067,7 +51760,7 @@
 HPLcom/android/server/usage/UserBroadcastResponseStats;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
 HPLcom/android/server/usage/UserBroadcastResponseStats;->getOrCreateBroadcastResponseStats(Lcom/android/server/usage/BroadcastEvent;)Landroid/app/usage/BroadcastResponseStats;
 PLcom/android/server/usage/UserBroadcastResponseStats;->onPackageRemoved(Ljava/lang/String;)V
-PLcom/android/server/usage/UserBroadcastResponseStats;->populateAllBroadcastResponseStats(Ljava/util/List;Ljava/lang/String;J)V
+HPLcom/android/server/usage/UserBroadcastResponseStats;->populateAllBroadcastResponseStats(Ljava/util/List;Ljava/lang/String;J)V
 PLcom/android/server/usage/UserUsageStatsService$$ExternalSyntheticLambda0;-><init>(JJLjava/lang/String;Landroid/util/ArraySet;Z)V
 PLcom/android/server/usage/UserUsageStatsService$$ExternalSyntheticLambda0;->combine(Lcom/android/server/usage/IntervalStats;ZLjava/util/List;)Z
 PLcom/android/server/usage/UserUsageStatsService$$ExternalSyntheticLambda1;-><init>(JJLandroid/util/ArraySet;Landroid/util/ArraySet;I)V
@@ -50080,7 +51773,7 @@
 PLcom/android/server/usage/UserUsageStatsService$3;-><init>()V
 HPLcom/android/server/usage/UserUsageStatsService$4;-><init>(Lcom/android/server/usage/UserUsageStatsService;JJILandroid/util/ArraySet;)V
 HPLcom/android/server/usage/UserUsageStatsService$4;->combine(Lcom/android/server/usage/IntervalStats;ZLjava/util/List;)Z+]Landroid/app/usage/EventList;Landroid/app/usage/EventList;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/app/usage/UsageEvents$Event;Landroid/app/usage/UsageEvents$Event;
-PLcom/android/server/usage/UserUsageStatsService$5;-><init>(Lcom/android/server/usage/UserUsageStatsService;Lcom/android/internal/util/IndentingPrintWriter;)V
+HPLcom/android/server/usage/UserUsageStatsService$5;-><init>(Lcom/android/server/usage/UserUsageStatsService;Lcom/android/internal/util/IndentingPrintWriter;)V
 PLcom/android/server/usage/UserUsageStatsService$5;->checkin(Lcom/android/server/usage/IntervalStats;)Z
 PLcom/android/server/usage/UserUsageStatsService$6;-><init>(Lcom/android/server/usage/UserUsageStatsService;JJLjava/util/List;)V
 HPLcom/android/server/usage/UserUsageStatsService$6;->combine(Lcom/android/server/usage/IntervalStats;ZLjava/util/List;)Z
@@ -50092,7 +51785,7 @@
 PLcom/android/server/usage/UserUsageStatsService;-><clinit>()V
 PLcom/android/server/usage/UserUsageStatsService;-><init>(Landroid/content/Context;ILjava/io/File;Lcom/android/server/usage/UserUsageStatsService$StatsUpdatedListener;)V
 HPLcom/android/server/usage/UserUsageStatsService;->checkAndGetTimeLocked()J+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/usage/UserUsageStatsService;Lcom/android/server/usage/UserUsageStatsService;
-PLcom/android/server/usage/UserUsageStatsService;->checkin(Lcom/android/internal/util/IndentingPrintWriter;)V
+HPLcom/android/server/usage/UserUsageStatsService;->checkin(Lcom/android/internal/util/IndentingPrintWriter;)V
 HPLcom/android/server/usage/UserUsageStatsService;->convertToSystemTimeLocked(Landroid/app/usage/UsageEvents$Event;)V
 PLcom/android/server/usage/UserUsageStatsService;->dump(Lcom/android/internal/util/IndentingPrintWriter;Ljava/util/List;Z)V
 HPLcom/android/server/usage/UserUsageStatsService;->eventToString(I)Ljava/lang/String;
@@ -50119,7 +51812,7 @@
 HPLcom/android/server/usage/UserUsageStatsService;->queryEarliestEventsForPackage(JJLjava/lang/String;I)Landroid/app/usage/UsageEvents;
 HPLcom/android/server/usage/UserUsageStatsService;->queryEvents(JJI)Landroid/app/usage/UsageEvents;+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/usage/UserUsageStatsService;Lcom/android/server/usage/UserUsageStatsService;
 HPLcom/android/server/usage/UserUsageStatsService;->queryEventsForPackage(JJLjava/lang/String;Z)Landroid/app/usage/UsageEvents;
-HPLcom/android/server/usage/UserUsageStatsService;->queryStats(IJJLcom/android/server/usage/UsageStatsDatabase$StatCombiner;)Ljava/util/List;+]Lcom/android/server/usage/UsageStatsDatabase$StatCombiner;Lcom/android/server/usage/UserUsageStatsService$$ExternalSyntheticLambda2;,Lcom/android/server/usage/UserUsageStatsService$1;,Lcom/android/server/usage/UserUsageStatsService$$ExternalSyntheticLambda0;,Lcom/android/server/usage/UserUsageStatsService$4;]Lcom/android/server/usage/UsageStatsDatabase;Lcom/android/server/usage/UsageStatsDatabase;
+HPLcom/android/server/usage/UserUsageStatsService;->queryStats(IJJLcom/android/server/usage/UsageStatsDatabase$StatCombiner;)Ljava/util/List;+]Lcom/android/server/usage/UsageStatsDatabase$StatCombiner;megamorphic_types]Lcom/android/server/usage/UsageStatsDatabase;Lcom/android/server/usage/UsageStatsDatabase;
 HPLcom/android/server/usage/UserUsageStatsService;->queryUsageStats(IJJ)Ljava/util/List;
 PLcom/android/server/usage/UserUsageStatsService;->readPackageMappingsLocked(Ljava/util/HashMap;Z)V
 HPLcom/android/server/usage/UserUsageStatsService;->reportEvent(Landroid/app/usage/UsageEvents$Event;)V+]Lcom/android/server/usage/UnixCalendar;Lcom/android/server/usage/UnixCalendar;]Landroid/app/usage/UsageEvents$Event;Landroid/app/usage/UsageEvents$Event;]Lcom/android/server/usage/IntervalStats;Lcom/android/server/usage/IntervalStats;]Lcom/android/server/usage/UserUsageStatsService;Lcom/android/server/usage/UserUsageStatsService;
@@ -50132,57 +51825,57 @@
 HSPLcom/android/server/usb/MtpNotificationManager$Receiver;-><init>(Lcom/android/server/usb/MtpNotificationManager;Lcom/android/server/usb/MtpNotificationManager$Receiver-IA;)V
 HSPLcom/android/server/usb/MtpNotificationManager;-><init>(Landroid/content/Context;Lcom/android/server/usb/MtpNotificationManager$OnOpenInAppListener;)V
 PLcom/android/server/usb/MtpNotificationManager;->hideNotification(I)V
-PLcom/android/server/usb/MtpNotificationManager;->isMtpDevice(Landroid/hardware/usb/UsbDevice;)Z
-PLcom/android/server/usb/MtpNotificationManager;->shouldShowNotification(Landroid/content/pm/PackageManager;Landroid/hardware/usb/UsbDevice;)Z
+HSPLcom/android/server/usb/MtpNotificationManager;->isMtpDevice(Landroid/hardware/usb/UsbDevice;)Z
+HSPLcom/android/server/usb/MtpNotificationManager;->shouldShowNotification(Landroid/content/pm/PackageManager;Landroid/hardware/usb/UsbDevice;)Z
 PLcom/android/server/usb/MtpNotificationManager;->showNotification(Landroid/hardware/usb/UsbDevice;)V
-PLcom/android/server/usb/UsbAlsaDevice;-><init>(Landroid/media/IAudioService;IILjava/lang/String;ZZZZZ)V
+HSPLcom/android/server/usb/UsbAlsaDevice;-><init>(Landroid/media/IAudioService;IILjava/lang/String;ZZZZZ)V
 PLcom/android/server/usb/UsbAlsaDevice;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
-PLcom/android/server/usb/UsbAlsaDevice;->getAlsaCardDeviceString()Ljava/lang/String;
-PLcom/android/server/usb/UsbAlsaDevice;->getCardNum()I
+HSPLcom/android/server/usb/UsbAlsaDevice;->getAlsaCardDeviceString()Ljava/lang/String;
+HSPLcom/android/server/usb/UsbAlsaDevice;->getCardNum()I
 PLcom/android/server/usb/UsbAlsaDevice;->getDeviceAddress()Ljava/lang/String;
 PLcom/android/server/usb/UsbAlsaDevice;->isInputJackConnected()Z
-PLcom/android/server/usb/UsbAlsaDevice;->isOutputJackConnected()Z
-PLcom/android/server/usb/UsbAlsaDevice;->setDeviceNameAndDescription(Ljava/lang/String;Ljava/lang/String;)V
-PLcom/android/server/usb/UsbAlsaDevice;->start()V
-PLcom/android/server/usb/UsbAlsaDevice;->startJackDetect()V
+HSPLcom/android/server/usb/UsbAlsaDevice;->isOutputJackConnected()Z
+HSPLcom/android/server/usb/UsbAlsaDevice;->setDeviceNameAndDescription(Ljava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/usb/UsbAlsaDevice;->start()V
+HSPLcom/android/server/usb/UsbAlsaDevice;->startJackDetect()V
 PLcom/android/server/usb/UsbAlsaDevice;->stop()V
 PLcom/android/server/usb/UsbAlsaDevice;->stopJackDetect()V
 PLcom/android/server/usb/UsbAlsaDevice;->toString()Ljava/lang/String;
-PLcom/android/server/usb/UsbAlsaDevice;->updateWiredDeviceConnectionState(Z)V
+HSPLcom/android/server/usb/UsbAlsaDevice;->updateWiredDeviceConnectionState(Z)V
 PLcom/android/server/usb/UsbAlsaJackDetector;-><init>(Lcom/android/server/usb/UsbAlsaDevice;)V
 PLcom/android/server/usb/UsbAlsaJackDetector;->isInputJackConnected()Z
 PLcom/android/server/usb/UsbAlsaJackDetector;->isOutputJackConnected()Z
 PLcom/android/server/usb/UsbAlsaJackDetector;->jackDetectCallback()Z
 PLcom/android/server/usb/UsbAlsaJackDetector;->pleaseStop()V
 PLcom/android/server/usb/UsbAlsaJackDetector;->run()V
-PLcom/android/server/usb/UsbAlsaJackDetector;->startJackDetect(Lcom/android/server/usb/UsbAlsaDevice;)Lcom/android/server/usb/UsbAlsaJackDetector;
+HSPLcom/android/server/usb/UsbAlsaJackDetector;->startJackDetect(Lcom/android/server/usb/UsbAlsaDevice;)Lcom/android/server/usb/UsbAlsaJackDetector;
 HSPLcom/android/server/usb/UsbAlsaManager$DenyListEntry;-><init>(III)V
 HSPLcom/android/server/usb/UsbAlsaManager;-><clinit>()V
 HSPLcom/android/server/usb/UsbAlsaManager;-><init>(Landroid/content/Context;)V
 PLcom/android/server/usb/UsbAlsaManager;->deselectAlsaDevice()V
 PLcom/android/server/usb/UsbAlsaManager;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
 PLcom/android/server/usb/UsbAlsaManager;->getAlsaDeviceListIndexFor(Ljava/lang/String;)I
-PLcom/android/server/usb/UsbAlsaManager;->isDeviceDenylisted(III)Z
-PLcom/android/server/usb/UsbAlsaManager;->logDevices(Ljava/lang/String;)V
+HSPLcom/android/server/usb/UsbAlsaManager;->isDeviceDenylisted(III)Z
+HSPLcom/android/server/usb/UsbAlsaManager;->logDevices(Ljava/lang/String;)V
 PLcom/android/server/usb/UsbAlsaManager;->removeAlsaDeviceFromList(Ljava/lang/String;)Lcom/android/server/usb/UsbAlsaDevice;
-PLcom/android/server/usb/UsbAlsaManager;->selectAlsaDevice(Lcom/android/server/usb/UsbAlsaDevice;)V
+HSPLcom/android/server/usb/UsbAlsaManager;->selectAlsaDevice(Lcom/android/server/usb/UsbAlsaDevice;)V
 PLcom/android/server/usb/UsbAlsaManager;->selectDefaultDevice()Lcom/android/server/usb/UsbAlsaDevice;
 PLcom/android/server/usb/UsbAlsaManager;->setPeripheralMidiState(ZII)V
 HSPLcom/android/server/usb/UsbAlsaManager;->systemReady()V
-PLcom/android/server/usb/UsbAlsaManager;->usbDeviceAdded(Ljava/lang/String;Landroid/hardware/usb/UsbDevice;Lcom/android/server/usb/descriptors/UsbDescriptorParser;)V
+HSPLcom/android/server/usb/UsbAlsaManager;->usbDeviceAdded(Ljava/lang/String;Landroid/hardware/usb/UsbDevice;Lcom/android/server/usb/descriptors/UsbDescriptorParser;)V
 PLcom/android/server/usb/UsbAlsaManager;->usbDeviceRemoved(Ljava/lang/String;)V
 HSPLcom/android/server/usb/UsbDeviceLogger$Event;-><clinit>()V
 HSPLcom/android/server/usb/UsbDeviceLogger$Event;-><init>()V
-PLcom/android/server/usb/UsbDeviceLogger$Event;->toString()Ljava/lang/String;
+HPLcom/android/server/usb/UsbDeviceLogger$Event;->toString()Ljava/lang/String;
 HSPLcom/android/server/usb/UsbDeviceLogger$StringEvent;-><init>(Ljava/lang/String;)V
 PLcom/android/server/usb/UsbDeviceLogger$StringEvent;->eventToString()Ljava/lang/String;
 HSPLcom/android/server/usb/UsbDeviceLogger;-><init>(ILjava/lang/String;)V
 HPLcom/android/server/usb/UsbDeviceLogger;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;J)V
 HSPLcom/android/server/usb/UsbDeviceLogger;->log(Lcom/android/server/usb/UsbDeviceLogger$Event;)V
 HSPLcom/android/server/usb/UsbDeviceManager$1;-><init>(Lcom/android/server/usb/UsbDeviceManager;)V
-PLcom/android/server/usb/UsbDeviceManager$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/usb/UsbDeviceManager$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/usb/UsbDeviceManager$2;-><init>(Lcom/android/server/usb/UsbDeviceManager;)V
-HPLcom/android/server/usb/UsbDeviceManager$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/usb/UsbDeviceManager$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V+]Lcom/android/server/usb/UsbDeviceManager$UsbHandler;Lcom/android/server/usb/UsbDeviceManager$UsbHandlerHal;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/usb/UsbDeviceManager$3;-><init>(Lcom/android/server/usb/UsbDeviceManager;)V
 PLcom/android/server/usb/UsbDeviceManager$3;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/usb/UsbDeviceManager$4;-><init>(Lcom/android/server/usb/UsbDeviceManager;)V
@@ -50201,7 +51894,7 @@
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->getPinnedSharedPrefs(Landroid/content/Context;)Landroid/content/SharedPreferences;
 PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->getScreenUnlockedFunctions()J
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->getSystemProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->handleMessage(Landroid/os/Message;)V+]Landroid/os/Handler;Lcom/android/server/usb/UsbDeviceManager$UsbHandlerHal;]Lcom/android/internal/os/SomeArgs;Lcom/android/internal/os/SomeArgs;]Lcom/android/server/usb/UsbDeviceManager$UsbHandler;Lcom/android/server/usb/UsbDeviceManager$UsbHandlerHal;]Landroid/hardware/usb/UsbPort;Landroid/hardware/usb/UsbPort;]Landroid/hardware/usb/UsbPortStatus;Landroid/hardware/usb/UsbPortStatus;
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->isAdbEnabled()Z
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->isTv()Z
 PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->isUsbDataTransferActive(J)Z
@@ -50211,21 +51904,22 @@
 PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->resetUsbAccessoryHandshakeDebuggingInfo()V
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->sendMessage(ILjava/lang/Object;)V
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->sendMessage(ILjava/lang/Object;Z)V
-HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->sendMessage(IZ)V
+HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->sendMessage(IZ)V+]Landroid/os/Handler;Lcom/android/server/usb/UsbDeviceManager$UsbHandlerHal;
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->sendMessageDelayed(IZJ)V
-PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->sendStickyBroadcast(Landroid/content/Intent;)V
+HPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->sendStickyBroadcast(Landroid/content/Intent;)V
 PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->setAccessoryUEventTime(J)V
 PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->setAdbEnabled(Z)V
+PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->setScreenUnlockedFunctions()V
 PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->setStartAccessoryTrue()V
 PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->setSystemProperty(Ljava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateAdbNotification(Z)V
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateCurrentAccessory()V
-PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateHostState(Landroid/hardware/usb/UsbPort;Landroid/hardware/usb/UsbPortStatus;)V
+HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateHostState(Landroid/hardware/usb/UsbPort;Landroid/hardware/usb/UsbPortStatus;)V
 PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateMidiFunction()V
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateState(Ljava/lang/String;)V
 PLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateUsbFunctions()V
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateUsbGadgetHalVersion()V
-HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateUsbNotification(Z)V
+HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateUsbNotification(Z)V+]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/content/res/Resources;Landroid/content/res/Resources;]Lcom/android/server/usb/UsbDeviceManager$UsbHandler;Lcom/android/server/usb/UsbDeviceManager$UsbHandlerHal;
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateUsbSpeed()V
 HPLcom/android/server/usb/UsbDeviceManager$UsbHandler;->updateUsbStateBroadcastIfNeeded(J)V
 HSPLcom/android/server/usb/UsbDeviceManager$UsbHandlerHal$ServiceNotification;-><init>(Lcom/android/server/usb/UsbDeviceManager$UsbHandlerHal;)V
@@ -50269,9 +51963,34 @@
 PLcom/android/server/usb/UsbDeviceManager;->resetUsbGadget()V
 HSPLcom/android/server/usb/UsbDeviceManager;->setCurrentFunctions(J)V
 HSPLcom/android/server/usb/UsbDeviceManager;->setCurrentUser(ILcom/android/server/usb/UsbProfileGroupSettingsManager;)V
+PLcom/android/server/usb/UsbDeviceManager;->setScreenUnlockedFunctions(J)V
 HSPLcom/android/server/usb/UsbDeviceManager;->startAccessoryMode()V
 HSPLcom/android/server/usb/UsbDeviceManager;->systemReady()V
 HPLcom/android/server/usb/UsbDeviceManager;->updateUserRestrictions()V
+PLcom/android/server/usb/UsbDirectMidiDevice$1;-><init>(Lcom/android/server/usb/UsbDirectMidiDevice;)V
+PLcom/android/server/usb/UsbDirectMidiDevice$1;->onClose()V
+PLcom/android/server/usb/UsbDirectMidiDevice$1;->onDeviceStatusChanged(Landroid/media/midi/MidiDeviceServer;Landroid/media/midi/MidiDeviceStatus;)V
+PLcom/android/server/usb/UsbDirectMidiDevice$2;-><init>(Lcom/android/server/usb/UsbDirectMidiDevice;Ljava/lang/String;Landroid/hardware/usb/UsbDeviceConnection;Landroid/hardware/usb/UsbEndpoint;[Landroid/media/midi/MidiReceiver;I)V
+HPLcom/android/server/usb/UsbDirectMidiDevice$2;->run()V
+PLcom/android/server/usb/UsbDirectMidiDevice$3;-><init>(Lcom/android/server/usb/UsbDirectMidiDevice;Ljava/lang/String;Lcom/android/internal/midi/MidiEventScheduler;ILandroid/hardware/usb/UsbDeviceConnection;Landroid/hardware/usb/UsbEndpoint;)V
+PLcom/android/server/usb/UsbDirectMidiDevice$3;->run()V
+PLcom/android/server/usb/UsbDirectMidiDevice$InputReceiverProxy;-><init>()V
+PLcom/android/server/usb/UsbDirectMidiDevice$InputReceiverProxy;-><init>(Lcom/android/server/usb/UsbDirectMidiDevice$InputReceiverProxy-IA;)V
+PLcom/android/server/usb/UsbDirectMidiDevice$InputReceiverProxy;->setReceiver(Landroid/media/midi/MidiReceiver;)V
+PLcom/android/server/usb/UsbDirectMidiDevice;->-$$Nest$fgetmIsOpen(Lcom/android/server/usb/UsbDirectMidiDevice;)Z
+PLcom/android/server/usb/UsbDirectMidiDevice;->-$$Nest$fgetmIsUniversalMidiDevice(Lcom/android/server/usb/UsbDirectMidiDevice;)Z
+PLcom/android/server/usb/UsbDirectMidiDevice;->-$$Nest$fgetmLock(Lcom/android/server/usb/UsbDirectMidiDevice;)Ljava/lang/Object;
+PLcom/android/server/usb/UsbDirectMidiDevice;->-$$Nest$fgetmServerAvailable(Lcom/android/server/usb/UsbDirectMidiDevice;)Z
+PLcom/android/server/usb/UsbDirectMidiDevice;->-$$Nest$fgetmUsbMidiPacketConverter(Lcom/android/server/usb/UsbDirectMidiDevice;)Lcom/android/server/usb/UsbMidiPacketConverter;
+PLcom/android/server/usb/UsbDirectMidiDevice;->-$$Nest$mopenLocked(Lcom/android/server/usb/UsbDirectMidiDevice;)Z
+PLcom/android/server/usb/UsbDirectMidiDevice;-><init>(Landroid/hardware/usb/UsbDevice;Lcom/android/server/usb/descriptors/UsbDescriptorParser;ZLjava/lang/String;)V
+PLcom/android/server/usb/UsbDirectMidiDevice;->areEquivalent(Landroid/hardware/usb/UsbInterface;Landroid/hardware/usb/UsbInterface;)Z
+PLcom/android/server/usb/UsbDirectMidiDevice;->close()V
+PLcom/android/server/usb/UsbDirectMidiDevice;->closeLocked()V
+PLcom/android/server/usb/UsbDirectMidiDevice;->create(Landroid/content/Context;Landroid/hardware/usb/UsbDevice;Lcom/android/server/usb/descriptors/UsbDescriptorParser;ZLjava/lang/String;)Lcom/android/server/usb/UsbDirectMidiDevice;
+PLcom/android/server/usb/UsbDirectMidiDevice;->openLocked()Z
+PLcom/android/server/usb/UsbDirectMidiDevice;->register(Landroid/content/Context;)Z
+PLcom/android/server/usb/UsbDirectMidiDevice;->updateUsbInterface(Landroid/hardware/usb/UsbInterface;Landroid/hardware/usb/UsbDeviceConnection;)Z
 HSPLcom/android/server/usb/UsbHandlerManager;-><clinit>()V
 HSPLcom/android/server/usb/UsbHandlerManager;-><init>(Landroid/content/Context;)V
 PLcom/android/server/usb/UsbHandlerManager;->confirmUsbHandler(Landroid/content/pm/ResolveInfo;Landroid/hardware/usb/UsbDevice;Landroid/hardware/usb/UsbAccessory;)V
@@ -50280,40 +51999,49 @@
 PLcom/android/server/usb/UsbHandlerManager;->showUsbAccessoryUriActivity(Landroid/hardware/usb/UsbAccessory;Landroid/os/UserHandle;)V
 HSPLcom/android/server/usb/UsbHostManager$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/usb/UsbHostManager;)V
 HSPLcom/android/server/usb/UsbHostManager$$ExternalSyntheticLambda0;->run()V
-PLcom/android/server/usb/UsbHostManager$ConnectionRecord;-><init>(Lcom/android/server/usb/UsbHostManager;Ljava/lang/String;I[B)V
+HSPLcom/android/server/usb/UsbHostManager$ConnectionRecord;-><init>(Lcom/android/server/usb/UsbHostManager;Ljava/lang/String;I[B)V
 PLcom/android/server/usb/UsbHostManager$ConnectionRecord;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
 HSPLcom/android/server/usb/UsbHostManager;->$r8$lambda$SPDYSM5zj7AWqCOdeQkFCup_bCc(Lcom/android/server/usb/UsbHostManager;)V
 HSPLcom/android/server/usb/UsbHostManager;-><clinit>()V
 HSPLcom/android/server/usb/UsbHostManager;-><init>(Landroid/content/Context;Lcom/android/server/usb/UsbAlsaManager;Lcom/android/server/usb/UsbPermissionManager;)V
-PLcom/android/server/usb/UsbHostManager;->addConnectionRecord(Ljava/lang/String;I[B)V
-PLcom/android/server/usb/UsbHostManager;->checkUsbInterfacesDenyListed(Lcom/android/server/usb/descriptors/UsbDescriptorParser;)Z
+HSPLcom/android/server/usb/UsbHostManager;->addConnectionRecord(Ljava/lang/String;I[B)V
+HSPLcom/android/server/usb/UsbHostManager;->checkUsbInterfacesDenyListed(Lcom/android/server/usb/descriptors/UsbDescriptorParser;)Z
 PLcom/android/server/usb/UsbHostManager;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
-PLcom/android/server/usb/UsbHostManager;->generateNewUsbDeviceIdentifier()Ljava/lang/String;
-PLcom/android/server/usb/UsbHostManager;->getCurrentUserSettings()Lcom/android/server/usb/UsbProfileGroupSettingsManager;
-HPLcom/android/server/usb/UsbHostManager;->getDeviceList(Landroid/os/Bundle;)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;]Ljava/util/Set;Ljava/util/HashMap$KeySet;
-PLcom/android/server/usb/UsbHostManager;->getUsbDeviceConnectionHandler()Landroid/content/ComponentName;
+HSPLcom/android/server/usb/UsbHostManager;->generateNewUsbDeviceIdentifier()Ljava/lang/String;
+HSPLcom/android/server/usb/UsbHostManager;->getCurrentUserSettings()Lcom/android/server/usb/UsbProfileGroupSettingsManager;
+HSPLcom/android/server/usb/UsbHostManager;->getDeviceList(Landroid/os/Bundle;)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/os/Bundle;Landroid/os/Bundle;]Ljava/util/Iterator;Ljava/util/HashMap$KeyIterator;]Ljava/util/Set;Ljava/util/HashMap$KeySet;
+HSPLcom/android/server/usb/UsbHostManager;->getUsbDeviceConnectionHandler()Landroid/content/ComponentName;
 HSPLcom/android/server/usb/UsbHostManager;->isDenyListed(II)Z
 HSPLcom/android/server/usb/UsbHostManager;->isDenyListed(Ljava/lang/String;)Z
-PLcom/android/server/usb/UsbHostManager;->logUsbDevice(Lcom/android/server/usb/descriptors/UsbDescriptorParser;)V
-PLcom/android/server/usb/UsbHostManager;->openDevice(Ljava/lang/String;Lcom/android/server/usb/UsbUserPermissionManager;Ljava/lang/String;II)Landroid/os/ParcelFileDescriptor;
+HSPLcom/android/server/usb/UsbHostManager;->logUsbDevice(Lcom/android/server/usb/descriptors/UsbDescriptorParser;)V
+HSPLcom/android/server/usb/UsbHostManager;->openDevice(Ljava/lang/String;Lcom/android/server/usb/UsbUserPermissionManager;Ljava/lang/String;II)Landroid/os/ParcelFileDescriptor;+]Ljava/util/HashMap;Ljava/util/HashMap;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/usb/UsbUserPermissionManager;Lcom/android/server/usb/UsbUserPermissionManager;]Lcom/android/server/usb/UsbHostManager;Lcom/android/server/usb/UsbHostManager;
 HSPLcom/android/server/usb/UsbHostManager;->setCurrentUserSettings(Lcom/android/server/usb/UsbProfileGroupSettingsManager;)V
 HSPLcom/android/server/usb/UsbHostManager;->setUsbDeviceConnectionHandler(Landroid/content/ComponentName;)V
 HSPLcom/android/server/usb/UsbHostManager;->systemReady()V
 HSPLcom/android/server/usb/UsbHostManager;->usbDeviceAdded(Ljava/lang/String;II[B)Z
 PLcom/android/server/usb/UsbHostManager;->usbDeviceRemoved(Ljava/lang/String;)V
+PLcom/android/server/usb/UsbMidiPacketConverter$UsbMidiDecoder;-><init>(Lcom/android/server/usb/UsbMidiPacketConverter;)V
+PLcom/android/server/usb/UsbMidiPacketConverter$UsbMidiDecoder;-><init>(Lcom/android/server/usb/UsbMidiPacketConverter;Lcom/android/server/usb/UsbMidiPacketConverter$UsbMidiDecoder-IA;)V
+HPLcom/android/server/usb/UsbMidiPacketConverter$UsbMidiDecoder;->decode([BI)[B
+PLcom/android/server/usb/UsbMidiPacketConverter$UsbMidiEncoder;-><init>(Lcom/android/server/usb/UsbMidiPacketConverter;)V
+PLcom/android/server/usb/UsbMidiPacketConverter$UsbMidiEncoder;-><init>(Lcom/android/server/usb/UsbMidiPacketConverter;Lcom/android/server/usb/UsbMidiPacketConverter$UsbMidiEncoder-IA;)V
+PLcom/android/server/usb/UsbMidiPacketConverter;->-$$Nest$sfgetPAYLOAD_SIZE()[I
+PLcom/android/server/usb/UsbMidiPacketConverter;-><clinit>()V
+PLcom/android/server/usb/UsbMidiPacketConverter;-><init>(I)V
+PLcom/android/server/usb/UsbMidiPacketConverter;->usbMidiToRawMidi([BI)[B
 HSPLcom/android/server/usb/UsbPermissionManager;-><clinit>()V
 HSPLcom/android/server/usb/UsbPermissionManager;-><init>(Landroid/content/Context;Lcom/android/server/usb/UsbService;)V
 PLcom/android/server/usb/UsbPermissionManager;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
-PLcom/android/server/usb/UsbPermissionManager;->getPermissionsForUser(I)Lcom/android/server/usb/UsbUserPermissionManager;
+HSPLcom/android/server/usb/UsbPermissionManager;->getPermissionsForUser(I)Lcom/android/server/usb/UsbUserPermissionManager;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/usb/UsbPermissionManager;->usbAccessoryRemoved(Landroid/hardware/usb/UsbAccessory;)V
 PLcom/android/server/usb/UsbPermissionManager;->usbDeviceRemoved(Landroid/hardware/usb/UsbDevice;)V
 HSPLcom/android/server/usb/UsbPortManager$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/usb/UsbPortManager;Landroid/content/Intent;)V
 HSPLcom/android/server/usb/UsbPortManager$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/usb/UsbPortManager$1;-><init>(Lcom/android/server/usb/UsbPortManager;Landroid/os/Looper;)V
-HSPLcom/android/server/usb/UsbPortManager$1;->handleMessage(Landroid/os/Message;)V
+HSPLcom/android/server/usb/UsbPortManager$1;->handleMessage(Landroid/os/Message;)V+]Landroid/os/Message;Landroid/os/Message;]Landroid/os/Bundle;Landroid/os/Bundle;
 HSPLcom/android/server/usb/UsbPortManager$PortInfo;-><init>(Landroid/hardware/usb/UsbManager;Ljava/lang/String;IIZZ)V
 PLcom/android/server/usb/UsbPortManager$PortInfo;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
-HSPLcom/android/server/usb/UsbPortManager$PortInfo;->setStatus(IZIZIZIIIIZI)Z
+HSPLcom/android/server/usb/UsbPortManager$PortInfo;->setStatus(IZIZIZIIIIZI)Z+]Landroid/hardware/usb/UsbPortStatus;Landroid/hardware/usb/UsbPortStatus;
 HSPLcom/android/server/usb/UsbPortManager$PortInfo;->toString()Ljava/lang/String;
 HSPLcom/android/server/usb/UsbPortManager;->$r8$lambda$mtET4vQ2Fn5naQtaC0tYT2hsVEc(Lcom/android/server/usb/UsbPortManager;Landroid/content/Intent;)V
 HSPLcom/android/server/usb/UsbPortManager;->-$$Nest$fgetmContext(Lcom/android/server/usb/UsbPortManager;)Landroid/content/Context;
@@ -50322,23 +52050,28 @@
 HSPLcom/android/server/usb/UsbPortManager;->-$$Nest$mupdatePortsLocked(Lcom/android/server/usb/UsbPortManager;Lcom/android/internal/util/IndentingPrintWriter;Ljava/util/ArrayList;)V
 HSPLcom/android/server/usb/UsbPortManager;-><clinit>()V
 HSPLcom/android/server/usb/UsbPortManager;-><init>(Landroid/content/Context;)V
-HSPLcom/android/server/usb/UsbPortManager;->addOrUpdatePortLocked(Ljava/lang/String;IIIZIZIZZIZIIZILcom/android/internal/util/IndentingPrintWriter;)V
+HSPLcom/android/server/usb/UsbPortManager;->addOrUpdatePortLocked(Ljava/lang/String;IIIZIZIZZIZIIZILcom/android/internal/util/IndentingPrintWriter;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/usb/UsbPortManager$PortInfo;Lcom/android/server/usb/UsbPortManager$PortInfo;]Landroid/hardware/usb/UsbPort;Landroid/hardware/usb/UsbPort;
 HSPLcom/android/server/usb/UsbPortManager;->convertContaminantDetectionStatusToProto(I)I
-PLcom/android/server/usb/UsbPortManager;->disableLimitPowerTransferIfNeeded(Lcom/android/server/usb/UsbPortManager$PortInfo;Lcom/android/internal/util/IndentingPrintWriter;)V
+HPLcom/android/server/usb/UsbPortManager;->disableLimitPowerTransferIfNeeded(Lcom/android/server/usb/UsbPortManager$PortInfo;Lcom/android/internal/util/IndentingPrintWriter;)V
 PLcom/android/server/usb/UsbPortManager;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
-PLcom/android/server/usb/UsbPortManager;->enableContaminantDetectionIfNeeded(Lcom/android/server/usb/UsbPortManager$PortInfo;Lcom/android/internal/util/IndentingPrintWriter;)V
+HPLcom/android/server/usb/UsbPortManager;->enableContaminantDetectionIfNeeded(Lcom/android/server/usb/UsbPortManager$PortInfo;Lcom/android/internal/util/IndentingPrintWriter;)V
 HSPLcom/android/server/usb/UsbPortManager;->getPortStatus(Ljava/lang/String;)Landroid/hardware/usb/UsbPortStatus;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/usb/UsbPortManager;->getPorts()[Landroid/hardware/usb/UsbPort;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/usb/UsbPortManager;->getUsbHalVersion()I
 HSPLcom/android/server/usb/UsbPortManager;->handlePortAddedLocked(Lcom/android/server/usb/UsbPortManager$PortInfo;Lcom/android/internal/util/IndentingPrintWriter;)V
-PLcom/android/server/usb/UsbPortManager;->handlePortChangedLocked(Lcom/android/server/usb/UsbPortManager$PortInfo;Lcom/android/internal/util/IndentingPrintWriter;)V
+HPLcom/android/server/usb/UsbPortManager;->handlePortChangedLocked(Lcom/android/server/usb/UsbPortManager$PortInfo;Lcom/android/internal/util/IndentingPrintWriter;)V
 HSPLcom/android/server/usb/UsbPortManager;->handlePortLocked(Lcom/android/server/usb/UsbPortManager$PortInfo;Lcom/android/internal/util/IndentingPrintWriter;)V
 HSPLcom/android/server/usb/UsbPortManager;->lambda$sendPortChangedBroadcastLocked$0(Landroid/content/Intent;)V
 HSPLcom/android/server/usb/UsbPortManager;->logAndPrint(ILcom/android/internal/util/IndentingPrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/usb/UsbPortManager;->logAndPrintException(Lcom/android/internal/util/IndentingPrintWriter;Ljava/lang/String;Ljava/lang/Exception;)V
 HSPLcom/android/server/usb/UsbPortManager;->logToStatsd(Lcom/android/server/usb/UsbPortManager$PortInfo;Lcom/android/internal/util/IndentingPrintWriter;)V
+PLcom/android/server/usb/UsbPortManager;->resetUsbPort(Ljava/lang/String;ILandroid/hardware/usb/IUsbOperationInternal;Lcom/android/internal/util/IndentingPrintWriter;)V
 HSPLcom/android/server/usb/UsbPortManager;->sendPortChangedBroadcastLocked(Lcom/android/server/usb/UsbPortManager$PortInfo;)V
+PLcom/android/server/usb/UsbPortManager;->setPortRoles(Ljava/lang/String;IILcom/android/internal/util/IndentingPrintWriter;)V
 HSPLcom/android/server/usb/UsbPortManager;->systemReady()V
+PLcom/android/server/usb/UsbPortManager;->toHalUsbDataRole(I)I
+PLcom/android/server/usb/UsbPortManager;->toHalUsbMode(I)I
+PLcom/android/server/usb/UsbPortManager;->toHalUsbPowerRole(I)I
 HSPLcom/android/server/usb/UsbPortManager;->updateContaminantNotification()V
 HSPLcom/android/server/usb/UsbPortManager;->updatePorts(Ljava/util/ArrayList;)V
 HSPLcom/android/server/usb/UsbPortManager;->updatePortsLocked(Lcom/android/internal/util/IndentingPrintWriter;Ljava/util/ArrayList;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/usb/UsbPortManager;Lcom/android/server/usb/UsbPortManager;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
@@ -50365,14 +52098,14 @@
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->clearCompatibleMatchesLocked(Lcom/android/server/usb/UsbProfileGroupSettingsManager$UserPackage;Landroid/hardware/usb/DeviceFilter;)Z
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->clearDefaults(Ljava/lang/String;Landroid/os/UserHandle;)V
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->clearPackageDefaultsLocked(Lcom/android/server/usb/UsbProfileGroupSettingsManager$UserPackage;)Z
-PLcom/android/server/usb/UsbProfileGroupSettingsManager;->createDeviceAttachedIntent(Landroid/hardware/usb/UsbDevice;)Landroid/content/Intent;
-PLcom/android/server/usb/UsbProfileGroupSettingsManager;->deviceAttached(Landroid/hardware/usb/UsbDevice;)V
+HSPLcom/android/server/usb/UsbProfileGroupSettingsManager;->createDeviceAttachedIntent(Landroid/hardware/usb/UsbDevice;)Landroid/content/Intent;
+HSPLcom/android/server/usb/UsbProfileGroupSettingsManager;->deviceAttached(Landroid/hardware/usb/UsbDevice;)V
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->getAccessoryFilters(Landroid/content/pm/PackageManager;Landroid/content/pm/ResolveInfo;)Ljava/util/ArrayList;
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->getAccessoryMatchesLocked(Landroid/hardware/usb/UsbAccessory;Landroid/content/Intent;)Ljava/util/ArrayList;
-PLcom/android/server/usb/UsbProfileGroupSettingsManager;->getDefaultActivityLocked(Ljava/util/ArrayList;Lcom/android/server/usb/UsbProfileGroupSettingsManager$UserPackage;)Landroid/content/pm/ActivityInfo;
+HSPLcom/android/server/usb/UsbProfileGroupSettingsManager;->getDefaultActivityLocked(Ljava/util/ArrayList;Lcom/android/server/usb/UsbProfileGroupSettingsManager$UserPackage;)Landroid/content/pm/ActivityInfo;
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->getDeviceFilters(Landroid/content/pm/PackageManager;Landroid/content/pm/ResolveInfo;)Ljava/util/ArrayList;
-PLcom/android/server/usb/UsbProfileGroupSettingsManager;->getDeviceMatchesLocked(Landroid/hardware/usb/UsbDevice;Landroid/content/Intent;)Ljava/util/ArrayList;
+HSPLcom/android/server/usb/UsbProfileGroupSettingsManager;->getDeviceMatchesLocked(Landroid/hardware/usb/UsbDevice;Landroid/content/Intent;)Ljava/util/ArrayList;
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->getSerial(Landroid/os/UserHandle;)I
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->handlePackageAdded(Lcom/android/server/usb/UsbProfileGroupSettingsManager$UserPackage;)V
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->handlePackageAddedLocked(Lcom/android/server/usb/UsbProfileGroupSettingsManager$UserPackage;Landroid/content/pm/ActivityInfo;Ljava/lang/String;)Z
@@ -50380,14 +52113,14 @@
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->isForwardMatch(Landroid/content/pm/ResolveInfo;)Z
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->lambda$scheduleWriteSettingsLocked$1()V
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->packageMatchesLocked(Landroid/content/pm/ResolveInfo;Landroid/hardware/usb/UsbDevice;Landroid/hardware/usb/UsbAccessory;)Z
-PLcom/android/server/usb/UsbProfileGroupSettingsManager;->preferHighPriority(Ljava/util/ArrayList;)Ljava/util/ArrayList;
-PLcom/android/server/usb/UsbProfileGroupSettingsManager;->queryIntentActivitiesForAllProfiles(Landroid/content/Intent;)Ljava/util/ArrayList;
+HSPLcom/android/server/usb/UsbProfileGroupSettingsManager;->preferHighPriority(Ljava/util/ArrayList;)Ljava/util/ArrayList;
+HSPLcom/android/server/usb/UsbProfileGroupSettingsManager;->queryIntentActivitiesForAllProfiles(Landroid/content/Intent;)Ljava/util/ArrayList;
 HSPLcom/android/server/usb/UsbProfileGroupSettingsManager;->readPreference(Lorg/xmlpull/v1/XmlPullParser;)V
 HSPLcom/android/server/usb/UsbProfileGroupSettingsManager;->readSettingsLocked()V
-PLcom/android/server/usb/UsbProfileGroupSettingsManager;->removeForwardIntentIfNotNeeded(Ljava/util/ArrayList;)Ljava/util/ArrayList;
+HSPLcom/android/server/usb/UsbProfileGroupSettingsManager;->removeForwardIntentIfNotNeeded(Ljava/util/ArrayList;)Ljava/util/ArrayList;
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->removeUser(Landroid/os/UserHandle;)V
-PLcom/android/server/usb/UsbProfileGroupSettingsManager;->resolveActivity(Landroid/content/Intent;Landroid/hardware/usb/UsbDevice;Z)V
-PLcom/android/server/usb/UsbProfileGroupSettingsManager;->resolveActivity(Landroid/content/Intent;Ljava/util/ArrayList;Landroid/content/pm/ActivityInfo;Landroid/hardware/usb/UsbDevice;Landroid/hardware/usb/UsbAccessory;)V
+HSPLcom/android/server/usb/UsbProfileGroupSettingsManager;->resolveActivity(Landroid/content/Intent;Landroid/hardware/usb/UsbDevice;Z)V
+HSPLcom/android/server/usb/UsbProfileGroupSettingsManager;->resolveActivity(Landroid/content/Intent;Ljava/util/ArrayList;Landroid/content/pm/ActivityInfo;Landroid/hardware/usb/UsbDevice;Landroid/hardware/usb/UsbAccessory;)V
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->scheduleWriteSettingsLocked()V
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->setAccessoryPackage(Landroid/hardware/usb/UsbAccessory;Ljava/lang/String;Landroid/os/UserHandle;)V
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->setDevicePackage(Landroid/hardware/usb/UsbDevice;Ljava/lang/String;Landroid/os/UserHandle;)V
@@ -50395,10 +52128,10 @@
 PLcom/android/server/usb/UsbProfileGroupSettingsManager;->usbDeviceRemoved(Landroid/hardware/usb/UsbDevice;)V
 HSPLcom/android/server/usb/UsbSerialReader;-><init>(Landroid/content/Context;Lcom/android/server/usb/UsbPermissionManager;Ljava/lang/String;)V
 PLcom/android/server/usb/UsbSerialReader;->enforcePackageBelongsToUid(ILjava/lang/String;)V
-PLcom/android/server/usb/UsbSerialReader;->getSerial(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/usb/UsbSerialReader;->getSerial(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/usb/UsbSerialReader;->setDevice(Ljava/lang/Object;)V
 HSPLcom/android/server/usb/UsbService$1;-><init>(Lcom/android/server/usb/UsbService;)V
-HPLcom/android/server/usb/UsbService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/usb/UsbService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V+]Lcom/android/server/usb/UsbDeviceManager;Lcom/android/server/usb/UsbDeviceManager;]Landroid/content/Intent;Landroid/content/Intent;
 PLcom/android/server/usb/UsbService$Lifecycle$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/usb/UsbService$Lifecycle;Lcom/android/server/SystemService$TargetUser;)V
 PLcom/android/server/usb/UsbService$Lifecycle$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/usb/UsbService$Lifecycle$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/usb/UsbService$Lifecycle;)V
@@ -50426,65 +52159,68 @@
 PLcom/android/server/usb/UsbService;->getControlFd(J)Landroid/os/ParcelFileDescriptor;
 HPLcom/android/server/usb/UsbService;->getCurrentAccessory()Landroid/hardware/usb/UsbAccessory;
 PLcom/android/server/usb/UsbService;->getCurrentFunctions()J
-HPLcom/android/server/usb/UsbService;->getDeviceList(Landroid/os/Bundle;)V+]Lcom/android/server/usb/UsbHostManager;Lcom/android/server/usb/UsbHostManager;
-PLcom/android/server/usb/UsbService;->getPermissionsForUser(I)Lcom/android/server/usb/UsbUserPermissionManager;
+HSPLcom/android/server/usb/UsbService;->getDeviceList(Landroid/os/Bundle;)V+]Lcom/android/server/usb/UsbHostManager;Lcom/android/server/usb/UsbHostManager;
+HSPLcom/android/server/usb/UsbService;->getPermissionsForUser(I)Lcom/android/server/usb/UsbUserPermissionManager;+]Lcom/android/server/usb/UsbPermissionManager;Lcom/android/server/usb/UsbPermissionManager;
 HSPLcom/android/server/usb/UsbService;->getPortStatus(Ljava/lang/String;)Landroid/hardware/usb/UsbPortStatus;+]Lcom/android/server/usb/UsbPortManager;Lcom/android/server/usb/UsbPortManager;]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLcom/android/server/usb/UsbService;->getPorts()Ljava/util/List;+]Lcom/android/server/usb/UsbPortManager;Lcom/android/server/usb/UsbPortManager;]Landroid/content/Context;Landroid/app/ContextImpl;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 PLcom/android/server/usb/UsbService;->getScreenUnlockedFunctions()J
-PLcom/android/server/usb/UsbService;->getSettingsForUser(I)Lcom/android/server/usb/UsbUserSettingsManager;
+HSPLcom/android/server/usb/UsbService;->getSettingsForUser(I)Lcom/android/server/usb/UsbUserSettingsManager;
 HSPLcom/android/server/usb/UsbService;->getUsbHalVersion()I
 PLcom/android/server/usb/UsbService;->grantAccessoryPermission(Landroid/hardware/usb/UsbAccessory;I)V
-PLcom/android/server/usb/UsbService;->grantDevicePermission(Landroid/hardware/usb/UsbDevice;I)V
+HSPLcom/android/server/usb/UsbService;->grantDevicePermission(Landroid/hardware/usb/UsbDevice;I)V
 PLcom/android/server/usb/UsbService;->hasAccessoryPermission(Landroid/hardware/usb/UsbAccessory;)Z
 PLcom/android/server/usb/UsbService;->hasDefaults(Ljava/lang/String;I)Z
-PLcom/android/server/usb/UsbService;->hasDevicePermission(Landroid/hardware/usb/UsbDevice;Ljava/lang/String;)Z
+HSPLcom/android/server/usb/UsbService;->hasDevicePermission(Landroid/hardware/usb/UsbDevice;Ljava/lang/String;)Z+]Lcom/android/server/usb/UsbUserPermissionManager;Lcom/android/server/usb/UsbUserPermissionManager;]Lcom/android/server/usb/UsbService;Lcom/android/server/usb/UsbService;
 PLcom/android/server/usb/UsbService;->onStopUser(Landroid/os/UserHandle;)V
 HSPLcom/android/server/usb/UsbService;->onSwitchUser(I)V
 PLcom/android/server/usb/UsbService;->onUnlockUser(I)V
 PLcom/android/server/usb/UsbService;->openAccessory(Landroid/hardware/usb/UsbAccessory;)Landroid/os/ParcelFileDescriptor;
-PLcom/android/server/usb/UsbService;->openDevice(Ljava/lang/String;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;
+HSPLcom/android/server/usb/UsbService;->openDevice(Ljava/lang/String;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;+]Landroid/os/UserManager;Landroid/os/UserManager;]Lcom/android/server/usb/UsbService;Lcom/android/server/usb/UsbService;]Lcom/android/server/usb/UsbHostManager;Lcom/android/server/usb/UsbHostManager;
 PLcom/android/server/usb/UsbService;->requestDevicePermission(Landroid/hardware/usb/UsbDevice;Ljava/lang/String;Landroid/app/PendingIntent;)V
 PLcom/android/server/usb/UsbService;->resetUsbGadget()V
+PLcom/android/server/usb/UsbService;->resetUsbPort(Ljava/lang/String;ILandroid/hardware/usb/IUsbOperationInternal;)V
 PLcom/android/server/usb/UsbService;->setAccessoryPackage(Landroid/hardware/usb/UsbAccessory;Ljava/lang/String;I)V
 PLcom/android/server/usb/UsbService;->setCurrentFunctions(J)V
 PLcom/android/server/usb/UsbService;->setDevicePackage(Landroid/hardware/usb/UsbDevice;Ljava/lang/String;I)V
+PLcom/android/server/usb/UsbService;->setPortRoles(Ljava/lang/String;II)V
+PLcom/android/server/usb/UsbService;->setScreenUnlockedFunctions(J)V
 HSPLcom/android/server/usb/UsbService;->systemReady()V
 HSPLcom/android/server/usb/UsbSettingsManager;-><clinit>()V
 HSPLcom/android/server/usb/UsbSettingsManager;-><init>(Landroid/content/Context;Lcom/android/server/usb/UsbService;)V
 PLcom/android/server/usb/UsbSettingsManager;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
 HSPLcom/android/server/usb/UsbSettingsManager;->getSettingsForProfileGroup(Landroid/os/UserHandle;)Lcom/android/server/usb/UsbProfileGroupSettingsManager;
-PLcom/android/server/usb/UsbSettingsManager;->getSettingsForUser(I)Lcom/android/server/usb/UsbUserSettingsManager;
+HSPLcom/android/server/usb/UsbSettingsManager;->getSettingsForUser(I)Lcom/android/server/usb/UsbUserSettingsManager;
 PLcom/android/server/usb/UsbSettingsManager;->remove(Landroid/os/UserHandle;)V
-PLcom/android/server/usb/UsbUserPermissionManager;-><clinit>()V
-PLcom/android/server/usb/UsbUserPermissionManager;-><init>(Landroid/content/Context;Lcom/android/server/usb/UsbUserSettingsManager;)V
+HSPLcom/android/server/usb/UsbUserPermissionManager;-><clinit>()V
+HSPLcom/android/server/usb/UsbUserPermissionManager;-><init>(Landroid/content/Context;Lcom/android/server/usb/UsbUserSettingsManager;)V
 PLcom/android/server/usb/UsbUserPermissionManager;->checkPermission(Landroid/hardware/usb/UsbAccessory;II)V
-PLcom/android/server/usb/UsbUserPermissionManager;->checkPermission(Landroid/hardware/usb/UsbDevice;Ljava/lang/String;II)V
+HSPLcom/android/server/usb/UsbUserPermissionManager;->checkPermission(Landroid/hardware/usb/UsbDevice;Ljava/lang/String;II)V+]Lcom/android/server/usb/UsbUserPermissionManager;Lcom/android/server/usb/UsbUserPermissionManager;
 PLcom/android/server/usb/UsbUserPermissionManager;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
 PLcom/android/server/usb/UsbUserPermissionManager;->grantAccessoryPermission(Landroid/hardware/usb/UsbAccessory;I)V
-PLcom/android/server/usb/UsbUserPermissionManager;->grantDevicePermission(Landroid/hardware/usb/UsbDevice;I)V
+HSPLcom/android/server/usb/UsbUserPermissionManager;->grantDevicePermission(Landroid/hardware/usb/UsbDevice;I)V
 PLcom/android/server/usb/UsbUserPermissionManager;->hasPermission(Landroid/hardware/usb/UsbAccessory;II)Z
-PLcom/android/server/usb/UsbUserPermissionManager;->hasPermission(Landroid/hardware/usb/UsbDevice;Ljava/lang/String;II)Z
-PLcom/android/server/usb/UsbUserPermissionManager;->readPermissionsLocked()V
+HSPLcom/android/server/usb/UsbUserPermissionManager;->hasPermission(Landroid/hardware/usb/UsbDevice;Ljava/lang/String;II)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/hardware/usb/UsbDevice;Landroid/hardware/usb/UsbDevice;]Landroid/hardware/SensorPrivacyManagerInternal;Lcom/android/server/sensorprivacy/SensorPrivacyService$SensorPrivacyManagerInternalImpl;
+HSPLcom/android/server/usb/UsbUserPermissionManager;->readPermissionsLocked()V
 PLcom/android/server/usb/UsbUserPermissionManager;->removeAccessoryPermissions(Landroid/hardware/usb/UsbAccessory;)V
 PLcom/android/server/usb/UsbUserPermissionManager;->removeDevicePermissions(Landroid/hardware/usb/UsbDevice;)V
 PLcom/android/server/usb/UsbUserPermissionManager;->requestPermission(Landroid/hardware/usb/UsbDevice;Ljava/lang/String;Landroid/app/PendingIntent;II)V
 PLcom/android/server/usb/UsbUserPermissionManager;->requestPermissionDialog(Landroid/hardware/usb/UsbDevice;Landroid/hardware/usb/UsbAccessory;ZLjava/lang/String;ILandroid/content/Context;Landroid/app/PendingIntent;)V
 PLcom/android/server/usb/UsbUserPermissionManager;->requestPermissionDialog(Landroid/hardware/usb/UsbDevice;Landroid/hardware/usb/UsbAccessory;ZLjava/lang/String;Landroid/app/PendingIntent;I)V
-PLcom/android/server/usb/UsbUserSettingsManager;-><clinit>()V
-PLcom/android/server/usb/UsbUserSettingsManager;-><init>(Landroid/content/Context;Landroid/os/UserHandle;)V
+HSPLcom/android/server/usb/UsbUserSettingsManager;-><clinit>()V
+HSPLcom/android/server/usb/UsbUserSettingsManager;-><init>(Landroid/content/Context;Landroid/os/UserHandle;)V
 PLcom/android/server/usb/UsbUserSettingsManager;->canBeDefault(Landroid/hardware/usb/UsbDevice;Ljava/lang/String;)Z
 HPLcom/android/server/usb/UsbUserSettingsManager;->dump(Lcom/android/internal/util/dump/DualDumpOutputStream;Ljava/lang/String;J)V
 PLcom/android/server/usb/UsbUserSettingsManager;->getPackageActivities(Ljava/lang/String;)[Landroid/content/pm/ActivityInfo;
-PLcom/android/server/usb/UsbUserSettingsManager;->queryIntentActivities(Landroid/content/Intent;)Ljava/util/List;
-PLcom/android/server/usb/descriptors/ByteStream;-><init>([B)V
-PLcom/android/server/usb/descriptors/ByteStream;->advance(I)V
-PLcom/android/server/usb/descriptors/ByteStream;->available()I
-PLcom/android/server/usb/descriptors/ByteStream;->getByte()B
-PLcom/android/server/usb/descriptors/ByteStream;->getReadCount()I
-HPLcom/android/server/usb/descriptors/ByteStream;->getUnsignedByte()I
-PLcom/android/server/usb/descriptors/ByteStream;->resetReadCount()V
-PLcom/android/server/usb/descriptors/ByteStream;->unpackUsbInt()I
-PLcom/android/server/usb/descriptors/ByteStream;->unpackUsbShort()I
+HSPLcom/android/server/usb/UsbUserSettingsManager;->queryIntentActivities(Landroid/content/Intent;)Ljava/util/List;
+HSPLcom/android/server/usb/descriptors/ByteStream;-><init>([B)V
+HSPLcom/android/server/usb/descriptors/ByteStream;->advance(I)V
+HSPLcom/android/server/usb/descriptors/ByteStream;->available()I
+HSPLcom/android/server/usb/descriptors/ByteStream;->getByte()B
+HSPLcom/android/server/usb/descriptors/ByteStream;->getReadCount()I
+HSPLcom/android/server/usb/descriptors/ByteStream;->getUnsignedByte()I
+HSPLcom/android/server/usb/descriptors/ByteStream;->resetReadCount()V
+HSPLcom/android/server/usb/descriptors/ByteStream;->unpackUsbInt()I
+HSPLcom/android/server/usb/descriptors/ByteStream;->unpackUsbShort()I
 PLcom/android/server/usb/descriptors/ByteStream;->unpackUsbTriple()I
 PLcom/android/server/usb/descriptors/Usb10ACHeader;-><init>(IBBII)V
 PLcom/android/server/usb/descriptors/Usb10ACHeader;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
@@ -50498,115 +52234,132 @@
 PLcom/android/server/usb/descriptors/Usb10ASFormatI;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
 PLcom/android/server/usb/descriptors/Usb10ASGeneral;-><init>(IBBI)V
 PLcom/android/server/usb/descriptors/Usb10ASGeneral;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
-PLcom/android/server/usb/descriptors/Usb20ACHeader;-><init>(IBBII)V
-PLcom/android/server/usb/descriptors/Usb20ACHeader;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
-PLcom/android/server/usb/descriptors/Usb20ACInputTerminal;-><init>(IBBI)V
-PLcom/android/server/usb/descriptors/Usb20ACInputTerminal;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+HSPLcom/android/server/usb/descriptors/Usb20ACHeader;-><init>(IBBII)V
+HSPLcom/android/server/usb/descriptors/Usb20ACHeader;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+HSPLcom/android/server/usb/descriptors/Usb20ACInputTerminal;-><init>(IBBI)V
+HSPLcom/android/server/usb/descriptors/Usb20ACInputTerminal;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
 PLcom/android/server/usb/descriptors/Usb20ACMixerUnit;-><init>(IBBI)V
 PLcom/android/server/usb/descriptors/Usb20ACMixerUnit;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
-PLcom/android/server/usb/descriptors/Usb20ACOutputTerminal;-><init>(IBBI)V
-PLcom/android/server/usb/descriptors/Usb20ACOutputTerminal;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
-PLcom/android/server/usb/descriptors/Usb20ASFormatI;-><init>(IBBBI)V
-PLcom/android/server/usb/descriptors/Usb20ASFormatI;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
-PLcom/android/server/usb/descriptors/Usb20ASGeneral;-><init>(IBBI)V
-PLcom/android/server/usb/descriptors/Usb20ASGeneral;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
-PLcom/android/server/usb/descriptors/UsbACAudioStreamEndpoint;-><init>(IBIB)V
-PLcom/android/server/usb/descriptors/UsbACAudioStreamEndpoint;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
-PLcom/android/server/usb/descriptors/UsbACEndpoint;-><init>(IBIB)V
-PLcom/android/server/usb/descriptors/UsbACEndpoint;->allocDescriptor(Lcom/android/server/usb/descriptors/UsbDescriptorParser;IBB)Lcom/android/server/usb/descriptors/UsbDescriptor;
-PLcom/android/server/usb/descriptors/UsbACEndpoint;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+HSPLcom/android/server/usb/descriptors/Usb20ACOutputTerminal;-><init>(IBBI)V
+HSPLcom/android/server/usb/descriptors/Usb20ACOutputTerminal;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+HSPLcom/android/server/usb/descriptors/Usb20ASFormatI;-><init>(IBBBI)V
+HSPLcom/android/server/usb/descriptors/Usb20ASFormatI;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+HSPLcom/android/server/usb/descriptors/Usb20ASGeneral;-><init>(IBBI)V
+HSPLcom/android/server/usb/descriptors/Usb20ASGeneral;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+HSPLcom/android/server/usb/descriptors/UsbACAudioStreamEndpoint;-><init>(IBIB)V
+HSPLcom/android/server/usb/descriptors/UsbACAudioStreamEndpoint;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+HSPLcom/android/server/usb/descriptors/UsbACEndpoint;-><init>(IBIB)V
+HSPLcom/android/server/usb/descriptors/UsbACEndpoint;->allocDescriptor(Lcom/android/server/usb/descriptors/UsbDescriptorParser;IBB)Lcom/android/server/usb/descriptors/UsbDescriptor;
+HSPLcom/android/server/usb/descriptors/UsbACEndpoint;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
 PLcom/android/server/usb/descriptors/UsbACFeatureUnit;-><init>(IBBI)V
-PLcom/android/server/usb/descriptors/UsbACHeaderInterface;-><init>(IBBII)V
-PLcom/android/server/usb/descriptors/UsbACInterface;-><init>(IBBI)V
-PLcom/android/server/usb/descriptors/UsbACInterface;->allocAudioControlDescriptor(Lcom/android/server/usb/descriptors/UsbDescriptorParser;Lcom/android/server/usb/descriptors/ByteStream;IBBI)Lcom/android/server/usb/descriptors/UsbDescriptor;
-PLcom/android/server/usb/descriptors/UsbACInterface;->allocAudioStreamingDescriptor(Lcom/android/server/usb/descriptors/UsbDescriptorParser;Lcom/android/server/usb/descriptors/ByteStream;IBBI)Lcom/android/server/usb/descriptors/UsbDescriptor;
-PLcom/android/server/usb/descriptors/UsbACInterface;->allocDescriptor(Lcom/android/server/usb/descriptors/UsbDescriptorParser;Lcom/android/server/usb/descriptors/ByteStream;IB)Lcom/android/server/usb/descriptors/UsbDescriptor;
-PLcom/android/server/usb/descriptors/UsbACInterface;->getSubclass()I
-PLcom/android/server/usb/descriptors/UsbACInterface;->getSubtype()B
-PLcom/android/server/usb/descriptors/UsbACInterfaceUnparsed;-><init>(IBBI)V
+HSPLcom/android/server/usb/descriptors/UsbACHeaderInterface;-><init>(IBBII)V
+HSPLcom/android/server/usb/descriptors/UsbACInterface;-><init>(IBBI)V
+HSPLcom/android/server/usb/descriptors/UsbACInterface;->allocAudioControlDescriptor(Lcom/android/server/usb/descriptors/UsbDescriptorParser;Lcom/android/server/usb/descriptors/ByteStream;IBBI)Lcom/android/server/usb/descriptors/UsbDescriptor;
+HSPLcom/android/server/usb/descriptors/UsbACInterface;->allocAudioStreamingDescriptor(Lcom/android/server/usb/descriptors/UsbDescriptorParser;Lcom/android/server/usb/descriptors/ByteStream;IBBI)Lcom/android/server/usb/descriptors/UsbDescriptor;
+HSPLcom/android/server/usb/descriptors/UsbACInterface;->allocDescriptor(Lcom/android/server/usb/descriptors/UsbDescriptorParser;Lcom/android/server/usb/descriptors/ByteStream;IB)Lcom/android/server/usb/descriptors/UsbDescriptor;
+PLcom/android/server/usb/descriptors/UsbACInterface;->allocMidiStreamingDescriptor(IBBI)Lcom/android/server/usb/descriptors/UsbDescriptor;
+HSPLcom/android/server/usb/descriptors/UsbACInterface;->getSubclass()I
+HSPLcom/android/server/usb/descriptors/UsbACInterface;->getSubtype()B
+HSPLcom/android/server/usb/descriptors/UsbACInterfaceUnparsed;-><init>(IBBI)V
+PLcom/android/server/usb/descriptors/UsbACMidi10Endpoint;-><init>(IBIB)V
+PLcom/android/server/usb/descriptors/UsbACMidi10Endpoint;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
 PLcom/android/server/usb/descriptors/UsbACMixerUnit;-><init>(IBBI)V
 PLcom/android/server/usb/descriptors/UsbACMixerUnit;->calcControlArraySize(II)I
 PLcom/android/server/usb/descriptors/UsbACMixerUnit;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
 PLcom/android/server/usb/descriptors/UsbACSelectorUnit;-><init>(IBBI)V
 PLcom/android/server/usb/descriptors/UsbACSelectorUnit;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
-PLcom/android/server/usb/descriptors/UsbACTerminal;-><init>(IBBI)V
-PLcom/android/server/usb/descriptors/UsbACTerminal;->getTerminalType()I
-PLcom/android/server/usb/descriptors/UsbACTerminal;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
-PLcom/android/server/usb/descriptors/UsbASFormat;-><init>(IBBBI)V
-PLcom/android/server/usb/descriptors/UsbASFormat;->allocDescriptor(Lcom/android/server/usb/descriptors/UsbDescriptorParser;Lcom/android/server/usb/descriptors/ByteStream;IBBI)Lcom/android/server/usb/descriptors/UsbDescriptor;
-PLcom/android/server/usb/descriptors/UsbConfigDescriptor;-><init>(IB)V
-PLcom/android/server/usb/descriptors/UsbConfigDescriptor;->addInterfaceDescriptor(Lcom/android/server/usb/descriptors/UsbInterfaceDescriptor;)V
-PLcom/android/server/usb/descriptors/UsbConfigDescriptor;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
-PLcom/android/server/usb/descriptors/UsbConfigDescriptor;->toAndroid(Lcom/android/server/usb/descriptors/UsbDescriptorParser;)Landroid/hardware/usb/UsbConfiguration;
-PLcom/android/server/usb/descriptors/UsbDescriptor;-><clinit>()V
-PLcom/android/server/usb/descriptors/UsbDescriptor;-><init>(IB)V
+HSPLcom/android/server/usb/descriptors/UsbACTerminal;-><init>(IBBI)V
+HSPLcom/android/server/usb/descriptors/UsbACTerminal;->getTerminalType()I
+HSPLcom/android/server/usb/descriptors/UsbACTerminal;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+HSPLcom/android/server/usb/descriptors/UsbASFormat;-><init>(IBBBI)V
+HSPLcom/android/server/usb/descriptors/UsbASFormat;->allocDescriptor(Lcom/android/server/usb/descriptors/UsbDescriptorParser;Lcom/android/server/usb/descriptors/ByteStream;IBBI)Lcom/android/server/usb/descriptors/UsbDescriptor;
+HSPLcom/android/server/usb/descriptors/UsbConfigDescriptor;-><init>(IB)V
+HSPLcom/android/server/usb/descriptors/UsbConfigDescriptor;->addInterfaceDescriptor(Lcom/android/server/usb/descriptors/UsbInterfaceDescriptor;)V
+HSPLcom/android/server/usb/descriptors/UsbConfigDescriptor;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+HSPLcom/android/server/usb/descriptors/UsbConfigDescriptor;->toAndroid(Lcom/android/server/usb/descriptors/UsbDescriptorParser;)Landroid/hardware/usb/UsbConfiguration;
+HSPLcom/android/server/usb/descriptors/UsbDescriptor;-><clinit>()V
+HSPLcom/android/server/usb/descriptors/UsbDescriptor;-><init>(IB)V
 PLcom/android/server/usb/descriptors/UsbDescriptor;->getLength()I
-PLcom/android/server/usb/descriptors/UsbDescriptor;->getType()B
-PLcom/android/server/usb/descriptors/UsbDescriptor;->logDescriptorName(BI)V
-PLcom/android/server/usb/descriptors/UsbDescriptor;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
-PLcom/android/server/usb/descriptors/UsbDescriptor;->postParse(Lcom/android/server/usb/descriptors/ByteStream;)V
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;-><init>(Ljava/lang/String;[B)V
-HPLcom/android/server/usb/descriptors/UsbDescriptorParser;->allocDescriptor(Lcom/android/server/usb/descriptors/ByteStream;)Lcom/android/server/usb/descriptors/UsbDescriptor;
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->containsLegacyMidiDeviceEndpoint()Z
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->containsUniversalMidiDeviceEndpoint()Z
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->doesInterfaceContainEndpoint(Ljava/util/ArrayList;)Z
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->findLegacyMidiInterfaceDescriptors()Ljava/util/ArrayList;
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->findMidiInterfaceDescriptors(I)Ljava/util/ArrayList;
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->findUniversalMidiInterfaceDescriptors()Ljava/util/ArrayList;
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->getACInterfaceDescriptors(BI)Ljava/util/ArrayList;
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->getACInterfaceSpec()I
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->getCurInterface()Lcom/android/server/usb/descriptors/UsbInterfaceDescriptor;
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->getDescriptorString(I)Ljava/lang/String;
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->getDescriptors()Ljava/util/ArrayList;
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->getDeviceAddr()Ljava/lang/String;
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->getDeviceDescriptor()Lcom/android/server/usb/descriptors/UsbDeviceDescriptor;
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->getInputHeadsetProbability()F
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->getInterfaceDescriptorsForClass(I)Ljava/util/ArrayList;
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->getOutputHeadsetProbability()F
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->getRawDescriptors()[B
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasAudioCapture()Z
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasAudioInterface()Z
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasAudioPlayback()Z
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasAudioTerminal(I)Z
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasHIDInterface()Z
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasInput()Z
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasMIDIInterface()Z
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasMic()Z
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasOutput()Z
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasSpeaker()Z
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasStorageInterface()Z
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasVideoCapture()Z
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasVideoPlayback()Z
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->isDock()Z
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->isInputHeadset()Z
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->isOutputHeadset()Z
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->parseDescriptors([B)V
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->setACInterfaceSpec(I)V
+HSPLcom/android/server/usb/descriptors/UsbDescriptor;->getType()B
+HSPLcom/android/server/usb/descriptors/UsbDescriptor;->logDescriptorName(BI)V
+HSPLcom/android/server/usb/descriptors/UsbDescriptor;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+HSPLcom/android/server/usb/descriptors/UsbDescriptor;->postParse(Lcom/android/server/usb/descriptors/ByteStream;)V
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;-><init>(Ljava/lang/String;[B)V
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->allocDescriptor(Lcom/android/server/usb/descriptors/ByteStream;)Lcom/android/server/usb/descriptors/UsbDescriptor;
+PLcom/android/server/usb/descriptors/UsbDescriptorParser;->calculateMidiInterfaceDescriptorsCount()I
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->containsLegacyMidiDeviceEndpoint()Z
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->containsUniversalMidiDeviceEndpoint()Z
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->doesInterfaceContainEndpoint(Ljava/util/ArrayList;)Z
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->findLegacyMidiInterfaceDescriptors()Ljava/util/ArrayList;
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->findMidiInterfaceDescriptors(I)Ljava/util/ArrayList;
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->findUniversalMidiInterfaceDescriptors()Ljava/util/ArrayList;
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->getACInterfaceDescriptors(BI)Ljava/util/ArrayList;
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->getACInterfaceSpec()I
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->getCurInterface()Lcom/android/server/usb/descriptors/UsbInterfaceDescriptor;
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->getDescriptorString(I)Ljava/lang/String;
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->getDescriptors()Ljava/util/ArrayList;
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->getDeviceAddr()Ljava/lang/String;
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->getDeviceDescriptor()Lcom/android/server/usb/descriptors/UsbDeviceDescriptor;
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->getInputHeadsetProbability()F
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->getInterfaceDescriptorsForClass(I)Ljava/util/ArrayList;
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->getOutputHeadsetProbability()F
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->getRawDescriptors()[B
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasAudioCapture()Z
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasAudioInterface()Z
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasAudioPlayback()Z
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasAudioTerminal(I)Z
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasHIDInterface()Z
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasInput()Z
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasMIDIInterface()Z
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasMic()Z
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasOutput()Z
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasSpeaker()Z
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasStorageInterface()Z
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasVideoCapture()Z
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->hasVideoPlayback()Z
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->isDock()Z
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->isInputHeadset()Z
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->isOutputHeadset()Z
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->parseDescriptors([B)V
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->setACInterfaceSpec(I)V
 PLcom/android/server/usb/descriptors/UsbDescriptorParser;->setVCInterfaceSpec(I)V
-PLcom/android/server/usb/descriptors/UsbDescriptorParser;->toAndroidUsbDeviceBuilder()Landroid/hardware/usb/UsbDevice$Builder;
-PLcom/android/server/usb/descriptors/UsbDeviceDescriptor;-><init>(IB)V
-PLcom/android/server/usb/descriptors/UsbDeviceDescriptor;->addConfigDescriptor(Lcom/android/server/usb/descriptors/UsbConfigDescriptor;)V
-PLcom/android/server/usb/descriptors/UsbDeviceDescriptor;->getDeviceReleaseString()Ljava/lang/String;
-PLcom/android/server/usb/descriptors/UsbDeviceDescriptor;->getMfgString(Lcom/android/server/usb/descriptors/UsbDescriptorParser;)Ljava/lang/String;
-PLcom/android/server/usb/descriptors/UsbDeviceDescriptor;->getProductID()I
-PLcom/android/server/usb/descriptors/UsbDeviceDescriptor;->getProductString(Lcom/android/server/usb/descriptors/UsbDescriptorParser;)Ljava/lang/String;
-PLcom/android/server/usb/descriptors/UsbDeviceDescriptor;->getSerialString(Lcom/android/server/usb/descriptors/UsbDescriptorParser;)Ljava/lang/String;
-PLcom/android/server/usb/descriptors/UsbDeviceDescriptor;->getVendorID()I
-PLcom/android/server/usb/descriptors/UsbDeviceDescriptor;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
-PLcom/android/server/usb/descriptors/UsbDeviceDescriptor;->toAndroid(Lcom/android/server/usb/descriptors/UsbDescriptorParser;)Landroid/hardware/usb/UsbDevice$Builder;
-PLcom/android/server/usb/descriptors/UsbEndpointDescriptor;-><init>(IB)V
-PLcom/android/server/usb/descriptors/UsbEndpointDescriptor;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
-PLcom/android/server/usb/descriptors/UsbEndpointDescriptor;->toAndroid(Lcom/android/server/usb/descriptors/UsbDescriptorParser;)Landroid/hardware/usb/UsbEndpoint;
+HSPLcom/android/server/usb/descriptors/UsbDescriptorParser;->toAndroidUsbDeviceBuilder()Landroid/hardware/usb/UsbDevice$Builder;
+HSPLcom/android/server/usb/descriptors/UsbDeviceDescriptor;-><init>(IB)V
+HSPLcom/android/server/usb/descriptors/UsbDeviceDescriptor;->addConfigDescriptor(Lcom/android/server/usb/descriptors/UsbConfigDescriptor;)V
+HSPLcom/android/server/usb/descriptors/UsbDeviceDescriptor;->getDeviceReleaseString()Ljava/lang/String;
+HSPLcom/android/server/usb/descriptors/UsbDeviceDescriptor;->getMfgString(Lcom/android/server/usb/descriptors/UsbDescriptorParser;)Ljava/lang/String;
+HSPLcom/android/server/usb/descriptors/UsbDeviceDescriptor;->getProductID()I
+HSPLcom/android/server/usb/descriptors/UsbDeviceDescriptor;->getProductString(Lcom/android/server/usb/descriptors/UsbDescriptorParser;)Ljava/lang/String;
+HSPLcom/android/server/usb/descriptors/UsbDeviceDescriptor;->getSerialString(Lcom/android/server/usb/descriptors/UsbDescriptorParser;)Ljava/lang/String;
+HSPLcom/android/server/usb/descriptors/UsbDeviceDescriptor;->getVendorID()I
+HSPLcom/android/server/usb/descriptors/UsbDeviceDescriptor;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+HSPLcom/android/server/usb/descriptors/UsbDeviceDescriptor;->toAndroid(Lcom/android/server/usb/descriptors/UsbDescriptorParser;)Landroid/hardware/usb/UsbDevice$Builder;
+HSPLcom/android/server/usb/descriptors/UsbEndpointDescriptor;-><init>(IB)V
+PLcom/android/server/usb/descriptors/UsbEndpointDescriptor;->getDirection()I
+HSPLcom/android/server/usb/descriptors/UsbEndpointDescriptor;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+HSPLcom/android/server/usb/descriptors/UsbEndpointDescriptor;->toAndroid(Lcom/android/server/usb/descriptors/UsbDescriptorParser;)Landroid/hardware/usb/UsbEndpoint;
 PLcom/android/server/usb/descriptors/UsbHIDDescriptor;-><init>(IB)V
 PLcom/android/server/usb/descriptors/UsbHIDDescriptor;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
-PLcom/android/server/usb/descriptors/UsbInterfaceAssoc;-><init>(IB)V
-PLcom/android/server/usb/descriptors/UsbInterfaceAssoc;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
-PLcom/android/server/usb/descriptors/UsbInterfaceDescriptor;-><init>(IB)V
-PLcom/android/server/usb/descriptors/UsbInterfaceDescriptor;->addEndpointDescriptor(Lcom/android/server/usb/descriptors/UsbEndpointDescriptor;)V
-PLcom/android/server/usb/descriptors/UsbInterfaceDescriptor;->getUsbClass()I
-PLcom/android/server/usb/descriptors/UsbInterfaceDescriptor;->getUsbSubclass()I
-PLcom/android/server/usb/descriptors/UsbInterfaceDescriptor;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
-PLcom/android/server/usb/descriptors/UsbInterfaceDescriptor;->toAndroid(Lcom/android/server/usb/descriptors/UsbDescriptorParser;)Landroid/hardware/usb/UsbInterface;
+HSPLcom/android/server/usb/descriptors/UsbInterfaceAssoc;-><init>(IB)V
+HSPLcom/android/server/usb/descriptors/UsbInterfaceAssoc;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+HSPLcom/android/server/usb/descriptors/UsbInterfaceDescriptor;-><init>(IB)V
+HSPLcom/android/server/usb/descriptors/UsbInterfaceDescriptor;->addEndpointDescriptor(Lcom/android/server/usb/descriptors/UsbEndpointDescriptor;)V
+PLcom/android/server/usb/descriptors/UsbInterfaceDescriptor;->getEndpointDescriptor(I)Lcom/android/server/usb/descriptors/UsbEndpointDescriptor;
+PLcom/android/server/usb/descriptors/UsbInterfaceDescriptor;->getMidiHeaderInterfaceDescriptor()Lcom/android/server/usb/descriptors/UsbDescriptor;
+PLcom/android/server/usb/descriptors/UsbInterfaceDescriptor;->getNumEndpoints()B
+HSPLcom/android/server/usb/descriptors/UsbInterfaceDescriptor;->getUsbClass()I
+HSPLcom/android/server/usb/descriptors/UsbInterfaceDescriptor;->getUsbSubclass()I
+HSPLcom/android/server/usb/descriptors/UsbInterfaceDescriptor;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+PLcom/android/server/usb/descriptors/UsbInterfaceDescriptor;->setMidiHeaderInterfaceDescriptor(Lcom/android/server/usb/descriptors/UsbDescriptor;)V
+HSPLcom/android/server/usb/descriptors/UsbInterfaceDescriptor;->toAndroid(Lcom/android/server/usb/descriptors/UsbDescriptorParser;)Landroid/hardware/usb/UsbInterface;
+PLcom/android/server/usb/descriptors/UsbMSMidiHeader;-><init>(IBBI)V
+PLcom/android/server/usb/descriptors/UsbMSMidiHeader;->getMidiStreamingClass()I
+PLcom/android/server/usb/descriptors/UsbMSMidiHeader;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+PLcom/android/server/usb/descriptors/UsbMSMidiInputJack;-><init>(IBBI)V
+PLcom/android/server/usb/descriptors/UsbMSMidiInputJack;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+PLcom/android/server/usb/descriptors/UsbMSMidiOutputJack;-><init>(IBBI)V
+PLcom/android/server/usb/descriptors/UsbMSMidiOutputJack;->parseRawDescriptors(Lcom/android/server/usb/descriptors/ByteStream;)I
+PLcom/android/server/usb/descriptors/UsbMidiBlockParser;-><init>()V
 PLcom/android/server/usb/descriptors/UsbUnknown;-><init>(IB)V
 PLcom/android/server/usb/descriptors/UsbVCEndpoint;->allocDescriptor(Lcom/android/server/usb/descriptors/UsbDescriptorParser;IBB)Lcom/android/server/usb/descriptors/UsbDescriptor;
 PLcom/android/server/usb/descriptors/UsbVCHeader;-><init>(IBBI)V
@@ -50627,20 +52380,27 @@
 HSPLcom/android/server/usb/hal/port/RawPortInfo;-><init>(Ljava/lang/String;IIIZIZIZZIZIIZI)V
 HSPLcom/android/server/usb/hal/port/UsbPortAidl$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/usb/hal/port/UsbPortAidl;)V
 HSPLcom/android/server/usb/hal/port/UsbPortAidl$HALCallback;-><init>(Lcom/android/internal/util/IndentingPrintWriter;Lcom/android/server/usb/UsbPortManager;Lcom/android/server/usb/hal/port/UsbPortAidl;)V
-HSPLcom/android/server/usb/hal/port/UsbPortAidl$HALCallback;->notifyPortStatusChange([Landroid/hardware/usb/PortStatus;I)V
+HSPLcom/android/server/usb/hal/port/UsbPortAidl$HALCallback;->notifyPortStatusChange([Landroid/hardware/usb/PortStatus;I)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/usb/UsbPortManager;Lcom/android/server/usb/UsbPortManager;]Lcom/android/server/usb/hal/port/UsbPortAidl$HALCallback;Lcom/android/server/usb/hal/port/UsbPortAidl$HALCallback;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/usb/hal/port/UsbPortAidl$HALCallback;->notifyQueryPortStatus(Ljava/lang/String;IJ)V
+PLcom/android/server/usb/hal/port/UsbPortAidl$HALCallback;->notifyResetUsbPortStatus(Ljava/lang/String;IJ)V
+PLcom/android/server/usb/hal/port/UsbPortAidl$HALCallback;->notifyRoleSwitchStatus(Ljava/lang/String;Landroid/hardware/usb/PortRole;IJ)V
 HSPLcom/android/server/usb/hal/port/UsbPortAidl$HALCallback;->toContaminantProtectionStatus(B)I
 HSPLcom/android/server/usb/hal/port/UsbPortAidl$HALCallback;->toPortMode(B)I
 HSPLcom/android/server/usb/hal/port/UsbPortAidl$HALCallback;->toSupportedContaminantProtectionModes([B)I
 HSPLcom/android/server/usb/hal/port/UsbPortAidl$HALCallback;->toSupportedModes([B)I
-HSPLcom/android/server/usb/hal/port/UsbPortAidl$HALCallback;->toUsbDataStatusInt([B)I
+HSPLcom/android/server/usb/hal/port/UsbPortAidl$HALCallback;->toUsbDataStatusInt([B)I+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HSPLcom/android/server/usb/hal/port/UsbPortAidl;->-$$Nest$fgetmSystemReady(Lcom/android/server/usb/hal/port/UsbPortAidl;)Z
+PLcom/android/server/usb/hal/port/UsbPortAidl;->-$$Nest$sfgetsCallbacks()Landroid/util/LongSparseArray;
 HSPLcom/android/server/usb/hal/port/UsbPortAidl;-><clinit>()V
 HSPLcom/android/server/usb/hal/port/UsbPortAidl;-><init>(Lcom/android/server/usb/UsbPortManager;Lcom/android/internal/util/IndentingPrintWriter;)V
 HSPLcom/android/server/usb/hal/port/UsbPortAidl;->connectToProxy(Lcom/android/internal/util/IndentingPrintWriter;)V
 HSPLcom/android/server/usb/hal/port/UsbPortAidl;->getUsbHalVersion()I
 HSPLcom/android/server/usb/hal/port/UsbPortAidl;->isServicePresent(Lcom/android/internal/util/IndentingPrintWriter;)Z
 HSPLcom/android/server/usb/hal/port/UsbPortAidl;->queryPortStatus(J)V
+PLcom/android/server/usb/hal/port/UsbPortAidl;->resetUsbPort(Ljava/lang/String;JLandroid/hardware/usb/IUsbOperationInternal;)V
+PLcom/android/server/usb/hal/port/UsbPortAidl;->switchDataRole(Ljava/lang/String;IJ)V
+PLcom/android/server/usb/hal/port/UsbPortAidl;->switchMode(Ljava/lang/String;IJ)V
+PLcom/android/server/usb/hal/port/UsbPortAidl;->switchPowerRole(Ljava/lang/String;IJ)V
 HSPLcom/android/server/usb/hal/port/UsbPortAidl;->systemReady()V
 HSPLcom/android/server/usb/hal/port/UsbPortHalInstance;->getInstance(Lcom/android/server/usb/UsbPortManager;Lcom/android/internal/util/IndentingPrintWriter;)Lcom/android/server/usb/hal/port/UsbPortHal;
 PLcom/android/server/usb/hal/port/UsbPortHidl$DeathRecipient;-><init>(Lcom/android/server/usb/hal/port/UsbPortHidl;Lcom/android/internal/util/IndentingPrintWriter;)V
@@ -50659,7 +52419,7 @@
 PLcom/android/server/usb/hal/port/UsbPortHidl;->queryPortStatus(J)V
 PLcom/android/server/usb/hal/port/UsbPortHidl;->systemReady()V
 HPLcom/android/server/utils/AlarmQueue$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/utils/AlarmQueue;)V
-PLcom/android/server/utils/AlarmQueue$$ExternalSyntheticLambda0;->run()V
+HPLcom/android/server/utils/AlarmQueue$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/utils/AlarmQueue$1;-><init>(Lcom/android/server/utils/AlarmQueue;)V
 HPLcom/android/server/utils/AlarmQueue$1;->run()V+]Landroid/os/Handler;Landroid/os/Handler;]Landroid/app/AlarmManager;Landroid/app/AlarmManager;]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLcom/android/server/utils/AlarmQueue$AlarmPriorityQueue$$ExternalSyntheticLambda0;-><init>()V
@@ -50681,7 +52441,7 @@
 HSPLcom/android/server/utils/AlarmQueue;-><clinit>()V
 HSPLcom/android/server/utils/AlarmQueue;-><init>(Landroid/content/Context;Landroid/os/Looper;Ljava/lang/String;Ljava/lang/String;ZJ)V
 HSPLcom/android/server/utils/AlarmQueue;-><init>(Landroid/content/Context;Landroid/os/Looper;Ljava/lang/String;Ljava/lang/String;ZJLcom/android/server/utils/AlarmQueue$Injector;)V
-HPLcom/android/server/utils/AlarmQueue;->addAlarm(Ljava/lang/Object;J)V+]Lcom/android/server/utils/AlarmQueue$AlarmPriorityQueue;Lcom/android/server/utils/AlarmQueue$AlarmPriorityQueue;]Lcom/android/server/utils/AlarmQueue;Lcom/android/server/usage/UsageStatsService$LaunchTimeAlarmQueue;,Lcom/android/server/job/controllers/QuotaController$InQuotaAlarmQueue;,Lcom/android/server/job/controllers/PrefetchController$ThresholdAlarmListener;,Lcom/android/server/tare/Agent$BalanceThresholdAlarmQueue;]Ljava/util/PriorityQueue;Lcom/android/server/utils/AlarmQueue$AlarmPriorityQueue;
+HPLcom/android/server/utils/AlarmQueue;->addAlarm(Ljava/lang/Object;J)V+]Lcom/android/server/utils/AlarmQueue$AlarmPriorityQueue;Lcom/android/server/utils/AlarmQueue$AlarmPriorityQueue;]Lcom/android/server/utils/AlarmQueue;Lcom/android/server/job/controllers/QuotaController$InQuotaAlarmQueue;,Lcom/android/server/job/controllers/PrefetchController$ThresholdAlarmListener;,Lcom/android/server/usage/UsageStatsService$LaunchTimeAlarmQueue;,Lcom/android/server/tare/Agent$BalanceThresholdAlarmQueue;]Ljava/util/PriorityQueue;Lcom/android/server/utils/AlarmQueue$AlarmPriorityQueue;
 PLcom/android/server/utils/AlarmQueue;->dump(Landroid/util/IndentingPrintWriter;)V
 HPLcom/android/server/utils/AlarmQueue;->lambda$setNextAlarmLocked$0()V
 HPLcom/android/server/utils/AlarmQueue;->onAlarm()V
@@ -50703,6 +52463,9 @@
 HSPLcom/android/server/utils/Slogf;-><clinit>()V
 HSPLcom/android/server/utils/Slogf;->d(Ljava/lang/String;Ljava/lang/String;)I
 PLcom/android/server/utils/Slogf;->d(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
+PLcom/android/server/utils/Slogf;->e(Ljava/lang/String;Ljava/lang/String;)I
+PLcom/android/server/utils/Slogf;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
+PLcom/android/server/utils/Slogf;->e(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
 HSPLcom/android/server/utils/Slogf;->getMessage(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
 HSPLcom/android/server/utils/Slogf;->i(Ljava/lang/String;Ljava/lang/String;)I
 PLcom/android/server/utils/Slogf;->i(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
@@ -50756,7 +52519,7 @@
 HSPLcom/android/server/utils/WatchedArrayList;-><init>(I)V
 HSPLcom/android/server/utils/WatchedArrayList;->add(Ljava/lang/Object;)Z+]Lcom/android/server/utils/WatchedArrayList;Lcom/android/server/utils/WatchedArrayList;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/utils/WatchedArrayList;->addAll(Ljava/util/Collection;)Z
-HSPLcom/android/server/utils/WatchedArrayList;->clear()V
+HSPLcom/android/server/utils/WatchedArrayList;->clear()V+]Lcom/android/server/utils/WatchedArrayList;Lcom/android/server/utils/WatchedArrayList;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/utils/WatchedArrayList;->get(I)Ljava/lang/Object;+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/utils/WatchedArrayList;->onChanged()V+]Lcom/android/server/utils/WatchableImpl;Lcom/android/server/utils/WatchedArrayList;
 HSPLcom/android/server/utils/WatchedArrayList;->registerChild(Ljava/lang/Object;)V
@@ -50791,7 +52554,7 @@
 HSPLcom/android/server/utils/WatchedArrayMap;->snapshot()Lcom/android/server/utils/WatchedArrayMap;
 HSPLcom/android/server/utils/WatchedArrayMap;->snapshot()Ljava/lang/Object;+]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;
 HSPLcom/android/server/utils/WatchedArrayMap;->snapshot(Lcom/android/server/utils/WatchedArrayMap;)V
-HSPLcom/android/server/utils/WatchedArrayMap;->snapshot(Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/utils/WatchableImpl;Lcom/android/server/utils/WatchedArrayMap;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;
+HSPLcom/android/server/utils/WatchedArrayMap;->snapshot(Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;)V+]Lcom/android/server/utils/WatchableImpl;Lcom/android/server/utils/WatchedArrayMap;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/utils/WatchedArrayMap;Lcom/android/server/utils/WatchedArrayMap;
 HSPLcom/android/server/utils/WatchedArrayMap;->unregisterChildIf(Ljava/lang/Object;)V
 HSPLcom/android/server/utils/WatchedArrayMap;->untrackedStorage()Landroid/util/ArrayMap;
 HSPLcom/android/server/utils/WatchedArrayMap;->valueAt(I)Ljava/lang/Object;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
@@ -50804,6 +52567,7 @@
 HSPLcom/android/server/utils/WatchedArraySet;->addAll(Ljava/util/Collection;)V
 HSPLcom/android/server/utils/WatchedArraySet;->clear()V
 HSPLcom/android/server/utils/WatchedArraySet;->contains(Ljava/lang/Object;)Z+]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLcom/android/server/utils/WatchedArraySet;->equals(Ljava/lang/Object;)Z
 HSPLcom/android/server/utils/WatchedArraySet;->isEmpty()Z
 HSPLcom/android/server/utils/WatchedArraySet;->onChanged()V+]Lcom/android/server/utils/WatchableImpl;Lcom/android/server/utils/WatchedArraySet;
 HSPLcom/android/server/utils/WatchedArraySet;->registerChild(Ljava/lang/Object;)V+]Lcom/android/server/utils/Watchable;Lcom/android/server/pm/PackageSetting;
@@ -50858,7 +52622,8 @@
 HSPLcom/android/server/utils/WatchedSparseArray;->valueAt(I)Ljava/lang/Object;
 HSPLcom/android/server/utils/WatchedSparseBooleanArray;-><init>()V
 HSPLcom/android/server/utils/WatchedSparseBooleanArray;-><init>(Lcom/android/server/utils/WatchedSparseBooleanArray;)V
-HPLcom/android/server/utils/WatchedSparseBooleanArray;->get(I)Z
+PLcom/android/server/utils/WatchedSparseBooleanArray;->delete(I)V
+HSPLcom/android/server/utils/WatchedSparseBooleanArray;->get(I)Z
 HSPLcom/android/server/utils/WatchedSparseBooleanArray;->onChanged()V
 HSPLcom/android/server/utils/WatchedSparseBooleanArray;->put(IZ)V
 HSPLcom/android/server/utils/WatchedSparseBooleanArray;->snapshot()Lcom/android/server/utils/WatchedSparseBooleanArray;
@@ -50873,12 +52638,12 @@
 HPLcom/android/server/utils/WatchedSparseBooleanMatrix;->indexOfKey(IZ)I+]Lcom/android/server/utils/WatchedSparseBooleanMatrix;Lcom/android/server/utils/WatchedSparseBooleanMatrix;
 HPLcom/android/server/utils/WatchedSparseBooleanMatrix;->keyAt(I)I+]Lcom/android/server/utils/WatchedSparseBooleanMatrix;Lcom/android/server/utils/WatchedSparseBooleanMatrix;
 PLcom/android/server/utils/WatchedSparseBooleanMatrix;->keys()[I
-PLcom/android/server/utils/WatchedSparseBooleanMatrix;->lastInuse()I
+HPLcom/android/server/utils/WatchedSparseBooleanMatrix;->lastInuse()I
 HPLcom/android/server/utils/WatchedSparseBooleanMatrix;->nextFree(Z)I
 HSPLcom/android/server/utils/WatchedSparseBooleanMatrix;->onChanged()V+]Lcom/android/server/utils/WatchableImpl;Lcom/android/server/utils/WatchedSparseBooleanMatrix;
 HPLcom/android/server/utils/WatchedSparseBooleanMatrix;->pack()V
 HPLcom/android/server/utils/WatchedSparseBooleanMatrix;->put(IIZ)V+]Lcom/android/server/utils/WatchedSparseBooleanMatrix;Lcom/android/server/utils/WatchedSparseBooleanMatrix;
-PLcom/android/server/utils/WatchedSparseBooleanMatrix;->removeAt(I)V
+HPLcom/android/server/utils/WatchedSparseBooleanMatrix;->removeAt(I)V
 PLcom/android/server/utils/WatchedSparseBooleanMatrix;->removeRange(II)V
 HSPLcom/android/server/utils/WatchedSparseBooleanMatrix;->resizeMatrix(I)V
 HSPLcom/android/server/utils/WatchedSparseBooleanMatrix;->setCapacity(I)V
@@ -50908,10 +52673,10 @@
 HSPLcom/android/server/utils/WatchedSparseSetArray;->clear()V
 HSPLcom/android/server/utils/WatchedSparseSetArray;->contains(ILjava/lang/Object;)Z+]Landroid/util/SparseSetArray;Landroid/util/SparseSetArray;
 PLcom/android/server/utils/WatchedSparseSetArray;->get(I)Landroid/util/ArraySet;
-HSPLcom/android/server/utils/WatchedSparseSetArray;->keyAt(I)I
+HSPLcom/android/server/utils/WatchedSparseSetArray;->keyAt(I)I+]Landroid/util/SparseSetArray;Landroid/util/SparseSetArray;
 HSPLcom/android/server/utils/WatchedSparseSetArray;->onChanged()V
 HSPLcom/android/server/utils/WatchedSparseSetArray;->remove(I)V
-HSPLcom/android/server/utils/WatchedSparseSetArray;->remove(ILjava/lang/Object;)Z
+HSPLcom/android/server/utils/WatchedSparseSetArray;->remove(ILjava/lang/Object;)Z+]Landroid/util/SparseSetArray;Landroid/util/SparseSetArray;]Lcom/android/server/utils/WatchedSparseSetArray;Lcom/android/server/utils/WatchedSparseSetArray;
 HSPLcom/android/server/utils/WatchedSparseSetArray;->size()I
 HSPLcom/android/server/utils/WatchedSparseSetArray;->snapshot()Ljava/lang/Object;+]Lcom/android/server/utils/WatchableImpl;Lcom/android/server/utils/WatchedSparseSetArray;
 HSPLcom/android/server/utils/WatchedSparseSetArray;->untrackedStorage()Landroid/util/SparseSetArray;
@@ -50927,7 +52692,7 @@
 HPLcom/android/server/utils/quota/Category;->equals(Ljava/lang/Object;)Z
 HSPLcom/android/server/utils/quota/Category;->hashCode()I
 HSPLcom/android/server/utils/quota/CountQuotaTracker$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/utils/quota/CountQuotaTracker;)V
-PLcom/android/server/utils/quota/CountQuotaTracker$$ExternalSyntheticLambda0;->onAlarm()V
+HPLcom/android/server/utils/quota/CountQuotaTracker$$ExternalSyntheticLambda0;->onAlarm()V
 HSPLcom/android/server/utils/quota/CountQuotaTracker$$ExternalSyntheticLambda1;-><init>()V
 PLcom/android/server/utils/quota/CountQuotaTracker$$ExternalSyntheticLambda1;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/utils/quota/CountQuotaTracker$$ExternalSyntheticLambda2;-><init>()V
@@ -50958,7 +52723,7 @@
 HSPLcom/android/server/utils/quota/CountQuotaTracker;-><clinit>()V
 HSPLcom/android/server/utils/quota/CountQuotaTracker;-><init>(Landroid/content/Context;Lcom/android/server/utils/quota/Categorizer;)V
 HSPLcom/android/server/utils/quota/CountQuotaTracker;-><init>(Landroid/content/Context;Lcom/android/server/utils/quota/Categorizer;Lcom/android/server/utils/quota/QuotaTracker$Injector;)V
-PLcom/android/server/utils/quota/CountQuotaTracker;->deleteObsoleteEventsLocked()V
+HPLcom/android/server/utils/quota/CountQuotaTracker;->deleteObsoleteEventsLocked()V
 PLcom/android/server/utils/quota/CountQuotaTracker;->dump(Landroid/util/IndentingPrintWriter;)V
 PLcom/android/server/utils/quota/CountQuotaTracker;->dump(Landroid/util/proto/ProtoOutputStream;J)V
 HPLcom/android/server/utils/quota/CountQuotaTracker;->getExecutionStatsLocked(ILjava/lang/String;Ljava/lang/String;)Lcom/android/server/utils/quota/CountQuotaTracker$ExecutionStats;+]Lcom/android/server/utils/quota/CountQuotaTracker;Lcom/android/server/utils/quota/CountQuotaTracker;
@@ -50972,7 +52737,7 @@
 HPLcom/android/server/utils/quota/CountQuotaTracker;->isWithinQuotaLocked(ILjava/lang/String;Ljava/lang/String;)Z+]Lcom/android/server/utils/quota/QuotaTracker;Lcom/android/server/utils/quota/CountQuotaTracker;]Lcom/android/server/utils/quota/CountQuotaTracker;Lcom/android/server/utils/quota/CountQuotaTracker;
 HPLcom/android/server/utils/quota/CountQuotaTracker;->isWithinQuotaLocked(Lcom/android/server/utils/quota/CountQuotaTracker$ExecutionStats;)Z+]Lcom/android/server/utils/quota/CountQuotaTracker;Lcom/android/server/utils/quota/CountQuotaTracker;
 PLcom/android/server/utils/quota/CountQuotaTracker;->lambda$dump$8(Landroid/util/proto/ProtoOutputStream;ILjava/lang/String;Ljava/lang/String;Lcom/android/server/utils/quota/CountQuotaTracker$ExecutionStats;)V
-PLcom/android/server/utils/quota/CountQuotaTracker;->lambda$new$0()V
+HPLcom/android/server/utils/quota/CountQuotaTracker;->lambda$new$0()V
 PLcom/android/server/utils/quota/CountQuotaTracker;->lambda$new$4(Ljava/lang/Void;)Landroid/util/LongArrayQueue;
 PLcom/android/server/utils/quota/CountQuotaTracker;->lambda$new$5(Ljava/lang/Void;)Lcom/android/server/utils/quota/CountQuotaTracker$ExecutionStats;
 HPLcom/android/server/utils/quota/CountQuotaTracker;->maybeScheduleCleanupAlarmLocked()V+]Lcom/android/server/utils/quota/UptcMap;Lcom/android/server/utils/quota/UptcMap;]Lcom/android/server/utils/quota/QuotaTracker$Injector;Lcom/android/server/utils/quota/QuotaTracker$Injector;]Lcom/android/server/utils/quota/CountQuotaTracker$EarliestEventTimeFunctor;Lcom/android/server/utils/quota/CountQuotaTracker$EarliestEventTimeFunctor;]Lcom/android/server/utils/quota/QuotaTracker;Lcom/android/server/utils/quota/CountQuotaTracker;
@@ -51002,7 +52767,7 @@
 PLcom/android/server/utils/quota/QuotaTracker$$ExternalSyntheticLambda2;->run()V
 HSPLcom/android/server/utils/quota/QuotaTracker$1;-><init>(Lcom/android/server/utils/quota/QuotaTracker;)V
 PLcom/android/server/utils/quota/QuotaTracker$1;->getPackageName(Landroid/content/Intent;)Ljava/lang/String;
-PLcom/android/server/utils/quota/QuotaTracker$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/utils/quota/QuotaTracker$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/utils/quota/QuotaTracker$InQuotaAlarmQueue$$ExternalSyntheticLambda1;-><init>(ILjava/lang/String;)V
 HSPLcom/android/server/utils/quota/QuotaTracker$InQuotaAlarmQueue;-><init>(Lcom/android/server/utils/quota/QuotaTracker;Landroid/content/Context;Landroid/os/Looper;)V
 HSPLcom/android/server/utils/quota/QuotaTracker$InQuotaAlarmQueue;-><init>(Lcom/android/server/utils/quota/QuotaTracker;Landroid/content/Context;Landroid/os/Looper;Lcom/android/server/utils/quota/QuotaTracker$InQuotaAlarmQueue-IA;)V
@@ -51055,7 +52820,7 @@
 HSPLcom/android/server/vcn/TelephonySubscriptionTracker$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/vcn/TelephonySubscriptionTracker;Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;)V
 HSPLcom/android/server/vcn/TelephonySubscriptionTracker$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/vcn/TelephonySubscriptionTracker$1;-><init>(Lcom/android/server/vcn/TelephonySubscriptionTracker;)V
-HPLcom/android/server/vcn/TelephonySubscriptionTracker$1;->onSubscriptionsChanged()V
+HSPLcom/android/server/vcn/TelephonySubscriptionTracker$1;->onSubscriptionsChanged()V
 HSPLcom/android/server/vcn/TelephonySubscriptionTracker$2;-><init>(Lcom/android/server/vcn/TelephonySubscriptionTracker;)V
 HSPLcom/android/server/vcn/TelephonySubscriptionTracker$2;->onCarrierPrivilegesChanged(Ljava/util/Set;Ljava/util/Set;)V
 HSPLcom/android/server/vcn/TelephonySubscriptionTracker$ActiveDataSubscriptionIdListener;-><init>(Lcom/android/server/vcn/TelephonySubscriptionTracker;)V
@@ -51080,12 +52845,14 @@
 HSPLcom/android/server/vcn/TelephonySubscriptionTracker;-><clinit>()V
 HSPLcom/android/server/vcn/TelephonySubscriptionTracker;-><init>(Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionTrackerCallback;)V
 HSPLcom/android/server/vcn/TelephonySubscriptionTracker;-><init>(Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionTrackerCallback;Lcom/android/server/vcn/TelephonySubscriptionTracker$Dependencies;)V
-PLcom/android/server/vcn/TelephonySubscriptionTracker;->handleActionCarrierConfigChanged(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/vcn/TelephonySubscriptionTracker;->handleActionCarrierConfigChanged(Landroid/content/Context;Landroid/content/Intent;)V
+PLcom/android/server/vcn/TelephonySubscriptionTracker;->handleActionMultiSimConfigChanged(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/vcn/TelephonySubscriptionTracker;->handleSubscriptionsChanged()V
 HSPLcom/android/server/vcn/TelephonySubscriptionTracker;->lambda$handleSubscriptionsChanged$0(Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;)V
 PLcom/android/server/vcn/TelephonySubscriptionTracker;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/vcn/TelephonySubscriptionTracker;->register()V
 HSPLcom/android/server/vcn/TelephonySubscriptionTracker;->registerCarrierPrivilegesCallbacks()V
+PLcom/android/server/vcn/TelephonySubscriptionTracker;->unregisterCarrierPrivilegesCallbacks()V
 PLcom/android/server/vcn/Vcn$Dependencies;-><init>()V
 PLcom/android/server/vcn/Vcn$Dependencies;->newVcnContentResolver(Lcom/android/server/vcn/VcnContext;)Lcom/android/server/vcn/Vcn$VcnContentResolver;
 PLcom/android/server/vcn/Vcn$Dependencies;->newVcnGatewayConnection(Lcom/android/server/vcn/VcnContext;Landroid/os/ParcelUuid;Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;Landroid/net/vcn/VcnGatewayConnectionConfig;Lcom/android/server/vcn/Vcn$VcnGatewayStatusCallback;Z)Lcom/android/server/vcn/VcnGatewayConnection;
@@ -51100,7 +52867,7 @@
 PLcom/android/server/vcn/Vcn$VcnMobileDataContentObserver;->onChange(Z)V
 PLcom/android/server/vcn/Vcn$VcnNetworkRequestListener;-><init>(Lcom/android/server/vcn/Vcn;)V
 PLcom/android/server/vcn/Vcn$VcnNetworkRequestListener;-><init>(Lcom/android/server/vcn/Vcn;Lcom/android/server/vcn/Vcn$VcnNetworkRequestListener-IA;)V
-PLcom/android/server/vcn/Vcn$VcnNetworkRequestListener;->onNetworkRequested(Landroid/net/NetworkRequest;)V
+HPLcom/android/server/vcn/Vcn$VcnNetworkRequestListener;->onNetworkRequested(Landroid/net/NetworkRequest;)V
 PLcom/android/server/vcn/Vcn$VcnUserMobileDataStateListener;-><init>(Lcom/android/server/vcn/Vcn;)V
 PLcom/android/server/vcn/Vcn$VcnUserMobileDataStateListener;->onUserMobileDataStateChanged(Z)V
 PLcom/android/server/vcn/Vcn;->-$$Nest$fgetmVcnCallback(Lcom/android/server/vcn/Vcn;)Lcom/android/server/VcnManagementService$VcnCallback;
@@ -51132,11 +52899,11 @@
 HPLcom/android/server/vcn/Vcn;->updateMobileDataStateListeners()V
 PLcom/android/server/vcn/Vcn;->updateSubscriptionSnapshot(Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;)V
 PLcom/android/server/vcn/VcnContext;-><init>(Landroid/content/Context;Landroid/os/Looper;Lcom/android/server/vcn/VcnNetworkProvider;Z)V
-HPLcom/android/server/vcn/VcnContext;->ensureRunningOnLooperThread()V
+HPLcom/android/server/vcn/VcnContext;->ensureRunningOnLooperThread()V+]Landroid/os/Looper;Landroid/os/Looper;]Lcom/android/server/vcn/VcnContext;Lcom/android/server/vcn/VcnContext;
 HPLcom/android/server/vcn/VcnContext;->getContext()Landroid/content/Context;
 HPLcom/android/server/vcn/VcnContext;->getLooper()Landroid/os/Looper;
 PLcom/android/server/vcn/VcnContext;->getVcnNetworkProvider()Lcom/android/server/vcn/VcnNetworkProvider;
-PLcom/android/server/vcn/VcnContext;->isInTestMode()Z
+HPLcom/android/server/vcn/VcnContext;->isInTestMode()Z
 PLcom/android/server/vcn/VcnGatewayConnection$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/vcn/VcnGatewayConnection;Landroid/os/Message;)V
 PLcom/android/server/vcn/VcnGatewayConnection$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/vcn/VcnGatewayConnection$ActiveBaseState;-><init>(Lcom/android/server/vcn/VcnGatewayConnection;)V
@@ -51170,7 +52937,7 @@
 PLcom/android/server/vcn/VcnGatewayConnection$ConnectedStateBase;-><init>(Lcom/android/server/vcn/VcnGatewayConnection;)V
 PLcom/android/server/vcn/VcnGatewayConnection$ConnectedStateBase;-><init>(Lcom/android/server/vcn/VcnGatewayConnection;Lcom/android/server/vcn/VcnGatewayConnection$ConnectedStateBase-IA;)V
 PLcom/android/server/vcn/VcnGatewayConnection$ConnectedStateBase;->applyTransform(ILandroid/net/IpSecManager$IpSecTunnelInterface;Landroid/net/Network;Landroid/net/IpSecTransform;I)V
-PLcom/android/server/vcn/VcnGatewayConnection$ConnectedStateBase;->buildNetworkAgent(Landroid/net/IpSecManager$IpSecTunnelInterface;Lcom/android/server/vcn/VcnGatewayConnection$VcnChildSessionConfiguration;Landroid/net/ipsec/ike/IkeSessionConnectionInfo;)Lcom/android/server/vcn/VcnGatewayConnection$VcnNetworkAgent;
+HPLcom/android/server/vcn/VcnGatewayConnection$ConnectedStateBase;->buildNetworkAgent(Landroid/net/IpSecManager$IpSecTunnelInterface;Lcom/android/server/vcn/VcnGatewayConnection$VcnChildSessionConfiguration;Landroid/net/ipsec/ike/IkeSessionConnectionInfo;)Lcom/android/server/vcn/VcnGatewayConnection$VcnNetworkAgent;
 HPLcom/android/server/vcn/VcnGatewayConnection$ConnectedStateBase;->clearFailedAttemptCounterAndSafeModeAlarm()V
 PLcom/android/server/vcn/VcnGatewayConnection$ConnectedStateBase;->lambda$buildNetworkAgent$0(Lcom/android/server/vcn/VcnGatewayConnection$VcnNetworkAgent;)V
 PLcom/android/server/vcn/VcnGatewayConnection$ConnectedStateBase;->lambda$buildNetworkAgent$1(Ljava/lang/Integer;)V
@@ -51198,7 +52965,7 @@
 PLcom/android/server/vcn/VcnGatewayConnection$DisconnectingState;-><init>(Lcom/android/server/vcn/VcnGatewayConnection;Lcom/android/server/vcn/VcnGatewayConnection$DisconnectingState-IA;)V
 PLcom/android/server/vcn/VcnGatewayConnection$DisconnectingState;->enterState()V
 PLcom/android/server/vcn/VcnGatewayConnection$DisconnectingState;->exitState()V
-PLcom/android/server/vcn/VcnGatewayConnection$DisconnectingState;->processStateMsg(Landroid/os/Message;)V
+HPLcom/android/server/vcn/VcnGatewayConnection$DisconnectingState;->processStateMsg(Landroid/os/Message;)V
 PLcom/android/server/vcn/VcnGatewayConnection$DisconnectingState;->setSkipRetryTimeout(Z)V
 HPLcom/android/server/vcn/VcnGatewayConnection$EventDisconnectRequestedInfo;-><init>(Ljava/lang/String;Z)V
 PLcom/android/server/vcn/VcnGatewayConnection$EventDisconnectRequestedInfo;->equals(Ljava/lang/Object;)Z
@@ -51210,16 +52977,16 @@
 HPLcom/android/server/vcn/VcnGatewayConnection$EventUnderlyingNetworkChangedInfo;-><init>(Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;)V
 PLcom/android/server/vcn/VcnGatewayConnection$IkeSessionCallbackImpl;-><init>(Lcom/android/server/vcn/VcnGatewayConnection;I)V
 PLcom/android/server/vcn/VcnGatewayConnection$IkeSessionCallbackImpl;->onClosed()V
-PLcom/android/server/vcn/VcnGatewayConnection$IkeSessionCallbackImpl;->onClosedExceptionally(Landroid/net/ipsec/ike/exceptions/IkeException;)V
+HPLcom/android/server/vcn/VcnGatewayConnection$IkeSessionCallbackImpl;->onClosedExceptionally(Landroid/net/ipsec/ike/exceptions/IkeException;)V
 PLcom/android/server/vcn/VcnGatewayConnection$IkeSessionCallbackImpl;->onIkeSessionConnectionInfoChanged(Landroid/net/ipsec/ike/IkeSessionConnectionInfo;)V
 PLcom/android/server/vcn/VcnGatewayConnection$IkeSessionCallbackImpl;->onOpened(Landroid/net/ipsec/ike/IkeSessionConfiguration;)V
 PLcom/android/server/vcn/VcnGatewayConnection$RetryTimeoutState;-><init>(Lcom/android/server/vcn/VcnGatewayConnection;)V
 PLcom/android/server/vcn/VcnGatewayConnection$RetryTimeoutState;->enterState()V
 PLcom/android/server/vcn/VcnGatewayConnection$RetryTimeoutState;->exitState()V
 PLcom/android/server/vcn/VcnGatewayConnection$RetryTimeoutState;->getNextRetryIntervalsMs()J
-PLcom/android/server/vcn/VcnGatewayConnection$RetryTimeoutState;->processStateMsg(Landroid/os/Message;)V
+HPLcom/android/server/vcn/VcnGatewayConnection$RetryTimeoutState;->processStateMsg(Landroid/os/Message;)V
 PLcom/android/server/vcn/VcnGatewayConnection$VcnChildSessionCallback;-><init>(Lcom/android/server/vcn/VcnGatewayConnection;I)V
-PLcom/android/server/vcn/VcnGatewayConnection$VcnChildSessionCallback;->onClosed()V
+HPLcom/android/server/vcn/VcnGatewayConnection$VcnChildSessionCallback;->onClosed()V
 PLcom/android/server/vcn/VcnGatewayConnection$VcnChildSessionCallback;->onClosedExceptionally(Landroid/net/ipsec/ike/exceptions/IkeException;)V
 HPLcom/android/server/vcn/VcnGatewayConnection$VcnChildSessionCallback;->onIpSecTransformCreated(Landroid/net/IpSecTransform;I)V
 PLcom/android/server/vcn/VcnGatewayConnection$VcnChildSessionCallback;->onIpSecTransformDeleted(Landroid/net/IpSecTransform;I)V
@@ -51252,13 +53019,13 @@
 HPLcom/android/server/vcn/VcnGatewayConnection$VcnWakeLock;->release()V
 PLcom/android/server/vcn/VcnGatewayConnection;->$r8$lambda$mX1zM6slIyhK-7U4wqV__cfYc08(Lcom/android/server/vcn/VcnGatewayConnection;Landroid/os/Message;)V
 HPLcom/android/server/vcn/VcnGatewayConnection;->-$$Nest$fgetmChildConfig(Lcom/android/server/vcn/VcnGatewayConnection;)Lcom/android/server/vcn/VcnGatewayConnection$VcnChildSessionConfiguration;
-PLcom/android/server/vcn/VcnGatewayConnection;->-$$Nest$fgetmConnectionConfig(Lcom/android/server/vcn/VcnGatewayConnection;)Landroid/net/vcn/VcnGatewayConnectionConfig;
+HPLcom/android/server/vcn/VcnGatewayConnection;->-$$Nest$fgetmConnectionConfig(Lcom/android/server/vcn/VcnGatewayConnection;)Landroid/net/vcn/VcnGatewayConnectionConfig;
 PLcom/android/server/vcn/VcnGatewayConnection;->-$$Nest$fgetmConnectivityManager(Lcom/android/server/vcn/VcnGatewayConnection;)Landroid/net/ConnectivityManager;
 PLcom/android/server/vcn/VcnGatewayConnection;->-$$Nest$fgetmCurrentToken(Lcom/android/server/vcn/VcnGatewayConnection;)I
 PLcom/android/server/vcn/VcnGatewayConnection;->-$$Nest$fgetmDeps(Lcom/android/server/vcn/VcnGatewayConnection;)Lcom/android/server/vcn/VcnGatewayConnection$Dependencies;
 PLcom/android/server/vcn/VcnGatewayConnection;->-$$Nest$fgetmFailedAttempts(Lcom/android/server/vcn/VcnGatewayConnection;)I
 PLcom/android/server/vcn/VcnGatewayConnection;->-$$Nest$fgetmGatewayStatusCallback(Lcom/android/server/vcn/VcnGatewayConnection;)Lcom/android/server/vcn/Vcn$VcnGatewayStatusCallback;
-PLcom/android/server/vcn/VcnGatewayConnection;->-$$Nest$fgetmIkeConnectionInfo(Lcom/android/server/vcn/VcnGatewayConnection;)Landroid/net/ipsec/ike/IkeSessionConnectionInfo;
+HPLcom/android/server/vcn/VcnGatewayConnection;->-$$Nest$fgetmIkeConnectionInfo(Lcom/android/server/vcn/VcnGatewayConnection;)Landroid/net/ipsec/ike/IkeSessionConnectionInfo;
 PLcom/android/server/vcn/VcnGatewayConnection;->-$$Nest$fgetmIkeSession(Lcom/android/server/vcn/VcnGatewayConnection;)Lcom/android/server/vcn/VcnGatewayConnection$VcnIkeSession;
 PLcom/android/server/vcn/VcnGatewayConnection;->-$$Nest$fgetmIpSecManager(Lcom/android/server/vcn/VcnGatewayConnection;)Landroid/net/IpSecManager;
 PLcom/android/server/vcn/VcnGatewayConnection;->-$$Nest$fgetmIsMobileDataEnabled(Lcom/android/server/vcn/VcnGatewayConnection;)Z
@@ -51299,20 +53066,20 @@
 PLcom/android/server/vcn/VcnGatewayConnection;->-$$Nest$sfgetTAG()Ljava/lang/String;
 PLcom/android/server/vcn/VcnGatewayConnection;-><clinit>()V
 PLcom/android/server/vcn/VcnGatewayConnection;-><init>(Lcom/android/server/vcn/VcnContext;Landroid/os/ParcelUuid;Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;Landroid/net/vcn/VcnGatewayConnectionConfig;Lcom/android/server/vcn/Vcn$VcnGatewayStatusCallback;Z)V
-PLcom/android/server/vcn/VcnGatewayConnection;-><init>(Lcom/android/server/vcn/VcnContext;Landroid/os/ParcelUuid;Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;Landroid/net/vcn/VcnGatewayConnectionConfig;Lcom/android/server/vcn/Vcn$VcnGatewayStatusCallback;ZLcom/android/server/vcn/VcnGatewayConnection$Dependencies;)V
+HPLcom/android/server/vcn/VcnGatewayConnection;-><init>(Lcom/android/server/vcn/VcnContext;Landroid/os/ParcelUuid;Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;Landroid/net/vcn/VcnGatewayConnectionConfig;Lcom/android/server/vcn/Vcn$VcnGatewayStatusCallback;ZLcom/android/server/vcn/VcnGatewayConnection$Dependencies;)V
 HPLcom/android/server/vcn/VcnGatewayConnection;->acquireWakeLock()V
 PLcom/android/server/vcn/VcnGatewayConnection;->buildChildParams()Landroid/net/ipsec/ike/ChildSessionParams;
-HPLcom/android/server/vcn/VcnGatewayConnection;->buildConnectedLinkProperties(Landroid/net/vcn/VcnGatewayConnectionConfig;Landroid/net/IpSecManager$IpSecTunnelInterface;Lcom/android/server/vcn/VcnGatewayConnection$VcnChildSessionConfiguration;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;Landroid/net/ipsec/ike/IkeSessionConnectionInfo;)Landroid/net/LinkProperties;
+HPLcom/android/server/vcn/VcnGatewayConnection;->buildConnectedLinkProperties(Landroid/net/vcn/VcnGatewayConnectionConfig;Landroid/net/IpSecManager$IpSecTunnelInterface;Lcom/android/server/vcn/VcnGatewayConnection$VcnChildSessionConfiguration;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;Landroid/net/ipsec/ike/IkeSessionConnectionInfo;)Landroid/net/LinkProperties;+]Landroid/net/ipsec/ike/IkeSessionConnectionInfo;Landroid/net/ipsec/ike/IkeSessionConnectionInfo;]Landroid/net/LinkProperties;Landroid/net/LinkProperties;]Landroid/net/vcn/VcnGatewayConnectionConfig;Landroid/net/vcn/VcnGatewayConnectionConfig;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Landroid/net/IpSecManager$IpSecTunnelInterface;Landroid/net/IpSecManager$IpSecTunnelInterface;]Landroid/net/ipsec/ike/IkeTunnelConnectionParams;Landroid/net/ipsec/ike/IkeTunnelConnectionParams;]Lcom/android/server/vcn/VcnGatewayConnection$VcnChildSessionConfiguration;Lcom/android/server/vcn/VcnGatewayConnection$VcnChildSessionConfiguration;]Landroid/net/ipsec/ike/TunnelModeChildSessionParams;Landroid/net/ipsec/ike/TunnelModeChildSessionParams;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;
 PLcom/android/server/vcn/VcnGatewayConnection;->buildIkeParams(Landroid/net/Network;)Landroid/net/ipsec/ike/IkeSessionParams;
 PLcom/android/server/vcn/VcnGatewayConnection;->buildIkeSession(Landroid/net/Network;)Lcom/android/server/vcn/VcnGatewayConnection$VcnIkeSession;
-HPLcom/android/server/vcn/VcnGatewayConnection;->buildNetworkCapabilities(Landroid/net/vcn/VcnGatewayConnectionConfig;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;Z)Landroid/net/NetworkCapabilities;
+HPLcom/android/server/vcn/VcnGatewayConnection;->buildNetworkCapabilities(Landroid/net/vcn/VcnGatewayConnectionConfig;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;Z)Landroid/net/NetworkCapabilities;+]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/net/vcn/VcnGatewayConnectionConfig;Landroid/net/vcn/VcnGatewayConnectionConfig;]Landroid/net/TelephonyNetworkSpecifier;Landroid/net/TelephonyNetworkSpecifier;]Landroid/net/NetworkCapabilities$Builder;Landroid/net/NetworkCapabilities$Builder;]Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableCollection$1;]Ljava/util/Set;Ljava/util/Collections$UnmodifiableSet;
 HPLcom/android/server/vcn/VcnGatewayConnection;->cancelDisconnectRequestAlarm()V
-PLcom/android/server/vcn/VcnGatewayConnection;->cancelRetryTimeoutAlarm()V
+HPLcom/android/server/vcn/VcnGatewayConnection;->cancelRetryTimeoutAlarm()V
 HPLcom/android/server/vcn/VcnGatewayConnection;->cancelSafeModeAlarm()V
-PLcom/android/server/vcn/VcnGatewayConnection;->cancelTeardownTimeoutAlarm()V
+HPLcom/android/server/vcn/VcnGatewayConnection;->cancelTeardownTimeoutAlarm()V
 PLcom/android/server/vcn/VcnGatewayConnection;->childOpened(ILcom/android/server/vcn/VcnGatewayConnection$VcnChildSessionConfiguration;)V
 PLcom/android/server/vcn/VcnGatewayConnection;->childTransformCreated(ILandroid/net/IpSecTransform;I)V
-PLcom/android/server/vcn/VcnGatewayConnection;->createScheduledAlarm(Ljava/lang/String;Landroid/os/Message;J)Lcom/android/internal/util/WakeupMessage;
+HPLcom/android/server/vcn/VcnGatewayConnection;->createScheduledAlarm(Ljava/lang/String;Landroid/os/Message;J)Lcom/android/internal/util/WakeupMessage;
 PLcom/android/server/vcn/VcnGatewayConnection;->dump(Lcom/android/internal/util/IndentingPrintWriter;)V
 HPLcom/android/server/vcn/VcnGatewayConnection;->getLogPrefix()Ljava/lang/String;
 HPLcom/android/server/vcn/VcnGatewayConnection;->getTagLogPrefix()Ljava/lang/String;
@@ -51322,8 +53089,8 @@
 PLcom/android/server/vcn/VcnGatewayConnection;->lambda$createScheduledAlarm$0(Landroid/os/Message;)V
 HPLcom/android/server/vcn/VcnGatewayConnection;->logDbg(Ljava/lang/String;)V
 HPLcom/android/server/vcn/VcnGatewayConnection;->logInfo(Ljava/lang/String;)V
-PLcom/android/server/vcn/VcnGatewayConnection;->logInfo(Ljava/lang/String;Ljava/lang/Throwable;)V
-PLcom/android/server/vcn/VcnGatewayConnection;->logVdbg(Ljava/lang/String;)V
+HPLcom/android/server/vcn/VcnGatewayConnection;->logInfo(Ljava/lang/String;Ljava/lang/Throwable;)V
+HPLcom/android/server/vcn/VcnGatewayConnection;->logVdbg(Ljava/lang/String;)V
 PLcom/android/server/vcn/VcnGatewayConnection;->logWtf(Ljava/lang/String;Ljava/lang/Throwable;)V
 HPLcom/android/server/vcn/VcnGatewayConnection;->maybeReleaseWakeLock()V
 PLcom/android/server/vcn/VcnGatewayConnection;->migrationCompleted(ILandroid/net/IpSecTransform;Landroid/net/IpSecTransform;)V
@@ -51340,9 +53107,9 @@
 PLcom/android/server/vcn/VcnGatewayConnection;->sessionLost(ILjava/lang/Exception;)V
 PLcom/android/server/vcn/VcnGatewayConnection;->sessionLostWithoutCallback(ILjava/lang/Exception;)V
 PLcom/android/server/vcn/VcnGatewayConnection;->setDisconnectRequestAlarm()V
-PLcom/android/server/vcn/VcnGatewayConnection;->setRetryTimeoutAlarm(J)V
-PLcom/android/server/vcn/VcnGatewayConnection;->setSafeModeAlarm()V
-PLcom/android/server/vcn/VcnGatewayConnection;->setTeardownTimeoutAlarm()V
+HPLcom/android/server/vcn/VcnGatewayConnection;->setRetryTimeoutAlarm(J)V
+HPLcom/android/server/vcn/VcnGatewayConnection;->setSafeModeAlarm()V
+HPLcom/android/server/vcn/VcnGatewayConnection;->setTeardownTimeoutAlarm()V
 PLcom/android/server/vcn/VcnGatewayConnection;->teardownAsynchronously()V
 PLcom/android/server/vcn/VcnGatewayConnection;->updateSubscriptionSnapshot(Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;)V
 HSPLcom/android/server/vcn/VcnNetworkProvider$1;-><init>(Lcom/android/server/vcn/VcnNetworkProvider;)V
@@ -51365,13 +53132,13 @@
 PLcom/android/server/vcn/VcnNetworkProvider;->resendAllRequests(Lcom/android/server/vcn/VcnNetworkProvider$NetworkRequestListener;)V
 PLcom/android/server/vcn/VcnNetworkProvider;->unregisterListener(Lcom/android/server/vcn/VcnNetworkProvider$NetworkRequestListener;)V
 PLcom/android/server/vcn/routeselection/NetworkPriorityClassifier;-><clinit>()V
-HPLcom/android/server/vcn/routeselection/NetworkPriorityClassifier;->calculatePriorityClass(Lcom/android/server/vcn/VcnContext;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;Ljava/util/List;Landroid/os/ParcelUuid;Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;Lcom/android/server/vcn/util/PersistableBundleUtils$PersistableBundleWrapper;)I
+HPLcom/android/server/vcn/routeselection/NetworkPriorityClassifier;->calculatePriorityClass(Lcom/android/server/vcn/VcnContext;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;Ljava/util/List;Landroid/os/ParcelUuid;Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;Lcom/android/server/vcn/util/PersistableBundleUtils$PersistableBundleWrapper;)I+]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HPLcom/android/server/vcn/routeselection/NetworkPriorityClassifier;->checkMatchesCellPriorityRule(Lcom/android/server/vcn/VcnContext;Landroid/net/vcn/VcnCellUnderlyingNetworkTemplate;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;Landroid/os/ParcelUuid;Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;)Z
-HPLcom/android/server/vcn/routeselection/NetworkPriorityClassifier;->checkMatchesPriorityRule(Lcom/android/server/vcn/VcnContext;Landroid/net/vcn/VcnUnderlyingNetworkTemplate;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;Landroid/os/ParcelUuid;Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;Lcom/android/server/vcn/util/PersistableBundleUtils$PersistableBundleWrapper;)Z
+HPLcom/android/server/vcn/routeselection/NetworkPriorityClassifier;->checkMatchesPriorityRule(Lcom/android/server/vcn/VcnContext;Landroid/net/vcn/VcnUnderlyingNetworkTemplate;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;Landroid/os/ParcelUuid;Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;Lcom/android/server/vcn/util/PersistableBundleUtils$PersistableBundleWrapper;)Z+]Landroid/net/vcn/VcnUnderlyingNetworkTemplate;Landroid/net/vcn/VcnCellUnderlyingNetworkTemplate;,Landroid/net/vcn/VcnWifiUnderlyingNetworkTemplate;]Landroid/net/NetworkCapabilities;Landroid/net/NetworkCapabilities;]Lcom/android/server/vcn/VcnContext;Lcom/android/server/vcn/VcnContext;
 HPLcom/android/server/vcn/routeselection/NetworkPriorityClassifier;->checkMatchesWifiPriorityRule(Landroid/net/vcn/VcnWifiUnderlyingNetworkTemplate;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;Lcom/android/server/vcn/util/PersistableBundleUtils$PersistableBundleWrapper;)Z
 PLcom/android/server/vcn/routeselection/NetworkPriorityClassifier;->getWifiEntryRssiThreshold(Lcom/android/server/vcn/util/PersistableBundleUtils$PersistableBundleWrapper;)I
 PLcom/android/server/vcn/routeselection/NetworkPriorityClassifier;->getWifiExitRssiThreshold(Lcom/android/server/vcn/util/PersistableBundleUtils$PersistableBundleWrapper;)I
-HPLcom/android/server/vcn/routeselection/NetworkPriorityClassifier;->isOpportunistic(Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;Ljava/util/Set;)Z
+HPLcom/android/server/vcn/routeselection/NetworkPriorityClassifier;->isOpportunistic(Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;Ljava/util/Set;)Z+]Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;]Ljava/lang/Integer;Ljava/lang/Integer;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Ljava/util/Set;Landroid/util/ArraySet;
 PLcom/android/server/vcn/routeselection/NetworkPriorityClassifier;->isWifiRssiAcceptable(Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;Lcom/android/server/vcn/util/PersistableBundleUtils$PersistableBundleWrapper;)Z
 PLcom/android/server/vcn/routeselection/UnderlyingNetworkController$Dependencies;-><init>()V
 PLcom/android/server/vcn/routeselection/UnderlyingNetworkController$Dependencies;-><init>(Lcom/android/server/vcn/routeselection/UnderlyingNetworkController$Dependencies-IA;)V
@@ -51387,13 +53154,13 @@
 PLcom/android/server/vcn/routeselection/UnderlyingNetworkController$VcnActiveDataSubscriptionIdListener;-><init>(Lcom/android/server/vcn/routeselection/UnderlyingNetworkController;)V
 PLcom/android/server/vcn/routeselection/UnderlyingNetworkController$VcnActiveDataSubscriptionIdListener;-><init>(Lcom/android/server/vcn/routeselection/UnderlyingNetworkController;Lcom/android/server/vcn/routeselection/UnderlyingNetworkController$VcnActiveDataSubscriptionIdListener-IA;)V
 PLcom/android/server/vcn/routeselection/UnderlyingNetworkController$VcnActiveDataSubscriptionIdListener;->onActiveDataSubscriptionIdChanged(I)V
-PLcom/android/server/vcn/routeselection/UnderlyingNetworkController;->-$$Nest$fgetmCarrierConfig(Lcom/android/server/vcn/routeselection/UnderlyingNetworkController;)Lcom/android/server/vcn/util/PersistableBundleUtils$PersistableBundleWrapper;
+HPLcom/android/server/vcn/routeselection/UnderlyingNetworkController;->-$$Nest$fgetmCarrierConfig(Lcom/android/server/vcn/routeselection/UnderlyingNetworkController;)Lcom/android/server/vcn/util/PersistableBundleUtils$PersistableBundleWrapper;
 PLcom/android/server/vcn/routeselection/UnderlyingNetworkController;->-$$Nest$fgetmConnectionConfig(Lcom/android/server/vcn/routeselection/UnderlyingNetworkController;)Landroid/net/vcn/VcnGatewayConnectionConfig;
 HPLcom/android/server/vcn/routeselection/UnderlyingNetworkController;->-$$Nest$fgetmCurrentRecord(Lcom/android/server/vcn/routeselection/UnderlyingNetworkController;)Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;
-PLcom/android/server/vcn/routeselection/UnderlyingNetworkController;->-$$Nest$fgetmLastSnapshot(Lcom/android/server/vcn/routeselection/UnderlyingNetworkController;)Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;
+HPLcom/android/server/vcn/routeselection/UnderlyingNetworkController;->-$$Nest$fgetmLastSnapshot(Lcom/android/server/vcn/routeselection/UnderlyingNetworkController;)Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;
 PLcom/android/server/vcn/routeselection/UnderlyingNetworkController;->-$$Nest$fgetmSubscriptionGroup(Lcom/android/server/vcn/routeselection/UnderlyingNetworkController;)Landroid/os/ParcelUuid;
-PLcom/android/server/vcn/routeselection/UnderlyingNetworkController;->-$$Nest$fgetmVcnContext(Lcom/android/server/vcn/routeselection/UnderlyingNetworkController;)Lcom/android/server/vcn/VcnContext;
-PLcom/android/server/vcn/routeselection/UnderlyingNetworkController;->-$$Nest$mreevaluateNetworks(Lcom/android/server/vcn/routeselection/UnderlyingNetworkController;)V
+HPLcom/android/server/vcn/routeselection/UnderlyingNetworkController;->-$$Nest$fgetmVcnContext(Lcom/android/server/vcn/routeselection/UnderlyingNetworkController;)Lcom/android/server/vcn/VcnContext;
+HPLcom/android/server/vcn/routeselection/UnderlyingNetworkController;->-$$Nest$mreevaluateNetworks(Lcom/android/server/vcn/routeselection/UnderlyingNetworkController;)V
 PLcom/android/server/vcn/routeselection/UnderlyingNetworkController;-><clinit>()V
 PLcom/android/server/vcn/routeselection/UnderlyingNetworkController;-><init>(Lcom/android/server/vcn/VcnContext;Landroid/net/vcn/VcnGatewayConnectionConfig;Landroid/os/ParcelUuid;Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;Lcom/android/server/vcn/routeselection/UnderlyingNetworkController$UnderlyingNetworkControllerCallback;)V
 PLcom/android/server/vcn/routeselection/UnderlyingNetworkController;-><init>(Lcom/android/server/vcn/VcnContext;Landroid/net/vcn/VcnGatewayConnectionConfig;Landroid/os/ParcelUuid;Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;Lcom/android/server/vcn/routeselection/UnderlyingNetworkController$UnderlyingNetworkControllerCallback;Lcom/android/server/vcn/routeselection/UnderlyingNetworkController$Dependencies;)V
@@ -51408,7 +53175,7 @@
 PLcom/android/server/vcn/routeselection/UnderlyingNetworkController;->getWifiNetworkRequest()Landroid/net/NetworkRequest;
 HPLcom/android/server/vcn/routeselection/UnderlyingNetworkController;->logInfo(Ljava/lang/String;)V
 HPLcom/android/server/vcn/routeselection/UnderlyingNetworkController;->reevaluateNetworks()V
-PLcom/android/server/vcn/routeselection/UnderlyingNetworkController;->registerOrUpdateNetworkRequests()V
+HPLcom/android/server/vcn/routeselection/UnderlyingNetworkController;->registerOrUpdateNetworkRequests()V
 PLcom/android/server/vcn/routeselection/UnderlyingNetworkController;->teardown()V
 HPLcom/android/server/vcn/routeselection/UnderlyingNetworkController;->updateSubscriptionSnapshot(Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;)V
 HPLcom/android/server/vcn/routeselection/UnderlyingNetworkRecord$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/vcn/VcnContext;Ljava/util/List;Landroid/os/ParcelUuid;Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;Lcom/android/server/vcn/util/PersistableBundleUtils$PersistableBundleWrapper;)V
@@ -51419,7 +53186,7 @@
 PLcom/android/server/vcn/routeselection/UnderlyingNetworkRecord$Builder;->setIsBlocked(Z)V
 PLcom/android/server/vcn/routeselection/UnderlyingNetworkRecord$Builder;->setLinkProperties(Landroid/net/LinkProperties;)V
 HPLcom/android/server/vcn/routeselection/UnderlyingNetworkRecord$Builder;->setNetworkCapabilities(Landroid/net/NetworkCapabilities;)V
-PLcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;->$r8$lambda$5FNNUjngY5ZLKel0p59PtDJdMKc(Lcom/android/server/vcn/VcnContext;Ljava/util/List;Landroid/os/ParcelUuid;Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;Lcom/android/server/vcn/util/PersistableBundleUtils$PersistableBundleWrapper;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;)I
+HPLcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;->$r8$lambda$5FNNUjngY5ZLKel0p59PtDJdMKc(Lcom/android/server/vcn/VcnContext;Ljava/util/List;Landroid/os/ParcelUuid;Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;Lcom/android/server/vcn/util/PersistableBundleUtils$PersistableBundleWrapper;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;)I
 HPLcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;-><init>(Landroid/net/Network;Landroid/net/NetworkCapabilities;Landroid/net/LinkProperties;Z)V
 PLcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;->dump(Lcom/android/server/vcn/VcnContext;Lcom/android/internal/util/IndentingPrintWriter;Ljava/util/List;Landroid/os/ParcelUuid;Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;Lcom/android/server/vcn/util/PersistableBundleUtils$PersistableBundleWrapper;)V
 HPLcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;->equals(Ljava/lang/Object;)Z
@@ -51428,9 +53195,9 @@
 PLcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;->getPriorityClass()I
 HPLcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;->isSelected(Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;)Z
 HPLcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;->lambda$getComparator$0(Lcom/android/server/vcn/VcnContext;Ljava/util/List;Landroid/os/ParcelUuid;Lcom/android/server/vcn/TelephonySubscriptionTracker$TelephonySubscriptionSnapshot;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;Lcom/android/server/vcn/util/PersistableBundleUtils$PersistableBundleWrapper;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;Lcom/android/server/vcn/routeselection/UnderlyingNetworkRecord;)I
-HPLcom/android/server/vcn/util/LogUtils;->getHashedSubscriptionGroup(Landroid/os/ParcelUuid;)Ljava/lang/String;
+HPLcom/android/server/vcn/util/LogUtils;->getHashedSubscriptionGroup(Landroid/os/ParcelUuid;)Ljava/lang/String;+]Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;
 PLcom/android/server/vcn/util/MtuUtils;-><clinit>()V
-HPLcom/android/server/vcn/util/MtuUtils;->getMtu(Ljava/util/List;IIZ)I
+HPLcom/android/server/vcn/util/MtuUtils;->getMtu(Ljava/util/List;IIZ)I+]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/net/ipsec/ike/ChildSaProposal;Landroid/net/ipsec/ike/ChildSaProposal;]Ljava/util/List;Ljava/util/Arrays$ArrayList;,Ljava/util/ArrayList;]Ljava/util/Map;Ljava/util/Collections$UnmodifiableMap;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;,Ljava/util/Arrays$ArrayItr;
 PLcom/android/server/vcn/util/OneWayBoolean;-><init>()V
 HPLcom/android/server/vcn/util/OneWayBoolean;->getValue()Z
 PLcom/android/server/vcn/util/OneWayBoolean;->setTrue()V
@@ -51453,47 +53220,47 @@
 PLcom/android/server/vcn/util/PersistableBundleUtils;->minimizeBundle(Landroid/os/PersistableBundle;[Ljava/lang/String;)Landroid/os/PersistableBundle;
 HSPLcom/android/server/vcn/util/PersistableBundleUtils;->toMap(Landroid/os/PersistableBundle;Lcom/android/server/vcn/util/PersistableBundleUtils$Deserializer;Lcom/android/server/vcn/util/PersistableBundleUtils$Deserializer;)Ljava/util/LinkedHashMap;
 HSPLcom/android/server/vcn/util/PersistableBundleUtils;->toParcelUuid(Landroid/os/PersistableBundle;)Landroid/os/ParcelUuid;
-HPLcom/android/server/vibrator/AbstractVibratorStep;-><init>(Lcom/android/server/vibrator/VibrationStepConductor;JLcom/android/server/vibrator/VibratorController;Landroid/os/VibrationEffect$Composed;IJ)V
-HPLcom/android/server/vibrator/AbstractVibratorStep;->acceptVibratorCompleteCallback(I)Z
+HSPLcom/android/server/vibrator/AbstractVibratorStep;-><init>(Lcom/android/server/vibrator/VibrationStepConductor;JLcom/android/server/vibrator/VibratorController;Landroid/os/VibrationEffect$Composed;IJ)V
+HPLcom/android/server/vibrator/AbstractVibratorStep;->acceptVibratorCompleteCallback(I)Z+]Landroid/os/VibratorInfo;Landroid/os/VibratorInfo;]Lcom/android/server/vibrator/VibratorController;Lcom/android/server/vibrator/VibratorController;
 HPLcom/android/server/vibrator/AbstractVibratorStep;->cancel()Ljava/util/List;
 PLcom/android/server/vibrator/AbstractVibratorStep;->cancelImmediately()V
-HPLcom/android/server/vibrator/AbstractVibratorStep;->changeAmplitude(F)V
-HPLcom/android/server/vibrator/AbstractVibratorStep;->getVibratorOnDuration()J
+HSPLcom/android/server/vibrator/AbstractVibratorStep;->changeAmplitude(F)V
+HSPLcom/android/server/vibrator/AbstractVibratorStep;->getVibratorOnDuration()J
 HPLcom/android/server/vibrator/AbstractVibratorStep;->nextSteps(I)Ljava/util/List;
-HPLcom/android/server/vibrator/AbstractVibratorStep;->nextSteps(JJI)Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;]Landroid/os/VibrationEffect$Composed;Landroid/os/VibrationEffect$Composed;
-HPLcom/android/server/vibrator/AbstractVibratorStep;->skipToNextSteps(I)Ljava/util/List;
-HPLcom/android/server/vibrator/AbstractVibratorStep;->stopVibrating()V
+HSPLcom/android/server/vibrator/AbstractVibratorStep;->nextSteps(JJI)Ljava/util/List;+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;]Landroid/os/VibrationEffect$Composed;Landroid/os/VibrationEffect$Composed;
+HSPLcom/android/server/vibrator/AbstractVibratorStep;->skipToNextSteps(I)Ljava/util/List;
+HSPLcom/android/server/vibrator/AbstractVibratorStep;->stopVibrating()V+]Lcom/android/server/vibrator/VibratorController;Lcom/android/server/vibrator/VibratorController;
 HSPLcom/android/server/vibrator/ClippingAmplitudeAndFrequencyAdapter;-><init>()V
-HPLcom/android/server/vibrator/ClippingAmplitudeAndFrequencyAdapter;->apply(Landroid/os/vibrator/StepSegment;Landroid/os/VibratorInfo;)Landroid/os/vibrator/StepSegment;
-HPLcom/android/server/vibrator/ClippingAmplitudeAndFrequencyAdapter;->apply(Ljava/util/List;ILandroid/os/VibratorInfo;)I+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/vibrator/ClippingAmplitudeAndFrequencyAdapter;Lcom/android/server/vibrator/ClippingAmplitudeAndFrequencyAdapter;
-HPLcom/android/server/vibrator/ClippingAmplitudeAndFrequencyAdapter;->apply(Ljava/util/List;ILjava/lang/Object;)I
-HPLcom/android/server/vibrator/ClippingAmplitudeAndFrequencyAdapter;->clampAmplitude(Landroid/os/VibratorInfo;FF)F
-HPLcom/android/server/vibrator/ClippingAmplitudeAndFrequencyAdapter;->clampFrequency(Landroid/os/VibratorInfo;F)F
+HSPLcom/android/server/vibrator/ClippingAmplitudeAndFrequencyAdapter;->apply(Landroid/os/vibrator/StepSegment;Landroid/os/VibratorInfo;)Landroid/os/vibrator/StepSegment;
+HSPLcom/android/server/vibrator/ClippingAmplitudeAndFrequencyAdapter;->apply(Ljava/util/List;ILandroid/os/VibratorInfo;)I+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/vibrator/ClippingAmplitudeAndFrequencyAdapter;Lcom/android/server/vibrator/ClippingAmplitudeAndFrequencyAdapter;
+HSPLcom/android/server/vibrator/ClippingAmplitudeAndFrequencyAdapter;->apply(Ljava/util/List;ILjava/lang/Object;)I
+HSPLcom/android/server/vibrator/ClippingAmplitudeAndFrequencyAdapter;->clampAmplitude(Landroid/os/VibratorInfo;FF)F
+HSPLcom/android/server/vibrator/ClippingAmplitudeAndFrequencyAdapter;->clampFrequency(Landroid/os/VibratorInfo;F)F
 HPLcom/android/server/vibrator/CompleteEffectVibratorStep;-><init>(Lcom/android/server/vibrator/VibrationStepConductor;JZLcom/android/server/vibrator/VibratorController;J)V
 HPLcom/android/server/vibrator/CompleteEffectVibratorStep;->cancel()Ljava/util/List;
 HPLcom/android/server/vibrator/CompleteEffectVibratorStep;->isCleanUp()Z
-HPLcom/android/server/vibrator/CompleteEffectVibratorStep;->play()Ljava/util/List;
+HPLcom/android/server/vibrator/CompleteEffectVibratorStep;->play()Ljava/util/List;+]Lcom/android/server/vibrator/AbstractVibratorStep;Lcom/android/server/vibrator/CompleteEffectVibratorStep;]Lcom/android/server/vibrator/VibrationSettings;Lcom/android/server/vibrator/VibrationSettings;]Lcom/android/server/vibrator/VibratorController;Lcom/android/server/vibrator/VibratorController;
 PLcom/android/server/vibrator/ComposePrimitivesVibratorStep;-><init>(Lcom/android/server/vibrator/VibrationStepConductor;JLcom/android/server/vibrator/VibratorController;Landroid/os/VibrationEffect$Composed;IJ)V
 HPLcom/android/server/vibrator/ComposePrimitivesVibratorStep;->play()Ljava/util/List;
 HPLcom/android/server/vibrator/ComposePrimitivesVibratorStep;->unrollPrimitiveSegments(Landroid/os/VibrationEffect$Composed;II)Ljava/util/List;
 HSPLcom/android/server/vibrator/DeviceVibrationEffectAdapter;-><init>(Lcom/android/server/vibrator/VibrationSettings;)V
-HPLcom/android/server/vibrator/DeviceVibrationEffectAdapter;->apply(Landroid/os/VibrationEffect;Landroid/os/VibratorInfo;)Landroid/os/VibrationEffect;
-HPLcom/android/server/vibrator/FinishSequentialEffectStep;-><init>(Lcom/android/server/vibrator/StartSequentialEffectStep;)V
+HSPLcom/android/server/vibrator/DeviceVibrationEffectAdapter;->apply(Landroid/os/VibrationEffect;Landroid/os/VibratorInfo;)Landroid/os/VibrationEffect;
+HSPLcom/android/server/vibrator/FinishSequentialEffectStep;-><init>(Lcom/android/server/vibrator/StartSequentialEffectStep;)V
 PLcom/android/server/vibrator/FinishSequentialEffectStep;->cancel()Ljava/util/List;
 PLcom/android/server/vibrator/FinishSequentialEffectStep;->cancelImmediately()V
-HPLcom/android/server/vibrator/FinishSequentialEffectStep;->isCleanUp()Z
-HPLcom/android/server/vibrator/FinishSequentialEffectStep;->play()Ljava/util/List;
+HSPLcom/android/server/vibrator/FinishSequentialEffectStep;->isCleanUp()Z
+HPLcom/android/server/vibrator/FinishSequentialEffectStep;->play()Ljava/util/List;+]Lcom/android/server/vibrator/VibrationThread$VibratorManagerHooks;Lcom/android/server/vibrator/VibratorManagerService$VibrationThreadCallbacks;]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;]Lcom/android/server/vibrator/StartSequentialEffectStep;Lcom/android/server/vibrator/StartSequentialEffectStep;
 HSPLcom/android/server/vibrator/InputDeviceDelegate;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
 HSPLcom/android/server/vibrator/InputDeviceDelegate;->onSystemReady()V
 HSPLcom/android/server/vibrator/InputDeviceDelegate;->updateInputDeviceVibrators(Z)Z
-HPLcom/android/server/vibrator/InputDeviceDelegate;->vibrateIfAvailable(ILjava/lang/String;Landroid/os/CombinedVibration;Ljava/lang/String;Landroid/os/VibrationAttributes;)Z
+HSPLcom/android/server/vibrator/InputDeviceDelegate;->vibrateIfAvailable(ILjava/lang/String;Landroid/os/CombinedVibration;Ljava/lang/String;Landroid/os/VibrationAttributes;)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/vibrator/PerformPrebakedVibratorStep;-><init>(Lcom/android/server/vibrator/VibrationStepConductor;JLcom/android/server/vibrator/VibratorController;Landroid/os/VibrationEffect$Composed;IJ)V
-HPLcom/android/server/vibrator/PerformPrebakedVibratorStep;->play()Ljava/util/List;
+HPLcom/android/server/vibrator/PerformPrebakedVibratorStep;->play()Ljava/util/List;+]Landroid/os/vibrator/PrebakedSegment;Landroid/os/vibrator/PrebakedSegment;]Lcom/android/server/vibrator/AbstractVibratorStep;Lcom/android/server/vibrator/PerformPrebakedVibratorStep;]Lcom/android/server/vibrator/Step;Lcom/android/server/vibrator/PerformPrebakedVibratorStep;]Lcom/android/server/vibrator/Vibration;Lcom/android/server/vibrator/Vibration;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/vibrator/VibratorController;Lcom/android/server/vibrator/VibratorController;]Landroid/os/VibrationEffect$Composed;Landroid/os/VibrationEffect$Composed;
 HSPLcom/android/server/vibrator/RampDownAdapter;-><init>(II)V
-PLcom/android/server/vibrator/RampDownAdapter;->addRampDownToLoop(Ljava/util/List;I)I
-HPLcom/android/server/vibrator/RampDownAdapter;->addRampDownToZeroAmplitudeSegments(Ljava/util/List;I)I
-HPLcom/android/server/vibrator/RampDownAdapter;->apply(Ljava/util/List;ILandroid/os/VibratorInfo;)I
-HPLcom/android/server/vibrator/RampDownAdapter;->apply(Ljava/util/List;ILjava/lang/Object;)I
+HPLcom/android/server/vibrator/RampDownAdapter;->addRampDownToLoop(Ljava/util/List;I)I
+HPLcom/android/server/vibrator/RampDownAdapter;->addRampDownToZeroAmplitudeSegments(Ljava/util/List;I)I+]Lcom/android/server/vibrator/RampDownAdapter;Lcom/android/server/vibrator/RampDownAdapter;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/vibrator/StepSegment;Landroid/os/vibrator/StepSegment;]Landroid/os/vibrator/VibrationEffectSegment;Landroid/os/vibrator/StepSegment;
+HSPLcom/android/server/vibrator/RampDownAdapter;->apply(Ljava/util/List;ILandroid/os/VibratorInfo;)I
+HSPLcom/android/server/vibrator/RampDownAdapter;->apply(Ljava/util/List;ILjava/lang/Object;)I
 HPLcom/android/server/vibrator/RampDownAdapter;->createStepsDown(FFJ)Ljava/util/List;
 PLcom/android/server/vibrator/RampDownAdapter;->endsWithNonZeroAmplitude(Landroid/os/vibrator/VibrationEffectSegment;)Z
 HPLcom/android/server/vibrator/RampDownAdapter;->isOffSegment(Landroid/os/vibrator/VibrationEffectSegment;)Z
@@ -51503,97 +53270,98 @@
 HPLcom/android/server/vibrator/RampOffVibratorStep;->isCleanUp()Z
 HPLcom/android/server/vibrator/RampOffVibratorStep;->play()Ljava/util/List;
 HSPLcom/android/server/vibrator/RampToStepAdapter;-><init>(I)V
-HPLcom/android/server/vibrator/RampToStepAdapter;->apply(Ljava/util/List;ILandroid/os/VibratorInfo;)I+]Landroid/os/VibratorInfo;Landroid/os/VibratorInfo;]Ljava/util/List;Ljava/util/ArrayList;
-HPLcom/android/server/vibrator/RampToStepAdapter;->apply(Ljava/util/List;ILjava/lang/Object;)I
-PLcom/android/server/vibrator/SetAmplitudeVibratorStep;-><init>(Lcom/android/server/vibrator/VibrationStepConductor;JLcom/android/server/vibrator/VibratorController;Landroid/os/VibrationEffect$Composed;IJ)V
-HPLcom/android/server/vibrator/SetAmplitudeVibratorStep;->acceptVibratorCompleteCallback(I)Z
-HPLcom/android/server/vibrator/SetAmplitudeVibratorStep;->getVibratorOnDuration(Landroid/os/VibrationEffect$Composed;I)J
-HPLcom/android/server/vibrator/SetAmplitudeVibratorStep;->play()Ljava/util/List;
-PLcom/android/server/vibrator/SetAmplitudeVibratorStep;->startVibrating(J)J
+HSPLcom/android/server/vibrator/RampToStepAdapter;->apply(Ljava/util/List;ILandroid/os/VibratorInfo;)I+]Landroid/os/VibratorInfo;Landroid/os/VibratorInfo;]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/vibrator/RampToStepAdapter;->apply(Ljava/util/List;ILjava/lang/Object;)I
+HSPLcom/android/server/vibrator/SetAmplitudeVibratorStep;-><init>(Lcom/android/server/vibrator/VibrationStepConductor;JLcom/android/server/vibrator/VibratorController;Landroid/os/VibrationEffect$Composed;IJ)V
+HSPLcom/android/server/vibrator/SetAmplitudeVibratorStep;->acceptVibratorCompleteCallback(I)Z
+HSPLcom/android/server/vibrator/SetAmplitudeVibratorStep;->getVibratorOnDuration(Landroid/os/VibrationEffect$Composed;I)J+]Lcom/android/server/vibrator/VibrationSettings;Lcom/android/server/vibrator/VibrationSettings;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/vibrator/StepSegment;Landroid/os/vibrator/StepSegment;]Landroid/os/VibrationEffect$Composed;Landroid/os/VibrationEffect$Composed;]Landroid/os/vibrator/VibrationEffectSegment;Landroid/os/vibrator/StepSegment;
+HSPLcom/android/server/vibrator/SetAmplitudeVibratorStep;->play()Ljava/util/List;+]Lcom/android/server/vibrator/SetAmplitudeVibratorStep;Lcom/android/server/vibrator/SetAmplitudeVibratorStep;]Lcom/android/server/vibrator/AbstractVibratorStep;Lcom/android/server/vibrator/SetAmplitudeVibratorStep;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/vibrator/StepSegment;Landroid/os/vibrator/StepSegment;]Landroid/os/VibrationEffect$Composed;Landroid/os/VibrationEffect$Composed;]Landroid/os/vibrator/VibrationEffectSegment;Landroid/os/vibrator/StepSegment;
+HSPLcom/android/server/vibrator/SetAmplitudeVibratorStep;->startVibrating(J)J
 PLcom/android/server/vibrator/SetAmplitudeVibratorStep;->turnVibratorBackOn(J)J
-HPLcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;-><init>(Lcom/android/server/vibrator/StartSequentialEffectStep;Landroid/os/CombinedVibration$Mono;)V+]Landroid/os/CombinedVibration$Mono;Landroid/os/CombinedVibration$Mono;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/vibrator/DeviceVibrationEffectAdapter;Lcom/android/server/vibrator/DeviceVibrationEffectAdapter;]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;]Lcom/android/server/vibrator/VibratorController;Lcom/android/server/vibrator/VibratorController;]Lcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;Lcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;
-HPLcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;->calculateRequiredSyncCapabilities(Landroid/util/SparseArray;)J+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/VibrationEffect$Composed;Landroid/os/VibrationEffect$Composed;]Lcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;Lcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;
-HPLcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;->effectAt(I)Landroid/os/VibrationEffect$Composed;
-HPLcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;->requireMixedTriggerCapability(JJ)Z
-HPLcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;->size()I
-HPLcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;->vibratorIdAt(I)I
-HPLcom/android/server/vibrator/StartSequentialEffectStep;-><init>(Lcom/android/server/vibrator/VibrationStepConductor;JLandroid/os/CombinedVibration$Sequential;I)V
-HPLcom/android/server/vibrator/StartSequentialEffectStep;-><init>(Lcom/android/server/vibrator/VibrationStepConductor;Landroid/os/CombinedVibration$Sequential;)V
+HSPLcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;-><init>(Lcom/android/server/vibrator/StartSequentialEffectStep;Landroid/os/CombinedVibration$Mono;)V+]Landroid/os/CombinedVibration$Mono;Landroid/os/CombinedVibration$Mono;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/vibrator/DeviceVibrationEffectAdapter;Lcom/android/server/vibrator/DeviceVibrationEffectAdapter;]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;]Lcom/android/server/vibrator/VibratorController;Lcom/android/server/vibrator/VibratorController;]Lcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;Lcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;
+HSPLcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;->calculateRequiredSyncCapabilities(Landroid/util/SparseArray;)J+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/VibrationEffect$Composed;Landroid/os/VibrationEffect$Composed;]Lcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;Lcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;
+HSPLcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;->effectAt(I)Landroid/os/VibrationEffect$Composed;
+HSPLcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;->requireMixedTriggerCapability(JJ)Z
+HSPLcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;->size()I
+HSPLcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;->vibratorIdAt(I)I
+HSPLcom/android/server/vibrator/StartSequentialEffectStep;-><init>(Lcom/android/server/vibrator/VibrationStepConductor;JLandroid/os/CombinedVibration$Sequential;I)V
+HSPLcom/android/server/vibrator/StartSequentialEffectStep;-><init>(Lcom/android/server/vibrator/VibrationStepConductor;Landroid/os/CombinedVibration$Sequential;)V
 PLcom/android/server/vibrator/StartSequentialEffectStep;->cancel()Ljava/util/List;
-HPLcom/android/server/vibrator/StartSequentialEffectStep;->createEffectToVibratorMapping(Landroid/os/CombinedVibration;)Lcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;
-HPLcom/android/server/vibrator/StartSequentialEffectStep;->getVibratorOnDuration()J
-HPLcom/android/server/vibrator/StartSequentialEffectStep;->nextStep()Lcom/android/server/vibrator/Step;
-HPLcom/android/server/vibrator/StartSequentialEffectStep;->play()Ljava/util/List;
-HPLcom/android/server/vibrator/StartSequentialEffectStep;->startVibrating(Lcom/android/server/vibrator/AbstractVibratorStep;Ljava/util/List;)J
-HPLcom/android/server/vibrator/StartSequentialEffectStep;->startVibrating(Lcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;Ljava/util/List;)J+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;]Lcom/android/server/vibrator/StartSequentialEffectStep;Lcom/android/server/vibrator/StartSequentialEffectStep;]Lcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;Lcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;
-HPLcom/android/server/vibrator/Step;-><init>(Lcom/android/server/vibrator/VibrationStepConductor;J)V
-PLcom/android/server/vibrator/Step;->acceptVibratorCompleteCallback(I)Z
-HPLcom/android/server/vibrator/Step;->calculateWaitTime()J
-HPLcom/android/server/vibrator/Step;->compareTo(Lcom/android/server/vibrator/Step;)I
-HPLcom/android/server/vibrator/Step;->compareTo(Ljava/lang/Object;)I+]Lcom/android/server/vibrator/Step;megamorphic_types
-HPLcom/android/server/vibrator/Step;->getVibration()Lcom/android/server/vibrator/Vibration;+]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;
-PLcom/android/server/vibrator/Step;->getVibratorOnDuration()J
-HPLcom/android/server/vibrator/Step;->isCleanUp()Z
+HSPLcom/android/server/vibrator/StartSequentialEffectStep;->createEffectToVibratorMapping(Landroid/os/CombinedVibration;)Lcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;
+HSPLcom/android/server/vibrator/StartSequentialEffectStep;->getVibratorOnDuration()J
+HPLcom/android/server/vibrator/StartSequentialEffectStep;->nextStep()Lcom/android/server/vibrator/Step;+]Landroid/os/CombinedVibration$Sequential;Landroid/os/CombinedVibration$Sequential;]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/vibrator/StartSequentialEffectStep;->play()Ljava/util/List;+]Landroid/os/CombinedVibration$Sequential;Landroid/os/CombinedVibration$Sequential;]Lcom/android/server/vibrator/VibrationThread$VibratorManagerHooks;Lcom/android/server/vibrator/VibratorManagerService$VibrationThreadCallbacks;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;]Lcom/android/server/vibrator/StartSequentialEffectStep;Lcom/android/server/vibrator/StartSequentialEffectStep;
+HSPLcom/android/server/vibrator/StartSequentialEffectStep;->startVibrating(Lcom/android/server/vibrator/AbstractVibratorStep;Ljava/util/List;)J
+HSPLcom/android/server/vibrator/StartSequentialEffectStep;->startVibrating(Lcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;Ljava/util/List;)J+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;]Lcom/android/server/vibrator/StartSequentialEffectStep;Lcom/android/server/vibrator/StartSequentialEffectStep;]Lcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;Lcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;
+HSPLcom/android/server/vibrator/Step;-><init>(Lcom/android/server/vibrator/VibrationStepConductor;J)V
+HSPLcom/android/server/vibrator/Step;->acceptVibratorCompleteCallback(I)Z
+HSPLcom/android/server/vibrator/Step;->calculateWaitTime()J
+HSPLcom/android/server/vibrator/Step;->compareTo(Lcom/android/server/vibrator/Step;)I
+HSPLcom/android/server/vibrator/Step;->compareTo(Ljava/lang/Object;)I+]Lcom/android/server/vibrator/Step;megamorphic_types
+HSPLcom/android/server/vibrator/Step;->getVibration()Lcom/android/server/vibrator/Vibration;+]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;
+HPLcom/android/server/vibrator/Step;->getVibratorOnDuration()J
+HSPLcom/android/server/vibrator/Step;->isCleanUp()Z
 HSPLcom/android/server/vibrator/StepToRampAdapter;-><init>()V
-HPLcom/android/server/vibrator/StepToRampAdapter;->apply(Ljava/util/List;ILandroid/os/VibratorInfo;)I
-HPLcom/android/server/vibrator/StepToRampAdapter;->apply(Ljava/util/List;ILjava/lang/Object;)I
-HPLcom/android/server/vibrator/StepToRampAdapter;->convertStepsToRamps(Landroid/os/VibratorInfo;Ljava/util/List;)V+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/vibrator/StepSegment;Landroid/os/vibrator/StepSegment;
-PLcom/android/server/vibrator/StepToRampAdapter;->isStep(Landroid/os/vibrator/VibrationEffectSegment;)Z
-HPLcom/android/server/vibrator/StepToRampAdapter;->splitLongRampSegments(Landroid/os/VibratorInfo;Ljava/util/List;I)I+]Landroid/os/VibratorInfo;Landroid/os/VibratorInfo;]Ljava/util/List;Ljava/util/ArrayList;
+HSPLcom/android/server/vibrator/StepToRampAdapter;->apply(Ljava/util/List;ILandroid/os/VibratorInfo;)I
+HSPLcom/android/server/vibrator/StepToRampAdapter;->apply(Ljava/util/List;ILjava/lang/Object;)I
+HSPLcom/android/server/vibrator/StepToRampAdapter;->convertStepsToRamps(Landroid/os/VibratorInfo;Ljava/util/List;)V+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/vibrator/StepSegment;Landroid/os/vibrator/StepSegment;
+HSPLcom/android/server/vibrator/StepToRampAdapter;->isStep(Landroid/os/vibrator/VibrationEffectSegment;)Z
+HSPLcom/android/server/vibrator/StepToRampAdapter;->splitLongRampSegments(Landroid/os/VibratorInfo;Ljava/util/List;I)I+]Landroid/os/VibratorInfo;Landroid/os/VibratorInfo;]Ljava/util/List;Ljava/util/ArrayList;
 HPLcom/android/server/vibrator/TurnOffVibratorStep;-><init>(Lcom/android/server/vibrator/VibrationStepConductor;JLcom/android/server/vibrator/VibratorController;)V
-PLcom/android/server/vibrator/TurnOffVibratorStep;->cancel()Ljava/util/List;
+HPLcom/android/server/vibrator/TurnOffVibratorStep;->cancel()Ljava/util/List;
+PLcom/android/server/vibrator/TurnOffVibratorStep;->cancelImmediately()V
 HPLcom/android/server/vibrator/TurnOffVibratorStep;->isCleanUp()Z
-HPLcom/android/server/vibrator/TurnOffVibratorStep;->play()Ljava/util/List;
+HPLcom/android/server/vibrator/TurnOffVibratorStep;->play()Ljava/util/List;+]Lcom/android/server/vibrator/AbstractVibratorStep;Lcom/android/server/vibrator/TurnOffVibratorStep;
 HPLcom/android/server/vibrator/Vibration$DebugInfo;-><init>(JJJLandroid/os/CombinedVibration;Landroid/os/CombinedVibration;FLandroid/os/VibrationAttributes;ILjava/lang/String;Ljava/lang/String;Lcom/android/server/vibrator/Vibration$Status;)V
 HPLcom/android/server/vibrator/Vibration$DebugInfo;->toString()Ljava/lang/String;
-PLcom/android/server/vibrator/Vibration$Status;-><clinit>()V
-PLcom/android/server/vibrator/Vibration$Status;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/server/vibrator/Vibration$Status;-><clinit>()V
+HSPLcom/android/server/vibrator/Vibration$Status;-><init>(Ljava/lang/String;I)V
 PLcom/android/server/vibrator/Vibration$Status;->values()[Lcom/android/server/vibrator/Vibration$Status;
 PLcom/android/server/vibrator/Vibration;->-$$Nest$sfgetDEBUG_DATE_FORMAT()Ljava/text/SimpleDateFormat;
-PLcom/android/server/vibrator/Vibration;-><clinit>()V
-HPLcom/android/server/vibrator/Vibration;-><init>(Landroid/os/IBinder;ILandroid/os/CombinedVibration;Landroid/os/VibrationAttributes;ILjava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/vibrator/Vibration;-><clinit>()V
+HSPLcom/android/server/vibrator/Vibration;-><init>(Landroid/os/IBinder;ILandroid/os/CombinedVibration;Landroid/os/VibrationAttributes;ILjava/lang/String;Ljava/lang/String;)V
 HPLcom/android/server/vibrator/Vibration;->addFallback(ILandroid/os/VibrationEffect;)V
 HPLcom/android/server/vibrator/Vibration;->end(Lcom/android/server/vibrator/Vibration$Status;)V
-HPLcom/android/server/vibrator/Vibration;->getDebugInfo()Lcom/android/server/vibrator/Vibration$DebugInfo;
-HPLcom/android/server/vibrator/Vibration;->getEffect()Landroid/os/CombinedVibration;
+HPLcom/android/server/vibrator/Vibration;->getDebugInfo()Lcom/android/server/vibrator/Vibration$DebugInfo;+]Lcom/android/server/vibrator/Vibration;Lcom/android/server/vibrator/Vibration;
+HSPLcom/android/server/vibrator/Vibration;->getEffect()Landroid/os/CombinedVibration;
 HPLcom/android/server/vibrator/Vibration;->getFallback(I)Landroid/os/VibrationEffect;
 HPLcom/android/server/vibrator/Vibration;->hasEnded()Z
 HPLcom/android/server/vibrator/Vibration;->isRepeating()Z
-HPLcom/android/server/vibrator/Vibration;->transformCombinedEffect(Landroid/os/CombinedVibration;Ljava/util/function/Function;)Landroid/os/CombinedVibration;
-HPLcom/android/server/vibrator/Vibration;->updateEffects(Ljava/util/function/Function;)V+]Ljava/util/function/Function;Lcom/android/server/vibrator/VibratorManagerService$$ExternalSyntheticLambda3;]Ljava/lang/Object;Landroid/os/CombinedVibration$Mono;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/vibrator/Vibration;->transformCombinedEffect(Landroid/os/CombinedVibration;Ljava/util/function/Function;)Landroid/os/CombinedVibration;+]Ljava/util/function/Function;Lcom/android/server/vibrator/VibratorManagerService$$ExternalSyntheticLambda3;]Landroid/os/CombinedVibration$Mono;Landroid/os/CombinedVibration$Mono;
+HSPLcom/android/server/vibrator/Vibration;->updateEffects(Ljava/util/function/Function;)V+]Ljava/util/function/Function;Lcom/android/server/vibrator/VibratorManagerService$$ExternalSyntheticLambda3;]Ljava/lang/Object;Landroid/os/CombinedVibration$Mono;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/vibrator/Vibration;->waitForEnd()V
-HPLcom/android/server/vibrator/VibrationEffectAdapters;->apply(Landroid/os/VibrationEffect;Ljava/util/List;Ljava/lang/Object;)Landroid/os/VibrationEffect;+]Ljava/util/List;Ljava/util/Arrays$ArrayList;]Lcom/android/server/vibrator/VibrationEffectAdapters$SegmentsAdapter;Lcom/android/server/vibrator/StepToRampAdapter;,Lcom/android/server/vibrator/RampDownAdapter;,Lcom/android/server/vibrator/RampToStepAdapter;,Lcom/android/server/vibrator/ClippingAmplitudeAndFrequencyAdapter;]Landroid/os/VibrationEffect$Composed;Landroid/os/VibrationEffect$Composed;
+HSPLcom/android/server/vibrator/VibrationEffectAdapters;->apply(Landroid/os/VibrationEffect;Ljava/util/List;Ljava/lang/Object;)Landroid/os/VibrationEffect;+]Ljava/util/List;Ljava/util/Arrays$ArrayList;]Lcom/android/server/vibrator/VibrationEffectAdapters$SegmentsAdapter;Lcom/android/server/vibrator/StepToRampAdapter;,Lcom/android/server/vibrator/RampDownAdapter;,Lcom/android/server/vibrator/RampToStepAdapter;,Lcom/android/server/vibrator/ClippingAmplitudeAndFrequencyAdapter;]Landroid/os/VibrationEffect$Composed;Landroid/os/VibrationEffect$Composed;
 HSPLcom/android/server/vibrator/VibrationScaler$ScaleLevel;-><init>(F)V
 HSPLcom/android/server/vibrator/VibrationScaler;-><init>(Landroid/content/Context;Lcom/android/server/vibrator/VibrationSettings;)V
 PLcom/android/server/vibrator/VibrationScaler;->getExternalVibrationScale(I)I
-HPLcom/android/server/vibrator/VibrationScaler;->intensityToEffectStrength(I)I
-HPLcom/android/server/vibrator/VibrationScaler;->scale(Landroid/os/VibrationEffect;I)Landroid/os/VibrationEffect;+]Landroid/os/VibrationEffect;Landroid/os/VibrationEffect$Composed;]Lcom/android/server/vibrator/VibrationSettings;Lcom/android/server/vibrator/VibrationSettings;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/vibrator/VibrationScaler;->intensityToEffectStrength(I)I
+HSPLcom/android/server/vibrator/VibrationScaler;->scale(Landroid/os/VibrationEffect;I)Landroid/os/VibrationEffect;+]Landroid/os/VibrationEffect;Landroid/os/VibrationEffect$Composed;]Lcom/android/server/vibrator/VibrationSettings;Lcom/android/server/vibrator/VibrationSettings;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/vibrator/VibrationScaler;->scale(Landroid/os/vibrator/PrebakedSegment;I)Landroid/os/vibrator/PrebakedSegment;
 HSPLcom/android/server/vibrator/VibrationSettings$1;-><init>(Lcom/android/server/vibrator/VibrationSettings;)V
 PLcom/android/server/vibrator/VibrationSettings$1;->getServiceType()I
 PLcom/android/server/vibrator/VibrationSettings$1;->onLowPowerModeChanged(Landroid/os/PowerSaveState;)V
 HSPLcom/android/server/vibrator/VibrationSettings$SettingsBroadcastReceiver;-><init>(Lcom/android/server/vibrator/VibrationSettings;)V
-PLcom/android/server/vibrator/VibrationSettings$SettingsBroadcastReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/vibrator/VibrationSettings$SettingsBroadcastReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/vibrator/VibrationSettings$SettingsContentObserver;-><init>(Lcom/android/server/vibrator/VibrationSettings;Landroid/os/Handler;)V
-PLcom/android/server/vibrator/VibrationSettings$SettingsContentObserver;->onChange(Z)V
+HSPLcom/android/server/vibrator/VibrationSettings$SettingsContentObserver;->onChange(Z)V
 PLcom/android/server/vibrator/VibrationSettings$UidObserver;->-$$Nest$fgetmProcStatesCache(Lcom/android/server/vibrator/VibrationSettings$UidObserver;)Landroid/util/SparseArray;
 HSPLcom/android/server/vibrator/VibrationSettings$UidObserver;-><init>(Lcom/android/server/vibrator/VibrationSettings;)V
-HPLcom/android/server/vibrator/VibrationSettings$UidObserver;->isUidForeground(I)Z
-HSPLcom/android/server/vibrator/VibrationSettings$UidObserver;->onUidGone(IZ)V
+HSPLcom/android/server/vibrator/VibrationSettings$UidObserver;->isUidForeground(I)Z
+HSPLcom/android/server/vibrator/VibrationSettings$UidObserver;->onUidGone(IZ)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HSPLcom/android/server/vibrator/VibrationSettings$UidObserver;->onUidStateChanged(IIJI)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/vibrator/VibrationSettings;->-$$Nest$fgetmBatterySaverMode(Lcom/android/server/vibrator/VibrationSettings;)Z
 PLcom/android/server/vibrator/VibrationSettings;->-$$Nest$fgetmLock(Lcom/android/server/vibrator/VibrationSettings;)Ljava/lang/Object;
 PLcom/android/server/vibrator/VibrationSettings;->-$$Nest$fputmBatterySaverMode(Lcom/android/server/vibrator/VibrationSettings;Z)V
-PLcom/android/server/vibrator/VibrationSettings;->-$$Nest$mnotifyListeners(Lcom/android/server/vibrator/VibrationSettings;)V
-PLcom/android/server/vibrator/VibrationSettings;->-$$Nest$mupdateRingerMode(Lcom/android/server/vibrator/VibrationSettings;)V
-PLcom/android/server/vibrator/VibrationSettings;->-$$Nest$mupdateSettings(Lcom/android/server/vibrator/VibrationSettings;)V
+HSPLcom/android/server/vibrator/VibrationSettings;->-$$Nest$mnotifyListeners(Lcom/android/server/vibrator/VibrationSettings;)V
+HSPLcom/android/server/vibrator/VibrationSettings;->-$$Nest$mupdateRingerMode(Lcom/android/server/vibrator/VibrationSettings;)V
+HSPLcom/android/server/vibrator/VibrationSettings;->-$$Nest$mupdateSettings(Lcom/android/server/vibrator/VibrationSettings;)V
 HSPLcom/android/server/vibrator/VibrationSettings;-><clinit>()V
 HSPLcom/android/server/vibrator/VibrationSettings;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
 HSPLcom/android/server/vibrator/VibrationSettings;-><init>(Landroid/content/Context;Landroid/os/Handler;Landroid/os/vibrator/VibrationConfig;)V
 HSPLcom/android/server/vibrator/VibrationSettings;->addListener(Lcom/android/server/vibrator/VibrationSettings$OnVibratorSettingsChanged;)V
 HSPLcom/android/server/vibrator/VibrationSettings;->createEffectFromResource(I)Landroid/os/VibrationEffect;
 HSPLcom/android/server/vibrator/VibrationSettings;->createEffectFromTimings([J)Landroid/os/VibrationEffect;
-HPLcom/android/server/vibrator/VibrationSettings;->getCurrentIntensity(I)I+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/vibrator/VibrationSettings;Lcom/android/server/vibrator/VibrationSettings;
+HSPLcom/android/server/vibrator/VibrationSettings;->getCurrentIntensity(I)I+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;]Lcom/android/server/vibrator/VibrationSettings;Lcom/android/server/vibrator/VibrationSettings;
 HSPLcom/android/server/vibrator/VibrationSettings;->getDefaultIntensity(I)I+]Landroid/os/vibrator/VibrationConfig;Landroid/os/vibrator/VibrationConfig;
 HPLcom/android/server/vibrator/VibrationSettings;->getFallbackEffect(I)Landroid/os/VibrationEffect;
 HSPLcom/android/server/vibrator/VibrationSettings;->getLongIntArray(Landroid/content/res/Resources;I)[J
@@ -51607,8 +53375,8 @@
 HSPLcom/android/server/vibrator/VibrationSettings;->registerSettingsChangeReceiver(Landroid/content/IntentFilter;)V
 HSPLcom/android/server/vibrator/VibrationSettings;->registerSettingsObserver(Landroid/net/Uri;)V
 PLcom/android/server/vibrator/VibrationSettings;->shouldCancelVibrationOnScreenOff(ILjava/lang/String;IJ)Z
-HPLcom/android/server/vibrator/VibrationSettings;->shouldIgnoreVibration(ILandroid/os/VibrationAttributes;)Lcom/android/server/vibrator/Vibration$Status;
-HPLcom/android/server/vibrator/VibrationSettings;->shouldVibrateForRingerModeLocked(I)Z
+HSPLcom/android/server/vibrator/VibrationSettings;->shouldIgnoreVibration(ILandroid/os/VibrationAttributes;)Lcom/android/server/vibrator/Vibration$Status;+]Lcom/android/server/vibrator/VibrationSettings$UidObserver;Lcom/android/server/vibrator/VibrationSettings$UidObserver;]Lcom/android/server/vibrator/VibrationSettings;Lcom/android/server/vibrator/VibrationSettings;]Landroid/os/VibrationAttributes;Landroid/os/VibrationAttributes;]Ljava/util/Set;Ljava/util/HashSet;
+HSPLcom/android/server/vibrator/VibrationSettings;->shouldVibrateForRingerModeLocked(I)Z
 HSPLcom/android/server/vibrator/VibrationSettings;->shouldVibrateInputDevices()Z
 HSPLcom/android/server/vibrator/VibrationSettings;->toIntensity(II)I
 HSPLcom/android/server/vibrator/VibrationSettings;->toPositiveIntensity(II)I
@@ -51616,37 +53384,37 @@
 HSPLcom/android/server/vibrator/VibrationSettings;->update()V
 HSPLcom/android/server/vibrator/VibrationSettings;->updateRingerMode()V
 HSPLcom/android/server/vibrator/VibrationSettings;->updateSettings()V
-PLcom/android/server/vibrator/VibrationStepConductor;-><clinit>()V
-HPLcom/android/server/vibrator/VibrationStepConductor;-><init>(Lcom/android/server/vibrator/Vibration;Lcom/android/server/vibrator/VibrationSettings;Lcom/android/server/vibrator/DeviceVibrationEffectAdapter;Landroid/util/SparseArray;Lcom/android/server/vibrator/VibrationThread$VibratorManagerHooks;)V+]Landroid/os/CombinedVibration;Landroid/os/CombinedVibration$Mono;]Lcom/android/server/vibrator/Vibration;Lcom/android/server/vibrator/Vibration;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HSPLcom/android/server/vibrator/VibrationStepConductor;-><clinit>()V
+HSPLcom/android/server/vibrator/VibrationStepConductor;-><init>(Lcom/android/server/vibrator/Vibration;Lcom/android/server/vibrator/VibrationSettings;Lcom/android/server/vibrator/DeviceVibrationEffectAdapter;Landroid/util/SparseArray;Lcom/android/server/vibrator/VibrationThread$VibratorManagerHooks;)V+]Landroid/os/CombinedVibration;Landroid/os/CombinedVibration$Mono;]Lcom/android/server/vibrator/Vibration;Lcom/android/server/vibrator/Vibration;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/vibrator/VibrationStepConductor;->binderDied()V
-HPLcom/android/server/vibrator/VibrationStepConductor;->calculateVibrationStatus()Lcom/android/server/vibrator/Vibration$Status;
-HPLcom/android/server/vibrator/VibrationStepConductor;->expectIsVibrationThread(Z)V
-HPLcom/android/server/vibrator/VibrationStepConductor;->getVibration()Lcom/android/server/vibrator/Vibration;
-HPLcom/android/server/vibrator/VibrationStepConductor;->getVibrators()Landroid/util/SparseArray;
-HPLcom/android/server/vibrator/VibrationStepConductor;->hasPendingNotifySignalLocked()Z+]Landroid/util/IntArray;Landroid/util/IntArray;
-HPLcom/android/server/vibrator/VibrationStepConductor;->isFinished()Z+]Ljava/util/Queue;Ljava/util/LinkedList;]Ljava/util/PriorityQueue;Ljava/util/PriorityQueue;
-HPLcom/android/server/vibrator/VibrationStepConductor;->nextVibrateStep(JLcom/android/server/vibrator/VibratorController;Landroid/os/VibrationEffect$Composed;IJ)Lcom/android/server/vibrator/AbstractVibratorStep;+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/VibrationEffect$Composed;Landroid/os/VibrationEffect$Composed;
+HSPLcom/android/server/vibrator/VibrationStepConductor;->calculateVibrationStatus()Lcom/android/server/vibrator/Vibration$Status;
+HSPLcom/android/server/vibrator/VibrationStepConductor;->expectIsVibrationThread(Z)V
+HSPLcom/android/server/vibrator/VibrationStepConductor;->getVibration()Lcom/android/server/vibrator/Vibration;
+HSPLcom/android/server/vibrator/VibrationStepConductor;->getVibrators()Landroid/util/SparseArray;
+HSPLcom/android/server/vibrator/VibrationStepConductor;->hasPendingNotifySignalLocked()Z+]Landroid/util/IntArray;Landroid/util/IntArray;
+HSPLcom/android/server/vibrator/VibrationStepConductor;->isFinished()Z+]Ljava/util/Queue;Ljava/util/LinkedList;]Ljava/util/PriorityQueue;Ljava/util/PriorityQueue;
+HSPLcom/android/server/vibrator/VibrationStepConductor;->nextVibrateStep(JLcom/android/server/vibrator/VibratorController;Landroid/os/VibrationEffect$Composed;IJ)Lcom/android/server/vibrator/AbstractVibratorStep;+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/VibrationEffect$Composed;Landroid/os/VibrationEffect$Composed;
 HPLcom/android/server/vibrator/VibrationStepConductor;->notifyCancelled(Lcom/android/server/vibrator/Vibration$Status;Z)V
-HPLcom/android/server/vibrator/VibrationStepConductor;->notifyVibratorComplete(I)V
-HPLcom/android/server/vibrator/VibrationStepConductor;->pollNext()Lcom/android/server/vibrator/Step;+]Ljava/util/Queue;Ljava/util/LinkedList;]Ljava/util/PriorityQueue;Ljava/util/PriorityQueue;
-HPLcom/android/server/vibrator/VibrationStepConductor;->prepareToStart()V
-HPLcom/android/server/vibrator/VibrationStepConductor;->processAllNotifySignals()V+]Landroid/util/IntArray;Landroid/util/IntArray;]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;
+HSPLcom/android/server/vibrator/VibrationStepConductor;->notifyVibratorComplete(I)V+]Landroid/util/IntArray;Landroid/util/IntArray;]Ljava/lang/Object;Ljava/lang/Object;
+HSPLcom/android/server/vibrator/VibrationStepConductor;->pollNext()Lcom/android/server/vibrator/Step;+]Ljava/util/Queue;Ljava/util/LinkedList;]Ljava/util/PriorityQueue;Ljava/util/PriorityQueue;
+HSPLcom/android/server/vibrator/VibrationStepConductor;->prepareToStart()V+]Landroid/os/CombinedVibration$Sequential;Landroid/os/CombinedVibration$Sequential;]Lcom/android/server/vibrator/Vibration;Lcom/android/server/vibrator/Vibration;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/PriorityQueue;Ljava/util/PriorityQueue;
+HSPLcom/android/server/vibrator/VibrationStepConductor;->processAllNotifySignals()V+]Landroid/util/IntArray;Landroid/util/IntArray;]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;
 HPLcom/android/server/vibrator/VibrationStepConductor;->processCancel(Lcom/android/server/vibrator/Vibration$Status;)V
 PLcom/android/server/vibrator/VibrationStepConductor;->processCancelImmediately(Lcom/android/server/vibrator/Vibration$Status;)V
-HPLcom/android/server/vibrator/VibrationStepConductor;->processVibratorsComplete([I)V+]Lcom/android/server/vibrator/Step;Lcom/android/server/vibrator/SetAmplitudeVibratorStep;,Lcom/android/server/vibrator/TurnOffVibratorStep;,Lcom/android/server/vibrator/FinishSequentialEffectStep;,Lcom/android/server/vibrator/CompleteEffectVibratorStep;]Ljava/util/Queue;Ljava/util/LinkedList;]Ljava/util/Iterator;Ljava/util/PriorityQueue$Itr;]Ljava/util/PriorityQueue;Ljava/util/PriorityQueue;
-HPLcom/android/server/vibrator/VibrationStepConductor;->runNextStep()V+]Lcom/android/server/vibrator/Step;megamorphic_types]Ljava/util/List;Ljava/util/Arrays$ArrayList;,Ljava/util/ArrayList;]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;]Ljava/util/PriorityQueue;Ljava/util/PriorityQueue;
-HPLcom/android/server/vibrator/VibrationStepConductor;->toSequential(Landroid/os/CombinedVibration;)Landroid/os/CombinedVibration$Sequential;
-HPLcom/android/server/vibrator/VibrationStepConductor;->waitUntilNextStepIsDue()Z+]Ljava/lang/Object;Ljava/lang/Object;]Lcom/android/server/vibrator/Step;megamorphic_types]Ljava/util/Queue;Ljava/util/LinkedList;]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;]Ljava/util/PriorityQueue;Ljava/util/PriorityQueue;
+HSPLcom/android/server/vibrator/VibrationStepConductor;->processVibratorsComplete([I)V+]Lcom/android/server/vibrator/Step;Lcom/android/server/vibrator/SetAmplitudeVibratorStep;,Lcom/android/server/vibrator/TurnOffVibratorStep;,Lcom/android/server/vibrator/FinishSequentialEffectStep;,Lcom/android/server/vibrator/CompleteEffectVibratorStep;]Ljava/util/Queue;Ljava/util/LinkedList;]Ljava/util/Iterator;Ljava/util/PriorityQueue$Itr;]Ljava/util/PriorityQueue;Ljava/util/PriorityQueue;
+HSPLcom/android/server/vibrator/VibrationStepConductor;->runNextStep()V+]Lcom/android/server/vibrator/Step;megamorphic_types]Ljava/util/List;Ljava/util/Arrays$ArrayList;,Ljava/util/ArrayList;]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;]Ljava/util/PriorityQueue;Ljava/util/PriorityQueue;
+HSPLcom/android/server/vibrator/VibrationStepConductor;->toSequential(Landroid/os/CombinedVibration;)Landroid/os/CombinedVibration$Sequential;
+HSPLcom/android/server/vibrator/VibrationStepConductor;->waitUntilNextStepIsDue()Z+]Ljava/lang/Object;Ljava/lang/Object;]Lcom/android/server/vibrator/Step;megamorphic_types]Ljava/util/Queue;Ljava/util/LinkedList;]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;]Ljava/util/PriorityQueue;Ljava/util/PriorityQueue;
 HSPLcom/android/server/vibrator/VibrationThread;-><init>(Landroid/os/PowerManager$WakeLock;Lcom/android/server/vibrator/VibrationThread$VibratorManagerHooks;)V
 HPLcom/android/server/vibrator/VibrationThread;->clientVibrationCompleteIfNotAlready(Lcom/android/server/vibrator/Vibration$Status;)V+]Lcom/android/server/vibrator/VibrationThread$VibratorManagerHooks;Lcom/android/server/vibrator/VibratorManagerService$VibrationThreadCallbacks;]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;
-HPLcom/android/server/vibrator/VibrationThread;->playVibration()V+]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;]Lcom/android/server/vibrator/VibrationThread;Lcom/android/server/vibrator/VibrationThread;
+HSPLcom/android/server/vibrator/VibrationThread;->playVibration()V+]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;]Lcom/android/server/vibrator/VibrationThread;Lcom/android/server/vibrator/VibrationThread;
 HSPLcom/android/server/vibrator/VibrationThread;->run()V
-HPLcom/android/server/vibrator/VibrationThread;->runCurrentVibrationWithWakeLock()V
-HPLcom/android/server/vibrator/VibrationThread;->runCurrentVibrationWithWakeLockAndDeathLink()V
-HPLcom/android/server/vibrator/VibrationThread;->runVibrationOnVibrationThread(Lcom/android/server/vibrator/VibrationStepConductor;)Z
+HSPLcom/android/server/vibrator/VibrationThread;->runCurrentVibrationWithWakeLock()V+]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;]Lcom/android/server/vibrator/VibrationThread;Lcom/android/server/vibrator/VibrationThread;]Landroid/os/PowerManager$WakeLock;Landroid/os/PowerManager$WakeLock;
+HSPLcom/android/server/vibrator/VibrationThread;->runCurrentVibrationWithWakeLockAndDeathLink()V+]Landroid/os/IBinder;Landroid/os/BinderProxy;,Landroid/os/Binder;]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;]Lcom/android/server/vibrator/VibrationThread;Lcom/android/server/vibrator/VibrationThread;
+HSPLcom/android/server/vibrator/VibrationThread;->runVibrationOnVibrationThread(Lcom/android/server/vibrator/VibrationStepConductor;)Z+]Ljava/lang/Object;Ljava/lang/Object;
 PLcom/android/server/vibrator/VibrationThread;->waitForThreadIdle(J)Z
 HSPLcom/android/server/vibrator/VibrationThread;->waitForVibrationRequest()Lcom/android/server/vibrator/VibrationStepConductor;+]Ljava/lang/Object;Ljava/lang/Object;
-HPLcom/android/server/vibrator/VibratorController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/vibrator/VibratorController;Z)V
+HSPLcom/android/server/vibrator/VibratorController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/vibrator/VibratorController;Z)V
 HSPLcom/android/server/vibrator/VibratorController$NativeWrapper;-><init>()V
 PLcom/android/server/vibrator/VibratorController$NativeWrapper;->alwaysOnDisable(J)V
 PLcom/android/server/vibrator/VibratorController$NativeWrapper;->alwaysOnEnable(JJJ)V
@@ -51654,32 +53422,33 @@
 HSPLcom/android/server/vibrator/VibratorController$NativeWrapper;->getInfo(Landroid/os/VibratorInfo$Builder;)Z
 HSPLcom/android/server/vibrator/VibratorController$NativeWrapper;->init(ILcom/android/server/vibrator/VibratorController$OnVibrationCompleteListener;)V
 HSPLcom/android/server/vibrator/VibratorController$NativeWrapper;->off()V
-PLcom/android/server/vibrator/VibratorController$NativeWrapper;->on(JJ)J
+HSPLcom/android/server/vibrator/VibratorController$NativeWrapper;->on(JJ)J
 HPLcom/android/server/vibrator/VibratorController$NativeWrapper;->perform(JJJ)J
-HPLcom/android/server/vibrator/VibratorController$NativeWrapper;->setAmplitude(F)V
+HSPLcom/android/server/vibrator/VibratorController$NativeWrapper;->setAmplitude(F)V
 HSPLcom/android/server/vibrator/VibratorController$NativeWrapper;->setExternalControl(Z)V
 HSPLcom/android/server/vibrator/VibratorController;-><init>(ILcom/android/server/vibrator/VibratorController$OnVibrationCompleteListener;)V
 HSPLcom/android/server/vibrator/VibratorController;-><init>(ILcom/android/server/vibrator/VibratorController$OnVibrationCompleteListener;Lcom/android/server/vibrator/VibratorController$NativeWrapper;)V
 HPLcom/android/server/vibrator/VibratorController;->getCurrentAmplitude()F
 HSPLcom/android/server/vibrator/VibratorController;->getVibratorInfo()Landroid/os/VibratorInfo;
 PLcom/android/server/vibrator/VibratorController;->hasCapability(J)Z
+PLcom/android/server/vibrator/VibratorController;->isVibratorInfoLoadSuccessful()Z
 HSPLcom/android/server/vibrator/VibratorController;->notifyListenerOnVibrating(Z)V+]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;
-HSPLcom/android/server/vibrator/VibratorController;->off()V
-HPLcom/android/server/vibrator/VibratorController;->on(JJ)J
-HPLcom/android/server/vibrator/VibratorController;->on(Landroid/os/vibrator/PrebakedSegment;J)J
+HSPLcom/android/server/vibrator/VibratorController;->off()V+]Lcom/android/server/vibrator/VibratorController;Lcom/android/server/vibrator/VibratorController;]Lcom/android/server/vibrator/VibratorController$NativeWrapper;Lcom/android/server/vibrator/VibratorController$NativeWrapper;
+HSPLcom/android/server/vibrator/VibratorController;->on(JJ)J
+HPLcom/android/server/vibrator/VibratorController;->on(Landroid/os/vibrator/PrebakedSegment;J)J+]Landroid/os/vibrator/PrebakedSegment;Landroid/os/vibrator/PrebakedSegment;]Lcom/android/server/vibrator/VibratorController;Lcom/android/server/vibrator/VibratorController;]Lcom/android/server/vibrator/VibratorController$NativeWrapper;Lcom/android/server/vibrator/VibratorController$NativeWrapper;
 HPLcom/android/server/vibrator/VibratorController;->on([Landroid/os/vibrator/PrimitiveSegment;J)J
 HSPLcom/android/server/vibrator/VibratorController;->reloadVibratorInfoIfNeeded()V
 HSPLcom/android/server/vibrator/VibratorController;->reset()V
-HPLcom/android/server/vibrator/VibratorController;->setAmplitude(F)V
+HSPLcom/android/server/vibrator/VibratorController;->setAmplitude(F)V+]Landroid/os/VibratorInfo;Landroid/os/VibratorInfo;]Lcom/android/server/vibrator/VibratorController$NativeWrapper;Lcom/android/server/vibrator/VibratorController$NativeWrapper;
 HSPLcom/android/server/vibrator/VibratorController;->setExternalControl(Z)V
 PLcom/android/server/vibrator/VibratorController;->toString()Ljava/lang/String;
 PLcom/android/server/vibrator/VibratorController;->updateAlwaysOn(ILandroid/os/vibrator/PrebakedSegment;)V
 HSPLcom/android/server/vibrator/VibratorManagerService$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/vibrator/VibratorManagerService;)V
-PLcom/android/server/vibrator/VibratorManagerService$$ExternalSyntheticLambda0;->onChange()V
+HSPLcom/android/server/vibrator/VibratorManagerService$$ExternalSyntheticLambda0;->onChange()V
 PLcom/android/server/vibrator/VibratorManagerService$$ExternalSyntheticLambda2;-><init>(Landroid/os/VibrationEffect;)V
 PLcom/android/server/vibrator/VibratorManagerService$$ExternalSyntheticLambda2;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-HPLcom/android/server/vibrator/VibratorManagerService$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/vibrator/VibratorManagerService;Lcom/android/server/vibrator/Vibration;)V
-HPLcom/android/server/vibrator/VibratorManagerService$$ExternalSyntheticLambda3;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/vibrator/VibratorManagerService$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/vibrator/VibratorManagerService;Lcom/android/server/vibrator/Vibration;)V
+HSPLcom/android/server/vibrator/VibratorManagerService$$ExternalSyntheticLambda3;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/vibrator/VibratorManagerService$1;-><init>(Lcom/android/server/vibrator/VibratorManagerService;)V
 HPLcom/android/server/vibrator/VibratorManagerService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/vibrator/VibratorManagerService$2;-><clinit>()V
@@ -51687,7 +53456,7 @@
 PLcom/android/server/vibrator/VibratorManagerService$ExternalVibrationHolder;-><init>(Lcom/android/server/vibrator/VibratorManagerService;Landroid/os/ExternalVibration;)V
 PLcom/android/server/vibrator/VibratorManagerService$ExternalVibrationHolder;-><init>(Lcom/android/server/vibrator/VibratorManagerService;Landroid/os/ExternalVibration;Lcom/android/server/vibrator/VibratorManagerService$ExternalVibrationHolder-IA;)V
 PLcom/android/server/vibrator/VibratorManagerService$ExternalVibrationHolder;->end(Lcom/android/server/vibrator/Vibration$Status;)V
-PLcom/android/server/vibrator/VibratorManagerService$ExternalVibrationHolder;->getDebugInfo()Lcom/android/server/vibrator/Vibration$DebugInfo;
+HPLcom/android/server/vibrator/VibratorManagerService$ExternalVibrationHolder;->getDebugInfo()Lcom/android/server/vibrator/Vibration$DebugInfo;
 HSPLcom/android/server/vibrator/VibratorManagerService$ExternalVibratorService;-><init>(Lcom/android/server/vibrator/VibratorManagerService;)V
 PLcom/android/server/vibrator/VibratorManagerService$ExternalVibratorService;->hasExternalControlCapability()Z
 HPLcom/android/server/vibrator/VibratorManagerService$ExternalVibratorService;->onExternalVibrationStart(Landroid/os/ExternalVibration;)I
@@ -51707,18 +53476,18 @@
 HSPLcom/android/server/vibrator/VibratorManagerService$NativeWrapper;->getVibratorIds()[I
 HSPLcom/android/server/vibrator/VibratorManagerService$NativeWrapper;->init(Lcom/android/server/vibrator/VibratorManagerService$OnSyncedVibrationCompleteListener;)V
 HSPLcom/android/server/vibrator/VibratorManagerService$VibrationCompleteListener;-><init>(Lcom/android/server/vibrator/VibratorManagerService;)V
-HPLcom/android/server/vibrator/VibratorManagerService$VibrationCompleteListener;->onComplete(IJ)V
+HSPLcom/android/server/vibrator/VibratorManagerService$VibrationCompleteListener;->onComplete(IJ)V+]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
 HSPLcom/android/server/vibrator/VibratorManagerService$VibrationThreadCallbacks;-><init>(Lcom/android/server/vibrator/VibratorManagerService;)V
 HSPLcom/android/server/vibrator/VibratorManagerService$VibrationThreadCallbacks;-><init>(Lcom/android/server/vibrator/VibratorManagerService;Lcom/android/server/vibrator/VibratorManagerService$VibrationThreadCallbacks-IA;)V
-HPLcom/android/server/vibrator/VibratorManagerService$VibrationThreadCallbacks;->noteVibratorOff(I)V
-HPLcom/android/server/vibrator/VibratorManagerService$VibrationThreadCallbacks;->noteVibratorOn(IJ)V
-HPLcom/android/server/vibrator/VibratorManagerService$VibrationThreadCallbacks;->onVibrationCompleted(JLcom/android/server/vibrator/Vibration$Status;)V
-HPLcom/android/server/vibrator/VibratorManagerService$VibrationThreadCallbacks;->onVibrationThreadReleased(J)V
+HPLcom/android/server/vibrator/VibratorManagerService$VibrationThreadCallbacks;->noteVibratorOff(I)V+]Lcom/android/internal/app/IBatteryStats;Lcom/android/server/am/BatteryStatsService;
+HSPLcom/android/server/vibrator/VibratorManagerService$VibrationThreadCallbacks;->noteVibratorOn(IJ)V+]Lcom/android/internal/app/IBatteryStats;Lcom/android/server/am/BatteryStatsService;
+HPLcom/android/server/vibrator/VibratorManagerService$VibrationThreadCallbacks;->onVibrationCompleted(JLcom/android/server/vibrator/Vibration$Status;)V+]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;
+HPLcom/android/server/vibrator/VibratorManagerService$VibrationThreadCallbacks;->onVibrationThreadReleased(J)V+]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;
 HSPLcom/android/server/vibrator/VibratorManagerService$VibratorManagerRecords;-><init>(I)V
 PLcom/android/server/vibrator/VibratorManagerService$VibratorManagerRecords;->dumpText(Ljava/io/PrintWriter;)V
-HPLcom/android/server/vibrator/VibratorManagerService$VibratorManagerRecords;->record(Lcom/android/server/vibrator/Vibration;)V
+HPLcom/android/server/vibrator/VibratorManagerService$VibratorManagerRecords;->record(Lcom/android/server/vibrator/Vibration;)V+]Lcom/android/server/vibrator/Vibration;Lcom/android/server/vibrator/Vibration;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/os/VibrationAttributes;Landroid/os/VibrationAttributes;]Lcom/android/server/vibrator/VibratorManagerService$VibratorManagerRecords;Lcom/android/server/vibrator/VibratorManagerService$VibratorManagerRecords;
 PLcom/android/server/vibrator/VibratorManagerService$VibratorManagerRecords;->record(Lcom/android/server/vibrator/VibratorManagerService$ExternalVibrationHolder;)V
-HPLcom/android/server/vibrator/VibratorManagerService$VibratorManagerRecords;->record(Ljava/util/LinkedList;Lcom/android/server/vibrator/Vibration$DebugInfo;)V
+HPLcom/android/server/vibrator/VibratorManagerService$VibratorManagerRecords;->record(Ljava/util/LinkedList;Lcom/android/server/vibrator/Vibration$DebugInfo;)V+]Ljava/util/LinkedList;Ljava/util/LinkedList;
 PLcom/android/server/vibrator/VibratorManagerService$VibratorManagerShellCommand$CommonOptions;-><init>(Lcom/android/server/vibrator/VibratorManagerService$VibratorManagerShellCommand;)V
 PLcom/android/server/vibrator/VibratorManagerService$VibratorManagerShellCommand;-><init>(Lcom/android/server/vibrator/VibratorManagerService;Landroid/os/IBinder;)V
 PLcom/android/server/vibrator/VibratorManagerService$VibratorManagerShellCommand;-><init>(Lcom/android/server/vibrator/VibratorManagerService;Landroid/os/IBinder;Lcom/android/server/vibrator/VibratorManagerService$VibratorManagerShellCommand-IA;)V
@@ -51729,8 +53498,8 @@
 PLcom/android/server/vibrator/VibratorManagerService$VibratorManagerShellCommand;->runMono()I
 PLcom/android/server/vibrator/VibratorManagerService$VibratorManagerShellCommand;->runVibrate(Lcom/android/server/vibrator/VibratorManagerService$VibratorManagerShellCommand$CommonOptions;Landroid/os/CombinedVibration;)V
 PLcom/android/server/vibrator/VibratorManagerService;->$r8$lambda$dydjXhaDtAEVdkZrJW1gKsWY_DE(Landroid/os/VibrationEffect;Lcom/android/server/vibrator/VibratorController;)Landroid/os/VibrationEffect;
-HPLcom/android/server/vibrator/VibratorManagerService;->$r8$lambda$wJdO-Sibb0a5uXlg9zKLWGjMyFU(Lcom/android/server/vibrator/VibratorManagerService;Lcom/android/server/vibrator/Vibration;Landroid/os/VibrationEffect;)Landroid/os/VibrationEffect;
-HPLcom/android/server/vibrator/VibratorManagerService;->-$$Nest$fgetmBatteryStatsService(Lcom/android/server/vibrator/VibratorManagerService;)Lcom/android/internal/app/IBatteryStats;
+HSPLcom/android/server/vibrator/VibratorManagerService;->$r8$lambda$wJdO-Sibb0a5uXlg9zKLWGjMyFU(Lcom/android/server/vibrator/VibratorManagerService;Lcom/android/server/vibrator/Vibration;Landroid/os/VibrationEffect;)Landroid/os/VibrationEffect;
+HSPLcom/android/server/vibrator/VibratorManagerService;->-$$Nest$fgetmBatteryStatsService(Lcom/android/server/vibrator/VibratorManagerService;)Lcom/android/internal/app/IBatteryStats;
 PLcom/android/server/vibrator/VibratorManagerService;->-$$Nest$fgetmCurrentExternalVibration(Lcom/android/server/vibrator/VibratorManagerService;)Lcom/android/server/vibrator/VibratorManagerService$ExternalVibrationHolder;
 HPLcom/android/server/vibrator/VibratorManagerService;->-$$Nest$fgetmCurrentVibration(Lcom/android/server/vibrator/VibratorManagerService;)Lcom/android/server/vibrator/VibrationStepConductor;
 HPLcom/android/server/vibrator/VibratorManagerService;->-$$Nest$fgetmLock(Lcom/android/server/vibrator/VibratorManagerService;)Ljava/lang/Object;
@@ -51745,7 +53514,7 @@
 PLcom/android/server/vibrator/VibratorManagerService;->-$$Nest$mendExternalVibrateLocked(Lcom/android/server/vibrator/VibratorManagerService;Lcom/android/server/vibrator/Vibration$Status;Z)V
 PLcom/android/server/vibrator/VibratorManagerService;->-$$Nest$mendVibrationLocked(Lcom/android/server/vibrator/VibratorManagerService;Lcom/android/server/vibrator/VibratorManagerService$ExternalVibrationHolder;Lcom/android/server/vibrator/Vibration$Status;)V
 PLcom/android/server/vibrator/VibratorManagerService;->-$$Nest$mfixupVibrationAttributes(Lcom/android/server/vibrator/VibratorManagerService;Landroid/os/VibrationAttributes;Landroid/os/CombinedVibration;)Landroid/os/VibrationAttributes;
-HPLcom/android/server/vibrator/VibratorManagerService;->-$$Nest$monVibrationComplete(Lcom/android/server/vibrator/VibratorManagerService;IJ)V
+HSPLcom/android/server/vibrator/VibratorManagerService;->-$$Nest$monVibrationComplete(Lcom/android/server/vibrator/VibratorManagerService;IJ)V
 HPLcom/android/server/vibrator/VibratorManagerService;->-$$Nest$mreportFinishedVibrationLocked(Lcom/android/server/vibrator/VibratorManagerService;Lcom/android/server/vibrator/Vibration$Status;)V
 PLcom/android/server/vibrator/VibratorManagerService;->-$$Nest$msetExternalControl(Lcom/android/server/vibrator/VibratorManagerService;Z)V
 PLcom/android/server/vibrator/VibratorManagerService;->-$$Nest$mshouldCancelOnScreenOffLocked(Lcom/android/server/vibrator/VibratorManagerService;Lcom/android/server/vibrator/VibrationStepConductor;)Z
@@ -51755,47 +53524,47 @@
 HSPLcom/android/server/vibrator/VibratorManagerService;-><clinit>()V
 HSPLcom/android/server/vibrator/VibratorManagerService;-><init>(Landroid/content/Context;Lcom/android/server/vibrator/VibratorManagerService$Injector;)V
 HPLcom/android/server/vibrator/VibratorManagerService;->cancelVibrate(ILandroid/os/IBinder;)V+]Landroid/os/ExternalVibration;Landroid/os/ExternalVibration;]Landroid/content/Context;Landroid/app/ContextImpl;]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;]Lcom/android/server/vibrator/VibratorManagerService;Lcom/android/server/vibrator/VibratorManagerService;
-HPLcom/android/server/vibrator/VibratorManagerService;->checkAppOpModeLocked(ILjava/lang/String;Landroid/os/VibrationAttributes;)I
+HSPLcom/android/server/vibrator/VibratorManagerService;->checkAppOpModeLocked(ILjava/lang/String;Landroid/os/VibrationAttributes;)I+]Landroid/os/VibrationAttributes;Landroid/os/VibrationAttributes;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;]Lcom/android/server/vibrator/VibratorManagerService;Lcom/android/server/vibrator/VibratorManagerService;
 HPLcom/android/server/vibrator/VibratorManagerService;->clearNextVibrationLocked(Lcom/android/server/vibrator/Vibration$Status;)V
 PLcom/android/server/vibrator/VibratorManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/vibrator/VibratorManagerService;->dumpText(Ljava/io/PrintWriter;)V
 PLcom/android/server/vibrator/VibratorManagerService;->endExternalVibrateLocked(Lcom/android/server/vibrator/Vibration$Status;Z)V
 HPLcom/android/server/vibrator/VibratorManagerService;->endVibrationLocked(Lcom/android/server/vibrator/Vibration;Lcom/android/server/vibrator/Vibration$Status;)V
 PLcom/android/server/vibrator/VibratorManagerService;->endVibrationLocked(Lcom/android/server/vibrator/VibratorManagerService$ExternalVibrationHolder;Lcom/android/server/vibrator/Vibration$Status;)V
-HPLcom/android/server/vibrator/VibratorManagerService;->enforceUpdateAppOpsStatsPermission(I)V
+HSPLcom/android/server/vibrator/VibratorManagerService;->enforceUpdateAppOpsStatsPermission(I)V
 PLcom/android/server/vibrator/VibratorManagerService;->extractPrebakedSegment(Landroid/os/VibrationEffect;)Landroid/os/vibrator/PrebakedSegment;
-HPLcom/android/server/vibrator/VibratorManagerService;->fillVibrationFallbacks(Lcom/android/server/vibrator/Vibration;Landroid/os/CombinedVibration;)V
-HPLcom/android/server/vibrator/VibratorManagerService;->fillVibrationFallbacks(Lcom/android/server/vibrator/Vibration;Landroid/os/VibrationEffect;)V+]Landroid/os/vibrator/PrebakedSegment;Landroid/os/vibrator/PrebakedSegment;]Lcom/android/server/vibrator/Vibration;Lcom/android/server/vibrator/Vibration;]Lcom/android/server/vibrator/VibrationSettings;Lcom/android/server/vibrator/VibrationSettings;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/VibrationEffect$Composed;Landroid/os/VibrationEffect$Composed;
+HSPLcom/android/server/vibrator/VibratorManagerService;->fillVibrationFallbacks(Lcom/android/server/vibrator/Vibration;Landroid/os/CombinedVibration;)V+]Landroid/os/CombinedVibration$Mono;Landroid/os/CombinedVibration$Mono;]Lcom/android/server/vibrator/VibratorManagerService;Lcom/android/server/vibrator/VibratorManagerService;
+HSPLcom/android/server/vibrator/VibratorManagerService;->fillVibrationFallbacks(Lcom/android/server/vibrator/Vibration;Landroid/os/VibrationEffect;)V+]Landroid/os/vibrator/PrebakedSegment;Landroid/os/vibrator/PrebakedSegment;]Lcom/android/server/vibrator/Vibration;Lcom/android/server/vibrator/Vibration;]Lcom/android/server/vibrator/VibrationSettings;Lcom/android/server/vibrator/VibrationSettings;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/os/VibrationEffect$Composed;Landroid/os/VibrationEffect$Composed;
 HPLcom/android/server/vibrator/VibratorManagerService;->finishAppOpModeLocked(ILjava/lang/String;)V
 PLcom/android/server/vibrator/VibratorManagerService;->fixupAlwaysOnEffectsLocked(Landroid/os/CombinedVibration;)Landroid/util/SparseArray;
-HPLcom/android/server/vibrator/VibratorManagerService;->fixupAppOpModeLocked(ILandroid/os/VibrationAttributes;)I
-HPLcom/android/server/vibrator/VibratorManagerService;->fixupVibrationAttributes(Landroid/os/VibrationAttributes;Landroid/os/CombinedVibration;)Landroid/os/VibrationAttributes;
+HSPLcom/android/server/vibrator/VibratorManagerService;->fixupAppOpModeLocked(ILandroid/os/VibrationAttributes;)I+]Landroid/os/VibrationAttributes;Landroid/os/VibrationAttributes;
+HSPLcom/android/server/vibrator/VibratorManagerService;->fixupVibrationAttributes(Landroid/os/VibrationAttributes;Landroid/os/CombinedVibration;)Landroid/os/VibrationAttributes;+]Landroid/os/CombinedVibration;Landroid/os/CombinedVibration$Mono;]Landroid/os/VibrationAttributes;Landroid/os/VibrationAttributes;]Landroid/os/VibrationAttributes$Builder;Landroid/os/VibrationAttributes$Builder;
 HSPLcom/android/server/vibrator/VibratorManagerService;->getVibratorIds()[I
 HSPLcom/android/server/vibrator/VibratorManagerService;->getVibratorInfo(I)Landroid/os/VibratorInfo;
-PLcom/android/server/vibrator/VibratorManagerService;->hasPermission(Ljava/lang/String;)Z
-HPLcom/android/server/vibrator/VibratorManagerService;->isEffectValid(Landroid/os/CombinedVibration;)Z
+HSPLcom/android/server/vibrator/VibratorManagerService;->hasPermission(Ljava/lang/String;)Z
+HSPLcom/android/server/vibrator/VibratorManagerService;->isEffectValid(Landroid/os/CombinedVibration;)Z+]Landroid/os/CombinedVibration;Landroid/os/CombinedVibration$Mono;
 PLcom/android/server/vibrator/VibratorManagerService;->lambda$fixupAlwaysOnEffectsLocked$2(Landroid/os/VibrationEffect;Lcom/android/server/vibrator/VibratorController;)Landroid/os/VibrationEffect;
-HPLcom/android/server/vibrator/VibratorManagerService;->lambda$startVibrationLocked$1(Lcom/android/server/vibrator/Vibration;Landroid/os/VibrationEffect;)Landroid/os/VibrationEffect;+]Lcom/android/server/vibrator/VibrationScaler;Lcom/android/server/vibrator/VibrationScaler;]Landroid/os/VibrationAttributes;Landroid/os/VibrationAttributes;
-HPLcom/android/server/vibrator/VibratorManagerService;->logVibrationStatus(ILandroid/os/VibrationAttributes;Lcom/android/server/vibrator/Vibration$Status;)V
+HSPLcom/android/server/vibrator/VibratorManagerService;->lambda$startVibrationLocked$1(Lcom/android/server/vibrator/Vibration;Landroid/os/VibrationEffect;)Landroid/os/VibrationEffect;+]Lcom/android/server/vibrator/VibrationScaler;Lcom/android/server/vibrator/VibrationScaler;]Landroid/os/VibrationAttributes;Landroid/os/VibrationAttributes;
+HPLcom/android/server/vibrator/VibratorManagerService;->logVibrationStatus(ILandroid/os/VibrationAttributes;Lcom/android/server/vibrator/Vibration$Status;)V+]Ljava/lang/Enum;Lcom/android/server/vibrator/Vibration$Status;
 PLcom/android/server/vibrator/VibratorManagerService;->onShellCommand(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;Landroid/os/ShellCallback;Landroid/os/ResultReceiver;)V
-HPLcom/android/server/vibrator/VibratorManagerService;->onVibrationComplete(IJ)V
-HPLcom/android/server/vibrator/VibratorManagerService;->reportFinishedVibrationLocked(Lcom/android/server/vibrator/Vibration$Status;)V
+HSPLcom/android/server/vibrator/VibratorManagerService;->onVibrationComplete(IJ)V+]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;
+HPLcom/android/server/vibrator/VibratorManagerService;->reportFinishedVibrationLocked(Lcom/android/server/vibrator/Vibration$Status;)V+]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;]Lcom/android/server/vibrator/VibratorManagerService;Lcom/android/server/vibrator/VibratorManagerService;
 PLcom/android/server/vibrator/VibratorManagerService;->setAlwaysOnEffect(ILjava/lang/String;ILandroid/os/CombinedVibration;Landroid/os/VibrationAttributes;)Z
 PLcom/android/server/vibrator/VibratorManagerService;->setExternalControl(Z)V
 PLcom/android/server/vibrator/VibratorManagerService;->shouldCancelOnScreenOffLocked(Lcom/android/server/vibrator/VibrationStepConductor;)Z
 PLcom/android/server/vibrator/VibratorManagerService;->shouldCancelVibration(Landroid/os/VibrationAttributes;I)Z
 PLcom/android/server/vibrator/VibratorManagerService;->shouldCancelVibration(Lcom/android/server/vibrator/Vibration;ILandroid/os/IBinder;)Z
-HPLcom/android/server/vibrator/VibratorManagerService;->shouldIgnoreVibrationForOngoingLocked(Lcom/android/server/vibrator/Vibration;)Lcom/android/server/vibrator/Vibration$Status;
-HPLcom/android/server/vibrator/VibratorManagerService;->shouldIgnoreVibrationLocked(ILjava/lang/String;Landroid/os/VibrationAttributes;)Lcom/android/server/vibrator/Vibration$Status;
-HPLcom/android/server/vibrator/VibratorManagerService;->startAppOpModeLocked(ILjava/lang/String;Landroid/os/VibrationAttributes;)I
-HPLcom/android/server/vibrator/VibratorManagerService;->startVibrationLocked(Lcom/android/server/vibrator/Vibration;)Lcom/android/server/vibrator/Vibration$Status;
-HPLcom/android/server/vibrator/VibratorManagerService;->startVibrationOnThreadLocked(Lcom/android/server/vibrator/VibrationStepConductor;)Lcom/android/server/vibrator/Vibration$Status;
+HSPLcom/android/server/vibrator/VibratorManagerService;->shouldIgnoreVibrationForOngoingLocked(Lcom/android/server/vibrator/Vibration;)Lcom/android/server/vibrator/Vibration$Status;+]Lcom/android/server/vibrator/Vibration;Lcom/android/server/vibrator/Vibration;]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;]Landroid/os/VibrationAttributes;Landroid/os/VibrationAttributes;
+HSPLcom/android/server/vibrator/VibratorManagerService;->shouldIgnoreVibrationLocked(ILjava/lang/String;Landroid/os/VibrationAttributes;)Lcom/android/server/vibrator/Vibration$Status;
+HSPLcom/android/server/vibrator/VibratorManagerService;->startAppOpModeLocked(ILjava/lang/String;Landroid/os/VibrationAttributes;)I
+HSPLcom/android/server/vibrator/VibratorManagerService;->startVibrationLocked(Lcom/android/server/vibrator/Vibration;)Lcom/android/server/vibrator/Vibration$Status;+]Lcom/android/server/vibrator/InputDeviceDelegate;Lcom/android/server/vibrator/InputDeviceDelegate;]Lcom/android/server/vibrator/Vibration;Lcom/android/server/vibrator/Vibration;]Lcom/android/server/vibrator/VibratorManagerService;Lcom/android/server/vibrator/VibratorManagerService;
+HSPLcom/android/server/vibrator/VibratorManagerService;->startVibrationOnThreadLocked(Lcom/android/server/vibrator/VibrationStepConductor;)Lcom/android/server/vibrator/Vibration$Status;+]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;]Lcom/android/server/vibrator/VibrationThread;Lcom/android/server/vibrator/VibrationThread;]Lcom/android/server/vibrator/VibratorManagerService;Lcom/android/server/vibrator/VibratorManagerService;
 HSPLcom/android/server/vibrator/VibratorManagerService;->systemReady()V
 PLcom/android/server/vibrator/VibratorManagerService;->transformAllVibratorsLocked(Ljava/util/function/Function;)Landroid/util/SparseArray;
 PLcom/android/server/vibrator/VibratorManagerService;->updateAlwaysOnLocked(Lcom/android/server/vibrator/VibratorManagerService$AlwaysOnVibration;)V
 HSPLcom/android/server/vibrator/VibratorManagerService;->updateServiceState()V
-HPLcom/android/server/vibrator/VibratorManagerService;->vibrate(ILjava/lang/String;Landroid/os/CombinedVibration;Landroid/os/VibrationAttributes;Ljava/lang/String;Landroid/os/IBinder;)V
-HPLcom/android/server/vibrator/VibratorManagerService;->vibrateInternal(ILjava/lang/String;Landroid/os/CombinedVibration;Landroid/os/VibrationAttributes;Ljava/lang/String;Landroid/os/IBinder;)Lcom/android/server/vibrator/Vibration;
+HSPLcom/android/server/vibrator/VibratorManagerService;->vibrate(ILjava/lang/String;Landroid/os/CombinedVibration;Landroid/os/VibrationAttributes;Ljava/lang/String;Landroid/os/IBinder;)V+]Lcom/android/server/vibrator/VibratorManagerService;Lcom/android/server/vibrator/VibratorManagerService;
+HSPLcom/android/server/vibrator/VibratorManagerService;->vibrateInternal(ILjava/lang/String;Landroid/os/CombinedVibration;Landroid/os/VibrationAttributes;Ljava/lang/String;Landroid/os/IBinder;)Lcom/android/server/vibrator/Vibration;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/vibrator/VibrationStepConductor;Lcom/android/server/vibrator/VibrationStepConductor;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/os/VibrationAttributes;Landroid/os/VibrationAttributes;]Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/atomic/AtomicInteger;]Lcom/android/server/vibrator/VibratorManagerService;Lcom/android/server/vibrator/VibratorManagerService;]Lcom/android/server/vibrator/VibrationSettings$SettingsContentObserver;Lcom/android/server/vibrator/VibrationSettings$SettingsContentObserver;
 HSPLcom/android/server/voiceinteraction/DatabaseHelper;-><init>(Landroid/content/Context;)V
 PLcom/android/server/voiceinteraction/DatabaseHelper;->deleteKeyphraseSoundModel(IILjava/lang/String;)Z
 PLcom/android/server/voiceinteraction/DatabaseHelper;->dump(Ljava/io/PrintWriter;)V
@@ -51817,8 +53586,8 @@
 PLcom/android/server/voiceinteraction/HotwordDetectionConnection$$ExternalSyntheticLambda17;->runNoResult(Ljava/lang/Object;)V
 PLcom/android/server/voiceinteraction/HotwordDetectionConnection$$ExternalSyntheticLambda18;-><init>(Landroid/view/contentcapture/IContentCaptureManager;)V
 PLcom/android/server/voiceinteraction/HotwordDetectionConnection$$ExternalSyntheticLambda18;->runNoResult(Ljava/lang/Object;)V
-PLcom/android/server/voiceinteraction/HotwordDetectionConnection$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/voiceinteraction/HotwordDetectionConnection;Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionEvent;Landroid/service/voice/IDspHotwordDetectionCallback;)V
-PLcom/android/server/voiceinteraction/HotwordDetectionConnection$$ExternalSyntheticLambda1;->runNoResult(Ljava/lang/Object;)V
+HPLcom/android/server/voiceinteraction/HotwordDetectionConnection$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/voiceinteraction/HotwordDetectionConnection;Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionEvent;Landroid/service/voice/IDspHotwordDetectionCallback;)V
+HPLcom/android/server/voiceinteraction/HotwordDetectionConnection$$ExternalSyntheticLambda1;->runNoResult(Ljava/lang/Object;)V
 PLcom/android/server/voiceinteraction/HotwordDetectionConnection$$ExternalSyntheticLambda2;-><init>(I)V
 PLcom/android/server/voiceinteraction/HotwordDetectionConnection$$ExternalSyntheticLambda2;->run()V
 PLcom/android/server/voiceinteraction/HotwordDetectionConnection$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/voiceinteraction/HotwordDetectionConnection;)V
@@ -51831,11 +53600,11 @@
 PLcom/android/server/voiceinteraction/HotwordDetectionConnection$$ExternalSyntheticLambda8;->run()V
 PLcom/android/server/voiceinteraction/HotwordDetectionConnection$1;-><init>(Lcom/android/server/voiceinteraction/HotwordDetectionConnection;Lcom/android/internal/infra/AndroidFuture;)V
 PLcom/android/server/voiceinteraction/HotwordDetectionConnection$1;->sendResult(Landroid/os/Bundle;)V
-PLcom/android/server/voiceinteraction/HotwordDetectionConnection$4;-><init>(Lcom/android/server/voiceinteraction/HotwordDetectionConnection;Lcom/android/internal/app/IHotwordRecognitionStatusCallback;Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionEvent;)V
+HPLcom/android/server/voiceinteraction/HotwordDetectionConnection$4;-><init>(Lcom/android/server/voiceinteraction/HotwordDetectionConnection;Lcom/android/internal/app/IHotwordRecognitionStatusCallback;Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseRecognitionEvent;)V
 PLcom/android/server/voiceinteraction/HotwordDetectionConnection$4;->onDetected(Landroid/service/voice/HotwordDetectedResult;)V
 HPLcom/android/server/voiceinteraction/HotwordDetectionConnection$4;->onRejected(Landroid/service/voice/HotwordRejectedResult;)V
 PLcom/android/server/voiceinteraction/HotwordDetectionConnection$6$$ExternalSyntheticLambda0;-><init>(I)V
-PLcom/android/server/voiceinteraction/HotwordDetectionConnection$6$$ExternalSyntheticLambda0;->getUid()I
+HPLcom/android/server/voiceinteraction/HotwordDetectionConnection$6$$ExternalSyntheticLambda0;->getUid()I
 PLcom/android/server/voiceinteraction/HotwordDetectionConnection$6;->$r8$lambda$8WXrsXBNa8y7KdrTTKBjd3AQniQ(I)I
 PLcom/android/server/voiceinteraction/HotwordDetectionConnection$6;-><init>(Lcom/android/server/voiceinteraction/HotwordDetectionConnection;)V
 PLcom/android/server/voiceinteraction/HotwordDetectionConnection$6;->lambda$sendResult$0(I)I
@@ -51939,12 +53708,12 @@
 PLcom/android/server/voiceinteraction/SoundTriggerSessionPermissionsDecorator;->enforcePermissionForPreflight(Landroid/content/Context;Landroid/media/permission/Identity;Ljava/lang/String;)V
 PLcom/android/server/voiceinteraction/SoundTriggerSessionPermissionsDecorator;->getDspModuleProperties()Landroid/hardware/soundtrigger/SoundTrigger$ModuleProperties;
 HPLcom/android/server/voiceinteraction/SoundTriggerSessionPermissionsDecorator;->isHoldingPermissions()Z
-PLcom/android/server/voiceinteraction/SoundTriggerSessionPermissionsDecorator;->startRecognition(ILjava/lang/String;Lcom/android/internal/app/IHotwordRecognitionStatusCallback;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;Z)I
+HPLcom/android/server/voiceinteraction/SoundTriggerSessionPermissionsDecorator;->startRecognition(ILjava/lang/String;Lcom/android/internal/app/IHotwordRecognitionStatusCallback;Landroid/hardware/soundtrigger/SoundTrigger$RecognitionConfig;Z)I
 PLcom/android/server/voiceinteraction/SoundTriggerSessionPermissionsDecorator;->stopRecognition(ILcom/android/internal/app/IHotwordRecognitionStatusCallback;)I
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$1;-><init>(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService;)V
-PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$1;->getPackages(I)[Ljava/lang/String;
+HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$1;->getPackages(I)[Ljava/lang/String;
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$2;-><init>(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService;)V
-HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$2;->notifyActivityEventChanged()V
+HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$2;->notifyActivityEventChanged()V
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$LocalService;-><init>(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService;)V
 HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$LocalService;->getHotwordDetectionServiceIdentity()Landroid/service/voice/VoiceInteractionManagerInternal$HotwordDetectionServiceIdentity;
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$LocalService;->hasActiveSession(Ljava/lang/String;)Z
@@ -51996,39 +53765,39 @@
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->deliverNewSession(Landroid/os/IBinder;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;)Z
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->enforceCallerAllowedToEnrollVoiceModel()V
-HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->enforceCallingPermission(Ljava/lang/String;)V
+HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->enforceCallingPermission(Ljava/lang/String;)V
 HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->enforceIsCurrentVoiceInteractionService()V+]Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->findAvailInteractor(ILjava/lang/String;)Landroid/service/voice/VoiceInteractionServiceInfo;
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->findAvailRecognizer(Ljava/lang/String;I)Landroid/content/ComponentName;
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->finish(Landroid/os/IBinder;)V
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->getActiveServiceComponentName()Landroid/content/ComponentName;
 HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->getCurAssistant(I)Landroid/content/ComponentName;
-HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->getCurInteractor(I)Landroid/content/ComponentName;
+HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->getCurInteractor(I)Landroid/content/ComponentName;
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->getCurRecognizer(I)Landroid/content/ComponentName;
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->getDefaultRecognizer()Ljava/lang/String;
 HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->getEnrolledKeyphraseMetadata(Ljava/lang/String;Ljava/lang/String;)Landroid/hardware/soundtrigger/KeyphraseMetadata;+]Lcom/android/server/voiceinteraction/DatabaseHelper;Lcom/android/server/voiceinteraction/DatabaseHelper;]Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->getForceVoiceInteractionServicePackage(Landroid/content/res/Resources;)Ljava/lang/String;
 HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->getKeyphraseSoundModel(ILjava/lang/String;)Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->getUserDisabledShowContext()I
-PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->grantImplicitAccessLocked(ILandroid/content/Intent;)V
 HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->hideCurrentSession()V
 HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->hideSessionFromSession(Landroid/os/IBinder;)Z
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->initForUser(I)V
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->initForUserNoTracing(I)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->initRecognizer(I)V
 HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->isCallerCurrentVoiceInteractionService()Z+]Landroid/service/voice/VoiceInteractionServiceInfo;Landroid/service/voice/VoiceInteractionServiceInfo;
-HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->isCallerHoldingPermission(Ljava/lang/String;)Z+]Landroid/content/Context;Landroid/app/ContextImpl;
+HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->isCallerHoldingPermission(Ljava/lang/String;)Z+]Landroid/content/Context;Landroid/app/ContextImpl;
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->lambda$createSoundTriggerSessionForSelfIdentity$0(Landroid/media/permission/Identity;Landroid/os/IBinder;)Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub$SoundTriggerSession;
 HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->lambda$notifyActivityEventChanged$1()V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->lambda$setSessionWindowVisible$3(ZLcom/android/internal/app/IVoiceInteractionSessionListener;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->lambda$switchUser$2(I)V
-HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->notifyActivityEventChanged()V
+HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->notifyActivityEventChanged()V
 HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->onLockscreenShown()V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->onSessionHidden()V
 HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->onSessionShown()V
-HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->performDirectAction(Landroid/os/IBinder;Ljava/lang/String;Landroid/os/Bundle;ILandroid/os/IBinder;Landroid/os/RemoteCallback;Landroid/os/RemoteCallback;)V
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->queryInteractorServices(ILjava/lang/String;)Ljava/util/List;
-PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->registerVoiceInteractionSessionListener(Lcom/android/internal/app/IVoiceInteractionSessionListener;)V
+HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->registerVoiceInteractionSessionListener(Lcom/android/internal/app/IVoiceInteractionSessionListener;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->removeNonSelectableAsDefault(Ljava/util/List;)Ljava/util/List;
 HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->requestDirectActions(Landroid/os/IBinder;ILandroid/os/IBinder;Landroid/os/RemoteCallback;Landroid/os/RemoteCallback;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->resetCurAssistant(I)V
@@ -52038,7 +53807,7 @@
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->setCurrentUserLocked(I)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->setDisabledShowContext(I)V
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->setImplLocked(Lcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;)V
-PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->setSessionWindowVisible(Landroid/os/IBinder;Z)V
+HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->setSessionWindowVisible(Landroid/os/IBinder;Z)V
 HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->setUiHints(Landroid/os/Bundle;)V
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->shouldEnableService(Landroid/content/Context;)Z
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->showSession(Landroid/os/Bundle;I)V
@@ -52046,6 +53815,7 @@
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->showSessionFromSession(Landroid/os/IBinder;Landroid/os/Bundle;I)Z
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->shutdownHotwordDetectionService()V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->startAssistantActivity(Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;)I
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->startVoiceActivity(Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;)I
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->switchImplementationIfNeeded(Z)V
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->switchImplementationIfNeededLocked(Z)V
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->switchImplementationIfNeededNoTracingLocked(Z)V
@@ -52054,8 +53824,8 @@
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->unloadAllKeyphraseModels()V
 HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->updateKeyphraseSoundModel(Landroid/hardware/soundtrigger/SoundTrigger$KeyphraseSoundModel;)I+]Lcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;Lcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;]Lcom/android/server/voiceinteraction/DatabaseHelper;Lcom/android/server/voiceinteraction/DatabaseHelper;]Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;->updateState(Landroid/media/permission/Identity;Landroid/os/PersistableBundle;Landroid/os/SharedMemory;Lcom/android/internal/app/IHotwordRecognitionStatusCallback;I)V
-HPLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->-$$Nest$fgetmServiceStub(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService;)Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;
-PLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->-$$Nest$fgetmVoiceInteractionSessionListeners(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService;)Landroid/os/RemoteCallbackList;
+HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->-$$Nest$fgetmServiceStub(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService;)Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;
+HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->-$$Nest$fgetmVoiceInteractionSessionListeners(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService;)Landroid/os/RemoteCallbackList;
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->-$$Nest$misUserSupported(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService;Landroid/content/pm/UserInfo;)Z
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService;-><init>(Landroid/content/Context;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->access$000(Lcom/android/server/voiceinteraction/VoiceInteractionManagerService;Ljava/io/PrintWriter;Ljava/lang/String;)V
@@ -52066,12 +53836,15 @@
 HSPLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->onUserStarting(Lcom/android/server/SystemService$TargetUser;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->onUserSwitching(Lcom/android/server/SystemService$TargetUser;Lcom/android/server/SystemService$TargetUser;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerService;->onUserUnlocking(Lcom/android/server/SystemService$TargetUser;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl$$ExternalSyntheticLambda0;-><init>()V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl$1;-><init>(Lcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;)V
 HPLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl$2;-><init>(Lcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl$2;->onBindingDied(Landroid/content/ComponentName;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl$2;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl$2;->onServiceDisconnected(Landroid/content/ComponentName;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->$r8$lambda$MI7Oa4qESLfsXC36SVCW05iSz6Q(Lcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;Landroid/os/IBinder;ILandroid/os/IBinder;Landroid/os/RemoteCallback;Landroid/os/RemoteCallback;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;-><init>(Landroid/content/Context;Landroid/os/Handler;Lcom/android/server/voiceinteraction/VoiceInteractionManagerService$VoiceInteractionManagerServiceStub;ILandroid/content/ComponentName;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->closeSystemDialogsLocked(Landroid/os/IBinder;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->createSoundTriggerCallbackLocked(Lcom/android/internal/app/IHotwordRecognitionStatusCallback;)Landroid/hardware/soundtrigger/IRecognitionStatusCallback;
@@ -52080,6 +53853,7 @@
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->finishLocked(Landroid/os/IBinder;Z)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->getServiceInfoLocked(Landroid/content/ComponentName;I)Landroid/content/pm/ServiceInfo;
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->getUserDisabledShowContextLocked(I)I
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->grantImplicitAccessLocked(ILandroid/content/Intent;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->hideSessionLocked()Z
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->isIsolatedProcessLocked(Landroid/content/pm/ServiceInfo;)Z
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->logDetectorCreateEventIfNeeded(Lcom/android/internal/app/IHotwordRecognitionStatusCallback;IZI)V
@@ -52087,8 +53861,10 @@
 HPLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->notifySoundModelsChangedLocked()V+]Landroid/service/voice/IVoiceInteractionService;Landroid/service/voice/IVoiceInteractionService$Stub$Proxy;
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->onSessionHidden(Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->onSessionShown(Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;)V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->performDirectActionLocked(Landroid/os/IBinder;Ljava/lang/String;Landroid/os/Bundle;ILandroid/os/IBinder;Landroid/os/RemoteCallback;Landroid/os/RemoteCallback;)V
 HPLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->requestDirectActionsLocked(Landroid/os/IBinder;ILandroid/os/IBinder;Landroid/os/RemoteCallback;Landroid/os/RemoteCallback;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->resetHotwordDetectionConnectionLocked()V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->retryRequestDirectActions(Landroid/os/IBinder;ILandroid/os/IBinder;Landroid/os/RemoteCallback;Landroid/os/RemoteCallback;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->sessionConnectionGone(Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->setDisabledShowContextLocked(II)V
 HPLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->showSessionLocked(Landroid/os/Bundle;ILcom/android/internal/app/IVoiceInteractionSessionShowCallback;Landroid/os/IBinder;)Z
@@ -52096,6 +53872,7 @@
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->shutdownLocked()V
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->startAssistantActivityLocked(Ljava/lang/String;IILandroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;)I
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->startLocked()V
+PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->startVoiceActivityLocked(Ljava/lang/String;IILandroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;)I
 PLcom/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl;->updateStateLocked(Landroid/media/permission/Identity;Landroid/os/PersistableBundle;Landroid/os/SharedMemory;Lcom/android/internal/app/IHotwordRecognitionStatusCallback;I)V
 PLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;)V
 PLcom/android/server/voiceinteraction/VoiceInteractionSessionConnection$1;-><init>(Lcom/android/server/voiceinteraction/VoiceInteractionSessionConnection;)V
@@ -52137,12 +53914,12 @@
 PLcom/android/server/wallpaper/LocalColorRepository$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wallpaper/LocalColorRepository;Landroid/app/ILocalWallpaperColorConsumer;)V
 PLcom/android/server/wallpaper/LocalColorRepository$$ExternalSyntheticLambda0;->binderDied()V
 HPLcom/android/server/wallpaper/LocalColorRepository$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/wallpaper/LocalColorRepository;ILandroid/graphics/RectF;Ljava/util/function/Consumer;)V
-PLcom/android/server/wallpaper/LocalColorRepository$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wallpaper/LocalColorRepository$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wallpaper/LocalColorRepository;->$r8$lambda$U-07RdMzxj0qcg3MG4AT194Meb0(Lcom/android/server/wallpaper/LocalColorRepository;ILandroid/graphics/RectF;Ljava/util/function/Consumer;Landroid/app/ILocalWallpaperColorConsumer;)V
 PLcom/android/server/wallpaper/LocalColorRepository;->$r8$lambda$dj7_Lg3CQCn6S-BChf-mzYrKCFY(Lcom/android/server/wallpaper/LocalColorRepository;Landroid/app/ILocalWallpaperColorConsumer;)V
 HSPLcom/android/server/wallpaper/LocalColorRepository;-><init>()V
 PLcom/android/server/wallpaper/LocalColorRepository;->addAreas(Landroid/app/ILocalWallpaperColorConsumer;Ljava/util/List;I)V
-PLcom/android/server/wallpaper/LocalColorRepository;->forEachCallback(Ljava/util/function/Consumer;Landroid/graphics/RectF;I)V
+HPLcom/android/server/wallpaper/LocalColorRepository;->forEachCallback(Ljava/util/function/Consumer;Landroid/graphics/RectF;I)V
 PLcom/android/server/wallpaper/LocalColorRepository;->getAreasByDisplayId(I)Ljava/util/List;
 PLcom/android/server/wallpaper/LocalColorRepository;->lambda$addAreas$0(Landroid/app/ILocalWallpaperColorConsumer;)V
 HPLcom/android/server/wallpaper/LocalColorRepository;->lambda$forEachCallback$1(ILandroid/graphics/RectF;Ljava/util/function/Consumer;Landroid/app/ILocalWallpaperColorConsumer;)V
@@ -52176,14 +53953,14 @@
 PLcom/android/server/wallpaper/WallpaperManagerService$$ExternalSyntheticLambda6;->getOrThrow()Ljava/lang/Object;
 HPLcom/android/server/wallpaper/WallpaperManagerService$$ExternalSyntheticLambda7;-><init>(IILandroid/os/Bundle;)V
 HPLcom/android/server/wallpaper/WallpaperManagerService$$ExternalSyntheticLambda7;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wallpaper/WallpaperManagerService$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
-PLcom/android/server/wallpaper/WallpaperManagerService$$ExternalSyntheticLambda8;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wallpaper/WallpaperManagerService$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
+HSPLcom/android/server/wallpaper/WallpaperManagerService$$ExternalSyntheticLambda8;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService$$ExternalSyntheticLambda9;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;I)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService$$ExternalSyntheticLambda9;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService$1;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService;)V
 PLcom/android/server/wallpaper/WallpaperManagerService$1;->onDisplayAdded(I)V
-PLcom/android/server/wallpaper/WallpaperManagerService$1;->onDisplayChanged(I)V
-PLcom/android/server/wallpaper/WallpaperManagerService$1;->onDisplayRemoved(I)V
+HSPLcom/android/server/wallpaper/WallpaperManagerService$1;->onDisplayChanged(I)V
+HPLcom/android/server/wallpaper/WallpaperManagerService$1;->onDisplayRemoved(I)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService$2;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService;)V
 PLcom/android/server/wallpaper/WallpaperManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService$3;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService;)V
@@ -52201,9 +53978,9 @@
 PLcom/android/server/wallpaper/WallpaperManagerService$LocalService;->onDisplayReady(I)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService$MyPackageMonitor;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService;)V
 HPLcom/android/server/wallpaper/WallpaperManagerService$MyPackageMonitor;->doPackagesChangedLocked(ZLcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)Z
-PLcom/android/server/wallpaper/WallpaperManagerService$MyPackageMonitor;->onHandleForceStop(Landroid/content/Intent;[Ljava/lang/String;IZ)Z
+HPLcom/android/server/wallpaper/WallpaperManagerService$MyPackageMonitor;->onHandleForceStop(Landroid/content/Intent;[Ljava/lang/String;IZ)Z
 HPLcom/android/server/wallpaper/WallpaperManagerService$MyPackageMonitor;->onPackageModified(Ljava/lang/String;)V+]Lcom/android/internal/content/PackageMonitor;Lcom/android/server/wallpaper/WallpaperManagerService$MyPackageMonitor;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/content/ComponentName;Landroid/content/ComponentName;
-PLcom/android/server/wallpaper/WallpaperManagerService$MyPackageMonitor;->onPackageUpdateFinished(Ljava/lang/String;I)V
+HPLcom/android/server/wallpaper/WallpaperManagerService$MyPackageMonitor;->onPackageUpdateFinished(Ljava/lang/String;I)V
 PLcom/android/server/wallpaper/WallpaperManagerService$MyPackageMonitor;->onPackageUpdateStarted(Ljava/lang/String;I)V
 HPLcom/android/server/wallpaper/WallpaperManagerService$MyPackageMonitor;->onSomePackagesChanged()V
 PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$$ExternalSyntheticLambda0;-><init>()V
@@ -52211,7 +53988,7 @@
 HPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Landroid/graphics/RectF;Landroid/app/WallpaperColors;I)V
 HPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$$ExternalSyntheticLambda2;-><init>(Landroid/graphics/RectF;Landroid/app/WallpaperColors;)V
-PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;)V
@@ -52219,7 +53996,7 @@
 HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$$ExternalSyntheticLambda6;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;-><init>(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;I)V
-PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;->connectLocked(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
+HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;->connectLocked(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
 PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;->disconnectLocked()V
 PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;->ensureStatusHandled()V
 PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->$r8$lambda$CaD5DEGcUPX-MGehq_5Oe-7gOEE(Landroid/graphics/RectF;Landroid/app/WallpaperColors;Landroid/app/ILocalWallpaperColorConsumer;)V
@@ -52244,8 +54021,8 @@
 PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->lambda$onLocalWallpaperColorsChanged$1(Landroid/graphics/RectF;Landroid/app/WallpaperColors;Landroid/app/ILocalWallpaperColorConsumer;)V
 HPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->lambda$onLocalWallpaperColorsChanged$2(Landroid/graphics/RectF;Landroid/app/WallpaperColors;ILcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;)V
 PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->lambda$onServiceDisconnected$3(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;)V
-PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->onLocalWallpaperColorsChanged(Landroid/graphics/RectF;Landroid/app/WallpaperColors;I)V
-PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
+HPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->onLocalWallpaperColorsChanged(Landroid/graphics/RectF;Landroid/app/WallpaperColors;I)V
+HSPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V
 PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->onServiceDisconnected(Landroid/content/ComponentName;)V
 HPLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->onWallpaperColorsChanged(Landroid/app/WallpaperColors;I)V
 PLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;->scheduleTimeoutLocked()V
@@ -52265,7 +54042,7 @@
 PLcom/android/server/wallpaper/WallpaperManagerService;->$r8$lambda$APXITI7GQun1QSDlkoycOjTgA1E(IILandroid/os/Bundle;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->$r8$lambda$DRlXsJ6I2XEZofNJgxJ9TLflAO0(Lcom/android/server/wallpaper/WallpaperManagerService;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;ILcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;)V
 PLcom/android/server/wallpaper/WallpaperManagerService;->$r8$lambda$PB8HQYD7nW6P8dZPQ6Gb5qXsA3o(Lcom/android/server/wallpaper/WallpaperManagerService;I)V
-PLcom/android/server/wallpaper/WallpaperManagerService;->$r8$lambda$Q9GhwFn81wk9BhO2RUp1b0p59Z4(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;)V
+HSPLcom/android/server/wallpaper/WallpaperManagerService;->$r8$lambda$Q9GhwFn81wk9BhO2RUp1b0p59Z4(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;)V
 PLcom/android/server/wallpaper/WallpaperManagerService;->$r8$lambda$YZrmh_arn_DLPvOphNJjtMVxezE(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->$r8$lambda$eXseyg29Sx3xx44xwCK_OaQo1Zk(Lcom/android/server/wallpaper/WallpaperManagerService;ILjava/lang/Integer;Ljava/lang/String;)V
 PLcom/android/server/wallpaper/WallpaperManagerService;->$r8$lambda$goLxRCGNDIeR06R7mRH-z2VYVgw(Ljava/io/PrintWriter;Lcom/android/server/wallpaper/WallpaperManagerService$DisplayData;)V
@@ -52273,7 +54050,7 @@
 PLcom/android/server/wallpaper/WallpaperManagerService;->$r8$lambda$mA7kKKd1glWr0OhCFHWeDownLZQ(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Landroid/view/Display;)Z
 PLcom/android/server/wallpaper/WallpaperManagerService;->$r8$lambda$njhH9VpAVhlztqpItitCw5e21YE(FLcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;)V
 PLcom/android/server/wallpaper/WallpaperManagerService;->$r8$lambda$zZr95QrOsk_M7UK7CK6d3vi8AU4(Lcom/android/server/wallpaper/WallpaperManagerService;Ljava/lang/String;)Ljava/lang/Boolean;
-PLcom/android/server/wallpaper/WallpaperManagerService;->-$$Nest$fgetmContext(Lcom/android/server/wallpaper/WallpaperManagerService;)Landroid/content/Context;
+HSPLcom/android/server/wallpaper/WallpaperManagerService;->-$$Nest$fgetmContext(Lcom/android/server/wallpaper/WallpaperManagerService;)Landroid/content/Context;
 HPLcom/android/server/wallpaper/WallpaperManagerService;->-$$Nest$fgetmCurrentUserId(Lcom/android/server/wallpaper/WallpaperManagerService;)I
 PLcom/android/server/wallpaper/WallpaperManagerService;->-$$Nest$fgetmDefaultWallpaperComponent(Lcom/android/server/wallpaper/WallpaperManagerService;)Landroid/content/ComponentName;
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->-$$Nest$fgetmDisplayManager(Lcom/android/server/wallpaper/WallpaperManagerService;)Landroid/hardware/display/DisplayManager;
@@ -52285,10 +54062,10 @@
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->-$$Nest$fgetmWallpaperMap(Lcom/android/server/wallpaper/WallpaperManagerService;)Landroid/util/SparseArray;
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->-$$Nest$fgetmWindowManagerInternal(Lcom/android/server/wallpaper/WallpaperManagerService;)Lcom/android/server/wm/WindowManagerInternal;
 PLcom/android/server/wallpaper/WallpaperManagerService;->-$$Nest$fputmShuttingDown(Lcom/android/server/wallpaper/WallpaperManagerService;Z)V
-PLcom/android/server/wallpaper/WallpaperManagerService;->-$$Nest$mattachServiceLocked(Lcom/android/server/wallpaper/WallpaperManagerService;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
+HSPLcom/android/server/wallpaper/WallpaperManagerService;->-$$Nest$mattachServiceLocked(Lcom/android/server/wallpaper/WallpaperManagerService;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
 PLcom/android/server/wallpaper/WallpaperManagerService;->-$$Nest$mclearWallpaperComponentLocked(Lcom/android/server/wallpaper/WallpaperManagerService;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
 PLcom/android/server/wallpaper/WallpaperManagerService;->-$$Nest$merrorCheck(Lcom/android/server/wallpaper/WallpaperManagerService;I)V
-PLcom/android/server/wallpaper/WallpaperManagerService;->-$$Nest$mgetDisplayDataOrCreate(Lcom/android/server/wallpaper/WallpaperManagerService;I)Lcom/android/server/wallpaper/WallpaperManagerService$DisplayData;
+HSPLcom/android/server/wallpaper/WallpaperManagerService;->-$$Nest$mgetDisplayDataOrCreate(Lcom/android/server/wallpaper/WallpaperManagerService;I)Lcom/android/server/wallpaper/WallpaperManagerService$DisplayData;
 PLcom/android/server/wallpaper/WallpaperManagerService;->-$$Nest$mnotifyCallbacksLocked(Lcom/android/server/wallpaper/WallpaperManagerService;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
 PLcom/android/server/wallpaper/WallpaperManagerService;->-$$Nest$mnotifyLockWallpaperChanged(Lcom/android/server/wallpaper/WallpaperManagerService;)V
 PLcom/android/server/wallpaper/WallpaperManagerService;->-$$Nest$mnotifyWallpaperChanged(Lcom/android/server/wallpaper/WallpaperManagerService;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
@@ -52298,7 +54075,7 @@
 HSPLcom/android/server/wallpaper/WallpaperManagerService;-><clinit>()V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;-><init>(Landroid/content/Context;)V
 PLcom/android/server/wallpaper/WallpaperManagerService;->addOnLocalColorsChangedListener(Landroid/app/ILocalWallpaperColorConsumer;Ljava/util/List;III)V
-PLcom/android/server/wallpaper/WallpaperManagerService;->attachServiceLocked(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
+HSPLcom/android/server/wallpaper/WallpaperManagerService;->attachServiceLocked(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->bindWallpaperComponentLocked(Landroid/content/ComponentName;ZZLcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;Landroid/os/IRemoteCallback;)Z
 PLcom/android/server/wallpaper/WallpaperManagerService;->changingToSame(Landroid/content/ComponentName;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)Z
 PLcom/android/server/wallpaper/WallpaperManagerService;->checkPermission(Ljava/lang/String;)V
@@ -52341,7 +54118,7 @@
 HPLcom/android/server/wallpaper/WallpaperManagerService;->isValidDisplay(I)Z
 PLcom/android/server/wallpaper/WallpaperManagerService;->isWallpaperBackupEligible(II)Z
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->isWallpaperSupported(Ljava/lang/String;)Z
-PLcom/android/server/wallpaper/WallpaperManagerService;->lambda$attachServiceLocked$13(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;)V
+HSPLcom/android/server/wallpaper/WallpaperManagerService;->lambda$attachServiceLocked$13(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;)V
 PLcom/android/server/wallpaper/WallpaperManagerService;->lambda$dump$14(Ljava/io/PrintWriter;Lcom/android/server/wallpaper/WallpaperManagerService$DisplayData;)V
 PLcom/android/server/wallpaper/WallpaperManagerService;->lambda$dump$15(Ljava/io/PrintWriter;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperConnection$DisplayConnector;)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->lambda$errorCheck$5(ILjava/lang/Integer;Ljava/lang/String;)V
@@ -52370,7 +54147,7 @@
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->notifyWallpaperColorsChanged(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;I)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->notifyWallpaperColorsChangedOnDisplay(Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;II)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->onBootPhase(I)V
-PLcom/android/server/wallpaper/WallpaperManagerService;->onDisplayReadyInternal(I)V
+HPLcom/android/server/wallpaper/WallpaperManagerService;->onDisplayReadyInternal(I)V
 PLcom/android/server/wallpaper/WallpaperManagerService;->onRemoveUser(I)V
 PLcom/android/server/wallpaper/WallpaperManagerService;->onUnlockUser(I)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->packageBelongsToUid(Ljava/lang/String;I)Z
@@ -52395,7 +54172,7 @@
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->unregisterWallpaperColorsCallback(Landroid/app/IWallpaperManagerCallback;II)V
 HSPLcom/android/server/wallpaper/WallpaperManagerService;->updateFallbackConnection()V
 PLcom/android/server/wallpaper/WallpaperManagerService;->updateWallpaperBitmapLocked(Ljava/lang/String;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;Landroid/os/Bundle;)Landroid/os/ParcelFileDescriptor;
-HSPLcom/android/server/wallpaper/WallpaperManagerService;->writeWallpaperAttributes(Landroid/util/TypedXmlSerializer;Ljava/lang/String;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/Map$Entry;Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/app/WallpaperColors;Landroid/app/WallpaperColors;]Landroid/graphics/Color;Landroid/graphics/Color;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Ljava/util/Map;Ljava/util/Collections$UnmodifiableMap;]Ljava/util/Set;Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet;]Lcom/android/server/wallpaper/WallpaperManagerService;Lcom/android/server/wallpaper/WallpaperManagerService;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1;
+HSPLcom/android/server/wallpaper/WallpaperManagerService;->writeWallpaperAttributes(Landroid/util/TypedXmlSerializer;Ljava/lang/String;Lcom/android/server/wallpaper/WallpaperManagerService$WallpaperData;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/Map$Entry;Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry;,Landroid/util/MapCollections$MapIterator;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/app/WallpaperColors;Landroid/app/WallpaperColors;]Landroid/graphics/Color;Landroid/graphics/Color;]Landroid/util/TypedXmlSerializer;Lcom/android/internal/util/BinaryXmlSerializer;]Ljava/util/Map;Ljava/util/Collections$UnmodifiableMap;]Ljava/util/Set;Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet;,Landroid/util/MapCollections$EntrySet;]Lcom/android/server/wallpaper/WallpaperManagerService;Lcom/android/server/wallpaper/WallpaperManagerService;]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/util/Iterator;Ljava/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1;,Landroid/util/MapCollections$MapIterator;]Ljava/lang/Float;Ljava/lang/Float;
 PLcom/android/server/wallpapereffectsgeneration/RemoteWallpaperEffectsGenerationService;-><clinit>()V
 PLcom/android/server/wallpapereffectsgeneration/RemoteWallpaperEffectsGenerationService;-><init>(Landroid/content/Context;Landroid/content/ComponentName;ILcom/android/server/wallpapereffectsgeneration/RemoteWallpaperEffectsGenerationService$RemoteWallpaperEffectsGenerationServiceCallback;ZZ)V
 PLcom/android/server/wallpapereffectsgeneration/RemoteWallpaperEffectsGenerationService;->executeOnResolvedService(Lcom/android/internal/infra/AbstractRemoteService$AsyncRequest;)V
@@ -52422,6 +54199,8 @@
 PLcom/android/server/wallpapereffectsgeneration/WallpaperEffectsGenerationManagerService;->access$200(Lcom/android/server/wallpapereffectsgeneration/WallpaperEffectsGenerationManagerService;I)Lcom/android/server/infra/AbstractPerUserSystemService;
 PLcom/android/server/wallpapereffectsgeneration/WallpaperEffectsGenerationManagerService;->newServiceLocked(IZ)Lcom/android/server/infra/AbstractPerUserSystemService;
 PLcom/android/server/wallpapereffectsgeneration/WallpaperEffectsGenerationManagerService;->newServiceLocked(IZ)Lcom/android/server/wallpapereffectsgeneration/WallpaperEffectsGenerationPerUserService;
+PLcom/android/server/wallpapereffectsgeneration/WallpaperEffectsGenerationManagerService;->onServicePackageRestartedLocked(I)V
+PLcom/android/server/wallpapereffectsgeneration/WallpaperEffectsGenerationManagerService;->onServicePackageUpdatedLocked(I)V
 HSPLcom/android/server/wallpapereffectsgeneration/WallpaperEffectsGenerationManagerService;->onStart()V
 PLcom/android/server/wallpapereffectsgeneration/WallpaperEffectsGenerationPerUserService$$ExternalSyntheticLambda0;-><init>(Landroid/app/wallpapereffectsgeneration/CinematicEffectRequest;)V
 PLcom/android/server/wallpapereffectsgeneration/WallpaperEffectsGenerationPerUserService$$ExternalSyntheticLambda0;->run(Landroid/os/IInterface;)V
@@ -52430,6 +54209,7 @@
 PLcom/android/server/wallpapereffectsgeneration/WallpaperEffectsGenerationPerUserService;->$r8$lambda$QdaSHH3wzA6vLvZGYIc37yLvJTA(Landroid/app/wallpapereffectsgeneration/CinematicEffectRequest;Landroid/service/wallpapereffectsgeneration/IWallpaperEffectsGenerationService;)V
 PLcom/android/server/wallpapereffectsgeneration/WallpaperEffectsGenerationPerUserService;-><clinit>()V
 PLcom/android/server/wallpapereffectsgeneration/WallpaperEffectsGenerationPerUserService;-><init>(Lcom/android/server/wallpapereffectsgeneration/WallpaperEffectsGenerationManagerService;Ljava/lang/Object;I)V
+PLcom/android/server/wallpapereffectsgeneration/WallpaperEffectsGenerationPerUserService;->destroyAndRebindRemoteService()V
 PLcom/android/server/wallpapereffectsgeneration/WallpaperEffectsGenerationPerUserService;->ensureRemoteServiceLocked()Lcom/android/server/wallpapereffectsgeneration/RemoteWallpaperEffectsGenerationService;
 PLcom/android/server/wallpapereffectsgeneration/WallpaperEffectsGenerationPerUserService;->invokeCinematicListenerAndCleanup(Landroid/app/wallpapereffectsgeneration/CinematicEffectResponse;)V
 PLcom/android/server/wallpapereffectsgeneration/WallpaperEffectsGenerationPerUserService;->isCallingUidAllowed(I)Z
@@ -52437,6 +54217,8 @@
 PLcom/android/server/wallpapereffectsgeneration/WallpaperEffectsGenerationPerUserService;->newServiceInfoLocked(Landroid/content/ComponentName;)Landroid/content/pm/ServiceInfo;
 PLcom/android/server/wallpapereffectsgeneration/WallpaperEffectsGenerationPerUserService;->onConnectedStateChanged(Z)V
 PLcom/android/server/wallpapereffectsgeneration/WallpaperEffectsGenerationPerUserService;->onGenerateCinematicEffectLocked(Landroid/app/wallpapereffectsgeneration/CinematicEffectRequest;Landroid/app/wallpapereffectsgeneration/ICinematicEffectListener;)V
+PLcom/android/server/wallpapereffectsgeneration/WallpaperEffectsGenerationPerUserService;->onPackageRestartedLocked()V
+PLcom/android/server/wallpapereffectsgeneration/WallpaperEffectsGenerationPerUserService;->onPackageUpdatedLocked()V
 PLcom/android/server/wallpapereffectsgeneration/WallpaperEffectsGenerationPerUserService;->onReturnCinematicEffectResponseLocked(Landroid/app/wallpapereffectsgeneration/CinematicEffectResponse;)V
 PLcom/android/server/wallpapereffectsgeneration/WallpaperEffectsGenerationPerUserService;->updateLocked(Z)Z
 PLcom/android/server/wallpapereffectsgeneration/WallpaperEffectsGenerationPerUserService;->updateRemoteServiceLocked()V
@@ -52459,7 +54241,7 @@
 HSPLcom/android/server/webkit/SystemImpl;->readSignatures(Landroid/content/res/XmlResourceParser;)[Ljava/lang/String;
 HSPLcom/android/server/webkit/SystemImpl;->systemIsDebuggable()Z
 HSPLcom/android/server/webkit/WebViewUpdateService$1;-><init>(Lcom/android/server/webkit/WebViewUpdateService;)V
-PLcom/android/server/webkit/WebViewUpdateService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HSPLcom/android/server/webkit/WebViewUpdateService$1;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/webkit/WebViewUpdateService$BinderService;-><init>(Lcom/android/server/webkit/WebViewUpdateService;)V
 HSPLcom/android/server/webkit/WebViewUpdateService$BinderService;-><init>(Lcom/android/server/webkit/WebViewUpdateService;Lcom/android/server/webkit/WebViewUpdateService$BinderService-IA;)V
 PLcom/android/server/webkit/WebViewUpdateService$BinderService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
@@ -52492,7 +54274,7 @@
 HSPLcom/android/server/webkit/WebViewUpdateServiceImpl;->getMinimumVersionCode()J
 HSPLcom/android/server/webkit/WebViewUpdateServiceImpl;->getValidWebViewPackagesAndInfos()[Lcom/android/server/webkit/WebViewUpdateServiceImpl$ProviderAndPackageInfo;
 HSPLcom/android/server/webkit/WebViewUpdateServiceImpl;->getWebViewPackages()[Landroid/webkit/WebViewProviderInfo;
-PLcom/android/server/webkit/WebViewUpdateServiceImpl;->handleNewUser(I)V
+HSPLcom/android/server/webkit/WebViewUpdateServiceImpl;->handleNewUser(I)V
 PLcom/android/server/webkit/WebViewUpdateServiceImpl;->handleUserChange()V
 PLcom/android/server/webkit/WebViewUpdateServiceImpl;->handleUserRemoved(I)V
 HSPLcom/android/server/webkit/WebViewUpdateServiceImpl;->isInstalledAndEnabledForAllUsers(Ljava/util/List;)Z
@@ -52534,10 +54316,12 @@
 PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport$ViewportWindow;->setAlpha(I)V
 HPLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport$ViewportWindow;->setBounds(Landroid/graphics/Region;)V
 PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport$ViewportWindow;->setShown(ZZ)V
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport$ViewportWindow;->updateSize()V
 HPLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->$r8$lambda$MxUzHdA1Tcpl-yTPz9gqe-Q5ynM(Lcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;Landroid/util/SparseArray;Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->-$$Nest$fgetmBorderWidth(Lcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;)F
 PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->-$$Nest$fgetmHalfBorderWidth(Lcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;)I
 PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->-$$Nest$fgetmScreenSize(Lcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;)Landroid/graphics/Point;
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->-$$Nest$mgetDisplaySizeLocked(Lcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;Landroid/graphics/Point;)V
 PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;-><init>(Lcom/android/server/wm/AccessibilityController$DisplayMagnifier;)V
 PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->destroyWindow()V
 HPLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->drawWindowIfNeeded(Landroid/view/SurfaceControl$Transaction;)V
@@ -52549,6 +54333,7 @@
 HPLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->isExcludedWindowType(I)Z
 HPLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->isMagnifying()Z
 HPLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->lambda$populateWindowsOnScreen$0(Landroid/util/SparseArray;Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->onDisplaySizeChanged()V
 HPLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->populateWindowsOnScreen(Landroid/util/SparseArray;)V
 HPLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->recomputeBounds()V+]Landroid/graphics/RectF;Landroid/graphics/RectF;]Landroid/os/Handler;Lcom/android/server/wm/AccessibilityController$DisplayMagnifier$MyHandler;]Landroid/graphics/Region;Landroid/graphics/Region;]Landroid/os/Message;Landroid/os/Message;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport$ViewportWindow;Lcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport$ViewportWindow;]Lcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;Lcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;
 PLcom/android/server/wm/AccessibilityController$DisplayMagnifier$MagnifiedViewport;->setMagnifiedRegionBorderShown(ZZ)V
@@ -52572,10 +54357,11 @@
 HPLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->drawMagnifiedRegionBorderIfNeeded(Landroid/view/SurfaceControl$Transaction;)V
 PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->getMagnificationRegion(Landroid/graphics/Region;)V
-PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->getMagnificationSpecForWindow(Lcom/android/server/wm/WindowState;)Landroid/view/MagnificationSpec;
+HPLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->getMagnificationSpecForWindow(Lcom/android/server/wm/WindowState;)Landroid/view/MagnificationSpec;
 PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->isForceShowingMagnifiableBounds()Z
 PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->notifyImeWindowVisibilityChanged(Z)V
 HPLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->onAppWindowTransition(II)V
+PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->onDisplaySizeChanged(Lcom/android/server/wm/DisplayContent;)V
 HPLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->onWindowTransition(Lcom/android/server/wm/WindowState;I)V
 PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->setForceShowMagnifiableBounds(Z)V
 PLcom/android/server/wm/AccessibilityController$DisplayMagnifier;->setMagnificationSpec(Landroid/view/MagnificationSpec;)V
@@ -52586,7 +54372,7 @@
 PLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;-><init>(Lcom/android/server/wm/WindowManagerService;ILcom/android/server/wm/WindowManagerInternal$WindowsForAccessibilityCallback;Lcom/android/server/wm/AccessibilityWindowsPopulator;)V
 HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->addPopulatedWindowInfo(Lcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;Landroid/graphics/Region;Ljava/util/List;Ljava/util/Set;)V
 HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->clearAndRecycleWindows(Ljava/util/List;)V
-HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->computeChangedWindows(Z)V+]Lcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;Lcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/RecentsAnimationController;Lcom/android/server/wm/RecentsAnimationController;]Lcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;Lcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;]Lcom/android/server/wm/AccessibilityController$AccessibilityControllerInternalImpl;Lcom/android/server/wm/AccessibilityController$AccessibilityControllerInternalImpl;]Landroid/view/IWindow;Landroid/view/ViewRootImpl$W;,Landroid/view/IWindow$Stub$Proxy;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;]Ljava/util/Set;Landroid/util/ArraySet;]Landroid/graphics/Region;Landroid/graphics/Region;]Lcom/android/server/wm/WindowManagerInternal$WindowsForAccessibilityCallback;Lcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/AccessibilityWindowsPopulator;Lcom/android/server/wm/AccessibilityWindowsPopulator;]Landroid/view/Display;Landroid/view/Display;
+HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->computeChangedWindows(Z)V+]Lcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;Lcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/RecentsAnimationController;Lcom/android/server/wm/RecentsAnimationController;]Lcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;Lcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;]Lcom/android/server/wm/AccessibilityController$AccessibilityControllerInternalImpl;Lcom/android/server/wm/AccessibilityController$AccessibilityControllerInternalImpl;]Landroid/view/IWindow;Landroid/view/IWindow$Stub$Proxy;,Landroid/view/ViewRootImpl$W;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;]Ljava/util/Set;Landroid/util/ArraySet;]Landroid/graphics/Region;Landroid/graphics/Region;]Lcom/android/server/wm/WindowManagerInternal$WindowsForAccessibilityCallback;Lcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/AccessibilityWindowsPopulator;Lcom/android/server/wm/AccessibilityWindowsPopulator;]Landroid/view/Display;Landroid/view/Display;
 HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->getTopFocusWindow()Lcom/android/server/wm/WindowState;+]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
 HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->isReportedWindowType(I)Z
 HPLcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;->performComputeChangedWindows(Z)V+]Landroid/os/Handler;Lcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver$MyHandler;]Lcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;Lcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;]Lcom/android/server/wm/AccessibilityController$AccessibilityControllerInternalImpl;Lcom/android/server/wm/AccessibilityController$AccessibilityControllerInternalImpl;
@@ -52611,13 +54397,13 @@
 HSPLcom/android/server/wm/AccessibilityController;->hasCallbacks()Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/wm/AccessibilityController$AccessibilityControllerInternalImpl;Lcom/android/server/wm/AccessibilityController$AccessibilityControllerInternalImpl;
 HPLcom/android/server/wm/AccessibilityController;->isUntouchableNavigationBar(Lcom/android/server/wm/WindowState;Landroid/graphics/Region;)Z
 HPLcom/android/server/wm/AccessibilityController;->onAppWindowTransition(II)V
-PLcom/android/server/wm/AccessibilityController;->onDisplayRemoved(I)V
-PLcom/android/server/wm/AccessibilityController;->onDisplaySizeChanged(Lcom/android/server/wm/DisplayContent;)V
+HPLcom/android/server/wm/AccessibilityController;->onDisplayRemoved(I)V
+HPLcom/android/server/wm/AccessibilityController;->onDisplaySizeChanged(Lcom/android/server/wm/DisplayContent;)V
 HPLcom/android/server/wm/AccessibilityController;->onFocusChanged(Lcom/android/server/wm/InputTarget;Lcom/android/server/wm/InputTarget;)V
 HPLcom/android/server/wm/AccessibilityController;->onSomeWindowResizedOrMoved([I)V
-HPLcom/android/server/wm/AccessibilityController;->onSomeWindowResizedOrMovedWithCallingUid(I[I)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/wm/AccessibilityController$AccessibilityControllerInternalImpl;Lcom/android/server/wm/AccessibilityController$AccessibilityControllerInternalImpl;]Lcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;Lcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;
+HPLcom/android/server/wm/AccessibilityController;->onSomeWindowResizedOrMovedWithCallingUid(I[I)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;Lcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;]Lcom/android/server/wm/AccessibilityController$AccessibilityControllerInternalImpl;Lcom/android/server/wm/AccessibilityController$AccessibilityControllerInternalImpl;
 HPLcom/android/server/wm/AccessibilityController;->onWindowFocusChangedNot(I)V
-HPLcom/android/server/wm/AccessibilityController;->onWindowTransition(Lcom/android/server/wm/WindowState;I)V
+HPLcom/android/server/wm/AccessibilityController;->onWindowTransition(Lcom/android/server/wm/WindowState;I)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/wm/AccessibilityController$AccessibilityControllerInternalImpl;Lcom/android/server/wm/AccessibilityController$AccessibilityControllerInternalImpl;
 HPLcom/android/server/wm/AccessibilityController;->performComputeChangedWindowsNot(IZ)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;Lcom/android/server/wm/AccessibilityController$WindowsForAccessibilityObserver;]Lcom/android/server/wm/AccessibilityController$AccessibilityControllerInternalImpl;Lcom/android/server/wm/AccessibilityController$AccessibilityControllerInternalImpl;
 HPLcom/android/server/wm/AccessibilityController;->populateTransformationMatrix(Lcom/android/server/wm/WindowState;Landroid/graphics/Matrix;)V
 HPLcom/android/server/wm/AccessibilityController;->sendCallbackToUninitializedObserversIfNeeded()V
@@ -52629,11 +54415,11 @@
 HPLcom/android/server/wm/AccessibilityController;->updateImeVisibilityIfNeeded(IZ)V
 HPLcom/android/server/wm/AccessibilityWindowsPopulator$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/AccessibilityWindowsPopulator;[Landroid/view/InputWindowHandle;[Landroid/window/WindowInfosListener$DisplayInfo;)V
 HPLcom/android/server/wm/AccessibilityWindowsPopulator$$ExternalSyntheticLambda0;->run()V
-PLcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow$$ExternalSyntheticLambda0;-><init>(Landroid/graphics/Matrix;Landroid/graphics/Matrix;Landroid/graphics/Region;)V
-PLcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;->$r8$lambda$GLgRVsQmPs45pA-yX7ZcJZ6VqzU(Landroid/graphics/Matrix;Landroid/graphics/Matrix;Landroid/graphics/Region;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow$$ExternalSyntheticLambda0;-><init>(Landroid/graphics/Matrix;Landroid/graphics/Matrix;Landroid/graphics/Region;)V
+HPLcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;->$r8$lambda$GLgRVsQmPs45pA-yX7ZcJZ6VqzU(Landroid/graphics/Matrix;Landroid/graphics/Matrix;Landroid/graphics/Region;Landroid/graphics/Rect;)V
 HPLcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;-><init>()V
-PLcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;->getLetterBoxBounds(Lcom/android/server/wm/WindowState;Landroid/graphics/Region;)V
+HPLcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;->getLetterBoxBounds(Lcom/android/server/wm/WindowState;Landroid/graphics/Region;)V
 HPLcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;->getTouchableRegionInScreen(Landroid/graphics/Region;)V
 HPLcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;->getTouchableRegionInWindow(Landroid/graphics/Region;)V
 HPLcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;->getTouchableRegionInWindow(ZLandroid/graphics/Region;Landroid/graphics/Region;Landroid/graphics/Rect;Landroid/graphics/Matrix;Landroid/graphics/Matrix;)V
@@ -52644,11 +54430,11 @@
 HPLcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;->ignoreRecentsAnimationForAccessibility()Z
 HPLcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;->initializeData(Lcom/android/server/wm/WindowManagerService;Landroid/view/InputWindowHandle;Landroid/graphics/Matrix;Landroid/os/IBinder;Landroid/graphics/Matrix;)Lcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;+]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;Lcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/lang/Object;Landroid/os/BinderProxy;,Landroid/view/ViewRootImpl$W;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/RecentsAnimationController;Lcom/android/server/wm/RecentsAnimationController;]Landroid/view/IWindow;Landroid/view/ViewRootImpl$W;,Landroid/view/IWindow$Stub$Proxy;]Landroid/view/InputWindowHandle;Landroid/view/InputWindowHandle;
 HPLcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;->isFocused()Z
-PLcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;->isPIPMenu()Z
+HPLcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;->isPIPMenu()Z
 HPLcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;->isTouchable()Z
 PLcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;->isTrustedOverlay()Z
 HPLcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;->isUntouchableNavigationBar()Z
-HPLcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;->lambda$getUnMagnifiedTouchableRegion$0(Landroid/graphics/Matrix;Landroid/graphics/Matrix;Landroid/graphics/Region;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;->lambda$getUnMagnifiedTouchableRegion$0(Landroid/graphics/Matrix;Landroid/graphics/Matrix;Landroid/graphics/Region;Landroid/graphics/Rect;)V+]Landroid/graphics/Region;Landroid/graphics/Region;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
 HPLcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;->setLetterBoxBoundsIfNeeded(Landroid/graphics/Region;)Ljava/lang/Boolean;
 HPLcom/android/server/wm/AccessibilityWindowsPopulator$AccessibilityWindow;->shouldMagnify()Z
 HSPLcom/android/server/wm/AccessibilityWindowsPopulator$MyHandler;-><init>(Lcom/android/server/wm/AccessibilityWindowsPopulator;Landroid/os/Looper;)V
@@ -52666,7 +54452,7 @@
 HPLcom/android/server/wm/AccessibilityWindowsPopulator;->generateInverseMatrix(Landroid/view/MagnificationSpec;Landroid/graphics/Matrix;)V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
 HPLcom/android/server/wm/AccessibilityWindowsPopulator;->generateInverseMatrixBasedOnProperMagnificationSpecForDisplay(Ljava/util/List;Landroid/view/MagnificationSpec;Landroid/view/MagnificationSpec;)V+]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/wm/AccessibilityWindowsPopulator;Lcom/android/server/wm/AccessibilityWindowsPopulator;]Landroid/view/IWindow;Landroid/view/IWindow$Stub$Proxy;]Landroid/view/InputWindowHandle;Landroid/view/InputWindowHandle;
 HPLcom/android/server/wm/AccessibilityWindowsPopulator;->generateMagnificationSpecInverseMatrix(Landroid/view/InputWindowHandle;Landroid/view/MagnificationSpec;Landroid/view/MagnificationSpec;Landroid/graphics/Matrix;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/wm/AccessibilityWindowsPopulator;Lcom/android/server/wm/AccessibilityWindowsPopulator;
-HPLcom/android/server/wm/AccessibilityWindowsPopulator;->getDisplaysForWindowsChanged(Ljava/util/List;Landroid/util/SparseArray;Landroid/util/SparseArray;)V+]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;
+HPLcom/android/server/wm/AccessibilityWindowsPopulator;->getDisplaysForWindowsChanged(Ljava/util/List;Landroid/util/SparseArray;Landroid/util/SparseArray;)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/List;Ljava/util/ArrayList;
 HPLcom/android/server/wm/AccessibilityWindowsPopulator;->getWindowTransformMatrix(Landroid/os/IBinder;Landroid/graphics/Matrix;)Z+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Ljava/util/Map;Ljava/util/HashMap;
 HPLcom/android/server/wm/AccessibilityWindowsPopulator;->getWindowsTransformMatrix(Ljava/util/List;)Ljava/util/HashMap;+]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/view/InputWindowHandle;Landroid/view/InputWindowHandle;]Landroid/view/IWindow;Landroid/view/IWindow$Stub$Proxy;,Landroid/view/ViewRootImpl$W;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 HPLcom/android/server/wm/AccessibilityWindowsPopulator;->hasWindowsChanged(Ljava/util/List;Ljava/util/List;)Z+]Ljava/lang/Object;Landroid/os/BinderProxy;,Landroid/view/ViewRootImpl$W;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/view/IWindow;Landroid/view/IWindow$Stub$Proxy;,Landroid/view/ViewRootImpl$W;]Landroid/view/InputWindowHandle;Landroid/view/InputWindowHandle;
@@ -52675,19 +54461,19 @@
 HPLcom/android/server/wm/AccessibilityWindowsPopulator;->onWindowInfosChanged([Landroid/view/InputWindowHandle;[Landroid/window/WindowInfosListener$DisplayInfo;)V+]Landroid/os/Handler;Lcom/android/server/wm/AccessibilityWindowsPopulator$MyHandler;
 HPLcom/android/server/wm/AccessibilityWindowsPopulator;->onWindowInfosChangedInternal([Landroid/view/InputWindowHandle;[Landroid/window/WindowInfosListener$DisplayInfo;)V+]Landroid/os/Handler;Lcom/android/server/wm/AccessibilityWindowsPopulator$MyHandler;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/Map;Ljava/util/HashMap;]Landroid/view/InputWindowHandle;Landroid/view/InputWindowHandle;]Lcom/android/server/wm/AccessibilityWindowsPopulator;Lcom/android/server/wm/AccessibilityWindowsPopulator;
 HPLcom/android/server/wm/AccessibilityWindowsPopulator;->populateVisibleWindowHandlesAndNotifyWindowsChangeIfNeeded()V+]Landroid/os/Handler;Lcom/android/server/wm/AccessibilityWindowsPopulator$MyHandler;]Landroid/os/Message;Landroid/os/Message;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/wm/AccessibilityWindowsPopulator;Lcom/android/server/wm/AccessibilityWindowsPopulator;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
-HPLcom/android/server/wm/AccessibilityWindowsPopulator;->populateVisibleWindowsOnScreenLocked(ILjava/util/List;)V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/ShellRoot;Lcom/android/server/wm/ShellRoot;
+HPLcom/android/server/wm/AccessibilityWindowsPopulator;->populateVisibleWindowsOnScreenLocked(ILjava/util/List;)V+]Lcom/android/server/wm/ShellRoot;Lcom/android/server/wm/ShellRoot;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
 PLcom/android/server/wm/AccessibilityWindowsPopulator;->releaseResources()V
 HPLcom/android/server/wm/AccessibilityWindowsPopulator;->selectProperMagnificationSpecByComparingIdentityDegree([F[F)Z+]Landroid/graphics/Matrix;Landroid/graphics/Matrix$1;
 PLcom/android/server/wm/AccessibilityWindowsPopulator;->setMagnificationSpec(ILandroid/view/MagnificationSpec;)V
 PLcom/android/server/wm/AccessibilityWindowsPopulator;->setWindowsNotification(Z)V
 HPLcom/android/server/wm/AccessibilityWindowsPopulator;->transformMagnificationSpecToMatrix(Landroid/view/MagnificationSpec;Landroid/graphics/Matrix;)V+]Landroid/graphics/Matrix;Landroid/graphics/Matrix;
-PLcom/android/server/wm/ActivityAssistInfo;-><init>(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/ActivityAssistInfo;-><init>(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityAssistInfo;->getActivityToken()Landroid/os/IBinder;
 PLcom/android/server/wm/ActivityAssistInfo;->getAssistToken()Landroid/os/IBinder;
 PLcom/android/server/wm/ActivityAssistInfo;->getTaskId()I
 PLcom/android/server/wm/ActivityClientController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityClientController$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/ActivityClientController$$ExternalSyntheticLambda1;-><init>()V
+HSPLcom/android/server/wm/ActivityClientController$$ExternalSyntheticLambda1;-><init>()V
 PLcom/android/server/wm/ActivityClientController$$ExternalSyntheticLambda1;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/ActivityClientController$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;I)V
 PLcom/android/server/wm/ActivityClientController$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;)V
@@ -52696,15 +54482,15 @@
 PLcom/android/server/wm/ActivityClientController;->$r8$lambda$hCt2qWoVpnBm6CUvrRaFXJHsykQ(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;ILcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/ActivityClientController;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;)V
 HPLcom/android/server/wm/ActivityClientController;->activityDestroyed(Landroid/os/IBinder;)V
-HPLcom/android/server/wm/ActivityClientController;->activityIdle(Landroid/os/IBinder;Landroid/content/res/Configuration;Z)V
+HSPLcom/android/server/wm/ActivityClientController;->activityIdle(Landroid/os/IBinder;Landroid/content/res/Configuration;Z)V
 PLcom/android/server/wm/ActivityClientController;->activityLocalRelaunch(Landroid/os/IBinder;)V
 HPLcom/android/server/wm/ActivityClientController;->activityPaused(Landroid/os/IBinder;)V
-PLcom/android/server/wm/ActivityClientController;->activityRelaunched(Landroid/os/IBinder;)V
-HPLcom/android/server/wm/ActivityClientController;->activityResumed(Landroid/os/IBinder;Z)V
+HPLcom/android/server/wm/ActivityClientController;->activityRelaunched(Landroid/os/IBinder;)V
+HSPLcom/android/server/wm/ActivityClientController;->activityResumed(Landroid/os/IBinder;Z)V
 HPLcom/android/server/wm/ActivityClientController;->activityStopped(Landroid/os/IBinder;Landroid/os/Bundle;Landroid/os/PersistableBundle;Ljava/lang/CharSequence;)V
 HPLcom/android/server/wm/ActivityClientController;->activityTopResumedStateLost()V
 PLcom/android/server/wm/ActivityClientController;->canGetLaunchedFrom()Z
-PLcom/android/server/wm/ActivityClientController;->convertFromTranslucent(Landroid/os/IBinder;)Z
+HPLcom/android/server/wm/ActivityClientController;->convertFromTranslucent(Landroid/os/IBinder;)Z
 HPLcom/android/server/wm/ActivityClientController;->convertToTranslucent(Landroid/os/IBinder;Landroid/os/Bundle;)Z
 PLcom/android/server/wm/ActivityClientController;->dismissKeyguard(Landroid/os/IBinder;Lcom/android/internal/policy/IKeyguardDismissCallback;Ljava/lang/CharSequence;)V
 HPLcom/android/server/wm/ActivityClientController;->ensureValidPictureInPictureActivityParams(Ljava/lang/String;Landroid/os/IBinder;Landroid/app/PictureInPictureParams;)Lcom/android/server/wm/ActivityRecord;
@@ -52712,38 +54498,39 @@
 HPLcom/android/server/wm/ActivityClientController;->finishActivity(Landroid/os/IBinder;ILandroid/content/Intent;I)Z
 PLcom/android/server/wm/ActivityClientController;->finishActivityAffinity(Landroid/os/IBinder;)Z
 PLcom/android/server/wm/ActivityClientController;->finishSubActivity(Landroid/os/IBinder;Ljava/lang/String;I)V
-PLcom/android/server/wm/ActivityClientController;->getActivityTokenBelow(Landroid/os/IBinder;)Landroid/os/IBinder;
+HSPLcom/android/server/wm/ActivityClientController;->getActivityTokenBelow(Landroid/os/IBinder;)Landroid/os/IBinder;
 PLcom/android/server/wm/ActivityClientController;->getCallingActivity(Landroid/os/IBinder;)Landroid/content/ComponentName;
-PLcom/android/server/wm/ActivityClientController;->getCallingPackage(Landroid/os/IBinder;)Ljava/lang/String;
-PLcom/android/server/wm/ActivityClientController;->getCallingRecord(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityClientController;->getDisplayId(Landroid/os/IBinder;)I
+HPLcom/android/server/wm/ActivityClientController;->getCallingPackage(Landroid/os/IBinder;)Ljava/lang/String;
+HPLcom/android/server/wm/ActivityClientController;->getCallingRecord(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityClientController;->getDisplayId(Landroid/os/IBinder;)I
 PLcom/android/server/wm/ActivityClientController;->getLaunchedFromPackage(Landroid/os/IBinder;)Ljava/lang/String;
 PLcom/android/server/wm/ActivityClientController;->getLaunchedFromUid(Landroid/os/IBinder;)I
 HPLcom/android/server/wm/ActivityClientController;->getRequestedOrientation(Landroid/os/IBinder;)I+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/ActivityClientController;->getTaskForActivity(Landroid/os/IBinder;Z)I
 HPLcom/android/server/wm/ActivityClientController;->invalidateHomeTaskSnapshot(Landroid/os/IBinder;)V
 PLcom/android/server/wm/ActivityClientController;->isLauncherActivity(Landroid/content/ComponentName;)Z
+PLcom/android/server/wm/ActivityClientController;->isRootVoiceInteraction(Landroid/os/IBinder;)Z
 HPLcom/android/server/wm/ActivityClientController;->isTopOfTask(Landroid/os/IBinder;)Z
 PLcom/android/server/wm/ActivityClientController;->lambda$finishActivityAffinity$0(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/ActivityClientController;->lambda$finishSubActivity$1(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;ILcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityClientController;->lambda$getActivityTokenBelow$2(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/ActivityClientController;->moveActivityTaskToBack(Landroid/os/IBinder;Z)Z
+HPLcom/android/server/wm/ActivityClientController;->moveActivityTaskToBack(Landroid/os/IBinder;Z)Z
 PLcom/android/server/wm/ActivityClientController;->navigateUpTo(Landroid/os/IBinder;Landroid/content/Intent;ILandroid/content/Intent;)Z
 HPLcom/android/server/wm/ActivityClientController;->onBackPressedOnTaskRoot(Landroid/os/IBinder;Landroid/app/IRequestFinishCallback;)V
 PLcom/android/server/wm/ActivityClientController;->onPictureInPictureStateChanged(Lcom/android/server/wm/ActivityRecord;Landroid/app/PictureInPictureUiState;)V
 HSPLcom/android/server/wm/ActivityClientController;->onSystemReady()V
-HPLcom/android/server/wm/ActivityClientController;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
+HSPLcom/android/server/wm/ActivityClientController;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HPLcom/android/server/wm/ActivityClientController;->overridePendingTransition(Landroid/os/IBinder;Ljava/lang/String;III)V
 HPLcom/android/server/wm/ActivityClientController;->registerRemoteAnimations(Landroid/os/IBinder;Landroid/view/RemoteAnimationDefinition;)V
 PLcom/android/server/wm/ActivityClientController;->releaseActivityInstance(Landroid/os/IBinder;)Z
 PLcom/android/server/wm/ActivityClientController;->reportActivityFullyDrawn(Landroid/os/IBinder;Z)V
-HPLcom/android/server/wm/ActivityClientController;->reportSizeConfigurations(Landroid/os/IBinder;Landroid/window/SizeConfigurationBuckets;)V
+HSPLcom/android/server/wm/ActivityClientController;->reportSizeConfigurations(Landroid/os/IBinder;Landroid/window/SizeConfigurationBuckets;)V
 PLcom/android/server/wm/ActivityClientController;->setImmersive(Landroid/os/IBinder;Z)V
 HPLcom/android/server/wm/ActivityClientController;->setPictureInPictureParams(Landroid/os/IBinder;Landroid/app/PictureInPictureParams;)V
 HPLcom/android/server/wm/ActivityClientController;->setRecentsScreenshotEnabled(Landroid/os/IBinder;Z)V
-HPLcom/android/server/wm/ActivityClientController;->setRequestedOrientation(Landroid/os/IBinder;I)V
+HPLcom/android/server/wm/ActivityClientController;->setRequestedOrientation(Landroid/os/IBinder;I)V+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/ActivityClientController;->setShowWhenLocked(Landroid/os/IBinder;Z)V
-HPLcom/android/server/wm/ActivityClientController;->setTaskDescription(Landroid/os/IBinder;Landroid/app/ActivityManager$TaskDescription;)V+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityClientController;->setTaskDescription(Landroid/os/IBinder;Landroid/app/ActivityManager$TaskDescription;)V+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/ActivityClientController;->setTurnScreenOn(Landroid/os/IBinder;Z)V
 PLcom/android/server/wm/ActivityClientController;->shouldUpRecreateTask(Landroid/os/IBinder;Ljava/lang/String;)Z
 PLcom/android/server/wm/ActivityClientController;->splashScreenAttached(Landroid/os/IBinder;)V
@@ -52753,7 +54540,7 @@
 PLcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptResult;-><init>(Landroid/content/Intent;Landroid/app/ActivityOptions;)V
 HSPLcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptorInfo;-><init>(IIILjava/lang/String;Ljava/lang/String;Landroid/content/Intent;Landroid/content/pm/ResolveInfo;Landroid/content/pm/ActivityInfo;Ljava/lang/String;IILandroid/app/ActivityOptions;Ljava/lang/Runnable;)V
 HSPLcom/android/server/wm/ActivityInterceptorCallback;-><init>()V
-PLcom/android/server/wm/ActivityInterceptorCallback;->onActivityLaunched(Landroid/app/TaskInfo;Landroid/content/pm/ActivityInfo;Lcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptorInfo;)V
+HSPLcom/android/server/wm/ActivityInterceptorCallback;->onActivityLaunched(Landroid/app/TaskInfo;Landroid/content/pm/ActivityInfo;Lcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptorInfo;)V
 HSPLcom/android/server/wm/ActivityMetricsLaunchObserver;-><init>()V
 PLcom/android/server/wm/ActivityMetricsLaunchObserver;->onActivityLaunchCancelled(J)V
 PLcom/android/server/wm/ActivityMetricsLaunchObserver;->onActivityLaunchFinished(JLandroid/content/ComponentName;J)V
@@ -52770,44 +54557,44 @@
 PLcom/android/server/wm/ActivityMetricsLogger$$ExternalSyntheticLambda3;-><init>()V
 PLcom/android/server/wm/ActivityMetricsLogger$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/ActivityMetricsLogger$$ExternalSyntheticLambda4;-><init>()V
-PLcom/android/server/wm/ActivityMetricsLogger$$ExternalSyntheticLambda4;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/ActivityMetricsLogger$$ExternalSyntheticLambda4;->test(Ljava/lang/Object;)Z
 HPLcom/android/server/wm/ActivityMetricsLogger$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/wm/ActivityMetricsLogger;JJILcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;Z)V
 HPLcom/android/server/wm/ActivityMetricsLogger$$ExternalSyntheticLambda5;->run()V
 HPLcom/android/server/wm/ActivityMetricsLogger$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/wm/ActivityMetricsLogger;Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)V
 HPLcom/android/server/wm/ActivityMetricsLogger$$ExternalSyntheticLambda6;->run()V
-HPLcom/android/server/wm/ActivityMetricsLogger$LaunchingState;->-$$Nest$fgetmAssociatedTransitionInfo(Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;)Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;
-HPLcom/android/server/wm/ActivityMetricsLogger$LaunchingState;->-$$Nest$fgetmCurrentTransitionStartTimeNs(Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;)J
-HPLcom/android/server/wm/ActivityMetricsLogger$LaunchingState;->-$$Nest$fgetmCurrentUpTimeMs(Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;)J
-HPLcom/android/server/wm/ActivityMetricsLogger$LaunchingState;->-$$Nest$fputmAssociatedTransitionInfo(Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
+HSPLcom/android/server/wm/ActivityMetricsLogger$LaunchingState;->-$$Nest$fgetmAssociatedTransitionInfo(Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;)Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;
+HSPLcom/android/server/wm/ActivityMetricsLogger$LaunchingState;->-$$Nest$fgetmCurrentTransitionStartTimeNs(Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;)J
+HSPLcom/android/server/wm/ActivityMetricsLogger$LaunchingState;->-$$Nest$fgetmCurrentUpTimeMs(Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;)J
+HSPLcom/android/server/wm/ActivityMetricsLogger$LaunchingState;->-$$Nest$fputmAssociatedTransitionInfo(Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
 HSPLcom/android/server/wm/ActivityMetricsLogger$LaunchingState;->-$$Nest$fputmCurrentTransitionStartTimeNs(Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;J)V
 HSPLcom/android/server/wm/ActivityMetricsLogger$LaunchingState;-><init>()V
 HPLcom/android/server/wm/ActivityMetricsLogger$LaunchingState;->stopTrace(ZLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
-HPLcom/android/server/wm/ActivityMetricsLogger$PackageCompatStateInfo;-><init>()V
-HPLcom/android/server/wm/ActivityMetricsLogger$PackageCompatStateInfo;-><init>(Lcom/android/server/wm/ActivityMetricsLogger$PackageCompatStateInfo-IA;)V
-HPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;-><init>(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;Landroid/app/ActivityOptions;IZZ)V
-PLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->calculateCurrentDelay()I
-HPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->calculateDelay(J)I
+HSPLcom/android/server/wm/ActivityMetricsLogger$PackageCompatStateInfo;-><init>()V
+HSPLcom/android/server/wm/ActivityMetricsLogger$PackageCompatStateInfo;-><init>(Lcom/android/server/wm/ActivityMetricsLogger$PackageCompatStateInfo-IA;)V
+HSPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;-><init>(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;Landroid/app/ActivityOptions;IZZ)V
+HSPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->calculateCurrentDelay()I
+HSPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->calculateDelay(J)I
 HPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->canCoalesce(Lcom/android/server/wm/ActivityRecord;)Z
-HPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->contains(Lcom/android/server/wm/ActivityRecord;)Z
-HPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->create(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;Landroid/app/ActivityOptions;ZZZI)Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;
-HPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->isInterestingToLoggerAndObserver()Z
-HPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->setLatestLaunchedActivity(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;->-$$Nest$fgetapplicationInfo(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)Landroid/content/pm/ApplicationInfo;
+HSPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->contains(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->create(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;Landroid/app/ActivityOptions;ZZZI)Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;
+HSPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->isInterestingToLoggerAndObserver()Z
+HSPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;->setLatestLaunchedActivity(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;->-$$Nest$fgetapplicationInfo(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)Landroid/content/pm/ApplicationInfo;
 PLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;->-$$Nest$fgetbindApplicationDelayMs(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)I
-PLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;->-$$Nest$fgetlaunchedActivityLaunchToken(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)Ljava/lang/String;
-PLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;->-$$Nest$fgetlaunchedActivityLaunchedFromPackage(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)Ljava/lang/String;
+HPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;->-$$Nest$fgetlaunchedActivityLaunchToken(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)Ljava/lang/String;
+HPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;->-$$Nest$fgetlaunchedActivityLaunchedFromPackage(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)Ljava/lang/String;
 PLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;->-$$Nest$fgetprocessName(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)Ljava/lang/String;
 PLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;->-$$Nest$fgetprocessRecord(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)Lcom/android/server/wm/WindowProcessController;
 PLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;->-$$Nest$fgetreason(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)I
 HPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;->-$$Nest$fgetstartingWindowDelayMs(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)I
-HPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;-><init>(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
-PLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;-><init>(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot-IA;)V
-HPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;-><init>(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;Lcom/android/server/wm/ActivityRecord;I)V
+HSPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;-><init>(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
+HSPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;-><init>(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot-IA;)V
+HSPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;-><init>(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;Lcom/android/server/wm/ActivityRecord;I)V
 PLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;-><init>(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;Lcom/android/server/wm/ActivityRecord;ILcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot-IA;)V
-HPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;->getLaunchState()I
+HSPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;->getLaunchState()I
 HPLcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;->getPackageOptimizationInfo(Landroid/content/pm/dex/ArtManagerInternal;)Landroid/content/pm/dex/PackageOptimizationInfo;
 PLcom/android/server/wm/ActivityMetricsLogger;->$r8$lambda$3_ndX4o6ziHcA8AB_FGyJpZGnuA(Lcom/android/server/wm/ActivityMetricsLogger;Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)V
-PLcom/android/server/wm/ActivityMetricsLogger;->$r8$lambda$AN4R4fpXOBu1AJB7opiOXc-EqZ8(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/ActivityMetricsLogger;->$r8$lambda$AN4R4fpXOBu1AJB7opiOXc-EqZ8(Lcom/android/server/wm/ActivityRecord;)Z
 HPLcom/android/server/wm/ActivityMetricsLogger;->$r8$lambda$Bewa_GosC-HFfrJTUUS53ZpdQu8(Lcom/android/server/wm/ActivityMetricsLogger;Ljava/lang/String;I)V
 PLcom/android/server/wm/ActivityMetricsLogger;->$r8$lambda$EziafybCbl7j2MuL8FOIpJsTplc(Lcom/android/server/wm/ActivityMetricsLogger;JJILcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;Z)V
 PLcom/android/server/wm/ActivityMetricsLogger;->$r8$lambda$FXgmTIvwnBdpRpzhrZgUqTp_718(Lcom/android/server/wm/ActivityMetricsLogger;Lcom/android/server/wm/ActivityRecord;ZLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
@@ -52817,70 +54604,72 @@
 HSPLcom/android/server/wm/ActivityMetricsLogger;-><init>(Lcom/android/server/wm/ActivityTaskSupervisor;Landroid/os/Looper;)V
 HPLcom/android/server/wm/ActivityMetricsLogger;->abort(Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;Ljava/lang/String;)V
 PLcom/android/server/wm/ActivityMetricsLogger;->abort(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;Ljava/lang/String;)V
-PLcom/android/server/wm/ActivityMetricsLogger;->checkActivityToBeDrawn(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityMetricsLogger;->convertTransitionTypeToLaunchObserverTemperature(I)I
+HPLcom/android/server/wm/ActivityMetricsLogger;->checkActivityToBeDrawn(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityMetricsLogger;->convertTransitionTypeToLaunchObserverTemperature(I)I
 HPLcom/android/server/wm/ActivityMetricsLogger;->done(ZLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;Ljava/lang/String;J)V
 HPLcom/android/server/wm/ActivityMetricsLogger;->findAppCompatStateToLog(Lcom/android/server/wm/ActivityMetricsLogger$PackageCompatStateInfo;I)V
-HPLcom/android/server/wm/ActivityMetricsLogger;->getActiveTransitionInfo(Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;+]Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/wm/ActivityMetricsLogger;->getAppHibernationManagerInternal()Lcom/android/server/apphibernation/AppHibernationManagerInternal;
+HSPLcom/android/server/wm/ActivityMetricsLogger;->getActiveTransitionInfo(Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;+]Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/ActivityMetricsLogger;->getAppHibernationManagerInternal()Lcom/android/server/apphibernation/AppHibernationManagerInternal;
 PLcom/android/server/wm/ActivityMetricsLogger;->getAppStartTransitionType(IZ)I
-PLcom/android/server/wm/ActivityMetricsLogger;->getArtManagerInternal()Landroid/content/pm/dex/ArtManagerInternal;
+HPLcom/android/server/wm/ActivityMetricsLogger;->getArtManagerInternal()Landroid/content/pm/dex/ArtManagerInternal;
 HSPLcom/android/server/wm/ActivityMetricsLogger;->getLaunchObserverRegistry()Lcom/android/server/wm/ActivityMetricsLaunchObserverRegistry;
 PLcom/android/server/wm/ActivityMetricsLogger;->isIncrementalLoading(Ljava/lang/String;I)Z
-PLcom/android/server/wm/ActivityMetricsLogger;->lambda$checkActivityToBeDrawn$0(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/ActivityMetricsLogger;->lambda$checkActivityToBeDrawn$0(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/ActivityMetricsLogger;->lambda$logAppTransitionFinished$1(JJILcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;Z)V
 PLcom/android/server/wm/ActivityMetricsLogger;->lambda$logAppTransitionFinished$2(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)V
 PLcom/android/server/wm/ActivityMetricsLogger;->lambda$logAppTransitionReportedDrawn$3(Lcom/android/server/wm/ActivityRecord;ZLcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
 PLcom/android/server/wm/ActivityMetricsLogger;->lambda$logAppTransitionReportedDrawn$4(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)V
-PLcom/android/server/wm/ActivityMetricsLogger;->launchObserverNotifyActivityLaunchCancelled(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
+HPLcom/android/server/wm/ActivityMetricsLogger;->launchObserverNotifyActivityLaunchCancelled(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
 HPLcom/android/server/wm/ActivityMetricsLogger;->launchObserverNotifyActivityLaunchFinished(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;J)V
-HPLcom/android/server/wm/ActivityMetricsLogger;->launchObserverNotifyActivityLaunched(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
+HSPLcom/android/server/wm/ActivityMetricsLogger;->launchObserverNotifyActivityLaunched(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
 HPLcom/android/server/wm/ActivityMetricsLogger;->launchObserverNotifyIntentFailed(J)V
 HSPLcom/android/server/wm/ActivityMetricsLogger;->launchObserverNotifyIntentStarted(Landroid/content/Intent;J)V
 PLcom/android/server/wm/ActivityMetricsLogger;->launchObserverNotifyReportFullyDrawn(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;J)V
 HPLcom/android/server/wm/ActivityMetricsLogger;->logAbortedBgActivityStart(Landroid/content/Intent;Lcom/android/server/wm/WindowProcessController;ILjava/lang/String;IZIIZZ)V
-HPLcom/android/server/wm/ActivityMetricsLogger;->logAppCompatState(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/ActivityMetricsLogger;->logAppCompatStateInternal(Lcom/android/server/wm/ActivityRecord;IILcom/android/server/wm/ActivityMetricsLogger$PackageCompatStateInfo;)V
+HSPLcom/android/server/wm/ActivityMetricsLogger;->logAppCompatState(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityMetricsLogger;->logAppCompatStateInternal(Lcom/android/server/wm/ActivityRecord;IILcom/android/server/wm/ActivityMetricsLogger$PackageCompatStateInfo;)V
 HPLcom/android/server/wm/ActivityMetricsLogger;->logAppDisplayed(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)V
-PLcom/android/server/wm/ActivityMetricsLogger;->logAppFullyDrawn(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)V
+HPLcom/android/server/wm/ActivityMetricsLogger;->logAppFullyDrawn(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)V
 HPLcom/android/server/wm/ActivityMetricsLogger;->logAppStartMemoryStateCapture(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;)V
 HPLcom/android/server/wm/ActivityMetricsLogger;->logAppTransition(JJILcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;Z)V
-PLcom/android/server/wm/ActivityMetricsLogger;->logAppTransitionCancel(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
+HPLcom/android/server/wm/ActivityMetricsLogger;->logAppTransitionCancel(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
 HPLcom/android/server/wm/ActivityMetricsLogger;->logAppTransitionFinished(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;Z)V
 HPLcom/android/server/wm/ActivityMetricsLogger;->logAppTransitionReportedDrawn(Lcom/android/server/wm/ActivityRecord;Z)Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;
 HPLcom/android/server/wm/ActivityMetricsLogger;->logWindowState()V
 HPLcom/android/server/wm/ActivityMetricsLogger;->logWindowState(Ljava/lang/String;I)V
-HPLcom/android/server/wm/ActivityMetricsLogger;->notifyActivityLaunched(Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;IZLcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)V
+HSPLcom/android/server/wm/ActivityMetricsLogger;->notifyActivityLaunched(Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;IZLcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)V
 PLcom/android/server/wm/ActivityMetricsLogger;->notifyActivityLaunching(Landroid/content/Intent;)Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;
 HSPLcom/android/server/wm/ActivityMetricsLogger;->notifyActivityLaunching(Landroid/content/Intent;Lcom/android/server/wm/ActivityRecord;I)Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;
 PLcom/android/server/wm/ActivityMetricsLogger;->notifyActivityRelaunched(Lcom/android/server/wm/ActivityRecord;)V
 HPLcom/android/server/wm/ActivityMetricsLogger;->notifyActivityRemoved(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/ActivityMetricsLogger;->notifyBeforePackageUnstopped(Ljava/lang/String;)V
+HSPLcom/android/server/wm/ActivityMetricsLogger;->notifyBeforePackageUnstopped(Ljava/lang/String;)V
 HSPLcom/android/server/wm/ActivityMetricsLogger;->notifyBindApplication(Landroid/content/pm/ApplicationInfo;)V+]Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/wm/ActivityMetricsLogger;->notifyStartingWindowDrawn(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/ActivityMetricsLogger;->notifyTransitionStarting(Landroid/util/ArrayMap;)V
-HPLcom/android/server/wm/ActivityMetricsLogger;->notifyVisibilityChanged(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/ActivityMetricsLogger;->notifyWindowsDrawn(Lcom/android/server/wm/ActivityRecord;J)Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;
+HSPLcom/android/server/wm/ActivityMetricsLogger;->notifyTransitionStarting(Landroid/util/ArrayMap;)V
+HSPLcom/android/server/wm/ActivityMetricsLogger;->notifyVisibilityChanged(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityMetricsLogger;->notifyWindowsDrawn(Lcom/android/server/wm/ActivityRecord;J)Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;
 HPLcom/android/server/wm/ActivityMetricsLogger;->scheduleCheckActivityToBeDrawn(Lcom/android/server/wm/ActivityRecord;J)V
-HPLcom/android/server/wm/ActivityMetricsLogger;->scheduleCheckActivityToBeDrawnIfSleeping(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/ActivityMetricsLogger;->startLaunchTrace(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
+HSPLcom/android/server/wm/ActivityMetricsLogger;->scheduleCheckActivityToBeDrawnIfSleeping(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityMetricsLogger;->startLaunchTrace(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
 HPLcom/android/server/wm/ActivityMetricsLogger;->stopLaunchTrace(Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;)V
 PLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda0;->binderDied()V
 HPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda10;-><init>()V
 HPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda10;->apply(Ljava/lang/Object;)Z
-HPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda12;-><init>(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda12;->test(Ljava/lang/Object;)Z
-HPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda13;-><init>()V
+HSPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda11;-><init>(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda11;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda12;-><init>(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda12;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda13;-><init>()V
 HPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda13;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda14;-><init>()V
 PLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda14;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda15;-><init>()V
 PLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda15;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda16;-><init>()V
-HPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda16;->accept(Ljava/lang/Object;)V
-HPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda17;-><init>(Lcom/android/server/wm/WindowManagerService;)V
-HPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda17;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda16;-><init>()V
+HSPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda16;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda17;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+HSPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda17;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda18;-><init>()V
 PLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda18;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda19;-><init>()V
@@ -52903,14 +54692,14 @@
 PLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda26;->applyAppSaturation([F[F)V
 PLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda27;-><init>(Lcom/android/server/wm/ActivityRecord;[F[F)V
 PLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda27;->run()V
-HPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda28;-><init>(Landroid/content/Context;)V
-HPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda28;->get()Ljava/lang/Object;
+HSPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda28;-><init>(Landroid/content/Context;)V
+HSPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda28;->get()Ljava/lang/Object;
 HPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda29;-><init>()V
 HPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda29;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda2;-><init>()V
 HPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda2;->apply(Ljava/lang/Object;)Z
-HPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda3;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda3;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda4;->get()Ljava/lang/Object;
 PLcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/wm/ActivityRecord;)V
@@ -52926,14 +54715,14 @@
 HSPLcom/android/server/wm/ActivityRecord$1;-><init>(Lcom/android/server/wm/ActivityRecord;)V
 HPLcom/android/server/wm/ActivityRecord$1;->run()V
 HSPLcom/android/server/wm/ActivityRecord$2;-><init>(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/ActivityRecord$2;->run()V
+HPLcom/android/server/wm/ActivityRecord$2;->run()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;
 HSPLcom/android/server/wm/ActivityRecord$3;-><init>(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityRecord$3;->run()V
 HSPLcom/android/server/wm/ActivityRecord$4;-><init>(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityRecord$4;->run()V
 HSPLcom/android/server/wm/ActivityRecord$5;-><init>(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityRecord$5;->run()V
-PLcom/android/server/wm/ActivityRecord$6;-><clinit>()V
+HSPLcom/android/server/wm/ActivityRecord$6;-><clinit>()V
 HSPLcom/android/server/wm/ActivityRecord$AddStartingWindow;-><init>(Lcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/ActivityRecord$AddStartingWindow;-><init>(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord$AddStartingWindow-IA;)V
 HPLcom/android/server/wm/ActivityRecord$AddStartingWindow;->run()V
@@ -52961,20 +54750,20 @@
 HPLcom/android/server/wm/ActivityRecord$CompatDisplayInsets;-><init>(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/ActivityRecord;Landroid/graphics/Rect;)V
 PLcom/android/server/wm/ActivityRecord$CompatDisplayInsets;->getBoundsByRotation(Landroid/graphics/Rect;I)V
 HPLcom/android/server/wm/ActivityRecord$CompatDisplayInsets;->getContainerBounds(Landroid/graphics/Rect;Landroid/graphics/Rect;IIZZ)V
-PLcom/android/server/wm/ActivityRecord$CompatDisplayInsets;->getFrameByOrientation(Landroid/graphics/Rect;I)V
+HPLcom/android/server/wm/ActivityRecord$CompatDisplayInsets;->getFrameByOrientation(Landroid/graphics/Rect;I)V
 PLcom/android/server/wm/ActivityRecord$CompatDisplayInsets;->getRotationZeroDimensions(Landroid/graphics/Rect;I)Landroid/graphics/Point;
 PLcom/android/server/wm/ActivityRecord$CompatDisplayInsets;->updateInsetsForBounds(Landroid/graphics/Rect;IILandroid/graphics/Rect;)V
-PLcom/android/server/wm/ActivityRecord$State;-><clinit>()V
-PLcom/android/server/wm/ActivityRecord$State;-><init>(Ljava/lang/String;I)V
-PLcom/android/server/wm/ActivityRecord$State;->values()[Lcom/android/server/wm/ActivityRecord$State;
+HSPLcom/android/server/wm/ActivityRecord$State;-><clinit>()V
+HSPLcom/android/server/wm/ActivityRecord$State;-><init>(Ljava/lang/String;I)V
+HSPLcom/android/server/wm/ActivityRecord$State;->values()[Lcom/android/server/wm/ActivityRecord$State;
 HSPLcom/android/server/wm/ActivityRecord$Token;-><init>()V
 HSPLcom/android/server/wm/ActivityRecord$Token;-><init>(Lcom/android/server/wm/ActivityRecord$Token-IA;)V
 HPLcom/android/server/wm/ActivityRecord$Token;->toString()Ljava/lang/String;
-HPLcom/android/server/wm/ActivityRecord;->$r8$lambda$365UxoHaJfIpMBzIwgtkcWR0vGE(Landroid/content/Context;)Landroid/graphics/drawable/Drawable;
+HSPLcom/android/server/wm/ActivityRecord;->$r8$lambda$365UxoHaJfIpMBzIwgtkcWR0vGE(Landroid/content/Context;)Landroid/graphics/drawable/Drawable;
 PLcom/android/server/wm/ActivityRecord;->$r8$lambda$8c2AdHi9fgpZSwygpRzA85aQvco(Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/ActivityRecord;->$r8$lambda$8qcgcVzSbAyNyEE3CNEy_H1uMxA(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/TaskDisplayArea;)Z
 PLcom/android/server/wm/ActivityRecord;->$r8$lambda$AUcK95Kh-iV-6-wPPTVcU36Kc0M(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/ActivityRecord;->$r8$lambda$BofNlATxGgkvDoXrInZLxBWlpb4(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/ActivityRecord;->$r8$lambda$BofNlATxGgkvDoXrInZLxBWlpb4(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/ActivityRecord;->$r8$lambda$Emki_xTpGi1dRVavB9ZpDt6tZG0(Lcom/android/server/wm/WindowState;)Z
 PLcom/android/server/wm/ActivityRecord;->$r8$lambda$FAzQLHwh49XnfdM3PkNfNOOuQD8(Lcom/android/server/wm/StartingSurfaceController$StartingSurface;ZLcom/android/server/wm/StartingData;)V
 HPLcom/android/server/wm/ActivityRecord;->$r8$lambda$I5-gPcK_9Hg_027II_rliDrNf0I(Lcom/android/server/wm/WindowState;)V
@@ -52984,83 +54773,83 @@
 PLcom/android/server/wm/ActivityRecord;->$r8$lambda$TQSDwUqPe3gvsJE9M4TppEq1BAc(Lcom/android/server/wm/ActivityRecord;)Landroid/content/pm/ApplicationInfo;
 PLcom/android/server/wm/ActivityRecord;->$r8$lambda$XQOlcnkrnLBkeM6_oUKL3es3_VM(Lcom/android/server/wm/ActivityRecord;)Z
 HPLcom/android/server/wm/ActivityRecord;->$r8$lambda$Y23FghoW--ZYQI_mMnpvqXEZvtg(Lcom/android/server/wm/WindowState;)Z
-HPLcom/android/server/wm/ActivityRecord;->$r8$lambda$aFWgZBiHPH94A9lZUqrmUBpRMko(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/ActivityRecord;->$r8$lambda$aFWgZBiHPH94A9lZUqrmUBpRMko(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/ActivityRecord;->$r8$lambda$mzTFXck3tIQNDTWUzZ5bvrSF17o(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)V
 HPLcom/android/server/wm/ActivityRecord;->$r8$lambda$oxGVXj6Che1uELoff_kJ3At_a2s(Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/ActivityRecord;->$r8$lambda$pEZLBrzp_viqZSBIgFsHkmiDjBg(Lcom/android/server/wm/ActivityRecord;[F[F)V
 PLcom/android/server/wm/ActivityRecord;->$r8$lambda$r96B8UKd3qQff-16FjZY1hJcS5Q(Lcom/android/server/wm/WindowState;)Z
 PLcom/android/server/wm/ActivityRecord;->$r8$lambda$y884TobzBhQQpnUaW8gSy9sIsIw(Lcom/android/server/wm/ActivityRecord;[F[F)V
-PLcom/android/server/wm/ActivityRecord;->-$$Nest$mcontinueLaunchTicking(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/ActivityRecord;->-$$Nest$mcontinueLaunchTicking(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/ActivityRecord;->-$$Nest$misTransferringSplashScreen(Lcom/android/server/wm/ActivityRecord;)Z
 HSPLcom/android/server/wm/ActivityRecord;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/WindowProcessController;IILjava/lang/String;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/pm/ActivityInfo;Landroid/content/res/Configuration;Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;IZZLcom/android/server/wm/ActivityTaskSupervisor;Landroid/app/ActivityOptions;Lcom/android/server/wm/ActivityRecord;Landroid/os/PersistableBundle;Landroid/app/ActivityManager$TaskDescription;J)V
 HSPLcom/android/server/wm/ActivityRecord;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/WindowProcessController;IILjava/lang/String;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/content/pm/ActivityInfo;Landroid/content/res/Configuration;Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;IZZLcom/android/server/wm/ActivityTaskSupervisor;Landroid/app/ActivityOptions;Lcom/android/server/wm/ActivityRecord;Landroid/os/PersistableBundle;Landroid/app/ActivityManager$TaskDescription;JLcom/android/server/wm/ActivityRecord-IA;)V
 HPLcom/android/server/wm/ActivityRecord;->abortAndClearOptionsAnimation()V
 HPLcom/android/server/wm/ActivityRecord;->activityPaused(Z)V
-HPLcom/android/server/wm/ActivityRecord;->activityResumedLocked(Landroid/os/IBinder;Z)V
+HSPLcom/android/server/wm/ActivityRecord;->activityResumedLocked(Landroid/os/IBinder;Z)V
 HPLcom/android/server/wm/ActivityRecord;->activityStopped(Landroid/os/Bundle;Landroid/os/PersistableBundle;Ljava/lang/CharSequence;)V
 HPLcom/android/server/wm/ActivityRecord;->addNewIntentLocked(Lcom/android/internal/content/ReferrerIntent;)V
-PLcom/android/server/wm/ActivityRecord;->addResultLocked(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;IILandroid/content/Intent;)V
-HPLcom/android/server/wm/ActivityRecord;->addStartingWindow(Ljava/lang/String;ILcom/android/server/wm/ActivityRecord;ZZZZZZZ)Z
+HPLcom/android/server/wm/ActivityRecord;->addResultLocked(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;IILandroid/content/Intent;)V
+HSPLcom/android/server/wm/ActivityRecord;->addStartingWindow(Ljava/lang/String;ILcom/android/server/wm/ActivityRecord;ZZZZZZZ)Z
 HPLcom/android/server/wm/ActivityRecord;->addToFinishingAndWaitForIdle()Z
 HPLcom/android/server/wm/ActivityRecord;->addToStopping(ZZLjava/lang/String;)V
-HPLcom/android/server/wm/ActivityRecord;->addWindow(Lcom/android/server/wm/WindowState;)V
-HPLcom/android/server/wm/ActivityRecord;->allDrawnStatesConsidered()Z
-HPLcom/android/server/wm/ActivityRecord;->allowMoveToFront()Z
-HPLcom/android/server/wm/ActivityRecord;->allowTaskSnapshot()Z
+HSPLcom/android/server/wm/ActivityRecord;->addWindow(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/ActivityRecord;->allDrawnStatesConsidered()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/ActivityRecord;->allowMoveToFront()Z
+HSPLcom/android/server/wm/ActivityRecord;->allowTaskSnapshot()Z
 HPLcom/android/server/wm/ActivityRecord;->applyAnimation(Landroid/view/WindowManager$LayoutParams;IZZLjava/util/ArrayList;)Z
-HPLcom/android/server/wm/ActivityRecord;->applyAspectRatio(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
-HPLcom/android/server/wm/ActivityRecord;->applyAspectRatio(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;FZ)Z
+HSPLcom/android/server/wm/ActivityRecord;->applyAspectRatio(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
+HSPLcom/android/server/wm/ActivityRecord;->applyAspectRatio(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;FZ)Z
 PLcom/android/server/wm/ActivityRecord;->applyFixedRotationTransform(Landroid/view/DisplayInfo;Lcom/android/server/wm/DisplayFrames;Landroid/content/res/Configuration;)V
-HPLcom/android/server/wm/ActivityRecord;->applyOptionsAnimation()V
-HPLcom/android/server/wm/ActivityRecord;->applyOptionsAnimation(Landroid/app/ActivityOptions;Landroid/content/Intent;)V
-HPLcom/android/server/wm/ActivityRecord;->areBoundsLetterboxed()Z
-HPLcom/android/server/wm/ActivityRecord;->asActivityRecord()Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->applyOptionsAnimation()V
+HSPLcom/android/server/wm/ActivityRecord;->applyOptionsAnimation(Landroid/app/ActivityOptions;Landroid/content/Intent;)V
+HSPLcom/android/server/wm/ActivityRecord;->areBoundsLetterboxed()Z
+HSPLcom/android/server/wm/ActivityRecord;->asActivityRecord()Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/ActivityRecord;->associateStartingDataWithTask()V
 PLcom/android/server/wm/ActivityRecord;->attachCrossProfileAppsThumbnailAnimation()V
 PLcom/android/server/wm/ActivityRecord;->attachStartingSurfaceToAssociatedTask()V
 HPLcom/android/server/wm/ActivityRecord;->attachStartingWindow(Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/ActivityRecord;->attachThumbnailAnimation()V
-HPLcom/android/server/wm/ActivityRecord;->attachedToProcess()Z+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityRecord;->canBeLaunchedOnDisplay(I)Z
-HPLcom/android/server/wm/ActivityRecord;->canBeTopRunning()Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->attachedToProcess()Z+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->canBeLaunchedOnDisplay(I)Z
+HSPLcom/android/server/wm/ActivityRecord;->canBeTopRunning()Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/ActivityRecord;->canCustomizeAppTransition()Z
 HPLcom/android/server/wm/ActivityRecord;->canForceResizeNonResizable(I)Z
 PLcom/android/server/wm/ActivityRecord;->canLaunchAssistActivity(Ljava/lang/String;)Z
 PLcom/android/server/wm/ActivityRecord;->canLaunchHomeActivity(ILcom/android/server/wm/ActivityRecord;)Z
-HPLcom/android/server/wm/ActivityRecord;->canReceiveKeys()Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
-HPLcom/android/server/wm/ActivityRecord;->canResumeByCompat()Z+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
-HPLcom/android/server/wm/ActivityRecord;->canShowWhenLocked()Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityRecord;->canShowWhenLocked(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityRecord;->canShowWindows()Z
-HPLcom/android/server/wm/ActivityRecord;->canTurnScreenOn()Z+]Lcom/android/server/wm/KeyguardController;Lcom/android/server/wm/KeyguardController;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->canReceiveKeys()Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
+HSPLcom/android/server/wm/ActivityRecord;->canResumeByCompat()Z+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
+HSPLcom/android/server/wm/ActivityRecord;->canShowWhenLocked()Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->canShowWhenLocked(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->canShowWindows()Z
+HSPLcom/android/server/wm/ActivityRecord;->canTurnScreenOn()Z+]Lcom/android/server/wm/KeyguardController;Lcom/android/server/wm/KeyguardController;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/ActivityRecord;->cancelAnimation()V
 HPLcom/android/server/wm/ActivityRecord;->cancelInitializing()V
-HPLcom/android/server/wm/ActivityRecord;->checkAppWindowsReadyToShow()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->checkAppWindowsReadyToShow()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/ActivityRecord;->checkEnterPictureInPictureAppOpsState()Z
 HPLcom/android/server/wm/ActivityRecord;->checkEnterPictureInPictureState(Ljava/lang/String;Z)Z
-HPLcom/android/server/wm/ActivityRecord;->checkKeyguardFlagsChanged()V
+HSPLcom/android/server/wm/ActivityRecord;->checkKeyguardFlagsChanged()V
 HPLcom/android/server/wm/ActivityRecord;->cleanUp(ZZ)V
 HPLcom/android/server/wm/ActivityRecord;->cleanUpActivityServices()V
 HPLcom/android/server/wm/ActivityRecord;->cleanUpSplashScreen()V
-HPLcom/android/server/wm/ActivityRecord;->clearAllDrawn()V
+HSPLcom/android/server/wm/ActivityRecord;->clearAllDrawn()V
 HPLcom/android/server/wm/ActivityRecord;->clearAnimatingFlags()V
 HPLcom/android/server/wm/ActivityRecord;->clearLastParentBeforePip()V
-HPLcom/android/server/wm/ActivityRecord;->clearOptionsAnimation()V
-HPLcom/android/server/wm/ActivityRecord;->clearOptionsAnimationForSiblings()V
+HSPLcom/android/server/wm/ActivityRecord;->clearOptionsAnimation()V
+HSPLcom/android/server/wm/ActivityRecord;->clearOptionsAnimationForSiblings()V
 HPLcom/android/server/wm/ActivityRecord;->clearRelaunching()V
 PLcom/android/server/wm/ActivityRecord;->clearSizeCompatMode()V
-HPLcom/android/server/wm/ActivityRecord;->clearThumbnail()V
-HPLcom/android/server/wm/ActivityRecord;->commitVisibility(ZZ)V
-HPLcom/android/server/wm/ActivityRecord;->commitVisibility(ZZZ)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/InputMonitor;Lcom/android/server/wm/InputMonitor;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->clearThumbnail()V
+HSPLcom/android/server/wm/ActivityRecord;->commitVisibility(ZZ)V
+HSPLcom/android/server/wm/ActivityRecord;->commitVisibility(ZZZ)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/InputMonitor;Lcom/android/server/wm/InputMonitor;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/ActivityRecord;->completeFinishing(Ljava/lang/String;)Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/ActivityRecord;->completeFinishing(ZLjava/lang/String;)Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityRecord;->completeResumeLocked()V
-PLcom/android/server/wm/ActivityRecord;->computeAspectRatio(Landroid/graphics/Rect;)F
-HPLcom/android/server/wm/ActivityRecord;->computeTaskAffinity(Ljava/lang/String;II)Ljava/lang/String;
-HPLcom/android/server/wm/ActivityRecord;->containsDismissKeyguardWindow()Z+]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityRecord;->containsShowWhenLockedWindow()Z+]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityRecord;->containsTurnScreenOnWindow()Z+]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityRecord;->continueLaunchTicking()Z
+HSPLcom/android/server/wm/ActivityRecord;->completeResumeLocked()V
+HSPLcom/android/server/wm/ActivityRecord;->computeAspectRatio(Landroid/graphics/Rect;)F
+HSPLcom/android/server/wm/ActivityRecord;->computeTaskAffinity(Ljava/lang/String;II)Ljava/lang/String;
+HSPLcom/android/server/wm/ActivityRecord;->containsDismissKeyguardWindow()Z+]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->containsShowWhenLockedWindow()Z+]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->containsTurnScreenOnWindow()Z+]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->continueLaunchTicking()Z+]Landroid/os/Handler;Lcom/android/server/wm/ActivityTaskManagerService$H;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/ActivityRecord;->createAnimationBoundsLayer(Landroid/view/SurfaceControl$Transaction;)Landroid/view/SurfaceControl;
 HPLcom/android/server/wm/ActivityRecord;->createImageFilename(JI)Ljava/lang/String;
 HPLcom/android/server/wm/ActivityRecord;->createRemoteAnimationTarget(Lcom/android/server/wm/RemoteAnimationController$RemoteAnimationRecord;)Landroid/view/RemoteAnimationTarget;
@@ -53073,148 +54862,149 @@
 HPLcom/android/server/wm/ActivityRecord;->destroySurfaces(Z)V
 HPLcom/android/server/wm/ActivityRecord;->destroyed(Ljava/lang/String;)V
 HPLcom/android/server/wm/ActivityRecord;->detachFromProcess()V
-HPLcom/android/server/wm/ActivityRecord;->determineLaunchSourceType(ILcom/android/server/wm/WindowProcessController;)I
+HSPLcom/android/server/wm/ActivityRecord;->determineLaunchSourceType(ILcom/android/server/wm/WindowProcessController;)I
 HPLcom/android/server/wm/ActivityRecord;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
 HPLcom/android/server/wm/ActivityRecord;->dumpActivity(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;ILcom/android/server/wm/ActivityRecord;Ljava/lang/String;Ljava/lang/String;ZZZLjava/lang/String;ZLjava/lang/Runnable;Lcom/android/server/wm/Task;)Z
-HPLcom/android/server/wm/ActivityRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;I)V
-PLcom/android/server/wm/ActivityRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
+HPLcom/android/server/wm/ActivityRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;I)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/app/PictureInPictureParams;Landroid/app/PictureInPictureParams;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Ljava/lang/Enum;Lcom/android/server/wm/ActivityRecord$State;]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/ActivityRecord;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/ActivityRecord;->ensureActivityConfiguration(IZ)Z
-HPLcom/android/server/wm/ActivityRecord;->ensureActivityConfiguration(IZZ)Z+]Landroid/util/MergedConfiguration;Landroid/util/MergedConfiguration;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/ActivityRecord;->evaluateStartingWindowTheme(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;II)I
-HPLcom/android/server/wm/ActivityRecord;->fillsParent()Z
-HPLcom/android/server/wm/ActivityRecord;->findMainWindow()Lcom/android/server/wm/WindowState;+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityRecord;->findMainWindow(Z)Lcom/android/server/wm/WindowState;+]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/ActivityRecord;->ensureActivityConfiguration(IZZ)Z+]Landroid/util/MergedConfiguration;Landroid/util/MergedConfiguration;]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/ActivityRecord;->evaluateStartingWindowTheme(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;II)I
+HSPLcom/android/server/wm/ActivityRecord;->fillsParent()Z
+HSPLcom/android/server/wm/ActivityRecord;->findMainWindow()Lcom/android/server/wm/WindowState;+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->findMainWindow(Z)Lcom/android/server/wm/WindowState;+]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HPLcom/android/server/wm/ActivityRecord;->finishActivityResults(ILandroid/content/Intent;Lcom/android/server/uri/NeededUriGrants;)V
 HPLcom/android/server/wm/ActivityRecord;->finishIfPossible(ILandroid/content/Intent;Lcom/android/server/uri/NeededUriGrants;Ljava/lang/String;Z)I
 PLcom/android/server/wm/ActivityRecord;->finishIfPossible(Ljava/lang/String;Z)I
 PLcom/android/server/wm/ActivityRecord;->finishIfSameAffinity(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/ActivityRecord;->finishIfSubActivity(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;I)V
-HPLcom/android/server/wm/ActivityRecord;->finishLaunchTickingLocked()V
-PLcom/android/server/wm/ActivityRecord;->finishRelaunching()V
+HSPLcom/android/server/wm/ActivityRecord;->finishLaunchTickingLocked()V+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/ActivityRecord;->finishRelaunching()V
 PLcom/android/server/wm/ActivityRecord;->finishSync(Landroid/view/SurfaceControl$Transaction;Z)V
-HPLcom/android/server/wm/ActivityRecord;->forAllActivities(Ljava/util/function/Consumer;Z)V+]Ljava/util/function/Consumer;megamorphic_types
-HPLcom/android/server/wm/ActivityRecord;->forAllActivities(Ljava/util/function/Predicate;Z)Z+]Ljava/util/function/Predicate;megamorphic_types
-HSPLcom/android/server/wm/ActivityRecord;->forTokenLocked(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;+]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityRecord;->getActivity(Ljava/util/function/Predicate;ZLcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityRecord;+]Ljava/util/function/Predicate;megamorphic_types
+HSPLcom/android/server/wm/ActivityRecord;->forAllActivities(Ljava/util/function/Consumer;Z)V+]Ljava/util/function/Consumer;megamorphic_types
+HSPLcom/android/server/wm/ActivityRecord;->forAllActivities(Ljava/util/function/Predicate;Z)Z+]Ljava/util/function/Predicate;megamorphic_types
+HSPLcom/android/server/wm/ActivityRecord;->forTokenLocked(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;+]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/wm/ActivityRecord;->getActivity(Ljava/util/function/Predicate;ZLcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityRecord;+]Ljava/util/function/Predicate;megamorphic_types
 HPLcom/android/server/wm/ActivityRecord;->getAnimationBounds(I)Landroid/graphics/Rect;
 HPLcom/android/server/wm/ActivityRecord;->getAnimationFrames(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
 HPLcom/android/server/wm/ActivityRecord;->getAnimationLeashParent()Landroid/view/SurfaceControl;
-PLcom/android/server/wm/ActivityRecord;->getAnimationPosition(Landroid/graphics/Point;)V
-HPLcom/android/server/wm/ActivityRecord;->getAppCompatState()I
-HPLcom/android/server/wm/ActivityRecord;->getAppCompatState(Z)I+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityRecord;->getBounds()Landroid/graphics/Rect;
-HPLcom/android/server/wm/ActivityRecord;->getCameraCompatControlState()I
-HPLcom/android/server/wm/ActivityRecord;->getConfigurationChanges(Landroid/content/res/Configuration;)I
+HPLcom/android/server/wm/ActivityRecord;->getAnimationPosition(Landroid/graphics/Point;)V
+HSPLcom/android/server/wm/ActivityRecord;->getAppCompatState()I
+HSPLcom/android/server/wm/ActivityRecord;->getAppCompatState(Z)I+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->getBounds()Landroid/graphics/Rect;
+HSPLcom/android/server/wm/ActivityRecord;->getCameraCompatControlState()I
+HSPLcom/android/server/wm/ActivityRecord;->getConfigurationChanges(Landroid/content/res/Configuration;)I
 HPLcom/android/server/wm/ActivityRecord;->getDisplayArea()Lcom/android/server/wm/DisplayArea;+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityRecord;->getDisplayArea()Lcom/android/server/wm/TaskDisplayArea;
-HPLcom/android/server/wm/ActivityRecord;->getDisplayId()I+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityRecord;->getFilteredReferrer(Ljava/lang/String;)Ljava/lang/String;
-HPLcom/android/server/wm/ActivityRecord;->getInputApplicationHandle(Z)Landroid/view/InputApplicationHandle;+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->getDisplayArea()Lcom/android/server/wm/TaskDisplayArea;
+HSPLcom/android/server/wm/ActivityRecord;->getDisplayId()I+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->getFilteredReferrer(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/wm/ActivityRecord;->getInputApplicationHandle(Z)Landroid/view/InputApplicationHandle;+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/ActivityRecord;->getLastParentBeforePip()Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/ActivityRecord;->getLaunchedFromBubble()Z
-HPLcom/android/server/wm/ActivityRecord;->getLetterboxInnerBounds(Landroid/graphics/Rect;)V
+HSPLcom/android/server/wm/ActivityRecord;->getLaunchedFromBubble()Z
+HSPLcom/android/server/wm/ActivityRecord;->getLetterboxInnerBounds(Landroid/graphics/Rect;)V
 HPLcom/android/server/wm/ActivityRecord;->getLetterboxInsets()Landroid/graphics/Rect;
 HSPLcom/android/server/wm/ActivityRecord;->getLockTaskLaunchMode(Landroid/content/pm/ActivityInfo;Landroid/app/ActivityOptions;)I
-HPLcom/android/server/wm/ActivityRecord;->getLocusId()Landroid/content/LocusId;
-HPLcom/android/server/wm/ActivityRecord;->getMinAspectRatio()F
+HSPLcom/android/server/wm/ActivityRecord;->getLocusId()Landroid/content/LocusId;
+HSPLcom/android/server/wm/ActivityRecord;->getMinAspectRatio()F
+PLcom/android/server/wm/ActivityRecord;->getMinDimensions()Landroid/graphics/Point;
 HPLcom/android/server/wm/ActivityRecord;->getOptions()Landroid/app/ActivityOptions;
-HPLcom/android/server/wm/ActivityRecord;->getOrganizedTask()Lcom/android/server/wm/Task;+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/ActivityRecord;->getOrganizedTaskFragment()Lcom/android/server/wm/TaskFragment;
+HSPLcom/android/server/wm/ActivityRecord;->getOrganizedTask()Lcom/android/server/wm/Task;+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/ActivityRecord;->getOrganizedTaskFragment()Lcom/android/server/wm/TaskFragment;
 HPLcom/android/server/wm/ActivityRecord;->getOrientation(I)I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityRecord;->getPersistentSavedState()Landroid/os/PersistableBundle;
+HSPLcom/android/server/wm/ActivityRecord;->getPersistentSavedState()Landroid/os/PersistableBundle;
 HPLcom/android/server/wm/ActivityRecord;->getPid()I
-PLcom/android/server/wm/ActivityRecord;->getProcessGlobalConfiguration()Landroid/content/res/Configuration;
+HSPLcom/android/server/wm/ActivityRecord;->getProcessGlobalConfiguration()Landroid/content/res/Configuration;
 HPLcom/android/server/wm/ActivityRecord;->getProcessName()Ljava/lang/String;
-PLcom/android/server/wm/ActivityRecord;->getProtoFieldId()J
+HPLcom/android/server/wm/ActivityRecord;->getProtoFieldId()J
 HPLcom/android/server/wm/ActivityRecord;->getRemoteAnimationDefinition()Landroid/view/RemoteAnimationDefinition;
-HPLcom/android/server/wm/ActivityRecord;->getRequestedOrientation()I
-HPLcom/android/server/wm/ActivityRecord;->getRootTask()Lcom/android/server/wm/Task;+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/ActivityRecord;->getRootTask(Landroid/os/IBinder;)Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/ActivityRecord;->getRequestedOrientation()I
+HSPLcom/android/server/wm/ActivityRecord;->getRootTask()Lcom/android/server/wm/Task;+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/ActivityRecord;->getRootTask(Landroid/os/IBinder;)Lcom/android/server/wm/Task;
 PLcom/android/server/wm/ActivityRecord;->getRootTaskId()I
-HPLcom/android/server/wm/ActivityRecord;->getSavedState()Landroid/os/Bundle;
+HSPLcom/android/server/wm/ActivityRecord;->getSavedState()Landroid/os/Bundle;
 PLcom/android/server/wm/ActivityRecord;->getSizeCompatScale()F
-HPLcom/android/server/wm/ActivityRecord;->getSplashscreenTheme(Landroid/app/ActivityOptions;)I
+HSPLcom/android/server/wm/ActivityRecord;->getSplashscreenTheme(Landroid/app/ActivityOptions;)I
 HPLcom/android/server/wm/ActivityRecord;->getStartingWindowType(ZZZZZZLandroid/window/TaskSnapshot;)I
 HPLcom/android/server/wm/ActivityRecord;->getState()Lcom/android/server/wm/ActivityRecord$State;
-HPLcom/android/server/wm/ActivityRecord;->getTask()Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/ActivityRecord;->getTask()Lcom/android/server/wm/Task;
 HPLcom/android/server/wm/ActivityRecord;->getTaskForActivityLocked(Landroid/os/IBinder;Z)I
-HPLcom/android/server/wm/ActivityRecord;->getTaskFragment()Lcom/android/server/wm/TaskFragment;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;
+HSPLcom/android/server/wm/ActivityRecord;->getTaskFragment()Lcom/android/server/wm/TaskFragment;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;
 HPLcom/android/server/wm/ActivityRecord;->getTopFullscreenOpaqueWindow()Lcom/android/server/wm/WindowState;
 HPLcom/android/server/wm/ActivityRecord;->getTransit()I
-HPLcom/android/server/wm/ActivityRecord;->getTurnScreenOnFlag()Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityRecord;->getUid()I
-HPLcom/android/server/wm/ActivityRecord;->getUriPermissionsLocked()Lcom/android/server/uri/UriPermissionOwner;
+HSPLcom/android/server/wm/ActivityRecord;->getTurnScreenOnFlag()Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->getUid()I
+HSPLcom/android/server/wm/ActivityRecord;->getUriPermissionsLocked()Lcom/android/server/uri/UriPermissionOwner;
 PLcom/android/server/wm/ActivityRecord;->getWaitingHistoryRecordLocked()Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityRecord;->handleAlreadyVisible()V+]Landroid/app/ActivityOptions;Landroid/app/ActivityOptions;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->handleAlreadyVisible()V+]Landroid/app/ActivityOptions;Landroid/app/ActivityOptions;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Landroid/app/IApplicationThread;Landroid/app/IApplicationThread$Stub$Proxy;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/ActivityRecord;->handleAppDied()V
-HPLcom/android/server/wm/ActivityRecord;->handleCompleteDeferredRemoval()Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/ActivityRecord;->hasActivity()Z
-HPLcom/android/server/wm/ActivityRecord;->hasFixedAspectRatio()Z
-PLcom/android/server/wm/ActivityRecord;->hasNonDefaultColorWindow()Z
-HPLcom/android/server/wm/ActivityRecord;->hasOverlayOverUntrustedModeEmbedded()Z
-HPLcom/android/server/wm/ActivityRecord;->hasProcess()Z
+HSPLcom/android/server/wm/ActivityRecord;->handleCompleteDeferredRemoval()Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->hasActivity()Z
+HSPLcom/android/server/wm/ActivityRecord;->hasFixedAspectRatio()Z
+HPLcom/android/server/wm/ActivityRecord;->hasNonDefaultColorWindow()Z
+HSPLcom/android/server/wm/ActivityRecord;->hasOverlayOverUntrustedModeEmbedded()Z
+HSPLcom/android/server/wm/ActivityRecord;->hasProcess()Z
 PLcom/android/server/wm/ActivityRecord;->hasResizeChange(I)Z
 PLcom/android/server/wm/ActivityRecord;->hasSavedState()Z
-HPLcom/android/server/wm/ActivityRecord;->hasSizeCompatBounds()Z
+HSPLcom/android/server/wm/ActivityRecord;->hasSizeCompatBounds()Z
 HPLcom/android/server/wm/ActivityRecord;->hasStartingWindow()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-HPLcom/android/server/wm/ActivityRecord;->hasWallpaperBackgroudForLetterbox()Z
-HPLcom/android/server/wm/ActivityRecord;->inSizeCompatMode()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->hasWallpaperBackgroudForLetterbox()Z
+HSPLcom/android/server/wm/ActivityRecord;->inSizeCompatMode()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/ActivityRecord;->inputDispatchingTimedOut(Ljava/lang/String;I)Z
 HPLcom/android/server/wm/ActivityRecord;->isAlwaysFocusable()Z
-HPLcom/android/server/wm/ActivityRecord;->isAlwaysOnTop()Z
+HSPLcom/android/server/wm/ActivityRecord;->isAlwaysOnTop()Z
 HPLcom/android/server/wm/ActivityRecord;->isClosingOrEnteringPip()Z
 PLcom/android/server/wm/ActivityRecord;->isDestroyable()Z
-HPLcom/android/server/wm/ActivityRecord;->isEligibleForLetterboxEducation()Z+]Lcom/android/server/wm/LetterboxConfiguration;Lcom/android/server/wm/LetterboxConfiguration;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityRecord;->isEmbedded()Z
-HPLcom/android/server/wm/ActivityRecord;->isEmbeddedInUntrustedMode()Z
+HSPLcom/android/server/wm/ActivityRecord;->isEligibleForLetterboxEducation()Z+]Lcom/android/server/wm/LetterboxConfiguration;Lcom/android/server/wm/LetterboxConfiguration;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->isEmbedded()Z
+HSPLcom/android/server/wm/ActivityRecord;->isEmbeddedInUntrustedMode()Z
 HPLcom/android/server/wm/ActivityRecord;->isFirstChildWindowGreaterThanSecond(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)Z
-HPLcom/android/server/wm/ActivityRecord;->isFocusable()Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->isFocusable()Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/ActivityRecord;->isFocusedActivityOnDisplay()Z
-HPLcom/android/server/wm/ActivityRecord;->isFreezingScreen()Z
+HSPLcom/android/server/wm/ActivityRecord;->isFreezingScreen()Z
 HPLcom/android/server/wm/ActivityRecord;->isFullyTransparentBarAllowed(Landroid/graphics/Rect;)Z
-HPLcom/android/server/wm/ActivityRecord;->isHomeIntent(Landroid/content/Intent;)Z
-HPLcom/android/server/wm/ActivityRecord;->isIconStylePreferred(I)Z
-HPLcom/android/server/wm/ActivityRecord;->isInAnyTask(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->isHomeIntent(Landroid/content/Intent;)Z
+HSPLcom/android/server/wm/ActivityRecord;->isIconStylePreferred(I)Z
+HSPLcom/android/server/wm/ActivityRecord;->isInAnyTask(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/ActivityRecord;->isInHistory()Z
 HPLcom/android/server/wm/ActivityRecord;->isInRootTaskLocked()Z
-HPLcom/android/server/wm/ActivityRecord;->isInRootTaskLocked(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->isInRootTaskLocked(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/ActivityRecord;->isInSizeCompatModeForBounds(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
-HPLcom/android/server/wm/ActivityRecord;->isInTransition()Z
-PLcom/android/server/wm/ActivityRecord;->isInVrUiMode(Landroid/content/res/Configuration;)Z
+HSPLcom/android/server/wm/ActivityRecord;->isInTransition()Z
+HSPLcom/android/server/wm/ActivityRecord;->isInVrUiMode(Landroid/content/res/Configuration;)Z
 HPLcom/android/server/wm/ActivityRecord;->isInterestingToUserLocked()Z
-HPLcom/android/server/wm/ActivityRecord;->isKeyguardLocked()Z
+HSPLcom/android/server/wm/ActivityRecord;->isKeyguardLocked()Z
 HPLcom/android/server/wm/ActivityRecord;->isLastWindow(Lcom/android/server/wm/WindowState;)Z
 PLcom/android/server/wm/ActivityRecord;->isLaunchSourceType(I)Z
-HPLcom/android/server/wm/ActivityRecord;->isLetterboxedForFixedOrientationAndAspectRatio()Z
+HSPLcom/android/server/wm/ActivityRecord;->isLetterboxedForFixedOrientationAndAspectRatio()Z
 HPLcom/android/server/wm/ActivityRecord;->isMainIntent(Landroid/content/Intent;)Z
 HPLcom/android/server/wm/ActivityRecord;->isNoHistory()Z
-HPLcom/android/server/wm/ActivityRecord;->isPersistable()Z
-HPLcom/android/server/wm/ActivityRecord;->isProcessRunning()Z
-HPLcom/android/server/wm/ActivityRecord;->isRelaunching()Z
-HPLcom/android/server/wm/ActivityRecord;->isReportedDrawn()Z
+HSPLcom/android/server/wm/ActivityRecord;->isPersistable()Z
+HSPLcom/android/server/wm/ActivityRecord;->isProcessRunning()Z
+HSPLcom/android/server/wm/ActivityRecord;->isRelaunching()Z
+HSPLcom/android/server/wm/ActivityRecord;->isReportedDrawn()Z
 PLcom/android/server/wm/ActivityRecord;->isResizeOnlyChange(I)Z
-HPLcom/android/server/wm/ActivityRecord;->isResizeable()Z
-HPLcom/android/server/wm/ActivityRecord;->isResizeable(Z)Z
+HSPLcom/android/server/wm/ActivityRecord;->isResizeable()Z
+HSPLcom/android/server/wm/ActivityRecord;->isResizeable(Z)Z+]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/ActivityRecord;->isResolverActivity(Ljava/lang/String;)Z
 PLcom/android/server/wm/ActivityRecord;->isResolverOrChildActivity()Z
-HPLcom/android/server/wm/ActivityRecord;->isResolverOrDelegateActivity()Z
+HSPLcom/android/server/wm/ActivityRecord;->isResolverOrDelegateActivity()Z
 HPLcom/android/server/wm/ActivityRecord;->isRootOfTask()Z
 HPLcom/android/server/wm/ActivityRecord;->isSleeping()Z
 HPLcom/android/server/wm/ActivityRecord;->isSnapshotCompatible(Landroid/window/TaskSnapshot;)Z
-HPLcom/android/server/wm/ActivityRecord;->isState(Lcom/android/server/wm/ActivityRecord$State;)Z
-HPLcom/android/server/wm/ActivityRecord;->isState(Lcom/android/server/wm/ActivityRecord$State;Lcom/android/server/wm/ActivityRecord$State;)Z
+HSPLcom/android/server/wm/ActivityRecord;->isState(Lcom/android/server/wm/ActivityRecord$State;)Z
+HSPLcom/android/server/wm/ActivityRecord;->isState(Lcom/android/server/wm/ActivityRecord$State;Lcom/android/server/wm/ActivityRecord$State;)Z
 PLcom/android/server/wm/ActivityRecord;->isState(Lcom/android/server/wm/ActivityRecord$State;Lcom/android/server/wm/ActivityRecord$State;Lcom/android/server/wm/ActivityRecord$State;Lcom/android/server/wm/ActivityRecord$State;)Z
-HPLcom/android/server/wm/ActivityRecord;->isState(Lcom/android/server/wm/ActivityRecord$State;Lcom/android/server/wm/ActivityRecord$State;Lcom/android/server/wm/ActivityRecord$State;Lcom/android/server/wm/ActivityRecord$State;Lcom/android/server/wm/ActivityRecord$State;)Z
+HSPLcom/android/server/wm/ActivityRecord;->isState(Lcom/android/server/wm/ActivityRecord$State;Lcom/android/server/wm/ActivityRecord$State;Lcom/android/server/wm/ActivityRecord$State;Lcom/android/server/wm/ActivityRecord$State;Lcom/android/server/wm/ActivityRecord$State;)Z
 HPLcom/android/server/wm/ActivityRecord;->isSurfaceShowing()Z
 PLcom/android/server/wm/ActivityRecord;->isSyncFinished()Z
-HPLcom/android/server/wm/ActivityRecord;->isTaskOverlay()Z
-HPLcom/android/server/wm/ActivityRecord;->isTopRunningActivity()Z
+HSPLcom/android/server/wm/ActivityRecord;->isTaskOverlay()Z
+HSPLcom/android/server/wm/ActivityRecord;->isTopRunningActivity()Z
 PLcom/android/server/wm/ActivityRecord;->isTransferringSplashScreen()Z
-HPLcom/android/server/wm/ActivityRecord;->isTransitionForward()Z
-HPLcom/android/server/wm/ActivityRecord;->isUid(I)Z
-HPLcom/android/server/wm/ActivityRecord;->isVisible()Z
-HPLcom/android/server/wm/ActivityRecord;->isVisibleRequested()Z
-HPLcom/android/server/wm/ActivityRecord;->isWaitingForTransitionStart()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;
+HSPLcom/android/server/wm/ActivityRecord;->isTransitionForward()Z
+HSPLcom/android/server/wm/ActivityRecord;->isUid(I)Z
+HSPLcom/android/server/wm/ActivityRecord;->isVisible()Z
+HSPLcom/android/server/wm/ActivityRecord;->isVisibleRequested()Z
+HSPLcom/android/server/wm/ActivityRecord;->isWaitingForTransitionStart()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;
 PLcom/android/server/wm/ActivityRecord;->lambda$addStartingWindow$3()Landroid/content/pm/ApplicationInfo;
 PLcom/android/server/wm/ActivityRecord;->lambda$associateStartingDataWithTask$4(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityRecord;->lambda$finishIfPossible$7(Lcom/android/server/wm/ActivityRecord;)V
@@ -53232,201 +55022,202 @@
 PLcom/android/server/wm/ActivityRecord;->lambda$restartProcessIfVisible$19()V
 HPLcom/android/server/wm/ActivityRecord;->lambda$setVisibility$11(Lcom/android/server/wm/WindowState;)V
 HPLcom/android/server/wm/ActivityRecord;->lambda$showAllWindowsLocked$16(Lcom/android/server/wm/WindowState;)V
-HPLcom/android/server/wm/ActivityRecord;->lambda$showStartingWindow$17(Lcom/android/server/wm/ActivityRecord;)Z
-HPLcom/android/server/wm/ActivityRecord;->lambda$transferStartingWindowFromHiddenAboveTokenIfNeeded$9(Lcom/android/server/wm/ActivityRecord;)Z
-HPLcom/android/server/wm/ActivityRecord;->lambda$updateEnterpriseThumbnailDrawable$0(Landroid/content/Context;)Landroid/graphics/drawable/Drawable;
+HSPLcom/android/server/wm/ActivityRecord;->lambda$showStartingWindow$17(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/ActivityRecord;->lambda$transferStartingWindowFromHiddenAboveTokenIfNeeded$9(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/ActivityRecord;->lambda$updateEnterpriseThumbnailDrawable$0(Landroid/content/Context;)Landroid/graphics/drawable/Drawable;
 PLcom/android/server/wm/ActivityRecord;->launchedFromSystemSurface()Z
-HPLcom/android/server/wm/ActivityRecord;->layoutLetterbox(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/ActivityRecord;->layoutLetterbox(Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/ActivityRecord;->loadThumbnailAnimation(Landroid/hardware/HardwareBuffer;)Landroid/view/animation/Animation;
-HPLcom/android/server/wm/ActivityRecord;->logAppCompatState()V
-HPLcom/android/server/wm/ActivityRecord;->logStartActivity(ILcom/android/server/wm/Task;)V
-HPLcom/android/server/wm/ActivityRecord;->makeActiveIfNeeded(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/ClientLifecycleManager;Lcom/android/server/wm/ClientLifecycleManager;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->logAppCompatState()V
+HSPLcom/android/server/wm/ActivityRecord;->logStartActivity(ILcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/ActivityRecord;->makeActiveIfNeeded(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/ClientLifecycleManager;Lcom/android/server/wm/ClientLifecycleManager;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/ActivityRecord;->makeFinishingLocked()V
 HPLcom/android/server/wm/ActivityRecord;->makeInvisible()V+]Ljava/lang/Enum;Lcom/android/server/wm/ActivityRecord$State;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/ActivityRecord;->makeVisibleIfNeeded(Lcom/android/server/wm/ActivityRecord;Z)V
 PLcom/android/server/wm/ActivityRecord;->matchParentBounds()Z
 PLcom/android/server/wm/ActivityRecord;->mayFreezeScreenLocked()Z
-HPLcom/android/server/wm/ActivityRecord;->mayFreezeScreenLocked(Lcom/android/server/wm/WindowProcessController;)Z
+HSPLcom/android/server/wm/ActivityRecord;->mayFreezeScreenLocked(Lcom/android/server/wm/WindowProcessController;)Z
 HPLcom/android/server/wm/ActivityRecord;->moveFocusableActivityToTop(Ljava/lang/String;)Z
-HPLcom/android/server/wm/ActivityRecord;->needsZBoost()Z
+HSPLcom/android/server/wm/ActivityRecord;->needsZBoost()Z
 HPLcom/android/server/wm/ActivityRecord;->notifyAppResumed(Z)V
 HPLcom/android/server/wm/ActivityRecord;->notifyAppStopped()V
-HPLcom/android/server/wm/ActivityRecord;->notifyUnknownVisibilityLaunchedForKeyguardTransition()V
-HPLcom/android/server/wm/ActivityRecord;->occludesParent()Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityRecord;->occludesParent(Z)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/ActivityRecord;->offsetBounds(Landroid/content/res/Configuration;II)V
-HPLcom/android/server/wm/ActivityRecord;->onAnimationFinished(ILcom/android/server/wm/AnimationAdapter;)V
+HSPLcom/android/server/wm/ActivityRecord;->notifyUnknownVisibilityLaunchedForKeyguardTransition()V
+HSPLcom/android/server/wm/ActivityRecord;->occludesParent()Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->occludesParent(Z)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/ActivityRecord;->offsetBounds(Landroid/content/res/Configuration;II)V
+HSPLcom/android/server/wm/ActivityRecord;->onAnimationFinished(ILcom/android/server/wm/AnimationAdapter;)V
 HPLcom/android/server/wm/ActivityRecord;->onAnimationLeashLost(Landroid/view/SurfaceControl$Transaction;)V
 PLcom/android/server/wm/ActivityRecord;->onAppFreezeTimeout()V
 PLcom/android/server/wm/ActivityRecord;->onCancelFixedRotationTransform(I)V
-HPLcom/android/server/wm/ActivityRecord;->onConfigurationChanged(Landroid/content/res/Configuration;)V
+HSPLcom/android/server/wm/ActivityRecord;->onConfigurationChanged(Landroid/content/res/Configuration;)V
 PLcom/android/server/wm/ActivityRecord;->onCopySplashScreenFinish(Landroid/window/SplashScreenView$SplashScreenViewParcelable;)V
-HPLcom/android/server/wm/ActivityRecord;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;
-HPLcom/android/server/wm/ActivityRecord;->onFirstWindowDrawn(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/ActivityRecord;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;
+HSPLcom/android/server/wm/ActivityRecord;->onFirstWindowDrawn(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/ActivityRecord;->onLeashAnimationStarting(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V
-HPLcom/android/server/wm/ActivityRecord;->onParentChanged(Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ConfigurationContainer;)V
+HSPLcom/android/server/wm/ActivityRecord;->onParentChanged(Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ConfigurationContainer;)V
 HPLcom/android/server/wm/ActivityRecord;->onRemovedFromDisplay()V
 PLcom/android/server/wm/ActivityRecord;->onResize()V
 PLcom/android/server/wm/ActivityRecord;->onSplashScreenAttachComplete()V
 HPLcom/android/server/wm/ActivityRecord;->onStartingWindowDrawn()V
 PLcom/android/server/wm/ActivityRecord;->onWindowReplacementTimeout()V
-HPLcom/android/server/wm/ActivityRecord;->onWindowsDrawn(J)V
+HSPLcom/android/server/wm/ActivityRecord;->onWindowsDrawn(J)V
 PLcom/android/server/wm/ActivityRecord;->onWindowsGone()V
-HPLcom/android/server/wm/ActivityRecord;->onWindowsVisible()V
+HSPLcom/android/server/wm/ActivityRecord;->onWindowsVisible()V
 PLcom/android/server/wm/ActivityRecord;->onlyVrUiModeChanged(ILandroid/content/res/Configuration;)Z
-HPLcom/android/server/wm/ActivityRecord;->orientationRespectedWithInsets(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
+HSPLcom/android/server/wm/ActivityRecord;->orientationRespectedWithInsets(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
 HPLcom/android/server/wm/ActivityRecord;->pauseKeyDispatchingLocked()V
-HPLcom/android/server/wm/ActivityRecord;->postApplyAnimation(ZZ)V
+HSPLcom/android/server/wm/ActivityRecord;->postApplyAnimation(ZZ)V
 HPLcom/android/server/wm/ActivityRecord;->postWindowRemoveStartingWindowCleanup(Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/ActivityRecord;->prepareActivityHideTransitionAnimation()V
 PLcom/android/server/wm/ActivityRecord;->prepareActivityHideTransitionAnimationIfOvarlay()V
-HPLcom/android/server/wm/ActivityRecord;->prepareSurfaces()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ActivityRecordInputSink;Lcom/android/server/wm/ActivityRecordInputSink;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/WindowContainerThumbnail;Lcom/android/server/wm/WindowContainerThumbnail;
-HPLcom/android/server/wm/ActivityRecord;->providesMaxBounds()Z
+HSPLcom/android/server/wm/ActivityRecord;->prepareSurfaces()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ActivityRecordInputSink;Lcom/android/server/wm/ActivityRecordInputSink;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/WindowContainerThumbnail;Lcom/android/server/wm/WindowContainerThumbnail;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->providesMaxBounds()Z+]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/ActivityRecord;->providesOrientation()Z
 PLcom/android/server/wm/ActivityRecord;->recomputeConfiguration()V
 HPLcom/android/server/wm/ActivityRecord;->registerRemoteAnimations(Landroid/view/RemoteAnimationDefinition;)V
 HPLcom/android/server/wm/ActivityRecord;->relaunchActivityLocked(Z)V
 HPLcom/android/server/wm/ActivityRecord;->removeChild(Lcom/android/server/wm/WindowContainer;)V
 HPLcom/android/server/wm/ActivityRecord;->removeChild(Lcom/android/server/wm/WindowState;)V
-HPLcom/android/server/wm/ActivityRecord;->removeDeadWindows()V+]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/ActivityRecord;->removeDeadWindows()V+]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HPLcom/android/server/wm/ActivityRecord;->removeDestroyTimeout()V
 HPLcom/android/server/wm/ActivityRecord;->removeFromHistory(Ljava/lang/String;)V
 HPLcom/android/server/wm/ActivityRecord;->removeIfPossible()V
 HPLcom/android/server/wm/ActivityRecord;->removeImmediately()V
-HPLcom/android/server/wm/ActivityRecord;->removeLaunchTickRunnable()V+]Landroid/os/Handler;Lcom/android/server/wm/ActivityTaskManagerService$H;
-HPLcom/android/server/wm/ActivityRecord;->removePauseTimeout()V
-HPLcom/android/server/wm/ActivityRecord;->removeReplacedWindowIfNeeded(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/ActivityRecord;->removeLaunchTickRunnable()V+]Landroid/os/Handler;Lcom/android/server/wm/ActivityTaskManagerService$H;
+HPLcom/android/server/wm/ActivityRecord;->removePauseTimeout()V+]Landroid/os/Handler;Lcom/android/server/wm/ActivityTaskManagerService$H;
+HSPLcom/android/server/wm/ActivityRecord;->removeReplacedWindowIfNeeded(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 PLcom/android/server/wm/ActivityRecord;->removeResultsLocked(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;I)V
-HPLcom/android/server/wm/ActivityRecord;->removeStartingWindow()V
-HPLcom/android/server/wm/ActivityRecord;->removeStartingWindowAnimation(Z)V
-HPLcom/android/server/wm/ActivityRecord;->removeStopTimeout()V
-HPLcom/android/server/wm/ActivityRecord;->removeTimeouts()V
+HSPLcom/android/server/wm/ActivityRecord;->removeStartingWindow()V+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->removeStartingWindowAnimation(Z)V+]Ljava/lang/Runnable;Lcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda20;
+HPLcom/android/server/wm/ActivityRecord;->removeStopTimeout()V+]Landroid/os/Handler;Lcom/android/server/wm/ActivityTaskManagerService$H;
+HPLcom/android/server/wm/ActivityRecord;->removeTimeouts()V+]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/ActivityRecord;->removeTransferSplashScreenTimeout()V
 HPLcom/android/server/wm/ActivityRecord;->removeUriPermissionsLocked()V
 PLcom/android/server/wm/ActivityRecord;->reparent(Lcom/android/server/wm/TaskFragment;ILjava/lang/String;)V
-HPLcom/android/server/wm/ActivityRecord;->reportDescendantOrientationChangeIfNeeded()V
+HSPLcom/android/server/wm/ActivityRecord;->reportDescendantOrientationChangeIfNeeded()V
 PLcom/android/server/wm/ActivityRecord;->reportFullyDrawnLocked(Z)V
 PLcom/android/server/wm/ActivityRecord;->requestCopySplashScreen()V
-HPLcom/android/server/wm/ActivityRecord;->requestUpdateWallpaperIfNeeded()V
+HSPLcom/android/server/wm/ActivityRecord;->requestUpdateWallpaperIfNeeded()V
 PLcom/android/server/wm/ActivityRecord;->resetSurfacePositionForAnimationLeash(Landroid/view/SurfaceControl$Transaction;)V
-HPLcom/android/server/wm/ActivityRecord;->resolveAspectRatioRestriction(Landroid/content/res/Configuration;)V
-HPLcom/android/server/wm/ActivityRecord;->resolveFixedOrientationConfiguration(Landroid/content/res/Configuration;I)V
-HPLcom/android/server/wm/ActivityRecord;->resolveOverrideConfiguration(Landroid/content/res/Configuration;)V
+HSPLcom/android/server/wm/ActivityRecord;->resolveAspectRatioRestriction(Landroid/content/res/Configuration;)V
+HSPLcom/android/server/wm/ActivityRecord;->resolveFixedOrientationConfiguration(Landroid/content/res/Configuration;I)V
+HSPLcom/android/server/wm/ActivityRecord;->resolveOverrideConfiguration(Landroid/content/res/Configuration;)V
 HPLcom/android/server/wm/ActivityRecord;->resolveSizeCompatModeConfiguration(Landroid/content/res/Configuration;)V
 PLcom/android/server/wm/ActivityRecord;->restartProcessIfVisible()V
-HPLcom/android/server/wm/ActivityRecord;->resumeKeyDispatchingLocked()V
+HSPLcom/android/server/wm/ActivityRecord;->resumeKeyDispatchingLocked()V
 PLcom/android/server/wm/ActivityRecord;->scheduleActivityMovedToDisplay(ILandroid/content/res/Configuration;)V
 HPLcom/android/server/wm/ActivityRecord;->scheduleAddStartingWindow()V
 HPLcom/android/server/wm/ActivityRecord;->scheduleConfigurationChanged(Landroid/content/res/Configuration;)V
 HPLcom/android/server/wm/ActivityRecord;->schedulePauseTimeout()V
-HPLcom/android/server/wm/ActivityRecord;->scheduleTopResumedActivityChanged(Z)Z
+HSPLcom/android/server/wm/ActivityRecord;->scheduleTopResumedActivityChanged(Z)Z
 PLcom/android/server/wm/ActivityRecord;->scheduleTransferSplashScreenTimeout()V
-HPLcom/android/server/wm/ActivityRecord;->searchCandidateLaunchingActivity()Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->searchCandidateLaunchingActivity()Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/ActivityRecord;->sendResult(ILjava/lang/String;IILandroid/content/Intent;Lcom/android/server/uri/NeededUriGrants;)V
-HPLcom/android/server/wm/ActivityRecord;->setActivityType(ZILandroid/content/Intent;Landroid/app/ActivityOptions;Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/ActivityRecord;->setAppLayoutChanges(ILjava/lang/String;)V
-HPLcom/android/server/wm/ActivityRecord;->setClientVisible(Z)V
+HSPLcom/android/server/wm/ActivityRecord;->setActivityType(ZILandroid/content/Intent;Landroid/app/ActivityOptions;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityRecord;->setAppLayoutChanges(ILjava/lang/String;)V
+HSPLcom/android/server/wm/ActivityRecord;->setClientVisible(Z)V
 HPLcom/android/server/wm/ActivityRecord;->setCurrentLaunchCanTurnScreenOn(Z)V
-HPLcom/android/server/wm/ActivityRecord;->setCustomizeSplashScreenExitAnimation(Z)V
+HSPLcom/android/server/wm/ActivityRecord;->setCustomizeSplashScreenExitAnimation(Z)V
 PLcom/android/server/wm/ActivityRecord;->setDeferHidingClient(Z)V
 HPLcom/android/server/wm/ActivityRecord;->setDropInputForAnimation(Z)V
-HPLcom/android/server/wm/ActivityRecord;->setDropInputMode(I)V
+HSPLcom/android/server/wm/ActivityRecord;->setDropInputMode(I)V
 PLcom/android/server/wm/ActivityRecord;->setLastParentBeforePip(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/ActivityRecord;->setLastReportedConfiguration(Landroid/content/res/Configuration;Landroid/content/res/Configuration;)V
-HPLcom/android/server/wm/ActivityRecord;->setLastReportedConfiguration(Landroid/util/MergedConfiguration;)V
-HPLcom/android/server/wm/ActivityRecord;->setLastReportedGlobalConfiguration(Landroid/content/res/Configuration;)V
+HSPLcom/android/server/wm/ActivityRecord;->setLastReportedConfiguration(Landroid/content/res/Configuration;Landroid/content/res/Configuration;)V
+HSPLcom/android/server/wm/ActivityRecord;->setLastReportedConfiguration(Landroid/util/MergedConfiguration;)V
+HSPLcom/android/server/wm/ActivityRecord;->setLastReportedGlobalConfiguration(Landroid/content/res/Configuration;)V
 HPLcom/android/server/wm/ActivityRecord;->setLocusId(Landroid/content/LocusId;)V
 HPLcom/android/server/wm/ActivityRecord;->setMainWindowOpaque(Z)V
 HPLcom/android/server/wm/ActivityRecord;->setOccludesParent(Z)Z
-HPLcom/android/server/wm/ActivityRecord;->setOptions(Landroid/app/ActivityOptions;)V
+HSPLcom/android/server/wm/ActivityRecord;->setOptions(Landroid/app/ActivityOptions;)V
 HPLcom/android/server/wm/ActivityRecord;->setPictureInPictureParams(Landroid/app/PictureInPictureParams;)V
-HPLcom/android/server/wm/ActivityRecord;->setProcess(Lcom/android/server/wm/WindowProcessController;)V
-PLcom/android/server/wm/ActivityRecord;->setRecentsScreenshotEnabled(Z)V
-HPLcom/android/server/wm/ActivityRecord;->setRequestedOrientation(I)V
-HPLcom/android/server/wm/ActivityRecord;->setSavedState(Landroid/os/Bundle;)V
+HSPLcom/android/server/wm/ActivityRecord;->setProcess(Lcom/android/server/wm/WindowProcessController;)V
+HPLcom/android/server/wm/ActivityRecord;->setRecentsScreenshotEnabled(Z)V
+HPLcom/android/server/wm/ActivityRecord;->setRequestedOrientation(I)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Landroid/util/MergedConfiguration;Landroid/util/MergedConfiguration;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Lcom/android/server/wm/TaskChangeNotificationController;Lcom/android/server/wm/TaskChangeNotificationController;
+HSPLcom/android/server/wm/ActivityRecord;->setSavedState(Landroid/os/Bundle;)V
 PLcom/android/server/wm/ActivityRecord;->setShowWhenLocked(Z)V
-PLcom/android/server/wm/ActivityRecord;->setSizeConfigurations(Landroid/window/SizeConfigurationBuckets;)V
-HPLcom/android/server/wm/ActivityRecord;->setState(Lcom/android/server/wm/ActivityRecord$State;Ljava/lang/String;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Ljava/lang/Enum;Lcom/android/server/wm/ActivityRecord$State;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/contentcapture/ContentCaptureManagerInternal;Lcom/android/server/contentcapture/ContentCaptureManagerService$LocalService;
-HPLcom/android/server/wm/ActivityRecord;->setSurfaceControl(Landroid/view/SurfaceControl;)V
-HPLcom/android/server/wm/ActivityRecord;->setTaskDescription(Landroid/app/ActivityManager$TaskDescription;)V+]Ljava/io/File;Ljava/io/File;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Landroid/app/ActivityManager$TaskDescription;Landroid/app/ActivityManager$TaskDescription;]Lcom/android/server/wm/RecentTasks;Lcom/android/server/wm/RecentTasks;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->setSizeConfigurations(Landroid/window/SizeConfigurationBuckets;)V
+HSPLcom/android/server/wm/ActivityRecord;->setState(Lcom/android/server/wm/ActivityRecord$State;Ljava/lang/String;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Ljava/lang/Enum;Lcom/android/server/wm/ActivityRecord$State;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/contentcapture/ContentCaptureManagerInternal;Lcom/android/server/contentcapture/ContentCaptureManagerService$LocalService;
+HSPLcom/android/server/wm/ActivityRecord;->setSurfaceControl(Landroid/view/SurfaceControl;)V
+HSPLcom/android/server/wm/ActivityRecord;->setTaskDescription(Landroid/app/ActivityManager$TaskDescription;)V+]Ljava/io/File;Ljava/io/File;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Landroid/app/ActivityManager$TaskDescription;Landroid/app/ActivityManager$TaskDescription;]Lcom/android/server/wm/RecentTasks;Lcom/android/server/wm/RecentTasks;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/ActivityRecord;->setTaskOverlay(Z)V
 PLcom/android/server/wm/ActivityRecord;->setTurnScreenOn(Z)V
-HPLcom/android/server/wm/ActivityRecord;->setVisibility(Z)V
-HPLcom/android/server/wm/ActivityRecord;->setVisibility(ZZ)V
-HPLcom/android/server/wm/ActivityRecord;->setVisible(Z)V
-HPLcom/android/server/wm/ActivityRecord;->setVisibleRequested(Z)V
+HSPLcom/android/server/wm/ActivityRecord;->setVisibility(Z)V
+HSPLcom/android/server/wm/ActivityRecord;->setVisibility(ZZ)V
+HSPLcom/android/server/wm/ActivityRecord;->setVisible(Z)V
+HSPLcom/android/server/wm/ActivityRecord;->setVisibleRequested(Z)V+]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/ActivityRecord;->setWillCloseOrEnterPip(Z)V
 PLcom/android/server/wm/ActivityRecord;->setWillReplaceChildWindows()V
-HPLcom/android/server/wm/ActivityRecord;->shouldApplyAnimation(Z)Z
-HPLcom/android/server/wm/ActivityRecord;->shouldBeResumed(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/ActivityRecord;->shouldApplyAnimation(Z)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->shouldBeResumed(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/ActivityRecord;->shouldBeVisible()Z
 HPLcom/android/server/wm/ActivityRecord;->shouldBeVisible(ZZ)Z
-HPLcom/android/server/wm/ActivityRecord;->shouldBeVisibleUnchecked()Z+]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/KeyguardController;Lcom/android/server/wm/KeyguardController;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/ActivityRecord;->shouldCreateCompatDisplayInsets()Z+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->shouldBeVisibleUnchecked()Z+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/KeyguardController;Lcom/android/server/wm/KeyguardController;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->shouldCreateCompatDisplayInsets()Z+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/ActivityRecord;->shouldDeferAnimationFinish(Ljava/lang/Runnable;)Z
-HPLcom/android/server/wm/ActivityRecord;->shouldMakeActive(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityRecord;->shouldPauseActivity(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/ActivityRecord;->shouldRelaunchLocked(ILandroid/content/res/Configuration;)Z
-HPLcom/android/server/wm/ActivityRecord;->shouldResumeActivity(Lcom/android/server/wm/ActivityRecord;)Z
-HPLcom/android/server/wm/ActivityRecord;->shouldStartActivity()Z
-PLcom/android/server/wm/ActivityRecord;->shouldStartChangeTransition(Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/TaskFragment;)Z
-HPLcom/android/server/wm/ActivityRecord;->shouldUpdateConfigForDisplayChanged()Z
+HSPLcom/android/server/wm/ActivityRecord;->shouldMakeActive(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->shouldPauseActivity(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/ActivityRecord;->shouldRelaunchLocked(ILandroid/content/res/Configuration;)Z
+HSPLcom/android/server/wm/ActivityRecord;->shouldResumeActivity(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->shouldStartActivity()Z
+HSPLcom/android/server/wm/ActivityRecord;->shouldStartChangeTransition(Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/TaskFragment;)Z
+HSPLcom/android/server/wm/ActivityRecord;->shouldUpdateConfigForDisplayChanged()Z
 HPLcom/android/server/wm/ActivityRecord;->shouldUseAppThemeSnapshot()Z
-HPLcom/android/server/wm/ActivityRecord;->shouldUseSolidColorSplashScreen(Lcom/android/server/wm/ActivityRecord;ZLandroid/app/ActivityOptions;I)Z
-HPLcom/android/server/wm/ActivityRecord;->showAllWindowsLocked()V
-HPLcom/android/server/wm/ActivityRecord;->showStartingWindow(Lcom/android/server/wm/ActivityRecord;ZZZLcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/ActivityRecord;->showStartingWindow(Lcom/android/server/wm/ActivityRecord;ZZZZLcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)V
-PLcom/android/server/wm/ActivityRecord;->showStartingWindow(Z)V
-HPLcom/android/server/wm/ActivityRecord;->showToCurrentUser()Z+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
+HSPLcom/android/server/wm/ActivityRecord;->shouldUseSolidColorSplashScreen(Lcom/android/server/wm/ActivityRecord;ZLandroid/app/ActivityOptions;I)Z
+HSPLcom/android/server/wm/ActivityRecord;->showAllWindowsLocked()V
+HSPLcom/android/server/wm/ActivityRecord;->showStartingWindow(Lcom/android/server/wm/ActivityRecord;ZZZLcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityRecord;->showStartingWindow(Lcom/android/server/wm/ActivityRecord;ZZZZLcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)V
+HSPLcom/android/server/wm/ActivityRecord;->showStartingWindow(Z)V
+HSPLcom/android/server/wm/ActivityRecord;->showToCurrentUser()Z+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
 PLcom/android/server/wm/ActivityRecord;->splashScreenAttachedLocked(Landroid/os/IBinder;)V
 PLcom/android/server/wm/ActivityRecord;->startFreezingScreen()V
-PLcom/android/server/wm/ActivityRecord;->startFreezingScreen(I)V
-PLcom/android/server/wm/ActivityRecord;->startFreezingScreenLocked(I)V
-HPLcom/android/server/wm/ActivityRecord;->startFreezingScreenLocked(Lcom/android/server/wm/WindowProcessController;I)V
-HPLcom/android/server/wm/ActivityRecord;->startLaunchTickingLocked()V
-PLcom/android/server/wm/ActivityRecord;->startRelaunching()V
+HPLcom/android/server/wm/ActivityRecord;->startFreezingScreen(I)V
+HSPLcom/android/server/wm/ActivityRecord;->startFreezingScreenLocked(I)V
+HSPLcom/android/server/wm/ActivityRecord;->startFreezingScreenLocked(Lcom/android/server/wm/WindowProcessController;I)V
+HSPLcom/android/server/wm/ActivityRecord;->startLaunchTickingLocked()V
+HPLcom/android/server/wm/ActivityRecord;->startRelaunching()V
 HPLcom/android/server/wm/ActivityRecord;->stopFreezingScreen(ZZ)V
-HPLcom/android/server/wm/ActivityRecord;->stopFreezingScreenLocked(Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->stopFreezingScreenLocked(Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/ActivityRecord;->stopIfPossible()V
-PLcom/android/server/wm/ActivityRecord;->supportsFreeformInDisplayArea(Lcom/android/server/wm/TaskDisplayArea;)Z
+HSPLcom/android/server/wm/ActivityRecord;->supportsFreeformInDisplayArea(Lcom/android/server/wm/TaskDisplayArea;)Z
 PLcom/android/server/wm/ActivityRecord;->supportsMultiWindow()Z
-HPLcom/android/server/wm/ActivityRecord;->supportsMultiWindowInDisplayArea(Lcom/android/server/wm/TaskDisplayArea;)Z
-HPLcom/android/server/wm/ActivityRecord;->supportsPictureInPicture()Z
+HSPLcom/android/server/wm/ActivityRecord;->supportsMultiWindowInDisplayArea(Lcom/android/server/wm/TaskDisplayArea;)Z
+HSPLcom/android/server/wm/ActivityRecord;->supportsPictureInPicture()Z
 HPLcom/android/server/wm/ActivityRecord;->takeFromHistory()V
-HPLcom/android/server/wm/ActivityRecord;->takeOptions()Landroid/app/ActivityOptions;
-HPLcom/android/server/wm/ActivityRecord;->takeRemoteTransition()Landroid/window/RemoteTransition;
-HPLcom/android/server/wm/ActivityRecord;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/content/Intent;Landroid/content/Intent;
-HPLcom/android/server/wm/ActivityRecord;->transferSplashScreenIfNeeded()Z
+HSPLcom/android/server/wm/ActivityRecord;->takeOptions()Landroid/app/ActivityOptions;
+HSPLcom/android/server/wm/ActivityRecord;->takeRemoteTransition()Landroid/window/RemoteTransition;
+HSPLcom/android/server/wm/ActivityRecord;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/wm/ActivityRecord;->transferSplashScreenIfNeeded()Z
 HPLcom/android/server/wm/ActivityRecord;->transferStartingWindow(Lcom/android/server/wm/ActivityRecord;)Z
-HPLcom/android/server/wm/ActivityRecord;->transferStartingWindowFromHiddenAboveTokenIfNeeded()V
+HSPLcom/android/server/wm/ActivityRecord;->transferStartingWindowFromHiddenAboveTokenIfNeeded()V
 PLcom/android/server/wm/ActivityRecord;->unregisterRemoteAnimations()V
-HPLcom/android/server/wm/ActivityRecord;->updateAllDrawn()V
-HPLcom/android/server/wm/ActivityRecord;->updateAnimatingActivityRegistry()V
+HSPLcom/android/server/wm/ActivityRecord;->updateAllDrawn()V
+HSPLcom/android/server/wm/ActivityRecord;->updateAnimatingActivityRegistry()V
 PLcom/android/server/wm/ActivityRecord;->updateApplicationInfo(Landroid/content/pm/ApplicationInfo;)V
-HPLcom/android/server/wm/ActivityRecord;->updateColorTransform()V
-HPLcom/android/server/wm/ActivityRecord;->updateCompatDisplayInsets()V+]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityRecord;->updateDrawnWindowStates(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/internal/protolog/ProtoLogGroup;Lcom/android/internal/protolog/ProtoLogGroup;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityRecord;->updateEnterpriseThumbnailDrawable(Landroid/content/Context;)V
-HPLcom/android/server/wm/ActivityRecord;->updateLetterboxSurface(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/ActivityRecord;->updateColorTransform()V
+HSPLcom/android/server/wm/ActivityRecord;->updateCompatDisplayInsets()V+]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->updateDrawnWindowStates(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/internal/protolog/ProtoLogGroup;Lcom/android/internal/protolog/ProtoLogGroup;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->updateEnterpriseThumbnailDrawable(Landroid/content/Context;)V
+HSPLcom/android/server/wm/ActivityRecord;->updateLetterboxSurface(Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/ActivityRecord;->updateMultiWindowMode()V
 HPLcom/android/server/wm/ActivityRecord;->updateOptionsLocked(Landroid/app/ActivityOptions;)V
 PLcom/android/server/wm/ActivityRecord;->updatePictureInPictureMode(Landroid/graphics/Rect;Z)V
-HPLcom/android/server/wm/ActivityRecord;->updateReportedVisibilityLocked()V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState$UpdateReportedVisibilityResults;Lcom/android/server/wm/WindowState$UpdateReportedVisibilityResults;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityRecord;->updateResolvedBoundsHorizontalPosition(Landroid/content/res/Configuration;)V
+HSPLcom/android/server/wm/ActivityRecord;->updateReportedVisibilityLocked()V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState$UpdateReportedVisibilityResults;Lcom/android/server/wm/WindowState$UpdateReportedVisibilityResults;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->updateResolvedBoundsHorizontalPosition(Landroid/content/res/Configuration;)V
 HPLcom/android/server/wm/ActivityRecord;->updateTaskDescription(Ljava/lang/CharSequence;)V
-HPLcom/android/server/wm/ActivityRecord;->updateUntrustedEmbeddingInputProtection()V
-HPLcom/android/server/wm/ActivityRecord;->updateVisibilityIgnoringKeyguard(Z)V+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityRecord;->validateStartingWindowTheme(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;I)Z
-HPLcom/android/server/wm/ActivityRecord;->windowsAreFocusable()Z
-HPLcom/android/server/wm/ActivityRecord;->windowsAreFocusable(Z)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/ActivityRecord;->writeIdentifierToProto(Landroid/util/proto/ProtoOutputStream;J)V
-HPLcom/android/server/wm/ActivityRecord;->writeNameToProto(Landroid/util/proto/ProtoOutputStream;J)V
-HPLcom/android/server/wm/ActivityRecordInputSink;-><init>(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/ActivityRecordInputSink;->applyChangesToSurfaceIfChanged(Landroid/view/SurfaceControl$Transaction;)V
-HPLcom/android/server/wm/ActivityRecordInputSink;->createInputWindowHandle()Landroid/view/InputWindowHandle;
-HPLcom/android/server/wm/ActivityRecordInputSink;->createSurface(Landroid/view/SurfaceControl$Transaction;)Landroid/view/SurfaceControl;
-HPLcom/android/server/wm/ActivityRecordInputSink;->getInputWindowHandleWrapper()Lcom/android/server/wm/InputWindowHandleWrapper;+]Lcom/android/server/wm/ActivityRecordInputSink;Lcom/android/server/wm/ActivityRecordInputSink;]Lcom/android/server/wm/InputWindowHandleWrapper;Lcom/android/server/wm/InputWindowHandleWrapper;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/ActivityRecord;->updateUntrustedEmbeddingInputProtection()V
+HSPLcom/android/server/wm/ActivityRecord;->updateVisibilityIgnoringKeyguard(Z)V+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/ActivityRecord;->validateStartingWindowTheme(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;I)Z
+HSPLcom/android/server/wm/ActivityRecord;->windowsAreFocusable()Z
+HSPLcom/android/server/wm/ActivityRecord;->windowsAreFocusable(Z)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/ActivityRecord;->writeIdentifierToProto(Landroid/util/proto/ProtoOutputStream;J)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/content/Intent;Landroid/content/Intent;
+HPLcom/android/server/wm/ActivityRecord;->writeNameToProto(Landroid/util/proto/ProtoOutputStream;J)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;
+HSPLcom/android/server/wm/ActivityRecordInputSink;-><init>(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityRecordInputSink;->applyChangesToSurfaceIfChanged(Landroid/view/SurfaceControl$Transaction;)V
+HSPLcom/android/server/wm/ActivityRecordInputSink;->createInputWindowHandle()Landroid/view/InputWindowHandle;
+HSPLcom/android/server/wm/ActivityRecordInputSink;->createSurface(Landroid/view/SurfaceControl$Transaction;)Landroid/view/SurfaceControl;
+HSPLcom/android/server/wm/ActivityRecordInputSink;->getInputWindowHandleWrapper()Lcom/android/server/wm/InputWindowHandleWrapper;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityRecordInputSink;Lcom/android/server/wm/ActivityRecordInputSink;]Lcom/android/server/wm/InputWindowHandleWrapper;Lcom/android/server/wm/InputWindowHandleWrapper;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/ActivityRecordInputSink;->releaseSurfaceControl()V
-PLcom/android/server/wm/ActivityResult;-><init>(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;IILandroid/content/Intent;)V
+HPLcom/android/server/wm/ActivityResult;-><init>(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;IILandroid/content/Intent;)V
 PLcom/android/server/wm/ActivityServiceConnectionsHolder$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/ActivityServiceConnectionsHolder;)V
 PLcom/android/server/wm/ActivityServiceConnectionsHolder$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/wm/ActivityServiceConnectionsHolder;->$r8$lambda$9icb9ywlQNrOTGlJtPRg1rj483M(Lcom/android/server/wm/ActivityServiceConnectionsHolder;)V
@@ -53448,17 +55239,17 @@
 PLcom/android/server/wm/ActivityStartController;->dumpLastHomeActivityStartResult(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/wm/ActivityStartController;->getPendingRemoteAnimationRegistry()Lcom/android/server/wm/PendingRemoteAnimationRegistry;
 HSPLcom/android/server/wm/ActivityStartController;->obtainStarter(Landroid/content/Intent;Ljava/lang/String;)Lcom/android/server/wm/ActivityStarter;
-HPLcom/android/server/wm/ActivityStartController;->onExecutionComplete(Lcom/android/server/wm/ActivityStarter;)V
+HSPLcom/android/server/wm/ActivityStartController;->onExecutionComplete(Lcom/android/server/wm/ActivityStarter;)V
 PLcom/android/server/wm/ActivityStartController;->postStartActivityProcessingForLastStarter(Lcom/android/server/wm/ActivityRecord;ILcom/android/server/wm/Task;)V
 PLcom/android/server/wm/ActivityStartController;->registerRemoteAnimationForNextActivityStart(Ljava/lang/String;Landroid/view/RemoteAnimationAdapter;Landroid/os/IBinder;)V
 HPLcom/android/server/wm/ActivityStartController;->startActivities(Landroid/app/IApplicationThread;IIILjava/lang/String;Ljava/lang/String;[Landroid/content/Intent;[Ljava/lang/String;Landroid/os/IBinder;Lcom/android/server/wm/SafeActivityOptions;ILjava/lang/String;Lcom/android/server/am/PendingIntentRecord;Z)I
 PLcom/android/server/wm/ActivityStartController;->startActivitiesInPackage(IIILjava/lang/String;Ljava/lang/String;[Landroid/content/Intent;[Ljava/lang/String;Landroid/os/IBinder;Lcom/android/server/wm/SafeActivityOptions;IZLcom/android/server/am/PendingIntentRecord;Z)I
 PLcom/android/server/wm/ActivityStartController;->startActivitiesInPackage(ILjava/lang/String;Ljava/lang/String;[Landroid/content/Intent;[Ljava/lang/String;Landroid/os/IBinder;Lcom/android/server/wm/SafeActivityOptions;IZLcom/android/server/am/PendingIntentRecord;Z)I
 HPLcom/android/server/wm/ActivityStartController;->startActivityInPackage(IIILjava/lang/String;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILcom/android/server/wm/SafeActivityOptions;ILcom/android/server/wm/Task;Ljava/lang/String;ZLcom/android/server/am/PendingIntentRecord;Z)I
-PLcom/android/server/wm/ActivityStartController;->startActivityInTaskFragment(Lcom/android/server/wm/TaskFragment;Landroid/content/Intent;Landroid/os/Bundle;Landroid/os/IBinder;II)I
+PLcom/android/server/wm/ActivityStartController;->startActivityInTaskFragment(Lcom/android/server/wm/TaskFragment;Landroid/content/Intent;Landroid/os/Bundle;Landroid/os/IBinder;IILandroid/os/IBinder;)I
 HSPLcom/android/server/wm/ActivityStartController;->startHomeActivity(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Ljava/lang/String;Lcom/android/server/wm/TaskDisplayArea;)V
-HPLcom/android/server/wm/ActivityStartController;->startSetupActivity()V
-HPLcom/android/server/wm/ActivityStartInterceptor$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityStartController;->startSetupActivity()V
+HSPLcom/android/server/wm/ActivityStartInterceptor$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityStartInterceptor$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/wm/ActivityStartInterceptor;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskSupervisor;)V
 HSPLcom/android/server/wm/ActivityStartInterceptor;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/RootWindowContainer;Landroid/content/Context;)V
@@ -53473,51 +55264,52 @@
 HSPLcom/android/server/wm/ActivityStartInterceptor;->interceptQuietProfileIfNeeded()Z
 HSPLcom/android/server/wm/ActivityStartInterceptor;->interceptSuspendedPackageIfNeeded()Z
 HSPLcom/android/server/wm/ActivityStartInterceptor;->interceptWithConfirmCredentialsIfNeeded(Landroid/content/pm/ActivityInfo;I)Landroid/content/Intent;
-HPLcom/android/server/wm/ActivityStartInterceptor;->onActivityLaunched(Landroid/app/TaskInfo;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityStartInterceptor;->onActivityLaunched(Landroid/app/TaskInfo;Lcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/ActivityStartInterceptor;->setStates(IIIILjava/lang/String;Ljava/lang/String;)V
 HSPLcom/android/server/wm/ActivityStarter$DefaultFactory;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityStartInterceptor;)V
 HSPLcom/android/server/wm/ActivityStarter$DefaultFactory;->obtain()Lcom/android/server/wm/ActivityStarter;
-HPLcom/android/server/wm/ActivityStarter$DefaultFactory;->recycle(Lcom/android/server/wm/ActivityStarter;)V
+HSPLcom/android/server/wm/ActivityStarter$DefaultFactory;->recycle(Lcom/android/server/wm/ActivityStarter;)V
 HSPLcom/android/server/wm/ActivityStarter$DefaultFactory;->setController(Lcom/android/server/wm/ActivityStartController;)V
 HSPLcom/android/server/wm/ActivityStarter$Request;-><init>()V
 HSPLcom/android/server/wm/ActivityStarter$Request;->reset()V
 HPLcom/android/server/wm/ActivityStarter$Request;->resolveActivity(Lcom/android/server/wm/ActivityTaskSupervisor;)V
-HPLcom/android/server/wm/ActivityStarter$Request;->set(Lcom/android/server/wm/ActivityStarter$Request;)V
+HSPLcom/android/server/wm/ActivityStarter$Request;->set(Lcom/android/server/wm/ActivityStarter$Request;)V
 HSPLcom/android/server/wm/ActivityStarter;-><init>(Lcom/android/server/wm/ActivityStartController;Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityStartInterceptor;)V
-HPLcom/android/server/wm/ActivityStarter;->addOrReparentStartingActivity(Lcom/android/server/wm/Task;Ljava/lang/String;)V
-HPLcom/android/server/wm/ActivityStarter;->adjustLaunchFlagsToDocumentMode(Lcom/android/server/wm/ActivityRecord;ZZI)I
-PLcom/android/server/wm/ActivityStarter;->canEmbedActivity(Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/ActivityRecord;ZLcom/android/server/wm/Task;)Z
+HSPLcom/android/server/wm/ActivityStarter;->addOrReparentStartingActivity(Lcom/android/server/wm/Task;Ljava/lang/String;)V
+HSPLcom/android/server/wm/ActivityStarter;->adjustLaunchFlagsToDocumentMode(Lcom/android/server/wm/ActivityRecord;ZZI)I
+PLcom/android/server/wm/ActivityStarter;->canEmbedActivity(Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/Task;)I
 HPLcom/android/server/wm/ActivityStarter;->complyActivityFlags(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/uri/NeededUriGrants;)V
-HPLcom/android/server/wm/ActivityStarter;->computeLaunchParams(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/Task;)V
-HPLcom/android/server/wm/ActivityStarter;->computeLaunchingTaskFlags()V
+HSPLcom/android/server/wm/ActivityStarter;->computeLaunchParams(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/ActivityStarter;->computeLaunchingTaskFlags()V
 PLcom/android/server/wm/ActivityStarter;->computeResolveFilterUid(III)I
-HPLcom/android/server/wm/ActivityStarter;->computeSourceRootTask()V
-HPLcom/android/server/wm/ActivityStarter;->computeTargetTask()Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/ActivityStarter;->computeSourceRootTask()V
+HSPLcom/android/server/wm/ActivityStarter;->computeTargetTask()Lcom/android/server/wm/Task;
 PLcom/android/server/wm/ActivityStarter;->createLaunchIntent(Landroid/content/pm/AuxiliaryResolveInfo;Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;Ljava/lang/String;I)Landroid/content/Intent;
 HPLcom/android/server/wm/ActivityStarter;->deliverNewIntent(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/uri/NeededUriGrants;)V
-HPLcom/android/server/wm/ActivityStarter;->deliverToCurrentTopIfNeeded(Lcom/android/server/wm/Task;Lcom/android/server/uri/NeededUriGrants;)I
-PLcom/android/server/wm/ActivityStarter;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HSPLcom/android/server/wm/ActivityStarter;->deliverToCurrentTopIfNeeded(Lcom/android/server/wm/Task;Lcom/android/server/uri/NeededUriGrants;)I
+HPLcom/android/server/wm/ActivityStarter;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/wm/ActivityStarter;->execute()I
 HSPLcom/android/server/wm/ActivityStarter;->executeRequest(Lcom/android/server/wm/ActivityStarter$Request;)I
-PLcom/android/server/wm/ActivityStarter;->getExternalResult(I)I
+HSPLcom/android/server/wm/ActivityStarter;->getExternalResult(I)I
 PLcom/android/server/wm/ActivityStarter;->getIntent()Landroid/content/Intent;
-HPLcom/android/server/wm/ActivityStarter;->getOrCreateRootTask(Lcom/android/server/wm/ActivityRecord;ILcom/android/server/wm/Task;Landroid/app/ActivityOptions;)Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/ActivityStarter;->getReusableTask()Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/ActivityStarter;->getOrCreateRootTask(Lcom/android/server/wm/ActivityRecord;ILcom/android/server/wm/Task;Landroid/app/ActivityOptions;)Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/ActivityStarter;->getReusableTask()Lcom/android/server/wm/Task;
 HPLcom/android/server/wm/ActivityStarter;->handleBackgroundActivityAbort(Lcom/android/server/wm/ActivityRecord;)Z
-HPLcom/android/server/wm/ActivityStarter;->handleStartResult(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;ILcom/android/server/wm/Transition;Landroid/window/RemoteTransition;)Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/ActivityStarter;->isAllowedToStart(Lcom/android/server/wm/ActivityRecord;ZLcom/android/server/wm/Task;)I
+HSPLcom/android/server/wm/ActivityStarter;->handleStartResult(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;ILcom/android/server/wm/Transition;Landroid/window/RemoteTransition;)Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/ActivityStarter;->isAllowedToStart(Lcom/android/server/wm/ActivityRecord;ZLcom/android/server/wm/Task;)I
 PLcom/android/server/wm/ActivityStarter;->isDocumentLaunchesIntoExisting(I)Z
 HPLcom/android/server/wm/ActivityStarter;->isHomeApp(ILjava/lang/String;)Z
 HPLcom/android/server/wm/ActivityStarter;->isLaunchModeOneOf(II)Z
 PLcom/android/server/wm/ActivityStarter;->isLaunchModeOneOf(III)Z
-HPLcom/android/server/wm/ActivityStarter;->onExecutionComplete()V
-HPLcom/android/server/wm/ActivityStarter;->postStartActivityProcessing(Lcom/android/server/wm/ActivityRecord;ILcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/ActivityStarter;->onExecutionComplete()V
+HSPLcom/android/server/wm/ActivityStarter;->postStartActivityProcessing(Lcom/android/server/wm/ActivityRecord;ILcom/android/server/wm/Task;)V
 HPLcom/android/server/wm/ActivityStarter;->recycleTask(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/Task;Lcom/android/server/uri/NeededUriGrants;)I
+PLcom/android/server/wm/ActivityStarter;->relatedToPackage(Ljava/lang/String;)Z
 HSPLcom/android/server/wm/ActivityStarter;->reset(Z)V
 HSPLcom/android/server/wm/ActivityStarter;->resolveToHeavyWeightSwitcherIfNeeded()I
 HPLcom/android/server/wm/ActivityStarter;->resumeTargetRootTaskIfNeeded()V
-HPLcom/android/server/wm/ActivityStarter;->sendNewTaskResultRequestIfNeeded()V
-HPLcom/android/server/wm/ActivityStarter;->set(Lcom/android/server/wm/ActivityStarter;)V
+HSPLcom/android/server/wm/ActivityStarter;->sendNewTaskResultRequestIfNeeded()V
+HSPLcom/android/server/wm/ActivityStarter;->set(Lcom/android/server/wm/ActivityStarter;)V
 HSPLcom/android/server/wm/ActivityStarter;->setActivityInfo(Landroid/content/pm/ActivityInfo;)Lcom/android/server/wm/ActivityStarter;
 HSPLcom/android/server/wm/ActivityStarter;->setActivityOptions(Landroid/os/Bundle;)Lcom/android/server/wm/ActivityStarter;
 HSPLcom/android/server/wm/ActivityStarter;->setActivityOptions(Lcom/android/server/wm/SafeActivityOptions;)Lcom/android/server/wm/ActivityStarter;
@@ -53529,15 +55321,16 @@
 PLcom/android/server/wm/ActivityStarter;->setCallingPid(I)Lcom/android/server/wm/ActivityStarter;
 HSPLcom/android/server/wm/ActivityStarter;->setCallingUid(I)Lcom/android/server/wm/ActivityStarter;
 PLcom/android/server/wm/ActivityStarter;->setComponentSpecified(Z)Lcom/android/server/wm/ActivityStarter;
+PLcom/android/server/wm/ActivityStarter;->setErrorCallbackToken(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityStarter;
 PLcom/android/server/wm/ActivityStarter;->setFilterCallingUid(I)Lcom/android/server/wm/ActivityStarter;
 PLcom/android/server/wm/ActivityStarter;->setGlobalConfiguration(Landroid/content/res/Configuration;)Lcom/android/server/wm/ActivityStarter;
 PLcom/android/server/wm/ActivityStarter;->setIgnoreTargetSecurity(Z)Lcom/android/server/wm/ActivityStarter;
 HPLcom/android/server/wm/ActivityStarter;->setInTask(Lcom/android/server/wm/Task;)Lcom/android/server/wm/ActivityStarter;
 PLcom/android/server/wm/ActivityStarter;->setInTaskFragment(Lcom/android/server/wm/TaskFragment;)Lcom/android/server/wm/ActivityStarter;
-HPLcom/android/server/wm/ActivityStarter;->setInitialState(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Lcom/android/server/wm/Task;Lcom/android/server/wm/TaskFragment;ZILcom/android/server/wm/ActivityRecord;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;Z)V
+HSPLcom/android/server/wm/ActivityStarter;->setInitialState(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Lcom/android/server/wm/Task;Lcom/android/server/wm/TaskFragment;ZILcom/android/server/wm/ActivityRecord;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;Z)V
 HSPLcom/android/server/wm/ActivityStarter;->setIntent(Landroid/content/Intent;)Lcom/android/server/wm/ActivityStarter;
 PLcom/android/server/wm/ActivityStarter;->setIntentGrants(Lcom/android/server/uri/NeededUriGrants;)Lcom/android/server/wm/ActivityStarter;
-HPLcom/android/server/wm/ActivityStarter;->setNewTask(Lcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/ActivityStarter;->setNewTask(Lcom/android/server/wm/Task;)V
 HPLcom/android/server/wm/ActivityStarter;->setOriginatingPendingIntent(Lcom/android/server/am/PendingIntentRecord;)Lcom/android/server/wm/ActivityStarter;
 HSPLcom/android/server/wm/ActivityStarter;->setOutActivity([Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityStarter;
 HPLcom/android/server/wm/ActivityStarter;->setProfilerInfo(Landroid/app/ProfilerInfo;)Lcom/android/server/wm/ActivityStarter;
@@ -53551,49 +55344,52 @@
 HPLcom/android/server/wm/ActivityStarter;->setStartFlags(I)Lcom/android/server/wm/ActivityStarter;
 HPLcom/android/server/wm/ActivityStarter;->setTargetRootTaskIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
 HPLcom/android/server/wm/ActivityStarter;->setUserId(I)Lcom/android/server/wm/ActivityStarter;
+PLcom/android/server/wm/ActivityStarter;->setVoiceInteractor(Lcom/android/internal/app/IVoiceInteractor;)Lcom/android/server/wm/ActivityStarter;
+PLcom/android/server/wm/ActivityStarter;->setVoiceSession(Landroid/service/voice/IVoiceInteractionSession;)Lcom/android/server/wm/ActivityStarter;
 HSPLcom/android/server/wm/ActivityStarter;->shouldAbortBackgroundActivityStart(IILjava/lang/String;IILcom/android/server/wm/WindowProcessController;Lcom/android/server/am/PendingIntentRecord;ZLandroid/content/Intent;Landroid/app/ActivityOptions;)Z
-HPLcom/android/server/wm/ActivityStarter;->startActivityInner(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;IZLandroid/app/ActivityOptions;Lcom/android/server/wm/Task;Lcom/android/server/wm/TaskFragment;ZLcom/android/server/uri/NeededUriGrants;)I
-HPLcom/android/server/wm/ActivityStarter;->startActivityUnchecked(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;IZLandroid/app/ActivityOptions;Lcom/android/server/wm/Task;Lcom/android/server/wm/TaskFragment;ZLcom/android/server/uri/NeededUriGrants;)I
-HPLcom/android/server/wm/ActivityTaskManagerInternal$ActivityTokens;-><init>(Lcom/android/server/wm/ActivityTaskManagerInternal;Landroid/os/IBinder;Landroid/os/IBinder;Landroid/app/IApplicationThread;Landroid/os/IBinder;)V
+HSPLcom/android/server/wm/ActivityStarter;->startActivityInner(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;IZLandroid/app/ActivityOptions;Lcom/android/server/wm/Task;Lcom/android/server/wm/TaskFragment;ZLcom/android/server/uri/NeededUriGrants;)I
+HSPLcom/android/server/wm/ActivityStarter;->startActivityUnchecked(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;IZLandroid/app/ActivityOptions;Lcom/android/server/wm/Task;Lcom/android/server/wm/TaskFragment;ZLcom/android/server/uri/NeededUriGrants;)I
+HPLcom/android/server/wm/ActivityTaskManagerInternal$ActivityTokens;-><init>(Lcom/android/server/wm/ActivityTaskManagerInternal;Landroid/os/IBinder;Landroid/os/IBinder;Landroid/app/IApplicationThread;Landroid/os/IBinder;I)V
 PLcom/android/server/wm/ActivityTaskManagerInternal$ActivityTokens;->getActivityToken()Landroid/os/IBinder;
 PLcom/android/server/wm/ActivityTaskManagerInternal$ActivityTokens;->getApplicationThread()Landroid/app/IApplicationThread;
 PLcom/android/server/wm/ActivityTaskManagerInternal$ActivityTokens;->getAssistToken()Landroid/os/IBinder;
+PLcom/android/server/wm/ActivityTaskManagerInternal$ActivityTokens;->getUid()I
 PLcom/android/server/wm/ActivityTaskManagerInternal$PackageConfig;-><init>(Ljava/lang/Integer;Landroid/os/LocaleList;)V
 HSPLcom/android/server/wm/ActivityTaskManagerInternal;-><init>()V
-HPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda0;-><init>()V
-HPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda0;-><init>()V
+HSPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda10;-><init>()V
 HPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda10;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda11;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;ZZ)V
 HPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda11;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda12;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Z)V
 HPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda12;->run()V
-PLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda13;-><init>()V
-HPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda13;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda13;-><init>()V
+HSPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda13;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda14;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;)V
 HPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda14;->run()V
 PLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda15;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityRecord;Landroid/app/PictureInPictureParams;)V
 PLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda15;->run()V
 PLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda16;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;ZZ)V
-PLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda16;->run()V
+HSPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda16;->run()V
 HPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda17;-><init>(Landroid/app/ActivityManagerInternal;)V
-HPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda17;->run()V
+HSPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda17;->run()V
 HPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;I)V
 HPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda2;-><init>()V
 PLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda3;-><init>()V
 HSPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-HPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda4;->run()V
-HPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;ZLcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda6;->run()V
+HSPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda4;->run()V
+HSPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;ZLcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda6;->run()V
 HPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda7;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Z)V
 HPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda7;->run()V
 HSPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda8;-><init>()V
 HSPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda8;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-HPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda9;-><init>()V
-HPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda9;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda9;-><init>()V
+HSPLcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda9;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$1;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;)V
 HPLcom/android/server/wm/ActivityTaskManagerService$1;->run()V
 PLcom/android/server/wm/ActivityTaskManagerService$2;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Ljava/lang/Runnable;)V
@@ -53609,9 +55405,9 @@
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->$r8$lambda$L8B1VCMCiuH3LhAmKVCwlragYc4(Ljava/util/List;Lcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;)V
-HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->attachApplication(Lcom/android/server/wm/WindowProcessController;)Z+]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->canGcNow()Z
-HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->canShowErrorDialogs()Z
+HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->attachApplication(Lcom/android/server/wm/WindowProcessController;)Z+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->canGcNow()Z
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->canShowErrorDialogs()Z+]Lcom/android/server/wm/KeyguardController;Lcom/android/server/wm/KeyguardController;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;
 HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->checkCanCloseSystemDialogs(IILjava/lang/String;)Z
 HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->cleanupDisabledPackageComponents(Ljava/lang/String;Ljava/util/Set;IZ)V+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/RecentTasks;Lcom/android/server/wm/RecentTasks;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->clearHeavyWeightProcessIfEquals(Lcom/android/server/wm/WindowProcessController;)V+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;
@@ -53622,11 +55418,11 @@
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->createPackageConfigurationUpdater()Lcom/android/server/wm/ActivityTaskManagerInternal$PackageConfigurationUpdater;
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->createPackageConfigurationUpdater(Ljava/lang/String;I)Lcom/android/server/wm/ActivityTaskManagerInternal$PackageConfigurationUpdater;
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->createSleepTokenAcquirer(Ljava/lang/String;)Lcom/android/server/wm/ActivityTaskManagerInternal$SleepTokenAcquirer;
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZZLjava/lang/String;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZZLjava/lang/String;)V
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->dumpActivity(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Ljava/lang/String;[Ljava/lang/String;IZZZI)Z
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->dumpForOom(Ljava/io/PrintWriter;)V
-HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->dumpForProcesses(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;ZLjava/lang/String;IZZI)Z
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->enableScreenAfterBoot(Z)V
+HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->dumpForOom(Ljava/io/PrintWriter;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->dumpForProcesses(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;ZLjava/lang/String;IZZI)Z
+HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->enableScreenAfterBoot(Z)V
 HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->finishTopCrashedActivities(Lcom/android/server/wm/WindowProcessController;Ljava/lang/String;)I
 HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getActivityName(Landroid/os/IBinder;)Landroid/content/ComponentName;
 HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getAppTasks(Ljava/lang/String;I)Ljava/util/List;
@@ -53641,30 +55437,31 @@
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getTaskToShowPermissionDialogOn(Ljava/lang/String;I)I+]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getTopApp()Lcom/android/server/wm/WindowProcessController;
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getTopProcessState()I
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getTopVisibleActivities()Ljava/util/List;
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->getTopVisibleActivities()Ljava/util/List;
 HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->handleAppCrashInActivityController(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;JLjava/lang/String;Ljava/lang/Runnable;)Z
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->handleAppDied(Lcom/android/server/wm/WindowProcessController;ZLjava/lang/Runnable;)V+]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->hasResumedActivity(I)Z
-HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->hasSystemAlertWindowPermission(IILjava/lang/String;)Z
+HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->hasSystemAlertWindowPermission(IILjava/lang/String;)Z
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->isBaseOfLockedTask(Ljava/lang/String;)Z
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->isCallerRecents(I)Z+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->isFactoryTestProcess(Lcom/android/server/wm/WindowProcessController;)Z
 HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->isGetTasksAllowed(Ljava/lang/String;II)Z+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;
 HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->isShuttingDown()Z
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->isSleeping()Z
-HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->isUidForeground(I)Z+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;
+HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->isUidForeground(I)Z+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->lambda$getAttachedNonFinishingActivityForTask$2(Ljava/util/List;Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->loadRecentTasksForUser(I)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->notifyActiveVoiceInteractionServiceChanged(Landroid/content/ComponentName;)V
 HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->notifyDreamStateChanged(Z)V
+PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->notifyLockedProfile(II)V
 HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->notifyWakingUp()V
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onCleanUpApplicationRecord(Lcom/android/server/wm/WindowProcessController;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onForceStopPackage(Ljava/lang/String;ZZI)Z
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onHandleAppCrash(Lcom/android/server/wm/WindowProcessController;)V
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onHandleAppCrash(Lcom/android/server/wm/WindowProcessController;)V+]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onPackageAdded(Ljava/lang/String;Z)V
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onPackageDataCleared(Ljava/lang/String;I)V
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onPackageReplaced(Landroid/content/pm/ApplicationInfo;)V
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onPackageUninstalled(Ljava/lang/String;I)V
+HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onPackageUninstalled(Ljava/lang/String;I)V
 HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onPackagesSuspendedChanged([Ljava/lang/String;ZI)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onProcessAdded(Lcom/android/server/wm/WindowProcessController;)V+]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->onProcessMapped(ILcom/android/server/wm/WindowProcessController;)V+]Lcom/android/server/wm/WindowProcessControllerMap;Lcom/android/server/wm/WindowProcessControllerMap;
@@ -53679,19 +55476,21 @@
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->registerScreenObserver(Lcom/android/server/wm/ActivityTaskManagerInternal$ScreenObserver;)V
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->removeRecentTasksByPackageName(Ljava/lang/String;I)V
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->removeUser(I)V
-HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->resumeTopActivities(Z)V
+HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->resumeTopActivities(Z)V+]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->sendActivityResult(ILandroid/os/IBinder;Ljava/lang/String;IILandroid/content/Intent;)V
-HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->setAccessibilityServiceUids(Landroid/util/IntArray;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->setAccessibilityServiceUids(Landroid/util/IntArray;)V
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->setAllowAppSwitches(Ljava/lang/String;II)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->setBackgroundActivityStartCallback(Lcom/android/server/wm/BackgroundActivityStartCallback;)V
+PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->setCompanionAppUids(ILjava/util/Set;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->setDeviceOwnerUid(I)V
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->setFocusedActivity(Landroid/os/IBinder;)V
-PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->showSystemReadyErrorDialogsIfNeeded()V
+HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->showSystemReadyErrorDialogsIfNeeded()V
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->shuttingDown(ZI)Z
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->startActivitiesAsPackage(Ljava/lang/String;Ljava/lang/String;I[Landroid/content/Intent;Landroid/os/Bundle;)I
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->startActivitiesInPackage(IIILjava/lang/String;Ljava/lang/String;[Landroid/content/Intent;[Ljava/lang/String;Landroid/os/IBinder;Lcom/android/server/wm/SafeActivityOptions;IZLcom/android/server/am/PendingIntentRecord;Z)I
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->startActivityAsUser(Landroid/app/IApplicationThread;Ljava/lang/String;Ljava/lang/String;Landroid/content/Intent;Landroid/os/IBinder;ILandroid/os/Bundle;I)I
 HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->startActivityInPackage(IIILjava/lang/String;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILcom/android/server/wm/SafeActivityOptions;ILcom/android/server/wm/Task;Ljava/lang/String;ZLcom/android/server/am/PendingIntentRecord;Z)I
+PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->startConfirmDeviceCredentialIntent(Landroid/content/Intent;Landroid/os/Bundle;)V
 PLcom/android/server/wm/ActivityTaskManagerService$LocalService;->startHomeActivity(ILjava/lang/String;)Z
 HSPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->startHomeOnAllDisplays(ILjava/lang/String;)Z
 HPLcom/android/server/wm/ActivityTaskManagerService$LocalService;->startHomeOnDisplay(ILjava/lang/String;IZZ)Z
@@ -53705,13 +55504,13 @@
 HSPLcom/android/server/wm/ActivityTaskManagerService$SettingObserver;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;)V
 PLcom/android/server/wm/ActivityTaskManagerService$SettingObserver;->onChange(ZLjava/util/Collection;II)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$SleepTokenAcquirerImpl;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Ljava/lang/String;)V
-HPLcom/android/server/wm/ActivityTaskManagerService$SleepTokenAcquirerImpl;->acquire(I)V
+HPLcom/android/server/wm/ActivityTaskManagerService$SleepTokenAcquirerImpl;->acquire(I)V+]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
 HSPLcom/android/server/wm/ActivityTaskManagerService$SleepTokenAcquirerImpl;->release(I)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$UiHandler;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService$UpdateConfigurationResult;-><init>()V
-PLcom/android/server/wm/ActivityTaskManagerService;->$r8$lambda$3ir4F8YeWgNCplL0b7P4iAJf_NI(Lcom/android/server/wm/ActivityTaskManagerService;ILcom/android/server/wm/DisplayContent;)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->$r8$lambda$3ir4F8YeWgNCplL0b7P4iAJf_NI(Lcom/android/server/wm/ActivityTaskManagerService;ILcom/android/server/wm/DisplayContent;)V
 PLcom/android/server/wm/ActivityTaskManagerService;->$r8$lambda$66J0l7jUNvp5Oq0sLDSdFroSm90(Lcom/android/server/wm/ActivityTaskManagerService;ZZ)V
-HPLcom/android/server/wm/ActivityTaskManagerService;->$r8$lambda$7xcKI9AdB9J43MHHO7yVz7wKEu8(Lcom/android/server/wm/ActivityTaskManagerService;ZLcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->$r8$lambda$7xcKI9AdB9J43MHHO7yVz7wKEu8(Lcom/android/server/wm/ActivityTaskManagerService;ZLcom/android/server/wm/ActivityRecord;)V
 HPLcom/android/server/wm/ActivityTaskManagerService;->$r8$lambda$LyQkbVg42yAH9p4mmExxe-lDwPU(Lcom/android/server/wm/ActivityTaskManagerService;ZZLcom/android/server/wm/DisplayContent;)V
 HPLcom/android/server/wm/ActivityTaskManagerService;->$r8$lambda$V1cY3Rh4c4tnBdbjENKU_yUcvWk(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityTaskManagerService;->$r8$lambda$Wo7cwHpAhxbLZvIbkJ6sJdj1nuI(Lcom/android/server/wm/ActivityTaskManagerService;Z)V
@@ -53721,29 +55520,30 @@
 PLcom/android/server/wm/ActivityTaskManagerService;->$r8$lambda$uDPnzqVuuoVSFA7RJcXFWsrCwrY(Lcom/android/server/wm/ActivityTaskManagerService;ILandroid/content/res/Configuration;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$fgetmActivityInterceptorCallbacks(Lcom/android/server/wm/ActivityTaskManagerService;)Landroid/util/SparseArray;
 PLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$fgetmAppSwitchesState(Lcom/android/server/wm/ActivityTaskManagerService;)I
+PLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$fgetmCompanionAppUidsMap(Lcom/android/server/wm/ActivityTaskManagerService;)Ljava/util/Map;
 PLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$fgetmPreviousProcessVisibleTime(Lcom/android/server/wm/ActivityTaskManagerService;)J
 PLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$fgetmRecentTasks(Lcom/android/server/wm/ActivityTaskManagerService;)Lcom/android/server/wm/RecentTasks;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$fgetmRetainPowerModeAndTopProcessState(Lcom/android/server/wm/ActivityTaskManagerService;)Z
-PLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$fgetmShowDialogs(Lcom/android/server/wm/ActivityTaskManagerService;)Z
+HPLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$fgetmShowDialogs(Lcom/android/server/wm/ActivityTaskManagerService;)Z
 HSPLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$fgetmSleeping(Lcom/android/server/wm/ActivityTaskManagerService;)Z
-PLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$fputmAccessibilityServiceUids(Lcom/android/server/wm/ActivityTaskManagerService;[I)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$fputmAccessibilityServiceUids(Lcom/android/server/wm/ActivityTaskManagerService;[I)V
 PLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$fputmAppSwitchesState(Lcom/android/server/wm/ActivityTaskManagerService;I)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$fputmBackgroundActivityStartCallback(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/BackgroundActivityStartCallback;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$fputmDreaming(Lcom/android/server/wm/ActivityTaskManagerService;Z)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$fputmDreaming(Lcom/android/server/wm/ActivityTaskManagerService;Z)V
 PLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$fputmRetainPowerModeAndTopProcessState(Lcom/android/server/wm/ActivityTaskManagerService;Z)V
 PLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$mgetAppTasks(Lcom/android/server/wm/ActivityTaskManagerService;Ljava/lang/String;I)Ljava/util/List;
 PLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$mpendingAssistExtrasTimedOut(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService$PendingAssistExtras;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$mstart(Lcom/android/server/wm/ActivityTaskManagerService;)V
 PLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$mstartActivityAsUser(Lcom/android/server/wm/ActivityTaskManagerService;Landroid/app/IApplicationThread;Ljava/lang/String;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILandroid/app/ProfilerInfo;Landroid/os/Bundle;IZ)I
 PLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$mupdateConfigurationLocked(Lcom/android/server/wm/ActivityTaskManagerService;Landroid/content/res/Configuration;Lcom/android/server/wm/ActivityRecord;ZZIZ)Z
-PLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$mupdateEventDispatchingLocked(Lcom/android/server/wm/ActivityTaskManagerService;Z)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$mupdateEventDispatchingLocked(Lcom/android/server/wm/ActivityTaskManagerService;Z)V
 PLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$mupdateFontScaleIfNeeded(Lcom/android/server/wm/ActivityTaskManagerService;I)V
 PLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$mupdateFontWeightAdjustmentIfNeeded(Lcom/android/server/wm/ActivityTaskManagerService;I)V
 PLcom/android/server/wm/ActivityTaskManagerService;->-$$Nest$mwriteSleepStateToProto(Lcom/android/server/wm/ActivityTaskManagerService;Landroid/util/proto/ProtoOutputStream;IZ)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;-><init>(Landroid/content/Context;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->addWindowLayoutReasons(I)V
-HPLcom/android/server/wm/ActivityTaskManagerService;->applyUpdateLockStateLocked(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/ActivityTaskManagerService;->applyUpdateVrModeLocked(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->applyUpdateLockStateLocked(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->applyUpdateVrModeLocked(Lcom/android/server/wm/ActivityRecord;)V
 HPLcom/android/server/wm/ActivityTaskManagerService;->assertPackageMatchesCallingUid(Ljava/lang/String;)V
 HPLcom/android/server/wm/ActivityTaskManagerService;->buildAssistBundleLocked(Lcom/android/server/wm/ActivityTaskManagerService$PendingAssistExtras;Landroid/os/Bundle;)V
 HPLcom/android/server/wm/ActivityTaskManagerService;->canCloseSystemDialogs(II)Z
@@ -53754,29 +55554,29 @@
 HSPLcom/android/server/wm/ActivityTaskManagerService;->checkComponentPermission(Ljava/lang/String;IIIZ)I
 HSPLcom/android/server/wm/ActivityTaskManagerService;->checkPermission(Ljava/lang/String;II)I
 HSPLcom/android/server/wm/ActivityTaskManagerService;->clearHeavyWeightProcessIfEquals(Lcom/android/server/wm/WindowProcessController;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->collectGrants(Landroid/content/Intent;Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/uri/NeededUriGrants;
+HPLcom/android/server/wm/ActivityTaskManagerService;->collectGrants(Landroid/content/Intent;Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/uri/NeededUriGrants;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->compatibilityInfoForPackageLocked(Landroid/content/pm/ApplicationInfo;)Landroid/content/res/CompatibilityInfo;+]Lcom/android/server/wm/CompatModePackages;Lcom/android/server/wm/CompatModePackages;
-HPLcom/android/server/wm/ActivityTaskManagerService;->constructResumedTraceName(Ljava/lang/String;)Ljava/lang/String;
+HSPLcom/android/server/wm/ActivityTaskManagerService;->constructResumedTraceName(Ljava/lang/String;)Ljava/lang/String;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->continueWindowLayout()V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->createAppWarnings(Landroid/content/Context;Landroid/os/Handler;Landroid/os/Handler;Ljava/io/File;)Lcom/android/server/wm/AppWarnings;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->createTaskSupervisor()Lcom/android/server/wm/ActivityTaskSupervisor;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->deferWindowLayout()V
-PLcom/android/server/wm/ActivityTaskManagerService;->dumpActivitiesLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZZLjava/lang/String;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->dumpActivitiesLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZZLjava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->dumpActivitiesLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZZLjava/lang/String;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->dumpActivitiesLocked(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;IZZLjava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/wm/ActivityTaskManagerService;->dumpActivity(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Ljava/lang/String;[Ljava/lang/String;IZZZI)Z
 PLcom/android/server/wm/ActivityTaskManagerService;->dumpActivity(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Lcom/android/server/wm/ActivityRecord;[Ljava/lang/String;Z)V
 PLcom/android/server/wm/ActivityTaskManagerService;->dumpActivityContainersLocked(Ljava/io/PrintWriter;)V
 PLcom/android/server/wm/ActivityTaskManagerService;->dumpActivityStarterLocked(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/wm/ActivityTaskManagerService;->dumpInstalledPackagesConfig(Ljava/io/PrintWriter;)V
 PLcom/android/server/wm/ActivityTaskManagerService;->dumpLastANRLocked(Ljava/io/PrintWriter;)V
-HPLcom/android/server/wm/ActivityTaskManagerService;->endLaunchPowerMode(I)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->endLaunchPowerMode(I)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/RootWindowContainer;]Landroid/os/Handler;Lcom/android/server/wm/ActivityTaskManagerService$H;]Landroid/os/PowerManagerInternal;Lcom/android/server/power/PowerManagerService$LocalService;]Lcom/android/server/wm/UnknownAppVisibilityController;Lcom/android/server/wm/UnknownAppVisibilityController;
 PLcom/android/server/wm/ActivityTaskManagerService;->enforceCallerIsDream(Ljava/lang/String;)V
 HPLcom/android/server/wm/ActivityTaskManagerService;->enforceNotIsolatedCaller(Ljava/lang/String;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->enforceTaskPermission(Ljava/lang/String;)V
 HPLcom/android/server/wm/ActivityTaskManagerService;->enqueueAssistContext(ILandroid/content/Intent;Ljava/lang/String;Landroid/app/IAssistDataReceiver;Landroid/os/Bundle;Landroid/os/IBinder;ZZILandroid/os/Bundle;JI)Lcom/android/server/wm/ActivityTaskManagerService$PendingAssistExtras;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->ensureConfigAndVisibilityAfterUpdate(Lcom/android/server/wm/ActivityRecord;I)Z
 PLcom/android/server/wm/ActivityTaskManagerService;->enterPictureInPictureMode(Lcom/android/server/wm/ActivityRecord;Landroid/app/PictureInPictureParams;)Z
-HPLcom/android/server/wm/ActivityTaskManagerService;->finishRunningVoiceLocked()V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->finishRunningVoiceLocked()V
 PLcom/android/server/wm/ActivityTaskManagerService;->finishVoiceTask(Landroid/service/voice/IVoiceInteractionSession;)V
 PLcom/android/server/wm/ActivityTaskManagerService;->getActivityClientController()Landroid/app/IActivityClientController;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getActivityInterceptorCallbacks()Landroid/util/SparseArray;
@@ -53784,13 +55584,13 @@
 PLcom/android/server/wm/ActivityTaskManagerService;->getAllRootTaskInfos()Ljava/util/List;
 PLcom/android/server/wm/ActivityTaskManagerService;->getAnrController(Landroid/content/pm/ApplicationInfo;)Landroid/app/AnrController;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getAppInfoForUser(Landroid/content/pm/ApplicationInfo;I)Landroid/content/pm/ApplicationInfo;
-HPLcom/android/server/wm/ActivityTaskManagerService;->getAppOpsManager()Landroid/app/AppOpsManager;
+HSPLcom/android/server/wm/ActivityTaskManagerService;->getAppOpsManager()Landroid/app/AppOpsManager;
 HPLcom/android/server/wm/ActivityTaskManagerService;->getAppTasks(Ljava/lang/String;)Ljava/util/List;
 HPLcom/android/server/wm/ActivityTaskManagerService;->getAppTasks(Ljava/lang/String;I)Ljava/util/List;
-HPLcom/android/server/wm/ActivityTaskManagerService;->getAppWarningsLocked()Lcom/android/server/wm/AppWarnings;
+HSPLcom/android/server/wm/ActivityTaskManagerService;->getAppWarningsLocked()Lcom/android/server/wm/AppWarnings;
 PLcom/android/server/wm/ActivityTaskManagerService;->getAssistContextExtras(I)Landroid/os/Bundle;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getBackgroundActivityStartCallback()Lcom/android/server/wm/BackgroundActivityStartCallback;
-HPLcom/android/server/wm/ActivityTaskManagerService;->getBalAppSwitchesState()I
+HSPLcom/android/server/wm/ActivityTaskManagerService;->getBalAppSwitchesState()I
 HPLcom/android/server/wm/ActivityTaskManagerService;->getConfiguration()Landroid/content/res/Configuration;
 HPLcom/android/server/wm/ActivityTaskManagerService;->getCurrentUserId()I
 HPLcom/android/server/wm/ActivityTaskManagerService;->getDeviceConfigurationInfo()Landroid/content/pm/ConfigurationInfo;
@@ -53800,14 +55600,14 @@
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getGlobalConfigurationForPid(I)Landroid/content/res/Configuration;+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/WindowProcessControllerMap;Lcom/android/server/wm/WindowProcessControllerMap;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getGlobalLock()Lcom/android/server/wm/WindowManagerGlobalLock;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getHomeIntent()Landroid/content/Intent;
-HPLcom/android/server/wm/ActivityTaskManagerService;->getInputDispatchingTimeoutMillisLocked(Lcom/android/server/wm/ActivityRecord;)J
-HPLcom/android/server/wm/ActivityTaskManagerService;->getInputDispatchingTimeoutMillisLocked(Lcom/android/server/wm/WindowProcessController;)J
+HSPLcom/android/server/wm/ActivityTaskManagerService;->getInputDispatchingTimeoutMillisLocked(Lcom/android/server/wm/ActivityRecord;)J
+HSPLcom/android/server/wm/ActivityTaskManagerService;->getInputDispatchingTimeoutMillisLocked(Lcom/android/server/wm/WindowProcessController;)J
 PLcom/android/server/wm/ActivityTaskManagerService;->getIntentSenderLocked(ILjava/lang/String;Ljava/lang/String;IILandroid/os/IBinder;Ljava/lang/String;I[Landroid/content/Intent;[Ljava/lang/String;ILandroid/os/Bundle;)Landroid/content/IIntentSender;
 HPLcom/android/server/wm/ActivityTaskManagerService;->getLastResumedActivityUserId()I
-HPLcom/android/server/wm/ActivityTaskManagerService;->getLastStopAppSwitchesTime()J
+HSPLcom/android/server/wm/ActivityTaskManagerService;->getLastStopAppSwitchesTime()J
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getLifecycleManager()Lcom/android/server/wm/ClientLifecycleManager;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getLockTaskController()Lcom/android/server/wm/LockTaskController;
-HSPLcom/android/server/wm/ActivityTaskManagerService;->getLockTaskModeState()I
+HSPLcom/android/server/wm/ActivityTaskManagerService;->getLockTaskModeState()I+]Lcom/android/server/wm/LockTaskController;Lcom/android/server/wm/LockTaskController;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getPackageManager()Landroid/content/pm/IPackageManager;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getPackageManagerInternalLocked()Landroid/content/pm/PackageManagerInternal;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getPermissionPolicyInternal()Lcom/android/server/policy/PermissionPolicyInternal;
@@ -53827,12 +55627,12 @@
 HPLcom/android/server/wm/ActivityTaskManagerService;->getTasks(IZZ)Ljava/util/List;+]Lcom/android/server/pm/UserManagerService;Lcom/android/server/pm/UserManagerService;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
 HPLcom/android/server/wm/ActivityTaskManagerService;->getTopDisplayFocusedRootTask()Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getTransitionController()Lcom/android/server/wm/TransitionController;
-HPLcom/android/server/wm/ActivityTaskManagerService;->getUserManager()Lcom/android/server/pm/UserManagerService;
+HSPLcom/android/server/wm/ActivityTaskManagerService;->getUserManager()Lcom/android/server/pm/UserManagerService;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->getWindowOrganizerController()Landroid/window/IWindowOrganizerController;
 HPLcom/android/server/wm/ActivityTaskManagerService;->handleIncomingUser(IIILjava/lang/String;)I
-HPLcom/android/server/wm/ActivityTaskManagerService;->hasActiveVisibleWindow(I)Z+]Lcom/android/server/wm/MirrorActiveUids;Lcom/android/server/wm/MirrorActiveUids;]Lcom/android/server/wm/VisibleActivityProcessTracker;Lcom/android/server/wm/VisibleActivityProcessTracker;
-HPLcom/android/server/wm/ActivityTaskManagerService;->hasSystemAlertWindowPermission(IILjava/lang/String;)Z+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
-PLcom/android/server/wm/ActivityTaskManagerService;->hasUserRestriction(Ljava/lang/String;I)Z
+HSPLcom/android/server/wm/ActivityTaskManagerService;->hasActiveVisibleWindow(I)Z+]Lcom/android/server/wm/MirrorActiveUids;Lcom/android/server/wm/MirrorActiveUids;]Lcom/android/server/wm/VisibleActivityProcessTracker;Lcom/android/server/wm/VisibleActivityProcessTracker;
+HSPLcom/android/server/wm/ActivityTaskManagerService;->hasSystemAlertWindowPermission(IILjava/lang/String;)Z+]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Landroid/app/AppOpsManager;Landroid/app/AppOpsManager;
+HPLcom/android/server/wm/ActivityTaskManagerService;->hasUserRestriction(Ljava/lang/String;I)Z
 HSPLcom/android/server/wm/ActivityTaskManagerService;->increaseAssetConfigurationSeq()I
 HSPLcom/android/server/wm/ActivityTaskManagerService;->increaseConfigurationSeqLocked()I
 HSPLcom/android/server/wm/ActivityTaskManagerService;->initialize(Lcom/android/server/firewall/IntentFirewall;Lcom/android/server/am/PendingIntentController;Landroid/os/Looper;)V
@@ -53844,7 +55644,7 @@
 HPLcom/android/server/wm/ActivityTaskManagerService;->isAssociatedCompanionApp(II)Z
 HPLcom/android/server/wm/ActivityTaskManagerService;->isBackgroundActivityStartsEnabled()Z
 HSPLcom/android/server/wm/ActivityTaskManagerService;->isBooted()Z
-HSPLcom/android/server/wm/ActivityTaskManagerService;->isBooting()Z
+HSPLcom/android/server/wm/ActivityTaskManagerService;->isBooting()Z+]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;
 HSPLcom/android/server/wm/ActivityTaskManagerService;->isCallerRecents(I)Z+]Lcom/android/server/wm/RecentTasks;Lcom/android/server/wm/RecentTasks;
 HPLcom/android/server/wm/ActivityTaskManagerService;->isControllerAMonkey()Z
 HPLcom/android/server/wm/ActivityTaskManagerService;->isCrossUserAllowed(II)Z
@@ -53856,7 +55656,7 @@
 HSPLcom/android/server/wm/ActivityTaskManagerService;->isSleepingLocked()Z
 HPLcom/android/server/wm/ActivityTaskManagerService;->isSleepingOrShuttingDownLocked()Z
 HPLcom/android/server/wm/ActivityTaskManagerService;->keyguardGoingAway(I)V
-HPLcom/android/server/wm/ActivityTaskManagerService;->lambda$applyUpdateLockStateLocked$0(ZLcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->lambda$applyUpdateLockStateLocked$0(ZLcom/android/server/wm/ActivityRecord;)V
 HPLcom/android/server/wm/ActivityTaskManagerService;->lambda$applyUpdateVrModeLocked$6(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityTaskManagerService;->lambda$enterPictureInPictureMode$5(Lcom/android/server/wm/ActivityRecord;Landroid/app/PictureInPictureParams;)V
 HPLcom/android/server/wm/ActivityTaskManagerService;->lambda$keyguardGoingAway$4(ILcom/android/server/wm/DisplayContent;)V
@@ -53865,8 +55665,8 @@
 HPLcom/android/server/wm/ActivityTaskManagerService;->lambda$scheduleAppGcsLocked$8()V
 HPLcom/android/server/wm/ActivityTaskManagerService;->lambda$setLockScreenShown$1(ZZLcom/android/server/wm/DisplayContent;)V
 HPLcom/android/server/wm/ActivityTaskManagerService;->lambda$setLockScreenShown$2(Z)V
-PLcom/android/server/wm/ActivityTaskManagerService;->logAndRethrowRuntimeExceptionOnTransact(Ljava/lang/String;Ljava/lang/RuntimeException;)Ljava/lang/RuntimeException;
-PLcom/android/server/wm/ActivityTaskManagerService;->logAppTooSlow(Lcom/android/server/wm/WindowProcessController;JLjava/lang/String;)V
+HPLcom/android/server/wm/ActivityTaskManagerService;->logAndRethrowRuntimeExceptionOnTransact(Ljava/lang/String;Ljava/lang/RuntimeException;)Ljava/lang/RuntimeException;
+HPLcom/android/server/wm/ActivityTaskManagerService;->logAppTooSlow(Lcom/android/server/wm/WindowProcessController;JLjava/lang/String;)V
 PLcom/android/server/wm/ActivityTaskManagerService;->moveTaskToFront(Landroid/app/IApplicationThread;Ljava/lang/String;IILandroid/os/Bundle;)V
 HPLcom/android/server/wm/ActivityTaskManagerService;->moveTaskToFrontLocked(Landroid/app/IApplicationThread;Ljava/lang/String;IILcom/android/server/wm/SafeActivityOptions;)V
 HPLcom/android/server/wm/ActivityTaskManagerService;->notifyTaskPersisterLocked(Lcom/android/server/wm/Task;Z)V
@@ -53879,12 +55679,12 @@
 HSPLcom/android/server/wm/ActivityTaskManagerService;->onSystemReady()V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 PLcom/android/server/wm/ActivityTaskManagerService;->pendingAssistExtrasTimedOut(Lcom/android/server/wm/ActivityTaskManagerService$PendingAssistExtras;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->postFinishBooting(ZZ)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->postFinishBooting(ZZ)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->registerAnrController(Landroid/app/AnrController;)V
 HPLcom/android/server/wm/ActivityTaskManagerService;->registerRemoteAnimationForNextActivityStart(Ljava/lang/String;Landroid/view/RemoteAnimationAdapter;Landroid/os/IBinder;)V
 PLcom/android/server/wm/ActivityTaskManagerService;->registerRemoteAnimationsForDisplay(ILandroid/view/RemoteAnimationDefinition;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->registerTaskStackListener(Landroid/app/ITaskStackListener;)V
-PLcom/android/server/wm/ActivityTaskManagerService;->relaunchReasonToString(I)Ljava/lang/String;
+HPLcom/android/server/wm/ActivityTaskManagerService;->relaunchReasonToString(I)Ljava/lang/String;
 PLcom/android/server/wm/ActivityTaskManagerService;->releaseSomeActivities(Landroid/app/IApplicationThread;)V
 PLcom/android/server/wm/ActivityTaskManagerService;->removeAllVisibleRecentTasks()V
 PLcom/android/server/wm/ActivityTaskManagerService;->removeRootTasksInWindowingModes([I)V
@@ -53892,24 +55692,24 @@
 HPLcom/android/server/wm/ActivityTaskManagerService;->reportAssistContextExtras(Landroid/os/IBinder;Landroid/os/Bundle;Landroid/app/assist/AssistStructure;Landroid/app/assist/AssistContent;Landroid/net/Uri;)V
 PLcom/android/server/wm/ActivityTaskManagerService;->requestAssistContextExtras(ILandroid/app/IAssistDataReceiver;Landroid/os/Bundle;Landroid/os/IBinder;ZZ)Z
 HPLcom/android/server/wm/ActivityTaskManagerService;->requestAssistDataForTask(Landroid/app/IAssistDataReceiver;ILjava/lang/String;)Z
-PLcom/android/server/wm/ActivityTaskManagerService;->requestAutofillData(Landroid/app/IAssistDataReceiver;Landroid/os/Bundle;Landroid/os/IBinder;I)Z
+HPLcom/android/server/wm/ActivityTaskManagerService;->requestAutofillData(Landroid/app/IAssistDataReceiver;Landroid/os/Bundle;Landroid/os/IBinder;I)Z
 HPLcom/android/server/wm/ActivityTaskManagerService;->resizeTask(ILandroid/graphics/Rect;I)Z
 PLcom/android/server/wm/ActivityTaskManagerService;->resolveActivityInfoForIntent(Landroid/content/Intent;Ljava/lang/String;II)Landroid/content/pm/ActivityInfo;
-HPLcom/android/server/wm/ActivityTaskManagerService;->resumeAppSwitches()V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->resumeAppSwitches()V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->retrieveSettings(Landroid/content/ContentResolver;)V
 PLcom/android/server/wm/ActivityTaskManagerService;->saveANRState(Ljava/lang/String;)V
-HPLcom/android/server/wm/ActivityTaskManagerService;->scheduleAppGcsLocked()V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->scheduleAppGcsLocked()V
 PLcom/android/server/wm/ActivityTaskManagerService;->sendPutConfigurationForUserMsg(ILandroid/content/res/Configuration;)V
 PLcom/android/server/wm/ActivityTaskManagerService;->setActivityController(Landroid/app/IActivityController;Z)V
-PLcom/android/server/wm/ActivityTaskManagerService;->setBooted(Z)V
-PLcom/android/server/wm/ActivityTaskManagerService;->setBooting(Z)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->setBooted(Z)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->setBooting(Z)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->setDeviceOwnerUid(I)V
 PLcom/android/server/wm/ActivityTaskManagerService;->setFocusedTask(I)V
 PLcom/android/server/wm/ActivityTaskManagerService;->setFocusedTask(ILcom/android/server/wm/ActivityRecord;)V
 HPLcom/android/server/wm/ActivityTaskManagerService;->setLockScreenShown(ZZ)V
 HPLcom/android/server/wm/ActivityTaskManagerService;->setLocusId(Landroid/content/LocusId;Landroid/os/IBinder;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->setRecentTasks(Lcom/android/server/wm/RecentTasks;)V
-HPLcom/android/server/wm/ActivityTaskManagerService;->setResumedActivityUncheckLocked(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->setResumedActivityUncheckLocked(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;)V
 PLcom/android/server/wm/ActivityTaskManagerService;->setRunningRemoteTransitionDelegate(Landroid/app/IApplicationThread;)V
 PLcom/android/server/wm/ActivityTaskManagerService;->setSplitScreenResizing(Z)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->setUsageStatsManager(Landroid/app/usage/UsageStatsManagerInternal;)V
@@ -53921,33 +55721,37 @@
 PLcom/android/server/wm/ActivityTaskManagerService;->startActivityAsCaller(Landroid/app/IApplicationThread;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILandroid/app/ProfilerInfo;Landroid/os/Bundle;ZI)I
 HPLcom/android/server/wm/ActivityTaskManagerService;->startActivityAsUser(Landroid/app/IApplicationThread;Ljava/lang/String;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILandroid/app/ProfilerInfo;Landroid/os/Bundle;I)I
 HPLcom/android/server/wm/ActivityTaskManagerService;->startActivityAsUser(Landroid/app/IApplicationThread;Ljava/lang/String;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILandroid/app/ProfilerInfo;Landroid/os/Bundle;IZ)I
-PLcom/android/server/wm/ActivityTaskManagerService;->startActivityFromRecents(ILandroid/os/Bundle;)I
+PLcom/android/server/wm/ActivityTaskManagerService;->startActivityFromGameSession(Landroid/app/IApplicationThread;Ljava/lang/String;Ljava/lang/String;IILandroid/content/Intent;II)I
+HPLcom/android/server/wm/ActivityTaskManagerService;->startActivityFromRecents(ILandroid/os/Bundle;)I
 PLcom/android/server/wm/ActivityTaskManagerService;->startActivityIntentSender(Landroid/app/IApplicationThread;Landroid/content/IIntentSender;Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IIILandroid/os/Bundle;)I
 PLcom/android/server/wm/ActivityTaskManagerService;->startActivityWithConfig(Landroid/app/IApplicationThread;Ljava/lang/String;Ljava/lang/String;Landroid/content/Intent;Ljava/lang/String;Landroid/os/IBinder;Ljava/lang/String;IILandroid/content/res/Configuration;Landroid/os/Bundle;I)I
 PLcom/android/server/wm/ActivityTaskManagerService;->startAssistantActivity(Ljava/lang/String;Ljava/lang/String;IILandroid/content/Intent;Ljava/lang/String;Landroid/os/Bundle;I)I
 HPLcom/android/server/wm/ActivityTaskManagerService;->startBackNavigation(Z)Landroid/window/BackNavigationInfo;
 HPLcom/android/server/wm/ActivityTaskManagerService;->startDreamActivity(Landroid/content/Intent;)Z
-HPLcom/android/server/wm/ActivityTaskManagerService;->startLaunchPowerMode(I)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->startLaunchPowerMode(I)V
 PLcom/android/server/wm/ActivityTaskManagerService;->startLockTaskMode(Lcom/android/server/wm/Task;Z)V
 PLcom/android/server/wm/ActivityTaskManagerService;->startNextMatchingActivity(Landroid/os/IBinder;Landroid/content/Intent;Landroid/os/Bundle;)Z
-HPLcom/android/server/wm/ActivityTaskManagerService;->startProcessAsync(Lcom/android/server/wm/ActivityRecord;ZZLjava/lang/String;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->startProcessAsync(Lcom/android/server/wm/ActivityRecord;ZZLjava/lang/String;)V
 HPLcom/android/server/wm/ActivityTaskManagerService;->startRecentsActivity(Landroid/content/Intent;JLandroid/view/IRecentsAnimationRunner;)V
+PLcom/android/server/wm/ActivityTaskManagerService;->startRunningVoiceLocked(Landroid/service/voice/IVoiceInteractionSession;I)V
 PLcom/android/server/wm/ActivityTaskManagerService;->startSystemLockTaskMode(I)V
 HPLcom/android/server/wm/ActivityTaskManagerService;->startTimeTrackingFocusedActivityLocked()V
+PLcom/android/server/wm/ActivityTaskManagerService;->startVoiceActivity(Ljava/lang/String;Ljava/lang/String;IILandroid/content/Intent;Ljava/lang/String;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;ILandroid/app/ProfilerInfo;Landroid/os/Bundle;I)I
 HPLcom/android/server/wm/ActivityTaskManagerService;->stopAppSwitches()V
 PLcom/android/server/wm/ActivityTaskManagerService;->stopLockTaskModeInternal(Landroid/os/IBinder;Z)V
 PLcom/android/server/wm/ActivityTaskManagerService;->stopSystemLockTaskMode()V
+PLcom/android/server/wm/ActivityTaskManagerService;->takeTaskSnapshot(I)Landroid/window/TaskSnapshot;
 HPLcom/android/server/wm/ActivityTaskManagerService;->unregisterTaskStackListener(Landroid/app/ITaskStackListener;)V
-HPLcom/android/server/wm/ActivityTaskManagerService;->updateActivityUsageStats(Lcom/android/server/wm/ActivityRecord;I)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->updateActivityUsageStats(Lcom/android/server/wm/ActivityRecord;I)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->updateAssetConfiguration(Ljava/util/List;Z)V
-HPLcom/android/server/wm/ActivityTaskManagerService;->updateBatteryStats(Lcom/android/server/wm/ActivityRecord;Z)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->updateBatteryStats(Lcom/android/server/wm/ActivityRecord;Z)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->updateConfiguration(Landroid/content/res/Configuration;)Z
 HSPLcom/android/server/wm/ActivityTaskManagerService;->updateConfigurationLocked(Landroid/content/res/Configuration;Lcom/android/server/wm/ActivityRecord;Z)Z
 HSPLcom/android/server/wm/ActivityTaskManagerService;->updateConfigurationLocked(Landroid/content/res/Configuration;Lcom/android/server/wm/ActivityRecord;ZZ)Z
 HSPLcom/android/server/wm/ActivityTaskManagerService;->updateConfigurationLocked(Landroid/content/res/Configuration;Lcom/android/server/wm/ActivityRecord;ZZIZ)Z
 HSPLcom/android/server/wm/ActivityTaskManagerService;->updateConfigurationLocked(Landroid/content/res/Configuration;Lcom/android/server/wm/ActivityRecord;ZZIZLcom/android/server/wm/ActivityTaskManagerService$UpdateConfigurationResult;)Z
 HPLcom/android/server/wm/ActivityTaskManagerService;->updateCpuStats()V
-PLcom/android/server/wm/ActivityTaskManagerService;->updateEventDispatchingLocked(Z)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->updateEventDispatchingLocked(Z)V
 PLcom/android/server/wm/ActivityTaskManagerService;->updateFontScaleIfNeeded(I)V
 PLcom/android/server/wm/ActivityTaskManagerService;->updateFontWeightAdjustmentIfNeeded(I)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->updateGlobalConfigurationLocked(Landroid/content/res/Configuration;ZZI)I
@@ -53956,10 +55760,10 @@
 HPLcom/android/server/wm/ActivityTaskManagerService;->updateOomAdj()V
 PLcom/android/server/wm/ActivityTaskManagerService;->updatePersistentConfiguration(Landroid/content/res/Configuration;I)V
 HPLcom/android/server/wm/ActivityTaskManagerService;->updatePreviousProcess(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/ActivityTaskManagerService;->updateResumedAppTrace(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->updateResumedAppTrace(Lcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->updateShouldShowDialogsLocked(Landroid/content/res/Configuration;)V
 HSPLcom/android/server/wm/ActivityTaskManagerService;->updateSleepIfNeededLocked()V
-HPLcom/android/server/wm/ActivityTaskManagerService;->updateTopApp(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityTaskManagerService;->updateTopApp(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityTaskManagerService;->writeSleepStateToProto(Landroid/util/proto/ProtoOutputStream;IZ)V
 PLcom/android/server/wm/ActivityTaskSupervisor$$ExternalSyntheticLambda0;-><init>()V
 PLcom/android/server/wm/ActivityTaskSupervisor$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
@@ -53969,8 +55773,8 @@
 PLcom/android/server/wm/ActivityTaskSupervisor$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/ActivityTaskSupervisor$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/wm/ActivityTaskSupervisor;Landroid/content/pm/ActivityInfo;ILandroid/app/ProfilerInfo;)V
 PLcom/android/server/wm/ActivityTaskSupervisor$$ExternalSyntheticLambda3;->run()V
-HPLcom/android/server/wm/ActivityTaskSupervisor$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/wm/ActivityTaskSupervisor;)V
-HPLcom/android/server/wm/ActivityTaskSupervisor$$ExternalSyntheticLambda4;->run()V
+HSPLcom/android/server/wm/ActivityTaskSupervisor$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/wm/ActivityTaskSupervisor;)V
+HSPLcom/android/server/wm/ActivityTaskSupervisor$$ExternalSyntheticLambda4;->run()V
 PLcom/android/server/wm/ActivityTaskSupervisor$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/ActivityTaskSupervisor$$ExternalSyntheticLambda5;->run()V
 PLcom/android/server/wm/ActivityTaskSupervisor$$ExternalSyntheticLambda6;-><init>(Ljava/util/ArrayList;)V
@@ -53987,10 +55791,10 @@
 PLcom/android/server/wm/ActivityTaskSupervisor;->$r8$lambda$UagMtKTmbthHPYNm2EWRHLra0n4(Lcom/android/server/wm/ActivityTaskSupervisor;Landroid/content/pm/ActivityInfo;ILandroid/app/ProfilerInfo;)V
 PLcom/android/server/wm/ActivityTaskSupervisor;->$r8$lambda$YCYSu7VCDmQ9YyepdoIz1eGqcY8(Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/ActivityTaskSupervisor;->$r8$lambda$fZNEzyuuWjx5jiB79cldZjF8LBY(Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/Task;)V
-PLcom/android/server/wm/ActivityTaskSupervisor;->$r8$lambda$lf2JOJBuJyLjbUPOQ4HN_8t2COs(Lcom/android/server/wm/ActivityTaskSupervisor;)V
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->$r8$lambda$lf2JOJBuJyLjbUPOQ4HN_8t2COs(Lcom/android/server/wm/ActivityTaskSupervisor;)V
 PLcom/android/server/wm/ActivityTaskSupervisor;->$r8$lambda$szUeF7sHfh6NqWP_QRz8QJk7Eps(Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityTaskSupervisor;->$r8$lambda$uwEunbsbpw4F3snu5W9yjMcNAvU(Ljava/util/ArrayList;Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityTaskSupervisor;->-$$Nest$fgetmHandler(Lcom/android/server/wm/ActivityTaskSupervisor;)Lcom/android/server/wm/ActivityTaskSupervisor$ActivityTaskSupervisorHandler;
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->-$$Nest$fgetmHandler(Lcom/android/server/wm/ActivityTaskSupervisor;)Lcom/android/server/wm/ActivityTaskSupervisor$ActivityTaskSupervisorHandler;
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->-$$Nest$fgetmMultiWindowModeChangedActivities(Lcom/android/server/wm/ActivityTaskSupervisor;)Ljava/util/ArrayList;
 PLcom/android/server/wm/ActivityTaskSupervisor;->-$$Nest$fgetmPipModeChangedActivities(Lcom/android/server/wm/ActivityTaskSupervisor;)Ljava/util/ArrayList;
 PLcom/android/server/wm/ActivityTaskSupervisor;->-$$Nest$fgetmPipModeChangedTargetRootTaskBounds(Lcom/android/server/wm/ActivityTaskSupervisor;)Landroid/graphics/Rect;
@@ -53999,45 +55803,45 @@
 HSPLcom/android/server/wm/ActivityTaskSupervisor;-><clinit>()V
 HSPLcom/android/server/wm/ActivityTaskSupervisor;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Landroid/os/Looper;)V
 HPLcom/android/server/wm/ActivityTaskSupervisor;->acquireLaunchWakelock()V
-HPLcom/android/server/wm/ActivityTaskSupervisor;->activityIdleInternal(Lcom/android/server/wm/ActivityRecord;ZZLandroid/content/res/Configuration;)V
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->activityIdleInternal(Lcom/android/server/wm/ActivityRecord;ZZLandroid/content/res/Configuration;)V
 PLcom/android/server/wm/ActivityTaskSupervisor;->addToMultiWindowModeChangedList(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityTaskSupervisor;->addToPipModeChangedList(Lcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->beginActivityVisibilityUpdate()V+]Lcom/android/server/wm/KeyguardController;Lcom/android/server/wm/KeyguardController;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->beginDeferResume()V
-HPLcom/android/server/wm/ActivityTaskSupervisor;->canPlaceEntityOnDisplay(IIILandroid/content/pm/ActivityInfo;)Z
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->canPlaceEntityOnDisplay(IIILandroid/content/pm/ActivityInfo;)Z
 PLcom/android/server/wm/ActivityTaskSupervisor;->canPlaceEntityOnDisplay(IIILcom/android/server/wm/Task;)Z
-PLcom/android/server/wm/ActivityTaskSupervisor;->canPlaceEntityOnDisplay(IIILcom/android/server/wm/Task;Landroid/content/pm/ActivityInfo;)Z
-PLcom/android/server/wm/ActivityTaskSupervisor;->canUseActivityOptionsLaunchBounds(Landroid/app/ActivityOptions;)Z
-PLcom/android/server/wm/ActivityTaskSupervisor;->checkFinishBootingLocked()V
-HPLcom/android/server/wm/ActivityTaskSupervisor;->checkReadyForSleepLocked(Z)V
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->canPlaceEntityOnDisplay(IIILcom/android/server/wm/Task;Landroid/content/pm/ActivityInfo;)Z
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->canUseActivityOptionsLaunchBounds(Landroid/app/ActivityOptions;)Z
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->checkFinishBootingLocked()V
+HPLcom/android/server/wm/ActivityTaskSupervisor;->checkReadyForSleepLocked(Z)V+]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Landroid/os/PowerManager$WakeLock;Landroid/os/PowerManager$WakeLock;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->checkStartAnyActivityPermission(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Ljava/lang/String;IIILjava/lang/String;Ljava/lang/String;ZZLcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/Task;)Z
 HPLcom/android/server/wm/ActivityTaskSupervisor;->cleanUpRemovedTaskLocked(Lcom/android/server/wm/Task;ZZ)V+]Landroid/os/Handler;Lcom/android/server/wm/ActivityTaskManagerService$H;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/internal/app/ProcessMap;Lcom/android/internal/app/ProcessMap;]Lcom/android/server/wm/RecentTasks;Lcom/android/server/wm/RecentTasks;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/content/Intent;Landroid/content/Intent;
 HPLcom/android/server/wm/ActivityTaskSupervisor;->cleanupActivity(Lcom/android/server/wm/ActivityRecord;)V
 HPLcom/android/server/wm/ActivityTaskSupervisor;->comeOutOfSleepIfNeededLocked()V
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->computeProcessActivityStateBatch()V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/wm/ActivityTaskSupervisor;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/wm/ActivityTaskSupervisor;->dumpHistoryList(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;ZZZLjava/lang/String;ZLjava/lang/Runnable;Lcom/android/server/wm/Task;)Z
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->dumpHistoryList(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;ZZZLjava/lang/String;ZLjava/lang/Runnable;Lcom/android/server/wm/Task;)Z
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->endActivityVisibilityUpdate()V+]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->endDeferResume()V
 HPLcom/android/server/wm/ActivityTaskSupervisor;->findTaskToMoveToFront(Lcom/android/server/wm/Task;ILandroid/app/ActivityOptions;Ljava/lang/String;Z)V
 PLcom/android/server/wm/ActivityTaskSupervisor;->finishNoHistoryActivitiesIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
 HPLcom/android/server/wm/ActivityTaskSupervisor;->getActionRestrictionForCallingPackage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)I
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->getActivityMetricsLogger()Lcom/android/server/wm/ActivityMetricsLogger;
-PLcom/android/server/wm/ActivityTaskSupervisor;->getAppOpsManager()Landroid/app/AppOpsManager;
+HPLcom/android/server/wm/ActivityTaskSupervisor;->getAppOpsManager()Landroid/app/AppOpsManager;
 HPLcom/android/server/wm/ActivityTaskSupervisor;->getComponentRestrictionForCallingPackage(Landroid/content/pm/ActivityInfo;Ljava/lang/String;Ljava/lang/String;IIZ)I
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->getKeyguardController()Lcom/android/server/wm/KeyguardController;
-HPLcom/android/server/wm/ActivityTaskSupervisor;->getLaunchParamsController()Lcom/android/server/wm/LaunchParamsController;
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->getLaunchParamsController()Lcom/android/server/wm/LaunchParamsController;
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->getNextTaskIdForUser()I
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->getNextTaskIdForUser(I)I
 PLcom/android/server/wm/ActivityTaskSupervisor;->getReparentTargetRootTask(Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;Z)Lcom/android/server/wm/Task;
 HPLcom/android/server/wm/ActivityTaskSupervisor;->getRunningTasks()Lcom/android/server/wm/RunningTasks;
-HPLcom/android/server/wm/ActivityTaskSupervisor;->getSystemChooserActivity()Landroid/content/ComponentName;
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->getSystemChooserActivity()Landroid/content/ComponentName;
 PLcom/android/server/wm/ActivityTaskSupervisor;->getUserInfo(I)Landroid/content/pm/UserInfo;
 HPLcom/android/server/wm/ActivityTaskSupervisor;->goingToSleepLocked()V
 HPLcom/android/server/wm/ActivityTaskSupervisor;->handleForcedResizableTaskIfNeeded(Lcom/android/server/wm/Task;I)V
 HPLcom/android/server/wm/ActivityTaskSupervisor;->handleLaunchTaskBehindCompleteLocked(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/ActivityTaskSupervisor;->handleNonResizableTaskIfNeeded(Lcom/android/server/wm/Task;ILcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/Task;)V
-HPLcom/android/server/wm/ActivityTaskSupervisor;->handleNonResizableTaskIfNeeded(Lcom/android/server/wm/Task;ILcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/Task;Z)V
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->handleNonResizableTaskIfNeeded(Lcom/android/server/wm/Task;ILcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->handleNonResizableTaskIfNeeded(Lcom/android/server/wm/Task;ILcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/Task;Z)V
 HPLcom/android/server/wm/ActivityTaskSupervisor;->handleTopResumedStateReleased(Z)V
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->inActivityVisibilityUpdate()Z
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->initPowerManagement()V
@@ -54045,25 +55849,25 @@
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->isCallerAllowedToLaunchOnDisplay(IIILandroid/content/pm/ActivityInfo;)Z
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->isCallerAllowedToLaunchOnTaskDisplayArea(IILcom/android/server/wm/TaskDisplayArea;Landroid/content/pm/ActivityInfo;)Z
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->isRootVisibilityUpdateDeferred()Z
-HPLcom/android/server/wm/ActivityTaskSupervisor;->lambda$activityIdleInternal$2()V
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->lambda$activityIdleInternal$2()V
 PLcom/android/server/wm/ActivityTaskSupervisor;->lambda$canPlaceEntityOnDisplay$0(Ljava/util/ArrayList;Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityTaskSupervisor;->lambda$removeRootTask$3(Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/ActivityTaskSupervisor;->lambda$resolveActivity$1(Landroid/content/pm/ActivityInfo;ILandroid/app/ProfilerInfo;)V
-HPLcom/android/server/wm/ActivityTaskSupervisor;->logIfTransactionTooLarge(Landroid/content/Intent;Landroid/os/Bundle;)V
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->logIfTransactionTooLarge(Landroid/content/Intent;Landroid/os/Bundle;)V
 PLcom/android/server/wm/ActivityTaskSupervisor;->moveHomeRootTaskToFrontIfNeeded(ILcom/android/server/wm/TaskDisplayArea;Ljava/lang/String;)V
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->nextTaskIdForUser(II)I
-HPLcom/android/server/wm/ActivityTaskSupervisor;->onProcessActivityStateChanged(Lcom/android/server/wm/WindowProcessController;Z)V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-PLcom/android/server/wm/ActivityTaskSupervisor;->onRecentTaskAdded(Lcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->onProcessActivityStateChanged(Lcom/android/server/wm/WindowProcessController;Z)V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->onRecentTaskAdded(Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/ActivityTaskSupervisor;->onRecentTaskRemoved(Lcom/android/server/wm/Task;ZZ)V
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->onSystemReady()V
 PLcom/android/server/wm/ActivityTaskSupervisor;->onUserUnlocked(I)V
-PLcom/android/server/wm/ActivityTaskSupervisor;->printThisActivity(Ljava/io/PrintWriter;Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/Runnable;)Z
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->printThisActivity(Ljava/io/PrintWriter;Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/Runnable;)Z
 PLcom/android/server/wm/ActivityTaskSupervisor;->processRemoveTask(Lcom/android/server/wm/Task;)V
-HPLcom/android/server/wm/ActivityTaskSupervisor;->processStoppingAndFinishingActivities(Lcom/android/server/wm/ActivityRecord;ZLjava/lang/String;)V
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->processStoppingAndFinishingActivities(Lcom/android/server/wm/ActivityRecord;ZLjava/lang/String;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->readyToResume()Z
-HPLcom/android/server/wm/ActivityTaskSupervisor;->realStartActivityLocked(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/WindowProcessController;ZZ)Z
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->realStartActivityLocked(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/WindowProcessController;ZZ)Z
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->removeHistoryRecords(Lcom/android/server/wm/WindowProcessController;)V
-HSPLcom/android/server/wm/ActivityTaskSupervisor;->removeHistoryRecords(Ljava/util/ArrayList;Lcom/android/server/wm/WindowProcessController;Ljava/lang/String;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->removeHistoryRecords(Ljava/util/ArrayList;Lcom/android/server/wm/WindowProcessController;Ljava/lang/String;)V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/ActivityTaskSupervisor;->removeIdleTimeoutForActivity(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityTaskSupervisor;->removePinnedRootTaskInSurfaceTransaction(Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/ActivityTaskSupervisor;->removeRestartTimeouts(Lcom/android/server/wm/ActivityRecord;)V
@@ -54072,28 +55876,28 @@
 HPLcom/android/server/wm/ActivityTaskSupervisor;->removeSleepTimeouts()V
 HPLcom/android/server/wm/ActivityTaskSupervisor;->removeTask(Lcom/android/server/wm/Task;ZZLjava/lang/String;)V
 PLcom/android/server/wm/ActivityTaskSupervisor;->removeTaskById(IZZLjava/lang/String;)Z
-HPLcom/android/server/wm/ActivityTaskSupervisor;->reportActivityLaunched(ZLcom/android/server/wm/ActivityRecord;JI)V
-HPLcom/android/server/wm/ActivityTaskSupervisor;->reportResumedActivityLocked(Lcom/android/server/wm/ActivityRecord;)Z
-HPLcom/android/server/wm/ActivityTaskSupervisor;->reportWaitingActivityLaunchedIfNeeded(Lcom/android/server/wm/ActivityRecord;I)V
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->reportActivityLaunched(ZLcom/android/server/wm/ActivityRecord;JI)V
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->reportResumedActivityLocked(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->reportWaitingActivityLaunchedIfNeeded(Lcom/android/server/wm/ActivityRecord;I)V
 HPLcom/android/server/wm/ActivityTaskSupervisor;->resolveActivity(Landroid/content/Intent;Landroid/content/pm/ResolveInfo;ILandroid/app/ProfilerInfo;)Landroid/content/pm/ActivityInfo;
 PLcom/android/server/wm/ActivityTaskSupervisor;->resolveActivity(Landroid/content/Intent;Ljava/lang/String;ILandroid/app/ProfilerInfo;II)Landroid/content/pm/ActivityInfo;
 HPLcom/android/server/wm/ActivityTaskSupervisor;->resolveIntent(Landroid/content/Intent;Ljava/lang/String;III)Landroid/content/pm/ResolveInfo;
 PLcom/android/server/wm/ActivityTaskSupervisor;->restoreRecentTaskLocked(Lcom/android/server/wm/Task;Landroid/app/ActivityOptions;Z)Z
 HPLcom/android/server/wm/ActivityTaskSupervisor;->scheduleIdle()V
-HPLcom/android/server/wm/ActivityTaskSupervisor;->scheduleIdleTimeout(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/ActivityTaskSupervisor;->scheduleLaunchTaskBehindComplete(Landroid/os/IBinder;)V
-HPLcom/android/server/wm/ActivityTaskSupervisor;->scheduleProcessStoppingAndFinishingActivitiesIfNeeded()V
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->scheduleIdleTimeout(Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/ActivityTaskSupervisor;->scheduleLaunchTaskBehindComplete(Landroid/os/IBinder;)V
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->scheduleProcessStoppingAndFinishingActivitiesIfNeeded()V
 PLcom/android/server/wm/ActivityTaskSupervisor;->scheduleRestartTimeout(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/ActivityTaskSupervisor;->scheduleResumeTopActivities()V
 PLcom/android/server/wm/ActivityTaskSupervisor;->scheduleSleepTimeout()V
-HPLcom/android/server/wm/ActivityTaskSupervisor;->scheduleStartHome(Ljava/lang/String;)V
-HPLcom/android/server/wm/ActivityTaskSupervisor;->scheduleTopResumedActivityStateIfNeeded()V
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->scheduleStartHome(Ljava/lang/String;)V
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->scheduleTopResumedActivityStateIfNeeded()V
 HPLcom/android/server/wm/ActivityTaskSupervisor;->scheduleTopResumedStateLossTimeout(Lcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->scheduleUpdateMultiWindowMode(Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/ActivityTaskSupervisor;->scheduleUpdatePictureInPictureModeIfNeeded(Lcom/android/server/wm/Task;Landroid/graphics/Rect;)V
 PLcom/android/server/wm/ActivityTaskSupervisor;->scheduleUpdatePictureInPictureModeIfNeeded(Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;)V
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->setDeferRootVisibilityUpdate(Z)V
-HPLcom/android/server/wm/ActivityTaskSupervisor;->setLaunchSource(I)V
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->setLaunchSource(I)V
 PLcom/android/server/wm/ActivityTaskSupervisor;->setNextTaskIdForUser(II)V
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->setRecentTasks(Lcom/android/server/wm/RecentTasks;)V
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->setRunningTasks(Lcom/android/server/wm/RunningTasks;)V
@@ -54101,9 +55905,9 @@
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->setWindowManager(Lcom/android/server/wm/WindowManagerService;)V
 PLcom/android/server/wm/ActivityTaskSupervisor;->shutdownLocked(I)Z
 HPLcom/android/server/wm/ActivityTaskSupervisor;->startActivityFromRecents(IIILcom/android/server/wm/SafeActivityOptions;)I
-HPLcom/android/server/wm/ActivityTaskSupervisor;->startSpecificActivity(Lcom/android/server/wm/ActivityRecord;ZZ)V
-HPLcom/android/server/wm/ActivityTaskSupervisor;->stopWaitingForActivityVisible(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/ActivityTaskSupervisor;->updateHomeProcess(Lcom/android/server/wm/WindowProcessController;)V
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->startSpecificActivity(Lcom/android/server/wm/ActivityRecord;ZZ)V
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->stopWaitingForActivityVisible(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/ActivityTaskSupervisor;->updateHomeProcess(Lcom/android/server/wm/WindowProcessController;)V
 HSPLcom/android/server/wm/ActivityTaskSupervisor;->updateTopResumedActivityIfNeeded()V
 PLcom/android/server/wm/ActivityTaskSupervisor;->wakeUp(Ljava/lang/String;)V
 PLcom/android/server/wm/AlertWindowNotification$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/AlertWindowNotification;Z)V
@@ -54120,15 +55924,15 @@
 PLcom/android/server/wm/AlertWindowNotification;->getContentIntent(Landroid/content/Context;Ljava/lang/String;)Landroid/app/PendingIntent;
 PLcom/android/server/wm/AlertWindowNotification;->lambda$cancel$0(Z)V
 PLcom/android/server/wm/AlertWindowNotification;->onCancelNotification(Z)V
-PLcom/android/server/wm/AlertWindowNotification;->onPostNotification()V
+HPLcom/android/server/wm/AlertWindowNotification;->onPostNotification()V
 PLcom/android/server/wm/AlertWindowNotification;->post()V
 HSPLcom/android/server/wm/AnimatingActivityRegistry;-><init>()V
-PLcom/android/server/wm/AnimatingActivityRegistry;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;)V
-HPLcom/android/server/wm/AnimatingActivityRegistry;->endDeferringFinished()V
+HSPLcom/android/server/wm/AnimatingActivityRegistry;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Ljava/lang/String;)V
+HPLcom/android/server/wm/AnimatingActivityRegistry;->endDeferringFinished()V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/lang/Runnable;Lcom/android/server/wm/SurfaceAnimator$$ExternalSyntheticLambda1;
 HPLcom/android/server/wm/AnimatingActivityRegistry;->notifyAboutToFinish(Lcom/android/server/wm/ActivityRecord;Ljava/lang/Runnable;)Z
 HPLcom/android/server/wm/AnimatingActivityRegistry;->notifyFinished(Lcom/android/server/wm/ActivityRecord;)V
 HPLcom/android/server/wm/AnimatingActivityRegistry;->notifyStarting(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/AnimationAdapter;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+HPLcom/android/server/wm/AnimationAdapter;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 PLcom/android/server/wm/AnimationAdapter;->getShowBackground()Z
 PLcom/android/server/wm/AnimationAdapter;->shouldDeferAnimationFinish(Ljava/lang/Runnable;)Z
 PLcom/android/server/wm/AnrController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/WindowManagerService;)V
@@ -54171,54 +55975,57 @@
 PLcom/android/server/wm/AppTransition;->$r8$lambda$ovWj1GU-Dyl-6GvlYAUAdjIFGUA(Landroid/os/IRemoteCallback;)V
 HSPLcom/android/server/wm/AppTransition;-><clinit>()V
 HSPLcom/android/server/wm/AppTransition;-><init>(Landroid/content/Context;Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;)V
-PLcom/android/server/wm/AppTransition;->canOverridePendingAppTransition()Z
+HPLcom/android/server/wm/AppTransition;->appTransitionFlagsToString(I)Ljava/lang/String;
+PLcom/android/server/wm/AppTransition;->appTransitionOldToString(I)Ljava/lang/String;
+PLcom/android/server/wm/AppTransition;->appTransitionToString(I)Ljava/lang/String;
+HPLcom/android/server/wm/AppTransition;->canOverridePendingAppTransition()Z
 HPLcom/android/server/wm/AppTransition;->canSkipFirstFrame()Z
-HPLcom/android/server/wm/AppTransition;->clear()V
-HPLcom/android/server/wm/AppTransition;->containsTransitRequest(I)Z
+HSPLcom/android/server/wm/AppTransition;->clear()V
+HSPLcom/android/server/wm/AppTransition;->containsTransitRequest(I)Z+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 PLcom/android/server/wm/AppTransition;->createCrossProfileAppsThumbnail(Landroid/graphics/drawable/Drawable;Landroid/graphics/Rect;)Landroid/hardware/HardwareBuffer;
 PLcom/android/server/wm/AppTransition;->createCrossProfileAppsThumbnailAnimationLocked(Landroid/graphics/Rect;)Landroid/view/animation/Animation;
 PLcom/android/server/wm/AppTransition;->createThumbnailAspectScaleAnimationLocked(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/hardware/HardwareBuffer;Lcom/android/server/wm/WindowContainer;I)Landroid/view/animation/Animation;
 PLcom/android/server/wm/AppTransition;->doAnimationCallback(Landroid/os/IRemoteCallback;)V
-PLcom/android/server/wm/AppTransition;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-HPLcom/android/server/wm/AppTransition;->fetchAppTransitionSpecsFromFuture()V
+HPLcom/android/server/wm/AppTransition;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+HSPLcom/android/server/wm/AppTransition;->fetchAppTransitionSpecsFromFuture()V
 PLcom/android/server/wm/AppTransition;->freeze()V
 HPLcom/android/server/wm/AppTransition;->getAppRootTaskClipMode()I
 PLcom/android/server/wm/AppTransition;->getAppTransitionThumbnailHeader(Lcom/android/server/wm/WindowContainer;)Landroid/hardware/HardwareBuffer;
-HPLcom/android/server/wm/AppTransition;->getFirstAppTransition()I
-HPLcom/android/server/wm/AppTransition;->getKeyguardTransition()I
-HPLcom/android/server/wm/AppTransition;->getRemoteAnimationController()Lcom/android/server/wm/RemoteAnimationController;
-HPLcom/android/server/wm/AppTransition;->getTransitFlags()I
-HPLcom/android/server/wm/AppTransition;->goodToGo(ILcom/android/server/wm/ActivityRecord;)I
+HSPLcom/android/server/wm/AppTransition;->getFirstAppTransition()I
+HSPLcom/android/server/wm/AppTransition;->getKeyguardTransition()I
+HSPLcom/android/server/wm/AppTransition;->getRemoteAnimationController()Lcom/android/server/wm/RemoteAnimationController;
+HSPLcom/android/server/wm/AppTransition;->getTransitFlags()I
+HSPLcom/android/server/wm/AppTransition;->goodToGo(ILcom/android/server/wm/ActivityRecord;)I
 PLcom/android/server/wm/AppTransition;->handleAppTransitionTimeout()V
 PLcom/android/server/wm/AppTransition;->isActivityTransitOld(I)Z
-PLcom/android/server/wm/AppTransition;->isChangeTransitOld(I)Z
+HPLcom/android/server/wm/AppTransition;->isChangeTransitOld(I)Z
 PLcom/android/server/wm/AppTransition;->isClosingTransitOld(I)Z
-HPLcom/android/server/wm/AppTransition;->isFetchingAppTransitionsSpecs()Z
+HSPLcom/android/server/wm/AppTransition;->isFetchingAppTransitionsSpecs()Z
 PLcom/android/server/wm/AppTransition;->isIdle()Z
-PLcom/android/server/wm/AppTransition;->isKeyguardGoingAwayTransitOld(I)Z
-PLcom/android/server/wm/AppTransition;->isKeyguardOccludeTransitOld(I)Z
-PLcom/android/server/wm/AppTransition;->isKeyguardTransit(I)Z
+HSPLcom/android/server/wm/AppTransition;->isKeyguardGoingAwayTransitOld(I)Z
+HSPLcom/android/server/wm/AppTransition;->isKeyguardOccludeTransitOld(I)Z
+HSPLcom/android/server/wm/AppTransition;->isKeyguardTransit(I)Z
 HPLcom/android/server/wm/AppTransition;->isNextAppTransitionOpenCrossProfileApps()Z
 HPLcom/android/server/wm/AppTransition;->isNextAppTransitionThumbnailDown()Z
 HPLcom/android/server/wm/AppTransition;->isNextAppTransitionThumbnailUp()Z
-PLcom/android/server/wm/AppTransition;->isNormalTransit(I)Z
+HSPLcom/android/server/wm/AppTransition;->isNormalTransit(I)Z
 HSPLcom/android/server/wm/AppTransition;->isReady()Z
 HSPLcom/android/server/wm/AppTransition;->isRunning()Z
 PLcom/android/server/wm/AppTransition;->isTaskCloseTransitOld(I)Z
-PLcom/android/server/wm/AppTransition;->isTaskOpenTransitOld(I)Z
+HSPLcom/android/server/wm/AppTransition;->isTaskOpenTransitOld(I)Z
 HPLcom/android/server/wm/AppTransition;->isTaskTransitOld(I)Z
-HPLcom/android/server/wm/AppTransition;->isTimeout()Z
-HPLcom/android/server/wm/AppTransition;->isTransitionSet()Z+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/AppTransition;->isTimeout()Z
+HSPLcom/android/server/wm/AppTransition;->isTransitionSet()Z+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/wm/AppTransition;->isUnoccluding()Z
 PLcom/android/server/wm/AppTransition;->lambda$fetchAppTransitionSpecsFromFuture$1(Landroid/view/IAppTransitionAnimationSpecsFuture;)V
 PLcom/android/server/wm/AppTransition;->lambda$new$0()V
 HPLcom/android/server/wm/AppTransition;->loadAnimation(Landroid/view/WindowManager$LayoutParams;IZIILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;ZZLcom/android/server/wm/WindowContainer;)Landroid/view/animation/Animation;
 HPLcom/android/server/wm/AppTransition;->loadAnimationAttr(Landroid/view/WindowManager$LayoutParams;II)Landroid/view/animation/Animation;
-HPLcom/android/server/wm/AppTransition;->needsBoosting()Z+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/AppTransition;->needsBoosting()Z+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 PLcom/android/server/wm/AppTransition;->notifyAppTransitionCancelledLocked(Z)V
-HPLcom/android/server/wm/AppTransition;->notifyAppTransitionFinishedLocked(Landroid/os/IBinder;)V+]Lcom/android/server/wm/WindowManagerInternal$AppTransitionListener;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/wm/AppTransition;->notifyAppTransitionPendingLocked()V+]Lcom/android/server/wm/WindowManagerInternal$AppTransitionListener;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/wm/AppTransition;->notifyAppTransitionStartingLocked(ZZJJJ)I
+HSPLcom/android/server/wm/AppTransition;->notifyAppTransitionFinishedLocked(Landroid/os/IBinder;)V+]Lcom/android/server/wm/WindowManagerInternal$AppTransitionListener;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/AppTransition;->notifyAppTransitionPendingLocked()V+]Lcom/android/server/wm/WindowManagerInternal$AppTransitionListener;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/AppTransition;->notifyAppTransitionStartingLocked(ZZJJJ)I
 PLcom/android/server/wm/AppTransition;->notifyAppTransitionTimeoutLocked()V
 HPLcom/android/server/wm/AppTransition;->overridePendingAppTransition(Ljava/lang/String;IIILandroid/os/IRemoteCallback;Landroid/os/IRemoteCallback;Z)V
 PLcom/android/server/wm/AppTransition;->overridePendingAppTransitionClipReveal(IIII)V
@@ -54228,86 +56035,87 @@
 HPLcom/android/server/wm/AppTransition;->overridePendingAppTransitionRemote(Landroid/view/RemoteAnimationAdapter;Z)V
 PLcom/android/server/wm/AppTransition;->overridePendingAppTransitionScaleUp(IIII)V
 PLcom/android/server/wm/AppTransition;->overridePendingAppTransitionStartCrossProfileApps()V
-HPLcom/android/server/wm/AppTransition;->postAnimationCallback()V
-HPLcom/android/server/wm/AppTransition;->prepare()Z
-HPLcom/android/server/wm/AppTransition;->prepareAppTransition(II)Z
+HSPLcom/android/server/wm/AppTransition;->postAnimationCallback()V
+HSPLcom/android/server/wm/AppTransition;->prepare()Z
+HSPLcom/android/server/wm/AppTransition;->prepareAppTransition(II)Z
 PLcom/android/server/wm/AppTransition;->putDefaultNextAppTransitionCoordinates(IIIILandroid/hardware/HardwareBuffer;)V
 HSPLcom/android/server/wm/AppTransition;->registerListenerLocked(Lcom/android/server/wm/WindowManagerInternal$AppTransitionListener;)V
-HPLcom/android/server/wm/AppTransition;->removeAppTransitionTimeoutCallbacks()V
+HSPLcom/android/server/wm/AppTransition;->removeAppTransitionTimeoutCallbacks()V
 HPLcom/android/server/wm/AppTransition;->setAppTransitionFinishedCallbackIfNeeded(Landroid/view/animation/Animation;)V
-HPLcom/android/server/wm/AppTransition;->setAppTransitionState(I)V
-HPLcom/android/server/wm/AppTransition;->setIdle()V
-HPLcom/android/server/wm/AppTransition;->setLastAppTransition(ILcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/AppTransition;->setReady()V
+HSPLcom/android/server/wm/AppTransition;->setAppTransitionState(I)V+]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;
+HSPLcom/android/server/wm/AppTransition;->setIdle()V
+HSPLcom/android/server/wm/AppTransition;->setLastAppTransition(ILcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/AppTransition;->setReady()V
 PLcom/android/server/wm/AppTransition;->setTimeout()V
-PLcom/android/server/wm/AppTransition;->unregisterListener(Lcom/android/server/wm/WindowManagerInternal$AppTransitionListener;)V
-HPLcom/android/server/wm/AppTransition;->updateBooster()V+]Lcom/android/server/wm/WindowManagerThreadPriorityBooster;Lcom/android/server/wm/WindowManagerThreadPriorityBooster;]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;
-HPLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda0;-><init>()V
-HPLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
-PLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda10;-><init>([Landroid/window/ITaskFragmentOrganizer;)V
-PLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda10;->test(Ljava/lang/Object;)Z
-HPLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda1;-><init>()V
+HPLcom/android/server/wm/AppTransition;->toString()Ljava/lang/String;
+HPLcom/android/server/wm/AppTransition;->unregisterListener(Lcom/android/server/wm/WindowManagerInternal$AppTransitionListener;)V
+HSPLcom/android/server/wm/AppTransition;->updateBooster()V+]Lcom/android/server/wm/WindowManagerThreadPriorityBooster;Lcom/android/server/wm/WindowManagerThreadPriorityBooster;]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;
+HSPLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda0;-><init>()V
+HSPLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda10;-><init>([Landroid/window/ITaskFragmentOrganizer;)V
+HPLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda10;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda1;-><init>()V
 HPLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda1;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda2;-><init>()V
+HSPLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda2;-><init>()V
 HPLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda2;->test(Ljava/lang/Object;)Z
 HPLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda3;-><init>()V
 HPLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda3;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda4;-><init>(ILandroid/util/ArraySet;)V
-PLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda4;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda5;-><init>()V
-PLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda5;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda6;-><init>()V
+HSPLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda4;-><init>(ILandroid/util/ArraySet;)V
+HPLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda4;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda5;-><init>()V
+HPLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda5;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda6;-><init>()V
 PLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda6;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda7;-><init>()V
 HPLcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda7;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/AppTransitionController;->$r8$lambda$5tos31X2YKuzamqqcPd9wobK-64([Landroid/window/ITaskFragmentOrganizer;Lcom/android/server/wm/TaskFragment;)Z
-PLcom/android/server/wm/AppTransitionController;->$r8$lambda$BvsVc13J7ZqHJJaQ1RKTt2i_hlI(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/AppTransitionController;->$r8$lambda$BvsVc13J7ZqHJJaQ1RKTt2i_hlI(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/AppTransitionController;->$r8$lambda$EH7S3R5INL4EUEhQOBy7wlWLog0(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/AppTransitionController;->$r8$lambda$YbL_X3FWkxFPNaX2LfKwb1x2Rvo(ILandroid/util/ArraySet;Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/AppTransitionController;->$r8$lambda$bq1EOBjUp9CmWrAkaEYxo62xUwU(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/AppTransitionController;->$r8$lambda$h-XqqftDtzOR0XNJ84PR9J7j6Xc(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/AppTransitionController;->$r8$lambda$qdR7qYOdWo7t3kz1L6Soz-QiSrk(Lcom/android/server/wm/TaskFragment;)Z
+HPLcom/android/server/wm/AppTransitionController;->$r8$lambda$YbL_X3FWkxFPNaX2LfKwb1x2Rvo(ILandroid/util/ArraySet;Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/AppTransitionController;->$r8$lambda$bq1EOBjUp9CmWrAkaEYxo62xUwU(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/AppTransitionController;->$r8$lambda$h-XqqftDtzOR0XNJ84PR9J7j6Xc(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/AppTransitionController;->$r8$lambda$qdR7qYOdWo7t3kz1L6Soz-QiSrk(Lcom/android/server/wm/TaskFragment;)Z
 HSPLcom/android/server/wm/AppTransitionController;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;)V
-HPLcom/android/server/wm/AppTransitionController;->applyAnimations(Landroid/util/ArraySet;Landroid/util/ArraySet;ILandroid/view/WindowManager$LayoutParams;Z)V
-HPLcom/android/server/wm/AppTransitionController;->applyAnimations(Landroid/util/ArraySet;Landroid/util/ArraySet;IZLandroid/view/WindowManager$LayoutParams;Z)V
-HPLcom/android/server/wm/AppTransitionController;->canBeWallpaperTarget(Landroid/util/ArraySet;)Z
-HPLcom/android/server/wm/AppTransitionController;->collectActivityTypes(Landroid/util/ArraySet;Landroid/util/ArraySet;Landroid/util/ArraySet;)Landroid/util/ArraySet;
-HPLcom/android/server/wm/AppTransitionController;->containsVoiceInteraction(Landroid/util/ArraySet;)Z
-HPLcom/android/server/wm/AppTransitionController;->findAnimLayoutParamsToken(ILandroid/util/ArraySet;Landroid/util/ArraySet;Landroid/util/ArraySet;Landroid/util/ArraySet;)Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/AppTransitionController;->findParentTaskForAllEmbeddedWindows()Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/AppTransitionController;->applyAnimations(Landroid/util/ArraySet;Landroid/util/ArraySet;ILandroid/view/WindowManager$LayoutParams;Z)V
+HPLcom/android/server/wm/AppTransitionController;->applyAnimations(Landroid/util/ArraySet;Landroid/util/ArraySet;IZLandroid/view/WindowManager$LayoutParams;Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/AppTransitionController;->canBeWallpaperTarget(Landroid/util/ArraySet;)Z
+HSPLcom/android/server/wm/AppTransitionController;->collectActivityTypes(Landroid/util/ArraySet;Landroid/util/ArraySet;Landroid/util/ArraySet;)Landroid/util/ArraySet;
+HSPLcom/android/server/wm/AppTransitionController;->containsVoiceInteraction(Landroid/util/ArraySet;)Z
+HSPLcom/android/server/wm/AppTransitionController;->findAnimLayoutParamsToken(ILandroid/util/ArraySet;Landroid/util/ArraySet;Landroid/util/ArraySet;Landroid/util/ArraySet;)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/AppTransitionController;->findParentTaskForAllEmbeddedWindows()Lcom/android/server/wm/Task;
 PLcom/android/server/wm/AppTransitionController;->findRootTaskFromContainer(Lcom/android/server/wm/WindowContainer;)Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/AppTransitionController;->findTaskFragmentOrganizer(Lcom/android/server/wm/Task;)Landroid/window/ITaskFragmentOrganizer;
-HPLcom/android/server/wm/AppTransitionController;->getAnimLp(Lcom/android/server/wm/ActivityRecord;)Landroid/view/WindowManager$LayoutParams;
-HPLcom/android/server/wm/AppTransitionController;->getAnimationTargets(Landroid/util/ArraySet;Landroid/util/ArraySet;Z)Landroid/util/ArraySet;+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/LinkedList;Ljava/util/LinkedList;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/AppTransitionController;->findTaskFragmentOrganizer(Lcom/android/server/wm/Task;)Landroid/window/ITaskFragmentOrganizer;
+HSPLcom/android/server/wm/AppTransitionController;->getAnimLp(Lcom/android/server/wm/ActivityRecord;)Landroid/view/WindowManager$LayoutParams;
+HSPLcom/android/server/wm/AppTransitionController;->getAnimationTargets(Landroid/util/ArraySet;Landroid/util/ArraySet;Z)Landroid/util/ArraySet;+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/LinkedList;Ljava/util/LinkedList;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/AppTransitionController;->getAppFromContainer(Lcom/android/server/wm/WindowContainer;)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/AppTransitionController;->getAppsForAnimation(Landroid/util/ArraySet;Z)Landroid/util/ArraySet;
-HPLcom/android/server/wm/AppTransitionController;->getOldWallpaper()Lcom/android/server/wm/WindowState;
-HPLcom/android/server/wm/AppTransitionController;->getRemoteAnimationOverride(Lcom/android/server/wm/WindowContainer;ILandroid/util/ArraySet;)Landroid/view/RemoteAnimationAdapter;
-HPLcom/android/server/wm/AppTransitionController;->getTopApp(Landroid/util/ArraySet;Z)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/AppTransitionController;->getTransitCompatType(Lcom/android/server/wm/AppTransition;Landroid/util/ArraySet;Landroid/util/ArraySet;Landroid/util/ArraySet;Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;Z)I
-HPLcom/android/server/wm/AppTransitionController;->getTransitContainerType(Lcom/android/server/wm/WindowContainer;)I
-HPLcom/android/server/wm/AppTransitionController;->handleAppTransitionReady()V
-HPLcom/android/server/wm/AppTransitionController;->handleChangingApps(I)V
-HPLcom/android/server/wm/AppTransitionController;->handleClosingApps()V
-PLcom/android/server/wm/AppTransitionController;->handleNonAppWindowsInTransition(II)V
-HPLcom/android/server/wm/AppTransitionController;->handleOpeningApps()V
+HSPLcom/android/server/wm/AppTransitionController;->getAppsForAnimation(Landroid/util/ArraySet;Z)Landroid/util/ArraySet;
+HSPLcom/android/server/wm/AppTransitionController;->getOldWallpaper()Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/AppTransitionController;->getRemoteAnimationOverride(Lcom/android/server/wm/WindowContainer;ILandroid/util/ArraySet;)Landroid/view/RemoteAnimationAdapter;
+HSPLcom/android/server/wm/AppTransitionController;->getTopApp(Landroid/util/ArraySet;Z)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/AppTransitionController;->getTransitCompatType(Lcom/android/server/wm/AppTransition;Landroid/util/ArraySet;Landroid/util/ArraySet;Landroid/util/ArraySet;Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;Z)I
+HSPLcom/android/server/wm/AppTransitionController;->getTransitContainerType(Lcom/android/server/wm/WindowContainer;)I
+HSPLcom/android/server/wm/AppTransitionController;->handleAppTransitionReady()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/TaskSnapshotController;Lcom/android/server/wm/TaskSnapshotController;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;]Lcom/android/server/wm/ActivityMetricsLogger;Lcom/android/server/wm/ActivityMetricsLogger;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/AppTransitionController;Lcom/android/server/wm/AppTransitionController;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Ljava/util/stream/Stream;Ljava/util/stream/ReferencePipeline$Head;]Lcom/android/server/wm/UnknownAppVisibilityController;Lcom/android/server/wm/UnknownAppVisibilityController;]Lcom/android/server/wm/SurfaceAnimationRunner;Lcom/android/server/wm/SurfaceAnimationRunner;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/AppTransitionController;->handleChangingApps(I)V
+HSPLcom/android/server/wm/AppTransitionController;->handleClosingApps()V
+HSPLcom/android/server/wm/AppTransitionController;->handleNonAppWindowsInTransition(II)V
+HSPLcom/android/server/wm/AppTransitionController;->handleOpeningApps()V
 HPLcom/android/server/wm/AppTransitionController;->isTaskViewTask(Lcom/android/server/wm/WindowContainer;)Z
 HPLcom/android/server/wm/AppTransitionController;->isTransitWithinTask(ILcom/android/server/wm/Task;)Z
-PLcom/android/server/wm/AppTransitionController;->lambda$findAnimLayoutParamsToken$5(ILandroid/util/ArraySet;Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/AppTransitionController;->lambda$findAnimLayoutParamsToken$6(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/AppTransitionController;->lambda$findAnimLayoutParamsToken$5(ILandroid/util/ArraySet;Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/AppTransitionController;->lambda$findAnimLayoutParamsToken$6(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/AppTransitionController;->lambda$findAnimLayoutParamsToken$7(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/AppTransitionController;->lambda$findTaskFragmentOrganizer$2([Landroid/window/ITaskFragmentOrganizer;Lcom/android/server/wm/TaskFragment;)Z
-PLcom/android/server/wm/AppTransitionController;->lambda$handleAppTransitionReady$0(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/AppTransitionController;->lambda$handleAppTransitionReady$1(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/AppTransitionController;->lambda$transitionGoodToGoForTaskFragments$8(Lcom/android/server/wm/TaskFragment;)Z
-HPLcom/android/server/wm/AppTransitionController;->lookForHighestTokenWithFilter(Landroid/util/ArraySet;Landroid/util/ArraySet;Landroid/util/ArraySet;Ljava/util/function/Predicate;)Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/AppTransitionController;->overrideWithRemoteAnimationIfSet(Lcom/android/server/wm/ActivityRecord;ILandroid/util/ArraySet;)V
-HPLcom/android/server/wm/AppTransitionController;->overrideWithTaskFragmentRemoteAnimation(ILandroid/util/ArraySet;)Z
+HPLcom/android/server/wm/AppTransitionController;->lambda$handleAppTransitionReady$0(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/AppTransitionController;->lambda$handleAppTransitionReady$1(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/AppTransitionController;->lambda$transitionGoodToGoForTaskFragments$8(Lcom/android/server/wm/TaskFragment;)Z
+HSPLcom/android/server/wm/AppTransitionController;->lookForHighestTokenWithFilter(Landroid/util/ArraySet;Landroid/util/ArraySet;Landroid/util/ArraySet;Ljava/util/function/Predicate;)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Ljava/util/function/Predicate;Lcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda6;,Lcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda4;,Lcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda5;
+HSPLcom/android/server/wm/AppTransitionController;->overrideWithRemoteAnimationIfSet(Lcom/android/server/wm/ActivityRecord;ILandroid/util/ArraySet;)V
+HSPLcom/android/server/wm/AppTransitionController;->overrideWithTaskFragmentRemoteAnimation(ILandroid/util/ArraySet;)Z
 PLcom/android/server/wm/AppTransitionController;->registerRemoteAnimations(Landroid/view/RemoteAnimationDefinition;)V
-HPLcom/android/server/wm/AppTransitionController;->transitionGoodToGo(Landroid/util/ArraySet;Landroid/util/ArrayMap;)Z
-HPLcom/android/server/wm/AppTransitionController;->transitionGoodToGoForTaskFragments()Z
-HPLcom/android/server/wm/AppTransitionController;->transitionMayContainNonAppWindows(I)Z
-HPLcom/android/server/wm/AppTransitionController;->unfreezeEmbeddedChangingWindows()V
+HSPLcom/android/server/wm/AppTransitionController;->transitionGoodToGo(Landroid/util/ArraySet;Landroid/util/ArrayMap;)Z+]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/UnknownAppVisibilityController;Lcom/android/server/wm/UnknownAppVisibilityController;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/AppTransitionController;->transitionGoodToGoForTaskFragments()Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/AppTransitionController;->transitionMayContainNonAppWindows(I)Z
+HSPLcom/android/server/wm/AppTransitionController;->unfreezeEmbeddedChangingWindows()V
 HSPLcom/android/server/wm/AppWarnings$ConfigHandler;-><init>(Lcom/android/server/wm/AppWarnings;Landroid/os/Looper;)V
 PLcom/android/server/wm/AppWarnings$ConfigHandler;->handleMessage(Landroid/os/Message;)V
 PLcom/android/server/wm/AppWarnings$ConfigHandler;->scheduleWrite()V
@@ -54329,14 +56137,14 @@
 PLcom/android/server/wm/AppWarnings;->onPackageDataCleared(Ljava/lang/String;)V
 PLcom/android/server/wm/AppWarnings;->onPackageUninstalled(Ljava/lang/String;)V
 HPLcom/android/server/wm/AppWarnings;->onResumeActivity(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/AppWarnings;->onStartActivity(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/AppWarnings;->onStartActivity(Lcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/AppWarnings;->readConfigFromFileAmsThread()V
 PLcom/android/server/wm/AppWarnings;->removePackageAndHideDialogs(Ljava/lang/String;)V
 PLcom/android/server/wm/AppWarnings;->setPackageFlag(Ljava/lang/String;IZ)V
-HPLcom/android/server/wm/AppWarnings;->showDeprecatedTargetDialogIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/AppWarnings;->showDeprecatedTargetDialogIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/AppWarnings;->showDeprecatedTargetSdkDialogUiThread(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/AppWarnings;->showUnsupportedCompileSdkDialogIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/AppWarnings;->showUnsupportedDisplaySizeDialogIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/AppWarnings;->showUnsupportedCompileSdkDialogIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/AppWarnings;->showUnsupportedDisplaySizeDialogIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/AppWarnings;->writeConfigToFileAmsThread()V
 PLcom/android/server/wm/AssistDataReceiverProxy;-><init>(Landroid/app/IAssistDataReceiver;Ljava/lang/String;)V
 PLcom/android/server/wm/AssistDataReceiverProxy;->binderDied()V
@@ -54354,7 +56162,7 @@
 PLcom/android/server/wm/AsyncRotationController;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/AsyncRotationController;->completeAll()V
 HPLcom/android/server/wm/AsyncRotationController;->completeRotation(Lcom/android/server/wm/WindowToken;)Z
-PLcom/android/server/wm/AsyncRotationController;->finishOp(Lcom/android/server/wm/WindowToken;)V
+HPLcom/android/server/wm/AsyncRotationController;->finishOp(Lcom/android/server/wm/WindowToken;)V
 PLcom/android/server/wm/AsyncRotationController;->getFadeInAnimation()Landroid/view/animation/Animation;
 PLcom/android/server/wm/AsyncRotationController;->getFadeOutAnimation()Landroid/view/animation/Animation;
 PLcom/android/server/wm/AsyncRotationController;->handleFinishDrawing(Lcom/android/server/wm/WindowState;Landroid/view/SurfaceControl$Transaction;)Z
@@ -54362,10 +56170,10 @@
 HPLcom/android/server/wm/AsyncRotationController;->isAsync(Lcom/android/server/wm/WindowState;)Z
 HPLcom/android/server/wm/AsyncRotationController;->isTargetToken(Lcom/android/server/wm/WindowToken;)Z
 PLcom/android/server/wm/AsyncRotationController;->lambda$scheduleTimeout$1()V
-PLcom/android/server/wm/AsyncRotationController;->scheduleTimeout()V
+HPLcom/android/server/wm/AsyncRotationController;->scheduleTimeout()V
 PLcom/android/server/wm/AsyncRotationController;->setOnShowRunnable(Ljava/lang/Runnable;)V
 PLcom/android/server/wm/AsyncRotationController;->shouldFreezeInsetsPosition(Lcom/android/server/wm/WindowState;)Z
-PLcom/android/server/wm/AsyncRotationController;->start()V
+HPLcom/android/server/wm/AsyncRotationController;->start()V
 PLcom/android/server/wm/BLASTSyncEngine$SyncGroup$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/BLASTSyncEngine$SyncGroup;)V
 PLcom/android/server/wm/BLASTSyncEngine$SyncGroup$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/wm/BLASTSyncEngine$SyncGroup$$ExternalSyntheticLambda1;-><init>()V
@@ -54425,28 +56233,28 @@
 PLcom/android/server/wm/BackNavigationController;->resetSurfaces(Lcom/android/server/wm/WindowContainer;)V
 HSPLcom/android/server/wm/BackNavigationController;->setTaskSnapshotController(Lcom/android/server/wm/TaskSnapshotController;)V
 HPLcom/android/server/wm/BackNavigationController;->startBackNavigation(Lcom/android/server/wm/WindowManagerService;Landroid/view/SurfaceControl$Transaction;Z)Landroid/window/BackNavigationInfo;
-PLcom/android/server/wm/BackNavigationController;->startBackNavigation(Lcom/android/server/wm/WindowManagerService;Z)Landroid/window/BackNavigationInfo;
+HPLcom/android/server/wm/BackNavigationController;->startBackNavigation(Lcom/android/server/wm/WindowManagerService;Z)Landroid/window/BackNavigationInfo;
 HSPLcom/android/server/wm/BackgroundLaunchProcessController;-><init>(Ljava/util/function/IntPredicate;Lcom/android/server/wm/BackgroundActivityStartCallback;)V
 HPLcom/android/server/wm/BackgroundLaunchProcessController;->addOrUpdateAllowBackgroundActivityStartsToken(Landroid/os/Binder;Landroid/os/IBinder;)V
-HPLcom/android/server/wm/BackgroundLaunchProcessController;->areBackgroundActivityStartsAllowed(IILjava/lang/String;IZZZJJJ)Z+]Lcom/android/server/wm/BackgroundLaunchProcessController;Lcom/android/server/wm/BackgroundLaunchProcessController;
+HSPLcom/android/server/wm/BackgroundLaunchProcessController;->areBackgroundActivityStartsAllowed(IILjava/lang/String;IZZZJJJ)Z+]Lcom/android/server/wm/BackgroundLaunchProcessController;Lcom/android/server/wm/BackgroundLaunchProcessController;
 PLcom/android/server/wm/BackgroundLaunchProcessController;->canCloseSystemDialogsByToken(I)Z
 PLcom/android/server/wm/BackgroundLaunchProcessController;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-HPLcom/android/server/wm/BackgroundLaunchProcessController;->isBackgroundStartAllowedByToken(ILjava/lang/String;Z)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/BackgroundActivityStartCallback;Lcom/android/server/notification/NotificationManagerService$NotificationTrampolineCallback;
-HPLcom/android/server/wm/BackgroundLaunchProcessController;->isBoundByForegroundUid()Z+]Landroid/util/IntArray;Landroid/util/IntArray;]Ljava/util/function/IntPredicate;Lcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda5;
+HSPLcom/android/server/wm/BackgroundLaunchProcessController;->isBackgroundStartAllowedByToken(ILjava/lang/String;Z)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/BackgroundActivityStartCallback;Lcom/android/server/notification/NotificationManagerService$NotificationTrampolineCallback;
+HSPLcom/android/server/wm/BackgroundLaunchProcessController;->isBoundByForegroundUid()Z+]Landroid/util/IntArray;Landroid/util/IntArray;]Ljava/util/function/IntPredicate;Lcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda5;
 HSPLcom/android/server/wm/BackgroundLaunchProcessController;->removeAllowBackgroundActivityStartsToken(Landroid/os/Binder;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/wm/BackgroundLaunchProcessController;->setBoundClientUids(Landroid/util/ArraySet;)V+]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/util/IntArray;Landroid/util/IntArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 PLcom/android/server/wm/BlackFrame$BlackSurface;-><init>(Landroid/view/SurfaceControl$Transaction;IIIIILcom/android/server/wm/DisplayContent;Landroid/view/SurfaceControl;)V
 PLcom/android/server/wm/BlackFrame;-><init>(Ljava/util/function/Supplier;Landroid/view/SurfaceControl$Transaction;Landroid/graphics/Rect;Landroid/graphics/Rect;ILcom/android/server/wm/DisplayContent;ZLandroid/view/SurfaceControl;)V
 PLcom/android/server/wm/BlackFrame;->kill()V
 HSPLcom/android/server/wm/BlurController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/BlurController;)V
-PLcom/android/server/wm/BlurController$$ExternalSyntheticLambda0;->onThermalStatusChanged(I)V
+HSPLcom/android/server/wm/BlurController$$ExternalSyntheticLambda0;->onThermalStatusChanged(I)V
 HSPLcom/android/server/wm/BlurController$1;-><init>(Lcom/android/server/wm/BlurController;Ljava/util/concurrent/Executor;)V
 HSPLcom/android/server/wm/BlurController$1;->onTunnelModeEnabledChanged(Z)V
 HSPLcom/android/server/wm/BlurController$2;-><init>(Lcom/android/server/wm/BlurController;Landroid/os/PowerManager;)V
-PLcom/android/server/wm/BlurController$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/wm/BlurController$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/wm/BlurController$3;-><init>(Lcom/android/server/wm/BlurController;Landroid/os/Handler;)V
 PLcom/android/server/wm/BlurController$3;->onChange(Z)V
-PLcom/android/server/wm/BlurController;->$r8$lambda$MvA4SW0VwlFVTadaS8sztsY4N2Q(Lcom/android/server/wm/BlurController;I)V
+HSPLcom/android/server/wm/BlurController;->$r8$lambda$MvA4SW0VwlFVTadaS8sztsY4N2Q(Lcom/android/server/wm/BlurController;I)V
 PLcom/android/server/wm/BlurController;->-$$Nest$fputmBlurDisabledSetting(Lcom/android/server/wm/BlurController;Z)V
 PLcom/android/server/wm/BlurController;->-$$Nest$fputmInPowerSaveMode(Lcom/android/server/wm/BlurController;Z)V
 HSPLcom/android/server/wm/BlurController;->-$$Nest$fputmTunnelModeEnabled(Lcom/android/server/wm/BlurController;Z)V
@@ -54455,7 +56263,7 @@
 HSPLcom/android/server/wm/BlurController;-><init>(Landroid/content/Context;Landroid/os/PowerManager;)V
 HSPLcom/android/server/wm/BlurController;->getBlurDisabledSetting()Z
 PLcom/android/server/wm/BlurController;->getBlurEnabled()Z
-PLcom/android/server/wm/BlurController;->lambda$new$0(I)V
+HSPLcom/android/server/wm/BlurController;->lambda$new$0(I)V
 HSPLcom/android/server/wm/BlurController;->notifyBlurEnabledChangedLocked(Z)V
 PLcom/android/server/wm/BlurController;->registerCrossWindowBlurEnabledListener(Landroid/view/ICrossWindowBlurEnabledListener;)Z
 PLcom/android/server/wm/BlurController;->unregisterCrossWindowBlurEnabledListener(Landroid/view/ICrossWindowBlurEnabledListener;)V
@@ -54463,8 +56271,8 @@
 HSPLcom/android/server/wm/ClientLifecycleManager;-><init>()V
 HSPLcom/android/server/wm/ClientLifecycleManager;->scheduleTransaction(Landroid/app/IApplicationThread;Landroid/app/servertransaction/ClientTransactionItem;)V
 HPLcom/android/server/wm/ClientLifecycleManager;->scheduleTransaction(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/app/servertransaction/ActivityLifecycleItem;)V
-HPLcom/android/server/wm/ClientLifecycleManager;->scheduleTransaction(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/app/servertransaction/ClientTransactionItem;)V
-HSPLcom/android/server/wm/ClientLifecycleManager;->scheduleTransaction(Landroid/app/servertransaction/ClientTransaction;)V
+HSPLcom/android/server/wm/ClientLifecycleManager;->scheduleTransaction(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/app/servertransaction/ClientTransactionItem;)V
+HSPLcom/android/server/wm/ClientLifecycleManager;->scheduleTransaction(Landroid/app/servertransaction/ClientTransaction;)V+]Landroid/app/servertransaction/ClientTransaction;Landroid/app/servertransaction/ClientTransaction;
 HSPLcom/android/server/wm/ClientLifecycleManager;->transactionWithCallback(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/app/servertransaction/ClientTransactionItem;)Landroid/app/servertransaction/ClientTransaction;
 HPLcom/android/server/wm/ClientLifecycleManager;->transactionWithState(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/app/servertransaction/ActivityLifecycleItem;)Landroid/app/servertransaction/ClientTransaction;
 HSPLcom/android/server/wm/CompatModePackages$CompatHandler;-><init>(Lcom/android/server/wm/CompatModePackages;Landroid/os/Looper;)V
@@ -54484,9 +56292,9 @@
 HSPLcom/android/server/wm/ConfigurationContainer;->diffRequestedOverrideBounds(Landroid/graphics/Rect;)I
 HSPLcom/android/server/wm/ConfigurationContainer;->diffRequestedOverrideMaxBounds(Landroid/graphics/Rect;)I
 HSPLcom/android/server/wm/ConfigurationContainer;->dispatchConfigurationToChild(Lcom/android/server/wm/ConfigurationContainer;Landroid/content/res/Configuration;)V
-PLcom/android/server/wm/ConfigurationContainer;->dumpChildrenNames(Ljava/io/PrintWriter;Ljava/lang/String;)V
-HPLcom/android/server/wm/ConfigurationContainer;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
-HPLcom/android/server/wm/ConfigurationContainer;->dumpDebugWindowingMode(Landroid/util/proto/ProtoOutputStream;)V
+HPLcom/android/server/wm/ConfigurationContainer;->dumpChildrenNames(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/wm/ConfigurationContainer;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Lcom/android/server/wm/ConfigurationContainer;megamorphic_types]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
+HPLcom/android/server/wm/ConfigurationContainer;->dumpDebugWindowingMode(Landroid/util/proto/ProtoOutputStream;)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HSPLcom/android/server/wm/ConfigurationContainer;->equivalentBounds(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z
 HSPLcom/android/server/wm/ConfigurationContainer;->equivalentRequestedOverrideBounds(Landroid/graphics/Rect;)Z
 HSPLcom/android/server/wm/ConfigurationContainer;->equivalentRequestedOverrideMaxBounds(Landroid/graphics/Rect;)Z
@@ -54497,42 +56305,42 @@
 HSPLcom/android/server/wm/ConfigurationContainer;->getMergedOverrideConfiguration()Landroid/content/res/Configuration;
 PLcom/android/server/wm/ConfigurationContainer;->getName()Ljava/lang/String;
 HPLcom/android/server/wm/ConfigurationContainer;->getPosition(Landroid/graphics/Point;)V
-HSPLcom/android/server/wm/ConfigurationContainer;->getRequestedOverrideBounds()Landroid/graphics/Rect;
+HSPLcom/android/server/wm/ConfigurationContainer;->getRequestedOverrideBounds()Landroid/graphics/Rect;+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ConfigurationContainer;megamorphic_types]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HSPLcom/android/server/wm/ConfigurationContainer;->getRequestedOverrideConfiguration()Landroid/content/res/Configuration;
 HSPLcom/android/server/wm/ConfigurationContainer;->getRequestedOverrideMaxBounds()Landroid/graphics/Rect;
 HSPLcom/android/server/wm/ConfigurationContainer;->getRequestedOverrideWindowingMode()I
-HSPLcom/android/server/wm/ConfigurationContainer;->getResolvedOverrideBounds()Landroid/graphics/Rect;
+HSPLcom/android/server/wm/ConfigurationContainer;->getResolvedOverrideBounds()Landroid/graphics/Rect;+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/ActivityRecord;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HSPLcom/android/server/wm/ConfigurationContainer;->getResolvedOverrideConfiguration()Landroid/content/res/Configuration;
 HSPLcom/android/server/wm/ConfigurationContainer;->getWindowConfiguration()Landroid/app/WindowConfiguration;
 HSPLcom/android/server/wm/ConfigurationContainer;->getWindowingMode()I+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HSPLcom/android/server/wm/ConfigurationContainer;->hasChild()Z+]Lcom/android/server/wm/ConfigurationContainer;megamorphic_types
 HSPLcom/android/server/wm/ConfigurationContainer;->hasOverrideBounds()Z
-PLcom/android/server/wm/ConfigurationContainer;->hasRequestedOverrideConfiguration()Z
+HSPLcom/android/server/wm/ConfigurationContainer;->hasRequestedOverrideConfiguration()Z
 HSPLcom/android/server/wm/ConfigurationContainer;->inFreeformWindowingMode()Z+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HSPLcom/android/server/wm/ConfigurationContainer;->inMultiWindowMode()Z+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HSPLcom/android/server/wm/ConfigurationContainer;->inPinnedWindowingMode()Z+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HPLcom/android/server/wm/ConfigurationContainer;->isActivityTypeAssistant()Z
-HSPLcom/android/server/wm/ConfigurationContainer;->isActivityTypeDream()Z
+HSPLcom/android/server/wm/ConfigurationContainer;->isActivityTypeDream()Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/ConfigurationContainer;->isActivityTypeHome()Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;
-HPLcom/android/server/wm/ConfigurationContainer;->isActivityTypeHomeOrRecents()Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/ConfigurationContainer;->isActivityTypeRecents()Z
-HPLcom/android/server/wm/ConfigurationContainer;->isActivityTypeStandard()Z
+HSPLcom/android/server/wm/ConfigurationContainer;->isActivityTypeHomeOrRecents()Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/ConfigurationContainer;->isActivityTypeRecents()Z
+HSPLcom/android/server/wm/ConfigurationContainer;->isActivityTypeStandard()Z
 HSPLcom/android/server/wm/ConfigurationContainer;->isActivityTypeStandardOrUndefined()Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/ConfigurationContainer;->isAlwaysOnTop()Z+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
-HPLcom/android/server/wm/ConfigurationContainer;->isCompatible(II)Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/ConfigurationContainer;->isCompatibleActivityType(II)Z
-HSPLcom/android/server/wm/ConfigurationContainer;->matchParentBounds()Z
-HSPLcom/android/server/wm/ConfigurationContainer;->onConfigurationChanged(Landroid/content/res/Configuration;)V+]Lcom/android/server/wm/ConfigurationContainerListener;Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;,Lcom/android/server/wm/WindowProcessController;,Lcom/android/server/wm/WindowContainer$1;,Lcom/android/server/wm/WindowContainer$2;]Lcom/android/server/wm/ConfigurationContainer;megamorphic_types]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
+HSPLcom/android/server/wm/ConfigurationContainer;->isCompatible(II)Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/ConfigurationContainer;->isCompatibleActivityType(II)Z
+HSPLcom/android/server/wm/ConfigurationContainer;->matchParentBounds()Z+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;
+HSPLcom/android/server/wm/ConfigurationContainer;->onConfigurationChanged(Landroid/content/res/Configuration;)V+]Lcom/android/server/wm/ConfigurationContainerListener;Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;,Lcom/android/server/wm/WindowProcessController;,Lcom/android/server/wm/WindowContainer$2;,Lcom/android/server/wm/WindowContainer$1;]Lcom/android/server/wm/ConfigurationContainer;megamorphic_types]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HSPLcom/android/server/wm/ConfigurationContainer;->onMergedOverrideConfigurationChanged()V+]Lcom/android/server/wm/ConfigurationContainer;megamorphic_types]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HSPLcom/android/server/wm/ConfigurationContainer;->onParentChanged(Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ConfigurationContainer;)V
 HSPLcom/android/server/wm/ConfigurationContainer;->onRequestedOverrideConfigurationChanged(Landroid/content/res/Configuration;)V
 HSPLcom/android/server/wm/ConfigurationContainer;->providesMaxBounds()Z
 HPLcom/android/server/wm/ConfigurationContainer;->registerConfigurationChangeListener(Lcom/android/server/wm/ConfigurationContainerListener;)V
-HSPLcom/android/server/wm/ConfigurationContainer;->registerConfigurationChangeListener(Lcom/android/server/wm/ConfigurationContainerListener;Z)V
+HSPLcom/android/server/wm/ConfigurationContainer;->registerConfigurationChangeListener(Lcom/android/server/wm/ConfigurationContainerListener;Z)V+]Lcom/android/server/wm/ConfigurationContainerListener;Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;,Lcom/android/server/wm/WindowProcessController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/wm/ConfigurationContainer;->resolveOverrideConfiguration(Landroid/content/res/Configuration;)V+]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
 HSPLcom/android/server/wm/ConfigurationContainer;->setActivityType(I)V
 PLcom/android/server/wm/ConfigurationContainer;->setAlwaysOnTop(Z)V
-HPLcom/android/server/wm/ConfigurationContainer;->setBounds(Landroid/graphics/Rect;)I
+HSPLcom/android/server/wm/ConfigurationContainer;->setBounds(Landroid/graphics/Rect;)I
 HPLcom/android/server/wm/ConfigurationContainer;->setOverrideLocales(Landroid/content/res/Configuration;Landroid/os/LocaleList;)Z
 PLcom/android/server/wm/ConfigurationContainer;->setOverrideNightMode(Landroid/content/res/Configuration;I)Z
 HSPLcom/android/server/wm/ConfigurationContainer;->setWindowingMode(I)V
@@ -54543,14 +56351,15 @@
 HSPLcom/android/server/wm/ConfigurationContainerListener;->onRequestedOverrideConfigurationChanged(Landroid/content/res/Configuration;)V
 HSPLcom/android/server/wm/ContentRecorder;-><init>(Lcom/android/server/wm/DisplayContent;)V
 PLcom/android/server/wm/ContentRecorder;->clearContentRecordingSession()V
-PLcom/android/server/wm/ContentRecorder;->fetchSurfaceSizeIfPresent()Landroid/graphics/Point;
+HPLcom/android/server/wm/ContentRecorder;->fetchSurfaceSizeIfPresent()Landroid/graphics/Point;
+PLcom/android/server/wm/ContentRecorder;->handleStartRecordingFailed()V
 HSPLcom/android/server/wm/ContentRecorder;->isCurrentlyRecording()Z
 HSPLcom/android/server/wm/ContentRecorder;->onConfigurationChanged(I)V
 PLcom/android/server/wm/ContentRecorder;->pauseRecording()V
 PLcom/android/server/wm/ContentRecorder;->remove()V
-PLcom/android/server/wm/ContentRecorder;->retrieveRecordedWindowContainer()Lcom/android/server/wm/WindowContainer;
+HPLcom/android/server/wm/ContentRecorder;->retrieveRecordedWindowContainer()Lcom/android/server/wm/WindowContainer;
 PLcom/android/server/wm/ContentRecorder;->setContentRecordingSession(Landroid/view/ContentRecordingSession;)V
-HSPLcom/android/server/wm/ContentRecorder;->startRecordingIfNeeded()V+]Lcom/android/server/wm/ContentRecorder;Lcom/android/server/wm/ContentRecorder;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Landroid/view/Display;Landroid/view/Display;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;]Ljava/util/function/Supplier;Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda10;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;
+HSPLcom/android/server/wm/ContentRecorder;->startRecordingIfNeeded()V+]Lcom/android/server/wm/ContentRecorder;Lcom/android/server/wm/ContentRecorder;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Landroid/view/Display;Landroid/view/Display;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;]Ljava/util/function/Supplier;Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda10;,Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda11;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;
 PLcom/android/server/wm/ContentRecorder;->updateMirroredSurface(Landroid/view/SurfaceControl$Transaction;Landroid/graphics/Rect;Landroid/graphics/Point;)V
 HSPLcom/android/server/wm/ContentRecorder;->updateRecording()V+]Lcom/android/server/wm/ContentRecorder;Lcom/android/server/wm/ContentRecorder;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Landroid/view/Display;Landroid/view/Display;
 HSPLcom/android/server/wm/ContentRecordingController;-><init>()V
@@ -54568,16 +56377,17 @@
 PLcom/android/server/wm/Dimmer$$ExternalSyntheticLambda0;->startAnimation(Lcom/android/server/wm/SurfaceAnimator;Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/AnimationAdapter;ZI)V
 PLcom/android/server/wm/Dimmer$AlphaAnimationSpec;-><init>(FFJ)V
 HPLcom/android/server/wm/Dimmer$AlphaAnimationSpec;->apply(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;J)V+]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/LocalAnimationAdapter$AnimationSpec;Lcom/android/server/wm/Dimmer$AlphaAnimationSpec;
+PLcom/android/server/wm/Dimmer$AlphaAnimationSpec;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HPLcom/android/server/wm/Dimmer$AlphaAnimationSpec;->getDuration()J
-PLcom/android/server/wm/Dimmer$DimAnimatable;-><init>(Lcom/android/server/wm/Dimmer;Landroid/view/SurfaceControl;)V
+HPLcom/android/server/wm/Dimmer$DimAnimatable;-><init>(Lcom/android/server/wm/Dimmer;Landroid/view/SurfaceControl;)V
 PLcom/android/server/wm/Dimmer$DimAnimatable;-><init>(Lcom/android/server/wm/Dimmer;Landroid/view/SurfaceControl;Lcom/android/server/wm/Dimmer$DimAnimatable-IA;)V
 HPLcom/android/server/wm/Dimmer$DimAnimatable;->getAnimationLeashParent()Landroid/view/SurfaceControl;
 HPLcom/android/server/wm/Dimmer$DimAnimatable;->getParentSurfaceControl()Landroid/view/SurfaceControl;
 PLcom/android/server/wm/Dimmer$DimAnimatable;->getSurfaceControl()Landroid/view/SurfaceControl;
-PLcom/android/server/wm/Dimmer$DimAnimatable;->getSurfaceHeight()I
-PLcom/android/server/wm/Dimmer$DimAnimatable;->getSurfaceWidth()I
+HPLcom/android/server/wm/Dimmer$DimAnimatable;->getSurfaceHeight()I
+HPLcom/android/server/wm/Dimmer$DimAnimatable;->getSurfaceWidth()I
 PLcom/android/server/wm/Dimmer$DimAnimatable;->getSyncTransaction()Landroid/view/SurfaceControl$Transaction;
-PLcom/android/server/wm/Dimmer$DimAnimatable;->makeAnimationLeash()Landroid/view/SurfaceControl$Builder;
+HPLcom/android/server/wm/Dimmer$DimAnimatable;->makeAnimationLeash()Landroid/view/SurfaceControl$Builder;
 PLcom/android/server/wm/Dimmer$DimAnimatable;->onAnimationLeashCreated(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V
 PLcom/android/server/wm/Dimmer$DimAnimatable;->onAnimationLeashLost(Landroid/view/SurfaceControl$Transaction;)V
 HPLcom/android/server/wm/Dimmer$DimAnimatable;->removeSurface()V
@@ -54596,10 +56406,10 @@
 HPLcom/android/server/wm/Dimmer;->getDimState(Lcom/android/server/wm/WindowContainer;)Lcom/android/server/wm/Dimmer$DimState;
 HPLcom/android/server/wm/Dimmer;->makeDimLayer()Landroid/view/SurfaceControl;
 HSPLcom/android/server/wm/Dimmer;->resetDimStates()V
-PLcom/android/server/wm/Dimmer;->startAnim(Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/SurfaceAnimator;Landroid/view/SurfaceControl$Transaction;FF)V
+HPLcom/android/server/wm/Dimmer;->startAnim(Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/SurfaceAnimator;Landroid/view/SurfaceControl$Transaction;FF)V
 PLcom/android/server/wm/Dimmer;->startDimEnter(Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/SurfaceAnimator;Landroid/view/SurfaceControl$Transaction;)V
 PLcom/android/server/wm/Dimmer;->startDimExit(Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/SurfaceAnimator;Landroid/view/SurfaceControl$Transaction;)V
-HSPLcom/android/server/wm/Dimmer;->updateDims(Landroid/view/SurfaceControl$Transaction;Landroid/graphics/Rect;)Z+]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/Dimmer;Lcom/android/server/wm/Dimmer;]Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;
+HSPLcom/android/server/wm/Dimmer;->updateDims(Landroid/view/SurfaceControl$Transaction;Landroid/graphics/Rect;)Z+]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;]Lcom/android/server/wm/Dimmer;Lcom/android/server/wm/Dimmer;
 HSPLcom/android/server/wm/DisplayArea$1;-><clinit>()V
 HSPLcom/android/server/wm/DisplayArea$Dimmable$$ExternalSyntheticLambda0;-><init>()V
 HSPLcom/android/server/wm/DisplayArea$Dimmable$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
@@ -54609,7 +56419,7 @@
 HSPLcom/android/server/wm/DisplayArea$Dimmable;->lambda$prepareSurfaces$0(Lcom/android/server/wm/Task;)Z+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/DisplayArea$Dimmable;->prepareSurfaces()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/DisplayArea$Dimmable;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/DisplayArea$Dimmable;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/DisplayArea$Dimmable;]Lcom/android/server/wm/Dimmer;Lcom/android/server/wm/Dimmer;
 HSPLcom/android/server/wm/DisplayArea$Tokens$$ExternalSyntheticLambda0;-><init>()V
-PLcom/android/server/wm/DisplayArea$Tokens$$ExternalSyntheticLambda0;->applyAsInt(Ljava/lang/Object;)I
+HSPLcom/android/server/wm/DisplayArea$Tokens$$ExternalSyntheticLambda0;->applyAsInt(Ljava/lang/Object;)I
 HSPLcom/android/server/wm/DisplayArea$Tokens$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/wm/DisplayArea$Tokens;)V
 HSPLcom/android/server/wm/DisplayArea$Tokens$$ExternalSyntheticLambda1;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/DisplayArea$Tokens;->$r8$lambda$4nbBjlAcYfx_-3TI9_4R5YYtuWg(Lcom/android/server/wm/DisplayArea$Tokens;Lcom/android/server/wm/WindowState;)Z
@@ -54618,11 +56428,11 @@
 HSPLcom/android/server/wm/DisplayArea$Tokens;->addChild(Lcom/android/server/wm/WindowToken;)V
 HSPLcom/android/server/wm/DisplayArea$Tokens;->asTokens()Lcom/android/server/wm/DisplayArea$Tokens;
 HSPLcom/android/server/wm/DisplayArea$Tokens;->getDisplayContent()Lcom/android/server/wm/DisplayContent;
-HSPLcom/android/server/wm/DisplayArea$Tokens;->getOrientation(I)I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayArea$Tokens;]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayArea$Tokens;
+HSPLcom/android/server/wm/DisplayArea$Tokens;->getOrientation(I)I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayArea$Tokens;]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayArea$Tokens;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/DisplayArea$Tokens;->getPendingTransaction()Landroid/view/SurfaceControl$Transaction;
 HSPLcom/android/server/wm/DisplayArea$Tokens;->getSurfaceControl()Landroid/view/SurfaceControl;
 HSPLcom/android/server/wm/DisplayArea$Tokens;->getSyncTransaction()Landroid/view/SurfaceControl$Transaction;
-HSPLcom/android/server/wm/DisplayArea$Tokens;->lambda$new$0(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;]Lcom/android/server/wm/UnknownAppVisibilityController;Lcom/android/server/wm/UnknownAppVisibilityController;
+HSPLcom/android/server/wm/DisplayArea$Tokens;->lambda$new$0(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/wm/UnknownAppVisibilityController;Lcom/android/server/wm/UnknownAppVisibilityController;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;
 PLcom/android/server/wm/DisplayArea$Tokens;->onUnfrozen()V
 HSPLcom/android/server/wm/DisplayArea$Type;-><clinit>()V
 HSPLcom/android/server/wm/DisplayArea$Type;-><init>(Ljava/lang/String;I)V
@@ -54636,41 +56446,41 @@
 HSPLcom/android/server/wm/DisplayArea;->asTokens()Lcom/android/server/wm/DisplayArea$Tokens;
 PLcom/android/server/wm/DisplayArea;->commitPendingTransaction()V
 PLcom/android/server/wm/DisplayArea;->compareTo(Lcom/android/server/wm/WindowContainer;)I
-PLcom/android/server/wm/DisplayArea;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
-HPLcom/android/server/wm/DisplayArea;->dumpChildDisplayArea(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
-HPLcom/android/server/wm/DisplayArea;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
+HSPLcom/android/server/wm/DisplayArea;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
+HSPLcom/android/server/wm/DisplayArea;->dumpChildDisplayArea(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
+HPLcom/android/server/wm/DisplayArea;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Lcom/android/server/wm/DisplayArea;megamorphic_types
 HSPLcom/android/server/wm/DisplayArea;->fillsParent()Z
-HPLcom/android/server/wm/DisplayArea;->findMaxPositionForChildDisplayArea(Lcom/android/server/wm/DisplayArea;)I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/DisplayArea;,Lcom/android/server/wm/DisplayArea$Dimmable;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-HPLcom/android/server/wm/DisplayArea;->findMinPositionForChildDisplayArea(Lcom/android/server/wm/DisplayArea;)I
-HPLcom/android/server/wm/DisplayArea;->findPositionForChildDisplayArea(ILcom/android/server/wm/DisplayArea;)I
+HSPLcom/android/server/wm/DisplayArea;->findMaxPositionForChildDisplayArea(Lcom/android/server/wm/DisplayArea;)I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayArea;,Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/DisplayArea$Dimmable;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/DisplayArea;->findMinPositionForChildDisplayArea(Lcom/android/server/wm/DisplayArea;)I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayArea;,Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/DisplayArea$Dimmable;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/DisplayArea;->findPositionForChildDisplayArea(ILcom/android/server/wm/DisplayArea;)I
 HSPLcom/android/server/wm/DisplayArea;->forAllDisplayAreas(Ljava/util/function/Consumer;)V
-HPLcom/android/server/wm/DisplayArea;->forAllTaskDisplayAreas(Ljava/util/function/Consumer;Z)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/DisplayArea;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/DisplayArea;->forAllTaskDisplayAreas(Ljava/util/function/Consumer;Z)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/DisplayArea;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HPLcom/android/server/wm/DisplayArea;->forAllTaskDisplayAreas(Ljava/util/function/Predicate;Z)Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/DisplayArea;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/DisplayArea;->getDisplayArea()Lcom/android/server/wm/DisplayArea;
 HSPLcom/android/server/wm/DisplayArea;->getDisplayAreaInfo()Landroid/window/DisplayAreaInfo;
 HSPLcom/android/server/wm/DisplayArea;->getDisplayContent()Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/DisplayArea;->getIgnoreOrientationRequest()Z+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
-HSPLcom/android/server/wm/DisplayArea;->getItemFromTaskDisplayAreas(Ljava/util/function/Function;Z)Ljava/lang/Object;+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/DisplayArea;megamorphic_types
+HSPLcom/android/server/wm/DisplayArea;->getItemFromTaskDisplayAreas(Ljava/util/function/Function;Z)Ljava/lang/Object;+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/DisplayArea;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/DisplayArea;->getName()Ljava/lang/String;
-HSPLcom/android/server/wm/DisplayArea;->getOrientation(I)I+]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/DisplayArea;,Lcom/android/server/wm/DisplayArea$Dimmable;
+HSPLcom/android/server/wm/DisplayArea;->getOrientation(I)I+]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/DisplayArea;,Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/DisplayArea$Dimmable;
 HSPLcom/android/server/wm/DisplayArea;->getPendingTransaction()Landroid/view/SurfaceControl$Transaction;
-PLcom/android/server/wm/DisplayArea;->getProtoFieldId()J
+HPLcom/android/server/wm/DisplayArea;->getProtoFieldId()J
 HSPLcom/android/server/wm/DisplayArea;->getSurfaceControl()Landroid/view/SurfaceControl;
 PLcom/android/server/wm/DisplayArea;->getSurfaceHeight()I
 PLcom/android/server/wm/DisplayArea;->getSurfaceWidth()I
 HSPLcom/android/server/wm/DisplayArea;->getSyncTransaction()Landroid/view/SurfaceControl$Transaction;
-HPLcom/android/server/wm/DisplayArea;->handlesOrientationChangeFromDescendant()Z+]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/DisplayArea;,Lcom/android/server/wm/DisplayArea$Dimmable;
+HSPLcom/android/server/wm/DisplayArea;->handlesOrientationChangeFromDescendant()Z+]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/DisplayArea;,Lcom/android/server/wm/DisplayArea$Dimmable;
 HSPLcom/android/server/wm/DisplayArea;->isOrganized()Z
-PLcom/android/server/wm/DisplayArea;->isTaskDisplayArea()Z
+HSPLcom/android/server/wm/DisplayArea;->isTaskDisplayArea()Z
 PLcom/android/server/wm/DisplayArea;->makeAnimationLeash()Landroid/view/SurfaceControl$Builder;
 HSPLcom/android/server/wm/DisplayArea;->needsZBoost()Z
 HSPLcom/android/server/wm/DisplayArea;->onChildPositionChanged(Lcom/android/server/wm/WindowContainer;)V
 HSPLcom/android/server/wm/DisplayArea;->onConfigurationChanged(Landroid/content/res/Configuration;)V
-HPLcom/android/server/wm/DisplayArea;->onDescendantOrientationChanged(Lcom/android/server/wm/WindowContainer;)Z
+HSPLcom/android/server/wm/DisplayArea;->onDescendantOrientationChanged(Lcom/android/server/wm/WindowContainer;)Z
 HSPLcom/android/server/wm/DisplayArea;->onRequestedOverrideConfigurationChanged(Landroid/content/res/Configuration;)V
 HPLcom/android/server/wm/DisplayArea;->onUnfrozen()V
-HPLcom/android/server/wm/DisplayArea;->positionChildAt(ILcom/android/server/wm/WindowContainer;Z)V
-HSPLcom/android/server/wm/DisplayArea;->reduceOnAllTaskDisplayAreas(Ljava/util/function/BiFunction;Ljava/lang/Object;Z)Ljava/lang/Object;+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayArea$Tokens;,Lcom/android/server/wm/DisplayArea;,Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/DisplayArea$Dimmable;
+HSPLcom/android/server/wm/DisplayArea;->positionChildAt(ILcom/android/server/wm/WindowContainer;Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/DisplayArea;,Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/DisplayArea$Dimmable;,Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayArea;,Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/DisplayArea$Dimmable;
+HSPLcom/android/server/wm/DisplayArea;->reduceOnAllTaskDisplayAreas(Ljava/util/function/BiFunction;Ljava/lang/Object;Z)Ljava/lang/Object;+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayArea$Tokens;,Lcom/android/server/wm/DisplayArea;,Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/DisplayArea$Dimmable;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 PLcom/android/server/wm/DisplayArea;->removeImmediately()V
 HSPLcom/android/server/wm/DisplayArea;->resolveOverrideConfiguration(Landroid/content/res/Configuration;)V
 PLcom/android/server/wm/DisplayArea;->sendDisplayAreaAppeared()V
@@ -54678,10 +56488,11 @@
 HSPLcom/android/server/wm/DisplayArea;->setIgnoreOrientationRequest(Z)Z
 PLcom/android/server/wm/DisplayArea;->setOrganizer(Landroid/window/IDisplayAreaOrganizer;)V
 HSPLcom/android/server/wm/DisplayArea;->setOrganizer(Landroid/window/IDisplayAreaOrganizer;Z)V
-HPLcom/android/server/wm/DisplayArea;->toString()Ljava/lang/String;
+HSPLcom/android/server/wm/DisplayArea;->toString()Ljava/lang/String;
 HSPLcom/android/server/wm/DisplayAreaOrganizerController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/DisplayAreaOrganizerController;ILjava/util/List;Landroid/window/IDisplayAreaOrganizer;)V
 HSPLcom/android/server/wm/DisplayAreaOrganizerController$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/DisplayAreaOrganizerController$$ExternalSyntheticLambda3;-><init>(Landroid/window/IDisplayAreaOrganizer;)V
+PLcom/android/server/wm/DisplayAreaOrganizerController$$ExternalSyntheticLambda3;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/DisplayAreaOrganizerController$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/wm/DisplayAreaOrganizerController;ILjava/util/List;Landroid/window/IDisplayAreaOrganizer;)V
 HSPLcom/android/server/wm/DisplayAreaOrganizerController$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/DisplayAreaOrganizerController$DeathRecipient;-><init>(Lcom/android/server/wm/DisplayAreaOrganizerController;Landroid/window/IDisplayAreaOrganizer;I)V
@@ -54693,6 +56504,7 @@
 HSPLcom/android/server/wm/DisplayAreaOrganizerController$DisplayAreaOrganizerState;-><init>(Lcom/android/server/wm/DisplayAreaOrganizerController;Landroid/window/IDisplayAreaOrganizer;I)V
 PLcom/android/server/wm/DisplayAreaOrganizerController$DisplayAreaOrganizerState;->destroy()V
 PLcom/android/server/wm/DisplayAreaOrganizerController$DisplayAreaOrganizerState;->lambda$destroy$0(Landroid/os/IBinder;Lcom/android/server/wm/DisplayArea;)V
+PLcom/android/server/wm/DisplayAreaOrganizerController;->$r8$lambda$dyID58NTPV1AoOl4VRX1Xc6T5lM(Landroid/window/IDisplayAreaOrganizer;Ljava/util/Map$Entry;)Z
 HSPLcom/android/server/wm/DisplayAreaOrganizerController;->$r8$lambda$iuW9rgPMJg2iQeV7ZnA6uq27t-s(Lcom/android/server/wm/DisplayAreaOrganizerController;ILjava/util/List;Landroid/window/IDisplayAreaOrganizer;Lcom/android/server/wm/DisplayContent;)V
 HSPLcom/android/server/wm/DisplayAreaOrganizerController;->$r8$lambda$sJlvlrpN4pCdPKGSW8FdmYcDcyM(Lcom/android/server/wm/DisplayAreaOrganizerController;ILjava/util/List;Landroid/window/IDisplayAreaOrganizer;Lcom/android/server/wm/DisplayArea;)V
 PLcom/android/server/wm/DisplayAreaOrganizerController;->-$$Nest$fgetmGlobalLock(Lcom/android/server/wm/DisplayAreaOrganizerController;)Lcom/android/server/wm/WindowManagerGlobalLock;
@@ -54702,6 +56514,7 @@
 HSPLcom/android/server/wm/DisplayAreaOrganizerController;->getOrganizerByFeature(I)Landroid/window/IDisplayAreaOrganizer;
 HSPLcom/android/server/wm/DisplayAreaOrganizerController;->lambda$registerOrganizer$0(ILjava/util/List;Landroid/window/IDisplayAreaOrganizer;Lcom/android/server/wm/DisplayArea;)V
 HSPLcom/android/server/wm/DisplayAreaOrganizerController;->lambda$registerOrganizer$1(ILjava/util/List;Landroid/window/IDisplayAreaOrganizer;Lcom/android/server/wm/DisplayContent;)V
+PLcom/android/server/wm/DisplayAreaOrganizerController;->lambda$unregisterOrganizer$2(Landroid/window/IDisplayAreaOrganizer;Ljava/util/Map$Entry;)Z
 PLcom/android/server/wm/DisplayAreaOrganizerController;->onDisplayAreaAppeared(Landroid/window/IDisplayAreaOrganizer;Lcom/android/server/wm/DisplayArea;)V
 HSPLcom/android/server/wm/DisplayAreaOrganizerController;->onDisplayAreaInfoChanged(Landroid/window/IDisplayAreaOrganizer;Lcom/android/server/wm/DisplayArea;)V
 PLcom/android/server/wm/DisplayAreaOrganizerController;->onDisplayAreaVanished(Landroid/window/IDisplayAreaOrganizer;Lcom/android/server/wm/DisplayArea;)V
@@ -54716,11 +56529,11 @@
 HSPLcom/android/server/wm/DisplayAreaPolicy$Provider;->fromResources(Landroid/content/res/Resources;)Lcom/android/server/wm/DisplayAreaPolicy$Provider;
 HSPLcom/android/server/wm/DisplayAreaPolicy;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/RootDisplayArea;)V
 HSPLcom/android/server/wm/DisplayAreaPolicyBuilder$DefaultSelectRootForWindowFunction;-><init>(Lcom/android/server/wm/RootDisplayArea;Ljava/util/List;)V
-HSPLcom/android/server/wm/DisplayAreaPolicyBuilder$DefaultSelectRootForWindowFunction;->apply(Ljava/lang/Integer;Landroid/os/Bundle;)Lcom/android/server/wm/RootDisplayArea;
+HSPLcom/android/server/wm/DisplayAreaPolicyBuilder$DefaultSelectRootForWindowFunction;->apply(Ljava/lang/Integer;Landroid/os/Bundle;)Lcom/android/server/wm/RootDisplayArea;+]Ljava/util/List;Ljava/util/Collections$UnmodifiableRandomAccessList;
 HSPLcom/android/server/wm/DisplayAreaPolicyBuilder$DefaultSelectRootForWindowFunction;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/wm/DisplayAreaPolicyBuilder$DefaultSelectTaskDisplayAreaFunction;-><init>(Lcom/android/server/wm/TaskDisplayArea;)V
-HPLcom/android/server/wm/DisplayAreaPolicyBuilder$DefaultSelectTaskDisplayAreaFunction;->apply(Landroid/os/Bundle;)Lcom/android/server/wm/TaskDisplayArea;
-HPLcom/android/server/wm/DisplayAreaPolicyBuilder$DefaultSelectTaskDisplayAreaFunction;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/wm/DisplayAreaPolicyBuilder$DefaultSelectTaskDisplayAreaFunction;->apply(Landroid/os/Bundle;)Lcom/android/server/wm/TaskDisplayArea;
+HSPLcom/android/server/wm/DisplayAreaPolicyBuilder$DefaultSelectTaskDisplayAreaFunction;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/wm/DisplayAreaPolicyBuilder$Feature$Builder$$ExternalSyntheticLambda0;-><init>()V
 HSPLcom/android/server/wm/DisplayAreaPolicyBuilder$Feature$Builder$$ExternalSyntheticLambda0;->create(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayArea$Type;Ljava/lang/String;I)Lcom/android/server/wm/DisplayArea;
 HSPLcom/android/server/wm/DisplayAreaPolicyBuilder$Feature$Builder;-><init>(Lcom/android/server/policy/WindowManagerPolicy;Ljava/lang/String;I)V
@@ -54765,11 +56578,11 @@
 HSPLcom/android/server/wm/DisplayAreaPolicyBuilder$Result$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/wm/DisplayAreaPolicyBuilder$Result;->$r8$lambda$am8Z89jNU7AG9qZKA6dA1j44b84(Lcom/android/server/wm/TaskDisplayArea;)Lcom/android/server/wm/TaskDisplayArea;
 HSPLcom/android/server/wm/DisplayAreaPolicyBuilder$Result;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/RootDisplayArea;Ljava/util/List;Ljava/util/function/BiFunction;Ljava/util/function/Function;)V
-HSPLcom/android/server/wm/DisplayAreaPolicyBuilder$Result;->findAreaForWindowType(ILandroid/os/Bundle;ZZ)Lcom/android/server/wm/DisplayArea$Tokens;
+HSPLcom/android/server/wm/DisplayAreaPolicyBuilder$Result;->findAreaForWindowType(ILandroid/os/Bundle;ZZ)Lcom/android/server/wm/DisplayArea$Tokens;+]Lcom/android/server/wm/RootDisplayArea;Lcom/android/server/wm/DisplayContent;]Ljava/util/function/BiFunction;Lcom/android/server/wm/DisplayAreaPolicyBuilder$DefaultSelectRootForWindowFunction;
 HSPLcom/android/server/wm/DisplayAreaPolicyBuilder$Result;->getDefaultTaskDisplayArea()Lcom/android/server/wm/TaskDisplayArea;
 HSPLcom/android/server/wm/DisplayAreaPolicyBuilder$Result;->getDisplayAreas(I)Ljava/util/List;
 HSPLcom/android/server/wm/DisplayAreaPolicyBuilder$Result;->getDisplayAreas(Lcom/android/server/wm/RootDisplayArea;ILjava/util/List;)V
-HPLcom/android/server/wm/DisplayAreaPolicyBuilder$Result;->getTaskDisplayArea(Landroid/os/Bundle;)Lcom/android/server/wm/TaskDisplayArea;
+HSPLcom/android/server/wm/DisplayAreaPolicyBuilder$Result;->getTaskDisplayArea(Landroid/os/Bundle;)Lcom/android/server/wm/TaskDisplayArea;
 HSPLcom/android/server/wm/DisplayAreaPolicyBuilder$Result;->lambda$new$0(Lcom/android/server/wm/TaskDisplayArea;)Lcom/android/server/wm/TaskDisplayArea;
 HSPLcom/android/server/wm/DisplayAreaPolicyBuilder;-><init>()V
 HSPLcom/android/server/wm/DisplayAreaPolicyBuilder;->build(Lcom/android/server/wm/WindowManagerService;)Lcom/android/server/wm/DisplayAreaPolicyBuilder$Result;
@@ -54832,7 +56645,7 @@
 PLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda36;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda37;-><init>(II)V
 HSPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda37;->apply(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda38;-><init>(Lcom/android/server/wm/DisplayContent;)V
+HPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda38;-><init>(Lcom/android/server/wm/DisplayContent;)V
 PLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda38;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda39;-><init>()V
 PLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda39;->test(Ljava/lang/Object;)Z
@@ -54845,14 +56658,14 @@
 PLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda43;->test(Ljava/lang/Object;)Z
 HPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda44;-><init>()V
 HPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda44;->test(Ljava/lang/Object;Ljava/lang/Object;)Z
-PLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda45;-><init>(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
-PLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda45;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda45;-><init>(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
+HSPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda45;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda46;-><init>(Landroid/view/SurfaceControl$Transaction;IIZ)V
-PLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda46;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda46;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda47;-><init>(Z)V
-PLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda47;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda47;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda48;-><init>(Lcom/android/server/wm/DisplayContent;III)V
-PLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda48;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda48;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda49;-><init>()V
 PLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda49;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/wm/DisplayContent;)V
@@ -54886,7 +56699,7 @@
 HSPLcom/android/server/wm/DisplayContent$FixedRotationTransitionListener;-><init>(Lcom/android/server/wm/DisplayContent;)V
 PLcom/android/server/wm/DisplayContent$FixedRotationTransitionListener;->notifyRecentsWillBeTop()V
 PLcom/android/server/wm/DisplayContent$FixedRotationTransitionListener;->onAppTransitionCancelledLocked(Z)V
-HPLcom/android/server/wm/DisplayContent$FixedRotationTransitionListener;->onAppTransitionFinishedLocked(Landroid/os/IBinder;)V
+HSPLcom/android/server/wm/DisplayContent$FixedRotationTransitionListener;->onAppTransitionFinishedLocked(Landroid/os/IBinder;)V
 PLcom/android/server/wm/DisplayContent$FixedRotationTransitionListener;->onAppTransitionTimeoutLocked()V
 HPLcom/android/server/wm/DisplayContent$FixedRotationTransitionListener;->onFinishRecentsAnimation()V
 HPLcom/android/server/wm/DisplayContent$FixedRotationTransitionListener;->onStartRecentsAnimation(Lcom/android/server/wm/ActivityRecord;)V
@@ -54910,7 +56723,7 @@
 HSPLcom/android/server/wm/DisplayContent$RemoteInsetsControlTarget;-><init>(Lcom/android/server/wm/DisplayContent;Landroid/view/IDisplayWindowInsetsController;)V
 HPLcom/android/server/wm/DisplayContent$RemoteInsetsControlTarget;->getRequestedVisibility(I)Z
 PLcom/android/server/wm/DisplayContent$RemoteInsetsControlTarget;->hideInsets(IZ)V
-HPLcom/android/server/wm/DisplayContent$RemoteInsetsControlTarget;->notifyInsetsChanged()V
+HPLcom/android/server/wm/DisplayContent$RemoteInsetsControlTarget;->notifyInsetsChanged()V+]Landroid/view/IDisplayWindowInsetsController;Landroid/view/IDisplayWindowInsetsController$Stub$Proxy;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HPLcom/android/server/wm/DisplayContent$RemoteInsetsControlTarget;->notifyInsetsControlChanged()V
 PLcom/android/server/wm/DisplayContent$RemoteInsetsControlTarget;->setRequestedVisibilities(Landroid/view/InsetsVisibilities;)V
 PLcom/android/server/wm/DisplayContent$RemoteInsetsControlTarget;->showInsets(IZ)V
@@ -54934,14 +56747,14 @@
 HSPLcom/android/server/wm/DisplayContent;->$r8$lambda$Kk8EpGJGDafGLHbI1jJcpzVaiiQ(Lcom/android/server/wm/DisplayContent;Landroid/view/DisplayCutout;I)Lcom/android/server/wm/utils/WmDisplayCutout;
 HSPLcom/android/server/wm/DisplayContent;->$r8$lambda$L1LqtwgBzazb-4IkgKYdtduvkwo(IILcom/android/server/wm/TaskDisplayArea;)Lcom/android/server/wm/Task;
 PLcom/android/server/wm/DisplayContent;->$r8$lambda$NT2x63LiBYJ635DIXFU-lE-P4k0(Lcom/android/server/wm/DisplayContent;IILcom/android/server/wm/WindowState;)Z
-PLcom/android/server/wm/DisplayContent;->$r8$lambda$Ombulr7Onm0oifj9eINkuGypFvs(Ljava/io/PrintWriter;Ljava/lang/String;ZLcom/android/server/wm/TaskDisplayArea;)V
+HSPLcom/android/server/wm/DisplayContent;->$r8$lambda$Ombulr7Onm0oifj9eINkuGypFvs(Ljava/io/PrintWriter;Ljava/lang/String;ZLcom/android/server/wm/TaskDisplayArea;)V
 HSPLcom/android/server/wm/DisplayContent;->$r8$lambda$OtLCIQFjCt9o-SYztyeDUcWUwGs(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/DisplayContent;->$r8$lambda$Qay0wf7anJhCTJlU0FRkKWaw6Mc(Lcom/android/server/wm/Task;)Z
 HPLcom/android/server/wm/DisplayContent;->$r8$lambda$QzFsokI_6PDJm4hVl5PqxqECsow(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/WindowState;)Z
 PLcom/android/server/wm/DisplayContent;->$r8$lambda$Rpi-f9v5NK07kXvdh1DOwETeqV0(Landroid/view/SurfaceControl$Transaction;IIZLcom/android/server/wm/WindowState;)V
 HPLcom/android/server/wm/DisplayContent;->$r8$lambda$TOGa3tol7HGHfVY5UwFRsPCQcUk([I[ILandroid/graphics/Region;Landroid/graphics/Rect;)V
 PLcom/android/server/wm/DisplayContent;->$r8$lambda$UR2D5AvaM6W5T67UZV2bMD1gjuU(ILcom/android/server/wm/WindowState;)Z
-HPLcom/android/server/wm/DisplayContent;->$r8$lambda$UVgWT8LknO8Z1a1KxsBBhrIpkMs(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;I)V+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
+HSPLcom/android/server/wm/DisplayContent;->$r8$lambda$UVgWT8LknO8Z1a1KxsBBhrIpkMs(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;I)V+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 PLcom/android/server/wm/DisplayContent;->$r8$lambda$VmubSGiVOuzmw8MgPEvewp3Iy4M([ILjava/util/ArrayList;Lcom/android/server/wm/Task;)V
 HSPLcom/android/server/wm/DisplayContent;->$r8$lambda$Wj5pYC1EId06A5RSk7bYLjxd3ws([ILcom/android/server/wm/Task;)V
 HSPLcom/android/server/wm/DisplayContent;->$r8$lambda$X903lxiDNqeyc_JWryogdrh50Ms(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/WindowState;)V
@@ -54962,36 +56775,36 @@
 PLcom/android/server/wm/DisplayContent;->$r8$lambda$vyw8geQ4YShf0sbyCNV91GBdJ4E(Lcom/android/server/wm/WindowState;)Z
 HSPLcom/android/server/wm/DisplayContent;->$r8$lambda$wql3ALhkJb1iZ9osw9Ti1ehDkx8(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayArea;)V
 HSPLcom/android/server/wm/DisplayContent;->$r8$lambda$z8mvbriy2mEdPKF5dYvL617CyWc(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/WindowState;)V
-HPLcom/android/server/wm/DisplayContent;->-$$Nest$fgetmFixedRotationLaunchingApp(Lcom/android/server/wm/DisplayContent;)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/DisplayContent;->-$$Nest$fgetmFixedRotationLaunchingApp(Lcom/android/server/wm/DisplayContent;)Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/DisplayContent;->-$$Nest$fgetmImeLayeringTarget(Lcom/android/server/wm/DisplayContent;)Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/DisplayContent;-><init>(Landroid/view/Display;Lcom/android/server/wm/RootWindowContainer;)V
 PLcom/android/server/wm/DisplayContent;->addShellRoot(Landroid/view/IWindow;I)Landroid/view/SurfaceControl;
-HPLcom/android/server/wm/DisplayContent;->addToGlobalAndConsumeLimit(Landroid/graphics/Region;Landroid/graphics/Region;Landroid/graphics/Rect;ILcom/android/server/wm/WindowState;I)I+]Landroid/graphics/Region;Landroid/graphics/Region;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/DisplayContent;->addToGlobalAndConsumeLimit(Landroid/graphics/Region;Landroid/graphics/Region;Landroid/graphics/Rect;ILcom/android/server/wm/WindowState;I)I+]Landroid/graphics/Region;Landroid/graphics/Region;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/DisplayContent;->addWindowToken(Landroid/os/IBinder;Lcom/android/server/wm/WindowToken;)V
 HSPLcom/android/server/wm/DisplayContent;->adjustDisplaySizeRanges(Landroid/view/DisplayInfo;IIII)V+]Lcom/android/server/wm/utils/WmDisplayCutout;Lcom/android/server/wm/utils/WmDisplayCutout;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
-HPLcom/android/server/wm/DisplayContent;->adjustForImeIfNeeded()V
-PLcom/android/server/wm/DisplayContent;->alwaysCreateRootTask(II)Z
+HSPLcom/android/server/wm/DisplayContent;->adjustForImeIfNeeded()V
+HSPLcom/android/server/wm/DisplayContent;->alwaysCreateRootTask(II)Z
 HSPLcom/android/server/wm/DisplayContent;->amendWindowTapExcludeRegion(Landroid/graphics/Region;)V+]Landroid/graphics/Region;Landroid/graphics/Region;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 PLcom/android/server/wm/DisplayContent;->applyMagnificationSpec(Landroid/view/MagnificationSpec;)V
 HPLcom/android/server/wm/DisplayContent;->applyRotation(II)V
 PLcom/android/server/wm/DisplayContent;->applyRotationAndFinishFixedRotation(II)V
 HSPLcom/android/server/wm/DisplayContent;->applySurfaceChangesTransaction()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/DisplayContent$ApplySurfaceChangesTransactionState;Lcom/android/server/wm/DisplayContent$ApplySurfaceChangesTransactionState;]Lcom/android/server/wm/ImeInsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;]Ljava/util/LinkedList;Ljava/util/LinkedList;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/WallpaperVisibilityListeners;Lcom/android/server/wm/WallpaperVisibilityListeners;]Landroid/hardware/display/DisplayManagerInternal;Lcom/android/server/display/DisplayManagerService$LocalService;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/DisplayContent;->assignChildLayers(Landroid/view/SurfaceControl$Transaction;)V
-HSPLcom/android/server/wm/DisplayContent;->assignRelativeLayerForIme(Landroid/view/SurfaceControl$Transaction;Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/DisplayContent$RemoteInsetsControlTarget;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent$ImeContainer;]Lcom/android/server/wm/DisplayContent$ImeContainer;Lcom/android/server/wm/DisplayContent$ImeContainer;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/DisplayContent;->assignRelativeLayerForIme(Landroid/view/SurfaceControl$Transaction;Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/DisplayContent$RemoteInsetsControlTarget;,Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent$ImeContainer;]Lcom/android/server/wm/DisplayContent$ImeContainer;Lcom/android/server/wm/DisplayContent$ImeContainer;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/DisplayContent;->assignRelativeLayerForImeTargetChild(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/WindowContainer;)V
 HSPLcom/android/server/wm/DisplayContent;->assignWindowLayers(Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HPLcom/android/server/wm/DisplayContent;->attachAndShowImeScreenshotOnTarget()V
 HSPLcom/android/server/wm/DisplayContent;->calculateDisplayCutoutForRotation(I)Lcom/android/server/wm/utils/WmDisplayCutout;+]Lcom/android/server/wm/utils/RotationCache;Lcom/android/server/wm/utils/RotationCache;
 HSPLcom/android/server/wm/DisplayContent;->calculateDisplayCutoutForRotationAndDisplaySizeUncached(Landroid/view/DisplayCutout;III)Lcom/android/server/wm/utils/WmDisplayCutout;
 HSPLcom/android/server/wm/DisplayContent;->calculateDisplayCutoutForRotationUncached(Landroid/view/DisplayCutout;I)Lcom/android/server/wm/utils/WmDisplayCutout;
-HSPLcom/android/server/wm/DisplayContent;->calculatePrivacyIndicatorBoundsForRotation(I)Landroid/view/PrivacyIndicatorBounds;
+HSPLcom/android/server/wm/DisplayContent;->calculatePrivacyIndicatorBoundsForRotation(I)Landroid/view/PrivacyIndicatorBounds;+]Lcom/android/server/wm/utils/RotationCache;Lcom/android/server/wm/utils/RotationCache;
 HSPLcom/android/server/wm/DisplayContent;->calculatePrivacyIndicatorBoundsForRotationUncached(Landroid/view/PrivacyIndicatorBounds;I)Landroid/view/PrivacyIndicatorBounds;
-HSPLcom/android/server/wm/DisplayContent;->calculateRoundedCornersForRotation(I)Landroid/view/RoundedCorners;
+HSPLcom/android/server/wm/DisplayContent;->calculateRoundedCornersForRotation(I)Landroid/view/RoundedCorners;+]Lcom/android/server/wm/utils/RotationCache;Lcom/android/server/wm/utils/RotationCache;
 HSPLcom/android/server/wm/DisplayContent;->calculateRoundedCornersForRotationUncached(Landroid/view/RoundedCorners;I)Landroid/view/RoundedCorners;
-HPLcom/android/server/wm/DisplayContent;->calculateSystemGestureExclusion(Landroid/graphics/Region;Landroid/graphics/Region;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Landroid/graphics/Region;Landroid/graphics/Region;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
+HSPLcom/android/server/wm/DisplayContent;->calculateSystemGestureExclusion(Landroid/graphics/Region;Landroid/graphics/Region;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Landroid/graphics/Region;Landroid/graphics/Region;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;
 PLcom/android/server/wm/DisplayContent;->canAddToastWindowForUid(I)Z
-PLcom/android/server/wm/DisplayContent;->canShowTasksInRecents()Z
-HPLcom/android/server/wm/DisplayContent;->canShowWithInsecureKeyguard()Z
+HPLcom/android/server/wm/DisplayContent;->canShowTasksInRecents()Z
+HSPLcom/android/server/wm/DisplayContent;->canShowWithInsecureKeyguard()Z
 HPLcom/android/server/wm/DisplayContent;->canUpdateImeTarget()Z
 PLcom/android/server/wm/DisplayContent;->clearFixedRotationLaunchingApp()V
 HSPLcom/android/server/wm/DisplayContent;->clearLayoutNeeded()V
@@ -54999,34 +56812,35 @@
 HPLcom/android/server/wm/DisplayContent;->computeImeControlTarget()Lcom/android/server/wm/InsetsControlTarget;
 HSPLcom/android/server/wm/DisplayContent;->computeImeParent()Landroid/view/SurfaceControl;
 HSPLcom/android/server/wm/DisplayContent;->computeImeTarget(Z)Lcom/android/server/wm/WindowState;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
-HPLcom/android/server/wm/DisplayContent;->computeImeTargetIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/DisplayContent;->computeImeTargetIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/DisplayContent;->computeScreenAppConfiguration(Landroid/content/res/Configuration;IIIILandroid/view/DisplayCutout;)V
 HSPLcom/android/server/wm/DisplayContent;->computeScreenConfiguration(Landroid/content/res/Configuration;)V+]Landroid/view/InputDevice;Landroid/view/InputDevice;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/input/InputManagerService;Lcom/android/server/input/InputManagerService;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Landroid/view/DisplayInfo;Landroid/view/DisplayInfo;
-PLcom/android/server/wm/DisplayContent;->computeScreenConfiguration(Landroid/content/res/Configuration;I)Landroid/view/DisplayInfo;
+HPLcom/android/server/wm/DisplayContent;->computeScreenConfiguration(Landroid/content/res/Configuration;I)Landroid/view/DisplayInfo;
 HSPLcom/android/server/wm/DisplayContent;->computeSizeRangesAndScreenLayout(Landroid/view/DisplayInfo;ZIIIFLandroid/content/res/Configuration;)V
 HSPLcom/android/server/wm/DisplayContent;->configureDisplayPolicy()V
 HSPLcom/android/server/wm/DisplayContent;->configureSurfaces(Landroid/view/SurfaceControl$Transaction;)V
 HPLcom/android/server/wm/DisplayContent;->continueUpdateImeTarget()V
 PLcom/android/server/wm/DisplayContent;->continueUpdateOrientationForDiffOrienLaunchingApp()V
 HPLcom/android/server/wm/DisplayContent;->deferUpdateImeTarget()V
-HPLcom/android/server/wm/DisplayContent;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
-HPLcom/android/server/wm/DisplayContent;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
+HSPLcom/android/server/wm/DisplayContent;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
+HPLcom/android/server/wm/DisplayContent;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V+]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/RootWindowContainer$SleepToken;Lcom/android/server/wm/RootWindowContainer$SleepToken;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;]Landroid/view/DisplayInfo;Landroid/view/DisplayInfo;]Ljava/util/Set;Landroid/util/ArraySet;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/DisplayContent$RemoteInsetsControlTarget;]Lcom/android/server/wm/DisplayRotation;Lcom/android/server/wm/DisplayRotation;]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/DisplayFrames;]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/InputTarget;Lcom/android/server/wm/WindowState;]Ljava/util/Iterator;Landroid/util/MapCollections$ArrayIterator;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/DisplayContent;->dumpTokens(Ljava/io/PrintWriter;Z)V
 PLcom/android/server/wm/DisplayContent;->dumpWindowAnimators(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/wm/DisplayContent;->ensureActivitiesVisible(Lcom/android/server/wm/ActivityRecord;IZZ)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;
-HPLcom/android/server/wm/DisplayContent;->executeAppTransition()V
+HSPLcom/android/server/wm/DisplayContent;->executeAppTransition()V+]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;
 HSPLcom/android/server/wm/DisplayContent;->fillsParent()Z
 HSPLcom/android/server/wm/DisplayContent;->findAreaForToken(Lcom/android/server/wm/WindowToken;)Lcom/android/server/wm/DisplayArea;
 HSPLcom/android/server/wm/DisplayContent;->findAreaForWindowType(ILandroid/os/Bundle;ZZ)Lcom/android/server/wm/DisplayArea;
 HSPLcom/android/server/wm/DisplayContent;->findFocusedWindow()Lcom/android/server/wm/WindowState;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/DisplayContent;->findFocusedWindowIfNeeded(I)Lcom/android/server/wm/WindowState;+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
+HPLcom/android/server/wm/DisplayContent;->findRoundedCornerOverlays()[Landroid/view/SurfaceControl;
 PLcom/android/server/wm/DisplayContent;->findScrollCaptureTargetWindow(Lcom/android/server/wm/WindowState;I)Lcom/android/server/wm/WindowState;
 PLcom/android/server/wm/DisplayContent;->findTaskForResizePoint(II)Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/DisplayContent;->finishAsyncRotation(Lcom/android/server/wm/WindowToken;)V
 PLcom/android/server/wm/DisplayContent;->finishAsyncRotationIfPossible()V
 HPLcom/android/server/wm/DisplayContent;->forAllImeWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z
 HSPLcom/android/server/wm/DisplayContent;->forceDesktopMode()Z
-HPLcom/android/server/wm/DisplayContent;->getActivityRecord(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/DisplayContent;->getActivityRecord(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/DisplayContent;->getAsyncRotationController()Lcom/android/server/wm/AsyncRotationController;
 PLcom/android/server/wm/DisplayContent;->getBounds(Landroid/graphics/Rect;I)V
 HSPLcom/android/server/wm/DisplayContent;->getContentRecorder()Lcom/android/server/wm/ContentRecorder;
@@ -55043,46 +56857,46 @@
 HSPLcom/android/server/wm/DisplayContent;->getFocusedRootTask()Lcom/android/server/wm/Task;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/DisplayContent;->getImeContainer()Lcom/android/server/wm/DisplayArea$Tokens;
 PLcom/android/server/wm/DisplayContent;->getImeFallback()Lcom/android/server/wm/InsetsControlTarget;
-HPLcom/android/server/wm/DisplayContent;->getImeHostOrFallback(Lcom/android/server/wm/WindowState;)Lcom/android/server/wm/InsetsControlTarget;
+HPLcom/android/server/wm/DisplayContent;->getImeHostOrFallback(Lcom/android/server/wm/WindowState;)Lcom/android/server/wm/InsetsControlTarget;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/DisplayContent;->getImeInputTarget()Lcom/android/server/wm/InputTarget;
-HSPLcom/android/server/wm/DisplayContent;->getImePolicy()I
+HSPLcom/android/server/wm/DisplayContent;->getImePolicy()I+]Lcom/android/server/wm/DisplayWindowSettings;Lcom/android/server/wm/DisplayWindowSettings;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/DisplayContent;->getImeTarget(I)Lcom/android/server/wm/InsetsControlTarget;
-HPLcom/android/server/wm/DisplayContent;->getInputMethodWindowVisibleHeight()I
+HSPLcom/android/server/wm/DisplayContent;->getInputMethodWindowVisibleHeight()I+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/DisplayContent;->getInputMonitor()Lcom/android/server/wm/InputMonitor;
 HSPLcom/android/server/wm/DisplayContent;->getInsetsPolicy()Lcom/android/server/wm/InsetsPolicy;
 HSPLcom/android/server/wm/DisplayContent;->getInsetsStateController()Lcom/android/server/wm/InsetsStateController;
-PLcom/android/server/wm/DisplayContent;->getKeepClearAreas()Ljava/util/Set;
+HSPLcom/android/server/wm/DisplayContent;->getKeepClearAreas()Ljava/util/Set;
 HSPLcom/android/server/wm/DisplayContent;->getKeepClearAreas(Ljava/util/Set;Ljava/util/Set;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/DisplayContent;->getLastHasContent()Z
 HSPLcom/android/server/wm/DisplayContent;->getLastOrientation()I
 HSPLcom/android/server/wm/DisplayContent;->getMetricsLogger()Lcom/android/internal/logging/MetricsLogger;
 HSPLcom/android/server/wm/DisplayContent;->getMinimalTaskSizeDp()I
 HSPLcom/android/server/wm/DisplayContent;->getName()Ljava/lang/String;
-HPLcom/android/server/wm/DisplayContent;->getNaturalOrientation()I
+HSPLcom/android/server/wm/DisplayContent;->getNaturalOrientation()I
 HSPLcom/android/server/wm/DisplayContent;->getOrientation()I+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/DisplayContent;->getOrientationRequestingTaskDisplayArea()Lcom/android/server/wm/TaskDisplayArea;
-PLcom/android/server/wm/DisplayContent;->getOverlayLayer()Landroid/view/SurfaceControl;
+HSPLcom/android/server/wm/DisplayContent;->getOverlayLayer()Landroid/view/SurfaceControl;
 HSPLcom/android/server/wm/DisplayContent;->getPinnedTaskController()Lcom/android/server/wm/PinnedTaskController;
 HPLcom/android/server/wm/DisplayContent;->getPresentUIDs()Landroid/util/IntArray;
 PLcom/android/server/wm/DisplayContent;->getProtoFieldId()J
 HPLcom/android/server/wm/DisplayContent;->getRootTask(I)Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/DisplayContent;->getRootTask(II)Lcom/android/server/wm/Task;
-HSPLcom/android/server/wm/DisplayContent;->getRootTaskCount()I
+HSPLcom/android/server/wm/DisplayContent;->getRootTaskCount()I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/DisplayContent;->getRotation()I+]Lcom/android/server/wm/DisplayRotation;Lcom/android/server/wm/DisplayRotation;
 HSPLcom/android/server/wm/DisplayContent;->getRotationAnimation()Lcom/android/server/wm/ScreenRotationAnimation;
 HSPLcom/android/server/wm/DisplayContent;->getSession()Landroid/view/SurfaceSession;
 HPLcom/android/server/wm/DisplayContent;->getStableRect(Landroid/graphics/Rect;)V
 PLcom/android/server/wm/DisplayContent;->getTopRootTask()Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/DisplayContent;->getTouchableWinAtPointLocked(FF)Lcom/android/server/wm/WindowState;
-PLcom/android/server/wm/DisplayContent;->getWindowCornerRadius()F
+HPLcom/android/server/wm/DisplayContent;->getWindowCornerRadius()F
 HSPLcom/android/server/wm/DisplayContent;->getWindowToken(Landroid/os/IBinder;)Lcom/android/server/wm/WindowToken;+]Ljava/util/HashMap;Ljava/util/HashMap;
 PLcom/android/server/wm/DisplayContent;->getWindowingLayer()Landroid/view/SurfaceControl;
-HPLcom/android/server/wm/DisplayContent;->handleActivitySizeCompatModeIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/DisplayContent;->handleAnimatingStoppedAndTransition()V
+HSPLcom/android/server/wm/DisplayContent;->handleActivitySizeCompatModeIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/DisplayContent;->handleAnimatingStoppedAndTransition()V
 HSPLcom/android/server/wm/DisplayContent;->handleCompleteDeferredRemoval()Z+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HPLcom/android/server/wm/DisplayContent;->handleTopActivityLaunchingInDifferentOrientation(Lcom/android/server/wm/ActivityRecord;Z)Z+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/DisplayContent;->handlesOrientationChangeFromDescendant()Z+]Lcom/android/server/wm/DisplayRotation;Lcom/android/server/wm/DisplayRotation;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;
-HSPLcom/android/server/wm/DisplayContent;->hasAccess(I)Z
+HSPLcom/android/server/wm/DisplayContent;->hasAccess(I)Z+]Landroid/view/Display;Landroid/view/Display;
 PLcom/android/server/wm/DisplayContent;->hasAlertWindowSurfaces()Z
 PLcom/android/server/wm/DisplayContent;->hasSecureWindowOnScreen()Z
 PLcom/android/server/wm/DisplayContent;->hasTopFixedRotationLaunchingApp()Z
@@ -55095,16 +56909,17 @@
 HPLcom/android/server/wm/DisplayContent;->isInputMethodClientFocus(II)Z
 HPLcom/android/server/wm/DisplayContent;->isKeyguardAlwaysUnlocked()Z
 HSPLcom/android/server/wm/DisplayContent;->isKeyguardGoingAway()Z+]Lcom/android/server/wm/KeyguardController;Lcom/android/server/wm/KeyguardController;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;
-HPLcom/android/server/wm/DisplayContent;->isKeyguardLocked()Z
+HSPLcom/android/server/wm/DisplayContent;->isKeyguardLocked()Z
+PLcom/android/server/wm/DisplayContent;->isKeyguardOccluded()Z
 HSPLcom/android/server/wm/DisplayContent;->isLayoutNeeded()Z
-HPLcom/android/server/wm/DisplayContent;->isNextTransitionForward()Z
+HSPLcom/android/server/wm/DisplayContent;->isNextTransitionForward()Z
 HSPLcom/android/server/wm/DisplayContent;->isPrivate()Z
 HSPLcom/android/server/wm/DisplayContent;->isReady()Z
 HSPLcom/android/server/wm/DisplayContent;->isRemoved()Z
 HSPLcom/android/server/wm/DisplayContent;->isRemoving()Z
 PLcom/android/server/wm/DisplayContent;->isRotationChanging()Z
 HSPLcom/android/server/wm/DisplayContent;->isSleeping()Z
-HSPLcom/android/server/wm/DisplayContent;->isTrusted()Z
+HSPLcom/android/server/wm/DisplayContent;->isTrusted()Z+]Landroid/view/Display;Landroid/view/Display;
 HPLcom/android/server/wm/DisplayContent;->isUidPresent(I)Z
 PLcom/android/server/wm/DisplayContent;->isVisible()Z
 HPLcom/android/server/wm/DisplayContent;->lambda$addToGlobalAndConsumeLimit$34([I[ILandroid/graphics/Region;Landroid/graphics/Rect;)V+]Landroid/graphics/Region;Landroid/graphics/Region;]Landroid/graphics/Rect;Landroid/graphics/Rect;
@@ -55114,7 +56929,7 @@
 HPLcom/android/server/wm/DisplayContent;->lambda$calculateSystemGestureExclusion$33(Lcom/android/server/wm/RecentsAnimationController;Landroid/graphics/Region;Landroid/graphics/Region;Landroid/graphics/Region;[ILandroid/graphics/Region;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Region;Lcom/android/server/wm/WindowState;)V+]Landroid/graphics/Region;Landroid/graphics/Region;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/RecentsAnimationController;Lcom/android/server/wm/RecentsAnimationController;
 PLcom/android/server/wm/DisplayContent;->lambda$canAddToastWindowForUid$22(ILcom/android/server/wm/WindowState;)Z
 PLcom/android/server/wm/DisplayContent;->lambda$canAddToastWindowForUid$23(ILcom/android/server/wm/WindowState;)Z
-PLcom/android/server/wm/DisplayContent;->lambda$dump$20(Ljava/io/PrintWriter;Ljava/lang/String;ZLcom/android/server/wm/TaskDisplayArea;)V
+HSPLcom/android/server/wm/DisplayContent;->lambda$dump$20(Ljava/io/PrintWriter;Ljava/lang/String;ZLcom/android/server/wm/TaskDisplayArea;)V
 PLcom/android/server/wm/DisplayContent;->lambda$dumpWindowAnimators$27(Ljava/io/PrintWriter;Ljava/lang/String;[ILcom/android/server/wm/WindowState;)V
 HSPLcom/android/server/wm/DisplayContent;->lambda$ensureActivitiesVisible$44(Lcom/android/server/wm/ActivityRecord;IZZLcom/android/server/wm/Task;)V
 PLcom/android/server/wm/DisplayContent;->lambda$findTaskForResizePoint$18(IIILcom/android/server/wm/TaskDisplayArea;)Lcom/android/server/wm/Task;
@@ -55131,7 +56946,7 @@
 HSPLcom/android/server/wm/DisplayContent;->lambda$new$3(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/DisplayContent;->lambda$new$4(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/DisplayContent;->lambda$new$5(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
-HPLcom/android/server/wm/DisplayContent;->lambda$new$6(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/DisplayContent;->lambda$new$6(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/DisplayContent;->lambda$new$7(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/DisplayContent;->lambda$new$8(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/wm/RefreshRatePolicy;Lcom/android/server/wm/RefreshRatePolicy;]Ljava/util/LinkedList;Ljava/util/LinkedList;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/DisplayContent;->lambda$onWindowAnimationFinished$32(Ljava/lang/Object;)Z
@@ -55148,30 +56963,30 @@
 HPLcom/android/server/wm/DisplayContent;->lambda$updateImeControlTarget$25(Landroid/os/IBinder;)V
 HSPLcom/android/server/wm/DisplayContent;->lambda$updateImeParent$26()V
 HSPLcom/android/server/wm/DisplayContent;->layoutAndAssignWindowLayersIfNeeded()V
-HPLcom/android/server/wm/DisplayContent;->logsGestureExclusionRestrictions(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/DisplayContent;->logsGestureExclusionRestrictions(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
 HSPLcom/android/server/wm/DisplayContent;->makeChildSurface(Lcom/android/server/wm/WindowContainer;)Landroid/view/SurfaceControl$Builder;+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Landroid/view/SurfaceControl$Builder;Landroid/view/SurfaceControl$Builder;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/ConfigurationContainer;megamorphic_types]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
-PLcom/android/server/wm/DisplayContent;->makeOverlay()Landroid/view/SurfaceControl$Builder;
+HPLcom/android/server/wm/DisplayContent;->makeOverlay()Landroid/view/SurfaceControl$Builder;
 HPLcom/android/server/wm/DisplayContent;->mayImeShowOnLaunchingActivity(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/DisplayContent;->migrateToNewSurfaceControl(Landroid/view/SurfaceControl$Transaction;)V
-HPLcom/android/server/wm/DisplayContent;->needsGestureExclusionRestrictions(Lcom/android/server/wm/WindowState;Z)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;
-HSPLcom/android/server/wm/DisplayContent;->notifyInsetsChanged(Ljava/util/function/Consumer;)V
+HSPLcom/android/server/wm/DisplayContent;->needsGestureExclusionRestrictions(Lcom/android/server/wm/WindowState;Z)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/DisplayContent;->notifyInsetsChanged(Ljava/util/function/Consumer;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/DisplayContent$RemoteInsetsControlTarget;Lcom/android/server/wm/DisplayContent$RemoteInsetsControlTarget;]Lcom/android/server/wm/AccessibilityController;Lcom/android/server/wm/AccessibilityController;
 HPLcom/android/server/wm/DisplayContent;->notifyKeyguardFlagsChanged()V
 HSPLcom/android/server/wm/DisplayContent;->okToAnimate(ZZ)Z+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/DisplayContent;->okToDisplay()Z
 HSPLcom/android/server/wm/DisplayContent;->okToDisplay(ZZ)Z+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;
-HPLcom/android/server/wm/DisplayContent;->onAppTransitionDone()V
+HSPLcom/android/server/wm/DisplayContent;->onAppTransitionDone()V
 HSPLcom/android/server/wm/DisplayContent;->onConfigurationChanged(Landroid/content/res/Configuration;)V
-HPLcom/android/server/wm/DisplayContent;->onDescendantOrientationChanged(Lcom/android/server/wm/WindowContainer;)Z
+HSPLcom/android/server/wm/DisplayContent;->onDescendantOrientationChanged(Lcom/android/server/wm/WindowContainer;)Z
 HSPLcom/android/server/wm/DisplayContent;->onDescendantOverrideConfigurationChanged()V
 HSPLcom/android/server/wm/DisplayContent;->onDisplayChanged()V
 HSPLcom/android/server/wm/DisplayContent;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V
 HSPLcom/android/server/wm/DisplayContent;->onDisplayInfoChanged()V
-HPLcom/android/server/wm/DisplayContent;->onLastFocusedTaskDisplayAreaChanged(Lcom/android/server/wm/TaskDisplayArea;)V
+HSPLcom/android/server/wm/DisplayContent;->onLastFocusedTaskDisplayAreaChanged(Lcom/android/server/wm/TaskDisplayArea;)V
 HSPLcom/android/server/wm/DisplayContent;->onParentChanged(Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ConfigurationContainer;)V
 HSPLcom/android/server/wm/DisplayContent;->onRequestedOverrideConfigurationChanged(Landroid/content/res/Configuration;)V
 HSPLcom/android/server/wm/DisplayContent;->onResize()V
-HPLcom/android/server/wm/DisplayContent;->onRunningActivityChanged()V
-HPLcom/android/server/wm/DisplayContent;->onShowImeRequested()V
+HSPLcom/android/server/wm/DisplayContent;->onRunningActivityChanged()V
+HPLcom/android/server/wm/DisplayContent;->onShowImeRequested()V+]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/DisplayContent;->onWindowAnimationFinished(Lcom/android/server/wm/WindowContainer;I)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/DisplayContent$ImeScreenshot;Lcom/android/server/wm/DisplayContent$ImeScreenshot;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 PLcom/android/server/wm/DisplayContent;->onWindowFreezeTimeout()V
 PLcom/android/server/wm/DisplayContent;->pauseRecording()V
@@ -55179,12 +56994,12 @@
 HSPLcom/android/server/wm/DisplayContent;->performLayout(ZZ)V+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/DisplayContent;->performLayoutNoTrace(ZZ)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/InputMonitor;Lcom/android/server/wm/InputMonitor;
 PLcom/android/server/wm/DisplayContent;->pointWithinAppWindow(II)Z
-HPLcom/android/server/wm/DisplayContent;->prepareAppTransition(I)V
-HPLcom/android/server/wm/DisplayContent;->prepareAppTransition(II)V
+HSPLcom/android/server/wm/DisplayContent;->prepareAppTransition(I)V
+HSPLcom/android/server/wm/DisplayContent;->prepareAppTransition(II)V
 HSPLcom/android/server/wm/DisplayContent;->prepareSurfaces()V+]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;
-HPLcom/android/server/wm/DisplayContent;->processTaskForTouchExcludeRegion(Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;I)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Landroid/graphics/Region;Landroid/graphics/Region;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;
+HSPLcom/android/server/wm/DisplayContent;->processTaskForTouchExcludeRegion(Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;I)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Landroid/graphics/Region;Landroid/graphics/Region;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;
 HSPLcom/android/server/wm/DisplayContent;->providesMaxBounds()Z
-HPLcom/android/server/wm/DisplayContent;->reParentWindowToken(Lcom/android/server/wm/WindowToken;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/AccessibilityController;Lcom/android/server/wm/AccessibilityController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Ljava/util/HashMap;Ljava/util/HashMap;
+HSPLcom/android/server/wm/DisplayContent;->reParentWindowToken(Lcom/android/server/wm/WindowToken;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/server/wm/AccessibilityController;Lcom/android/server/wm/AccessibilityController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/DisplayContent;->reapplyMagnificationSpec()V
 HSPLcom/android/server/wm/DisplayContent;->reconfigureDisplayLocked()V
 HSPLcom/android/server/wm/DisplayContent;->reduceCompatConfigWidthSize(IIILandroid/util/DisplayMetrics;II)I+]Lcom/android/server/wm/utils/WmDisplayCutout;Lcom/android/server/wm/utils/WmDisplayCutout;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
@@ -55192,7 +57007,7 @@
 HPLcom/android/server/wm/DisplayContent;->refreshImeSecureFlag(Landroid/view/SurfaceControl$Transaction;)Z
 HSPLcom/android/server/wm/DisplayContent;->registerPointerEventListener(Landroid/view/WindowManagerPolicyConstants$PointerEventListener;)V
 PLcom/android/server/wm/DisplayContent;->registerRemoteAnimations(Landroid/view/RemoteAnimationDefinition;)V
-HPLcom/android/server/wm/DisplayContent;->registerSystemGestureExclusionListener(Landroid/view/ISystemGestureExclusionListener;)V
+HSPLcom/android/server/wm/DisplayContent;->registerSystemGestureExclusionListener(Landroid/view/ISystemGestureExclusionListener;)V
 HSPLcom/android/server/wm/DisplayContent;->releaseSelfIfNeeded()V
 HPLcom/android/server/wm/DisplayContent;->remove()V
 HPLcom/android/server/wm/DisplayContent;->removeAppToken(Landroid/os/IBinder;)V
@@ -55210,14 +57025,14 @@
 PLcom/android/server/wm/DisplayContent;->rotateInDifferentOrientationIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
 HPLcom/android/server/wm/DisplayContent;->rotationForActivityInDifferentOrientation(Lcom/android/server/wm/ActivityRecord;)I
 HPLcom/android/server/wm/DisplayContent;->sandboxDisplayApis()Z
-HPLcom/android/server/wm/DisplayContent;->scheduleToastWindowsTimeoutIfNeededLocked(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)V
-PLcom/android/server/wm/DisplayContent;->screenshotDisplayLocked()Landroid/graphics/Bitmap;
+HSPLcom/android/server/wm/DisplayContent;->scheduleToastWindowsTimeoutIfNeededLocked(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)V
+HPLcom/android/server/wm/DisplayContent;->screenshotDisplayLocked()Landroid/graphics/Bitmap;
 HSPLcom/android/server/wm/DisplayContent;->sendNewConfiguration()V
 PLcom/android/server/wm/DisplayContent;->setContentRecordingSession(Landroid/view/ContentRecordingSession;)V
 PLcom/android/server/wm/DisplayContent;->setFixedRotationLaunchingApp(Lcom/android/server/wm/ActivityRecord;I)V
 PLcom/android/server/wm/DisplayContent;->setFixedRotationLaunchingAppUnchecked(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/DisplayContent;->setFixedRotationLaunchingAppUnchecked(Lcom/android/server/wm/ActivityRecord;I)V
-HPLcom/android/server/wm/DisplayContent;->setFocusedApp(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/DisplayContent;->setFocusedApp(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/DisplayContent;->setForcedDensity(II)V
 HSPLcom/android/server/wm/DisplayContent;->setIgnoreOrientationRequest(Z)Z
 HPLcom/android/server/wm/DisplayContent;->setImeInputTarget(Lcom/android/server/wm/InputTarget;)V
@@ -55234,7 +57049,7 @@
 HSPLcom/android/server/wm/DisplayContent;->shouldDeferRemoval()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;
 PLcom/android/server/wm/DisplayContent;->shouldDestroyContentOnRemove()Z
 HSPLcom/android/server/wm/DisplayContent;->shouldImeAttachedToApp()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent$ImeContainer;
-HSPLcom/android/server/wm/DisplayContent;->shouldSleep()Z
+HSPLcom/android/server/wm/DisplayContent;->shouldSleep()Z+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/DisplayContent;->shouldSyncRotationChange(Lcom/android/server/wm/WindowState;)Z
 PLcom/android/server/wm/DisplayContent;->shouldWaitForSystemDecorWindowsOnBoot()Z
 HPLcom/android/server/wm/DisplayContent;->showImeScreenshot()V
@@ -55243,8 +57058,10 @@
 PLcom/android/server/wm/DisplayContent;->startFixedRotationTransform(Lcom/android/server/wm/WindowToken;I)V
 HSPLcom/android/server/wm/DisplayContent;->supportsSystemDecorations()Z
 PLcom/android/server/wm/DisplayContent;->switchUser(I)V
+PLcom/android/server/wm/DisplayContent;->toString()Ljava/lang/String;
 HSPLcom/android/server/wm/DisplayContent;->topRunningActivity()Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/DisplayContent;->topRunningActivity(Z)Lcom/android/server/wm/ActivityRecord;
+PLcom/android/server/wm/DisplayContent;->unregisterPointerEventListener(Landroid/view/WindowManagerPolicyConstants$PointerEventListener;)V
 PLcom/android/server/wm/DisplayContent;->unregisterSystemGestureExclusionListener(Landroid/view/ISystemGestureExclusionListener;)V
 HPLcom/android/server/wm/DisplayContent;->updateAccessibilityOnWindowFocusChanged(Lcom/android/server/wm/AccessibilityController;)V
 HSPLcom/android/server/wm/DisplayContent;->updateBaseDisplayMetrics(IIIFF)V
@@ -55258,11 +57075,11 @@
 HSPLcom/android/server/wm/DisplayContent;->updateFocusedWindowLocked(IZI)Z+]Landroid/os/Handler;Lcom/android/server/wm/WindowManagerService$H;]Lcom/android/server/wm/AccessibilityController;Lcom/android/server/wm/AccessibilityController;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/InputMonitor;Lcom/android/server/wm/InputMonitor;
 HPLcom/android/server/wm/DisplayContent;->updateImeControlTarget()V
 HPLcom/android/server/wm/DisplayContent;->updateImeControlTarget(Z)V
-HPLcom/android/server/wm/DisplayContent;->updateImeInputAndControlTarget(Lcom/android/server/wm/InputTarget;)V
+HPLcom/android/server/wm/DisplayContent;->updateImeInputAndControlTarget(Lcom/android/server/wm/InputTarget;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent$ImeContainer;]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/InputTarget;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/DisplayContent;->updateImeParent()V
 HSPLcom/android/server/wm/DisplayContent;->updateKeepClearAreas()V+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Ljava/util/Set;Landroid/util/ArraySet;
 HSPLcom/android/server/wm/DisplayContent;->updateOrientation()Z+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
-HPLcom/android/server/wm/DisplayContent;->updateOrientation(Lcom/android/server/wm/WindowContainer;Z)Landroid/content/res/Configuration;
+HSPLcom/android/server/wm/DisplayContent;->updateOrientation(Lcom/android/server/wm/WindowContainer;Z)Landroid/content/res/Configuration;
 HSPLcom/android/server/wm/DisplayContent;->updateOrientation(Z)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/DisplayRotation;Lcom/android/server/wm/DisplayRotation;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/TaskChangeNotificationController;Lcom/android/server/wm/TaskChangeNotificationController;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/DisplayContent;->updatePrivacyIndicatorBounds([Landroid/graphics/Rect;)V
 HSPLcom/android/server/wm/DisplayContent;->updateRecording()V
@@ -55271,10 +57088,10 @@
 HSPLcom/android/server/wm/DisplayContent;->updateSystemGestureExclusionLimit()V
 HSPLcom/android/server/wm/DisplayContent;->updateTouchExcludeRegion()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;]Landroid/graphics/Region;Landroid/graphics/Region;]Lcom/android/server/wm/TaskTapPointerEventListener;Lcom/android/server/wm/TaskTapPointerEventListener;]Lcom/android/internal/util/function/pooled/PooledConsumer;Lcom/android/internal/util/function/pooled/PooledLambdaImpl;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/DisplayContent;->updateWindowsForAnimator()V
-HSPLcom/android/server/wm/DisplayFrames;-><init>(ILandroid/view/InsetsState;Landroid/view/DisplayInfo;Lcom/android/server/wm/utils/WmDisplayCutout;Landroid/view/RoundedCorners;Landroid/view/PrivacyIndicatorBounds;)V
-PLcom/android/server/wm/DisplayFrames;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
+HSPLcom/android/server/wm/DisplayFrames;-><init>(ILandroid/view/InsetsState;Landroid/view/DisplayInfo;Lcom/android/server/wm/utils/WmDisplayCutout;Landroid/view/RoundedCorners;Landroid/view/PrivacyIndicatorBounds;)V+]Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/DisplayFrames;
+HSPLcom/android/server/wm/DisplayFrames;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
 PLcom/android/server/wm/DisplayFrames;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-HSPLcom/android/server/wm/DisplayFrames;->update(Landroid/view/DisplayInfo;Lcom/android/server/wm/utils/WmDisplayCutout;Landroid/view/RoundedCorners;Landroid/view/PrivacyIndicatorBounds;)Z
+HSPLcom/android/server/wm/DisplayFrames;->update(Landroid/view/DisplayInfo;Lcom/android/server/wm/utils/WmDisplayCutout;Landroid/view/RoundedCorners;Landroid/view/PrivacyIndicatorBounds;)Z+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Lcom/android/server/wm/utils/WmDisplayCutout;Lcom/android/server/wm/utils/WmDisplayCutout;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/view/DisplayCutout;Landroid/view/DisplayCutout;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/PrivacyIndicatorBounds;Landroid/view/PrivacyIndicatorBounds;]Landroid/view/RoundedCorners;Landroid/view/RoundedCorners;
 PLcom/android/server/wm/DisplayHashController$$ExternalSyntheticLambda2;-><init>()V
 PLcom/android/server/wm/DisplayHashController$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/DisplayHashController$DisplayHashingServiceConnection;->-$$Nest$mrunCommandLocked(Lcom/android/server/wm/DisplayHashController$DisplayHashingServiceConnection;Lcom/android/server/wm/DisplayHashController$Command;)V
@@ -55317,21 +57134,22 @@
 HPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda11;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda12;-><init>(Lcom/android/server/wm/WindowState;I)V
 HPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda12;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda13;-><init>(Lcom/android/server/wm/DisplayPolicy;)V
+HSPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda13;-><init>(Lcom/android/server/wm/DisplayPolicy;)V
 HPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda13;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda14;-><init>(Lcom/android/internal/policy/GestureNavigationSettingsObserver;)V
-PLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda14;->run()V
+HSPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda14;-><init>(Lcom/android/internal/policy/GestureNavigationSettingsObserver;)V
+HSPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda14;->run()V
 PLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda15;-><init>(Lcom/android/internal/policy/ForceShowNavBarSettingsObserver;)V
 HSPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda15;->run()V
 HSPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda16;-><init>(Lcom/android/server/wm/DisplayPolicy;)V
-PLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda16;->run()V
+HSPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda16;->run()V
 HSPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda17;-><init>(Lcom/android/internal/policy/GestureNavigationSettingsObserver;)V
 HSPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda17;->run()V
 HSPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda18;-><init>(Lcom/android/server/wm/DisplayPolicy;)V
+HSPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda18;->run()V
 HSPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda19;-><init>(Lcom/android/internal/policy/ForceShowNavBarSettingsObserver;)V
 HSPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda19;->run()V
-HPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda1;-><init>(II[Lcom/android/internal/view/AppearanceRegion;ZILandroid/view/InsetsVisibilities;Ljava/lang/String;)V
-HPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda1;-><init>(II[Lcom/android/internal/view/AppearanceRegion;ZILandroid/view/InsetsVisibilities;Ljava/lang/String;)V
+HSPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda20;-><init>(Lcom/android/server/wm/DisplayPolicy;)V
 HPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda20;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HPLcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda21;-><init>(Lcom/android/server/wm/DisplayPolicy;Ljava/util/function/Consumer;)V
@@ -55369,31 +57187,31 @@
 HPLcom/android/server/wm/DisplayPolicy$1;->onUpOrCancel()V
 HPLcom/android/server/wm/DisplayPolicy$1;->requestTransientBarsForSideSwipe(Landroid/graphics/Region;II)V
 HSPLcom/android/server/wm/DisplayPolicy$2$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/DisplayPolicy$2;I)V
-HPLcom/android/server/wm/DisplayPolicy$2$$ExternalSyntheticLambda0;->run()V
+HSPLcom/android/server/wm/DisplayPolicy$2$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/wm/DisplayPolicy$2$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/wm/DisplayPolicy$2;I)V
 PLcom/android/server/wm/DisplayPolicy$2$$ExternalSyntheticLambda1;->run()V
 HSPLcom/android/server/wm/DisplayPolicy$2$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/wm/DisplayPolicy$2;I)V
-HPLcom/android/server/wm/DisplayPolicy$2$$ExternalSyntheticLambda2;->run()V
-HPLcom/android/server/wm/DisplayPolicy$2$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/wm/DisplayPolicy$2;JJ)V
-HPLcom/android/server/wm/DisplayPolicy$2$$ExternalSyntheticLambda3;->run()V
-PLcom/android/server/wm/DisplayPolicy$2;->$r8$lambda$eux2WAaC-W994PC8NDAvKRdCk2Q(Lcom/android/server/wm/DisplayPolicy$2;I)V
-PLcom/android/server/wm/DisplayPolicy$2;->$r8$lambda$nPwOk0VJVxha3ToEeU9gmkt9N2Q(Lcom/android/server/wm/DisplayPolicy$2;I)V
-PLcom/android/server/wm/DisplayPolicy$2;->$r8$lambda$y57RjhncehIuHWJQg-fJKXXMhKw(Lcom/android/server/wm/DisplayPolicy$2;JJ)V
+HSPLcom/android/server/wm/DisplayPolicy$2$$ExternalSyntheticLambda2;->run()V
+HSPLcom/android/server/wm/DisplayPolicy$2$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/wm/DisplayPolicy$2;JJ)V
+HSPLcom/android/server/wm/DisplayPolicy$2$$ExternalSyntheticLambda3;->run()V
+HSPLcom/android/server/wm/DisplayPolicy$2;->$r8$lambda$eux2WAaC-W994PC8NDAvKRdCk2Q(Lcom/android/server/wm/DisplayPolicy$2;I)V
+HSPLcom/android/server/wm/DisplayPolicy$2;->$r8$lambda$nPwOk0VJVxha3ToEeU9gmkt9N2Q(Lcom/android/server/wm/DisplayPolicy$2;I)V
+HSPLcom/android/server/wm/DisplayPolicy$2;->$r8$lambda$y57RjhncehIuHWJQg-fJKXXMhKw(Lcom/android/server/wm/DisplayPolicy$2;JJ)V
 PLcom/android/server/wm/DisplayPolicy$2;->$r8$lambda$yyw1tfFu0Mj-26pcNEfAxxBCzqE(Lcom/android/server/wm/DisplayPolicy$2;I)V
 HSPLcom/android/server/wm/DisplayPolicy$2;-><init>(Lcom/android/server/wm/DisplayPolicy;I)V
-HPLcom/android/server/wm/DisplayPolicy$2;->lambda$$0(I)V
+HSPLcom/android/server/wm/DisplayPolicy$2;->lambda$$0(I)V
 PLcom/android/server/wm/DisplayPolicy$2;->lambda$$1(I)V
-HPLcom/android/server/wm/DisplayPolicy$2;->lambda$$2(I)V
-HPLcom/android/server/wm/DisplayPolicy$2;->lambda$onAppTransitionStartingLocked$3(JJ)V
+HSPLcom/android/server/wm/DisplayPolicy$2;->lambda$$2(I)V
+HSPLcom/android/server/wm/DisplayPolicy$2;->lambda$onAppTransitionStartingLocked$3(JJ)V
 PLcom/android/server/wm/DisplayPolicy$2;->onAppTransitionCancelledLocked(Z)V
-HPLcom/android/server/wm/DisplayPolicy$2;->onAppTransitionFinishedLocked(Landroid/os/IBinder;)V
-HPLcom/android/server/wm/DisplayPolicy$2;->onAppTransitionPendingLocked()V
-HPLcom/android/server/wm/DisplayPolicy$2;->onAppTransitionStartingLocked(ZZJJJ)I
+HSPLcom/android/server/wm/DisplayPolicy$2;->onAppTransitionFinishedLocked(Landroid/os/IBinder;)V
+HSPLcom/android/server/wm/DisplayPolicy$2;->onAppTransitionPendingLocked()V
+HSPLcom/android/server/wm/DisplayPolicy$2;->onAppTransitionStartingLocked(ZZJJJ)I
 HSPLcom/android/server/wm/DisplayPolicy$3;-><init>(Lcom/android/server/wm/DisplayPolicy;)V
 PLcom/android/server/wm/DisplayPolicy$3;->run()V
 HSPLcom/android/server/wm/DisplayPolicy$PolicyHandler;-><init>(Lcom/android/server/wm/DisplayPolicy;Landroid/os/Looper;)V
 HSPLcom/android/server/wm/DisplayPolicy$PolicyHandler;->handleMessage(Landroid/os/Message;)V
-PLcom/android/server/wm/DisplayPolicy;->$r8$lambda$2eLcy5ThdLa7uXdulakbrZfR5aQ(Lcom/android/server/wm/DisplayPolicy;Ljava/util/function/Consumer;)V
+HPLcom/android/server/wm/DisplayPolicy;->$r8$lambda$2eLcy5ThdLa7uXdulakbrZfR5aQ(Lcom/android/server/wm/DisplayPolicy;Ljava/util/function/Consumer;)V
 HPLcom/android/server/wm/DisplayPolicy;->$r8$lambda$3shOrMjYXAxqC5IoJ2lFIdrf2gQ(Lcom/android/server/wm/Task;)Z
 HPLcom/android/server/wm/DisplayPolicy;->$r8$lambda$4FkMo0bjLTIdgDPM6sCgvcfbl94(Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V
 HPLcom/android/server/wm/DisplayPolicy;->$r8$lambda$9mJ1k6uXwfIy-6JIx5SOGD0wZ8o(Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/WindowState;Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V
@@ -55409,11 +57227,11 @@
 HPLcom/android/server/wm/DisplayPolicy;->$r8$lambda$fXdEg0huS5CISMcqMEg-QfqStos(Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V
 HPLcom/android/server/wm/DisplayPolicy;->$r8$lambda$gVW7GdxQ61-SVDApmBPK-hXtY5M(Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V
 HPLcom/android/server/wm/DisplayPolicy;->$r8$lambda$jdaoj0ULIO3S1krxMMvFZD4qx8E(Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V
-PLcom/android/server/wm/DisplayPolicy;->$r8$lambda$jzim4x4xp3Y1V9em114Ccbk1HLA(II[Lcom/android/internal/view/AppearanceRegion;ZILandroid/view/InsetsVisibilities;Ljava/lang/String;Lcom/android/server/statusbar/StatusBarManagerInternal;)V
+HPLcom/android/server/wm/DisplayPolicy;->$r8$lambda$jzim4x4xp3Y1V9em114Ccbk1HLA(II[Lcom/android/internal/view/AppearanceRegion;ZILandroid/view/InsetsVisibilities;Ljava/lang/String;Lcom/android/server/statusbar/StatusBarManagerInternal;)V
 PLcom/android/server/wm/DisplayPolicy;->$r8$lambda$okf6SsnI9qoMdVslXuespaOT654(Lcom/android/server/wm/DisplayPolicy;)V
-PLcom/android/server/wm/DisplayPolicy;->-$$Nest$fgetmContext(Lcom/android/server/wm/DisplayPolicy;)Landroid/content/Context;
+HSPLcom/android/server/wm/DisplayPolicy;->-$$Nest$fgetmContext(Lcom/android/server/wm/DisplayPolicy;)Landroid/content/Context;
 HPLcom/android/server/wm/DisplayPolicy;->-$$Nest$fgetmDisplayContent(Lcom/android/server/wm/DisplayPolicy;)Lcom/android/server/wm/DisplayContent;
-HPLcom/android/server/wm/DisplayPolicy;->-$$Nest$fgetmHandler(Lcom/android/server/wm/DisplayPolicy;)Landroid/os/Handler;
+HSPLcom/android/server/wm/DisplayPolicy;->-$$Nest$fgetmHandler(Lcom/android/server/wm/DisplayPolicy;)Landroid/os/Handler;
 PLcom/android/server/wm/DisplayPolicy;->-$$Nest$fgetmLock(Lcom/android/server/wm/DisplayPolicy;)Ljava/lang/Object;
 PLcom/android/server/wm/DisplayPolicy;->-$$Nest$fgetmNavigationBar(Lcom/android/server/wm/DisplayPolicy;)Lcom/android/server/wm/WindowState;
 PLcom/android/server/wm/DisplayPolicy;->-$$Nest$fgetmNavigationBarAlwaysShowOnSideGesture(Lcom/android/server/wm/DisplayPolicy;)Z
@@ -55422,6 +57240,7 @@
 PLcom/android/server/wm/DisplayPolicy;->-$$Nest$fgetmStatusBar(Lcom/android/server/wm/DisplayPolicy;)Lcom/android/server/wm/WindowState;
 PLcom/android/server/wm/DisplayPolicy;->-$$Nest$fgetmSystemGestures(Lcom/android/server/wm/DisplayPolicy;)Lcom/android/server/wm/SystemGesturesPointerEventListener;
 PLcom/android/server/wm/DisplayPolicy;->-$$Nest$fputmPendingPanicGestureUptime(Lcom/android/server/wm/DisplayPolicy;J)V
+PLcom/android/server/wm/DisplayPolicy;->-$$Nest$mdisablePointerLocation(Lcom/android/server/wm/DisplayPolicy;)V
 HSPLcom/android/server/wm/DisplayPolicy;->-$$Nest$menablePointerLocation(Lcom/android/server/wm/DisplayPolicy;)V
 PLcom/android/server/wm/DisplayPolicy;->-$$Nest$mfindAltBarMatchingPosition(Lcom/android/server/wm/DisplayPolicy;I)Lcom/android/server/wm/WindowState;
 PLcom/android/server/wm/DisplayPolicy;->-$$Nest$mfindTransientNavOrAltBar(Lcom/android/server/wm/DisplayPolicy;)Lcom/android/server/wm/WindowState;
@@ -55430,20 +57249,21 @@
 HSPLcom/android/server/wm/DisplayPolicy;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;)V
 HPLcom/android/server/wm/DisplayPolicy;->addStatusBarAppearanceRegionsForDimmingWindow(ILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
 HSPLcom/android/server/wm/DisplayPolicy;->addWindowLw(Lcom/android/server/wm/WindowState;Landroid/view/WindowManager$LayoutParams;)V
-HSPLcom/android/server/wm/DisplayPolicy;->adjustWindowParamsLw(Lcom/android/server/wm/WindowState;Landroid/view/WindowManager$LayoutParams;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HSPLcom/android/server/wm/DisplayPolicy;->applyKeyguardPolicy(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/DisplayPolicy;->adjustWindowParamsLw(Lcom/android/server/wm/WindowState;Landroid/view/WindowManager$LayoutParams;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/view/accessibility/AccessibilityManager;Landroid/view/accessibility/AccessibilityManager;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
+HSPLcom/android/server/wm/DisplayPolicy;->applyKeyguardPolicy(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
 HSPLcom/android/server/wm/DisplayPolicy;->applyPostLayoutPolicyLw(Lcom/android/server/wm/WindowState;Landroid/view/WindowManager$LayoutParams;Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)V+]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/wm/DisplayPolicy;->areSystemBarsForcedShownLw()Z
 HSPLcom/android/server/wm/DisplayPolicy;->beginPostLayoutPolicyLw()V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/wm/DisplayPolicy;->callStatusBarSafely(Ljava/util/function/Consumer;)V
+HSPLcom/android/server/wm/DisplayPolicy;->callStatusBarSafely(Ljava/util/function/Consumer;)V
 HPLcom/android/server/wm/DisplayPolicy;->canHideNavigationBar()Z
-HPLcom/android/server/wm/DisplayPolicy;->chooseNavigationColorWindowLw(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;I)Lcom/android/server/wm/WindowState;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
-HPLcom/android/server/wm/DisplayPolicy;->clearNavBarOpaqueFlag(I)I
-HPLcom/android/server/wm/DisplayPolicy;->configureNavBarOpacity(IZZ)I+]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
-HPLcom/android/server/wm/DisplayPolicy;->configureStatusBarOpacity(I)I+]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/DisplayPolicy;->chooseNavigationColorWindowLw(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;I)Lcom/android/server/wm/WindowState;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/DisplayPolicy;->clearNavBarOpaqueFlag(I)I
+HSPLcom/android/server/wm/DisplayPolicy;->configureNavBarOpacity(IZZ)I+]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
+HSPLcom/android/server/wm/DisplayPolicy;->configureStatusBarOpacity(I)I+]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/wm/DisplayPolicy;->convertNonDecorInsetsToStableInsets(Landroid/graphics/Rect;I)V
-HPLcom/android/server/wm/DisplayPolicy;->drawsBarBackground(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
-HPLcom/android/server/wm/DisplayPolicy;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
+PLcom/android/server/wm/DisplayPolicy;->disablePointerLocation()V
+HSPLcom/android/server/wm/DisplayPolicy;->drawsBarBackground(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/DisplayPolicy;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
 HSPLcom/android/server/wm/DisplayPolicy;->enablePointerLocation()V
 PLcom/android/server/wm/DisplayPolicy;->enforceSingleInsetsTypeCorrespondingToWindowType([I)V
 HPLcom/android/server/wm/DisplayPolicy;->findAltBarMatchingPosition(I)Lcom/android/server/wm/WindowState;
@@ -55452,7 +57272,7 @@
 HSPLcom/android/server/wm/DisplayPolicy;->finishPostLayoutPolicyLw()V+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HPLcom/android/server/wm/DisplayPolicy;->finishScreenTurningOn()Z
 HPLcom/android/server/wm/DisplayPolicy;->finishWindowsDrawn()Z
-HPLcom/android/server/wm/DisplayPolicy;->focusChangedLw(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/DisplayPolicy;->focusChangedLw(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/DisplayPolicy;->getAltBarPosition(Landroid/view/WindowManager$LayoutParams;)I
 HPLcom/android/server/wm/DisplayPolicy;->getBarContentFrameForWindow(Lcom/android/server/wm/WindowState;I)Landroid/graphics/Rect;+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/view/DisplayCutout;Landroid/view/DisplayCutout;]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLcom/android/server/wm/DisplayPolicy;->getConfigDisplayHeight(IIIILandroid/view/DisplayCutout;)I+]Landroid/view/DisplayCutout;Landroid/view/DisplayCutout;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
@@ -55464,35 +57284,36 @@
 PLcom/android/server/wm/DisplayPolicy;->getImeSourceFrameProvider()Lcom/android/internal/util/function/TriConsumer;
 HPLcom/android/server/wm/DisplayPolicy;->getInsetsPolicy()Lcom/android/server/wm/InsetsPolicy;
 HSPLcom/android/server/wm/DisplayPolicy;->getLidState()I
-HPLcom/android/server/wm/DisplayPolicy;->getNavigationBar()Lcom/android/server/wm/WindowState;
+PLcom/android/server/wm/DisplayPolicy;->getNavBarPosition()I
+HSPLcom/android/server/wm/DisplayPolicy;->getNavigationBar()Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/DisplayPolicy;->getNavigationBarFrameHeight(I)I
-HPLcom/android/server/wm/DisplayPolicy;->getNavigationBarHeight(I)I+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/DisplayPolicy;->getNavigationBarHeight(I)I+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;
 HPLcom/android/server/wm/DisplayPolicy;->getNavigationBarWidth(III)I
 HSPLcom/android/server/wm/DisplayPolicy;->getNonDecorDisplayHeight(IILandroid/view/DisplayCutout;)I+]Landroid/view/DisplayCutout;Landroid/view/DisplayCutout;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
 HSPLcom/android/server/wm/DisplayPolicy;->getNonDecorDisplayWidth(IIIILandroid/view/DisplayCutout;)I+]Landroid/view/DisplayCutout;Landroid/view/DisplayCutout;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
 HSPLcom/android/server/wm/DisplayPolicy;->getNonDecorInsetsLw(ILandroid/view/DisplayCutout;Landroid/graphics/Rect;)V
-HPLcom/android/server/wm/DisplayPolicy;->getNotificationShade()Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/DisplayPolicy;->getNotificationShade()Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/DisplayPolicy;->getRefreshRatePolicy()Lcom/android/server/wm/RefreshRatePolicy;
-PLcom/android/server/wm/DisplayPolicy;->getScreenOnListener()Lcom/android/server/policy/WindowManagerPolicy$ScreenOnListener;
+HSPLcom/android/server/wm/DisplayPolicy;->getScreenOnListener()Lcom/android/server/policy/WindowManagerPolicy$ScreenOnListener;
 PLcom/android/server/wm/DisplayPolicy;->getStableInsetsLw(ILandroid/view/DisplayCutout;Landroid/graphics/Rect;)V
-HPLcom/android/server/wm/DisplayPolicy;->getStatusBar()Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/DisplayPolicy;->getStatusBar()Lcom/android/server/wm/WindowState;
 HPLcom/android/server/wm/DisplayPolicy;->getStatusBarHeight(Lcom/android/server/wm/DisplayFrames;)I
 HSPLcom/android/server/wm/DisplayPolicy;->getStatusBarHeightForRotation(I)I
-HPLcom/android/server/wm/DisplayPolicy;->getStatusBarManagerInternal()Lcom/android/server/statusbar/StatusBarManagerInternal;
+HSPLcom/android/server/wm/DisplayPolicy;->getStatusBarManagerInternal()Lcom/android/server/statusbar/StatusBarManagerInternal;
 HSPLcom/android/server/wm/DisplayPolicy;->getSystemUiContext()Landroid/content/Context;
-HPLcom/android/server/wm/DisplayPolicy;->getTopFullscreenOpaqueWindow()Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/DisplayPolicy;->getTopFullscreenOpaqueWindow()Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/DisplayPolicy;->getWindowCornerRadius()F
 HSPLcom/android/server/wm/DisplayPolicy;->hasNavigationBar()Z
 HPLcom/android/server/wm/DisplayPolicy;->hasSideGestures()Z
 HSPLcom/android/server/wm/DisplayPolicy;->hasStatusBar()Z
-HPLcom/android/server/wm/DisplayPolicy;->intersectsAnyInsets(Landroid/graphics/Rect;Landroid/view/InsetsState;I)Z+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLcom/android/server/wm/DisplayPolicy;->intersectsAnyInsets(Landroid/graphics/Rect;Landroid/view/InsetsState;I)Z+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Ljava/lang/Integer;Ljava/lang/Integer;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/wm/DisplayPolicy;->isAwake()Z
 HPLcom/android/server/wm/DisplayPolicy;->isCarDockEnablesAccelerometer()Z
 HPLcom/android/server/wm/DisplayPolicy;->isDeskDockEnablesAccelerometer()Z
-HPLcom/android/server/wm/DisplayPolicy;->isForceShowNavigationBarEnabled()Z
-HPLcom/android/server/wm/DisplayPolicy;->isFullyTransparentAllowed(Lcom/android/server/wm/WindowState;I)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
+HSPLcom/android/server/wm/DisplayPolicy;->isForceShowNavigationBarEnabled()Z
+HSPLcom/android/server/wm/DisplayPolicy;->isFullyTransparentAllowed(Lcom/android/server/wm/WindowState;I)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
 HPLcom/android/server/wm/DisplayPolicy;->isHdmiPlugged()Z
-HPLcom/android/server/wm/DisplayPolicy;->isImmersiveMode(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/InsetsPolicy;Lcom/android/server/wm/InsetsPolicy;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
+HSPLcom/android/server/wm/DisplayPolicy;->isImmersiveMode(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/InsetsPolicy;Lcom/android/server/wm/InsetsPolicy;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
 HSPLcom/android/server/wm/DisplayPolicy;->isKeyguardDrawComplete()Z
 HSPLcom/android/server/wm/DisplayPolicy;->isKeyguardOccluded()Z
 HSPLcom/android/server/wm/DisplayPolicy;->isKeyguardShowing()Z
@@ -55509,39 +57330,39 @@
 HPLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$1(Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/DisplayCutout;Landroid/view/DisplayCutout;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
 HPLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$10(Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V
 HPLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$11(Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V
-HPLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$2(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/graphics/Rect;Landroid/graphics/Rect;
-PLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$3(Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$2(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
+HPLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$3(Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V
 HPLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$4(Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V
 HPLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$5(Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V
 HPLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$6(Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V
 HPLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$7(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V
 HPLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$8(Lcom/android/server/wm/WindowState;ILcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V
-HPLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$9(Lcom/android/server/wm/WindowState;ILcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/DisplayPolicy;->lambda$addWindowLw$9(Lcom/android/server/wm/WindowState;ILcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HPLcom/android/server/wm/DisplayPolicy;->lambda$callStatusBarSafely$16(Ljava/util/function/Consumer;)V
-HPLcom/android/server/wm/DisplayPolicy;->lambda$getImeSourceFrameProvider$12(Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/DisplayPolicy;->lambda$getImeSourceFrameProvider$12(Lcom/android/server/wm/DisplayFrames;Lcom/android/server/wm/WindowContainer;Landroid/graphics/Rect;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
 PLcom/android/server/wm/DisplayPolicy;->lambda$new$0()V
-PLcom/android/server/wm/DisplayPolicy;->lambda$notifyDisplayReady$13()V
+HPLcom/android/server/wm/DisplayPolicy;->lambda$notifyDisplayReady$13()V
 PLcom/android/server/wm/DisplayPolicy;->lambda$updateSystemBarAttributes$14(IILjava/lang/String;Lcom/android/server/statusbar/StatusBarManagerInternal;)V
-PLcom/android/server/wm/DisplayPolicy;->lambda$updateSystemBarAttributes$15(II[Lcom/android/internal/view/AppearanceRegion;ZILandroid/view/InsetsVisibilities;Ljava/lang/String;Lcom/android/server/statusbar/StatusBarManagerInternal;)V
+HPLcom/android/server/wm/DisplayPolicy;->lambda$updateSystemBarAttributes$15(II[Lcom/android/internal/view/AppearanceRegion;ZILandroid/view/InsetsVisibilities;Ljava/lang/String;Lcom/android/server/statusbar/StatusBarManagerInternal;)V
 HPLcom/android/server/wm/DisplayPolicy;->lambda$updateSystemBarsLw$17(Lcom/android/server/wm/Task;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;
-HSPLcom/android/server/wm/DisplayPolicy;->layoutWindowLw(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;Lcom/android/server/wm/DisplayFrames;)V+]Landroid/view/WindowLayout;Landroid/view/WindowLayout;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/DisplayPolicy;->layoutWindowLw(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;Lcom/android/server/wm/DisplayFrames;)V+]Landroid/view/WindowLayout;Landroid/view/WindowLayout;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;
 PLcom/android/server/wm/DisplayPolicy;->navigationBarCanMove()Z
-HSPLcom/android/server/wm/DisplayPolicy;->navigationBarPosition(I)I+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
-PLcom/android/server/wm/DisplayPolicy;->notifyDisplayReady()V
+HSPLcom/android/server/wm/DisplayPolicy;->navigationBarPosition(I)I+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;
+HPLcom/android/server/wm/DisplayPolicy;->notifyDisplayReady()V
 HSPLcom/android/server/wm/DisplayPolicy;->onConfigurationChanged()V
 HSPLcom/android/server/wm/DisplayPolicy;->onDisplayInfoChanged(Landroid/view/DisplayInfo;)V
 PLcom/android/server/wm/DisplayPolicy;->onLockTaskStateChangedLw(I)V
 PLcom/android/server/wm/DisplayPolicy;->onOverlayChangedLw()V
 HPLcom/android/server/wm/DisplayPolicy;->onPowerKeyDown(Z)V
-PLcom/android/server/wm/DisplayPolicy;->onSystemUiSettingsChanged()Z
+HSPLcom/android/server/wm/DisplayPolicy;->onSystemUiSettingsChanged()Z
 HPLcom/android/server/wm/DisplayPolicy;->release()V
 HPLcom/android/server/wm/DisplayPolicy;->removeWindowLw(Lcom/android/server/wm/WindowState;)V
 HPLcom/android/server/wm/DisplayPolicy;->requestTransientBars(Lcom/android/server/wm/WindowState;Z)V
-PLcom/android/server/wm/DisplayPolicy;->resetSystemBarAttributes()V
+HSPLcom/android/server/wm/DisplayPolicy;->resetSystemBarAttributes()V
 HPLcom/android/server/wm/DisplayPolicy;->screenTurnedOff()V
 HSPLcom/android/server/wm/DisplayPolicy;->screenTurnedOn(Lcom/android/server/policy/WindowManagerPolicy$ScreenOnListener;)V
 HPLcom/android/server/wm/DisplayPolicy;->selectAnimation(Lcom/android/server/wm/WindowState;I)I
-HPLcom/android/server/wm/DisplayPolicy;->setAwake(Z)V
+HSPLcom/android/server/wm/DisplayPolicy;->setAwake(Z)V
 PLcom/android/server/wm/DisplayPolicy;->setDockMode(I)V
 HSPLcom/android/server/wm/DisplayPolicy;->setDropInputModePolicy(Lcom/android/server/wm/WindowState;Landroid/view/WindowManager$LayoutParams;)V
 HSPLcom/android/server/wm/DisplayPolicy;->setHdmiPlugged(ZZ)V
@@ -55549,18 +57370,18 @@
 HSPLcom/android/server/wm/DisplayPolicy;->setPointerLocationEnabled(Z)V
 HPLcom/android/server/wm/DisplayPolicy;->shouldAttachNavBarToAppDuringTransition()Z
 HSPLcom/android/server/wm/DisplayPolicy;->shouldBeHiddenByKeyguard(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
-PLcom/android/server/wm/DisplayPolicy;->simulateLayoutDisplay(Lcom/android/server/wm/DisplayFrames;)V
+HSPLcom/android/server/wm/DisplayPolicy;->simulateLayoutDisplay(Lcom/android/server/wm/DisplayFrames;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Landroid/view/InsetsState;Landroid/view/InsetsState;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Landroid/view/WindowLayout;Landroid/view/WindowLayout;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/DisplayPolicy;->supportsPointerLocation()Z
 PLcom/android/server/wm/DisplayPolicy;->switchUser()V
 HSPLcom/android/server/wm/DisplayPolicy;->systemReady()V
 PLcom/android/server/wm/DisplayPolicy;->takeScreenshot(II)V
-HPLcom/android/server/wm/DisplayPolicy;->topAppHidesStatusBar()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/DisplayPolicy;->topAppHidesStatusBar()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/DisplayPolicy;->updateConfigurationAndScreenSizeDependentBehaviors()V
 HSPLcom/android/server/wm/DisplayPolicy;->updateCurrentUserResources()V
 PLcom/android/server/wm/DisplayPolicy;->updateForceShowNavBarSettings()V
-HPLcom/android/server/wm/DisplayPolicy;->updateLightNavigationBarLw(ILcom/android/server/wm/WindowState;)I
-HSPLcom/android/server/wm/DisplayPolicy;->updateSystemBarAttributes()V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/view/InsetsVisibilities;Landroid/view/InsetsVisibilities;]Lcom/android/server/wm/ImmersiveModeConfirmation;Lcom/android/server/wm/ImmersiveModeConfirmation;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/input/InputManagerService;Lcom/android/server/input/InputManagerService;
-HPLcom/android/server/wm/DisplayPolicy;->updateSystemBarsLw(Lcom/android/server/wm/WindowState;I)I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/statusbar/StatusBarManagerInternal;Lcom/android/server/statusbar/StatusBarManagerService$1;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/ImmersiveModeConfirmation;Lcom/android/server/wm/ImmersiveModeConfirmation;]Lcom/android/server/wm/InsetsPolicy;Lcom/android/server/wm/InsetsPolicy;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
+HSPLcom/android/server/wm/DisplayPolicy;->updateLightNavigationBarLw(ILcom/android/server/wm/WindowState;)I
+HSPLcom/android/server/wm/DisplayPolicy;->updateSystemBarAttributes()V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/view/InsetsVisibilities;Landroid/view/InsetsVisibilities;]Lcom/android/server/input/InputManagerService;Lcom/android/server/input/InputManagerService;]Lcom/android/server/wm/ImmersiveModeConfirmation;Lcom/android/server/wm/ImmersiveModeConfirmation;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/DisplayPolicy;->updateSystemBarsLw(Lcom/android/server/wm/WindowState;I)I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/statusbar/StatusBarManagerInternal;Lcom/android/server/statusbar/StatusBarManagerService$1;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/wm/ImmersiveModeConfirmation;Lcom/android/server/wm/ImmersiveModeConfirmation;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/InsetsPolicy;Lcom/android/server/wm/InsetsPolicy;]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/DisplayPolicy;->validateAddingWindowLw(Landroid/view/WindowManager$LayoutParams;II)I
 PLcom/android/server/wm/DisplayRotation$$ExternalSyntheticLambda0;-><init>()V
 PLcom/android/server/wm/DisplayRotation$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
@@ -55572,7 +57393,7 @@
 PLcom/android/server/wm/DisplayRotation$2$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/DisplayRotation$2;->$r8$lambda$HRnOc5B33L_wXNCdOaZiBpzHkBk(Ljava/lang/Object;ILandroid/window/WindowContainerTransaction;)V
 HSPLcom/android/server/wm/DisplayRotation$2;-><init>(Lcom/android/server/wm/DisplayRotation;)V
-PLcom/android/server/wm/DisplayRotation$2;->continueRotateDisplay(ILandroid/window/WindowContainerTransaction;)V
+HPLcom/android/server/wm/DisplayRotation$2;->continueRotateDisplay(ILandroid/window/WindowContainerTransaction;)V
 PLcom/android/server/wm/DisplayRotation$2;->lambda$continueRotateDisplay$0(Ljava/lang/Object;ILandroid/window/WindowContainerTransaction;)V
 HSPLcom/android/server/wm/DisplayRotation$OrientationListener;-><init>(Lcom/android/server/wm/DisplayRotation;Landroid/content/Context;Landroid/os/Handler;)V
 HSPLcom/android/server/wm/DisplayRotation$OrientationListener;->disable()V
@@ -55587,10 +57408,10 @@
 HPLcom/android/server/wm/DisplayRotation$RotationHistory$Record;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
 HSPLcom/android/server/wm/DisplayRotation$RotationHistory;-><init>()V
 HSPLcom/android/server/wm/DisplayRotation$RotationHistory;-><init>(Lcom/android/server/wm/DisplayRotation$RotationHistory-IA;)V
-PLcom/android/server/wm/DisplayRotation$RotationHistory;->addRecord(Lcom/android/server/wm/DisplayRotation;I)V
+HPLcom/android/server/wm/DisplayRotation$RotationHistory;->addRecord(Lcom/android/server/wm/DisplayRotation;I)V
 HSPLcom/android/server/wm/DisplayRotation$SettingsObserver;-><init>(Lcom/android/server/wm/DisplayRotation;Landroid/os/Handler;)V
 HSPLcom/android/server/wm/DisplayRotation$SettingsObserver;->observe()V
-PLcom/android/server/wm/DisplayRotation$SettingsObserver;->onChange(Z)V
+HSPLcom/android/server/wm/DisplayRotation$SettingsObserver;->onChange(Z)V
 PLcom/android/server/wm/DisplayRotation;->$r8$lambda$7G-70Gj4J4Dw6ps1NVojUdrYpcQ(Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/DisplayRotation;->$r8$lambda$gTLjubg1x23KYG4k_brWSQniMmo(Lcom/android/server/wm/WindowState;)Z
 PLcom/android/server/wm/DisplayRotation;->-$$Nest$fgetmCameraRotationMode(Lcom/android/server/wm/DisplayRotation;)I
@@ -55609,34 +57430,34 @@
 HSPLcom/android/server/wm/DisplayRotation;->-$$Nest$mupdateSettings(Lcom/android/server/wm/DisplayRotation;)Z
 HSPLcom/android/server/wm/DisplayRotation;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;)V
 HSPLcom/android/server/wm/DisplayRotation;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayWindowSettings;Landroid/content/Context;Ljava/lang/Object;)V
-PLcom/android/server/wm/DisplayRotation;->allowAllRotationsToString(I)Ljava/lang/String;
+HSPLcom/android/server/wm/DisplayRotation;->allowAllRotationsToString(I)Ljava/lang/String;
 PLcom/android/server/wm/DisplayRotation;->applyCurrentRotation(I)V
 PLcom/android/server/wm/DisplayRotation;->canRotateSeamlessly(II)Z
 PLcom/android/server/wm/DisplayRotation;->cancelSeamlessRotation()V
 HSPLcom/android/server/wm/DisplayRotation;->configure(II)V
 HPLcom/android/server/wm/DisplayRotation;->continueRotation(ILandroid/window/WindowContainerTransaction;)V
-HPLcom/android/server/wm/DisplayRotation;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
-PLcom/android/server/wm/DisplayRotation;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+HSPLcom/android/server/wm/DisplayRotation;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
+HPLcom/android/server/wm/DisplayRotation;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 PLcom/android/server/wm/DisplayRotation;->freezeRotation(I)V
 PLcom/android/server/wm/DisplayRotation;->getAllowAllRotations()I
-PLcom/android/server/wm/DisplayRotation;->getCurrentAppOrientation()I
+HPLcom/android/server/wm/DisplayRotation;->getCurrentAppOrientation()I
 HSPLcom/android/server/wm/DisplayRotation;->getDisplayPolicy()Lcom/android/server/wm/DisplayPolicy;
 HSPLcom/android/server/wm/DisplayRotation;->getLandscapeRotation()I
 HSPLcom/android/server/wm/DisplayRotation;->getLastOrientation()I
-PLcom/android/server/wm/DisplayRotation;->getOrientationListener()Lcom/android/server/wm/WindowOrientationListener;
+HPLcom/android/server/wm/DisplayRotation;->getOrientationListener()Lcom/android/server/wm/WindowOrientationListener;
 HSPLcom/android/server/wm/DisplayRotation;->getPortraitRotation()I
 HSPLcom/android/server/wm/DisplayRotation;->getRotation()I
 HSPLcom/android/server/wm/DisplayRotation;->getSeascapeRotation()I
 HSPLcom/android/server/wm/DisplayRotation;->getUpsideDownRotation()I
-PLcom/android/server/wm/DisplayRotation;->getUserRotation()I
-PLcom/android/server/wm/DisplayRotation;->getUserRotationMode()I
+HPLcom/android/server/wm/DisplayRotation;->getUserRotation()I
+HPLcom/android/server/wm/DisplayRotation;->getUserRotationMode()I
 PLcom/android/server/wm/DisplayRotation;->hasSeamlessRotatingWindow()Z
 HPLcom/android/server/wm/DisplayRotation;->isAnyPortrait(I)Z
 HSPLcom/android/server/wm/DisplayRotation;->isFixedToUserRotation()Z
 PLcom/android/server/wm/DisplayRotation;->isLandscapeOrSeascape(I)Z
 PLcom/android/server/wm/DisplayRotation;->isRotatingSeamlessly()Z
 HPLcom/android/server/wm/DisplayRotation;->isRotationChoicePossible(I)Z
-PLcom/android/server/wm/DisplayRotation;->isRotationFrozen()Z
+HPLcom/android/server/wm/DisplayRotation;->isRotationFrozen()Z
 PLcom/android/server/wm/DisplayRotation;->isValidRotationChoice(I)Z
 HSPLcom/android/server/wm/DisplayRotation;->isWaitingForRemoteRotation()Z
 PLcom/android/server/wm/DisplayRotation;->lambda$cancelSeamlessRotation$0(Lcom/android/server/wm/WindowState;)V
@@ -55644,7 +57465,7 @@
 HPLcom/android/server/wm/DisplayRotation;->markForSeamlessRotation(Lcom/android/server/wm/WindowState;Z)V
 HPLcom/android/server/wm/DisplayRotation;->needSensorRunning()Z
 PLcom/android/server/wm/DisplayRotation;->needsUpdate()Z
-PLcom/android/server/wm/DisplayRotation;->onUserSwitch()V
+HSPLcom/android/server/wm/DisplayRotation;->onUserSwitch()V
 PLcom/android/server/wm/DisplayRotation;->pause()V
 PLcom/android/server/wm/DisplayRotation;->prepareNormalRotationAnimation()V
 PLcom/android/server/wm/DisplayRotation;->prepareSeamlessRotation()V
@@ -55653,10 +57474,10 @@
 HSPLcom/android/server/wm/DisplayRotation;->restoreSettings(III)V
 PLcom/android/server/wm/DisplayRotation;->resume()V
 HPLcom/android/server/wm/DisplayRotation;->rotationForOrientation(II)I
-PLcom/android/server/wm/DisplayRotation;->selectRotationAnimation()Lcom/android/server/wm/DisplayRotation$RotationAnimationPair;
+HPLcom/android/server/wm/DisplayRotation;->selectRotationAnimation()Lcom/android/server/wm/DisplayRotation$RotationAnimationPair;
 PLcom/android/server/wm/DisplayRotation;->sendProposedRotationChangeToStatusBarInternal(IZ)V
 PLcom/android/server/wm/DisplayRotation;->setUserRotation(II)V
-PLcom/android/server/wm/DisplayRotation;->shouldRotateSeamlessly(IIZ)Z
+HPLcom/android/server/wm/DisplayRotation;->shouldRotateSeamlessly(IIZ)Z
 HPLcom/android/server/wm/DisplayRotation;->startRemoteRotation(II)V
 PLcom/android/server/wm/DisplayRotation;->thawRotation()V
 HSPLcom/android/server/wm/DisplayRotation;->updateOrientation(IZ)Z
@@ -55673,7 +57494,7 @@
 HSPLcom/android/server/wm/DisplayWindowListenerController;-><init>(Lcom/android/server/wm/WindowManagerService;)V
 HSPLcom/android/server/wm/DisplayWindowListenerController;->dispatchDisplayAdded(Lcom/android/server/wm/DisplayContent;)V
 HSPLcom/android/server/wm/DisplayWindowListenerController;->dispatchDisplayChanged(Lcom/android/server/wm/DisplayContent;Landroid/content/res/Configuration;)V
-PLcom/android/server/wm/DisplayWindowListenerController;->dispatchDisplayRemoved(Lcom/android/server/wm/DisplayContent;)V
+HPLcom/android/server/wm/DisplayWindowListenerController;->dispatchDisplayRemoved(Lcom/android/server/wm/DisplayContent;)V
 PLcom/android/server/wm/DisplayWindowListenerController;->dispatchFixedRotationFinished(Lcom/android/server/wm/DisplayContent;)V
 PLcom/android/server/wm/DisplayWindowListenerController;->dispatchFixedRotationStarted(Lcom/android/server/wm/DisplayContent;I)V
 HSPLcom/android/server/wm/DisplayWindowListenerController;->lambda$registerListener$0(Landroid/util/IntArray;Lcom/android/server/wm/DisplayContent;)V
@@ -55684,13 +57505,13 @@
 HSPLcom/android/server/wm/DisplayWindowPolicyControllerHelper;-><init>(Lcom/android/server/wm/DisplayContent;)V
 PLcom/android/server/wm/DisplayWindowPolicyControllerHelper;->canActivityBeLaunched(Landroid/content/pm/ActivityInfo;IIZ)Z
 PLcom/android/server/wm/DisplayWindowPolicyControllerHelper;->canContainActivities(Ljava/util/List;I)Z
-PLcom/android/server/wm/DisplayWindowPolicyControllerHelper;->canShowTasksInRecents()Z
-PLcom/android/server/wm/DisplayWindowPolicyControllerHelper;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
-HPLcom/android/server/wm/DisplayWindowPolicyControllerHelper;->hasController()Z
+HPLcom/android/server/wm/DisplayWindowPolicyControllerHelper;->canShowTasksInRecents()Z
+HSPLcom/android/server/wm/DisplayWindowPolicyControllerHelper;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
+HSPLcom/android/server/wm/DisplayWindowPolicyControllerHelper;->hasController()Z
 PLcom/android/server/wm/DisplayWindowPolicyControllerHelper;->isWindowingModeSupported(I)Z
-HPLcom/android/server/wm/DisplayWindowPolicyControllerHelper;->keepActivityOnWindowFlagsChanged(Landroid/content/pm/ActivityInfo;II)Z
-PLcom/android/server/wm/DisplayWindowPolicyControllerHelper;->lambda$onRunningActivityChanged$0([ZLandroid/util/ArraySet;Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/DisplayWindowPolicyControllerHelper;->onRunningActivityChanged()V
+HSPLcom/android/server/wm/DisplayWindowPolicyControllerHelper;->keepActivityOnWindowFlagsChanged(Landroid/content/pm/ActivityInfo;II)Z
+HPLcom/android/server/wm/DisplayWindowPolicyControllerHelper;->lambda$onRunningActivityChanged$0([ZLandroid/util/ArraySet;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/DisplayWindowPolicyControllerHelper;->onRunningActivityChanged()V
 HSPLcom/android/server/wm/DisplayWindowSettings$SettingsProvider$SettingsEntry;-><init>()V
 HSPLcom/android/server/wm/DisplayWindowSettings$SettingsProvider$SettingsEntry;-><init>(Lcom/android/server/wm/DisplayWindowSettings$SettingsProvider$SettingsEntry;)V
 PLcom/android/server/wm/DisplayWindowSettings$SettingsProvider$SettingsEntry;->isEmpty()Z
@@ -55748,6 +57569,7 @@
 PLcom/android/server/wm/DragAndDropPermissionsHandler;->doTake(Landroid/os/IBinder;)V
 PLcom/android/server/wm/DragAndDropPermissionsHandler;->finalize()V
 PLcom/android/server/wm/DragAndDropPermissionsHandler;->getUriPermissionOwnerForActivity(Landroid/os/IBinder;)Landroid/os/IBinder;
+PLcom/android/server/wm/DragAndDropPermissionsHandler;->release()V
 PLcom/android/server/wm/DragAndDropPermissionsHandler;->take(Landroid/os/IBinder;)V
 HSPLcom/android/server/wm/DragDropController$1;-><init>(Lcom/android/server/wm/DragDropController;)V
 HSPLcom/android/server/wm/DragDropController$DragHandler;-><init>(Lcom/android/server/wm/DragDropController;Lcom/android/server/wm/WindowManagerService;Landroid/os/Looper;)V
@@ -55757,7 +57579,7 @@
 HSPLcom/android/server/wm/DragDropController;->dragDropActiveLocked()Z+]Lcom/android/server/wm/DragState;Lcom/android/server/wm/DragState;
 PLcom/android/server/wm/DragDropController;->dragRecipientEntered(Landroid/view/IWindow;)V
 PLcom/android/server/wm/DragDropController;->dragRecipientExited(Landroid/view/IWindow;)V
-PLcom/android/server/wm/DragDropController;->handleMotionEvent(ZFF)V
+HPLcom/android/server/wm/DragDropController;->handleMotionEvent(ZFF)V
 PLcom/android/server/wm/DragDropController;->onDragStateClosedLocked(Lcom/android/server/wm/DragState;)V
 HPLcom/android/server/wm/DragDropController;->performDrag(IILandroid/view/IWindow;ILandroid/view/SurfaceControl;IFFFFLandroid/content/ClipData;)Landroid/os/IBinder;
 HPLcom/android/server/wm/DragDropController;->reportDropResult(Landroid/view/IWindow;Z)V
@@ -55766,7 +57588,7 @@
 PLcom/android/server/wm/DragDropController;->sendHandlerMessage(ILjava/lang/Object;)V
 PLcom/android/server/wm/DragDropController;->sendTimeoutMessage(ILjava/lang/Object;J)V
 PLcom/android/server/wm/DragInputEventReceiver;-><init>(Landroid/view/InputChannel;Landroid/os/Looper;Lcom/android/server/wm/DragDropController;)V
-PLcom/android/server/wm/DragInputEventReceiver;->onInputEvent(Landroid/view/InputEvent;)V
+HPLcom/android/server/wm/DragInputEventReceiver;->onInputEvent(Landroid/view/InputEvent;)V
 PLcom/android/server/wm/DragResizeMode;->isModeAllowedForRootTask(Lcom/android/server/wm/Task;I)Z
 PLcom/android/server/wm/DragState$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/DragState;FFZ)V
 HPLcom/android/server/wm/DragState$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
@@ -55820,6 +57642,7 @@
 PLcom/android/server/wm/EmbeddedWindowController$$ExternalSyntheticLambda0;->binderDied()V
 HPLcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;-><init>(Lcom/android/server/wm/Session;Lcom/android/server/wm/WindowManagerService;Landroid/view/IWindow;Lcom/android/server/wm/WindowState;IIIILandroid/os/IBinder;Ljava/lang/String;)V
 PLcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;->canScreenshotIme()Z
+PLcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;->dumpProto(Landroid/util/proto/ProtoOutputStream;JI)V
 PLcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;->getActivityRecord()Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;->getApplicationHandle()Landroid/view/InputApplicationHandle;
 PLcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;->getDisplayContent()Lcom/android/server/wm/DisplayContent;
@@ -55830,11 +57653,13 @@
 PLcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;->getWindowState()Lcom/android/server/wm/WindowState;
 PLcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;->getWindowToken()Landroid/os/IBinder;
 PLcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;->handleTap(Z)V
+PLcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;->handleTapOutsideFocusInsideSelf()V
 PLcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;->handleTapOutsideFocusOutsideSelf()V
 PLcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;->isInputMethodClientFocus(II)Z
 PLcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;->onRemoved()V
 PLcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;->openInputChannel()Landroid/view/InputChannel;
 PLcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;->receiveFocusFromTapOutside()Z
+PLcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;->setIsOverlay()V
 PLcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;->shouldControlIme()Z
 PLcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;->toString()Ljava/lang/String;
 PLcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;->unfreezeInsetsAfterStartInput()V
@@ -55848,33 +57673,34 @@
 HPLcom/android/server/wm/EmbeddedWindowController;->onActivityRemoved(Lcom/android/server/wm/ActivityRecord;)V
 HPLcom/android/server/wm/EmbeddedWindowController;->onWindowRemoved(Lcom/android/server/wm/WindowState;)V
 HPLcom/android/server/wm/EmbeddedWindowController;->remove(Landroid/view/IWindow;)V
+PLcom/android/server/wm/EmbeddedWindowController;->setIsOverlay(Landroid/os/IBinder;)V
 PLcom/android/server/wm/EmbeddedWindowController;->updateProcessController(Lcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;)V
 HSPLcom/android/server/wm/EnsureActivitiesVisibleHelper;-><init>(Lcom/android/server/wm/TaskFragment;)V
-PLcom/android/server/wm/EnsureActivitiesVisibleHelper;->makeVisibleAndRestartIfNeeded(Lcom/android/server/wm/ActivityRecord;IZZLcom/android/server/wm/ActivityRecord;)V
-HSPLcom/android/server/wm/EnsureActivitiesVisibleHelper;->process(Lcom/android/server/wm/ActivityRecord;IZZ)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;]Lcom/android/server/wm/EnsureActivitiesVisibleHelper;Lcom/android/server/wm/EnsureActivitiesVisibleHelper;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;,Ljava/util/ArrayList;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HSPLcom/android/server/wm/EnsureActivitiesVisibleHelper;->reset(Lcom/android/server/wm/ActivityRecord;IZZ)V+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/EnsureActivitiesVisibleHelper;->setActivityVisibilityState(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Z)V+]Lcom/android/server/wm/EnsureActivitiesVisibleHelper;Lcom/android/server/wm/EnsureActivitiesVisibleHelper;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/EnsureActivitiesVisibleHelper;->makeVisibleAndRestartIfNeeded(Lcom/android/server/wm/ActivityRecord;IZZLcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/EnsureActivitiesVisibleHelper;->process(Lcom/android/server/wm/ActivityRecord;IZZ)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/EnsureActivitiesVisibleHelper;Lcom/android/server/wm/EnsureActivitiesVisibleHelper;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;,Ljava/util/ArrayList;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/EnsureActivitiesVisibleHelper;->reset(Lcom/android/server/wm/ActivityRecord;IZZ)V+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
+HSPLcom/android/server/wm/EnsureActivitiesVisibleHelper;->setActivityVisibilityState(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Z)V+]Lcom/android/server/wm/EnsureActivitiesVisibleHelper;Lcom/android/server/wm/EnsureActivitiesVisibleHelper;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/EventLogTags;->writeWmAddToStopping(IILjava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/wm/EventLogTags;->writeWmBootAnimationDone(J)V
-HPLcom/android/server/wm/EventLogTags;->writeWmCreateTask(II)V
+HSPLcom/android/server/wm/EventLogTags;->writeWmCreateTask(II)V
 HPLcom/android/server/wm/EventLogTags;->writeWmDestroyActivity(IIILjava/lang/String;Ljava/lang/String;)V
 HPLcom/android/server/wm/EventLogTags;->writeWmFailedToPause(IILjava/lang/String;Ljava/lang/String;)V
 HPLcom/android/server/wm/EventLogTags;->writeWmFinishActivity(IIILjava/lang/String;Ljava/lang/String;)V
 HPLcom/android/server/wm/EventLogTags;->writeWmFocusedRootTask(IIIILjava/lang/String;)V
 HPLcom/android/server/wm/EventLogTags;->writeWmPauseActivity(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
 PLcom/android/server/wm/EventLogTags;->writeWmRelaunchActivity(IIILjava/lang/String;)V
-PLcom/android/server/wm/EventLogTags;->writeWmRelaunchResumeActivity(IIILjava/lang/String;)V
-HPLcom/android/server/wm/EventLogTags;->writeWmRestartActivity(IIILjava/lang/String;)V
+HPLcom/android/server/wm/EventLogTags;->writeWmRelaunchResumeActivity(IIILjava/lang/String;)V
+HSPLcom/android/server/wm/EventLogTags;->writeWmRestartActivity(IIILjava/lang/String;)V
 HPLcom/android/server/wm/EventLogTags;->writeWmResumeActivity(IIILjava/lang/String;)V
 HPLcom/android/server/wm/EventLogTags;->writeWmSetKeyguardShown(IIIILjava/lang/String;)V
-HPLcom/android/server/wm/EventLogTags;->writeWmSetResumedActivity(ILjava/lang/String;Ljava/lang/String;)V
+HSPLcom/android/server/wm/EventLogTags;->writeWmSetResumedActivity(ILjava/lang/String;Ljava/lang/String;)V
 HPLcom/android/server/wm/EventLogTags;->writeWmStopActivity(IILjava/lang/String;)V
 HSPLcom/android/server/wm/EventLogTags;->writeWmTaskCreated(II)V
 HSPLcom/android/server/wm/EventLogTags;->writeWmTaskMoved(III)V
 HSPLcom/android/server/wm/EventLogTags;->writeWmTaskRemoved(ILjava/lang/String;)V
-HPLcom/android/server/wm/EventLogTags;->writeWmTaskToFront(II)V
+HSPLcom/android/server/wm/EventLogTags;->writeWmTaskToFront(II)V
 HPLcom/android/server/wm/FadeAnimationController$1;-><init>(Lcom/android/server/wm/FadeAnimationController;Landroid/view/animation/Animation;)V
-HPLcom/android/server/wm/FadeAnimationController$1;->apply(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;J)V
+HPLcom/android/server/wm/FadeAnimationController$1;->apply(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;J)V+]Landroid/view/animation/Transformation;Landroid/view/animation/Transformation;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/view/animation/Animation;Landroid/view/animation/AnimationSet;,Landroid/view/animation/AlphaAnimation;
 PLcom/android/server/wm/FadeAnimationController$1;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/wm/FadeAnimationController$1;->dumpDebugInner(Landroid/util/proto/ProtoOutputStream;)V
 PLcom/android/server/wm/FadeAnimationController$1;->getDuration()J
@@ -55882,7 +57708,7 @@
 PLcom/android/server/wm/FadeAnimationController$FadeAnimationAdapter;->shouldDeferAnimationFinish(Ljava/lang/Runnable;)Z
 HPLcom/android/server/wm/FadeAnimationController;-><init>(Lcom/android/server/wm/DisplayContent;)V
 PLcom/android/server/wm/FadeAnimationController;->createAdapter(Lcom/android/server/wm/LocalAnimationAdapter$AnimationSpec;ZLcom/android/server/wm/WindowToken;)Lcom/android/server/wm/FadeAnimationController$FadeAnimationAdapter;
-PLcom/android/server/wm/FadeAnimationController;->createAnimationSpec(Landroid/view/animation/Animation;)Lcom/android/server/wm/LocalAnimationAdapter$AnimationSpec;
+HPLcom/android/server/wm/FadeAnimationController;->createAnimationSpec(Landroid/view/animation/Animation;)Lcom/android/server/wm/LocalAnimationAdapter$AnimationSpec;
 HPLcom/android/server/wm/FadeAnimationController;->fadeWindowToken(ZLcom/android/server/wm/WindowToken;I)V
 PLcom/android/server/wm/FadeAnimationController;->getFadeInAnimation()Landroid/view/animation/Animation;
 PLcom/android/server/wm/FadeAnimationController;->getFadeOutAnimation()Landroid/view/animation/Animation;
@@ -55896,30 +57722,30 @@
 HSPLcom/android/server/wm/HighRefreshRateDenylist;->isDenylisted(Ljava/lang/String;)Z+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HSPLcom/android/server/wm/HighRefreshRateDenylist;->updateDenylist(Ljava/lang/String;)V
 HPLcom/android/server/wm/ImeInsetsSourceProvider$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/ImeInsetsSourceProvider;)V
-PLcom/android/server/wm/ImeInsetsSourceProvider$$ExternalSyntheticLambda0;->run()V
+HPLcom/android/server/wm/ImeInsetsSourceProvider$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/wm/ImeInsetsSourceProvider;->$r8$lambda$rvjySZUXAI10R3XB6kYvMsUjUZQ(Lcom/android/server/wm/ImeInsetsSourceProvider;)V
 HSPLcom/android/server/wm/ImeInsetsSourceProvider;-><init>(Landroid/view/InsetsSource;Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/DisplayContent;)V
 HPLcom/android/server/wm/ImeInsetsSourceProvider;->abortShowImePostLayout()V
 HSPLcom/android/server/wm/ImeInsetsSourceProvider;->checkShowImePostLayout()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ImeInsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/lang/Runnable;Lcom/android/server/wm/ImeInsetsSourceProvider$$ExternalSyntheticLambda0;
-PLcom/android/server/wm/ImeInsetsSourceProvider;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/wm/ImeInsetsSourceProvider;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
-HPLcom/android/server/wm/ImeInsetsSourceProvider;->getControl(Lcom/android/server/wm/InsetsControlTarget;)Landroid/view/InsetsSourceControl;
+HSPLcom/android/server/wm/ImeInsetsSourceProvider;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/wm/ImeInsetsSourceProvider;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
+HPLcom/android/server/wm/ImeInsetsSourceProvider;->getControl(Lcom/android/server/wm/InsetsControlTarget;)Landroid/view/InsetsSourceControl;+]Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/DisplayContent$RemoteInsetsControlTarget;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/view/InsetsSourceControl;Landroid/view/InsetsSourceControl;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Landroid/window/TaskSnapshot;Landroid/window/TaskSnapshot;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/ImeInsetsSourceProvider;->isAboveImeLayeringTarget(Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/InsetsControlTarget;)Z
 PLcom/android/server/wm/ImeInsetsSourceProvider;->isImeFallbackTarget(Lcom/android/server/wm/InsetsControlTarget;)Z
 PLcom/android/server/wm/ImeInsetsSourceProvider;->isImeInputTarget(Lcom/android/server/wm/InsetsControlTarget;)Z
-PLcom/android/server/wm/ImeInsetsSourceProvider;->isImeLayeringTarget(Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/InsetsControlTarget;)Z
+HPLcom/android/server/wm/ImeInsetsSourceProvider;->isImeLayeringTarget(Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/InsetsControlTarget;)Z
 PLcom/android/server/wm/ImeInsetsSourceProvider;->isImeShowing()Z
 HPLcom/android/server/wm/ImeInsetsSourceProvider;->isReadyToShowIme()Z+]Lcom/android/server/wm/ImeInsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
-HPLcom/android/server/wm/ImeInsetsSourceProvider;->isTargetChangedWithinActivity(Lcom/android/server/wm/InsetsControlTarget;)Z
-HPLcom/android/server/wm/ImeInsetsSourceProvider;->lambda$scheduleShowImePostLayout$0()V
+HPLcom/android/server/wm/ImeInsetsSourceProvider;->isTargetChangedWithinActivity(Lcom/android/server/wm/InsetsControlTarget;)Z+]Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/ImeInsetsSourceProvider;->lambda$scheduleShowImePostLayout$0()V+]Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ImeInsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HPLcom/android/server/wm/ImeInsetsSourceProvider;->onSourceChanged()V+]Landroid/os/Handler;Lcom/android/server/wm/WindowManagerService$H;]Landroid/os/Message;Landroid/os/Message;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;
 HPLcom/android/server/wm/ImeInsetsSourceProvider;->reportImeDrawnForOrganizer(Lcom/android/server/wm/InsetsControlTarget;)V
 PLcom/android/server/wm/ImeInsetsSourceProvider;->sameAsImeControlTarget()Z
-HPLcom/android/server/wm/ImeInsetsSourceProvider;->scheduleShowImePostLayout(Lcom/android/server/wm/InsetsControlTarget;)V
-PLcom/android/server/wm/ImeInsetsSourceProvider;->setImeShowing(Z)V
+HPLcom/android/server/wm/ImeInsetsSourceProvider;->scheduleShowImePostLayout(Lcom/android/server/wm/InsetsControlTarget;)V+]Lcom/android/server/wm/ImeInsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
+HPLcom/android/server/wm/ImeInsetsSourceProvider;->setImeShowing(Z)V
 HPLcom/android/server/wm/ImeInsetsSourceProvider;->updateClientVisibility(Lcom/android/server/wm/InsetsControlTarget;)Z
 HPLcom/android/server/wm/ImeInsetsSourceProvider;->updateControlForTarget(Lcom/android/server/wm/InsetsControlTarget;Z)V
-PLcom/android/server/wm/ImeInsetsSourceProvider;->updateSourceFrame(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/ImeInsetsSourceProvider;->updateSourceFrame(Landroid/graphics/Rect;)V
 HPLcom/android/server/wm/ImeInsetsSourceProvider;->updateVisibility()V
 HSPLcom/android/server/wm/ImmersiveModeConfirmation$1;-><init>(Lcom/android/server/wm/ImmersiveModeConfirmation;)V
 PLcom/android/server/wm/ImmersiveModeConfirmation$1;->run()V
@@ -55946,6 +57772,7 @@
 PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;->onApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;
 PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;->onAttachedToWindow()V
 PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;->onDetachedFromWindow()V
+PLcom/android/server/wm/ImmersiveModeConfirmation$ClingWindowView;->onTouchEvent(Landroid/view/MotionEvent;)Z
 HSPLcom/android/server/wm/ImmersiveModeConfirmation$H;-><init>(Lcom/android/server/wm/ImmersiveModeConfirmation;Landroid/os/Looper;)V
 PLcom/android/server/wm/ImmersiveModeConfirmation$H;->handleMessage(Landroid/os/Message;)V
 PLcom/android/server/wm/ImmersiveModeConfirmation;->-$$Nest$fgetmContext(Lcom/android/server/wm/ImmersiveModeConfirmation;)Landroid/content/Context;
@@ -55962,14 +57789,14 @@
 HSPLcom/android/server/wm/ImmersiveModeConfirmation;->getNavBarExitDuration()J
 PLcom/android/server/wm/ImmersiveModeConfirmation;->getOptionsForWindowContext(I)Landroid/os/Bundle;
 PLcom/android/server/wm/ImmersiveModeConfirmation;->getWindowManager(I)Landroid/view/WindowManager;
-HPLcom/android/server/wm/ImmersiveModeConfirmation;->getWindowToken()Landroid/os/IBinder;
+HSPLcom/android/server/wm/ImmersiveModeConfirmation;->getWindowToken()Landroid/os/IBinder;
 PLcom/android/server/wm/ImmersiveModeConfirmation;->handleHide()V
 PLcom/android/server/wm/ImmersiveModeConfirmation;->handleShow(I)V
-PLcom/android/server/wm/ImmersiveModeConfirmation;->immersiveModeChangedLw(IZZZ)V
+HPLcom/android/server/wm/ImmersiveModeConfirmation;->immersiveModeChangedLw(IZZZ)V
 HSPLcom/android/server/wm/ImmersiveModeConfirmation;->loadSetting(ILandroid/content/Context;)Z
 PLcom/android/server/wm/ImmersiveModeConfirmation;->onLockTaskModeChangedLw(I)V
 PLcom/android/server/wm/ImmersiveModeConfirmation;->onPowerKeyDown(ZJZZ)Z
-PLcom/android/server/wm/ImmersiveModeConfirmation;->onSettingChanged(I)Z
+HSPLcom/android/server/wm/ImmersiveModeConfirmation;->onSettingChanged(I)Z
 PLcom/android/server/wm/ImmersiveModeConfirmation;->release()V
 PLcom/android/server/wm/ImmersiveModeConfirmation;->saveSetting(Landroid/content/Context;)V
 HSPLcom/android/server/wm/InputConfigAdapter$FlagMapping;-><init>(IIZ)V
@@ -55985,11 +57812,11 @@
 HPLcom/android/server/wm/InputConsumerImpl;->hide(Landroid/view/SurfaceControl$Transaction;)V
 HPLcom/android/server/wm/InputConsumerImpl;->layout(Landroid/view/SurfaceControl$Transaction;II)V
 HPLcom/android/server/wm/InputConsumerImpl;->layout(Landroid/view/SurfaceControl$Transaction;Landroid/graphics/Rect;)V
-PLcom/android/server/wm/InputConsumerImpl;->linkToDeathRecipient()V
+HPLcom/android/server/wm/InputConsumerImpl;->linkToDeathRecipient()V
 PLcom/android/server/wm/InputConsumerImpl;->reparent(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/WindowContainer;)V
 HPLcom/android/server/wm/InputConsumerImpl;->show(Landroid/view/SurfaceControl$Transaction;I)V
 PLcom/android/server/wm/InputConsumerImpl;->unlinkFromDeathRecipient()V
-PLcom/android/server/wm/InputManagerCallback$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+HPLcom/android/server/wm/InputManagerCallback$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/WindowManagerService;)V
 HPLcom/android/server/wm/InputManagerCallback$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/InputManagerCallback$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/wm/DragDropController;)V
 PLcom/android/server/wm/InputManagerCallback$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
@@ -56000,8 +57827,8 @@
 PLcom/android/server/wm/InputManagerCallback;->dispatchUnhandledKey(Landroid/os/IBinder;Landroid/view/KeyEvent;I)Landroid/view/KeyEvent;
 PLcom/android/server/wm/InputManagerCallback;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/wm/InputManagerCallback;->freezeInputDispatchingLw()V
-PLcom/android/server/wm/InputManagerCallback;->getCursorPosition()Landroid/graphics/PointF;
-PLcom/android/server/wm/InputManagerCallback;->getParentSurfaceForPointers(I)Landroid/view/SurfaceControl;
+HPLcom/android/server/wm/InputManagerCallback;->getCursorPosition()Landroid/graphics/PointF;
+HSPLcom/android/server/wm/InputManagerCallback;->getParentSurfaceForPointers(I)Landroid/view/SurfaceControl;
 HSPLcom/android/server/wm/InputManagerCallback;->getPointerDisplayId()I
 HSPLcom/android/server/wm/InputManagerCallback;->getPointerLayer()I
 HPLcom/android/server/wm/InputManagerCallback;->interceptKeyBeforeDispatching(Landroid/os/IBinder;Landroid/view/KeyEvent;I)J
@@ -56010,6 +57837,7 @@
 HSPLcom/android/server/wm/InputManagerCallback;->notifyConfigurationChanged()V
 PLcom/android/server/wm/InputManagerCallback;->notifyDropWindow(Landroid/os/IBinder;FF)V
 HPLcom/android/server/wm/InputManagerCallback;->notifyFocusChanged(Landroid/os/IBinder;Landroid/os/IBinder;)V
+PLcom/android/server/wm/InputManagerCallback;->notifyInputChannelBroken(Landroid/os/IBinder;)V
 HSPLcom/android/server/wm/InputManagerCallback;->notifyLidSwitchChanged(JZ)V
 PLcom/android/server/wm/InputManagerCallback;->notifyNoFocusedWindowAnr(Landroid/view/InputApplicationHandle;)V
 HSPLcom/android/server/wm/InputManagerCallback;->notifyPointerDisplayIdChanged(IFF)V
@@ -56018,14 +57846,14 @@
 HPLcom/android/server/wm/InputManagerCallback;->onPointerDownOutsideFocus(Landroid/os/IBinder;)V+]Landroid/os/Handler;Lcom/android/server/wm/WindowManagerService$H;]Landroid/os/Message;Landroid/os/Message;
 PLcom/android/server/wm/InputManagerCallback;->setEventDispatchingLw(Z)V
 PLcom/android/server/wm/InputManagerCallback;->thawInputDispatchingLw()V
-PLcom/android/server/wm/InputManagerCallback;->updateInputDispatchModeLw()V
+HPLcom/android/server/wm/InputManagerCallback;->updateInputDispatchModeLw()V
 HSPLcom/android/server/wm/InputManagerCallback;->waitForInputDevicesReady(J)Z
 PLcom/android/server/wm/InputMonitor$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/InputMonitor;)V
 PLcom/android/server/wm/InputMonitor$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;->-$$Nest$mupdateInputWindows(Lcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;Z)V
 HSPLcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;-><init>(Lcom/android/server/wm/InputMonitor;)V
 HSPLcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;-><init>(Lcom/android/server/wm/InputMonitor;Lcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer-IA;)V
-HSPLcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;->accept(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/InputConsumerImpl;Lcom/android/server/wm/InputConsumerImpl;]Lcom/android/server/wm/RecentsAnimationController;Lcom/android/server/wm/RecentsAnimationController;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/Task;]Ljava/util/Map;Ljava/util/Collections$SynchronizedMap;]Lcom/android/server/wm/InputMonitor;Lcom/android/server/wm/InputMonitor;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Landroid/view/InputWindowHandle;Landroid/view/InputWindowHandle;]Lcom/android/server/wm/DragDropController;Lcom/android/server/wm/DragDropController;
+HSPLcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;->accept(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/InputConsumerImpl;Lcom/android/server/wm/InputConsumerImpl;]Lcom/android/server/wm/RecentsAnimationController;Lcom/android/server/wm/RecentsAnimationController;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/Task;]Ljava/util/Map;Ljava/util/Collections$SynchronizedMap;]Landroid/view/InputWindowHandle;Landroid/view/InputWindowHandle;]Lcom/android/server/wm/InputMonitor;Lcom/android/server/wm/InputMonitor;]Lcom/android/server/wm/DragDropController;Lcom/android/server/wm/DragDropController;
 HSPLcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;->accept(Ljava/lang/Object;)V+]Lcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;Lcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;
 HSPLcom/android/server/wm/InputMonitor$UpdateInputForAllWindowsConsumer;->updateInputWindows(Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/InputMonitor;Lcom/android/server/wm/InputMonitor;
 HSPLcom/android/server/wm/InputMonitor$UpdateInputWindows;-><init>(Lcom/android/server/wm/InputMonitor;)V
@@ -56049,23 +57877,23 @@
 HPLcom/android/server/wm/InputMonitor;->createInputConsumer(Landroid/os/IBinder;Ljava/lang/String;Landroid/view/InputChannel;ILandroid/os/UserHandle;)V
 HPLcom/android/server/wm/InputMonitor;->destroyInputConsumer(Ljava/lang/String;)Z
 PLcom/android/server/wm/InputMonitor;->disposeInputConsumer(Lcom/android/server/wm/InputConsumerImpl;)Z
-PLcom/android/server/wm/InputMonitor;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HSPLcom/android/server/wm/InputMonitor;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/wm/InputMonitor;->getInputConsumer(Ljava/lang/String;)Lcom/android/server/wm/InputConsumerImpl;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/wm/InputMonitor;->getWeak(Ljava/lang/ref/WeakReference;)Ljava/lang/Object;
 HSPLcom/android/server/wm/InputMonitor;->isTrustedOverlay(I)Z
-PLcom/android/server/wm/InputMonitor;->lambda$onDisplayRemoved$0()V
+HPLcom/android/server/wm/InputMonitor;->lambda$onDisplayRemoved$0()V
 HSPLcom/android/server/wm/InputMonitor;->layoutInputConsumers(II)V
-PLcom/android/server/wm/InputMonitor;->onDisplayRemoved()V
+HPLcom/android/server/wm/InputMonitor;->onDisplayRemoved()V
 HPLcom/android/server/wm/InputMonitor;->pauseDispatchingLw(Lcom/android/server/wm/WindowToken;)V
-HPLcom/android/server/wm/InputMonitor;->populateInputWindowHandle(Lcom/android/server/wm/InputWindowHandleWrapper;Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/InputWindowHandleWrapper;Lcom/android/server/wm/InputWindowHandleWrapper;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/InputMonitor;->populateInputWindowHandle(Lcom/android/server/wm/InputWindowHandleWrapper;Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/InputWindowHandleWrapper;Lcom/android/server/wm/InputWindowHandleWrapper;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/InputMonitor;->populateOverlayInputInfo(Lcom/android/server/wm/InputWindowHandleWrapper;)V+]Lcom/android/server/wm/InputWindowHandleWrapper;Lcom/android/server/wm/InputWindowHandleWrapper;
 HSPLcom/android/server/wm/InputMonitor;->populateOverlayInputInfo(Lcom/android/server/wm/InputWindowHandleWrapper;Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/InputWindowHandleWrapper;Lcom/android/server/wm/InputWindowHandleWrapper;
-HPLcom/android/server/wm/InputMonitor;->requestFocus(Landroid/os/IBinder;Ljava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;
+HSPLcom/android/server/wm/InputMonitor;->requestFocus(Landroid/os/IBinder;Ljava/lang/String;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;
 HSPLcom/android/server/wm/InputMonitor;->resetInputConsumers(Landroid/view/SurfaceControl$Transaction;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/InputConsumerImpl;Lcom/android/server/wm/InputConsumerImpl;
 HPLcom/android/server/wm/InputMonitor;->resumeDispatchingLw(Lcom/android/server/wm/WindowToken;)V
 HSPLcom/android/server/wm/InputMonitor;->scheduleUpdateInputWindows()V+]Landroid/os/Handler;Landroid/os/Handler;
-HPLcom/android/server/wm/InputMonitor;->setFocusedAppLw(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/InputMonitor;->setInputFocusLw(Lcom/android/server/wm/WindowState;Z)V
+HSPLcom/android/server/wm/InputMonitor;->setFocusedAppLw(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/InputMonitor;->setInputFocusLw(Lcom/android/server/wm/WindowState;Z)V
 HSPLcom/android/server/wm/InputMonitor;->setInputWindowInfoIfNeeded(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;Lcom/android/server/wm/InputWindowHandleWrapper;)V+]Lcom/android/server/wm/InputWindowHandleWrapper;Lcom/android/server/wm/InputWindowHandleWrapper;
 HPLcom/android/server/wm/InputMonitor;->setTrustedOverlayInputInfo(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;ILjava/lang/String;)V
 HSPLcom/android/server/wm/InputMonitor;->setUpdateInputWindowsNeededLw()V
@@ -56078,34 +57906,34 @@
 HSPLcom/android/server/wm/InputWindowHandleWrapper;->forceChange()V
 HSPLcom/android/server/wm/InputWindowHandleWrapper;->getDisplayId()I
 PLcom/android/server/wm/InputWindowHandleWrapper;->getInputApplicationHandle()Landroid/view/InputApplicationHandle;
-HPLcom/android/server/wm/InputWindowHandleWrapper;->hasWallpaper()Z
+HSPLcom/android/server/wm/InputWindowHandleWrapper;->hasWallpaper()Z
 HSPLcom/android/server/wm/InputWindowHandleWrapper;->isChanged()Z
 HSPLcom/android/server/wm/InputWindowHandleWrapper;->isFocusable()Z
-HPLcom/android/server/wm/InputWindowHandleWrapper;->isPaused()Z
+HSPLcom/android/server/wm/InputWindowHandleWrapper;->isPaused()Z
 HSPLcom/android/server/wm/InputWindowHandleWrapper;->isTrustedOverlay()Z
 HSPLcom/android/server/wm/InputWindowHandleWrapper;->setDispatchingTimeoutMillis(J)V
 PLcom/android/server/wm/InputWindowHandleWrapper;->setDisplayId(I)V
 HSPLcom/android/server/wm/InputWindowHandleWrapper;->setFocusable(Z)V+]Lcom/android/server/wm/InputWindowHandleWrapper;Lcom/android/server/wm/InputWindowHandleWrapper;]Landroid/view/InputWindowHandle;Landroid/view/InputWindowHandle;
-HPLcom/android/server/wm/InputWindowHandleWrapper;->setHasWallpaper(Z)V
-HPLcom/android/server/wm/InputWindowHandleWrapper;->setInputApplicationHandle(Landroid/view/InputApplicationHandle;)V
+HSPLcom/android/server/wm/InputWindowHandleWrapper;->setHasWallpaper(Z)V+]Lcom/android/server/wm/InputWindowHandleWrapper;Lcom/android/server/wm/InputWindowHandleWrapper;]Landroid/view/InputWindowHandle;Landroid/view/InputWindowHandle;
+HSPLcom/android/server/wm/InputWindowHandleWrapper;->setInputApplicationHandle(Landroid/view/InputApplicationHandle;)V
 HSPLcom/android/server/wm/InputWindowHandleWrapper;->setInputConfigMasked(II)V
-HPLcom/android/server/wm/InputWindowHandleWrapper;->setLayoutParamsFlags(I)V
+HSPLcom/android/server/wm/InputWindowHandleWrapper;->setLayoutParamsFlags(I)V
 HSPLcom/android/server/wm/InputWindowHandleWrapper;->setLayoutParamsType(I)V
 HSPLcom/android/server/wm/InputWindowHandleWrapper;->setName(Ljava/lang/String;)V
 HSPLcom/android/server/wm/InputWindowHandleWrapper;->setOwnerPid(I)V
 HSPLcom/android/server/wm/InputWindowHandleWrapper;->setOwnerUid(I)V
 HSPLcom/android/server/wm/InputWindowHandleWrapper;->setPackageName(Ljava/lang/String;)V
-HPLcom/android/server/wm/InputWindowHandleWrapper;->setPaused(Z)V
-HPLcom/android/server/wm/InputWindowHandleWrapper;->setReplaceTouchableRegionWithCrop(Z)V
+HSPLcom/android/server/wm/InputWindowHandleWrapper;->setPaused(Z)V+]Lcom/android/server/wm/InputWindowHandleWrapper;Lcom/android/server/wm/InputWindowHandleWrapper;]Landroid/view/InputWindowHandle;Landroid/view/InputWindowHandle;
+HSPLcom/android/server/wm/InputWindowHandleWrapper;->setReplaceTouchableRegionWithCrop(Z)V
 HSPLcom/android/server/wm/InputWindowHandleWrapper;->setScaleFactor(F)V
-HPLcom/android/server/wm/InputWindowHandleWrapper;->setSurfaceInset(I)V
+HSPLcom/android/server/wm/InputWindowHandleWrapper;->setSurfaceInset(I)V
 HSPLcom/android/server/wm/InputWindowHandleWrapper;->setToken(Landroid/os/IBinder;)V
 HSPLcom/android/server/wm/InputWindowHandleWrapper;->setTouchOcclusionMode(I)V
-HPLcom/android/server/wm/InputWindowHandleWrapper;->setTouchableRegion(Landroid/graphics/Region;)V
+HSPLcom/android/server/wm/InputWindowHandleWrapper;->setTouchableRegion(Landroid/graphics/Region;)V+]Landroid/graphics/Region;Landroid/graphics/Region;
 HSPLcom/android/server/wm/InputWindowHandleWrapper;->setTouchableRegionCrop(Landroid/view/SurfaceControl;)V+]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;]Landroid/view/InputWindowHandle;Landroid/view/InputWindowHandle;
 HSPLcom/android/server/wm/InputWindowHandleWrapper;->setTrustedOverlay(Z)V
-HPLcom/android/server/wm/InputWindowHandleWrapper;->setWindowToken(Landroid/view/IWindow;)V
-HPLcom/android/server/wm/InsetsControlTarget;->asWindowOrNull(Lcom/android/server/wm/InsetsControlTarget;)Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/InputWindowHandleWrapper;->setWindowToken(Landroid/view/IWindow;)V+]Landroid/view/InputWindowHandle;Landroid/view/InputWindowHandle;
+HPLcom/android/server/wm/InsetsControlTarget;->asWindowOrNull(Lcom/android/server/wm/InsetsControlTarget;)Lcom/android/server/wm/WindowState;+]Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/DisplayContent$RemoteInsetsControlTarget;,Lcom/android/server/wm/WindowState;
 PLcom/android/server/wm/InsetsControlTarget;->canShowTransient()Z
 PLcom/android/server/wm/InsetsControlTarget;->getRequestedVisibility(I)Z
 PLcom/android/server/wm/InsetsControlTarget;->getWindow()Lcom/android/server/wm/WindowState;
@@ -56116,10 +57944,10 @@
 PLcom/android/server/wm/InsetsPolicy$$ExternalSyntheticLambda1;->doFrame(J)V
 HSPLcom/android/server/wm/InsetsPolicy$1;-><init>(Lcom/android/server/wm/InsetsPolicy;)V
 HPLcom/android/server/wm/InsetsPolicy$1;->notifyInsetsControlChanged()V
-HPLcom/android/server/wm/InsetsPolicy$BarWindow;->-$$Nest$mupdateVisibility(Lcom/android/server/wm/InsetsPolicy$BarWindow;Lcom/android/server/wm/InsetsControlTarget;I)V+]Lcom/android/server/wm/InsetsPolicy$BarWindow;Lcom/android/server/wm/InsetsPolicy$BarWindow;
+HSPLcom/android/server/wm/InsetsPolicy$BarWindow;->-$$Nest$mupdateVisibility(Lcom/android/server/wm/InsetsPolicy$BarWindow;Lcom/android/server/wm/InsetsControlTarget;I)V+]Lcom/android/server/wm/InsetsPolicy$BarWindow;Lcom/android/server/wm/InsetsPolicy$BarWindow;
 HSPLcom/android/server/wm/InsetsPolicy$BarWindow;-><init>(Lcom/android/server/wm/InsetsPolicy;I)V
-HPLcom/android/server/wm/InsetsPolicy$BarWindow;->setVisible(Z)V+]Lcom/android/server/statusbar/StatusBarManagerInternal;Lcom/android/server/statusbar/StatusBarManagerService$1;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
-HPLcom/android/server/wm/InsetsPolicy$BarWindow;->updateVisibility(Lcom/android/server/wm/InsetsControlTarget;I)V+]Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/InsetsPolicy$1;]Lcom/android/server/wm/InsetsPolicy$BarWindow;Lcom/android/server/wm/InsetsPolicy$BarWindow;
+HSPLcom/android/server/wm/InsetsPolicy$BarWindow;->setVisible(Z)V+]Lcom/android/server/statusbar/StatusBarManagerInternal;Lcom/android/server/statusbar/StatusBarManagerService$1;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
+HSPLcom/android/server/wm/InsetsPolicy$BarWindow;->updateVisibility(Lcom/android/server/wm/InsetsControlTarget;I)V+]Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/InsetsPolicy$1;]Lcom/android/server/wm/InsetsPolicy$BarWindow;Lcom/android/server/wm/InsetsPolicy$BarWindow;
 PLcom/android/server/wm/InsetsPolicy$InsetsPolicyAnimationControlListener$InsetsPolicyAnimationControlCallbacks$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/InsetsPolicy$InsetsPolicyAnimationControlListener$InsetsPolicyAnimationControlCallbacks;I)V
 PLcom/android/server/wm/InsetsPolicy$InsetsPolicyAnimationControlListener$InsetsPolicyAnimationControlCallbacks$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/wm/InsetsPolicy$InsetsPolicyAnimationControlListener$InsetsPolicyAnimationControlCallbacks;->$r8$lambda$UhUw5JuCcbzKOaN4BwsiYs4Q38k(Lcom/android/server/wm/InsetsPolicy$InsetsPolicyAnimationControlListener$InsetsPolicyAnimationControlCallbacks;I)V
@@ -56139,79 +57967,79 @@
 PLcom/android/server/wm/InsetsPolicy;->$r8$lambda$6jeOPQpS33xdU3fHbSTvvxep_XI(Lcom/android/server/wm/InsetsPolicy;)V
 PLcom/android/server/wm/InsetsPolicy;->$r8$lambda$kG3gHT2syDCFLEB7Zg-AARP4fjM(Lcom/android/server/wm/InsetsPolicy;J)V
 PLcom/android/server/wm/InsetsPolicy;->-$$Nest$fgetmAnimatingShown(Lcom/android/server/wm/InsetsPolicy;)Z
-PLcom/android/server/wm/InsetsPolicy;->-$$Nest$fgetmDisplayContent(Lcom/android/server/wm/InsetsPolicy;)Lcom/android/server/wm/DisplayContent;
+HPLcom/android/server/wm/InsetsPolicy;->-$$Nest$fgetmDisplayContent(Lcom/android/server/wm/InsetsPolicy;)Lcom/android/server/wm/DisplayContent;
 PLcom/android/server/wm/InsetsPolicy;->-$$Nest$fgetmFocusedWin(Lcom/android/server/wm/InsetsPolicy;)Lcom/android/server/wm/WindowState;
 PLcom/android/server/wm/InsetsPolicy;->-$$Nest$fgetmPolicy(Lcom/android/server/wm/InsetsPolicy;)Lcom/android/server/wm/DisplayPolicy;
-PLcom/android/server/wm/InsetsPolicy;->-$$Nest$fgetmShowingTransientTypes(Lcom/android/server/wm/InsetsPolicy;)Landroid/util/IntArray;
-PLcom/android/server/wm/InsetsPolicy;->-$$Nest$fgetmStateController(Lcom/android/server/wm/InsetsPolicy;)Lcom/android/server/wm/InsetsStateController;
+HPLcom/android/server/wm/InsetsPolicy;->-$$Nest$fgetmShowingTransientTypes(Lcom/android/server/wm/InsetsPolicy;)Landroid/util/IntArray;
+HPLcom/android/server/wm/InsetsPolicy;->-$$Nest$fgetmStateController(Lcom/android/server/wm/InsetsPolicy;)Lcom/android/server/wm/InsetsStateController;
 PLcom/android/server/wm/InsetsPolicy;->-$$Nest$fgetmTmpFloat9(Lcom/android/server/wm/InsetsPolicy;)[F
 PLcom/android/server/wm/InsetsPolicy;->-$$Nest$fputmAnimatingShown(Lcom/android/server/wm/InsetsPolicy;Z)V
 HSPLcom/android/server/wm/InsetsPolicy;-><init>(Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/DisplayContent;)V
-HPLcom/android/server/wm/InsetsPolicy;->abortTransient()V
+HSPLcom/android/server/wm/InsetsPolicy;->abortTransient()V
 HSPLcom/android/server/wm/InsetsPolicy;->adjustInsetsForRoundedCorners(Lcom/android/server/wm/WindowState;Landroid/view/InsetsState;Z)Landroid/view/InsetsState;+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 PLcom/android/server/wm/InsetsPolicy;->adjustInsetsForWindow(Lcom/android/server/wm/WindowState;Landroid/view/InsetsState;)Landroid/view/InsetsState;
 HSPLcom/android/server/wm/InsetsPolicy;->adjustInsetsForWindow(Lcom/android/server/wm/WindowState;Landroid/view/InsetsState;Z)Landroid/view/InsetsState;
 HSPLcom/android/server/wm/InsetsPolicy;->adjustVisibilityForIme(Lcom/android/server/wm/WindowState;Landroid/view/InsetsState;Z)Landroid/view/InsetsState;+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;
 HSPLcom/android/server/wm/InsetsPolicy;->adjustVisibilityForTransientTypes(Landroid/view/InsetsState;)Landroid/view/InsetsState;+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/util/IntArray;Landroid/util/IntArray;
-HPLcom/android/server/wm/InsetsPolicy;->canBeTopFullscreenOpaqueWindow(Lcom/android/server/wm/WindowState;)Z+]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/InsetsPolicy;->canBeTopFullscreenOpaqueWindow(Lcom/android/server/wm/WindowState;)Z+]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;
 HPLcom/android/server/wm/InsetsPolicy;->checkAbortTransient(Lcom/android/server/wm/InsetsControlTarget;)V
 PLcom/android/server/wm/InsetsPolicy;->controlAnimationUnchecked(ILandroid/util/SparseArray;ZLjava/lang/Runnable;)V
-HPLcom/android/server/wm/InsetsPolicy;->dispatchTransientSystemBarsVisibilityChanged(Lcom/android/server/wm/WindowState;ZZ)V
+HSPLcom/android/server/wm/InsetsPolicy;->dispatchTransientSystemBarsVisibilityChanged(Lcom/android/server/wm/WindowState;ZZ)V
 HSPLcom/android/server/wm/InsetsPolicy;->enforceInsetsPolicyForTarget(IIZLandroid/view/InsetsState;)Landroid/view/InsetsState;+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;
-HPLcom/android/server/wm/InsetsPolicy;->forceShowsNavigationBarTransiently()Z
-HPLcom/android/server/wm/InsetsPolicy;->forceShowsStatusBarTransiently()Z
+HSPLcom/android/server/wm/InsetsPolicy;->forceShowsNavigationBarTransiently()Z
+HSPLcom/android/server/wm/InsetsPolicy;->forceShowsStatusBarTransiently()Z
 HSPLcom/android/server/wm/InsetsPolicy;->getInsetsForWindowMetrics(Landroid/view/WindowManager$LayoutParams;)Landroid/view/InsetsState;+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/InsetsPolicy;Lcom/android/server/wm/InsetsPolicy;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/InsetsPolicy;->getInsetsTypeForLayoutParams(Landroid/view/WindowManager$LayoutParams;)I
-HPLcom/android/server/wm/InsetsPolicy;->getNavControlTarget(Lcom/android/server/wm/WindowState;Z)Lcom/android/server/wm/InsetsControlTarget;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/InsetsPolicy;Lcom/android/server/wm/InsetsPolicy;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
-PLcom/android/server/wm/InsetsPolicy;->getRemoteInsetsControllerControlsSystemBars()Z
-HPLcom/android/server/wm/InsetsPolicy;->getStatusControlTarget(Lcom/android/server/wm/WindowState;Z)Lcom/android/server/wm/InsetsControlTarget;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/InsetsPolicy;Lcom/android/server/wm/InsetsPolicy;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
+HSPLcom/android/server/wm/InsetsPolicy;->getNavControlTarget(Lcom/android/server/wm/WindowState;Z)Lcom/android/server/wm/InsetsControlTarget;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/InsetsPolicy;Lcom/android/server/wm/InsetsPolicy;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
+HSPLcom/android/server/wm/InsetsPolicy;->getRemoteInsetsControllerControlsSystemBars()Z
+HSPLcom/android/server/wm/InsetsPolicy;->getStatusControlTarget(Lcom/android/server/wm/WindowState;Z)Lcom/android/server/wm/InsetsControlTarget;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/InsetsPolicy;Lcom/android/server/wm/InsetsPolicy;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;
 PLcom/android/server/wm/InsetsPolicy;->hideTransient()V
 HPLcom/android/server/wm/InsetsPolicy;->isHidden(I)Z+]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;
 HSPLcom/android/server/wm/InsetsPolicy;->isInsetsTypeControllable(I)Z
-HPLcom/android/server/wm/InsetsPolicy;->isShowingTransientTypes(I)Z+]Landroid/util/IntArray;Landroid/util/IntArray;
+HSPLcom/android/server/wm/InsetsPolicy;->isShowingTransientTypes(I)Z+]Landroid/util/IntArray;Landroid/util/IntArray;
 PLcom/android/server/wm/InsetsPolicy;->isTransient(I)Z
 PLcom/android/server/wm/InsetsPolicy;->lambda$hideTransient$1()V
 PLcom/android/server/wm/InsetsPolicy;->lambda$showTransient$0(J)V
 HPLcom/android/server/wm/InsetsPolicy;->onInsetsModified(Lcom/android/server/wm/InsetsControlTarget;)V
-HPLcom/android/server/wm/InsetsPolicy;->remoteInsetsControllerControlsSystemBars(Lcom/android/server/wm/WindowState;)Z
+HSPLcom/android/server/wm/InsetsPolicy;->remoteInsetsControllerControlsSystemBars(Lcom/android/server/wm/WindowState;)Z
 HPLcom/android/server/wm/InsetsPolicy;->showTransient([IZ)V
 HPLcom/android/server/wm/InsetsPolicy;->startAnimation(ZLjava/lang/Runnable;)V
-HPLcom/android/server/wm/InsetsPolicy;->updateBarControlTarget(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/InsetsPolicy;Lcom/android/server/wm/InsetsPolicy;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;
+HSPLcom/android/server/wm/InsetsPolicy;->updateBarControlTarget(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/InsetsPolicy;Lcom/android/server/wm/InsetsPolicy;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;
 HSPLcom/android/server/wm/InsetsSourceProvider$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/InsetsSourceProvider;)V
 PLcom/android/server/wm/InsetsSourceProvider$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/wm/InsetsSourceProvider$ControlAdapter;->-$$Nest$fgetmCapturedLeash(Lcom/android/server/wm/InsetsSourceProvider$ControlAdapter;)Landroid/view/SurfaceControl;
 HPLcom/android/server/wm/InsetsSourceProvider$ControlAdapter;-><init>(Lcom/android/server/wm/InsetsSourceProvider;Landroid/graphics/Point;)V
-PLcom/android/server/wm/InsetsSourceProvider$ControlAdapter;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/wm/InsetsSourceProvider$ControlAdapter;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/wm/InsetsSourceProvider$ControlAdapter;->dumpDebug(Landroid/util/proto/ProtoOutputStream;)V
 PLcom/android/server/wm/InsetsSourceProvider$ControlAdapter;->getDurationHint()J
 HPLcom/android/server/wm/InsetsSourceProvider$ControlAdapter;->onAnimationCancelled(Landroid/view/SurfaceControl;)V
 HPLcom/android/server/wm/InsetsSourceProvider$ControlAdapter;->startAnimation(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;ILcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)V
 PLcom/android/server/wm/InsetsSourceProvider;->$r8$lambda$A-bhFv7ipn_mv60gW-T4zEwJ36A(Lcom/android/server/wm/InsetsSourceProvider;Landroid/view/SurfaceControl$Transaction;)V
 HPLcom/android/server/wm/InsetsSourceProvider;->-$$Nest$fgetmAdapter(Lcom/android/server/wm/InsetsSourceProvider;)Lcom/android/server/wm/InsetsSourceProvider$ControlAdapter;
-PLcom/android/server/wm/InsetsSourceProvider;->-$$Nest$fgetmControlTarget(Lcom/android/server/wm/InsetsSourceProvider;)Lcom/android/server/wm/InsetsControlTarget;
+HPLcom/android/server/wm/InsetsSourceProvider;->-$$Nest$fgetmControlTarget(Lcom/android/server/wm/InsetsSourceProvider;)Lcom/android/server/wm/InsetsControlTarget;
 HPLcom/android/server/wm/InsetsSourceProvider;->-$$Nest$fgetmCropToProvidingInsets(Lcom/android/server/wm/InsetsSourceProvider;)Z
-PLcom/android/server/wm/InsetsSourceProvider;->-$$Nest$fgetmStateController(Lcom/android/server/wm/InsetsSourceProvider;)Lcom/android/server/wm/InsetsStateController;
-PLcom/android/server/wm/InsetsSourceProvider;->-$$Nest$fputmAdapter(Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/InsetsSourceProvider$ControlAdapter;)V
-PLcom/android/server/wm/InsetsSourceProvider;->-$$Nest$fputmControl(Lcom/android/server/wm/InsetsSourceProvider;Landroid/view/InsetsSourceControl;)V
-PLcom/android/server/wm/InsetsSourceProvider;->-$$Nest$fputmControlTarget(Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/InsetsControlTarget;)V
+HPLcom/android/server/wm/InsetsSourceProvider;->-$$Nest$fgetmStateController(Lcom/android/server/wm/InsetsSourceProvider;)Lcom/android/server/wm/InsetsStateController;
+HPLcom/android/server/wm/InsetsSourceProvider;->-$$Nest$fputmAdapter(Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/InsetsSourceProvider$ControlAdapter;)V
+HPLcom/android/server/wm/InsetsSourceProvider;->-$$Nest$fputmControl(Lcom/android/server/wm/InsetsSourceProvider;Landroid/view/InsetsSourceControl;)V
+HPLcom/android/server/wm/InsetsSourceProvider;->-$$Nest$fputmControlTarget(Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/InsetsControlTarget;)V
 PLcom/android/server/wm/InsetsSourceProvider;->-$$Nest$mgetProvidingInsetsBoundsCropRect(Lcom/android/server/wm/InsetsSourceProvider;)Landroid/graphics/Rect;
 HSPLcom/android/server/wm/InsetsSourceProvider;-><init>(Landroid/view/InsetsSource;Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/DisplayContent;)V
-PLcom/android/server/wm/InsetsSourceProvider;->createSimulatedSource(Lcom/android/server/wm/DisplayFrames;Landroid/graphics/Rect;)Landroid/view/InsetsSource;
-HPLcom/android/server/wm/InsetsSourceProvider;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-HPLcom/android/server/wm/InsetsSourceProvider;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
+HPLcom/android/server/wm/InsetsSourceProvider;->createSimulatedSource(Lcom/android/server/wm/DisplayFrames;Landroid/graphics/Rect;)Landroid/view/InsetsSource;+]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/internal/util/function/TriConsumer;megamorphic_types
+HSPLcom/android/server/wm/InsetsSourceProvider;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/wm/InsetsSourceProvider;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V+]Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/DisplayContent$RemoteInsetsControlTarget;,Lcom/android/server/wm/InsetsPolicy$1;]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/view/InsetsSourceControl;Landroid/view/InsetsSourceControl;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;
 PLcom/android/server/wm/InsetsSourceProvider;->finishSeamlessRotation()V
 HPLcom/android/server/wm/InsetsSourceProvider;->getControl(Lcom/android/server/wm/InsetsControlTarget;)Landroid/view/InsetsSourceControl;+]Landroid/view/InsetsSourceControl;Landroid/view/InsetsSourceControl;
 HPLcom/android/server/wm/InsetsSourceProvider;->getControlTarget()Lcom/android/server/wm/InsetsControlTarget;
 PLcom/android/server/wm/InsetsSourceProvider;->getImeOverrideFrame()Landroid/graphics/Rect;
 PLcom/android/server/wm/InsetsSourceProvider;->getProvidingInsetsBoundsCropRect()Landroid/graphics/Rect;
-HPLcom/android/server/wm/InsetsSourceProvider;->getSource()Landroid/view/InsetsSource;
-HPLcom/android/server/wm/InsetsSourceProvider;->getWindowFrameSurfacePosition()Landroid/graphics/Point;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/AsyncRotationController;Lcom/android/server/wm/AsyncRotationController;
+HSPLcom/android/server/wm/InsetsSourceProvider;->getSource()Landroid/view/InsetsSource;
+HPLcom/android/server/wm/InsetsSourceProvider;->getWindowFrameSurfacePosition()Landroid/graphics/Point;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/AsyncRotationController;Lcom/android/server/wm/AsyncRotationController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HPLcom/android/server/wm/InsetsSourceProvider;->hasWindowContainer()Z
 HPLcom/android/server/wm/InsetsSourceProvider;->isClientVisible()Z
 HPLcom/android/server/wm/InsetsSourceProvider;->isControllable()Z
 HPLcom/android/server/wm/InsetsSourceProvider;->isMirroredSource()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;
 HPLcom/android/server/wm/InsetsSourceProvider;->lambda$new$0(Landroid/view/SurfaceControl$Transaction;)V
-HSPLcom/android/server/wm/InsetsSourceProvider;->onPostLayout()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowFrames;Lcom/android/server/wm/WindowFrames;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/graphics/Insets;Landroid/graphics/Insets;]Landroid/view/InsetsSourceControl;Landroid/view/InsetsSourceControl;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Ljava/util/function/Consumer;Lcom/android/server/wm/InsetsSourceProvider$$ExternalSyntheticLambda0;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;]Lcom/android/server/wm/AsyncRotationController;Lcom/android/server/wm/AsyncRotationController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
+HSPLcom/android/server/wm/InsetsSourceProvider;->onPostLayout()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowFrames;Lcom/android/server/wm/WindowFrames;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/graphics/Insets;Landroid/graphics/Insets;]Landroid/view/InsetsSourceControl;Landroid/view/InsetsSourceControl;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Ljava/util/function/Consumer;Lcom/android/server/wm/InsetsSourceProvider$$ExternalSyntheticLambda0;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/AsyncRotationController;Lcom/android/server/wm/AsyncRotationController;
 HPLcom/android/server/wm/InsetsSourceProvider;->onSurfaceTransactionApplied()V
 HPLcom/android/server/wm/InsetsSourceProvider;->overridesImeFrame()Z
 PLcom/android/server/wm/InsetsSourceProvider;->removeCropToProvidingInsetsBounds(Landroid/view/SurfaceControl$Transaction;)V
@@ -56220,10 +58048,10 @@
 HPLcom/android/server/wm/InsetsSourceProvider;->setServerVisible(Z)V
 HPLcom/android/server/wm/InsetsSourceProvider;->setWindowContainer(Lcom/android/server/wm/WindowContainer;Lcom/android/internal/util/function/TriConsumer;Lcom/android/internal/util/function/TriConsumer;)V
 PLcom/android/server/wm/InsetsSourceProvider;->startSeamlessRotation()V
-HPLcom/android/server/wm/InsetsSourceProvider;->updateClientVisibility(Lcom/android/server/wm/InsetsControlTarget;)Z+]Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/DisplayContent$RemoteInsetsControlTarget;,Lcom/android/server/wm/InsetsPolicy$1;,Lcom/android/server/wm/InsetsStateController$1;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;
+HPLcom/android/server/wm/InsetsSourceProvider;->updateClientVisibility(Lcom/android/server/wm/InsetsControlTarget;)Z+]Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/DisplayContent$RemoteInsetsControlTarget;,Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/InsetsPolicy$1;,Lcom/android/server/wm/InsetsStateController$1;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;
 PLcom/android/server/wm/InsetsSourceProvider;->updateControlForFakeTarget(Lcom/android/server/wm/InsetsControlTarget;)V
 HPLcom/android/server/wm/InsetsSourceProvider;->updateControlForTarget(Lcom/android/server/wm/InsetsControlTarget;Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/DisplayContent$RemoteInsetsControlTarget;,Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;
-HPLcom/android/server/wm/InsetsSourceProvider;->updateSourceFrame(Landroid/graphics/Rect;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/internal/util/function/TriConsumer;megamorphic_types
+HPLcom/android/server/wm/InsetsSourceProvider;->updateSourceFrame(Landroid/graphics/Rect;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/internal/util/function/TriConsumer;megamorphic_types]Landroid/util/SparseArray;Landroid/util/SparseArray;
 HPLcom/android/server/wm/InsetsSourceProvider;->updateSourceFrameForServerVisibility()V+]Landroid/view/InsetsSource;Landroid/view/InsetsSource;
 HPLcom/android/server/wm/InsetsSourceProvider;->updateVisibility()V+]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;
 HSPLcom/android/server/wm/InsetsStateController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/InsetsStateController;)V
@@ -56244,49 +58072,49 @@
 HSPLcom/android/server/wm/InsetsStateController$1;-><init>(Lcom/android/server/wm/InsetsStateController;)V
 PLcom/android/server/wm/InsetsStateController$1;->lambda$notifyInsetsControlChanged$0()V
 PLcom/android/server/wm/InsetsStateController$1;->notifyInsetsControlChanged()V
-PLcom/android/server/wm/InsetsStateController;->$r8$lambda$Lm36Ods71Ln-ubo24aA0Q8kuJHU(Lcom/android/server/wm/InsetsStateController;Ljava/lang/Integer;)Lcom/android/server/wm/WindowContainerInsetsSourceProvider;
+HSPLcom/android/server/wm/InsetsStateController;->$r8$lambda$Lm36Ods71Ln-ubo24aA0Q8kuJHU(Lcom/android/server/wm/InsetsStateController;Ljava/lang/Integer;)Lcom/android/server/wm/WindowContainerInsetsSourceProvider;
 HPLcom/android/server/wm/InsetsStateController;->$r8$lambda$Lu3zi1kahJ0A9k96fqCGj2GWTiE(Lcom/android/server/wm/InsetsControlTarget;)Ljava/util/ArrayList;
 HSPLcom/android/server/wm/InsetsStateController;->$r8$lambda$OATA6iKXtwvmUkVk7TE57vsp96A(Lcom/android/server/wm/InsetsStateController;Ljava/lang/Integer;)Lcom/android/server/wm/WindowContainerInsetsSourceProvider;
 PLcom/android/server/wm/InsetsStateController;->$r8$lambda$lWrT1E6A4H9l9iIY4w_0f4yyRic(Lcom/android/server/wm/InsetsStateController;Ljava/util/ArrayList;Lcom/android/server/wm/WindowState;)V
-PLcom/android/server/wm/InsetsStateController;->$r8$lambda$ni7v3ZO6TRbLZqXOFahDjPeXTS0(Lcom/android/server/wm/InsetsStateController;)V
+HPLcom/android/server/wm/InsetsStateController;->$r8$lambda$ni7v3ZO6TRbLZqXOFahDjPeXTS0(Lcom/android/server/wm/InsetsStateController;)V
 HPLcom/android/server/wm/InsetsStateController;->$r8$lambda$ysCnX7fS-2tUJY5jK31WLy-O5oc(Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/InsetsStateController;->-$$Nest$fgetmDisplayContent(Lcom/android/server/wm/InsetsStateController;)Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/InsetsStateController;-><init>(Lcom/android/server/wm/DisplayContent;)V
 HPLcom/android/server/wm/InsetsStateController;->addToControlMaps(Lcom/android/server/wm/InsetsControlTarget;IZ)V
-HPLcom/android/server/wm/InsetsStateController;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
+HSPLcom/android/server/wm/InsetsStateController;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
 HSPLcom/android/server/wm/InsetsStateController;->getControlsForDispatch(Lcom/android/server/wm/InsetsControlTarget;)[Landroid/view/InsetsSourceControl;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/wm/InsetsStateController;->getImeSourceProvider()Lcom/android/server/wm/ImeInsetsSourceProvider;+]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;
 HSPLcom/android/server/wm/InsetsStateController;->getRawInsetsState()Landroid/view/InsetsState;
 HSPLcom/android/server/wm/InsetsStateController;->getSourceProvider(I)Lcom/android/server/wm/WindowContainerInsetsSourceProvider;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
-PLcom/android/server/wm/InsetsStateController;->getSourceProviders()Landroid/util/ArrayMap;
+HSPLcom/android/server/wm/InsetsStateController;->getSourceProviders()Landroid/util/ArrayMap;
 PLcom/android/server/wm/InsetsStateController;->isFakeTarget(ILcom/android/server/wm/InsetsControlTarget;)Z
 HPLcom/android/server/wm/InsetsStateController;->lambda$addToControlMaps$4(Lcom/android/server/wm/InsetsControlTarget;)Ljava/util/ArrayList;
 HSPLcom/android/server/wm/InsetsStateController;->lambda$getSourceProvider$1(Ljava/lang/Integer;)Lcom/android/server/wm/WindowContainerInsetsSourceProvider;
-PLcom/android/server/wm/InsetsStateController;->lambda$getSourceProvider$2(Ljava/lang/Integer;)Lcom/android/server/wm/WindowContainerInsetsSourceProvider;
+HSPLcom/android/server/wm/InsetsStateController;->lambda$getSourceProvider$2(Ljava/lang/Integer;)Lcom/android/server/wm/WindowContainerInsetsSourceProvider;
 HPLcom/android/server/wm/InsetsStateController;->lambda$new$0(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HPLcom/android/server/wm/InsetsStateController;->lambda$notifyPendingInsetsControlChanged$5()V+]Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/DisplayContent$RemoteInsetsControlTarget;,Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/InsetsPolicy$1;,Lcom/android/server/wm/InsetsStateController$1;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;
 PLcom/android/server/wm/InsetsStateController;->lambda$onDisplayFramesUpdated$3(Ljava/util/ArrayList;Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/InsetsStateController;->notifyControlChanged(Lcom/android/server/wm/InsetsControlTarget;)V
 HPLcom/android/server/wm/InsetsStateController;->notifyControlRevoked(Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/InsetsSourceProvider;)V
 HSPLcom/android/server/wm/InsetsStateController;->notifyInsetsChanged()V
-HPLcom/android/server/wm/InsetsStateController;->notifyPendingInsetsControlChanged()V+]Lcom/android/server/wm/WindowAnimator;Lcom/android/server/wm/WindowAnimator;]Landroid/util/ArraySet;Landroid/util/ArraySet;
-HPLcom/android/server/wm/InsetsStateController;->onBarControlTargetChanged(Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/InsetsControlTarget;)V+]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;
-HPLcom/android/server/wm/InsetsStateController;->onControlChanged(ILcom/android/server/wm/InsetsControlTarget;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;
-HPLcom/android/server/wm/InsetsStateController;->onControlFakeTargetChanged(ILcom/android/server/wm/InsetsControlTarget;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;
+HSPLcom/android/server/wm/InsetsStateController;->notifyPendingInsetsControlChanged()V+]Lcom/android/server/wm/WindowAnimator;Lcom/android/server/wm/WindowAnimator;]Landroid/util/ArraySet;Landroid/util/ArraySet;
+HSPLcom/android/server/wm/InsetsStateController;->onBarControlTargetChanged(Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/InsetsControlTarget;)V+]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;
+HSPLcom/android/server/wm/InsetsStateController;->onControlChanged(ILcom/android/server/wm/InsetsControlTarget;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;
+HSPLcom/android/server/wm/InsetsStateController;->onControlFakeTargetChanged(ILcom/android/server/wm/InsetsControlTarget;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;
 HSPLcom/android/server/wm/InsetsStateController;->onDisplayFramesUpdated(Z)V
 HPLcom/android/server/wm/InsetsStateController;->onImeControlTargetChanged(Lcom/android/server/wm/InsetsControlTarget;)V
 HPLcom/android/server/wm/InsetsStateController;->onInsetsModified(Lcom/android/server/wm/InsetsControlTarget;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/InsetsStateController;->onPostLayout()V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;
 HPLcom/android/server/wm/InsetsStateController;->peekSourceProvider(I)Lcom/android/server/wm/WindowContainerInsetsSourceProvider;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
-HPLcom/android/server/wm/InsetsStateController;->removeFromControlMaps(Lcom/android/server/wm/InsetsControlTarget;IZ)V
+HPLcom/android/server/wm/InsetsStateController;->removeFromControlMaps(Lcom/android/server/wm/InsetsControlTarget;IZ)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/wm/InsetsStateController;->updateAboveInsetsState(Z)V
 HSPLcom/android/server/wm/KeyguardController$KeyguardDisplayState$$ExternalSyntheticLambda0;-><init>()V
 HSPLcom/android/server/wm/KeyguardController$KeyguardDisplayState$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->$r8$lambda$NgntWvqFONtcYwGSRXuUxcQQtZo(Lcom/android/server/wm/Task;)Z
-HPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->-$$Nest$fgetmAodShowing(Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;)Z
-PLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->-$$Nest$fgetmDismissalRequested(Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;)Z
+HSPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->-$$Nest$fgetmAodShowing(Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;)Z
+HSPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->-$$Nest$fgetmDismissalRequested(Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;)Z
 HSPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->-$$Nest$fgetmKeyguardGoingAway(Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;)Z
-HPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->-$$Nest$fgetmKeyguardShowing(Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;)Z
+HSPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->-$$Nest$fgetmKeyguardShowing(Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;)Z
 HPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->-$$Nest$fgetmOccluded(Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;)Z
 HSPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->-$$Nest$fgetmRequestDismissKeyguard(Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;)Z
 PLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->-$$Nest$fgetmShowingDream(Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;)Z
@@ -56297,41 +58125,43 @@
 HPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->-$$Nest$fputmKeyguardGoingAway(Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;Z)V
 HPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->-$$Nest$fputmKeyguardShowing(Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;Z)V
 HSPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;ILcom/android/server/wm/ActivityTaskManagerInternal$SleepTokenAcquirer;)V
-PLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-HPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->dumpStatus(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+HSPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->dumpStatus(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HSPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->getRootTaskForControllingOccluding(Lcom/android/server/wm/DisplayContent;)Lcom/android/server/wm/Task;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->lambda$getRootTaskForControllingOccluding$0(Lcom/android/server/wm/Task;)Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;
-PLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->onRemoved()V
-HSPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->updateVisibility(Lcom/android/server/wm/KeyguardController;Lcom/android/server/wm/DisplayContent;)V+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Landroid/os/PowerManager;Landroid/os/PowerManager;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/KeyguardController;Lcom/android/server/wm/KeyguardController;
+HPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->onRemoved()V
+HSPLcom/android/server/wm/KeyguardController$KeyguardDisplayState;->updateVisibility(Lcom/android/server/wm/KeyguardController;Lcom/android/server/wm/DisplayContent;)V+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/KeyguardController;Lcom/android/server/wm/KeyguardController;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Landroid/os/PowerManager;Landroid/os/PowerManager;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/KeyguardController;->-$$Nest$fgetmService(Lcom/android/server/wm/KeyguardController;)Lcom/android/server/wm/ActivityTaskManagerService;
 PLcom/android/server/wm/KeyguardController;->-$$Nest$fgetmTaskSupervisor(Lcom/android/server/wm/KeyguardController;)Lcom/android/server/wm/ActivityTaskSupervisor;
 HPLcom/android/server/wm/KeyguardController;->-$$Nest$fgetmWindowManager(Lcom/android/server/wm/KeyguardController;)Lcom/android/server/wm/WindowManagerService;
+PLcom/android/server/wm/KeyguardController;->-$$Nest$mhandleKeyguardGoingAwayChanged(Lcom/android/server/wm/KeyguardController;Lcom/android/server/wm/DisplayContent;)V
 PLcom/android/server/wm/KeyguardController;->-$$Nest$mhandleOccludedChanged(Lcom/android/server/wm/KeyguardController;ILcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/KeyguardController;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskSupervisor;)V
 PLcom/android/server/wm/KeyguardController;->canDismissKeyguard()Z
 HPLcom/android/server/wm/KeyguardController;->canShowActivityWhileKeyguardShowing(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/KeyguardController;->canShowWhileOccluded(ZZ)Z
-HPLcom/android/server/wm/KeyguardController;->checkKeyguardVisibility(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/KeyguardController;Lcom/android/server/wm/KeyguardController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/KeyguardController;->checkKeyguardVisibility(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/KeyguardController;Lcom/android/server/wm/KeyguardController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/KeyguardController;->convertTransitFlags(I)I
 PLcom/android/server/wm/KeyguardController;->dismissKeyguard(Landroid/os/IBinder;Lcom/android/internal/policy/IKeyguardDismissCallback;Ljava/lang/CharSequence;)V
 HPLcom/android/server/wm/KeyguardController;->dismissMultiWindowModeForTaskIfNeeded(ILcom/android/server/wm/Task;)V
-HPLcom/android/server/wm/KeyguardController;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/wm/KeyguardController;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-PLcom/android/server/wm/KeyguardController;->dumpDisplayStates(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HSPLcom/android/server/wm/KeyguardController;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/wm/KeyguardController;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+HSPLcom/android/server/wm/KeyguardController;->dumpDisplayStates(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/wm/KeyguardController;->failCallback(Lcom/android/internal/policy/IKeyguardDismissCallback;)V
 HSPLcom/android/server/wm/KeyguardController;->getDisplayState(I)Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/wm/KeyguardController;->handleDismissKeyguard(I)V
+PLcom/android/server/wm/KeyguardController;->handleKeyguardGoingAwayChanged(Lcom/android/server/wm/DisplayContent;)V
 HPLcom/android/server/wm/KeyguardController;->handleOccludedChanged(ILcom/android/server/wm/ActivityRecord;)V
 HPLcom/android/server/wm/KeyguardController;->isAodShowing(I)Z
 HPLcom/android/server/wm/KeyguardController;->isDisplayOccluded(I)Z
 HSPLcom/android/server/wm/KeyguardController;->isKeyguardGoingAway(I)Z
-HPLcom/android/server/wm/KeyguardController;->isKeyguardLocked(I)Z+]Lcom/android/server/wm/KeyguardController;Lcom/android/server/wm/KeyguardController;
-HPLcom/android/server/wm/KeyguardController;->isKeyguardOrAodShowing(I)Z+]Lcom/android/server/wm/KeyguardController;Lcom/android/server/wm/KeyguardController;
+HSPLcom/android/server/wm/KeyguardController;->isKeyguardLocked(I)Z+]Lcom/android/server/wm/KeyguardController;Lcom/android/server/wm/KeyguardController;
+HSPLcom/android/server/wm/KeyguardController;->isKeyguardOrAodShowing(I)Z+]Lcom/android/server/wm/KeyguardController;Lcom/android/server/wm/KeyguardController;
 HPLcom/android/server/wm/KeyguardController;->isKeyguardShowing(I)Z
 HPLcom/android/server/wm/KeyguardController;->isKeyguardUnoccludedOrAodShowing(I)Z
 PLcom/android/server/wm/KeyguardController;->isShowingDream()Z
 HPLcom/android/server/wm/KeyguardController;->keyguardGoingAway(II)V
-PLcom/android/server/wm/KeyguardController;->onDisplayRemoved(I)V
+HPLcom/android/server/wm/KeyguardController;->onDisplayRemoved(I)V
 HPLcom/android/server/wm/KeyguardController;->setKeyguardShown(IZZ)V
 HPLcom/android/server/wm/KeyguardController;->setWakeTransitionReady()V
 HSPLcom/android/server/wm/KeyguardController;->setWindowManager(Lcom/android/server/wm/WindowManagerService;)V
@@ -56339,7 +58169,7 @@
 HPLcom/android/server/wm/KeyguardController;->updateKeyguardSleepToken()V
 HPLcom/android/server/wm/KeyguardController;->updateKeyguardSleepToken(I)V
 HSPLcom/android/server/wm/KeyguardController;->updateVisibility()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/KeyguardController;Lcom/android/server/wm/KeyguardController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;Lcom/android/server/wm/KeyguardController$KeyguardDisplayState;
-PLcom/android/server/wm/KeyguardController;->writeDisplayStatesToProto(Landroid/util/proto/ProtoOutputStream;J)V
+HPLcom/android/server/wm/KeyguardController;->writeDisplayStatesToProto(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLcom/android/server/wm/KeyguardDisableHandler$1;-><init>(Lcom/android/server/wm/KeyguardDisableHandler;)V
 PLcom/android/server/wm/KeyguardDisableHandler$1;->acquired(I)V
 PLcom/android/server/wm/KeyguardDisableHandler$1;->released(I)V
@@ -56353,16 +58183,16 @@
 PLcom/android/server/wm/KeyguardDisableHandler;->disableKeyguard(Landroid/os/IBinder;Ljava/lang/String;II)V
 PLcom/android/server/wm/KeyguardDisableHandler;->reenableKeyguard(Landroid/os/IBinder;II)V
 PLcom/android/server/wm/KeyguardDisableHandler;->setCurrentUser(I)V
-HPLcom/android/server/wm/KeyguardDisableHandler;->shouldKeyguardBeEnabled(I)Z
+HPLcom/android/server/wm/KeyguardDisableHandler;->shouldKeyguardBeEnabled(I)Z+]Lcom/android/server/wm/KeyguardDisableHandler$Injector;Lcom/android/server/wm/KeyguardDisableHandler$2;
 HPLcom/android/server/wm/KeyguardDisableHandler;->updateKeyguardEnabled(I)V
-HPLcom/android/server/wm/KeyguardDisableHandler;->updateKeyguardEnabledLocked(I)V
+HPLcom/android/server/wm/KeyguardDisableHandler;->updateKeyguardEnabledLocked(I)V+]Lcom/android/server/wm/KeyguardDisableHandler$Injector;Lcom/android/server/wm/KeyguardDisableHandler$2;]Lcom/android/server/wm/KeyguardDisableHandler;Lcom/android/server/wm/KeyguardDisableHandler;
 PLcom/android/server/wm/KeyguardDisableHandler;->watcherForCallingUid(Landroid/os/IBinder;I)Lcom/android/server/utils/UserTokenWatcher;
 PLcom/android/server/wm/LaunchObserverRegistryImpl$$ExternalSyntheticLambda0;-><init>()V
 PLcom/android/server/wm/LaunchObserverRegistryImpl$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HPLcom/android/server/wm/LaunchObserverRegistryImpl$$ExternalSyntheticLambda1;-><init>()V
 HPLcom/android/server/wm/LaunchObserverRegistryImpl$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-PLcom/android/server/wm/LaunchObserverRegistryImpl$$ExternalSyntheticLambda2;-><init>()V
-HPLcom/android/server/wm/LaunchObserverRegistryImpl$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/wm/LaunchObserverRegistryImpl$$ExternalSyntheticLambda2;-><init>()V
+HSPLcom/android/server/wm/LaunchObserverRegistryImpl$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/wm/LaunchObserverRegistryImpl$$ExternalSyntheticLambda3;-><init>()V
 HSPLcom/android/server/wm/LaunchObserverRegistryImpl$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/LaunchObserverRegistryImpl$$ExternalSyntheticLambda4;-><init>()V
@@ -56370,37 +58200,38 @@
 HSPLcom/android/server/wm/LaunchObserverRegistryImpl$$ExternalSyntheticLambda5;-><init>()V
 HSPLcom/android/server/wm/LaunchObserverRegistryImpl$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/LaunchObserverRegistryImpl$$ExternalSyntheticLambda6;-><init>()V
-PLcom/android/server/wm/LaunchObserverRegistryImpl$$ExternalSyntheticLambda6;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/wm/LaunchObserverRegistryImpl$$ExternalSyntheticLambda6;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/LaunchObserverRegistryImpl;->$r8$lambda$-KApXNcaPelaEWtOxHlzraoZrXI(Lcom/android/server/wm/LaunchObserverRegistryImpl;J)V
 HSPLcom/android/server/wm/LaunchObserverRegistryImpl;->$r8$lambda$3yXr3fPkQeQlo2kVwjBx2OgNUek(Lcom/android/server/wm/LaunchObserverRegistryImpl;Lcom/android/server/wm/ActivityMetricsLaunchObserver;)V
-PLcom/android/server/wm/LaunchObserverRegistryImpl;->$r8$lambda$6bOBBGgLzG1cciMO1_zWnNveVRU(Lcom/android/server/wm/LaunchObserverRegistryImpl;JLandroid/content/ComponentName;I)V
+HSPLcom/android/server/wm/LaunchObserverRegistryImpl;->$r8$lambda$6bOBBGgLzG1cciMO1_zWnNveVRU(Lcom/android/server/wm/LaunchObserverRegistryImpl;JLandroid/content/ComponentName;I)V
 PLcom/android/server/wm/LaunchObserverRegistryImpl;->$r8$lambda$B2DaAlJhVpGcOBBcucGwAGe82ow(Lcom/android/server/wm/LaunchObserverRegistryImpl;J)V
 PLcom/android/server/wm/LaunchObserverRegistryImpl;->$r8$lambda$XRZxoIv6rGFHG8jvMRXVl6WGLr8(Lcom/android/server/wm/LaunchObserverRegistryImpl;JJ)V
 PLcom/android/server/wm/LaunchObserverRegistryImpl;->$r8$lambda$Y1uRFK0a8FWJ1QBVSRheLhbZHfE(Lcom/android/server/wm/LaunchObserverRegistryImpl;JLandroid/content/ComponentName;J)V
 HSPLcom/android/server/wm/LaunchObserverRegistryImpl;->$r8$lambda$hD_tFWAb0N1ebiDn9isSO8uhbCA(Lcom/android/server/wm/LaunchObserverRegistryImpl;Landroid/content/Intent;J)V
 HSPLcom/android/server/wm/LaunchObserverRegistryImpl;-><init>(Landroid/os/Looper;)V
-PLcom/android/server/wm/LaunchObserverRegistryImpl;->handleOnActivityLaunchCancelled(J)V
+HPLcom/android/server/wm/LaunchObserverRegistryImpl;->handleOnActivityLaunchCancelled(J)V
 HPLcom/android/server/wm/LaunchObserverRegistryImpl;->handleOnActivityLaunchFinished(JLandroid/content/ComponentName;J)V
-HPLcom/android/server/wm/LaunchObserverRegistryImpl;->handleOnActivityLaunched(JLandroid/content/ComponentName;I)V
+HSPLcom/android/server/wm/LaunchObserverRegistryImpl;->handleOnActivityLaunched(JLandroid/content/ComponentName;I)V
 HPLcom/android/server/wm/LaunchObserverRegistryImpl;->handleOnIntentFailed(J)V
 HSPLcom/android/server/wm/LaunchObserverRegistryImpl;->handleOnIntentStarted(Landroid/content/Intent;J)V
 PLcom/android/server/wm/LaunchObserverRegistryImpl;->handleOnReportFullyDrawn(JJ)V
 HSPLcom/android/server/wm/LaunchObserverRegistryImpl;->handleRegisterLaunchObserver(Lcom/android/server/wm/ActivityMetricsLaunchObserver;)V
-PLcom/android/server/wm/LaunchObserverRegistryImpl;->onActivityLaunchCancelled(J)V
+HPLcom/android/server/wm/LaunchObserverRegistryImpl;->onActivityLaunchCancelled(J)V
 HPLcom/android/server/wm/LaunchObserverRegistryImpl;->onActivityLaunchFinished(JLandroid/content/ComponentName;J)V
-HPLcom/android/server/wm/LaunchObserverRegistryImpl;->onActivityLaunched(JLandroid/content/ComponentName;I)V
+HSPLcom/android/server/wm/LaunchObserverRegistryImpl;->onActivityLaunched(JLandroid/content/ComponentName;I)V
 HPLcom/android/server/wm/LaunchObserverRegistryImpl;->onIntentFailed(J)V
 HSPLcom/android/server/wm/LaunchObserverRegistryImpl;->onIntentStarted(Landroid/content/Intent;J)V
 PLcom/android/server/wm/LaunchObserverRegistryImpl;->onReportFullyDrawn(JJ)V
 HSPLcom/android/server/wm/LaunchObserverRegistryImpl;->registerLaunchObserver(Lcom/android/server/wm/ActivityMetricsLaunchObserver;)V
 HSPLcom/android/server/wm/LaunchParamsController$LaunchParams;-><init>()V
-HPLcom/android/server/wm/LaunchParamsController$LaunchParams;->hasPreferredTaskDisplayArea()Z
-HPLcom/android/server/wm/LaunchParamsController$LaunchParams;->isEmpty()Z
+HSPLcom/android/server/wm/LaunchParamsController$LaunchParams;->hasPreferredTaskDisplayArea()Z
+PLcom/android/server/wm/LaunchParamsController$LaunchParams;->hasWindowingMode()Z
+HSPLcom/android/server/wm/LaunchParamsController$LaunchParams;->isEmpty()Z
 HSPLcom/android/server/wm/LaunchParamsController$LaunchParams;->reset()V+]Landroid/graphics/Rect;Landroid/graphics/Rect;
-HPLcom/android/server/wm/LaunchParamsController$LaunchParams;->set(Lcom/android/server/wm/LaunchParamsController$LaunchParams;)V
+HSPLcom/android/server/wm/LaunchParamsController$LaunchParams;->set(Lcom/android/server/wm/LaunchParamsController$LaunchParams;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HSPLcom/android/server/wm/LaunchParamsController;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/LaunchParamsPersister;)V
-HPLcom/android/server/wm/LaunchParamsController;->calculate(Lcom/android/server/wm/Task;Landroid/content/pm/ActivityInfo$WindowLayout;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Lcom/android/server/wm/ActivityStarter$Request;ILcom/android/server/wm/LaunchParamsController$LaunchParams;)V
-HPLcom/android/server/wm/LaunchParamsController;->layoutTask(Lcom/android/server/wm/Task;Landroid/content/pm/ActivityInfo$WindowLayout;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)Z
+HSPLcom/android/server/wm/LaunchParamsController;->calculate(Lcom/android/server/wm/Task;Landroid/content/pm/ActivityInfo$WindowLayout;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Lcom/android/server/wm/ActivityStarter$Request;ILcom/android/server/wm/LaunchParamsController$LaunchParams;)V
+HSPLcom/android/server/wm/LaunchParamsController;->layoutTask(Lcom/android/server/wm/Task;Landroid/content/pm/ActivityInfo$WindowLayout;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)Z
 HSPLcom/android/server/wm/LaunchParamsController;->registerDefaultModifiers(Lcom/android/server/wm/ActivityTaskSupervisor;)V
 HSPLcom/android/server/wm/LaunchParamsController;->registerModifier(Lcom/android/server/wm/LaunchParamsController$LaunchParamsModifier;)V
 HSPLcom/android/server/wm/LaunchParamsPersister$$ExternalSyntheticLambda0;-><init>()V
@@ -56413,16 +58244,20 @@
 HSPLcom/android/server/wm/LaunchParamsPersister$PackageListObserver;-><init>(Lcom/android/server/wm/LaunchParamsPersister;Lcom/android/server/wm/LaunchParamsPersister$PackageListObserver-IA;)V
 PLcom/android/server/wm/LaunchParamsPersister$PackageListObserver;->onPackageAdded(Ljava/lang/String;I)V
 PLcom/android/server/wm/LaunchParamsPersister$PackageListObserver;->onPackageRemoved(Ljava/lang/String;I)V
+PLcom/android/server/wm/LaunchParamsPersister$PersistableLaunchParams;-><init>(Lcom/android/server/wm/LaunchParamsPersister;)V
+PLcom/android/server/wm/LaunchParamsPersister$PersistableLaunchParams;-><init>(Lcom/android/server/wm/LaunchParamsPersister;Lcom/android/server/wm/LaunchParamsPersister$PersistableLaunchParams-IA;)V
+PLcom/android/server/wm/LaunchParamsPersister$PersistableLaunchParams;->restore(Ljava/io/File;Landroid/util/TypedXmlPullParser;)V
 PLcom/android/server/wm/LaunchParamsPersister;->-$$Nest$fgetmSupervisor(Lcom/android/server/wm/LaunchParamsPersister;)Lcom/android/server/wm/ActivityTaskSupervisor;
 HSPLcom/android/server/wm/LaunchParamsPersister;-><init>(Lcom/android/server/wm/PersisterQueue;Lcom/android/server/wm/ActivityTaskSupervisor;)V
 HSPLcom/android/server/wm/LaunchParamsPersister;-><init>(Lcom/android/server/wm/PersisterQueue;Lcom/android/server/wm/ActivityTaskSupervisor;Ljava/util/function/IntFunction;)V
+PLcom/android/server/wm/LaunchParamsPersister;->addComponentNameToLaunchParamAffinityMapIfNotNull(Landroid/content/ComponentName;Ljava/lang/String;)V
 PLcom/android/server/wm/LaunchParamsPersister;->getLaunchParamFolder(I)Ljava/io/File;
-HPLcom/android/server/wm/LaunchParamsPersister;->getLaunchParams(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/LaunchParamsController$LaunchParams;)V
+HSPLcom/android/server/wm/LaunchParamsPersister;->getLaunchParams(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/LaunchParamsController$LaunchParams;)V
 PLcom/android/server/wm/LaunchParamsPersister;->loadLaunchParams(I)V
 PLcom/android/server/wm/LaunchParamsPersister;->onCleanupUser(I)V
 HSPLcom/android/server/wm/LaunchParamsPersister;->onSystemReady()V
 PLcom/android/server/wm/LaunchParamsPersister;->onUnlockUser(I)V
-PLcom/android/server/wm/LaunchParamsPersister;->removeRecordForPackage(Ljava/lang/String;)V
+HPLcom/android/server/wm/LaunchParamsPersister;->removeRecordForPackage(Ljava/lang/String;)V
 PLcom/android/server/wm/Letterbox$DoubleTapListener;-><init>(Lcom/android/server/wm/Letterbox;)V
 PLcom/android/server/wm/Letterbox$DoubleTapListener;-><init>(Lcom/android/server/wm/Letterbox;Lcom/android/server/wm/Letterbox$DoubleTapListener-IA;)V
 PLcom/android/server/wm/Letterbox$DoubleTapListener;->onDoubleTapEvent(Landroid/view/MotionEvent;)Z
@@ -56436,13 +58271,13 @@
 HPLcom/android/server/wm/Letterbox$LetterboxSurface;->applySurfaceChanges(Landroid/view/SurfaceControl$Transaction;)V
 HPLcom/android/server/wm/Letterbox$LetterboxSurface;->attachInput(Lcom/android/server/wm/WindowState;)V
 HPLcom/android/server/wm/Letterbox$LetterboxSurface;->createSurface(Landroid/view/SurfaceControl$Transaction;)V
-PLcom/android/server/wm/Letterbox$LetterboxSurface;->getHeight()I
-PLcom/android/server/wm/Letterbox$LetterboxSurface;->getRgbColorArray()[F
-PLcom/android/server/wm/Letterbox$LetterboxSurface;->getWidth()I
+HPLcom/android/server/wm/Letterbox$LetterboxSurface;->getHeight()I
+HPLcom/android/server/wm/Letterbox$LetterboxSurface;->getRgbColorArray()[F
+HPLcom/android/server/wm/Letterbox$LetterboxSurface;->getWidth()I
 HPLcom/android/server/wm/Letterbox$LetterboxSurface;->layout(IIIILandroid/graphics/Point;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HPLcom/android/server/wm/Letterbox$LetterboxSurface;->needsApplySurfaceChanges()Z+]Ljava/util/function/Supplier;Lcom/android/server/wm/LetterboxUiController$$ExternalSyntheticLambda2;,Lcom/android/server/wm/LetterboxUiController$$ExternalSyntheticLambda3;]Ljava/lang/Boolean;Ljava/lang/Boolean;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/graphics/Color;Landroid/graphics/Color;
 HPLcom/android/server/wm/Letterbox$LetterboxSurface;->remove()V
-PLcom/android/server/wm/Letterbox$LetterboxSurface;->updateAlphaAndBlur(Landroid/view/SurfaceControl$Transaction;)V
+HPLcom/android/server/wm/Letterbox$LetterboxSurface;->updateAlphaAndBlur(Landroid/view/SurfaceControl$Transaction;)V
 HPLcom/android/server/wm/Letterbox$TapEventReceiver;-><init>(Lcom/android/server/wm/Letterbox;Landroid/view/InputChannel;Landroid/content/Context;)V
 PLcom/android/server/wm/Letterbox$TapEventReceiver;->onInputEvent(Landroid/view/InputEvent;)V
 HPLcom/android/server/wm/Letterbox;->-$$Nest$fgetmColorSupplier(Lcom/android/server/wm/Letterbox;)Ljava/util/function/Supplier;
@@ -56455,22 +58290,22 @@
 HPLcom/android/server/wm/Letterbox;->applySurfaceChanges(Landroid/view/SurfaceControl$Transaction;)V
 PLcom/android/server/wm/Letterbox;->attachInput(Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/Letterbox;->destroy()V
-PLcom/android/server/wm/Letterbox;->getInnerFrame()Landroid/graphics/Rect;
+HPLcom/android/server/wm/Letterbox;->getInnerFrame()Landroid/graphics/Rect;
 HPLcom/android/server/wm/Letterbox;->getInsets()Landroid/graphics/Rect;
 HPLcom/android/server/wm/Letterbox;->hide()V
-HPLcom/android/server/wm/Letterbox;->layout(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Point;)V
+HPLcom/android/server/wm/Letterbox;->layout(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Point;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/Letterbox$LetterboxSurface;Lcom/android/server/wm/Letterbox$LetterboxSurface;
 HPLcom/android/server/wm/Letterbox;->needsApplySurfaceChanges()Z+]Lcom/android/server/wm/Letterbox;Lcom/android/server/wm/Letterbox;]Lcom/android/server/wm/Letterbox$LetterboxSurface;Lcom/android/server/wm/Letterbox$LetterboxSurface;
 HPLcom/android/server/wm/Letterbox;->notIntersectsOrFullyContains(Landroid/graphics/Rect;)Z+]Landroid/graphics/Rect;Landroid/graphics/Rect;
 PLcom/android/server/wm/Letterbox;->onMovedToDisplay(I)V
-HPLcom/android/server/wm/Letterbox;->useFullWindowSurface()Z
+HPLcom/android/server/wm/Letterbox;->useFullWindowSurface()Z+]Ljava/util/function/Supplier;Lcom/android/server/wm/LetterboxUiController$$ExternalSyntheticLambda1;,Lcom/android/server/wm/LetterboxUiController$$ExternalSyntheticLambda3;]Ljava/lang/Boolean;Ljava/lang/Boolean;
 HSPLcom/android/server/wm/LetterboxConfiguration;-><init>(Landroid/content/Context;)V
 PLcom/android/server/wm/LetterboxConfiguration;->getFixedOrientationLetterboxAspectRatio()F
-PLcom/android/server/wm/LetterboxConfiguration;->getHorizontalMultiplierForReachability()F
-HPLcom/android/server/wm/LetterboxConfiguration;->getIsEducationEnabled()Z
+HPLcom/android/server/wm/LetterboxConfiguration;->getHorizontalMultiplierForReachability()F
+HSPLcom/android/server/wm/LetterboxConfiguration;->getIsEducationEnabled()Z
 PLcom/android/server/wm/LetterboxConfiguration;->getIsReachabilityEnabled()Z
 HPLcom/android/server/wm/LetterboxConfiguration;->getLetterboxActivityCornersRadius()I
 HPLcom/android/server/wm/LetterboxConfiguration;->getLetterboxBackgroundColor()Landroid/graphics/Color;
-HPLcom/android/server/wm/LetterboxConfiguration;->getLetterboxBackgroundType()I
+HSPLcom/android/server/wm/LetterboxConfiguration;->getLetterboxBackgroundType()I
 PLcom/android/server/wm/LetterboxConfiguration;->getLetterboxHorizontalPositionMultiplier()F
 HPLcom/android/server/wm/LetterboxConfiguration;->isLetterboxActivityCornersRounded()Z
 PLcom/android/server/wm/LetterboxConfiguration;->letterboxBackgroundTypeToString(I)Ljava/lang/String;
@@ -56483,7 +58318,7 @@
 PLcom/android/server/wm/LetterboxUiController$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/wm/LetterboxUiController;)V
 HPLcom/android/server/wm/LetterboxUiController$$ExternalSyntheticLambda2;->get()Ljava/lang/Object;
 PLcom/android/server/wm/LetterboxUiController$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/wm/LetterboxUiController;)V
-HPLcom/android/server/wm/LetterboxUiController$$ExternalSyntheticLambda3;->get()Ljava/lang/Object;
+HPLcom/android/server/wm/LetterboxUiController$$ExternalSyntheticLambda3;->get()Ljava/lang/Object;+]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;
 PLcom/android/server/wm/LetterboxUiController$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/wm/LetterboxUiController;)V
 PLcom/android/server/wm/LetterboxUiController$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/wm/LetterboxUiController;)V
 PLcom/android/server/wm/LetterboxUiController$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/wm/LetterboxUiController;)V
@@ -56492,33 +58327,33 @@
 PLcom/android/server/wm/LetterboxUiController;->$r8$lambda$OA0yd67wVO249Te3u1OaGYhIhGI(Lcom/android/server/wm/LetterboxUiController;)Landroid/view/SurfaceControl$Builder;
 HPLcom/android/server/wm/LetterboxUiController;->$r8$lambda$fbXQOb38bMYnfh1EWVA42TFBP0o(Lcom/android/server/wm/LetterboxUiController;)Landroid/graphics/Color;
 HPLcom/android/server/wm/LetterboxUiController;->$r8$lambda$jUi2GqCCynDmaylgZ_7r_wTiw1c(Lcom/android/server/wm/LetterboxUiController;)Z
-HPLcom/android/server/wm/LetterboxUiController;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/LetterboxUiController;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/ActivityRecord;)V
 HPLcom/android/server/wm/LetterboxUiController;->destroy()V
-PLcom/android/server/wm/LetterboxUiController;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/wm/LetterboxUiController;->getFixedOrientationLetterboxAspectRatio(Landroid/content/res/Configuration;)F
-PLcom/android/server/wm/LetterboxUiController;->getHorizontalPositionMultiplier(Landroid/content/res/Configuration;)F
+HPLcom/android/server/wm/LetterboxUiController;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/wm/LetterboxUiController;->getFixedOrientationLetterboxAspectRatio(Landroid/content/res/Configuration;)F
+HPLcom/android/server/wm/LetterboxUiController;->getHorizontalPositionMultiplier(Landroid/content/res/Configuration;)F
 HPLcom/android/server/wm/LetterboxUiController;->getInsetsStateCornerRadius(Landroid/view/InsetsState;I)I
-HPLcom/android/server/wm/LetterboxUiController;->getLetterboxBackgroundColor()Landroid/graphics/Color;
-HPLcom/android/server/wm/LetterboxUiController;->getLetterboxInnerBounds(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/LetterboxUiController;->getLetterboxBackgroundColor()Landroid/graphics/Color;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/LetterboxUiController;->getLetterboxInnerBounds(Landroid/graphics/Rect;)V
 HPLcom/android/server/wm/LetterboxUiController;->getLetterboxInsets()Landroid/graphics/Rect;
 PLcom/android/server/wm/LetterboxUiController;->getLetterboxReasonString(Lcom/android/server/wm/WindowState;)Ljava/lang/String;
-HPLcom/android/server/wm/LetterboxUiController;->getResources()Landroid/content/res/Resources;
+HSPLcom/android/server/wm/LetterboxUiController;->getResources()Landroid/content/res/Resources;
 HPLcom/android/server/wm/LetterboxUiController;->getRoundedCorners(Landroid/view/InsetsState;)I
 PLcom/android/server/wm/LetterboxUiController;->handleDoubleTap(I)V
-HPLcom/android/server/wm/LetterboxUiController;->hasWallpaperBackgroudForLetterbox()Z
+HSPLcom/android/server/wm/LetterboxUiController;->hasWallpaperBackgroudForLetterbox()Z
 HPLcom/android/server/wm/LetterboxUiController;->isFullyTransparentBarAllowed(Landroid/graphics/Rect;)Z
-HPLcom/android/server/wm/LetterboxUiController;->isLetterboxedNotForDisplayCutout(Lcom/android/server/wm/WindowState;)Z
+HSPLcom/android/server/wm/LetterboxUiController;->isLetterboxedNotForDisplayCutout(Lcom/android/server/wm/WindowState;)Z
 PLcom/android/server/wm/LetterboxUiController;->isReachabilityEnabled()Z
-PLcom/android/server/wm/LetterboxUiController;->isReachabilityEnabled(Landroid/content/res/Configuration;)Z
-HPLcom/android/server/wm/LetterboxUiController;->isSurfaceReadyAndVisible(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/LetterboxUiController;->isReachabilityEnabled(Landroid/content/res/Configuration;)Z
+HSPLcom/android/server/wm/LetterboxUiController;->isSurfaceReadyAndVisible(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/LetterboxUiController;->lambda$layoutLetterbox$0()Landroid/view/SurfaceControl$Builder;
-HPLcom/android/server/wm/LetterboxUiController;->layoutLetterbox(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/Task;]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;]Lcom/android/server/wm/Letterbox;Lcom/android/server/wm/Letterbox;]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/LetterboxUiController;->layoutLetterbox(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;]Lcom/android/server/wm/Letterbox;Lcom/android/server/wm/Letterbox;]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/LetterboxUiController;->onMovedToDisplay(I)V
 HPLcom/android/server/wm/LetterboxUiController;->shouldLetterboxHaveRoundedCorners()Z
-HPLcom/android/server/wm/LetterboxUiController;->shouldShowLetterboxUi(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;
-HPLcom/android/server/wm/LetterboxUiController;->updateLetterboxSurface(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;]Lcom/android/server/wm/Letterbox;Lcom/android/server/wm/Letterbox;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/LetterboxUiController;->updateRoundedCorners(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Landroid/view/InsetsState;Landroid/view/InsetsState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;]Lcom/android/server/wm/LetterboxConfiguration;Lcom/android/server/wm/LetterboxConfiguration;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/LetterboxUiController;->updateWallpaperForLetterbox(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/LetterboxConfiguration;Lcom/android/server/wm/LetterboxConfiguration;
+HSPLcom/android/server/wm/LetterboxUiController;->shouldShowLetterboxUi(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;
+HSPLcom/android/server/wm/LetterboxUiController;->updateLetterboxSurface(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;]Lcom/android/server/wm/Letterbox;Lcom/android/server/wm/Letterbox;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/LetterboxUiController;->updateRoundedCorners(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Landroid/view/InsetsState;Landroid/view/InsetsState;]Lcom/android/server/wm/LetterboxConfiguration;Lcom/android/server/wm/LetterboxConfiguration;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;]Lcom/android/server/wm/LetterboxUiController;Lcom/android/server/wm/LetterboxUiController;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/LetterboxUiController;->updateWallpaperForLetterbox(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/LetterboxConfiguration;Lcom/android/server/wm/LetterboxConfiguration;
 HPLcom/android/server/wm/LocalAnimationAdapter$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/LocalAnimationAdapter;Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;I)V
 HPLcom/android/server/wm/LocalAnimationAdapter$$ExternalSyntheticLambda0;->run()V
 PLcom/android/server/wm/LocalAnimationAdapter$AnimationSpec;->asWindowAnimationSpec()Lcom/android/server/wm/WindowAnimationSpec;
@@ -56533,7 +58368,7 @@
 HPLcom/android/server/wm/LocalAnimationAdapter;->getDurationHint()J
 HPLcom/android/server/wm/LocalAnimationAdapter;->getShowBackground()Z
 HPLcom/android/server/wm/LocalAnimationAdapter;->getShowWallpaper()Z
-PLcom/android/server/wm/LocalAnimationAdapter;->getStatusBarTransitionsStartTime()J
+HPLcom/android/server/wm/LocalAnimationAdapter;->getStatusBarTransitionsStartTime()J
 HPLcom/android/server/wm/LocalAnimationAdapter;->lambda$startAnimation$0(Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;I)V
 PLcom/android/server/wm/LocalAnimationAdapter;->onAnimationCancelled(Landroid/view/SurfaceControl;)V
 HPLcom/android/server/wm/LocalAnimationAdapter;->startAnimation(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;ILcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)V
@@ -56555,7 +58390,7 @@
 PLcom/android/server/wm/LockTaskController;->canMoveTaskToBack(Lcom/android/server/wm/Task;)Z
 HPLcom/android/server/wm/LockTaskController;->clearLockedTask(Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/LockTaskController;->clearLockedTasks(Ljava/lang/String;)V
-HPLcom/android/server/wm/LockTaskController;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HSPLcom/android/server/wm/LockTaskController;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/wm/LockTaskController;->getDevicePolicyManager()Landroid/app/admin/IDevicePolicyManager;
 PLcom/android/server/wm/LockTaskController;->getLockPatternUtils()Lcom/android/internal/widget/LockPatternUtils;
 HSPLcom/android/server/wm/LockTaskController;->getLockTaskAuth(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/Task;)I
@@ -56565,21 +58400,21 @@
 PLcom/android/server/wm/LockTaskController;->getStatusBarService()Lcom/android/internal/statusbar/IStatusBarService;
 HSPLcom/android/server/wm/LockTaskController;->isActivityAllowed(ILjava/lang/String;I)Z
 PLcom/android/server/wm/LockTaskController;->isBaseOfLockedTask(Ljava/lang/String;)Z
-HPLcom/android/server/wm/LockTaskController;->isKeyguardAllowed(I)Z
+HSPLcom/android/server/wm/LockTaskController;->isKeyguardAllowed(I)Z
 HPLcom/android/server/wm/LockTaskController;->isLockTaskModeViolation(Lcom/android/server/wm/Task;)Z
 HPLcom/android/server/wm/LockTaskController;->isLockTaskModeViolation(Lcom/android/server/wm/Task;Z)Z
-HPLcom/android/server/wm/LockTaskController;->isLockTaskModeViolationInternal(Lcom/android/server/wm/WindowContainer;ILandroid/content/Intent;I)Z
-HPLcom/android/server/wm/LockTaskController;->isNewTaskLockTaskModeViolation(Lcom/android/server/wm/ActivityRecord;)Z
-HPLcom/android/server/wm/LockTaskController;->isPackageAllowlisted(ILjava/lang/String;)Z
+HSPLcom/android/server/wm/LockTaskController;->isLockTaskModeViolationInternal(Lcom/android/server/wm/WindowContainer;ILandroid/content/Intent;I)Z
+HSPLcom/android/server/wm/LockTaskController;->isNewTaskLockTaskModeViolation(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/LockTaskController;->isPackageAllowlisted(ILjava/lang/String;)Z+]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/wm/LockTaskController;->isRecentsAllowed(I)Z
 HPLcom/android/server/wm/LockTaskController;->isRootTask(Lcom/android/server/wm/Task;)Z
-PLcom/android/server/wm/LockTaskController;->isTaskAuthAllowlisted(I)Z
+HSPLcom/android/server/wm/LockTaskController;->isTaskAuthAllowlisted(I)Z
 HPLcom/android/server/wm/LockTaskController;->isTaskLocked(Lcom/android/server/wm/Task;)Z
-HPLcom/android/server/wm/LockTaskController;->isWirelessEmergencyAlert(Landroid/content/Intent;)Z
+HSPLcom/android/server/wm/LockTaskController;->isWirelessEmergencyAlert(Landroid/content/Intent;)Z
 PLcom/android/server/wm/LockTaskController;->lambda$removeLockedTask$2(Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/LockTaskController;->lambda$setLockTaskMode$3(Landroid/content/Intent;Lcom/android/server/wm/Task;I)V
 PLcom/android/server/wm/LockTaskController;->lockKeyguardIfNeeded(I)V
-PLcom/android/server/wm/LockTaskController;->lockTaskModeToString()Ljava/lang/String;
+HSPLcom/android/server/wm/LockTaskController;->lockTaskModeToString()Ljava/lang/String;
 PLcom/android/server/wm/LockTaskController;->performStartLockTask(Ljava/lang/String;II)V
 PLcom/android/server/wm/LockTaskController;->performStopLockTask(I)V
 PLcom/android/server/wm/LockTaskController;->removeLockedTask(Lcom/android/server/wm/Task;)V
@@ -56594,12 +58429,12 @@
 HSPLcom/android/server/wm/LockTaskController;->updateLockTaskFeatures(II)V
 HSPLcom/android/server/wm/LockTaskController;->updateLockTaskPackages(I[Ljava/lang/String;)V
 HSPLcom/android/server/wm/MirrorActiveUids;-><init>()V
-PLcom/android/server/wm/MirrorActiveUids;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HSPLcom/android/server/wm/MirrorActiveUids;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HPLcom/android/server/wm/MirrorActiveUids;->getUidState(I)I
-HPLcom/android/server/wm/MirrorActiveUids;->hasNonAppVisibleWindow(I)Z+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
+HSPLcom/android/server/wm/MirrorActiveUids;->hasNonAppVisibleWindow(I)Z+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
 HSPLcom/android/server/wm/MirrorActiveUids;->onNonAppSurfaceVisibilityChanged(IZ)V
-HSPLcom/android/server/wm/MirrorActiveUids;->onUidActive(II)V
-HSPLcom/android/server/wm/MirrorActiveUids;->onUidInactive(I)V
+HSPLcom/android/server/wm/MirrorActiveUids;->onUidActive(II)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
+HSPLcom/android/server/wm/MirrorActiveUids;->onUidInactive(I)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
 HSPLcom/android/server/wm/MirrorActiveUids;->onUidProcStateChanged(II)V+]Landroid/util/SparseIntArray;Landroid/util/SparseIntArray;
 HPLcom/android/server/wm/NavBarFadeAnimationController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/NavBarFadeAnimationController;Z)V
 HPLcom/android/server/wm/NavBarFadeAnimationController$$ExternalSyntheticLambda0;->run()V
@@ -56623,19 +58458,22 @@
 HPLcom/android/server/wm/NonAppWindowAnimationAdapter;->createRemoteAnimationTarget()Landroid/view/RemoteAnimationTarget;
 PLcom/android/server/wm/NonAppWindowAnimationAdapter;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/wm/NonAppWindowAnimationAdapter;->dumpDebug(Landroid/util/proto/ProtoOutputStream;)V
+PLcom/android/server/wm/NonAppWindowAnimationAdapter;->getDurationHint()J
 PLcom/android/server/wm/NonAppWindowAnimationAdapter;->getLastAnimationType()I
 PLcom/android/server/wm/NonAppWindowAnimationAdapter;->getLeash()Landroid/view/SurfaceControl;
 PLcom/android/server/wm/NonAppWindowAnimationAdapter;->getLeashFinishedCallback()Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;
+PLcom/android/server/wm/NonAppWindowAnimationAdapter;->getWindowContainer()Lcom/android/server/wm/WindowContainer;
 PLcom/android/server/wm/NonAppWindowAnimationAdapter;->lambda$startNonAppWindowAnimationsForKeyguardExit$0(Lcom/android/server/wm/WindowManagerService;JJLjava/util/ArrayList;Ljava/util/ArrayList;Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/NonAppWindowAnimationAdapter;->onAnimationCancelled(Landroid/view/SurfaceControl;)V
-HPLcom/android/server/wm/NonAppWindowAnimationAdapter;->shouldAttachNavBarToApp(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;I)Z
-PLcom/android/server/wm/NonAppWindowAnimationAdapter;->shouldStartNonAppWindowAnimationsForKeyguardExit(I)Z
+HSPLcom/android/server/wm/NonAppWindowAnimationAdapter;->shouldAttachNavBarToApp(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;I)Z
+HSPLcom/android/server/wm/NonAppWindowAnimationAdapter;->shouldStartNonAppWindowAnimationsForKeyguardExit(I)Z
 HPLcom/android/server/wm/NonAppWindowAnimationAdapter;->startAnimation(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;ILcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)V
 HPLcom/android/server/wm/NonAppWindowAnimationAdapter;->startNavigationBarWindowAnimation(Lcom/android/server/wm/DisplayContent;JJLjava/util/ArrayList;Ljava/util/ArrayList;)V
 HPLcom/android/server/wm/NonAppWindowAnimationAdapter;->startNonAppWindowAnimations(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;IJJLjava/util/ArrayList;)[Landroid/view/RemoteAnimationTarget;
-PLcom/android/server/wm/NonAppWindowAnimationAdapter;->startNonAppWindowAnimationsForKeyguardExit(Lcom/android/server/wm/WindowManagerService;JJLjava/util/ArrayList;Ljava/util/ArrayList;)V
+HPLcom/android/server/wm/NonAppWindowAnimationAdapter;->startNonAppWindowAnimationsForKeyguardExit(Lcom/android/server/wm/WindowManagerService;JJLjava/util/ArrayList;Ljava/util/ArrayList;)V
 PLcom/android/server/wm/PackageConfigPersister$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/PackageConfigPersister;)V
 PLcom/android/server/wm/PackageConfigPersister$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+PLcom/android/server/wm/PackageConfigPersister$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/wm/PackageConfigPersister$PackageConfigRecord;)V
 PLcom/android/server/wm/PackageConfigPersister$DeletePackageItem;-><init>(ILjava/lang/String;)V
 PLcom/android/server/wm/PackageConfigPersister$DeletePackageItem;->process()V
 PLcom/android/server/wm/PackageConfigPersister$PackageConfigRecord;-><init>(Ljava/lang/String;I)V
@@ -56652,7 +58490,7 @@
 HSPLcom/android/server/wm/PackageConfigPersister;-><init>(Lcom/android/server/wm/PersisterQueue;Lcom/android/server/wm/ActivityTaskManagerService;)V
 PLcom/android/server/wm/PackageConfigPersister;->dump(Ljava/io/PrintWriter;I)V
 HPLcom/android/server/wm/PackageConfigPersister;->findPackageConfiguration(Ljava/lang/String;I)Lcom/android/server/wm/ActivityTaskManagerInternal$PackageConfig;
-HSPLcom/android/server/wm/PackageConfigPersister;->findRecord(Landroid/util/SparseArray;Ljava/lang/String;I)Lcom/android/server/wm/PackageConfigPersister$PackageConfigRecord;
+HSPLcom/android/server/wm/PackageConfigPersister;->findRecord(Landroid/util/SparseArray;Ljava/lang/String;I)Lcom/android/server/wm/PackageConfigPersister$PackageConfigRecord;+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/util/SparseArray;Landroid/util/SparseArray;
 PLcom/android/server/wm/PackageConfigPersister;->findRecordOrCreate(Landroid/util/SparseArray;Ljava/lang/String;I)Lcom/android/server/wm/PackageConfigPersister$PackageConfigRecord;
 PLcom/android/server/wm/PackageConfigPersister;->getUserConfigsDir(I)Ljava/io/File;
 PLcom/android/server/wm/PackageConfigPersister;->lambda$removeUser$0(Ljava/lang/String;Lcom/android/server/wm/PackageConfigPersister$PackageConfigRecord;)V
@@ -56734,7 +58572,7 @@
 HSPLcom/android/server/wm/PinnedTaskController;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;)V
 PLcom/android/server/wm/PinnedTaskController;->continueOrientationChange()V
 PLcom/android/server/wm/PinnedTaskController;->deferOrientationChangeForEnteringPipFromFullScreenIfNeeded()V
-HPLcom/android/server/wm/PinnedTaskController;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
+HSPLcom/android/server/wm/PinnedTaskController;->dump(Ljava/lang/String;Ljava/io/PrintWriter;)V
 HSPLcom/android/server/wm/PinnedTaskController;->isFreezingTaskConfig(Lcom/android/server/wm/Task;)Z
 HPLcom/android/server/wm/PinnedTaskController;->isValidPictureInPictureAspectRatio(F)Z
 PLcom/android/server/wm/PinnedTaskController;->lambda$deferOrientationChangeForEnteringPipFromFullScreenIfNeeded$1(Lcom/android/server/wm/ActivityRecord;)Z
@@ -56746,17 +58584,21 @@
 HSPLcom/android/server/wm/PinnedTaskController;->onPostDisplayConfigurationChanged()V
 HSPLcom/android/server/wm/PinnedTaskController;->registerPinnedTaskListener(Landroid/view/IPinnedTaskListener;)V
 HSPLcom/android/server/wm/PinnedTaskController;->reloadResources()V
-HPLcom/android/server/wm/PinnedTaskController;->setAdjustedForIme(ZI)V
+HSPLcom/android/server/wm/PinnedTaskController;->setAdjustedForIme(ZI)V+]Lcom/android/server/wm/PinnedTaskController;Lcom/android/server/wm/PinnedTaskController;
 PLcom/android/server/wm/PinnedTaskController;->setEnterPipBounds(Landroid/graphics/Rect;)V
 PLcom/android/server/wm/PinnedTaskController;->setEnterPipTransaction(Landroid/window/PictureInPictureSurfaceTransaction;)V
 PLcom/android/server/wm/PinnedTaskController;->shouldDeferOrientationChange()Z
 PLcom/android/server/wm/PinnedTaskController;->startSeamlessRotationIfNeeded(Landroid/view/SurfaceControl$Transaction;II)V
 HSPLcom/android/server/wm/PointerEventDispatcher;-><init>(Landroid/view/InputChannel;)V
 PLcom/android/server/wm/PointerEventDispatcher;->dispose()V
-HPLcom/android/server/wm/PointerEventDispatcher;->onInputEvent(Landroid/view/InputEvent;)V+]Landroid/view/InputEventReceiver;Lcom/android/server/wm/PointerEventDispatcher;]Landroid/view/WindowManagerPolicyConstants$PointerEventListener;megamorphic_types]Landroid/view/InputEvent;Landroid/view/MotionEvent;
+HPLcom/android/server/wm/PointerEventDispatcher;->onInputEvent(Landroid/view/InputEvent;)V+]Landroid/view/InputEventReceiver;Lcom/android/server/wm/PointerEventDispatcher;]Landroid/view/WindowManagerPolicyConstants$PointerEventListener;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/view/InputEvent;Landroid/view/MotionEvent;
 HSPLcom/android/server/wm/PointerEventDispatcher;->registerInputEventListener(Landroid/view/WindowManagerPolicyConstants$PointerEventListener;)V
+PLcom/android/server/wm/PointerEventDispatcher;->unregisterInputEventListener(Landroid/view/WindowManagerPolicyConstants$PointerEventListener;)V
 HSPLcom/android/server/wm/PossibleDisplayInfoMapper;-><init>(Landroid/hardware/display/DisplayManagerInternal;)V
+HSPLcom/android/server/wm/PossibleDisplayInfoMapper;->getPossibleDisplayInfos(I)Ljava/util/Set;
 HSPLcom/android/server/wm/PossibleDisplayInfoMapper;->removePossibleDisplayInfos(I)V
+HSPLcom/android/server/wm/PossibleDisplayInfoMapper;->updateDisplayInfos(Ljava/util/Set;)V
+HSPLcom/android/server/wm/PossibleDisplayInfoMapper;->updatePossibleDisplayInfos(I)V
 HSPLcom/android/server/wm/ProtoLogCache$$ExternalSyntheticLambda0;-><init>()V
 PLcom/android/server/wm/ProtoLogCache$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/wm/ProtoLogCache;-><clinit>()V
@@ -56774,15 +58616,15 @@
 PLcom/android/server/wm/RecentTasks;->-$$Nest$fgetmService(Lcom/android/server/wm/RecentTasks;)Lcom/android/server/wm/ActivityTaskManagerService;
 HSPLcom/android/server/wm/RecentTasks;-><clinit>()V
 HSPLcom/android/server/wm/RecentTasks;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskSupervisor;)V
-HPLcom/android/server/wm/RecentTasks;->add(Lcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/RecentTasks;->add(Lcom/android/server/wm/Task;)V
 HPLcom/android/server/wm/RecentTasks;->cleanupDisabledPackageTasksLocked(Ljava/lang/String;Ljava/util/Set;I)V+]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/content/Intent;Landroid/content/Intent;
 PLcom/android/server/wm/RecentTasks;->cleanupLocked(I)V
 HSPLcom/android/server/wm/RecentTasks;->containsTaskId(II)Z
 HPLcom/android/server/wm/RecentTasks;->createRecentTaskInfo(Lcom/android/server/wm/Task;Z)Landroid/app/ActivityManager$RecentTaskInfo;
 PLcom/android/server/wm/RecentTasks;->dump(Ljava/io/PrintWriter;ZLjava/lang/String;)V
-HPLcom/android/server/wm/RecentTasks;->findRemoveIndexForAddTask(Lcom/android/server/wm/Task;)I
+HSPLcom/android/server/wm/RecentTasks;->findRemoveIndexForAddTask(Lcom/android/server/wm/Task;)I
 HPLcom/android/server/wm/RecentTasks;->getAppTasksList(ILjava/lang/String;)Ljava/util/ArrayList;+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/IAppTask$Stub;Lcom/android/server/wm/AppTaskImpl;]Landroid/content/Intent;Landroid/content/Intent;
-PLcom/android/server/wm/RecentTasks;->getCurrentProfileIds()[I
+HSPLcom/android/server/wm/RecentTasks;->getCurrentProfileIds()[I
 HSPLcom/android/server/wm/RecentTasks;->getInputListener()Landroid/view/WindowManagerPolicyConstants$PointerEventListener;
 HPLcom/android/server/wm/RecentTasks;->getPersistableTaskIds(Landroid/util/ArraySet;)V+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/wm/RecentTasks;->getProfileIds(I)Ljava/util/Set;
@@ -56794,46 +58636,46 @@
 PLcom/android/server/wm/RecentTasks;->getRecentsComponentUid()I
 HSPLcom/android/server/wm/RecentTasks;->getTask(I)Lcom/android/server/wm/Task;
 PLcom/android/server/wm/RecentTasks;->getTaskDescriptionIcon(Ljava/lang/String;)Landroid/graphics/Bitmap;
-PLcom/android/server/wm/RecentTasks;->getTaskIdsForUser(I)Landroid/util/SparseBooleanArray;
-PLcom/android/server/wm/RecentTasks;->getUserInfo(I)Landroid/content/pm/UserInfo;
+HPLcom/android/server/wm/RecentTasks;->getTaskIdsForUser(I)Landroid/util/SparseBooleanArray;
+HSPLcom/android/server/wm/RecentTasks;->getUserInfo(I)Landroid/content/pm/UserInfo;
 HPLcom/android/server/wm/RecentTasks;->hasCompatibleActivityTypeAndWindowingMode(Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;)Z
-HPLcom/android/server/wm/RecentTasks;->isActiveRecentTask(Lcom/android/server/wm/Task;Landroid/util/SparseBooleanArray;)Z
+HSPLcom/android/server/wm/RecentTasks;->isActiveRecentTask(Lcom/android/server/wm/Task;Landroid/util/SparseBooleanArray;)Z
 HSPLcom/android/server/wm/RecentTasks;->isCallerRecents(I)Z
 PLcom/android/server/wm/RecentTasks;->isFreezeTaskListReorderingSet()Z
 HPLcom/android/server/wm/RecentTasks;->isInVisibleRange(Lcom/android/server/wm/Task;IIZ)Z+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Landroid/content/Intent;Landroid/content/Intent;
 HPLcom/android/server/wm/RecentTasks;->isRecentsComponent(Landroid/content/ComponentName;I)Z
-PLcom/android/server/wm/RecentTasks;->isRecentsComponentHomeActivity(I)Z
-PLcom/android/server/wm/RecentTasks;->isTrimmable(Lcom/android/server/wm/Task;)Z
+HSPLcom/android/server/wm/RecentTasks;->isRecentsComponentHomeActivity(I)Z
+HPLcom/android/server/wm/RecentTasks;->isTrimmable(Lcom/android/server/wm/Task;)Z
 HPLcom/android/server/wm/RecentTasks;->isUserRunning(II)Z
-HPLcom/android/server/wm/RecentTasks;->isVisibleRecentTask(Lcom/android/server/wm/Task;)Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/LockTaskController;Lcom/android/server/wm/LockTaskController;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/wm/RecentTasks;->isVisibleRecentTask(Lcom/android/server/wm/Task;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/LockTaskController;Lcom/android/server/wm/LockTaskController;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/wm/RecentTasks;->loadParametersFromResources(Landroid/content/res/Resources;)V
 HSPLcom/android/server/wm/RecentTasks;->loadPersistedTaskIdsForUserLocked(I)V
 HSPLcom/android/server/wm/RecentTasks;->loadRecentsComponent(Landroid/content/res/Resources;)V
 HPLcom/android/server/wm/RecentTasks;->loadUserRecentsLocked(I)V
-HPLcom/android/server/wm/RecentTasks;->notifyTaskAdded(Lcom/android/server/wm/Task;)V
-HPLcom/android/server/wm/RecentTasks;->notifyTaskPersisterLocked(Lcom/android/server/wm/Task;Z)V
+HSPLcom/android/server/wm/RecentTasks;->notifyTaskAdded(Lcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/RecentTasks;->notifyTaskPersisterLocked(Lcom/android/server/wm/Task;Z)V
 HPLcom/android/server/wm/RecentTasks;->notifyTaskRemoved(Lcom/android/server/wm/Task;ZZ)V
-HPLcom/android/server/wm/RecentTasks;->onActivityIdle(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/RecentTasks;->onActivityIdle(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/RecentTasks;->onLockTaskModeStateChanged(II)V
 HPLcom/android/server/wm/RecentTasks;->onPackagesSuspendedChanged([Ljava/lang/String;ZI)V
 HSPLcom/android/server/wm/RecentTasks;->onSystemReadyLocked()V
 PLcom/android/server/wm/RecentTasks;->processNextAffiliateChainLocked(I)I
 HSPLcom/android/server/wm/RecentTasks;->registerCallback(Lcom/android/server/wm/RecentTasks$Callbacks;)V
-PLcom/android/server/wm/RecentTasks;->remove(Lcom/android/server/wm/Task;)V
+HPLcom/android/server/wm/RecentTasks;->remove(Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/RecentTasks;->removeAllVisibleTasks(I)V
-PLcom/android/server/wm/RecentTasks;->removeForAddTask(Lcom/android/server/wm/Task;)I
-PLcom/android/server/wm/RecentTasks;->removeTasksByPackageName(Ljava/lang/String;I)V
+HSPLcom/android/server/wm/RecentTasks;->removeForAddTask(Lcom/android/server/wm/Task;)I
+HPLcom/android/server/wm/RecentTasks;->removeTasksByPackageName(Ljava/lang/String;I)V
 PLcom/android/server/wm/RecentTasks;->removeTasksForUserLocked(I)V
 PLcom/android/server/wm/RecentTasks;->removeUnreachableHiddenTasks(I)V
 PLcom/android/server/wm/RecentTasks;->resetFreezeTaskListReordering(Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/RecentTasks;->resetFreezeTaskListReorderingOnTimeout()V
 HPLcom/android/server/wm/RecentTasks;->saveImage(Landroid/graphics/Bitmap;Ljava/lang/String;)V
-PLcom/android/server/wm/RecentTasks;->setFreezeTaskListReordering()V
+HPLcom/android/server/wm/RecentTasks;->setFreezeTaskListReordering()V
 HPLcom/android/server/wm/RecentTasks;->shouldPersistTaskLocked(Lcom/android/server/wm/Task;)Z
-HPLcom/android/server/wm/RecentTasks;->syncPersistentTaskIdsLocked()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/wm/RecentTasks;->trimInactiveRecentTasks()V
+HPLcom/android/server/wm/RecentTasks;->syncPersistentTaskIdsLocked()V+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/wm/RecentTasks;->trimInactiveRecentTasks()V
 PLcom/android/server/wm/RecentTasks;->unloadUserDataFromMemoryLocked(I)V
-HPLcom/android/server/wm/RecentTasks;->usersWithRecentsLoadedLocked()[I
+HPLcom/android/server/wm/RecentTasks;->usersWithRecentsLoadedLocked()[I+]Landroid/util/SparseBooleanArray;Landroid/util/SparseBooleanArray;
 PLcom/android/server/wm/RecentsAnimation$$ExternalSyntheticLambda0;-><init>()V
 PLcom/android/server/wm/RecentsAnimation$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/RecentsAnimation$$ExternalSyntheticLambda1;-><init>()V
@@ -56860,7 +58702,7 @@
 PLcom/android/server/wm/RecentsAnimation;->notifyAnimationCancelBeforeStart(Landroid/view/IRecentsAnimationRunner;)V
 PLcom/android/server/wm/RecentsAnimation;->onAnimationFinished(IZ)V
 HPLcom/android/server/wm/RecentsAnimation;->onRootTaskOrderChanged(Lcom/android/server/wm/Task;)V
-PLcom/android/server/wm/RecentsAnimation;->preloadRecentsActivity()V
+HPLcom/android/server/wm/RecentsAnimation;->preloadRecentsActivity()V
 HPLcom/android/server/wm/RecentsAnimation;->startRecentsActivity(Landroid/view/IRecentsAnimationRunner;J)V
 PLcom/android/server/wm/RecentsAnimation;->startRecentsActivityInBackground(Ljava/lang/String;)V
 PLcom/android/server/wm/RecentsAnimationController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/RecentsAnimationController;)V
@@ -56871,7 +58713,9 @@
 PLcom/android/server/wm/RecentsAnimationController$$ExternalSyntheticLambda2;->onAnimationFinished(ILcom/android/server/wm/AnimationAdapter;)V
 HPLcom/android/server/wm/RecentsAnimationController$$ExternalSyntheticLambda3;-><init>(ILcom/android/server/wm/AnimationAdapter;)V
 HPLcom/android/server/wm/RecentsAnimationController$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/RecentsAnimationController$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/wm/RecentsAnimationController;I)V
+PLcom/android/server/wm/RecentsAnimationController$$ExternalSyntheticLambda4;-><init>()V
+PLcom/android/server/wm/RecentsAnimationController$$ExternalSyntheticLambda4;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/wm/RecentsAnimationController$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/wm/RecentsAnimationController;I)V
 PLcom/android/server/wm/RecentsAnimationController$$ExternalSyntheticLambda5;->run()V
 PLcom/android/server/wm/RecentsAnimationController$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/wm/RecentsAnimationController;)V
 PLcom/android/server/wm/RecentsAnimationController$$ExternalSyntheticLambda6;->accept(Ljava/lang/Object;)V
@@ -56916,18 +58760,19 @@
 HPLcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;->startAnimation(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;ILcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)V
 PLcom/android/server/wm/RecentsAnimationController;->$r8$lambda$1LpEU3bh1EPOjM0YZ9GuJ4IEjE0(Lcom/android/server/wm/RecentsAnimationController;I)V
 PLcom/android/server/wm/RecentsAnimationController;->$r8$lambda$420-KwIxmNwr-l0Y-S4X7RXTUpk(Lcom/android/server/wm/RecentsAnimationController;Lcom/android/server/wm/WallpaperAnimationAdapter;)V
+PLcom/android/server/wm/RecentsAnimationController;->$r8$lambda$9xkcokzUhiYQY_6mZv1HWL4smVk(Lcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;)Ljava/lang/Integer;
 PLcom/android/server/wm/RecentsAnimationController;->$r8$lambda$f7wlzX-2wJWRo4nvgusgrbDgdsM(ILcom/android/server/wm/AnimationAdapter;Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/RecentsAnimationController;->$r8$lambda$gcwA1mUxs5hJs8Ru_ltRmDfjDKE(Lcom/android/server/wm/Task;Ljava/util/ArrayList;)V
 PLcom/android/server/wm/RecentsAnimationController;->$r8$lambda$lHMlITmvmPHNCXv5vKMlpPCQDkI(Lcom/android/server/wm/RecentsAnimationController;Landroid/util/SparseBooleanArray;Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;ILcom/android/server/wm/Task;)V
 PLcom/android/server/wm/RecentsAnimationController;->$r8$lambda$oWiB-OiltbcVHsjISTZI_Rb6g_0(Lcom/android/server/wm/Task;ILcom/android/server/wm/AnimationAdapter;)V
 PLcom/android/server/wm/RecentsAnimationController;->-$$Nest$fgetmCallbacks(Lcom/android/server/wm/RecentsAnimationController;)Lcom/android/server/wm/RecentsAnimationController$RecentsAnimationCallbacks;
 PLcom/android/server/wm/RecentsAnimationController;->-$$Nest$fgetmCancelOnNextTransitionStart(Lcom/android/server/wm/RecentsAnimationController;)Z
-PLcom/android/server/wm/RecentsAnimationController;->-$$Nest$fgetmCanceled(Lcom/android/server/wm/RecentsAnimationController;)Z
+HPLcom/android/server/wm/RecentsAnimationController;->-$$Nest$fgetmCanceled(Lcom/android/server/wm/RecentsAnimationController;)Z
 PLcom/android/server/wm/RecentsAnimationController;->-$$Nest$fgetmDisplayContent(Lcom/android/server/wm/RecentsAnimationController;)Lcom/android/server/wm/DisplayContent;
 PLcom/android/server/wm/RecentsAnimationController;->-$$Nest$fgetmPendingAnimations(Lcom/android/server/wm/RecentsAnimationController;)Ljava/util/ArrayList;
 HPLcom/android/server/wm/RecentsAnimationController;->-$$Nest$fgetmService(Lcom/android/server/wm/RecentsAnimationController;)Lcom/android/server/wm/WindowManagerService;
 PLcom/android/server/wm/RecentsAnimationController;->-$$Nest$fgetmTargetActivityRecord(Lcom/android/server/wm/RecentsAnimationController;)Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/RecentsAnimationController;->-$$Nest$fgetmTargetActivityType(Lcom/android/server/wm/RecentsAnimationController;)I
+HPLcom/android/server/wm/RecentsAnimationController;->-$$Nest$fgetmTargetActivityType(Lcom/android/server/wm/RecentsAnimationController;)I
 PLcom/android/server/wm/RecentsAnimationController;->-$$Nest$fgetmTmpRect(Lcom/android/server/wm/RecentsAnimationController;)Landroid/graphics/Rect;
 PLcom/android/server/wm/RecentsAnimationController;->-$$Nest$fputmInputConsumerEnabled(Lcom/android/server/wm/RecentsAnimationController;Z)V
 PLcom/android/server/wm/RecentsAnimationController;->-$$Nest$mremoveTaskInternal(Lcom/android/server/wm/RecentsAnimationController;I)Z
@@ -56960,13 +58805,14 @@
 PLcom/android/server/wm/RecentsAnimationController;->isNavigationBarAttachedToApp()Z
 HPLcom/android/server/wm/RecentsAnimationController;->isTargetApp(Lcom/android/server/wm/ActivityRecord;)Z
 HPLcom/android/server/wm/RecentsAnimationController;->isTargetOverWallpaper()Z
-HPLcom/android/server/wm/RecentsAnimationController;->isWallpaperVisible(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/RecentsAnimationController;->isWallpaperVisible(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/RecentsAnimationController;Lcom/android/server/wm/RecentsAnimationController;
 PLcom/android/server/wm/RecentsAnimationController;->lambda$collectTaskRemoteAnimations$4(Landroid/util/SparseBooleanArray;Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;ILcom/android/server/wm/Task;)V
 PLcom/android/server/wm/RecentsAnimationController;->lambda$createWallpaperAnimations$6(Lcom/android/server/wm/WallpaperAnimationAdapter;)V
 PLcom/android/server/wm/RecentsAnimationController;->lambda$initialize$0(Lcom/android/server/wm/Task;Ljava/util/ArrayList;)V
 PLcom/android/server/wm/RecentsAnimationController;->lambda$initialize$1(ILcom/android/server/wm/AnimationAdapter;Lcom/android/server/wm/WindowState;)V
 HPLcom/android/server/wm/RecentsAnimationController;->lambda$initialize$2(Lcom/android/server/wm/Task;ILcom/android/server/wm/AnimationAdapter;)V
-PLcom/android/server/wm/RecentsAnimationController;->lambda$logRecentsAnimationStartTime$5(I)V
+HPLcom/android/server/wm/RecentsAnimationController;->lambda$logRecentsAnimationStartTime$5(I)V
+PLcom/android/server/wm/RecentsAnimationController;->lambda$startAnimation$3(Lcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;)Ljava/lang/Integer;
 HPLcom/android/server/wm/RecentsAnimationController;->linkFixedRotationTransformIfNeeded(Lcom/android/server/wm/WindowToken;)V
 HPLcom/android/server/wm/RecentsAnimationController;->linkToDeathOfRunner()V
 HPLcom/android/server/wm/RecentsAnimationController;->logRecentsAnimationStartTime(I)V
@@ -56986,12 +58832,12 @@
 HPLcom/android/server/wm/RecentsAnimationController;->skipAnimation(Lcom/android/server/wm/Task;)Z
 HPLcom/android/server/wm/RecentsAnimationController;->startAnimation()V
 HPLcom/android/server/wm/RecentsAnimationController;->unlinkToDeathOfRunner()V
-PLcom/android/server/wm/RecentsAnimationController;->updateInputConsumerForApp(Landroid/view/InputWindowHandle;)Z
+HPLcom/android/server/wm/RecentsAnimationController;->updateInputConsumerForApp(Landroid/view/InputWindowHandle;)Z
 HSPLcom/android/server/wm/RefreshRatePolicy$PackageRefreshRate;-><init>(Lcom/android/server/wm/RefreshRatePolicy;)V
 HPLcom/android/server/wm/RefreshRatePolicy$PackageRefreshRate;->add(Ljava/lang/String;FF)V
 HSPLcom/android/server/wm/RefreshRatePolicy$PackageRefreshRate;->get(Ljava/lang/String;)Landroid/hardware/display/DisplayManagerInternal$RefreshRateRange;+]Ljava/util/HashMap;Ljava/util/HashMap;
-PLcom/android/server/wm/RefreshRatePolicy$PackageRefreshRate;->remove(Ljava/lang/String;)V
-PLcom/android/server/wm/RefreshRatePolicy;->-$$Nest$fgetmMaxSupportedRefreshRate(Lcom/android/server/wm/RefreshRatePolicy;)F
+HPLcom/android/server/wm/RefreshRatePolicy$PackageRefreshRate;->remove(Ljava/lang/String;)V
+HPLcom/android/server/wm/RefreshRatePolicy;->-$$Nest$fgetmMaxSupportedRefreshRate(Lcom/android/server/wm/RefreshRatePolicy;)F
 PLcom/android/server/wm/RefreshRatePolicy;->-$$Nest$fgetmMinSupportedRefreshRate(Lcom/android/server/wm/RefreshRatePolicy;)F
 HSPLcom/android/server/wm/RefreshRatePolicy;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/view/DisplayInfo;Lcom/android/server/wm/HighRefreshRateDenylist;)V
 HPLcom/android/server/wm/RefreshRatePolicy;->addRefreshRateRangeForPackage(Ljava/lang/String;FF)V
@@ -57008,7 +58854,7 @@
 HPLcom/android/server/wm/RemoteAnimationController$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/wm/RemoteAnimationController$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/wm/RemoteAnimationController;I[Landroid/view/RemoteAnimationTarget;[Landroid/view/RemoteAnimationTarget;[Landroid/view/RemoteAnimationTarget;)V
 PLcom/android/server/wm/RemoteAnimationController$$ExternalSyntheticLambda2;->run()V
-PLcom/android/server/wm/RemoteAnimationController$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/wm/RemoteAnimationController;)V
+HPLcom/android/server/wm/RemoteAnimationController$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/wm/RemoteAnimationController;)V
 PLcom/android/server/wm/RemoteAnimationController$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/wm/RemoteAnimationController$FinishedCallback;-><init>(Lcom/android/server/wm/RemoteAnimationController;)V
 HPLcom/android/server/wm/RemoteAnimationController$FinishedCallback;->onAnimationFinished()V
@@ -57055,16 +58901,17 @@
 PLcom/android/server/wm/RemoteAnimationController;->setOnRemoteAnimationReady(Ljava/lang/Runnable;)V
 HPLcom/android/server/wm/RemoteAnimationController;->setRunningRemoteAnimation(Z)V
 HPLcom/android/server/wm/RemoteAnimationController;->unlinkToDeathOfRunner()V
+PLcom/android/server/wm/RemoteAnimationController;->writeStartDebugStatement()V
 HSPLcom/android/server/wm/ResetTargetTaskHelper;-><init>()V
 HPLcom/android/server/wm/ResetTargetTaskHelper;->accept(Lcom/android/server/wm/Task;)V
-PLcom/android/server/wm/ResetTargetTaskHelper;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/ResetTargetTaskHelper;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/ResetTargetTaskHelper;->finishActivities(Ljava/util/ArrayList;Ljava/lang/String;)V
 HPLcom/android/server/wm/ResetTargetTaskHelper;->process(Lcom/android/server/wm/Task;Z)Landroid/app/ActivityOptions;
 PLcom/android/server/wm/ResetTargetTaskHelper;->processPendingReparentActivities()V
 HPLcom/android/server/wm/ResetTargetTaskHelper;->reset(Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/ResetTargetTaskHelper;->takeOption(Lcom/android/server/wm/ActivityRecord;Z)Z
 HPLcom/android/server/wm/ResetTargetTaskHelper;->test(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/ResetTargetTaskHelper;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/ResetTargetTaskHelper;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/RootDisplayArea;-><init>(Lcom/android/server/wm/WindowManagerService;Ljava/lang/String;I)V
 PLcom/android/server/wm/RootDisplayArea;->asRootDisplayArea()Lcom/android/server/wm/RootDisplayArea;
 HSPLcom/android/server/wm/RootDisplayArea;->findAreaForWindowTypeInLayer(IZZ)Lcom/android/server/wm/DisplayArea$Tokens;
@@ -57077,16 +58924,16 @@
 PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda11;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda13;-><init>(Z[ZZ)V
 HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda13;->accept(Ljava/lang/Object;)V
-HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda14;-><init>(I[Z)V
-HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda14;->apply(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda14;-><init>(I[Z)V
+HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda14;->apply(Ljava/lang/Object;)Z
 PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda15;-><init>()V
-PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda15;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda15;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda16;-><init>(Lcom/android/server/policy/PermissionPolicyInternal;ILjava/lang/String;[I)V
 HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda16;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda18;-><init>()V
-PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda18;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda18;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda19;-><init>(Lcom/android/server/wm/RootWindowContainer;ZLcom/android/server/wm/DisplayContent;)V
-HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda19;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda19;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda1;-><init>()V
 HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda20;-><init>(Lcom/android/server/wm/RootWindowContainer;)V
@@ -57098,34 +58945,36 @@
 HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda23;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda24;-><init>(Landroid/util/ArraySet;Z)V
 HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda24;->accept(Ljava/lang/Object;)V
-HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda25;-><init>(Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/TaskDisplayArea;)V
-HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda25;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda25;-><init>(Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/TaskDisplayArea;)V
+HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda25;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda26;-><init>(Lcom/android/server/wm/Task;Ljava/util/ArrayList;)V
 PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda26;->accept(Ljava/lang/Object;)V
-HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda27;-><init>(Lcom/android/server/wm/RootWindowContainer;)V
-HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda27;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda28;-><init>()V
-PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda28;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda27;-><init>(Lcom/android/server/wm/RootWindowContainer;)V
+HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda27;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda28;-><init>()V
+HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda28;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda29;-><init>(Lcom/android/server/policy/PermissionPolicyInternal;)V
-HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda29;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda30;-><init>([ZLjava/io/PrintWriter;Ljava/io/FileDescriptor;ZZLjava/lang/String;[Z)V
-HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda30;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda31;-><init>([ZLjava/io/PrintWriter;Ljava/lang/String;[Z)V
-PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda31;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda32;-><init>(Ljava/io/PrintWriter;)V
+HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda29;->test(Ljava/lang/Object;)Z
+PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/wm/RootWindowContainer;I)V
+PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda30;-><init>([ZLjava/io/PrintWriter;Ljava/io/FileDescriptor;ZZLjava/lang/String;[Z)V
+HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda30;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda31;-><init>([ZLjava/io/PrintWriter;Ljava/lang/String;[Z)V
+HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda31;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda32;-><init>(Ljava/io/PrintWriter;)V
 PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda32;->run()V
-PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda33;-><init>(Ljava/io/PrintWriter;)V
+HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda33;-><init>(Ljava/io/PrintWriter;)V
 PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda33;->run()V
 PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda34;-><init>()V
-PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda34;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda34;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda35;-><init>([Z)V
 HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda35;->test(Ljava/lang/Object;)Z
-HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda36;-><init>([Z)V
-HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda36;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda37;-><init>(Ljava/util/ArrayList;)V
+HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda36;-><init>([Z)V
+HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda36;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda37;-><init>(Ljava/util/ArrayList;)V
 HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda37;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda38;-><init>(Lcom/android/server/wm/RootWindowContainer;Ljava/lang/String;)V
-HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda38;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda38;-><init>(Lcom/android/server/wm/RootWindowContainer;Ljava/lang/String;)V
+HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda38;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda39;-><init>(Lcom/android/server/wm/RootWindowContainer;)V
 HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda39;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/wm/RootWindowContainer;ILjava/lang/String;ZZ)V
@@ -57133,23 +58982,25 @@
 PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda40;-><init>(I)V
 PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda40;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda41;-><init>()V
-PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda41;->test(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z
+HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda41;->test(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z
 PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda42;-><init>(I)V
 PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda42;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda43;-><init>(Lcom/android/server/wm/WindowProcessController;Ljava/lang/String;Lcom/android/server/wm/Task;[Lcom/android/server/wm/Task;)V
 HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda43;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda44;-><init>(IZLjava/util/ArrayList;Ljava/lang/String;I)V
 PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda44;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda46;-><init>(Ljava/io/PrintWriter;)V
+HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda45;-><init>(I)V
+PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda45;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda46;-><init>(Ljava/io/PrintWriter;)V
 PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda46;->run()V
 HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda47;-><init>()V
 HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda47;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda48;-><init>()V
 PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda48;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda49;-><init>(Ljava/util/ArrayList;Ljava/io/PrintWriter;[IZ)V
-PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda49;->accept(Ljava/lang/Object;)V
-HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda4;-><init>()V
-HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda4;->apply(Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda49;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda4;-><init>()V
+HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda4;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda5;-><init>(Landroid/service/voice/IVoiceInteractionSession;)V
 PLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/wm/Task;[ZZLandroid/app/ActivityOptions;Lcom/android/server/wm/ActivityRecord;)V
@@ -57165,16 +59016,16 @@
 HSPLcom/android/server/wm/RootWindowContainer$AttachApplicationHelper;->accept(Ljava/lang/Object;)V+]Lcom/android/server/wm/RootWindowContainer$AttachApplicationHelper;Lcom/android/server/wm/RootWindowContainer$AttachApplicationHelper;
 HSPLcom/android/server/wm/RootWindowContainer$AttachApplicationHelper;->process(Lcom/android/server/wm/WindowProcessController;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
 HSPLcom/android/server/wm/RootWindowContainer$AttachApplicationHelper;->reset()V
-HPLcom/android/server/wm/RootWindowContainer$AttachApplicationHelper;->test(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/RootWindowContainer$AttachApplicationHelper;->test(Ljava/lang/Object;)Z+]Lcom/android/server/wm/RootWindowContainer$AttachApplicationHelper;Lcom/android/server/wm/RootWindowContainer$AttachApplicationHelper;
+HSPLcom/android/server/wm/RootWindowContainer$AttachApplicationHelper;->test(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;
+HSPLcom/android/server/wm/RootWindowContainer$AttachApplicationHelper;->test(Ljava/lang/Object;)Z+]Lcom/android/server/wm/RootWindowContainer$AttachApplicationHelper;Lcom/android/server/wm/RootWindowContainer$AttachApplicationHelper;
 PLcom/android/server/wm/RootWindowContainer$FindTaskResult$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/RootWindowContainer$FindTaskResult;)V
 PLcom/android/server/wm/RootWindowContainer$FindTaskResult$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/RootWindowContainer$FindTaskResult;-><init>()V
-HPLcom/android/server/wm/RootWindowContainer$FindTaskResult;->init(ILjava/lang/String;Landroid/content/Intent;Landroid/content/pm/ActivityInfo;)V
-HPLcom/android/server/wm/RootWindowContainer$FindTaskResult;->matchingCandidate(Lcom/android/server/wm/TaskFragment;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;]Landroid/content/Intent;Landroid/content/Intent;
-HPLcom/android/server/wm/RootWindowContainer$FindTaskResult;->process(Lcom/android/server/wm/WindowContainer;)V
-HPLcom/android/server/wm/RootWindowContainer$FindTaskResult;->test(Lcom/android/server/wm/Task;)Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/RootWindowContainer$FindTaskResult;Lcom/android/server/wm/RootWindowContainer$FindTaskResult;
-HPLcom/android/server/wm/RootWindowContainer$FindTaskResult;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/RootWindowContainer$FindTaskResult;->init(ILjava/lang/String;Landroid/content/Intent;Landroid/content/pm/ActivityInfo;)V
+HSPLcom/android/server/wm/RootWindowContainer$FindTaskResult;->matchingCandidate(Lcom/android/server/wm/TaskFragment;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/wm/RootWindowContainer$FindTaskResult;->process(Lcom/android/server/wm/WindowContainer;)V
+HSPLcom/android/server/wm/RootWindowContainer$FindTaskResult;->test(Lcom/android/server/wm/Task;)Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/RootWindowContainer$FindTaskResult;Lcom/android/server/wm/RootWindowContainer$FindTaskResult;
+HSPLcom/android/server/wm/RootWindowContainer$FindTaskResult;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/RootWindowContainer$FinishDisabledPackageActivitiesHelper;-><init>(Lcom/android/server/wm/RootWindowContainer;)V
 HSPLcom/android/server/wm/RootWindowContainer$FinishDisabledPackageActivitiesHelper;->process(Ljava/lang/String;Ljava/util/Set;ZZIZ)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/RootWindowContainer$FinishDisabledPackageActivitiesHelper;Lcom/android/server/wm/RootWindowContainer$FinishDisabledPackageActivitiesHelper;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/wm/RootWindowContainer$FinishDisabledPackageActivitiesHelper;->reset(Ljava/lang/String;Ljava/util/Set;ZZIZ)V
@@ -57188,7 +59039,7 @@
 PLcom/android/server/wm/RootWindowContainer$SleepToken;->-$$Nest$fgetmDisplayId(Lcom/android/server/wm/RootWindowContainer$SleepToken;)I
 PLcom/android/server/wm/RootWindowContainer$SleepToken;->-$$Nest$fgetmTag(Lcom/android/server/wm/RootWindowContainer$SleepToken;)Ljava/lang/String;
 HPLcom/android/server/wm/RootWindowContainer$SleepToken;-><init>(Ljava/lang/String;I)V
-PLcom/android/server/wm/RootWindowContainer$SleepToken;->toString()Ljava/lang/String;
+HPLcom/android/server/wm/RootWindowContainer$SleepToken;->toString()Ljava/lang/String;
 PLcom/android/server/wm/RootWindowContainer$SleepToken;->writeTagToProto(Landroid/util/proto/ProtoOutputStream;J)V
 HPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$-3irvApYkzPx3a7ofFGo6g21S68(Landroid/util/ArraySet;ZLcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/RootWindowContainer;->$r8$lambda$0K5_lOUa9Z-fSiefUa0kyLzyOco(Ljava/util/ArrayList;Ljava/io/PrintWriter;[IZLcom/android/server/wm/WindowState;)V
@@ -57196,40 +59047,43 @@
 PLcom/android/server/wm/RootWindowContainer;->$r8$lambda$2Bxei4ijwyN7PNDUoFn4BIjp7i8(Lcom/android/server/wm/TaskFragment;)V
 PLcom/android/server/wm/RootWindowContainer;->$r8$lambda$2k3zC_nv2SZ_nI8-ixMORvQU-jI(Lcom/android/server/wm/ActivityRecord;IZLandroid/content/Intent;Landroid/content/ComponentName;)Z
 HSPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$3qAr0mgxnLmuKRIR6PL8tzYPjvs(Lcom/android/server/wm/Task;[ZZLandroid/app/ActivityOptions;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/Task;)V
-HPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$46Zco3Mmafn5oLMCqYU9lYpD1FM(Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/Task;)V
-PLcom/android/server/wm/RootWindowContainer;->$r8$lambda$4WGk-GfUnG3gbiH1UlvsUn5sLmk([ZLjava/io/PrintWriter;Ljava/io/FileDescriptor;ZZLjava/lang/String;[ZLcom/android/server/wm/Task;)V
-HPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$5YHH6rvwizakAO95H0atIDV2DnA([ZLcom/android/server/wm/Task;)Z
+HSPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$46Zco3Mmafn5oLMCqYU9lYpD1FM(Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$4WGk-GfUnG3gbiH1UlvsUn5sLmk([ZLjava/io/PrintWriter;Ljava/io/FileDescriptor;ZZLjava/lang/String;[ZLcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$5YHH6rvwizakAO95H0atIDV2DnA([ZLcom/android/server/wm/Task;)Z
 PLcom/android/server/wm/RootWindowContainer;->$r8$lambda$7pvQiYr75sfRAOG9gj3H86Zco4M(Lcom/android/server/wm/TaskFragment;)V
 HPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$95qC-1ZUnz4HFKq9TM8jsgele88(Lcom/android/server/wm/RootWindowContainer;ZLcom/android/server/wm/DisplayContent;Lcom/android/server/wm/Task;)V
 HPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$9NSGjVLF1911WDdVCp9gy7WJxxk([Z[ZLcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/TaskDisplayArea;)V
 HPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$9QEVgIZoOr5sN6fXXE1semHFZGU(Lcom/android/server/wm/RootWindowContainer;Ljava/lang/String;Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/RootWindowContainer;->$r8$lambda$CpSRwoqfEa6O7fvbNCQqMq4Tc3w(Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$CpSRwoqfEa6O7fvbNCQqMq4Tc3w(Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;)Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/RootWindowContainer;->$r8$lambda$DbRYqPvtTrpxcxWx2WwZ2-On_JY(ILcom/android/server/wm/Task;)V
 PLcom/android/server/wm/RootWindowContainer;->$r8$lambda$FLmzhr01j2GERvqrf-mKQKpEFpE(Lcom/android/server/wm/ActivityRecord;Landroid/content/pm/ApplicationInfo;ILjava/lang/String;)V
 PLcom/android/server/wm/RootWindowContainer;->$r8$lambda$I7nbA9bfo9V8kXcsunvZyVTvaOU(Ljava/io/PrintWriter;)V
 HPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$JVOaWwTtGvpy9mIEgVqOCuiNirQ(Ljava/util/ArrayList;Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/RootWindowContainer;->$r8$lambda$Lu2aLqdIvBNiOiU-AuAyoScHIjA(ILcom/android/server/wm/WindowState;)Z
 HSPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$MC0EJXT4AdtfxNOjrlJVyarOVF0(Lcom/android/server/policy/PermissionPolicyInternal;ILjava/lang/String;[ILcom/android/server/wm/TaskFragment;)Z
 HSPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$NBiBwCPKbn9eWkBWdVl8xwrBdiQ(Lcom/android/server/wm/RootWindowContainer;ILjava/lang/String;ZZLcom/android/server/wm/TaskDisplayArea;Ljava/lang/Boolean;)Ljava/lang/Boolean;
 PLcom/android/server/wm/RootWindowContainer;->$r8$lambda$Ri7vdqxDlnsHj-QO4xVX8eT4F9M(Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/RootWindowContainer;->$r8$lambda$THCpqJPpeNu9pHa2Y5e6jyXXV3s(Lcom/android/server/wm/RootWindowContainer;Ljava/util/ArrayList;Lcom/android/server/wm/Task;)V
-HPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$U1JPR8HO_4BOZCATFm3KVD2VRaw(Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$U1JPR8HO_4BOZCATFm3KVD2VRaw(Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$Uy13UFAHZKW61mOI97RGyOT47EM(Lcom/android/server/wm/DisplayContent;)V
-PLcom/android/server/wm/RootWindowContainer;->$r8$lambda$Vr8wTDumqzP5gZxJmDaG9t2PEDU([ZLjava/io/PrintWriter;Ljava/lang/String;[ZLcom/android/server/wm/TaskDisplayArea;)V
+HSPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$Vr8wTDumqzP5gZxJmDaG9t2PEDU([ZLjava/io/PrintWriter;Ljava/lang/String;[ZLcom/android/server/wm/TaskDisplayArea;)V
 HPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$WCVj2i4iRluPRIROcqjqT7W2Vxg(Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/RootWindowContainer;->$r8$lambda$YCzQ-9_1pq37jqr_GXJqijUXlBU(Lcom/android/server/wm/RootWindowContainer;ILcom/android/server/wm/Task;)V
 HPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$YLZAlJ3sCipIy27vYwSdw4Ep3R4(Lcom/android/server/wm/Task;Landroid/app/ActivityTaskManager$RootTaskInfo;[I)V
+PLcom/android/server/wm/RootWindowContainer;->$r8$lambda$YW4PTZJqkAurvBqzz-epSmVy0-o(ILcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/RootWindowContainer;->$r8$lambda$ZOg5-AYOXr3mRdM1O0kUTsphK6M(Landroid/service/voice/IVoiceInteractionSession;Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/RootWindowContainer;->$r8$lambda$ZSMc7-i3inE8PKyTR4lUa_6oS24(Ljava/io/PrintWriter;)V
-HPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$ZkXQ9yxHUB6T38H0slloJdKlgMA(I[ZLcom/android/server/wm/WindowState;)Z
+HSPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$ZkXQ9yxHUB6T38H0slloJdKlgMA(I[ZLcom/android/server/wm/WindowState;)Z
 HPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$d_kqzD6SfMPF4eXn_9ZmaVU86y8(Z[ZZLcom/android/server/wm/Task;)V
 HSPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$fk1uzU77OpLBm_P4BVaoDGWyO_Y(Landroid/util/ArrayMap;Lcom/android/server/wm/DisplayContent;)V
 PLcom/android/server/wm/RootWindowContainer;->$r8$lambda$oz7Sqho3KXMn0jCbWr13BoYh5Yk([ZLcom/android/server/wm/Task;)Z
-PLcom/android/server/wm/RootWindowContainer;->$r8$lambda$p59QcVpCDJNtvMsRJBNKaYgnBHw(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/WindowProcessController;)V
+HPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$p59QcVpCDJNtvMsRJBNKaYgnBHw(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/WindowProcessController;)V
 HPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$qBUAgwgqW8w6VUadOB2XPQ4odGQ(Lcom/android/server/wm/Task;[Z[ILcom/android/server/wm/Task;)Z
-HPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$tQIm92pSCM7PrVtpl0bBsyH-3kQ(Lcom/android/server/policy/PermissionPolicyInternal;Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$tQIm92pSCM7PrVtpl0bBsyH-3kQ(Lcom/android/server/policy/PermissionPolicyInternal;Lcom/android/server/wm/ActivityRecord;)Z
 HPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$tU3uq54E6s47P2cFrn4v86Si-94(Lcom/android/server/wm/WindowProcessController;Ljava/lang/String;Lcom/android/server/wm/Task;[Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;)V
 HSPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$vlR7JHwDJ2dJBdkmJw8S5HvCnpQ(Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/RootWindowContainer;->$r8$lambda$vopjHVBHe9nzZgTtNm5xV035tQc(ILcom/android/server/wm/WindowState;)Z
-PLcom/android/server/wm/RootWindowContainer;->$r8$lambda$w2uTYlwL-hJqpslfXKyteZvT-Tc(Lcom/android/server/wm/RootWindowContainer;Ljava/lang/String;Lcom/android/server/wm/TaskDisplayArea;)V
+HSPLcom/android/server/wm/RootWindowContainer;->$r8$lambda$w2uTYlwL-hJqpslfXKyteZvT-Tc(Lcom/android/server/wm/RootWindowContainer;Ljava/lang/String;Lcom/android/server/wm/TaskDisplayArea;)V
 PLcom/android/server/wm/RootWindowContainer;->$r8$lambda$zQS5fCnIkK3f5eQeRu25wMNfcAU(Ljava/io/PrintWriter;)V
 PLcom/android/server/wm/RootWindowContainer;->$r8$lambda$ziGvR2m1cOJThiyo5aT8ju1HbgM(Lcom/android/server/wm/Task;Ljava/util/ArrayList;Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/RootWindowContainer;->-$$Nest$fgetmTaskLayersChanged(Lcom/android/server/wm/RootWindowContainer;)Z
@@ -57238,17 +59092,18 @@
 HSPLcom/android/server/wm/RootWindowContainer;-><clinit>()V
 HSPLcom/android/server/wm/RootWindowContainer;-><init>(Lcom/android/server/wm/WindowManagerService;)V
 HPLcom/android/server/wm/RootWindowContainer;->addStartingWindowsForVisibleActivities()V
-HPLcom/android/server/wm/RootWindowContainer;->allPausedActivitiesComplete()Z
-HPLcom/android/server/wm/RootWindowContainer;->allResumedActivitiesIdle()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
+HSPLcom/android/server/wm/RootWindowContainer;->allPausedActivitiesComplete()Z
+HSPLcom/android/server/wm/RootWindowContainer;->allResumedActivitiesIdle()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HPLcom/android/server/wm/RootWindowContainer;->allResumedActivitiesVisible()Z
 PLcom/android/server/wm/RootWindowContainer;->anyTaskForId(I)Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/RootWindowContainer;->anyTaskForId(II)Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/RootWindowContainer;->anyTaskForId(IILandroid/app/ActivityOptions;Z)Lcom/android/server/wm/Task;
-HSPLcom/android/server/wm/RootWindowContainer;->applySleepTokens(Z)V
-HSPLcom/android/server/wm/RootWindowContainer;->applySurfaceChangesTransaction()V+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Landroid/hardware/display/DisplayManagerInternal;Lcom/android/server/display/DisplayManagerService$LocalService;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/RootWindowContainer;->applySleepTokens(Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
+HSPLcom/android/server/wm/RootWindowContainer;->applySurfaceChangesTransaction()V+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Landroid/hardware/display/DisplayManagerInternal;Lcom/android/server/display/DisplayManagerService$LocalService;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/StrictModeFlash;Lcom/android/server/wm/StrictModeFlash;
 HSPLcom/android/server/wm/RootWindowContainer;->attachApplication(Lcom/android/server/wm/WindowProcessController;)Z+]Lcom/android/server/wm/RootWindowContainer$AttachApplicationHelper;Lcom/android/server/wm/RootWindowContainer$AttachApplicationHelper;
-HPLcom/android/server/wm/RootWindowContainer;->canLaunchOnDisplay(Lcom/android/server/wm/ActivityRecord;I)Z
+HSPLcom/android/server/wm/RootWindowContainer;->canLaunchOnDisplay(Lcom/android/server/wm/ActivityRecord;I)Z
 PLcom/android/server/wm/RootWindowContainer;->canLaunchOnDisplay(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/Task;)Z
+HSPLcom/android/server/wm/RootWindowContainer;->canShowStrictModeViolation(I)Z
 HSPLcom/android/server/wm/RootWindowContainer;->canStartHomeOnDisplayArea(Landroid/content/pm/ActivityInfo;Lcom/android/server/wm/TaskDisplayArea;Z)Z
 HSPLcom/android/server/wm/RootWindowContainer;->checkAppTransitionReady(Lcom/android/server/wm/WindowSurfacePlacer;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/AppTransitionController;Lcom/android/server/wm/AppTransitionController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;
 HPLcom/android/server/wm/RootWindowContainer;->closeSystemDialogActivities(Ljava/lang/String;)V
@@ -57257,10 +59112,10 @@
 HPLcom/android/server/wm/RootWindowContainer;->createSleepToken(Ljava/lang/String;I)Lcom/android/server/wm/RootWindowContainer$SleepToken;
 HSPLcom/android/server/wm/RootWindowContainer;->dispatchConfigurationToChild(Lcom/android/server/wm/ConfigurationContainer;Landroid/content/res/Configuration;)V
 HSPLcom/android/server/wm/RootWindowContainer;->dispatchConfigurationToChild(Lcom/android/server/wm/DisplayContent;Landroid/content/res/Configuration;)V
-PLcom/android/server/wm/RootWindowContainer;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
-HPLcom/android/server/wm/RootWindowContainer;->dumpActivities(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;ZZLjava/lang/String;)Z
-PLcom/android/server/wm/RootWindowContainer;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
-PLcom/android/server/wm/RootWindowContainer;->dumpDisplayConfigs(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HSPLcom/android/server/wm/RootWindowContainer;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
+HSPLcom/android/server/wm/RootWindowContainer;->dumpActivities(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;ZZLjava/lang/String;)Z
+HPLcom/android/server/wm/RootWindowContainer;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
+HSPLcom/android/server/wm/RootWindowContainer;->dumpDisplayConfigs(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/wm/RootWindowContainer;->dumpDisplayContents(Ljava/io/PrintWriter;)V
 PLcom/android/server/wm/RootWindowContainer;->dumpLayoutNeededDisplayIds(Ljava/io/PrintWriter;)V
 PLcom/android/server/wm/RootWindowContainer;->dumpTokens(Ljava/io/PrintWriter;Z)V
@@ -57268,30 +59123,31 @@
 PLcom/android/server/wm/RootWindowContainer;->dumpWindowsNoHeader(Ljava/io/PrintWriter;ZLjava/util/ArrayList;)V
 HSPLcom/android/server/wm/RootWindowContainer;->ensureActivitiesVisible(Lcom/android/server/wm/ActivityRecord;IZ)V+]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
 HSPLcom/android/server/wm/RootWindowContainer;->ensureActivitiesVisible(Lcom/android/server/wm/ActivityRecord;IZZ)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
-HPLcom/android/server/wm/RootWindowContainer;->ensureVisibilityAndConfig(Lcom/android/server/wm/ActivityRecord;IZZ)Z
-HPLcom/android/server/wm/RootWindowContainer;->executeAppTransitionForAllDisplay()V
-PLcom/android/server/wm/RootWindowContainer;->findActivity(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Z)Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/RootWindowContainer;->findTask(ILjava/lang/String;Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Lcom/android/server/wm/TaskDisplayArea;)Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/RootWindowContainer;->findTask(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/TaskDisplayArea;)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/RootWindowContainer;->ensureVisibilityAndConfig(Lcom/android/server/wm/ActivityRecord;IZZ)Z
+HSPLcom/android/server/wm/RootWindowContainer;->executeAppTransitionForAllDisplay()V
+HPLcom/android/server/wm/RootWindowContainer;->findActivity(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Z)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/RootWindowContainer;->findTask(ILjava/lang/String;Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Lcom/android/server/wm/TaskDisplayArea;)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/RootWindowContainer;->findTask(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/TaskDisplayArea;)Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/RootWindowContainer;->finishDisabledPackageActivities(Ljava/lang/String;Ljava/util/Set;ZZIZ)Z
 HPLcom/android/server/wm/RootWindowContainer;->finishTopCrashedActivities(Lcom/android/server/wm/WindowProcessController;Ljava/lang/String;)I
 PLcom/android/server/wm/RootWindowContainer;->finishVoiceTask(Landroid/service/voice/IVoiceInteractionSession;)V
 HSPLcom/android/server/wm/RootWindowContainer;->forAllDisplayPolicies(Ljava/util/function/Consumer;)V
 HSPLcom/android/server/wm/RootWindowContainer;->forAllDisplays(Ljava/util/function/Consumer;)V+]Ljava/util/function/Consumer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-HPLcom/android/server/wm/RootWindowContainer;->getActivityRecord(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/RootWindowContainer;->getActivityRecord(Landroid/os/IBinder;)Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/RootWindowContainer;->getAllRootTaskInfos(I)Ljava/util/ArrayList;
 HPLcom/android/server/wm/RootWindowContainer;->getCurrentInputMethodWindow()Lcom/android/server/wm/WindowState;
 HPLcom/android/server/wm/RootWindowContainer;->getDefaultDisplay()Lcom/android/server/wm/DisplayContent;
 PLcom/android/server/wm/RootWindowContainer;->getDefaultDisplayHomeActivityForUser(I)Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/RootWindowContainer;->getDefaultTaskDisplayArea()Lcom/android/server/wm/TaskDisplayArea;
 HSPLcom/android/server/wm/RootWindowContainer;->getDisplayContent(I)Lcom/android/server/wm/DisplayContent;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/RootWindowContainer;
-HSPLcom/android/server/wm/RootWindowContainer;->getDisplayContentOrCreate(I)Lcom/android/server/wm/DisplayContent;+]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
+PLcom/android/server/wm/RootWindowContainer;->getDisplayContent(Ljava/lang/String;)Lcom/android/server/wm/DisplayContent;
+HSPLcom/android/server/wm/RootWindowContainer;->getDisplayContentOrCreate(I)Lcom/android/server/wm/DisplayContent;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/RootWindowContainer;]Landroid/hardware/display/DisplayManager;Landroid/hardware/display/DisplayManager;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
 PLcom/android/server/wm/RootWindowContainer;->getDisplayContextsWithNonToastVisibleWindows(ILjava/util/List;)V
 PLcom/android/server/wm/RootWindowContainer;->getDisplayUiContext(I)Landroid/content/Context;
 PLcom/android/server/wm/RootWindowContainer;->getDumpActivities(Ljava/lang/String;ZZI)Ljava/util/ArrayList;
 PLcom/android/server/wm/RootWindowContainer;->getName()Ljava/lang/String;
 PLcom/android/server/wm/RootWindowContainer;->getNextFocusableRootTask(Lcom/android/server/wm/Task;Z)Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/RootWindowContainer;->getOrCreateRootTask(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;ZLcom/android/server/wm/LaunchParamsController$LaunchParams;I)Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/RootWindowContainer;->getOrCreateRootTask(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;ZLcom/android/server/wm/LaunchParamsController$LaunchParams;I)Lcom/android/server/wm/Task;
 PLcom/android/server/wm/RootWindowContainer;->getOrCreateRootTask(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Lcom/android/server/wm/Task;Z)Lcom/android/server/wm/Task;
 HPLcom/android/server/wm/RootWindowContainer;->getRootTask(I)Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/RootWindowContainer;->getRootTask(II)Lcom/android/server/wm/Task;
@@ -57302,86 +59158,90 @@
 HSPLcom/android/server/wm/RootWindowContainer;->getTaskToShowPermissionDialogOn(Ljava/lang/String;I)I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;
 HSPLcom/android/server/wm/RootWindowContainer;->getTopDisplayFocusedRootTask()Lcom/android/server/wm/Task;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HPLcom/android/server/wm/RootWindowContainer;->getTopFocusedDisplayContent()Lcom/android/server/wm/DisplayContent;+]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
-HPLcom/android/server/wm/RootWindowContainer;->getTopResumedActivity()Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/RootWindowContainer;->getTopResumedActivity()Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/RootWindowContainer;->getTopVisibleActivities()Ljava/util/List;
-HPLcom/android/server/wm/RootWindowContainer;->getWindowToken(Landroid/os/IBinder;)Lcom/android/server/wm/WindowToken;+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/RootWindowContainer;->getWindowToken(Landroid/os/IBinder;)Lcom/android/server/wm/WindowToken;+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/RootWindowContainer;->getWindowTokenDisplay(Lcom/android/server/wm/WindowToken;)Lcom/android/server/wm/DisplayContent;
-PLcom/android/server/wm/RootWindowContainer;->handleAppCrash(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/WindowProcessController;)V
-PLcom/android/server/wm/RootWindowContainer;->handleAppCrash(Lcom/android/server/wm/WindowProcessController;)V
+HPLcom/android/server/wm/RootWindowContainer;->handleAppCrash(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/WindowProcessController;)V
+HPLcom/android/server/wm/RootWindowContainer;->handleAppCrash(Lcom/android/server/wm/WindowProcessController;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/internal/util/function/pooled/PooledConsumer;Lcom/android/internal/util/function/pooled/PooledLambdaImpl;
 HSPLcom/android/server/wm/RootWindowContainer;->handleNotObscuredLocked(Lcom/android/server/wm/WindowState;ZZ)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;
 HSPLcom/android/server/wm/RootWindowContainer;->handleResizingWindows()V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/wm/RootWindowContainer;->hasAwakeDisplay()Z
 HSPLcom/android/server/wm/RootWindowContainer;->hasPendingLayoutChanges(Lcom/android/server/wm/WindowAnimator;)Z+]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-HPLcom/android/server/wm/RootWindowContainer;->hasVisibleWindowAboveButDoesNotOwnNotificationShade(I)Z
+HSPLcom/android/server/wm/RootWindowContainer;->hasVisibleWindowAboveButDoesNotOwnNotificationShade(I)Z
 HSPLcom/android/server/wm/RootWindowContainer;->invalidateTaskLayers()V
 PLcom/android/server/wm/RootWindowContainer;->isAttached()Z
 HSPLcom/android/server/wm/RootWindowContainer;->isLayoutNeeded()Z+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-PLcom/android/server/wm/RootWindowContainer;->isOnTop()Z
-HPLcom/android/server/wm/RootWindowContainer;->isTopDisplayFocusedRootTask(Lcom/android/server/wm/Task;)Z
+HSPLcom/android/server/wm/RootWindowContainer;->isOnTop()Z
+HSPLcom/android/server/wm/RootWindowContainer;->isTopDisplayFocusedRootTask(Lcom/android/server/wm/Task;)Z
 HPLcom/android/server/wm/RootWindowContainer;->lambda$addStartingWindowsForVisibleActivities$25(Ljava/util/ArrayList;Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/RootWindowContainer;->lambda$allPausedActivitiesComplete$33([ZLcom/android/server/wm/Task;)Z+]Lcom/android/internal/protolog/ProtoLogGroup;Lcom/android/internal/protolog/ProtoLogGroup;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/RootWindowContainer;->lambda$allResumedActivitiesVisible$32([ZLcom/android/server/wm/Task;)Z
+HSPLcom/android/server/wm/RootWindowContainer;->lambda$allPausedActivitiesComplete$33([ZLcom/android/server/wm/Task;)Z+]Lcom/android/internal/protolog/ProtoLogGroup;Lcom/android/internal/protolog/ProtoLogGroup;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/RootWindowContainer;->lambda$allResumedActivitiesVisible$32([ZLcom/android/server/wm/Task;)Z
 PLcom/android/server/wm/RootWindowContainer;->lambda$applySleepTokens$19(Lcom/android/server/wm/TaskFragment;)V
 HPLcom/android/server/wm/RootWindowContainer;->lambda$applySleepTokens$20(ZLcom/android/server/wm/DisplayContent;Lcom/android/server/wm/Task;)V
+PLcom/android/server/wm/RootWindowContainer;->lambda$canShowStrictModeViolation$6(ILcom/android/server/wm/WindowState;)Z
 HPLcom/android/server/wm/RootWindowContainer;->lambda$closeSystemDialogActivities$29(Ljava/lang/String;Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/RootWindowContainer;->lambda$dumpActivities$40([ZLjava/io/PrintWriter;Ljava/io/FileDescriptor;ZZLjava/lang/String;[ZLcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/RootWindowContainer;->lambda$dumpActivities$40([ZLjava/io/PrintWriter;Ljava/io/FileDescriptor;ZZLjava/lang/String;[ZLcom/android/server/wm/Task;)V
 PLcom/android/server/wm/RootWindowContainer;->lambda$dumpActivities$41(Ljava/io/PrintWriter;)V
-PLcom/android/server/wm/RootWindowContainer;->lambda$dumpActivities$42([ZLjava/io/PrintWriter;Ljava/lang/String;[ZLcom/android/server/wm/TaskDisplayArea;)V
+HSPLcom/android/server/wm/RootWindowContainer;->lambda$dumpActivities$42([ZLjava/io/PrintWriter;Ljava/lang/String;[ZLcom/android/server/wm/TaskDisplayArea;)V
 PLcom/android/server/wm/RootWindowContainer;->lambda$dumpActivities$43(Ljava/io/PrintWriter;)V
 PLcom/android/server/wm/RootWindowContainer;->lambda$dumpActivities$44(Ljava/io/PrintWriter;)V
 HPLcom/android/server/wm/RootWindowContainer;->lambda$dumpWindowsNoHeader$9(Ljava/util/ArrayList;Ljava/io/PrintWriter;[IZLcom/android/server/wm/WindowState;)V
-HPLcom/android/server/wm/RootWindowContainer;->lambda$findTask$16(Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/RootWindowContainer;->lambda$findTask$16(Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;)Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/RootWindowContainer;->lambda$finishTopCrashedActivities$17(Lcom/android/server/wm/WindowProcessController;Ljava/lang/String;Lcom/android/server/wm/Task;[Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/RootWindowContainer;->lambda$finishVoiceTask$31(Landroid/service/voice/IVoiceInteractionSession;Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/RootWindowContainer;->lambda$getAllRootTaskInfos$22(Ljava/util/ArrayList;Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/RootWindowContainer;->lambda$getDisplayContextsWithNonToastVisibleWindows$10(ILcom/android/server/wm/WindowState;)Z
 PLcom/android/server/wm/RootWindowContainer;->lambda$getDumpActivities$39(IZLjava/util/ArrayList;Ljava/lang/String;ILcom/android/server/wm/Task;)Z
 HPLcom/android/server/wm/RootWindowContainer;->lambda$getRootTaskInfo$21(Lcom/android/server/wm/Task;[Z[ILcom/android/server/wm/Task;)Z
-HPLcom/android/server/wm/RootWindowContainer;->lambda$getTaskToShowPermissionDialogOn$37(Lcom/android/server/policy/PermissionPolicyInternal;Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/policy/PermissionPolicyInternal;Lcom/android/server/policy/PermissionPolicyService$Internal;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/RootWindowContainer;->lambda$getTaskToShowPermissionDialogOn$37(Lcom/android/server/policy/PermissionPolicyInternal;Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/policy/PermissionPolicyInternal;Lcom/android/server/policy/PermissionPolicyService$Internal;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/RootWindowContainer;->lambda$getTaskToShowPermissionDialogOn$38(Lcom/android/server/policy/PermissionPolicyInternal;ILjava/lang/String;[ILcom/android/server/wm/TaskFragment;)Z+]Lcom/android/server/policy/PermissionPolicyInternal;Lcom/android/server/policy/PermissionPolicyService$Internal;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/RootWindowContainer;->lambda$getTopVisibleActivities$13(Lcom/android/server/wm/Task;Ljava/util/ArrayList;Lcom/android/server/wm/Task;)V
-HPLcom/android/server/wm/RootWindowContainer;->lambda$hasVisibleWindowAboveButDoesNotOwnNotificationShade$30(I[ZLcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/RootWindowContainer;->lambda$hasVisibleWindowAboveButDoesNotOwnNotificationShade$30(I[ZLcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+PLcom/android/server/wm/RootWindowContainer;->lambda$lockAllProfileTasks$34(ILcom/android/server/wm/ActivityRecord;)Z
+PLcom/android/server/wm/RootWindowContainer;->lambda$lockAllProfileTasks$35(ILcom/android/server/wm/Task;)V
 PLcom/android/server/wm/RootWindowContainer;->lambda$moveActivityToPinnedRootTask$15(Lcom/android/server/wm/TaskFragment;)V
 HPLcom/android/server/wm/RootWindowContainer;->lambda$new$0(Lcom/android/server/wm/WindowState;)V
 HSPLcom/android/server/wm/RootWindowContainer;->lambda$performSurfacePlacementNoTrace$8(Lcom/android/server/wm/DisplayContent;)V+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/InputMonitor;Lcom/android/server/wm/InputMonitor;
 HPLcom/android/server/wm/RootWindowContainer;->lambda$putTasksToSleep$28(Z[ZZLcom/android/server/wm/Task;)V
-HPLcom/android/server/wm/RootWindowContainer;->lambda$rankTaskLayers$26(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/RootWindowContainer;->lambda$rankTaskLayers$27(Lcom/android/server/wm/Task;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/RootWindowContainer;->lambda$rankTaskLayers$26(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/RootWindowContainer;->lambda$rankTaskLayers$27(Lcom/android/server/wm/Task;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/RootWindowContainer;->lambda$resumeFocusedTasksTopActivities$18(Lcom/android/server/wm/Task;[ZZLandroid/app/ActivityOptions;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/Task;)V+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/RootWindowContainer;->lambda$startHomeOnDisplay$12(ILjava/lang/String;ZZLcom/android/server/wm/TaskDisplayArea;Ljava/lang/Boolean;)Ljava/lang/Boolean;
-PLcom/android/server/wm/RootWindowContainer;->lambda$startHomeOnEmptyDisplays$11(Ljava/lang/String;Lcom/android/server/wm/TaskDisplayArea;)V
+HSPLcom/android/server/wm/RootWindowContainer;->lambda$startHomeOnEmptyDisplays$11(Ljava/lang/String;Lcom/android/server/wm/TaskDisplayArea;)V
 HPLcom/android/server/wm/RootWindowContainer;->lambda$startPowerModeLaunchIfNeeded$36([Z[ZLcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/TaskDisplayArea;)V
 HSPLcom/android/server/wm/RootWindowContainer;->lambda$static$1(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/RootWindowContainer;->lambda$switchUser$14(ILcom/android/server/wm/Task;)V
 PLcom/android/server/wm/RootWindowContainer;->lambda$updateAppOpsState$5(Lcom/android/server/wm/WindowState;)V
-HSPLcom/android/server/wm/RootWindowContainer;->lambda$updateDisplayImePolicyCache$24(Landroid/util/ArrayMap;Lcom/android/server/wm/DisplayContent;)V
+HSPLcom/android/server/wm/RootWindowContainer;->lambda$updateDisplayImePolicyCache$24(Landroid/util/ArrayMap;Lcom/android/server/wm/DisplayContent;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HPLcom/android/server/wm/RootWindowContainer;->lambda$updateHiddenWhileSuspendedState$4(Landroid/util/ArraySet;ZLcom/android/server/wm/WindowState;)V
+PLcom/android/server/wm/RootWindowContainer;->lockAllProfileTasks(I)V
 HPLcom/android/server/wm/RootWindowContainer;->makeSleepTokenKey(Ljava/lang/String;I)I
-PLcom/android/server/wm/RootWindowContainer;->matchesActivity(Lcom/android/server/wm/ActivityRecord;IZLandroid/content/Intent;Landroid/content/ComponentName;)Z
+HPLcom/android/server/wm/RootWindowContainer;->matchesActivity(Lcom/android/server/wm/ActivityRecord;IZLandroid/content/Intent;Landroid/content/ComponentName;)Z
 PLcom/android/server/wm/RootWindowContainer;->moveActivityToPinnedRootTask(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;)V
 PLcom/android/server/wm/RootWindowContainer;->notifyActivityPipModeChanged(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/RootWindowContainer;->onChildPositionChanged(Lcom/android/server/wm/WindowContainer;)V
-PLcom/android/server/wm/RootWindowContainer;->onDisplayAdded(I)V
+HPLcom/android/server/wm/RootWindowContainer;->onDisplayAdded(I)V
 HSPLcom/android/server/wm/RootWindowContainer;->onDisplayChanged(I)V
-PLcom/android/server/wm/RootWindowContainer;->onDisplayRemoved(I)V
+HPLcom/android/server/wm/RootWindowContainer;->onDisplayRemoved(I)V
 HSPLcom/android/server/wm/RootWindowContainer;->onSettingsRetrieved()V
 HSPLcom/android/server/wm/RootWindowContainer;->performSurfacePlacement()V+]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
-HSPLcom/android/server/wm/RootWindowContainer;->performSurfacePlacementNoTrace()V+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/os/Handler;Lcom/android/server/wm/RootWindowContainer$MyHandler;,Lcom/android/server/wm/WindowManagerService$H;]Lcom/android/server/wm/WindowAnimator;Lcom/android/server/wm/WindowAnimator;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/RecentsAnimationController;Lcom/android/server/wm/RecentsAnimationController;]Lcom/android/server/wm/TaskFragmentOrganizerController;Lcom/android/server/wm/TaskFragmentOrganizerController;]Lcom/android/server/wm/TaskOrganizerController;Lcom/android/server/wm/TaskOrganizerController;]Lcom/android/server/wm/BLASTSyncEngine;Lcom/android/server/wm/BLASTSyncEngine;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Landroid/os/Message;Landroid/os/Message;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;,Ljava/util/ArrayList;
+HSPLcom/android/server/wm/RootWindowContainer;->performSurfacePlacementNoTrace()V+]Ljava/util/HashMap;Ljava/util/HashMap;]Landroid/os/Handler;Lcom/android/server/wm/RootWindowContainer$MyHandler;,Lcom/android/server/wm/WindowManagerService$H;]Lcom/android/server/wm/WindowAnimator;Lcom/android/server/wm/WindowAnimator;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/RecentsAnimationController;Lcom/android/server/wm/RecentsAnimationController;]Lcom/android/server/wm/TaskFragmentOrganizerController;Lcom/android/server/wm/TaskFragmentOrganizerController;]Lcom/android/server/wm/TaskOrganizerController;Lcom/android/server/wm/TaskOrganizerController;]Lcom/android/server/wm/BLASTSyncEngine;Lcom/android/server/wm/BLASTSyncEngine;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Landroid/os/Message;Landroid/os/Message;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;,Ljava/util/ArrayList;]Landroid/os/PowerManagerInternal;Lcom/android/server/power/PowerManagerService$LocalService;
 PLcom/android/server/wm/RootWindowContainer;->prepareForShutdown()V
 HPLcom/android/server/wm/RootWindowContainer;->processTaskForTaskInfo(Lcom/android/server/wm/Task;Landroid/app/ActivityTaskManager$RootTaskInfo;[I)V
 HPLcom/android/server/wm/RootWindowContainer;->putTasksToSleep(ZZ)Z
-HPLcom/android/server/wm/RootWindowContainer;->rankTaskLayers()V
+HSPLcom/android/server/wm/RootWindowContainer;->rankTaskLayers()V
 PLcom/android/server/wm/RootWindowContainer;->removeChild(Lcom/android/server/wm/DisplayContent;)V
 PLcom/android/server/wm/RootWindowContainer;->removeChild(Lcom/android/server/wm/WindowContainer;)V
 HSPLcom/android/server/wm/RootWindowContainer;->removeReplacedWindows()V
 PLcom/android/server/wm/RootWindowContainer;->removeRootTasksInWindowingModes([I)V
 HPLcom/android/server/wm/RootWindowContainer;->removeSleepToken(Lcom/android/server/wm/RootWindowContainer$SleepToken;)V
 PLcom/android/server/wm/RootWindowContainer;->removeUser(I)V
-HPLcom/android/server/wm/RootWindowContainer;->resolveActivityType(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Lcom/android/server/wm/Task;)I
+HSPLcom/android/server/wm/RootWindowContainer;->resolveActivityType(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Lcom/android/server/wm/Task;)I
 HSPLcom/android/server/wm/RootWindowContainer;->resolveHomeActivity(ILandroid/content/Intent;)Landroid/content/pm/ActivityInfo;
 HSPLcom/android/server/wm/RootWindowContainer;->resumeFocusedTasksTopActivities()Z
-HSPLcom/android/server/wm/RootWindowContainer;->resumeFocusedTasksTopActivities(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)Z
-HSPLcom/android/server/wm/RootWindowContainer;->resumeFocusedTasksTopActivities(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Z)Z
+HSPLcom/android/server/wm/RootWindowContainer;->resumeFocusedTasksTopActivities(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)Z+]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
+HSPLcom/android/server/wm/RootWindowContainer;->resumeFocusedTasksTopActivities(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Z)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
 HSPLcom/android/server/wm/RootWindowContainer;->resumeHomeActivity(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;Lcom/android/server/wm/TaskDisplayArea;)Z
 HSPLcom/android/server/wm/RootWindowContainer;->scheduleAnimation()V+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
 HSPLcom/android/server/wm/RootWindowContainer;->setWindowManager(Lcom/android/server/wm/WindowManagerService;)V
@@ -57390,20 +59250,20 @@
 HSPLcom/android/server/wm/RootWindowContainer;->startHomeOnAllDisplays(ILjava/lang/String;)Z
 HSPLcom/android/server/wm/RootWindowContainer;->startHomeOnDisplay(ILjava/lang/String;I)Z
 HSPLcom/android/server/wm/RootWindowContainer;->startHomeOnDisplay(ILjava/lang/String;IZZ)Z
-HPLcom/android/server/wm/RootWindowContainer;->startHomeOnEmptyDisplays(Ljava/lang/String;)V
+HSPLcom/android/server/wm/RootWindowContainer;->startHomeOnEmptyDisplays(Ljava/lang/String;)V
 HSPLcom/android/server/wm/RootWindowContainer;->startHomeOnTaskDisplayArea(ILjava/lang/String;Lcom/android/server/wm/TaskDisplayArea;ZZ)Z
-HPLcom/android/server/wm/RootWindowContainer;->startPowerModeLaunchIfNeeded(ZLcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/RootWindowContainer;->startSystemDecorations(Lcom/android/server/wm/DisplayContent;)V
+HSPLcom/android/server/wm/RootWindowContainer;->startPowerModeLaunchIfNeeded(ZLcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/RootWindowContainer;->startSystemDecorations(Lcom/android/server/wm/DisplayContent;)V
 PLcom/android/server/wm/RootWindowContainer;->switchUser(ILcom/android/server/am/UserState;)Z
 HSPLcom/android/server/wm/RootWindowContainer;->topRunningActivity()Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/RootWindowContainer;->updateActivityApplicationInfo(Landroid/content/pm/ApplicationInfo;)V
-PLcom/android/server/wm/RootWindowContainer;->updateActivityApplicationInfo(Lcom/android/server/wm/ActivityRecord;Landroid/content/pm/ApplicationInfo;ILjava/lang/String;)V
+HPLcom/android/server/wm/RootWindowContainer;->updateActivityApplicationInfo(Landroid/content/pm/ApplicationInfo;)V
+HPLcom/android/server/wm/RootWindowContainer;->updateActivityApplicationInfo(Lcom/android/server/wm/ActivityRecord;Landroid/content/pm/ApplicationInfo;ILjava/lang/String;)V
 PLcom/android/server/wm/RootWindowContainer;->updateAppOpsState()V
 HSPLcom/android/server/wm/RootWindowContainer;->updateDisplayImePolicyCache()V
 HSPLcom/android/server/wm/RootWindowContainer;->updateFocusedWindowLocked(IZ)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HPLcom/android/server/wm/RootWindowContainer;->updateHiddenWhileSuspendedState(Landroid/util/ArraySet;Z)V
 HSPLcom/android/server/wm/RootWindowContainer;->updateUIDsPresentOnDisplay()V
-HPLcom/android/server/wm/RootWindowContainer;->updateUserRootTask(ILcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/RootWindowContainer;->updateUserRootTask(ILcom/android/server/wm/Task;)V
 HPLcom/android/server/wm/RunningTasks$$ExternalSyntheticLambda0;-><init>()V
 HPLcom/android/server/wm/RunningTasks$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/wm/RunningTasks$$ExternalSyntheticLambda1;-><init>()V
@@ -57426,7 +59286,7 @@
 HSPLcom/android/server/wm/SafeActivityOptions;->getOptions(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/ActivityTaskSupervisor;)Landroid/app/ActivityOptions;
 PLcom/android/server/wm/SafeActivityOptions;->getOptions(Lcom/android/server/wm/ActivityRecord;)Landroid/app/ActivityOptions;
 PLcom/android/server/wm/SafeActivityOptions;->getOptions(Lcom/android/server/wm/ActivityTaskSupervisor;)Landroid/app/ActivityOptions;
-PLcom/android/server/wm/SafeActivityOptions;->getOriginalOptions()Landroid/app/ActivityOptions;
+HSPLcom/android/server/wm/SafeActivityOptions;->getOriginalOptions()Landroid/app/ActivityOptions;
 HSPLcom/android/server/wm/SafeActivityOptions;->isSystemOrSystemUI(II)Z
 HSPLcom/android/server/wm/SafeActivityOptions;->mergeActivityOptions(Landroid/app/ActivityOptions;Landroid/app/ActivityOptions;)Landroid/app/ActivityOptions;
 HSPLcom/android/server/wm/SafeActivityOptions;->popAppVerificationBundle()Landroid/os/Bundle;
@@ -57446,7 +59306,7 @@
 PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController$1;->getDuration()J
 PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->$r8$lambda$wJe6NDrB63BnRyvW-E-a-FgRopM(Lcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;ILcom/android/server/wm/AnimationAdapter;)V
 PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;-><init>(Lcom/android/server/wm/ScreenRotationAnimation;)V
-PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->cancel()V
+HPLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->cancel()V
 PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->createWindowAnimationSpec(Landroid/view/animation/Animation;)Lcom/android/server/wm/WindowAnimationSpec;
 HPLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->initializeBuilder()Lcom/android/server/wm/SimpleSurfaceAnimatable$Builder;
 PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->isAnimating()Z
@@ -57456,9 +59316,9 @@
 PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->startCustomAnimation()V
 HPLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->startDisplayRotation()Lcom/android/server/wm/SurfaceAnimator;
 PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->startEnterBlackFrameAnimation()Lcom/android/server/wm/SurfaceAnimator;
-PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->startScreenRotationAnimation()V
+HPLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->startScreenRotationAnimation()V
 PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->startScreenshotAlphaAnimation()Lcom/android/server/wm/SurfaceAnimator;
-PLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->startScreenshotRotationAnimation()Lcom/android/server/wm/SurfaceAnimator;
+HPLcom/android/server/wm/ScreenRotationAnimation$SurfaceRotationAnimationController;->startScreenshotRotationAnimation()Lcom/android/server/wm/SurfaceAnimator;
 PLcom/android/server/wm/ScreenRotationAnimation;->-$$Nest$fgetmBackColorSurface(Lcom/android/server/wm/ScreenRotationAnimation;)Landroid/view/SurfaceControl;
 PLcom/android/server/wm/ScreenRotationAnimation;->-$$Nest$fgetmContext(Lcom/android/server/wm/ScreenRotationAnimation;)Landroid/content/Context;
 PLcom/android/server/wm/ScreenRotationAnimation;->-$$Nest$fgetmDisplayContent(Lcom/android/server/wm/ScreenRotationAnimation;)Lcom/android/server/wm/DisplayContent;
@@ -57472,7 +59332,7 @@
 PLcom/android/server/wm/ScreenRotationAnimation;->-$$Nest$fgetmService(Lcom/android/server/wm/ScreenRotationAnimation;)Lcom/android/server/wm/WindowManagerService;
 PLcom/android/server/wm/ScreenRotationAnimation;->-$$Nest$fgetmStartLuma(Lcom/android/server/wm/ScreenRotationAnimation;)F
 HPLcom/android/server/wm/ScreenRotationAnimation;-><init>(Lcom/android/server/wm/DisplayContent;I)V
-PLcom/android/server/wm/ScreenRotationAnimation;->dismiss(Landroid/view/SurfaceControl$Transaction;JFIIII)Z
+HPLcom/android/server/wm/ScreenRotationAnimation;->dismiss(Landroid/view/SurfaceControl$Transaction;JFIIII)Z
 PLcom/android/server/wm/ScreenRotationAnimation;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 PLcom/android/server/wm/ScreenRotationAnimation;->hasScreenshot()Z
 PLcom/android/server/wm/ScreenRotationAnimation;->isAnimating()Z
@@ -57509,11 +59369,11 @@
 PLcom/android/server/wm/Session;->dragRecipientEntered(Landroid/view/IWindow;)V
 PLcom/android/server/wm/Session;->dragRecipientExited(Landroid/view/IWindow;)V
 PLcom/android/server/wm/Session;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-HSPLcom/android/server/wm/Session;->finishDrawing(Landroid/view/IWindow;Landroid/view/SurfaceControl$Transaction;I)V
+HSPLcom/android/server/wm/Session;->finishDrawing(Landroid/view/IWindow;Landroid/view/SurfaceControl$Transaction;I)V+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
 HSPLcom/android/server/wm/Session;->getInTouchMode()Z
 PLcom/android/server/wm/Session;->getWindowId(Landroid/os/IBinder;)Landroid/view/IWindowId;
 PLcom/android/server/wm/Session;->grantEmbeddedWindowFocus(Landroid/view/IWindow;Landroid/os/IBinder;Z)V
-PLcom/android/server/wm/Session;->grantInputChannel(ILandroid/view/SurfaceControl;Landroid/view/IWindow;Landroid/os/IBinder;IIILandroid/os/IBinder;Ljava/lang/String;Landroid/view/InputChannel;)V
+HPLcom/android/server/wm/Session;->grantInputChannel(ILandroid/view/SurfaceControl;Landroid/view/IWindow;Landroid/os/IBinder;IIILandroid/os/IBinder;Ljava/lang/String;Landroid/view/InputChannel;)V
 PLcom/android/server/wm/Session;->hasAlertWindowSurfaces(Lcom/android/server/wm/DisplayContent;)Z
 HPLcom/android/server/wm/Session;->killSessionLocked()V
 PLcom/android/server/wm/Session;->lambda$setShouldZoomOutWallpaper$2(ZLcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WindowState;)V
@@ -57524,25 +59384,25 @@
 HSPLcom/android/server/wm/Session;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
 HSPLcom/android/server/wm/Session;->onWindowSurfaceVisibilityChanged(Lcom/android/server/wm/WindowSurfaceController;ZI)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/AlertWindowNotification;Lcom/android/server/wm/AlertWindowNotification;]Lcom/android/server/wm/Session;Lcom/android/server/wm/Session;
 PLcom/android/server/wm/Session;->performDrag(Landroid/view/IWindow;ILandroid/view/SurfaceControl;IFFFFLandroid/content/ClipData;)Landroid/os/IBinder;
-HPLcom/android/server/wm/Session;->performHapticFeedback(IZ)Z
+HPLcom/android/server/wm/Session;->performHapticFeedback(IZ)Z+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;
 HPLcom/android/server/wm/Session;->pokeDrawLock(Landroid/os/IBinder;)V
 PLcom/android/server/wm/Session;->prepareToReplaceWindows(Landroid/os/IBinder;Z)V
 HSPLcom/android/server/wm/Session;->relayout(Landroid/view/IWindow;Landroid/view/WindowManager$LayoutParams;IIIILandroid/window/ClientWindowFrames;Landroid/util/MergedConfiguration;Landroid/view/SurfaceControl;Landroid/view/InsetsState;[Landroid/view/InsetsSourceControl;Landroid/os/Bundle;)I+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
 HPLcom/android/server/wm/Session;->remove(Landroid/view/IWindow;)V
 PLcom/android/server/wm/Session;->reportDropResult(Landroid/view/IWindow;Z)V
 HPLcom/android/server/wm/Session;->reportSystemGestureExclusionChanged(Landroid/view/IWindow;Ljava/util/List;)V+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
-PLcom/android/server/wm/Session;->sendWallpaperCommand(Landroid/os/IBinder;Ljava/lang/String;IIILandroid/os/Bundle;Z)Landroid/os/Bundle;
+HPLcom/android/server/wm/Session;->sendWallpaperCommand(Landroid/os/IBinder;Ljava/lang/String;IIILandroid/os/Bundle;Z)Landroid/os/Bundle;
 HPLcom/android/server/wm/Session;->setHasOverlayUi(Z)V
 PLcom/android/server/wm/Session;->setInTouchMode(Z)V
-HPLcom/android/server/wm/Session;->setInsets(Landroid/view/IWindow;ILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Region;)V
+HSPLcom/android/server/wm/Session;->setInsets(Landroid/view/IWindow;ILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Region;)V+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
 HSPLcom/android/server/wm/Session;->setOnBackInvokedCallbackInfo(Landroid/view/IWindow;Landroid/window/OnBackInvokedCallbackInfo;)V
 PLcom/android/server/wm/Session;->setShouldZoomOutWallpaper(Landroid/os/IBinder;Z)V
 HPLcom/android/server/wm/Session;->setWallpaperPosition(Landroid/os/IBinder;FFFF)V
 HPLcom/android/server/wm/Session;->setWallpaperZoomOut(Landroid/os/IBinder;F)V+]Lcom/android/server/wm/Session;Lcom/android/server/wm/Session;
 PLcom/android/server/wm/Session;->startMovingTask(Landroid/view/IWindow;FF)Z
 HSPLcom/android/server/wm/Session;->toString()Ljava/lang/String;
-PLcom/android/server/wm/Session;->updateInputChannel(Landroid/os/IBinder;ILandroid/view/SurfaceControl;IILandroid/graphics/Region;)V
-HPLcom/android/server/wm/Session;->updatePointerIcon(Landroid/view/IWindow;)V
+HPLcom/android/server/wm/Session;->updateInputChannel(Landroid/os/IBinder;ILandroid/view/SurfaceControl;IILandroid/graphics/Region;)V
+HPLcom/android/server/wm/Session;->updatePointerIcon(Landroid/view/IWindow;)V+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
 HPLcom/android/server/wm/Session;->updateRequestedVisibilities(Landroid/view/IWindow;Landroid/view/InsetsVisibilities;)V
 PLcom/android/server/wm/Session;->updateTapExcludeRegion(Landroid/view/IWindow;Landroid/graphics/Region;)V
 PLcom/android/server/wm/Session;->validateAndResolveDragMimeTypeExtras(Landroid/content/ClipData;IILjava/lang/String;)V
@@ -57573,8 +59433,8 @@
 PLcom/android/server/wm/SimpleSurfaceAnimatable$Builder;->-$$Nest$fgetmSurfaceControl(Lcom/android/server/wm/SimpleSurfaceAnimatable$Builder;)Landroid/view/SurfaceControl;
 PLcom/android/server/wm/SimpleSurfaceAnimatable$Builder;->-$$Nest$fgetmSyncTransactionSupplier(Lcom/android/server/wm/SimpleSurfaceAnimatable$Builder;)Ljava/util/function/Supplier;
 PLcom/android/server/wm/SimpleSurfaceAnimatable$Builder;->-$$Nest$fgetmWidth(Lcom/android/server/wm/SimpleSurfaceAnimatable$Builder;)I
-PLcom/android/server/wm/SimpleSurfaceAnimatable$Builder;-><init>()V
-PLcom/android/server/wm/SimpleSurfaceAnimatable$Builder;->build()Lcom/android/server/wm/SurfaceAnimator$Animatable;
+HPLcom/android/server/wm/SimpleSurfaceAnimatable$Builder;-><init>()V
+HPLcom/android/server/wm/SimpleSurfaceAnimatable$Builder;->build()Lcom/android/server/wm/SurfaceAnimator$Animatable;
 PLcom/android/server/wm/SimpleSurfaceAnimatable$Builder;->setAnimationLeashParent(Landroid/view/SurfaceControl;)Lcom/android/server/wm/SimpleSurfaceAnimatable$Builder;
 PLcom/android/server/wm/SimpleSurfaceAnimatable$Builder;->setAnimationLeashSupplier(Ljava/util/function/Supplier;)Lcom/android/server/wm/SimpleSurfaceAnimatable$Builder;
 PLcom/android/server/wm/SimpleSurfaceAnimatable$Builder;->setCommitTransactionRunnable(Ljava/lang/Runnable;)Lcom/android/server/wm/SimpleSurfaceAnimatable$Builder;
@@ -57626,9 +59486,13 @@
 HPLcom/android/server/wm/StartingSurfaceController;->createTaskSnapshotSurface(Lcom/android/server/wm/ActivityRecord;Landroid/window/TaskSnapshot;)Lcom/android/server/wm/StartingSurfaceController$StartingSurface;
 PLcom/android/server/wm/StartingSurfaceController;->endDeferAddStartingWindow(Landroid/app/ActivityOptions;)V
 PLcom/android/server/wm/StartingSurfaceController;->isExceptionApp(Ljava/lang/String;ILjava/util/function/Supplier;)Z
-PLcom/android/server/wm/StartingSurfaceController;->makeStartingWindowTypeParameter(ZZZZZZZZILjava/lang/String;I)I
-HPLcom/android/server/wm/StartingSurfaceController;->showStartingWindow(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;ZZLcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/StartingSurfaceController;->makeStartingWindowTypeParameter(ZZZZZZZZILjava/lang/String;I)I
+HSPLcom/android/server/wm/StartingSurfaceController;->showStartingWindow(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;ZZLcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/StartingSurfaceController;->showStartingWindowFromDeferringActivities(Landroid/app/ActivityOptions;)V
+PLcom/android/server/wm/StrictModeFlash;-><init>(Lcom/android/server/wm/DisplayContent;Landroid/view/SurfaceControl$Transaction;)V
+PLcom/android/server/wm/StrictModeFlash;->drawIfNeeded()V
+HPLcom/android/server/wm/StrictModeFlash;->positionSurface(IILandroid/view/SurfaceControl$Transaction;)V
+PLcom/android/server/wm/StrictModeFlash;->setVisibility(ZLandroid/view/SurfaceControl$Transaction;)V
 HSPLcom/android/server/wm/SurfaceAnimationRunner$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/SurfaceAnimationRunner;)V
 HPLcom/android/server/wm/SurfaceAnimationRunner$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/wm/SurfaceAnimationRunner$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/wm/SurfaceAnimationRunner;)V
@@ -57643,7 +59507,7 @@
 PLcom/android/server/wm/SurfaceAnimationRunner$$ExternalSyntheticLambda5;->run()V
 HPLcom/android/server/wm/SurfaceAnimationRunner$$ExternalSyntheticLambda6;-><init>(Lcom/android/server/wm/SurfaceAnimationRunner;Lcom/android/server/wm/SurfaceAnimationRunner$RunningAnimation;Landroid/animation/ValueAnimator;)V
 HPLcom/android/server/wm/SurfaceAnimationRunner$$ExternalSyntheticLambda6;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V
-PLcom/android/server/wm/SurfaceAnimationRunner$1;-><init>(Lcom/android/server/wm/SurfaceAnimationRunner;Lcom/android/server/wm/SurfaceAnimationRunner$RunningAnimation;)V
+HPLcom/android/server/wm/SurfaceAnimationRunner$1;-><init>(Lcom/android/server/wm/SurfaceAnimationRunner;Lcom/android/server/wm/SurfaceAnimationRunner$RunningAnimation;)V
 HPLcom/android/server/wm/SurfaceAnimationRunner$1;->onAnimationEnd(Landroid/animation/Animator;)V
 HPLcom/android/server/wm/SurfaceAnimationRunner$1;->onAnimationStart(Landroid/animation/Animator;)V
 HPLcom/android/server/wm/SurfaceAnimationRunner$RunningAnimation;->-$$Nest$fgetmCancelled(Lcom/android/server/wm/SurfaceAnimationRunner$RunningAnimation;)Z
@@ -57667,15 +59531,15 @@
 HSPLcom/android/server/wm/SurfaceAnimationRunner;-><init>(Ljava/util/function/Supplier;Landroid/os/PowerManagerInternal;)V
 HPLcom/android/server/wm/SurfaceAnimationRunner;->applyTransaction()V+]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/view/Choreographer;Landroid/view/Choreographer;
 HPLcom/android/server/wm/SurfaceAnimationRunner;->applyTransformation(Lcom/android/server/wm/SurfaceAnimationRunner$RunningAnimation;Landroid/view/SurfaceControl$Transaction;J)V+]Lcom/android/server/wm/LocalAnimationAdapter$AnimationSpec;megamorphic_types
-HPLcom/android/server/wm/SurfaceAnimationRunner;->continueStartingAnimations()V
+HSPLcom/android/server/wm/SurfaceAnimationRunner;->continueStartingAnimations()V
 HPLcom/android/server/wm/SurfaceAnimationRunner;->createExtensionSurface(Landroid/view/SurfaceControl;Landroid/graphics/Rect;Landroid/graphics/Rect;IILjava/lang/String;Landroid/view/SurfaceControl$Transaction;)V
-HPLcom/android/server/wm/SurfaceAnimationRunner;->deferStartingAnimations()V
+HSPLcom/android/server/wm/SurfaceAnimationRunner;->deferStartingAnimations()V
 HPLcom/android/server/wm/SurfaceAnimationRunner;->doCreateExtensionSurface(Landroid/view/SurfaceControl;Landroid/graphics/Rect;Landroid/graphics/Rect;IILjava/lang/String;Landroid/view/SurfaceControl$Transaction;)V
 HPLcom/android/server/wm/SurfaceAnimationRunner;->edgeExtendWindow(Landroid/view/SurfaceControl;Landroid/graphics/Rect;Landroid/view/animation/Animation;Landroid/view/SurfaceControl$Transaction;)V
-PLcom/android/server/wm/SurfaceAnimationRunner;->getScaleXForExtensionSurface(Landroid/graphics/Rect;Landroid/graphics/Rect;)F
+HPLcom/android/server/wm/SurfaceAnimationRunner;->getScaleXForExtensionSurface(Landroid/graphics/Rect;Landroid/graphics/Rect;)F
 PLcom/android/server/wm/SurfaceAnimationRunner;->getScaleYForExtensionSurface(Landroid/graphics/Rect;Landroid/graphics/Rect;)F
 HSPLcom/android/server/wm/SurfaceAnimationRunner;->lambda$new$0()V
-PLcom/android/server/wm/SurfaceAnimationRunner;->lambda$new$1()Landroid/animation/ValueAnimator;
+HPLcom/android/server/wm/SurfaceAnimationRunner;->lambda$new$1()Landroid/animation/ValueAnimator;
 PLcom/android/server/wm/SurfaceAnimationRunner;->lambda$onAnimationCancelled$3(Lcom/android/server/wm/SurfaceAnimationRunner$RunningAnimation;)V
 HPLcom/android/server/wm/SurfaceAnimationRunner;->lambda$startAnimation$2(Lcom/android/server/wm/LocalAnimationAdapter$AnimationSpec;Landroid/view/SurfaceControl;Lcom/android/server/wm/SurfaceAnimationRunner$RunningAnimation;)V
 HPLcom/android/server/wm/SurfaceAnimationRunner;->lambda$startAnimationLocked$4(Lcom/android/server/wm/SurfaceAnimationRunner$RunningAnimation;Landroid/animation/ValueAnimator;Landroid/animation/ValueAnimator;)V+]Lcom/android/server/wm/SurfaceAnimationRunner;Lcom/android/server/wm/SurfaceAnimationRunner;]Landroid/animation/ValueAnimator;Lcom/android/server/wm/SurfaceAnimationRunner$SfValueAnimator;
@@ -57703,10 +59567,10 @@
 HSPLcom/android/server/wm/SurfaceAnimator;-><init>(Lcom/android/server/wm/SurfaceAnimator$Animatable;Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;Lcom/android/server/wm/WindowManagerService;)V
 HPLcom/android/server/wm/SurfaceAnimator;->animationTypeToString(I)Ljava/lang/String;
 HSPLcom/android/server/wm/SurfaceAnimator;->cancelAnimation()V
-HSPLcom/android/server/wm/SurfaceAnimator;->cancelAnimation(Landroid/view/SurfaceControl$Transaction;ZZ)V+]Lcom/android/server/wm/AnimationAdapter;megamorphic_types]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;Lcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda4;,Lcom/android/server/wm/WindowContainerThumbnail$$ExternalSyntheticLambda0;,Lcom/android/server/wm/WindowContainer$AnimationRunnerBuilder$$ExternalSyntheticLambda3;]Lcom/android/server/wm/SurfaceAnimator;Lcom/android/server/wm/SurfaceAnimator;]Ljava/lang/Runnable;Lcom/android/server/wm/WindowContainer$AnimationRunnerBuilder$$ExternalSyntheticLambda4;
+HSPLcom/android/server/wm/SurfaceAnimator;->cancelAnimation(Landroid/view/SurfaceControl$Transaction;ZZ)V+]Lcom/android/server/wm/AnimationAdapter;megamorphic_types]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;Lcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda4;,Lcom/android/server/wm/WindowContainer$AnimationRunnerBuilder$$ExternalSyntheticLambda3;,Lcom/android/server/wm/WindowContainerThumbnail$$ExternalSyntheticLambda0;,Lcom/android/server/wm/RecentsAnimationController$$ExternalSyntheticLambda2;]Lcom/android/server/wm/SurfaceAnimator;Lcom/android/server/wm/SurfaceAnimator;]Ljava/lang/Runnable;Lcom/android/server/wm/WindowContainer$AnimationRunnerBuilder$$ExternalSyntheticLambda4;
 HPLcom/android/server/wm/SurfaceAnimator;->createAnimationLeash(Lcom/android/server/wm/SurfaceAnimator$Animatable;Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;IIIIIZLjava/util/function/Supplier;)Landroid/view/SurfaceControl;+]Landroid/view/SurfaceControl$Builder;Landroid/view/SurfaceControl$Builder;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/SurfaceAnimator$Animatable;megamorphic_types
-PLcom/android/server/wm/SurfaceAnimator;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-HPLcom/android/server/wm/SurfaceAnimator;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+HPLcom/android/server/wm/SurfaceAnimator;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/wm/SurfaceAnimator;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V+]Lcom/android/server/wm/AnimationAdapter;megamorphic_types]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;
 PLcom/android/server/wm/SurfaceAnimator;->endDelayingAnimationStart()V
 HSPLcom/android/server/wm/SurfaceAnimator;->getAnimation()Lcom/android/server/wm/AnimationAdapter;
 HSPLcom/android/server/wm/SurfaceAnimator;->getAnimationType()I
@@ -57749,7 +59613,7 @@
 HSPLcom/android/server/wm/SystemGesturesPointerEventListener$1;-><init>(Lcom/android/server/wm/SystemGesturesPointerEventListener;Landroid/content/Context;Landroid/view/GestureDetector$OnGestureListener;Landroid/os/Handler;)V
 HSPLcom/android/server/wm/SystemGesturesPointerEventListener$FlingGestureDetector;-><init>(Lcom/android/server/wm/SystemGesturesPointerEventListener;)V
 HPLcom/android/server/wm/SystemGesturesPointerEventListener$FlingGestureDetector;->onFling(Landroid/view/MotionEvent;Landroid/view/MotionEvent;FF)Z
-HPLcom/android/server/wm/SystemGesturesPointerEventListener$FlingGestureDetector;->onSingleTapUp(Landroid/view/MotionEvent;)Z
+HPLcom/android/server/wm/SystemGesturesPointerEventListener$FlingGestureDetector;->onSingleTapUp(Landroid/view/MotionEvent;)Z+]Landroid/widget/OverScroller;Landroid/widget/OverScroller;
 HSPLcom/android/server/wm/SystemGesturesPointerEventListener;->$r8$lambda$yisOVM8SBJpDDf9HPiW7GYIEn8Q(Lcom/android/server/wm/SystemGesturesPointerEventListener;)V
 HPLcom/android/server/wm/SystemGesturesPointerEventListener;->-$$Nest$fgetmCallbacks(Lcom/android/server/wm/SystemGesturesPointerEventListener;)Lcom/android/server/wm/SystemGesturesPointerEventListener$Callbacks;
 HSPLcom/android/server/wm/SystemGesturesPointerEventListener;->-$$Nest$fgetmContext(Lcom/android/server/wm/SystemGesturesPointerEventListener;)Landroid/content/Context;
@@ -57761,23 +59625,25 @@
 PLcom/android/server/wm/SystemGesturesPointerEventListener;->currentGestureStartedInRegion(Landroid/graphics/Region;)Z
 HPLcom/android/server/wm/SystemGesturesPointerEventListener;->detectSwipe(IJFF)I
 HPLcom/android/server/wm/SystemGesturesPointerEventListener;->detectSwipe(Landroid/view/MotionEvent;)I+]Lcom/android/server/wm/SystemGesturesPointerEventListener;Lcom/android/server/wm/SystemGesturesPointerEventListener;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
-HPLcom/android/server/wm/SystemGesturesPointerEventListener;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HSPLcom/android/server/wm/SystemGesturesPointerEventListener;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HPLcom/android/server/wm/SystemGesturesPointerEventListener;->findIndex(I)I
 HSPLcom/android/server/wm/SystemGesturesPointerEventListener;->lambda$systemReady$0()V
 HSPLcom/android/server/wm/SystemGesturesPointerEventListener;->onConfigurationChanged()V
 HSPLcom/android/server/wm/SystemGesturesPointerEventListener;->onDisplayInfoChanged(Landroid/view/DisplayInfo;)V
 HPLcom/android/server/wm/SystemGesturesPointerEventListener;->onPointerEvent(Landroid/view/MotionEvent;)V+]Landroid/view/GestureDetector;Lcom/android/server/wm/SystemGesturesPointerEventListener$1;]Lcom/android/server/wm/SystemGesturesPointerEventListener$Callbacks;Lcom/android/server/wm/DisplayPolicy$1;]Lcom/android/server/wm/SystemGesturesPointerEventListener;Lcom/android/server/wm/SystemGesturesPointerEventListener;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
 HSPLcom/android/server/wm/SystemGesturesPointerEventListener;->systemReady()V
-HPLcom/android/server/wm/Task$$ExternalSyntheticLambda10;-><init>()V
-HPLcom/android/server/wm/Task$$ExternalSyntheticLambda10;->test(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda10;-><init>()V
+HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda10;->test(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda11;-><init>(Lcom/android/server/wm/Task;IZ)V
 HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda11;->run()V
 HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda12;-><init>()V
-HPLcom/android/server/wm/Task$$ExternalSyntheticLambda12;->test(Ljava/lang/Object;)Z
-HPLcom/android/server/wm/Task$$ExternalSyntheticLambda13;-><init>()V
-HPLcom/android/server/wm/Task$$ExternalSyntheticLambda13;->test(Ljava/lang/Object;)Z
-HPLcom/android/server/wm/Task$$ExternalSyntheticLambda14;-><init>()V
-HPLcom/android/server/wm/Task$$ExternalSyntheticLambda14;->accept(Ljava/lang/Object;)V+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda12;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda13;-><init>()V
+HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda13;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda14;-><init>()V
+HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda14;->accept(Ljava/lang/Object;)V+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+PLcom/android/server/wm/Task$$ExternalSyntheticLambda16;-><init>(Lcom/android/server/wm/Task;[Z)V
+PLcom/android/server/wm/Task$$ExternalSyntheticLambda16;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda17;-><init>(Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda17;->run()V
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda18;-><init>()V
@@ -57787,7 +59653,7 @@
 HPLcom/android/server/wm/Task$$ExternalSyntheticLambda1;-><init>(Z[I)V
 HPLcom/android/server/wm/Task$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda20;-><init>()V
-HPLcom/android/server/wm/Task$$ExternalSyntheticLambda20;->test(Ljava/lang/Object;)Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda20;->test(Ljava/lang/Object;)Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda21;-><init>()V
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda21;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda22;-><init>()V
@@ -57796,45 +59662,47 @@
 HPLcom/android/server/wm/Task$$ExternalSyntheticLambda25;-><init>()V
 HPLcom/android/server/wm/Task$$ExternalSyntheticLambda25;->test(Ljava/lang/Object;)Z
 HPLcom/android/server/wm/Task$$ExternalSyntheticLambda26;-><init>(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/Task$$ExternalSyntheticLambda26;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/Task$$ExternalSyntheticLambda28;-><init>(Lcom/android/server/wm/Task;Z)V
-PLcom/android/server/wm/Task$$ExternalSyntheticLambda28;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda26;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/Task$$ExternalSyntheticLambda28;-><init>(Lcom/android/server/wm/Task;Z)V
+HPLcom/android/server/wm/Task$$ExternalSyntheticLambda28;->test(Ljava/lang/Object;)Z
 HPLcom/android/server/wm/Task$$ExternalSyntheticLambda29;-><init>()V
 HPLcom/android/server/wm/Task$$ExternalSyntheticLambda29;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HPLcom/android/server/wm/Task$$ExternalSyntheticLambda30;-><init>()V
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda30;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/Task$$ExternalSyntheticLambda31;-><init>(Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda31;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda32;-><init>()V
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda32;->test(Ljava/lang/Object;Ljava/lang/Object;)Z
-HPLcom/android/server/wm/Task$$ExternalSyntheticLambda33;-><init>([Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/Task$$ExternalSyntheticLambda33;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda33;-><init>([Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda33;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda34;-><init>()V
 HPLcom/android/server/wm/Task$$ExternalSyntheticLambda34;->test(Ljava/lang/Object;Ljava/lang/Object;)Z
-HPLcom/android/server/wm/Task$$ExternalSyntheticLambda35;-><init>(Lcom/android/server/wm/TaskFragment;[ZLcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Z)V
-HPLcom/android/server/wm/Task$$ExternalSyntheticLambda35;->accept(Ljava/lang/Object;)V
-HPLcom/android/server/wm/Task$$ExternalSyntheticLambda36;-><init>()V
+HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda35;-><init>(Lcom/android/server/wm/TaskFragment;[ZLcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Z)V
+HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda35;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda36;-><init>()V
 HPLcom/android/server/wm/Task$$ExternalSyntheticLambda36;->test(Ljava/lang/Object;Ljava/lang/Object;)Z
-PLcom/android/server/wm/Task$$ExternalSyntheticLambda37;-><init>()V
-PLcom/android/server/wm/Task$$ExternalSyntheticLambda37;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda37;-><init>()V
+HPLcom/android/server/wm/Task$$ExternalSyntheticLambda37;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda38;-><init>()V
 HPLcom/android/server/wm/Task$$ExternalSyntheticLambda38;->test(Ljava/lang/Object;Ljava/lang/Object;)Z
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda39;-><init>(Landroid/view/SurfaceControl$Transaction;)V
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda39;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/Task$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/wm/Task;ZLjava/lang/String;)V
+HPLcom/android/server/wm/Task$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/wm/Task;ZLjava/lang/String;)V
 HPLcom/android/server/wm/Task$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda40;-><init>()V
 HPLcom/android/server/wm/Task$$ExternalSyntheticLambda40;->test(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda41;-><init>()V
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda41;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda42;-><init>()V
-PLcom/android/server/wm/Task$$ExternalSyntheticLambda42;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/Task$$ExternalSyntheticLambda42;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda43;-><init>()V
 HPLcom/android/server/wm/Task$$ExternalSyntheticLambda43;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda44;-><init>(Ljava/util/ArrayList;)V
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda44;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/Task$$ExternalSyntheticLambda45;-><init>(Lcom/android/server/am/ActivityManagerService$ItemMatcher;Ljava/util/ArrayList;)V
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda45;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda46;-><init>()V
-PLcom/android/server/wm/Task$$ExternalSyntheticLambda46;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/Task$$ExternalSyntheticLambda46;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda47;-><init>(Ljava/util/ArrayList;)V
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda47;->onAnimationFinished(ILcom/android/server/wm/AnimationAdapter;)V
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda4;-><init>(Landroid/content/ComponentName;)V
@@ -57842,12 +59710,12 @@
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/wm/ActivityRecord;[I[Landroid/content/Intent;[Lcom/android/server/uri/NeededUriGrants;)V
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda5;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda6;-><init>()V
-HPLcom/android/server/wm/Task$$ExternalSyntheticLambda6;->test(Ljava/lang/Object;)Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda6;->test(Ljava/lang/Object;)Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda7;-><init>(Lcom/android/server/wm/ActivityRecord;IZZ)V
 HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda7;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda8;-><init>(Landroid/app/TaskInfo;)V
-HPLcom/android/server/wm/Task$$ExternalSyntheticLambda8;->accept(Ljava/lang/Object;)V
-HPLcom/android/server/wm/Task$$ExternalSyntheticLambda9;-><init>()V
+HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda8;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/Task$$ExternalSyntheticLambda9;-><init>()V
 PLcom/android/server/wm/Task$$ExternalSyntheticLambda9;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/Task$ActivityTaskHandler;-><init>(Lcom/android/server/wm/Task;Landroid/os/Looper;)V
 PLcom/android/server/wm/Task$ActivityTaskHandler;->handleMessage(Landroid/os/Message;)V
@@ -57874,11 +59742,11 @@
 PLcom/android/server/wm/Task$Builder;->-$$Nest$msetTaskAffiliation(Lcom/android/server/wm/Task$Builder;I)Lcom/android/server/wm/Task$Builder;
 PLcom/android/server/wm/Task$Builder;->-$$Nest$msetUserId(Lcom/android/server/wm/Task$Builder;I)Lcom/android/server/wm/Task$Builder;
 PLcom/android/server/wm/Task$Builder;->-$$Nest$msetUserSetupComplete(Lcom/android/server/wm/Task$Builder;Z)Lcom/android/server/wm/Task$Builder;
-PLcom/android/server/wm/Task$Builder;->-$$Nest$msetVoiceInteractor(Lcom/android/server/wm/Task$Builder;Lcom/android/internal/app/IVoiceInteractor;)Lcom/android/server/wm/Task$Builder;
+HSPLcom/android/server/wm/Task$Builder;->-$$Nest$msetVoiceInteractor(Lcom/android/server/wm/Task$Builder;Lcom/android/internal/app/IVoiceInteractor;)Lcom/android/server/wm/Task$Builder;
 HSPLcom/android/server/wm/Task$Builder;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;)V
 HSPLcom/android/server/wm/Task$Builder;->build()Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/Task$Builder;->buildInner()Lcom/android/server/wm/Task;
-PLcom/android/server/wm/Task$Builder;->setActivityInfo(Landroid/content/pm/ActivityInfo;)Lcom/android/server/wm/Task$Builder;
+HSPLcom/android/server/wm/Task$Builder;->setActivityInfo(Landroid/content/pm/ActivityInfo;)Lcom/android/server/wm/Task$Builder;
 HSPLcom/android/server/wm/Task$Builder;->setActivityOptions(Landroid/app/ActivityOptions;)Lcom/android/server/wm/Task$Builder;
 HSPLcom/android/server/wm/Task$Builder;->setActivityType(I)Lcom/android/server/wm/Task$Builder;
 PLcom/android/server/wm/Task$Builder;->setAffinity(Ljava/lang/String;)Lcom/android/server/wm/Task$Builder;
@@ -57915,41 +59783,44 @@
 PLcom/android/server/wm/Task$Builder;->setSourceTask(Lcom/android/server/wm/Task;)Lcom/android/server/wm/Task$Builder;
 PLcom/android/server/wm/Task$Builder;->setSupportsPictureInPicture(Z)Lcom/android/server/wm/Task$Builder;
 PLcom/android/server/wm/Task$Builder;->setTaskAffiliation(I)Lcom/android/server/wm/Task$Builder;
-PLcom/android/server/wm/Task$Builder;->setTaskId(I)Lcom/android/server/wm/Task$Builder;
+HSPLcom/android/server/wm/Task$Builder;->setTaskId(I)Lcom/android/server/wm/Task$Builder;
 PLcom/android/server/wm/Task$Builder;->setUserId(I)Lcom/android/server/wm/Task$Builder;
 PLcom/android/server/wm/Task$Builder;->setUserSetupComplete(Z)Lcom/android/server/wm/Task$Builder;
-PLcom/android/server/wm/Task$Builder;->setVoiceInteractor(Lcom/android/internal/app/IVoiceInteractor;)Lcom/android/server/wm/Task$Builder;
-PLcom/android/server/wm/Task$Builder;->setVoiceSession(Landroid/service/voice/IVoiceInteractionSession;)Lcom/android/server/wm/Task$Builder;
+HSPLcom/android/server/wm/Task$Builder;->setVoiceInteractor(Lcom/android/internal/app/IVoiceInteractor;)Lcom/android/server/wm/Task$Builder;
+HSPLcom/android/server/wm/Task$Builder;->setVoiceSession(Landroid/service/voice/IVoiceInteractionSession;)Lcom/android/server/wm/Task$Builder;
 HSPLcom/android/server/wm/Task$Builder;->setWindowingMode(I)Lcom/android/server/wm/Task$Builder;
 HSPLcom/android/server/wm/Task$Builder;->validateRootTask(Lcom/android/server/wm/TaskDisplayArea;)V
 HSPLcom/android/server/wm/Task$FindRootHelper;-><init>(Lcom/android/server/wm/Task;)V
 HSPLcom/android/server/wm/Task$FindRootHelper;-><init>(Lcom/android/server/wm/Task;Lcom/android/server/wm/Task$FindRootHelper-IA;)V
 HSPLcom/android/server/wm/Task$FindRootHelper;->findRoot(ZZ)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/Task$FindRootHelper;->test(Lcom/android/server/wm/ActivityRecord;)Z+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;
-HPLcom/android/server/wm/Task$FindRootHelper;->test(Ljava/lang/Object;)Z+]Lcom/android/server/wm/Task$FindRootHelper;Lcom/android/server/wm/Task$FindRootHelper;
+HSPLcom/android/server/wm/Task$FindRootHelper;->test(Lcom/android/server/wm/ActivityRecord;)Z+]Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;
+HSPLcom/android/server/wm/Task$FindRootHelper;->test(Ljava/lang/Object;)Z+]Lcom/android/server/wm/Task$FindRootHelper;Lcom/android/server/wm/Task$FindRootHelper;
 HSPLcom/android/server/wm/Task$TaskActivitiesReport;-><init>()V
-HPLcom/android/server/wm/Task$TaskActivitiesReport;->accept(Lcom/android/server/wm/ActivityRecord;)V+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/Task$TaskActivitiesReport;->accept(Ljava/lang/Object;)V+]Lcom/android/server/wm/Task$TaskActivitiesReport;Lcom/android/server/wm/Task$TaskActivitiesReport;
+HSPLcom/android/server/wm/Task$TaskActivitiesReport;->accept(Lcom/android/server/wm/ActivityRecord;)V+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/Task$TaskActivitiesReport;->accept(Ljava/lang/Object;)V+]Lcom/android/server/wm/Task$TaskActivitiesReport;Lcom/android/server/wm/Task$TaskActivitiesReport;
 HSPLcom/android/server/wm/Task$TaskActivitiesReport;->reset()V
-HPLcom/android/server/wm/Task;->$r8$lambda$-krpWMOZ-XlJIYngehybRtlXZGI(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/Task;->$r8$lambda$-krpWMOZ-XlJIYngehybRtlXZGI(Lcom/android/server/wm/ActivityRecord;)Z
 HPLcom/android/server/wm/Task;->$r8$lambda$-nHv3hp3munhu4Gy96iX2y0sRuI(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/Task;->$r8$lambda$-rI-XA8jZVfTyj0aivDH7l9PIcU(Ljava/util/ArrayList;ILcom/android/server/wm/AnimationAdapter;)V
-HPLcom/android/server/wm/Task;->$r8$lambda$2SwL7mKMOiloIKa5rGbUiqa85SU(Landroid/app/TaskInfo;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/Task;->$r8$lambda$2SwL7mKMOiloIKa5rGbUiqa85SU(Landroid/app/TaskInfo;Lcom/android/server/wm/ActivityRecord;)V
 HPLcom/android/server/wm/Task;->$r8$lambda$3sf0clZbPzW2N6_OwnqdWiHZ6H0(Lcom/android/server/wm/ActivityRecord;)Z
 HPLcom/android/server/wm/Task;->$r8$lambda$6KmsZKOUa-U-cQN3AXuiF_0HbnM(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/Task;->$r8$lambda$7nTho283cVKQ1bb86OUzh4bK9Cc(Lcom/android/server/wm/Task;Landroid/os/IBinder;)V
-HPLcom/android/server/wm/Task;->$r8$lambda$7rzMBK7dZjxheu15ls7540pwKAE(Lcom/android/server/wm/TaskFragment;[ZLcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;ZLcom/android/server/wm/TaskFragment;)V
+HSPLcom/android/server/wm/Task;->$r8$lambda$7rzMBK7dZjxheu15ls7540pwKAE(Lcom/android/server/wm/TaskFragment;[ZLcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;ZLcom/android/server/wm/TaskFragment;)V
 PLcom/android/server/wm/Task;->$r8$lambda$8poV5n-86wJhs6-aL3Pgdx1OEqc(Lcom/android/server/wm/Task;ZLjava/lang/String;Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/Task;->$r8$lambda$A_lQVGw-EsYaq0ey_D8kJnrvmMc(Lcom/android/server/wm/Task;ZLjava/lang/Object;)Z
 HPLcom/android/server/wm/Task;->$r8$lambda$BxQDGnSfMWylGBIjhb0zk3kEIPs(Ljava/util/function/Consumer;ZLcom/android/server/wm/Task;)V
 PLcom/android/server/wm/Task;->$r8$lambda$CjYN3ut3_eNan1AWUCfq2whHyXw(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/util/TypedXmlSerializer;)Z
 HPLcom/android/server/wm/Task;->$r8$lambda$Ed-b0sKm9U0_CUiPx9nkRs-D68o(Lcom/android/server/wm/Task;[I)V
+PLcom/android/server/wm/Task;->$r8$lambda$GTSe8kxRsZQjS93_TkgqS5jdXFo(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/Task;->$r8$lambda$IOkAHw--PQwJ3Vo9393SXFTSSsc(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/Task;->$r8$lambda$JdJao7ApEFaCEwnEpn23vFCpiq8(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;)V
-PLcom/android/server/wm/Task;->$r8$lambda$L6la1GiU_af3J-oJFa3FBfF2JGU(Lcom/android/server/wm/ActivityRecord;)Z
+PLcom/android/server/wm/Task;->$r8$lambda$JoEAOPto6T4R0NYsIPVee7vq6nE(Lcom/android/server/am/ActivityManagerService$ItemMatcher;Ljava/util/ArrayList;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/Task;->$r8$lambda$L6la1GiU_af3J-oJFa3FBfF2JGU(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/Task;->$r8$lambda$LJldyA0gdCRVhx8pH1aJiEkv4kk(Lcom/android/server/wm/ActivityRecord;)Z
 HPLcom/android/server/wm/Task;->$r8$lambda$LY24xFg5gCT_qXYUQ9eBPyDoegQ(Z[ILcom/android/server/wm/TaskFragment;)V
 PLcom/android/server/wm/Task;->$r8$lambda$LwLx4GDw8G76HNxgsrsbwDoUzQI(Lcom/android/server/wm/ActivityRecord;)Z
+PLcom/android/server/wm/Task;->$r8$lambda$OdAmPx2_IC8pGzUnHiPMf6i_ZM8(Lcom/android/server/wm/Task;[ZLcom/android/server/wm/Task;)Z
 PLcom/android/server/wm/Task;->$r8$lambda$PRiyfFwy4dog-mhOrPI0NF2Vdhc(Lcom/android/server/wm/ActivityRecord;Landroid/content/ComponentName;)Z
 HSPLcom/android/server/wm/Task;->$r8$lambda$PhxLTbLpsVXrg0a3VrpXu0w1y4c(Lcom/android/server/wm/Task;IZ)V
 PLcom/android/server/wm/Task;->$r8$lambda$QrGNEYnvhBVFRbnyap01BIftelY(Lcom/android/server/wm/WindowState;)Z
@@ -57959,74 +59830,75 @@
 PLcom/android/server/wm/Task;->$r8$lambda$Y0F8cOtPmGMgZhLlbasy9l96Dhk(Lcom/android/server/wm/ActivityRecord;[I[Landroid/content/Intent;[Lcom/android/server/uri/NeededUriGrants;Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/Task;->$r8$lambda$nmM6TOY4SoaA6iME35jhlZhpgeo(Landroid/content/ComponentName;Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/Task;->$r8$lambda$nn9mgXgMnTvfzgOb3lpOl3fuBh8(Lcom/android/server/wm/ActivityRecord;)Z
-HPLcom/android/server/wm/Task;->$r8$lambda$uPzn7AyFC3Orcy8ROEU4TPRxugk(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityManager$TaskDescription;)Z
-HPLcom/android/server/wm/Task;->$r8$lambda$zsSABEHgSTAar6fO0ewc1wyjbmE([Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/TaskFragment;)Z
+HSPLcom/android/server/wm/Task;->$r8$lambda$uPzn7AyFC3Orcy8ROEU4TPRxugk(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityManager$TaskDescription;)Z
+HSPLcom/android/server/wm/Task;->$r8$lambda$zsSABEHgSTAar6fO0ewc1wyjbmE([Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/TaskFragment;)Z
 HSPLcom/android/server/wm/Task;->-$$Nest$fputmHasBeenVisible(Lcom/android/server/wm/Task;Z)V
-PLcom/android/server/wm/Task;->-$$Nest$maddChild(Lcom/android/server/wm/Task;Lcom/android/server/wm/WindowContainer;IZ)V
+HSPLcom/android/server/wm/Task;->-$$Nest$maddChild(Lcom/android/server/wm/Task;Lcom/android/server/wm/WindowContainer;IZ)V
 HSPLcom/android/server/wm/Task;-><clinit>()V
 HSPLcom/android/server/wm/Task;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;ILandroid/content/Intent;Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;Landroid/content/ComponentName;Landroid/content/ComponentName;ZZZIILjava/lang/String;JZLandroid/app/ActivityManager$TaskDescription;Landroid/app/ActivityManager$RecentTaskInfo$PersistedTaskSnapshotData;IIIILjava/lang/String;Ljava/lang/String;IZZZIILandroid/content/pm/ActivityInfo;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;ZLandroid/os/IBinder;ZZ)V
 HSPLcom/android/server/wm/Task;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;ILandroid/content/Intent;Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;Landroid/content/ComponentName;Landroid/content/ComponentName;ZZZIILjava/lang/String;JZLandroid/app/ActivityManager$TaskDescription;Landroid/app/ActivityManager$RecentTaskInfo$PersistedTaskSnapshotData;IIIILjava/lang/String;Ljava/lang/String;IZZZIILandroid/content/pm/ActivityInfo;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;ZLandroid/os/IBinder;ZZLcom/android/server/wm/Task-IA;)V
 HSPLcom/android/server/wm/Task;->addChild(Lcom/android/server/wm/WindowContainer;I)V
-PLcom/android/server/wm/Task;->addChild(Lcom/android/server/wm/WindowContainer;IZ)V
+HSPLcom/android/server/wm/Task;->addChild(Lcom/android/server/wm/WindowContainer;IZ)V
+PLcom/android/server/wm/Task;->addChild(Lcom/android/server/wm/WindowContainer;ZZ)V
 PLcom/android/server/wm/Task;->adjustAnimationBoundsForTransition(Landroid/graphics/Rect;)V
 HSPLcom/android/server/wm/Task;->adjustBoundsForDisplayChangeIfNeeded(Lcom/android/server/wm/DisplayContent;)V
 HPLcom/android/server/wm/Task;->adjustFocusToNextFocusableTask(Ljava/lang/String;ZZ)Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/Task;->adjustForMinimalTaskDimensions(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/content/res/Configuration;)V
 HPLcom/android/server/wm/Task;->applyAnimationUnchecked(Landroid/view/WindowManager$LayoutParams;ZIZLjava/util/ArrayList;)V
 HSPLcom/android/server/wm/Task;->asTask()Lcom/android/server/wm/Task;
-PLcom/android/server/wm/Task;->autoRemoveFromRecents(Lcom/android/server/wm/TaskFragment;)Z
+HPLcom/android/server/wm/Task;->autoRemoveFromRecents(Lcom/android/server/wm/TaskFragment;)Z
 HSPLcom/android/server/wm/Task;->canAffectSystemUiFlags()Z
 PLcom/android/server/wm/Task;->canBeLaunchedOnDisplay(I)Z
 HSPLcom/android/server/wm/Task;->canBeOrganized()Z
 HPLcom/android/server/wm/Task;->canResizeToBounds(Landroid/graphics/Rect;)Z
-HPLcom/android/server/wm/Task;->canReuseAsLeafTask()Z
-HPLcom/android/server/wm/Task;->canSpecifyOrientation()Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/Task;->canReuseAsLeafTask()Z
+HSPLcom/android/server/wm/Task;->canSpecifyOrientation()Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/Task;->checkReadyForSleep()V
-HPLcom/android/server/wm/Task;->checkTranslucentActivityWaiting(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/Task;->checkTranslucentActivityWaiting(Lcom/android/server/wm/ActivityRecord;)V+]Landroid/os/Handler;Lcom/android/server/wm/Task$ActivityTaskHandler;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/wm/Task;->cleanUpResourcesForDestroy(Lcom/android/server/wm/WindowContainer;)V
 PLcom/android/server/wm/Task;->clearLastRecentsAnimationTransaction(Z)V
 PLcom/android/server/wm/Task;->clearPinnedTaskIfNeed()V
-HPLcom/android/server/wm/Task;->clearRootProcess()V
+HSPLcom/android/server/wm/Task;->clearRootProcess()V
 HPLcom/android/server/wm/Task;->clearTopActivities(Lcom/android/server/wm/ActivityRecord;I)Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/Task;->closeRecentsChain()V
+HPLcom/android/server/wm/Task;->closeRecentsChain()V
 HPLcom/android/server/wm/Task;->computeFreeformBounds(Landroid/graphics/Rect;Landroid/content/res/Configuration;)V
 PLcom/android/server/wm/Task;->computeMaxUserPosition(I)I
 HSPLcom/android/server/wm/Task;->computeMinUserPosition(II)I
-PLcom/android/server/wm/Task;->convertActivityToTranslucent(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/Task;->cropWindowsToRootTaskBounds()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;
+HPLcom/android/server/wm/Task;->convertActivityToTranslucent(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/Task;->cropWindowsToRootTaskBounds()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;
 PLcom/android/server/wm/Task;->dismissPip()V
 HSPLcom/android/server/wm/Task;->dispatchTaskInfoChangedIfNeeded(Z)V+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskOrganizerController;Lcom/android/server/wm/TaskOrganizerController;
-PLcom/android/server/wm/Task;->dontAnimateDimExit()V
-PLcom/android/server/wm/Task;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;ZZLjava/lang/String;Z)Z
+HPLcom/android/server/wm/Task;->dontAnimateDimExit()V
+HSPLcom/android/server/wm/Task;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;ZZLjava/lang/String;Z)Z
 HPLcom/android/server/wm/Task;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-PLcom/android/server/wm/Task;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
-HPLcom/android/server/wm/Task;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
-HPLcom/android/server/wm/Task;->dumpInner(Ljava/lang/String;Ljava/io/PrintWriter;ZLjava/lang/String;)V
-PLcom/android/server/wm/Task;->enableEnterPipOnTaskSwitch(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)V
+HSPLcom/android/server/wm/Task;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
+HPLcom/android/server/wm/Task;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/Task;->dumpInner(Ljava/lang/String;Ljava/io/PrintWriter;ZLjava/lang/String;)V
+HSPLcom/android/server/wm/Task;->enableEnterPipOnTaskSwitch(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)V
 HPLcom/android/server/wm/Task;->ensureActivitiesVisible(Lcom/android/server/wm/ActivityRecord;IZ)V
 HSPLcom/android/server/wm/Task;->ensureActivitiesVisible(Lcom/android/server/wm/ActivityRecord;IZZ)V+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/wm/Task;->executeAppTransition(Landroid/app/ActivityOptions;)V
+HPLcom/android/server/wm/Task;->executeAppTransition(Landroid/app/ActivityOptions;)V+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/Task;->fillTaskInfo(Landroid/app/TaskInfo;)V+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/Task;->fillTaskInfo(Landroid/app/TaskInfo;Z)V+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
-HSPLcom/android/server/wm/Task;->fillTaskInfo(Landroid/app/TaskInfo;ZLcom/android/server/wm/TaskDisplayArea;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Landroid/app/TaskInfo;Landroid/app/ActivityManager$RecentTaskInfo;,Landroid/app/ActivityTaskManager$RootTaskInfo;,Landroid/app/ActivityManager$RunningTaskInfo;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Landroid/app/PictureInPictureParams;Landroid/app/PictureInPictureParams;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Lcom/android/server/wm/WindowContainer$RemoteToken;Lcom/android/server/wm/WindowContainer$RemoteToken;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Landroid/content/Intent;Landroid/content/Intent;
+HSPLcom/android/server/wm/Task;->fillTaskInfo(Landroid/app/TaskInfo;ZLcom/android/server/wm/TaskDisplayArea;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Landroid/app/TaskInfo;Landroid/app/ActivityManager$RecentTaskInfo;,Landroid/app/ActivityManager$RunningTaskInfo;,Landroid/app/ActivityTaskManager$RootTaskInfo;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Landroid/app/PictureInPictureParams;Landroid/app/PictureInPictureParams;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Lcom/android/server/wm/WindowContainer$RemoteToken;Lcom/android/server/wm/WindowContainer$RemoteToken;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Landroid/content/Intent;Landroid/content/Intent;
 HPLcom/android/server/wm/Task;->findActivityInHistory(Landroid/content/ComponentName;)Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/Task;->findEnterPipOnTaskSwitchCandidate(Lcom/android/server/wm/Task;)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/Task;->findEnterPipOnTaskSwitchCandidate(Lcom/android/server/wm/Task;)Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/Task;->finishActivityAbove(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/Task;->finishIfVoiceActivity(Lcom/android/server/wm/ActivityRecord;Landroid/os/IBinder;)Z
 PLcom/android/server/wm/Task;->finishIfVoiceTask(Lcom/android/server/wm/Task;Landroid/os/IBinder;)V
 HPLcom/android/server/wm/Task;->finishTopCrashedActivityLocked(Lcom/android/server/wm/WindowProcessController;Ljava/lang/String;)Lcom/android/server/wm/Task;+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;
 PLcom/android/server/wm/Task;->finishVoiceTask(Landroid/service/voice/IVoiceInteractionSession;)V
 PLcom/android/server/wm/Task;->fitWithinBounds(Landroid/graphics/Rect;Landroid/graphics/Rect;II)V
-HSPLcom/android/server/wm/Task;->forAllLeafTasks(Ljava/util/function/Consumer;Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Ljava/util/function/Consumer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-HPLcom/android/server/wm/Task;->forAllLeafTasks(Ljava/util/function/Predicate;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Ljava/util/function/Predicate;Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda36;,Lcom/android/server/wm/RootWindowContainer$FindTaskResult;,Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda44;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/Task;->forAllLeafTasks(Ljava/util/function/Consumer;Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Ljava/util/function/Consumer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/Task;->forAllLeafTasks(Ljava/util/function/Predicate;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Ljava/util/function/Predicate;Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda44;,Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda36;,Lcom/android/server/wm/RootWindowContainer$FindTaskResult;,Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda23;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HPLcom/android/server/wm/Task;->forAllLeafTasksAndLeafTaskFragments(Ljava/util/function/Consumer;Z)V+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/Task;->forAllRootTasks(Ljava/util/function/Consumer;Z)V+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Ljava/util/function/Consumer;megamorphic_types
-HPLcom/android/server/wm/Task;->forAllRootTasks(Ljava/util/function/Predicate;Z)Z+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Ljava/util/function/Predicate;Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda22;,Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda35;,Lcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda39;
+HPLcom/android/server/wm/Task;->forAllRootTasks(Ljava/util/function/Predicate;Z)Z+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Ljava/util/function/Predicate;Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda22;,Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda35;,Lcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda39;,Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda21;
 HSPLcom/android/server/wm/Task;->forAllTasks(Ljava/util/function/Consumer;Z)V+]Ljava/util/function/Consumer;megamorphic_types
-HSPLcom/android/server/wm/Task;->forAllTasks(Ljava/util/function/Predicate;)Z+]Ljava/util/function/Predicate;Lcom/android/server/wm/DisplayArea$Dimmable$$ExternalSyntheticLambda0;,Lcom/android/server/wm/DisplayContent$TaskForResizePointSearchResult;,Lcom/android/server/wm/WindowOrganizerController$$ExternalSyntheticLambda10;
-PLcom/android/server/wm/Task;->fromWindowContainerToken(Landroid/window/WindowContainerToken;)Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/Task;->forAllTasks(Ljava/util/function/Predicate;)Z+]Ljava/util/function/Predicate;Lcom/android/server/wm/DisplayContent$TaskForResizePointSearchResult;,Lcom/android/server/wm/DisplayArea$Dimmable$$ExternalSyntheticLambda0;,Lcom/android/server/wm/WindowOrganizerController$$ExternalSyntheticLambda9;,Lcom/android/server/wm/WindowOrganizerController$$ExternalSyntheticLambda10;
+HSPLcom/android/server/wm/Task;->fromWindowContainerToken(Landroid/window/WindowContainerToken;)Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/Task;->getAdjustedChildPosition(Lcom/android/server/wm/WindowContainer;I)I
-HPLcom/android/server/wm/Task;->getAnimatingActivityRegistry()Lcom/android/server/wm/AnimatingActivityRegistry;
+HSPLcom/android/server/wm/Task;->getAnimatingActivityRegistry()Lcom/android/server/wm/AnimatingActivityRegistry;
 HPLcom/android/server/wm/Task;->getAnimationFrames(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
 HSPLcom/android/server/wm/Task;->getBaseIntent()Landroid/content/Intent;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/Task;->getBounds(Landroid/graphics/Rect;)V+]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;
@@ -58043,47 +59915,48 @@
 HPLcom/android/server/wm/Task;->getInactiveDuration()J
 HSPLcom/android/server/wm/Task;->getLaunchBounds()Landroid/graphics/Rect;
 HSPLcom/android/server/wm/Task;->getName()Ljava/lang/String;
-PLcom/android/server/wm/Task;->getNextFocusableTask(Z)Lcom/android/server/wm/Task;
+HPLcom/android/server/wm/Task;->getNextFocusableTask(Z)Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/Task;->getNumRunningActivities(Lcom/android/server/wm/Task$TaskActivitiesReport;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/Task$TaskActivitiesReport;Lcom/android/server/wm/Task$TaskActivitiesReport;
 HPLcom/android/server/wm/Task;->getOccludingActivityAbove(Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/Task;->getOrganizedTask()Lcom/android/server/wm/Task;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/Task;->getOrganizedTask()Lcom/android/server/wm/Task;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
 HPLcom/android/server/wm/Task;->getOrientation(I)I+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
 PLcom/android/server/wm/Task;->getPictureInPictureParams()Landroid/app/PictureInPictureParams;
 HSPLcom/android/server/wm/Task;->getPictureInPictureParams(Lcom/android/server/wm/Task;)Landroid/app/PictureInPictureParams;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Landroid/app/PictureInPictureParams;Landroid/app/PictureInPictureParams;
-PLcom/android/server/wm/Task;->getProtoFieldId()J
-PLcom/android/server/wm/Task;->getRawBounds()Landroid/graphics/Rect;
+HPLcom/android/server/wm/Task;->getProtoFieldId()J
+HPLcom/android/server/wm/Task;->getRawBounds()Landroid/graphics/Rect;
 HSPLcom/android/server/wm/Task;->getRelativePosition()Landroid/graphics/Point;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/Task;->getRootActivity()Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/Task;->getRootActivity(Z)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/Task;->getRootActivity(Z)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/Task;->getRootActivity(ZZ)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/Task$FindRootHelper;Lcom/android/server/wm/Task$FindRootHelper;
 HSPLcom/android/server/wm/Task;->getRootTask(Ljava/util/function/Predicate;Z)Lcom/android/server/wm/Task;+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Ljava/util/function/Predicate;megamorphic_types
-HPLcom/android/server/wm/Task;->getRootTaskId()I
+HPLcom/android/server/wm/Task;->getRootTaskId()I+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/Task;->getShadowRadius(Z)F+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;
 HPLcom/android/server/wm/Task;->getStartingWindowInfo(Lcom/android/server/wm/ActivityRecord;)Landroid/window/StartingWindowInfo;
 HSPLcom/android/server/wm/Task;->getTask(Ljava/util/function/Predicate;Z)Lcom/android/server/wm/Task;+]Ljava/util/function/Predicate;megamorphic_types
 HSPLcom/android/server/wm/Task;->getTaskDescription()Landroid/app/ActivityManager$TaskDescription;
 HSPLcom/android/server/wm/Task;->getTaskInfo()Landroid/app/ActivityManager$RunningTaskInfo;+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
 HPLcom/android/server/wm/Task;->getTopFullscreenActivity()Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/Task;->getTopLeafTask()Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/Task;->getTopPausingActivity()Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/Task;->getTopLeafTask()Lcom/android/server/wm/Task;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/Task;->getTopPausingActivity()Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HPLcom/android/server/wm/Task;->getTopRealVisibleActivity()Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/Task;->getTopResumedActivity()Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/Task;->getTopResumedActivity()Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/Task;->getTopVisibleActivity()Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/Task;->getTopVisibleAppMainWindow()Lcom/android/server/wm/WindowState;+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/Task;->getTopWaitSplashScreenActivity()Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/Task;->goToSleepIfPossible(Z)Z+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/Task;->handlesOrientationChangeFromDescendant()Z
+HSPLcom/android/server/wm/Task;->handlesOrientationChangeFromDescendant()Z
 HSPLcom/android/server/wm/Task;->hasVisibleChildren()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
+PLcom/android/server/wm/Task;->inFrontOfStandardRootTask()Z
 HSPLcom/android/server/wm/Task;->isAlwaysOnTop()Z+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
 PLcom/android/server/wm/Task;->isAlwaysOnTopWhenVisible()Z
 HPLcom/android/server/wm/Task;->isAnimatingByRecents()Z
 HPLcom/android/server/wm/Task;->isClearingToReuseTask()Z
-HPLcom/android/server/wm/Task;->isCompatible(II)Z
+HSPLcom/android/server/wm/Task;->isCompatible(II)Z
 HPLcom/android/server/wm/Task;->isDragResizing()Z
 HSPLcom/android/server/wm/Task;->isFocused()Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/Task;->isFocusedRootTaskOnDisplay()Z
 HSPLcom/android/server/wm/Task;->isForceHidden()Z
-HPLcom/android/server/wm/Task;->isInTask(Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/Task;->isInTask(Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/Task;->isLeafTask()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 PLcom/android/server/wm/Task;->isOnHomeDisplay()Z
 HSPLcom/android/server/wm/Task;->isOrganized()Z
@@ -58093,30 +59966,33 @@
 HPLcom/android/server/wm/Task;->isSameIntentFilter(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/Task;->isSelfOrNonEmbeddedTask(Lcom/android/server/wm/Task;)Z
 HSPLcom/android/server/wm/Task;->isTaskId(I)Z
-HPLcom/android/server/wm/Task;->isTopRootTaskInDisplayArea()Z
+HSPLcom/android/server/wm/Task;->isTopRootTaskInDisplayArea()Z
 HPLcom/android/server/wm/Task;->isTopRunningNonDelayed(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
 HPLcom/android/server/wm/Task;->isUidPresent(I)Z
 PLcom/android/server/wm/Task;->lambda$applyAnimationUnchecked$12(Ljava/util/ArrayList;ILcom/android/server/wm/AnimationAdapter;)V
 HSPLcom/android/server/wm/Task;->lambda$ensureActivitiesVisible$18(Lcom/android/server/wm/ActivityRecord;IZZLcom/android/server/wm/Task;)V
-HPLcom/android/server/wm/Task;->lambda$fillTaskInfo$13(Landroid/app/TaskInfo;Lcom/android/server/wm/ActivityRecord;)V+]Landroid/app/TaskInfo;Landroid/app/ActivityManager$RecentTaskInfo;,Landroid/app/ActivityTaskManager$RootTaskInfo;,Landroid/app/ActivityManager$RunningTaskInfo;
-HPLcom/android/server/wm/Task;->lambda$findEnterPipOnTaskSwitchCandidate$21([Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/TaskFragment;)Z
-HPLcom/android/server/wm/Task;->lambda$forAllLeafTasksAndLeafTaskFragments$11(Ljava/util/function/Consumer;ZLcom/android/server/wm/Task;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Ljava/util/function/Consumer;Lcom/android/server/wm/Task$$ExternalSyntheticLambda1;,Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda34;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/Task;->lambda$fillTaskInfo$13(Landroid/app/TaskInfo;Lcom/android/server/wm/ActivityRecord;)V+]Landroid/app/TaskInfo;Landroid/app/ActivityManager$RecentTaskInfo;,Landroid/app/ActivityManager$RunningTaskInfo;,Landroid/app/ActivityTaskManager$RootTaskInfo;
+HSPLcom/android/server/wm/Task;->lambda$findEnterPipOnTaskSwitchCandidate$21([Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/TaskFragment;)Z
+PLcom/android/server/wm/Task;->lambda$finishIfVoiceTask$22(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;)V
+HPLcom/android/server/wm/Task;->lambda$forAllLeafTasksAndLeafTaskFragments$11(Ljava/util/function/Consumer;ZLcom/android/server/wm/Task;)V+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Ljava/util/function/Consumer;Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda34;,Lcom/android/server/wm/Task$$ExternalSyntheticLambda1;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/ActivityRecord;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 PLcom/android/server/wm/Task;->lambda$getDescendantTaskCount$4(Lcom/android/server/wm/Task;[I)V
+PLcom/android/server/wm/Task;->lambda$getDumpActivitiesLocked$26(Lcom/android/server/am/ActivityManagerService$ItemMatcher;Ljava/util/ArrayList;Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/Task;->lambda$getNextFocusableTask$5(ZLjava/lang/Object;)Z
-PLcom/android/server/wm/Task;->lambda$getOccludingActivityAbove$6(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/Task;->lambda$getStartingWindowInfo$14(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/Task;->lambda$getOccludingActivityAbove$6(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/Task;->lambda$getStartingWindowInfo$14(Lcom/android/server/wm/WindowState;)Z
 HPLcom/android/server/wm/Task;->lambda$getTopFullscreenActivity$7(Lcom/android/server/wm/ActivityRecord;)Z
 HPLcom/android/server/wm/Task;->lambda$getTopRealVisibleActivity$9(Lcom/android/server/wm/ActivityRecord;)Z
-HPLcom/android/server/wm/Task;->lambda$getTopVisibleActivity$8(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/Task;->lambda$getTopVisibleActivity$8(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/Task;->lambda$getTopWaitSplashScreenActivity$10(Lcom/android/server/wm/ActivityRecord;)Z
 HPLcom/android/server/wm/Task;->lambda$goToSleepIfPossible$17(Z[ILcom/android/server/wm/TaskFragment;)V
+PLcom/android/server/wm/Task;->lambda$inFrontOfStandardRootTask$23([ZLcom/android/server/wm/Task;)Z
 PLcom/android/server/wm/Task;->lambda$navigateUpTo$24(Landroid/content/ComponentName;Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/Task;->lambda$navigateUpTo$25(Lcom/android/server/wm/ActivityRecord;[I[Landroid/content/Intent;[Lcom/android/server/uri/NeededUriGrants;Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/Task;->lambda$removeActivities$3(ZLjava/lang/String;Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/Task;->lambda$resumeTopActivityInnerLocked$19(Lcom/android/server/wm/TaskFragment;[ZLcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;ZLcom/android/server/wm/TaskFragment;)V
+HPLcom/android/server/wm/Task;->lambda$removeActivities$3(ZLjava/lang/String;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/Task;->lambda$resumeTopActivityInnerLocked$19(Lcom/android/server/wm/TaskFragment;[ZLcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;ZLcom/android/server/wm/TaskFragment;)V
 PLcom/android/server/wm/Task;->lambda$setMainWindowSizeChangeTransaction$15(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;)V
 HSPLcom/android/server/wm/Task;->lambda$setWindowingMode$16(IZ)V
-HPLcom/android/server/wm/Task;->lambda$startActivityLocked$20(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/Task;->lambda$startActivityLocked$20(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/Task;->lambda$topActivityContainsStartingWindow$0(Lcom/android/server/wm/WindowState;)Z
 HPLcom/android/server/wm/Task;->lambda$topActivityContainsStartingWindow$1(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/Task;->lockTaskAuthToString()Ljava/lang/String;
@@ -58124,37 +60000,37 @@
 HPLcom/android/server/wm/Task;->matchesActivityInHistory(Lcom/android/server/wm/ActivityRecord;Landroid/content/ComponentName;)Z
 PLcom/android/server/wm/Task;->maybeApplyLastRecentsAnimationTransaction()V
 HPLcom/android/server/wm/Task;->migrateToNewSurfaceControl(Landroid/view/SurfaceControl$Transaction;)V
-HPLcom/android/server/wm/Task;->minimalResumeActivityLocked(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/Task;->minimalResumeActivityLocked(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/Task;->moveActivityToFrontLocked(Lcom/android/server/wm/ActivityRecord;)V
 HPLcom/android/server/wm/Task;->moveTaskToBack(Lcom/android/server/wm/Task;)Z
 PLcom/android/server/wm/Task;->moveTaskToFront(Lcom/android/server/wm/Task;ZLandroid/app/ActivityOptions;Lcom/android/server/am/AppTimeTracker;Ljava/lang/String;)V
 HPLcom/android/server/wm/Task;->moveTaskToFront(Lcom/android/server/wm/Task;ZLandroid/app/ActivityOptions;Lcom/android/server/am/AppTimeTracker;ZLjava/lang/String;)V
 PLcom/android/server/wm/Task;->moveToBack(Ljava/lang/String;Lcom/android/server/wm/Task;)V
-PLcom/android/server/wm/Task;->moveToFront(Ljava/lang/String;)V
-HPLcom/android/server/wm/Task;->moveToFront(Ljava/lang/String;Lcom/android/server/wm/Task;)V
-HPLcom/android/server/wm/Task;->moveToFrontInner(Ljava/lang/String;Lcom/android/server/wm/Task;)V
+HPLcom/android/server/wm/Task;->moveToFront(Ljava/lang/String;)V
+HSPLcom/android/server/wm/Task;->moveToFront(Ljava/lang/String;Lcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/Task;->moveToFrontInner(Ljava/lang/String;Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/Task;->navigateUpTo(Lcom/android/server/wm/ActivityRecord;Landroid/content/Intent;Lcom/android/server/uri/NeededUriGrants;ILandroid/content/Intent;Lcom/android/server/uri/NeededUriGrants;)Z
-HPLcom/android/server/wm/Task;->notifyActivityDrawnLocked(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/Task;->onAppFocusChanged(Z)V
+HSPLcom/android/server/wm/Task;->notifyActivityDrawnLocked(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/Task;->onAppFocusChanged(Z)V
 HSPLcom/android/server/wm/Task;->onChildPositionChanged(Lcom/android/server/wm/WindowContainer;)V
 HSPLcom/android/server/wm/Task;->onConfigurationChanged(Landroid/content/res/Configuration;)V
 HSPLcom/android/server/wm/Task;->onConfigurationChangedInner(Landroid/content/res/Configuration;)V
-HPLcom/android/server/wm/Task;->onDescendantActivityAdded(ZILcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/Task;->onDescendantOrientationChanged(Lcom/android/server/wm/WindowContainer;)Z
+HSPLcom/android/server/wm/Task;->onDescendantActivityAdded(ZILcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/Task;->onDescendantOrientationChanged(Lcom/android/server/wm/WindowContainer;)Z
 HSPLcom/android/server/wm/Task;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/TaskChangeNotificationController;Lcom/android/server/wm/TaskChangeNotificationController;
 HSPLcom/android/server/wm/Task;->onParentChanged(Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ConfigurationContainer;)V
 PLcom/android/server/wm/Task;->onPictureInPictureParamsChanged()V
 PLcom/android/server/wm/Task;->onSizeCompatActivityChanged()V
 HPLcom/android/server/wm/Task;->onSnapshotChanged(Landroid/window/TaskSnapshot;)V
 HPLcom/android/server/wm/Task;->onlyHasTaskOverlayActivities(Z)Z
-PLcom/android/server/wm/Task;->performClearTaskForReuse(Z)V
+HPLcom/android/server/wm/Task;->performClearTaskForReuse(Z)V
 HPLcom/android/server/wm/Task;->performClearTop(Lcom/android/server/wm/ActivityRecord;I)Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/Task;->positionChildAt(ILcom/android/server/wm/WindowContainer;Z)V
 PLcom/android/server/wm/Task;->positionChildAt(Lcom/android/server/wm/ActivityRecord;I)V
 PLcom/android/server/wm/Task;->positionChildAtBottom(Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/Task;->positionChildAtBottom(Lcom/android/server/wm/Task;Z)V
 PLcom/android/server/wm/Task;->positionChildAtTop(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/Task;->positionChildAtTop(Lcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/Task;->positionChildAtTop(Lcom/android/server/wm/Task;)V
 HSPLcom/android/server/wm/Task;->prepareSurfaces()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/Dimmer;Lcom/android/server/wm/Dimmer;
 PLcom/android/server/wm/Task;->preserveOrientationOnResize()Z
 HPLcom/android/server/wm/Task;->removeActivities(Ljava/lang/String;Z)V
@@ -58163,7 +60039,7 @@
 HPLcom/android/server/wm/Task;->removeIfPossible(Ljava/lang/String;)V
 PLcom/android/server/wm/Task;->removeImmediately()V
 HPLcom/android/server/wm/Task;->removeImmediately(Ljava/lang/String;)V
-HPLcom/android/server/wm/Task;->removeLaunchTickMessages()V
+HSPLcom/android/server/wm/Task;->removeLaunchTickMessages()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;
 HPLcom/android/server/wm/Task;->removedFromRecents()V
 PLcom/android/server/wm/Task;->reparent(Lcom/android/server/wm/Task;IIZZZLjava/lang/String;)Z
 HSPLcom/android/server/wm/Task;->reparent(Lcom/android/server/wm/Task;IZLjava/lang/String;)V
@@ -58177,12 +60053,12 @@
 HSPLcom/android/server/wm/Task;->resolveLeafTaskOnlyOverrideConfigs(Landroid/content/res/Configuration;Landroid/graphics/Rect;)V
 HPLcom/android/server/wm/Task;->restoreFromXml(Landroid/util/TypedXmlPullParser;Lcom/android/server/wm/ActivityTaskSupervisor;)Lcom/android/server/wm/Task;
 PLcom/android/server/wm/Task;->resumeNextFocusableActivityWhenRootTaskIsEmpty(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)Z
-HSPLcom/android/server/wm/Task;->resumeTopActivityInnerLocked(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Z)Z
-HSPLcom/android/server/wm/Task;->resumeTopActivityUncheckedLocked(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)Z
-HSPLcom/android/server/wm/Task;->resumeTopActivityUncheckedLocked(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Z)Z
+HSPLcom/android/server/wm/Task;->resumeTopActivityInnerLocked(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Z)Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/Task;->resumeTopActivityUncheckedLocked(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)Z+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/Task;->resumeTopActivityUncheckedLocked(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Z)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/Task;->returnsToHomeRootTask()Z
 HPLcom/android/server/wm/Task;->reuseAsLeafTask(Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/Task;->reuseOrCreateTask(Landroid/content/pm/ActivityInfo;Landroid/content/Intent;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;ZLcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/Task;->reuseOrCreateTask(Landroid/content/pm/ActivityInfo;Landroid/content/Intent;Landroid/service/voice/IVoiceInteractionSession;Lcom/android/internal/app/IVoiceInteractor;ZLcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;)Lcom/android/server/wm/Task;
 HPLcom/android/server/wm/Task;->saveActivityToXml(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/util/TypedXmlSerializer;)Z
 HSPLcom/android/server/wm/Task;->saveLaunchingStateIfNeeded()V
 HSPLcom/android/server/wm/Task;->saveLaunchingStateIfNeeded(Lcom/android/server/wm/DisplayContent;)V
@@ -58198,11 +60074,12 @@
 HSPLcom/android/server/wm/Task;->setDeferTaskAppear(Z)V
 PLcom/android/server/wm/Task;->setDragResizing(ZI)V
 PLcom/android/server/wm/Task;->setForceHidden(IZ)Z
-HPLcom/android/server/wm/Task;->setHasBeenVisible(Z)V
+PLcom/android/server/wm/Task;->setForceShowForAllUsers(Z)V
+HSPLcom/android/server/wm/Task;->setHasBeenVisible(Z)V
 HSPLcom/android/server/wm/Task;->setInitialSurfaceControlProperties(Landroid/view/SurfaceControl$Builder;)V
 HSPLcom/android/server/wm/Task;->setIntent(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;)V
-HPLcom/android/server/wm/Task;->setIntent(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/Task;->setIntent(Lcom/android/server/wm/ActivityRecord;Landroid/content/Intent;Landroid/content/pm/ActivityInfo;)V
+HSPLcom/android/server/wm/Task;->setIntent(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/Task;->setIntent(Lcom/android/server/wm/ActivityRecord;Landroid/content/Intent;Landroid/content/pm/ActivityInfo;)V
 PLcom/android/server/wm/Task;->setLastNonFullscreenBounds(Landroid/graphics/Rect;)V
 PLcom/android/server/wm/Task;->setLastRecentsAnimationTransaction(Landroid/window/PictureInPictureSurfaceTransaction;Landroid/view/SurfaceControl;)V
 HSPLcom/android/server/wm/Task;->setLockTaskAuth()V
@@ -58210,19 +60087,19 @@
 PLcom/android/server/wm/Task;->setMainWindowSizeChangeTransaction(Landroid/view/SurfaceControl$Transaction;)V
 PLcom/android/server/wm/Task;->setMainWindowSizeChangeTransaction(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/Task;)V
 HSPLcom/android/server/wm/Task;->setMinDimensions(Landroid/content/pm/ActivityInfo;)V
-PLcom/android/server/wm/Task;->setNextAffiliate(Lcom/android/server/wm/Task;)V
-PLcom/android/server/wm/Task;->setPrevAffiliate(Lcom/android/server/wm/Task;)V
-HPLcom/android/server/wm/Task;->setRootProcess(Lcom/android/server/wm/WindowProcessController;)V
+HPLcom/android/server/wm/Task;->setNextAffiliate(Lcom/android/server/wm/Task;)V
+HPLcom/android/server/wm/Task;->setPrevAffiliate(Lcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/Task;->setRootProcess(Lcom/android/server/wm/WindowProcessController;)V
 HSPLcom/android/server/wm/Task;->setSurfaceControl(Landroid/view/SurfaceControl;)V
-HPLcom/android/server/wm/Task;->setTaskDescription(Landroid/app/ActivityManager$TaskDescription;)V
-HPLcom/android/server/wm/Task;->setTaskDescriptionFromActivityAboveRoot(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityManager$TaskDescription;)Z+]Landroid/app/ActivityManager$TaskDescription;Landroid/app/ActivityManager$TaskDescription;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-PLcom/android/server/wm/Task;->setTaskOrganizer(Landroid/window/ITaskOrganizer;)Z
+HSPLcom/android/server/wm/Task;->setTaskDescription(Landroid/app/ActivityManager$TaskDescription;)V
+HSPLcom/android/server/wm/Task;->setTaskDescriptionFromActivityAboveRoot(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityManager$TaskDescription;)Z+]Landroid/app/ActivityManager$TaskDescription;Landroid/app/ActivityManager$TaskDescription;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/Task;->setTaskOrganizer(Landroid/window/ITaskOrganizer;)Z
 HSPLcom/android/server/wm/Task;->setTaskOrganizer(Landroid/window/ITaskOrganizer;Z)Z
 PLcom/android/server/wm/Task;->setWindowingMode(I)V
 HSPLcom/android/server/wm/Task;->setWindowingMode(IZ)V
 HSPLcom/android/server/wm/Task;->setWindowingModeInSurfaceTransaction(IZ)V
 HSPLcom/android/server/wm/Task;->shouldDockBigOverlays()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/Task;->shouldIgnoreInput()Z
+HSPLcom/android/server/wm/Task;->shouldIgnoreInput()Z
 PLcom/android/server/wm/Task;->shouldResizeRootTaskWithLaunchBounds()Z
 HSPLcom/android/server/wm/Task;->shouldSleepActivities()Z+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
 HSPLcom/android/server/wm/Task;->shouldStartChangeTransition(II)Z
@@ -58230,31 +60107,31 @@
 HSPLcom/android/server/wm/Task;->showForAllUsers()Z
 HSPLcom/android/server/wm/Task;->showSurfaceOnCreation()Z
 HSPLcom/android/server/wm/Task;->showToCurrentUser()Z
-HPLcom/android/server/wm/Task;->startActivityLocked(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/Task;ZZLandroid/app/ActivityOptions;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/Task;->startActivityLocked(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/Task;ZZLandroid/app/ActivityOptions;Lcom/android/server/wm/ActivityRecord;)V
 HPLcom/android/server/wm/Task;->supportsFreeformInDisplayArea(Lcom/android/server/wm/TaskDisplayArea;)Z
 HSPLcom/android/server/wm/Task;->supportsSplitScreenWindowingModeInDisplayArea(Lcom/android/server/wm/TaskDisplayArea;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/Task;->supportsSplitScreenWindowingModeInner(Lcom/android/server/wm/TaskDisplayArea;)Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;
 PLcom/android/server/wm/Task;->switchUser(I)V
 HSPLcom/android/server/wm/Task;->taskAppearedReady()Z
-HPLcom/android/server/wm/Task;->toString()Ljava/lang/String;
+HSPLcom/android/server/wm/Task;->toString()Ljava/lang/String;
 HPLcom/android/server/wm/Task;->topActivityContainsStartingWindow()Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/Task;->topRunningActivityLocked()Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/Task;->topRunningNonDelayedActivityLocked(Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/Task;->topRunningNonDelayedActivityLocked(Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/Task;->touchActiveTime()V
-HPLcom/android/server/wm/Task;->updateEffectiveIntent()V
-HPLcom/android/server/wm/Task;->updateOverlayInsetsState(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/Task;->updateEffectiveIntent()V
+HPLcom/android/server/wm/Task;->updateOverlayInsetsState(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/Task;->updateOverrideConfigurationFromLaunchBounds()Landroid/graphics/Rect;
 HSPLcom/android/server/wm/Task;->updateShadowsRadius(ZLandroid/view/SurfaceControl$Transaction;)V+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/Task;->updateSurfaceBounds()V
 HSPLcom/android/server/wm/Task;->updateSurfaceSize(Landroid/view/SurfaceControl$Transaction;)V+]Landroid/graphics/Point;Landroid/graphics/Point;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/Task;->updateTaskDescription()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Landroid/app/ActivityManager$TaskDescription;Landroid/app/ActivityManager$TaskDescription;]Lcom/android/internal/util/function/pooled/PooledPredicate;Lcom/android/internal/util/function/pooled/PooledLambdaImpl;]Lcom/android/server/wm/TaskChangeNotificationController;Lcom/android/server/wm/TaskChangeNotificationController;
+HSPLcom/android/server/wm/Task;->updateTaskDescription()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Landroid/app/ActivityManager$TaskDescription;Landroid/app/ActivityManager$TaskDescription;]Lcom/android/internal/util/function/pooled/PooledPredicate;Lcom/android/internal/util/function/pooled/PooledLambdaImpl;]Lcom/android/server/wm/TaskChangeNotificationController;Lcom/android/server/wm/TaskChangeNotificationController;
 HSPLcom/android/server/wm/Task;->updateTaskMovement(ZI)V
 HSPLcom/android/server/wm/Task;->updateTaskOrganizerState()Z
 HSPLcom/android/server/wm/Task;->updateTaskOrganizerState(Z)Z
 HPLcom/android/server/wm/Task;->updateTransitLocked(ILandroid/app/ActivityOptions;)V
-HPLcom/android/server/wm/Task;->warnForNonLeafTask(Ljava/lang/String;)V
+HSPLcom/android/server/wm/Task;->warnForNonLeafTask(Ljava/lang/String;)V
 PLcom/android/server/wm/Task;->willActivityBeVisible(Landroid/os/IBinder;)Z
-HPLcom/android/server/wm/Task;->writeIdentifierToProto(Landroid/util/proto/ProtoOutputStream;J)V
+HPLcom/android/server/wm/Task;->writeIdentifierToProto(Landroid/util/proto/ProtoOutputStream;J)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda0;-><init>()V
 HPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda0;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda10;-><init>()V
@@ -58262,7 +60139,7 @@
 HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda11;-><init>()V
 HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda11;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda12;-><init>()V
-HPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda12;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda12;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda13;-><init>()V
 PLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda13;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda14;-><init>()V
@@ -58274,9 +60151,9 @@
 HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda17;-><init>()V
 HPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda17;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda18;-><init>()V
-HPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda18;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda18;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda19;-><init>()V
-HPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda19;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda19;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda1;-><init>()V
 HPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda1;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda20;-><init>()V
@@ -58295,79 +60172,83 @@
 PLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda4;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda5;-><init>()V
 HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda6;-><init>()V
+PLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda6;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda7;-><init>()V
 HPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda7;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda8;-><init>()V
 HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda8;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda9;-><init>()V
-PLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda9;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HSPLcom/android/server/wm/TaskChangeNotificationController$$ExternalSyntheticLambda9;->accept(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/TaskChangeNotificationController$MainHandler;-><init>(Lcom/android/server/wm/TaskChangeNotificationController;Landroid/os/Looper;)V
 HSPLcom/android/server/wm/TaskChangeNotificationController$MainHandler;->handleMessage(Landroid/os/Message;)V+]Lcom/android/internal/os/SomeArgs;Lcom/android/internal/os/SomeArgs;
 PLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$0NzPBxJ1aTNpucnnvZpgoO53sIY(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HPLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$7kX9Y9vfTpxOM6Mx6y9gwCc7foo(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HPLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$8dQcHx3zZhZOHU-Wt3hJeWHXuik(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
-PLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$BTQ6ibS6BlSofIYkLMIpn-Qy3mk(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
-HPLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$EfF_ZPe4028k55xyrXE_bUHIOo4(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HPLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$BTQ6ibS6BlSofIYkLMIpn-Qy3mk(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HSPLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$EfF_ZPe4028k55xyrXE_bUHIOo4(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HPLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$HZCisAYO9uTyyTUBTTal7TYFEwQ(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
-PLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$IBk2SN2scla7zCIEiVdZSu-m5Dg(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HPLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$IBk2SN2scla7zCIEiVdZSu-m5Dg(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 PLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$LaHJcRCANkoEWZUAo0_HkOT6Eok(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$OAICxS0BeIEmt8Ip4IJUcKsH1Ac(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 PLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$R2d-XFQRvDvm0yxyMfMq6Dla1Ew(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 PLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$VPW583qD7U9PCgOIZE3DPIgO-oQ(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 PLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$ZtnfXpKj__3fDR5OuARu3N-fttw(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
-PLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$_1zzj0_i0lhti3nJc00ZzvA7MMU(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HSPLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$_1zzj0_i0lhti3nJc00ZzvA7MMU(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 PLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$_awuNSURc7ttTEnPds7jhEKdXfs(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 PLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$dgeX_zsTFuBpyOgTVdYTBanG7Ik(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$gubvlDzx5VAcCdKc1xeXcMPtakg(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HSPLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$jxOOK1u4MJy5_9sX9CuWQfc2qS4(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
-HPLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$kbhVv0eRJ-i8k2lPI7c0_G1fJ8w(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HSPLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$kbhVv0eRJ-i8k2lPI7c0_G1fJ8w(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HPLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$pOYVnjB9BcbV9eaSU-52ikC3JV8(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 PLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$tDrFjIsvWX1A57JfxANHf8TPBbk(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 PLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$vxpLvBrJ0N4NATErAvxO6jwafbU(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
-HPLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$zuW9RtpRm3I43pFJV8hz9GSjGZ8(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HSPLcom/android/server/wm/TaskChangeNotificationController;->$r8$lambda$zuW9RtpRm3I43pFJV8hz9GSjGZ8(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 PLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyActivityForcedResizable(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
 PLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyActivityLaunchOnSecondaryDisplayFailed(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
 PLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyActivityPinned(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
-PLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyActivityRequestedOrientationChanged(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
+HPLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyActivityRequestedOrientationChanged(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
 PLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyActivityRestartAttempt(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
 PLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyActivityUnpinned(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
 PLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyLockTaskModeChanged(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
 PLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyOnActivityRotation(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
 HSPLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyTaskCreated(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
-HPLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyTaskDescriptionChanged(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
+HSPLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyTaskDescriptionChanged(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
 HSPLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyTaskDisplayChanged(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
-PLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyTaskFocusChanged(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
+HSPLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyTaskFocusChanged(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
 PLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyTaskListFrozen(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
-PLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyTaskListUpdated(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
+HSPLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyTaskListUpdated(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
 PLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyTaskMovedToBack(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
-PLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyTaskMovedToFront(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
+HSPLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyTaskMovedToFront(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
+PLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyTaskProfileLocked(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
 PLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyTaskRemovalStarted(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
 PLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyTaskRemoved(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
 PLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyTaskRequestedOrientationChanged(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
 PLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyTaskSnapshotChanged(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
-PLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyTaskStackChanged(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
+HPLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$fgetmNotifyTaskStackChanged(Lcom/android/server/wm/TaskChangeNotificationController;)Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
 HSPLcom/android/server/wm/TaskChangeNotificationController;->-$$Nest$mforAllRemoteListeners(Lcom/android/server/wm/TaskChangeNotificationController;Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;Landroid/os/Message;)V
 HSPLcom/android/server/wm/TaskChangeNotificationController;-><init>(Lcom/android/server/wm/ActivityTaskSupervisor;Landroid/os/Handler;)V
 HSPLcom/android/server/wm/TaskChangeNotificationController;->forAllLocalListeners(Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;Landroid/os/Message;)V+]Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;megamorphic_types]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/wm/TaskChangeNotificationController;->forAllRemoteListeners(Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;Landroid/os/Message;)V+]Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;megamorphic_types]Landroid/os/RemoteCallbackList;Landroid/os/RemoteCallbackList;
-HPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$0(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$0(Landroid/app/ITaskStackListener;Landroid/os/Message;)V+]Landroid/app/ITaskStackListener;Landroid/app/ITaskStackListener$Stub$Proxy;,Lcom/android/server/app/GameServiceProviderInstanceImpl$4;,Lcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider$BiometricTaskStackListener;,Lcom/android/server/display/AutomaticBrightnessController$TaskStackListenerImpl;
 HSPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$1(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$10(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$11(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$13(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$15(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$16(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
-HSPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$17(Landroid/app/ITaskStackListener;Landroid/os/Message;)V+]Landroid/app/ITaskStackListener;Landroid/app/ITaskStackListener$Stub$Proxy;,Lcom/android/server/display/AutomaticBrightnessController$TaskStackListenerImpl;,Lcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider$BiometricTaskStackListener;,Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$BiometricTaskStackListener;
-HPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$18(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HSPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$17(Landroid/app/ITaskStackListener;Landroid/os/Message;)V+]Landroid/app/ITaskStackListener;Landroid/app/ITaskStackListener$Stub$Proxy;,Lcom/android/server/app/GameServiceProviderInstanceImpl$4;,Lcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider$BiometricTaskStackListener;,Lcom/android/server/display/AutomaticBrightnessController$TaskStackListenerImpl;,Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$BiometricTaskStackListener;
+HSPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$18(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$19(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
-PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$2(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
-HPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$20(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$2(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HSPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$20(Landroid/app/ITaskStackListener;Landroid/os/Message;)V+]Landroid/app/ITaskStackListener;Landroid/app/ITaskStackListener$Stub$Proxy;,Lcom/android/server/app/GameServiceProviderInstanceImpl$4;,Lcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider$BiometricTaskStackListener;,Lcom/android/server/display/AutomaticBrightnessController$TaskStackListenerImpl;
 HPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$21(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$22(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$23(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$24(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
-HPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$3(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
-HPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$4(Landroid/app/ITaskStackListener;Landroid/os/Message;)V+]Landroid/app/ITaskStackListener;Landroid/app/ITaskStackListener$Stub$Proxy;,Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$BiometricTaskStackListener;,Lcom/android/server/display/AutomaticBrightnessController$TaskStackListenerImpl;,Lcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider$BiometricTaskStackListener;
-HPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$6(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
-PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$7(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HSPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$3(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
+HSPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$4(Landroid/app/ITaskStackListener;Landroid/os/Message;)V+]Landroid/app/ITaskStackListener;Landroid/app/ITaskStackListener$Stub$Proxy;,Lcom/android/server/app/GameServiceProviderInstanceImpl$4;,Lcom/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider$BiometricTaskStackListener;,Lcom/android/server/display/AutomaticBrightnessController$TaskStackListenerImpl;,Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$BiometricTaskStackListener;
+HPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$6(Landroid/app/ITaskStackListener;Landroid/os/Message;)V+]Landroid/app/ITaskStackListener;Landroid/app/ITaskStackListener$Stub$Proxy;,Lcom/android/server/app/GameServiceProviderInstanceImpl$4;,Lcom/android/server/display/AutomaticBrightnessController$TaskStackListenerImpl;,Lcom/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21$BiometricTaskStackListener;
+HPLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$7(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$8(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 PLcom/android/server/wm/TaskChangeNotificationController;->lambda$new$9(Landroid/app/ITaskStackListener;Landroid/os/Message;)V
 HPLcom/android/server/wm/TaskChangeNotificationController;->notifyActivityForcedResizable(IILjava/lang/String;)V
@@ -58379,26 +60260,27 @@
 PLcom/android/server/wm/TaskChangeNotificationController;->notifyLockTaskModeChanged(I)V
 PLcom/android/server/wm/TaskChangeNotificationController;->notifyOnActivityRotation(I)V
 HSPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskCreated(ILandroid/content/ComponentName;)V
-HPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskDescriptionChanged(Landroid/app/TaskInfo;)V
+HSPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskDescriptionChanged(Landroid/app/TaskInfo;)V
 HSPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskDisplayChanged(II)V
-HPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskFocusChanged(IZ)V
+HSPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskFocusChanged(IZ)V
 PLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskListFrozen(Z)V
-HPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskListUpdated()V
+HSPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskListUpdated()V
 PLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskMovedToBack(Landroid/app/TaskInfo;)V
-HPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskMovedToFront(Landroid/app/TaskInfo;)V
-PLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskRemovalStarted(Landroid/app/ActivityManager$RunningTaskInfo;)V
+HSPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskMovedToFront(Landroid/app/TaskInfo;)V
+PLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskProfileLocked(Landroid/app/ActivityManager$RunningTaskInfo;)V
+HPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskRemovalStarted(Landroid/app/ActivityManager$RunningTaskInfo;)V
 HPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskRemoved(I)V
 HPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskRequestedOrientationChanged(II)V
 HPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskSnapshotChanged(ILandroid/window/TaskSnapshot;)V
 HPLcom/android/server/wm/TaskChangeNotificationController;->notifyTaskStackChanged()V
 HSPLcom/android/server/wm/TaskChangeNotificationController;->registerTaskStackListener(Landroid/app/ITaskStackListener;)V
 HPLcom/android/server/wm/TaskChangeNotificationController;->unregisterTaskStackListener(Landroid/app/ITaskStackListener;)V
-HPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda0;-><init>()V
-HPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
-HPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda10;-><init>(Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/ActivityRecord;[I)V
-HPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda10;->accept(Ljava/lang/Object;)V
-HPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda11;-><init>(Lcom/android/server/wm/ActivityRecord;[I)V
-HPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda11;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda0;-><init>()V
+HSPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda10;-><init>(Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/ActivityRecord;[I)V
+HSPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda10;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda11;-><init>(Lcom/android/server/wm/ActivityRecord;[I)V
+HSPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda11;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/wm/TaskDisplayArea;)V
 HSPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda1;->onPreAssignChildLayers()V
 PLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda2;-><init>()V
@@ -58406,31 +60288,32 @@
 HSPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/wm/TaskDisplayArea;I)V
 HSPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda3;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
 HPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda4;-><init>()V
-HPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda4;->test(Ljava/lang/Object;)Z
-HPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda5;-><init>(II)V
-HPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda5;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda4;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda5;-><init>(II)V
+HSPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda5;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda6;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda7;-><init>(Ljava/util/ArrayList;)V
-PLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda7;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda8;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda7;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda8;->accept(Ljava/lang/Object;)V
 HPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda9;-><init>(Lcom/android/server/wm/ActivityRecord;IZZ)V
-HPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda9;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda9;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/TaskDisplayArea;->$r8$lambda$BScM-CD2wwiwQJSg-pC3GWQ185o(Lcom/android/server/wm/TaskDisplayArea;ILcom/android/server/wm/TaskDisplayArea;Ljava/lang/Integer;)Ljava/lang/Integer;
 HPLcom/android/server/wm/TaskDisplayArea;->$r8$lambda$B_APzzfytTKI8e1ObBvOUgIE5_c(Lcom/android/server/wm/ActivityRecord;IZZLcom/android/server/wm/Task;)V
 PLcom/android/server/wm/TaskDisplayArea;->$r8$lambda$D9H6yXT19UCrBGhlPDvqF7YxhGQ(Ljava/util/ArrayList;Lcom/android/server/wm/Task;)V
-HPLcom/android/server/wm/TaskDisplayArea;->$r8$lambda$FYidKPzUkLETjkRN9VF8Kw1HZgI(Lcom/android/server/wm/Task;)Z
-HPLcom/android/server/wm/TaskDisplayArea;->$r8$lambda$LlYq_RdRbhMscaTMkl_McaAWecA(Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/ActivityRecord;[ILcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/TaskDisplayArea;->$r8$lambda$FYidKPzUkLETjkRN9VF8Kw1HZgI(Lcom/android/server/wm/Task;)Z
+HSPLcom/android/server/wm/TaskDisplayArea;->$r8$lambda$LlYq_RdRbhMscaTMkl_McaAWecA(Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/ActivityRecord;[ILcom/android/server/wm/Task;)V
 HSPLcom/android/server/wm/TaskDisplayArea;->$r8$lambda$U8rUbe1adWjZ1a8xihrAJp_JaQU(Lcom/android/server/wm/TaskDisplayArea;)V
 PLcom/android/server/wm/TaskDisplayArea;->$r8$lambda$VlCsJqULLc5sYclwBX7VBWYipDs(Lcom/android/server/wm/ActivityRecord;I)Z
 HPLcom/android/server/wm/TaskDisplayArea;->$r8$lambda$kNU9N8lwjRY3oB1gVBxCLoUc_y0(Lcom/android/server/wm/Task;)Z
-HPLcom/android/server/wm/TaskDisplayArea;->$r8$lambda$px_Q_6UGE5WJJ2o4ebrA9hDlzVE(Lcom/android/server/wm/ActivityRecord;[ILcom/android/server/wm/TaskFragment;)V
-HPLcom/android/server/wm/TaskDisplayArea;->$r8$lambda$uuiWs_4nNasIw8JPlnmaWMlPw4E(IILcom/android/server/wm/Task;)Z
+HSPLcom/android/server/wm/TaskDisplayArea;->$r8$lambda$px_Q_6UGE5WJJ2o4ebrA9hDlzVE(Lcom/android/server/wm/ActivityRecord;[ILcom/android/server/wm/TaskFragment;)V
+HSPLcom/android/server/wm/TaskDisplayArea;->$r8$lambda$uuiWs_4nNasIw8JPlnmaWMlPw4E(IILcom/android/server/wm/Task;)Z
 HSPLcom/android/server/wm/TaskDisplayArea;-><init>(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/WindowManagerService;Ljava/lang/String;I)V
 HSPLcom/android/server/wm/TaskDisplayArea;-><init>(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/WindowManagerService;Ljava/lang/String;IZZ)V
 HSPLcom/android/server/wm/TaskDisplayArea;->addChild(Lcom/android/server/wm/WindowContainer;I)V
 HSPLcom/android/server/wm/TaskDisplayArea;->addChildTask(Lcom/android/server/wm/Task;I)V
 HSPLcom/android/server/wm/TaskDisplayArea;->addRootTaskReferenceIfNeeded(Lcom/android/server/wm/Task;)V
-HSPLcom/android/server/wm/TaskDisplayArea;->adjustRootTaskLayer(Landroid/view/SurfaceControl$Transaction;Ljava/util/ArrayList;I)I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Landroid/util/IntArray;Landroid/util/IntArray;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/TaskDisplayArea;->allResumedActivitiesComplete()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/TaskDisplayArea;->adjustRootTaskLayer(Landroid/view/SurfaceControl$Transaction;Ljava/util/ArrayList;I)I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Landroid/util/IntArray;Landroid/util/IntArray;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/TaskDisplayArea;->allResumedActivitiesComplete()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/TaskDisplayArea;->asTaskDisplayArea()Lcom/android/server/wm/TaskDisplayArea;
 HSPLcom/android/server/wm/TaskDisplayArea;->assignChildLayers(Landroid/view/SurfaceControl$Transaction;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;
 HSPLcom/android/server/wm/TaskDisplayArea;->assignRootTaskOrdering(Landroid/view/SurfaceControl$Transaction;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;,Ljava/util/ArrayList;
@@ -58441,58 +60324,58 @@
 PLcom/android/server/wm/TaskDisplayArea;->clearPreferredTopFocusableRootTask()V
 HSPLcom/android/server/wm/TaskDisplayArea;->createRootTask(IIZ)Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/TaskDisplayArea;->createRootTask(IIZLandroid/app/ActivityOptions;)Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/TaskDisplayArea;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
-HPLcom/android/server/wm/TaskDisplayArea;->ensureActivitiesVisible(Lcom/android/server/wm/ActivityRecord;IZZ)V
+HSPLcom/android/server/wm/TaskDisplayArea;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
+HPLcom/android/server/wm/TaskDisplayArea;->ensureActivitiesVisible(Lcom/android/server/wm/ActivityRecord;IZZ)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;
 HSPLcom/android/server/wm/TaskDisplayArea;->findMaxPositionForRootTask(Lcom/android/server/wm/Task;)I
 HSPLcom/android/server/wm/TaskDisplayArea;->findMinPositionForRootTask(Lcom/android/server/wm/Task;)I
 HSPLcom/android/server/wm/TaskDisplayArea;->findPositionForRootTask(ILcom/android/server/wm/Task;Z)I
-HPLcom/android/server/wm/TaskDisplayArea;->forAllTaskDisplayAreas(Ljava/util/function/Consumer;Z)V
+HSPLcom/android/server/wm/TaskDisplayArea;->forAllTaskDisplayAreas(Ljava/util/function/Consumer;Z)V
 HPLcom/android/server/wm/TaskDisplayArea;->forAllTaskDisplayAreas(Ljava/util/function/Predicate;Z)Z
 HSPLcom/android/server/wm/TaskDisplayArea;->getDisplayId()I
-HPLcom/android/server/wm/TaskDisplayArea;->getFocusedActivity()Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/TaskDisplayArea;->getFocusedActivity()Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/TaskDisplayArea;->getFocusedRootTask()Lcom/android/server/wm/Task;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HPLcom/android/server/wm/TaskDisplayArea;->getHomeActivity()Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/TaskDisplayArea;->getHomeActivityForUser(I)Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/TaskDisplayArea;->getItemFromTaskDisplayAreas(Ljava/util/function/Function;Z)Ljava/lang/Object;+]Ljava/util/function/Function;megamorphic_types
-HPLcom/android/server/wm/TaskDisplayArea;->getLastFocusedRootTask()Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/TaskDisplayArea;->getLastFocusedRootTask()Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/TaskDisplayArea;->getLaunchRootTask(IILandroid/app/ActivityOptions;Lcom/android/server/wm/Task;I)Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/TaskDisplayArea;->getLaunchRootTask(IILandroid/app/ActivityOptions;Lcom/android/server/wm/Task;ILcom/android/server/wm/Task;)Lcom/android/server/wm/Task;
-PLcom/android/server/wm/TaskDisplayArea;->getLaunchRootTaskDef(Lcom/android/server/wm/Task;)Lcom/android/server/wm/TaskDisplayArea$LaunchRootTaskDef;
+HPLcom/android/server/wm/TaskDisplayArea;->getLaunchRootTaskDef(Lcom/android/server/wm/Task;)Lcom/android/server/wm/TaskDisplayArea$LaunchRootTaskDef;
 PLcom/android/server/wm/TaskDisplayArea;->getNextFocusableRootTask(Lcom/android/server/wm/Task;Z)Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/TaskDisplayArea;->getNextRootTaskId()I
 PLcom/android/server/wm/TaskDisplayArea;->getOrCreateRootHomeTask()Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/TaskDisplayArea;->getOrCreateRootHomeTask(Z)Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/TaskDisplayArea;->getOrCreateRootTask(IIZLcom/android/server/wm/Task;Lcom/android/server/wm/Task;Landroid/app/ActivityOptions;I)Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/TaskDisplayArea;->getOrCreateRootTask(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;Lcom/android/server/wm/LaunchParamsController$LaunchParams;IIZ)Lcom/android/server/wm/Task;
-HSPLcom/android/server/wm/TaskDisplayArea;->getOrientation(I)I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
-HSPLcom/android/server/wm/TaskDisplayArea;->getPriority(Lcom/android/server/wm/WindowContainer;)I
+HSPLcom/android/server/wm/TaskDisplayArea;->getOrCreateRootTask(IIZLcom/android/server/wm/Task;Lcom/android/server/wm/Task;Landroid/app/ActivityOptions;I)Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/TaskDisplayArea;->getOrCreateRootTask(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;Lcom/android/server/wm/LaunchParamsController$LaunchParams;IIZ)Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/TaskDisplayArea;->getOrientation(I)I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/Task;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/TaskDisplayArea;->getPriority(Lcom/android/server/wm/WindowContainer;)I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/TaskDisplayArea;->getRootHomeTask()Lcom/android/server/wm/Task;
-PLcom/android/server/wm/TaskDisplayArea;->getRootPinnedTask()Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/TaskDisplayArea;->getRootPinnedTask()Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/TaskDisplayArea;->getRootTask(II)Lcom/android/server/wm/Task;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/TaskDisplayArea;
 HPLcom/android/server/wm/TaskDisplayArea;->getRootTaskAbove(Lcom/android/server/wm/Task;)Lcom/android/server/wm/Task;
-PLcom/android/server/wm/TaskDisplayArea;->getTaskDisplayArea()Lcom/android/server/wm/TaskDisplayArea;
-HPLcom/android/server/wm/TaskDisplayArea;->getTopRootTask()Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/TaskDisplayArea;->getTopRootTaskInWindowingMode(I)Lcom/android/server/wm/Task;+]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;
+HSPLcom/android/server/wm/TaskDisplayArea;->getTaskDisplayArea()Lcom/android/server/wm/TaskDisplayArea;
+HSPLcom/android/server/wm/TaskDisplayArea;->getTopRootTask()Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/TaskDisplayArea;->getTopRootTaskInWindowingMode(I)Lcom/android/server/wm/Task;+]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;
 HPLcom/android/server/wm/TaskDisplayArea;->getVisibleTasks()Ljava/util/ArrayList;
 PLcom/android/server/wm/TaskDisplayArea;->hasPinnedTask()Z
 PLcom/android/server/wm/TaskDisplayArea;->isHomeActivityForUser(Lcom/android/server/wm/ActivityRecord;I)Z
-HPLcom/android/server/wm/TaskDisplayArea;->isLargeEnoughForMultiWindow()Z
+HSPLcom/android/server/wm/TaskDisplayArea;->isLargeEnoughForMultiWindow()Z
 PLcom/android/server/wm/TaskDisplayArea;->isOnTop()Z
 HSPLcom/android/server/wm/TaskDisplayArea;->isRemoved()Z
-HPLcom/android/server/wm/TaskDisplayArea;->isRootTaskVisible(I)Z+]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;
-PLcom/android/server/wm/TaskDisplayArea;->isTaskDisplayArea()Z
-HPLcom/android/server/wm/TaskDisplayArea;->isTopRootTask(Lcom/android/server/wm/Task;)Z
-HPLcom/android/server/wm/TaskDisplayArea;->isValidWindowingMode(ILcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/Task;)Z
+HSPLcom/android/server/wm/TaskDisplayArea;->isRootTaskVisible(I)Z+]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/TaskDisplayArea;->isTaskDisplayArea()Z
+HSPLcom/android/server/wm/TaskDisplayArea;->isTopRootTask(Lcom/android/server/wm/Task;)Z
+HSPLcom/android/server/wm/TaskDisplayArea;->isValidWindowingMode(ILcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/Task;)Z
 HSPLcom/android/server/wm/TaskDisplayArea;->isWindowingModeSupported(IZZZ)Z
 HPLcom/android/server/wm/TaskDisplayArea;->lambda$ensureActivitiesVisible$11(Lcom/android/server/wm/ActivityRecord;IZZLcom/android/server/wm/Task;)V
 HSPLcom/android/server/wm/TaskDisplayArea;->lambda$getOrientation$3(ILcom/android/server/wm/TaskDisplayArea;Ljava/lang/Integer;)Ljava/lang/Integer;
 HPLcom/android/server/wm/TaskDisplayArea;->lambda$getOrientation$4(Lcom/android/server/wm/Task;)Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
-HPLcom/android/server/wm/TaskDisplayArea;->lambda$getRootTask$0(IILcom/android/server/wm/Task;)Z+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;
-PLcom/android/server/wm/TaskDisplayArea;->lambda$getTopRootTask$1(Lcom/android/server/wm/Task;)Z
-PLcom/android/server/wm/TaskDisplayArea;->lambda$getVisibleTasks$2(Ljava/util/ArrayList;Lcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/TaskDisplayArea;->lambda$getRootTask$0(IILcom/android/server/wm/Task;)Z+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/TaskDisplayArea;->lambda$getTopRootTask$1(Lcom/android/server/wm/Task;)Z
+HPLcom/android/server/wm/TaskDisplayArea;->lambda$getVisibleTasks$2(Ljava/util/ArrayList;Lcom/android/server/wm/Task;)V
 HSPLcom/android/server/wm/TaskDisplayArea;->lambda$onParentChanged$6()V
-HPLcom/android/server/wm/TaskDisplayArea;->lambda$pauseBackTasks$7(Lcom/android/server/wm/ActivityRecord;[ILcom/android/server/wm/TaskFragment;)V
-HPLcom/android/server/wm/TaskDisplayArea;->lambda$pauseBackTasks$8(Lcom/android/server/wm/ActivityRecord;[ILcom/android/server/wm/Task;)V+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/TaskDisplayArea;->lambda$pauseBackTasks$7(Lcom/android/server/wm/ActivityRecord;[ILcom/android/server/wm/TaskFragment;)V
+HSPLcom/android/server/wm/TaskDisplayArea;->lambda$pauseBackTasks$8(Lcom/android/server/wm/ActivityRecord;[ILcom/android/server/wm/Task;)V+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/TaskDisplayArea;->migrateToNewSurfaceControl(Landroid/view/SurfaceControl$Transaction;)V
 PLcom/android/server/wm/TaskDisplayArea;->moveHomeActivityToTop(Ljava/lang/String;)V
 PLcom/android/server/wm/TaskDisplayArea;->moveHomeRootTaskToFront(Ljava/lang/String;)V
@@ -58504,13 +60387,13 @@
 HSPLcom/android/server/wm/TaskDisplayArea;->onRootTaskOrderChanged(Lcom/android/server/wm/Task;)V
 HSPLcom/android/server/wm/TaskDisplayArea;->onRootTaskRemoved(Lcom/android/server/wm/Task;)V
 HSPLcom/android/server/wm/TaskDisplayArea;->onRootTaskWindowingModeChanged(Lcom/android/server/wm/Task;)V
-HPLcom/android/server/wm/TaskDisplayArea;->pauseBackTasks(Lcom/android/server/wm/ActivityRecord;)Z
-HPLcom/android/server/wm/TaskDisplayArea;->positionChildAt(ILcom/android/server/wm/WindowContainer;Z)V
-HPLcom/android/server/wm/TaskDisplayArea;->positionChildTaskAt(ILcom/android/server/wm/Task;Z)V
+HSPLcom/android/server/wm/TaskDisplayArea;->pauseBackTasks(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/TaskDisplayArea;->positionChildAt(ILcom/android/server/wm/WindowContainer;Z)V
+HSPLcom/android/server/wm/TaskDisplayArea;->positionChildTaskAt(ILcom/android/server/wm/Task;Z)V
 PLcom/android/server/wm/TaskDisplayArea;->positionTaskBehindHome(Lcom/android/server/wm/Task;)V
 HSPLcom/android/server/wm/TaskDisplayArea;->reduceOnAllTaskDisplayAreas(Ljava/util/function/BiFunction;Ljava/lang/Object;Z)Ljava/lang/Object;
 HPLcom/android/server/wm/TaskDisplayArea;->registerRootTaskOrderChangedListener(Lcom/android/server/wm/TaskDisplayArea$OnRootTaskOrderChangedListener;)V
-PLcom/android/server/wm/TaskDisplayArea;->remove()Lcom/android/server/wm/Task;
+HPLcom/android/server/wm/TaskDisplayArea;->remove()Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/TaskDisplayArea;->removeChild(Lcom/android/server/wm/WindowContainer;)V
 HSPLcom/android/server/wm/TaskDisplayArea;->removeChildTask(Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/TaskDisplayArea;->removeLaunchRootTask(Lcom/android/server/wm/Task;)V
@@ -58520,31 +60403,35 @@
 HPLcom/android/server/wm/TaskDisplayArea;->setBackgroundColor(IZ)V
 HSPLcom/android/server/wm/TaskDisplayArea;->setInitialSurfaceControlProperties(Landroid/view/SurfaceControl$Builder;)V
 HSPLcom/android/server/wm/TaskDisplayArea;->setLaunchAdjacentFlagRootTask(Lcom/android/server/wm/Task;)V
-HSPLcom/android/server/wm/TaskDisplayArea;->supportsActivityMinWidthHeightMultiWindow(IILandroid/content/pm/ActivityInfo;)Z+]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
-HPLcom/android/server/wm/TaskDisplayArea;->supportsNonResizableMultiWindow()Z
-HPLcom/android/server/wm/TaskDisplayArea;->topRunningActivity()Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/TaskDisplayArea;->supportsActivityMinWidthHeightMultiWindow(IILandroid/content/pm/ActivityInfo;)Z+]Landroid/content/pm/ActivityInfo;Landroid/content/pm/ActivityInfo;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;
+HSPLcom/android/server/wm/TaskDisplayArea;->supportsNonResizableMultiWindow()Z
+HSPLcom/android/server/wm/TaskDisplayArea;->topRunningActivity()Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/TaskDisplayArea;->topRunningActivity(Z)Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/TaskDisplayArea;->unregisterRootTaskOrderChangedListener(Lcom/android/server/wm/TaskDisplayArea$OnRootTaskOrderChangedListener;)V
-HPLcom/android/server/wm/TaskDisplayArea;->updateLastFocusedRootTask(Lcom/android/server/wm/Task;Ljava/lang/String;)V
-HPLcom/android/server/wm/TaskDisplayArea;->validateWindowingMode(ILcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/Task;)I
+HSPLcom/android/server/wm/TaskDisplayArea;->updateLastFocusedRootTask(Lcom/android/server/wm/Task;Ljava/lang/String;)V
+HSPLcom/android/server/wm/TaskDisplayArea;->validateWindowingMode(ILcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/Task;)I
+PLcom/android/server/wm/TaskFpsCallbackController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/TaskFpsCallbackController;Landroid/window/ITaskFpsCallback;)V
 HSPLcom/android/server/wm/TaskFpsCallbackController;-><init>(Landroid/content/Context;)V
-HPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda0;-><init>()V
-HPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;Ljava/lang/Object;)Z
+PLcom/android/server/wm/TaskFpsCallbackController;->registerListener(ILandroid/window/ITaskFpsCallback;)V
+HSPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda0;-><init>()V
+HSPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;Ljava/lang/Object;)Z
 PLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda10;-><init>(Lcom/android/server/wm/TaskFragment;)V
 PLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda10;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda11;-><init>(Lcom/android/server/wm/TaskFragment;ZLjava/io/PrintWriter;Ljava/lang/Runnable;Ljava/lang/String;ZLjava/lang/String;)V
-PLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda11;->run()V
-PLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda12;-><init>(I)V
-PLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda12;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda11;-><init>(Lcom/android/server/wm/TaskFragment;ZLjava/io/PrintWriter;Ljava/lang/Runnable;Ljava/lang/String;ZLjava/lang/String;)V
+HSPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda11;->run()V
+PLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda12;-><init>([I[I)V
+PLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda12;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda13;-><init>(I)V
+PLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda13;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda1;-><init>()V
-HPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda1;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/wm/TaskFragment;)V
+HSPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda1;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/wm/TaskFragment;)V
 HPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda4;->test(Ljava/lang/Object;)Z
-HPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda5;-><init>()V
-HPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda5;-><init>()V
+HSPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda6;-><init>()V
-HPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda6;->test(Ljava/lang/Object;)Z
-PLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/wm/TaskFragment;)V
+HSPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda6;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/wm/TaskFragment;)V
 HPLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda8;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda9;-><init>([I)V
 PLcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda9;->accept(Ljava/lang/Object;)V
@@ -58552,14 +60439,15 @@
 HSPLcom/android/server/wm/TaskFragment$EnsureVisibleActivitiesConfigHelper;-><init>(Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/TaskFragment$EnsureVisibleActivitiesConfigHelper-IA;)V
 PLcom/android/server/wm/TaskFragment;->$r8$lambda$6JpDAuD-Mx9UH8H8z6IiSdFB7x4(ILcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/TaskFragment;->$r8$lambda$A43_159L2n9H2kETAVsFLG521C0(Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/ActivityRecord;)Z
-HPLcom/android/server/wm/TaskFragment;->$r8$lambda$Ixb4GHAVDuQSFWJYigO_P4MPOXM(Lcom/android/server/wm/TaskFragment;)V
-PLcom/android/server/wm/TaskFragment;->$r8$lambda$KZIfpbly5zXroeOlKE4kI3eD4wI(Lcom/android/server/wm/TaskFragment;ZLjava/io/PrintWriter;Ljava/lang/Runnable;Ljava/lang/String;ZLjava/lang/String;)V
 HPLcom/android/server/wm/TaskFragment;->$r8$lambda$OuvDbRoBRROhTQueEhHc2ZEt3Fg(Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/ActivityRecord;)Z
-HPLcom/android/server/wm/TaskFragment;->$r8$lambda$ST7wE4Wg-Swcm2QvbnhW7IPshmI(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/TaskFragment;->$r8$lambda$WJLVC68G7yUCFWk29C8tO0MoZxo(Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/ActivityRecord;)Z
-HPLcom/android/server/wm/TaskFragment;->$r8$lambda$q77xa5YS28EmN0qaij-drM-u_C8(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/TaskFragment;->$r8$lambda$ST7wE4Wg-Swcm2QvbnhW7IPshmI(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/TaskFragment;->$r8$lambda$WJLVC68G7yUCFWk29C8tO0MoZxo(Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/ActivityRecord;)Z
+PLcom/android/server/wm/TaskFragment;->$r8$lambda$oIQMxR2K2ntpC3zwx1eEQNW7ihg([I[ILcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/TaskFragment;->$r8$lambda$q77xa5YS28EmN0qaij-drM-u_C8(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
+PLcom/android/server/wm/TaskFragment;->$r8$lambda$tSzipEZKEZCVoi57D7Ust6GNpwA(Lcom/android/server/wm/TaskFragment;ZLjava/io/PrintWriter;Ljava/lang/Runnable;Ljava/lang/String;ZLjava/lang/String;)V
 PLcom/android/server/wm/TaskFragment;->$r8$lambda$vjcPfzjJhlOyUjaUk61LVu9vQog(Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/ActivityRecord;)Z
-HPLcom/android/server/wm/TaskFragment;->$r8$lambda$xsW-ASiDukYQdk0dDnG88QtD4m4(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/TaskFragment;->$r8$lambda$wEed20_gAw7EkHx3-rF0AgekVkE(Lcom/android/server/wm/TaskFragment;)V
+HSPLcom/android/server/wm/TaskFragment;->$r8$lambda$xsW-ASiDukYQdk0dDnG88QtD4m4(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/TaskFragment;->$r8$lambda$zkiACieqAFR6F2t9dNpP5g1J7Eo([ILcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/TaskFragment;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Landroid/os/IBinder;Z)V
 HSPLcom/android/server/wm/TaskFragment;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Landroid/os/IBinder;ZZ)V
@@ -58567,12 +60455,13 @@
 HSPLcom/android/server/wm/TaskFragment;->asTaskFragment()Lcom/android/server/wm/TaskFragment;
 HPLcom/android/server/wm/TaskFragment;->awakeFromSleeping()V
 HSPLcom/android/server/wm/TaskFragment;->calculateInsetFrames(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/view/DisplayInfo;)V
+HPLcom/android/server/wm/TaskFragment;->calculateMinDimension()Landroid/graphics/Point;
 PLcom/android/server/wm/TaskFragment;->canBeAnimationTarget()Z
-HPLcom/android/server/wm/TaskFragment;->canBeResumed(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/TaskFragment;->canBeResumed(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;
 PLcom/android/server/wm/TaskFragment;->canCreateRemoteAnimationTarget()Z
 PLcom/android/server/wm/TaskFragment;->cleanUp()V
 HPLcom/android/server/wm/TaskFragment;->cleanUpActivityReferences(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/TaskFragment;->clearLastPausedActivity()V
+HSPLcom/android/server/wm/TaskFragment;->clearLastPausedActivity()V
 HPLcom/android/server/wm/TaskFragment;->completePause(ZLcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/TaskFragment;->computeConfigResourceOverrides(Landroid/content/res/Configuration;Landroid/content/res/Configuration;)V
 PLcom/android/server/wm/TaskFragment;->computeConfigResourceOverrides(Landroid/content/res/Configuration;Landroid/content/res/Configuration;Landroid/view/DisplayInfo;)V
@@ -58581,28 +60470,28 @@
 HSPLcom/android/server/wm/TaskFragment;->computeScreenLayoutOverride(III)I
 HPLcom/android/server/wm/TaskFragment;->containsStoppingActivity()Z+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/TaskFragment;->createRemoteAnimationTarget(Lcom/android/server/wm/RemoteAnimationController$RemoteAnimationRecord;)Landroid/view/RemoteAnimationTarget;
-HPLcom/android/server/wm/TaskFragment;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
-HPLcom/android/server/wm/TaskFragment;->dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;ZZLjava/lang/String;ZLjava/lang/Runnable;)Z
-HPLcom/android/server/wm/TaskFragment;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
-PLcom/android/server/wm/TaskFragment;->dumpInner(Ljava/lang/String;Ljava/io/PrintWriter;ZLjava/lang/String;)V
+HSPLcom/android/server/wm/TaskFragment;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
+HSPLcom/android/server/wm/TaskFragment;->dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;ZZLjava/lang/String;ZLjava/lang/Runnable;)Z
+HPLcom/android/server/wm/TaskFragment;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;
+HSPLcom/android/server/wm/TaskFragment;->dumpInner(Ljava/lang/String;Ljava/io/PrintWriter;ZLjava/lang/String;)V
 PLcom/android/server/wm/TaskFragment;->executeAppTransition(Landroid/app/ActivityOptions;)V
-HPLcom/android/server/wm/TaskFragment;->fillsParent()Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
-HPLcom/android/server/wm/TaskFragment;->forAllLeafTaskFragments(Ljava/util/function/Consumer;Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;]Ljava/util/function/Consumer;Lcom/android/server/wm/Task$$ExternalSyntheticLambda35;,Lcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda11;,Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda34;,Lcom/android/server/wm/Task$$ExternalSyntheticLambda1;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/TaskFragment;
-HSPLcom/android/server/wm/TaskFragment;->forAllLeafTaskFragments(Ljava/util/function/Predicate;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;]Ljava/util/function/Predicate;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-HPLcom/android/server/wm/TaskFragment;->forAllTaskFragments(Ljava/util/function/Consumer;Z)V
-PLcom/android/server/wm/TaskFragment;->fromTaskFragmentToken(Landroid/os/IBinder;Lcom/android/server/wm/ActivityTaskManagerService;)Lcom/android/server/wm/TaskFragment;
-HSPLcom/android/server/wm/TaskFragment;->getActivityType()I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;
+HSPLcom/android/server/wm/TaskFragment;->fillsParent()Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
+HSPLcom/android/server/wm/TaskFragment;->forAllLeafTaskFragments(Ljava/util/function/Consumer;Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;]Ljava/util/function/Consumer;Lcom/android/server/wm/Task$$ExternalSyntheticLambda35;,Lcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda11;,Lcom/android/server/wm/Task$$ExternalSyntheticLambda1;,Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda34;,Lcom/android/server/wm/Task$$ExternalSyntheticLambda36;,Lcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda10;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/TaskFragment;
+HSPLcom/android/server/wm/TaskFragment;->forAllLeafTaskFragments(Ljava/util/function/Predicate;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Ljava/util/function/Predicate;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/TaskFragment;->forAllTaskFragments(Ljava/util/function/Consumer;Z)V
+HSPLcom/android/server/wm/TaskFragment;->fromTaskFragmentToken(Landroid/os/IBinder;Lcom/android/server/wm/ActivityTaskManagerService;)Lcom/android/server/wm/TaskFragment;
+HSPLcom/android/server/wm/TaskFragment;->getActivityType()I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/TaskFragment;->getAdjacentTaskFragment()Lcom/android/server/wm/TaskFragment;
-PLcom/android/server/wm/TaskFragment;->getDimmer()Lcom/android/server/wm/Dimmer;
+HPLcom/android/server/wm/TaskFragment;->getDimmer()Lcom/android/server/wm/Dimmer;
 HSPLcom/android/server/wm/TaskFragment;->getDisplayArea()Lcom/android/server/wm/DisplayArea;+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
 HSPLcom/android/server/wm/TaskFragment;->getDisplayArea()Lcom/android/server/wm/TaskDisplayArea;
 HSPLcom/android/server/wm/TaskFragment;->getDisplayId()I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
-HPLcom/android/server/wm/TaskFragment;->getFragmentToken()Landroid/os/IBinder;
+HSPLcom/android/server/wm/TaskFragment;->getFragmentToken()Landroid/os/IBinder;
 PLcom/android/server/wm/TaskFragment;->getNonFinishingActivityCount()I
-HPLcom/android/server/wm/TaskFragment;->getOrganizedTaskFragment()Lcom/android/server/wm/TaskFragment;
-HPLcom/android/server/wm/TaskFragment;->getPausingActivity()Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/TaskFragment;->getOrganizedTaskFragment()Lcom/android/server/wm/TaskFragment;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/TaskFragment;->getPausingActivity()Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/TaskFragment;->getProtoFieldId()J
-HPLcom/android/server/wm/TaskFragment;->getResumedActivity()Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/TaskFragment;->getResumedActivity()Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/TaskFragment;->getRootTask()Lcom/android/server/wm/Task;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
 HSPLcom/android/server/wm/TaskFragment;->getRootTaskFragment()Lcom/android/server/wm/TaskFragment;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/TaskFragment;->getTask()Lcom/android/server/wm/Task;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;
@@ -58610,24 +60499,24 @@
 PLcom/android/server/wm/TaskFragment;->getTaskFragmentOrganizer()Landroid/window/ITaskFragmentOrganizer;
 HSPLcom/android/server/wm/TaskFragment;->getTopNonFinishingActivity()Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
 HSPLcom/android/server/wm/TaskFragment;->getTopNonFinishingActivity(Z)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
-HSPLcom/android/server/wm/TaskFragment;->getTopNonFinishingActivity(ZZ)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/TaskFragment;->getTopNonFinishingActivity(ZZ)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
 HPLcom/android/server/wm/TaskFragment;->getTopPausingActivity()Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/TaskFragment;->getTopResumedActivity()Lcom/android/server/wm/ActivityRecord;
-HSPLcom/android/server/wm/TaskFragment;->getVisibility(Lcom/android/server/wm/ActivityRecord;)I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/TaskFragment;->getVisibility(Lcom/android/server/wm/ActivityRecord;)I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/ActivityRecord;]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HPLcom/android/server/wm/TaskFragment;->handleAppDied(Lcom/android/server/wm/WindowProcessController;)Z
 HSPLcom/android/server/wm/TaskFragment;->handleCompleteDeferredRemoval()Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
 HPLcom/android/server/wm/TaskFragment;->hasDirectChildActivities()Z
-HSPLcom/android/server/wm/TaskFragment;->hasRunningActivity(Lcom/android/server/wm/WindowContainer;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/TaskFragment;->hasRunningActivity(Lcom/android/server/wm/WindowContainer;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
 PLcom/android/server/wm/TaskFragment;->hasTaskFragmentOrganizer(Landroid/window/ITaskFragmentOrganizer;)Z
 HSPLcom/android/server/wm/TaskFragment;->intersectWithInsetsIfFits(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
 PLcom/android/server/wm/TaskFragment;->invalidateAppBoundsConfig(Landroid/content/res/Configuration;)V
 PLcom/android/server/wm/TaskFragment;->isAllowedToBeEmbeddedInTrustedMode()Z
-PLcom/android/server/wm/TaskFragment;->isAllowedToEmbedActivity(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/TaskFragment;->isAllowedToEmbedActivity(Lcom/android/server/wm/ActivityRecord;I)Z
-PLcom/android/server/wm/TaskFragment;->isAllowedToEmbedActivityInTrustedMode(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/TaskFragment;->isAllowedToEmbedActivityInTrustedMode(Lcom/android/server/wm/ActivityRecord;I)Z
+PLcom/android/server/wm/TaskFragment;->isAllowedToEmbedActivity(Lcom/android/server/wm/ActivityRecord;)I
+PLcom/android/server/wm/TaskFragment;->isAllowedToEmbedActivity(Lcom/android/server/wm/ActivityRecord;I)I
+HPLcom/android/server/wm/TaskFragment;->isAllowedToEmbedActivityInTrustedMode(Lcom/android/server/wm/ActivityRecord;)Z
+HPLcom/android/server/wm/TaskFragment;->isAllowedToEmbedActivityInTrustedMode(Lcom/android/server/wm/ActivityRecord;I)Z
 PLcom/android/server/wm/TaskFragment;->isAllowedToEmbedActivityInUntrustedMode(Lcom/android/server/wm/ActivityRecord;)Z
-HSPLcom/android/server/wm/TaskFragment;->isAttached()Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;
+HSPLcom/android/server/wm/TaskFragment;->isAttached()Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;
 PLcom/android/server/wm/TaskFragment;->isDelayLastActivityRemoval()Z
 HSPLcom/android/server/wm/TaskFragment;->isEmbedded()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/TaskFragment;->isEmbeddedTaskFragmentInPip()Z
@@ -58635,32 +60524,33 @@
 PLcom/android/server/wm/TaskFragment;->isForceHidden()Z
 PLcom/android/server/wm/TaskFragment;->isFullyTrustedEmbedding(I)Z
 HPLcom/android/server/wm/TaskFragment;->isFullyTrustedEmbedding(Lcom/android/server/wm/ActivityRecord;I)Z
-HPLcom/android/server/wm/TaskFragment;->isLeafTaskFragment()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-HPLcom/android/server/wm/TaskFragment;->isOpaqueActivity(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/TaskFragment;->isLeafTaskFragment()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/TaskFragment;->isOpaqueActivity(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/TaskFragment;->isOrganized()Z
 HSPLcom/android/server/wm/TaskFragment;->isOrganizedTaskFragment()Z
 HPLcom/android/server/wm/TaskFragment;->isReadyToTransit()Z
 HSPLcom/android/server/wm/TaskFragment;->isTopActivityFocusable()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/TaskFragment;->isTopActivityLaunchedBehind()Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/TaskFragment;->isTranslucent(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;]Lcom/android/internal/util/function/pooled/PooledPredicate;Lcom/android/internal/util/function/pooled/PooledLambdaImpl;
-HPLcom/android/server/wm/TaskFragment;->isTranslucent(Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/TaskFragment;->lambda$clearLastPausedActivity$10(Lcom/android/server/wm/TaskFragment;)V
-PLcom/android/server/wm/TaskFragment;->lambda$dump$11(ZLjava/io/PrintWriter;Ljava/lang/Runnable;Ljava/lang/String;ZLjava/lang/String;)V
+HSPLcom/android/server/wm/TaskFragment;->isTranslucent(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/internal/util/function/pooled/PooledPredicate;Lcom/android/internal/util/function/pooled/PooledLambdaImpl;
+HSPLcom/android/server/wm/TaskFragment;->isTranslucent(Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+PLcom/android/server/wm/TaskFragment;->lambda$calculateMinDimension$10([I[ILcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/TaskFragment;->lambda$clearLastPausedActivity$11(Lcom/android/server/wm/TaskFragment;)V
+PLcom/android/server/wm/TaskFragment;->lambda$dump$12(ZLjava/io/PrintWriter;Ljava/lang/Runnable;Ljava/lang/String;ZLjava/lang/String;)V
 PLcom/android/server/wm/TaskFragment;->lambda$getNonFinishingActivityCount$9([ILcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/TaskFragment;->lambda$getTopNonFinishingActivity$2(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/TaskFragment;->lambda$getTopNonFinishingActivity$2(Lcom/android/server/wm/ActivityRecord;)Z
 HPLcom/android/server/wm/TaskFragment;->lambda$getTopNonFinishingActivity$4(Lcom/android/server/wm/ActivityRecord;)Z
 HPLcom/android/server/wm/TaskFragment;->lambda$getTopNonFinishingActivity$5(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/TaskFragment;->lambda$isAllowedToBeEmbeddedInTrustedMode$1(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/TaskFragment;->lambda$isFullyTrustedEmbedding$0(ILcom/android/server/wm/ActivityRecord;)Z
-HPLcom/android/server/wm/TaskFragment;->lambda$topRunningActivity$6(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/TaskFragment;->lambda$topRunningActivity$6(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/TaskFragment;->lambda$topRunningActivity$7(Lcom/android/server/wm/ActivityRecord;)Z
 HPLcom/android/server/wm/TaskFragment;->lambda$topRunningActivity$8(Lcom/android/server/wm/ActivityRecord;)Z
-HPLcom/android/server/wm/TaskFragment;->onActivityStateChanged(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord$State;Ljava/lang/String;)V+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/RecentTasks;Lcom/android/server/wm/RecentTasks;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/TaskFragment;->onActivityStateChanged(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord$State;Ljava/lang/String;)V+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Lcom/android/server/wm/RecentTasks;Lcom/android/server/wm/RecentTasks;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/TaskFragment;->onAnimationLeashCreated(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V
 HPLcom/android/server/wm/TaskFragment;->onAnimationLeashLost(Landroid/view/SurfaceControl$Transaction;)V
 PLcom/android/server/wm/TaskFragment;->onChildPositionChanged(Lcom/android/server/wm/WindowContainer;)V
 HSPLcom/android/server/wm/TaskFragment;->onConfigurationChanged(Landroid/content/res/Configuration;)V
-HSPLcom/android/server/wm/TaskFragment;->prepareSurfaces()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/Dimmer;Lcom/android/server/wm/Dimmer;
+HSPLcom/android/server/wm/TaskFragment;->prepareSurfaces()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/Dimmer;Lcom/android/server/wm/Dimmer;
 PLcom/android/server/wm/TaskFragment;->remove(ZLjava/lang/String;)V
 PLcom/android/server/wm/TaskFragment;->removeChild(Lcom/android/server/wm/WindowContainer;)V
 HPLcom/android/server/wm/TaskFragment;->removeChild(Lcom/android/server/wm/WindowContainer;Z)V
@@ -58668,7 +60558,7 @@
 PLcom/android/server/wm/TaskFragment;->removeImmediately(Ljava/lang/String;)V
 HSPLcom/android/server/wm/TaskFragment;->resetAdjacentTaskFragment()V
 HSPLcom/android/server/wm/TaskFragment;->resolveOverrideConfiguration(Landroid/content/res/Configuration;)V
-HPLcom/android/server/wm/TaskFragment;->resumeTopActivity(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Z)Z
+HSPLcom/android/server/wm/TaskFragment;->resumeTopActivity(Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Z)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Landroid/content/pm/IPackageManager;Lcom/android/server/pm/PackageManagerService$IPackageManagerImpl;]Lcom/android/server/wm/AppWarnings;Lcom/android/server/wm/AppWarnings;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/ActivityMetricsLogger;Lcom/android/server/wm/ActivityMetricsLogger;]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Landroid/app/servertransaction/ClientTransaction;Landroid/app/servertransaction/ClientTransaction;]Lcom/android/server/wm/ClientLifecycleManager;Lcom/android/server/wm/ClientLifecycleManager;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/TaskFragment;->schedulePauseActivity(Lcom/android/server/wm/ActivityRecord;ZZLjava/lang/String;)V
 PLcom/android/server/wm/TaskFragment;->sendTaskFragmentAppeared()V
 HSPLcom/android/server/wm/TaskFragment;->sendTaskFragmentInfoChanged()V
@@ -58676,7 +60566,7 @@
 HSPLcom/android/server/wm/TaskFragment;->setAdjacentTaskFragment(Lcom/android/server/wm/TaskFragment;Z)V
 PLcom/android/server/wm/TaskFragment;->setDelayLastActivityRemoval(Z)V
 PLcom/android/server/wm/TaskFragment;->setMinDimensions(II)V
-HPLcom/android/server/wm/TaskFragment;->setResumedActivity(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;)V
+HSPLcom/android/server/wm/TaskFragment;->setResumedActivity(Lcom/android/server/wm/ActivityRecord;Ljava/lang/String;)V
 HSPLcom/android/server/wm/TaskFragment;->setSurfaceControl(Landroid/view/SurfaceControl;)V
 PLcom/android/server/wm/TaskFragment;->setTaskFragmentOrganizer(Landroid/window/TaskFragmentOrganizerToken;ILjava/lang/String;)V
 HSPLcom/android/server/wm/TaskFragment;->shouldBeVisible(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
@@ -58685,17 +60575,18 @@
 PLcom/android/server/wm/TaskFragment;->shouldSleepActivities()Z
 HPLcom/android/server/wm/TaskFragment;->shouldSleepOrShutDownActivities()Z
 HSPLcom/android/server/wm/TaskFragment;->shouldStartChangeTransition(Landroid/graphics/Rect;)Z
-HPLcom/android/server/wm/TaskFragment;->sleepIfPossible(Z)Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;
+HPLcom/android/server/wm/TaskFragment;->sleepIfPossible(Z)Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;
+PLcom/android/server/wm/TaskFragment;->smallerThanMinDimension(Lcom/android/server/wm/ActivityRecord;)Z
 HPLcom/android/server/wm/TaskFragment;->startPausing(ZLcom/android/server/wm/ActivityRecord;Ljava/lang/String;)Z
 HPLcom/android/server/wm/TaskFragment;->startPausing(ZZLcom/android/server/wm/ActivityRecord;Ljava/lang/String;)Z
 HSPLcom/android/server/wm/TaskFragment;->supportsMultiWindow()Z
 HSPLcom/android/server/wm/TaskFragment;->supportsMultiWindowInDisplayArea(Lcom/android/server/wm/TaskDisplayArea;)Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;
-HSPLcom/android/server/wm/TaskFragment;->topRunningActivity()Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;
-HSPLcom/android/server/wm/TaskFragment;->topRunningActivity(Z)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;
-HSPLcom/android/server/wm/TaskFragment;->topRunningActivity(ZZ)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/TaskFragment;->topRunningActivity()Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
+HSPLcom/android/server/wm/TaskFragment;->topRunningActivity(Z)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
+HSPLcom/android/server/wm/TaskFragment;->topRunningActivity(ZZ)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
 HSPLcom/android/server/wm/TaskFragment;->updateActivityVisibilities(Lcom/android/server/wm/ActivityRecord;IZZ)V+]Lcom/android/server/wm/EnsureActivitiesVisibleHelper;Lcom/android/server/wm/EnsureActivitiesVisibleHelper;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;
 HPLcom/android/server/wm/TaskFragment;->updateOrganizedTaskFragmentSurfaceSize(Landroid/view/SurfaceControl$Transaction;Z)V
-HPLcom/android/server/wm/TaskFragment;->warnForNonLeafTaskFragment(Ljava/lang/String;)V+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/TaskFragment;->warnForNonLeafTaskFragment(Ljava/lang/String;)V+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 PLcom/android/server/wm/TaskFragment;->writeIdentifierToProto(Landroid/util/proto/ProtoOutputStream;J)V
 PLcom/android/server/wm/TaskFragmentOrganizerController$$ExternalSyntheticLambda0;-><init>([Lcom/android/server/wm/TaskFragment;)V
 PLcom/android/server/wm/TaskFragmentOrganizerController$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
@@ -58717,7 +60608,7 @@
 PLcom/android/server/wm/TaskFragmentOrganizerController$TaskFragmentOrganizerState;->-$$Nest$fgetmLastSentTaskFragmentInfos(Lcom/android/server/wm/TaskFragmentOrganizerController$TaskFragmentOrganizerState;)Ljava/util/Map;
 PLcom/android/server/wm/TaskFragmentOrganizerController$TaskFragmentOrganizerState;->-$$Nest$fgetmOrganizerUid(Lcom/android/server/wm/TaskFragmentOrganizerController$TaskFragmentOrganizerState;)I
 PLcom/android/server/wm/TaskFragmentOrganizerController$TaskFragmentOrganizerState;->-$$Nest$fgetmRemoteAnimationDefinitions(Lcom/android/server/wm/TaskFragmentOrganizerController$TaskFragmentOrganizerState;)Landroid/util/SparseArray;
-HPLcom/android/server/wm/TaskFragmentOrganizerController$TaskFragmentOrganizerState;-><init>(Lcom/android/server/wm/TaskFragmentOrganizerController;Landroid/window/ITaskFragmentOrganizer;II)V
+HSPLcom/android/server/wm/TaskFragmentOrganizerController$TaskFragmentOrganizerState;-><init>(Lcom/android/server/wm/TaskFragmentOrganizerController;Landroid/window/ITaskFragmentOrganizer;II)V
 PLcom/android/server/wm/TaskFragmentOrganizerController$TaskFragmentOrganizerState;->addTaskFragment(Lcom/android/server/wm/TaskFragment;)Z
 PLcom/android/server/wm/TaskFragmentOrganizerController$TaskFragmentOrganizerState;->binderDied()V
 PLcom/android/server/wm/TaskFragmentOrganizerController$TaskFragmentOrganizerState;->dispose()V
@@ -58747,7 +60638,7 @@
 PLcom/android/server/wm/TaskFragmentOrganizerController;->onTaskFragmentError(Landroid/window/ITaskFragmentOrganizer;Landroid/os/IBinder;Ljava/lang/Throwable;)V
 PLcom/android/server/wm/TaskFragmentOrganizerController;->onTaskFragmentInfoChanged(Landroid/window/ITaskFragmentOrganizer;Lcom/android/server/wm/TaskFragment;)V
 PLcom/android/server/wm/TaskFragmentOrganizerController;->onTaskFragmentVanished(Landroid/window/ITaskFragmentOrganizer;Lcom/android/server/wm/TaskFragment;)V
-PLcom/android/server/wm/TaskFragmentOrganizerController;->registerOrganizer(Landroid/window/ITaskFragmentOrganizer;)V
+HSPLcom/android/server/wm/TaskFragmentOrganizerController;->registerOrganizer(Landroid/window/ITaskFragmentOrganizer;)V
 PLcom/android/server/wm/TaskFragmentOrganizerController;->registerRemoteAnimations(Landroid/window/ITaskFragmentOrganizer;ILandroid/view/RemoteAnimationDefinition;)V
 PLcom/android/server/wm/TaskFragmentOrganizerController;->removeOrganizer(Landroid/window/ITaskFragmentOrganizer;)V
 PLcom/android/server/wm/TaskFragmentOrganizerController;->shouldSendEventWhenTaskInvisible(Lcom/android/server/wm/TaskFragmentOrganizerController$PendingTaskFragmentEvent;)Z
@@ -58757,16 +60648,17 @@
 HPLcom/android/server/wm/TaskLaunchParamsModifier$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
 HPLcom/android/server/wm/TaskLaunchParamsModifier;->$r8$lambda$oqKHBQzADctRabQcTg1QrlZrh3o(Lcom/android/server/wm/TaskLaunchParamsModifier;IILcom/android/server/wm/TaskDisplayArea;)Z
 HSPLcom/android/server/wm/TaskLaunchParamsModifier;-><init>(Lcom/android/server/wm/ActivityTaskSupervisor;)V
-PLcom/android/server/wm/TaskLaunchParamsModifier;->appendLog(Ljava/lang/String;)V
-HPLcom/android/server/wm/TaskLaunchParamsModifier;->calculate(Lcom/android/server/wm/Task;Landroid/content/pm/ActivityInfo$WindowLayout;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Lcom/android/server/wm/ActivityStarter$Request;ILcom/android/server/wm/LaunchParamsController$LaunchParams;Lcom/android/server/wm/LaunchParamsController$LaunchParams;)I
-HPLcom/android/server/wm/TaskLaunchParamsModifier;->canApplyFreeformWindowPolicy(Lcom/android/server/wm/DisplayContent;I)Z
+HSPLcom/android/server/wm/TaskLaunchParamsModifier;->appendLog(Ljava/lang/String;)V
+HSPLcom/android/server/wm/TaskLaunchParamsModifier;->calculate(Lcom/android/server/wm/Task;Landroid/content/pm/ActivityInfo$WindowLayout;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Lcom/android/server/wm/ActivityStarter$Request;ILcom/android/server/wm/LaunchParamsController$LaunchParams;Lcom/android/server/wm/LaunchParamsController$LaunchParams;)I
+HSPLcom/android/server/wm/TaskLaunchParamsModifier;->canApplyFreeformWindowPolicy(Lcom/android/server/wm/DisplayContent;I)Z
+PLcom/android/server/wm/TaskLaunchParamsModifier;->canApplyPipWindowPolicy(I)Z
 HPLcom/android/server/wm/TaskLaunchParamsModifier;->canInheritWindowingModeFromSource(Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/ActivityRecord;)Z
 HPLcom/android/server/wm/TaskLaunchParamsModifier;->getFallbackDisplayAreaForActivity(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityStarter$Request;)Lcom/android/server/wm/TaskDisplayArea;
-HPLcom/android/server/wm/TaskLaunchParamsModifier;->getPreferredLaunchTaskDisplayArea(Lcom/android/server/wm/Task;Landroid/app/ActivityOptions;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/LaunchParamsController$LaunchParams;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityStarter$Request;)Lcom/android/server/wm/TaskDisplayArea;
-PLcom/android/server/wm/TaskLaunchParamsModifier;->initLogBuilder(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/TaskLaunchParamsModifier;->getPreferredLaunchTaskDisplayArea(Lcom/android/server/wm/Task;Landroid/app/ActivityOptions;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/LaunchParamsController$LaunchParams;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityStarter$Request;)Lcom/android/server/wm/TaskDisplayArea;
+HSPLcom/android/server/wm/TaskLaunchParamsModifier;->initLogBuilder(Lcom/android/server/wm/Task;Lcom/android/server/wm/ActivityRecord;)V
 HPLcom/android/server/wm/TaskLaunchParamsModifier;->lambda$calculate$0(IILcom/android/server/wm/TaskDisplayArea;)Z
-HPLcom/android/server/wm/TaskLaunchParamsModifier;->onCalculate(Lcom/android/server/wm/Task;Landroid/content/pm/ActivityInfo$WindowLayout;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Lcom/android/server/wm/ActivityStarter$Request;ILcom/android/server/wm/LaunchParamsController$LaunchParams;Lcom/android/server/wm/LaunchParamsController$LaunchParams;)I
-PLcom/android/server/wm/TaskLaunchParamsModifier;->outputLog()V
+HSPLcom/android/server/wm/TaskLaunchParamsModifier;->onCalculate(Lcom/android/server/wm/Task;Landroid/content/pm/ActivityInfo$WindowLayout;Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;Landroid/app/ActivityOptions;Lcom/android/server/wm/ActivityStarter$Request;ILcom/android/server/wm/LaunchParamsController$LaunchParams;Lcom/android/server/wm/LaunchParamsController$LaunchParams;)I
+HSPLcom/android/server/wm/TaskLaunchParamsModifier;->outputLog()V
 HSPLcom/android/server/wm/TaskOrganizerController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/TaskOrganizerController;Landroid/window/ITaskOrganizer;ILjava/util/ArrayList;)V
 HSPLcom/android/server/wm/TaskOrganizerController$$ExternalSyntheticLambda0;->run()V
 HSPLcom/android/server/wm/TaskOrganizerController$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerState;Ljava/util/ArrayList;)V
@@ -58789,9 +60681,9 @@
 HSPLcom/android/server/wm/TaskOrganizerController$TaskOrganizerCallbacks;->onTaskInfoChanged(Lcom/android/server/wm/Task;Landroid/app/ActivityManager$RunningTaskInfo;)V
 HSPLcom/android/server/wm/TaskOrganizerController$TaskOrganizerCallbacks;->prepareLeash(Lcom/android/server/wm/Task;Ljava/lang/String;)Landroid/view/SurfaceControl;
 HSPLcom/android/server/wm/TaskOrganizerController$TaskOrganizerState$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/WindowAnimator;)V
-PLcom/android/server/wm/TaskOrganizerController$TaskOrganizerState;->-$$Nest$fgetmOrganizedTasks(Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerState;)Ljava/util/ArrayList;
+HSPLcom/android/server/wm/TaskOrganizerController$TaskOrganizerState;->-$$Nest$fgetmOrganizedTasks(Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerState;)Ljava/util/ArrayList;
 HSPLcom/android/server/wm/TaskOrganizerController$TaskOrganizerState;->-$$Nest$fgetmOrganizer(Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerState;)Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerCallbacks;
-PLcom/android/server/wm/TaskOrganizerController$TaskOrganizerState;->-$$Nest$fgetmUid(Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerState;)I
+HSPLcom/android/server/wm/TaskOrganizerController$TaskOrganizerState;->-$$Nest$fgetmUid(Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerState;)I
 HSPLcom/android/server/wm/TaskOrganizerController$TaskOrganizerState;->-$$Nest$maddTask(Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerState;Lcom/android/server/wm/Task;)Z
 PLcom/android/server/wm/TaskOrganizerController$TaskOrganizerState;->-$$Nest$mremoveTask(Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerState;Lcom/android/server/wm/Task;Z)Z
 HSPLcom/android/server/wm/TaskOrganizerController$TaskOrganizerState;-><init>(Lcom/android/server/wm/TaskOrganizerController;Landroid/window/ITaskOrganizer;I)V
@@ -58814,9 +60706,9 @@
 PLcom/android/server/wm/TaskOrganizerController;->copySplashScreenView(Lcom/android/server/wm/Task;)Z
 HSPLcom/android/server/wm/TaskOrganizerController;->createRootTask(IILandroid/os/IBinder;)V
 HSPLcom/android/server/wm/TaskOrganizerController;->createRootTask(Lcom/android/server/wm/DisplayContent;ILandroid/os/IBinder;)Lcom/android/server/wm/Task;
-HSPLcom/android/server/wm/TaskOrganizerController;->dispatchPendingEvents()V+]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;]Lcom/android/server/wm/TaskOrganizerController;Lcom/android/server/wm/TaskOrganizerController;]Landroid/window/ITaskOrganizer;Landroid/window/ITaskOrganizer$Stub$Proxy;]Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerCallbacks;Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerCallbacks;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/TaskOrganizerController;->dispatchPendingEvents()V+]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;]Ljava/util/WeakHashMap;Ljava/util/WeakHashMap;]Lcom/android/server/wm/TaskOrganizerController;Lcom/android/server/wm/TaskOrganizerController;]Landroid/window/ITaskOrganizer;Landroid/window/ITaskOrganizer$Stub$Proxy;]Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerCallbacks;Lcom/android/server/wm/TaskOrganizerController$TaskOrganizerCallbacks;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/wm/TaskOrganizerController;->dispatchTaskInfoChanged(Lcom/android/server/wm/Task;Z)V
-HPLcom/android/server/wm/TaskOrganizerController;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HSPLcom/android/server/wm/TaskOrganizerController;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/wm/TaskOrganizerController;->getImeTarget(I)Landroid/window/WindowContainerToken;
 HSPLcom/android/server/wm/TaskOrganizerController;->getPendingLifecycleTaskEvent(Lcom/android/server/wm/Task;)Lcom/android/server/wm/TaskOrganizerController$PendingTaskEvent;+]Lcom/android/server/wm/TaskOrganizerController$PendingTaskEvent;Lcom/android/server/wm/TaskOrganizerController$PendingTaskEvent;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/wm/TaskOrganizerController;->getPendingTaskEvent(Lcom/android/server/wm/Task;I)Lcom/android/server/wm/TaskOrganizerController$PendingTaskEvent;
@@ -58826,7 +60718,7 @@
 HSPLcom/android/server/wm/TaskOrganizerController;->lambda$registerTaskOrganizer$1(Landroid/window/ITaskOrganizer;ILjava/util/ArrayList;)V
 PLcom/android/server/wm/TaskOrganizerController;->onAppSplashScreenViewRemoved(Lcom/android/server/wm/Task;)V
 HSPLcom/android/server/wm/TaskOrganizerController;->onTaskAppeared(Landroid/window/ITaskOrganizer;Lcom/android/server/wm/Task;)V
-HSPLcom/android/server/wm/TaskOrganizerController;->onTaskInfoChanged(Lcom/android/server/wm/Task;Z)V+]Lcom/android/server/wm/TaskOrganizerController;Lcom/android/server/wm/TaskOrganizerController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/TaskOrganizerController;->onTaskInfoChanged(Lcom/android/server/wm/Task;Z)V+]Lcom/android/server/wm/TaskOrganizerController;Lcom/android/server/wm/TaskOrganizerController;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/window/ITaskOrganizer;Landroid/window/ITaskOrganizer$Stub$Proxy;
 HPLcom/android/server/wm/TaskOrganizerController;->onTaskVanished(Landroid/window/ITaskOrganizer;Lcom/android/server/wm/Task;)V
 HPLcom/android/server/wm/TaskOrganizerController;->onTaskVanishedInternal(Landroid/window/ITaskOrganizer;Lcom/android/server/wm/Task;)V
 HSPLcom/android/server/wm/TaskOrganizerController;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
@@ -58858,10 +60750,10 @@
 PLcom/android/server/wm/TaskPersister;->$r8$lambda$usLLDXWS96hyMiD8IJHbKobcZRQ(Lcom/android/server/wm/Task;Lcom/android/server/wm/TaskPersister$TaskWriteQueueItem;)Z
 PLcom/android/server/wm/TaskPersister;->$r8$lambda$v8_mpqz03sWoUWRfn7yZHPXFaSM(Ljava/lang/String;Lcom/android/server/wm/TaskPersister$ImageWriteQueueItem;)Z
 PLcom/android/server/wm/TaskPersister;->-$$Nest$smcreateParentDirectory(Ljava/lang/String;)Z
-PLcom/android/server/wm/TaskPersister;->-$$Nest$smgetUserTasksDir(I)Ljava/io/File;
+HPLcom/android/server/wm/TaskPersister;->-$$Nest$smgetUserTasksDir(I)Ljava/io/File;
 HSPLcom/android/server/wm/TaskPersister;-><init>(Ljava/io/File;Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/RecentTasks;Lcom/android/server/wm/PersisterQueue;)V
 HPLcom/android/server/wm/TaskPersister;->createParentDirectory(Ljava/lang/String;)Z
-PLcom/android/server/wm/TaskPersister;->getImageFromWriteQueue(Ljava/lang/String;)Landroid/graphics/Bitmap;
+HPLcom/android/server/wm/TaskPersister;->getImageFromWriteQueue(Ljava/lang/String;)Landroid/graphics/Bitmap;
 PLcom/android/server/wm/TaskPersister;->getTaskDescriptionIcon(Ljava/lang/String;)Landroid/graphics/Bitmap;
 HPLcom/android/server/wm/TaskPersister;->getUserImagesDir(I)Ljava/io/File;
 HSPLcom/android/server/wm/TaskPersister;->getUserPersistedTaskIdsFile(I)Ljava/io/File;
@@ -58875,7 +60767,7 @@
 HPLcom/android/server/wm/TaskPersister;->removeObsoleteFiles(Landroid/util/ArraySet;[Ljava/io/File;)V+]Ljava/lang/String;Ljava/lang/String;]Ljava/io/File;Ljava/io/File;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 PLcom/android/server/wm/TaskPersister;->removeThumbnails(Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/TaskPersister;->restoreImage(Ljava/lang/String;)Landroid/graphics/Bitmap;
-PLcom/android/server/wm/TaskPersister;->restoreTasksForUserLocked(ILandroid/util/SparseBooleanArray;)Ljava/util/List;
+HPLcom/android/server/wm/TaskPersister;->restoreTasksForUserLocked(ILandroid/util/SparseBooleanArray;)Ljava/util/List;
 HPLcom/android/server/wm/TaskPersister;->saveImage(Landroid/graphics/Bitmap;Ljava/lang/String;)V
 PLcom/android/server/wm/TaskPersister;->taskIdToTask(ILjava/util/ArrayList;)Lcom/android/server/wm/Task;
 PLcom/android/server/wm/TaskPersister;->unloadUserDataFromMemory(I)V
@@ -58923,8 +60815,8 @@
 HPLcom/android/server/wm/TaskSnapshotCache$CacheEntry;-><init>(Landroid/window/TaskSnapshot;Lcom/android/server/wm/ActivityRecord;)V
 HSPLcom/android/server/wm/TaskSnapshotCache;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/TaskSnapshotLoader;)V
 HSPLcom/android/server/wm/TaskSnapshotCache;->clearRunningCache()V
-PLcom/android/server/wm/TaskSnapshotCache;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-HPLcom/android/server/wm/TaskSnapshotCache;->getSnapshot(IIZZ)Landroid/window/TaskSnapshot;
+HPLcom/android/server/wm/TaskSnapshotCache;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HPLcom/android/server/wm/TaskSnapshotCache;->getSnapshot(IIZZ)Landroid/window/TaskSnapshot;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Lcom/android/server/wm/TaskSnapshotCache;Lcom/android/server/wm/TaskSnapshotCache;
 HPLcom/android/server/wm/TaskSnapshotCache;->onAppDied(Lcom/android/server/wm/ActivityRecord;)V
 HPLcom/android/server/wm/TaskSnapshotCache;->onAppRemoved(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/TaskSnapshotCache;->onTaskRemoved(I)V
@@ -58936,63 +60828,63 @@
 HPLcom/android/server/wm/TaskSnapshotController$$ExternalSyntheticLambda1;-><init>()V
 HPLcom/android/server/wm/TaskSnapshotController$$ExternalSyntheticLambda1;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/TaskSnapshotController$$ExternalSyntheticLambda2;-><init>()V
-PLcom/android/server/wm/TaskSnapshotController$$ExternalSyntheticLambda2;->getSystemDirectoryForUser(I)Ljava/io/File;
+HPLcom/android/server/wm/TaskSnapshotController$$ExternalSyntheticLambda2;->getSystemDirectoryForUser(I)Ljava/io/File;
 HPLcom/android/server/wm/TaskSnapshotController$$ExternalSyntheticLambda3;-><init>()V
 HPLcom/android/server/wm/TaskSnapshotController$$ExternalSyntheticLambda3;->apply(Ljava/lang/Object;)Z
 HPLcom/android/server/wm/TaskSnapshotController$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/wm/TaskSnapshotController;ILcom/android/server/policy/WindowManagerPolicy$ScreenOffListener;)V
 HPLcom/android/server/wm/TaskSnapshotController$$ExternalSyntheticLambda4;->run()V
 HPLcom/android/server/wm/TaskSnapshotController$SystemBarBackgroundPainter;-><init>(IIILandroid/app/ActivityManager$TaskDescription;FLandroid/view/InsetsState;)V
-PLcom/android/server/wm/TaskSnapshotController$SystemBarBackgroundPainter;->drawDecors(Landroid/graphics/Canvas;)V
-PLcom/android/server/wm/TaskSnapshotController$SystemBarBackgroundPainter;->drawNavigationBarBackground(Landroid/graphics/Canvas;)V
-PLcom/android/server/wm/TaskSnapshotController$SystemBarBackgroundPainter;->drawStatusBarBackground(Landroid/graphics/Canvas;I)V
-PLcom/android/server/wm/TaskSnapshotController$SystemBarBackgroundPainter;->getStatusBarColorViewHeight()I
-PLcom/android/server/wm/TaskSnapshotController$SystemBarBackgroundPainter;->isNavigationBarColorViewVisible()Z
-PLcom/android/server/wm/TaskSnapshotController$SystemBarBackgroundPainter;->setInsets(Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/TaskSnapshotController$SystemBarBackgroundPainter;->drawDecors(Landroid/graphics/Canvas;)V
+HPLcom/android/server/wm/TaskSnapshotController$SystemBarBackgroundPainter;->drawNavigationBarBackground(Landroid/graphics/Canvas;)V
+HPLcom/android/server/wm/TaskSnapshotController$SystemBarBackgroundPainter;->drawStatusBarBackground(Landroid/graphics/Canvas;I)V
+HPLcom/android/server/wm/TaskSnapshotController$SystemBarBackgroundPainter;->getStatusBarColorViewHeight()I
+HPLcom/android/server/wm/TaskSnapshotController$SystemBarBackgroundPainter;->isNavigationBarColorViewVisible()Z
+HPLcom/android/server/wm/TaskSnapshotController$SystemBarBackgroundPainter;->setInsets(Landroid/graphics/Rect;)V
 HPLcom/android/server/wm/TaskSnapshotController;->$r8$lambda$1W8lCIrR8JunCBCcmwSrcjpQdsw(Lcom/android/server/wm/WindowState;)Z
 HPLcom/android/server/wm/TaskSnapshotController;->$r8$lambda$OFFcEEajJ0qGl6rUIxeXzis5W7U(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/TaskSnapshotController;->$r8$lambda$hMWhuFZVIpH-hIGGSn6ODLu6ny8(Lcom/android/server/wm/TaskSnapshotController;Lcom/android/server/wm/Task;)V
+HPLcom/android/server/wm/TaskSnapshotController;->$r8$lambda$hMWhuFZVIpH-hIGGSn6ODLu6ny8(Lcom/android/server/wm/TaskSnapshotController;Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/TaskSnapshotController;->$r8$lambda$lwASpKwcoFZ7xfJ_ZGsNUPV_Pyc(Lcom/android/server/wm/TaskSnapshotController;ILcom/android/server/policy/WindowManagerPolicy$ScreenOffListener;)V
 HSPLcom/android/server/wm/TaskSnapshotController;-><init>(Lcom/android/server/wm/WindowManagerService;)V
 HPLcom/android/server/wm/TaskSnapshotController;->addSkipClosingAppSnapshotTasks(Ljava/util/Set;)V
 HPLcom/android/server/wm/TaskSnapshotController;->captureTaskSnapshot(Lcom/android/server/wm/Task;Z)Landroid/window/TaskSnapshot;
 HPLcom/android/server/wm/TaskSnapshotController;->checkIfReadyToSnapshot(Lcom/android/server/wm/Task;)Landroid/util/Pair;
 HSPLcom/android/server/wm/TaskSnapshotController;->clearSnapshotCache()V
-PLcom/android/server/wm/TaskSnapshotController;->createImeSnapshot(Lcom/android/server/wm/Task;I)Landroid/view/SurfaceControl$ScreenshotHardwareBuffer;
+HPLcom/android/server/wm/TaskSnapshotController;->createImeSnapshot(Lcom/android/server/wm/Task;I)Landroid/view/SurfaceControl$ScreenshotHardwareBuffer;
 HPLcom/android/server/wm/TaskSnapshotController;->createTaskSnapshot(Lcom/android/server/wm/Task;FILandroid/graphics/Point;Landroid/window/TaskSnapshot$Builder;)Landroid/view/SurfaceControl$ScreenshotHardwareBuffer;
 HPLcom/android/server/wm/TaskSnapshotController;->createTaskSnapshot(Lcom/android/server/wm/Task;Landroid/window/TaskSnapshot$Builder;)Landroid/view/SurfaceControl$ScreenshotHardwareBuffer;
 HPLcom/android/server/wm/TaskSnapshotController;->drawAppThemeSnapshot(Lcom/android/server/wm/Task;)Landroid/window/TaskSnapshot;
 PLcom/android/server/wm/TaskSnapshotController;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HPLcom/android/server/wm/TaskSnapshotController;->findAppTokenForSnapshot(Lcom/android/server/wm/Task;)Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/TaskSnapshotController;->getAppearance(Lcom/android/server/wm/Task;)I
-HPLcom/android/server/wm/TaskSnapshotController;->getClosingTasks(Landroid/util/ArraySet;Landroid/util/ArraySet;)V
-HPLcom/android/server/wm/TaskSnapshotController;->getSnapshot(IIZZ)Landroid/window/TaskSnapshot;
+HSPLcom/android/server/wm/TaskSnapshotController;->getClosingTasks(Landroid/util/ArraySet;Landroid/util/ArraySet;)V
+HPLcom/android/server/wm/TaskSnapshotController;->getSnapshot(IIZZ)Landroid/window/TaskSnapshot;+]Lcom/android/server/wm/TaskSnapshotCache;Lcom/android/server/wm/TaskSnapshotCache;]Lcom/android/server/wm/TaskSnapshotPersister;Lcom/android/server/wm/TaskSnapshotPersister;
 HPLcom/android/server/wm/TaskSnapshotController;->getSnapshotMode(Lcom/android/server/wm/Task;)I
 HPLcom/android/server/wm/TaskSnapshotController;->getSystemBarInsets(Landroid/graphics/Rect;Landroid/view/InsetsState;)Landroid/graphics/Rect;
-HPLcom/android/server/wm/TaskSnapshotController;->handleClosingApps(Landroid/util/ArraySet;)V
+HSPLcom/android/server/wm/TaskSnapshotController;->handleClosingApps(Landroid/util/ArraySet;)V
 HPLcom/android/server/wm/TaskSnapshotController;->isAnimatingByRecents(Lcom/android/server/wm/Task;)Z
 HPLcom/android/server/wm/TaskSnapshotController;->isInvalidHardwareBuffer(Landroid/hardware/HardwareBuffer;)Z
 HPLcom/android/server/wm/TaskSnapshotController;->lambda$findAppTokenForSnapshot$0(Lcom/android/server/wm/WindowState;)Z
 HPLcom/android/server/wm/TaskSnapshotController;->lambda$findAppTokenForSnapshot$1(Lcom/android/server/wm/ActivityRecord;)Z
 HPLcom/android/server/wm/TaskSnapshotController;->lambda$screenTurningOff$2(ILcom/android/server/policy/WindowManagerPolicy$ScreenOffListener;)V
-PLcom/android/server/wm/TaskSnapshotController;->lambda$snapshotForSleeping$3(Lcom/android/server/wm/Task;)V
-HPLcom/android/server/wm/TaskSnapshotController;->notifyAppVisibilityChanged(Lcom/android/server/wm/ActivityRecord;Z)V
-PLcom/android/server/wm/TaskSnapshotController;->notifyTaskRemovedFromRecents(II)V
+HPLcom/android/server/wm/TaskSnapshotController;->lambda$snapshotForSleeping$3(Lcom/android/server/wm/Task;)V
+HSPLcom/android/server/wm/TaskSnapshotController;->notifyAppVisibilityChanged(Lcom/android/server/wm/ActivityRecord;Z)V
+HPLcom/android/server/wm/TaskSnapshotController;->notifyTaskRemovedFromRecents(II)V
 PLcom/android/server/wm/TaskSnapshotController;->onAppDied(Lcom/android/server/wm/ActivityRecord;)V
 HPLcom/android/server/wm/TaskSnapshotController;->onAppRemoved(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/TaskSnapshotController;->onTransitionStarting(Lcom/android/server/wm/DisplayContent;)V
+HSPLcom/android/server/wm/TaskSnapshotController;->onTransitionStarting(Lcom/android/server/wm/DisplayContent;)V
 HPLcom/android/server/wm/TaskSnapshotController;->prepareTaskSnapshot(Lcom/android/server/wm/Task;ILandroid/window/TaskSnapshot$Builder;)Z
 HPLcom/android/server/wm/TaskSnapshotController;->recordTaskSnapshot(Lcom/android/server/wm/Task;Z)V
-PLcom/android/server/wm/TaskSnapshotController;->removeObsoleteTaskFiles(Landroid/util/ArraySet;[I)V
+HPLcom/android/server/wm/TaskSnapshotController;->removeObsoleteTaskFiles(Landroid/util/ArraySet;[I)V
 HPLcom/android/server/wm/TaskSnapshotController;->removeSnapshotCache(I)V
 HPLcom/android/server/wm/TaskSnapshotController;->screenTurningOff(ILcom/android/server/policy/WindowManagerPolicy$ScreenOffListener;)V
 PLcom/android/server/wm/TaskSnapshotController;->setPersisterPaused(Z)V
-HPLcom/android/server/wm/TaskSnapshotController;->shouldDisableSnapshots()Z
+HSPLcom/android/server/wm/TaskSnapshotController;->shouldDisableSnapshots()Z
 HPLcom/android/server/wm/TaskSnapshotController;->snapshotForSleeping(I)V
 PLcom/android/server/wm/TaskSnapshotController;->snapshotImeFromAttachedTask(Lcom/android/server/wm/Task;)Landroid/view/SurfaceControl$ScreenshotHardwareBuffer;
 HPLcom/android/server/wm/TaskSnapshotController;->snapshotTask(Lcom/android/server/wm/Task;)Landroid/window/TaskSnapshot;
 HPLcom/android/server/wm/TaskSnapshotController;->snapshotTask(Lcom/android/server/wm/Task;I)Landroid/window/TaskSnapshot;
-HPLcom/android/server/wm/TaskSnapshotController;->snapshotTasks(Landroid/util/ArraySet;)V
-HPLcom/android/server/wm/TaskSnapshotController;->snapshotTasks(Landroid/util/ArraySet;Z)V
+HSPLcom/android/server/wm/TaskSnapshotController;->snapshotTasks(Landroid/util/ArraySet;)V
+HSPLcom/android/server/wm/TaskSnapshotController;->snapshotTasks(Landroid/util/ArraySet;Z)V
 HSPLcom/android/server/wm/TaskSnapshotController;->systemReady()V
 HSPLcom/android/server/wm/TaskSnapshotLoader;-><init>(Lcom/android/server/wm/TaskSnapshotPersister;)V
 PLcom/android/server/wm/TaskSnapshotLoader;->getLegacySnapshotConfig(IFZZ)Lcom/android/server/wm/TaskSnapshotLoader$PreRLegacySnapshotConfig;
@@ -59006,7 +60898,7 @@
 HPLcom/android/server/wm/TaskSnapshotPersister$RemoveObsoleteFilesQueueItem;->write()V+]Ljava/io/File;Ljava/io/File;]Lcom/android/server/wm/TaskSnapshotPersister$RemoveObsoleteFilesQueueItem;Lcom/android/server/wm/TaskSnapshotPersister$RemoveObsoleteFilesQueueItem;]Landroid/util/ArraySet;Landroid/util/ArraySet;
 PLcom/android/server/wm/TaskSnapshotPersister$StoreWriteQueueItem;->-$$Nest$fgetmTaskId(Lcom/android/server/wm/TaskSnapshotPersister$StoreWriteQueueItem;)I
 HPLcom/android/server/wm/TaskSnapshotPersister$StoreWriteQueueItem;-><init>(Lcom/android/server/wm/TaskSnapshotPersister;IILandroid/window/TaskSnapshot;)V
-HPLcom/android/server/wm/TaskSnapshotPersister$StoreWriteQueueItem;->isReady()Z
+HPLcom/android/server/wm/TaskSnapshotPersister$StoreWriteQueueItem;->isReady()Z+]Lcom/android/server/pm/UserManagerInternal;Lcom/android/server/pm/UserManagerService$LocalService;
 HPLcom/android/server/wm/TaskSnapshotPersister$StoreWriteQueueItem;->onDequeuedLocked()V
 HPLcom/android/server/wm/TaskSnapshotPersister$StoreWriteQueueItem;->onQueuedLocked()V
 HPLcom/android/server/wm/TaskSnapshotPersister$StoreWriteQueueItem;->write()V
@@ -59023,7 +60915,7 @@
 HSPLcom/android/server/wm/TaskSnapshotPersister;->-$$Nest$fgetmPaused(Lcom/android/server/wm/TaskSnapshotPersister;)Z
 PLcom/android/server/wm/TaskSnapshotPersister;->-$$Nest$fgetmPersistedTaskIdsSinceLastRemoveObsolete(Lcom/android/server/wm/TaskSnapshotPersister;)Landroid/util/ArraySet;
 HPLcom/android/server/wm/TaskSnapshotPersister;->-$$Nest$fgetmStoreQueueItems(Lcom/android/server/wm/TaskSnapshotPersister;)Ljava/util/ArrayDeque;
-PLcom/android/server/wm/TaskSnapshotPersister;->-$$Nest$fgetmUserManagerInternal(Lcom/android/server/wm/TaskSnapshotPersister;)Lcom/android/server/pm/UserManagerInternal;
+HPLcom/android/server/wm/TaskSnapshotPersister;->-$$Nest$fgetmUserManagerInternal(Lcom/android/server/wm/TaskSnapshotPersister;)Lcom/android/server/pm/UserManagerInternal;
 HSPLcom/android/server/wm/TaskSnapshotPersister;->-$$Nest$fgetmWriteQueue(Lcom/android/server/wm/TaskSnapshotPersister;)Ljava/util/ArrayDeque;
 HSPLcom/android/server/wm/TaskSnapshotPersister;->-$$Nest$fputmQueueIdling(Lcom/android/server/wm/TaskSnapshotPersister;Z)V
 PLcom/android/server/wm/TaskSnapshotPersister;->-$$Nest$mcreateDirectory(Lcom/android/server/wm/TaskSnapshotPersister;I)Z
@@ -59031,7 +60923,7 @@
 PLcom/android/server/wm/TaskSnapshotPersister;->-$$Nest$mgetDirectory(Lcom/android/server/wm/TaskSnapshotPersister;I)Ljava/io/File;
 HSPLcom/android/server/wm/TaskSnapshotPersister;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/TaskSnapshotPersister$DirectoryResolver;)V
 HPLcom/android/server/wm/TaskSnapshotPersister;->createDirectory(I)Z
-PLcom/android/server/wm/TaskSnapshotPersister;->deleteSnapshot(II)V
+HPLcom/android/server/wm/TaskSnapshotPersister;->deleteSnapshot(II)V
 PLcom/android/server/wm/TaskSnapshotPersister;->enableLowResSnapshots()Z
 HPLcom/android/server/wm/TaskSnapshotPersister;->ensureStoreQueueDepthLocked()V
 HPLcom/android/server/wm/TaskSnapshotPersister;->getDirectory(I)Ljava/io/File;
@@ -59047,12 +60939,14 @@
 HPLcom/android/server/wm/TaskSnapshotPersister;->use16BitFormat()Z
 HPLcom/android/server/wm/TaskSystemBarsListenerController$$ExternalSyntheticLambda0;-><init>(Ljava/util/HashSet;IZZ)V
 HPLcom/android/server/wm/TaskSystemBarsListenerController$$ExternalSyntheticLambda0;->run()V
-PLcom/android/server/wm/TaskSystemBarsListenerController;->$r8$lambda$0eiHwD9gWMW1p1JvymRanBSUxTg(Ljava/util/HashSet;IZZ)V
+HPLcom/android/server/wm/TaskSystemBarsListenerController;->$r8$lambda$0eiHwD9gWMW1p1JvymRanBSUxTg(Ljava/util/HashSet;IZZ)V
 HSPLcom/android/server/wm/TaskSystemBarsListenerController;-><init>()V
 HPLcom/android/server/wm/TaskSystemBarsListenerController;->dispatchTransientSystemBarVisibilityChanged(IZZ)V
 HPLcom/android/server/wm/TaskSystemBarsListenerController;->lambda$dispatchTransientSystemBarVisibilityChanged$0(Ljava/util/HashSet;IZZ)V
+PLcom/android/server/wm/TaskSystemBarsListenerController;->registerListener(Lcom/android/server/wm/WindowManagerInternal$TaskSystemBarsListener;)V
+PLcom/android/server/wm/TaskSystemBarsListenerController;->unregisterListener(Lcom/android/server/wm/WindowManagerInternal$TaskSystemBarsListener;)V
 HSPLcom/android/server/wm/TaskTapPointerEventListener;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;)V
-HPLcom/android/server/wm/TaskTapPointerEventListener;->onPointerEvent(Landroid/view/MotionEvent;)V+]Landroid/graphics/Region;Landroid/graphics/Region;]Lcom/android/server/wm/TaskPositioningController;Lcom/android/server/wm/TaskPositioningController;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;]Lcom/android/server/wm/TaskTapPointerEventListener;Lcom/android/server/wm/TaskTapPointerEventListener;
+HPLcom/android/server/wm/TaskTapPointerEventListener;->onPointerEvent(Landroid/view/MotionEvent;)V+]Landroid/graphics/Region;Landroid/graphics/Region;]Lcom/android/server/wm/TaskPositioningController;Lcom/android/server/wm/TaskPositioningController;]Landroid/view/MotionEvent;Landroid/view/MotionEvent;]Lcom/android/server/wm/TaskTapPointerEventListener;Lcom/android/server/wm/TaskTapPointerEventListener;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 PLcom/android/server/wm/TaskTapPointerEventListener;->restorePointerIcon(II)V
 HSPLcom/android/server/wm/TaskTapPointerEventListener;->setTouchExcludeRegion(Landroid/graphics/Region;)V+]Landroid/graphics/Region;Landroid/graphics/Region;
 HSPLcom/android/server/wm/TransitionController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/TransitionController;)V
@@ -59060,15 +60954,15 @@
 HSPLcom/android/server/wm/TransitionController$TransitionMetricsReporter;-><init>()V
 HSPLcom/android/server/wm/TransitionController;-><clinit>()V
 HSPLcom/android/server/wm/TransitionController;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/TaskSnapshotController;)V
-HPLcom/android/server/wm/TransitionController;->collect(Lcom/android/server/wm/WindowContainer;)V
-HPLcom/android/server/wm/TransitionController;->collectExistenceChange(Lcom/android/server/wm/WindowContainer;)V
+HSPLcom/android/server/wm/TransitionController;->collect(Lcom/android/server/wm/WindowContainer;)V
+HSPLcom/android/server/wm/TransitionController;->collectExistenceChange(Lcom/android/server/wm/WindowContainer;)V
 HPLcom/android/server/wm/TransitionController;->getCollectingTransitionType()I
-HPLcom/android/server/wm/TransitionController;->getTransitionPlayer()Landroid/window/ITransitionPlayer;
+HSPLcom/android/server/wm/TransitionController;->getTransitionPlayer()Landroid/window/ITransitionPlayer;
 HPLcom/android/server/wm/TransitionController;->inRecentsTransition(Lcom/android/server/wm/WindowContainer;)Z
-HPLcom/android/server/wm/TransitionController;->inTransition()Z+]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;
+HSPLcom/android/server/wm/TransitionController;->inTransition()Z+]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;
 HSPLcom/android/server/wm/TransitionController;->inTransition(Lcom/android/server/wm/WindowContainer;)Z+]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/wm/TransitionController;->isCollecting()Z
-HPLcom/android/server/wm/TransitionController;->isCollecting(Lcom/android/server/wm/WindowContainer;)Z
+HSPLcom/android/server/wm/TransitionController;->isCollecting(Lcom/android/server/wm/WindowContainer;)Z
 HSPLcom/android/server/wm/TransitionController;->isPlaying()Z+]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/wm/TransitionController;->isShellTransitionsEnabled()Z
 HPLcom/android/server/wm/TransitionController;->isTransientLaunch(Lcom/android/server/wm/ActivityRecord;)Z+]Ljava/util/ArrayList;Ljava/util/ArrayList;
@@ -59078,18 +60972,29 @@
 PLcom/android/server/wm/TransitionController;->requestTransitionIfNeeded(IILcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowContainer;)Lcom/android/server/wm/Transition;
 HPLcom/android/server/wm/TransitionController;->requestTransitionIfNeeded(IILcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowContainer;Landroid/window/RemoteTransition;Landroid/window/TransitionRequestInfo$DisplayChange;)Lcom/android/server/wm/Transition;
 PLcom/android/server/wm/TransitionController;->setOverrideAnimation(Landroid/window/TransitionInfo$AnimationOptions;Landroid/os/IRemoteCallback;Landroid/os/IRemoteCallback;)V
-HPLcom/android/server/wm/TransitionController;->setReady(Lcom/android/server/wm/WindowContainer;)V
-HPLcom/android/server/wm/TransitionController;->setReady(Lcom/android/server/wm/WindowContainer;Z)V
+HSPLcom/android/server/wm/TransitionController;->setReady(Lcom/android/server/wm/WindowContainer;)V
+HSPLcom/android/server/wm/TransitionController;->setReady(Lcom/android/server/wm/WindowContainer;Z)V
 PLcom/android/server/wm/TransitionController;->unregisterLegacyListener(Lcom/android/server/wm/WindowManagerInternal$AppTransitionListener;)V
 HSPLcom/android/server/wm/TransitionController;->useShellTransitionsRotation()Z
+PLcom/android/server/wm/TrustedOverlayHost;-><init>(Lcom/android/server/wm/WindowManagerService;)V
+PLcom/android/server/wm/TrustedOverlayHost;->addOverlay(Landroid/view/SurfaceControlViewHost$SurfacePackage;Landroid/view/SurfaceControl;)V
+PLcom/android/server/wm/TrustedOverlayHost;->dispatchConfigurationChanged(Landroid/content/res/Configuration;)V
+PLcom/android/server/wm/TrustedOverlayHost;->dispatchDetachedFromWindow()V
+HPLcom/android/server/wm/TrustedOverlayHost;->dispatchInsetsChanged(Landroid/view/InsetsState;Landroid/graphics/Rect;)V
+PLcom/android/server/wm/TrustedOverlayHost;->release()V
+PLcom/android/server/wm/TrustedOverlayHost;->removeOverlay(Landroid/view/SurfaceControlViewHost$SurfacePackage;)Z
+PLcom/android/server/wm/TrustedOverlayHost;->requireOverlaySurfaceControl()V
+HPLcom/android/server/wm/TrustedOverlayHost;->setLayer(Landroid/view/SurfaceControl$Transaction;I)V
+PLcom/android/server/wm/TrustedOverlayHost;->setParent(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V
 HSPLcom/android/server/wm/UnknownAppVisibilityController;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;)V
-HPLcom/android/server/wm/UnknownAppVisibilityController;->allResolved()Z
+HSPLcom/android/server/wm/UnknownAppVisibilityController;->allResolved()Z
 HPLcom/android/server/wm/UnknownAppVisibilityController;->appRemovedOrHidden(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/UnknownAppVisibilityController;->clear()V
+HSPLcom/android/server/wm/UnknownAppVisibilityController;->clear()V
 PLcom/android/server/wm/UnknownAppVisibilityController;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-HPLcom/android/server/wm/UnknownAppVisibilityController;->notifyAppResumedFinished(Lcom/android/server/wm/ActivityRecord;)V
+PLcom/android/server/wm/UnknownAppVisibilityController;->getDebugMessage()Ljava/lang/String;
+HSPLcom/android/server/wm/UnknownAppVisibilityController;->notifyAppResumedFinished(Lcom/android/server/wm/ActivityRecord;)V
 HPLcom/android/server/wm/UnknownAppVisibilityController;->notifyLaunched(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/UnknownAppVisibilityController;->notifyRelayouted(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/UnknownAppVisibilityController;->notifyRelayouted(Lcom/android/server/wm/ActivityRecord;)V+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/lang/Integer;Ljava/lang/Integer;]Lcom/android/server/wm/UnknownAppVisibilityController;Lcom/android/server/wm/UnknownAppVisibilityController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HPLcom/android/server/wm/UnknownAppVisibilityController;->notifyVisibilitiesUpdated()V
 PLcom/android/server/wm/ViewServer$ViewServerWorker;-><init>(Lcom/android/server/wm/ViewServer;Ljava/net/Socket;)V
 PLcom/android/server/wm/ViewServer$ViewServerWorker;->focusChanged()V
@@ -59098,30 +61003,32 @@
 PLcom/android/server/wm/ViewServer$ViewServerWorker;->windowsChanged()V
 PLcom/android/server/wm/ViewServer;->-$$Nest$fgetmWindowManager(Lcom/android/server/wm/ViewServer;)Lcom/android/server/wm/WindowManagerService;
 PLcom/android/server/wm/ViewServer;-><init>(Lcom/android/server/wm/WindowManagerService;I)V
+PLcom/android/server/wm/ViewServer;->isRunning()Z
 PLcom/android/server/wm/ViewServer;->run()V
 PLcom/android/server/wm/ViewServer;->start()Z
+PLcom/android/server/wm/ViewServer;->stop()Z
 PLcom/android/server/wm/VisibleActivityProcessTracker$$ExternalSyntheticLambda0;-><init>()V
 PLcom/android/server/wm/VisibleActivityProcessTracker$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
-HPLcom/android/server/wm/VisibleActivityProcessTracker$CpuTimeRecord;-><init>(Lcom/android/server/wm/VisibleActivityProcessTracker;Lcom/android/server/wm/WindowProcessController;)V
-HPLcom/android/server/wm/VisibleActivityProcessTracker$CpuTimeRecord;->run()V
+HSPLcom/android/server/wm/VisibleActivityProcessTracker$CpuTimeRecord;-><init>(Lcom/android/server/wm/VisibleActivityProcessTracker;Lcom/android/server/wm/WindowProcessController;)V
+HSPLcom/android/server/wm/VisibleActivityProcessTracker$CpuTimeRecord;->run()V
 HSPLcom/android/server/wm/VisibleActivityProcessTracker;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;)V
-PLcom/android/server/wm/VisibleActivityProcessTracker;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HSPLcom/android/server/wm/VisibleActivityProcessTracker;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/wm/VisibleActivityProcessTracker;->hasResumedActivity(I)Z
-HPLcom/android/server/wm/VisibleActivityProcessTracker;->hasVisibleActivity(I)Z
-HPLcom/android/server/wm/VisibleActivityProcessTracker;->match(ILjava/util/function/Predicate;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/function/Predicate;Lcom/android/server/wm/VisibleActivityProcessTracker$$ExternalSyntheticLambda0;
+HSPLcom/android/server/wm/VisibleActivityProcessTracker;->hasVisibleActivity(I)Z+]Lcom/android/server/wm/VisibleActivityProcessTracker;Lcom/android/server/wm/VisibleActivityProcessTracker;
+HSPLcom/android/server/wm/VisibleActivityProcessTracker;->match(ILjava/util/function/Predicate;)Z+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Ljava/util/function/Predicate;Lcom/android/server/wm/VisibleActivityProcessTracker$$ExternalSyntheticLambda0;
 HPLcom/android/server/wm/VisibleActivityProcessTracker;->onActivityResumedWhileVisible(Lcom/android/server/wm/WindowProcessController;)V
 HPLcom/android/server/wm/VisibleActivityProcessTracker;->onAllActivitiesInvisible(Lcom/android/server/wm/WindowProcessController;)V
-HPLcom/android/server/wm/VisibleActivityProcessTracker;->onAnyActivityVisible(Lcom/android/server/wm/WindowProcessController;)V
+HSPLcom/android/server/wm/VisibleActivityProcessTracker;->onAnyActivityVisible(Lcom/android/server/wm/WindowProcessController;)V
 HSPLcom/android/server/wm/VisibleActivityProcessTracker;->removeProcess(Lcom/android/server/wm/WindowProcessController;)Lcom/android/server/wm/VisibleActivityProcessTracker$CpuTimeRecord;+]Landroid/util/ArrayMap;Landroid/util/ArrayMap;
 HSPLcom/android/server/wm/VrController$1;-><init>(Lcom/android/server/wm/VrController;)V
 HSPLcom/android/server/wm/VrController;-><clinit>()V
 HSPLcom/android/server/wm/VrController;-><init>(Ljava/lang/Object;)V
 PLcom/android/server/wm/VrController;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-PLcom/android/server/wm/VrController;->isInterestingToSchedGroup()Z
+HSPLcom/android/server/wm/VrController;->isInterestingToSchedGroup()Z
 HSPLcom/android/server/wm/VrController;->onSystemReady()V
-HPLcom/android/server/wm/VrController;->onVrModeChanged(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/VrController;->onVrModeChanged(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/VrController;->shouldDisableNonVrUiLocked()Z
-PLcom/android/server/wm/VrController;->toString()Ljava/lang/String;
+HSPLcom/android/server/wm/VrController;->toString()Ljava/lang/String;
 HPLcom/android/server/wm/WallpaperAnimationAdapter$$ExternalSyntheticLambda0;-><init>(JJLjava/util/function/Consumer;Ljava/util/ArrayList;Ljava/util/ArrayList;)V
 HPLcom/android/server/wm/WallpaperAnimationAdapter$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/WallpaperAnimationAdapter;->$r8$lambda$pFt1sM34mQb-FFZsZckZ6IVTj_M(JJLjava/util/function/Consumer;Ljava/util/ArrayList;Ljava/util/ArrayList;Lcom/android/server/wm/WallpaperWindowToken;)V
@@ -59129,52 +61036,53 @@
 HPLcom/android/server/wm/WallpaperAnimationAdapter;->createRemoteAnimationTarget()Landroid/view/RemoteAnimationTarget;
 PLcom/android/server/wm/WallpaperAnimationAdapter;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/wm/WallpaperAnimationAdapter;->dumpDebug(Landroid/util/proto/ProtoOutputStream;)V
-PLcom/android/server/wm/WallpaperAnimationAdapter;->getLastAnimationType()I
+HPLcom/android/server/wm/WallpaperAnimationAdapter;->getLastAnimationType()I
 PLcom/android/server/wm/WallpaperAnimationAdapter;->getLeash()Landroid/view/SurfaceControl;
-PLcom/android/server/wm/WallpaperAnimationAdapter;->getLeashFinishedCallback()Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;
+HPLcom/android/server/wm/WallpaperAnimationAdapter;->getLeashFinishedCallback()Lcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;
+PLcom/android/server/wm/WallpaperAnimationAdapter;->getToken()Lcom/android/server/wm/WallpaperWindowToken;
 HPLcom/android/server/wm/WallpaperAnimationAdapter;->lambda$startWallpaperAnimations$0(JJLjava/util/function/Consumer;Ljava/util/ArrayList;Ljava/util/ArrayList;Lcom/android/server/wm/WallpaperWindowToken;)V
 PLcom/android/server/wm/WallpaperAnimationAdapter;->onAnimationCancelled(Landroid/view/SurfaceControl;)V
-HPLcom/android/server/wm/WallpaperAnimationAdapter;->shouldStartWallpaperAnimation(Lcom/android/server/wm/DisplayContent;)Z
+HSPLcom/android/server/wm/WallpaperAnimationAdapter;->shouldStartWallpaperAnimation(Lcom/android/server/wm/DisplayContent;)Z
 HPLcom/android/server/wm/WallpaperAnimationAdapter;->startAnimation(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl$Transaction;ILcom/android/server/wm/SurfaceAnimator$OnAnimationFinishedCallback;)V
 HPLcom/android/server/wm/WallpaperAnimationAdapter;->startWallpaperAnimations(Lcom/android/server/wm/DisplayContent;JJLjava/util/function/Consumer;Ljava/util/ArrayList;)[Landroid/view/RemoteAnimationTarget;
 PLcom/android/server/wm/WallpaperController$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/WallpaperController;)V
 PLcom/android/server/wm/WallpaperController$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/WallpaperController$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/wm/WallpaperController;)V
-HPLcom/android/server/wm/WallpaperController$$ExternalSyntheticLambda1;->apply(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/WallpaperController$$ExternalSyntheticLambda1;->apply(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/WallpaperController$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/wm/WallpaperController;)V
 HPLcom/android/server/wm/WallpaperController$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/WallpaperController$$ExternalSyntheticLambda3;-><init>(Lcom/android/server/wm/WindowState;)V
-PLcom/android/server/wm/WallpaperController$$ExternalSyntheticLambda3;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/WallpaperController$$ExternalSyntheticLambda3;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;-><init>()V
 HSPLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;-><init>(Lcom/android/server/wm/WallpaperController$FindWallpaperTargetResult-IA;)V
-HPLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;->reset()V
-PLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;->setIsWallpaperTargetForLetterbox(Z)V
+HSPLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;->reset()V
+HSPLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;->setIsWallpaperTargetForLetterbox(Z)V
 PLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;->setTopWallpaper(Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;->setUseTopWallpaperAsTarget(Z)V
-PLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;->setWallpaperTarget(Lcom/android/server/wm/WindowState;)V
+HSPLcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;->setWallpaperTarget(Lcom/android/server/wm/WindowState;)V
 HPLcom/android/server/wm/WallpaperController;->$r8$lambda$D7w0PRblSwSAeTCuh4JaH2hP_6s(Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/WallpaperController;->$r8$lambda$Etr_DTxnsDybFGN2AsLZlLMCbd4(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)Z
 PLcom/android/server/wm/WallpaperController;->$r8$lambda$Oh0Wp7xG-k2KXmAyef7cCp2EhUA(Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WindowState;)Z
-HPLcom/android/server/wm/WallpaperController;->$r8$lambda$pu1QMhn9RZJIEjCsVJQF6nLiBNA(Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WindowState;)Z
+HSPLcom/android/server/wm/WallpaperController;->$r8$lambda$pu1QMhn9RZJIEjCsVJQF6nLiBNA(Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WindowState;)Z
 HSPLcom/android/server/wm/WallpaperController;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/DisplayContent;)V
-PLcom/android/server/wm/WallpaperController;->addWallpaperToken(Lcom/android/server/wm/WallpaperWindowToken;)V
-HPLcom/android/server/wm/WallpaperController;->adjustWallpaperWindows()V
-HPLcom/android/server/wm/WallpaperController;->adjustWallpaperWindowsForAppTransitionIfNeeded(Landroid/util/ArraySet;)V
+HSPLcom/android/server/wm/WallpaperController;->addWallpaperToken(Lcom/android/server/wm/WallpaperWindowToken;)V
+HSPLcom/android/server/wm/WallpaperController;->adjustWallpaperWindows()V+]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;
+HSPLcom/android/server/wm/WallpaperController;->adjustWallpaperWindowsForAppTransitionIfNeeded(Landroid/util/ArraySet;)V
 PLcom/android/server/wm/WallpaperController;->clearLastWallpaperTimeoutTime()V
-HPLcom/android/server/wm/WallpaperController;->computeLastWallpaperZoomOut()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;
-HPLcom/android/server/wm/WallpaperController;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-HPLcom/android/server/wm/WallpaperController;->findWallpaperTarget()V
+HSPLcom/android/server/wm/WallpaperController;->computeLastWallpaperZoomOut()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;
+HSPLcom/android/server/wm/WallpaperController;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HSPLcom/android/server/wm/WallpaperController;->findWallpaperTarget()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;Lcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 PLcom/android/server/wm/WallpaperController;->getTopVisibleWallpaper()Lcom/android/server/wm/WindowState;
-HPLcom/android/server/wm/WallpaperController;->getWallpaperTarget()Lcom/android/server/wm/WindowState;
-HPLcom/android/server/wm/WallpaperController;->hideDeferredWallpapersIfNeededLegacy()V
+HSPLcom/android/server/wm/WallpaperController;->getWallpaperTarget()Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/WallpaperController;->hideDeferredWallpapersIfNeededLegacy()V
 HPLcom/android/server/wm/WallpaperController;->hideWallpapers(Lcom/android/server/wm/WindowState;)V+]Lcom/android/server/wm/WallpaperWindowToken;Lcom/android/server/wm/WallpaperWindowToken;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HSPLcom/android/server/wm/WallpaperController;->isBelowWallpaperTarget(Lcom/android/server/wm/WindowState;)Z
-PLcom/android/server/wm/WallpaperController;->isFullscreen(Landroid/view/WindowManager$LayoutParams;)Z
-HPLcom/android/server/wm/WallpaperController;->isWallpaperTarget(Lcom/android/server/wm/WindowState;)Z
-HPLcom/android/server/wm/WallpaperController;->isWallpaperTargetAnimating()Z
+HPLcom/android/server/wm/WallpaperController;->isFullscreen(Landroid/view/WindowManager$LayoutParams;)Z
+HSPLcom/android/server/wm/WallpaperController;->isWallpaperTarget(Lcom/android/server/wm/WindowState;)Z
+HSPLcom/android/server/wm/WallpaperController;->isWallpaperTargetAnimating()Z
 HSPLcom/android/server/wm/WallpaperController;->isWallpaperVisible()Z+]Lcom/android/server/wm/WallpaperWindowToken;Lcom/android/server/wm/WallpaperWindowToken;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 PLcom/android/server/wm/WallpaperController;->lambda$getTopVisibleWallpaper$3(Lcom/android/server/wm/WindowState;)Z
-HPLcom/android/server/wm/WallpaperController;->lambda$new$0(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/AnimationAdapter;Lcom/android/server/wm/LocalAnimationAdapter;,Lcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;,Lcom/android/server/wm/RemoteAnimationController$RemoteAnimationAdapterWrapper;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/wm/RecentsAnimationController;Lcom/android/server/wm/RecentsAnimationController;]Lcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;Lcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/WallpaperController;->lambda$new$0(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/AnimationAdapter;Lcom/android/server/wm/LocalAnimationAdapter;,Lcom/android/server/wm/RecentsAnimationController$TaskAnimationAdapter;,Lcom/android/server/wm/RemoteAnimationController$RemoteAnimationAdapterWrapper;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Lcom/android/server/wm/RecentsAnimationController;Lcom/android/server/wm/RecentsAnimationController;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;Lcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/WallpaperController;->lambda$new$1(Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/WallpaperController;->lambda$updateWallpaperWindowsTarget$2(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)Z
 PLcom/android/server/wm/WallpaperController;->mirrorWallpaperSurface()Landroid/view/SurfaceControl;
@@ -59187,32 +61095,32 @@
 HPLcom/android/server/wm/WallpaperController;->setWindowWallpaperPosition(Lcom/android/server/wm/WindowState;FFFF)V
 PLcom/android/server/wm/WallpaperController;->shouldWallpaperBeVisible(Lcom/android/server/wm/WindowState;)Z
 HPLcom/android/server/wm/WallpaperController;->updateWallpaperOffset(Lcom/android/server/wm/WindowState;Z)Z+]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/lang/Object;Lcom/android/server/wm/WindowManagerGlobalLock;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/view/IWindow;Landroid/view/IWindow$Stub$Proxy;
-HPLcom/android/server/wm/WallpaperController;->updateWallpaperOffsetLocked(Lcom/android/server/wm/WindowState;Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/WallpaperWindowToken;Lcom/android/server/wm/WallpaperWindowToken;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
-HPLcom/android/server/wm/WallpaperController;->updateWallpaperTokens(Z)V+]Lcom/android/server/wm/WallpaperWindowToken;Lcom/android/server/wm/WallpaperWindowToken;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/WallpaperController;->updateWallpaperOffsetLocked(Lcom/android/server/wm/WindowState;Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/WallpaperWindowToken;Lcom/android/server/wm/WallpaperWindowToken;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/WallpaperController;->updateWallpaperTokens(Z)V+]Lcom/android/server/wm/WallpaperWindowToken;Lcom/android/server/wm/WallpaperWindowToken;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 PLcom/android/server/wm/WallpaperController;->updateWallpaperVisibility()V
-HPLcom/android/server/wm/WallpaperController;->updateWallpaperWindowsTarget(Lcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;)V
+HSPLcom/android/server/wm/WallpaperController;->updateWallpaperWindowsTarget(Lcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;Lcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;
 HPLcom/android/server/wm/WallpaperController;->wallpaperOffsetsComplete(Landroid/os/IBinder;)V
 HPLcom/android/server/wm/WallpaperController;->wallpaperTransitionReady()Z
 HPLcom/android/server/wm/WallpaperController;->zoomOutToScale(F)F
 HSPLcom/android/server/wm/WallpaperVisibilityListeners;-><init>()V
-HPLcom/android/server/wm/WallpaperVisibilityListeners;->notifyWallpaperVisibilityChanged(Lcom/android/server/wm/DisplayContent;)V
+HSPLcom/android/server/wm/WallpaperVisibilityListeners;->notifyWallpaperVisibilityChanged(Lcom/android/server/wm/DisplayContent;)V
 PLcom/android/server/wm/WallpaperVisibilityListeners;->registerWallpaperVisibilityListener(Landroid/view/IWallpaperVisibilityListener;I)V
 PLcom/android/server/wm/WallpaperVisibilityListeners;->unregisterWallpaperVisibilityListener(Landroid/view/IWallpaperVisibilityListener;I)V
-PLcom/android/server/wm/WallpaperWindowToken;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/os/IBinder;ZLcom/android/server/wm/DisplayContent;ZLandroid/os/Bundle;)V
+HSPLcom/android/server/wm/WallpaperWindowToken;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/os/IBinder;ZLcom/android/server/wm/DisplayContent;ZLandroid/os/Bundle;)V
 PLcom/android/server/wm/WallpaperWindowToken;->asWallpaperToken()Lcom/android/server/wm/WallpaperWindowToken;
-HPLcom/android/server/wm/WallpaperWindowToken;->commitVisibility(Z)V+]Lcom/android/server/wm/WallpaperWindowToken;Lcom/android/server/wm/WallpaperWindowToken;
-PLcom/android/server/wm/WallpaperWindowToken;->forAllWallpaperWindows(Ljava/util/function/Consumer;)V
+HSPLcom/android/server/wm/WallpaperWindowToken;->commitVisibility(Z)V+]Lcom/android/server/wm/WallpaperWindowToken;Lcom/android/server/wm/WallpaperWindowToken;
+HPLcom/android/server/wm/WallpaperWindowToken;->forAllWallpaperWindows(Ljava/util/function/Consumer;)V
 HPLcom/android/server/wm/WallpaperWindowToken;->hasVisibleNotDrawnWallpaper()Z
-HPLcom/android/server/wm/WallpaperWindowToken;->isVisible()Z+]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WallpaperWindowToken;
-HPLcom/android/server/wm/WallpaperWindowToken;->isVisibleRequested()Z
-PLcom/android/server/wm/WallpaperWindowToken;->sendWindowWallpaperCommand(Ljava/lang/String;IIILandroid/os/Bundle;Z)V
+HSPLcom/android/server/wm/WallpaperWindowToken;->isVisible()Z+]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WallpaperWindowToken;
+HSPLcom/android/server/wm/WallpaperWindowToken;->isVisibleRequested()Z
+HPLcom/android/server/wm/WallpaperWindowToken;->sendWindowWallpaperCommand(Ljava/lang/String;IIILandroid/os/Bundle;Z)V
 PLcom/android/server/wm/WallpaperWindowToken;->setExiting(Z)V
-HPLcom/android/server/wm/WallpaperWindowToken;->setVisibility(Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WallpaperWindowToken;]Lcom/android/server/wm/WallpaperWindowToken;Lcom/android/server/wm/WallpaperWindowToken;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;
-HPLcom/android/server/wm/WallpaperWindowToken;->setVisible(Z)V
-HPLcom/android/server/wm/WallpaperWindowToken;->setVisibleRequested(Z)V
-HPLcom/android/server/wm/WallpaperWindowToken;->toString()Ljava/lang/String;
-HPLcom/android/server/wm/WallpaperWindowToken;->updateWallpaperOffset(Z)V+]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-HPLcom/android/server/wm/WallpaperWindowToken;->updateWallpaperWindows(Z)Z
+HSPLcom/android/server/wm/WallpaperWindowToken;->setVisibility(Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WallpaperWindowToken;]Lcom/android/server/wm/WallpaperWindowToken;Lcom/android/server/wm/WallpaperWindowToken;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;
+HSPLcom/android/server/wm/WallpaperWindowToken;->setVisible(Z)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WallpaperWindowToken;
+HSPLcom/android/server/wm/WallpaperWindowToken;->setVisibleRequested(Z)V
+HSPLcom/android/server/wm/WallpaperWindowToken;->toString()Ljava/lang/String;
+HSPLcom/android/server/wm/WallpaperWindowToken;->updateWallpaperOffset(Z)V+]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/WallpaperWindowToken;->updateWallpaperWindows(Z)Z+]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/RecentsAnimationController;Lcom/android/server/wm/RecentsAnimationController;]Lcom/android/server/wm/WallpaperWindowToken;Lcom/android/server/wm/WallpaperWindowToken;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/WindowAnimationSpec$$ExternalSyntheticLambda0;-><init>()V
 HPLcom/android/server/wm/WindowAnimationSpec$$ExternalSyntheticLambda0;->get()Ljava/lang/Object;
 HPLcom/android/server/wm/WindowAnimationSpec$TmpValues;-><init>()V
@@ -59222,13 +61130,13 @@
 HPLcom/android/server/wm/WindowAnimationSpec;-><init>(Landroid/view/animation/Animation;Landroid/graphics/Point;ZF)V
 HPLcom/android/server/wm/WindowAnimationSpec;->accountForExtension(Landroid/view/animation/Transformation;Landroid/graphics/Rect;)V+]Landroid/graphics/Insets;Landroid/graphics/Insets;]Landroid/view/animation/Transformation;Landroid/view/animation/Transformation;]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HPLcom/android/server/wm/WindowAnimationSpec;->apply(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;J)V+]Lcom/android/server/wm/WindowAnimationSpec;Lcom/android/server/wm/WindowAnimationSpec;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/view/animation/Transformation;Landroid/view/animation/Transformation;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Ljava/lang/ThreadLocal;Ljava/lang/ThreadLocal$SuppliedThreadLocal;]Landroid/view/animation/Animation;Landroid/view/animation/AnimationSet;,Landroid/view/animation/TranslateAnimation;,Landroid/view/animation/AlphaAnimation;,Landroid/view/animation/ScaleAnimation;
-PLcom/android/server/wm/WindowAnimationSpec;->asWindowAnimationSpec()Lcom/android/server/wm/WindowAnimationSpec;
+HPLcom/android/server/wm/WindowAnimationSpec;->asWindowAnimationSpec()Lcom/android/server/wm/WindowAnimationSpec;
 HPLcom/android/server/wm/WindowAnimationSpec;->calculateStatusBarTransitionStartTime()J
 PLcom/android/server/wm/WindowAnimationSpec;->canSkipFirstFrame()Z
 PLcom/android/server/wm/WindowAnimationSpec;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/wm/WindowAnimationSpec;->dumpDebugInner(Landroid/util/proto/ProtoOutputStream;)V
-PLcom/android/server/wm/WindowAnimationSpec;->findAlmostThereFraction(Landroid/view/animation/Interpolator;)F
-PLcom/android/server/wm/WindowAnimationSpec;->findInterpolationAdjustedTargetFraction(Landroid/view/animation/Interpolator;FF)F
+HPLcom/android/server/wm/WindowAnimationSpec;->findAlmostThereFraction(Landroid/view/animation/Interpolator;)F
+HPLcom/android/server/wm/WindowAnimationSpec;->findInterpolationAdjustedTargetFraction(Landroid/view/animation/Interpolator;FF)F
 PLcom/android/server/wm/WindowAnimationSpec;->findMiddleOfTranslationFraction(Landroid/view/animation/Interpolator;)F
 HPLcom/android/server/wm/WindowAnimationSpec;->findTranslateAnimation(Landroid/view/animation/Animation;)Landroid/view/animation/TranslateAnimation;
 PLcom/android/server/wm/WindowAnimationSpec;->getAnimation()Landroid/view/animation/Animation;
@@ -59251,6 +61159,7 @@
 HPLcom/android/server/wm/WindowAnimator;->addAfterPrepareSurfacesRunnable(Ljava/lang/Runnable;)V
 HSPLcom/android/server/wm/WindowAnimator;->addDisplayLocked(I)V
 HSPLcom/android/server/wm/WindowAnimator;->animate(JJ)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/TaskSnapshotController;Lcom/android/server/wm/TaskSnapshotController;]Lcom/android/server/wm/WindowAnimator;Lcom/android/server/wm/WindowAnimator;]Lcom/android/server/wm/AccessibilityController;Lcom/android/server/wm/AccessibilityController;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;]Lcom/android/server/wm/TaskOrganizerController;Lcom/android/server/wm/TaskOrganizerController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
+PLcom/android/server/wm/WindowAnimator;->bulkUpdateParamsToString(I)Ljava/lang/String;
 HSPLcom/android/server/wm/WindowAnimator;->cancelAnimation()V+]Landroid/view/Choreographer;Landroid/view/Choreographer;
 PLcom/android/server/wm/WindowAnimator;->dumpLocked(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
 HSPLcom/android/server/wm/WindowAnimator;->executeAfterPrepareSurfacesRunnables()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Ljava/lang/Runnable;Lcom/android/server/wm/RemoteAnimationController$$ExternalSyntheticLambda2;,Lcom/android/server/wm/InsetsStateController$$ExternalSyntheticLambda4;
@@ -59275,28 +61184,28 @@
 PLcom/android/server/wm/WindowChangeAnimationSpec;->getDuration()J
 PLcom/android/server/wm/WindowChangeAnimationSpec;->getShowWallpaper()Z
 PLcom/android/server/wm/WindowChangeAnimationSpec;->lambda$new$0()Lcom/android/server/wm/WindowChangeAnimationSpec$TmpValues;
-HPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda0;-><init>()V
+HSPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda0;-><init>()V
 HPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda10;-><init>()V
 PLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda10;->test(Ljava/lang/Object;)Z
-HPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda12;-><init>()V
-HPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda12;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda12;-><init>()V
+HSPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda12;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda13;-><init>(Lcom/android/server/wm/WindowContainer;)V
 HPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda13;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda1;-><init>()V
 HSPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda1;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda2;-><init>()V
-HPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda2;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda2;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda3;-><init>()V
 PLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda3;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/wm/WindowContainer;)V
 HPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda4;->onAnimationFinished(ILcom/android/server/wm/AnimationAdapter;)V
 PLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda5;-><init>()V
 PLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda5;->test(Ljava/lang/Object;)Z
-HPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda6;-><init>()V
+HSPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda6;-><init>()V
 PLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda6;->test(Ljava/lang/Object;)Z
-HPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda7;-><init>()V
-HPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda7;->test(Ljava/lang/Object;)Z
+HSPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda7;-><init>()V
+HSPLcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda7;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/WindowContainer$1;-><init>(Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowContainer;)V
 PLcom/android/server/wm/WindowContainer$1;->onMergedOverrideConfigurationChanged(Landroid/content/res/Configuration;)V
 PLcom/android/server/wm/WindowContainer$2;-><init>(Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ConfigurationContainerListener;)V
@@ -59313,7 +61222,7 @@
 PLcom/android/server/wm/WindowContainer$AnimationRunnerBuilder$$ExternalSyntheticLambda4;->run()V
 HPLcom/android/server/wm/WindowContainer$AnimationRunnerBuilder$$ExternalSyntheticLambda5;-><init>()V
 PLcom/android/server/wm/WindowContainer$AnimationRunnerBuilder$$ExternalSyntheticLambda5;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/WindowContainer$AnimationRunnerBuilder;->$r8$lambda$BWeVZQp29j72z9D_sWdID2xR4qI(Lcom/android/server/wm/WindowContainer$AnimationRunnerBuilder;Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/AnimationAdapter;ZILcom/android/server/wm/AnimationAdapter;)V
+HPLcom/android/server/wm/WindowContainer$AnimationRunnerBuilder;->$r8$lambda$BWeVZQp29j72z9D_sWdID2xR4qI(Lcom/android/server/wm/WindowContainer$AnimationRunnerBuilder;Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/AnimationAdapter;ZILcom/android/server/wm/AnimationAdapter;)V
 HPLcom/android/server/wm/WindowContainer$AnimationRunnerBuilder;->$r8$lambda$L86DUsucxd2PjIvRYXz9DPH-J0s(Lcom/android/server/wm/WindowContainer$AnimationRunnerBuilder;ILcom/android/server/wm/AnimationAdapter;)V
 PLcom/android/server/wm/WindowContainer$AnimationRunnerBuilder;->$r8$lambda$OAMCK854KVCR2Bv8NGCOyw6Zk20(Ljava/util/concurrent/atomic/AtomicInteger;Lcom/android/server/wm/TaskDisplayArea;)V
 PLcom/android/server/wm/WindowContainer$AnimationRunnerBuilder;->$r8$lambda$eOoMKzw2UUwsxIVza23EmHUAmw8(Lcom/android/server/wm/WindowContainer$AnimationRunnerBuilder;)V
@@ -59342,34 +61251,36 @@
 HSPLcom/android/server/wm/WindowContainer$RemoteToken;->getContainer()Lcom/android/server/wm/WindowContainer;
 PLcom/android/server/wm/WindowContainer$RemoteToken;->toString()Ljava/lang/String;
 HSPLcom/android/server/wm/WindowContainer$RemoteToken;->toWindowContainerToken()Landroid/window/WindowContainerToken;
-HPLcom/android/server/wm/WindowContainer;->$r8$lambda$-S_g3GrlUApMRtq9uvmrNBJYX7s(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/WindowContainer;->$r8$lambda$-S_g3GrlUApMRtq9uvmrNBJYX7s(Lcom/android/server/wm/ActivityRecord;)Z
 HPLcom/android/server/wm/WindowContainer;->$r8$lambda$0tyNKo-KnbBRmtCAePF1AoexeTg(Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;)V
 HSPLcom/android/server/wm/WindowContainer;->$r8$lambda$234A29yGN9FizkgSHI98SpTISjs(Lcom/android/server/wm/Task;)Z
 PLcom/android/server/wm/WindowContainer;->$r8$lambda$CqeI7rKVQi3UNnUp9aZU2DgHMwI(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/WindowContainer;->$r8$lambda$CwOFafKDHad3hUTXlB-krkCZEVI(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/WindowContainer;->$r8$lambda$LnJML3JOqm0_aVdJWDiX0PBFO5M(Lcom/android/server/wm/Task;)Z
 PLcom/android/server/wm/WindowContainer;->$r8$lambda$NFtMLbOgBLgl31UGtXUGE6SmNNE(Lcom/android/server/wm/Task;)Z
-HPLcom/android/server/wm/WindowContainer;->$r8$lambda$YrlAkiQa0GkL3xT--G9kOwWFtck(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/WindowContainer;->$r8$lambda$ZBTNA4Izorc10Fa2PsA_ODwrowQ(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/WindowContainer;->$r8$lambda$YrlAkiQa0GkL3xT--G9kOwWFtck(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/WindowContainer;->$r8$lambda$ZBTNA4Izorc10Fa2PsA_ODwrowQ(Lcom/android/server/wm/ActivityRecord;)Z
 HPLcom/android/server/wm/WindowContainer;->$r8$lambda$jr26c-L38rk1QuoaOZNCYvglH4s(Lcom/android/server/wm/ActivityRecord;)Z
 HSPLcom/android/server/wm/WindowContainer;->-$$Nest$fgetmConsumerWrapperPool(Lcom/android/server/wm/WindowContainer;)Landroid/util/Pools$SynchronizedPool;
 HSPLcom/android/server/wm/WindowContainer;-><init>(Lcom/android/server/wm/WindowManagerService;)V
 HSPLcom/android/server/wm/WindowContainer;->addChild(Lcom/android/server/wm/WindowContainer;I)V
 HSPLcom/android/server/wm/WindowContainer;->addChild(Lcom/android/server/wm/WindowContainer;Ljava/util/Comparator;)V
+PLcom/android/server/wm/WindowContainer;->addTrustedOverlay(Landroid/view/SurfaceControlViewHost$SurfacePackage;Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/WindowContainer;->allSyncFinished()Z
 HPLcom/android/server/wm/WindowContainer;->applyAnimation(Landroid/view/WindowManager$LayoutParams;IZZLjava/util/ArrayList;)Z
 HPLcom/android/server/wm/WindowContainer;->applyAnimationUnchecked(Landroid/view/WindowManager$LayoutParams;ZIZLjava/util/ArrayList;)V
 HPLcom/android/server/wm/WindowContainer;->applyMagnificationSpec(Landroid/view/SurfaceControl$Transaction;Landroid/view/MagnificationSpec;)V
 HSPLcom/android/server/wm/WindowContainer;->asActivityRecord()Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/WindowContainer;->asDisplayArea()Lcom/android/server/wm/DisplayArea;
-PLcom/android/server/wm/WindowContainer;->asRootDisplayArea()Lcom/android/server/wm/RootDisplayArea;
+HPLcom/android/server/wm/WindowContainer;->asRootDisplayArea()Lcom/android/server/wm/RootDisplayArea;
 HSPLcom/android/server/wm/WindowContainer;->asTask()Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/WindowContainer;->asTaskDisplayArea()Lcom/android/server/wm/TaskDisplayArea;
 HSPLcom/android/server/wm/WindowContainer;->asTaskFragment()Lcom/android/server/wm/TaskFragment;
 HSPLcom/android/server/wm/WindowContainer;->asWallpaperToken()Lcom/android/server/wm/WallpaperWindowToken;
-PLcom/android/server/wm/WindowContainer;->asWindowToken()Lcom/android/server/wm/WindowToken;
+PLcom/android/server/wm/WindowContainer;->asWindowState()Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/WindowContainer;->asWindowToken()Lcom/android/server/wm/WindowToken;
 HSPLcom/android/server/wm/WindowContainer;->assignChildLayers()V
-HSPLcom/android/server/wm/WindowContainer;->assignChildLayers(Landroid/view/SurfaceControl$Transaction;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/WindowContainer;->assignChildLayers(Landroid/view/SurfaceControl$Transaction;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/TrustedOverlayHost;Lcom/android/server/wm/TrustedOverlayHost;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/WindowContainer;->assignLayer(Landroid/view/SurfaceControl$Transaction;I)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;
 PLcom/android/server/wm/WindowContainer;->assignRelativeLayer(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;I)V
 HSPLcom/android/server/wm/WindowContainer;->assignRelativeLayer(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;IZ)V
@@ -59381,12 +61292,12 @@
 HPLcom/android/server/wm/WindowContainer;->clearMagnificationSpec(Landroid/view/SurfaceControl$Transaction;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 PLcom/android/server/wm/WindowContainer;->clearSyncState()V
 HSPLcom/android/server/wm/WindowContainer;->commitPendingTransaction()V
-HPLcom/android/server/wm/WindowContainer;->compareTo(Lcom/android/server/wm/WindowContainer;)I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Ljava/util/LinkedList;Ljava/util/LinkedList;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/WindowContainer;->compareTo(Lcom/android/server/wm/WindowContainer;)I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/Task;]Ljava/util/LinkedList;Ljava/util/LinkedList;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/WindowContainer;->createShallowCopy(Landroid/util/SparseArray;)Landroid/util/SparseArray;
 HSPLcom/android/server/wm/WindowContainer;->createSurfaceControl(Z)V
 HSPLcom/android/server/wm/WindowContainer;->doAnimationFinished(ILcom/android/server/wm/AnimationAdapter;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
-HPLcom/android/server/wm/WindowContainer;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
-HPLcom/android/server/wm/WindowContainer;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
+HSPLcom/android/server/wm/WindowContainer;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
+HPLcom/android/server/wm/WindowContainer;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Lcom/android/server/wm/SurfaceAnimator;Lcom/android/server/wm/SurfaceAnimator;]Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;
 HPLcom/android/server/wm/WindowContainer;->finishSync(Landroid/view/SurfaceControl$Transaction;Z)V
 HSPLcom/android/server/wm/WindowContainer;->forAllActivities(Ljava/util/function/Consumer;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/RootWindowContainer;,Lcom/android/server/wm/TaskFragment;
 HSPLcom/android/server/wm/WindowContainer;->forAllActivities(Ljava/util/function/Consumer;Z)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
@@ -59396,33 +61307,33 @@
 HSPLcom/android/server/wm/WindowContainer;->forAllActivities(Ljava/util/function/Predicate;Z)Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/WindowContainer;->forAllDisplayAreas(Ljava/util/function/Consumer;)V
 HSPLcom/android/server/wm/WindowContainer;->forAllLeafTaskFragments(Ljava/util/function/Predicate;)Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-HPLcom/android/server/wm/WindowContainer;->forAllLeafTasks(Ljava/util/function/Consumer;Z)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-HPLcom/android/server/wm/WindowContainer;->forAllLeafTasks(Ljava/util/function/Predicate;)Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-HSPLcom/android/server/wm/WindowContainer;->forAllRootTasks(Ljava/util/function/Consumer;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/RootWindowContainer;
+HSPLcom/android/server/wm/WindowContainer;->forAllLeafTasks(Ljava/util/function/Consumer;Z)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/WindowContainer;->forAllLeafTasks(Ljava/util/function/Predicate;)Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/WindowContainer;->forAllRootTasks(Ljava/util/function/Consumer;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/RootWindowContainer;
 HSPLcom/android/server/wm/WindowContainer;->forAllRootTasks(Ljava/util/function/Consumer;Z)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-PLcom/android/server/wm/WindowContainer;->forAllRootTasks(Ljava/util/function/Predicate;)Z
+HPLcom/android/server/wm/WindowContainer;->forAllRootTasks(Ljava/util/function/Predicate;)Z
 HPLcom/android/server/wm/WindowContainer;->forAllRootTasks(Ljava/util/function/Predicate;Z)Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-HPLcom/android/server/wm/WindowContainer;->forAllTaskDisplayAreas(Ljava/util/function/Consumer;)V
-HPLcom/android/server/wm/WindowContainer;->forAllTaskDisplayAreas(Ljava/util/function/Consumer;Z)V
+HSPLcom/android/server/wm/WindowContainer;->forAllTaskDisplayAreas(Ljava/util/function/Consumer;)V
+HSPLcom/android/server/wm/WindowContainer;->forAllTaskDisplayAreas(Ljava/util/function/Consumer;Z)V
 HPLcom/android/server/wm/WindowContainer;->forAllTaskDisplayAreas(Ljava/util/function/Predicate;)Z
-HPLcom/android/server/wm/WindowContainer;->forAllTaskFragments(Ljava/util/function/Consumer;)V
-HPLcom/android/server/wm/WindowContainer;->forAllTaskFragments(Ljava/util/function/Consumer;Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/WindowContainer;->forAllTaskFragments(Ljava/util/function/Consumer;)V
+HSPLcom/android/server/wm/WindowContainer;->forAllTaskFragments(Ljava/util/function/Consumer;Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/WindowContainer;->forAllTasks(Ljava/util/function/Consumer;)V
 HSPLcom/android/server/wm/WindowContainer;->forAllTasks(Ljava/util/function/Consumer;Z)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/WindowContainer;->forAllTasks(Ljava/util/function/Predicate;)Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HPLcom/android/server/wm/WindowContainer;->forAllWallpaperWindows(Ljava/util/function/Consumer;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-HPLcom/android/server/wm/WindowContainer;->forAllWindowContainers(Ljava/util/function/Consumer;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/function/Consumer;Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda13;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HPLcom/android/server/wm/WindowContainer;->forAllWindowContainers(Ljava/util/function/Consumer;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/function/Consumer;Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda13;,Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda12;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/WindowContainer;->forAllWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/WindowContainer;->forAllWindows(Ljava/util/function/Consumer;Z)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;Lcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;
 HSPLcom/android/server/wm/WindowContainer;->fromBinder(Landroid/os/IBinder;)Lcom/android/server/wm/WindowContainer;
-HSPLcom/android/server/wm/WindowContainer;->getActivity(Ljava/util/function/Predicate;)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/RootWindowContainer;,Lcom/android/server/wm/TaskFragment;
-HPLcom/android/server/wm/WindowContainer;->getActivity(Ljava/util/function/Predicate;Lcom/android/server/wm/WindowContainer;ZZ)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;
-HPLcom/android/server/wm/WindowContainer;->getActivity(Ljava/util/function/Predicate;Lcom/android/server/wm/WindowContainer;ZZ[Z)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/WindowContainer;->getActivity(Ljava/util/function/Predicate;)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/RootWindowContainer;,Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/WindowContainer;->getActivity(Ljava/util/function/Predicate;Lcom/android/server/wm/WindowContainer;ZZ)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/DisplayContent;
+HSPLcom/android/server/wm/WindowContainer;->getActivity(Ljava/util/function/Predicate;Lcom/android/server/wm/WindowContainer;ZZ[Z)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/WindowContainer;->getActivity(Ljava/util/function/Predicate;Z)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;megamorphic_types
 HSPLcom/android/server/wm/WindowContainer;->getActivity(Ljava/util/function/Predicate;ZLcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-HPLcom/android/server/wm/WindowContainer;->getActivityAbove(Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/WindowContainer;->getActivityBelow(Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;
-HPLcom/android/server/wm/WindowContainer;->getAnimatingContainer()Lcom/android/server/wm/WindowContainer;
+HSPLcom/android/server/wm/WindowContainer;->getActivityAbove(Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/WindowContainer;->getActivityBelow(Lcom/android/server/wm/ActivityRecord;)Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;
+HSPLcom/android/server/wm/WindowContainer;->getAnimatingContainer()Lcom/android/server/wm/WindowContainer;
 HSPLcom/android/server/wm/WindowContainer;->getAnimatingContainer(II)Lcom/android/server/wm/WindowContainer;+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HPLcom/android/server/wm/WindowContainer;->getAnimation()Lcom/android/server/wm/AnimationAdapter;
 HPLcom/android/server/wm/WindowContainer;->getAnimationAdapter(Landroid/view/WindowManager$LayoutParams;IZZ)Landroid/util/Pair;
@@ -59432,7 +61343,7 @@
 HPLcom/android/server/wm/WindowContainer;->getAnimationLeashParent()Landroid/view/SurfaceControl;+]Lcom/android/server/wm/WindowContainer;megamorphic_types
 HPLcom/android/server/wm/WindowContainer;->getAnimationPosition(Landroid/graphics/Point;)V
 PLcom/android/server/wm/WindowContainer;->getAnimationSources()Landroid/util/ArraySet;
-HPLcom/android/server/wm/WindowContainer;->getBottomMostActivity()Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/WindowContainer;->getBottomMostActivity()Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/WindowContainer;->getBottomMostTask()Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/WindowContainer;->getChildAt(I)Lcom/android/server/wm/ConfigurationContainer;+]Lcom/android/server/wm/WindowContainer;megamorphic_types
 HSPLcom/android/server/wm/WindowContainer;->getChildAt(I)Lcom/android/server/wm/WindowContainer;+]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
@@ -59443,7 +61354,7 @@
 HSPLcom/android/server/wm/WindowContainer;->getDisplayContent()Lcom/android/server/wm/DisplayContent;
 PLcom/android/server/wm/WindowContainer;->getFreezeSnapshotTarget()Landroid/view/SurfaceControl;
 HSPLcom/android/server/wm/WindowContainer;->getItemFromTaskDisplayAreas(Ljava/util/function/Function;)Ljava/lang/Object;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/RootWindowContainer;
-HPLcom/android/server/wm/WindowContainer;->getItemFromTaskDisplayAreas(Ljava/util/function/Function;Z)Ljava/lang/Object;
+HSPLcom/android/server/wm/WindowContainer;->getItemFromTaskDisplayAreas(Ljava/util/function/Function;Z)Ljava/lang/Object;
 HPLcom/android/server/wm/WindowContainer;->getLastLayer()I
 HSPLcom/android/server/wm/WindowContainer;->getLastOrientationSource()Lcom/android/server/wm/WindowContainer;+]Lcom/android/server/wm/WindowContainer;megamorphic_types
 PLcom/android/server/wm/WindowContainer;->getLastSurfacePosition()Landroid/graphics/Point;
@@ -59452,7 +61363,7 @@
 HSPLcom/android/server/wm/WindowContainer;->getParent()Lcom/android/server/wm/ConfigurationContainer;+]Lcom/android/server/wm/WindowContainer;megamorphic_types
 HSPLcom/android/server/wm/WindowContainer;->getParent()Lcom/android/server/wm/WindowContainer;
 HPLcom/android/server/wm/WindowContainer;->getParentSurfaceControl()Landroid/view/SurfaceControl;+]Lcom/android/server/wm/WindowContainer;megamorphic_types
-HPLcom/android/server/wm/WindowContainer;->getParents(Ljava/util/LinkedList;)V
+HPLcom/android/server/wm/WindowContainer;->getParents(Ljava/util/LinkedList;)V+]Ljava/util/LinkedList;Ljava/util/LinkedList;
 HSPLcom/android/server/wm/WindowContainer;->getPendingTransaction()Landroid/view/SurfaceControl$Transaction;+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;
 HPLcom/android/server/wm/WindowContainer;->getPrefixOrderIndex()I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/DisplayArea$Tokens;,Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/WindowToken;
 HPLcom/android/server/wm/WindowContainer;->getPrefixOrderIndex(Lcom/android/server/wm/WindowContainer;)I+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
@@ -59460,8 +61371,8 @@
 HSPLcom/android/server/wm/WindowContainer;->getRelativeDisplayRotation()I
 HSPLcom/android/server/wm/WindowContainer;->getRelativePosition(Landroid/graphics/Point;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Landroid/graphics/Point;Landroid/graphics/Point;]Lcom/android/server/wm/ConfigurationContainer;megamorphic_types
 PLcom/android/server/wm/WindowContainer;->getRemoteAnimationDefinition()Landroid/view/RemoteAnimationDefinition;
-HPLcom/android/server/wm/WindowContainer;->getRequestedConfigurationOrientation()I
-HPLcom/android/server/wm/WindowContainer;->getRequestedConfigurationOrientation(Z)I
+HSPLcom/android/server/wm/WindowContainer;->getRequestedConfigurationOrientation()I
+HSPLcom/android/server/wm/WindowContainer;->getRequestedConfigurationOrientation(Z)I
 HSPLcom/android/server/wm/WindowContainer;->getRootDisplayArea()Lcom/android/server/wm/RootDisplayArea;+]Lcom/android/server/wm/WindowContainer;megamorphic_types
 HSPLcom/android/server/wm/WindowContainer;->getRootTask(Ljava/util/function/Predicate;)Lcom/android/server/wm/Task;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/WindowContainer;->getRootTask(Ljava/util/function/Predicate;Z)Lcom/android/server/wm/Task;+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
@@ -59477,31 +61388,31 @@
 HSPLcom/android/server/wm/WindowContainer;->getTask(Ljava/util/function/Predicate;Z)Lcom/android/server/wm/Task;+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HPLcom/android/server/wm/WindowContainer;->getTaskAnimationBackgroundColor()I
 PLcom/android/server/wm/WindowContainer;->getTaskBelow(Lcom/android/server/wm/Task;)Lcom/android/server/wm/Task;
-HSPLcom/android/server/wm/WindowContainer;->getTaskDisplayArea()Lcom/android/server/wm/TaskDisplayArea;
+HSPLcom/android/server/wm/WindowContainer;->getTaskDisplayArea()Lcom/android/server/wm/TaskDisplayArea;+]Lcom/android/server/wm/WindowContainer;megamorphic_types
 PLcom/android/server/wm/WindowContainer;->getTopActivity(ZZ)Lcom/android/server/wm/ActivityRecord;
-HSPLcom/android/server/wm/WindowContainer;->getTopChild()Lcom/android/server/wm/WindowContainer;
-HSPLcom/android/server/wm/WindowContainer;->getTopMostActivity()Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;
+HSPLcom/android/server/wm/WindowContainer;->getTopChild()Lcom/android/server/wm/WindowContainer;+]Lcom/android/server/wm/WindowList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/WindowContainer;->getTopMostActivity()Lcom/android/server/wm/ActivityRecord;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/TaskFragment;
 HSPLcom/android/server/wm/WindowContainer;->getTopMostTask()Lcom/android/server/wm/Task;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/WindowContainer;->getWindow(Ljava/util/function/Predicate;)Lcom/android/server/wm/WindowState;+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/WindowContainer;->handleCompleteDeferredRemoval()Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/ConfigurationContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-HPLcom/android/server/wm/WindowContainer;->handlesOrientationChangeFromDescendant()Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types
-HPLcom/android/server/wm/WindowContainer;->hasActivity()Z
-HPLcom/android/server/wm/WindowContainer;->hasChild(Lcom/android/server/wm/WindowContainer;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/WindowContainer;->handlesOrientationChangeFromDescendant()Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types
+HSPLcom/android/server/wm/WindowContainer;->hasActivity()Z
+HSPLcom/android/server/wm/WindowContainer;->hasChild(Lcom/android/server/wm/WindowContainer;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HPLcom/android/server/wm/WindowContainer;->hasCommittedReparentToAnimationLeash()Z
-HPLcom/android/server/wm/WindowContainer;->hasContentToDisplay()Z
+HSPLcom/android/server/wm/WindowContainer;->hasContentToDisplay()Z
 HSPLcom/android/server/wm/WindowContainer;->inTransition()Z+]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;
 PLcom/android/server/wm/WindowContainer;->initializeChangeTransition(Landroid/graphics/Rect;)V
 PLcom/android/server/wm/WindowContainer;->initializeChangeTransition(Landroid/graphics/Rect;Landroid/view/SurfaceControl;)V
 HSPLcom/android/server/wm/WindowContainer;->isAnimating()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;
 HSPLcom/android/server/wm/WindowContainer;->isAnimating(I)Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types
 HSPLcom/android/server/wm/WindowContainer;->isAnimating(II)Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types
-HPLcom/android/server/wm/WindowContainer;->isAppTransitioning()Z
-HPLcom/android/server/wm/WindowContainer;->isAttached()Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types
+HSPLcom/android/server/wm/WindowContainer;->isAppTransitioning()Z
+HSPLcom/android/server/wm/WindowContainer;->isAttached()Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types
 HPLcom/android/server/wm/WindowContainer;->isChangingAppTransition()Z
-HPLcom/android/server/wm/WindowContainer;->isDescendantOf(Lcom/android/server/wm/WindowContainer;)Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types
+HSPLcom/android/server/wm/WindowContainer;->isDescendantOf(Lcom/android/server/wm/WindowContainer;)Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types
 HSPLcom/android/server/wm/WindowContainer;->isExitAnimationRunningSelfOrChild()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;
 HSPLcom/android/server/wm/WindowContainer;->isFocusable()Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types
-HPLcom/android/server/wm/WindowContainer;->isOnTop()Z
+HSPLcom/android/server/wm/WindowContainer;->isOnTop()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/RootWindowContainer;
 HSPLcom/android/server/wm/WindowContainer;->isOrganized()Z
 HSPLcom/android/server/wm/WindowContainer;->isSelfAnimating(II)Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/SurfaceAnimator;Lcom/android/server/wm/SurfaceAnimator;
 HPLcom/android/server/wm/WindowContainer;->isSyncFinished()Z
@@ -59510,78 +61421,80 @@
 HSPLcom/android/server/wm/WindowContainer;->isWaitingForTransitionStart()Z
 PLcom/android/server/wm/WindowContainer;->lambda$getActivityAbove$1(Lcom/android/server/wm/ActivityRecord;)Z
 HPLcom/android/server/wm/WindowContainer;->lambda$getActivityBelow$2(Lcom/android/server/wm/ActivityRecord;)Z
-PLcom/android/server/wm/WindowContainer;->lambda$getBottomMostActivity$3(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/WindowContainer;->lambda$getBottomMostActivity$3(Lcom/android/server/wm/ActivityRecord;)Z
 PLcom/android/server/wm/WindowContainer;->lambda$getBottomMostTask$11(Lcom/android/server/wm/Task;)Z
 PLcom/android/server/wm/WindowContainer;->lambda$getTaskBelow$10(Lcom/android/server/wm/Task;)Z
 PLcom/android/server/wm/WindowContainer;->lambda$getTopActivity$7(Lcom/android/server/wm/ActivityRecord;)Z
-HPLcom/android/server/wm/WindowContainer;->lambda$getTopMostActivity$4(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/WindowContainer;->lambda$getTopMostActivity$4(Lcom/android/server/wm/ActivityRecord;)Z
 HSPLcom/android/server/wm/WindowContainer;->lambda$getTopMostTask$12(Lcom/android/server/wm/Task;)Z
-HPLcom/android/server/wm/WindowContainer;->lambda$isAppTransitioning$0(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/WindowContainer;->lambda$isAppTransitioning$0(Lcom/android/server/wm/ActivityRecord;)Z
 HPLcom/android/server/wm/WindowContainer;->lambda$waitForAllWindowsDrawn$13(Lcom/android/server/wm/WindowState;)V
 HPLcom/android/server/wm/WindowContainer;->loadAnimation(Landroid/view/WindowManager$LayoutParams;IZZ)Landroid/view/animation/Animation;
 HPLcom/android/server/wm/WindowContainer;->makeAnimationLeash()Landroid/view/SurfaceControl$Builder;+]Landroid/view/SurfaceControl$Builder;Landroid/view/SurfaceControl$Builder;]Lcom/android/server/wm/WindowContainer;megamorphic_types
 HSPLcom/android/server/wm/WindowContainer;->makeChildSurface(Lcom/android/server/wm/WindowContainer;)Landroid/view/SurfaceControl$Builder;+]Landroid/view/SurfaceControl$Builder;Landroid/view/SurfaceControl$Builder;]Lcom/android/server/wm/WindowContainer;megamorphic_types
 HSPLcom/android/server/wm/WindowContainer;->makeSurface()Landroid/view/SurfaceControl$Builder;+]Lcom/android/server/wm/WindowContainer;megamorphic_types
 HPLcom/android/server/wm/WindowContainer;->migrateToNewSurfaceControl(Landroid/view/SurfaceControl$Transaction;)V
-HSPLcom/android/server/wm/WindowContainer;->needsZBoost()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/TaskFragment;,Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/WindowContainer;->needsZBoost()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/TaskFragment;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/WindowContainer;->obtainConsumerWrapper(Ljava/util/function/Consumer;)Lcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;+]Lcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;Lcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;]Landroid/util/Pools$SynchronizedPool;Landroid/util/Pools$SynchronizedPool;
 HSPLcom/android/server/wm/WindowContainer;->okToAnimate()Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types
 HSPLcom/android/server/wm/WindowContainer;->okToAnimate(ZZ)Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/WindowContainer;->okToDisplay()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
-HPLcom/android/server/wm/WindowContainer;->onAnimationFinished(ILcom/android/server/wm/AnimationAdapter;)V
+HSPLcom/android/server/wm/WindowContainer;->onAnimationFinished(ILcom/android/server/wm/AnimationAdapter;)V
 HPLcom/android/server/wm/WindowContainer;->onAnimationLeashCreated(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types
 HPLcom/android/server/wm/WindowContainer;->onAnimationLeashLost(Landroid/view/SurfaceControl$Transaction;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/SurfaceAnimationRunner;Lcom/android/server/wm/SurfaceAnimationRunner;
-HPLcom/android/server/wm/WindowContainer;->onAppTransitionDone()V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/WindowContainer;->onAppTransitionDone()V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/WindowContainer;->onChildAdded(Lcom/android/server/wm/WindowContainer;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types
 HSPLcom/android/server/wm/WindowContainer;->onChildPositionChanged(Lcom/android/server/wm/WindowContainer;)V
 HSPLcom/android/server/wm/WindowContainer;->onChildRemoved(Lcom/android/server/wm/WindowContainer;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types
-HPLcom/android/server/wm/WindowContainer;->onChildVisibilityRequested(Z)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/SurfaceFreezer;Lcom/android/server/wm/SurfaceFreezer;
-HSPLcom/android/server/wm/WindowContainer;->onConfigurationChanged(Landroid/content/res/Configuration;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types
-HPLcom/android/server/wm/WindowContainer;->onDescendantOrientationChanged(Lcom/android/server/wm/WindowContainer;)Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types
+HSPLcom/android/server/wm/WindowContainer;->onChildVisibilityRequested(Z)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/SurfaceFreezer;Lcom/android/server/wm/SurfaceFreezer;
+HSPLcom/android/server/wm/WindowContainer;->onConfigurationChanged(Landroid/content/res/Configuration;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/TrustedOverlayHost;Lcom/android/server/wm/TrustedOverlayHost;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/WindowContainer;->onDescendantOrientationChanged(Lcom/android/server/wm/WindowContainer;)Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types
 HSPLcom/android/server/wm/WindowContainer;->onDescendantOverrideConfigurationChanged()V
-HSPLcom/android/server/wm/WindowContainer;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/WindowContainerListener;Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/WindowContainer;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Ljava/util/List;Ljava/util/ArrayList;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Lcom/android/server/wm/WindowContainerListener;Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;,Lcom/android/server/wm/WindowContainer$2;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 PLcom/android/server/wm/WindowContainer;->onMovedByResize()V
 HSPLcom/android/server/wm/WindowContainer;->onParentChanged(Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ConfigurationContainer;)V
 HSPLcom/android/server/wm/WindowContainer;->onParentChanged(Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowContainer$PreAssignChildLayersCallback;)V
 HSPLcom/android/server/wm/WindowContainer;->onParentResize()V
 HSPLcom/android/server/wm/WindowContainer;->onRequestedOverrideConfigurationChanged(Landroid/content/res/Configuration;)V
-HSPLcom/android/server/wm/WindowContainer;->onResize()V
+HSPLcom/android/server/wm/WindowContainer;->onResize()V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/WindowContainer;->onSurfaceShown(Landroid/view/SurfaceControl$Transaction;)V
-HSPLcom/android/server/wm/WindowContainer;->onSyncFinishedDrawing()Z
+HSPLcom/android/server/wm/WindowContainer;->onSyncFinishedDrawing()Z+]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;
 HSPLcom/android/server/wm/WindowContainer;->onSyncReparent(Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowContainer;)V
 PLcom/android/server/wm/WindowContainer;->onSyncTransactionCommitted(Landroid/view/SurfaceControl$Transaction;)V
 HSPLcom/android/server/wm/WindowContainer;->onUnfrozen()V+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 PLcom/android/server/wm/WindowContainer;->overrideConfigurationPropagation(Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowContainer;)V
-HSPLcom/android/server/wm/WindowContainer;->positionChildAt(ILcom/android/server/wm/WindowContainer;Z)V
+HSPLcom/android/server/wm/WindowContainer;->positionChildAt(ILcom/android/server/wm/WindowContainer;Z)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/WindowList;Lcom/android/server/wm/WindowList;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/WindowContainer;->prepareSurfaces()V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/SurfaceAnimator;Lcom/android/server/wm/SurfaceAnimator;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HPLcom/android/server/wm/WindowContainer;->prepareSync()Z
 PLcom/android/server/wm/WindowContainer;->processForAllActivitiesWithBoundary(Ljava/util/function/Predicate;Lcom/android/server/wm/WindowContainer;ZZ[ZLcom/android/server/wm/WindowContainer;)Z
-HPLcom/android/server/wm/WindowContainer;->processGetActivityWithBoundary(Ljava/util/function/Predicate;Lcom/android/server/wm/WindowContainer;ZZ[ZLcom/android/server/wm/WindowContainer;)Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/WindowContainer;->processGetActivityWithBoundary(Ljava/util/function/Predicate;Lcom/android/server/wm/WindowContainer;ZZ[ZLcom/android/server/wm/WindowContainer;)Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/WindowContainer;->processGetTaskWithBoundary(Ljava/util/function/Predicate;Lcom/android/server/wm/WindowContainer;ZZ[ZLcom/android/server/wm/WindowContainer;)Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/WindowContainer;->providesOrientation()Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types
 HSPLcom/android/server/wm/WindowContainer;->reassignLayer(Landroid/view/SurfaceControl$Transaction;)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types
 HSPLcom/android/server/wm/WindowContainer;->reduceOnAllTaskDisplayAreas(Ljava/util/function/BiFunction;Ljava/lang/Object;)Ljava/lang/Object;
 PLcom/android/server/wm/WindowContainer;->registerWindowContainerListener(Lcom/android/server/wm/WindowContainerListener;)V
-HSPLcom/android/server/wm/WindowContainer;->registerWindowContainerListener(Lcom/android/server/wm/WindowContainerListener;Z)V
+HSPLcom/android/server/wm/WindowContainer;->registerWindowContainerListener(Lcom/android/server/wm/WindowContainerListener;Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayArea$Tokens;,Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/wm/ConfigurationContainer;megamorphic_types]Lcom/android/server/wm/WindowContainerListener;Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;
 HSPLcom/android/server/wm/WindowContainer;->removeChild(Lcom/android/server/wm/WindowContainer;)V
 HPLcom/android/server/wm/WindowContainer;->removeIfPossible()V
 HPLcom/android/server/wm/WindowContainer;->removeImmediately()V
+PLcom/android/server/wm/WindowContainer;->removeTrustedOverlay(Landroid/view/SurfaceControlViewHost$SurfacePackage;)V
 HSPLcom/android/server/wm/WindowContainer;->reparent(Lcom/android/server/wm/WindowContainer;I)V
 HSPLcom/android/server/wm/WindowContainer;->reparentSurfaceControl(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V
 PLcom/android/server/wm/WindowContainer;->resetDragResizingChangeReported()V
 HPLcom/android/server/wm/WindowContainer;->resetSurfacePositionForAnimationLeash(Landroid/view/SurfaceControl$Transaction;)V+]Landroid/graphics/Point;Landroid/graphics/Point;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;
-HSPLcom/android/server/wm/WindowContainer;->scheduleAnimation()V+]Lcom/android/server/wm/WindowContainer;megamorphic_types
-HPLcom/android/server/wm/WindowContainer;->sendAppVisibilityToClients()V
+HSPLcom/android/server/wm/WindowContainer;->scheduleAnimation()V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
+HSPLcom/android/server/wm/WindowContainer;->sendAppVisibilityToClients()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HPLcom/android/server/wm/WindowContainer;->setCanScreenshot(Landroid/view/SurfaceControl$Transaction;Z)Z
 PLcom/android/server/wm/WindowContainer;->setControllableInsetProvider(Lcom/android/server/wm/InsetsSourceProvider;)V
 HSPLcom/android/server/wm/WindowContainer;->setInitialSurfaceControlProperties(Landroid/view/SurfaceControl$Builder;)V
 HSPLcom/android/server/wm/WindowContainer;->setLayer(Landroid/view/SurfaceControl$Transaction;I)V
 HSPLcom/android/server/wm/WindowContainer;->setOrientation(I)V
-HSPLcom/android/server/wm/WindowContainer;->setOrientation(ILcom/android/server/wm/WindowContainer;)V
+HSPLcom/android/server/wm/WindowContainer;->setOrientation(ILcom/android/server/wm/WindowContainer;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/WindowContainer;->setParent(Lcom/android/server/wm/WindowContainer;)V
 HSPLcom/android/server/wm/WindowContainer;->setRelativeLayer(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;I)V
 HSPLcom/android/server/wm/WindowContainer;->setSurfaceControl(Landroid/view/SurfaceControl;)V
 PLcom/android/server/wm/WindowContainer;->setSyncGroup(Lcom/android/server/wm/BLASTSyncEngine$SyncGroup;)V
-HPLcom/android/server/wm/WindowContainer;->shouldMagnify()Z
+HPLcom/android/server/wm/WindowContainer;->shouldMagnify()Z+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/WindowContainer;->showSurfaceOnCreation()Z
 PLcom/android/server/wm/WindowContainer;->showToCurrentUser()Z
 HPLcom/android/server/wm/WindowContainer;->showWallpaper()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
@@ -59598,7 +61511,7 @@
 HSPLcom/android/server/wm/WindowContainer;->useBLASTSync()Z
 HSPLcom/android/server/wm/WindowContainer;->waitForAllWindowsDrawn()V
 HPLcom/android/server/wm/WindowContainer;->waitForSyncTransactionCommit(Landroid/util/ArraySet;)V
-PLcom/android/server/wm/WindowContainer;->writeIdentifierToProto(Landroid/util/proto/ProtoOutputStream;J)V
+HPLcom/android/server/wm/WindowContainer;->writeIdentifierToProto(Landroid/util/proto/ProtoOutputStream;J)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;
 HSPLcom/android/server/wm/WindowContainerInsetsSourceProvider;-><init>(Landroid/view/InsetsSource;Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/DisplayContent;)V
 PLcom/android/server/wm/WindowContainerListener;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V
 PLcom/android/server/wm/WindowContainerThumbnail$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/WindowContainerThumbnail;)V
@@ -59631,16 +61544,16 @@
 HSPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;->-$$Nest$fgetmClientToken(Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;)Landroid/app/IWindowToken;
 HPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;->-$$Nest$fgetmContainer(Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;)Lcom/android/server/wm/WindowContainer;
 HPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;->-$$Nest$fgetmDeathRecipient(Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;)Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl$DeathRecipient;
-PLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;->-$$Nest$fgetmHasPendingConfiguration(Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;)Z
+HPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;->-$$Nest$fgetmHasPendingConfiguration(Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;)Z
 HSPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;->-$$Nest$fgetmOptions(Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;)Landroid/os/Bundle;
 HPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;->-$$Nest$fgetmOwnerUid(Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;)I
 HSPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;->-$$Nest$fgetmType(Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;)I
 HPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;->-$$Nest$fputmDeathRecipient(Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl$DeathRecipient;)V
 HSPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;->-$$Nest$mregister(Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;Z)V
-PLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;->-$$Nest$mreportConfigToWindowTokenClient(Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;)V
+HPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;->-$$Nest$mreportConfigToWindowTokenClient(Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;)V
 HPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;->-$$Nest$munregister(Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;)V+]Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;
 HSPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;->-$$Nest$mupdateContainer(Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;Lcom/android/server/wm/WindowContainer;)V
-HSPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;-><init>(Lcom/android/server/wm/WindowContextListenerController;Landroid/os/IBinder;Lcom/android/server/wm/WindowContainer;IILandroid/os/Bundle;)V
+HSPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;-><init>(Lcom/android/server/wm/WindowContextListenerController;Landroid/os/IBinder;Lcom/android/server/wm/WindowContainer;IILandroid/os/Bundle;)V+]Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl$DeathRecipient;Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl$DeathRecipient;
 HSPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;-><init>(Lcom/android/server/wm/WindowContextListenerController;Landroid/os/IBinder;Lcom/android/server/wm/WindowContainer;IILandroid/os/Bundle;Lcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl-IA;)V
 HSPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;->clear()V
 HPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;->getWindowContainer()Lcom/android/server/wm/WindowContainer;
@@ -59648,7 +61561,7 @@
 HSPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;->onMergedOverrideConfigurationChanged(Landroid/content/res/Configuration;)V
 HPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;->onRemoved()V
 HSPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;->register()V
-HSPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;->register(Z)V
+HSPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;->register(Z)V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/app/IWindowToken;Landroid/app/IWindowToken$Stub$Proxy;,Landroid/window/WindowTokenClient;
 HSPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;->reportConfigToWindowTokenClient()V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Landroid/app/IWindowToken;Landroid/app/IWindowToken$Stub$Proxy;,Landroid/window/WindowTokenClient;]Lcom/android/server/wm/ConfigurationContainer;megamorphic_types]Landroid/content/res/Configuration;Landroid/content/res/Configuration;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;->unregister()V+]Lcom/android/server/wm/WindowContainer;megamorphic_types]Landroid/util/ArrayMap;Landroid/util/ArrayMap;]Landroid/app/IWindowToken;Landroid/app/IWindowToken$Stub$Proxy;
 HSPLcom/android/server/wm/WindowContextListenerController$WindowContextListenerImpl;->updateContainer(Lcom/android/server/wm/WindowContainer;)V
@@ -59667,21 +61580,21 @@
 HSPLcom/android/server/wm/WindowFrames;->clearReportResizeHints()V
 HSPLcom/android/server/wm/WindowFrames;->didFrameSizeChange()Z+]Landroid/graphics/Rect;Landroid/graphics/Rect;
 HPLcom/android/server/wm/WindowFrames;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
-HPLcom/android/server/wm/WindowFrames;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
+HPLcom/android/server/wm/WindowFrames;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Landroid/graphics/Rect;Landroid/graphics/Rect;
 PLcom/android/server/wm/WindowFrames;->forceReportingResized()V
 HSPLcom/android/server/wm/WindowFrames;->hasContentChanged()Z
 HSPLcom/android/server/wm/WindowFrames;->hasInsetsChanged()Z
-HPLcom/android/server/wm/WindowFrames;->isFrameSizeChangeReported()Z
+HSPLcom/android/server/wm/WindowFrames;->isFrameSizeChangeReported()Z
 HSPLcom/android/server/wm/WindowFrames;->onResizeHandled()V
-HPLcom/android/server/wm/WindowFrames;->parentFrameWasClippedByDisplayCutout()Z
+HSPLcom/android/server/wm/WindowFrames;->parentFrameWasClippedByDisplayCutout()Z
 HSPLcom/android/server/wm/WindowFrames;->setContentChanged(Z)V
 HPLcom/android/server/wm/WindowFrames;->setInsetsChanged(Z)V
 HSPLcom/android/server/wm/WindowFrames;->setParentFrameWasClippedByDisplayCutout(Z)V
 HSPLcom/android/server/wm/WindowFrames;->setReportResizeHints()Z
 HSPLcom/android/server/wm/WindowList;-><init>()V
 PLcom/android/server/wm/WindowList;->addFirst(Ljava/lang/Object;)V
-HPLcom/android/server/wm/WindowList;->peekFirst()Ljava/lang/Object;
-HSPLcom/android/server/wm/WindowList;->peekLast()Ljava/lang/Object;
+HSPLcom/android/server/wm/WindowList;->peekFirst()Ljava/lang/Object;
+HSPLcom/android/server/wm/WindowList;->peekLast()Ljava/lang/Object;+]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/WindowManagerConstants$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/WindowManagerConstants;)V
 HSPLcom/android/server/wm/WindowManagerConstants$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/wm/WindowManagerConstants;)V
 PLcom/android/server/wm/WindowManagerConstants$$ExternalSyntheticLambda1;->onPropertiesChanged(Landroid/provider/DeviceConfig$Properties;)V
@@ -59697,9 +61610,9 @@
 HSPLcom/android/server/wm/WindowManagerConstants;->updateSystemGestureExclusionLogDebounceMillis()V
 HSPLcom/android/server/wm/WindowManagerGlobalLock;-><init>()V
 HSPLcom/android/server/wm/WindowManagerInternal$AppTransitionListener;-><init>()V
-PLcom/android/server/wm/WindowManagerInternal$AppTransitionListener;->onAppTransitionFinishedLocked(Landroid/os/IBinder;)V
-HPLcom/android/server/wm/WindowManagerInternal$AppTransitionListener;->onAppTransitionPendingLocked()V
-PLcom/android/server/wm/WindowManagerInternal$AppTransitionListener;->onAppTransitionStartingLocked(ZZJJJ)I
+HSPLcom/android/server/wm/WindowManagerInternal$AppTransitionListener;->onAppTransitionFinishedLocked(Landroid/os/IBinder;)V
+HSPLcom/android/server/wm/WindowManagerInternal$AppTransitionListener;->onAppTransitionPendingLocked()V
+HSPLcom/android/server/wm/WindowManagerInternal$AppTransitionListener;->onAppTransitionStartingLocked(ZZJJJ)I
 PLcom/android/server/wm/WindowManagerInternal$AppTransitionListener;->onAppTransitionTimeoutLocked()V
 PLcom/android/server/wm/WindowManagerInternal$IDragDropCallback;->dragRecipientEntered(Landroid/view/IWindow;)V
 PLcom/android/server/wm/WindowManagerInternal$IDragDropCallback;->dragRecipientExited(Landroid/view/IWindow;)V
@@ -59714,6 +61627,7 @@
 HSPLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda10;-><init>()V
 HSPLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda10;->get()Ljava/lang/Object;
 HSPLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda11;-><init>()V
+HSPLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda11;->get()Ljava/lang/Object;
 HSPLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda12;-><init>()V
 HSPLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda12;->apply(Ljava/lang/Object;)Ljava/lang/Object;
 HSPLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda13;-><init>()V
@@ -59727,6 +61641,7 @@
 HSPLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda17;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda1;-><init>(Landroid/app/IAssistDataReceiver;Landroid/graphics/Bitmap;)V
 PLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda1;->run()V
+PLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda20;-><init>()V
 HPLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda20;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HPLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda21;-><init>(Lcom/android/server/wm/WindowManagerService;)V
 HPLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda21;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
@@ -59735,7 +61650,7 @@
 PLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda23;-><init>(Ljava/io/PrintWriter;)V
 PLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda23;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda25;-><init>()V
-PLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda25;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda25;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HPLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda26;-><init>(Lcom/android/server/wm/WindowManagerService;)V
 PLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda26;->run()V
 PLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda2;-><init>(Landroid/view/SurfaceControl$Transaction;)V
@@ -59744,27 +61659,27 @@
 HSPLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda3;->run()V
 PLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda4;-><init>()V
 PLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda4;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda5;-><init>()V
+HSPLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda5;-><init>()V
 PLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda5;->test(Ljava/lang/Object;)Z
 HPLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda6;-><init>(Z)V
 HPLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda6;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda7;-><init>(Lcom/android/server/wm/WindowManagerService;)V
 PLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda7;->binderDied()V
 PLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda8;-><init>(Ljava/util/ArrayList;)V
-PLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda8;->accept(Ljava/lang/Object;)V
+HPLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda8;->accept(Ljava/lang/Object;)V
 PLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda9;-><init>()V
 PLcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda9;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/WindowManagerService$10;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/os/IBinder;)V
 PLcom/android/server/wm/WindowManagerService$10;->binderDied()V
 HSPLcom/android/server/wm/WindowManagerService$1;-><init>(Lcom/android/server/wm/WindowManagerService;)V
 HSPLcom/android/server/wm/WindowManagerService$2;-><init>(Lcom/android/server/wm/WindowManagerService;)V
-HPLcom/android/server/wm/WindowManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
+HPLcom/android/server/wm/WindowManagerService$2;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V+]Ljava/lang/String;Ljava/lang/String;]Lcom/android/server/wm/KeyguardDisableHandler;Lcom/android/server/wm/KeyguardDisableHandler;]Landroid/content/BroadcastReceiver;Lcom/android/server/wm/WindowManagerService$2;]Landroid/content/Intent;Landroid/content/Intent;
 HSPLcom/android/server/wm/WindowManagerService$3;-><init>(Lcom/android/server/wm/WindowManagerService;)V
 PLcom/android/server/wm/WindowManagerService$3;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
 PLcom/android/server/wm/WindowManagerService$3;->dumpCritical(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
 HSPLcom/android/server/wm/WindowManagerService$4;-><init>(Lcom/android/server/wm/WindowManagerService;)V
 PLcom/android/server/wm/WindowManagerService$4;->onAppTransitionCancelledLocked(Z)V
-HPLcom/android/server/wm/WindowManagerService$4;->onAppTransitionFinishedLocked(Landroid/os/IBinder;)V
+HSPLcom/android/server/wm/WindowManagerService$4;->onAppTransitionFinishedLocked(Landroid/os/IBinder;)V
 HSPLcom/android/server/wm/WindowManagerService$5;-><init>(Lcom/android/server/wm/WindowManagerService;)V
 HSPLcom/android/server/wm/WindowManagerService$5;->run()V
 HSPLcom/android/server/wm/WindowManagerService$6;-><init>(Lcom/android/server/wm/WindowManagerService;)V
@@ -59775,18 +61690,19 @@
 HSPLcom/android/server/wm/WindowManagerService$8;-><init>(Lcom/android/server/wm/WindowManagerService;)V
 HPLcom/android/server/wm/WindowManagerService$8;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V
 HSPLcom/android/server/wm/WindowManagerService$H;-><init>(Lcom/android/server/wm/WindowManagerService;)V
-HPLcom/android/server/wm/WindowManagerService$H;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/server/wm/WindowAnimator;Lcom/android/server/wm/WindowAnimator;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Ljava/lang/Runtime;Ljava/lang/Runtime;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Ljava/lang/Runnable;Lcom/android/server/policy/PhoneWindowManager$$ExternalSyntheticLambda2;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/RecentsAnimationController;Lcom/android/server/wm/RecentsAnimationController;]Landroid/os/Handler;Lcom/android/server/wm/WindowManagerService$H;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/WindowManagerService$AppFreezeListener;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/WindowManagerService$H;->handleMessage(Landroid/os/Message;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/ActivityRecord;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Landroid/os/Handler;Lcom/android/server/wm/WindowManagerService$H;]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/server/wm/WindowAnimator;Lcom/android/server/wm/WindowAnimator;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Ljava/lang/Runtime;Ljava/lang/Runtime;]Lcom/android/server/wm/RecentsAnimationController;Lcom/android/server/wm/RecentsAnimationController;]Landroid/content/Context;Landroid/app/ContextImpl;]Landroid/util/ArraySet;Landroid/util/ArraySet;]Landroid/app/ActivityManagerInternal;Lcom/android/server/am/ActivityManagerService$LocalService;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;]Landroid/view/IWindowSessionCallback;Landroid/view/IWindowSessionCallback$Stub$Proxy;,Landroid/view/WindowManagerGlobal$1;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Ljava/lang/Runnable;Lcom/android/server/policy/PhoneWindowManager$$ExternalSyntheticLambda2;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/WindowManagerService$AppFreezeListener;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/WindowManagerService$H;->sendNewMessageDelayed(ILjava/lang/Object;J)V
 HPLcom/android/server/wm/WindowManagerService$LocalService$$ExternalSyntheticLambda0;-><init>(Ljava/lang/String;FF)V
 HPLcom/android/server/wm/WindowManagerService$LocalService$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/WindowManagerService$LocalService$$ExternalSyntheticLambda1;-><init>(Ljava/lang/String;)V
+HPLcom/android/server/wm/WindowManagerService$LocalService$$ExternalSyntheticLambda1;-><init>(Ljava/lang/String;)V
 HPLcom/android/server/wm/WindowManagerService$LocalService$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
-PLcom/android/server/wm/WindowManagerService$LocalService;->$r8$lambda$hgvXe3t21W4lTXn3Msc9HAI2VkM(Ljava/lang/String;FFLcom/android/server/wm/DisplayContent;)V
+HPLcom/android/server/wm/WindowManagerService$LocalService;->$r8$lambda$hgvXe3t21W4lTXn3Msc9HAI2VkM(Ljava/lang/String;FFLcom/android/server/wm/DisplayContent;)V
 PLcom/android/server/wm/WindowManagerService$LocalService;->$r8$lambda$zG_Xgx4e-xyV78pyyeRruTNDb9s(Ljava/lang/String;Lcom/android/server/wm/DisplayContent;)V
 HSPLcom/android/server/wm/WindowManagerService$LocalService;-><init>(Lcom/android/server/wm/WindowManagerService;)V
 HSPLcom/android/server/wm/WindowManagerService$LocalService;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService$LocalService-IA;)V
 HPLcom/android/server/wm/WindowManagerService$LocalService;->addRefreshRateRangeForPackage(Ljava/lang/String;FF)V
-PLcom/android/server/wm/WindowManagerService$LocalService;->addWindowToken(Landroid/os/IBinder;IILandroid/os/Bundle;)V
+PLcom/android/server/wm/WindowManagerService$LocalService;->addTrustedTaskOverlay(ILandroid/view/SurfaceControlViewHost$SurfacePackage;)V
+HSPLcom/android/server/wm/WindowManagerService$LocalService;->addWindowToken(Landroid/os/IBinder;IILandroid/os/Bundle;)V
 HSPLcom/android/server/wm/WindowManagerService$LocalService;->clearSnapshotCache()V
 HPLcom/android/server/wm/WindowManagerService$LocalService;->computeWindowsForAccessibility(I)V
 HSPLcom/android/server/wm/WindowManagerService$LocalService;->getAccessibilityController()Lcom/android/server/wm/WindowManagerInternal$AccessibilityControllerInternal;
@@ -59798,22 +61714,25 @@
 PLcom/android/server/wm/WindowManagerService$LocalService;->getInputMethodWindowVisibleHeight(I)I
 PLcom/android/server/wm/WindowManagerService$LocalService;->getKeyInterceptionInfoFromToken(Landroid/os/IBinder;)Lcom/android/internal/policy/KeyInterceptionInfo;
 PLcom/android/server/wm/WindowManagerService$LocalService;->getMagnificationRegion(ILandroid/graphics/Region;)V
-HPLcom/android/server/wm/WindowManagerService$LocalService;->getTopFocusedDisplayId()I
+HPLcom/android/server/wm/WindowManagerService$LocalService;->getTopFocusedDisplayId()I+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
 PLcom/android/server/wm/WindowManagerService$LocalService;->getTopFocusedDisplayUiContext()Landroid/content/Context;
-PLcom/android/server/wm/WindowManagerService$LocalService;->getWindowName(Landroid/os/IBinder;)Ljava/lang/String;
+PLcom/android/server/wm/WindowManagerService$LocalService;->getWindowFrame(Landroid/os/IBinder;Landroid/graphics/Rect;)V
+HPLcom/android/server/wm/WindowManagerService$LocalService;->getWindowName(Landroid/os/IBinder;)Ljava/lang/String;
 PLcom/android/server/wm/WindowManagerService$LocalService;->getWindowOwnerUserId(Landroid/os/IBinder;)I
 HPLcom/android/server/wm/WindowManagerService$LocalService;->getWindowTransformationMatrixAndMagnificationSpec(Landroid/os/IBinder;)Landroid/util/Pair;
-HPLcom/android/server/wm/WindowManagerService$LocalService;->hasInputMethodClientFocus(Landroid/os/IBinder;III)I
+HPLcom/android/server/wm/WindowManagerService$LocalService;->hasInputMethodClientFocus(Landroid/os/IBinder;III)I+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/InputTarget;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
 HPLcom/android/server/wm/WindowManagerService$LocalService;->hideIme(Landroid/os/IBinder;I)V
 HPLcom/android/server/wm/WindowManagerService$LocalService;->isHardKeyboardAvailable()Z
-HPLcom/android/server/wm/WindowManagerService$LocalService;->isKeyguardShowingAndNotOccluded()Z+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
+HSPLcom/android/server/wm/WindowManagerService$LocalService;->isKeyguardShowingAndNotOccluded()Z+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
 PLcom/android/server/wm/WindowManagerService$LocalService;->isTouchOrFaketouchDevice()Z
-HPLcom/android/server/wm/WindowManagerService$LocalService;->isUidFocused(I)Z
+HPLcom/android/server/wm/WindowManagerService$LocalService;->isUidFocused(I)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HPLcom/android/server/wm/WindowManagerService$LocalService;->lambda$addRefreshRateRangeForPackage$0(Ljava/lang/String;FFLcom/android/server/wm/DisplayContent;)V
 HPLcom/android/server/wm/WindowManagerService$LocalService;->lambda$removeRefreshRateRangeForPackage$1(Ljava/lang/String;Lcom/android/server/wm/DisplayContent;)V
-HPLcom/android/server/wm/WindowManagerService$LocalService;->onToggleImeRequested(ZLandroid/os/IBinder;Landroid/os/IBinder;I)Lcom/android/server/wm/WindowManagerInternal$ImeTargetInfo;
+HPLcom/android/server/wm/WindowManagerService$LocalService;->onToggleImeRequested(ZLandroid/os/IBinder;Landroid/os/IBinder;I)Lcom/android/server/wm/WindowManagerInternal$ImeTargetInfo;+]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/lang/Object;Lcom/android/server/wm/DisplayContent$RemoteInsetsControlTarget;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
 HSPLcom/android/server/wm/WindowManagerService$LocalService;->registerAppTransitionListener(Lcom/android/server/wm/WindowManagerInternal$AppTransitionListener;)V
+PLcom/android/server/wm/WindowManagerService$LocalService;->registerTaskSystemBarsListener(Lcom/android/server/wm/WindowManagerInternal$TaskSystemBarsListener;)V
 HPLcom/android/server/wm/WindowManagerService$LocalService;->removeRefreshRateRangeForPackage(Ljava/lang/String;)V
+PLcom/android/server/wm/WindowManagerService$LocalService;->removeTrustedTaskOverlay(ILandroid/view/SurfaceControlViewHost$SurfacePackage;)V
 PLcom/android/server/wm/WindowManagerService$LocalService;->removeWindowToken(Landroid/os/IBinder;ZZI)V
 PLcom/android/server/wm/WindowManagerService$LocalService;->reportPasswordChanged(I)V
 HSPLcom/android/server/wm/WindowManagerService$LocalService;->requestTraversalFromDisplayManager()V
@@ -59828,8 +61747,9 @@
 PLcom/android/server/wm/WindowManagerService$LocalService;->setWindowsForAccessibilityCallback(ILcom/android/server/wm/WindowManagerInternal$WindowsForAccessibilityCallback;)V
 PLcom/android/server/wm/WindowManagerService$LocalService;->shouldRestoreImeVisibility(Landroid/os/IBinder;)Z
 HSPLcom/android/server/wm/WindowManagerService$LocalService;->shouldShowSystemDecorOnDisplay(I)Z
-HPLcom/android/server/wm/WindowManagerService$LocalService;->showImePostLayout(Landroid/os/IBinder;)V
-HPLcom/android/server/wm/WindowManagerService$LocalService;->updateInputMethodTargetWindow(Landroid/os/IBinder;Landroid/os/IBinder;)V
+HPLcom/android/server/wm/WindowManagerService$LocalService;->showImePostLayout(Landroid/os/IBinder;)V+]Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ImeInsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/InputTarget;Lcom/android/server/wm/WindowState;
+PLcom/android/server/wm/WindowManagerService$LocalService;->unregisterTaskSystemBarsListener(Lcom/android/server/wm/WindowManagerInternal$TaskSystemBarsListener;)V
+HPLcom/android/server/wm/WindowManagerService$LocalService;->updateInputMethodTargetWindow(Landroid/os/IBinder;Landroid/os/IBinder;)V+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/InputTarget;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowManagerService$LocalService;->waitForAllWindowsDrawn(Ljava/lang/Runnable;JI)V
 HPLcom/android/server/wm/WindowManagerService$MousePositionTracker;->-$$Nest$fgetmLatestEventWasMouse(Lcom/android/server/wm/WindowManagerService$MousePositionTracker;)Z
 PLcom/android/server/wm/WindowManagerService$MousePositionTracker;->-$$Nest$fgetmLatestMouseX(Lcom/android/server/wm/WindowManagerService$MousePositionTracker;)F
@@ -59837,7 +61757,7 @@
 PLcom/android/server/wm/WindowManagerService$MousePositionTracker;->-$$Nest$fgetmPointerDisplayId(Lcom/android/server/wm/WindowManagerService$MousePositionTracker;)I
 HSPLcom/android/server/wm/WindowManagerService$MousePositionTracker;-><init>()V
 HSPLcom/android/server/wm/WindowManagerService$MousePositionTracker;-><init>(Lcom/android/server/wm/WindowManagerService$MousePositionTracker-IA;)V
-HPLcom/android/server/wm/WindowManagerService$MousePositionTracker;->onPointerEvent(Landroid/view/MotionEvent;)V+]Landroid/view/MotionEvent;Landroid/view/MotionEvent;
+HPLcom/android/server/wm/WindowManagerService$MousePositionTracker;->onPointerEvent(Landroid/view/MotionEvent;)V+]Landroid/view/MotionEvent;Landroid/view/MotionEvent;]Lcom/android/server/wm/WindowManagerService$MousePositionTracker;Lcom/android/server/wm/WindowManagerService$MousePositionTracker;
 HSPLcom/android/server/wm/WindowManagerService$MousePositionTracker;->setPointerDisplayId(I)V
 HSPLcom/android/server/wm/WindowManagerService$MousePositionTracker;->updatePosition(IFF)Z
 HSPLcom/android/server/wm/WindowManagerService$RotationWatcher;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/view/IRotationWatcher;Landroid/os/IBinder$DeathRecipient;I)V
@@ -59867,7 +61787,7 @@
 PLcom/android/server/wm/WindowManagerService;->$r8$lambda$pbTFRJMFC6d1E44Q-XSjIVaQdKo(Lcom/android/server/wm/WindowManagerService;)V
 PLcom/android/server/wm/WindowManagerService;->-$$Nest$fgetmAnimationsDisabled(Lcom/android/server/wm/WindowManagerService;)Z
 PLcom/android/server/wm/WindowManagerService;->-$$Nest$fgetmAnimatorDurationScaleSetting(Lcom/android/server/wm/WindowManagerService;)F
-PLcom/android/server/wm/WindowManagerService;->-$$Nest$fgetmKeyguardDisableHandler(Lcom/android/server/wm/WindowManagerService;)Lcom/android/server/wm/KeyguardDisableHandler;
+HPLcom/android/server/wm/WindowManagerService;->-$$Nest$fgetmKeyguardDisableHandler(Lcom/android/server/wm/WindowManagerService;)Lcom/android/server/wm/KeyguardDisableHandler;
 PLcom/android/server/wm/WindowManagerService;->-$$Nest$fgetmRecentsAnimationController(Lcom/android/server/wm/WindowManagerService;)Lcom/android/server/wm/RecentsAnimationController;
 HPLcom/android/server/wm/WindowManagerService;->-$$Nest$fgetmTransaction(Lcom/android/server/wm/WindowManagerService;)Landroid/view/SurfaceControl$Transaction;
 PLcom/android/server/wm/WindowManagerService;->-$$Nest$fgetmTransitionAnimationScaleSetting(Lcom/android/server/wm/WindowManagerService;)F
@@ -59879,7 +61799,8 @@
 PLcom/android/server/wm/WindowManagerService;->-$$Nest$mdoDump(Lcom/android/server/wm/WindowManagerService;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
 PLcom/android/server/wm/WindowManagerService;->-$$Nest$mnotifyWindowsChanged(Lcom/android/server/wm/WindowManagerService;)V
 HPLcom/android/server/wm/WindowManagerService;->-$$Nest$monPointerDownOutsideFocusLocked(Lcom/android/server/wm/WindowManagerService;Landroid/os/IBinder;)V+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
-PLcom/android/server/wm/WindowManagerService;->-$$Nest$mperformEnableScreen(Lcom/android/server/wm/WindowManagerService;)V
+HSPLcom/android/server/wm/WindowManagerService;->-$$Nest$mperformEnableScreen(Lcom/android/server/wm/WindowManagerService;)V
+HSPLcom/android/server/wm/WindowManagerService;->-$$Nest$mshowStrictModeViolation(Lcom/android/server/wm/WindowManagerService;II)V
 PLcom/android/server/wm/WindowManagerService;->-$$Nest$mupdateAppOpsState(Lcom/android/server/wm/WindowManagerService;)V
 PLcom/android/server/wm/WindowManagerService;->-$$Nest$mupdateHiddenWhileSuspendedState(Lcom/android/server/wm/WindowManagerService;Landroid/util/ArraySet;Z)V
 HSPLcom/android/server/wm/WindowManagerService;-><clinit>()V
@@ -59888,11 +61809,11 @@
 PLcom/android/server/wm/WindowManagerService;->addShellRoot(ILandroid/view/IWindow;I)Landroid/view/SurfaceControl;
 HSPLcom/android/server/wm/WindowManagerService;->addWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;Landroid/view/WindowManager$LayoutParams;IIILandroid/view/InsetsVisibilities;Landroid/view/InputChannel;Landroid/view/InsetsState;[Landroid/view/InsetsSourceControl;)I
 PLcom/android/server/wm/WindowManagerService;->addWindowChangeListener(Lcom/android/server/wm/WindowManagerService$WindowChangeListener;)V
-HPLcom/android/server/wm/WindowManagerService;->addWindowToken(Landroid/os/IBinder;IILandroid/os/Bundle;)V
+HSPLcom/android/server/wm/WindowManagerService;->addWindowToken(Landroid/os/IBinder;IILandroid/os/Bundle;)V
 HSPLcom/android/server/wm/WindowManagerService;->applyForcedPropertiesForDefaultDisplay()Z
 PLcom/android/server/wm/WindowManagerService;->applyMagnificationSpecLocked(ILandroid/view/MagnificationSpec;)V
 HSPLcom/android/server/wm/WindowManagerService;->attachToDisplayContent(Landroid/os/IBinder;I)Landroid/content/res/Configuration;
-HSPLcom/android/server/wm/WindowManagerService;->attachWindowContextToDisplayArea(Landroid/os/IBinder;IILandroid/os/Bundle;)Landroid/content/res/Configuration;
+HSPLcom/android/server/wm/WindowManagerService;->attachWindowContextToDisplayArea(Landroid/os/IBinder;IILandroid/os/Bundle;)Landroid/content/res/Configuration;+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/DisplayArea$Tokens;,Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/DisplayContent$ImeContainer;]Lcom/android/server/wm/WindowContextListenerController;Lcom/android/server/wm/WindowContextListenerController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
 HPLcom/android/server/wm/WindowManagerService;->attachWindowContextToWindowToken(Landroid/os/IBinder;Landroid/os/IBinder;)V
 HSPLcom/android/server/wm/WindowManagerService;->boostPriorityForLockedSection()V+]Lcom/android/server/wm/WindowManagerThreadPriorityBooster;Lcom/android/server/wm/WindowManagerThreadPriorityBooster;
 PLcom/android/server/wm/WindowManagerService;->cancelRecentsAnimation(ILjava/lang/String;)V
@@ -59911,9 +61832,9 @@
 HSPLcom/android/server/wm/WindowManagerService;->createSurfaceControl(Landroid/view/SurfaceControl;ILcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowStateAnimator;)I+]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;]Lcom/android/server/wm/WindowSurfaceController;Lcom/android/server/wm/WindowSurfaceController;
 HSPLcom/android/server/wm/WindowManagerService;->createWatermark()V
 HPLcom/android/server/wm/WindowManagerService;->destroyInputConsumer(Ljava/lang/String;I)Z
-HPLcom/android/server/wm/WindowManagerService;->detachWindowContextFromWindowContainer(Landroid/os/IBinder;)V
+HPLcom/android/server/wm/WindowManagerService;->detachWindowContextFromWindowContainer(Landroid/os/IBinder;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayArea$Tokens;,Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/DisplayContent$ImeContainer;,Lcom/android/server/wm/WindowToken;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/WindowContextListenerController;Lcom/android/server/wm/WindowContextListenerController;]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WindowToken;
 HSPLcom/android/server/wm/WindowManagerService;->detectSafeMode()Z
-HPLcom/android/server/wm/WindowManagerService;->dipToPixel(ILandroid/util/DisplayMetrics;)I
+HSPLcom/android/server/wm/WindowManagerService;->dipToPixel(ILandroid/util/DisplayMetrics;)I
 PLcom/android/server/wm/WindowManagerService;->disableKeyguard(Landroid/os/IBinder;Ljava/lang/String;I)V
 PLcom/android/server/wm/WindowManagerService;->dismissKeyguard(Lcom/android/internal/policy/IKeyguardDismissCallback;Ljava/lang/CharSequence;)V
 HPLcom/android/server/wm/WindowManagerService;->dispatchKeyguardLockedState()V
@@ -59925,7 +61846,7 @@
 PLcom/android/server/wm/WindowManagerService;->doesAddToastWindowRequireToken(Ljava/lang/String;ILcom/android/server/wm/WindowState;)Z
 PLcom/android/server/wm/WindowManagerService;->dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V
 PLcom/android/server/wm/WindowManagerService;->dumpAnimatorLocked(Ljava/io/PrintWriter;[Ljava/lang/String;Z)V
-PLcom/android/server/wm/WindowManagerService;->dumpDebugLocked(Landroid/util/proto/ProtoOutputStream;I)V
+HPLcom/android/server/wm/WindowManagerService;->dumpDebugLocked(Landroid/util/proto/ProtoOutputStream;I)V
 PLcom/android/server/wm/WindowManagerService;->dumpHighRefreshRateBlacklist(Ljava/io/PrintWriter;)V
 PLcom/android/server/wm/WindowManagerService;->dumpLastANRLocked(Ljava/io/PrintWriter;)V
 PLcom/android/server/wm/WindowManagerService;->dumpLogStatus(Ljava/io/PrintWriter;)V
@@ -59934,14 +61855,14 @@
 PLcom/android/server/wm/WindowManagerService;->dumpTokensLocked(Ljava/io/PrintWriter;Z)V
 PLcom/android/server/wm/WindowManagerService;->dumpTraceStatus(Ljava/io/PrintWriter;)V
 PLcom/android/server/wm/WindowManagerService;->dumpWindowsLocked(Ljava/io/PrintWriter;ZLjava/util/ArrayList;)V
-PLcom/android/server/wm/WindowManagerService;->dumpWindowsNoHeaderLocked(Ljava/io/PrintWriter;ZLjava/util/ArrayList;)V
-PLcom/android/server/wm/WindowManagerService;->enableScreenAfterBoot()V
+HPLcom/android/server/wm/WindowManagerService;->dumpWindowsNoHeaderLocked(Ljava/io/PrintWriter;ZLjava/util/ArrayList;)V
+HSPLcom/android/server/wm/WindowManagerService;->enableScreenAfterBoot()V
 PLcom/android/server/wm/WindowManagerService;->enableScreenIfNeeded()V
 HSPLcom/android/server/wm/WindowManagerService;->enableScreenIfNeededLocked()V
 PLcom/android/server/wm/WindowManagerService;->enforceSubscribeToKeyguardLockedStatePermission()V
 HSPLcom/android/server/wm/WindowManagerService;->excludeWindowTypeFromTapOutTask(I)Z
 HPLcom/android/server/wm/WindowManagerService;->executeAppTransition()V
-HSPLcom/android/server/wm/WindowManagerService;->finishDrawingWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;Landroid/view/SurfaceControl$Transaction;I)V
+HSPLcom/android/server/wm/WindowManagerService;->finishDrawingWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;Landroid/view/SurfaceControl$Transaction;I)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;
 PLcom/android/server/wm/WindowManagerService;->fixScale(F)F
 PLcom/android/server/wm/WindowManagerService;->freezeDisplayRotation(II)V
 PLcom/android/server/wm/WindowManagerService;->freezeRotation(I)V
@@ -59964,11 +61885,12 @@
 PLcom/android/server/wm/WindowManagerService;->getInitialDisplaySize(ILandroid/graphics/Point;)V
 HSPLcom/android/server/wm/WindowManagerService;->getInputManagerCallback()Lcom/android/server/wm/InputManagerCallback;
 HPLcom/android/server/wm/WindowManagerService;->getInputTargetFromToken(Landroid/os/IBinder;)Lcom/android/server/wm/InputTarget;+]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/server/wm/EmbeddedWindowController;Lcom/android/server/wm/EmbeddedWindowController;
-HPLcom/android/server/wm/WindowManagerService;->getInputTargetFromWindowTokenLocked(Landroid/os/IBinder;)Lcom/android/server/wm/InputTarget;
+HPLcom/android/server/wm/WindowManagerService;->getInputTargetFromWindowTokenLocked(Landroid/os/IBinder;)Lcom/android/server/wm/InputTarget;+]Ljava/util/HashMap;Ljava/util/HashMap;
 HSPLcom/android/server/wm/WindowManagerService;->getInsetsSourceControls(Lcom/android/server/wm/WindowState;[Landroid/view/InsetsSourceControl;)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/view/InsetsSourceControl;Landroid/view/InsetsSourceControl;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HPLcom/android/server/wm/WindowManagerService;->getLatestMousePosition()Landroid/graphics/PointF;
 HSPLcom/android/server/wm/WindowManagerService;->getLidState()I
 PLcom/android/server/wm/WindowManagerService;->getNavBarPosition(I)I
+HSPLcom/android/server/wm/WindowManagerService;->getPossibleDisplayInfo(ILjava/lang/String;)Ljava/util/List;
 HSPLcom/android/server/wm/WindowManagerService;->getRecentsAnimationController()Lcom/android/server/wm/RecentsAnimationController;
 PLcom/android/server/wm/WindowManagerService;->getStableInsets(ILandroid/graphics/Rect;)V
 PLcom/android/server/wm/WindowManagerService;->getStableInsetsLocked(ILandroid/graphics/Rect;)V
@@ -59986,7 +61908,7 @@
 HSPLcom/android/server/wm/WindowManagerService;->hasNavigationBar(I)Z
 PLcom/android/server/wm/WindowManagerService;->hasStatusBarPermission(II)Z
 HSPLcom/android/server/wm/WindowManagerService;->hasWideColorGamutSupport()Z
-PLcom/android/server/wm/WindowManagerService;->hideBootMessagesLocked()V
+HSPLcom/android/server/wm/WindowManagerService;->hideBootMessagesLocked()V
 PLcom/android/server/wm/WindowManagerService;->hideTransientBars(I)V
 HSPLcom/android/server/wm/WindowManagerService;->inSurfaceTransaction(Ljava/lang/Runnable;)V
 HSPLcom/android/server/wm/WindowManagerService;->initPolicy()V
@@ -59997,14 +61919,15 @@
 HSPLcom/android/server/wm/WindowManagerService;->isIgnoreOrientationRequestDisabled()Z
 HSPLcom/android/server/wm/WindowManagerService;->isKeyguardLocked()Z+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;
 HPLcom/android/server/wm/WindowManagerService;->isKeyguardSecure(I)Z+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;
-HPLcom/android/server/wm/WindowManagerService;->isKeyguardShowingAndNotOccluded()Z+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;
-HPLcom/android/server/wm/WindowManagerService;->isRecentsAnimationTarget(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/WindowManagerService;->isKeyguardShowingAndNotOccluded()Z+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;
+HSPLcom/android/server/wm/WindowManagerService;->isRecentsAnimationTarget(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/WindowManagerService;->isRecentsComponent(Ljava/lang/String;I)Z
 PLcom/android/server/wm/WindowManagerService;->isRotationFrozen()Z
 PLcom/android/server/wm/WindowManagerService;->isSafeModeEnabled()Z
 PLcom/android/server/wm/WindowManagerService;->isSystemSecure()Z
 PLcom/android/server/wm/WindowManagerService;->isValidPictureInPictureAspectRatio(Lcom/android/server/wm/DisplayContent;F)Z
 PLcom/android/server/wm/WindowManagerService;->isWindowTraceEnabled()Z
-HPLcom/android/server/wm/WindowManagerService;->lambda$checkDrawnWindowsLocked$8(Lcom/android/server/wm/WindowContainer;Ljava/lang/Runnable;)V
+HPLcom/android/server/wm/WindowManagerService;->lambda$checkDrawnWindowsLocked$8(Lcom/android/server/wm/WindowContainer;Ljava/lang/Runnable;)V+]Landroid/os/Handler;Lcom/android/server/wm/WindowManagerService$H;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/wm/WindowManagerService;->lambda$cleanupRecentsAnimation$2(Lcom/android/server/wm/WindowContainer;)V
 HPLcom/android/server/wm/WindowManagerService;->lambda$dispatchKeyguardLockedState$3()V
 PLcom/android/server/wm/WindowManagerService;->lambda$dumpWindowsNoHeaderLocked$10(Ljava/io/PrintWriter;Lcom/android/server/wm/DisplayContent;)V
@@ -60029,29 +61952,29 @@
 PLcom/android/server/wm/WindowManagerService;->notifyHardKeyboardStatusChange()V
 HPLcom/android/server/wm/WindowManagerService;->notifyKeyguardTrustedChanged()V
 PLcom/android/server/wm/WindowManagerService;->notifyWindowsChanged()V
-HPLcom/android/server/wm/WindowManagerService;->onAnimationFinished()V
+HSPLcom/android/server/wm/WindowManagerService;->onAnimationFinished()V
 HSPLcom/android/server/wm/WindowManagerService;->onInitReady()V
 HPLcom/android/server/wm/WindowManagerService;->onKeyguardShowingAndNotOccludedChanged()V
 PLcom/android/server/wm/WindowManagerService;->onLockTaskStateChanged(I)V
 PLcom/android/server/wm/WindowManagerService;->onOverlayChanged()V
-HPLcom/android/server/wm/WindowManagerService;->onPointerDownOutsideFocusLocked(Landroid/os/IBinder;)V+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/InputTarget;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;]Lcom/android/server/wm/RecentsAnimationController;Lcom/android/server/wm/RecentsAnimationController;
+HPLcom/android/server/wm/WindowManagerService;->onPointerDownOutsideFocusLocked(Landroid/os/IBinder;)V+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/RecentsAnimationController;Lcom/android/server/wm/RecentsAnimationController;]Lcom/android/server/wm/InputTarget;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/EmbeddedWindowController$EmbeddedWindow;
 HPLcom/android/server/wm/WindowManagerService;->onPowerKeyDown(Z)V
 HPLcom/android/server/wm/WindowManagerService;->onRectangleOnScreenRequested(Landroid/os/IBinder;Landroid/graphics/Rect;)V+]Ljava/util/HashMap;Ljava/util/HashMap;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/AccessibilityController$AccessibilityControllerInternalImpl;Lcom/android/server/wm/AccessibilityController$AccessibilityControllerInternalImpl;
 PLcom/android/server/wm/WindowManagerService;->onShellCommand(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;[Ljava/lang/String;Landroid/os/ShellCallback;Landroid/os/ResultReceiver;)V
-PLcom/android/server/wm/WindowManagerService;->onSystemUiStarted()V
+HSPLcom/android/server/wm/WindowManagerService;->onSystemUiStarted()V
 HSPLcom/android/server/wm/WindowManagerService;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
-PLcom/android/server/wm/WindowManagerService;->onUserSwitched()V
+HSPLcom/android/server/wm/WindowManagerService;->onUserSwitched()V
 HSPLcom/android/server/wm/WindowManagerService;->openSession(Landroid/view/IWindowSessionCallback;)Landroid/view/IWindowSession;
 HSPLcom/android/server/wm/WindowManagerService;->openSurfaceTransaction()V
 PLcom/android/server/wm/WindowManagerService;->overridePendingAppTransitionMultiThumbFuture(Landroid/view/IAppTransitionAnimationSpecsFuture;Landroid/os/IRemoteCallback;ZI)V
 PLcom/android/server/wm/WindowManagerService;->overridePendingAppTransitionRemote(Landroid/view/RemoteAnimationAdapter;I)V
 PLcom/android/server/wm/WindowManagerService;->performBootTimeout()V
-PLcom/android/server/wm/WindowManagerService;->performEnableScreen()V
+HSPLcom/android/server/wm/WindowManagerService;->performEnableScreen()V
 HPLcom/android/server/wm/WindowManagerService;->pokeDrawLock(Lcom/android/server/wm/Session;Landroid/os/IBinder;)V
 HPLcom/android/server/wm/WindowManagerService;->postWindowRemoveCleanupLocked(Lcom/android/server/wm/WindowState;)V
 HPLcom/android/server/wm/WindowManagerService;->prepareAppTransitionNone()V
-HPLcom/android/server/wm/WindowManagerService;->prepareNoneTransitionForRelaunching(Lcom/android/server/wm/ActivityRecord;)V
-HPLcom/android/server/wm/WindowManagerService;->prepareWindowReplacementTransition(Lcom/android/server/wm/ActivityRecord;)Z
+HSPLcom/android/server/wm/WindowManagerService;->prepareNoneTransitionForRelaunching(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/WindowManagerService;->prepareWindowReplacementTransition(Lcom/android/server/wm/ActivityRecord;)Z
 HSPLcom/android/server/wm/WindowManagerService;->queryHdrSupport()Z
 HSPLcom/android/server/wm/WindowManagerService;->queryWideColorGamutSupport()Z
 PLcom/android/server/wm/WindowManagerService;->reenableKeyguard(Landroid/os/IBinder;I)V
@@ -60060,7 +61983,8 @@
 HSPLcom/android/server/wm/WindowManagerService;->registerDisplayWindowListener(Landroid/view/IDisplayWindowListener;)[I
 HSPLcom/android/server/wm/WindowManagerService;->registerPinnedTaskListener(ILandroid/view/IPinnedTaskListener;)V
 PLcom/android/server/wm/WindowManagerService;->registerShortcutKey(JLcom/android/internal/policy/IShortcutService;)V
-HPLcom/android/server/wm/WindowManagerService;->registerSystemGestureExclusionListener(Landroid/view/ISystemGestureExclusionListener;I)V
+HSPLcom/android/server/wm/WindowManagerService;->registerSystemGestureExclusionListener(Landroid/view/ISystemGestureExclusionListener;I)V
+PLcom/android/server/wm/WindowManagerService;->registerTaskFpsCallback(ILandroid/window/ITaskFpsCallback;)V
 PLcom/android/server/wm/WindowManagerService;->registerWallpaperVisibilityListener(Landroid/view/IWallpaperVisibilityListener;I)Z
 HSPLcom/android/server/wm/WindowManagerService;->relayoutWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;Landroid/view/WindowManager$LayoutParams;IIIILandroid/window/ClientWindowFrames;Landroid/util/MergedConfiguration;Landroid/view/SurfaceControl;Landroid/view/InsetsState;[Landroid/view/InsetsSourceControl;Landroid/os/Bundle;)I+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/os/Bundle;Landroid/os/Bundle;]Lcom/android/server/wm/WindowSurfaceController;Lcom/android/server/wm/WindowSurfaceController;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;]Lcom/android/server/wm/DisplayWindowPolicyControllerHelper;Lcom/android/server/wm/DisplayWindowPolicyControllerHelper;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;]Lcom/android/server/wm/AccessibilityController;Lcom/android/server/wm/AccessibilityController;]Lcom/android/server/wm/UnknownAppVisibilityController;Lcom/android/server/wm/UnknownAppVisibilityController;]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/WindowManagerService;->removeKeyguardLockedStateListener(Lcom/android/internal/policy/IKeyguardLockedStateListener;)V
@@ -60079,7 +62003,7 @@
 HSPLcom/android/server/wm/WindowManagerService;->restorePointerIconLocked(Lcom/android/server/wm/DisplayContent;FF)V
 HSPLcom/android/server/wm/WindowManagerService;->sanitizeFlagSlippery(ILjava/lang/String;II)I+]Landroid/content/Context;Landroid/app/ContextImpl;
 HSPLcom/android/server/wm/WindowManagerService;->sanitizeSpyWindow(ILjava/lang/String;II)I
-PLcom/android/server/wm/WindowManagerService;->saveANRStateLocked(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/WindowState;Ljava/lang/String;)V
+HPLcom/android/server/wm/WindowManagerService;->saveANRStateLocked(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/WindowState;Ljava/lang/String;)V
 HSPLcom/android/server/wm/WindowManagerService;->scheduleAnimationLocked()V+]Lcom/android/server/wm/WindowAnimator;Lcom/android/server/wm/WindowAnimator;
 PLcom/android/server/wm/WindowManagerService;->scheduleClearWillReplaceWindows(Landroid/os/IBinder;Z)V
 PLcom/android/server/wm/WindowManagerService;->scheduleWindowReplacementTimeouts(Lcom/android/server/wm/ActivityRecord;)V
@@ -60092,12 +62016,12 @@
 HSPLcom/android/server/wm/WindowManagerService;->setDisplayWindowInsetsController(ILandroid/view/IDisplayWindowInsetsController;)V
 HSPLcom/android/server/wm/WindowManagerService;->setDisplayWindowRotationController(Landroid/view/IDisplayWindowRotationController;)V
 PLcom/android/server/wm/WindowManagerService;->setDockedRootTaskResizing(Z)V
-PLcom/android/server/wm/WindowManagerService;->setEventDispatching(Z)V
+HSPLcom/android/server/wm/WindowManagerService;->setEventDispatching(Z)V
 PLcom/android/server/wm/WindowManagerService;->setForcedDisplayDensityForUser(III)V
 HSPLcom/android/server/wm/WindowManagerService;->setGlobalShadowSettings()V
 HSPLcom/android/server/wm/WindowManagerService;->setHoldScreenLocked(Lcom/android/server/wm/Session;)V+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;]Landroid/os/PowerManager$WakeLock;Landroid/os/PowerManager$WakeLock;
 PLcom/android/server/wm/WindowManagerService;->setInTouchMode(Z)V
-HPLcom/android/server/wm/WindowManagerService;->setInsetsWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;ILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Region;)V
+HSPLcom/android/server/wm/WindowManagerService;->setInsetsWindow(Lcom/android/server/wm/Session;Landroid/view/IWindow;ILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Region;)V+]Landroid/graphics/Region;Landroid/graphics/Region;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/AccessibilityController;Lcom/android/server/wm/AccessibilityController;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/InputMonitor;Lcom/android/server/wm/InputMonitor;
 HSPLcom/android/server/wm/WindowManagerService;->setMousePointerDisplayId(I)V
 HPLcom/android/server/wm/WindowManagerService;->setNavBarVirtualKeyHapticFeedbackEnabled(Z)V
 PLcom/android/server/wm/WindowManagerService;->setShellRootAccessibilityWindow(IILandroid/view/IWindow;)V
@@ -60110,10 +62034,12 @@
 HSPLcom/android/server/wm/WindowManagerService;->shouldShowSystemDecors(I)Z
 HSPLcom/android/server/wm/WindowManagerService;->showEmulatorDisplayOverlayIfNeeded()V
 PLcom/android/server/wm/WindowManagerService;->showGlobalActions()V
+HSPLcom/android/server/wm/WindowManagerService;->showStrictModeViolation(II)V
+HSPLcom/android/server/wm/WindowManagerService;->showStrictModeViolation(Z)V
 PLcom/android/server/wm/WindowManagerService;->shutdown(Z)V
 PLcom/android/server/wm/WindowManagerService;->startFreezingDisplay(II)V
 PLcom/android/server/wm/WindowManagerService;->startFreezingDisplay(IILcom/android/server/wm/DisplayContent;)V
-PLcom/android/server/wm/WindowManagerService;->startFreezingDisplay(IILcom/android/server/wm/DisplayContent;I)V
+HPLcom/android/server/wm/WindowManagerService;->startFreezingDisplay(IILcom/android/server/wm/DisplayContent;I)V
 PLcom/android/server/wm/WindowManagerService;->startFreezingScreen(II)V
 PLcom/android/server/wm/WindowManagerService;->startViewServer(I)Z
 PLcom/android/server/wm/WindowManagerService;->startWindowTrace()V
@@ -60121,11 +62047,12 @@
 PLcom/android/server/wm/WindowManagerService;->stopFreezingScreen()V
 PLcom/android/server/wm/WindowManagerService;->stopViewServer()Z
 PLcom/android/server/wm/WindowManagerService;->stopWindowTrace()V
+PLcom/android/server/wm/WindowManagerService;->switchKeyboardLayout(II)V
 PLcom/android/server/wm/WindowManagerService;->syncInputTransactions(Z)V
 HSPLcom/android/server/wm/WindowManagerService;->systemReady()V
 PLcom/android/server/wm/WindowManagerService;->thawDisplayRotation(I)V
 PLcom/android/server/wm/WindowManagerService;->thawRotation()V
-PLcom/android/server/wm/WindowManagerService;->triggerAnimationFailsafe()V
+HPLcom/android/server/wm/WindowManagerService;->triggerAnimationFailsafe()V
 HPLcom/android/server/wm/WindowManagerService;->tryStartExitingAnimation(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowStateAnimator;Z)Z
 HSPLcom/android/server/wm/WindowManagerService;->unprivilegedAppCanCreateTokenWith(Lcom/android/server/wm/WindowState;IIILandroid/os/IBinder;Ljava/lang/String;)Z
 PLcom/android/server/wm/WindowManagerService;->unregisterAppFreezeListener(Lcom/android/server/wm/WindowManagerService$AppFreezeListener;)V
@@ -60137,7 +62064,7 @@
 HSPLcom/android/server/wm/WindowManagerService;->updateFocusedWindowLocked(IZ)Z+]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
 HPLcom/android/server/wm/WindowManagerService;->updateHiddenWhileSuspendedState(Landroid/util/ArraySet;Z)V
 HPLcom/android/server/wm/WindowManagerService;->updateInputChannel(Landroid/os/IBinder;IIILandroid/view/SurfaceControl;Ljava/lang/String;Landroid/view/InputApplicationHandle;IIILandroid/graphics/Region;Landroid/view/IWindow;)V
-PLcom/android/server/wm/WindowManagerService;->updateInputChannel(Landroid/os/IBinder;ILandroid/view/SurfaceControl;IILandroid/graphics/Region;)V
+HPLcom/android/server/wm/WindowManagerService;->updateInputChannel(Landroid/os/IBinder;ILandroid/view/SurfaceControl;IILandroid/graphics/Region;)V
 HSPLcom/android/server/wm/WindowManagerService;->updateNonSystemOverlayWindowsVisibilityIfNeeded(Lcom/android/server/wm/WindowState;Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/RootWindowContainer;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/wm/WindowManagerService;->updatePointerIcon(Landroid/view/IWindow;)V
 HSPLcom/android/server/wm/WindowManagerService;->updateRotation(ZZ)V
@@ -60158,14 +62085,16 @@
 PLcom/android/server/wm/WindowManagerShellCommand;->lambda$runDumpVisibleWindowViews$0(ILjava/util/ArrayList;Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/WindowManagerShellCommand;->onCommand(Ljava/lang/String;)I
 PLcom/android/server/wm/WindowManagerShellCommand;->printInitialDisplayDensity(Ljava/io/PrintWriter;I)V
+PLcom/android/server/wm/WindowManagerShellCommand;->printInitialDisplaySize(Ljava/io/PrintWriter;I)V
 PLcom/android/server/wm/WindowManagerShellCommand;->runDismissKeyguard(Ljava/io/PrintWriter;)I
 PLcom/android/server/wm/WindowManagerShellCommand;->runDisplayDensity(Ljava/io/PrintWriter;)I
+PLcom/android/server/wm/WindowManagerShellCommand;->runDisplaySize(Ljava/io/PrintWriter;)I
 PLcom/android/server/wm/WindowManagerShellCommand;->runDumpVisibleWindowViews(Ljava/io/PrintWriter;)I
 HSPLcom/android/server/wm/WindowManagerThreadPriorityBooster;-><init>()V
 HSPLcom/android/server/wm/WindowManagerThreadPriorityBooster;->boost()V
 HSPLcom/android/server/wm/WindowManagerThreadPriorityBooster;->reset()V
-HPLcom/android/server/wm/WindowManagerThreadPriorityBooster;->setAppTransitionRunning(Z)V+]Lcom/android/server/wm/WindowManagerThreadPriorityBooster;Lcom/android/server/wm/WindowManagerThreadPriorityBooster;
-HPLcom/android/server/wm/WindowManagerThreadPriorityBooster;->updatePriorityLocked()V
+HSPLcom/android/server/wm/WindowManagerThreadPriorityBooster;->setAppTransitionRunning(Z)V+]Lcom/android/server/wm/WindowManagerThreadPriorityBooster;Lcom/android/server/wm/WindowManagerThreadPriorityBooster;
+HSPLcom/android/server/wm/WindowManagerThreadPriorityBooster;->updatePriorityLocked()V
 PLcom/android/server/wm/WindowOrganizerController$$ExternalSyntheticLambda10;-><init>(Lcom/android/server/wm/WindowContainer;ZLcom/android/server/wm/TaskDisplayArea;Landroid/window/WindowContainerTransaction$HierarchyOp;Ljava/util/ArrayList;)V
 PLcom/android/server/wm/WindowOrganizerController$$ExternalSyntheticLambda10;->test(Ljava/lang/Object;)Z
 PLcom/android/server/wm/WindowOrganizerController$$ExternalSyntheticLambda4;-><init>()V
@@ -60176,23 +62105,26 @@
 PLcom/android/server/wm/WindowOrganizerController$$ExternalSyntheticLambda7;->getAsInt()I
 PLcom/android/server/wm/WindowOrganizerController$$ExternalSyntheticLambda8;-><init>(Lcom/android/server/wm/WindowOrganizerController;[Ljava/lang/Integer;Ljava/util/function/IntSupplier;)V
 PLcom/android/server/wm/WindowOrganizerController$$ExternalSyntheticLambda8;->run()V
+PLcom/android/server/wm/WindowOrganizerController$$ExternalSyntheticLambda9;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/WindowOrganizerController$CallerInfo;-><init>()V
 PLcom/android/server/wm/WindowOrganizerController;->$r8$lambda$9_AbPDs6IF8TKewcYbVmH2AXr80(Lcom/android/server/wm/WindowOrganizerController;Lcom/android/server/wm/WindowOrganizerController$CallerInfo;ILcom/android/server/wm/SafeActivityOptions;)I
 PLcom/android/server/wm/WindowOrganizerController;->$r8$lambda$BxMcZW1NFPZ7ZqJZ1pDKZAk2BsI(Lcom/android/server/wm/WindowOrganizerController;[Ljava/lang/Integer;Ljava/util/function/IntSupplier;)V
 PLcom/android/server/wm/WindowOrganizerController;->$r8$lambda$CO8EJgxj8cIx8hDEKJ92hwspiTQ(Lcom/android/server/wm/WindowOrganizerController;Landroid/window/WindowContainerTransaction$HierarchyOp;Ljava/lang/String;Landroid/os/Bundle;)I
 PLcom/android/server/wm/WindowOrganizerController;->$r8$lambda$oIb0GnFrZPHiAbRzpVvMkXvDkA4(Lcom/android/server/wm/WindowContainer;ZLcom/android/server/wm/TaskDisplayArea;Landroid/window/WindowContainerTransaction$HierarchyOp;Ljava/util/ArrayList;Lcom/android/server/wm/Task;)Z
 HSPLcom/android/server/wm/WindowOrganizerController;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;)V
-PLcom/android/server/wm/WindowOrganizerController;->addToSyncSet(ILcom/android/server/wm/WindowContainer;)V
-HPLcom/android/server/wm/WindowOrganizerController;->applyChanges(Lcom/android/server/wm/WindowContainer;Landroid/window/WindowContainerTransaction$Change;)I
+HPLcom/android/server/wm/WindowOrganizerController;->addToSyncSet(ILcom/android/server/wm/WindowContainer;)V
+PLcom/android/server/wm/WindowOrganizerController;->adjustBoundsForMinDimensionsIfNeeded(Lcom/android/server/wm/WindowContainer;Landroid/window/WindowContainerTransaction$Change;Landroid/os/IBinder;)V
+HPLcom/android/server/wm/WindowOrganizerController;->applyChanges(Lcom/android/server/wm/WindowContainer;Landroid/window/WindowContainerTransaction$Change;Landroid/os/IBinder;)I
 HSPLcom/android/server/wm/WindowOrganizerController;->applyHierarchyOp(Landroid/window/WindowContainerTransaction$HierarchyOp;IILcom/android/server/wm/Transition;ZLcom/android/server/wm/WindowOrganizerController$CallerInfo;Landroid/os/IBinder;Landroid/window/ITaskFragmentOrganizer;Lcom/android/server/wm/Transition;)I
 HPLcom/android/server/wm/WindowOrganizerController;->applySyncTransaction(Landroid/window/WindowContainerTransaction;Landroid/window/IWindowContainerTransactionCallback;)I
 HPLcom/android/server/wm/WindowOrganizerController;->applyTaskChanges(Lcom/android/server/wm/Task;Landroid/window/WindowContainerTransaction$Change;)I
 HSPLcom/android/server/wm/WindowOrganizerController;->applyTransaction(Landroid/window/WindowContainerTransaction;)V
 HSPLcom/android/server/wm/WindowOrganizerController;->applyTransaction(Landroid/window/WindowContainerTransaction;ILcom/android/server/wm/Transition;Lcom/android/server/wm/WindowOrganizerController$CallerInfo;)V
 HSPLcom/android/server/wm/WindowOrganizerController;->applyTransaction(Landroid/window/WindowContainerTransaction;ILcom/android/server/wm/Transition;Lcom/android/server/wm/WindowOrganizerController$CallerInfo;Lcom/android/server/wm/Transition;)V
-HPLcom/android/server/wm/WindowOrganizerController;->applyWindowContainerChange(Lcom/android/server/wm/WindowContainer;Landroid/window/WindowContainerTransaction$Change;)I
+HPLcom/android/server/wm/WindowOrganizerController;->applyWindowContainerChange(Lcom/android/server/wm/WindowContainer;Landroid/window/WindowContainerTransaction$Change;Landroid/os/IBinder;)I
 PLcom/android/server/wm/WindowOrganizerController;->cleanUpEmbeddedTaskFragment(Lcom/android/server/wm/TaskFragment;)V
 HSPLcom/android/server/wm/WindowOrganizerController;->configurationsAreEqualForOrganizer(Landroid/content/res/Configuration;Landroid/content/res/Configuration;)Z
+PLcom/android/server/wm/WindowOrganizerController;->convertStartFailureToThrowable(ILandroid/content/Intent;)Ljava/lang/Throwable;
 HPLcom/android/server/wm/WindowOrganizerController;->createTaskFragment(Landroid/window/TaskFragmentCreationParams;Landroid/os/IBinder;Lcom/android/server/wm/WindowOrganizerController$CallerInfo;)V
 PLcom/android/server/wm/WindowOrganizerController;->deleteTaskFragment(Lcom/android/server/wm/TaskFragment;Landroid/window/ITaskFragmentOrganizer;Landroid/os/IBinder;)I
 PLcom/android/server/wm/WindowOrganizerController;->enforceOperationsAllowedForTaskFragmentOrganizer(Ljava/lang/String;Landroid/window/WindowContainerTransaction;)V
@@ -60202,7 +62134,7 @@
 HSPLcom/android/server/wm/WindowOrganizerController;->enforceTaskPermission(Ljava/lang/String;Landroid/window/WindowContainerTransaction;)V
 HSPLcom/android/server/wm/WindowOrganizerController;->getDisplayAreaOrganizerController()Landroid/window/IDisplayAreaOrganizerController;
 PLcom/android/server/wm/WindowOrganizerController;->getTaskFragment(Landroid/os/IBinder;)Lcom/android/server/wm/TaskFragment;
-PLcom/android/server/wm/WindowOrganizerController;->getTaskFragmentOrganizerController()Landroid/window/ITaskFragmentOrganizerController;
+HSPLcom/android/server/wm/WindowOrganizerController;->getTaskFragmentOrganizerController()Landroid/window/ITaskFragmentOrganizerController;
 HSPLcom/android/server/wm/WindowOrganizerController;->getTaskOrganizerController()Landroid/window/ITaskOrganizerController;
 HSPLcom/android/server/wm/WindowOrganizerController;->getTransitionController()Lcom/android/server/wm/TransitionController;
 PLcom/android/server/wm/WindowOrganizerController;->lambda$applyHierarchyOp$6(Lcom/android/server/wm/WindowOrganizerController$CallerInfo;ILcom/android/server/wm/SafeActivityOptions;)I
@@ -60239,7 +62171,7 @@
 PLcom/android/server/wm/WindowOrientationListener$OrientationSensorJudge;->-$$Nest$fputmRotationEvaluationScheduled(Lcom/android/server/wm/WindowOrientationListener$OrientationSensorJudge;Z)V
 PLcom/android/server/wm/WindowOrientationListener$OrientationSensorJudge;->-$$Nest$mfinalizeRotation(Lcom/android/server/wm/WindowOrientationListener$OrientationSensorJudge;I)V
 HSPLcom/android/server/wm/WindowOrientationListener$OrientationSensorJudge;-><init>(Lcom/android/server/wm/WindowOrientationListener;)V
-HPLcom/android/server/wm/WindowOrientationListener$OrientationSensorJudge;->dumpLocked(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HSPLcom/android/server/wm/WindowOrientationListener$OrientationSensorJudge;->dumpLocked(Ljava/io/PrintWriter;Ljava/lang/String;)V
 HPLcom/android/server/wm/WindowOrientationListener$OrientationSensorJudge;->evaluateRotationChangeLocked()I
 HPLcom/android/server/wm/WindowOrientationListener$OrientationSensorJudge;->finalizeRotation(I)V
 HPLcom/android/server/wm/WindowOrientationListener$OrientationSensorJudge;->getProposedRotationLocked()I
@@ -60247,7 +62179,7 @@
 PLcom/android/server/wm/WindowOrientationListener$OrientationSensorJudge;->lambda$setupRotationResolverParameters$0(Landroid/provider/DeviceConfig$Properties;)V
 PLcom/android/server/wm/WindowOrientationListener$OrientationSensorJudge;->onAccuracyChanged(Landroid/hardware/Sensor;I)V
 HPLcom/android/server/wm/WindowOrientationListener$OrientationSensorJudge;->onSensorChanged(Landroid/hardware/SensorEvent;)V
-HPLcom/android/server/wm/WindowOrientationListener$OrientationSensorJudge;->onTouchEndLocked(J)V
+HPLcom/android/server/wm/WindowOrientationListener$OrientationSensorJudge;->onTouchEndLocked(J)V+]Lcom/android/server/wm/WindowOrientationListener$OrientationSensorJudge;Lcom/android/server/wm/WindowOrientationListener$OrientationSensorJudge;
 HPLcom/android/server/wm/WindowOrientationListener$OrientationSensorJudge;->onTouchStartLocked()V
 HSPLcom/android/server/wm/WindowOrientationListener$OrientationSensorJudge;->readRotationResolverParameters()V
 HPLcom/android/server/wm/WindowOrientationListener$OrientationSensorJudge;->resetLocked(Z)V
@@ -60258,13 +62190,13 @@
 PLcom/android/server/wm/WindowOrientationListener;->-$$Nest$fgetmCurrentRotation(Lcom/android/server/wm/WindowOrientationListener;)I
 PLcom/android/server/wm/WindowOrientationListener;->-$$Nest$fgetmHandler(Lcom/android/server/wm/WindowOrientationListener;)Landroid/os/Handler;
 PLcom/android/server/wm/WindowOrientationListener;->-$$Nest$fgetmLock(Lcom/android/server/wm/WindowOrientationListener;)Ljava/lang/Object;
-PLcom/android/server/wm/WindowOrientationListener;->-$$Nest$sfgetLOG()Z
+HPLcom/android/server/wm/WindowOrientationListener;->-$$Nest$sfgetLOG()Z
 HSPLcom/android/server/wm/WindowOrientationListener;-><clinit>()V
 HSPLcom/android/server/wm/WindowOrientationListener;-><init>(Landroid/content/Context;Landroid/os/Handler;)V
 HSPLcom/android/server/wm/WindowOrientationListener;-><init>(Landroid/content/Context;Landroid/os/Handler;I)V
 HSPLcom/android/server/wm/WindowOrientationListener;->canDetectOrientation()Z
 HSPLcom/android/server/wm/WindowOrientationListener;->disable()V
-HPLcom/android/server/wm/WindowOrientationListener;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
+HSPLcom/android/server/wm/WindowOrientationListener;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/wm/WindowOrientationListener;->enable()V
 HPLcom/android/server/wm/WindowOrientationListener;->enable(Z)V
 HSPLcom/android/server/wm/WindowOrientationListener;->getHandler()Landroid/os/Handler;
@@ -60279,99 +62211,100 @@
 HPLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda11;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
 HPLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda1;-><init>()V
 HPLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;Ljava/lang/Object;)V
-HPLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda2;-><init>()V
-HPLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda2;-><init>()V
+HSPLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
 PLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda3;-><init>()V
 PLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda3;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
 PLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda4;-><init>(Lcom/android/server/wm/ActivityRecord;)V
-PLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda4;->test(Ljava/lang/Object;)Z
+HPLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda4;->test(Ljava/lang/Object;)Z
 HSPLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda5;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;)V
 HPLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda5;->test(I)Z
-PLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda6;-><init>()V
-HPLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda6;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-HPLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda7;-><init>()V
-PLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda7;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda6;-><init>()V
+HSPLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda6;->accept(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda7;-><init>()V
+HSPLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda7;->accept(Ljava/lang/Object;)V
+PLcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda8;-><init>()V
 PLcom/android/server/wm/WindowProcessController;->$r8$lambda$fx3qdHpz6hJNiyWS-T5GwG8fP5M(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
 HSPLcom/android/server/wm/WindowProcessController;-><init>(Lcom/android/server/wm/ActivityTaskManagerService;Landroid/content/pm/ApplicationInfo;Ljava/lang/String;IILjava/lang/Object;Lcom/android/server/wm/WindowProcessListener;)V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/wm/PackageConfigPersister;Lcom/android/server/wm/PackageConfigPersister;]Landroid/content/ComponentName;Landroid/content/ComponentName;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;
-HPLcom/android/server/wm/WindowProcessController;->addActivityIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
+HSPLcom/android/server/wm/WindowProcessController;->addActivityIfNeeded(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/WindowProcessController;->addHostActivity(Lcom/android/server/wm/ActivityRecord;)V
 HPLcom/android/server/wm/WindowProcessController;->addOrUpdateAllowBackgroundActivityStartsToken(Landroid/os/Binder;Landroid/os/IBinder;)V
 HSPLcom/android/server/wm/WindowProcessController;->addPackage(Ljava/lang/String;)V+]Landroid/util/ArraySet;Landroid/util/ArraySet;
 HPLcom/android/server/wm/WindowProcessController;->addRecentTask(Lcom/android/server/wm/Task;)V
 PLcom/android/server/wm/WindowProcessController;->addRemoteAnimationDelegate(Lcom/android/server/wm/WindowProcessController;)V
-HPLcom/android/server/wm/WindowProcessController;->addToPendingTop()V
+HSPLcom/android/server/wm/WindowProcessController;->addToPendingTop()V
 PLcom/android/server/wm/WindowProcessController;->appEarlyNotResponding(Ljava/lang/String;Ljava/lang/Runnable;)V
 PLcom/android/server/wm/WindowProcessController;->appNotResponding(Ljava/lang/String;Ljava/lang/Runnable;Ljava/lang/Runnable;)Z
-PLcom/android/server/wm/WindowProcessController;->areBackgroundActivityStartsAllowed(I)Z
-HPLcom/android/server/wm/WindowProcessController;->areBackgroundActivityStartsAllowed(IZ)Z+]Lcom/android/server/wm/BackgroundLaunchProcessController;Lcom/android/server/wm/BackgroundLaunchProcessController;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;
-HPLcom/android/server/wm/WindowProcessController;->areBackgroundFgsStartsAllowed()Z
+HPLcom/android/server/wm/WindowProcessController;->areBackgroundActivityStartsAllowed(I)Z
+HSPLcom/android/server/wm/WindowProcessController;->areBackgroundActivityStartsAllowed(IZ)Z+]Lcom/android/server/wm/BackgroundLaunchProcessController;Lcom/android/server/wm/BackgroundLaunchProcessController;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;
+HSPLcom/android/server/wm/WindowProcessController;->areBackgroundFgsStartsAllowed()Z
 PLcom/android/server/wm/WindowProcessController;->canCloseSystemDialogsByToken()Z
 HSPLcom/android/server/wm/WindowProcessController;->clearActivities()V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/wm/WindowProcessController;->clearPackageList()V
 PLcom/android/server/wm/WindowProcessController;->clearPackagePreferredForHomeActivities()V
 HSPLcom/android/server/wm/WindowProcessController;->clearRecentTasks()V+]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/wm/WindowProcessController;->computeOomAdjFromActivities(Lcom/android/server/wm/WindowProcessController$ComputeOomAdjCallback;)I+]Lcom/android/server/wm/WindowProcessController$ComputeOomAdjCallback;Lcom/android/server/am/OomAdjuster$ComputeOomAdjWindowCallback;
-HPLcom/android/server/wm/WindowProcessController;->computeProcessActivityState()V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/wm/VisibleActivityProcessTracker;Lcom/android/server/wm/VisibleActivityProcessTracker;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/WindowProcessController;->computeRelaunchReason()I
-HPLcom/android/server/wm/WindowProcessController;->createProfilerInfoIfNeeded()Landroid/app/ProfilerInfo;
+HSPLcom/android/server/wm/WindowProcessController;->computeProcessActivityState()V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/wm/VisibleActivityProcessTracker;Lcom/android/server/wm/VisibleActivityProcessTracker;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/WindowProcessController;->computeRelaunchReason()I+]Ljava/util/ArrayList;Ljava/util/ArrayList;
+HSPLcom/android/server/wm/WindowProcessController;->createProfilerInfoIfNeeded()Landroid/app/ProfilerInfo;
 HSPLcom/android/server/wm/WindowProcessController;->dispatchConfiguration(Landroid/content/res/Configuration;)V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/wm/ClientLifecycleManager;Lcom/android/server/wm/ClientLifecycleManager;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/wm/ActivityTaskManagerService;Lcom/android/server/wm/ActivityTaskManagerService;
 HPLcom/android/server/wm/WindowProcessController;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/wm/WindowProcessController;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
 HSPLcom/android/server/wm/WindowProcessController;->getChildCount()I
-HPLcom/android/server/wm/WindowProcessController;->getCpuTime()J
+HSPLcom/android/server/wm/WindowProcessController;->getCpuTime()J
 HPLcom/android/server/wm/WindowProcessController;->getCurrentProcState()I
 PLcom/android/server/wm/WindowProcessController;->getDisplayContextsWithErrorDialogs(Ljava/util/List;)V
 HPLcom/android/server/wm/WindowProcessController;->getFgInteractionTime()J
-HPLcom/android/server/wm/WindowProcessController;->getInputDispatchingTimeoutMillis()J
+HSPLcom/android/server/wm/WindowProcessController;->getInputDispatchingTimeoutMillis()J
 PLcom/android/server/wm/WindowProcessController;->getInstrumentationSourceUid()I
 HPLcom/android/server/wm/WindowProcessController;->getInteractionEventTime()J
 HSPLcom/android/server/wm/WindowProcessController;->getParent()Lcom/android/server/wm/ConfigurationContainer;
-HPLcom/android/server/wm/WindowProcessController;->getPid()I
-HPLcom/android/server/wm/WindowProcessController;->getReportedProcState()I
-HPLcom/android/server/wm/WindowProcessController;->getRequiredAbi()Ljava/lang/String;
-HPLcom/android/server/wm/WindowProcessController;->getThread()Landroid/app/IApplicationThread;
+HSPLcom/android/server/wm/WindowProcessController;->getPid()I
+HSPLcom/android/server/wm/WindowProcessController;->getReportedProcState()I
+HSPLcom/android/server/wm/WindowProcessController;->getRequiredAbi()Ljava/lang/String;
+HSPLcom/android/server/wm/WindowProcessController;->getThread()Landroid/app/IApplicationThread;
 HPLcom/android/server/wm/WindowProcessController;->getTopActivityDisplayArea()Lcom/android/server/wm/TaskDisplayArea;
 HPLcom/android/server/wm/WindowProcessController;->getWhenUnimportant()J
 HSPLcom/android/server/wm/WindowProcessController;->handleAppDied()Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/WindowProcessController;->hasActivities()Z
 HSPLcom/android/server/wm/WindowProcessController;->hasActivitiesOrRecentTasks()Z
-HPLcom/android/server/wm/WindowProcessController;->hasActivityInVisibleTask()Z
+HSPLcom/android/server/wm/WindowProcessController;->hasActivityInVisibleTask()Z
 HPLcom/android/server/wm/WindowProcessController;->hasClientActivities()Z
-HPLcom/android/server/wm/WindowProcessController;->hasEverLaunchedActivity()Z
+HSPLcom/android/server/wm/WindowProcessController;->hasEverLaunchedActivity()Z
 HPLcom/android/server/wm/WindowProcessController;->hasForegroundActivities()Z
 HPLcom/android/server/wm/WindowProcessController;->hasForegroundServices()Z
 HPLcom/android/server/wm/WindowProcessController;->hasOverlayUi()Z
 HPLcom/android/server/wm/WindowProcessController;->hasPendingUiClean()Z
 HSPLcom/android/server/wm/WindowProcessController;->hasRecentTasks()Z
-HPLcom/android/server/wm/WindowProcessController;->hasResumedActivity()Z
+HSPLcom/android/server/wm/WindowProcessController;->hasResumedActivity()Z
 HPLcom/android/server/wm/WindowProcessController;->hasStartedActivity(Lcom/android/server/wm/ActivityRecord;)Z
-HPLcom/android/server/wm/WindowProcessController;->hasThread()Z
+HSPLcom/android/server/wm/WindowProcessController;->hasThread()Z
 HPLcom/android/server/wm/WindowProcessController;->hasTopUi()Z
 HSPLcom/android/server/wm/WindowProcessController;->hasVisibleActivities()Z
-PLcom/android/server/wm/WindowProcessController;->isCrashing()Z
+HPLcom/android/server/wm/WindowProcessController;->isCrashing()Z
 HPLcom/android/server/wm/WindowProcessController;->isEmbedded()Z
 HSPLcom/android/server/wm/WindowProcessController;->isHeavyWeightProcess()Z
 HSPLcom/android/server/wm/WindowProcessController;->isHomeProcess()Z
 HSPLcom/android/server/wm/WindowProcessController;->isInstrumenting()Z
-HPLcom/android/server/wm/WindowProcessController;->isInterestingToUser()Z
-PLcom/android/server/wm/WindowProcessController;->isNotResponding()Z
+HPLcom/android/server/wm/WindowProcessController;->isInterestingToUser()Z+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/WindowProcessController;->isNotResponding()Z
 PLcom/android/server/wm/WindowProcessController;->isPerceptible()Z
 PLcom/android/server/wm/WindowProcessController;->isPersistent()Z
 HSPLcom/android/server/wm/WindowProcessController;->isPreviousProcess()Z
 HSPLcom/android/server/wm/WindowProcessController;->isRemoved()Z
 HPLcom/android/server/wm/WindowProcessController;->isRunningRemoteTransition()Z
-HPLcom/android/server/wm/WindowProcessController;->isUsingWrapper()Z
+HSPLcom/android/server/wm/WindowProcessController;->isUsingWrapper()Z
 PLcom/android/server/wm/WindowProcessController;->lambda$updateTopResumingActivityInProcessIfNeeded$0(Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;)Z
 HSPLcom/android/server/wm/WindowProcessController;->onConfigurationChanged(Landroid/content/res/Configuration;)V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
 HPLcom/android/server/wm/WindowProcessController;->onMergedOverrideConfigurationChanged(Landroid/content/res/Configuration;)V
 HSPLcom/android/server/wm/WindowProcessController;->onRequestedOverrideConfigurationChanged(Landroid/content/res/Configuration;)V
 HSPLcom/android/server/wm/WindowProcessController;->onServiceStarted(Landroid/content/pm/ServiceInfo;)V+]Ljava/lang/String;Ljava/lang/String;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
-HPLcom/android/server/wm/WindowProcessController;->onStartActivity(ILandroid/content/pm/ActivityInfo;)V
-PLcom/android/server/wm/WindowProcessController;->onTopProcChanged()V
-HPLcom/android/server/wm/WindowProcessController;->pauseConfigurationDispatch()V
+HSPLcom/android/server/wm/WindowProcessController;->onStartActivity(ILandroid/content/pm/ActivityInfo;)V
+HSPLcom/android/server/wm/WindowProcessController;->onTopProcChanged()V
+HSPLcom/android/server/wm/WindowProcessController;->pauseConfigurationDispatch()V
 HPLcom/android/server/wm/WindowProcessController;->postPendingUiCleanMsg(Z)V
-HPLcom/android/server/wm/WindowProcessController;->prepareConfigurationForLaunchingActivity()Landroid/content/res/Configuration;
-HPLcom/android/server/wm/WindowProcessController;->prepareOomAdjustment()V
+HSPLcom/android/server/wm/WindowProcessController;->prepareConfigurationForLaunchingActivity()Landroid/content/res/Configuration;
+HSPLcom/android/server/wm/WindowProcessController;->prepareOomAdjustment()V
 HPLcom/android/server/wm/WindowProcessController;->registerActivityConfigurationListener(Lcom/android/server/wm/ActivityRecord;)V
 PLcom/android/server/wm/WindowProcessController;->registerDisplayAreaConfigurationListener(Lcom/android/server/wm/DisplayArea;)V
 HSPLcom/android/server/wm/WindowProcessController;->registeredForDisplayAreaConfigChanges()Z
@@ -60381,7 +62314,7 @@
 PLcom/android/server/wm/WindowProcessController;->removeHostActivity(Lcom/android/server/wm/ActivityRecord;)V
 HPLcom/android/server/wm/WindowProcessController;->removeRecentTask(Lcom/android/server/wm/Task;)V
 HSPLcom/android/server/wm/WindowProcessController;->resolveOverrideConfiguration(Landroid/content/res/Configuration;)V+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowProcessController;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
-HPLcom/android/server/wm/WindowProcessController;->resumeConfigurationDispatch()Z
+HSPLcom/android/server/wm/WindowProcessController;->resumeConfigurationDispatch()Z
 HSPLcom/android/server/wm/WindowProcessController;->setBoundClientUids(Landroid/util/ArraySet;)V+]Lcom/android/server/wm/BackgroundLaunchProcessController;Lcom/android/server/wm/BackgroundLaunchProcessController;
 HSPLcom/android/server/wm/WindowProcessController;->setCrashing(Z)V
 HSPLcom/android/server/wm/WindowProcessController;->setCurrentProcState(I)V
@@ -60389,31 +62322,31 @@
 HSPLcom/android/server/wm/WindowProcessController;->setDebugging(Z)V
 HSPLcom/android/server/wm/WindowProcessController;->setFgInteractionTime(J)V
 HSPLcom/android/server/wm/WindowProcessController;->setHasClientActivities(Z)V
-PLcom/android/server/wm/WindowProcessController;->setHasForegroundServices(Z)V
+HPLcom/android/server/wm/WindowProcessController;->setHasForegroundServices(Z)V
 PLcom/android/server/wm/WindowProcessController;->setHasOverlayUi(Z)V
 HPLcom/android/server/wm/WindowProcessController;->setHasTopUi(Z)V
 PLcom/android/server/wm/WindowProcessController;->setInstrumenting(ZIZ)V
 HSPLcom/android/server/wm/WindowProcessController;->setInteractionEventTime(J)V
 HPLcom/android/server/wm/WindowProcessController;->setLastActivityFinishTimeIfNeeded(J)V
-HPLcom/android/server/wm/WindowProcessController;->setLastActivityLaunchTime(J)V
-HSPLcom/android/server/wm/WindowProcessController;->setLastReportedConfiguration(Landroid/content/res/Configuration;)V
+HSPLcom/android/server/wm/WindowProcessController;->setLastActivityLaunchTime(J)V
+HSPLcom/android/server/wm/WindowProcessController;->setLastReportedConfiguration(Landroid/content/res/Configuration;)V+]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
 HSPLcom/android/server/wm/WindowProcessController;->setNotResponding(Z)V
-HPLcom/android/server/wm/WindowProcessController;->setPendingUiClean(Z)V
+HSPLcom/android/server/wm/WindowProcessController;->setPendingUiClean(Z)V
 HPLcom/android/server/wm/WindowProcessController;->setPendingUiCleanAndForceProcessStateUpTo(I)V
 HSPLcom/android/server/wm/WindowProcessController;->setPerceptible(Z)V
 HSPLcom/android/server/wm/WindowProcessController;->setPersistent(Z)V
 HSPLcom/android/server/wm/WindowProcessController;->setPid(I)V
 HSPLcom/android/server/wm/WindowProcessController;->setReportedProcState(I)V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;
 HSPLcom/android/server/wm/WindowProcessController;->setRequiredAbi(Ljava/lang/String;)V
-PLcom/android/server/wm/WindowProcessController;->setRunningAnimationUnsafe()V
+HPLcom/android/server/wm/WindowProcessController;->setRunningAnimationUnsafe()V
 HPLcom/android/server/wm/WindowProcessController;->setRunningRecentsAnimation(Z)V
 HPLcom/android/server/wm/WindowProcessController;->setRunningRemoteAnimation(Z)V
 HSPLcom/android/server/wm/WindowProcessController;->setThread(Landroid/app/IApplicationThread;)V+]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/wm/VisibleActivityProcessTracker;Lcom/android/server/wm/VisibleActivityProcessTracker;
 HSPLcom/android/server/wm/WindowProcessController;->setUsingWrapper(Z)V
 HPLcom/android/server/wm/WindowProcessController;->setWhenUnimportant(J)V
 PLcom/android/server/wm/WindowProcessController;->shouldKillProcessForRemovedTask(Lcom/android/server/wm/Task;)Z
-HPLcom/android/server/wm/WindowProcessController;->shouldSetProfileProc()Z
-HPLcom/android/server/wm/WindowProcessController;->stopFreezingActivities()V
+HSPLcom/android/server/wm/WindowProcessController;->shouldSetProfileProc()Z
+HPLcom/android/server/wm/WindowProcessController;->stopFreezingActivities()V+]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/WindowProcessController;->toString()Ljava/lang/String;
 HSPLcom/android/server/wm/WindowProcessController;->unregisterActivityConfigurationListener()V
 HPLcom/android/server/wm/WindowProcessController;->unregisterConfigurationListeners()V
@@ -60422,10 +62355,10 @@
 PLcom/android/server/wm/WindowProcessController;->updateAppSpecificSettingsForAllActivitiesInPackage(Ljava/lang/String;Ljava/lang/Integer;Landroid/os/LocaleList;)V
 HSPLcom/android/server/wm/WindowProcessController;->updateAssetConfiguration(I)V
 HSPLcom/android/server/wm/WindowProcessController;->updateConfiguration()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/wm/WindowProcessController;Lcom/android/server/wm/WindowProcessController;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowProcessController;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
-HPLcom/android/server/wm/WindowProcessController;->updateProcessInfo(ZZZZ)V
+HSPLcom/android/server/wm/WindowProcessController;->updateProcessInfo(ZZZZ)V
 HPLcom/android/server/wm/WindowProcessController;->updateRunningRemoteOrRecentsAnimation()V
-HPLcom/android/server/wm/WindowProcessController;->updateServiceConnectionActivities()V
-HPLcom/android/server/wm/WindowProcessController;->updateTopResumingActivityInProcessIfNeeded(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/WindowProcessController;->updateServiceConnectionActivities()V
+HSPLcom/android/server/wm/WindowProcessController;->updateTopResumingActivityInProcessIfNeeded(Lcom/android/server/wm/ActivityRecord;)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/DisplayArea;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/WindowProcessControllerMap;-><init>()V
 HSPLcom/android/server/wm/WindowProcessControllerMap;->getPidMap()Landroid/util/SparseArray;
 HSPLcom/android/server/wm/WindowProcessControllerMap;->getProcess(I)Lcom/android/server/wm/WindowProcessController;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
@@ -60438,7 +62371,7 @@
 HSPLcom/android/server/wm/WindowState$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/wm/WindowState;)V
 PLcom/android/server/wm/WindowState$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/WindowState$$ExternalSyntheticLambda2;-><init>(Lcom/android/server/wm/WindowState;)V
-PLcom/android/server/wm/WindowState$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;)V
+HSPLcom/android/server/wm/WindowState$$ExternalSyntheticLambda2;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/WindowState$$ExternalSyntheticLambda3;-><init>(Landroid/view/InsetsState;Landroid/util/ArraySet;Landroid/util/SparseArray;)V
 HSPLcom/android/server/wm/WindowState$$ExternalSyntheticLambda3;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/WindowState$1;-><init>()V
@@ -60451,17 +62384,18 @@
 HSPLcom/android/server/wm/WindowState$DeathRecipient;-><init>(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState$DeathRecipient-IA;)V
 HPLcom/android/server/wm/WindowState$DeathRecipient;->binderDied()V
 PLcom/android/server/wm/WindowState$DrawHandler;-><init>(Lcom/android/server/wm/WindowState;ILjava/util/function/Consumer;)V
-PLcom/android/server/wm/WindowState$MoveAnimationSpec;-><init>(Lcom/android/server/wm/WindowState;IIII)V
+HPLcom/android/server/wm/WindowState$MoveAnimationSpec;-><init>(Lcom/android/server/wm/WindowState;IIII)V
 PLcom/android/server/wm/WindowState$MoveAnimationSpec;-><init>(Lcom/android/server/wm/WindowState;IIIILcom/android/server/wm/WindowState$MoveAnimationSpec-IA;)V
-HPLcom/android/server/wm/WindowState$MoveAnimationSpec;->apply(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;J)V
+HPLcom/android/server/wm/WindowState$MoveAnimationSpec;->apply(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;J)V+]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Landroid/view/animation/Interpolator;Landroid/view/animation/DecelerateInterpolator;]Lcom/android/server/wm/LocalAnimationAdapter$AnimationSpec;Lcom/android/server/wm/WindowState$MoveAnimationSpec;
 PLcom/android/server/wm/WindowState$MoveAnimationSpec;->dump(Ljava/io/PrintWriter;Ljava/lang/String;)V
 PLcom/android/server/wm/WindowState$MoveAnimationSpec;->dumpDebugInner(Landroid/util/proto/ProtoOutputStream;)V
-PLcom/android/server/wm/WindowState$MoveAnimationSpec;->getDuration()J
+HPLcom/android/server/wm/WindowState$MoveAnimationSpec;->getDuration()J
 HSPLcom/android/server/wm/WindowState$UpdateReportedVisibilityResults;-><init>()V
-HPLcom/android/server/wm/WindowState$UpdateReportedVisibilityResults;->reset()V
+HSPLcom/android/server/wm/WindowState$UpdateReportedVisibilityResults;->reset()V
 HSPLcom/android/server/wm/WindowState$WindowId;-><init>(Lcom/android/server/wm/WindowState;)V
 HSPLcom/android/server/wm/WindowState$WindowId;-><init>(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState$WindowId-IA;)V
-PLcom/android/server/wm/WindowState;->$r8$lambda$NT7WFsAMtgJOW3JXl33VeUnZuCs(Lcom/android/server/wm/WindowState;Landroid/view/SurfaceControl$Transaction;)V
+HPLcom/android/server/wm/WindowState$WindowId;->isFocused()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/lang/ref/WeakReference;Ljava/lang/ref/WeakReference;
+HSPLcom/android/server/wm/WindowState;->$r8$lambda$NT7WFsAMtgJOW3JXl33VeUnZuCs(Lcom/android/server/wm/WindowState;Landroid/view/SurfaceControl$Transaction;)V
 PLcom/android/server/wm/WindowState;->$r8$lambda$U3pXGv95Gb8PldAwEUs7x3QE3U8(Lcom/android/server/wm/WindowState;Landroid/view/SurfaceControl$Transaction;)V
 PLcom/android/server/wm/WindowState;->$r8$lambda$gtdPXCAzSiavwVZY5OZGcTDMs84(Lcom/android/server/wm/WindowState;)Z
 HSPLcom/android/server/wm/WindowState;->$r8$lambda$yaMCE92DeyOeXwsfF1GkAkI6k2I(Landroid/view/InsetsState;Landroid/util/ArraySet;Landroid/util/SparseArray;Lcom/android/server/wm/WindowState;)V
@@ -60470,14 +62404,14 @@
 HSPLcom/android/server/wm/WindowState;-><clinit>()V
 HSPLcom/android/server/wm/WindowState;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/Session;Landroid/view/IWindow;Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WindowState;ILandroid/view/WindowManager$LayoutParams;IIIZ)V
 HSPLcom/android/server/wm/WindowState;-><init>(Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/Session;Landroid/view/IWindow;Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WindowState;ILandroid/view/WindowManager$LayoutParams;IIIZLcom/android/server/wm/WindowState$PowerManagerWrapper;)V
-HPLcom/android/server/wm/WindowState;->adjustRegionInFreefromWindowMode(Landroid/graphics/Rect;)V+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/WindowState;->adjustRegionInFreefromWindowMode(Landroid/graphics/Rect;)V+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowState;->adjustStartingWindowFlags()V
 HSPLcom/android/server/wm/WindowState;->applyDims()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/Dimmer;Lcom/android/server/wm/Dimmer;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;
 HSPLcom/android/server/wm/WindowState;->applyImeWindowsIfNeeded(Lcom/android/internal/util/ToBooleanFunction;Z)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/WindowState;->applyInOrderWithImeWindows(Lcom/android/internal/util/ToBooleanFunction;Z)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/internal/util/ToBooleanFunction;megamorphic_types
 HPLcom/android/server/wm/WindowState;->applyInsets(Landroid/graphics/Region;Landroid/graphics/Rect;Landroid/graphics/Rect;)V
 HPLcom/android/server/wm/WindowState;->applyWithNextDraw(Ljava/util/function/Consumer;)V
-HPLcom/android/server/wm/WindowState;->areAppWindowBoundsLetterboxed()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/WindowState;->areAppWindowBoundsLetterboxed()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/WindowState;->asWindowState()Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowState;->assignChildLayers(Landroid/view/SurfaceControl$Transaction;)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;
 HSPLcom/android/server/wm/WindowState;->assignLayer(Landroid/view/SurfaceControl$Transaction;I)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
@@ -60486,33 +62420,33 @@
 HSPLcom/android/server/wm/WindowState;->canAffectSystemUiFlags()Z+]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/WindowState;->canBeHiddenByKeyguard()Z+]Lcom/android/server/policy/WindowManagerPolicy;Lcom/android/server/policy/PhoneWindowManager;
 HPLcom/android/server/wm/WindowState;->canBeImeTarget()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/WindowState;->canPlayMoveAnimation()Z
+HSPLcom/android/server/wm/WindowState;->canPlayMoveAnimation()Z
 HSPLcom/android/server/wm/WindowState;->canReceiveKeys()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
-HSPLcom/android/server/wm/WindowState;->canReceiveKeys(Z)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
-PLcom/android/server/wm/WindowState;->canReceiveKeysReason(Z)Ljava/lang/String;
-HSPLcom/android/server/wm/WindowState;->canReceiveTouchInput()Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/WindowState;->canReceiveKeys(Z)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
+HPLcom/android/server/wm/WindowState;->canReceiveKeysReason(Z)Ljava/lang/String;
+HSPLcom/android/server/wm/WindowState;->canReceiveTouchInput()Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HPLcom/android/server/wm/WindowState;->canScreenshotIme()Z
 PLcom/android/server/wm/WindowState;->canShowTransient()Z
 HPLcom/android/server/wm/WindowState;->canShowWhenLocked()Z
 PLcom/android/server/wm/WindowState;->cancelSeamlessRotation()V
 HPLcom/android/server/wm/WindowState;->checkPolicyVisibilityChange()V
-HPLcom/android/server/wm/WindowState;->cleanupAnimatingExitWindow()V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/WindowState;->cleanupAnimatingExitWindow()V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HPLcom/android/server/wm/WindowState;->clearAnimatingFlags()Z
 HPLcom/android/server/wm/WindowState;->clearFrozenInsetsState()V
 HSPLcom/android/server/wm/WindowState;->clearPolicyVisibilityFlag(I)V
 HSPLcom/android/server/wm/WindowState;->computeDragResizing()Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/Task;]Lcom/android/server/wm/DockedTaskDividerController;Lcom/android/server/wm/DockedTaskDividerController;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
-HPLcom/android/server/wm/WindowState;->cropRegionToRootTaskBoundsIfNeeded(Landroid/graphics/Region;)V+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Landroid/graphics/Region;Landroid/graphics/Region;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
+HSPLcom/android/server/wm/WindowState;->cropRegionToRootTaskBoundsIfNeeded(Landroid/graphics/Region;)V+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Landroid/graphics/Region;Landroid/graphics/Region;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;
 HPLcom/android/server/wm/WindowState;->destroySurface(ZZ)Z
 HPLcom/android/server/wm/WindowState;->destroySurfaceUnchecked()V
 HPLcom/android/server/wm/WindowState;->disposeInputChannel()V
 HPLcom/android/server/wm/WindowState;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
-HPLcom/android/server/wm/WindowState;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
+HPLcom/android/server/wm/WindowState;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V+]Lcom/android/server/wm/WindowFrames;Lcom/android/server/wm/WindowFrames;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 PLcom/android/server/wm/WindowState;->dumpProto(Landroid/util/proto/ProtoOutputStream;JI)V
-HSPLcom/android/server/wm/WindowState;->executeDrawHandlers(Landroid/view/SurfaceControl$Transaction;I)Z
+HSPLcom/android/server/wm/WindowState;->executeDrawHandlers(Landroid/view/SurfaceControl$Transaction;I)Z+]Landroid/os/Handler;Lcom/android/server/wm/WindowManagerService$H;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/function/Consumer;Lcom/android/server/wm/InsetsSourceProvider$$ExternalSyntheticLambda0;,Lcom/android/server/wm/Task$$ExternalSyntheticLambda39;,Lcom/android/server/wm/WindowState$$ExternalSyntheticLambda1;,Lcom/android/server/wm/WindowState$$ExternalSyntheticLambda2;
 HSPLcom/android/server/wm/WindowState;->fillClientWindowFramesAndConfiguration(Landroid/window/ClientWindowFrames;Landroid/util/MergedConfiguration;ZZ)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowToken;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/util/MergedConfiguration;Landroid/util/MergedConfiguration;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;
 HPLcom/android/server/wm/WindowState;->fillsDisplay()Z
 PLcom/android/server/wm/WindowState;->fillsParent()Z
-HSPLcom/android/server/wm/WindowState;->finishDrawing(Landroid/view/SurfaceControl$Transaction;I)Z
+HSPLcom/android/server/wm/WindowState;->finishDrawing(Landroid/view/SurfaceControl$Transaction;I)Z+]Lcom/android/server/wm/ActivityMetricsLogger;Lcom/android/server/wm/ActivityMetricsLogger;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;]Lcom/android/server/wm/AsyncRotationController;Lcom/android/server/wm/AsyncRotationController;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/ActivityTaskSupervisor;Lcom/android/server/wm/ActivityTaskSupervisor;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/WindowState;->finishSeamlessRotation(Landroid/view/SurfaceControl$Transaction;)V
 PLcom/android/server/wm/WindowState;->finishSync(Landroid/view/SurfaceControl$Transaction;Z)V
 HPLcom/android/server/wm/WindowState;->forAllWindowBottomToTop(Lcom/android/internal/util/ToBooleanFunction;)Z
@@ -60527,28 +62461,28 @@
 HSPLcom/android/server/wm/WindowState;->getAttrs()Landroid/view/WindowManager$LayoutParams;
 HSPLcom/android/server/wm/WindowState;->getBaseType()I
 HSPLcom/android/server/wm/WindowState;->getBounds()Landroid/graphics/Rect;+]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/WindowState;->getClientViewRootSurface()Landroid/view/SurfaceControl;
-HSPLcom/android/server/wm/WindowState;->getCompatInsetsState()Landroid/view/InsetsState;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/view/InsetsState;Landroid/view/InsetsState;
+HSPLcom/android/server/wm/WindowState;->getClientViewRootSurface()Landroid/view/SurfaceControl;
+HSPLcom/android/server/wm/WindowState;->getCompatInsetsState()Landroid/view/InsetsState;+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowState;->getConfiguration()Landroid/content/res/Configuration;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Landroid/content/res/Configuration;Landroid/content/res/Configuration;
-HPLcom/android/server/wm/WindowState;->getDisableFlags()I
+HSPLcom/android/server/wm/WindowState;->getDisableFlags()I
 HSPLcom/android/server/wm/WindowState;->getDisplayContent()Lcom/android/server/wm/DisplayContent;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/WindowState;->getDisplayFrame()Landroid/graphics/Rect;
 HSPLcom/android/server/wm/WindowState;->getDisplayFrames(Lcom/android/server/wm/DisplayFrames;)Lcom/android/server/wm/DisplayFrames;+]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/WindowState;->getDisplayId()I+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HPLcom/android/server/wm/WindowState;->getDisplayInfo()Landroid/view/DisplayInfo;
-HPLcom/android/server/wm/WindowState;->getDrawnStateEvaluated()Z
-HPLcom/android/server/wm/WindowState;->getEffectiveTouchableRegion(Landroid/graphics/Region;)V
+HSPLcom/android/server/wm/WindowState;->getDrawnStateEvaluated()Z
+HSPLcom/android/server/wm/WindowState;->getEffectiveTouchableRegion(Landroid/graphics/Region;)V
 HSPLcom/android/server/wm/WindowState;->getFrame()Landroid/graphics/Rect;
 HPLcom/android/server/wm/WindowState;->getIWindow()Landroid/view/IWindow;
-HPLcom/android/server/wm/WindowState;->getImeControlTarget()Lcom/android/server/wm/InsetsControlTarget;
+HPLcom/android/server/wm/WindowState;->getImeControlTarget()Lcom/android/server/wm/InsetsControlTarget;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HPLcom/android/server/wm/WindowState;->getImeInputTarget()Lcom/android/server/wm/WindowState;
 PLcom/android/server/wm/WindowState;->getImeLayeringTarget()Lcom/android/server/wm/WindowState;
-HPLcom/android/server/wm/WindowState;->getInputDispatchingTimeoutMillis()J
+HSPLcom/android/server/wm/WindowState;->getInputDispatchingTimeoutMillis()J
 HSPLcom/android/server/wm/WindowState;->getInsetsState()Landroid/view/InsetsState;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowState;->getInsetsState(Z)Landroid/view/InsetsState;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/InsetsPolicy;Lcom/android/server/wm/InsetsPolicy;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/WindowState;->getInsetsStateWithVisibilityOverride()Landroid/view/InsetsState;+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/view/InsetsSource;Landroid/view/InsetsSource;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowState;->getKeepClearAreas(Ljava/util/Collection;Ljava/util/Collection;Landroid/graphics/Matrix;[F)V
-HSPLcom/android/server/wm/WindowState;->getKeyInterceptionInfo()Lcom/android/internal/policy/KeyInterceptionInfo;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLcom/android/server/wm/WindowState;->getKeyInterceptionInfo()Lcom/android/internal/policy/KeyInterceptionInfo;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/lang/CharSequence;Ljava/lang/String;,Landroid/text/SpannableString;
 HPLcom/android/server/wm/WindowState;->getLastReportedBounds()Landroid/graphics/Rect;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
 HSPLcom/android/server/wm/WindowState;->getLastReportedConfiguration()Landroid/content/res/Configuration;+]Landroid/util/MergedConfiguration;Landroid/util/MergedConfiguration;
 HSPLcom/android/server/wm/WindowState;->getLayoutingAttrs(I)Landroid/view/WindowManager$LayoutParams;
@@ -60562,34 +62496,34 @@
 HSPLcom/android/server/wm/WindowState;->getParentWindow()Lcom/android/server/wm/WindowState;
 PLcom/android/server/wm/WindowState;->getPid()I
 HSPLcom/android/server/wm/WindowState;->getProcessGlobalConfiguration()Landroid/content/res/Configuration;
-PLcom/android/server/wm/WindowState;->getProtoFieldId()J
+HPLcom/android/server/wm/WindowState;->getProtoFieldId()J
 HSPLcom/android/server/wm/WindowState;->getRectsInScreenSpace(Ljava/util/List;Landroid/graphics/Matrix;[F)Ljava/util/List;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/List;Ljava/util/ArrayList;]Ljava/util/Iterator;Ljava/util/ArrayList$Itr;
 PLcom/android/server/wm/WindowState;->getRelativeFrame()Landroid/graphics/Rect;
-HPLcom/android/server/wm/WindowState;->getReplacingWindow()Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/WindowState;->getReplacingWindow()Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowState;->getRequestedVisibilities()Landroid/view/InsetsVisibilities;
-HPLcom/android/server/wm/WindowState;->getRequestedVisibility(I)Z+]Landroid/view/InsetsVisibilities;Landroid/view/InsetsVisibilities;
+HSPLcom/android/server/wm/WindowState;->getRequestedVisibility(I)Z+]Landroid/view/InsetsVisibilities;Landroid/view/InsetsVisibilities;
 PLcom/android/server/wm/WindowState;->getResizeMode()I
 HPLcom/android/server/wm/WindowState;->getRootTask()Lcom/android/server/wm/Task;+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/TaskDisplayArea;Lcom/android/server/wm/TaskDisplayArea;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HPLcom/android/server/wm/WindowState;->getRootTaskId()I
 PLcom/android/server/wm/WindowState;->getRotationAnimationHint()I
-HSPLcom/android/server/wm/WindowState;->getSession()Landroid/view/SurfaceSession;
-HPLcom/android/server/wm/WindowState;->getSurfaceTouchableRegion(Landroid/graphics/Region;Landroid/view/WindowManager$LayoutParams;)V+]Landroid/graphics/Region;Landroid/graphics/Region;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/DisplayContent;
-HPLcom/android/server/wm/WindowState;->getSystemGestureExclusion()Ljava/util/List;
+HSPLcom/android/server/wm/WindowState;->getSession()Landroid/view/SurfaceSession;+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/WindowState;->getSurfaceTouchableRegion(Landroid/graphics/Region;Landroid/view/WindowManager$LayoutParams;)V+]Landroid/graphics/Region;Landroid/graphics/Region;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/DisplayContent;
+HSPLcom/android/server/wm/WindowState;->getSystemGestureExclusion()Ljava/util/List;
 PLcom/android/server/wm/WindowState;->getTapExcludeRegion(Landroid/graphics/Region;)V
 HSPLcom/android/server/wm/WindowState;->getTask()Lcom/android/server/wm/Task;+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/WindowState;->getTaskFragment()Lcom/android/server/wm/TaskFragment;
+HSPLcom/android/server/wm/WindowState;->getTaskFragment()Lcom/android/server/wm/TaskFragment;
 HSPLcom/android/server/wm/WindowState;->getTopParentWindow()Lcom/android/server/wm/WindowState;+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowState;->getTouchOcclusionMode()I+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;
-HPLcom/android/server/wm/WindowState;->getTouchableRegion(Landroid/graphics/Region;)V+]Landroid/graphics/Region;Landroid/graphics/Region;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
-HSPLcom/android/server/wm/WindowState;->getTransformationMatrix([FLandroid/graphics/Matrix;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/WallpaperWindowToken;
+HSPLcom/android/server/wm/WindowState;->getTouchableRegion(Landroid/graphics/Region;)V+]Landroid/graphics/Region;Landroid/graphics/Region;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/WindowState;->getTransformationMatrix([FLandroid/graphics/Matrix;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Landroid/graphics/Matrix;Landroid/graphics/Matrix;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;
 PLcom/android/server/wm/WindowState;->getUid()I
 PLcom/android/server/wm/WindowState;->getVisibleBounds(Landroid/graphics/Rect;)V
 HPLcom/android/server/wm/WindowState;->getWindow()Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowState;->getWindow(Ljava/util/function/Predicate;)Lcom/android/server/wm/WindowState;+]Ljava/util/function/Predicate;megamorphic_types]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
-HPLcom/android/server/wm/WindowState;->getWindowFrames()Lcom/android/server/wm/WindowFrames;
+HSPLcom/android/server/wm/WindowState;->getWindowFrames()Lcom/android/server/wm/WindowFrames;
 HPLcom/android/server/wm/WindowState;->getWindowInfo()Landroid/view/WindowInfo;+]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/List;Ljava/util/ArrayList;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;]Landroid/view/IWindow;Landroid/view/ViewRootImpl$W;,Landroid/view/IWindow$Stub$Proxy;
 HPLcom/android/server/wm/WindowState;->getWindowState()Lcom/android/server/wm/WindowState;
-HSPLcom/android/server/wm/WindowState;->getWindowTag()Ljava/lang/CharSequence;+]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Ljava/lang/CharSequence;Ljava/lang/String;
+HSPLcom/android/server/wm/WindowState;->getWindowTag()Ljava/lang/CharSequence;+]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Ljava/lang/CharSequence;Ljava/lang/String;,Landroid/text/SpannableString;
 HSPLcom/android/server/wm/WindowState;->getWindowType()I
 HSPLcom/android/server/wm/WindowState;->handleCompleteDeferredRemoval()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 PLcom/android/server/wm/WindowState;->handleTapOutsideFocusInsideSelf()V
@@ -60598,13 +62532,13 @@
 HPLcom/android/server/wm/WindowState;->hasAppShownWindows()Z
 HSPLcom/android/server/wm/WindowState;->hasCompatScale()Z
 HSPLcom/android/server/wm/WindowState;->hasCompatScale(Landroid/view/WindowManager$LayoutParams;Lcom/android/server/wm/WindowToken;F)Z+]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/WindowState;->hasContentToDisplay()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;
+HSPLcom/android/server/wm/WindowState;->hasContentToDisplay()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;
 HPLcom/android/server/wm/WindowState;->hasDrawn()Z
 HSPLcom/android/server/wm/WindowState;->hasMoved()Z+]Lcom/android/server/wm/WindowFrames;Lcom/android/server/wm/WindowFrames;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/TransitionController;Lcom/android/server/wm/TransitionController;
 HSPLcom/android/server/wm/WindowState;->hasWallpaper()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowState;->hasWallpaperForLetterboxBackground()Z
 HSPLcom/android/server/wm/WindowState;->hide(ZZ)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/WindowToken;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
-PLcom/android/server/wm/WindowState;->hideInsets(IZ)V
+HPLcom/android/server/wm/WindowState;->hideInsets(IZ)V
 HSPLcom/android/server/wm/WindowState;->hideNonSystemOverlayWindowsWhenVisible()Z
 PLcom/android/server/wm/WindowState;->hidePermanentlyLw()V
 PLcom/android/server/wm/WindowState;->immediatelyNotifyBlastSync()V
@@ -60621,36 +62555,36 @@
 HSPLcom/android/server/wm/WindowState;->isDragResizeChanged()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowState;->isDragResizing()Z
 PLcom/android/server/wm/WindowState;->isDragResizingChangeReported()Z
-HPLcom/android/server/wm/WindowState;->isDrawFinishedLw()Z
+HSPLcom/android/server/wm/WindowState;->isDrawFinishedLw()Z
 HSPLcom/android/server/wm/WindowState;->isDrawn()Z
 HSPLcom/android/server/wm/WindowState;->isDreamWindow()Z
 HPLcom/android/server/wm/WindowState;->isExitAnimationRunningSelfOrParent()Z
 HSPLcom/android/server/wm/WindowState;->isFocused()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowState;->isFullyTransparent()Z
-HPLcom/android/server/wm/WindowState;->isFullyTransparentBarAllowed(Landroid/graphics/Rect;)Z
+HPLcom/android/server/wm/WindowState;->isFullyTransparentBarAllowed(Landroid/graphics/Rect;)Z+]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/WindowState;->isGoneForLayout()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowState;->isImeLayeringTarget()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
-HPLcom/android/server/wm/WindowState;->isImplicitlyExcludingAllSystemGestures()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/WindowState;->isImplicitlyExcludingAllSystemGestures()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HPLcom/android/server/wm/WindowState;->isInputMethodClientFocus(II)Z
-HPLcom/android/server/wm/WindowState;->isInteresting()Z
+HSPLcom/android/server/wm/WindowState;->isInteresting()Z
 HSPLcom/android/server/wm/WindowState;->isLaidOut()Z
 HSPLcom/android/server/wm/WindowState;->isLastConfigReportedToClient()Z
 HSPLcom/android/server/wm/WindowState;->isLegacyPolicyVisibility()Z
-HPLcom/android/server/wm/WindowState;->isLetterboxedForDisplayCutout()Z+]Lcom/android/server/wm/WindowFrames;Lcom/android/server/wm/WindowFrames;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/WindowState;->isLetterboxedForDisplayCutout()Z+]Lcom/android/server/wm/WindowFrames;Lcom/android/server/wm/WindowFrames;]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowState;->isObscuringDisplay()Z+]Lcom/android/server/wm/TaskFragment;Lcom/android/server/wm/Task;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowState;->isOnScreen()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WallpaperWindowToken;Lcom/android/server/wm/WallpaperWindowToken;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/WindowState;->isOpaqueDrawn()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowState;->isParentWindowGoneForLayout()Z
 HSPLcom/android/server/wm/WindowState;->isParentWindowHidden()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 PLcom/android/server/wm/WindowState;->isPotentialDragTarget(Z)Z
-HSPLcom/android/server/wm/WindowState;->isReadyForDisplay()Z
+HSPLcom/android/server/wm/WindowState;->isReadyForDisplay()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/AppTransition;Lcom/android/server/wm/AppTransition;
 HPLcom/android/server/wm/WindowState;->isReadyToDispatchInsetsState()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HPLcom/android/server/wm/WindowState;->isRtl()Z
 HSPLcom/android/server/wm/WindowState;->isSecureLocked()Z
 HSPLcom/android/server/wm/WindowState;->isSelfAnimating(II)Z
 HPLcom/android/server/wm/WindowState;->isSelfOrAncestorWindowAnimatingExit()Z
 HSPLcom/android/server/wm/WindowState;->isStartingWindowAssociatedToTask()Z
-PLcom/android/server/wm/WindowState;->isSyncFinished()Z
+HPLcom/android/server/wm/WindowState;->isSyncFinished()Z
 HSPLcom/android/server/wm/WindowState;->isVisible()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowState;->isVisibleByPolicy()Z
 HSPLcom/android/server/wm/WindowState;->isVisibleByPolicyOrInsets()Z+]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
@@ -60659,18 +62593,18 @@
 HSPLcom/android/server/wm/WindowState;->isVisibleRequestedOrAdding()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HPLcom/android/server/wm/WindowState;->isWinVisibleLw()Z
 PLcom/android/server/wm/WindowState;->lambda$new$0(Landroid/view/SurfaceControl$Transaction;)V
-HPLcom/android/server/wm/WindowState;->lambda$new$1(Landroid/view/SurfaceControl$Transaction;)V
+HSPLcom/android/server/wm/WindowState;->lambda$new$1(Landroid/view/SurfaceControl$Transaction;)V
 HPLcom/android/server/wm/WindowState;->lambda$removeIfPossible$2(Lcom/android/server/wm/WindowState;)Z
 HSPLcom/android/server/wm/WindowState;->lambda$updateAboveInsetsState$3(Landroid/view/InsetsState;Landroid/util/ArraySet;Landroid/util/SparseArray;Lcom/android/server/wm/WindowState;)V+]Landroid/view/InsetsState;Landroid/view/InsetsState;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Landroid/util/ArraySet;Landroid/util/ArraySet;
-HPLcom/android/server/wm/WindowState;->logExclusionRestrictions(I)V
+HPLcom/android/server/wm/WindowState;->logExclusionRestrictions(I)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowState;->logPerformShow(Ljava/lang/String;)V
 HSPLcom/android/server/wm/WindowState;->markRedrawForSyncReported()V
 HPLcom/android/server/wm/WindowState;->matchesDisplayAreaBounds()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/TaskDisplayArea;,Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/ActivityRecord;
-HPLcom/android/server/wm/WindowState;->mightAffectAllDrawn()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/WindowState;->mightAffectAllDrawn()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowState;->needsRelativeLayeringToIme()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/DisplayContent$ImeContainer;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/WindowState;->needsZBoost()Z+]Lcom/android/server/wm/InsetsControlTarget;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/WindowState;->notifyInsetsChanged()V+]Lcom/android/server/wm/WindowFrames;Lcom/android/server/wm/WindowFrames;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;]Landroid/os/Handler;Lcom/android/server/wm/WindowManagerService$H;
-HPLcom/android/server/wm/WindowState;->notifyInsetsControlChanged()V
+HPLcom/android/server/wm/WindowState;->notifyInsetsControlChanged()V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Landroid/view/IWindow;Landroid/view/ViewRootImpl$W;,Landroid/view/IWindow$Stub$Proxy;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
 HPLcom/android/server/wm/WindowState;->onAnimationFinished(ILcom/android/server/wm/AnimationAdapter;)V
 HPLcom/android/server/wm/WindowState;->onAppVisibilityChanged(ZZ)V
 HSPLcom/android/server/wm/WindowState;->onConfigurationChanged(Landroid/content/res/Configuration;)V
@@ -60700,7 +62634,7 @@
 HPLcom/android/server/wm/WindowState;->removeIfPossible(Z)V
 HPLcom/android/server/wm/WindowState;->removeImmediately()V
 PLcom/android/server/wm/WindowState;->removeReplacedWindow()V
-HPLcom/android/server/wm/WindowState;->removeReplacedWindowIfNeeded(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/WindowState;->removeReplacedWindowIfNeeded(Lcom/android/server/wm/WindowState;)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 PLcom/android/server/wm/WindowState;->reparentSurfaceControl(Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl;)V
 HPLcom/android/server/wm/WindowState;->reportFocusChangedSerialized(Z)V
 HSPLcom/android/server/wm/WindowState;->reportResized()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/WindowFrames;Lcom/android/server/wm/WindowFrames;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/wm/AccessibilityController;Lcom/android/server/wm/AccessibilityController;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;]Landroid/view/IWindow;Landroid/view/IWindow$Stub$Proxy;,Landroid/view/ViewRootImpl$W;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
@@ -60716,15 +62650,15 @@
 HSPLcom/android/server/wm/WindowState;->setDisplayLayoutNeeded()V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 PLcom/android/server/wm/WindowState;->setDragResizing()V
 HSPLcom/android/server/wm/WindowState;->setDrawnStateEvaluated(Z)V
-HSPLcom/android/server/wm/WindowState;->setForceHideNonSystemOverlayWindowIfNeeded(Z)V+]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;
+HSPLcom/android/server/wm/WindowState;->setForceHideNonSystemOverlayWindowIfNeeded(Z)V+]Landroid/view/WindowManager$LayoutParams;Landroid/view/WindowManager$LayoutParams;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowState;->setFrames(Landroid/window/ClientWindowFrames;II)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowFrames;Lcom/android/server/wm/WindowFrames;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/WindowState;->setHasSurface(Z)V
 HSPLcom/android/server/wm/WindowState;->setHiddenWhileSuspended(Z)V
-HPLcom/android/server/wm/WindowState;->setLastExclusionHeights(III)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
+HSPLcom/android/server/wm/WindowState;->setLastExclusionHeights(III)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowState;->setOnBackInvokedCallbackInfo(Landroid/window/OnBackInvokedCallbackInfo;)V
 HSPLcom/android/server/wm/WindowState;->setOrientationChanging(Z)V+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
-PLcom/android/server/wm/WindowState;->setPolicyVisibilityFlag(I)V
-HPLcom/android/server/wm/WindowState;->setReplacementWindowIfNeeded(Lcom/android/server/wm/WindowState;)Z
+HPLcom/android/server/wm/WindowState;->setPolicyVisibilityFlag(I)V
+HSPLcom/android/server/wm/WindowState;->setReplacementWindowIfNeeded(Lcom/android/server/wm/WindowState;)Z
 HSPLcom/android/server/wm/WindowState;->setReportResizeHints()Z
 HSPLcom/android/server/wm/WindowState;->setRequestedSize(II)V
 HSPLcom/android/server/wm/WindowState;->setRequestedVisibilities(Landroid/view/InsetsVisibilities;)V
@@ -60739,27 +62673,27 @@
 PLcom/android/server/wm/WindowState;->shouldBeReplacedWithChildren()Z
 HSPLcom/android/server/wm/WindowState;->shouldCheckTokenVisibleRequested()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;
 HPLcom/android/server/wm/WindowState;->shouldControlIme()Z+]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;
-HSPLcom/android/server/wm/WindowState;->shouldDrawBlurBehind()Z
+HSPLcom/android/server/wm/WindowState;->shouldDrawBlurBehind()Z+]Lcom/android/server/wm/BlurController;Lcom/android/server/wm/BlurController;
 PLcom/android/server/wm/WindowState;->shouldFinishAnimatingExit()Z
 PLcom/android/server/wm/WindowState;->shouldKeepVisibleDeadAppWindow()Z
 HPLcom/android/server/wm/WindowState;->shouldMagnify()Z
 HSPLcom/android/server/wm/WindowState;->shouldSendRedrawForSync()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
-HPLcom/android/server/wm/WindowState;->show(ZZ)Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowToken;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;
+HPLcom/android/server/wm/WindowState;->show(ZZ)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowToken;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
 HSPLcom/android/server/wm/WindowState;->showForAllUsers()Z
-HPLcom/android/server/wm/WindowState;->showInsets(IZ)V
+HPLcom/android/server/wm/WindowState;->showInsets(IZ)V+]Landroid/view/IWindow;Landroid/view/IWindow$Stub$Proxy;
 HSPLcom/android/server/wm/WindowState;->showToCurrentUser()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;
-HPLcom/android/server/wm/WindowState;->showWallpaper()Z
+HPLcom/android/server/wm/WindowState;->showWallpaper()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowState;->skipLayout()Z
 HPLcom/android/server/wm/WindowState;->startAnimation(Landroid/view/SurfaceControl$Transaction;Lcom/android/server/wm/AnimationAdapter;)V
 HPLcom/android/server/wm/WindowState;->startAnimation(Landroid/view/animation/Animation;)V
-PLcom/android/server/wm/WindowState;->startMoveAnimation(II)V
-HPLcom/android/server/wm/WindowState;->subtractTouchExcludeRegionIfNeeded(Landroid/graphics/Region;)V+]Landroid/graphics/Region;Landroid/graphics/Region;
-HPLcom/android/server/wm/WindowState;->surfaceInsetsChanging()Z
+HPLcom/android/server/wm/WindowState;->startMoveAnimation(II)V
+HSPLcom/android/server/wm/WindowState;->subtractTouchExcludeRegionIfNeeded(Landroid/graphics/Region;)V+]Landroid/graphics/Region;Landroid/graphics/Region;
+HSPLcom/android/server/wm/WindowState;->surfaceInsetsChanging()Z
 PLcom/android/server/wm/WindowState;->switchUser(I)V
 HSPLcom/android/server/wm/WindowState;->toInsetsSources(Landroid/util/SparseArray;)Landroid/util/SparseArray;+]Landroid/util/SparseArray;Landroid/util/SparseArray;
-HSPLcom/android/server/wm/WindowState;->toString()Ljava/lang/String;
+HSPLcom/android/server/wm/WindowState;->toString()Ljava/lang/String;+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HPLcom/android/server/wm/WindowState;->transferTouch()Z
-HSPLcom/android/server/wm/WindowState;->transformFrameToSurfacePosition(IILandroid/graphics/Point;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/graphics/Point;Landroid/graphics/Point;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/WindowState;->transformFrameToSurfacePosition(IILandroid/graphics/Point;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/graphics/Point;Landroid/graphics/Point;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;,Lcom/android/server/wm/Task;
 HSPLcom/android/server/wm/WindowState;->transformSurfaceInsetsPosition(Landroid/graphics/Point;Landroid/graphics/Rect;)V
 PLcom/android/server/wm/WindowState;->translateToWindowX(F)F
 PLcom/android/server/wm/WindowState;->translateToWindowY(F)F
@@ -60769,8 +62703,8 @@
 HSPLcom/android/server/wm/WindowState;->updateFrameRateSelectionPriorityIfNeeded()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;]Lcom/android/server/wm/RefreshRatePolicy;Lcom/android/server/wm/RefreshRatePolicy;]Lcom/android/server/wm/DisplayPolicy;Lcom/android/server/wm/DisplayPolicy;]Landroid/hardware/display/DisplayManagerInternal;Lcom/android/server/display/DisplayManagerService$LocalService;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/WindowState;->updateGlobalScale()Z
 HSPLcom/android/server/wm/WindowState;->updateLastFrames()V
-HPLcom/android/server/wm/WindowState;->updateRegionForModalActivityWindow(Landroid/graphics/Region;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Landroid/graphics/Region;Landroid/graphics/Region;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/TaskFragment;
-HPLcom/android/server/wm/WindowState;->updateReportedVisibility(Lcom/android/server/wm/WindowState$UpdateReportedVisibilityResults;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
+HSPLcom/android/server/wm/WindowState;->updateRegionForModalActivityWindow(Landroid/graphics/Region;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/Task;,Lcom/android/server/wm/TaskFragment;]Landroid/graphics/Region;Landroid/graphics/Region;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/Task;Lcom/android/server/wm/Task;]Landroid/graphics/Rect;Landroid/graphics/Rect;]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/ConfigurationContainer;Lcom/android/server/wm/TaskFragment;
+HSPLcom/android/server/wm/WindowState;->updateReportedVisibility(Lcom/android/server/wm/WindowState$UpdateReportedVisibilityResults;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
 HSPLcom/android/server/wm/WindowState;->updateResizingWindowIfNeeded()V+]Lcom/android/server/wm/WindowFrames;Lcom/android/server/wm/WindowFrames;]Landroid/os/Handler;Lcom/android/server/wm/WindowManagerService$H;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/ActivityRecord;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/WindowState;->updateScaleIfNeeded()V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;,Lcom/android/server/wm/WallpaperWindowToken;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;
 HSPLcom/android/server/wm/WindowState;->updateSourceFrame(Landroid/graphics/Rect;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/InsetsSourceProvider;Lcom/android/server/wm/ImeInsetsSourceProvider;,Lcom/android/server/wm/WindowContainerInsetsSourceProvider;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Landroid/util/SparseArray;Landroid/util/SparseArray;]Lcom/android/server/wm/InsetsStateController;Lcom/android/server/wm/InsetsStateController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
@@ -60780,7 +62714,7 @@
 HPLcom/android/server/wm/WindowState;->waitingForReplacement()Z
 HSPLcom/android/server/wm/WindowState;->wouldBeVisibleIfPolicyIgnored()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
 HSPLcom/android/server/wm/WindowState;->wouldBeVisibleRequestedIfPolicyIgnored()Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;
-HPLcom/android/server/wm/WindowState;->writeIdentifierToProto(Landroid/util/proto/ProtoOutputStream;J)V
+HPLcom/android/server/wm/WindowState;->writeIdentifierToProto(Landroid/util/proto/ProtoOutputStream;J)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/lang/CharSequence;Ljava/lang/String;
 HSPLcom/android/server/wm/WindowStateAnimator;-><init>(Lcom/android/server/wm/WindowState;)V
 HSPLcom/android/server/wm/WindowStateAnimator;->applyAnimationLocked(IZ)Z
 HSPLcom/android/server/wm/WindowStateAnimator;->applyEnterAnimationLocked()V
@@ -60791,17 +62725,17 @@
 HPLcom/android/server/wm/WindowStateAnimator;->destroySurfaceLocked(Landroid/view/SurfaceControl$Transaction;)V
 PLcom/android/server/wm/WindowStateAnimator;->drawStateToString()Ljava/lang/String;
 HPLcom/android/server/wm/WindowStateAnimator;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
-HPLcom/android/server/wm/WindowStateAnimator;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V
-HSPLcom/android/server/wm/WindowStateAnimator;->finishDrawingLocked(Landroid/view/SurfaceControl$Transaction;Z)Z
+HPLcom/android/server/wm/WindowStateAnimator;->dumpDebug(Landroid/util/proto/ProtoOutputStream;J)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;]Lcom/android/server/wm/WindowSurfaceController;Lcom/android/server/wm/WindowSurfaceController;]Landroid/graphics/Rect;Landroid/graphics/Rect;
+HSPLcom/android/server/wm/WindowStateAnimator;->finishDrawingLocked(Landroid/view/SurfaceControl$Transaction;Z)Z+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Landroid/view/SurfaceControl$Transaction;Landroid/view/SurfaceControl$Transaction;
 HSPLcom/android/server/wm/WindowStateAnimator;->getShown()Z
-HPLcom/android/server/wm/WindowStateAnimator;->getSurfaceControl()Landroid/view/SurfaceControl;
+HSPLcom/android/server/wm/WindowStateAnimator;->getSurfaceControl()Landroid/view/SurfaceControl;
 HSPLcom/android/server/wm/WindowStateAnimator;->hasSurface()Z+]Lcom/android/server/wm/WindowSurfaceController;Lcom/android/server/wm/WindowSurfaceController;
 HPLcom/android/server/wm/WindowStateAnimator;->hide(Landroid/view/SurfaceControl$Transaction;Ljava/lang/String;)V
 HPLcom/android/server/wm/WindowStateAnimator;->onAnimationFinished()V
 HSPLcom/android/server/wm/WindowStateAnimator;->prepareSurfaceLocked(Landroid/view/SurfaceControl$Transaction;)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WallpaperController;Lcom/android/server/wm/WallpaperController;]Lcom/android/server/wm/WindowAnimator;Lcom/android/server/wm/WindowAnimator;]Lcom/android/server/wm/WindowStateAnimator;Lcom/android/server/wm/WindowStateAnimator;]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowSurfaceController;Lcom/android/server/wm/WindowSurfaceController;]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 HSPLcom/android/server/wm/WindowStateAnimator;->resetDrawState()V
 HPLcom/android/server/wm/WindowStateAnimator;->setColorSpaceAgnosticLocked(Z)V
-PLcom/android/server/wm/WindowStateAnimator;->setOpaqueLocked(Z)V
+HPLcom/android/server/wm/WindowStateAnimator;->setOpaqueLocked(Z)V
 HSPLcom/android/server/wm/WindowStateAnimator;->showSurfaceRobustlyLocked(Landroid/view/SurfaceControl$Transaction;)Z
 HPLcom/android/server/wm/WindowStateAnimator;->toString()Ljava/lang/String;
 HSPLcom/android/server/wm/WindowSurfaceController;-><init>(Ljava/lang/String;IILcom/android/server/wm/WindowStateAnimator;I)V
@@ -60819,7 +62753,7 @@
 PLcom/android/server/wm/WindowSurfaceController;->setSecure(Z)V
 HSPLcom/android/server/wm/WindowSurfaceController;->setShown(Z)V+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/Session;Lcom/android/server/wm/Session;
 HSPLcom/android/server/wm/WindowSurfaceController;->showRobustly(Landroid/view/SurfaceControl$Transaction;)Z
-PLcom/android/server/wm/WindowSurfaceController;->toString()Ljava/lang/String;
+HPLcom/android/server/wm/WindowSurfaceController;->toString()Ljava/lang/String;
 HSPLcom/android/server/wm/WindowSurfacePlacer$Traverser;-><init>(Lcom/android/server/wm/WindowSurfacePlacer;)V
 HSPLcom/android/server/wm/WindowSurfacePlacer$Traverser;-><init>(Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer$Traverser-IA;)V
 HSPLcom/android/server/wm/WindowSurfacePlacer$Traverser;->run()V+]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;
@@ -60833,11 +62767,11 @@
 HSPLcom/android/server/wm/WindowSurfacePlacer;->performSurfacePlacement()V+]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;
 HSPLcom/android/server/wm/WindowSurfacePlacer;->performSurfacePlacement(Z)V+]Landroid/os/Handler;Landroid/os/Handler;]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;
 PLcom/android/server/wm/WindowSurfacePlacer;->performSurfacePlacementIfScheduled()V
-HSPLcom/android/server/wm/WindowSurfacePlacer;->performSurfacePlacementLoop()V+]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;
+HSPLcom/android/server/wm/WindowSurfacePlacer;->performSurfacePlacementLoop()V+]Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;]Lcom/android/server/wm/WindowManagerService;Lcom/android/server/wm/WindowManagerService;]Lcom/android/server/wm/WindowSurfacePlacer;Lcom/android/server/wm/WindowSurfacePlacer;]Ljava/util/ArrayList;Ljava/util/ArrayList;]Lcom/android/server/wm/RootWindowContainer;Lcom/android/server/wm/RootWindowContainer;
 HSPLcom/android/server/wm/WindowSurfacePlacer;->requestTraversal()V+]Landroid/os/Handler;Landroid/os/Handler;
 HSPLcom/android/server/wm/WindowToken$$ExternalSyntheticLambda0;-><init>(Lcom/android/server/wm/WindowToken;)V
 HPLcom/android/server/wm/WindowToken$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-HPLcom/android/server/wm/WindowToken$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/wm/WindowToken;Z)V
+HSPLcom/android/server/wm/WindowToken$$ExternalSyntheticLambda1;-><init>(Lcom/android/server/wm/WindowToken;Z)V
 HPLcom/android/server/wm/WindowToken$$ExternalSyntheticLambda1;->accept(Ljava/lang/Object;)V
 HSPLcom/android/server/wm/WindowToken$Builder;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/os/IBinder;I)V
 HSPLcom/android/server/wm/WindowToken$Builder;->build()Lcom/android/server/wm/WindowToken;
@@ -60852,7 +62786,7 @@
 PLcom/android/server/wm/WindowToken$FixedRotationTransformState;->resetTransform()V
 PLcom/android/server/wm/WindowToken$FixedRotationTransformState;->transform(Lcom/android/server/wm/WindowContainer;)V
 HPLcom/android/server/wm/WindowToken;->$r8$lambda$hNPCvBwKqRe9wZ7nz7IlpshKxBg(Lcom/android/server/wm/WindowToken;ZLcom/android/server/wm/WindowState;)V
-PLcom/android/server/wm/WindowToken;->$r8$lambda$scVcNWwh6MTtjrT5K8NFY-W2dPA(Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)I
+HPLcom/android/server/wm/WindowToken;->$r8$lambda$scVcNWwh6MTtjrT5K8NFY-W2dPA(Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)I
 HSPLcom/android/server/wm/WindowToken;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/os/IBinder;IZLcom/android/server/wm/DisplayContent;Z)V
 HSPLcom/android/server/wm/WindowToken;-><init>(Lcom/android/server/wm/WindowManagerService;Landroid/os/IBinder;IZLcom/android/server/wm/DisplayContent;ZZZLandroid/os/Bundle;)V
 HSPLcom/android/server/wm/WindowToken;->addWindow(Lcom/android/server/wm/WindowState;)V
@@ -60861,25 +62795,25 @@
 HSPLcom/android/server/wm/WindowToken;->assignLayer(Landroid/view/SurfaceControl$Transaction;I)V
 PLcom/android/server/wm/WindowToken;->cancelFixedRotationTransform()V
 HSPLcom/android/server/wm/WindowToken;->createSurfaceControl(Z)V
-PLcom/android/server/wm/WindowToken;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
-HPLcom/android/server/wm/WindowToken;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V
-HPLcom/android/server/wm/WindowToken;->finishFixedRotationTransform()V
-HPLcom/android/server/wm/WindowToken;->finishFixedRotationTransform(Ljava/lang/Runnable;)V
-HPLcom/android/server/wm/WindowToken;->getFixedRotationTransformDisplayBounds()Landroid/graphics/Rect;+]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/ActivityRecord;]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;
+HPLcom/android/server/wm/WindowToken;->dump(Ljava/io/PrintWriter;Ljava/lang/String;Z)V
+HPLcom/android/server/wm/WindowToken;->dumpDebug(Landroid/util/proto/ProtoOutputStream;JI)V+]Landroid/util/proto/ProtoOutputStream;Landroid/util/proto/ProtoOutputStream;
+HSPLcom/android/server/wm/WindowToken;->finishFixedRotationTransform()V
+HSPLcom/android/server/wm/WindowToken;->finishFixedRotationTransform(Ljava/lang/Runnable;)V
+HSPLcom/android/server/wm/WindowToken;->getFixedRotationTransformDisplayBounds()Landroid/graphics/Rect;+]Landroid/app/WindowConfiguration;Landroid/app/WindowConfiguration;]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/WindowToken;->getFixedRotationTransformDisplayFrames()Lcom/android/server/wm/DisplayFrames;+]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/WindowToken;->getFixedRotationTransformDisplayInfo()Landroid/view/DisplayInfo;
 HSPLcom/android/server/wm/WindowToken;->getFixedRotationTransformInsetsState()Landroid/view/InsetsState;+]Lcom/android/server/wm/WindowToken;Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/WindowToken;,Lcom/android/server/wm/ActivityRecord;
 HSPLcom/android/server/wm/WindowToken;->getName()Ljava/lang/String;
-PLcom/android/server/wm/WindowToken;->getProtoFieldId()J
-HPLcom/android/server/wm/WindowToken;->getReplacingWindow()Lcom/android/server/wm/WindowState;
+HPLcom/android/server/wm/WindowToken;->getProtoFieldId()J
+HSPLcom/android/server/wm/WindowToken;->getReplacingWindow()Lcom/android/server/wm/WindowState;
 PLcom/android/server/wm/WindowToken;->getSizeCompatScale()F
 HSPLcom/android/server/wm/WindowToken;->getWindowLayerFromType()I
 HSPLcom/android/server/wm/WindowToken;->getWindowType()I
 PLcom/android/server/wm/WindowToken;->hasAnimatingFixedRotationTransition()Z
-HPLcom/android/server/wm/WindowToken;->hasFixedRotationTransform()Z
+HSPLcom/android/server/wm/WindowToken;->hasFixedRotationTransform()Z
 PLcom/android/server/wm/WindowToken;->hasFixedRotationTransform(Lcom/android/server/wm/WindowToken;)Z
 HSPLcom/android/server/wm/WindowToken;->hasSizeCompatBounds()Z
-HPLcom/android/server/wm/WindowToken;->isClientVisible()Z
+HSPLcom/android/server/wm/WindowToken;->isClientVisible()Z
 HPLcom/android/server/wm/WindowToken;->isEmpty()Z
 HPLcom/android/server/wm/WindowToken;->isFinishingFixedRotationTransform()Z
 PLcom/android/server/wm/WindowToken;->isFirstChildWindowGreaterThanSecond(Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;)Z
@@ -60890,15 +62824,15 @@
 PLcom/android/server/wm/WindowToken;->linkFixedRotationTransform(Lcom/android/server/wm/WindowToken;)V
 HSPLcom/android/server/wm/WindowToken;->makeSurface()Landroid/view/SurfaceControl$Builder;
 PLcom/android/server/wm/WindowToken;->onCancelFixedRotationTransform(I)V
-HPLcom/android/server/wm/WindowToken;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
+HSPLcom/android/server/wm/WindowToken;->onDisplayChanged(Lcom/android/server/wm/DisplayContent;)V+]Lcom/android/server/wm/DisplayContent;Lcom/android/server/wm/DisplayContent;
 PLcom/android/server/wm/WindowToken;->onFixedRotationStatePrepared()V
 HPLcom/android/server/wm/WindowToken;->removeAllWindowsIfPossible()V
 HPLcom/android/server/wm/WindowToken;->removeImmediately()V
 HPLcom/android/server/wm/WindowToken;->resetSurfacePositionForAnimationLeash(Landroid/view/SurfaceControl$Transaction;)V
 HSPLcom/android/server/wm/WindowToken;->resolveOverrideConfiguration(Landroid/content/res/Configuration;)V
-HPLcom/android/server/wm/WindowToken;->setClientVisible(Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/ActivityRecord;
+HSPLcom/android/server/wm/WindowToken;->setClientVisible(Z)V+]Lcom/android/server/wm/WindowContainer;Lcom/android/server/wm/WallpaperWindowToken;,Lcom/android/server/wm/ActivityRecord;
 HPLcom/android/server/wm/WindowToken;->setExiting(Z)V
-HPLcom/android/server/wm/WindowToken;->setInsetsFrozen(Z)V
+HSPLcom/android/server/wm/WindowToken;->setInsetsFrozen(Z)V
 HSPLcom/android/server/wm/WindowToken;->toString()Ljava/lang/String;
 HSPLcom/android/server/wm/WindowToken;->updateSurfacePosition(Landroid/view/SurfaceControl$Transaction;)V
 HPLcom/android/server/wm/WindowToken;->windowsCanBeWallpaperTarget()Z+]Lcom/android/server/wm/WindowState;Lcom/android/server/wm/WindowState;]Ljava/util/ArrayList;Lcom/android/server/wm/WindowList;
@@ -60926,7 +62860,7 @@
 HPLcom/android/server/wm/utils/RegionUtils;->forEachRectReverse(Landroid/graphics/Region;Ljava/util/function/Consumer;)V+]Landroid/graphics/RegionIterator;Landroid/graphics/RegionIterator;]Ljava/util/ArrayList;Ljava/util/ArrayList;
 HPLcom/android/server/wm/utils/RegionUtils;->rectListToRegion(Ljava/util/List;Landroid/graphics/Region;)V
 PLcom/android/server/wm/utils/RotationAnimationUtils;->createRotationMatrix(IIILandroid/graphics/Matrix;)V
-PLcom/android/server/wm/utils/RotationAnimationUtils;->getLumaOfSurfaceControl(Landroid/view/Display;Landroid/view/SurfaceControl;)F
+HPLcom/android/server/wm/utils/RotationAnimationUtils;->getLumaOfSurfaceControl(Landroid/view/Display;Landroid/view/SurfaceControl;)F
 HPLcom/android/server/wm/utils/RotationAnimationUtils;->getMedianBorderLuma(Landroid/hardware/HardwareBuffer;Landroid/graphics/ColorSpace;)F+]Landroid/media/Image;Landroid/media/ImageReader$SurfaceImage;]Landroid/view/Surface;Landroid/view/Surface;]Landroid/hardware/HardwareBuffer;Landroid/hardware/HardwareBuffer;]Landroid/media/ImageReader;Landroid/media/ImageReader;]Landroid/media/Image$Plane;Landroid/media/ImageReader$SurfaceImage$SurfacePlane;
 HPLcom/android/server/wm/utils/RotationAnimationUtils;->getPixelLuminance(Ljava/nio/ByteBuffer;IIII)F+]Ljava/nio/ByteBuffer;Ljava/nio/DirectByteBuffer;]Landroid/graphics/Color;Landroid/graphics/Color;
 PLcom/android/server/wm/utils/RotationAnimationUtils;->hasProtectedContent(Landroid/hardware/HardwareBuffer;)Z
@@ -60946,18 +62880,18 @@
 HPLcom/ibm/icu/impl/CalendarAstronomer;-><init>(DD)V
 HPLcom/ibm/icu/impl/CalendarAstronomer;-><init>(J)V
 HPLcom/ibm/icu/impl/CalendarAstronomer;->clearCache()V
-PLcom/ibm/icu/impl/CalendarAstronomer;->eclipticObliquity()D
+HPLcom/ibm/icu/impl/CalendarAstronomer;->eclipticObliquity()D
 HPLcom/ibm/icu/impl/CalendarAstronomer;->eclipticToEquatorial(DD)Lcom/ibm/icu/impl/CalendarAstronomer$Equatorial;
 HPLcom/ibm/icu/impl/CalendarAstronomer;->getJulianDay()D
 HPLcom/ibm/icu/impl/CalendarAstronomer;->getSiderealOffset()D
 HPLcom/ibm/icu/impl/CalendarAstronomer;->getSunLongitude()D
 HPLcom/ibm/icu/impl/CalendarAstronomer;->getSunLongitude(D)[D
-PLcom/ibm/icu/impl/CalendarAstronomer;->getSunPosition()Lcom/ibm/icu/impl/CalendarAstronomer$Equatorial;
+HPLcom/ibm/icu/impl/CalendarAstronomer;->getSunPosition()Lcom/ibm/icu/impl/CalendarAstronomer$Equatorial;
 HPLcom/ibm/icu/impl/CalendarAstronomer;->getSunRiseSet(Z)J
 HPLcom/ibm/icu/impl/CalendarAstronomer;->lstToUT(D)J
 PLcom/ibm/icu/impl/CalendarAstronomer;->norm2PI(D)D
 PLcom/ibm/icu/impl/CalendarAstronomer;->normPI(D)D
-PLcom/ibm/icu/impl/CalendarAstronomer;->normalize(DD)D
+HPLcom/ibm/icu/impl/CalendarAstronomer;->normalize(DD)D
 HPLcom/ibm/icu/impl/CalendarAstronomer;->riseOrSet(Lcom/ibm/icu/impl/CalendarAstronomer$CoordFunc;ZDDJ)J
 PLcom/ibm/icu/impl/CalendarAstronomer;->setTime(J)V
 HPLcom/ibm/icu/impl/CalendarAstronomer;->trueAnomaly(DD)D
@@ -60981,6 +62915,8 @@
 Landroid/hardware/biometrics/face/IFace;
 Landroid/hardware/biometrics/face/SensorProps$1;
 Landroid/hardware/biometrics/face/SensorProps;
+Landroid/hardware/biometrics/face/V1_0/IBiometricsFaceClientCallback$Stub;
+Landroid/hardware/biometrics/face/V1_0/IBiometricsFaceClientCallback;
 Landroid/hardware/biometrics/fingerprint/IFingerprint$Stub$Proxy;
 Landroid/hardware/biometrics/fingerprint/IFingerprint$Stub;
 Landroid/hardware/biometrics/fingerprint/IFingerprint;
@@ -61088,6 +63024,8 @@
 Landroid/net/INetd;
 Landroid/net/INetdUnsolicitedEventListener$Stub;
 Landroid/net/INetdUnsolicitedEventListener;
+Landroid/net/INetworkStackConnector$Stub$Proxy;
+Landroid/net/INetworkStackConnector$Stub;
 Landroid/net/INetworkStackConnector;
 Landroid/net/NetworkStackClient$Dependencies;
 Landroid/net/NetworkStackClient$DependenciesImpl;
@@ -61146,6 +63084,7 @@
 Lcom/android/server/BatteryService$5;
 Lcom/android/server/BatteryService$6;
 Lcom/android/server/BatteryService$7;
+Lcom/android/server/BatteryService$8;
 Lcom/android/server/BatteryService$BatteryPropertiesRegistrar;
 Lcom/android/server/BatteryService$BinderService;
 Lcom/android/server/BatteryService$Led;
@@ -61173,6 +63112,7 @@
 Lcom/android/server/ConsumerIrService;
 Lcom/android/server/ContextHubSystemService$$ExternalSyntheticLambda0;
 Lcom/android/server/ContextHubSystemService;
+Lcom/android/server/CountryDetectorService$$ExternalSyntheticLambda0;
 Lcom/android/server/CountryDetectorService$$ExternalSyntheticLambda3;
 Lcom/android/server/CountryDetectorService;
 Lcom/android/server/DeviceIdleController$$ExternalSyntheticLambda0;
@@ -61223,6 +63163,14 @@
 Lcom/android/server/EntropyMixer$2;
 Lcom/android/server/EntropyMixer;
 Lcom/android/server/EventLogTags;
+Lcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda0;
+Lcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda1;
+Lcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda2;
+Lcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda3;
+Lcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda4;
+Lcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda5;
+Lcom/android/server/ExplicitHealthCheckController$$ExternalSyntheticLambda6;
+Lcom/android/server/ExplicitHealthCheckController$1;
 Lcom/android/server/ExplicitHealthCheckController;
 Lcom/android/server/ExtconStateObserver;
 Lcom/android/server/ExtconUEventObserver$ExtconInfo$$ExternalSyntheticLambda0;
@@ -61334,6 +63282,7 @@
 Lcom/android/server/SensorNotificationService;
 Lcom/android/server/SerialService;
 Lcom/android/server/ServiceThread;
+Lcom/android/server/SmartStorageMaintIdler;
 Lcom/android/server/StorageManagerService$1;
 Lcom/android/server/StorageManagerService$2;
 Lcom/android/server/StorageManagerService$3;
@@ -61434,6 +63383,21 @@
 Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection$SystemSupport;
 Lcom/android/server/accessibility/AbstractAccessibilityServiceConnection;
 Lcom/android/server/accessibility/AccessibilityInputFilter;
+Lcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda23;
+Lcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda24;
+Lcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda30;
+Lcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda31;
+Lcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda33;
+Lcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda34;
+Lcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda35;
+Lcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda37;
+Lcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda38;
+Lcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda43;
+Lcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda44;
+Lcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda49;
+Lcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda50;
+Lcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda51;
+Lcom/android/server/accessibility/AccessibilityManagerService$$ExternalSyntheticLambda53;
 Lcom/android/server/accessibility/AccessibilityManagerService$1;
 Lcom/android/server/accessibility/AccessibilityManagerService$2;
 Lcom/android/server/accessibility/AccessibilityManagerService$3;
@@ -61452,24 +63416,34 @@
 Lcom/android/server/accessibility/AccessibilityUserState$ServiceInfoChangeListener;
 Lcom/android/server/accessibility/AccessibilityUserState;
 Lcom/android/server/accessibility/AccessibilityWindowManager$AccessibilityEventSender;
+Lcom/android/server/accessibility/AccessibilityWindowManager$DisplayWindowsObserver;
 Lcom/android/server/accessibility/AccessibilityWindowManager;
 Lcom/android/server/accessibility/CaptioningManagerImpl;
 Lcom/android/server/accessibility/EventStreamTransformation;
 Lcom/android/server/accessibility/FingerprintGestureDispatcher$FingerprintGestureClient;
 Lcom/android/server/accessibility/KeyEventDispatcher$KeyEventFilter;
 Lcom/android/server/accessibility/PolicyWarningUIController$$ExternalSyntheticLambda2;
+Lcom/android/server/accessibility/PolicyWarningUIController$$ExternalSyntheticLambda3;
+Lcom/android/server/accessibility/PolicyWarningUIController$NotificationController$$ExternalSyntheticLambda0;
 Lcom/android/server/accessibility/PolicyWarningUIController$NotificationController;
 Lcom/android/server/accessibility/PolicyWarningUIController;
 Lcom/android/server/accessibility/SystemActionPerformer$SystemActionsChangedListener;
+Lcom/android/server/accessibility/SystemActionPerformer;
 Lcom/android/server/accessibility/UiAutomationManager$1;
 Lcom/android/server/accessibility/UiAutomationManager$UiAutomationService;
 Lcom/android/server/accessibility/UiAutomationManager;
 Lcom/android/server/accessibility/magnification/FullScreenMagnificationController$MagnificationInfoChangedCallback;
+Lcom/android/server/accessibility/magnification/MagnificationController$DisableMagnificationCallback;
+Lcom/android/server/accessibility/magnification/MagnificationController$TransitionCallBack;
 Lcom/android/server/accessibility/magnification/MagnificationController;
 Lcom/android/server/accessibility/magnification/MagnificationGestureHandler$Callback;
 Lcom/android/server/accessibility/magnification/MagnificationProcessor;
 Lcom/android/server/accessibility/magnification/MagnificationScaleProvider;
+Lcom/android/server/accessibility/magnification/PanningScalingHandler$MagnificationDelegate;
+Lcom/android/server/accessibility/magnification/WindowMagnificationManager$1;
 Lcom/android/server/accessibility/magnification/WindowMagnificationManager$Callback;
+Lcom/android/server/accessibility/magnification/WindowMagnificationManager$WindowMagnifier;
+Lcom/android/server/accessibility/magnification/WindowMagnificationManager;
 Lcom/android/server/accounts/AccountAuthenticatorCache$MySerializer;
 Lcom/android/server/accounts/AccountAuthenticatorCache;
 Lcom/android/server/accounts/AccountManagerService$$ExternalSyntheticLambda1;
@@ -61494,6 +63468,7 @@
 Lcom/android/server/accounts/AccountManagerService$Injector;
 Lcom/android/server/accounts/AccountManagerService$Lifecycle;
 Lcom/android/server/accounts/AccountManagerService$MessageHandler;
+Lcom/android/server/accounts/AccountManagerService$NotificationId;
 Lcom/android/server/accounts/AccountManagerService$RemoveAccountSession;
 Lcom/android/server/accounts/AccountManagerService$Session;
 Lcom/android/server/accounts/AccountManagerService$StartAccountSession;
@@ -61507,6 +63482,7 @@
 Lcom/android/server/accounts/IAccountAuthenticatorCache;
 Lcom/android/server/accounts/TokenCache$TokenLruCache;
 Lcom/android/server/accounts/TokenCache;
+Lcom/android/server/adb/AdbDebuggingManager$$ExternalSyntheticLambda0;
 Lcom/android/server/adb/AdbDebuggingManager$AdbConnectionInfo;
 Lcom/android/server/adb/AdbDebuggingManager$AdbConnectionPortListener;
 Lcom/android/server/adb/AdbDebuggingManager$AdbConnectionPortPoller;
@@ -61516,6 +63492,7 @@
 Lcom/android/server/adb/AdbDebuggingManager$AdbDebuggingThread;
 Lcom/android/server/adb/AdbDebuggingManager$PairingThread;
 Lcom/android/server/adb/AdbDebuggingManager$PortListenerImpl;
+Lcom/android/server/adb/AdbDebuggingManager$Ticker;
 Lcom/android/server/adb/AdbDebuggingManager;
 Lcom/android/server/adb/AdbService$AdbConnectionPortListener;
 Lcom/android/server/adb/AdbService$AdbManagerInternalImpl$$ExternalSyntheticLambda1;
@@ -61538,6 +63515,7 @@
 Lcom/android/server/alarm/AlarmManagerService$4;
 Lcom/android/server/alarm/AlarmManagerService$5;
 Lcom/android/server/alarm/AlarmManagerService$8;
+Lcom/android/server/alarm/AlarmManagerService$9$$ExternalSyntheticLambda0;
 Lcom/android/server/alarm/AlarmManagerService$9$$ExternalSyntheticLambda1;
 Lcom/android/server/alarm/AlarmManagerService$9;
 Lcom/android/server/alarm/AlarmManagerService$AlarmHandler;
@@ -61557,6 +63535,7 @@
 Lcom/android/server/alarm/AlarmManagerService$PriorityClass;
 Lcom/android/server/alarm/AlarmManagerService$RemovedAlarm;
 Lcom/android/server/alarm/AlarmManagerService$ShellCmd;
+Lcom/android/server/alarm/AlarmManagerService$TemporaryQuotaReserve;
 Lcom/android/server/alarm/AlarmManagerService$UninstallReceiver;
 Lcom/android/server/alarm/AlarmManagerService;
 Lcom/android/server/alarm/AlarmStore$AlarmDeliveryCalculator;
@@ -61565,13 +63544,17 @@
 Lcom/android/server/alarm/LazyAlarmStore;
 Lcom/android/server/alarm/MetricsHelper$$ExternalSyntheticLambda0;
 Lcom/android/server/alarm/MetricsHelper;
+Lcom/android/server/am/ActiveServices$$ExternalSyntheticLambda2;
+Lcom/android/server/am/ActiveServices$$ExternalSyntheticLambda3;
 Lcom/android/server/am/ActiveServices$1;
 Lcom/android/server/am/ActiveServices$5;
 Lcom/android/server/am/ActiveServices$BackgroundRestrictedListener;
+Lcom/android/server/am/ActiveServices$ServiceDumper;
 Lcom/android/server/am/ActiveServices$ServiceLookupResult;
 Lcom/android/server/am/ActiveServices$ServiceMap;
 Lcom/android/server/am/ActiveServices$ServiceRestarter;
 Lcom/android/server/am/ActiveServices;
+Lcom/android/server/am/ActiveUids$$ExternalSyntheticLambda0;
 Lcom/android/server/am/ActiveUids;
 Lcom/android/server/am/ActivityManagerConstants$$ExternalSyntheticLambda0;
 Lcom/android/server/am/ActivityManagerConstants$1;
@@ -61583,9 +63566,13 @@
 Lcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda10;
 Lcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda13;
 Lcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda15;
+Lcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda16;
 Lcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda22;
+Lcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda23;
 Lcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda2;
+Lcom/android/server/am/ActivityManagerService$$ExternalSyntheticLambda4;
 Lcom/android/server/am/ActivityManagerService$12;
+Lcom/android/server/am/ActivityManagerService$13;
 Lcom/android/server/am/ActivityManagerService$14;
 Lcom/android/server/am/ActivityManagerService$15;
 Lcom/android/server/am/ActivityManagerService$16;
@@ -61604,6 +63591,7 @@
 Lcom/android/server/am/ActivityManagerService$HiddenApiSettings;
 Lcom/android/server/am/ActivityManagerService$Injector;
 Lcom/android/server/am/ActivityManagerService$IntentFirewallInterface;
+Lcom/android/server/am/ActivityManagerService$ItemMatcher;
 Lcom/android/server/am/ActivityManagerService$Lifecycle;
 Lcom/android/server/am/ActivityManagerService$LocalService;
 Lcom/android/server/am/ActivityManagerService$MainHandler$$ExternalSyntheticLambda1;
@@ -61621,6 +63609,8 @@
 Lcom/android/server/am/ActivityManagerService$SdkSandboxSettings;
 Lcom/android/server/am/ActivityManagerService$UiHandler;
 Lcom/android/server/am/ActivityManagerService;
+Lcom/android/server/am/ActivityManagerShellCommand$1;
+Lcom/android/server/am/ActivityManagerShellCommand$IntentReceiver;
 Lcom/android/server/am/ActivityManagerShellCommand;
 Lcom/android/server/am/AnrHelper$AnrConsumerThread;
 Lcom/android/server/am/AnrHelper;
@@ -61670,8 +63660,11 @@
 Lcom/android/server/am/AppPermissionTracker$MyHandler;
 Lcom/android/server/am/AppPermissionTracker;
 Lcom/android/server/am/AppProfiler$$ExternalSyntheticLambda1;
+Lcom/android/server/am/AppProfiler$$ExternalSyntheticLambda2;
+Lcom/android/server/am/AppProfiler$$ExternalSyntheticLambda4;
 Lcom/android/server/am/AppProfiler$$ExternalSyntheticLambda7;
 Lcom/android/server/am/AppProfiler$1;
+Lcom/android/server/am/AppProfiler$2;
 Lcom/android/server/am/AppProfiler$BgHandler;
 Lcom/android/server/am/AppProfiler$CpuBinder$1;
 Lcom/android/server/am/AppProfiler$CpuBinder;
@@ -61727,29 +63720,38 @@
 Lcom/android/server/am/BatteryExternalStatsWorker$$ExternalSyntheticLambda4;
 Lcom/android/server/am/BatteryExternalStatsWorker$$ExternalSyntheticLambda5;
 Lcom/android/server/am/BatteryExternalStatsWorker$$ExternalSyntheticLambda6;
+Lcom/android/server/am/BatteryExternalStatsWorker$$ExternalSyntheticLambda7;
 Lcom/android/server/am/BatteryExternalStatsWorker$$ExternalSyntheticLambda8;
 Lcom/android/server/am/BatteryExternalStatsWorker$1;
 Lcom/android/server/am/BatteryExternalStatsWorker$2;
+Lcom/android/server/am/BatteryExternalStatsWorker$3;
+Lcom/android/server/am/BatteryExternalStatsWorker$5;
 Lcom/android/server/am/BatteryExternalStatsWorker$Injector;
 Lcom/android/server/am/BatteryExternalStatsWorker;
+Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda101;
 Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda102;
 Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda104;
 Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda11;
 Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda13;
+Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda14;
+Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda22;
 Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda25;
 Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda27;
 Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda28;
 Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda32;
 Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda35;
+Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda36;
 Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda41;
 Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda46;
 Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda4;
 Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda53;
 Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda5;
+Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda61;
 Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda76;
 Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda85;
 Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda86;
 Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda88;
+Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda89;
 Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda91;
 Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda92;
 Lcom/android/server/am/BatteryStatsService$$ExternalSyntheticLambda94;
@@ -61775,6 +63777,7 @@
 Lcom/android/server/am/BroadcastStats$1;
 Lcom/android/server/am/BroadcastStats$ActionEntry;
 Lcom/android/server/am/BroadcastStats$PackageEntry;
+Lcom/android/server/am/BroadcastStats$ViolationEntry;
 Lcom/android/server/am/BroadcastStats;
 Lcom/android/server/am/CacheOomRanker$1;
 Lcom/android/server/am/CacheOomRanker$CacheUseComparator;
@@ -61841,12 +63844,15 @@
 Lcom/android/server/am/OomAdjProfiler$CpuTimes;
 Lcom/android/server/am/OomAdjProfiler;
 Lcom/android/server/am/OomAdjuster$$ExternalSyntheticLambda0;
+Lcom/android/server/am/OomAdjuster$$ExternalSyntheticLambda1;
+Lcom/android/server/am/OomAdjuster$$ExternalSyntheticLambda2;
 Lcom/android/server/am/OomAdjuster$$ExternalSyntheticLambda3;
 Lcom/android/server/am/OomAdjuster$1;
 Lcom/android/server/am/OomAdjuster$ComputeOomAdjWindowCallback;
 Lcom/android/server/am/OomAdjuster;
 Lcom/android/server/am/PackageList;
 Lcom/android/server/am/PendingIntentController;
+Lcom/android/server/am/PendingIntentRecord$$ExternalSyntheticLambda0;
 Lcom/android/server/am/PendingIntentRecord$Key;
 Lcom/android/server/am/PendingIntentRecord;
 Lcom/android/server/am/PendingStartActivityUids;
@@ -61865,6 +63871,7 @@
 Lcom/android/server/am/ProcessList$$ExternalSyntheticLambda3;
 Lcom/android/server/am/ProcessList$$ExternalSyntheticLambda4;
 Lcom/android/server/am/ProcessList$1;
+Lcom/android/server/am/ProcessList$2;
 Lcom/android/server/am/ProcessList$ImperceptibleKillRunner$H;
 Lcom/android/server/am/ProcessList$ImperceptibleKillRunner$IdlenessReceiver;
 Lcom/android/server/am/ProcessList$ImperceptibleKillRunner;
@@ -61875,6 +63882,7 @@
 Lcom/android/server/am/ProcessList$ProcStartHandler;
 Lcom/android/server/am/ProcessList$ProcStateMemTracker;
 Lcom/android/server/am/ProcessList;
+Lcom/android/server/am/ProcessMemInfo;
 Lcom/android/server/am/ProcessProfileRecord$$ExternalSyntheticLambda0;
 Lcom/android/server/am/ProcessProfileRecord$$ExternalSyntheticLambda1;
 Lcom/android/server/am/ProcessProfileRecord$$ExternalSyntheticLambda3;
@@ -61896,6 +63904,7 @@
 Lcom/android/server/am/ReceiverList;
 Lcom/android/server/am/ServiceRecord$$ExternalSyntheticLambda0;
 Lcom/android/server/am/ServiceRecord$1;
+Lcom/android/server/am/ServiceRecord$StartItem;
 Lcom/android/server/am/ServiceRecord;
 Lcom/android/server/am/SettingsToPropertiesMapper$$ExternalSyntheticLambda0;
 Lcom/android/server/am/SettingsToPropertiesMapper$1;
@@ -61963,6 +63972,7 @@
 Lcom/android/server/apphibernation/AppHibernationService;
 Lcom/android/server/apphibernation/AppHibernationShellCommand;
 Lcom/android/server/apphibernation/GlobalLevelHibernationProto;
+Lcom/android/server/apphibernation/GlobalLevelState;
 Lcom/android/server/apphibernation/HibernationStateDiskStore;
 Lcom/android/server/apphibernation/ProtoReadWriter;
 Lcom/android/server/apphibernation/UserLevelHibernationProto;
@@ -61974,6 +63984,7 @@
 Lcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda3;
 Lcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda6;
 Lcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda7;
+Lcom/android/server/appop/AppOpsService$$ExternalSyntheticLambda9;
 Lcom/android/server/appop/AppOpsService$1$1;
 Lcom/android/server/appop/AppOpsService$1;
 Lcom/android/server/appop/AppOpsService$2;
@@ -62041,6 +64052,8 @@
 Lcom/android/server/audio/AudioDeviceBroker$BrokerThread;
 Lcom/android/server/audio/AudioDeviceBroker;
 Lcom/android/server/audio/AudioDeviceInventory$1;
+Lcom/android/server/audio/AudioDeviceInventory$DeviceInfo;
+Lcom/android/server/audio/AudioDeviceInventory$WiredDeviceConnectionState;
 Lcom/android/server/audio/AudioDeviceInventory;
 Lcom/android/server/audio/AudioEventLogger$Event;
 Lcom/android/server/audio/AudioEventLogger$StringEvent;
@@ -62083,6 +64096,7 @@
 Lcom/android/server/audio/AudioSystemAdapter;
 Lcom/android/server/audio/BtHelper$1;
 Lcom/android/server/audio/BtHelper;
+Lcom/android/server/audio/FadeOutManager$FadedOutApp;
 Lcom/android/server/audio/FadeOutManager;
 Lcom/android/server/audio/MediaFocusControl$1;
 Lcom/android/server/audio/MediaFocusControl$2;
@@ -62090,6 +64104,7 @@
 Lcom/android/server/audio/MediaFocusControl;
 Lcom/android/server/audio/PlaybackActivityMonitor$1;
 Lcom/android/server/audio/PlaybackActivityMonitor$AudioAttrEvent;
+Lcom/android/server/audio/PlaybackActivityMonitor$DuckingManager$DuckedApp;
 Lcom/android/server/audio/PlaybackActivityMonitor$DuckingManager;
 Lcom/android/server/audio/PlaybackActivityMonitor$MuteAwaitConnectionEvent;
 Lcom/android/server/audio/PlaybackActivityMonitor$NewPlayerEvent;
@@ -62205,6 +64220,9 @@
 Lcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper$$ExternalSyntheticLambda0;
 Lcom/android/server/biometrics/sensors/face/FaceService$FaceServiceWrapper;
 Lcom/android/server/biometrics/sensors/face/FaceService;
+Lcom/android/server/biometrics/sensors/face/FaceUserState;
+Lcom/android/server/biometrics/sensors/face/FaceUtils;
+Lcom/android/server/biometrics/sensors/face/LockoutHalImpl;
 Lcom/android/server/biometrics/sensors/face/ServiceProvider;
 Lcom/android/server/biometrics/sensors/face/UsageStats;
 Lcom/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient;
@@ -62228,6 +64246,22 @@
 Lcom/android/server/biometrics/sensors/face/aidl/Sensor$1;
 Lcom/android/server/biometrics/sensors/face/aidl/Sensor$2;
 Lcom/android/server/biometrics/sensors/face/aidl/Sensor;
+Lcom/android/server/biometrics/sensors/face/hidl/Face10$$ExternalSyntheticLambda0;
+Lcom/android/server/biometrics/sensors/face/hidl/Face10$$ExternalSyntheticLambda1;
+Lcom/android/server/biometrics/sensors/face/hidl/Face10$1;
+Lcom/android/server/biometrics/sensors/face/hidl/Face10$HalResultController$Callback;
+Lcom/android/server/biometrics/sensors/face/hidl/Face10$HalResultController;
+Lcom/android/server/biometrics/sensors/face/hidl/Face10;
+Lcom/android/server/biometrics/sensors/face/hidl/FaceAuthenticationClient;
+Lcom/android/server/biometrics/sensors/face/hidl/FaceEnrollClient;
+Lcom/android/server/biometrics/sensors/face/hidl/FaceGenerateChallengeClient;
+Lcom/android/server/biometrics/sensors/face/hidl/FaceGetFeatureClient;
+Lcom/android/server/biometrics/sensors/face/hidl/FaceInternalCleanupClient;
+Lcom/android/server/biometrics/sensors/face/hidl/FaceRemovalClient;
+Lcom/android/server/biometrics/sensors/face/hidl/FaceResetLockoutClient;
+Lcom/android/server/biometrics/sensors/face/hidl/FaceRevokeChallengeClient;
+Lcom/android/server/biometrics/sensors/face/hidl/FaceSetFeatureClient;
+Lcom/android/server/biometrics/sensors/face/hidl/FaceUpdateActiveUserClient;
 Lcom/android/server/biometrics/sensors/fingerprint/FingerprintAuthenticator;
 Lcom/android/server/biometrics/sensors/fingerprint/FingerprintService$$ExternalSyntheticLambda0;
 Lcom/android/server/biometrics/sensors/fingerprint/FingerprintService$FingerprintServiceWrapper$$ExternalSyntheticLambda0;
@@ -62280,8 +64314,13 @@
 Lcom/android/server/biometrics/sensors/fingerprint/hidl/LockoutFrameworkImpl$LockoutReceiver;
 Lcom/android/server/biometrics/sensors/fingerprint/hidl/LockoutFrameworkImpl$LockoutResetCallback;
 Lcom/android/server/biometrics/sensors/fingerprint/hidl/LockoutFrameworkImpl;
+Lcom/android/server/blob/BlobAccessMode;
+Lcom/android/server/blob/BlobMetadata$$ExternalSyntheticLambda2;
+Lcom/android/server/blob/BlobMetadata$$ExternalSyntheticLambda4;
 Lcom/android/server/blob/BlobMetadata$Accessor;
+Lcom/android/server/blob/BlobMetadata$Committer;
 Lcom/android/server/blob/BlobMetadata$Leasee;
+Lcom/android/server/blob/BlobMetadata;
 Lcom/android/server/blob/BlobStoreConfig$$ExternalSyntheticLambda0;
 Lcom/android/server/blob/BlobStoreConfig$DeviceConfigProperties$$ExternalSyntheticLambda0;
 Lcom/android/server/blob/BlobStoreConfig$DeviceConfigProperties;
@@ -62402,6 +64441,7 @@
 Lcom/android/server/connectivity/IpConnectivityMetrics$LoggerImpl;
 Lcom/android/server/connectivity/IpConnectivityMetrics;
 Lcom/android/server/connectivity/MultipathPolicyTracker$1;
+Lcom/android/server/connectivity/MultipathPolicyTracker$2$$ExternalSyntheticLambda0;
 Lcom/android/server/connectivity/MultipathPolicyTracker$2;
 Lcom/android/server/connectivity/MultipathPolicyTracker$ConfigChangeReceiver;
 Lcom/android/server/connectivity/MultipathPolicyTracker$Dependencies;
@@ -62413,11 +64453,23 @@
 Lcom/android/server/connectivity/PacProxyService$1;
 Lcom/android/server/connectivity/PacProxyService$PacRefreshIntentReceiver;
 Lcom/android/server/connectivity/PacProxyService;
+Lcom/android/server/connectivity/Vpn$1;
+Lcom/android/server/connectivity/Vpn$2;
+Lcom/android/server/connectivity/Vpn$Dependencies;
+Lcom/android/server/connectivity/Vpn$IkeV2VpnRunner;
+Lcom/android/server/connectivity/Vpn$IkeV2VpnRunnerCallback;
+Lcom/android/server/connectivity/Vpn$Ikev2SessionCreator;
+Lcom/android/server/connectivity/Vpn$LegacyVpnRunner;
+Lcom/android/server/connectivity/Vpn$SystemServices;
+Lcom/android/server/connectivity/Vpn$VpnRunner;
 Lcom/android/server/connectivity/Vpn;
 Lcom/android/server/connectivity/VpnProfileStore;
 Lcom/android/server/content/ContentService$$ExternalSyntheticLambda0;
 Lcom/android/server/content/ContentService$1;
 Lcom/android/server/content/ContentService$Lifecycle;
+Lcom/android/server/content/ContentService$ObserverCollector$$ExternalSyntheticLambda0;
+Lcom/android/server/content/ContentService$ObserverCollector$Key;
+Lcom/android/server/content/ContentService$ObserverCollector;
 Lcom/android/server/content/ContentService$ObserverNode$ObserverEntry;
 Lcom/android/server/content/ContentService$ObserverNode;
 Lcom/android/server/content/ContentService;
@@ -62468,6 +64520,7 @@
 Lcom/android/server/contentsuggestions/ContentSuggestionsManagerService;
 Lcom/android/server/contentsuggestions/ContentSuggestionsManagerServiceShellCommand;
 Lcom/android/server/contentsuggestions/ContentSuggestionsPerUserService;
+Lcom/android/server/contentsuggestions/RemoteContentSuggestionsService;
 Lcom/android/server/coverage/CoverageService$CoverageCommand;
 Lcom/android/server/coverage/CoverageService;
 Lcom/android/server/criticalevents/CriticalEventLog$$ExternalSyntheticLambda0;
@@ -62504,6 +64557,7 @@
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda116;
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda120;
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda121;
+Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda122;
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda126;
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda127;
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda128;
@@ -62511,9 +64565,11 @@
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda130;
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda136;
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda137;
+Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda138;
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda143;
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda144;
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda145;
+Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda148;
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda149;
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda150;
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda151;
@@ -62522,7 +64578,10 @@
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda154;
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda155;
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda156;
+Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda157;
+Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda22;
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda23;
+Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda29;
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda41;
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$$ExternalSyntheticLambda55;
 Lcom/android/server/devicepolicy/DevicePolicyManagerService$1;
@@ -62569,6 +64628,7 @@
 Lcom/android/server/devicestate/DeviceState;
 Lcom/android/server/devicestate/DeviceStateManagerService$$ExternalSyntheticLambda0;
 Lcom/android/server/devicestate/DeviceStateManagerService$$ExternalSyntheticLambda1;
+Lcom/android/server/devicestate/DeviceStateManagerService$$ExternalSyntheticLambda2;
 Lcom/android/server/devicestate/DeviceStateManagerService$$ExternalSyntheticLambda3;
 Lcom/android/server/devicestate/DeviceStateManagerService$$ExternalSyntheticLambda4;
 Lcom/android/server/devicestate/DeviceStateManagerService$BinderService;
@@ -62660,6 +64720,7 @@
 Lcom/android/server/display/DisplayManagerService$DeviceStateListener;
 Lcom/android/server/display/DisplayManagerService$DisplayManagerHandler;
 Lcom/android/server/display/DisplayManagerService$Injector;
+Lcom/android/server/display/DisplayManagerService$LocalService$$ExternalSyntheticLambda0;
 Lcom/android/server/display/DisplayManagerService$LocalService;
 Lcom/android/server/display/DisplayManagerService$LogicalDisplayListener;
 Lcom/android/server/display/DisplayManagerService$SettingsObserver;
@@ -62756,6 +64817,7 @@
 Lcom/android/server/display/VirtualDisplayAdapter$VirtualDisplayDevice;
 Lcom/android/server/display/VirtualDisplayAdapter;
 Lcom/android/server/display/WifiDisplayAdapter;
+Lcom/android/server/display/color/AppSaturationController$SaturationController;
 Lcom/android/server/display/color/AppSaturationController;
 Lcom/android/server/display/color/ColorDisplayService$1;
 Lcom/android/server/display/color/ColorDisplayService$2;
@@ -63089,6 +65151,7 @@
 Lcom/android/server/job/JobStore$ReadJobMapFromDiskRunnable;
 Lcom/android/server/job/JobStore;
 Lcom/android/server/job/PendingJobQueue$$ExternalSyntheticLambda0;
+Lcom/android/server/job/PendingJobQueue$AppJobQueue;
 Lcom/android/server/job/PendingJobQueue;
 Lcom/android/server/job/StateChangedListener;
 Lcom/android/server/job/controllers/BackgroundJobsController$1;
@@ -63129,6 +65192,8 @@
 Lcom/android/server/job/controllers/QuotaController$QcHandler;
 Lcom/android/server/job/controllers/QuotaController$QcUidObserver;
 Lcom/android/server/job/controllers/QuotaController$QuotaBump;
+Lcom/android/server/job/controllers/QuotaController$ShrinkableDebits;
+Lcom/android/server/job/controllers/QuotaController$StandbyTracker$$ExternalSyntheticLambda0;
 Lcom/android/server/job/controllers/QuotaController$StandbyTracker;
 Lcom/android/server/job/controllers/QuotaController$TempAllowlistTracker;
 Lcom/android/server/job/controllers/QuotaController$TimedEvent;
@@ -63136,6 +65201,7 @@
 Lcom/android/server/job/controllers/QuotaController$Timer;
 Lcom/android/server/job/controllers/QuotaController$TimerChargingUpdateFunctor;
 Lcom/android/server/job/controllers/QuotaController$TimingSession;
+Lcom/android/server/job/controllers/QuotaController$TopAppTimer;
 Lcom/android/server/job/controllers/QuotaController$UidConstraintUpdater;
 Lcom/android/server/job/controllers/QuotaController$UsageEventTracker;
 Lcom/android/server/job/controllers/QuotaController;
@@ -63238,8 +65304,12 @@
 Lcom/android/server/location/contexthub/IContextHubWrapper$ICallback;
 Lcom/android/server/location/contexthub/IContextHubWrapper;
 Lcom/android/server/location/contexthub/NanoAppStateManager;
+Lcom/android/server/location/countrydetector/ComprehensiveCountryDetector$1;
+Lcom/android/server/location/countrydetector/ComprehensiveCountryDetector$3;
+Lcom/android/server/location/countrydetector/ComprehensiveCountryDetector$4;
 Lcom/android/server/location/countrydetector/ComprehensiveCountryDetector;
 Lcom/android/server/location/countrydetector/CountryDetectorBase;
+Lcom/android/server/location/countrydetector/LocationBasedCountryDetector;
 Lcom/android/server/location/eventlog/LocalEventLog;
 Lcom/android/server/location/eventlog/LocationEventLog$AggregateStats;
 Lcom/android/server/location/eventlog/LocationEventLog$LocationsEventLog;
@@ -63423,6 +65493,7 @@
 Lcom/android/server/location/provider/AbstractLocationProvider$State;
 Lcom/android/server/location/provider/AbstractLocationProvider;
 Lcom/android/server/location/provider/DelegateLocationProvider$$ExternalSyntheticLambda0;
+Lcom/android/server/location/provider/DelegateLocationProvider$$ExternalSyntheticLambda1;
 Lcom/android/server/location/provider/DelegateLocationProvider;
 Lcom/android/server/location/provider/LocationProviderController;
 Lcom/android/server/location/provider/LocationProviderManager$$ExternalSyntheticLambda10;
@@ -63459,11 +65530,14 @@
 Lcom/android/server/location/provider/LocationProviderManager;
 Lcom/android/server/location/provider/MockLocationProvider;
 Lcom/android/server/location/provider/MockableLocationProvider$$ExternalSyntheticLambda0;
+Lcom/android/server/location/provider/MockableLocationProvider$ListenerWrapper$$ExternalSyntheticLambda0;
 Lcom/android/server/location/provider/MockableLocationProvider$ListenerWrapper;
 Lcom/android/server/location/provider/MockableLocationProvider;
 Lcom/android/server/location/provider/PassiveLocationProvider;
 Lcom/android/server/location/provider/PassiveLocationProviderManager;
 Lcom/android/server/location/provider/StationaryThrottlingLocationProvider;
+Lcom/android/server/location/provider/proxy/ProxyLocationProvider$Proxy$$ExternalSyntheticLambda0;
+Lcom/android/server/location/provider/proxy/ProxyLocationProvider$Proxy;
 Lcom/android/server/location/provider/proxy/ProxyLocationProvider;
 Lcom/android/server/location/settings/LocationSettings$LocationUserSettingsListener;
 Lcom/android/server/location/settings/LocationSettings$LocationUserSettingsStore;
@@ -63498,15 +65572,22 @@
 Lcom/android/server/locksettings/ManagedProfilePasswordCache;
 Lcom/android/server/locksettings/PasswordSlotManager;
 Lcom/android/server/locksettings/RebootEscrowKeyStoreManager;
+Lcom/android/server/locksettings/RebootEscrowManager$$ExternalSyntheticLambda0;
 Lcom/android/server/locksettings/RebootEscrowManager$Callbacks;
 Lcom/android/server/locksettings/RebootEscrowManager$Injector;
 Lcom/android/server/locksettings/RebootEscrowManager$RebootEscrowEvent;
 Lcom/android/server/locksettings/RebootEscrowManager$RebootEscrowEventLog;
 Lcom/android/server/locksettings/RebootEscrowManager;
+Lcom/android/server/locksettings/RebootEscrowProviderInterface;
+Lcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl$Injector;
+Lcom/android/server/locksettings/RebootEscrowProviderServerBasedImpl;
+Lcom/android/server/locksettings/ResumeOnRebootServiceProvider$ResumeOnRebootServiceConnection;
+Lcom/android/server/locksettings/ResumeOnRebootServiceProvider;
 Lcom/android/server/locksettings/SyntheticPasswordCrypto;
 Lcom/android/server/locksettings/SyntheticPasswordManager$$ExternalSyntheticLambda0;
 Lcom/android/server/locksettings/SyntheticPasswordManager$PasswordData;
 Lcom/android/server/locksettings/SyntheticPasswordManager;
+Lcom/android/server/locksettings/recoverablekeystore/BadPlatformKeyException;
 Lcom/android/server/locksettings/recoverablekeystore/InsecureUserException;
 Lcom/android/server/locksettings/recoverablekeystore/KeyStoreProxy;
 Lcom/android/server/locksettings/recoverablekeystore/KeyStoreProxyImpl;
@@ -63516,6 +65597,7 @@
 Lcom/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager;
 Lcom/android/server/locksettings/recoverablekeystore/RecoverySnapshotListenersStorage;
 Lcom/android/server/locksettings/recoverablekeystore/TestOnlyInsecureCertificateHelper;
+Lcom/android/server/locksettings/recoverablekeystore/WrappedKey;
 Lcom/android/server/locksettings/recoverablekeystore/certificate/CertParsingException;
 Lcom/android/server/locksettings/recoverablekeystore/certificate/CertValidationException;
 Lcom/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotParserException;
@@ -63552,6 +65634,7 @@
 Lcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda0;
 Lcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda14;
 Lcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda2;
+Lcom/android/server/media/MediaRouter2ServiceImpl$$ExternalSyntheticLambda3;
 Lcom/android/server/media/MediaRouter2ServiceImpl$1;
 Lcom/android/server/media/MediaRouter2ServiceImpl$ManagerRecord;
 Lcom/android/server/media/MediaRouter2ServiceImpl$UserHandler$$ExternalSyntheticLambda10;
@@ -63574,6 +65657,11 @@
 Lcom/android/server/media/MediaSessionDeviceConfig$$ExternalSyntheticLambda0;
 Lcom/android/server/media/MediaSessionDeviceConfig$$ExternalSyntheticLambda1;
 Lcom/android/server/media/MediaSessionDeviceConfig;
+Lcom/android/server/media/MediaSessionRecord$3;
+Lcom/android/server/media/MediaSessionRecord$ControllerStub;
+Lcom/android/server/media/MediaSessionRecord$MessageHandler;
+Lcom/android/server/media/MediaSessionRecord$SessionCb;
+Lcom/android/server/media/MediaSessionRecord$SessionStub;
 Lcom/android/server/media/MediaSessionRecord;
 Lcom/android/server/media/MediaSessionRecordImpl;
 Lcom/android/server/media/MediaSessionService$$ExternalSyntheticLambda0;
@@ -63596,6 +65684,7 @@
 Lcom/android/server/media/RemoteDisplayProviderWatcher$Callback;
 Lcom/android/server/media/RemoteDisplayProviderWatcher;
 Lcom/android/server/media/SystemMediaRoute2Provider$$ExternalSyntheticLambda2;
+Lcom/android/server/media/SystemMediaRoute2Provider$1$$ExternalSyntheticLambda0;
 Lcom/android/server/media/SystemMediaRoute2Provider$1;
 Lcom/android/server/media/SystemMediaRoute2Provider$AudioManagerBroadcastReceiver;
 Lcom/android/server/media/SystemMediaRoute2Provider;
@@ -63664,10 +65753,12 @@
 Lcom/android/server/net/watchlist/WatchlistReportDbHelper$AggregatedResult;
 Lcom/android/server/net/watchlist/WatchlistReportDbHelper;
 Lcom/android/server/net/watchlist/WatchlistSettings;
+Lcom/android/server/notification/AlertRateLimiter;
 Lcom/android/server/notification/BadgeExtractor;
 Lcom/android/server/notification/BubbleExtractor;
 Lcom/android/server/notification/CalendarTracker$1;
 Lcom/android/server/notification/CalendarTracker$Callback;
+Lcom/android/server/notification/CalendarTracker$CheckEventResult;
 Lcom/android/server/notification/CalendarTracker;
 Lcom/android/server/notification/ConditionProviders$Callback;
 Lcom/android/server/notification/ConditionProviders$ConditionRecord;
@@ -63697,6 +65788,11 @@
 Lcom/android/server/notification/NotificationComparator$1;
 Lcom/android/server/notification/NotificationComparator;
 Lcom/android/server/notification/NotificationDelegate;
+Lcom/android/server/notification/NotificationHistoryDatabase$1;
+Lcom/android/server/notification/NotificationHistoryDatabase$WriteBufferRunnable;
+Lcom/android/server/notification/NotificationHistoryDatabase;
+Lcom/android/server/notification/NotificationHistoryDatabaseFactory;
+Lcom/android/server/notification/NotificationHistoryManager$$ExternalSyntheticLambda0;
 Lcom/android/server/notification/NotificationHistoryManager$SettingsObserver;
 Lcom/android/server/notification/NotificationHistoryManager;
 Lcom/android/server/notification/NotificationIntrusivenessExtractor$1;
@@ -63705,10 +65801,13 @@
 Lcom/android/server/notification/NotificationManagerService$$ExternalSyntheticLambda0;
 Lcom/android/server/notification/NotificationManagerService$$ExternalSyntheticLambda3;
 Lcom/android/server/notification/NotificationManagerService$$ExternalSyntheticLambda4;
+Lcom/android/server/notification/NotificationManagerService$$ExternalSyntheticLambda9;
+Lcom/android/server/notification/NotificationManagerService$10$1;
 Lcom/android/server/notification/NotificationManagerService$10;
 Lcom/android/server/notification/NotificationManagerService$11;
 Lcom/android/server/notification/NotificationManagerService$12;
 Lcom/android/server/notification/NotificationManagerService$13;
+Lcom/android/server/notification/NotificationManagerService$15$$ExternalSyntheticLambda0;
 Lcom/android/server/notification/NotificationManagerService$15;
 Lcom/android/server/notification/NotificationManagerService$1;
 Lcom/android/server/notification/NotificationManagerService$2;
@@ -63723,24 +65822,38 @@
 Lcom/android/server/notification/NotificationManagerService$9;
 Lcom/android/server/notification/NotificationManagerService$Archive;
 Lcom/android/server/notification/NotificationManagerService$CancelNotificationRunnable;
+Lcom/android/server/notification/NotificationManagerService$EnqueueNotificationRunnable;
+Lcom/android/server/notification/NotificationManagerService$FlagChecker;
 Lcom/android/server/notification/NotificationManagerService$NotificationAssistants;
 Lcom/android/server/notification/NotificationManagerService$NotificationListeners$$ExternalSyntheticLambda1;
+Lcom/android/server/notification/NotificationManagerService$NotificationListeners$$ExternalSyntheticLambda8;
 Lcom/android/server/notification/NotificationManagerService$NotificationListeners;
+Lcom/android/server/notification/NotificationManagerService$NotificationRecordExtractorData;
 Lcom/android/server/notification/NotificationManagerService$NotificationTrampolineCallback;
+Lcom/android/server/notification/NotificationManagerService$PostNotificationRunnable$$ExternalSyntheticLambda0;
+Lcom/android/server/notification/NotificationManagerService$PostNotificationRunnable;
 Lcom/android/server/notification/NotificationManagerService$RankingHandlerWorker;
 Lcom/android/server/notification/NotificationManagerService$RoleObserver;
 Lcom/android/server/notification/NotificationManagerService$SavePolicyFileRunnable;
 Lcom/android/server/notification/NotificationManagerService$SettingsObserver;
 Lcom/android/server/notification/NotificationManagerService$StatsPullAtomCallbackImpl;
+Lcom/android/server/notification/NotificationManagerService$StatusBarNotificationHolder;
 Lcom/android/server/notification/NotificationManagerService$StrongAuthTracker;
+Lcom/android/server/notification/NotificationManagerService$TrimCache;
 Lcom/android/server/notification/NotificationManagerService$WorkerHandler;
 Lcom/android/server/notification/NotificationManagerService;
+Lcom/android/server/notification/NotificationRecord$$ExternalSyntheticLambda0;
+Lcom/android/server/notification/NotificationRecord;
+Lcom/android/server/notification/NotificationRecordLogger$NotificationRecordPair;
+Lcom/android/server/notification/NotificationRecordLogger$NotificationReportedEvent;
 Lcom/android/server/notification/NotificationRecordLogger;
 Lcom/android/server/notification/NotificationRecordLoggerImpl;
 Lcom/android/server/notification/NotificationShellCmd;
 Lcom/android/server/notification/NotificationSignalExtractor;
 Lcom/android/server/notification/NotificationUsageStats$1;
 Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;
+Lcom/android/server/notification/NotificationUsageStats$ImportanceHistogram;
+Lcom/android/server/notification/NotificationUsageStats$SingleNotificationStats;
 Lcom/android/server/notification/NotificationUsageStats;
 Lcom/android/server/notification/PermissionHelper$PackagePermission;
 Lcom/android/server/notification/PermissionHelper;
@@ -63753,6 +65866,7 @@
 Lcom/android/server/notification/RankingHandler;
 Lcom/android/server/notification/RankingHelper;
 Lcom/android/server/notification/RankingReconsideration;
+Lcom/android/server/notification/RateEstimator;
 Lcom/android/server/notification/ReviewNotificationPermissionsReceiver;
 Lcom/android/server/notification/ScheduleConditionProvider$1;
 Lcom/android/server/notification/ScheduleConditionProvider;
@@ -63762,6 +65876,7 @@
 Lcom/android/server/notification/SmallHash;
 Lcom/android/server/notification/SnoozeHelper$$ExternalSyntheticLambda2;
 Lcom/android/server/notification/SnoozeHelper$$ExternalSyntheticLambda3;
+Lcom/android/server/notification/SnoozeHelper$$ExternalSyntheticLambda4;
 Lcom/android/server/notification/SnoozeHelper$1;
 Lcom/android/server/notification/SnoozeHelper$Callback;
 Lcom/android/server/notification/SnoozeHelper$Inserter;
@@ -64028,6 +66143,7 @@
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda18;
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda19;
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda1;
+Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda24;
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda25;
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda26;
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda27;
@@ -64067,8 +66183,8 @@
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda59;
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda60;
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda61;
+Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda62;
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda63;
-Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda64;
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda6;
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda8;
 Lcom/android/server/pm/PackageManagerService$$ExternalSyntheticLambda9;
@@ -64094,6 +66210,7 @@
 Lcom/android/server/pm/PackageManagerServiceInjector$Singleton;
 Lcom/android/server/pm/PackageManagerServiceInjector$SystemWrapper;
 Lcom/android/server/pm/PackageManagerServiceInjector;
+Lcom/android/server/pm/PackageManagerServiceUtils$$ExternalSyntheticLambda0;
 Lcom/android/server/pm/PackageManagerServiceUtils$$ExternalSyntheticLambda1;
 Lcom/android/server/pm/PackageManagerServiceUtils$1;
 Lcom/android/server/pm/PackageManagerServiceUtils;
@@ -64298,9 +66415,11 @@
 Lcom/android/server/pm/parsing/pkg/PackageImpl;
 Lcom/android/server/pm/parsing/pkg/ParsedPackage;
 Lcom/android/server/pm/permission/CompatibilityPermissionInfo;
+Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$$ExternalSyntheticLambda0;
 Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$1;
 Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$2;
 Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DefaultPermissionGrant;
+Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache$PermissionState;
 Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$DelayingPackageManagerCache;
 Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy$PackageManagerWrapper;
 Lcom/android/server/pm/permission/DefaultPermissionGrantPolicy;
@@ -64310,6 +66429,8 @@
 Lcom/android/server/pm/permission/LegacyPermissionManagerInternal$PackagesProvider;
 Lcom/android/server/pm/permission/LegacyPermissionManagerInternal$SyncAdapterPackagesProvider;
 Lcom/android/server/pm/permission/LegacyPermissionManagerInternal;
+Lcom/android/server/pm/permission/LegacyPermissionManagerService$$ExternalSyntheticLambda0;
+Lcom/android/server/pm/permission/LegacyPermissionManagerService$$ExternalSyntheticLambda5;
 Lcom/android/server/pm/permission/LegacyPermissionManagerService$Injector;
 Lcom/android/server/pm/permission/LegacyPermissionManagerService$Internal;
 Lcom/android/server/pm/permission/LegacyPermissionManagerService;
@@ -64334,6 +66455,9 @@
 Lcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda1;
 Lcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda2;
 Lcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda3;
+Lcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda7;
+Lcom/android/server/pm/permission/PermissionManagerServiceImpl$$ExternalSyntheticLambda8;
+Lcom/android/server/pm/permission/PermissionManagerServiceImpl$1$$ExternalSyntheticLambda1;
 Lcom/android/server/pm/permission/PermissionManagerServiceImpl$1;
 Lcom/android/server/pm/permission/PermissionManagerServiceImpl$2;
 Lcom/android/server/pm/permission/PermissionManagerServiceImpl$OnPermissionChangeListeners;
@@ -64498,6 +66622,7 @@
 Lcom/android/server/policy/DisplayFoldController$$ExternalSyntheticLambda1;
 Lcom/android/server/policy/DisplayFoldController;
 Lcom/android/server/policy/DisplayFoldDurationLogger;
+Lcom/android/server/policy/EventLogTags;
 Lcom/android/server/policy/GlobalActionsProvider;
 Lcom/android/server/policy/GlobalKeyManager;
 Lcom/android/server/policy/KeyCombinationManager$TwoKeysCombinationRule;
@@ -64508,7 +66633,9 @@
 Lcom/android/server/policy/PermissionPolicyInternal;
 Lcom/android/server/policy/PermissionPolicyService$$ExternalSyntheticLambda0;
 Lcom/android/server/policy/PermissionPolicyService$$ExternalSyntheticLambda1;
+Lcom/android/server/policy/PermissionPolicyService$$ExternalSyntheticLambda2;
 Lcom/android/server/policy/PermissionPolicyService$$ExternalSyntheticLambda3;
+Lcom/android/server/policy/PermissionPolicyService$$ExternalSyntheticLambda4;
 Lcom/android/server/policy/PermissionPolicyService$$ExternalSyntheticLambda5;
 Lcom/android/server/policy/PermissionPolicyService$1;
 Lcom/android/server/policy/PermissionPolicyService$2;
@@ -64548,6 +66675,8 @@
 Lcom/android/server/policy/SideFpsEventHandler$$ExternalSyntheticLambda3;
 Lcom/android/server/policy/SideFpsEventHandler$$ExternalSyntheticLambda4;
 Lcom/android/server/policy/SideFpsEventHandler$1;
+Lcom/android/server/policy/SideFpsEventHandler$2$1;
+Lcom/android/server/policy/SideFpsEventHandler$2;
 Lcom/android/server/policy/SideFpsEventHandler;
 Lcom/android/server/policy/SingleKeyGestureDetector$KeyHandler;
 Lcom/android/server/policy/SingleKeyGestureDetector$SingleKeyRule;
@@ -64679,6 +66808,8 @@
 Lcom/android/server/power/batterysaver/BatterySaverStateMachine$$ExternalSyntheticLambda1;
 Lcom/android/server/power/batterysaver/BatterySaverStateMachine$1;
 Lcom/android/server/power/batterysaver/BatterySaverStateMachine;
+Lcom/android/server/power/batterysaver/BatterySavingStats$BatterySaverState;
+Lcom/android/server/power/batterysaver/BatterySavingStats$Stat;
 Lcom/android/server/power/batterysaver/BatterySavingStats;
 Lcom/android/server/power/hint/HintManagerService$AppHintSession;
 Lcom/android/server/power/hint/HintManagerService$BinderService;
@@ -64807,12 +66938,14 @@
 Lcom/android/server/servicewatcher/CurrentUserServiceSupplier$$ExternalSyntheticLambda0;
 Lcom/android/server/servicewatcher/CurrentUserServiceSupplier$BoundServiceInfo;
 Lcom/android/server/servicewatcher/CurrentUserServiceSupplier;
+Lcom/android/server/servicewatcher/ServiceWatcher$BinderOperation;
 Lcom/android/server/servicewatcher/ServiceWatcher$BoundServiceInfo;
 Lcom/android/server/servicewatcher/ServiceWatcher$ServiceChangedListener;
 Lcom/android/server/servicewatcher/ServiceWatcher$ServiceListener;
 Lcom/android/server/servicewatcher/ServiceWatcher$ServiceSupplier;
 Lcom/android/server/servicewatcher/ServiceWatcher;
 Lcom/android/server/servicewatcher/ServiceWatcherImpl$$ExternalSyntheticLambda0;
+Lcom/android/server/servicewatcher/ServiceWatcherImpl$$ExternalSyntheticLambda1;
 Lcom/android/server/servicewatcher/ServiceWatcherImpl$1;
 Lcom/android/server/servicewatcher/ServiceWatcherImpl$MyServiceConnection;
 Lcom/android/server/servicewatcher/ServiceWatcherImpl;
@@ -64889,14 +67022,18 @@
 Lcom/android/server/stats/bootstrap/StatsBootstrapAtomService$Lifecycle;
 Lcom/android/server/stats/bootstrap/StatsBootstrapAtomService;
 Lcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda0;
+Lcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda12;
+Lcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda15;
 Lcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda1;
 Lcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda2;
 Lcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda3;
+Lcom/android/server/stats/pull/StatsPullAtomService$$ExternalSyntheticLambda6;
 Lcom/android/server/stats/pull/StatsPullAtomService$ConnectivityStatsCallback;
 Lcom/android/server/stats/pull/StatsPullAtomService$StatsPullAtomCallbackImpl;
 Lcom/android/server/stats/pull/StatsPullAtomService$StatsSubscriptionsListener;
 Lcom/android/server/stats/pull/StatsPullAtomService$ThermalEventListener;
 Lcom/android/server/stats/pull/StatsPullAtomService;
+Lcom/android/server/stats/pull/netstats/NetworkStatsExt;
 Lcom/android/server/statusbar/SessionMonitor;
 Lcom/android/server/statusbar/StatusBarManagerInternal;
 Lcom/android/server/statusbar/StatusBarManagerService$1;
@@ -65032,7 +67169,9 @@
 Lcom/android/server/timezonedetector/DeviceActivityMonitorImpl;
 Lcom/android/server/timezonedetector/Dumpable;
 Lcom/android/server/timezonedetector/EnvironmentImpl$$ExternalSyntheticLambda0;
+Lcom/android/server/timezonedetector/EnvironmentImpl$$ExternalSyntheticLambda1;
 Lcom/android/server/timezonedetector/EnvironmentImpl;
+Lcom/android/server/timezonedetector/GeolocationTimeZoneSuggestion;
 Lcom/android/server/timezonedetector/ReferenceWithHistory;
 Lcom/android/server/timezonedetector/ServiceConfigAccessor;
 Lcom/android/server/timezonedetector/ServiceConfigAccessorImpl$$ExternalSyntheticLambda0;
@@ -65042,6 +67181,7 @@
 Lcom/android/server/timezonedetector/TimeZoneDetectorInternal;
 Lcom/android/server/timezonedetector/TimeZoneDetectorInternalImpl;
 Lcom/android/server/timezonedetector/TimeZoneDetectorService$$ExternalSyntheticLambda0;
+Lcom/android/server/timezonedetector/TimeZoneDetectorService$$ExternalSyntheticLambda2;
 Lcom/android/server/timezonedetector/TimeZoneDetectorService$Lifecycle$1;
 Lcom/android/server/timezonedetector/TimeZoneDetectorService$Lifecycle;
 Lcom/android/server/timezonedetector/TimeZoneDetectorService;
@@ -65059,6 +67199,7 @@
 Lcom/android/server/timezonedetector/location/LocationTimeZoneManagerService$ProviderConfig;
 Lcom/android/server/timezonedetector/location/LocationTimeZoneManagerService;
 Lcom/android/server/timezonedetector/location/LocationTimeZoneManagerShellCommand;
+Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider$$ExternalSyntheticLambda0;
 Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderListener;
 Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderMetricsLogger;
 Lcom/android/server/timezonedetector/location/LocationTimeZoneProvider$ProviderState;
@@ -65070,13 +67211,16 @@
 Lcom/android/server/timezonedetector/location/LocationTimeZoneProviderController;
 Lcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerCallbackImpl;
 Lcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl$$ExternalSyntheticLambda0;
+Lcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl$$ExternalSyntheticLambda1;
 Lcom/android/server/timezonedetector/location/LocationTimeZoneProviderControllerEnvironmentImpl;
 Lcom/android/server/timezonedetector/location/LocationTimeZoneProviderProxy$Listener;
 Lcom/android/server/timezonedetector/location/LocationTimeZoneProviderProxy;
 Lcom/android/server/timezonedetector/location/NullLocationTimeZoneProviderProxy;
 Lcom/android/server/timezonedetector/location/RealControllerMetricsLogger;
+Lcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy$$ExternalSyntheticLambda0;
 Lcom/android/server/timezonedetector/location/RealLocationTimeZoneProviderProxy;
 Lcom/android/server/timezonedetector/location/RealProviderMetricsLogger;
+Lcom/android/server/timezonedetector/location/ThreadingDomain$SingleRunnableQueue$$ExternalSyntheticLambda0;
 Lcom/android/server/timezonedetector/location/ThreadingDomain$SingleRunnableQueue;
 Lcom/android/server/timezonedetector/location/ThreadingDomain;
 Lcom/android/server/timezonedetector/location/TimeZoneProviderEventPreProcessor;
@@ -65098,6 +67242,7 @@
 Lcom/android/server/trust/TrustManagerService$SettingsAttrs;
 Lcom/android/server/trust/TrustManagerService$SettingsObserver;
 Lcom/android/server/trust/TrustManagerService$StrongAuthTracker;
+Lcom/android/server/trust/TrustManagerService$TrustState;
 Lcom/android/server/trust/TrustManagerService$TrustTimeoutAlarmListener;
 Lcom/android/server/trust/TrustManagerService$TrustableTimeoutAlarmListener;
 Lcom/android/server/trust/TrustManagerService$TrustedTimeoutAlarmListener;
@@ -65132,6 +67277,7 @@
 Lcom/android/server/usage/AppStandbyController$Lock;
 Lcom/android/server/usage/AppStandbyController$PackageReceiver;
 Lcom/android/server/usage/AppStandbyController$Pool;
+Lcom/android/server/usage/AppStandbyController$StandbyUpdateRecord;
 Lcom/android/server/usage/AppStandbyController;
 Lcom/android/server/usage/AppTimeLimitController$AppUsageGroup;
 Lcom/android/server/usage/AppTimeLimitController$AppUsageLimitGroup;
@@ -65146,6 +67292,7 @@
 Lcom/android/server/usage/BroadcastResponseStatsLogger$LogBuffer;
 Lcom/android/server/usage/BroadcastResponseStatsLogger$NotificationEvent;
 Lcom/android/server/usage/BroadcastResponseStatsLogger;
+Lcom/android/server/usage/BroadcastResponseStatsTracker$$ExternalSyntheticLambda0;
 Lcom/android/server/usage/BroadcastResponseStatsTracker;
 Lcom/android/server/usage/StorageStatsManagerLocal$StorageStatsAugmenter;
 Lcom/android/server/usage/StorageStatsManagerLocal;
@@ -65170,10 +67317,12 @@
 Lcom/android/server/usage/UsageStatsService$UserActionsReceiver;
 Lcom/android/server/usage/UsageStatsService;
 Lcom/android/server/usage/UsageStatsShellCommand;
+Lcom/android/server/usage/UserBroadcastEvents;
 Lcom/android/server/usage/UserUsageStatsService$StatsUpdatedListener;
 Lcom/android/server/usb/MtpNotificationManager$OnOpenInAppListener;
 Lcom/android/server/usb/MtpNotificationManager$Receiver;
 Lcom/android/server/usb/MtpNotificationManager;
+Lcom/android/server/usb/UsbAlsaDevice;
 Lcom/android/server/usb/UsbAlsaJackDetector;
 Lcom/android/server/usb/UsbAlsaManager$DenyListEntry;
 Lcom/android/server/usb/UsbAlsaManager;
@@ -65195,6 +67344,7 @@
 Lcom/android/server/usb/UsbDeviceManager;
 Lcom/android/server/usb/UsbHandlerManager;
 Lcom/android/server/usb/UsbHostManager$$ExternalSyntheticLambda0;
+Lcom/android/server/usb/UsbHostManager$ConnectionRecord;
 Lcom/android/server/usb/UsbHostManager;
 Lcom/android/server/usb/UsbMidiDevice$2;
 Lcom/android/server/usb/UsbMidiDevice$3;
@@ -65216,8 +67366,55 @@
 Lcom/android/server/usb/UsbService$Lifecycle;
 Lcom/android/server/usb/UsbService;
 Lcom/android/server/usb/UsbSettingsManager;
+Lcom/android/server/usb/UsbUserPermissionManager;
+Lcom/android/server/usb/UsbUserSettingsManager;
+Lcom/android/server/usb/descriptors/ByteStream;
+Lcom/android/server/usb/descriptors/Usb10ACHeader;
+Lcom/android/server/usb/descriptors/Usb10ACInputTerminal;
+Lcom/android/server/usb/descriptors/Usb10ACMixerUnit;
+Lcom/android/server/usb/descriptors/Usb10ACOutputTerminal;
+Lcom/android/server/usb/descriptors/Usb10ASFormatI;
+Lcom/android/server/usb/descriptors/Usb10ASFormatII;
+Lcom/android/server/usb/descriptors/Usb10ASGeneral;
+Lcom/android/server/usb/descriptors/Usb20ACHeader;
+Lcom/android/server/usb/descriptors/Usb20ACInputTerminal;
+Lcom/android/server/usb/descriptors/Usb20ACMixerUnit;
+Lcom/android/server/usb/descriptors/Usb20ACOutputTerminal;
+Lcom/android/server/usb/descriptors/Usb20ASFormatI;
+Lcom/android/server/usb/descriptors/Usb20ASFormatII;
+Lcom/android/server/usb/descriptors/Usb20ASFormatIII;
+Lcom/android/server/usb/descriptors/Usb20ASGeneral;
+Lcom/android/server/usb/descriptors/UsbACAudioControlEndpoint;
+Lcom/android/server/usb/descriptors/UsbACAudioStreamEndpoint;
+Lcom/android/server/usb/descriptors/UsbACEndpoint;
+Lcom/android/server/usb/descriptors/UsbACFeatureUnit;
+Lcom/android/server/usb/descriptors/UsbACHeaderInterface;
+Lcom/android/server/usb/descriptors/UsbACInterface;
+Lcom/android/server/usb/descriptors/UsbACInterfaceUnparsed;
+Lcom/android/server/usb/descriptors/UsbACMidi10Endpoint;
+Lcom/android/server/usb/descriptors/UsbACMidi20Endpoint;
+Lcom/android/server/usb/descriptors/UsbACMixerUnit;
+Lcom/android/server/usb/descriptors/UsbACSelectorUnit;
+Lcom/android/server/usb/descriptors/UsbACTerminal;
+Lcom/android/server/usb/descriptors/UsbASFormat;
+Lcom/android/server/usb/descriptors/UsbConfigDescriptor;
 Lcom/android/server/usb/descriptors/UsbDescriptor;
+Lcom/android/server/usb/descriptors/UsbDescriptorParser$UsbDescriptorsStreamFormatException;
+Lcom/android/server/usb/descriptors/UsbDescriptorParser;
+Lcom/android/server/usb/descriptors/UsbDeviceDescriptor;
+Lcom/android/server/usb/descriptors/UsbEndpointDescriptor;
+Lcom/android/server/usb/descriptors/UsbHIDDescriptor;
+Lcom/android/server/usb/descriptors/UsbInterfaceAssoc;
 Lcom/android/server/usb/descriptors/UsbInterfaceDescriptor;
+Lcom/android/server/usb/descriptors/UsbMSMidiHeader;
+Lcom/android/server/usb/descriptors/UsbMSMidiInputJack;
+Lcom/android/server/usb/descriptors/UsbMSMidiOutputJack;
+Lcom/android/server/usb/descriptors/UsbUnknown;
+Lcom/android/server/usb/descriptors/UsbVCInputTerminal;
+Lcom/android/server/usb/descriptors/UsbVCInterface;
+Lcom/android/server/usb/descriptors/UsbVCOutputTerminal;
+Lcom/android/server/usb/descriptors/report/ReportCanvas;
+Lcom/android/server/usb/descriptors/report/TextReportCanvas;
 Lcom/android/server/usb/hal/port/RawPortInfo$1;
 Lcom/android/server/usb/hal/port/RawPortInfo;
 Lcom/android/server/usb/hal/port/UsbPortAidl$$ExternalSyntheticLambda0;
@@ -65304,14 +67501,26 @@
 Lcom/android/server/vcn/util/PersistableBundleUtils$LockingReadWriteHelper;
 Lcom/android/server/vcn/util/PersistableBundleUtils$Serializer;
 Lcom/android/server/vcn/util/PersistableBundleUtils;
+Lcom/android/server/vibrator/AbstractVibratorStep;
 Lcom/android/server/vibrator/ClippingAmplitudeAndFrequencyAdapter;
+Lcom/android/server/vibrator/CompleteEffectVibratorStep;
+Lcom/android/server/vibrator/ComposePrimitivesVibratorStep;
+Lcom/android/server/vibrator/ComposePwleVibratorStep;
 Lcom/android/server/vibrator/DeviceVibrationEffectAdapter;
+Lcom/android/server/vibrator/FinishSequentialEffectStep;
 Lcom/android/server/vibrator/InputDeviceDelegate;
+Lcom/android/server/vibrator/PerformPrebakedVibratorStep;
 Lcom/android/server/vibrator/RampDownAdapter;
 Lcom/android/server/vibrator/RampToStepAdapter;
+Lcom/android/server/vibrator/SetAmplitudeVibratorStep;
+Lcom/android/server/vibrator/StartSequentialEffectStep$DeviceEffectMap;
+Lcom/android/server/vibrator/StartSequentialEffectStep;
+Lcom/android/server/vibrator/Step;
 Lcom/android/server/vibrator/StepToRampAdapter;
 Lcom/android/server/vibrator/Vibration$Status;
+Lcom/android/server/vibrator/Vibration;
 Lcom/android/server/vibrator/VibrationEffectAdapters$SegmentsAdapter;
+Lcom/android/server/vibrator/VibrationEffectAdapters;
 Lcom/android/server/vibrator/VibrationScaler$ScaleLevel;
 Lcom/android/server/vibrator/VibrationScaler;
 Lcom/android/server/vibrator/VibrationSettings$1;
@@ -65320,12 +67529,15 @@
 Lcom/android/server/vibrator/VibrationSettings$SettingsContentObserver;
 Lcom/android/server/vibrator/VibrationSettings$UidObserver;
 Lcom/android/server/vibrator/VibrationSettings;
+Lcom/android/server/vibrator/VibrationStepConductor;
 Lcom/android/server/vibrator/VibrationThread$VibratorManagerHooks;
 Lcom/android/server/vibrator/VibrationThread;
+Lcom/android/server/vibrator/VibratorController$$ExternalSyntheticLambda0;
 Lcom/android/server/vibrator/VibratorController$NativeWrapper;
 Lcom/android/server/vibrator/VibratorController$OnVibrationCompleteListener;
 Lcom/android/server/vibrator/VibratorController;
 Lcom/android/server/vibrator/VibratorManagerService$$ExternalSyntheticLambda0;
+Lcom/android/server/vibrator/VibratorManagerService$$ExternalSyntheticLambda3;
 Lcom/android/server/vibrator/VibratorManagerService$1;
 Lcom/android/server/vibrator/VibratorManagerService$ExternalVibratorService;
 Lcom/android/server/vibrator/VibratorManagerService$Injector;
@@ -65356,6 +67568,7 @@
 Lcom/android/server/wallpaper/WallpaperManagerInternal;
 Lcom/android/server/wallpaper/WallpaperManagerService$$ExternalSyntheticLambda11;
 Lcom/android/server/wallpaper/WallpaperManagerService$$ExternalSyntheticLambda13;
+Lcom/android/server/wallpaper/WallpaperManagerService$$ExternalSyntheticLambda8;
 Lcom/android/server/wallpaper/WallpaperManagerService$$ExternalSyntheticLambda9;
 Lcom/android/server/wallpaper/WallpaperManagerService$1;
 Lcom/android/server/wallpaper/WallpaperManagerService$2;
@@ -65400,26 +67613,44 @@
 Lcom/android/server/wm/AccessibilityController;
 Lcom/android/server/wm/AccessibilityWindowsPopulator$MyHandler;
 Lcom/android/server/wm/AccessibilityWindowsPopulator;
+Lcom/android/server/wm/ActivityClientController$$ExternalSyntheticLambda1;
 Lcom/android/server/wm/ActivityClientController;
 Lcom/android/server/wm/ActivityInterceptorCallback$ActivityInterceptorInfo;
 Lcom/android/server/wm/ActivityInterceptorCallback;
 Lcom/android/server/wm/ActivityMetricsLaunchObserver;
 Lcom/android/server/wm/ActivityMetricsLaunchObserverRegistry;
 Lcom/android/server/wm/ActivityMetricsLogger$LaunchingState;
+Lcom/android/server/wm/ActivityMetricsLogger$PackageCompatStateInfo;
+Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfo;
+Lcom/android/server/wm/ActivityMetricsLogger$TransitionInfoSnapshot;
 Lcom/android/server/wm/ActivityMetricsLogger;
+Lcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda11;
+Lcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda12;
+Lcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda13;
+Lcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda16;
+Lcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda17;
+Lcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda18;
 Lcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda26;
+Lcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda27;
+Lcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda28;
+Lcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda29;
+Lcom/android/server/wm/ActivityRecord$$ExternalSyntheticLambda3;
 Lcom/android/server/wm/ActivityRecord$1;
 Lcom/android/server/wm/ActivityRecord$2;
 Lcom/android/server/wm/ActivityRecord$3;
 Lcom/android/server/wm/ActivityRecord$4;
 Lcom/android/server/wm/ActivityRecord$5;
+Lcom/android/server/wm/ActivityRecord$6;
 Lcom/android/server/wm/ActivityRecord$AddStartingWindow;
 Lcom/android/server/wm/ActivityRecord$Builder;
 Lcom/android/server/wm/ActivityRecord$State;
 Lcom/android/server/wm/ActivityRecord$Token;
 Lcom/android/server/wm/ActivityRecord;
+Lcom/android/server/wm/ActivityRecordInputSink;
 Lcom/android/server/wm/ActivityResult;
+Lcom/android/server/wm/ActivityServiceConnectionsHolder;
 Lcom/android/server/wm/ActivityStartController;
+Lcom/android/server/wm/ActivityStartInterceptor$$ExternalSyntheticLambda0;
 Lcom/android/server/wm/ActivityStartInterceptor;
 Lcom/android/server/wm/ActivityStarter$DefaultFactory;
 Lcom/android/server/wm/ActivityStarter$Factory;
@@ -65428,8 +67659,15 @@
 Lcom/android/server/wm/ActivityTaskManagerInternal$ScreenObserver;
 Lcom/android/server/wm/ActivityTaskManagerInternal$SleepTokenAcquirer;
 Lcom/android/server/wm/ActivityTaskManagerInternal;
+Lcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda0;
+Lcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda13;
+Lcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda16;
+Lcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda17;
 Lcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda3;
+Lcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda4;
+Lcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda6;
 Lcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda8;
+Lcom/android/server/wm/ActivityTaskManagerService$$ExternalSyntheticLambda9;
 Lcom/android/server/wm/ActivityTaskManagerService$1;
 Lcom/android/server/wm/ActivityTaskManagerService$H;
 Lcom/android/server/wm/ActivityTaskManagerService$Lifecycle;
@@ -65439,16 +67677,24 @@
 Lcom/android/server/wm/ActivityTaskManagerService$UiHandler;
 Lcom/android/server/wm/ActivityTaskManagerService$UpdateConfigurationResult;
 Lcom/android/server/wm/ActivityTaskManagerService;
+Lcom/android/server/wm/ActivityTaskSupervisor$$ExternalSyntheticLambda4;
 Lcom/android/server/wm/ActivityTaskSupervisor$$ExternalSyntheticLambda8;
 Lcom/android/server/wm/ActivityTaskSupervisor$ActivityTaskSupervisorHandler;
 Lcom/android/server/wm/ActivityTaskSupervisor;
 Lcom/android/server/wm/AnimatingActivityRegistry;
+Lcom/android/server/wm/AnimationAdapter;
 Lcom/android/server/wm/AnrController$1;
 Lcom/android/server/wm/AnrController;
 Lcom/android/server/wm/AppTaskImpl;
 Lcom/android/server/wm/AppTransition$$ExternalSyntheticLambda2;
 Lcom/android/server/wm/AppTransition$$ExternalSyntheticLambda3;
 Lcom/android/server/wm/AppTransition;
+Lcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda0;
+Lcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda1;
+Lcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda2;
+Lcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda4;
+Lcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda5;
+Lcom/android/server/wm/AppTransitionController$$ExternalSyntheticLambda6;
 Lcom/android/server/wm/AppTransitionController;
 Lcom/android/server/wm/AppWarnings$ConfigHandler;
 Lcom/android/server/wm/AppWarnings$UiHandler;
@@ -65527,6 +67773,7 @@
 Lcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda31;
 Lcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda37;
 Lcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda41;
+Lcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda45;
 Lcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda49;
 Lcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda5;
 Lcom/android/server/wm/DisplayContent$$ExternalSyntheticLambda7;
@@ -65541,16 +67788,19 @@
 Lcom/android/server/wm/DisplayFrames;
 Lcom/android/server/wm/DisplayHashController$Handler;
 Lcom/android/server/wm/DisplayHashController;
+Lcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda13;
 Lcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda14;
 Lcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda15;
 Lcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda16;
 Lcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda17;
 Lcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda18;
 Lcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda19;
+Lcom/android/server/wm/DisplayPolicy$$ExternalSyntheticLambda1;
 Lcom/android/server/wm/DisplayPolicy$1;
 Lcom/android/server/wm/DisplayPolicy$2$$ExternalSyntheticLambda0;
 Lcom/android/server/wm/DisplayPolicy$2$$ExternalSyntheticLambda1;
 Lcom/android/server/wm/DisplayPolicy$2$$ExternalSyntheticLambda2;
+Lcom/android/server/wm/DisplayPolicy$2$$ExternalSyntheticLambda3;
 Lcom/android/server/wm/DisplayPolicy$2;
 Lcom/android/server/wm/DisplayPolicy$3;
 Lcom/android/server/wm/DisplayPolicy$PolicyHandler;
@@ -65618,6 +67868,7 @@
 Lcom/android/server/wm/KeyguardDisableHandler$2;
 Lcom/android/server/wm/KeyguardDisableHandler$Injector;
 Lcom/android/server/wm/KeyguardDisableHandler;
+Lcom/android/server/wm/LaunchObserverRegistryImpl$$ExternalSyntheticLambda2;
 Lcom/android/server/wm/LaunchObserverRegistryImpl$$ExternalSyntheticLambda3;
 Lcom/android/server/wm/LaunchObserverRegistryImpl$$ExternalSyntheticLambda5;
 Lcom/android/server/wm/LaunchObserverRegistryImpl;
@@ -65628,10 +67879,12 @@
 Lcom/android/server/wm/LaunchParamsPersister$PackageListObserver;
 Lcom/android/server/wm/LaunchParamsPersister;
 Lcom/android/server/wm/LetterboxConfiguration;
+Lcom/android/server/wm/LetterboxUiController;
 Lcom/android/server/wm/LockTaskController$$ExternalSyntheticLambda0;
 Lcom/android/server/wm/LockTaskController$LockTaskToken;
 Lcom/android/server/wm/LockTaskController;
 Lcom/android/server/wm/MirrorActiveUids;
+Lcom/android/server/wm/NonAppWindowAnimationAdapter;
 Lcom/android/server/wm/PackageConfigPersister;
 Lcom/android/server/wm/PendingRemoteAnimationRegistry$Entry;
 Lcom/android/server/wm/PendingRemoteAnimationRegistry;
@@ -65660,14 +67913,26 @@
 Lcom/android/server/wm/ResetTargetTaskHelper;
 Lcom/android/server/wm/RootDisplayArea;
 Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda0;
+Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda14;
 Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda16;
 Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda18;
 Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda19;
 Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda1;
+Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda25;
+Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda27;
 Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda29;
+Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda30;
+Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda31;
+Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda32;
+Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda33;
+Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda36;
+Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda38;
 Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda39;
 Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda3;
+Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda45;
+Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda46;
 Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda47;
+Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda4;
 Lcom/android/server/wm/RootWindowContainer$$ExternalSyntheticLambda6;
 Lcom/android/server/wm/RootWindowContainer$1;
 Lcom/android/server/wm/RootWindowContainer$AttachApplicationHelper;
@@ -65705,14 +67970,24 @@
 Lcom/android/server/wm/SystemGesturesPointerEventListener$Callbacks;
 Lcom/android/server/wm/SystemGesturesPointerEventListener$FlingGestureDetector;
 Lcom/android/server/wm/SystemGesturesPointerEventListener;
+Lcom/android/server/wm/Task$$ExternalSyntheticLambda10;
 Lcom/android/server/wm/Task$$ExternalSyntheticLambda11;
 Lcom/android/server/wm/Task$$ExternalSyntheticLambda12;
+Lcom/android/server/wm/Task$$ExternalSyntheticLambda13;
+Lcom/android/server/wm/Task$$ExternalSyntheticLambda14;
 Lcom/android/server/wm/Task$$ExternalSyntheticLambda20;
 Lcom/android/server/wm/Task$$ExternalSyntheticLambda21;
 Lcom/android/server/wm/Task$$ExternalSyntheticLambda22;
+Lcom/android/server/wm/Task$$ExternalSyntheticLambda26;
+Lcom/android/server/wm/Task$$ExternalSyntheticLambda33;
+Lcom/android/server/wm/Task$$ExternalSyntheticLambda34;
+Lcom/android/server/wm/Task$$ExternalSyntheticLambda35;
+Lcom/android/server/wm/Task$$ExternalSyntheticLambda36;
+Lcom/android/server/wm/Task$$ExternalSyntheticLambda37;
 Lcom/android/server/wm/Task$$ExternalSyntheticLambda6;
 Lcom/android/server/wm/Task$$ExternalSyntheticLambda7;
 Lcom/android/server/wm/Task$$ExternalSyntheticLambda8;
+Lcom/android/server/wm/Task$$ExternalSyntheticLambda9;
 Lcom/android/server/wm/Task$ActivityTaskHandler;
 Lcom/android/server/wm/Task$Builder;
 Lcom/android/server/wm/Task$FindRootHelper;
@@ -65746,15 +68021,27 @@
 Lcom/android/server/wm/TaskChangeNotificationController$MainHandler;
 Lcom/android/server/wm/TaskChangeNotificationController$TaskStackConsumer;
 Lcom/android/server/wm/TaskChangeNotificationController;
+Lcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda0;
+Lcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda10;
+Lcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda11;
 Lcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda1;
 Lcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda2;
 Lcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda3;
+Lcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda4;
+Lcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda5;
+Lcom/android/server/wm/TaskDisplayArea$$ExternalSyntheticLambda9;
 Lcom/android/server/wm/TaskDisplayArea;
 Lcom/android/server/wm/TaskFpsCallbackController;
+Lcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda0;
+Lcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda11;
 Lcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda1;
+Lcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda4;
+Lcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda5;
 Lcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda6;
+Lcom/android/server/wm/TaskFragment$$ExternalSyntheticLambda8;
 Lcom/android/server/wm/TaskFragment$EnsureVisibleActivitiesConfigHelper;
 Lcom/android/server/wm/TaskFragment;
+Lcom/android/server/wm/TaskFragmentOrganizerController$TaskFragmentOrganizerState;
 Lcom/android/server/wm/TaskFragmentOrganizerController;
 Lcom/android/server/wm/TaskLaunchParamsModifier;
 Lcom/android/server/wm/TaskOrganizerController$$ExternalSyntheticLambda0;
@@ -65790,6 +68077,7 @@
 Lcom/android/server/wm/VisibleActivityProcessTracker;
 Lcom/android/server/wm/VrController$1;
 Lcom/android/server/wm/VrController;
+Lcom/android/server/wm/WallpaperAnimationAdapter;
 Lcom/android/server/wm/WallpaperController$$ExternalSyntheticLambda1;
 Lcom/android/server/wm/WallpaperController$$ExternalSyntheticLambda2;
 Lcom/android/server/wm/WallpaperController$FindWallpaperTargetResult;
@@ -65800,10 +68088,14 @@
 Lcom/android/server/wm/WindowAnimator$$ExternalSyntheticLambda1;
 Lcom/android/server/wm/WindowAnimator$DisplayContentsAnimator;
 Lcom/android/server/wm/WindowAnimator;
+Lcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda0;
+Lcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda12;
 Lcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda13;
 Lcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda1;
 Lcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda2;
 Lcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda4;
+Lcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda6;
+Lcom/android/server/wm/WindowContainer$$ExternalSyntheticLambda7;
 Lcom/android/server/wm/WindowContainer$ForAllWindowsConsumerWrapper;
 Lcom/android/server/wm/WindowContainer$PreAssignChildLayersCallback;
 Lcom/android/server/wm/WindowContainer$RemoteToken;
@@ -65825,6 +68117,7 @@
 Lcom/android/server/wm/WindowManagerInternal$AppTransitionListener;
 Lcom/android/server/wm/WindowManagerInternal$IDragDropCallback;
 Lcom/android/server/wm/WindowManagerInternal$OnHardKeyboardStatusChangeListener;
+Lcom/android/server/wm/WindowManagerInternal$WindowsForAccessibilityCallback;
 Lcom/android/server/wm/WindowManagerInternal;
 Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda10;
 Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda11;
@@ -65835,6 +68128,7 @@
 Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda16;
 Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda17;
 Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda3;
+Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda5;
 Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda6;
 Lcom/android/server/wm/WindowManagerService$$ExternalSyntheticLambda7;
 Lcom/android/server/wm/WindowManagerService$10;
@@ -65864,7 +68158,10 @@
 Lcom/android/server/wm/WindowOrientationListener$OrientationSensorJudge$2;
 Lcom/android/server/wm/WindowOrientationListener$OrientationSensorJudge;
 Lcom/android/server/wm/WindowOrientationListener;
+Lcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda2;
 Lcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda5;
+Lcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda6;
+Lcom/android/server/wm/WindowProcessController$$ExternalSyntheticLambda7;
 Lcom/android/server/wm/WindowProcessController$ComputeOomAdjCallback;
 Lcom/android/server/wm/WindowProcessController;
 Lcom/android/server/wm/WindowProcessControllerMap;
@@ -65885,6 +68182,7 @@
 Lcom/android/server/wm/WindowSurfacePlacer$Traverser;
 Lcom/android/server/wm/WindowSurfacePlacer;
 Lcom/android/server/wm/WindowToken$$ExternalSyntheticLambda0;
+Lcom/android/server/wm/WindowToken$$ExternalSyntheticLambda1;
 Lcom/android/server/wm/WindowToken$Builder;
 Lcom/android/server/wm/WindowToken;
 Lcom/android/server/wm/WindowTracing$$ExternalSyntheticLambda0;
@@ -65951,6 +68249,7 @@
 [Lcom/android/server/locksettings/RebootEscrowManager$RebootEscrowEvent;
 [Lcom/android/server/net/NetworkPolicyLogger$Data;
 [Lcom/android/server/notification/NotificationChannelLogger$NotificationChannelEvent;
+[Lcom/android/server/notification/NotificationRecordLogger$NotificationReportedEvent;
 [Lcom/android/server/notification/NotificationSignalExtractor;
 [Lcom/android/server/notification/NotificationUsageStats$AggregatedStats;
 [Lcom/android/server/om/OverlayActorEnforcer$ActorState;
@@ -65959,6 +68258,7 @@
 [Lcom/android/server/pm/PersistentPreferredActivity;
 [Lcom/android/server/pm/PreferredActivity;
 [Lcom/android/server/pm/SnapshotStatistics$Stats;
+[Lcom/android/server/pm/UserManagerInternal$UserRestrictionsListener;
 [Lcom/android/server/pm/parsing/library/PackageSharedLibraryUpdater;
 [Lcom/android/server/pm/permission/CompatibilityPermissionInfo;
 [Lcom/android/server/power/WakeLockLog$TagData;
@@ -65967,12 +68267,18 @@
 [Lcom/android/server/soundtrigger_middleware/SoundTriggerModule;
 [Lcom/android/server/tare/Analyst$Report;
 [Lcom/android/server/tare/Modifier;
+[Lcom/android/server/trust/TrustManagerService$TrustState;
 [Lcom/android/server/usage/AppStandbyController$ContentProviderUsageRecord;
+[Lcom/android/server/usage/AppStandbyController$StandbyUpdateRecord;
 [Lcom/android/server/usb/UsbAlsaManager$DenyListEntry;
 [Lcom/android/server/utils/quota/CountQuotaTracker;
 [Lcom/android/server/utils/quota/MultiRateLimiter$RateLimit;
+[Lcom/android/server/vibrator/AbstractVibratorStep;
+[Lcom/android/server/vibrator/Step;
+[Lcom/android/server/vibrator/Vibration$Status;
 [Lcom/android/server/vibrator/VibrationEffectAdapters$SegmentsAdapter;
 [Lcom/android/server/webkit/WebViewUpdateServiceImpl$ProviderAndPackageInfo;
+[Lcom/android/server/wm/ActivityRecord$State;
 [Lcom/android/server/wm/ActivityRecord;
 [Lcom/android/server/wm/DisplayArea$Tokens;
 [Lcom/android/server/wm/DisplayArea$Type;
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 3ab873d..e07f412 100644
--- a/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java
+++ b/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java
@@ -439,6 +439,7 @@
                             log(MetricsEvent.TYPE_DISMISS);
                             hideFillDialogUiThread(callback);
                             callback.requestShowSoftInput(focusedId);
+                            callback.requestFallbackFromFillDialog();
                         }
 
                         @Override
diff --git a/services/companion/java/com/android/server/companion/AssociationStoreImpl.java b/services/companion/java/com/android/server/companion/AssociationStoreImpl.java
index 229799a..d5991d3 100644
--- a/services/companion/java/com/android/server/companion/AssociationStoreImpl.java
+++ b/services/companion/java/com/android/server/companion/AssociationStoreImpl.java
@@ -73,6 +73,9 @@
     private final Set<OnChangeListener> mListeners = new LinkedHashSet<>();
 
     void addAssociation(@NonNull AssociationInfo association) {
+        // Validity check first.
+        checkNotRevoked(association);
+
         final int id = association.getId();
 
         if (DEBUG) {
@@ -99,6 +102,9 @@
     }
 
     void updateAssociation(@NonNull AssociationInfo updated) {
+        // Validity check first.
+        checkNotRevoked(updated);
+
         final int id = updated.getId();
 
         if (DEBUG) {
@@ -292,6 +298,9 @@
     }
 
     void setAssociations(Collection<AssociationInfo> allAssociations) {
+        // Validity check first.
+        allAssociations.forEach(AssociationStoreImpl::checkNotRevoked);
+
         if (DEBUG) {
             Log.i(TAG, "setAssociations() n=" + allAssociations.size());
             final StringJoiner stringJoiner = new StringJoiner(", ");
@@ -324,4 +333,11 @@
         mAddressMap.clear();
         mCachedPerUser.clear();
     }
+
+    private static void checkNotRevoked(@NonNull AssociationInfo association) {
+        if (association.isRevoked()) {
+            throw new IllegalArgumentException(
+                    "Revoked (removed) associations MUST NOT appear in the AssociationStore");
+        }
+    }
 }
diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
index 2714add..abc4937 100644
--- a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
+++ b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
@@ -18,6 +18,7 @@
 package com.android.server.companion;
 
 import static android.Manifest.permission.MANAGE_COMPANION_DEVICES;
+import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_VISIBLE;
 import static android.content.pm.PackageManager.CERT_INPUT_SHA256;
 import static android.content.pm.PackageManager.PERMISSION_GRANTED;
 import static android.os.Process.SYSTEM_UID;
@@ -48,6 +49,8 @@
 import android.annotation.Nullable;
 import android.annotation.SuppressLint;
 import android.annotation.UserIdInt;
+import android.app.ActivityManager;
+import android.app.ActivityManager.RunningAppProcessInfo;
 import android.app.ActivityManagerInternal;
 import android.app.AppOpsManager;
 import android.app.NotificationManager;
@@ -91,6 +94,7 @@
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.app.IAppOpsService;
 import com.android.internal.content.PackageMonitor;
+import com.android.internal.infra.PerUser;
 import com.android.internal.notification.NotificationAccessConfirmationActivityContract;
 import com.android.internal.os.BackgroundThread;
 import com.android.internal.util.ArrayUtils;
@@ -105,6 +109,7 @@
 import java.io.File;
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -128,6 +133,9 @@
 
     private static final long ASSOCIATION_REMOVAL_TIME_WINDOW_DEFAULT = DAYS.toMillis(90);
 
+    private final ActivityManager mActivityManager;
+    private final OnPackageVisibilityChangeListener mOnPackageVisibilityChangeListener;
+
     private PersistentDataStore mPersistentStore;
     private final PersistUserStateHandler mUserPersistenceHandler;
 
@@ -152,12 +160,40 @@
     @GuardedBy("mPreviouslyUsedIds")
     private final SparseArray<Map<String, Set<Integer>>> mPreviouslyUsedIds = new SparseArray<>();
 
+    /**
+     * A structure that consists of a set of revoked associations that pending for role holder
+     * removal per each user.
+     *
+     * @see #maybeRemoveRoleHolderForAssociation(AssociationInfo)
+     * @see #addToPendingRoleHolderRemoval(AssociationInfo)
+     * @see #removeFromPendingRoleHolderRemoval(AssociationInfo)
+     * @see #getPendingRoleHolderRemovalAssociationsForUser(int)
+     */
+    @GuardedBy("mRevokedAssociationsPendingRoleHolderRemoval")
+    private final PerUserAssociationSet mRevokedAssociationsPendingRoleHolderRemoval =
+            new PerUserAssociationSet();
+    /**
+     * Contains uid-s of packages pending to be removed from the role holder list (after
+     * revocation of an association), which will happen one the package is no longer visible to the
+     * user.
+     * For quicker uid -> (userId, packageName) look-up this is not a {@code Set<Integer>} but
+     * a {@code Map<Integer, String>} which maps uid-s to packageName-s (userId-s can be derived
+     * from uid-s using {@link UserHandle#getUserId(int)}).
+     *
+     * @see #maybeRemoveRoleHolderForAssociation(AssociationInfo)
+     * @see #addToPendingRoleHolderRemoval(AssociationInfo)
+     * @see #removeFromPendingRoleHolderRemoval(AssociationInfo)
+     */
+    @GuardedBy("mRevokedAssociationsPendingRoleHolderRemoval")
+    private final Map<Integer, String> mUidsPendingRoleHolderRemoval = new HashMap<>();
+
     private final RemoteCallbackList<IOnAssociationsChangedListener> mListeners =
             new RemoteCallbackList<>();
 
     public CompanionDeviceManagerService(Context context) {
         super(context);
 
+        mActivityManager = context.getSystemService(ActivityManager.class);
         mPowerWhitelistManager = context.getSystemService(PowerWhitelistManager.class);
         mAppOpsManager = IAppOpsService.Stub.asInterface(
                 ServiceManager.getService(Context.APP_OPS_SERVICE));
@@ -168,6 +204,9 @@
 
         mUserPersistenceHandler = new PersistUserStateHandler();
         mAssociationStore = new AssociationStoreImpl();
+
+        mOnPackageVisibilityChangeListener =
+                new OnPackageVisibilityChangeListener(mActivityManager);
     }
 
     @Override
@@ -204,7 +243,33 @@
                     mUserManager.getAliveUsers(), allAssociations, mPreviouslyUsedIds);
         }
 
-        mAssociationStore.setAssociations(allAssociations);
+        final Set<AssociationInfo> activeAssociations =
+                new ArraySet<>(/* capacity */ allAssociations.size());
+        // A set contains the userIds that need to persist state after remove the app
+        // from the list of role holders.
+        final Set<Integer> usersToPersistStateFor = new ArraySet<>();
+
+        for (AssociationInfo association : allAssociations) {
+            if (!association.isRevoked()) {
+                activeAssociations.add(association);
+            } else if (maybeRemoveRoleHolderForAssociation(association)) {
+                // Nothing more to do here, but we'll need to persist all the associations to the
+                // disk afterwards.
+                usersToPersistStateFor.add(association.getUserId());
+            } else {
+                addToPendingRoleHolderRemoval(association);
+            }
+        }
+
+        mAssociationStore.setAssociations(activeAssociations);
+
+        // IMPORTANT: only do this AFTER mAssociationStore.setAssociations(), because
+        // persistStateForUser() queries AssociationStore.
+        // (If persistStateForUser() is invoked before mAssociationStore.setAssociations() it
+        // would effectively just clear-out all the persisted associations).
+        for (int userId : usersToPersistStateFor) {
+            persistStateForUser(userId);
+        }
     }
 
     @Override
@@ -354,10 +419,18 @@
     }
 
     private void persistStateForUser(@UserIdInt int userId) {
-        final List<AssociationInfo> updatedAssociations =
-                mAssociationStore.getAssociationsForUser(userId);
+        // We want to store both active associations and the revoked (removed) association that we
+        // are keeping around for the final clean-up (delayed role holder removal).
+        final List<AssociationInfo> allAssociations;
+        // Start with the active associations - these we can get from the AssociationStore.
+        allAssociations = new ArrayList<>(
+                mAssociationStore.getAssociationsForUser(userId));
+        // ... and add the revoked (removed) association, that are yet to be permanently removed.
+        allAssociations.addAll(getPendingRoleHolderRemovalAssociationsForUser(userId));
+
         final Map<String, Set<Integer>> usedIdsForUser = getPreviouslyUsedIdsForUser(userId);
-        mPersistentStore.persistStateForUser(userId, updatedAssociations, usedIdsForUser);
+
+        mPersistentStore.persistStateForUser(userId, allAssociations, usedIdsForUser);
     }
 
     private void notifyListeners(
@@ -425,13 +498,17 @@
             removalWindow = ASSOCIATION_REMOVAL_TIME_WINDOW_DEFAULT;
         }
 
-        for (AssociationInfo ai : mAssociationStore.getAssociations()) {
-            if (!ai.isSelfManaged()) continue;
-            final boolean isInactive =  currentTime - ai.getLastTimeConnectedMs() >= removalWindow;
-            if (isInactive) {
-                Slog.i(TAG, "Removing inactive self-managed association: " + ai.getId());
-                disassociateInternal(ai.getId());
-            }
+        for (AssociationInfo association : mAssociationStore.getAssociations()) {
+            if (!association.isSelfManaged()) continue;
+
+            final boolean isInactive =
+                    currentTime - association.getLastTimeConnectedMs() >= removalWindow;
+            if (!isInactive) continue;
+
+            final int id = association.getId();
+
+            Slog.i(TAG, "Removing inactive self-managed association id=" + id);
+            disassociateInternal(id);
         }
     }
 
@@ -671,7 +748,7 @@
             enforceCallerIsSystemOr(userId, packageName);
 
             AssociationInfo association = mAssociationStore.getAssociationsForPackageWithAddress(
-                            userId, packageName, deviceAddress);
+                    userId, packageName, deviceAddress);
 
             if (association == null) {
                 throw new RemoteException(new DeviceNotAssociatedException("App " + packageName
@@ -731,7 +808,7 @@
 
             enforceUsesCompanionDeviceFeature(getContext(), userId, callingPackage);
             checkState(!ArrayUtils.isEmpty(
-                    mAssociationStore.getAssociationsForPackage(userId, callingPackage)),
+                            mAssociationStore.getAssociationsForPackage(userId, callingPackage)),
                     "App must have an association before calling this API");
         }
 
@@ -791,8 +868,8 @@
         final long timestamp = System.currentTimeMillis();
 
         final AssociationInfo association = new AssociationInfo(id, userId, packageName,
-                macAddress, displayName, deviceProfile, selfManaged, false, timestamp,
-                Long.MAX_VALUE);
+                macAddress, displayName, deviceProfile, selfManaged,
+                /* notifyOnDeviceNearby */ false, /* revoked */ false, timestamp, Long.MAX_VALUE);
         Slog.i(TAG, "New CDM association created=" + association);
         mAssociationStore.addAssociation(association);
 
@@ -804,6 +881,11 @@
 
         updateSpecialAccessPermissionForAssociatedPackage(association);
         logCreateAssociation(deviceProfile);
+
+        // Don't need to update the mRevokedAssociationsPendingRoleHolderRemoval since
+        // maybeRemoveRoleHolderForAssociation in PackageInactivityListener will handle the case
+        // that there are other devices with the same profile, so the role holder won't be removed.
+
         return association;
     }
 
@@ -884,36 +966,184 @@
         final String packageName = association.getPackageName();
         final String deviceProfile = association.getDeviceProfile();
 
+        if (!maybeRemoveRoleHolderForAssociation(association)) {
+            // Need to remove the app from list of the role holders, but will have to do it later
+            // (the app is in foreground at the moment).
+            addToPendingRoleHolderRemoval(association);
+        }
+
+        // Need to check if device still present now because CompanionDevicePresenceMonitor will
+        // remove current connected device after mAssociationStore.removeAssociation
         final boolean wasPresent = mDevicePresenceMonitor.isDevicePresent(associationId);
 
         // Removing the association.
         mAssociationStore.removeAssociation(associationId);
+        // Do not need to persistUserState since CompanionDeviceManagerService will get callback
+        // from #onAssociationChanged, and it will handle the persistUserState which including
+        // active and revoked association.
         logRemoveAssociation(deviceProfile);
 
-        final List<AssociationInfo> otherAssociations =
-                mAssociationStore.getAssociationsForPackage(userId, packageName);
-
-        // Check if the package is associated with other devices with the same profile.
-        // If not: take away the role.
-        if (deviceProfile != null) {
-            final boolean shouldKeepTheRole = any(otherAssociations,
-                    it -> deviceProfile.equals(it.getDeviceProfile()));
-            if (!shouldKeepTheRole) {
-                Binder.withCleanCallingIdentity(() ->
-                        removeRoleHolderForAssociation(getContext(), association));
-            }
-        }
-
         if (!wasPresent || !association.isNotifyOnDeviceNearby()) return;
         // The device was connected and the app was notified: check if we need to unbind the app
         // now.
-        final boolean shouldStayBound = any(otherAssociations,
+        final boolean shouldStayBound = any(
+                mAssociationStore.getAssociationsForPackage(userId, packageName),
                 it -> it.isNotifyOnDeviceNearby()
                         && mDevicePresenceMonitor.isDevicePresent(it.getId()));
         if (shouldStayBound) return;
         mCompanionAppController.unbindCompanionApplication(userId, packageName);
     }
 
+    /**
+     * First, checks if the companion application should be removed from the list role holders when
+     * upon association's removal, i.e.: association's profile (matches the role) is not null,
+     * the application does not have other associations with the same profile, etc.
+     *
+     * <p>
+     * Then, if establishes that the application indeed has to be removed from the list of the role
+     * holders, checks if it could be done right now -
+     * {@link android.app.role.RoleManager#removeRoleHolderAsUser(String, String, int, UserHandle, java.util.concurrent.Executor, java.util.function.Consumer) RoleManager#removeRoleHolderAsUser()}
+     * will kill the application's process, which leads poor user experience if the application was
+     * in foreground when this happened, to avoid this CDMS delays invoking
+     * {@code RoleManager.removeRoleHolderAsUser()} until the app is no longer in foreground.
+     *
+     * @return {@code true} if the application does NOT need be removed from the list of the role
+     *         holders OR if the application was successfully removed from the list of role holders.
+     *         I.e.: from the role-management perspective the association is done with.
+     *         {@code false} if the application needs to be removed from the list of role the role
+     *         holders, BUT it CDMS would prefer to do it later.
+     *         I.e.: application is in the foreground at the moment, but invoking
+     *         {@code RoleManager.removeRoleHolderAsUser()} will kill the application's process,
+     *         which would lead to the poor UX, hence need to try later.
+     */
+
+    private boolean maybeRemoveRoleHolderForAssociation(@NonNull AssociationInfo association) {
+        if (DEBUG) Log.d(TAG, "maybeRemoveRoleHolderForAssociation() association=" + association);
+
+        final String deviceProfile = association.getDeviceProfile();
+        if (deviceProfile == null) {
+            // No role was granted to for this association, there is nothing else we need to here.
+            return true;
+        }
+
+        // Check if the applications is associated with another devices with the profile. If so,
+        // it should remain the role holder.
+        final int id = association.getId();
+        final int userId = association.getUserId();
+        final String packageName = association.getPackageName();
+        final boolean roleStillInUse = any(
+                mAssociationStore.getAssociationsForPackage(userId, packageName),
+                it -> deviceProfile.equals(it.getDeviceProfile()) && id != it.getId());
+        if (roleStillInUse) {
+            // Application should remain a role holder, there is nothing else we need to here.
+            return true;
+        }
+
+        final int packageProcessImportance = getPackageProcessImportance(userId, packageName);
+        if (packageProcessImportance <= IMPORTANCE_VISIBLE) {
+            // Need to remove the app from the list of role holders, but the process is visible to
+            // the user at the moment, so we'll need to it later: log and return false.
+            Slog.i(TAG, "Cannot remove role holder for the removed association id=" + id
+                    + " now - process is visible.");
+            return false;
+        }
+
+        removeRoleHolderForAssociation(getContext(), association);
+        return true;
+    }
+
+    private int getPackageProcessImportance(@UserIdInt int userId, @NonNull String packageName) {
+        return Binder.withCleanCallingIdentity(() -> {
+            final int uid =
+                    mPackageManagerInternal.getPackageUid(packageName, /* flags */0, userId);
+            return mActivityManager.getUidImportance(uid);
+        });
+    }
+
+    /**
+     * Set revoked flag for active association and add the revoked association and the uid into
+     * the caches.
+     *
+     * @see #mRevokedAssociationsPendingRoleHolderRemoval
+     * @see #mUidsPendingRoleHolderRemoval
+     * @see OnPackageVisibilityChangeListener
+     */
+    private void addToPendingRoleHolderRemoval(@NonNull AssociationInfo association) {
+        // First: set revoked flag.
+        association = AssociationInfo.builder(association)
+                .setRevoked(true)
+                .build();
+
+        final String packageName = association.getPackageName();
+        final int userId = association.getUserId();
+        final int uid = mPackageManagerInternal.getPackageUid(packageName, /* flags */0, userId);
+
+        // Second: add to the set.
+        synchronized (mRevokedAssociationsPendingRoleHolderRemoval) {
+            mRevokedAssociationsPendingRoleHolderRemoval.forUser(association.getUserId())
+                    .add(association);
+            if (!mUidsPendingRoleHolderRemoval.containsKey(uid)) {
+                mUidsPendingRoleHolderRemoval.put(uid, packageName);
+
+                if (mUidsPendingRoleHolderRemoval.size() == 1) {
+                    // Just added first uid: start the listener
+                    mOnPackageVisibilityChangeListener.startListening();
+                }
+            }
+        }
+    }
+
+    /**
+     * Remove the revoked association form the cache and also remove the uid form the map if
+     * there are other associations with the same package still pending for role holder removal.
+     *
+     * @see #mRevokedAssociationsPendingRoleHolderRemoval
+     * @see #mUidsPendingRoleHolderRemoval
+     * @see OnPackageVisibilityChangeListener
+     */
+    private void removeFromPendingRoleHolderRemoval(@NonNull AssociationInfo association) {
+        final String packageName = association.getPackageName();
+        final int userId = association.getUserId();
+        final int uid = mPackageManagerInternal.getPackageUid(packageName, /* flags */0, userId);
+
+        synchronized (mRevokedAssociationsPendingRoleHolderRemoval) {
+            mRevokedAssociationsPendingRoleHolderRemoval.forUser(userId)
+                    .remove(association);
+
+            final boolean shouldKeepUidForRemoval = any(
+                    getPendingRoleHolderRemovalAssociationsForUser(userId),
+                    ai -> packageName.equals(ai.getPackageName()));
+            // Do not remove the uid form the map since other associations with
+            // the same packageName still pending for role holder removal.
+            if (!shouldKeepUidForRemoval) {
+                mUidsPendingRoleHolderRemoval.remove(uid);
+            }
+
+            if (mUidsPendingRoleHolderRemoval.isEmpty()) {
+                // The set is empty now - can "turn off" the listener.
+                mOnPackageVisibilityChangeListener.stopListening();
+            }
+        }
+    }
+
+    /**
+     * @return a copy of the revoked associations set (safeguarding against
+     *         {@code ConcurrentModificationException}-s).
+     */
+    private @NonNull Set<AssociationInfo> getPendingRoleHolderRemovalAssociationsForUser(
+            @UserIdInt int userId) {
+        synchronized (mRevokedAssociationsPendingRoleHolderRemoval) {
+            // Return a copy.
+            return new ArraySet<>(mRevokedAssociationsPendingRoleHolderRemoval.forUser(userId));
+        }
+    }
+
+    private String getPackageNameByUid(int uid) {
+        synchronized (mRevokedAssociationsPendingRoleHolderRemoval) {
+            return mUidsPendingRoleHolderRemoval.get(uid);
+        }
+    }
+
     private void updateSpecialAccessPermissionForAssociatedPackage(AssociationInfo association) {
         final PackageInfo packageInfo =
                 getPackageInfo(getContext(), association.getUserId(), association.getPackageName());
@@ -1134,4 +1364,80 @@
             persistStateForUser(userId);
         }
     }
+
+    /**
+     * An OnUidImportanceListener class which watches the importance of the packages.
+     * In this class, we ONLY interested in the importance of the running process is greater than
+     * {@link RunningAppProcessInfo.IMPORTANCE_VISIBLE} for the uids have been added into the
+     * {@link mUidsPendingRoleHolderRemoval}. Lastly remove the role holder for the revoked
+     * associations for the same packages.
+     *
+     * @see #maybeRemoveRoleHolderForAssociation(AssociationInfo)
+     * @see #removeFromPendingRoleHolderRemoval(AssociationInfo)
+     * @see #getPendingRoleHolderRemovalAssociationsForUser(int)
+     */
+    private class OnPackageVisibilityChangeListener implements
+            ActivityManager.OnUidImportanceListener {
+        final @NonNull ActivityManager mAm;
+
+        OnPackageVisibilityChangeListener(@NonNull ActivityManager am) {
+            this.mAm = am;
+        }
+
+        void startListening() {
+            Binder.withCleanCallingIdentity(
+                    () -> mAm.addOnUidImportanceListener(
+                            /* listener */ OnPackageVisibilityChangeListener.this,
+                            RunningAppProcessInfo.IMPORTANCE_VISIBLE));
+        }
+
+        void stopListening() {
+            Binder.withCleanCallingIdentity(
+                    () -> mAm.removeOnUidImportanceListener(
+                            /* listener */ OnPackageVisibilityChangeListener.this));
+        }
+
+        @Override
+        public void onUidImportance(int uid, int importance) {
+            if (importance <= RunningAppProcessInfo.IMPORTANCE_VISIBLE) {
+                // The lower the importance value the more "important" the process is.
+                // We are only interested when the process ceases to be visible.
+                return;
+            }
+
+            final String packageName = getPackageNameByUid(uid);
+            if (packageName == null) {
+                // Not interested in this uid.
+                return;
+            }
+
+            final int userId = UserHandle.getUserId(uid);
+
+            boolean needToPersistStateForUser = false;
+
+            for (AssociationInfo association :
+                    getPendingRoleHolderRemovalAssociationsForUser(userId)) {
+                if (!packageName.equals(association.getPackageName())) continue;
+
+                if (!maybeRemoveRoleHolderForAssociation(association)) {
+                    // Did not remove the role holder, will have to try again later.
+                    continue;
+                }
+
+                removeFromPendingRoleHolderRemoval(association);
+                needToPersistStateForUser = true;
+            }
+
+            if (needToPersistStateForUser) {
+                mUserPersistenceHandler.postPersistUserState(userId);
+            }
+        }
+    }
+
+    private static class PerUserAssociationSet extends PerUser<Set<AssociationInfo>> {
+        @Override
+        protected @NonNull Set<AssociationInfo> create(int userId) {
+            return new ArraySet<>();
+        }
+    }
 }
diff --git a/services/companion/java/com/android/server/companion/PackageUtils.java b/services/companion/java/com/android/server/companion/PackageUtils.java
index a2b2059..f523773 100644
--- a/services/companion/java/com/android/server/companion/PackageUtils.java
+++ b/services/companion/java/com/android/server/companion/PackageUtils.java
@@ -30,6 +30,7 @@
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
+import android.content.pm.FeatureInfo;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.PackageInfoFlags;
@@ -39,8 +40,6 @@
 import android.os.Binder;
 import android.util.Slog;
 
-import com.android.internal.util.ArrayUtils;
-
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
@@ -65,15 +64,20 @@
 
     static void enforceUsesCompanionDeviceFeature(@NonNull Context context,
             @UserIdInt int userId, @NonNull String packageName) {
-        final boolean requested = ArrayUtils.contains(
-                getPackageInfo(context, userId, packageName).reqFeatures,
-                FEATURE_COMPANION_DEVICE_SETUP);
+        String requiredFeature = FEATURE_COMPANION_DEVICE_SETUP;
 
-        if (requested) {
-            throw new IllegalStateException("Must declare uses-feature "
-                    + FEATURE_COMPANION_DEVICE_SETUP
-                    + " in manifest to use this API");
+        FeatureInfo[] requestedFeatures = getPackageInfo(context, userId, packageName).reqFeatures;
+        if (requestedFeatures != null) {
+            for (int i = 0; i < requestedFeatures.length; i++) {
+                if (requiredFeature.equals(requestedFeatures[i].name)) {
+                    return;
+                }
+            }
         }
+
+        throw new IllegalStateException("Must declare uses-feature "
+                + requiredFeature
+                + " in manifest to use this API");
     }
 
     /**
diff --git a/services/companion/java/com/android/server/companion/PersistentDataStore.java b/services/companion/java/com/android/server/companion/PersistentDataStore.java
index 3639389..4b56c1b 100644
--- a/services/companion/java/com/android/server/companion/PersistentDataStore.java
+++ b/services/companion/java/com/android/server/companion/PersistentDataStore.java
@@ -103,7 +103,7 @@
  * Since Android T the data is stored to "companion_device_manager.xml" file in
  * {@link Environment#getDataSystemDeDirectory(int) /data/system_de/}.
  *
- * See {@link #getBaseStorageFileForUser(int) getBaseStorageFileForUser()}
+ * See {@link DataStoreUtils#getBaseStorageFileForUser(int, String)}
  *
  * <p>
  * Since Android T the data is stored using the v1 schema.
@@ -120,7 +120,7 @@
  * <li> {@link #readPreviouslyUsedIdsV1(TypedXmlPullParser, Map) readPreviouslyUsedIdsV1()}
  * </ul>
  *
- * The following snippet is a sample of a file that is using v0 schema.
+ * The following snippet is a sample of a file that is using v1 schema.
  * <pre>{@code
  * <state persistence-version="1">
  *     <associations>
@@ -130,6 +130,8 @@
  *             mac_address="AA:BB:CC:DD:EE:00"
  *             self_managed="false"
  *             notify_device_nearby="false"
+ *             revoked="false"
+ *             last_time_connected="1634641160229"
  *             time_approved="1634389553216"/>
  *
  *         <association
@@ -139,6 +141,8 @@
  *             display_name="Jhon's Chromebook"
  *             self_managed="true"
  *             notify_device_nearby="false"
+ *             revoked="false"
+ *             last_time_connected="1634641160229"
  *             time_approved="1634641160229"/>
  *     </associations>
  *
@@ -178,6 +182,7 @@
     private static final String XML_ATTR_PROFILE = "profile";
     private static final String XML_ATTR_SELF_MANAGED = "self_managed";
     private static final String XML_ATTR_NOTIFY_DEVICE_NEARBY = "notify_device_nearby";
+    private static final String XML_ATTR_REVOKED = "revoked";
     private static final String XML_ATTR_TIME_APPROVED = "time_approved";
     private static final String XML_ATTR_LAST_TIME_CONNECTED = "last_time_connected";
 
@@ -415,7 +420,8 @@
 
         out.add(new AssociationInfo(associationId, userId, appPackage,
                 MacAddress.fromString(deviceAddress), null, profile,
-                /* managedByCompanionApp */false, notify, timeApproved, Long.MAX_VALUE));
+                /* managedByCompanionApp */ false, notify, /* revoked */ false, timeApproved,
+                Long.MAX_VALUE));
     }
 
     private static void readAssociationsV1(@NonNull TypedXmlPullParser parser,
@@ -444,13 +450,14 @@
         final String displayName = readStringAttribute(parser, XML_ATTR_DISPLAY_NAME);
         final boolean selfManaged = readBooleanAttribute(parser, XML_ATTR_SELF_MANAGED);
         final boolean notify = readBooleanAttribute(parser, XML_ATTR_NOTIFY_DEVICE_NEARBY);
+        final boolean revoked = readBooleanAttribute(parser, XML_ATTR_REVOKED, false);
         final long timeApproved = readLongAttribute(parser, XML_ATTR_TIME_APPROVED, 0L);
         final long lastTimeConnected = readLongAttribute(
                 parser, XML_ATTR_LAST_TIME_CONNECTED, Long.MAX_VALUE);
 
         final AssociationInfo associationInfo = createAssociationInfoNoThrow(associationId, userId,
-                appPackage, macAddress, displayName, profile, selfManaged, notify, timeApproved,
-                lastTimeConnected);
+                appPackage, macAddress, displayName, profile, selfManaged, notify, revoked,
+                timeApproved, lastTimeConnected);
         if (associationInfo != null) {
             out.add(associationInfo);
         }
@@ -503,6 +510,8 @@
         writeBooleanAttribute(serializer, XML_ATTR_SELF_MANAGED, a.isSelfManaged());
         writeBooleanAttribute(
                 serializer, XML_ATTR_NOTIFY_DEVICE_NEARBY, a.isNotifyOnDeviceNearby());
+        writeBooleanAttribute(
+                serializer, XML_ATTR_REVOKED, a.isRevoked());
         writeLongAttribute(serializer, XML_ATTR_TIME_APPROVED, a.getTimeApprovedMs());
         writeLongAttribute(
                 serializer, XML_ATTR_LAST_TIME_CONNECTED, a.getLastTimeConnectedMs());
@@ -544,11 +553,12 @@
     private static AssociationInfo createAssociationInfoNoThrow(int associationId,
             @UserIdInt int userId, @NonNull String appPackage, @Nullable MacAddress macAddress,
             @Nullable CharSequence displayName, @Nullable String profile, boolean selfManaged,
-            boolean notify, long timeApproved, long lastTimeConnected) {
+            boolean notify, boolean revoked, long timeApproved, long lastTimeConnected) {
         AssociationInfo associationInfo = null;
         try {
             associationInfo = new AssociationInfo(associationId, userId, appPackage, macAddress,
-                    displayName, profile, selfManaged, notify, timeApproved, lastTimeConnected);
+                    displayName, profile, selfManaged, notify, revoked, timeApproved,
+                    lastTimeConnected);
         } catch (Exception e) {
             if (DEBUG) Log.w(TAG, "Could not create AssociationInfo", e);
         }
diff --git a/services/companion/java/com/android/server/companion/RolesUtils.java b/services/companion/java/com/android/server/companion/RolesUtils.java
index 35488a8..0fff3f4 100644
--- a/services/companion/java/com/android/server/companion/RolesUtils.java
+++ b/services/companion/java/com/android/server/companion/RolesUtils.java
@@ -85,6 +85,8 @@
         final int userId = associationInfo.getUserId();
         final UserHandle userHandle = UserHandle.of(userId);
 
+        Slog.i(TAG, "Removing CDM role holder, role=" + deviceProfile
+                + ", package=u" + userId + "\\" + packageName);
         roleManager.removeRoleHolderAsUser(deviceProfile, packageName,
                 MANAGE_HOLDERS_FLAG_DONT_KILL_APP, userHandle, context.getMainExecutor(),
                 success -> {
diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java
index 5eec6e5..9a98f54 100644
--- a/services/core/java/com/android/server/StorageManagerService.java
+++ b/services/core/java/com/android/server/StorageManagerService.java
@@ -370,6 +370,10 @@
     private static final float DEFAULT_LOW_BATTERY_LEVEL = 20F;
     // Decide whether charging is required to turn on the feature
     private static final boolean DEFAULT_CHARGING_REQUIRED = true;
+    // Minimum GC interval sleep time in ms
+    private static final int DEFAULT_MIN_GC_SLEEPTIME = 10000;
+    // Target dirty segment ratio to aim to
+    private static final int DEFAULT_TARGET_DIRTY_RATIO = 80;
 
     private volatile int mLifetimePercentThreshold;
     private volatile int mMinSegmentsThreshold;
@@ -377,6 +381,8 @@
     private volatile float mSegmentReclaimWeight;
     private volatile float mLowBatteryLevel;
     private volatile boolean mChargingRequired;
+    private volatile int mMinGCSleepTime;
+    private volatile int mTargetDirtyRatio;
     private volatile boolean mNeedGC;
 
     private volatile boolean mPassedLifetimeThresh;
@@ -2712,6 +2718,10 @@
                 "low_battery_level", DEFAULT_LOW_BATTERY_LEVEL);
             mChargingRequired = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_STORAGE_NATIVE_BOOT,
                 "charging_required", DEFAULT_CHARGING_REQUIRED);
+            mMinGCSleepTime = DeviceConfig.getInt(DeviceConfig.NAMESPACE_STORAGE_NATIVE_BOOT,
+                "min_gc_sleeptime", DEFAULT_MIN_GC_SLEEPTIME);
+            mTargetDirtyRatio = DeviceConfig.getInt(DeviceConfig.NAMESPACE_STORAGE_NATIVE_BOOT,
+                "target_dirty_ratio", DEFAULT_TARGET_DIRTY_RATIO);
 
             // If we use the smart idle maintenance, we need to turn off GC in the traditional idle
             // maintenance to avoid the conflict
@@ -2829,6 +2839,14 @@
         enforcePermission(android.Manifest.permission.MOUNT_FORMAT_FILESYSTEMS);
 
         try {
+            int latestWrite = mVold.getWriteAmount();
+            if (latestWrite == -1) {
+                Slog.w(TAG, "Failed to get storage write record");
+                return;
+            }
+
+            updateStorageWriteRecords(latestWrite);
+
             // Block based checkpoint process runs fstrim. So, if checkpoint is in progress
             // (first boot after OTA), We skip the smart idle maintenance
             if (!needsCheckpoint() || !supportsBlockCheckpoint()) {
@@ -2836,13 +2854,6 @@
                     return;
                 }
 
-                int latestWrite = mVold.getWriteAmount();
-                if (latestWrite == -1) {
-                    Slog.w(TAG, "Failed to get storage write record");
-                    return;
-                }
-
-                updateStorageWriteRecords(latestWrite);
                 int avgWriteAmount = getAverageWriteAmount();
 
                 Slog.i(TAG, "Set smart idle maintenance: " + "latest write amount: " +
@@ -2850,9 +2861,12 @@
                             ", min segment threshold: " + mMinSegmentsThreshold +
                             ", dirty reclaim rate: " + mDirtyReclaimRate +
                             ", segment reclaim weight: " + mSegmentReclaimWeight +
-                            ", period: " + sSmartIdleMaintPeriod);
+                            ", period(min): " + sSmartIdleMaintPeriod +
+                            ", min gc sleep time(ms): " + mMinGCSleepTime +
+                            ", target dirty ratio: " + mTargetDirtyRatio);
                 mVold.setGCUrgentPace(avgWriteAmount, mMinSegmentsThreshold, mDirtyReclaimRate,
-                                      mSegmentReclaimWeight, sSmartIdleMaintPeriod);
+                                      mSegmentReclaimWeight, sSmartIdleMaintPeriod,
+                                      mMinGCSleepTime, mTargetDirtyRatio);
             } else {
                 Slog.i(TAG, "Skipping smart idle maintenance - block based checkpoint in progress");
             }
diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java
index 2c465f4..6b731c3 100644
--- a/services/core/java/com/android/server/accounts/AccountManagerService.java
+++ b/services/core/java/com/android/server/accounts/AccountManagerService.java
@@ -168,8 +168,8 @@
         }
 
         @Override
-        public void onUserStopping(@NonNull TargetUser user) {
-            Slog.i(TAG, "onStopUser " + user);
+        public void onUserStopped(@NonNull TargetUser user) {
+            Slog.i(TAG, "onUserStopped " + user);
             mService.purgeUserData(user.getUserIdentifier());
         }
     }
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index a78c64b..07a5fb5 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -2297,13 +2297,9 @@
         return mAppOpsManager;
     }
 
-    /**
-     * Provides the basic functionality for activity task related tests when a handler thread is
-     * given to initialize the dependency members.
-     */
+    /** Provides the basic functionality for unit tests. */
     @VisibleForTesting
-    public ActivityManagerService(Injector injector, ServiceThread handlerThread) {
-        final boolean hasHandlerThread = handlerThread != null;
+    ActivityManagerService(Injector injector, @NonNull ServiceThread handlerThread) {
         mInjector = injector;
         mContext = mInjector.getContext();
         mUiContext = null;
@@ -2311,33 +2307,27 @@
         mPackageWatchdog = null;
         mAppOpsService = mInjector.getAppOpsService(null /* file */, null /* handler */);
         mBatteryStatsService = null;
-        mHandler = hasHandlerThread ? new MainHandler(handlerThread.getLooper()) : null;
+        mHandler = new MainHandler(handlerThread.getLooper());
         mHandlerThread = handlerThread;
-        mConstants = hasHandlerThread
-                ? new ActivityManagerConstants(mContext, this, mHandler) : null;
+        mConstants = new ActivityManagerConstants(mContext, this, mHandler);
         final ActiveUids activeUids = new ActiveUids(this, false /* postChangesToAtm */);
         mPlatformCompat = null;
         mProcessList = injector.getProcessList(this);
         mProcessList.init(this, activeUids, mPlatformCompat);
         mAppProfiler = new AppProfiler(this, BackgroundThread.getHandler().getLooper(), null);
         mPhantomProcessList = new PhantomProcessList(this);
-        mOomAdjuster = hasHandlerThread
-                ? new OomAdjuster(this, mProcessList, activeUids, handlerThread) : null;
+        mOomAdjuster = new OomAdjuster(this, mProcessList, activeUids, handlerThread);
 
-        mIntentFirewall = hasHandlerThread
-                ? new IntentFirewall(new IntentFirewallInterface(), mHandler) : null;
+        mIntentFirewall = null;
         mProcessStats = null;
         mCpHelper = new ContentProviderHelper(this, false);
-        // For the usage of {@link ActiveServices#cleanUpServices} that may be invoked from
-        // {@link ActivityTaskSupervisor#cleanUpRemovedTaskLocked}.
-        mServices = hasHandlerThread ? new ActiveServices(this) : null;
+        mServices = null;
         mSystemThread = null;
         mUiHandler = injector.getUiHandler(null /* service */);
         mUidObserverController = new UidObserverController(mUiHandler);
-        mUserController = hasHandlerThread ? new UserController(this) : null;
-        mPendingIntentController = hasHandlerThread
-                ? new PendingIntentController(handlerThread.getLooper(), mUserController,
-                        mConstants) : null;
+        mUserController = new UserController(this);
+        mPendingIntentController =
+                new PendingIntentController(handlerThread.getLooper(), mUserController, mConstants);
         mAppRestrictionController = new AppRestrictionController(mContext, this);
         mProcStartHandlerThread = null;
         mProcStartHandler = null;
@@ -2346,7 +2336,7 @@
         mFactoryTest = FACTORY_TEST_OFF;
         mUgmInternal = LocalServices.getService(UriGrantsManagerInternal.class);
         mInternal = new LocalService();
-        mPendingStartActivityUids = new PendingStartActivityUids(mContext);
+        mPendingStartActivityUids = new PendingStartActivityUids();
         mUseFifoUiScheduling = false;
         mEnableOffloadQueue = false;
         mFgBroadcastQueue = mBgBroadcastQueue = mBgOffloadBroadcastQueue =
@@ -2482,7 +2472,7 @@
         }
 
         mInternal = new LocalService();
-        mPendingStartActivityUids = new PendingStartActivityUids(mContext);
+        mPendingStartActivityUids = new PendingStartActivityUids();
         mTraceErrorLogger = new TraceErrorLogger();
         mComponentAliasResolver = new ComponentAliasResolver(this);
     }
@@ -14399,6 +14389,19 @@
             final int callingPid = Binder.getCallingPid();
             final int callingUid = Binder.getCallingUid();
 
+            // Non-system callers can't declare that a broadcast is alarm-related.
+            // The PendingIntent invocation case is handled in PendingIntentRecord.
+            if (bOptions != null && callingUid != SYSTEM_UID) {
+                if (bOptions.containsKey(BroadcastOptions.KEY_ALARM_BROADCAST)) {
+                    if (DEBUG_BROADCAST) {
+                        Slog.w(TAG, "Non-system caller " + callingUid
+                                + " may not flag broadcast as alarm-related");
+                    }
+                    throw new SecurityException(
+                            "Non-system callers may not flag broadcasts as alarm-related");
+                }
+            }
+
             final long origId = Binder.clearCallingIdentity();
             try {
                 return broadcastIntentLocked(callerApp,
@@ -14412,6 +14415,7 @@
         }
     }
 
+    // Not the binder call surface
     int broadcastIntentInPackage(String packageName, @Nullable String featureId, int uid,
             int realCallingUid, int realCallingPid, Intent intent, String resolvedType,
             IIntentReceiver resultTo, int resultCode, String resultData, Bundle resultExtras,
@@ -17380,7 +17384,7 @@
             // next top activity on time. This race will fail the following binder transactions WM
             // sends to the activity. After this race issue between WM/ATMS and AMS is solved, this
             // workaround can be removed. (b/213288355)
-            if (isNewPending && mOomAdjuster != null) { // It can be null in unit test.
+            if (isNewPending) {
                 mOomAdjuster.mCachedAppOptimizer.unfreezeProcess(pid);
             }
             // We need to update the network rules for the app coming to the top state so that
diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java
index 7fe3c1f..606a09cb 100644
--- a/services/core/java/com/android/server/am/BatteryStatsService.java
+++ b/services/core/java/com/android/server/am/BatteryStatsService.java
@@ -798,6 +798,7 @@
                 case FrameworkStatsLog.BATTERY_USAGE_STATS_SINCE_RESET:
                     final BatteryUsageStatsQuery querySinceReset =
                             new BatteryUsageStatsQuery.Builder()
+                                    .setMaxStatsAgeMs(0)
                                     .includeProcessStateData()
                                     .includeVirtualUids()
                                     .build();
@@ -806,6 +807,7 @@
                 case FrameworkStatsLog.BATTERY_USAGE_STATS_SINCE_RESET_USING_POWER_PROFILE_MODEL:
                     final BatteryUsageStatsQuery queryPowerProfile =
                             new BatteryUsageStatsQuery.Builder()
+                                    .setMaxStatsAgeMs(0)
                                     .includeProcessStateData()
                                     .includeVirtualUids()
                                     .powerProfileModeledOnly()
@@ -822,6 +824,7 @@
                     final long sessionEnd = mStats.getStartClockTime();
                     final BatteryUsageStatsQuery queryBeforeReset =
                             new BatteryUsageStatsQuery.Builder()
+                                    .setMaxStatsAgeMs(0)
                                     .includeProcessStateData()
                                     .includeVirtualUids()
                                     .aggregateSnapshots(sessionStart, sessionEnd)
diff --git a/services/core/java/com/android/server/am/BroadcastRecord.java b/services/core/java/com/android/server/am/BroadcastRecord.java
index 19ffc17..ae91d75 100644
--- a/services/core/java/com/android/server/am/BroadcastRecord.java
+++ b/services/core/java/com/android/server/am/BroadcastRecord.java
@@ -70,6 +70,7 @@
     final boolean callerInstantApp; // caller is an Instant App?
     final boolean ordered;  // serialize the send to receivers?
     final boolean sticky;   // originated from existing sticky data?
+    final boolean alarm;    // originated from an alarm triggering?
     final boolean initialSticky; // initial broadcast from register to sticky?
     final int userId;       // user id this broadcast was for
     final String resolvedType; // the resolved data type
@@ -305,6 +306,7 @@
         this.allowBackgroundActivityStarts = allowBackgroundActivityStarts;
         mBackgroundActivityStartsToken = backgroundActivityStartsToken;
         this.timeoutExempt = timeoutExempt;
+        alarm = options != null && options.isAlarmBroadcast();
     }
 
     /**
@@ -357,6 +359,7 @@
         allowBackgroundActivityStarts = from.allowBackgroundActivityStarts;
         mBackgroundActivityStartsToken = from.mBackgroundActivityStartsToken;
         timeoutExempt = from.timeoutExempt;
+        alarm = from.alarm;
     }
 
     /**
diff --git a/services/core/java/com/android/server/am/ContentProviderHelper.java b/services/core/java/com/android/server/am/ContentProviderHelper.java
index 728792f..4533859 100644
--- a/services/core/java/com/android/server/am/ContentProviderHelper.java
+++ b/services/core/java/com/android/server/am/ContentProviderHelper.java
@@ -22,6 +22,9 @@
 import static android.os.Process.PROC_SPACE_TERM;
 import static android.os.Process.SYSTEM_UID;
 
+import static com.android.internal.util.FrameworkStatsLog.PROVIDER_ACQUISITION_EVENT_REPORTED;
+import static com.android.internal.util.FrameworkStatsLog.PROVIDER_ACQUISITION_EVENT_REPORTED__PROC_START_TYPE__PROCESS_START_TYPE_COLD;
+import static com.android.internal.util.FrameworkStatsLog.PROVIDER_ACQUISITION_EVENT_REPORTED__PROC_START_TYPE__PROCESS_START_TYPE_WARM;
 import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_MU;
 import static com.android.server.am.ActivityManagerService.TAG_MU;
 import static com.android.server.am.ProcessProfileRecord.HOSTING_COMPONENT_TYPE_PROVIDER;
@@ -73,6 +76,7 @@
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.os.BackgroundThread;
 import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.FrameworkStatsLog;
 import com.android.server.LocalServices;
 import com.android.server.RescueParty;
 import com.android.server.pm.UserManagerInternal;
@@ -241,6 +245,10 @@
                     ContentProviderHolder holder = cpr.newHolder(null, true);
                     // don't give caller the provider object, it needs to make its own.
                     holder.provider = null;
+                    FrameworkStatsLog.write(
+                            PROVIDER_ACQUISITION_EVENT_REPORTED,
+                            r.uid, callingUid,
+                            PROVIDER_ACQUISITION_EVENT_REPORTED__PROC_START_TYPE__PROCESS_START_TYPE_WARM);
                     return holder;
                 }
 
@@ -307,6 +315,10 @@
                         dyingProc = cpr.proc;
                     } else {
                         cpr.proc.mState.setVerifiedAdj(cpr.proc.mState.getSetAdj());
+                        FrameworkStatsLog.write(
+                                PROVIDER_ACQUISITION_EVENT_REPORTED,
+                                cpr.proc.uid, callingUid,
+                                PROVIDER_ACQUISITION_EVENT_REPORTED__PROC_START_TYPE__PROCESS_START_TYPE_WARM);
                     }
                 } finally {
                     Binder.restoreCallingIdentity(origId);
@@ -479,6 +491,10 @@
                                 } catch (RemoteException e) {
                                 }
                             }
+                            FrameworkStatsLog.write(
+                                    PROVIDER_ACQUISITION_EVENT_REPORTED,
+                                    proc.uid, callingUid,
+                                    PROVIDER_ACQUISITION_EVENT_REPORTED__PROC_START_TYPE__PROCESS_START_TYPE_WARM);
                         } else {
                             checkTime(startTime, "getContentProviderImpl: before start process");
                             proc = mService.startProcessLocked(
@@ -495,6 +511,10 @@
                                         + ": process is bad");
                                 return null;
                             }
+                            FrameworkStatsLog.write(
+                                    PROVIDER_ACQUISITION_EVENT_REPORTED,
+                                    proc.uid, callingUid,
+                                    PROVIDER_ACQUISITION_EVENT_REPORTED__PROC_START_TYPE__PROCESS_START_TYPE_COLD);
                         }
                         cpr.launchingApp = proc;
                         mLaunchingProviders.add(cpr);
diff --git a/services/core/java/com/android/server/am/PendingIntentRecord.java b/services/core/java/com/android/server/am/PendingIntentRecord.java
index 4044cce..bda60ff 100644
--- a/services/core/java/com/android/server/am/PendingIntentRecord.java
+++ b/services/core/java/com/android/server/am/PendingIntentRecord.java
@@ -18,6 +18,7 @@
 
 import static android.app.ActivityManager.START_SUCCESS;
 
+import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_BROADCAST_LIGHT;
 import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM;
 import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME;
 
@@ -34,6 +35,7 @@
 import android.os.IBinder;
 import android.os.PowerWhitelistManager;
 import android.os.PowerWhitelistManager.ReasonCode;
+import android.os.Process;
 import android.os.RemoteCallbackList;
 import android.os.RemoteException;
 import android.os.TransactionTooLargeException;
@@ -416,6 +418,22 @@
 
         final int callingUid = Binder.getCallingUid();
         final int callingPid = Binder.getCallingPid();
+
+        // Only system senders can declare a broadcast to be alarm-originated.  We check
+        // this here rather than in the general case handling below to fail before the other
+        // invocation side effects such as allowlisting.
+        if (options != null && callingUid != Process.SYSTEM_UID
+                && key.type == ActivityManager.INTENT_SENDER_BROADCAST) {
+            if (options.containsKey(BroadcastOptions.KEY_ALARM_BROADCAST)) {
+                if (DEBUG_BROADCAST_LIGHT) {
+                    Slog.w(TAG, "Non-system caller " + callingUid
+                            + " may not flag broadcast as alarm-related");
+                }
+                throw new SecurityException(
+                        "Non-system callers may not flag broadcasts as alarm-related");
+            }
+        }
+
         final long origId = Binder.clearCallingIdentity();
 
         int res = START_SUCCESS;
diff --git a/services/core/java/com/android/server/am/PendingStartActivityUids.java b/services/core/java/com/android/server/am/PendingStartActivityUids.java
index bd60057..da09317 100644
--- a/services/core/java/com/android/server/am/PendingStartActivityUids.java
+++ b/services/core/java/com/android/server/am/PendingStartActivityUids.java
@@ -16,7 +16,6 @@
 
 package com.android.server.am;
 
-import android.content.Context;
 import android.os.SystemClock;
 import android.util.Pair;
 import android.util.Slog;
@@ -40,11 +39,6 @@
     // Key is uid, value is Pair of pid and SystemClock.elapsedRealtime() when the
     // uid is added.
     private final SparseArray<Pair<Integer, Long>> mPendingUids = new SparseArray();
-    private Context mContext;
-
-    PendingStartActivityUids(Context context) {
-        mContext = context;
-    }
 
     /** Returns {@code true} if the uid is put to the pending array. Otherwise it existed. */
     synchronized boolean add(int uid, int pid) {
diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java
index 92a8dcd..98e3a21 100644
--- a/services/core/java/com/android/server/am/ProcessList.java
+++ b/services/core/java/com/android/server/am/ProcessList.java
@@ -2269,7 +2269,9 @@
                 final boolean inBgRestricted = ast.isAppBackgroundRestricted(
                         app.info.uid, app.info.packageName);
                 if (inBgRestricted) {
-                    mAppsInBackgroundRestricted.add(app);
+                    synchronized (mService) {
+                        mAppsInBackgroundRestricted.add(app);
+                    }
                 }
                 app.mState.setBackgroundRestricted(inBgRestricted);
             }
diff --git a/services/core/java/com/android/server/app/GameManagerService.java b/services/core/java/com/android/server/app/GameManagerService.java
index 3a78974..dd73cbe 100644
--- a/services/core/java/com/android/server/app/GameManagerService.java
+++ b/services/core/java/com/android/server/app/GameManagerService.java
@@ -60,6 +60,7 @@
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.UserInfo;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.content.res.XmlResourceParser;
@@ -68,6 +69,7 @@
 import android.os.Binder;
 import android.os.Bundle;
 import android.os.Environment;
+import android.os.FileUtils;
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
@@ -77,9 +79,12 @@
 import android.os.ResultReceiver;
 import android.os.ServiceManager;
 import android.os.ShellCallback;
+import android.os.UserManager;
 import android.provider.DeviceConfig;
 import android.provider.DeviceConfig.Properties;
+import android.text.TextUtils;
 import android.util.ArrayMap;
+import android.util.AtomicFile;
 import android.util.AttributeSet;
 import android.util.KeyValueListParser;
 import android.util.Slog;
@@ -90,6 +95,7 @@
 import com.android.internal.compat.CompatibilityOverrideConfig;
 import com.android.internal.compat.IPlatformCompat;
 import com.android.internal.os.BackgroundThread;
+import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.FrameworkStatsLog;
 import com.android.server.LocalServices;
 import com.android.server.ServiceThread;
@@ -99,9 +105,17 @@
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
+import java.io.BufferedWriter;
+import java.io.File;
 import java.io.FileDescriptor;
+import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
 import java.util.List;
 
 /**
@@ -122,6 +136,7 @@
     static final int POPULATE_GAME_MODE_SETTINGS = 3;
     static final int SET_GAME_STATE = 4;
     static final int CANCEL_GAME_LOADING_MODE = 5;
+    static final int WRITE_GAME_MODE_INTERVENTION_LIST_FILE = 6;
     static final int WRITE_SETTINGS_DELAY = 10 * 1000;  // 10 seconds
     static final int LOADING_BOOST_MAX_DURATION = 5 * 1000;  // 5 seconds
 
@@ -131,6 +146,8 @@
             .build();
     private static final String PACKAGE_NAME_MSG_KEY = "packageName";
     private static final String USER_ID_MSG_KEY = "userId";
+    private static final String GAME_MODE_INTERVENTION_LIST_FILE_NAME =
+            "game_mode_intervention.list";
 
     private final Context mContext;
     private final Object mLock = new Object();
@@ -138,8 +155,12 @@
     private final Object mOverrideConfigLock = new Object();
     private final Handler mHandler;
     private final PackageManager mPackageManager;
+    private final UserManager mUserManager;
     private final IPlatformCompat mPlatformCompat;
     private final PowerManagerInternal mPowerManagerInternal;
+    private final File mSystemDir;
+    @VisibleForTesting
+    final AtomicFile mGameModeInterventionListFile;
     private DeviceConfigListener mDeviceConfigListener;
     @GuardedBy("mLock")
     private final ArrayMap<Integer, GameManagerSettings> mSettings = new ArrayMap<>();
@@ -158,9 +179,53 @@
         mContext = context;
         mHandler = new SettingsHandler(looper);
         mPackageManager = mContext.getPackageManager();
+        mUserManager = mContext.getSystemService(UserManager.class);
         mPlatformCompat = IPlatformCompat.Stub.asInterface(
                 ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE));
         mPowerManagerInternal = LocalServices.getService(PowerManagerInternal.class);
+        mSystemDir = new File(Environment.getDataDirectory(), "system");
+        mSystemDir.mkdirs();
+        FileUtils.setPermissions(mSystemDir.toString(),
+                FileUtils.S_IRWXU | FileUtils.S_IRWXG | FileUtils.S_IROTH | FileUtils.S_IXOTH,
+                -1, -1);
+        mGameModeInterventionListFile = new AtomicFile(new File(mSystemDir,
+                                                     GAME_MODE_INTERVENTION_LIST_FILE_NAME));
+        FileUtils.setPermissions(mGameModeInterventionListFile.getBaseFile().getAbsolutePath(),
+                FileUtils.S_IRUSR | FileUtils.S_IWUSR
+                        | FileUtils.S_IRGRP | FileUtils.S_IWGRP,
+                -1, -1);
+        if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_GAME_SERVICE)) {
+            mGameServiceController = new GameServiceController(
+                    context, BackgroundThread.getExecutor(),
+                    new GameServiceProviderSelectorImpl(
+                            context.getResources(),
+                            context.getPackageManager()),
+                    new GameServiceProviderInstanceFactoryImpl(context));
+        } else {
+            mGameServiceController = null;
+        }
+    }
+
+    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
+    GameManagerService(Context context, Looper looper, File dataDir) {
+        mContext = context;
+        mHandler = new SettingsHandler(looper);
+        mPackageManager = mContext.getPackageManager();
+        mUserManager = mContext.getSystemService(UserManager.class);
+        mPlatformCompat = IPlatformCompat.Stub.asInterface(
+                ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE));
+        mPowerManagerInternal = LocalServices.getService(PowerManagerInternal.class);
+        mSystemDir = new File(dataDir, "system");
+        mSystemDir.mkdirs();
+        FileUtils.setPermissions(mSystemDir.toString(),
+                FileUtils.S_IRWXU | FileUtils.S_IRWXG | FileUtils.S_IROTH | FileUtils.S_IXOTH,
+                -1, -1);
+        mGameModeInterventionListFile = new AtomicFile(new File(mSystemDir,
+                GAME_MODE_INTERVENTION_LIST_FILE_NAME));
+        FileUtils.setPermissions(mGameModeInterventionListFile.getBaseFile().getAbsolutePath(),
+                FileUtils.S_IRUSR | FileUtils.S_IWUSR
+                        | FileUtils.S_IRGRP | FileUtils.S_IWGRP,
+                -1, -1);
         if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_GAME_SERVICE)) {
             mGameServiceController = new GameServiceController(
                     context, BackgroundThread.getExecutor(),
@@ -306,6 +371,22 @@
                     mPowerManagerInternal.setPowerMode(Mode.GAME_LOADING, false);
                     break;
                 }
+                case WRITE_GAME_MODE_INTERVENTION_LIST_FILE: {
+                    final int userId = (int) msg.obj;
+                    if (userId < 0) {
+                        Slog.wtf(TAG, "Attempt to write setting for invalid user: " + userId);
+                        synchronized (mLock) {
+                            removeMessages(WRITE_GAME_MODE_INTERVENTION_LIST_FILE, null);
+                        }
+                        break;
+                    }
+
+                    Process.setThreadPriority(Process.THREAD_PRIORITY_DEFAULT);
+                    removeMessages(WRITE_GAME_MODE_INTERVENTION_LIST_FILE, null);
+                    writeGameModeInterventionsToFile(userId);
+                    Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
+                    break;
+                }
             }
         }
     }
@@ -955,6 +1036,11 @@
             }
         }
         updateInterventions(packageName, gameMode, userId);
+        final Message msg = mHandler.obtainMessage(WRITE_GAME_MODE_INTERVENTION_LIST_FILE);
+        msg.obj = userId;
+        if (!mHandler.hasEqualMessages(WRITE_GAME_MODE_INTERVENTION_LIST_FILE, userId)) {
+            mHandler.sendMessage(msg);
+        }
     }
 
     /**
@@ -1520,15 +1606,98 @@
                 final int newGameMode = getNewGameMode(gameMode, config);
                 if (newGameMode != gameMode) {
                     setGameMode(packageName, newGameMode, userId);
+                } else {
+                    // Make sure we handle the case when the interventions are changed while
+                    // the game mode remains the same. We call only updateInterventions() here.
+                    updateInterventions(packageName, gameMode, userId);
                 }
-                updateInterventions(packageName, gameMode, userId);
             }
         } catch (Exception e) {
             Slog.e(TAG, "Failed to update compat modes for user " + userId + ": " + e);
         }
+
+        final Message msg = mHandler.obtainMessage(WRITE_GAME_MODE_INTERVENTION_LIST_FILE);
+        msg.obj = userId;
+        if (!mHandler.hasEqualMessages(WRITE_GAME_MODE_INTERVENTION_LIST_FILE, userId)) {
+            mHandler.sendMessage(msg);
+        }
     }
 
-    private String[] getInstalledGamePackageNames(int userId) {
+    /*
+     Write the interventions and mode of each game to file /system/data/game_mode_intervention.list
+     Each line will contain the information of each game, separated by tab.
+     The format of the output is:
+     <package name> <UID> <current mode> <game mode 1> <interventions> <game mode 2> <interventions>
+     For example:
+     com.android.app1   1425    1   2   angle=0,scaling=1.0,fps=60  3   angle=1,scaling=0.5,fps=30
+     */
+    private void writeGameModeInterventionsToFile(@UserIdInt int userId) {
+        FileOutputStream fileOutputStream = null;
+        BufferedWriter bufferedWriter;
+        try {
+            fileOutputStream = mGameModeInterventionListFile.startWrite();
+            bufferedWriter = new BufferedWriter(new OutputStreamWriter(fileOutputStream,
+                    Charset.defaultCharset()));
+
+            final StringBuilder sb = new StringBuilder();
+            final List<String> installedGamesList = getInstalledGamePackageNamesByAllUsers(userId);
+            for (final String packageName : installedGamesList) {
+                GamePackageConfiguration packageConfig = getConfig(packageName);
+                if (packageConfig == null) {
+                    continue;
+                }
+                sb.append(packageName);
+                sb.append("\t");
+                sb.append(mPackageManager.getPackageUidAsUser(packageName, userId));
+                sb.append("\t");
+                sb.append(getGameMode(packageName, userId));
+                sb.append("\t");
+                final int[] modes = packageConfig.getAvailableGameModes();
+                for (int mode : modes) {
+                    final GamePackageConfiguration.GameModeConfiguration gameModeConfiguration =
+                            packageConfig.getGameModeConfiguration(mode);
+                    if (gameModeConfiguration == null) {
+                        continue;
+                    }
+                    sb.append(mode);
+                    sb.append("\t");
+                    final int useAngle = gameModeConfiguration.getUseAngle() ? 1 : 0;
+                    sb.append(TextUtils.formatSimple("angle=%d", useAngle));
+                    sb.append(",");
+                    final String scaling = gameModeConfiguration.getScaling();
+                    sb.append("scaling=");
+                    sb.append(scaling);
+                    sb.append(",");
+                    final int fps = gameModeConfiguration.getFps();
+                    sb.append(TextUtils.formatSimple("fps=%d", fps));
+                    sb.append("\t");
+                }
+                sb.append("\n");
+            }
+            bufferedWriter.append(sb);
+            bufferedWriter.flush();
+            FileUtils.sync(fileOutputStream);
+            mGameModeInterventionListFile.finishWrite(fileOutputStream);
+        } catch (Exception e) {
+            mGameModeInterventionListFile.failWrite(fileOutputStream);
+            Slog.wtf(TAG, "Failed to write game_mode_intervention.list, exception " + e);
+        }
+        return;
+    }
+
+    private int[] getAllUserIds(@UserIdInt int currentUserId) {
+        final List<UserInfo> users = mUserManager.getUsers();
+        int[] userIds = new int[users.size()];
+        for (int i = 0; i < userIds.length; ++i) {
+            userIds[i] = users.get(i).id;
+        }
+        if (currentUserId != -1) {
+            userIds = ArrayUtils.appendInt(userIds, currentUserId);
+        }
+        return userIds;
+    }
+
+    private String[] getInstalledGamePackageNames(@UserIdInt int userId) {
         final List<PackageInfo> packages =
                 mPackageManager.getInstalledPackagesAsUser(0, userId);
         return packages.stream().filter(e -> e.applicationInfo != null && e.applicationInfo.category
@@ -1537,6 +1706,17 @@
                 .toArray(String[]::new);
     }
 
+    private List<String> getInstalledGamePackageNamesByAllUsers(@UserIdInt int currentUserId) {
+        HashSet<String> packageSet = new HashSet<>();
+
+        final int[] userIds = getAllUserIds(currentUserId);
+        for (int userId : userIds) {
+            packageSet.addAll(Arrays.asList(getInstalledGamePackageNames(userId)));
+        }
+
+        return new ArrayList<>(packageSet);
+    }
+
     /**
      * @hide
      */
diff --git a/services/core/java/com/android/server/app/GameTaskInfoProvider.java b/services/core/java/com/android/server/app/GameTaskInfoProvider.java
index f078d98..25a4f37 100644
--- a/services/core/java/com/android/server/app/GameTaskInfoProvider.java
+++ b/services/core/java/com/android/server/app/GameTaskInfoProvider.java
@@ -16,6 +16,8 @@
 
 package com.android.server.app;
 
+import static android.view.Display.INVALID_DISPLAY;
+
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.app.ActivityManager.RunningTaskInfo;
@@ -93,7 +95,8 @@
             runningTaskInfos = mActivityTaskManager.getTasks(
                     /* maxNum= */ Integer.MAX_VALUE,
                     /* filterOnlyVisibleRecents= */ false,
-                    /* keepIntentExtra= */ false);
+                    /* keepIntentExtra= */ false,
+                    INVALID_DISPLAY);
         } catch (RemoteException ex) {
             Slog.w(TAG, "Failed to fetch running tasks");
             return null;
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index 2c05dd2..bed69b2 100644
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -175,6 +175,7 @@
 import com.android.server.EventLogTags;
 import com.android.server.LocalServices;
 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.VolumeEvent;
 import com.android.server.pm.UserManagerInternal;
@@ -275,6 +276,25 @@
     // indicates whether the system maps all streams to a single stream.
     private final boolean mIsSingleVolume;
 
+    /**
+     * indicates whether STREAM_NOTIFICATION is aliased to STREAM_RING
+     *     not final due to test method, see {@link #setNotifAliasRingForTest(boolean)}.
+     */
+    private boolean mNotifAliasRing;
+
+    /**
+     * Test method to temporarily override whether STREAM_NOTIFICATION is aliased to STREAM_RING,
+     * volumes will be updated in case of a change.
+     * @param alias if true, STREAM_NOTIFICATION is aliased to STREAM_RING
+     */
+    /*package*/ void setNotifAliasRingForTest(boolean alias) {
+        boolean update = (mNotifAliasRing != alias);
+        mNotifAliasRing = alias;
+        if (update) {
+            updateStreamVolumeAlias(true, "AudioServiceTest");
+        }
+    }
+
     /*package*/ boolean isPlatformVoice() {
         return mPlatformType == AudioSystem.PLATFORM_VOICE;
     }
@@ -348,6 +368,7 @@
     private static final int MSG_DISPATCH_DEVICE_VOLUME_BEHAVIOR = 47;
     private static final int MSG_ROTATION_UPDATE = 48;
     private static final int MSG_FOLD_UPDATE = 49;
+    private static final int MSG_RESET_SPATIALIZER = 50;
 
     // start of messages handled under wakelock
     //   these messages can only be queued, i.e. sent with queueMsgUnderWakeLock(),
@@ -355,6 +376,7 @@
     private static final int MSG_DISABLE_AUDIO_FOR_UID = 100;
     private static final int MSG_INIT_STREAMS_VOLUMES = 101;
     private static final int MSG_INIT_SPATIALIZER = 102;
+
     // end of messages handled under wakelock
 
     // retry delay in case of failure to indicate system ready to AudioFlinger
@@ -944,10 +966,25 @@
      */
     public AudioService(Context context, AudioSystemAdapter audioSystem,
             SystemServerAdapter systemServer, SettingsAdapter settings, @Nullable Looper looper) {
+        this (context, audioSystem, systemServer, settings, looper,
+                context.getSystemService(AppOpsManager.class));
+    }
+
+    /**
+     * @param context
+     * @param audioSystem Adapter for {@link AudioSystem}
+     * @param systemServer Adapter for privilieged functionality for system server components
+     * @param settings Adapter for {@link Settings}
+     * @param looper Looper to use for the service's message handler. If this is null, an
+     *               {@link AudioSystemThread} is created as the messaging thread instead.
+     */
+    public AudioService(Context context, AudioSystemAdapter audioSystem,
+            SystemServerAdapter systemServer, SettingsAdapter settings, @Nullable Looper looper,
+            AppOpsManager appOps) {
         sLifecycleLogger.log(new AudioEventLogger.StringEvent("AudioService()"));
         mContext = context;
         mContentResolver = context.getContentResolver();
-        mAppOps = (AppOpsManager)context.getSystemService(Context.APP_OPS_SERVICE);
+        mAppOps = appOps;
 
         mAudioSystem = audioSystem;
         mSystemServer = systemServer;
@@ -978,6 +1015,9 @@
         mUseVolumeGroupAliases = mContext.getResources().getBoolean(
                 com.android.internal.R.bool.config_handleVolumeAliasesUsingVolumeGroups);
 
+        mNotifAliasRing = mContext.getResources().getBoolean(
+                com.android.internal.R.bool.config_alias_ring_notif_stream_types);
+
         // Initialize volume
         // Priority 1 - Android Property
         // Priority 2 - Audio Policy Service
@@ -2026,7 +2066,13 @@
         pw.println("\nStream volumes (device: index)");
         int numStreamTypes = AudioSystem.getNumStreamTypes();
         for (int i = 0; i < numStreamTypes; i++) {
-            pw.println("- " + AudioSystem.STREAM_NAMES[i] + ":");
+            StringBuilder alias = new StringBuilder();
+            if (mStreamVolumeAlias[i] != i) {
+                alias.append(" (aliased to: ")
+                        .append(AudioSystem.STREAM_NAMES[mStreamVolumeAlias[i]])
+                        .append(")");
+            }
+            pw.println("- " + AudioSystem.STREAM_NAMES[i] + alias + ":");
             mStreamStates[i].dump(pw);
             pw.println("");
         }
@@ -2058,6 +2104,10 @@
                     mStreamVolumeAlias = STREAM_VOLUME_ALIAS_DEFAULT;
                     dtmfStreamAlias = AudioSystem.STREAM_MUSIC;
             }
+            if (!mNotifAliasRing) {
+                mStreamVolumeAlias[AudioSystem.STREAM_NOTIFICATION] =
+                        AudioSystem.STREAM_NOTIFICATION;
+            }
         }
 
         if (mIsSingleVolume) {
@@ -3537,7 +3587,8 @@
                         + "), do not change associated stream volume");
                 continue;
             }
-            setStreamVolume(groupedStream, index, flags, callingPackage, callingPackage,
+            setStreamVolume(groupedStream, index, flags, /*device*/ null,
+                    callingPackage, callingPackage,
                     attributionTag, Binder.getCallingUid(), true /*hasModifyAudioSettings*/);
         }
     }
@@ -3580,15 +3631,73 @@
         return AudioSystem.getMinVolumeIndexForAttributes(attr);
     }
 
+    /** @see AudioDeviceVolumeManager#setDeviceVolume(VolumeInfo, AudioDeviceAttributes)
+     * Part of service interface, check permissions and parameters here */
+    public void setDeviceVolume(@NonNull VolumeInfo vi, @NonNull AudioDeviceAttributes ada,
+            @NonNull String callingPackage, @Nullable String attributionTag) {
+        enforceModifyAudioRoutingPermission();
+        Objects.requireNonNull(vi);
+        Objects.requireNonNull(ada);
+        Objects.requireNonNull(callingPackage);
+        if (!vi.hasStreamType()) {
+            Log.e(TAG, "Unsupported non-stream type based VolumeInfo", new Exception());
+            return;
+        }
+        int index = vi.getVolumeIndex();
+        if (index == VolumeInfo.INDEX_NOT_SET) {
+            throw new IllegalArgumentException("changing device volume requires a volume index");
+        }
+
+        if (vi.getMinVolumeIndex() == VolumeInfo.INDEX_NOT_SET
+                || vi.getMaxVolumeIndex() == VolumeInfo.INDEX_NOT_SET) {
+            // assume index meant to be in stream type range, validate
+            if ((index * 10) < mStreamStates[vi.getStreamType()].getMinIndex()
+                    || (index * 10) > mStreamStates[vi.getStreamType()].getMaxIndex()) {
+                throw new IllegalArgumentException("invalid volume index " + index
+                        + " not between min/max for stream " + vi.getStreamType());
+            }
+        } else {
+            // check if index needs to be rescaled
+            final int min = (mStreamStates[vi.getStreamType()].getMinIndex() + 5) / 10;
+            final int max = (mStreamStates[vi.getStreamType()].getMaxIndex() + 5) / 10;
+            if (vi.getMinVolumeIndex() != min || vi.getMaxVolumeIndex() != max) {
+                index = rescaleIndex(index,
+                        /*srcMin*/ vi.getMinVolumeIndex(), /*srcMax*/ vi.getMaxVolumeIndex(),
+                        /*dstMin*/ min, /*dstMax*/ max);
+            }
+        }
+        setStreamVolumeWithAttributionInt(vi.getStreamType(), index, /*flags*/ 0,
+                ada, callingPackage, attributionTag);
+    }
+
     /** Retain API for unsupported app usage */
     public void setStreamVolume(int streamType, int index, int flags, String callingPackage) {
-        setStreamVolumeWithAttribution(streamType, index, flags, callingPackage, null);
+        setStreamVolumeWithAttribution(streamType, index, flags,
+                callingPackage, /*attributionTag*/ null);
     }
 
     /** @see AudioManager#setStreamVolume(int, int, int)
      * Part of service interface, check permissions here */
     public void setStreamVolumeWithAttribution(int streamType, int index, int flags,
             String callingPackage, String attributionTag) {
+        setStreamVolumeWithAttributionInt(streamType, index, flags, /*device*/ null,
+                callingPackage, attributionTag);
+    }
+
+    /**
+     * Internal method for a stream type volume change. Can be used to change the volume on a
+     * given device only
+     * @param streamType the stream type whose volume is to be changed
+     * @param index the volume index
+     * @param flags options for volume handling
+     * @param device null when controlling volume for the current routing, otherwise the device
+     *               for which volume is being changed
+     * @param callingPackage client side-provided package name of caller, not to be trusted
+     * @param attributionTag client side-provided attribution name, not to be trusted
+     */
+    protected void setStreamVolumeWithAttributionInt(int streamType, int index, int flags,
+            @Nullable AudioDeviceAttributes device,
+            String callingPackage, String attributionTag) {
         if ((streamType == AudioManager.STREAM_ACCESSIBILITY) && !canChangeAccessibilityVolume()) {
             Log.w(TAG, "Trying to call setStreamVolume() for a11y without"
                     + " CHANGE_ACCESSIBILITY_VOLUME  callingPackage=" + callingPackage);
@@ -3611,10 +3720,14 @@
             return;
         }
 
-        sVolumeLogger.log(new VolumeEvent(VolumeEvent.VOL_SET_STREAM_VOL, streamType,
-                index/*val1*/, flags/*val2*/, callingPackage));
-        setStreamVolume(streamType, index, flags, callingPackage, callingPackage,
-                attributionTag, Binder.getCallingUid(), callingOrSelfHasAudioSettingsPermission());
+        final AudioEventLogger.Event event = (device == null)
+                ? new VolumeEvent(VolumeEvent.VOL_SET_STREAM_VOL, streamType,
+                    index/*val1*/, flags/*val2*/, callingPackage)
+                : new DeviceVolumeEvent(streamType, index, device, callingPackage);
+        sVolumeLogger.log(event);
+        setStreamVolume(streamType, index, flags, device,
+                callingPackage, callingPackage, attributionTag,
+                Binder.getCallingUid(), callingOrSelfHasAudioSettingsPermission());
     }
 
     /** @see AudioManager#isUltrasoundSupported() */
@@ -3823,14 +3936,12 @@
             case AudioSystem.MODE_IN_COMMUNICATION:
             case AudioSystem.MODE_IN_CALL:
             case AudioSystem.MODE_NORMAL:
+            case AudioSystem.MODE_CALL_SCREENING:
+            case AudioSystem.MODE_CALL_REDIRECT:
+            case AudioSystem.MODE_COMMUNICATION_REDIRECT:
                 break;
-            case AudioSystem.MODE_RINGTONE:
-                // not changing anything for ringtone
-                return;
-            case AudioSystem.MODE_CURRENT:
-            case AudioSystem.MODE_INVALID:
             default:
-                // don't know what to do in this case, better bail
+                // no-op is enough for all other values
                 return;
         }
 
@@ -3853,11 +3964,41 @@
         }
     }
 
-    private void setStreamVolume(int streamType, int index, int flags, String callingPackage,
-            String caller, String attributionTag, int uid,
+    private void setLeAudioVolumeOnModeUpdate(int mode) {
+        switch (mode) {
+            case AudioSystem.MODE_IN_COMMUNICATION:
+            case AudioSystem.MODE_IN_CALL:
+            case AudioSystem.MODE_NORMAL:
+            case AudioSystem.MODE_CALL_SCREENING:
+            case AudioSystem.MODE_CALL_REDIRECT:
+            case AudioSystem.MODE_COMMUNICATION_REDIRECT:
+                break;
+            default:
+                // no-op is enough for all other values
+                return;
+        }
+
+        int streamType = getBluetoothContextualVolumeStream(mode);
+
+        // Currently, DEVICE_OUT_BLE_HEADSET is the only output type for LE_AUDIO profile.
+        // (See AudioDeviceBroker#createBtDeviceInfo())
+        int index = mStreamStates[streamType].getIndex(AudioSystem.DEVICE_OUT_BLE_HEADSET);
+        int maxIndex = mStreamStates[streamType].getMaxIndex();
+
+        if (DEBUG_VOL) {
+            Log.d(TAG, "setLeAudioVolumeOnModeUpdate postSetLeAudioVolumeIndex index="
+                    + index + " maxIndex=" + maxIndex + " streamType=" + streamType);
+        }
+        mDeviceBroker.postSetLeAudioVolumeIndex(index, maxIndex, streamType);
+    }
+
+    private void setStreamVolume(int streamType, int index, int flags,
+            @Nullable AudioDeviceAttributes ada,
+            String callingPackage, String caller, String attributionTag, int uid,
             boolean hasModifyAudioSettings) {
         if (DEBUG_VOL) {
             Log.d(TAG, "setStreamVolume(stream=" + streamType+", index=" + index
+                    + ", dev=" + ada
                     + ", calling=" + callingPackage + ")");
         }
         if (mUseFixedVolume) {
@@ -3868,7 +4009,9 @@
         int streamTypeAlias = mStreamVolumeAlias[streamType];
         VolumeStreamState streamState = mStreamStates[streamTypeAlias];
 
-        final int device = getDeviceForStream(streamType);
+        final int device = (ada == null)
+                ? getDeviceForStream(streamType)
+                : ada.getInternalType();
         int oldIndex;
 
         // skip a2dp absolute volume control request when the device
@@ -5225,6 +5368,10 @@
                 // change of mode may require volume to be re-applied on some devices
                 updateAbsVolumeMultiModeDevices(previousMode, mode);
 
+                // Forcefully set LE audio volume as a workaround, since the value of 'device'
+                // is not DEVICE_OUT_BLE_* even when BLE is connected.
+                setLeAudioVolumeOnModeUpdate(mode);
+
                 // when entering RINGTONE, IN_CALL or IN_COMMUNICATION mode, clear all SCO
                 // connections not started by the application changing the mode when pid changes
                 mDeviceBroker.postSetModeOwnerPid(pid, mode);
@@ -5372,7 +5519,8 @@
             throw new SecurityException("Should only be called from system process");
         }
 
-        setStreamVolume(streamType, index, flags, packageName, packageName, null, uid,
+        setStreamVolume(streamType, index, flags, /*device*/ null,
+                packageName, packageName, null, uid,
                 hasAudioSettingsPermission(uid, pid));
     }
 
@@ -7515,7 +7663,7 @@
                     && !isFullyMuted()) {
                 index = 1;
             }
-            AudioSystem.setStreamVolumeIndexAS(mStreamType, index, device);
+            mAudioSystem.setStreamVolumeIndexAS(mStreamType, index, device);
         }
 
         // must be called while synchronized VolumeStreamState.class
@@ -8151,6 +8299,10 @@
                     onPersistSpatialAudioDeviceSettings();
                     break;
 
+                case MSG_RESET_SPATIALIZER:
+                    mSpatializerHelper.reset(/* featureEnabled */ mHasSpatializerEffect);
+                    break;
+
                 case MSG_CHECK_MUSIC_ACTIVE:
                     onCheckMusicActive((String) msg.obj);
                     break;
@@ -9129,16 +9281,23 @@
                 /*arg1*/ 0, /*arg2*/ 0, TAG, /*delay*/ 0);
     }
 
+    /**
+     * post a message to schedule a reset of the spatializer state
+     */
+    void postResetSpatializer() {
+        sendMsg(mAudioHandler,
+                MSG_RESET_SPATIALIZER,
+                SENDMSG_REPLACE,
+                /*arg1*/ 0, /*arg2*/ 0, TAG, /*delay*/ 0);
+    }
+
     void onInitSpatializer() {
         final String settings = mSettings.getSecureStringForUser(mContentResolver,
                 Settings.Secure.SPATIAL_AUDIO_ENABLED, UserHandle.USER_CURRENT);
         if (settings == null) {
             Log.e(TAG, "error reading spatial audio device settings");
-        } else {
-            Log.v(TAG, "restoring spatial audio device settings: " + settings);
-            mSpatializerHelper.setSADeviceSettings(settings);
         }
-        mSpatializerHelper.init(/*effectExpected*/ mHasSpatializerEffect);
+        mSpatializerHelper.init(/*effectExpected*/ mHasSpatializerEffect, settings);
         mSpatializerHelper.setFeatureEnabled(mHasSpatializerEffect);
     }
 
@@ -9916,6 +10075,7 @@
         pw.print("  mBtScoOnByApp="); pw.println(mBtScoOnByApp);
         pw.print("  mIsSingleVolume="); pw.println(mIsSingleVolume);
         pw.print("  mUseFixedVolume="); pw.println(mUseFixedVolume);
+        pw.print("  mNotifAliasRing="); pw.println(mNotifAliasRing);
         pw.print("  mFixedVolumeDevices="); pw.println(dumpDeviceTypes(mFixedVolumeDevices));
         pw.print("  mFullVolumeDevices="); pw.println(dumpDeviceTypes(mFullVolumeDevices));
         pw.print("  mAbsoluteVolumeDevices.keySet()="); pw.println(dumpDeviceTypes(
@@ -10325,6 +10485,11 @@
 
         @Override
         public void setAccessibilityServiceUids(IntArray uids) {
+            // TODO(b/233287010): Fix voice interaction and a11y concurrency in audio policy service
+            if (isPlatformAutomotive()) {
+                return;
+            }
+
             synchronized (mAccessibilityServiceUidsLock) {
                 if (uids.size() == 0) {
                     mAccessibilityServiceUids = null;
diff --git a/services/core/java/com/android/server/audio/AudioServiceEvents.java b/services/core/java/com/android/server/audio/AudioServiceEvents.java
index 3225274..b5835ce 100644
--- a/services/core/java/com/android/server/audio/AudioServiceEvents.java
+++ b/services/core/java/com/android/server/audio/AudioServiceEvents.java
@@ -16,7 +16,9 @@
 
 package com.android.server.audio;
 
+import android.annotation.NonNull;
 import android.media.AudioAttributes;
+import android.media.AudioDeviceAttributes;
 import android.media.AudioManager;
 import android.media.AudioSystem;
 import android.media.MediaMetrics;
@@ -145,6 +147,43 @@
         }
     }
 
+    static final class DeviceVolumeEvent extends AudioEventLogger.Event {
+        final int mStream;
+        final int mVolIndex;
+        final String mDeviceNativeType;
+        final String mDeviceAddress;
+        final String mCaller;
+
+        DeviceVolumeEvent(int streamType, int index, @NonNull AudioDeviceAttributes device,
+                String callingPackage) {
+            mStream = streamType;
+            mVolIndex = index;
+            mDeviceNativeType = "0x" + Integer.toHexString(device.getInternalType());
+            mDeviceAddress = device.getAddress();
+            mCaller = callingPackage;
+            // log metrics
+            new MediaMetrics.Item(MediaMetrics.Name.AUDIO_VOLUME_EVENT)
+                    .set(MediaMetrics.Property.EVENT, "setDeviceVolume")
+                    .set(MediaMetrics.Property.STREAM_TYPE,
+                            AudioSystem.streamToString(mStream))
+                    .set(MediaMetrics.Property.INDEX, mVolIndex)
+                    .set(MediaMetrics.Property.DEVICE, mDeviceNativeType)
+                    .set(MediaMetrics.Property.ADDRESS, mDeviceAddress)
+                    .set(MediaMetrics.Property.CALLING_PACKAGE, mCaller)
+                    .record();
+        }
+
+        @Override
+        public String eventToString() {
+            return 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();
+        }
+    }
+
     final static class VolumeEvent extends AudioEventLogger.Event {
         static final int VOL_ADJUST_SUGG_VOL = 0;
         static final int VOL_ADJUST_STREAM_VOL = 1;
diff --git a/services/core/java/com/android/server/audio/AudioSystemAdapter.java b/services/core/java/com/android/server/audio/AudioSystemAdapter.java
index 758a4ec..c3754eb 100644
--- a/services/core/java/com/android/server/audio/AudioSystemAdapter.java
+++ b/services/core/java/com/android/server/audio/AudioSystemAdapter.java
@@ -387,6 +387,17 @@
     }
 
     /**
+     * Same as {@link AudioSystem#setStreamVolumeIndexAS(int, int, int)}
+     * @param stream
+     * @param index
+     * @param device
+     * @return
+     */
+    public int setStreamVolumeIndexAS(int stream, int index, int device) {
+        return AudioSystem.setStreamVolumeIndexAS(stream, index, device);
+    }
+
+    /**
      * Same as {@link AudioSystem#setPhoneState(int, int)}
      * @param state
      * @param uid
diff --git a/services/core/java/com/android/server/audio/BtHelper.java b/services/core/java/com/android/server/audio/BtHelper.java
index 0e38232..9a7c6626 100644
--- a/services/core/java/com/android/server/audio/BtHelper.java
+++ b/services/core/java/com/android/server/audio/BtHelper.java
@@ -53,6 +53,8 @@
 
     private static final String TAG = "AS.BtHelper";
 
+    private static final int SOURCE_CODEC_TYPE_OPUS = 6; // TODO remove in U
+
     private final @NonNull AudioDeviceBroker mDeviceBroker;
 
     BtHelper(@NonNull AudioDeviceBroker broker) {
@@ -907,6 +909,8 @@
                 return "ENCODING_APTX_HD";
             case BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC:
                 return "ENCODING_LDAC";
+            case SOURCE_CODEC_TYPE_OPUS: // TODO update in U
+                return "ENCODING_OPUS";
             default:
                 return "ENCODING_BT_CODEC_TYPE(" + btCodecType + ")";
         }
diff --git a/services/core/java/com/android/server/audio/SpatializerHelper.java b/services/core/java/com/android/server/audio/SpatializerHelper.java
index 5b26672..e27fb11 100644
--- a/services/core/java/com/android/server/audio/SpatializerHelper.java
+++ b/services/core/java/com/android/server/audio/SpatializerHelper.java
@@ -46,6 +46,8 @@
 import android.util.Pair;
 import android.util.SparseIntArray;
 
+import com.android.internal.annotations.GuardedBy;
+
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.List;
@@ -103,10 +105,6 @@
             AudioDeviceInfo.TYPE_BLE_BROADCAST
     };
 
-    private static final int[] WIRELESS_SPEAKER_TYPES = {
-            AudioDeviceInfo.TYPE_BLE_SPEAKER,
-    };
-
     // Spatializer state machine
     private static final int STATE_UNINITIALIZED = 0;
     private static final int STATE_NOT_SUPPORTED = 1;
@@ -166,6 +164,7 @@
      * List of devices where Spatial Audio is possible. Each device can be enabled or disabled
      * (== user choice to use or not)
      */
+    @GuardedBy("this")
     private final ArrayList<SADeviceState> mSADevices = new ArrayList<>(0);
 
     //------------------------------------------------------
@@ -175,7 +174,7 @@
         mASA = asa;
     }
 
-    synchronized void init(boolean effectExpected) {
+    synchronized void init(boolean effectExpected, @Nullable String settings) {
         loglogi("init effectExpected=" + effectExpected);
         if (!effectExpected) {
             loglogi("init(): setting state to STATE_NOT_SUPPORTED due to effect not expected");
@@ -278,20 +277,22 @@
                     mSACapableDeviceTypes.add(SPAT_MODE_FOR_DEVICE_TYPE.keyAt(i));
                 }
             }
+
+            // When initialized from AudioService, the settings string will be non-null.
+            // Saved settings need to be applied after spatialization support is initialized above.
+            if (settings != null) {
+                setSADeviceSettings(settings);
+            }
+
             // for both transaural / binaural, we are not forcing enablement as the init() method
             // could have been called another time after boot in case of audioserver restart
-            if (mTransauralSupported) {
-                // not force-enabling as this device might already be in the device list
-                addCompatibleAudioDevice(
-                        new AudioDeviceAttributes(AudioSystem.DEVICE_OUT_SPEAKER, ""),
-                                false /*forceEnable*/);
-            }
-            if (mBinauralSupported) {
-                // not force-enabling as this device might already be in the device list
-                addCompatibleAudioDevice(
-                        new AudioDeviceAttributes(AudioSystem.DEVICE_OUT_WIRED_HEADPHONE, ""),
-                                false /*forceEnable*/);
-            }
+            addCompatibleAudioDevice(
+                    new AudioDeviceAttributes(AudioSystem.DEVICE_OUT_SPEAKER, ""),
+                            false /*forceEnable*/);
+            // not force-enabling as this device might already be in the device list
+            addCompatibleAudioDevice(
+                    new AudioDeviceAttributes(AudioSystem.DEVICE_OUT_WIRED_HEADPHONE, ""),
+                            false /*forceEnable*/);
         } catch (RemoteException e) {
             resetCapabilities();
         } finally {
@@ -321,7 +322,7 @@
         mState = STATE_UNINITIALIZED;
         mSpatLevel = Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_NONE;
         mActualHeadTrackingMode = Spatializer.HEAD_TRACKING_MODE_UNSUPPORTED;
-        init(true);
+        init(true, null /* settings */);
         setSpatializerEnabledInt(featureEnabled);
     }
 
@@ -388,10 +389,10 @@
             try {
                 mSpat.setLevel(level);
             } catch (RemoteException e) {
-                Log.e(TAG, "Can't set spatializer level", e);
-                mState = STATE_NOT_SUPPORTED;
-                mCapableSpatLevel = Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_NONE;
-                enabled = false;
+                Log.e(TAG, "onRoutingUpdated() Can't set spatializer level", e);
+                // try to recover by resetting the native spatializer state
+                postReset();
+                return;
             }
         }
 
@@ -403,6 +404,10 @@
         }
     }
 
+    private void postReset() {
+        mAudioService.postResetSpatializer();
+    }
+
     //------------------------------------------------------
     // spatializer callback from native
     private final class SpatializerCallback extends INativeSpatializerCallback.Stub {
@@ -497,10 +502,9 @@
     synchronized @NonNull List<AudioDeviceAttributes> getCompatibleAudioDevices() {
         // build unionOf(mCompatibleAudioDevices, mEnabledDevice) - mDisabledAudioDevices
         ArrayList<AudioDeviceAttributes> compatList = new ArrayList<>();
-        for (SADeviceState dev : mSADevices) {
-            if (dev.mEnabled) {
-                compatList.add(new AudioDeviceAttributes(AudioDeviceAttributes.ROLE_OUTPUT,
-                        dev.mDeviceType, dev.mDeviceAddress == null ? "" : dev.mDeviceAddress));
+        for (SADeviceState deviceState : mSADevices) {
+            if (deviceState.mEnabled) {
+                compatList.add(deviceState.getAudioDeviceAttributes());
             }
         }
         return compatList;
@@ -519,31 +523,30 @@
      *                    set to true if the device is added to the list, otherwise, if already
      *                    present, the setting is left untouched.
      */
+    @GuardedBy("this")
     private void addCompatibleAudioDevice(@NonNull AudioDeviceAttributes ada,
             boolean forceEnable) {
-        loglogi("addCompatibleAudioDevice: dev=" + ada);
-        final int deviceType = ada.getType();
-        final boolean wireless = isWireless(deviceType);
-        boolean isInList = false;
-        SADeviceState deviceUpdated = null; // non-null on update.
-
-        for (SADeviceState deviceState : mSADevices) {
-            if (deviceType == deviceState.mDeviceType
-                    && (!wireless || ada.getAddress().equals(deviceState.mDeviceAddress))) {
-                isInList = true;
-                if (forceEnable) {
-                    deviceState.mEnabled = true;
-                    deviceUpdated = deviceState;
-                }
-                break;
-            }
+        if (!isDeviceCompatibleWithSpatializationModes(ada)) {
+            return;
         }
-        if (!isInList) {
-            final SADeviceState dev = new SADeviceState(deviceType,
-                    wireless ? ada.getAddress() : "");
-            dev.mEnabled = true;
-            mSADevices.add(dev);
-            deviceUpdated = dev;
+        loglogi("addCompatibleAudioDevice: dev=" + ada);
+        final SADeviceState deviceState = findDeviceStateForAudioDeviceAttributes(ada);
+        SADeviceState deviceUpdated = null; // non-null on update.
+        if (deviceState != null) {
+            if (forceEnable && !deviceState.mEnabled) {
+                deviceUpdated = deviceState;
+                deviceUpdated.mEnabled = true;
+            }
+        } else {
+            // When adding, force the device type to be a canonical one.
+            final int canonicalDeviceType = getCanonicalDeviceType(ada.getType());
+            if (canonicalDeviceType == AudioDeviceInfo.TYPE_UNKNOWN) {
+                Log.e(TAG, "addCompatibleAudioDevice with incompatible AudioDeviceAttributes "
+                        + ada);
+                return;
+            }
+            deviceUpdated = new SADeviceState(canonicalDeviceType, ada.getAddress());
+            mSADevices.add(deviceUpdated);
         }
         if (deviceUpdated != null) {
             onRoutingUpdated();
@@ -574,95 +577,95 @@
 
     synchronized void removeCompatibleAudioDevice(@NonNull AudioDeviceAttributes ada) {
         loglogi("removeCompatibleAudioDevice: dev=" + ada);
-        final int deviceType = ada.getType();
-        final boolean wireless = isWireless(deviceType);
-        SADeviceState deviceUpdated = null; // non-null on update.
 
-        for (SADeviceState deviceState : mSADevices) {
-            if (deviceType == deviceState.mDeviceType
-                    && (!wireless || ada.getAddress().equals(deviceState.mDeviceAddress))) {
-                deviceState.mEnabled = false;
-                deviceUpdated = deviceState;
-                break;
-            }
-        }
-        if (deviceUpdated != null) {
+        final SADeviceState deviceState = findDeviceStateForAudioDeviceAttributes(ada);
+        if (deviceState != null && deviceState.mEnabled) {
+            deviceState.mEnabled = false;
             onRoutingUpdated();
             mAudioService.persistSpatialAudioDeviceSettings();
-            logDeviceState(deviceUpdated, "removeCompatibleAudioDevice");
+            logDeviceState(deviceState, "removeCompatibleAudioDevice");
         }
     }
 
     /**
+     * Returns a possibly aliased device type which is used
+     * for spatial audio settings (or TYPE_UNKNOWN  if it doesn't exist).
+     */
+    private static @AudioDeviceInfo.AudioDeviceType int getCanonicalDeviceType(int deviceType) {
+        if (isWireless(deviceType)) return deviceType;
+
+        final int spatMode = SPAT_MODE_FOR_DEVICE_TYPE.get(deviceType, Integer.MIN_VALUE);
+        if (spatMode == SpatializationMode.SPATIALIZER_TRANSAURAL) {
+            return AudioDeviceInfo.TYPE_BUILTIN_SPEAKER;
+        } else if (spatMode == SpatializationMode.SPATIALIZER_BINAURAL) {
+            return AudioDeviceInfo.TYPE_WIRED_HEADPHONES;
+        }
+        return AudioDeviceInfo.TYPE_UNKNOWN;
+    }
+
+    /**
+     * Returns the Spatial Audio device state for an audio device attributes
+     * or null if it does not exist.
+     */
+    @GuardedBy("this")
+    @Nullable
+    private SADeviceState findDeviceStateForAudioDeviceAttributes(AudioDeviceAttributes ada) {
+        final int deviceType = ada.getType();
+        final boolean isWireless = isWireless(deviceType);
+        final int canonicalDeviceType = getCanonicalDeviceType(deviceType);
+
+        for (SADeviceState deviceState : mSADevices) {
+            if (deviceState.mDeviceType == canonicalDeviceType
+                    && (!isWireless || ada.getAddress().equals(deviceState.mDeviceAddress))) {
+                return deviceState;
+            }
+        }
+        return null;
+    }
+
+    /**
      * Return if Spatial Audio is enabled and available for the given device
      * @param ada
      * @return a pair of boolean, 1/ enabled? 2/ available?
      */
     private synchronized Pair<Boolean, Boolean> evaluateState(AudioDeviceAttributes ada) {
-        // if not a wireless device, this value will be overwritten to map the type
-        // to TYPE_BUILTIN_SPEAKER or TYPE_WIRED_HEADPHONES
-        @AudioDeviceInfo.AudioDeviceType int deviceType = ada.getType();
-        final boolean wireless = isWireless(deviceType);
-
-        // if not a wireless device: find if media device is in the speaker, wired headphones
-        if (!wireless) {
-            // is the device type capable of doing SA?
-            if (!mSACapableDeviceTypes.contains(deviceType)) {
-                Log.i(TAG, "Device incompatible with Spatial Audio dev:" + ada);
-                return new Pair<>(false, false);
-            }
-            // what spatialization mode to use for this device?
-            final int spatMode = SPAT_MODE_FOR_DEVICE_TYPE.get(deviceType, Integer.MIN_VALUE);
-            if (spatMode == Integer.MIN_VALUE) {
-                // error case, device not found
-                Log.e(TAG, "no spatialization mode found for device type:" + deviceType);
-                return new Pair<>(false, false);
-            }
-            // map the spatialization mode to the SPEAKER or HEADPHONES device
-            if (spatMode == SpatializationMode.SPATIALIZER_TRANSAURAL) {
-                deviceType = AudioDeviceInfo.TYPE_BUILTIN_SPEAKER;
-            } else {
-                deviceType = AudioDeviceInfo.TYPE_WIRED_HEADPHONES;
-            }
-        } else { // wireless device
-            if (isWirelessSpeaker(deviceType) && !mTransauralSupported) {
-                Log.i(TAG, "Device incompatible with Spatial Audio (no transaural) dev:"
-                        + ada);
-                return new Pair<>(false, false);
-            }
-            if (!mBinauralSupported) {
-                Log.i(TAG, "Device incompatible with Spatial Audio (no binaural) dev:"
-                        + ada);
-                return new Pair<>(false, false);
-            }
+        final @AudioDeviceInfo.AudioDeviceType int deviceType = ada.getType();
+        // is the device type capable of doing SA?
+        if (!mSACapableDeviceTypes.contains(deviceType)) {
+            Log.i(TAG, "Device incompatible with Spatial Audio dev:" + ada);
+            return new Pair<>(false, false);
         }
-
-        boolean enabled = false;
-        boolean available = false;
-        for (SADeviceState deviceState : mSADevices) {
-            if (deviceType == deviceState.mDeviceType
-                    && (wireless && ada.getAddress().equals(deviceState.mDeviceAddress))
-                    || !wireless) {
-                available = true;
-                enabled = deviceState.mEnabled;
-                break;
-            }
+        // what spatialization mode to use for this device?
+        final int spatMode = SPAT_MODE_FOR_DEVICE_TYPE.get(deviceType, Integer.MIN_VALUE);
+        if (spatMode == Integer.MIN_VALUE) {
+            // error case, device not found
+            Log.e(TAG, "no spatialization mode found for device type:" + deviceType);
+            return new Pair<>(false, false);
         }
-        return new Pair<>(enabled, available);
+        final SADeviceState deviceState = findDeviceStateForAudioDeviceAttributes(ada);
+        if (deviceState == null) {
+            // no matching device state?
+            Log.i(TAG, "no spatialization device state found for Spatial Audio device:" + ada);
+            return new Pair<>(false, false);
+        }
+        // found the matching device state.
+        return new Pair<>(deviceState.mEnabled, true /* available */);
     }
 
     private synchronized void addWirelessDeviceIfNew(@NonNull AudioDeviceAttributes ada) {
-        boolean knownDevice = false;
-        for (SADeviceState deviceState : mSADevices) {
-            // wireless device so always check address
-            if (ada.getType() == deviceState.mDeviceType
-                    && ada.getAddress().equals(deviceState.mDeviceAddress)) {
-                knownDevice = true;
-                break;
-            }
+        if (!isDeviceCompatibleWithSpatializationModes(ada)) {
+            return;
         }
-        if (!knownDevice) {
-            final SADeviceState deviceState = new SADeviceState(ada.getType(), ada.getAddress());
+        if (findDeviceStateForAudioDeviceAttributes(ada) == null) {
+            // wireless device types should be canonical, but we translate to be sure.
+            final int canonicalDeviceType = getCanonicalDeviceType((ada.getType()));
+            if (canonicalDeviceType == AudioDeviceInfo.TYPE_UNKNOWN) {
+                Log.e(TAG, "addWirelessDeviceIfNew with incompatible AudioDeviceAttributes "
+                        + ada);
+                return;
+            }
+            final SADeviceState deviceState =
+                    new SADeviceState(canonicalDeviceType, ada.getAddress());
             mSADevices.add(deviceState);
             mAudioService.persistSpatialAudioDeviceSettings();
             logDeviceState(deviceState, "addWirelessDeviceIfNew"); // may be updated later.
@@ -704,27 +707,24 @@
         if (ada.getRole() != AudioDeviceAttributes.ROLE_OUTPUT) {
             return false;
         }
-
-        final int deviceType = ada.getType();
-        final boolean wireless = isWireless(deviceType);
-        for (SADeviceState deviceState : mSADevices) {
-            if (deviceType == deviceState.mDeviceType
-                    && (wireless && ada.getAddress().equals(deviceState.mDeviceAddress))
-                    || !wireless) {
-                return true;
-            }
-        }
-        return false;
+        return findDeviceStateForAudioDeviceAttributes(ada) != null;
     }
 
     private synchronized boolean canBeSpatializedOnDevice(@NonNull AudioAttributes attributes,
             @NonNull AudioFormat format, @NonNull AudioDeviceAttributes[] devices) {
-        final byte modeForDevice = (byte) SPAT_MODE_FOR_DEVICE_TYPE.get(devices[0].getType(),
+        if (isDeviceCompatibleWithSpatializationModes(devices[0])) {
+            return AudioSystem.canBeSpatialized(attributes, format, devices);
+        }
+        return false;
+    }
+
+    private boolean isDeviceCompatibleWithSpatializationModes(@NonNull AudioDeviceAttributes ada) {
+        final byte modeForDevice = (byte) SPAT_MODE_FOR_DEVICE_TYPE.get(ada.getType(),
                 /*default when type not found*/ SpatializationMode.SPATIALIZER_BINAURAL);
         if ((modeForDevice == SpatializationMode.SPATIALIZER_BINAURAL && mBinauralSupported)
                 || (modeForDevice == SpatializationMode.SPATIALIZER_TRANSAURAL
                         && mTransauralSupported)) {
-            return AudioSystem.canBeSpatialized(attributes, format, devices);
+            return true;
         }
         return false;
     }
@@ -741,7 +741,7 @@
                 return;
             }
             if (mState == STATE_UNINITIALIZED) {
-                init(true);
+                init(true, null /* settings */);
             }
             setSpatializerEnabledInt(true);
         } else {
@@ -755,33 +755,29 @@
                 if (enabled) {
                     throw (new IllegalStateException("Can't enable when uninitialized"));
                 }
-                return;
+                break;
             case STATE_NOT_SUPPORTED:
                 if (enabled) {
                     Log.e(TAG, "Can't enable when unsupported");
                 }
-                return;
+                break;
             case STATE_DISABLED_UNAVAILABLE:
             case STATE_DISABLED_AVAILABLE:
                 if (enabled) {
                     createSpat();
                     onRoutingUpdated();
-                    break;
-                } else {
-                    // already in disabled state
-                    return;
-                }
+                    // onRoutingUpdated() can update the "enabled" state based on context
+                    // and will call setDispatchFeatureEnabledState().
+                } // else { nothing to do as already disabled }
+                break;
             case STATE_ENABLED_UNAVAILABLE:
             case STATE_ENABLED_AVAILABLE:
                 if (!enabled) {
                     releaseSpat();
-                    break;
-                } else {
-                    // already in enabled state
-                    return;
-                }
+                    setDispatchFeatureEnabledState(false, "setSpatializerEnabledInt");
+                } // else { nothing to do as already enabled }
+                break;
         }
-        setDispatchFeatureEnabledState(enabled, "setSpatializerEnabledInt");
     }
 
     synchronized int getCapableImmersiveAudioLevel() {
@@ -1089,27 +1085,20 @@
             Log.v(TAG, "no headtracking support, ignoring setHeadTrackerEnabled to " + enabled
                     + " for " + ada);
         }
-        final int deviceType = ada.getType();
-        final boolean wireless = isWireless(deviceType);
-
-        for (SADeviceState deviceState : mSADevices) {
-            if (deviceType == deviceState.mDeviceType
-                    && (wireless && ada.getAddress().equals(deviceState.mDeviceAddress))
-                    || !wireless) {
-                if (!deviceState.mHasHeadTracker) {
-                    Log.e(TAG, "Called setHeadTrackerEnabled enabled:" + enabled
-                            + " device:" + ada + " on a device without headtracker");
-                    return;
-                }
-                Log.i(TAG, "setHeadTrackerEnabled enabled:" + enabled + " device:" + ada);
-                deviceState.mHeadTrackerEnabled = enabled;
-                mAudioService.persistSpatialAudioDeviceSettings();
-                logDeviceState(deviceState, "setHeadTrackerEnabled");
-                break;
-            }
+        final SADeviceState deviceState = findDeviceStateForAudioDeviceAttributes(ada);
+        if (deviceState == null) return;
+        if (!deviceState.mHasHeadTracker) {
+            Log.e(TAG, "Called setHeadTrackerEnabled enabled:" + enabled
+                    + " device:" + ada + " on a device without headtracker");
+            return;
         }
+        Log.i(TAG, "setHeadTrackerEnabled enabled:" + enabled + " device:" + ada);
+        deviceState.mHeadTrackerEnabled = enabled;
+        mAudioService.persistSpatialAudioDeviceSettings();
+        logDeviceState(deviceState, "setHeadTrackerEnabled");
+
         // check current routing to see if it affects the headtracking mode
-        if (ROUTING_DEVICES[0].getType() == deviceType
+        if (ROUTING_DEVICES[0].getType() == ada.getType()
                 && ROUTING_DEVICES[0].getAddress().equals(ada.getAddress())) {
             setDesiredHeadTrackingMode(enabled ? mDesiredHeadTrackingModeWhenEnabled
                     : Spatializer.HEAD_TRACKING_MODE_DISABLED);
@@ -1121,17 +1110,8 @@
             Log.v(TAG, "no headtracking support, hasHeadTracker always false for " + ada);
             return false;
         }
-        final int deviceType = ada.getType();
-        final boolean wireless = isWireless(deviceType);
-
-        for (SADeviceState deviceState : mSADevices) {
-            if (deviceType == deviceState.mDeviceType
-                    && (wireless && ada.getAddress().equals(deviceState.mDeviceAddress))
-                    || !wireless) {
-                return deviceState.mHasHeadTracker;
-            }
-        }
-        return false;
+        final SADeviceState deviceState = findDeviceStateForAudioDeviceAttributes(ada);
+        return deviceState != null && deviceState.mHasHeadTracker;
     }
 
     /**
@@ -1144,20 +1124,14 @@
             Log.v(TAG, "no headtracking support, setHasHeadTracker always false for " + ada);
             return false;
         }
-        final int deviceType = ada.getType();
-        final boolean wireless = isWireless(deviceType);
-
-        for (SADeviceState deviceState : mSADevices) {
-            if (deviceType == deviceState.mDeviceType
-                    && (wireless && ada.getAddress().equals(deviceState.mDeviceAddress))
-                    || !wireless) {
-                if (!deviceState.mHasHeadTracker) {
-                    deviceState.mHasHeadTracker = true;
-                    mAudioService.persistSpatialAudioDeviceSettings();
-                    logDeviceState(deviceState, "setHasHeadTracker");
-                }
-                return deviceState.mHeadTrackerEnabled;
+        final SADeviceState deviceState = findDeviceStateForAudioDeviceAttributes(ada);
+        if (deviceState != null) {
+            if (!deviceState.mHasHeadTracker) {
+                deviceState.mHasHeadTracker = true;
+                mAudioService.persistSpatialAudioDeviceSettings();
+                logDeviceState(deviceState, "setHasHeadTracker");
             }
+            return deviceState.mHeadTrackerEnabled;
         }
         Log.e(TAG, "setHasHeadTracker: device not found for:" + ada);
         return false;
@@ -1168,20 +1142,9 @@
             Log.v(TAG, "no headtracking support, isHeadTrackerEnabled always false for " + ada);
             return false;
         }
-        final int deviceType = ada.getType();
-        final boolean wireless = isWireless(deviceType);
-
-        for (SADeviceState deviceState : mSADevices) {
-            if (deviceType == deviceState.mDeviceType
-                    && (wireless && ada.getAddress().equals(deviceState.mDeviceAddress))
-                    || !wireless) {
-                if (!deviceState.mHasHeadTracker) {
-                    return false;
-                }
-                return deviceState.mHeadTrackerEnabled;
-            }
-        }
-        return false;
+        final SADeviceState deviceState = findDeviceStateForAudioDeviceAttributes(ada);
+        return deviceState != null
+                && deviceState.mHasHeadTracker && deviceState.mHeadTrackerEnabled;
     }
 
     synchronized boolean isHeadTrackerAvailable() {
@@ -1198,8 +1161,11 @@
             case STATE_DISABLED_AVAILABLE:
             case STATE_ENABLED_AVAILABLE:
                 if (mSpat == null) {
-                    throw (new IllegalStateException(
-                            "null Spatializer when calling " + funcName));
+                    // try to recover by resetting the native spatializer state
+                    Log.e(TAG, "checkSpatForHeadTracking(): "
+                            + "native spatializer should not be null in state: " + mState);
+                    postReset();
+                    return false;
                 }
                 break;
         }
@@ -1289,8 +1255,8 @@
             case STATE_DISABLED_AVAILABLE:
             case STATE_ENABLED_AVAILABLE:
                 if (mSpat == null) {
-                    throw (new IllegalStateException(
-                            "null Spatializer for setParameter for key:" + key));
+                    Log.e(TAG, "setParameter(" + key + "): null spatializer in state: " + mState);
+                    return;
                 }
                 break;
         }
@@ -1313,8 +1279,8 @@
             case STATE_DISABLED_AVAILABLE:
             case STATE_ENABLED_AVAILABLE:
                 if (mSpat == null) {
-                    throw (new IllegalStateException(
-                            "null Spatializer for getParameter for key:" + key));
+                    Log.e(TAG, "getParameter(" + key + "): null spatializer in state: " + mState);
+                    return;
                 }
                 break;
         }
@@ -1531,7 +1497,7 @@
 
         SADeviceState(@AudioDeviceInfo.AudioDeviceType int deviceType, @NonNull String address) {
             mDeviceType = deviceType;
-            mDeviceAddress = Objects.requireNonNull(address);
+            mDeviceAddress = isWireless(deviceType) ? Objects.requireNonNull(address) : "";
         }
 
         @Override
@@ -1599,6 +1565,12 @@
                 return null;
             }
         }
+
+        public AudioDeviceAttributes getAudioDeviceAttributes() {
+            return new AudioDeviceAttributes(AudioDeviceAttributes.ROLE_OUTPUT,
+                    mDeviceType, mDeviceAddress == null ? "" : mDeviceAddress);
+        }
+
     }
 
     /*package*/ synchronized String getSADeviceSettings() {
@@ -1619,7 +1591,12 @@
         // small list, not worth overhead of Arrays.stream(devSettings)
         for (String setting : devSettings) {
             SADeviceState devState = SADeviceState.fromPersistedString(setting);
-            if (devState != null) {
+            // Note if the device is not compatible with spatialization mode
+            // or the device type is not canonical, it is ignored.
+            if (devState != null
+                    && devState.mDeviceType == getCanonicalDeviceType(devState.mDeviceType)
+                    && isDeviceCompatibleWithSpatializationModes(
+                            devState.getAudioDeviceAttributes())) {
                 mSADevices.add(devState);
                 logDeviceState(devState, "setSADeviceSettings");
             }
@@ -1654,15 +1631,6 @@
         return false;
     }
 
-    private static boolean isWirelessSpeaker(@AudioDeviceInfo.AudioDeviceType int deviceType) {
-        for (int type : WIRELESS_SPEAKER_TYPES) {
-            if (type == deviceType) {
-                return true;
-            }
-        }
-        return false;
-    }
-
     private int getHeadSensorHandleUpdateTracker() {
         int headHandle = -1;
         UUID routingDeviceUuid = mAudioService.getDeviceSensorUuid(ROUTING_DEVICES[0]);
diff --git a/services/core/java/com/android/server/biometrics/log/BiometricLogger.java b/services/core/java/com/android/server/biometrics/log/BiometricLogger.java
index ad24cf0..262be08 100644
--- a/services/core/java/com/android/server/biometrics/log/BiometricLogger.java
+++ b/services/core/java/com/android/server/biometrics/log/BiometricLogger.java
@@ -28,8 +28,10 @@
 import android.hardware.biometrics.common.OperationContext;
 import android.hardware.face.FaceManager;
 import android.hardware.fingerprint.FingerprintManager;
+import android.util.Log;
 import android.util.Slog;
 
+import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.util.FrameworkStatsLog;
 import com.android.server.biometrics.Utils;
@@ -41,6 +43,10 @@
 
     public static final String TAG = "BiometricLogger";
     public static final boolean DEBUG = false;
+    private static final Object sLock = new Object();
+
+    @GuardedBy("sLock")
+    private static int sAlsCounter;
 
     private final int mStatsModality;
     private final int mStatsAction;
@@ -345,13 +351,33 @@
             if (!mLightSensorEnabled) {
                 mLightSensorEnabled = true;
                 mLastAmbientLux = 0;
-                mSensorManager.registerListener(mLightSensorListener, lightSensor,
-                        SensorManager.SENSOR_DELAY_NORMAL);
+                int localAlsCounter;
+                synchronized (sLock) {
+                    localAlsCounter = sAlsCounter++;
+                }
+
+                if (localAlsCounter == 0) {
+                    mSensorManager.registerListener(mLightSensorListener, lightSensor,
+                            SensorManager.SENSOR_DELAY_NORMAL);
+                } else {
+                    Slog.e(TAG, "Ignoring request to subscribe to ALSProbe due to non-zero ALS"
+                            + " counter: " + localAlsCounter);
+                    Slog.e(TAG, Log.getStackTraceString(new Throwable()));
+                }
             }
         } else {
             mLightSensorEnabled = false;
             mLastAmbientLux = 0;
             mSensorManager.unregisterListener(mLightSensorListener);
+            int localAlsCounter;
+            synchronized (sLock) {
+                localAlsCounter = --sAlsCounter;
+            }
+            if (localAlsCounter != 0) {
+                Slog.e(TAG, "Non-zero ALS counter after unsubscribing from ALSProbe: "
+                        + localAlsCounter);
+                Slog.e(TAG, Log.getStackTraceString(new Throwable()));
+            }
         }
     }
 }
diff --git a/services/core/java/com/android/server/biometrics/sensors/BiometricStateCallback.java b/services/core/java/com/android/server/biometrics/sensors/BiometricStateCallback.java
index 1b24aa8..0d789f7 100644
--- a/services/core/java/com/android/server/biometrics/sensors/BiometricStateCallback.java
+++ b/services/core/java/com/android/server/biometrics/sensors/BiometricStateCallback.java
@@ -108,6 +108,17 @@
         }
     }
 
+    @Override
+    public void onBiometricAction(@BiometricStateListener.Action int action) {
+        for (IBiometricStateListener listener : mBiometricStateListeners) {
+            try {
+                listener.onBiometricAction(action);
+            } catch (RemoteException e) {
+                Slog.e(TAG, "Remote exception in onBiometricAction", e);
+            }
+        }
+    }
+
     /**
      * This should be invoked when:
      * 1) Enrolled --> None-enrolled
diff --git a/services/core/java/com/android/server/biometrics/sensors/ClientMonitorCallback.java b/services/core/java/com/android/server/biometrics/sensors/ClientMonitorCallback.java
index 8ea4ee9..4417f92 100644
--- a/services/core/java/com/android/server/biometrics/sensors/ClientMonitorCallback.java
+++ b/services/core/java/com/android/server/biometrics/sensors/ClientMonitorCallback.java
@@ -31,6 +31,11 @@
     default void onClientStarted(@NonNull BaseClientMonitor clientMonitor) {}
 
     /**
+     * Invoked when a biometric action has occurred.
+     */
+    default void onBiometricAction(int action) {}
+
+    /**
      * Invoked when the ClientMonitor operation is complete. This abstracts away asynchronous
      * (i.e. Authenticate, Enroll, Enumerate, Remove) and synchronous (i.e. generateChallenge,
      * revokeChallenge) so that a scheduler can process ClientMonitors regardless of their
diff --git a/services/core/java/com/android/server/biometrics/sensors/ClientMonitorCompositeCallback.java b/services/core/java/com/android/server/biometrics/sensors/ClientMonitorCompositeCallback.java
index b82f5fa..07041bf8 100644
--- a/services/core/java/com/android/server/biometrics/sensors/ClientMonitorCompositeCallback.java
+++ b/services/core/java/com/android/server/biometrics/sensors/ClientMonitorCompositeCallback.java
@@ -44,6 +44,13 @@
     }
 
     @Override
+    public final void onBiometricAction(int action) {
+        for (int i = 0; i < mCallbacks.size(); i++) {
+            mCallbacks.get(i).onBiometricAction(action);
+        }
+    }
+
+    @Override
     public final void onClientFinished(@NonNull BaseClientMonitor clientMonitor,
             boolean success) {
         for (int i = mCallbacks.size() - 1; i >= 0; i--) {
diff --git a/services/core/java/com/android/server/biometrics/sensors/face/UsageStats.java b/services/core/java/com/android/server/biometrics/sensors/face/UsageStats.java
index d99abcd..9494547 100644
--- a/services/core/java/com/android/server/biometrics/sensors/face/UsageStats.java
+++ b/services/core/java/com/android/server/biometrics/sensors/face/UsageStats.java
@@ -70,20 +70,24 @@
 
     private int mAcceptCount;
     private int mRejectCount;
-    private SparseIntArray mErrorCount;
+    private int mErrorCount;
+    private int mAuthAttemptCount;
+    private SparseIntArray mErrorFrequencyMap;
 
     private long mAcceptLatency;
     private long mRejectLatency;
-    private SparseLongArray mErrorLatency;
+    private long mErrorLatency;
+    private SparseLongArray mErrorLatencyMap;
 
     public UsageStats(Context context) {
         mAuthenticationEvents = new ArrayDeque<>();
-        mErrorCount = new SparseIntArray();
-        mErrorLatency = new SparseLongArray();
+        mErrorFrequencyMap = new SparseIntArray();
+        mErrorLatencyMap = new SparseLongArray();
         mContext = context;
     }
 
     public void addEvent(AuthenticationEvent event) {
+        mAuthAttemptCount++;
         if (mAuthenticationEvents.size() >= EVENT_LOG_SIZE) {
             mAuthenticationEvents.removeFirst();
         }
@@ -96,29 +100,38 @@
             mRejectCount++;
             mRejectLatency += event.mLatency;
         } else {
-            mErrorCount.put(event.mError, mErrorCount.get(event.mError, 0) + 1);
-            mErrorLatency.put(event.mError, mErrorLatency.get(event.mError, 0L) + event.mLatency);
+            mErrorCount++;
+            mErrorLatency += event.mLatency;
+            mErrorFrequencyMap.put(event.mError, mErrorFrequencyMap.get(event.mError, 0) + 1);
+            mErrorLatencyMap.put(event.mError,
+                    mErrorLatencyMap.get(event.mError, 0L) + event.mLatency);
         }
     }
 
     public void print(PrintWriter pw) {
-        pw.println("Events since last reboot: " + mAuthenticationEvents.size());
+        pw.println("Printing most recent events since last reboot("
+                + mAuthenticationEvents.size() + " events)");
         for (AuthenticationEvent event : mAuthenticationEvents) {
             pw.println(event.toString(mContext));
         }
 
         // Dump aggregated usage stats
-        pw.println("Accept\tCount: " + mAcceptCount + "\tLatency: " + mAcceptLatency
+        pw.println("");
+        pw.println("Accept Count: " + mAcceptCount + "\tLatency: " + mAcceptLatency
                 + "\tAverage: " + (mAcceptCount > 0 ? mAcceptLatency / mAcceptCount : 0));
-        pw.println("Reject\tCount: " + mRejectCount + "\tLatency: " + mRejectLatency
+        pw.println("Reject Count: " + mRejectCount + "\tLatency: " + mRejectLatency
                 + "\tAverage: " + (mRejectCount > 0 ? mRejectLatency / mRejectCount : 0));
+        pw.println("Total Error Count: " + mErrorCount + "\tLatency: " + mErrorLatency
+                + "\tAverage: " + (mErrorCount > 0 ? mErrorLatency / mErrorCount : 0));
+        pw.println("Total Attempts: " + mAuthAttemptCount);
+        pw.println("");
 
-        for (int i = 0; i < mErrorCount.size(); i++) {
-            final int key = mErrorCount.keyAt(i);
-            final int count = mErrorCount.get(i);
+        for (int i = 0; i < mErrorFrequencyMap.size(); i++) {
+            final int key = mErrorFrequencyMap.keyAt(i);
+            final int count = mErrorFrequencyMap.get(key);
             pw.println("Error" + key + "\tCount: " + count
-                    + "\tLatency: " + mErrorLatency.get(key, 0L)
-                    + "\tAverage: " + (count > 0 ? mErrorLatency.get(key, 0L) / count : 0)
+                    + "\tLatency: " + mErrorLatencyMap.get(key, 0L)
+                    + "\tAverage: " + (count > 0 ? mErrorLatencyMap.get(key, 0L) / count : 0)
                     + "\t" + FaceManager.getErrorString(mContext, key, 0 /* vendorCode */));
         }
     }
diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java
index 0c5b19b..94b67ce 100644
--- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java
+++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/FingerprintService.java
@@ -1020,9 +1020,18 @@
 
         @Override
         public void registerBiometricStateListener(@NonNull IBiometricStateListener listener) {
+            Utils.checkPermission(getContext(), USE_BIOMETRIC_INTERNAL);
             FingerprintService.this.registerBiometricStateListener(listener);
         }
-    }
+
+        @Override
+        public void onPowerPressed() {
+            Utils.checkPermission(getContext(), USE_BIOMETRIC_INTERNAL);
+            for (ServiceProvider provider : mServiceProviders) {
+                provider.onPowerPressed();
+            }
+        }
+    };
 
     public FingerprintService(Context context) {
         super(context);
diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/PowerPressHandler.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/PowerPressHandler.java
new file mode 100644
index 0000000..288c372
--- /dev/null
+++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/PowerPressHandler.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.biometrics.sensors.fingerprint;
+
+/**
+ * Interface for handling power presses.
+ */
+public interface PowerPressHandler {
+    /**
+     * Indicates a power press has occurred.
+     */
+    void onPowerPressed();
+}
diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java
index 9cdbdc9..24a47e0 100644
--- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java
+++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/ServiceProvider.java
@@ -150,6 +150,8 @@
 
     void setUdfpsOverlayController(@NonNull IUdfpsOverlayController controller);
 
+    void onPowerPressed();
+
     /**
      * Sets side-fps controller
      * @param controller side-fps controller
diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java
index 79e3bf53..e1626f0 100644
--- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java
+++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java
@@ -21,6 +21,7 @@
 import android.app.TaskStackListener;
 import android.content.Context;
 import android.hardware.biometrics.BiometricAuthenticator;
+import android.hardware.biometrics.BiometricConstants;
 import android.hardware.biometrics.BiometricFingerprintConstants;
 import android.hardware.biometrics.BiometricFingerprintConstants.FingerprintAcquired;
 import android.hardware.biometrics.common.ICancellationSignal;
@@ -29,10 +30,15 @@
 import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
 import android.hardware.fingerprint.ISidefpsController;
 import android.hardware.fingerprint.IUdfpsOverlayController;
+import android.os.Build;
+import android.os.Handler;
 import android.os.IBinder;
 import android.os.RemoteException;
+import android.os.UserHandle;
+import android.provider.Settings;
 import android.util.Slog;
 
+import com.android.internal.R;
 import com.android.server.biometrics.log.BiometricContext;
 import com.android.server.biometrics.log.BiometricLogger;
 import com.android.server.biometrics.log.CallbackWithProbe;
@@ -46,17 +52,18 @@
 import com.android.server.biometrics.sensors.LockoutConsumer;
 import com.android.server.biometrics.sensors.LockoutTracker;
 import com.android.server.biometrics.sensors.SensorOverlays;
+import com.android.server.biometrics.sensors.fingerprint.PowerPressHandler;
 import com.android.server.biometrics.sensors.fingerprint.Udfps;
 
 import java.util.ArrayList;
 import java.util.function.Supplier;
 
 /**
- * Fingerprint-specific authentication client supporting the
- * {@link android.hardware.biometrics.fingerprint.IFingerprint} AIDL interface.
+ * Fingerprint-specific authentication client supporting the {@link
+ * android.hardware.biometrics.fingerprint.IFingerprint} AIDL interface.
  */
-class FingerprintAuthenticationClient extends AuthenticationClient<AidlSession> implements
-        Udfps, LockoutConsumer {
+class FingerprintAuthenticationClient extends AuthenticationClient<AidlSession>
+        implements Udfps, LockoutConsumer, PowerPressHandler {
     private static final String TAG = "FingerprintAuthenticationClient";
 
     @NonNull private final LockoutCache mLockoutCache;
@@ -64,33 +71,88 @@
     @NonNull private final FingerprintSensorPropertiesInternal mSensorProps;
     @NonNull private final CallbackWithProbe<Probe> mALSProbeCallback;
 
-    @Nullable private ICancellationSignal mCancellationSignal;
+    @Nullable
+    private ICancellationSignal mCancellationSignal;
     private boolean mIsPointerDown;
+    private final Handler mHandler;
 
-    FingerprintAuthenticationClient(@NonNull Context context,
+    private static final int MESSAGE_IGNORE_AUTH = 1;
+    private static final int MESSAGE_AUTH_SUCCESS = 2;
+    private long mWaitForAuthKeyguard;
+    private long mWaitForAuthBp;
+    private long mIgnoreAuthFor;
+
+    FingerprintAuthenticationClient(
+            @NonNull Context context,
             @NonNull Supplier<AidlSession> lazyDaemon,
-            @NonNull IBinder token, long requestId,
-            @NonNull ClientMonitorCallbackConverter listener, int targetUserId, long operationId,
-            boolean restricted, @NonNull String owner, int cookie, boolean requireConfirmation,
+            @NonNull IBinder token,
+            long requestId,
+            @NonNull ClientMonitorCallbackConverter listener,
+            int targetUserId,
+            long operationId,
+            boolean restricted,
+            @NonNull String owner,
+            int cookie,
+            boolean requireConfirmation,
             int sensorId,
-            @NonNull BiometricLogger biometricLogger, @NonNull BiometricContext biometricContext,
+            @NonNull BiometricLogger biometricLogger,
+            @NonNull BiometricContext biometricContext,
             boolean isStrongBiometric,
-            @Nullable TaskStackListener taskStackListener, @NonNull LockoutCache lockoutCache,
+            @Nullable TaskStackListener taskStackListener,
+            @NonNull LockoutCache lockoutCache,
             @Nullable IUdfpsOverlayController udfpsOverlayController,
             @Nullable ISidefpsController sidefpsController,
             boolean allowBackgroundAuthentication,
-            @NonNull FingerprintSensorPropertiesInternal sensorProps) {
-        super(context, lazyDaemon, token, listener, targetUserId, operationId, restricted, owner,
-                cookie, requireConfirmation, sensorId,
-                biometricLogger, biometricContext,
-                isStrongBiometric, taskStackListener,
-                lockoutCache, allowBackgroundAuthentication, true /* shouldVibrate */,
+            @NonNull FingerprintSensorPropertiesInternal sensorProps,
+            @NonNull Handler handler) {
+        super(
+                context,
+                lazyDaemon,
+                token,
+                listener,
+                targetUserId,
+                operationId,
+                restricted,
+                owner,
+                cookie,
+                requireConfirmation,
+                sensorId,
+                biometricLogger,
+                biometricContext,
+                isStrongBiometric,
+                taskStackListener,
+                lockoutCache,
+                allowBackgroundAuthentication,
+                true /* shouldVibrate */,
                 false /* isKeyguardBypassEnabled */);
         setRequestId(requestId);
         mLockoutCache = lockoutCache;
         mSensorOverlays = new SensorOverlays(udfpsOverlayController, sidefpsController);
         mSensorProps = sensorProps;
         mALSProbeCallback = getLogger().createALSCallback(false /* startWithClient */);
+        mHandler = handler;
+
+        mWaitForAuthKeyguard =
+                context.getResources()
+                        .getInteger(R.integer.config_sidefpsKeyguardPowerPressWindow);
+        mWaitForAuthBp =
+                context.getResources().getInteger(R.integer.config_sidefpsBpPowerPressWindow);
+        mIgnoreAuthFor =
+                context.getResources().getInteger(R.integer.config_sidefpsPostAuthDowntime);
+
+        if (mSensorProps.isAnySidefpsType()) {
+            if (Build.isDebuggable()) {
+                mWaitForAuthKeyguard = Settings.Secure.getIntForUser(context.getContentResolver(),
+                        Settings.Secure.FINGERPRINT_SIDE_FPS_KG_POWER_WINDOW,
+                        (int) mWaitForAuthKeyguard, UserHandle.USER_CURRENT);
+                mWaitForAuthBp = Settings.Secure.getIntForUser(context.getContentResolver(),
+                        Settings.Secure.FINGERPRINT_SIDE_FPS_BP_POWER_WINDOW, (int) mWaitForAuthBp,
+                        UserHandle.USER_CURRENT);
+                mIgnoreAuthFor = Settings.Secure.getIntForUser(context.getContentResolver(),
+                        Settings.Secure.FINGERPRINT_SIDE_FPS_AUTH_DOWNTIME, (int) mIgnoreAuthFor,
+                        UserHandle.USER_CURRENT);
+            }
+        }
     }
 
     @Override
@@ -108,8 +170,8 @@
     @NonNull
     @Override
     protected ClientMonitorCallback wrapCallbackForStart(@NonNull ClientMonitorCallback callback) {
-        return new ClientMonitorCompositeCallback(mALSProbeCallback,
-                getBiometricContextUnsubscriber(), callback);
+        return new ClientMonitorCompositeCallback(
+                mALSProbeCallback, getBiometricContextUnsubscriber(), callback);
     }
 
     @Override
@@ -126,16 +188,37 @@
     }
 
     @Override
-    public void onAuthenticated(BiometricAuthenticator.Identifier identifier,
-            boolean authenticated, ArrayList<Byte> token) {
-        super.onAuthenticated(identifier, authenticated, token);
+    public void onAuthenticated(
+            BiometricAuthenticator.Identifier identifier,
+            boolean authenticated,
+            ArrayList<Byte> token) {
 
-        if (authenticated) {
-            mState = STATE_STOPPED;
-            mSensorOverlays.hide(getSensorId());
-        } else {
-            mState = STATE_STARTED_PAUSED_ATTEMPTED;
+        long delay = 0;
+        if (authenticated && mSensorProps.isAnySidefpsType()) {
+            if (mHandler.hasMessages(MESSAGE_IGNORE_AUTH)) {
+                Slog.i(TAG, "(sideFPS) Ignoring auth due to recent power press");
+                onErrorInternal(BiometricConstants.BIOMETRIC_ERROR_POWER_PRESSED, 0, true);
+                return;
+            }
+            delay = isKeyguard() ? mWaitForAuthKeyguard : mWaitForAuthBp;
+            Slog.i(TAG, "(sideFPS) Auth succeeded, sideFps waiting for power until: " + delay);
         }
+
+        mHandler.postDelayed(
+                () -> {
+                    if (authenticated && mSensorProps.isAnySidefpsType()) {
+                        Slog.i(TAG, "(sideFPS): No power press detected, sending auth");
+                    }
+                    super.onAuthenticated(identifier, authenticated, token);
+                    if (authenticated) {
+                        mState = STATE_STOPPED;
+                        mSensorOverlays.hide(getSensorId());
+                    } else {
+                        mState = STATE_STARTED_PAUSED_ATTEMPTED;
+                    }
+                },
+                MESSAGE_AUTH_SUCCESS,
+                delay);
     }
 
     @Override
@@ -165,7 +248,8 @@
             mCancellationSignal = doAuthenticate();
         } catch (RemoteException e) {
             Slog.e(TAG, "Remote exception", e);
-            onError(BiometricFingerprintConstants.FINGERPRINT_ERROR_HW_UNAVAILABLE,
+            onError(
+                    BiometricFingerprintConstants.FINGERPRINT_ERROR_HW_UNAVAILABLE,
                     0 /* vendorCode */);
             mSensorOverlays.hide(getSensorId());
             mCallback.onClientFinished(this, false /* success */);
@@ -177,15 +261,18 @@
 
         if (session.hasContextMethods()) {
             final OperationContext opContext = getOperationContext();
-            final ICancellationSignal cancel =  session.getSession().authenticateWithContext(
-                    mOperationId, opContext);
-            getBiometricContext().subscribe(opContext, ctx -> {
-                try {
-                    session.getSession().onContextChanged(ctx);
-                } catch (RemoteException e) {
-                    Slog.e(TAG, "Unable to notify context changed", e);
-                }
-            });
+            final ICancellationSignal cancel =
+                    session.getSession().authenticateWithContext(mOperationId, opContext);
+            getBiometricContext()
+                    .subscribe(
+                            opContext,
+                            ctx -> {
+                                try {
+                                    session.getSession().onContextChanged(ctx);
+                                } catch (RemoteException e) {
+                                    Slog.e(TAG, "Unable to notify context changed", e);
+                                }
+                            });
             return cancel;
         } else {
             return session.getSession().authenticate(mOperationId);
@@ -202,7 +289,8 @@
                 mCancellationSignal.cancel();
             } catch (RemoteException e) {
                 Slog.e(TAG, "Remote exception", e);
-                onError(BiometricFingerprintConstants.FINGERPRINT_ERROR_HW_UNAVAILABLE,
+                onError(
+                        BiometricFingerprintConstants.FINGERPRINT_ERROR_HW_UNAVAILABLE,
                         0 /* vendorCode */);
                 mCallback.onClientFinished(this, false /* success */);
             }
@@ -284,8 +372,13 @@
         mLockoutCache.setLockoutModeForUser(getTargetUserId(), LockoutTracker.LOCKOUT_TIMED);
         // Lockout metrics are logged as an error code.
         final int error = BiometricFingerprintConstants.FINGERPRINT_ERROR_LOCKOUT;
-        getLogger().logOnError(getContext(), getOperationContext(),
-                error, 0 /* vendorCode */, getTargetUserId());
+        getLogger()
+                .logOnError(
+                        getContext(),
+                        getOperationContext(),
+                        error,
+                        0 /* vendorCode */,
+                        getTargetUserId());
 
         try {
             getListener().onError(getSensorId(), getCookie(), error, 0 /* vendorCode */);
@@ -303,8 +396,13 @@
         mLockoutCache.setLockoutModeForUser(getTargetUserId(), LockoutTracker.LOCKOUT_PERMANENT);
         // Lockout metrics are logged as an error code.
         final int error = BiometricFingerprintConstants.FINGERPRINT_ERROR_LOCKOUT_PERMANENT;
-        getLogger().logOnError(getContext(), getOperationContext(),
-                error, 0 /* vendorCode */, getTargetUserId());
+        getLogger()
+                .logOnError(
+                        getContext(),
+                        getOperationContext(),
+                        error,
+                        0 /* vendorCode */,
+                        getTargetUserId());
 
         try {
             getListener().onError(getSensorId(), getCookie(), error, 0 /* vendorCode */);
@@ -315,4 +413,19 @@
         mSensorOverlays.hide(getSensorId());
         mCallback.onClientFinished(this, false /* success */);
     }
+
+    @Override
+    public void onPowerPressed() {
+        if (mSensorProps.isAnySidefpsType()) {
+            Slog.i(TAG, "(sideFPS): onPowerPressed");
+            if (mHandler.hasMessages(MESSAGE_AUTH_SUCCESS)) {
+                Slog.i(TAG, "(sideFPS): Ignoring auth in queue");
+                mHandler.removeMessages(MESSAGE_AUTH_SUCCESS);
+                // Do not call onError() as that will send an additional callback to coex.
+                onErrorInternal(BiometricConstants.BIOMETRIC_ERROR_POWER_PRESSED, 0, true);
+            }
+            mHandler.removeMessages(MESSAGE_IGNORE_AUTH);
+            mHandler.postDelayed(() -> {}, MESSAGE_IGNORE_AUTH, mIgnoreAuthFor);
+        }
+    }
 }
diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java
index f23659c..f4f0a19 100644
--- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java
+++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java
@@ -22,6 +22,7 @@
 import android.hardware.biometrics.BiometricAuthenticator;
 import android.hardware.biometrics.BiometricFingerprintConstants;
 import android.hardware.biometrics.BiometricFingerprintConstants.FingerprintAcquired;
+import android.hardware.biometrics.BiometricStateListener;
 import android.hardware.biometrics.common.ICancellationSignal;
 import android.hardware.biometrics.common.OperationContext;
 import android.hardware.biometrics.fingerprint.PointerContext;
@@ -139,7 +140,7 @@
                 controller.onEnrollmentHelp(getSensorId());
             }
         });
-
+        mCallback.onBiometricAction(BiometricStateListener.ACTION_SENSOR_TOUCH);
         super.onAcquired(acquiredInfo, vendorCode);
     }
 
diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java
index f16af78..6f6c09b9 100644
--- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java
+++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java
@@ -67,6 +67,7 @@
 import com.android.server.biometrics.sensors.PerformanceTracker;
 import com.android.server.biometrics.sensors.fingerprint.FingerprintUtils;
 import com.android.server.biometrics.sensors.fingerprint.GestureAvailabilityDispatcher;
+import com.android.server.biometrics.sensors.fingerprint.PowerPressHandler;
 import com.android.server.biometrics.sensors.fingerprint.ServiceProvider;
 import com.android.server.biometrics.sensors.fingerprint.Udfps;
 
@@ -388,6 +389,11 @@
                 }
 
                 @Override
+                public void onBiometricAction(int action) {
+                    mBiometricStateCallback.onBiometricAction(action);
+                }
+
+                @Override
                 public void onClientFinished(@NonNull BaseClientMonitor clientMonitor,
                         boolean success) {
                     mBiometricStateCallback.onClientFinished(clientMonitor, success);
@@ -441,7 +447,7 @@
                     mBiometricContext, isStrongBiometric,
                     mTaskStackListener, mSensors.get(sensorId).getLockoutCache(),
                     mUdfpsOverlayController, mSidefpsController, allowBackgroundAuthentication,
-                    mSensors.get(sensorId).getSensorProperties());
+                    mSensors.get(sensorId).getSensorProperties(), mHandler);
             scheduleForSensor(sensorId, client, mBiometricStateCallback);
         });
     }
@@ -614,6 +620,21 @@
     }
 
     @Override
+    public void onPowerPressed() {
+        for (int i = 0; i < mSensors.size(); i++) {
+            final Sensor sensor = mSensors.valueAt(i);
+            BaseClientMonitor client = sensor.getScheduler().getCurrentClient();
+            if (client == null) {
+                return;
+            }
+            if (!(client instanceof PowerPressHandler)) {
+                continue;
+            }
+            ((PowerPressHandler) client).onPowerPressed();
+        }
+    }
+
+    @Override
     public void setSidefpsController(@NonNull ISidefpsController controller) {
         mSidefpsController = controller;
     }
diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21.java
index 2a3f34a..c1a8638 100644
--- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21.java
+++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/Fingerprint21.java
@@ -603,6 +603,11 @@
                 }
 
                 @Override
+                public void onBiometricAction(int action) {
+                    mBiometricStateCallback.onBiometricAction(action);
+                }
+
+                @Override
                 public void onClientFinished(@NonNull BaseClientMonitor clientMonitor,
                         boolean success) {
                     mBiometricStateCallback.onClientFinished(clientMonitor, success);
@@ -821,6 +826,11 @@
     }
 
     @Override
+    public void onPowerPressed() {
+        Slog.e(TAG, "onPowerPressed not supported for HIDL clients");
+    }
+
+    @Override
     public void setUdfpsOverlayController(@NonNull IUdfpsOverlayController controller) {
         mUdfpsOverlayController = controller;
     }
diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintEnrollClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintEnrollClient.java
index 1d478e5..2a59c8c 100644
--- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintEnrollClient.java
+++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/hidl/FingerprintEnrollClient.java
@@ -21,6 +21,7 @@
 import android.content.Context;
 import android.hardware.biometrics.BiometricAuthenticator;
 import android.hardware.biometrics.BiometricFingerprintConstants;
+import android.hardware.biometrics.BiometricStateListener;
 import android.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint;
 import android.hardware.fingerprint.Fingerprint;
 import android.hardware.fingerprint.FingerprintManager;
@@ -151,6 +152,8 @@
                 controller.onEnrollmentHelp(getSensorId());
             }
         });
+
+        mCallback.onBiometricAction(BiometricStateListener.ACTION_SENSOR_TOUCH);
     }
 
     @Override
diff --git a/services/core/java/com/android/server/clipboard/ClipboardService.java b/services/core/java/com/android/server/clipboard/ClipboardService.java
index 61350bb..6f9a176 100644
--- a/services/core/java/com/android/server/clipboard/ClipboardService.java
+++ b/services/core/java/com/android/server/clipboard/ClipboardService.java
@@ -43,6 +43,7 @@
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.UserInfo;
+import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.Binder;
 import android.os.Bundle;
@@ -63,6 +64,7 @@
 import android.provider.Settings;
 import android.text.TextUtils;
 import android.util.ArrayMap;
+import android.util.SafetyProtectionUtils;
 import android.util.Slog;
 import android.util.SparseArray;
 import android.util.SparseBooleanArray;
@@ -215,9 +217,12 @@
     private class ListenerInfo {
         final int mUid;
         final String mPackageName;
-        ListenerInfo(int uid, String packageName) {
+        final String mAttributionTag;
+
+        ListenerInfo(int uid, String packageName, String attributionTag) {
             mUid = uid;
             mPackageName = packageName;
+            mAttributionTag = attributionTag;
         }
     }
 
@@ -355,27 +360,43 @@
         }
 
         @Override
-        public void setPrimaryClip(ClipData clip, String callingPackage, @UserIdInt int userId) {
-            checkAndSetPrimaryClip(clip, callingPackage, userId, callingPackage);
+        public void setPrimaryClip(
+                ClipData clip,
+                String callingPackage,
+                String attributionTag,
+                @UserIdInt int userId) {
+            checkAndSetPrimaryClip(clip, callingPackage, attributionTag, userId, callingPackage);
         }
 
         @Override
         public void setPrimaryClipAsPackage(
-                ClipData clip, String callingPackage, @UserIdInt int userId, String sourcePackage) {
+                ClipData clip,
+                String callingPackage,
+                String attributionTag,
+                @UserIdInt int userId,
+                String sourcePackage) {
             getContext().enforceCallingOrSelfPermission(Manifest.permission.SET_CLIP_SOURCE,
                     "Requires SET_CLIP_SOURCE permission");
-            checkAndSetPrimaryClip(clip, callingPackage, userId, sourcePackage);
+            checkAndSetPrimaryClip(clip, callingPackage, attributionTag, userId, sourcePackage);
         }
 
         private void checkAndSetPrimaryClip(
-                ClipData clip, String callingPackage, @UserIdInt int userId, String sourcePackage) {
+                ClipData clip,
+                String callingPackage,
+                String attributionTag,
+                @UserIdInt int userId,
+                String sourcePackage) {
             if (clip == null || clip.getItemCount() <= 0) {
                 throw new IllegalArgumentException("No items");
             }
             final int intendingUid = getIntendingUid(callingPackage, userId);
             final int intendingUserId = UserHandle.getUserId(intendingUid);
-            if (!clipboardAccessAllowed(AppOpsManager.OP_WRITE_CLIPBOARD, callingPackage,
-                    intendingUid, intendingUserId)) {
+            if (!clipboardAccessAllowed(
+                    AppOpsManager.OP_WRITE_CLIPBOARD,
+                    callingPackage,
+                    attributionTag,
+                    intendingUid,
+                    intendingUserId)) {
                 return;
             }
             checkDataOwner(clip, intendingUid);
@@ -392,8 +413,13 @@
                         PROPERTY_AUTO_CLEAR_ENABLED, true)) {
                     mClipboardClearHandler.removeEqualMessages(ClipboardClearHandler.MSG_CLEAR,
                             userId);
-                    Message clearMessage = Message.obtain(mClipboardClearHandler,
-                            ClipboardClearHandler.MSG_CLEAR, userId, intendingUid, userId);
+                    Message clearMessage =
+                            Message.obtain(
+                                    mClipboardClearHandler,
+                                    ClipboardClearHandler.MSG_CLEAR,
+                                    userId,
+                                    intendingUid,
+                                    userId);
                     mClipboardClearHandler.sendMessageDelayed(clearMessage,
                             getTimeoutForAutoClear());
                 }
@@ -409,11 +435,16 @@
         }
 
         @Override
-        public void clearPrimaryClip(String callingPackage, @UserIdInt int userId) {
+        public void clearPrimaryClip(
+                String callingPackage, String attributionTag, @UserIdInt int userId) {
             final int intendingUid = getIntendingUid(callingPackage, userId);
             final int intendingUserId = UserHandle.getUserId(intendingUid);
-            if (!clipboardAccessAllowed(AppOpsManager.OP_WRITE_CLIPBOARD, callingPackage,
-                    intendingUid, intendingUserId)) {
+            if (!clipboardAccessAllowed(
+                    AppOpsManager.OP_WRITE_CLIPBOARD,
+                    callingPackage,
+                    attributionTag,
+                    intendingUid,
+                    intendingUserId)) {
                 return;
             }
             synchronized (mLock) {
@@ -424,11 +455,15 @@
         }
 
         @Override
-        public ClipData getPrimaryClip(String pkg, @UserIdInt int userId) {
+        public ClipData getPrimaryClip(String pkg, String attributionTag, @UserIdInt int userId) {
             final int intendingUid = getIntendingUid(pkg, userId);
             final int intendingUserId = UserHandle.getUserId(intendingUid);
-            if (!clipboardAccessAllowed(AppOpsManager.OP_READ_CLIPBOARD, pkg,
-                    intendingUid, intendingUserId)
+            if (!clipboardAccessAllowed(
+                            AppOpsManager.OP_READ_CLIPBOARD,
+                            pkg,
+                            attributionTag,
+                            intendingUid,
+                            intendingUserId)
                     || isDeviceLocked(intendingUserId)) {
                 return null;
             }
@@ -453,12 +488,17 @@
         }
 
         @Override
-        public ClipDescription getPrimaryClipDescription(String callingPackage,
-                @UserIdInt int userId) {
+        public ClipDescription getPrimaryClipDescription(
+                String callingPackage, String attributionTag, @UserIdInt int userId) {
             final int intendingUid = getIntendingUid(callingPackage, userId);
             final int intendingUserId = UserHandle.getUserId(intendingUid);
-            if (!clipboardAccessAllowed(AppOpsManager.OP_READ_CLIPBOARD, callingPackage,
-                    intendingUid, intendingUserId, false)
+            if (!clipboardAccessAllowed(
+                            AppOpsManager.OP_READ_CLIPBOARD,
+                            callingPackage,
+                            attributionTag,
+                            intendingUid,
+                            intendingUserId,
+                            false)
                     || isDeviceLocked(intendingUserId)) {
                 return null;
             }
@@ -470,11 +510,17 @@
         }
 
         @Override
-        public boolean hasPrimaryClip(String callingPackage, @UserIdInt int userId) {
+        public boolean hasPrimaryClip(
+                String callingPackage, String attributionTag, @UserIdInt int userId) {
             final int intendingUid = getIntendingUid(callingPackage, userId);
             final int intendingUserId = UserHandle.getUserId(intendingUid);
-            if (!clipboardAccessAllowed(AppOpsManager.OP_READ_CLIPBOARD, callingPackage,
-                    intendingUid, intendingUserId, false)
+            if (!clipboardAccessAllowed(
+                            AppOpsManager.OP_READ_CLIPBOARD,
+                            callingPackage,
+                            attributionTag,
+                            intendingUid,
+                            intendingUserId,
+                            false)
                     || isDeviceLocked(intendingUserId)) {
                 return false;
             }
@@ -484,19 +530,28 @@
         }
 
         @Override
-        public void addPrimaryClipChangedListener(IOnPrimaryClipChangedListener listener,
-                String callingPackage, @UserIdInt int userId) {
+        public void addPrimaryClipChangedListener(
+                IOnPrimaryClipChangedListener listener,
+                String callingPackage,
+                String attributionTag,
+                @UserIdInt int userId) {
             final int intendingUid = getIntendingUid(callingPackage, userId);
             final int intendingUserId = UserHandle.getUserId(intendingUid);
             synchronized (mLock) {
-                getClipboardLocked(intendingUserId).primaryClipListeners.register(listener,
-                        new ListenerInfo(intendingUid, callingPackage));
+                getClipboardLocked(intendingUserId)
+                        .primaryClipListeners
+                        .register(
+                                listener,
+                                new ListenerInfo(intendingUid, callingPackage, attributionTag));
             }
         }
 
         @Override
-        public void removePrimaryClipChangedListener(IOnPrimaryClipChangedListener listener,
-                String callingPackage, @UserIdInt int userId) {
+        public void removePrimaryClipChangedListener(
+                IOnPrimaryClipChangedListener listener,
+                String callingPackage,
+                String attributionTag,
+                @UserIdInt int userId) {
             final int intendingUserId = getIntendingUserId(callingPackage, userId);
             synchronized (mLock) {
                 getClipboardLocked(intendingUserId).primaryClipListeners.unregister(listener);
@@ -504,11 +559,16 @@
         }
 
         @Override
-        public boolean hasClipboardText(String callingPackage, int userId) {
+        public boolean hasClipboardText(String callingPackage, String attributionTag, int userId) {
             final int intendingUid = getIntendingUid(callingPackage, userId);
             final int intendingUserId = UserHandle.getUserId(intendingUid);
-            if (!clipboardAccessAllowed(AppOpsManager.OP_READ_CLIPBOARD, callingPackage,
-                    intendingUid, intendingUserId, false)
+            if (!clipboardAccessAllowed(
+                            AppOpsManager.OP_READ_CLIPBOARD,
+                            callingPackage,
+                            attributionTag,
+                            intendingUid,
+                            intendingUserId,
+                            false)
                     || isDeviceLocked(intendingUserId)) {
                 return false;
             }
@@ -523,13 +583,19 @@
         }
 
         @Override
-        public String getPrimaryClipSource(String callingPackage, int userId) {
+        public String getPrimaryClipSource(
+                String callingPackage, String attributionTag, int userId) {
             getContext().enforceCallingOrSelfPermission(Manifest.permission.SET_CLIP_SOURCE,
                     "Requires SET_CLIP_SOURCE permission");
             final int intendingUid = getIntendingUid(callingPackage, userId);
             final int intendingUserId = UserHandle.getUserId(intendingUid);
-            if (!clipboardAccessAllowed(AppOpsManager.OP_READ_CLIPBOARD, callingPackage,
-                    intendingUid, intendingUserId, false)
+            if (!clipboardAccessAllowed(
+                            AppOpsManager.OP_READ_CLIPBOARD,
+                            callingPackage,
+                            attributionTag,
+                            intendingUid,
+                            intendingUserId,
+                            false)
                     || isDeviceLocked(intendingUserId)) {
                 return null;
             }
@@ -718,8 +784,12 @@
                     ListenerInfo li = (ListenerInfo)
                             clipboard.primaryClipListeners.getBroadcastCookie(i);
 
-                    if (clipboardAccessAllowed(AppOpsManager.OP_READ_CLIPBOARD, li.mPackageName,
-                            li.mUid, UserHandle.getUserId(li.mUid))) {
+                    if (clipboardAccessAllowed(
+                            AppOpsManager.OP_READ_CLIPBOARD,
+                            li.mPackageName,
+                            li.mAttributionTag,
+                            li.mUid,
+                            UserHandle.getUserId(li.mUid))) {
                         clipboard.primaryClipListeners.getBroadcastItem(i)
                                 .dispatchPrimaryClipChanged();
                     }
@@ -965,13 +1035,18 @@
         }
     }
 
-    private boolean clipboardAccessAllowed(int op, String callingPackage, int uid,
-            @UserIdInt int userId) {
-        return clipboardAccessAllowed(op, callingPackage, uid, userId, true);
+    private boolean clipboardAccessAllowed(
+            int op, String callingPackage, String attributionTag, int uid, @UserIdInt int userId) {
+        return clipboardAccessAllowed(op, callingPackage, attributionTag, uid, userId, true);
     }
 
-    private boolean clipboardAccessAllowed(int op, String callingPackage, int uid,
-            @UserIdInt int userId, boolean shouldNoteOp) {
+    private boolean clipboardAccessAllowed(
+            int op,
+            String callingPackage,
+            String attributionTag,
+            int uid,
+            @UserIdInt int userId,
+            boolean shouldNoteOp) {
 
         boolean allowed;
 
@@ -1040,7 +1115,7 @@
         // Finally, check the app op.
         int appOpsResult;
         if (shouldNoteOp) {
-            appOpsResult = mAppOps.noteOp(op, uid, callingPackage);
+            appOpsResult = mAppOps.noteOp(op, uid, callingPackage, attributionTag, null);
         } else {
             appOpsResult = mAppOps.checkOp(op, uid, callingPackage);
         }
@@ -1108,9 +1183,19 @@
                 String message =
                         getContext().getString(R.string.pasted_from_clipboard, callingAppLabel);
                 Slog.i(TAG, message);
-                Toast.makeText(
-                        getContext(), UiThread.get().getLooper(), message, Toast.LENGTH_SHORT)
-                        .show();
+                Toast toastToShow;
+                if (SafetyProtectionUtils.shouldShowSafetyProtectionResources(getContext())) {
+                    Drawable safetyProtectionIcon = getContext()
+                            .getDrawable(R.drawable.ic_safety_protection);
+                    toastToShow = Toast.makeCustomToastWithIcon(getContext(),
+                            UiThread.get().getLooper(), message,
+                            Toast.LENGTH_SHORT, safetyProtectionIcon);
+                } else {
+                    toastToShow = Toast.makeText(
+                            getContext(), UiThread.get().getLooper(), message,
+                            Toast.LENGTH_SHORT);
+                }
+                toastToShow.show();
             } catch (PackageManager.NameNotFoundException e) {
                 // do nothing
             }
diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java
index 77d3392..af15735 100644
--- a/services/core/java/com/android/server/connectivity/Vpn.java
+++ b/services/core/java/com/android/server/connectivity/Vpn.java
@@ -86,6 +86,8 @@
 import android.net.ipsec.ike.ChildSessionParams;
 import android.net.ipsec.ike.IkeSession;
 import android.net.ipsec.ike.IkeSessionCallback;
+import android.net.ipsec.ike.IkeSessionConfiguration;
+import android.net.ipsec.ike.IkeSessionConnectionInfo;
 import android.net.ipsec.ike.IkeSessionParams;
 import android.net.ipsec.ike.IkeTunnelConnectionParams;
 import android.net.ipsec.ike.exceptions.IkeNetworkLostException;
@@ -168,9 +170,10 @@
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Executor;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
 import java.util.concurrent.RejectedExecutionException;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 
 /**
@@ -190,11 +193,19 @@
     private static final long VPN_LAUNCH_IDLE_ALLOWLIST_DURATION_MS = 60 * 1000;
 
     // Length of time (in milliseconds) that an app registered for VpnManager events is placed on
-    // the device idle allowlist each time the a VpnManager event is fired.
+    // the device idle allowlist each time the VpnManager event is fired.
     private static final long VPN_MANAGER_EVENT_ALLOWLIST_DURATION_MS = 30 * 1000;
 
     private static final String LOCKDOWN_ALLOWLIST_SETTING_NAME =
             Settings.Secure.ALWAYS_ON_VPN_LOCKDOWN_WHITELIST;
+
+    /**
+     * The retries for consecutive failures.
+     *
+     * <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};
     /**
      * Largest profile size allowable for Platform VPNs.
      *
@@ -473,6 +484,43 @@
                         "Cannot set tunnel's fd as blocking=" + blocking, e);
             }
         }
+
+        /**
+         * Retrieves the next retry delay
+         *
+         * <p>If retries have exceeded the IKEV2_VPN_RETRY_DELAYS_SEC, 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];
+            } else {
+                return IKEV2_VPN_RETRY_DELAYS_SEC[retryCount];
+            }
+        }
+
+        /** Get single threaded executor for IKEv2 VPN */
+        public ScheduledThreadPoolExecutor newScheduledThreadPoolExecutor() {
+            return new ScheduledThreadPoolExecutor(1);
+        }
+
+        /** Get a NetworkAgent instance */
+        public NetworkAgent newNetworkAgent(
+                @NonNull Context context,
+                @NonNull Looper looper,
+                @NonNull String logTag,
+                @NonNull NetworkCapabilities nc,
+                @NonNull LinkProperties lp,
+                @NonNull NetworkScore score,
+                @NonNull NetworkAgentConfig config,
+                @Nullable NetworkProvider provider) {
+            return new NetworkAgent(context, looper, logTag, nc, lp, score, config, provider) {
+                @Override
+                public void onNetworkUnwanted() {
+                    // We are user controlled, not driven by NetworkRequest.
+                }
+            };
+        }
     }
 
     public Vpn(Looper looper, Context context, INetworkManagementService netService, INetd netd,
@@ -1449,15 +1497,10 @@
                 ? Arrays.asList(mConfig.underlyingNetworks) : null);
 
         mNetworkCapabilities = capsBuilder.build();
-        mNetworkAgent = new NetworkAgent(mContext, mLooper, NETWORKTYPE /* logtag */,
+        mNetworkAgent = mDeps.newNetworkAgent(mContext, mLooper, NETWORKTYPE /* logtag */,
                 mNetworkCapabilities, lp,
                 new NetworkScore.Builder().setLegacyInt(VPN_DEFAULT_SCORE).build(),
-                networkAgentConfig, mNetworkProvider) {
-            @Override
-            public void onNetworkUnwanted() {
-                // We are user controlled, not driven by NetworkRequest.
-            }
-        };
+                networkAgentConfig, mNetworkProvider);
         final long token = Binder.clearCallingIdentity();
         try {
             mNetworkAgent.register();
@@ -2605,13 +2648,23 @@
 
         void onDefaultNetworkLinkPropertiesChanged(@NonNull LinkProperties lp);
 
-        void onChildOpened(
-                @NonNull Network network, @NonNull ChildSessionConfiguration childConfig);
+        void onDefaultNetworkLost(@NonNull Network network);
 
-        void onChildTransformCreated(
-                @NonNull Network network, @NonNull IpSecTransform transform, int direction);
+        void onIkeOpened(int token, @NonNull IkeSessionConfiguration ikeConfiguration);
 
-        void onSessionLost(@NonNull Network network, @Nullable Exception exception);
+        void onIkeConnectionInfoChanged(
+                int token, @NonNull IkeSessionConnectionInfo ikeConnectionInfo);
+
+        void onChildOpened(int token, @NonNull ChildSessionConfiguration childConfig);
+
+        void onChildTransformCreated(int token, @NonNull IpSecTransform transform, int direction);
+
+        void onChildMigrated(
+                int token,
+                @NonNull IpSecTransform inTransform,
+                @NonNull IpSecTransform outTransform);
+
+        void onSessionLost(int token, @Nullable Exception exception);
     }
 
     /**
@@ -2642,6 +2695,10 @@
     class IkeV2VpnRunner extends VpnRunner implements IkeV2VpnRunnerCallback {
         @NonNull private static final String TAG = "IkeV2VpnRunner";
 
+        // 5 seconds grace period before tearing down the IKE Session in case new default network
+        // will come up
+        private static final long NETWORK_LOST_TIMEOUT_MS = 5000L;
+
         @NonNull private final IpSecManager mIpSecManager;
         @NonNull private final Ikev2VpnProfile mProfile;
         @NonNull private final ConnectivityManager.NetworkCallback mNetworkCallback;
@@ -2653,24 +2710,61 @@
          * of the mutable Ikev2VpnRunner fields. The Ikev2VpnRunner is built mostly lock-free by
          * virtue of everything being serialized on this executor.
          */
-        @NonNull private final ExecutorService mExecutor = Executors.newSingleThreadExecutor();
+        @NonNull private final ScheduledThreadPoolExecutor mExecutor;
+
+        @Nullable private ScheduledFuture<?> mScheduledHandleNetworkLostFuture;
+        @Nullable private ScheduledFuture<?> mScheduledHandleRetryIkeSessionFuture;
 
         /** Signal to ensure shutdown is honored even if a new Network is connected. */
         private boolean mIsRunning = true;
 
+        /**
+         * The token used by the primary/current/active IKE session.
+         *
+         * <p>This token MUST be updated when the VPN switches to use a new IKE session.
+         */
+        private int mCurrentToken = -1;
+
         @Nullable private IpSecTunnelInterface mTunnelIface;
-        @Nullable private IkeSession mSession;
         @Nullable private Network mActiveNetwork;
         @Nullable private NetworkCapabilities mUnderlyingNetworkCapabilities;
         @Nullable private LinkProperties mUnderlyingLinkProperties;
         private final String mSessionKey;
 
-        IkeV2VpnRunner(@NonNull Ikev2VpnProfile profile) {
+        @Nullable private IkeSessionWrapper mSession;
+        @Nullable private IkeSessionConnectionInfo mIkeConnectionInfo;
+
+        // mMobikeEnabled can only be updated after IKE AUTH is finished.
+        private boolean mMobikeEnabled = false;
+
+        /**
+         * The number of attempts since the last successful connection.
+         *
+         * <p>This variable controls the retry delay, and is reset when a new IKE session is
+         * opened or when there is a new default network.
+         */
+        private int mRetryCount = 0;
+
+        IkeV2VpnRunner(
+                @NonNull Ikev2VpnProfile profile, @NonNull ScheduledThreadPoolExecutor executor) {
             super(TAG);
             mProfile = profile;
+            mExecutor = executor;
             mIpSecManager = (IpSecManager) mContext.getSystemService(Context.IPSEC_SERVICE);
             mNetworkCallback = new VpnIkev2Utils.Ikev2VpnNetworkCallback(TAG, this, mExecutor);
             mSessionKey = UUID.randomUUID().toString();
+
+            // Set the policy so that cancelled tasks will be removed from the work queue
+            mExecutor.setRemoveOnCancelPolicy(true);
+
+            // Set the policy so that all delayed tasks will not be executed
+            mExecutor.setExecuteExistingDelayedTasksAfterShutdownPolicy(false);
+
+            // To avoid hitting RejectedExecutionException upon shutdown of the mExecutor */
+            mExecutor.setRejectedExecutionHandler(
+                    (r, exe) -> {
+                        Log.d(TAG, "Runnable " + r + " rejected by the mExecutor");
+                    });
         }
 
         @Override
@@ -2709,22 +2803,64 @@
             return Objects.equals(mActiveNetwork, network) && mIsRunning;
         }
 
+        private boolean isActiveToken(int token) {
+            return (mCurrentToken == token) && mIsRunning;
+        }
+
+        /**
+         * Called when an IKE session has been opened
+         *
+         * <p>This method is only ever called once per IkeSession, and MUST run on the mExecutor
+         * thread in order to ensure consistency of the Ikev2VpnRunner fields.
+         */
+        public void onIkeOpened(int token, @NonNull IkeSessionConfiguration ikeConfiguration) {
+            if (!isActiveToken(token)) {
+                Log.d(TAG, "onIkeOpened called for obsolete token " + token);
+                return;
+            }
+
+            mMobikeEnabled =
+                    ikeConfiguration.isIkeExtensionEnabled(
+                            IkeSessionConfiguration.EXTENSION_TYPE_MOBIKE);
+            onIkeConnectionInfoChanged(token, ikeConfiguration.getIkeSessionConnectionInfo());
+            mRetryCount = 0;
+        }
+
+        /**
+         * Called when an IKE session's {@link IkeSessionConnectionInfo} is available or updated
+         *
+         * <p>This callback is usually fired when an IKE session has been opened or migrated.
+         *
+         * <p>This method is called multiple times over the lifetime of an IkeSession, and MUST run
+         * on the mExecutor thread in order to ensure consistency of the Ikev2VpnRunner fields.
+         */
+        public void onIkeConnectionInfoChanged(
+                int token, @NonNull IkeSessionConnectionInfo ikeConnectionInfo) {
+            if (!isActiveToken(token)) {
+                Log.d(TAG, "onIkeConnectionInfoChanged called for obsolete token " + token);
+                return;
+            }
+
+            // The update on VPN and the IPsec tunnel will be done when migration is fully complete
+            // in onChildMigrated
+            mIkeConnectionInfo = ikeConnectionInfo;
+        }
+
         /**
          * Called when an IKE Child session has been opened, signalling completion of the startup.
          *
          * <p>This method is only ever called once per IkeSession, and MUST run on the mExecutor
          * thread in order to ensure consistency of the Ikev2VpnRunner fields.
          */
-        public void onChildOpened(
-                @NonNull Network network, @NonNull ChildSessionConfiguration childConfig) {
-            if (!isActiveNetwork(network)) {
-                Log.d(TAG, "onOpened called for obsolete network " + network);
+        public void onChildOpened(int token, @NonNull ChildSessionConfiguration childConfig) {
+            if (!isActiveToken(token)) {
+                Log.d(TAG, "onChildOpened called for obsolete token " + token);
 
                 // Do nothing; this signals that either: (1) a new/better Network was found,
-                // and the Ikev2VpnRunner has switched to it in onDefaultNetworkChanged, or (2) this
-                // IKE session was already shut down (exited, or an error was encountered somewhere
-                // else). In both cases, all resources and sessions are torn down via
-                // resetIkeState().
+                // and the Ikev2VpnRunner has switched to it by restarting a new IKE session in
+                // onDefaultNetworkChanged, or (2) this IKE session was already shut down (exited,
+                // or an error was encountered somewhere else). In both cases, all resources and
+                // sessions are torn down via resetIkeState().
                 return;
             }
 
@@ -2743,6 +2879,11 @@
                     dnsAddrStrings.add(addr.getHostAddress());
                 }
 
+                // The actual network of this IKE session has been set up with is
+                // mIkeConnectionInfo.getNetwork() instead of mActiveNetwork because
+                // mActiveNetwork might have been updated after the setup was triggered.
+                final Network network = mIkeConnectionInfo.getNetwork();
+
                 final NetworkAgent networkAgent;
                 final LinkProperties lp;
 
@@ -2762,7 +2903,6 @@
                     mConfig.dnsServers.addAll(dnsAddrStrings);
 
                     mConfig.underlyingNetworks = new Network[] {network};
-
                     mConfig.disallowedApplications = getAppExclusionList(mPackage);
 
                     networkAgent = mNetworkAgent;
@@ -2778,6 +2918,10 @@
                     } else {
                         // Underlying networks also set in agentConnect()
                         networkAgent.setUnderlyingNetworks(Collections.singletonList(network));
+                        mNetworkCapabilities =
+                                new NetworkCapabilities.Builder(mNetworkCapabilities)
+                                        .setUnderlyingNetworks(Collections.singletonList(network))
+                                        .build();
                     }
 
                     lp = makeLinkProperties(); // Accesses VPN instance fields; must be locked
@@ -2785,8 +2929,8 @@
 
                 networkAgent.sendLinkProperties(lp);
             } catch (Exception e) {
-                Log.d(TAG, "Error in ChildOpened for network " + network, e);
-                onSessionLost(network, e);
+                Log.d(TAG, "Error in ChildOpened for token " + token, e);
+                onSessionLost(token, e);
             }
         }
 
@@ -2794,57 +2938,150 @@
          * Called when an IPsec transform has been created, and should be applied.
          *
          * <p>This method is called multiple times over the lifetime of an IkeSession (or default
-         * network), and is MUST always be called on the mExecutor thread in order to ensure
+         * network), and MUST always be called on the mExecutor thread in order to ensure
          * consistency of the Ikev2VpnRunner fields.
          */
         public void onChildTransformCreated(
-                @NonNull Network network, @NonNull IpSecTransform transform, int direction) {
-            if (!isActiveNetwork(network)) {
-                Log.d(TAG, "ChildTransformCreated for obsolete network " + network);
+                int token, @NonNull IpSecTransform transform, int direction) {
+            if (!isActiveToken(token)) {
+                Log.d(TAG, "ChildTransformCreated for obsolete token " + token);
 
                 // Do nothing; this signals that either: (1) a new/better Network was found,
-                // and the Ikev2VpnRunner has switched to it in onDefaultNetworkChanged, or (2) this
-                // IKE session was already shut down (exited, or an error was encountered somewhere
-                // else). In both cases, all resources and sessions are torn down via
-                // resetIkeState().
+                // and the Ikev2VpnRunner has switched to it by restarting a new IKE session in
+                // onDefaultNetworkChanged, or (2) this IKE session was already shut down (exited,
+                // or an error was encountered somewhere else). In both cases, all resources and
+                // sessions are torn down via resetIkeState().
                 return;
             }
 
             try {
+                mTunnelIface.setUnderlyingNetwork(mIkeConnectionInfo.getNetwork());
+
                 // Transforms do not need to be persisted; the IkeSession will keep
                 // them alive for us
                 mIpSecManager.applyTunnelModeTransform(mTunnelIface, direction, transform);
             } catch (IOException e) {
-                Log.d(TAG, "Transform application failed for network " + network, e);
-                onSessionLost(network, e);
+                Log.d(TAG, "Transform application failed for token " + token, e);
+                onSessionLost(token, e);
+            }
+        }
+
+        /**
+         * Called when an IPsec transform has been created, and should be re-applied.
+         *
+         * <p>This method is called multiple times over the lifetime of an IkeSession (or default
+         * network), and MUST always be called on the mExecutor thread in order to ensure
+         * consistency of the Ikev2VpnRunner fields.
+         */
+        public void onChildMigrated(
+                int token,
+                @NonNull IpSecTransform inTransform,
+                @NonNull IpSecTransform outTransform) {
+            if (!isActiveToken(token)) {
+                Log.d(TAG, "onChildMigrated for obsolete token " + token);
+                return;
+            }
+
+            // The actual network of this IKE session has migrated to is
+            // mIkeConnectionInfo.getNetwork() instead of mActiveNetwork because mActiveNetwork
+            // might have been updated after the migration was triggered.
+            final Network network = mIkeConnectionInfo.getNetwork();
+
+            try {
+                synchronized (Vpn.this) {
+                    mConfig.underlyingNetworks = new Network[] {network};
+                    mNetworkCapabilities =
+                            new NetworkCapabilities.Builder(mNetworkCapabilities)
+                                    .setUnderlyingNetworks(Collections.singletonList(network))
+                                    .build();
+                    mNetworkAgent.setUnderlyingNetworks(Collections.singletonList(network));
+                }
+
+                mTunnelIface.setUnderlyingNetwork(network);
+
+                // Transforms do not need to be persisted; the IkeSession will keep them alive for
+                // us
+                mIpSecManager.applyTunnelModeTransform(
+                        mTunnelIface, IpSecManager.DIRECTION_IN, inTransform);
+                mIpSecManager.applyTunnelModeTransform(
+                        mTunnelIface, IpSecManager.DIRECTION_OUT, outTransform);
+            } catch (IOException e) {
+                Log.d(TAG, "Transform application failed for token " + token, e);
+                onSessionLost(token, e);
             }
         }
 
         /**
          * Called when a new default network is connected.
          *
-         * <p>The Ikev2VpnRunner will unconditionally switch to the new network, killing the old IKE
-         * state in the process, and starting a new IkeSession instance.
+         * <p>The Ikev2VpnRunner will unconditionally switch to the new network. If the IKE session
+         * has mobility, Ikev2VpnRunner will migrate the existing IkeSession to the new network.
+         * Otherwise, Ikev2VpnRunner will kill the old IKE state, and start a new IkeSession
+         * instance.
          *
          * <p>This method MUST always be called on the mExecutor thread in order to ensure
          * consistency of the Ikev2VpnRunner fields.
          */
         public void onDefaultNetworkChanged(@NonNull Network network) {
-            Log.d(TAG, "Starting IKEv2/IPsec session on new network: " + network);
+            Log.d(TAG, "onDefaultNetworkChanged: " + network);
+
+            // If there is a new default network brought up, cancel the retry task to prevent
+            // establishing an unnecessary IKE session.
+            cancelRetryNewIkeSessionFuture();
+
+            // If there is a new default network brought up, cancel the obsolete reset and retry
+            // task.
+            cancelHandleNetworkLostTimeout();
+
+            if (!mIsRunning) {
+                Log.d(TAG, "onDefaultNetworkChanged after exit");
+                return; // VPN has been shut down.
+            }
+
+            mActiveNetwork = network;
+            mRetryCount = 0;
+
+            startOrMigrateIkeSession(network);
+        }
+
+        /**
+         * Start a new IKE session.
+         *
+         * <p>This method MUST always be called on the mExecutor thread in order to ensure
+         * consistency of the Ikev2VpnRunner fields.
+         *
+         * @param underlyingNetwork if the value is {@code null}, which means there is no active
+         *              network can be used, do nothing and return immediately. Otherwise, use the
+         *              given network to start a new IKE session.
+         */
+        private void startOrMigrateIkeSession(@Nullable Network underlyingNetwork) {
+            if (underlyingNetwork == null) {
+                Log.d(TAG, "There is no active network for starting an IKE session");
+                return;
+            }
 
             try {
-                if (!mIsRunning) {
-                    Log.d(TAG, "onDefaultNetworkChanged after exit");
-                    return; // VPN has been shut down.
+                if (mSession != null && mMobikeEnabled) {
+                    // IKE session can schedule a migration event only when IKE AUTH is finished
+                    // and mMobikeEnabled is true.
+                    Log.d(
+                            TAG,
+                            "Migrate IKE Session with token "
+                                    + mCurrentToken
+                                    + " to network "
+                                    + underlyingNetwork);
+                    mSession.setNetwork(underlyingNetwork);
+                    return;
                 }
 
+                Log.d(TAG, "Start new IKE session on network " + underlyingNetwork);
+
                 // Clear mInterface to prevent Ikev2VpnRunner being cleared when
                 // interfaceRemoved() is called.
                 mInterface = null;
                 // Without MOBIKE, we have no way to seamlessly migrate. Close on old
                 // (non-default) network, and start the new one.
                 resetIkeState();
-                mActiveNetwork = network;
 
                 // Get Ike options from IkeTunnelConnectionParams if it's available in the
                 // profile.
@@ -2854,12 +3091,12 @@
                 final ChildSessionParams childSessionParams;
                 if (ikeTunConnParams != null) {
                     final IkeSessionParams.Builder builder = new IkeSessionParams.Builder(
-                            ikeTunConnParams.getIkeSessionParams()).setNetwork(network);
+                            ikeTunConnParams.getIkeSessionParams()).setNetwork(underlyingNetwork);
                     ikeSessionParams = builder.build();
                     childSessionParams = ikeTunConnParams.getTunnelModeChildSessionParams();
                 } else {
                     ikeSessionParams = VpnIkev2Utils.buildIkeSessionParams(
-                            mContext, mProfile, network);
+                            mContext, mProfile, underlyingNetwork);
                     childSessionParams = VpnIkev2Utils.buildChildSessionParams(
                             mProfile.getAllowedAlgorithms());
                 }
@@ -2867,29 +3104,50 @@
                 // TODO: Remove the need for adding two unused addresses with
                 // IPsec tunnels.
                 final InetAddress address = InetAddress.getLocalHost();
+
+                // When onChildOpened is called and transforms are applied, it is
+                // guaranteed that the underlying network is still "network", because the
+                // all the network switch events will be deferred before onChildOpened is
+                // called. Thus it is safe to build a mTunnelIface before IKE setup.
                 mTunnelIface =
                         mIpSecManager.createIpSecTunnelInterface(
-                                address /* unused */,
-                                address /* unused */,
-                                network);
+                                address /* unused */, address /* unused */, underlyingNetwork);
                 NetdUtils.setInterfaceUp(mNetd, mTunnelIface.getInterfaceName());
 
-                mSession = mIkev2SessionCreator.createIkeSession(
-                        mContext,
-                        ikeSessionParams,
-                        childSessionParams,
-                        mExecutor,
-                        new VpnIkev2Utils.IkeSessionCallbackImpl(
-                                TAG, IkeV2VpnRunner.this, network),
-                        new VpnIkev2Utils.ChildSessionCallbackImpl(
-                                TAG, IkeV2VpnRunner.this, network));
-                Log.d(TAG, "Ike Session started for network " + network);
+                final int token = ++mCurrentToken;
+                mSession =
+                        mIkev2SessionCreator.createIkeSession(
+                                mContext,
+                                ikeSessionParams,
+                                childSessionParams,
+                                mExecutor,
+                                new VpnIkev2Utils.IkeSessionCallbackImpl(
+                                        TAG, IkeV2VpnRunner.this, token),
+                                new VpnIkev2Utils.ChildSessionCallbackImpl(
+                                        TAG, IkeV2VpnRunner.this, token));
+                Log.d(TAG, "IKE session started for token " + token);
             } catch (Exception e) {
-                Log.i(TAG, "Setup failed for network " + network + ". Aborting", e);
-                onSessionLost(network, e);
+                Log.i(TAG, "Setup failed for token " + mCurrentToken + ". Aborting", e);
+                onSessionLost(mCurrentToken, e);
             }
         }
 
+        private void scheduleRetryNewIkeSession() {
+            final long retryDelay = mDeps.getNextRetryDelaySeconds(mRetryCount++);
+            Log.d(TAG, "Retry new IKE session after " + retryDelay + " seconds.");
+            // 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.
+            mScheduledHandleRetryIkeSessionFuture =
+                    mExecutor.schedule(() -> {
+                        startOrMigrateIkeSession(mActiveNetwork);
+
+                        // Reset mScheduledHandleRetryIkeSessionFuture since it's already run on
+                        // executor thread.
+                        mScheduledHandleRetryIkeSessionFuture = null;
+                    }, retryDelay, TimeUnit.SECONDS);
+        }
+
         /** Called when the NetworkCapabilities of underlying network is changed */
         public void onDefaultNetworkCapabilitiesChanged(@NonNull NetworkCapabilities nc) {
             mUnderlyingNetworkCapabilities = nc;
@@ -2900,6 +3158,108 @@
             mUnderlyingLinkProperties = lp;
         }
 
+        /**
+         * Handles loss of the default underlying network
+         *
+         * <p>If the IKE Session has mobility, Ikev2VpnRunner will schedule a teardown event with a
+         * delay so that the IKE Session can migrate if a new network is available soon. Otherwise,
+         * Ikev2VpnRunner will kill the IKE session and reset the VPN.
+         *
+         * <p>This method MUST always be called on the mExecutor thread in order to ensure
+         * consistency of the Ikev2VpnRunner fields.
+         */
+        public void onDefaultNetworkLost(@NonNull Network network) {
+            // If the default network is torn down, there is no need to call
+            // startOrMigrateIkeSession() since it will always check if there is an active network
+            // can be used or not.
+            cancelRetryNewIkeSessionFuture();
+
+            if (!isActiveNetwork(network)) {
+                Log.d(TAG, "onDefaultNetworkLost called for obsolete network " + network);
+
+                // Do nothing; this signals that either: (1) a new/better Network was found,
+                // and the Ikev2VpnRunner has switched to it by restarting a new IKE session in
+                // onDefaultNetworkChanged, or (2) this IKE session was already shut down (exited,
+                // or an error was encountered somewhere else). In both cases, all resources and
+                // sessions are torn down via resetIkeState().
+                return;
+            } else {
+                mActiveNetwork = null;
+            }
+
+            if (mScheduledHandleNetworkLostFuture != null) {
+                final IllegalStateException exception =
+                        new IllegalStateException(
+                                "Found a pending mScheduledHandleNetworkLostFuture");
+                Log.i(
+                        TAG,
+                        "Unexpected error in onDefaultNetworkLost. Tear down session",
+                        exception);
+                handleSessionLost(exception, network);
+                return;
+            }
+
+            if (mSession != null && mMobikeEnabled) {
+                Log.d(
+                        TAG,
+                        "IKE Session has mobility. Delay handleSessionLost for losing network "
+                                + network
+                                + " on session with token "
+                                + mCurrentToken);
+
+                final int token = mCurrentToken;
+                // Delay the teardown in case a new network will be available soon. For example,
+                // during handover between two WiFi networks, Android will disconnect from the
+                // first WiFi and then connects to the second WiFi.
+                mScheduledHandleNetworkLostFuture =
+                        mExecutor.schedule(
+                                () -> {
+                                    if (isActiveToken(token)) {
+                                        handleSessionLost(null, network);
+                                    } else {
+                                        Log.d(
+                                                TAG,
+                                                "Scheduled handleSessionLost fired for "
+                                                        + "obsolete token "
+                                                        + token);
+                                    }
+
+                                    // Reset mScheduledHandleNetworkLostFuture since it's
+                                    // already run on executor thread.
+                                    mScheduledHandleNetworkLostFuture = null;
+                                },
+                                NETWORK_LOST_TIMEOUT_MS,
+                                TimeUnit.MILLISECONDS);
+            } else {
+                Log.d(TAG, "Call handleSessionLost for losing network " + network);
+                handleSessionLost(null, network);
+            }
+        }
+
+        private void cancelHandleNetworkLostTimeout() {
+            if (mScheduledHandleNetworkLostFuture != null) {
+                // It does not matter what to put in #cancel(boolean), because it is impossible
+                // that the task tracked by mScheduledHandleNetworkLostFuture is
+                // in-progress since both that task and onDefaultNetworkChanged are submitted to
+                // mExecutor who has only one thread.
+                Log.d(TAG, "Cancel the task for handling network lost timeout");
+                mScheduledHandleNetworkLostFuture.cancel(false /* mayInterruptIfRunning */);
+                mScheduledHandleNetworkLostFuture = null;
+            }
+        }
+
+        private void cancelRetryNewIkeSessionFuture() {
+            if (mScheduledHandleRetryIkeSessionFuture != null) {
+                // It does not matter what to put in #cancel(boolean), because it is impossible
+                // that the task tracked by mScheduledHandleRetryIkeSessionFuture is
+                // in-progress since both that task and onDefaultNetworkChanged are submitted to
+                // mExecutor who has only one thread.
+                Log.d(TAG, "Cancel the task for handling new ike session timeout");
+                mScheduledHandleRetryIkeSessionFuture.cancel(false /* mayInterruptIfRunning */);
+                mScheduledHandleRetryIkeSessionFuture = null;
+            }
+        }
+
         /** Marks the state as FAILED, and disconnects. */
         private void markFailedAndDisconnect(Exception exception) {
             synchronized (Vpn.this) {
@@ -2918,18 +3278,28 @@
          * <p>This method MUST always be called on the mExecutor thread in order to ensure
          * consistency of the Ikev2VpnRunner fields.
          */
-        public void onSessionLost(@NonNull Network network, @Nullable Exception exception) {
-            if (!isActiveNetwork(network)) {
-                Log.d(TAG, "onSessionLost() called for obsolete network " + network);
+        public void onSessionLost(int token, @Nullable Exception exception) {
+            Log.d(TAG, "onSessionLost() called for token " + token);
+
+            if (!isActiveToken(token)) {
+                Log.d(TAG, "onSessionLost() called for obsolete token " + token);
 
                 // Do nothing; this signals that either: (1) a new/better Network was found,
-                // and the Ikev2VpnRunner has switched to it in onDefaultNetworkChanged, or (2) this
-                // IKE session was already shut down (exited, or an error was encountered somewhere
-                // else). In both cases, all resources and sessions are torn down via
-                // onSessionLost() and resetIkeState().
+                // and the Ikev2VpnRunner has switched to it by restarting a new IKE session in
+                // onDefaultNetworkChanged, or (2) this IKE session was already shut down (exited,
+                // or an error was encountered somewhere else). In both cases, all resources and
+                // sessions are torn down via resetIkeState().
                 return;
             }
 
+            handleSessionLost(exception, mActiveNetwork);
+        }
+
+        private void handleSessionLost(@Nullable Exception exception, @Nullable Network network) {
+            // Cancel mScheduledHandleNetworkLostFuture if the session it is going to terminate is
+            // already terminated due to other failures.
+            cancelHandleNetworkLostTimeout();
+
             synchronized (Vpn.this) {
                 if (exception instanceof IkeProtocolException) {
                     final IkeProtocolException ikeException = (IkeProtocolException) exception;
@@ -2944,12 +3314,12 @@
                             // All the above failures are configuration errors, and are terminal
                             // TODO(b/230548427): Remove SDK check once VPN related stuff are
                             //  decoupled from ConnectivityServiceTest.
-                            if (SdkLevel.isAtLeastT()) {
+                            if (SdkLevel.isAtLeastT() && isVpnApp(mPackage)) {
                                 sendEventToVpnManagerApp(VpnManager.CATEGORY_EVENT_IKE_ERROR,
                                         VpnManager.ERROR_CLASS_NOT_RECOVERABLE,
                                         ikeException.getErrorType(),
                                         getPackage(), mSessionKey, makeVpnProfileStateLocked(),
-                                        mActiveNetwork,
+                                        network,
                                         getRedactedNetworkCapabilitiesOfUnderlyingNetwork(
                                                 mUnderlyingNetworkCapabilities),
                                         getRedactedLinkPropertiesOfUnderlyingNetwork(
@@ -2962,12 +3332,12 @@
                             // All the above failures are configuration errors, and are terminal
                             // TODO(b/230548427): Remove SDK check once VPN related stuff are
                             //  decoupled from ConnectivityServiceTest.
-                            if (SdkLevel.isAtLeastT()) {
+                            if (SdkLevel.isAtLeastT() && isVpnApp(mPackage)) {
                                 sendEventToVpnManagerApp(VpnManager.CATEGORY_EVENT_IKE_ERROR,
                                         VpnManager.ERROR_CLASS_RECOVERABLE,
                                         ikeException.getErrorType(),
                                         getPackage(), mSessionKey, makeVpnProfileStateLocked(),
-                                        mActiveNetwork,
+                                        network,
                                         getRedactedNetworkCapabilitiesOfUnderlyingNetwork(
                                                 mUnderlyingNetworkCapabilities),
                                         getRedactedLinkPropertiesOfUnderlyingNetwork(
@@ -2981,12 +3351,12 @@
                 } else if (exception instanceof IkeNetworkLostException) {
                     // TODO(b/230548427): Remove SDK check once VPN related stuff are
                     //  decoupled from ConnectivityServiceTest.
-                    if (SdkLevel.isAtLeastT()) {
+                    if (SdkLevel.isAtLeastT() && isVpnApp(mPackage)) {
                         sendEventToVpnManagerApp(VpnManager.CATEGORY_EVENT_NETWORK_ERROR,
                                 VpnManager.ERROR_CLASS_RECOVERABLE,
                                 VpnManager.ERROR_CODE_NETWORK_LOST,
                                 getPackage(), mSessionKey, makeVpnProfileStateLocked(),
-                                mActiveNetwork,
+                                network,
                                 getRedactedNetworkCapabilitiesOfUnderlyingNetwork(
                                         mUnderlyingNetworkCapabilities),
                                 getRedactedLinkPropertiesOfUnderlyingNetwork(
@@ -2996,12 +3366,12 @@
                     if (exception.getCause() instanceof UnknownHostException) {
                         // TODO(b/230548427): Remove SDK check once VPN related stuff are
                         //  decoupled from ConnectivityServiceTest.
-                        if (SdkLevel.isAtLeastT()) {
+                        if (SdkLevel.isAtLeastT() && isVpnApp(mPackage)) {
                             sendEventToVpnManagerApp(VpnManager.CATEGORY_EVENT_NETWORK_ERROR,
                                     VpnManager.ERROR_CLASS_RECOVERABLE,
                                     VpnManager.ERROR_CODE_NETWORK_UNKNOWN_HOST,
                                     getPackage(), mSessionKey, makeVpnProfileStateLocked(),
-                                    mActiveNetwork,
+                                    network,
                                     getRedactedNetworkCapabilitiesOfUnderlyingNetwork(
                                             mUnderlyingNetworkCapabilities),
                                     getRedactedLinkPropertiesOfUnderlyingNetwork(
@@ -3010,12 +3380,12 @@
                     } else if (exception.getCause() instanceof IkeTimeoutException) {
                         // TODO(b/230548427): Remove SDK check once VPN related stuff are
                         //  decoupled from ConnectivityServiceTest.
-                        if (SdkLevel.isAtLeastT()) {
+                        if (SdkLevel.isAtLeastT() && isVpnApp(mPackage)) {
                             sendEventToVpnManagerApp(VpnManager.CATEGORY_EVENT_NETWORK_ERROR,
                                     VpnManager.ERROR_CLASS_RECOVERABLE,
                                     VpnManager.ERROR_CODE_NETWORK_PROTOCOL_TIMEOUT,
                                     getPackage(), mSessionKey, makeVpnProfileStateLocked(),
-                                    mActiveNetwork,
+                                    network,
                                     getRedactedNetworkCapabilitiesOfUnderlyingNetwork(
                                             mUnderlyingNetworkCapabilities),
                                     getRedactedLinkPropertiesOfUnderlyingNetwork(
@@ -3024,12 +3394,12 @@
                     } else if (exception.getCause() instanceof IOException) {
                         // TODO(b/230548427): Remove SDK check once VPN related stuff are
                         //  decoupled from ConnectivityServiceTest.
-                        if (SdkLevel.isAtLeastT()) {
+                        if (SdkLevel.isAtLeastT() && isVpnApp(mPackage)) {
                             sendEventToVpnManagerApp(VpnManager.CATEGORY_EVENT_NETWORK_ERROR,
                                     VpnManager.ERROR_CLASS_RECOVERABLE,
                                     VpnManager.ERROR_CODE_NETWORK_IO,
                                     getPackage(), mSessionKey, makeVpnProfileStateLocked(),
-                                    mActiveNetwork,
+                                    network,
                                     getRedactedNetworkCapabilitiesOfUnderlyingNetwork(
                                             mUnderlyingNetworkCapabilities),
                                     getRedactedLinkPropertiesOfUnderlyingNetwork(
@@ -3039,15 +3409,16 @@
                 } else if (exception != null) {
                     Log.wtf(TAG, "onSessionLost: exception = " + exception);
                 }
+
+                scheduleRetryNewIkeSession();
             }
 
-            mActiveNetwork = null;
             mUnderlyingNetworkCapabilities = null;
             mUnderlyingLinkProperties = null;
 
             // Close all obsolete state, but keep VPN alive incase a usable network comes up.
             // (Mirrors VpnService behavior)
-            Log.d(TAG, "Resetting state for network: " + network);
+            Log.d(TAG, "Resetting state for token: " + mCurrentToken);
 
             synchronized (Vpn.this) {
                 // Since this method handles non-fatal errors only, set mInterface to null to
@@ -3092,6 +3463,8 @@
                 mSession.kill(); // Kill here to make sure all resources are released immediately
                 mSession = null;
             }
+            mIkeConnectionInfo = null;
+            mMobikeEnabled = false;
         }
 
         /**
@@ -3675,7 +4048,9 @@
                 case VpnProfile.TYPE_IKEV2_IPSEC_RSA:
                 case VpnProfile.TYPE_IKEV2_FROM_IKE_TUN_CONN_PARAMS:
                     mVpnRunner =
-                            new IkeV2VpnRunner(Ikev2VpnProfile.fromVpnProfile(profile));
+                            new IkeV2VpnRunner(
+                                    Ikev2VpnProfile.fromVpnProfile(profile),
+                                    mDeps.newScheduledThreadPoolExecutor());
                     mVpnRunner.start();
                     break;
                 default:
@@ -3851,22 +4226,48 @@
      * @hide
      */
     @VisibleForTesting
+    public static class IkeSessionWrapper {
+        private final IkeSession mImpl;
+
+        /** Create an IkeSessionWrapper */
+        public IkeSessionWrapper(IkeSession session) {
+            mImpl = session;
+        }
+
+        /** Update the underlying network of the IKE Session */
+        public void setNetwork(@NonNull Network network) {
+            mImpl.setNetwork(network);
+        }
+
+        /** Forcibly terminate the IKE Session */
+        public void kill() {
+            mImpl.kill();
+        }
+    }
+
+    /**
+     * Proxy to allow testing
+     *
+     * @hide
+     */
+    @VisibleForTesting
     public static class Ikev2SessionCreator {
         /** Creates a IKE session */
-        public IkeSession createIkeSession(
+        public IkeSessionWrapper createIkeSession(
                 @NonNull Context context,
                 @NonNull IkeSessionParams ikeSessionParams,
                 @NonNull ChildSessionParams firstChildSessionParams,
                 @NonNull Executor userCbExecutor,
                 @NonNull IkeSessionCallback ikeSessionCallback,
                 @NonNull ChildSessionCallback firstChildSessionCallback) {
-            return new IkeSession(
-                    context,
-                    ikeSessionParams,
-                    firstChildSessionParams,
-                    userCbExecutor,
-                    ikeSessionCallback,
-                    firstChildSessionCallback);
+            return new IkeSessionWrapper(
+                    new IkeSession(
+                            context,
+                            ikeSessionParams,
+                            firstChildSessionParams,
+                            userCbExecutor,
+                            ikeSessionCallback,
+                            firstChildSessionCallback));
         }
     }
 
diff --git a/services/core/java/com/android/server/connectivity/VpnIkev2Utils.java b/services/core/java/com/android/server/connectivity/VpnIkev2Utils.java
index 1705828..857c86d 100644
--- a/services/core/java/com/android/server/connectivity/VpnIkev2Utils.java
+++ b/services/core/java/com/android/server/connectivity/VpnIkev2Utils.java
@@ -68,6 +68,7 @@
 import android.net.ipsec.ike.IkeSaProposal;
 import android.net.ipsec.ike.IkeSessionCallback;
 import android.net.ipsec.ike.IkeSessionConfiguration;
+import android.net.ipsec.ike.IkeSessionConnectionInfo;
 import android.net.ipsec.ike.IkeSessionParams;
 import android.net.ipsec.ike.IkeTrafficSelector;
 import android.net.ipsec.ike.TunnelModeChildSessionParams;
@@ -107,6 +108,7 @@
                 new IkeSessionParams.Builder(context)
                         .setServerHostname(profile.getServerAddr())
                         .setNetwork(network)
+                        .addIkeOption(IkeSessionParams.IKE_OPTION_MOBIKE)
                         .setLocalIdentification(localId)
                         .setRemoteIdentification(remoteId);
         setIkeAuth(profile, ikeOptionsBuilder);
@@ -298,72 +300,79 @@
     static class IkeSessionCallbackImpl implements IkeSessionCallback {
         private final String mTag;
         private final Vpn.IkeV2VpnRunnerCallback mCallback;
-        private final Network mNetwork;
+        private final int mToken;
 
-        IkeSessionCallbackImpl(String tag, Vpn.IkeV2VpnRunnerCallback callback, Network network) {
+        IkeSessionCallbackImpl(String tag, Vpn.IkeV2VpnRunnerCallback callback, int token) {
             mTag = tag;
             mCallback = callback;
-            mNetwork = network;
+            mToken = token;
         }
 
         @Override
         public void onOpened(@NonNull IkeSessionConfiguration ikeSessionConfig) {
-            Log.d(mTag, "IkeOpened for network " + mNetwork);
-            // Nothing to do here.
+            Log.d(mTag, "IkeOpened for token " + mToken);
+            mCallback.onIkeOpened(mToken, ikeSessionConfig);
         }
 
         @Override
         public void onClosed() {
-            Log.d(mTag, "IkeClosed for network " + mNetwork);
-            mCallback.onSessionLost(mNetwork, null); // Server requested session closure. Retry?
+            Log.d(mTag, "IkeClosed for token " + mToken);
+            mCallback.onSessionLost(mToken, null); // Server requested session closure. Retry?
         }
 
         @Override
         public void onClosedExceptionally(@NonNull IkeException exception) {
-            Log.d(mTag, "IkeClosedExceptionally for network " + mNetwork, exception);
-            mCallback.onSessionLost(mNetwork, exception);
+            Log.d(mTag, "IkeClosedExceptionally for token " + mToken, exception);
+            mCallback.onSessionLost(mToken, exception);
         }
 
         @Override
         public void onError(@NonNull IkeProtocolException exception) {
-            Log.d(mTag, "IkeError for network " + mNetwork, exception);
+            Log.d(mTag, "IkeError for token " + mToken, exception);
             // Non-fatal, log and continue.
         }
+
+        @Override
+        public void onIkeSessionConnectionInfoChanged(
+                @NonNull IkeSessionConnectionInfo connectionInfo) {
+            Log.d(mTag, "onIkeSessionConnectionInfoChanged for token " + mToken);
+            mCallback.onIkeConnectionInfoChanged(mToken, connectionInfo);
+        }
     }
 
     static class ChildSessionCallbackImpl implements ChildSessionCallback {
         private final String mTag;
         private final Vpn.IkeV2VpnRunnerCallback mCallback;
-        private final Network mNetwork;
+        private final int mToken;
 
-        ChildSessionCallbackImpl(String tag, Vpn.IkeV2VpnRunnerCallback callback, Network network) {
+        ChildSessionCallbackImpl(String tag, Vpn.IkeV2VpnRunnerCallback callback, int token) {
             mTag = tag;
             mCallback = callback;
-            mNetwork = network;
+            mToken = token;
         }
 
         @Override
         public void onOpened(@NonNull ChildSessionConfiguration childConfig) {
-            Log.d(mTag, "ChildOpened for network " + mNetwork);
-            mCallback.onChildOpened(mNetwork, childConfig);
+            Log.d(mTag, "ChildOpened for token " + mToken);
+            mCallback.onChildOpened(mToken, childConfig);
         }
 
         @Override
         public void onClosed() {
-            Log.d(mTag, "ChildClosed for network " + mNetwork);
-            mCallback.onSessionLost(mNetwork, null);
+            Log.d(mTag, "ChildClosed for token " + mToken);
+            mCallback.onSessionLost(mToken, null);
         }
 
         @Override
         public void onClosedExceptionally(@NonNull IkeException exception) {
-            Log.d(mTag, "ChildClosedExceptionally for network " + mNetwork, exception);
-            mCallback.onSessionLost(mNetwork, exception);
+            Log.d(mTag, "ChildClosedExceptionally for token " + mToken, exception);
+            mCallback.onSessionLost(mToken, exception);
         }
 
         @Override
         public void onIpSecTransformCreated(@NonNull IpSecTransform transform, int direction) {
-            Log.d(mTag, "ChildTransformCreated; Direction: " + direction + "; network " + mNetwork);
-            mCallback.onChildTransformCreated(mNetwork, transform, direction);
+            Log.d(mTag, "ChildTransformCreated; Direction: " + direction + "; token " + mToken);
+            mCallback.onChildTransformCreated(mToken, transform, direction);
         }
 
         @Override
@@ -371,8 +380,15 @@
             // Nothing to be done; no references to the IpSecTransform are held by the
             // Ikev2VpnRunner (or this callback class), and this transform will be closed by the
             // IKE library.
-            Log.d(mTag,
-                    "ChildTransformDeleted; Direction: " + direction + "; for network " + mNetwork);
+            Log.d(mTag, "ChildTransformDeleted; Direction: " + direction + "; for token " + mToken);
+        }
+
+        @Override
+        public void onIpSecTransformsMigrated(
+                @NonNull IpSecTransform inIpSecTransform,
+                @NonNull IpSecTransform outIpSecTransform) {
+            Log.d(mTag, "ChildTransformsMigrated; token " + mToken);
+            mCallback.onChildMigrated(mToken, inIpSecTransform, outIpSecTransform);
         }
     }
 
@@ -390,7 +406,7 @@
 
         @Override
         public void onAvailable(@NonNull Network network) {
-            Log.d(mTag, "Starting IKEv2/IPsec session on new network: " + network);
+            Log.d(mTag, "onAvailable called for network: " + network);
             mExecutor.execute(() -> mCallback.onDefaultNetworkChanged(network));
         }
 
@@ -412,8 +428,8 @@
 
         @Override
         public void onLost(@NonNull Network network) {
-            Log.d(mTag, "Tearing down; lost network: " + network);
-            mExecutor.execute(() -> mCallback.onSessionLost(network, null));
+            Log.d(mTag, "onLost called for network: " + network);
+            mExecutor.execute(() -> mCallback.onDefaultNetworkLost(network));
         }
     }
 
diff --git a/services/core/java/com/android/server/devicestate/DeviceStateManagerService.java b/services/core/java/com/android/server/devicestate/DeviceStateManagerService.java
index 03e18a0..8e00ccf 100644
--- a/services/core/java/com/android/server/devicestate/DeviceStateManagerService.java
+++ b/services/core/java/com/android/server/devicestate/DeviceStateManagerService.java
@@ -40,6 +40,8 @@
 import android.os.RemoteException;
 import android.os.ResultReceiver;
 import android.os.ShellCallback;
+import android.os.SystemProperties;
+import android.os.Trace;
 import android.util.Slog;
 import android.util.SparseArray;
 
@@ -144,15 +146,30 @@
 
     private Set<Integer> mDeviceStatesAvailableForAppRequests;
 
+    @VisibleForTesting
+    interface SystemPropertySetter {
+        void setDebugTracingDeviceStateProperty(String value);
+    }
+    @NonNull
+    private final SystemPropertySetter mSystemPropertySetter;
+
     public DeviceStateManagerService(@NonNull Context context) {
         this(context, DeviceStatePolicy.Provider
                 .fromResources(context.getResources())
                 .instantiate(context));
     }
 
+    private DeviceStateManagerService(@NonNull Context context, @NonNull DeviceStatePolicy policy) {
+        this(context, policy, (value) -> {
+            SystemProperties.set("debug.tracing.device_state", value);
+        });
+    }
+
     @VisibleForTesting
-    DeviceStateManagerService(@NonNull Context context, @NonNull DeviceStatePolicy policy) {
+    DeviceStateManagerService(@NonNull Context context, @NonNull DeviceStatePolicy policy,
+                @NonNull SystemPropertySetter systemPropertySetter) {
         super(context);
+        mSystemPropertySetter = systemPropertySetter;
         // We use the DisplayThread because this service indirectly drives
         // display (on/off) and window (position) events through its callbacks.
         DisplayThread displayThread = DisplayThread.get();
@@ -462,6 +479,10 @@
 
             FrameworkStatsLog.write(FrameworkStatsLog.DEVICE_STATE_CHANGED,
                     newState.getIdentifier(), !mCommittedState.isPresent());
+            String traceString = newState.getIdentifier() + ":" + newState.getName();
+            Trace.instantForTrack(
+                    Trace.TRACE_TAG_SYSTEM_SERVER, "DeviceStateChanged", traceString);
+            mSystemPropertySetter.setDebugTracingDeviceStateProperty(traceString);
 
             mCommittedState = Optional.of(newState);
             mPendingState = Optional.empty();
diff --git a/services/core/java/com/android/server/display/AutomaticBrightnessController.java b/services/core/java/com/android/server/display/AutomaticBrightnessController.java
index 6fd8841..72464be 100644
--- a/services/core/java/com/android/server/display/AutomaticBrightnessController.java
+++ b/services/core/java/com/android/server/display/AutomaticBrightnessController.java
@@ -344,7 +344,9 @@
             brightnessEvent.recommendedBrightness = mScreenAutoBrightness;
             brightnessEvent.flags |= (!mAmbientLuxValid ? BrightnessEvent.FLAG_INVALID_LUX : 0)
                     | (mDisplayPolicy == DisplayPowerRequest.POLICY_DOZE
-                        ? BrightnessEvent.FLAG_DOZE_SCALE : 0);
+                        ? BrightnessEvent.FLAG_DOZE_SCALE : 0)
+                    | (mCurrentBrightnessMapper.isForIdleMode()
+                        ? BrightnessEvent.FLAG_IDLE_CURVE : 0);
         }
 
         if (!mAmbientLuxValid) {
diff --git a/services/core/java/com/android/server/display/BrightnessThrottler.java b/services/core/java/com/android/server/display/BrightnessThrottler.java
index 767b2d1..eccee52 100644
--- a/services/core/java/com/android/server/display/BrightnessThrottler.java
+++ b/services/core/java/com/android/server/display/BrightnessThrottler.java
@@ -16,21 +16,31 @@
 
 package com.android.server.display;
 
+import android.annotation.NonNull;
 import android.content.Context;
 import android.hardware.display.BrightnessInfo;
+import android.hardware.display.DisplayManager;
 import android.os.Handler;
+import android.os.HandlerExecutor;
 import android.os.IThermalEventListener;
 import android.os.IThermalService;
 import android.os.PowerManager;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.Temperature;
+import android.provider.DeviceConfig;
+import android.provider.DeviceConfigInterface;
 import android.util.Slog;
 
-import com.android.server.display.DisplayDeviceConfig.BrightnessThrottlingData.ThrottlingLevel;
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.server.display.DisplayDeviceConfig.BrightnessThrottlingData;
+import com.android.server.display.DisplayDeviceConfig.BrightnessThrottlingData.ThrottlingLevel;
 
 import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.concurrent.Executor;
 
 /**
  * This class monitors various conditions, such as skin temperature throttling status, and limits
@@ -44,28 +54,54 @@
 
     private final Injector mInjector;
     private final Handler mHandler;
-    private BrightnessThrottlingData mThrottlingData;
+    // We need a separate handler for unit testing. These two handlers are the same throughout the
+    // non-test code.
+    private final Handler mDeviceConfigHandler;
     private final Runnable mThrottlingChangeCallback;
     private final SkinThermalStatusObserver mSkinThermalStatusObserver;
+    private final DeviceConfigListener mDeviceConfigListener;
+    private final DeviceConfigInterface mDeviceConfig;
+
     private int mThrottlingStatus;
+    private BrightnessThrottlingData mThrottlingData;
+    private BrightnessThrottlingData mDdcThrottlingData;
     private float mBrightnessCap = PowerManager.BRIGHTNESS_MAX;
     private @BrightnessInfo.BrightnessMaxReason int mBrightnessMaxReason =
         BrightnessInfo.BRIGHTNESS_MAX_REASON_NONE;
+    private String mUniqueDisplayId;
+
+    // The most recent string that has been set from DeviceConfig
+    private String mBrightnessThrottlingDataString;
+
+    // This is a collection of brightness throttling data that has been written as overrides from
+    // the DeviceConfig. This will always take priority over the display device config data.
+    private HashMap<String, BrightnessThrottlingData> mBrightnessThrottlingDataOverride =
+            new HashMap<>(1);
 
     BrightnessThrottler(Handler handler, BrightnessThrottlingData throttlingData,
-            Runnable throttlingChangeCallback) {
-        this(new Injector(), handler, throttlingData, throttlingChangeCallback);
+            Runnable throttlingChangeCallback, String uniqueDisplayId) {
+        this(new Injector(), handler, handler, throttlingData, throttlingChangeCallback,
+                uniqueDisplayId);
     }
 
-    BrightnessThrottler(Injector injector, Handler handler, BrightnessThrottlingData throttlingData,
-            Runnable throttlingChangeCallback) {
+    @VisibleForTesting
+    BrightnessThrottler(Injector injector, Handler handler, Handler deviceConfigHandler,
+            BrightnessThrottlingData throttlingData, Runnable throttlingChangeCallback,
+            String uniqueDisplayId) {
         mInjector = injector;
+
         mHandler = handler;
+        mDeviceConfigHandler = deviceConfigHandler;
         mThrottlingData = throttlingData;
+        mDdcThrottlingData = throttlingData;
         mThrottlingChangeCallback = throttlingChangeCallback;
         mSkinThermalStatusObserver = new SkinThermalStatusObserver(mInjector, mHandler);
 
-        resetThrottlingData(mThrottlingData);
+        mUniqueDisplayId = uniqueDisplayId;
+        mDeviceConfig = injector.getDeviceConfig();
+        mDeviceConfigListener = new DeviceConfigListener();
+
+        resetThrottlingData(mThrottlingData, mUniqueDisplayId);
     }
 
     boolean deviceSupportsThrottling() {
@@ -86,7 +122,7 @@
 
     void stop() {
         mSkinThermalStatusObserver.stopObserving();
-
+        mDeviceConfig.removeOnPropertiesChangedListener(mDeviceConfigListener);
         // We're asked to stop throttling, so reset brightness restrictions.
         mBrightnessCap = PowerManager.BRIGHTNESS_MAX;
         mBrightnessMaxReason = BrightnessInfo.BRIGHTNESS_MAX_REASON_NONE;
@@ -97,9 +133,19 @@
         mThrottlingStatus = THROTTLING_INVALID;
     }
 
-    void resetThrottlingData(BrightnessThrottlingData throttlingData) {
+    private void resetThrottlingData() {
+        resetThrottlingData(mDdcThrottlingData, mUniqueDisplayId);
+    }
+
+    void resetThrottlingData(BrightnessThrottlingData throttlingData, String displayId) {
         stop();
-        mThrottlingData = throttlingData;
+
+        mUniqueDisplayId = displayId;
+        mDdcThrottlingData = throttlingData;
+        mDeviceConfigListener.startListening();
+        reloadBrightnessThrottlingDataOverride();
+        mThrottlingData = mBrightnessThrottlingDataOverride.getOrDefault(mUniqueDisplayId,
+                throttlingData);
 
         if (deviceSupportsThrottling()) {
             mSkinThermalStatusObserver.startObserving();
@@ -173,14 +219,148 @@
     private void dumpLocal(PrintWriter pw) {
         pw.println("BrightnessThrottler:");
         pw.println("  mThrottlingData=" + mThrottlingData);
+        pw.println("  mDdcThrottlingData=" + mDdcThrottlingData);
+        pw.println("  mUniqueDisplayId=" + mUniqueDisplayId);
         pw.println("  mThrottlingStatus=" + mThrottlingStatus);
         pw.println("  mBrightnessCap=" + mBrightnessCap);
         pw.println("  mBrightnessMaxReason=" +
             BrightnessInfo.briMaxReasonToString(mBrightnessMaxReason));
+        pw.println("  mBrightnessThrottlingDataOverride=" + mBrightnessThrottlingDataOverride);
+        pw.println("  mBrightnessThrottlingDataString=" + mBrightnessThrottlingDataString);
 
         mSkinThermalStatusObserver.dump(pw);
     }
 
+    private String getBrightnessThrottlingDataString() {
+        return mDeviceConfig.getString(DeviceConfig.NAMESPACE_DISPLAY_MANAGER,
+                DisplayManager.DeviceConfig.KEY_BRIGHTNESS_THROTTLING_DATA,
+                /* defaultValue= */ null);
+    }
+
+    private boolean parseAndSaveData(@NonNull String strArray,
+            @NonNull HashMap<String, BrightnessThrottlingData> tempBrightnessThrottlingData) {
+        boolean validConfig = true;
+        String[] items = strArray.split(",");
+        int i = 0;
+
+        try {
+            String uniqueDisplayId = items[i++];
+
+            // number of throttling points
+            int noOfThrottlingPoints = Integer.parseInt(items[i++]);
+            List<ThrottlingLevel> throttlingLevels = new ArrayList<>(noOfThrottlingPoints);
+
+            // throttling level and point
+            for (int j = 0; j < noOfThrottlingPoints; j++) {
+                String severity = items[i++];
+                int status = parseThermalStatus(severity);
+
+                float brightnessPoint = parseBrightness(items[i++]);
+
+                throttlingLevels.add(new ThrottlingLevel(status, brightnessPoint));
+            }
+            BrightnessThrottlingData toSave =
+                    DisplayDeviceConfig.BrightnessThrottlingData.create(throttlingLevels);
+            tempBrightnessThrottlingData.put(uniqueDisplayId, toSave);
+        } catch (NumberFormatException | IndexOutOfBoundsException
+                | UnknownThermalStatusException e) {
+            validConfig = false;
+            Slog.e(TAG, "Throttling data is invalid array: '" + strArray + "'", e);
+        }
+
+        if (i != items.length) {
+            validConfig = false;
+        }
+
+        return validConfig;
+    }
+
+    public void reloadBrightnessThrottlingDataOverride() {
+        HashMap<String, BrightnessThrottlingData> tempBrightnessThrottlingData =
+                new HashMap<>(1);
+        mBrightnessThrottlingDataString = getBrightnessThrottlingDataString();
+        boolean validConfig = true;
+        mBrightnessThrottlingDataOverride.clear();
+        if (mBrightnessThrottlingDataString != null) {
+            String[] throttlingDataSplits = mBrightnessThrottlingDataString.split(";");
+            for (String s : throttlingDataSplits) {
+                if (!parseAndSaveData(s, tempBrightnessThrottlingData)) {
+                    validConfig = false;
+                    break;
+                }
+            }
+
+            if (validConfig) {
+                mBrightnessThrottlingDataOverride.putAll(tempBrightnessThrottlingData);
+                tempBrightnessThrottlingData.clear();
+            }
+
+        } else {
+            Slog.w(TAG, "DeviceConfig BrightnessThrottlingData is null");
+        }
+    }
+
+    /**
+     * Listens to config data change and updates the brightness throttling data using
+     * DisplayManager#KEY_BRIGHTNESS_THROTTLING_DATA.
+     * The format should be a string similar to: "local:4619827677550801152,2,moderate,0.5,severe,
+     * 0.379518072;local:4619827677550801151,1,moderate,0.75"
+     * In this order:
+     * <displayId>,<no of throttling levels>,[<severity as string>,<brightness cap>]
+     * Where the latter part is repeated for each throttling level, and the entirety is repeated
+     * for each display, separated by a semicolon.
+     */
+    public class DeviceConfigListener implements DeviceConfig.OnPropertiesChangedListener {
+        public Executor mExecutor = new HandlerExecutor(mDeviceConfigHandler);
+
+        public void startListening() {
+            mDeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_DISPLAY_MANAGER,
+                    mExecutor, this);
+        }
+
+        @Override
+        public void onPropertiesChanged(DeviceConfig.Properties properties) {
+            reloadBrightnessThrottlingDataOverride();
+            resetThrottlingData();
+        }
+    }
+
+    private float parseBrightness(String intVal) throws NumberFormatException {
+        float value = Float.parseFloat(intVal);
+        if (value < PowerManager.BRIGHTNESS_MIN || value > PowerManager.BRIGHTNESS_MAX) {
+            throw new NumberFormatException("Brightness constraint value out of bounds.");
+        }
+        return value;
+    }
+
+    @PowerManager.ThermalStatus private int parseThermalStatus(@NonNull String value)
+            throws UnknownThermalStatusException {
+        switch (value) {
+            case "none":
+                return PowerManager.THERMAL_STATUS_NONE;
+            case "light":
+                return PowerManager.THERMAL_STATUS_LIGHT;
+            case "moderate":
+                return PowerManager.THERMAL_STATUS_MODERATE;
+            case "severe":
+                return PowerManager.THERMAL_STATUS_SEVERE;
+            case "critical":
+                return PowerManager.THERMAL_STATUS_CRITICAL;
+            case "emergency":
+                return PowerManager.THERMAL_STATUS_EMERGENCY;
+            case "shutdown":
+                return PowerManager.THERMAL_STATUS_SHUTDOWN;
+            default:
+                throw new UnknownThermalStatusException("Invalid Thermal Status: " + value);
+        }
+    }
+
+    private static class UnknownThermalStatusException extends Exception {
+        UnknownThermalStatusException(String message) {
+            super(message);
+        }
+    }
+
     private final class SkinThermalStatusObserver extends IThermalEventListener.Stub {
         private final Injector mInjector;
         private final Handler mHandler;
@@ -258,5 +438,10 @@
             return IThermalService.Stub.asInterface(
                     ServiceManager.getService(Context.THERMAL_SERVICE));
         }
+
+        @NonNull
+        public DeviceConfigInterface getDeviceConfig() {
+            return DeviceConfigInterface.REAL;
+        }
     }
 }
diff --git a/services/core/java/com/android/server/display/DisplayDeviceConfig.java b/services/core/java/com/android/server/display/DisplayDeviceConfig.java
index a25ac21..b5aa7b1 100644
--- a/services/core/java/com/android/server/display/DisplayDeviceConfig.java
+++ b/services/core/java/com/android/server/display/DisplayDeviceConfig.java
@@ -279,11 +279,16 @@
     private HighBrightnessModeData mHbmData;
     private DensityMapping mDensityMapping;
     private String mLoadedFrom = null;
-
-    private BrightnessThrottlingData mBrightnessThrottlingData;
     private Spline mSdrToHdrRatioSpline;
 
-    private DisplayDeviceConfig(Context context) {
+    // Brightness Throttling data may be updated via the DeviceConfig. Here we store the original
+    // data, which comes from the ddc, and the current one, which may be the DeviceConfig
+    // overwritten value.
+    private BrightnessThrottlingData mBrightnessThrottlingData;
+    private BrightnessThrottlingData mOriginalBrightnessThrottlingData;
+
+    @VisibleForTesting
+    DisplayDeviceConfig(Context context) {
         mContext = context;
     }
 
@@ -422,6 +427,10 @@
         return config;
     }
 
+    void setBrightnessThrottlingData(BrightnessThrottlingData brightnessThrottlingData) {
+        mBrightnessThrottlingData = brightnessThrottlingData;
+    }
+
     /**
      * Return the brightness mapping nits array.
      *
@@ -637,6 +646,7 @@
                 + ", mHbmData=" + mHbmData
                 + ", mSdrToHdrRatioSpline=" + mSdrToHdrRatioSpline
                 + ", mBrightnessThrottlingData=" + mBrightnessThrottlingData
+                + ", mOriginalBrightnessThrottlingData=" + mOriginalBrightnessThrottlingData
                 + ", mBrightnessRampFastDecrease=" + mBrightnessRampFastDecrease
                 + ", mBrightnessRampFastIncrease=" + mBrightnessRampFastIncrease
                 + ", mBrightnessRampSlowDecrease=" + mBrightnessRampSlowDecrease
@@ -682,7 +692,8 @@
         return config;
     }
 
-    private boolean initFromFile(File configFile) {
+    @VisibleForTesting
+    boolean initFromFile(File configFile) {
         if (!configFile.exists()) {
             // Display configuration files aren't required to exist.
             return false;
@@ -932,6 +943,7 @@
 
         if (!badConfig) {
             mBrightnessThrottlingData = BrightnessThrottlingData.create(throttlingLevels);
+            mOriginalBrightnessThrottlingData = mBrightnessThrottlingData;
         }
     }
 
@@ -1407,7 +1419,9 @@
     /**
      * Container for brightness throttling data.
      */
-    static class BrightnessThrottlingData {
+    public static class BrightnessThrottlingData {
+        public List<ThrottlingLevel> throttlingLevels;
+
         static class ThrottlingLevel {
             public @PowerManager.ThermalStatus int thermalStatus;
             public float brightness;
@@ -1421,9 +1435,25 @@
             public String toString() {
                 return "[" + thermalStatus + "," + brightness + "]";
             }
-        }
 
-        public List<ThrottlingLevel> throttlingLevels;
+            @Override
+            public boolean equals(Object obj) {
+                if (!(obj instanceof ThrottlingLevel)) {
+                    return false;
+                }
+                ThrottlingLevel otherThrottlingLevel = (ThrottlingLevel) obj;
+
+                return otherThrottlingLevel.thermalStatus == this.thermalStatus
+                        && otherThrottlingLevel.brightness == this.brightness;
+            }
+            @Override
+            public int hashCode() {
+                int result = 1;
+                result = 31 * result + thermalStatus;
+                result = 31 * result + Float.hashCode(brightness);
+                return result;
+            }
+        }
 
         static public BrightnessThrottlingData create(List<ThrottlingLevel> throttlingLevels)
         {
@@ -1482,12 +1512,30 @@
                 + "} ";
         }
 
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+
+            if (!(obj instanceof BrightnessThrottlingData)) {
+                return false;
+            }
+
+            BrightnessThrottlingData otherBrightnessThrottlingData = (BrightnessThrottlingData) obj;
+            return throttlingLevels.equals(otherBrightnessThrottlingData.throttlingLevels);
+        }
+
+        @Override
+        public int hashCode() {
+            return throttlingLevels.hashCode();
+        }
+
         private BrightnessThrottlingData(List<ThrottlingLevel> inLevels) {
             throttlingLevels = new ArrayList<>(inLevels.size());
             for (ThrottlingLevel level : inLevels) {
                 throttlingLevels.add(new ThrottlingLevel(level.thermalStatus, level.brightness));
             }
         }
-
     }
 }
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java
index d3e2966..6285ef1 100644
--- a/services/core/java/com/android/server/display/DisplayManagerService.java
+++ b/services/core/java/com/android/server/display/DisplayManagerService.java
@@ -485,7 +485,7 @@
         mUiHandler = UiThread.getHandler();
         mDisplayDeviceRepo = new DisplayDeviceRepository(mSyncRoot, mPersistentDataStore);
         mLogicalDisplayMapper = new LogicalDisplayMapper(mContext, mDisplayDeviceRepo,
-                new LogicalDisplayListener(), mSyncRoot, mHandler, new DeviceStateToLayoutMap());
+                new LogicalDisplayListener(), mSyncRoot, mHandler);
         mDisplayModeDirector = new DisplayModeDirector(context, mHandler);
         mBrightnessSynchronizer = new BrightnessSynchronizer(mContext);
         Resources resources = mContext.getResources();
@@ -945,8 +945,7 @@
 
     private DisplayInfo getDisplayInfoInternal(int displayId, int callingUid) {
         synchronized (mSyncRoot) {
-            final LogicalDisplay display = mLogicalDisplayMapper.getDisplayLocked(displayId,
-                    /* includeDisabledDisplays= */ true);
+            final LogicalDisplay display = mLogicalDisplayMapper.getDisplayLocked(displayId);
             if (display != null) {
                 final DisplayInfo info =
                         getDisplayInfoForFrameRateOverride(display.getFrameRateOverrides(),
@@ -2129,18 +2128,16 @@
     }
 
     void resetBrightnessConfigurations() {
-        synchronized (mSyncRoot) {
-            mPersistentDataStore.setBrightnessConfigurationForUser(null, mContext.getUserId(),
+        mPersistentDataStore.setBrightnessConfigurationForUser(null, mContext.getUserId(),
+                mContext.getPackageName());
+        mLogicalDisplayMapper.forEachLocked((logicalDisplay -> {
+            if (logicalDisplay.getDisplayInfoLocked().type != Display.TYPE_INTERNAL) {
+                return;
+            }
+            final String uniqueId = logicalDisplay.getPrimaryDisplayDeviceLocked().getUniqueId();
+            setBrightnessConfigurationForDisplayInternal(null, uniqueId, mContext.getUserId(),
                     mContext.getPackageName());
-            mLogicalDisplayMapper.forEachLocked((logicalDisplay -> {
-                if (logicalDisplay.getDisplayInfoLocked().type != Display.TYPE_INTERNAL) {
-                    return;
-                }
-                String uniqueId = logicalDisplay.getPrimaryDisplayDeviceLocked().getUniqueId();
-                setBrightnessConfigurationForDisplayInternal(null, uniqueId, mContext.getUserId(),
-                        mContext.getPackageName());
-            }));
-        }
+        }));
     }
 
     void setAutoBrightnessLoggingEnabled(boolean enabled) {
@@ -2817,16 +2814,15 @@
         }
 
         /**
-         * Returns the list of all enabled display ids, and disabled ones if specified.
+         * Returns the list of all display ids.
          */
         @Override // Binder call
-        public int[] getDisplayIds(boolean includeDisabledDisplays) {
+        public int[] getDisplayIds() {
             final int callingUid = Binder.getCallingUid();
             final long token = Binder.clearCallingIdentity();
             try {
                 synchronized (mSyncRoot) {
-                    return mLogicalDisplayMapper.getDisplayIdsLocked(callingUid,
-                            includeDisabledDisplays);
+                    return mLogicalDisplayMapper.getDisplayIdsLocked(callingUid);
                 }
             } finally {
                 Binder.restoreCallingIdentity(token);
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 6a57e40..8781a8d 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -873,7 +873,7 @@
                     }
                 });
         mBrightnessThrottler.resetThrottlingData(
-                mDisplayDeviceConfig.getBrightnessThrottlingData());
+                mDisplayDeviceConfig.getBrightnessThrottlingData(), mUniqueDisplayId);
     }
 
     private void sendUpdatePowerState() {
@@ -1500,6 +1500,8 @@
         // Animate the screen brightness when the screen is on or dozing.
         // Skip the animation when the screen is off or suspended or transition to/from VR.
         boolean brightnessAdjusted = false;
+        final boolean brightnessIsTemporary =
+                mAppliedTemporaryBrightness || mAppliedTemporaryAutoBrightnessAdjustment;
         if (!mPendingScreenOff) {
             if (mSkipScreenOnBrightnessRamp) {
                 if (state == Display.STATE_ON) {
@@ -1532,8 +1534,6 @@
             // level without it being a noticeable jump since any actual content isn't yet visible.
             final boolean isDisplayContentVisible =
                     mColorFadeEnabled && mPowerState.getColorFadeLevel() == 1.0f;
-            final boolean brightnessIsTemporary =
-                    mAppliedTemporaryBrightness || mAppliedTemporaryAutoBrightnessAdjustment;
             // We only want to animate the brightness if it is between 0.0f and 1.0f.
             // brightnessState can contain the values -1.0f and NaN, which we do not want to
             // animate to. To avoid this, we check the value first.
@@ -1605,7 +1605,8 @@
             brightnessAdjusted = saveBrightnessInfo(getScreenBrightnessSetting());
         }
 
-        if (brightnessAdjusted) {
+        // Only notify if the brightness adjustment is not temporary (i.e. slider has been released)
+        if (brightnessAdjusted && !brightnessIsTemporary) {
             postBrightnessChangeRunnable();
         }
 
@@ -1842,7 +1843,7 @@
                 () -> {
                     sendUpdatePowerStateLocked();
                     postBrightnessChangeRunnable();
-                });
+                }, mUniqueDisplayId);
     }
 
     private void blockScreenOn() {
@@ -2737,8 +2738,9 @@
     class BrightnessEvent {
         static final int FLAG_RBC = 0x1;
         static final int FLAG_INVALID_LUX = 0x2;
-        static final int FLAG_DOZE_SCALE = 0x3;
-        static final int FLAG_USER_SET = 0x4;
+        static final int FLAG_DOZE_SCALE = 0x4;
+        static final int FLAG_USER_SET = 0x8;
+        static final int FLAG_IDLE_CURVE = 0x16;
 
         public final BrightnessReason reason = new BrightnessReason();
 
@@ -2842,7 +2844,8 @@
             return ((flags & FLAG_USER_SET) != 0 ? "user_set " : "")
                     + ((flags & FLAG_RBC) != 0 ? "rbc " : "")
                     + ((flags & FLAG_INVALID_LUX) != 0 ? "invalid_lux " : "")
-                    + ((flags & FLAG_DOZE_SCALE) != 0 ? "doze_scale " : "");
+                    + ((flags & FLAG_DOZE_SCALE) != 0 ? "doze_scale " : "")
+                    + ((flags & FLAG_DOZE_SCALE) != 0 ? "idle_curve " : "");
         }
     }
 
diff --git a/services/core/java/com/android/server/display/LogicalDisplay.java b/services/core/java/com/android/server/display/LogicalDisplay.java
index 90b9967e..d14902e 100644
--- a/services/core/java/com/android/server/display/LogicalDisplay.java
+++ b/services/core/java/com/android/server/display/LogicalDisplay.java
@@ -522,10 +522,12 @@
         // Set the layer stack.
         device.setLayerStackLocked(t, isBlanked ? BLANK_LAYER_STACK : mLayerStack);
         // Also inform whether the device is the same one sent to inputflinger for its layerstack.
+        // Prevent displays that are disabled from receiving input.
         // TODO(b/188914255): Remove once input can dispatch against device vs layerstack.
         device.setDisplayFlagsLocked(t,
-                device.getDisplayDeviceInfoLocked().touch != TOUCH_NONE
-                        ? SurfaceControl.DISPLAY_RECEIVES_INPUT : 0);
+                (isEnabled() && device.getDisplayDeviceInfoLocked().touch != TOUCH_NONE)
+                        ? SurfaceControl.DISPLAY_RECEIVES_INPUT
+                        : 0);
 
         // Set the color mode and allowed display mode.
         if (device == mPrimaryDisplayDevice) {
diff --git a/services/core/java/com/android/server/display/LogicalDisplayMapper.java b/services/core/java/com/android/server/display/LogicalDisplayMapper.java
index 34e8e75..70c9e23 100644
--- a/services/core/java/com/android/server/display/LogicalDisplayMapper.java
+++ b/services/core/java/com/android/server/display/LogicalDisplayMapper.java
@@ -79,12 +79,8 @@
     private static final int MSG_TRANSITION_TO_PENDING_DEVICE_STATE = 1;
 
     private static final int UPDATE_STATE_NEW = 0;
-    private static final int UPDATE_STATE_UPDATED = 1;
-    private static final int UPDATE_STATE_DISABLED = 2;
-
-    private static final int UPDATE_STATE_MASK = 0x3;
-
-    private static final int UPDATE_STATE_FLAG_TRANSITION = 0x100;
+    private static final int UPDATE_STATE_TRANSITION = 1;
+    private static final int UPDATE_STATE_UPDATED = 2;
 
     /**
      * Temporary display info, used for comparing display configurations.
@@ -170,7 +166,7 @@
 
     LogicalDisplayMapper(@NonNull Context context, @NonNull DisplayDeviceRepository repo,
             @NonNull Listener listener, @NonNull DisplayManagerService.SyncRoot syncRoot,
-            @NonNull Handler handler, @NonNull DeviceStateToLayoutMap deviceStateToLayoutMap) {
+            @NonNull Handler handler) {
         mSyncRoot = syncRoot;
         mPowerManager = context.getSystemService(PowerManager.class);
         mInteractive = mPowerManager.isInteractive();
@@ -185,7 +181,7 @@
         mDeviceStatesOnWhichToSleep = toSparseBooleanArray(context.getResources().getIntArray(
                 com.android.internal.R.array.config_deviceStatesOnWhichToSleep));
         mDisplayDeviceRepo.addListener(this);
-        mDeviceStateToLayoutMap = deviceStateToLayoutMap;
+        mDeviceStateToLayoutMap = new DeviceStateToLayoutMap();
     }
 
     @Override
@@ -222,29 +218,10 @@
     }
 
     public LogicalDisplay getDisplayLocked(int displayId) {
-        return getDisplayLocked(displayId, /* includeDisabled= */ false);
-    }
-
-    LogicalDisplay getDisplayLocked(int displayId, boolean includeDisabled) {
-        LogicalDisplay display = mLogicalDisplays.get(displayId);
-        if (display != null && (display.isEnabled() || includeDisabled)) {
-            return display;
-        }
-        return null;
+        return mLogicalDisplays.get(displayId);
     }
 
     public LogicalDisplay getDisplayLocked(DisplayDevice device) {
-        return getDisplayLocked(device, /* includeDisabled= */ false);
-    }
-
-    /**
-     * Loops through the existing list of displays and returns one that is associated with the
-     * specified display device.
-     *
-     * @param device The display device that should be associated with the LogicalDisplay.
-     * @param includeDisabled True if this method should return disabled displays as well.
-     */
-    private LogicalDisplay getDisplayLocked(DisplayDevice device, boolean includeDisabled) {
         if (device == null) {
             return null;
         }
@@ -252,32 +229,18 @@
         for (int i = 0; i < count; i++) {
             final LogicalDisplay display = mLogicalDisplays.valueAt(i);
             if (display.getPrimaryDisplayDeviceLocked() == device) {
-                if (display.isEnabled() || includeDisabled) {
-                    return display;
-                } else {
-                    return null;
-                }
+                return display;
             }
         }
         return null;
     }
 
-    // Returns display Ids, defaults to enabled only.
     public int[] getDisplayIdsLocked(int callingUid) {
-        return getDisplayIdsLocked(callingUid, /* includeDisabledDisplays= */ false);
-    }
-
-    // Returns display Ids, specified whether enabled only, or all displays.
-    public int[] getDisplayIdsLocked(int callingUid, boolean includeDisabledDisplays) {
         final int count = mLogicalDisplays.size();
         int[] displayIds = new int[count];
         int n = 0;
         for (int i = 0; i < count; i++) {
             LogicalDisplay display = mLogicalDisplays.valueAt(i);
-            if (!includeDisabledDisplays && !display.isEnabled()) {
-                continue; // Ignore disabled displays.
-            }
-
             DisplayInfo info = display.getDisplayInfoLocked();
             if (info.hasAccess(callingUid)) {
                 displayIds[n++] = mLogicalDisplays.keyAt(i);
@@ -292,10 +255,7 @@
     public void forEachLocked(Consumer<LogicalDisplay> consumer) {
         final int count = mLogicalDisplays.size();
         for (int i = 0; i < count; i++) {
-            LogicalDisplay display = mLogicalDisplays.valueAt(i);
-            if (display.isEnabled()) {
-                consumer.accept(display);
-            }
+            consumer.accept(mLogicalDisplays.valueAt(i));
         }
     }
 
@@ -356,8 +316,7 @@
 
             // Find or create the LogicalDisplay to map the DisplayDevice to.
             final int logicalDisplayId = displayLayout.getLogicalDisplayId();
-            final LogicalDisplay logicalDisplay =
-                    getDisplayLocked(logicalDisplayId, /* includeDisabled= */ true);
+            final LogicalDisplay logicalDisplay = getDisplayLocked(logicalDisplayId);
             if (logicalDisplay == null) {
                 Slog.w(TAG, "The logical display (" + address + "), is not available"
                         + " for the display state " + deviceState);
@@ -493,7 +452,7 @@
     }
 
     /**
-     * Returns true if the device should be put to sleep or not.
+     * Returns if the device should be put to sleep or not.
      *
      * Includes a check to verify that the device state that we are moving to, {@code pendingState},
      * is the same as the physical state of the device, {@code baseState}. Different values for
@@ -639,12 +598,9 @@
             display.getNonOverrideDisplayInfoLocked(mTempNonOverrideDisplayInfo);
 
             display.updateLocked(mDisplayDeviceRepo);
-            DisplayInfo newDisplayInfo = display.getDisplayInfoLocked();
-
-            final int storedState = mUpdatedLogicalDisplays.get(displayId, UPDATE_STATE_NEW);
-            final int updateState = storedState & UPDATE_STATE_MASK;
-            final boolean isTransitioning = (storedState & UPDATE_STATE_FLAG_TRANSITION) != 0;
-            final boolean wasPreviouslyUpdated = updateState == UPDATE_STATE_UPDATED;
+            final DisplayInfo newDisplayInfo = display.getDisplayInfoLocked();
+            final int updateState = mUpdatedLogicalDisplays.get(displayId, UPDATE_STATE_NEW);
+            final boolean wasPreviouslyUpdated = updateState != UPDATE_STATE_NEW;
 
             // The display is no longer valid and needs to be removed.
             if (!display.isValidLocked()) {
@@ -668,35 +624,6 @@
                 }
                 continue;
 
-            // The display has been newly disabled, we report this as a removed display but
-            // don't actually remove it from our internal list in LogicalDisplayMapper. The reason
-            // is that LogicalDisplayMapper assumes and relies on the fact that every DisplayDevice
-            // has a LogicalDisplay wrapper, but certain displays that are unusable (like the inner
-            // display on a folded foldable device) are not available for use by the system and
-            // we keep them hidden. To do this, we mark those LogicalDisplays as "disabled".
-            // Also, if the display is in TRANSITION but was previously reported as disabled
-            // then keep it unreported.
-            } else if (!display.isEnabled()
-                    || (display.getPhase() == LogicalDisplay.DISPLAY_PHASE_LAYOUT_TRANSITION
-                        && updateState == UPDATE_STATE_DISABLED)) {
-                mUpdatedLogicalDisplays.put(displayId, UPDATE_STATE_DISABLED);
-
-                // If we never told anyone about this display, nothing to do
-                if (!wasPreviouslyUpdated) {
-                    continue;
-                }
-
-                // Remove from group
-                final DisplayGroup displayGroup = getDisplayGroupLocked(
-                        getDisplayGroupIdFromDisplayIdLocked(displayId));
-                if (displayGroup != null) {
-                    displayGroup.removeDisplayLocked(display);
-                }
-
-                Slog.i(TAG, "Removing (disabled) display: " + displayId);
-                mLogicalDisplaysToUpdate.put(displayId, LOGICAL_DISPLAY_EVENT_REMOVED);
-                continue;
-
             // The display is new.
             } else if (!wasPreviouslyUpdated) {
                 Slog.i(TAG, "Adding new display: " + displayId + ": " + newDisplayInfo);
@@ -716,7 +643,7 @@
                 mLogicalDisplaysToUpdate.put(displayId, LOGICAL_DISPLAY_EVENT_CHANGED);
 
             // The display is involved in a display layout transition
-            } else if (isTransitioning) {
+            } else if (updateState == UPDATE_STATE_TRANSITION) {
                 mLogicalDisplaysToUpdate.put(displayId,
                         LOGICAL_DISPLAY_EVENT_DEVICE_STATE_TRANSITION);
 
@@ -790,7 +717,7 @@
             }
 
             final int id = mLogicalDisplaysToUpdate.keyAt(i);
-            final LogicalDisplay display = getDisplayLocked(id, /* includeDisabled= */ true);
+            final LogicalDisplay display = getDisplayLocked(id);
             if (DEBUG) {
                 final DisplayDevice device = display.getPrimaryDisplayDeviceLocked();
                 final String uniqueId = device == null ? "null" : device.getUniqueId();
@@ -798,7 +725,7 @@
                         + " with device=" + uniqueId);
             }
             mListener.onLogicalDisplayEventLocked(display, msg);
-            if (msg == LOGICAL_DISPLAY_EVENT_REMOVED && !display.isValidLocked()) {
+            if (msg == LOGICAL_DISPLAY_EVENT_REMOVED) {
                 // We wait until we sent the EVENT_REMOVED event before actually removing the
                 // display.
                 mLogicalDisplays.delete(id);
@@ -918,8 +845,7 @@
             if (isTransitioning) {
                 setDisplayPhase(logicalDisplay, phase);
                 if (phase == LogicalDisplay.DISPLAY_PHASE_LAYOUT_TRANSITION) {
-                    int oldState = mUpdatedLogicalDisplays.get(displayId, UPDATE_STATE_NEW);
-                    mUpdatedLogicalDisplays.put(displayId, oldState | UPDATE_STATE_FLAG_TRANSITION);
+                    mUpdatedLogicalDisplays.put(displayId, UPDATE_STATE_TRANSITION);
                 }
             }
         }
@@ -953,15 +879,14 @@
             // Now that we have a display-device, we need a LogicalDisplay to map it to. Find the
             // right one, if it doesn't exist, create a new one.
             final int logicalDisplayId = displayLayout.getLogicalDisplayId();
-            LogicalDisplay newDisplay =
-                    getDisplayLocked(logicalDisplayId, /* includeDisabled= */ true);
+            LogicalDisplay newDisplay = getDisplayLocked(logicalDisplayId);
             if (newDisplay == null) {
                 newDisplay = createNewLogicalDisplayLocked(
-                        /* displayDevice= */ null, logicalDisplayId);
+                        null /*displayDevice*/, logicalDisplayId);
             }
 
             // Now swap the underlying display devices between the old display and the new display
-            final LogicalDisplay oldDisplay = getDisplayLocked(device, /* includeDisabled= */ true);
+            final LogicalDisplay oldDisplay = getDisplayLocked(device);
             if (newDisplay != oldDisplay) {
                 newDisplay.swapDisplaysLocked(oldDisplay);
             }
@@ -978,14 +903,13 @@
      * Creates a new logical display for the specified device and display Id and adds it to the list
      * of logical displays.
      *
-     * @param displayDevice The displayDevice to associate with the LogicalDisplay.
+     * @param device The device to associate with the LogicalDisplay.
      * @param displayId The display ID to give the new display. If invalid, a new ID is assigned.
      * @return The new logical display if created, null otherwise.
      */
-    private LogicalDisplay createNewLogicalDisplayLocked(DisplayDevice displayDevice,
-            int displayId) {
+    private LogicalDisplay createNewLogicalDisplayLocked(DisplayDevice device, int displayId) {
         final int layerStack = assignLayerStackLocked(displayId);
-        final LogicalDisplay display = new LogicalDisplay(displayId, layerStack, displayDevice);
+        final LogicalDisplay display = new LogicalDisplay(displayId, layerStack, device);
         display.updateLocked(mDisplayDeviceRepo);
         mLogicalDisplays.put(displayId, display);
         setDisplayPhase(display, LogicalDisplay.DISPLAY_PHASE_ENABLED);
diff --git a/services/core/java/com/android/server/display/VirtualDisplayAdapter.java b/services/core/java/com/android/server/display/VirtualDisplayAdapter.java
index fcb2eb4..479629e 100644
--- a/services/core/java/com/android/server/display/VirtualDisplayAdapter.java
+++ b/services/core/java/com/android/server/display/VirtualDisplayAdapter.java
@@ -35,6 +35,7 @@
 import static com.android.server.display.DisplayDeviceInfo.FLAG_TOUCH_FEEDBACK_DISABLED;
 import static com.android.server.display.DisplayDeviceInfo.FLAG_TRUSTED;
 
+import android.annotation.Nullable;
 import android.content.Context;
 import android.graphics.Point;
 import android.hardware.display.IVirtualDisplayCallback;
@@ -110,15 +111,20 @@
         } else {
             uniqueId = UNIQUE_ID_PREFIX + ownerPackageName + ":" + uniqueId;
         }
+        MediaProjectionCallback mediaProjectionCallback =  null;
+        if (projection != null) {
+            mediaProjectionCallback = new MediaProjectionCallback(appToken);
+        }
         VirtualDisplayDevice device = new VirtualDisplayDevice(displayToken, appToken,
-                ownerUid, ownerPackageName, surface, flags, new Callback(callback, mHandler),
+                ownerUid, ownerPackageName, surface, flags,
+                new Callback(callback, mHandler), projection, mediaProjectionCallback,
                 uniqueId, uniqueIndex, virtualDisplayConfig);
 
         mVirtualDisplayDevices.put(appToken, device);
 
         try {
             if (projection != null) {
-                projection.registerCallback(new MediaProjectionCallback(appToken));
+                projection.registerCallback(mediaProjectionCallback);
             }
             appToken.linkToDeath(device, 0);
         } catch (RemoteException ex) {
@@ -203,7 +209,7 @@
     }
 
     private void handleMediaProjectionStoppedLocked(IBinder appToken) {
-        VirtualDisplayDevice device = mVirtualDisplayDevices.remove(appToken);
+        VirtualDisplayDevice device = mVirtualDisplayDevices.get(appToken);
         if (device != null) {
             Slog.i(TAG, "Virtual display device released because media projection stopped: "
                     + device.mName);
@@ -223,6 +229,8 @@
         final String mName;
         private final int mFlags;
         private final Callback mCallback;
+        @Nullable private final IMediaProjection mProjection;
+        @Nullable private final IMediaProjectionCallback mMediaProjectionCallback;
 
         private int mWidth;
         private int mHeight;
@@ -240,7 +248,8 @@
 
         public VirtualDisplayDevice(IBinder displayToken, IBinder appToken,
                 int ownerUid, String ownerPackageName, Surface surface, int flags,
-                Callback callback, String uniqueId, int uniqueIndex,
+                Callback callback, IMediaProjection projection,
+                IMediaProjectionCallback mediaProjectionCallback, String uniqueId, int uniqueIndex,
                 VirtualDisplayConfig virtualDisplayConfig) {
             super(VirtualDisplayAdapter.this, displayToken, uniqueId, getContext());
             mAppToken = appToken;
@@ -254,6 +263,8 @@
             mSurface = surface;
             mFlags = flags;
             mCallback = callback;
+            mProjection = projection;
+            mMediaProjectionCallback = mediaProjectionCallback;
             mDisplayState = Display.STATE_UNKNOWN;
             mPendingChanges |= PENDING_SURFACE_CHANGE;
             mUniqueIndex = uniqueIndex;
@@ -269,6 +280,13 @@
                 Slog.i(TAG, "Virtual display device released because application token died: "
                     + mOwnerPackageName);
                 destroyLocked(false);
+                if (mProjection != null && mMediaProjectionCallback != null) {
+                    try {
+                        mProjection.unregisterCallback(mMediaProjectionCallback);
+                    } catch (RemoteException e) {
+                        Slog.w(TAG, "Failed to unregister callback in binderDied", e);
+                    }
+                }
                 sendDisplayDeviceEventLocked(this, DISPLAY_DEVICE_EVENT_REMOVED);
             }
         }
@@ -279,6 +297,13 @@
                 mSurface = null;
             }
             SurfaceControl.destroyDisplay(getDisplayTokenLocked());
+            if (mProjection != null && mMediaProjectionCallback != null) {
+                try {
+                    mProjection.unregisterCallback(mMediaProjectionCallback);
+                } catch (RemoteException e) {
+                    Slog.w(TAG, "Failed to unregister callback in destroy", e);
+                }
+            }
             if (binderAlive) {
                 mCallback.dispatchDisplayStopped();
             }
diff --git a/services/core/java/com/android/server/display/color/ColorDisplayService.java b/services/core/java/com/android/server/display/color/ColorDisplayService.java
index 8de150a..223b8c1 100644
--- a/services/core/java/com/android/server/display/color/ColorDisplayService.java
+++ b/services/core/java/com/android/server/display/color/ColorDisplayService.java
@@ -956,6 +956,8 @@
                         R.array.config_availableColorModes);
                 if (availableColorModes.length > 0) {
                     colorMode = availableColorModes[0];
+                } else {
+                    colorMode = NOT_SET;
                 }
             }
         }
diff --git a/services/core/java/com/android/server/dreams/DreamManagerService.java b/services/core/java/com/android/server/dreams/DreamManagerService.java
index 63c5456..7b60345 100644
--- a/services/core/java/com/android/server/dreams/DreamManagerService.java
+++ b/services/core/java/com/android/server/dreams/DreamManagerService.java
@@ -23,6 +23,7 @@
 
 import static com.android.server.wm.ActivityInterceptorCallback.DREAM_MANAGER_ORDERED_ID;
 
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.app.ActivityManager;
 import android.app.TaskInfo;
@@ -45,6 +46,9 @@
 import android.os.Looper;
 import android.os.PowerManager;
 import android.os.PowerManagerInternal;
+import android.os.RemoteException;
+import android.os.ResultReceiver;
+import android.os.ShellCallback;
 import android.os.SystemClock;
 import android.os.SystemProperties;
 import android.os.UserHandle;
@@ -221,6 +225,10 @@
         }
     }
 
+    protected void requestStartDreamFromShell() {
+        requestDreamInternal();
+    }
+
     private void requestDreamInternal() {
         // Ask the power manager to nap.  It will eventually call back into
         // startDream() if/when it is appropriate to start dreaming.
@@ -275,6 +283,10 @@
         }
     }
 
+    protected void requestStopDreamFromShell() {
+        stopDreamInternal(true, "stopping dream from shell");
+    }
+
     private void stopDreamInternal(boolean immediate, String reason) {
         synchronized (mLock) {
             stopDreamLocked(immediate, reason);
@@ -593,6 +605,14 @@
             }
         }
 
+        public void onShellCommand(@Nullable FileDescriptor in, @Nullable FileDescriptor out,
+                @Nullable FileDescriptor err,
+                @NonNull String[] args, @Nullable ShellCallback callback,
+                @NonNull ResultReceiver resultReceiver) throws RemoteException {
+            new DreamShellCommand(DreamManagerService.this, mPowerManager)
+                    .exec(this, in, out, err, args, callback, resultReceiver);
+        }
+
         @Override // Binder call
         public ComponentName[] getDreamComponents() {
             return getDreamComponentsForUser(UserHandle.getCallingUserId());
diff --git a/services/core/java/com/android/server/dreams/DreamShellCommand.java b/services/core/java/com/android/server/dreams/DreamShellCommand.java
new file mode 100644
index 0000000..eae7e80
--- /dev/null
+++ b/services/core/java/com/android/server/dreams/DreamShellCommand.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.dreams;
+
+import android.annotation.NonNull;
+import android.os.Binder;
+import android.os.PowerManager;
+import android.os.Process;
+import android.os.ShellCommand;
+import android.os.SystemClock;
+import android.text.TextUtils;
+import android.util.Slog;
+
+import java.io.PrintWriter;
+
+/**
+ * {@link DreamShellCommand} allows accessing dream functionality, including toggling dream state.
+ */
+public class DreamShellCommand extends ShellCommand {
+    private static final boolean DEBUG = true;
+    private static final String TAG = "DreamShellCommand";
+    private final @NonNull DreamManagerService mService;
+    private final @NonNull PowerManager mPowerManager;
+
+    DreamShellCommand(@NonNull DreamManagerService service, @NonNull PowerManager powerManager) {
+        mService = service;
+        mPowerManager = powerManager;
+    }
+
+    @Override
+    public int onCommand(String cmd) {
+        final int callingUid = Binder.getCallingUid();
+        if (callingUid != Process.ROOT_UID) {
+            Slog.e(TAG, "Must be root before calling Dream shell commands");
+            return -1;
+        }
+
+        if (TextUtils.isEmpty(cmd)) {
+            return super.handleDefaultCommands(cmd);
+        }
+        if (DEBUG) {
+            Slog.d(TAG, "onCommand:" + cmd);
+        }
+
+        switch (cmd) {
+            case "start-dreaming":
+                return startDreaming();
+            case "stop-dreaming":
+                return stopDreaming();
+            default:
+                return super.handleDefaultCommands(cmd);
+        }
+    }
+
+    private int startDreaming() {
+        mPowerManager.wakeUp(SystemClock.uptimeMillis(),
+                PowerManager.WAKE_REASON_PLUGGED_IN, "shell:cmd:android.service.dreams:DREAM");
+        mService.requestStartDreamFromShell();
+        return 0;
+    }
+
+    private int stopDreaming() {
+        mService.requestStopDreamFromShell();
+        return 0;
+    }
+
+    @Override
+    public void onHelp() {
+        PrintWriter pw = getOutPrintWriter();
+        pw.println("Dream manager (dreams) commands:");
+        pw.println("  help");
+        pw.println("      Print this help text.");
+        pw.println("  start-dreaming");
+        pw.println("      Start the currently configured dream.");
+        pw.println("  stop-dreaming");
+        pw.println("      Stops any active dream");
+    }
+}
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index 1a1c265f..9d15ed3 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
@@ -5754,10 +5754,12 @@
         @Override
         public void onImeParentChanged() {
             synchronized (ImfLock.class) {
-                // Hide the IME method menu when the IME surface parent will change in
-                // case seeing the dialog dismiss flickering during the next focused window
-                // starting the input connection.
-                mMenuController.hideInputMethodMenu();
+                // Hide the IME method menu only when the IME surface parent is changed by the
+                // input target changed, in case seeing the dialog dismiss flickering during
+                // the next focused window starting the input connection.
+                if (mLastImeTargetWindow != mCurFocusedWindow) {
+                    mMenuController.hideInputMethodMenu();
+                }
             }
         }
 
diff --git a/services/core/java/com/android/server/location/contexthub/ContextHubClientBroker.java b/services/core/java/com/android/server/location/contexthub/ContextHubClientBroker.java
index 9fb1d8e..625f193 100644
--- a/services/core/java/com/android/server/location/contexthub/ContextHubClientBroker.java
+++ b/services/core/java/com/android/server/location/contexthub/ContextHubClientBroker.java
@@ -871,10 +871,9 @@
         if (!mPendingIntentRequest.hasPendingIntent() && mRegistered) {
             mClientManager.unregisterClient(mHostEndPointId);
             mRegistered = false;
+            mAppOpsManager.stopWatchingMode(this);
+            mContextHubProxy.onHostEndpointDisconnected(mHostEndPointId);
         }
-        mAppOpsManager.stopWatchingMode(this);
-
-        mContextHubProxy.onHostEndpointDisconnected(mHostEndPointId);
     }
 
     private String authStateToString(@ContextHubManager.AuthorizationState int state) {
diff --git a/services/core/java/com/android/server/location/contexthub/ContextHubService.java b/services/core/java/com/android/server/location/contexthub/ContextHubService.java
index 111621d..5b2188a 100644
--- a/services/core/java/com/android/server/location/contexthub/ContextHubService.java
+++ b/services/core/java/com/android/server/location/contexthub/ContextHubService.java
@@ -1183,11 +1183,11 @@
             }
         } else {
             Log.d(TAG, "BT adapter not available. Defaulting to disabled");
-            if (mIsBtMainEnabled) {
+            if (forceUpdate || mIsBtMainEnabled) {
                 mIsBtMainEnabled = false;
                 mContextHubWrapper.onBtMainSettingChanged(mIsBtMainEnabled);
             }
-            if (mIsBtScanningEnabled) {
+            if (forceUpdate || mIsBtScanningEnabled) {
                 mIsBtScanningEnabled = false;
                 mContextHubWrapper.onBtScanningSettingChanged(mIsBtScanningEnabled);
             }
diff --git a/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java b/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java
index 098e8f7..7d12ede 100644
--- a/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java
+++ b/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java
@@ -46,7 +46,6 @@
 import android.util.ArrayMap;
 import android.util.Slog;
 import android.view.ContentRecordingSession;
-import android.window.WindowContainerToken;
 
 import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.DumpUtils;
@@ -433,7 +432,7 @@
         private IBinder mToken;
         private IBinder.DeathRecipient mDeathEater;
         private boolean mRestoreSystemAlertWindow;
-        private WindowContainerToken mTaskRecordingWindowContainerToken = null;
+        private IBinder mLaunchCookie = null;
 
         MediaProjection(int type, int uid, String packageName, int targetSdkVersion,
                 boolean isPrivileged) {
@@ -609,14 +608,13 @@
         }
 
         @Override // Binder call
-        public void setTaskRecordingWindowContainerToken(WindowContainerToken token) {
-            // TODO(b/221417940) set the task id to record from sysui, for the package chosen.
-            mTaskRecordingWindowContainerToken = token;
+        public void setLaunchCookie(IBinder launchCookie) {
+            mLaunchCookie = launchCookie;
         }
 
         @Override // Binder call
-        public WindowContainerToken getTaskRecordingWindowContainerToken() {
-            return mTaskRecordingWindowContainerToken;
+        public IBinder getLaunchCookie() {
+            return mLaunchCookie;
         }
 
         public MediaProjectionInfo getProjectionInfo() {
diff --git a/services/core/java/com/android/server/notification/ManagedServices.java b/services/core/java/com/android/server/notification/ManagedServices.java
index e6bc796..5a40b30 100644
--- a/services/core/java/com/android/server/notification/ManagedServices.java
+++ b/services/core/java/com/android/server/notification/ManagedServices.java
@@ -1447,6 +1447,16 @@
         }
     }
 
+    @VisibleForTesting
+    void reregisterService(final ComponentName cn, final int userId) {
+        // If rebinding a package that died, ensure it still has permission
+        // after the rebind delay
+        if (isPackageOrComponentAllowed(cn.getPackageName(), userId)
+                || isPackageOrComponentAllowed(cn.flattenToString(), userId)) {
+            registerService(cn, userId);
+        }
+    }
+
     /**
      * Inject a system service into the management list.
      */
@@ -1545,12 +1555,9 @@
                         unbindService(this, name, userid);
                         if (!mServicesRebinding.contains(servicesBindingTag)) {
                             mServicesRebinding.add(servicesBindingTag);
-                            mHandler.postDelayed(new Runnable() {
-                                    @Override
-                                    public void run() {
-                                        registerService(name, userid);
-                                    }
-                               }, ON_BINDING_DIED_REBIND_DELAY_MS);
+                            mHandler.postDelayed(() ->
+                                    reregisterService(name, userid),
+                                    ON_BINDING_DIED_REBIND_DELAY_MS);
                         } else {
                             Slog.v(TAG, getCaption() + " not rebinding in user " + userid
                                     + " as a previous rebind attempt was made: " + name);
diff --git a/services/core/java/com/android/server/notification/NotificationHistoryDatabase.java b/services/core/java/com/android/server/notification/NotificationHistoryDatabase.java
index a9b2570..7fe2f81 100644
--- a/services/core/java/com/android/server/notification/NotificationHistoryDatabase.java
+++ b/services/core/java/com/android/server/notification/NotificationHistoryDatabase.java
@@ -16,15 +16,8 @@
 
 package com.android.server.notification;
 
-import android.app.AlarmManager;
 import android.app.NotificationHistory;
 import android.app.NotificationHistory.HistoricalNotification;
-import android.app.PendingIntent;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.net.Uri;
 import android.os.Handler;
 import android.util.AtomicFile;
 import android.util.Slog;
@@ -60,18 +53,9 @@
     private static final String TAG = "NotiHistoryDatabase";
     private static final boolean DEBUG = NotificationManagerService.DBG;
     private static final int HISTORY_RETENTION_DAYS = 1;
-    private static final int HISTORY_RETENTION_MS = 24 * 60 * 60 * 1000;
     private static final long WRITE_BUFFER_INTERVAL_MS = 1000 * 60 * 20;
     private static final long INVALID_FILE_TIME_MS = -1;
 
-    private static final String ACTION_HISTORY_DELETION =
-            NotificationHistoryDatabase.class.getSimpleName() + ".CLEANUP";
-    private static final int REQUEST_CODE_DELETION = 1;
-    private static final String SCHEME_DELETION = "delete";
-    private static final String EXTRA_KEY = "key";
-
-    private final Context mContext;
-    private final AlarmManager mAlarmManager;
     private final Object mLock = new Object();
     private final Handler mFileWriteHandler;
     @VisibleForTesting
@@ -87,9 +71,7 @@
     @VisibleForTesting
     NotificationHistory mBuffer;
 
-    public NotificationHistoryDatabase(Context context, Handler fileWriteHandler, File dir) {
-        mContext = context;
-        mAlarmManager = context.getSystemService(AlarmManager.class);
+    public NotificationHistoryDatabase(Handler fileWriteHandler, File dir) {
         mCurrentVersion = DEFAULT_CURRENT_VERSION;
         mFileWriteHandler = fileWriteHandler;
         mVersionFile = new File(dir, "version");
@@ -97,11 +79,6 @@
         mHistoryFiles = new LinkedList<>();
         mBuffer = new NotificationHistory();
         mWriteBufferRunnable = new WriteBufferRunnable();
-
-        IntentFilter deletionFilter = new IntentFilter(ACTION_HISTORY_DELETION);
-        deletionFilter.addDataScheme(SCHEME_DELETION);
-        mContext.registerReceiver(mFileCleanupReceiver, deletionFilter,
-                Context.RECEIVER_EXPORTED_UNAUDITED);
     }
 
     public void init() {
@@ -117,7 +94,7 @@
 
             checkVersionAndBuildLocked();
             indexFilesLocked();
-            prune(HISTORY_RETENTION_DAYS, System.currentTimeMillis());
+            prune();
         }
     }
 
@@ -246,7 +223,14 @@
     }
 
     /**
-     * Remove any files that are too old and schedule jobs to clean up the rest
+     * Remove any files that are too old.
+     */
+    void prune() {
+        prune(HISTORY_RETENTION_DAYS, System.currentTimeMillis());
+    }
+
+    /**
+     * Remove any files that are too old.
      */
     void prune(final int retentionDays, final long currentTimeMillis) {
         synchronized (mLock) {
@@ -265,10 +249,6 @@
 
                 if (creationTime <= retentionBoundary.getTimeInMillis()) {
                     deleteFile(currentOldestFile);
-                } else {
-                    // all remaining files are newer than the cut off; schedule jobs to delete
-                    scheduleDeletion(
-                            currentOldestFile.getBaseFile(), creationTime, retentionDays);
                 }
             }
         }
@@ -306,26 +286,6 @@
         removeFilePathFromHistory(file.getBaseFile().getAbsolutePath());
     }
 
-    private void scheduleDeletion(File file, long creationTime, int retentionDays) {
-        final long deletionTime = creationTime + (retentionDays * HISTORY_RETENTION_MS);
-        scheduleDeletion(file, deletionTime);
-    }
-
-    private void scheduleDeletion(File file, long deletionTime) {
-        if (DEBUG) {
-            Slog.d(TAG, "Scheduling deletion for " + file.getName() + " at " + deletionTime);
-        }
-        final PendingIntent pi = PendingIntent.getBroadcast(mContext,
-                REQUEST_CODE_DELETION,
-                new Intent(ACTION_HISTORY_DELETION)
-                        .setData(new Uri.Builder().scheme(SCHEME_DELETION)
-                                .appendPath(file.getAbsolutePath()).build())
-                        .addFlags(Intent.FLAG_RECEIVER_FOREGROUND)
-                        .putExtra(EXTRA_KEY, file.getAbsolutePath()),
-                PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
-        mAlarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, deletionTime, pi);
-    }
-
     private void writeLocked(AtomicFile file, NotificationHistory notifications)
             throws IOException {
         FileOutputStream fos = file.startWrite();
@@ -355,12 +315,6 @@
         }
     }
 
-    public void unregisterFileCleanupReceiver() {
-        if(mContext != null) {
-            mContext.unregisterReceiver(mFileCleanupReceiver);
-        }
-    }
-
     private static long safeParseLong(String fileName) {
         // AtomicFile will create copies of the numeric files with ".new" and ".bak"
         // over the course of its processing. If these files still exist on boot we need to clean
@@ -372,40 +326,15 @@
         }
     }
 
-    private final BroadcastReceiver mFileCleanupReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            String action = intent.getAction();
-            if (action == null) {
-                return;
-            }
-            if (ACTION_HISTORY_DELETION.equals(action)) {
-                try {
-                    synchronized (mLock) {
-                        final String filePath = intent.getStringExtra(EXTRA_KEY);
-                        AtomicFile fileToDelete = new AtomicFile(new File(filePath));
-                        if (DEBUG) {
-                            Slog.d(TAG, "Removed " + fileToDelete.getBaseFile().getName());
-                        }
-                        fileToDelete.delete();
-                        removeFilePathFromHistory(filePath);
-                    }
-                } catch (Exception e) {
-                    Slog.e(TAG, "Failed to delete notification history file", e);
-                }
-            }
-        }
-    };
-
     final class WriteBufferRunnable implements Runnable {
 
         @Override
         public void run() {
             long time = System.currentTimeMillis();
-            run(time, new AtomicFile(new File(mHistoryDir, String.valueOf(time))));
+            run(new AtomicFile(new File(mHistoryDir, String.valueOf(time))));
         }
 
-        void run(long time, AtomicFile file) {
+        void run(AtomicFile file) {
             synchronized (mLock) {
                 if (DEBUG) Slog.d(TAG, "WriteBufferRunnable "
                         + file.getBaseFile().getAbsolutePath());
@@ -413,8 +342,6 @@
                     writeLocked(file, mBuffer);
                     mHistoryFiles.addFirst(file);
                     mBuffer = new NotificationHistory();
-
-                    scheduleDeletion(file.getBaseFile(), time, HISTORY_RETENTION_DAYS);
                 } catch (IOException e) {
                     Slog.e(TAG, "Failed to write buffer to disk. not flushing buffer", e);
                 }
diff --git a/services/core/java/com/android/server/notification/NotificationHistoryDatabaseFactory.java b/services/core/java/com/android/server/notification/NotificationHistoryDatabaseFactory.java
index d9e0d79..0d975cc 100644
--- a/services/core/java/com/android/server/notification/NotificationHistoryDatabaseFactory.java
+++ b/services/core/java/com/android/server/notification/NotificationHistoryDatabaseFactory.java
@@ -35,6 +35,6 @@
         if(sTestingNotificationHistoryDb != null) {
             return sTestingNotificationHistoryDb;
         }
-        return new NotificationHistoryDatabase(context, handler, rootDir);
+        return new NotificationHistoryDatabase(handler, rootDir);
     }
 }
diff --git a/services/core/java/com/android/server/notification/NotificationHistoryJobService.java b/services/core/java/com/android/server/notification/NotificationHistoryJobService.java
new file mode 100644
index 0000000..3776ad7
--- /dev/null
+++ b/services/core/java/com/android/server/notification/NotificationHistoryJobService.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.notification;
+
+import static android.app.job.JobScheduler.RESULT_SUCCESS;
+
+import android.app.job.JobInfo;
+import android.app.job.JobParameters;
+import android.app.job.JobScheduler;
+import android.app.job.JobService;
+import android.content.ComponentName;
+import android.content.Context;
+import android.os.CancellationSignal;
+import android.util.Slog;
+
+import com.android.server.LocalServices;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * This service runs every twenty minutes to ensure the retention policy for notification history
+ * data.
+ */
+public class NotificationHistoryJobService extends JobService {
+    private final static String TAG = "NotificationHistoryJob";
+    private static final long JOB_RUN_INTERVAL = TimeUnit.MINUTES.toMillis(20);
+
+    static final int BASE_JOB_ID = 237039804;
+
+    static void scheduleJob(Context context) {
+        JobScheduler jobScheduler = context.getSystemService(JobScheduler.class);
+        if (jobScheduler.getPendingJob(BASE_JOB_ID) == null) {
+            ComponentName component =
+                    new ComponentName(context, NotificationHistoryJobService.class);
+            JobInfo newJob = new JobInfo.Builder(BASE_JOB_ID, component)
+                    .setRequiresDeviceIdle(false)
+                    .setPeriodic(JOB_RUN_INTERVAL)
+                    .build();
+            if (jobScheduler.schedule(newJob) != RESULT_SUCCESS) {
+                Slog.w(TAG, "Failed to schedule history cleanup job");
+            }
+        }
+    }
+
+    private CancellationSignal mSignal;
+
+    @Override
+    public boolean onStartJob(JobParameters params) {
+        mSignal = new CancellationSignal();
+        new Thread(() -> {
+            NotificationManagerInternal nmInternal =
+                    LocalServices.getService(NotificationManagerInternal.class);
+            nmInternal.cleanupHistoryFiles();
+            jobFinished(params, mSignal.isCanceled());
+        }).start();
+        return true;
+    }
+
+    @Override
+    public boolean onStopJob(JobParameters params) {
+        if (mSignal != null) {
+            mSignal.cancel();
+        }
+        return false;
+    }
+}
+
diff --git a/services/core/java/com/android/server/notification/NotificationHistoryManager.java b/services/core/java/com/android/server/notification/NotificationHistoryManager.java
index 0aacd13..6a46048 100644
--- a/services/core/java/com/android/server/notification/NotificationHistoryManager.java
+++ b/services/core/java/com/android/server/notification/NotificationHistoryManager.java
@@ -84,6 +84,11 @@
     }
 
     void onBootPhaseAppsCanStart() {
+        try {
+            NotificationHistoryJobService.scheduleJob(mContext);
+        } catch (Throwable e) {
+            Slog.e(TAG, "Failed to schedule cleanup job", e);
+        }
         mSettingsObserver.observe();
     }
 
@@ -151,6 +156,24 @@
         }
     }
 
+    public void cleanupHistoryFiles() {
+        synchronized (mLock) {
+            int n = mUserUnlockedStates.size();
+            for (int i = 0;  i < n; i++) {
+                // cleanup old files for currently unlocked users. User are additionally cleaned
+                // on unlock in NotificationHistoryDatabase.init().
+                if (mUserUnlockedStates.valueAt(i)) {
+                    final NotificationHistoryDatabase userHistory =
+                            mUserState.get(mUserUnlockedStates.keyAt(i));
+                    if (userHistory == null) {
+                        continue;
+                    }
+                    userHistory.prune();
+                }
+            }
+        }
+    }
+
     public void deleteNotificationHistoryItem(String pkg, int uid, long postedTime) {
         synchronized (mLock) {
             int userId = UserHandle.getUserId(uid);
@@ -288,7 +311,6 @@
 
     private void disableHistory(NotificationHistoryDatabase userHistory, @UserIdInt int userId) {
         userHistory.disableHistory();
-        userHistory.unregisterFileCleanupReceiver();
 
         mUserPendingHistoryDisables.put(userId, false);
         mHistoryEnabled.put(userId, false);
diff --git a/services/core/java/com/android/server/notification/NotificationManagerInternal.java b/services/core/java/com/android/server/notification/NotificationManagerInternal.java
index 8a62736..bc38856 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerInternal.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerInternal.java
@@ -45,4 +45,6 @@
 
     /** Send a notification to the user prompting them to review their notification permissions. */
     void sendReviewPermissionsNotification();
+
+    void cleanupHistoryFiles();
 }
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index d1e0b04..793f592d 100755
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -517,7 +517,7 @@
     private ActivityManagerInternal mAmi;
     private IPackageManager mPackageManager;
     private PackageManager mPackageManagerClient;
-    private PackageManagerInternal mPackageManagerInternal;
+    PackageManagerInternal mPackageManagerInternal;
     private PermissionPolicyInternal mPermissionPolicyInternal;
     AudioManager mAudioManager;
     AudioManagerInternal mAudioManagerInternal;
@@ -1794,6 +1794,7 @@
                 if (userHandle >= 0) {
                     cancelAllNotificationsInt(MY_UID, MY_PID, null, null, 0, 0, true, userHandle,
                             REASON_PROFILE_TURNED_OFF, null);
+                    mSnoozeHelper.clearData(userHandle);
                 }
             } else if (action.equals(Intent.ACTION_USER_PRESENT)) {
                 // turn off LED when user passes through lock screen
@@ -2458,11 +2459,11 @@
         SnoozeHelper snoozeHelper = new SnoozeHelper(getContext(), (userId, r, muteOnReturn) -> {
             try {
                 if (DBG) {
-                    Slog.d(TAG, "Reposting " + r.getKey());
+                    Slog.d(TAG, "Reposting " + r.getKey() + " " + muteOnReturn);
                 }
                 enqueueNotificationInternal(r.getSbn().getPackageName(), r.getSbn().getOpPkg(),
                         r.getSbn().getUid(), r.getSbn().getInitialPid(), r.getSbn().getTag(),
-                        r.getSbn().getId(),  r.getSbn().getNotification(), userId, true);
+                        r.getSbn().getId(),  r.getSbn().getNotification(), userId, muteOnReturn);
             } catch (Exception e) {
                 Slog.e(TAG, "Cannot un-snooze notification", e);
             }
@@ -2732,7 +2733,7 @@
     }
 
     @Override
-    public void onUserUnlocking(@NonNull TargetUser user) {
+    public void onUserUnlocked(@NonNull TargetUser user) {
         mHandler.post(() -> {
             Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "notifHistoryUnlockUser");
             try {
@@ -6344,6 +6345,12 @@
                     Settings.Global.REVIEW_PERMISSIONS_NOTIFICATION_STATE,
                     NotificationManagerService.REVIEW_NOTIF_STATE_RESHOWN);
         }
+
+        @Override
+        public void cleanupHistoryFiles() {
+            checkCallerIsSystem();
+            mHistoryManager.cleanupHistoryFiles();
+        }
     };
 
     int getNumNotificationChannelsForPackage(String pkg, int uid, boolean includeDeleted) {
@@ -6757,9 +6764,8 @@
 
     protected void doChannelWarningToast(int forUid, CharSequence toastText) {
         Binder.withCleanCallingIdentity(() -> {
-            final int defaultWarningEnabled = Build.IS_DEBUGGABLE ? 1 : 0;
             final boolean warningEnabled = Settings.Global.getInt(getContext().getContentResolver(),
-                    Settings.Global.SHOW_NOTIFICATION_CHANNEL_WARNINGS, defaultWarningEnabled) != 0;
+                    Settings.Global.SHOW_NOTIFICATION_CHANNEL_WARNINGS, 0) != 0;
             if (warningEnabled) {
                 Toast toast = Toast.makeText(getContext(), mHandler.getLooper(), toastText,
                         Toast.LENGTH_SHORT);
@@ -7030,6 +7036,7 @@
 
         @GuardedBy("mNotificationLock")
         void snoozeLocked(NotificationRecord r) {
+            final List<NotificationRecord> recordsToSnooze = new ArrayList<>();
             if (r.getSbn().isGroup()) {
                 final List<NotificationRecord> groupNotifications =
                         findCurrentAndSnoozedGroupNotificationsLocked(
@@ -7038,8 +7045,8 @@
                 if (r.getNotification().isGroupSummary()) {
                     // snooze all children
                     for (int i = 0; i < groupNotifications.size(); i++) {
-                        if (mKey != groupNotifications.get(i).getKey()) {
-                            snoozeNotificationLocked(groupNotifications.get(i));
+                        if (!mKey.equals(groupNotifications.get(i).getKey())) {
+                            recordsToSnooze.add(groupNotifications.get(i));
                         }
                     }
                 } else {
@@ -7049,8 +7056,8 @@
                         if (groupNotifications.size() == 2) {
                             // snooze summary and the one child
                             for (int i = 0; i < groupNotifications.size(); i++) {
-                                if (mKey != groupNotifications.get(i).getKey()) {
-                                    snoozeNotificationLocked(groupNotifications.get(i));
+                                if (!mKey.equals(groupNotifications.get(i).getKey())) {
+                                    recordsToSnooze.add(groupNotifications.get(i));
                                 }
                             }
                         }
@@ -7058,7 +7065,15 @@
                 }
             }
             // snooze the notification
-            snoozeNotificationLocked(r);
+            recordsToSnooze.add(r);
+
+            if (mSnoozeHelper.canSnooze(recordsToSnooze.size())) {
+                for (int i = 0; i < recordsToSnooze.size(); i++) {
+                    snoozeNotificationLocked(recordsToSnooze.get(i));
+                }
+            } else {
+                Log.w(TAG, "Cannot snooze " + r.getKey() + ": too many snoozed notifications");
+            }
 
         }
 
@@ -9798,7 +9813,7 @@
      * notifications visible to the given listener.
      */
     @GuardedBy("mNotificationLock")
-    private NotificationRankingUpdate makeRankingUpdateLocked(ManagedServiceInfo info) {
+    NotificationRankingUpdate makeRankingUpdateLocked(ManagedServiceInfo info) {
         final int N = mNotificationList.size();
         final ArrayList<NotificationListenerService.Ranking> rankings = new ArrayList<>();
 
@@ -10913,7 +10928,7 @@
                 TrimCache trimCache = new TrimCache(sbn);
 
                 for (final ManagedServiceInfo info : getServices()) {
-                    boolean sbnVisible = isVisibleToListener(sbn, r. getNotificationType(), info);
+                    boolean sbnVisible = isVisibleToListener(sbn, r.getNotificationType(), info);
                     boolean oldSbnVisible = (oldSbn != null)
                             && isVisibleToListener(oldSbn, old.getNotificationType(), info);
                     // This notification hasn't been and still isn't visible -> ignore.
@@ -10943,12 +10958,17 @@
                                 info, oldSbnLightClone, update, null, REASON_USER_STOPPED));
                         continue;
                     }
-
                     // Grant access before listener is notified
                     final int targetUserId = (info.userid == UserHandle.USER_ALL)
                             ? UserHandle.USER_SYSTEM : info.userid;
                     updateUriPermissions(r, old, info.component.getPackageName(), targetUserId);
 
+                    mPackageManagerInternal.grantImplicitAccess(
+                            targetUserId, null /* intent */,
+                            UserHandle.getAppId(info.uid),
+                            sbn.getUid(),
+                            false /* direct */, false /* retainOnUpdate */);
+
                     final StatusBarNotification sbnToPost = trimCache.ForListener(info);
                     mHandler.post(() -> notifyPosted(info, sbnToPost, update));
                 }
diff --git a/services/core/java/com/android/server/notification/PermissionHelper.java b/services/core/java/com/android/server/notification/PermissionHelper.java
index 09ed567..12324bff 100644
--- a/services/core/java/com/android/server/notification/PermissionHelper.java
+++ b/services/core/java/com/android/server/notification/PermissionHelper.java
@@ -16,6 +16,8 @@
 
 package com.android.server.notification;
 
+import static android.content.pm.PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT;
+import static android.content.pm.PackageManager.FLAG_PERMISSION_USER_FIXED;
 import static android.content.pm.PackageManager.FLAG_PERMISSION_USER_SET;
 import static android.content.pm.PackageManager.GET_PERMISSIONS;
 import static android.content.pm.PackageManager.PERMISSION_GRANTED;
@@ -175,12 +177,14 @@
                 mPermManager.revokeRuntimePermission(packageName, NOTIFICATION_PERMISSION,
                         userId, TAG);
             }
+            int flagMask = FLAG_PERMISSION_USER_SET | FLAG_PERMISSION_USER_FIXED;
+            flagMask = userSet || !grant ? flagMask | FLAG_PERMISSION_GRANTED_BY_DEFAULT : flagMask;
             if (userSet) {
                 mPermManager.updatePermissionFlags(packageName, NOTIFICATION_PERMISSION,
-                        FLAG_PERMISSION_USER_SET, FLAG_PERMISSION_USER_SET, true, userId);
+                        flagMask, FLAG_PERMISSION_USER_SET, true, userId);
             } else {
                 mPermManager.updatePermissionFlags(packageName, NOTIFICATION_PERMISSION,
-                        0, FLAG_PERMISSION_USER_SET, true, userId);
+                        flagMask, 0, true, userId);
             }
         } catch (RemoteException e) {
             Slog.e(TAG, "Could not reach system server", e);
diff --git a/services/core/java/com/android/server/notification/SnoozeHelper.java b/services/core/java/com/android/server/notification/SnoozeHelper.java
index 7f265df..61936df 100644
--- a/services/core/java/com/android/server/notification/SnoozeHelper.java
+++ b/services/core/java/com/android/server/notification/SnoozeHelper.java
@@ -16,7 +16,6 @@
 package com.android.server.notification;
 
 import android.annotation.NonNull;
-import android.annotation.UserIdInt;
 import android.app.AlarmManager;
 import android.app.PendingIntent;
 import android.content.BroadcastReceiver;
@@ -25,7 +24,6 @@
 import android.content.IntentFilter;
 import android.net.Uri;
 import android.os.Binder;
-import android.os.SystemClock;
 import android.os.UserHandle;
 import android.service.notification.StatusBarNotification;
 import android.util.ArrayMap;
@@ -38,18 +36,15 @@
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto;
-import com.android.internal.util.XmlUtils;
 import com.android.server.pm.PackageManagerService;
 
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
-import org.xmlpull.v1.XmlSerializer;
 
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -59,15 +54,15 @@
 /**
  * NotificationManagerService helper for handling snoozed notifications.
  */
-public class SnoozeHelper {
+public final class SnoozeHelper {
     public static final int XML_SNOOZED_NOTIFICATION_VERSION = 1;
 
+    static final int CONCURRENT_SNOOZE_LIMIT = 500;
+
     protected static final String XML_TAG_NAME = "snoozed-notifications";
 
     private static final String XML_SNOOZED_NOTIFICATION = "notification";
     private static final String XML_SNOOZED_NOTIFICATION_CONTEXT = "context";
-    private static final String XML_SNOOZED_NOTIFICATION_PKG = "pkg";
-    private static final String XML_SNOOZED_NOTIFICATION_USER_ID = "user-id";
     private static final String XML_SNOOZED_NOTIFICATION_KEY = "key";
     //the time the snoozed notification should be reposted
     private static final String XML_SNOOZED_NOTIFICATION_TIME = "time";
@@ -89,24 +84,19 @@
     private AlarmManager mAm;
     private final ManagedServices.UserProfiles mUserProfiles;
 
-    // User id | package name : notification key : record.
-    private ArrayMap<String, ArrayMap<String, NotificationRecord>>
-            mSnoozedNotifications = new ArrayMap<>();
-    // User id | package name : notification key : time-milliseconds .
+    // notification key : record.
+    private ArrayMap<String, NotificationRecord> mSnoozedNotifications = new ArrayMap<>();
+    // notification key : time-milliseconds .
     // This member stores persisted snoozed notification trigger times. it persists through reboots
     // It should have the notifications that haven't expired or re-posted yet
-    private final ArrayMap<String, ArrayMap<String, Long>>
-            mPersistedSnoozedNotifications = new ArrayMap<>();
-    // User id | package name : notification key : creation ID .
+    private final ArrayMap<String, Long> mPersistedSnoozedNotifications = new ArrayMap<>();
+    // notification key : creation ID.
     // This member stores persisted snoozed notification trigger context for the assistant
     // it persists through reboots.
     // It should have the notifications that haven't expired or re-posted yet
-    private final ArrayMap<String, ArrayMap<String, String>>
+    private final ArrayMap<String, String>
             mPersistedSnoozedNotificationsWithContext = new ArrayMap<>();
-    // notification key : package.
-    private ArrayMap<String, String> mPackages = new ArrayMap<>();
-    // key : userId
-    private ArrayMap<String, Integer> mUsers = new ArrayMap<>();
+
     private Callback mCallback;
 
     private final Object mLock = new Object();
@@ -123,27 +113,20 @@
         mUserProfiles = userProfiles;
     }
 
-    private String getPkgKey(@UserIdInt int userId, String pkg) {
-        return userId + "|" + pkg;
-    }
-
-    void cleanupPersistedContext(String key){
+    protected boolean canSnooze(int numberToSnooze) {
         synchronized (mLock) {
-            int userId = mUsers.get(key);
-            String pkg = mPackages.get(key);
-            removeRecordLocked(pkg, key, userId, mPersistedSnoozedNotificationsWithContext);
+            if ((mSnoozedNotifications.size() + numberToSnooze) > CONCURRENT_SNOOZE_LIMIT) {
+                return false;
+            }
         }
+        return true;
     }
 
     @NonNull
     protected Long getSnoozeTimeForUnpostedNotification(int userId, String pkg, String key) {
         Long time = null;
         synchronized (mLock) {
-           ArrayMap<String, Long> snoozed =
-                   mPersistedSnoozedNotifications.get(getPkgKey(userId, pkg));
-           if (snoozed != null) {
-               time = snoozed.get(key);
-           }
+            time = mPersistedSnoozedNotifications.get(key);
         }
         if (time == null) {
             time = 0L;
@@ -153,29 +136,26 @@
 
     protected String getSnoozeContextForUnpostedNotification(int userId, String pkg, String key) {
         synchronized (mLock) {
-            ArrayMap<String, String> snoozed =
-                    mPersistedSnoozedNotificationsWithContext.get(getPkgKey(userId, pkg));
-            if (snoozed != null) {
-                return snoozed.get(key);
-            }
+            return mPersistedSnoozedNotificationsWithContext.get(key);
         }
-        return null;
     }
 
     protected boolean isSnoozed(int userId, String pkg, String key) {
         synchronized (mLock) {
-            return mSnoozedNotifications.containsKey(getPkgKey(userId, pkg))
-                    && mSnoozedNotifications.get(getPkgKey(userId, pkg)).containsKey(key);
+            return mSnoozedNotifications.containsKey(key);
         }
     }
 
     protected Collection<NotificationRecord> getSnoozed(int userId, String pkg) {
         synchronized (mLock) {
-            if (mSnoozedNotifications.containsKey(getPkgKey(userId, pkg))) {
-                return mSnoozedNotifications.get(getPkgKey(userId, pkg)).values();
+            ArrayList snoozed = new ArrayList();
+            for (NotificationRecord r : mSnoozedNotifications.values()) {
+                if (r.getUserId() == userId && r.getSbn().getPackageName().equals(pkg)) {
+                    snoozed.add(r);
+                }
             }
+            return snoozed;
         }
-        return Collections.EMPTY_LIST;
     }
 
     @NonNull
@@ -183,15 +163,11 @@
             String groupKey, Integer userId) {
         ArrayList<NotificationRecord> records =  new ArrayList<>();
         synchronized (mLock) {
-            ArrayMap<String, NotificationRecord> allRecords =
-                    mSnoozedNotifications.get(getPkgKey(userId, pkg));
-            if (allRecords != null) {
-                for (int i = 0; i < allRecords.size(); i++) {
-                    NotificationRecord r = allRecords.valueAt(i);
-                    String currentGroupKey = r.getSbn().getGroup();
-                    if (Objects.equals(currentGroupKey, groupKey)) {
-                        records.add(r);
-                    }
+            for (int i = 0; i < mSnoozedNotifications.size(); i++) {
+                NotificationRecord r = mSnoozedNotifications.valueAt(i);
+                if (r.getSbn().getPackageName().equals(pkg) && r.getUserId() == userId
+                        && Objects.equals(r.getSbn().getGroup(), groupKey)) {
+                    records.add(r);
                 }
             }
         }
@@ -200,31 +176,16 @@
 
     protected NotificationRecord getNotification(String key) {
         synchronized (mLock) {
-            if (!mUsers.containsKey(key) || !mPackages.containsKey(key)) {
-                Slog.w(TAG, "Snoozed data sets no longer agree for " + key);
-                return null;
-            }
-            int userId = mUsers.get(key);
-            String pkg = mPackages.get(key);
-            ArrayMap<String, NotificationRecord> snoozed =
-                    mSnoozedNotifications.get(getPkgKey(userId, pkg));
-            if (snoozed == null) {
-                return null;
-            }
-            return snoozed.get(key);
+            return mSnoozedNotifications.get(key);
         }
     }
 
     protected @NonNull List<NotificationRecord> getSnoozed() {
         synchronized (mLock) {
-            // caller filters records based on the current user profiles and listener access, so just
-            // return everything
+            // caller filters records based on the current user profiles and listener access,
+            // so just return everything
             List<NotificationRecord> snoozed = new ArrayList<>();
-            for (String userPkgKey : mSnoozedNotifications.keySet()) {
-                ArrayMap<String, NotificationRecord> snoozedRecords =
-                        mSnoozedNotifications.get(userPkgKey);
-                snoozed.addAll(snoozedRecords.values());
-            }
+            snoozed.addAll(mSnoozedNotifications.values());
             return snoozed;
         }
     }
@@ -233,15 +194,13 @@
      * Snoozes a notification and schedules an alarm to repost at that time.
      */
     protected void snooze(NotificationRecord record, long duration) {
-        String pkg = record.getSbn().getPackageName();
         String key = record.getKey();
-        int userId = record.getUser().getIdentifier();
 
         snooze(record);
-        scheduleRepost(pkg, key, userId, duration);
+        scheduleRepost(key, duration);
         Long activateAt = System.currentTimeMillis() + duration;
         synchronized (mLock) {
-            storeRecordLocked(pkg, key, userId, mPersistedSnoozedNotifications, activateAt);
+            mPersistedSnoozedNotifications.put(key, activateAt);
         }
     }
 
@@ -249,66 +208,33 @@
      * Records a snoozed notification.
      */
     protected void snooze(NotificationRecord record, String contextId) {
-        int userId = record.getUser().getIdentifier();
         if (contextId != null) {
             synchronized (mLock) {
-                storeRecordLocked(record.getSbn().getPackageName(), record.getKey(),
-                        userId, mPersistedSnoozedNotificationsWithContext, contextId);
+                mPersistedSnoozedNotificationsWithContext.put(record.getKey(), contextId);
             }
         }
         snooze(record);
     }
 
     private void snooze(NotificationRecord record) {
-        int userId = record.getUser().getIdentifier();
         if (DEBUG) {
             Slog.d(TAG, "Snoozing " + record.getKey());
         }
         synchronized (mLock) {
-            storeRecordLocked(record.getSbn().getPackageName(), record.getKey(),
-                    userId, mSnoozedNotifications, record);
+            mSnoozedNotifications.put(record.getKey(), record);
         }
     }
 
-    private <T> void storeRecordLocked(String pkg, String key, Integer userId,
-            ArrayMap<String, ArrayMap<String, T>> targets, T object) {
-
-        mPackages.put(key, pkg);
-        mUsers.put(key, userId);
-        ArrayMap<String, T> keyToValue = targets.get(getPkgKey(userId, pkg));
-        if (keyToValue == null) {
-            keyToValue = new ArrayMap<>();
-        }
-        keyToValue.put(key, object);
-        targets.put(getPkgKey(userId, pkg), keyToValue);
-    }
-
-    private <T> T removeRecordLocked(String pkg, String key, Integer userId,
-            ArrayMap<String, ArrayMap<String, T>> targets) {
-        T object = null;
-        ArrayMap<String, T> keyToValue = targets.get(getPkgKey(userId, pkg));
-        if (keyToValue == null) {
-            return null;
-        }
-        object = keyToValue.remove(key);
-        if (keyToValue.size() == 0) {
-            targets.remove(getPkgKey(userId, pkg));
-        }
-        return object;
-    }
-
     protected boolean cancel(int userId, String pkg, String tag, int id) {
         synchronized (mLock) {
-            ArrayMap<String, NotificationRecord> recordsForPkg =
-                    mSnoozedNotifications.get(getPkgKey(userId, pkg));
-            if (recordsForPkg != null) {
-                final Set<Map.Entry<String, NotificationRecord>> records = recordsForPkg.entrySet();
-                for (Map.Entry<String, NotificationRecord> record : records) {
-                    final StatusBarNotification sbn = record.getValue().getSbn();
-                    if (Objects.equals(sbn.getTag(), tag) && sbn.getId() == id) {
-                        record.getValue().isCanceled = true;
-                        return true;
-                    }
+            final Set<Map.Entry<String, NotificationRecord>> records =
+                    mSnoozedNotifications.entrySet();
+            for (Map.Entry<String, NotificationRecord> record : records) {
+                final StatusBarNotification sbn = record.getValue().getSbn();
+                if (sbn.getPackageName().equals(pkg) && sbn.getUserId() == userId
+                        && Objects.equals(sbn.getTag(), tag) && sbn.getId() == id) {
+                    record.getValue().isCanceled = true;
+                    return true;
                 }
             }
         }
@@ -325,11 +251,9 @@
             if (includeCurrentProfiles) {
                 userIds = mUserProfiles.getCurrentProfileIds();
             }
-            for (ArrayMap<String, NotificationRecord> snoozedRecords : mSnoozedNotifications.values()) {
-                for (NotificationRecord r : snoozedRecords.values()) {
-                    if (userIds.binarySearch(r.getUserId()) >= 0) {
-                        r.isCanceled = true;
-                    }
+            for (NotificationRecord r : mSnoozedNotifications.values()) {
+                if (userIds.binarySearch(r.getUserId()) >= 0) {
+                    r.isCanceled = true;
                 }
             }
         }
@@ -337,14 +261,12 @@
 
     protected boolean cancel(int userId, String pkg) {
         synchronized (mLock) {
-            ArrayMap<String, NotificationRecord> records =
-                    mSnoozedNotifications.get(getPkgKey(userId, pkg));
-            if (records == null) {
-                return false;
-            }
-            int N = records.size();
-            for (int i = 0; i < N; i++) {
-                records.valueAt(i).isCanceled = true;
+            int n = mSnoozedNotifications.size();
+            for (int i = 0; i < n; i++) {
+                final NotificationRecord r = mSnoozedNotifications.valueAt(i);
+                if (r.getSbn().getPackageName().equals(pkg) && r.getUserId() == userId) {
+                    r.isCanceled = true;
+                }
             }
             return true;
         }
@@ -355,20 +277,17 @@
      */
     protected void update(int userId, NotificationRecord record) {
         synchronized (mLock) {
-            ArrayMap<String, NotificationRecord> records =
-                    mSnoozedNotifications.get(getPkgKey(userId, record.getSbn().getPackageName()));
-            if (records == null) {
-                return;
+            if (mSnoozedNotifications.containsKey(record.getKey())) {
+                mSnoozedNotifications.put(record.getKey(), record);
             }
-            records.put(record.getKey(), record);
         }
     }
 
     protected void repost(String key, boolean muteOnReturn) {
         synchronized (mLock) {
-            Integer userId = mUsers.get(key);
-            if (userId != null) {
-                repost(key, userId, muteOnReturn);
+            final NotificationRecord r = mSnoozedNotifications.get(key);
+            if (r != null) {
+                repost(key, r.getUserId(), muteOnReturn);
             }
         }
     }
@@ -376,43 +295,30 @@
     protected void repost(String key, int userId, boolean muteOnReturn) {
         NotificationRecord record;
         synchronized (mLock) {
-            final String pkg = mPackages.remove(key);
-            mUsers.remove(key);
-            removeRecordLocked(pkg, key, userId, mPersistedSnoozedNotifications);
-            removeRecordLocked(pkg, key, userId, mPersistedSnoozedNotificationsWithContext);
-            ArrayMap<String, NotificationRecord> records =
-                    mSnoozedNotifications.get(getPkgKey(userId, pkg));
-            if (records == null) {
-                return;
-            }
-            record = records.remove(key);
-
+            mPersistedSnoozedNotifications.remove(key);
+            mPersistedSnoozedNotificationsWithContext.remove(key);
+            record = mSnoozedNotifications.remove(key);
         }
 
         if (record != null && !record.isCanceled) {
-            final PendingIntent pi = createPendingIntent(
-                    record.getSbn().getPackageName(), record.getKey(), userId);
+            final PendingIntent pi = createPendingIntent(record.getKey());
             mAm.cancel(pi);
             MetricsLogger.action(record.getLogMaker()
                     .setCategory(MetricsProto.MetricsEvent.NOTIFICATION_SNOOZED)
                     .setType(MetricsProto.MetricsEvent.TYPE_OPEN));
-            mCallback.repost(userId, record, muteOnReturn);
+            mCallback.repost(record.getUserId(), record, muteOnReturn);
         }
     }
 
     protected void repostGroupSummary(String pkg, int userId, String groupKey) {
         synchronized (mLock) {
-            ArrayMap<String, NotificationRecord> recordsByKey
-                    = mSnoozedNotifications.get(getPkgKey(userId, pkg));
-            if (recordsByKey == null) {
-                return;
-            }
-
             String groupSummaryKey = null;
-            int N = recordsByKey.size();
-            for (int i = 0; i < N; i++) {
-                final NotificationRecord potentialGroupSummary = recordsByKey.valueAt(i);
-                if (potentialGroupSummary.getSbn().isGroup()
+            int n = mSnoozedNotifications.size();
+            for (int i = 0; i < n; i++) {
+                final NotificationRecord potentialGroupSummary = mSnoozedNotifications.valueAt(i);
+                if (potentialGroupSummary.getSbn().getPackageName().equals(pkg)
+                        && potentialGroupSummary.getUserId() == userId
+                        && potentialGroupSummary.getSbn().isGroup()
                         && potentialGroupSummary.getNotification().isGroupSummary()
                         && groupKey.equals(potentialGroupSummary.getGroupKey())) {
                     groupSummaryKey = potentialGroupSummary.getKey();
@@ -421,16 +327,14 @@
             }
 
             if (groupSummaryKey != null) {
-                NotificationRecord record = recordsByKey.remove(groupSummaryKey);
-                mPackages.remove(groupSummaryKey);
-                mUsers.remove(groupSummaryKey);
+                NotificationRecord record = mSnoozedNotifications.remove(groupSummaryKey);
 
                 if (record != null && !record.isCanceled) {
                     Runnable runnable = () -> {
                         MetricsLogger.action(record.getLogMaker()
                                 .setCategory(MetricsProto.MetricsEvent.NOTIFICATION_SNOOZED)
                                 .setType(MetricsProto.MetricsEvent.TYPE_OPEN));
-                        mCallback.repost(userId, record, false);
+                        mCallback.repost(record.getUserId(), record, false);
                     };
                     runnable.run();
                 }
@@ -440,20 +344,17 @@
 
     protected void clearData(int userId, String pkg) {
         synchronized (mLock) {
-            ArrayMap<String, NotificationRecord> records =
-                    mSnoozedNotifications.get(getPkgKey(userId, pkg));
-            if (records == null) {
-                return;
-            }
-            for (int i = records.size() - 1; i >= 0; i--) {
-                final NotificationRecord r = records.removeAt(i);
-                if (r != null) {
-                    mPackages.remove(r.getKey());
-                    mUsers.remove(r.getKey());
+            int n = mSnoozedNotifications.size();
+            for (int i = n - 1; i >= 0; i--) {
+                final NotificationRecord record = mSnoozedNotifications.valueAt(i);
+                if (record.getUserId() == userId && record.getSbn().getPackageName().equals(pkg)) {
+                    mSnoozedNotifications.removeAt(i);
+                    mPersistedSnoozedNotificationsWithContext.remove(record.getKey());
+                    mPersistedSnoozedNotifications.remove(record.getKey());
                     Runnable runnable = () -> {
-                        final PendingIntent pi = createPendingIntent(pkg, r.getKey(), userId);
+                        final PendingIntent pi = createPendingIntent(record.getKey());
                         mAm.cancel(pi);
-                        MetricsLogger.action(r.getLogMaker()
+                        MetricsLogger.action(record.getLogMaker()
                                 .setCategory(MetricsProto.MetricsEvent.NOTIFICATION_SNOOZED)
                                 .setType(MetricsProto.MetricsEvent.TYPE_DISMISS));
                     };
@@ -463,47 +364,61 @@
         }
     }
 
-    private PendingIntent createPendingIntent(String pkg, String key, int userId) {
+    protected void clearData(int userId) {
+        synchronized (mLock) {
+            int n = mSnoozedNotifications.size();
+            for (int i = n - 1; i >= 0; i--) {
+                final NotificationRecord record = mSnoozedNotifications.valueAt(i);
+                if (record.getUserId() == userId) {
+                    mSnoozedNotifications.removeAt(i);
+                    mPersistedSnoozedNotificationsWithContext.remove(record.getKey());
+                    mPersistedSnoozedNotifications.remove(record.getKey());
+
+                    Runnable runnable = () -> {
+                        final PendingIntent pi = createPendingIntent(record.getKey());
+                        mAm.cancel(pi);
+                        MetricsLogger.action(record.getLogMaker()
+                                .setCategory(MetricsProto.MetricsEvent.NOTIFICATION_SNOOZED)
+                                .setType(MetricsProto.MetricsEvent.TYPE_DISMISS));
+                    };
+                    runnable.run();
+                }
+            }
+        }
+    }
+
+    private PendingIntent createPendingIntent(String key) {
         return PendingIntent.getBroadcast(mContext,
                 REQUEST_CODE_REPOST,
                 new Intent(REPOST_ACTION)
                         .setPackage(PackageManagerService.PLATFORM_PACKAGE_NAME)
                         .setData(new Uri.Builder().scheme(REPOST_SCHEME).appendPath(key).build())
                         .addFlags(Intent.FLAG_RECEIVER_FOREGROUND)
-                        .putExtra(EXTRA_KEY, key)
-                        .putExtra(EXTRA_USER_ID, userId),
+                        .putExtra(EXTRA_KEY, key),
                 PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
     }
 
     public void scheduleRepostsForPersistedNotifications(long currentTime) {
         synchronized (mLock) {
-            for (ArrayMap<String, Long> snoozed : mPersistedSnoozedNotifications.values()) {
-                for (int i = 0; i < snoozed.size(); i++) {
-                    String key = snoozed.keyAt(i);
-                    Long time = snoozed.valueAt(i);
-                    String pkg = mPackages.get(key);
-                    Integer userId = mUsers.get(key);
-                    if (time == null || pkg == null || userId == null) {
-                        Slog.w(TAG, "data out of sync: " + time + "|" + pkg + "|" + userId);
-                        continue;
-                    }
-                    if (time != null && time > currentTime) {
-                        scheduleRepostAtTime(pkg, key, userId, time);
-                    }
+            for (int i = 0; i < mPersistedSnoozedNotifications.size(); i++) {
+                String key = mPersistedSnoozedNotifications.keyAt(i);
+                Long time = mPersistedSnoozedNotifications.valueAt(i);
+                if (time != null && time > currentTime) {
+                    scheduleRepostAtTime(key, time);
                 }
             }
         }
     }
 
-    private void scheduleRepost(String pkg, String key, int userId, long duration) {
-        scheduleRepostAtTime(pkg, key, userId, System.currentTimeMillis() + duration);
+    private void scheduleRepost(String key, long duration) {
+        scheduleRepostAtTime(key, System.currentTimeMillis() + duration);
     }
 
-    private void scheduleRepostAtTime(String pkg, String key, int userId, long time) {
+    private void scheduleRepostAtTime(String key, long time) {
         Runnable runnable = () -> {
             final long identity = Binder.clearCallingIdentity();
             try {
-                final PendingIntent pi = createPendingIntent(pkg, key, userId);
+                final PendingIntent pi = createPendingIntent(key);
                 mAm.cancel(pi);
                 if (DEBUG) Slog.d(TAG, "Scheduling evaluate for " + new Date(time));
                 mAm.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, time, pi);
@@ -517,37 +432,14 @@
     public void dump(PrintWriter pw, NotificationManagerService.DumpFilter filter) {
         synchronized (mLock) {
             pw.println("\n  Snoozed notifications:");
-            for (String userPkgKey : mSnoozedNotifications.keySet()) {
+            for (String key : mSnoozedNotifications.keySet()) {
                 pw.print(INDENT);
-                pw.println("key: " + userPkgKey);
-                ArrayMap<String, NotificationRecord> snoozedRecords =
-                        mSnoozedNotifications.get(userPkgKey);
-                Set<String> snoozedKeys = snoozedRecords.keySet();
-                for (String key : snoozedKeys) {
-                    pw.print(INDENT);
-                    pw.print(INDENT);
-                    pw.print(INDENT);
-                    pw.println(key);
-                }
+                pw.println("key: " + key);
             }
             pw.println("\n Pending snoozed notifications");
-            for (String userPkgKey : mPersistedSnoozedNotifications.keySet()) {
+            for (String key : mPersistedSnoozedNotifications.keySet()) {
                 pw.print(INDENT);
-                pw.println("key: " + userPkgKey);
-                ArrayMap<String, Long> snoozedRecords =
-                        mPersistedSnoozedNotifications.get(userPkgKey);
-                if (snoozedRecords == null) {
-                    continue;
-                }
-                Set<String> snoozedKeys = snoozedRecords.keySet();
-                for (String key : snoozedKeys) {
-                    pw.print(INDENT);
-                    pw.print(INDENT);
-                    pw.print(INDENT);
-                    pw.print(key);
-                    pw.print(INDENT);
-                    pw.println(snoozedRecords.get(key));
-                }
+                pw.println("key: " + key + " until: " + mPersistedSnoozedNotifications.get(key));
             }
         }
     }
@@ -578,37 +470,22 @@
         void insert(T t) throws IOException;
     }
 
-    private <T> void writeXml(TypedXmlSerializer out,
-            ArrayMap<String, ArrayMap<String, T>> targets, String tag,
-            Inserter<T> attributeInserter)
-            throws IOException {
-        final int M = targets.size();
-        for (int i = 0; i < M; i++) {
+    private <T> void writeXml(TypedXmlSerializer out, ArrayMap<String, T> targets, String tag,
+            Inserter<T> attributeInserter) throws IOException {
+        for (int j = 0; j < targets.size(); j++) {
+            String key = targets.keyAt(j);
             // T is a String (snoozed until context) or Long (snoozed until time)
-            ArrayMap<String, T> keyToValue = targets.valueAt(i);
-            for (int j = 0; j < keyToValue.size(); j++) {
-                String key = keyToValue.keyAt(j);
-                T value = keyToValue.valueAt(j);
-                String pkg = mPackages.get(key);
-                Integer userId = mUsers.get(key);
+            T value = targets.valueAt(j);
 
-                if (pkg == null || userId == null) {
-                    Slog.w(TAG, "pkg " + pkg + " or user " + userId + " missing for " + key);
-                    continue;
-                }
+            out.startTag(null, tag);
 
-                out.startTag(null, tag);
+            attributeInserter.insert(value);
 
-                attributeInserter.insert(value);
+            out.attributeInt(null, XML_SNOOZED_NOTIFICATION_VERSION_LABEL,
+                    XML_SNOOZED_NOTIFICATION_VERSION);
+            out.attribute(null, XML_SNOOZED_NOTIFICATION_KEY, key);
 
-                out.attributeInt(null, XML_SNOOZED_NOTIFICATION_VERSION_LABEL,
-                        XML_SNOOZED_NOTIFICATION_VERSION);
-                out.attribute(null, XML_SNOOZED_NOTIFICATION_KEY, key);
-                out.attribute(null, XML_SNOOZED_NOTIFICATION_PKG, pkg);
-                out.attributeInt(null, XML_SNOOZED_NOTIFICATION_USER_ID, userId);
-
-                out.endTag(null, tag);
-            }
+            out.endTag(null, tag);
         }
     }
 
@@ -628,16 +505,12 @@
                         == XML_SNOOZED_NOTIFICATION_VERSION) {
                 try {
                     final String key = parser.getAttributeValue(null, XML_SNOOZED_NOTIFICATION_KEY);
-                    final String pkg = parser.getAttributeValue(null, XML_SNOOZED_NOTIFICATION_PKG);
-                    final int userId = parser.getAttributeInt(
-                            null, XML_SNOOZED_NOTIFICATION_USER_ID, UserHandle.USER_ALL);
                     if (tag.equals(XML_SNOOZED_NOTIFICATION)) {
                         final Long time = parser.getAttributeLong(
                                 null, XML_SNOOZED_NOTIFICATION_TIME, 0);
                         if (time > currentTime) { //only read new stuff
                             synchronized (mLock) {
-                                storeRecordLocked(
-                                        pkg, key, userId, mPersistedSnoozedNotifications, time);
+                                mPersistedSnoozedNotifications.put(key, time);
                             }
                         }
                     }
@@ -645,9 +518,7 @@
                         final String creationId = parser.getAttributeValue(
                                 null, XML_SNOOZED_NOTIFICATION_CONTEXT_ID);
                         synchronized (mLock) {
-                            storeRecordLocked(
-                                    pkg, key, userId, mPersistedSnoozedNotificationsWithContext,
-                                    creationId);
+                            mPersistedSnoozedNotificationsWithContext.put(key, creationId);
                         }
                     }
                 } catch (Exception e) {
diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java
index 9e0c975..6135fe8 100644
--- a/services/core/java/com/android/server/notification/ZenModeHelper.java
+++ b/services/core/java/com/android/server/notification/ZenModeHelper.java
@@ -121,6 +121,7 @@
     protected final RingerModeDelegate mRingerModeDelegate = new
             RingerModeDelegate();
     @VisibleForTesting protected final ZenModeConditions mConditions;
+    Object mConfigsLock = new Object();
     @VisibleForTesting final SparseArray<ZenModeConfig> mConfigs = new SparseArray<>();
     private final Metrics mMetrics = new Metrics();
     private final ConditionProviders.Config mServiceConfig;
@@ -153,7 +154,9 @@
         mDefaultConfig = readDefaultConfig(mContext.getResources());
         updateDefaultAutomaticRuleNames();
         mConfig = mDefaultConfig.copy();
-        mConfigs.put(UserHandle.USER_SYSTEM, mConfig);
+        synchronized (mConfigsLock) {
+            mConfigs.put(UserHandle.USER_SYSTEM, mConfig);
+        }
         mConsolidatedPolicy = mConfig.toNotificationPolicy();
 
         mSettingsObserver = new SettingsObserver(mHandler);
@@ -233,7 +236,9 @@
     public void onUserRemoved(int user) {
         if (user < UserHandle.USER_SYSTEM) return;
         if (DEBUG) Log.d(TAG, "onUserRemoved u=" + user);
-        mConfigs.remove(user);
+        synchronized (mConfigsLock) {
+            mConfigs.remove(user);
+        }
     }
 
     public void onUserUnlocked(int user) {
@@ -248,7 +253,12 @@
         if (mUser == user || user < UserHandle.USER_SYSTEM) return;
         mUser = user;
         if (DEBUG) Log.d(TAG, reason + " u=" + user);
-        ZenModeConfig config = mConfigs.get(user);
+        ZenModeConfig config = null;
+        synchronized (mConfigsLock) {
+            if (mConfigs.get(user) != null) {
+                config = mConfigs.get(user).copy();
+            }
+        }
         if (config == null) {
             if (DEBUG) Log.d(TAG, reason + " generating default config for user " + user);
             config = mDefaultConfig.copy();
@@ -330,7 +340,8 @@
             int newRuleInstanceCount = getCurrentInstanceCount(automaticZenRule.getOwner())
                     + getCurrentInstanceCount(automaticZenRule.getConfigurationActivity())
                     + 1;
-            if (newRuleInstanceCount > RULE_LIMIT_PER_PACKAGE
+            int newPackageRuleCount = getPackageRuleCount(pkg) + 1;
+            if (newPackageRuleCount > RULE_LIMIT_PER_PACKAGE
                     || (ruleInstanceLimit > 0 && ruleInstanceLimit < newRuleInstanceCount)) {
                 throw new IllegalArgumentException("Rule instance limit exceeded");
             }
@@ -511,6 +522,23 @@
         return count;
     }
 
+    // Equivalent method to getCurrentInstanceCount, but for all rules associated with a specific
+    // package rather than a condition provider service or activity.
+    private int getPackageRuleCount(String pkg) {
+        if (pkg == null) {
+            return 0;
+        }
+        int count = 0;
+        synchronized (mConfig) {
+            for (ZenRule rule : mConfig.automaticRules.values()) {
+                if (pkg.equals(rule.getPkg())) {
+                    count++;
+                }
+            }
+        }
+        return count;
+    }
+
     public boolean canManageAutomaticZenRule(ZenRule rule) {
         final int callingUid = Binder.getCallingUid();
         if (callingUid == 0 || callingUid == Process.SYSTEM_UID) {
@@ -685,9 +713,11 @@
         pw.println(Global.zenModeToString(mZenMode));
         pw.print(prefix);
         pw.println("mConsolidatedPolicy=" + mConsolidatedPolicy.toString());
-        final int N = mConfigs.size();
-        for (int i = 0; i < N; i++) {
-            dump(pw, prefix, "mConfigs[u=" + mConfigs.keyAt(i) + "]", mConfigs.valueAt(i));
+        synchronized(mConfigsLock) {
+            final int N = mConfigs.size();
+            for (int i = 0; i < N; i++) {
+                dump(pw, prefix, "mConfigs[u=" + mConfigs.keyAt(i) + "]", mConfigs.valueAt(i));
+            }
         }
         pw.print(prefix); pw.print("mUser="); pw.println(mUser);
         synchronized (mConfig) {
@@ -787,7 +817,7 @@
 
     public void writeXml(TypedXmlSerializer out, boolean forBackup, Integer version, int userId)
             throws IOException {
-        synchronized (mConfigs) {
+        synchronized (mConfigsLock) {
             final int n = mConfigs.size();
             for (int i = 0; i < n; i++) {
                 if (forBackup && mConfigs.keyAt(i) != userId) {
@@ -883,14 +913,18 @@
             }
             if (config.user != mUser) {
                 // simply store away for background users
-                mConfigs.put(config.user, config);
+                synchronized (mConfigsLock) {
+                    mConfigs.put(config.user, config);
+                }
                 if (DEBUG) Log.d(TAG, "setConfigLocked: store config for user " + config.user);
                 return true;
             }
             // handle CPS backed conditions - danger! may modify config
             mConditions.evaluateConfig(config, null, false /*processSubscriptions*/);
 
-            mConfigs.put(config.user, config);
+            synchronized (mConfigsLock) {
+                mConfigs.put(config.user, config);
+            }
             if (DEBUG) Log.d(TAG, "setConfigLocked reason=" + reason, new Throwable());
             ZenLog.traceConfig(reason, mConfig, config);
 
@@ -1211,7 +1245,7 @@
      * Generate pulled atoms about do not disturb configurations.
      */
     public void pullRules(List<StatsEvent> events) {
-        synchronized (mConfig) {
+        synchronized (mConfigsLock) {
             final int numConfigs = mConfigs.size();
             for (int i = 0; i < numConfigs; i++) {
                 final int user = mConfigs.keyAt(i);
diff --git a/services/core/java/com/android/server/pm/InitAppsHelper.java b/services/core/java/com/android/server/pm/InitAppsHelper.java
index f6b22bc..a03a16a 100644
--- a/services/core/java/com/android/server/pm/InitAppsHelper.java
+++ b/services/core/java/com/android/server/pm/InitAppsHelper.java
@@ -113,7 +113,7 @@
             mScanFlags = scanFlags;
         }
         mSystemParseFlags = mPm.getDefParseFlags() | ParsingPackageUtils.PARSE_IS_SYSTEM_DIR;
-        mSystemScanFlags = scanFlags | SCAN_AS_SYSTEM;
+        mSystemScanFlags = mScanFlags | SCAN_AS_SYSTEM;
         mExecutorService = ParallelPackageParser.makeExecutorService();
     }
 
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 94e8ec5..85b0149 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -1836,8 +1836,6 @@
         mAppDataHelper = new AppDataHelper(this);
         mInstallPackageHelper = new InstallPackageHelper(this, mAppDataHelper);
         mRemovePackageHelper = new RemovePackageHelper(this, mAppDataHelper);
-        mInitAppsHelper = new InitAppsHelper(this, mApexManager, mInstallPackageHelper,
-                mInjector.getSystemPartitions());
         mDeletePackageHelper = new DeletePackageHelper(this, mRemovePackageHelper,
                 mAppDataHelper);
         mSharedLibraries.setDeletePackageHelper(mDeletePackageHelper);
@@ -1958,6 +1956,9 @@
                         + ver.fingerprint + " to " + PackagePartitions.FINGERPRINT);
             }
 
+            mInitAppsHelper = new InitAppsHelper(this, mApexManager, mInstallPackageHelper,
+                mInjector.getSystemPartitions());
+
             // when upgrading from pre-M, promote system app permissions from install to runtime
             mPromoteSystemApps =
                     mIsUpgrade && ver.sdkVersion <= Build.VERSION_CODES.LOLLIPOP_MR1;
diff --git a/services/core/java/com/android/server/pm/ScanPackageUtils.java b/services/core/java/com/android/server/pm/ScanPackageUtils.java
index 0dc188b..46f0dbc 100644
--- a/services/core/java/com/android/server/pm/ScanPackageUtils.java
+++ b/services/core/java/com/android/server/pm/ScanPackageUtils.java
@@ -427,8 +427,7 @@
         pkgSetting.setLastModifiedTime(scanFileTime);
         // TODO(b/135203078): Remove, move to constructor
         pkgSetting.setPkg(parsedPackage)
-                .setFlags(PackageInfoUtils.appInfoFlags(parsedPackage, pkgSetting))
-                .setPrivateFlags(
+                .setPkgFlags(PackageInfoUtils.appInfoFlags(parsedPackage, pkgSetting),
                         PackageInfoUtils.appInfoPrivateFlags(parsedPackage, pkgSetting));
         if (parsedPackage.getLongVersionCode() != pkgSetting.getVersionCode()) {
             pkgSetting.setLongVersionCode(parsedPackage.getLongVersionCode());
diff --git a/services/core/java/com/android/server/pm/SettingBase.java b/services/core/java/com/android/server/pm/SettingBase.java
index b952f80..61a251e 100644
--- a/services/core/java/com/android/server/pm/SettingBase.java
+++ b/services/core/java/com/android/server/pm/SettingBase.java
@@ -146,6 +146,17 @@
         return this;
     }
 
+    /**
+     * Unconditionally set both mPkgFlags and mPkgPrivateFlags.
+     * Should not be used outside pkgSetting initialization or update.
+     */
+    SettingBase setPkgFlags(int flags, int privateFlags) {
+        this.mPkgFlags = flags;
+        this.mPkgPrivateFlags = privateFlags;
+        onChanged();
+        return this;
+    }
+
     public int getFlags() {
         return mPkgFlags;
     }
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 6400502..7437b145 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -987,8 +987,7 @@
                     // Update new package state.
                     .setLastModifiedTime(codePath.lastModified())
                     .setDomainSetId(domainSetId);
-            pkgSetting.setFlags(pkgFlags)
-                    .setPrivateFlags(pkgPrivateFlags);
+            pkgSetting.setPkgFlags(pkgFlags, pkgPrivateFlags);
         } else {
             pkgSetting = new PackageSetting(pkgName, realPkgName, codePath,
                     legacyNativeLibraryPath, primaryCpuAbi, secondaryCpuAbi,
@@ -1175,15 +1174,15 @@
                     .setUsesStaticLibrariesVersions(null);
         }
 
-        // These two flags are preserved from the existing PackageSetting. Copied from prior code,
-        // unclear if this is actually necessary.
-        boolean wasExternalStorage = (pkgSetting.getFlags()
-                & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0;
-        if (wasExternalStorage) {
-            pkgFlags |= ApplicationInfo.FLAG_EXTERNAL_STORAGE;
-        } else {
-            pkgFlags &= ~ApplicationInfo.FLAG_EXTERNAL_STORAGE;
-        }
+        // If what we are scanning is a system (and possibly privileged) package,
+        // then make it so, regardless of whether it was previously installed only
+        // in the data partition. Reset first.
+        int newPkgFlags = pkgSetting.getFlags();
+        newPkgFlags &= ~ApplicationInfo.FLAG_SYSTEM;
+        newPkgFlags |= pkgFlags & ApplicationInfo.FLAG_SYSTEM;
+        // Only set pkgFlags.
+        pkgSetting.setPkgFlags(newPkgFlags, pkgSetting.getPrivateFlags());
+
         boolean wasRequiredForSystemUser = (pkgSetting.getPrivateFlags()
                 & ApplicationInfo.PRIVATE_FLAG_REQUIRED_FOR_SYSTEM_USER) != 0;
         if (wasRequiredForSystemUser) {
@@ -1191,9 +1190,7 @@
         } else {
             pkgPrivateFlags &= ~ApplicationInfo.PRIVATE_FLAG_REQUIRED_FOR_SYSTEM_USER;
         }
-
-        pkgSetting.setFlags(pkgFlags)
-                .setPrivateFlags(pkgPrivateFlags);
+        pkgSetting.setPrivateFlags(pkgPrivateFlags);
     }
 
     /**
diff --git a/services/core/java/com/android/server/pm/ShortcutLauncher.java b/services/core/java/com/android/server/pm/ShortcutLauncher.java
index c0c2349..c6a7dd7 100644
--- a/services/core/java/com/android/server/pm/ShortcutLauncher.java
+++ b/services/core/java/com/android/server/pm/ShortcutLauncher.java
@@ -144,8 +144,8 @@
             final ArraySet<String> prevSet = mPinnedShortcuts.get(pu);
 
             // Actually pin shortcuts.
-            // This logic here is to make sure a launcher cannot pin a shortcut that is floating
-            // (i.e. not dynamic nor manifest but is pinned) and pinned by another launcher.
+            // This logic here is to make sure a launcher cannot pin a shortcut that is not dynamic
+            // nor long-lived nor manifest but is pinned.
             // In this case, technically the shortcut doesn't exist to this launcher, so it can't
             // pin it.
             // (Maybe unnecessarily strict...)
@@ -158,7 +158,7 @@
                 if (si == null) {
                     continue;
                 }
-                if (si.isDynamic()
+                if (si.isDynamic() || si.isLongLived()
                         || si.isManifestShortcut()
                         || (prevSet != null && prevSet.contains(id))
                         || forPinRequest) {
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index 9de485b..701ac73c 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -88,6 +88,7 @@
 import android.provider.Settings;
 import android.security.GateKeeper;
 import android.service.gatekeeper.IGateKeeperService;
+import android.service.voice.VoiceInteractionManagerInternal;
 import android.stats.devicepolicy.DevicePolicyEnums;
 import android.text.TextUtils;
 import android.util.ArrayMap;
@@ -1878,6 +1879,44 @@
     }
 
     @Override
+    public boolean setUserEphemeral(@UserIdInt int userId, boolean enableEphemeral) {
+        checkCreateUsersPermission("update ephemeral user flag");
+        UserData userToUpdate = null;
+        synchronized (mPackagesLock) {
+            synchronized (mUsersLock) {
+                final UserData userData = mUsers.get(userId);
+                if (userData == null) {
+                    Slog.e(LOG_TAG, "User not found for setting ephemeral mode: u" + userId);
+                    return false;
+                }
+                boolean isEphemeralUser = (userData.info.flags & UserInfo.FLAG_EPHEMERAL) != 0;
+                boolean isEphemeralOnCreateUser =
+                        (userData.info.flags & UserInfo.FLAG_EPHEMERAL_ON_CREATE) != 0;
+                // when user is created in ephemeral mode via FLAG_EPHEMERAL
+                // its state cannot be changed to non ephemeral.
+                // FLAG_EPHEMERAL_ON_CREATE is used to keep track of this state
+                if (isEphemeralOnCreateUser && !enableEphemeral) {
+                    Slog.e(LOG_TAG, "Failed to change user state to non-ephemeral for user "
+                            + userId);
+                    return false;
+                }
+                if (isEphemeralUser != enableEphemeral) {
+                    if (enableEphemeral) {
+                        userData.info.flags |= UserInfo.FLAG_EPHEMERAL;
+                    } else {
+                        userData.info.flags &= ~UserInfo.FLAG_EPHEMERAL;
+                    }
+                    userToUpdate = userData;
+                }
+            }
+            if (userToUpdate != null) {
+                writeUserLP(userToUpdate);
+            }
+        }
+        return true;
+    }
+
+    @Override
     public void setUserIcon(@UserIdInt int userId, Bitmap bitmap) {
         try {
             checkManageUsersPermission("update users");
@@ -3984,6 +4023,10 @@
                         flags &= ~UserInfo.FLAG_EPHEMERAL;
                     }
 
+                    if ((flags & UserInfo.FLAG_EPHEMERAL) != 0) {
+                        flags |= UserInfo.FLAG_EPHEMERAL_ON_CREATE;
+                    }
+
                     userInfo = new UserInfo(userId, name, null, flags, userType);
                     userInfo.serialNumber = mNextSerialNumber++;
                     userInfo.creationTime = getCreationTime();
@@ -4210,6 +4253,11 @@
         Binder.withCleanCallingIdentity(() -> {
             mPm.onNewUserCreated(preCreatedUser.id, /* convertedFromPreCreated= */ true);
             dispatchUserAdded(preCreatedUser, token);
+            VoiceInteractionManagerInternal vimi = LocalServices
+                    .getService(VoiceInteractionManagerInternal.class);
+            if (vimi != null) {
+                vimi.onPreCreatedUserConversion(preCreatedUser.id);
+            }
         });
         return preCreatedUser;
     }
diff --git a/services/core/java/com/android/server/pm/UserSystemPackageInstaller.java b/services/core/java/com/android/server/pm/UserSystemPackageInstaller.java
index 60864a3..dfb4f24 100644
--- a/services/core/java/com/android/server/pm/UserSystemPackageInstaller.java
+++ b/services/core/java/com/android/server/pm/UserSystemPackageInstaller.java
@@ -219,38 +219,21 @@
 
         // Install/uninstall system packages per user.
         for (int userId : mUm.getUserIds()) {
-            final Set<String> userWhitelist = getInstallablePackagesForUserId(userId);
+            final Set<String> userAllowlist = getInstallablePackagesForUserId(userId);
 
-            // If null, run for all packages
-            if (userWhitelist == null) {
-                pmInt.forEachPackageState(packageState -> {
-                    if (packageState.getPkg() == null) {
-                        return;
-                    }
-                    final boolean install = !packageState.getTransientState()
-                            .isHiddenUntilInstalled();
-                    if (packageState.getUserStateOrDefault(userId).isInstalled() != install
-                            && shouldChangeInstallationState(packageState, install, userId,
-                            isFirstBoot, isConsideredUpgrade, preExistingPackages)) {
-                        changesToCommit.add(userId, packageState.getPackageName(), install);
-                    }
-                });
-            } else {
-                for (String packageName : userWhitelist) {
-                    PackageStateInternal packageState = pmInt.getPackageStateInternal(packageName);
-                    if (packageState.getPkg() == null) {
-                        continue;
-                    }
-
-                    final boolean install = !packageState.getTransientState()
-                            .isHiddenUntilInstalled();
-                    if (packageState.getUserStateOrDefault(userId).isInstalled() != install
-                            && shouldChangeInstallationState(packageState, install, userId,
-                            isFirstBoot, isConsideredUpgrade, preExistingPackages)) {
-                        changesToCommit.add(userId, packageState.getPackageName(), install);
-                    }
+            pmInt.forEachPackageState(packageState -> {
+                if (packageState.getPkg() == null) {
+                    return;
                 }
-            }
+                boolean install = (userAllowlist == null
+                                || userAllowlist.contains(packageState.getPackageName()))
+                        && !packageState.getTransientState().isHiddenUntilInstalled();
+                if (packageState.getUserStateOrDefault(userId).isInstalled() != install
+                        && shouldChangeInstallationState(packageState, install, userId,
+                        isFirstBoot, isConsideredUpgrade, preExistingPackages)) {
+                    changesToCommit.add(userId, packageState.getPackageName(), install);
+                }
+            });
         }
 
         pmInt.commitPackageStateMutation(null, packageStateMutator -> {
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 d34682d..1381614 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java
@@ -1698,7 +1698,8 @@
                 mDefaultPermissionCallback.onInstallPermissionGranted();
             }
 
-            public void onPermissionRevoked(int uid, int userId, String reason) {
+            public void onPermissionRevoked(int uid, int userId, String reason,
+                    boolean overrideKill, @Nullable String permissionName) {
                 revokedPermissions.add(IntPair.of(uid, userId));
 
                 syncUpdatedUsers.add(userId);
diff --git a/services/core/java/com/android/server/pm/pkg/component/InstallConstraintsTagParser.java b/services/core/java/com/android/server/pm/pkg/component/InstallConstraintsTagParser.java
new file mode 100644
index 0000000..1497684
--- /dev/null
+++ b/services/core/java/com/android/server/pm/pkg/component/InstallConstraintsTagParser.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.pm.pkg.component;
+
+
+import android.content.pm.parsing.result.ParseInput;
+import android.content.pm.parsing.result.ParseResult;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+import android.os.Build;
+import android.util.ArraySet;
+
+import com.android.internal.R;
+import com.android.server.SystemConfig;
+import com.android.server.pm.pkg.parsing.ParsingPackage;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+import java.util.Set;
+
+/**
+ * Utility methods for handling the tag {@code <install-constraints/>}
+ *
+ * @hide
+ */
+public class InstallConstraintsTagParser {
+
+    private static final String TAG_FINGERPRINT_PREFIX = "fingerprint-prefix";
+
+    /**
+     * @hide
+     */
+    public static ParseResult<ParsingPackage> parseInstallConstraints(
+            ParseInput input, ParsingPackage pkg, Resources res, XmlResourceParser parser)
+            throws XmlPullParserException, IOException {
+        Set<String> allowlist = SystemConfig.getInstance().getInstallConstraintsAllowlist();
+        if (!allowlist.contains(pkg.getPackageName())) {
+            return input.skip("install-constraints cannot be used by this package");
+        }
+
+        ParseResult<Set<String>> prefixes = parseFingerprintPrefixes(input, res, parser);
+        if (prefixes.isSuccess()) {
+            if (validateFingerprintPrefixes(prefixes.getResult())) {
+                return input.success(pkg);
+            } else {
+                return input.skip(
+                        "Install of this package is restricted on this device; device fingerprint"
+                                + " does not start with one of the allowed prefixes");
+            }
+        }
+        return input.skip(prefixes.getErrorMessage());
+    }
+
+    private static ParseResult<Set<String>> parseFingerprintPrefixes(
+            ParseInput input, Resources res, XmlResourceParser parser)
+            throws XmlPullParserException, IOException {
+        Set<String> prefixes = new ArraySet<>();
+        int type;
+        while (true) {
+            // move to the tag that contains the next prefix
+            type = parser.next();
+            if (type == XmlPullParser.END_TAG) {
+                if (prefixes.size() == 0) {
+                    return input.error("install-constraints must contain at least one constraint");
+                }
+                return input.success(prefixes);
+            } else if (type == XmlPullParser.START_TAG) {
+                if (parser.getName().equals(TAG_FINGERPRINT_PREFIX)) {
+                    ParseResult<String> parsedPrefix =
+                            readFingerprintPrefixValue(input, res, parser);
+                    if (parsedPrefix.isSuccess()) {
+                        prefixes.add(parsedPrefix.getResult());
+                    } else {
+                        return input.error(parsedPrefix.getErrorMessage());
+                    }
+                } else {
+                    return input.error("Unexpected tag: " + parser.getName());
+                }
+
+                // consume the end tag of this attribute
+                type = parser.next();
+                if (type != XmlPullParser.END_TAG) {
+                    return input.error("Expected end tag; instead got " + type);
+                }
+            }
+        }
+    }
+
+    private static ParseResult<String> readFingerprintPrefixValue(ParseInput input, Resources res,
+            XmlResourceParser parser) {
+        TypedArray sa = res.obtainAttributes(parser,
+                R.styleable.AndroidManifestInstallConstraintsFingerprintPrefix);
+        try {
+            String value = sa.getString(
+                    R.styleable.AndroidManifestInstallConstraintsFingerprintPrefix_value);
+            if (value == null) {
+                return input.error("Failed to specify prefix value");
+            }
+            return input.success(value);
+        } finally {
+            sa.recycle();
+        }
+    }
+
+    private static boolean validateFingerprintPrefixes(Set<String> prefixes) {
+        String fingerprint = Build.FINGERPRINT;
+        for (String prefix : prefixes) {
+            if (fingerprint.startsWith(prefix)) {
+                return true;
+            }
+        }
+        return false;
+    }
+}
diff --git a/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java
index 9bfb40f..7ce7f7e 100644
--- a/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java
+++ b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java
@@ -95,6 +95,7 @@
 import com.android.server.pm.permission.CompatibilityPermissionInfo;
 import com.android.server.pm.pkg.component.ComponentMutateUtils;
 import com.android.server.pm.pkg.component.ComponentParseUtils;
+import com.android.server.pm.pkg.component.InstallConstraintsTagParser;
 import com.android.server.pm.pkg.component.ParsedActivity;
 import com.android.server.pm.pkg.component.ParsedActivityUtils;
 import com.android.server.pm.pkg.component.ParsedApexSystemService;
@@ -169,9 +170,11 @@
 
     public static final String TAG_ADOPT_PERMISSIONS = "adopt-permissions";
     public static final String TAG_APPLICATION = "application";
+    public static final String TAG_ATTRIBUTION = "attribution";
     public static final String TAG_COMPATIBLE_SCREENS = "compatible-screens";
     public static final String TAG_EAT_COMMENT = "eat-comment";
     public static final String TAG_FEATURE_GROUP = "feature-group";
+    public static final String TAG_INSTALL_CONSTRAINTS = "install-constraints";
     public static final String TAG_INSTRUMENTATION = "instrumentation";
     public static final String TAG_KEY_SETS = "key-sets";
     public static final String TAG_MANIFEST = "manifest";
@@ -179,15 +182,16 @@
     public static final String TAG_OVERLAY = "overlay";
     public static final String TAG_PACKAGE = "package";
     public static final String TAG_PACKAGE_VERIFIER = "package-verifier";
-    public static final String TAG_ATTRIBUTION = "attribution";
     public static final String TAG_PERMISSION = "permission";
     public static final String TAG_PERMISSION_GROUP = "permission-group";
     public static final String TAG_PERMISSION_TREE = "permission-tree";
+    public static final String TAG_PROFILEABLE = "profileable";
     public static final String TAG_PROTECTED_BROADCAST = "protected-broadcast";
     public static final String TAG_QUERIES = "queries";
+    public static final String TAG_RECEIVER = "receiver";
     public static final String TAG_RESTRICT_UPDATE = "restrict-update";
-    public static final String TAG_SUPPORT_SCREENS = "supports-screens";
     public static final String TAG_SUPPORTS_INPUT = "supports-input";
+    public static final String TAG_SUPPORT_SCREENS = "supports-screens";
     public static final String TAG_USES_CONFIGURATION = "uses-configuration";
     public static final String TAG_USES_FEATURE = "uses-feature";
     public static final String TAG_USES_GL_TEXTURE = "uses-gl-texture";
@@ -196,8 +200,6 @@
     public static final String TAG_USES_PERMISSION_SDK_M = "uses-permission-sdk-m";
     public static final String TAG_USES_SDK = "uses-sdk";
     public static final String TAG_USES_SPLIT = "uses-split";
-    public static final String TAG_PROFILEABLE = "profileable";
-    public static final String TAG_RECEIVER = "receiver";
 
     public static final String METADATA_MAX_ASPECT_RATIO = "android.max_aspect";
     public static final String METADATA_SUPPORTS_SIZE_CHANGES = "android.supports_size_changes";
@@ -1040,6 +1042,8 @@
                 return input.success(pkg);
             case TAG_RESTRICT_UPDATE:
                 return parseRestrictUpdateHash(flags, input, pkg, res, parser);
+            case TAG_INSTALL_CONSTRAINTS:
+                return parseInstallConstraints(input, pkg, res, parser);
             case TAG_QUERIES:
                 return parseQueries(input, pkg, res, parser);
             default:
@@ -1729,6 +1733,12 @@
         return input.success(pkg);
     }
 
+    private static ParseResult<ParsingPackage> parseInstallConstraints(
+            ParseInput input, ParsingPackage pkg, Resources res, XmlResourceParser parser)
+            throws IOException, XmlPullParserException {
+        return InstallConstraintsTagParser.parseInstallConstraints(input, pkg, res, parser);
+    }
+
     private static ParseResult<ParsingPackage> parseQueries(ParseInput input, ParsingPackage pkg,
             Resources res, XmlResourceParser parser) throws IOException, XmlPullParserException {
         final int depth = parser.getDepth();
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index d8e7fbe..d645bb2 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -169,7 +169,6 @@
 import android.view.Display;
 import android.view.HapticFeedbackConstants;
 import android.view.IDisplayFoldListener;
-import android.view.IWindowManager;
 import android.view.InputDevice;
 import android.view.KeyCharacterMap;
 import android.view.KeyCharacterMap.FallbackAction;
@@ -381,7 +380,6 @@
     private final SparseArray<ScreenOnListener> mScreenOnListeners = new SparseArray<>();
 
     Context mContext;
-    IWindowManager mWindowManager;
     WindowManagerFuncs mWindowManagerFuncs;
     WindowManagerInternal mWindowManagerInternal;
     PowerManager mPowerManager;
@@ -951,6 +949,11 @@
     }
 
     private void powerPress(long eventTime, int count, boolean beganFromNonInteractive) {
+        // SideFPS still needs to know about suppressed power buttons, in case it needs to block
+        // an auth attempt.
+        if (count == 1) {
+            mSideFpsEventHandler.notifyPowerPressed();
+        }
         if (mDefaultDisplayPolicy.isScreenOnEarly() && !mDefaultDisplayPolicy.isScreenOnFully()) {
             Slog.i(TAG, "Suppressed redundant power key press while "
                     + "already in the process of turning the screen on.");
@@ -970,7 +973,7 @@
         } else if (count > 3 && count <= getMaxMultiPressPowerCount()) {
             Slog.d(TAG, "No behavior defined for power press count " + count);
         } else if (count == 1 && interactive && !beganFromNonInteractive) {
-            if (mSideFpsEventHandler.onSinglePressDetected(eventTime)) {
+            if (mSideFpsEventHandler.shouldConsumeSinglePress(eventTime)) {
                 Slog.i(TAG, "Suppressing power key because the user is interacting with the "
                         + "fingerprint sensor");
                 return;
@@ -1870,10 +1873,8 @@
 
     /** {@inheritDoc} */
     @Override
-    public void init(Context context, IWindowManager windowManager,
-            WindowManagerFuncs windowManagerFuncs) {
+    public void init(Context context, WindowManagerFuncs windowManagerFuncs) {
         mContext = context;
-        mWindowManager = windowManager;
         mWindowManagerFuncs = windowManagerFuncs;
         mWindowManagerInternal = LocalServices.getService(WindowManagerInternal.class);
         mActivityManagerInternal = LocalServices.getService(ActivityManagerInternal.class);
@@ -4534,7 +4535,6 @@
                                     pmWakeReason)) + ")");
         }
 
-        mActivityTaskManagerInternal.notifyWakingUp();
         mDefaultDisplayPolicy.setAwake(true);
 
         // Since goToSleep performs these functions synchronously, we must
@@ -4802,10 +4802,7 @@
         }
 
         if (enableScreen) {
-            try {
-                mWindowManager.enableScreenIfNeeded();
-            } catch (RemoteException unhandled) {
-            }
+            mWindowManagerFuncs.enableScreenIfNeeded();
         }
     }
 
@@ -5262,12 +5259,7 @@
     }
 
     void updateRotation(boolean alwaysSendConfiguration) {
-        try {
-            // Set orientation on WindowManager.
-            mWindowManager.updateRotation(alwaysSendConfiguration, false /* forceRelayout */);
-        } catch (RemoteException e) {
-            // Ignore
-        }
+        mWindowManagerFuncs.updateRotation(alwaysSendConfiguration, false /* forceRelayout */);
     }
 
     /**
diff --git a/services/core/java/com/android/server/policy/SideFpsEventHandler.java b/services/core/java/com/android/server/policy/SideFpsEventHandler.java
index 41d0272..af2b902 100644
--- a/services/core/java/com/android/server/policy/SideFpsEventHandler.java
+++ b/services/core/java/com/android/server/policy/SideFpsEventHandler.java
@@ -19,6 +19,7 @@
 import static android.hardware.biometrics.BiometricStateListener.STATE_BP_AUTH;
 import static android.hardware.biometrics.BiometricStateListener.STATE_ENROLLING;
 import static android.hardware.biometrics.BiometricStateListener.STATE_IDLE;
+import static android.hardware.biometrics.BiometricStateListener.STATE_KEYGUARD_AUTH;
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
@@ -34,8 +35,12 @@
 import android.hardware.fingerprint.FingerprintManager;
 import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
 import android.hardware.fingerprint.IFingerprintAuthenticatorsRegisteredCallback;
+import android.os.Build;
 import android.os.Handler;
 import android.os.PowerManager;
+import android.os.UserHandle;
+import android.provider.Settings;
+import android.util.Log;
 import android.view.WindowManager;
 
 import com.android.internal.R;
@@ -46,14 +51,26 @@
 import java.util.function.Supplier;
 
 /**
- * Defines behavior for handling interactions between power button events and
- * fingerprint-related operations, for devices where the fingerprint sensor (side fps)
- * lives on the power button.
+ * Defines behavior for handling interactions between power button events and fingerprint-related
+ * operations, for devices where the fingerprint sensor (side fps) lives on the power button.
  */
 public class SideFpsEventHandler {
 
     private static final int DEBOUNCE_DELAY_MILLIS = 500;
 
+    private int getTapWaitForPowerDuration(Context context) {
+        int tap = context.getResources().getInteger(
+                R.integer.config_sidefpsEnrollPowerPressWindow);
+        if (Build.isDebuggable()) {
+            tap = Settings.Secure.getIntForUser(context.getContentResolver(),
+                    Settings.Secure.FINGERPRINT_SIDE_FPS_ENROLL_TAP_WINDOW, tap,
+                    UserHandle.USER_CURRENT);
+        }
+        return tap;
+    }
+
+    private static final String TAG = "SideFpsEventHandler";
+
     @NonNull private final Context mContext;
     @NonNull private final Handler mHandler;
     @NonNull private final PowerManager mPowerManager;
@@ -61,20 +78,26 @@
     @NonNull private final AtomicBoolean mSideFpsEventHandlerReady;
 
     @Nullable private Dialog mDialog;
-    @NonNull private final DialogInterface.OnDismissListener mDialogDismissListener = (dialog) -> {
-        if (mDialog == dialog) {
-            mDialog = null;
-        }
-    };
+    private final Runnable mTurnOffDialog =
+            () -> {
+                dismissDialog("mTurnOffDialog");
+            };
+
+    @NonNull private final DialogInterface.OnDismissListener mDialogDismissListener;
 
     private @BiometricStateListener.State int mBiometricState;
+    private final int mTapWaitForPowerDuration;
+    private FingerprintManager mFingerprintManager;
 
     SideFpsEventHandler(Context context, Handler handler, PowerManager powerManager) {
         this(context, handler, powerManager, () -> new AlertDialog.Builder(context));
     }
 
     @VisibleForTesting
-    SideFpsEventHandler(Context context, Handler handler, PowerManager powerManager,
+    SideFpsEventHandler(
+            Context context,
+            Handler handler,
+            PowerManager powerManager,
             Supplier<AlertDialog.Builder> dialogSupplier) {
         mContext = context;
         mHandler = handler;
@@ -82,91 +105,131 @@
         mDialogSupplier = dialogSupplier;
         mBiometricState = STATE_IDLE;
         mSideFpsEventHandlerReady = new AtomicBoolean(false);
+        mDialogDismissListener =
+                (dialog) -> {
+                    if (mDialog == dialog) {
+                        if (mHandler != null) {
+                            mHandler.removeCallbacks(mTurnOffDialog);
+                        }
+                        mDialog = null;
+                    }
+                };
 
         // ensure dialog is dismissed if screen goes off for unrelated reasons
-        context.registerReceiver(new BroadcastReceiver() {
-            @Override
-            public void onReceive(Context context, Intent intent) {
-                if (mDialog != null) {
-                    mDialog.dismiss();
-                    mDialog = null;
-                }
-            }
-        }, new IntentFilter(Intent.ACTION_SCREEN_OFF));
+        context.registerReceiver(
+                new BroadcastReceiver() {
+                    @Override
+                    public void onReceive(Context context, Intent intent) {
+                        if (mDialog != null) {
+                            mDialog.dismiss();
+                            mDialog = null;
+                        }
+                    }
+                },
+                new IntentFilter(Intent.ACTION_SCREEN_OFF));
+        mTapWaitForPowerDuration = getTapWaitForPowerDuration(context);
     }
 
     /**
-     * Called from {@link PhoneWindowManager} after the power button is pressed and displays a
-     * dialog confirming the user's intent to turn screen off if a fingerprint operation is
-     * active. The device goes to sleep if confirmed otherwise the dialog is dismissed.
+     * Called from {@link PhoneWindowManager} to notify FingerprintManager that a single tap power
+     * button has been pressed.
+     */
+    public void notifyPowerPressed() {
+        Log.i(TAG, "notifyPowerPressed");
+        if (mFingerprintManager == null) {
+            mFingerprintManager = mContext.getSystemService(FingerprintManager.class);
+        }
+        if (mFingerprintManager == null) {
+            return;
+        }
+        mFingerprintManager.onPowerPressed();
+    }
+
+    /**
+     * Called from {@link PhoneWindowManager} and will dictate if the SideFpsEventHandler should
+     * handle the power press.
      *
      * @param eventTime powerPress event time
      * @return true if powerPress was consumed, false otherwise
      */
-    public boolean onSinglePressDetected(long eventTime) {
+    public boolean shouldConsumeSinglePress(long eventTime) {
         if (!mSideFpsEventHandlerReady.get()) {
             return false;
         }
 
         switch (mBiometricState) {
             case STATE_ENROLLING:
-            case STATE_BP_AUTH:
-                mHandler.post(() -> {
-                    if (mDialog != null) {
-                        mDialog.dismiss();
-                    }
-                    mDialog = showConfirmDialog(mDialogSupplier.get(),
-                            mPowerManager, eventTime, mBiometricState, mDialogDismissListener);
-                });
+                mHandler.post(
+                        () -> {
+                            if (mHandler.hasCallbacks(mTurnOffDialog)) {
+                                Log.v(TAG, "Detected a tap to turn off dialog, ignoring");
+                                mHandler.removeCallbacks(mTurnOffDialog);
+                            }
+                        });
+                showDialog(eventTime, "Enroll Power Press");
                 return true;
+            case STATE_BP_AUTH:
+                return true;
+            case STATE_KEYGUARD_AUTH:
             default:
                 return false;
         }
     }
 
     @NonNull
-    private static Dialog showConfirmDialog(@NonNull AlertDialog.Builder dialogBuilder,
-            @NonNull PowerManager powerManager, long eventTime,
+    private static Dialog showConfirmDialog(
+            @NonNull AlertDialog.Builder dialogBuilder,
+            @NonNull PowerManager powerManager,
+            long eventTime,
             @BiometricStateListener.State int biometricState,
             @NonNull DialogInterface.OnDismissListener dismissListener) {
         final boolean enrolling = biometricState == STATE_ENROLLING;
-        final int title = enrolling ? R.string.fp_power_button_enrollment_title
-                : R.string.fp_power_button_bp_title;
-        final int message = enrolling ? R.string.fp_power_button_enrollment_message
-                : R.string.fp_power_button_bp_message;
-        final int positiveText = enrolling ? R.string.fp_power_button_enrollment_positive_button
-                : R.string.fp_power_button_bp_positive_button;
-        final int negativeText = enrolling ? R.string.fp_power_button_enrollment_negative_button
-                : R.string.fp_power_button_bp_negative_button;
+        final int title =
+                enrolling
+                        ? R.string.fp_power_button_enrollment_title
+                        : R.string.fp_power_button_bp_title;
+        final int message =
+                enrolling
+                        ? R.string.fp_power_button_enrollment_message
+                        : R.string.fp_power_button_bp_message;
+        final int positiveText =
+                enrolling
+                        ? R.string.fp_power_button_enrollment_positive_button
+                        : R.string.fp_power_button_bp_positive_button;
+        final int negativeText =
+                enrolling
+                        ? R.string.fp_power_button_enrollment_negative_button
+                        : R.string.fp_power_button_bp_negative_button;
 
-        final Dialog confirmScreenOffDialog = dialogBuilder
-                .setTitle(title)
-                .setMessage(message)
-                .setPositiveButton(positiveText,
-                        (dialog, which) -> {
-                            dialog.dismiss();
-                            powerManager.goToSleep(
-                                    eventTime,
-                                    PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON,
-                                    0 /* flags */
-                            );
-                        })
-                .setNegativeButton(negativeText, (dialog, which) -> dialog.dismiss())
-                .setOnDismissListener(dismissListener)
-                .setCancelable(false)
-                .create();
-        confirmScreenOffDialog.getWindow().setType(
-                WindowManager.LayoutParams.TYPE_STATUS_BAR_SUB_PANEL);
+        final Dialog confirmScreenOffDialog =
+                dialogBuilder
+                        .setTitle(title)
+                        .setMessage(message)
+                        .setPositiveButton(
+                                positiveText,
+                                (dialog, which) -> {
+                                    dialog.dismiss();
+                                    powerManager.goToSleep(
+                                            eventTime,
+                                            PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON,
+                                            0 /* flags */);
+                                })
+                        .setNegativeButton(negativeText, (dialog, which) -> dialog.dismiss())
+                        .setOnDismissListener(dismissListener)
+                        .setCancelable(false)
+                        .create();
+        confirmScreenOffDialog
+                .getWindow()
+                .setType(WindowManager.LayoutParams.TYPE_STATUS_BAR_SUB_PANEL);
         confirmScreenOffDialog.show();
 
         return confirmScreenOffDialog;
     }
 
     /**
-     * Awaits notification from PhoneWindowManager that fingerprint service is ready
-     * to send updates about power button fps sensor state. Then configures a
-     * BiometricStateListener to receive and record updates to fps state, and
-     * registers the BiometricStateListener in FingerprintManager.
+     * Awaits notification from PhoneWindowManager that fingerprint service is ready to send updates
+     * about power button fps sensor state. Then configures a BiometricStateListener to receive and
+     * record updates to fps state, and registers the BiometricStateListener in FingerprintManager.
      */
     public void onFingerprintSensorReady() {
         final PackageManager pm = mContext.getPackageManager();
@@ -184,12 +247,12 @@
                         if (fingerprintManager.isPowerbuttonFps()) {
                             fingerprintManager.registerBiometricStateListener(
                                     new BiometricStateListener() {
-                                        @Nullable
-                                        private Runnable mStateRunnable = null;
+                                        @Nullable private Runnable mStateRunnable = null;
 
                                         @Override
                                         public void onStateChanged(
                                                 @BiometricStateListener.State int newState) {
+                                            Log.d(TAG, "onStateChanged : " + newState);
                                             if (mStateRunnable != null) {
                                                 mHandler.removeCallbacks(mStateRunnable);
                                                 mStateRunnable = null;
@@ -200,16 +263,58 @@
                                             // damper when moving to idle in case auth is first
                                             if (newState == STATE_IDLE) {
                                                 mStateRunnable = () -> mBiometricState = newState;
-                                                mHandler.postDelayed(mStateRunnable,
-                                                        DEBOUNCE_DELAY_MILLIS);
+                                                // This is also useful in the case of biometric
+                                                // prompt.
+                                                // If a user has recently succeeded/failed auth, we
+                                                // want to disable the power button for a short
+                                                // period of time (so ethey are able to view the
+                                                // prompt)
+                                                mHandler.postDelayed(
+                                                        mStateRunnable, DEBOUNCE_DELAY_MILLIS);
+                                                dismissDialog("STATE_IDLE");
                                             } else {
                                                 mBiometricState = newState;
                                             }
                                         }
+
+                                        @Override
+                                        public void onBiometricAction(
+                                                @BiometricStateListener.Action int action) {
+                                            Log.d(TAG, "onBiometricAction " + action);
+                                            switch (action) {
+                                                case BiometricStateListener.ACTION_SENSOR_TOUCH:
+                                                    mHandler.postDelayed(
+                                                            mTurnOffDialog,
+                                                            mTapWaitForPowerDuration);
+                                                    break;
+                                            }
+                                        }
                                     });
                             mSideFpsEventHandlerReady.set(true);
                         }
                     }
                 });
     }
+
+    private void dismissDialog(String reason) {
+        Log.d(TAG, "Dismissing dialog with reason: " + reason);
+        if (mDialog != null && mDialog.isShowing()) {
+            mDialog.dismiss();
+        }
+    }
+
+    private void showDialog(long time, String reason) {
+        Log.d(TAG, "Showing dialog with reason: " + reason);
+        if (mDialog != null && mDialog.isShowing()) {
+            Log.d(TAG, "Ignoring show dialog");
+            return;
+        }
+        mDialog =
+                showConfirmDialog(
+                        mDialogSupplier.get(),
+                        mPowerManager,
+                        time,
+                        mBiometricState,
+                        mDialogDismissListener);
+    }
 }
diff --git a/services/core/java/com/android/server/policy/WindowManagerPolicy.java b/services/core/java/com/android/server/policy/WindowManagerPolicy.java
index 7ca09ab..e8a3dcd 100644
--- a/services/core/java/com/android/server/policy/WindowManagerPolicy.java
+++ b/services/core/java/com/android/server/policy/WindowManagerPolicy.java
@@ -78,7 +78,6 @@
 import android.util.proto.ProtoOutputStream;
 import android.view.Display;
 import android.view.IDisplayFoldListener;
-import android.view.IWindowManager;
 import android.view.KeyEvent;
 import android.view.WindowManager;
 import android.view.WindowManagerGlobal;
@@ -343,6 +342,22 @@
          * @return {@code true} if app transition state is idle on the default display.
          */
         boolean isAppTransitionStateIdle();
+
+        /**
+         * Enables the screen if all conditions are met.
+         */
+        void enableScreenIfNeeded();
+
+        /**
+         * Updates the current screen rotation based on the current state of the world.
+         *
+         * @param alwaysSendConfiguration Flag to force a new configuration to be evaluated.
+         *                                This can be used when there are other parameters in
+         *                                configuration that are changing.
+         * @param forceRelayout If true, the window manager will always do a relayout of its
+         *                      windows even if the rotation hasn't changed.
+         */
+        void updateRotation(boolean alwaysSendConfiguration, boolean forceRelayout);
     }
 
     /**
@@ -391,8 +406,7 @@
      *
      * @param context The system context we are running in.
      */
-    public void init(Context context, IWindowManager windowManager,
-            WindowManagerFuncs windowManagerFuncs);
+    void init(Context context, WindowManagerFuncs windowManagerFuncs);
 
     /**
      * Check permissions when adding a window.
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 8c52717..dbf05f1 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -112,6 +112,7 @@
 import com.android.internal.display.BrightnessSynchronizer;
 import com.android.internal.os.BackgroundThread;
 import com.android.internal.util.DumpUtils;
+import com.android.internal.util.FrameworkStatsLog;
 import com.android.internal.util.LatencyTracker;
 import com.android.internal.util.Preconditions;
 import com.android.server.EventLogTags;
@@ -4800,6 +4801,11 @@
                             .IS_STAY_ON_WHILE_PLUGGED_IN_WIRELESS,
                     ((mStayOnWhilePluggedInSetting & BatteryManager.BATTERY_PLUGGED_WIRELESS)
                             != 0));
+            proto.write(
+                    PowerServiceSettingsAndConfigurationDumpProto.StayOnWhilePluggedInProto
+                            .IS_STAY_ON_WHILE_PLUGGED_IN_DOCK,
+                    ((mStayOnWhilePluggedInSetting & BatteryManager.BATTERY_PLUGGED_DOCK)
+                            != 0));
             proto.end(stayOnWhilePluggedInToken);
 
             proto.write(
@@ -4960,6 +4966,7 @@
                 int dockState = intent.getIntExtra(Intent.EXTRA_DOCK_STATE,
                         Intent.EXTRA_DOCK_STATE_UNDOCKED);
                 if (mDockState != dockState) {
+                    FrameworkStatsLog.write(FrameworkStatsLog.DOCK_STATE_CHANGED, dockState);
                     mDockState = dockState;
                     mDirty |= DIRTY_DOCK_STATE;
                     updatePowerStateLocked();
diff --git a/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission.java b/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission.java
index 13fe14c..6318a99 100644
--- a/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission.java
+++ b/services/core/java/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewarePermission.java
@@ -21,6 +21,7 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.app.AppOpsManager;
 import android.content.Context;
 import android.content.PermissionChecker;
 import android.media.permission.Identity;
@@ -115,8 +116,10 @@
      * originator temporarily doesn't have the right permissions to use this service.
      */
     private void enforcePermissionsForPreflight(@NonNull Identity identity) {
-        enforcePermissionForPreflight(mContext, identity, RECORD_AUDIO);
-        enforcePermissionForPreflight(mContext, identity, CAPTURE_AUDIO_HOTWORD);
+        enforcePermissionForPreflight(mContext, identity, RECORD_AUDIO,
+                /* allowSoftDenial= */ true);
+        enforcePermissionForPreflight(mContext, identity, CAPTURE_AUDIO_HOTWORD,
+                /* allowSoftDenial= */ true);
     }
 
     /**
@@ -124,8 +127,7 @@
      */
     void enforcePermissionsForDataDelivery(@NonNull Identity identity, @NonNull String reason) {
         enforceSoundTriggerRecordAudioPermissionForDataDelivery(identity, reason);
-        enforcePermissionForDataDelivery(mContext, identity, CAPTURE_AUDIO_HOTWORD,
-                reason);
+        enforcePermissionForDataDelivery(mContext, identity, CAPTURE_AUDIO_HOTWORD, reason);
     }
 
     /**
@@ -165,20 +167,25 @@
     /**
      * Throws a {@link SecurityException} if originator permanently doesn't have the given
      * permission.
-     * Soft (temporary) denials are considered OK for preflight purposes.
      *
-     * @param context    A {@link Context}, used for permission checks.
-     * @param identity   The identity to check.
-     * @param permission The identifier of the permission we want to check.
+     * @param context         A {@link Context}, used for permission checks.
+     * @param identity        The identity to check.
+     * @param permission      The identifier of the permission we want to check.
+     * @param allowSoftDenial If true, the operation succeeds even for soft (temporary) denials.
      */
+    // TODO: Consider splitting up this method instead of using `allowSoftDenial`, to make it
+    // clearer when soft denials are not allowed.
     private static void enforcePermissionForPreflight(@NonNull Context context,
-            @NonNull Identity identity, @NonNull String permission) {
+            @NonNull Identity identity, @NonNull String permission, boolean allowSoftDenial) {
         final int status = PermissionUtil.checkPermissionForPreflight(context, identity,
                 permission);
         switch (status) {
             case PermissionChecker.PERMISSION_GRANTED:
-            case PermissionChecker.PERMISSION_SOFT_DENIED:
                 return;
+            case PermissionChecker.PERMISSION_SOFT_DENIED:
+                if (allowSoftDenial) {
+                    return;
+                } // else fall through
             case PermissionChecker.PERMISSION_HARD_DENIED:
                 throw new SecurityException(
                         String.format("Failed to obtain permission %s for identity %s", permission,
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
index b00d8b4..53b8b53 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
@@ -27,6 +27,7 @@
 import android.view.WindowInsetsController.Appearance;
 import android.view.WindowInsetsController.Behavior;
 
+import com.android.internal.statusbar.LetterboxDetails;
 import com.android.internal.view.AppearanceRegion;
 import com.android.server.notification.NotificationDelegate;
 
@@ -133,7 +134,8 @@
     /** @see com.android.internal.statusbar.IStatusBar#onSystemBarAttributesChanged */
     void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
             AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
-            @Behavior int behavior, InsetsVisibilities requestedVisibilities, String packageName);
+            @Behavior int behavior, InsetsVisibilities requestedVisibilities, String packageName,
+            LetterboxDetails[] letterboxDetails);
 
     /** @see com.android.internal.statusbar.IStatusBar#showTransient */
     void showTransient(int displayId, @InternalInsetsType int[] types,
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
index 46e7574..bec3754 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
@@ -96,6 +96,7 @@
 import com.android.internal.statusbar.IStatusBar;
 import com.android.internal.statusbar.IStatusBarService;
 import com.android.internal.statusbar.IUndoMediaTransferCallback;
+import com.android.internal.statusbar.LetterboxDetails;
 import com.android.internal.statusbar.NotificationVisibility;
 import com.android.internal.statusbar.RegisterStatusBarResult;
 import com.android.internal.statusbar.StatusBarIcon;
@@ -596,13 +597,15 @@
         public void onSystemBarAttributesChanged(int displayId, @Appearance int appearance,
                 AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
                 @Behavior int behavior, InsetsVisibilities requestedVisibilities,
-                String packageName) {
+                String packageName, LetterboxDetails[] letterboxDetails) {
             getUiState(displayId).setBarAttributes(appearance, appearanceRegions,
-                    navbarColorManagedByIme, behavior, requestedVisibilities, packageName);
+                    navbarColorManagedByIme, behavior, requestedVisibilities, packageName,
+                    letterboxDetails);
             if (mBar != null) {
                 try {
                     mBar.onSystemBarAttributesChanged(displayId, appearance, appearanceRegions,
-                            navbarColorManagedByIme, behavior, requestedVisibilities, packageName);
+                            navbarColorManagedByIme, behavior, requestedVisibilities, packageName,
+                            letterboxDetails);
                 } catch (RemoteException ex) { }
             }
         }
@@ -1204,17 +1207,20 @@
         private int mImeBackDisposition = 0;
         private boolean mShowImeSwitcher = false;
         private IBinder mImeToken = null;
+        private LetterboxDetails[] mLetterboxDetails = new LetterboxDetails[0];
 
         private void setBarAttributes(@Appearance int appearance,
                 AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme,
                 @Behavior int behavior, InsetsVisibilities requestedVisibilities,
-                String packageName) {
+                String packageName,
+                LetterboxDetails[] letterboxDetails) {
             mAppearance = appearance;
             mAppearanceRegions = appearanceRegions;
             mNavbarColorManagedByIme = navbarColorManagedByIme;
             mBehavior = behavior;
             mRequestedVisibilities = requestedVisibilities;
             mPackageName = packageName;
+            mLetterboxDetails = letterboxDetails;
         }
 
         private void showTransient(@InternalInsetsType int[] types) {
@@ -1341,7 +1347,7 @@
                     state.mImeBackDisposition, state.mShowImeSwitcher,
                     gatherDisableActionsLocked(mCurrentUserId, 2), state.mImeToken,
                     state.mNavbarColorManagedByIme, state.mBehavior, state.mRequestedVisibilities,
-                    state.mPackageName, transientBarTypes);
+                    state.mPackageName, transientBarTypes, state.mLetterboxDetails);
         }
     }
 
diff --git a/services/core/java/com/android/server/vibrator/Vibration.java b/services/core/java/com/android/server/vibrator/Vibration.java
index 78b1c20..d79837b 100644
--- a/services/core/java/com/android/server/vibrator/Vibration.java
+++ b/services/core/java/com/android/server/vibrator/Vibration.java
@@ -61,12 +61,11 @@
         IGNORED_BACKGROUND,
         IGNORED_UNKNOWN_VIBRATION,
         IGNORED_UNSUPPORTED,
-        IGNORED_FOR_ALARM,
         IGNORED_FOR_EXTERNAL,
+        IGNORED_FOR_HIGHER_IMPORTANCE,
         IGNORED_FOR_ONGOING,
         IGNORED_FOR_POWER,
         IGNORED_FOR_RINGER_MODE,
-        IGNORED_FOR_RINGTONE,
         IGNORED_FOR_SETTINGS,
         IGNORED_SUPERSEDED,
     }
diff --git a/services/core/java/com/android/server/vibrator/VibratorManagerService.java b/services/core/java/com/android/server/vibrator/VibratorManagerService.java
index f0911ca..5ac2f4f 100644
--- a/services/core/java/com/android/server/vibrator/VibratorManagerService.java
+++ b/services/core/java/com/android/server/vibrator/VibratorManagerService.java
@@ -713,16 +713,17 @@
             case IGNORED_ERROR_APP_OPS:
                 Slog.w(TAG, "Would be an error: vibrate from uid " + uid);
                 break;
-            case IGNORED_FOR_ALARM:
-                if (DEBUG) {
-                    Slog.d(TAG, "Ignoring incoming vibration in favor of alarm vibration");
-                }
-                break;
             case IGNORED_FOR_EXTERNAL:
                 if (DEBUG) {
                     Slog.d(TAG, "Ignoring incoming vibration for current external vibration");
                 }
                 break;
+            case IGNORED_FOR_HIGHER_IMPORTANCE:
+                if (DEBUG) {
+                    Slog.d(TAG, "Ignoring incoming vibration in favor of ongoing vibration"
+                            + " with higher importance");
+                }
+                break;
             case IGNORED_FOR_ONGOING:
                 if (DEBUG) {
                     Slog.d(TAG, "Ignoring incoming vibration in favor of repeating vibration");
@@ -734,12 +735,6 @@
                             + attrs);
                 }
                 break;
-            case IGNORED_FOR_RINGTONE:
-                if (DEBUG) {
-                    Slog.d(TAG, "Ignoring incoming vibration in favor of ringtone vibration");
-                }
-                break;
-
             default:
                 if (DEBUG) {
                     Slog.d(TAG, "Vibration for uid=" + uid + " and with attrs=" + attrs
@@ -812,20 +807,43 @@
             return null;
         }
 
-        if (currentVibration.attrs.getUsage() == VibrationAttributes.USAGE_ALARM) {
-            return Vibration.Status.IGNORED_FOR_ALARM;
-        }
-
-        if (currentVibration.attrs.getUsage() == VibrationAttributes.USAGE_RINGTONE) {
-            return Vibration.Status.IGNORED_FOR_RINGTONE;
+        int currentUsage = currentVibration.attrs.getUsage();
+        int newUsage = vib.attrs.getUsage();
+        if (getVibrationImportance(currentUsage) > getVibrationImportance(newUsage)) {
+            // Current vibration has higher importance than this one and should not be cancelled.
+            return Vibration.Status.IGNORED_FOR_HIGHER_IMPORTANCE;
         }
 
         if (currentVibration.isRepeating()) {
+            // Current vibration is repeating, assume it's more important.
             return Vibration.Status.IGNORED_FOR_ONGOING;
         }
+
         return null;
     }
 
+    private static int getVibrationImportance(@VibrationAttributes.Usage int usage) {
+        switch (usage) {
+            case VibrationAttributes.USAGE_RINGTONE:
+                return 5;
+            case VibrationAttributes.USAGE_ALARM:
+                return 4;
+            case VibrationAttributes.USAGE_NOTIFICATION:
+                return 3;
+            case VibrationAttributes.USAGE_COMMUNICATION_REQUEST:
+            case VibrationAttributes.USAGE_ACCESSIBILITY:
+                return 2;
+            case VibrationAttributes.USAGE_HARDWARE_FEEDBACK:
+            case VibrationAttributes.USAGE_PHYSICAL_EMULATION:
+                return 1;
+            case VibrationAttributes.USAGE_MEDIA:
+            case VibrationAttributes.USAGE_TOUCH:
+            case VibrationAttributes.USAGE_UNKNOWN:
+            default:
+                return 0;
+        }
+    }
+
     /**
      * Check if given vibration should be ignored by this service.
      *
diff --git a/services/core/java/com/android/server/wm/ActivityClientController.java b/services/core/java/com/android/server/wm/ActivityClientController.java
index f6748de..d2a00af 100644
--- a/services/core/java/com/android/server/wm/ActivityClientController.java
+++ b/services/core/java/com/android/server/wm/ActivityClientController.java
@@ -43,6 +43,7 @@
 import static com.android.server.wm.ActivityTaskManagerService.TAG_SWITCH;
 import static com.android.server.wm.ActivityTaskManagerService.enforceNotIsolatedCaller;
 
+import android.Manifest;
 import android.annotation.ColorInt;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
@@ -462,8 +463,8 @@
                     // Explicitly dismissing the activity so reset its relaunch flag.
                     r.mRelaunchReason = RELAUNCH_REASON_NONE;
                 } else {
-                    r.finishIfPossible(resultCode, resultData, resultGrants,
-                            "app-request", true /* oomAdj */);
+                    r.finishIfPossible(resultCode, resultData, resultGrants, "app-request",
+                            true /* oomAdj */);
                     res = r.finishing;
                     if (!res) {
                         Slog.i(TAG, "Failed to finish by app-request");
@@ -525,6 +526,23 @@
     }
 
     @Override
+    public void setForceSendResultForMediaProjection(IBinder token) {
+        // Require that this is invoked only during MediaProjection setup.
+        mService.mAmInternal.enforceCallingPermission(
+                Manifest.permission.MANAGE_MEDIA_PROJECTION,
+                "setForceSendResultForMediaProjection");
+
+        final ActivityRecord r;
+        synchronized (mGlobalLock) {
+            r = ActivityRecord.isInRootTaskLocked(token);
+            if (r == null || !r.isInHistory()) {
+                return;
+            }
+            r.setForceSendResultForMediaProjection();
+        }
+    }
+
+    @Override
     public boolean isTopOfTask(IBinder token) {
         synchronized (mGlobalLock) {
             final ActivityRecord r = ActivityRecord.isInRootTaskLocked(token);
@@ -559,6 +577,21 @@
         }
     }
 
+    /**
+     * Returns the windowing mode of the task that hosts the activity, or {@code -1} if task is not
+     * found.
+     */
+    @Override
+    public int getTaskWindowingMode(IBinder activityToken) {
+        synchronized (mGlobalLock) {
+            final ActivityRecord ar = ActivityRecord.isInAnyTask(activityToken);
+            if (ar == null) {
+                return -1;
+            }
+            return ar.getTask().getWindowingMode();
+        }
+    }
+
     @Override
     @Nullable
     public IBinder getActivityTokenBelow(IBinder activityToken) {
@@ -737,7 +770,7 @@
             synchronized (mGlobalLock) {
                 final ActivityRecord r = ensureValidPictureInPictureActivityParams(
                         "enterPictureInPictureMode", token, params);
-                return mService.enterPictureInPictureMode(r, params);
+                return mService.enterPictureInPictureMode(r, params, true /* fromClient */);
             }
         } finally {
             Binder.restoreCallingIdentity(origId);
@@ -853,22 +886,23 @@
     /**
      * Requests that an activity should enter picture-in-picture mode if possible. This method may
      * be used by the implementation of non-phone form factors.
+     *
+     * @return false if the activity cannot enter PIP mode.
      */
-    void requestPictureInPictureMode(@NonNull ActivityRecord r) {
+    boolean requestPictureInPictureMode(@NonNull ActivityRecord r) {
         if (r.inPinnedWindowingMode()) {
-            throw new IllegalStateException("Activity is already in PIP mode");
+            return false;
         }
 
         final boolean canEnterPictureInPicture = r.checkEnterPictureInPictureState(
                 "requestPictureInPictureMode", /* beforeStopping */ false);
         if (!canEnterPictureInPicture) {
-            throw new IllegalStateException(
-                    "Requested PIP on an activity that doesn't support it");
+            return false;
         }
 
         if (r.pictureInPictureArgs.isAutoEnterEnabled()) {
-            mService.enterPictureInPictureMode(r, r.pictureInPictureArgs);
-            return;
+            return mService.enterPictureInPictureMode(r, r.pictureInPictureArgs,
+                    false /* fromClient */);
         }
 
         try {
@@ -876,9 +910,11 @@
                     r.app.getThread(), r.token);
             transaction.addCallback(EnterPipRequestedItem.obtain());
             mService.getLifecycleManager().scheduleTransaction(transaction);
+            return true;
         } catch (Exception e) {
             Slog.w(TAG, "Failed to send enter pip requested item: "
                     + r.intent.getComponent(), e);
+            return false;
         }
     }
 
@@ -928,6 +964,7 @@
 
                 if (rootTask.inFreeformWindowingMode()) {
                     rootTask.setWindowingMode(WINDOWING_MODE_FULLSCREEN);
+                    rootTask.setBounds(null);
                 } else if (!r.supportsFreeform()) {
                     throw new IllegalStateException(
                             "This activity is currently not freeform-enabled");
diff --git a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java
index d6c0ab6..8916549 100644
--- a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java
+++ b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java
@@ -56,6 +56,10 @@
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.TYPE_TRANSITION_REPORTED_DRAWN_NO_BUNDLE;
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.TYPE_TRANSITION_REPORTED_DRAWN_WITH_BUNDLE;
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.TYPE_TRANSITION_WARM_LAUNCH;
+import static com.android.internal.util.FrameworkStatsLog.APP_COMPAT_STATE_CHANGED__LETTERBOX_POSITION__NOT_LETTERBOXED_POSITION;
+import static com.android.internal.util.FrameworkStatsLog.APP_COMPAT_STATE_CHANGED__STATE__LETTERBOXED_FOR_ASPECT_RATIO;
+import static com.android.internal.util.FrameworkStatsLog.APP_COMPAT_STATE_CHANGED__STATE__LETTERBOXED_FOR_FIXED_ORIENTATION;
+import static com.android.internal.util.FrameworkStatsLog.APP_COMPAT_STATE_CHANGED__STATE__LETTERBOXED_FOR_SIZE_COMPAT_MODE;
 import static com.android.internal.util.FrameworkStatsLog.APP_COMPAT_STATE_CHANGED__STATE__NOT_LETTERBOXED;
 import static com.android.internal.util.FrameworkStatsLog.APP_COMPAT_STATE_CHANGED__STATE__NOT_VISIBLE;
 import static com.android.internal.util.FrameworkStatsLog.CAMERA_COMPAT_CONTROL_EVENT_REPORTED__EVENT__APPEARED_APPLY_TREATMENT;
@@ -68,6 +72,7 @@
 import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_METRICS;
 import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_ATM;
 import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import static com.android.server.wm.ActivityTaskManagerInternal.APP_TRANSITION_RECENTS_ANIM;
 import static com.android.server.wm.ActivityTaskManagerInternal.APP_TRANSITION_TIMEOUT;
 import static com.android.server.wm.EventLogTags.WM_ACTIVITY_LAUNCH_TIME;
 
@@ -101,6 +106,7 @@
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.util.FrameworkStatsLog;
+import com.android.internal.util.LatencyTracker;
 import com.android.internal.util.function.pooled.PooledLambda;
 import com.android.server.FgThread;
 import com.android.server.LocalServices;
@@ -143,6 +149,12 @@
     private static final long UNKNOWN_VISIBILITY_CHECK_DELAY_MS = 3000;
 
     /**
+     * If the recents animation is finished before the delay since the window drawn, do not log the
+     * action because the duration is too small that may be just an accidentally touch.
+     */
+    private static final long LATENCY_TRACKER_RECENTS_DELAY_MS = 300;
+
+    /**
      * The flag for {@link #notifyActivityLaunching} to skip associating a new launch with an active
      * transition, in the case the launch is standalone (e.g. from recents).
      */
@@ -732,10 +744,6 @@
         if (info.mLoggedTransitionStarting) {
             done(false /* abort */, info, "notifyWindowsDrawn", timestampNs);
         }
-        if (r.mWmService.isRecentsAnimationTarget(r)) {
-            r.mWmService.getRecentsAnimationController().logRecentsAnimationStartTime(
-                    info.mSourceEventDelayMs + info.mWindowsDrawnDelayMs);
-        }
         return infoSnapshot;
     }
 
@@ -947,6 +955,9 @@
                 launchObserverNotifyActivityLaunchFinished(info, timestampNs);
             }
             logAppTransitionFinished(info, isHibernating != null ? isHibernating : false);
+            if (info.mReason == APP_TRANSITION_RECENTS_ANIM) {
+                logRecentsAnimationLatency(info);
+            }
         }
         mTransitionInfoList.remove(info);
     }
@@ -1102,6 +1113,22 @@
         Log.i(TAG, sb.toString());
     }
 
+    private void logRecentsAnimationLatency(TransitionInfo info) {
+        final int duration = info.mSourceEventDelayMs + info.mWindowsDrawnDelayMs;
+        final ActivityRecord r = info.mLastLaunchedActivity;
+        final long lastTopLossTime = r.topResumedStateLossTime;
+        final WindowManagerService wm = mSupervisor.mService.mWindowManager;
+        final Object controller = wm.getRecentsAnimationController();
+        mLoggerHandler.postDelayed(() -> {
+            if (lastTopLossTime != r.topResumedStateLossTime
+                    || controller != wm.getRecentsAnimationController()) {
+                // Skip if the animation was finished in a short time.
+                return;
+            }
+            wm.mLatencyTracker.logAction(LatencyTracker.ACTION_START_RECENTS_ANIMATION, duration);
+        }, LATENCY_TRACKER_RECENTS_DELAY_MS);
+    }
+
     private static int getAppStartTransitionType(int tronType, boolean relaunched) {
         if (tronType == TYPE_TRANSITION_COLD_LAUNCH) {
             return FrameworkStatsLog.APP_START_OCCURRED__TYPE__COLD;
@@ -1368,7 +1395,7 @@
             return;
         }
 
-        logAppCompatStateInternal(activity, state, packageUid, compatStateInfo);
+        logAppCompatStateInternal(activity, state, compatStateInfo);
     }
 
     /**
@@ -1408,18 +1435,61 @@
             }
         }
         if (activityToLog != null && stateToLog != APP_COMPAT_STATE_CHANGED__STATE__NOT_VISIBLE) {
-            logAppCompatStateInternal(activityToLog, stateToLog, packageUid, compatStateInfo);
+            logAppCompatStateInternal(activityToLog, stateToLog, compatStateInfo);
         }
     }
 
+    private static boolean isAppCompateStateChangedToLetterboxed(int state) {
+        return state == APP_COMPAT_STATE_CHANGED__STATE__LETTERBOXED_FOR_ASPECT_RATIO
+                || state == APP_COMPAT_STATE_CHANGED__STATE__LETTERBOXED_FOR_FIXED_ORIENTATION
+                || state == APP_COMPAT_STATE_CHANGED__STATE__LETTERBOXED_FOR_SIZE_COMPAT_MODE;
+    }
+
     private void logAppCompatStateInternal(@NonNull ActivityRecord activity, int state,
-            int packageUid, PackageCompatStateInfo compatStateInfo) {
+             PackageCompatStateInfo compatStateInfo) {
         compatStateInfo.mLastLoggedState = state;
         compatStateInfo.mLastLoggedActivity = activity;
-        FrameworkStatsLog.write(FrameworkStatsLog.APP_COMPAT_STATE_CHANGED, packageUid, state);
+        int packageUid = activity.info.applicationInfo.uid;
+
+        int positionToLog = APP_COMPAT_STATE_CHANGED__LETTERBOX_POSITION__NOT_LETTERBOXED_POSITION;
+        if (isAppCompateStateChangedToLetterboxed(state)) {
+            positionToLog = activity.mLetterboxUiController.getLetterboxPositionForLogging();
+        }
+        FrameworkStatsLog.write(FrameworkStatsLog.APP_COMPAT_STATE_CHANGED,
+                packageUid, state, positionToLog);
 
         if (DEBUG_METRICS) {
-            Slog.i(TAG, String.format("APP_COMPAT_STATE_CHANGED(%s, %s)", packageUid, state));
+            Slog.i(TAG, String.format("APP_COMPAT_STATE_CHANGED(%s, %s, %s)",
+                    packageUid, state, positionToLog));
+        }
+    }
+
+    /**
+     * Logs the changing of the letterbox position along with its package UID
+     */
+    void logLetterboxPositionChange(@NonNull ActivityRecord activity, int position) {
+        int packageUid = activity.info.applicationInfo.uid;
+        FrameworkStatsLog.write(FrameworkStatsLog.LETTERBOX_POSITION_CHANGED, packageUid, position);
+
+        if (!mPackageUidToCompatStateInfo.contains(packageUid)) {
+            // There is no last logged activity for this packageUid so we should not log the
+            // position change as we can only log the position change for the current activity
+            return;
+        }
+        final PackageCompatStateInfo compatStateInfo = mPackageUidToCompatStateInfo.get(packageUid);
+        final ActivityRecord lastLoggedActivity = compatStateInfo.mLastLoggedActivity;
+        if (activity != lastLoggedActivity) {
+            // Only log the position change for the current activity to be consistent with
+            // findAppCompatStateToLog and ensure that metrics for the state changes are computed
+            // correctly
+            return;
+        }
+        int state = activity.getAppCompatState();
+        logAppCompatStateInternal(activity, state, compatStateInfo);
+
+        if (DEBUG_METRICS) {
+            Slog.i(TAG, String.format("LETTERBOX_POSITION_CHANGED(%s, %s)",
+                    packageUid, position));
         }
     }
 
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 026e5d2..4b58b82 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -224,6 +224,7 @@
 import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
 import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_NORMAL;
 import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_WILL_PLACE_SURFACES;
+import static com.android.server.wm.WindowManagerService.sEnableShellTransitions;
 import static com.android.server.wm.WindowState.LEGACY_POLICY_VISIBILITY;
 import static com.android.server.wm.WindowStateAnimator.HAS_DRAWN;
 
@@ -595,6 +596,8 @@
     // pre-NYC apps that don't have a sense of being resized.
     int mRelaunchReason = RELAUNCH_REASON_NONE;
 
+    private boolean mForceSendResultForMediaProjection = false;
+
     TaskDescription taskDescription; // the recents information for this activity
 
     // The locusId associated with this activity, if set.
@@ -925,7 +928,7 @@
     // SystemUi sets the pinned mode on activity after transition is done.
     boolean mWaitForEnteringPinnedMode;
 
-    private final ActivityRecordInputSink mActivityRecordInputSink;
+    final ActivityRecordInputSink mActivityRecordInputSink;
 
     // Activities with this uid are allowed to not create an input sink while being in the same
     // task and directly above this ActivityRecord. This field is updated whenever a new activity
@@ -1990,6 +1993,9 @@
 
             if (options.getLaunchIntoPipParams() != null) {
                 pictureInPictureArgs = options.getLaunchIntoPipParams();
+                if (sourceRecord != null) {
+                    adjustPictureInPictureParamsIfNeeded(sourceRecord.getBounds());
+                }
             }
 
             mOverrideTaskTransition = options.getOverrideTaskTransition();
@@ -2066,6 +2072,12 @@
 
         launchMode = aInfo.launchMode;
 
+        // Don't move below setActivityType since it triggers onConfigurationChange ->
+        // resolveOverrideConfiguration that requires having mLetterboxUiController initialised.
+        mLetterboxUiController = new LetterboxUiController(mWmService, this);
+        mCameraCompatControlEnabled = mWmService.mContext.getResources()
+                .getBoolean(R.bool.config_isCameraCompatControlForStretchedIssuesEnabled);
+
         setActivityType(_componentSpecified, _launchedFromUid, _intent, options, sourceRecord);
 
         immersive = (aInfo.flags & FLAG_IMMERSIVE) != 0;
@@ -2094,9 +2106,6 @@
         mPersistentState = persistentState;
         taskDescription = _taskDescription;
 
-        mLetterboxUiController = new LetterboxUiController(mWmService, this);
-        mCameraCompatControlEnabled = mWmService.mContext.getResources()
-                .getBoolean(R.bool.config_isCameraCompatControlForStretchedIssuesEnabled);
         shouldDockBigOverlays = mWmService.mContext.getResources()
                 .getBoolean(R.bool.config_dockBigOverlayWindows);
 
@@ -2603,7 +2612,7 @@
         // either way, abort and reset the sequence.
         if (parcelable == null
                 || mTransferringSplashScreenState != TRANSFER_SPLASH_SCREEN_COPYING
-                || mStartingWindow == null
+                || mStartingWindow == null || mStartingWindow.mRemoved
                 || finishing) {
             if (parcelable != null) {
                 parcelable.clearIfNeeded();
@@ -2795,7 +2804,7 @@
 
     @VisibleForTesting
     boolean canLaunchHomeActivity(int uid, ActivityRecord sourceRecord) {
-        if (uid == Process.myUid() || uid == 0) {
+        if (uid == SYSTEM_UID || uid == 0) {
             // System process can launch home activity.
             return true;
         }
@@ -3014,25 +3023,6 @@
                 && info.supportsPictureInPicture();
     }
 
-    /**
-     * @return whether this activity supports split-screen multi-window and can be put in
-     *         split-screen.
-     */
-    @Override
-    public boolean supportsSplitScreenWindowingMode() {
-        return supportsSplitScreenWindowingModeInDisplayArea(getDisplayArea());
-    }
-
-    /**
-     * @return whether this activity supports split-screen multi-window and can be put in
-     *         split-screen if it is in the given {@link TaskDisplayArea}.
-     */
-    boolean supportsSplitScreenWindowingModeInDisplayArea(@Nullable TaskDisplayArea tda) {
-        return super.supportsSplitScreenWindowingMode()
-                && mAtmService.mSupportsSplitScreenMultiWindow
-                && supportsMultiWindowInDisplayArea(tda);
-    }
-
     boolean supportsFreeform() {
         return supportsFreeformInDisplayArea(getDisplayArea());
     }
@@ -3163,15 +3153,10 @@
         mWillCloseOrEnterPip = willCloseOrEnterPip;
     }
 
-    /**
-     * Returns whether this {@link ActivityRecord} is considered closing. Conditions are either
-     * 1. Is this app animating and was requested to be hidden
-     * 2. App is delayed closing since it might enter PIP.
-     */
-    boolean isClosingOrEnteringPip() {
-        return (isAnimating(TRANSITION | PARENTS, ANIMATION_TYPE_APP_TRANSITION)
-                && !mVisibleRequested) || mWillCloseOrEnterPip;
+    boolean willCloseOrEnterPip() {
+        return mWillCloseOrEnterPip;
     }
+
     /**
      * @return Whether AppOps allows this package to enter picture-in-picture.
      */
@@ -3229,12 +3214,29 @@
             return false;
         }
 
-        if (mRootWindowContainer.getTopResumedActivity() == this
-                && getDisplayContent().mFocusedApp == this) {
-            ProtoLog.d(WM_DEBUG_FOCUS, "moveFocusableActivityToTop: already on top, "
-                    + "activity=%s", this);
-            return !isState(RESUMED);
+        // If this activity already positions on the top focused task, moving the task to front
+        // is not needed. But we still need to ensure this activity is focused because the
+        // current focused activity could be another activity in the same Task if activities are
+        // displayed on adjacent TaskFragments.
+        final ActivityRecord currentFocusedApp = mDisplayContent.mFocusedApp;
+        if (currentFocusedApp != null && currentFocusedApp.task == task) {
+            final Task topFocusableTask = mDisplayContent.getTask(
+                    (t) -> t.isLeafTask() && t.isFocusable(), true /*  traverseTopToBottom */);
+            if (task == topFocusableTask) {
+                if (currentFocusedApp == this) {
+                    ProtoLog.d(WM_DEBUG_FOCUS, "moveFocusableActivityToTop: already on top "
+                            + "and focused, activity=%s", this);
+                } else {
+                    ProtoLog.d(WM_DEBUG_FOCUS, "moveFocusableActivityToTop: set focused, "
+                            + "activity=%s", this);
+                    mDisplayContent.setFocusedApp(this);
+                    mAtmService.mWindowManager.updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL,
+                            true /* updateInputWindows */);
+                }
+                return !isState(RESUMED);
+            }
         }
+
         ProtoLog.d(WM_DEBUG_FOCUS, "moveFocusableActivityToTop: activity=%s", this);
 
         rootTask.moveToFront(reason, task);
@@ -3284,7 +3286,12 @@
                 mAtmService.mUgmInternal.grantUriPermissionUncheckedFromIntent(resultGrants,
                         resultTo.getUriPermissionsLocked());
             }
-            resultTo.addResultLocked(this, resultWho, requestCode, resultCode, resultData);
+            if (mForceSendResultForMediaProjection) {
+                resultTo.sendResult(this.getUid(), resultWho, requestCode, resultCode,
+                        resultData, resultGrants, true /* forceSendForMediaProjection */);
+            } else {
+                resultTo.addResultLocked(this, resultWho, requestCode, resultCode, resultData);
+            }
             resultTo = null;
         } else if (DEBUG_RESULTS) {
             Slog.v(TAG_RESULTS, "No result destination from " + this);
@@ -3478,6 +3485,10 @@
         }
     }
 
+    void setForceSendResultForMediaProjection() {
+        mForceSendResultForMediaProjection = true;
+    }
+
     private void prepareActivityHideTransitionAnimationIfOvarlay() {
         if (mTaskOverlay) {
             prepareActivityHideTransitionAnimation();
@@ -3517,7 +3528,9 @@
         }
 
         final boolean isCurrentVisible = mVisibleRequested || isState(PAUSED, STARTED);
-        if (updateVisibility && isCurrentVisible) {
+        if (updateVisibility && isCurrentVisible
+                // Avoid intermediate lifecycle change when launching with clearing task.
+                && !task.isClearingToReuseTask()) {
             boolean ensureVisibility = false;
             if (occludesParent(true /* includingFinishing */)) {
                 // If the current activity is not opaque, we need to make sure the visibilities of
@@ -4489,12 +4502,17 @@
 
     /**
      * @return Whether we are allowed to show non-starting windows at the moment. We disallow
-     *         showing windows during transitions in case we have windows that have wide-color-gamut
-     *         color mode set to avoid jank in the middle of the transition.
+     *         showing windows while the transition animation is playing in case we have windows
+     *         that have wide-color-gamut color mode set to avoid jank in the middle of the
+     *         animation.
      */
     boolean canShowWindows() {
-        return allDrawn && !(isAnimating(PARENTS, ANIMATION_TYPE_APP_TRANSITION)
-                && hasNonDefaultColorWindow());
+        final boolean drawn = mTransitionController.isShellTransitionsEnabled()
+                ? mSyncState != SYNC_STATE_WAITING_FOR_DRAW : allDrawn;
+        final boolean animating = mTransitionController.isShellTransitionsEnabled()
+                ? mTransitionController.inPlayingTransition(this)
+                : isAnimating(PARENTS, ANIMATION_TYPE_APP_TRANSITION);
+        return drawn && !(animating && hasNonDefaultColorWindow());
     }
 
     /**
@@ -4569,6 +4587,12 @@
 
     void sendResult(int callingUid, String resultWho, int requestCode, int resultCode,
             Intent data, NeededUriGrants dataGrants) {
+        sendResult(callingUid, resultWho, requestCode, resultCode, data, dataGrants,
+                false /* forceSendForMediaProjection */);
+    }
+
+    private void sendResult(int callingUid, String resultWho, int requestCode, int resultCode,
+            Intent data, NeededUriGrants dataGrants, boolean forceSendForMediaProjection) {
         if (callingUid > 0) {
             mAtmService.mUgmInternal.grantUriPermissionUncheckedFromIntent(dataGrants,
                     getUriPermissionsLocked());
@@ -4577,8 +4601,10 @@
         if (DEBUG_RESULTS) {
             Slog.v(TAG, "Send activity result to " + this
                     + " : who=" + resultWho + " req=" + requestCode
-                    + " res=" + resultCode + " data=" + data);
+                    + " res=" + resultCode + " data=" + data
+                    + " forceSendForMediaProjection=" + forceSendForMediaProjection);
         }
+
         if (isState(RESUMED) && attachedToProcess()) {
             try {
                 final ArrayList<ResultInfo> list = new ArrayList<ResultInfo>();
@@ -4591,9 +4617,63 @@
             }
         }
 
+        // Schedule sending results now for Media Projection setup.
+        if (forceSendForMediaProjection && attachedToProcess() && isState(STARTED, PAUSING, PAUSED,
+                STOPPING, STOPPED)) {
+            final ClientTransaction transaction = ClientTransaction.obtain(app.getThread(), token);
+            // Build result to be returned immediately.
+            transaction.addCallback(ActivityResultItem.obtain(
+                    List.of(new ResultInfo(resultWho, requestCode, resultCode, data))));
+            // When the activity result is delivered, the activity will transition to RESUMED.
+            // Since the activity is only resumed so the result can be immediately delivered,
+            // return it to its original lifecycle state.
+            ActivityLifecycleItem lifecycleItem = getLifecycleItemForCurrentStateForResult();
+            if (lifecycleItem != null) {
+                transaction.setLifecycleStateRequest(lifecycleItem);
+            } else {
+                Slog.w(TAG, "Unable to get the lifecycle item for state " + mState
+                        + " so couldn't immediately send result");
+            }
+            try {
+                mAtmService.getLifecycleManager().scheduleTransaction(transaction);
+            } catch (RemoteException e) {
+                Slog.w(TAG, "Exception thrown sending result to " + this, e);
+            }
+        }
+
         addResultLocked(null /* from */, resultWho, requestCode, resultCode, data);
     }
 
+    /**
+     * Provides a lifecycle item for the current stat. Only to be used when force sending an
+     * activity result (as part of MeidaProjection setup). Does not support the following states:
+     * {@link State#INITIALIZING}, {@link State#RESTARTING_PROCESS},
+     * {@link State#FINISHING}, {@link State#DESTROYING}, {@link State#DESTROYED}. It does not make
+     * sense to force send a result to an activity in these states. Does not support
+     * {@link State#RESUMED} since a resumed activity will end in the resumed state after handling
+     * the result.
+     *
+     * @return an {@link ActivityLifecycleItem} for the current state, or {@code null} if the
+     * state is not valid.
+     */
+    @Nullable
+    private ActivityLifecycleItem getLifecycleItemForCurrentStateForResult() {
+        switch (mState) {
+            case STARTED:
+                return StartActivityItem.obtain(null);
+            case PAUSING:
+            case PAUSED:
+                return PauseActivityItem.obtain();
+            case STOPPING:
+            case STOPPED:
+                return StopActivityItem.obtain(configChangeFlags);
+            default:
+                // Do not send a result immediately if the activity is in state INITIALIZING,
+                // RESTARTING_PROCESS, FINISHING, DESTROYING, or DESTROYED.
+                return null;
+        }
+    }
+
     private void addNewIntentLocked(ReferrerIntent intent) {
         if (newIntents == null) {
             newIntents = new ArrayList<>();
@@ -4673,6 +4753,8 @@
         if (mPendingRemoteAnimation != null) {
             mDisplayContent.mAppTransition.overridePendingAppTransitionRemote(
                     mPendingRemoteAnimation);
+            mTransitionController.setStatusBarTransitionDelay(
+                    mPendingRemoteAnimation.getStatusBarTransitionDelay());
         } else {
             if (mPendingOptions == null
                     || mPendingOptions.getAnimationType() == ANIM_SCENE_TRANSITION) {
@@ -5195,12 +5277,19 @@
         }
 
         final int windowsCount = mChildren.size();
+        // With Shell-Transition, the activity will running a transition when it is visible.
+        // It won't be included when fromTransition is true means the call from finishTransition.
+        final boolean runningAnimation = sEnableShellTransitions ? visible
+                : isAnimating(PARENTS, ANIMATION_TYPE_APP_TRANSITION);
         for (int i = 0; i < windowsCount; i++) {
-            mChildren.get(i).onAppVisibilityChanged(visible, isAnimating(PARENTS,
-                    ANIMATION_TYPE_APP_TRANSITION));
+            mChildren.get(i).onAppVisibilityChanged(visible, runningAnimation);
         }
         setVisible(visible);
         setVisibleRequested(visible);
+        ProtoLog.v(WM_DEBUG_APP_TRANSITIONS, "commitVisibility: %s: visible=%b"
+                        + " visibleRequested=%b, isInTransition=%b, runningAnimation=%b, caller=%s",
+                this, isVisible(), mVisibleRequested, isInTransition(), runningAnimation,
+                Debug.getCallers(5));
         if (!visible) {
             stopFreezingScreen(true, true);
         } else {
@@ -5223,9 +5312,6 @@
             task.dispatchTaskInfoChangedIfNeeded(false /* force */);
             task = task.getParent().asTask();
         }
-        ProtoLog.v(WM_DEBUG_APP_TRANSITIONS,
-                "commitVisibility: %s: visible=%b mVisibleRequested=%b", this,
-                isVisible(), mVisibleRequested);
         final DisplayContent displayContent = getDisplayContent();
         displayContent.getInputMonitor().setUpdateInputWindowsNeededLw();
         if (performLayout) {
@@ -5260,17 +5346,22 @@
         final boolean delayed = isAnimating(PARENTS | CHILDREN,
                 ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_WINDOW_ANIMATION
                         | ANIMATION_TYPE_RECENTS);
-        if (!delayed && !usingShellTransitions) {
+        if (!delayed) {
             // We aren't delayed anything, but exiting windows rely on the animation finished
             // callback being called in case the ActivityRecord was pretending to be delayed,
             // which we might have done because we were in closing/opening apps list.
-            onAnimationFinished(ANIMATION_TYPE_APP_TRANSITION, null /* AnimationAdapter */);
-            if (visible) {
-                // The token was made immediately visible, there will be no entrance animation.
-                // We need to inform the client the enter animation was finished.
-                mEnteringAnimation = true;
-                mWmService.mActivityManagerAppTransitionNotifier.onAppTransitionFinishedLocked(
-                        token);
+            if (!usingShellTransitions) {
+                onAnimationFinished(ANIMATION_TYPE_APP_TRANSITION, null /* AnimationAdapter */);
+                if (visible) {
+                    // The token was made immediately visible, there will be no entrance animation.
+                    // We need to inform the client the enter animation was finished.
+                    mEnteringAnimation = true;
+                    mWmService.mActivityManagerAppTransitionNotifier.onAppTransitionFinishedLocked(
+                            token);
+                }
+            } else {
+                // update wallpaper target
+                setAppLayoutChanges(FINISH_LAYOUT_REDO_WALLPAPER, "ActivityRecord");
             }
         }
 
@@ -5554,7 +5645,10 @@
                 wasStopped, this);
         mAppStopped = false;
         // Allow the window to turn the screen on once the app is resumed again.
-        setCurrentLaunchCanTurnScreenOn(true);
+        if (mAtmService.getActivityStartController().isInExecution()) {
+            setCurrentLaunchCanTurnScreenOn(true);
+        }
+
         if (!wasStopped) {
             destroySurfaces(true /*cleanupOnResume*/);
         }
@@ -7730,11 +7824,15 @@
                 newParentConfiguration.windowConfiguration.getWindowingMode();
         final boolean isFixedOrientationLetterboxAllowed =
                 parentWindowingMode == WINDOWING_MODE_MULTI_WINDOW
-                        || parentWindowingMode == WINDOWING_MODE_FULLSCREEN;
+                        || parentWindowingMode == WINDOWING_MODE_FULLSCREEN
+                        // Switching from PiP to fullscreen.
+                        || (parentWindowingMode == WINDOWING_MODE_PINNED
+                                && resolvedConfig.windowConfiguration.getWindowingMode()
+                                        == WINDOWING_MODE_FULLSCREEN);
         // TODO(b/181207944): Consider removing the if condition and always run
         // resolveFixedOrientationConfiguration() since this should be applied for all cases.
         if (isFixedOrientationLetterboxAllowed) {
-            resolveFixedOrientationConfiguration(newParentConfiguration, parentWindowingMode);
+            resolveFixedOrientationConfiguration(newParentConfiguration);
         }
 
         if (mCompatDisplayInsets != null) {
@@ -7758,7 +7856,7 @@
         if (isFixedOrientationLetterboxAllowed || mCompatDisplayInsets != null
                 // In fullscreen, can be letterboxed for aspect ratio.
                 || !inMultiWindowMode()) {
-            updateResolvedBoundsHorizontalPosition(newParentConfiguration);
+            updateResolvedBoundsPosition(newParentConfiguration);
         }
 
         if (mVisibleRequested) {
@@ -7861,39 +7959,60 @@
     }
 
     /**
-     * Adjusts horizontal position of resolved bounds if they doesn't fill the parent using gravity
+     * Adjusts position of resolved bounds if they doesn't fill the parent using gravity
      * requested in the config or via an ADB command. For more context see {@link
-     * LetterboxUiController#getHorizontalPositionMultiplier(Configuration)}.
+     * LetterboxUiController#getHorizontalPositionMultiplier(Configuration)} and
+     * {@link LetterboxUiController#getVerticalPositionMultiplier(Configuration)}
      */
-    private void updateResolvedBoundsHorizontalPosition(Configuration newParentConfiguration) {
+    private void updateResolvedBoundsPosition(Configuration newParentConfiguration) {
         final Configuration resolvedConfig = getResolvedOverrideConfiguration();
         final Rect resolvedBounds = resolvedConfig.windowConfiguration.getBounds();
         final Rect screenResolvedBounds =
                 mSizeCompatBounds != null ? mSizeCompatBounds : resolvedBounds;
         final Rect parentAppBounds = newParentConfiguration.windowConfiguration.getAppBounds();
         final Rect parentBounds = newParentConfiguration.windowConfiguration.getBounds();
-        if (resolvedBounds.isEmpty() || parentBounds.width() == screenResolvedBounds.width()) {
+        if (resolvedBounds.isEmpty()) {
             return;
         }
-
+        // Horizontal position
         int offsetX = 0;
-        if (screenResolvedBounds.width() >= parentAppBounds.width()) {
-            // If resolved bounds overlap with insets, center within app bounds.
-            offsetX = getHorizontalCenterOffset(
-                    parentAppBounds.width(), screenResolvedBounds.width());
-        } else {
-            float positionMultiplier =
-                    mLetterboxUiController.getHorizontalPositionMultiplier(newParentConfiguration);
-            offsetX = (int) Math.ceil((parentAppBounds.width() - screenResolvedBounds.width())
-                    * positionMultiplier);
+        if (parentBounds.width() != screenResolvedBounds.width()) {
+            if (screenResolvedBounds.width() >= parentAppBounds.width()) {
+                // If resolved bounds overlap with insets, center within app bounds.
+                offsetX = getCenterOffset(
+                        parentAppBounds.width(), screenResolvedBounds.width());
+            } else {
+                float positionMultiplier =
+                        mLetterboxUiController.getHorizontalPositionMultiplier(
+                                newParentConfiguration);
+                offsetX = (int) Math.ceil((parentAppBounds.width() - screenResolvedBounds.width())
+                        * positionMultiplier);
+            }
+        }
+
+        // Vertical position
+        int offsetY = 0;
+        if (parentBounds.height() != screenResolvedBounds.height()) {
+            if (screenResolvedBounds.height() >= parentAppBounds.height()) {
+                // If resolved bounds overlap with insets, center within app bounds.
+                offsetY = getCenterOffset(
+                        parentAppBounds.height(), screenResolvedBounds.height());
+            } else {
+                float positionMultiplier =
+                        mLetterboxUiController.getVerticalPositionMultiplier(
+                                newParentConfiguration);
+                offsetY = (int) Math.ceil((parentAppBounds.height() - screenResolvedBounds.height())
+                        * positionMultiplier);
+            }
         }
 
         if (mSizeCompatBounds != null) {
-            mSizeCompatBounds.offset(offsetX, 0 /* offsetY */);
+            mSizeCompatBounds.offset(offsetX , offsetY);
+            final int dy = mSizeCompatBounds.top - resolvedBounds.top;
             final int dx = mSizeCompatBounds.left - resolvedBounds.left;
-            offsetBounds(resolvedConfig, dx,  0 /* offsetY */);
+            offsetBounds(resolvedConfig, dx, dy);
         } else {
-            offsetBounds(resolvedConfig, offsetX, 0 /* offsetY */);
+            offsetBounds(resolvedConfig, offsetX, offsetY);
         }
 
         // Since bounds has changed, the configuration needs to be computed accordingly.
@@ -7905,8 +8024,7 @@
     }
 
     boolean isInTransition() {
-        return mTransitionController.inTransition() // Shell transitions.
-                || isAnimating(PARENTS | TRANSITION); // Legacy transitions.
+        return inTransitionSelfOrParent();
     }
 
     /**
@@ -7921,6 +8039,10 @@
         return mLetterboxBoundsForFixedOrientationAndAspectRatio != null;
     }
 
+    boolean isAspectRatioApplied() {
+        return mIsAspectRatioApplied;
+    }
+
     /**
      * Whether this activity is eligible for letterbox eduction.
      *
@@ -8002,8 +8124,7 @@
      * <p>If letterboxed due to fixed orientation then aspect ratio restrictions are also applied
      * in this method.
      */
-    private void resolveFixedOrientationConfiguration(@NonNull Configuration newParentConfig,
-            int windowingMode) {
+    private void resolveFixedOrientationConfiguration(@NonNull Configuration newParentConfig) {
         mLetterboxBoundsForFixedOrientationAndAspectRatio = null;
         mIsEligibleForFixedOrientationLetterbox = false;
         final Rect parentBounds = newParentConfig.windowConfiguration.getBounds();
@@ -8023,11 +8144,6 @@
         if (organizedTf != null && !organizedTf.fillsParent()) {
             return;
         }
-        if (windowingMode == WINDOWING_MODE_PINNED) {
-            // PiP bounds have higher priority than the requested orientation. Otherwise the
-            // activity may be squeezed into a small piece.
-            return;
-        }
 
         final Rect resolvedBounds =
                 getResolvedOverrideConfiguration().windowConfiguration.getBounds();
@@ -8092,21 +8208,13 @@
         resolvedBounds.set(containingBounds);
 
         final float letterboxAspectRatioOverride =
-                mLetterboxUiController.getFixedOrientationLetterboxAspectRatio(newParentConfig);
+                mLetterboxUiController.getFixedOrientationLetterboxAspectRatio();
         final float desiredAspectRatio =
                 letterboxAspectRatioOverride > MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO
                         ? letterboxAspectRatioOverride : computeAspectRatio(parentBounds);
         // Apply aspect ratio to resolved bounds
         mIsAspectRatioApplied = applyAspectRatio(resolvedBounds, containingBoundsWithInsets,
-                containingBounds, desiredAspectRatio, true);
-
-        // Vertically center if orientation is landscape. Center within parent bounds with insets
-        // to ensure that insets do not trim height. Bounds will later be horizontally centered in
-        // {@link updateResolvedBoundsHorizontalPosition()} regardless of orientation.
-        if (forcedOrientation == ORIENTATION_LANDSCAPE) {
-            final int offsetY = parentBoundsWithInsets.centerY() - resolvedBounds.centerY();
-            resolvedBounds.offset(0, offsetY);
-        }
+                containingBounds, desiredAspectRatio);
 
         if (mCompatDisplayInsets != null) {
             mCompatDisplayInsets.getBoundsByRotation(
@@ -8130,10 +8238,9 @@
 
     /**
      * Resolves aspect ratio restrictions for an activity. If the bounds are restricted by
-     * aspect ratio, the position will be adjusted later in {@link
-     * updateResolvedBoundsHorizontalPosition} within parent's app bounds to balance the visual
-     * appearance. The policy of aspect ratio has higher priority than the requested override
-     * bounds.
+     * aspect ratio, the position will be adjusted later in {@link #updateResolvedBoundsPosition
+     * within parent's app bounds to balance the visual appearance. The policy of aspect ratio has
+     * higher priority than the requested override bounds.
      */
     private void resolveAspectRatioRestriction(Configuration newParentConfiguration) {
         final Configuration resolvedConfig = getResolvedOverrideConfiguration();
@@ -8145,7 +8252,7 @@
         mTmpBounds.setEmpty();
         mIsAspectRatioApplied = applyAspectRatio(mTmpBounds, parentAppBounds, parentBounds);
         // If the out bounds is not empty, it means the activity cannot fill parent's app bounds,
-        // then they should be aligned later in #updateResolvedBoundsHorizontalPosition().
+        // then they should be aligned later in #updateResolvedBoundsPosition()
         if (!mTmpBounds.isEmpty()) {
             resolvedBounds.set(mTmpBounds);
         }
@@ -8279,22 +8386,11 @@
             forAllWindows(WindowState::updateGlobalScale, false /* traverseTopToBottom */);
         }
 
-        // Vertically center within parent (bounds) - this is a UX choice and exclude the horizontal
-        // decor if needed. Horizontal position is adjusted in
-        // updateResolvedBoundsHorizontalPosition.
+        // The position will be later adjusted in updateResolvedBoundsPosition.
         // Above coordinates are in "@" space, now place "*" and "#" to screen space.
         final boolean fillContainer = resolvedBounds.equals(containingBounds);
         final int screenPosX = fillContainer ? containerBounds.left : containerAppBounds.left;
-        // If the activity is not in size compat mode, calculate vertical centering
-        //     from the container and resolved bounds.
-        // If the activity is in size compat mode, calculate vertical centering
-        //     from the container and size compat bounds.
-        // The container bounds contain the parent bounds offset in the display, for
-        // example when an activity is in the lower split of split screen.
-        final int screenPosY = (mSizeCompatBounds == null
-                ? (containerBounds.height() - resolvedBounds.height()) / 2
-                : (containerBounds.height() - mSizeCompatBounds.height()) / 2)
-                + containerBounds.top;
+        final int screenPosY  = fillContainer ? containerBounds.top : containerAppBounds.top;
 
         if (screenPosX != 0 || screenPosY != 0) {
             if (mSizeCompatBounds != null) {
@@ -8354,9 +8450,9 @@
         return true;
     }
 
-    /** @return The horizontal offset of putting the content in the center of viewport. */
-    private static int getHorizontalCenterOffset(int viewportW, int contentW) {
-        return (int) ((viewportW - contentW + 1) * 0.5f);
+    /** @return The horizontal / vertical offset of putting the content in the center of viewport.*/
+    private static int getCenterOffset(int viewportDim, int contentDim) {
+        return (int) ((viewportDim - contentDim + 1) * 0.5f);
     }
 
     private static void offsetBounds(Configuration inOutConfig, int offsetX, int offsetY) {
@@ -8544,7 +8640,7 @@
     private boolean applyAspectRatio(Rect outBounds, Rect containingAppBounds,
             Rect containingBounds) {
         return applyAspectRatio(outBounds, containingAppBounds, containingBounds,
-                0 /* desiredAspectRatio */, false /* fixedOrientationLetterboxed */);
+                0 /* desiredAspectRatio */);
     }
 
     /**
@@ -8555,23 +8651,18 @@
      */
     // TODO(b/36505427): Consider moving this method and similar ones to ConfigurationContainer.
     private boolean applyAspectRatio(Rect outBounds, Rect containingAppBounds,
-            Rect containingBounds, float desiredAspectRatio, boolean fixedOrientationLetterboxed) {
+            Rect containingBounds, float desiredAspectRatio) {
         final float maxAspectRatio = info.getMaxAspectRatio();
         final Task rootTask = getRootTask();
         final float minAspectRatio = getMinAspectRatio();
-        // Not using ActivityRecord#isResizeable() directly because app compatibility testing
-        // showed that android:supportsPictureInPicture="true" alone is not sufficient signal for
-        // not letterboxing an app.
-        // TODO(214602463): Remove multi-window check since orientation and aspect ratio
-        // restrictions should always be applied in multi-window.
+        final TaskFragment organizedTf = getOrganizedTaskFragment();
         if (task == null || rootTask == null
-                || (inMultiWindowMode() && isResizeable(/* checkPictureInPictureSupport */ false)
-                && !fixedOrientationLetterboxed)
                 || (maxAspectRatio < 1 && minAspectRatio < 1 && desiredAspectRatio < 1)
-                || isInVrUiMode(getConfiguration())) {
-            // We don't enforce aspect ratio if the activity task is in multiwindow unless it is in
-            // size-compat mode or is letterboxed from fixed orientation. We also don't set it if we
-            // are in VR mode.
+                // Don't set aspect ratio if we are in VR mode.
+                || isInVrUiMode(getConfiguration())
+                // TODO(b/232898850): Always respect aspect ratio requests.
+                // Don't set aspect ratio for activity in ActivityEmbedding split.
+                || (organizedTf != null && !organizedTf.fillsParent())) {
             return false;
         }
 
@@ -9619,7 +9710,7 @@
                     outBounds.bottom = dH;
                     outBounds.right = (int) ((float) dH * dH / dW);
                 }
-                outBounds.offset(getHorizontalCenterOffset(mWidth, outBounds.width()), 0 /* dy */);
+                outBounds.offset(getCenterOffset(mWidth, outBounds.width()), 0 /* dy */);
             }
             outAppBounds.set(outBounds);
 
@@ -9667,6 +9758,8 @@
                 false /*isNotInRecents*/,
                 record.mThumbnailAdapter != null ? record.mThumbnailAdapter.mCapturedLeash : null,
                 record.mStartBounds, task.getTaskInfo(), checkEnterPictureInPictureAppOpsState());
+        target.setShowBackdrop(record.mShowBackdrop);
+        target.setWillShowImeOnTarget(mStartingData != null && mStartingData.hasImeSurface());
         target.hasAnimatingParent = record.hasAnimatingParent();
         return target;
     }
@@ -9688,6 +9781,7 @@
 
     void setPictureInPictureParams(PictureInPictureParams p) {
         pictureInPictureArgs.copyOnlySet(p);
+        adjustPictureInPictureParamsIfNeeded(getBounds());
         getTask().getRootTask().onPictureInPictureParamsChanged();
     }
 
@@ -9699,6 +9793,10 @@
     @Override
     boolean isSyncFinished() {
         if (!super.isSyncFinished()) return false;
+        if (mDisplayContent != null && mDisplayContent.mUnknownAppVisibilityController
+                .isVisibilityUnknown(this)) {
+            return false;
+        }
         if (!isVisibleRequested()) return true;
         // Wait for attach. That is the earliest time where we know if there will be an associated
         // display rotation. If we don't wait, the starting-window can finishDrawing first and
@@ -9735,6 +9833,18 @@
         return new Point(windowLayout.minWidth, windowLayout.minHeight);
     }
 
+    /**
+     * Adjust the source rect hint in {@link #pictureInPictureArgs} by window bounds since
+     * it is relative to its root view (see also b/235599028).
+     * It is caller's responsibility to make sure this is called exactly once when we update
+     * {@link #pictureInPictureArgs} to avoid double offset.
+     */
+    private void adjustPictureInPictureParamsIfNeeded(Rect windowBounds) {
+        if (pictureInPictureArgs != null && pictureInPictureArgs.hasSourceBoundsHint()) {
+            pictureInPictureArgs.getSourceRectHint().offset(windowBounds.left, windowBounds.top);
+        }
+    }
+
     static class Builder {
         private final ActivityTaskManagerService mAtmService;
         private WindowProcessController mCallerApp;
diff --git a/services/core/java/com/android/server/wm/ActivityRecordInputSink.java b/services/core/java/com/android/server/wm/ActivityRecordInputSink.java
index fc22e2d..5d038dc 100644
--- a/services/core/java/com/android/server/wm/ActivityRecordInputSink.java
+++ b/services/core/java/com/android/server/wm/ActivityRecordInputSink.java
@@ -19,7 +19,6 @@
 import android.app.compat.CompatChanges;
 import android.compat.annotation.ChangeId;
 import android.os.InputConfig;
-import android.os.Process;
 import android.view.InputWindowHandle;
 import android.view.SurfaceControl;
 import android.view.WindowManager;
@@ -82,8 +81,8 @@
         // Don't block touches from passing through to an activity below us in the same task, if
         // that activity is either from the same uid or if that activity has launched an activity
         // in our uid.
-        final ActivityRecord activityBelowInTask =
-                mActivityRecord.getTask().getActivityBelow(mActivityRecord);
+        final ActivityRecord activityBelowInTask = mActivityRecord.getTask() != null
+                ? mActivityRecord.getTask().getActivityBelow(mActivityRecord) : null;
         final boolean allowPassthrough = activityBelowInTask != null && (
                 activityBelowInTask.mAllowedTouchUid == mActivityRecord.getUid()
                         || activityBelowInTask.isUid(mActivityRecord.getUid()));
@@ -102,8 +101,8 @@
         inputWindowHandle.replaceTouchableRegionWithCrop = true;
         inputWindowHandle.name = mName;
         inputWindowHandle.layoutParamsType = WindowManager.LayoutParams.TYPE_INPUT_CONSUMER;
-        inputWindowHandle.ownerUid = Process.myUid();
-        inputWindowHandle.ownerPid = Process.myPid();
+        inputWindowHandle.ownerPid = WindowManagerService.MY_PID;
+        inputWindowHandle.ownerUid = WindowManagerService.MY_UID;
         inputWindowHandle.inputConfig = InputConfig.NOT_FOCUSABLE | InputConfig.NO_INPUT_CHANNEL;
         return inputWindowHandle;
     }
diff --git a/services/core/java/com/android/server/wm/ActivityStartController.java b/services/core/java/com/android/server/wm/ActivityStartController.java
index 32ed472..9be9340 100644
--- a/services/core/java/com/android/server/wm/ActivityStartController.java
+++ b/services/core/java/com/android/server/wm/ActivityStartController.java
@@ -19,7 +19,9 @@
 import static android.app.ActivityManager.START_CANCELED;
 import static android.app.ActivityManager.START_SUCCESS;
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
 import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
+import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
 import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
 import static android.os.FactoryTest.FACTORY_TEST_LOW_LEVEL;
 
@@ -29,6 +31,7 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.app.ActivityManager;
 import android.app.ActivityOptions;
 import android.app.IApplicationThread;
 import android.content.ComponentName;
@@ -46,6 +49,7 @@
 import android.util.Slog;
 import android.util.SparseArray;
 import android.view.RemoteAnimationAdapter;
+import android.view.WindowManager;
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.util.ArrayUtils;
@@ -90,6 +94,8 @@
 
     boolean mCheckedForSetup = false;
 
+    private boolean mInExecution = false;
+
     /**
      * TODO(b/64750076): Capture information necessary for dump and
      * {@link #postStartActivityProcessingForLastStarter} rather than keeping the entire object
@@ -123,7 +129,15 @@
         return mFactory.obtain().setIntent(intent).setReason(reason);
     }
 
+    void onExecutionStarted(ActivityStarter starter) {
+        mInExecution = true;
+    }
+
+    boolean isInExecution() {
+        return mInExecution;
+    }
     void onExecutionComplete(ActivityStarter starter) {
+        mInExecution = false;
         if (mLastStarter == null) {
             mLastStarter = mFactory.obtain();
         }
@@ -526,6 +540,42 @@
                 .execute();
     }
 
+    boolean startExistingRecentsIfPossible(Intent intent, ActivityOptions options) {
+        final int activityType = mService.getRecentTasks().getRecentsComponent()
+                .equals(intent.getComponent()) ? ACTIVITY_TYPE_RECENTS : ACTIVITY_TYPE_HOME;
+        final Task rootTask = mService.mRootWindowContainer.getDefaultTaskDisplayArea()
+                .getRootTask(WINDOWING_MODE_UNDEFINED, activityType);
+        if (rootTask == null) return false;
+        final ActivityRecord r = rootTask.topRunningActivity();
+        if (r == null || r.mVisibleRequested || !r.attachedToProcess()
+                || !r.mActivityComponent.equals(intent.getComponent())
+                // Recents keeps invisible while device is locked.
+                || r.mDisplayContent.isKeyguardLocked()) {
+            return false;
+        }
+        mService.mRootWindowContainer.startPowerModeLaunchIfNeeded(true /* forceSend */, r);
+        final ActivityMetricsLogger.LaunchingState launchingState =
+                mSupervisor.getActivityMetricsLogger().notifyActivityLaunching(intent);
+        final Task task = r.getTask();
+        mService.deferWindowLayout();
+        try {
+            task.mTransitionController.requestTransitionIfNeeded(WindowManager.TRANSIT_TO_FRONT,
+                    0 /* flags */, task, task /* readyGroupRef */,
+                    options.getRemoteTransition(), null /* displayChange */);
+            r.mTransitionController.setTransientLaunch(r,
+                    TaskDisplayArea.getRootTaskAbove(rootTask));
+            task.moveToFront("startExistingRecents");
+            task.mInResumeTopActivity = true;
+            task.resumeTopActivity(null /* prev */, options, true /* deferPause */);
+            mSupervisor.getActivityMetricsLogger().notifyActivityLaunched(launchingState,
+                    ActivityManager.START_TASK_TO_FRONT, false, r, options);
+        } finally {
+            task.mInResumeTopActivity = false;
+            mService.continueWindowLayout();
+        }
+        return true;
+    }
+
     void registerRemoteAnimationForNextActivityStart(String packageName,
             RemoteAnimationAdapter adapter, @Nullable IBinder launchCookie) {
         mPendingRemoteAnimationRegistry.addPendingAnimation(packageName, adapter, launchCookie);
diff --git a/services/core/java/com/android/server/wm/ActivityStartInterceptor.java b/services/core/java/com/android/server/wm/ActivityStartInterceptor.java
index a452013..7d84bdf 100644
--- a/services/core/java/com/android/server/wm/ActivityStartInterceptor.java
+++ b/services/core/java/com/android/server/wm/ActivityStartInterceptor.java
@@ -49,6 +49,7 @@
 import android.content.pm.SuspendDialogInfo;
 import android.content.pm.UserInfo;
 import android.os.Bundle;
+import android.os.IBinder;
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.os.UserManager;
@@ -64,7 +65,7 @@
 import com.android.server.wm.ActivityInterceptorCallback.ActivityInterceptResult;
 
 /**
- * A class that contains activity intercepting logic for {@link ActivityStarter#startActivityLocked}
+ * A class that contains activity intercepting logic for {@link ActivityStarter#execute()}
  * It's initialized via setStates and interception occurs via the intercept method.
  *
  * Note that this class is instantiated when {@link ActivityManagerService} gets created so there
@@ -104,6 +105,7 @@
     ActivityInfo mAInfo;
     String mResolvedType;
     Task mInTask;
+    TaskFragment mInTaskFragment;
     ActivityOptions mActivityOptions;
 
     ActivityStartInterceptor(
@@ -135,15 +137,46 @@
     }
 
     private IntentSender createIntentSenderForOriginalIntent(int callingUid, int flags) {
-        Bundle activityOptions = deferCrossProfileAppsAnimationIfNecessary();
+        Bundle bOptions = deferCrossProfileAppsAnimationIfNecessary();
+        final TaskFragment taskFragment = getLaunchTaskFragment();
+        // If the original intent is going to be embedded, try to forward the embedding TaskFragment
+        // and its task id to embed back the original intent.
+        if (taskFragment != null) {
+            ActivityOptions activityOptions = bOptions != null
+                    ? ActivityOptions.fromBundle(bOptions)
+                    : ActivityOptions.makeBasic();
+            activityOptions.setLaunchTaskFragmentToken(taskFragment.getFragmentToken());
+            bOptions = activityOptions.toBundle();
+        }
         final IIntentSender target = mService.getIntentSenderLocked(
                 INTENT_SENDER_ACTIVITY, mCallingPackage, mCallingFeatureId, callingUid, mUserId,
                 null /*token*/, null /*resultCode*/, 0 /*requestCode*/,
                 new Intent[] { mIntent }, new String[] { mResolvedType },
-                flags, activityOptions);
+                flags, bOptions);
         return new IntentSender(target);
     }
 
+
+    /**
+     * A helper function to obtain the targeted {@link TaskFragment} during
+     * {@link #intercept(Intent, ResolveInfo, ActivityInfo, String, Task, TaskFragment, int, int,
+     * ActivityOptions)} if any.
+     */
+    @Nullable
+    private TaskFragment getLaunchTaskFragment() {
+        if (mInTaskFragment != null) {
+            return mInTaskFragment;
+        }
+        if (mActivityOptions == null) {
+            return null;
+        }
+        final IBinder taskFragToken = mActivityOptions.getLaunchTaskFragmentToken();
+        if (taskFragToken == null) {
+            return null;
+        }
+        return TaskFragment.fromTaskFragmentToken(taskFragToken, mService);
+    }
+
     /**
      * Intercept the launch intent based on various signals. If an interception happened the
      * internal variables get assigned and need to be read explicitly by the caller.
@@ -151,7 +184,8 @@
      * @return true if an interception occurred
      */
     boolean intercept(Intent intent, ResolveInfo rInfo, ActivityInfo aInfo, String resolvedType,
-            Task inTask, int callingPid, int callingUid, ActivityOptions activityOptions) {
+            Task inTask, TaskFragment inTaskFragment, int callingPid, int callingUid,
+            ActivityOptions activityOptions) {
         mUserManager = UserManager.get(mServiceContext);
 
         mIntent = intent;
@@ -161,6 +195,7 @@
         mAInfo = aInfo;
         mResolvedType = resolvedType;
         mInTask = inTask;
+        mInTaskFragment = inTaskFragment;
         mActivityOptions = activityOptions;
 
         if (interceptQuietProfileIfNeeded()) {
@@ -332,12 +367,21 @@
         mCallingPid = mRealCallingPid;
         mCallingUid = mRealCallingUid;
         mResolvedType = null;
+        final TaskFragment taskFragment = getLaunchTaskFragment();
         // If we are intercepting and there was a task, convert it into an extra for the
         // ConfirmCredentials intent and unassign it, as otherwise the task will move to
         // front even if ConfirmCredentials is cancelled.
         if (mInTask != null) {
             mIntent.putExtra(EXTRA_TASK_ID, mInTask.mTaskId);
             mInTask = null;
+        } else if (taskFragment != null) {
+            // If the original intent is started to an embedded TaskFragment, append its parent task
+            // id to extra. It is to embed back the original intent to the TaskFragment with the
+            // same task.
+            final Task parentTask = taskFragment.getTask();
+            if (parentTask != null) {
+                mIntent.putExtra(EXTRA_TASK_ID, parentTask.mTaskId);
+            }
         }
         if (mActivityOptions == null) {
             mActivityOptions = ActivityOptions.makeBasic();
diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java
index ec9babf..99b34c7 100644
--- a/services/core/java/com/android/server/wm/ActivityStarter.java
+++ b/services/core/java/com/android/server/wm/ActivityStarter.java
@@ -51,10 +51,12 @@
 import static android.content.pm.ActivityInfo.LAUNCH_SINGLE_INSTANCE_PER_TASK;
 import static android.content.pm.ActivityInfo.LAUNCH_SINGLE_TASK;
 import static android.content.pm.ActivityInfo.LAUNCH_SINGLE_TOP;
+import static android.content.pm.ActivityInfo.launchModeToString;
 import static android.content.pm.PackageManager.PERMISSION_GRANTED;
 import static android.os.Process.INVALID_UID;
 import static android.view.Display.DEFAULT_DISPLAY;
 import static android.view.WindowManager.TRANSIT_OPEN;
+import static android.window.WindowContainerTransaction.HierarchyOp.HIERARCHY_OP_TYPE_START_ACTIVITY_IN_TASK_FRAGMENT;
 
 import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_CONFIGURATION;
 import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_TASKS;
@@ -81,6 +83,7 @@
 import static com.android.server.wm.TaskFragment.EMBEDDING_ALLOWED;
 import static com.android.server.wm.TaskFragment.EMBEDDING_DISALLOWED_MIN_DIMENSION_VIOLATION;
 import static com.android.server.wm.TaskFragment.EMBEDDING_DISALLOWED_NEW_TASK;
+import static com.android.server.wm.TaskFragment.EMBEDDING_DISALLOWED_NEW_TASK_FRAGMENT;
 import static com.android.server.wm.TaskFragment.EMBEDDING_DISALLOWED_UNTRUSTED_HOST;
 import static com.android.server.wm.WindowContainer.POSITION_TOP;
 
@@ -216,6 +219,7 @@
     // The task which was above the targetTask before starting this activity. null if the targetTask
     // was already on top or if the activity is in a new task.
     private Task mPriorAboveTask;
+    private boolean mDisplayLockAndOccluded;
 
     // We must track when we deliver the new intent since multiple code paths invoke
     // {@link #deliverNewIntent}. This is due to early returns in the code path. This flag is used
@@ -647,6 +651,8 @@
      */
     int execute() {
         try {
+            onExecutionStarted();
+
             // Refuse possible leaked file descriptors
             if (mRequest.intent != null && mRequest.intent.hasFileDescriptors()) {
                 throw new IllegalArgumentException("File descriptors passed in Intent");
@@ -1056,8 +1062,8 @@
 
         mInterceptor.setStates(userId, realCallingPid, realCallingUid, startFlags, callingPackage,
                 callingFeatureId);
-        if (mInterceptor.intercept(intent, rInfo, aInfo, resolvedType, inTask, callingPid,
-                callingUid, checkedOptions)) {
+        if (mInterceptor.intercept(intent, rInfo, aInfo, resolvedType, inTask, inTaskFragment,
+                callingPid, callingUid, checkedOptions)) {
             // activity start was intercepted, e.g. because the target user is currently in quiet
             // mode (turn off work) or the target application is suspended
             intent = mInterceptor.mIntent;
@@ -1261,6 +1267,10 @@
         mController.onExecutionComplete(this);
     }
 
+    private void onExecutionStarted() {
+        mController.onExecutionStarted(this);
+    }
+
     private boolean isHomeApp(int uid, @Nullable String packageName) {
         if (mService.mHomeProcess != null) {
             // Fast check
@@ -1651,20 +1661,20 @@
                 && transitionController.getTransitionPlayer() != null)
                 ? transitionController.createTransition(TRANSIT_OPEN) : null;
         RemoteTransition remoteTransition = r.takeRemoteTransition();
-        if (newTransition != null && remoteTransition != null) {
-            newTransition.setRemoteTransition(remoteTransition);
-        }
         transitionController.collect(r);
         try {
             mService.deferWindowLayout();
-            Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "startActivityInner");
-            result = startActivityInner(r, sourceRecord, voiceSession, voiceInteractor,
-                    startFlags, doResume, options, inTask, inTaskFragment, restrictedBgActivity,
-                    intentGrants);
+            try {
+                Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "startActivityInner");
+                result = startActivityInner(r, sourceRecord, voiceSession, voiceInteractor,
+                        startFlags, doResume, options, inTask, inTaskFragment, restrictedBgActivity,
+                        intentGrants);
+            } finally {
+                Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER);
+                startedActivityRootTask = handleStartResult(r, options, result, newTransition,
+                        remoteTransition);
+            }
         } finally {
-            Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER);
-            startedActivityRootTask = handleStartResult(r, options, result, newTransition,
-                    remoteTransition);
             mService.continueWindowLayout();
         }
         postStartActivityProcessing(r, result, startedActivityRootTask);
@@ -1681,6 +1691,7 @@
     private @Nullable Task handleStartResult(@NonNull ActivityRecord started,
             ActivityOptions options, int result, Transition newTransition,
             RemoteTransition remoteTransition) {
+        final boolean userLeaving = mSupervisor.mUserLeaving;
         mSupervisor.mUserLeaving = false;
         final Task currentRootTask = started.getRootTask();
         final Task startedActivityRootTask =
@@ -1699,7 +1710,8 @@
             // Root task should also be detached from display and be removed if it's empty.
             if (startedActivityRootTask != null && startedActivityRootTask.isAttached()
                     && !startedActivityRootTask.hasActivity()
-                    && !startedActivityRootTask.isActivityTypeHome()) {
+                    && !startedActivityRootTask.isActivityTypeHome()
+                    && !startedActivityRootTask.mCreatedByOrganizer) {
                 startedActivityRootTask.removeIfPossible("handleStartResult");
             }
             if (newTransition != null) {
@@ -1740,19 +1752,42 @@
         // Transition housekeeping.
         final TransitionController transitionController = started.mTransitionController;
         final boolean isStarted = result == START_SUCCESS || result == START_TASK_TO_FRONT;
+        final boolean isTransientLaunch = options != null && options.getTransientLaunch();
+        // Start transient launch while keyguard locked and occluded by other app, for this
+        // condition we would like to play the remote transition without modify any visible state
+        // for the hierarchy in core, so here will force execute this transition.
+        final boolean forceTransientTransition = isTransientLaunch && mPriorAboveTask != null
+                && mDisplayLockAndOccluded;
         if (isStarted) {
             // The activity is started new rather than just brought forward, so record it as an
             // existence change.
             transitionController.collectExistenceChange(started);
         } else if (result == START_DELIVERED_TO_TOP && newTransition != null) {
             // We just delivered to top, so there isn't an actual transition here.
-            newTransition.abort();
-            newTransition = null;
+            if (!forceTransientTransition) {
+                newTransition.abort();
+                newTransition = null;
+            }
         }
-        if (options != null && options.getTransientLaunch()) {
+        if (isTransientLaunch) {
+            if (forceTransientTransition && newTransition != null) {
+                newTransition.collect(mLastStartActivityRecord);
+                newTransition.collect(mPriorAboveTask);
+            }
             // `started` isn't guaranteed to be the actual relevant activity, so we must wait
             // until after we launched to identify the relevant activity.
             transitionController.setTransientLaunch(mLastStartActivityRecord, mPriorAboveTask);
+            if (forceTransientTransition && newTransition != null) {
+                final DisplayContent dc = mLastStartActivityRecord.getDisplayContent();
+                // update wallpaper target to TransientHide
+                dc.mWallpaperController.adjustWallpaperWindows();
+                // execute transition because there is no change
+                newTransition.setReady(dc, true /* ready */);
+            }
+        }
+        if (!userLeaving) {
+            // no-user-leaving implies not entering PiP.
+            transitionController.setCanPipOnFinish(false /* canPipOnFinish */);
         }
         if (newTransition != null) {
             transitionController.requestStartTransition(newTransition,
@@ -2389,6 +2424,7 @@
         mAvoidMoveToFront = false;
         mFrozeTaskList = false;
         mTransientLaunch = false;
+        mDisplayLockAndOccluded = false;
 
         mVoiceSession = null;
         mVoiceInteractor = null;
@@ -2492,6 +2528,16 @@
                 mAvoidMoveToFront = true;
             }
             mTransientLaunch = mOptions.getTransientLaunch();
+            final KeyguardController kc = mSupervisor.getKeyguardController();
+            final int displayId = mPreferredTaskDisplayArea.getDisplayId();
+            mDisplayLockAndOccluded = kc.isKeyguardLocked(displayId)
+                    && kc.isDisplayOccluded(displayId);
+            // Recents animation on lock screen, do not resume & move launcher to top.
+            if (mTransientLaunch && mDisplayLockAndOccluded
+                    && mService.getTransitionController().isShellTransitionsEnabled()) {
+                mDoResume = false;
+                mAvoidMoveToFront = true;
+            }
             mTargetRootTask = Task.fromWindowContainerToken(mOptions.getLaunchRootTask());
 
             if (inTaskFragment == null) {
@@ -2640,6 +2686,12 @@
                 mLaunchFlags |= FLAG_ACTIVITY_NEW_TASK;
             }
         }
+
+        if ((mLaunchFlags & FLAG_ACTIVITY_LAUNCH_ADJACENT) != 0
+                && ((mLaunchFlags & FLAG_ACTIVITY_NEW_TASK) == 0 || mSourceRecord == null)) {
+            // ignore the flag if there is no the sourceRecord or without new_task flag
+            mLaunchFlags &= ~FLAG_ACTIVITY_LAUNCH_ADJACENT;
+        }
     }
 
     private void computeSourceRootTask() {
@@ -2759,17 +2811,15 @@
                 mTargetRootTask = getOrCreateRootTask(mStartActivity, mLaunchFlags, intentTask,
                         mOptions);
             }
-        } else {
-            // If a launch target indicated, and 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.
-            // TODO(b/231541706): Migrate the logic to wm-shell after having proper APIs to help
-            //  resolve target task without actually starting the activity.
-            final Task adjacentTargetTask = mTargetRootTask.getAdjacentTaskFragment() != null
-                    ? mTargetRootTask.getAdjacentTaskFragment().asTask() : null;
-            if (adjacentTargetTask != null && intentActivity.isDescendantOf(adjacentTargetTask)) {
-                mTargetRootTask = adjacentTargetTask;
-            }
+        }
+
+        // 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;
+        if (adjacentTargetTask != null && intentActivity.isDescendantOf(adjacentTargetTask)) {
+            mTargetRootTask = adjacentTargetTask;
         }
 
         // If the target task is not in the front, then we need to bring it to the front...
@@ -2922,6 +2972,10 @@
                 newParent = candidateTf;
             }
         }
+        if (newParent.canHaveEmbeddingActivityTransition(mStartActivity)) {
+            // Make sure the embedded TaskFragment is included in the start activity transition.
+            newParent.collectEmbeddedTaskFragmentIfNeeded();
+        }
         if (mStartActivity.getTaskFragment() == null
                 || mStartActivity.getTaskFragment() == newParent) {
             newParent.addChild(mStartActivity, POSITION_TOP);
@@ -2940,7 +2994,7 @@
         switch(result) {
             case EMBEDDING_DISALLOWED_NEW_TASK: {
                 errMsg = "Cannot embed " + mStartActivity + " that launched on another task"
-                        + ",mLaunchMode=" + mLaunchMode
+                        + ",mLaunchMode=" + launchModeToString(mLaunchMode)
                         + ",mLaunchFlag=" + Integer.toHexString(mLaunchFlags);
                 break;
             }
@@ -2954,12 +3008,18 @@
                 errMsg = "The app:" + mCallingUid + "is not trusted to " + mStartActivity;
                 break;
             }
+            case EMBEDDING_DISALLOWED_NEW_TASK_FRAGMENT: {
+                errMsg = "Cannot embed activity across TaskFragments for result, resultTo: "
+                        + mStartActivity.resultTo;
+                break;
+            }
             default:
                 errMsg = "Unhandled embed result:" + result;
         }
         if (taskFragment.isOrganized()) {
             mService.mWindowOrganizerController.sendTaskFragmentOperationFailure(
                     taskFragment.getTaskFragmentOrganizer(), mRequest.errorCallbackToken,
+                    taskFragment, HIERARCHY_OP_TYPE_START_ACTIVITY_IN_TASK_FRAGMENT,
                     new SecurityException(errMsg));
         } else {
             // If the taskFragment is not organized, just dump error message as warning logs.
@@ -3270,12 +3330,8 @@
             pw.println(mOptions);
         }
         pw.print(prefix);
-        pw.print("mLaunchSingleTop=");
-        pw.print(LAUNCH_SINGLE_TOP == mLaunchMode);
-        pw.print(" mLaunchSingleInstance=");
-        pw.print(LAUNCH_SINGLE_INSTANCE == mLaunchMode);
-        pw.print(" mLaunchSingleTask=");
-        pw.println(LAUNCH_SINGLE_TASK == mLaunchMode);
+        pw.print("mLaunchMode=");
+        pw.print(launchModeToString(mLaunchMode));
         pw.print(prefix);
         pw.print("mLaunchFlags=0x");
         pw.print(Integer.toHexString(mLaunchFlags));
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java
index 8e7dde2..e7b62b0 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java
@@ -675,9 +675,6 @@
     public abstract boolean hasSystemAlertWindowPermission(int callingUid, int callingPid,
             String callingPackage);
 
-    /** Called when the device is waking up */
-    public abstract void notifyWakingUp();
-
     /**
      * Registers a callback which can intercept activity starts.
      * @throws IllegalArgumentException if duplicate ids are provided
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index f830f6f..7323718 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -64,7 +64,7 @@
 import static android.provider.Settings.System.FONT_SCALE;
 import static android.view.Display.DEFAULT_DISPLAY;
 import static android.view.Display.INVALID_DISPLAY;
-import static android.view.WindowManager.TRANSIT_WAKE;
+import static android.view.WindowManager.TRANSIT_PIP;
 import static android.view.WindowManagerPolicyConstants.KEYGUARD_GOING_AWAY_FLAG_TO_LAUNCHER_CLEAR_SNAPSHOT;
 
 import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_CONFIGURATION;
@@ -73,7 +73,6 @@
 import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_LOCKTASK;
 import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_TASKS;
 import static com.android.server.am.ActivityManagerService.ANR_TRACE_DIR;
-import static com.android.server.am.ActivityManagerService.MY_PID;
 import static com.android.server.am.ActivityManagerService.STOCK_PM_FLAGS;
 import static com.android.server.am.ActivityManagerService.dumpStackTraces;
 import static com.android.server.am.ActivityManagerServiceDumpActivitiesProto.ROOT_WINDOW_CONTAINER;
@@ -95,6 +94,7 @@
 import static com.android.server.am.EventLogTags.writeConfigurationChanged;
 import static com.android.server.wm.ActivityInterceptorCallback.FIRST_ORDERED_ID;
 import static com.android.server.wm.ActivityInterceptorCallback.LAST_ORDERED_ID;
+import static com.android.server.wm.ActivityRecord.State.PAUSING;
 import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_ALL;
 import static com.android.server.wm.ActivityTaskManagerDebugConfig.POSTFIX_ROOT_TASK;
 import static com.android.server.wm.ActivityTaskManagerDebugConfig.POSTFIX_SWITCH;
@@ -116,6 +116,7 @@
 import static com.android.server.wm.RootWindowContainer.MATCH_ATTACHED_TASK_ONLY;
 import static com.android.server.wm.RootWindowContainer.MATCH_ATTACHED_TASK_OR_RECENT_TASKS;
 import static com.android.server.wm.Task.REPARENT_KEEP_ROOT_TASK_AT_FRONT;
+import static com.android.server.wm.WindowManagerService.MY_PID;
 import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_NORMAL;
 
 import android.Manifest;
@@ -221,6 +222,7 @@
 import android.util.TimeUtils;
 import android.util.proto.ProtoOutputStream;
 import android.view.IRecentsAnimationRunner;
+import android.view.IWindowFocusObserver;
 import android.view.RemoteAnimationAdapter;
 import android.view.RemoteAnimationDefinition;
 import android.view.WindowManager;
@@ -238,6 +240,7 @@
 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;
@@ -1025,7 +1028,7 @@
             mTaskSupervisor.setWindowManager(wm);
             mRootWindowContainer.setWindowManager(wm);
             if (mBackNavigationController != null) {
-                mBackNavigationController.setTaskSnapshotController(wm.mTaskSnapshotController);
+                mBackNavigationController.setWindowManager(wm);
             }
         }
     }
@@ -1229,6 +1232,28 @@
             @Nullable String callingFeatureId, Intent intent, String resolvedType,
             IBinder resultTo, String resultWho, int requestCode, int startFlags,
             ProfilerInfo profilerInfo, Bundle bOptions, int userId, boolean validateIncomingUser) {
+
+        final SafeActivityOptions opts = SafeActivityOptions.fromBundle(bOptions);
+        // A quick path (skip general intent/task resolving) to start recents animation if the
+        // recents (or home) activity is available in background.
+        if (opts != null && opts.getOriginalOptions().getTransientLaunch()
+                && isCallerRecents(Binder.getCallingUid())) {
+            final long origId = Binder.clearCallingIdentity();
+            try {
+                synchronized (mGlobalLock) {
+                    Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "startExistingRecents");
+                    if (mActivityStartController.startExistingRecentsIfPossible(
+                            intent, opts.getOriginalOptions())) {
+                        return ActivityManager.START_TASK_TO_FRONT;
+                    }
+                    // Else follow the standard launch procedure.
+                }
+            } finally {
+                Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
+                Binder.restoreCallingIdentity(origId);
+            }
+        }
+
         assertPackageMatchesCallingUid(callingPackage);
         enforceNotIsolatedCaller("startActivityAsUser");
         if (Process.isSdkSandboxUid(Binder.getCallingUid())) {
@@ -1255,7 +1280,7 @@
                 .setRequestCode(requestCode)
                 .setStartFlags(startFlags)
                 .setProfilerInfo(profilerInfo)
-                .setActivityOptions(bOptions)
+                .setActivityOptions(opts)
                 .setUserId(userId)
                 .execute();
 
@@ -1809,13 +1834,14 @@
     }
 
     @Override
-    public BackNavigationInfo startBackNavigation(boolean requestAnimation) {
+    public BackNavigationInfo startBackNavigation(boolean requestAnimation,
+            IWindowFocusObserver observer) {
         mAmInternal.enforceCallingPermission(START_TASKS_FROM_RECENTS,
                 "startBackNavigation()");
         if (mBackNavigationController == null) {
             return null;
         }
-        return mBackNavigationController.startBackNavigation(mWindowManager, requestAnimation);
+        return mBackNavigationController.startBackNavigation(requestAnimation, observer);
     }
 
     /**
@@ -2177,14 +2203,6 @@
                     : null;
             mTaskSupervisor.findTaskToMoveToFront(task, flags, realOptions, "moveTaskToFront",
                     false /* forceNonResizable */);
-
-            final ActivityRecord topActivity = task.getTopNonFinishingActivity();
-            if (topActivity != null) {
-
-                // We are reshowing a task, use a starting window to hide the initial draw delay
-                // so the transition can start earlier.
-                topActivity.showStartingWindow(true /* taskSwitch */);
-            }
         } finally {
             Binder.restoreCallingIdentity(origId);
         }
@@ -2293,16 +2311,25 @@
      * @return a list of {@link ActivityManager.RunningTaskInfo} with up to {@code maxNum} items
      */
     public List<ActivityManager.RunningTaskInfo> getTasks(int maxNum) {
-        return getTasks(maxNum, false /* filterForVisibleRecents */, false /* keepIntentExtra */);
+        return getTasks(maxNum, false /* filterForVisibleRecents */, false /* keepIntentExtra */,
+                INVALID_DISPLAY);
     }
 
     /**
      * @param filterOnlyVisibleRecents whether to filter the tasks based on whether they would ever
      *                                 be visible in the recent task list in systemui
      */
-    @Override
     public List<ActivityManager.RunningTaskInfo> getTasks(int maxNum,
             boolean filterOnlyVisibleRecents, boolean keepIntentExtra) {
+        return getTasks(maxNum, filterOnlyVisibleRecents, keepIntentExtra, INVALID_DISPLAY);
+    }
+
+    /**
+     * @param displayId the target display id, or {@link INVALID_DISPLAY} not to filter by displayId
+     */
+    @Override
+    public List<ActivityManager.RunningTaskInfo> getTasks(int maxNum,
+            boolean filterOnlyVisibleRecents, boolean keepIntentExtra, int displayId) {
         final int callingUid = Binder.getCallingUid();
         final int callingPid = Binder.getCallingPid();
 
@@ -2324,7 +2351,7 @@
             final boolean allowed = isGetTasksAllowed("getTasks", callingPid, callingUid);
             flags |= (allowed ? RunningTasks.FLAG_ALLOWED : 0);
             mRootWindowContainer.getRunningTasks(
-                    maxNum, list, flags, callingUid, callingProfileIds);
+                    maxNum, list, flags, callingUid, callingProfileIds, displayId);
         }
 
         return list;
@@ -2550,6 +2577,9 @@
                     }
                     task = r.getTask();
                 }
+                // If {@code isSystemCaller} is {@code true}, it means the user intends to stop
+                // pinned mode through UI; otherwise, it's called by an app and we need to stop
+                // locked or pinned mode, subject to checks.
                 getLockTaskController().stopLockTaskMode(task, isSystemCaller, callingUid);
             }
             // Launch in-call UI if a call is ongoing. This is necessary to allow stopping the lock
@@ -3484,10 +3514,12 @@
     /**
      * Puts the given activity in picture in picture mode if possible.
      *
+     * @param fromClient true if this comes from a client call (eg. Activity.enterPip).
      * @return true if the activity is now in picture-in-picture mode, or false if it could not
      * enter picture-in-picture mode.
      */
-    boolean enterPictureInPictureMode(@NonNull ActivityRecord r, PictureInPictureParams params) {
+    boolean enterPictureInPictureMode(@NonNull ActivityRecord r,
+            @NonNull PictureInPictureParams params, boolean fromClient) {
         // If the activity is already in picture in picture mode, then just return early
         if (r.inPinnedWindowingMode()) {
             return true;
@@ -3500,6 +3532,21 @@
             return false;
         }
 
+        // If the app is using legacy-entry (not auto-enter), then we will get a client-request
+        // that was actually a server-request (via pause(userLeaving=true)). This happens when
+        // the app is PAUSING, so detect that case here.
+        boolean originallyFromClient = fromClient
+                && (!r.isState(PAUSING) || params.isAutoEnterEnabled());
+
+        // Create a transition only for this pip entry if it is coming from the app without the
+        // system requesting that the app enter-pip. If the system requested it, that means it
+        // should be part of that transition if possible.
+        final Transition transition =
+                (getTransitionController().isShellTransitionsEnabled() && originallyFromClient)
+                ? new Transition(TRANSIT_PIP, 0 /* flags */,
+                        getTransitionController(), mWindowManager.mSyncEngine)
+                : null;
+
         final Runnable enterPipRunnable = () -> {
             synchronized (mGlobalLock) {
                 if (r.getParent() == null) {
@@ -3508,11 +3555,11 @@
                 }
                 r.setPictureInPictureParams(params);
                 mRootWindowContainer.moveActivityToPinnedRootTask(r,
-                        null /* launchIntoPipHostActivity */, "enterPictureInPictureMode");
-                final Task task = r.getTask();
+                        null /* launchIntoPipHostActivity */, "enterPictureInPictureMode",
+                        transition);
                 // Continue the pausing process after entering pip.
-                if (task.getPausingActivity() == r) {
-                    task.schedulePauseActivity(r, false /* userLeaving */,
+                if (r.isState(PAUSING)) {
+                    r.getTask().schedulePauseActivity(r, false /* userLeaving */,
                             false /* pauseImmediately */, "auto-pip");
                 }
             }
@@ -3525,12 +3572,36 @@
             mActivityClientController.dismissKeyguard(r.token, new KeyguardDismissCallback() {
                 @Override
                 public void onDismissSucceeded() {
-                    mH.post(enterPipRunnable);
+                    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);
+                        }
+                        mH.post(enterPipRunnable);
+                    }
                 }
             }, null /* message */);
         } else {
             // Enter picture in picture immediately otherwise
-            enterPipRunnable.run();
+            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 {
+                if (transition != null) {
+                    getTransitionController().moveToCollecting(transition);
+                }
+                enterPipRunnable.run();
+            }
         }
         return true;
     }
@@ -3624,7 +3695,8 @@
     }
 
     @Override
-    public TaskSnapshot getTaskSnapshot(int taskId, boolean isLowResolution) {
+    public TaskSnapshot getTaskSnapshot(int taskId, boolean isLowResolution,
+            boolean takeSnapshotIfNeeded) {
         mAmInternal.enforceCallingPermission(READ_FRAME_BUFFER, "getTaskSnapshot()");
         final long ident = Binder.clearCallingIdentity();
         try {
@@ -3638,8 +3710,12 @@
                 }
             }
             // Don't call this while holding the lock as this operation might hit the disk.
-            return mWindowManager.mTaskSnapshotController.getSnapshot(taskId, task.mUserId,
-                    true /* restoreFromDisk */, isLowResolution);
+            TaskSnapshot taskSnapshot = mWindowManager.mTaskSnapshotController.getSnapshot(taskId,
+                    task.mUserId, true /* restoreFromDisk */, isLowResolution);
+            if (taskSnapshot == null && takeSnapshotIfNeeded) {
+                taskSnapshot = takeTaskSnapshot(taskId);
+            }
+            return taskSnapshot;
         } finally {
             Binder.restoreCallingIdentity(ident);
         }
@@ -5260,7 +5336,13 @@
     }
 
     @Override
-    public void setRunningRemoteTransitionDelegate(IApplicationThread caller) {
+    public void setRunningRemoteTransitionDelegate(IApplicationThread delegate) {
+        final TransitionController controller = getTransitionController();
+        // A quick path without entering WM lock.
+        if (delegate != null && controller.mRemotePlayer.reportRunning(delegate)) {
+            // The delegate was known as running remote transition.
+            return;
+        }
         mAmInternal.enforceCallingPermission(CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS,
                 "setRunningRemoteTransition");
         final int callingPid = Binder.getCallingPid();
@@ -5277,13 +5359,12 @@
                 Slog.e(TAG, msg);
                 throw new SecurityException(msg);
             }
-            final WindowProcessController wpc = getProcessController(caller);
+            final WindowProcessController wpc = getProcessController(delegate);
             if (wpc == null) {
-                Slog.w(TAG, "Unable to find process for application " + caller);
+                Slog.w(TAG, "setRunningRemoteTransition: no process for " + delegate);
                 return;
             }
-            wpc.setRunningRemoteAnimation(true /* running */);
-            callingProc.addRemoteAnimationDelegate(wpc);
+            controller.mRemotePlayer.update(wpc, true /* running */, false /* predict */);
         }
     }
 
@@ -6612,7 +6693,8 @@
         @Override
         public TaskSnapshot getTaskSnapshotBlocking(
                 int taskId, boolean isLowResolution) {
-            return ActivityTaskManagerService.this.getTaskSnapshot(taskId, isLowResolution);
+            return ActivityTaskManagerService.this.getTaskSnapshot(taskId, isLowResolution,
+                    false /* takeSnapshotIfNeeded */);
         }
 
         @Override
@@ -6670,15 +6752,6 @@
         }
 
         @Override
-        public void notifyWakingUp() {
-            synchronized (mGlobalLock) {
-                // Start a transition for waking. This is needed for showWhenLocked activities.
-                getTransitionController().requestTransitionIfNeeded(TRANSIT_WAKE, 0 /* flags */,
-                        null /* trigger */, mRootWindowContainer.getDefaultDisplay());
-            }
-        }
-
-        @Override
         public void registerActivityStartInterceptor(
                 @ActivityInterceptorCallback.OrderedId int id,
                 ActivityInterceptorCallback callback) {
diff --git a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
index 35f977d..8878944 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
@@ -42,6 +42,7 @@
 import static android.content.pm.PackageManager.PERMISSION_GRANTED;
 import static android.os.PowerManager.PARTIAL_WAKE_LOCK;
 import static android.os.Process.INVALID_UID;
+import static android.os.Process.SYSTEM_UID;
 import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER;
 import static android.view.Display.DEFAULT_DISPLAY;
 import static android.view.WindowManager.TRANSIT_TO_FRONT;
@@ -73,13 +74,9 @@
 import static com.android.server.wm.LockTaskController.LOCK_TASK_AUTH_LAUNCHABLE_PRIV;
 import static com.android.server.wm.RootWindowContainer.MATCH_ATTACHED_TASK_OR_RECENT_TASKS;
 import static com.android.server.wm.RootWindowContainer.MATCH_ATTACHED_TASK_OR_RECENT_TASKS_AND_RESTORE;
-import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION;
-import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_RECENTS;
 import static com.android.server.wm.Task.FLAG_FORCE_HIDDEN_FOR_PINNED_TASK;
 import static com.android.server.wm.Task.REPARENT_KEEP_ROOT_TASK_AT_FRONT;
 import static com.android.server.wm.Task.TAG_CLEANUP;
-import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS;
-import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION;
 import static com.android.server.wm.WindowContainer.POSITION_TOP;
 
 import android.Manifest;
@@ -93,6 +90,7 @@
 import android.app.IActivityClientController;
 import android.app.ProfilerInfo;
 import android.app.ResultInfo;
+import android.app.TaskInfo;
 import android.app.WaitResult;
 import android.app.servertransaction.ActivityLifecycleItem;
 import android.app.servertransaction.ClientTransaction;
@@ -121,7 +119,6 @@
 import android.os.Looper;
 import android.os.Message;
 import android.os.PowerManager;
-import android.os.Process;
 import android.os.RemoteException;
 import android.os.SystemClock;
 import android.os.Trace;
@@ -155,6 +152,7 @@
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.Consumer;
 
 // TODO: This class has become a dumping ground. Let's
 // - Move things relating to the hierarchy to RootWindowContainer
@@ -246,6 +244,9 @@
     /** Helper class to abstract out logic for fetching the set of currently running tasks */
     private RunningTasks mRunningTasks;
 
+    /** Helper for {@link Task#fillTaskInfo}. */
+    final TaskInfoHelper mTaskInfoHelper = new TaskInfoHelper();
+
     private final ActivityTaskSupervisorHandler mHandler;
     final Looper mLooper;
 
@@ -886,11 +887,12 @@
 
                 logIfTransactionTooLarge(r.intent, r.getSavedState());
 
-                if (r.isEmbedded()) {
+                final TaskFragment organizedTaskFragment = r.getOrganizedTaskFragment();
+                if (organizedTaskFragment != null) {
                     // Sending TaskFragmentInfo to client to ensure the info is updated before
                     // the activity creation.
                     mService.mTaskFragmentOrganizerController.dispatchPendingInfoChangedEvent(
-                            r.getOrganizedTaskFragment());
+                            organizedTaskFragment);
                 }
 
                 // Create activity launch transaction.
@@ -1316,7 +1318,7 @@
     }
 
     void acquireLaunchWakelock() {
-        if (VALIDATE_WAKE_LOCK_CALLER && Binder.getCallingUid() != Process.myUid()) {
+        if (VALIDATE_WAKE_LOCK_CALLER && Binder.getCallingUid() != SYSTEM_UID) {
             throw new IllegalStateException("Calling must be system uid");
         }
         mLaunchingActivityWakeLock.acquire();
@@ -1389,8 +1391,7 @@
 
             if (mLaunchingActivityWakeLock.isHeld()) {
                 mHandler.removeMessages(LAUNCH_TIMEOUT_MSG);
-                if (VALIDATE_WAKE_LOCK_CALLER &&
-                        Binder.getCallingUid() != Process.myUid()) {
+                if (VALIDATE_WAKE_LOCK_CALLER && Binder.getCallingUid() != SYSTEM_UID) {
                     throw new IllegalStateException("Calling must be system uid");
                 }
                 mLaunchingActivityWakeLock.release();
@@ -1434,10 +1435,10 @@
                 mUserLeaving = true;
             }
 
-            task.mTransitionController.requestTransitionIfNeeded(TRANSIT_TO_FRONT,
-                    0 /* flags */, task, task /* readyGroupRef */,
-                    options != null ? options.getRemoteTransition() : null,
-                    null /* displayChange */);
+            final Transition newTransition = task.mTransitionController.isShellTransitionsEnabled()
+                    ? task.mTransitionController.isCollecting() ? null
+                    : task.mTransitionController.createTransition(TRANSIT_TO_FRONT) : null;
+            task.mTransitionController.collect(task);
             reason = reason + " findTaskToMoveToFront";
             boolean reparented = false;
             if (task.isResizeable() && canUseActivityOptionsLaunchBounds(options)) {
@@ -1480,6 +1481,17 @@
             handleNonResizableTaskIfNeeded(task, WINDOWING_MODE_UNDEFINED,
                     mRootWindowContainer.getDefaultTaskDisplayArea(), currentRootTask,
                     forceNonResizeable);
+            if (r != null) {
+                // Use a starting window to reduce the transition latency for reshowing the task.
+                // Note that with shell transition, this should be executed before requesting
+                // transition to avoid delaying the starting window.
+                r.showStartingWindow(true /* taskSwitch */);
+            }
+            if (newTransition != null) {
+                task.mTransitionController.requestStartTransition(newTransition, task,
+                        options != null ? options.getRemoteTransition() : null,
+                        null /* displayChange */);
+            }
         } finally {
             mUserLeaving = false;
         }
@@ -1800,7 +1812,7 @@
         if (!mGoingToSleepWakeLock.isHeld()) {
             mGoingToSleepWakeLock.acquire();
             if (mLaunchingActivityWakeLock.isHeld()) {
-                if (VALIDATE_WAKE_LOCK_CALLER && Binder.getCallingUid() != Process.myUid()) {
+                if (VALIDATE_WAKE_LOCK_CALLER && Binder.getCallingUid() != SYSTEM_UID) {
                     throw new IllegalStateException("Calling must be system uid");
                 }
                 mLaunchingActivityWakeLock.release();
@@ -1921,9 +1933,7 @@
         ArrayList<ActivityRecord> readyToStopActivities = null;
         for (int i = mStoppingActivities.size() - 1; i >= 0; --i) {
             final ActivityRecord s = mStoppingActivities.get(i);
-            final boolean animating = s.isAnimating(TRANSITION | PARENTS,
-                    ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_RECENTS)
-                    || s.inTransition();
+            final boolean animating = s.isInTransition();
             ProtoLog.v(WM_DEBUG_STATES, "Stopping %s: nowVisible=%b animating=%b "
                     + "finishing=%s", s, s.nowVisible, animating, s.finishing);
             if (!animating || mService.mShuttingDown) {
@@ -2461,8 +2471,7 @@
                 case LAUNCH_TIMEOUT_MSG: {
                     if (mLaunchingActivityWakeLock.isHeld()) {
                         Slog.w(TAG, "Launch timeout has expired, giving up wake lock!");
-                        if (VALIDATE_WAKE_LOCK_CALLER
-                                && Binder.getCallingUid() != Process.myUid()) {
+                        if (VALIDATE_WAKE_LOCK_CALLER && Binder.getCallingUid() != SYSTEM_UID) {
                             throw new IllegalStateException("Calling must be system uid");
                         }
                         mLaunchingActivityWakeLock.release();
@@ -2623,6 +2632,41 @@
     }
 
     /**
+     * Fills the info that needs to iterate all activities of task, such as the number of
+     * non-finishing activities and collecting launch cookies.
+     */
+    static class TaskInfoHelper implements Consumer<ActivityRecord> {
+        private TaskInfo mInfo;
+        private ActivityRecord mTopRunning;
+
+        ActivityRecord fillAndReturnTop(Task task, TaskInfo info) {
+            info.numActivities = 0;
+            info.baseActivity = null;
+            mInfo = info;
+            task.forAllActivities(this);
+            final ActivityRecord top = mTopRunning;
+            mTopRunning = null;
+            mInfo = null;
+            return top;
+        }
+
+        @Override
+        public void accept(ActivityRecord r) {
+            if (r.finishing) {
+                return;
+            }
+            if (r.mLaunchCookie != null) {
+                mInfo.addLaunchCookie(r.mLaunchCookie);
+            }
+            mInfo.numActivities++;
+            mInfo.baseActivity = r.mActivityComponent;
+            if (mTopRunning == null) {
+                mTopRunning = r;
+            }
+        }
+    }
+
+    /**
      * Internal container to store a match qualifier alongside a WaitResult.
      */
     private static class WaitInfo {
diff --git a/services/core/java/com/android/server/wm/AnrController.java b/services/core/java/com/android/server/wm/AnrController.java
index 6befefd..b23f501 100644
--- a/services/core/java/com/android/server/wm/AnrController.java
+++ b/services/core/java/com/android/server/wm/AnrController.java
@@ -256,7 +256,7 @@
         Slog.i(TAG_WM, "Pre-dump for unresponsive");
 
         final ArrayList<Integer> firstPids = new ArrayList<>(1);
-        firstPids.add(ActivityManagerService.MY_PID);
+        firstPids.add(WindowManagerService.MY_PID);
         ArrayList<Integer> nativePids = null;
         final int[] pids = shouldDumpSf[0]
                 ? Process.getPidsForCommands(new String[] { "/system/bin/surfaceflinger" })
diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java
index 5410dd8..53f2c71 100644
--- a/services/core/java/com/android/server/wm/AppTransition.java
+++ b/services/core/java/com/android/server/wm/AppTransition.java
@@ -34,6 +34,8 @@
 import static android.view.WindowManager.TRANSIT_OLD_ACTIVITY_OPEN;
 import static android.view.WindowManager.TRANSIT_OLD_ACTIVITY_RELAUNCH;
 import static android.view.WindowManager.TRANSIT_OLD_CRASHING_ACTIVITY_CLOSE;
+import static android.view.WindowManager.TRANSIT_OLD_DREAM_ACTIVITY_CLOSE;
+import static android.view.WindowManager.TRANSIT_OLD_DREAM_ACTIVITY_OPEN;
 import static android.view.WindowManager.TRANSIT_OLD_KEYGUARD_GOING_AWAY;
 import static android.view.WindowManager.TRANSIT_OLD_KEYGUARD_GOING_AWAY_ON_WALLPAPER;
 import static android.view.WindowManager.TRANSIT_OLD_KEYGUARD_OCCLUDE;
@@ -64,6 +66,9 @@
 import static com.android.internal.R.styleable.WindowAnimation_activityCloseExitAnimation;
 import static com.android.internal.R.styleable.WindowAnimation_activityOpenEnterAnimation;
 import static com.android.internal.R.styleable.WindowAnimation_activityOpenExitAnimation;
+import static com.android.internal.R.styleable.WindowAnimation_dreamActivityCloseExitAnimation;
+import static com.android.internal.R.styleable.WindowAnimation_dreamActivityOpenEnterAnimation;
+import static com.android.internal.R.styleable.WindowAnimation_dreamActivityOpenExitAnimation;
 import static com.android.internal.R.styleable.WindowAnimation_launchTaskBehindSourceAnimation;
 import static com.android.internal.R.styleable.WindowAnimation_launchTaskBehindTargetAnimation;
 import static com.android.internal.R.styleable.WindowAnimation_taskCloseEnterAnimation;
@@ -309,6 +314,10 @@
         setAppTransitionState(APP_STATE_TIMEOUT);
     }
 
+    @ColorInt int getNextAppTransitionBackgroundColor() {
+        return mNextAppTransitionBackgroundColor;
+    }
+
     HardwareBuffer getAppTransitionThumbnailHeader(WindowContainer container) {
         AppTransitionAnimationSpec spec = mNextAppTransitionAnimationsSpecs.get(
                 container.hashCode());
@@ -518,6 +527,95 @@
         return TransitionAnimation.loadAnimationSafely(context, resId, TAG);
     }
 
+    static int mapOpenCloseTransitTypes(int transit, boolean enter) {
+        int animAttr = 0;
+        switch (transit) {
+            case TRANSIT_OLD_ACTIVITY_OPEN:
+            case TRANSIT_OLD_TRANSLUCENT_ACTIVITY_OPEN:
+                animAttr = enter
+                        ? WindowAnimation_activityOpenEnterAnimation
+                        : WindowAnimation_activityOpenExitAnimation;
+                break;
+            case TRANSIT_OLD_ACTIVITY_CLOSE:
+            case TRANSIT_OLD_TRANSLUCENT_ACTIVITY_CLOSE:
+                animAttr = enter
+                        ? WindowAnimation_activityCloseEnterAnimation
+                        : WindowAnimation_activityCloseExitAnimation;
+                break;
+            case TRANSIT_OLD_TASK_OPEN:
+                animAttr = enter
+                        ? WindowAnimation_taskOpenEnterAnimation
+                        : WindowAnimation_taskOpenExitAnimation;
+                break;
+            case TRANSIT_OLD_TASK_CLOSE:
+                animAttr = enter
+                        ? WindowAnimation_taskCloseEnterAnimation
+                        : WindowAnimation_taskCloseExitAnimation;
+                break;
+            case TRANSIT_OLD_TASK_TO_FRONT:
+                animAttr = enter
+                        ? WindowAnimation_taskToFrontEnterAnimation
+                        : WindowAnimation_taskToFrontExitAnimation;
+                break;
+            case TRANSIT_OLD_TASK_TO_BACK:
+                animAttr = enter
+                        ? WindowAnimation_taskToBackEnterAnimation
+                        : WindowAnimation_taskToBackExitAnimation;
+                break;
+            case TRANSIT_OLD_WALLPAPER_OPEN:
+                animAttr = enter
+                        ? WindowAnimation_wallpaperOpenEnterAnimation
+                        : WindowAnimation_wallpaperOpenExitAnimation;
+                break;
+            case TRANSIT_OLD_WALLPAPER_CLOSE:
+                animAttr = enter
+                        ? WindowAnimation_wallpaperCloseEnterAnimation
+                        : WindowAnimation_wallpaperCloseExitAnimation;
+                break;
+            case TRANSIT_OLD_WALLPAPER_INTRA_OPEN:
+                animAttr = enter
+                        ? WindowAnimation_wallpaperIntraOpenEnterAnimation
+                        : WindowAnimation_wallpaperIntraOpenExitAnimation;
+                break;
+            case TRANSIT_OLD_WALLPAPER_INTRA_CLOSE:
+                animAttr = enter
+                        ? WindowAnimation_wallpaperIntraCloseEnterAnimation
+                        : WindowAnimation_wallpaperIntraCloseExitAnimation;
+                break;
+            case TRANSIT_OLD_TASK_OPEN_BEHIND:
+                animAttr = enter
+                        ? WindowAnimation_launchTaskBehindSourceAnimation
+                        : WindowAnimation_launchTaskBehindTargetAnimation;
+                break;
+            // TODO(b/189386466): Use activity transition as the fallback. Investigate if we
+            //  need new TaskFragment transition.
+            case TRANSIT_OLD_TASK_FRAGMENT_OPEN:
+                animAttr = enter
+                        ? WindowAnimation_activityOpenEnterAnimation
+                        : WindowAnimation_activityOpenExitAnimation;
+                break;
+            // TODO(b/189386466): Use activity transition as the fallback. Investigate if we
+            //  need new TaskFragment transition.
+            case TRANSIT_OLD_TASK_FRAGMENT_CLOSE:
+                animAttr = enter
+                        ? WindowAnimation_activityCloseEnterAnimation
+                        : WindowAnimation_activityCloseExitAnimation;
+                break;
+            case TRANSIT_OLD_DREAM_ACTIVITY_OPEN:
+                animAttr = enter
+                        ? WindowAnimation_dreamActivityOpenEnterAnimation
+                        : WindowAnimation_dreamActivityOpenExitAnimation;
+                break;
+            case TRANSIT_OLD_DREAM_ACTIVITY_CLOSE:
+                animAttr = enter
+                        ? 0
+                        : WindowAnimation_dreamActivityCloseExitAnimation;
+                break;
+        }
+
+        return animAttr;
+    }
+
     @Nullable
     Animation loadAnimationAttr(LayoutParams lp, int animAttr, int transit) {
         return mTransitionAnimation.loadAnimationAttr(lp, animAttr, transit);
@@ -645,9 +743,15 @@
             @Nullable Rect surfaceInsets, @Nullable Rect stableInsets, boolean isVoiceInteraction,
             boolean freeform, WindowContainer container) {
 
-        if (mNextAppTransitionOverrideRequested
-                && (container.canCustomizeAppTransition() || mOverrideTaskTransition)) {
-            mNextAppTransitionType = NEXT_TRANSIT_TYPE_CUSTOM;
+        final boolean canCustomizeAppTransition = container.canCustomizeAppTransition();
+
+        if (mNextAppTransitionOverrideRequested) {
+            if (canCustomizeAppTransition || mOverrideTaskTransition) {
+                mNextAppTransitionType = NEXT_TRANSIT_TYPE_CUSTOM;
+            } else {
+                ProtoLog.e(WM_DEBUG_APP_TRANSITIONS_ANIM, "applyAnimation: "
+                        + " override requested, but it is prohibited by policy.");
+            }
         }
 
         Animation a;
@@ -762,87 +866,16 @@
                     "applyAnimation: anim=%s transit=%s isEntrance=%b Callers=%s",
                     a, appTransitionOldToString(transit), enter, Debug.getCallers(3));
         } else {
-            int animAttr = 0;
-            switch (transit) {
-                case TRANSIT_OLD_ACTIVITY_OPEN:
-                case TRANSIT_OLD_TRANSLUCENT_ACTIVITY_OPEN:
-                    animAttr = enter
-                            ? WindowAnimation_activityOpenEnterAnimation
-                            : WindowAnimation_activityOpenExitAnimation;
-                    break;
-                case TRANSIT_OLD_ACTIVITY_CLOSE:
-                case TRANSIT_OLD_TRANSLUCENT_ACTIVITY_CLOSE:
-                    animAttr = enter
-                            ? WindowAnimation_activityCloseEnterAnimation
-                            : WindowAnimation_activityCloseExitAnimation;
-                    break;
-                case TRANSIT_OLD_TASK_OPEN:
-                    animAttr = enter
-                            ? WindowAnimation_taskOpenEnterAnimation
-                            : WindowAnimation_taskOpenExitAnimation;
-                    break;
-                case TRANSIT_OLD_TASK_CLOSE:
-                    animAttr = enter
-                            ? WindowAnimation_taskCloseEnterAnimation
-                            : WindowAnimation_taskCloseExitAnimation;
-                    break;
-                case TRANSIT_OLD_TASK_TO_FRONT:
-                    animAttr = enter
-                            ? WindowAnimation_taskToFrontEnterAnimation
-                            : WindowAnimation_taskToFrontExitAnimation;
-                    break;
-                case TRANSIT_OLD_TASK_TO_BACK:
-                    animAttr = enter
-                            ? WindowAnimation_taskToBackEnterAnimation
-                            : WindowAnimation_taskToBackExitAnimation;
-                    break;
-                case TRANSIT_OLD_WALLPAPER_OPEN:
-                    animAttr = enter
-                            ? WindowAnimation_wallpaperOpenEnterAnimation
-                            : WindowAnimation_wallpaperOpenExitAnimation;
-                    break;
-                case TRANSIT_OLD_WALLPAPER_CLOSE:
-                    animAttr = enter
-                            ? WindowAnimation_wallpaperCloseEnterAnimation
-                            : WindowAnimation_wallpaperCloseExitAnimation;
-                    break;
-                case TRANSIT_OLD_WALLPAPER_INTRA_OPEN:
-                    animAttr = enter
-                            ? WindowAnimation_wallpaperIntraOpenEnterAnimation
-                            : WindowAnimation_wallpaperIntraOpenExitAnimation;
-                    break;
-                case TRANSIT_OLD_WALLPAPER_INTRA_CLOSE:
-                    animAttr = enter
-                            ? WindowAnimation_wallpaperIntraCloseEnterAnimation
-                            : WindowAnimation_wallpaperIntraCloseExitAnimation;
-                    break;
-                case TRANSIT_OLD_TASK_OPEN_BEHIND:
-                    animAttr = enter
-                            ? WindowAnimation_launchTaskBehindSourceAnimation
-                            : WindowAnimation_launchTaskBehindTargetAnimation;
-                    break;
-                // TODO(b/189386466): Use activity transition as the fallback. Investigate if we
-                //  need new TaskFragment transition.
-                case TRANSIT_OLD_TASK_FRAGMENT_OPEN:
-                    animAttr = enter
-                            ? WindowAnimation_activityOpenEnterAnimation
-                            : WindowAnimation_activityOpenExitAnimation;
-                    break;
-                // TODO(b/189386466): Use activity transition as the fallback. Investigate if we
-                //  need new TaskFragment transition.
-                case TRANSIT_OLD_TASK_FRAGMENT_CLOSE:
-                    animAttr = enter
-                            ? WindowAnimation_activityCloseEnterAnimation
-                            : WindowAnimation_activityCloseExitAnimation;
-                    break;
-            }
-            a = animAttr != 0 ? loadAnimationAttr(lp, animAttr, transit) : null;
+            int animAttr = mapOpenCloseTransitTypes(transit, enter);
+            a = animAttr == 0 ? null : (canCustomizeAppTransition
+                ? loadAnimationAttr(lp, animAttr, transit)
+                : mTransitionAnimation.loadDefaultAnimationAttr(animAttr, transit));
 
             ProtoLog.v(WM_DEBUG_APP_TRANSITIONS_ANIM,
                     "applyAnimation: anim=%s animAttr=0x%x transit=%s isEntrance=%b "
-                            + "Callers=%s",
+                            + " canCustomizeAppTransition=%b Callers=%s",
                     a, animAttr, appTransitionOldToString(transit), enter,
-                    Debug.getCallers(3));
+                    canCustomizeAppTransition, Debug.getCallers(3));
         }
         setAppTransitionFinishedCallbackIfNeeded(a);
 
@@ -988,18 +1021,19 @@
     }
 
     void overridePendingAppTransitionRemote(RemoteAnimationAdapter remoteAnimationAdapter) {
-        overridePendingAppTransitionRemote(remoteAnimationAdapter, false /* sync */);
+        overridePendingAppTransitionRemote(remoteAnimationAdapter, false /* sync */,
+                false /* isActivityEmbedding*/);
     }
 
     void overridePendingAppTransitionRemote(RemoteAnimationAdapter remoteAnimationAdapter,
-            boolean sync) {
+            boolean sync, boolean isActivityEmbedding) {
         ProtoLog.i(WM_DEBUG_APP_TRANSITIONS, "Override pending remote transitionSet=%b adapter=%s",
                         isTransitionSet(), remoteAnimationAdapter);
         if (isTransitionSet() && !mNextAppTransitionIsSync) {
             clear();
             mNextAppTransitionType = NEXT_TRANSIT_TYPE_REMOTE;
             mRemoteAnimationController = new RemoteAnimationController(mService, mDisplayContent,
-                    remoteAnimationAdapter, mHandler);
+                    remoteAnimationAdapter, mHandler, isActivityEmbedding);
             mNextAppTransitionIsSync = sync;
         }
     }
@@ -1157,6 +1191,12 @@
             case TRANSIT_OLD_TASK_FRAGMENT_CHANGE: {
                 return "TRANSIT_OLD_TASK_FRAGMENT_CHANGE";
             }
+            case TRANSIT_OLD_DREAM_ACTIVITY_OPEN: {
+                return "TRANSIT_OLD_DREAM_ACTIVITY_OPEN";
+            }
+            case TRANSIT_OLD_DREAM_ACTIVITY_CLOSE: {
+                return "TRANSIT_OLD_DREAM_ACTIVITY_CLOSE";
+            }
             default: {
                 return "<UNKNOWN: " + transition + ">";
             }
diff --git a/services/core/java/com/android/server/wm/AppTransitionController.java b/services/core/java/com/android/server/wm/AppTransitionController.java
index e60ea12..fb9d7e6 100644
--- a/services/core/java/com/android/server/wm/AppTransitionController.java
+++ b/services/core/java/com/android/server/wm/AppTransitionController.java
@@ -16,6 +16,7 @@
 
 package com.android.server.wm;
 
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_DREAM;
 import static android.view.WindowManager.TRANSIT_CHANGE;
 import static android.view.WindowManager.TRANSIT_CLOSE;
 import static android.view.WindowManager.TRANSIT_FLAG_APP_CRASHED;
@@ -32,6 +33,8 @@
 import static android.view.WindowManager.TRANSIT_OLD_ACTIVITY_OPEN;
 import static android.view.WindowManager.TRANSIT_OLD_ACTIVITY_RELAUNCH;
 import static android.view.WindowManager.TRANSIT_OLD_CRASHING_ACTIVITY_CLOSE;
+import static android.view.WindowManager.TRANSIT_OLD_DREAM_ACTIVITY_CLOSE;
+import static android.view.WindowManager.TRANSIT_OLD_DREAM_ACTIVITY_OPEN;
 import static android.view.WindowManager.TRANSIT_OLD_KEYGUARD_GOING_AWAY;
 import static android.view.WindowManager.TRANSIT_OLD_KEYGUARD_GOING_AWAY_ON_WALLPAPER;
 import static android.view.WindowManager.TRANSIT_OLD_KEYGUARD_OCCLUDE;
@@ -339,6 +342,9 @@
             ArraySet<WindowContainer> changingContainers, @Nullable WindowState wallpaperTarget,
             @Nullable WindowState oldWallpaper, boolean skipAppTransitionAnimation) {
 
+        final ActivityRecord topOpeningApp = getTopApp(openingApps, false /* ignoreHidden */);
+        final ActivityRecord topClosingApp = getTopApp(closingApps, true /* ignoreHidden */);
+
         // Determine if closing and opening app token sets are wallpaper targets, in which case
         // special animations are needed.
         final boolean openingAppHasWallpaper = canBeWallpaperTarget(openingApps)
@@ -346,7 +352,7 @@
         final boolean closingAppHasWallpaper = canBeWallpaperTarget(closingApps)
                 && wallpaperTarget != null;
 
-        // Keyguard transit has highest priority.
+        // Keyguard transit has high priority.
         switch (appTransition.getKeyguardTransition()) {
             case TRANSIT_KEYGUARD_GOING_AWAY:
                 return openingAppHasWallpaper ? TRANSIT_OLD_KEYGUARD_GOING_AWAY_ON_WALLPAPER
@@ -361,6 +367,15 @@
                 return TRANSIT_OLD_KEYGUARD_UNOCCLUDE;
         }
 
+        // Determine whether the top opening and closing activity is a dream activity. If so, this
+        // has higher priority than others except keyguard transit.
+        if (topOpeningApp != null && topOpeningApp.getActivityType() == ACTIVITY_TYPE_DREAM) {
+            return TRANSIT_OLD_DREAM_ACTIVITY_OPEN;
+        } else if (topClosingApp != null
+                && topClosingApp.getActivityType() == ACTIVITY_TYPE_DREAM) {
+            return TRANSIT_OLD_DREAM_ACTIVITY_CLOSE;
+        }
+
         // This is not keyguard transition and one of the app has request to skip app transition.
         if (skipAppTransitionAnimation) {
             return WindowManager.TRANSIT_OLD_UNSET;
@@ -424,11 +439,6 @@
             }
         }
 
-        final ActivityRecord topOpeningApp = getTopApp(openingApps,
-                false /* ignoreHidden */);
-        final ActivityRecord topClosingApp = getTopApp(closingApps,
-                true /* ignoreHidden */);
-
         if (closingAppHasWallpaper && openingAppHasWallpaper) {
             ProtoLog.v(WM_DEBUG_APP_TRANSITIONS, "Wallpaper animation!");
             switch (firstTransit) {
@@ -682,7 +692,8 @@
         if (adapter == null) {
             return false;
         }
-        mDisplayContent.mAppTransition.overridePendingAppTransitionRemote(adapter);
+        mDisplayContent.mAppTransition.overridePendingAppTransitionRemote(
+                adapter, false /* sync */, true /*isActivityEmbedding*/);
         ProtoLog.v(WM_DEBUG_APP_TRANSITIONS,
                 "Override with TaskFragment remote animation for transit=%s",
                 AppTransition.appTransitionOldToString(transit));
diff --git a/services/core/java/com/android/server/wm/AsyncRotationController.java b/services/core/java/com/android/server/wm/AsyncRotationController.java
index 61deb59..219092b 100644
--- a/services/core/java/com/android/server/wm/AsyncRotationController.java
+++ b/services/core/java/com/android/server/wm/AsyncRotationController.java
@@ -18,7 +18,6 @@
 
 import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_SEAMLESS;
 import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR;
-import static android.view.WindowManager.LayoutParams.TYPE_NOTIFICATION_SHADE;
 
 import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_TOKEN_TRANSFORM;
 
@@ -121,7 +120,7 @@
             } else {
                 mTransitionOp = OP_CHANGE;
             }
-        } else if (transitionType != WindowManager.TRANSIT_NONE) {
+        } else if (displayContent.mTransitionController.isShellTransitionsEnabled()) {
             mTransitionOp = OP_APP_SWITCH;
         } else {
             mTransitionOp = OP_LEGACY;
@@ -144,8 +143,7 @@
         // Legacy animation doesn't need to wait for the start transaction.
         if (mTransitionOp == OP_LEGACY) {
             mIsStartTransactionCommitted = true;
-        } else if (displayContent.mTransitionController.useShellTransitionsRotation()
-                || displayContent.mTransitionController.isCollecting(displayContent)) {
+        } else if (displayContent.mTransitionController.isCollecting(displayContent)) {
             keepAppearanceInPreviousRotation();
         }
     }
@@ -153,8 +151,7 @@
     /** Assigns the operation for the window tokens which can update rotation asynchronously. */
     @Override
     public void accept(WindowState w) {
-        if (w.mActivityRecord != null || !w.mHasSurface || w.mIsWallpaper || w.mIsImWindow
-                || w.mAttrs.type == TYPE_NOTIFICATION_SHADE) {
+        if (!w.mHasSurface || !canBeAsync(w.mToken)) {
             return;
         }
         if (mTransitionOp == OP_LEGACY && w.mForceSeamlesslyRotate) {
@@ -186,23 +183,28 @@
         mTargetWindowTokens.put(w.mToken, new Operation(action));
     }
 
+    /** Returns {@code true} if the window token can update rotation independently. */
+    static boolean canBeAsync(WindowToken token) {
+        final int type = token.windowType;
+        return type > WindowManager.LayoutParams.LAST_APPLICATION_WINDOW
+                && type != WindowManager.LayoutParams.TYPE_INPUT_METHOD
+                && type != WindowManager.LayoutParams.TYPE_WALLPAPER
+                && type != WindowManager.LayoutParams.TYPE_NOTIFICATION_SHADE;
+    }
+
     /**
      * Enables {@link #handleFinishDrawing(WindowState, SurfaceControl.Transaction)} to capture the
      * draw transactions of the target windows if needed.
      */
     void keepAppearanceInPreviousRotation() {
+        if (mIsSyncDrawRequested) return;
         // The transition sync group may be finished earlier because it doesn't wait for these
         // target windows. But the windows still need to use sync transaction to keep the appearance
         // in previous rotation, so request a no-op sync to keep the state.
         for (int i = mTargetWindowTokens.size() - 1; i >= 0; i--) {
-            if (mHasScreenRotationAnimation
-                    && mTargetWindowTokens.valueAt(i).mAction == Operation.ACTION_FADE) {
-                // The windows are hidden (leash is alpha 0) before finishing drawing so it is
-                // unnecessary to request sync.
-                continue;
-            }
             final WindowToken token = mTargetWindowTokens.keyAt(i);
             for (int j = token.getChildCount() - 1; j >= 0; j--) {
+                // TODO(b/234585256): The consumer should be handleFinishDrawing().
                 token.getChildAt(j).applyWithNextDraw(t -> {});
             }
         }
@@ -214,10 +216,10 @@
     private void finishOp(WindowToken windowToken) {
         final Operation op = mTargetWindowTokens.remove(windowToken);
         if (op == null) return;
-        if (op.mCapturedDrawTransaction != null) {
+        if (op.mDrawTransaction != null) {
             // Unblock the window to show its latest content.
-            mDisplayContent.getPendingTransaction().merge(op.mCapturedDrawTransaction);
-            op.mCapturedDrawTransaction = null;
+            mDisplayContent.getPendingTransaction().merge(op.mDrawTransaction);
+            op.mDrawTransaction = null;
             if (DEBUG) Slog.d(TAG, "finishOp merge transaction " + windowToken.getTopChild());
         }
         if (op.mAction == Operation.ACTION_FADE) {
@@ -351,14 +353,34 @@
     }
 
     /**
-     * Whether the insets animation leash should use previous position when running fade out
-     * animation in rotated display.
+     * Whether the insets animation leash should use previous position when running fade animation
+     * or seamless transformation in a rotated display.
      */
     boolean shouldFreezeInsetsPosition(WindowState w) {
-        return mTransitionOp == OP_APP_SWITCH && w.mTransitionController.inTransition()
+        return mTransitionOp != OP_LEGACY && w.mTransitionController.inTransition()
                 && isTargetToken(w.mToken);
     }
 
+    /**
+     * Returns the transaction which will be applied after the window redraws in new rotation.
+     * This is used to update the position of insets animation leash synchronously.
+     */
+    SurfaceControl.Transaction getDrawTransaction(WindowToken token) {
+        if (mTransitionOp == OP_LEGACY) {
+            // Legacy transition uses startSeamlessRotation and finishSeamlessRotation of
+            // InsetsSourceProvider.
+            return null;
+        }
+        final Operation op = mTargetWindowTokens.get(token);
+        if (op != null) {
+            if (op.mDrawTransaction == null) {
+                op.mDrawTransaction = new SurfaceControl.Transaction();
+            }
+            return op.mDrawTransaction;
+        }
+        return null;
+    }
+
     void setOnShowRunnable(Runnable onShowRunnable) {
         mOnShowRunnable = onShowRunnable;
     }
@@ -368,6 +390,7 @@
      * transition starts. And associate transaction callback to consume pending animations.
      */
     void setupStartTransaction(SurfaceControl.Transaction t) {
+        if (mIsStartTransactionCommitted) return;
         for (int i = mTargetWindowTokens.size() - 1; i >= 0; i--) {
             final Operation op = mTargetWindowTokens.valueAt(i);
             final SurfaceControl leash = op.mLeash;
@@ -395,7 +418,6 @@
             }
         }
 
-        if (mIsStartTransactionCommitted) return;
         // If there are windows have redrawn in new rotation but the start transaction has not
         // been applied yet, the fade-in animation will be deferred. So once the transaction is
         // committed, the fade-in animation can run with screen rotation animation.
@@ -452,23 +474,27 @@
      * by this controller.
      */
     boolean handleFinishDrawing(WindowState w, SurfaceControl.Transaction postDrawTransaction) {
-        if (mTransitionOp == OP_LEGACY || postDrawTransaction == null
-                || !mIsSyncDrawRequested || !w.mTransitionController.inTransition()) {
+        if (mTransitionOp == OP_LEGACY || postDrawTransaction == null || !mIsSyncDrawRequested) {
             return false;
         }
         final Operation op = mTargetWindowTokens.get(w.mToken);
         if (op == null) return false;
-        final boolean keepUntilTransitionFinish =
-                mTransitionOp == OP_APP_SWITCH && op.mAction == Operation.ACTION_FADE;
-        final boolean keepUntilStartTransaction =
-                !mIsStartTransactionCommitted && op.mAction == Operation.ACTION_SEAMLESS;
-        if (!keepUntilTransitionFinish && !keepUntilStartTransaction) return false;
-        if (op.mCapturedDrawTransaction == null) {
-            op.mCapturedDrawTransaction = postDrawTransaction;
+        if (DEBUG) Slog.d(TAG, "handleFinishDrawing " + w);
+        if (op.mDrawTransaction == null) {
+            if (w.isClientLocal()) {
+                // Use a new transaction to merge the draw transaction of local window because the
+                // same instance will be cleared (Transaction#clear()) after reporting draw.
+                op.mDrawTransaction = mService.mTransactionFactory.get();
+                op.mDrawTransaction.merge(postDrawTransaction);
+            } else {
+                // The transaction read from parcel (the client is in a different process) is
+                // already a copy, so just reference it directly.
+                op.mDrawTransaction = postDrawTransaction;
+            }
         } else {
-            op.mCapturedDrawTransaction.merge(postDrawTransaction);
+            op.mDrawTransaction.merge(postDrawTransaction);
         }
-        if (DEBUG) Slog.d(TAG, "Capture draw transaction " + w);
+        mDisplayContent.finishAsyncRotation(w.mToken);
         return true;
     }
 
@@ -512,7 +538,7 @@
          * the start transaction of transition, so there won't be a flickering such as the window
          * has redrawn during fading out.
          */
-        SurfaceControl.Transaction mCapturedDrawTransaction;
+        SurfaceControl.Transaction mDrawTransaction;
 
         Operation(@Action int action) {
             mAction = action;
diff --git a/services/core/java/com/android/server/wm/BLASTSyncEngine.java b/services/core/java/com/android/server/wm/BLASTSyncEngine.java
index 46ce433..9a94a4f 100644
--- a/services/core/java/com/android/server/wm/BLASTSyncEngine.java
+++ b/services/core/java/com/android/server/wm/BLASTSyncEngine.java
@@ -236,12 +236,18 @@
 
         private void onTimeout() {
             if (!mActiveSyncs.contains(mSyncId)) return;
+            boolean allFinished = true;
             for (int i = mRootMembers.size() - 1; i >= 0; --i) {
                 final WindowContainer<?> wc = mRootMembers.valueAt(i);
                 if (!wc.isSyncFinished()) {
+                    allFinished = false;
                     Slog.i(TAG, "Unfinished container: " + wc);
                 }
             }
+            if (allFinished && !mReady) {
+                Slog.w(TAG, "Sync group " + mSyncId + " timed-out because not ready. If you see "
+                        + "this, please file a bug.");
+            }
             finishNow();
         }
     }
diff --git a/services/core/java/com/android/server/wm/BackNavigationController.java b/services/core/java/com/android/server/wm/BackNavigationController.java
index d07cc68..d9ab971 100644
--- a/services/core/java/com/android/server/wm/BackNavigationController.java
+++ b/services/core/java/com/android/server/wm/BackNavigationController.java
@@ -31,6 +31,7 @@
 import android.os.RemoteException;
 import android.os.SystemProperties;
 import android.util.Slog;
+import android.view.IWindowFocusObserver;
 import android.view.RemoteAnimationTarget;
 import android.view.SurfaceControl;
 import android.window.BackNavigationInfo;
@@ -45,10 +46,9 @@
  * Controller to handle actions related to the back gesture on the server side.
  */
 class BackNavigationController {
-
     private static final String TAG = "BackNavigationController";
-    @Nullable
-    private TaskSnapshotController mTaskSnapshotController;
+    private WindowManagerService mWindowManagerService;
+    private IWindowFocusObserver mFocusObserver;
 
     /**
      * Returns true if the back predictability feature is enabled
@@ -69,26 +69,13 @@
      * for the animation, or null if we don't know how to animate the current window and need to
      * fallback on dispatching the key event.
      */
-    @Nullable
-    BackNavigationInfo startBackNavigation(@NonNull WindowManagerService wmService,
-            boolean requestAnimation) {
-        return startBackNavigation(wmService, null, requestAnimation);
-    }
-
-    /**
-     * @param tx, a transaction to be used for the attaching the animation leash.
-     *            This is used in tests. If null, the object will be initialized with a new {@link
-     *            SurfaceControl.Transaction}
-     * @see #startBackNavigation(WindowManagerService, boolean)
-     */
     @VisibleForTesting
     @Nullable
-    BackNavigationInfo startBackNavigation(WindowManagerService wmService,
-            @Nullable SurfaceControl.Transaction tx, boolean requestAnimation) {
-
-        if (tx == null) {
-            tx = new SurfaceControl.Transaction();
-        }
+    BackNavigationInfo startBackNavigation(boolean requestAnimation,
+            IWindowFocusObserver observer) {
+        final WindowManagerService wmService = mWindowManagerService;
+        final SurfaceControl.Transaction tx = wmService.mTransactionFactory.get();
+        mFocusObserver = observer;
 
         int backType = BackNavigationInfo.TYPE_UNDEFINED;
 
@@ -110,12 +97,14 @@
         SurfaceControl animationLeashParent = null;
         HardwareBuffer screenshotBuffer = null;
         RemoteAnimationTarget topAppTarget = null;
+        WindowState window;
+
         int prevTaskId;
         int prevUserId;
+        boolean prepareAnimation;
 
         BackNavigationInfo.Builder infoBuilder = new BackNavigationInfo.Builder();
         synchronized (wmService.mGlobalLock) {
-            WindowState window;
             WindowConfiguration taskWindowConfiguration;
             WindowManagerInternal windowManagerInternal =
                     LocalServices.getService(WindowManagerInternal.class);
@@ -142,7 +131,6 @@
                         "Focused window found using getFocusedWindowToken");
             }
 
-            OnBackInvokedCallbackInfo overrideCallbackInfo = null;
             if (window != null) {
                 // This is needed to bridge the old and new back behavior with recents.  While in
                 // Overview with live tile enabled, the previous app is technically focused but we
@@ -151,15 +139,18 @@
                 // the right window to consume back while in overview, so we need to route it to
                 // launcher and use the legacy behavior of injecting KEYCODE_BACK since the existing
                 // compat callback in VRI only works when the window is focused.
+                // This symptom also happen while shell transition enabled, we can check that by
+                // isTransientLaunch to know whether the focus window is point to live tile.
                 final RecentsAnimationController recentsAnimationController =
                         wmService.getRecentsAnimationController();
-                if (recentsAnimationController != null
-                        && recentsAnimationController.shouldApplyInputConsumer(
-                        window.getActivityRecord())) {
-                    window = recentsAnimationController.getTargetAppMainWindow();
-                    overrideCallbackInfo = recentsAnimationController.getBackInvokedInfo();
+                final ActivityRecord ar = window.mActivityRecord;
+                if ((ar != null && ar.isActivityTypeHomeOrRecents()
+                        && ar.mTransitionController.isTransientLaunch(ar))
+                        || (recentsAnimationController != null
+                        && recentsAnimationController.shouldApplyInputConsumer(ar))) {
                     ProtoLog.d(WM_DEBUG_BACK_PREVIEW, "Current focused window being animated by "
                             + "recents. Overriding back callback to recents controller callback.");
+                    return null;
                 }
             }
 
@@ -177,9 +168,7 @@
             if (window != null) {
                 currentActivity = window.mActivityRecord;
                 currentTask = window.getTask();
-                callbackInfo = overrideCallbackInfo != null
-                        ? overrideCallbackInfo
-                        : window.getOnBackInvokedCallbackInfo();
+                callbackInfo = window.getOnBackInvokedCallbackInfo();
                 if (callbackInfo == null) {
                     Slog.e(TAG, "No callback registered, returning null.");
                     return null;
@@ -188,6 +177,9 @@
                     backType = BackNavigationInfo.TYPE_CALLBACK;
                 }
                 infoBuilder.setOnBackInvokedCallback(callbackInfo.getCallback());
+                if (mFocusObserver != null) {
+                    window.registerFocusObserver(mFocusObserver);
+                }
             }
 
             ProtoLog.d(WM_DEBUG_BACK_PREVIEW, "startBackNavigation currentTask=%s, "
@@ -208,17 +200,23 @@
                     || currentActivity == null
                     || currentTask == null
                     || currentActivity.isActivityTypeHome()) {
-                return infoBuilder
-                        .setType(backType)
-                        .build();
+                infoBuilder.setType(BackNavigationInfo.TYPE_CALLBACK);
+                final WindowState finalFocusedWindow = window;
+                infoBuilder.setOnBackNavigationDone(new RemoteCallback(result ->
+                        onBackNavigationDone(result, finalFocusedWindow, finalFocusedWindow,
+                                BackNavigationInfo.TYPE_CALLBACK, null, null, false)));
+
+                return infoBuilder.setType(backType).build();
             }
 
             // We don't have an application callback, let's find the destination of the back gesture
             Task finalTask = currentTask;
             prevActivity = currentTask.getActivity(
                     (r) -> !r.finishing && r.getTask() == finalTask && !r.isTopRunningActivity());
-            if (window.getParent().getChildCount() > 1 && window.getParent().getChildAt(0)
-                    != window) {
+            // TODO Dialog window does not need to attach on activity, check
+            // window.mAttrs.type != TYPE_BASE_APPLICATION
+            if ((window.getParent().getChildCount() > 1
+                    && window.getParent().getChildAt(0) != window)) {
                 // Are we the top window of our parent? If not, we are a window on top of the
                 // activity, we won't close the activity.
                 backType = BackNavigationInfo.TYPE_DIALOG_CLOSE;
@@ -257,7 +255,8 @@
                     BackNavigationInfo.typeToString(backType));
 
             // For now, we only animate when going home.
-            boolean prepareAnimation = backType == BackNavigationInfo.TYPE_RETURN_TO_HOME
+            prepareAnimation = backType == BackNavigationInfo.TYPE_RETURN_TO_HOME
+                    && requestAnimation
                     // Only create a new leash if no leash has been created.
                     // Otherwise return null for animation target to avoid conflict.
                     && !removedWindowContainer.hasCommittedReparentToAnimationLeash();
@@ -292,7 +291,7 @@
             }
 
             // Special handling for back to home animation
-            if (backType == BackNavigationInfo.TYPE_RETURN_TO_HOME && requestAnimation
+            if (backType == BackNavigationInfo.TYPE_RETURN_TO_HOME && prepareAnimation
                     && prevTask != null) {
                 currentTask.mBackGestureStarted = true;
                 // Make launcher show from behind by marking its top activity as visible and
@@ -343,11 +342,12 @@
             }
 
             int finalBackType = backType;
-            ActivityRecord finalprevActivity = prevActivity;
-            Task finalTask = currentTask;
+            final ActivityRecord finalprevActivity = prevActivity;
+            final Task finalTask = currentTask;
+            final WindowState finalFocusedWindow = window;
             RemoteCallback onBackNavigationDone = new RemoteCallback(result -> onBackNavigationDone(
-                    result, finalRemovedWindowContainer, finalBackType, finalTask,
-                    finalprevActivity, requestAnimation));
+                    result, finalFocusedWindow, finalRemovedWindowContainer, finalBackType,
+                    finalTask, finalprevActivity, prepareAnimation));
             infoBuilder.setOnBackNavigationDone(onBackNavigationDone);
         }
 
@@ -380,15 +380,16 @@
     }
 
     private void onBackNavigationDone(
-            Bundle result, WindowContainer<?> windowContainer, int backType,
-            Task task, ActivityRecord prevActivity, boolean requestAnimation) {
+            Bundle result, WindowState focusedWindow, WindowContainer<?> windowContainer,
+            int backType, @Nullable Task task, @Nullable ActivityRecord prevActivity,
+            boolean prepareAnimation) {
         SurfaceControl surfaceControl = windowContainer.getSurfaceControl();
         boolean triggerBack = result != null && result.getBoolean(
                 BackNavigationInfo.KEY_TRIGGER_BACK);
         ProtoLog.d(WM_DEBUG_BACK_PREVIEW, "onBackNavigationDone backType=%s, "
                 + "task=%s, prevActivity=%s", backType, task, prevActivity);
 
-        if (backType == BackNavigationInfo.TYPE_RETURN_TO_HOME && requestAnimation) {
+        if (backType == BackNavigationInfo.TYPE_RETURN_TO_HOME && prepareAnimation) {
             if (triggerBack) {
                 if (surfaceControl != null && surfaceControl.isValid()) {
                     // When going back to home, hide the task surface before it is re-parented to
@@ -406,10 +407,15 @@
                         "Setting Activity.mLauncherTaskBehind to false. Activity=%s",
                         prevActivity);
             }
-        } else {
+        } else if (task != null) {
             task.mBackGestureStarted = false;
         }
         resetSurfaces(windowContainer);
+
+        if (mFocusObserver != null) {
+            focusedWindow.unregisterFocusObserver(mFocusObserver);
+            mFocusObserver = null;
+        }
     }
 
     private HardwareBuffer getActivitySnapshot(@NonNull Task task,
@@ -423,10 +429,10 @@
     }
 
     private HardwareBuffer getTaskSnapshot(int taskId, int userId) {
-        if (mTaskSnapshotController == null) {
+        if (mWindowManagerService.mTaskSnapshotController == null) {
             return null;
         }
-        TaskSnapshot snapshot = mTaskSnapshotController.getSnapshot(taskId,
+        TaskSnapshot snapshot = mWindowManagerService.mTaskSnapshotController.getSnapshot(taskId,
                 userId, true /* restoreFromDisk */, false  /* isLowResolution */);
         return snapshot != null ? snapshot.getHardwareBuffer() : null;
     }
@@ -456,7 +462,7 @@
         }
     }
 
-    void setTaskSnapshotController(@Nullable TaskSnapshotController taskSnapshotController) {
-        mTaskSnapshotController = taskSnapshotController;
+    void setWindowManager(WindowManagerService wm) {
+        mWindowManagerService = wm;
     }
 }
diff --git a/services/core/java/com/android/server/wm/ConfigurationContainer.java b/services/core/java/com/android/server/wm/ConfigurationContainer.java
index fcdf175..0c6cea8 100644
--- a/services/core/java/com/android/server/wm/ConfigurationContainer.java
+++ b/services/core/java/com/android/server/wm/ConfigurationContainer.java
@@ -486,14 +486,6 @@
         return WindowConfiguration.inMultiWindowMode(windowingMode);
     }
 
-    /**
-     * Returns true if this container supports split-screen multi-window and can be put in
-     * split-screen based on its current state.
-     */
-    public boolean supportsSplitScreenWindowingMode() {
-        return mFullConfiguration.windowConfiguration.supportSplitScreenWindowingMode();
-    }
-
     public boolean inPinnedWindowingMode() {
         return mFullConfiguration.windowConfiguration.getWindowingMode() == WINDOWING_MODE_PINNED;
     }
diff --git a/services/core/java/com/android/server/wm/ContentRecordingController.java b/services/core/java/com/android/server/wm/ContentRecordingController.java
index fca4942..fff7637 100644
--- a/services/core/java/com/android/server/wm/ContentRecordingController.java
+++ b/services/core/java/com/android/server/wm/ContentRecordingController.java
@@ -63,6 +63,7 @@
      */
     void setContentRecordingSessionLocked(@Nullable ContentRecordingSession incomingSession,
             @NonNull WindowManagerService wmService) {
+        // TODO(b/219761722) handle a null session arriving due to task setup failing
         if (incomingSession != null && (!ContentRecordingSession.isValid(incomingSession)
                 || ContentRecordingSession.isSameDisplay(mSession, incomingSession))) {
             // Ignore an invalid session, or a session for the same display as currently recording.
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 79aef00..e566a5b 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -67,6 +67,7 @@
 import static android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
 import static android.view.WindowManager.LayoutParams.INVALID_WINDOW_TYPE;
 import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW;
+import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_UNRESTRICTED_GESTURE_EXCLUSION;
 import static android.view.WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN;
 import static android.view.WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN;
 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
@@ -130,7 +131,6 @@
 import static com.android.server.wm.DisplayContentProto.ROOT_DISPLAY_AREA;
 import static com.android.server.wm.DisplayContentProto.SCREEN_ROTATION_ANIMATION;
 import static com.android.server.wm.DisplayContentProto.SLEEP_TOKENS;
-import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION;
 import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_WINDOW_ANIMATION;
 import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS;
 import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION;
@@ -162,6 +162,7 @@
 import android.annotation.Nullable;
 import android.app.ActivityManager;
 import android.app.ActivityManagerInternal;
+import android.content.ComponentName;
 import android.content.Context;
 import android.content.pm.ActivityInfo;
 import android.content.pm.ActivityInfo.ScreenOrientation;
@@ -229,6 +230,7 @@
 import android.window.IDisplayAreaOrganizer;
 import android.window.TransitionRequestInfo;
 
+import com.android.internal.R;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -558,7 +560,8 @@
     final FixedRotationTransitionListener mFixedRotationTransitionListener =
             new FixedRotationTransitionListener();
 
-    private PhysicalDisplaySwitchTransitionLauncher mDisplaySwitchTransitionLauncher;
+    private final PhysicalDisplaySwitchTransitionLauncher mDisplaySwitchTransitionLauncher;
+    final RemoteDisplayChangeController mRemoteDisplayChangeController;
 
     /** Windows added since {@link #mCurrentFocus} was set to null. Used for ANR blaming. */
     final ArrayList<WindowState> mWinAddedSinceNullFocus = new ArrayList<>();
@@ -756,8 +759,7 @@
         }
         if (w.mAttrs.type == TYPE_INPUT_METHOD_DIALOG && mImeLayeringTarget != null
                 && !mImeLayeringTarget.getRequestedVisibility(ITYPE_IME)
-                && mImeLayeringTarget.isAnimating(PARENTS | TRANSITION,
-                ANIMATION_TYPE_APP_TRANSITION)) {
+                && !mImeLayeringTarget.isVisibleRequested()) {
             return false;
         }
 
@@ -1054,6 +1056,7 @@
         mUnknownAppVisibilityController = new UnknownAppVisibilityController(mWmService, this);
         mDisplaySwitchTransitionLauncher = new PhysicalDisplaySwitchTransitionLauncher(this,
                 mTransitionController);
+        mRemoteDisplayChangeController = new RemoteDisplayChangeController(mWmService, mDisplayId);
 
         final InputChannel inputChannel = mWmService.mInputManager.monitorInput(
                 "PointerEventDispatcher" + mDisplayId, mDisplayId);
@@ -1073,7 +1076,7 @@
         mDisplayPolicy = new DisplayPolicy(mWmService, this);
         mDisplayRotation = new DisplayRotation(mWmService, this);
         mCloseToSquareMaxAspectRatio = mWmService.mContext.getResources().getFloat(
-                com.android.internal.R.dimen.config_closeToSquareDisplayMaxAspectRatio);
+                R.dimen.config_closeToSquareDisplayMaxAspectRatio);
         if (isDefaultDisplay) {
             // The policy may be invoked right after here, so it requires the necessary default
             // fields of this display content.
@@ -1362,7 +1365,7 @@
 
     void setInsetProvider(@InternalInsetsType int type, WindowContainer win,
             @Nullable TriConsumer<DisplayFrames, WindowContainer, Rect> frameProvider) {
-        setInsetProvider(type, win, frameProvider, null /* imeFrameProvider */);
+        setInsetProvider(type, win, frameProvider, null /* overrideFrameProviders */);
     }
 
     /**
@@ -1371,15 +1374,18 @@
      * @param type The type of inset this window provides.
      * @param win The window.
      * @param frameProvider Function to compute the frame, or {@code null} if the just the frame of
-     *                      the window should be taken.
-     * @param imeFrameProvider Function to compute the frame when dispatching insets to the IME, or
-     *                         {@code null} if the normal frame should be taken.
+     *                      the window should be taken. Only for non-WindowState providers, nav bar
+     *                      and status bar.
+     * @param overrideFrameProviders Functions to compute the frame when dispatching insets to the
+     *                               given window types, or {@code null} if the normal frame should
+     *                               be taken.
      */
     void setInsetProvider(@InternalInsetsType int type, WindowContainer win,
             @Nullable TriConsumer<DisplayFrames, WindowContainer, Rect> frameProvider,
-            @Nullable TriConsumer<DisplayFrames, WindowContainer, Rect> imeFrameProvider) {
+            @Nullable SparseArray<TriConsumer<DisplayFrames, WindowContainer, Rect>>
+                    overrideFrameProviders) {
         mInsetsStateController.getSourceProvider(type).setWindowContainer(win, frameProvider,
-                imeFrameProvider);
+                overrideFrameProviders);
     }
 
     InsetsStateController getInsetsStateController() {
@@ -1435,7 +1441,7 @@
         if (!isReady()) {
             return;
         }
-        if (mDisplayRotation.isWaitingForRemoteRotation()) {
+        if (mRemoteDisplayChangeController.isWaitingForRemoteDisplayChange()) {
             return;
         }
 
@@ -1535,8 +1541,8 @@
             config = new Configuration();
             computeScreenConfiguration(config);
         } else if (!(mTransitionController.isCollecting(this)
-                // If waiting for a remote rotation, don't prematurely update configuration.
-                || mDisplayRotation.isWaitingForRemoteRotation())) {
+                // If waiting for a remote display change, don't prematurely update configuration.
+                || mRemoteDisplayChangeController.isWaitingForRemoteDisplayChange())) {
             // No obvious action we need to take, but if our current state mismatches the
             // activity manager's, update it, disregarding font scale, which should remain set
             // to the value of the previous configuration.
@@ -1562,7 +1568,7 @@
                 mAtmService.mContext.createConfigurationContext(getConfiguration());
         final float minimalSize =
                 displayConfigurationContext.getResources().getDimension(
-                                com.android.internal.R.dimen.default_minimal_size_resizable_task);
+                        R.dimen.default_minimal_size_resizable_task);
         if (Double.compare(mDisplayMetrics.density, 0.0) == 0) {
             throw new IllegalArgumentException("Display with ID=" + getDisplayId() + "has invalid "
                 + "DisplayMetrics.density= 0.0");
@@ -1583,8 +1589,10 @@
                 mAtmService.getTaskChangeNotificationController()
                         .notifyTaskRequestedOrientationChanged(task.mTaskId, orientation);
             }
-            // Currently there is no use case from non-activity.
-            if (handleTopActivityLaunchingInDifferentOrientation(r, true /* checkOpening */)) {
+            // The orientation source may not be the top if it uses SCREEN_ORIENTATION_BEHIND.
+            final ActivityRecord topCandidate = !r.mVisibleRequested ? topRunningActivity() : r;
+            if (handleTopActivityLaunchingInDifferentOrientation(
+                    topCandidate, r, true /* checkOpening */)) {
                 // Display orientation should be deferred until the top fixed rotation is finished.
                 return false;
             }
@@ -1596,21 +1604,31 @@
     boolean isSyncFinished() {
         // Do not consider children because if they are requested to be synced, they should be
         // added to sync group explicitly.
-        return !mDisplayRotation.isWaitingForRemoteRotation();
+        return !mRemoteDisplayChangeController.isWaitingForRemoteDisplayChange();
     }
 
     /**
      * Returns a valid rotation if the activity can use different orientation than the display.
-     * Otherwise {@link #ROTATION_UNDEFINED}.
+     * Otherwise {@link android.app.WindowConfiguration#ROTATION_UNDEFINED}.
      */
     @Rotation
     int rotationForActivityInDifferentOrientation(@NonNull ActivityRecord r) {
         if (mTransitionController.useShellTransitionsRotation()) {
             return ROTATION_UNDEFINED;
         }
-        if (!WindowManagerService.ENABLE_FIXED_ROTATION_TRANSFORM) {
+        if (!WindowManagerService.ENABLE_FIXED_ROTATION_TRANSFORM
+                || getIgnoreOrientationRequest()) {
             return ROTATION_UNDEFINED;
         }
+        if (r.mOrientation == ActivityInfo.SCREEN_ORIENTATION_BEHIND) {
+            final ActivityRecord nextCandidate = getActivity(
+                    a -> a.mOrientation != SCREEN_ORIENTATION_UNSET
+                            && a.mOrientation != ActivityInfo.SCREEN_ORIENTATION_BEHIND,
+                    r, false /* includeBoundary */, true /* traverseTopToBottom */);
+            if (nextCandidate != null) {
+                r = nextCandidate;
+            }
+        }
         if (r.inMultiWindowMode() || r.getRequestedConfigurationOrientation(true /* forDisplay */)
                 == getConfiguration().orientation) {
             return ROTATION_UNDEFINED;
@@ -1624,18 +1642,25 @@
         return rotation;
     }
 
+    boolean handleTopActivityLaunchingInDifferentOrientation(@NonNull ActivityRecord r,
+            boolean checkOpening) {
+        return handleTopActivityLaunchingInDifferentOrientation(r, r, checkOpening);
+    }
+
     /**
      * We need to keep display rotation fixed for a while when the activity in different orientation
      * is launching until the launch animation is done to avoid showing the previous activity
      * inadvertently in a wrong orientation.
      *
      * @param r The launching activity which may change display orientation.
+     * @param orientationSrc It may be different from {@param r} if the launching activity uses
+     *                       "behind" orientation.
      * @param checkOpening Whether to check if the activity is animating by transition. Set to
      *                     {@code true} if the caller is not sure whether the activity is launching.
      * @return {@code true} if the fixed rotation is started.
      */
-    boolean handleTopActivityLaunchingInDifferentOrientation(@NonNull ActivityRecord r,
-            boolean checkOpening) {
+    private boolean handleTopActivityLaunchingInDifferentOrientation(@NonNull ActivityRecord r,
+            @NonNull ActivityRecord orientationSrc, boolean checkOpening) {
         if (!WindowManagerService.ENABLE_FIXED_ROTATION_TRANSFORM) {
             return false;
         }
@@ -1665,7 +1690,7 @@
                     return false;
                 }
             }
-            if (r.isState(RESUMED) && !r.getRootTask().mInResumeTopActivity) {
+            if (r.isState(RESUMED) && !r.getTask().mInResumeTopActivity) {
                 // If the activity is executing or has done the lifecycle callback, use normal
                 // rotation animation so the display info can be updated immediately (see
                 // updateDisplayAndOrientation). This prevents a compatibility issue such as
@@ -1684,7 +1709,7 @@
             // animation is not running (it may be swiping to home).
             return false;
         }
-        final int rotation = rotationForActivityInDifferentOrientation(r);
+        final int rotation = rotationForActivityInDifferentOrientation(orientationSrc);
         if (rotation == ROTATION_UNDEFINED) {
             // The display rotation won't be changed by current top activity. The client side
             // adjustments of previous rotated activity should be cleared earlier. Otherwise if
@@ -1762,7 +1787,7 @@
      * rotation transform to it and indicate that the display may be rotated after it is launched.
      */
     void setFixedRotationLaunchingApp(@NonNull ActivityRecord r, @Rotation int rotation) {
-        final WindowToken prevRotatedLaunchingApp = mFixedRotationLaunchingApp;
+        final ActivityRecord prevRotatedLaunchingApp = mFixedRotationLaunchingApp;
         if (prevRotatedLaunchingApp == r
                 && r.getWindowConfiguration().getRotation() == rotation) {
             // The given launching app and target rotation are the same as the existing ones.
@@ -1771,8 +1796,7 @@
         if (prevRotatedLaunchingApp != null
                 && prevRotatedLaunchingApp.getWindowConfiguration().getRotation() == rotation
                 // It is animating so we can expect there will have a transition callback.
-                && (prevRotatedLaunchingApp.isAnimating(TRANSITION | PARENTS)
-                        || mTransitionController.inTransition(prevRotatedLaunchingApp))) {
+                && (prevRotatedLaunchingApp.isInTransition())) {
             // It may be the case that multiple activities launch consecutively. Because their
             // rotation are the same, the transformed state can be shared to avoid duplicating
             // the heavy operations. This also benefits that the states of multiple activities
@@ -1813,8 +1837,8 @@
             sendNewConfiguration();
             return;
         }
-        if (mDisplayRotation.isWaitingForRemoteRotation()) {
-            // There is pending rotation change to apply.
+        if (mRemoteDisplayChangeController.isWaitingForRemoteDisplayChange()) {
+            // There is pending display change to apply.
             return;
         }
         // The orientation of display is not changed.
@@ -1862,7 +1886,7 @@
     }
 
     /** Returns {@code true} if the decided new rotation has not applied to configuration yet. */
-    private boolean isRotationChanging() {
+    boolean isRotationChanging() {
         return mDisplayRotation.getRotation() != getWindowConfiguration().getRotation();
     }
 
@@ -2015,7 +2039,6 @@
                 ProtoLog.v(WM_DEBUG_ORIENTATION, "Set mOrientationChanging of %s", w);
                 w.setOrientationChanging(true);
             }
-            w.mReportOrientationChanged = true;
         }, true /* traverseTopToBottom */);
 
         for (int i = mWmService.mRotationWatchers.size() - 1; i >= 0; i--) {
@@ -2205,9 +2228,9 @@
 
         final float density = mDisplayMetrics.density;
         outConfig.screenWidthDp = (int) (mDisplayPolicy.getConfigDisplayWidth(dw, dh, rotation,
-                uiMode, displayCutout) / density);
+                uiMode, displayCutout) / density + 0.5f);
         outConfig.screenHeightDp = (int) (mDisplayPolicy.getConfigDisplayHeight(dw, dh, rotation,
-                uiMode, displayCutout) / density);
+                uiMode, displayCutout) / density + 0.5f);
         outConfig.compatScreenWidthDp = (int) (outConfig.screenWidthDp / mCompatibleScreenScale);
         outConfig.compatScreenHeightDp = (int) (outConfig.screenHeightDp / mCompatibleScreenScale);
 
@@ -2390,7 +2413,8 @@
         sl = reduceConfigLayout(sl, Surface.ROTATION_90, density, unrotDh, unrotDw, uiMode);
         sl = reduceConfigLayout(sl, Surface.ROTATION_180, density, unrotDw, unrotDh, uiMode);
         sl = reduceConfigLayout(sl, Surface.ROTATION_270, density, unrotDh, unrotDw, uiMode);
-        outConfig.smallestScreenWidthDp = (int)(displayInfo.smallestNominalAppWidth / density);
+        outConfig.smallestScreenWidthDp =
+                (int) (displayInfo.smallestNominalAppWidth / density + 0.5f);
         outConfig.screenLayout = sl;
     }
 
@@ -2412,8 +2436,8 @@
             longSize = shortSize;
             shortSize = tmp;
         }
-        longSize = (int)(longSize/density);
-        shortSize = (int)(shortSize/density);
+        longSize = (int) (longSize / density + 0.5f);
+        shortSize = (int) (shortSize / density + 0.5f);
         return Configuration.reduceScreenLayout(curLayout, longSize, shortSize);
     }
 
@@ -2758,6 +2782,7 @@
     private void updateBaseDisplayMetricsIfNeeded() {
         // Get real display metrics without overrides from WM.
         mWmService.mDisplayManagerInternal.getNonOverrideDisplayInfo(mDisplayId, mDisplayInfo);
+        final int currentRotation = getRotation();
         final int orientation = mDisplayInfo.rotation;
         final boolean rotated = (orientation == ROTATION_90 || orientation == ROTATION_270);
         final int newWidth = rotated ? mDisplayInfo.logicalHeight : mDisplayInfo.logicalWidth;
@@ -2818,7 +2843,8 @@
             reconfigureDisplayLocked();
 
             if (physicalDisplayChanged) {
-                mDisplaySwitchTransitionLauncher.onDisplayUpdated();
+                mDisplaySwitchTransitionLauncher.onDisplayUpdated(currentRotation, getRotation(),
+                        getDisplayAreaInfo());
             }
         }
     }
@@ -2922,9 +2948,10 @@
             // Set some sort of reasonable bounds on the size of the display that we will try
             // to emulate.
             final int minSize = 200;
-            final int maxScale = 2;
-            width = Math.min(Math.max(width, minSize), mInitialDisplayWidth * maxScale);
-            height = Math.min(Math.max(height, minSize), mInitialDisplayHeight * maxScale);
+            final int maxScale = 3;
+            final int maxSize = Math.max(mInitialDisplayWidth, mInitialDisplayHeight) * maxScale;
+            width = Math.min(Math.max(width, minSize), maxSize);
+            height = Math.min(Math.max(height, minSize), maxSize);
         }
 
         Slog.i(TAG_WM, "Using new display size: " + width + "x" + height);
@@ -3845,7 +3872,7 @@
             mAtmService.onImeWindowSetOnDisplayArea(imePid, mImeWindowsContainer);
         }
         mInsetsStateController.getSourceProvider(ITYPE_IME).setWindowContainer(win,
-                mDisplayPolicy.getImeSourceFrameProvider(), null /* imeFrameProvider */);
+                mDisplayPolicy.getImeSourceFrameProvider(), null);
         computeImeTarget(true /* updateImeTarget */);
         updateImeControlTarget();
     }
@@ -4226,6 +4253,17 @@
         void detach(Transaction t) {
             removeImeSurface(t);
         }
+
+        @Override
+        public String toString() {
+            StringBuilder sb = new StringBuilder(64);
+            sb.append("ImeScreenshot{");
+            sb.append(Integer.toHexString(System.identityHashCode(this)));
+            sb.append(" imeTarget=" + mImeTarget);
+            sb.append(" surface=" + mImeSurface);
+            sb.append('}');
+            return sb.toString();
+        }
     }
 
     private void attachAndShowImeScreenshotOnTarget() {
@@ -4258,15 +4296,23 @@
     }
 
     /**
-     * Removes the IME screenshot when necessary.
-     *
-     * Used when app transition animation finished or obsoleted screenshot surface like size
-     * changed by rotation.
+     * Removes the IME screenshot when the caller is a part of the attached target window.
      */
-    void removeImeScreenshotIfPossible() {
-        if (mImeLayeringTarget == null
-                || mImeLayeringTarget.mAttrs.type != TYPE_APPLICATION_STARTING
-                && !mImeLayeringTarget.inTransitionSelfOrParent()) {
+    void removeImeSurfaceByTarget(WindowContainer win) {
+        if (mImeScreenshot == null || win == null) {
+            return;
+        }
+        // The starting window shouldn't be the input target to attach the IME screenshot during
+        // transitioning.
+        if (win.asWindowState() != null
+                && win.asWindowState().mAttrs.type == TYPE_APPLICATION_STARTING) {
+            return;
+        }
+
+        final WindowState screenshotTarget = mImeScreenshot.getImeTarget();
+        final boolean winIsOrContainsScreenshotTarget = (win == screenshotTarget
+                || win.getWindow(w -> w == screenshotTarget) != null);
+        if (winIsOrContainsScreenshotTarget) {
             removeImeSurfaceImmediately();
         }
     }
@@ -4386,8 +4432,8 @@
             boolean imeLayeringTargetMayUseIme =
                     LayoutParams.mayUseInputMethod(mImeLayeringTarget.mAttrs.flags)
                     || mImeLayeringTarget.mAttrs.type == TYPE_APPLICATION_STARTING;
-            if (imeLayeringTargetMayUseIme && mImeInputTarget != null
-                    && mImeLayeringTarget.mActivityRecord != mImeInputTarget.getActivityRecord()) {
+            if (imeLayeringTargetMayUseIme && (mImeInputTarget == null
+                    || mImeLayeringTarget.mActivityRecord != mImeInputTarget.getActivityRecord())) {
                 // Do not change parent if the window hasn't requested IME.
                 return null;
             }
@@ -4526,9 +4572,9 @@
         // if the wallpaper service is disabled on the device, we're never going to have
         // wallpaper, don't bother waiting for it
         boolean wallpaperEnabled = mWmService.mContext.getResources().getBoolean(
-                com.android.internal.R.bool.config_enableWallpaperService)
+                R.bool.config_enableWallpaperService)
                 && mWmService.mContext.getResources().getBoolean(
-                com.android.internal.R.bool.config_checkWallpaperAtBoot)
+                R.bool.config_checkWallpaperAtBoot)
                 && !mWmService.mOnlyCore;
 
         final boolean haveBootMsg = drawnWindowTypes.get(TYPE_BOOT_PROGRESS);
@@ -4614,10 +4660,8 @@
                     wc, SurfaceAnimator.animationTypeToString(type), mImeScreenshot,
                     mImeScreenshot.getImeTarget());
         }
-        if (mImeScreenshot != null && (wc == mImeScreenshot.getImeTarget()
-                || wc.getWindow(w -> w == mImeScreenshot.getImeTarget()) != null)
-                && (type & WindowState.EXIT_ANIMATING_TYPES) != 0) {
-            removeImeSurfaceImmediately();
+        if ((type & WindowState.EXIT_ANIMATING_TYPES) != 0) {
+            removeImeSurfaceByTarget(wc);
         }
     }
 
@@ -4859,9 +4903,7 @@
                 return true;
             }
 
-            // TODO(b/165794880): Freeform task organizer doesn't support drag-resize yet. Remove
-            // the special case when it does.
-            if (task.isOrganized() && task.getWindowingMode() != WINDOWING_MODE_FREEFORM) {
+            if (task.isOrganized()) {
                 return true;
             }
 
@@ -5552,11 +5594,13 @@
     private static boolean needsGestureExclusionRestrictions(WindowState win,
             boolean ignoreRequest) {
         final int type = win.mAttrs.type;
+        final int privateFlags = win.mAttrs.privateFlags;
         final boolean stickyHideNav =
                 !win.getRequestedVisibility(ITYPE_NAVIGATION_BAR)
                         && win.mAttrs.insetsFlags.behavior == BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
         return (!stickyHideNav || ignoreRequest) && type != TYPE_INPUT_METHOD
-                && type != TYPE_NOTIFICATION_SHADE && win.getActivityType() != ACTIVITY_TYPE_HOME;
+                && type != TYPE_NOTIFICATION_SHADE && win.getActivityType() != ACTIVITY_TYPE_HOME
+                && (privateFlags & PRIVATE_FLAG_UNRESTRICTED_GESTURE_EXCLUSION) == 0;
     }
 
     /**
@@ -5668,7 +5712,16 @@
     void getKeepClearAreas(Set<Rect> outRestricted, Set<Rect> outUnrestricted) {
         final Matrix tmpMatrix = new Matrix();
         final float[] tmpFloat9 = new float[9];
+        final RecentsAnimationController recentsAnimationController =
+                mWmService.getRecentsAnimationController();
         forAllWindows(w -> {
+            // Skip the window if it is part of Recents animation
+            final boolean ignoreRecentsAnimationTarget = recentsAnimationController != null
+                    && recentsAnimationController.shouldApplyInputConsumer(w.getActivityRecord());
+            if (ignoreRecentsAnimationTarget) {
+                return false;  // continue traversal
+            }
+
             if (w.isVisible() && !w.inPinnedWindowingMode()) {
                 w.getKeepClearAreas(outRestricted, outUnrestricted, tmpMatrix, tmpFloat9);
             }
@@ -6092,7 +6145,8 @@
                 rootTask.ensureActivitiesVisible(starting, configChanges, preserveWindows,
                         notifyClients);
             });
-            if (mTransitionController.isCollecting()
+            if (mTransitionController.useShellTransitionsRotation()
+                    && mTransitionController.isCollecting()
                     && mWallpaperController.getWallpaperTarget() != null) {
                 // Also update wallpapers so that their requestedVisibility immediately reflects
                 // the changes to activity visibility.
@@ -6269,7 +6323,6 @@
     /**
      * Sets if Display APIs should be sandboxed to the activity window bounds.
      */
-    @VisibleForTesting
     void setSandboxDisplayApis(boolean sandboxDisplayApis) {
         mSandboxDisplayApis = sandboxDisplayApis;
     }
@@ -6457,7 +6510,7 @@
                     // Different tasks won't be in one activity transition animation.
                     return;
                 }
-                if (task.isAppTransitioning()) {
+                if (task.getActivity(ActivityRecord::isInTransition) != null) {
                     return;
                     // Continue to update orientation because the transition of the top rotated
                     // launching activity is done.
@@ -6482,20 +6535,24 @@
     class RemoteInsetsControlTarget implements InsetsControlTarget {
         private final IDisplayWindowInsetsController mRemoteInsetsController;
         private final InsetsVisibilities mRequestedVisibilities = new InsetsVisibilities();
+        private final boolean mCanShowTransient;
 
         RemoteInsetsControlTarget(IDisplayWindowInsetsController controller) {
             mRemoteInsetsController = controller;
+            mCanShowTransient = mWmService.mContext.getResources().getBoolean(
+                    R.bool.config_remoteInsetsControllerSystemBarsCanBeShownByUserAction);
         }
 
         /**
          * Notifies the remote insets controller that the top focused window has changed.
          *
-         * @param packageName The name of the package that is open in the top focused window.
+         * @param component The application component that is open in the top focussed window.
          * @param requestedVisibilities The insets visibilities requested by the focussed window.
          */
-        void topFocusedWindowChanged(String packageName, InsetsVisibilities requestedVisibilities) {
+        void topFocusedWindowChanged(ComponentName component,
+                InsetsVisibilities requestedVisibilities) {
             try {
-                mRemoteInsetsController.topFocusedWindowChanged(packageName, requestedVisibilities);
+                mRemoteInsetsController.topFocusedWindowChanged(component, requestedVisibilities);
             } catch (RemoteException e) {
                 Slog.w(TAG, "Failed to deliver package in top focused window change", e);
             }
@@ -6540,6 +6597,11 @@
         }
 
         @Override
+        public boolean canShowTransient() {
+            return mCanShowTransient;
+        }
+
+        @Override
         public boolean getRequestedVisibility(@InternalInsetsType int type) {
             if (type == ITYPE_IME) {
                 return getInsetsStateController().getImeSourceProvider().isImeShowing();
diff --git a/services/core/java/com/android/server/wm/DisplayFrames.java b/services/core/java/com/android/server/wm/DisplayFrames.java
index fd06313..7ca38b8 100644
--- a/services/core/java/com/android/server/wm/DisplayFrames.java
+++ b/services/core/java/com/android/server/wm/DisplayFrames.java
@@ -99,19 +99,28 @@
         state.setRoundedCorners(roundedCorners);
         state.setPrivacyIndicatorBounds(indicatorBounds);
         state.getDisplayCutoutSafe(safe);
-        if (!cutout.isEmpty()) {
+        if (safe.left > unrestricted.left) {
             state.getSource(ITYPE_LEFT_DISPLAY_CUTOUT).setFrame(
                     unrestricted.left, unrestricted.top, safe.left, unrestricted.bottom);
+        } else {
+            state.removeSource(ITYPE_LEFT_DISPLAY_CUTOUT);
+        }
+        if (safe.top > unrestricted.top) {
             state.getSource(ITYPE_TOP_DISPLAY_CUTOUT).setFrame(
                     unrestricted.left, unrestricted.top, unrestricted.right, safe.top);
+        } else {
+            state.removeSource(ITYPE_TOP_DISPLAY_CUTOUT);
+        }
+        if (safe.right < unrestricted.right) {
             state.getSource(ITYPE_RIGHT_DISPLAY_CUTOUT).setFrame(
                     safe.right, unrestricted.top, unrestricted.right, unrestricted.bottom);
+        } else {
+            state.removeSource(ITYPE_RIGHT_DISPLAY_CUTOUT);
+        }
+        if (safe.bottom < unrestricted.bottom) {
             state.getSource(ITYPE_BOTTOM_DISPLAY_CUTOUT).setFrame(
                     unrestricted.left, safe.bottom, unrestricted.right, unrestricted.bottom);
         } else {
-            state.removeSource(ITYPE_LEFT_DISPLAY_CUTOUT);
-            state.removeSource(ITYPE_TOP_DISPLAY_CUTOUT);
-            state.removeSource(ITYPE_RIGHT_DISPLAY_CUTOUT);
             state.removeSource(ITYPE_BOTTOM_DISPLAY_CUTOUT);
         }
         return true;
diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java
index 7e91989a..25d187f 100644
--- a/services/core/java/com/android/server/wm/DisplayPolicy.java
+++ b/services/core/java/com/android/server/wm/DisplayPolicy.java
@@ -47,7 +47,9 @@
 import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_DRAW_BAR_BACKGROUNDS;
 import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_INTERCEPT_GLOBAL_DRAG_AND_DROP;
 import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY;
+import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_UNRESTRICTED_GESTURE_EXCLUSION;
 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_NAVIGATION_BAR;
 import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL;
 import static android.view.WindowManager.LayoutParams.TYPE_NOTIFICATION_SHADE;
@@ -61,6 +63,7 @@
 import static android.view.WindowManager.LayoutParams.TYPE_VOICE_INTERACTION;
 import static android.view.WindowManager.LayoutParams.TYPE_VOICE_INTERACTION_STARTING;
 import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER;
+import static android.view.WindowManager.TRANSIT_WAKE;
 import static android.view.WindowManagerGlobal.ADD_OKAY;
 import static android.view.WindowManagerPolicyConstants.ACTION_HDMI_PLUGGED;
 import static android.view.WindowManagerPolicyConstants.ALT_BAR_BOTTOM;
@@ -119,6 +122,7 @@
 import android.view.DisplayInfo;
 import android.view.Gravity;
 import android.view.InsetsFlags;
+import android.view.InsetsFrameProvider;
 import android.view.InsetsSource;
 import android.view.InsetsState;
 import android.view.InsetsState.InternalInsetsType;
@@ -143,6 +147,7 @@
 import com.android.internal.policy.ScreenDecorationsUtils;
 import com.android.internal.policy.SystemBarUtils;
 import com.android.internal.protolog.common.ProtoLog;
+import com.android.internal.statusbar.LetterboxDetails;
 import com.android.internal.util.ScreenshotHelper;
 import com.android.internal.util.function.TriConsumer;
 import com.android.internal.view.AppearanceRegion;
@@ -215,6 +220,7 @@
     @Px
     private int mRightGestureInset;
 
+    private boolean mCanSystemBarsBeShownByUser;
     private boolean mNavButtonForcedVisible;
 
     StatusBarManagerInternal getStatusBarManagerInternal() {
@@ -312,12 +318,19 @@
      */
     private final ArrayList<WindowState> mStatusBarBackgroundWindows = new ArrayList<>();
 
+    /**
+     * A collection of {@link LetterboxDetails} of all visible activities to be sent to SysUI in
+     * order to determine status bar appearance
+     */
+    private final ArrayList<LetterboxDetails> mLetterboxDetails = new ArrayList<>();
+
     private String mFocusedApp;
     private int mLastDisableFlags;
     private int mLastAppearance;
     private int mLastBehavior;
     private InsetsVisibilities mRequestedVisibilities = new InsetsVisibilities();
     private AppearanceRegion[] mLastStatusBarAppearanceRegions;
+    private LetterboxDetails[] mLastLetterboxDetails;
 
     /** The union of checked bounds while building {@link #mStatusBarAppearanceRegionList}. */
     private final Rect mStatusBarColorCheckedBounds = new Rect();
@@ -420,6 +433,9 @@
         final Resources r = mContext.getResources();
         mCarDockEnablesAccelerometer = r.getBoolean(R.bool.config_carDockEnablesAccelerometer);
         mDeskDockEnablesAccelerometer = r.getBoolean(R.bool.config_deskDockEnablesAccelerometer);
+        mCanSystemBarsBeShownByUser = !r.getBoolean(
+                R.bool.config_remoteInsetsControllerControlsSystemBars) || r.getBoolean(
+                R.bool.config_remoteInsetsControllerSystemBarsCanBeShownByUserAction);
 
         mAccessibilityManager = (AccessibilityManager) mContext.getSystemService(
                 Context.ACCESSIBILITY_SERVICE);
@@ -612,7 +628,7 @@
         displayContent.mAppTransition.registerListenerLocked(mAppTransitionListener);
         displayContent.mTransitionController.registerLegacyListener(mAppTransitionListener);
         mImmersiveModeConfirmation = new ImmersiveModeConfirmation(mContext, looper,
-                mService.mVrModeEnabled);
+                mService.mVrModeEnabled, mCanSystemBarsBeShownByUser);
 
         // TODO: Make it can take screenshot on external display
         mScreenshotHelper = displayContent.isDefaultDisplay
@@ -778,7 +794,23 @@
     }
 
     public void setAwake(boolean awake) {
+        if (awake == mAwake) {
+            return;
+        }
         mAwake = awake;
+        synchronized (mService.mGlobalLock) {
+            if (!mDisplayContent.isDefaultDisplay) {
+                return;
+            }
+            if (mAwake && mDisplayContent.mTransitionController.isShellTransitionsEnabled()
+                    && !mDisplayContent.mTransitionController.isCollecting()) {
+                // Start a transition for waking. This is needed for showWhenLocked activities.
+                mDisplayContent.mTransitionController.requestTransitionIfNeeded(TRANSIT_WAKE,
+                        0 /* flags */, null /* trigger */, mDisplayContent);
+            }
+            mService.mAtmService.mKeyguardController.updateDeferWakeTransition(
+                    mAwake /* waiting */);
+        }
     }
 
     public boolean isAwake() {
@@ -954,6 +986,10 @@
             }
         }
 
+        if (!win.mSession.mCanSetUnrestrictedGestureExclusion) {
+            attrs.privateFlags &= ~PRIVATE_FLAG_UNRESTRICTED_GESTURE_EXCLUSION;
+        }
+
         // Check if alternate bars positions were updated.
         if (mStatusBarAlt == win) {
             mStatusBarAltPosition = getAltBarPosition(attrs);
@@ -1062,17 +1098,18 @@
                 return WindowManagerGlobal.ADD_INVALID_TYPE;
         }
 
-        if (attrs.providesInsetsTypes != null) {
+        if (attrs.providedInsets != null) {
             // Recents component is allowed to add inset types.
             if (!mService.mAtmService.isCallerRecents(callingUid)) {
                 mContext.enforcePermission(
                         android.Manifest.permission.STATUS_BAR_SERVICE, callingPid, callingUid,
                         "DisplayPolicy");
             }
-            enforceSingleInsetsTypeCorrespondingToWindowType(attrs.providesInsetsTypes);
+            enforceSingleInsetsTypeCorrespondingToWindowType(attrs.providedInsets);
 
-            for (@InternalInsetsType int insetType : attrs.providesInsetsTypes) {
-                switch (insetType) {
+            for (InsetsFrameProvider provider : attrs.providedInsets) {
+                @InternalInsetsType int insetsType = provider.type;
+                switch (insetsType) {
                     case ITYPE_STATUS_BAR:
                         if ((mStatusBar != null && mStatusBar.isAlive())
                                 || (mStatusBarAlt != null && mStatusBarAlt.isAlive())) {
@@ -1135,23 +1172,32 @@
                 break;
             case TYPE_NAVIGATION_BAR:
                 mNavigationBar = win;
-                mDisplayContent.setInsetProvider(ITYPE_NAVIGATION_BAR, win,
+                final TriConsumer<DisplayFrames, WindowContainer, Rect> navFrameProvider =
                         (displayFrames, windowContainer, inOutFrame) -> {
                             if (!mNavButtonForcedVisible) {
-                                final Insets[] providedInternalInsets = win.getLayoutingAttrs(
-                                        displayFrames.mRotation).providedInternalInsets;
-                                if (providedInternalInsets != null
-                                        && providedInternalInsets.length > ITYPE_NAVIGATION_BAR
-                                        && providedInternalInsets[ITYPE_NAVIGATION_BAR] != null) {
-                                    inOutFrame.inset(providedInternalInsets[ITYPE_NAVIGATION_BAR]);
+                                final LayoutParams lp =
+                                        win.mAttrs.forRotation(displayFrames.mRotation);
+                                if (lp.providedInsets != null) {
+                                    for (InsetsFrameProvider provider : lp.providedInsets) {
+                                        if (provider.type != ITYPE_NAVIGATION_BAR) {
+                                            continue;
+                                        }
+                                        InsetsFrameProvider.calculateInsetsFrame(
+                                                displayFrames.mUnrestricted,
+                                                win.getBounds(), displayFrames.mDisplayCutoutSafe,
+                                                inOutFrame, provider.source,
+                                                provider.insetsSize, lp.privateFlags);
+                                    }
                                 }
                                 inOutFrame.inset(win.mGivenContentInsets);
                             }
-                        },
-
-                        (displayFrames, windowContainer, inOutFrame) -> {
-                            // For IME, we don't modify the frame.
-                        });
+                        };
+                final SparseArray<TriConsumer<DisplayFrames, WindowContainer, Rect>> imeOverride =
+                        new SparseArray<>();
+                // For IME, we don't modify the frame.
+                imeOverride.put(TYPE_INPUT_METHOD, null);
+                mDisplayContent.setInsetProvider(ITYPE_NAVIGATION_BAR, win,
+                        navFrameProvider, imeOverride);
 
                 mDisplayContent.setInsetProvider(ITYPE_BOTTOM_MANDATORY_GESTURES, win,
                         (displayFrames, windowContainer, inOutFrame) -> {
@@ -1187,21 +1233,10 @@
                 if (DEBUG_LAYOUT) Slog.i(TAG, "NAVIGATION BAR: " + mNavigationBar);
                 break;
             default:
-                if (attrs.providesInsetsTypes != null) {
-                    for (@InternalInsetsType int insetsType : attrs.providesInsetsTypes) {
-                        final TriConsumer<DisplayFrames, WindowContainer, Rect> imeFrameProvider =
-                                win.getAttrs().providedInternalImeInsets != null
-                                        ? (displayFrames, windowContainer, inOutFrame) -> {
-                                    final Insets[] providedInternalImeInsets =
-                                            win.getLayoutingAttrs(displayFrames.mRotation)
-                                                    .providedInternalImeInsets;
-                                    if (providedInternalImeInsets != null
-                                            && providedInternalImeInsets.length > insetsType
-                                            && providedInternalImeInsets[insetsType] != null) {
-                                        inOutFrame.inset(providedInternalImeInsets[insetsType]);
-                                    }
-                                } : null;
-                        switch (insetsType) {
+                if (attrs.providedInsets != null) {
+                    for (int i = attrs.providedInsets.length - 1; i >= 0; i--) {
+                        final InsetsFrameProvider provider = attrs.providedInsets[i];
+                        switch (provider.type) {
                             case ITYPE_STATUS_BAR:
                                 mStatusBarAlt = win;
                                 mStatusBarAltPosition = getAltBarPosition(attrs);
@@ -1219,41 +1254,59 @@
                                 mExtraNavBarAltPosition = getAltBarPosition(attrs);
                                 break;
                         }
-                        mDisplayContent.setInsetProvider(insetsType, win,
-                                win.getAttrs().providedInternalInsets != null ? (displayFrames,
-                                        windowContainer, inOutFrame) -> {
-                                    final Insets[] providedInternalInsets = win.getLayoutingAttrs(
-                                            displayFrames.mRotation).providedInternalInsets;
-                                    if (providedInternalInsets != null
-                                            && providedInternalInsets.length > insetsType
-                                            && providedInternalInsets[insetsType] != null) {
-                                        inOutFrame.inset(providedInternalInsets[insetsType]);
-                                    }
-                                    inOutFrame.inset(win.mGivenContentInsets);
-                                } : null, imeFrameProvider);
-                        if (mNavigationBar == null && (insetsType == ITYPE_NAVIGATION_BAR
-                                || insetsType == ITYPE_EXTRA_NAVIGATION_BAR)) {
-                            mDisplayContent.setInsetProvider(ITYPE_LEFT_GESTURES, win,
-                                    (displayFrames, windowState, inOutFrame) -> {
-                                final int leftSafeInset =
-                                        Math.max(displayFrames.mDisplayCutoutSafe.left,0);
-                                        inOutFrame.left = 0;
-                                        inOutFrame.top = 0;
-                                        inOutFrame.bottom = displayFrames.mDisplayHeight;
-                                        inOutFrame.right =
-                                                leftSafeInset + mLeftGestureInset;
-                                    });
-                            mDisplayContent.setInsetProvider(ITYPE_RIGHT_GESTURES, win,
-                                    (displayFrames, windowState, inOutFrame) -> {
-                                        final int rightSafeInset =
-                                                Math.min(displayFrames.mDisplayCutoutSafe.right,
-                                                        displayFrames.mUnrestricted.right);
-                                        inOutFrame.left = rightSafeInset - mRightGestureInset;
-                                        inOutFrame.top = 0;
-                                        inOutFrame.bottom = displayFrames.mDisplayHeight;
-                                        inOutFrame.right = displayFrames.mDisplayWidth;
-                                    });
+                        // 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 int index = i;
+                        final TriConsumer<DisplayFrames, WindowContainer, Rect> frameProvider =
+                                provider.insetsSize != null
+                                        ? (displayFrames, windowContainer, inOutFrame) -> {
+                                            inOutFrame.inset(win.mGivenContentInsets);
+                                            final LayoutParams lp =
+                                                    win.mAttrs.forRotation(displayFrames.mRotation);
+                                            final InsetsFrameProvider ifp =
+                                                    win.mAttrs.forRotation(displayFrames.mRotation)
+                                                            .providedInsets[index];
+                                            InsetsFrameProvider.calculateInsetsFrame(
+                                                    displayFrames.mUnrestricted,
+                                                    windowContainer.getBounds(),
+                                                    displayFrames.mDisplayCutoutSafe,
+                                                    inOutFrame, ifp.source,
+                                                    ifp.insetsSize, lp.privateFlags);
+                                        } : null;
+                        final InsetsFrameProvider.InsetsSizeOverride[] overrides =
+                                provider.insetsSizeOverrides;
+                        final SparseArray<TriConsumer<DisplayFrames, WindowContainer, Rect>>
+                                overrideProviders;
+                        if (overrides != null) {
+                            overrideProviders = new SparseArray<>();
+                            for (int j = overrides.length - 1; j >= 0; j--) {
+                                final int overrideIndex = j;
+                                final TriConsumer<DisplayFrames, WindowContainer, Rect>
+                                        overrideFrameProvider =
+                                                (displayFrames, windowContainer, inOutFrame) -> {
+                                                    final LayoutParams lp =
+                                                            win.mAttrs.forRotation(
+                                                                    displayFrames.mRotation);
+                                                    final InsetsFrameProvider ifp =
+                                                            win.mAttrs.providedInsets[index];
+                                                    InsetsFrameProvider.calculateInsetsFrame(
+                                                            displayFrames.mUnrestricted,
+                                                            windowContainer.getBounds(),
+                                                            displayFrames.mDisplayCutoutSafe,
+                                                            inOutFrame, ifp.source,
+                                                            ifp.insetsSizeOverrides[
+                                                                    overrideIndex].insetsSize,
+                                                            lp.privateFlags);
+                                                };
+                                overrideProviders.put(overrides[j].windowType,
+                                        overrideFrameProvider);
+                            }
+                        } else {
+                            overrideProviders = null;
                         }
+                        mDisplayContent.setInsetProvider(provider.type, win, frameProvider,
+                                overrideProviders);
                         mInsetsSourceWindowsExceptIme.add(win);
                     }
                 }
@@ -1299,10 +1352,11 @@
         };
     }
 
-    private static void enforceSingleInsetsTypeCorrespondingToWindowType(int[] insetsTypes) {
+    private static void enforceSingleInsetsTypeCorrespondingToWindowType(
+            InsetsFrameProvider[] providers) {
         int count = 0;
-        for (int insetsType : insetsTypes) {
-            switch (insetsType) {
+        for (InsetsFrameProvider provider : providers) {
+            switch (provider.type) {
                 case ITYPE_NAVIGATION_BAR:
                 case ITYPE_STATUS_BAR:
                 case ITYPE_CLIMATE_BAR:
@@ -1350,7 +1404,7 @@
     private int getStatusBarHeight(DisplayFrames displayFrames) {
         int statusBarHeight;
         if (mStatusBar != null) {
-            statusBarHeight = mStatusBar.getLayoutingAttrs(displayFrames.mRotation).height;
+            statusBarHeight = mStatusBar.mAttrs.forRotation(displayFrames.mRotation).height;
         } else {
             statusBarHeight = 0;
         }
@@ -1504,13 +1558,14 @@
      */
     void simulateLayoutDisplay(DisplayFrames displayFrames) {
         final InsetsStateController controller = mDisplayContent.getInsetsStateController();
+        sTmpClientFrames.attachedFrame = null;
         for (int i = mInsetsSourceWindowsExceptIme.size() - 1; i >= 0; i--) {
             final WindowState win = mInsetsSourceWindowsExceptIme.valueAt(i);
-            mWindowLayout.computeFrames(win.getLayoutingAttrs(displayFrames.mRotation),
+            mWindowLayout.computeFrames(win.mAttrs.forRotation(displayFrames.mRotation),
                     displayFrames.mInsetsState, displayFrames.mDisplayCutoutSafe,
                     displayFrames.mUnrestricted, win.getWindowingMode(), UNSPECIFIED_LENGTH,
-                    UNSPECIFIED_LENGTH, win.getRequestedVisibilities(),
-                    null /* attachedWindowFrame */, win.mGlobalScale, sTmpClientFrames);
+                    UNSPECIFIED_LENGTH, win.getRequestedVisibilities(), win.mGlobalScale,
+                    sTmpClientFrames);
             final SparseArray<InsetsSource> sources = win.getProvidedInsetsSources();
             final InsetsState state = displayFrames.mInsetsState;
             for (int index = sources.size() - 1; index >= 0; index--) {
@@ -1522,13 +1577,14 @@
     }
 
     void updateInsetsSourceFramesExceptIme(DisplayFrames displayFrames) {
+        sTmpClientFrames.attachedFrame = null;
         for (int i = mInsetsSourceWindowsExceptIme.size() - 1; i >= 0; i--) {
             final WindowState win = mInsetsSourceWindowsExceptIme.valueAt(i);
-            mWindowLayout.computeFrames(win.getLayoutingAttrs(displayFrames.mRotation),
+            mWindowLayout.computeFrames(win.mAttrs.forRotation(displayFrames.mRotation),
                     displayFrames.mInsetsState, displayFrames.mDisplayCutoutSafe,
                     displayFrames.mUnrestricted, win.getWindowingMode(), UNSPECIFIED_LENGTH,
-                    UNSPECIFIED_LENGTH, win.getRequestedVisibilities(),
-                    null /* attachedWindowFrame */, win.mGlobalScale, sTmpClientFrames);
+                    UNSPECIFIED_LENGTH, win.getRequestedVisibilities(), win.mGlobalScale,
+                    sTmpClientFrames);
             win.updateSourceFrame(sTmpClientFrames.frame);
         }
     }
@@ -1557,8 +1613,8 @@
         // We invoke this to get the proper DisplayFrames.
         displayFrames = win.getDisplayFrames(displayFrames);
 
-        final WindowManager.LayoutParams attrs = win.getLayoutingAttrs(displayFrames.mRotation);
-        final Rect attachedWindowFrame = attached != null ? attached.getFrame() : null;
+        final WindowManager.LayoutParams attrs = win.mAttrs.forRotation(displayFrames.mRotation);
+        sTmpClientFrames.attachedFrame = attached != null ? attached.getFrame() : null;
 
         // If this window has different LayoutParams for rotations, we cannot trust its requested
         // size. Because it might have not sent its requested size for the new rotation.
@@ -1568,8 +1624,7 @@
 
         mWindowLayout.computeFrames(attrs, win.getInsetsState(), displayFrames.mDisplayCutoutSafe,
                 win.getBounds(), win.getWindowingMode(), requestedWidth, requestedHeight,
-                win.getRequestedVisibilities(), attachedWindowFrame, win.mGlobalScale,
-                sTmpClientFrames);
+                win.getRequestedVisibilities(), win.mGlobalScale, sTmpClientFrames);
 
         win.setFrames(sTmpClientFrames, win.mRequestedWidth, win.mRequestedHeight);
     }
@@ -1590,6 +1645,7 @@
         mNavBarColorWindowCandidate = null;
         mNavBarBackgroundWindow = null;
         mStatusBarAppearanceRegionList.clear();
+        mLetterboxDetails.clear();
         mStatusBarBackgroundWindows.clear();
         mStatusBarColorCheckedBounds.setEmpty();
         mStatusBarBackgroundCheckedBounds.setEmpty();
@@ -1669,6 +1725,16 @@
                             win.mAttrs.insetsFlags.appearance & APPEARANCE_LIGHT_STATUS_BARS,
                             new Rect(win.getFrame())));
                     mStatusBarColorCheckedBounds.union(sTmpRect);
+                    // Check if current activity is letterboxed in order create a LetterboxDetails
+                    // component to be passed to SysUI for status bar treatment
+                    final ActivityRecord currentActivity = win.getActivityRecord();
+                    if (currentActivity != null) {
+                        final LetterboxDetails currentLetterboxDetails = currentActivity
+                                .mLetterboxUiController.getLetterboxDetails();
+                        if (currentLetterboxDetails != null) {
+                            mLetterboxDetails.add(currentLetterboxDetails);
+                        }
+                    }
                 }
             }
 
@@ -1834,8 +1900,10 @@
     /**
      * Called when the resource overlays change.
      */
-    public void onOverlayChangedLw() {
+    void onOverlayChanged() {
         updateCurrentUserResources();
+        // Update the latest display size, cutout.
+        mDisplayContent.updateDisplayInfo();
         onConfigurationChanged();
         mSystemGestures.onConfigurationChanged();
     }
@@ -1961,30 +2029,30 @@
                 && lp.paramsForRotation[rotation] != null) {
             lp = lp.paramsForRotation[rotation];
         }
-        final Insets providedInternalInsets;
-        if (lp.providedInternalInsets != null
-                && lp.providedInternalInsets.length > ITYPE_NAVIGATION_BAR
-                && lp.providedInternalInsets[ITYPE_NAVIGATION_BAR] != null) {
-            providedInternalInsets = lp.providedInternalInsets[ITYPE_NAVIGATION_BAR];
-        } else {
-            providedInternalInsets = Insets.NONE;
-        }
-        if (position == NAV_BAR_LEFT) {
-            if (lp.width > providedInternalInsets.right) {
-                return lp.width - providedInternalInsets.right;
-            } else {
-                return 0;
+        Insets providedInsetsSize = null;
+        if (lp.providedInsets != null) {
+            for (InsetsFrameProvider provider : lp.providedInsets) {
+                if (provider.type != ITYPE_NAVIGATION_BAR) {
+                    continue;
+                }
+                providedInsetsSize = provider.insetsSize;
             }
-        } else if (position == NAV_BAR_RIGHT) {
-            if (lp.width > providedInternalInsets.left) {
-                return lp.width - providedInternalInsets.left;
-            } else {
-                return 0;
+        }
+        if (providedInsetsSize != null) {
+            if (position == NAV_BAR_LEFT) {
+                return providedInsetsSize.left;
+            } else if (position == NAV_BAR_RIGHT) {
+                return providedInsetsSize.right;
             }
         }
         return lp.width;
     }
 
+    @VisibleForTesting
+    void setCanSystemBarsBeShownByUser(boolean canBeShown) {
+        mCanSystemBarsBeShownByUser = canBeShown;
+    }
+
     void notifyDisplayReady() {
         mHandler.post(() -> {
             final int displayId = getDisplayId();
@@ -2025,19 +2093,21 @@
         if (mNavigationBar == null) {
             return 0;
         }
-        LayoutParams lp = mNavigationBar.getLayoutingAttrs(rotation);
-        final Insets providedInternalInsets;
-        if (lp.providedInternalInsets != null
-                && lp.providedInternalInsets.length > ITYPE_NAVIGATION_BAR
-                && lp.providedInternalInsets[ITYPE_NAVIGATION_BAR] != null) {
-            providedInternalInsets = lp.providedInternalInsets[ITYPE_NAVIGATION_BAR];
-        } else {
-            providedInternalInsets = Insets.NONE;
+        LayoutParams lp = mNavigationBar.mAttrs.forRotation(rotation);
+        Insets providedInsetsSize = null;
+        if (lp.providedInsets != null) {
+            for (InsetsFrameProvider provider : lp.providedInsets) {
+                if (provider.type != ITYPE_NAVIGATION_BAR) {
+                    continue;
+                }
+                providedInsetsSize = provider.insetsSize;
+                if (providedInsetsSize != null) {
+                    return providedInsetsSize.bottom;
+                }
+                break;
+            }
         }
-        if (lp.height < providedInternalInsets.top) {
-            return 0;
-        }
-        return lp.height - providedInternalInsets.top;
+        return lp.height;
     }
 
     /**
@@ -2055,7 +2125,7 @@
         if (mNavigationBar == null) {
             return 0;
         }
-        return mNavigationBar.getLayoutingAttrs(rotation).height;
+        return mNavigationBar.mAttrs.forRotation(rotation).height;
     }
 
     /**
@@ -2184,7 +2254,7 @@
     @NavigationBarPosition
     int navigationBarPosition(int displayRotation) {
         if (mNavigationBar != null) {
-            final int gravity = mNavigationBar.getLayoutingAttrs(displayRotation).gravity;
+            final int gravity = mNavigationBar.mAttrs.forRotation(displayRotation).gravity;
             switch (gravity) {
                 case Gravity.LEFT:
                     return NAV_BAR_LEFT;
@@ -2220,11 +2290,17 @@
         updateSystemBarAttributes();
     }
 
-    private void requestTransientBars(WindowState swipeTarget, boolean isGestureOnSystemBar) {
+    @VisibleForTesting
+    void requestTransientBars(WindowState swipeTarget, boolean isGestureOnSystemBar) {
         if (swipeTarget == null || !mService.mPolicy.isUserSetupComplete()) {
             // Swipe-up for navigation bar is disabled during setup
             return;
         }
+        if (!mCanSystemBarsBeShownByUser) {
+            Slog.d(TAG, "Remote insets controller disallows showing system bars - ignoring "
+                    + "request");
+            return;
+        }
         final InsetsSourceProvider provider = swipeTarget.getControllableInsetProvider();
         final InsetsControlTarget controlTarget = provider != null
                 ? provider.getControlTarget() : null;
@@ -2348,12 +2424,15 @@
             callStatusBarSafely(statusBar -> statusBar.setDisableFlags(displayId, disableFlags,
                     cause));
         }
+        final LetterboxDetails[] letterboxDetails = new LetterboxDetails[mLetterboxDetails.size()];
+        mLetterboxDetails.toArray(letterboxDetails);
         if (mLastAppearance == appearance
                 && mLastBehavior == behavior
                 && mRequestedVisibilities.equals(win.getRequestedVisibilities())
                 && Objects.equals(mFocusedApp, focusedApp)
                 && mLastFocusIsFullscreen == isFullscreen
-                && Arrays.equals(mLastStatusBarAppearanceRegions, statusBarAppearanceRegions)) {
+                && Arrays.equals(mLastStatusBarAppearanceRegions, statusBarAppearanceRegions)
+                && Arrays.equals(mLastLetterboxDetails, letterboxDetails)) {
             return;
         }
         if (mDisplayContent.isDefaultDisplay && mLastFocusIsFullscreen != isFullscreen
@@ -2369,9 +2448,10 @@
         mFocusedApp = focusedApp;
         mLastFocusIsFullscreen = isFullscreen;
         mLastStatusBarAppearanceRegions = statusBarAppearanceRegions;
+        mLastLetterboxDetails = letterboxDetails;
         callStatusBarSafely(statusBar -> statusBar.onSystemBarAttributesChanged(displayId,
                 appearance, statusBarAppearanceRegions, isNavbarColorManagedByIme, behavior,
-                requestedVisibilities, focusedApp));
+                requestedVisibilities, focusedApp, letterboxDetails));
     }
 
     private void callStatusBarSafely(Consumer<StatusBarManagerInternal> consumer) {
@@ -2692,8 +2772,6 @@
     public void takeScreenshot(int screenshotType, int source) {
         if (mScreenshotHelper != null) {
             mScreenshotHelper.takeScreenshot(screenshotType,
-                    getStatusBar() != null && getStatusBar().isVisible(),
-                    getNavigationBar() != null && getNavigationBar().isVisible(),
                     source, mHandler, null /* completionConsumer */);
         }
     }
@@ -2787,6 +2865,12 @@
                 pw.print(prefixInner);  pw.println(mLastStatusBarAppearanceRegions[i]);
             }
         }
+        if (mLastLetterboxDetails != null) {
+            pw.print(prefix); pw.println("mLastLetterboxDetails=");
+            for (int i = mLastLetterboxDetails.length - 1; i >= 0; i--) {
+                pw.print(prefixInner);  pw.println(mLastLetterboxDetails[i]);
+            }
+        }
         if (!mStatusBarBackgroundWindows.isEmpty()) {
             pw.print(prefix); pw.println("mStatusBarBackgroundWindows=");
             for (int i = mStatusBarBackgroundWindows.size() - 1; i >= 0; i--) {
@@ -2851,7 +2935,10 @@
             return;
         }
 
-        mDisplayContent.unregisterPointerEventListener(mPointerLocationView);
+        if (!mDisplayContent.isRemoved()) {
+            mDisplayContent.unregisterPointerEventListener(mPointerLocationView);
+        }
+
         final WindowManager wm = mContext.getSystemService(WindowManager.class);
         wm.removeView(mPointerLocationView);
         mPointerLocationView = null;
@@ -2876,6 +2963,9 @@
         mHandler.post(mGestureNavigationSettingsObserver::unregister);
         mHandler.post(mForceShowNavBarSettingsObserver::unregister);
         mImmersiveModeConfirmation.release();
+        if (mService.mPointerLocationEnabled) {
+            setPointerLocationEnabled(false);
+        }
     }
 
     @VisibleForTesting
diff --git a/services/core/java/com/android/server/wm/DisplayRotation.java b/services/core/java/com/android/server/wm/DisplayRotation.java
index 03e1429..3d91921 100644
--- a/services/core/java/com/android/server/wm/DisplayRotation.java
+++ b/services/core/java/com/android/server/wm/DisplayRotation.java
@@ -51,14 +51,12 @@
 import android.database.ContentObserver;
 import android.hardware.power.Boost;
 import android.os.Handler;
-import android.os.RemoteException;
 import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.provider.Settings;
 import android.util.Slog;
 import android.util.TimeUtils;
 import android.util.proto.ProtoOutputStream;
-import android.view.IDisplayWindowRotationCallback;
 import android.view.IWindowManager;
 import android.view.Surface;
 import android.window.TransitionRequestInfo;
@@ -67,7 +65,6 @@
 import com.android.internal.R;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.protolog.common.ProtoLog;
-import com.android.internal.util.function.pooled.PooledLambda;
 import com.android.server.LocalServices;
 import com.android.server.UiThread;
 import com.android.server.policy.WindowManagerPolicy;
@@ -211,31 +208,6 @@
     private boolean mDemoHdmiRotationLock;
     private boolean mDemoRotationLock;
 
-    private static final int REMOTE_ROTATION_TIMEOUT_MS = 800;
-
-    private boolean mIsWaitingForRemoteRotation = false;
-
-    private final Runnable mDisplayRotationHandlerTimeout =
-            new Runnable() {
-                @Override
-                public void run() {
-                    continueRotation(mRotation, null /* transaction */);
-                }
-            };
-
-    private final IDisplayWindowRotationCallback mRemoteRotationCallback =
-            new IDisplayWindowRotationCallback.Stub() {
-                @Override
-                public void continueRotateDisplay(int targetRotation,
-                        WindowContainerTransaction t) {
-                    synchronized (mService.getWindowManagerLock()) {
-                        mService.mH.sendMessage(PooledLambda.obtainMessage(
-                                DisplayRotation::continueRotation, DisplayRotation.this,
-                                targetRotation, t));
-                    }
-                }
-            };
-
     DisplayRotation(WindowManagerService service, DisplayContent displayContent) {
         this(service, displayContent, displayContent.getDisplayPolicy(),
                 service.mDisplayWindowSettings, service.mContext, service.getWindowManagerLock());
@@ -511,6 +483,7 @@
             final TransitionRequestInfo.DisplayChange change = wasCollecting ? null
                     : new TransitionRequestInfo.DisplayChange(mDisplayContent.getDisplayId(),
                             oldRotation, mRotation);
+
             mDisplayContent.requestChangeTransitionIfNeeded(
                     ActivityInfo.CONFIG_WINDOW_CONFIGURATION, change);
             if (wasCollecting) {
@@ -554,61 +527,39 @@
         return null;
     }
 
-    /**
-     * A Remote rotation is when we are waiting for some registered (remote)
-     * {@link IDisplayWindowRotationController} to calculate and return some hierarchy operations
-     *  to perform in sync with the rotation.
-     */
-    boolean isWaitingForRemoteRotation() {
-        return mIsWaitingForRemoteRotation;
-    }
-
     private void startRemoteRotation(int fromRotation, int toRotation) {
-        if (mService.mDisplayRotationController == null) {
-            return;
-        }
-        mIsWaitingForRemoteRotation = true;
-        try {
-            mService.mDisplayRotationController.onRotateDisplay(mDisplayContent.getDisplayId(),
-                    fromRotation, toRotation, mRemoteRotationCallback);
-            mService.mH.removeCallbacks(mDisplayRotationHandlerTimeout);
-            mService.mH.postDelayed(mDisplayRotationHandlerTimeout, REMOTE_ROTATION_TIMEOUT_MS);
-        } catch (RemoteException e) {
-            mIsWaitingForRemoteRotation = false;
-            return;
-        }
+        mDisplayContent.mRemoteDisplayChangeController.performRemoteDisplayChange(
+                fromRotation, toRotation, null /* newDisplayAreaInfo */,
+                (transaction) -> continueRotation(toRotation, transaction)
+        );
     }
 
     private void continueRotation(int targetRotation, WindowContainerTransaction t) {
-        synchronized (mService.mGlobalLock) {
-            if (targetRotation != mRotation || !mIsWaitingForRemoteRotation) {
-                // Drop it, this is either coming from an outdated remote rotation; or, we've
-                // already moved on.
-                return;
-            }
-            mService.mH.removeCallbacks(mDisplayRotationHandlerTimeout);
-            mIsWaitingForRemoteRotation = false;
+        if (targetRotation != mRotation) {
+            // Drop it, this is either coming from an outdated remote rotation; or, we've
+            // already moved on.
+            return;
+        }
 
-            if (mDisplayContent.mTransitionController.isShellTransitionsEnabled()) {
-                if (!mDisplayContent.mTransitionController.isCollecting()) {
-                    throw new IllegalStateException("Trying to rotate outside a transition");
-                }
-                mDisplayContent.mTransitionController.collect(mDisplayContent);
-                // Go through all tasks and collect them before the rotation
-                // TODO(shell-transitions): move collect() to onConfigurationChange once wallpaper
-                //       handling is synchronized.
-                mDisplayContent.mTransitionController.collectForDisplayChange(mDisplayContent,
-                        null /* use collecting transition */);
+        if (mDisplayContent.mTransitionController.isShellTransitionsEnabled()) {
+            if (!mDisplayContent.mTransitionController.isCollecting()) {
+                throw new IllegalStateException("Trying to rotate outside a transition");
             }
-            mService.mAtmService.deferWindowLayout();
-            try {
-                mDisplayContent.sendNewConfiguration();
-                if (t != null) {
-                    mService.mAtmService.mWindowOrganizerController.applyTransaction(t);
-                }
-            } finally {
-                mService.mAtmService.continueWindowLayout();
+            mDisplayContent.mTransitionController.collect(mDisplayContent);
+            // Go through all tasks and collect them before the rotation
+            // TODO(shell-transitions): move collect() to onConfigurationChange once wallpaper
+            //       handling is synchronized.
+            mDisplayContent.mTransitionController.collectForDisplayAreaChange(mDisplayContent,
+                    null /* use collecting transition */);
+        }
+        mService.mAtmService.deferWindowLayout();
+        try {
+            mDisplayContent.sendNewConfiguration();
+            if (t != null) {
+                mService.mAtmService.mWindowOrganizerController.applyTransaction(t);
             }
+        } finally {
+            mService.mAtmService.continueWindowLayout();
         }
     }
 
@@ -669,7 +620,8 @@
         // We only enable seamless rotation if the top window has requested it and is in the
         // fullscreen opaque state. Seamless rotation requires freezing various Surface states and
         // won't work well with animations, so we disable it in the animation case for now.
-        if (w.getAttrs().rotationAnimation != ROTATION_ANIMATION_SEAMLESS || w.isAnimatingLw()) {
+        if (w.getAttrs().rotationAnimation != ROTATION_ANIMATION_SEAMLESS || w.inMultiWindowMode()
+                || w.isAnimatingLw()) {
             return false;
         }
 
@@ -1571,8 +1523,8 @@
         }
 
         @Override
-        public boolean isKeyguardLocked() {
-            return mService.isKeyguardLocked();
+        public boolean isKeyguardShowingAndNotOccluded() {
+            return mService.isKeyguardShowingAndNotOccluded();
         }
 
         @Override
@@ -1684,7 +1636,9 @@
                 final WindowContainer<?> source = dc.getLastOrientationSource();
                 if (source != null) {
                     mLastOrientationSource = source.toString();
-                    mSourceOrientation = source.mOrientation;
+                    final WindowState w = source.asWindowState();
+                    mSourceOrientation =
+                            w != null ? w.mAttrs.screenOrientation : source.mOrientation;
                 } else {
                     mLastOrientationSource = null;
                     mSourceOrientation = SCREEN_ORIENTATION_UNSET;
diff --git a/services/core/java/com/android/server/wm/DragState.java b/services/core/java/com/android/server/wm/DragState.java
index 65b1f02..f2d4d54 100644
--- a/services/core/java/com/android/server/wm/DragState.java
+++ b/services/core/java/com/android/server/wm/DragState.java
@@ -31,6 +31,8 @@
 import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_DRAG;
 import static com.android.server.wm.WindowManagerDebugConfig.SHOW_LIGHT_TRANSACTIONS;
 import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
+import static com.android.server.wm.WindowManagerService.MY_PID;
+import static com.android.server.wm.WindowManagerService.MY_UID;
 
 import android.animation.Animator;
 import android.animation.PropertyValuesHolder;
@@ -45,7 +47,6 @@
 import android.os.Build;
 import android.os.IBinder;
 import android.os.InputConfig;
-import android.os.Process;
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.os.UserManager;
@@ -208,8 +209,6 @@
 
         // Send drag end broadcast if drag start has been sent.
         if (mDragInProgress) {
-            final int myPid = Process.myPid();
-
             if (DEBUG_DRAG) {
                 Slog.d(TAG_WM, "broadcasting DRAG_ENDED");
             }
@@ -237,7 +236,7 @@
                 }
                 // if the current window is in the same process,
                 // the dispatch has already recycled the event
-                if (myPid != ws.mSession.mPid) {
+                if (MY_PID != ws.mSession.mPid) {
                     event.recycle();
                 }
             }
@@ -321,7 +320,6 @@
                 mData.fixUris(mSourceUserId);
             }
         }
-        final int myPid = Process.myPid();
         final IBinder clientToken = touchedWin.mClient.asBinder();
         final DragEvent event = obtainDragEvent(DragEvent.ACTION_DROP, x, y,
                 mData, targetInterceptsGlobalDrag(touchedWin),
@@ -337,7 +335,7 @@
             endDragLocked();
             return false;
         } finally {
-            if (myPid != touchedWin.mSession.mPid) {
+            if (MY_PID != touchedWin.mSession.mPid) {
                 event.recycle();
             }
         }
@@ -365,8 +363,8 @@
             mDragWindowHandle.token = mClientChannel.getToken();
             mDragWindowHandle.layoutParamsType = WindowManager.LayoutParams.TYPE_DRAG;
             mDragWindowHandle.dispatchingTimeoutMillis = DEFAULT_DISPATCHING_TIMEOUT_MILLIS;
-            mDragWindowHandle.ownerPid = Process.myPid();
-            mDragWindowHandle.ownerUid = Process.myUid();
+            mDragWindowHandle.ownerPid = MY_PID;
+            mDragWindowHandle.ownerUid = MY_UID;
             mDragWindowHandle.scaleFactor = 1.0f;
 
             // Keep the default behavior of this window to be focusable, which allows the system
@@ -478,7 +476,7 @@
                 Slog.w(TAG_WM, "Unable to drag-start window " + newWin);
             } finally {
                 // if the callee was local, the dispatch has already recycled the event
-                if (Process.myPid() != newWin.mSession.mPid) {
+                if (MY_PID != newWin.mSession.mPid) {
                     event.recycle();
                 }
             }
diff --git a/services/core/java/com/android/server/wm/EventLogTags.logtags b/services/core/java/com/android/server/wm/EventLogTags.logtags
index 6d63331..1e5a219 100644
--- a/services/core/java/com/android/server/wm/EventLogTags.logtags
+++ b/services/core/java/com/android/server/wm/EventLogTags.logtags
@@ -66,4 +66,4 @@
 31007 wm_boot_animation_done (time|2|3)
 
 # Request surface flinger to show / hide the wallpaper surface.
-33001 wm_wallpaper_surface (Display Id|1|5),(visible|1)
+33001 wm_wallpaper_surface (Display Id|1|5),(Visible|1),(Target|3)
diff --git a/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java b/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java
index 0d4cfa3..3e6e06a 100644
--- a/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java
+++ b/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java
@@ -234,7 +234,7 @@
     //
     private static boolean isImeLayeringTarget(@NonNull InsetsControlTarget target,
             @NonNull InsetsControlTarget dcTarget) {
-        return !dcTarget.getWindow().isClosing() && target == dcTarget;
+        return !isImeTargetWindowClosing(dcTarget.getWindow()) && target == dcTarget;
     }
 
     private static boolean isAboveImeLayeringTarget(@NonNull InsetsControlTarget target,
@@ -256,7 +256,14 @@
         final InsetsControlTarget target = mDisplayContent.getImeTarget(IME_TARGET_CONTROL);
         return target == mImeRequester
                 && (mImeRequester.getWindow() == null
-                || !mImeRequester.getWindow().isClosing());
+                || !isImeTargetWindowClosing(mImeRequester.getWindow()));
+    }
+
+    private static boolean isImeTargetWindowClosing(@NonNull WindowState win) {
+        return win.mAnimatingExit || win.mActivityRecord != null
+                && (win.mActivityRecord.isInTransition()
+                    && !win.mActivityRecord.isVisibleRequested()
+                    || win.mActivityRecord.willCloseOrEnterPip());
     }
 
     private boolean isTargetChangedWithinActivity(InsetsControlTarget target) {
diff --git a/services/core/java/com/android/server/wm/ImmersiveModeConfirmation.java b/services/core/java/com/android/server/wm/ImmersiveModeConfirmation.java
index 93bdf16..4c18d0b 100644
--- a/services/core/java/com/android/server/wm/ImmersiveModeConfirmation.java
+++ b/services/core/java/com/android/server/wm/ImmersiveModeConfirmation.java
@@ -99,9 +99,11 @@
     // Local copy of vr mode enabled state, to avoid calling into VrManager with
     // the lock held.
     private boolean mVrModeEnabled;
+    private boolean mCanSystemBarsBeShownByUser;
     private int mLockTaskState = LOCK_TASK_MODE_NONE;
 
-    ImmersiveModeConfirmation(Context context, Looper looper, boolean vrModeEnabled) {
+    ImmersiveModeConfirmation(Context context, Looper looper, boolean vrModeEnabled,
+            boolean canSystemBarsBeShownByUser) {
         final Display display = context.getDisplay();
         final Context uiContext = ActivityThread.currentActivityThread().getSystemUiContext();
         mContext = display.getDisplayId() == DEFAULT_DISPLAY
@@ -111,6 +113,7 @@
         mPanicThresholdMs = context.getResources()
                 .getInteger(R.integer.config_immersive_mode_confirmation_panic);
         mVrModeEnabled = vrModeEnabled;
+        mCanSystemBarsBeShownByUser = canSystemBarsBeShownByUser;
     }
 
     private long getNavBarExitDuration() {
@@ -171,6 +174,7 @@
             if ((DEBUG_SHOW_EVERY_TIME || !sConfirmed)
                     && userSetupComplete
                     && !mVrModeEnabled
+                    && mCanSystemBarsBeShownByUser
                     && !navBarEmpty
                     && !UserManager.isDeviceInDemoMode(mContext)
                     && (mLockTaskState != LOCK_TASK_MODE_LOCKED)) {
diff --git a/services/core/java/com/android/server/wm/InputConsumerImpl.java b/services/core/java/com/android/server/wm/InputConsumerImpl.java
index 59be3e0..39622c1 100644
--- a/services/core/java/com/android/server/wm/InputConsumerImpl.java
+++ b/services/core/java/com/android/server/wm/InputConsumerImpl.java
@@ -23,7 +23,6 @@
 import android.os.Binder;
 import android.os.IBinder;
 import android.os.InputConfig;
-import android.os.Process;
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.view.InputApplicationHandle;
@@ -72,8 +71,8 @@
         mWindowHandle.token = mClientChannel.getToken();
         mWindowHandle.layoutParamsType = WindowManager.LayoutParams.TYPE_INPUT_CONSUMER;
         mWindowHandle.dispatchingTimeoutMillis = DEFAULT_DISPATCHING_TIMEOUT_MILLIS;
-        mWindowHandle.ownerPid = Process.myPid();
-        mWindowHandle.ownerUid = Process.myUid();
+        mWindowHandle.ownerPid = WindowManagerService.MY_PID;
+        mWindowHandle.ownerUid = WindowManagerService.MY_UID;
         mWindowHandle.scaleFactor = 1.0f;
         mWindowHandle.inputConfig = InputConfig.NOT_FOCUSABLE | InputConfig.TRUSTED_OVERLAY;
 
diff --git a/services/core/java/com/android/server/wm/InputMonitor.java b/services/core/java/com/android/server/wm/InputMonitor.java
index 7e06b88..2ce333d 100644
--- a/services/core/java/com/android/server/wm/InputMonitor.java
+++ b/services/core/java/com/android/server/wm/InputMonitor.java
@@ -64,7 +64,10 @@
 import android.view.WindowManager;
 
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.inputmethod.SoftInputShowHideReason;
 import com.android.internal.protolog.common.ProtoLog;
+import com.android.server.LocalServices;
+import com.android.server.inputmethod.InputMethodManagerInternal;
 
 import java.io.PrintWriter;
 import java.lang.ref.WeakReference;
@@ -288,10 +291,7 @@
         SurfaceControl touchableRegionCrop = null;
         final Task task = w.getTask();
         if (task != null) {
-            // TODO(b/165794636): Remove the special case for freeform window once drag resizing is
-            // handled by WM shell.
-            if (task.isOrganized() && task.getWindowingMode() != WINDOWING_MODE_FULLSCREEN
-                        && !task.inFreeformWindowingMode()) {
+            if (task.isOrganized() && task.getWindowingMode() != WINDOWING_MODE_FULLSCREEN) {
                 // If the window is in a TaskManaged by a TaskOrganizer then most cropping will
                 // be applied using the SurfaceControl hierarchy from the Organizer. This means
                 // we need to make sure that these changes in crop are reflected in the input
@@ -408,8 +408,28 @@
                     // Shell transitions doesn't use RecentsAnimationController
                     || getWeak(mActiveRecentsActivity) != null && focus.inTransition();
             if (shouldApplyRecentsInputConsumer) {
-                requestFocus(recentsAnimationInputConsumer.mWindowHandle.token,
-                        recentsAnimationInputConsumer.mName);
+                if (mInputFocus != recentsAnimationInputConsumer.mWindowHandle.token) {
+                    requestFocus(recentsAnimationInputConsumer.mWindowHandle.token,
+                            recentsAnimationInputConsumer.mName);
+                    // Hiding IME/IME icon when recents input consumer gain focus.
+                    if (!mDisplayContent.isImeAttachedToApp()) {
+                        // Hiding IME if IME window is not attached to app since it's not proper to
+                        // snapshot Task with IME window to animate together in this case.
+                        final InputMethodManagerInternal inputMethodManagerInternal =
+                                LocalServices.getService(InputMethodManagerInternal.class);
+                        if (inputMethodManagerInternal != null) {
+                            inputMethodManagerInternal.hideCurrentInputMethod(
+                                    SoftInputShowHideReason.HIDE_RECENTS_ANIMATION);
+                        }
+                    } else {
+                        // Disable IME icon explicitly when IME attached to the app in case
+                        // IME icon might flickering while swiping to the next app task still
+                        // in animating before the next app window focused, or IME icon
+                        // persists on the bottom when swiping the task to recents.
+                        InputMethodManagerInternal.get().updateImeWindowStatus(
+                                true /* disableImeIcon */);
+                    }
+                }
                 return;
             }
         }
diff --git a/services/core/java/com/android/server/wm/InsetsPolicy.java b/services/core/java/com/android/server/wm/InsetsPolicy.java
index 9e0d7b5..3e2d7c9 100644
--- a/services/core/java/com/android/server/wm/InsetsPolicy.java
+++ b/services/core/java/com/android/server/wm/InsetsPolicy.java
@@ -46,6 +46,7 @@
 import android.app.ActivityTaskManager;
 import android.app.StatusBarManager;
 import android.app.WindowConfiguration;
+import android.content.ComponentName;
 import android.content.res.Resources;
 import android.graphics.Rect;
 import android.util.ArrayMap;
@@ -55,6 +56,7 @@
 import android.view.InsetsAnimationControlImpl;
 import android.view.InsetsAnimationControlRunner;
 import android.view.InsetsController;
+import android.view.InsetsFrameProvider;
 import android.view.InsetsSource;
 import android.view.InsetsSourceControl;
 import android.view.InsetsState;
@@ -264,7 +266,7 @@
             state = originalState;
         }
         state = adjustVisibilityForIme(target, state, state == originalState);
-        return adjustInsetsForRoundedCorners(target, state, state == originalState);
+        return adjustInsetsForRoundedCorners(target.mToken, state, state == originalState);
     }
 
     InsetsState adjustInsetsForWindow(WindowState target, InsetsState originalState) {
@@ -288,8 +290,9 @@
         // contains all insets types.
         final InsetsState originalState = mDisplayContent.getInsetsPolicy()
                 .enforceInsetsPolicyForTarget(type, WINDOWING_MODE_FULLSCREEN, alwaysOnTop,
-                        mStateController.getRawInsetsState());
-        return adjustVisibilityForTransientTypes(originalState);
+                        attrs.type, mStateController.getRawInsetsState());
+        InsetsState state = adjustVisibilityForTransientTypes(originalState);
+        return adjustInsetsForRoundedCorners(token, state, state == originalState);
     }
 
     /**
@@ -322,14 +325,14 @@
         }
 
         // If not one of the types above, check whether an internal inset mapping is specified.
-        if (attrs.providesInsetsTypes != null) {
-            for (@InternalInsetsType int insetsType : attrs.providesInsetsTypes) {
-                switch (insetsType) {
+        if (attrs.providedInsets != null) {
+            for (InsetsFrameProvider provider : attrs.providedInsets) {
+                switch (provider.type) {
                     case ITYPE_STATUS_BAR:
                     case ITYPE_NAVIGATION_BAR:
                     case ITYPE_CLIMATE_BAR:
                     case ITYPE_EXTRA_NAVIGATION_BAR:
-                        return insetsType;
+                        return provider.type;
                 }
             }
         }
@@ -349,12 +352,13 @@
      * @param type the inset type provided by the target
      * @param windowingMode the windowing mode of the target
      * @param isAlwaysOnTop is the target always on top
+     * @param windowType the type of the target
      * @param state the input inset state containing all the sources
      * @return The state stripped of the necessary information.
      */
     InsetsState enforceInsetsPolicyForTarget(@InternalInsetsType int type,
             @WindowConfiguration.WindowingMode int windowingMode, boolean isAlwaysOnTop,
-            InsetsState state) {
+            int windowType, InsetsState state) {
         boolean stateCopied = false;
 
         if (type != ITYPE_INVALID) {
@@ -375,21 +379,20 @@
             if (type == ITYPE_STATUS_BAR || type == ITYPE_CLIMATE_BAR) {
                 state.removeSource(ITYPE_CAPTION_BAR);
             }
-
-            // IME needs different frames for certain cases (e.g. navigation bar in gesture nav).
-            if (type == ITYPE_IME) {
-                ArrayMap<Integer, WindowContainerInsetsSourceProvider> providers = mStateController
-                        .getSourceProviders();
-                for (int i = providers.size() - 1; i >= 0; i--) {
-                    WindowContainerInsetsSourceProvider otherProvider = providers.valueAt(i);
-                    if (otherProvider.overridesImeFrame()) {
-                        InsetsSource override =
-                                new InsetsSource(
-                                        state.getSource(otherProvider.getSource().getType()));
-                        override.setFrame(otherProvider.getImeOverrideFrame());
-                        state.addSource(override);
-                    }
+        }
+        ArrayMap<Integer, WindowContainerInsetsSourceProvider> providers = mStateController
+                .getSourceProviders();
+        for (int i = providers.size() - 1; i >= 0; i--) {
+            WindowContainerInsetsSourceProvider otherProvider = providers.valueAt(i);
+            if (otherProvider.overridesFrame(windowType)) {
+                if (!stateCopied) {
+                    state = new InsetsState(state);
+                    stateCopied = true;
                 }
+                InsetsSource override =
+                        new InsetsSource(state.getSource(otherProvider.getSource().getType()));
+                override.setFrame(otherProvider.getOverriddenFrame(windowType));
+                state.addSource(override);
             }
         }
 
@@ -464,15 +467,19 @@
         return originalState;
     }
 
-    private InsetsState adjustInsetsForRoundedCorners(WindowState w, InsetsState originalState,
+    private InsetsState adjustInsetsForRoundedCorners(WindowToken token, InsetsState originalState,
             boolean copyState) {
-        final Task task = w.getTask();
-        if (task != null && !task.getWindowConfiguration().tasksAreFloating()) {
-            // Use task bounds to calculating rounded corners if the task is not floating.
-            final Rect roundedCornerFrame = new Rect(task.getBounds());
-            final InsetsState state = copyState ? new InsetsState(originalState) : originalState;
-            state.setRoundedCornerFrame(roundedCornerFrame);
-            return state;
+        if (token != null) {
+            final ActivityRecord activityRecord = token.asActivityRecord();
+            final Task task = activityRecord != null ? activityRecord.getTask() : null;
+            if (task != null && !task.getWindowConfiguration().tasksAreFloating()) {
+                // Use task bounds to calculating rounded corners if the task is not floating.
+                final Rect roundedCornerFrame = new Rect(task.getBounds());
+                final InsetsState state = copyState ? new InsetsState(originalState)
+                        : originalState;
+                state.setRoundedCornerFrame(roundedCornerFrame);
+                return state;
+            }
         }
         return originalState;
     }
@@ -542,8 +549,10 @@
             return focusedWin;
         }
         if (remoteInsetsControllerControlsSystemBars(focusedWin)) {
+            ComponentName component = focusedWin.mActivityRecord != null
+                    ? focusedWin.mActivityRecord.mActivityComponent : null;
             mDisplayContent.mRemoteInsetsControlTarget.topFocusedWindowChanged(
-                    focusedWin.mAttrs.packageName, focusedWin.getRequestedVisibilities());
+                    component, focusedWin.getRequestedVisibilities());
             return mDisplayContent.mRemoteInsetsControlTarget;
         }
         if (mPolicy.areSystemBarsForcedShownLw()) {
@@ -600,8 +609,10 @@
             return null;
         }
         if (remoteInsetsControllerControlsSystemBars(focusedWin)) {
+            ComponentName component = focusedWin.mActivityRecord != null
+                    ? focusedWin.mActivityRecord.mActivityComponent : null;
             mDisplayContent.mRemoteInsetsControlTarget.topFocusedWindowChanged(
-                    focusedWin.mAttrs.packageName, focusedWin.getRequestedVisibilities());
+                    component, focusedWin.getRequestedVisibilities());
             return mDisplayContent.mRemoteInsetsControlTarget;
         }
         if (mPolicy.areSystemBarsForcedShownLw()) {
diff --git a/services/core/java/com/android/server/wm/InsetsSourceProvider.java b/services/core/java/com/android/server/wm/InsetsSourceProvider.java
index 358e93d..bf4b65d 100644
--- a/services/core/java/com/android/server/wm/InsetsSourceProvider.java
+++ b/services/core/java/com/android/server/wm/InsetsSourceProvider.java
@@ -27,7 +27,6 @@
 import static com.android.server.wm.InsetsSourceProviderProto.FAKE_CONTROL;
 import static com.android.server.wm.InsetsSourceProviderProto.FAKE_CONTROL_TARGET;
 import static com.android.server.wm.InsetsSourceProviderProto.FRAME;
-import static com.android.server.wm.InsetsSourceProviderProto.IME_OVERRIDDEN_FRAME;
 import static com.android.server.wm.InsetsSourceProviderProto.IS_LEASH_READY_FOR_DISPATCHING;
 import static com.android.server.wm.InsetsSourceProviderProto.PENDING_CONTROL_TARGET;
 import static com.android.server.wm.InsetsSourceProviderProto.SEAMLESS_ROTATING;
@@ -41,7 +40,9 @@
 import android.graphics.Insets;
 import android.graphics.Point;
 import android.graphics.Rect;
+import android.util.SparseArray;
 import android.util.proto.ProtoOutputStream;
+import android.view.InsetsFrameProvider;
 import android.view.InsetsSource;
 import android.view.InsetsSourceControl;
 import android.view.InsetsState;
@@ -77,8 +78,8 @@
 
     private @Nullable ControlAdapter mAdapter;
     private TriConsumer<DisplayFrames, WindowContainer, Rect> mFrameProvider;
-    private TriConsumer<DisplayFrames, WindowContainer, Rect> mImeFrameProvider;
-    private final Rect mImeOverrideFrame = new Rect();
+    private SparseArray<TriConsumer<DisplayFrames, WindowContainer, Rect>> mOverrideFrameProviders;
+    private final SparseArray<Rect> mOverrideFrames = new SparseArray<Rect>();
     private boolean mIsLeashReadyForDispatching;
     private final Rect mSourceFrame = new Rect();
     private final Rect mLastSourceFrame = new Rect();
@@ -124,7 +125,8 @@
         mDisplayContent = displayContent;
         mStateController = stateController;
         mFakeControl = new InsetsSourceControl(
-                source.getType(), null /* leash */, new Point(), InsetsSourceControl.INVALID_HINTS);
+                source.getType(), null /* leash */, false /* initialVisible */, new Point(),
+                Insets.NONE);
         mControllable = InsetsPolicy.isInsetsTypeControllable(source.getType());
     }
 
@@ -145,12 +147,15 @@
      * @param windowContainer The window container that links to this source.
      * @param frameProvider Based on display frame state and the window, calculates the resulting
      *                      frame that should be reported to clients.
-     * @param imeFrameProvider Based on display frame state and the window, calculates the resulting
-     *                         frame that should be reported to IME.
+     *                      This will only be used when the window container providing the insets is
+     *                      not a WindowState.
+     * @param overrideFrameProviders Based on display frame state and the window, calculates the
+     *                               resulting frame that should be reported to given window type.
      */
     void setWindowContainer(@Nullable WindowContainer windowContainer,
             @Nullable TriConsumer<DisplayFrames, WindowContainer, Rect> frameProvider,
-            @Nullable TriConsumer<DisplayFrames, WindowContainer, Rect> imeFrameProvider) {
+            @Nullable SparseArray<TriConsumer<DisplayFrames, WindowContainer, Rect>>
+                    overrideFrameProviders) {
         if (mWindowContainer != null) {
             if (mControllable) {
                 mWindowContainer.setControllableInsetProvider(null);
@@ -166,8 +171,9 @@
         ProtoLog.d(WM_DEBUG_WINDOW_INSETS, "InsetsSource setWin %s for type %s",
                 windowContainer, InsetsState.typeToString(mSource.getType()));
         mWindowContainer = windowContainer;
+        // TODO: remove the frame provider for non-WindowState container.
         mFrameProvider = frameProvider;
-        mImeFrameProvider = imeFrameProvider;
+        mOverrideFrameProviders = overrideFrameProviders;
         if (windowContainer == null) {
             setServerVisible(false);
             mSource.setVisibleFrame(null);
@@ -227,10 +233,25 @@
         }
         updateSourceFrameForServerVisibility();
 
-        if (mImeFrameProvider != null) {
-            mImeOverrideFrame.set(frame);
-            mImeFrameProvider.accept(mWindowContainer.getDisplayContent().mDisplayFrames,
-                    mWindowContainer, mImeOverrideFrame);
+        if (mOverrideFrameProviders != null) {
+            for (int i = mOverrideFrameProviders.size() - 1; i >= 0; i--) {
+                final int windowType = mOverrideFrameProviders.keyAt(i);
+                final Rect overrideFrame;
+                if (mOverrideFrames.contains(windowType)) {
+                    overrideFrame = mOverrideFrames.get(windowType);
+                    overrideFrame.set(frame);
+                } else {
+                    overrideFrame = new Rect(frame);
+                }
+                final TriConsumer<DisplayFrames, WindowContainer, Rect> provider =
+                        mOverrideFrameProviders.get(windowType);
+                if (provider != null) {
+                    mOverrideFrameProviders.get(windowType).accept(
+                            mWindowContainer.getDisplayContent().mDisplayFrames, mWindowContainer,
+                            overrideFrame);
+                }
+                mOverrideFrames.put(windowType, overrideFrame);
+            }
         }
 
         if (win.mGivenVisibleInsets.left != 0 || win.mGivenVisibleInsets.top != 0
@@ -290,7 +311,22 @@
                         && windowState.mWinAnimator.getShown() && mWindowContainer.okToDisplay()) {
                     windowState.applyWithNextDraw(mSetLeashPositionConsumer);
                 } else {
-                    mSetLeashPositionConsumer.accept(mWindowContainer.getSyncTransaction());
+                    Transaction t = mWindowContainer.getSyncTransaction();
+                    if (windowState != null) {
+                        // Make the buffer, token transformation, and leash position to be updated
+                        // together when the window is drawn for new rotation. Otherwise the window
+                        // may be outside the screen by the inconsistent orientations.
+                        final AsyncRotationController rotationController =
+                                mDisplayContent.getAsyncRotationController();
+                        if (rotationController != null) {
+                            final Transaction drawT =
+                                    rotationController.getDrawTransaction(windowState.mToken);
+                            if (drawT != null) {
+                                t = drawT;
+                            }
+                        }
+                    }
+                    mSetLeashPositionConsumer.accept(t);
                 }
             }
             if (mServerVisible && !mLastSourceFrame.equals(mSource.getFrame())) {
@@ -310,17 +346,15 @@
     }
 
     private Point getWindowFrameSurfacePosition() {
-        WindowState win = mWindowContainer.asWindowState();
-        if (mControl != null) {
-            final AsyncRotationController controller =
-                    win.mDisplayContent.getAsyncRotationController();
+        final WindowState win = mWindowContainer.asWindowState();
+        if (win != null && mControl != null) {
+            final AsyncRotationController controller = mDisplayContent.getAsyncRotationController();
             if (controller != null && controller.shouldFreezeInsetsPosition(win)) {
-                // Use previous position because the fade-out animation runs in old rotation.
+                // Use previous position because the window still shows with old rotation.
                 return mControl.getSurfacePosition();
             }
         }
-        final Rect frame = mWindowContainer.asWindowState() != null
-                ? mWindowContainer.asWindowState().getFrame() : mWindowContainer.getBounds();
+        final Rect frame = win != null ? win.getFrame() : mWindowContainer.getBounds();
         final Point position = new Point();
         mWindowContainer.transformFrameToSurfacePosition(frame.left, frame.top, position);
         return position;
@@ -435,7 +469,8 @@
         final SurfaceControl leash = mAdapter.mCapturedLeash;
         mControlTarget = target;
         updateVisibility();
-        mControl = new InsetsSourceControl(mSource.getType(), leash, surfacePosition, mInsetsHint);
+        mControl = new InsetsSourceControl(mSource.getType(), leash, mClientVisible,
+                surfacePosition, mInsetsHint);
 
         ProtoLog.d(WM_DEBUG_WINDOW_INSETS,
                 "InsetsSource Control %s for target %s", mControl, mControlTarget);
@@ -500,12 +535,13 @@
         if (mWindowContainer.asWindowState() == null) {
             return false;
         }
-        final int[] provides = ((WindowState) mWindowContainer).mAttrs.providesInsetsTypes;
-        if (provides == null) {
+        final InsetsFrameProvider[] providers =
+                ((WindowState) mWindowContainer).mAttrs.providedInsets;
+        if (providers == null) {
             return false;
         }
-        for (int i = 0; i < provides.length; i++) {
-            if (provides[i] == ITYPE_IME) {
+        for (int i = 0; i < providers.length; i++) {
+            if (providers[i].type == ITYPE_IME) {
                 return true;
             }
         }
@@ -519,7 +555,8 @@
                 // to the client in case that the client applies its transaction sooner than ours
                 // that we could unexpectedly overwrite the surface state.
                 return new InsetsSourceControl(mControl.getType(), null /* leash */,
-                        mControl.getSurfacePosition(), mControl.getInsetsHint());
+                        mControl.isInitiallyVisible(), mControl.getSurfacePosition(),
+                        mControl.getInsetsHint());
             }
             return mControl;
         }
@@ -537,32 +574,30 @@
         return mClientVisible;
     }
 
-    /**
-     * @return Whether this provider uses a different frame to dispatch to the IME.
-     */
-    boolean overridesImeFrame() {
-        return mImeFrameProvider != null;
+    boolean overridesFrame(int windowType) {
+        return mOverrideFrames.contains(windowType);
     }
 
-    /**
-     * @return Rect to dispatch to the IME as frame. Only valid if {@link #overridesImeFrame()}
-     *         returns {@code true}.
-     */
-    Rect getImeOverrideFrame() {
-        return mImeOverrideFrame;
+    Rect getOverriddenFrame(int windowType) {
+        return mOverrideFrames.get(windowType);
     }
 
     public void dump(PrintWriter pw, String prefix) {
         pw.println(prefix + getClass().getSimpleName());
         prefix = prefix + "  ";
         pw.print(prefix + "mSource="); mSource.dump("", pw);
+        pw.print(prefix + "mSourceFrame=");
+        pw.println(mSourceFrame);
+        if (mOverrideFrames.size() > 0) {
+            pw.print(prefix + "mOverrideFrames=");
+            pw.println(mOverrideFrames);
+        }
         if (mControl != null) {
             pw.print(prefix + "mControl=");
             mControl.dump("", pw);
         }
         pw.print(prefix);
         pw.print("mIsLeashReadyForDispatching="); pw.print(mIsLeashReadyForDispatching);
-        pw.print(" mImeOverrideFrame="); pw.print(mImeOverrideFrame.toShortString());
         pw.println();
         if (mWindowContainer != null) {
             pw.print(prefix + "mWindowContainer=");
@@ -606,7 +641,6 @@
         if (mAdapter != null && mAdapter.mCapturedLeash != null) {
             mAdapter.mCapturedLeash.dumpDebug(proto, CAPTURED_LEASH);
         }
-        mImeOverrideFrame.dumpDebug(proto, IME_OVERRIDDEN_FRAME);
         proto.write(IS_LEASH_READY_FOR_DISPATCHING, mIsLeashReadyForDispatching);
         proto.write(CLIENT_VISIBLE, mClientVisible);
         proto.write(SERVER_VISIBLE, mServerVisible);
diff --git a/services/core/java/com/android/server/wm/KeyguardController.java b/services/core/java/com/android/server/wm/KeyguardController.java
index a4c05ee..d76f6be 100644
--- a/services/core/java/com/android/server/wm/KeyguardController.java
+++ b/services/core/java/com/android/server/wm/KeyguardController.java
@@ -73,6 +73,8 @@
 
     static final String KEYGUARD_SLEEP_TOKEN_TAG = "keyguard";
 
+    private static final int DEFER_WAKE_TRANSITION_TIMEOUT_MS = 5000;
+
     private final ActivityTaskSupervisor mTaskSupervisor;
     private WindowManagerService mWindowManager;
 
@@ -80,7 +82,7 @@
     private final ActivityTaskManagerService mService;
     private RootWindowContainer mRootWindowContainer;
     private final ActivityTaskManagerInternal.SleepTokenAcquirer mSleepTokenAcquirer;
-
+    private boolean mWaitingForWakeTransition;
 
     KeyguardController(ActivityTaskManagerService service,
             ActivityTaskSupervisor taskSupervisor) {
@@ -168,10 +170,14 @@
 
         final KeyguardDisplayState state = getDisplayState(displayId);
         final boolean aodChanged = aodShowing != state.mAodShowing;
+        final boolean aodRemoved = state.mAodShowing && !aodShowing;
         // If keyguard is going away, but SystemUI aborted the transition, need to reset state.
-        // Do not reset keyguardChanged status if this is aodChanged.
+        // Do not reset keyguardChanged status when only AOD is removed.
         final boolean keyguardChanged = (keyguardShowing != state.mKeyguardShowing)
-                || (state.mKeyguardGoingAway && keyguardShowing && !aodChanged);
+                || (state.mKeyguardGoingAway && keyguardShowing && !aodRemoved);
+        if (aodRemoved) {
+            updateDeferWakeTransition(false /* waiting */);
+        }
         if (!keyguardChanged && !aodChanged) {
             setWakeTransitionReady();
             return;
@@ -200,10 +206,6 @@
 
         state.mKeyguardShowing = keyguardShowing;
         state.mAodShowing = aodShowing;
-        if (aodChanged) {
-            // Ensure the new state takes effect.
-            mWindowManager.mWindowPlacerLocked.performSurfacePlacement();
-        }
 
         if (keyguardChanged) {
             // Irrelevant to AOD.
@@ -221,6 +223,10 @@
         mRootWindowContainer.ensureActivitiesVisible(null, 0, !PRESERVE_WINDOWS);
         InputMethodManagerInternal.get().updateImeWindowStatus(false /* disableImeIcon */);
         setWakeTransitionReady();
+        if (aodChanged) {
+            // Ensure the new state takes effect.
+            mWindowManager.mWindowPlacerLocked.performSurfacePlacement();
+        }
     }
 
     private void setWakeTransitionReady() {
@@ -527,6 +533,33 @@
         }
     }
 
+    private final Runnable mResetWaitTransition = () -> {
+        synchronized (mWindowManager.mGlobalLock) {
+            updateDeferWakeTransition(false /* waiting */);
+        }
+    };
+
+    void updateDeferWakeTransition(boolean waiting) {
+        if (waiting == mWaitingForWakeTransition) {
+            return;
+        }
+        if (!mWindowManager.mAtmService.getTransitionController().isShellTransitionsEnabled()) {
+            return;
+        }
+        // if aod is showing, defer the wake transition until aod state changed.
+        if (waiting && isAodShowing(DEFAULT_DISPLAY)) {
+            mWaitingForWakeTransition = true;
+            mWindowManager.mAtmService.getTransitionController().deferTransitionReady();
+            mWindowManager.mH.postDelayed(mResetWaitTransition, DEFER_WAKE_TRANSITION_TIMEOUT_MS);
+        } else if (!waiting) {
+            // dismiss the deferring if the aod state change or cancel awake.
+            mWaitingForWakeTransition = false;
+            mWindowManager.mAtmService.getTransitionController().continueTransitionReady();
+            mWindowManager.mH.removeCallbacks(mResetWaitTransition);
+        }
+    }
+
+
     /** Represents Keyguard state per individual display. */
     private static class KeyguardDisplayState {
         private final int mDisplayId;
diff --git a/services/core/java/com/android/server/wm/Letterbox.java b/services/core/java/com/android/server/wm/Letterbox.java
index 40df02c..df3109a 100644
--- a/services/core/java/com/android/server/wm/Letterbox.java
+++ b/services/core/java/com/android/server/wm/Letterbox.java
@@ -25,7 +25,6 @@
 import android.graphics.Rect;
 import android.os.IBinder;
 import android.os.InputConfig;
-import android.os.Process;
 import android.view.GestureDetector;
 import android.view.InputChannel;
 import android.view.InputEvent;
@@ -72,7 +71,8 @@
     private final LetterboxSurface mFullWindowSurface = new LetterboxSurface("fullWindow");
     private final LetterboxSurface[] mSurfaces = { mLeft, mTop, mRight, mBottom };
     // Reachability gestures.
-    private final IntConsumer mDoubleTapCallback;
+    private final IntConsumer mDoubleTapCallbackX;
+    private final IntConsumer mDoubleTapCallbackY;
 
     /**
      * Constructs a Letterbox.
@@ -86,7 +86,8 @@
             Supplier<Boolean> hasWallpaperBackgroundSupplier,
             Supplier<Integer> blurRadiusSupplier,
             Supplier<Float> darkScrimAlphaSupplier,
-            IntConsumer doubleTapCallback) {
+            IntConsumer doubleTapCallbackX,
+            IntConsumer doubleTapCallbackY) {
         mSurfaceControlFactory = surfaceControlFactory;
         mTransactionFactory = transactionFactory;
         mAreCornersRounded = areCornersRounded;
@@ -94,7 +95,8 @@
         mHasWallpaperBackgroundSupplier = hasWallpaperBackgroundSupplier;
         mBlurRadiusSupplier = blurRadiusSupplier;
         mDarkScrimAlphaSupplier = darkScrimAlphaSupplier;
-        mDoubleTapCallback = doubleTapCallback;
+        mDoubleTapCallbackX = doubleTapCallbackX;
+        mDoubleTapCallbackY = doubleTapCallbackY;
     }
 
     /**
@@ -136,6 +138,11 @@
         return mInner;
     }
 
+    /** @return The frame that contains the inner frame and the insets. */
+    Rect getOuterFrame() {
+        return mOuter;
+    }
+
     /**
      * Returns {@code true} if the letterbox does not overlap with the bar, or the letterbox can
      * fully cover the window frame.
@@ -264,7 +271,8 @@
         @Override
         public boolean onDoubleTapEvent(MotionEvent e) {
             if (e.getAction() == MotionEvent.ACTION_UP) {
-                mDoubleTapCallback.accept((int) e.getX());
+                mDoubleTapCallbackX.accept((int) e.getX());
+                mDoubleTapCallbackY.accept((int) e.getY());
                 return true;
             }
             return false;
@@ -293,8 +301,8 @@
             mWindowHandle.token = mToken;
             mWindowHandle.layoutParamsType = WindowManager.LayoutParams.TYPE_INPUT_CONSUMER;
             mWindowHandle.dispatchingTimeoutMillis = DEFAULT_DISPATCHING_TIMEOUT_MILLIS;
-            mWindowHandle.ownerPid = Process.myPid();
-            mWindowHandle.ownerUid = Process.myUid();
+            mWindowHandle.ownerPid = WindowManagerService.MY_PID;
+            mWindowHandle.ownerUid = WindowManagerService.MY_UID;
             mWindowHandle.scaleFactor = 1.0f;
             mWindowHandle.inputConfig = InputConfig.NOT_FOCUSABLE | InputConfig.SLIPPERY;
         }
diff --git a/services/core/java/com/android/server/wm/LetterboxConfiguration.java b/services/core/java/com/android/server/wm/LetterboxConfiguration.java
index d02ad99..57c60f4 100644
--- a/services/core/java/com/android/server/wm/LetterboxConfiguration.java
+++ b/services/core/java/com/android/server/wm/LetterboxConfiguration.java
@@ -22,7 +22,6 @@
 import android.graphics.Color;
 
 import com.android.internal.R;
-import com.android.internal.annotations.VisibleForTesting;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -56,25 +55,48 @@
     static final int LETTERBOX_BACKGROUND_WALLPAPER = 3;
 
     /**
-     * Enum for Letterbox reachability position types.
+     * Enum for Letterbox horizontal reachability position types.
      *
      * <p>Order from left to right is important since it's used in {@link
      * #movePositionForReachabilityToNextRightStop} and {@link
      * #movePositionForReachabilityToNextLeftStop}.
      */
     @Retention(RetentionPolicy.SOURCE)
-    @IntDef({LETTERBOX_REACHABILITY_POSITION_LEFT, LETTERBOX_REACHABILITY_POSITION_CENTER,
-            LETTERBOX_REACHABILITY_POSITION_RIGHT})
-    @interface LetterboxReachabilityPosition {};
+    @IntDef({LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_LEFT,
+            LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_CENTER,
+            LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_RIGHT})
+    @interface LetterboxHorizontalReachabilityPosition {};
 
     /** Letterboxed app window is aligned to the left side. */
-    static final int LETTERBOX_REACHABILITY_POSITION_LEFT = 0;
+    static final int LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_LEFT = 0;
 
     /** Letterboxed app window is positioned in the horizontal center. */
-    static final int LETTERBOX_REACHABILITY_POSITION_CENTER = 1;
+    static final int LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_CENTER = 1;
 
     /** Letterboxed app window is aligned to the right side. */
-    static final int LETTERBOX_REACHABILITY_POSITION_RIGHT = 2;
+    static final int LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_RIGHT = 2;
+
+    /**
+     * Enum for Letterbox vertical reachability position types.
+     *
+     * <p>Order from top to bottom is important since it's used in {@link
+     * #movePositionForReachabilityToNextBottomStop} and {@link
+     * #movePositionForReachabilityToNextTopStop}.
+     */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef({LETTERBOX_VERTICAL_REACHABILITY_POSITION_TOP,
+            LETTERBOX_VERTICAL_REACHABILITY_POSITION_CENTER,
+            LETTERBOX_VERTICAL_REACHABILITY_POSITION_BOTTOM})
+    @interface LetterboxVerticalReachabilityPosition {};
+
+    /** Letterboxed app window is aligned to the left side. */
+    static final int LETTERBOX_VERTICAL_REACHABILITY_POSITION_TOP = 0;
+
+    /** Letterboxed app window is positioned in the vertical center. */
+    static final int LETTERBOX_VERTICAL_REACHABILITY_POSITION_CENTER = 1;
+
+    /** Letterboxed app window is aligned to the right side. */
+    static final int LETTERBOX_VERTICAL_REACHABILITY_POSITION_BOTTOM = 2;
 
     final Context mContext;
 
@@ -82,6 +104,9 @@
     // MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO will be ignored.
     private float mFixedOrientationLetterboxAspectRatio;
 
+    // Default min aspect ratio for unresizable apps that are eligible for the size compat mode.
+    private float mDefaultMinAspectRatioForUnresizableApps;
+
     // Corners radius for activities presented in the letterbox mode, values < 0 will be ignored.
     private int mLetterboxActivityCornersRadius;
 
@@ -107,29 +132,57 @@
     // side of the screen and 1.0 to the right side.
     private float mLetterboxHorizontalPositionMultiplier;
 
-    // Default horizontal position the letterboxed app window when reachability is enabled and
-    // an app is fullscreen in landscape device orientatio.
-    // It is used as a starting point for mLetterboxPositionForReachability.
-    @LetterboxReachabilityPosition
-    private int mDefaultPositionForReachability;
+    // Vertical position of a center of the letterboxed app window. 0 corresponds to the top
+    // side of the screen and 1.0 to the bottom side.
+    private float mLetterboxVerticalPositionMultiplier;
 
-    // Whether reachability repositioning is allowed for letterboxed fullscreen apps in landscape
-    // device orientation.
-    private boolean mIsReachabilityEnabled;
+    // Default horizontal position the letterboxed app window when horizontal reachability is
+    // enabled and an app is fullscreen in landscape device orientation.
+    // It is used as a starting point for mLetterboxPositionForHorizontalReachability.
+    @LetterboxHorizontalReachabilityPosition
+    private int mDefaultPositionForHorizontalReachability;
+
+    // Default vertical position the letterboxed app window when vertical reachability is enabled
+    // and an app is fullscreen in portrait device orientation.
+    // It is used as a starting point for mLetterboxPositionForVerticalReachability.
+    @LetterboxVerticalReachabilityPosition
+    private int mDefaultPositionForVerticalReachability;
+
+    // Whether horizontal reachability repositioning is allowed for letterboxed fullscreen apps in
+    // landscape device orientation.
+    private boolean mIsHorizontalReachabilityEnabled;
+
+    // Whether vertical reachability repositioning is allowed for letterboxed fullscreen apps in
+    // portrait device orientation.
+    private boolean mIsVerticalReachabilityEnabled;
+
 
     // Horizontal position of a center of the letterboxed app window which is global to prevent
     // "jumps" when switching between letterboxed apps. It's updated to reposition the app window
     // in response to a double tap gesture (see LetterboxUiController#handleDoubleTap). Used in
     // LetterboxUiController#getHorizontalPositionMultiplier which is called from
-    // ActivityRecord#updateResolvedBoundsHorizontalPosition.
+    // ActivityRecord#updateResolvedBoundsPosition.
     // TODO(b/199426138): Global reachability setting causes a jump when resuming an app from
     // Overview after changing position in another app.
-    @LetterboxReachabilityPosition
-    private volatile int mLetterboxPositionForReachability;
+    @LetterboxHorizontalReachabilityPosition
+    private volatile int mLetterboxPositionForHorizontalReachability;
+
+    // Vertical position of a center of the letterboxed app window which is global to prevent
+    // "jumps" when switching between letterboxed apps. It's updated to reposition the app window
+    // in response to a double tap gesture (see LetterboxUiController#handleDoubleTap). Used in
+    // LetterboxUiController#getVerticalPositionMultiplier which is called from
+    // ActivityRecord#updateResolvedBoundsPosition.
+    // TODO(b/199426138): Global reachability setting causes a jump when resuming an app from
+    // Overview after changing position in another app.
+    @LetterboxVerticalReachabilityPosition
+    private volatile int mLetterboxPositionForVerticalReachability;
 
     // Whether education is allowed for letterboxed fullscreen apps.
     private boolean mIsEducationEnabled;
 
+    // Whether using split screen aspect ratio as a default aspect ratio for unresizable apps.
+    private boolean mIsSplitScreenAspectRatioForUnresizableAppsEnabled;
+
     LetterboxConfiguration(Context systemUiContext) {
         mContext = systemUiContext;
         mFixedOrientationLetterboxAspectRatio = mContext.getResources().getFloat(
@@ -143,12 +196,24 @@
                 R.dimen.config_letterboxBackgroundWallaperDarkScrimAlpha);
         mLetterboxHorizontalPositionMultiplier = mContext.getResources().getFloat(
                 R.dimen.config_letterboxHorizontalPositionMultiplier);
-        mIsReachabilityEnabled = mContext.getResources().getBoolean(
-                R.bool.config_letterboxIsReachabilityEnabled);
-        mDefaultPositionForReachability = readLetterboxReachabilityPositionFromConfig(mContext);
-        mLetterboxPositionForReachability = mDefaultPositionForReachability;
+        mLetterboxVerticalPositionMultiplier = mContext.getResources().getFloat(
+                R.dimen.config_letterboxVerticalPositionMultiplier);
+        mIsHorizontalReachabilityEnabled = mContext.getResources().getBoolean(
+                R.bool.config_letterboxIsHorizontalReachabilityEnabled);
+        mIsVerticalReachabilityEnabled = mContext.getResources().getBoolean(
+                R.bool.config_letterboxIsVerticalReachabilityEnabled);
+        mDefaultPositionForHorizontalReachability =
+                readLetterboxHorizontalReachabilityPositionFromConfig(mContext);
+        mDefaultPositionForVerticalReachability =
+                readLetterboxVerticalReachabilityPositionFromConfig(mContext);
+        mLetterboxPositionForHorizontalReachability = mDefaultPositionForHorizontalReachability;
+        mLetterboxPositionForVerticalReachability = mDefaultPositionForVerticalReachability;
         mIsEducationEnabled = mContext.getResources().getBoolean(
                 R.bool.config_letterboxIsEducationEnabled);
+        setDefaultMinAspectRatioForUnresizableApps(mContext.getResources().getFloat(
+                R.dimen.config_letterboxDefaultMinAspectRatioForUnresizableApps));
+        mIsSplitScreenAspectRatioForUnresizableAppsEnabled = mContext.getResources().getBoolean(
+                R.bool.config_letterboxIsSplitScreenAspectRatioForUnresizableAppsEnabled);
     }
 
     /**
@@ -157,7 +222,6 @@
      * com.android.internal.R.dimen.config_fixedOrientationLetterboxAspectRatio} will be ignored and
      * the framework implementation will be used to determine the aspect ratio.
      */
-    @VisibleForTesting
     void setFixedOrientationLetterboxAspectRatio(float aspectRatio) {
         mFixedOrientationLetterboxAspectRatio = aspectRatio;
     }
@@ -166,7 +230,6 @@
      * Resets the aspect ratio of letterbox for fixed orientation to {@link
      * com.android.internal.R.dimen.config_fixedOrientationLetterboxAspectRatio}.
      */
-    @VisibleForTesting
     void resetFixedOrientationLetterboxAspectRatio() {
         mFixedOrientationLetterboxAspectRatio = mContext.getResources().getFloat(
                 com.android.internal.R.dimen.config_fixedOrientationLetterboxAspectRatio);
@@ -180,6 +243,47 @@
     }
 
     /**
+     * Resets the min aspect ratio for unresizable apps that are eligible for size compat mode.
+     */
+    void resetDefaultMinAspectRatioForUnresizableApps() {
+        setDefaultMinAspectRatioForUnresizableApps(mContext.getResources().getFloat(
+                R.dimen.config_letterboxDefaultMinAspectRatioForUnresizableApps));
+    }
+
+    /**
+     * Gets the min aspect ratio for unresizable apps that are eligible for size compat mode.
+     */
+    float getDefaultMinAspectRatioForUnresizableApps() {
+        return mDefaultMinAspectRatioForUnresizableApps;
+    }
+
+    /**
+     * Overrides the min aspect ratio for unresizable apps that are eligible for size compat mode.
+     */
+    void setDefaultMinAspectRatioForUnresizableApps(float aspectRatio) {
+        mDefaultMinAspectRatioForUnresizableApps = aspectRatio;
+    }
+
+    /**
+     * Overrides corners raidus for activities presented in the letterbox mode. If given value < 0,
+     * both it and a value of {@link
+     * com.android.internal.R.integer.config_letterboxActivityCornersRadius} will be ignored and
+     * corners of the activity won't be rounded.
+     */
+    void setLetterboxActivityCornersRadius(int cornersRadius) {
+        mLetterboxActivityCornersRadius = cornersRadius;
+    }
+
+    /**
+     * Resets corners raidus for activities presented in the letterbox mode to {@link
+     * com.android.internal.R.integer.config_letterboxActivityCornersRadius}.
+     */
+    void resetLetterboxActivityCornersRadius() {
+        mLetterboxActivityCornersRadius = mContext.getResources().getInteger(
+                com.android.internal.R.integer.config_letterboxActivityCornersRadius);
+    }
+
+    /**
      * Whether corners of letterboxed activities are rounded.
      */
     boolean isLetterboxActivityCornersRounded() {
@@ -196,7 +300,7 @@
     /**
      * Gets color of letterbox background which is used when {@link
      * #getLetterboxBackgroundType()} is {@link #LETTERBOX_BACKGROUND_SOLID_COLOR} or as
-     * fallback for other backfround types.
+     * fallback for other background types.
      */
     Color getLetterboxBackgroundColor() {
         if (mLetterboxBackgroundColorOverride != null) {
@@ -210,6 +314,34 @@
         return Color.valueOf(mContext.getResources().getColor(colorId));
     }
 
+
+    /**
+     * Sets color of letterbox background which is used when {@link
+     * #getLetterboxBackgroundType()} is {@link #LETTERBOX_BACKGROUND_SOLID_COLOR} or as
+     * fallback for other backfround types.
+     */
+    void setLetterboxBackgroundColor(Color color) {
+        mLetterboxBackgroundColorOverride = color;
+    }
+
+    /**
+     * Sets color ID of letterbox background which is used when {@link
+     * #getLetterboxBackgroundType()} is {@link #LETTERBOX_BACKGROUND_SOLID_COLOR} or as
+     * fallback for other backfround types.
+     */
+    void setLetterboxBackgroundColorResourceId(int colorId) {
+        mLetterboxBackgroundColorResourceIdOverride = colorId;
+    }
+
+    /**
+     * Resets color of letterbox background to {@link
+     * com.android.internal.R.color.config_letterboxBackgroundColor}.
+     */
+    void resetLetterboxBackgroundColor() {
+        mLetterboxBackgroundColorOverride = null;
+        mLetterboxBackgroundColorResourceIdOverride = null;
+    }
+
     /**
      * Gets {@link LetterboxBackgroundType} specified in {@link
      * com.android.internal.R.integer.config_letterboxBackgroundType} or over via ADB command.
@@ -219,6 +351,19 @@
         return mLetterboxBackgroundType;
     }
 
+    /** Sets letterbox background type. */
+    void setLetterboxBackgroundType(@LetterboxBackgroundType int backgroundType) {
+        mLetterboxBackgroundType = backgroundType;
+    }
+
+    /**
+     * Resets cletterbox background type to {@link
+     * com.android.internal.R.integer.config_letterboxBackgroundType}.
+     */
+    void resetLetterboxBackgroundType() {
+        mLetterboxBackgroundType = readLetterboxBackgroundTypeFromConfig(mContext);
+    }
+
     /** Returns a string representing the given {@link LetterboxBackgroundType}. */
     static String letterboxBackgroundTypeToString(
             @LetterboxBackgroundType int backgroundType) {
@@ -248,6 +393,27 @@
     }
 
     /**
+     * Overrides alpha of a black scrim shown over wallpaper for {@link
+     * #LETTERBOX_BACKGROUND_WALLPAPER} option in {@link mLetterboxBackgroundType}.
+     *
+     * <p>If given value is < 0 or >= 1, both it and a value of {@link
+     * com.android.internal.R.dimen.config_letterboxBackgroundWallaperDarkScrimAlpha} are ignored
+     * and 0.0 (transparent) is instead.
+     */
+    void setLetterboxBackgroundWallpaperDarkScrimAlpha(float alpha) {
+        mLetterboxBackgroundWallpaperDarkScrimAlpha = alpha;
+    }
+
+    /**
+     * Resets alpha of a black scrim shown over wallpaper letterbox background to {@link
+     * com.android.internal.R.dimen.config_letterboxBackgroundWallaperDarkScrimAlpha}.
+     */
+    void resetLetterboxBackgroundWallpaperDarkScrimAlpha() {
+        mLetterboxBackgroundWallpaperDarkScrimAlpha = mContext.getResources().getFloat(
+                com.android.internal.R.dimen.config_letterboxBackgroundWallaperDarkScrimAlpha);
+    }
+
+    /**
      * Gets alpha of a black scrim shown over wallpaper letterbox background.
      */
     float getLetterboxBackgroundWallpaperDarkScrimAlpha() {
@@ -255,6 +421,28 @@
     }
 
     /**
+     * Overrides blur radius for {@link #LETTERBOX_BACKGROUND_WALLPAPER} option in
+     * {@link mLetterboxBackgroundType}.
+     *
+     * <p> If given value <= 0, both it and a value of {@link
+     * com.android.internal.R.dimen.config_letterboxBackgroundWallpaperBlurRadius} are ignored
+     * and 0 is used instead.
+     */
+    void setLetterboxBackgroundWallpaperBlurRadius(int radius) {
+        mLetterboxBackgroundWallpaperBlurRadius = radius;
+    }
+
+    /**
+     * Resets blur raidus for {@link #LETTERBOX_BACKGROUND_WALLPAPER} option in {@link
+     * mLetterboxBackgroundType} to {@link
+     * com.android.internal.R.dimen.config_letterboxBackgroundWallpaperBlurRadius}.
+     */
+    void resetLetterboxBackgroundWallpaperBlurRadius() {
+        mLetterboxBackgroundWallpaperBlurRadius = mContext.getResources().getDimensionPixelSize(
+                com.android.internal.R.dimen.config_letterboxBackgroundWallpaperBlurRadius);
+    }
+
+    /**
      * Gets blur raidus for {@link #LETTERBOX_BACKGROUND_WALLPAPER} option in {@link
      * mLetterboxBackgroundType}.
      */
@@ -275,72 +463,187 @@
                         ? 0.5f : mLetterboxHorizontalPositionMultiplier;
     }
 
+    /*
+     * Gets vertical position of a center of the letterboxed app window specified
+     * in {@link com.android.internal.R.dimen.config_letterboxVerticalPositionMultiplier}
+     * or via an ADB command. 0 corresponds to the top side of the screen and 1 to the
+     * bottom side.
+     */
+    float getLetterboxVerticalPositionMultiplier() {
+        return (mLetterboxVerticalPositionMultiplier < 0.0f
+                || mLetterboxVerticalPositionMultiplier > 1.0f)
+                        // Default to central position if invalid value is provided.
+                        ? 0.5f : mLetterboxVerticalPositionMultiplier;
+    }
+
     /**
      * Overrides horizontal position of a center of the letterboxed app window. If given value < 0
      * or > 1, then it and a value of {@link
      * com.android.internal.R.dimen.config_letterboxHorizontalPositionMultiplier} are ignored and
      * central position (0.5) is used.
      */
-    @VisibleForTesting
     void setLetterboxHorizontalPositionMultiplier(float multiplier) {
         mLetterboxHorizontalPositionMultiplier = multiplier;
     }
 
     /**
+     * Overrides vertical position of a center of the letterboxed app window. If given value < 0
+     * or > 1, then it and a value of {@link
+     * com.android.internal.R.dimen.config_letterboxVerticalPositionMultiplier} are ignored and
+     * central position (0.5) is used.
+     */
+    void setLetterboxVerticalPositionMultiplier(float multiplier) {
+        mLetterboxVerticalPositionMultiplier = multiplier;
+    }
+
+    /**
      * Resets horizontal position of a center of the letterboxed app window to {@link
      * com.android.internal.R.dimen.config_letterboxHorizontalPositionMultiplier}.
      */
-    @VisibleForTesting
     void resetLetterboxHorizontalPositionMultiplier() {
         mLetterboxHorizontalPositionMultiplier = mContext.getResources().getFloat(
                 com.android.internal.R.dimen.config_letterboxHorizontalPositionMultiplier);
     }
 
-    /*
-     * Whether reachability repositioning is allowed for letterboxed fullscreen apps in landscape
-     * device orientation.
+    /**
+     * Resets vertical position of a center of the letterboxed app window to {@link
+     * com.android.internal.R.dimen.config_letterboxVerticalPositionMultiplier}.
      */
-    boolean getIsReachabilityEnabled() {
-        return mIsReachabilityEnabled;
+    void resetLetterboxVerticalPositionMultiplier() {
+        mLetterboxVerticalPositionMultiplier = mContext.getResources().getFloat(
+                com.android.internal.R.dimen.config_letterboxVerticalPositionMultiplier);
     }
 
-    /**
-     * Overrides whether reachability repositioning is allowed for letterboxed fullscreen apps in
+    /*
+     * Whether horizontal reachability repositioning is allowed for letterboxed fullscreen apps in
      * landscape device orientation.
      */
-    @VisibleForTesting
-    void setIsReachabilityEnabled(boolean enabled) {
-        mIsReachabilityEnabled = enabled;
-    }
-
-    /**
-     * Resets whether reachability repositioning is allowed for letterboxed fullscreen apps in
-     * landscape device orientation to {@link R.bool.config_letterboxIsReachabilityEnabled}.
-     */
-    @VisibleForTesting
-    void resetIsReachabilityEnabled() {
-        mIsReachabilityEnabled = mContext.getResources().getBoolean(
-                R.bool.config_letterboxIsReachabilityEnabled);
+    boolean getIsHorizontalReachabilityEnabled() {
+        return mIsHorizontalReachabilityEnabled;
     }
 
     /*
-     * Gets default horizontal position of the letterboxed app window when reachability is enabled.
-     * Specified in {@link R.integer.config_letterboxDefaultPositionForReachability} or via an ADB
-     * command.
+     * Whether vertical reachability repositioning is allowed for letterboxed fullscreen apps in
+     * portrait device orientation.
      */
-    @LetterboxReachabilityPosition
-    int getDefaultPositionForReachability() {
-        return mDefaultPositionForReachability;
+    boolean getIsVerticalReachabilityEnabled() {
+        return mIsVerticalReachabilityEnabled;
     }
 
-    @LetterboxReachabilityPosition
-    private static int readLetterboxReachabilityPositionFromConfig(Context context) {
+    /**
+     * Overrides whether horizontal reachability repositioning is allowed for letterboxed fullscreen
+     * apps in landscape device orientation.
+     */
+    void setIsHorizontalReachabilityEnabled(boolean enabled) {
+        mIsHorizontalReachabilityEnabled = enabled;
+    }
+
+    /**
+     * Overrides whether vertical reachability repositioning is allowed for letterboxed fullscreen
+     * apps in portrait device orientation.
+     */
+    void setIsVerticalReachabilityEnabled(boolean enabled) {
+        mIsVerticalReachabilityEnabled = enabled;
+    }
+
+    /**
+     * Resets whether horizontal reachability repositioning is allowed for letterboxed fullscreen
+     * apps in landscape device orientation to
+     * {@link R.bool.config_letterboxIsHorizontalReachabilityEnabled}.
+     */
+    void resetIsHorizontalReachabilityEnabled() {
+        mIsHorizontalReachabilityEnabled = mContext.getResources().getBoolean(
+                R.bool.config_letterboxIsHorizontalReachabilityEnabled);
+    }
+
+    /**
+     * Resets whether vertical reachability repositioning is allowed for letterboxed fullscreen apps
+     * in portrait device orientation to
+     * {@link R.bool.config_letterboxIsVerticalReachabilityEnabled}.
+     */
+    void resetIsVerticalReachabilityEnabled() {
+        mIsVerticalReachabilityEnabled = mContext.getResources().getBoolean(
+                R.bool.config_letterboxIsVerticalReachabilityEnabled);
+    }
+
+    /*
+     * Gets default horizontal position of the letterboxed app window when horizontal reachability
+     * is enabled.
+     *
+     * <p> Specified in {@link R.integer.config_letterboxDefaultPositionForHorizontalReachability}
+     *  or via an ADB command.
+     */
+    @LetterboxHorizontalReachabilityPosition
+    int getDefaultPositionForHorizontalReachability() {
+        return mDefaultPositionForHorizontalReachability;
+    }
+
+    /*
+     * Gets default vertical position of the letterboxed app window when vertical reachability is
+     * enabled.
+     *
+     * <p> Specified in {@link R.integer.config_letterboxDefaultPositionForVerticalReachability} or
+     *  via an ADB command.
+     */
+    @LetterboxVerticalReachabilityPosition
+    int getDefaultPositionForVerticalReachability() {
+        return mDefaultPositionForVerticalReachability;
+    }
+
+    /**
+     * Overrides default horizontal position of the letterboxed app window when horizontal
+     * reachability is enabled.
+     */
+    void setDefaultPositionForHorizontalReachability(
+            @LetterboxHorizontalReachabilityPosition int position) {
+        mDefaultPositionForHorizontalReachability = position;
+    }
+
+    /**
+     * Overrides default vertical position of the letterboxed app window when vertical
+     * reachability is enabled.
+     */
+    void setDefaultPositionForVerticalReachability(
+            @LetterboxVerticalReachabilityPosition int position) {
+        mDefaultPositionForVerticalReachability = position;
+    }
+
+    /**
+     * Resets default horizontal position of the letterboxed app window when horizontal reachability
+     * is enabled to {@link R.integer.config_letterboxDefaultPositionForHorizontalReachability}.
+     */
+    void resetDefaultPositionForHorizontalReachability() {
+        mDefaultPositionForHorizontalReachability =
+                readLetterboxHorizontalReachabilityPositionFromConfig(mContext);
+    }
+
+    /**
+     * Resets default vertical position of the letterboxed app window when vertical reachability
+     * is enabled to {@link R.integer.config_letterboxDefaultPositionForVerticalReachability}.
+     */
+    void resetDefaultPositionForVerticalReachability() {
+        mDefaultPositionForVerticalReachability =
+                readLetterboxVerticalReachabilityPositionFromConfig(mContext);
+    }
+
+    @LetterboxHorizontalReachabilityPosition
+    private static int readLetterboxHorizontalReachabilityPositionFromConfig(Context context) {
         int position = context.getResources().getInteger(
-                R.integer.config_letterboxDefaultPositionForReachability);
-        return position == LETTERBOX_REACHABILITY_POSITION_LEFT
-                    || position == LETTERBOX_REACHABILITY_POSITION_CENTER
-                    || position == LETTERBOX_REACHABILITY_POSITION_RIGHT
-                    ? position : LETTERBOX_REACHABILITY_POSITION_CENTER;
+                R.integer.config_letterboxDefaultPositionForHorizontalReachability);
+        return position == LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_LEFT
+                    || position == LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_CENTER
+                    || position == LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_RIGHT
+                    ? position : LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_CENTER;
+    }
+
+    @LetterboxVerticalReachabilityPosition
+    private static int readLetterboxVerticalReachabilityPositionFromConfig(Context context) {
+        int position = context.getResources().getInteger(
+                R.integer.config_letterboxDefaultPositionForVerticalReachability);
+        return position == LETTERBOX_VERTICAL_REACHABILITY_POSITION_TOP
+                || position == LETTERBOX_VERTICAL_REACHABILITY_POSITION_CENTER
+                || position == LETTERBOX_VERTICAL_REACHABILITY_POSITION_BOTTOM
+                ? position : LETTERBOX_VERTICAL_REACHABILITY_POSITION_CENTER;
     }
 
     /*
@@ -350,48 +653,126 @@
      * <p>The position multiplier is changed after each double tap in the letterbox area.
      */
     float getHorizontalMultiplierForReachability() {
-        switch (mLetterboxPositionForReachability) {
-            case LETTERBOX_REACHABILITY_POSITION_LEFT:
+        switch (mLetterboxPositionForHorizontalReachability) {
+            case LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_LEFT:
                 return 0.0f;
-            case LETTERBOX_REACHABILITY_POSITION_CENTER:
+            case LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_CENTER:
                 return 0.5f;
-            case LETTERBOX_REACHABILITY_POSITION_RIGHT:
+            case LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_RIGHT:
                 return 1.0f;
             default:
                 throw new AssertionError(
-                    "Unexpected letterbox position type: " + mLetterboxPositionForReachability);
+                    "Unexpected letterbox position type: "
+                            + mLetterboxPositionForHorizontalReachability);
+        }
+    }
+    /*
+     * Gets vertical position of a center of the letterboxed app window when reachability
+     * is enabled specified. 0 corresponds to the top side of the screen and 1 to the bottom side.
+     *
+     * <p>The position multiplier is changed after each double tap in the letterbox area.
+     */
+    float getVerticalMultiplierForReachability() {
+        switch (mLetterboxPositionForVerticalReachability) {
+            case LETTERBOX_VERTICAL_REACHABILITY_POSITION_TOP:
+                return 0.0f;
+            case LETTERBOX_VERTICAL_REACHABILITY_POSITION_CENTER:
+                return 0.5f;
+            case LETTERBOX_VERTICAL_REACHABILITY_POSITION_BOTTOM:
+                return 1.0f;
+            default:
+                throw new AssertionError(
+                        "Unexpected letterbox position type: "
+                                + mLetterboxPositionForVerticalReachability);
         }
     }
 
-    /** Returns a string representing the given {@link LetterboxReachabilityPosition}. */
-    static String letterboxReachabilityPositionToString(
-            @LetterboxReachabilityPosition int position) {
+    /*
+     * Gets the horizontal position of the letterboxed app window when horizontal reachability is
+     * enabled.
+     */
+    @LetterboxHorizontalReachabilityPosition
+    int getLetterboxPositionForHorizontalReachability() {
+        return mLetterboxPositionForHorizontalReachability;
+    }
+
+    /*
+     * Gets the vertical position of the letterboxed app window when vertical reachability is
+     * enabled.
+     */
+    @LetterboxVerticalReachabilityPosition
+    int getLetterboxPositionForVerticalReachability() {
+        return mLetterboxPositionForVerticalReachability;
+    }
+
+    /** Returns a string representing the given {@link LetterboxHorizontalReachabilityPosition}. */
+    static String letterboxHorizontalReachabilityPositionToString(
+            @LetterboxHorizontalReachabilityPosition int position) {
         switch (position) {
-            case LETTERBOX_REACHABILITY_POSITION_LEFT:
-                return "LETTERBOX_REACHABILITY_POSITION_LEFT";
-            case LETTERBOX_REACHABILITY_POSITION_CENTER:
-                return "LETTERBOX_REACHABILITY_POSITION_CENTER";
-            case LETTERBOX_REACHABILITY_POSITION_RIGHT:
-                return "LETTERBOX_REACHABILITY_POSITION_RIGHT";
+            case LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_LEFT:
+                return "LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_LEFT";
+            case LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_CENTER:
+                return "LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_CENTER";
+            case LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_RIGHT:
+                return "LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_RIGHT";
             default:
                 throw new AssertionError(
                     "Unexpected letterbox position type: " + position);
         }
     }
 
-    /**
-     * Changes letterbox position for reachability to the next available one on the right side.
-     */
-    void movePositionForReachabilityToNextRightStop() {
-        mLetterboxPositionForReachability = Math.min(
-                mLetterboxPositionForReachability + 1, LETTERBOX_REACHABILITY_POSITION_RIGHT);
+    /** Returns a string representing the given {@link LetterboxVerticalReachabilityPosition}. */
+    static String letterboxVerticalReachabilityPositionToString(
+            @LetterboxVerticalReachabilityPosition int position) {
+        switch (position) {
+            case LETTERBOX_VERTICAL_REACHABILITY_POSITION_TOP:
+                return "LETTERBOX_VERTICAL_REACHABILITY_POSITION_TOP";
+            case LETTERBOX_VERTICAL_REACHABILITY_POSITION_CENTER:
+                return "LETTERBOX_VERTICAL_REACHABILITY_POSITION_CENTER";
+            case LETTERBOX_VERTICAL_REACHABILITY_POSITION_BOTTOM:
+                return "LETTERBOX_VERTICAL_REACHABILITY_POSITION_BOTTOM";
+            default:
+                throw new AssertionError(
+                        "Unexpected letterbox position type: " + position);
+        }
     }
 
     /**
-     * Changes letterbox position for reachability to the next available one on the left side.
+     * Changes letterbox position for horizontal reachability to the next available one on the
+     * right side.
      */
-    void movePositionForReachabilityToNextLeftStop() {
-        mLetterboxPositionForReachability = Math.max(mLetterboxPositionForReachability - 1, 0);
+    void movePositionForHorizontalReachabilityToNextRightStop() {
+        mLetterboxPositionForHorizontalReachability = Math.min(
+                mLetterboxPositionForHorizontalReachability + 1,
+                LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_RIGHT);
+    }
+
+    /**
+     * Changes letterbox position for horizontal reachability to the next available one on the left
+     * side.
+     */
+    void movePositionForHorizontalReachabilityToNextLeftStop() {
+        mLetterboxPositionForHorizontalReachability =
+                Math.max(mLetterboxPositionForHorizontalReachability - 1, 0);
+    }
+
+    /**
+     * Changes letterbox position for vertical reachability to the next available one on the bottom
+     * side.
+     */
+    void movePositionForVerticalReachabilityToNextBottomStop() {
+        mLetterboxPositionForVerticalReachability = Math.min(
+                mLetterboxPositionForVerticalReachability + 1,
+                LETTERBOX_VERTICAL_REACHABILITY_POSITION_BOTTOM);
+    }
+
+    /**
+     * Changes letterbox position for vertical reachability to the next available one on the top
+     * side.
+     */
+    void movePositionForVerticalReachabilityToNextTopStop() {
+        mLetterboxPositionForVerticalReachability =
+                Math.max(mLetterboxPositionForVerticalReachability - 1, 0);
     }
 
     /**
@@ -404,8 +785,41 @@
     /**
      * Overrides whether education is allowed for letterboxed fullscreen apps.
      */
-    @VisibleForTesting
     void setIsEducationEnabled(boolean enabled) {
         mIsEducationEnabled = enabled;
     }
+
+    /**
+     * Resets whether education is allowed for letterboxed fullscreen apps to
+     * {@link R.bool.config_letterboxIsEducationEnabled}.
+     */
+    void resetIsEducationEnabled() {
+        mIsEducationEnabled = mContext.getResources().getBoolean(
+                R.bool.config_letterboxIsEducationEnabled);
+    }
+
+    /**
+     * Whether using split screen aspect ratio as a default aspect ratio for unresizable apps.
+     */
+    boolean getIsSplitScreenAspectRatioForUnresizableAppsEnabled() {
+        return mIsSplitScreenAspectRatioForUnresizableAppsEnabled;
+    }
+
+    /**
+     * Overrides whether using split screen aspect ratio as a default aspect ratio for unresizable
+     * apps.
+     */
+    void setIsSplitScreenAspectRatioForUnresizableAppsEnabled(boolean enabled) {
+        mIsSplitScreenAspectRatioForUnresizableAppsEnabled = enabled;
+    }
+
+    /**
+     * Resets whether using split screen aspect ratio as a default aspect ratio for unresizable
+     * apps {@link R.bool.config_letterboxIsSplitScreenAspectRatioForUnresizableAppsEnabled}.
+     */
+    void resetIsSplitScreenAspectRatioForUnresizableAppsEnabled() {
+        mIsSplitScreenAspectRatioForUnresizableAppsEnabled = mContext.getResources().getBoolean(
+                R.bool.config_letterboxIsSplitScreenAspectRatioForUnresizableAppsEnabled);
+    }
+
 }
diff --git a/services/core/java/com/android/server/wm/LetterboxUiController.java b/services/core/java/com/android/server/wm/LetterboxUiController.java
index bb15d76..ec9ee29 100644
--- a/services/core/java/com/android/server/wm/LetterboxUiController.java
+++ b/services/core/java/com/android/server/wm/LetterboxUiController.java
@@ -21,6 +21,20 @@
 import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
 import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
 
+import static com.android.internal.util.FrameworkStatsLog.APP_COMPAT_STATE_CHANGED__LETTERBOX_POSITION__BOTTOM;
+import static com.android.internal.util.FrameworkStatsLog.APP_COMPAT_STATE_CHANGED__LETTERBOX_POSITION__CENTER;
+import static com.android.internal.util.FrameworkStatsLog.APP_COMPAT_STATE_CHANGED__LETTERBOX_POSITION__LEFT;
+import static com.android.internal.util.FrameworkStatsLog.APP_COMPAT_STATE_CHANGED__LETTERBOX_POSITION__RIGHT;
+import static com.android.internal.util.FrameworkStatsLog.APP_COMPAT_STATE_CHANGED__LETTERBOX_POSITION__TOP;
+import static com.android.internal.util.FrameworkStatsLog.APP_COMPAT_STATE_CHANGED__LETTERBOX_POSITION__UNKNOWN_POSITION;
+import static com.android.internal.util.FrameworkStatsLog.LETTERBOX_POSITION_CHANGED__POSITION_CHANGE__BOTTOM_TO_CENTER;
+import static com.android.internal.util.FrameworkStatsLog.LETTERBOX_POSITION_CHANGED__POSITION_CHANGE__CENTER_TO_BOTTOM;
+import static com.android.internal.util.FrameworkStatsLog.LETTERBOX_POSITION_CHANGED__POSITION_CHANGE__CENTER_TO_LEFT;
+import static com.android.internal.util.FrameworkStatsLog.LETTERBOX_POSITION_CHANGED__POSITION_CHANGE__CENTER_TO_RIGHT;
+import static com.android.internal.util.FrameworkStatsLog.LETTERBOX_POSITION_CHANGED__POSITION_CHANGE__CENTER_TO_TOP;
+import static com.android.internal.util.FrameworkStatsLog.LETTERBOX_POSITION_CHANGED__POSITION_CHANGE__LEFT_TO_CENTER;
+import static com.android.internal.util.FrameworkStatsLog.LETTERBOX_POSITION_CHANGED__POSITION_CHANGE__RIGHT_TO_CENTER;
+import static com.android.internal.util.FrameworkStatsLog.LETTERBOX_POSITION_CHANGED__POSITION_CHANGE__TOP_TO_CENTER;
 import static com.android.server.wm.ActivityRecord.computeAspectRatio;
 import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_ATM;
 import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLASS_NAME;
@@ -28,6 +42,13 @@
 import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND_FLOATING;
 import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_SOLID_COLOR;
 import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_WALLPAPER;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_CENTER;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_LEFT;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_RIGHT;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_VERTICAL_REACHABILITY_POSITION_BOTTOM;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_VERTICAL_REACHABILITY_POSITION_CENTER;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_VERTICAL_REACHABILITY_POSITION_TOP;
+import static com.android.server.wm.LetterboxConfiguration.MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO;
 import static com.android.server.wm.LetterboxConfiguration.letterboxBackgroundTypeToString;
 
 import android.annotation.Nullable;
@@ -47,6 +68,7 @@
 
 import com.android.internal.R;
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.statusbar.LetterboxDetails;
 import com.android.server.wm.LetterboxConfiguration.LetterboxBackgroundType;
 
 import java.io.PrintWriter;
@@ -120,6 +142,15 @@
         }
     }
 
+    /** Gets the outer bounds of letterbox. The bounds will be empty if there is no letterbox. */
+    private void getLetterboxOuterBounds(Rect outBounds) {
+        if (mLetterbox != null) {
+            outBounds.set(mLetterbox.getOuterFrame());
+        } else {
+            outBounds.setEmpty();
+        }
+    }
+
     /**
      * @return {@code true} if bar shown within a given rectangle is allowed to be fully transparent
      *     when the current activity is displayed.
@@ -163,7 +194,8 @@
                         this::hasWallpaperBackgroudForLetterbox,
                         this::getLetterboxWallpaperBlurRadius,
                         this::getLetterboxWallpaperDarkScrimAlpha,
-                        this::handleDoubleTap);
+                        this::handleHorizontalDoubleTap,
+                        this::handleVerticalDoubleTap);
                 mLetterbox.attachInput(w);
             }
             mActivityRecord.getPosition(mTmpPoint);
@@ -193,18 +225,36 @@
     float getHorizontalPositionMultiplier(Configuration parentConfiguration) {
         // Don't check resolved configuration because it may not be updated yet during
         // configuration change.
-        return isReachabilityEnabled(parentConfiguration)
+        return isHorizontalReachabilityEnabled(parentConfiguration)
                 // Using the last global dynamic position to avoid "jumps" when moving
                 // between apps or activities.
                 ? mLetterboxConfiguration.getHorizontalMultiplierForReachability()
                 : mLetterboxConfiguration.getLetterboxHorizontalPositionMultiplier();
     }
 
-    float getFixedOrientationLetterboxAspectRatio(Configuration parentConfiguration) {
-        // Don't check resolved windowing mode because it may not be updated yet during
+    float getVerticalPositionMultiplier(Configuration parentConfiguration) {
+        // Don't check resolved configuration because it may not be updated yet during
         // configuration change.
-        if (!isReachabilityEnabled(parentConfiguration)) {
-            return mLetterboxConfiguration.getFixedOrientationLetterboxAspectRatio();
+        return isVerticalReachabilityEnabled(parentConfiguration)
+                // Using the last global dynamic position to avoid "jumps" when moving
+                // between apps or activities.
+                ? mLetterboxConfiguration.getVerticalMultiplierForReachability()
+                : mLetterboxConfiguration.getLetterboxVerticalPositionMultiplier();
+    }
+
+    float getFixedOrientationLetterboxAspectRatio() {
+        return mActivityRecord.shouldCreateCompatDisplayInsets()
+                ? getDefaultMinAspectRatioForUnresizableApps()
+                : mLetterboxConfiguration.getFixedOrientationLetterboxAspectRatio();
+    }
+
+    private float getDefaultMinAspectRatioForUnresizableApps() {
+        if (!mLetterboxConfiguration.getIsSplitScreenAspectRatioForUnresizableAppsEnabled()
+                || mActivityRecord.getDisplayContent() == null) {
+            return mLetterboxConfiguration.getDefaultMinAspectRatioForUnresizableApps()
+                    > MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO
+                            ? mLetterboxConfiguration.getDefaultMinAspectRatioForUnresizableApps()
+                            : mLetterboxConfiguration.getFixedOrientationLetterboxAspectRatio();
         }
 
         int dividerWindowWidth =
@@ -214,10 +264,14 @@
         int dividerSize = dividerWindowWidth - dividerInsets * 2;
 
         // Getting the same aspect ratio that apps get in split screen.
-        Rect bounds = new Rect(parentConfiguration.windowConfiguration.getAppBounds());
-        bounds.inset(dividerSize, /* dy */ 0);
-        bounds.right = bounds.centerX();
-
+        Rect bounds = new Rect(mActivityRecord.getDisplayContent().getBounds());
+        if (bounds.width() >= bounds.height()) {
+            bounds.inset(/* dx */ dividerSize / 2, /* dy */ 0);
+            bounds.right = bounds.centerX();
+        } else {
+            bounds.inset(/* dx */ 0, /* dy */ dividerSize / 2);
+            bounds.bottom = bounds.centerY();
+        }
         return computeAspectRatio(bounds);
     }
 
@@ -225,8 +279,8 @@
         return mActivityRecord.mWmService.mContext.getResources();
     }
 
-    private void handleDoubleTap(int x) {
-        if (!isReachabilityEnabled() || mActivityRecord.isInTransition()) {
+    private void handleHorizontalDoubleTap(int x) {
+        if (!isHorizontalReachabilityEnabled() || mActivityRecord.isInTransition()) {
             return;
         }
 
@@ -235,12 +289,61 @@
             return;
         }
 
+        int letterboxPositionForHorizontalReachability = mLetterboxConfiguration
+                .getLetterboxPositionForHorizontalReachability();
         if (mLetterbox.getInnerFrame().left > x) {
             // Moving to the next stop on the left side of the app window: right > center > left.
-            mLetterboxConfiguration.movePositionForReachabilityToNextLeftStop();
+            mLetterboxConfiguration.movePositionForHorizontalReachabilityToNextLeftStop();
+            int changeToLog =
+                    letterboxPositionForHorizontalReachability
+                            == LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_CENTER
+                                ? LETTERBOX_POSITION_CHANGED__POSITION_CHANGE__CENTER_TO_LEFT
+                                : LETTERBOX_POSITION_CHANGED__POSITION_CHANGE__RIGHT_TO_CENTER;
+            logLetterboxPositionChange(changeToLog);
         } else if (mLetterbox.getInnerFrame().right < x) {
             // Moving to the next stop on the right side of the app window: left > center > right.
-            mLetterboxConfiguration.movePositionForReachabilityToNextRightStop();
+            mLetterboxConfiguration.movePositionForHorizontalReachabilityToNextRightStop();
+            int changeToLog =
+                    letterboxPositionForHorizontalReachability
+                            == LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_CENTER
+                                ? LETTERBOX_POSITION_CHANGED__POSITION_CHANGE__CENTER_TO_RIGHT
+                                : LETTERBOX_POSITION_CHANGED__POSITION_CHANGE__LEFT_TO_CENTER;
+            logLetterboxPositionChange(changeToLog);
+        }
+
+        // TODO(197549949): Add animation for transition.
+        mActivityRecord.recomputeConfiguration();
+    }
+
+    private void handleVerticalDoubleTap(int y) {
+        if (!isVerticalReachabilityEnabled() || mActivityRecord.isInTransition()) {
+            return;
+        }
+
+        if (mLetterbox.getInnerFrame().top <= y && mLetterbox.getInnerFrame().bottom >= y) {
+            // Only react to clicks at the top and bottom of the letterboxed app window.
+            return;
+        }
+        int letterboxPositionForVerticalReachability = mLetterboxConfiguration
+                .getLetterboxPositionForVerticalReachability();
+        if (mLetterbox.getInnerFrame().top > y) {
+            // Moving to the next stop on the top side of the app window: bottom > center > top.
+            mLetterboxConfiguration.movePositionForVerticalReachabilityToNextTopStop();
+            int changeToLog =
+                    letterboxPositionForVerticalReachability
+                            == LETTERBOX_VERTICAL_REACHABILITY_POSITION_CENTER
+                                ? LETTERBOX_POSITION_CHANGED__POSITION_CHANGE__CENTER_TO_TOP
+                                : LETTERBOX_POSITION_CHANGED__POSITION_CHANGE__BOTTOM_TO_CENTER;
+            logLetterboxPositionChange(changeToLog);
+        } else if (mLetterbox.getInnerFrame().bottom < y) {
+            // Moving to the next stop on the bottom side of the app window: top > center > bottom.
+            mLetterboxConfiguration.movePositionForVerticalReachabilityToNextBottomStop();
+            int changeToLog =
+                    letterboxPositionForVerticalReachability
+                            == LETTERBOX_VERTICAL_REACHABILITY_POSITION_CENTER
+                                ? LETTERBOX_POSITION_CHANGED__POSITION_CHANGE__CENTER_TO_BOTTOM
+                                : LETTERBOX_POSITION_CHANGED__POSITION_CHANGE__TOP_TO_CENTER;
+            logLetterboxPositionChange(changeToLog);
         }
 
         // TODO(197549949): Add animation for transition.
@@ -248,25 +351,47 @@
     }
 
     /**
-     * Whether reachability is enabled for an activity in the curren configuration.
+     * Whether horizontal reachability is enabled for an activity in the current configuration.
      *
      * <p>Conditions that needs to be met:
      * <ul>
      *   <li>Activity is portrait-only.
      *   <li>Fullscreen window in landscape device orientation.
-     *   <li>Reachability is enabled.
+     *   <li>Horizontal Reachability is enabled.
      * </ul>
      */
-    private boolean isReachabilityEnabled(Configuration parentConfiguration) {
-        return mLetterboxConfiguration.getIsReachabilityEnabled()
+    private boolean isHorizontalReachabilityEnabled(Configuration parentConfiguration) {
+        return mLetterboxConfiguration.getIsHorizontalReachabilityEnabled()
                 && parentConfiguration.windowConfiguration.getWindowingMode()
                         == WINDOWING_MODE_FULLSCREEN
-                && parentConfiguration.orientation == ORIENTATION_LANDSCAPE
-                && mActivityRecord.getRequestedConfigurationOrientation() == ORIENTATION_PORTRAIT;
+                && (parentConfiguration.orientation == ORIENTATION_LANDSCAPE
+                && mActivityRecord.getRequestedConfigurationOrientation() == ORIENTATION_PORTRAIT);
     }
 
-    private boolean isReachabilityEnabled() {
-        return isReachabilityEnabled(mActivityRecord.getParent().getConfiguration());
+    private boolean isHorizontalReachabilityEnabled() {
+        return isHorizontalReachabilityEnabled(mActivityRecord.getParent().getConfiguration());
+    }
+
+    /**
+     * Whether vertical reachability is enabled for an activity in the current configuration.
+     *
+     * <p>Conditions that needs to be met:
+     * <ul>
+     *   <li>Activity is landscape-only.
+     *   <li>Fullscreen window in portrait device orientation.
+     *   <li>Vertical Reachability is enabled.
+     * </ul>
+     */
+    private boolean isVerticalReachabilityEnabled(Configuration parentConfiguration) {
+        return mLetterboxConfiguration.getIsVerticalReachabilityEnabled()
+                && parentConfiguration.windowConfiguration.getWindowingMode()
+                        == WINDOWING_MODE_FULLSCREEN
+                && (parentConfiguration.orientation == ORIENTATION_PORTRAIT
+                && mActivityRecord.getRequestedConfigurationOrientation() == ORIENTATION_LANDSCAPE);
+    }
+
+    private boolean isVerticalReachabilityEnabled() {
+        return isVerticalReachabilityEnabled(mActivityRecord.getParent().getConfiguration());
     }
 
     @VisibleForTesting
@@ -474,12 +599,19 @@
                     + getLetterboxWallpaperBlurRadius());
         }
 
-        pw.println(prefix + "  isReachabilityEnabled=" + isReachabilityEnabled());
+        pw.println(prefix + "  isHorizontalReachabilityEnabled="
+                + isHorizontalReachabilityEnabled());
+        pw.println(prefix + "  isVerticalReachabilityEnabled=" + isVerticalReachabilityEnabled());
         pw.println(prefix + "  letterboxHorizontalPositionMultiplier="
                 + getHorizontalPositionMultiplier(mActivityRecord.getParent().getConfiguration()));
+        pw.println(prefix + "  letterboxVerticalPositionMultiplier="
+                + getVerticalPositionMultiplier(mActivityRecord.getParent().getConfiguration()));
         pw.println(prefix + "  fixedOrientationLetterboxAspectRatio="
-                + getFixedOrientationLetterboxAspectRatio(
-                        mActivityRecord.getParent().getConfiguration()));
+                + mLetterboxConfiguration.getFixedOrientationLetterboxAspectRatio());
+        pw.println(prefix + "  defaultMinAspectRatioForUnresizableApps="
+                + mLetterboxConfiguration.getDefaultMinAspectRatioForUnresizableApps());
+        pw.println(prefix + "  isSplitScreenAspectRatioForUnresizableAppsEnabled="
+                + mLetterboxConfiguration.getIsSplitScreenAspectRatioForUnresizableAppsEnabled());
     }
 
     /**
@@ -496,7 +628,91 @@
         if (mainWin.isLetterboxedForDisplayCutout()) {
             return "DISPLAY_CUTOUT";
         }
+        if (mActivityRecord.isAspectRatioApplied()) {
+            return "ASPECT_RATIO";
+        }
         return "UNKNOWN_REASON";
     }
 
+    private int letterboxHorizontalReachabilityPositionToLetterboxPosition(
+            @LetterboxConfiguration.LetterboxHorizontalReachabilityPosition int position) {
+        switch (position) {
+            case LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_LEFT:
+                return APP_COMPAT_STATE_CHANGED__LETTERBOX_POSITION__LEFT;
+            case LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_CENTER:
+                return APP_COMPAT_STATE_CHANGED__LETTERBOX_POSITION__CENTER;
+            case LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_RIGHT:
+                return APP_COMPAT_STATE_CHANGED__LETTERBOX_POSITION__RIGHT;
+            default:
+                throw new AssertionError(
+                        "Unexpected letterbox horizontal reachability position type: "
+                                + position);
+        }
+    }
+
+    private int letterboxVerticalReachabilityPositionToLetterboxPosition(
+            @LetterboxConfiguration.LetterboxVerticalReachabilityPosition int position) {
+        switch (position) {
+            case LETTERBOX_VERTICAL_REACHABILITY_POSITION_TOP:
+                return APP_COMPAT_STATE_CHANGED__LETTERBOX_POSITION__TOP;
+            case LETTERBOX_VERTICAL_REACHABILITY_POSITION_CENTER:
+                return APP_COMPAT_STATE_CHANGED__LETTERBOX_POSITION__CENTER;
+            case LETTERBOX_VERTICAL_REACHABILITY_POSITION_BOTTOM:
+                return APP_COMPAT_STATE_CHANGED__LETTERBOX_POSITION__BOTTOM;
+            default:
+                throw new AssertionError(
+                        "Unexpected letterbox vertical reachability position type: "
+                                + position);
+        }
+    }
+
+    int getLetterboxPositionForLogging() {
+        int positionToLog = APP_COMPAT_STATE_CHANGED__LETTERBOX_POSITION__UNKNOWN_POSITION;
+        if (isHorizontalReachabilityEnabled()) {
+            int letterboxPositionForHorizontalReachability = getLetterboxConfiguration()
+                    .getLetterboxPositionForHorizontalReachability();
+            positionToLog = letterboxHorizontalReachabilityPositionToLetterboxPosition(
+                            letterboxPositionForHorizontalReachability);
+        } else if (isVerticalReachabilityEnabled()) {
+            int letterboxPositionForVerticalReachability = getLetterboxConfiguration()
+                    .getLetterboxPositionForVerticalReachability();
+            positionToLog = letterboxVerticalReachabilityPositionToLetterboxPosition(
+                            letterboxPositionForVerticalReachability);
+        }
+        return positionToLog;
+    }
+
+    private LetterboxConfiguration getLetterboxConfiguration() {
+        return mLetterboxConfiguration;
+    }
+
+    /**
+     * Logs letterbox position changes via {@link ActivityMetricsLogger#logLetterboxPositionChange}.
+     */
+    private void logLetterboxPositionChange(int letterboxPositionChange) {
+        mActivityRecord.mTaskSupervisor.getActivityMetricsLogger()
+                .logLetterboxPositionChange(mActivityRecord, letterboxPositionChange);
+    }
+
+    @Nullable
+    LetterboxDetails getLetterboxDetails() {
+        final WindowState w = mActivityRecord.findMainWindow();
+        if (mLetterbox == null || w == null || w.isLetterboxedForDisplayCutout()) {
+            return null;
+        }
+        Rect letterboxInnerBounds = new Rect();
+        Rect letterboxOuterBounds = new Rect();
+        getLetterboxInnerBounds(letterboxInnerBounds);
+        getLetterboxOuterBounds(letterboxOuterBounds);
+
+        if (letterboxInnerBounds.isEmpty() || letterboxOuterBounds.isEmpty()) {
+            return null;
+        }
+
+        return new LetterboxDetails(
+                letterboxInnerBounds,
+                letterboxOuterBounds,
+                w.mAttrs.insetsFlags.appearance
+        );
+    }
 }
diff --git a/services/core/java/com/android/server/wm/LockTaskController.java b/services/core/java/com/android/server/wm/LockTaskController.java
index 7a055d2..f11c2a7 100644
--- a/services/core/java/com/android/server/wm/LockTaskController.java
+++ b/services/core/java/com/android/server/wm/LockTaskController.java
@@ -481,27 +481,24 @@
      *
      * @param task the task that requested the end of lock task mode ({@code null} for quitting app
      *             pinning mode)
-     * @param isSystemCaller indicates whether this request comes from the system via
-     *                       {@link ActivityTaskManagerService#stopSystemLockTaskMode()}. If
-     *                       {@code true}, it means the user intends to stop pinned mode through UI;
-     *                       otherwise, it's called by an app and we need to stop locked or pinned
-     *                       mode, subject to checks.
+     * @param stopAppPinning indicates whether to stop app pinning mode or to stop a task from
+     *                       being locked.
      * @param callingUid the caller that requested the end of lock task mode.
      * @throws IllegalArgumentException if the calling task is invalid (e.g., {@code null} or not in
      *                                  foreground)
      * @throws SecurityException if the caller is not authorized to stop the lock task mode, i.e. if
      *                           they differ from the one that launched lock task mode.
      */
-    void stopLockTaskMode(@Nullable Task task, boolean isSystemCaller, int callingUid) {
+    void stopLockTaskMode(@Nullable Task task, boolean stopAppPinning, int callingUid) {
         if (mLockTaskModeState == LOCK_TASK_MODE_NONE) {
             return;
         }
 
-        if (isSystemCaller) {
+        if (stopAppPinning) {
             if (mLockTaskModeState == LOCK_TASK_MODE_PINNED) {
                 clearLockedTasks("stopAppPinning");
             } else {
-                Slog.e(TAG_LOCKTASK, "Attempted to stop LockTask with isSystemCaller=true");
+                Slog.e(TAG_LOCKTASK, "Attempted to stop app pinning while fully locked");
                 showLockTaskToast();
             }
 
@@ -642,6 +639,10 @@
      * @param callingUid the caller that requested the launch of lock task mode.
      */
     void startLockTaskMode(@NonNull Task task, boolean isSystemCaller, int callingUid) {
+        if (task.mLockTaskAuth == LOCK_TASK_AUTH_DONT_LOCK) {
+            ProtoLog.w(WM_DEBUG_LOCKTASK, "startLockTaskMode: Can't lock due to auth");
+            return;
+        }
         if (!isSystemCaller) {
             task.mLockTaskUid = callingUid;
             if (task.mLockTaskAuth == LOCK_TASK_AUTH_PINNABLE) {
@@ -654,6 +655,11 @@
                     statusBarManager.showScreenPinningRequest(task.mTaskId);
                 }
                 return;
+            } else if (mLockTaskModeState == LOCK_TASK_MODE_PINNED) {
+                // startLockTask() called by app, and app is part of lock task allowlist.
+                // Deactivate the currently pinned task before doing so.
+                Slog.i(TAG, "Stop app pinning before entering full lock task mode");
+                stopLockTaskMode(/* task= */ null, /* stopAppPinning= */ true, callingUid);
             }
         }
 
diff --git a/services/core/java/com/android/server/wm/PhysicalDisplaySwitchTransitionLauncher.java b/services/core/java/com/android/server/wm/PhysicalDisplaySwitchTransitionLauncher.java
index 9c1d560..64749cf 100644
--- a/services/core/java/com/android/server/wm/PhysicalDisplaySwitchTransitionLauncher.java
+++ b/services/core/java/com/android/server/wm/PhysicalDisplaySwitchTransitionLauncher.java
@@ -22,17 +22,21 @@
 import static com.android.server.wm.ActivityTaskManagerService.POWER_MODE_REASON_CHANGE_DISPLAY;
 
 import android.animation.ValueAnimator;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.content.Context;
 import android.graphics.Rect;
 import android.hardware.devicestate.DeviceStateManager;
 import android.os.HandlerExecutor;
+import android.window.DisplayAreaInfo;
 import android.window.TransitionRequestInfo;
+import android.window.WindowContainerTransaction;
 
 public class PhysicalDisplaySwitchTransitionLauncher {
 
     private final DisplayContent mDisplayContent;
+    private final WindowManagerService mService;
     private final DeviceStateManager mDeviceStateManager;
-    private final Context mContext;
     private final TransitionController mTransitionController;
 
     private DeviceStateListener mDeviceStateListener;
@@ -46,13 +50,13 @@
     public PhysicalDisplaySwitchTransitionLauncher(DisplayContent displayContent,
             TransitionController transitionController) {
         mDisplayContent = displayContent;
-        mContext = mDisplayContent.mWmService.mContext;
+        mService = displayContent.mWmService;
         mTransitionController = transitionController;
 
-        mDeviceStateManager = mContext.getSystemService(DeviceStateManager.class);
+        mDeviceStateManager = mService.mContext.getSystemService(DeviceStateManager.class);
 
         if (mDeviceStateManager != null) {
-            mDeviceStateListener = new DeviceStateListener(mContext);
+            mDeviceStateListener = new DeviceStateListener(mService.mContext);
             mDeviceStateManager
                     .registerCallback(new HandlerExecutor(mDisplayContent.mWmService.mH),
                             mDeviceStateListener);
@@ -74,7 +78,7 @@
         if (!mDisplayContent.getLastHasContent()) return;
 
         boolean shouldRequestUnfoldTransition = !mIsFolded
-                && mContext.getResources().getBoolean(config_unfoldTransitionEnabled)
+                && mService.mContext.getResources().getBoolean(config_unfoldTransitionEnabled)
                 && ValueAnimator.areAnimatorsEnabled();
 
         if (!shouldRequestUnfoldTransition) {
@@ -97,18 +101,49 @@
 
         if (t != null) {
             mDisplayContent.mAtmService.startLaunchPowerMode(POWER_MODE_REASON_CHANGE_DISPLAY);
-            mTransitionController.collectForDisplayChange(mDisplayContent, t);
+            mTransitionController.collectForDisplayAreaChange(mDisplayContent, t);
             mTransition = t;
         }
     }
 
-    public void onDisplayUpdated() {
-        if (mTransition != null) {
-            mTransition.setAllReady();
-            mTransition = null;
+    /**
+     * Called when physical display is getting updated, this could happen e.g. on foldable
+     * devices when the physical underlying display is replaced.
+     *
+     * @param fromRotation rotation before the display change
+     * @param toRotation rotation after the display change
+     * @param newDisplayAreaInfo display area info after the display change
+     */
+    public void onDisplayUpdated(int fromRotation, int toRotation,
+            @NonNull DisplayAreaInfo newDisplayAreaInfo) {
+        if (mTransition == null) return;
+
+        final boolean started = mDisplayContent.mRemoteDisplayChangeController
+                .performRemoteDisplayChange(fromRotation, toRotation, newDisplayAreaInfo,
+                        this::continueDisplayUpdate);
+
+        if (!started) {
+            markTransitionAsReady();
         }
     }
 
+    private void continueDisplayUpdate(@Nullable WindowContainerTransaction transaction) {
+        if (mTransition == null) return;
+
+        if (transaction != null) {
+            mService.mAtmService.mWindowOrganizerController.applyTransaction(transaction);
+        }
+
+        markTransitionAsReady();
+    }
+
+    private void markTransitionAsReady() {
+        if (mTransition == null) return;
+
+        mTransition.setAllReady();
+        mTransition = null;
+    }
+
     class DeviceStateListener extends DeviceStateManager.FoldStateListener {
 
         DeviceStateListener(Context context) {
diff --git a/services/core/java/com/android/server/wm/RecentsAnimation.java b/services/core/java/com/android/server/wm/RecentsAnimation.java
index f840171..ffe3374 100644
--- a/services/core/java/com/android/server/wm/RecentsAnimation.java
+++ b/services/core/java/com/android/server/wm/RecentsAnimation.java
@@ -520,7 +520,7 @@
     }
 
     private boolean matchesTarget(Task task) {
-        return task.mUserId == mUserId
+        return task.getNonFinishingActivityCount() > 0 && task.mUserId == mUserId
                 && task.getBaseIntent().getComponent().equals(mTargetIntent.getComponent());
     }
 }
diff --git a/services/core/java/com/android/server/wm/RecentsAnimationController.java b/services/core/java/com/android/server/wm/RecentsAnimationController.java
index fe0ab2b..5b702ea 100644
--- a/services/core/java/com/android/server/wm/RecentsAnimationController.java
+++ b/services/core/java/com/android/server/wm/RecentsAnimationController.java
@@ -19,12 +19,10 @@
 import static android.app.ActivityTaskManager.INVALID_TASK_ID;
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
 import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
-import static android.hardware.input.InputManager.INJECT_INPUT_EVENT_MODE_ASYNC;
 import static android.view.RemoteAnimationTarget.MODE_CLOSING;
 import static android.view.RemoteAnimationTarget.MODE_OPENING;
 import static android.view.WindowManager.INPUT_CONSUMER_RECENTS_ANIMATION;
 import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
-import static android.window.OnBackInvokedDispatcher.PRIORITY_DEFAULT;
 
 import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_RECENTS_ANIMATIONS;
 import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
@@ -41,7 +39,6 @@
 import android.graphics.Point;
 import android.graphics.Rect;
 import android.hardware.HardwareBuffer;
-import android.hardware.input.InputManager;
 import android.os.Binder;
 import android.os.IBinder.DeathRecipient;
 import android.os.RemoteException;
@@ -54,26 +51,17 @@
 import android.util.proto.ProtoOutputStream;
 import android.view.IRecentsAnimationController;
 import android.view.IRecentsAnimationRunner;
-import android.view.InputDevice;
 import android.view.InputWindowHandle;
-import android.view.KeyCharacterMap;
-import android.view.KeyEvent;
 import android.view.RemoteAnimationTarget;
 import android.view.SurfaceControl;
 import android.view.SurfaceControl.Transaction;
 import android.view.SurfaceSession;
 import android.view.WindowInsets.Type;
-import android.window.BackEvent;
-import android.window.IOnBackInvokedCallback;
-import android.window.OnBackInvokedCallbackInfo;
 import android.window.PictureInPictureSurfaceTransaction;
 import android.window.TaskSnapshot;
 
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.inputmethod.SoftInputShowHideReason;
-import com.android.internal.os.BackgroundThread;
 import com.android.internal.protolog.common.ProtoLog;
-import com.android.internal.util.LatencyTracker;
 import com.android.internal.util.function.pooled.PooledConsumer;
 import com.android.internal.util.function.pooled.PooledLambda;
 import com.android.server.LocalServices;
@@ -99,11 +87,6 @@
 public class RecentsAnimationController implements DeathRecipient {
     private static final String TAG = RecentsAnimationController.class.getSimpleName();
     private static final long FAILSAFE_DELAY = 1000;
-    /**
-     * If the recents animation is canceled before the delay since the window drawn, do not log the
-     * action because the duration is too small that may be just a mistouch.
-     */
-    private static final long LATENCY_TRACKER_LOG_DELAY_MS = 300;
 
     // Constant for a yet-to-be-calculated {@link RemoteAnimationTarget#Mode} state
     private static final int MODE_UNKNOWN = -1;
@@ -144,7 +127,7 @@
     private boolean mPendingStart = true;
 
     // Set when the animation has been canceled
-    private volatile boolean mCanceled;
+    private boolean mCanceled;
 
     // Whether or not the input consumer is enabled. The input consumer must be both registered and
     // enabled for it to start intercepting touch events.
@@ -203,46 +186,6 @@
         }
     };
 
-    /**
-     * Back invoked callback for legacy recents transition with the new back dispatch system.
-     */
-    final IOnBackInvokedCallback mBackCallback = new IOnBackInvokedCallback.Stub() {
-        @Override
-        public void onBackStarted() {
-            // Do nothing
-        }
-
-        @Override
-        public void onBackProgressed(BackEvent backEvent) {
-            // Do nothing
-        }
-
-        @Override
-        public void onBackCancelled() {
-            // Do nothing
-        }
-
-        @Override
-        public void onBackInvoked() {
-            sendBackEvent(KeyEvent.ACTION_DOWN);
-            sendBackEvent(KeyEvent.ACTION_UP);
-        }
-
-        private void sendBackEvent(int action) {
-            if (mTargetActivityRecord == null) {
-                return;
-            }
-            long when = SystemClock.uptimeMillis();
-            final KeyEvent ev = new KeyEvent(when, when, action,
-                    KeyEvent.KEYCODE_BACK, 0 /* repeat */, 0 /* metaState */,
-                    KeyCharacterMap.VIRTUAL_KEYBOARD, 0 /* scancode */,
-                    KeyEvent.FLAG_FROM_SYSTEM | KeyEvent.FLAG_VIRTUAL_HARD_KEY,
-                    InputDevice.SOURCE_KEYBOARD);
-            ev.setDisplayId(mTargetActivityRecord.getDisplayId());
-            InputManager.getInstance().injectInputEvent(ev, INJECT_INPUT_EVENT_MODE_ASYNC);
-        }
-    };
-
     public interface RecentsAnimationCallbacks {
         /** Callback when recents animation is finished. */
         void onAnimationFinished(@ReorderMode int reorderMode, boolean sendUserLeaveHint);
@@ -333,26 +276,6 @@
                         }
                     }
                     InputMethodManagerInternal.get().maybeFinishStylusHandwriting();
-                    if (!behindSystemBars) {
-                        // Hiding IME if IME window is not attached to app.
-                        // Since some windowing mode is not proper to snapshot Task with IME window
-                        // while the app transitioning to the next task (e.g. split-screen mode)
-                        if (!mDisplayContent.isImeAttachedToApp()) {
-                            final InputMethodManagerInternal inputMethodManagerInternal =
-                                    LocalServices.getService(InputMethodManagerInternal.class);
-                            if (inputMethodManagerInternal != null) {
-                                inputMethodManagerInternal.hideCurrentInputMethod(
-                                        SoftInputShowHideReason.HIDE_RECENTS_ANIMATION);
-                            }
-                        } else {
-                            // Disable IME icon explicitly when IME attached to the app in case
-                            // IME icon might flickering while swiping to the next app task still
-                            // in animating before the next app window focused, or IME icon
-                            // persists on the bottom when swiping the task to recents.
-                            InputMethodManagerInternal.get().updateImeWindowStatus(
-                                    true /* disableImeIcon */);
-                        }
-                    }
                     mService.mWindowPlacerLocked.requestTraversal();
                 }
             } finally {
@@ -380,10 +303,6 @@
             }
         }
 
-        // TODO(b/166736352): Remove this method without the need to expose to launcher.
-        @Override
-        public void hideCurrentInputMethod() { }
-
         @Override
         public void setDeferCancelUntilNextTransition(boolean defer, boolean screenshot) {
             synchronized (mService.mGlobalLock) {
@@ -785,15 +704,6 @@
         }, false /* traverseTopToBottom */);
     }
 
-    void logRecentsAnimationStartTime(int durationMs) {
-        BackgroundThread.getHandler().postDelayed(() -> {
-            if (!mCanceled) {
-                mService.mLatencyTracker.logAction(LatencyTracker.ACTION_START_RECENTS_ANIMATION,
-                        durationMs);
-            }
-        }, LATENCY_TRACKER_LOG_DELAY_MS);
-    }
-
     private boolean removeTaskInternal(int taskId) {
         boolean result = false;
         for (int i = mPendingAnimations.size() - 1; i >= 0; i--) {
@@ -1153,10 +1063,6 @@
         return mTargetActivityRecord.findMainWindow();
     }
 
-    OnBackInvokedCallbackInfo getBackInvokedInfo() {
-        return new OnBackInvokedCallbackInfo(mBackCallback, PRIORITY_DEFAULT);
-    }
-
     DisplayArea getTargetAppDisplayArea() {
         if (mTargetActivityRecord == null) {
             return null;
@@ -1277,6 +1183,12 @@
                     mLocalBounds, mBounds, mTask.getWindowConfiguration(),
                     mIsRecentTaskInvisible, null, null, mTask.getTaskInfo(),
                     topApp.checkEnterPictureInPictureAppOpsState());
+
+            final ActivityRecord topActivity = mTask.getTopNonFinishingActivity();
+            if (topActivity != null && topActivity.mStartingData != null
+                    && topActivity.mStartingData.hasImeSurface()) {
+                mTarget.setWillShowImeOnTarget(true);
+            }
             return mTarget;
         }
 
@@ -1335,16 +1247,16 @@
                     mDisplayContent.mPinnedTaskController.setEnterPipTransaction(
                             mFinishTransaction);
                 }
+                // In the case where we are transferring the transform to the task in preparation
+                // for entering PIP, we disable the task being able to affect sysui flags otherwise
+                // it may cause a flash
+                if (mTask.getActivityType() != mTargetActivityType
+                        && mFinishTransaction.getShouldDisableCanAffectSystemUiFlags()) {
+                    mTask.setCanAffectSystemUiFlags(false);
+                }
                 mFinishTransaction = null;
                 mFinishOverlay = null;
                 pendingTransaction.apply();
-
-                // In the case where we are transferring the transform to the task in preparation 
-                // for entering PIP, we disable the task being able to affect sysui flags otherwise
-                // it may cause a flash
-                if (mTask.getActivityType() != mTargetActivityType) {
-                    mTask.setCanAffectSystemUiFlags(false);
-                }
             } else if (!mTask.isAttached()) {
                 // Apply the task's pending transaction in case it is detached and its transaction
                 // is not reachable.
diff --git a/services/core/java/com/android/server/wm/RemoteAnimationController.java b/services/core/java/com/android/server/wm/RemoteAnimationController.java
index 871b4d8..ac1a2b1 100644
--- a/services/core/java/com/android/server/wm/RemoteAnimationController.java
+++ b/services/core/java/com/android/server/wm/RemoteAnimationController.java
@@ -22,6 +22,7 @@
 import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
 import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
 
+import android.annotation.ColorInt;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.graphics.Point;
@@ -57,7 +58,7 @@
  */
 class RemoteAnimationController implements DeathRecipient {
     private static final String TAG = TAG_WITH_CLASS_NAME
-                    ? "RemoteAnimationController" : TAG_WM;
+            ? "RemoteAnimationController" : TAG_WM;
     private static final long TIMEOUT_MS = 10000;
 
     private final WindowManagerService mService;
@@ -72,35 +73,40 @@
     private final Runnable mTimeoutRunnable = () -> cancelAnimation("timeoutRunnable");
 
     private FinishedCallback mFinishedCallback;
+    private final boolean mIsActivityEmbedding;
     private boolean mCanceled;
     private boolean mLinkedToDeathOfRunner;
     @Nullable
     private Runnable mOnRemoteAnimationReady;
 
     RemoteAnimationController(WindowManagerService service, DisplayContent displayContent,
-            RemoteAnimationAdapter remoteAnimationAdapter, Handler handler) {
+            RemoteAnimationAdapter remoteAnimationAdapter, Handler handler,
+            boolean isActivityEmbedding) {
         mService = service;
         mDisplayContent = displayContent;
         mRemoteAnimationAdapter = remoteAnimationAdapter;
         mHandler = handler;
+        mIsActivityEmbedding = isActivityEmbedding;
     }
 
     /**
      * Creates an animation record for each individual {@link WindowContainer}.
      *
      * @param windowContainer The windows to animate.
-     * @param position The position app bounds relative to its parent.
-     * @param localBounds The bounds of the app relative to its parent.
-     * @param endBounds The end bounds after the transition, in screen coordinates.
-     * @param startBounds The start bounds before the transition, in screen coordinates.
+     * @param position        The position app bounds relative to its parent.
+     * @param localBounds     The bounds of the app relative to its parent.
+     * @param endBounds       The end bounds after the transition, in screen coordinates.
+     * @param startBounds     The start bounds before the transition, in screen coordinates.
+     * @param showBackdrop    To show background behind a window during animation.
      * @return The record representing animation(s) to run on the app.
      */
     RemoteAnimationRecord createRemoteAnimationRecord(WindowContainer windowContainer,
-            Point position, Rect localBounds, Rect endBounds, Rect startBounds) {
+            Point position, Rect localBounds, Rect endBounds, Rect startBounds,
+            boolean showBackdrop) {
         ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS, "createAnimationAdapter(): container=%s",
                 windowContainer);
         final RemoteAnimationRecord adapters = new RemoteAnimationRecord(windowContainer, position,
-                localBounds, endBounds, startBounds);
+                localBounds, endBounds, startBounds, showBackdrop);
         mPendingAnimations.add(adapters);
         return adapters;
     }
@@ -111,6 +117,15 @@
     }
 
     /**
+     * We use isFromActivityEmbedding() in the server process to tell if we're running an
+     * Activity Embedding type remote animation, where animations are driven by the client.
+     * This is currently supporting features like showBackdrop where we need to load App XML.
+     */
+    public boolean isFromActivityEmbedding() {
+        return mIsActivityEmbedding;
+    }
+
+    /**
      * Called when the transition is ready to be started, and all leashes have been set up.
      */
     void goodToGo(@WindowManager.TransitionOldType int transit) {
@@ -418,30 +433,37 @@
         RemoteAnimationTarget mTarget;
         final WindowContainer mWindowContainer;
         final Rect mStartBounds;
+        final boolean mShowBackdrop;
+        @ColorInt int mBackdropColor = 0;
         private @RemoteAnimationTarget.Mode int mMode = RemoteAnimationTarget.MODE_CHANGING;
 
         RemoteAnimationRecord(WindowContainer windowContainer, Point endPos, Rect localBounds,
-                Rect endBounds, Rect startBounds) {
+                Rect endBounds, Rect startBounds, boolean showBackdrop) {
             mWindowContainer = windowContainer;
+            mShowBackdrop = showBackdrop;
             if (startBounds != null) {
                 mStartBounds = new Rect(startBounds);
                 mAdapter = new RemoteAnimationAdapterWrapper(this, endPos, localBounds, endBounds,
-                        mStartBounds);
+                        mStartBounds, mShowBackdrop);
                 if (mRemoteAnimationAdapter.getChangeNeedsSnapshot()) {
                     final Rect thumbnailLocalBounds = new Rect(startBounds);
                     thumbnailLocalBounds.offsetTo(0, 0);
                     // Snapshot is located at (0,0) of the animation leash. It doesn't have size
                     // change, so the startBounds is its end bounds, and no start bounds for it.
                     mThumbnailAdapter = new RemoteAnimationAdapterWrapper(this, new Point(0, 0),
-                            thumbnailLocalBounds, startBounds, new Rect());
+                            thumbnailLocalBounds, startBounds, new Rect(), mShowBackdrop);
                 }
             } else {
                 mAdapter = new RemoteAnimationAdapterWrapper(this, endPos, localBounds, endBounds,
-                        new Rect());
+                        new Rect(), mShowBackdrop);
                 mStartBounds = null;
             }
         }
 
+        void setBackDropColor(@ColorInt int backdropColor) {
+            mBackdropColor = backdropColor;
+        }
+
         RemoteAnimationTarget createRemoteAnimationTarget() {
             if (mAdapter == null
                     || mAdapter.mCapturedFinishCallback == null
@@ -483,14 +505,27 @@
         final Rect mLocalBounds;
         final Rect mEndBounds = new Rect();
         final Rect mStartBounds = new Rect();
+        final boolean mShowBackdrop;
 
         RemoteAnimationAdapterWrapper(RemoteAnimationRecord record, Point position,
-                Rect localBounds, Rect endBounds, Rect startBounds) {
+                Rect localBounds, Rect endBounds, Rect startBounds, boolean showBackdrop) {
             mRecord = record;
             mPosition.set(position.x, position.y);
             mLocalBounds = localBounds;
             mEndBounds.set(endBounds);
             mStartBounds.set(startBounds);
+            mShowBackdrop = showBackdrop;
+        }
+
+        @Override
+        @ColorInt
+        public int getBackgroundColor() {
+            return mRecord.mBackdropColor;
+        }
+
+        @Override
+        public boolean getShowBackground() {
+            return mShowBackdrop;
         }
 
         @Override
diff --git a/services/core/java/com/android/server/wm/RemoteDisplayChangeController.java b/services/core/java/com/android/server/wm/RemoteDisplayChangeController.java
new file mode 100644
index 0000000..43baebc
--- /dev/null
+++ b/services/core/java/com/android/server/wm/RemoteDisplayChangeController.java
@@ -0,0 +1,171 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_CONFIGURATION;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.os.RemoteException;
+import android.util.Slog;
+import android.view.IDisplayChangeWindowCallback;
+import android.window.DisplayAreaInfo;
+import android.window.WindowContainerTransaction;
+
+import com.android.internal.protolog.common.ProtoLog;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A helper class, a wrapper around {@link android.view.IDisplayChangeWindowController} to perform
+ * a synchronous display change in other parts (e.g. in the Shell) and continue the process
+ * in the system server. It handles timeouts and multiple requests.
+ * We have an instance of this controller for each display.
+ */
+public class RemoteDisplayChangeController {
+
+    private static final String TAG = "RemoteDisplayChangeController";
+
+    private static final int REMOTE_DISPLAY_CHANGE_TIMEOUT_MS = 800;
+
+    private final WindowManagerService mService;
+    private final int mDisplayId;
+
+    private final Runnable mTimeoutRunnable = this::onContinueTimedOut;
+
+    // all remote changes that haven't finished yet.
+    private final List<ContinueRemoteDisplayChangeCallback> mCallbacks = new ArrayList<>();
+
+    public RemoteDisplayChangeController(WindowManagerService service, int displayId) {
+        mService = service;
+        mDisplayId = displayId;
+    }
+
+    /**
+     * A Remote change is when we are waiting for some registered (remote)
+     * {@link IDisplayChangeWindowController} to calculate and return some hierarchy operations
+     *  to perform in sync with the display change.
+     */
+    public boolean isWaitingForRemoteDisplayChange() {
+        return !mCallbacks.isEmpty();
+    }
+
+    /**
+     * Starts remote display change
+     * @param fromRotation rotation before the change
+     * @param toRotation rotation after the change
+     * @param newDisplayAreaInfo display area info after change
+     * @param callback that will be called after completing remote display change
+     * @return true if the change successfully started, false otherwise
+     */
+    public boolean performRemoteDisplayChange(
+            int fromRotation, int toRotation,
+            @Nullable DisplayAreaInfo newDisplayAreaInfo,
+            ContinueRemoteDisplayChangeCallback callback) {
+        if (mService.mDisplayChangeController == null) {
+            return false;
+        }
+        mCallbacks.add(callback);
+
+        if (newDisplayAreaInfo != null) {
+            ProtoLog.v(WM_DEBUG_CONFIGURATION,
+                    "Starting remote display change: "
+                            + "from [rot = %d], "
+                            + "to [%dx%d, rot = %d]",
+                    fromRotation,
+                    newDisplayAreaInfo.configuration.windowConfiguration
+                            .getMaxBounds().width(),
+                    newDisplayAreaInfo.configuration.windowConfiguration
+                            .getMaxBounds().height(),
+                    toRotation);
+        }
+
+        final IDisplayChangeWindowCallback remoteCallback = createCallback(callback);
+        try {
+            mService.mH.removeCallbacks(mTimeoutRunnable);
+            mService.mH.postDelayed(mTimeoutRunnable, REMOTE_DISPLAY_CHANGE_TIMEOUT_MS);
+            mService.mDisplayChangeController.onDisplayChange(mDisplayId, fromRotation, toRotation,
+                    newDisplayAreaInfo, remoteCallback);
+            return true;
+        } catch (RemoteException e) {
+            Slog.e(TAG, "Exception while dispatching remote display-change", e);
+            mCallbacks.remove(callback);
+            return false;
+        }
+    }
+
+    private void onContinueTimedOut() {
+        Slog.e(TAG, "RemoteDisplayChange timed-out, UI might get messed-up after this.");
+        // timed-out, so run all continue callbacks and clear the list
+        synchronized (mService.mGlobalLock) {
+            for (int i = 0; i < mCallbacks.size(); ++i) {
+                mCallbacks.get(i).onContinueRemoteDisplayChange(null /* transaction */);
+            }
+            mCallbacks.clear();
+        }
+    }
+
+    private void continueDisplayChange(@NonNull ContinueRemoteDisplayChangeCallback callback,
+            @Nullable WindowContainerTransaction transaction) {
+        synchronized (mService.mGlobalLock) {
+            int idx = mCallbacks.indexOf(callback);
+            if (idx < 0) {
+                // already called this callback or a more-recent one (eg. via timeout)
+                return;
+            }
+            for (int i = 0; i < idx; ++i) {
+                // Expect remote callbacks in order. If they don't come in order, then force
+                // ordering by continuing everything up until this one with empty transactions.
+                mCallbacks.get(i).onContinueRemoteDisplayChange(null /* transaction */);
+            }
+            mCallbacks.subList(0, idx + 1).clear();
+            if (mCallbacks.isEmpty()) {
+                mService.mH.removeCallbacks(mTimeoutRunnable);
+            }
+            callback.onContinueRemoteDisplayChange(transaction);
+        }
+    }
+
+    private IDisplayChangeWindowCallback createCallback(
+            @NonNull ContinueRemoteDisplayChangeCallback callback) {
+        return new IDisplayChangeWindowCallback.Stub() {
+                    @Override
+                    public void continueDisplayChange(WindowContainerTransaction t) {
+                        synchronized (mService.mGlobalLock) {
+                            if (!mCallbacks.contains(callback)) {
+                                // already ran this callback or a more-recent one.
+                                return;
+                            }
+                            mService.mH.post(() -> RemoteDisplayChangeController.this
+                                    .continueDisplayChange(callback, t));
+                        }
+                    }
+                };
+    }
+
+    /**
+     * Callback interface to handle continuation of the remote display change
+     */
+    public interface ContinueRemoteDisplayChangeCallback {
+        /**
+         * This method is called when the remote display change has been applied
+         * @param transaction window changes collected by the remote display change
+         */
+        void onContinueRemoteDisplayChange(@Nullable WindowContainerTransaction transaction);
+    }
+}
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index ef18b50..aab9d5b 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -37,6 +37,7 @@
 import static android.view.WindowManager.TRANSIT_NONE;
 import static android.view.WindowManager.TRANSIT_PIP;
 import static android.view.WindowManager.TRANSIT_TO_BACK;
+import static android.view.WindowManager.TRANSIT_WAKE;
 
 import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_FOCUS_LIGHT;
 import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_KEEP_SCREEN_ON;
@@ -211,10 +212,6 @@
     // Map from the PID to the top most app which has a focused window of the process.
     final ArrayMap<Integer, ActivityRecord> mTopFocusedAppByProcess = new ArrayMap<>();
 
-    // Only a separate transaction until we separate the apply surface changes
-    // transaction from the global transaction.
-    private final SurfaceControl.Transaction mDisplayTransaction;
-
     // The tag for the token to put root tasks on the displays to sleep.
     private static final String DISPLAY_OFF_SLEEP_TOKEN_TAG = "Display-off";
 
@@ -459,7 +456,6 @@
 
     RootWindowContainer(WindowManagerService service) {
         super(service);
-        mDisplayTransaction = service.mTransactionFactory.get();
         mHandler = new MyHandler(service.mH.getLooper());
         mService = service.mAtmService;
         mTaskSupervisor = mService.mTaskSupervisor;
@@ -778,6 +774,10 @@
         return leakedSurface || killedApps;
     }
 
+    /**
+     * This method should only be called from {@link WindowSurfacePlacer}. Otherwise the recursion
+     * check and {@link WindowSurfacePlacer#isInLayout()} won't take effect.
+     */
     void performSurfacePlacement() {
         Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "performSurfacePlacement");
         try {
@@ -1000,19 +1000,20 @@
         mObscuringWindow = null;
 
         // TODO(multi-display): Support these features on secondary screens.
-        final DisplayContent defaultDc = mWmService.getDefaultDisplayContentLocked();
+        final DisplayContent defaultDc = mDefaultDisplay;
         final DisplayInfo defaultInfo = defaultDc.getDisplayInfo();
         final int defaultDw = defaultInfo.logicalWidth;
         final int defaultDh = defaultInfo.logicalHeight;
+        final SurfaceControl.Transaction t = defaultDc.getSyncTransaction();
         if (mWmService.mWatermark != null) {
-            mWmService.mWatermark.positionSurface(defaultDw, defaultDh, mDisplayTransaction);
+            mWmService.mWatermark.positionSurface(defaultDw, defaultDh, t);
         }
         if (mWmService.mStrictModeFlash != null) {
-            mWmService.mStrictModeFlash.positionSurface(defaultDw, defaultDh, mDisplayTransaction);
+            mWmService.mStrictModeFlash.positionSurface(defaultDw, defaultDh, t);
         }
         if (mWmService.mEmulatorDisplayOverlay != null) {
             mWmService.mEmulatorDisplayOverlay.positionSurface(defaultDw, defaultDh,
-                    mWmService.getDefaultDisplayRotation(), mDisplayTransaction);
+                    defaultDc.getRotation(), t);
         }
 
         final int count = mChildren.size();
@@ -1023,8 +1024,10 @@
 
         // Give the display manager a chance to adjust properties like display rotation if it needs
         // to.
-        mWmService.mDisplayManagerInternal.performTraversal(mDisplayTransaction);
-        SurfaceControl.mergeToGlobalTransaction(mDisplayTransaction);
+        mWmService.mDisplayManagerInternal.performTraversal(t);
+        if (t != defaultDc.mSyncTransaction) {
+            SurfaceControl.mergeToGlobalTransaction(t);
+        }
     }
 
     /**
@@ -1238,11 +1241,6 @@
     }
 
     @Override
-    void scheduleAnimation() {
-        mWmService.scheduleAnimationLocked();
-    }
-
-    @Override
     protected void removeChild(DisplayContent dc) {
         super.removeChild(dc);
         if (mTopFocusedDisplayId == dc.getDisplayId()) {
@@ -1977,23 +1975,28 @@
 
     void moveActivityToPinnedRootTask(@NonNull ActivityRecord r,
             @Nullable ActivityRecord launchIntoPipHostActivity, String reason) {
-        mService.deferWindowLayout();
+        moveActivityToPinnedRootTask(r, launchIntoPipHostActivity, reason, null /* transition */);
+    }
 
+    void moveActivityToPinnedRootTask(@NonNull ActivityRecord r,
+            @Nullable ActivityRecord launchIntoPipHostActivity, String reason,
+            @Nullable Transition transition) {
         final TaskDisplayArea taskDisplayArea = r.getDisplayArea();
+        final Task task = r.getTask();
+        final Task rootTask;
 
+        Transition newTransition = transition;
+        // Create a transition now (if not provided) to collect the current pinned Task dismiss.
+        // Only do the create here as the Task (trigger) to enter PIP is not ready yet.
+        final TransitionController transitionController = task.mTransitionController;
+        if (newTransition == null && !transitionController.isCollecting()
+                && transitionController.getTransitionPlayer() != null) {
+            newTransition = transitionController.createTransition(TRANSIT_PIP);
+        }
+
+        transitionController.deferTransitionReady();
+        mService.deferWindowLayout();
         try {
-            final Task task = r.getTask();
-
-            // Create a transition now to collect the current pinned Task dismiss. Only do the
-            // create here as the Task (trigger) to enter PIP is not ready yet.
-            final TransitionController transitionController = task.mTransitionController;
-            Transition newTransition = null;
-            if (transitionController.isCollecting()) {
-                transitionController.setReady(task, false /* ready */);
-            } else if (transitionController.getTransitionPlayer() != null) {
-                newTransition = transitionController.createTransition(TRANSIT_PIP);
-            }
-
             // This will change the root pinned task's windowing mode to its original mode, ensuring
             // we only have one root task that is in pinned mode.
             final Task rootPinnedTask = taskDisplayArea.getRootPinnedTask();
@@ -2011,7 +2014,6 @@
 
             final TaskFragment organizedTf = r.getOrganizedTaskFragment();
             final boolean singleActivity = task.getNonFinishingActivityCount() == 1;
-            final Task rootTask;
             if (singleActivity) {
                 rootTask = task;
 
@@ -2044,6 +2046,9 @@
                             task.mLastRecentsAnimationTransaction,
                             task.mLastRecentsAnimationOverlay);
                     task.clearLastRecentsAnimationTransaction(false /* forceRemoveOverlay */);
+                } else {
+                    // Reset the original task surface
+                    task.resetSurfaceControlTransforms();
                 }
 
                 // The organized TaskFragment is becoming empty because this activity is reparented
@@ -2077,6 +2082,9 @@
                     oldTopActivity.mRequestForceTransition = true;
                 }
             }
+
+            transitionController.collect(rootTask);
+
             // The intermediate windowing mode to be set on the ActivityRecord later.
             // This needs to happen before the re-parenting, otherwise we will always set the
             // ActivityRecord to be fullscreen.
@@ -2087,13 +2095,6 @@
                 rootTask.reparent(taskDisplayArea, true /* onTop */);
             }
 
-            // The new PIP Task is ready, start the transition before updating the windowing mode.
-            if (newTransition != null) {
-                transitionController.requestStartTransition(newTransition, rootTask,
-                        null /* remoteTransition */, null /* displayChange */);
-            }
-            transitionController.collect(rootTask);
-
             // Defer the windowing mode change until after the transition to prevent the activity
             // from doing work and changing the activity visuals while animating
             // TODO(task-org): Figure-out more structured way to do this long term.
@@ -2119,7 +2120,7 @@
                 // entering content-pip animation.
                 mWindowManager.mTaskSnapshotController.recordTaskSnapshot(
                         task, false /* allowSnapshotHome */);
-                rootTask.setBounds(r.getOptions().getLaunchBounds());
+                rootTask.setBounds(r.pictureInPictureArgs.getSourceRectHint());
             }
             rootTask.setDeferTaskAppear(false);
 
@@ -2136,9 +2137,23 @@
             }
         } finally {
             mService.continueWindowLayout();
+            try {
+                ensureActivitiesVisible(null, 0, false /* preserveWindows */);
+            } finally {
+                transitionController.continueTransitionReady();
+            }
         }
 
-        ensureActivitiesVisible(null, 0, false /* preserveWindows */);
+        if (newTransition != null) {
+            // Request at end since we want task-organizer events from ensureActivitiesVisible
+            // to be recognized.
+            transitionController.requestStartTransition(newTransition, rootTask,
+                    null /* remoteTransition */, null /* displayChange */);
+            // A new transition was created just for this operations. Since the operation is
+            // complete, mark it as ready.
+            newTransition.setReady(rootTask, true /* ready */);
+        }
+
         resumeFocusedTasksTopActivities();
 
         notifyActivityPipModeChanged(r.getTask(), r);
@@ -2321,6 +2336,14 @@
                 continue;
             }
 
+            // Prepare transition before resume top activity, so it can be collected.
+            if (!displayShouldSleep && display.isDefaultDisplay
+                    && !display.getDisplayPolicy().isAwake()
+                    && display.mTransitionController.isShellTransitionsEnabled()
+                    && !display.mTransitionController.isCollecting()) {
+                display.mTransitionController.requestTransitionIfNeeded(TRANSIT_WAKE,
+                        0 /* flags */, null /* trigger */, display);
+            }
             // Set the sleeping state of the root tasks on the display.
             display.forAllRootTasks(rootTask -> {
                 if (displayShouldSleep) {
@@ -3322,9 +3345,16 @@
 
     @VisibleForTesting
     void getRunningTasks(int maxNum, List<ActivityManager.RunningTaskInfo> list,
-            int flags, int callingUid, ArraySet<Integer> profileIds) {
-        mTaskSupervisor.getRunningTasks().getTasks(maxNum, list, flags, this, callingUid,
-                profileIds);
+            int flags, int callingUid, ArraySet<Integer> profileIds, int displayId) {
+        WindowContainer root = this;
+        if (displayId != INVALID_DISPLAY) {
+            root = getDisplayContent(displayId);
+            if (root == null) {
+                return;
+            }
+        }
+        mTaskSupervisor.getRunningTasks().getTasks(maxNum, list, flags, mService.getRecentTasks(),
+                root, callingUid, profileIds);
     }
 
     void startPowerModeLaunchIfNeeded(boolean forceSend, ActivityRecord targetActivity) {
diff --git a/services/core/java/com/android/server/wm/RunningTasks.java b/services/core/java/com/android/server/wm/RunningTasks.java
index 1ec191e..120fec0 100644
--- a/services/core/java/com/android/server/wm/RunningTasks.java
+++ b/services/core/java/com/android/server/wm/RunningTasks.java
@@ -60,8 +60,8 @@
     private RecentTasks mRecentTasks;
     private boolean mKeepIntentExtra;
 
-    void getTasks(int maxNum, List<RunningTaskInfo> list, int flags,
-            RootWindowContainer root, int callingUid, ArraySet<Integer> profileIds) {
+    void getTasks(int maxNum, List<RunningTaskInfo> list, int flags, RecentTasks recentTasks,
+            WindowContainer root, int callingUid, ArraySet<Integer> profileIds) {
         // Return early if there are no tasks to fetch
         if (maxNum <= 0) {
             return;
@@ -76,7 +76,7 @@
         mAllowed = (flags & FLAG_ALLOWED) == FLAG_ALLOWED;
         mFilterOnlyVisibleRecents =
                 (flags & FLAG_FILTER_ONLY_VISIBLE_RECENTS) == FLAG_FILTER_ONLY_VISIBLE_RECENTS;
-        mRecentTasks = root.mService.getRecentTasks();
+        mRecentTasks = recentTasks;
         mKeepIntentExtra = (flags & FLAG_KEEP_INTENT_EXTRA) == FLAG_KEEP_INTENT_EXTRA;
 
         final PooledConsumer c = PooledLambda.obtainConsumer(RunningTasks::processTask, this,
diff --git a/services/core/java/com/android/server/wm/SafeActivityOptions.java b/services/core/java/com/android/server/wm/SafeActivityOptions.java
index fd05f19..2879e33 100644
--- a/services/core/java/com/android/server/wm/SafeActivityOptions.java
+++ b/services/core/java/com/android/server/wm/SafeActivityOptions.java
@@ -18,6 +18,7 @@
 
 import static android.Manifest.permission.CONTROL_KEYGUARD;
 import static android.Manifest.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS;
+import static android.Manifest.permission.MANAGE_ACTIVITY_TASKS;
 import static android.Manifest.permission.START_TASKS_FROM_RECENTS;
 import static android.Manifest.permission.STATUS_BAR_SERVICE;
 import static android.app.ActivityTaskManager.INVALID_TASK_ID;
@@ -173,7 +174,7 @@
         if (adapter == null) {
             return;
         }
-        if (callingPid == Process.myPid()) {
+        if (callingPid == WindowManagerService.MY_PID) {
             Slog.wtf(TAG, "Safe activity options constructed after clearing calling id");
             return;
         }
@@ -247,6 +248,14 @@
                 throw new SecurityException(msg);
             }
         }
+        if (options.getTransientLaunch() && !supervisor.mRecentTasks.isCallerRecents(callingUid)
+                && ActivityTaskManagerService.checkPermission(
+                        MANAGE_ACTIVITY_TASKS, callingPid, callingUid) == PERMISSION_DENIED) {
+            final String msg = "Permission Denial: starting transient launch from " + callerApp
+                    + ", pid=" + callingPid + ", uid=" + callingUid;
+            Slog.w(TAG, msg);
+            throw new SecurityException(msg);
+        }
         // Check if the caller is allowed to launch on the specified display area.
         final WindowContainerToken daToken = options.getLaunchTaskDisplayArea();
         final TaskDisplayArea taskDisplayArea = daToken != null
diff --git a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java
index f31a3cc..fd8b614 100644
--- a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java
+++ b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java
@@ -642,7 +642,7 @@
         }
 
         private SurfaceAnimator startDisplayRotation() {
-            return startAnimation(initializeBuilder()
+            SurfaceAnimator animator = startAnimation(initializeBuilder()
                             .setAnimationLeashParent(mDisplayContent.getSurfaceControl())
                             .setSurfaceControl(mDisplayContent.getWindowingLayer())
                             .setParentSurfaceControl(mDisplayContent.getSurfaceControl())
@@ -651,6 +651,13 @@
                             .build(),
                     createWindowAnimationSpec(mRotateEnterAnimation),
                     this::onAnimationEnd);
+
+            // Crop the animation leash to avoid extended wallpaper from showing over
+            // mBackColorSurface
+            Rect displayBounds = mDisplayContent.getBounds();
+            mDisplayContent.getPendingTransaction()
+                    .setWindowCrop(animator.mLeash, displayBounds.width(), displayBounds.height());
+            return animator;
         }
 
         private SurfaceAnimator startScreenshotAlphaAnimation() {
diff --git a/services/core/java/com/android/server/wm/Session.java b/services/core/java/com/android/server/wm/Session.java
index 30b5083..0128c18 100644
--- a/services/core/java/com/android/server/wm/Session.java
+++ b/services/core/java/com/android/server/wm/Session.java
@@ -19,6 +19,7 @@
 import static android.Manifest.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
 import static android.Manifest.permission.HIDE_OVERLAY_WINDOWS;
 import static android.Manifest.permission.INTERNAL_SYSTEM_WINDOW;
+import static android.Manifest.permission.SET_UNRESTRICTED_GESTURE_EXCLUSION;
 import static android.Manifest.permission.SET_UNRESTRICTED_KEEP_CLEAR_AREAS;
 import static android.Manifest.permission.START_TASKS_FROM_RECENTS;
 import static android.Manifest.permission.SYSTEM_APPLICATION_OVERLAY;
@@ -109,14 +110,13 @@
 
     final boolean mCanCreateSystemApplicationOverlay;
     final boolean mCanHideNonSystemOverlayWindows;
+    final boolean mCanSetUnrestrictedGestureExclusion;
     private AlertWindowNotification mAlertWindowNotification;
     private boolean mShowingAlertWindowNotificationAllowed;
     private boolean mClientDead = false;
     private float mLastReportedAnimatorScale;
     private String mPackageName;
     private String mRelayoutTag;
-    private String mUpdateViewVisibilityTag;
-    private String mUpdateWindowLayoutTag;
     private final InsetsVisibilities mDummyRequestedVisibilities = new InsetsVisibilities();
     private final InsetsSourceControl[] mDummyControls =  new InsetsSourceControl[0];
     final boolean mSetsUnrestrictedKeepClearAreas;
@@ -141,6 +141,9 @@
         mSetsUnrestrictedKeepClearAreas =
                 service.mContext.checkCallingOrSelfPermission(SET_UNRESTRICTED_KEEP_CLEAR_AREAS)
                         == PERMISSION_GRANTED;
+        mCanSetUnrestrictedGestureExclusion =
+                service.mContext.checkCallingOrSelfPermission(SET_UNRESTRICTED_GESTURE_EXCLUSION)
+                        == PERMISSION_GRANTED;
         mShowingAlertWindowNotificationAllowed = mService.mShowAlertWindowNotifications;
         mDragDropController = mService.mDragDropController;
         StringBuilder sb = new StringBuilder();
@@ -195,27 +198,31 @@
     public int addToDisplay(IWindow window, WindowManager.LayoutParams attrs,
             int viewVisibility, int displayId, InsetsVisibilities requestedVisibilities,
             InputChannel outInputChannel, InsetsState outInsetsState,
-            InsetsSourceControl[] outActiveControls) {
+            InsetsSourceControl[] outActiveControls, Rect outAttachedFrame,
+            float[] outSizeCompatScale) {
         return mService.addWindow(this, window, attrs, viewVisibility, displayId,
                 UserHandle.getUserId(mUid), requestedVisibilities, outInputChannel, outInsetsState,
-                outActiveControls);
+                outActiveControls, outAttachedFrame, outSizeCompatScale);
     }
 
     @Override
     public int addToDisplayAsUser(IWindow window, WindowManager.LayoutParams attrs,
             int viewVisibility, int displayId, int userId, InsetsVisibilities requestedVisibilities,
             InputChannel outInputChannel, InsetsState outInsetsState,
-            InsetsSourceControl[] outActiveControls) {
+            InsetsSourceControl[] outActiveControls, Rect outAttachedFrame,
+            float[] outSizeCompatScale) {
         return mService.addWindow(this, window, attrs, viewVisibility, displayId, userId,
-                requestedVisibilities, outInputChannel, outInsetsState, outActiveControls);
+                requestedVisibilities, outInputChannel, outInsetsState, outActiveControls,
+                outAttachedFrame, outSizeCompatScale);
     }
 
     @Override
     public int addToDisplayWithoutInputChannel(IWindow window, WindowManager.LayoutParams attrs,
-            int viewVisibility, int displayId, InsetsState outInsetsState) {
+            int viewVisibility, int displayId, InsetsState outInsetsState, Rect outAttachedFrame,
+            float[] outSizeCompatScale) {
         return mService.addWindow(this, window, attrs, viewVisibility, displayId,
                 UserHandle.getUserId(mUid), mDummyRequestedVisibilities, null /* outInputChannel */,
-                outInsetsState, mDummyControls);
+                outInsetsState, mDummyControls, outAttachedFrame, outSizeCompatScale);
     }
 
     @Override
@@ -224,32 +231,16 @@
     }
 
     @Override
-    public int updateVisibility(IWindow client, WindowManager.LayoutParams attrs,
-            int viewVisibility, MergedConfiguration outMergedConfiguration,
-            SurfaceControl outSurfaceControl, InsetsState outInsetsState,
-            InsetsSourceControl[] outActiveControls) {
-        Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, mUpdateViewVisibilityTag);
-        int res = mService.updateViewVisibility(this, client, attrs, viewVisibility,
-                outMergedConfiguration, outSurfaceControl, outInsetsState, outActiveControls);
-        Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
-        return res;
-    }
-
-    @Override
-    public void updateLayout(IWindow window, WindowManager.LayoutParams attrs, int flags,
-            ClientWindowFrames clientFrames, int requestedWidth, int requestedHeight) {
-        Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, mUpdateWindowLayoutTag);
-        mService.updateWindowLayout(this, window, attrs, flags, clientFrames, requestedWidth,
-                requestedHeight);
-        Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
-    }
-
-    @Override
     public void prepareToReplaceWindows(IBinder appToken, boolean childrenOnly) {
         mService.setWillReplaceWindows(appToken, childrenOnly);
     }
 
     @Override
+    public boolean cancelDraw(IWindow window) {
+        return mService.cancelDraw(this, window);
+    }
+
+    @Override
     public int relayout(IWindow window, WindowManager.LayoutParams attrs,
             int requestedWidth, int requestedHeight, int viewFlags, int flags,
             ClientWindowFrames outFrames, MergedConfiguration mergedConfiguration,
@@ -711,8 +702,6 @@
             if (wpc != null) {
                 mPackageName = wpc.mInfo.packageName;
                 mRelayoutTag = "relayoutWindow: " + mPackageName;
-                mUpdateViewVisibilityTag = "updateVisibility: " + mPackageName;
-                mUpdateWindowLayoutTag = "updateLayout: " + mPackageName;
             } else {
                 Slog.e(TAG_WM, "Unknown process pid=" + mPid);
             }
diff --git a/services/core/java/com/android/server/wm/StartingSurfaceController.java b/services/core/java/com/android/server/wm/StartingSurfaceController.java
index f83173b..0bb773a 100644
--- a/services/core/java/com/android/server/wm/StartingSurfaceController.java
+++ b/services/core/java/com/android/server/wm/StartingSurfaceController.java
@@ -220,6 +220,11 @@
         // Attempt to add starting window from the top-most activity.
         for (int i = mDeferringAddStartActivities.size() - 1; i >= 0; --i) {
             final DeferringStartingWindowRecord next = mDeferringAddStartActivities.get(i);
+            if (next.mDeferring.getTask() == null) {
+                Slog.e(TAG, "No task exists: " + next.mDeferring.shortComponentName
+                        + " parent: " + next.mDeferring.getParent());
+                continue;
+            }
             next.mDeferring.showStartingWindow(next.mPrev, mInitNewTask, mInitTaskSwitch,
                     mInitProcessRunning, true /* startActivity */, next.mSource, topOptions);
             // If one succeeds, it is done.
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index bf5246f..2ba0e23 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -67,16 +67,14 @@
 import static android.view.WindowManager.TRANSIT_OPEN;
 import static android.view.WindowManager.TRANSIT_TO_BACK;
 import static android.view.WindowManager.TRANSIT_TO_FRONT;
+import static android.window.DisplayAreaOrganizer.FEATURE_UNDEFINED;
 
-import static com.android.internal.policy.DecorView.DECOR_SHADOW_FOCUSED_HEIGHT_IN_DIP;
-import static com.android.internal.policy.DecorView.DECOR_SHADOW_UNFOCUSED_HEIGHT_IN_DIP;
 import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_ADD_REMOVE;
 import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_BACK_PREVIEW;
 import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_LOCKTASK;
 import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_RECENTS_ANIMATIONS;
 import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_STATES;
 import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_TASKS;
-import static com.android.server.wm.ActivityRecord.State.INITIALIZING;
 import static com.android.server.wm.ActivityRecord.State.PAUSED;
 import static com.android.server.wm.ActivityRecord.State.PAUSING;
 import static com.android.server.wm.ActivityRecord.State.RESUMED;
@@ -131,7 +129,6 @@
 import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ROOT_TASK;
 import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_TASK_MOVEMENT;
 import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
-import static com.android.server.wm.WindowManagerService.dipToPixel;
 
 import static java.lang.Integer.MAX_VALUE;
 
@@ -197,6 +194,7 @@
 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.PooledConsumer;
@@ -426,9 +424,6 @@
     /** Helper object used for updating override configuration. */
     private Configuration mTmpConfig = new Configuration();
 
-    /** Used by fillTaskInfo */
-    final TaskActivitiesReport mReuseActivitiesReport = new TaskActivitiesReport();
-
     /* Unique identifier for this task. */
     final int mTaskId;
     /* User for which this task was created. */
@@ -743,8 +738,9 @@
                     "removeTask:" + reason + " deferring removing taskId=" + mTaskId);
             return;
         }
+        final boolean isLeafTask = isLeafTask();
         removeImmediately(reason);
-        if (isLeafTask()) {
+        if (isLeafTask) {
             mAtmService.getTaskChangeNotificationController().notifyTaskRemoved(mTaskId);
 
             final TaskDisplayArea taskDisplayArea = getDisplayArea();
@@ -1404,15 +1400,6 @@
     }
 
     /**
-     * Return the number of running activities, and the number of non-finishing/initializing
-     * activities in the provided {@param reportOut} respectively.
-     */
-    private void getNumRunningActivities(TaskActivitiesReport reportOut) {
-        reportOut.reset();
-        forAllActivities(reportOut);
-    }
-
-    /**
      * Reorder the history task so that the passed activity is brought to the front.
      */
     final void moveActivityToFrontLocked(ActivityRecord newTop) {
@@ -1707,23 +1694,6 @@
                 lockTaskAuthToString());
     }
 
-    @Override
-    public boolean supportsSplitScreenWindowingMode() {
-        return supportsSplitScreenWindowingModeInDisplayArea(getDisplayArea());
-    }
-
-    boolean supportsSplitScreenWindowingModeInDisplayArea(@Nullable TaskDisplayArea tda) {
-        final Task topTask = getTopMostTask();
-        return super.supportsSplitScreenWindowingMode()
-                && (topTask == null || topTask.supportsSplitScreenWindowingModeInner(tda));
-    }
-
-    private boolean supportsSplitScreenWindowingModeInner(@Nullable TaskDisplayArea tda) {
-        return super.supportsSplitScreenWindowingMode()
-                && mAtmService.mSupportsSplitScreenMultiWindow
-                && supportsMultiWindowInDisplayArea(tda);
-    }
-
     boolean supportsFreeform() {
         return supportsFreeformInDisplayArea(getDisplayArea());
     }
@@ -1889,6 +1859,11 @@
         if (getRequestedOverrideWindowingMode() == WINDOWING_MODE_UNDEFINED) {
             nextPersistTaskBounds = newParentConfig.windowConfiguration.persistTaskBounds();
         }
+        // Only restore to the last non-fullscreen bounds when the requested override bounds
+        // have not been explicitly set already.
+        nextPersistTaskBounds &=
+                (getRequestedOverrideConfiguration().windowConfiguration.getBounds() == null
+                || getRequestedOverrideConfiguration().windowConfiguration.getBounds().isEmpty());
         if (!prevPersistTaskBounds && nextPersistTaskBounds
                 && mLastNonFullscreenBounds != null && !mLastNonFullscreenBounds.isEmpty()) {
             // Bypass onRequestedOverrideConfigurationChanged here to avoid infinite loop.
@@ -2031,10 +2006,6 @@
         Rect outOverrideBounds = getResolvedOverrideConfiguration().windowConfiguration.getBounds();
 
         if (windowingMode == WINDOWING_MODE_FULLSCREEN) {
-            if (!isOrganized()) {
-                // Use empty bounds to indicate "fill parent".
-                outOverrideBounds.setEmpty();
-            }
             // The bounds for fullscreen mode shouldn't be adjusted by minimal size. Otherwise if
             // the parent or display is smaller than the size, the content may be cropped.
             return;
@@ -3309,7 +3280,6 @@
         }
 
         final SurfaceControl.Transaction t = getSyncTransaction();
-        updateShadowsRadius(isFocused(), t);
 
         if (mDimmer.updateDims(t, mTmpDimBoundsRect)) {
             scheduleAnimation();
@@ -3384,14 +3354,14 @@
      *            the give {@link TaskDisplayArea}.
      */
     void fillTaskInfo(TaskInfo info, boolean stripExtras, @Nullable TaskDisplayArea tda) {
-        getNumRunningActivities(mReuseActivitiesReport);
+        info.launchCookies.clear();
+        info.addLaunchCookie(mLaunchCookie);
+        final ActivityRecord top = mTaskSupervisor.mTaskInfoHelper.fillAndReturnTop(this, info);
+
         info.userId = isLeafTask() ? mUserId : mCurrentUser;
         info.taskId = mTaskId;
         info.displayId = getDisplayId();
-        if (tda != null) {
-            info.displayAreaFeatureId = tda.mFeatureId;
-        }
-        info.isRunning = getTopNonFinishingActivity() != null;
+        info.displayAreaFeatureId = tda != null ? tda.mFeatureId : FEATURE_UNDEFINED;
         final Intent baseIntent = getBaseIntent();
         // Make a copy of base intent because this is like a snapshot info.
         // Besides, {@link RecentTasks#getRecentTasksImpl} may modify it.
@@ -3400,18 +3370,13 @@
                 ? new Intent()
                 : stripExtras ? baseIntent.cloneFilter() : new Intent(baseIntent);
         info.baseIntent.setFlags(baseIntentFlags);
-        info.baseActivity = mReuseActivitiesReport.base != null
-                ? mReuseActivitiesReport.base.intent.getComponent()
-                : null;
-        info.topActivity = mReuseActivitiesReport.top != null
-                ? mReuseActivitiesReport.top.mActivityComponent
-                : null;
+
+        info.isRunning = top != null;
+        info.topActivity = top != null ? top.mActivityComponent : null;
         info.origActivity = origActivity;
         info.realActivity = realActivity;
-        info.numActivities = mReuseActivitiesReport.numActivities;
         info.lastActiveTime = lastActiveTime;
         info.taskDescription = new ActivityManager.TaskDescription(getTaskDescription());
-        info.supportsSplitScreenMultiWindow = supportsSplitScreenWindowingModeInDisplayArea(tda);
         info.supportsMultiWindow = supportsMultiWindowInDisplayArea(tda);
         info.configuration.setTo(getConfiguration());
         // Update to the task's current activity type and windowing mode which may differ from the
@@ -3422,49 +3387,38 @@
 
         //TODO (AM refactor): Just use local once updateEffectiveIntent is run during all child
         //                    order changes.
-        final Task top = getTopMostTask();
-        info.resizeMode = top != null ? top.mResizeMode : mResizeMode;
-        info.topActivityType = top.getActivityType();
+        final Task topTask = top != null ? top.getTask() : this;
+        info.resizeMode = topTask.mResizeMode;
+        info.topActivityType = topTask.getActivityType();
+        info.displayCutoutInsets = topTask.getDisplayCutoutInsets();
         info.isResizeable = isResizeable();
         info.minWidth = mMinWidth;
         info.minHeight = mMinHeight;
         info.defaultMinSize = mDisplayContent == null
                 ? DEFAULT_MIN_TASK_SIZE_DP : mDisplayContent.mMinSizeOfResizeableTaskDp;
-
         info.positionInParent = getRelativePosition();
 
+        info.topActivityInfo = top != null ? top.info : null;
         info.pictureInPictureParams = getPictureInPictureParams(top);
-        info.shouldDockBigOverlays = shouldDockBigOverlays();
-        if (info.pictureInPictureParams != null
+        info.launchIntoPipHostTaskId = (info.pictureInPictureParams != null
                 && info.pictureInPictureParams.isLaunchIntoPip()
-                && top.getTopMostActivity().getLastParentBeforePip() != null) {
-            info.launchIntoPipHostTaskId =
-                    top.getTopMostActivity().getLastParentBeforePip().mTaskId;
-        }
-        info.displayCutoutInsets = top != null ? top.getDisplayCutoutInsets() : null;
-        info.topActivityInfo = mReuseActivitiesReport.top != null
-                ? mReuseActivitiesReport.top.info
-                : null;
+                && top.getLastParentBeforePip() != null)
+                        ? top.getLastParentBeforePip().mTaskId : INVALID_TASK_ID;
+        info.shouldDockBigOverlays = top != null && top.shouldDockBigOverlays;
+        info.mTopActivityLocusId = top != null ? top.getLocusId() : null;
 
-        boolean isTopActivityResumed = mReuseActivitiesReport.top != null
-                 && mReuseActivitiesReport.top.getOrganizedTask() == this
-                 && mReuseActivitiesReport.top.isState(RESUMED);
+        final boolean isTopActivityResumed = top != null
+                && top.getOrganizedTask() == this && top.isState(RESUMED);
         // Whether the direct top activity is in size compat mode on foreground.
-        info.topActivityInSizeCompat = isTopActivityResumed
-                && mReuseActivitiesReport.top.inSizeCompatMode();
+        info.topActivityInSizeCompat = isTopActivityResumed && top.inSizeCompatMode();
         // Whether the direct top activity is eligible for letterbox education.
         info.topActivityEligibleForLetterboxEducation = isTopActivityResumed
-                && mReuseActivitiesReport.top.isEligibleForLetterboxEducation();
+                && top.isEligibleForLetterboxEducation();
         // Whether the direct top activity requested showing camera compat control.
         info.cameraCompatControlState = isTopActivityResumed
-                ? mReuseActivitiesReport.top.getCameraCompatControlState()
+                ? top.getCameraCompatControlState()
                 : TaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN;
 
-        info.launchCookies.clear();
-        info.addLaunchCookie(mLaunchCookie);
-        forAllActivities(r -> {
-            info.addLaunchCookie(r.mLaunchCookie);
-        });
         final Task parentTask = getParent() != null ? getParent().asTask() : null;
         info.parentTaskId = parentTask != null && parentTask.mCreatedByOrganizer
                 ? parentTask.mTaskId
@@ -3472,19 +3426,17 @@
         info.isFocused = isFocused();
         info.isVisible = hasVisibleChildren();
         info.isSleeping = shouldSleepActivities();
-        ActivityRecord topRecord = getTopNonFinishingActivity();
-        info.mTopActivityLocusId = topRecord != null ? topRecord.getLocusId() : null;
     }
 
     @Nullable PictureInPictureParams getPictureInPictureParams() {
-        return getPictureInPictureParams(getTopMostTask());
+        final Task topTask = getTopMostTask();
+        if (topTask == null) return null;
+        return getPictureInPictureParams(topTask.getTopMostActivity());
     }
 
-    private @Nullable PictureInPictureParams getPictureInPictureParams(Task top) {
-        if (top == null) return null;
-        final ActivityRecord topMostActivity = top.getTopMostActivity();
-        return (topMostActivity == null || topMostActivity.pictureInPictureArgs.empty())
-                ? null : new PictureInPictureParams(topMostActivity.pictureInPictureArgs);
+    private static @Nullable PictureInPictureParams getPictureInPictureParams(ActivityRecord top) {
+        return (top == null || top.pictureInPictureArgs.empty())
+                ? null : new PictureInPictureParams(top.pictureInPictureArgs);
     }
 
     private boolean shouldDockBigOverlays() {
@@ -3673,30 +3625,35 @@
     }
 
     @Override
-    public String toString() {
-        StringBuilder sb = new StringBuilder(128);
-        if (stringName != null) {
-            sb.append(stringName);
-            sb.append(" U=");
-            sb.append(mUserId);
-            final Task rootTask = getRootTask();
-            if (rootTask != this) {
-                sb.append(" rootTaskId=");
-                sb.append(rootTask.mTaskId);
-            }
-            sb.append(" visible=");
-            sb.append(shouldBeVisible(null /* starting */));
-            sb.append(" visibleRequested=");
-            sb.append(isVisibleRequested());
-            sb.append(" mode=");
-            sb.append(windowingModeToString(getWindowingMode()));
-            sb.append(" translucent=");
-            sb.append(isTranslucent(null /* starting */));
-            sb.append(" sz=");
-            sb.append(getChildCount());
-            sb.append('}');
-            return sb.toString();
+    String toFullString() {
+        final StringBuilder sb = new StringBuilder(192);
+        sb.append(this);
+        sb.setLength(sb.length() - 1); // Remove tail '}'.
+        sb.append(" U=");
+        sb.append(mUserId);
+        final Task rootTask = getRootTask();
+        if (rootTask != this) {
+            sb.append(" rootTaskId=");
+            sb.append(rootTask.mTaskId);
         }
+        sb.append(" visible=");
+        sb.append(shouldBeVisible(null /* starting */));
+        sb.append(" visibleRequested=");
+        sb.append(isVisibleRequested());
+        sb.append(" mode=");
+        sb.append(windowingModeToString(getWindowingMode()));
+        sb.append(" translucent=");
+        sb.append(isTranslucent(null /* starting */));
+        sb.append(" sz=");
+        sb.append(getChildCount());
+        sb.append('}');
+        return sb.toString();
+    }
+
+    @Override
+    public String toString() {
+        if (stringName != null) return stringName;
+        StringBuilder sb = new StringBuilder(128);
         sb.append("Task{");
         sb.append(Integer.toHexString(System.identityHashCode(this)));
         sb.append(" #");
@@ -3711,47 +3668,9 @@
         } else if (affinityIntent != null && affinityIntent.getComponent() != null) {
             sb.append(" aI=");
             sb.append(affinityIntent.getComponent().flattenToShortString());
-        } else {
-            sb.append(" ??");
         }
-        stringName = sb.toString();
-        return toString();
-    }
-
-    /** @see #getNumRunningActivities(TaskActivitiesReport) */
-    static class TaskActivitiesReport implements Consumer<ActivityRecord> {
-        int numRunning;
-        int numActivities;
-        ActivityRecord top;
-        ActivityRecord base;
-
-        void reset() {
-            numRunning = numActivities = 0;
-            top = base = null;
-        }
-
-        @Override
-        public void accept(ActivityRecord r) {
-            if (r.finishing) {
-                return;
-            }
-
-            base = r;
-
-            // Increment the total number of non-finishing activities
-            numActivities++;
-
-            if (top == null || (top.isState(INITIALIZING))) {
-                top = r;
-                // Reset the number of running activities until we hit the first non-initializing
-                // activity
-                numRunning = 0;
-            }
-            if (r.attachedToProcess()) {
-                // Increment the number of actually running activities
-                numRunning++;
-            }
-        }
+        sb.append('}');
+        return stringName = sb.toString();
     }
 
     /**
@@ -4335,48 +4254,10 @@
     }
 
     /**
-     * @return the desired shadow radius in pixels for the current task.
-     */
-    private float getShadowRadius(boolean taskIsFocused) {
-        int elevation = 0;
-
-        // Get elevation for a specific windowing mode.
-        if (inFreeformWindowingMode()) {
-            elevation = taskIsFocused
-                    ? DECOR_SHADOW_FOCUSED_HEIGHT_IN_DIP : DECOR_SHADOW_UNFOCUSED_HEIGHT_IN_DIP;
-        } else {
-            // For all other windowing modes, do not draw a shadow.
-            return 0;
-        }
-
-        // If the task has no visible children, do not draw a shadow.
-        if (!hasVisibleChildren()) {
-            return 0;
-        }
-
-        return dipToPixel(elevation, getDisplayContent().getDisplayMetrics());
-    }
-
-    /**
-     * Update the length of the shadow if needed based on windowing mode and task focus state.
-     */
-    private void updateShadowsRadius(boolean taskIsFocused,
-            SurfaceControl.Transaction pendingTransaction) {
-        if (!isRootTask()) return;
-
-        final float newShadowRadius = getShadowRadius(taskIsFocused);
-        if (mShadowRadius != newShadowRadius) {
-            mShadowRadius = newShadowRadius;
-            pendingTransaction.setShadowRadius(getSurfaceControl(), mShadowRadius);
-        }
-    }
-
-    /**
      * Called on the task when it gained or lost focus.
      * @param hasFocus
      */
     void onAppFocusChanged(boolean hasFocus) {
-        updateShadowsRadius(hasFocus, getSyncTransaction());
         dispatchTaskInfoChangedIfNeeded(false /* force */);
     }
 
@@ -4555,13 +4436,13 @@
                     : WINDOWING_MODE_FULLSCREEN;
         }
         if (currentMode == WINDOWING_MODE_PINNED) {
+            // In the case that we've disabled affecting the SysUI flags as a part of seamlessly
+            // transferring the transform on the leash to the task, reset this state once we're
+            // moving out of pip
+            setCanAffectSystemUiFlags(true);
             mRootWindowContainer.notifyActivityPipModeChanged(this, null);
         }
         if (likelyResolvedMode == WINDOWING_MODE_PINNED) {
-            // In the case that we've disabled affecting the SysUI flags as a part of seamlessly
-            // transferring the transform on the leash to the task, reset this state once we've
-            // actually entered pip
-            setCanAffectSystemUiFlags(true);
             if (taskDisplayArea.getRootPinnedTask() != null) {
                 // Can only have 1 pip at a time, so replace an existing pip
                 taskDisplayArea.getRootPinnedTask().dismissPip();
@@ -4652,22 +4533,12 @@
         moveToFront(reason, null);
     }
 
-    void moveToFront(String reason, Task task) {
-        if (mMoveAdjacentTogether && getAdjacentTaskFragment() != null) {
-            final Task adjacentTask = getAdjacentTaskFragment().asTask();
-            if (adjacentTask != null) {
-                adjacentTask.moveToFrontInner(reason + " adjacentTaskToTop", null /* task */);
-            }
-        }
-        moveToFrontInner(reason, task);
-    }
-
     /**
      * @param reason The reason for moving the root task to the front.
      * @param task If non-null, the task will be moved to the top of the root task.
      */
     @VisibleForTesting
-    void moveToFrontInner(String reason, Task task) {
+    void moveToFront(String reason, Task task) {
         if (!isAttached()) {
             return;
         }
@@ -5457,7 +5328,23 @@
                     parentLaunchMode == ActivityInfo.LAUNCH_SINGLE_TASK ||
                     parentLaunchMode == ActivityInfo.LAUNCH_SINGLE_TOP ||
                     (destIntentFlags & Intent.FLAG_ACTIVITY_CLEAR_TOP) != 0) {
-                parent.deliverNewIntentLocked(callingUid, destIntent, destGrants, srec.packageName);
+                boolean abort;
+                try {
+                    abort = !mTaskSupervisor.checkStartAnyActivityPermission(destIntent,
+                            parent.info, null /* resultWho */, -1 /* requestCode */, srec.getPid(),
+                            callingUid, srec.info.packageName, null /* callingFeatureId */,
+                            false /* ignoreTargetSecurity */, false /* launchingInTask */, srec.app,
+                            null /* resultRecord */, null /* resultRootTask */);
+                } catch (SecurityException e) {
+                    abort = true;
+                }
+                if (abort) {
+                    Slog.e(TAG, "Cannot navigateUpTo, intent =" + destIntent);
+                    foundParentInTask = false;
+                } else {
+                    parent.deliverNewIntentLocked(callingUid, destIntent, destGrants,
+                            srec.packageName);
+                }
             } else {
                 try {
                     ActivityInfo aInfo = AppGlobals.getPackageManager().getActivityInfo(
@@ -5581,23 +5468,10 @@
         }
     }
 
-    /**
-     * Worker method for rearranging history task. Implements the function of moving all
-     * activities for a specific task (gathering them if disjoint) into a single group at the
-     * bottom of the root task.
-     *
-     * If a watcher is installed, the action is preflighted and the watcher has an opportunity
-     * to premeptively cancel the move.
-     *
-     * @param tr The task to collect and move to the bottom.
-     * @return Returns true if the move completed, false if not.
-     */
-    boolean moveTaskToBack(Task tr) {
-        Slog.i(TAG, "moveTaskToBack: " + tr);
-
+    private boolean canMoveTaskToBack(Task task) {
         // In LockTask mode, moving a locked task to the back of the root task may expose unlocked
         // ones. Therefore we need to check if this operation is allowed.
-        if (!mAtmService.getLockTaskController().canMoveTaskToBack(tr)) {
+        if (!mAtmService.getLockTaskController().canMoveTaskToBack(task)) {
             return false;
         }
 
@@ -5605,7 +5479,7 @@
         // for *other* available tasks, but if none are available, then try again allowing the
         // current task to be selected.
         if (isTopRootTaskInDisplayArea() && mAtmService.mController != null) {
-            ActivityRecord next = topRunningActivity(null, tr.mTaskId);
+            ActivityRecord next = topRunningActivity(null, task.mTaskId);
             if (next == null) {
                 next = topRunningActivity(null, INVALID_TASK_ID);
             }
@@ -5623,15 +5497,70 @@
                 }
             }
         }
+        return true;
+    }
+
+    /**
+     * Worker method for rearranging history task. Implements the function of moving all
+     * activities for a specific task (gathering them if disjoint) into a single group at the
+     * bottom of the root task.
+     *
+     * If a watcher is installed, the action is preflighted and the watcher has an opportunity
+     * to premeptively cancel the move.
+     *
+     * If this is a pinned task, it will be removed instead of rearranged.
+     *
+     * @param tr The task to collect and move to the bottom.
+     * @return Returns true if the move completed, false if not.
+     */
+    boolean moveTaskToBack(Task tr) {
+        Slog.i(TAG, "moveTaskToBack: " + tr);
+
+        if (!canMoveTaskToBack(tr)) return false;
 
         if (DEBUG_TRANSITION) Slog.v(TAG_TRANSITION, "Prepare to back transition: task="
                 + tr.mTaskId);
 
-        // Skip the transition for pinned task.
-        if (!inPinnedWindowingMode()) {
-            mDisplayContent.requestTransitionAndLegacyPrepare(TRANSIT_TO_BACK, tr);
+        if (mTransitionController.isShellTransitionsEnabled()) {
+            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),
+                        () -> {
+                            mTransitionController.requestStartTransition(transition, tr,
+                                    null /* remoteTransition */, null /* displayChange */);
+                            // 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;
+                            }
+                            moveTaskToBackInner(tr);
+                        });
+            } else {
+                mTransitionController.moveToCollecting(transition);
+                mTransitionController.requestStartTransition(transition, tr,
+                        null /* remoteTransition */, null /* displayChange */);
+                moveTaskToBackInner(tr);
+            }
+        } else {
+            // Skip the transition for pinned task.
+            if (!inPinnedWindowingMode()) {
+                mDisplayContent.prepareAppTransition(TRANSIT_TO_BACK);
+            }
+            moveTaskToBackInner(tr);
         }
-        moveToBack("moveTaskToBackLocked", tr);
+        return true;
+    }
+
+    private boolean moveTaskToBackInner(@NonNull Task task) {
+        moveToBack("moveTaskToBackInner", task);
 
         if (inPinnedWindowingMode()) {
             mTaskSupervisor.removeRootTask(this);
@@ -6028,8 +5957,13 @@
         mLastRecentsAnimationTransaction = null;
         mLastRecentsAnimationOverlay = null;
         // reset also the crop and transform introduced by mLastRecentsAnimationTransaction
-        getPendingTransaction().setMatrix(mSurfaceControl, Matrix.IDENTITY_MATRIX, new float[9])
+        resetSurfaceControlTransforms();
+    }
+
+    void resetSurfaceControlTransforms() {
+        getSyncTransaction().setMatrix(mSurfaceControl, Matrix.IDENTITY_MATRIX, new float[9])
                 .setWindowCrop(mSurfaceControl, null)
+                .setShadowRadius(mSurfaceControl, 0)
                 .setCornerRadius(mSurfaceControl, 0);
     }
 
diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java
index ca91a74..8220cae 100644
--- a/services/core/java/com/android/server/wm/TaskDisplayArea.java
+++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java
@@ -29,7 +29,6 @@
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSET;
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
 import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
-import static android.view.WindowManagerPolicyConstants.SPLIT_DIVIDER_LAYER;
 
 import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_ORIENTATION;
 import static com.android.server.wm.ActivityRecord.State.RESUMED;
@@ -91,20 +90,6 @@
      */
     private int mColorLayerCounter = 0;
 
-    /**
-     * Given that the split-screen divider does not have an AppWindowToken, it
-     * will have to live inside of a "NonAppWindowContainer". However, in visual Z order
-     * it will need to be interleaved with some of our children, appearing on top of
-     * both docked root tasks but underneath any assistant root tasks.
-     *
-     * To solve this problem we have this anchor control, which will always exist so
-     * we can always assign it the correct value in our {@link #assignChildLayers}.
-     * Likewise since it always exists, we can always
-     * assign the divider a layer relative to it. This way we prevent linking lifecycle
-     * events between tasks and the divider window.
-     */
-    private SurfaceControl mSplitScreenDividerAnchor;
-
     // Cached reference to some special tasks we tend to get a lot so we don't need to loop
     // through the list to find them.
     private Task mRootHomeTask;
@@ -422,8 +407,10 @@
         // wasContained} restricts the preferred root task is set only when moving an existing
         // root task to top instead of adding a new root task that may be too early (e.g. in the
         // middle of launching or reparenting).
-        if (moveToTop && child.isFocusableAndVisible()) {
-            mPreferredTopFocusableRootTask = child;
+        final boolean isTopFocusableTask = moveToTop && child.isTopActivityFocusable();
+        if (isTopFocusableTask) {
+            mPreferredTopFocusableRootTask =
+                    child.shouldBeVisible(null /* starting */) ? child : null;
         } else if (mPreferredTopFocusableRootTask == child) {
             mPreferredTopFocusableRootTask = null;
         }
@@ -736,12 +723,7 @@
         // Place root home tasks to the bottom.
         layer = adjustRootTaskLayer(t, mTmpHomeChildren, layer);
         layer = adjustRootTaskLayer(t, mTmpNormalChildren, layer);
-        // TODO(b/207185041): Remove this divider workaround after we full remove leagacy split and
-        //                    make app pair split only have single root then we can just attach the
-        //                    divider to the single root task in shell.
-        layer = Math.max(layer, SPLIT_DIVIDER_LAYER + 1);
         adjustRootTaskLayer(t, mTmpAlwaysOnTopChildren, layer);
-        t.setLayer(mSplitScreenDividerAnchor, SPLIT_DIVIDER_LAYER);
     }
 
     /**
@@ -769,19 +751,6 @@
                 continue;
             }
 
-            final Task childTask = child.asTask();
-            final boolean inAdjacentTask = childTask != null
-                    && child.inMultiWindowMode()
-                    && childTask.getRootTask().getAdjacentTaskFragment() != null;
-
-            if (inAdjacentTask) {
-                hasAdjacentTask = true;
-            } else if (hasAdjacentTask && startLayer < SPLIT_DIVIDER_LAYER) {
-                // Task on top of adjacent tasks should be higher than split divider layer so
-                // set it as start.
-                startLayer = SPLIT_DIVIDER_LAYER + 1;
-            }
-
             child.assignLayer(t, startLayer++);
         }
 
@@ -808,31 +777,6 @@
         return activity != null ? activity.createRemoteAnimationTarget(record) : null;
     }
 
-    SurfaceControl getSplitScreenDividerAnchor() {
-        return mSplitScreenDividerAnchor;
-    }
-
-    @Override
-    void onParentChanged(ConfigurationContainer newParent, ConfigurationContainer oldParent) {
-        if (getParent() != null) {
-            super.onParentChanged(newParent, oldParent, () -> {
-                mSplitScreenDividerAnchor = makeChildSurface(null)
-                        .setName("splitScreenDividerAnchor")
-                        .setCallsite("TaskDisplayArea.onParentChanged")
-                        .build();
-
-                getSyncTransaction()
-                        .show(mSplitScreenDividerAnchor);
-            });
-        } else {
-            super.onParentChanged(newParent, oldParent);
-            mWmService.mTransactionFactory.get()
-                    .remove(mSplitScreenDividerAnchor)
-                    .apply();
-            mSplitScreenDividerAnchor = null;
-        }
-    }
-
     void setBackgroundColor(@ColorInt int colorInt) {
         setBackgroundColor(colorInt, false /* restore */);
     }
@@ -878,12 +822,6 @@
             setBackgroundColor(mBackgroundColor, true /* restore */);
         }
 
-        if (mSplitScreenDividerAnchor == null) {
-            return;
-        }
-
-        // As TaskDisplayArea is getting a new surface, reparent and reorder the child surfaces.
-        t.reparent(mSplitScreenDividerAnchor, mSurfaceControl);
         reassignLayer(t);
         scheduleAnimation();
     }
@@ -1176,7 +1114,10 @@
         // If a task is launching from a created-by-organizer task, it should be launched into the
         // same created-by-organizer task as well. Unless, the candidate task is already positioned
         // in the another adjacent task.
-        if (sourceTask != null) {
+        if (sourceTask != null && (candidateTask == null
+                // 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) {
@@ -1906,15 +1847,12 @@
                 task.remove(false /* withTransition */, "removeTaskDisplayArea");
             } else {
                 // Reparent task to corresponding launch root or display area.
-                final WindowContainer launchRoot =
-                        task.supportsSplitScreenWindowingModeInDisplayArea(toDisplayArea)
-                                ? toDisplayArea.getLaunchRootTask(
+                final WindowContainer launchRoot = toDisplayArea.getLaunchRootTask(
                                         task.getWindowingMode(),
                                         task.getActivityType(),
                                         null /* options */,
                                         null /* sourceTask */,
-                                        0 /* launchFlags */)
-                                : null;
+                                        0 /* launchFlags */);
                 task.reparent(launchRoot == null ? toDisplayArea : launchRoot, POSITION_TOP);
 
                 // Set the windowing mode to undefined by default to let the root task inherited the
@@ -2002,7 +1940,7 @@
                 continue;
             }
             final Task rootTask = child.asTask();
-            pw.println(doublePrefix + "* " + rootTask);
+            pw.println(doublePrefix + "* " + rootTask.toFullString());
             rootTask.dump(pw, triplePrefix, dumpAll);
         }
     }
diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java
index 1b0c018..8d94324 100644
--- a/services/core/java/com/android/server/wm/TaskFragment.java
+++ b/services/core/java/com/android/server/wm/TaskFragment.java
@@ -165,6 +165,13 @@
      * indicate that an Activity can't be embedded because the Activity is started on a new task.
      */
     static final int EMBEDDING_DISALLOWED_NEW_TASK = 3;
+    /**
+     * An embedding check result of
+     * {@link ActivityStarter#canEmbedActivity(TaskFragment, ActivityRecord, Task)}:
+     * indicate that an Activity can't be embedded because the Activity is started on a new
+     * TaskFragment, e.g. start an Activity on a new TaskFragment for result.
+     */
+    static final int EMBEDDING_DISALLOWED_NEW_TASK_FRAGMENT = 4;
 
     /**
      * Embedding check results of {@link #isAllowedToEmbedActivity(ActivityRecord)} or
@@ -175,6 +182,7 @@
             EMBEDDING_DISALLOWED_UNTRUSTED_HOST,
             EMBEDDING_DISALLOWED_MIN_DIMENSION_VIOLATION,
             EMBEDDING_DISALLOWED_NEW_TASK,
+            EMBEDDING_DISALLOWED_NEW_TASK_FRAGMENT,
     })
     @interface EmbeddingCheckResult {}
 
@@ -214,14 +222,6 @@
     private TaskFragment mAdjacentTaskFragment;
 
     /**
-     * Whether to move adjacent task fragment together when re-positioning.
-     *
-     * @see #mAdjacentTaskFragment
-     */
-    // TODO(b/207185041): Remove this once having a single-top root for split screen.
-    boolean mMoveAdjacentTogether;
-
-    /**
      * Prevents duplicate calls to onTaskAppeared.
      */
     boolean mTaskFragmentAppearedSent;
@@ -373,15 +373,14 @@
         return service.mWindowOrganizerController.getTaskFragment(token);
     }
 
-    void setAdjacentTaskFragment(@Nullable TaskFragment taskFragment, boolean moveTogether) {
+    void setAdjacentTaskFragment(@Nullable TaskFragment taskFragment) {
         if (mAdjacentTaskFragment == taskFragment) {
             return;
         }
         resetAdjacentTaskFragment();
         if (taskFragment != null) {
             mAdjacentTaskFragment = taskFragment;
-            mMoveAdjacentTogether = moveTogether;
-            taskFragment.setAdjacentTaskFragment(this, moveTogether);
+            taskFragment.setAdjacentTaskFragment(this);
         }
     }
 
@@ -390,11 +389,9 @@
         if (mAdjacentTaskFragment != null && mAdjacentTaskFragment.mAdjacentTaskFragment == this) {
             mAdjacentTaskFragment.mAdjacentTaskFragment = null;
             mAdjacentTaskFragment.mDelayLastActivityRemoval = false;
-            mAdjacentTaskFragment.mMoveAdjacentTogether = false;
         }
         mAdjacentTaskFragment = null;
         mDelayLastActivityRemoval = false;
-        mMoveAdjacentTogether = false;
     }
 
     void setTaskFragmentOrganizer(@NonNull TaskFragmentOrganizerToken organizer, int uid,
@@ -404,6 +401,10 @@
         mTaskFragmentOrganizerProcessName = processName;
     }
 
+    void onTaskFragmentOrganizerRemoved() {
+        mTaskFragmentOrganizer = null;
+    }
+
     /** Whether this TaskFragment is organized by the given {@code organizer}. */
     boolean hasTaskFragmentOrganizer(ITaskFragmentOrganizer organizer) {
         return organizer != null && mTaskFragmentOrganizer != null
@@ -578,9 +579,20 @@
         if (!isAllowedToEmbedActivityInUntrustedMode(a)
                 && !isAllowedToEmbedActivityInTrustedMode(a, uid)) {
             return EMBEDDING_DISALLOWED_UNTRUSTED_HOST;
-        } else if (smallerThanMinDimension(a)) {
+        }
+
+        if (smallerThanMinDimension(a)) {
             return EMBEDDING_DISALLOWED_MIN_DIMENSION_VIOLATION;
         }
+
+        // Cannot embed activity across TaskFragments for activity result.
+        // If the activity that started for result is finishing, it's likely that this start mode
+        // is used to place an activity in the same task. Since the finishing activity won't be
+        // able to get the results, so it's OK to embed in a different TaskFragment.
+        if (a.resultTo != null && !a.resultTo.finishing && a.resultTo.getTaskFragment() != this) {
+            return EMBEDDING_DISALLOWED_NEW_TASK_FRAGMENT;
+        }
+
         return EMBEDDING_ALLOWED;
     }
 
@@ -1601,7 +1613,7 @@
         if (prev.attachedToProcess()) {
             if (shouldAutoPip) {
                 boolean didAutoPip = mAtmService.enterPictureInPictureMode(
-                        prev, prev.pictureInPictureArgs);
+                        prev, prev.pictureInPictureArgs, false /* fromClient */);
                 ProtoLog.d(WM_DEBUG_STATES, "Auto-PIP allowed, entering PIP mode "
                         + "directly: %s, didAutoPip: %b", prev, didAutoPip);
             } else {
@@ -1639,8 +1651,11 @@
 
             } else {
                 prev.schedulePauseTimeout();
-                // Unset readiness since we now need to wait until this pause is complete.
-                mTransitionController.setReady(this, false /* ready */);
+                // All activities will be stopped when sleeping, don't need to wait for pause.
+                if (!uiSleeping) {
+                    // Unset readiness since we now need to wait until this pause is complete.
+                    mTransitionController.setReady(this, false /* ready */);
+                }
                 return true;
             }
 
@@ -1934,19 +1949,19 @@
         if (!mAtmService.mSupportsMultiWindow) {
             return false;
         }
+        if (tda == null) {
+            return false;
+        }
         final Task task = getTask();
         if (task == null) {
             return false;
         }
-        if (tda == null) {
-            return false;
-        }
-        if (!getTask().isResizeable() && !tda.supportsNonResizableMultiWindow()) {
+        if (!task.isResizeable() && !tda.supportsNonResizableMultiWindow()) {
             // Not support non-resizable in multi window.
             return false;
         }
 
-        final ActivityRecord rootActivity = getTask().getRootActivity();
+        final ActivityRecord rootActivity = task.getRootActivity();
         return tda.supportsActivityMinWidthHeightMultiWindow(mMinWidth, mMinHeight,
                 rootActivity != null ? rootActivity.info : null);
     }
@@ -2108,13 +2123,14 @@
             }
 
             if (inOutConfig.screenWidthDp == Configuration.SCREEN_WIDTH_DP_UNDEFINED) {
-                final int overrideScreenWidthDp = (int) (mTmpStableBounds.width() / density);
+                final int overrideScreenWidthDp = (int) (mTmpStableBounds.width() / density + 0.5f);
                 inOutConfig.screenWidthDp = (insideParentBounds && !customContainerPolicy)
                         ? Math.min(overrideScreenWidthDp, parentConfig.screenWidthDp)
                         : overrideScreenWidthDp;
             }
             if (inOutConfig.screenHeightDp == Configuration.SCREEN_HEIGHT_DP_UNDEFINED) {
-                final int overrideScreenHeightDp = (int) (mTmpStableBounds.height() / density);
+                final int overrideScreenHeightDp =
+                        (int) (mTmpStableBounds.height() / density + 0.5f);
                 inOutConfig.screenHeightDp = (insideParentBounds && !customContainerPolicy)
                         ? Math.min(overrideScreenHeightDp, parentConfig.screenHeightDp)
                         : overrideScreenHeightDp;
@@ -2133,8 +2149,8 @@
                 if (WindowConfiguration.isFloating(windowingMode) && !inPipTransition) {
                     // For floating tasks, calculate the smallest width from the bounds of the
                     // task, because they should not be affected by insets.
-                    inOutConfig.smallestScreenWidthDp = (int) (
-                            Math.min(mTmpFullBounds.width(), mTmpFullBounds.height()) / density);
+                    inOutConfig.smallestScreenWidthDp = (int) (0.5f
+                            + Math.min(mTmpFullBounds.width(), mTmpFullBounds.height()) / density);
                 } else if (isEmbedded()) {
                     // For embedded TFs, the smallest width should be updated. Otherwise, inherit
                     // from the parent task would result in applications loaded wrong resource.
@@ -2153,8 +2169,8 @@
             // For calculating screen layout, we need to use the non-decor inset screen area for the
             // calculation for compatibility reasons, i.e. screen area without system bars that
             // could never go away in Honeycomb.
-            int compatScreenWidthDp = (int) (mTmpNonDecorBounds.width() / density);
-            int compatScreenHeightDp = (int) (mTmpNonDecorBounds.height() / density);
+            int compatScreenWidthDp = (int) (mTmpNonDecorBounds.width() / density + 0.5f);
+            int compatScreenHeightDp = (int) (mTmpNonDecorBounds.height() / density + 0.5f);
             // Use overrides if provided. If both overrides are provided, mTmpNonDecorBounds is
             // undefined so it can't be used.
             if (inOutConfig.screenWidthDp != Configuration.SCREEN_WIDTH_DP_UNDEFINED) {
@@ -2323,6 +2339,26 @@
         return !startBounds.equals(getBounds());
     }
 
+    boolean canHaveEmbeddingActivityTransition(@NonNull ActivityRecord child) {
+        if (!isOrganizedTaskFragment() || !mTransitionController.isShellTransitionsEnabled()) {
+            return false;
+        }
+        // The activity should request open transition when it is becoming visible.
+        return child.isVisibleRequested();
+    }
+
+    void collectEmbeddedTaskFragmentIfNeeded() {
+        if (!isOrganizedTaskFragment() || mTransitionController.isCollecting(this)) {
+            return;
+        }
+        if (getChildCount() == 0) {
+            // The TaskFragment is new created, and just becoming non-empty.
+            mTransitionController.collectExistenceChange(this);
+        } else {
+            mTransitionController.collect(this);
+        }
+    }
+
     @Override
     void setSurfaceControl(SurfaceControl sc) {
         super.setSurfaceControl(sc);
@@ -2550,7 +2586,7 @@
         if (!hasChild()) {
             return false;
         }
-        return isExitAnimationRunningSelfOrChild() || inTransition();
+        return isExitAnimationRunningSelfOrChild();
     }
 
     @Override
@@ -2635,6 +2671,32 @@
         return getWindowingMode() == WINDOWING_MODE_FULLSCREEN || matchParentBounds();
     }
 
+    String toFullString() {
+        final StringBuilder sb = new StringBuilder(128);
+        sb.append(this);
+        sb.setLength(sb.length() - 1); // Remove tail '}'.
+        if (mTaskFragmentOrganizerUid != INVALID_UID) {
+            sb.append(" organizerUid=");
+            sb.append(mTaskFragmentOrganizerUid);
+        }
+        if (mTaskFragmentOrganizerProcessName != null) {
+            sb.append(" organizerProc=");
+            sb.append(mTaskFragmentOrganizerProcessName);
+        }
+        if (mAdjacentTaskFragment != null) {
+            sb.append(" adjacent=");
+            sb.append(mAdjacentTaskFragment);
+        }
+        sb.append('}');
+        return sb.toString();
+    }
+
+    @Override
+    public String toString() {
+        return "TaskFragment{" + Integer.toHexString(System.identityHashCode(this))
+                + " mode=" + WindowConfiguration.windowingModeToString(getWindowingMode()) + "}";
+    }
+
     boolean dump(String prefix, FileDescriptor fd, PrintWriter pw, boolean dumpAll,
             boolean dumpClient, String dumpPackage, final boolean needSep, Runnable header) {
         boolean printed = false;
@@ -2673,7 +2735,7 @@
     }
 
     void dumpInner(String prefix, PrintWriter pw, boolean dumpAll, String dumpPackage) {
-        pw.print(prefix); pw.print("* "); pw.println(this);
+        pw.print(prefix); pw.print("* "); pw.println(toFullString());
         final Rect bounds = getRequestedOverrideBounds();
         if (!bounds.isEmpty()) {
             pw.println(prefix + "  mBounds=" + bounds);
@@ -2694,10 +2756,11 @@
         final String doublePrefix = prefix + "  ";
         for (int i = mChildren.size() - 1; i >= 0; i--) {
             final WindowContainer<?> child = mChildren.get(i);
-            pw.println(prefix + "* " + child);
+            final TaskFragment tf = child.asTaskFragment();
+            pw.println(prefix + "* " + (tf != null ? tf.toFullString() : child));
             // Only dump non-activity because full activity info is already printed by
             // RootWindowContainer#dumpActivities.
-            if (child.asActivityRecord() == null) {
+            if (tf != null) {
                 child.dump(pw, doublePrefix, dumpAll);
             }
         }
diff --git a/services/core/java/com/android/server/wm/TaskFragmentOrganizerController.java b/services/core/java/com/android/server/wm/TaskFragmentOrganizerController.java
index 2546177..6ca5648 100644
--- a/services/core/java/com/android/server/wm/TaskFragmentOrganizerController.java
+++ b/services/core/java/com/android/server/wm/TaskFragmentOrganizerController.java
@@ -16,12 +16,21 @@
 
 package com.android.server.wm;
 
-import static android.window.TaskFragmentOrganizer.putExceptionInBundle;
+import static android.app.ActivityTaskManager.INVALID_TASK_ID;
+import static android.window.TaskFragmentOrganizer.putErrorInfoInBundle;
+import static android.window.TaskFragmentTransaction.TYPE_ACTIVITY_REPARENT_TO_TASK;
+import static android.window.TaskFragmentTransaction.TYPE_TASK_FRAGMENT_APPEARED;
+import static android.window.TaskFragmentTransaction.TYPE_TASK_FRAGMENT_ERROR;
+import static android.window.TaskFragmentTransaction.TYPE_TASK_FRAGMENT_INFO_CHANGED;
+import static android.window.TaskFragmentTransaction.TYPE_TASK_FRAGMENT_PARENT_INFO_CHANGED;
+import static android.window.TaskFragmentTransaction.TYPE_TASK_FRAGMENT_VANISHED;
 
 import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_WINDOW_ORGANIZER;
 import static com.android.server.wm.TaskFragment.EMBEDDING_ALLOWED;
 import static com.android.server.wm.WindowOrganizerController.configurationsAreEqualForOrganizer;
 
+import static java.util.Objects.requireNonNull;
+
 import android.annotation.IntDef;
 import android.annotation.NonNull;
 import android.annotation.Nullable;
@@ -32,18 +41,21 @@
 import android.os.IBinder;
 import android.os.RemoteException;
 import android.util.ArrayMap;
+import android.util.ArraySet;
 import android.util.Slog;
 import android.util.SparseArray;
 import android.view.RemoteAnimationDefinition;
 import android.window.ITaskFragmentOrganizer;
 import android.window.ITaskFragmentOrganizerController;
 import android.window.TaskFragmentInfo;
+import android.window.TaskFragmentTransaction;
 
 import com.android.internal.protolog.common.ProtoLog;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 import java.util.WeakHashMap;
 
@@ -63,10 +75,12 @@
     private final ArrayMap<IBinder, TaskFragmentOrganizerState> mTaskFragmentOrganizerState =
             new ArrayMap<>();
     /**
-     * A List which manages the TaskFragment pending event {@link PendingTaskFragmentEvent}
+     * Map from {@link ITaskFragmentOrganizer} to a list of related {@link PendingTaskFragmentEvent}
      */
-    private final ArrayList<PendingTaskFragmentEvent> mPendingTaskFragmentEvents =
-            new ArrayList<>();
+    private final ArrayMap<IBinder, List<PendingTaskFragmentEvent>> mPendingTaskFragmentEvents =
+            new ArrayMap<>();
+
+    private final ArraySet<Task> mTmpTaskSet = new ArraySet<>();
 
     TaskFragmentOrganizerController(ActivityTaskManagerService atm) {
         mAtmService = atm;
@@ -82,10 +96,30 @@
         private final ITaskFragmentOrganizer mOrganizer;
         private final int mOrganizerPid;
         private final int mOrganizerUid;
+
+        /**
+         * Map from {@link TaskFragment} to the last {@link TaskFragmentInfo} sent to the
+         * organizer.
+         */
         private final Map<TaskFragment, TaskFragmentInfo> mLastSentTaskFragmentInfos =
                 new WeakHashMap<>();
-        private final Map<TaskFragment, Configuration> mLastSentTaskFragmentParentConfigs =
-                new WeakHashMap<>();
+
+        /**
+         * Map from {@link TaskFragment} to its leaf {@link Task#mTaskId}. Embedded
+         * {@link TaskFragment} will not be reparented until it is removed.
+         */
+        private final Map<TaskFragment, Integer> mTaskFragmentTaskIds = new WeakHashMap<>();
+
+        /**
+         * Map from {@link Task#mTaskId} to the last Task {@link Configuration} sent to the
+         * organizer.
+         */
+        private final SparseArray<Configuration> mLastSentTaskFragmentParentConfigs =
+                new SparseArray<>();
+
+        /**
+         * Map from temporary activity token to the corresponding {@link ActivityRecord}.
+         */
         private final Map<IBinder, ActivityRecord> mTemporaryActivityTokens =
                 new WeakHashMap<>();
 
@@ -136,110 +170,129 @@
         void dispose() {
             while (!mOrganizedTaskFragments.isEmpty()) {
                 final TaskFragment taskFragment = mOrganizedTaskFragments.get(0);
+                // Cleanup before remove to prevent it from sending any additional event, such as
+                // #onTaskFragmentVanished, to the removed organizer.
+                taskFragment.onTaskFragmentOrganizerRemoved();
                 taskFragment.removeImmediately();
                 mOrganizedTaskFragments.remove(taskFragment);
             }
             mOrganizer.asBinder().unlinkToDeath(this, 0 /*flags*/);
         }
 
-        void onTaskFragmentAppeared(TaskFragment tf) {
+        @NonNull
+        TaskFragmentTransaction.Change prepareTaskFragmentAppeared(@NonNull TaskFragment tf) {
             ProtoLog.v(WM_DEBUG_WINDOW_ORGANIZER, "TaskFragment appeared name=%s", tf.getName());
             final TaskFragmentInfo info = tf.getTaskFragmentInfo();
-            try {
-                mOrganizer.onTaskFragmentAppeared(info);
-                mLastSentTaskFragmentInfos.put(tf, info);
-                tf.mTaskFragmentAppearedSent = true;
-            } catch (RemoteException e) {
-                Slog.d(TAG, "Exception sending onTaskFragmentAppeared callback", e);
-            }
-            onTaskFragmentParentInfoChanged(tf);
+            final int taskId = tf.getTask().mTaskId;
+            tf.mTaskFragmentAppearedSent = true;
+            mLastSentTaskFragmentInfos.put(tf, info);
+            mTaskFragmentTaskIds.put(tf, taskId);
+            return new TaskFragmentTransaction.Change(
+                    TYPE_TASK_FRAGMENT_APPEARED)
+                    .setTaskFragmentToken(tf.getFragmentToken())
+                    .setTaskFragmentInfo(info)
+                    .setTaskId(taskId);
         }
 
-        void onTaskFragmentVanished(TaskFragment tf) {
+        @NonNull
+        TaskFragmentTransaction.Change prepareTaskFragmentVanished(@NonNull TaskFragment tf) {
             ProtoLog.v(WM_DEBUG_WINDOW_ORGANIZER, "TaskFragment vanished name=%s", tf.getName());
-            try {
-                mOrganizer.onTaskFragmentVanished(tf.getTaskFragmentInfo());
-            } catch (RemoteException e) {
-                Slog.d(TAG, "Exception sending onTaskFragmentVanished callback", e);
-            }
             tf.mTaskFragmentAppearedSent = false;
             mLastSentTaskFragmentInfos.remove(tf);
-            mLastSentTaskFragmentParentConfigs.remove(tf);
+
+            // Cleanup TaskFragmentParentConfig if this is the last TaskFragment in the Task.
+            final int taskId;
+            if (mTaskFragmentTaskIds.containsKey(tf)) {
+                taskId = mTaskFragmentTaskIds.remove(tf);
+                if (!mTaskFragmentTaskIds.containsValue(taskId)) {
+                    // No more TaskFragment in the Task.
+                    mLastSentTaskFragmentParentConfigs.remove(taskId);
+                }
+            } else {
+                // This can happen if the appeared wasn't sent before remove.
+                taskId = INVALID_TASK_ID;
+            }
+
+            return new TaskFragmentTransaction.Change(TYPE_TASK_FRAGMENT_VANISHED)
+                    .setTaskFragmentToken(tf.getFragmentToken())
+                    .setTaskFragmentInfo(tf.getTaskFragmentInfo())
+                    .setTaskId(taskId);
         }
 
-        void onTaskFragmentInfoChanged(TaskFragment tf) {
-            // Parent config may have changed. The controller will check if there is any important
-            // config change for the organizer.
-            onTaskFragmentParentInfoChanged(tf);
-
+        @Nullable
+        TaskFragmentTransaction.Change prepareTaskFragmentInfoChanged(
+                @NonNull TaskFragment tf) {
             // Check if the info is different from the last reported info.
             final TaskFragmentInfo info = tf.getTaskFragmentInfo();
             final TaskFragmentInfo lastInfo = mLastSentTaskFragmentInfos.get(tf);
             if (info.equalsForTaskFragmentOrganizer(lastInfo) && configurationsAreEqualForOrganizer(
                     info.getConfiguration(), lastInfo.getConfiguration())) {
-                return;
+                return null;
             }
+
             ProtoLog.v(WM_DEBUG_WINDOW_ORGANIZER, "TaskFragment info changed name=%s",
                     tf.getName());
-            try {
-                mOrganizer.onTaskFragmentInfoChanged(info);
-                mLastSentTaskFragmentInfos.put(tf, info);
-            } catch (RemoteException e) {
-                Slog.d(TAG, "Exception sending onTaskFragmentInfoChanged callback", e);
-            }
+            mLastSentTaskFragmentInfos.put(tf, info);
+            return new TaskFragmentTransaction.Change(
+                    TYPE_TASK_FRAGMENT_INFO_CHANGED)
+                    .setTaskFragmentToken(tf.getFragmentToken())
+                    .setTaskFragmentInfo(info)
+                    .setTaskId(tf.getTask().mTaskId);
         }
 
-        void onTaskFragmentParentInfoChanged(TaskFragment tf) {
+        @Nullable
+        TaskFragmentTransaction.Change prepareTaskFragmentParentInfoChanged(
+                @NonNull Task task) {
+            final int taskId = task.mTaskId;
             // Check if the parent info is different from the last reported parent info.
-            if (tf.getParent() == null || tf.getParent().asTask() == null) {
-                mLastSentTaskFragmentParentConfigs.remove(tf);
-                return;
-            }
-            final Task parent = tf.getParent().asTask();
-            final Configuration parentConfig = parent.getConfiguration();
-            final Configuration lastParentConfig = mLastSentTaskFragmentParentConfigs.get(tf);
-            if (configurationsAreEqualForOrganizer(parentConfig, lastParentConfig)
-                    && parentConfig.windowConfiguration.getWindowingMode()
+            final Configuration taskConfig = task.getConfiguration();
+            final Configuration lastParentConfig = mLastSentTaskFragmentParentConfigs.get(taskId);
+            if (configurationsAreEqualForOrganizer(taskConfig, lastParentConfig)
+                    && taskConfig.windowConfiguration.getWindowingMode()
                     == lastParentConfig.windowConfiguration.getWindowingMode()) {
-                return;
+                return null;
             }
+
             ProtoLog.v(WM_DEBUG_WINDOW_ORGANIZER,
                     "TaskFragment parent info changed name=%s parentTaskId=%d",
-                    tf.getName(), parent.mTaskId);
-            try {
-                mOrganizer.onTaskFragmentParentInfoChanged(tf.getFragmentToken(), parentConfig);
-                mLastSentTaskFragmentParentConfigs.put(tf, new Configuration(parentConfig));
-            } catch (RemoteException e) {
-                Slog.d(TAG, "Exception sending onTaskFragmentParentInfoChanged callback", e);
-            }
+                    task.getName(), taskId);
+            mLastSentTaskFragmentParentConfigs.put(taskId, new Configuration(taskConfig));
+            return new TaskFragmentTransaction.Change(TYPE_TASK_FRAGMENT_PARENT_INFO_CHANGED)
+                    .setTaskId(taskId)
+                    .setTaskConfiguration(taskConfig);
         }
 
-        void onTaskFragmentError(IBinder errorCallbackToken, Throwable exception) {
+        @NonNull
+        TaskFragmentTransaction.Change prepareTaskFragmentError(
+                @Nullable IBinder errorCallbackToken, @Nullable TaskFragment taskFragment,
+                int opType, @NonNull Throwable exception) {
             ProtoLog.v(WM_DEBUG_WINDOW_ORGANIZER,
                     "Sending TaskFragment error exception=%s", exception.toString());
-            final Bundle exceptionBundle = putExceptionInBundle(exception);
-            try {
-                mOrganizer.onTaskFragmentError(errorCallbackToken, exceptionBundle);
-            } catch (RemoteException e) {
-                Slog.d(TAG, "Exception sending onTaskFragmentError callback", e);
-            }
+            final TaskFragmentInfo info =
+                    taskFragment != null ? taskFragment.getTaskFragmentInfo() : null;
+            final Bundle errorBundle = putErrorInfoInBundle(exception, info, opType);
+            return new TaskFragmentTransaction.Change(TYPE_TASK_FRAGMENT_ERROR)
+                    .setErrorCallbackToken(errorCallbackToken)
+                    .setErrorBundle(errorBundle);
         }
 
-        void onActivityReparentToTask(ActivityRecord activity) {
+        @Nullable
+        TaskFragmentTransaction.Change prepareActivityReparentToTask(
+                @NonNull ActivityRecord activity) {
             if (activity.finishing) {
                 Slog.d(TAG, "Reparent activity=" + activity.token + " is finishing");
-                return;
+                return null;
             }
             final Task task = activity.getTask();
             if (task == null || task.effectiveUid != mOrganizerUid) {
                 Slog.d(TAG, "Reparent activity=" + activity.token
                         + " is not in a task belong to the organizer app.");
-                return;
+                return null;
             }
             if (task.isAllowedToEmbedActivity(activity, mOrganizerUid) != EMBEDDING_ALLOWED) {
                 Slog.d(TAG, "Reparent activity=" + activity.token
                         + " is not allowed to be embedded.");
-                return;
+                return null;
             }
 
             final IBinder activityToken;
@@ -262,11 +315,10 @@
             }
             ProtoLog.v(WM_DEBUG_WINDOW_ORGANIZER, "Activity=%s reparent to taskId=%d",
                     activity.token, task.mTaskId);
-            try {
-                mOrganizer.onActivityReparentToTask(task.mTaskId, activity.intent, activityToken);
-            } catch (RemoteException e) {
-                Slog.d(TAG, "Exception sending onActivityReparentToTask callback", e);
-            }
+            return new TaskFragmentTransaction.Change(TYPE_ACTIVITY_REPARENT_TO_TASK)
+                    .setTaskId(task.mTaskId)
+                    .setActivityIntent(activity.intent)
+                    .setActivityToken(activityToken);
         }
     }
 
@@ -297,6 +349,7 @@
             }
             mTaskFragmentOrganizerState.put(organizer.asBinder(),
                     new TaskFragmentOrganizerState(organizer, pid, uid));
+            mPendingTaskFragmentEvents.put(organizer.asBinder(), new ArrayList<>());
         }
     }
 
@@ -369,7 +422,7 @@
      */
     @Nullable
     public RemoteAnimationDefinition getRemoteAnimationDefinition(
-            ITaskFragmentOrganizer organizer, int taskId) {
+            @NonNull ITaskFragmentOrganizer organizer, int taskId) {
         synchronized (mGlobalLock) {
             final TaskFragmentOrganizerState organizerState =
                     mTaskFragmentOrganizerState.get(organizer.asBinder());
@@ -379,12 +432,18 @@
         }
     }
 
-    int getTaskFragmentOrganizerUid(ITaskFragmentOrganizer organizer) {
+    int getTaskFragmentOrganizerUid(@NonNull ITaskFragmentOrganizer organizer) {
         final TaskFragmentOrganizerState state = validateAndGetState(organizer);
         return state.mOrganizerUid;
     }
 
-    void onTaskFragmentAppeared(ITaskFragmentOrganizer organizer, TaskFragment taskFragment) {
+    void onTaskFragmentAppeared(@NonNull ITaskFragmentOrganizer organizer,
+            @NonNull TaskFragment taskFragment) {
+        if (taskFragment.getTask() == null) {
+            Slog.w(TAG, "onTaskFragmentAppeared failed because it is not attached tf="
+                    + taskFragment);
+            return;
+        }
         final TaskFragmentOrganizerState state = validateAndGetState(organizer);
         if (!state.addTaskFragment(taskFragment)) {
             return;
@@ -392,27 +451,15 @@
         PendingTaskFragmentEvent pendingEvent = getPendingTaskFragmentEvent(taskFragment,
                 PendingTaskFragmentEvent.EVENT_APPEARED);
         if (pendingEvent == null) {
-            pendingEvent = new PendingTaskFragmentEvent.Builder(
+            addPendingEvent(new PendingTaskFragmentEvent.Builder(
                     PendingTaskFragmentEvent.EVENT_APPEARED, organizer)
                     .setTaskFragment(taskFragment)
-                    .build();
-            mPendingTaskFragmentEvents.add(pendingEvent);
+                    .build());
         }
     }
 
-    void onTaskFragmentInfoChanged(ITaskFragmentOrganizer organizer, TaskFragment taskFragment) {
-        handleTaskFragmentInfoChanged(organizer, taskFragment,
-                PendingTaskFragmentEvent.EVENT_INFO_CHANGED);
-    }
-
-    void onTaskFragmentParentInfoChanged(ITaskFragmentOrganizer organizer,
-            TaskFragment taskFragment) {
-        handleTaskFragmentInfoChanged(organizer, taskFragment,
-                PendingTaskFragmentEvent.EVENT_PARENT_INFO_CHANGED);
-    }
-
-    private void handleTaskFragmentInfoChanged(ITaskFragmentOrganizer organizer,
-            TaskFragment taskFragment, int eventType) {
+    void onTaskFragmentInfoChanged(@NonNull ITaskFragmentOrganizer organizer,
+            @NonNull TaskFragment taskFragment) {
         validateAndGetState(organizer);
         if (!taskFragment.mTaskFragmentAppearedSent) {
             // Skip if TaskFragment still not appeared.
@@ -420,60 +467,61 @@
         }
         PendingTaskFragmentEvent pendingEvent = getLastPendingLifecycleEvent(taskFragment);
         if (pendingEvent == null) {
-            pendingEvent = new PendingTaskFragmentEvent.Builder(eventType, organizer)
-                            .setTaskFragment(taskFragment)
-                            .build();
+            pendingEvent = new PendingTaskFragmentEvent.Builder(
+                    PendingTaskFragmentEvent.EVENT_INFO_CHANGED, organizer)
+                    .setTaskFragment(taskFragment)
+                    .build();
         } else {
             if (pendingEvent.mEventType == PendingTaskFragmentEvent.EVENT_VANISHED) {
                 // Skipped the info changed event if vanished event is pending.
                 return;
             }
             // Remove and add for re-ordering.
-            mPendingTaskFragmentEvents.remove(pendingEvent);
+            removePendingEvent(pendingEvent);
             // Reset the defer time when TaskFragment is changed, so that it can check again if
             // the event should be sent to the organizer, for example the TaskFragment may become
             // empty.
             pendingEvent.mDeferTime = 0;
         }
-        mPendingTaskFragmentEvents.add(pendingEvent);
+        addPendingEvent(pendingEvent);
     }
 
-    void onTaskFragmentVanished(ITaskFragmentOrganizer organizer, TaskFragment taskFragment) {
+    void onTaskFragmentVanished(@NonNull ITaskFragmentOrganizer organizer,
+            @NonNull TaskFragment taskFragment) {
         final TaskFragmentOrganizerState state = validateAndGetState(organizer);
-        for (int i = mPendingTaskFragmentEvents.size() - 1; i >= 0; i--) {
-            PendingTaskFragmentEvent entry = mPendingTaskFragmentEvents.get(i);
-            if (taskFragment == entry.mTaskFragment) {
-                mPendingTaskFragmentEvents.remove(i);
-                if (entry.mEventType == PendingTaskFragmentEvent.EVENT_APPEARED) {
-                    // If taskFragment appeared callback is pending, ignore the vanished request.
-                    return;
-                }
+        final List<PendingTaskFragmentEvent> pendingEvents = mPendingTaskFragmentEvents
+                .get(organizer.asBinder());
+        // Remove any pending events since this TaskFragment is being removed.
+        for (int i = pendingEvents.size() - 1; i >= 0; i--) {
+            final PendingTaskFragmentEvent event = pendingEvents.get(i);
+            if (taskFragment == event.mTaskFragment) {
+                pendingEvents.remove(i);
             }
         }
-        if (!taskFragment.mTaskFragmentAppearedSent) {
-            return;
-        }
-        final PendingTaskFragmentEvent pendingEvent = new PendingTaskFragmentEvent.Builder(
+        addPendingEvent(new PendingTaskFragmentEvent.Builder(
                 PendingTaskFragmentEvent.EVENT_VANISHED, organizer)
                 .setTaskFragment(taskFragment)
-                .build();
-        mPendingTaskFragmentEvents.add(pendingEvent);
+                .build());
         state.removeTaskFragment(taskFragment);
     }
 
-    void onTaskFragmentError(ITaskFragmentOrganizer organizer, IBinder errorCallbackToken,
-            Throwable exception) {
+    void onTaskFragmentError(@NonNull ITaskFragmentOrganizer organizer,
+            @Nullable IBinder errorCallbackToken, @Nullable TaskFragment taskFragment,
+            int opType, @NonNull Throwable exception) {
         validateAndGetState(organizer);
         Slog.w(TAG, "onTaskFragmentError ", exception);
-        final PendingTaskFragmentEvent pendingEvent = new PendingTaskFragmentEvent.Builder(
+        addPendingEvent(new PendingTaskFragmentEvent.Builder(
                 PendingTaskFragmentEvent.EVENT_ERROR, organizer)
                 .setErrorCallbackToken(errorCallbackToken)
+                .setTaskFragment(taskFragment)
                 .setException(exception)
-                .build();
-        mPendingTaskFragmentEvents.add(pendingEvent);
+                .setOpType(opType)
+                .build());
+        // Make sure the error event will be dispatched if there are no other changes.
+        mAtmService.mWindowManager.mWindowPlacerLocked.requestTraversal();
     }
 
-    void onActivityReparentToTask(ActivityRecord activity) {
+    void onActivityReparentToTask(@NonNull ActivityRecord activity) {
         final ITaskFragmentOrganizer organizer;
         if (activity.mLastTaskFragmentOrganizerBeforePip != null) {
             // If the activity is previously embedded in an organized TaskFragment.
@@ -498,17 +546,30 @@
             Slog.w(TAG, "The last TaskFragmentOrganizer no longer exists");
             return;
         }
-        final PendingTaskFragmentEvent pendingEvent = new PendingTaskFragmentEvent.Builder(
+        addPendingEvent(new PendingTaskFragmentEvent.Builder(
                 PendingTaskFragmentEvent.EVENT_ACTIVITY_REPARENT_TO_TASK, organizer)
                 .setActivity(activity)
-                .build();
-        mPendingTaskFragmentEvents.add(pendingEvent);
+                .build());
     }
 
-    private void removeOrganizer(ITaskFragmentOrganizer organizer) {
+    private void addPendingEvent(@NonNull PendingTaskFragmentEvent event) {
+        mPendingTaskFragmentEvents.get(event.mTaskFragmentOrg.asBinder()).add(event);
+    }
+
+    private void removePendingEvent(@NonNull PendingTaskFragmentEvent event) {
+        mPendingTaskFragmentEvents.get(event.mTaskFragmentOrg.asBinder()).remove(event);
+    }
+
+    boolean isOrganizerRegistered(@NonNull ITaskFragmentOrganizer organizer) {
+        return mTaskFragmentOrganizerState.containsKey(organizer.asBinder());
+    }
+
+    private void removeOrganizer(@NonNull ITaskFragmentOrganizer organizer) {
         final TaskFragmentOrganizerState state = validateAndGetState(organizer);
         // remove all of the children of the organized TaskFragment
         state.dispose();
+        // Remove any pending event of this organizer.
+        mPendingTaskFragmentEvents.remove(organizer.asBinder());
         mTaskFragmentOrganizerState.remove(organizer.asBinder());
     }
 
@@ -518,7 +579,9 @@
      * we wouldn't register {@link DeathRecipient} for the organizer, and might not remove the
      * {@link TaskFragment} after the organizer process died.
      */
-    private TaskFragmentOrganizerState validateAndGetState(ITaskFragmentOrganizer organizer) {
+    @NonNull
+    private TaskFragmentOrganizerState validateAndGetState(
+            @NonNull ITaskFragmentOrganizer organizer) {
         final TaskFragmentOrganizerState state =
                 mTaskFragmentOrganizerState.get(organizer.asBinder());
         if (state == null) {
@@ -562,22 +625,29 @@
         private final Throwable mException;
         @Nullable
         private final ActivityRecord mActivity;
+        @Nullable
+        private final Task mTask;
         // Set when the event is deferred due to the host task is invisible. The defer time will
         // be the last active time of the host task.
         private long mDeferTime;
+        private int mOpType;
 
         private PendingTaskFragmentEvent(@EventType int eventType,
                 ITaskFragmentOrganizer taskFragmentOrg,
                 @Nullable TaskFragment taskFragment,
                 @Nullable IBinder errorCallbackToken,
                 @Nullable Throwable exception,
-                @Nullable ActivityRecord activity) {
+                @Nullable ActivityRecord activity,
+                @Nullable Task task,
+                int opType) {
             mEventType = eventType;
             mTaskFragmentOrg = taskFragmentOrg;
             mTaskFragment = taskFragment;
             mErrorCallbackToken = errorCallbackToken;
             mException = exception;
             mActivity = activity;
+            mTask = task;
+            mOpType = opType;
         }
 
         /**
@@ -608,10 +678,13 @@
             private Throwable mException;
             @Nullable
             private ActivityRecord mActivity;
+            @Nullable
+            private Task mTask;
+            private int mOpType;
 
-            Builder(@EventType int eventType, ITaskFragmentOrganizer taskFragmentOrg) {
+            Builder(@EventType int eventType, @NonNull ITaskFragmentOrganizer taskFragmentOrg) {
                 mEventType = eventType;
-                mTaskFragmentOrg = taskFragmentOrg;
+                mTaskFragmentOrg = requireNonNull(taskFragmentOrg);
             }
 
             Builder setTaskFragment(@Nullable TaskFragment taskFragment) {
@@ -624,47 +697,67 @@
                 return this;
             }
 
-            Builder setException(@Nullable Throwable exception) {
-                mException = exception;
+            Builder setException(@NonNull Throwable exception) {
+                mException = requireNonNull(exception);
                 return this;
             }
 
-            Builder setActivity(@Nullable ActivityRecord activity) {
-                mActivity = activity;
+            Builder setActivity(@NonNull ActivityRecord activity) {
+                mActivity = requireNonNull(activity);
+                return this;
+            }
+
+            Builder setTask(@NonNull Task task) {
+                mTask = requireNonNull(task);
+                return this;
+            }
+
+            Builder setOpType(int opType) {
+                mOpType = opType;
                 return this;
             }
 
             PendingTaskFragmentEvent build() {
                 return new PendingTaskFragmentEvent(mEventType, mTaskFragmentOrg, mTaskFragment,
-                        mErrorCallbackToken, mException, mActivity);
+                        mErrorCallbackToken, mException, mActivity, mTask, mOpType);
             }
         }
     }
 
     @Nullable
-    private PendingTaskFragmentEvent getLastPendingLifecycleEvent(TaskFragment tf) {
-        for (int i = mPendingTaskFragmentEvents.size() - 1; i >= 0; i--) {
-            PendingTaskFragmentEvent entry = mPendingTaskFragmentEvents.get(i);
-            if (tf == entry.mTaskFragment && entry.isLifecycleEvent()) {
-                return entry;
+    private PendingTaskFragmentEvent getLastPendingLifecycleEvent(@NonNull TaskFragment tf) {
+        final ITaskFragmentOrganizer organizer = tf.getTaskFragmentOrganizer();
+        final List<PendingTaskFragmentEvent> events = mPendingTaskFragmentEvents
+                .get(organizer.asBinder());
+        for (int i = events.size() - 1; i >= 0; i--) {
+            final PendingTaskFragmentEvent event = events.get(i);
+            if (tf == event.mTaskFragment && event.isLifecycleEvent()) {
+                return event;
             }
         }
         return null;
     }
 
     @Nullable
-    private PendingTaskFragmentEvent getPendingTaskFragmentEvent(TaskFragment taskFragment,
+    private PendingTaskFragmentEvent getPendingTaskFragmentEvent(@NonNull TaskFragment taskFragment,
             int type) {
-        for (int i = mPendingTaskFragmentEvents.size() - 1; i >= 0; i--) {
-            PendingTaskFragmentEvent entry = mPendingTaskFragmentEvents.get(i);
-            if (taskFragment == entry.mTaskFragment && type == entry.mEventType) {
-                return entry;
+        final ITaskFragmentOrganizer organizer = taskFragment.getTaskFragmentOrganizer();
+        final List<PendingTaskFragmentEvent> events = mPendingTaskFragmentEvents
+                .get(organizer.asBinder());
+        for (int i = events.size() - 1; i >= 0; i--) {
+            final PendingTaskFragmentEvent event = events.get(i);
+            if (taskFragment == event.mTaskFragment && type == event.mEventType) {
+                return event;
             }
         }
         return null;
     }
 
     private boolean shouldSendEventWhenTaskInvisible(@NonNull PendingTaskFragmentEvent event) {
+        if (event.mEventType == PendingTaskFragmentEvent.EVENT_ERROR) {
+            return true;
+        }
+
         final TaskFragmentOrganizerState state =
                 mTaskFragmentOrganizerState.get(event.mTaskFragmentOrg.asBinder());
         final TaskFragmentInfo lastInfo = state.mLastSentTaskFragmentInfos.get(event.mTaskFragment);
@@ -680,12 +773,25 @@
                 || mPendingTaskFragmentEvents.isEmpty()) {
             return;
         }
+        final int organizerNum = mPendingTaskFragmentEvents.size();
+        for (int i = 0; i < organizerNum; i++) {
+            final ITaskFragmentOrganizer organizer = mTaskFragmentOrganizerState.get(
+                    mPendingTaskFragmentEvents.keyAt(i)).mOrganizer;
+            dispatchPendingEvents(organizer, mPendingTaskFragmentEvents.valueAt(i));
+        }
+    }
+
+    void dispatchPendingEvents(@NonNull ITaskFragmentOrganizer organizer,
+            @NonNull List<PendingTaskFragmentEvent> pendingEvents) {
+        if (pendingEvents.isEmpty()) {
+            return;
+        }
 
         final ArrayList<Task> visibleTasks = new ArrayList<>();
         final ArrayList<Task> invisibleTasks = new ArrayList<>();
         final ArrayList<PendingTaskFragmentEvent> candidateEvents = new ArrayList<>();
-        for (int i = 0, n = mPendingTaskFragmentEvents.size(); i < n; i++) {
-            final PendingTaskFragmentEvent event = mPendingTaskFragmentEvents.get(i);
+        for (int i = 0, n = pendingEvents.size(); i < n; i++) {
+            final PendingTaskFragmentEvent event = pendingEvents.get(i);
             final Task task = event.mTaskFragment != null ? event.mTaskFragment.getTask() : null;
             if (task != null && (task.lastActiveTime <= event.mDeferTime
                     || !(isTaskVisible(task, visibleTasks, invisibleTasks)
@@ -697,16 +803,35 @@
             candidateEvents.add(event);
         }
         final int numEvents = candidateEvents.size();
+        if (numEvents == 0) {
+            return;
+        }
+
+        mTmpTaskSet.clear();
+        final TaskFragmentTransaction transaction = new TaskFragmentTransaction();
         for (int i = 0; i < numEvents; i++) {
-            dispatchEvent(candidateEvents.get(i));
+            final PendingTaskFragmentEvent event = candidateEvents.get(i);
+            if (event.mEventType == PendingTaskFragmentEvent.EVENT_APPEARED
+                    || event.mEventType == PendingTaskFragmentEvent.EVENT_INFO_CHANGED) {
+                final Task task = event.mTaskFragment.getTask();
+                if (mTmpTaskSet.add(task)) {
+                    // Make sure the organizer know about the Task config.
+                    transaction.addChange(prepareChange(new PendingTaskFragmentEvent.Builder(
+                            PendingTaskFragmentEvent.EVENT_PARENT_INFO_CHANGED, organizer)
+                            .setTask(task)
+                            .build()));
+                }
+            }
+            transaction.addChange(prepareChange(event));
         }
-        if (numEvents > 0) {
-            mPendingTaskFragmentEvents.removeAll(candidateEvents);
-        }
+        mTmpTaskSet.clear();
+        dispatchTransactionInfo(organizer, transaction);
+        pendingEvents.removeAll(candidateEvents);
     }
 
-    private static boolean isTaskVisible(Task task, ArrayList<Task> knownVisibleTasks,
-            ArrayList<Task> knownInvisibleTasks) {
+    private static boolean isTaskVisible(@NonNull Task task,
+            @NonNull ArrayList<Task> knownVisibleTasks,
+            @NonNull ArrayList<Task> knownInvisibleTasks) {
         if (knownVisibleTasks.contains(task)) {
             return true;
         }
@@ -722,43 +847,63 @@
         }
     }
 
-    void dispatchPendingInfoChangedEvent(TaskFragment taskFragment) {
-        PendingTaskFragmentEvent event = getPendingTaskFragmentEvent(taskFragment,
+    void dispatchPendingInfoChangedEvent(@NonNull TaskFragment taskFragment) {
+        final PendingTaskFragmentEvent event = getPendingTaskFragmentEvent(taskFragment,
                 PendingTaskFragmentEvent.EVENT_INFO_CHANGED);
         if (event == null) {
             return;
         }
 
-        dispatchEvent(event);
-        mPendingTaskFragmentEvents.remove(event);
+        final ITaskFragmentOrganizer organizer = taskFragment.getTaskFragmentOrganizer();
+        final TaskFragmentTransaction transaction = new TaskFragmentTransaction();
+        // Make sure the organizer know about the Task config.
+        transaction.addChange(prepareChange(new PendingTaskFragmentEvent.Builder(
+                PendingTaskFragmentEvent.EVENT_PARENT_INFO_CHANGED, organizer)
+                .setTask(taskFragment.getTask())
+                .build()));
+        transaction.addChange(prepareChange(event));
+        dispatchTransactionInfo(event.mTaskFragmentOrg, transaction);
+        mPendingTaskFragmentEvents.get(organizer.asBinder()).remove(event);
     }
 
-    private void dispatchEvent(PendingTaskFragmentEvent event) {
+    private void dispatchTransactionInfo(@NonNull ITaskFragmentOrganizer organizer,
+            @NonNull TaskFragmentTransaction transaction) {
+        if (transaction.isEmpty()) {
+            return;
+        }
+        try {
+            organizer.onTransactionReady(transaction);
+        } catch (RemoteException e) {
+            Slog.d(TAG, "Exception sending TaskFragmentTransaction", e);
+        }
+    }
+
+    @Nullable
+    private TaskFragmentTransaction.Change prepareChange(
+            @NonNull PendingTaskFragmentEvent event) {
         final ITaskFragmentOrganizer taskFragmentOrg = event.mTaskFragmentOrg;
         final TaskFragment taskFragment = event.mTaskFragment;
         final TaskFragmentOrganizerState state =
                 mTaskFragmentOrganizerState.get(taskFragmentOrg.asBinder());
         if (state == null) {
-            return;
+            return null;
         }
         switch (event.mEventType) {
             case PendingTaskFragmentEvent.EVENT_APPEARED:
-                state.onTaskFragmentAppeared(taskFragment);
-                break;
+                return state.prepareTaskFragmentAppeared(taskFragment);
             case PendingTaskFragmentEvent.EVENT_VANISHED:
-                state.onTaskFragmentVanished(taskFragment);
-                break;
+                return state.prepareTaskFragmentVanished(taskFragment);
             case PendingTaskFragmentEvent.EVENT_INFO_CHANGED:
-                state.onTaskFragmentInfoChanged(taskFragment);
-                break;
+                return state.prepareTaskFragmentInfoChanged(taskFragment);
             case PendingTaskFragmentEvent.EVENT_PARENT_INFO_CHANGED:
-                state.onTaskFragmentParentInfoChanged(taskFragment);
-                break;
+                return state.prepareTaskFragmentParentInfoChanged(event.mTask);
             case PendingTaskFragmentEvent.EVENT_ERROR:
-                state.onTaskFragmentError(event.mErrorCallbackToken, event.mException);
-                break;
+                return state.prepareTaskFragmentError(event.mErrorCallbackToken, taskFragment,
+                        event.mOpType, event.mException);
             case PendingTaskFragmentEvent.EVENT_ACTIVITY_REPARENT_TO_TASK:
-                state.onActivityReparentToTask(event.mActivity);
+                return state.prepareActivityReparentToTask(event.mActivity);
+            default:
+                throw new IllegalArgumentException("Unknown TaskFragmentEvent=" + event.mEventType);
         }
     }
 
diff --git a/services/core/java/com/android/server/wm/TaskOrganizerController.java b/services/core/java/com/android/server/wm/TaskOrganizerController.java
index 6e84681..c6989ef 100644
--- a/services/core/java/com/android/server/wm/TaskOrganizerController.java
+++ b/services/core/java/com/android/server/wm/TaskOrganizerController.java
@@ -36,6 +36,7 @@
 import android.os.IBinder;
 import android.os.Parcel;
 import android.os.RemoteException;
+import android.util.ArrayMap;
 import android.util.Slog;
 import android.util.proto.ProtoOutputStream;
 import android.view.Display;
@@ -55,7 +56,6 @@
 
 import java.io.PrintWriter;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
@@ -94,7 +94,7 @@
      * lifecycle order since we may be updating the visibility of task surface controls in a pending
      * transaction before they are presented to the task org.
      */
-    private class TaskOrganizerCallbacks {
+    private static class TaskOrganizerCallbacks {
         final ITaskOrganizer mTaskOrganizer;
         final Consumer<Runnable> mDeferTaskOrgCallbacksConsumer;
 
@@ -123,7 +123,6 @@
             }
         }
 
-
         void onTaskVanished(Task task) {
             ProtoLog.v(WM_DEBUG_WINDOW_ORGANIZER, "Task vanished taskId=%d", task.mTaskId);
             final RunningTaskInfo taskInfo = task.getTaskInfo();
@@ -173,11 +172,160 @@
         }
     }
 
+    /**
+     * Maintains a list of all the pending events for a given {@link android.window.TaskOrganizer}
+     */
+    static final class TaskOrganizerPendingEventsQueue {
+        private final WeakHashMap<Task, RunningTaskInfo> mLastSentTaskInfos = new WeakHashMap<>();
+        private final TaskOrganizerState mOrganizerState;
+        private RunningTaskInfo mTmpTaskInfo;
+        // Pending task events due to layout deferred.
+        private final ArrayList<PendingTaskEvent> mPendingTaskEvents = new ArrayList<>();
+
+        TaskOrganizerPendingEventsQueue(TaskOrganizerState taskOrganizerState) {
+            mOrganizerState = taskOrganizerState;
+        }
+
+        @VisibleForTesting
+        public ArrayList<PendingTaskEvent> getPendingEventList() {
+            return mPendingTaskEvents;
+        }
+
+        int numPendingTaskEvents() {
+            return mPendingTaskEvents.size();
+        }
+
+        void clearPendingTaskEvents() {
+            mPendingTaskEvents.clear();
+        }
+
+        void addPendingTaskEvent(PendingTaskEvent event) {
+            mPendingTaskEvents.add(event);
+        }
+
+        void removePendingTaskEvent(PendingTaskEvent event) {
+            mPendingTaskEvents.remove(event);
+        }
+
+        /**
+         * Removes all the pending task events for the given {@code task}.
+         *
+         * @param task
+         * @return true if a {@link PendingTaskEvent#EVENT_APPEARED} is still pending for the given
+         * {code task}.
+         */
+        boolean removePendingTaskEvents(Task task) {
+            boolean foundPendingAppearedEvents = false;
+            for (int i = mPendingTaskEvents.size() - 1; i >= 0; i--) {
+                PendingTaskEvent entry = mPendingTaskEvents.get(i);
+                if (task.mTaskId == entry.mTask.mTaskId) {
+                    // This task is vanished so remove all pending event of it.
+                    mPendingTaskEvents.remove(i);
+
+                    if (entry.mEventType == PendingTaskEvent.EVENT_APPEARED) {
+                        foundPendingAppearedEvents = true;
+                    }
+                }
+            }
+            return foundPendingAppearedEvents;
+        }
+
+        @Nullable
+        private PendingTaskEvent getPendingTaskEvent(Task task, int type) {
+            for (int i = mPendingTaskEvents.size() - 1; i >= 0; i--) {
+                PendingTaskEvent entry = mPendingTaskEvents.get(i);
+                if (task.mTaskId == entry.mTask.mTaskId && type == entry.mEventType) {
+                    return entry;
+                }
+            }
+            return null;
+        }
+
+        @VisibleForTesting
+        @Nullable
+        PendingTaskEvent getPendingLifecycleTaskEvent(Task task) {
+            for (int i = mPendingTaskEvents.size() - 1; i >= 0; i--) {
+                PendingTaskEvent entry = mPendingTaskEvents.get(i);
+                if (task.mTaskId == entry.mTask.mTaskId && entry.isLifecycleEvent()) {
+                    return entry;
+                }
+            }
+            return null;
+        }
+
+        void dispatchPendingEvents() {
+            if (mPendingTaskEvents.isEmpty()) {
+                return;
+            }
+            for (int i = 0, n = mPendingTaskEvents.size(); i < n; i++) {
+                dispatchPendingEvent(mPendingTaskEvents.get(i));
+            }
+            mPendingTaskEvents.clear();
+        }
+
+        private void dispatchPendingEvent(PendingTaskEvent event) {
+            final Task task = event.mTask;
+            switch (event.mEventType) {
+                case PendingTaskEvent.EVENT_APPEARED:
+                    if (task.taskAppearedReady()) {
+                        mOrganizerState.mOrganizer.onTaskAppeared(task);
+                    }
+                    break;
+                case PendingTaskEvent.EVENT_VANISHED:
+                    mOrganizerState.mOrganizer.onTaskVanished(task);
+                    mLastSentTaskInfos.remove(task);
+                    break;
+                case PendingTaskEvent.EVENT_INFO_CHANGED:
+                    dispatchTaskInfoChanged(event.mTask, event.mForce);
+                    break;
+                case PendingTaskEvent.EVENT_ROOT_BACK_PRESSED:
+                    mOrganizerState.mOrganizer.onBackPressedOnTaskRoot(task);
+                    break;
+            }
+        }
+
+        private void dispatchTaskInfoChanged(Task task, boolean force) {
+            RunningTaskInfo lastInfo = mLastSentTaskInfos.get(task);
+            if (mTmpTaskInfo == null) {
+                mTmpTaskInfo = new RunningTaskInfo();
+            }
+            mTmpTaskInfo.configuration.unset();
+            task.fillTaskInfo(mTmpTaskInfo);
+
+            boolean changed = !mTmpTaskInfo
+                    .equalsForTaskOrganizer(lastInfo)
+                    || !configurationsAreEqualForOrganizer(
+                    mTmpTaskInfo.configuration,
+                    lastInfo.configuration);
+            if (!(changed || force)) {
+                // mTmpTaskInfo will be reused next time.
+                return;
+            }
+            final RunningTaskInfo newInfo = mTmpTaskInfo;
+            mLastSentTaskInfos.put(task,
+                    mTmpTaskInfo);
+            // Since we've stored this, clean up the reference so a new one will be created next
+            // time.
+            // Transferring it this way means we only have to construct new RunningTaskInfos when
+            // they change.
+            mTmpTaskInfo = null;
+
+            if (task.isOrganized()) {
+                // Because we defer sending taskAppeared() until the app has drawn, we may receive a
+                // configuration change before the state actually has the task registered. As such
+                // we should ignore these change events to the organizer until taskAppeared(). If
+                // the task was created by the organizer, then we always send the info change.
+                mOrganizerState.mOrganizer.onTaskInfoChanged(task, newInfo);
+            }
+        }
+    }
+
     @VisibleForTesting
     class TaskOrganizerState {
         private final TaskOrganizerCallbacks mOrganizer;
         private final DeathRecipient mDeathRecipient;
         private final ArrayList<Task> mOrganizedTasks = new ArrayList<>();
+        private final TaskOrganizerPendingEventsQueue mPendingEventsQueue;
         private final int mUid;
 
         TaskOrganizerState(ITaskOrganizer organizer, int uid) {
@@ -187,6 +335,7 @@
                             : mService.mWindowManager.mAnimator::addAfterPrepareSurfacesRunnable;
             mOrganizer = new TaskOrganizerCallbacks(organizer, deferTaskOrgCallbacksConsumer);
             mDeathRecipient = new DeathRecipient(organizer);
+            mPendingEventsQueue = new TaskOrganizerPendingEventsQueue(this);
             try {
                 organizer.asBinder().linkToDeath(mDeathRecipient, 0);
             } catch (RemoteException e) {
@@ -200,6 +349,11 @@
             return mDeathRecipient;
         }
 
+        @VisibleForTesting
+        TaskOrganizerPendingEventsQueue getPendingEventsQueue() {
+            return mPendingEventsQueue;
+        }
+
         /**
          * Register this task with this state, but doesn't trigger the task appeared callback to
          * the organizer.
@@ -263,8 +417,7 @@
                     // updateTaskOrganizerState should remove the task from the list, but still
                     // check it again to avoid while-loop isn't terminate.
                     if (removeTask(t, t.mRemoveWithTaskOrganizer)) {
-                        TaskOrganizerController.this.onTaskVanishedInternal(
-                                mOrganizer.mTaskOrganizer, t);
+                        TaskOrganizerController.this.onTaskVanishedInternal(this, t);
                     }
                 }
                 if (mService.getTransitionController().isShellTransitionsEnabled()) {
@@ -278,8 +431,9 @@
                 }
             }
 
-            // Remove organizer state after removing tasks so we get a chance to send
-            // onTaskVanished.
+            // Pending events queue for this organizer need to be cleared because this organizer
+            // has either died or unregistered itself.
+            mPendingEventsQueue.clearPendingTaskEvents();
             mTaskOrganizerStates.remove(mOrganizer.getBinder());
         }
 
@@ -320,14 +474,10 @@
 
     // List of task organizers by priority
     private final LinkedList<ITaskOrganizer> mTaskOrganizers = new LinkedList<>();
-    private final HashMap<IBinder, TaskOrganizerState> mTaskOrganizerStates = new HashMap<>();
-    private final WeakHashMap<Task, RunningTaskInfo> mLastSentTaskInfos = new WeakHashMap<>();
-    // Pending task events due to layout deferred.
-    private final ArrayList<PendingTaskEvent> mPendingTaskEvents = new ArrayList<>();
+    private final ArrayMap<IBinder, TaskOrganizerState> mTaskOrganizerStates = new ArrayMap<>();
     // Set of organized tasks (by taskId) that dispatch back pressed to their organizers
     private final HashSet<Integer> mInterceptBackPressedOnRootTasks = new HashSet();
 
-    private RunningTaskInfo mTmpTaskInfo;
     private Consumer<Runnable> mDeferTaskOrgCallbacksConsumer;
 
     TaskOrganizerController(ActivityTaskManagerService atm) {
@@ -354,11 +504,6 @@
         mDeferTaskOrgCallbacksConsumer = consumer;
     }
 
-    @VisibleForTesting
-    ArrayList<PendingTaskEvent> getPendingEventList() {
-        return mPendingTaskEvents;
-    }
-
     /**
      * Register a TaskOrganizer to manage tasks as they enter the a supported windowing mode.
      */
@@ -382,11 +527,12 @@
                 mService.mRootWindowContainer.forAllTasks((task) -> {
                     boolean returnTask = !task.mCreatedByOrganizer;
                     task.updateTaskOrganizerState(returnTask /* skipTaskAppeared */);
-                    if (returnTask) {
-                        SurfaceControl outSurfaceControl = state.addTaskWithoutCallback(task,
+                    // It is possible for the task to not yet have a surface control, so ensure that
+                    // the update succeeded in setting the organizer for the task before returning
+                    if (task.isOrganized() && returnTask) {
+                        SurfaceControl taskLeash = state.addTaskWithoutCallback(task,
                                 "TaskOrganizerController.registerTaskOrganizer");
-                        taskInfos.add(
-                                new TaskAppearedInfo(task.getTaskInfo(), outSurfaceControl));
+                        taskInfos.add(new TaskAppearedInfo(task.getTaskInfo(), taskLeash));
                     }
                 });
             };
@@ -486,6 +632,11 @@
         final Rect mainFrame = window.getRelativeFrame();
         final StartingWindowAnimationAdaptor adaptor = new StartingWindowAnimationAdaptor();
         window.startAnimation(t, adaptor, false, ANIMATION_TYPE_STARTING_REVEAL);
+        if (adaptor.mAnimationLeash == null) {
+            Slog.e(TAG, "Cannot start starting window animation, the window " + window
+                    + " was removed");
+            return null;
+        }
         t.setPosition(adaptor.mAnimationLeash, mainFrame.left, mainFrame.top);
         return adaptor.mAnimationLeash;
     }
@@ -533,13 +684,15 @@
         if (topActivity != null) {
             removalInfo.deferRemoveForIme = topActivity.mDisplayContent
                     .mayImeShowOnLaunchingActivity(topActivity);
-            if (removalInfo.playRevealAnimation && playShiftUpAnimation) {
-                final WindowState mainWindow =
-                        topActivity.findMainWindow(false/* includeStartingApp */);
-                if (mainWindow != null) {
-                    removalInfo.windowAnimationLeash = applyStartingWindowAnimation(mainWindow);
-                    removalInfo.mainFrame = mainWindow.getRelativeFrame();
-                }
+            final WindowState mainWindow =
+                    topActivity.findMainWindow(false/* includeStartingApp */);
+            // No app window for this activity, app might be crashed.
+            // Remove starting window immediately without playing reveal animation.
+            if (mainWindow == null || mainWindow.mRemoved) {
+                removalInfo.playRevealAnimation = false;
+            } else if (removalInfo.playRevealAnimation && playShiftUpAnimation) {
+                removalInfo.windowAnimationLeash = applyStartingWindowAnimation(mainWindow);
+                removalInfo.mainFrame = mainWindow.getRelativeFrame();
             }
         }
         try {
@@ -592,10 +745,13 @@
     void onTaskAppeared(ITaskOrganizer organizer, Task task) {
         final TaskOrganizerState state = mTaskOrganizerStates.get(organizer.asBinder());
         if (state != null && state.addTask(task)) {
-            PendingTaskEvent pending = getPendingTaskEvent(task, PendingTaskEvent.EVENT_APPEARED);
+            final TaskOrganizerPendingEventsQueue pendingEvents =
+                    state.mPendingEventsQueue;
+            PendingTaskEvent pending = pendingEvents.getPendingTaskEvent(task,
+                    PendingTaskEvent.EVENT_APPEARED);
             if (pending == null) {
-                pending = new PendingTaskEvent(task, PendingTaskEvent.EVENT_APPEARED);
-                mPendingTaskEvents.add(pending);
+                pendingEvents.addPendingTaskEvent(new PendingTaskEvent(task,
+                        PendingTaskEvent.EVENT_APPEARED));
             }
         }
     }
@@ -603,26 +759,25 @@
     void onTaskVanished(ITaskOrganizer organizer, Task task) {
         final TaskOrganizerState state = mTaskOrganizerStates.get(organizer.asBinder());
         if (state != null && state.removeTask(task, task.mRemoveWithTaskOrganizer)) {
-            onTaskVanishedInternal(organizer, task);
+            onTaskVanishedInternal(state, task);
         }
     }
 
-    private void onTaskVanishedInternal(ITaskOrganizer organizer, Task task) {
-        for (int i = mPendingTaskEvents.size() - 1; i >= 0; i--) {
-            PendingTaskEvent entry = mPendingTaskEvents.get(i);
-            if (task.mTaskId == entry.mTask.mTaskId && entry.mTaskOrg == organizer) {
-                // This task is vanished so remove all pending event of it.
-                mPendingTaskEvents.remove(i);
-                if (entry.mEventType == PendingTaskEvent.EVENT_APPEARED) {
-                    // If task appeared callback still pend, ignore this callback too.
-                    return;
-                }
-            }
+    private void onTaskVanishedInternal(TaskOrganizerState organizerState, Task task) {
+        if (organizerState == null) {
+            Slog.i(TAG, "cannot send onTaskVanished because organizer state is not "
+                    + "present for this organizer");
+            return;
         }
-
-        PendingTaskEvent pending =
-                new PendingTaskEvent(task, organizer, PendingTaskEvent.EVENT_VANISHED);
-        mPendingTaskEvents.add(pending);
+        TaskOrganizerPendingEventsQueue pendingEventsQueue =
+                organizerState.mPendingEventsQueue;
+        boolean hadPendingAppearedEvents =
+                pendingEventsQueue.removePendingTaskEvents(task);
+        if (hadPendingAppearedEvents) {
+            return;
+        }
+        pendingEventsQueue.addPendingTaskEvent(new PendingTaskEvent(task,
+                organizerState.mOrganizer.mTaskOrganizer, PendingTaskEvent.EVENT_VANISHED));
     }
 
     @Override
@@ -690,48 +845,13 @@
     }
 
     void dispatchPendingEvents() {
-        if (mService.mWindowManager.mWindowPlacerLocked.isLayoutDeferred()
-                || mPendingTaskEvents.isEmpty()) {
+        if (mService.mWindowManager.mWindowPlacerLocked.isLayoutDeferred()) {
             return;
         }
-
-        for (int i = 0, n = mPendingTaskEvents.size(); i < n; i++) {
-            PendingTaskEvent event = mPendingTaskEvents.get(i);
-            final Task task = event.mTask;
-            final TaskOrganizerState state;
-            switch (event.mEventType) {
-                case PendingTaskEvent.EVENT_APPEARED:
-                    state = mTaskOrganizerStates.get(event.mTaskOrg.asBinder());
-                    if (state != null && task.taskAppearedReady()) {
-                        state.mOrganizer.onTaskAppeared(task);
-                    }
-                    break;
-                case PendingTaskEvent.EVENT_VANISHED:
-                    // TaskOrganizerState cannot be used here because it might have already been
-                    // removed.
-                    // The state is removed when an organizer dies or is unregistered. In order to
-                    // send the pending vanished task events, the mTaskOrg from event is used.
-                    // These events should not ideally be sent and will be removed as part of
-                    // b/224812558.
-                    try {
-                        event.mTaskOrg.onTaskVanished(task.getTaskInfo());
-                    } catch (RemoteException ex) {
-                        Slog.e(TAG, "Exception sending onTaskVanished callback", ex);
-                    }
-                    mLastSentTaskInfos.remove(task);
-                    break;
-                case PendingTaskEvent.EVENT_INFO_CHANGED:
-                    dispatchTaskInfoChanged(event.mTask, event.mForce);
-                    break;
-                case PendingTaskEvent.EVENT_ROOT_BACK_PRESSED:
-                    state = mTaskOrganizerStates.get(event.mTaskOrg.asBinder());
-                    if (state != null) {
-                        state.mOrganizer.onBackPressedOnTaskRoot(task);
-                    }
-                    break;
-            }
+        for (int taskOrgIdx = 0; taskOrgIdx < mTaskOrganizerStates.size(); taskOrgIdx++) {
+            TaskOrganizerState taskOrganizerState = mTaskOrganizerStates.valueAt(taskOrgIdx);
+            taskOrganizerState.mPendingEventsQueue.dispatchPendingEvents();
         }
-        mPendingTaskEvents.clear();
     }
 
     void reportImeDrawnOnTask(Task task) {
@@ -750,20 +870,30 @@
             // Skip if task still not appeared.
             return;
         }
-        if (force && mPendingTaskEvents.isEmpty()) {
+        final TaskOrganizerState taskOrganizerState =
+                mTaskOrganizerStates.get(task.mTaskOrganizer.asBinder());
+        final TaskOrganizerPendingEventsQueue pendingEventsQueue =
+                taskOrganizerState.mPendingEventsQueue;
+        if (pendingEventsQueue == null) {
+            Slog.i(TAG, "cannot send onTaskInfoChanged because pending events queue is not "
+                    + "present for this organizer");
+            return;
+        }
+        if (force && pendingEventsQueue.numPendingTaskEvents() == 0) {
             // There are task-info changed events do not result in
             // - RootWindowContainer#performSurfacePlacementNoTrace OR
             // - WindowAnimator#animate
             // For instance, when an app requesting aspect ratio change when in PiP mode.
             // To solve this, we directly dispatch the pending event if there are no events queued (
             // otherwise, all pending events should be dispatched on next drawn).
-            dispatchTaskInfoChanged(task, true /* force */);
+            pendingEventsQueue.dispatchTaskInfoChanged(task, true /* force */);
             return;
         }
 
         // Defer task info reporting while layout is deferred. This is because layout defer
         // blocks tend to do lots of re-ordering which can mess up animations in receivers.
-        PendingTaskEvent pending = getPendingLifecycleTaskEvent(task);
+        PendingTaskEvent pending = pendingEventsQueue
+                .getPendingLifecycleTaskEvent(task);
         if (pending == null) {
             pending = new PendingTaskEvent(task, PendingTaskEvent.EVENT_INFO_CHANGED);
         } else {
@@ -774,45 +904,10 @@
                 return;
             }
             // Remove and add for re-ordering.
-            mPendingTaskEvents.remove(pending);
+            pendingEventsQueue.removePendingTaskEvent(pending);
         }
         pending.mForce |= force;
-        mPendingTaskEvents.add(pending);
-    }
-
-    private void dispatchTaskInfoChanged(Task task, boolean force) {
-        RunningTaskInfo lastInfo = mLastSentTaskInfos.get(task);
-        if (mTmpTaskInfo == null) {
-            mTmpTaskInfo = new RunningTaskInfo();
-        }
-        mTmpTaskInfo.configuration.unset();
-        task.fillTaskInfo(mTmpTaskInfo);
-
-        boolean changed = !mTmpTaskInfo.equalsForTaskOrganizer(lastInfo)
-                || !configurationsAreEqualForOrganizer(
-                        mTmpTaskInfo.configuration, lastInfo.configuration);
-        if (!(changed || force)) {
-            // mTmpTaskInfo will be reused next time.
-            return;
-        }
-        final RunningTaskInfo newInfo = mTmpTaskInfo;
-        mLastSentTaskInfos.put(task, mTmpTaskInfo);
-        // Since we've stored this, clean up the reference so a new one will be created next time.
-        // Transferring it this way means we only have to construct new RunningTaskInfos when they
-        // change.
-        mTmpTaskInfo = null;
-
-        if (task.isOrganized()) {
-            // Because we defer sending taskAppeared() until the app has drawn, we may receive a
-            // configuration change before the state actually has the task registered. As such we
-            // should ignore these change events to the organizer until taskAppeared(). If the task
-            // was created by the organizer, then we always send the info change.
-            final TaskOrganizerState state = mTaskOrganizerStates.get(
-                    task.mTaskOrganizer.asBinder());
-            if (state != null) {
-                state.mOrganizer.onTaskInfoChanged(task, newInfo);
-            }
-        }
+        pendingEventsQueue.addPendingTaskEvent(pending);
     }
 
     @Override
@@ -1018,50 +1113,36 @@
                 || !mInterceptBackPressedOnRootTasks.contains(task.mTaskId)) {
             return false;
         }
+        final TaskOrganizerPendingEventsQueue pendingEventsQueue =
+                mTaskOrganizerStates.get(task.mTaskOrganizer.asBinder())
+                        .mPendingEventsQueue;
+        if (pendingEventsQueue == null) {
+            Slog.w(TAG, "cannot get handle BackPressedOnTaskRoot because organizerState is "
+                    + "not present");
+            return false;
+        }
 
         PendingTaskEvent pendingVanished =
-                getPendingTaskEvent(task, PendingTaskEvent.EVENT_VANISHED);
+                pendingEventsQueue.getPendingTaskEvent(task,
+                        PendingTaskEvent.EVENT_VANISHED);
         if (pendingVanished != null) {
             // This task will vanish before this callback so just ignore.
             return false;
         }
 
-        PendingTaskEvent pending = getPendingTaskEvent(
+        PendingTaskEvent pending = pendingEventsQueue.getPendingTaskEvent(
                 task, PendingTaskEvent.EVENT_ROOT_BACK_PRESSED);
         if (pending == null) {
             pending = new PendingTaskEvent(task, PendingTaskEvent.EVENT_ROOT_BACK_PRESSED);
         } else {
             // Pending already exist, remove and add for re-ordering.
-            mPendingTaskEvents.remove(pending);
+            pendingEventsQueue.removePendingTaskEvent(pending);
         }
-        mPendingTaskEvents.add(pending);
+        pendingEventsQueue.addPendingTaskEvent(pending);
         mService.mWindowManager.mWindowPlacerLocked.requestTraversal();
         return true;
     }
 
-    @Nullable
-    private PendingTaskEvent getPendingTaskEvent(Task task, int type) {
-        for (int i = mPendingTaskEvents.size() - 1; i >= 0; i--) {
-            PendingTaskEvent entry = mPendingTaskEvents.get(i);
-            if (task.mTaskId == entry.mTask.mTaskId && type == entry.mEventType) {
-                return entry;
-            }
-        }
-        return null;
-    }
-
-    @VisibleForTesting
-    @Nullable
-    PendingTaskEvent getPendingLifecycleTaskEvent(Task task) {
-        for (int i = mPendingTaskEvents.size() - 1; i >= 0; i--) {
-            PendingTaskEvent entry = mPendingTaskEvents.get(i);
-            if (task.mTaskId == entry.mTask.mTaskId && entry.isLifecycleEvent()) {
-                return entry;
-            }
-        }
-        return null;
-    }
-
     public void dump(PrintWriter pw, String prefix) {
         final String innerPrefix = prefix + "  ";
         pw.print(prefix); pw.println("TaskOrganizerController:");
@@ -1084,4 +1165,9 @@
     TaskOrganizerState getTaskOrganizerState(IBinder taskOrganizer) {
         return mTaskOrganizerStates.get(taskOrganizer);
     }
+
+    @VisibleForTesting
+    TaskOrganizerPendingEventsQueue getTaskOrganizerPendingEvents(IBinder taskOrganizer) {
+        return mTaskOrganizerStates.get(taskOrganizer).mPendingEventsQueue;
+    }
 }
diff --git a/services/core/java/com/android/server/wm/TaskPositioner.java b/services/core/java/com/android/server/wm/TaskPositioner.java
index 47c397d..03ca4fd 100644
--- a/services/core/java/com/android/server/wm/TaskPositioner.java
+++ b/services/core/java/com/android/server/wm/TaskPositioner.java
@@ -41,7 +41,6 @@
 import android.os.Binder;
 import android.os.IBinder;
 import android.os.InputConfig;
-import android.os.Process;
 import android.os.RemoteException;
 import android.os.Trace;
 import android.util.DisplayMetrics;
@@ -222,8 +221,8 @@
         mDragWindowHandle.token = mClientChannel.getToken();
         mDragWindowHandle.layoutParamsType = WindowManager.LayoutParams.TYPE_DRAG;
         mDragWindowHandle.dispatchingTimeoutMillis = DEFAULT_DISPATCHING_TIMEOUT_MILLIS;
-        mDragWindowHandle.ownerPid = Process.myPid();
-        mDragWindowHandle.ownerUid = Process.myUid();
+        mDragWindowHandle.ownerPid = WindowManagerService.MY_PID;
+        mDragWindowHandle.ownerUid = WindowManagerService.MY_UID;
         mDragWindowHandle.scaleFactor = 1.0f;
         // When dragging the window around, we do not want to steal focus for the window.
         mDragWindowHandle.inputConfig = InputConfig.NOT_FOCUSABLE;
diff --git a/services/core/java/com/android/server/wm/TaskSnapshotController.java b/services/core/java/com/android/server/wm/TaskSnapshotController.java
index 814656d..534616f 100644
--- a/services/core/java/com/android/server/wm/TaskSnapshotController.java
+++ b/services/core/java/com/android/server/wm/TaskSnapshotController.java
@@ -47,6 +47,7 @@
 import android.hardware.HardwareBuffer;
 import android.os.Environment;
 import android.os.Handler;
+import android.os.Trace;
 import android.util.ArraySet;
 import android.util.Pair;
 import android.util.Slog;
@@ -391,8 +392,10 @@
     SurfaceControl.ScreenshotHardwareBuffer createTaskSnapshot(@NonNull Task task,
             TaskSnapshot.Builder builder) {
         Point taskSize = new Point();
+        Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "createTaskSnapshot");
         final SurfaceControl.ScreenshotHardwareBuffer taskSnapshot = createTaskSnapshot(task,
                 mHighResTaskSnapshotScale, builder.getPixelFormat(), taskSize, builder);
+        Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER);
         builder.setTaskSize(taskSize);
         return taskSnapshot;
     }
diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java
index f6f9020..bbc95a1 100644
--- a/services/core/java/com/android/server/wm/Transition.java
+++ b/services/core/java/com/android/server/wm/Transition.java
@@ -27,6 +27,7 @@
 import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_SEAMLESS;
 import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_UNSPECIFIED;
 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
+import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
 import static android.view.WindowManager.TRANSIT_CHANGE;
 import static android.view.WindowManager.TRANSIT_CLOSE;
 import static android.view.WindowManager.TRANSIT_FLAG_IS_RECENTS;
@@ -45,13 +46,18 @@
 import static android.view.WindowManager.transitTypeToString;
 import static android.window.TransitionInfo.FLAG_DISPLAY_HAS_ALERT_WINDOWS;
 import static android.window.TransitionInfo.FLAG_IS_DISPLAY;
+import static android.window.TransitionInfo.FLAG_IS_EMBEDDED;
+import static android.window.TransitionInfo.FLAG_IS_INPUT_METHOD;
 import static android.window.TransitionInfo.FLAG_IS_VOICE_INTERACTION;
 import static android.window.TransitionInfo.FLAG_IS_WALLPAPER;
 import static android.window.TransitionInfo.FLAG_OCCLUDES_KEYGUARD;
 import static android.window.TransitionInfo.FLAG_SHOW_WALLPAPER;
 import static android.window.TransitionInfo.FLAG_STARTING_WINDOW_TRANSFER_RECIPIENT;
 import static android.window.TransitionInfo.FLAG_TRANSLUCENT;
+import static android.window.TransitionInfo.FLAG_WILL_IME_SHOWN;
 
+import static com.android.server.wm.ActivityRecord.State.RESUMED;
+import static com.android.server.wm.ActivityTaskManagerInternal.APP_TRANSITION_RECENTS_ANIM;
 import static com.android.server.wm.ActivityTaskManagerInternal.APP_TRANSITION_SPLASH_SCREEN;
 import static com.android.server.wm.ActivityTaskManagerInternal.APP_TRANSITION_WINDOWS_DRAWN;
 
@@ -80,11 +86,9 @@
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.graphics.ColorUtils;
-import com.android.internal.inputmethod.SoftInputShowHideReason;
 import com.android.internal.protolog.ProtoLogGroup;
 import com.android.internal.protolog.common.ProtoLog;
 import com.android.internal.util.function.pooled.PooledLambda;
-import com.android.server.LocalServices;
 import com.android.server.inputmethod.InputMethodManagerInternal;
 
 import java.lang.annotation.Retention;
@@ -127,12 +131,18 @@
      */
     private static final int STATE_ABORT = 3;
 
+    /**
+     * This transition has finished playing successfully.
+     */
+    private static final int STATE_FINISHED = 4;
+
     @IntDef(prefix = { "STATE_" }, value = {
             STATE_PENDING,
             STATE_COLLECTING,
             STATE_STARTED,
             STATE_PLAYING,
-            STATE_ABORT
+            STATE_ABORT,
+            STATE_FINISHED
     })
     @Retention(RetentionPolicy.SOURCE)
     @interface TransitionState {}
@@ -189,6 +199,9 @@
     private boolean mNavBarAttachedToApp = false;
     private int mRecentsDisplayId = INVALID_DISPLAY;
 
+    /** The delay for light bar appearance animation. */
+    long mStatusBarTransitionDelay;
+
     /** @see #setCanPipOnFinish */
     private boolean mCanPipOnFinish = true;
 
@@ -198,6 +211,8 @@
         mFlags = flags;
         mController = controller;
         mSyncEngine = syncEngine;
+
+        controller.mTransitionTracer.logState(this);
     }
 
     void addFlag(int flag) {
@@ -210,10 +225,28 @@
             mTransientLaunches = new ArrayMap<>();
         }
         mTransientLaunches.put(activity, restoreBelow);
+        setTransientLaunchToChanges(activity);
+
+        if (restoreBelow != null) {
+            final ChangeInfo info = mChanges.get(restoreBelow);
+            if (info != null) {
+                info.mFlags |= ChangeInfo.FLAG_ABOVE_TRANSIENT_LAUNCH;
+            }
+        }
         ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS, "Transition %d: Set %s as "
                 + "transient-launch", mSyncId, activity);
     }
 
+    boolean isTransientHide(@NonNull Task task) {
+        if (mTransientLaunches == null) return false;
+        for (int i = 0; i < mTransientLaunches.size(); ++i) {
+            if (mTransientLaunches.valueAt(i) == task) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     boolean isTransientLaunch(@NonNull ActivityRecord activity) {
         return mTransientLaunches != null && mTransientLaunches.containsKey(activity);
     }
@@ -238,6 +271,25 @@
         info.mFlags = info.mFlags | ChangeInfo.FLAG_SEAMLESS_ROTATION;
     }
 
+    /**
+     * Only set flag to the parent tasks and activity itself.
+     */
+    private void setTransientLaunchToChanges(@NonNull WindowContainer wc) {
+        for (WindowContainer curr = wc; curr != null && mChanges.containsKey(curr);
+                curr = curr.getParent()) {
+            if (curr.asTask() == null && curr.asActivityRecord() == null) {
+                return;
+            }
+            final ChangeInfo info = mChanges.get(curr);
+            info.mFlags = info.mFlags | ChangeInfo.FLAG_TRANSIENT_LAUNCH;
+        }
+    }
+
+    @TransitionState
+    int getState() {
+        return mState;
+    }
+
     @VisibleForTesting
     int getSyncId() {
         return mSyncId;
@@ -248,6 +300,20 @@
         return mFlags;
     }
 
+    @VisibleForTesting
+    SurfaceControl.Transaction getStartTransaction() {
+        return mStartTransaction;
+    }
+
+    @VisibleForTesting
+    SurfaceControl.Transaction getFinishTransaction() {
+        return mFinishTransaction;
+    }
+
+    private boolean isCollecting() {
+        return mState == STATE_COLLECTING || mState == STATE_STARTED;
+    }
+
     /** Starts collecting phase. Once this starts, all relevant surface operations are sync. */
     void startCollecting(long timeoutMs) {
         if (mState != STATE_PENDING) {
@@ -255,6 +321,8 @@
         }
         mState = STATE_COLLECTING;
         mSyncId = mSyncEngine.startSyncSet(this, timeoutMs, TAG);
+
+        mController.mTransitionTracer.logState(this);
     }
 
     /**
@@ -272,6 +340,8 @@
         ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS, "Starting Transition %d",
                 mSyncId);
         applyReady();
+
+        mController.mTransitionTracer.logState(this);
     }
 
     /**
@@ -281,7 +351,10 @@
         if (mState < STATE_COLLECTING) {
             throw new IllegalStateException("Transition hasn't started collecting.");
         }
-        if (mSyncId < 0) return;
+        if (!isCollecting()) {
+            // Too late, transition already started playing, so don't collect.
+            return;
+        }
         ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS, "Collecting in transition %d: %s",
                 mSyncId, wc);
         // "snapshot" all parents (as potential promotion targets). Do this before checking
@@ -296,7 +369,12 @@
             }
         }
         if (mParticipants.contains(wc)) return;
-        mSyncEngine.addToSyncSet(mSyncId, wc);
+        // Wallpaper is like in a static drawn state unless display may have changes, so exclude
+        // the case to reduce transition latency waiting for the unchanged wallpaper to redraw.
+        final boolean needSyncDraw = !isWallpaper(wc) || mParticipants.contains(wc.mDisplayContent);
+        if (needSyncDraw) {
+            mSyncEngine.addToSyncSet(mSyncId, wc);
+        }
         ChangeInfo info = mChanges.get(wc);
         if (info == null) {
             info = new ChangeInfo(wc);
@@ -326,7 +404,10 @@
      * or waiting until after the animation to close).
      */
     void collectExistenceChange(@NonNull WindowContainer wc) {
-        if (mSyncId < 0) return;
+        if (mState >= STATE_PLAYING) {
+            // Too late to collect. Don't check too-early here since `collect` will check that.
+            return;
+        }
         ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS, "Existence Changed in transition %d:"
                 + " %s", mSyncId, wc);
         collect(wc);
@@ -360,7 +441,7 @@
      */
     void setOverrideAnimation(TransitionInfo.AnimationOptions options,
             @Nullable IRemoteCallback startCallback, @Nullable IRemoteCallback finishCallback) {
-        if (mSyncId < 0) return;
+        if (!isCollecting()) return;
         mOverrideOptions = options;
         sendRemoteCallback(mClientAnimationStartCallback);
         mClientAnimationStartCallback = startCallback;
@@ -378,7 +459,7 @@
      *           The transition will wait for all groups to be ready.
      */
     void setReady(WindowContainer wc, boolean ready) {
-        if (mSyncId < 0) return;
+        if (!isCollecting() || mSyncId < 0) return;
         mReadyTracker.setReadyFrom(wc, ready);
         applyReady();
     }
@@ -396,7 +477,7 @@
      * @see ReadyTracker#setAllReady.
      */
     void setAllReady() {
-        if (mSyncId < 0) return;
+        if (!isCollecting() || mSyncId < 0) return;
         mReadyTracker.setAllReady();
         applyReady();
     }
@@ -419,7 +500,7 @@
         for (int i = mTargets.size() - 1; i >= 0; --i) {
             final WindowContainer target = mTargets.get(i);
             if (target.getParent() != null) {
-                final SurfaceControl targetLeash = getLeashSurface(target);
+                final SurfaceControl targetLeash = getLeashSurface(target, null /* t */);
                 final SurfaceControl origParent = getOrigParentSurface(target);
                 // Ensure surfaceControls are re-parented back into the hierarchy.
                 t.reparent(targetLeash, origParent);
@@ -428,14 +509,10 @@
                 t.setPosition(targetLeash, tmpPos.x, tmpPos.y);
                 final Rect clipRect;
                 // No need to clip the display in case seeing the clipped content when during the
-                // display rotation.
-                if (target.asDisplayContent() != null) {
+                // display rotation. No need to clip activities because they rely on clipping on
+                // task layers.
+                if (target.asDisplayContent() != null || target.asActivityRecord() != null) {
                     clipRect = null;
-                } else if (target.asActivityRecord() != null) {
-                    // Always use parent bounds of activity because letterbox area (e.g. fixed
-                    // aspect ratio or size compat mode) should be included.
-                    clipRect = target.getParent().getRequestedOverrideBounds();
-                    clipRect.offset(-tmpPos.x, -tmpPos.y);
                 } else {
                     clipRect = target.getRequestedOverrideBounds();
                     clipRect.offset(-tmpPos.x, -tmpPos.y);
@@ -456,9 +533,14 @@
         }
         // Need to update layers on involved displays since they were all paused while
         // the animation played. This puts the layers back into the correct order.
-        for (int i = displays.size() - 1; i >= 0; --i) {
-            if (displays.valueAt(i) == null) continue;
-            displays.valueAt(i).assignChildLayers(t);
+        mController.mBuildingFinishLayers = true;
+        try {
+            for (int i = displays.size() - 1; i >= 0; --i) {
+                if (displays.valueAt(i) == null) continue;
+                displays.valueAt(i).assignChildLayers(t);
+            }
+        } finally {
+            mController.mBuildingFinishLayers = false;
         }
         if (rootLeash.isValid()) {
             t.reparent(rootLeash, null);
@@ -474,6 +556,58 @@
         mCanPipOnFinish = canPipOnFinish;
     }
 
+    private boolean didCommitTransientLaunch() {
+        if (mTransientLaunches == null) return false;
+        for (int j = 0; j < mTransientLaunches.size(); ++j) {
+            if (mTransientLaunches.keyAt(j).isVisibleRequested()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Check if pip-entry is possible after finishing and enter-pip if it is.
+     *
+     * @return true if we are *guaranteed* to enter-pip. This means we return false if there's
+     *         a chance we won't thus legacy-entry (via pause+userLeaving) will return false.
+     */
+    private boolean checkEnterPipOnFinish(@NonNull ActivityRecord ar) {
+        if (!mCanPipOnFinish || !ar.isVisible() || ar.getTask() == null) return false;
+
+        if (ar.pictureInPictureArgs != null && ar.pictureInPictureArgs.isAutoEnterEnabled()) {
+            if (didCommitTransientLaunch()) {
+                // force enable pip-on-task-switch now that we've committed to actually launching
+                // to the transient activity.
+                ar.supportsEnterPipOnTaskSwitch = true;
+            }
+            return mController.mAtm.enterPictureInPictureMode(ar, ar.pictureInPictureArgs,
+                    false /* fromClient */);
+        }
+
+        // Legacy pip-entry (not via isAutoEnterEnabled).
+        boolean canPip = ar.getDeferHidingClient();
+        if (!canPip && didCommitTransientLaunch()) {
+            // force enable pip-on-task-switch now that we've committed to actually launching to the
+            // transient activity, and then recalculate whether we can attempt pip.
+            ar.supportsEnterPipOnTaskSwitch = true;
+            canPip = ar.checkEnterPictureInPictureState(
+                    "finishTransition", true /* beforeStopping */)
+                    && ar.isState(RESUMED);
+        }
+        if (!canPip) return false;
+        try {
+            // Legacy PIP-enter requires pause event with user-leaving.
+            mController.mAtm.mTaskSupervisor.mUserLeaving = true;
+            ar.getTaskFragment().startPausing(false /* uiSleeping */,
+                    null /* resuming */, "finishTransition");
+        } finally {
+            mController.mAtm.mTaskSupervisor.mUserLeaving = false;
+        }
+        // Return false anyway because there's no guarantee that the app will enter pip.
+        return false;
+    }
+
     /**
      * The transition has finished animating and is ready to finalize WM state. This should not
      * be called directly; use {@link TransitionController#finishTransition} instead.
@@ -489,7 +623,6 @@
         }
 
         // Commit all going-invisible containers
-        boolean activitiesWentInvisible = false;
         for (int i = 0; i < mParticipants.size(); ++i) {
             final ActivityRecord ar = mParticipants.valueAt(i).asActivityRecord();
             if (ar != null) {
@@ -501,32 +634,9 @@
                 // then doing commitVisibility here would actually be out-of-order and leave the
                 // activity in a bad state.
                 if (!visibleAtTransitionEnd && !ar.isVisibleRequested()) {
-                    boolean commitVisibility = true;
-                    if (mCanPipOnFinish && ar.isVisible() && ar.getTask() != null) {
-                        if (ar.pictureInPictureArgs != null
-                                && ar.pictureInPictureArgs.isAutoEnterEnabled()) {
-                            if (mTransientLaunches != null) {
-                                for (int j = 0; j < mTransientLaunches.size(); ++j) {
-                                    if (mTransientLaunches.keyAt(j).isVisibleRequested()) {
-                                        // force enable pip-on-task-switch now that we've committed
-                                        // to actually launching to the transient activity.
-                                        ar.supportsEnterPipOnTaskSwitch = true;
-                                        break;
-                                    }
-                                }
-                            }
-                            mController.mAtm.enterPictureInPictureMode(ar, ar.pictureInPictureArgs);
-                            // Avoid commit visibility to false here, or else we will get a sudden
-                            // "flash" / surface going invisible for a split second.
-                            commitVisibility = false;
-                        } else if (ar.getDeferHidingClient()) {
-                            // Legacy PIP-enter requires pause event with user-leaving.
-                            mController.mAtm.mTaskSupervisor.mUserLeaving = true;
-                            ar.getTaskFragment().startPausing(false /* uiSleeping */,
-                                    null /* resuming */, "finishTransition");
-                            mController.mAtm.mTaskSupervisor.mUserLeaving = false;
-                        }
-                    }
+                    final boolean commitVisibility = !checkEnterPipOnFinish(ar);
+                    // Avoid commit visibility if entering pip or else we will get a sudden
+                    // "flash" / surface going invisible for a split second.
                     if (commitVisibility) {
                         ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS,
                                 "  Commit activity becoming invisible: %s", ar);
@@ -540,7 +650,6 @@
                         }
                         ar.commitVisibility(false /* visible */, false /* performLayout */,
                                 true /* fromTransition */);
-                        activitiesWentInvisible = true;
                     }
                 }
                 if (mChanges.get(ar).mVisible != visibleAtTransitionEnd) {
@@ -567,12 +676,23 @@
                 mController.dispatchLegacyAppTransitionFinished(ar);
             }
         }
-        if (activitiesWentInvisible) {
-            // Always schedule stop processing when transition finishes because activities don't
-            // stop while they are in a transition thus their stop could still be pending.
-            mController.mAtm.mTaskSupervisor
-                    .scheduleProcessStoppingAndFinishingActivitiesIfNeeded();
+
+        // Update the input-sink (touch-blocking) state now that the animation is finished.
+        SurfaceControl.Transaction inputSinkTransaction = null;
+        for (int i = 0; i < mParticipants.size(); ++i) {
+            final ActivityRecord ar = mParticipants.valueAt(i).asActivityRecord();
+            if (ar == null || !ar.isVisible() || ar.getParent() == null) continue;
+            if (inputSinkTransaction == null) {
+                inputSinkTransaction = new SurfaceControl.Transaction();
+            }
+            ar.mActivityRecordInputSink.applyChangesToSurfaceIfChanged(inputSinkTransaction);
         }
+        if (inputSinkTransaction != null) inputSinkTransaction.apply();
+
+        // Always schedule stop processing when transition finishes because activities don't
+        // stop while they are in a transition thus their stop could still be pending.
+        mController.mAtm.mTaskSupervisor
+                .scheduleProcessStoppingAndFinishingActivitiesIfNeeded();
 
         sendRemoteCallback(mClientAnimationFinishCallback);
 
@@ -614,6 +734,9 @@
             dc.removeImeSurfaceImmediately();
             dc.handleCompleteDeferredRemoval();
         }
+
+        mState = STATE_FINISHED;
+        mController.mTransitionTracer.logState(this);
     }
 
     void abort() {
@@ -667,6 +790,8 @@
         }
 
         mState = STATE_PLAYING;
+        mStartTransaction = transaction;
+        mFinishTransaction = mController.mAtm.mWindowManager.mTransactionFactory.get();
         mController.moveToPlaying(this);
 
         if (dc.isKeyguardLocked()) {
@@ -675,7 +800,8 @@
 
         // Resolve the animating targets from the participants
         mTargets = calculateTargets(mParticipants, mChanges);
-        final TransitionInfo info = calculateTransitionInfo(mType, mFlags, mTargets, mChanges);
+        final TransitionInfo info = calculateTransitionInfo(mType, mFlags, mTargets, mChanges,
+                transaction);
         if (mOverrideOptions != null) {
             info.setAnimationOptions(mOverrideOptions);
         }
@@ -685,8 +811,6 @@
 
         handleNonAppWindowsInTransition(dc, mType, mFlags);
 
-        reportStartReasonsToLogger();
-
         // The callback is only populated for custom activity-level client animations
         sendRemoteCallback(mClientAnimationStartCallback);
 
@@ -728,6 +852,9 @@
         for (int i = mParticipants.size() - 1; i >= 0; --i) {
             final WindowContainer wc = mParticipants.valueAt(i);
             if (wc.asWindowToken() == null || !wc.isVisibleRequested()) continue;
+            // don't include transient launches, though, since those are only temporarily visible.
+            if (mTransientLaunches != null && wc.asActivityRecord() != null
+                    && mTransientLaunches.containsKey(wc.asActivityRecord())) continue;
             mVisibleAtTransitionEndTokens.add(wc.asWindowToken());
         }
 
@@ -750,11 +877,9 @@
         if (controller != null && mTargets.contains(dc)) {
             controller.setupStartTransaction(transaction);
         }
-        mStartTransaction = transaction;
-        mFinishTransaction = mController.mAtm.mWindowManager.mTransactionFactory.get();
         buildFinishTransaction(mFinishTransaction, info.getRootLeash());
         if (mController.getTransitionPlayer() != null) {
-            mController.dispatchLegacyAppTransitionStarting(info);
+            mController.dispatchLegacyAppTransitionStarting(info, mStatusBarTransitionDelay);
             try {
                 ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS,
                         "Calling onTransitionReady: %s", info);
@@ -773,8 +898,9 @@
             // No player registered, so just finish/apply immediately
             cleanUpOnFailure();
         }
-        mSyncId = -1;
         mOverrideOptions = null;
+
+        reportStartReasonsToLogger();
     }
 
     /**
@@ -832,26 +958,6 @@
             }
         }
 
-        // Hiding IME/IME icon when starting quick-step with resents animation.
-        if (!mTargetDisplays.get(mRecentsDisplayId).isImeAttachedToApp()) {
-            // Hiding IME if IME window is not attached to app.
-            // Since some windowing mode is not proper to snapshot Task with IME window
-            // while the app transitioning to the next task (e.g. split-screen mode)
-            final InputMethodManagerInternal inputMethodManagerInternal =
-                    LocalServices.getService(InputMethodManagerInternal.class);
-            if (inputMethodManagerInternal != null) {
-                inputMethodManagerInternal.hideCurrentInputMethod(
-                        SoftInputShowHideReason.HIDE_RECENTS_ANIMATION);
-            }
-        } else {
-            // Disable IME icon explicitly when IME attached to the app in case
-            // IME icon might flickering while swiping to the next app task still
-            // in animating before the next app window focused, or IME icon
-            // persists on the bottom when swiping the task to recents.
-            InputMethodManagerInternal.get().updateImeWindowStatus(
-                    true /* disableImeIcon */);
-        }
-
         // The rest of this function handles nav-bar reparenting
 
         if (!dc.getDisplayPolicy().shouldAttachNavBarToAppDuringTransition()
@@ -987,11 +1093,15 @@
         for (int i = mParticipants.size() - 1; i >= 0; --i) {
             ActivityRecord r = mParticipants.valueAt(i).asActivityRecord();
             if (r == null || !r.mVisibleRequested) continue;
+            int transitionReason = APP_TRANSITION_WINDOWS_DRAWN;
             // At this point, r is "ready", but if it's not "ALL ready" then it is probably only
             // ready due to starting-window.
-            reasons.put(r, (r.mStartingData instanceof SplashScreenStartingData
-                    && !r.mLastAllReadyAtSync)
-                    ? APP_TRANSITION_SPLASH_SCREEN : APP_TRANSITION_WINDOWS_DRAWN);
+            if (r.mStartingData instanceof SplashScreenStartingData && !r.mLastAllReadyAtSync) {
+                transitionReason = APP_TRANSITION_SPLASH_SCREEN;
+            } else if (r.isActivityTypeHomeOrRecents() && isTransientLaunch(r)) {
+                transitionReason = APP_TRANSITION_RECENTS_ANIM;
+            }
+            reasons.put(r, transitionReason);
         }
         mController.mAtm.mTaskSupervisor.getActivityMetricsLogger().notifyTransitionStarting(
                 reasons);
@@ -1020,6 +1130,10 @@
         return wc.asWallpaperToken() != null;
     }
 
+    private static boolean isInputMethod(WindowContainer wc) {
+        return wc.getWindowType() == TYPE_INPUT_METHOD;
+    }
+
     private static boolean occludesKeyguard(WindowContainer wc) {
         final ActivityRecord ar = wc.asActivityRecord();
         if (ar != null) {
@@ -1036,6 +1150,26 @@
         return false;
     }
 
+    private static boolean isTranslucent(@NonNull WindowContainer wc) {
+        final TaskFragment taskFragment = wc.asTaskFragment();
+        if (taskFragment != null) {
+            if (taskFragment.isTranslucent(null /* starting */)) {
+                return true;
+            }
+            final TaskFragment adjacentTaskFragment = taskFragment.getAdjacentTaskFragment();
+            if (adjacentTaskFragment != null) {
+                // Treat the TaskFragment as translucent if its adjacent TF is, otherwise everything
+                // behind two adjacent TaskFragments are occluded.
+                return adjacentTaskFragment.isTranslucent(null /* starting */);
+            }
+        }
+        // TODO(b/172695805): hierarchical check. This is non-trivial because for containers
+        //                    it is effected by child visibility but needs to work even
+        //                    before visibility is committed. This means refactoring some
+        //                    checks to use requested visibility.
+        return !wc.fillsParent();
+    }
+
     /**
      * Under some conditions (eg. all visible targets within a parent container are transitioning
      * the same way) the transition can be "promoted" to the parent container. This means an
@@ -1226,8 +1360,15 @@
         }
     }
 
-    /** Gets the leash surface for a window container */
-    private static SurfaceControl getLeashSurface(WindowContainer wc) {
+    /**
+     * Gets the leash surface for a window container.
+     * @param t a transaction to create leashes on when necessary (fixed rotation at token-level).
+     *          If t is null, then this will not create any leashes, just use one if it is there --
+     *          this is relevant for building the finishTransaction since it needs to match the
+     *          start state and not erroneously create a leash of its own.
+     */
+    private static SurfaceControl getLeashSurface(WindowContainer wc,
+            @Nullable SurfaceControl.Transaction t) {
         final DisplayContent asDC = wc.asDisplayContent();
         if (asDC != null) {
             // DisplayContent is the "root", so we use the windowing layer instead to avoid
@@ -1239,7 +1380,8 @@
             if (asToken != null) {
                 // WindowTokens can have a fixed-rotation applied to them. In the current
                 // implementation this fact is hidden from the player, so we must create a leash.
-                final SurfaceControl leash = asToken.getOrCreateFixedRotationLeash();
+                final SurfaceControl leash = t != null ? asToken.getOrCreateFixedRotationLeash(t)
+                        : asToken.getFixedRotationLeash();
                 if (leash != null) return leash;
             }
         }
@@ -1268,12 +1410,14 @@
      * Construct a TransitionInfo object from a set of targets and changes. Also populates the
      * root surface.
      * @param sortedTargets The targets sorted by z-order from top (index 0) to bottom.
+     * @param startT The start transaction - used to set-up new leashes.
      */
     @VisibleForTesting
     @NonNull
     static TransitionInfo calculateTransitionInfo(@TransitionType int type, int flags,
             ArrayList<WindowContainer> sortedTargets,
-            ArrayMap<WindowContainer, ChangeInfo> changes) {
+            ArrayMap<WindowContainer, ChangeInfo> changes,
+            @Nullable SurfaceControl.Transaction startT) {
         final TransitionInfo out = new TransitionInfo(type, flags);
 
         WindowContainer<?> topApp = null;
@@ -1311,10 +1455,7 @@
         }
         final SurfaceControl rootLeash = leashReference.makeAnimationLeash().setName(
                 "Transition Root: " + leashReference.getName()).build();
-        SurfaceControl.Transaction t = ancestor.mWmService.mTransactionFactory.get();
-        t.setLayer(rootLeash, leashReference.getLastLayer());
-        t.apply();
-        t.close();
+        startT.setLayer(rootLeash, leashReference.getLastLayer());
         out.setRootLeash(rootLeash, ancestor.getBounds().left, ancestor.getBounds().top);
 
         // Convert all the resolved ChangeInfos into TransactionInfo.Change objects in order.
@@ -1324,7 +1465,7 @@
             final ChangeInfo info = changes.get(target);
             final TransitionInfo.Change change = new TransitionInfo.Change(
                     target.mRemoteToken != null ? target.mRemoteToken.toWindowContainerToken()
-                            : null, getLeashSurface(target));
+                            : null, getLeashSurface(target, startT));
             // TODO(shell-transitions): Use leash for non-organized windows.
             if (info.mParent != null) {
                 change.setParent(info.mParent.mRemoteToken.toWindowContainerToken());
@@ -1481,7 +1622,7 @@
     }
 
     boolean getLegacyIsReady() {
-        return (mState == STATE_STARTED || mState == STATE_COLLECTING) && mSyncId >= 0;
+        return isCollecting() && mSyncId >= 0;
     }
 
     static Transition fromBinder(IBinder binder) {
@@ -1497,10 +1638,14 @@
          * seamless rotation. This is currently only used by DisplayContent during fixed-rotation.
          */
         private static final int FLAG_SEAMLESS_ROTATION = 1;
+        private static final int FLAG_TRANSIENT_LAUNCH = 2;
+        private static final int FLAG_ABOVE_TRANSIENT_LAUNCH = 4;
 
         @IntDef(prefix = { "FLAG_" }, value = {
                 FLAG_NONE,
-                FLAG_SEAMLESS_ROTATION
+                FLAG_SEAMLESS_ROTATION,
+                FLAG_TRANSIENT_LAUNCH,
+                FLAG_ABOVE_TRANSIENT_LAUNCH
         })
         @Retention(RetentionPolicy.SOURCE)
         @interface Flag {}
@@ -1537,6 +1682,11 @@
         }
 
         boolean hasChanged(@NonNull WindowContainer newState) {
+            // the task including transient launch must promote to root task
+            if ((mFlags & ChangeInfo.FLAG_TRANSIENT_LAUNCH) != 0
+                    || (mFlags & ChangeInfo.FLAG_ABOVE_TRANSIENT_LAUNCH) != 0) {
+                return true;
+            }
             // If it's invisible and hasn't changed visibility, always return false since even if
             // something changed, it wouldn't be a visible change.
             final boolean currVisible = newState.isVisibleRequested();
@@ -1552,6 +1702,9 @@
 
         @TransitionInfo.TransitionMode
         int getTransitMode(@NonNull WindowContainer wc) {
+            if ((mFlags & ChangeInfo.FLAG_ABOVE_TRANSIENT_LAUNCH) != 0) {
+                return TRANSIT_CLOSE;
+            }
             final boolean nowVisible = wc.isVisibleRequested();
             if (nowVisible == mVisible) {
                 return TRANSIT_CHANGE;
@@ -1569,19 +1722,19 @@
             if (mShowWallpaper || wc.showWallpaper()) {
                 flags |= FLAG_SHOW_WALLPAPER;
             }
-            if (!wc.fillsParent()) {
-                // TODO(b/172695805): hierarchical check. This is non-trivial because for containers
-                //                    it is effected by child visibility but needs to work even
-                //                    before visibility is committed. This means refactoring some
-                //                    checks to use requested visibility.
+            if (isTranslucent(wc)) {
                 flags |= FLAG_TRANSLUCENT;
             }
             final Task task = wc.asTask();
             if (task != null && task.voiceSession != null) {
                 flags |= FLAG_IS_VOICE_INTERACTION;
             }
-            if (task != null && task.isTranslucent(null)) {
-                flags |= FLAG_TRANSLUCENT;
+            if (task != null) {
+                final ActivityRecord topActivity = task.getTopNonFinishingActivity();
+                if (topActivity != null && topActivity.mStartingData != null
+                        && topActivity.mStartingData.hasImeSurface()) {
+                    flags |= FLAG_WILL_IME_SHOWN;
+                }
             }
             final ActivityRecord record = wc.asActivityRecord();
             if (record != null) {
@@ -1602,14 +1755,33 @@
             if (isWallpaper(wc)) {
                 flags |= FLAG_IS_WALLPAPER;
             }
+            if (isInputMethod(wc)) {
+                flags |= FLAG_IS_INPUT_METHOD;
+            }
             if (occludesKeyguard(wc)) {
                 flags |= FLAG_OCCLUDES_KEYGUARD;
             }
+            if (wc.isEmbedded()) {
+                flags |= FLAG_IS_EMBEDDED;
+            }
             return flags;
         }
     }
 
     /**
+     * This transition will be considered not-ready until a corresponding call to
+     * {@link #continueTransitionReady}
+     */
+    void deferTransitionReady() {
+        ++mReadyTracker.mDeferReadyDepth;
+    }
+
+    /** This undoes one call to {@link #deferTransitionReady}. */
+    void continueTransitionReady() {
+        --mReadyTracker.mDeferReadyDepth;
+    }
+
+    /**
      * The transition sync mechanism has 2 parts:
      *   1. Whether all WM operations for a particular transition are "ready" (eg. did the app
      *      launch or stop or get a new configuration?).
@@ -1639,6 +1811,14 @@
         private boolean mReadyOverride = false;
 
         /**
+         * When non-zero, this transition is forced not-ready (even over setAllReady()). Use this
+         * (via deferTransitionReady/continueTransitionReady) for situations where we want to do
+         * bulk operations which could trigger surface-placement but the existing ready-state
+         * isn't known.
+         */
+        private int mDeferReadyDepth = 0;
+
+        /**
          * Adds a ready-group. Any setReady calls in this subtree will be tracked together. For
          * now these are only DisplayContents.
          */
@@ -1678,8 +1858,15 @@
         /** @return true if all tracked subtrees are ready. */
         boolean allReady() {
             ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS, " allReady query: used=%b "
-                    + "override=%b states=[%s]", mUsed, mReadyOverride, groupsToString());
+                    + "override=%b defer=%d states=[%s]", mUsed, mReadyOverride, mDeferReadyDepth,
+                    groupsToString());
+            // If the readiness has never been touched, mUsed will be false. We never want to
+            // consider a transition ready if nothing has been reported on it.
             if (!mUsed) return false;
+            // If we are deferring readiness, we never report ready. This is usually temporary.
+            if (mDeferReadyDepth > 0) return false;
+            // Next check all the ready groups to see if they are ready. We can short-cut this if
+            // ready-override is set (which is treated as "everything is marked ready").
             if (mReadyOverride) return true;
             for (int i = mReadyGroups.size() - 1; i >= 0; --i) {
                 final WindowContainer wc = mReadyGroups.keyAt(i);
diff --git a/services/core/java/com/android/server/wm/TransitionController.java b/services/core/java/com/android/server/wm/TransitionController.java
index c1c390e..4f324f2 100644
--- a/services/core/java/com/android/server/wm/TransitionController.java
+++ b/services/core/java/com/android/server/wm/TransitionController.java
@@ -45,6 +45,7 @@
 import android.window.TransitionInfo;
 import android.window.TransitionRequestInfo;
 
+import com.android.internal.annotations.GuardedBy;
 import com.android.internal.protolog.ProtoLogGroup;
 import com.android.internal.protolog.common.ProtoLog;
 import com.android.server.LocalServices;
@@ -75,10 +76,12 @@
 
     private ITransitionPlayer mTransitionPlayer;
     final TransitionMetricsReporter mTransitionMetricsReporter = new TransitionMetricsReporter();
+    final TransitionTracer mTransitionTracer;
 
-    private IApplicationThread mTransitionPlayerThread;
+    private WindowProcessController mTransitionPlayerProc;
     final ActivityTaskManagerService mAtm;
     final TaskSnapshotController mTaskSnapshotController;
+    final RemotePlayer mRemotePlayer;
 
     private final ArrayList<WindowManagerInternal.AppTransitionListener> mLegacyListeners =
             new ArrayList<>();
@@ -99,11 +102,22 @@
     // TODO(b/188595497): remove when not needed.
     final StatusBarManagerInternal mStatusBar;
 
+    /**
+     * `true` when building surface layer order for the finish transaction. We want to prevent
+     * wm from touching z-order of surfaces during transitions, but we still need to be able to
+     * calculate the layers for the finishTransaction. So, when assigning layers into the finish
+     * transaction, set this to true so that the {@link canAssignLayers} will allow it.
+     */
+    boolean mBuildingFinishLayers = false;
+
     TransitionController(ActivityTaskManagerService atm,
-            TaskSnapshotController taskSnapshotController) {
+            TaskSnapshotController taskSnapshotController,
+            TransitionTracer transitionTracer) {
         mAtm = atm;
+        mRemotePlayer = new RemotePlayer(atm);
         mStatusBar = LocalServices.getService(StatusBarManagerInternal.class);
         mTaskSnapshotController = taskSnapshotController;
+        mTransitionTracer = transitionTracer;
         mTransitionPlayerDeath = () -> {
             synchronized (mAtm.mGlobalLock) {
                 // Clean-up/finish any playing transitions.
@@ -112,6 +126,8 @@
                 }
                 mPlayingTransitions.clear();
                 mTransitionPlayer = null;
+                mTransitionPlayerProc = null;
+                mRemotePlayer.clear();
                 mRunningLock.doNotifyLocked();
             }
         };
@@ -158,7 +174,7 @@
     }
 
     void registerTransitionPlayer(@Nullable ITransitionPlayer player,
-            @Nullable IApplicationThread appThread) {
+            @Nullable WindowProcessController playerProc) {
         try {
             // Note: asBinder() can be null if player is same process (likely in a test).
             if (mTransitionPlayer != null) {
@@ -171,7 +187,7 @@
                 player.asBinder().linkToDeath(mTransitionPlayerDeath, 0);
             }
             mTransitionPlayer = player;
-            mTransitionPlayerThread = appThread;
+            mTransitionPlayerProc = playerProc;
         } catch (RemoteException e) {
             throw new RuntimeException("Unable to set transition player");
         }
@@ -207,6 +223,18 @@
     }
 
     /**
+     * @return {@code true} if transition is actively collecting changes and `wc` is one of them
+     *                      or a descendant of one of them. {@code false} once playing.
+     */
+    boolean inCollectingTransition(@NonNull WindowContainer wc) {
+        if (!isCollecting()) return false;
+        for (WindowContainer p = wc; p != null; p = p.getParent()) {
+            if (mCollectingTransition.mParticipants.contains(p)) return true;
+        }
+        return false;
+    }
+
+    /**
      * @return {@code true} if transition is actively playing. This is not necessarily {@code true}
      * during collection.
      */
@@ -214,6 +242,18 @@
         return !mPlayingTransitions.isEmpty();
     }
 
+    /**
+     * @return {@code true} if one of the playing transitions contains `wc`.
+     */
+    boolean inPlayingTransition(@NonNull WindowContainer wc) {
+        for (int i = mPlayingTransitions.size() - 1; i >= 0; --i) {
+            for (WindowContainer p = wc; p != null; p = p.getParent()) {
+                if (mPlayingTransitions.get(i).mParticipants.contains(p)) return true;
+            }
+        }
+        return false;
+    }
+
     /** @return {@code true} if a transition is running */
     boolean inTransition() {
         // TODO(shell-transitions): eventually properly support multiple
@@ -222,19 +262,7 @@
 
     /** @return {@code true} if a transition is running in a participant subtree of wc */
     boolean inTransition(@NonNull WindowContainer wc) {
-        if (isCollecting()) {
-            for (WindowContainer p = wc; p != null; p = p.getParent()) {
-                if (isCollecting(p)) return true;
-            }
-        }
-        for (int i = mPlayingTransitions.size() - 1; i >= 0; --i) {
-            for (WindowContainer p = wc; p != null; p = p.getParent()) {
-                if (mPlayingTransitions.get(i).mParticipants.contains(p)) {
-                    return true;
-                }
-            }
-        }
-        return false;
+        return inCollectingTransition(wc) || inPlayingTransition(wc);
     }
 
     boolean inRecentsTransition(@NonNull WindowContainer wc) {
@@ -270,6 +298,16 @@
         return false;
     }
 
+    boolean isTransientHide(@NonNull Task task) {
+        if (mCollectingTransition != null && mCollectingTransition.isTransientHide(task)) {
+            return true;
+        }
+        for (int i = mPlayingTransitions.size() - 1; i >= 0; --i) {
+            if (mPlayingTransitions.get(i).isTransientHide(task)) return true;
+        }
+        return false;
+    }
+
     /**
      * @return {@code true} if {@param ar} is part of a transient-launch activity in an active
      * transition.
@@ -284,6 +322,15 @@
         return false;
     }
 
+    /**
+     * Whether WM can assign layers to window surfaces at this time. This is usually false while
+     * playing, but can be "opened-up" for certain transition operations like calculating layers
+     * for finishTransaction.
+     */
+    boolean canAssignLayers() {
+        return mBuildingFinishLayers || !isPlaying();
+    }
+
     @WindowConfiguration.WindowingMode
     int getWindowingModeAtStart(@NonNull WindowContainer wc) {
         if (mCollectingTransition == null) return wc.getWindowingMode();
@@ -379,6 +426,7 @@
             }
             mTransitionPlayer.requestStartTransition(transition, new TransitionRequestInfo(
                     transition.mType, info, remoteTransition, displayChange));
+            transition.setRemoteTransition(remoteTransition);
         } catch (RemoteException e) {
             Slog.e(TAG, "Error requesting transition", e);
             transition.start();
@@ -418,23 +466,33 @@
      * Collects the window containers which need to be synced with the changing display (e.g.
      * rotating) to the given transition or the current collecting transition.
      */
-    void collectForDisplayChange(@NonNull DisplayContent dc, @Nullable Transition incoming) {
+    void collectForDisplayAreaChange(@NonNull DisplayArea<?> wc, @Nullable Transition incoming) {
         if (incoming == null) incoming = mCollectingTransition;
         if (incoming == null) return;
         final Transition transition = incoming;
         // Collect all visible tasks.
-        dc.forAllLeafTasks(task -> {
+        wc.forAllLeafTasks(task -> {
             if (task.isVisible()) {
                 transition.collect(task);
             }
         }, true /* traverseTopToBottom */);
         // Collect all visible non-app windows which need to be drawn before the animation starts.
-        dc.forAllWindows(w -> {
-            if (w.mActivityRecord == null && w.isVisible() && !isCollecting(w.mToken)
-                    && dc.shouldSyncRotationChange(w)) {
-                transition.collect(w.mToken);
-            }
-        }, true /* traverseTopToBottom */);
+        final DisplayContent dc = wc.asDisplayContent();
+        if (dc != null) {
+            final boolean noAsyncRotation = dc.getAsyncRotationController() == null;
+            wc.forAllWindows(w -> {
+                if (w.mActivityRecord == null && w.isVisible() && !isCollecting(w.mToken)
+                        && (noAsyncRotation || !AsyncRotationController.canBeAsync(w.mToken))) {
+                    transition.collect(w.mToken);
+                }
+            }, true /* traverseTopToBottom */);
+        }
+    }
+
+    /** @see Transition#mStatusBarTransitionDelay */
+    void setStatusBarTransitionDelay(long delay) {
+        if (mCollectingTransition == null) return;
+        mCollectingTransition.mStatusBarTransitionDelay = delay;
     }
 
     /** @see Transition#setOverrideAnimation */
@@ -455,6 +513,24 @@
         setReady(wc, true);
     }
 
+    /** @see Transition#deferTransitionReady */
+    void deferTransitionReady() {
+        if (!isShellTransitionsEnabled()) return;
+        if (mCollectingTransition == null) {
+            throw new IllegalStateException("No collecting transition to defer readiness for.");
+        }
+        mCollectingTransition.deferTransitionReady();
+    }
+
+    /** @see Transition#continueTransitionReady */
+    void continueTransitionReady() {
+        if (!isShellTransitionsEnabled()) return;
+        if (mCollectingTransition == null) {
+            throw new IllegalStateException("No collecting transition to defer readiness for.");
+        }
+        mCollectingTransition.continueTransitionReady();
+    }
+
     /** @see Transition#finishTransition */
     void finishTransition(@NonNull IBinder token) {
         // It is usually a no-op but make sure that the metric consumer is removed.
@@ -468,9 +544,7 @@
         }
         ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS, "Finish Transition: %s", record);
         mPlayingTransitions.remove(record);
-        if (mPlayingTransitions.isEmpty()) {
-            setAnimationRunning(false /* running */);
-        }
+        updateRunningRemoteAnimation(record, false /* isPlaying */);
         record.finishTransition();
         mRunningLock.doNotifyLocked();
     }
@@ -480,20 +554,27 @@
             throw new IllegalStateException("Trying to move non-collecting transition to playing");
         }
         mCollectingTransition = null;
-        if (mPlayingTransitions.isEmpty()) {
-            setAnimationRunning(true /* running */);
-        }
         mPlayingTransitions.add(transition);
+        updateRunningRemoteAnimation(transition, true /* isPlaying */);
+        mTransitionTracer.logState(transition);
     }
 
-    private void setAnimationRunning(boolean running) {
-        if (mTransitionPlayerThread == null) return;
-        final WindowProcessController wpc = mAtm.getProcessController(mTransitionPlayerThread);
-        if (wpc == null) {
-            Slog.w(TAG, "Unable to find process for player thread=" + mTransitionPlayerThread);
+    /** Updates the process state of animation player. */
+    private void updateRunningRemoteAnimation(Transition transition, boolean isPlaying) {
+        if (mTransitionPlayerProc == null) return;
+        if (isPlaying) {
+            mTransitionPlayerProc.setRunningRemoteAnimation(true);
+        } else if (mPlayingTransitions.isEmpty()) {
+            mTransitionPlayerProc.setRunningRemoteAnimation(false);
+            mRemotePlayer.clear();
             return;
         }
-        wpc.setRunningRemoteAnimation(running);
+        final RemoteTransition remote = transition.getRemoteTransition();
+        if (remote == null) return;
+        final IApplicationThread appThread = remote.getAppThread();
+        final WindowProcessController delegate = mAtm.getProcessController(appThread);
+        if (delegate == null) return;
+        mRemotePlayer.update(delegate, isPlaying, true /* predict */);
     }
 
     void abort(Transition transition) {
@@ -502,6 +583,7 @@
         }
         transition.abort();
         mCollectingTransition = null;
+        mTransitionTracer.logState(transition);
     }
 
     /**
@@ -526,6 +608,12 @@
         }
     }
 
+    /** @see Transition#setCanPipOnFinish */
+    void setCanPipOnFinish(boolean canPipOnFinish) {
+        if (mCollectingTransition == null) return;
+        mCollectingTransition.setCanPipOnFinish(canPipOnFinish);
+    }
+
     void legacyDetachNavigationBarFromApp(@NonNull IBinder token) {
         final Transition transition = Transition.fromBinder(token);
         if (transition == null || !mPlayingTransitions.contains(transition)) {
@@ -549,13 +637,14 @@
         }
     }
 
-    void dispatchLegacyAppTransitionStarting(TransitionInfo info) {
+    void dispatchLegacyAppTransitionStarting(TransitionInfo info, long statusBarTransitionDelay) {
         final boolean keyguardGoingAway = info.isKeyguardGoingAway();
         for (int i = 0; i < mLegacyListeners.size(); ++i) {
             // TODO(shell-transitions): handle (un)occlude transition.
             mLegacyListeners.get(i).onAppTransitionStartingLocked(keyguardGoingAway,
                     false /* keyguardOcclude */, 0 /* durationHint */,
-                    SystemClock.uptimeMillis(), AnimationAdapter.STATUS_BAR_TRANSITION_DURATION);
+                    SystemClock.uptimeMillis() + statusBarTransitionDelay,
+                    AnimationAdapter.STATUS_BAR_TRANSITION_DURATION);
         }
     }
 
@@ -588,6 +677,95 @@
         proto.end(token);
     }
 
+    /**
+     * This manages the animating state of processes that are running remote animations for
+     * {@link #mTransitionPlayerProc}.
+     */
+    static class RemotePlayer {
+        private static final long REPORT_RUNNING_GRACE_PERIOD_MS = 100;
+        @GuardedBy("itself")
+        private final ArrayMap<IBinder, DelegateProcess> mDelegateProcesses = new ArrayMap<>();
+        private final ActivityTaskManagerService mAtm;
+
+        private class DelegateProcess implements Runnable {
+            final WindowProcessController mProc;
+            /** Requires {@link RemotePlayer#reportRunning} to confirm it is really running. */
+            boolean mNeedReport;
+
+            DelegateProcess(WindowProcessController proc) {
+                mProc = proc;
+            }
+
+            /** This runs when the remote player doesn't report running in time. */
+            @Override
+            public void run() {
+                synchronized (mAtm.mGlobalLockWithoutBoost) {
+                    update(mProc, false /* running */, false /* predict */);
+                }
+            }
+        }
+
+        RemotePlayer(ActivityTaskManagerService atm) {
+            mAtm = atm;
+        }
+
+        void update(@NonNull WindowProcessController delegate, boolean running, boolean predict) {
+            if (!running) {
+                synchronized (mDelegateProcesses) {
+                    boolean removed = false;
+                    for (int i = mDelegateProcesses.size() - 1; i >= 0; i--) {
+                        if (mDelegateProcesses.valueAt(i).mProc == delegate) {
+                            mDelegateProcesses.removeAt(i);
+                            removed = true;
+                            break;
+                        }
+                    }
+                    if (!removed) return;
+                }
+                delegate.setRunningRemoteAnimation(false);
+                return;
+            }
+            if (delegate.isRunningRemoteTransition() || !delegate.hasThread()) return;
+            delegate.setRunningRemoteAnimation(true);
+            final DelegateProcess delegateProc = new DelegateProcess(delegate);
+            // If "predict" is true, that means the remote animation is set from
+            // ActivityOptions#makeRemoteAnimation(). But it is still up to shell side to decide
+            // whether to use the remote animation, so there is a timeout to cancel the prediction
+            // if the remote animation doesn't happen.
+            if (predict) {
+                delegateProc.mNeedReport = true;
+                mAtm.mH.postDelayed(delegateProc, REPORT_RUNNING_GRACE_PERIOD_MS);
+            }
+            synchronized (mDelegateProcesses) {
+                mDelegateProcesses.put(delegate.getThread().asBinder(), delegateProc);
+            }
+        }
+
+        void clear() {
+            synchronized (mDelegateProcesses) {
+                for (int i = mDelegateProcesses.size() - 1; i >= 0; i--) {
+                    mDelegateProcesses.valueAt(i).mProc.setRunningRemoteAnimation(false);
+                }
+                mDelegateProcesses.clear();
+            }
+        }
+
+        /** Returns {@code true} if the app is known to be running remote transition. */
+        boolean reportRunning(@NonNull IApplicationThread appThread) {
+            final DelegateProcess delegate;
+            synchronized (mDelegateProcesses) {
+                delegate = mDelegateProcesses.get(appThread.asBinder());
+                if (delegate != null && delegate.mNeedReport) {
+                    // It was predicted to run remote transition. Now it is really requesting so
+                    // remove the timeout of restoration.
+                    delegate.mNeedReport = false;
+                    mAtm.mH.removeCallbacks(delegate);
+                }
+            }
+            return delegate != null;
+        }
+    }
+
     static class TransitionMetricsReporter extends ITransitionMetricsReporter.Stub {
         private final ArrayMap<IBinder, LongConsumer> mMetricConsumers = new ArrayMap<>();
 
diff --git a/services/core/java/com/android/server/wm/TransitionTracer.java b/services/core/java/com/android/server/wm/TransitionTracer.java
new file mode 100644
index 0000000..c1927d8
--- /dev/null
+++ b/services/core/java/com/android/server/wm/TransitionTracer.java
@@ -0,0 +1,243 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.os.Build.IS_USER;
+
+import static com.android.server.wm.shell.ChangeInfo.CHANGE_FLAGS;
+import static com.android.server.wm.shell.ChangeInfo.HAS_CHANGED;
+import static com.android.server.wm.shell.ChangeInfo.TRANSIT_MODE;
+import static com.android.server.wm.shell.ChangeInfo.WINDOW_IDENTIFIER;
+import static com.android.server.wm.shell.Transition.CHANGE;
+import static com.android.server.wm.shell.Transition.FINISH_TRANSACTION_ID;
+import static com.android.server.wm.shell.Transition.FLAGS;
+import static com.android.server.wm.shell.Transition.ID;
+import static com.android.server.wm.shell.Transition.START_TRANSACTION_ID;
+import static com.android.server.wm.shell.Transition.STATE;
+import static com.android.server.wm.shell.Transition.TIMESTAMP;
+import static com.android.server.wm.shell.Transition.TRANSITION_TYPE;
+import static com.android.server.wm.shell.TransitionTraceProto.MAGIC_NUMBER;
+import static com.android.server.wm.shell.TransitionTraceProto.MAGIC_NUMBER_H;
+import static com.android.server.wm.shell.TransitionTraceProto.MAGIC_NUMBER_L;
+import static com.android.server.wm.shell.TransitionTraceProto.TRANSITION;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.os.SystemClock;
+import android.os.Trace;
+import android.util.Log;
+import android.util.proto.ProtoOutputStream;
+
+import com.android.internal.util.TraceBuffer;
+import com.android.server.wm.Transition.ChangeInfo;
+import com.android.server.wm.shell.TransitionTraceProto;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+/**
+ * Helper class to collect and dump transition traces.
+ */
+public class TransitionTracer {
+
+    private static final String LOG_TAG = "TransitionTracer";
+
+    /**
+     * Maximum buffer size, currently defined as 5 MB
+     */
+    private static final int BUFFER_CAPACITY = 5120 * 1024; // 5 MB
+    static final String WINSCOPE_EXT = ".winscope";
+    private static final String TRACE_FILE = "/data/misc/wmtrace/transition_trace" + WINSCOPE_EXT;
+    private static final long MAGIC_NUMBER_VALUE = ((long) MAGIC_NUMBER_H << 32) | MAGIC_NUMBER_L;
+
+    private final TransitionTraceBuffer mTraceBuffer = new TransitionTraceBuffer();
+
+    private final Object mEnabledLock = new Object();
+    private volatile boolean mEnabled = false;
+
+    private long mTraceStartTimestamp;
+
+    private class TransitionTraceBuffer {
+        private final TraceBuffer mBuffer = new TraceBuffer(BUFFER_CAPACITY);
+
+        private void pushTransitionState(Transition transition) {
+            final ProtoOutputStream outputStream = new ProtoOutputStream();
+            final long transitionEntryToken = outputStream.start(TRANSITION);
+
+            outputStream.write(ID, transition.getSyncId());
+            outputStream.write(TIMESTAMP, SystemClock.elapsedRealtimeNanos());
+            outputStream.write(TRANSITION_TYPE, transition.mType);
+            outputStream.write(STATE, transition.getState());
+            outputStream.write(FLAGS, transition.getFlags());
+            if (transition.getStartTransaction() != null) {
+                outputStream.write(START_TRANSACTION_ID, transition.getStartTransaction().getId());
+            }
+            if (transition.getFinishTransaction() != null) {
+                outputStream.write(FINISH_TRANSACTION_ID,
+                        transition.getFinishTransaction().getId());
+            }
+
+            for (int i = 0; i < transition.mChanges.size(); ++i) {
+                final WindowContainer window = transition.mChanges.keyAt(i);
+                final ChangeInfo changeInfo = transition.mChanges.valueAt(i);
+                writeChange(outputStream, window, changeInfo);
+            }
+
+            outputStream.end(transitionEntryToken);
+
+            mBuffer.add(outputStream);
+        }
+
+        private void writeChange(ProtoOutputStream outputStream, WindowContainer window,
+                ChangeInfo changeInfo) {
+            Trace.beginSection("TransitionProto#addChange");
+            final long changeEntryToken = outputStream.start(CHANGE);
+
+            final int transitMode = changeInfo.getTransitMode(window);
+            final boolean hasChanged = changeInfo.hasChanged(window);
+            final int changeFlags = changeInfo.getChangeFlags(window);
+
+            outputStream.write(TRANSIT_MODE, transitMode);
+            outputStream.write(HAS_CHANGED, hasChanged);
+            outputStream.write(CHANGE_FLAGS, changeFlags);
+            window.writeIdentifierToProto(outputStream, WINDOW_IDENTIFIER);
+
+            outputStream.end(changeEntryToken);
+            Trace.endSection();
+        }
+
+        public void writeToFile(File file, ProtoOutputStream proto) throws IOException {
+            mBuffer.writeTraceToFile(file, proto);
+        }
+
+        public void reset() {
+            mBuffer.resetBuffer();
+        }
+    }
+
+    /**
+     * Records the current state of a transition in the transition trace (if it is running).
+     * @param transition the transition that we want to record the state of.
+     */
+    public void logState(com.android.server.wm.Transition transition) {
+        if (!mEnabled) {
+            return;
+        }
+
+        Log.d(LOG_TAG, "Logging state of transition " + transition);
+        mTraceBuffer.pushTransitionState(transition);
+    }
+
+    /**
+     * Starts collecting transitions for the trace.
+     * If called while a trace is already running, this will reset the trace.
+     */
+    public void startTrace(@Nullable PrintWriter pw) {
+        if (IS_USER) {
+            LogAndPrintln.e(pw, "Tracing is not supported on user builds.");
+            return;
+        }
+        Trace.beginSection("TransitionTracer#startTrace");
+        LogAndPrintln.i(pw, "Starting shell transition trace.");
+        synchronized (mEnabledLock) {
+            mTraceStartTimestamp = SystemClock.elapsedRealtime();
+            mEnabled = true;
+            mTraceBuffer.reset();
+        }
+        Trace.endSection();
+    }
+
+    /**
+     * Stops collecting the transition trace and dump to trace to file.
+     *
+     * Dumps the trace to @link{TRACE_FILE}.
+     */
+    public void stopTrace(@Nullable PrintWriter pw) {
+        stopTrace(pw, new File(TRACE_FILE));
+    }
+
+    /**
+     * Stops collecting the transition trace and dump to trace to file.
+     * @param outputFile The file to dump the transition trace to.
+     */
+    public void stopTrace(@Nullable PrintWriter pw, File outputFile) {
+        if (IS_USER) {
+            LogAndPrintln.e(pw, "Tracing is not supported on user builds.");
+            return;
+        }
+        Trace.beginSection("TransitionTracer#stopTrace");
+        LogAndPrintln.i(pw, "Stopping shell transition trace.");
+        synchronized (mEnabledLock) {
+            if (!mEnabled) {
+                LogAndPrintln.e(pw,
+                        "Error: Tracing can't be stopped because it hasn't been started.");
+                return;
+            }
+
+            mEnabled = false;
+            writeTraceToFileLocked(pw, outputFile);
+        }
+        Trace.endSection();
+    }
+
+    boolean isEnabled() {
+        return mEnabled;
+    }
+
+    private void writeTraceToFileLocked(@Nullable PrintWriter pw, File file) {
+        Trace.beginSection("TransitionTracer#writeTraceToFileLocked");
+        try {
+            ProtoOutputStream proto = new ProtoOutputStream();
+            proto.write(MAGIC_NUMBER, MAGIC_NUMBER_VALUE);
+            proto.write(TransitionTraceProto.TIMESTAMP, mTraceStartTimestamp);
+            int pid = android.os.Process.myPid();
+            LogAndPrintln.i(pw, "Writing file to " + file.getAbsolutePath()
+                    + " from process " + pid);
+            mTraceBuffer.writeToFile(file, proto);
+        } catch (IOException e) {
+            LogAndPrintln.e(pw, "Unable to write buffer to file", e);
+        }
+        Trace.endSection();
+    }
+
+    private static class LogAndPrintln {
+        private static void i(@Nullable PrintWriter pw, String msg) {
+            Log.i(LOG_TAG, msg);
+            if (pw != null) {
+                pw.println(msg);
+                pw.flush();
+            }
+        }
+
+        private static void e(@Nullable PrintWriter pw, String msg) {
+            Log.e(LOG_TAG, msg);
+            if (pw != null) {
+                pw.println("ERROR: " + msg);
+                pw.flush();
+            }
+        }
+
+        private static void e(@Nullable PrintWriter pw, String msg, @NonNull Exception e) {
+            Log.e(LOG_TAG, msg, e);
+            if (pw != null) {
+                pw.println("ERROR: " + msg + " ::\n " + e);
+                pw.flush();
+            }
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/wm/UnknownAppVisibilityController.java b/services/core/java/com/android/server/wm/UnknownAppVisibilityController.java
index 5e963cc..41c1e79 100644
--- a/services/core/java/com/android/server/wm/UnknownAppVisibilityController.java
+++ b/services/core/java/com/android/server/wm/UnknownAppVisibilityController.java
@@ -69,6 +69,10 @@
         return mUnknownApps.isEmpty();
     }
 
+    boolean isVisibilityUnknown(ActivityRecord r) {
+        return mUnknownApps.containsKey(r);
+    }
+
     void clear() {
         mUnknownApps.clear();
     }
diff --git a/services/core/java/com/android/server/wm/WallpaperController.java b/services/core/java/com/android/server/wm/WallpaperController.java
index a32a608..6245005 100644
--- a/services/core/java/com/android/server/wm/WallpaperController.java
+++ b/services/core/java/com/android/server/wm/WallpaperController.java
@@ -21,6 +21,7 @@
 import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
 import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
 import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
+import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
 import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER;
 import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY_WITH_WALLPAPER;
 
@@ -181,15 +182,11 @@
             mFindResults.setUseTopWallpaperAsTarget(true);
         }
 
-        final RecentsAnimationController recentsAnimationController =
-                mService.getRecentsAnimationController();
         final boolean animationWallpaper = animatingContainer != null
                 && animatingContainer.getAnimation() != null
                 && animatingContainer.getAnimation().getShowWallpaper();
         final boolean hasWallpaper = w.hasWallpaper() || animationWallpaper;
-        final boolean isRecentsTransitionTarget = (recentsAnimationController != null
-                && recentsAnimationController.isWallpaperVisible(w));
-        if (isRecentsTransitionTarget) {
+        if (isRecentsTransitionTarget(w)) {
             if (DEBUG_WALLPAPER) Slog.v(TAG, "Found recents animation wallpaper target: " + w);
             mFindResults.setWallpaperTarget(w);
             return true;
@@ -213,6 +210,22 @@
         return false;
     };
 
+    private boolean isRecentsTransitionTarget(WindowState w) {
+        if (w.mTransitionController.isShellTransitionsEnabled()) {
+            // Because the recents activity is invisible in background while keyguard is occluded
+            // (the activity window is on screen while keyguard is locked) with recents animation,
+            // the task animating by recents needs to be wallpaper target to make wallpaper visible.
+            // While for unlocked case, because recents activity will be moved to top, it can be
+            // the wallpaper target naturally.
+            return w.mActivityRecord != null && w.mAttrs.type == TYPE_BASE_APPLICATION
+                    && mDisplayContent.isKeyguardLocked()
+                    && w.mTransitionController.isTransientHide(w.getTask());
+        }
+        // The window is either the recents activity or is in the task animating by the recents.
+        final RecentsAnimationController controller = mService.getRecentsAnimationController();
+        return controller != null && controller.isWallpaperVisible(w);
+    }
+
     /**
      * @see #computeLastWallpaperZoomOut()
      */
diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java
index d725718..25193d0 100644
--- a/services/core/java/com/android/server/wm/WindowContainer.java
+++ b/services/core/java/com/android/server/wm/WindowContainer.java
@@ -48,6 +48,7 @@
 import static com.android.server.wm.IdentifierProto.USER_ID;
 import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_ALL;
 import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION;
+import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_RECENTS;
 import static com.android.server.wm.WindowContainer.AnimationFlags.CHILDREN;
 import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS;
 import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION;
@@ -428,6 +429,13 @@
         if (insetsTypes == null || insetsTypes.length == 0) {
             throw new IllegalArgumentException("Insets type not specified.");
         }
+        if (mDisplayContent == null) {
+            // This is possible this container is detached when WM shell is responding to a previous
+            // request. WM shell will be updated when this container is attached again and the
+            // insets need to be updated.
+            Slog.w(TAG, "Can't add local rect insets source provider when detached. " + this);
+            return;
+        }
         if (mLocalInsetsSourceProviders == null) {
             mLocalInsetsSourceProviders = new SparseArray<>();
         }
@@ -1010,6 +1018,9 @@
         if (dc != null && dc != this) {
             dc.getPendingTransaction().merge(mPendingTransaction);
         }
+        if (dc != this && mLocalInsetsSourceProviders != null) {
+            mLocalInsetsSourceProviders.clear();
+        }
         for (int i = mChildren.size() - 1; i >= 0; --i) {
             final WindowContainer child = mChildren.get(i);
             child.onDisplayChanged(dc);
@@ -1159,6 +1170,19 @@
     }
 
     /**
+     * Returns {@code true} if self or the parent container of the window is in transition, e.g.
+     * the app or recents transition. This method is only used when legacy and shell transition
+     * have the same condition to check the animation state.
+     */
+    boolean inTransitionSelfOrParent() {
+        if (!mTransitionController.isShellTransitionsEnabled()) {
+            return isAnimating(PARENTS | TRANSITION,
+                    ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_RECENTS);
+        }
+        return inTransition();
+    }
+
+    /**
      * @return Whether our own container running an animation at the moment.
      */
     final boolean isAnimating() {
@@ -1180,7 +1204,8 @@
         if (!mTransitionController.isShellTransitionsEnabled()) {
             return isAnimating(TRANSITION | CHILDREN, WindowState.EXIT_ANIMATING_TYPES);
         }
-        if (mTransitionController.isCollecting(this)) {
+        // Only check leaf containers because inTransition() includes parent.
+        if (mChildren.isEmpty() && inTransition()) {
             return true;
         }
 
@@ -2458,7 +2483,7 @@
     void assignLayer(Transaction t, int layer) {
         // Don't assign layers while a transition animation is playing
         // TODO(b/173528115): establish robust best-practices around z-order fighting.
-        if (mTransitionController.isPlaying()) return;
+        if (!mTransitionController.canAssignLayers()) return;
         final boolean changed = layer != mLastLayer || mLastRelativeToLayer != null;
         if (mSurfaceControl != null && changed) {
             setLayer(t, layer);
@@ -2679,9 +2704,7 @@
      * will be applied.
      */
     void scheduleAnimation() {
-        if (mParent != null) {
-            mParent.scheduleAnimation();
-        }
+        mWmService.scheduleAnimationLocked();
     }
 
     /**
@@ -2801,6 +2824,10 @@
      *                     snapshot from {@link #getFreezeSnapshotTarget()}.
      */
     void initializeChangeTransition(Rect startBounds, @Nullable SurfaceControl freezeTarget) {
+        if (mDisplayContent.mTransitionController.isShellTransitionsEnabled()) {
+            // TODO(b/207070762): request shell transition for activityEmbedding change.
+            return;
+        }
         mDisplayContent.prepareAppTransition(TRANSIT_CHANGE);
         mDisplayContent.mChangingContainers.add(this);
         // Calculate the relative position in parent container.
@@ -2925,18 +2952,34 @@
         getAnimationPosition(mTmpPoint);
         mTmpRect.offsetTo(0, 0);
 
-        final RemoteAnimationController controller =
-                getDisplayContent().mAppTransition.getRemoteAnimationController();
+        final AppTransition appTransition = getDisplayContent().mAppTransition;
+        final RemoteAnimationController controller = appTransition.getRemoteAnimationController();
         final boolean isChanging = AppTransition.isChangeTransitOld(transit) && enter
                 && isChangingAppTransition();
 
         // Delaying animation start isn't compatible with remote animations at all.
         if (controller != null && !mSurfaceAnimator.isAnimationStartDelayed()) {
+            // Here we load App XML in order to read com.android.R.styleable#Animation_showBackdrop.
+            boolean showBackdrop = false;
+            // Optionally set backdrop color if App explicitly provides it through
+            // {@link Activity#overridePendingTransition(int, int, int)}.
+            @ColorInt int backdropColor = 0;
+            if (controller.isFromActivityEmbedding()) {
+                final int animAttr = AppTransition.mapOpenCloseTransitTypes(transit, enter);
+                final Animation a = animAttr != 0
+                        ? appTransition.loadAnimationAttr(lp, animAttr, transit) : null;
+                showBackdrop = a != null && a.getShowBackdrop();
+                backdropColor = appTransition.getNextAppTransitionBackgroundColor();
+            }
             final Rect localBounds = new Rect(mTmpRect);
             localBounds.offsetTo(mTmpPoint.x, mTmpPoint.y);
             final RemoteAnimationController.RemoteAnimationRecord adapters =
-                    controller.createRemoteAnimationRecord(this, mTmpPoint, localBounds,
-                            screenBounds, (isChanging ? mSurfaceFreezer.mFreezeBounds : null));
+                    controller.createRemoteAnimationRecord(
+                            this, mTmpPoint, localBounds, screenBounds,
+                            (isChanging ? mSurfaceFreezer.mFreezeBounds : null), showBackdrop);
+            if (backdropColor != 0) {
+                adapters.setBackDropColor(backdropColor);
+            }
             if (!isChanging) {
                 adapters.setMode(enter
                         ? RemoteAnimationTarget.MODE_OPENING
@@ -3183,6 +3226,10 @@
 
     void resetSurfacePositionForAnimationLeash(Transaction t) {
         t.setPosition(mSurfaceControl, 0, 0);
+        if (mSyncState != SYNC_STATE_NONE && t != mSyncTransaction) {
+            // Avoid restoring to old position if the sync transaction is applied later.
+            mSyncTransaction.setPosition(mSurfaceControl, 0, 0);
+        }
         mLastSurfacePosition.set(0, 0);
     }
 
@@ -3346,6 +3393,13 @@
             pw.println(prefix + "mLastOrientationSource=" + mLastOrientationSource);
             pw.println(prefix + "deepestLastOrientationSource=" + getLastOrientationSource());
         }
+        if (mLocalInsetsSourceProviders != null && mLocalInsetsSourceProviders.size() != 0) {
+            pw.println(prefix + mLocalInsetsSourceProviders.size() + " LocalInsetsSourceProviders");
+            final String childPrefix = prefix + "  ";
+            for (int i = 0; i < mLocalInsetsSourceProviders.size(); ++i) {
+                mLocalInsetsSourceProviders.valueAt(i).dump(pw, childPrefix);
+            }
+        }
     }
 
     final void updateSurfacePositionNonOrganized() {
@@ -3664,10 +3718,6 @@
             mChildren.get(i).finishSync(outMergedTransaction, cancel);
         }
         if (cancel && mSyncGroup != null) mSyncGroup.onCancelSync(this);
-        clearSyncState();
-    }
-
-    void clearSyncState() {
         mSyncState = SYNC_STATE_NONE;
         mSyncGroup = null;
     }
@@ -3727,6 +3777,15 @@
      * hierarchy change implies a configuration change.
      */
     private void onSyncReparent(WindowContainer oldParent, WindowContainer newParent) {
+        // Check if this is changing displays. If so, mark the old display as "ready" for
+        // transitions. This is to work around the problem where setting readiness against this
+        // container will only set the new display as ready and leave the old display as unready.
+        if (mSyncState != SYNC_STATE_NONE && oldParent != null && newParent != null
+                && oldParent.getDisplayContent() != null && newParent.getDisplayContent() != null
+                && oldParent.getDisplayContent() != newParent.getDisplayContent()) {
+            mTransitionController.setReady(oldParent.getDisplayContent());
+        }
+
         if (newParent == null || newParent.mSyncState == SYNC_STATE_NONE) {
             if (mSyncState == SYNC_STATE_NONE) {
                 return;
diff --git a/services/core/java/com/android/server/wm/WindowContainerThumbnail.java b/services/core/java/com/android/server/wm/WindowContainerThumbnail.java
index 9b6f4d9..b000a98 100644
--- a/services/core/java/com/android/server/wm/WindowContainerThumbnail.java
+++ b/services/core/java/com/android/server/wm/WindowContainerThumbnail.java
@@ -33,7 +33,6 @@
 import android.graphics.PixelFormat;
 import android.graphics.Point;
 import android.hardware.HardwareBuffer;
-import android.os.Process;
 import android.util.proto.ProtoOutputStream;
 import android.view.SurfaceControl;
 import android.view.SurfaceControl.Builder;
@@ -91,7 +90,7 @@
                 .setBLASTLayer()
                 .setFormat(PixelFormat.TRANSLUCENT)
                 .setMetadata(METADATA_WINDOW_TYPE, mWindowContainer.getWindowingMode())
-                .setMetadata(METADATA_OWNER_UID, Process.myUid())
+                .setMetadata(METADATA_OWNER_UID, WindowManagerService.MY_UID)
                 .setCallsite("WindowContainerThumbnail")
                 .build();
 
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 9022186..296390a 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -48,6 +48,7 @@
 import static android.provider.Settings.Global.DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES;
 import static android.provider.Settings.Global.DEVELOPMENT_RENDER_SHADOWS_IN_COMPOSITOR;
 import static android.provider.Settings.Global.DEVELOPMENT_WM_DISPLAY_SETTINGS_PATH;
+import static android.view.ContentRecordingSession.RECORD_CONTENT_TASK;
 import static android.view.Display.DEFAULT_DISPLAY;
 import static android.view.Display.INVALID_DISPLAY;
 import static android.view.WindowManager.DISPLAY_IME_POLICY_FALLBACK_DISPLAY;
@@ -89,6 +90,7 @@
 import static android.view.WindowManager.TRANSIT_NONE;
 import static android.view.WindowManager.TRANSIT_RELAUNCH;
 import static android.view.WindowManagerGlobal.ADD_OKAY;
+import static android.view.WindowManagerGlobal.RELAYOUT_RES_CANCEL_AND_REDRAW;
 import static android.view.WindowManagerGlobal.RELAYOUT_RES_SURFACE_CHANGED;
 import static android.view.WindowManagerPolicyConstants.NAV_BAR_INVALID;
 import static android.view.WindowManagerPolicyConstants.TYPE_LAYER_MULTIPLIER;
@@ -116,6 +118,10 @@
 import static com.android.server.wm.ActivityTaskManagerService.POWER_MODE_REASON_CHANGE_DISPLAY;
 import static com.android.server.wm.DisplayContent.IME_TARGET_CONTROL;
 import static com.android.server.wm.DisplayContent.IME_TARGET_LAYERING;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND_FLOATING;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_SOLID_COLOR;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_WALLPAPER;
 import static com.android.server.wm.RootWindowContainer.MATCH_ATTACHED_TASK_OR_RECENT_TASKS;
 import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_ALL;
 import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION;
@@ -238,10 +244,10 @@
 import android.view.Gravity;
 import android.view.IAppTransitionAnimationSpecsFuture;
 import android.view.ICrossWindowBlurEnabledListener;
+import android.view.IDisplayChangeWindowController;
 import android.view.IDisplayFoldListener;
 import android.view.IDisplayWindowInsetsController;
 import android.view.IDisplayWindowListener;
-import android.view.IDisplayWindowRotationController;
 import android.view.IInputFilter;
 import android.view.IOnKeyguardExitResult;
 import android.view.IPinnedTaskListener;
@@ -287,6 +293,7 @@
 import android.window.ClientWindowFrames;
 import android.window.ITaskFpsCallback;
 import android.window.TaskSnapshot;
+import android.window.WindowContainerToken;
 
 import com.android.internal.R;
 import com.android.internal.annotations.VisibleForTesting;
@@ -397,9 +404,8 @@
 
     private static final String PROPERTY_EMULATOR_CIRCULAR = "ro.emulator.circular";
 
-    // Used to indicate that if there is already a transition set, it should be preserved when
-    // trying to apply a new one.
-    private static final boolean ALWAYS_KEEP_CURRENT = true;
+    static final int MY_PID = myPid();
+    static final int MY_UID = myUid();
 
     static final int LOGTAG_INPUT_FOCUS = 62001;
 
@@ -460,6 +466,7 @@
     final WindowManagerConstants mConstants;
 
     final WindowTracing mWindowTracing;
+    final TransitionTracer mTransitionTracer;
 
     private final DisplayAreaPolicy.Provider mDisplayAreaPolicyProvider;
 
@@ -682,9 +689,9 @@
     final WallpaperVisibilityListeners mWallpaperVisibilityListeners =
             new WallpaperVisibilityListeners();
 
-    IDisplayWindowRotationController mDisplayRotationController = null;
-    private final DeathRecipient mDisplayRotationControllerDeath =
-            () -> mDisplayRotationController = null;
+    IDisplayChangeWindowController mDisplayChangeController = null;
+    private final DeathRecipient mDisplayChangeControllerDeath =
+            () -> mDisplayChangeController = null;
 
     final DisplayWindowListenerController mDisplayNotificationController;
     final TaskSystemBarsListenerController mTaskSystemBarsListenerController;
@@ -1017,7 +1024,7 @@
     private int mExitAnimId, mEnterAnimId;
 
     /** The display that the rotation animation is applying to. */
-    private int mFrozenDisplayId;
+    private int mFrozenDisplayId = INVALID_DISPLAY;
 
     /** Skip repeated ActivityRecords initialization. Note that AppWindowsToken's version of this
      * is a long initialized to Long.MIN_VALUE so that it doesn't match this value on startup. */
@@ -1067,7 +1074,6 @@
 
     Function<SurfaceSession, SurfaceControl.Builder> mSurfaceControlFactory;
     Supplier<SurfaceControl.Transaction> mTransactionFactory;
-    final Supplier<Surface> mSurfaceFactory;
 
     private final SurfaceControl.Transaction mTransaction;
 
@@ -1150,7 +1156,7 @@
             final boolean showBootMsgs, final boolean onlyCore, WindowManagerPolicy policy,
             ActivityTaskManagerService atm) {
         return main(context, im, showBootMsgs, onlyCore, policy, atm,
-                new DisplayWindowSettingsProvider(), SurfaceControl.Transaction::new, Surface::new,
+                new DisplayWindowSettingsProvider(), SurfaceControl.Transaction::new,
                 SurfaceControl.Builder::new);
     }
 
@@ -1163,12 +1169,11 @@
             final boolean showBootMsgs, final boolean onlyCore, WindowManagerPolicy policy,
             ActivityTaskManagerService atm, DisplayWindowSettingsProvider
             displayWindowSettingsProvider, Supplier<SurfaceControl.Transaction> transactionFactory,
-            Supplier<Surface> surfaceFactory,
             Function<SurfaceSession, SurfaceControl.Builder> surfaceControlFactory) {
         final WindowManagerService[] wms = new WindowManagerService[1];
         DisplayThread.getHandler().runWithScissors(() ->
                 wms[0] = new WindowManagerService(context, im, showBootMsgs, onlyCore, policy,
-                        atm, displayWindowSettingsProvider, transactionFactory, surfaceFactory,
+                        atm, displayWindowSettingsProvider, transactionFactory,
                         surfaceControlFactory), 0);
         return wms[0];
     }
@@ -1178,7 +1183,7 @@
             @Override
             public void run() {
                 WindowManagerPolicyThread.set(Thread.currentThread(), Looper.myLooper());
-                mPolicy.init(mContext, WindowManagerService.this, WindowManagerService.this);
+                mPolicy.init(mContext, WindowManagerService.this);
             }
         }, 0);
     }
@@ -1193,7 +1198,6 @@
             boolean showBootMsgs, boolean onlyCore, WindowManagerPolicy policy,
             ActivityTaskManagerService atm, DisplayWindowSettingsProvider
             displayWindowSettingsProvider, Supplier<SurfaceControl.Transaction> transactionFactory,
-            Supplier<Surface> surfaceFactory,
             Function<SurfaceSession, SurfaceControl.Builder> surfaceControlFactory) {
         installLock(this, INDEX_WINDOW);
         mGlobalLock = atm.getGlobalLock();
@@ -1208,8 +1212,7 @@
                 com.android.internal.R.bool.config_hasPermanentDpad);
         mInTouchMode = context.getResources().getBoolean(
                 com.android.internal.R.bool.config_defaultInTouchMode);
-        inputManager.setInTouchMode(
-                mInTouchMode, myPid(), myUid(), /* hasPermission = */ true);
+        inputManager.setInTouchMode(mInTouchMode, MY_PID, MY_UID, true /* hasPermission */);
         mDrawLockTimeoutMillis = context.getResources().getInteger(
                 com.android.internal.R.integer.config_drawLockTimeoutMillis);
         mAllowAnimationsInLowPowerMode = context.getResources().getBoolean(
@@ -1233,7 +1236,6 @@
 
         mSurfaceControlFactory = surfaceControlFactory;
         mTransactionFactory = transactionFactory;
-        mSurfaceFactory = surfaceFactory;
         mTransaction = mTransactionFactory.get();
 
         mPolicy = policy;
@@ -1251,6 +1253,7 @@
 
         mWindowTracing = WindowTracing.createDefaultAndStartLooper(this,
                 Choreographer.getInstance());
+        mTransitionTracer = new TransitionTracer();
 
         LocalServices.addService(WindowManagerPolicy.class, mPolicy);
 
@@ -1449,7 +1452,8 @@
     public int addWindow(Session session, IWindow client, LayoutParams attrs, int viewVisibility,
             int displayId, int requestUserId, InsetsVisibilities requestedVisibilities,
             InputChannel outInputChannel, InsetsState outInsetsState,
-            InsetsSourceControl[] outActiveControls) {
+            InsetsSourceControl[] outActiveControls, Rect outAttachedFrame,
+            float[] outSizeCompatScale) {
         Arrays.fill(outActiveControls, null);
         int[] appOp = new int[1];
         final boolean isRoundedCornerOverlay = (attrs.privateFlags
@@ -1864,6 +1868,17 @@
 
             outInsetsState.set(win.getCompatInsetsState(), win.isClientLocal());
             getInsetsSourceControls(win, outActiveControls);
+
+            if (win.mLayoutAttached) {
+                outAttachedFrame.set(win.getParentWindow().getFrame());
+                if (win.mInvGlobalScale != 1f) {
+                    outAttachedFrame.scale(win.mInvGlobalScale);
+                }
+            } else {
+                // Make this invalid which indicates a null attached frame.
+                outAttachedFrame.set(0, 0, -1, -1);
+            }
+            outSizeCompatScale[0] = win.getSizeCompatScale();
         }
 
         Binder.restoreCallingIdentity(origId);
@@ -2083,7 +2098,7 @@
         if (win.mAttrs.type == TYPE_WALLPAPER) {
             dc.mWallpaperController.clearLastWallpaperTimeoutTime();
             dc.pendingLayoutChanges |= FINISH_LAYOUT_REDO_WALLPAPER;
-        } else if (win.hasWallpaper()) {
+        } else if (dc.mWallpaperController.isWallpaperTarget(win)) {
             dc.pendingLayoutChanges |= FINISH_LAYOUT_REDO_WALLPAPER;
         }
 
@@ -2216,6 +2231,20 @@
                         == PackageManager.PERMISSION_GRANTED;
     }
 
+    /**
+     * Returns whether this window can proceed with drawing or needs to retry later.
+     */
+    public boolean cancelDraw(Session session, IWindow client) {
+        synchronized (mGlobalLock) {
+            final WindowState win = windowForClientLocked(session, client, false);
+            if (win == null) {
+                return false;
+            }
+
+            return win.cancelAndRedraw();
+        }
+    }
+
     public int relayoutWindow(Session session, IWindow client, LayoutParams attrs,
             int requestedWidth, int requestedHeight, int viewVisibility, int flags,
             ClientWindowFrames outFrames, MergedConfiguration mergedConfiguration,
@@ -2232,6 +2261,11 @@
             if (win == null) {
                 return 0;
             }
+
+            if (win.cancelAndRedraw() && win.mPrepareSyncSeqId <= win.mLastSeqIdSentToRelayout) {
+                result |= RELAYOUT_RES_CANCEL_AND_REDRAW;
+            }
+
             final DisplayContent displayContent = win.getDisplayContent();
             final DisplayPolicy displayPolicy = displayContent.getDisplayPolicy();
 
@@ -2258,9 +2292,21 @@
                     throw new IllegalArgumentException(
                             "Window type can not be changed after the window is added.");
                 }
-                if (!Arrays.equals(win.mAttrs.providesInsetsTypes, attrs.providesInsetsTypes)) {
-                    throw new IllegalArgumentException(
-                            "Insets types can not be changed after the window is added.");
+                if (!(win.mAttrs.providedInsets == null && attrs.providedInsets == null)) {
+                    if (win.mAttrs.providedInsets == null || attrs.providedInsets == null
+                            || (win.mAttrs.providedInsets.length != attrs.providedInsets.length)) {
+                        throw new IllegalArgumentException(
+                                "Insets types can not be changed after the window is added.");
+                    } else {
+                        final int insetsTypes = attrs.providedInsets.length;
+                        for (int i = 0; i < insetsTypes; i++) {
+                            if (win.mAttrs.providedInsets[i].type != attrs.providedInsets[i].type) {
+                                throw new IllegalArgumentException(
+                                        "Insets types can not be changed after the window is "
+                                                + "added.");
+                            }
+                        }
+                    }
                 }
 
                 flagChanges = win.mAttrs.flags ^ attrs.flags;
@@ -2634,29 +2680,6 @@
         return result;
     }
 
-    int updateViewVisibility(Session session, IWindow client, LayoutParams attrs,
-            int viewVisibility, MergedConfiguration outMergedConfiguration,
-            SurfaceControl outSurfaceControl, InsetsState outInsetsState,
-            InsetsSourceControl[] outActiveControls) {
-        // TODO(b/161810301): Finish the implementation.
-        return 0;
-    }
-
-    void updateWindowLayout(Session session, IWindow client, LayoutParams attrs, int flags,
-            ClientWindowFrames clientWindowFrames, int requestedWidth, int requestedHeight) {
-        final long origId = Binder.clearCallingIdentity();
-        synchronized (mGlobalLock) {
-            final WindowState win = windowForClientLocked(session, client, false);
-            if (win == null) {
-                return;
-            }
-            win.setFrames(clientWindowFrames, requestedWidth, requestedHeight);
-
-            // TODO(b/161810301): Finish the implementation.
-        }
-        Binder.restoreCallingIdentity(origId);
-    }
-
     public boolean outOfMemoryWindow(Session session, IWindow client) {
         final long origId = Binder.clearCallingIdentity();
 
@@ -2704,7 +2727,7 @@
     }
 
     boolean checkCallingPermission(String permission, String func, boolean printLog) {
-        if (Binder.getCallingPid() == myPid()) {
+        if (Binder.getCallingPid() == MY_PID) {
             return true;
         }
 
@@ -2864,7 +2887,7 @@
                 // registration in DisplayContent#onParentChanged at DisplayContent initialization.
                 final DisplayContent dc = mRoot.getDisplayContent(displayId);
                 if (dc == null) {
-                    if (Binder.getCallingPid() != myPid()) {
+                    if (Binder.getCallingPid() != MY_PID) {
                         throw new WindowManager.InvalidDisplayException("attachToDisplayContent: "
                                 + "trying to attach to a non-existing display:" + displayId);
                     }
@@ -4260,12 +4283,13 @@
                                 .notifyOnActivityRotation(displayContent.mDisplayId);
                     }
 
-                    final boolean pendingRemoteRotation = rotationChanged
-                            && (displayContent.getDisplayRotation().isWaitingForRemoteRotation()
+                    final boolean pendingRemoteDisplayChange = rotationChanged
+                            && (displayContent.mRemoteDisplayChangeController
+                                    .isWaitingForRemoteDisplayChange()
                             || displayContent.mTransitionController.isCollecting());
                     // Even if alwaysSend, we are waiting for a transition or remote to provide
-                    // rotated configuration, so we can't update configuration yet.
-                    if (!pendingRemoteRotation) {
+                    // updated configuration, so we can't update configuration yet.
+                    if (!pendingRemoteDisplayChange) {
                         if (!rotationChanged || forceRelayout) {
                             displayContent.setLayoutNeeded();
                             layoutNeeded = true;
@@ -4297,17 +4321,17 @@
     }
 
     @Override
-    public void setDisplayWindowRotationController(IDisplayWindowRotationController controller) {
+    public void setDisplayChangeWindowController(IDisplayChangeWindowController controller) {
         mAtmService.enforceTaskPermission("setDisplayWindowRotationController");
         try {
             synchronized (mGlobalLock) {
-                if (mDisplayRotationController != null) {
-                    mDisplayRotationController.asBinder().unlinkToDeath(
-                            mDisplayRotationControllerDeath, 0);
-                    mDisplayRotationController = null;
+                if (mDisplayChangeController != null) {
+                    mDisplayChangeController.asBinder().unlinkToDeath(
+                            mDisplayChangeControllerDeath, 0);
+                    mDisplayChangeController = null;
                 }
-                controller.asBinder().linkToDeath(mDisplayRotationControllerDeath, 0);
-                mDisplayRotationController = controller;
+                controller.asBinder().linkToDeath(mDisplayChangeControllerDeath, 0);
+                mDisplayChangeController = controller;
             }
         } catch (RemoteException e) {
             throw new RuntimeException("Unable to set rotation controller");
@@ -5596,7 +5620,7 @@
                             mWindowsInsetsChanged = 0;
                             // We need to update resizing windows and dispatch the new insets state
                             // to them.
-                            mRoot.performSurfacePlacement();
+                            mWindowPlacerLocked.performSurfacePlacement();
                         }
                     }
                     break;
@@ -5694,6 +5718,25 @@
         }
     }
 
+    void setSandboxDisplayApis(int displayId, boolean sandboxDisplayApis) {
+        if (mContext.checkCallingOrSelfPermission(WRITE_SECURE_SETTINGS)
+                != PackageManager.PERMISSION_GRANTED) {
+            throw new SecurityException("Must hold permission " + WRITE_SECURE_SETTINGS);
+        }
+
+        final long ident = Binder.clearCallingIdentity();
+        try {
+            synchronized (mGlobalLock) {
+                final DisplayContent displayContent = mRoot.getDisplayContent(displayId);
+                if (displayContent != null) {
+                    displayContent.setSandboxDisplayApis(sandboxDisplayApis);
+                }
+            }
+        } finally {
+            Binder.restoreCallingIdentity(ident);
+        }
+    }
+
     /** The global settings only apply to default display. */
     private boolean applyForcedPropertiesForDefaultDisplay() {
         boolean changed = false;
@@ -5874,6 +5917,21 @@
     }
 
     @Override
+    public void startTransitionTrace() {
+        mTransitionTracer.startTrace(null /* printwriter */);
+    }
+
+    @Override
+    public void stopTransitionTrace() {
+        mTransitionTracer.stopTrace(null /* printwriter */);
+    }
+
+    @Override
+    public boolean isTransitionTraceEnabled() {
+        return mTransitionTracer.isEnabled();
+    }
+
+    @Override
     public boolean registerCrossWindowBlurEnabledListener(
                 ICrossWindowBlurEnabledListener listener) {
         return mBlurController.registerCrossWindowBlurEnabledListener(listener);
@@ -5919,10 +5977,10 @@
     }
 
     void makeWindowFreezingScreenIfNeededLocked(WindowState w) {
-        // If the screen is currently frozen or off, then keep
-        // it frozen/off until this window draws at its new
-        // orientation.
-        if (!w.mToken.okToDisplay() && mWindowsFreezingScreen != WINDOWS_FREEZING_SCREENS_TIMEOUT) {
+        // If the screen is currently frozen, then keep it frozen until this window draws at its
+        // new orientation.
+        if (mFrozenDisplayId != INVALID_DISPLAY && mFrozenDisplayId == w.getDisplayId()
+                && mWindowsFreezingScreen != WINDOWS_FREEZING_SCREENS_TIMEOUT) {
             ProtoLog.v(WM_DEBUG_ORIENTATION, "Changing surface while display frozen: %s", w);
             w.setOrientationChanging(true);
             if (mWindowsFreezingScreen == WINDOWS_FREEZING_SCREENS_NONE) {
@@ -5998,9 +6056,7 @@
 
     /** Note that Locked in this case is on mLayoutToAnim */
     void scheduleAnimationLocked() {
-        if (mAnimator != null) {
-            mAnimator.scheduleAnimation();
-        }
+        mAnimator.scheduleAnimation();
     }
 
     boolean updateFocusedWindowLocked(int mode, boolean updateInputWindows) {
@@ -6087,24 +6143,24 @@
         final DisplayContent displayContent = mRoot.getDisplayContent(mFrozenDisplayId);
         final int numOpeningApps;
         final boolean waitingForConfig;
-        final boolean waitingForRemoteRotation;
+        final boolean waitingForRemoteDisplayChange;
         if (displayContent != null) {
             numOpeningApps = displayContent.mOpeningApps.size();
             waitingForConfig = displayContent.mWaitingForConfig;
-            waitingForRemoteRotation =
-                    displayContent.getDisplayRotation().isWaitingForRemoteRotation();
+            waitingForRemoteDisplayChange = displayContent.mRemoteDisplayChangeController
+                    .isWaitingForRemoteDisplayChange();
         } else {
-            waitingForConfig = waitingForRemoteRotation = false;
+            waitingForConfig = waitingForRemoteDisplayChange = false;
             numOpeningApps = 0;
         }
-        if (waitingForConfig || waitingForRemoteRotation || mAppsFreezingScreen > 0
+        if (waitingForConfig || waitingForRemoteDisplayChange || mAppsFreezingScreen > 0
                 || mWindowsFreezingScreen == WINDOWS_FREEZING_SCREENS_ACTIVE
                 || mClientFreezingScreen || numOpeningApps > 0) {
             ProtoLog.d(WM_DEBUG_ORIENTATION, "stopFreezingDisplayLocked: Returning "
-                    + "waitingForConfig=%b, waitingForRemoteRotation=%b, "
+                    + "waitingForConfig=%b, waitingForRemoteDisplayChange=%b, "
                     + "mAppsFreezingScreen=%d, mWindowsFreezingScreen=%d, "
                     + "mClientFreezingScreen=%b, mOpeningApps.size()=%d",
-                    waitingForConfig, waitingForRemoteRotation,
+                    waitingForConfig, waitingForRemoteDisplayChange,
                     mAppsFreezingScreen, mWindowsFreezingScreen,
                     mClientFreezingScreen, numOpeningApps);
             return;
@@ -6990,13 +7046,14 @@
     }
 
     public void onOverlayChanged() {
-        synchronized (mGlobalLock) {
-            mRoot.forAllDisplays(displayContent -> {
-                displayContent.getDisplayPolicy().onOverlayChangedLw();
-                displayContent.updateDisplayInfo();
-            });
-            requestTraversal();
-        }
+        // Post to display thread so it can get the latest display info.
+        mH.post(() -> {
+            synchronized (mGlobalLock) {
+                mAtmService.deferWindowLayout();
+                mRoot.forAllDisplays(dc -> dc.getDisplayPolicy().onOverlayChanged());
+                mAtmService.continueWindowLayout();
+            }
+        });
     }
 
     @Override
@@ -8236,6 +8293,26 @@
         @Override
         public void setContentRecordingSession(@Nullable ContentRecordingSession incomingSession) {
             synchronized (mGlobalLock) {
+                // Allow the controller to handle teardown or a non-task session.
+                if (incomingSession == null
+                        || incomingSession.getContentToRecord() != RECORD_CONTENT_TASK) {
+                    mContentRecordingController.setContentRecordingSessionLocked(incomingSession,
+                            WindowManagerService.this);
+                    return;
+                }
+                // For a task session, find the activity identified by the launch cookie.
+                final WindowContainerToken wct = getTaskWindowContainerTokenForLaunchCookie(
+                        incomingSession.getTokenToRecord());
+                if (wct == null) {
+                    Slog.w(TAG, "Handling a new recording session; unable to find the "
+                            + "WindowContainerToken");
+                    mContentRecordingController.setContentRecordingSessionLocked(null,
+                            WindowManagerService.this);
+                    return;
+                }
+                // Replace the launch cookie in the session details with the task's
+                // WindowContainerToken.
+                incomingSession.setTokenToRecord(wct.asBinder());
                 mContentRecordingController.setContentRecordingSessionLocked(incomingSession,
                         WindowManagerService.this);
             }
@@ -8494,6 +8571,38 @@
     }
 
     /**
+     * Retrieve the {@link WindowContainerToken} of the task that contains the activity started
+     * with the given launch cookie.
+     *
+     * @param launchCookie the launch cookie set on the {@link ActivityOptions} when starting an
+     *                     activity
+     * @return a token representing the task containing the activity started with the given launch
+     * cookie, or {@code null} if the token couldn't be found.
+     */
+    @VisibleForTesting
+    @Nullable
+    WindowContainerToken getTaskWindowContainerTokenForLaunchCookie(@NonNull IBinder launchCookie) {
+        // Find the activity identified by the launch cookie.
+        final ActivityRecord targetActivity = mRoot.getActivity(
+                activity -> activity.mLaunchCookie == launchCookie);
+        if (targetActivity == null) {
+            Slog.w(TAG, "Unable to find the activity for this launch cookie");
+            return null;
+        }
+        if (targetActivity.getTask() == null) {
+            Slog.w(TAG, "Unable to find the task for this launch cookie");
+            return null;
+        }
+        WindowContainerToken taskWindowContainerToken =
+                targetActivity.getTask().mRemoteToken.toWindowContainerToken();
+        if (taskWindowContainerToken == null) {
+            Slog.w(TAG, "Unable to find the WindowContainerToken for " + targetActivity.getName());
+            return null;
+        }
+        return taskWindowContainerToken;
+    }
+
+    /**
      * You need ALLOW_SLIPPERY_TOUCHES permission to be able to set FLAG_SLIPPERY.
      */
     private int sanitizeFlagSlippery(int flags, String windowName, int callingUid, int callingPid) {
@@ -8753,7 +8862,7 @@
     @Override
     public boolean getWindowInsets(WindowManager.LayoutParams attrs, int displayId,
             InsetsState outInsetsState) {
-        final boolean fromLocal = Binder.getCallingPid() == myPid();
+        final boolean fromLocal = Binder.getCallingPid() == MY_PID;
         final int uid = Binder.getCallingUid();
         final long origId = Binder.clearCallingIdentity();
         try {
@@ -9148,4 +9257,33 @@
             Binder.restoreCallingIdentity(token);
         }
     }
+
+    /**
+     * Gets the background color of the letterbox. Considered invalid if the background has
+     * multiple colors {@link #isLetterboxBackgroundMultiColored}
+     */
+    @Override
+    public int getLetterboxBackgroundColorInArgb() {
+        return mLetterboxConfiguration.getLetterboxBackgroundColor().toArgb();
+    }
+
+    /**
+     *  Whether the outer area of the letterbox has multiple colors (e.g. blurred background).
+     */
+    @Override
+    public boolean isLetterboxBackgroundMultiColored() {
+        @LetterboxConfiguration.LetterboxBackgroundType int letterboxBackgroundType =
+                mLetterboxConfiguration.getLetterboxBackgroundType();
+        switch (letterboxBackgroundType) {
+            case LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND_FLOATING:
+            case LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND:
+            case LETTERBOX_BACKGROUND_WALLPAPER:
+                return true;
+            case LETTERBOX_BACKGROUND_SOLID_COLOR:
+                return false;
+            default:
+                throw new AssertionError(
+                        "Unexpected letterbox background type: " + letterboxBackgroundType);
+        }
+    }
 }
diff --git a/services/core/java/com/android/server/wm/WindowManagerShellCommand.java b/services/core/java/com/android/server/wm/WindowManagerShellCommand.java
index 34c9348..ff43a96 100644
--- a/services/core/java/com/android/server/wm/WindowManagerShellCommand.java
+++ b/services/core/java/com/android/server/wm/WindowManagerShellCommand.java
@@ -19,6 +19,19 @@
 import static android.os.Build.IS_USER;
 import static android.view.CrossWindowBlurListeners.CROSS_WINDOW_BLUR_SUPPORTED;
 
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND_FLOATING;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_SOLID_COLOR;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_WALLPAPER;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_CENTER;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_LEFT;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_RIGHT;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_VERTICAL_REACHABILITY_POSITION_BOTTOM;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_VERTICAL_REACHABILITY_POSITION_CENTER;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_VERTICAL_REACHABILITY_POSITION_TOP;
+
+import android.content.res.Resources.NotFoundException;
+import android.graphics.Color;
 import android.graphics.Point;
 import android.graphics.Rect;
 import android.os.ParcelFileDescriptor;
@@ -36,6 +49,9 @@
 import com.android.internal.protolog.ProtoLogImpl;
 import com.android.server.LocalServices;
 import com.android.server.statusbar.StatusBarManagerInternal;
+import com.android.server.wm.LetterboxConfiguration.LetterboxBackgroundType;
+import com.android.server.wm.LetterboxConfiguration.LetterboxHorizontalReachabilityPosition;
+import com.android.server.wm.LetterboxConfiguration.LetterboxVerticalReachabilityPosition;
 
 import java.io.IOException;
 import java.io.PrintWriter;
@@ -58,10 +74,12 @@
 
     // Internal service impl -- must perform security checks before touching.
     private final WindowManagerService mInternal;
+    private final LetterboxConfiguration mLetterboxConfiguration;
 
     public WindowManagerShellCommand(WindowManagerService service) {
         mInterface = service;
         mInternal = service;
+        mLetterboxConfiguration = service.mLetterboxConfiguration;
     }
 
     @Override
@@ -113,6 +131,14 @@
                     return runGetIgnoreOrientationRequest(pw);
                 case "dump-visible-window-views":
                     return runDumpVisibleWindowViews(pw);
+                case "set-letterbox-style":
+                    return runSetLetterboxStyle(pw);
+                case "get-letterbox-style":
+                    return runGetLetterboxStyle(pw);
+                case "reset-letterbox-style":
+                    return runResetLetterboxStyle(pw);
+                case "set-sandbox-display-apis":
+                    return runSandboxDisplayApis(pw);
                 case "set-multi-window-config":
                     return runSetMultiWindowConfig();
                 case "get-multi-window-config":
@@ -123,6 +149,8 @@
                     return runReset(pw);
                 case "disable-blur":
                     return runSetBlurDisabled(pw);
+                case "shell":
+                    return runWmShellCommand(pw);
                 default:
                     return handleDefaultCommands(cmd);
             }
@@ -331,6 +359,37 @@
         return 0;
     }
 
+    /**
+     * Override display size and metrics to reflect the DisplayArea of the calling activity.
+     */
+    private int runSandboxDisplayApis(PrintWriter pw) throws RemoteException {
+        int displayId = Display.DEFAULT_DISPLAY;
+        String arg = getNextArgRequired();
+        if ("-d".equals(arg)) {
+            displayId = Integer.parseInt(getNextArgRequired());
+            arg = getNextArgRequired();
+        }
+
+        final boolean sandboxDisplayApis;
+        switch (arg) {
+            case "true":
+            case "1":
+                sandboxDisplayApis = true;
+                break;
+            case "false":
+            case "0":
+                sandboxDisplayApis = false;
+                break;
+            default:
+                getErrPrintWriter().println("Error: expecting true, 1, false, 0, but we "
+                        + "get " + arg);
+                return -1;
+        }
+
+        mInternal.setSandboxDisplayApis(displayId, sandboxDisplayApis);
+        return 0;
+    }
+
     private int runDismissKeyguard(PrintWriter pw) throws RemoteException {
         mInterface.dismissKeyguard(null /* callback */, null /* message */);
         return 0;
@@ -553,6 +612,497 @@
         return 0;
     }
 
+    private int runSetFixedOrientationLetterboxAspectRatio(PrintWriter pw) throws RemoteException {
+        final float aspectRatio;
+        try {
+            String arg = getNextArgRequired();
+            aspectRatio = Float.parseFloat(arg);
+        } catch (NumberFormatException  e) {
+            getErrPrintWriter().println("Error: bad aspect ratio format " + e);
+            return -1;
+        } catch (IllegalArgumentException  e) {
+            getErrPrintWriter().println(
+                    "Error: aspect ratio should be provided as an argument " + e);
+            return -1;
+        }
+        synchronized (mInternal.mGlobalLock) {
+            mLetterboxConfiguration.setFixedOrientationLetterboxAspectRatio(aspectRatio);
+        }
+        return 0;
+    }
+
+    private int runSetDefaultMinAspectRatioForUnresizableApps(PrintWriter pw)
+            throws RemoteException {
+        final float aspectRatio;
+        try {
+            String arg = getNextArgRequired();
+            aspectRatio = Float.parseFloat(arg);
+        } catch (NumberFormatException  e) {
+            getErrPrintWriter().println("Error: bad aspect ratio format " + e);
+            return -1;
+        } catch (IllegalArgumentException  e) {
+            getErrPrintWriter().println(
+                    "Error: aspect ratio should be provided as an argument " + e);
+            return -1;
+        }
+        synchronized (mInternal.mGlobalLock) {
+            mLetterboxConfiguration.setDefaultMinAspectRatioForUnresizableApps(aspectRatio);
+        }
+        return 0;
+    }
+
+    private int runSetLetterboxActivityCornersRadius(PrintWriter pw) throws RemoteException {
+        final int cornersRadius;
+        try {
+            String arg = getNextArgRequired();
+            cornersRadius = Integer.parseInt(arg);
+        } catch (NumberFormatException  e) {
+            getErrPrintWriter().println("Error: bad corners radius format " + e);
+            return -1;
+        } catch (IllegalArgumentException  e) {
+            getErrPrintWriter().println(
+                    "Error: corners radius should be provided as an argument " + e);
+            return -1;
+        }
+        synchronized (mInternal.mGlobalLock) {
+            mLetterboxConfiguration.setLetterboxActivityCornersRadius(cornersRadius);
+        }
+        return 0;
+    }
+
+    private int runSetLetterboxBackgroundType(PrintWriter pw) throws RemoteException {
+        @LetterboxBackgroundType final int backgroundType;
+        try {
+            String arg = getNextArgRequired();
+            switch (arg) {
+                case "solid_color":
+                    backgroundType = LETTERBOX_BACKGROUND_SOLID_COLOR;
+                    break;
+                case "app_color_background":
+                    backgroundType = LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND;
+                    break;
+                case "app_color_background_floating":
+                    backgroundType = LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND_FLOATING;
+                    break;
+                case "wallpaper":
+                    backgroundType = LETTERBOX_BACKGROUND_WALLPAPER;
+                    break;
+                default:
+                    getErrPrintWriter().println(
+                            "Error: 'solid_color', 'app_color_background' or "
+                            + "'wallpaper' should be provided as an argument");
+                    return -1;
+            }
+        } catch (IllegalArgumentException  e) {
+            getErrPrintWriter().println(
+                    "Error: 'solid_color', 'app_color_background' or "
+                        + "'wallpaper' should be provided as an argument" + e);
+            return -1;
+        }
+        synchronized (mInternal.mGlobalLock) {
+            mLetterboxConfiguration.setLetterboxBackgroundType(backgroundType);
+        }
+        return 0;
+    }
+
+    private int runSetLetterboxBackgroundColorResource(PrintWriter pw) throws RemoteException {
+        final int colorId;
+        try {
+            String arg = getNextArgRequired();
+            colorId = mInternal.mContext.getResources()
+                    .getIdentifier(arg, "color", "com.android.internal");
+        } catch (NotFoundException e) {
+            getErrPrintWriter().println(
+                    "Error: color in '@android:color/resource_name' format should be provided as "
+                            + "an argument " + e);
+            return -1;
+        }
+        synchronized (mInternal.mGlobalLock) {
+            mLetterboxConfiguration.setLetterboxBackgroundColorResourceId(colorId);
+        }
+        return 0;
+    }
+
+    private int runSetLetterboxBackgroundColor(PrintWriter pw) throws RemoteException {
+        final Color color;
+        try {
+            String arg = getNextArgRequired();
+            color = Color.valueOf(Color.parseColor(arg));
+        } catch (IllegalArgumentException  e) {
+            getErrPrintWriter().println(
+                    "Error: color in #RRGGBB format should be provided as "
+                            + "an argument " + e);
+            return -1;
+        }
+        synchronized (mInternal.mGlobalLock) {
+            mLetterboxConfiguration.setLetterboxBackgroundColor(color);
+        }
+        return 0;
+    }
+
+    private int runSetLetterboxBackgroundWallpaperBlurRadius(PrintWriter pw)
+            throws RemoteException {
+        final int radius;
+        try {
+            String arg = getNextArgRequired();
+            radius = Integer.parseInt(arg);
+        } catch (NumberFormatException  e) {
+            getErrPrintWriter().println("Error: blur radius format " + e);
+            return -1;
+        } catch (IllegalArgumentException  e) {
+            getErrPrintWriter().println(
+                    "Error: blur radius should be provided as an argument " + e);
+            return -1;
+        }
+        synchronized (mInternal.mGlobalLock) {
+            mLetterboxConfiguration.setLetterboxBackgroundWallpaperBlurRadius(radius);
+        }
+        return 0;
+    }
+
+    private int runSetLetterboxBackgroundWallpaperDarkScrimAlpha(PrintWriter pw)
+            throws RemoteException {
+        final float alpha;
+        try {
+            String arg = getNextArgRequired();
+            alpha = Float.parseFloat(arg);
+        } catch (NumberFormatException  e) {
+            getErrPrintWriter().println("Error: bad alpha format " + e);
+            return -1;
+        } catch (IllegalArgumentException  e) {
+            getErrPrintWriter().println(
+                    "Error: alpha should be provided as an argument " + e);
+            return -1;
+        }
+        synchronized (mInternal.mGlobalLock) {
+            mLetterboxConfiguration.setLetterboxBackgroundWallpaperDarkScrimAlpha(alpha);
+        }
+        return 0;
+    }
+
+    private int runSetLetterboxHorizontalPositionMultiplier(PrintWriter pw) throws RemoteException {
+        final float multiplier;
+        try {
+            String arg = getNextArgRequired();
+            multiplier = Float.parseFloat(arg);
+        } catch (NumberFormatException  e) {
+            getErrPrintWriter().println("Error: bad multiplier format " + e);
+            return -1;
+        } catch (IllegalArgumentException  e) {
+            getErrPrintWriter().println(
+                    "Error: multiplier should be provided as an argument " + e);
+            return -1;
+        }
+        synchronized (mInternal.mGlobalLock) {
+            mLetterboxConfiguration.setLetterboxHorizontalPositionMultiplier(multiplier);
+        }
+        return 0;
+    }
+
+    private int runSetLetterboxVerticalPositionMultiplier(PrintWriter pw) throws RemoteException {
+        final float multiplier;
+        try {
+            String arg = getNextArgRequired();
+            multiplier = Float.parseFloat(arg);
+        } catch (NumberFormatException  e) {
+            getErrPrintWriter().println("Error: bad multiplier format " + e);
+            return -1;
+        } catch (IllegalArgumentException  e) {
+            getErrPrintWriter().println(
+                    "Error: multiplier should be provided as an argument " + e);
+            return -1;
+        }
+        synchronized (mInternal.mGlobalLock) {
+            mLetterboxConfiguration.setLetterboxVerticalPositionMultiplier(multiplier);
+        }
+        return 0;
+    }
+
+    private int runSetLetterboxIsHorizontalReachabilityEnabled(PrintWriter pw)
+            throws RemoteException {
+        String arg = getNextArg();
+        final boolean enabled;
+        switch (arg) {
+            case "true":
+            case "1":
+                enabled = true;
+                break;
+            case "false":
+            case "0":
+                enabled = false;
+                break;
+            default:
+                getErrPrintWriter().println("Error: expected true, 1, false, 0, but got " + arg);
+                return -1;
+        }
+
+        synchronized (mInternal.mGlobalLock) {
+            mLetterboxConfiguration.setIsHorizontalReachabilityEnabled(enabled);
+        }
+        return 0;
+    }
+
+    private int runSetLetterboxIsVerticalReachabilityEnabled(PrintWriter pw)
+            throws RemoteException {
+        String arg = getNextArg();
+        final boolean enabled;
+        switch (arg) {
+            case "true":
+            case "1":
+                enabled = true;
+                break;
+            case "false":
+            case "0":
+                enabled = false;
+                break;
+            default:
+                getErrPrintWriter().println("Error: expected true, 1, false, 0, but got " + arg);
+                return -1;
+        }
+
+        synchronized (mInternal.mGlobalLock) {
+            mLetterboxConfiguration.setIsVerticalReachabilityEnabled(enabled);
+        }
+        return 0;
+    }
+
+    private int runSetLetterboxDefaultPositionForHorizontalReachability(PrintWriter pw)
+            throws RemoteException {
+        @LetterboxHorizontalReachabilityPosition final int position;
+        try {
+            String arg = getNextArgRequired();
+            switch (arg) {
+                case "left":
+                    position = LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_LEFT;
+                    break;
+                case "center":
+                    position = LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_CENTER;
+                    break;
+                case "right":
+                    position = LETTERBOX_HORIZONTAL_REACHABILITY_POSITION_RIGHT;
+                    break;
+                default:
+                    getErrPrintWriter().println(
+                            "Error: 'left', 'center' or 'right' are expected as an argument");
+                    return -1;
+            }
+        } catch (IllegalArgumentException  e) {
+            getErrPrintWriter().println(
+                    "Error: 'left', 'center' or 'right' are expected as an argument" + e);
+            return -1;
+        }
+        synchronized (mInternal.mGlobalLock) {
+            mLetterboxConfiguration.setDefaultPositionForHorizontalReachability(position);
+        }
+        return 0;
+    }
+
+    private int runSetLetterboxDefaultPositionForVerticalReachability(PrintWriter pw)
+            throws RemoteException {
+        @LetterboxVerticalReachabilityPosition final int position;
+        try {
+            String arg = getNextArgRequired();
+            switch (arg) {
+                case "top":
+                    position = LETTERBOX_VERTICAL_REACHABILITY_POSITION_TOP;
+                    break;
+                case "center":
+                    position = LETTERBOX_VERTICAL_REACHABILITY_POSITION_CENTER;
+                    break;
+                case "bottom":
+                    position = LETTERBOX_VERTICAL_REACHABILITY_POSITION_BOTTOM;
+                    break;
+                default:
+                    getErrPrintWriter().println(
+                            "Error: 'top', 'center' or 'bottom' are expected as an argument");
+                    return -1;
+            }
+        } catch (IllegalArgumentException  e) {
+            getErrPrintWriter().println(
+                    "Error: 'top', 'center' or 'bottom' are expected as an argument" + e);
+            return -1;
+        }
+        synchronized (mInternal.mGlobalLock) {
+            mLetterboxConfiguration.setDefaultPositionForVerticalReachability(position);
+        }
+        return 0;
+    }
+
+    private int runSetLetterboxIsEducationEnabled(PrintWriter pw) throws RemoteException {
+        String arg = getNextArg();
+        final boolean enabled;
+        switch (arg) {
+            case "true":
+            case "1":
+                enabled = true;
+                break;
+            case "false":
+            case "0":
+                enabled = false;
+                break;
+            default:
+                getErrPrintWriter().println("Error: expected true, 1, false, 0, but got " + arg);
+                return -1;
+        }
+
+        synchronized (mInternal.mGlobalLock) {
+            mLetterboxConfiguration.setIsEducationEnabled(enabled);
+        }
+        return 0;
+    }
+
+    private int runSetLetterboxIsSplitScreenAspectRatioForUnresizableAppsEnabled(PrintWriter pw)
+            throws RemoteException {
+        String arg = getNextArg();
+        final boolean enabled;
+        switch (arg) {
+            case "true":
+            case "1":
+                enabled = true;
+                break;
+            case "false":
+            case "0":
+                enabled = false;
+                break;
+            default:
+                getErrPrintWriter().println("Error: expected true, 1, false, 0, but got " + arg);
+                return -1;
+        }
+
+        synchronized (mInternal.mGlobalLock) {
+            mLetterboxConfiguration.setIsSplitScreenAspectRatioForUnresizableAppsEnabled(enabled);
+        }
+        return 0;
+    }
+
+    private int runSetLetterboxStyle(PrintWriter pw) throws RemoteException {
+        if (peekNextArg() == null) {
+            getErrPrintWriter().println("Error: No arguments provided.");
+        }
+        while (peekNextArg() != null) {
+            String arg = getNextArg();
+            switch (arg) {
+                case "--aspectRatio":
+                    runSetFixedOrientationLetterboxAspectRatio(pw);
+                    break;
+                case "--minAspectRatioForUnresizable":
+                    runSetDefaultMinAspectRatioForUnresizableApps(pw);
+                    break;
+                case "--cornerRadius":
+                    runSetLetterboxActivityCornersRadius(pw);
+                    break;
+                case "--backgroundType":
+                    runSetLetterboxBackgroundType(pw);
+                    break;
+                case "--backgroundColor":
+                    runSetLetterboxBackgroundColor(pw);
+                    break;
+                case "--backgroundColorResource":
+                    runSetLetterboxBackgroundColorResource(pw);
+                    break;
+                case "--wallpaperBlurRadius":
+                    runSetLetterboxBackgroundWallpaperBlurRadius(pw);
+                    break;
+                case "--wallpaperDarkScrimAlpha":
+                    runSetLetterboxBackgroundWallpaperDarkScrimAlpha(pw);
+                    break;
+                case "--horizontalPositionMultiplier":
+                    runSetLetterboxHorizontalPositionMultiplier(pw);
+                    break;
+                case "--verticalPositionMultiplier":
+                    runSetLetterboxVerticalPositionMultiplier(pw);
+                    break;
+                case "--isHorizontalReachabilityEnabled":
+                    runSetLetterboxIsHorizontalReachabilityEnabled(pw);
+                    break;
+                case "--isVerticalReachabilityEnabled":
+                    runSetLetterboxIsVerticalReachabilityEnabled(pw);
+                    break;
+                case "--defaultPositionForHorizontalReachability":
+                    runSetLetterboxDefaultPositionForHorizontalReachability(pw);
+                    break;
+                case "--defaultPositionForVerticalReachability":
+                    runSetLetterboxDefaultPositionForVerticalReachability(pw);
+                    break;
+                case "--isEducationEnabled":
+                    runSetLetterboxIsEducationEnabled(pw);
+                    break;
+                case "--isSplitScreenAspectRatioForUnresizableAppsEnabled":
+                    runSetLetterboxIsSplitScreenAspectRatioForUnresizableAppsEnabled(pw);
+                    break;
+                default:
+                    getErrPrintWriter().println(
+                            "Error: Unrecognized letterbox style option: " + arg);
+                    return -1;
+            }
+        }
+        return 0;
+    }
+
+    private int runResetLetterboxStyle(PrintWriter pw) throws RemoteException {
+        if (peekNextArg() == null) {
+            resetLetterboxStyle();
+        }
+        synchronized (mInternal.mGlobalLock) {
+            while (peekNextArg() != null) {
+                String arg = getNextArg();
+                switch (arg) {
+                    case "aspectRatio":
+                        mLetterboxConfiguration.resetFixedOrientationLetterboxAspectRatio();
+                        break;
+                    case "minAspectRatioForUnresizable":
+                        mLetterboxConfiguration.resetDefaultMinAspectRatioForUnresizableApps();
+                        break;
+                    case "cornerRadius":
+                        mLetterboxConfiguration.resetLetterboxActivityCornersRadius();
+                        break;
+                    case "backgroundType":
+                        mLetterboxConfiguration.resetLetterboxBackgroundType();
+                        break;
+                    case "backgroundColor":
+                        mLetterboxConfiguration.resetLetterboxBackgroundColor();
+                        break;
+                    case "wallpaperBlurRadius":
+                        mLetterboxConfiguration.resetLetterboxBackgroundWallpaperBlurRadius();
+                        break;
+                    case "wallpaperDarkScrimAlpha":
+                        mLetterboxConfiguration.resetLetterboxBackgroundWallpaperDarkScrimAlpha();
+                        break;
+                    case "horizontalPositionMultiplier":
+                        mLetterboxConfiguration.resetLetterboxHorizontalPositionMultiplier();
+                        break;
+                    case "verticalPositionMultiplier":
+                        mLetterboxConfiguration.resetLetterboxVerticalPositionMultiplier();
+                        break;
+                    case "isHorizontalReachabilityEnabled":
+                        mLetterboxConfiguration.getIsHorizontalReachabilityEnabled();
+                        break;
+                    case "isVerticalReachabilityEnabled":
+                        mLetterboxConfiguration.getIsVerticalReachabilityEnabled();
+                        break;
+                    case "defaultPositionForHorizontalReachability":
+                        mLetterboxConfiguration.getDefaultPositionForHorizontalReachability();
+                        break;
+                    case "defaultPositionForVerticalReachability":
+                        mLetterboxConfiguration.getDefaultPositionForVerticalReachability();
+                        break;
+                    case "isEducationEnabled":
+                        mLetterboxConfiguration.getIsEducationEnabled();
+                        break;
+                    case "isSplitScreenAspectRatioForUnresizableAppsEnabled":
+                        mLetterboxConfiguration
+                                .getIsSplitScreenAspectRatioForUnresizableAppsEnabled();
+                        break;
+                    default:
+                        getErrPrintWriter().println(
+                                "Error: Unrecognized letterbox style option: " + arg);
+                        return -1;
+                }
+            }
+        }
+        return 0;
+    }
+
     private int runSetMultiWindowConfig() {
         if (peekNextArg() == null) {
             getErrPrintWriter().println("Error: No arguments provided.");
@@ -627,6 +1177,107 @@
         return 0;
     }
 
+    private void resetLetterboxStyle() {
+        synchronized (mInternal.mGlobalLock) {
+            mLetterboxConfiguration.resetFixedOrientationLetterboxAspectRatio();
+            mLetterboxConfiguration.resetDefaultMinAspectRatioForUnresizableApps();
+            mLetterboxConfiguration.resetLetterboxActivityCornersRadius();
+            mLetterboxConfiguration.resetLetterboxBackgroundType();
+            mLetterboxConfiguration.resetLetterboxBackgroundColor();
+            mLetterboxConfiguration.resetLetterboxBackgroundWallpaperBlurRadius();
+            mLetterboxConfiguration.resetLetterboxBackgroundWallpaperDarkScrimAlpha();
+            mLetterboxConfiguration.resetLetterboxHorizontalPositionMultiplier();
+            mLetterboxConfiguration.resetIsHorizontalReachabilityEnabled();
+            mLetterboxConfiguration.resetIsVerticalReachabilityEnabled();
+            mLetterboxConfiguration.resetDefaultPositionForHorizontalReachability();
+            mLetterboxConfiguration.resetDefaultPositionForVerticalReachability();
+            mLetterboxConfiguration.resetIsEducationEnabled();
+            mLetterboxConfiguration.resetIsSplitScreenAspectRatioForUnresizableAppsEnabled();
+        }
+    }
+
+    private int runGetLetterboxStyle(PrintWriter pw) throws RemoteException {
+        synchronized (mInternal.mGlobalLock) {
+            pw.println("Corner radius: "
+                    + mLetterboxConfiguration.getLetterboxActivityCornersRadius());
+            pw.println("Horizontal position multiplier: "
+                    + mLetterboxConfiguration.getLetterboxHorizontalPositionMultiplier());
+            pw.println("Vertical position multiplier: "
+                    + mLetterboxConfiguration.getLetterboxVerticalPositionMultiplier());
+            pw.println("Aspect ratio: "
+                    + mLetterboxConfiguration.getFixedOrientationLetterboxAspectRatio());
+            pw.println("Default min aspect ratio for unresizable apps: "
+                    + mLetterboxConfiguration.getDefaultMinAspectRatioForUnresizableApps());
+            pw.println("Is horizontal reachability enabled: "
+                    + mLetterboxConfiguration.getIsHorizontalReachabilityEnabled());
+            pw.println("Is vertical reachability enabled: "
+                    + mLetterboxConfiguration.getIsVerticalReachabilityEnabled());
+            pw.println("Default position for horizontal reachability: "
+                    + LetterboxConfiguration.letterboxHorizontalReachabilityPositionToString(
+                            mLetterboxConfiguration.getDefaultPositionForHorizontalReachability()));
+            pw.println("Default position for vertical reachability: "
+                    + LetterboxConfiguration.letterboxVerticalReachabilityPositionToString(
+                    mLetterboxConfiguration.getDefaultPositionForVerticalReachability()));
+            pw.println("Is education enabled: "
+                    + mLetterboxConfiguration.getIsEducationEnabled());
+            pw.println("Is using split screen aspect ratio as aspect ratio for unresizable apps: "
+                    + mLetterboxConfiguration
+                            .getIsSplitScreenAspectRatioForUnresizableAppsEnabled());
+
+            pw.println("Background type: "
+                    + LetterboxConfiguration.letterboxBackgroundTypeToString(
+                            mLetterboxConfiguration.getLetterboxBackgroundType()));
+            pw.println("    Background color: " + Integer.toHexString(
+                    mLetterboxConfiguration.getLetterboxBackgroundColor().toArgb()));
+            pw.println("    Wallpaper blur radius: "
+                    + mLetterboxConfiguration.getLetterboxBackgroundWallpaperBlurRadius());
+            pw.println("    Wallpaper dark scrim alpha: "
+                    + mLetterboxConfiguration.getLetterboxBackgroundWallpaperDarkScrimAlpha());
+        }
+        return 0;
+    }
+
+    private int runWmShellCommand(PrintWriter pw) {
+        String arg = getNextArg();
+
+        switch (arg) {
+            case "tracing":
+                return runWmShellTracing(pw);
+            case "help":
+            default:
+                return runHelp(pw);
+        }
+    }
+
+    private int runHelp(PrintWriter pw) {
+        pw.println("Window Manager Shell commands:");
+        pw.println("  help");
+        pw.println("    Print this help text.");
+        pw.println("  tracing <start/stop>");
+        pw.println("    Start/stop shell transition tracing.");
+
+        return 0;
+    }
+
+    private int runWmShellTracing(PrintWriter pw) {
+        String arg = getNextArg();
+
+        switch (arg) {
+            case "start":
+                mInternal.mTransitionTracer.startTrace(pw);
+                break;
+            case "stop":
+                mInternal.mTransitionTracer.stopTrace(pw);
+                break;
+            default:
+                getErrPrintWriter()
+                        .println("Error: expected 'start' or 'stop', but got '" + arg + "'");
+                return -1;
+        }
+
+        return 0;
+    }
+
     private int runReset(PrintWriter pw) throws RemoteException {
         int displayId = getDisplayId(getNextArg());
 
@@ -651,6 +1302,12 @@
         // set-ignore-orientation-request
         mInterface.setIgnoreOrientationRequest(displayId, false /* ignoreOrientationRequest */);
 
+        // set-letterbox-style
+        resetLetterboxStyle();
+
+        // set-sandbox-display-apis
+        mInternal.setSandboxDisplayApis(displayId, /* sandboxDisplayApis= */ true);
+
         // set-multi-window-config
         runResetMultiWindowConfig();
 
@@ -685,7 +1342,12 @@
         pw.println("  set-ignore-orientation-request [-d DISPLAY_ID] [true|1|false|0]");
         pw.println("  get-ignore-orientation-request [-d DISPLAY_ID] ");
         pw.println("    If app requested orientation should be ignored.");
+        pw.println("  set-sandbox-display-apis [true|1|false|0]");
+        pw.println("    Sets override of Display APIs getRealSize / getRealMetrics to reflect ");
+        pw.println("    DisplayArea of the activity, or the window bounds if in letterbox or");
+        pw.println("    Size Compat Mode.");
 
+        printLetterboxHelp(pw);
         printMultiWindowConfigHelp(pw);
 
         pw.println("  reset [-d DISPLAY_ID]");
@@ -698,6 +1360,84 @@
         }
     }
 
+    private void printLetterboxHelp(PrintWriter pw) {
+        pw.println("  set-letterbox-style");
+        pw.println("    Sets letterbox style using the following options:");
+        pw.println("      --aspectRatio aspectRatio");
+        pw.println("        Aspect ratio of letterbox for fixed orientation. If aspectRatio <= "
+                + LetterboxConfiguration.MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO);
+        pw.println("        both it and R.dimen.config_fixedOrientationLetterboxAspectRatio will");
+        pw.println("        be ignored and framework implementation will determine aspect ratio.");
+        pw.println("      --minAspectRatioForUnresizable aspectRatio");
+        pw.println("        Default min aspect ratio for unresizable apps which is used when an");
+        pw.println("        app is eligible for the size compat mode.  If aspectRatio <= "
+                + LetterboxConfiguration.MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO);
+        pw.println("        both it and R.dimen.config_fixedOrientationLetterboxAspectRatio will");
+        pw.println("        be ignored and framework implementation will determine aspect ratio.");
+        pw.println("      --cornerRadius radius");
+        pw.println("        Corners radius for activities in the letterbox mode. If radius < 0,");
+        pw.println("        both it and R.integer.config_letterboxActivityCornersRadius will be");
+        pw.println("        ignored and corners of the activity won't be rounded.");
+        pw.println("      --backgroundType [reset|solid_color|app_color_background");
+        pw.println("          |app_color_background_floating|wallpaper]");
+        pw.println("        Type of background used in the letterbox mode.");
+        pw.println("      --backgroundColor color");
+        pw.println("        Color of letterbox which is be used when letterbox background type");
+        pw.println("        is 'solid-color'. Use (set)get-letterbox-style to check and control");
+        pw.println("        letterbox background type. See Color#parseColor for allowed color");
+        pw.println("        formats (#RRGGBB and some colors by name, e.g. magenta or olive).");
+        pw.println("      --backgroundColorResource resource_name");
+        pw.println("        Color resource name of letterbox background which is used when");
+        pw.println("        background type is 'solid-color'. Use (set)get-letterbox-style to");
+        pw.println("        check and control background type. Parameter is a color resource");
+        pw.println("        name, for example, @android:color/system_accent2_50.");
+        pw.println("      --wallpaperBlurRadius radius");
+        pw.println("        Blur radius for 'wallpaper' letterbox background. If radius <= 0");
+        pw.println("        both it and R.dimen.config_letterboxBackgroundWallpaperBlurRadius");
+        pw.println("        are ignored and 0 is used.");
+        pw.println("      --wallpaperDarkScrimAlpha alpha");
+        pw.println("        Alpha of a black translucent scrim shown over 'wallpaper'");
+        pw.println("        letterbox background. If alpha < 0 or >= 1 both it and");
+        pw.println("        R.dimen.config_letterboxBackgroundWallaperDarkScrimAlpha are ignored");
+        pw.println("        and 0.0 (transparent) is used instead.");
+        pw.println("      --horizontalPositionMultiplier multiplier");
+        pw.println("        Horizontal position of app window center. If multiplier < 0 or > 1,");
+        pw.println("        both it and R.dimen.config_letterboxHorizontalPositionMultiplier");
+        pw.println("        are ignored and central position (0.5) is used.");
+        pw.println("      --verticalPositionMultiplier multiplier");
+        pw.println("        Vertical position of app window center. If multiplier < 0 or > 1,");
+        pw.println("        both it and R.dimen.config_letterboxVerticalPositionMultiplier");
+        pw.println("        are ignored and central position (0.5) is used.");
+        pw.println("      --isHorizontalReachabilityEnabled [true|1|false|0]");
+        pw.println("        Whether horizontal reachability repositioning is allowed for ");
+        pw.println("        letterboxed fullscreen apps in landscape device orientation.");
+        pw.println("      --isVerticalReachabilityEnabled [true|1|false|0]");
+        pw.println("        Whether vertical reachability repositioning is allowed for ");
+        pw.println("        letterboxed fullscreen apps in portrait device orientation.");
+        pw.println("      --defaultPositionForHorizontalReachability [left|center|right]");
+        pw.println("        Default position of app window when horizontal reachability is.");
+        pw.println("        enabled.");
+        pw.println("      --defaultPositionForVerticalReachability [top|center|bottom]");
+        pw.println("        Default position of app window when vertical reachability is.");
+        pw.println("        enabled.");
+        pw.println("      --isEducationEnabled [true|1|false|0]");
+        pw.println("        Whether education is allowed for letterboxed fullscreen apps.");
+        pw.println("      --isSplitScreenAspectRatioForUnresizableAppsEnabled [true|1|false|0]");
+        pw.println("        Whether using split screen aspect ratio as a default aspect ratio for");
+        pw.println("        unresizable apps.");
+        pw.println("  reset-letterbox-style [aspectRatio|cornerRadius|backgroundType");
+        pw.println("      |backgroundColor|wallpaperBlurRadius|wallpaperDarkScrimAlpha");
+        pw.println("      |horizontalPositionMultiplier|verticalPositionMultiplier");
+        pw.println("      |isHorizontalReachabilityEnabled|isVerticalReachabilityEnabled");
+        pw.println("      isEducationEnabled||defaultPositionMultiplierForHorizontalReachability");
+        pw.println("      ||defaultPositionMultiplierForVerticalReachability]");
+        pw.println("    Resets overrides to default values for specified properties separated");
+        pw.println("    by space, e.g. 'reset-letterbox-style aspectRatio cornerRadius'.");
+        pw.println("    If no arguments provided, all values will be reset.");
+        pw.println("  get-letterbox-style");
+        pw.println("    Prints letterbox style configuration.");
+    }
+
     private void printMultiWindowConfigHelp(PrintWriter pw) {
         pw.println("  set-multi-window-config");
         pw.println("    Sets options to determine if activity should be shown in multi window:");
diff --git a/services/core/java/com/android/server/wm/WindowOrganizerController.java b/services/core/java/com/android/server/wm/WindowOrganizerController.java
index aee66faa..29e407f 100644
--- a/services/core/java/com/android/server/wm/WindowOrganizerController.java
+++ b/services/core/java/com/android/server/wm/WindowOrganizerController.java
@@ -18,8 +18,10 @@
 
 import static android.Manifest.permission.START_TASKS_FROM_RECENTS;
 import static android.app.ActivityManager.isStartResultSuccessful;
+import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
 import static android.app.WindowConfiguration.WINDOW_CONFIG_BOUNDS;
 import static android.view.Display.DEFAULT_DISPLAY;
+import static android.view.WindowManager.TRANSIT_CHANGE;
 import static android.window.WindowContainerTransaction.HierarchyOp.HIERARCHY_OP_TYPE_ADD_RECT_INSETS_PROVIDER;
 import static android.window.WindowContainerTransaction.HierarchyOp.HIERARCHY_OP_TYPE_CHILDREN_TASKS_REPARENT;
 import static android.window.WindowContainerTransaction.HierarchyOp.HIERARCHY_OP_TYPE_CREATE_TASK_FRAGMENT;
@@ -43,6 +45,7 @@
 import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_WINDOW_ORGANIZER;
 import static com.android.server.wm.ActivityTaskManagerService.LAYOUT_REASON_CONFIG_CHANGED;
 import static com.android.server.wm.ActivityTaskSupervisor.PRESERVE_WINDOWS;
+import static com.android.server.wm.Task.FLAG_FORCE_HIDDEN_FOR_PINNED_TASK;
 import static com.android.server.wm.Task.FLAG_FORCE_HIDDEN_FOR_TASK_ORG;
 import static com.android.server.wm.TaskFragment.EMBEDDING_ALLOWED;
 import static com.android.server.wm.WindowContainer.POSITION_BOTTOM;
@@ -52,7 +55,6 @@
 import android.annotation.Nullable;
 import android.app.ActivityManager;
 import android.app.ActivityOptions;
-import android.app.IApplicationThread;
 import android.app.WindowConfiguration;
 import android.content.ActivityNotFoundException;
 import android.content.Intent;
@@ -148,7 +150,8 @@
     }
 
     void setWindowManager(WindowManagerService wms) {
-        mTransitionController = new TransitionController(mService, wms.mTaskSnapshotController);
+        mTransitionController = new TransitionController(mService, wms.mTaskSnapshotController,
+                wms.mTransitionTracer);
         mTransitionController.registerLegacyListener(wms.mActivityManagerAppTransitionNotifier);
     }
 
@@ -326,7 +329,8 @@
                 }
                 adapter.setCallingPidUid(caller.mPid, caller.mUid);
                 dc.prepareAppTransition(type);
-                dc.mAppTransition.overridePendingAppTransitionRemote(adapter, true /* sync */);
+                dc.mAppTransition.overridePendingAppTransitionRemote(adapter, true /* sync */,
+                        false /* isActivityEmbedding */);
                 syncId = startSyncWithOrganizer(callback);
                 applyTransaction(t, syncId, null /* transition */, caller);
                 setSyncReady(syncId);
@@ -381,6 +385,12 @@
     private void applyTransaction(@NonNull WindowContainerTransaction t, int syncId,
             @Nullable Transition transition, @NonNull CallerInfo caller,
             @Nullable Transition finishTransition) {
+        if (t.getTaskFragmentOrganizer() != null && !mTaskFragmentOrganizerController
+                .isOrganizerRegistered(t.getTaskFragmentOrganizer())) {
+            Slog.e(TAG, "Caller organizer=" + t.getTaskFragmentOrganizer()
+                    + " is no longer registered");
+            return;
+        }
         int effects = 0;
         ProtoLog.v(WM_DEBUG_WINDOW_ORGANIZER, "Apply window transaction, syncId=%d", syncId);
         mService.deferWindowLayout();
@@ -393,11 +403,13 @@
                     // Go through all tasks and collect them before the rotation
                     // TODO(shell-transitions): move collect() to onConfigurationChange once
                     //       wallpaper handling is synchronized.
-                    dc.mTransitionController.collectForDisplayChange(dc, transition);
+                    dc.mTransitionController.collectForDisplayAreaChange(dc, transition);
                     dc.sendNewConfiguration();
                     effects |= TRANSACT_EFFECTS_LIFECYCLE;
                 }
             }
+            final List<WindowContainerTransaction.HierarchyOp> hops = t.getHierarchyOps();
+            final int hopSize = hops.size();
             ArraySet<WindowContainer> haveConfigChanges = new ArraySet<>();
             Iterator<Map.Entry<IBinder, WindowContainerTransaction.Change>> entries =
                     t.getChanges().entrySet().iterator();
@@ -415,19 +427,53 @@
                     addToSyncSet(syncId, wc);
                 }
                 if (transition != null) transition.collect(wc);
+                final DisplayArea da = wc.asDisplayArea();
+                // Only check DisplayArea here as a similar thing is done for DisplayContent above.
+                if (da != null && wc.asDisplayContent() == null
+                        && entry.getValue().getWindowingMode() != da.getWindowingMode()) {
+                    // Go through all tasks and collect them before changing the windowing mode of a
+                    // display-level container.
+                    // TODO(shell-transitions): handle this more elegantly.
+                    da.mTransitionController.collectForDisplayAreaChange(da, transition);
+                }
 
-                if (finishTransition != null) {
-                    // Deal with edge-cases in recents where it pretends to finish itself.
-                    if ((entry.getValue().getChangeMask()
-                            & WindowContainerTransaction.Change.CHANGE_FORCE_NO_PIP) != 0) {
+                if ((entry.getValue().getChangeMask()
+                        & WindowContainerTransaction.Change.CHANGE_FORCE_NO_PIP) != 0) {
+                    // Disable entering pip (eg. when recents pretends to finish itself)
+                    if (finishTransition != null) {
                         finishTransition.setCanPipOnFinish(false /* canPipOnFinish */);
+                    } else if (transition != null) {
+                        transition.setCanPipOnFinish(false /* canPipOnFinish */);
                     }
                 }
+                // A bit hacky, but we need to detect "remove PiP" so that we can "wrap" the
+                // setWindowingMode call in force-hidden.
+                boolean forceHiddenForPip = false;
+                if (wc.asTask() != null && wc.inPinnedWindowingMode()
+                        && entry.getValue().getWindowingMode() == WINDOWING_MODE_UNDEFINED) {
+                    // We are in pip and going to undefined. Now search hierarchy ops to determine
+                    // whether we are removing pip or expanding pip.
+                    for (int i = 0; i < hopSize; ++i) {
+                        final WindowContainerTransaction.HierarchyOp hop = hops.get(i);
+                        if (hop.getType() != HIERARCHY_OP_TYPE_REORDER) continue;
+                        final WindowContainer hopWc = WindowContainer.fromBinder(
+                                hop.getContainer());
+                        if (!wc.equals(hopWc)) continue;
+                        forceHiddenForPip = !hop.getToTop();
+                    }
+                }
+                if (forceHiddenForPip) {
+                    wc.asTask().setForceHidden(FLAG_FORCE_HIDDEN_FOR_PINNED_TASK, true /* set */);
+                }
 
                 int containerEffect = applyWindowContainerChange(wc, entry.getValue(),
                         t.getErrorCallbackToken());
                 effects |= containerEffect;
 
+                if (forceHiddenForPip) {
+                    wc.asTask().setForceHidden(FLAG_FORCE_HIDDEN_FOR_PINNED_TASK, false /* set */);
+                }
+
                 // Lifecycle changes will trigger ensureConfig for everything.
                 if ((effects & TRANSACT_EFFECTS_LIFECYCLE) == 0
                         && (containerEffect & TRANSACT_EFFECTS_CLIENT_CONFIG) != 0) {
@@ -435,8 +481,6 @@
                 }
             }
             // Hierarchy changes
-            final List<WindowContainerTransaction.HierarchyOp> hops = t.getHierarchyOps();
-            final int hopSize = hops.size();
             if (hopSize > 0) {
                 final boolean isInLockTaskMode = mService.isInLockTaskMode();
                 for (int i = 0; i < hopSize; ++i) {
@@ -498,7 +542,7 @@
                 }
             }
 
-            if ((effects & TRANSACT_EFFECTS_CLIENT_CONFIG) == 0) {
+            if ((effects & TRANSACT_EFFECTS_CLIENT_CONFIG) != 0) {
                 mService.addWindowLayoutReasons(LAYOUT_REASON_CONFIG_CHANGED);
             }
         } finally {
@@ -552,6 +596,13 @@
                         + " windowing mode during locked task mode.");
             }
 
+            if (windowingMode == WindowConfiguration.WINDOWING_MODE_PINNED) {
+                // Do not directly put the container into PINNED mode as it may not support it or
+                // the app may not want to enter it. Instead, send a signal to request PIP
+                // mode to the app if they wish to support it below in #applyTaskChanges.
+                return effects;
+            }
+
             final int prevMode = container.getWindowingMode();
             container.setWindowingMode(windowingMode);
             if (prevMode != container.getWindowingMode()) {
@@ -608,6 +659,28 @@
             tr.mDisplayContent.mPinnedTaskController.setEnterPipBounds(enterPipBounds);
         }
 
+        if (c.getWindowingMode() == WindowConfiguration.WINDOWING_MODE_PINNED
+                && !tr.inPinnedWindowingMode()) {
+            final ActivityRecord activity = tr.getTopNonFinishingActivity();
+            if (activity != null) {
+                final boolean lastSupportsEnterPipOnTaskSwitch =
+                        activity.supportsEnterPipOnTaskSwitch;
+                // Temporarily force enable enter PIP on task switch so that PIP is requested
+                // regardless of whether the activity is resumed or paused.
+                activity.supportsEnterPipOnTaskSwitch = true;
+                boolean canEnterPip = activity.checkEnterPictureInPictureState(
+                        "applyTaskChanges", true /* beforeStopping */);
+                if (canEnterPip) {
+                    canEnterPip = mService.mActivityClientController
+                            .requestPictureInPictureMode(activity);
+                }
+                if (!canEnterPip) {
+                    // Restore the flag to its previous state when the activity cannot enter PIP.
+                    activity.supportsEnterPipOnTaskSwitch = lastSupportsEnterPipOnTaskSwitch;
+                }
+            }
+        }
+
         return effects;
     }
 
@@ -697,7 +770,7 @@
                                     bottomActivity)) {
                         Slog.w(TAG, "Skip removing TaskFragment due in lock task mode.");
                         sendTaskFragmentOperationFailure(organizer, errorCallbackToken,
-                                new IllegalStateException(
+                                taskFragment, type, new IllegalStateException(
                                         "Not allow to delete task fragment in lock task mode."));
                         break;
                     }
@@ -711,13 +784,15 @@
                 if (tf == null) {
                     final Throwable exception = new IllegalArgumentException(
                             "Not allowed to operate with invalid fragment token");
-                    sendTaskFragmentOperationFailure(organizer, errorCallbackToken, exception);
+                    sendTaskFragmentOperationFailure(organizer, errorCallbackToken, tf, type,
+                            exception);
                     break;
                 }
                 if (tf.isEmbeddedTaskFragmentInPip()) {
                     final Throwable exception = new IllegalArgumentException(
                             "Not allowed to start activity in PIP TaskFragment");
-                    sendTaskFragmentOperationFailure(organizer, errorCallbackToken, exception);
+                    sendTaskFragmentOperationFailure(organizer, errorCallbackToken, tf, type,
+                            exception);
                     break;
                 }
                 final Intent activityIntent = hop.getActivityIntent();
@@ -727,7 +802,7 @@
                                 hop.getCallingActivity(), caller.mUid, caller.mPid,
                                 errorCallbackToken);
                 if (!isStartResultSuccessful(result)) {
-                    sendTaskFragmentOperationFailure(organizer, errorCallbackToken,
+                    sendTaskFragmentOperationFailure(organizer, errorCallbackToken, tf, type,
                             convertStartFailureToThrowable(result, activityIntent));
                 } else {
                     effects |= TRANSACT_EFFECTS_LIFECYCLE;
@@ -748,28 +823,34 @@
                 if (parent == null || activity == null) {
                     final Throwable exception = new IllegalArgumentException(
                             "Not allowed to operate with invalid fragment token or activity.");
-                    sendTaskFragmentOperationFailure(organizer, errorCallbackToken, exception);
+                    sendTaskFragmentOperationFailure(organizer, errorCallbackToken, parent, type,
+                            exception);
                     break;
                 }
                 if (parent.isEmbeddedTaskFragmentInPip()) {
                     final Throwable exception = new IllegalArgumentException(
                             "Not allowed to reparent activity to PIP TaskFragment");
-                    sendTaskFragmentOperationFailure(organizer, errorCallbackToken, exception);
+                    sendTaskFragmentOperationFailure(organizer, errorCallbackToken, parent, type,
+                            exception);
                     break;
                 }
                 if (parent.isAllowedToEmbedActivity(activity) != EMBEDDING_ALLOWED) {
                     final Throwable exception = new SecurityException(
                             "The task fragment is not allowed to embed the given activity.");
-                    sendTaskFragmentOperationFailure(organizer, errorCallbackToken, exception);
+                    sendTaskFragmentOperationFailure(organizer, errorCallbackToken, parent, type,
+                            exception);
                     break;
                 }
                 if (parent.getTask() != activity.getTask()) {
                     final Throwable exception = new SecurityException("The reparented activity is"
                             + " not in the same Task as the target TaskFragment.");
-                    sendTaskFragmentOperationFailure(organizer, errorCallbackToken, exception);
+                    sendTaskFragmentOperationFailure(organizer, errorCallbackToken, parent, type,
+                            exception);
                     break;
                 }
 
+                prepareActivityEmbeddingTransitionForReparentActivityToTaskFragment(parent,
+                        activity);
                 activity.reparent(parent, POSITION_TOP);
                 effects |= TRANSACT_EFFECTS_LIFECYCLE;
                 break;
@@ -784,17 +865,19 @@
                 if (tf1 == null || (adjacentFragmentToken != null && tf2 == null)) {
                     final Throwable exception = new IllegalArgumentException(
                             "Not allowed to set adjacent on invalid fragment tokens");
-                    sendTaskFragmentOperationFailure(organizer, errorCallbackToken, exception);
+                    sendTaskFragmentOperationFailure(organizer, errorCallbackToken, tf1, type,
+                            exception);
                     break;
                 }
                 if (tf1.isEmbeddedTaskFragmentInPip()
                         || (tf2 != null && tf2.isEmbeddedTaskFragmentInPip())) {
                     final Throwable exception = new IllegalArgumentException(
                             "Not allowed to set adjacent on TaskFragment in PIP Task");
-                    sendTaskFragmentOperationFailure(organizer, errorCallbackToken, exception);
+                    sendTaskFragmentOperationFailure(organizer, errorCallbackToken, tf1, type,
+                            exception);
                     break;
                 }
-                tf1.setAdjacentTaskFragment(tf2, false /* moveAdjacentTogether */);
+                tf1.setAdjacentTaskFragment(tf2);
                 effects |= TRANSACT_EFFECTS_LIFECYCLE;
 
                 final Bundle bundle = hop.getLaunchOptions();
@@ -836,22 +919,22 @@
                 tf.getDisplayContent().setFocusedApp(targetFocus);
                 break;
             }
-            default: {
-                // The other operations may change task order so they are skipped while in lock
-                // task mode. The above operations are still allowed because they don't move
-                // tasks. And it may be necessary such as clearing launch root after entering
-                // lock task mode.
-                if (isInLockTaskMode) {
-                    Slog.w(TAG, "Skip applying hierarchy operation " + hop
-                            + " while in lock task mode");
-                    return effects;
-                }
-            }
-        }
-
-        switch (type) {
             case HIERARCHY_OP_TYPE_CHILDREN_TASKS_REPARENT: {
-                effects |= reparentChildrenTasksHierarchyOp(hop, transition, syncId);
+                effects |= reparentChildrenTasksHierarchyOp(hop, transition, syncId,
+                        isInLockTaskMode);
+                break;
+            }
+            case HIERARCHY_OP_TYPE_LAUNCH_TASK: {
+                mService.mAmInternal.enforceCallingPermission(START_TASKS_FROM_RECENTS,
+                        "launchTask HierarchyOp");
+                final Bundle launchOpts = hop.getLaunchOptions();
+                final int taskId = launchOpts.getInt(
+                        WindowContainerTransaction.HierarchyOp.LAUNCH_KEY_TASK_ID);
+                launchOpts.remove(WindowContainerTransaction.HierarchyOp.LAUNCH_KEY_TASK_ID);
+                final SafeActivityOptions safeOptions =
+                        SafeActivityOptions.fromBundle(launchOpts, caller.mPid, caller.mUid);
+                waitAsyncStart(() -> mService.mTaskSupervisor.startActivityFromRecents(
+                        caller.mPid, caller.mUid, taskId, safeOptions));
                 break;
             }
             case HIERARCHY_OP_TYPE_REORDER:
@@ -861,6 +944,16 @@
                     Slog.e(TAG, "Attempt to operate on detached container: " + wc);
                     break;
                 }
+                // There is no use case to ask the reparent operation in lock-task mode now, so keep
+                // skipping this operation as usual.
+                if (isInLockTaskMode && type == HIERARCHY_OP_TYPE_REPARENT) {
+                    Slog.w(TAG, "Skip applying hierarchy operation " + hop
+                            + " while in lock task mode");
+                    break;
+                }
+                if (isLockTaskModeViolation(wc.getParent(), wc.asTask(), isInLockTaskMode)) {
+                    break;
+                }
                 if (syncId >= 0) {
                     addToSyncSet(syncId, wc);
                 }
@@ -886,19 +979,20 @@
                 effects |= sanitizeAndApplyHierarchyOp(wc, hop);
                 break;
             }
-            case HIERARCHY_OP_TYPE_LAUNCH_TASK: {
-                mService.mAmInternal.enforceCallingPermission(START_TASKS_FROM_RECENTS,
-                        "launchTask HierarchyOp");
-                final Bundle launchOpts = hop.getLaunchOptions();
-                final int taskId = launchOpts.getInt(
-                        WindowContainerTransaction.HierarchyOp.LAUNCH_KEY_TASK_ID);
-                launchOpts.remove(WindowContainerTransaction.HierarchyOp.LAUNCH_KEY_TASK_ID);
-                final SafeActivityOptions safeOptions =
-                        SafeActivityOptions.fromBundle(launchOpts, caller.mPid, caller.mUid);
-                waitAsyncStart(() -> mService.mTaskSupervisor.startActivityFromRecents(
-                        caller.mPid, caller.mUid, taskId, safeOptions));
-                break;
+            default: {
+                // The other operations may change task order so they are skipped while in lock
+                // task mode. The above operations are still allowed because they don't move
+                // tasks. And it may be necessary such as clearing launch root after entering
+                // lock task mode.
+                if (isInLockTaskMode) {
+                    Slog.w(TAG, "Skip applying hierarchy operation " + hop
+                            + " while in lock task mode");
+                    return effects;
+                }
             }
+        }
+
+        switch (type) {
             case HIERARCHY_OP_TYPE_PENDING_INTENT: {
                 String resolvedType = hop.getActivityIntent() != null
                         ? hop.getActivityIntent().resolveTypeIfNeeded(
@@ -983,6 +1077,41 @@
         return effects;
     }
 
+    private void prepareActivityEmbeddingTransitionForReparentActivityToTaskFragment(
+            @NonNull TaskFragment taskFragment, @NonNull ActivityRecord activity) {
+        if (!taskFragment.canHaveEmbeddingActivityTransition(activity)) {
+            return;
+        }
+
+        // The reparent can happen in the following cases:
+        // 1. Reparent an existing activity to split when app launches new intent.
+        //    - This happens after app calls to start activity, but before the activity is actually
+        //      started, so we don't expect any collecting transition, but if it does, we can't
+        //      queue the WCT because the start activity won't wait.
+        // 2. Reparent an existing activity to split to launch placeholder when Task size changed.
+        //    - We expect to have a collecting transition for the Task resize, so just collect.
+        // 3. Reparent a new launching activity to an always-expand container.
+        // 4. Reparent a new launching activity to split to launch placeholder together.
+        // 5. Reparent a new launching activity to an existing split.
+        //    - The new launching activity should have start an OPEN transition, so just collect.
+        // 6. Reparent PiP activity back to the original Task.
+        //    - This should be part of the exiting PiP transition, so just collect.
+
+        if (!taskFragment.getBounds().equals(activity.getBounds()) && activity.isVisible()
+                && !mTransitionController.isCollecting()) {
+            // 1. Reparent an existing activity to split when app launches new intent.
+            mTransitionController.requestTransitionIfNeeded(TRANSIT_CHANGE, activity);
+        }
+
+        // We expect the activity to be in the transition already, so just collect the TaskFragment.
+        if (mTransitionController.isCollecting(activity)) {
+            taskFragment.collectEmbeddedTaskFragmentIfNeeded();
+        } else {
+            ProtoLog.w(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS, "Reparenting Activity"
+                    + " to embedded TaskFragment, but the Activity is not collected");
+        }
+    }
+
     /** A helper method to send minimum dimension violation error to the client. */
     private void sendMinimumDimensionViolation(TaskFragment taskFragment, Point minDimensions,
             IBinder errorCallbackToken, String reason) {
@@ -993,7 +1122,7 @@
                 + taskFragment.getBounds() + " does not satisfy minimum dimensions:"
                 + minDimensions + " " + reason);
         sendTaskFragmentOperationFailure(taskFragment.getTaskFragmentOrganizer(),
-                errorCallbackToken, exception);
+                errorCallbackToken, taskFragment, -1 /* opType */, exception);
     }
 
     /**
@@ -1090,8 +1219,25 @@
         return TRANSACT_EFFECTS_LIFECYCLE;
     }
 
+    private boolean isLockTaskModeViolation(WindowContainer parent, Task task,
+            boolean isInLockTaskMode) {
+        if (!isInLockTaskMode || parent == null || task == null) {
+            return false;
+        }
+        final LockTaskController lockTaskController = mService.getLockTaskController();
+        boolean taskViolation = lockTaskController.isLockTaskModeViolation(task);
+        if (!taskViolation && parent.asTask() != null) {
+            taskViolation = lockTaskController.isLockTaskModeViolation(parent.asTask());
+        }
+        if (taskViolation) {
+            Slog.w(TAG, "Can't support the operation since in lock task mode violation. "
+                    + " Task: " + task + " Parent : " + parent);
+        }
+        return taskViolation;
+    }
+
     private int reparentChildrenTasksHierarchyOp(WindowContainerTransaction.HierarchyOp hop,
-            @Nullable Transition transition, int syncId) {
+            @Nullable Transition transition, int syncId, boolean isInLockTaskMode) {
         WindowContainer<?> currentParent = hop.getContainer() != null
                 ? WindowContainer.fromBinder(hop.getContainer()) : null;
         WindowContainer newParent = hop.getNewParent() != null
@@ -1129,6 +1275,7 @@
                 ? newParent.asTask().getDisplayArea()
                 : newParent.asTaskDisplayArea();
         final WindowContainer finalCurrentParent = currentParent;
+        final WindowContainer finalNewParent = newParent;
         Slog.i(TAG, "reparentChildrenTasksHierarchyOp"
                 + " currentParent=" + currentParent + " newParent=" + newParent + " hop=" + hop);
 
@@ -1148,8 +1295,15 @@
                         + " task=" + task);
                 return false;
             }
-            if (!ArrayUtils.contains(hop.getActivityTypes(), task.getActivityType())
-                    || !ArrayUtils.contains(hop.getWindowingModes(), task.getWindowingMode())) {
+            if (!ArrayUtils.isEmpty(hop.getActivityTypes())
+                    && !ArrayUtils.contains(hop.getActivityTypes(), task.getActivityType())) {
+                return false;
+            }
+            if (!ArrayUtils.isEmpty(hop.getWindowingModes())
+                    && !ArrayUtils.contains(hop.getWindowingModes(), task.getWindowingMode())) {
+                return false;
+            }
+            if (isLockTaskModeViolation(finalNewParent, task, isInLockTaskMode)) {
                 return false;
             }
 
@@ -1196,7 +1350,7 @@
             Slog.e(TAG, "Attempt to set adjacent TaskFragment in PIP Task");
             return 0;
         }
-        root1.setAdjacentTaskFragment(root2, hop.getMoveAdjacentTogether());
+        root1.setAdjacentTaskFragment(root2);
         return TRANSACT_EFFECTS_LIFECYCLE;
     }
 
@@ -1300,11 +1454,7 @@
             synchronized (mGlobalLock) {
                 final WindowProcessController wpc =
                         mService.getProcessController(callerPid, callerUid);
-                IApplicationThread appThread = null;
-                if (wpc != null) {
-                    appThread = wpc.getThread();
-                }
-                mTransitionController.registerTransitionPlayer(player, appThread);
+                mTransitionController.registerTransitionPlayer(player, wpc);
             }
         } finally {
             Binder.restoreCallingIdentity(ident);
@@ -1521,13 +1671,15 @@
         if (ownerActivity == null || ownerActivity.getTask() == null) {
             final Throwable exception =
                     new IllegalArgumentException("Not allowed to operate with invalid ownerToken");
-            sendTaskFragmentOperationFailure(organizer, errorCallbackToken, exception);
+            sendTaskFragmentOperationFailure(organizer, errorCallbackToken, null /* taskFragment */,
+                    HIERARCHY_OP_TYPE_CREATE_TASK_FRAGMENT, exception);
             return;
         }
         if (!ownerActivity.isResizeable()) {
             final IllegalArgumentException exception = new IllegalArgumentException("Not allowed"
                     + " to operate with non-resizable owner Activity");
-            sendTaskFragmentOperationFailure(organizer, errorCallbackToken, exception);
+            sendTaskFragmentOperationFailure(organizer, errorCallbackToken, null /* taskFragment */,
+                    HIERARCHY_OP_TYPE_CREATE_TASK_FRAGMENT, exception);
             return;
         }
         // The ownerActivity has to belong to the same app as the target Task.
@@ -1537,13 +1689,15 @@
             final Throwable exception =
                     new SecurityException("Not allowed to operate with the ownerToken while "
                             + "the root activity of the target task belong to the different app");
-            sendTaskFragmentOperationFailure(organizer, errorCallbackToken, exception);
+            sendTaskFragmentOperationFailure(organizer, errorCallbackToken, null /* taskFragment */,
+                    HIERARCHY_OP_TYPE_CREATE_TASK_FRAGMENT, exception);
             return;
         }
         if (ownerTask.inPinnedWindowingMode()) {
             final Throwable exception = new IllegalArgumentException(
                     "Not allowed to create TaskFragment in PIP Task");
-            sendTaskFragmentOperationFailure(organizer, errorCallbackToken, exception);
+            sendTaskFragmentOperationFailure(organizer, errorCallbackToken, null /* taskFragment */,
+                    HIERARCHY_OP_TYPE_CREATE_TASK_FRAGMENT, exception);
             return;
         }
         final TaskFragment taskFragment = new TaskFragment(mService,
@@ -1571,7 +1725,8 @@
         if (newParentTF == null) {
             final Throwable exception =
                     new IllegalArgumentException("Not allowed to operate with invalid container");
-            sendTaskFragmentOperationFailure(organizer, errorCallbackToken, exception);
+            sendTaskFragmentOperationFailure(organizer, errorCallbackToken, newParentTF,
+                    HIERARCHY_OP_TYPE_REPARENT_CHILDREN, exception);
             return;
         }
         if (newParentTF.getTaskFragmentOrganizer() != null) {
@@ -1582,20 +1737,23 @@
             if (isEmbeddingDisallowed) {
                 final Throwable exception = new SecurityException(
                         "The new parent is not allowed to embed the activities.");
-                sendTaskFragmentOperationFailure(organizer, errorCallbackToken, exception);
+                sendTaskFragmentOperationFailure(organizer, errorCallbackToken, newParentTF,
+                        HIERARCHY_OP_TYPE_REPARENT_CHILDREN, exception);
                 return;
             }
         }
         if (newParentTF.isEmbeddedTaskFragmentInPip() || oldParent.isEmbeddedTaskFragmentInPip()) {
             final Throwable exception = new SecurityException(
                     "Not allow to reparent in TaskFragment in PIP Task.");
-            sendTaskFragmentOperationFailure(organizer, errorCallbackToken, exception);
+            sendTaskFragmentOperationFailure(organizer, errorCallbackToken, newParentTF,
+                    HIERARCHY_OP_TYPE_REPARENT_CHILDREN, exception);
             return;
         }
         if (newParentTF.getTask() != oldParent.getTask()) {
             final Throwable exception = new SecurityException(
                     "The new parent is not in the same Task as the old parent.");
-            sendTaskFragmentOperationFailure(organizer, errorCallbackToken, exception);
+            sendTaskFragmentOperationFailure(organizer, errorCallbackToken, newParentTF,
+                    HIERARCHY_OP_TYPE_REPARENT_CHILDREN, exception);
             return;
         }
         while (oldParent.hasChild()) {
@@ -1610,7 +1768,8 @@
             final Throwable exception =
                     new IllegalArgumentException("Not allowed to operate with invalid "
                             + "taskFragment");
-            sendTaskFragmentOperationFailure(organizer, errorCallbackToken, exception);
+            sendTaskFragmentOperationFailure(organizer, errorCallbackToken, taskFragment,
+                    HIERARCHY_OP_TYPE_DELETE_TASK_FRAGMENT, exception);
             return 0;
         }
         if (taskFragment.isEmbeddedTaskFragmentInPip()
@@ -1619,7 +1778,8 @@
                 && taskFragment.getTopNonFinishingActivity() != null) {
             final Throwable exception = new IllegalArgumentException(
                     "Not allowed to delete TaskFragment in PIP Task");
-            sendTaskFragmentOperationFailure(organizer, errorCallbackToken, exception);
+            sendTaskFragmentOperationFailure(organizer, errorCallbackToken, taskFragment,
+                    HIERARCHY_OP_TYPE_DELETE_TASK_FRAGMENT, exception);
             return 0;
         }
         mLaunchTaskFragments.removeAt(index);
@@ -1647,12 +1807,14 @@
     }
 
     void sendTaskFragmentOperationFailure(@NonNull ITaskFragmentOrganizer organizer,
-            @Nullable IBinder errorCallbackToken, @NonNull Throwable exception) {
+            @Nullable IBinder errorCallbackToken, @Nullable TaskFragment taskFragment, int opType,
+            @NonNull Throwable exception) {
         if (organizer == null) {
             throw new IllegalArgumentException("Not allowed to operate with invalid organizer");
         }
         mService.mTaskFragmentOrganizerController
-                .onTaskFragmentError(organizer, errorCallbackToken, exception);
+                .onTaskFragmentError(organizer, errorCallbackToken, taskFragment, opType,
+                        exception);
     }
 
     private Throwable convertStartFailureToThrowable(int result, Intent intent) {
diff --git a/services/core/java/com/android/server/wm/WindowOrientationListener.java b/services/core/java/com/android/server/wm/WindowOrientationListener.java
index de87ab9..3e165e4 100644
--- a/services/core/java/com/android/server/wm/WindowOrientationListener.java
+++ b/services/core/java/com/android/server/wm/WindowOrientationListener.java
@@ -296,9 +296,9 @@
 
     /**
      * Whether the device is in the lock screen.
-     * @return returns true if the screen is locked. Otherwise, returns false.
+     * @return returns true if the key guard is showing on the lock screen.
      */
-    public abstract boolean isKeyguardLocked();
+    public abstract boolean isKeyguardShowingAndNotOccluded();
 
     public void dumpDebug(ProtoOutputStream proto, long fieldId) {
         final long token = proto.start(fieldId);
@@ -1151,7 +1151,7 @@
                     FrameworkStatsLog.DEVICE_ROTATED__ROTATION_EVENT_TYPE__ACTUAL_EVENT);
 
             if (isRotationResolverEnabled()) {
-                if (isKeyguardLocked()) {
+                if (isKeyguardShowingAndNotOccluded()) {
                     if (mLastRotationResolution != ROTATION_UNSET
                             && SystemClock.uptimeMillis() - mLastRotationResolutionTimeStamp
                             < mRotationMemorizationTimeoutMillis) {
diff --git a/services/core/java/com/android/server/wm/WindowProcessController.java b/services/core/java/com/android/server/wm/WindowProcessController.java
index 215bcb0..87b0c8b 100644
--- a/services/core/java/com/android/server/wm/WindowProcessController.java
+++ b/services/core/java/com/android/server/wm/WindowProcessController.java
@@ -16,6 +16,7 @@
 
 package com.android.server.wm;
 
+import static android.app.ActivityManager.PROCESS_STATE_CACHED_ACTIVITY;
 import static android.app.ActivityManager.PROCESS_STATE_NONEXISTENT;
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
 import static android.content.res.Configuration.ASSETS_SEQ_UNDEFINED;
@@ -24,7 +25,6 @@
 
 import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_CONFIGURATION;
 import static com.android.internal.util.Preconditions.checkArgument;
-import static com.android.server.am.ActivityManagerService.MY_PID;
 import static com.android.server.wm.ActivityRecord.State.DESTROYED;
 import static com.android.server.wm.ActivityRecord.State.DESTROYING;
 import static com.android.server.wm.ActivityRecord.State.PAUSED;
@@ -39,6 +39,7 @@
 import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLASS_NAME;
 import static com.android.server.wm.ActivityTaskManagerService.INSTRUMENTATION_KEY_DISPATCHING_TIMEOUT_MILLIS;
 import static com.android.server.wm.ActivityTaskManagerService.RELAUNCH_REASON_NONE;
+import static com.android.server.wm.WindowManagerService.MY_PID;
 
 import android.Manifest;
 import android.annotation.NonNull;
@@ -76,7 +77,6 @@
 
 import java.io.IOException;
 import java.io.PrintWriter;
-import java.lang.ref.WeakReference;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -195,6 +195,11 @@
     /** Whether the process configuration is waiting to be dispatched to the process. */
     private boolean mHasPendingConfigurationChange;
 
+    /** If the process state is in (<=) the cached state, then defer delivery of the config. */
+    private static final int CACHED_CONFIG_PROC_STATE = PROCESS_STATE_CACHED_ACTIVITY;
+    /** Whether {@link #mLastReportedConfiguration} is deferred by the cached state. */
+    private volatile boolean mHasCachedConfiguration;
+
     /**
      * Registered {@link DisplayArea} as a listener to override config changes. {@code null} if not
      * registered.
@@ -221,10 +226,6 @@
     /** Whether our process is currently running a {@link IRemoteAnimationRunner} */
     private boolean mRunningRemoteAnimation;
 
-    /** List of "chained" processes that are running remote animations for this process */
-    private final ArrayList<WeakReference<WindowProcessController>> mRemoteAnimationDelegates =
-            new ArrayList<>();
-
     // The bits used for mActivityStateFlags.
     private static final int ACTIVITY_STATE_FLAG_IS_VISIBLE = 1 << 16;
     private static final int ACTIVITY_STATE_FLAG_IS_PAUSING_OR_PAUSED = 1 << 17;
@@ -316,8 +317,27 @@
         return mCurProcState;
     }
 
+    /**
+     * Sets the computed process state from the oom adjustment calculation. This is frequently
+     * called in activity manager's lock, so don't use window manager lock here.
+     */
+    @HotPath(caller = HotPath.OOM_ADJUSTMENT)
     public void setReportedProcState(int repProcState) {
+        final int prevProcState = mRepProcState;
         mRepProcState = repProcState;
+
+        // Deliver the cached config if the app changes from cached state to non-cached state.
+        final IApplicationThread thread = mThread;
+        if (prevProcState >= CACHED_CONFIG_PROC_STATE && repProcState < CACHED_CONFIG_PROC_STATE
+                && thread != null && mHasCachedConfiguration) {
+            final Configuration config;
+            synchronized (mLastReportedConfiguration) {
+                config = new Configuration(mLastReportedConfiguration);
+            }
+            // Schedule immediately to make sure the app component (e.g. receiver, service) can get
+            // the latest configuration in their lifecycle callbacks (e.g. onReceive, onCreate).
+            scheduleConfigurationChange(thread, config);
+        }
     }
 
     int getReportedProcState() {
@@ -1335,12 +1355,22 @@
     @Override
     public void onConfigurationChanged(Configuration newGlobalConfig) {
         super.onConfigurationChanged(newGlobalConfig);
-        updateConfiguration();
-    }
+        final Configuration config = getConfiguration();
+        if (mLastReportedConfiguration.equals(config)) {
+            // Nothing changed.
+            if (Build.IS_DEBUGGABLE && mHasImeService) {
+                // TODO (b/135719017): Temporary log for debugging IME service.
+                Slog.w(TAG_CONFIGURATION, "Current config: " + config
+                        + " unchanged for IME proc " + mName);
+            }
+            return;
+        }
 
-    @Override
-    public void onRequestedOverrideConfigurationChanged(Configuration overrideConfiguration) {
-        super.onRequestedOverrideConfigurationChanged(overrideConfiguration);
+        if (mPauseConfigurationDispatchCount > 0) {
+            mHasPendingConfigurationChange = true;
+            return;
+        }
+        dispatchConfiguration(config);
     }
 
     @Override
@@ -1366,25 +1396,6 @@
         resolvedConfig.seq = newParentConfig.seq;
     }
 
-    private void updateConfiguration() {
-        final Configuration config = getConfiguration();
-        if (mLastReportedConfiguration.diff(config) == 0) {
-            // Nothing changed.
-            if (Build.IS_DEBUGGABLE && mHasImeService) {
-                // TODO (b/135719017): Temporary log for debugging IME service.
-                Slog.w(TAG_CONFIGURATION, "Current config: " + config
-                        + " unchanged for IME proc " + mName);
-            }
-            return;
-        }
-
-        if (mPauseConfigurationDispatchCount > 0) {
-            mHasPendingConfigurationChange = true;
-            return;
-        }
-        dispatchConfiguration(config);
-    }
-
     void dispatchConfiguration(Configuration config) {
         mHasPendingConfigurationChange = false;
         if (mThread == null) {
@@ -1395,29 +1406,47 @@
             }
             return;
         }
+
+        config.seq = mAtm.increaseConfigurationSeqLocked();
+        setLastReportedConfiguration(config);
+
+        // A cached process doesn't have running application components, so it is unnecessary to
+        // notify the configuration change. The last-reported-configuration is still set because
+        // setReportedProcState() should not write any fields that require WM lock.
+        if (mRepProcState >= CACHED_CONFIG_PROC_STATE) {
+            mHasCachedConfiguration = true;
+            // Because there are 2 volatile accesses in setReportedProcState(): mRepProcState and
+            // mHasCachedConfiguration, check again in case mRepProcState is changed but hasn't
+            // read the change of mHasCachedConfiguration.
+            if (mRepProcState >= CACHED_CONFIG_PROC_STATE) {
+                return;
+            }
+        }
+
+        scheduleConfigurationChange(mThread, config);
+    }
+
+    private void scheduleConfigurationChange(IApplicationThread thread, Configuration config) {
         ProtoLog.v(WM_DEBUG_CONFIGURATION, "Sending to proc %s new config %s", mName,
                 config);
         if (Build.IS_DEBUGGABLE && mHasImeService) {
             // TODO (b/135719017): Temporary log for debugging IME service.
             Slog.v(TAG_CONFIGURATION, "Sending to IME proc " + mName + " new config " + config);
         }
-
+        mHasCachedConfiguration = false;
         try {
-            config.seq = mAtm.increaseConfigurationSeqLocked();
-            mAtm.getLifecycleManager().scheduleTransaction(mThread,
+            mAtm.getLifecycleManager().scheduleTransaction(thread,
                     ConfigurationChangeItem.obtain(config));
-            setLastReportedConfiguration(config);
         } catch (Exception e) {
-            Slog.e(TAG_CONFIGURATION, "Failed to schedule configuration change", e);
+            Slog.e(TAG_CONFIGURATION, "Failed to schedule configuration change: " + mOwner, e);
         }
     }
 
     void setLastReportedConfiguration(Configuration config) {
-        mLastReportedConfiguration.setTo(config);
-    }
-
-    Configuration getLastReportedConfiguration() {
-        return mLastReportedConfiguration;
+        // Synchronize for the access from setReportedProcState().
+        synchronized (mLastReportedConfiguration) {
+            mLastReportedConfiguration.setTo(config);
+        }
     }
 
     void pauseConfigurationDispatch() {
@@ -1468,6 +1497,8 @@
             // config seq. This increment ensures that the client won't ignore the configuration.
             config.seq = mAtm.increaseConfigurationSeqLocked();
         }
+        // LaunchActivityItem includes the latest process configuration.
+        mHasCachedConfiguration = false;
         return config;
     }
 
@@ -1627,30 +1658,7 @@
         updateRunningRemoteOrRecentsAnimation();
     }
 
-    /**
-     * Marks another process as a "delegate" animator. This means that process is doing some part
-     * of a remote animation on behalf of this process.
-     */
-    void addRemoteAnimationDelegate(WindowProcessController delegate) {
-        if (!isRunningRemoteTransition()) {
-            throw new IllegalStateException("Can't add a delegate to a process which isn't itself"
-                    + " running a remote animation");
-        }
-        mRemoteAnimationDelegates.add(new WeakReference<>(delegate));
-    }
-
     void updateRunningRemoteOrRecentsAnimation() {
-        if (!isRunningRemoteTransition()) {
-            // Clean-up any delegates
-            for (int i = 0; i < mRemoteAnimationDelegates.size(); ++i) {
-                final WindowProcessController delegate = mRemoteAnimationDelegates.get(i).get();
-                if (delegate == null) continue;
-                delegate.setRunningRemoteAnimation(false);
-                delegate.setRunningRecentsAnimation(false);
-            }
-            mRemoteAnimationDelegates.clear();
-        }
-
         // Posting on handler so WM lock isn't held when we call into AM.
         mAtm.mH.sendMessage(PooledLambda.obtainMessage(
                 WindowProcessListener::setRunningRemoteAnimation, mListener,
@@ -1695,7 +1703,8 @@
         }
         pw.println(prefix + " Configuration=" + getConfiguration());
         pw.println(prefix + " OverrideConfiguration=" + getRequestedOverrideConfiguration());
-        pw.println(prefix + " mLastReportedConfiguration=" + mLastReportedConfiguration);
+        pw.println(prefix + " mLastReportedConfiguration=" + (mHasCachedConfiguration
+                ? ("(cached) " + mLastReportedConfiguration) : mLastReportedConfiguration));
 
         final int stateFlags = mActivityStateFlags;
         if (stateFlags != ACTIVITY_STATE_FLAG_MASK_MIN_TASK_LAYER) {
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index 4c32edc..86fa356 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -115,8 +115,8 @@
 import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_ORIENTATION;
 import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_RESIZE;
 import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_STARTING_WINDOW;
+import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_SYNC_ENGINE;
 import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_WINDOW_INSETS;
-import static com.android.server.am.ActivityManagerService.MY_PID;
 import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
 import static com.android.server.policy.WindowManagerPolicy.TRANSIT_ENTER;
 import static com.android.server.policy.WindowManagerPolicy.TRANSIT_EXIT;
@@ -137,7 +137,6 @@
 import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_RECENTS;
 import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_STARTING_REVEAL;
 import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_WINDOW_ANIMATION;
-import static com.android.server.wm.WindowContainer.AnimationFlags.CHILDREN;
 import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS;
 import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION;
 import static com.android.server.wm.WindowContainerChildProto.WINDOW;
@@ -151,6 +150,7 @@
 import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
 import static com.android.server.wm.WindowManagerService.H.WINDOW_STATE_BLAST_SYNC_TIMEOUT;
 import static com.android.server.wm.WindowManagerService.MAX_ANIMATION_DURATION;
+import static com.android.server.wm.WindowManagerService.MY_PID;
 import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_NORMAL;
 import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_REMOVING_FOCUS;
 import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_WILL_PLACE_SURFACES;
@@ -392,6 +392,9 @@
     int mSyncSeqId = 0;
     int mLastSeqIdSentToRelayout = 0;
 
+    /** The last syncId associated with a prepareSync or 0 when no sync is active. */
+    int mPrepareSyncSeqId = 0;
+
     /**
      * {@code true} when the client was still drawing for sync when the sync-set was finished or
      * cancelled. This can happen if the window goes away during a sync. In this situation we need
@@ -469,11 +472,12 @@
     int mTouchableInsets = ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_FRAME;
 
     // Current transformation being applied.
-    float mGlobalScale=1;
-    float mInvGlobalScale=1;
+    float mGlobalScale = 1f;
+    float mInvGlobalScale = 1f;
+    float mSizeCompatScale = 1f;
     final float mOverrideScale;
-    float mHScale=1, mVScale=1;
-    float mLastHScale=1, mLastVScale=1;
+    float mHScale = 1f, mVScale = 1f;
+    float mLastHScale = 1f, mLastVScale = 1f;
 
     // An offset in pixel of the surface contents from the window position. Used for Wallpaper
     // to provide the effect of scrolling within a large surface. We just use these values as
@@ -616,11 +620,6 @@
     int mLastVisibleLayoutRotation = -1;
 
     /**
-     * Set when we need to report the orientation change to client to trigger a relayout.
-     */
-    boolean mReportOrientationChanged;
-
-    /**
      * How long we last kept the screen frozen.
      */
     int mLastFreezeDuration;
@@ -814,7 +813,8 @@
     };
 
     private final Consumer<SurfaceControl.Transaction> mSetSurfacePositionConsumer = t -> {
-        if (mSurfaceControl != null && mSurfaceControl.isValid()) {
+        // Only apply the position to the surface when there's no leash created.
+        if (mSurfaceControl != null && mSurfaceControl.isValid() && !mSurfaceAnimator.hasLeash()) {
             t.setPosition(mSurfaceControl, mSurfacePosition.x, mSurfacePosition.y);
         }
     };
@@ -1251,21 +1251,21 @@
         mSession.windowAddedLocked();
     }
 
-    boolean updateGlobalScale() {
+    void updateGlobalScale() {
         if (hasCompatScale()) {
-            if (mOverrideScale != 1f) {
-                mGlobalScale = mToken.hasSizeCompatBounds()
-                        ? mToken.getSizeCompatScale() * mOverrideScale
-                        : mOverrideScale;
-            } else {
-                mGlobalScale = mToken.getSizeCompatScale();
-            }
+            mSizeCompatScale = (mOverrideScale == 1f || mToken.hasSizeCompatBounds())
+                    ? mToken.getSizeCompatScale()
+                    : 1f;
+            mGlobalScale = mSizeCompatScale * mOverrideScale;
             mInvGlobalScale = 1f / mGlobalScale;
-            return true;
+            return;
         }
 
-        mGlobalScale = mInvGlobalScale = 1f;
-        return false;
+        mGlobalScale = mInvGlobalScale = mSizeCompatScale = 1f;
+    }
+
+    float getSizeCompatScale() {
+        return mSizeCompatScale;
     }
 
     /**
@@ -1356,7 +1356,7 @@
             windowFrames.mFrame.set(clientWindowFrames.frame);
             windowFrames.mDisplayFrame.set(clientWindowFrames.displayFrame);
             windowFrames.mParentFrame.set(clientWindowFrames.parentFrame);
-            if (hasCompatScale()) {
+            if (mGlobalScale != 1f) {
                 // The frames sent from the client need to be adjusted to the real coordinate space.
                 windowFrames.mFrame.scale(mGlobalScale);
                 windowFrames.mDisplayFrame.scale(mGlobalScale);
@@ -1368,7 +1368,7 @@
             windowFrames.mFrame.set(clientWindowFrames.frame);
 
             windowFrames.mCompatFrame.set(windowFrames.mFrame);
-            if (hasCompatScale()) {
+            if (mInvGlobalScale != 1f) {
                 // Also, the scaled frame that we report to the app needs to be adjusted to be in
                 // its coordinate space.
                 windowFrames.mCompatFrame.scale(mInvGlobalScale);
@@ -1473,23 +1473,10 @@
         return mWindowFrames.mParentFrame;
     }
 
-    Rect getCompatFrame() {
-        return mWindowFrames.mCompatFrame;
-    }
-
     WindowManager.LayoutParams getAttrs() {
         return mAttrs;
     }
 
-    WindowManager.LayoutParams getLayoutingAttrs(int rotation) {
-        final WindowManager.LayoutParams[] paramsForRotation = mAttrs.paramsForRotation;
-        if (paramsForRotation == null || paramsForRotation.length != 4
-                || paramsForRotation[rotation] == null) {
-            return mAttrs;
-        }
-        return paramsForRotation[rotation];
-    }
-
     /** Retrieves the flags used to disable system UI functions. */
     int getDisableFlags() {
         return mDisableFlags;
@@ -1527,29 +1514,27 @@
         final boolean dragResizingChanged = isDragResizeChanged()
                 && !isDragResizingChangeReported();
 
+        final boolean attachedFrameChanged = LOCAL_LAYOUT
+                && mLayoutAttached && getParentWindow().frameChanged();
+
         if (DEBUG) {
             Slog.v(TAG_WM, "Resizing " + this + ": configChanged=" + configChanged
                     + " dragResizingChanged=" + dragResizingChanged
                     + " last=" + mWindowFrames.mLastFrame + " frame=" + mWindowFrames.mFrame);
         }
 
-        // We update mLastFrame always rather than in the conditional with the last inset
-        // variables, because mFrameSizeChanged only tracks the width and height changing.
-        updateLastFrames();
-
         // Add a window that is using blastSync to the resizing list if it hasn't been reported
         // already. This because the window is waiting on a finishDrawing from the client.
         if (didFrameInsetsChange
                 || configChanged
                 || insetsChanged
                 || dragResizingChanged
-                || mReportOrientationChanged
-                || shouldSendRedrawForSync()) {
+                || shouldSendRedrawForSync()
+                || attachedFrameChanged) {
             ProtoLog.v(WM_DEBUG_RESIZE,
-                        "Resize reasons for w=%s:  %s configChanged=%b "
-                                + "dragResizingChanged=%b reportOrientationChanged=%b",
+                        "Resize reasons for w=%s:  %s configChanged=%b dragResizingChanged=%b",
                         this, mWindowFrames.getInsetsChangedInfo(),
-                        configChanged, dragResizingChanged, mReportOrientationChanged);
+                        configChanged, dragResizingChanged);
 
             if (insetsChanged) {
                 mWindowFrames.setInsetsChanged(false);
@@ -1601,6 +1586,10 @@
         }
     }
 
+    private boolean frameChanged() {
+        return !mWindowFrames.mFrame.equals(mWindowFrames.mLastFrame);
+    }
+
     boolean getOrientationChanging() {
         // In addition to the local state flag, we must also consider the difference in the last
         // reported configuration vs. the current state. If the client code has not been informed of
@@ -1711,7 +1700,7 @@
                 mFrozenInsetsState != null ? mFrozenInsetsState : getMergedInsetsState();
         final InsetsState insetsStateForWindow = insetsPolicy
                 .enforceInsetsPolicyForTarget(insetTypeProvidedByWindow,
-                        getWindowingMode(), isAlwaysOnTop(), rawInsetsState);
+                        getWindowingMode(), isAlwaysOnTop(), mAttrs.type, rawInsetsState);
         return insetsPolicy.adjustInsetsForWindow(this, insetsStateForWindow,
                 includeTransient);
     }
@@ -1737,7 +1726,7 @@
      */
     InsetsState getCompatInsetsState() {
         InsetsState state = getInsetsState();
-        if (hasCompatScale()) {
+        if (mInvGlobalScale != 1f) {
             state = new InsetsState(state, true);
             state.scale(mInvGlobalScale);
         }
@@ -2180,6 +2169,7 @@
             return;
         }
         if (mActivityRecord != null) {
+            if (!mActivityRecord.mVisibleRequested) return;
             if (mActivityRecord.allDrawn) {
                 // The allDrawn of activity is reset when the visibility is changed to visible, so
                 // the content should be ready if allDrawn is set.
@@ -2456,15 +2446,14 @@
 
         final DisplayContent dc = getDisplayContent();
         if (isImeLayeringTarget()) {
-            // Remove the IME screenshot surface if the layering target is not animating.
-            dc.removeImeScreenshotIfPossible();
+            // Remove the attached IME screenshot surface.
+            dc.removeImeSurfaceByTarget(this);
             // Make sure to set mImeLayeringTarget as null when the removed window is the
             // IME target, in case computeImeTarget may use the outdated target.
             dc.setImeLayeringTarget(null);
             dc.computeImeTarget(true /* updateImeTarget */);
         }
-        if (dc.getImeInputTarget() == this
-                && (mActivityRecord == null || !mActivityRecord.isRelaunching())) {
+        if (dc.getImeInputTarget() == this && !inRelaunchingActivity()) {
             dc.updateImeInputAndControlTarget(null);
         }
 
@@ -2591,7 +2580,10 @@
                 // usually unnoticeable (e.g. covered by rotation animation) and the animation
                 // bounds could be inconsistent, such as depending on when the window applies
                 // its draw transaction with new rotation.
-                final boolean allowExitAnimation = !getDisplayContent().inTransition();
+                final boolean allowExitAnimation = !getDisplayContent().inTransition()
+                        // There will be a new window so the exit animation may not be visible or
+                        // look weird if its orientation is changed.
+                        && !inRelaunchingActivity();
 
                 if (wasVisible) {
                     final int transit = (!startingWindow) ? TRANSIT_EXIT : TRANSIT_PREVIEW_DONE;
@@ -3468,10 +3460,6 @@
         return mClient.asBinder().isBinderAlive();
     }
 
-    boolean isClosing() {
-        return mAnimatingExit || (mActivityRecord != null && mActivityRecord.isClosingOrEnteringPip());
-    }
-
     void sendAppVisibilityToClients() {
         super.sendAppVisibilityToClients();
 
@@ -3579,10 +3567,6 @@
         mAnimatingExit = false;
         ProtoLog.d(WM_DEBUG_ANIM, "Clear animatingExit: reason=destroySurface win=%s", this);
 
-        // Clear the flag so the buffer requested for the next new surface won't be dropped by
-        // mistaking the surface size needs to update.
-        mReportOrientationChanged = false;
-
         if (useBLASTSync()) {
             immediatelyNotifyBlastSync();
         }
@@ -3599,6 +3583,7 @@
         } else {
             logExclusionRestrictions(EXCLUSION_LEFT);
             logExclusionRestrictions(EXCLUSION_RIGHT);
+            getDisplayContent().removeImeSurfaceByTarget(this);
         }
         // Exclude toast because legacy apps may show toast window by themselves, so the misused
         // apps won't always be considered as foreground state.
@@ -3852,9 +3837,19 @@
             boolean relayoutVisible) {
         outFrames.frame.set(mWindowFrames.mCompatFrame);
         outFrames.displayFrame.set(mWindowFrames.mDisplayFrame);
-        if (mInvGlobalScale != 1.0f && hasCompatScale()) {
+        if (mInvGlobalScale != 1f) {
             outFrames.displayFrame.scale(mInvGlobalScale);
         }
+        if (mLayoutAttached) {
+            if (outFrames.attachedFrame == null) {
+                outFrames.attachedFrame = new Rect();
+            }
+            outFrames.attachedFrame.set(getParentWindow().getFrame());
+            if (mInvGlobalScale != 1f) {
+                outFrames.attachedFrame.scale(mInvGlobalScale);
+            }
+        }
+        outFrames.sizeCompatScale = mSizeCompatScale;
 
         // Note: in the cases where the window is tied to an activity, we should not send a
         // configuration update when the window has requested to be hidden. Doing so can lead to
@@ -3878,7 +3873,7 @@
         // If the activity is scheduled to relaunch, skip sending the resized to ViewRootImpl now
         // since it will be destroyed anyway. This also prevents the client from receiving
         // windowing mode change before it is destroyed.
-        if (mActivityRecord != null && mActivityRecord.isRelaunching()) {
+        if (inRelaunchingActivity()) {
             return;
         }
         // If this is an activity or wallpaper and is invisible or going invisible, don't report
@@ -3899,21 +3894,25 @@
             ProtoLog.i(WM_DEBUG_ORIENTATION, "Resizing %s WITH DRAW PENDING", this);
         }
 
-        final boolean reportOrientation = mReportOrientationChanged;
         // Always reset these states first, so if {@link IWindow#resized} fails, this
         // window won't be added to {@link WindowManagerService#mResizingWindows} and set
         // {@link #mOrientationChanging} to true again by {@link #updateResizingWindowIfNeeded}
         // that may cause WINDOW_FREEZE_TIMEOUT because resizing the client keeps failing.
-        mReportOrientationChanged = false;
         mDragResizingChangeReported = true;
         mWindowFrames.clearReportResizeHints();
 
+        // We update mLastFrame always rather than in the conditional with the last inset
+        // variables, because mFrameSizeChanged only tracks the width and height changing.
+        updateLastFrames();
+
+        final int prevRotation = mLastReportedConfiguration
+                .getMergedConfiguration().windowConfiguration.getRotation();
         fillClientWindowFramesAndConfiguration(mClientWindowFrames, mLastReportedConfiguration,
                 true /* useLatestConfig */, false /* relayoutVisible */);
         final boolean syncRedraw = shouldSendRedrawForSync();
         final boolean reportDraw = syncRedraw || drawPending;
         final boolean isDragResizeChanged = isDragResizeChanged();
-        final boolean forceRelayout = syncRedraw || reportOrientation || isDragResizeChanged;
+        final boolean forceRelayout = syncRedraw || isDragResizeChanged;
         final DisplayContent displayContent = getDisplayContent();
         final boolean alwaysConsumeSystemBars =
                 displayContent.getDisplayPolicy().areSystemBarsForcedShownLw();
@@ -3940,7 +3939,8 @@
             mClient.resized(mClientWindowFrames, reportDraw, mLastReportedConfiguration,
                     getCompatInsetsState(), forceRelayout, alwaysConsumeSystemBars, displayId,
                     mSyncSeqId, resizeMode);
-            if (drawPending && reportOrientation && mOrientationChanging) {
+            if (drawPending && prevRotation >= 0 && prevRotation != mLastReportedConfiguration
+                    .getMergedConfiguration().windowConfiguration.getRotation()) {
                 mOrientationChangeRedrawRequestTime = SystemClock.elapsedRealtime();
                 ProtoLog.v(WM_DEBUG_ORIENTATION,
                         "Requested redraw for orientation change: %s", this);
@@ -3959,6 +3959,10 @@
         Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
     }
 
+    boolean inRelaunchingActivity() {
+        return mActivityRecord != null && mActivityRecord.isRelaunching();
+    }
+
     boolean isClientLocal() {
         return mClient instanceof IWindow.Stub;
     }
@@ -4349,7 +4353,7 @@
         pw.println(prefix + "mHasSurface=" + mHasSurface
                 + " isReadyForDisplay()=" + isReadyForDisplay()
                 + " mWindowRemovalAllowed=" + mWindowRemovalAllowed);
-        if (hasCompatScale()) {
+        if (mInvGlobalScale != 1f) {
             pw.println(prefix + "mCompatFrame=" + mWindowFrames.mCompatFrame.toShortString(sTmpSB));
         }
         if (dumpAll) {
@@ -4365,12 +4369,11 @@
                     + " mDestroying=" + mDestroying
                     + " mRemoved=" + mRemoved);
         }
-        if (getOrientationChanging() || mAppFreezing || mReportOrientationChanged) {
+        if (getOrientationChanging() || mAppFreezing) {
             pw.println(prefix + "mOrientationChanging=" + mOrientationChanging
                     + " configOrientationChanging="
                     + (getLastReportedConfiguration().orientation != getConfiguration().orientation)
-                    + " mAppFreezing=" + mAppFreezing
-                    + " mReportOrientationChanged=" + mReportOrientationChanged);
+                    + " mAppFreezing=" + mAppFreezing);
         }
         if (mLastFreezeDuration != 0) {
             pw.print(prefix + "mLastFreezeDuration=");
@@ -4424,6 +4427,8 @@
                 pw.println(prefix + "Requested visibilities: " + visibilityString);
             }
         }
+
+        pw.println(prefix + "mPrepareSyncSeqId=" + mPrepareSyncSeqId);
     }
 
     @Override
@@ -4560,7 +4565,7 @@
 
     float translateToWindowX(float x) {
         float winX = x - mWindowFrames.mFrame.left;
-        if (hasCompatScale()) {
+        if (mGlobalScale != 1f) {
             winX *= mGlobalScale;
         }
         return winX;
@@ -4568,7 +4573,7 @@
 
     float translateToWindowY(float y) {
         float winY = y - mWindowFrames.mFrame.top;
-        if (hasCompatScale()) {
+        if (mGlobalScale != 1f) {
             winY *= mGlobalScale;
         }
         return winY;
@@ -4973,22 +4978,6 @@
                 || isAnimating(0 /* flags */, ANIMATION_TYPE_WINDOW_ANIMATION);
     }
 
-    boolean isExitAnimationRunningSelfOrChild() {
-        return isAnimating(CHILDREN, ANIMATION_TYPE_WINDOW_ANIMATION);
-    }
-
-    /**
-     * @return {@code true} if self or the parent container of the window is in transition.
-     * (e.g. The app or recents transition)
-     */
-    boolean inTransitionSelfOrParent() {
-        if (!mTransitionController.isShellTransitionsEnabled()) {
-            return isAnimating(PARENTS | TRANSITION,
-                    ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_RECENTS);
-        }
-        return mTransitionController.inTransition(this);
-    }
-
     private boolean shouldFinishAnimatingExit() {
         // Exit animation might be applied soon.
         if (inTransition()) {
@@ -5575,7 +5564,7 @@
                 mLastSurfaceInsets.set(mAttrs.surfaceInsets);
             }
             if (surfaceSizeChanged && mWinAnimator.getShown() && !canPlayMoveAnimation()
-                    && okToDisplay()) {
+                    && okToDisplay() && mSyncState == SYNC_STATE_NONE) {
                 applyWithNextDraw(mSetSurfacePositionConsumer);
             } else {
                 mSetSurfacePositionConsumer.accept(t);
@@ -5927,11 +5916,25 @@
         return mWinAnimator.getSurfaceControl();
     }
 
+    /** Drops a buffer for this window's view-root from a transaction */
+    private void dropBufferFrom(Transaction t) {
+        SurfaceControl viewSurface = getClientViewRootSurface();
+        if (viewSurface == null) return;
+        t.setBuffer(viewSurface, (android.hardware.HardwareBuffer) null);
+    }
+
     @Override
     boolean prepareSync() {
+        if (!mDrawHandlers.isEmpty()) {
+            Slog.w(TAG, "prepareSync with mDrawHandlers, " + this + ", " + Debug.getCallers(8));
+        }
         if (!super.prepareSync()) {
             return false;
         }
+        if (mIsWallpaper) {
+            // TODO(b/233286785): Add sync support to wallpaper.
+            return false;
+        }
         // In the WindowContainer implementation we immediately mark ready
         // since a generic WindowContainer only needs to wait for its
         // children to finish and is immediately ready from its own
@@ -5939,7 +5942,18 @@
         // to draw even if the children draw first or don't need to sync, so we start
         // in WAITING state rather than READY.
         mSyncState = SYNC_STATE_WAITING_FOR_DRAW;
+
+        if (mPrepareSyncSeqId > 0) {
+            // another prepareSync during existing sync (eg. reparented), so pre-emptively
+            // drop buffer (if exists). If the buffer hasn't been received yet, it will be
+            // dropped in finishDrawing.
+            ProtoLog.d(WM_DEBUG_SYNC_ENGINE, "Preparing to sync a window that was already in the"
+                            + " sync, so try dropping buffer. win=%s", this);
+            dropBufferFrom(mSyncTransaction);
+        }
+
         mSyncSeqId++;
+        mPrepareSyncSeqId = mSyncSeqId;
         requestRedrawForSync();
         return true;
     }
@@ -5960,6 +5974,13 @@
         if (mSyncState == SYNC_STATE_WAITING_FOR_DRAW && mRedrawForSyncReported) {
             mClientWasDrawingForSync = true;
         }
+        mPrepareSyncSeqId = 0;
+        if (cancel) {
+            // This is leaving sync so any buffers left in the sync have a chance of
+            // being applied out-of-order and can also block the buffer queue for this
+            // window. To prevent this, drop the buffer.
+            dropBufferFrom(mSyncTransaction);
+        }
         super.finishSync(outMergedTransaction, cancel);
     }
 
@@ -5981,6 +6002,17 @@
                     .notifyStartingWindowDrawn(mActivityRecord);
         }
 
+        final boolean syncActive = mPrepareSyncSeqId > 0;
+        final boolean syncStillPending = syncActive && mPrepareSyncSeqId > syncSeqId;
+        if (syncStillPending && postDrawTransaction != null) {
+            ProtoLog.d(WM_DEBUG_SYNC_ENGINE, "Got a buffer for request id=%d but latest request is"
+                    + " id=%d. Since the buffer is out-of-date, drop it. win=%s", syncSeqId,
+                    mPrepareSyncSeqId, this);
+            // sync is waiting for a newer seqId, so this buffer is obsolete and can be dropped
+            // to free up the buffer queue.
+            dropBufferFrom(postDrawTransaction);
+        }
+
         final boolean hasSyncHandlers = executeDrawHandlers(postDrawTransaction, syncSeqId);
 
         boolean skipLayout = false;
@@ -5990,15 +6022,18 @@
         if (asyncRotationController != null
                 && asyncRotationController.handleFinishDrawing(this, postDrawTransaction)) {
             // Consume the transaction because the controller will apply it with fade animation.
-            // Layout is not needed because the window will be hidden by the fade leash. Clear
-            // sync state because its sync transaction doesn't need to be merged to sync group.
+            // Layout is not needed because the window will be hidden by the fade leash.
             postDrawTransaction = null;
             skipLayout = true;
-            clearSyncState();
-        } else if (onSyncFinishedDrawing() && postDrawTransaction != null) {
-            mSyncTransaction.merge(postDrawTransaction);
-            // Consume the transaction because the sync group will merge it.
-            postDrawTransaction = null;
+        } else if (syncActive) {
+            if (!syncStillPending) {
+                onSyncFinishedDrawing();
+            }
+            if (postDrawTransaction != null) {
+                mSyncTransaction.merge(postDrawTransaction);
+                // Consume the transaction because the sync group will merge it.
+                postDrawTransaction = null;
+            }
         }
 
         final boolean layoutNeeded =
@@ -6012,7 +6047,6 @@
         // We could be more subtle with Integer.MAX_VALUE and track a seqId in the timeout.
         finishDrawing(null, Integer.MAX_VALUE);
         mWmService.mH.removeMessages(WINDOW_STATE_BLAST_SYNC_TIMEOUT, this);
-        if (!useBLASTSync()) return;
     }
 
     @Override
@@ -6049,6 +6083,12 @@
         if (mRedrawForSyncReported) {
             return false;
         }
+        // TODO(b/233286785): Remove mIsWallpaper once WallpaperService handles syncId of relayout.
+        if (mInRelayout && !mIsWallpaper) {
+            // The last sync seq id will return to the client, so there is no need to request the
+            // client to redraw.
+            return false;
+        }
         return useBLASTSync();
     }
 
@@ -6081,6 +6121,10 @@
      * See {@link WindowState#mDrawHandlers}
      */
     void applyWithNextDraw(Consumer<SurfaceControl.Transaction> consumer) {
+        if (mSyncState != SYNC_STATE_NONE) {
+            Slog.w(TAG, "applyWithNextDraw with mSyncState=" + mSyncState + ", " + this
+                    + ", " + Debug.getCallers(8));
+        }
         mSyncSeqId++;
         mDrawHandlers.add(new DrawHandler(mSyncSeqId, consumer));
 
@@ -6219,4 +6263,9 @@
                           @WindowTraceLogLevel int logLevel) {
         dumpDebug(proto, fieldId, logLevel);
     }
+
+    public boolean cancelAndRedraw() {
+        // Cancel any draw requests during a sync.
+        return mPrepareSyncSeqId > 0;
+    }
 }
diff --git a/services/core/java/com/android/server/wm/WindowSurfaceController.java b/services/core/java/com/android/server/wm/WindowSurfaceController.java
index 5f43800..4a5c473 100644
--- a/services/core/java/com/android/server/wm/WindowSurfaceController.java
+++ b/services/core/java/com/android/server/wm/WindowSurfaceController.java
@@ -126,8 +126,10 @@
         try {
             transaction.hide(mSurfaceControl);
             if (mAnimator.mIsWallpaper) {
+                final DisplayContent dc = mAnimator.mWin.getDisplayContent();
                 EventLog.writeEvent(EventLogTags.WM_WALLPAPER_SURFACE,
-                        mAnimator.mWin.getDisplayId(), 0 /* request hidden */);
+                        dc.mDisplayId, 0 /* request hidden */,
+                        String.valueOf(dc.mWallpaperController.getWallpaperTarget()));
             }
         } catch (RuntimeException e) {
             Slog.w(TAG, "Exception hiding surface in " + this);
@@ -139,6 +141,12 @@
                 "Destroying surface %s called by %s", this, Debug.getCallers(8));
         try {
             if (mSurfaceControl != null) {
+                if (mAnimator.mIsWallpaper && !mAnimator.mWin.mWindowRemovalAllowed
+                        && !mAnimator.mWin.mRemoveOnExit) {
+                    // The wallpaper surface should have the same lifetime as its window.
+                    Slog.e(TAG, "Unexpected removing wallpaper surface of " + mAnimator.mWin
+                            + " by " + Debug.getCallers(8));
+                }
                 t.remove(mSurfaceControl);
             }
         } catch (RuntimeException e) {
@@ -260,8 +268,10 @@
         setShown(true);
         t.show(mSurfaceControl);
         if (mAnimator.mIsWallpaper) {
+            final DisplayContent dc = mAnimator.mWin.getDisplayContent();
             EventLog.writeEvent(EventLogTags.WM_WALLPAPER_SURFACE,
-                    mAnimator.mWin.getDisplayId(), 1 /* request shown */);
+                    dc.mDisplayId, 1 /* request shown */,
+                    String.valueOf(dc.mWallpaperController.getWallpaperTarget()));
         }
         return true;
     }
diff --git a/services/core/java/com/android/server/wm/WindowToken.java b/services/core/java/com/android/server/wm/WindowToken.java
index d2e56fa..72e7e65 100644
--- a/services/core/java/com/android/server/wm/WindowToken.java
+++ b/services/core/java/com/android/server/wm/WindowToken.java
@@ -18,15 +18,12 @@
 
 import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
 import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
-import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
 import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR;
 
 import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_ADD_REMOVE;
 import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_APP_TRANSITIONS;
 import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_FOCUS;
 import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_WINDOW_MOVEMENT;
-import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS;
-import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION;
 import static com.android.server.wm.WindowContainerChildProto.WINDOW_TOKEN;
 import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
 import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
@@ -37,6 +34,7 @@
 import static com.android.server.wm.WindowTokenProto.WINDOW_CONTAINER;
 
 import android.annotation.CallSuper;
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.content.res.Configuration;
 import android.graphics.Rect;
@@ -48,6 +46,7 @@
 import android.view.InsetsState;
 import android.view.Surface;
 import android.view.SurfaceControl;
+import android.view.WindowManager;
 import android.view.WindowManager.LayoutParams.WindowType;
 import android.window.WindowContext;
 
@@ -363,11 +362,7 @@
 
     @Override
     void assignLayer(SurfaceControl.Transaction t, int layer) {
-        if (windowType == TYPE_DOCK_DIVIDER) {
-            // See {@link DisplayContent#mSplitScreenDividerAnchor}
-            super.assignRelativeLayer(t,
-                    mDisplayContent.getDefaultTaskDisplayArea().getSplitScreenDividerAnchor(), 1);
-        } else if (mRoundedCornerOverlay) {
+        if (mRoundedCornerOverlay) {
             super.assignLayer(t, WindowManagerPolicy.COLOR_FADE_LAYER + 1);
         } else {
             super.assignLayer(t, layer);
@@ -454,8 +449,14 @@
         if (mFixedRotationTransformState != null) {
             mFixedRotationTransformState.disassociate(this);
         }
+        // TODO(b/233855302): Remove TaskFragment override if the DisplayContent uses the same
+        //  bounds for screenLayout calculation.
+        final Configuration overrideConfig = new Configuration(config);
+        overrideConfig.screenLayout = TaskFragment.computeScreenLayoutOverride(
+                overrideConfig.screenLayout, overrideConfig.screenWidthDp,
+                overrideConfig.screenHeightDp);
         mFixedRotationTransformState = new FixedRotationTransformState(info, displayFrames,
-                new Configuration(config), mDisplayContent.getRotation());
+                overrideConfig, mDisplayContent.getRotation());
         mFixedRotationTransformState.mAssociatedTokens.add(this);
         mDisplayContent.getDisplayPolicy().simulateLayoutDisplay(displayFrames);
         onFixedRotationStatePrepared();
@@ -505,7 +506,7 @@
         for (int i = mFixedRotationTransformState.mAssociatedTokens.size() - 1; i >= 0; i--) {
             final ActivityRecord r =
                     mFixedRotationTransformState.mAssociatedTokens.get(i).asActivityRecord();
-            if (r != null && r.isAnimating(TRANSITION | PARENTS)) {
+            if (r != null && r.isInTransition()) {
                 return true;
             }
         }
@@ -558,6 +559,12 @@
             // The window may be detached or detaching.
             return;
         }
+        if (mTransitionController.isShellTransitionsEnabled()
+                && asActivityRecord() != null && isVisible()) {
+            // Trigger an activity level rotation transition.
+            mTransitionController.requestTransitionIfNeeded(WindowManager.TRANSIT_CHANGE, this);
+            mTransitionController.setReady(this);
+        }
         final int originalRotation = getWindowConfiguration().getRotation();
         onConfigurationChanged(parent.getConfiguration());
         onCancelFixedRotationTransform(originalRotation);
@@ -569,13 +576,12 @@
      * the same rotation.
      */
     @Nullable
-    SurfaceControl getOrCreateFixedRotationLeash() {
+    SurfaceControl getOrCreateFixedRotationLeash(@NonNull SurfaceControl.Transaction t) {
         if (!mTransitionController.isShellTransitionsEnabled()) return null;
         final int rotation = getRelativeDisplayRotation();
         if (rotation == Surface.ROTATION_0) return mFixedRotationTransformLeash;
         if (mFixedRotationTransformLeash != null) return mFixedRotationTransformLeash;
 
-        final SurfaceControl.Transaction t = getSyncTransaction();
         final SurfaceControl leash = makeSurface().setContainerLayer()
                 .setParent(getParentSurfaceControl())
                 .setName(getSurfaceControl() + " - rotation-leash")
@@ -591,6 +597,15 @@
         return mFixedRotationTransformLeash;
     }
 
+    /**
+     * @return the leash which represents this window as if it was non-rotated. Will be null if
+     *         there isn't one.
+     */
+    @Nullable
+    SurfaceControl getFixedRotationLeash() {
+        return mFixedRotationTransformLeash;
+    }
+
     void removeFixedRotationLeash() {
         if (mFixedRotationTransformLeash == null) return;
         final SurfaceControl.Transaction t = getSyncTransaction();
@@ -664,6 +679,15 @@
         }
     }
 
+    @Override
+    boolean prepareSync() {
+        if (mDisplayContent != null && mDisplayContent.isRotationChanging()
+                && AsyncRotationController.canBeAsync(this)) {
+            return false;
+        }
+        return super.prepareSync();
+    }
+
     @CallSuper
     @Override
     public void dumpDebug(ProtoOutputStream proto, long fieldId,
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 9d708ad..06fb4b0 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -12533,8 +12533,8 @@
                 .setContentIntent(locationSettingsIntent)
                 .setAutoCancel(true)
                 .build();
-        mInjector.getNotificationManager().notify(SystemMessage.NOTE_LOCATION_CHANGED,
-                notification);
+        mHandler.post(() -> mInjector.getNotificationManager().notify(
+                SystemMessage.NOTE_LOCATION_CHANGED, notification));
     }
 
     private String getLocationChangedTitle() {
diff --git a/services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java b/services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java
index 4942464..80de823 100644
--- a/services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java
@@ -722,6 +722,25 @@
     }
 
     @Test
+    public void testAlarmBroadcastOption() throws Exception {
+        final long triggerTime = mNowElapsedTest + 5000;
+        final PendingIntent alarmPi = getNewMockPendingIntent();
+        setTestAlarm(ELAPSED_REALTIME_WAKEUP, triggerTime, alarmPi);
+
+        mNowElapsedTest = mTestTimer.getElapsed();
+        mTestTimer.expire();
+
+        final ArgumentCaptor<PendingIntent.OnFinished> onFinishedCaptor =
+                ArgumentCaptor.forClass(PendingIntent.OnFinished.class);
+        final ArgumentCaptor<Bundle> optionsCaptor = ArgumentCaptor.forClass(Bundle.class);
+        verify(alarmPi).send(eq(mMockContext), eq(0), any(Intent.class),
+                onFinishedCaptor.capture(), any(Handler.class), isNull(),
+                optionsCaptor.capture());
+        assertTrue(optionsCaptor.getValue()
+                .getBoolean(BroadcastOptions.KEY_ALARM_BROADCAST, false));
+    }
+
+    @Test
     public void testUpdateConstants() {
         setDeviceConfigLong(KEY_MIN_FUTURITY, 5);
         setDeviceConfigLong(KEY_MIN_INTERVAL, 10);
@@ -2338,10 +2357,15 @@
         mBinder.set(TEST_CALLING_PACKAGE, RTC_WAKEUP, 1234, WINDOW_EXACT, 0, 0,
                 alarmPi, null, null, null, alarmClock);
 
+        final ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
         verify(mService).setImpl(eq(RTC_WAKEUP), eq(1234L), eq(WINDOW_EXACT), eq(0L),
                 eq(alarmPi), isNull(), isNull(), eq(FLAG_STANDALONE | FLAG_WAKE_FROM_IDLE),
-                isNull(), eq(alarmClock), eq(TEST_CALLING_UID), eq(TEST_CALLING_PACKAGE), isNull(),
-                eq(EXACT_ALLOW_REASON_COMPAT));
+                isNull(), eq(alarmClock), eq(TEST_CALLING_UID), eq(TEST_CALLING_PACKAGE),
+                bundleCaptor.capture(), eq(EXACT_ALLOW_REASON_COMPAT));
+
+        final BroadcastOptions idleOptions = new BroadcastOptions(bundleCaptor.getValue());
+        final int type = idleOptions.getTemporaryAppAllowlistType();
+        assertEquals(TEMPORARY_ALLOWLIST_TYPE_FOREGROUND_SERVICE_ALLOWED, type);
     }
 
     @Test
diff --git a/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java b/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java
index 09565b4..d675b0a 100644
--- a/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java
+++ b/services/tests/mockingservicestests/src/com/android/server/app/GameManagerServiceTests.java
@@ -19,6 +19,7 @@
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertThrows;
 import static org.junit.Assert.assertTrue;
@@ -49,6 +50,7 @@
 import android.hardware.power.Mode;
 import android.os.Bundle;
 import android.os.PowerManagerInternal;
+import android.os.UserManager;
 import android.os.test.TestLooper;
 import android.platform.test.annotations.Presubmit;
 import android.provider.DeviceConfig;
@@ -69,6 +71,8 @@
 import org.mockito.MockitoSession;
 import org.mockito.quality.Strictness;
 
+import java.io.File;
+import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -79,7 +83,7 @@
 @Presubmit
 public class GameManagerServiceTests {
     @Mock MockContext mMockContext;
-    private static final String TAG = "GameServiceTests";
+    private static final String TAG = "GameManagerServiceTests";
     private static final String PACKAGE_NAME_INVALID = "com.android.app";
     private static final int USER_ID_1 = 1001;
     private static final int USER_ID_2 = 1002;
@@ -91,6 +95,8 @@
     private PackageManager mMockPackageManager;
     @Mock
     private PowerManagerInternal mMockPowerManager;
+    @Mock
+    private UserManager mMockUserManager;
 
     // Stolen from ConnectivityServiceTest.MockContext
     class MockContext extends ContextWrapper {
@@ -150,6 +156,15 @@
         public PackageManager getPackageManager() {
             return mMockPackageManager;
         }
+
+        @Override
+        public Object getSystemService(String name) {
+            switch (name) {
+                case Context.USER_SERVICE:
+                    return mMockUserManager;
+            }
+            throw new UnsupportedOperationException("Couldn't find system service: " + name);
+        }
     }
 
     @Before
@@ -198,6 +213,19 @@
         mTestLooper.dispatchAll();
     }
 
+    private void switchUser(GameManagerService gameManagerService, int from, int to) {
+        UserInfo userInfoFrom = new UserInfo(from, "name", 0);
+        UserInfo userInfoTo = new UserInfo(to, "name", 0);
+        gameManagerService.onUserSwitching(/* from */ new SystemService.TargetUser(userInfoFrom),
+                /* to */ new SystemService.TargetUser(userInfoTo));
+        mTestLooper.dispatchAll();
+    }
+
+    private void mockManageUsersGranted() {
+        mMockContext.setPermission(Manifest.permission.MANAGE_USERS,
+                PackageManager.PERMISSION_GRANTED);
+    }
+
     private void mockModifyGameModeGranted() {
         mMockContext.setPermission(Manifest.permission.MANAGE_GAME_MODE,
                 PackageManager.PERMISSION_GRANTED);
@@ -819,6 +847,7 @@
         GameManagerService gameManagerService = new GameManagerService(
                 mMockContext, mTestLooper.getLooper());
         startUser(gameManagerService, USER_ID_1);
+
         gameManagerService.setGameModeConfigOverride(mPackageName, USER_ID_1,
                 GameManager.GAME_MODE_PERFORMANCE, "120", "0.3");
         gameManagerService.setGameModeConfigOverride(mPackageName, USER_ID_1,
@@ -1246,4 +1275,133 @@
     public void testSetGameStateNotLoading() {
         setGameState(false);
     }
+
+    private List<String> readGameModeInterventionList() throws Exception {
+        final File interventionFile = new File(InstrumentationRegistry.getContext().getFilesDir(),
+                "system/game_mode_intervention.list");
+        assertNotNull(interventionFile);
+        List<String> output = Files.readAllLines(interventionFile.toPath());
+        return output;
+    }
+
+    private void mockInterventionListForMultipleUsers() {
+        final String[] packageNames = new String[] {"com.android.app0",
+                "com.android.app1", "com.android.app2"};
+
+        final ApplicationInfo[] applicationInfos = new ApplicationInfo[3];
+        final PackageInfo[] pis = new PackageInfo[3];
+        for (int i = 0; i < 3; ++i) {
+            applicationInfos[i] = new ApplicationInfo();
+            applicationInfos[i].category = ApplicationInfo.CATEGORY_GAME;
+            applicationInfos[i].packageName = packageNames[i];
+
+            pis[i] = new PackageInfo();
+            pis[i].packageName = packageNames[i];
+            pis[i].applicationInfo = applicationInfos[i];
+        }
+
+        final List<PackageInfo> userOnePackages = new ArrayList<>();
+        final List<PackageInfo> userTwoPackages = new ArrayList<>();
+        userOnePackages.add(pis[1]);
+        userTwoPackages.add(pis[0]);
+        userTwoPackages.add(pis[2]);
+
+        final List<UserInfo> userInfos = new ArrayList<>(2);
+        userInfos.add(new UserInfo());
+        userInfos.add(new UserInfo());
+        userInfos.get(0).id = USER_ID_1;
+        userInfos.get(1).id = USER_ID_2;
+
+        when(mMockPackageManager.getInstalledPackagesAsUser(anyInt(), eq(USER_ID_1)))
+                .thenReturn(userOnePackages);
+        when(mMockPackageManager.getInstalledPackagesAsUser(anyInt(), eq(USER_ID_2)))
+                .thenReturn(userTwoPackages);
+        when(mMockUserManager.getUsers()).thenReturn(userInfos);
+    }
+
+    @Test
+    public void testVerifyInterventionList() throws Exception {
+        mockDeviceConfigAll();
+        mockInterventionListForMultipleUsers();
+        mockManageUsersGranted();
+        mockModifyGameModeGranted();
+        final Context context = InstrumentationRegistry.getContext();
+        GameManagerService gameManagerService =
+                new GameManagerService(mMockContext,
+                                       mTestLooper.getLooper(),
+                                       context.getFilesDir());
+        startUser(gameManagerService, USER_ID_1);
+        startUser(gameManagerService, USER_ID_2);
+
+        gameManagerService.setGameModeConfigOverride("com.android.app0", USER_ID_2,
+                GameManager.GAME_MODE_PERFORMANCE, "120", "0.6");
+        gameManagerService.setGameModeConfigOverride("com.android.app2", USER_ID_2,
+                GameManager.GAME_MODE_BATTERY, "60", "0.5");
+        mTestLooper.dispatchAll();
+
+        /* Expected fileOutput (order may vary)
+         com.android.app2 <UID>   0   2   angle=0,scaling=0.5,fps=90  3   angle=0,scaling=0.5,fps=60
+         com.android.app1 <UID>   1   2   angle=0,scaling=0.5,fps=90  3   angle=0,scaling=0.7,fps=30
+         com.android.app0 <UID>   0   2   angle=0,scaling=0.6,fps=120 3   angle=0,scaling=0.7,fps=30
+
+         The current game mode would only be set to non-zero if the current user have that game
+         installed.
+        */
+
+        List<String> fileOutput = readGameModeInterventionList();
+        assertEquals(fileOutput.size(), 3);
+
+        String[] splitLine = fileOutput.get(0).split("\\s+");
+        assertEquals(splitLine[0], "com.android.app2");
+        assertEquals(splitLine[2], "3");
+        assertEquals(splitLine[3], "2");
+        assertEquals(splitLine[4], "angle=0,scaling=0.5,fps=90");
+        assertEquals(splitLine[5], "3");
+        assertEquals(splitLine[6], "angle=0,scaling=0.5,fps=60");
+        splitLine = fileOutput.get(1).split("\\s+");
+        assertEquals(splitLine[0], "com.android.app1");
+        assertEquals(splitLine[2], "0");
+        assertEquals(splitLine[3], "2");
+        assertEquals(splitLine[4], "angle=0,scaling=0.5,fps=90");
+        assertEquals(splitLine[5], "3");
+        assertEquals(splitLine[6], "angle=0,scaling=0.7,fps=30");
+        splitLine = fileOutput.get(2).split("\\s+");
+        assertEquals(splitLine[0], "com.android.app0");
+        assertEquals(splitLine[2], "2");
+        assertEquals(splitLine[3], "2");
+        assertEquals(splitLine[4], "angle=0,scaling=0.6,fps=120");
+        assertEquals(splitLine[5], "3");
+        assertEquals(splitLine[6], "angle=0,scaling=0.7,fps=30");
+
+        switchUser(gameManagerService, USER_ID_2, USER_ID_1);
+        gameManagerService.setGameMode("com.android.app1",
+                GameManager.GAME_MODE_BATTERY, USER_ID_1);
+        mTestLooper.dispatchAll();
+
+        fileOutput = readGameModeInterventionList();
+        assertEquals(fileOutput.size(), 3);
+
+        splitLine = fileOutput.get(0).split("\\s+");
+        assertEquals(splitLine[0], "com.android.app2");
+        assertEquals(splitLine[2], "0");
+        assertEquals(splitLine[3], "2");
+        assertEquals(splitLine[4], "angle=0,scaling=0.5,fps=90");
+        assertEquals(splitLine[5], "3");
+        assertEquals(splitLine[6], "angle=0,scaling=0.5,fps=60");
+        splitLine = fileOutput.get(1).split("\\s+");
+        assertEquals(splitLine[0], "com.android.app1");
+        assertEquals(splitLine[2], "3");
+        assertEquals(splitLine[3], "2");
+        assertEquals(splitLine[4], "angle=0,scaling=0.5,fps=90");
+        assertEquals(splitLine[5], "3");
+        assertEquals(splitLine[6], "angle=0,scaling=0.7,fps=30");
+        splitLine = fileOutput.get(2).split("\\s+");
+        assertEquals(splitLine[0], "com.android.app0");
+        assertEquals(splitLine[2], "0");
+        assertEquals(splitLine[3], "2");
+        assertEquals(splitLine[4], "angle=0,scaling=0.6,fps=120");
+        assertEquals(splitLine[5], "3");
+        assertEquals(splitLine[6], "angle=0,scaling=0.7,fps=30");
+
+    }
 }
diff --git a/services/tests/mockingservicestests/src/com/android/server/app/GameServiceProviderInstanceImplTest.java b/services/tests/mockingservicestests/src/com/android/server/app/GameServiceProviderInstanceImplTest.java
index a8b340c..e4f9eaf 100644
--- a/services/tests/mockingservicestests/src/com/android/server/app/GameServiceProviderInstanceImplTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/app/GameServiceProviderInstanceImplTest.java
@@ -218,8 +218,8 @@
         }).when(mMockWindowManagerInternal).unregisterTaskSystemBarsListener(any());
 
         mRunningTaskInfos = new ArrayList<>();
-        when(mMockActivityTaskManager.getTasks(anyInt(), anyBoolean(), anyBoolean())).thenReturn(
-                mRunningTaskInfos);
+        when(mMockActivityTaskManager.getTasks(anyInt(), anyBoolean(), anyBoolean(), anyInt()))
+                .thenReturn(mRunningTaskInfos);
 
 
         final UserHandle userHandle = new UserHandle(USER_ID);
diff --git a/services/tests/mockingservicestests/src/com/android/server/job/controllers/BatteryControllerTest.java b/services/tests/mockingservicestests/src/com/android/server/job/controllers/BatteryControllerTest.java
index 52d0494..2f61908 100644
--- a/services/tests/mockingservicestests/src/com/android/server/job/controllers/BatteryControllerTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/job/controllers/BatteryControllerTest.java
@@ -312,4 +312,71 @@
         assertFalse(jobLateFg.isConstraintSatisfied(JobStatus.CONSTRAINT_CHARGING));
         assertFalse(jobLateFgLow.isConstraintSatisfied(JobStatus.CONSTRAINT_CHARGING));
     }
+
+    @Test
+    public void testControllerOnlyTracksPowerJobs() {
+        JobStatus batteryJob = createJobStatus("testControllerOnlyTracksPowerJobs",
+                SOURCE_PACKAGE, mSourceUid,
+                createBaseJobInfoBuilder(1).setRequiresBatteryNotLow(true).build());
+        JobStatus chargingJob = createJobStatus("testControllerOnlyTracksPowerJobs",
+                SOURCE_PACKAGE, mSourceUid,
+                createBaseJobInfoBuilder(2).setRequiresCharging(true).build());
+        JobStatus bothPowerJob = createJobStatus("testControllerOnlyTracksPowerJobs",
+                SOURCE_PACKAGE, mSourceUid,
+                createBaseJobInfoBuilder(3)
+                        .setRequiresCharging(true)
+                        .setRequiresBatteryNotLow(true)
+                        .build());
+        JobStatus unrelatedJob = createJobStatus("testControllerOnlyTracksPowerJobs",
+                SOURCE_PACKAGE, mSourceUid, createBaseJobInfoBuilder(4).build());
+
+        // Follow the lifecycle of tracking
+        // Start tracking
+        trackJobs(batteryJob, chargingJob, bothPowerJob, unrelatedJob);
+        final ArraySet<JobStatus> trackedJobs = mBatteryController.getTrackedJobs();
+        final ArraySet<JobStatus> topStartedJobs = mBatteryController.getTopStartedJobs();
+        assertTrue(trackedJobs.contains(batteryJob));
+        assertTrue(trackedJobs.contains(chargingJob));
+        assertTrue(trackedJobs.contains(bothPowerJob));
+        assertFalse(trackedJobs.contains(unrelatedJob));
+        assertFalse(topStartedJobs.contains(batteryJob));
+        assertFalse(topStartedJobs.contains(chargingJob));
+        assertFalse(topStartedJobs.contains(bothPowerJob));
+        assertFalse(topStartedJobs.contains(unrelatedJob));
+
+        // Procstate change shouldn't affect anything
+        setUidBias(mSourceUid, JobInfo.BIAS_TOP_APP);
+        assertTrue(trackedJobs.contains(batteryJob));
+        assertTrue(trackedJobs.contains(chargingJob));
+        assertTrue(trackedJobs.contains(bothPowerJob));
+        assertFalse(trackedJobs.contains(unrelatedJob));
+        assertFalse(topStartedJobs.contains(batteryJob));
+        assertFalse(topStartedJobs.contains(chargingJob));
+        assertFalse(topStartedJobs.contains(bothPowerJob));
+        assertFalse(topStartedJobs.contains(unrelatedJob));
+
+        // Job starts running
+        mBatteryController.prepareForExecutionLocked(batteryJob);
+        mBatteryController.prepareForExecutionLocked(chargingJob);
+        mBatteryController.prepareForExecutionLocked(bothPowerJob);
+        mBatteryController.prepareForExecutionLocked(unrelatedJob);
+        assertTrue(topStartedJobs.contains(batteryJob));
+        assertTrue(topStartedJobs.contains(chargingJob));
+        assertTrue(topStartedJobs.contains(bothPowerJob));
+        assertFalse(topStartedJobs.contains(unrelatedJob));
+
+        // Job cleanup
+        mBatteryController.maybeStopTrackingJobLocked(batteryJob, null, false);
+        mBatteryController.maybeStopTrackingJobLocked(chargingJob, null, false);
+        mBatteryController.maybeStopTrackingJobLocked(bothPowerJob, null, false);
+        mBatteryController.maybeStopTrackingJobLocked(unrelatedJob, null, false);
+        assertFalse(trackedJobs.contains(batteryJob));
+        assertFalse(trackedJobs.contains(chargingJob));
+        assertFalse(trackedJobs.contains(bothPowerJob));
+        assertFalse(trackedJobs.contains(unrelatedJob));
+        assertFalse(topStartedJobs.contains(batteryJob));
+        assertFalse(topStartedJobs.contains(chargingJob));
+        assertFalse(topStartedJobs.contains(bothPowerJob));
+        assertFalse(topStartedJobs.contains(unrelatedJob));
+    }
 }
diff --git a/services/tests/mockingservicestests/src/com/android/server/job/controllers/PrefetchControllerTest.java b/services/tests/mockingservicestests/src/com/android/server/job/controllers/PrefetchControllerTest.java
index 5f9f1b2..9c833c0 100644
--- a/services/tests/mockingservicestests/src/com/android/server/job/controllers/PrefetchControllerTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/job/controllers/PrefetchControllerTest.java
@@ -24,6 +24,7 @@
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.inOrder;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.when;
+import static com.android.server.job.JobSchedulerService.FREQUENT_INDEX;
 import static com.android.server.job.JobSchedulerService.sElapsedRealtimeClock;
 import static com.android.server.job.JobSchedulerService.sSystemClock;
 
@@ -185,12 +186,15 @@
         JobStatus js = JobStatus.createFromJobInfo(
                 jobInfo, callingUid, packageName, SOURCE_USER_ID, testTag);
         js.serviceInfo = mock(ServiceInfo.class);
+        js.setStandbyBucket(FREQUENT_INDEX);
         // Make sure Doze and background-not-restricted don't affect tests.
         js.setDeviceNotDozingConstraintSatisfied(/* nowElapsed */ sElapsedRealtimeClock.millis(),
                 /* state */ true, /* allowlisted */false);
         js.setBackgroundNotRestrictedConstraintSatisfied(
                 sElapsedRealtimeClock.millis(), true, false);
+        js.setQuotaConstraintSatisfied(sElapsedRealtimeClock.millis(), true);
         js.setTareWealthConstraintSatisfied(sElapsedRealtimeClock.millis(), true);
+        js.setExpeditedJobQuotaApproved(sElapsedRealtimeClock.millis(), true);
         js.setExpeditedJobTareApproved(sElapsedRealtimeClock.millis(), true);
         return js;
     }
@@ -294,6 +298,7 @@
         verify(mUsageStatsManagerInternal, timeout(DEFAULT_WAIT_MS))
                 .getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID);
         assertFalse(job.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
+        assertFalse(job.isReady());
     }
 
     @Test
@@ -309,6 +314,7 @@
                 .getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID);
         verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS)).onControllerStateChanged(any());
         assertTrue(job.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
+        assertTrue(job.isReady());
     }
 
     @Test
@@ -331,19 +337,25 @@
         inOrder.verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS))
                 .onControllerStateChanged(any());
         assertTrue(jobPending.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
+        assertTrue(jobPending.isReady());
         assertTrue(jobRunning.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
+        assertTrue(jobRunning.isReady());
         setUidBias(uid, JobInfo.BIAS_TOP_APP);
         // Processing happens on the handler, so wait until we're sure the change has been processed
         inOrder.verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS))
                 .onControllerStateChanged(any());
         // Already running job should continue but pending job must wait.
         assertFalse(jobPending.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
+        assertFalse(jobPending.isReady());
         assertTrue(jobRunning.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
+        assertTrue(jobRunning.isReady());
         setUidBias(uid, JobInfo.BIAS_DEFAULT);
         inOrder.verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS))
                 .onControllerStateChanged(any());
         assertTrue(jobPending.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
+        assertTrue(jobPending.isReady());
         assertTrue(jobRunning.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
+        assertTrue(jobRunning.isReady());
     }
 
     @Test
@@ -367,11 +379,13 @@
         verify(mUsageStatsManagerInternal, timeout(DEFAULT_WAIT_MS))
                 .getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID);
         assertFalse(jobNonWidget.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
+        assertFalse(jobNonWidget.isReady());
 
         when(appWidgetManager.isBoundWidgetPackage(SOURCE_PACKAGE, SOURCE_USER_ID))
                 .thenReturn(true);
         trackJobs(jobWidget);
         assertTrue(jobWidget.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
+        assertTrue(jobWidget.isReady());
     }
 
     @Test
@@ -390,6 +404,7 @@
                 .getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID);
         verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS)).onControllerStateChanged(any());
         assertTrue(jobStatus.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
+        assertTrue(jobStatus.isReady());
 
         mEstimatedLaunchTimeChangedListener.onEstimatedLaunchTimeChanged(SOURCE_USER_ID,
                 SOURCE_PACKAGE, sSystemClock.millis() + 10 * HOUR_IN_MILLIS);
@@ -401,6 +416,7 @@
                         anyInt(), eq(sElapsedRealtimeClock.millis() + 3 * HOUR_IN_MILLIS),
                         anyLong(), eq(TAG_PREFETCH), any(), any());
         assertFalse(jobStatus.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
+        assertFalse(jobStatus.isReady());
     }
 
     @Test
@@ -418,6 +434,7 @@
         inOrder.verify(mUsageStatsManagerInternal, timeout(DEFAULT_WAIT_MS))
                 .getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID);
         assertFalse(jobStatus.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
+        assertFalse(jobStatus.isReady());
 
         mEstimatedLaunchTimeChangedListener.onEstimatedLaunchTimeChanged(SOURCE_USER_ID,
                 SOURCE_PACKAGE, sSystemClock.millis() + MINUTE_IN_MILLIS);
@@ -426,6 +443,7 @@
                 .getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID);
         verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS)).onControllerStateChanged(any());
         assertTrue(jobStatus.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
+        assertTrue(jobStatus.isReady());
     }
 
     @Test
@@ -448,6 +466,7 @@
                         anyInt(), eq(sElapsedRealtimeClock.millis() + 3 * HOUR_IN_MILLIS),
                         anyLong(), eq(TAG_PREFETCH), any(), any());
         assertFalse(jobStatus.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
+        assertFalse(jobStatus.isReady());
 
         mEstimatedLaunchTimeChangedListener.onEstimatedLaunchTimeChanged(SOURCE_USER_ID,
                 SOURCE_PACKAGE, sSystemClock.millis() + HOUR_IN_MILLIS);
@@ -456,6 +475,7 @@
                 .getEstimatedPackageLaunchTime(SOURCE_PACKAGE, SOURCE_USER_ID);
         verify(mJobSchedulerService, timeout(DEFAULT_WAIT_MS)).onControllerStateChanged(any());
         assertTrue(jobStatus.isConstraintSatisfied(JobStatus.CONSTRAINT_PREFETCH));
+        assertTrue(jobStatus.isReady());
 
         sSystemClock = getShiftedClock(sSystemClock, HOUR_IN_MILLIS + MINUTE_IN_MILLIS);
     }
diff --git a/services/tests/servicestests/AndroidManifest.xml b/services/tests/servicestests/AndroidManifest.xml
index 0afb182..0483a60 100644
--- a/services/tests/servicestests/AndroidManifest.xml
+++ b/services/tests/servicestests/AndroidManifest.xml
@@ -103,6 +103,7 @@
     <uses-permission android:name="android.permission.MODIFY_AUDIO_ROUTING" />
     <uses-permission android:name="android.permission.PACKAGE_VERIFICATION_AGENT" />
     <uses-permission android:name="android.permission.OBSERVE_ROLE_HOLDERS" />
+    <uses-permission android:name="android.permission.BATTERY_STATS" />
 
     <queries>
         <package android:name="com.android.servicestests.apps.suspendtestapp" />
diff --git a/services/tests/servicestests/AndroidTest.xml b/services/tests/servicestests/AndroidTest.xml
index 158bd39..7092092 100644
--- a/services/tests/servicestests/AndroidTest.xml
+++ b/services/tests/servicestests/AndroidTest.xml
@@ -50,5 +50,6 @@
         <option name="package" value="com.android.frameworks.servicestests" />
         <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" />
         <option name="hidden-api-checks" value="false"/>
+        <option name="exclude-annotation" value="androidx.test.filters.FlakyTest" />
     </test>
 </configuration>
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 1d6ed03..c15f6a9 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/SystemActionPerformerTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/SystemActionPerformerTest.java
@@ -17,6 +17,7 @@
 package com.android.server.accessibility;
 
 import static android.view.WindowManager.ScreenshotSource.SCREENSHOT_ACCESSIBILITY_ACTIONS;
+import static android.view.WindowManager.TAKE_SCREENSHOT_FULLSCREEN;
 
 import static org.hamcrest.Matchers.hasItem;
 import static org.hamcrest.Matchers.is;
@@ -27,7 +28,6 @@
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.never;
@@ -301,8 +301,9 @@
         mSystemActionPerformer.performSystemAction(
                 AccessibilityService.GLOBAL_ACTION_TAKE_SCREENSHOT);
         verify(mMockScreenshotHelper).takeScreenshot(
-                eq(android.view.WindowManager.TAKE_SCREENSHOT_FULLSCREEN), anyBoolean(),
-                anyBoolean(), eq(SCREENSHOT_ACCESSIBILITY_ACTIONS), any(Handler.class), any());
+                eq(TAKE_SCREENSHOT_FULLSCREEN),
+                eq(SCREENSHOT_ACCESSIBILITY_ACTIONS),
+                any(Handler.class), any());
     }
 
     // PendingIntent is a final class and cannot be mocked. So we are using this
diff --git a/services/tests/servicestests/src/com/android/server/audio/AudioDeviceVolumeManagerTest.java b/services/tests/servicestests/src/com/android/server/audio/AudioDeviceVolumeManagerTest.java
new file mode 100644
index 0000000..7acb6d6
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/audio/AudioDeviceVolumeManagerTest.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.audio;
+
+import static org.mockito.Mockito.atLeast;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+import android.content.Context;
+import android.media.AudioDeviceAttributes;
+import android.media.AudioDeviceInfo;
+import android.media.AudioManager;
+import android.media.AudioSystem;
+import android.media.VolumeInfo;
+import android.os.test.TestLooper;
+
+import androidx.test.InstrumentationRegistry;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class AudioDeviceVolumeManagerTest {
+    private static final String TAG = "AudioDeviceVolumeManagerTest";
+
+    private static final AudioDeviceAttributes DEVICE_SPEAKER_OUT = new AudioDeviceAttributes(
+            AudioDeviceAttributes.ROLE_OUTPUT, AudioDeviceInfo.TYPE_BUILTIN_SPEAKER, "");
+
+    private Context mContext;
+    private String mPackageName;
+    private AudioSystemAdapter mSpyAudioSystem;
+    private SystemServerAdapter mSystemServer;
+    private SettingsAdapter mSettingsAdapter;
+    private TestLooper mTestLooper;
+
+    private AudioService mAudioService;
+
+
+    @Before
+    public void setUp() throws Exception {
+        mTestLooper = new TestLooper();
+        mContext = InstrumentationRegistry.getTargetContext();
+        mPackageName = mContext.getOpPackageName();
+        mSpyAudioSystem = spy(new NoOpAudioSystemAdapter());
+
+        mSystemServer = new NoOpSystemServerAdapter();
+        mSettingsAdapter = new NoOpSettingsAdapter();
+        mAudioService = new AudioService(mContext, mSpyAudioSystem, mSystemServer,
+                mSettingsAdapter, mTestLooper.getLooper()) {
+            @Override
+            public int getDeviceForStream(int stream) {
+                return AudioSystem.DEVICE_OUT_SPEAKER;
+            }
+        };
+
+        mTestLooper.dispatchAll();
+    }
+
+    @Test
+    public void testSetDeviceVolume() {
+        AudioManager am = mContext.getSystemService(AudioManager.class);
+        final int minIndex = am.getStreamMinVolume(AudioManager.STREAM_MUSIC);
+        final int maxIndex = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
+        final int midIndex = (minIndex + maxIndex) / 2;
+        final VolumeInfo volMedia = new VolumeInfo.Builder(AudioManager.STREAM_MUSIC)
+                .setMinVolumeIndex(minIndex)
+                .setMaxVolumeIndex(maxIndex)
+                .build();
+        final VolumeInfo volMin = new VolumeInfo.Builder(volMedia).setVolumeIndex(minIndex).build();
+        final VolumeInfo volMid = new VolumeInfo.Builder(volMedia).setVolumeIndex(midIndex).build();
+        final AudioDeviceAttributes usbDevice = new AudioDeviceAttributes(
+                /*native type*/ AudioSystem.DEVICE_OUT_USB_DEVICE, /*address*/ "bla");
+
+        mAudioService.setDeviceVolume(volMin, usbDevice, mPackageName, TAG);
+        mTestLooper.dispatchAll();
+        verify(mSpyAudioSystem, atLeast(1)).setStreamVolumeIndexAS(
+                        AudioManager.STREAM_MUSIC, minIndex, AudioSystem.DEVICE_OUT_USB_DEVICE);
+
+        mAudioService.setDeviceVolume(volMid, usbDevice, mPackageName, TAG);
+        mTestLooper.dispatchAll();
+        verify(mSpyAudioSystem, atLeast(1)).setStreamVolumeIndexAS(
+                AudioManager.STREAM_MUSIC, midIndex, AudioSystem.DEVICE_OUT_USB_DEVICE);
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/audio/AudioServiceTest.java b/services/tests/servicestests/src/com/android/server/audio/AudioServiceTest.java
index 91c45b4..adcbe6b 100644
--- a/services/tests/servicestests/src/com/android/server/audio/AudioServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/audio/AudioServiceTest.java
@@ -15,12 +15,18 @@
  */
 package com.android.server.audio;
 
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.mock;
 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.AppOpsManager;
 import android.content.Context;
+import android.media.AudioSystem;
 import android.os.Looper;
 import android.os.UserHandle;
 import android.util.Log;
@@ -33,6 +39,7 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Mock;
 import org.mockito.Spy;
 
 @MediumTest
@@ -46,6 +53,7 @@
     private AudioSystemAdapter mAudioSystem;
     @Spy private SystemServerAdapter mSpySystemServer;
     private SettingsAdapter mSettingsAdapter;
+    @Mock private AppOpsManager mMockAppOpsManager;
     // the class being unit-tested here
     private AudioService mAudioService;
 
@@ -61,8 +69,11 @@
         mAudioSystem = new NoOpAudioSystemAdapter();
         mSpySystemServer = spy(new NoOpSystemServerAdapter());
         mSettingsAdapter = new NoOpSettingsAdapter();
+        mMockAppOpsManager = mock(AppOpsManager.class);
+        when(mMockAppOpsManager.noteOp(anyInt(), anyInt(), anyString(), anyString(), anyString()))
+                .thenReturn(AppOpsManager.MODE_ALLOWED);
         mAudioService = new AudioService(mContext, mAudioSystem, mSpySystemServer,
-                mSettingsAdapter, null);
+                mSettingsAdapter, null, mMockAppOpsManager);
     }
 
     /**
@@ -113,4 +124,33 @@
             reset(mSpySystemServer);
         }
     }
+
+    @Test
+    public void testRingNotifAlias() throws Exception {
+        Log.i(TAG, "running testRingNotifAlias");
+        Assert.assertNotNull(mAudioService);
+        // TODO add initialization message that can be caught here instead of sleeping
+        Thread.sleep(MAX_MESSAGE_HANDLING_DELAY_MS); // wait for full AudioService initialization
+
+        // test with aliasing RING and NOTIFICATION
+        mAudioService.setNotifAliasRingForTest(true);
+        final int ringMaxVol = mAudioService.getStreamMaxVolume(AudioSystem.STREAM_RING);
+        final int ringMinVol = mAudioService.getStreamMinVolume(AudioSystem.STREAM_RING);
+        final int ringVol = ringMinVol + 1;
+        // set a value for NOTIFICATION so it's not at the target test value (ringMaxVol)
+        mAudioService.setStreamVolume(AudioSystem.STREAM_NOTIFICATION,
+                ringVol, 0, "bla");
+        mAudioService.setStreamVolume(AudioSystem.STREAM_RING, ringMaxVol, 0, "bla");
+        Thread.sleep(MAX_MESSAGE_HANDLING_DELAY_MS);
+        Assert.assertEquals(ringMaxVol,
+                mAudioService.getStreamVolume(AudioSystem.STREAM_NOTIFICATION));
+
+        // test with no aliasing between RING and NOTIFICATION
+        mAudioService.setNotifAliasRingForTest(false);
+        mAudioService.setStreamVolume(AudioSystem.STREAM_RING, ringVol, 0, "bla");
+        mAudioService.setStreamVolume(AudioSystem.STREAM_NOTIFICATION, ringMaxVol, 0, "bla");
+        Assert.assertEquals(ringVol, mAudioService.getStreamVolume(AudioSystem.STREAM_RING));
+        Assert.assertEquals(ringMaxVol, mAudioService.getStreamVolume(
+                AudioSystem.STREAM_NOTIFICATION));
+    }
 }
diff --git a/services/tests/servicestests/src/com/android/server/audio/NoOpAudioSystemAdapter.java b/services/tests/servicestests/src/com/android/server/audio/NoOpAudioSystemAdapter.java
index 09e5d4b..ee9d59b 100644
--- a/services/tests/servicestests/src/com/android/server/audio/NoOpAudioSystemAdapter.java
+++ b/services/tests/servicestests/src/com/android/server/audio/NoOpAudioSystemAdapter.java
@@ -126,6 +126,11 @@
     }
 
     @Override
+    public int setStreamVolumeIndexAS(int stream, int index, int device) {
+        return AudioSystem.AUDIO_STATUS_OK;
+    }
+
+    @Override
     @NonNull
     public ArrayList<AudioDeviceAttributes> getDevicesForAttributes(
             @NonNull AudioAttributes attributes, boolean forVolume) {
diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java
index 1a49f8a..ea1e49d 100644
--- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java
+++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java
@@ -43,8 +43,10 @@
 import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
 import android.hardware.fingerprint.ISidefpsController;
 import android.hardware.fingerprint.IUdfpsOverlayController;
+import android.os.Handler;
 import android.os.IBinder;
 import android.os.RemoteException;
+import android.os.test.TestLooper;
 import android.platform.test.annotations.Presubmit;
 import android.testing.TestableContext;
 
@@ -128,6 +130,8 @@
     @Captor
     private ArgumentCaptor<Consumer<OperationContext>> mContextInjector;
 
+    private TestLooper mLooper = new TestLooper();
+
     @Rule
     public final MockitoRule mockito = MockitoJUnit.rule();
 
@@ -233,6 +237,9 @@
         client.start(mCallback);
         client.onAuthenticated(new Fingerprint("name", 2 /* enrollmentId */, SENSOR_ID),
                 true /* authenticated */, new ArrayList<>());
+
+        mLooper.moveTimeForward(10);
+        mLooper.dispatchAll();
         verify(mLuxProbe).destroy();
 
         client.onAcquired(2, 0);
@@ -309,9 +316,58 @@
         client.onAuthenticated(new Fingerprint("friendly", 1 /* fingerId */, 2 /* deviceId */),
                 true /* authenticated */, new ArrayList<>());
 
+        mLooper.moveTimeForward(10);
+        mLooper.dispatchAll();
         verify(mCancellationSignal).cancel();
     }
 
+    @Test
+    public void fingerprintPowerIgnoresAuthInWindow() throws Exception {
+        when(mSensorProps.isAnySidefpsType()).thenReturn(true);
+
+        final FingerprintAuthenticationClient client = createClient(1);
+        client.start(mCallback);
+        client.onPowerPressed();
+        client.onAuthenticated(new Fingerprint("friendly", 1 /* fingerId */, 2 /* deviceId */),
+                true /* authenticated */, new ArrayList<>());
+        mLooper.moveTimeForward(1000);
+        mLooper.dispatchAll();
+
+        verify(mCallback).onClientFinished(any(), eq(false));
+    }
+
+    @Test
+    public void fingerprintAuthIgnoredWaitingForPower() throws Exception {
+        when(mSensorProps.isAnySidefpsType()).thenReturn(true);
+
+        final FingerprintAuthenticationClient client = createClient(1);
+        client.start(mCallback);
+        client.onAuthenticated(new Fingerprint("friendly", 3 /* fingerId */, 4 /* deviceId */),
+                true /* authenticated */, new ArrayList<>());
+        client.onPowerPressed();
+        mLooper.moveTimeForward(1000);
+        mLooper.dispatchAll();
+
+        verify(mCallback).onClientFinished(any(), eq(false));
+    }
+
+    @Test
+    public void fingerprintAuthSucceedsAfterPowerWindow() throws Exception {
+        when(mSensorProps.isAnySidefpsType()).thenReturn(true);
+
+        final FingerprintAuthenticationClient client = createClient(1);
+        client.start(mCallback);
+        client.onPowerPressed();
+        mLooper.moveTimeForward(1000);
+        mLooper.dispatchAll();
+        client.onAuthenticated(new Fingerprint("friendly", 4 /* fingerId */, 5 /* deviceId */),
+                true /* authenticated */, new ArrayList<>());
+        mLooper.moveTimeForward(1000);
+        mLooper.dispatchAll();
+
+        verify(mCallback).onClientFinished(any(), eq(true));
+    }
+
     private FingerprintAuthenticationClient createClient() throws RemoteException {
         return createClient(100 /* version */, true /* allowBackgroundAuthentication */);
     }
@@ -336,7 +392,8 @@
         9 /* sensorId */, mBiometricLogger, mBiometricContext,
         true /* isStrongBiometric */,
         null /* taskStackListener */, mLockoutCache,
-        mUdfpsOverlayController, mSideFpsController, allowBackgroundAuthentication, mSensorProps) {
+        mUdfpsOverlayController, mSideFpsController, allowBackgroundAuthentication, mSensorProps,
+                new Handler(mLooper.getLooper())) {
             @Override
             protected ActivityTaskManager getActivityTaskManager() {
                 return mActivityTaskManager;
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 f242fda..c80547c 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
@@ -213,7 +213,7 @@
                 mContext.getSystemService(WindowManager.class), threadVerifier);
 
         mAssociationInfo = new AssociationInfo(1, 0, null,
-                MacAddress.BROADCAST_ADDRESS, "", null, true, false, 0, 0);
+                MacAddress.BROADCAST_ADDRESS, "", null, true, false, false, 0, 0);
 
         VirtualDeviceParams params = new VirtualDeviceParams
                 .Builder()
diff --git a/services/tests/servicestests/src/com/android/server/devicestate/DeviceStateManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/devicestate/DeviceStateManagerServiceTest.java
index fe3034d..038cbc0 100644
--- a/services/tests/servicestests/src/com/android/server/devicestate/DeviceStateManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/devicestate/DeviceStateManagerServiceTest.java
@@ -76,12 +76,15 @@
     private TestDeviceStatePolicy mPolicy;
     private TestDeviceStateProvider mProvider;
     private DeviceStateManagerService mService;
+    private TestSystemPropertySetter mSysPropSetter;
 
     @Before
     public void setup() {
         mProvider = new TestDeviceStateProvider();
         mPolicy = new TestDeviceStatePolicy(mProvider);
-        mService = new DeviceStateManagerService(InstrumentationRegistry.getContext(), mPolicy);
+        mSysPropSetter = new TestSystemPropertySetter();
+        mService = new DeviceStateManagerService(InstrumentationRegistry.getContext(), mPolicy,
+                mSysPropSetter);
 
         // Necessary to allow us to check for top app process id in tests
         mService.mActivityTaskManagerInternal = mock(ActivityTaskManagerInternal.class);
@@ -107,6 +110,8 @@
     public void baseStateChanged() {
         assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE));
         assertEquals(mService.getPendingState(), Optional.empty());
+        assertEquals(mSysPropSetter.getValue(),
+                DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName());
         assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE));
         assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(),
                 DEFAULT_DEVICE_STATE.getIdentifier());
@@ -115,6 +120,8 @@
         flushHandler();
         assertEquals(mService.getCommittedState(), Optional.of(OTHER_DEVICE_STATE));
         assertEquals(mService.getPendingState(), Optional.empty());
+        assertEquals(mSysPropSetter.getValue(),
+                OTHER_DEVICE_STATE.getIdentifier() + ":" + OTHER_DEVICE_STATE.getName());
         assertEquals(mService.getBaseState(), Optional.of(OTHER_DEVICE_STATE));
         assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(),
                 OTHER_DEVICE_STATE.getIdentifier());
@@ -128,6 +135,8 @@
         flushHandler();
         assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE));
         assertEquals(mService.getPendingState(), Optional.of(OTHER_DEVICE_STATE));
+        assertEquals(mSysPropSetter.getValue(),
+                DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName());
         assertEquals(mService.getBaseState(), Optional.of(OTHER_DEVICE_STATE));
         assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(),
                 OTHER_DEVICE_STATE.getIdentifier());
@@ -136,6 +145,8 @@
         flushHandler();
         assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE));
         assertEquals(mService.getPendingState(), Optional.of(OTHER_DEVICE_STATE));
+        assertEquals(mSysPropSetter.getValue(),
+                DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName());
         assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE));
         assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(),
                 OTHER_DEVICE_STATE.getIdentifier());
@@ -157,6 +168,8 @@
 
         assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE));
         assertEquals(mService.getPendingState(), Optional.empty());
+        assertEquals(mSysPropSetter.getValue(),
+                DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName());
         assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE));
         assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(),
                 DEFAULT_DEVICE_STATE.getIdentifier());
@@ -170,6 +183,8 @@
 
         assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE));
         assertEquals(mService.getPendingState(), Optional.empty());
+        assertEquals(mSysPropSetter.getValue(),
+                DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName());
         assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE));
         assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(),
                 DEFAULT_DEVICE_STATE.getIdentifier());
@@ -182,6 +197,8 @@
 
         assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE));
         assertEquals(mService.getPendingState(), Optional.empty());
+        assertEquals(mSysPropSetter.getValue(),
+                DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName());
         assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE));
         assertThat(mService.getSupportedStates()).asList().containsExactly(DEFAULT_DEVICE_STATE,
                 OTHER_DEVICE_STATE);
@@ -193,6 +210,8 @@
         // supported.
         assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE));
         assertEquals(mService.getPendingState(), Optional.empty());
+        assertEquals(mSysPropSetter.getValue(),
+                DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName());
         assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE));
         assertThat(mService.getSupportedStates()).asList().containsExactly(DEFAULT_DEVICE_STATE);
 
@@ -211,6 +230,8 @@
 
         assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE));
         assertEquals(mService.getPendingState(), Optional.empty());
+        assertEquals(mSysPropSetter.getValue(),
+                DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName());
         assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE));
         assertThat(mService.getSupportedStates()).asList().containsExactly(DEFAULT_DEVICE_STATE,
                 OTHER_DEVICE_STATE);
@@ -223,6 +244,8 @@
         // supported.
         assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE));
         assertEquals(mService.getPendingState(), Optional.empty());
+        assertEquals(mSysPropSetter.getValue(),
+                DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName());
         assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE));
         assertThat(mService.getSupportedStates()).asList().containsExactly(DEFAULT_DEVICE_STATE,
                 OTHER_DEVICE_STATE);
@@ -315,6 +338,8 @@
                 TestDeviceStateManagerCallback.STATUS_ACTIVE);
         // Committed state changes as there is a requested override.
         assertEquals(mService.getCommittedState(), Optional.of(OTHER_DEVICE_STATE));
+        assertEquals(mSysPropSetter.getValue(),
+                OTHER_DEVICE_STATE.getIdentifier() + ":" + OTHER_DEVICE_STATE.getName());
         assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE));
         assertEquals(mService.getOverrideState().get(), OTHER_DEVICE_STATE);
         assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(),
@@ -333,6 +358,8 @@
                 TestDeviceStateManagerCallback.STATUS_CANCELED);
         // Committed state is set back to the requested state once the override is cleared.
         assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE));
+        assertEquals(mSysPropSetter.getValue(),
+                DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName());
         assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE));
         assertFalse(mService.getOverrideState().isPresent());
         assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(),
@@ -385,9 +412,10 @@
         // callback.
         assertEquals(callback.getLastNotifiedStatus(secondRequestToken),
                 TestDeviceStateManagerCallback.STATUS_UNKNOWN);
-
         assertEquals(mService.getCommittedState(), Optional.of(OTHER_DEVICE_STATE));
         assertEquals(mService.getPendingState(), Optional.of(DEFAULT_DEVICE_STATE));
+        assertEquals(mSysPropSetter.getValue(),
+                OTHER_DEVICE_STATE.getIdentifier() + ":" + OTHER_DEVICE_STATE.getName());
         assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE));
         assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(),
                 DEFAULT_DEVICE_STATE.getIdentifier());
@@ -397,6 +425,8 @@
 
         assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE));
         assertEquals(mService.getPendingState(), Optional.empty());
+        assertEquals(mSysPropSetter.getValue(),
+                DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName());
         assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE));
         assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(),
                 DEFAULT_DEVICE_STATE.getIdentifier());
@@ -412,6 +442,8 @@
 
         assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE));
         assertEquals(mService.getPendingState(), Optional.empty());
+        assertEquals(mSysPropSetter.getValue(),
+                DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName());
         assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE));
         assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(),
                 DEFAULT_DEVICE_STATE.getIdentifier());
@@ -458,6 +490,8 @@
         // Committed state changes as there is a requested override.
         assertEquals(mService.getCommittedState(), Optional.of(OTHER_DEVICE_STATE));
         assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE));
+        assertEquals(mSysPropSetter.getValue(),
+                OTHER_DEVICE_STATE.getIdentifier() + ":" + OTHER_DEVICE_STATE.getName());
         assertEquals(mService.getOverrideState().get(), OTHER_DEVICE_STATE);
         assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(),
                 OTHER_DEVICE_STATE.getIdentifier());
@@ -471,6 +505,8 @@
         // Committed state is set back to the requested state once the override is cleared.
         assertEquals(mService.getCommittedState(), Optional.of(OTHER_DEVICE_STATE));
         assertEquals(mService.getBaseState(), Optional.of(OTHER_DEVICE_STATE));
+        assertEquals(mSysPropSetter.getValue(),
+                OTHER_DEVICE_STATE.getIdentifier() + ":" + OTHER_DEVICE_STATE.getName());
         assertFalse(mService.getOverrideState().isPresent());
         assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(),
                 OTHER_DEVICE_STATE.getIdentifier());
@@ -495,6 +531,8 @@
                 TestDeviceStateManagerCallback.STATUS_ACTIVE);
         // Committed state changes as there is a requested override.
         assertEquals(mService.getCommittedState(), Optional.of(OTHER_DEVICE_STATE));
+        assertEquals(mSysPropSetter.getValue(),
+                OTHER_DEVICE_STATE.getIdentifier() + ":" + OTHER_DEVICE_STATE.getName());
         assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE));
         assertEquals(mService.getOverrideState().get(), OTHER_DEVICE_STATE);
         assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(),
@@ -509,6 +547,8 @@
         // Committed state is set back to the requested state as the override state is no longer
         // supported.
         assertEquals(mService.getCommittedState(), Optional.of(DEFAULT_DEVICE_STATE));
+        assertEquals(mSysPropSetter.getValue(),
+                DEFAULT_DEVICE_STATE.getIdentifier() + ":" + DEFAULT_DEVICE_STATE.getName());
         assertEquals(mService.getBaseState(), Optional.of(DEFAULT_DEVICE_STATE));
         assertFalse(mService.getOverrideState().isPresent());
         assertEquals(mPolicy.getMostRecentRequestedStateToConfigure(),
@@ -673,4 +713,18 @@
             return mLastNotifiedStatus.getOrDefault(requestToken, STATUS_UNKNOWN);
         }
     }
+
+    private static final class TestSystemPropertySetter implements
+            DeviceStateManagerService.SystemPropertySetter {
+        private String mValue;
+
+        @Override
+        public void setDebugTracingDeviceStateProperty(String value) {
+            mValue = value;
+        }
+
+        public String getValue() {
+            return mValue;
+        }
+    }
 }
diff --git a/services/tests/servicestests/src/com/android/server/display/BrightnessThrottlerTest.java b/services/tests/servicestests/src/com/android/server/display/BrightnessThrottlerTest.java
index 0ed90d2..6a6cd6c 100644
--- a/services/tests/servicestests/src/com/android/server/display/BrightnessThrottlerTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/BrightnessThrottlerTest.java
@@ -16,13 +16,11 @@
 
 package com.android.server.display;
 
-import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.eq;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
@@ -34,17 +32,18 @@
 import android.os.IThermalService;
 import android.os.Message;
 import android.os.PowerManager;
-import android.os.Temperature.ThrottlingStatus;
 import android.os.Temperature;
+import android.os.Temperature.ThrottlingStatus;
 import android.os.test.TestLooper;
 import android.platform.test.annotations.Presubmit;
 
 import androidx.test.filters.SmallTest;
 import androidx.test.runner.AndroidJUnit4;
 
+import com.android.internal.os.BackgroundThread;
 import com.android.server.display.BrightnessThrottler.Injector;
-import com.android.server.display.DisplayDeviceConfig.BrightnessThrottlingData.ThrottlingLevel;
 import com.android.server.display.DisplayDeviceConfig.BrightnessThrottlingData;
+import com.android.server.display.DisplayDeviceConfig.BrightnessThrottlingData.ThrottlingLevel;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -55,7 +54,6 @@
 import org.mockito.MockitoAnnotations;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 @SmallTest
@@ -70,6 +68,8 @@
     @Mock IThermalService mThermalServiceMock;
     @Mock Injector mInjectorMock;
 
+    DisplayModeDirectorTest.FakeDeviceConfig mDeviceConfigFake;
+
     @Captor ArgumentCaptor<IThermalEventListener> mThermalEventListenerCaptor;
 
     @Before
@@ -83,6 +83,8 @@
                 return true;
             }
         });
+        mDeviceConfigFake = new DisplayModeDirectorTest.FakeDeviceConfig();
+        when(mInjectorMock.getDeviceConfig()).thenReturn(mDeviceConfigFake);
 
     }
 
@@ -292,6 +294,170 @@
         assertEquals(BrightnessInfo.BRIGHTNESS_MAX_REASON_NONE, throttler.getBrightnessMaxReason());
     }
 
+    @Test public void testUpdateThrottlingData() throws Exception {
+        // Initialise brightness throttling levels
+        // Ensure that they are overridden by setting the data through device config.
+        final ThrottlingLevel level = new ThrottlingLevel(PowerManager.THERMAL_STATUS_CRITICAL,
+                0.25f);
+        List<ThrottlingLevel> levels = new ArrayList<>();
+        levels.add(level);
+        final BrightnessThrottlingData data = BrightnessThrottlingData.create(levels);
+        mDeviceConfigFake.setBrightnessThrottlingData("123,1,critical,0.4");
+        final BrightnessThrottler throttler = createThrottlerSupported(data);
+
+        verify(mThermalServiceMock).registerThermalEventListenerWithType(
+                mThermalEventListenerCaptor.capture(), eq(Temperature.TYPE_SKIN));
+        final IThermalEventListener listener = mThermalEventListenerCaptor.getValue();
+
+        // Set status too low to trigger throttling
+        listener.notifyThrottling(getSkinTemp(level.thermalStatus - 1));
+        mTestLooper.dispatchAll();
+        assertEquals(PowerManager.BRIGHTNESS_MAX, throttler.getBrightnessCap(), 0f);
+        assertFalse(throttler.isThrottled());
+
+        // Set status high enough to trigger throttling
+        listener.notifyThrottling(getSkinTemp(level.thermalStatus));
+        mTestLooper.dispatchAll();
+        assertEquals(0.4f, throttler.getBrightnessCap(), 0f);
+        assertTrue(throttler.isThrottled());
+
+        // Update thresholds
+        // This data is equivalent to the string "123,1,critical,0.8", passed below
+        final ThrottlingLevel newLevel = new ThrottlingLevel(PowerManager.THERMAL_STATUS_CRITICAL,
+                0.8f);
+        // Set new (valid) data from device config
+        mDeviceConfigFake.setBrightnessThrottlingData("123,1,critical,0.8");
+
+        // Set status too low to trigger throttling
+        listener.notifyThrottling(getSkinTemp(newLevel.thermalStatus - 1));
+        mTestLooper.dispatchAll();
+        assertEquals(PowerManager.BRIGHTNESS_MAX, throttler.getBrightnessCap(), 0f);
+        assertFalse(throttler.isThrottled());
+
+        // Set status high enough to trigger throttling
+        listener.notifyThrottling(getSkinTemp(newLevel.thermalStatus));
+        mTestLooper.dispatchAll();
+        assertEquals(newLevel.brightness, throttler.getBrightnessCap(), 0f);
+        assertTrue(throttler.isThrottled());
+    }
+
+    @Test public void testInvalidThrottlingStrings() throws Exception {
+        // Initialise brightness throttling levels
+        // Ensure that they are not overridden by invalid data through device config.
+        final ThrottlingLevel level = new ThrottlingLevel(PowerManager.THERMAL_STATUS_CRITICAL,
+                0.25f);
+        List<ThrottlingLevel> levels = new ArrayList<>();
+        levels.add(level);
+        final BrightnessThrottlingData data = BrightnessThrottlingData.create(levels);
+        final BrightnessThrottler throttler = createThrottlerSupported(data);
+        verify(mThermalServiceMock).registerThermalEventListenerWithType(
+                mThermalEventListenerCaptor.capture(), eq(Temperature.TYPE_SKIN));
+        final IThermalEventListener listener = mThermalEventListenerCaptor.getValue();
+
+        // None of these are valid so shouldn't override the original data
+        mDeviceConfigFake.setBrightnessThrottlingData("321,1,critical,0.4");  // Not the current id
+        testThrottling(throttler, listener, PowerManager.BRIGHTNESS_MAX, 0.25f);
+        mDeviceConfigFake.setBrightnessThrottlingData("123,0,critical,0.4");  // Incorrect number
+        testThrottling(throttler, listener, PowerManager.BRIGHTNESS_MAX, 0.25f);
+        mDeviceConfigFake.setBrightnessThrottlingData("123,2,critical,0.4");  // Incorrect number
+        testThrottling(throttler, listener, PowerManager.BRIGHTNESS_MAX, 0.25f);
+        mDeviceConfigFake.setBrightnessThrottlingData("123,1,invalid,0.4");   // Invalid level
+        testThrottling(throttler, listener, PowerManager.BRIGHTNESS_MAX, 0.25f);
+        mDeviceConfigFake.setBrightnessThrottlingData("123,1,critical,none"); // Invalid brightness
+        testThrottling(throttler, listener, PowerManager.BRIGHTNESS_MAX, 0.25f);
+        mDeviceConfigFake.setBrightnessThrottlingData("123,1,critical,-3");   // Invalid brightness
+        testThrottling(throttler, listener, PowerManager.BRIGHTNESS_MAX, 0.25f);
+        mDeviceConfigFake.setBrightnessThrottlingData("invalid string");      // Invalid format
+        testThrottling(throttler, listener, PowerManager.BRIGHTNESS_MAX, 0.25f);
+        mDeviceConfigFake.setBrightnessThrottlingData("");                    // Invalid format
+        testThrottling(throttler, listener, PowerManager.BRIGHTNESS_MAX, 0.25f);
+    }
+
+    private void testThrottling(BrightnessThrottler throttler, IThermalEventListener listener,
+            float tooLowCap, float tooHighCap) throws Exception {
+        final ThrottlingLevel level = new ThrottlingLevel(PowerManager.THERMAL_STATUS_CRITICAL,
+                tooHighCap);
+
+        // Set status too low to trigger throttling
+        listener.notifyThrottling(getSkinTemp(level.thermalStatus - 1));
+        mTestLooper.dispatchAll();
+        assertEquals(tooLowCap, throttler.getBrightnessCap(), 0f);
+        assertFalse(throttler.isThrottled());
+
+        // Set status high enough to trigger throttling
+        listener.notifyThrottling(getSkinTemp(level.thermalStatus));
+        mTestLooper.dispatchAll();
+        assertEquals(tooHighCap, throttler.getBrightnessCap(), 0f);
+        assertTrue(throttler.isThrottled());
+    }
+
+    @Test public void testMultipleConfigPoints() throws Exception {
+        // Initialise brightness throttling levels
+        final ThrottlingLevel level = new ThrottlingLevel(PowerManager.THERMAL_STATUS_CRITICAL,
+                0.25f);
+        List<ThrottlingLevel> levels = new ArrayList<>();
+        levels.add(level);
+        final BrightnessThrottlingData data = BrightnessThrottlingData.create(levels);
+
+        // These are identical to the string set below
+        final ThrottlingLevel levelSevere = new ThrottlingLevel(PowerManager.THERMAL_STATUS_SEVERE,
+                0.9f);
+        final ThrottlingLevel levelCritical = new ThrottlingLevel(
+                PowerManager.THERMAL_STATUS_CRITICAL, 0.5f);
+        final ThrottlingLevel levelEmergency = new ThrottlingLevel(
+                PowerManager.THERMAL_STATUS_EMERGENCY, 0.1f);
+
+        mDeviceConfigFake.setBrightnessThrottlingData(
+                "123,3,severe,0.9,critical,0.5,emergency,0.1");
+        final BrightnessThrottler throttler = createThrottlerSupported(data);
+
+        verify(mThermalServiceMock).registerThermalEventListenerWithType(
+                mThermalEventListenerCaptor.capture(), eq(Temperature.TYPE_SKIN));
+        final IThermalEventListener listener = mThermalEventListenerCaptor.getValue();
+
+        // Ensure that the multiple levels set via the string through the device config correctly
+        // override the original display device config ones.
+
+        // levelSevere
+        // Set status too low to trigger throttling
+        listener.notifyThrottling(getSkinTemp(levelSevere.thermalStatus - 1));
+        mTestLooper.dispatchAll();
+        assertEquals(PowerManager.BRIGHTNESS_MAX, throttler.getBrightnessCap(), 0f);
+        assertFalse(throttler.isThrottled());
+
+        // Set status high enough to trigger throttling
+        listener.notifyThrottling(getSkinTemp(levelSevere.thermalStatus));
+        mTestLooper.dispatchAll();
+        assertEquals(0.9f, throttler.getBrightnessCap(), 0f);
+        assertTrue(throttler.isThrottled());
+
+        // levelCritical
+        // Set status too low to trigger throttling
+        listener.notifyThrottling(getSkinTemp(levelCritical.thermalStatus - 1));
+        mTestLooper.dispatchAll();
+        assertEquals(0.9f, throttler.getBrightnessCap(), 0f);
+        assertTrue(throttler.isThrottled());
+
+        // Set status high enough to trigger throttling
+        listener.notifyThrottling(getSkinTemp(levelCritical.thermalStatus));
+        mTestLooper.dispatchAll();
+        assertEquals(0.5f, throttler.getBrightnessCap(), 0f);
+        assertTrue(throttler.isThrottled());
+
+        //levelEmergency
+        // Set status too low to trigger throttling
+        listener.notifyThrottling(getSkinTemp(levelEmergency.thermalStatus - 1));
+        mTestLooper.dispatchAll();
+        assertEquals(0.5f, throttler.getBrightnessCap(), 0f);
+        assertTrue(throttler.isThrottled());
+
+        // Set status high enough to trigger throttling
+        listener.notifyThrottling(getSkinTemp(levelEmergency.thermalStatus));
+        mTestLooper.dispatchAll();
+        assertEquals(0.1f, throttler.getBrightnessCap(), 0f);
+        assertTrue(throttler.isThrottled());
+    }
+
     private void assertThrottlingLevelsEquals(
             List<ThrottlingLevel> expected,
             List<ThrottlingLevel> actual) {
@@ -307,12 +473,13 @@
     }
 
     private BrightnessThrottler createThrottlerUnsupported() {
-        return new BrightnessThrottler(mInjectorMock, mHandler, null, () -> {});
+        return new BrightnessThrottler(mInjectorMock, mHandler, mHandler, null, () -> {}, null);
     }
 
     private BrightnessThrottler createThrottlerSupported(BrightnessThrottlingData data) {
         assertNotNull(data);
-        return new BrightnessThrottler(mInjectorMock, mHandler, data, () -> {});
+        return new BrightnessThrottler(mInjectorMock, mHandler, BackgroundThread.getHandler(),
+                data, () -> {}, "123");
     }
 
     private Temperature getSkinTemp(@ThrottlingStatus int status) {
diff --git a/services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java b/services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java
new file mode 100644
index 0000000..7939303
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java
@@ -0,0 +1,182 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.platform.test.annotations.Presubmit;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+@SmallTest
+@Presubmit
+@RunWith(AndroidJUnit4.class)
+public final class DisplayDeviceConfigTest {
+    private DisplayDeviceConfig mDisplayDeviceConfig;
+    @Mock
+    private Context mContext;
+
+    @Mock
+    private Resources mResources;
+
+    @Before
+    public void setUp() throws IOException {
+        MockitoAnnotations.initMocks(this);
+        when(mContext.getResources()).thenReturn(mResources);
+        mockDeviceConfigs();
+        try {
+            Path tempFile = Files.createTempFile("display_config", ".tmp");
+            Files.write(tempFile, getContent().getBytes(StandardCharsets.UTF_8));
+            mDisplayDeviceConfig = new DisplayDeviceConfig(mContext);
+            mDisplayDeviceConfig.initFromFile(tempFile.toFile());
+        } catch (IOException e) {
+            throw new IOException("Failed to setup the display device config.", e);
+        }
+    }
+
+    @Test
+    public void testConfigValues() {
+        assertEquals(mDisplayDeviceConfig.getAmbientHorizonLong(), 5000);
+        assertEquals(mDisplayDeviceConfig.getAmbientHorizonShort(), 50);
+        assertEquals(mDisplayDeviceConfig.getBrightnessRampDecreaseMaxMillis(), 3000);
+        assertEquals(mDisplayDeviceConfig.getBrightnessRampIncreaseMaxMillis(), 2000);
+        assertEquals(mDisplayDeviceConfig.getAmbientLuxBrighteningMinThreshold(), 10.0f, 0.0f);
+        assertEquals(mDisplayDeviceConfig.getAmbientLuxDarkeningMinThreshold(), 2.0f, 0.0f);
+        assertEquals(mDisplayDeviceConfig.getBrightnessRampFastDecrease(), 0.01f, 0.0f);
+        assertEquals(mDisplayDeviceConfig.getBrightnessRampFastIncrease(), 0.02f, 0.0f);
+        assertEquals(mDisplayDeviceConfig.getBrightnessRampSlowIncrease(), 0.04f, 0.0f);
+        assertEquals(mDisplayDeviceConfig.getBrightnessRampSlowDecrease(), 0.03f, 0.0f);
+        assertEquals(mDisplayDeviceConfig.getBrightnessDefault(), 0.5f, 0.0f);
+        assertArrayEquals(mDisplayDeviceConfig.getBrightness(), new float[]{0.0f, 0.62f, 1.0f},
+                0.0f);
+        assertArrayEquals(mDisplayDeviceConfig.getNits(), new float[]{2.0f, 500.0f, 800.0f}, 0.0f);
+        assertArrayEquals(mDisplayDeviceConfig.getBacklight(), new float[]{0.0f, 0.62f, 1.0f},
+                0.0f);
+        assertEquals(mDisplayDeviceConfig.getScreenBrighteningMinThreshold(), 0.001, 0.000001f);
+        assertEquals(mDisplayDeviceConfig.getScreenDarkeningMinThreshold(), 0.002, 0.000001f);
+
+        // Todo(brup): Add asserts for BrightnessThrottlingData, DensityMapping,
+        // HighBrightnessModeData AmbientLightSensor, RefreshRateLimitations and ProximitySensor.
+        // Also add test for the case where optional display configs are null
+    }
+
+    private String getContent() {
+        return "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n"
+                + "<displayConfiguration>\n"
+                +   "<screenBrightnessMap>\n"
+                +       "<point>\n"
+                +           "<value>0.0</value>\n"
+                +           "<nits>2.0</nits>\n"
+                +       "</point>\n"
+                +       "<point>\n"
+                +           "<value>0.62</value>\n"
+                +           "<nits>500.0</nits>\n"
+                +       "</point>\n"
+                +       "<point>\n"
+                +           "<value>1.0</value>\n"
+                +           "<nits>800.0</nits>\n"
+                +       "</point>\n"
+                +   "</screenBrightnessMap>\n"
+                +   "<highBrightnessMode enabled=\"true\">\n"
+                +       "<transitionPoint>0.62</transitionPoint>\n"
+                +       "<minimumLux>10000</minimumLux>\n"
+                +       "<timing>\n"
+                +           "<!-- allow for 5 minutes out of every 30 minutes -->\n"
+                +           "<timeWindowSecs>1800</timeWindowSecs>\n"
+                +           "<timeMaxSecs>300</timeMaxSecs>\n"
+                +           "<timeMinSecs>60</timeMinSecs>\n"
+                +       "</timing>\n"
+                +       "<refreshRate>\n"
+                +           "<minimum>120</minimum>\n"
+                +           "<maximum>120</maximum>\n"
+                +       "</refreshRate>\n"
+                +       "<thermalStatusLimit>light</thermalStatusLimit>\n"
+                +       "<allowInLowPowerMode>false</allowInLowPowerMode>\n"
+                +   "</highBrightnessMode>\n"
+                +   "<ambientBrightnessChangeThresholds>\n"
+                +       "<brighteningThresholds>\n"
+                +           "<minimum>10</minimum>\n"
+                +       "</brighteningThresholds>\n"
+                +       "<darkeningThresholds>\n"
+                +           "<minimum>2</minimum>\n"
+                +       "</darkeningThresholds>\n"
+                +   "</ambientBrightnessChangeThresholds>\n"
+                +   "<screenBrightnessRampFastDecrease>0.01</screenBrightnessRampFastDecrease> "
+                +   "<screenBrightnessRampFastIncrease>0.02</screenBrightnessRampFastIncrease>  "
+                +   "<screenBrightnessRampSlowDecrease>0.03</screenBrightnessRampSlowDecrease>"
+                +   "<screenBrightnessRampSlowIncrease>0.04</screenBrightnessRampSlowIncrease>"
+                +   "<screenBrightnessRampIncreaseMaxMillis>"
+                +       "2000"
+                +   "</screenBrightnessRampIncreaseMaxMillis>"
+                +   "<screenBrightnessRampDecreaseMaxMillis>"
+                +       "3000"
+                +   "</screenBrightnessRampDecreaseMaxMillis>"
+                +   "<ambientLightHorizonLong>5000</ambientLightHorizonLong>\n"
+                +   "<ambientLightHorizonShort>50</ambientLightHorizonShort>\n"
+                +   "<displayBrightnessChangeThresholds>"
+                +       "<brighteningThresholds>"
+                +           "<minimum>"
+                +               "0.001"
+                +           "</minimum>"
+                +       "</brighteningThresholds>"
+                +       "<darkeningThresholds>"
+                +           "<minimum>"
+                +               "0.002"
+                +           "</minimum>"
+                +       "</darkeningThresholds>"
+                +   "</displayBrightnessChangeThresholds>"
+                +   "<screenBrightnessRampIncreaseMaxMillis>"
+                +       "2000"
+                +    "</screenBrightnessRampIncreaseMaxMillis>\n"
+                +   "<thermalThrottling>\n"
+                +       "<brightnessThrottlingMap>\n"
+                +           "<brightnessThrottlingPoint>\n"
+                +               "<thermalStatus>emergency</thermalStatus>\n"
+                +               "<!-- Throttling to 250 nits: (250-2.0)/(500-2.0)*(0.62-0.0)+0"
+                +               ".0 = 0.30875502 -->\n"
+                +               "<brightness>0.30875502</brightness>\n"
+                +           "</brightnessThrottlingPoint>\n"
+                +       "</brightnessThrottlingMap>\n"
+                +   "</thermalThrottling>\n"
+                + "</displayConfiguration>\n";
+    }
+
+    private void mockDeviceConfigs() {
+        when(mResources.getFloat(com.android.internal.R.dimen
+                .config_screenBrightnessSettingDefaultFloat)).thenReturn(0.5f);
+        when(mResources.getFloat(com.android.internal.R.dimen
+                .config_screenBrightnessSettingMaximumFloat)).thenReturn(1.0f);
+    }
+}
diff --git a/services/tests/servicestests/src/com/android/server/display/DisplayManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/display/DisplayManagerServiceTest.java
index 5f1ff6b..1e97c1c 100644
--- a/services/tests/servicestests/src/com/android/server/display/DisplayManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/DisplayManagerServiceTest.java
@@ -287,7 +287,7 @@
 
         when(mMockAppToken.asBinder()).thenReturn(mMockAppToken);
 
-        final int[] displayIds = bs.getDisplayIds(/* includeDisabled= */ false);
+        final int displayIds[] = bs.getDisplayIds();
         final int size = displayIds.length;
         assertTrue(size > 0);
 
@@ -297,9 +297,7 @@
         );
         for (int i = 0; i < size; i++) {
             DisplayInfo info = bs.getDisplayInfo(displayIds[i]);
-            if (info != null) {
-                assertTrue(expectedDisplayTypeToViewPortTypeMapping.keySet().contains(info.type));
-            }
+            assertTrue(expectedDisplayTypeToViewPortTypeMapping.keySet().contains(info.type));
         }
 
         displayManager.performTraversalInternal(mock(SurfaceControl.Transaction.class));
@@ -1176,8 +1174,7 @@
             DisplayManagerService.BinderService displayManagerBinderService,
             FakeDisplayDevice displayDevice) {
 
-        final int[] displayIds = displayManagerBinderService.getDisplayIds(
-                /* includeDisabled= */ false);
+        final int[] displayIds = displayManagerBinderService.getDisplayIds();
         assertTrue(displayIds.length > 0);
         int displayId = Display.INVALID_DISPLAY;
         for (int i = 0; i < displayIds.length; i++) {
diff --git a/services/tests/servicestests/src/com/android/server/display/DisplayModeDirectorTest.java b/services/tests/servicestests/src/com/android/server/display/DisplayModeDirectorTest.java
index 864f315..968e1d8 100644
--- a/services/tests/servicestests/src/com/android/server/display/DisplayModeDirectorTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/DisplayModeDirectorTest.java
@@ -16,6 +16,7 @@
 
 package com.android.server.display;
 
+import static android.hardware.display.DisplayManager.DeviceConfig.KEY_BRIGHTNESS_THROTTLING_DATA;
 import static android.hardware.display.DisplayManager.DeviceConfig.KEY_FIXED_REFRESH_RATE_HIGH_AMBIENT_BRIGHTNESS_THRESHOLDS;
 import static android.hardware.display.DisplayManager.DeviceConfig.KEY_FIXED_REFRESH_RATE_HIGH_DISPLAY_BRIGHTNESS_THRESHOLDS;
 import static android.hardware.display.DisplayManager.DeviceConfig.KEY_FIXED_REFRESH_RATE_LOW_AMBIENT_BRIGHTNESS_THRESHOLDS;
@@ -1902,6 +1903,11 @@
                     KEY_REFRESH_RATE_IN_HBM_HDR, String.valueOf(fps));
         }
 
+        void setBrightnessThrottlingData(String brightnessThrottlingData) {
+            putPropertyAndNotify(DeviceConfig.NAMESPACE_DISPLAY_MANAGER,
+                    KEY_BRIGHTNESS_THROTTLING_DATA, brightnessThrottlingData);
+        }
+
         void setLowDisplayBrightnessThresholds(int[] brightnessThresholds) {
             String thresholds = toPropertyValue(brightnessThresholds);
 
diff --git a/services/tests/servicestests/src/com/android/server/display/LogicalDisplayMapperTest.java b/services/tests/servicestests/src/com/android/server/display/LogicalDisplayMapperTest.java
index 5b13145..cc68ba8 100644
--- a/services/tests/servicestests/src/com/android/server/display/LogicalDisplayMapperTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/LogicalDisplayMapperTest.java
@@ -33,7 +33,6 @@
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.clearInvocations;
-import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -54,8 +53,6 @@
 import androidx.test.filters.SmallTest;
 import androidx.test.runner.AndroidJUnit4;
 
-import com.android.server.display.layout.Layout;
-
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -82,7 +79,6 @@
     private TestLooper mLooper;
     private Handler mHandler;
     private PowerManager mPowerManager;
-    private DeviceStateToLayoutMap mDeviceStateToLayoutMapSpy;
 
     @Mock LogicalDisplayMapper.Listener mListenerMock;
     @Mock Context mContextMock;
@@ -137,11 +133,8 @@
 
         mLooper = new TestLooper();
         mHandler = new Handler(mLooper.getLooper());
-
-        mDeviceStateToLayoutMapSpy = spy(new DeviceStateToLayoutMap());
         mLogicalDisplayMapper = new LogicalDisplayMapper(mContextMock, mDisplayDeviceRepo,
-                mListenerMock, new DisplayManagerService.SyncRoot(), mHandler,
-                mDeviceStateToLayoutMapSpy);
+                mListenerMock, new DisplayManagerService.SyncRoot(), mHandler);
     }
 
 
@@ -420,86 +413,6 @@
                 /* isBootCompleted= */true));
     }
 
-    @Test public void testEnabledAndDisabledDisplays() {
-        DisplayAddress displayAddressOne = new TestUtils.TestDisplayAddress();
-        DisplayAddress displayAddressTwo = new TestUtils.TestDisplayAddress();
-        DisplayAddress displayAddressThree = new TestUtils.TestDisplayAddress();
-
-        TestDisplayDevice device1 = createDisplayDevice(displayAddressOne, Display.TYPE_INTERNAL,
-                600, 800,
-                DisplayDeviceInfo.FLAG_ALLOWED_TO_BE_DEFAULT_DISPLAY);
-        TestDisplayDevice device2 = createDisplayDevice(displayAddressTwo, Display.TYPE_INTERNAL,
-                200, 800,
-                DisplayDeviceInfo.FLAG_OWN_DISPLAY_GROUP);
-        TestDisplayDevice device3 = createDisplayDevice(displayAddressThree, Display.TYPE_INTERNAL,
-                600, 900, DisplayDeviceInfo.FLAG_OWN_DISPLAY_GROUP);
-
-        Layout threeDevicesEnabledLayout = new Layout();
-        threeDevicesEnabledLayout.createDisplayLocked(
-                displayAddressOne,
-                /* isDefault= */ true,
-                /* isEnabled= */ true);
-
-        threeDevicesEnabledLayout.createDisplayLocked(
-                displayAddressTwo,
-                /* isDefault= */ false,
-                /* isEnabled= */ true);
-        threeDevicesEnabledLayout.createDisplayLocked(
-                displayAddressThree,
-                /* isDefault= */ false,
-                /* isEnabled= */ true);
-
-        when(mDeviceStateToLayoutMapSpy.get(DeviceStateToLayoutMap.STATE_DEFAULT))
-                .thenReturn(threeDevicesEnabledLayout);
-
-        LogicalDisplay display1 = add(device1);
-        LogicalDisplay display2 = add(device2);
-        LogicalDisplay display3 = add(device3);
-
-        // ensure 3 displays are returned
-        int [] ids = mLogicalDisplayMapper.getDisplayIdsLocked(Process.SYSTEM_UID);
-        assertEquals(3, ids.length);
-        Arrays.sort(ids);
-        assertEquals(DEFAULT_DISPLAY, ids[0]);
-
-        Layout oneDeviceEnabledLayout = new Layout();
-        oneDeviceEnabledLayout.createDisplayLocked(
-                display1.getDisplayInfoLocked().address,
-                /* isDefault= */ true,
-                /* isEnabled= */ true);
-        oneDeviceEnabledLayout.createDisplayLocked(
-                display2.getDisplayInfoLocked().address,
-                /* isDefault= */ false,
-                /* isEnabled= */ false);
-        oneDeviceEnabledLayout.createDisplayLocked(
-                display3.getDisplayInfoLocked().address,
-                /* isDefault= */ false,
-                /* isEnabled= */ false);
-
-        when(mDeviceStateToLayoutMapSpy.get(0)).thenReturn(oneDeviceEnabledLayout);
-        when(mDeviceStateToLayoutMapSpy.get(1)).thenReturn(threeDevicesEnabledLayout);
-
-        mLogicalDisplayMapper
-                .setDeviceStateLocked(0, false);
-        mDisplayDeviceRepo.onDisplayDeviceEvent(device3, DISPLAY_DEVICE_EVENT_CHANGED);
-        final int[] allDisplayIds = mLogicalDisplayMapper.getDisplayIdsLocked(
-                Process.SYSTEM_UID, false);
-        mLooper.dispatchAll();
-
-        // ensure only one display is returned
-        assertEquals(1, allDisplayIds.length);
-
-        mLogicalDisplayMapper
-                .setDeviceStateLocked(1, false);
-        mDisplayDeviceRepo.onDisplayDeviceEvent(device3, DISPLAY_DEVICE_EVENT_CHANGED);
-        final int[] threeDisplaysEnabled = mLogicalDisplayMapper.getDisplayIdsLocked(
-                Process.SYSTEM_UID, false);
-        mLooper.dispatchAll();
-
-        // ensure all three displays are returned
-        assertEquals(3, threeDisplaysEnabled.length);
-    }
-
     /////////////////
     // Helper Methods
     /////////////////
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 ece0a627..b0738fd 100644
--- a/services/tests/servicestests/src/com/android/server/display/LogicalDisplayTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/LogicalDisplayTest.java
@@ -17,7 +17,11 @@
 package com.android.server.display;
 
 import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.eq;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import android.app.PropertyInvalidatedCache;
@@ -45,18 +49,21 @@
 
     private LogicalDisplay mLogicalDisplay;
     private DisplayDevice mDisplayDevice;
+    private final DisplayDeviceInfo mDisplayDeviceInfo = new DisplayDeviceInfo();
 
     @Before
     public void setUp() {
         // Share classloader to allow package private access.
         System.setProperty("dexmaker.share_classloader", "true");
         mDisplayDevice = mock(DisplayDevice.class);
-        DisplayDeviceInfo displayDeviceInfo = new DisplayDeviceInfo();
-        displayDeviceInfo.width = DISPLAY_WIDTH;
-        displayDeviceInfo.height = DISPLAY_HEIGHT;
-        displayDeviceInfo.flags = DisplayDeviceInfo.FLAG_ROTATES_WITH_CONTENT;
         mLogicalDisplay = new LogicalDisplay(DISPLAY_ID, LAYER_STACK, mDisplayDevice);
-        when(mDisplayDevice.getDisplayDeviceInfoLocked()).thenReturn(displayDeviceInfo);
+
+        mDisplayDeviceInfo.copyFrom(new DisplayDeviceInfo());
+        mDisplayDeviceInfo.width = DISPLAY_WIDTH;
+        mDisplayDeviceInfo.height = DISPLAY_HEIGHT;
+        mDisplayDeviceInfo.flags = DisplayDeviceInfo.FLAG_ROTATES_WITH_CONTENT;
+        mDisplayDeviceInfo.touch = DisplayDeviceInfo.TOUCH_INTERNAL;
+        when(mDisplayDevice.getDisplayDeviceInfoLocked()).thenReturn(mDisplayDeviceInfo);
 
         // Disable binder caches in this process.
         PropertyInvalidatedCache.disableForTestMode();
@@ -103,4 +110,33 @@
         mLogicalDisplay.configureDisplayLocked(t, mDisplayDevice, false);
         assertEquals(expectedPosition, mLogicalDisplay.getDisplayPosition());
     }
+
+    @Test
+    public void testDisplayInputFlags() {
+        SurfaceControl.Transaction t = mock(SurfaceControl.Transaction.class);
+        mLogicalDisplay.configureDisplayLocked(t, mDisplayDevice, false);
+        verify(t).setDisplayFlags(any(), eq(SurfaceControl.DISPLAY_RECEIVES_INPUT));
+        reset(t);
+
+        mDisplayDeviceInfo.touch = DisplayDeviceInfo.TOUCH_NONE;
+        mLogicalDisplay.configureDisplayLocked(t, mDisplayDevice, false);
+        verify(t).setDisplayFlags(any(), eq(0));
+        reset(t);
+
+        mDisplayDeviceInfo.touch = DisplayDeviceInfo.TOUCH_VIRTUAL;
+        mLogicalDisplay.configureDisplayLocked(t, mDisplayDevice, false);
+        verify(t).setDisplayFlags(any(), eq(SurfaceControl.DISPLAY_RECEIVES_INPUT));
+        reset(t);
+
+        mLogicalDisplay.setPhase(LogicalDisplay.DISPLAY_PHASE_DISABLED);
+        mLogicalDisplay.configureDisplayLocked(t, mDisplayDevice, false);
+        verify(t).setDisplayFlags(any(), eq(0));
+        reset(t);
+
+        mLogicalDisplay.setPhase(LogicalDisplay.DISPLAY_PHASE_ENABLED);
+        mDisplayDeviceInfo.touch = DisplayDeviceInfo.TOUCH_EXTERNAL;
+        mLogicalDisplay.configureDisplayLocked(t, mDisplayDevice, false);
+        verify(t).setDisplayFlags(any(), eq(SurfaceControl.DISPLAY_RECEIVES_INPUT));
+        reset(t);
+    }
 }
diff --git a/services/tests/servicestests/src/com/android/server/display/color/ColorDisplayServiceTest.java b/services/tests/servicestests/src/com/android/server/display/color/ColorDisplayServiceTest.java
index 363c26b..bbed1b6 100644
--- a/services/tests/servicestests/src/com/android/server/display/color/ColorDisplayServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/color/ColorDisplayServiceTest.java
@@ -16,11 +16,14 @@
 
 package com.android.server.display.color;
 
+import static com.google.common.truth.Truth.assertThat;
 import static com.google.common.truth.Truth.assertWithMessage;
 
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -1130,6 +1133,15 @@
                 eq(ColorDisplayManager.COLOR_MODE_BOOSTED), any(), eq(Display.COLOR_MODE_INVALID));
     }
 
+    @Test
+    public void getColorMode_noAvailableModes_returnsNotSet() {
+        when(mResourcesSpy.getIntArray(R.array.config_availableColorModes))
+                .thenReturn(new int[] {});
+        startService();
+        verify(mDisplayTransformManager, never()).setColorMode(anyInt(), any(), anyInt());
+        assertThat(mBinderService.getColorMode()).isEqualTo(-1);
+    }
+
     /**
      * Configures Night display to use a custom schedule.
      *
diff --git a/services/tests/servicestests/src/com/android/server/policy/SideFpsEventHandlerTest.java b/services/tests/servicestests/src/com/android/server/policy/SideFpsEventHandlerTest.java
index 371861f..7746bd6 100644
--- a/services/tests/servicestests/src/com/android/server/policy/SideFpsEventHandlerTest.java
+++ b/services/tests/servicestests/src/com/android/server/policy/SideFpsEventHandlerTest.java
@@ -53,33 +53,30 @@
 
 /**
  * Unit tests for {@link SideFpsEventHandler}.
- * <p/>
- * Run with <code>atest SideFpsEventHandlerTest</code>.
+ *
+ * <p>Run with <code>atest SideFpsEventHandlerTest</code>.
  */
 @SmallTest
 @RunWith(AndroidTestingRunner.class)
 public class SideFpsEventHandlerTest {
 
-    private static final List<Integer> sAllStates = List.of(
-            BiometricStateListener.STATE_IDLE,
-            BiometricStateListener.STATE_ENROLLING,
-            BiometricStateListener.STATE_KEYGUARD_AUTH,
-            BiometricStateListener.STATE_BP_AUTH,
-            BiometricStateListener.STATE_AUTH_OTHER);
+    private static final List<Integer> sAllStates =
+            List.of(
+                    BiometricStateListener.STATE_IDLE,
+                    BiometricStateListener.STATE_ENROLLING,
+                    BiometricStateListener.STATE_KEYGUARD_AUTH,
+                    BiometricStateListener.STATE_BP_AUTH,
+                    BiometricStateListener.STATE_AUTH_OTHER);
 
     @Rule
     public TestableContext mContext =
             new TestableContext(InstrumentationRegistry.getContext(), null);
-    @Mock
-    private PackageManager mPackageManager;
-    @Mock
-    private FingerprintManager mFingerprintManager;
-    @Spy
-    private AlertDialog.Builder mDialogBuilder = new AlertDialog.Builder(mContext);
-    @Mock
-    private AlertDialog mAlertDialog;
-    @Mock
-    private Window mWindow;
+
+    @Mock private PackageManager mPackageManager;
+    @Mock private FingerprintManager mFingerprintManager;
+    @Spy private AlertDialog.Builder mDialogBuilder = new AlertDialog.Builder(mContext);
+    @Mock private AlertDialog mAlertDialog;
+    @Mock private Window mWindow;
 
     private TestLooper mLooper = new TestLooper();
     private SideFpsEventHandler mEventHandler;
@@ -95,9 +92,12 @@
         when(mDialogBuilder.create()).thenReturn(mAlertDialog);
         when(mAlertDialog.getWindow()).thenReturn(mWindow);
 
-        mEventHandler = new SideFpsEventHandler(
-                mContext, new Handler(mLooper.getLooper()),
-                mContext.getSystemService(PowerManager.class), () -> mDialogBuilder);
+        mEventHandler =
+                new SideFpsEventHandler(
+                        mContext,
+                        new Handler(mLooper.getLooper()),
+                        mContext.getSystemService(PowerManager.class),
+                        () -> mDialogBuilder);
     }
 
     @Test
@@ -105,7 +105,7 @@
         when(mPackageManager.hasSystemFeature(eq(PackageManager.FEATURE_FINGERPRINT)))
                 .thenReturn(false);
 
-        assertThat(mEventHandler.onSinglePressDetected(60L)).isFalse();
+        assertThat(mEventHandler.shouldConsumeSinglePress(60L)).isFalse();
 
         mLooper.dispatchAll();
         verify(mAlertDialog, never()).show();
@@ -117,7 +117,7 @@
 
         for (int state : sAllStates) {
             setBiometricState(state);
-            assertThat(mEventHandler.onSinglePressDetected(200L)).isFalse();
+            assertThat(mEventHandler.shouldConsumeSinglePress(200L)).isFalse();
 
             mLooper.dispatchAll();
             verify(mAlertDialog, never()).show();
@@ -130,7 +130,7 @@
 
         for (int state : sAllStates) {
             setBiometricState(state);
-            assertThat(mEventHandler.onSinglePressDetected(400L)).isFalse();
+            assertThat(mEventHandler.shouldConsumeSinglePress(400L)).isFalse();
 
             mLooper.dispatchAll();
             verify(mAlertDialog, never()).show();
@@ -139,13 +139,13 @@
 
     @Test
     public void ignoresWhenIdleOrUnknown() throws Exception {
-        setupWithSensor(true /* hasSfps */, true /* initialized */);
+        setupWithSensor(true /* hasSidefps */, true /* initialized */);
 
         setBiometricState(BiometricStateListener.STATE_IDLE);
-        assertThat(mEventHandler.onSinglePressDetected(80000L)).isFalse();
+        assertThat(mEventHandler.shouldConsumeSinglePress(80000L)).isFalse();
 
         setBiometricState(BiometricStateListener.STATE_AUTH_OTHER);
-        assertThat(mEventHandler.onSinglePressDetected(90000L)).isFalse();
+        assertThat(mEventHandler.shouldConsumeSinglePress(90000L)).isFalse();
 
         mLooper.dispatchAll();
         verify(mAlertDialog, never()).show();
@@ -156,7 +156,7 @@
         setupWithSensor(true /* hasSfps */, true /* initialized */);
 
         setBiometricState(BiometricStateListener.STATE_KEYGUARD_AUTH);
-        assertThat(mEventHandler.onSinglePressDetected(80000L)).isFalse();
+        assertThat(mEventHandler.shouldConsumeSinglePress(80000L)).isFalse();
 
         mLooper.dispatchAll();
         verify(mAlertDialog, never()).show();
@@ -164,13 +164,13 @@
 
     @Test
     public void promptsWhenBPisActive() throws Exception {
-        setupWithSensor(true /* hasSfps */, true /* initialized */);
+        setupWithSensor(true /* hasSideFps */, true /* initialized */);
 
         setBiometricState(BiometricStateListener.STATE_BP_AUTH);
-        assertThat(mEventHandler.onSinglePressDetected(80000L)).isTrue();
+        assertThat(mEventHandler.shouldConsumeSinglePress(80000L)).isTrue();
 
         mLooper.dispatchAll();
-        verify(mAlertDialog).show();
+        verify(mAlertDialog, never()).show();
     }
 
     @Test
@@ -178,7 +178,57 @@
         setupWithSensor(true /* hasSfps */, true /* initialized */);
 
         setBiometricState(BiometricStateListener.STATE_ENROLLING);
-        assertThat(mEventHandler.onSinglePressDetected(80000L)).isTrue();
+        assertThat(mEventHandler.shouldConsumeSinglePress(80000L)).isTrue();
+
+        mLooper.dispatchAll();
+        verify(mAlertDialog).show();
+        verify(mAlertDialog, never()).dismiss();
+    }
+
+    @Test
+    public void dismissesDialogOnTouchWhenEnrolling() throws Exception {
+        setupWithSensor(true /* hasSfps */, true /* initialized */);
+
+        setBiometricState(BiometricStateListener.STATE_ENROLLING);
+        when(mAlertDialog.isShowing()).thenReturn(true);
+        assertThat(mEventHandler.shouldConsumeSinglePress(80000L)).isTrue();
+
+        mLooper.dispatchAll();
+        verify(mAlertDialog).show();
+
+        mBiometricStateListener.onBiometricAction(BiometricStateListener.ACTION_SENSOR_TOUCH);
+        mLooper.moveTimeForward(10000);
+        mLooper.dispatchAll();
+
+        verify(mAlertDialog).dismiss();
+    }
+
+    @Test
+    public void dismissesDialogFailsWhenPowerPressedAndDialogShowing() throws Exception {
+        setupWithSensor(true /* hasSfps */, true /* initialized */);
+
+        setBiometricState(BiometricStateListener.STATE_ENROLLING);
+        when(mAlertDialog.isShowing()).thenReturn(true);
+        assertThat(mEventHandler.shouldConsumeSinglePress(80000L)).isTrue();
+
+        mLooper.dispatchAll();
+        verify(mAlertDialog).show();
+
+        mBiometricStateListener.onBiometricAction(BiometricStateListener.ACTION_SENSOR_TOUCH);
+        assertThat(mEventHandler.shouldConsumeSinglePress(60L)).isTrue();
+
+        mLooper.dispatchAll();
+        verify(mAlertDialog, never()).dismiss();
+    }
+
+    @Test
+    public void showDialogAfterTap() throws Exception {
+        setupWithSensor(true /* hasSfps */, true /* initialized */);
+
+        setBiometricState(BiometricStateListener.STATE_ENROLLING);
+        when(mAlertDialog.isShowing()).thenReturn(true);
+        mBiometricStateListener.onBiometricAction(BiometricStateListener.ACTION_SENSOR_TOUCH);
+        assertThat(mEventHandler.shouldConsumeSinglePress(60L)).isTrue();
 
         mLooper.dispatchAll();
         verify(mAlertDialog).show();
@@ -201,11 +251,13 @@
                 ArgumentCaptor.forClass(IFingerprintAuthenticatorsRegisteredCallback.class);
         verify(mFingerprintManager).addAuthenticatorsRegisteredCallback(fpCallbackCaptor.capture());
         if (initialized) {
-            fpCallbackCaptor.getValue().onAllAuthenticatorsRegistered(
-                    List.of(mock(FingerprintSensorPropertiesInternal.class)));
+            fpCallbackCaptor
+                    .getValue()
+                    .onAllAuthenticatorsRegistered(
+                            List.of(mock(FingerprintSensorPropertiesInternal.class)));
             if (hasSfps) {
-                ArgumentCaptor<BiometricStateListener> captor = ArgumentCaptor.forClass(
-                        BiometricStateListener.class);
+                ArgumentCaptor<BiometricStateListener> captor =
+                        ArgumentCaptor.forClass(BiometricStateListener.class);
                 verify(mFingerprintManager).registerBiometricStateListener(captor.capture());
                 mBiometricStateListener = captor.getValue();
             }
diff --git a/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsManagerTest.java b/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsManagerTest.java
new file mode 100644
index 0000000..7ae1117
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/power/stats/BatteryStatsManagerTest.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.power.stats;
+
+import static androidx.test.InstrumentationRegistry.getContext;
+
+import static org.junit.Assert.fail;
+
+import android.os.BatteryConsumer;
+import android.os.BatteryStatsManager;
+import android.os.BatteryUsageStats;
+import android.os.BatteryUsageStatsQuery;
+import android.os.UidBatteryConsumer;
+
+import org.junit.Test;
+
+/**
+ * Test BatteryStatsManager and CellularBatteryStats to ensure that valid data is being reported
+ * and that invalid data is not reported.
+ */
+public class BatteryStatsManagerTest {
+
+    @Test
+    public void testBatteryUsageStatsDataConsistency() {
+        BatteryStatsManager bsm = getContext().getSystemService(BatteryStatsManager.class);
+        BatteryUsageStats stats = bsm.getBatteryUsageStats(
+                new BatteryUsageStatsQuery.Builder().setMaxStatsAgeMs(
+                        0).includeProcessStateData().build());
+        final int[] components =
+                {BatteryConsumer.POWER_COMPONENT_CPU,
+                        BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
+                        BatteryConsumer.POWER_COMPONENT_WIFI,
+                        BatteryConsumer.POWER_COMPONENT_BLUETOOTH};
+        final int[] states =
+                {BatteryConsumer.PROCESS_STATE_FOREGROUND,
+                        BatteryConsumer.PROCESS_STATE_BACKGROUND,
+                        BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE,
+                        BatteryConsumer.PROCESS_STATE_CACHED};
+        for (UidBatteryConsumer ubc : stats.getUidBatteryConsumers()) {
+            for (int component : components) {
+                double consumedPower = ubc.getConsumedPower(ubc.getKey(component));
+                double sumStates = 0;
+                for (int state : states) {
+                    sumStates += ubc.getConsumedPower(ubc.getKey(component, state));
+                }
+                if (sumStates > consumedPower + 0.1) {
+                    fail("Sum of states exceeds total. UID = " + ubc.getUid() + " "
+                            + BatteryConsumer.powerComponentIdToString(component)
+                            + " total = " + consumedPower + " states = " + sumStates);
+                }
+            }
+        }
+    }
+}
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 e9171c0c..92c7871 100644
--- a/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java
+++ b/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java
@@ -336,6 +336,59 @@
         assertThat(mSysConfig.getAllowedVendorApexes()).isEmpty();
     }
 
+    /**
+     * Tests that readPermissions works correctly for the tag: {@code install-constraints-allowed}.
+     */
+    @Test
+    public void readPermissions_installConstraints_successful() throws IOException {
+        final String contents =
+                "<config>\n"
+                        + "    <install-constraints-allowed package=\"com.android.apex1\" />\n"
+                        + "</config>";
+        final File folder = createTempSubfolder("folder");
+        createTempFile(folder, "install-constraints-allowlist.xml", contents);
+
+        readPermissions(folder, /* Grant all permission flags */ ~0);
+
+        assertThat(mSysConfig.getInstallConstraintsAllowlist())
+                .containsExactly("com.android.apex1");
+    }
+
+    /**
+     * Tests that readPermissions works correctly for the tag: {@code install-constraints-allowed}.
+     */
+    @Test
+    public void readPermissions_installConstraints_noPackage() throws IOException {
+        final String contents =
+                "<config>\n"
+                        + "    <install-constraints-allowed/>\n"
+                        + "</config>";
+        final File folder = createTempSubfolder("folder");
+        createTempFile(folder, "install-constraints-allowlist.xml", contents);
+
+        readPermissions(folder, /* Grant all permission flags */ ~0);
+
+        assertThat(mSysConfig.getInstallConstraintsAllowlist()).isEmpty();
+    }
+
+    /**
+     * Tests that readPermissions works correctly for the tag {@code install-constraints-allowed}
+     * without {@link SystemConfig#ALLOW_VENDOR_APEX}.
+     */
+    @Test
+    public void readPermissions_installConstraints_noAppConfigs() throws IOException {
+        final String contents =
+                "<config>\n"
+                        + "    <install-constraints-allowed package=\"com.android.apex1\" />\n"
+                        + "</config>";
+        final File folder = createTempSubfolder("folder");
+        createTempFile(folder, "install-constraints-allowlist.xml", contents);
+
+        readPermissions(folder,  /* Grant all but ALLOW_APP_CONFIGS flag */ ~0x08);
+
+        assertThat(mSysConfig.getInstallConstraintsAllowlist()).isEmpty();
+    }
+
     @Test
     public void readApexPrivAppPermissions_addAllPermissions()
             throws Exception {
diff --git a/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java b/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java
index c016406..308a4b6 100644
--- a/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java
+++ b/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java
@@ -928,6 +928,7 @@
     }
 
     @Test
+    @FlakyTest(bugId = 185169504)
     public void testNotificationEvent_quotaBump() throws Exception {
         mInjector.mSettingsBuilder
                 .setBoolean("trigger_quota_bump_on_notification_seen", true);
diff --git a/services/tests/servicestests/src/com/android/server/usage/UsageStatsDatabaseTest.java b/services/tests/servicestests/src/com/android/server/usage/UsageStatsDatabaseTest.java
index 75bd2cc..bc2c57e 100644
--- a/services/tests/servicestests/src/com/android/server/usage/UsageStatsDatabaseTest.java
+++ b/services/tests/servicestests/src/com/android/server/usage/UsageStatsDatabaseTest.java
@@ -22,6 +22,7 @@
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
 
 import android.app.usage.TimeSparseArray;
 import android.app.usage.UsageEvents.Event;
@@ -440,6 +441,7 @@
         prevDB.readMappingsLocked();
         prevDB.init(1);
         prevDB.putUsageStats(UsageStatsManager.INTERVAL_DAILY, mIntervalStats);
+        Set<String> prevDBApps = mIntervalStats.packageStats.keySet();
         // Create a backup with a specific version
         byte[] blob = prevDB.getBackupPayload(KEY_USAGE_STATS, version);
         if (version >= 1 && version <= 3) {
@@ -447,6 +449,11 @@
                     "UsageStatsDatabase shouldn't be able to write backups as XML");
             return;
         }
+        if (version < 1 || version > UsageStatsDatabase.BACKUP_VERSION) {
+            assertFalse(blob != null && blob.length != 0,
+                    "UsageStatsDatabase shouldn't be able to write backups for unknown versions");
+            return;
+        }
 
         clearUsageStatsFiles();
 
@@ -454,9 +461,11 @@
         newDB.readMappingsLocked();
         newDB.init(1);
         // Attempt to restore the usage stats from the backup
-        newDB.applyRestoredPayload(KEY_USAGE_STATS, blob);
-        List<IntervalStats> stats = newDB.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, 0, mEndTime,
-                mIntervalStatsVerifier);
+        Set<String> restoredApps = newDB.applyRestoredPayload(KEY_USAGE_STATS, blob);
+        assertTrue(restoredApps.containsAll(prevDBApps),
+                "List of restored apps does not match list backed-up apps list.");
+        List<IntervalStats> stats = newDB.queryUsageStats(
+                UsageStatsManager.INTERVAL_DAILY, 0, mEndTime, mIntervalStatsVerifier);
 
         if (version > UsageStatsDatabase.BACKUP_VERSION || version < 1) {
             assertFalse(stats != null && !stats.isEmpty(),
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 c735bb7..8a96feb 100644
--- a/services/tests/servicestests/src/com/android/server/vibrator/VibratorManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/vibrator/VibratorManagerServiceTest.java
@@ -778,8 +778,7 @@
         assertTrue(waitUntil(s -> !mVibratorProviders.get(1).getAllEffectSegments().isEmpty(),
                 service, TEST_TIMEOUT_MILLIS));
 
-        vibrate(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
-                HAPTIC_FEEDBACK_ATTRS);
+        vibrate(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK), HAPTIC_FEEDBACK_ATTRS);
 
         // Wait before checking it never played a second effect.
         assertFalse(waitUntil(s -> mVibratorProviders.get(1).getAllEffectSegments().size() > 1,
@@ -793,49 +792,78 @@
     }
 
     @Test
-    public void vibrate_withOngoingAlarmVibration_ignoresEffect() throws Exception {
+    public void vibrate_withNewRepeatingVibration_cancelsOngoingEffect() throws Exception {
         mockVibrators(1);
         mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
         VibratorManagerService service = createSystemReadyService();
 
         VibrationEffect alarmEffect = VibrationEffect.createWaveform(
                 new long[]{10_000, 10_000}, new int[]{128, 255}, -1);
-        vibrate(service, alarmEffect, new VibrationAttributes.Builder().setUsage(
-                VibrationAttributes.USAGE_ALARM).build());
+        vibrate(service, alarmEffect, ALARM_ATTRS);
 
         // VibrationThread will start this vibration async, so wait before checking it started.
         assertTrue(waitUntil(s -> !mVibratorProviders.get(1).getAllEffectSegments().isEmpty(),
                 service, TEST_TIMEOUT_MILLIS));
 
-        vibrate(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
-                HAPTIC_FEEDBACK_ATTRS);
+        VibrationEffect repeatingEffect = VibrationEffect.createWaveform(
+                new long[]{10_000, 10_000}, new int[]{128, 255}, 1);
+        vibrate(service, repeatingEffect, NOTIFICATION_ATTRS);
 
-        // Wait before checking it never played a second effect.
-        assertFalse(waitUntil(s -> mVibratorProviders.get(1).getAllEffectSegments().size() > 1,
-                service, /* timeout= */ 50));
+        // VibrationThread will start this vibration async, so wait before checking it started.
+        assertTrue(waitUntil(s -> mVibratorProviders.get(1).getAllEffectSegments().size() > 1,
+                service, TEST_TIMEOUT_MILLIS));
+
+        // The second vibration should have recorded that the vibrators were turned on.
+        verify(mBatteryStatsMock, times(2)).noteVibratorOn(anyInt(), anyLong());
     }
 
     @Test
-    public void vibrate_withOngoingRingtoneVibration_ignoresEffect() throws Exception {
+    public void vibrate_withOngoingHigherImportanceVibration_ignoresEffect() throws Exception {
         mockVibrators(1);
         mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
         VibratorManagerService service = createSystemReadyService();
 
-        VibrationEffect alarmEffect = VibrationEffect.createWaveform(
+        VibrationEffect effect = VibrationEffect.createWaveform(
                 new long[]{10_000, 10_000}, new int[]{128, 255}, -1);
-        vibrate(service, alarmEffect, new VibrationAttributes.Builder().setUsage(
-                VibrationAttributes.USAGE_RINGTONE).build());
+        vibrate(service, effect, ALARM_ATTRS);
 
         // VibrationThread will start this vibration async, so wait before checking it started.
         assertTrue(waitUntil(s -> !mVibratorProviders.get(1).getAllEffectSegments().isEmpty(),
                 service, TEST_TIMEOUT_MILLIS));
 
-        vibrate(service, VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
-                HAPTIC_FEEDBACK_ATTRS);
+        vibrate(service, effect, HAPTIC_FEEDBACK_ATTRS);
 
         // Wait before checking it never played a second effect.
         assertFalse(waitUntil(s -> mVibratorProviders.get(1).getAllEffectSegments().size() > 1,
                 service, /* timeout= */ 50));
+
+        // The second vibration shouldn't have recorded that the vibrators were turned on.
+        verify(mBatteryStatsMock, times(1)).noteVibratorOn(anyInt(), anyLong());
+    }
+
+    @Test
+    public void vibrate_withOngoingLowerImportanceVibration_cancelsOngoingEffect()
+            throws Exception {
+        mockVibrators(1);
+        mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
+        VibratorManagerService service = createSystemReadyService();
+
+        VibrationEffect effect = VibrationEffect.createWaveform(
+                new long[]{10_000, 10_000}, new int[]{128, 255}, -1);
+        vibrate(service, effect, HAPTIC_FEEDBACK_ATTRS);
+
+        // VibrationThread will start this vibration async, so wait before checking it started.
+        assertTrue(waitUntil(s -> !mVibratorProviders.get(1).getAllEffectSegments().isEmpty(),
+                service, TEST_TIMEOUT_MILLIS));
+
+        vibrate(service, effect, RINGTONE_ATTRS);
+
+        // VibrationThread will start this vibration async, so wait before checking it started.
+        assertTrue(waitUntil(s -> mVibratorProviders.get(1).getAllEffectSegments().size() > 1,
+                service, TEST_TIMEOUT_MILLIS));
+
+        // The second vibration should have recorded that the vibrators were turned on.
+        verify(mBatteryStatsMock, times(2)).noteVibratorOn(anyInt(), anyLong());
     }
 
     @Test
@@ -1052,15 +1080,15 @@
                 IVibrator.CAP_COMPOSE_EFFECTS);
         VibratorManagerService service = createSystemReadyService();
 
-        vibrate(service, CombinedVibration.startSequential()
-                .addNext(1, VibrationEffect.createOneShot(100, 125))
-                .combine(), NOTIFICATION_ATTRS);
-        assertTrue(waitUntil(s -> fakeVibrator.getAllEffectSegments().size() == 1,
-                service, TEST_TIMEOUT_MILLIS));
-
         vibrate(service, VibrationEffect.startComposition()
                 .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 0.5f)
                 .compose(), HAPTIC_FEEDBACK_ATTRS);
+        assertTrue(waitUntil(s -> fakeVibrator.getAllEffectSegments().size() == 1,
+                service, TEST_TIMEOUT_MILLIS));
+
+        vibrate(service, CombinedVibration.startSequential()
+                .addNext(1, VibrationEffect.createOneShot(100, 125))
+                .combine(), NOTIFICATION_ATTRS);
         assertTrue(waitUntil(s -> fakeVibrator.getAllEffectSegments().size() == 2,
                 service, TEST_TIMEOUT_MILLIS));
 
@@ -1070,25 +1098,25 @@
         assertTrue(waitUntil(s -> fakeVibrator.getAllEffectSegments().size() == 3,
                 service, TEST_TIMEOUT_MILLIS));
 
+        // Ring vibrations have intensity OFF and are not played.
         vibrate(service, VibrationEffect.createOneShot(100, 125), RINGTONE_ATTRS);
         assertFalse(waitUntil(s -> fakeVibrator.getAllEffectSegments().size() > 3,
-                service, TEST_TIMEOUT_MILLIS));
+                service, /* timeout= */ 50));
 
+        // Only 3 effects played successfully.
         assertEquals(3, fakeVibrator.getAllEffectSegments().size());
 
+        // Haptic feedback vibrations will be scaled with SCALE_LOW or none if default is low.
+        assertEquals(defaultTouchIntensity > Vibrator.VIBRATION_INTENSITY_LOW,
+                0.5 > ((PrimitiveSegment) fakeVibrator.getAllEffectSegments().get(0)).getScale());
+
         // Notification vibrations will be scaled with SCALE_HIGH or none if default is high.
         assertEquals(defaultNotificationIntensity < Vibrator.VIBRATION_INTENSITY_HIGH,
                 0.6 < fakeVibrator.getAmplitudes().get(0));
 
-        // Haptic feedback vibrations will be scaled with SCALE_LOW or none if default is low.
-        assertEquals(defaultTouchIntensity > Vibrator.VIBRATION_INTENSITY_LOW,
-                0.5 > ((PrimitiveSegment) fakeVibrator.getAllEffectSegments().get(1)).getScale());
-
         // Alarm vibration will be scaled with SCALE_NONE.
         assertEquals(1f,
                 ((PrimitiveSegment) fakeVibrator.getAllEffectSegments().get(2)).getScale(), 1e-5);
-
-        // Ring vibrations have intensity OFF and are not played.
     }
 
     @Test
diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowOrientationListenerTest.java b/services/tests/servicestests/src/com/android/server/wm/WindowOrientationListenerTest.java
index c64ff9e..3de65c1 100644
--- a/services/tests/servicestests/src/com/android/server/wm/WindowOrientationListenerTest.java
+++ b/services/tests/servicestests/src/com/android/server/wm/WindowOrientationListenerTest.java
@@ -185,7 +185,7 @@
         }
 
         @Override
-        public boolean isKeyguardLocked() {
+        public boolean isKeyguardShowingAndNotOccluded() {
             return mIsScreenLocked;
         }
 
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 2f054b0..8ba9af0 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/ManagedServicesTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/ManagedServicesTest.java
@@ -840,6 +840,156 @@
     }
 
     @Test
+    public void reregisterService_checksAppIsApproved_pkg() throws Exception {
+        Context context = mock(Context.class);
+        PackageManager pm = mock(PackageManager.class);
+        ApplicationInfo ai = new ApplicationInfo();
+        ai.targetSdkVersion = Build.VERSION_CODES.CUR_DEVELOPMENT;
+
+        when(context.getPackageName()).thenReturn(mContext.getPackageName());
+        when(context.getUserId()).thenReturn(mContext.getUserId());
+        when(context.getPackageManager()).thenReturn(pm);
+        when(pm.getApplicationInfo(anyString(), anyInt())).thenReturn(ai);
+
+        ManagedServices service = new TestManagedServices(context, mLock, mUserProfiles, mIpm,
+                APPROVAL_BY_PACKAGE);
+        ComponentName cn = ComponentName.unflattenFromString("a/a");
+
+        when(context.bindServiceAsUser(any(), any(), anyInt(), any())).thenAnswer(invocation -> {
+            Object[] args = invocation.getArguments();
+            ServiceConnection sc = (ServiceConnection) args[1];
+            sc.onServiceConnected(cn, mock(IBinder.class));
+            return true;
+        });
+
+        service.addApprovedList("a", 0, true);
+
+        service.reregisterService(cn, 0);
+
+        assertTrue(service.isBound(cn, 0));
+    }
+
+    @Test
+    public void reregisterService_checksAppIsApproved_pkg_secondary() throws Exception {
+        Context context = mock(Context.class);
+        PackageManager pm = mock(PackageManager.class);
+        ApplicationInfo ai = new ApplicationInfo();
+        ai.targetSdkVersion = Build.VERSION_CODES.CUR_DEVELOPMENT;
+
+        when(context.getPackageName()).thenReturn(mContext.getPackageName());
+        when(context.getUserId()).thenReturn(mContext.getUserId());
+        when(context.getPackageManager()).thenReturn(pm);
+        when(pm.getApplicationInfo(anyString(), anyInt())).thenReturn(ai);
+
+        ManagedServices service = new TestManagedServices(context, mLock, mUserProfiles, mIpm,
+                APPROVAL_BY_PACKAGE);
+        ComponentName cn = ComponentName.unflattenFromString("a/a");
+
+        when(context.bindServiceAsUser(any(), any(), anyInt(), any())).thenAnswer(invocation -> {
+            Object[] args = invocation.getArguments();
+            ServiceConnection sc = (ServiceConnection) args[1];
+            sc.onServiceConnected(cn, mock(IBinder.class));
+            return true;
+        });
+
+        service.addApprovedList("a", 0, false);
+
+        service.reregisterService(cn, 0);
+
+        assertTrue(service.isBound(cn, 0));
+    }
+
+    @Test
+    public void reregisterService_checksAppIsApproved_cn() throws Exception {
+        Context context = mock(Context.class);
+        PackageManager pm = mock(PackageManager.class);
+        ApplicationInfo ai = new ApplicationInfo();
+        ai.targetSdkVersion = Build.VERSION_CODES.CUR_DEVELOPMENT;
+
+        when(context.getPackageName()).thenReturn(mContext.getPackageName());
+        when(context.getUserId()).thenReturn(mContext.getUserId());
+        when(context.getPackageManager()).thenReturn(pm);
+        when(pm.getApplicationInfo(anyString(), anyInt())).thenReturn(ai);
+
+        ManagedServices service = new TestManagedServices(context, mLock, mUserProfiles, mIpm,
+                APPROVAL_BY_COMPONENT);
+        ComponentName cn = ComponentName.unflattenFromString("a/a");
+
+        when(context.bindServiceAsUser(any(), any(), anyInt(), any())).thenAnswer(invocation -> {
+            Object[] args = invocation.getArguments();
+            ServiceConnection sc = (ServiceConnection) args[1];
+            sc.onServiceConnected(cn, mock(IBinder.class));
+            return true;
+        });
+
+        service.addApprovedList("a/a", 0, true);
+
+        service.reregisterService(cn, 0);
+
+        assertTrue(service.isBound(cn, 0));
+    }
+
+    @Test
+    public void reregisterService_checksAppIsApproved_cn_secondary() throws Exception {
+        Context context = mock(Context.class);
+        PackageManager pm = mock(PackageManager.class);
+        ApplicationInfo ai = new ApplicationInfo();
+        ai.targetSdkVersion = Build.VERSION_CODES.CUR_DEVELOPMENT;
+
+        when(context.getPackageName()).thenReturn(mContext.getPackageName());
+        when(context.getUserId()).thenReturn(mContext.getUserId());
+        when(context.getPackageManager()).thenReturn(pm);
+        when(pm.getApplicationInfo(anyString(), anyInt())).thenReturn(ai);
+
+        ManagedServices service = new TestManagedServices(context, mLock, mUserProfiles, mIpm,
+                APPROVAL_BY_COMPONENT);
+        ComponentName cn = ComponentName.unflattenFromString("a/a");
+
+        when(context.bindServiceAsUser(any(), any(), anyInt(), any())).thenAnswer(invocation -> {
+            Object[] args = invocation.getArguments();
+            ServiceConnection sc = (ServiceConnection) args[1];
+            sc.onServiceConnected(cn, mock(IBinder.class));
+            return true;
+        });
+
+        service.addApprovedList("a/a", 0, false);
+
+        service.reregisterService(cn, 0);
+
+        assertTrue(service.isBound(cn, 0));
+    }
+
+    @Test
+    public void reregisterService_checksAppIsNotApproved_cn_secondary() throws Exception {
+        Context context = mock(Context.class);
+        PackageManager pm = mock(PackageManager.class);
+        ApplicationInfo ai = new ApplicationInfo();
+        ai.targetSdkVersion = Build.VERSION_CODES.CUR_DEVELOPMENT;
+
+        when(context.getPackageName()).thenReturn(mContext.getPackageName());
+        when(context.getUserId()).thenReturn(mContext.getUserId());
+        when(context.getPackageManager()).thenReturn(pm);
+        when(pm.getApplicationInfo(anyString(), anyInt())).thenReturn(ai);
+
+        ManagedServices service = new TestManagedServices(context, mLock, mUserProfiles, mIpm,
+                APPROVAL_BY_COMPONENT);
+        ComponentName cn = ComponentName.unflattenFromString("a/a");
+
+        when(context.bindServiceAsUser(any(), any(), anyInt(), any())).thenAnswer(invocation -> {
+            Object[] args = invocation.getArguments();
+            ServiceConnection sc = (ServiceConnection) args[1];
+            sc.onServiceConnected(cn, mock(IBinder.class));
+            return true;
+        });
+
+        service.addApprovedList("b/b", 0, false);
+
+        service.reregisterService(cn, 0);
+
+        assertFalse(service.isBound(cn, 0));
+    }
+
+    @Test
     public void unbindOtherUserServices() throws PackageManager.NameNotFoundException {
         Context context = mock(Context.class);
         PackageManager pm = mock(PackageManager.class);
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryDatabaseTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryDatabaseTest.java
index bd7186e..2f92260 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryDatabaseTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryDatabaseTest.java
@@ -18,7 +18,6 @@
 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.Mockito.mock;
 import static org.mockito.Mockito.never;
@@ -26,7 +25,6 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import android.app.AlarmManager;
 import android.app.NotificationHistory;
 import android.app.NotificationHistory.HistoricalNotification;
 import android.content.Context;
@@ -60,8 +58,6 @@
     Handler mFileWriteHandler;
     @Mock
     Context mContext;
-    @Mock
-    AlarmManager mAlarmManager;
 
     NotificationHistoryDatabase mDataBase;
 
@@ -96,22 +92,16 @@
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        when(mContext.getSystemService(AlarmManager.class)).thenReturn(mAlarmManager);
         when(mContext.getUser()).thenReturn(getContext().getUser());
         when(mContext.getPackageName()).thenReturn(getContext().getPackageName());
 
         mRootDir = new File(mContext.getFilesDir(), "NotificationHistoryDatabaseTest");
 
-        mDataBase = new NotificationHistoryDatabase(mContext, mFileWriteHandler, mRootDir);
+        mDataBase = new NotificationHistoryDatabase(mFileWriteHandler, mRootDir);
         mDataBase.init();
     }
 
     @Test
-    public void testDeletionReceiver() {
-        verify(mContext, times(1)).registerReceiver(any(), any(), anyInt());
-    }
-
-    @Test
     public void testPrune() throws Exception {
         GregorianCalendar cal = new GregorianCalendar();
         cal.setTimeInMillis(10);
@@ -144,8 +134,6 @@
         mDataBase.prune(retainDays, cal.getTimeInMillis());
 
         assertThat(mDataBase.mHistoryFiles).containsExactlyElementsIn(expectedFiles);
-
-        verify(mAlarmManager, times(6)).setExactAndAllowWhileIdle(anyInt(), anyLong(), any());
     }
 
     @Test
@@ -412,15 +400,14 @@
         when(file.getName()).thenReturn("5");
         when(af.getBaseFile()).thenReturn(file);
 
-        wbr.run(5, af);
+        wbr.run(af);
 
         assertThat(mDataBase.mHistoryFiles.size()).isEqualTo(1);
         assertThat(mDataBase.mBuffer).isNotEqualTo(nh);
-        verify(mAlarmManager, times(1)).setExactAndAllowWhileIdle(anyInt(), anyLong(), any());
     }
 
     @Test
-    public void testRemoveFilePathFromHistory_hasMatch() throws Exception {
+    public void testRemoveFilePathFromHistory_hasMatch() {
         for (int i = 0; i < 5; i++) {
             AtomicFile af = mock(AtomicFile.class);
             when(af.getBaseFile()).thenReturn(new File(mRootDir, "af" + i));
@@ -436,7 +423,7 @@
     }
 
     @Test
-    public void testRemoveFilePathFromHistory_noMatch() throws Exception {
+    public void testRemoveFilePathFromHistory_noMatch() {
         for (int i = 0; i < 5; i++) {
             AtomicFile af = mock(AtomicFile.class);
             when(af.getBaseFile()).thenReturn(new File(mRootDir, "af" + i));
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryJobServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryJobServiceTest.java
new file mode 100644
index 0000000..af10b9d
--- /dev/null
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationHistoryJobServiceTest.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.notification;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertTrue;
+import static junit.framework.TestCase.assertFalse;
+
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.timeout;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.job.JobInfo;
+import android.app.job.JobParameters;
+import android.app.job.JobScheduler;
+import android.app.job.JobService;
+import android.app.job.JobServiceEngine;
+import android.testing.AndroidTestingRunner;
+
+import androidx.test.rule.ServiceTestRule;
+
+import com.android.server.LocalServices;
+import com.android.server.UiServiceTestCase;
+
+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 java.lang.reflect.Field;
+
+@RunWith(AndroidTestingRunner.class)
+public class NotificationHistoryJobServiceTest extends UiServiceTestCase {
+    private NotificationHistoryJobService mJobService;
+    private JobParameters mJobParams = new JobParameters(null,
+            NotificationHistoryJobService.BASE_JOB_ID, null, null, null,
+            0, false, false, null, null, null);
+
+    @Captor
+    ArgumentCaptor<JobInfo> mJobInfoCaptor;
+
+    @Mock
+    private JobScheduler mMockJobScheduler;
+
+    @Mock
+    private NotificationManagerInternal mMockNotificationManagerInternal;
+
+    @Rule
+    public final ServiceTestRule mServiceRule = new ServiceTestRule();
+
+    @Before
+    public void setUp() throws Exception {
+        mJobService = new NotificationHistoryJobService();
+
+        final Field field = JobService.class.getDeclaredField("mEngine");
+        field.setAccessible(true);
+        field.set(mJobService, mock(JobServiceEngine.class));
+        mContext.addMockSystemService(JobScheduler.class, mMockJobScheduler);
+
+        // add NotificationManagerInternal to LocalServices
+        LocalServices.removeServiceForTest(NotificationManagerInternal.class);
+        LocalServices.addService(NotificationManagerInternal.class,
+                mMockNotificationManagerInternal);
+    }
+
+    @Test
+    public void testScheduleJob() {
+        // if asked, the job doesn't currently exist yet
+        when(mMockJobScheduler.getPendingJob(anyInt())).thenReturn(null);
+
+        // attempt to schedule the job
+        NotificationHistoryJobService.scheduleJob(mContext);
+        verify(mMockJobScheduler, times(1)).schedule(mJobInfoCaptor.capture());
+
+        // verify various properties of the job that is passed in to the job scheduler
+        JobInfo jobInfo = mJobInfoCaptor.getValue();
+        assertEquals(NotificationHistoryJobService.BASE_JOB_ID, jobInfo.getId());
+        assertFalse(jobInfo.isPersisted());
+        assertTrue(jobInfo.isPeriodic());
+    }
+
+    @Test
+    public void testOnStartJob() {
+        assertTrue(mJobService.onStartJob(mJobParams));
+
+        verify(mMockNotificationManagerInternal, timeout(500).atLeastOnce()).cleanupHistoryFiles();
+    }
+}
\ No newline at end of file
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 76d4059..c5131c8 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenersTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenersTest.java
@@ -28,6 +28,7 @@
 import static junit.framework.Assert.assertTrue;
 
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.ArgumentMatchers.nullable;
 import static org.mockito.Mockito.atLeast;
@@ -40,6 +41,9 @@
 import static org.mockito.Mockito.when;
 
 import android.app.INotificationManager;
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
 import android.content.ComponentName;
 import android.content.pm.IPackageManager;
 import android.content.pm.PackageManager;
@@ -49,6 +53,7 @@
 import android.os.UserHandle;
 import android.service.notification.NotificationListenerFilter;
 import android.service.notification.NotificationListenerService;
+import android.service.notification.NotificationRankingUpdate;
 import android.service.notification.NotificationStats;
 import android.service.notification.StatusBarNotification;
 import android.testing.TestableContext;
@@ -60,6 +65,8 @@
 
 import com.android.server.UiServiceTestCase;
 
+import com.google.common.collect.ImmutableList;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
@@ -397,6 +404,36 @@
     }
 
     @Test
+    public void testImplicitGrant() {
+        String pkg = "pkg";
+        int uid = 9;
+        NotificationChannel channel = new NotificationChannel("id", "name",
+                NotificationManager.IMPORTANCE_HIGH);
+        Notification.Builder nb = new Notification.Builder(mContext, channel.getId())
+                .setContentTitle("foo")
+                .setSmallIcon(android.R.drawable.sym_def_app_icon)
+                .setTimeoutAfter(1);
+
+        StatusBarNotification sbn = new StatusBarNotification(pkg, pkg, 8, "tag", uid, 0,
+                nb.build(), UserHandle.getUserHandleForUid(uid), null, 0);
+        NotificationRecord r = new NotificationRecord(mContext, sbn, channel);
+
+        ManagedServices.ManagedServiceInfo info = mListeners.new ManagedServiceInfo(
+                null, new ComponentName("a", "a"), sbn.getUserId(), false, null, 33, 33);
+        List<ManagedServices.ManagedServiceInfo> services = ImmutableList.of(info);
+        when(mListeners.getServices()).thenReturn(services);
+
+        when(mNm.isVisibleToListener(any(), anyInt(), any())).thenReturn(true);
+        when(mNm.makeRankingUpdateLocked(info)).thenReturn(mock(NotificationRankingUpdate.class));
+        mNm.mPackageManagerInternal = mPmi;
+
+        mListeners.notifyPostedLocked(r, null);
+
+        verify(mPmi).grantImplicitAccess(sbn.getUserId(), null, UserHandle.getAppId(33),
+                sbn.getUid(), false, false);
+    }
+
+    @Test
     public void testNotifyPostedLockedInLockdownMode() {
         NotificationRecord r = mock(NotificationRecord.class);
         NotificationRecord old = mock(NotificationRecord.class);
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 22721a1..443ed58 100755
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
@@ -3380,19 +3380,80 @@
     }
 
     @Test
-    public void testSnoozeRunnable_reSnoozeASingleSnoozedNotification() throws Exception {
+    public void testSnoozeRunnable_tooManySnoozed_singleNotification() {
+        final NotificationRecord notification = generateNotificationRecord(
+                mTestNotificationChannel, 1, null, true);
+        mService.addNotification(notification);
+
+        when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true);
+        when(mSnoozeHelper.canSnooze(1)).thenReturn(false);
+
+        NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable =
+                mService.new SnoozeNotificationRunnable(
+                        notification.getKey(), 100, null);
+        snoozeNotificationRunnable.run();
+
+        verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong());
+        assertThat(mService.getNotificationRecordCount()).isEqualTo(1);
+    }
+
+    @Test
+    public void testSnoozeRunnable_tooManySnoozed_singleGroupChildNotification() {
+        final NotificationRecord notification = generateNotificationRecord(
+                mTestNotificationChannel, 1, "group", true);
+        final NotificationRecord notificationChild = generateNotificationRecord(
+                mTestNotificationChannel, 1, "group", false);
+        mService.addNotification(notification);
+        mService.addNotification(notificationChild);
+
+        when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true);
+        when(mSnoozeHelper.canSnooze(2)).thenReturn(false);
+
+        NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable =
+                mService.new SnoozeNotificationRunnable(
+                        notificationChild.getKey(), 100, null);
+        snoozeNotificationRunnable.run();
+
+        verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong());
+        assertThat(mService.getNotificationRecordCount()).isEqualTo(2);
+    }
+
+    @Test
+    public void testSnoozeRunnable_tooManySnoozed_summaryNotification() {
+        final NotificationRecord notification = generateNotificationRecord(
+                mTestNotificationChannel, 1, "group", true);
+        final NotificationRecord notificationChild = generateNotificationRecord(
+                mTestNotificationChannel, 12, "group", false);
+        final NotificationRecord notificationChild2 = generateNotificationRecord(
+                mTestNotificationChannel, 13, "group", false);
+        mService.addNotification(notification);
+        mService.addNotification(notificationChild);
+        mService.addNotification(notificationChild2);
+
+        when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true);
+        when(mSnoozeHelper.canSnooze(3)).thenReturn(false);
+
+        NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable =
+                mService.new SnoozeNotificationRunnable(
+                        notification.getKey(), 100, null);
+        snoozeNotificationRunnable.run();
+
+        verify(mSnoozeHelper, never()).snooze(any(NotificationRecord.class), anyLong());
+        assertThat(mService.getNotificationRecordCount()).isEqualTo(3);
+    }
+
+    @Test
+    public void testSnoozeRunnable_reSnoozeASingleSnoozedNotification() {
         final NotificationRecord notification = generateNotificationRecord(
                 mTestNotificationChannel, 1, null, true);
         mService.addNotification(notification);
         when(mSnoozeHelper.getNotification(any())).thenReturn(notification);
+        when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true);
 
         NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable =
                 mService.new SnoozeNotificationRunnable(
                 notification.getKey(), 100, null);
         snoozeNotificationRunnable.run();
-        NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 =
-                mService.new SnoozeNotificationRunnable(
-                notification.getKey(), 100, null);
         snoozeNotificationRunnable.run();
 
         // snooze twice
@@ -3400,19 +3461,17 @@
     }
 
     @Test
-    public void testSnoozeRunnable_reSnoozeASnoozedNotificationWithGroupKey() throws Exception {
+    public void testSnoozeRunnable_reSnoozeASnoozedNotificationWithGroupKey() {
         final NotificationRecord notification = generateNotificationRecord(
                 mTestNotificationChannel, 1, "group", true);
         mService.addNotification(notification);
         when(mSnoozeHelper.getNotification(any())).thenReturn(notification);
+        when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true);
 
         NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable =
                 mService.new SnoozeNotificationRunnable(
                 notification.getKey(), 100, null);
         snoozeNotificationRunnable.run();
-        NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 =
-                mService.new SnoozeNotificationRunnable(
-                notification.getKey(), 100, null);
         snoozeNotificationRunnable.run();
 
         // snooze twice
@@ -3430,6 +3489,7 @@
         when(mSnoozeHelper.getNotification(any())).thenReturn(notification);
         when(mSnoozeHelper.getNotifications(
                 anyString(), anyString(), anyInt())).thenReturn(new ArrayList<>());
+        when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true);
 
         NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable =
                 mService.new SnoozeNotificationRunnable(
@@ -3439,8 +3499,8 @@
                 .thenReturn(new ArrayList<>(Arrays.asList(notification, notification2)));
         NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable2 =
                 mService.new SnoozeNotificationRunnable(
-                        notification.getKey(), 100, null);
-        snoozeNotificationRunnable.run();
+                        notification2.getKey(), 100, null);
+        snoozeNotificationRunnable2.run();
 
         // snooze twice
         verify(mSnoozeHelper, times(4)).snooze(any(NotificationRecord.class), anyLong());
@@ -3454,6 +3514,7 @@
                 mTestNotificationChannel, 2, "group", false);
         mService.addNotification(grouped);
         mService.addNotification(nonGrouped);
+        when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true);
 
         NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable =
                 mService.new SnoozeNotificationRunnable(
@@ -3483,6 +3544,7 @@
         mService.addNotification(parent);
         mService.addNotification(child);
         mService.addNotification(child2);
+        when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true);
 
         NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable =
                 mService.new SnoozeNotificationRunnable(
@@ -3504,6 +3566,7 @@
         mService.addNotification(parent);
         mService.addNotification(child);
         mService.addNotification(child2);
+        when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true);
 
         NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable =
                 mService.new SnoozeNotificationRunnable(
@@ -3529,6 +3592,7 @@
                 mTestNotificationChannel, 2, "group", false);
         mService.addNotification(parent);
         mService.addNotification(child);
+        when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true);
 
         NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable =
                 mService.new SnoozeNotificationRunnable(
@@ -3556,6 +3620,7 @@
         final NotificationRecord child = generateNotificationRecord(
                 mTestNotificationChannel, 2, "group", false);
         mService.addNotification(child);
+        when(mSnoozeHelper.canSnooze(anyInt())).thenReturn(true);
 
         NotificationManagerService.SnoozeNotificationRunnable snoozeNotificationRunnable =
                 mService.new SnoozeNotificationRunnable(
@@ -8304,7 +8369,7 @@
     public void testOnUnlockUser() {
         UserInfo ui = new UserInfo();
         ui.id = 10;
-        mService.onUserUnlocking(new TargetUser(ui));
+        mService.onUserUnlocked(new TargetUser(ui));
         waitForIdle();
 
         verify(mHistoryManager, timeout(MAX_POST_DELAY).times(1)).onUserUnlocked(ui.id);
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/PermissionHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/PermissionHelperTest.java
index 4c7e843..f2b1dc9 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/PermissionHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/PermissionHelperTest.java
@@ -18,6 +18,7 @@
 import static android.content.pm.PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT;
 import static android.content.pm.PackageManager.FLAG_PERMISSION_POLICY_FIXED;
 import static android.content.pm.PackageManager.FLAG_PERMISSION_SYSTEM_FIXED;
+import static android.content.pm.PackageManager.FLAG_PERMISSION_USER_FIXED;
 import static android.content.pm.PackageManager.FLAG_PERMISSION_USER_SET;
 import static android.content.pm.PackageManager.GET_PERMISSIONS;
 import static android.content.pm.PackageManager.PERMISSION_DENIED;
@@ -74,6 +75,8 @@
 
     private PermissionHelper mPermissionHelper;
 
+    private static final int USER_FLAG_MASK = FLAG_PERMISSION_USER_SET | FLAG_PERMISSION_USER_FIXED;
+
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
@@ -183,7 +186,8 @@
         verify(mPermManager).grantRuntimePermission(
                 "pkg", Manifest.permission.POST_NOTIFICATIONS, 10);
         verify(mPermManager).updatePermissionFlags("pkg", Manifest.permission.POST_NOTIFICATIONS,
-                FLAG_PERMISSION_USER_SET, FLAG_PERMISSION_USER_SET, true, 10);
+                USER_FLAG_MASK | FLAG_PERMISSION_GRANTED_BY_DEFAULT,
+                FLAG_PERMISSION_USER_SET, true, 10);
     }
 
     @Test
@@ -201,7 +205,8 @@
         verify(mPermManager).grantRuntimePermission(
                 "pkg", Manifest.permission.POST_NOTIFICATIONS, 10);
         verify(mPermManager).updatePermissionFlags("pkg", Manifest.permission.POST_NOTIFICATIONS,
-                FLAG_PERMISSION_USER_SET, FLAG_PERMISSION_USER_SET, true, 10);
+                USER_FLAG_MASK | FLAG_PERMISSION_GRANTED_BY_DEFAULT,
+                FLAG_PERMISSION_USER_SET, true, 10);
     }
 
     @Test
@@ -214,7 +219,8 @@
         verify(mPermManager).revokeRuntimePermission(
                 eq("pkg"), eq(Manifest.permission.POST_NOTIFICATIONS), eq(10), anyString());
         verify(mPermManager).updatePermissionFlags("pkg", Manifest.permission.POST_NOTIFICATIONS,
-                FLAG_PERMISSION_USER_SET, FLAG_PERMISSION_USER_SET, true, 10);
+                USER_FLAG_MASK | FLAG_PERMISSION_GRANTED_BY_DEFAULT,
+                FLAG_PERMISSION_USER_SET, true, 10);
     }
 
     @Test
@@ -227,7 +233,7 @@
         verify(mPermManager).grantRuntimePermission(
                 "pkg", Manifest.permission.POST_NOTIFICATIONS, 10);
         verify(mPermManager).updatePermissionFlags("pkg", Manifest.permission.POST_NOTIFICATIONS,
-                0, FLAG_PERMISSION_USER_SET, true, 10);
+                USER_FLAG_MASK, 0, true, 10);
     }
 
     @Test
@@ -240,7 +246,8 @@
         verify(mPermManager).revokeRuntimePermission(
                 eq("pkg"), eq(Manifest.permission.POST_NOTIFICATIONS), eq(10), anyString());
         verify(mPermManager).updatePermissionFlags("pkg", Manifest.permission.POST_NOTIFICATIONS,
-                0, FLAG_PERMISSION_USER_SET, true, 10);
+                USER_FLAG_MASK | FLAG_PERMISSION_GRANTED_BY_DEFAULT, 0,
+                true, 10);
     }
 
     @Test
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java
index 2ae2ef7..7817e81 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/SnoozeHelperTest.java
@@ -15,10 +15,12 @@
  */
 package com.android.server.notification;
 
+import static com.android.server.notification.SnoozeHelper.CONCURRENT_SNOOZE_LIMIT;
 import static com.android.server.notification.SnoozeHelper.EXTRA_KEY;
 
 import static junit.framework.Assert.assertEquals;
 import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertNotNull;
 import static junit.framework.Assert.assertNull;
 import static junit.framework.Assert.assertTrue;
 
@@ -38,7 +40,6 @@
 import android.app.NotificationChannel;
 import android.app.NotificationManager;
 import android.app.PendingIntent;
-import android.os.SystemClock;
 import android.os.UserHandle;
 import android.service.notification.StatusBarNotification;
 import android.test.suitebuilder.annotation.SmallTest;
@@ -49,7 +50,6 @@
 
 import androidx.test.runner.AndroidJUnit4;
 
-import com.android.internal.util.FastXmlSerializer;
 import com.android.server.UiServiceTestCase;
 import com.android.server.pm.PackageManagerService;
 
@@ -59,9 +59,7 @@
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
-import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
-import org.xmlpull.v1.XmlSerializer;
 
 import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
@@ -197,18 +195,6 @@
     }
 
     @Test
-    public void testCleanupContextShouldRemovePersistedRecord() {
-        NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM);
-        mSnoozeHelper.snooze(r, "context");
-        mSnoozeHelper.cleanupPersistedContext(r.getSbn().getKey());
-        assertNull(mSnoozeHelper.getSnoozeContextForUnpostedNotification(
-                r.getUser().getIdentifier(),
-                r.getSbn().getPackageName(),
-                r.getSbn().getKey()
-        ));
-    }
-
-    @Test
     public void testReadNoneSnoozedNotification() throws XmlPullParserException,
             IOException, InterruptedException {
         NotificationRecord r = getNotificationRecord(
@@ -218,8 +204,9 @@
         assertEquals("should see a zero value for unsnoozed notification",
                 0L,
                 mSnoozeHelper.getSnoozeTimeForUnpostedNotification(
-                        UserHandle.SYSTEM.getIdentifier(),
-                        "not_my_package", r.getKey()).longValue());
+                        UserHandle.SYSTEM.getIdentifier(), "not_my_package",
+                        getNotificationRecord("not_my_package", 1, "one",
+                                UserHandle.SYSTEM).getKey()).longValue());
     }
 
     @Test
@@ -281,6 +268,22 @@
     }
 
     @Test
+    public void testSnoozeLimit() {
+        for (int i = 0; i < CONCURRENT_SNOOZE_LIMIT; i++ ) {
+            NotificationRecord r = getNotificationRecord("pkg", i, i+"", UserHandle.SYSTEM);
+
+            assertTrue("cannot snooze record " + i, mSnoozeHelper.canSnooze(1));
+
+            if (i % 2 == 0) {
+                mSnoozeHelper.snooze(r, null);
+            } else {
+                mSnoozeHelper.snooze(r, 9000);
+            }
+        }
+        assertFalse(mSnoozeHelper.canSnooze(1));
+    }
+
+    @Test
     public void testCancelByApp() throws Exception {
         NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM);
         NotificationRecord r2 = getNotificationRecord("pkg", 2, "two", UserHandle.SYSTEM);
@@ -575,7 +578,7 @@
     }
 
     @Test
-    public void testClearData() {
+    public void testClearData_userPackage() {
         // snooze 2 from same package
         NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM);
         NotificationRecord r2 = getNotificationRecord("pkg", 2, "two", UserHandle.SYSTEM);
@@ -599,17 +602,72 @@
     }
 
     @Test
+    public void testClearData_user() {
+        // snooze 2 from same package
+        NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM);
+        NotificationRecord r2 = getNotificationRecord("pkg2", 2, "two", UserHandle.SYSTEM);
+        NotificationRecord r3 = getNotificationRecord("pkg2", 3, "three", UserHandle.SYSTEM);
+        NotificationRecord r4 = getNotificationRecord("pkg", 2, "two", UserHandle.ALL);
+        mSnoozeHelper.snooze(r, 1000);
+        mSnoozeHelper.snooze(r2, 1000);
+        mSnoozeHelper.snooze(r3, "until");
+        mSnoozeHelper.snooze(r4, "until");
+
+        assertTrue(mSnoozeHelper.isSnoozed(
+                UserHandle.USER_SYSTEM, r.getSbn().getPackageName(), r.getKey()));
+        assertTrue(mSnoozeHelper.isSnoozed(
+                UserHandle.USER_SYSTEM, r2.getSbn().getPackageName(), r2.getKey()));
+        assertTrue(mSnoozeHelper.isSnoozed(
+                UserHandle.USER_SYSTEM, r3.getSbn().getPackageName(), r3.getKey()));
+        assertTrue(mSnoozeHelper.isSnoozed(
+                UserHandle.USER_ALL, r4.getSbn().getPackageName(), r4.getKey()));
+
+        // clear data
+        mSnoozeHelper.clearData(UserHandle.USER_SYSTEM);
+
+        // nothing in USER_SYSTEM snoozed; alarms canceled
+        assertFalse(mSnoozeHelper.isSnoozed(
+                UserHandle.USER_SYSTEM, r.getSbn().getPackageName(), r.getKey()));
+        assertFalse(mSnoozeHelper.isSnoozed(
+                UserHandle.USER_SYSTEM, r2.getSbn().getPackageName(), r2.getKey()));
+        assertFalse(mSnoozeHelper.isSnoozed(
+                UserHandle.USER_SYSTEM, r3.getSbn().getPackageName(), r3.getKey()));
+        assertTrue(mSnoozeHelper.isSnoozed(
+                UserHandle.USER_SYSTEM, r4.getSbn().getPackageName(), r4.getKey()));
+
+        assertNull(mSnoozeHelper.getSnoozeContextForUnpostedNotification(
+                r3.getUser().getIdentifier(), r3.getSbn().getPackageName(),
+                r3.getSbn().getKey()));
+        assertNotNull(mSnoozeHelper.getSnoozeContextForUnpostedNotification(
+                r4.getUser().getIdentifier(), r4.getSbn().getPackageName(),
+                r4.getSbn().getKey()));
+        assertEquals(0L, mSnoozeHelper.getSnoozeTimeForUnpostedNotification(
+                r.getUser().getIdentifier(), r.getSbn().getPackageName(),
+                r.getSbn().getKey()).longValue());
+        assertEquals(0L, mSnoozeHelper.getSnoozeTimeForUnpostedNotification(
+                r2.getUser().getIdentifier(), r2.getSbn().getPackageName(),
+                r2.getSbn().getKey()).longValue());
+
+        // 2 for initial timed-snoozes, once each for canceling the USER_SYSTEM snoozes
+        verify(mAm, times(5)).cancel(any(PendingIntent.class));
+    }
+
+    @Test
     public void testClearData_otherRecordsUntouched() {
         // 2 packages, 2 users
         NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM);
+        NotificationRecord rb = getNotificationRecord("pkg", 1, "oneb", UserHandle.SYSTEM);
         NotificationRecord r2 = getNotificationRecord("pkg", 2, "two", UserHandle.ALL);
         NotificationRecord r3 = getNotificationRecord("pkg2", 3, "three", UserHandle.SYSTEM);
         mSnoozeHelper.snooze(r, 1000);
+        mSnoozeHelper.snooze(rb, "until");
         mSnoozeHelper.snooze(r2, 1000);
         mSnoozeHelper.snooze(r3, 1000);
         assertTrue(mSnoozeHelper.isSnoozed(
                 UserHandle.USER_SYSTEM, r.getSbn().getPackageName(), r.getKey()));
         assertTrue(mSnoozeHelper.isSnoozed(
+                UserHandle.USER_SYSTEM, rb.getSbn().getPackageName(), rb.getKey()));
+        assertTrue(mSnoozeHelper.isSnoozed(
                 UserHandle.USER_ALL, r2.getSbn().getPackageName(), r2.getKey()));
         assertTrue(mSnoozeHelper.isSnoozed(
                 UserHandle.USER_SYSTEM, r3.getSbn().getPackageName(), r3.getKey()));
@@ -619,12 +677,22 @@
 
         assertFalse(mSnoozeHelper.isSnoozed(
                 UserHandle.USER_SYSTEM, r.getSbn().getPackageName(), r.getKey()));
+        assertFalse(mSnoozeHelper.isSnoozed(
+                UserHandle.USER_SYSTEM, rb.getSbn().getPackageName(), rb.getKey()));
         assertTrue(mSnoozeHelper.isSnoozed(
                 UserHandle.USER_ALL, r2.getSbn().getPackageName(), r2.getKey()));
         assertTrue(mSnoozeHelper.isSnoozed(
                 UserHandle.USER_SYSTEM, r3.getSbn().getPackageName(), r3.getKey()));
+
+        assertNull(mSnoozeHelper.getSnoozeContextForUnpostedNotification(
+                rb.getUser().getIdentifier(), rb.getSbn().getPackageName(),
+                rb.getSbn().getKey()));
+        assertEquals(0L, mSnoozeHelper.getSnoozeTimeForUnpostedNotification(
+                r.getUser().getIdentifier(), r.getSbn().getPackageName(),
+                r.getSbn().getKey()).longValue());
+
         // once for each initial snooze, once for canceling one snooze
-        verify(mAm, times(4)).cancel(any(PendingIntent.class));
+        verify(mAm, times(5)).cancel(any(PendingIntent.class));
     }
 
     private NotificationRecord getNotificationRecord(String pkg, int id, String tag,
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
index fd1536c..4550b56 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
@@ -1622,7 +1622,9 @@
                     ZenModeConfig.toScheduleConditionId(si),
                     new ZenPolicy.Builder().build(),
                     NotificationManager.INTERRUPTION_FILTER_PRIORITY, true);
-            String id = mZenModeHelperSpy.addAutomaticZenRule("android", zenRule, "test");
+            // We need the package name to be something that's not "android" so there aren't any
+            // existing rules under that package.
+            String id = mZenModeHelperSpy.addAutomaticZenRule("pkgname", zenRule, "test");
             assertNotNull(id);
         }
         try {
@@ -1632,12 +1634,41 @@
                     ZenModeConfig.toScheduleConditionId(new ScheduleInfo()),
                     new ZenPolicy.Builder().build(),
                     NotificationManager.INTERRUPTION_FILTER_PRIORITY, true);
-            String id = mZenModeHelperSpy.addAutomaticZenRule("android", zenRule, "test");
+            String id = mZenModeHelperSpy.addAutomaticZenRule("pkgname", zenRule, "test");
             fail("allowed too many rules to be created");
         } catch (IllegalArgumentException e) {
             // yay
         }
+    }
 
+    @Test
+    public void testAddAutomaticZenRule_beyondSystemLimit_differentComponents() {
+        // Make sure the system limit is enforced per-package even with different component provider
+        // names.
+        for (int i = 0; i < RULE_LIMIT_PER_PACKAGE; i++) {
+            ScheduleInfo si = new ScheduleInfo();
+            si.startHour = i;
+            AutomaticZenRule zenRule = new AutomaticZenRule("name" + i,
+                    null,
+                    new ComponentName("android", "ScheduleConditionProvider" + i),
+                    ZenModeConfig.toScheduleConditionId(si),
+                    new ZenPolicy.Builder().build(),
+                    NotificationManager.INTERRUPTION_FILTER_PRIORITY, true);
+            String id = mZenModeHelperSpy.addAutomaticZenRule("pkgname", zenRule, "test");
+            assertNotNull(id);
+        }
+        try {
+            AutomaticZenRule zenRule = new AutomaticZenRule("name",
+                    null,
+                    new ComponentName("android", "ScheduleConditionProviderFinal"),
+                    ZenModeConfig.toScheduleConditionId(new ScheduleInfo()),
+                    new ZenPolicy.Builder().build(),
+                    NotificationManager.INTERRUPTION_FILTER_PRIORITY, true);
+            String id = mZenModeHelperSpy.addAutomaticZenRule("pkgname", zenRule, "test");
+            fail("allowed too many rules to be created");
+        } catch (IllegalArgumentException e) {
+            // yay
+        }
     }
 
     @Test
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 6fafa49..7c46fd6 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
@@ -29,6 +29,8 @@
 import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
 import static android.content.pm.ActivityInfo.CONFIG_ORIENTATION;
 import static android.content.pm.ActivityInfo.CONFIG_SCREEN_LAYOUT;
+import static android.content.pm.ActivityInfo.CONFIG_SCREEN_SIZE;
+import static android.content.pm.ActivityInfo.CONFIG_SMALLEST_SCREEN_SIZE;
 import static android.content.pm.ActivityInfo.FLAG_SUPPORTS_PICTURE_IN_PICTURE;
 import static android.content.pm.ActivityInfo.LOCK_TASK_LAUNCH_MODE_ALWAYS;
 import static android.content.pm.ActivityInfo.LOCK_TASK_LAUNCH_MODE_DEFAULT;
@@ -182,6 +184,10 @@
 
     private final String mPackageName = getInstrumentation().getTargetContext().getPackageName();
 
+    private static final int ORIENTATION_CONFIG_CHANGES =
+            CONFIG_ORIENTATION | CONFIG_SCREEN_LAYOUT | CONFIG_SCREEN_SIZE
+                    | CONFIG_SMALLEST_SCREEN_SIZE;
+
     @Before
     public void setUp() throws Exception {
         setBooted(mAtm);
@@ -487,7 +493,7 @@
     public void testSetRequestedOrientationUpdatesConfiguration() throws Exception {
         final ActivityRecord activity = new ActivityBuilder(mAtm)
                 .setCreateTask(true)
-                .setConfigChanges(CONFIG_ORIENTATION | CONFIG_SCREEN_LAYOUT)
+                .setConfigChanges(ORIENTATION_CONFIG_CHANGES)
                 .build();
         activity.setState(RESUMED, "Testing");
 
@@ -710,7 +716,7 @@
         final ActivityRecord activity = new ActivityBuilder(mAtm)
                 .setCreateTask(true)
                 .setLaunchTaskBehind(true)
-                .setConfigChanges(CONFIG_ORIENTATION | CONFIG_SCREEN_LAYOUT)
+                .setConfigChanges(ORIENTATION_CONFIG_CHANGES)
                 .build();
         final Task task = activity.getTask();
         activity.setState(STOPPED, "Testing");
@@ -1160,6 +1166,45 @@
         assertTrue(lastTransition.allReady());
     }
 
+    @Test
+    public void testFinishActivityIfPossible_sendResultImmediately() {
+        // Create activity representing the source of the activity result.
+        final ComponentName sourceComponent = ComponentName.createRelative(
+                DEFAULT_COMPONENT_PACKAGE_NAME, ".SourceActivity");
+        final ComponentName targetComponent = ComponentName.createRelative(
+                sourceComponent.getPackageName(), ".TargetActivity");
+
+        final ActivityRecord sourceActivity = new ActivityBuilder(mWm.mAtmService)
+                .setComponent(sourceComponent)
+                .setLaunchMode(ActivityInfo.LAUNCH_SINGLE_INSTANCE)
+                .setCreateTask(true)
+                .build();
+        sourceActivity.finishing = false;
+        sourceActivity.setState(STOPPED, "test");
+
+        final ActivityRecord targetActivity = new ActivityBuilder(mWm.mAtmService)
+                .setComponent(targetComponent)
+                .setTargetActivity(sourceComponent.getClassName())
+                .setLaunchMode(ActivityInfo.LAUNCH_SINGLE_INSTANCE)
+                .setCreateTask(true)
+                .setOnTop(true)
+                .build();
+        targetActivity.finishing = false;
+        targetActivity.setState(RESUMED, "test");
+        targetActivity.resultTo = sourceActivity;
+        targetActivity.setForceSendResultForMediaProjection();
+
+        clearInvocations(mAtm.getLifecycleManager());
+
+        targetActivity.finishIfPossible(0, new Intent(), null, "test", false /* oomAdj */);
+
+        try {
+            verify(mAtm.getLifecycleManager(), atLeastOnce()).scheduleTransaction(
+                    any(ClientTransaction.class));
+        } catch (RemoteException ignored) {
+        }
+    }
+
     /**
      * Verify that complete finish request for non-finishing activity is invalid.
      */
@@ -1786,13 +1831,16 @@
     public void testActivityOnCancelFixedRotationTransform() {
         final ActivityRecord activity = createActivityWithTask();
         final DisplayRotation displayRotation = activity.mDisplayContent.getDisplayRotation();
+        final RemoteDisplayChangeController remoteDisplayChangeController = activity
+                .mDisplayContent.mRemoteDisplayChangeController;
         spyOn(displayRotation);
+        spyOn(remoteDisplayChangeController);
 
         final DisplayContent display = activity.mDisplayContent;
         final int originalRotation = display.getRotation();
 
         // Make {@link DisplayContent#sendNewConfiguration} not apply rotation immediately.
-        doReturn(true).when(displayRotation).isWaitingForRemoteRotation();
+        doReturn(true).when(remoteDisplayChangeController).isWaitingForRemoteDisplayChange();
         doReturn((originalRotation + 1) % 4).when(displayRotation).rotationForOrientation(
                 anyInt() /* orientation */, anyInt() /* lastRotation */);
         // Set to visible so the activity can freeze the screen.
@@ -1830,7 +1878,7 @@
         // Simulate the remote rotation has completed and the configuration doesn't change, then
         // the rotated activity should also be restored by clearing the transform.
         displayRotation.updateRotationUnchecked(true /* forceUpdate */);
-        doReturn(false).when(displayRotation).isWaitingForRemoteRotation();
+        doReturn(false).when(remoteDisplayChangeController).isWaitingForRemoteDisplayChange();
         clearInvocations(activity);
         display.setFixedRotationLaunchingAppUnchecked(activity);
         display.sendNewConfiguration();
@@ -1954,7 +2002,8 @@
                     any() /* window */,  any() /* attrs */,
                     anyInt() /* viewVisibility */, anyInt() /* displayId */,
                     any() /* requestedVisibilities */, any() /* outInputChannel */,
-                    any() /* outInsetsState */, any() /* outActiveControls */);
+                    any() /* outInsetsState */, any() /* outActiveControls */,
+                    any() /* outAttachedFrame */, any() /* outSizeCompatScale */);
             mAtm.mWindowManager.mStartingSurfaceController
                     .createTaskSnapshotSurface(activity, snapshot);
         } catch (RemoteException ignored) {
@@ -2165,39 +2214,6 @@
     }
 
     @Test
-    public void testSupportsSplitScreenWindowingMode() {
-        final ActivityRecord activity = new ActivityBuilder(mAtm)
-                .setCreateTask(true)
-                .setResizeMode(ActivityInfo.RESIZE_MODE_UNRESIZEABLE)
-                .setScreenOrientation(SCREEN_ORIENTATION_LANDSCAPE)
-                .build();
-
-        // Not allow non-resizable
-        mAtm.mForceResizableActivities = false;
-        mAtm.mSupportsNonResizableMultiWindow = -1;
-        mAtm.mDevEnableNonResizableMultiWindow = false;
-        assertFalse(activity.supportsSplitScreenWindowingMode());
-
-        // Force resizable
-        mAtm.mForceResizableActivities = true;
-        mAtm.mSupportsNonResizableMultiWindow = -1;
-        mAtm.mDevEnableNonResizableMultiWindow = false;
-        assertTrue(activity.supportsSplitScreenWindowingMode());
-
-        // Use development option to allow non-resizable
-        mAtm.mForceResizableActivities = false;
-        mAtm.mSupportsNonResizableMultiWindow = -1;
-        mAtm.mDevEnableNonResizableMultiWindow = true;
-        assertTrue(activity.supportsSplitScreenWindowingMode());
-
-        // Always allow non-resizable
-        mAtm.mForceResizableActivities = false;
-        mAtm.mSupportsNonResizableMultiWindow = 1;
-        mAtm.mDevEnableNonResizableMultiWindow = false;
-        assertTrue(activity.supportsSplitScreenWindowingMode());
-    }
-
-    @Test
     public void testSupportsFreeform() {
         final ActivityRecord activity = new ActivityBuilder(mAtm)
                 .setCreateTask(true)
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 73e409a..1575336 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityStartInterceptorTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStartInterceptorTest.java
@@ -192,7 +192,7 @@
                 .thenReturn(PLATFORM_PACKAGE_NAME);
 
         // THEN calling intercept returns true
-        assertTrue(mInterceptor.intercept(null, null, mAInfo, null, null, 0, 0, null));
+        assertTrue(mInterceptor.intercept(null, null, mAInfo, null, null, null, 0, 0, null));
 
         // THEN the returned intent is the admin support intent
         assertEquals(ADMIN_SUPPORT_INTENT, mInterceptor.mIntent);
@@ -203,7 +203,7 @@
         final String suspendingPackage = "com.test.suspending.package";
         final SuspendDialogInfo dialogInfo = suspendPackage(suspendingPackage);
         // THEN calling intercept returns true
-        assertTrue(mInterceptor.intercept(null, null, mAInfo, null, null, 0, 0, null));
+        assertTrue(mInterceptor.intercept(null, null, mAInfo, null, null, null, 0, 0, null));
 
         // Check intent parameters
         assertEquals(dialogInfo,
@@ -234,7 +234,7 @@
                 TEST_USER_ID, TEST_PACKAGE_NAME, LOCK_TASK_LAUNCH_MODE_DEFAULT))
                 .thenReturn(false);
 
-        assertTrue(mInterceptor.intercept(null, null, mAInfo, null, null, 0, 0, null));
+        assertTrue(mInterceptor.intercept(null, null, mAInfo, null, null, null, 0, 0, null));
 
         assertTrue(BlockedAppActivity.createIntent(TEST_USER_ID, TEST_PACKAGE_NAME)
                 .filterEquals(mInterceptor.mIntent));
@@ -246,7 +246,7 @@
         when(mUserManager.isQuietModeEnabled(eq(UserHandle.of(TEST_USER_ID)))).thenReturn(true);
 
         // THEN calling intercept returns true
-        assertTrue(mInterceptor.intercept(null, null, mAInfo, null, null, 0, 0, null));
+        assertTrue(mInterceptor.intercept(null, null, mAInfo, null, null,  null, 0, 0, null));
 
         // THEN the returned intent is the quiet mode intent
         assertTrue(UnlaunchableAppActivity.createInQuietModeDialogIntent(TEST_USER_ID)
@@ -260,7 +260,7 @@
         when(mUserManager.isQuietModeEnabled(eq(UserHandle.of(TEST_USER_ID)))).thenReturn(true);
 
         // THEN calling intercept returns true
-        assertTrue(mInterceptor.intercept(null, null, mAInfo, null, null, 0, 0, null));
+        assertTrue(mInterceptor.intercept(null, null, mAInfo, null, null, null, 0, 0, null));
 
         // THEN the returned intent is the quiet mode intent
         assertTrue(UnlaunchableAppActivity.createInQuietModeDialogIntent(TEST_USER_ID)
@@ -273,7 +273,7 @@
         when(mAmInternal.shouldConfirmCredentials(TEST_USER_ID)).thenReturn(true);
 
         // THEN calling intercept returns true
-        mInterceptor.intercept(null, null, mAInfo, null, null, 0, 0, null);
+        mInterceptor.intercept(null, null, mAInfo, null, null, null, 0, 0, null);
 
         // THEN the returned intent is the quiet mode intent
         assertTrue(CONFIRM_CREDENTIALS_INTENT.filterEquals(mInterceptor.mIntent));
@@ -286,7 +286,7 @@
                 .thenReturn("This app is bad");
 
         // THEN calling intercept returns true
-        assertTrue(mInterceptor.intercept(null, null, mAInfo, null, null, 0, 0, null));
+        assertTrue(mInterceptor.intercept(null, null, mAInfo, null, null, null, 0, 0, null));
 
         // THEN the returned intent is the harmful app warning intent
         assertEquals(HarmfulAppWarningActivity.class.getName(),
@@ -298,7 +298,7 @@
         // GIVEN that none of the interception conditions are met
 
         // THEN calling intercept returns false
-        assertFalse(mInterceptor.intercept(null, null, mAInfo, null, null, 0, 0, null));
+        assertFalse(mInterceptor.intercept(null, null, mAInfo, null, null, null, 0, 0, null));
     }
 
     public void addMockInterceptorCallback(
@@ -323,7 +323,7 @@
                 new Intent("android.test.foo"),
                 ActivityOptions.makeBasic().setLaunchDisplayId(3));
 
-        assertTrue(mInterceptor.intercept(null, null, mAInfo, null, null, 0, 0, null));
+        assertTrue(mInterceptor.intercept(null, null, mAInfo, null, null, null, 0, 0, null));
         assertEquals("android.test.foo", mInterceptor.mIntent.getAction());
         assertEquals(3, mInterceptor.mActivityOptions.getLaunchDisplayId());
     }
@@ -332,7 +332,7 @@
     public void testInterceptionCallback_singleCallbackReturnsNull() {
         addMockInterceptorCallback(null, null);
 
-        assertFalse(mInterceptor.intercept(null, null, mAInfo, null, null, 0, 0, null));
+        assertFalse(mInterceptor.intercept(null, null, mAInfo, null, null, null, 0, 0, null));
     }
 
     @Test
@@ -340,7 +340,7 @@
         addMockInterceptorCallback(null, null);
         addMockInterceptorCallback(new Intent("android.test.second"), null);
 
-        assertTrue(mInterceptor.intercept(null, null, mAInfo, null, null, 0, 0, null));
+        assertTrue(mInterceptor.intercept(null, null, mAInfo, null, null, null, 0, 0, null));
         assertEquals("android.test.second", mInterceptor.mIntent.getAction());
     }
 
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
index 4ca14dd..c78bc59 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
@@ -802,7 +802,7 @@
         // Create adjacent tasks and put one activity under it
         final Task parent = new TaskBuilder(mSupervisor).build();
         final Task adjacentParent = new TaskBuilder(mSupervisor).build();
-        parent.setAdjacentTaskFragment(adjacentParent, true);
+        parent.setAdjacentTaskFragment(adjacentParent);
         final ActivityRecord activity = new ActivityBuilder(mAtm)
                 .setParentTask(parent)
                 .setCreateTask(true).build();
@@ -1128,28 +1128,27 @@
     }
 
     @Test
-    public void testTargetStackInSplitScreen() {
+    public void testTargetTaskInSplitScreen() {
         final ActivityStarter starter =
                 prepareStarter(FLAG_ACTIVITY_LAUNCH_ADJACENT, false /* mockGetRootTask */);
         final ActivityRecord top = new ActivityBuilder(mAtm).setCreateTask(true).build();
         final ActivityOptions options = ActivityOptions.makeBasic();
         final ActivityRecord[] outActivity = new ActivityRecord[1];
 
-        // Activity must not land on split-screen stack if currently not in split-screen mode.
+        // Activity must not land on split-screen task if currently not in split-screen mode.
         starter.setActivityOptions(options.toBundle())
-                .setReason("testWindowingModeOptionsLaunchAdjacent")
+                .setReason("testTargetTaskInSplitScreen")
                 .setOutActivity(outActivity).execute();
         assertThat(outActivity[0].inMultiWindowMode()).isFalse();
 
-        // Move activity to split-screen-primary stack and make sure it has the focus.
+        // Move activity to split-screen-primary task and make sure it has the focus.
         TestSplitOrganizer splitOrg = new TestSplitOrganizer(mAtm, top.getDisplayContent());
         top.getRootTask().reparent(splitOrg.mPrimary, POSITION_BOTTOM);
-        top.getRootTask().moveToFront("testWindowingModeOptionsLaunchAdjacent");
+        top.getRootTask().moveToFront("testTargetTaskInSplitScreen");
 
-        // Activity must landed on split-screen-secondary when launch adjacent.
-        starter.setActivityOptions(options.toBundle())
-                .setReason("testWindowingModeOptionsLaunchAdjacent")
-                .setOutActivity(outActivity).execute();
+        // Activity must land on split-screen-secondary when launch adjacent.
+        startActivityInner(starter, outActivity[0], top, options, null /* inTask */,
+                null /* taskFragment*/);
         assertThat(outActivity[0].inMultiWindowMode()).isTrue();
     }
 
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java
index a857190..20b1120 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java
@@ -21,7 +21,6 @@
 import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
 import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
 
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.any;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
@@ -42,8 +41,8 @@
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.atLeast;
 import static org.mockito.Mockito.doCallRealMethod;
-import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.when;
 
 import android.annotation.Nullable;
@@ -60,7 +59,6 @@
 import android.os.Binder;
 import android.os.IBinder;
 import android.os.LocaleList;
-import android.os.PowerManager;
 import android.os.RemoteException;
 import android.platform.test.annotations.Presubmit;
 import android.view.Display;
@@ -136,7 +134,7 @@
         assertNull(transaction.getLifecycleStateRequest());
     }
 
-    @Test(expected = IllegalStateException.class)
+    @Test
     public void testOnPictureInPictureRequested_cannotEnterPip() throws RemoteException {
         final Task stack = new TaskBuilder(mSupervisor).setCreateActivity(true).build();
         final ActivityRecord activity = stack.getBottomMostTask().getTopNonFinishingActivity();
@@ -146,11 +144,16 @@
 
         mAtm.mActivityClientController.requestPictureInPictureMode(activity);
 
-        // Check enter no transactions with enter pip requests are made.
-        verify(lifecycleManager, times(0)).scheduleTransaction(any());
+        verify(lifecycleManager, atLeast(0))
+                .scheduleTransaction(mClientTransactionCaptor.capture());
+        final ClientTransaction transaction = mClientTransactionCaptor.getValue();
+        // Check that none are enter pip request items.
+        transaction.getCallbacks().forEach(clientTransactionItem -> {
+            assertFalse(clientTransactionItem instanceof EnterPipRequestedItem);
+        });
     }
 
-    @Test(expected = IllegalStateException.class)
+    @Test
     public void testOnPictureInPictureRequested_alreadyInPIPMode() throws RemoteException {
         final Task stack = new TaskBuilder(mSupervisor).setCreateActivity(true).build();
         final ActivityRecord activity = stack.getBottomMostTask().getTopNonFinishingActivity();
@@ -159,8 +162,13 @@
 
         mAtm.mActivityClientController.requestPictureInPictureMode(activity);
 
-        // Check that no transactions with enter pip requests are made.
-        verify(lifecycleManager, times(0)).scheduleTransaction(any());
+        verify(lifecycleManager, atLeast(0))
+                .scheduleTransaction(mClientTransactionCaptor.capture());
+        final ClientTransaction transaction = mClientTransactionCaptor.getValue();
+        // Check that none are enter pip request items.
+        transaction.getCallbacks().forEach(clientTransactionItem -> {
+            assertFalse(clientTransactionItem instanceof EnterPipRequestedItem);
+        });
     }
 
     @Test
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityTaskSupervisorTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityTaskSupervisorTests.java
index 716612c..75ecfd8 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityTaskSupervisorTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityTaskSupervisorTests.java
@@ -21,6 +21,7 @@
 import static android.app.ITaskStackListener.FORCED_RESIZEABLE_REASON_SECONDARY_DISPLAY;
 import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
 
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.never;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.reset;
@@ -34,6 +35,7 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
@@ -284,10 +286,14 @@
                 .setCreateActivity(true).build().getTopMostActivity();
         activity2.getTask().setResumedActivity(activity2, "test");
 
-        mAtm.mAmInternal.deletePendingTopUid(activity1.getUid(), Long.MAX_VALUE);
+        final int[] pendingTopUid = new int[1];
+        doAnswer(invocation -> {
+            pendingTopUid[0] = invocation.getArgument(0);
+            return null;
+        }).when(mAtm.mAmInternal).addPendingTopUid(anyInt(), anyInt(), any());
         clearInvocations(mAtm);
         activity1.moveFocusableActivityToTop("test");
-        assertTrue(mAtm.mAmInternal.isPendingTopUid(activity1.getUid()));
+        assertEquals(activity1.getUid(), pendingTopUid[0]);
         verify(mAtm).updateOomAdj();
     }
 
diff --git a/services/tests/wmtests/src/com/android/server/wm/AppTransitionControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/AppTransitionControllerTest.java
index 890a547..513791d 100644
--- a/services/tests/wmtests/src/com/android/server/wm/AppTransitionControllerTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/AppTransitionControllerTest.java
@@ -16,6 +16,7 @@
 
 package com.android.server.wm;
 
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_DREAM;
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
 import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
 import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
@@ -25,6 +26,8 @@
 import static android.view.WindowManager.TRANSIT_CHANGE;
 import static android.view.WindowManager.TRANSIT_CLOSE;
 import static android.view.WindowManager.TRANSIT_OLD_ACTIVITY_OPEN;
+import static android.view.WindowManager.TRANSIT_OLD_DREAM_ACTIVITY_CLOSE;
+import static android.view.WindowManager.TRANSIT_OLD_DREAM_ACTIVITY_OPEN;
 import static android.view.WindowManager.TRANSIT_OLD_KEYGUARD_UNOCCLUDE;
 import static android.view.WindowManager.TRANSIT_OLD_TASK_CHANGE_WINDOWING_MODE;
 import static android.view.WindowManager.TRANSIT_OLD_TASK_FRAGMENT_CHANGE;
@@ -44,6 +47,7 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeFalse;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.clearInvocations;
@@ -86,6 +90,7 @@
 
     @Before
     public void setUp() throws Exception {
+        assumeFalse(WindowManagerService.sEnableShellTransitions);
         mAppTransitionController = new AppTransitionController(mWm, mDisplayContent);
     }
 
@@ -155,6 +160,32 @@
     }
 
     @Test
+    public void testDreamActivityOpenTransition() {
+        final ActivityRecord dreamActivity = createActivityRecord(mDisplayContent,
+                WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_DREAM);
+        mDisplayContent.prepareAppTransition(TRANSIT_OPEN);
+        mDisplayContent.mOpeningApps.add(dreamActivity);
+
+        assertEquals(TRANSIT_OLD_DREAM_ACTIVITY_OPEN,
+                AppTransitionController.getTransitCompatType(mDisplayContent.mAppTransition,
+                        mDisplayContent.mOpeningApps, mDisplayContent.mClosingApps,
+                        mDisplayContent.mChangingContainers, null, null, false));
+    }
+
+    @Test
+    public void testDreamActivityCloseTransition() {
+        final ActivityRecord dreamActivity = createActivityRecord(mDisplayContent,
+                WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_DREAM);
+        mDisplayContent.prepareAppTransition(TRANSIT_CLOSE);
+        mDisplayContent.mClosingApps.add(dreamActivity);
+
+        assertEquals(TRANSIT_OLD_DREAM_ACTIVITY_CLOSE,
+                AppTransitionController.getTransitCompatType(mDisplayContent.mAppTransition,
+                        mDisplayContent.mOpeningApps, mDisplayContent.mClosingApps,
+                        mDisplayContent.mChangingContainers, null, null, false));
+    }
+
+    @Test
     public void testChangeIsNotOverwritten() {
         final ActivityRecord behind = createActivityRecord(mDisplayContent,
                 WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD);
@@ -564,7 +595,7 @@
                 .setCreatedByOrganizer(true);
         final Task splitRoot1 = builder.build();
         final Task splitRoot2 = builder.build();
-        splitRoot1.setAdjacentTaskFragment(splitRoot2, false /* moveTogether */);
+        splitRoot1.setAdjacentTaskFragment(splitRoot2);
         final ActivityRecord activity1 = createActivityRecordWithParentTask(splitRoot1);
         activity1.setVisible(false);
         activity1.mVisibleRequested = true;
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 fc41a94..c2ca0a2 100644
--- a/services/tests/wmtests/src/com/android/server/wm/BackNavigationControllerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/BackNavigationControllerTests.java
@@ -29,12 +29,9 @@
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.atLeastOnce;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import android.annotation.NonNull;
@@ -42,7 +39,6 @@
 import android.hardware.HardwareBuffer;
 import android.os.RemoteException;
 import android.platform.test.annotations.Presubmit;
-import android.view.SurfaceControl;
 import android.view.WindowManager;
 import android.window.BackEvent;
 import android.window.BackNavigationInfo;
@@ -75,8 +71,7 @@
         LocalServices.removeServiceForTest(WindowManagerInternal.class);
         mWindowManagerInternal = mock(WindowManagerInternal.class);
         LocalServices.addService(WindowManagerInternal.class, mWindowManagerInternal);
-        TaskSnapshotController taskSnapshotController = createMockTaskSnapshotController();
-        mBackNavigationController.setTaskSnapshotController(taskSnapshotController);
+        mBackNavigationController.setWindowManager(mWm);
     }
 
     @Test
@@ -84,19 +79,14 @@
         Task task = createTopTaskWithActivity();
         IOnBackInvokedCallback callback = withSystemCallback(task);
 
-        SurfaceControl.Transaction tx = mock(SurfaceControl.Transaction.class);
-        BackNavigationInfo backNavigationInfo = mBackNavigationController.startBackNavigation(mWm,
-                tx, true);
+        BackNavigationInfo backNavigationInfo =
+                mBackNavigationController.startBackNavigation(true, null);
         assertWithMessage("BackNavigationInfo").that(backNavigationInfo).isNotNull();
         assertThat(backNavigationInfo.getDepartingAnimationTarget()).isNotNull();
         assertThat(backNavigationInfo.getTaskWindowConfiguration()).isNotNull();
         assertThat(backNavigationInfo.getOnBackInvokedCallback()).isEqualTo(callback);
         assertThat(typeToString(backNavigationInfo.getType()))
                 .isEqualTo(typeToString(BackNavigationInfo.TYPE_RETURN_TO_HOME));
-
-        verify(tx, atLeastOnce()).apply();
-        verify(tx, times(1)).reparent(any(),
-                eq(backNavigationInfo.getDepartingAnimationTarget().leash));
     }
 
     @Test
@@ -243,7 +233,7 @@
 
     @Nullable
     private BackNavigationInfo startBackNavigation() {
-        return mBackNavigationController.startBackNavigation(mWm, new StubTransaction(), true);
+        return mBackNavigationController.startBackNavigation(true, null);
     }
 
     @NonNull
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
index 0792300..d6b807f 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
@@ -22,6 +22,7 @@
 import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
 import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
 import static android.content.pm.ActivityInfo.FLAG_SHOW_WHEN_LOCKED;
+import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_BEHIND;
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
@@ -46,8 +47,10 @@
 import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
 import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
 import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
+import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
 import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
 import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION;
+import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_UNRESTRICTED_GESTURE_EXCLUSION;
 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG;
 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
@@ -77,10 +80,8 @@
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
 import static com.android.server.wm.ActivityTaskSupervisor.ON_TOP;
 import static com.android.server.wm.DisplayContent.IME_TARGET_LAYERING;
-import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION;
 import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_TOKEN_TRANSFORM;
 import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS;
-import static com.android.server.wm.WindowContainer.AnimationFlags.TRANSITION;
 import static com.android.server.wm.WindowContainer.POSITION_TOP;
 import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_NORMAL;
 
@@ -123,8 +124,8 @@
 import android.view.DisplayCutout;
 import android.view.DisplayInfo;
 import android.view.Gravity;
-import android.view.IDisplayWindowRotationCallback;
-import android.view.IDisplayWindowRotationController;
+import android.view.IDisplayChangeWindowCallback;
+import android.view.IDisplayChangeWindowController;
 import android.view.ISystemGestureExclusionListener;
 import android.view.IWindowManager;
 import android.view.InsetsState;
@@ -135,6 +136,7 @@
 import android.view.SurfaceControl.Transaction;
 import android.view.View;
 import android.view.WindowManager;
+import android.window.DisplayAreaInfo;
 import android.window.IDisplayAreaOrganizer;
 import android.window.WindowContainerToken;
 
@@ -641,6 +643,7 @@
         final DisplayContent dc = mDisplayContent;
         final WindowState ws = createWindow(null, TYPE_APPLICATION, dc, "app window");
         dc.setImeLayeringTarget(ws);
+        dc.setImeInputTarget(ws);
 
         // Adjust bounds so that matchesRootDisplayAreaBounds() returns false.
         final Rect bounds = new Rect(dc.getBounds());
@@ -1097,6 +1100,25 @@
     }
 
     @Test
+    public void testOrientationBehind() {
+        final ActivityRecord prev = new ActivityBuilder(mAtm).setCreateTask(true)
+                .setScreenOrientation(getRotatedOrientation(mDisplayContent)).build();
+        prev.mVisibleRequested = false;
+        final ActivityRecord top = new ActivityBuilder(mAtm).setCreateTask(true)
+                .setScreenOrientation(SCREEN_ORIENTATION_BEHIND).build();
+        assertNotEquals(WindowConfiguration.ROTATION_UNDEFINED,
+                mDisplayContent.rotationForActivityInDifferentOrientation(top));
+
+        mDisplayContent.requestTransitionAndLegacyPrepare(WindowManager.TRANSIT_OPEN, 0);
+        top.setVisibility(true);
+        mDisplayContent.updateOrientation();
+        // The top uses "behind", so the orientation is decided by the previous.
+        assertEquals(prev, mDisplayContent.getLastOrientationSource());
+        // The top will use the rotation from "prev" with fixed rotation.
+        assertTrue(top.hasFixedRotationTransform());
+    }
+
+    @Test
     public void testFixedToUserRotationChanged() {
         final DisplayContent dc = createNewDisplay();
         dc.getDisplayRotation().setFixedToUserRotation(
@@ -1133,6 +1155,7 @@
         dc.setImeLayeringTarget(createWindow(null, TYPE_STATUS_BAR, "app"));
         dc.getImeTarget(IME_TARGET_LAYERING).getWindow().setWindowingMode(
                 WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW);
+        dc.setImeInputTarget(dc.getImeTarget(IME_TARGET_LAYERING).getWindow());
         assertEquals(dc.getImeContainer().getParentSurfaceControl(), dc.computeImeParent());
     }
 
@@ -1151,6 +1174,7 @@
     public void testComputeImeParent_noApp() throws Exception {
         final DisplayContent dc = createNewDisplay();
         dc.setImeLayeringTarget(createWindow(null, TYPE_STATUS_BAR, "statusBar"));
+        dc.setImeInputTarget(dc.getImeTarget(IME_TARGET_LAYERING).getWindow());
         assertEquals(dc.getImeContainer().getParentSurfaceControl(), dc.computeImeParent());
     }
 
@@ -1380,6 +1404,28 @@
         win.setHasSurface(false);
     }
 
+    @Test
+    public void testCalculateSystemGestureExclusion_unrestricted() throws Exception {
+        mWm.mConstants.mSystemGestureExcludedByPreQStickyImmersive = true;
+
+        final DisplayContent dc = createNewDisplay();
+        final WindowState win = createWindow(null, TYPE_BASE_APPLICATION, dc, "win");
+        win.getAttrs().flags |= FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR;
+        win.getAttrs().layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
+        win.getAttrs().privateFlags |= PRIVATE_FLAG_UNRESTRICTED_GESTURE_EXCLUSION;
+        win.setSystemGestureExclusion(Collections.singletonList(dc.getBounds()));
+
+        performLayout(dc);
+
+        win.setHasSurface(true);
+
+        final Region expected = Region.obtain();
+        expected.set(dc.getBounds());
+        assertEquals(expected, calculateSystemGestureExclusion(dc));
+
+        win.setHasSurface(false);
+    }
+
     @UseTestDisplay(addWindows = { W_ABOVE_ACTIVITY, W_ACTIVITY})
     @Test
     public void testRequestResizeForEmptyFrames() {
@@ -1593,14 +1639,14 @@
         final Task task = app.getTask();
         final ActivityRecord app2 = new ActivityBuilder(mWm.mAtmService).setTask(task).build();
         mDisplayContent.setFixedRotationLaunchingApp(app2, (mDisplayContent.getRotation() + 1) % 4);
-        doReturn(true).when(task).isAppTransitioning();
-        // If the task is animating transition, this should be no-op.
+        doReturn(true).when(app).isInTransition();
+        // If the task contains a transition, this should be no-op.
         mDisplayContent.mFixedRotationTransitionListener.onAppTransitionFinishedLocked(app.token);
 
         assertTrue(app2.hasFixedRotationTransform());
         assertTrue(mDisplayContent.hasTopFixedRotationLaunchingApp());
 
-        doReturn(false).when(task).isAppTransitioning();
+        doReturn(false).when(app).isInTransition();
         // Although this notifies app instead of app2 that uses the fixed rotation, app2 should
         // still finish the transform because there is no more transition event.
         mDisplayContent.mFixedRotationTransitionListener.onAppTransitionFinishedLocked(app.token);
@@ -1677,6 +1723,13 @@
         assertFalse(displayContent.mPinnedTaskController.isFreezingTaskConfig(pinnedTask));
         assertEquals(pinnedActivity.getConfiguration().orientation,
                 displayContent.getConfiguration().orientation);
+
+        // No need to apply rotation if the display ignores orientation request.
+        doCallRealMethod().when(displayContent).rotationForActivityInDifferentOrientation(any());
+        pinnedActivity.mOrientation = SCREEN_ORIENTATION_LANDSCAPE;
+        displayContent.setIgnoreOrientationRequest(true);
+        assertEquals(WindowConfiguration.ROTATION_UNDEFINED,
+                displayContent.rotationForActivityInDifferentOrientation(pinnedActivity));
     }
 
     @Test
@@ -1693,8 +1746,7 @@
         // The condition should reject using fixed rotation because the resumed client in real case
         // might get display info immediately. And the fixed rotation adjustments haven't arrived
         // client side so the info may be inconsistent with the requested orientation.
-        verify(mDisplayContent).handleTopActivityLaunchingInDifferentOrientation(eq(app),
-                eq(true) /* checkOpening */);
+        verify(mDisplayContent).updateOrientation(eq(app), anyBoolean());
         assertFalse(app.isFixedRotationTransforming());
         assertFalse(mDisplayContent.hasTopFixedRotationLaunchingApp());
     }
@@ -1782,15 +1834,16 @@
                     return true;
                 }).when(dc).updateDisplayOverrideConfigurationLocked();
         final boolean[] called = new boolean[1];
-        mWm.mDisplayRotationController =
-                new IDisplayWindowRotationController.Stub() {
+        mWm.mDisplayChangeController =
+                new IDisplayChangeWindowController.Stub() {
                     @Override
-                    public void onRotateDisplay(int displayId, int fromRotation, int toRotation,
-                            IDisplayWindowRotationCallback callback) {
+                    public void onDisplayChange(int displayId, int fromRotation, int toRotation,
+                            DisplayAreaInfo newDisplayAreaInfo,
+                            IDisplayChangeWindowCallback callback) throws RemoteException {
                         called[0] = true;
 
                         try {
-                            callback.continueRotateDisplay(toRotation, null);
+                            callback.continueDisplayChange(null);
                         } catch (RemoteException e) {
                             assertTrue(false);
                         }
@@ -1824,13 +1877,14 @@
         // Rotate 180 degree so the display doesn't have configuration change. This condition is
         // used for the later verification of stop-freezing (without setting mWaitingForConfig).
         doReturn((dr.getRotation() + 2) % 4).when(dr).rotationForOrientation(anyInt(), anyInt());
-        mWm.mDisplayRotationController =
-                new IDisplayWindowRotationController.Stub() {
+        mWm.mDisplayChangeController =
+                new IDisplayChangeWindowController.Stub() {
                     @Override
-                    public void onRotateDisplay(int displayId, int fromRotation, int toRotation,
-                            IDisplayWindowRotationCallback callback) {
+                    public void onDisplayChange(int displayId, int fromRotation, int toRotation,
+                            DisplayAreaInfo newDisplayAreaInfo,
+                            IDisplayChangeWindowCallback callback) throws RemoteException {
                         try {
-                            callback.continueRotateDisplay(toRotation, null);
+                            callback.continueDisplayChange(null);
                         } catch (RemoteException e) {
                             assertTrue(false);
                         }
@@ -2088,7 +2142,6 @@
         final WindowState appWin2 = createWindow(null, TYPE_BASE_APPLICATION, act2, "appWin2");
         appWin2.setHasSurface(true);
         assertTrue(appWin2.canBeImeTarget());
-        doReturn(true).when(appWin1).isClosing();
         doReturn(true).when(appWin1).inTransitionSelfOrParent();
 
         // Test step 3: Verify appWin2 will be the next IME target and the IME snapshot surface will
@@ -2154,6 +2207,52 @@
         assertNotEquals(curSnapshot, mDisplayContent.mImeScreenshot);
     }
 
+    @UseTestDisplay(addWindows = {W_INPUT_METHOD})
+    @Test
+    public void testRemoveImeScreenshot_whenTargetSurfaceWasInvisible() {
+        final Task rootTask = createTask(mDisplayContent);
+        final Task task = createTaskInRootTask(rootTask, 0 /* userId */);
+        final ActivityRecord activity = createActivityRecord(mDisplayContent, task);
+        final WindowState win = createWindow(null, TYPE_BASE_APPLICATION, activity, "win");
+        win.onSurfaceShownChanged(true);
+        makeWindowVisible(win, mDisplayContent.mInputMethodWindow);
+        task.getDisplayContent().prepareAppTransition(TRANSIT_CLOSE);
+        doReturn(true).when(task).okToAnimate();
+        ArrayList<WindowContainer> sources = new ArrayList<>();
+        sources.add(activity);
+
+        mDisplayContent.setImeLayeringTarget(win);
+        mDisplayContent.setImeInputTarget(win);
+        mDisplayContent.getInsetsStateController().getImeSourceProvider().setImeShowing(true);
+        task.applyAnimation(null, TRANSIT_OLD_TASK_CLOSE, false /* enter */,
+                false /* isVoiceInteraction */, sources);
+        assertNotNull(mDisplayContent.mImeScreenshot);
+
+        win.onSurfaceShownChanged(false);
+        assertNull(mDisplayContent.mImeScreenshot);
+    }
+
+    @UseTestDisplay(addWindows = {W_INPUT_METHOD})
+    @Test
+    public void testRemoveImeScreenshot_whenWindowRemoveImmediately() {
+        final Task rootTask = createTask(mDisplayContent);
+        final Task task = createTaskInRootTask(rootTask, 0 /* userId */);
+        final ActivityRecord activity = createActivityRecord(mDisplayContent, task);
+        final WindowState win = createWindow(null, TYPE_BASE_APPLICATION, activity, "win");
+        makeWindowVisible(mDisplayContent.mInputMethodWindow);
+
+        mDisplayContent.setImeLayeringTarget(win);
+        mDisplayContent.setImeInputTarget(win);
+        mDisplayContent.getInsetsStateController().getImeSourceProvider().setImeShowing(true);
+        mDisplayContent.showImeScreenshot();
+        assertNotNull(mDisplayContent.mImeScreenshot);
+
+        // Expect IME snapshot will be removed when the win is IME layering target and invoked
+        // removeImeSurfaceByTarget.
+        win.removeImmediately();
+        assertNull(mDisplayContent.mImeScreenshot);
+    }
+
     @Test
     public void testRotateBounds_keepSamePhysicalPosition() {
         final DisplayContent dc =
@@ -2193,23 +2292,28 @@
      */
     @Test
     public void testCreateTestDisplayContentFromDimensions() {
-        final int displayWidth = 1000;
-        final int displayHeight = 2000;
+        final int displayWidth = 540;
+        final int displayHeight = 960;
+        final int density = 192;
+        final int expectedWidthDp = 450; // = 540/(192/160)
+        final int expectedHeightDp = 800; // = 960/(192/160)
         final int windowingMode = WINDOWING_MODE_FULLSCREEN;
         final boolean ignoreOrientationRequests = false;
         final float fixedOrientationLetterboxRatio = 0;
         final DisplayContent testDisplayContent = new TestDisplayContent.Builder(mAtm, displayWidth,
-                displayHeight).build();
+                displayHeight).setDensityDpi(density).build();
 
         // test display info
         final DisplayInfo di = testDisplayContent.getDisplayInfo();
         assertEquals(displayWidth, di.logicalWidth);
         assertEquals(displayHeight, di.logicalHeight);
-        assertEquals(TestDisplayContent.DEFAULT_LOGICAL_DISPLAY_DENSITY, di.logicalDensityDpi);
+        assertEquals(density, di.logicalDensityDpi);
 
         // test configuration
-        final WindowConfiguration windowConfig = testDisplayContent.getConfiguration()
-                .windowConfiguration;
+        final Configuration config = testDisplayContent.getConfiguration();
+        assertEquals(expectedWidthDp, config.screenWidthDp);
+        assertEquals(expectedHeightDp, config.screenHeightDp);
+        final WindowConfiguration windowConfig = config.windowConfiguration;
         assertEquals(displayWidth, windowConfig.getBounds().width());
         assertEquals(displayHeight, windowConfig.getBounds().height());
         assertEquals(windowingMode, windowConfig.getWindowingMode());
@@ -2396,7 +2500,7 @@
     @Test
     public void testImeMenuDialogFocusWhenImeLayeringTargetChanges() {
         final WindowState imeMenuDialog =
-                createWindow(mImeWindow, TYPE_INPUT_METHOD_DIALOG, "imeMenuDialog");
+                createWindow(null, TYPE_INPUT_METHOD_DIALOG, "imeMenuDialog");
         makeWindowVisibleAndDrawn(imeMenuDialog, mImeWindow);
         assertTrue(imeMenuDialog.canReceiveKeys());
         mDisplayContent.setInputMethodWindowLocked(mImeWindow);
@@ -2409,13 +2513,11 @@
         doReturn(true).when(imeAppTarget).getRequestedVisibility(ITYPE_IME);
         assertEquals(imeMenuDialog, mDisplayContent.findFocusedWindow());
 
-        // Verify imeMenuDialog doesn't be focused window if the next IME target does not
-        // request IME visible.
+        // Verify imeMenuDialog doesn't be focused window if the next IME target is closing.
         final WindowState nextImeAppTarget =
                 createWindow(null, TYPE_BASE_APPLICATION, mDisplayContent, "nextImeAppTarget");
-        spyOn(nextImeAppTarget);
-        doReturn(true).when(nextImeAppTarget).isAnimating(PARENTS | TRANSITION,
-                ANIMATION_TYPE_APP_TRANSITION);
+        makeWindowVisibleAndDrawn(nextImeAppTarget);
+        nextImeAppTarget.mActivityRecord.commitVisibility(false, false);
         mDisplayContent.setImeLayeringTarget(nextImeAppTarget);
         assertNotEquals(imeMenuDialog, mDisplayContent.findFocusedWindow());
     }
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyLayoutTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyLayoutTests.java
index 45ae81a..34575ae 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyLayoutTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyLayoutTests.java
@@ -43,6 +43,7 @@
 import android.platform.test.annotations.Presubmit;
 import android.util.Pair;
 import android.view.DisplayInfo;
+import android.view.InsetsFrameProvider;
 import android.view.InsetsState;
 import android.view.PrivacyIndicatorBounds;
 import android.view.RoundedCorners;
@@ -153,7 +154,10 @@
         mDisplayPolicy.removeWindowLw(mStatusBarWindow);  // Removes the existing one.
 
         WindowState win = createWindow(null, TYPE_STATUS_BAR_SUB_PANEL, "StatusBarSubPanel");
-        win.mAttrs.providesInsetsTypes = new int[]{ITYPE_STATUS_BAR, ITYPE_TOP_GESTURES};
+        win.mAttrs.providedInsets = new InsetsFrameProvider[] {
+                new InsetsFrameProvider(ITYPE_STATUS_BAR),
+                new InsetsFrameProvider(ITYPE_TOP_GESTURES)
+        };
         win.getFrame().set(0, 0, 500, 100);
 
         addWindow(win);
@@ -182,7 +186,9 @@
     public void addingWindow_InWindowTypeWithPredefinedInsets() {
         mDisplayPolicy.removeWindowLw(mStatusBarWindow);  // Removes the existing one.
         WindowState win = createWindow(null, TYPE_STATUS_BAR, "StatusBar");
-        win.mAttrs.providesInsetsTypes = new int[]{ITYPE_STATUS_BAR};
+        win.mAttrs.providedInsets = new InsetsFrameProvider[] {
+                new InsetsFrameProvider(ITYPE_STATUS_BAR)
+        };
         win.getFrame().set(0, 0, 500, 100);
 
         addWindow(win);
@@ -199,12 +205,19 @@
     @Test
     public void addingWindow_throwsException_WithMultipleInsetTypes() {
         WindowState win1 = createWindow(null, TYPE_STATUS_BAR_SUB_PANEL, "StatusBarSubPanel");
-        win1.mAttrs.providesInsetsTypes = new int[]{ITYPE_STATUS_BAR, ITYPE_NAVIGATION_BAR};
+        win1.mAttrs.providedInsets = new InsetsFrameProvider[] {
+                new InsetsFrameProvider(ITYPE_STATUS_BAR),
+                new InsetsFrameProvider(ITYPE_NAVIGATION_BAR)
+        };
 
         expectThrows(IllegalArgumentException.class, () -> addWindow(win1));
 
         WindowState win2 = createWindow(null, TYPE_STATUS_BAR_SUB_PANEL, "StatusBarSubPanel");
-        win2.mAttrs.providesInsetsTypes = new int[]{ITYPE_CLIMATE_BAR, ITYPE_EXTRA_NAVIGATION_BAR};
+
+        win2.mAttrs.providedInsets = new InsetsFrameProvider[] {
+                new InsetsFrameProvider(ITYPE_CLIMATE_BAR),
+                new InsetsFrameProvider(ITYPE_EXTRA_NAVIGATION_BAR)
+        };
 
         expectThrows(IllegalArgumentException.class, () -> addWindow(win2));
     }
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java
index 2b131e1..8f2e9b4 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTests.java
@@ -45,7 +45,12 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
+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;
 
 import android.graphics.PixelFormat;
@@ -344,4 +349,24 @@
         final InsetsSource navBarSource = state.peekSource(ITYPE_NAVIGATION_BAR);
         assertEquals(attrs.height - 10, navBarSource.getFrame().height());
     }
+
+    @Test
+    public void testCanSystemBarsBeShownByUser() {
+        ((TestWindowManagerPolicy) mWm.mPolicy).mIsUserSetupComplete = true;
+        final DisplayPolicy displayPolicy = mDisplayContent.getDisplayPolicy();
+        final WindowState windowState = mock(WindowState.class);
+        final InsetsSourceProvider provider = mock(InsetsSourceProvider.class);
+        final InsetsControlTarget controlTarget = mock(InsetsControlTarget.class);
+        when(provider.getControlTarget()).thenReturn(controlTarget);
+        when(windowState.getControllableInsetProvider()).thenReturn(provider);
+        when(controlTarget.getRequestedVisibility(anyInt())).thenReturn(true);
+
+        displayPolicy.setCanSystemBarsBeShownByUser(false);
+        displayPolicy.requestTransientBars(windowState, true);
+        verify(controlTarget, never()).showInsets(anyInt(), anyBoolean());
+
+        displayPolicy.setCanSystemBarsBeShownByUser(true);
+        displayPolicy.requestTransientBars(windowState, true);
+        verify(controlTarget).showInsets(anyInt(), anyBoolean());
+    }
 }
diff --git a/services/tests/wmtests/src/com/android/server/wm/DualDisplayAreaGroupPolicyTest.java b/services/tests/wmtests/src/com/android/server/wm/DualDisplayAreaGroupPolicyTest.java
index dbb7fae..2956c14 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DualDisplayAreaGroupPolicyTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DualDisplayAreaGroupPolicyTest.java
@@ -168,7 +168,8 @@
         mSecondRoot.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
         mDisplay.onLastFocusedTaskDisplayAreaChanged(mFirstTda);
 
-        prepareUnresizable(mFirstActivity, SCREEN_ORIENTATION_PORTRAIT);
+        prepareLimitedBounds(mFirstActivity, SCREEN_ORIENTATION_PORTRAIT,
+                false /* isUnresizable */);
         final Rect dagBounds = new Rect(mFirstRoot.getBounds());
         final Rect taskBounds = new Rect(mFirstTask.getBounds());
         final Rect activityBounds = new Rect(mFirstActivity.getBounds());
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 ffa21fa..6c161cf 100644
--- a/services/tests/wmtests/src/com/android/server/wm/InsetsStateControllerTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/InsetsStateControllerTest.java
@@ -27,6 +27,7 @@
 import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
 import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
+import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
 
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
@@ -44,12 +45,15 @@
 
 import android.graphics.Rect;
 import android.platform.test.annotations.Presubmit;
+import android.util.SparseArray;
 import android.view.InsetsSourceControl;
 import android.view.InsetsState;
 import android.view.InsetsVisibilities;
 
 import androidx.test.filters.SmallTest;
 
+import com.android.internal.util.function.TriConsumer;
+
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -269,15 +273,18 @@
     @Test
     public void testImeForDispatch() {
         final WindowState statusBar = createWindow(null, TYPE_APPLICATION, "statusBar");
-        final WindowState ime = createWindow(null, TYPE_APPLICATION, "ime");
+        final WindowState ime = createWindow(null, TYPE_INPUT_METHOD, "ime");
 
         // IME cannot be the IME target.
         ime.mAttrs.flags |= FLAG_NOT_FOCUSABLE;
 
         WindowContainerInsetsSourceProvider statusBarProvider =
                 getController().getSourceProvider(ITYPE_STATUS_BAR);
-        statusBarProvider.setWindowContainer(statusBar, null, ((displayFrames, windowState, rect) ->
+        final SparseArray<TriConsumer<DisplayFrames, WindowContainer, Rect>> imeOverrideProviders =
+                new SparseArray<>();
+        imeOverrideProviders.put(TYPE_INPUT_METHOD, ((displayFrames, windowState, rect) ->
                 rect.set(0, 1, 2, 3)));
+        statusBarProvider.setWindowContainer(statusBar, null, imeOverrideProviders);
         getController().getSourceProvider(ITYPE_IME).setWindowContainer(ime, null, null);
         statusBar.setControllableInsetProvider(statusBarProvider);
         statusBar.updateSourceFrame(statusBar.getFrame());
diff --git a/services/tests/wmtests/src/com/android/server/wm/LetterboxTest.java b/services/tests/wmtests/src/com/android/server/wm/LetterboxTest.java
index 1e86522..e502f2f 100644
--- a/services/tests/wmtests/src/com/android/server/wm/LetterboxTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/LetterboxTest.java
@@ -63,7 +63,7 @@
         mLetterbox = new Letterbox(mSurfaces, StubTransaction::new,
                 () -> mAreCornersRounded, () -> Color.valueOf(mColor),
                 () -> mHasWallpaperBackground, () -> mBlurRadius, () -> mDarkScrimAlpha,
-                /* doubleTapCallback= */ x -> {});
+                /* doubleTapCallbackX= */ x -> {}, /* doubleTapCallbackY= */ y -> {});
         mTransaction = spy(StubTransaction.class);
     }
 
diff --git a/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java b/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java
index feb1c6f..adf694c 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RecentTasksTest.java
@@ -1229,7 +1229,6 @@
         RecentTaskInfo info = mRecentTasks.createRecentTaskInfo(task, true);
 
         assertTrue(info.supportsMultiWindow);
-        assertTrue(info.supportsSplitScreenMultiWindow);
 
         // The task can be put in split screen even if it is not attached now.
         task.removeImmediately();
@@ -1237,7 +1236,6 @@
         info = mRecentTasks.createRecentTaskInfo(task, true);
 
         assertTrue(info.supportsMultiWindow);
-        assertTrue(info.supportsSplitScreenMultiWindow);
 
         // Test non-resizable.
         // The non-resizable task cannot be put in split screen because of the config.
@@ -1247,7 +1245,6 @@
         info = mRecentTasks.createRecentTaskInfo(task, true);
 
         assertFalse(info.supportsMultiWindow);
-        assertFalse(info.supportsSplitScreenMultiWindow);
 
         // Even if it is not attached, the non-resizable task can be put in split screen as long as
         // the device supports it.
@@ -1256,8 +1253,6 @@
         info = mRecentTasks.createRecentTaskInfo(task, true);
 
         assertTrue(info.supportsMultiWindow);
-        assertTrue(info.supportsSplitScreenMultiWindow);
-
     }
 
     private TaskSnapshot createSnapshot(Point taskSize, Point bufferSize) {
@@ -1337,7 +1332,7 @@
         });
         assertSecurityException(expectCallable,
                 () -> mAtm.startActivityFromRecents(0, new Bundle()));
-        assertSecurityException(expectCallable, () -> mAtm.getTaskSnapshot(0, true));
+        assertSecurityException(expectCallable, () -> mAtm.getTaskSnapshot(0, true, false));
         assertSecurityException(expectCallable, () -> mAtm.registerTaskStackListener(null));
         assertSecurityException(expectCallable,
                 () -> mAtm.unregisterTaskStackListener(null));
@@ -1536,10 +1531,10 @@
         public boolean mLastAllowed;
 
         @Override
-        void getTasks(int maxNum, List<RunningTaskInfo> list, int flags,
-                RootWindowContainer root, int callingUid, ArraySet<Integer> profileIds) {
+        void getTasks(int maxNum, List<RunningTaskInfo> list, int flags, RecentTasks recentTasks,
+                WindowContainer root, int callingUid, ArraySet<Integer> profileIds) {
             mLastAllowed = (flags & FLAG_ALLOWED) == FLAG_ALLOWED;
-            super.getTasks(maxNum, list, flags, root, callingUid, profileIds);
+            super.getTasks(maxNum, list, flags, recentTasks, root, callingUid, profileIds);
         }
     }
 }
diff --git a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationTest.java b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationTest.java
index 28fb015..a1d6a50 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationTest.java
@@ -95,7 +95,7 @@
                 mRecentsComponent.getPackageName(), mRecentsComponent.getPackageName(),
                 // Use real pid/uid of the test so the corresponding process can be mapped by
                 // Binder.getCallingPid/Uid.
-                android.os.Process.myPid(), android.os.Process.myUid());
+                WindowManagerService.MY_PID, WindowManagerService.MY_UID);
         ActivityRecord recentActivity = new ActivityBuilder(mAtm)
                 .setComponent(mRecentsComponent)
                 .setTask(recentsStack)
diff --git a/services/tests/wmtests/src/com/android/server/wm/RemoteAnimationControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/RemoteAnimationControllerTest.java
index e6910c2..027f521 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RemoteAnimationControllerTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RemoteAnimationControllerTest.java
@@ -79,19 +79,25 @@
 
 /**
  * Build/Install/Run:
- *  atest WmTests:RemoteAnimationControllerTest
+ * atest WmTests:RemoteAnimationControllerTest
  */
 @SmallTest
 @Presubmit
 @RunWith(WindowTestRunner.class)
 public class RemoteAnimationControllerTest extends WindowTestsBase {
 
-    @Mock SurfaceControl mMockLeash;
-    @Mock SurfaceControl mMockThumbnailLeash;
-    @Mock Transaction mMockTransaction;
-    @Mock OnAnimationFinishedCallback mFinishedCallback;
-    @Mock OnAnimationFinishedCallback mThumbnailFinishedCallback;
-    @Mock IRemoteAnimationRunner mMockRunner;
+    @Mock
+    SurfaceControl mMockLeash;
+    @Mock
+    SurfaceControl mMockThumbnailLeash;
+    @Mock
+    Transaction mMockTransaction;
+    @Mock
+    OnAnimationFinishedCallback mFinishedCallback;
+    @Mock
+    OnAnimationFinishedCallback mThumbnailFinishedCallback;
+    @Mock
+    IRemoteAnimationRunner mMockRunner;
     private RemoteAnimationAdapter mAdapter;
     private RemoteAnimationController mController;
     private final OffsettableClock mClock = new OffsettableClock.Stopped();
@@ -105,7 +111,8 @@
         mAdapter = new RemoteAnimationAdapter(mMockRunner, 100, 50, true /* changeNeedsSnapshot */);
         mAdapter.setCallingPidUid(123, 456);
         runWithScissors(mWm.mH, () -> mHandler = new TestHandler(null, mClock), 0);
-        mController = new RemoteAnimationController(mWm, mDisplayContent, mAdapter, mHandler);
+        mController = new RemoteAnimationController(mWm, mDisplayContent, mAdapter,
+                mHandler, false /*isActivityEmbedding*/);
     }
 
     private WindowState createAppOverlayWindow() {
@@ -117,13 +124,47 @@
     }
 
     @Test
+    public void testForwardsShowBackdrop() throws Exception {
+        final WindowState win = createWindow(null /* parent */, TYPE_BASE_APPLICATION, "testWin");
+        mDisplayContent.mOpeningApps.add(win.mActivityRecord);
+        final WindowState overlayWin = createAppOverlayWindow();
+        try {
+            final AnimationAdapter adapter = mController.createRemoteAnimationRecord(
+                    win.mActivityRecord,
+                    new Point(50, 100), null, new Rect(50, 100, 150, 150), null,
+                    true /* showBackdrop */).mAdapter;
+            adapter.startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_APP_TRANSITION,
+                    mFinishedCallback);
+            mController.goodToGo(TRANSIT_OLD_ACTIVITY_OPEN);
+            mWm.mAnimator.executeAfterPrepareSurfacesRunnables();
+            final ArgumentCaptor<RemoteAnimationTarget[]> appsCaptor =
+                    ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
+            final ArgumentCaptor<RemoteAnimationTarget[]> wallpapersCaptor =
+                    ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
+            final ArgumentCaptor<RemoteAnimationTarget[]> nonAppsCaptor =
+                    ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
+            final ArgumentCaptor<IRemoteAnimationFinishedCallback> finishedCaptor =
+                    ArgumentCaptor.forClass(IRemoteAnimationFinishedCallback.class);
+            verify(mMockRunner).onAnimationStart(eq(TRANSIT_OLD_ACTIVITY_OPEN),
+                    appsCaptor.capture(), wallpapersCaptor.capture(), nonAppsCaptor.capture(),
+                    finishedCaptor.capture());
+            assertEquals(1, appsCaptor.getValue().length);
+            final RemoteAnimationTarget app = appsCaptor.getValue()[0];
+            assertTrue(app.showBackdrop);
+        } finally {
+            mDisplayContent.mOpeningApps.clear();
+        }
+    }
+
+    @Test
     public void testRun() throws Exception {
         final WindowState win = createWindow(null /* parent */, TYPE_BASE_APPLICATION, "testWin");
         mDisplayContent.mOpeningApps.add(win.mActivityRecord);
         final WindowState overlayWin = createAppOverlayWindow();
         try {
-            final AnimationAdapter adapter = mController.createRemoteAnimationRecord(win.mActivityRecord,
-                    new Point(50, 100), null, new Rect(50, 100, 150, 150), null).mAdapter;
+            final AnimationAdapter adapter = mController.createRemoteAnimationRecord(
+                    win.mActivityRecord,
+                    new Point(50, 100), null, new Rect(50, 100, 150, 150), null, false).mAdapter;
             adapter.startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_APP_TRANSITION,
                     mFinishedCallback);
             mController.goodToGo(TRANSIT_OLD_ACTIVITY_OPEN);
@@ -162,8 +203,9 @@
     @Test
     public void testCancel() throws Exception {
         final WindowState win = createWindow(null /* parent */, TYPE_BASE_APPLICATION, "testWin");
-        final AnimationAdapter adapter = mController.createRemoteAnimationRecord(win.mActivityRecord,
-                new Point(50, 100), null, new Rect(50, 100, 150, 150), null).mAdapter;
+        final AnimationAdapter adapter = mController.createRemoteAnimationRecord(
+                win.mActivityRecord,
+                new Point(50, 100), null, new Rect(50, 100, 150, 150), null, false).mAdapter;
         adapter.startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_APP_TRANSITION,
                 mFinishedCallback);
         mController.goodToGo(TRANSIT_OLD_ACTIVITY_OPEN);
@@ -175,8 +217,9 @@
     @Test
     public void testTimeout() throws Exception {
         final WindowState win = createWindow(null /* parent */, TYPE_BASE_APPLICATION, "testWin");
-        final AnimationAdapter adapter = mController.createRemoteAnimationRecord(win.mActivityRecord,
-                new Point(50, 100), null, new Rect(50, 100, 150, 150), null).mAdapter;
+        final AnimationAdapter adapter = mController.createRemoteAnimationRecord(
+                win.mActivityRecord,
+                new Point(50, 100), null, new Rect(50, 100, 150, 150), null, false).mAdapter;
         adapter.startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_APP_TRANSITION,
                 mFinishedCallback);
         mController.goodToGo(TRANSIT_OLD_ACTIVITY_OPEN);
@@ -197,7 +240,7 @@
                     "testWin");
             final AnimationAdapter adapter = mController.createRemoteAnimationRecord(
                     win.mActivityRecord, new Point(50, 100), null, new Rect(50, 100, 150, 150),
-                    null).mAdapter;
+                    null, false).mAdapter;
             adapter.startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_APP_TRANSITION,
                     mFinishedCallback);
             mController.goodToGo(TRANSIT_OLD_ACTIVITY_OPEN);
@@ -229,7 +272,7 @@
     public void testNotReallyStarted() throws Exception {
         final WindowState win = createWindow(null /* parent */, TYPE_BASE_APPLICATION, "testWin");
         mController.createRemoteAnimationRecord(win.mActivityRecord,
-                new Point(50, 100), null, new Rect(50, 100, 150, 150), null);
+                new Point(50, 100), null, new Rect(50, 100, 150, 150), null, false);
         mController.goodToGo(TRANSIT_OLD_ACTIVITY_OPEN);
         verify(mMockRunner, never()).onAnimationStart(anyInt(), any(), any(), any(), any());
         verify(mMockRunner).onAnimationCancelled(anyBoolean());
@@ -240,9 +283,10 @@
         final WindowState win1 = createWindow(null /* parent */, TYPE_BASE_APPLICATION, "testWin1");
         final WindowState win2 = createWindow(null /* parent */, TYPE_BASE_APPLICATION, "testWin2");
         mController.createRemoteAnimationRecord(win1.mActivityRecord,
-                new Point(50, 100), null, new Rect(50, 100, 150, 150), null);
-        final AnimationAdapter adapter = mController.createRemoteAnimationRecord(win2.mActivityRecord,
-                new Point(50, 100), null, new Rect(50, 100, 150, 150), null).mAdapter;
+                new Point(50, 100), null, new Rect(50, 100, 150, 150), null, false);
+        final AnimationAdapter adapter = mController.createRemoteAnimationRecord(
+                win2.mActivityRecord,
+                new Point(50, 100), null, new Rect(50, 100, 150, 150), null, false).mAdapter;
         adapter.startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_APP_TRANSITION,
                 mFinishedCallback);
         mController.goodToGo(TRANSIT_OLD_ACTIVITY_OPEN);
@@ -265,8 +309,9 @@
     @Test
     public void testRemovedBeforeStarted() throws Exception {
         final WindowState win = createWindow(null /* parent */, TYPE_BASE_APPLICATION, "testWin");
-        final AnimationAdapter adapter = mController.createRemoteAnimationRecord(win.mActivityRecord,
-                new Point(50, 100), null, new Rect(50, 100, 150, 150), null).mAdapter;
+        final AnimationAdapter adapter = mController.createRemoteAnimationRecord(
+                win.mActivityRecord,
+                new Point(50, 100), null, new Rect(50, 100, 150, 150), null, false).mAdapter;
         adapter.startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_APP_TRANSITION,
                 mFinishedCallback);
         win.mActivityRecord.removeImmediately();
@@ -310,7 +355,7 @@
         try {
             final RemoteAnimationRecord record = mController.createRemoteAnimationRecord(
                     win.mActivityRecord, new Point(50, 100), null, new Rect(50, 100, 150, 150),
-                    new Rect(0, 0, 200, 200));
+                    new Rect(0, 0, 200, 200), false);
             assertNotNull(record.mThumbnailAdapter);
             ((AnimationAdapter) record.mAdapter)
                     .startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_WINDOW_ANIMATION,
@@ -364,7 +409,7 @@
         try {
             final RemoteAnimationRecord record = mController.createRemoteAnimationRecord(
                     win.mActivityRecord, new Point(0, 0), null, new Rect(0, 0, 200, 200),
-                    new Rect(50, 100, 150, 150));
+                    new Rect(50, 100, 150, 150), false);
             assertNotNull(record.mThumbnailAdapter);
             ((AnimationAdapter) record.mAdapter)
                     .startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_WINDOW_ANIMATION,
@@ -418,7 +463,7 @@
         try {
             final RemoteAnimationRecord record = mController.createRemoteAnimationRecord(
                     win.mActivityRecord, new Point(100, 100), null, new Rect(150, 150, 400, 400),
-                    new Rect(50, 100, 150, 150));
+                    new Rect(50, 100, 150, 150), false);
             assertNotNull(record.mThumbnailAdapter);
             ((AnimationAdapter) record.mAdapter)
                     .startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_WINDOW_ANIMATION,
@@ -475,8 +520,9 @@
         final WindowState win = createWindow(null /* parent */, TYPE_BASE_APPLICATION, "testWin");
         mDisplayContent.mOpeningApps.add(win.mActivityRecord);
         try {
-            final AnimationAdapter adapter = mController.createRemoteAnimationRecord(win.mActivityRecord,
-                    new Point(50, 100), null, new Rect(50, 100, 150, 150), null).mAdapter;
+            final AnimationAdapter adapter = mController.createRemoteAnimationRecord(
+                    win.mActivityRecord,
+                    new Point(50, 100), null, new Rect(50, 100, 150, 150), null, false).mAdapter;
             adapter.startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_APP_TRANSITION,
                     mFinishedCallback);
             mController.goodToGo(TRANSIT_OLD_ACTIVITY_OPEN);
@@ -507,8 +553,9 @@
         final WindowState win = createWindow(null /* parent */, TYPE_BASE_APPLICATION, "testWin");
         mDisplayContent.mOpeningApps.add(win.mActivityRecord);
         try {
-            final AnimationAdapter adapter = mController.createRemoteAnimationRecord(win.mActivityRecord,
-                    new Point(50, 100), null, new Rect(50, 100, 150, 150), null).mAdapter;
+            final AnimationAdapter adapter = mController.createRemoteAnimationRecord(
+                    win.mActivityRecord,
+                    new Point(50, 100), null, new Rect(50, 100, 150, 150), null, false).mAdapter;
             adapter.startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_APP_TRANSITION,
                     mFinishedCallback);
             mController.goodToGo(TRANSIT_OLD_ACTIVITY_OPEN);
@@ -544,7 +591,7 @@
         try {
             final AnimationAdapter adapter = mController.createRemoteAnimationRecord(
                     win.mActivityRecord, new Point(50, 100), null,
-                    new Rect(50, 100, 150, 150), null).mAdapter;
+                    new Rect(50, 100, 150, 150), null, false).mAdapter;
             adapter.startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_APP_TRANSITION,
                     mFinishedCallback);
             mController.goodToGo(TRANSIT_OLD_KEYGUARD_GOING_AWAY);
@@ -594,7 +641,7 @@
         try {
             final AnimationAdapter adapter = mController.createRemoteAnimationRecord(
                     win.mActivityRecord, new Point(50, 100), null,
-                    new Rect(50, 100, 150, 150), null).mAdapter;
+                    new Rect(50, 100, 150, 150), null, false).mAdapter;
             adapter.startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_APP_TRANSITION,
                     mFinishedCallback);
             mController.goodToGo(TRANSIT_OLD_KEYGUARD_GOING_AWAY_ON_WALLPAPER);
@@ -728,7 +775,7 @@
             mDisplayContent.mOpeningApps.add(win2.mActivityRecord);
             final AnimationAdapter adapter = mController.createRemoteAnimationRecord(
                     win2.mActivityRecord, new Point(50, 100), null,
-                    new Rect(50, 100, 150, 150), null).mAdapter;
+                    new Rect(50, 100, 150, 150), null, false).mAdapter;
             adapter.startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_APP_TRANSITION,
                     mFinishedCallback);
 
@@ -758,7 +805,7 @@
 
         final AnimationAdapter adapter = mController.createRemoteAnimationRecord(
                 win.mActivityRecord, new Point(50, 100), null,
-                new Rect(50, 100, 150, 150), null).mAdapter;
+                new Rect(50, 100, 150, 150), null, false).mAdapter;
         adapter.startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_APP_TRANSITION,
                 mFinishedCallback);
         mController.goodToGo(transit);
diff --git a/services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java b/services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java
index 700fadd..68079f4 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RootWindowContainerTests.java
@@ -657,7 +657,7 @@
 
         doReturn(true).when(mRootWindowContainer).resumeHomeActivity(any(), any(), any());
 
-        mAtm.setBooted(true);
+        setBooted(mAtm);
 
         // Trigger resume on all displays
         mRootWindowContainer.resumeFocusedTasksTopActivities();
@@ -685,7 +685,7 @@
 
         doReturn(true).when(mRootWindowContainer).resumeHomeActivity(any(), any(), any());
 
-        mAtm.setBooted(true);
+        setBooted(mAtm);
 
         // Trigger resume on all displays
         mRootWindowContainer.resumeFocusedTasksTopActivities();
@@ -771,17 +771,10 @@
     @Test
     public void testNotStartHomeBeforeBoot() {
         final int displayId = 1;
-        final boolean isBooting = mAtm.mAmInternal.isBooting();
-        final boolean isBooted = mAtm.mAmInternal.isBooted();
-        try {
-            mAtm.mAmInternal.setBooting(false);
-            mAtm.mAmInternal.setBooted(false);
-            mRootWindowContainer.onDisplayAdded(displayId);
-            verify(mRootWindowContainer, never()).startHomeOnDisplay(anyInt(), any(), anyInt());
-        } finally {
-            mAtm.mAmInternal.setBooting(isBooting);
-            mAtm.mAmInternal.setBooted(isBooted);
-        }
+        doReturn(false).when(mAtm).isBooting();
+        doReturn(false).when(mAtm).isBooted();
+        mRootWindowContainer.onDisplayAdded(displayId);
+        verify(mRootWindowContainer, never()).startHomeOnDisplay(anyInt(), any(), anyInt());
     }
 
     /**
diff --git a/services/tests/wmtests/src/com/android/server/wm/RunningTasksTest.java b/services/tests/wmtests/src/com/android/server/wm/RunningTasksTest.java
index 33b2366..b1acae2 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RunningTasksTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RunningTasksTest.java
@@ -35,6 +35,8 @@
 
 import androidx.test.filters.MediumTest;
 
+import com.google.common.truth.Correspondence;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -52,6 +54,9 @@
 public class RunningTasksTest extends WindowTestsBase {
 
     private static final ArraySet<Integer> PROFILE_IDS = new ArraySet<>();
+    private static final Correspondence<RunningTaskInfo, Integer> TASKINFO_HAS_ID =
+            Correspondence.transforming((RunningTaskInfo t) -> t.taskId, "has id");
+
 
     private RunningTasks mRunningTasks;
 
@@ -91,8 +96,8 @@
         // collected from all tasks across all the stacks
         final int numFetchTasks = 5;
         ArrayList<RunningTaskInfo> tasks = new ArrayList<>();
-        mRunningTasks.getTasks(5, tasks, FLAG_ALLOWED | FLAG_CROSS_USERS, mRootWindowContainer,
-                -1 /* callingUid */, PROFILE_IDS);
+        mRunningTasks.getTasks(5, tasks, FLAG_ALLOWED | FLAG_CROSS_USERS,
+                mAtm.getRecentTasks(), mRootWindowContainer, -1 /* callingUid */, PROFILE_IDS);
         assertThat(tasks).hasSize(numFetchTasks);
         for (int i = 0; i < numFetchTasks; i++) {
             assertEquals(numTasks - i - 1, tasks.get(i).id);
@@ -102,7 +107,7 @@
         // and does not crash
         tasks.clear();
         mRunningTasks.getTasks(100, tasks, FLAG_ALLOWED | FLAG_CROSS_USERS,
-                mRootWindowContainer, -1 /* callingUid */, PROFILE_IDS);
+                mAtm.getRecentTasks(), mRootWindowContainer, -1 /* callingUid */, PROFILE_IDS);
         assertThat(tasks).hasSize(numTasks);
         for (int i = 0; i < numTasks; i++) {
             assertEquals(numTasks - i - 1, tasks.get(i).id);
@@ -126,7 +131,7 @@
         final int numFetchTasks = 5;
         final ArrayList<RunningTaskInfo> tasks = new ArrayList<>();
         mRunningTasks.getTasks(numFetchTasks, tasks, FLAG_ALLOWED | FLAG_CROSS_USERS,
-                mRootWindowContainer, -1 /* callingUid */, PROFILE_IDS);
+                mAtm.getRecentTasks(), mRootWindowContainer, -1 /* callingUid */, PROFILE_IDS);
         assertThat(tasks).hasSize(numFetchTasks);
         for (int i = 0; i < tasks.size(); i++) {
             final Bundle extras = tasks.get(i).baseIntent.getExtras();
@@ -151,8 +156,8 @@
         final int numFetchTasks = 5;
         final ArrayList<RunningTaskInfo> tasks = new ArrayList<>();
         mRunningTasks.getTasks(numFetchTasks, tasks,
-                FLAG_ALLOWED | FLAG_CROSS_USERS | FLAG_KEEP_INTENT_EXTRA, mRootWindowContainer,
-                -1 /* callingUid */, PROFILE_IDS);
+                FLAG_ALLOWED | FLAG_CROSS_USERS | FLAG_KEEP_INTENT_EXTRA,
+                mAtm.getRecentTasks(), mRootWindowContainer, -1 /* callingUid */, PROFILE_IDS);
         assertThat(tasks).hasSize(numFetchTasks);
         for (int i = 0; i < tasks.size(); i++) {
             final Bundle extras = tasks.get(i).baseIntent.getExtras();
@@ -184,8 +189,8 @@
         final int numFetchTasks = 5;
         final ArrayList<RunningTaskInfo> fetchTasks = new ArrayList<>();
         mRunningTasks.getTasks(numFetchTasks, fetchTasks,
-                FLAG_ALLOWED | FLAG_CROSS_USERS | FLAG_KEEP_INTENT_EXTRA, mRootWindowContainer,
-                -1 /* callingUid */, PROFILE_IDS);
+                FLAG_ALLOWED | FLAG_CROSS_USERS | FLAG_KEEP_INTENT_EXTRA,
+                mAtm.getRecentTasks(), mRootWindowContainer, -1 /* callingUid */, PROFILE_IDS);
         assertThat(fetchTasks).hasSize(numFetchTasks);
         assertEquals(fetchTasks.get(0).id, focusedTask.mTaskId);
         assertEquals(fetchTasks.get(1).id, visibleTask.mTaskId);
@@ -210,4 +215,46 @@
         task.intent = activity.intent;
         return task;
     }
+
+    @Test
+    public void testMultipleDisplays() {
+        final DisplayContent display0 = new TestDisplayContent.Builder(mAtm, 1000, 2500).build();
+        final DisplayContent display1 = new TestDisplayContent.Builder(mAtm, 1000, 2500).build();
+        final int numTasks = 10;
+        final ArrayList<Task> tasks = new ArrayList<>();
+        for (int i = 0; i < numTasks; i++) {
+            final Task stack = new TaskBuilder(mSupervisor)
+                    .setDisplay(i % 2 == 0 ? display0 : display1)
+                    .setOnTop(true)
+                    .build();
+            final Task task = createTask(stack, ".Task" + i, i, i, null);
+            tasks.add(task);
+        }
+
+        final int numFetchTasks = numTasks;
+        final ArrayList<RunningTaskInfo> fetchTasks = new ArrayList<>();
+
+        mRunningTasks.getTasks(numFetchTasks, fetchTasks,
+                FLAG_ALLOWED | FLAG_CROSS_USERS,
+                mAtm.getRecentTasks(), display0, -1 /* callingUid */, PROFILE_IDS);
+        assertThat(fetchTasks).hasSize(numTasks / 2);
+        assertThat(fetchTasks).comparingElementsUsing(TASKINFO_HAS_ID)
+                .containsExactly(0, 2, 4, 6, 8);
+
+        fetchTasks.clear();
+        mRunningTasks.getTasks(numFetchTasks, fetchTasks,
+                FLAG_ALLOWED | FLAG_CROSS_USERS,
+                mAtm.getRecentTasks(), display1, -1 /* callingUid */, PROFILE_IDS);
+        assertThat(fetchTasks).hasSize(numTasks / 2);
+        assertThat(fetchTasks).comparingElementsUsing(TASKINFO_HAS_ID)
+                .containsExactly(1, 3, 5, 7, 9);
+
+        fetchTasks.clear();
+        mRunningTasks.getTasks(numFetchTasks, fetchTasks,
+                FLAG_ALLOWED | FLAG_CROSS_USERS,
+                mAtm.getRecentTasks(), mRootWindowContainer, -1 /* callingUid */, PROFILE_IDS);
+        assertThat(fetchTasks).hasSize(numTasks);
+        assertThat(fetchTasks).comparingElementsUsing(TASKINFO_HAS_ID)
+                .containsExactly(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
+    }
 }
diff --git a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
index 891b33b..21839aa 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
@@ -61,8 +61,10 @@
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.argThat;
+import static org.mockito.ArgumentMatchers.isNull;
 import static org.mockito.ArgumentMatchers.same;
 import static org.mockito.Mockito.atLeastOnce;
 import static org.mockito.Mockito.clearInvocations;
@@ -82,11 +84,14 @@
 import android.platform.test.annotations.Presubmit;
 import android.provider.DeviceConfig;
 import android.provider.DeviceConfig.Properties;
+import android.view.InsetsVisibilities;
 import android.view.WindowManager;
 
 import androidx.test.filters.MediumTest;
 
 import com.android.internal.policy.SystemBarUtils;
+import com.android.internal.statusbar.LetterboxDetails;
+import com.android.server.statusbar.StatusBarManagerInternal;
 
 import libcore.junit.util.compat.CoreCompatChangeRule.DisableCompatChanges;
 import libcore.junit.util.compat.CoreCompatChangeRule.EnableCompatChanges;
@@ -97,6 +102,7 @@
 import org.junit.Test;
 import org.junit.rules.TestRule;
 import org.junit.runner.RunWith;
+import org.mockito.Mockito;
 
 /**
  * Tests for Size Compatibility mode.
@@ -1259,6 +1265,36 @@
     }
 
     @Test
+    @EnableCompatChanges({ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO,
+            ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_LARGE})
+    public void testOverrideMinAspectRatioLargeForResizableAppInSplitScreen() {
+        setUpDisplaySizeWithApp(/* dw= */ 1000, /* dh= */ 2800);
+
+        // Create a size compat activity on the same task.
+        final ActivityRecord activity = new ActivityBuilder(mAtm)
+                .setTask(mTask)
+                .setScreenOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
+                .setComponent(ComponentName.createRelative(mContext,
+                        SizeCompatTests.class.getName()))
+                .setUid(android.os.Process.myUid())
+                .build();
+
+        final TestSplitOrganizer organizer =
+                new TestSplitOrganizer(mAtm, activity.getDisplayContent());
+
+        // Move activity to split screen which takes half of the screen.
+        mTask.reparent(organizer.mPrimary, POSITION_TOP, /* moveParents= */ false , "test");
+        organizer.mPrimary.setBounds(0, 0, 1000, 1400);
+        assertEquals(WINDOWING_MODE_MULTI_WINDOW, mTask.getWindowingMode());
+        assertEquals(WINDOWING_MODE_MULTI_WINDOW, activity.getWindowingMode());
+
+        // The per-package override forces the activity into a 16:9 aspect ratio
+        assertEquals(1400, activity.getBounds().height());
+        assertEquals(1400 / ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE,
+                activity.getBounds().width(), 0.5);
+    }
+
+    @Test
     public void testLaunchWithFixedRotationTransform() {
         final int dw = 1000;
         final int dh = 2500;
@@ -1409,12 +1445,10 @@
         setUpDisplaySizeWithApp(2800, 1400);
         mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
 
-        // Portrait fixed app with min aspect ratio higher that aspect ratio override for fixed
-        // orientation letterbox.
         final float fixedOrientationLetterboxAspectRatio = 1.1f;
         mActivity.mWmService.mLetterboxConfiguration.setFixedOrientationLetterboxAspectRatio(
                 fixedOrientationLetterboxAspectRatio);
-        prepareUnresizable(mActivity, 0, SCREEN_ORIENTATION_PORTRAIT);
+        prepareLimitedBounds(mActivity, SCREEN_ORIENTATION_PORTRAIT, /* isUnresizable= */ false);
 
         final Rect displayBounds = new Rect(mActivity.mDisplayContent.getBounds());
         final Rect activityBounds = new Rect(mActivity.getBounds());
@@ -1435,6 +1469,111 @@
     }
 
     @Test
+    public void testDisplayIgnoreOrientationRequest_unresizableWithCorrespondingMinAspectRatio() {
+        // Set up a display in landscape and ignoring orientation request.
+        setUpDisplaySizeWithApp(2800, 1400);
+        mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
+
+        final float fixedOrientationLetterboxAspectRatio = 1.1f;
+        mActivity.mWmService.mLetterboxConfiguration.setFixedOrientationLetterboxAspectRatio(
+                fixedOrientationLetterboxAspectRatio);
+        mActivity.mWmService.mLetterboxConfiguration.setDefaultMinAspectRatioForUnresizableApps(
+                1.5f);
+        prepareUnresizable(mActivity, SCREEN_ORIENTATION_PORTRAIT);
+
+        final Rect displayBounds = new Rect(mActivity.mDisplayContent.getBounds());
+        final Rect activityBounds = new Rect(mActivity.getBounds());
+
+        // Display shouldn't be rotated.
+        assertEquals(SCREEN_ORIENTATION_UNSPECIFIED,
+                mActivity.mDisplayContent.getLastOrientation());
+        assertTrue(displayBounds.width() > displayBounds.height());
+
+        // App should launch in fixed orientation letterbox.
+        assertTrue(mActivity.isLetterboxedForFixedOrientationAndAspectRatio());
+        assertFalse(mActivity.inSizeCompatMode());
+
+        // Letterbox logic should use config_letterboxDefaultMinAspectRatioForUnresizableApps over
+        // config_fixedOrientationLetterboxAspectRatio.
+        assertEquals(displayBounds.height(), activityBounds.height());
+        final float defaultAspectRatio = mActivity.mWmService.mLetterboxConfiguration
+                .getDefaultMinAspectRatioForUnresizableApps();
+        assertEquals(displayBounds.height() / defaultAspectRatio, activityBounds.width(), 0.5);
+    }
+
+    @Test
+    public void testSplitAspectRatioForUnresizablePortraitApps() {
+        // Set up a display in landscape and ignoring orientation request.
+        int screenWidth = 1600;
+        int screenHeight = 1400;
+        setUpDisplaySizeWithApp(screenWidth, screenHeight);
+        mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
+        mActivity.mWmService.mLetterboxConfiguration
+                        .setIsSplitScreenAspectRatioForUnresizableAppsEnabled(true);
+
+        mActivity.mWmService.mLetterboxConfiguration.setFixedOrientationLetterboxAspectRatio(1.1f);
+
+        prepareUnresizable(mActivity, SCREEN_ORIENTATION_PORTRAIT);
+
+        final Rect displayBounds = new Rect(mActivity.mDisplayContent.getBounds());
+        final Rect activityBounds = new Rect(mActivity.getBounds());
+
+        // App should launch in fixed orientation letterbox.
+        assertTrue(mActivity.isLetterboxedForFixedOrientationAndAspectRatio());
+        // Checking that there is no size compat mode.
+        assertFitted();
+
+        assertEquals(displayBounds.height(), activityBounds.height());
+        assertTrue(activityBounds.width() < displayBounds.width() / 2);
+
+        final TestSplitOrganizer organizer =
+                new TestSplitOrganizer(mAtm, mActivity.getDisplayContent());
+        // Move activity to split screen which takes half of the screen.
+        mTask.reparent(organizer.mPrimary, POSITION_TOP, /* moveParents= */ false , "test");
+        organizer.mPrimary.setBounds(0, 0, getExpectedSplitSize(screenWidth), screenHeight);
+        assertEquals(WINDOWING_MODE_MULTI_WINDOW, mTask.getWindowingMode());
+        assertEquals(WINDOWING_MODE_MULTI_WINDOW, mActivity.getWindowingMode());
+        // Checking that there is no size compat mode.
+        assertFitted();
+    }
+
+    @Test
+    public void testSplitAspectRatioForUnresizableLandscapeApps() {
+        // Set up a display in portrait and ignoring orientation request.
+        int screenWidth = 1400;
+        int screenHeight = 1600;
+        setUpDisplaySizeWithApp(screenWidth, screenHeight);
+        mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
+        mActivity.mWmService.mLetterboxConfiguration
+                        .setIsSplitScreenAspectRatioForUnresizableAppsEnabled(true);
+
+        mActivity.mWmService.mLetterboxConfiguration.setFixedOrientationLetterboxAspectRatio(1.1f);
+
+        prepareUnresizable(mActivity, SCREEN_ORIENTATION_LANDSCAPE);
+
+        final Rect displayBounds = new Rect(mActivity.mDisplayContent.getBounds());
+        final Rect activityBounds = new Rect(mActivity.getBounds());
+
+        // App should launch in fixed orientation letterbox.
+        assertTrue(mActivity.isLetterboxedForFixedOrientationAndAspectRatio());
+        // Checking that there is no size compat mode.
+        assertFitted();
+
+        assertEquals(displayBounds.width(), activityBounds.width());
+        assertTrue(activityBounds.height() < displayBounds.height() / 2);
+
+        final TestSplitOrganizer organizer =
+                new TestSplitOrganizer(mAtm, mActivity.getDisplayContent());
+        // Move activity to split screen which takes half of the screen.
+        mTask.reparent(organizer.mPrimary, POSITION_TOP, /* moveParents= */ false , "test");
+        organizer.mPrimary.setBounds(0, 0, screenWidth, getExpectedSplitSize(screenHeight));
+        assertEquals(WINDOWING_MODE_MULTI_WINDOW, mTask.getWindowingMode());
+        assertEquals(WINDOWING_MODE_MULTI_WINDOW, mActivity.getWindowingMode());
+        // Checking that there is no size compat mode.
+        assertFitted();
+    }
+
+    @Test
     public void
             testDisplayIgnoreOrientationRequest_orientationLetterboxBecameSizeCompatAfterRotate() {
         // Set up a display in landscape and ignoring orientation request.
@@ -1908,7 +2047,7 @@
     }
 
     @Test
-    public void testSupportsNonResizableInSplitScreen_fillTaskForSameOrientation() {
+    public void testSupportsNonResizableInSplitScreen_aspectRatioLetterboxInSameOrientation() {
         // Support non resizable in multi window
         mAtm.mDevEnableNonResizableMultiWindow = true;
         setUpDisplaySizeWithApp(1000, 2800);
@@ -1960,7 +2099,7 @@
         prepareUnresizable(mActivity, /* maxAspect */ 1.1f, SCREEN_ORIENTATION_UNSPECIFIED);
 
         // Bounds are letterboxed to respect the provided max aspect ratio.
-        assertEquals(mActivity.getBounds(), new Rect(0, 0, 1000, 1100));
+        assertEquals(mActivity.getBounds(), new Rect(0, 850, 1000, 1950));
 
         // Move activity to split screen which has landscape size.
         mTask.reparent(organizer.mPrimary, POSITION_TOP, /* moveParents */ false, "test");
@@ -1980,6 +2119,104 @@
         assertLetterboxSurfacesDrawnBetweenActivityAndParentBounds(organizer.mPrimary.getBounds());
     }
 
+    @Test
+    public void testLetterboxDetailsForStatusBar_noLetterbox() {
+        setUpDisplaySizeWithApp(2800, 1000);
+        addStatusBar(mActivity.mDisplayContent);
+        addWindowToActivity(mActivity); // Add a window to the activity so that we can get an
+        // appearance inside letterboxDetails
+
+        DisplayPolicy displayPolicy = mActivity.getDisplayContent().getDisplayPolicy();
+        StatusBarManagerInternal statusBar = displayPolicy.getStatusBarManagerInternal();
+        // We should get a null LetterboxDetails object as there is no letterboxed activity, so
+        // nothing will get passed to SysUI
+        verify(statusBar, never()).onSystemBarAttributesChanged(anyInt(), anyInt(),
+                any(), anyBoolean(), anyInt(),
+                any(InsetsVisibilities.class), isNull(), isNull());
+
+    }
+
+    @Test
+    public void testLetterboxDetailsForStatusBar_letterboxedForMaxAspectRatio() {
+        setUpDisplaySizeWithApp(2800, 1000);
+        addStatusBar(mActivity.mDisplayContent);
+        addWindowToActivity(mActivity); // Add a window to the activity so that we can get an
+        // appearance inside letterboxDetails
+        // Prepare unresizable activity with max aspect ratio
+        prepareUnresizable(mActivity, /* maxAspect */ 1.1f, SCREEN_ORIENTATION_UNSPECIFIED);
+        // Refresh the letterbox
+        mActivity.mRootWindowContainer.performSurfacePlacement();
+
+        Rect mBounds = new Rect(mActivity.getWindowConfiguration().getBounds());
+        assertEquals(mBounds, new Rect(850, 0, 1950, 1000));
+
+        DisplayPolicy displayPolicy = mActivity.getDisplayContent().getDisplayPolicy();
+        LetterboxDetails[] expectedLetterboxDetails = {new LetterboxDetails(
+                mBounds,
+                mActivity.getDisplayContent().getBounds(),
+                mActivity.findMainWindow().mAttrs.insetsFlags.appearance
+        )};
+
+        // Check that letterboxDetails actually gets passed to SysUI
+        StatusBarManagerInternal statusBar = displayPolicy.getStatusBarManagerInternal();
+        verify(statusBar).onSystemBarAttributesChanged(anyInt(), anyInt(),
+                any(), anyBoolean(), anyInt(),
+                any(InsetsVisibilities.class), isNull(), eq(expectedLetterboxDetails));
+    }
+
+    @Test
+    public void testSplitScreenLetterboxDetailsForStatusBar_twoLetterboxedApps() {
+        mAtm.mDevEnableNonResizableMultiWindow = true;
+        setUpDisplaySizeWithApp(2800, 1000);
+        addStatusBar(mActivity.mDisplayContent);
+        // Create another task for the second activity
+        final Task newTask = new TaskBuilder(mSupervisor).setDisplay(mActivity.getDisplayContent())
+                .setCreateActivity(true).build();
+        ActivityRecord newActivity = newTask.getTopNonFinishingActivity();
+
+        final TestSplitOrganizer organizer =
+                new TestSplitOrganizer(mAtm, mActivity.getDisplayContent());
+
+        // Move first activity to split screen which takes half of the screen.
+        organizer.mPrimary.setBounds(0, 0, 1400, 1000);
+        organizer.putTaskToPrimary(mTask, true);
+        // Move second activity to split screen which takes half of the screen.
+        organizer.mSecondary.setBounds(1400, 0, 2800, 1000);
+        organizer.putTaskToSecondary(newTask, true);
+
+        addWindowToActivity(mActivity); // Add a window to the activity so that we can get an
+        // appearance inside letterboxDetails
+        // Prepare unresizable activity with max aspect ratio
+        prepareUnresizable(mActivity, /* maxAspect */ 1.1f, SCREEN_ORIENTATION_UNSPECIFIED);
+        addWindowToActivity(newActivity);
+        prepareUnresizable(newActivity, /* maxAspect */ 1.1f, SCREEN_ORIENTATION_UNSPECIFIED);
+
+        // Refresh the letterboxes
+        newActivity.mRootWindowContainer.performSurfacePlacement();
+
+        Rect mBounds = new Rect(mActivity.getWindowConfiguration().getBounds());
+        assertEquals(mBounds, new Rect(150, 0, 1250, 1000));
+        final Rect newBounds = new Rect(newActivity.getWindowConfiguration().getBounds());
+        assertEquals(newBounds, new Rect(1550, 0, 2650, 1000));
+
+        DisplayPolicy displayPolicy = mActivity.getDisplayContent().getDisplayPolicy();
+        LetterboxDetails[] expectedLetterboxDetails = { new LetterboxDetails(
+                mBounds,
+                organizer.mPrimary.getBounds(),
+                mActivity.findMainWindow().mAttrs.insetsFlags.appearance
+        ), new LetterboxDetails(
+                newBounds,
+                organizer.mSecondary.getBounds(),
+                newActivity.findMainWindow().mAttrs.insetsFlags.appearance
+        )};
+
+        // Check that letterboxDetails actually gets passed to SysUI
+        StatusBarManagerInternal statusBar = displayPolicy.getStatusBarManagerInternal();
+        verify(statusBar).onSystemBarAttributesChanged(anyInt(), anyInt(),
+                any(), anyBoolean(), anyInt(),
+                any(InsetsVisibilities.class), isNull(), eq(expectedLetterboxDetails));
+    }
+
     private void recomputeNaturalConfigurationOfUnresizableActivity() {
         // Recompute the natural configuration of the non-resizable activity and the split screen.
         mActivity.clearSizeCompatMode();
@@ -2077,19 +2314,14 @@
         mActivity.mWmService.mLetterboxConfiguration.setLetterboxHorizontalPositionMultiplier(
                 letterboxHorizontalPositionMultiplier);
         prepareUnresizable(mActivity, SCREEN_ORIENTATION_PORTRAIT);
-
         assertEquals(fixedOrientationLetterbox, mActivity.getBounds());
-
         // Rotate to put activity in size compat mode.
         rotateDisplay(mActivity.mDisplayContent, ROTATION_90);
-
         assertTrue(mActivity.inSizeCompatMode());
         // Activity is in size compat mode but not scaled.
         assertEquals(sizeCompatUnscaled, mActivity.getBounds());
-
         // Force activity to scaled down for size compat mode.
         resizeDisplay(mTask.mDisplayContent, 700, 1400);
-
         assertTrue(mActivity.inSizeCompatMode());
         assertScaled();
         assertEquals(sizeCompatScaled, mActivity.getBounds());
@@ -2107,6 +2339,109 @@
     }
 
     @Test
+    public void testUpdateResolvedBoundsVerticalPosition_top() {
+        // Display configured as (1400, 2800).
+        assertVerticalPositionForDifferentDisplayConfigsForLandscapeActivity(
+                /* letterboxVerticalPositionMultiplier */ 0.0f,
+                // At launch.
+                /* fixedOrientationLetterbox */ new Rect(0, 0, 1400, 700),
+                // After 90 degree rotation.
+                /* sizeCompatUnscaled */ new Rect(700, 0, 2100, 700),
+                // After the display is resized to (1400, 700).
+                /* sizeCompatScaled */ new Rect(0, 0, 700, 350));
+    }
+
+    @Test
+    public void testUpdateResolvedBoundsVerticalPosition_center() {
+        // Display configured as (1400, 2800).
+        assertVerticalPositionForDifferentDisplayConfigsForLandscapeActivity(
+                /* letterboxVerticalPositionMultiplier */ 0.5f,
+                // At launch.
+                /* fixedOrientationLetterbox */ new Rect(0, 1050, 1400, 1750),
+                // After 90 degree rotation.
+                /* sizeCompatUnscaled */ new Rect(700, 350, 2100, 1050),
+                // After the display is resized to (1400, 700).
+                /* sizeCompatScaled */ new Rect(0, 525, 700, 875));
+    }
+
+    @Test
+    public void testUpdateResolvedBoundsVerticalPosition_invalidMultiplier_defaultToCenter() {
+        // Display configured as (1400, 2800).
+
+        // Below 0.0.
+        assertVerticalPositionForDifferentDisplayConfigsForLandscapeActivity(
+                /* letterboxVerticalPositionMultiplier */ -1.0f,
+                // At launch.
+                /* fixedOrientationLetterbox */ new Rect(0, 1050, 1400, 1750),
+                // After 90 degree rotation.
+                /* sizeCompatUnscaled */ new Rect(700, 350, 2100, 1050),
+                // After the display is resized to (1400, 700).
+                /* sizeCompatScaled */ new Rect(0, 525, 700, 875));
+
+        // Above 1.0
+        assertVerticalPositionForDifferentDisplayConfigsForLandscapeActivity(
+                /* letterboxVerticalPositionMultiplier */ 2.0f,
+                // At launch.
+                /* fixedOrientationLetterbox */ new Rect(0, 1050, 1400, 1750),
+                // After 90 degree rotation.
+                /* sizeCompatUnscaled */ new Rect(700, 350, 2100, 1050),
+                // After the display is resized to (1400, 700).
+                /* sizeCompatScaled */ new Rect(0, 525, 700, 875));
+    }
+
+    @Test
+    public void testUpdateResolvedBoundsVerticalPosition_bottom() {
+        // Display configured as (1400, 2800).
+        assertVerticalPositionForDifferentDisplayConfigsForLandscapeActivity(
+                /* letterboxVerticalPositionMultiplier */ 1.0f,
+                // At launch.
+                /* fixedOrientationLetterbox */ new Rect(0, 2100, 1400, 2800),
+                // After 90 degree rotation.
+                /* sizeCompatUnscaled */ new Rect(700, 700, 2100, 1400),
+                // After the display is resized to (1400, 700).
+                /* sizeCompatScaled */ new Rect(0, 1050, 700, 1400));
+    }
+
+    private void assertVerticalPositionForDifferentDisplayConfigsForLandscapeActivity(
+            float letterboxVerticalPositionMultiplier, Rect fixedOrientationLetterbox,
+            Rect sizeCompatUnscaled, Rect sizeCompatScaled) {
+        // Set up a display in portrait and ignoring orientation request.
+        setUpDisplaySizeWithApp(1400, 2800);
+        mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
+
+        mActivity.mWmService.mLetterboxConfiguration.setLetterboxVerticalPositionMultiplier(
+                letterboxVerticalPositionMultiplier);
+        prepareUnresizable(mActivity, SCREEN_ORIENTATION_LANDSCAPE);
+
+        assertEquals(fixedOrientationLetterbox, mActivity.getBounds());
+
+        // Rotate to put activity in size compat mode.
+        rotateDisplay(mActivity.mDisplayContent, ROTATION_90);
+
+        assertTrue(mActivity.inSizeCompatMode());
+        // Activity is in size compat mode but not scaled.
+        assertEquals(sizeCompatUnscaled, mActivity.getBounds());
+
+        // Force activity to scaled down for size compat mode.
+        resizeDisplay(mTask.mDisplayContent, 1400, 700);
+
+        assertTrue(mActivity.inSizeCompatMode());
+        assertScaled();
+        assertEquals(sizeCompatScaled, mActivity.getBounds());
+    }
+
+    @Test
+    public void testUpdateResolvedBoundsVerticalPosition_activityFillParentHeight() {
+        // When activity height equals parent height, multiplier shouldn't have any effect.
+        assertVerticalPositionForDifferentDisplayConfigsForPortraitActivity(
+                /* letterboxVerticalPositionMultiplier */ 0.0f);
+        assertVerticalPositionForDifferentDisplayConfigsForPortraitActivity(
+                /* letterboxVerticalPositionMultiplier */ 0.5f);
+        assertVerticalPositionForDifferentDisplayConfigsForPortraitActivity(
+                /* letterboxVerticalPositionMultiplier */ 1.0f);
+    }
+
+    @Test
     public void testAreBoundsLetterboxed_letterboxedForAspectRatio_returnsTrue() {
         setUpDisplaySizeWithApp(1000, 2500);
 
@@ -2390,6 +2725,16 @@
         assertEquals(newDensity, mActivity.getConfiguration().densityDpi);
     }
 
+    private int getExpectedSplitSize(int dimensionToSplit) {
+        int dividerWindowWidth =
+                mActivity.mWmService.mContext.getResources().getDimensionPixelSize(
+                        com.android.internal.R.dimen.docked_stack_divider_thickness);
+        int dividerInsets =
+                mActivity.mWmService.mContext.getResources().getDimensionPixelSize(
+                        com.android.internal.R.dimen.docked_stack_divider_insets);
+        return (dimensionToSplit - (dividerWindowWidth - dividerInsets * 2)) / 2;
+    }
+
     private void assertHorizontalPositionForDifferentDisplayConfigsForLandscapeActivity(
             float letterboxHorizontalPositionMultiplier) {
         // Set up a display in landscape and ignoring orientation request.
@@ -2399,6 +2744,23 @@
         mActivity.mWmService.mLetterboxConfiguration.setLetterboxHorizontalPositionMultiplier(
                 letterboxHorizontalPositionMultiplier);
         prepareUnresizable(mActivity, SCREEN_ORIENTATION_LANDSCAPE);
+        assertFitted();
+        // Rotate to put activity in size compat mode.
+        rotateDisplay(mActivity.mDisplayContent, ROTATION_90);
+        assertTrue(mActivity.inSizeCompatMode());
+        // Activity is in size compat mode but not scaled.
+        assertEquals(new Rect(0, 1050, 1400, 1750), mActivity.getBounds());
+    }
+
+    private void assertVerticalPositionForDifferentDisplayConfigsForPortraitActivity(
+            float letterboxVerticalPositionMultiplier) {
+        // Set up a display in portrait and ignoring orientation request.
+        setUpDisplaySizeWithApp(1400, 2800);
+        mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
+
+        mActivity.mWmService.mLetterboxConfiguration.setLetterboxVerticalPositionMultiplier(
+                letterboxVerticalPositionMultiplier);
+        prepareUnresizable(mActivity, SCREEN_ORIENTATION_PORTRAIT);
 
         assertFitted();
 
@@ -2407,7 +2769,7 @@
 
         assertTrue(mActivity.inSizeCompatMode());
         // Activity is in size compat mode but not scaled.
-        assertEquals(new Rect(0, 1050, 1400, 1750), mActivity.getBounds());
+        assertEquals(new Rect(1050, 0, 1750, 1400), mActivity.getBounds());
     }
 
     private static WindowState addWindowToActivity(ActivityRecord activity) {
diff --git a/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java b/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java
index 258625c..6c100d7 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java
@@ -68,7 +68,6 @@
 import android.provider.DeviceConfig;
 import android.util.Log;
 import android.view.InputChannel;
-import android.view.Surface;
 import android.view.SurfaceControl;
 
 import com.android.dx.mockito.inline.extended.StaticMockitoSession;
@@ -79,7 +78,6 @@
 import com.android.server.UiThread;
 import com.android.server.Watchdog;
 import com.android.server.am.ActivityManagerService;
-import com.android.server.appop.AppOpsService;
 import com.android.server.display.color.ColorDisplayService;
 import com.android.server.firewall.IntentFirewall;
 import com.android.server.input.InputManagerService;
@@ -96,10 +94,8 @@
 import org.mockito.Mockito;
 import org.mockito.quality.Strictness;
 
-import java.io.File;
 import java.util.ArrayList;
 import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.function.Supplier;
 
 /**
  * JUnit test rule to correctly setting up system services like {@link WindowManagerService}
@@ -127,13 +123,11 @@
     private Description mDescription;
     private Context mContext;
     private StaticMockitoSession mMockitoSession;
-    private ActivityManagerService mAmService;
     private ActivityTaskManagerService mAtmService;
     private WindowManagerService mWmService;
     private WindowState.PowerManagerWrapper mPowerManagerWrapper;
     private InputManagerService mImService;
     private InputChannel mInputChannel;
-    private Supplier<Surface> mSurfaceFactory = () -> mock(Surface.class);
     /**
      * Spied {@link SurfaceControl.Transaction} class than can be used to verify calls.
      */
@@ -291,29 +285,9 @@
     }
 
     private void setUpActivityTaskManagerService() {
-        // ActivityManagerService
-        mAmService = new ActivityManagerService(new AMTestInjector(mContext), null /* thread */);
-        spyOn(mAmService);
-        doReturn(mock(IPackageManager.class)).when(mAmService).getPackageManager();
-        doNothing().when(mAmService).grantImplicitAccess(
-                anyInt(), any(), anyInt(), anyInt());
-
         // ActivityManagerInternal
-        final ActivityManagerInternal amInternal = mAmService.mInternal;
-        spyOn(amInternal);
-        doNothing().when(amInternal).trimApplications();
-        doNothing().when(amInternal).scheduleAppGcs();
-        doNothing().when(amInternal).updateCpuStats();
-        doNothing().when(amInternal).updateOomAdj();
-        doNothing().when(amInternal).updateBatteryStats(any(), anyInt(), anyInt(), anyBoolean());
-        doNothing().when(amInternal).updateActivityUsageStats(
-                any(), anyInt(), anyInt(), any(), any());
-        doNothing().when(amInternal).startProcess(
-                any(), any(), anyBoolean(), anyBoolean(), any(), any());
-        doNothing().when(amInternal).updateOomLevelsForDisplay(anyInt());
-        doNothing().when(amInternal).broadcastGlobalConfigurationChanged(anyInt(), anyBoolean());
-        doNothing().when(amInternal).cleanUpServices(anyInt(), any(), any());
-        doNothing().when(amInternal).reportCurKeyguardUsageEvent(anyBoolean());
+        final ActivityManagerInternal amInternal =
+                mock(ActivityManagerInternal.class, withSettings().stubOnly());
         doReturn(UserHandle.USER_SYSTEM).when(amInternal).getCurrentUserId();
         doReturn(TEST_USER_PROFILE_IDS).when(amInternal).getCurrentProfileIds();
         doReturn(true).when(amInternal).isUserRunning(anyInt(), anyInt());
@@ -322,7 +296,9 @@
         doReturn(false).when(amInternal).isActivityStartsLoggingEnabled();
         LocalServices.addService(ActivityManagerInternal.class, amInternal);
 
-        mAtmService = new TestActivityTaskManagerService(mContext, mAmService);
+        final ActivityManagerService amService =
+                mock(ActivityManagerService.class, withSettings().stubOnly());
+        mAtmService = new TestActivityTaskManagerService(mContext, amService);
         LocalServices.addService(ActivityTaskManagerInternal.class, mAtmService.getAtmInternal());
     }
 
@@ -336,7 +312,7 @@
         mWmService = WindowManagerService.main(
                 mContext, mImService, false, false, wmPolicy, mAtmService,
                 testDisplayWindowSettingsProvider, StubTransaction::new,
-                () -> mSurfaceFactory.get(), (unused) -> new MockSurfaceControlBuilder());
+                (unused) -> new MockSurfaceControlBuilder());
         spyOn(mWmService);
         spyOn(mWmService.mRoot);
         // Invoked during {@link ActivityStack} creation.
@@ -357,7 +333,7 @@
                 null, null, mTransaction, mWmService.mPowerManagerInternal);
 
         mWmService.onInitReady();
-        mAmService.setWindowManager(mWmService);
+        mAtmService.setWindowManager(mWmService);
         mWmService.mDisplayEnabled = true;
         mWmService.mDisplayReady = true;
         // Set configuration for default display
@@ -644,32 +620,4 @@
             doReturn(true).when(controller).checkKeyguardVisibility(any());
         }
     }
-
-    // TODO: Can we just mock this?
-    private static class AMTestInjector extends ActivityManagerService.Injector {
-
-        AMTestInjector(Context context) {
-            super(context);
-        }
-
-        @Override
-        public Context getContext() {
-            return getInstrumentation().getTargetContext();
-        }
-
-        @Override
-        public AppOpsService getAppOpsService(File file, Handler handler) {
-            return null;
-        }
-
-        @Override
-        public Handler getUiHandler(ActivityManagerService service) {
-            return UiThread.getHandler();
-        }
-
-        @Override
-        public boolean isNetworkRestrictedForUid(int uid) {
-            return false;
-        }
-    }
 }
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java
index e8f1d23..7f09606 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java
@@ -82,7 +82,7 @@
                 mDisplayContent, WINDOWING_MODE_MULTI_WINDOW, ACTIVITY_TYPE_STANDARD);
         adjacentRootTask.mCreatedByOrganizer = true;
         final TaskDisplayArea taskDisplayArea = rootTask.getDisplayArea();
-        adjacentRootTask.setAdjacentTaskFragment(rootTask, false /* moveTogether */);
+        adjacentRootTask.setAdjacentTaskFragment(rootTask);
 
         taskDisplayArea.setLaunchAdjacentFlagRootTask(adjacentRootTask);
         Task actualRootTask = taskDisplayArea.getLaunchRootTask(
@@ -108,7 +108,7 @@
         final Task adjacentRootTask = createTask(
                 mDisplayContent, WINDOWING_MODE_MULTI_WINDOW, ACTIVITY_TYPE_STANDARD);
         adjacentRootTask.mCreatedByOrganizer = true;
-        adjacentRootTask.setAdjacentTaskFragment(rootTask, false /* moveTogether */);
+        adjacentRootTask.setAdjacentTaskFragment(rootTask);
 
         taskDisplayArea.setLaunchRootTask(rootTask,
                 new int[]{WINDOWING_MODE_MULTI_WINDOW}, new int[]{ACTIVITY_TYPE_STANDARD});
@@ -129,7 +129,7 @@
                 mDisplayContent, WINDOWING_MODE_MULTI_WINDOW, ACTIVITY_TYPE_STANDARD);
         adjacentRootTask.mCreatedByOrganizer = true;
         final TaskDisplayArea taskDisplayArea = rootTask.getDisplayArea();
-        adjacentRootTask.setAdjacentTaskFragment(rootTask, false /* moveTogether */);
+        adjacentRootTask.setAdjacentTaskFragment(rootTask);
 
         taskDisplayArea.setLaunchAdjacentFlagRootTask(adjacentRootTask);
         final Task actualRootTask = taskDisplayArea.getLaunchRootTask(
@@ -756,18 +756,26 @@
         adjacentRootTask.mCreatedByOrganizer = true;
         final Task candidateTask = createTaskInRootTask(rootTask, 0 /* userId*/);
         final TaskDisplayArea taskDisplayArea = rootTask.getDisplayArea();
-        adjacentRootTask.setAdjacentTaskFragment(rootTask, false /* moveTogether */);
+        adjacentRootTask.setAdjacentTaskFragment(rootTask);
 
         // Verify the launch root with candidate task
         Task actualRootTask = taskDisplayArea.getLaunchRootTask(WINDOWING_MODE_UNDEFINED,
                 ACTIVITY_TYPE_STANDARD, null /* options */, adjacentRootTask /* sourceTask */,
                 0 /* launchFlags */, candidateTask);
-        assertSame(rootTask, actualRootTask.getRootTask());
+        assertSame(rootTask, actualRootTask);
 
         // Verify the launch root task without candidate task
         actualRootTask = taskDisplayArea.getLaunchRootTask(WINDOWING_MODE_UNDEFINED,
                 ACTIVITY_TYPE_STANDARD, null /* options */, adjacentRootTask /* sourceTask */,
                 0 /* launchFlags */);
-        assertSame(adjacentRootTask, actualRootTask.getRootTask());
+        assertSame(adjacentRootTask, actualRootTask);
+
+        final Task pinnedTask = createTask(
+                mDisplayContent, WINDOWING_MODE_PINNED, ACTIVITY_TYPE_STANDARD);
+        // Verify not adjusting launch target for pinned candidate task
+        actualRootTask = taskDisplayArea.getLaunchRootTask(WINDOWING_MODE_UNDEFINED,
+                ACTIVITY_TYPE_STANDARD, null /* options */, adjacentRootTask /* sourceTask */,
+                0 /* launchFlags */, pinnedTask /* candidateTask */);
+        assertNull(actualRootTask);
     }
 }
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java
index ed84400..8b3cff8 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java
@@ -18,6 +18,12 @@
 
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
 import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
+import static android.window.WindowContainerTransaction.HierarchyOp.HIERARCHY_OP_TYPE_CREATE_TASK_FRAGMENT;
+import static android.window.WindowContainerTransaction.HierarchyOp.HIERARCHY_OP_TYPE_DELETE_TASK_FRAGMENT;
+import static android.window.WindowContainerTransaction.HierarchyOp.HIERARCHY_OP_TYPE_REPARENT_ACTIVITY_TO_TASK_FRAGMENT;
+import static android.window.WindowContainerTransaction.HierarchyOp.HIERARCHY_OP_TYPE_REPARENT_CHILDREN;
+import static android.window.WindowContainerTransaction.HierarchyOp.HIERARCHY_OP_TYPE_SET_ADJACENT_TASK_FRAGMENTS;
+import static android.window.WindowContainerTransaction.HierarchyOp.HIERARCHY_OP_TYPE_START_ACTIVITY_IN_TASK_FRAGMENT;
 
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
@@ -35,7 +41,6 @@
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.clearInvocations;
@@ -70,6 +75,8 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
 
 /**
  * Build/Install/Run:
@@ -87,7 +94,6 @@
     private TaskFragmentOrganizerToken mOrganizerToken;
     private ITaskFragmentOrganizer mIOrganizer;
     private TaskFragment mTaskFragment;
-    private TaskFragmentInfo mTaskFragmentInfo;
     private IBinder mFragmentToken;
     private WindowContainerTransaction mTransaction;
     private WindowContainerToken mFragmentWindowToken;
@@ -95,14 +101,19 @@
     private IBinder mErrorToken;
     private Rect mTaskFragBounds;
 
+    @Mock
+    private TaskFragmentInfo mTaskFragmentInfo;
+    @Mock
+    private Task mTask;
+
     @Before
     public void setup() {
+        MockitoAnnotations.initMocks(this);
         mWindowOrganizerController = mAtm.mWindowOrganizerController;
         mController = mWindowOrganizerController.mTaskFragmentOrganizerController;
         mOrganizer = new TaskFragmentOrganizer(Runnable::run);
         mOrganizerToken = mOrganizer.getOrganizerToken();
         mIOrganizer = ITaskFragmentOrganizer.Stub.asInterface(mOrganizerToken.asBinder());
-        mTaskFragmentInfo = mock(TaskFragmentInfo.class);
         mFragmentToken = new Binder();
         mTaskFragment =
                 new TaskFragment(mAtm, mFragmentToken, true /* createdByOrganizer */);
@@ -126,6 +137,8 @@
 
     @Test
     public void testCallTaskFragmentCallbackWithoutRegister_throwsException() {
+        doReturn(mTask).when(mTaskFragment).getTask();
+
         assertThrows(IllegalArgumentException.class, () -> mController
                 .onTaskFragmentAppeared(mTaskFragment.getTaskFragmentOrganizer(), mTaskFragment));
 
@@ -135,16 +148,21 @@
 
         assertThrows(IllegalArgumentException.class, () -> mController
                 .onTaskFragmentVanished(mTaskFragment.getTaskFragmentOrganizer(), mTaskFragment));
-
-        assertThrows(IllegalArgumentException.class, () -> mController
-                .onTaskFragmentParentInfoChanged(mTaskFragment.getTaskFragmentOrganizer(),
-                        mTaskFragment));
     }
 
     @Test
     public void testOnTaskFragmentAppeared() {
         mController.registerOrganizer(mIOrganizer);
 
+        // No-op when the TaskFragment is not attached.
+        mController.onTaskFragmentAppeared(mTaskFragment.getTaskFragmentOrganizer(), mTaskFragment);
+        mController.dispatchPendingEvents();
+
+        verify(mOrganizer, never()).onTaskFragmentAppeared(any());
+
+        // Send callback when the TaskFragment is attached.
+        setupMockParent(mTaskFragment, mTask);
+
         mController.onTaskFragmentAppeared(mTaskFragment.getTaskFragmentOrganizer(), mTaskFragment);
         mController.dispatchPendingEvents();
 
@@ -154,9 +172,21 @@
     @Test
     public void testOnTaskFragmentInfoChanged() {
         mController.registerOrganizer(mIOrganizer);
+        setupMockParent(mTaskFragment, mTask);
+
+        // No-op if onTaskFragmentAppeared is not called yet.
+        mController.onTaskFragmentInfoChanged(mTaskFragment.getTaskFragmentOrganizer(),
+                mTaskFragment);
+        mController.dispatchPendingEvents();
+
+        verify(mOrganizer, never()).onTaskFragmentInfoChanged(any());
+
+        // Call onTaskFragmentAppeared first.
         mController.onTaskFragmentAppeared(mTaskFragment.getTaskFragmentOrganizer(), mTaskFragment);
         mController.dispatchPendingEvents();
 
+        verify(mOrganizer).onTaskFragmentAppeared(any());
+
         // No callback if the info is not changed.
         doReturn(true).when(mTaskFragmentInfo).equalsForTaskFragmentOrganizer(any());
         doReturn(new Configuration()).when(mTaskFragmentInfo).getConfiguration();
@@ -189,47 +219,74 @@
     }
 
     @Test
+    public void testOnTaskFragmentVanished_clearUpRemaining() {
+        mController.registerOrganizer(mIOrganizer);
+        setupMockParent(mTaskFragment, mTask);
+
+        // Not trigger onTaskFragmentAppeared.
+        mController.onTaskFragmentAppeared(mTaskFragment.getTaskFragmentOrganizer(), mTaskFragment);
+        mController.onTaskFragmentVanished(mTaskFragment.getTaskFragmentOrganizer(), mTaskFragment);
+        mController.dispatchPendingEvents();
+
+        verify(mOrganizer, never()).onTaskFragmentAppeared(any());
+        verify(mOrganizer, never()).onTaskFragmentInfoChanged(any());
+        verify(mOrganizer, never()).onTaskFragmentParentInfoChanged(anyInt(), any());
+        verify(mOrganizer).onTaskFragmentVanished(mTaskFragmentInfo);
+
+        // Not trigger onTaskFragmentInfoChanged.
+        // Call onTaskFragmentAppeared before calling onTaskFragmentInfoChanged.
+        mController.onTaskFragmentAppeared(mTaskFragment.getTaskFragmentOrganizer(), mTaskFragment);
+        mController.dispatchPendingEvents();
+        clearInvocations(mOrganizer);
+        doReturn(true).when(mTaskFragmentInfo).equalsForTaskFragmentOrganizer(any());
+        mController.onTaskFragmentInfoChanged(mTaskFragment.getTaskFragmentOrganizer(),
+                mTaskFragment);
+        mController.onTaskFragmentVanished(mTaskFragment.getTaskFragmentOrganizer(), mTaskFragment);
+        mController.dispatchPendingEvents();
+
+        verify(mOrganizer, never()).onTaskFragmentAppeared(any());
+        verify(mOrganizer, never()).onTaskFragmentInfoChanged(any());
+        verify(mOrganizer, never()).onTaskFragmentParentInfoChanged(anyInt(), any());
+        verify(mOrganizer).onTaskFragmentVanished(mTaskFragmentInfo);
+    }
+
+    @Test
     public void testOnTaskFragmentParentInfoChanged() {
         mController.registerOrganizer(mIOrganizer);
-        final Task parent = mock(Task.class);
-        final Configuration parentConfig = new Configuration();
-        parentConfig.smallestScreenWidthDp = 10;
-        doReturn(parent).when(mTaskFragment).getParent();
-        doReturn(parentConfig).when(parent).getConfiguration();
-        doReturn(parent).when(parent).asTask();
+        setupMockParent(mTaskFragment, mTask);
+        mTask.getConfiguration().smallestScreenWidthDp = 10;
 
-        mTaskFragment.mTaskFragmentAppearedSent = true;
-        mController.onTaskFragmentParentInfoChanged(
+        mController.onTaskFragmentAppeared(
                 mTaskFragment.getTaskFragmentOrganizer(), mTaskFragment);
         mController.dispatchPendingEvents();
 
-        verify(mOrganizer).onTaskFragmentParentInfoChanged(eq(mFragmentToken), any());
+        verify(mOrganizer).onTaskFragmentParentInfoChanged(eq(mTask.mTaskId), any());
 
         // No extra callback if the info is not changed.
         clearInvocations(mOrganizer);
 
-        mController.onTaskFragmentParentInfoChanged(
+        mController.onTaskFragmentInfoChanged(
                 mTaskFragment.getTaskFragmentOrganizer(), mTaskFragment);
         mController.dispatchPendingEvents();
 
-        verify(mOrganizer, never()).onTaskFragmentParentInfoChanged(any(), any());
+        verify(mOrganizer, never()).onTaskFragmentParentInfoChanged(anyInt(), any());
 
         // Trigger callback if the size is changed.
-        parentConfig.smallestScreenWidthDp = 100;
-        mController.onTaskFragmentParentInfoChanged(
+        mTask.getConfiguration().smallestScreenWidthDp = 100;
+        mController.onTaskFragmentInfoChanged(
                 mTaskFragment.getTaskFragmentOrganizer(), mTaskFragment);
         mController.dispatchPendingEvents();
 
-        verify(mOrganizer).onTaskFragmentParentInfoChanged(eq(mFragmentToken), any());
+        verify(mOrganizer).onTaskFragmentParentInfoChanged(eq(mTask.mTaskId), any());
 
         // Trigger callback if the windowing mode is changed.
         clearInvocations(mOrganizer);
-        parentConfig.windowConfiguration.setWindowingMode(WINDOWING_MODE_PINNED);
-        mController.onTaskFragmentParentInfoChanged(
+        mTask.getConfiguration().windowConfiguration.setWindowingMode(WINDOWING_MODE_PINNED);
+        mController.onTaskFragmentInfoChanged(
                 mTaskFragment.getTaskFragmentOrganizer(), mTaskFragment);
         mController.dispatchPendingEvents();
 
-        verify(mOrganizer).onTaskFragmentParentInfoChanged(eq(mFragmentToken), any());
+        verify(mOrganizer).onTaskFragmentParentInfoChanged(eq(mTask.mTaskId), any());
     }
 
     @Test
@@ -238,10 +295,10 @@
 
         mController.registerOrganizer(mIOrganizer);
         mController.onTaskFragmentError(mTaskFragment.getTaskFragmentOrganizer(),
-                mErrorToken, exception);
+                mErrorToken, null /* taskFragment */, -1 /* opType */, exception);
         mController.dispatchPendingEvents();
 
-        verify(mOrganizer).onTaskFragmentError(eq(mErrorToken), eq(exception));
+        verify(mOrganizer).onTaskFragmentError(eq(mErrorToken), eq(null), eq(-1), eq(exception));
     }
 
     @Test
@@ -415,6 +472,7 @@
     @Test
     public void testApplyTransaction_enforceHierarchyChange_setAdjacentRoots()
             throws RemoteException {
+        mAtm.mTaskFragmentOrganizerController.registerOrganizer(mIOrganizer);
         final TaskFragment taskFragment2 =
                 new TaskFragment(mAtm, new Binder(), true /* createdByOrganizer */);
         final WindowContainerToken token2 = taskFragment2.mRemoteToken.toWindowContainerToken();
@@ -422,7 +480,7 @@
 
         // Throw exception if the transaction is trying to change a window that is not organized by
         // the organizer.
-        mTransaction.setAdjacentRoots(mFragmentWindowToken, token2, false /* moveTogether */);
+        mTransaction.setAdjacentRoots(mFragmentWindowToken, token2);
 
         assertApplyTransactionDisallowed(mTransaction);
 
@@ -590,6 +648,25 @@
     }
 
     @Test
+    public void testApplyTransaction_skipTransactionForUnregisterOrganizer() {
+        final ActivityRecord ownerActivity = createActivityRecord(mDisplayContent);
+        final IBinder fragmentToken = new Binder();
+
+        // Allow organizer to create TaskFragment and start/reparent activity to TaskFragment.
+        createTaskFragmentFromOrganizer(mTransaction, ownerActivity, fragmentToken);
+        mAtm.mWindowOrganizerController.applyTransaction(mTransaction);
+
+        // Nothing should happen as the organizer is not registered.
+        assertNull(mAtm.mWindowOrganizerController.getTaskFragment(fragmentToken));
+
+        mController.registerOrganizer(mIOrganizer);
+        mAtm.mWindowOrganizerController.applyTransaction(mTransaction);
+
+        // Successfully created when the organizer is registered.
+        assertNotNull(mAtm.mWindowOrganizerController.getTaskFragment(fragmentToken));
+    }
+
+    @Test
     public void testTaskFragmentInPip_startActivityInTaskFragment() {
         setupTaskFragmentInPip();
         final ActivityRecord activity = mTaskFragment.getTopMostActivity();
@@ -605,7 +682,9 @@
         verify(mAtm.getActivityStartController(), never()).startActivityInTaskFragment(any(), any(),
                 any(), any(), anyInt(), anyInt(), any());
         verify(mAtm.mWindowOrganizerController).sendTaskFragmentOperationFailure(eq(mIOrganizer),
-                eq(mErrorToken), any(IllegalArgumentException.class));
+                eq(mErrorToken), eq(mTaskFragment),
+                eq(HIERARCHY_OP_TYPE_START_ACTIVITY_IN_TASK_FRAGMENT),
+                any(IllegalArgumentException.class));
     }
 
     @Test
@@ -620,7 +699,9 @@
         mWindowOrganizerController.applyTransaction(mTransaction);
 
         verify(mWindowOrganizerController).sendTaskFragmentOperationFailure(eq(mIOrganizer),
-                eq(mErrorToken), any(IllegalArgumentException.class));
+                eq(mErrorToken), eq(mTaskFragment),
+                eq(HIERARCHY_OP_TYPE_REPARENT_ACTIVITY_TO_TASK_FRAGMENT),
+                any(IllegalArgumentException.class));
         assertNull(activity.getOrganizedTaskFragment());
     }
 
@@ -636,8 +717,10 @@
         mWindowOrganizerController.applyTransaction(mTransaction);
 
         verify(mWindowOrganizerController).sendTaskFragmentOperationFailure(eq(mIOrganizer),
-                eq(mErrorToken), any(IllegalArgumentException.class));
-        verify(mTaskFragment, never()).setAdjacentTaskFragment(any(), anyBoolean());
+                eq(mErrorToken), eq(mTaskFragment),
+                eq(HIERARCHY_OP_TYPE_SET_ADJACENT_TASK_FRAGMENTS),
+                any(IllegalArgumentException.class));
+        verify(mTaskFragment, never()).setAdjacentTaskFragment(any());
     }
 
     @Test
@@ -655,7 +738,8 @@
         mWindowOrganizerController.applyTransaction(mTransaction);
 
         verify(mWindowOrganizerController).sendTaskFragmentOperationFailure(eq(mIOrganizer),
-                eq(mErrorToken), any(IllegalArgumentException.class));
+                eq(mErrorToken), eq(null), eq(HIERARCHY_OP_TYPE_CREATE_TASK_FRAGMENT),
+                any(IllegalArgumentException.class));
         assertNull(mWindowOrganizerController.getTaskFragment(fragmentToken));
     }
 
@@ -670,7 +754,8 @@
         mWindowOrganizerController.applyTransaction(mTransaction);
 
         verify(mWindowOrganizerController).sendTaskFragmentOperationFailure(eq(mIOrganizer),
-                eq(mErrorToken), any(IllegalArgumentException.class));
+                eq(mErrorToken), eq(mTaskFragment), eq(HIERARCHY_OP_TYPE_DELETE_TASK_FRAGMENT),
+                any(IllegalArgumentException.class));
         assertNotNull(mWindowOrganizerController.getTaskFragment(mFragmentToken));
 
         // Allow organizer to delete empty TaskFragment for cleanup.
@@ -923,15 +1008,18 @@
                 .setBounds(mTaskFragBounds)
                 .build();
         mWindowOrganizerController.mLaunchTaskFragments.put(mFragmentToken, mTaskFragment);
-        clearInvocations(mAtm.mRootWindowContainer);
 
         // Reparent activity to mTaskFragment, which is smaller than activity's
         // minimum dimensions.
         mTransaction.reparentActivityToTaskFragment(mFragmentToken, activity.token)
                 .setErrorCallbackToken(mErrorToken);
         mWindowOrganizerController.applyTransaction(mTransaction);
+        // The pending event will be dispatched on the handler (from requestTraversal).
+        waitHandlerIdle(mWm.mAnimationHandler);
 
-        verify(mOrganizer).onTaskFragmentError(eq(mErrorToken), any(SecurityException.class));
+        verify(mOrganizer).onTaskFragmentError(eq(mErrorToken), any(),
+                eq(HIERARCHY_OP_TYPE_REPARENT_ACTIVITY_TO_TASK_FRAGMENT),
+                any(SecurityException.class));
     }
 
     @Test
@@ -958,7 +1046,6 @@
                 .build();
         mWindowOrganizerController.mLaunchTaskFragments.put(oldFragToken, oldTaskFrag);
         mWindowOrganizerController.mLaunchTaskFragments.put(mFragmentToken, mTaskFragment);
-        clearInvocations(mAtm.mRootWindowContainer);
 
         // Reparent oldTaskFrag's children to mTaskFragment, which is smaller than activity's
         // minimum dimensions.
@@ -966,8 +1053,11 @@
                         mTaskFragment.mRemoteToken.toWindowContainerToken())
                 .setErrorCallbackToken(mErrorToken);
         mWindowOrganizerController.applyTransaction(mTransaction);
+        // The pending event will be dispatched on the handler (from requestTraversal).
+        waitHandlerIdle(mWm.mAnimationHandler);
 
-        verify(mOrganizer).onTaskFragmentError(eq(mErrorToken), any(SecurityException.class));
+        verify(mOrganizer).onTaskFragmentError(eq(mErrorToken), any(),
+                eq(HIERARCHY_OP_TYPE_REPARENT_CHILDREN), any(SecurityException.class));
     }
 
     @Test
@@ -1051,4 +1141,15 @@
                 .put(mFragmentToken, mTaskFragment);
         mTaskFragment.getTask().setWindowingMode(WINDOWING_MODE_PINNED);
     }
+
+    /** Setups the mock Task as the parent of the given TaskFragment. */
+    private static void setupMockParent(TaskFragment taskFragment, Task mockParent) {
+        doReturn(mockParent).when(taskFragment).getTask();
+        final Configuration taskConfig = new Configuration();
+        doReturn(taskConfig).when(mockParent).getConfiguration();
+
+        // Task needs to be visible
+        mockParent.lastActiveTime = 100;
+        doReturn(true).when(mockParent).shouldBeVisible(any());
+    }
 }
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 3ed484a..88eadfc 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java
@@ -23,6 +23,7 @@
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSET;
+import static android.os.Process.FIRST_APPLICATION_UID;
 
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.any;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
@@ -31,6 +32,10 @@
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
 import static com.android.server.wm.ActivityRecord.State.RESUMED;
+import static com.android.server.wm.TaskFragment.EMBEDDING_ALLOWED;
+import static com.android.server.wm.TaskFragment.EMBEDDING_DISALLOWED_MIN_DIMENSION_VIOLATION;
+import static com.android.server.wm.TaskFragment.EMBEDDING_DISALLOWED_NEW_TASK_FRAGMENT;
+import static com.android.server.wm.TaskFragment.EMBEDDING_DISALLOWED_UNTRUSTED_HOST;
 import static com.android.server.wm.WindowContainer.POSITION_TOP;
 
 import static org.junit.Assert.assertEquals;
@@ -202,7 +207,7 @@
         doReturn(true).when(primaryActivity).supportsPictureInPicture();
         doReturn(false).when(secondaryActivity).supportsPictureInPicture();
 
-        primaryTf.setAdjacentTaskFragment(secondaryTf, false /* moveAdjacentTogether */);
+        primaryTf.setAdjacentTaskFragment(secondaryTf);
         primaryActivity.setState(RESUMED, "test");
         secondaryActivity.setState(RESUMED, "test");
 
@@ -433,6 +438,44 @@
     }
 
     @Test
+    public void testIsAllowedToEmbedActivity() {
+        final TaskFragment taskFragment = new TaskFragmentBuilder(mAtm)
+                .setCreateParentTask()
+                .createActivityCount(1)
+                .build();
+        final ActivityRecord activity = taskFragment.getTopMostActivity();
+
+        // Not allow embedding activity if not a trusted host.
+        doReturn(false).when(taskFragment).isAllowedToEmbedActivityInUntrustedMode(any());
+        doReturn(false).when(taskFragment).isAllowedToEmbedActivityInTrustedMode(any(), anyInt());
+        assertEquals(EMBEDDING_DISALLOWED_UNTRUSTED_HOST,
+                taskFragment.isAllowedToEmbedActivity(activity));
+
+        // Not allow embedding activity if the TaskFragment is smaller than activity min dimension.
+        doReturn(true).when(taskFragment).isAllowedToEmbedActivityInTrustedMode(any(), anyInt());
+        doReturn(true).when(taskFragment).smallerThanMinDimension(any());
+        assertEquals(EMBEDDING_DISALLOWED_MIN_DIMENSION_VIOLATION,
+                taskFragment.isAllowedToEmbedActivity(activity));
+
+        // Not allow to start activity across TaskFragments for result.
+        final TaskFragment newTaskFragment = new TaskFragmentBuilder(mAtm)
+                .setParentTask(taskFragment.getTask())
+                .build();
+        final ActivityRecord newActivity = new ActivityBuilder(mAtm)
+                .setUid(FIRST_APPLICATION_UID)
+                .build();
+        doReturn(true).when(newTaskFragment).isAllowedToEmbedActivityInTrustedMode(any(), anyInt());
+        doReturn(false).when(newTaskFragment).smallerThanMinDimension(any());
+        newActivity.resultTo = activity;
+        assertEquals(EMBEDDING_DISALLOWED_NEW_TASK_FRAGMENT,
+                newTaskFragment.isAllowedToEmbedActivity(newActivity));
+
+        // Allow embedding if the resultTo activity is finishing.
+        activity.finishing = true;
+        assertEquals(EMBEDDING_ALLOWED, newTaskFragment.isAllowedToEmbedActivity(newActivity));
+    }
+
+    @Test
     public void testIgnoreRequestedOrientationForActivityEmbeddingSplit() {
         // Setup two activities in ActivityEmbedding split.
         final Task task = createTask(mDisplayContent);
@@ -448,7 +491,7 @@
                 .setOrganizer(mOrganizer)
                 .setFragmentToken(new Binder())
                 .build();
-        tf0.setAdjacentTaskFragment(tf1, false /* moveAdjacentTogether */);
+        tf0.setAdjacentTaskFragment(tf1);
         tf0.setWindowingMode(WINDOWING_MODE_MULTI_WINDOW);
         tf1.setWindowingMode(WINDOWING_MODE_MULTI_WINDOW);
         task.setBounds(0, 0, 1200, 1000);
@@ -475,5 +518,13 @@
         assertFalse(activity0.isLetterboxedForFixedOrientationAndAspectRatio());
         assertFalse(activity1.isLetterboxedForFixedOrientationAndAspectRatio());
         assertEquals(SCREEN_ORIENTATION_UNSET, task.getOrientation());
+
+        tf0.setResumedActivity(activity0, "test");
+        tf1.setResumedActivity(activity1, "test");
+        mDisplayContent.mFocusedApp = activity1;
+
+        // Making the activity0 be the focused activity and ensure the focused app is updated.
+        activity0.moveFocusableActivityToTop("test");
+        assertEquals(activity0, mDisplayContent.mFocusedApp);
     }
 }
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskTests.java
index 202168b..f4323db 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskTests.java
@@ -31,7 +31,6 @@
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSET;
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
-import static android.util.DisplayMetrics.DENSITY_DEFAULT;
 import static android.view.IWindowManager.FIXED_TO_USER_ROTATION_ENABLED;
 import static android.view.Surface.ROTATION_0;
 import static android.view.Surface.ROTATION_90;
@@ -60,7 +59,6 @@
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.ArgumentMatchers.isNull;
 import static org.mockito.ArgumentMatchers.same;
 import static org.mockito.Mockito.atLeast;
 import static org.mockito.Mockito.clearInvocations;
@@ -270,6 +268,20 @@
         assertFalse(task.hasChild());
         // In real case, the task should be preserved for adding new activity.
         assertTrue(task.isAttached());
+
+        final ActivityRecord activityA = new ActivityBuilder(mAtm).setTask(task).build();
+        final ActivityRecord activityB = new ActivityBuilder(mAtm).setTask(task).build();
+        final ActivityRecord activityC = new ActivityBuilder(mAtm).setTask(task).build();
+        activityA.setState(ActivityRecord.State.STOPPED, "test");
+        activityB.setState(ActivityRecord.State.PAUSED, "test");
+        activityC.setState(ActivityRecord.State.RESUMED, "test");
+        doReturn(true).when(activityB).shouldBeVisibleUnchecked();
+        doReturn(true).when(activityC).shouldBeVisibleUnchecked();
+        activityA.getConfiguration().densityDpi += 100;
+        assertTrue(task.performClearTop(activityA, 0 /* launchFlags */).finishing);
+        // The bottom activity should destroy directly without relaunch for config change.
+        assertEquals(ActivityRecord.State.DESTROYING, activityA.getState());
+        verify(activityA, never()).startRelaunching();
     }
 
     @Test
@@ -497,34 +509,6 @@
         assertEquals(reqBounds.height(), task.getBounds().height());
     }
 
-    /** Tests that the task bounds adjust properly to changes between FULLSCREEN and FREEFORM */
-    @Test
-    public void testBoundsOnModeChangeFreeformToFullscreen() {
-        DisplayContent display = mAtm.mRootWindowContainer.getDefaultDisplay();
-        Task rootTask = new TaskBuilder(mSupervisor).setDisplay(display).setCreateActivity(true)
-                .setWindowingMode(WINDOWING_MODE_FREEFORM).build();
-        Task task = rootTask.getBottomMostTask();
-        task.getRootActivity().setOrientation(SCREEN_ORIENTATION_UNSPECIFIED);
-        DisplayInfo info = new DisplayInfo();
-        display.mDisplay.getDisplayInfo(info);
-        final Rect fullScreenBounds = new Rect(0, 0, info.logicalWidth, info.logicalHeight);
-        final Rect freeformBounds = new Rect(fullScreenBounds);
-        freeformBounds.inset((int) (freeformBounds.width() * 0.2),
-                (int) (freeformBounds.height() * 0.2));
-        task.setBounds(freeformBounds);
-
-        assertEquals(freeformBounds, task.getBounds());
-
-        // FULLSCREEN inherits bounds
-        rootTask.setWindowingMode(WINDOWING_MODE_FULLSCREEN);
-        assertEquals(fullScreenBounds, task.getBounds());
-        assertEquals(freeformBounds, task.mLastNonFullscreenBounds);
-
-        // FREEFORM restores bounds
-        rootTask.setWindowingMode(WINDOWING_MODE_FREEFORM);
-        assertEquals(freeformBounds, task.getBounds());
-    }
-
     /**
      * Tests that a task with forced orientation has orientation-consistent bounds within the
      * parent.
@@ -590,6 +574,7 @@
 
         // FULLSCREEN letterboxes bounds on activity level, no constraint on task level.
         rootTask.setWindowingMode(WINDOWING_MODE_FULLSCREEN);
+        rootTask.setBounds(null);
         assertThat(task.getBounds().height()).isGreaterThan(task.getBounds().width());
         assertThat(top.getBounds().width()).isGreaterThan(top.getBounds().height());
         assertEquals(fullScreenBoundsPort, task.getBounds());
@@ -667,8 +652,6 @@
         final Task task = new TaskBuilder(mSupervisor).setDisplay(display).build();
         final Configuration inOutConfig = new Configuration();
         final Configuration parentConfig = new Configuration();
-        final int longSide = 1200;
-        final int shortSide = 600;
         final Rect parentBounds = new Rect(0, 0, 250, 500);
         final Rect parentAppBounds = new Rect(0, 0, 250, 480);
         parentConfig.windowConfiguration.setBounds(parentBounds);
@@ -689,14 +672,17 @@
         // If bounds are overridden, config properties should be made to match. Surface hierarchy
         // will crop for policy.
         inOutConfig.setToDefaults();
+        final int longSide = 960;
+        final int shortSide = 540;
+        parentConfig.densityDpi = 192;
         final Rect largerPortraitBounds = new Rect(0, 0, shortSide, longSide);
         inOutConfig.windowConfiguration.setBounds(largerPortraitBounds);
         task.computeConfigResourceOverrides(inOutConfig, parentConfig);
         // The override bounds are beyond the parent, the out appBounds should not be intersected
         // by parent appBounds.
         assertEquals(largerPortraitBounds, inOutConfig.windowConfiguration.getAppBounds());
-        assertEquals(longSide, inOutConfig.screenHeightDp * parentConfig.densityDpi / 160);
-        assertEquals(shortSide, inOutConfig.screenWidthDp * parentConfig.densityDpi / 160);
+        assertEquals(800, inOutConfig.screenHeightDp); // 960/(192/160) = 800
+        assertEquals(450, inOutConfig.screenWidthDp); // 540/(192/160) = 450
 
         inOutConfig.setToDefaults();
         // Landscape bounds.
@@ -716,16 +702,17 @@
         // Without limiting to be inside the parent bounds, the out screen size should keep relative
         // to the input bounds.
         final ActivityRecord activity = new ActivityBuilder(mAtm).setTask(task).build();
-        final ActivityRecord.CompatDisplayInsets compatIntsets =
+        final ActivityRecord.CompatDisplayInsets compatInsets =
                 new ActivityRecord.CompatDisplayInsets(
                         display, activity, /* fixedOrientationBounds= */ null);
-        task.computeConfigResourceOverrides(inOutConfig, parentConfig, compatIntsets);
+        task.computeConfigResourceOverrides(inOutConfig, parentConfig, compatInsets);
 
         assertEquals(largerLandscapeBounds, inOutConfig.windowConfiguration.getAppBounds());
-        assertEquals((shortSide - statusBarHeight) * DENSITY_DEFAULT / parentConfig.densityDpi,
-                inOutConfig.screenHeightDp);
-        assertEquals(longSide * DENSITY_DEFAULT / parentConfig.densityDpi,
-                inOutConfig.screenWidthDp);
+        final float density = parentConfig.densityDpi * DisplayMetrics.DENSITY_DEFAULT_SCALE;
+        final int expectedHeightDp = (int) ((shortSide - statusBarHeight) / density + 0.5f);
+        assertEquals(expectedHeightDp, inOutConfig.screenHeightDp);
+        final int expectedWidthDp = (int) (longSide / density + 0.5f);
+        assertEquals(expectedWidthDp, inOutConfig.screenWidthDp);
         assertEquals(Configuration.ORIENTATION_LANDSCAPE, inOutConfig.orientation);
     }
 
@@ -1443,25 +1430,6 @@
     }
 
     @Test
-    public void testMoveToFront_moveAdjacentTask() {
-        final Task task1 =
-                createTask(mDisplayContent, WINDOWING_MODE_MULTI_WINDOW, ACTIVITY_TYPE_STANDARD);
-        final Task task2 =
-                createTask(mDisplayContent, WINDOWING_MODE_MULTI_WINDOW, ACTIVITY_TYPE_STANDARD);
-        spyOn(task2);
-
-        task1.setAdjacentTaskFragment(task2, false /* moveTogether */);
-        task1.moveToFront("" /* reason */);
-        verify(task2, never()).moveToFrontInner(anyString(), isNull());
-
-        // Reset adjacent tasks to move together.
-        task1.setAdjacentTaskFragment(null, false /* moveTogether */);
-        task1.setAdjacentTaskFragment(task2, true /* moveTogether */);
-        task1.moveToFront("" /* reason */);
-        verify(task2).moveToFrontInner(anyString(), isNull());
-    }
-
-    @Test
     public void testResumeTask_doNotResumeTaskFragmentBehindTranslucent() {
         final Task task = createTask(mDisplayContent);
         final TaskFragment tfBehind = createTaskFragmentWithParentTask(
diff --git a/services/tests/wmtests/src/com/android/server/wm/TestWindowManagerPolicy.java b/services/tests/wmtests/src/com/android/server/wm/TestWindowManagerPolicy.java
index ea98b6b..851be9d 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TestWindowManagerPolicy.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TestWindowManagerPolicy.java
@@ -26,7 +26,6 @@
 import android.os.PowerManager.GoToSleepReason;
 import android.os.PowerManager.WakeReason;
 import android.util.proto.ProtoOutputStream;
-import android.view.IWindowManager;
 import android.view.KeyEvent;
 import android.view.WindowManager;
 import android.view.animation.Animation;
@@ -41,6 +40,7 @@
 
     boolean mKeyguardShowingAndNotOccluded = false;
     boolean mOkToAnimate = true;
+    boolean mIsUserSetupComplete = false;
 
     TestWindowManagerPolicy() {
     }
@@ -50,8 +50,7 @@
     }
 
     @Override
-    public void init(Context context, IWindowManager windowManager,
-            WindowManagerFuncs windowManagerFuncs) {
+    public void init(Context context, WindowManagerFuncs windowManagerFuncs) {
     }
 
     public void setDefaultDisplay(DisplayContentInfo displayContentInfo) {
@@ -286,7 +285,7 @@
 
     @Override
     public boolean isUserSetupComplete() {
-        return false;
+        return mIsUserSetupComplete;
     }
 
     @Override
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 6c1c086..a1ad07a 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java
@@ -30,6 +30,7 @@
 import static android.view.WindowManager.TRANSIT_CLOSE;
 import static android.view.WindowManager.TRANSIT_OPEN;
 import static android.view.WindowManager.TRANSIT_TO_BACK;
+import static android.window.TransitionInfo.FLAG_IS_EMBEDDED;
 import static android.window.TransitionInfo.FLAG_IS_WALLPAPER;
 import static android.window.TransitionInfo.FLAG_SHOW_WALLPAPER;
 import static android.window.TransitionInfo.FLAG_TRANSLUCENT;
@@ -61,8 +62,12 @@
 import android.util.ArraySet;
 import android.view.SurfaceControl;
 import android.window.IDisplayAreaOrganizer;
+import android.window.IRemoteTransition;
+import android.window.ITaskFragmentOrganizer;
 import android.window.ITaskOrganizer;
 import android.window.ITransitionPlayer;
+import android.window.RemoteTransition;
+import android.window.TaskFragmentOrganizer;
 import android.window.TransitionInfo;
 
 import androidx.test.filters.SmallTest;
@@ -85,9 +90,14 @@
 @Presubmit
 @RunWith(WindowTestRunner.class)
 public class TransitionTests extends WindowTestsBase {
+    final SurfaceControl.Transaction mMockT = mock(SurfaceControl.Transaction.class);
 
     private Transition createTestTransition(int transitType) {
-        TransitionController controller = mock(TransitionController.class);
+        TransitionTracer tracer = mock(TransitionTracer.class);
+        final TransitionController controller = new TransitionController(
+                mock(ActivityTaskManagerService.class), mock(TaskSnapshotController.class),
+                mock(TransitionTracer.class));
+
         final BLASTSyncEngine sync = createTestBLASTSyncEngine();
         final Transition t = new Transition(transitType, 0 /* flags */, controller, sync);
         t.startCollecting(0 /* timeoutMs */);
@@ -121,7 +131,8 @@
         participants.add(oldTask);
         participants.add(newTask);
         ArrayList<WindowContainer> targets = Transition.calculateTargets(participants, changes);
-        TransitionInfo info = Transition.calculateTransitionInfo(transit, flags, targets, changes);
+        TransitionInfo info = Transition.calculateTransitionInfo(transit, flags, targets, changes,
+                mMockT);
         assertEquals(2, info.getChanges().size());
         assertEquals(transit, info.getType());
 
@@ -129,7 +140,7 @@
         participants.add(opening);
         participants.add(closing);
         targets = Transition.calculateTargets(participants, changes);
-        info = Transition.calculateTransitionInfo(transit, flags, targets, changes);
+        info = Transition.calculateTransitionInfo(transit, flags, targets, changes, mMockT);
         assertEquals(2, info.getChanges().size());
         assertNotNull(info.getChange(newTask.mRemoteToken.toWindowContainerToken()));
         assertNotNull(info.getChange(oldTask.mRemoteToken.toWindowContainerToken()));
@@ -137,7 +148,7 @@
         // Check combined prune and promote
         participants.remove(newTask);
         targets = Transition.calculateTargets(participants, changes);
-        info = Transition.calculateTransitionInfo(transit, flags, targets, changes);
+        info = Transition.calculateTransitionInfo(transit, flags, targets, changes, mMockT);
         assertEquals(2, info.getChanges().size());
         assertNotNull(info.getChange(newTask.mRemoteToken.toWindowContainerToken()));
         assertNotNull(info.getChange(oldTask.mRemoteToken.toWindowContainerToken()));
@@ -145,7 +156,7 @@
         // Check multi promote
         participants.remove(oldTask);
         targets = Transition.calculateTargets(participants, changes);
-        info = Transition.calculateTransitionInfo(transit, flags, targets, changes);
+        info = Transition.calculateTransitionInfo(transit, flags, targets, changes, mMockT);
         assertEquals(2, info.getChanges().size());
         assertNotNull(info.getChange(newTask.mRemoteToken.toWindowContainerToken()));
         assertNotNull(info.getChange(oldTask.mRemoteToken.toWindowContainerToken()));
@@ -186,7 +197,8 @@
         participants.add(opening);
         participants.add(opening2);
         ArrayList<WindowContainer> targets = Transition.calculateTargets(participants, changes);
-        TransitionInfo info = Transition.calculateTransitionInfo(transit, flags, targets, changes);
+        TransitionInfo info = Transition.calculateTransitionInfo(transit, flags, targets, changes,
+                mMockT);
         assertEquals(2, info.getChanges().size());
         assertEquals(transit, info.getType());
         assertNotNull(info.getChange(newTask.mRemoteToken.toWindowContainerToken()));
@@ -195,7 +207,7 @@
         // Check that unchanging but visible descendant of sibling prevents promotion
         participants.remove(opening2);
         targets = Transition.calculateTargets(participants, changes);
-        info = Transition.calculateTransitionInfo(transit, flags, targets, changes);
+        info = Transition.calculateTransitionInfo(transit, flags, targets, changes, mMockT);
         assertEquals(2, info.getChanges().size());
         assertNotNull(info.getChange(newNestedTask.mRemoteToken.toWindowContainerToken()));
         assertNotNull(info.getChange(oldTask.mRemoteToken.toWindowContainerToken()));
@@ -232,7 +244,8 @@
         participants.add(showing);
         participants.add(showing2);
         ArrayList<WindowContainer> targets = Transition.calculateTargets(participants, changes);
-        TransitionInfo info = Transition.calculateTransitionInfo(transit, flags, targets, changes);
+        TransitionInfo info = Transition.calculateTransitionInfo(transit, flags, targets, changes,
+                mMockT);
         assertEquals(1, info.getChanges().size());
         assertEquals(transit, info.getType());
         assertNotNull(info.getChange(tda.mRemoteToken.toWindowContainerToken()));
@@ -240,14 +253,14 @@
         // Check that organized tasks get reported even if not top
         makeTaskOrganized(showTask);
         targets = Transition.calculateTargets(participants, changes);
-        info = Transition.calculateTransitionInfo(transit, flags, targets, changes);
+        info = Transition.calculateTransitionInfo(transit, flags, targets, changes, mMockT);
         assertEquals(2, info.getChanges().size());
         assertNotNull(info.getChange(tda.mRemoteToken.toWindowContainerToken()));
         assertNotNull(info.getChange(showTask.mRemoteToken.toWindowContainerToken()));
         // Even if DisplayArea explicitly participating
         participants.add(tda);
         targets = Transition.calculateTargets(participants, changes);
-        info = Transition.calculateTransitionInfo(transit, flags, targets, changes);
+        info = Transition.calculateTransitionInfo(transit, flags, targets, changes, mMockT);
         assertEquals(2, info.getChanges().size());
     }
 
@@ -271,7 +284,7 @@
         ArrayList<WindowContainer> targets = Transition.calculateTargets(
                 transition.mParticipants, transition.mChanges);
         TransitionInfo info = Transition.calculateTransitionInfo(
-                0, 0, targets, transition.mChanges);
+                0, 0, targets, transition.mChanges, mMockT);
         assertEquals(2, info.getChanges().size());
         // There was an existence change on open, so it should be OPEN rather than SHOW
         assertEquals(TRANSIT_OPEN,
@@ -308,7 +321,7 @@
         ArrayList<WindowContainer> targets = Transition.calculateTargets(
                 transition.mParticipants, transition.mChanges);
         TransitionInfo info = Transition.calculateTransitionInfo(
-                0, 0, targets, transition.mChanges);
+                0, 0, targets, transition.mChanges, mMockT);
         assertEquals(taskCount, info.getChanges().size());
         // verify order is top-to-bottem
         for (int i = 0; i < taskCount; ++i) {
@@ -358,7 +371,7 @@
         ArrayList<WindowContainer> targets = Transition.calculateTargets(
                 transition.mParticipants, transition.mChanges);
         TransitionInfo info = Transition.calculateTransitionInfo(
-                0, 0, targets, transition.mChanges);
+                0, 0, targets, transition.mChanges, mMockT);
         // verify that wallpaper is at bottom
         assertEquals(taskCount + 1, info.getChanges().size());
         // The wallpaper is not organized, so it won't have a token; however, it will be marked
@@ -392,7 +405,7 @@
         ArrayList<WindowContainer> targets = Transition.calculateTargets(
                 transition.mParticipants, transition.mChanges);
         TransitionInfo info = Transition.calculateTransitionInfo(
-                0, 0, targets, transition.mChanges);
+                0, 0, targets, transition.mChanges, mMockT);
         // The wallpaper is not organized, so it won't have a token; however, it will be marked
         // as IS_WALLPAPER
         assertEquals(FLAG_IS_WALLPAPER, info.getChanges().get(0).getFlags());
@@ -402,6 +415,38 @@
     }
 
     @Test
+    public void testRunningRemoteTransition() {
+        final TestTransitionPlayer testPlayer = new TestTransitionPlayer(
+                mAtm.getTransitionController(), mAtm.mWindowOrganizerController);
+        final WindowProcessController playerProc = mSystemServicesTestRule.addProcess(
+                "pkg.player", "proc.player", 5000 /* pid */, 5000 /* uid */);
+        testPlayer.mController.registerTransitionPlayer(testPlayer, playerProc);
+        doReturn(mock(IBinder.class)).when(playerProc.getThread()).asBinder();
+        final WindowProcessController delegateProc = mSystemServicesTestRule.addProcess(
+                "pkg.delegate", "proc.delegate", 6000 /* pid */, 6000 /* uid */);
+        doReturn(mock(IBinder.class)).when(delegateProc.getThread()).asBinder();
+        final ActivityRecord app = new ActivityBuilder(mAtm).setCreateTask(true).build();
+        final TransitionController controller = app.mTransitionController;
+        final Transition transition = controller.createTransition(TRANSIT_OPEN);
+        final RemoteTransition remoteTransition = new RemoteTransition(
+                mock(IRemoteTransition.class));
+        remoteTransition.setAppThread(delegateProc.getThread());
+        transition.collectExistenceChange(app.getTask());
+        controller.requestStartTransition(transition, app.getTask(), remoteTransition,
+                null /* displayChange */);
+        testPlayer.startTransition();
+        testPlayer.onTransactionReady(app.getSyncTransaction());
+        assertTrue(playerProc.isRunningRemoteTransition());
+        assertTrue(delegateProc.isRunningRemoteTransition());
+        assertTrue(controller.mRemotePlayer.reportRunning(delegateProc.getThread()));
+
+        testPlayer.finish();
+        assertFalse(playerProc.isRunningRemoteTransition());
+        assertFalse(delegateProc.isRunningRemoteTransition());
+        assertFalse(controller.mRemotePlayer.reportRunning(delegateProc.getThread()));
+    }
+
+    @Test
     public void testOpenActivityInTheSameTaskWithDisplayChange() {
         final ActivityRecord closing = createActivityRecord(mDisplayContent);
         closing.mVisibleRequested = true;
@@ -474,7 +519,8 @@
         participants.add(changeTask);
         final ArrayList<WindowContainer> targets =
                 Transition.calculateTargets(participants, changes);
-        TransitionInfo info = Transition.calculateTransitionInfo(transit, flags, targets, changes);
+        TransitionInfo info = Transition.calculateTransitionInfo(transit, flags, targets, changes,
+                mMockT);
         // Root changes should always be considered independent
         assertTrue(isIndependent(
                 info.getChange(openTask.mRemoteToken.toWindowContainerToken()), info));
@@ -526,7 +572,8 @@
         participants.add(oldTask);
         participants.add(newTask);
         ArrayList<WindowContainer> targets = Transition.calculateTargets(participants, changes);
-        TransitionInfo info = Transition.calculateTransitionInfo(transit, flags, targets, changes);
+        TransitionInfo info = Transition.calculateTransitionInfo(transit, flags, targets, changes,
+                mMockT);
         assertEquals(2, info.getChanges().size());
         assertEquals(transit, info.getType());
 
@@ -566,7 +613,8 @@
         participants.add(oldTask);
         participants.add(newTask);
         ArrayList<WindowContainer> targets = Transition.calculateTargets(participants, changes);
-        TransitionInfo info = Transition.calculateTransitionInfo(transit, flags, targets, changes);
+        TransitionInfo info = Transition.calculateTransitionInfo(transit, flags, targets, changes,
+                mMockT);
         assertEquals(2, info.getChanges().size());
         assertEquals(transit, info.getType());
 
@@ -577,7 +625,7 @@
     @Test
     public void testTimeout() {
         final TransitionController controller = new TransitionController(mAtm,
-                mock(TaskSnapshotController.class));
+                mock(TaskSnapshotController.class), mock(TransitionTracer.class));
         final BLASTSyncEngine sync = new BLASTSyncEngine(mWm);
         final CountDownLatch latch = new CountDownLatch(1);
         // When the timeout is reached, it will finish the sync-group and notify transaction ready.
@@ -608,7 +656,7 @@
             final int flags = 0;
             final TransitionInfo info = Transition.calculateTransitionInfo(transition.mType, flags,
                     Transition.calculateTargets(transition.mParticipants, transition.mChanges),
-                    transition.mChanges);
+                    transition.mChanges, mMockT);
             transition.abort();
             return info.getChanges().get(0);
         };
@@ -654,6 +702,11 @@
         mDisplayContent.setLastHasContent();
         mDisplayContent.requestChangeTransitionIfNeeded(1 /* any changes */,
                 null /* displayChange */);
+        assertEquals(WindowContainer.SYNC_STATE_NONE, statusBar.mSyncState);
+        assertEquals(WindowContainer.SYNC_STATE_NONE, navBar.mSyncState);
+        assertEquals(WindowContainer.SYNC_STATE_NONE, screenDecor.mSyncState);
+        assertEquals(WindowContainer.SYNC_STATE_WAITING_FOR_DRAW, ime.mSyncState);
+
         final AsyncRotationController asyncRotationController =
                 mDisplayContent.getAsyncRotationController();
         assertNotNull(asyncRotationController);
@@ -667,6 +720,7 @@
         assertTrue(ime.mToken.inTransition());
         assertTrue(task.inTransition());
         assertTrue(asyncRotationController.isTargetToken(decorToken));
+        assertTrue(asyncRotationController.shouldFreezeInsetsPosition(navBar));
 
         screenDecor.setOrientationChanging(false);
         // Status bar finishes drawing before the start transaction. Its fade-in animation will be
@@ -767,7 +821,7 @@
 
         player.start();
         player.finish();
-        app.getTask().clearSyncState();
+        app.getTask().finishSync(mWm.mTransactionFactory.get(), false /* cancel */);
 
         // The open transition is finished. Continue to play seamless display change transition,
         // so the previous async rotation controller should still exist.
@@ -777,6 +831,10 @@
         assertTrue(mDisplayContent.hasTopFixedRotationLaunchingApp());
         assertNotNull(mDisplayContent.getAsyncRotationController());
 
+        // The app is still in transition, so the callback should be no-op.
+        mDisplayContent.mTransitionController.dispatchLegacyAppTransitionFinished(app);
+        assertTrue(mDisplayContent.hasTopFixedRotationLaunchingApp());
+
         statusBar.setOrientationChanging(true);
         player.startTransition();
         // Non-app windows should not be collected.
@@ -814,8 +872,11 @@
         player.onTransactionReady(mDisplayContent.getSyncTransaction());
 
         final DisplayRotation displayRotation = mDisplayContent.getDisplayRotation();
+        final RemoteDisplayChangeController displayChangeController = mDisplayContent
+                .mRemoteDisplayChangeController;
         spyOn(displayRotation);
-        doReturn(true).when(displayRotation).isWaitingForRemoteRotation();
+        spyOn(displayChangeController);
+        doReturn(true).when(displayChangeController).isWaitingForRemoteDisplayChange();
         doReturn(prevRotation + 1).when(displayRotation).rotationForOrientation(
                 anyInt() /* orientation */, anyInt() /* lastRotation */);
         // Rotation update is skipped while the recents animation is running.
@@ -831,9 +892,10 @@
     @Test
     public void testIntermediateVisibility() {
         final TaskSnapshotController snapshotController = mock(TaskSnapshotController.class);
-        final TransitionController controller = new TransitionController(mAtm, snapshotController);
+        final TransitionController controller = new TransitionController(mAtm, snapshotController,
+                mock(TransitionTracer.class));
         final ITransitionPlayer player = new ITransitionPlayer.Default();
-        controller.registerTransitionPlayer(player, null /* appThread */);
+        controller.registerTransitionPlayer(player, null /* playerProc */);
         final Transition openTransition = controller.createTransition(TRANSIT_OPEN);
 
         // Start out with task2 visible and set up a transition that closes task2 and opens task1
@@ -895,9 +957,10 @@
     @Test
     public void testTransientLaunch() {
         final TaskSnapshotController snapshotController = mock(TaskSnapshotController.class);
-        final TransitionController controller = new TransitionController(mAtm, snapshotController);
+        final TransitionController controller = new TransitionController(mAtm, snapshotController,
+                mock(TransitionTracer.class));
         final ITransitionPlayer player = new ITransitionPlayer.Default();
-        controller.registerTransitionPlayer(player, null /* appThread */);
+        controller.registerTransitionPlayer(player, null /* playerProc */);
         final Transition openTransition = controller.createTransition(TRANSIT_OPEN);
 
         // Start out with task2 visible and set up a transition that closes task2 and opens task1
@@ -955,6 +1018,67 @@
         verify(snapshotController, times(1)).recordTaskSnapshot(eq(task1), eq(false));
     }
 
+    @Test
+    public void testNotReadyPushPop() {
+        final TaskSnapshotController snapshotController = mock(TaskSnapshotController.class);
+        final TransitionController controller = new TransitionController(mAtm, snapshotController,
+                mock(TransitionTracer.class));
+        final ITransitionPlayer player = new ITransitionPlayer.Default();
+        controller.registerTransitionPlayer(player, null /* playerProc */);
+        final Transition openTransition = controller.createTransition(TRANSIT_OPEN);
+
+        // Start out with task2 visible and set up a transition that closes task2 and opens task1
+        final Task task1 = createTask(mDisplayContent);
+        openTransition.collectExistenceChange(task1);
+
+        assertFalse(openTransition.allReady());
+
+        openTransition.setAllReady();
+
+        openTransition.deferTransitionReady();
+        assertFalse(openTransition.allReady());
+
+        openTransition.continueTransitionReady();
+        assertTrue(openTransition.allReady());
+    }
+
+    @Test
+    public void testIsEmbeddedChange() {
+        final Transition transition = createTestTransition(TRANSIT_OPEN);
+        final ArrayMap<WindowContainer, Transition.ChangeInfo> changes = transition.mChanges;
+        final ArraySet<WindowContainer> participants = transition.mParticipants;
+
+        final Task task = createTask(mDisplayContent);
+        final TaskFragmentOrganizer organizer = new TaskFragmentOrganizer(Runnable::run);
+        mAtm.mTaskFragmentOrganizerController.registerOrganizer(
+                ITaskFragmentOrganizer.Stub.asInterface(organizer.getOrganizerToken().asBinder()));
+        final TaskFragment embeddedTf = new TaskFragmentBuilder(mAtm)
+                .setParentTask(task)
+                .createActivityCount(2)
+                .setOrganizer(organizer)
+                .build();
+        final ActivityRecord closingActivity = embeddedTf.getBottomMostActivity();
+        final ActivityRecord openingActivity = embeddedTf.getTopMostActivity();
+        // Start states.
+        changes.put(embeddedTf, new Transition.ChangeInfo(true /* vis */, false /* exChg */));
+        changes.put(closingActivity, new Transition.ChangeInfo(true /* vis */, false /* exChg */));
+        changes.put(openingActivity, new Transition.ChangeInfo(false /* vis */, true /* exChg */));
+        // End states.
+        closingActivity.mVisibleRequested = false;
+        openingActivity.mVisibleRequested = true;
+
+        participants.add(closingActivity);
+        participants.add(openingActivity);
+        final ArrayList<WindowContainer> targets = Transition.calculateTargets(
+                participants, changes);
+        final TransitionInfo info = Transition.calculateTransitionInfo(
+                transition.mType, 0 /* flags */, targets, changes, mMockT);
+
+        assertEquals(2, info.getChanges().size());
+        assertTrue((info.getChanges().get(0).getFlags() & FLAG_IS_EMBEDDED) != 0);
+        assertTrue((info.getChanges().get(1).getFlags() & FLAG_IS_EMBEDDED) != 0);
+    }
+
     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/WallpaperControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/WallpaperControllerTests.java
index 1f68608..fba4ff1 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WallpaperControllerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WallpaperControllerTests.java
@@ -35,6 +35,7 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyFloat;
@@ -82,10 +83,7 @@
         assertFalse(dc.mWallpaperController.canScreenshotWallpaper());
 
         // No wallpaper WSA Surface
-        WindowToken wallpaperWindowToken = new WallpaperWindowToken(mWm, mock(IBinder.class),
-                true, dc, true /* ownerCanManageAppTokens */);
-        WindowState wallpaperWindow = createWindow(null /* parent */, TYPE_WALLPAPER,
-                wallpaperWindowToken, "wallpaperWindow");
+        final WindowState wallpaperWindow = createWallpaperWindow(dc);
         assertFalse(dc.mWallpaperController.canScreenshotWallpaper());
 
         // Wallpaper with not visible WSA surface.
@@ -107,13 +105,10 @@
     @Test
     public void testWallpaperSizeWithFixedTransform() {
         // No wallpaper
-        final DisplayContent dc = createNewDisplay();
+        final DisplayContent dc = mDisplayContent;
 
         // No wallpaper WSA Surface
-        WindowToken wallpaperWindowToken = new WallpaperWindowToken(mWm, mock(IBinder.class),
-                true, dc, true /* ownerCanManageAppTokens */);
-        WindowState wallpaperWindow = createWindow(null /* parent */, TYPE_WALLPAPER,
-                wallpaperWindowToken, "wallpaperWindow");
+        final WindowState wallpaperWindow = createWallpaperWindow(dc);
 
         WindowManager.LayoutParams attrs = wallpaperWindow.getAttrs();
         Rect bounds = dc.getBounds();
@@ -153,7 +148,7 @@
         final WmDisplayCutout cutout = dc.calculateDisplayCutoutForRotation(Surface.ROTATION_0);
         final DisplayFrames displayFrames = new DisplayFrames(dc.getDisplayId(), new InsetsState(),
                 info, cutout, RoundedCorners.NO_ROUNDED_CORNERS, new PrivacyIndicatorBounds());
-        wallpaperWindowToken.applyFixedRotationTransform(info, displayFrames, config);
+        wallpaperWindow.mToken.applyFixedRotationTransform(info, displayFrames, config);
 
         // Check that the wallpaper has the same frame in landscape than in portrait
         assertEquals(Configuration.ORIENTATION_LANDSCAPE, dc.getConfiguration().orientation);
@@ -163,10 +158,7 @@
     @Test
     public void testWallpaperZoom() throws RemoteException {
         final DisplayContent dc = mWm.mRoot.getDefaultDisplay();
-        final WallpaperWindowToken wallpaperWindowToken = new WallpaperWindowToken(mWm,
-                mock(IBinder.class), true,  dc, true /* ownerCanManageAppTokens */);
-        final WindowState wallpaperWindow = createWindow(null, TYPE_WALLPAPER, wallpaperWindowToken,
-                "wallpaperWindow");
+        final WindowState wallpaperWindow = createWallpaperWindow(dc);
         wallpaperWindow.getAttrs().privateFlags |=
                 WindowManager.LayoutParams.PRIVATE_FLAG_WANTS_OFFSET_NOTIFICATIONS;
 
@@ -189,10 +181,7 @@
     @Test
     public void testWallpaperZoom_shouldNotScaleWallpaper() throws RemoteException {
         final DisplayContent dc = mWm.mRoot.getDefaultDisplay();
-        final WallpaperWindowToken wallpaperWindowToken = new WallpaperWindowToken(mWm,
-                mock(IBinder.class), true,  dc, true /* ownerCanManageAppTokens */);
-        final WindowState wallpaperWindow = createWindow(null, TYPE_WALLPAPER, wallpaperWindowToken,
-                "wallpaperWindow");
+        final WindowState wallpaperWindow = createWallpaperWindow(dc);
         wallpaperWindow.getAttrs().privateFlags |=
                 WindowManager.LayoutParams.PRIVATE_FLAG_WANTS_OFFSET_NOTIFICATIONS;
 
@@ -219,11 +208,7 @@
     @Test
     public void testWallpaperZoom_multipleCallers() {
         final DisplayContent dc = mWm.mRoot.getDefaultDisplay();
-        final WallpaperWindowToken wallpaperWindowToken = new WallpaperWindowToken(mWm,
-                mock(IBinder.class), true,  dc,
-                true /* ownerCanManageAppTokens */);
-        final WindowState wallpaperWindow = createWindow(null, TYPE_WALLPAPER, wallpaperWindowToken,
-                "wallpaperWindow");
+        final WindowState wallpaperWindow = createWallpaperWindow(dc);
         wallpaperWindow.getAttrs().privateFlags |=
                 WindowManager.LayoutParams.PRIVATE_FLAG_WANTS_OFFSET_NOTIFICATIONS;
 
@@ -261,6 +246,22 @@
         assertEquals(otherWindowInitialZoom, wallpaperWindow.mWallpaperZoomOut, .01f);
     }
 
+    @Test
+    public void testUpdateWallpaperTarget() {
+        final DisplayContent dc = mDisplayContent;
+        final WindowState homeWin = createWallpaperTargetWindow(dc);
+        final WindowState appWin = createWindow(null, TYPE_BASE_APPLICATION, "app");
+        final RecentsAnimationController recentsController = mock(RecentsAnimationController.class);
+        doReturn(true).when(recentsController).isWallpaperVisible(eq(appWin));
+        mWm.setRecentsAnimationController(recentsController);
+
+        dc.mWallpaperController.adjustWallpaperWindows();
+        assertEquals(appWin, dc.mWallpaperController.getWallpaperTarget());
+        // The wallpaper target is gone, so it should adjust to the next target.
+        appWin.removeImmediately();
+        assertEquals(homeWin, dc.mWallpaperController.getWallpaperTarget());
+    }
+
     /**
      * Tests that the windowing mode of the wallpaper window must always be fullscreen.
      */
@@ -278,37 +279,51 @@
         assertEquals(WINDOWING_MODE_FULLSCREEN, token.getWindowingMode());
     }
 
-    @UseTestDisplay(addWindows = W_ACTIVITY)
     @Test
     public void testFixedRotationRecentsAnimatingTask() {
+        final WindowState wallpaperWindow = createWallpaperWindow(mDisplayContent);
+        final WallpaperWindowToken wallpaperToken = wallpaperWindow.mToken.asWallpaperToken();
+        final WindowState appWin = createWindow(null, TYPE_BASE_APPLICATION, "app");
+        makeWindowVisible(appWin);
+        final ActivityRecord r = appWin.mActivityRecord;
         final RecentsAnimationController recentsController = mock(RecentsAnimationController.class);
-        doReturn(true).when(recentsController).isWallpaperVisible(eq(mAppWindow));
+        doReturn(true).when(recentsController).isWallpaperVisible(eq(appWin));
         mWm.setRecentsAnimationController(recentsController);
 
-        mAppWindow.mActivityRecord.applyFixedRotationTransform(mDisplayContent.getDisplayInfo(),
+        r.applyFixedRotationTransform(mDisplayContent.getDisplayInfo(),
                 mDisplayContent.mDisplayFrames, mDisplayContent.getConfiguration());
-        mAppWindow.mActivityRecord.mVisibleRequested = true;
-        mDisplayContent.mWallpaperController.adjustWallpaperWindows();
-
-        assertEquals(mAppWindow, mDisplayContent.mWallpaperController.getWallpaperTarget());
-        // Wallpaper should link the transform of its target.
-        assertTrue(mAppWindow.mActivityRecord.hasFixedRotationTransform());
-
-        mAppWindow.mActivityRecord.finishFixedRotationTransform();
         // Invisible requested activity should not share its rotation transform.
-        mAppWindow.mActivityRecord.mVisibleRequested = false;
+        r.mVisibleRequested = false;
         mDisplayContent.mWallpaperController.adjustWallpaperWindows();
+        assertFalse(wallpaperToken.hasFixedRotationTransform());
 
-        assertFalse(mAppWindow.mActivityRecord.hasFixedRotationTransform());
+        // Wallpaper should link the transform of its target.
+        r.mVisibleRequested = true;
+        mDisplayContent.mWallpaperController.adjustWallpaperWindows();
+        assertEquals(appWin, mDisplayContent.mWallpaperController.getWallpaperTarget());
+        assertTrue(r.hasFixedRotationTransform());
+        assertTrue(wallpaperToken.hasFixedRotationTransform());
+
+        // The case with shell transition.
+        registerTestTransitionPlayer();
+        final Transition t = r.mTransitionController.createTransition(TRANSIT_OPEN);
+        final ActivityRecord recents = mock(ActivityRecord.class);
+        t.collect(r.getTask());
+        r.mTransitionController.setTransientLaunch(recents, r.getTask());
+        // The activity in restore-below task should not be the target if keyguard is not locked.
+        mDisplayContent.mWallpaperController.adjustWallpaperWindows();
+        assertNotEquals(appWin, mDisplayContent.mWallpaperController.getWallpaperTarget());
+        // The activity in restore-below task should be the target if keyguard is occluded.
+        doReturn(true).when(mDisplayContent).isKeyguardLocked();
+        mDisplayContent.mWallpaperController.adjustWallpaperWindows();
+        assertEquals(appWin, mDisplayContent.mWallpaperController.getWallpaperTarget());
     }
 
     @Test
     public void testWallpaperTokenVisibility() {
         final DisplayContent dc = mWm.mRoot.getDefaultDisplay();
-        final WallpaperWindowToken token = new WallpaperWindowToken(mWm, mock(IBinder.class),
-                true, dc, true /* ownerCanManageAppTokens */);
-        final WindowState wallpaperWindow = createWindow(null, TYPE_WALLPAPER, token,
-                "wallpaperWindow");
+        final WindowState wallpaperWindow = createWallpaperWindow(dc);
+        final WallpaperWindowToken token = wallpaperWindow.mToken.asWallpaperToken();
         wallpaperWindow.setHasSurface(true);
 
         // Set-up mock shell transitions
@@ -350,6 +365,13 @@
         assertTrue(token.isVisible());
     }
 
+    private WindowState createWallpaperWindow(DisplayContent dc) {
+        final WindowToken wallpaperWindowToken = new WallpaperWindowToken(mWm, mock(IBinder.class),
+                true /* explicit */, dc, true /* ownerCanManageAppTokens */);
+        return createWindow(null /* parent */, TYPE_WALLPAPER, wallpaperWindowToken,
+                "wallpaperWindow");
+    }
+
     private WindowState createWallpaperTargetWindow(DisplayContent dc) {
         final ActivityRecord homeActivity = new ActivityBuilder(mWm.mAtmService)
                 .setTask(dc.getDefaultTaskDisplayArea().getRootHomeTask())
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java
index 1715a29..c8ea70c 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java
@@ -22,8 +22,8 @@
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSET;
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
-import static android.view.InsetsState.ITYPE_LOCAL_NAVIGATION_BAR_1;
-import static android.view.InsetsState.ITYPE_LOCAL_NAVIGATION_BAR_2;
+import static android.view.InsetsState.ITYPE_BOTTOM_GENERIC_OVERLAY;
+import static android.view.InsetsState.ITYPE_TOP_GENERIC_OVERLAY;
 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
 import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
 import static android.view.WindowManager.TRANSIT_CLOSE;
@@ -1302,40 +1302,42 @@
                 TYPE_BASE_APPLICATION);
         attrs2.setTitle("AppWindow2");
         activity2.addWindow(createWindowState(attrs2, activity2));
-        Rect navigationBarInsetsRect1 = new Rect(0, 200, 1080, 700);
-        Rect navigationBarInsetsRect2 = new Rect(0, 0, 1080, 200);
+        Rect genericOverlayInsetsRect1 = new Rect(0, 200, 1080, 700);
+        Rect genericOverlayInsetsRect2 = new Rect(0, 0, 1080, 200);
 
-        rootTask.addLocalRectInsetsSourceProvider(navigationBarInsetsRect1,
-                new int[]{ITYPE_LOCAL_NAVIGATION_BAR_1});
-        container.addLocalRectInsetsSourceProvider(navigationBarInsetsRect2,
-                new int[]{ITYPE_LOCAL_NAVIGATION_BAR_2});
+        rootTask.addLocalRectInsetsSourceProvider(genericOverlayInsetsRect1,
+                new int[]{ITYPE_TOP_GENERIC_OVERLAY});
+        container.addLocalRectInsetsSourceProvider(genericOverlayInsetsRect2,
+                new int[]{ITYPE_BOTTOM_GENERIC_OVERLAY});
 
-        InsetsSource navigationBarInsetsProvider1Source = new InsetsSource(
-                ITYPE_LOCAL_NAVIGATION_BAR_1);
-        navigationBarInsetsProvider1Source.setFrame(navigationBarInsetsRect1);
-        navigationBarInsetsProvider1Source.setVisible(true);
-        InsetsSource navigationBarInsetsProvider2Source = new InsetsSource(
-                ITYPE_LOCAL_NAVIGATION_BAR_2);
-        navigationBarInsetsProvider2Source.setFrame(navigationBarInsetsRect2);
-        navigationBarInsetsProvider2Source.setVisible(true);
+        InsetsSource genericOverlayInsetsProvider1Source = new InsetsSource(
+                ITYPE_TOP_GENERIC_OVERLAY);
+        genericOverlayInsetsProvider1Source.setFrame(genericOverlayInsetsRect1);
+        genericOverlayInsetsProvider1Source.setVisible(true);
+        InsetsSource genericOverlayInsetsProvider2Source = new InsetsSource(
+                ITYPE_BOTTOM_GENERIC_OVERLAY);
+        genericOverlayInsetsProvider2Source.setFrame(genericOverlayInsetsRect2);
+        genericOverlayInsetsProvider2Source.setVisible(true);
 
         activity0.forAllWindows(window -> {
-            assertEquals(navigationBarInsetsRect1,
-                    window.getInsetsState().peekSource(ITYPE_LOCAL_NAVIGATION_BAR_1).getFrame());
+            assertEquals(genericOverlayInsetsRect1,
+                    window.getInsetsState().peekSource(ITYPE_TOP_GENERIC_OVERLAY).getFrame());
             assertEquals(null,
-                    window.getInsetsState().peekSource(ITYPE_LOCAL_NAVIGATION_BAR_2));
+                    window.getInsetsState().peekSource(ITYPE_BOTTOM_GENERIC_OVERLAY));
         }, true);
         activity1.forAllWindows(window -> {
-            assertEquals(navigationBarInsetsRect1,
-                    window.getInsetsState().peekSource(ITYPE_LOCAL_NAVIGATION_BAR_1).getFrame());
-            assertEquals(navigationBarInsetsRect2,
-                    window.getInsetsState().peekSource(ITYPE_LOCAL_NAVIGATION_BAR_2).getFrame());
+            assertEquals(genericOverlayInsetsRect1,
+                    window.getInsetsState().peekSource(ITYPE_TOP_GENERIC_OVERLAY).getFrame());
+            assertEquals(genericOverlayInsetsRect2,
+                    window.getInsetsState().peekSource(ITYPE_BOTTOM_GENERIC_OVERLAY)
+                            .getFrame());
         }, true);
         activity2.forAllWindows(window -> {
-            assertEquals(navigationBarInsetsRect1,
-                    window.getInsetsState().peekSource(ITYPE_LOCAL_NAVIGATION_BAR_1).getFrame());
-            assertEquals(navigationBarInsetsRect2,
-                    window.getInsetsState().peekSource(ITYPE_LOCAL_NAVIGATION_BAR_2).getFrame());
+            assertEquals(genericOverlayInsetsRect1,
+                    window.getInsetsState().peekSource(ITYPE_TOP_GENERIC_OVERLAY).getFrame());
+            assertEquals(genericOverlayInsetsRect2,
+                    window.getInsetsState().peekSource(ITYPE_BOTTOM_GENERIC_OVERLAY)
+                            .getFrame());
         }, true);
     }
 
@@ -1344,7 +1346,7 @@
          /*
                 ___ rootTask ________________________________________
                |                  |                                  |
-          activity0      navigationBarInsetsProvider1    navigationBarInsetsProvider2
+          activity0      genericOverlayInsetsProvider1    genericOverlayInsetsProvider2
          */
         final Task rootTask = createTask(mDisplayContent);
 
@@ -1355,22 +1357,22 @@
         attrs.setTitle("AppWindow0");
         activity0.addWindow(createWindowState(attrs, activity0));
 
-        Rect navigationBarInsetsRect1 = new Rect(0, 200, 1080, 700);
-        Rect navigationBarInsetsRect2 = new Rect(0, 0, 1080, 200);
+        Rect genericOverlayInsetsRect1 = new Rect(0, 200, 1080, 700);
+        Rect genericOverlayInsetsRect2 = new Rect(0, 0, 1080, 200);
 
-        rootTask.addLocalRectInsetsSourceProvider(navigationBarInsetsRect1,
-                new int[]{ITYPE_LOCAL_NAVIGATION_BAR_1});
+        rootTask.addLocalRectInsetsSourceProvider(genericOverlayInsetsRect1,
+                new int[]{ITYPE_TOP_GENERIC_OVERLAY});
         activity0.forAllWindows(window -> {
-            assertEquals(navigationBarInsetsRect1,
-                    window.getInsetsState().peekSource(ITYPE_LOCAL_NAVIGATION_BAR_1).getFrame());
+            assertEquals(genericOverlayInsetsRect1,
+                    window.getInsetsState().peekSource(ITYPE_TOP_GENERIC_OVERLAY).getFrame());
         }, true);
 
-        rootTask.addLocalRectInsetsSourceProvider(navigationBarInsetsRect2,
-                new int[]{ITYPE_LOCAL_NAVIGATION_BAR_1});
+        rootTask.addLocalRectInsetsSourceProvider(genericOverlayInsetsRect2,
+                new int[]{ITYPE_TOP_GENERIC_OVERLAY});
 
         activity0.forAllWindows(window -> {
-            assertEquals(navigationBarInsetsRect2,
-                    window.getInsetsState().peekSource(ITYPE_LOCAL_NAVIGATION_BAR_1).getFrame());
+            assertEquals(genericOverlayInsetsRect2,
+                    window.getInsetsState().peekSource(ITYPE_TOP_GENERIC_OVERLAY).getFrame());
         }, true);
     }
 
@@ -1412,30 +1414,32 @@
         Rect navigationBarInsetsRect2 = new Rect(0, 0, 1080, 200);
 
         rootTask.addLocalRectInsetsSourceProvider(navigationBarInsetsRect1,
-                new int[]{ITYPE_LOCAL_NAVIGATION_BAR_1});
+                new int[]{ITYPE_TOP_GENERIC_OVERLAY});
         container.addLocalRectInsetsSourceProvider(navigationBarInsetsRect2,
-                new int[]{ITYPE_LOCAL_NAVIGATION_BAR_2});
+                new int[]{ITYPE_BOTTOM_GENERIC_OVERLAY});
         mDisplayContent.getInsetsStateController().onPostLayout();
-        rootTask.removeLocalInsetsSourceProvider(new int[]{ITYPE_LOCAL_NAVIGATION_BAR_1});
+        rootTask.removeLocalInsetsSourceProvider(new int[]{ITYPE_TOP_GENERIC_OVERLAY});
         mDisplayContent.getInsetsStateController().onPostLayout();
 
         activity0.forAllWindows(window -> {
             assertEquals(null,
-                    window.getInsetsState().peekSource(ITYPE_LOCAL_NAVIGATION_BAR_1));
+                    window.getInsetsState().peekSource(ITYPE_TOP_GENERIC_OVERLAY));
             assertEquals(null,
-                    window.getInsetsState().peekSource(ITYPE_LOCAL_NAVIGATION_BAR_2));
+                    window.getInsetsState().peekSource(ITYPE_BOTTOM_GENERIC_OVERLAY));
         }, true);
         activity1.forAllWindows(window -> {
             assertEquals(null,
-                    window.getInsetsState().peekSource(ITYPE_LOCAL_NAVIGATION_BAR_1));
+                    window.getInsetsState().peekSource(ITYPE_TOP_GENERIC_OVERLAY));
             assertEquals(navigationBarInsetsRect2,
-                    window.getInsetsState().peekSource(ITYPE_LOCAL_NAVIGATION_BAR_2).getFrame());
+                    window.getInsetsState().peekSource(ITYPE_BOTTOM_GENERIC_OVERLAY)
+                                    .getFrame());
         }, true);
         activity2.forAllWindows(window -> {
             assertEquals(null,
-                    window.getInsetsState().peekSource(ITYPE_LOCAL_NAVIGATION_BAR_1));
+                    window.getInsetsState().peekSource(ITYPE_TOP_GENERIC_OVERLAY));
             assertEquals(navigationBarInsetsRect2,
-                    window.getInsetsState().peekSource(ITYPE_LOCAL_NAVIGATION_BAR_2).getFrame());
+                    window.getInsetsState().peekSource(ITYPE_BOTTOM_GENERIC_OVERLAY)
+                            .getFrame());
         }, true);
     }
 
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowLayoutTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowLayoutTests.java
index ea18e58..739e783 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowLayoutTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowLayoutTests.java
@@ -72,7 +72,7 @@
     private static final Insets WATERFALL_INSETS = Insets.of(6, 0, 12, 0);
 
     private final WindowLayout mWindowLayout = new WindowLayout();
-    private final ClientWindowFrames mOutFrames = new ClientWindowFrames();
+    private final ClientWindowFrames mFrames = new ClientWindowFrames();
 
     private WindowManager.LayoutParams mAttrs;
     private InsetsState mState;
@@ -82,7 +82,6 @@
     private int mRequestedWidth;
     private int mRequestedHeight;
     private InsetsVisibilities mRequestedVisibilities;
-    private Rect mAttachedWindowFrame;
     private float mCompatScale;
 
     @Before
@@ -100,14 +99,14 @@
         mRequestedWidth = DISPLAY_WIDTH;
         mRequestedHeight = DISPLAY_HEIGHT;
         mRequestedVisibilities = new InsetsVisibilities();
-        mAttachedWindowFrame = null;
         mCompatScale = 1f;
+        mFrames.attachedFrame = null;
     }
 
     private void computeFrames() {
         mWindowLayout.computeFrames(mAttrs, mState, mDisplayCutoutSafe, mWindowBounds,
                 mWindowingMode, mRequestedWidth, mRequestedHeight, mRequestedVisibilities,
-                mAttachedWindowFrame, mCompatScale, mOutFrames);
+                mCompatScale, mFrames);
     }
 
     private void addDisplayCutout() {
@@ -145,9 +144,9 @@
     public void defaultParams() {
         computeFrames();
 
-        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mOutFrames.displayFrame);
-        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mOutFrames.parentFrame);
-        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mOutFrames.frame);
+        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mFrames.displayFrame);
+        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mFrames.parentFrame);
+        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mFrames.frame);
     }
 
     @Test
@@ -156,9 +155,9 @@
         mRequestedHeight = UNSPECIFIED_LENGTH;
         computeFrames();
 
-        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mOutFrames.displayFrame);
-        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mOutFrames.parentFrame);
-        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mOutFrames.frame);
+        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mFrames.displayFrame);
+        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mFrames.parentFrame);
+        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mFrames.frame);
     }
 
     @Test
@@ -172,9 +171,9 @@
         mAttrs.gravity = Gravity.LEFT | Gravity.TOP;
         computeFrames();
 
-        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mOutFrames.displayFrame);
-        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mOutFrames.parentFrame);
-        assertRect(0, STATUS_BAR_HEIGHT, width, STATUS_BAR_HEIGHT + height, mOutFrames.frame);
+        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mFrames.displayFrame);
+        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mFrames.parentFrame);
+        assertRect(0, STATUS_BAR_HEIGHT, width, STATUS_BAR_HEIGHT + height, mFrames.frame);
     }
 
     @Test
@@ -186,11 +185,24 @@
         computeFrames();
 
         assertRect(0, top, DISPLAY_WIDTH, DISPLAY_HEIGHT - NAVIGATION_BAR_HEIGHT,
-                mOutFrames.displayFrame);
+                mFrames.displayFrame);
         assertRect(0, top, DISPLAY_WIDTH, DISPLAY_HEIGHT - NAVIGATION_BAR_HEIGHT,
-                mOutFrames.parentFrame);
+                mFrames.parentFrame);
         assertRect(0, top, DISPLAY_WIDTH, DISPLAY_HEIGHT - NAVIGATION_BAR_HEIGHT,
-                mOutFrames.frame);
+                mFrames.frame);
+    }
+
+    @Test
+    public void attachedFrame() {
+        final int bottom = (DISPLAY_HEIGHT - STATUS_BAR_HEIGHT - NAVIGATION_BAR_HEIGHT) / 2;
+        mFrames.attachedFrame = new Rect(0, STATUS_BAR_HEIGHT, DISPLAY_WIDTH, bottom);
+        mRequestedWidth = UNSPECIFIED_LENGTH;
+        mRequestedHeight = UNSPECIFIED_LENGTH;
+        computeFrames();
+
+        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mFrames.displayFrame);
+        assertEquals(mFrames.attachedFrame, mFrames.parentFrame);
+        assertEquals(mFrames.attachedFrame, mFrames.frame);
     }
 
     @Test
@@ -198,9 +210,9 @@
         mAttrs.setFitInsetsTypes(WindowInsets.Type.statusBars());
         computeFrames();
 
-        assertInsetByTopBottom(STATUS_BAR_HEIGHT, 0, mOutFrames.displayFrame);
-        assertInsetByTopBottom(STATUS_BAR_HEIGHT, 0, mOutFrames.parentFrame);
-        assertInsetByTopBottom(STATUS_BAR_HEIGHT, 0, mOutFrames.frame);
+        assertInsetByTopBottom(STATUS_BAR_HEIGHT, 0, mFrames.displayFrame);
+        assertInsetByTopBottom(STATUS_BAR_HEIGHT, 0, mFrames.parentFrame);
+        assertInsetByTopBottom(STATUS_BAR_HEIGHT, 0, mFrames.frame);
     }
 
     @Test
@@ -208,9 +220,9 @@
         mAttrs.setFitInsetsTypes(WindowInsets.Type.navigationBars());
         computeFrames();
 
-        assertInsetByTopBottom(0, NAVIGATION_BAR_HEIGHT, mOutFrames.displayFrame);
-        assertInsetByTopBottom(0, NAVIGATION_BAR_HEIGHT, mOutFrames.parentFrame);
-        assertInsetByTopBottom(0, NAVIGATION_BAR_HEIGHT, mOutFrames.frame);
+        assertInsetByTopBottom(0, NAVIGATION_BAR_HEIGHT, mFrames.displayFrame);
+        assertInsetByTopBottom(0, NAVIGATION_BAR_HEIGHT, mFrames.parentFrame);
+        assertInsetByTopBottom(0, NAVIGATION_BAR_HEIGHT, mFrames.frame);
     }
 
     @Test
@@ -218,9 +230,9 @@
         mAttrs.setFitInsetsTypes(0);
         computeFrames();
 
-        assertInsetByTopBottom(0, 0, mOutFrames.displayFrame);
-        assertInsetByTopBottom(0, 0, mOutFrames.parentFrame);
-        assertInsetByTopBottom(0, 0, mOutFrames.frame);
+        assertInsetByTopBottom(0, 0, mFrames.displayFrame);
+        assertInsetByTopBottom(0, 0, mFrames.parentFrame);
+        assertInsetByTopBottom(0, 0, mFrames.frame);
     }
 
     @Test
@@ -228,9 +240,9 @@
         mAttrs.setFitInsetsSides(WindowInsets.Side.all());
         computeFrames();
 
-        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mOutFrames.displayFrame);
-        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mOutFrames.parentFrame);
-        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mOutFrames.frame);
+        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mFrames.displayFrame);
+        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mFrames.parentFrame);
+        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mFrames.frame);
     }
 
     @Test
@@ -238,9 +250,9 @@
         mAttrs.setFitInsetsSides(WindowInsets.Side.TOP);
         computeFrames();
 
-        assertInsetByTopBottom(STATUS_BAR_HEIGHT, 0, mOutFrames.displayFrame);
-        assertInsetByTopBottom(STATUS_BAR_HEIGHT, 0, mOutFrames.parentFrame);
-        assertInsetByTopBottom(STATUS_BAR_HEIGHT, 0, mOutFrames.frame);
+        assertInsetByTopBottom(STATUS_BAR_HEIGHT, 0, mFrames.displayFrame);
+        assertInsetByTopBottom(STATUS_BAR_HEIGHT, 0, mFrames.parentFrame);
+        assertInsetByTopBottom(STATUS_BAR_HEIGHT, 0, mFrames.frame);
     }
 
     @Test
@@ -248,9 +260,9 @@
         mAttrs.setFitInsetsSides(0);
         computeFrames();
 
-        assertInsetByTopBottom(0, 0, mOutFrames.displayFrame);
-        assertInsetByTopBottom(0, 0, mOutFrames.parentFrame);
-        assertInsetByTopBottom(0, 0, mOutFrames.frame);
+        assertInsetByTopBottom(0, 0, mFrames.displayFrame);
+        assertInsetByTopBottom(0, 0, mFrames.parentFrame);
+        assertInsetByTopBottom(0, 0, mFrames.frame);
     }
 
     @Test
@@ -259,9 +271,9 @@
         mState.getSource(ITYPE_NAVIGATION_BAR).setVisible(false);
         computeFrames();
 
-        assertInsetByTopBottom(0, 0, mOutFrames.displayFrame);
-        assertInsetByTopBottom(0, 0, mOutFrames.parentFrame);
-        assertInsetByTopBottom(0, 0, mOutFrames.frame);
+        assertInsetByTopBottom(0, 0, mFrames.displayFrame);
+        assertInsetByTopBottom(0, 0, mFrames.parentFrame);
+        assertInsetByTopBottom(0, 0, mFrames.frame);
     }
 
     @Test
@@ -271,9 +283,9 @@
         mAttrs.setFitInsetsIgnoringVisibility(true);
         computeFrames();
 
-        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mOutFrames.displayFrame);
-        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mOutFrames.parentFrame);
-        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mOutFrames.frame);
+        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mFrames.displayFrame);
+        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mFrames.parentFrame);
+        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mFrames.frame);
     }
 
     @Test
@@ -284,9 +296,9 @@
         mAttrs.privateFlags |= PRIVATE_FLAG_INSET_PARENT_FRAME_BY_IME;
         computeFrames();
 
-        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mOutFrames.displayFrame);
-        assertInsetByTopBottom(STATUS_BAR_HEIGHT, IME_HEIGHT, mOutFrames.parentFrame);
-        assertInsetByTopBottom(STATUS_BAR_HEIGHT, IME_HEIGHT, mOutFrames.frame);
+        assertInsetByTopBottom(STATUS_BAR_HEIGHT, NAVIGATION_BAR_HEIGHT, mFrames.displayFrame);
+        assertInsetByTopBottom(STATUS_BAR_HEIGHT, IME_HEIGHT, mFrames.parentFrame);
+        assertInsetByTopBottom(STATUS_BAR_HEIGHT, IME_HEIGHT, mFrames.frame);
     }
 
     @Test
@@ -297,11 +309,11 @@
         computeFrames();
 
         assertInsetBy(WATERFALL_INSETS.left, DISPLAY_CUTOUT_HEIGHT, WATERFALL_INSETS.right, 0,
-                mOutFrames.displayFrame);
+                mFrames.displayFrame);
         assertInsetBy(WATERFALL_INSETS.left, DISPLAY_CUTOUT_HEIGHT, WATERFALL_INSETS.right, 0,
-                mOutFrames.parentFrame);
+                mFrames.parentFrame);
         assertInsetBy(WATERFALL_INSETS.left, DISPLAY_CUTOUT_HEIGHT, WATERFALL_INSETS.right, 0,
-                mOutFrames.frame);
+                mFrames.frame);
     }
 
     @Test
@@ -312,11 +324,11 @@
         computeFrames();
 
         assertInsetBy(WATERFALL_INSETS.left, STATUS_BAR_HEIGHT, WATERFALL_INSETS.right, 0,
-                mOutFrames.displayFrame);
+                mFrames.displayFrame);
         assertInsetBy(WATERFALL_INSETS.left, STATUS_BAR_HEIGHT, WATERFALL_INSETS.right, 0,
-                mOutFrames.parentFrame);
+                mFrames.parentFrame);
         assertInsetBy(WATERFALL_INSETS.left, STATUS_BAR_HEIGHT, WATERFALL_INSETS.right, 0,
-                mOutFrames.frame);
+                mFrames.frame);
     }
 
     @Test
@@ -327,9 +339,9 @@
         mAttrs.setFitInsetsTypes(0);
         computeFrames();
 
-        assertInsetBy(WATERFALL_INSETS.left, 0, WATERFALL_INSETS.right, 0, mOutFrames.displayFrame);
-        assertInsetBy(WATERFALL_INSETS.left, 0, WATERFALL_INSETS.right, 0, mOutFrames.parentFrame);
-        assertInsetBy(WATERFALL_INSETS.left, 0, WATERFALL_INSETS.right, 0, mOutFrames.frame);
+        assertInsetBy(WATERFALL_INSETS.left, 0, WATERFALL_INSETS.right, 0, mFrames.displayFrame);
+        assertInsetBy(WATERFALL_INSETS.left, 0, WATERFALL_INSETS.right, 0, mFrames.parentFrame);
+        assertInsetBy(WATERFALL_INSETS.left, 0, WATERFALL_INSETS.right, 0, mFrames.frame);
     }
 
     @Test
@@ -344,9 +356,9 @@
         mAttrs.privateFlags |= PRIVATE_FLAG_LAYOUT_SIZE_EXTENDED_BY_CUTOUT;
         computeFrames();
 
-        assertRect(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, mOutFrames.displayFrame);
-        assertRect(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, mOutFrames.parentFrame);
-        assertRect(0, 0, DISPLAY_WIDTH, height + DISPLAY_CUTOUT_HEIGHT, mOutFrames.frame);
+        assertRect(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, mFrames.displayFrame);
+        assertRect(0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, mFrames.parentFrame);
+        assertRect(0, 0, DISPLAY_WIDTH, height + DISPLAY_CUTOUT_HEIGHT, mFrames.frame);
     }
 
     @Test
@@ -359,11 +371,11 @@
         computeFrames();
 
         assertInsetBy(WATERFALL_INSETS.left, STATUS_BAR_HEIGHT, WATERFALL_INSETS.right, 0,
-                mOutFrames.displayFrame);
+                mFrames.displayFrame);
         assertInsetBy(WATERFALL_INSETS.left, STATUS_BAR_HEIGHT, WATERFALL_INSETS.right, 0,
-                mOutFrames.parentFrame);
+                mFrames.parentFrame);
         assertInsetBy(WATERFALL_INSETS.left, STATUS_BAR_HEIGHT, WATERFALL_INSETS.right, 0,
-                mOutFrames.frame);
+                mFrames.frame);
     }
 
     @Test
@@ -373,9 +385,9 @@
         mAttrs.setFitInsetsTypes(0);
         computeFrames();
 
-        assertInsetBy(WATERFALL_INSETS.left, 0, WATERFALL_INSETS.right, 0, mOutFrames.displayFrame);
-        assertInsetBy(WATERFALL_INSETS.left, 0, WATERFALL_INSETS.right, 0, mOutFrames.parentFrame);
-        assertInsetBy(WATERFALL_INSETS.left, 0, WATERFALL_INSETS.right, 0, mOutFrames.frame);
+        assertInsetBy(WATERFALL_INSETS.left, 0, WATERFALL_INSETS.right, 0, mFrames.displayFrame);
+        assertInsetBy(WATERFALL_INSETS.left, 0, WATERFALL_INSETS.right, 0, mFrames.parentFrame);
+        assertInsetBy(WATERFALL_INSETS.left, 0, WATERFALL_INSETS.right, 0, mFrames.frame);
     }
 
     @Test
@@ -386,11 +398,11 @@
         computeFrames();
 
         assertInsetBy(WATERFALL_INSETS.left, STATUS_BAR_HEIGHT, WATERFALL_INSETS.right, 0,
-                mOutFrames.displayFrame);
+                mFrames.displayFrame);
         assertInsetBy(WATERFALL_INSETS.left, STATUS_BAR_HEIGHT, WATERFALL_INSETS.right, 0,
-                mOutFrames.parentFrame);
+                mFrames.parentFrame);
         assertInsetBy(WATERFALL_INSETS.left, STATUS_BAR_HEIGHT, WATERFALL_INSETS.right, 0,
-                mOutFrames.frame);
+                mFrames.frame);
     }
 
     @Test
@@ -400,8 +412,8 @@
         mAttrs.setFitInsetsTypes(0);
         computeFrames();
 
-        assertInsetByTopBottom(0, 0, mOutFrames.displayFrame);
-        assertInsetByTopBottom(0, 0, mOutFrames.parentFrame);
-        assertInsetByTopBottom(0, 0, mOutFrames.frame);
+        assertInsetByTopBottom(0, 0, mFrames.displayFrame);
+        assertInsetByTopBottom(0, 0, mFrames.parentFrame);
+        assertInsetByTopBottom(0, 0, mFrames.frame);
     }
 }
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
index a0c20c2..14737e0 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
@@ -35,6 +35,10 @@
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.never;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND_FLOATING;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_SOLID_COLOR;
+import static com.android.server.wm.LetterboxConfiguration.LETTERBOX_BACKGROUND_WALLPAPER;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -49,6 +53,7 @@
 import static org.mockito.Mockito.when;
 
 import android.content.pm.PackageManager;
+import android.graphics.Rect;
 import android.os.Binder;
 import android.os.IBinder;
 import android.os.RemoteException;
@@ -60,6 +65,7 @@
 import android.view.InsetsVisibilities;
 import android.view.View;
 import android.view.WindowManager;
+import android.window.WindowContainerToken;
 
 import androidx.test.filters.SmallTest;
 
@@ -281,7 +287,7 @@
 
         mWm.addWindow(session, new TestIWindow(), params, View.VISIBLE, DEFAULT_DISPLAY,
                 UserHandle.USER_SYSTEM, new InsetsVisibilities(), null, new InsetsState(),
-                new InsetsSourceControl[0]);
+                new InsetsSourceControl[0], new Rect(), new float[1]);
 
         verify(mWm.mWindowContextListenerController, never()).registerWindowContainerListener(any(),
                 any(), anyInt(), anyInt(), any());
@@ -316,4 +322,94 @@
         verify(mWm.mInputManager).setInTouchMode(
                 !currentTouchMode, callingPid, callingUid, /* hasPermission= */ false);
     }
+
+    @Test
+    public void testGetTaskWindowContainerTokenForLaunchCookie_nullCookie() {
+        WindowContainerToken wct = mWm.getTaskWindowContainerTokenForLaunchCookie(null);
+        assertThat(wct).isNull();
+    }
+
+    @Test
+    public void testGetTaskWindowContainerTokenForLaunchCookie_invalidCookie() {
+        Binder cookie = new Binder("test cookie");
+        WindowContainerToken wct = mWm.getTaskWindowContainerTokenForLaunchCookie(cookie);
+        assertThat(wct).isNull();
+
+        final ActivityRecord testActivity = new ActivityBuilder(mAtm)
+                .setCreateTask(true)
+                .build();
+
+        wct = mWm.getTaskWindowContainerTokenForLaunchCookie(cookie);
+        assertThat(wct).isNull();
+    }
+
+    @Test
+    public void testGetTaskWindowContainerTokenForLaunchCookie_validCookie() {
+        final Binder cookie = new Binder("ginger cookie");
+        final WindowContainerToken launchRootTask = mock(WindowContainerToken.class);
+        setupActivityWithLaunchCookie(cookie, launchRootTask);
+
+        WindowContainerToken wct = mWm.getTaskWindowContainerTokenForLaunchCookie(cookie);
+        assertThat(wct).isEqualTo(launchRootTask);
+    }
+
+    @Test
+    public void testGetTaskWindowContainerTokenForLaunchCookie_multipleCookies() {
+        final Binder cookie1 = new Binder("ginger cookie");
+        final WindowContainerToken launchRootTask1 = mock(WindowContainerToken.class);
+        setupActivityWithLaunchCookie(cookie1, launchRootTask1);
+
+        setupActivityWithLaunchCookie(new Binder("choc chip cookie"),
+                mock(WindowContainerToken.class));
+
+        setupActivityWithLaunchCookie(new Binder("peanut butter cookie"),
+                mock(WindowContainerToken.class));
+
+        WindowContainerToken wct = mWm.getTaskWindowContainerTokenForLaunchCookie(cookie1);
+        assertThat(wct).isEqualTo(launchRootTask1);
+    }
+
+    @Test
+    public void testGetTaskWindowContainerTokenForLaunchCookie_multipleCookies_noneValid() {
+        setupActivityWithLaunchCookie(new Binder("ginger cookie"),
+                mock(WindowContainerToken.class));
+
+        setupActivityWithLaunchCookie(new Binder("choc chip cookie"),
+                mock(WindowContainerToken.class));
+
+        setupActivityWithLaunchCookie(new Binder("peanut butter cookie"),
+                mock(WindowContainerToken.class));
+
+        WindowContainerToken wct = mWm.getTaskWindowContainerTokenForLaunchCookie(
+                new Binder("some other cookie"));
+        assertThat(wct).isNull();
+    }
+
+    @Test
+    public void testisLetterboxBackgroundMultiColored() {
+        assertThat(setupLetterboxConfigurationWithBackgroundType(
+                LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND_FLOATING)).isTrue();
+        assertThat(setupLetterboxConfigurationWithBackgroundType(
+                LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND)).isTrue();
+        assertThat(setupLetterboxConfigurationWithBackgroundType(
+                LETTERBOX_BACKGROUND_WALLPAPER)).isTrue();
+        assertThat(setupLetterboxConfigurationWithBackgroundType(
+                LETTERBOX_BACKGROUND_SOLID_COLOR)).isFalse();
+    }
+
+    private void setupActivityWithLaunchCookie(IBinder launchCookie, WindowContainerToken wct) {
+        final WindowContainer.RemoteToken remoteToken = mock(WindowContainer.RemoteToken.class);
+        when(remoteToken.toWindowContainerToken()).thenReturn(wct);
+        final ActivityRecord testActivity = new ActivityBuilder(mAtm)
+                .setCreateTask(true)
+                .build();
+        testActivity.mLaunchCookie = launchCookie;
+        testActivity.getTask().mRemoteToken = remoteToken;
+    }
+
+    private boolean setupLetterboxConfigurationWithBackgroundType(
+            @LetterboxConfiguration.LetterboxBackgroundType int letterboxBackgroundType) {
+        mWm.mLetterboxConfiguration.setLetterboxBackgroundType(letterboxBackgroundType);
+        return mWm.isLetterboxBackgroundMultiColored();
+    }
 }
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java
index 40ca250..84c2c55 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java
@@ -30,7 +30,7 @@
 import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
 import static android.content.res.Configuration.SCREEN_HEIGHT_DP_UNDEFINED;
 import static android.content.res.Configuration.SCREEN_WIDTH_DP_UNDEFINED;
-import static android.view.InsetsState.ITYPE_LOCAL_NAVIGATION_BAR_1;
+import static android.view.InsetsState.ITYPE_TOP_GENERIC_OVERLAY;
 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
 
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
@@ -223,7 +223,7 @@
         mWm.mAtmService.mTaskOrganizerController.unregisterTaskOrganizer(organizer);
         // Ensure events dispatch to organizer.
         mWm.mAtmService.mTaskOrganizerController.dispatchPendingEvents();
-        assertTaskVanished(organizer, false /* expectVanished */, rootTask);
+        verify(organizer, times(0)).onTaskVanished(any());
         assertFalse(rootTask.isOrganized());
     }
 
@@ -297,7 +297,7 @@
         // Ensure events dispatch to organizer.
         mWm.mAtmService.mTaskOrganizerController.dispatchPendingEvents();
 
-        assertTaskVanished(organizer, true /* expectVanished */, rootTask);
+        verify(organizer, times(0)).onTaskVanished(any());
         assertFalse(rootTask.isOrganized());
     }
 
@@ -341,7 +341,7 @@
         mWm.mAtmService.mTaskOrganizerController.dispatchPendingEvents();
         verify(organizer, times(3))
                 .onTaskAppeared(any(RunningTaskInfo.class), any(SurfaceControl.class));
-        assertTaskVanished(organizer2, true /* expectVanished */, rootTask, rootTask2, rootTask3);
+        verify(organizer2, times(0)).onTaskVanished(any());
     }
 
     @Test
@@ -395,6 +395,7 @@
         assertFalse(task2.isAttached());
         // Normal task should keep.
         assertTrue(task.isAttached());
+        verify(organizer2, times(0)).onTaskVanished(any());
     }
 
     @Test
@@ -439,7 +440,7 @@
         mWm.mAtmService.mTaskOrganizerController.dispatchPendingEvents();
         verify(organizer, times(3))
                 .onTaskAppeared(any(RunningTaskInfo.class), any(SurfaceControl.class));
-        assertTaskVanished(organizer2, true /* expectVanished */, rootTask, rootTask2, rootTask3);
+        verify(organizer2, times(0)).onTaskVanished(any());
     }
 
     @Test
@@ -458,6 +459,23 @@
     }
 
     @Test
+    public void testRegisterTaskOrganizerWithExistingTasks_noSurfaceControl()
+            throws RemoteException {
+        final Task rootTask = createRootTask();
+        final Task task = createTask(rootTask);
+        final Task rootTask2 = createRootTask();
+        final Task task2 = createTask(rootTask2);
+        rootTask2.setSurfaceControl(null);
+        ArrayList<TaskAppearedInfo> existingTasks = new ArrayList<>();
+        final ITaskOrganizer organizer = registerMockOrganizer(existingTasks);
+        assertContainsTasks(existingTasks, rootTask);
+
+        // Verify we don't get onTaskAppeared if we are returned the tasks
+        verify(organizer, never())
+                .onTaskAppeared(any(RunningTaskInfo.class), any(SurfaceControl.class));
+    }
+
+    @Test
     public void testTaskTransaction() {
         removeGlobalMinSizeRestriction();
         final Task rootTask = new TaskBuilder(mSupervisor)
@@ -522,7 +540,10 @@
         mWm.mAtmService.mWindowOrganizerController.applyTransaction(t);
 
         assertEquals(WINDOWING_MODE_FULLSCREEN, record.getWindowingMode());
-        assertEquals(WINDOWING_MODE_PINNED, rootTask.getWindowingMode());
+        // Get the root task from the PIP activity record again, since the PIP root task may have
+        // changed when the activity entered PIP mode.
+        final Task pipRootTask = record.getRootTask();
+        assertEquals(WINDOWING_MODE_PINNED, pipRootTask.getWindowingMode());
     }
 
     @Test
@@ -687,7 +708,7 @@
         final RunningTaskInfo info2 = task2.getTaskInfo();
 
         WindowContainerTransaction wct = new WindowContainerTransaction();
-        wct.setAdjacentRoots(info1.token, info2.token, false /* moveTogether */);
+        wct.setAdjacentRoots(info1.token, info2.token);
         mWm.mAtmService.mWindowOrganizerController.applyTransaction(wct);
         assertEquals(task1.getAdjacentTaskFragment(), task2);
         assertEquals(task2.getAdjacentTaskFragment(), task1);
@@ -697,8 +718,8 @@
         mWm.mAtmService.mWindowOrganizerController.applyTransaction(wct);
         assertEquals(dc.getDefaultTaskDisplayArea().mLaunchAdjacentFlagRootTask, task1);
 
-        task1.setAdjacentTaskFragment(null, false /* moveTogether */);
-        task2.setAdjacentTaskFragment(null, false /* moveTogether */);
+        task1.setAdjacentTaskFragment(null);
+        task2.setAdjacentTaskFragment(null);
         wct = new WindowContainerTransaction();
         wct.clearLaunchAdjacentFlagRoot(info1.token);
         mWm.mAtmService.mWindowOrganizerController.applyTransaction(wct);
@@ -758,11 +779,11 @@
         final WindowContainerTransaction wct = new WindowContainerTransaction();
         wct.addRectInsetsProvider(navigationBarInsetsReceiverTask.mRemoteToken
                         .toWindowContainerToken(), navigationBarInsetsProviderRect,
-                new int[]{ITYPE_LOCAL_NAVIGATION_BAR_1});
+                new int[]{ITYPE_TOP_GENERIC_OVERLAY});
         mWm.mAtmService.mWindowOrganizerController.applyTransaction(wct);
 
         assertThat(navigationBarInsetsReceiverTask.mLocalInsetsSourceProviders
-                .valueAt(0).getSource().getType()).isEqualTo(ITYPE_LOCAL_NAVIGATION_BAR_1);
+                .valueAt(0).getSource().getType()).isEqualTo(ITYPE_TOP_GENERIC_OVERLAY);
     }
 
     @Test
@@ -778,12 +799,12 @@
         final WindowContainerTransaction wct = new WindowContainerTransaction();
         wct.addRectInsetsProvider(navigationBarInsetsReceiverTask.mRemoteToken
                         .toWindowContainerToken(), navigationBarInsetsProviderRect,
-                new int[]{ITYPE_LOCAL_NAVIGATION_BAR_1});
+                new int[]{ITYPE_TOP_GENERIC_OVERLAY});
         mWm.mAtmService.mWindowOrganizerController.applyTransaction(wct);
 
         final WindowContainerTransaction wct2 = new WindowContainerTransaction();
         wct2.removeInsetsProvider(navigationBarInsetsReceiverTask.mRemoteToken
-                .toWindowContainerToken(), new int[]{ITYPE_LOCAL_NAVIGATION_BAR_1});
+                .toWindowContainerToken(), new int[]{ITYPE_TOP_GENERIC_OVERLAY});
         mWm.mAtmService.mWindowOrganizerController.applyTransaction(wct2);
 
         assertThat(navigationBarInsetsReceiverTask.mLocalInsetsSourceProviders.size()).isEqualTo(0);
@@ -1015,6 +1036,8 @@
         final ActivityRecord record = createActivityRecordWithParentTask(mDisplayContent,
                 WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD);
         record.info.flags |= ActivityInfo.FLAG_SUPPORTS_PICTURE_IN_PICTURE;
+        record.setPictureInPictureParams(new PictureInPictureParams.Builder()
+                .setAutoEnterEnabled(true).build());
         spyOn(record);
         doReturn(true).when(record).checkEnterPictureInPictureState(any(), anyBoolean());
 
@@ -1259,7 +1282,7 @@
         record.setTaskDescription(new ActivityManager.TaskDescription("TestDescription"));
         waitUntilHandlersIdle();
 
-        ArrayList<PendingTaskEvent> pendingEvents = getTaskPendingEvent(rootTask);
+        ArrayList<PendingTaskEvent> pendingEvents = getTaskPendingEvent(organizer, rootTask);
         assertEquals(1, pendingEvents.size());
         assertEquals(PendingTaskEvent.EVENT_APPEARED, pendingEvents.get(0).mEventType);
         assertEquals("TestDescription",
@@ -1279,7 +1302,7 @@
         rootTask.removeImmediately();
         waitUntilHandlersIdle();
 
-        ArrayList<PendingTaskEvent> pendingEvents = getTaskPendingEvent(rootTask);
+        ArrayList<PendingTaskEvent> pendingEvents = getTaskPendingEvent(organizer, rootTask);
         assertEquals(0, pendingEvents.size());
     }
 
@@ -1297,7 +1320,7 @@
         record.setTaskDescription(new ActivityManager.TaskDescription("TestDescription"));
         waitUntilHandlersIdle();
 
-        ArrayList<PendingTaskEvent> pendingEvents = getTaskPendingEvent(rootTask);
+        ArrayList<PendingTaskEvent> pendingEvents = getTaskPendingEvent(organizer, rootTask);
         assertEquals(1, pendingEvents.size());
         assertEquals(PendingTaskEvent.EVENT_INFO_CHANGED, pendingEvents.get(0).mEventType);
         assertEquals("TestDescription",
@@ -1306,7 +1329,7 @@
         record.setTaskDescription(new ActivityManager.TaskDescription("TestDescription2"));
         waitUntilHandlersIdle();
 
-        pendingEvents = getTaskPendingEvent(rootTask);
+        pendingEvents = getTaskPendingEvent(organizer, rootTask);
         assertEquals(1, pendingEvents.size());
         assertEquals(PendingTaskEvent.EVENT_INFO_CHANGED, pendingEvents.get(0).mEventType);
         assertEquals("TestDescription2",
@@ -1329,7 +1352,7 @@
         rootTask.removeImmediately();
         waitUntilHandlersIdle();
 
-        ArrayList<PendingTaskEvent> pendingEvents = getTaskPendingEvent(rootTask);
+        ArrayList<PendingTaskEvent> pendingEvents = getTaskPendingEvent(organizer, rootTask);
         assertEquals(1, pendingEvents.size());
         assertEquals(PendingTaskEvent.EVENT_VANISHED, pendingEvents.get(0).mEventType);
         assertEquals("TestDescription",
@@ -1350,7 +1373,7 @@
         rootTask.setWindowingMode(WINDOWING_MODE_MULTI_WINDOW);
         waitUntilHandlersIdle();
 
-        ArrayList<PendingTaskEvent> pendingEvents = getTaskPendingEvent(rootTask);
+        ArrayList<PendingTaskEvent> pendingEvents = getTaskPendingEvent(organizer, rootTask);
         assertEquals(1, pendingEvents.size());
         assertEquals(PendingTaskEvent.EVENT_VANISHED, pendingEvents.get(0).mEventType);
     }
@@ -1370,14 +1393,16 @@
                 new IRequestFinishCallback.Default());
         waitUntilHandlersIdle();
 
-        ArrayList<PendingTaskEvent> pendingEvents = getTaskPendingEvent(rootTask);
+        ArrayList<PendingTaskEvent> pendingEvents = getTaskPendingEvent(organizer, rootTask);
         assertEquals(1, pendingEvents.size());
         assertEquals(PendingTaskEvent.EVENT_VANISHED, pendingEvents.get(0).mEventType);
     }
 
-    private ArrayList<PendingTaskEvent> getTaskPendingEvent(Task task) {
+    private ArrayList<PendingTaskEvent> getTaskPendingEvent(ITaskOrganizer organizer, Task task) {
         ArrayList<PendingTaskEvent> total =
-                mWm.mAtmService.mTaskOrganizerController.getPendingEventList();
+                mWm.mAtmService.mTaskOrganizerController
+                        .getTaskOrganizerPendingEvents(organizer.asBinder())
+                        .getPendingEventList();
         ArrayList<PendingTaskEvent> result = new ArrayList();
 
         for (int i = 0; i < total.size(); i++) {
@@ -1499,7 +1524,11 @@
         verify(mWm.mAtmService.mRootWindowContainer).resumeFocusedTasksTopActivities();
 
         clearInvocations(mWm.mAtmService.mRootWindowContainer);
-        t.setWindowingMode(wct, WINDOWING_MODE_FULLSCREEN);
+        // The token for the PIP root task may have changed when the task entered PIP mode, so do
+        // not reuse the one from above.
+        final WindowContainerToken newToken =
+                record.getRootTask().mRemoteToken.toWindowContainerToken();
+        t.setWindowingMode(newToken, WINDOWING_MODE_FULLSCREEN);
         mWm.mAtmService.mWindowOrganizerController.applyTransaction(t);
         verify(mWm.mAtmService.mRootWindowContainer).resumeFocusedTasksTopActivities();
     }
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java
index 746f2b5..3abf7ce 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java
@@ -21,6 +21,7 @@
 import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
 import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
 
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.never;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
 import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
@@ -39,24 +40,30 @@
 import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyInt;
 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.times;
 import static org.mockito.Mockito.when;
 
 import android.Manifest;
+import android.app.ActivityManager;
+import android.app.ClientTransactionHandler;
 import android.app.IApplicationThread;
+import android.app.servertransaction.ConfigurationChangeItem;
 import android.content.ComponentName;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.ServiceInfo;
 import android.content.res.Configuration;
 import android.graphics.Rect;
 import android.os.LocaleList;
+import android.os.RemoteException;
 import android.platform.test.annotations.Presubmit;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
 import org.mockito.InOrder;
 import org.mockito.Mockito;
 
@@ -282,6 +289,39 @@
     }
 
     @Test
+    public void testCachedStateConfigurationChange() throws RemoteException {
+        final ClientLifecycleManager clientManager = mAtm.getLifecycleManager();
+        doNothing().when(clientManager).scheduleTransaction(any(), any());
+        final IApplicationThread thread = mWpc.getThread();
+        final Configuration newConfig = new Configuration(mWpc.getConfiguration());
+        newConfig.densityDpi += 100;
+        // Non-cached state will send the change directly.
+        mWpc.setReportedProcState(ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND);
+        clearInvocations(clientManager);
+        mWpc.onConfigurationChanged(newConfig);
+        verify(clientManager).scheduleTransaction(eq(thread), any());
+
+        // Cached state won't send the change.
+        clearInvocations(clientManager);
+        mWpc.setReportedProcState(ActivityManager.PROCESS_STATE_CACHED_ACTIVITY);
+        newConfig.densityDpi += 100;
+        mWpc.onConfigurationChanged(newConfig);
+        verify(clientManager, never()).scheduleTransaction(eq(thread), any());
+
+        // Cached -> non-cached will send the previous deferred config immediately.
+        mWpc.setReportedProcState(ActivityManager.PROCESS_STATE_RECEIVER);
+        final ArgumentCaptor<ConfigurationChangeItem> captor =
+                ArgumentCaptor.forClass(ConfigurationChangeItem.class);
+        verify(clientManager).scheduleTransaction(eq(thread), captor.capture());
+        final ClientTransactionHandler client = mock(ClientTransactionHandler.class);
+        captor.getValue().preExecute(client, null /* token */);
+        final ArgumentCaptor<Configuration> configCaptor =
+                ArgumentCaptor.forClass(Configuration.class);
+        verify(client).updatePendingConfiguration(configCaptor.capture());
+        assertEquals(newConfig, configCaptor.getValue());
+    }
+
+    @Test
     public void testComputeOomAdjFromActivities() {
         final ActivityRecord activity = createActivityRecord(mWpc);
         activity.mVisibleRequested = true;
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 20935f1..cfc0da7 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java
@@ -712,6 +712,25 @@
         // Keyguard host window should be always contained. The drawn app or app with starting
         // window are unnecessary to draw.
         assertEquals(Arrays.asList(keyguardHostWindow, startingWindow), outWaitingForDrawn);
+
+        // No need to wait for a window of invisible activity even if the window has surface.
+        final WindowState invisibleApp = mAppWindow;
+        invisibleApp.mActivityRecord.mVisibleRequested = false;
+        invisibleApp.mActivityRecord.allDrawn = false;
+        outWaitingForDrawn.clear();
+        invisibleApp.requestDrawIfNeeded(outWaitingForDrawn);
+        assertTrue(outWaitingForDrawn.isEmpty());
+
+        // Drawn state should not be changed for insets change when screen is off.
+        spyOn(mWm.mPolicy);
+        doReturn(false).when(mWm.mPolicy).isScreenOn();
+        makeWindowVisibleAndDrawn(startingApp);
+        startingApp.getConfiguration().orientation = 0; // Reset to be the same as last reported.
+        startingApp.getWindowFrames().setInsetsChanged(true);
+        startingApp.updateResizingWindowIfNeeded();
+        assertTrue(mWm.mResizingWindows.contains(startingApp));
+        assertTrue(startingApp.isDrawn());
+        assertFalse(startingApp.getOrientationChanging());
     }
 
     @UseTestDisplay(addWindows = W_ABOVE_ACTIVITY)
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java
index 7347f88..ee5f364 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java
@@ -228,14 +228,28 @@
         // {@link com.android.internal.R.dimen.config_fixedOrientationLetterboxAspectRatio}, is set
         // on some device form factors.
         mAtm.mWindowManager.mLetterboxConfiguration.setFixedOrientationLetterboxAspectRatio(0);
-        // Ensure letterbox position multiplier is not overridden on any device target.
+        // Ensure letterbox horizontal position multiplier is not overridden on any device target.
         // {@link com.android.internal.R.dimen.config_letterboxHorizontalPositionMultiplier},
         // may be set on some device form factors.
         mAtm.mWindowManager.mLetterboxConfiguration.setLetterboxHorizontalPositionMultiplier(0.5f);
-        // Ensure letterbox reachability treatment isn't overridden on any device target.
-        // {@link com.android.internal.R.bool.config_letterboxIsReachabilityEnabled},
+        // Ensure letterbox vertical position multiplier is not overridden on any device target.
+        // {@link com.android.internal.R.dimen.config_letterboxHorizontalPositionMultiplier},
         // may be set on some device form factors.
-        mAtm.mWindowManager.mLetterboxConfiguration.setIsReachabilityEnabled(false);
+        mAtm.mWindowManager.mLetterboxConfiguration.setLetterboxVerticalPositionMultiplier(0.5f);
+        // Ensure letterbox horizontal reachability treatment isn't overridden on any device target.
+        // {@link com.android.internal.R.bool.config_letterboxIsHorizontalReachabilityEnabled},
+        // may be set on some device form factors.
+        mAtm.mWindowManager.mLetterboxConfiguration.setIsHorizontalReachabilityEnabled(false);
+        // Ensure letterbox vertical reachability treatment isn't overridden on any device target.
+        // {@link com.android.internal.R.bool.config_letterboxIsVerticalReachabilityEnabled},
+        // may be set on some device form factors.
+        mAtm.mWindowManager.mLetterboxConfiguration.setIsVerticalReachabilityEnabled(false);
+        // Ensure aspect ratio for unresizable apps isn't overridden on any device target.
+        // {@link com.android.internal.R.bool
+        // .config_letterboxIsSplitScreenAspectRatioForUnresizableAppsEnabled}, may be set on some
+        // device form factors.
+        mAtm.mWindowManager.mLetterboxConfiguration
+                .setIsSplitScreenAspectRatioForUnresizableAppsEnabled(false);
 
         checkDeviceSpecificOverridesNotApplied();
     }
@@ -245,7 +259,11 @@
         // Revert back to device overrides.
         mAtm.mWindowManager.mLetterboxConfiguration.resetFixedOrientationLetterboxAspectRatio();
         mAtm.mWindowManager.mLetterboxConfiguration.resetLetterboxHorizontalPositionMultiplier();
-        mAtm.mWindowManager.mLetterboxConfiguration.resetIsReachabilityEnabled();
+        mAtm.mWindowManager.mLetterboxConfiguration.resetLetterboxVerticalPositionMultiplier();
+        mAtm.mWindowManager.mLetterboxConfiguration.resetIsHorizontalReachabilityEnabled();
+        mAtm.mWindowManager.mLetterboxConfiguration.resetIsVerticalReachabilityEnabled();
+        mAtm.mWindowManager.mLetterboxConfiguration
+                .resetIsSplitScreenAspectRatioForUnresizableAppsEnabled();
     }
 
     /**
@@ -793,7 +811,7 @@
             }
 
             @Override
-            public void topFocusedWindowChanged(String packageName,
+            public void topFocusedWindowChanged(ComponentName component,
                     InsetsVisibilities requestedVisibilities) {
             }
         };
@@ -812,7 +830,7 @@
     TestTransitionPlayer registerTestTransitionPlayer() {
         final TestTransitionPlayer testPlayer = new TestTransitionPlayer(
                 mAtm.getTransitionController(), mAtm.mWindowOrganizerController);
-        testPlayer.mController.registerTransitionPlayer(testPlayer, null /* appThread */);
+        testPlayer.mController.registerTransitionPlayer(testPlayer, null /* playerProc */);
         return testPlayer;
     }
 
@@ -1549,7 +1567,7 @@
             mSecondary = mService.mTaskOrganizerController.createRootTask(
                     display, WINDOWING_MODE_MULTI_WINDOW, null);
 
-            mPrimary.setAdjacentTaskFragment(mSecondary, true);
+            mPrimary.setAdjacentTaskFragment(mSecondary);
             display.getDefaultTaskDisplayArea().setLaunchAdjacentFlagRootTask(mSecondary);
 
             final Rect primaryBounds = new Rect();
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 2df1d23..77fca45 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ZOrderingTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ZOrderingTests.java
@@ -328,7 +328,6 @@
         assertWindowHigher(mImeWindow, imeSystemOverlayTarget);
         assertWindowHigher(mImeWindow, mChildAppWindowAbove);
         assertWindowHigher(mImeWindow, mAppWindow);
-        assertWindowHigher(mImeWindow, mDockedDividerWindow);
 
         // The IME has a higher base layer than the status bar so we may expect it to go
         // above the status bar once they are both in the Non-App layer, as past versions of this
@@ -349,7 +348,6 @@
 
         assertWindowHigher(mImeWindow, mChildAppWindowAbove);
         assertWindowHigher(mImeWindow, mAppWindow);
-        assertWindowHigher(mImeWindow, mDockedDividerWindow);
         assertWindowHigher(mImeWindow, mStatusBarWindow);
 
         // And, IME dialogs should always have an higher layer than the IME.
@@ -489,77 +487,6 @@
     }
 
     @Test
-    public void testDockedDividerPosition() {
-        final Task pinnedTask =
-                createTask(mDisplayContent, WINDOWING_MODE_PINNED, ACTIVITY_TYPE_STANDARD);
-        final WindowState pinnedWindow =
-                createAppWindow(pinnedTask, ACTIVITY_TYPE_STANDARD, "pinnedWindow");
-
-        final Task belowTask =
-                createTask(mDisplayContent, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD);
-        final WindowState belowTaskWindow =
-                createAppWindow(belowTask, ACTIVITY_TYPE_STANDARD, "belowTaskWindow");
-
-        final Task splitScreenTask1 =
-                createTask(mDisplayContent, WINDOWING_MODE_MULTI_WINDOW, ACTIVITY_TYPE_STANDARD);
-        final WindowState splitWindow1 =
-                createAppWindow(splitScreenTask1, ACTIVITY_TYPE_STANDARD, "splitWindow1");
-        final Task splitScreenTask2 =
-                createTask(mDisplayContent, WINDOWING_MODE_MULTI_WINDOW, ACTIVITY_TYPE_STANDARD);
-        final WindowState splitWindow2 =
-                createAppWindow(splitScreenTask2, ACTIVITY_TYPE_STANDARD, "splitWindow2");
-        splitScreenTask1.setAdjacentTaskFragment(splitScreenTask2, true /* moveTogether */);
-        splitScreenTask2.setAdjacentTaskFragment(splitScreenTask1, true /* moveTogether */);
-
-        final Task aboveTask =
-                createTask(mDisplayContent, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD);
-        final WindowState aboveTaskWindow =
-                createAppWindow(aboveTask, ACTIVITY_TYPE_STANDARD, "aboveTaskWindow");
-
-        mDisplayContent.assignChildLayers(mTransaction);
-
-        assertWindowHigher(splitWindow1, belowTaskWindow);
-        assertWindowHigher(splitWindow2, belowTaskWindow);
-        assertWindowHigher(mDockedDividerWindow, splitWindow1);
-        assertWindowHigher(mDockedDividerWindow, splitWindow2);
-        assertWindowHigher(aboveTaskWindow, mDockedDividerWindow);
-        assertWindowHigher(pinnedWindow, aboveTaskWindow);
-    }
-
-
-    @Test
-    public void testDockedDividerPosition_noAboveTask() {
-        final Task pinnedTask =
-                createTask(mDisplayContent, WINDOWING_MODE_PINNED, ACTIVITY_TYPE_STANDARD);
-        final WindowState pinnedWindow =
-                createAppWindow(pinnedTask, ACTIVITY_TYPE_STANDARD, "pinnedWindow");
-
-        final Task belowTask =
-                createTask(mDisplayContent, WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD);
-        final WindowState belowTaskWindow =
-                createAppWindow(belowTask, ACTIVITY_TYPE_STANDARD, "belowTaskWindow");
-
-        final Task splitScreenTask1 =
-                createTask(mDisplayContent, WINDOWING_MODE_MULTI_WINDOW, ACTIVITY_TYPE_STANDARD);
-        final WindowState splitWindow1 =
-                createAppWindow(splitScreenTask1, ACTIVITY_TYPE_STANDARD, "splitWindow1");
-        final Task splitScreenTask2 =
-                createTask(mDisplayContent, WINDOWING_MODE_MULTI_WINDOW, ACTIVITY_TYPE_STANDARD);
-        final WindowState splitWindow2 =
-                createAppWindow(splitScreenTask2, ACTIVITY_TYPE_STANDARD, "splitWindow2");
-        splitScreenTask1.setAdjacentTaskFragment(splitScreenTask2, true /* moveTogether */);
-        splitScreenTask2.setAdjacentTaskFragment(splitScreenTask1, true /* moveTogether */);
-
-        mDisplayContent.assignChildLayers(mTransaction);
-
-        assertWindowHigher(splitWindow1, belowTaskWindow);
-        assertWindowHigher(splitWindow2, belowTaskWindow);
-        assertWindowHigher(mDockedDividerWindow, splitWindow1);
-        assertWindowHigher(mDockedDividerWindow, splitWindow2);
-        assertWindowHigher(pinnedWindow, mDockedDividerWindow);
-    }
-
-    @Test
     public void testAttachNavBarWhenEnteringRecents_expectNavBarHigherThanIme() {
         // create RecentsAnimationController
         IRecentsAnimationRunner mockRunner = mock(IRecentsAnimationRunner.class);
diff --git a/services/usage/java/com/android/server/usage/UsageStatsDatabase.java b/services/usage/java/com/android/server/usage/UsageStatsDatabase.java
index cc33f88..26a1e9d 100644
--- a/services/usage/java/com/android/server/usage/UsageStatsDatabase.java
+++ b/services/usage/java/com/android/server/usage/UsageStatsDatabase.java
@@ -16,6 +16,7 @@
 
 package com.android.server.usage;
 
+import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.app.usage.TimeSparseArray;
 import android.app.usage.UsageEvents;
@@ -24,6 +25,7 @@
 import android.os.Build;
 import android.os.SystemProperties;
 import android.util.ArrayMap;
+import android.util.ArraySet;
 import android.util.AtomicFile;
 import android.util.Slog;
 import android.util.SparseArray;
@@ -55,8 +57,11 @@
 import java.nio.file.StandardCopyOption;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
 
 /**
  * Provides an interface to query for UsageStat data from a Protocol Buffer database.
@@ -1252,6 +1257,10 @@
             Slog.wtf(TAG, "Attempting to backup UsageStats as XML with version " + version);
             return null;
         }
+        if (version < 1 || version > BACKUP_VERSION) {
+            Slog.wtf(TAG, "Attempting to backup UsageStats with an unknown version: " + version);
+            return null;
+        }
         synchronized (mLock) {
             ByteArrayOutputStream baos = new ByteArrayOutputStream();
             if (KEY_USAGE_STATS.equals(key)) {
@@ -1300,14 +1309,26 @@
             }
             return baos.toByteArray();
         }
+    }
 
+    /**
+     * Updates the set of packages given to only include those that have been used within the
+     * given timeframe (as defined by {@link UsageStats#getLastTimePackageUsed()}).
+     */
+    private void calculatePackagesUsedWithinTimeframe(
+            IntervalStats stats, Set<String> packagesList, long timeframeMs) {
+        for (UsageStats stat : stats.packageStats.values()) {
+            if (stat.getLastTimePackageUsed() > timeframeMs) {
+                packagesList.add(stat.mPackageName);
+            }
+        }
     }
 
     /**
      * @hide
      */
     @VisibleForTesting
-    public void applyRestoredPayload(String key, byte[] payload) {
+    public @NonNull Set<String> applyRestoredPayload(String key, byte[] payload) {
         synchronized (mLock) {
             if (KEY_USAGE_STATS.equals(key)) {
                 // Read stats files for the current device configs
@@ -1320,12 +1341,15 @@
                 IntervalStats yearlyConfigSource =
                         getLatestUsageStats(UsageStatsManager.INTERVAL_YEARLY);
 
+                final Set<String> packagesRestored = new ArraySet<>();
                 try {
                     DataInputStream in = new DataInputStream(new ByteArrayInputStream(payload));
                     int backupDataVersion = in.readInt();
 
                     // Can't handle this backup set
-                    if (backupDataVersion < 1 || backupDataVersion > BACKUP_VERSION) return;
+                    if (backupDataVersion < 1 || backupDataVersion > BACKUP_VERSION) {
+                        return packagesRestored;
+                    }
 
                     // Delete all stats files
                     // Do this after reading version and before actually restoring
@@ -1333,10 +1357,14 @@
                         deleteDirectoryContents(mIntervalDirs[i]);
                     }
 
+                    // 90 days before today in epoch
+                    final long timeframe = System.currentTimeMillis() - TimeUnit.DAYS.toMillis(90);
                     int fileCount = in.readInt();
                     for (int i = 0; i < fileCount; i++) {
                         IntervalStats stats = deserializeIntervalStats(getIntervalStatsBytes(in),
                                 backupDataVersion);
+                        calculatePackagesUsedWithinTimeframe(stats, packagesRestored, timeframe);
+                        packagesRestored.addAll(stats.packageStats.keySet());
                         stats = mergeStats(stats, dailyConfigSource);
                         putUsageStats(UsageStatsManager.INTERVAL_DAILY, stats);
                     }
@@ -1345,6 +1373,7 @@
                     for (int i = 0; i < fileCount; i++) {
                         IntervalStats stats = deserializeIntervalStats(getIntervalStatsBytes(in),
                                 backupDataVersion);
+                        calculatePackagesUsedWithinTimeframe(stats, packagesRestored, timeframe);
                         stats = mergeStats(stats, weeklyConfigSource);
                         putUsageStats(UsageStatsManager.INTERVAL_WEEKLY, stats);
                     }
@@ -1353,6 +1382,7 @@
                     for (int i = 0; i < fileCount; i++) {
                         IntervalStats stats = deserializeIntervalStats(getIntervalStatsBytes(in),
                                 backupDataVersion);
+                        calculatePackagesUsedWithinTimeframe(stats, packagesRestored, timeframe);
                         stats = mergeStats(stats, monthlyConfigSource);
                         putUsageStats(UsageStatsManager.INTERVAL_MONTHLY, stats);
                     }
@@ -1361,6 +1391,7 @@
                     for (int i = 0; i < fileCount; i++) {
                         IntervalStats stats = deserializeIntervalStats(getIntervalStatsBytes(in),
                                 backupDataVersion);
+                        calculatePackagesUsedWithinTimeframe(stats, packagesRestored, timeframe);
                         stats = mergeStats(stats, yearlyConfigSource);
                         putUsageStats(UsageStatsManager.INTERVAL_YEARLY, stats);
                     }
@@ -1370,7 +1401,9 @@
                 } finally {
                     indexFilesLocked();
                 }
+                return packagesRestored;
             }
+            return Collections.EMPTY_SET;
         }
     }
 
diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java
index ef13cd9..f595c3d 100644
--- a/services/usage/java/com/android/server/usage/UsageStatsService.java
+++ b/services/usage/java/com/android/server/usage/UsageStatsService.java
@@ -3034,7 +3034,8 @@
                     if (userStats == null) {
                         return; // user was stopped or removed
                     }
-                    userStats.applyRestoredPayload(key, payload);
+                    final Set<String> restoredApps = userStats.applyRestoredPayload(key, payload);
+                    mAppStandby.restoreAppsToRare(restoredApps, user);
                 }
             }
         }
diff --git a/services/usage/java/com/android/server/usage/UserUsageStatsService.java b/services/usage/java/com/android/server/usage/UserUsageStatsService.java
index c609add..34c6c16 100644
--- a/services/usage/java/com/android/server/usage/UserUsageStatsService.java
+++ b/services/usage/java/com/android/server/usage/UserUsageStatsService.java
@@ -63,6 +63,7 @@
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Set;
 
 /**
  * A per-user UsageStatsService. All methods are meant to be called with the main lock held
@@ -1374,8 +1375,8 @@
         return mDatabase.getBackupPayload(key);
     }
 
-    void applyRestoredPayload(String key, byte[] payload){
+    Set<String> applyRestoredPayload(String key, byte[] payload) {
         checkAndGetTimeLocked();
-        mDatabase.applyRestoredPayload(key, payload);
+        return mDatabase.applyRestoredPayload(key, payload);
     }
 }
diff --git a/services/usb/java/com/android/server/usb/hal/port/UsbPortHalInstance.java b/services/usb/java/com/android/server/usb/hal/port/UsbPortHalInstance.java
index 41f9fae..6fc4b67 100644
--- a/services/usb/java/com/android/server/usb/hal/port/UsbPortHalInstance.java
+++ b/services/usb/java/com/android/server/usb/hal/port/UsbPortHalInstance.java
@@ -31,15 +31,14 @@
     public static UsbPortHal getInstance(UsbPortManager portManager, IndentingPrintWriter pw) {
 
         logAndPrint(Log.DEBUG, null, "Querying USB HAL version");
-        if (UsbPortHidl.isServicePresent(null)) {
-            logAndPrint(Log.INFO, null, "USB HAL HIDL present");
-            return new UsbPortHidl(portManager, pw);
-        }
         if (UsbPortAidl.isServicePresent(null)) {
             logAndPrint(Log.INFO, null, "USB HAL AIDL present");
             return new UsbPortAidl(portManager, pw);
         }
-
+        if (UsbPortHidl.isServicePresent(null)) {
+            logAndPrint(Log.INFO, null, "USB HAL HIDL present");
+            return new UsbPortHidl(portManager, pw);
+        }
         return null;
     }
 }
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/HotwordDetectionConnection.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/HotwordDetectionConnection.java
index 434663b..25db81f 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/HotwordDetectionConnection.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/HotwordDetectionConnection.java
@@ -31,11 +31,18 @@
 import static com.android.internal.util.FrameworkStatsLog.HOTWORD_DETECTION_SERVICE_INIT_RESULT_REPORTED__RESULT__CALLBACK_INIT_STATE_UNKNOWN_TIMEOUT;
 import static com.android.internal.util.FrameworkStatsLog.HOTWORD_DETECTION_SERVICE_RESTARTED__REASON__AUDIO_SERVICE_DIED;
 import static com.android.internal.util.FrameworkStatsLog.HOTWORD_DETECTION_SERVICE_RESTARTED__REASON__SCHEDULE;
+import static com.android.internal.util.FrameworkStatsLog.HOTWORD_DETECTOR_EVENTS__EVENT__APP_REQUEST_UPDATE_STATE;
 import static com.android.internal.util.FrameworkStatsLog.HOTWORD_DETECTOR_EVENTS__EVENT__CALLBACK_UPDATE_STATE_AFTER_TIMEOUT;
+import static com.android.internal.util.FrameworkStatsLog.HOTWORD_DETECTOR_EVENTS__EVENT__EXTERNAL_SOURCE_DETECTED;
+import static com.android.internal.util.FrameworkStatsLog.HOTWORD_DETECTOR_EVENTS__EVENT__EXTERNAL_SOURCE_DETECT_SECURITY_EXCEPTION;
+import static com.android.internal.util.FrameworkStatsLog.HOTWORD_DETECTOR_EVENTS__EVENT__EXTERNAL_SOURCE_REJECTED;
 import static com.android.internal.util.FrameworkStatsLog.HOTWORD_DETECTOR_EVENTS__EVENT__ON_CONNECTED;
+import static com.android.internal.util.FrameworkStatsLog.HOTWORD_DETECTOR_EVENTS__EVENT__ON_DISCONNECTED;
 import static com.android.internal.util.FrameworkStatsLog.HOTWORD_DETECTOR_EVENTS__EVENT__REQUEST_BIND_SERVICE;
 import static com.android.internal.util.FrameworkStatsLog.HOTWORD_DETECTOR_EVENTS__EVENT__REQUEST_BIND_SERVICE_FAIL;
 import static com.android.internal.util.FrameworkStatsLog.HOTWORD_DETECTOR_EVENTS__EVENT__REQUEST_UPDATE_STATE;
+import static com.android.internal.util.FrameworkStatsLog.HOTWORD_DETECTOR_EVENTS__EVENT__START_EXTERNAL_SOURCE_DETECTION;
+import static com.android.internal.util.FrameworkStatsLog.HOTWORD_DETECTOR_EVENTS__EVENT__START_SOFTWARE_DETECTION;
 import static com.android.internal.util.FrameworkStatsLog.HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__DETECTOR_TYPE__NORMAL_DETECTOR;
 import static com.android.internal.util.FrameworkStatsLog.HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__DETECTOR_TYPE__TRUSTED_DETECTOR_DSP;
 import static com.android.internal.util.FrameworkStatsLog.HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__DETECTED;
@@ -146,6 +153,13 @@
     private static final int METRICS_KEYPHRASE_TRIGGERED_REJECT_UNEXPECTED_CALLBACK =
             HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__REJECT_UNEXPECTED_CALLBACK;
 
+    private static final int METRICS_EXTERNAL_SOURCE_DETECTED =
+            HOTWORD_DETECTOR_EVENTS__EVENT__EXTERNAL_SOURCE_DETECTED;
+    private static final int METRICS_EXTERNAL_SOURCE_REJECTED =
+            HOTWORD_DETECTOR_EVENTS__EVENT__EXTERNAL_SOURCE_REJECTED;
+    private static final int METRICS_EXTERNAL_SOURCE_DETECT_SECURITY_EXCEPTION =
+            HOTWORD_DETECTOR_EVENTS__EVENT__EXTERNAL_SOURCE_DETECT_SECURITY_EXCEPTION;
+
     private final Executor mAudioCopyExecutor = Executors.newCachedThreadPool();
     // TODO: This may need to be a Handler(looper)
     private final ScheduledExecutorService mScheduledExecutorService =
@@ -382,6 +396,10 @@
     }
 
     void updateStateLocked(PersistableBundle options, SharedMemory sharedMemory) {
+        HotwordMetricsLogger.writeDetectorEvent(mDetectorType,
+                HOTWORD_DETECTOR_EVENTS__EVENT__APP_REQUEST_UPDATE_STATE,
+                mVoiceInteractionServiceUid);
+
         // Prevent doing the init late, so restart is handled equally to a clean process start.
         // TODO(b/191742511): this logic needs a test
         if (!mUpdateStateAfterStartFinished.get()
@@ -422,14 +440,23 @@
                     Slog.d(TAG, "onDetected");
                 }
                 synchronized (mLock) {
+                    HotwordMetricsLogger.writeKeyphraseTriggerEvent(
+                            mDetectorType,
+                            HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__DETECTED);
                     if (!mPerformingSoftwareHotwordDetection) {
                         Slog.i(TAG, "Hotword detection has already completed");
+                        HotwordMetricsLogger.writeKeyphraseTriggerEvent(
+                                mDetectorType,
+                                METRICS_KEYPHRASE_TRIGGERED_DETECT_UNEXPECTED_CALLBACK);
                         return;
                     }
                     mPerformingSoftwareHotwordDetection = false;
                     try {
                         enforcePermissionsForDataDelivery();
                     } catch (SecurityException e) {
+                        HotwordMetricsLogger.writeKeyphraseTriggerEvent(
+                                mDetectorType,
+                                METRICS_KEYPHRASE_TRIGGERED_DETECT_SECURITY_EXCEPTION);
                         mSoftwareCallback.onError();
                         return;
                     }
@@ -449,6 +476,9 @@
                 if (DEBUG) {
                     Slog.wtf(TAG, "onRejected");
                 }
+                HotwordMetricsLogger.writeKeyphraseTriggerEvent(
+                        mDetectorType,
+                        HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__REJECTED);
                 // onRejected isn't allowed here, and we are not expecting it.
             }
         };
@@ -460,6 +490,9 @@
                         null,
                         null,
                         internalCallback));
+        HotwordMetricsLogger.writeDetectorEvent(mDetectorType,
+                HOTWORD_DETECTOR_EVENTS__EVENT__START_SOFTWARE_DETECTION,
+                mVoiceInteractionServiceUid);
     }
 
     public void startListeningFromExternalSource(
@@ -891,6 +924,9 @@
                                 @Override
                                 public void onRejected(HotwordRejectedResult result)
                                         throws RemoteException {
+                                    HotwordMetricsLogger.writeDetectorEvent(mDetectorType,
+                                            METRICS_EXTERNAL_SOURCE_REJECTED,
+                                            mVoiceInteractionServiceUid);
                                     mScheduledExecutorService.schedule(
                                             () -> {
                                                 bestEffortClose(serviceAudioSink, audioSource);
@@ -912,6 +948,9 @@
                                 @Override
                                 public void onDetected(HotwordDetectedResult triggerResult)
                                         throws RemoteException {
+                                    HotwordMetricsLogger.writeDetectorEvent(mDetectorType,
+                                            METRICS_EXTERNAL_SOURCE_DETECTED,
+                                            mVoiceInteractionServiceUid);
                                     mScheduledExecutorService.schedule(
                                             () -> {
                                                 bestEffortClose(serviceAudioSink, audioSource);
@@ -922,6 +961,9 @@
                                     try {
                                         enforcePermissionsForDataDelivery();
                                     } catch (SecurityException e) {
+                                        HotwordMetricsLogger.writeDetectorEvent(mDetectorType,
+                                                METRICS_EXTERNAL_SOURCE_DETECT_SECURITY_EXCEPTION,
+                                                mVoiceInteractionServiceUid);
                                         callback.onError();
                                         return;
                                     }
@@ -942,6 +984,9 @@
                     // A copy of this has been created and passed to the hotword validator
                     bestEffortClose(serviceAudioSource);
                 });
+        HotwordMetricsLogger.writeDetectorEvent(mDetectorType,
+                HOTWORD_DETECTOR_EVENTS__EVENT__START_EXTERNAL_SOURCE_DETECTION,
+                mVoiceInteractionServiceUid);
     }
 
     private class ServiceConnectionFactory {
@@ -1002,7 +1047,12 @@
                     return;
                 }
                 mIsBound = connected;
-                if (connected && !mIsLoggedFirstConnect) {
+
+                if (!connected) {
+                    HotwordMetricsLogger.writeDetectorEvent(mDetectorType,
+                            HOTWORD_DETECTOR_EVENTS__EVENT__ON_DISCONNECTED,
+                            mVoiceInteractionServiceUid);
+                } else if (!mIsLoggedFirstConnect) {
                     mIsLoggedFirstConnect = true;
                     HotwordMetricsLogger.writeDetectorEvent(mDetectorType,
                             HOTWORD_DETECTOR_EVENTS__EVENT__ON_CONNECTED,
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
index bcfee82..0ce0265 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
@@ -102,6 +102,7 @@
 import com.android.server.pm.UserManagerInternal;
 import com.android.server.pm.permission.LegacyPermissionManagerInternal;
 import com.android.server.soundtrigger.SoundTriggerInternal;
+import com.android.server.utils.Slogf;
 import com.android.server.utils.TimingsTraceAndSlog;
 import com.android.server.wm.ActivityTaskManagerInternal;
 
@@ -134,18 +135,21 @@
     private final RemoteCallbackList<IVoiceInteractionSessionListener>
             mVoiceInteractionSessionListeners = new RemoteCallbackList<>();
 
+    // TODO(b/226201975): remove once RoleService supports pre-created users
+    private final ArrayList<UserHandle> mIgnoredPreCreatedUsers = new ArrayList<>();
+
     public VoiceInteractionManagerService(Context context) {
         super(context);
         mContext = context;
         mResolver = context.getContentResolver();
+        mUserManagerInternal = Objects.requireNonNull(
+                LocalServices.getService(UserManagerInternal.class));
         mDbHelper = new DatabaseHelper(context);
         mServiceStub = new VoiceInteractionManagerServiceStub();
         mAmInternal = Objects.requireNonNull(
                 LocalServices.getService(ActivityManagerInternal.class));
         mAtmInternal = Objects.requireNonNull(
                 LocalServices.getService(ActivityTaskManagerInternal.class));
-        mUserManagerInternal = Objects.requireNonNull(
-                LocalServices.getService(UserManagerInternal.class));
 
         LegacyPermissionManagerInternal permissionManagerInternal = LocalServices.getService(
                 LegacyPermissionManagerInternal.class);
@@ -300,6 +304,25 @@
             }
             return hotwordDetectionConnection.mIdentity;
         }
+
+        @Override
+        public void onPreCreatedUserConversion(int userId) {
+            Slogf.d(TAG, "onPreCreatedUserConversion(%d)", userId);
+
+            for (int i = 0; i < mIgnoredPreCreatedUsers.size(); i++) {
+                UserHandle preCreatedUser = mIgnoredPreCreatedUsers.get(i);
+                if (preCreatedUser.getIdentifier() == userId) {
+                    Slogf.d(TAG, "Updating role on pre-created user %d", userId);
+                    mServiceStub.mRoleObserver.onRoleHoldersChanged(RoleManager.ROLE_ASSISTANT,
+                            preCreatedUser);
+                    mIgnoredPreCreatedUsers.remove(i);
+                    return;
+                }
+            }
+            Slogf.w(TAG, "onPreCreatedUserConversion(%d): not available on "
+                    + "mIgnoredPreCreatedUserIds (%s)", userId, mIgnoredPreCreatedUsers);
+        }
+
     }
 
     // implementation entry point and binder service
@@ -317,10 +340,12 @@
         private boolean mTemporarilyDisabled;
 
         private final boolean mEnableService;
+        // TODO(b/226201975): remove reference once RoleService supports pre-created users
+        private final RoleObserver mRoleObserver;
 
         VoiceInteractionManagerServiceStub() {
             mEnableService = shouldEnableService(mContext);
-            new RoleObserver(mContext.getMainExecutor());
+            mRoleObserver = new RoleObserver(mContext.getMainExecutor());
         }
 
         void handleUserStop(String packageName, int userHandle) {
@@ -1884,6 +1909,7 @@
                 pw.println("  mTemporarilyDisabled: " + mTemporarilyDisabled);
                 pw.println("  mCurUser: " + mCurUser);
                 pw.println("  mCurUserSupported: " + mCurUserSupported);
+                pw.println("  mIgnoredPreCreatedUsers: " + mIgnoredPreCreatedUsers);
                 dumpSupportedUsers(pw, "  ");
                 mDbHelper.dump(pw);
                 if (mImpl == null) {
@@ -1997,6 +2023,23 @@
 
                 List<String> roleHolders = mRm.getRoleHoldersAsUser(roleName, user);
 
+                // TODO(b/226201975): this method is beling called when a pre-created user is added,
+                // at which point it doesn't have any role holders. But it's not called again when
+                // the actual user is added (i.e., when the  pre-created user is converted), so we
+                // need to save the user id and call this method again when it's converted
+                // (at onPreCreatedUserConversion()).
+                // Once RoleService properly handles pre-created users, this workaround should be
+                // removed.
+                if (roleHolders.isEmpty()) {
+                    UserInfo userInfo = mUserManagerInternal.getUserInfo(user.getIdentifier());
+                    if (userInfo != null && userInfo.preCreated) {
+                        Slogf.d(TAG, "onRoleHoldersChanged(): ignoring pre-created user %s for now",
+                                userInfo.toFullString());
+                        mIgnoredPreCreatedUsers.add(user);
+                        return;
+                    }
+                }
+
                 int userId = user.getIdentifier();
                 if (roleHolders.isEmpty()) {
                     Settings.Secure.putStringForUser(getContext().getContentResolver(),
diff --git a/telephony/common/com/android/internal/telephony/SmsApplication.java b/telephony/common/com/android/internal/telephony/SmsApplication.java
index 4924a82..4230225 100644
--- a/telephony/common/com/android/internal/telephony/SmsApplication.java
+++ b/telephony/common/com/android/internal/telephony/SmsApplication.java
@@ -1146,4 +1146,35 @@
         }
         return null;
     }
+
+    /**
+     * Check if a package is default mms app (or equivalent, like bluetooth)
+     *
+     * @param context context from the calling app
+     * @param packageName the name of the package to be checked
+     * @return true if the package is default mms app or bluetooth
+     */
+    @UnsupportedAppUsage
+    public static boolean isDefaultMmsApplication(Context context, String packageName) {
+        if (packageName == null) {
+            return false;
+        }
+        String defaultMmsPackage = getDefaultMmsApplicationPackageName(context);
+        String bluetoothPackageName = context.getResources()
+                .getString(com.android.internal.R.string.config_systemBluetoothStack);
+
+        if ((defaultMmsPackage != null && defaultMmsPackage.equals(packageName))
+                || bluetoothPackageName.equals(packageName)) {
+            return true;
+        }
+        return false;
+    }
+
+    private static String getDefaultMmsApplicationPackageName(Context context) {
+        ComponentName component = getDefaultMmsApplication(context, false);
+        if (component != null) {
+            return component.getPackageName();
+        }
+        return null;
+    }
 }
diff --git a/telephony/java/android/telephony/CellSignalStrengthNr.java b/telephony/java/android/telephony/CellSignalStrengthNr.java
index 38becc6..297940e 100644
--- a/telephony/java/android/telephony/CellSignalStrengthNr.java
+++ b/telephony/java/android/telephony/CellSignalStrengthNr.java
@@ -49,7 +49,7 @@
     private static final String TAG = "CellSignalStrengthNr";
 
     // Lifted from Default carrier configs and max range of SSRSRP
-    // Boundaries: [-140 dB, -44 dB]
+    // Boundaries: [-156 dB, -31 dB]
     private int[] mSsRsrpThresholds = new int[] {
             -110, /* SIGNAL_STRENGTH_POOR */
             -90, /* SIGNAL_STRENGTH_MODERATE */
@@ -173,14 +173,14 @@
      */
     public CellSignalStrengthNr(int csiRsrp, int csiRsrq, int csiSinr, int csiCqiTableIndex,
             List<Byte> csiCqiReport, int ssRsrp, int ssRsrq, int ssSinr) {
-        mCsiRsrp = inRangeOrUnavailable(csiRsrp, -140, -44);
+        mCsiRsrp = inRangeOrUnavailable(csiRsrp, -156, -31);
         mCsiRsrq = inRangeOrUnavailable(csiRsrq, -20, -3);
         mCsiSinr = inRangeOrUnavailable(csiSinr, -23, 23);
         mCsiCqiTableIndex = inRangeOrUnavailable(csiCqiTableIndex, 1, 3);
         mCsiCqiReport = csiCqiReport.stream()
-                .map(cqi -> new Integer(inRangeOrUnavailable(Byte.toUnsignedInt(cqi), 0, 15)))
+                .map(cqi -> inRangeOrUnavailable(Byte.toUnsignedInt(cqi), 0, 15))
                 .collect(Collectors.toList());
-        mSsRsrp = inRangeOrUnavailable(ssRsrp, -140, -44);
+        mSsRsrp = inRangeOrUnavailable(ssRsrp, -156, -31);
         mSsRsrq = inRangeOrUnavailable(ssRsrq, -43, 20);
         mSsSinr = inRangeOrUnavailable(ssSinr, -23, 40);
         updateLevel(null, null);
@@ -212,8 +212,8 @@
     }
 
     /**
-     * Reference: 3GPP TS 38.215.
-     * Range: -140 dBm to -44 dBm.
+     * Reference: 3GPP TS 38.133 10.1.6.1.
+     * Range: -156 dBm to -31 dBm.
      * @return SS reference signal received power, {@link CellInfo#UNAVAILABLE} means unreported
      * value.
      */
@@ -242,8 +242,8 @@
     }
 
     /**
-     * Reference: 3GPP TS 38.215.
-     * Range: -140 dBm to -44 dBm.
+     * Reference: 3GPP TS 38.133 10.1.6.1.
+     * Range: -156 dBm to -31 dBm.
      * @return CSI reference signal received power, {@link CellInfo#UNAVAILABLE} means unreported
      * value.
      */
diff --git a/telephony/java/android/telephony/PhoneNumberFormattingTextWatcher.java b/telephony/java/android/telephony/PhoneNumberFormattingTextWatcher.java
index 24dfbd0..a004cc3 100644
--- a/telephony/java/android/telephony/PhoneNumberFormattingTextWatcher.java
+++ b/telephony/java/android/telephony/PhoneNumberFormattingTextWatcher.java
@@ -21,6 +21,7 @@
 import android.text.Editable;
 import android.text.Selection;
 import android.text.TextWatcher;
+import android.text.style.TtsSpan;
 
 import com.android.i18n.phonenumbers.AsYouTypeFormatter;
 import com.android.i18n.phonenumbers.PhoneNumberUtil;
@@ -119,6 +120,13 @@
             }
             mSelfChange = false;
         }
+
+        //remove previous TTS spans
+        TtsSpan[] ttsSpans = s.getSpans(0, s.length(), TtsSpan.class);
+        for (TtsSpan ttsSpan : ttsSpans) {
+            s.removeSpan(ttsSpan);
+        }
+
         PhoneNumberUtils.ttsSpanAsPhoneNumber(s, 0, s.length());
     }
 
diff --git a/telephony/java/android/telephony/UiccSlotInfo.java b/telephony/java/android/telephony/UiccSlotInfo.java
index 06c5b5c..5e02532 100644
--- a/telephony/java/android/telephony/UiccSlotInfo.java
+++ b/telephony/java/android/telephony/UiccSlotInfo.java
@@ -129,7 +129,7 @@
         this.mLogicalSlotIdx = logicalSlotIdx;
         this.mIsExtendedApduSupported = isExtendedApduSupported;
         this.mIsRemovable = false;
-        this.mPortList = null;
+        this.mPortList = new ArrayList<UiccPortInfo>();
     }
 
     /**
diff --git a/telephony/java/android/telephony/data/ApnSetting.java b/telephony/java/android/telephony/data/ApnSetting.java
index 235ed84..3ed87e1 100644
--- a/telephony/java/android/telephony/data/ApnSetting.java
+++ b/telephony/java/android/telephony/data/ApnSetting.java
@@ -1137,10 +1137,7 @@
             return false;
         }
         // DEFAULT can handle HIPRI.
-        if (hasApnType(type)) {
-            return true;
-        }
-        return false;
+        return hasApnType(type);
     }
 
     // Check whether the types of two APN same (even only one type of each APN is same).
@@ -2193,11 +2190,10 @@
             }
             if ((mApnTypeBitmask & TYPE_MMS) != 0 && !TextUtils.isEmpty(mMmsProxyAddress)
                     && mMmsProxyAddress.startsWith("http")) {
-                if (Build.IS_DEBUGGABLE) {
-                    throw new IllegalArgumentException("mms proxy(" +  mMmsProxyAddress
-                            + ") should be a hostname, not a url");
-                }
-                return null;
+                Log.wtf(LOG_TAG,"mms proxy(" + mMmsProxyAddress
+                        + ") should be a hostname, not a url");
+                Uri mMmsProxyAddressUri = Uri.parse(mMmsProxyAddress);
+                mMmsProxyAddress = mMmsProxyAddressUri.getHost();
             }
             return new ApnSetting(this);
         }
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/CommonAssertions.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/CommonAssertions.kt
index 7f309e1..315c40f 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/CommonAssertions.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/CommonAssertions.kt
@@ -18,10 +18,13 @@
 package com.android.server.wm.flicker
 
 import com.android.server.wm.flicker.helpers.WindowUtils
+import com.android.server.wm.flicker.traces.region.RegionSubject
 import com.android.server.wm.traces.common.FlickerComponentName
 
-val LAUNCHER_COMPONENT = FlickerComponentName("com.google.android.apps.nexuslauncher",
-        "com.google.android.apps.nexuslauncher.NexusLauncherActivity")
+val LAUNCHER_COMPONENT = FlickerComponentName(
+    "com.google.android.apps.nexuslauncher",
+    "com.google.android.apps.nexuslauncher.NexusLauncherActivity"
+)
 
 /**
  * Checks that [FlickerComponentName.STATUS_BAR] window is visible and above the app windows in
@@ -109,9 +112,9 @@
 fun FlickerTestParameter.navBarLayerPositionStart() {
     assertLayersStart {
         val display = this.entry.displays.minByOrNull { it.id }
-                ?: throw RuntimeException("There is no display!")
+            ?: throw RuntimeException("There is no display!")
         this.visibleRegion(FlickerComponentName.NAV_BAR)
-                .coversExactly(WindowUtils.getNavigationBarPosition(display))
+            .coversExactly(WindowUtils.getNavigationBarPosition(display, isGesturalNavigation))
     }
 }
 
@@ -122,9 +125,9 @@
 fun FlickerTestParameter.navBarLayerPositionEnd() {
     assertLayersEnd {
         val display = this.entry.displays.minByOrNull { it.id }
-                ?: throw RuntimeException("There is no display!")
+            ?: throw RuntimeException("There is no display!")
         this.visibleRegion(FlickerComponentName.NAV_BAR)
-                .coversExactly(WindowUtils.getNavigationBarPosition(display))
+            .coversExactly(WindowUtils.getNavigationBarPosition(display, isGesturalNavigation))
     }
 }
 
@@ -173,6 +176,33 @@
 }
 
 /**
+ * Asserts that the visibleRegion of the [FlickerComponentName.SNAPSHOT] layer can cover
+ * the visibleRegion of the given app component exactly
+ */
+fun FlickerTestParameter.snapshotStartingWindowLayerCoversExactlyOnApp(
+        component: FlickerComponentName) {
+    assertLayers {
+        invoke("snapshotStartingWindowLayerCoversExactlyOnApp") {
+            val snapshotLayers = it.subjects.filter { subject ->
+                subject.name.contains(
+                        FlickerComponentName.SNAPSHOT.toLayerName()) && subject.isVisible
+            }
+            // Verify the size of snapshotRegion covers appVisibleRegion exactly in animation.
+            if (snapshotLayers.isNotEmpty()) {
+                val visibleAreas = snapshotLayers.mapNotNull { snapshotLayer ->
+                    snapshotLayer.layer?.visibleRegion
+                }.toTypedArray()
+                val snapshotRegion = RegionSubject.assertThat(visibleAreas, this, timestamp)
+                val appVisibleRegion = it.visibleRegion(component)
+                if (snapshotRegion.region.isNotEmpty) {
+                    snapshotRegion.coversExactly(appVisibleRegion.region)
+                }
+            }
+        }
+    }
+}
+
+/**
  * Asserts that:
  *     [originalLayer] is visible at the start of the trace
  *     [originalLayer] becomes invisible during the trace and (in the same entry) [newLayer]
@@ -216,11 +246,11 @@
 
     assertLayersStart {
         this.isVisible(originalLayer)
-                .isInvisible(newLayer)
+            .isInvisible(newLayer)
     }
 
     assertLayersEnd {
         this.isInvisible(originalLayer)
-                .isVisible(newLayer)
+            .isVisible(newLayer)
     }
 }
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeEditorPopupDialogTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeEditorPopupDialogTest.kt
index 6257484..2e29b3e 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeEditorPopupDialogTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/CloseImeEditorPopupDialogTest.kt
@@ -59,7 +59,7 @@
             }
             transitions {
                 imeTestApp.dismissDialog(wmHelper)
-                instrumentation.uiAutomation.syncInputTransactions()
+                wmHelper.waitImeGone()
             }
             teardown {
                 eachRun {
@@ -91,7 +91,7 @@
                     .then()
                     .isVisible(FlickerComponentName.IME_SNAPSHOT)
                     .then()
-                    .isInvisible(FlickerComponentName.IME_SNAPSHOT)
+                    .isInvisible(FlickerComponentName.IME_SNAPSHOT, isOptional = true)
                     .isInvisible(FlickerComponentName.IME)
         }
     }
diff --git a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/OpenImeWindowFromFixedOrientationAppTest.kt b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/OpenImeWindowFromFixedOrientationAppTest.kt
index 78aea1f..88fb1a2 100644
--- a/tests/FlickerTests/src/com/android/server/wm/flicker/ime/OpenImeWindowFromFixedOrientationAppTest.kt
+++ b/tests/FlickerTests/src/com/android/server/wm/flicker/ime/OpenImeWindowFromFixedOrientationAppTest.kt
@@ -17,23 +17,25 @@
 package com.android.server.wm.flicker.ime
 
 import android.app.Instrumentation
+import android.platform.test.annotations.Postsubmit
 import android.platform.test.annotations.Presubmit
 import android.platform.test.annotations.RequiresDevice
 import android.view.Surface
 import android.view.WindowManagerPolicyConstants
 import androidx.test.filters.FlakyTest
 import androidx.test.platform.app.InstrumentationRegistry
+import com.android.launcher3.tapl.LauncherInstrumentation
 import com.android.server.wm.flicker.FlickerBuilderProvider
 import com.android.server.wm.flicker.FlickerParametersRunnerFactory
 import com.android.server.wm.flicker.FlickerTestParameter
 import com.android.server.wm.flicker.FlickerTestParameterFactory
 import com.android.server.wm.flicker.annotation.Group2
 import com.android.server.wm.flicker.dsl.FlickerBuilder
-import com.android.server.wm.flicker.helpers.FixedOrientationAppHelper
 import com.android.server.wm.flicker.helpers.ImeAppAutoFocusHelper
 import com.android.server.wm.flicker.helpers.setRotation
-import com.android.server.wm.flicker.navBarLayerRotatesAndScales
+import com.android.server.wm.flicker.navBarLayerPositionEnd
 import com.android.server.wm.flicker.navBarWindowIsVisible
+import com.android.server.wm.flicker.snapshotStartingWindowLayerCoversExactlyOnApp
 import com.android.server.wm.flicker.statusBarLayerRotatesScales
 import com.android.server.wm.flicker.statusBarWindowIsVisible
 import org.junit.FixMethodOrder
@@ -43,7 +45,8 @@
 import org.junit.runners.Parameterized
 
 /**
- * Test IME window layer will become visible when switching from the fixed orientation activity.
+ * Test IME window layer will become visible when switching from the fixed orientation activity
+ * (e.g. Launcher activity).
  * To run this test: `atest FlickerTests:OpenImeWindowFromFixedOrientationAppTest`
  */
 @RequiresDevice
@@ -53,24 +56,31 @@
 @Group2
 class OpenImeWindowFromFixedOrientationAppTest(private val testSpec: FlickerTestParameter) {
     private val instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation()
-    private val fixedOrientationApp = FixedOrientationAppHelper(instrumentation)
     private val imeTestApp = ImeAppAutoFocusHelper(instrumentation, testSpec.startRotation)
+    private val taplInstrumentation = LauncherInstrumentation()
 
     @FlickerBuilderProvider
     fun buildFlicker(): FlickerBuilder {
         return FlickerBuilder(instrumentation).apply {
             setup {
+                test {
+                    // Launch the activity with expecting IME will be shown.
+                    imeTestApp.launchViaIntent(wmHelper)
+                }
                 eachRun {
-                    fixedOrientationApp.launchViaIntent(wmHelper)
-                    this.setRotation(Surface.ROTATION_90)
+                    // Swiping out the IME activity to home.
+                    taplInstrumentation.goHome()
+                    wmHelper.waitForHomeActivityVisible()
                 }
             }
             transitions {
+                // Bring the exist IME activity to the front in landscape mode device rotation.
+                setRotation(Surface.ROTATION_90)
                 imeTestApp.launchViaIntent(wmHelper)
             }
             teardown {
                 test {
-                    fixedOrientationApp.exit(wmHelper)
+                    imeTestApp.exit(wmHelper)
                 }
             }
         }
@@ -90,7 +100,7 @@
 
     @Presubmit
     @Test
-    fun navBarLayerRotatesAndScales() = testSpec.navBarLayerRotatesAndScales()
+    fun navBarLayerRotatesAndScales() = testSpec.navBarLayerPositionEnd()
 
     @FlakyTest(bugId = 206753786)
     fun statusBarLayerRotatesScales() = testSpec.statusBarLayerRotatesScales()
@@ -99,6 +109,12 @@
     @Test
     fun imeLayerBecomesVisible() = testSpec.imeLayerBecomesVisible()
 
+    @Postsubmit
+    @Test
+    fun snapshotStartingWindowLayerCoversExactlyOnApp() {
+        testSpec.snapshotStartingWindowLayerCoversExactlyOnApp(imeTestApp.component)
+    }
+
     companion object {
         /**
          * Creates the test configurations.
@@ -112,7 +128,7 @@
             return FlickerTestParameterFactory.getInstance()
                     .getConfigNonRotationTests(
                             repetitions = 3,
-                            supportedRotations = listOf(Surface.ROTATION_0),
+                            supportedRotations = listOf(Surface.ROTATION_90),
                             supportedNavigationModes = listOf(
                                     WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY
                             )
diff --git a/tests/FlickerTests/test-apps/flickerapp/AndroidManifest.xml b/tests/FlickerTests/test-apps/flickerapp/AndroidManifest.xml
index 43aa4b1..3e2130d 100644
--- a/tests/FlickerTests/test-apps/flickerapp/AndroidManifest.xml
+++ b/tests/FlickerTests/test-apps/flickerapp/AndroidManifest.xml
@@ -45,6 +45,7 @@
              android:theme="@style/CutoutShortEdges"
              android:taskAffinity="com.android.server.wm.flicker.testapp.ImeActivityAutoFocus"
              android:windowSoftInputMode="stateVisible"
+             android:configChanges="orientation|screenSize"
              android:label="ImeAppAutoFocus"
              android:exported="true">
             <intent-filter>
diff --git a/tests/WindowInsetsTests/res/layout/controller_activity.xml b/tests/WindowInsetsTests/res/layout/controller_activity.xml
index d51a4dd..5550eab 100644
--- a/tests/WindowInsetsTests/res/layout/controller_activity.xml
+++ b/tests/WindowInsetsTests/res/layout/controller_activity.xml
@@ -88,7 +88,7 @@
 
         <TextView
             android:id="@+id/textViewControllableInsets"
-            android:layout_width="wrap_content"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_margin="5dp" />
 
diff --git a/tests/WindowInsetsTests/res/values/strings.xml b/tests/WindowInsetsTests/res/values/strings.xml
index d6355f5..516d458 100644
--- a/tests/WindowInsetsTests/res/values/strings.xml
+++ b/tests/WindowInsetsTests/res/values/strings.xml
@@ -22,7 +22,7 @@
 
     <!-- The item positions should match the flag values respectively. -->
     <string-array name="behaviors">
-        <item>BEHAVIOR_SHOW_BARS_BY_TOUCH</item>
+        <item>BEHAVIOR_SHOW_BARS_BY_TOUCH (deprecated)</item>
         <item>BEHAVIOR_DEFAULT</item>
         <item>BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE</item>
     </string-array>
diff --git a/tests/WindowInsetsTests/src/com/google/android/test/windowinsetstests/ControllerActivity.java b/tests/WindowInsetsTests/src/com/google/android/test/windowinsetstests/ControllerActivity.java
index 95fd959..e6b60cf 100644
--- a/tests/WindowInsetsTests/src/com/google/android/test/windowinsetstests/ControllerActivity.java
+++ b/tests/WindowInsetsTests/src/com/google/android/test/windowinsetstests/ControllerActivity.java
@@ -83,7 +83,51 @@
         final View contentView = findViewById(R.id.content);
         contentView.setOnApplyWindowInsetsListener(this);
         contentView.getWindowInsetsController().addOnControllableInsetsChangedListener(
-                (c, types) -> mTextControllableInsets.setText("ControllableInsetsTypes=" + types));
+                (c, types) -> mTextControllableInsets.setText(
+                        "ControllableInsetsTypes:\n" + insetsTypesToString(types)));
+    }
+
+    private static String insetsTypesToString(int types) {
+        if (types == 0) {
+            return "none";
+        }
+        final StringBuilder sb = new StringBuilder();
+        if ((types & Type.statusBars()) != 0) {
+            types &= ~Type.statusBars();
+            sb.append("statusBars ");
+        }
+        if ((types & Type.navigationBars()) != 0) {
+            types &= ~Type.navigationBars();
+            sb.append("navigationBars ");
+        }
+        if ((types & Type.captionBar()) != 0) {
+            types &= ~Type.captionBar();
+            sb.append("captionBar ");
+        }
+        if ((types & Type.ime()) != 0) {
+            types &= ~Type.ime();
+            sb.append("ime ");
+        }
+        if ((types & Type.systemGestures()) != 0) {
+            types &= ~Type.systemGestures();
+            sb.append("systemGestures ");
+        }
+        if ((types & Type.mandatorySystemGestures()) != 0) {
+            types &= ~Type.mandatorySystemGestures();
+            sb.append("mandatorySystemGestures ");
+        }
+        if ((types & Type.tappableElement()) != 0) {
+            types &= ~Type.tappableElement();
+            sb.append("tappableElement ");
+        }
+        if ((types & Type.displayCutout()) != 0) {
+            types &= ~Type.displayCutout();
+            sb.append("displayCutout ");
+        }
+        if (types != 0) {
+            sb.append("unknownTypes:").append(types);
+        }
+        return sb.toString();
     }
 
     @Override
diff --git a/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java b/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java
index 1fe13fe..06cbeb5 100644
--- a/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java
+++ b/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java
@@ -124,16 +124,6 @@
     @SmallTest
     public void testSET_ORIENTATION() {
         try {
-            mWm.updateRotation(true, false);
-            fail("IWindowManager.updateRotation did not throw SecurityException as"
-                    + " expected");
-        } catch (SecurityException e) {
-            // expected
-        } catch (RemoteException e) {
-            fail("Unexpected remote exception");
-        }
-
-        try {
             mWm.freezeRotation(-1);
             fail("IWindowManager.freezeRotation did not throw SecurityException as"
                     + " expected");
diff --git a/tools/aapt2/link/ManifestFixer.cpp b/tools/aapt2/link/ManifestFixer.cpp
index d432341..948b11b 100644
--- a/tools/aapt2/link/ManifestFixer.cpp
+++ b/tools/aapt2/link/ManifestFixer.cpp
@@ -477,6 +477,7 @@
   manifest_action["compatible-screens"]["screen"];
   manifest_action["supports-gl-texture"];
   manifest_action["restrict-update"];
+  manifest_action["install-constraints"]["fingerprint-prefix"];
   manifest_action["package-verifier"];
   manifest_action["meta-data"] = meta_data_action;
   manifest_action["uses-split"].Action(RequiredNameIsJavaPackage);